From 5e1da48d0cf43024a35bf746ba4428c7e7324897 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 3 Dec 2016 17:12:18 +0100 Subject: [PATCH 01/48] Remove external javascript code from the git repo, add jsdeps.sh script (#5535) --- bin/jsdeps.sh | 228 + plugins/enigma/openpgp.min.js | 8 - .../codemirror/addon/selection/active-line.js | 74 - .../managesieve/codemirror/lib/codemirror.css | 341 - .../managesieve/codemirror/lib/codemirror.js | 9096 ----------------- .../codemirror/mode/sieve/sieve.js | 193 - program/include/rcmail.php | 2 +- program/js/editor.js | 4 +- program/js/jquery.min.js | 36 - program/js/jstz.min.js | 35 - program/js/publickey.js | 487 - program/js/tinymce/langs/ar.js | 220 - program/js/tinymce/langs/ar_SA.js | 194 - program/js/tinymce/langs/az.js | 197 - program/js/tinymce/langs/be.js | 219 - program/js/tinymce/langs/bg_BG.js | 219 - program/js/tinymce/langs/bn_BD.js | 179 - program/js/tinymce/langs/bs.js | 197 - program/js/tinymce/langs/ca.js | 219 - program/js/tinymce/langs/cs.js | 219 - program/js/tinymce/langs/cs_CZ.js | 213 - program/js/tinymce/langs/cy.js | 179 - program/js/tinymce/langs/da.js | 219 - program/js/tinymce/langs/de.js | 219 - program/js/tinymce/langs/de_AT.js | 219 - program/js/tinymce/langs/dv.js | 192 - program/js/tinymce/langs/el.js | 219 - program/js/tinymce/langs/en_CA.js | 219 - program/js/tinymce/langs/en_GB.js | 179 - program/js/tinymce/langs/eo.js | 219 - program/js/tinymce/langs/es.js | 219 - program/js/tinymce/langs/es_MX.js | 219 - program/js/tinymce/langs/et.js | 219 - program/js/tinymce/langs/eu.js | 200 - program/js/tinymce/langs/fa.js | 187 - program/js/tinymce/langs/fa_IR.js | 220 - program/js/tinymce/langs/fi.js | 219 - program/js/tinymce/langs/fo.js | 219 - program/js/tinymce/langs/fr_CH.js | 219 - program/js/tinymce/langs/fr_FR.js | 219 - program/js/tinymce/langs/ga.js | 219 - program/js/tinymce/langs/gd.js | 219 - program/js/tinymce/langs/gl.js | 191 - program/js/tinymce/langs/he_IL.js | 220 - program/js/tinymce/langs/hi_IN.js | 219 - program/js/tinymce/langs/hr.js | 219 - program/js/tinymce/langs/hu_HU.js | 219 - program/js/tinymce/langs/hy.js | 200 - program/js/tinymce/langs/id.js | 219 - program/js/tinymce/langs/is_IS.js | 200 - program/js/tinymce/langs/it.js | 219 - program/js/tinymce/langs/ja.js | 219 - program/js/tinymce/langs/ka_GE.js | 219 - program/js/tinymce/langs/kab.js | 219 - program/js/tinymce/langs/kk.js | 179 - program/js/tinymce/langs/km_KH.js | 219 - program/js/tinymce/langs/ko.js | 219 - program/js/tinymce/langs/ko_KR.js | 219 - program/js/tinymce/langs/ku.js | 197 - program/js/tinymce/langs/ku_IQ.js | 200 - program/js/tinymce/langs/lb.js | 200 - program/js/tinymce/langs/lt.js | 219 - program/js/tinymce/langs/lv.js | 200 - program/js/tinymce/langs/mk_MK.js | 219 - program/js/tinymce/langs/ml.js | 179 - program/js/tinymce/langs/ml_IN.js | 179 - program/js/tinymce/langs/mn_MN.js | 179 - program/js/tinymce/langs/nb_NO.js | 219 - program/js/tinymce/langs/nl.js | 219 - program/js/tinymce/langs/pl.js | 219 - program/js/tinymce/langs/pt_BR.js | 219 - program/js/tinymce/langs/pt_PT.js | 219 - program/js/tinymce/langs/ro.js | 219 - program/js/tinymce/langs/ru_RU.js | 54 - program/js/tinymce/langs/si_LK.js | 179 - program/js/tinymce/langs/sk.js | 219 - program/js/tinymce/langs/sl_SI.js | 197 - program/js/tinymce/langs/sq.js | 8 - program/js/tinymce/langs/sr.js | 179 - program/js/tinymce/langs/sv_SE.js | 219 - program/js/tinymce/langs/ta.js | 219 - program/js/tinymce/langs/ta_IN.js | 219 - program/js/tinymce/langs/tg.js | 197 - program/js/tinymce/langs/th_TH.js | 197 - program/js/tinymce/langs/tr.js | 219 - program/js/tinymce/langs/tr_TR.js | 200 - program/js/tinymce/langs/tt.js | 200 - program/js/tinymce/langs/ug.js | 189 - program/js/tinymce/langs/uk.js | 219 - program/js/tinymce/langs/uk_UA.js | 219 - program/js/tinymce/langs/vi.js | 219 - program/js/tinymce/langs/vi_VN.js | 219 - program/js/tinymce/langs/zh_CN.js | 197 - program/js/tinymce/langs/zh_TW.js | 219 - program/js/tinymce/license.txt | 504 - .../js/tinymce/plugins/advlist/plugin.min.js | 1 - .../js/tinymce/plugins/anchor/plugin.min.js | 1 - .../js/tinymce/plugins/autolink/plugin.min.js | 1 - .../tinymce/plugins/autoresize/plugin.min.js | 1 - .../js/tinymce/plugins/autosave/plugin.min.js | 1 - .../js/tinymce/plugins/bbcode/plugin.min.js | 1 - .../js/tinymce/plugins/charmap/plugin.min.js | 1 - program/js/tinymce/plugins/code/plugin.min.js | 1 - .../tinymce/plugins/colorpicker/plugin.min.js | 1 - .../tinymce/plugins/contextmenu/plugin.min.js | 1 - .../plugins/directionality/plugin.min.js | 1 - .../plugins/emoticons/img/smiley-cool.gif | Bin 354 -> 0 bytes .../plugins/emoticons/img/smiley-cry.gif | Bin 329 -> 0 bytes .../emoticons/img/smiley-embarassed.gif | Bin 331 -> 0 bytes .../emoticons/img/smiley-foot-in-mouth.gif | Bin 342 -> 0 bytes .../plugins/emoticons/img/smiley-frown.gif | Bin 340 -> 0 bytes .../plugins/emoticons/img/smiley-innocent.gif | Bin 336 -> 0 bytes .../plugins/emoticons/img/smiley-kiss.gif | Bin 338 -> 0 bytes .../plugins/emoticons/img/smiley-laughing.gif | Bin 343 -> 0 bytes .../emoticons/img/smiley-money-mouth.gif | Bin 321 -> 0 bytes .../plugins/emoticons/img/smiley-sealed.gif | Bin 323 -> 0 bytes .../plugins/emoticons/img/smiley-smile.gif | Bin 344 -> 0 bytes .../emoticons/img/smiley-surprised.gif | Bin 338 -> 0 bytes .../emoticons/img/smiley-tongue-out.gif | Bin 328 -> 0 bytes .../emoticons/img/smiley-undecided.gif | Bin 337 -> 0 bytes .../plugins/emoticons/img/smiley-wink.gif | Bin 350 -> 0 bytes .../plugins/emoticons/img/smiley-yell.gif | Bin 336 -> 0 bytes .../tinymce/plugins/emoticons/plugin.min.js | 1 - .../js/tinymce/plugins/fullpage/plugin.min.js | 1 - .../tinymce/plugins/fullscreen/plugin.min.js | 1 - program/js/tinymce/plugins/hr/plugin.min.js | 1 - .../js/tinymce/plugins/image/plugin.min.js | 1 - .../tinymce/plugins/importcss/plugin.min.js | 1 - .../plugins/insertdatetime/plugin.min.js | 1 - .../js/tinymce/plugins/layer/plugin.min.js | 1 - .../plugins/legacyoutput/plugin.min.js | 1 - program/js/tinymce/plugins/link/plugin.min.js | 1 - .../js/tinymce/plugins/lists/plugin.min.js | 1 - .../js/tinymce/plugins/media/plugin.min.js | 1 - .../tinymce/plugins/nonbreaking/plugin.min.js | 1 - .../tinymce/plugins/noneditable/plugin.min.js | 1 - .../tinymce/plugins/pagebreak/plugin.min.js | 1 - .../js/tinymce/plugins/paste/plugin.min.js | 1 - .../js/tinymce/plugins/preview/plugin.min.js | 1 - .../js/tinymce/plugins/print/plugin.min.js | 1 - program/js/tinymce/plugins/save/plugin.min.js | 1 - .../plugins/searchreplace/plugin.min.js | 1 - .../plugins/spellchecker/plugin.min.js | 1 - .../js/tinymce/plugins/tabfocus/plugin.min.js | 1 - .../js/tinymce/plugins/table/plugin.min.js | 2 - .../js/tinymce/plugins/template/plugin.min.js | 1 - .../tinymce/plugins/textcolor/plugin.min.js | 1 - .../plugins/visualblocks/css/visualblocks.css | 135 - .../plugins/visualblocks/plugin.min.js | 1 - .../tinymce/plugins/visualchars/plugin.min.js | 1 - .../tinymce/plugins/wordcount/plugin.min.js | 1 - .../skins/lightgray/content.inline.min.css | 1 - .../tinymce/skins/lightgray/content.min.css | 1 - .../tinymce/skins/lightgray/fonts/readme.md | 1 - .../lightgray/fonts/tinymce-small.dev.svg | 175 - .../skins/lightgray/fonts/tinymce-small.eot | Bin 9492 -> 0 bytes .../skins/lightgray/fonts/tinymce-small.svg | 63 - .../skins/lightgray/fonts/tinymce-small.ttf | Bin 9304 -> 0 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 9380 -> 0 bytes .../skins/lightgray/fonts/tinymce.dev.svg | 153 - .../tinymce/skins/lightgray/fonts/tinymce.eot | Bin 17292 -> 0 bytes .../tinymce/skins/lightgray/fonts/tinymce.svg | 129 - .../tinymce/skins/lightgray/fonts/tinymce.ttf | Bin 17128 -> 0 bytes .../skins/lightgray/fonts/tinymce.woff | Bin 17204 -> 0 bytes .../js/tinymce/skins/lightgray/img/anchor.gif | Bin 53 -> 0 bytes .../js/tinymce/skins/lightgray/img/loader.gif | Bin 2608 -> 0 bytes .../js/tinymce/skins/lightgray/img/object.gif | Bin 152 -> 0 bytes .../js/tinymce/skins/lightgray/img/trans.gif | Bin 43 -> 0 bytes .../tinymce/skins/lightgray/skin.ie7.min.css | 1 - .../js/tinymce/skins/lightgray/skin.min.css | 1 - program/js/tinymce/themes/modern/theme.min.js | 1 - program/js/tinymce/tinymce.min.js | 13 - .../tinymce}/browser.css | 0 .../tinymce}/content.css | 0 .../roundcube => resources/tinymce}/video.png | Bin 175 files changed, 231 insertions(+), 28481 deletions(-) create mode 100755 bin/jsdeps.sh delete mode 100644 plugins/enigma/openpgp.min.js delete mode 100644 plugins/managesieve/codemirror/addon/selection/active-line.js delete mode 100644 plugins/managesieve/codemirror/lib/codemirror.css delete mode 100644 plugins/managesieve/codemirror/lib/codemirror.js delete mode 100644 plugins/managesieve/codemirror/mode/sieve/sieve.js delete mode 100644 program/js/jquery.min.js delete mode 100644 program/js/jstz.min.js delete mode 100644 program/js/publickey.js delete mode 100644 program/js/tinymce/langs/ar.js delete mode 100644 program/js/tinymce/langs/ar_SA.js delete mode 100644 program/js/tinymce/langs/az.js delete mode 100644 program/js/tinymce/langs/be.js delete mode 100644 program/js/tinymce/langs/bg_BG.js delete mode 100644 program/js/tinymce/langs/bn_BD.js delete mode 100644 program/js/tinymce/langs/bs.js delete mode 100644 program/js/tinymce/langs/ca.js delete mode 100644 program/js/tinymce/langs/cs.js delete mode 100644 program/js/tinymce/langs/cs_CZ.js delete mode 100644 program/js/tinymce/langs/cy.js delete mode 100644 program/js/tinymce/langs/da.js delete mode 100644 program/js/tinymce/langs/de.js delete mode 100644 program/js/tinymce/langs/de_AT.js delete mode 100644 program/js/tinymce/langs/dv.js delete mode 100644 program/js/tinymce/langs/el.js delete mode 100644 program/js/tinymce/langs/en_CA.js delete mode 100644 program/js/tinymce/langs/en_GB.js delete mode 100644 program/js/tinymce/langs/eo.js delete mode 100644 program/js/tinymce/langs/es.js delete mode 100644 program/js/tinymce/langs/es_MX.js delete mode 100644 program/js/tinymce/langs/et.js delete mode 100644 program/js/tinymce/langs/eu.js delete mode 100644 program/js/tinymce/langs/fa.js delete mode 100644 program/js/tinymce/langs/fa_IR.js delete mode 100644 program/js/tinymce/langs/fi.js delete mode 100644 program/js/tinymce/langs/fo.js delete mode 100644 program/js/tinymce/langs/fr_CH.js delete mode 100644 program/js/tinymce/langs/fr_FR.js delete mode 100644 program/js/tinymce/langs/ga.js delete mode 100644 program/js/tinymce/langs/gd.js delete mode 100644 program/js/tinymce/langs/gl.js delete mode 100644 program/js/tinymce/langs/he_IL.js delete mode 100644 program/js/tinymce/langs/hi_IN.js delete mode 100644 program/js/tinymce/langs/hr.js delete mode 100644 program/js/tinymce/langs/hu_HU.js delete mode 100644 program/js/tinymce/langs/hy.js delete mode 100644 program/js/tinymce/langs/id.js delete mode 100644 program/js/tinymce/langs/is_IS.js delete mode 100644 program/js/tinymce/langs/it.js delete mode 100644 program/js/tinymce/langs/ja.js delete mode 100644 program/js/tinymce/langs/ka_GE.js delete mode 100644 program/js/tinymce/langs/kab.js delete mode 100644 program/js/tinymce/langs/kk.js delete mode 100644 program/js/tinymce/langs/km_KH.js delete mode 100644 program/js/tinymce/langs/ko.js delete mode 100644 program/js/tinymce/langs/ko_KR.js delete mode 100644 program/js/tinymce/langs/ku.js delete mode 100644 program/js/tinymce/langs/ku_IQ.js delete mode 100644 program/js/tinymce/langs/lb.js delete mode 100644 program/js/tinymce/langs/lt.js delete mode 100644 program/js/tinymce/langs/lv.js delete mode 100644 program/js/tinymce/langs/mk_MK.js delete mode 100644 program/js/tinymce/langs/ml.js delete mode 100644 program/js/tinymce/langs/ml_IN.js delete mode 100644 program/js/tinymce/langs/mn_MN.js delete mode 100644 program/js/tinymce/langs/nb_NO.js delete mode 100644 program/js/tinymce/langs/nl.js delete mode 100644 program/js/tinymce/langs/pl.js delete mode 100644 program/js/tinymce/langs/pt_BR.js delete mode 100644 program/js/tinymce/langs/pt_PT.js delete mode 100644 program/js/tinymce/langs/ro.js delete mode 100644 program/js/tinymce/langs/ru_RU.js delete mode 100644 program/js/tinymce/langs/si_LK.js delete mode 100644 program/js/tinymce/langs/sk.js delete mode 100644 program/js/tinymce/langs/sl_SI.js delete mode 100644 program/js/tinymce/langs/sq.js delete mode 100644 program/js/tinymce/langs/sr.js delete mode 100644 program/js/tinymce/langs/sv_SE.js delete mode 100644 program/js/tinymce/langs/ta.js delete mode 100644 program/js/tinymce/langs/ta_IN.js delete mode 100644 program/js/tinymce/langs/tg.js delete mode 100644 program/js/tinymce/langs/th_TH.js delete mode 100644 program/js/tinymce/langs/tr.js delete mode 100644 program/js/tinymce/langs/tr_TR.js delete mode 100644 program/js/tinymce/langs/tt.js delete mode 100644 program/js/tinymce/langs/ug.js delete mode 100644 program/js/tinymce/langs/uk.js delete mode 100644 program/js/tinymce/langs/uk_UA.js delete mode 100644 program/js/tinymce/langs/vi.js delete mode 100644 program/js/tinymce/langs/vi_VN.js delete mode 100644 program/js/tinymce/langs/zh_CN.js delete mode 100644 program/js/tinymce/langs/zh_TW.js delete mode 100644 program/js/tinymce/license.txt delete mode 100644 program/js/tinymce/plugins/advlist/plugin.min.js delete mode 100644 program/js/tinymce/plugins/anchor/plugin.min.js delete mode 100644 program/js/tinymce/plugins/autolink/plugin.min.js delete mode 100644 program/js/tinymce/plugins/autoresize/plugin.min.js delete mode 100644 program/js/tinymce/plugins/autosave/plugin.min.js delete mode 100644 program/js/tinymce/plugins/bbcode/plugin.min.js delete mode 100644 program/js/tinymce/plugins/charmap/plugin.min.js delete mode 100644 program/js/tinymce/plugins/code/plugin.min.js delete mode 100644 program/js/tinymce/plugins/colorpicker/plugin.min.js delete mode 100644 program/js/tinymce/plugins/contextmenu/plugin.min.js delete mode 100644 program/js/tinymce/plugins/directionality/plugin.min.js delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-cool.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-cry.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-frown.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-innocent.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-kiss.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-laughing.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-money-mouth.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-sealed.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-smile.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-surprised.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-undecided.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-wink.gif delete mode 100644 program/js/tinymce/plugins/emoticons/img/smiley-yell.gif delete mode 100644 program/js/tinymce/plugins/emoticons/plugin.min.js delete mode 100644 program/js/tinymce/plugins/fullpage/plugin.min.js delete mode 100644 program/js/tinymce/plugins/fullscreen/plugin.min.js delete mode 100644 program/js/tinymce/plugins/hr/plugin.min.js delete mode 100644 program/js/tinymce/plugins/image/plugin.min.js delete mode 100644 program/js/tinymce/plugins/importcss/plugin.min.js delete mode 100644 program/js/tinymce/plugins/insertdatetime/plugin.min.js delete mode 100644 program/js/tinymce/plugins/layer/plugin.min.js delete mode 100644 program/js/tinymce/plugins/legacyoutput/plugin.min.js delete mode 100644 program/js/tinymce/plugins/link/plugin.min.js delete mode 100644 program/js/tinymce/plugins/lists/plugin.min.js delete mode 100644 program/js/tinymce/plugins/media/plugin.min.js delete mode 100644 program/js/tinymce/plugins/nonbreaking/plugin.min.js delete mode 100644 program/js/tinymce/plugins/noneditable/plugin.min.js delete mode 100644 program/js/tinymce/plugins/pagebreak/plugin.min.js delete mode 100644 program/js/tinymce/plugins/paste/plugin.min.js delete mode 100644 program/js/tinymce/plugins/preview/plugin.min.js delete mode 100644 program/js/tinymce/plugins/print/plugin.min.js delete mode 100644 program/js/tinymce/plugins/save/plugin.min.js delete mode 100644 program/js/tinymce/plugins/searchreplace/plugin.min.js delete mode 100644 program/js/tinymce/plugins/spellchecker/plugin.min.js delete mode 100644 program/js/tinymce/plugins/tabfocus/plugin.min.js delete mode 100644 program/js/tinymce/plugins/table/plugin.min.js delete mode 100644 program/js/tinymce/plugins/template/plugin.min.js delete mode 100644 program/js/tinymce/plugins/textcolor/plugin.min.js delete mode 100644 program/js/tinymce/plugins/visualblocks/css/visualblocks.css delete mode 100644 program/js/tinymce/plugins/visualblocks/plugin.min.js delete mode 100644 program/js/tinymce/plugins/visualchars/plugin.min.js delete mode 100644 program/js/tinymce/plugins/wordcount/plugin.min.js delete mode 100644 program/js/tinymce/skins/lightgray/content.inline.min.css delete mode 100644 program/js/tinymce/skins/lightgray/content.min.css delete mode 100644 program/js/tinymce/skins/lightgray/fonts/readme.md delete mode 100644 program/js/tinymce/skins/lightgray/fonts/tinymce-small.dev.svg delete mode 100644 program/js/tinymce/skins/lightgray/fonts/tinymce-small.eot delete mode 100644 program/js/tinymce/skins/lightgray/fonts/tinymce-small.svg delete mode 100644 program/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf delete mode 100644 program/js/tinymce/skins/lightgray/fonts/tinymce-small.woff delete mode 100644 program/js/tinymce/skins/lightgray/fonts/tinymce.dev.svg delete mode 100644 program/js/tinymce/skins/lightgray/fonts/tinymce.eot delete mode 100644 program/js/tinymce/skins/lightgray/fonts/tinymce.svg delete mode 100644 program/js/tinymce/skins/lightgray/fonts/tinymce.ttf delete mode 100644 program/js/tinymce/skins/lightgray/fonts/tinymce.woff delete mode 100644 program/js/tinymce/skins/lightgray/img/anchor.gif delete mode 100644 program/js/tinymce/skins/lightgray/img/loader.gif delete mode 100644 program/js/tinymce/skins/lightgray/img/object.gif delete mode 100644 program/js/tinymce/skins/lightgray/img/trans.gif delete mode 100644 program/js/tinymce/skins/lightgray/skin.ie7.min.css delete mode 100644 program/js/tinymce/skins/lightgray/skin.min.css delete mode 100644 program/js/tinymce/themes/modern/theme.min.js delete mode 100644 program/js/tinymce/tinymce.min.js rename program/{js/tinymce/roundcube => resources/tinymce}/browser.css (100%) rename program/{js/tinymce/roundcube => resources/tinymce}/content.css (100%) rename program/{js/tinymce/roundcube => resources/tinymce}/video.png (100%) diff --git a/bin/jsdeps.sh b/bin/jsdeps.sh new file mode 100755 index 00000000000..1736d3bfe29 --- /dev/null +++ b/bin/jsdeps.sh @@ -0,0 +1,228 @@ +#!/bin/sh + +# Required programs + +CURL=`which curl` +WGET=`which wget` +SHASUM=`which sha1sum` +UNZIP=`which unzip` + +PWD=`dirname "$0"` +WHAT="$1" + +# Downloads definition + +JQUERY_VERSION="3.1.1" +JQUERY_URL="https://code.jquery.com/jquery-$JQUERY_VERSION.min.js" +JQUERY_SHA="f647a6d37dc4ca055ced3cf64bbc1f490070acba" +JQUERY_PATH="$PWD/../program/js/jquery.min.js" + +JSTZ_VERSION="6c427658686c664da52c6a87cd62ec910baab276" #1.0.6 +JSTZ_URL="https://bitbucket.org/pellepim/jstimezonedetect/raw/$JSTZ_VERSION/dist/jstz.min.js" +JSTZ_SHA="4291cd3b259d2060460c2a6ab99f428d3c0c9537" +JSTZ_PATH="$PWD/../program/js/jstz.min.js" + +PKEY_VERSION="0e011cb18907a1adc0313aa92e69cd8858e1ef66" +PKEY_URL="https://raw.githubusercontent.com/diafygi/publickeyjs/$PKEY_VERSION/publickey.js" +PKEY_SHA="d0920e190754e024c4be76ad5bbc7e76b2e37a4d" +PKEY_PATH="$PWD/../program/js/publickey.js" + +TINYMCE_VERSION="4.3.13" +TINYMCE_URL="http://download.ephox.com/tinymce/community/tinymce_$TINYMCE_VERSION.zip" +TINYMCE_SHA="28631746784453daf8baa10f2c8982aac5e32aa7" +TINYMCE_PATH="$PWD/../program/js/tinymce" +TINYMCE_LANGS="https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy" + +OPENPGP_VERSION="1.6.2" +OPENPGP_URL="https://github.com/openpgpjs/openpgpjs/archive/v$OPENPGP_VERSION.zip" +OPENPGP_SHA="70662ccd317a3e5221132778ec7bdf46342ab3fb" +OPENPGP_PATH="$PWD/../plugins/enigma/openpgp.min.js" + +CM_VERSION="5.21.0" +CM_URL="http://codemirror.net/codemirror-$CM_VERSION.zip" +CM_SHA="3b767c2e3acd6796e54ed19ed2ac0755fcf87984" +CM_PATH="$PWD/../plugins/managesieve/codemirror.zip" + +################################################################################ + +if [ -z "$SHASUM" ]; then + echo "Sha1sum is required" + exit 1 +fi + +if [ -z "$UNZIP" ]; then + echo "Unzip is required" + exit 1 +fi + +if [ -n "$CURL" ]; then + GET=$CURL + OPT="-o" +elif [ -n "$WGET" ]; then + GET=$WGET + OPT="-nv -O" +else + echo "Curl or wget is required" + exit 1 +fi + +if [ "$WHAT" = "jquery" ] || [ "$WHAT" = "" ]; then + echo "Downloading jQuery..." + + $GET $JQUERY_URL $OPT $JQUERY_PATH + if [ ! -f $JQUERY_PATH ]; then + echo "ERROR: Failed to get $JQUERY_URL" + exit 1 + fi + + SUM=`$SHASUM $JQUERY_PATH | cut -d " " -f 1` + if [ "$SUM" != "$JQUERY_SHA" ]; then + echo "ERROR: Incorrect SHA of $JQUERY_PATH. Expected: $JQUERY_SHA, got: $SUM" + exit 1 + fi + + echo "Installing jQuery..." + echo "Done" +fi + +if [ "$WHAT" = "jstz" ] || [ "$WHAT" = "" ]; then + echo "Downloading jsTimezoneDetect..." + + $GET $JSTZ_URL $OPT $JSTZ_PATH + if [ ! -f $JSTZ_PATH ]; then + echo "ERROR: Failed to get $JSTZ_URL" + exit 1 + fi + + SUM=`$SHASUM $JSTZ_PATH | cut -d " " -f 1` + if [ "$SUM" != "$JSTZ_SHA" ]; then + echo "ERROR: Incorrect SHA of $JSTZ_PATH. Expected: $JSTZ_SHA, got: $SUM" + exit 1 + fi + + echo "Installing jsTimezoneDetect..." + echo "Done" +fi + +if [ "$WHAT" = "publickey" ] || [ "$WHAT" = "" ]; then + echo "Downloading publickey.js..." + + $GET $PKEY_URL $OPT $PKEY_PATH + if [ ! -f $PKEY_PATH ]; then + echo "ERROR: Failed to get $PKEY_URL" + exit 1 + fi + + SUM=`$SHASUM $PKEY_PATH | cut -d " " -f 1` + if [ "$SUM" != "$PKEY_SHA" ]; then + echo "ERROR: Incorrect SHA of $PKEY_PATH. Expected: $PKEY_SHA, got: $SUM" + exit 1 + fi + + echo "Installing publickey.js..." + echo "Done" +fi + +if [ "$WHAT" = "tinymce" ] || [ "$WHAT" = "" ]; then + echo "Downloading TinyMCE..." + + $GET $TINYMCE_URL $OPT "$TINYMCE_PATH.zip" + if [ ! -f "$TINYMCE_PATH.zip" ]; then + echo "ERROR: Failed to get $TINYMCE_URL" + exit 1 + fi + + SUM=`$SHASUM "$TINYMCE_PATH.zip" | cut -d " " -f 1` + if [ "$SUM" != "$TINYMCE_SHA" ]; then + echo "ERROR: Incorrect SHA of $TINYMCE_PATH.zip. Expected: $TINYMCE_SHA, got: $SUM" + exit 1 + fi + + echo "Installing TinyMCE..." + + $UNZIP -q "$TINYMCE_PATH.zip" -d "$TINYMCE_PATH-$TINYMCE_VERSION" + + if [ -d "$TINYMCE_PATH" ]; then + rm -drf "$TINYMCE_PATH" + fi + + mkdir "$TINYMCE_PATH" + mv -f "$TINYMCE_PATH-$TINYMCE_VERSION/tinymce/js/tinymce" "$TINYMCE_PATH/../" + # cleanup + rm -f "$TINYMCE_PATH/license.txt" + rm -f "$TINYMCE_PATH/jquery.tinymce.min.js" + rm -rf "$TINYMCE_PATH-$TINYMCE_VERSION" + rm -f "$TINYMCE_PATH.zip" + + echo "Done" + + echo "Downloading TinyMCE localization..." + + $GET $TINYMCE_LANGS $OPT "$TINYMCE_PATH.zip" + + echo "Installing TinyMCE localization..." + + $UNZIP -q "$TINYMCE_PATH.zip" -d "$TINYMCE_PATH" + + echo "Done" +fi + +if [ "$WHAT" = "openpgp" ] || [ "$WHAT" = "" ]; then + echo "Downloading OpenPGP.js..." + + $GET $OPENPGP_URL $OPT "$OPENPGP_PATH.zip" + if [ ! -f "$OPENPGP_PATH.zip" ]; then + echo "ERROR: Failed to get $OPENPGP_URL" + exit 1 + fi + + SUM=`$SHASUM "$OPENPGP_PATH.zip" | cut -d " " -f 1` + if [ "$SUM" != "$OPENPGP_SHA" ]; then + echo "ERROR: Incorrect SHA of $OPENPGP_PATH.zip. Expected: $OPENPGP_SHA, got: $SUM" + exit 1 + fi + + echo "Installing OpenPGP.js..." + + $UNZIP -pq "$OPENPGP_PATH.zip" "openpgpjs-$OPENPGP_VERSION/dist/openpgp.min.js" > $OPENPGP_PATH + # cleanup + rm -f "$OPENPGP_PATH.zip" + + echo "Done" +fi + +if [ "$WHAT" = "codemirror" ] || [ "$WHAT" = "" ]; then + echo "Downloading CodeMirror..." + + $GET $CM_URL $OPT "$CM_PATH" + if [ ! -f "$CM_PATH" ]; then + echo "ERROR: Failed to get $CM_URL" + exit 1 + fi + + SUM=`$SHASUM "$CM_PATH" | cut -d " " -f 1` + if [ "$SUM" != "$CM_SHA" ]; then + echo "ERROR: Incorrect SHA of $CM_PATH. Expected: $CM_SHA, got: $SUM" + exit 1 + fi + + echo "Installing CodeMirror..." + + DIR=`dirname "$CM_PATH"` + + # extract only files we use + $UNZIP -q "$CM_PATH" -d "$DIR" "codemirror-$CM_VERSION/lib/codemirror.css" + $UNZIP -q "$CM_PATH" -d "$DIR" "codemirror-$CM_VERSION/lib/codemirror.js" + $UNZIP -q "$CM_PATH" -d "$DIR" "codemirror-$CM_VERSION/addon/selection/active-line.js" + $UNZIP -q "$CM_PATH" -d "$DIR" "codemirror-$CM_VERSION/mode/sieve/sieve.js" + + if [ -d "$DIR/codemirror" ]; then + rm -drf "$DIR/codemirror" + fi + + mv -f "$DIR/codemirror-$CM_VERSION" "$DIR/codemirror" + #cleanup + rm -f "$CM_PATH" + + echo "Done" +fi diff --git a/plugins/enigma/openpgp.min.js b/plugins/enigma/openpgp.min.js deleted file mode 100644 index 10cf0345b38..00000000000 --- a/plugins/enigma/openpgp.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/*! OpenPGPjs.org this is LGPL licensed code, see LICENSE/our website for more information.- v1.6.2 - 2016-06-08 */!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.openpgp=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g1)for(var c=1;cb;++b)e[b]=c[b];return a.buffer=e}function d(a){this.buffer=new(o?Uint16Array:Array)(2*a),this.length=0}function e(a,b){this.e=w,this.f=0,this.input=o&&a instanceof Array?new Uint8Array(a):a,this.c=0,b&&(b.lazy&&(this.f=b.lazy),"number"==typeof b.compressionType&&(this.e=b.compressionType),b.outputBuffer&&(this.b=o&&b.outputBuffer instanceof Array?new Uint8Array(b.outputBuffer):b.outputBuffer),"number"==typeof b.outputIndex&&(this.c=b.outputIndex)),this.b||(this.b=new(o?Uint8Array:Array)(32768))}function f(a,b){this.length=a,this.g=b}function g(a,b){function c(a,b){var c,d=a.g,e=[],f=0;c=z[a.length],e[f++]=65535&c,e[f++]=c>>16&255,e[f++]=c>>24;var g;switch(m){case 1===d:g=[0,d-1,0];break;case 2===d:g=[1,d-2,0];break;case 3===d:g=[2,d-3,0];break;case 4===d:g=[3,d-4,0];break;case 6>=d:g=[4,d-5,1];break;case 8>=d:g=[5,d-7,1];break;case 12>=d:g=[6,d-9,2];break;case 16>=d:g=[7,d-13,2];break;case 24>=d:g=[8,d-17,3];break;case 32>=d:g=[9,d-25,3];break;case 48>=d:g=[10,d-33,4];break;case 64>=d:g=[11,d-49,4];break;case 96>=d:g=[12,d-65,5];break;case 128>=d:g=[13,d-97,5];break;case 192>=d:g=[14,d-129,6];break;case 256>=d:g=[15,d-193,6];break;case 384>=d:g=[16,d-257,7];break;case 512>=d:g=[17,d-385,7];break;case 768>=d:g=[18,d-513,8];break;case 1024>=d:g=[19,d-769,8];break;case 1536>=d:g=[20,d-1025,9];break;case 2048>=d:g=[21,d-1537,9];break;case 3072>=d:g=[22,d-2049,10];break;case 4096>=d:g=[23,d-3073,10];break;case 6144>=d:g=[24,d-4097,11];break;case 8192>=d:g=[25,d-6145,11];break;case 12288>=d:g=[26,d-8193,12];break;case 16384>=d:g=[27,d-12289,12];break;case 24576>=d:g=[28,d-16385,13];break;case 32768>=d:g=[29,d-24577,13];break;default:throw"invalid distance"}c=g,e[f++]=c[0],e[f++]=c[1],e[f++]=c[2];var h,i;for(h=0,i=e.length;i>h;++h)r[s++]=e[h];u[e[0]]++,v[e[3]]++,t=a.length+b-1,n=null}var d,e,f,g,i,j,k,n,p,q={},r=o?new Uint16Array(2*b.length):[],s=0,t=0,u=new(o?Uint32Array:Array)(286),v=new(o?Uint32Array:Array)(30),w=a.f;if(!o){for(f=0;285>=f;)u[f++]=0;for(f=0;29>=f;)v[f++]=0}for(u[256]=1,d=0,e=b.length;e>d;++d){for(f=i=0,g=3;g>f&&d+f!==e;++f)i=i<<8|b[d+f];if(q[i]===l&&(q[i]=[]),j=q[i],!(0=e){for(n&&c(n,-1),f=0,g=e-d;g>f;++f)p=b[d+f],r[s++]=p,++u[p];break}0h;h++){if(d=c[j-h-1],g=3,k>3){for(i=k;i>3;i--)if(a[d+i-1]!==a[b+i-1])continue a;g=k}for(;258>g&&l>b+g&&a[d+g]===a[b+g];)++g;if(g>k&&(e=d,k=g),258===g)break}return new f(k,b-e)}function i(a,b){var c,e,f,g,h,i=a.length,k=new d(572),l=new(o?Uint8Array:Array)(i);if(!o)for(g=0;i>g;g++)l[g]=0;for(g=0;i>g;++g)0g;++g)c[g]=k.pop(),e[g]=c[g].value;for(f=j(e,e.length,b),g=0,h=c.length;h>g;++g)l[c[g].index]=f[g];return l}function j(a,b,c){function d(a){var c=n[a][p[a]];c===b?(d(a+1),d(a+1)):--l[c],++p[a]}var e,f,g,h,i,j=new(o?Uint16Array:Array)(c),k=new(o?Uint8Array:Array)(c),l=new(o?Uint8Array:Array)(b),m=Array(c),n=Array(c),p=Array(c),q=(1<f;++f)r>q?k[f]=0:(k[f]=1,q-=r),q<<=1,j[c-2-f]=(j[c-1-f]/2|0)+b;for(j[0]=k[0],m[0]=Array(j[0]),n[0]=Array(j[0]),f=1;c>f;++f)j[f]>2*j[f-1]+k[f]&&(j[f]=2*j[f-1]+k[f]),m[f]=Array(j[f]),n[f]=Array(j[f]);for(e=0;b>e;++e)l[e]=c;for(g=0;ge;++e)p[e]=0;for(1===k[c-1]&&(--l[0],++p[c-1]),f=c-2;f>=0;--f){for(h=e=0,i=p[f+1],g=0;ga[e]?(m[f][g]=h,n[f][g]=b,i+=2):(m[f][g]=a[e],n[f][g]=e,++e);p[f]=0,1===k[f]&&d(f)}return l}function k(a){var b,c,d,e,f=new(o?Uint16Array:Array)(a.length),g=[],h=[],i=0;for(b=0,c=a.length;c>b;b++)g[a[b]]=(0|g[a[b]])+1;for(b=1,c=16;c>=b;b++)h[b]=i,i+=0|g[b],i<<=1;for(b=0,c=a.length;c>b;b++)for(i=h[a[b]],h[a[b]]+=1,d=f[b]=0,e=a[b];e>d;d++)f[b]=f[b]<<1|1&i,i>>>=1;return f}var l=void 0,m=!0,n=this,o="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView;b.prototype.a=function(a,b,d){var e,f=this.buffer,g=this.index,h=this.d,i=f[g];if(d&&b>1&&(a=b>8?(u[255&a]<<24|u[a>>>8&255]<<16|u[a>>>16&255]<<8|u[a>>>24&255])>>32-b:u[a]>>8-b),8>b+h)i=i<e;++e)i=i<<1|a>>b-e-1&1,8===++h&&(h=0,f[g++]=u[i],i=0,g===f.length&&(f=c(this)));f[g]=i,this.buffer=f,this.d=h,this.index=g},b.prototype.finish=function(){var a,b=this.buffer,c=this.index;return 0p;++p){for(var r=p,s=r,t=7,r=r>>>1;r;r>>>=1)s<<=1,s|=1&r,--t;q[p]=(s<>>0}var u=q;d.prototype.getParent=function(a){return 2*((a-2)/4|0)},d.prototype.push=function(a,b){var c,d,e,f=this.buffer;for(c=this.length,f[this.length++]=b,f[this.length++]=a;c>0&&(d=this.getParent(c),f[c]>f[d]);)e=f[c],f[c]=f[d],f[d]=e,e=f[c+1],f[c+1]=f[d+1],f[d+1]=e,c=d;return this.length},d.prototype.pop=function(){var a,b,c,d,e,f=this.buffer;for(b=f[0],a=f[1],this.length-=2,f[0]=f[this.length],f[1]=f[this.length+1],e=0;(d=2*e+2,!(d>=this.length))&&(d+2f[d]&&(d+=2),f[d]>f[e]);)c=f[e],f[e]=f[d],f[d]=c,c=f[e+1],f[e+1]=f[d+1],f[d+1]=c,e=d;return{index:a,value:b,length:this.length}};var v,w=2,x=[];for(v=0;288>v;v++)switch(m){case 143>=v:x.push([v+48,8]);break;case 255>=v:x.push([v-144+400,9]);break;case 279>=v:x.push([v-256+0,7]);break;case 287>=v:x.push([v-280+192,8]);break;default:throw"invalid literal: "+v}e.prototype.h=function(){var a,c,d,e,f=this.input;switch(this.e){case 0:for(d=0,e=f.length;e>d;){c=o?f.subarray(d,d+65535):f.slice(d,d+65535),d+=c.length;var h=c,j=d===e,n=l,p=l,q=l,r=l,s=l,t=this.b,u=this.c;if(o){for(t=new Uint8Array(this.b.buffer);t.length<=u+h.length+5;)t=new Uint8Array(t.length<<1);t.set(this.b)}if(n=j?1:0,t[u++]=0|n,p=h.length,q=~p+65536&65535,t[u++]=255&p,t[u++]=p>>>8&255,t[u++]=255&q,t[u++]=q>>>8&255,o)t.set(h,u),u+=h.length,t=t.subarray(0,u);else{for(r=0,s=h.length;s>r;++r)t[u++]=h[r];t.length=u}this.c=u,this.b=t}break;case 1:var v=new b(o?new Uint8Array(this.b.buffer):this.b,this.c);v.a(1,1,m),v.a(1,2,m);var y,z,A,B=g(this,f);for(y=0,z=B.length;z>y;y++)if(A=B[y],b.prototype.a.apply(v,x[A]),A>256)v.a(B[++y],B[++y],m),v.a(B[++y],5),v.a(B[++y],B[++y],m);else if(256===A)break;this.b=v.finish(),this.c=this.b.length;break;case w:var C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R=new b(o?new Uint8Array(this.b.buffer):this.b,this.c),S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],T=Array(19);for(C=w,R.a(1,1,m),R.a(C,2,m),D=g(this,f),H=i(this.j,15),I=k(H),J=i(this.i,7),K=k(J),E=286;E>257&&0===H[E-1];E--);for(F=30;F>1&&0===J[F-1];F--);var U,V,W,X,Y,Z,$=E,_=F,aa=new(o?Uint32Array:Array)($+_),ba=new(o?Uint32Array:Array)(316),ca=new(o?Uint8Array:Array)(19);for(U=V=0;$>U;U++)aa[V++]=H[U];for(U=0;_>U;U++)aa[V++]=J[U];if(!o)for(U=0,X=ca.length;X>U;++U)ca[U]=0;for(U=Y=0,X=aa.length;X>U;U+=V){for(V=1;X>U+V&&aa[U+V]===aa[U];++V);if(W=V,0===aa[U])if(3>W)for(;00;)Z=138>W?W:138,Z>W-3&&W>Z&&(Z=W-3),10>=Z?(ba[Y++]=17,ba[Y++]=Z-3,ca[17]++):(ba[Y++]=18,ba[Y++]=Z-11,ca[18]++),W-=Z;else if(ba[Y++]=aa[U],ca[aa[U]]++,W--,3>W)for(;00;)Z=6>W?W:6,Z>W-3&&W>Z&&(Z=W-3),ba[Y++]=16,ba[Y++]=Z-3,ca[16]++,W-=Z}for(a=o?ba.subarray(0,Y):ba.slice(0,Y),L=i(ca,7),P=0;19>P;P++)T[P]=L[S[P]];for(G=19;G>4&&0===T[G-1];G--);for(M=k(L),R.a(E-257,5,m),R.a(F-1,5,m),R.a(G-4,4,m),P=0;G>P;P++)R.a(T[P],3,m);for(P=0,Q=a.length;Q>P;P++)if(N=a[P],R.a(M[N],L[N],m),N>=16){switch(P++,N){case 16:O=2;break;case 17:O=3;break;case 18:O=7;break;default:throw"invalid code: "+N}R.a(a[P],O,m)}var da,ea,fa,ga,ha,ia,ja,ka,la=[I,H],ma=[K,J];for(ha=la[0],ia=la[1],ja=ma[0],ka=ma[1],da=0,ea=D.length;ea>da;++da)if(fa=D[da],R.a(ha[fa],ia[fa],m),fa>256)R.a(D[++da],D[++da],m),ga=D[++da],R.a(ja[ga],ka[ga],m),R.a(D[++da],D[++da],m);else if(256===fa)break;this.b=R.finish(),this.c=this.b.length;break;default:throw"invalid compression type"}return this.b};var y=function(){function a(a){switch(m){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:throw"invalid length: "+a}}var b,c,d=[];for(b=3;258>=b;b++)c=a(b),d[b]=c[2]<<24|c[1]<<16|c[0];return d}(),z=o?new Uint32Array(y):y;a("Zlib.RawDeflate",e),a("Zlib.RawDeflate.prototype.compress",e.prototype.h);var A,B,C,D,E={NONE:0,FIXED:1,DYNAMIC:w};if(Object.keys)A=Object.keys(E);else for(B in A=[],C=0,E)A[C++]=B;for(C=0,D=A.length;D>C;++C)B=A[C],a("Zlib.RawDeflate.CompressionType."+B,E[B])}).call(this)},{}],14:[function(a,b,c){(function(){"use strict";function a(a,b){var c=a.split("."),d=g;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d=d[e]?d[e]:d[e]={}:d[e]=b}function b(a){var b,c,d,e,f,g,i,j,k,l,m=a.length,n=0,o=Number.POSITIVE_INFINITY;for(j=0;m>j;++j)a[j]>n&&(n=a[j]),a[j]=d;){for(j=0;m>j;++j)if(a[j]===d){for(g=0,i=e,k=0;d>k;++k)g=g<<1|1&i,i>>=1;for(l=d<<16|j,k=g;b>k;k+=f)c[k]=l;++e}++d,e<<=1,f<<=1}return[c,n,o]}function c(a,b){switch(this.g=[],this.h=32768,this.c=this.f=this.d=this.k=0,this.input=h?new Uint8Array(a):a,this.l=!1,this.i=j,this.q=!1,(b||!(b={}))&&(b.index&&(this.d=b.index),b.bufferSize&&(this.h=b.bufferSize),b.bufferType&&(this.i=b.bufferType),b.resize&&(this.q=b.resize)),this.i){case i:this.a=32768,this.b=new(h?Uint8Array:Array)(32768+this.h+258);break;case j:this.a=0,this.b=new(h?Uint8Array:Array)(this.h),this.e=this.v,this.m=this.s,this.j=this.t;break;default:throw Error("invalid inflate mode")}}function d(a,b){for(var c,d=a.f,e=a.c,f=a.input,g=a.d,h=f.length;b>e;){if(g>=h)throw Error("input buffer is broken");d|=f[g++]<>>b,a.c=e-b,a.d=g,c}function e(a,b){for(var c,d,e=a.f,f=a.c,g=a.input,h=a.d,i=g.length,j=b[0],k=b[1];k>f&&!(h>=i);)e|=g[h++]<>>16,a.f=e>>d,a.c=f-d,a.d=h,65535&c}function f(a){function c(a,b,c){var f,g,h,i=this.p;for(h=0;a>h;)switch(f=e(this,b)){case 16:for(g=3+d(this,2);g--;)c[h++]=i;break;case 17:for(g=3+d(this,3);g--;)c[h++]=0;i=0;break;case 18:for(g=11+d(this,7);g--;)c[h++]=0;i=0;break;default:i=c[h++]=f}return this.p=i,c}var f,g,i,j,k=d(a,5)+257,l=d(a,5)+1,m=d(a,4)+4,o=new(h?Uint8Array:Array)(n.length);for(j=0;m>j;++j)o[n[j]]=d(a,3);if(!h)for(j=m,m=o.length;m>j;++j)o[n[j]]=0;f=b(o),g=new(h?Uint8Array:Array)(k),i=new(h?Uint8Array:Array)(l),a.p=0,a.j(b(c.call(a,k,f,g)),b(c.call(a,l,f,i)))}var g=this,h="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView,i=0,j=1;c.prototype.u=function(){for(;!this.l;){var a=d(this,3);switch(1&a&&(this.l=!0),a>>>=1){case 0:var b=this.input,c=this.d,e=this.b,g=this.a,k=b.length,l=void 0,m=void 0,n=e.length,o=void 0;if(this.c=this.f=0,c+1>=k)throw Error("invalid uncompressed block header: LEN");if(l=b[c++]|b[c++]<<8,c+1>=k)throw Error("invalid uncompressed block header: NLEN");if(m=b[c++]|b[c++]<<8,l===~m)throw Error("invalid uncompressed block header: length verify");if(c+l>b.length)throw Error("input buffer is broken");switch(this.i){case i:for(;g+l>e.length;){if(o=n-g,l-=o,h)e.set(b.subarray(c,c+o),g),g+=o,c+=o;else for(;o--;)e[g++]=b[c++];this.a=g,e=this.e(),g=this.a}break;case j:for(;g+l>e.length;)e=this.e({o:2});break;default:throw Error("invalid inflate mode")}if(h)e.set(b.subarray(c,c+l),g),g+=l,c+=l;else for(;l--;)e[g++]=b[c++];this.d=c,this.a=g,this.b=e;break;case 1:this.j(z,B);break;case 2:f(this);break;default:throw Error("unknown BTYPE: "+a)}}return this.m()};var k,l,m=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],n=h?new Uint16Array(m):m,o=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],p=h?new Uint16Array(o):o,q=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],r=h?new Uint8Array(q):q,s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],t=h?new Uint16Array(s):s,u=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],v=h?new Uint8Array(u):u,w=new(h?Uint8Array:Array)(288);for(k=0,l=w.length;l>k;++k)w[k]=143>=k?8:255>=k?9:279>=k?7:8;var x,y,z=b(w),A=new(h?Uint8Array:Array)(30);for(x=0,y=A.length;y>x;++x)A[x]=5;var B=b(A);c.prototype.j=function(a,b){var c=this.b,f=this.a;this.n=a;for(var g,h,i,j,k=c.length-258;256!==(g=e(this,a));)if(256>g)f>=k&&(this.a=f,c=this.e(),f=this.a),c[f++]=g;else for(h=g-257,j=p[h],0=k&&(this.a=f,c=this.e(),f=this.a);j--;)c[f]=c[f++-i];for(;8<=this.c;)this.c-=8,this.d--;this.a=f},c.prototype.t=function(a,b){var c=this.b,f=this.a;this.n=a;for(var g,h,i,j,k=c.length;256!==(g=e(this,a));)if(256>g)f>=k&&(c=this.e(),k=c.length),c[f++]=g;else for(h=g-257,j=p[h],0k&&(c=this.e(),k=c.length);j--;)c[f]=c[f++-i];for(;8<=this.c;)this.c-=8,this.d--;this.a=f},c.prototype.e=function(){var a,b,c=new(h?Uint8Array:Array)(this.a-32768),d=this.a-32768,e=this.b;if(h)c.set(e.subarray(32768,c.length));else for(a=0,b=c.length;b>a;++a)c[a]=e[a+32768];if(this.g.push(c),this.k+=c.length,h)e.set(e.subarray(d,d+32768));else for(a=0;32768>a;++a)e[a]=e[d+a];return this.a=32768,e},c.prototype.v=function(a){var b,c,d,e,f=this.input.length/this.d+1|0,g=this.input,i=this.b;return a&&("number"==typeof a.o&&(f=a.o),"number"==typeof a.r&&(f+=a.r)),2>f?(c=(g.length-this.d)/this.n[2],e=258*(c/2)|0,d=eb;++b)for(a=i[b],d=0,e=a.length;e>d;++d)j[f++]=a[d];for(b=32768,c=this.a;c>b;++b)j[f++]=g[b];return this.g=[],this.buffer=j},c.prototype.s=function(){var a,b=this.a;return h?this.q?(a=new Uint8Array(b),a.set(this.b.subarray(0,b))):a=this.b.subarray(0,b):(this.b.length>b&&(this.b.length=b),a=this.b),this.buffer=a},a("Zlib.RawInflate",c),a("Zlib.RawInflate.prototype.decompress",c.prototype.u);var C,D,E,F,G={ADAPTIVE:j,BLOCK:i};if(Object.keys)C=Object.keys(G);else for(D in C=[],E=0,G)C[E++]=D;for(E=0,F=C.length;F>E;++E)D=C[E],a("Zlib.RawInflate.BufferType."+D,G[D])}).call(this)},{}],15:[function(a,b,c){(function(){"use strict";function a(a){throw a}function b(a,b){var c=a.split("."),d=w;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||b===u?d=d[e]?d[e]:d[e]={}:d[e]=b}function c(b,c){this.index="number"==typeof c?c:0,this.i=0,this.buffer=b instanceof(x?Uint8Array:Array)?b:new(x?Uint8Array:Array)(32768),2*this.buffer.length<=this.index&&a(Error("invalid index")),this.buffer.length<=this.index&&this.f()}function d(a){this.buffer=new(x?Uint16Array:Array)(2*a),this.length=0}function e(a){var b,c,d,e,f,g,h,i,j,k,l=a.length,m=0,n=Number.POSITIVE_INFINITY;for(i=0;l>i;++i)a[i]>m&&(m=a[i]),a[i]=d;){for(i=0;l>i;++i)if(a[i]===d){for(g=0,h=e,j=0;d>j;++j)g=g<<1|1&h,h>>=1;for(k=d<<16|i,j=g;b>j;j+=f)c[j]=k;++e}++d,e<<=1,f<<=1}return[c,m,n]}function f(a,b){this.h=F,this.w=0,this.input=x&&a instanceof Array?new Uint8Array(a):a,this.b=0,b&&(b.lazy&&(this.w=b.lazy),"number"==typeof b.compressionType&&(this.h=b.compressionType),b.outputBuffer&&(this.a=x&&b.outputBuffer instanceof Array?new Uint8Array(b.outputBuffer):b.outputBuffer),"number"==typeof b.outputIndex&&(this.b=b.outputIndex)),this.a||(this.a=new(x?Uint8Array:Array)(32768))}function g(a,b){this.length=a,this.H=b}function h(b,c){function d(b,c){var d,e=b.H,f=[],g=0;d=J[b.length],f[g++]=65535&d,f[g++]=d>>16&255,f[g++]=d>>24;var h;switch(v){case 1===e:h=[0,e-1,0];break;case 2===e:h=[1,e-2,0];break;case 3===e:h=[2,e-3,0];break;case 4===e:h=[3,e-4,0];break;case 6>=e:h=[4,e-5,1];break;case 8>=e:h=[5,e-7,1];break;case 12>=e:h=[6,e-9,2];break;case 16>=e:h=[7,e-13,2];break;case 24>=e:h=[8,e-17,3];break;case 32>=e:h=[9,e-25,3];break;case 48>=e:h=[10,e-33,4];break;case 64>=e:h=[11,e-49,4];break;case 96>=e:h=[12,e-65,5];break;case 128>=e:h=[13,e-97,5];break;case 192>=e:h=[14,e-129,6];break;case 256>=e:h=[15,e-193,6];break;case 384>=e:h=[16,e-257,7];break;case 512>=e:h=[17,e-385,7];break;case 768>=e:h=[18,e-513,8];break;case 1024>=e:h=[19,e-769,8];break;case 1536>=e:h=[20,e-1025,9];break;case 2048>=e:h=[21,e-1537,9];break;case 3072>=e:h=[22,e-2049,10];break;case 4096>=e:h=[23,e-3073,10];break;case 6144>=e:h=[24,e-4097,11];break;case 8192>=e:h=[25,e-6145,11];break;case 12288>=e:h=[26,e-8193,12];break;case 16384>=e:h=[27,e-12289,12];break;case 24576>=e:h=[28,e-16385,13];break;case 32768>=e:h=[29,e-24577,13];break;default:a("invalid distance")}d=h,f[g++]=d[0],f[g++]=d[1],f[g++]=d[2];var i,j;for(i=0,j=f.length;j>i;++i)p[q++]=f[i];s[f[0]]++,t[f[3]]++,r=b.length+c-1,m=null}var e,f,g,h,j,k,l,m,n,o={},p=x?new Uint16Array(2*c.length):[],q=0,r=0,s=new(x?Uint32Array:Array)(286),t=new(x?Uint32Array:Array)(30),w=b.w;if(!x){for(g=0;285>=g;)s[g++]=0;for(g=0;29>=g;)t[g++]=0}for(s[256]=1,e=0,f=c.length;f>e;++e){for(g=j=0,h=3;h>g&&e+g!==f;++g)j=j<<8|c[e+g];if(o[j]===u&&(o[j]=[]),k=o[j],!(0=f){for(m&&d(m,-1),g=0,h=f-e;h>g;++g)n=c[e+g],p[q++]=n,++s[n];break}0h;h++){if(d=c[j-h-1],f=3,k>3){for(i=k;i>3;i--)if(a[d+i-1]!==a[b+i-1])continue a;f=k}for(;258>f&&l>b+f&&a[d+f]===a[b+f];)++f;if(f>k&&(e=d,k=f),258===f)break}return new g(k,b-e)}function j(a,b){var c,e,f,g,h,i=a.length,j=new d(572),l=new(x?Uint8Array:Array)(i);if(!x)for(g=0;i>g;g++)l[g]=0;for(g=0;i>g;++g)0g;++g)c[g]=j.pop(),e[g]=c[g].value;for(f=k(e,e.length,b),g=0,h=c.length;h>g;++g)l[c[g].index]=f[g];return l}function k(a,b,c){function d(a){var c=n[a][o[a]];c===b?(d(a+1),d(a+1)):--l[c],++o[a]}var e,f,g,h,i,j=new(x?Uint16Array:Array)(c),k=new(x?Uint8Array:Array)(c),l=new(x?Uint8Array:Array)(b),m=Array(c),n=Array(c),o=Array(c),p=(1<f;++f)q>p?k[f]=0:(k[f]=1,p-=q),p<<=1,j[c-2-f]=(j[c-1-f]/2|0)+b;for(j[0]=k[0],m[0]=Array(j[0]),n[0]=Array(j[0]),f=1;c>f;++f)j[f]>2*j[f-1]+k[f]&&(j[f]=2*j[f-1]+k[f]),m[f]=Array(j[f]),n[f]=Array(j[f]);for(e=0;b>e;++e)l[e]=c;for(g=0;ge;++e)o[e]=0;for(1===k[c-1]&&(--l[0],++o[c-1]),f=c-2;f>=0;--f){for(h=e=0,i=o[f+1],g=0;ga[e]?(m[f][g]=h,n[f][g]=b,i+=2):(m[f][g]=a[e],n[f][g]=e,++e);o[f]=0,1===k[f]&&d(f)}return l}function l(a){var b,c,d,e,f=new(x?Uint16Array:Array)(a.length),g=[],h=[],i=0;for(b=0,c=a.length;c>b;b++)g[a[b]]=(0|g[a[b]])+1;for(b=1,c=16;c>=b;b++)h[b]=i,i+=0|g[b],i<<=1;for(b=0,c=a.length;c>b;b++)for(i=h[a[b]],h[a[b]]+=1,d=f[b]=0,e=a[b];e>d;d++)f[b]=f[b]<<1|1&i,i>>>=1;return f}function m(b,c){switch(this.l=[],this.m=32768,this.e=this.g=this.c=this.q=0,this.input=x?new Uint8Array(b):b,this.s=!1,this.n=L,this.C=!1,(c||!(c={}))&&(c.index&&(this.c=c.index),c.bufferSize&&(this.m=c.bufferSize),c.bufferType&&(this.n=c.bufferType),c.resize&&(this.C=c.resize)),this.n){case K:this.b=32768,this.a=new(x?Uint8Array:Array)(32768+this.m+258);break;case L:this.b=0,this.a=new(x?Uint8Array:Array)(this.m),this.f=this.K,this.t=this.I,this.o=this.J;break;default:a(Error("invalid inflate mode"))}}function n(b,c){for(var d,e=b.g,f=b.e,g=b.input,h=b.c,i=g.length;c>f;)h>=i&&a(Error("input buffer is broken")),e|=g[h++]<>>c,b.e=f-c,b.c=h,d}function o(a,b){for(var c,d,e=a.g,f=a.e,g=a.input,h=a.c,i=g.length,j=b[0],k=b[1];k>f&&!(h>=i);)e|=g[h++]<>>16,a.g=e>>d,a.e=f-d,a.c=h,65535&c}function p(a){function b(a,b,c){var d,e,f,g=this.z;for(f=0;a>f;)switch(d=o(this,b)){case 16:for(e=3+n(this,2);e--;)c[f++]=g;break;case 17:for(e=3+n(this,3);e--;)c[f++]=0;g=0;break;case 18:for(e=11+n(this,7);e--;)c[f++]=0;g=0;break;default:g=c[f++]=d}return this.z=g,c}var c,d,f,g,h=n(a,5)+257,i=n(a,5)+1,j=n(a,4)+4,k=new(x?Uint8Array:Array)(Q.length);for(g=0;j>g;++g)k[Q[g]]=n(a,3);if(!x)for(g=j,j=k.length;j>g;++g)k[Q[g]]=0;c=e(k),d=new(x?Uint8Array:Array)(h),f=new(x?Uint8Array:Array)(i),a.z=0,a.o(e(b.call(a,h,c,d)),e(b.call(a,i,c,f)))}function q(a){if("string"==typeof a){var b,c,d=a.split("");for(b=0,c=d.length;c>b;b++)d[b]=(255&d[b].charCodeAt(0))>>>0;a=d}for(var e,f=1,g=0,h=a.length,i=0;h>0;){e=h>1024?1024:h,h-=e;do f+=a[i++],g+=f;while(--e);f%=65521,g%=65521}return(g<<16|f)>>>0}function r(b,c){var d,e;switch(this.input=b,this.c=0,(c||!(c={}))&&(c.index&&(this.c=c.index),c.verify&&(this.N=c.verify)),d=b[this.c++],e=b[this.c++],15&d){case da:this.method=da;break;default:a(Error("unsupported compression method"))}0!==((d<<8)+e)%31&&a(Error("invalid fcheck flag:"+((d<<8)+e)%31)), -32&e&&a(Error("fdict flag is not supported")),this.B=new m(b,{index:this.c,bufferSize:c.bufferSize,bufferType:c.bufferType,resize:c.resize})}function s(a,b){this.input=a,this.a=new(x?Uint8Array:Array)(32768),this.h=ea.k;var c,d={};!b&&(b={})||"number"!=typeof b.compressionType||(this.h=b.compressionType);for(c in b)d[c]=b[c];d.outputBuffer=this.a,this.A=new f(this.input,d)}function t(a,c){var d,e,f,g;if(Object.keys)d=Object.keys(c);else for(e in d=[],f=0,c)d[f++]=e;for(f=0,g=d.length;g>f;++f)e=d[f],b(a+"."+e,c[e])}var u=void 0,v=!0,w=this,x="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView;c.prototype.f=function(){var a,b=this.buffer,c=b.length,d=new(x?Uint8Array:Array)(c<<1);if(x)d.set(b);else for(a=0;c>a;++a)d[a]=b[a];return this.buffer=d},c.prototype.d=function(a,b,c){var d,e=this.buffer,f=this.index,g=this.i,h=e[f];if(c&&b>1&&(a=b>8?(D[255&a]<<24|D[a>>>8&255]<<16|D[a>>>16&255]<<8|D[a>>>24&255])>>32-b:D[a]>>8-b),8>b+g)h=h<d;++d)h=h<<1|a>>b-d-1&1,8===++g&&(g=0,e[f++]=D[h],h=0,f===e.length&&(e=this.f()));e[f]=h,this.buffer=e,this.i=g,this.index=f},c.prototype.finish=function(){var a,b=this.buffer,c=this.index;return 0y;++y){for(var A=y,B=A,C=7,A=A>>>1;A;A>>>=1)B<<=1,B|=1&A,--C;z[y]=(B<>>0}var D=z;d.prototype.getParent=function(a){return 2*((a-2)/4|0)},d.prototype.push=function(a,b){var c,d,e,f=this.buffer;for(c=this.length,f[this.length++]=b,f[this.length++]=a;c>0&&(d=this.getParent(c),f[c]>f[d]);)e=f[c],f[c]=f[d],f[d]=e,e=f[c+1],f[c+1]=f[d+1],f[d+1]=e,c=d;return this.length},d.prototype.pop=function(){var a,b,c,d,e,f=this.buffer;for(b=f[0],a=f[1],this.length-=2,f[0]=f[this.length],f[1]=f[this.length+1],e=0;(d=2*e+2,!(d>=this.length))&&(d+2f[d]&&(d+=2),f[d]>f[e]);)c=f[e],f[e]=f[d],f[d]=c,c=f[e+1],f[e+1]=f[d+1],f[d+1]=c,e=d;return{index:a,value:b,length:this.length}};var E,F=2,G={NONE:0,r:1,k:F,O:3},H=[];for(E=0;288>E;E++)switch(v){case 143>=E:H.push([E+48,8]);break;case 255>=E:H.push([E-144+400,9]);break;case 279>=E:H.push([E-256+0,7]);break;case 287>=E:H.push([E-280+192,8]);break;default:a("invalid literal: "+E)}f.prototype.j=function(){var b,d,e,f,g=this.input;switch(this.h){case 0:for(e=0,f=g.length;f>e;){d=x?g.subarray(e,e+65535):g.slice(e,e+65535),e+=d.length;var i=d,k=e===f,m=u,n=u,o=u,p=u,q=u,r=this.a,s=this.b;if(x){for(r=new Uint8Array(this.a.buffer);r.length<=s+i.length+5;)r=new Uint8Array(r.length<<1);r.set(this.a)}if(m=k?1:0,r[s++]=0|m,n=i.length,o=~n+65536&65535,r[s++]=255&n,r[s++]=n>>>8&255,r[s++]=255&o,r[s++]=o>>>8&255,x)r.set(i,s),s+=i.length,r=r.subarray(0,s);else{for(p=0,q=i.length;q>p;++p)r[s++]=i[p];r.length=s}this.b=s,this.a=r}break;case 1:var t=new c(x?new Uint8Array(this.a.buffer):this.a,this.b);t.d(1,1,v),t.d(1,2,v);var w,y,z,A=h(this,g);for(w=0,y=A.length;y>w;w++)if(z=A[w],c.prototype.d.apply(t,H[z]),z>256)t.d(A[++w],A[++w],v),t.d(A[++w],5),t.d(A[++w],A[++w],v);else if(256===z)break;this.a=t.finish(),this.b=this.a.length;break;case F:var B,C,D,E,G,I,J,K,L,M,N,O,P,Q,R,S=new c(x?new Uint8Array(this.a.buffer):this.a,this.b),T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],U=Array(19);for(B=F,S.d(1,1,v),S.d(B,2,v),C=h(this,g),I=j(this.M,15),J=l(I),K=j(this.L,7),L=l(K),D=286;D>257&&0===I[D-1];D--);for(E=30;E>1&&0===K[E-1];E--);var V,W,X,Y,Z,$,_=D,aa=E,ba=new(x?Uint32Array:Array)(_+aa),ca=new(x?Uint32Array:Array)(316),da=new(x?Uint8Array:Array)(19);for(V=W=0;_>V;V++)ba[W++]=I[V];for(V=0;aa>V;V++)ba[W++]=K[V];if(!x)for(V=0,Y=da.length;Y>V;++V)da[V]=0;for(V=Z=0,Y=ba.length;Y>V;V+=W){for(W=1;Y>V+W&&ba[V+W]===ba[V];++W);if(X=W,0===ba[V])if(3>X)for(;00;)$=138>X?X:138,$>X-3&&X>$&&($=X-3),10>=$?(ca[Z++]=17,ca[Z++]=$-3,da[17]++):(ca[Z++]=18,ca[Z++]=$-11,da[18]++),X-=$;else if(ca[Z++]=ba[V],da[ba[V]]++,X--,3>X)for(;00;)$=6>X?X:6,$>X-3&&X>$&&($=X-3),ca[Z++]=16,ca[Z++]=$-3,da[16]++,X-=$}for(b=x?ca.subarray(0,Z):ca.slice(0,Z),M=j(da,7),Q=0;19>Q;Q++)U[Q]=M[T[Q]];for(G=19;G>4&&0===U[G-1];G--);for(N=l(M),S.d(D-257,5,v),S.d(E-1,5,v),S.d(G-4,4,v),Q=0;G>Q;Q++)S.d(U[Q],3,v);for(Q=0,R=b.length;R>Q;Q++)if(O=b[Q],S.d(N[O],M[O],v),O>=16){switch(Q++,O){case 16:P=2;break;case 17:P=3;break;case 18:P=7;break;default:a("invalid code: "+O)}S.d(b[Q],P,v)}var ea,fa,ga,ha,ia,ja,ka,la,ma=[J,I],na=[L,K];for(ia=ma[0],ja=ma[1],ka=na[0],la=na[1],ea=0,fa=C.length;fa>ea;++ea)if(ga=C[ea],S.d(ia[ga],ja[ga],v),ga>256)S.d(C[++ea],C[++ea],v),ha=C[++ea],S.d(ka[ha],la[ha],v),S.d(C[++ea],C[++ea],v);else if(256===ga)break;this.a=S.finish(),this.b=this.a.length;break;default:a("invalid compression type")}return this.a};var I=function(){function b(b){switch(v){case 3===b:return[257,b-3,0];case 4===b:return[258,b-4,0];case 5===b:return[259,b-5,0];case 6===b:return[260,b-6,0];case 7===b:return[261,b-7,0];case 8===b:return[262,b-8,0];case 9===b:return[263,b-9,0];case 10===b:return[264,b-10,0];case 12>=b:return[265,b-11,1];case 14>=b:return[266,b-13,1];case 16>=b:return[267,b-15,1];case 18>=b:return[268,b-17,1];case 22>=b:return[269,b-19,2];case 26>=b:return[270,b-23,2];case 30>=b:return[271,b-27,2];case 34>=b:return[272,b-31,2];case 42>=b:return[273,b-35,3];case 50>=b:return[274,b-43,3];case 58>=b:return[275,b-51,3];case 66>=b:return[276,b-59,3];case 82>=b:return[277,b-67,4];case 98>=b:return[278,b-83,4];case 114>=b:return[279,b-99,4];case 130>=b:return[280,b-115,4];case 162>=b:return[281,b-131,5];case 194>=b:return[282,b-163,5];case 226>=b:return[283,b-195,5];case 257>=b:return[284,b-227,5];case 258===b:return[285,b-258,0];default:a("invalid length: "+b)}}var c,d,e=[];for(c=3;258>=c;c++)d=b(c),e[c]=d[2]<<24|d[1]<<16|d[0];return e}(),J=x?new Uint32Array(I):I,K=0,L=1,M={F:K,D:L};m.prototype.p=function(){for(;!this.s;){var b=n(this,3);switch(1&b&&(this.s=v),b>>>=1){case 0:var c=this.input,d=this.c,e=this.a,f=this.b,g=c.length,h=u,i=u,j=e.length,k=u;switch(this.e=this.g=0,d+1>=g&&a(Error("invalid uncompressed block header: LEN")),h=c[d++]|c[d++]<<8,d+1>=g&&a(Error("invalid uncompressed block header: NLEN")),i=c[d++]|c[d++]<<8,h===~i&&a(Error("invalid uncompressed block header: length verify")),d+h>c.length&&a(Error("input buffer is broken")),this.n){case K:for(;f+h>e.length;){if(k=j-f,h-=k,x)e.set(c.subarray(d,d+k),f),f+=k,d+=k;else for(;k--;)e[f++]=c[d++];this.b=f,e=this.f(),f=this.b}break;case L:for(;f+h>e.length;)e=this.f({v:2});break;default:a(Error("invalid inflate mode"))}if(x)e.set(c.subarray(d,d+h),f),f+=h,d+=h;else for(;h--;)e[f++]=c[d++];this.c=d,this.b=f,this.a=e;break;case 1:this.o(aa,ca);break;case 2:p(this);break;default:a(Error("unknown BTYPE: "+b))}}return this.t()};var N,O,P=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Q=x?new Uint16Array(P):P,R=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],S=x?new Uint16Array(R):R,T=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],U=x?new Uint8Array(T):T,V=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],W=x?new Uint16Array(V):V,X=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],Y=x?new Uint8Array(X):X,Z=new(x?Uint8Array:Array)(288);for(N=0,O=Z.length;O>N;++N)Z[N]=143>=N?8:255>=N?9:279>=N?7:8;var $,_,aa=e(Z),ba=new(x?Uint8Array:Array)(30);for($=0,_=ba.length;_>$;++$)ba[$]=5;var ca=e(ba);m.prototype.o=function(a,b){var c=this.a,d=this.b;this.u=a;for(var e,f,g,h,i=c.length-258;256!==(e=o(this,a));)if(256>e)d>=i&&(this.b=d,c=this.f(),d=this.b),c[d++]=e;else for(f=e-257,h=S[f],0=i&&(this.b=d,c=this.f(),d=this.b);h--;)c[d]=c[d++-g];for(;8<=this.e;)this.e-=8,this.c--;this.b=d},m.prototype.J=function(a,b){var c=this.a,d=this.b;this.u=a;for(var e,f,g,h,i=c.length;256!==(e=o(this,a));)if(256>e)d>=i&&(c=this.f(),i=c.length),c[d++]=e;else for(f=e-257,h=S[f],0i&&(c=this.f(),i=c.length);h--;)c[d]=c[d++-g];for(;8<=this.e;)this.e-=8,this.c--;this.b=d},m.prototype.f=function(){var a,b,c=new(x?Uint8Array:Array)(this.b-32768),d=this.b-32768,e=this.a;if(x)c.set(e.subarray(32768,c.length));else for(a=0,b=c.length;b>a;++a)c[a]=e[a+32768];if(this.l.push(c),this.q+=c.length,x)e.set(e.subarray(d,d+32768));else for(a=0;32768>a;++a)e[a]=e[d+a];return this.b=32768,e},m.prototype.K=function(a){var b,c,d,e,f=this.input.length/this.c+1|0,g=this.input,h=this.a;return a&&("number"==typeof a.v&&(f=a.v),"number"==typeof a.G&&(f+=a.G)),2>f?(c=(g.length-this.c)/this.u[2],e=258*(c/2)|0,d=eb;++b)for(a=h[b],d=0,e=a.length;e>d;++d)i[f++]=a[d];for(b=32768,c=this.b;c>b;++b)i[f++]=g[b];return this.l=[],this.buffer=i},m.prototype.I=function(){var a,b=this.b;return x?this.C?(a=new Uint8Array(b),a.set(this.a.subarray(0,b))):a=this.a.subarray(0,b):(this.a.length>b&&(this.a.length=b),a=this.a),this.buffer=a},r.prototype.p=function(){var b,c,d=this.input;return b=this.B.p(),this.c=this.B.c,this.N&&(c=(d[this.c++]<<24|d[this.c++]<<16|d[this.c++]<<8|d[this.c++])>>>0,c!==q(b)&&a(Error("invalid adler-32 checksum"))),b};var da=8,ea=G;s.prototype.j=function(){var b,c,d,e,f,g,h,i=0;switch(h=this.a,b=da){case da:c=Math.LOG2E*Math.log(32768)-8;break;default:a(Error("invalid compression method"))}switch(d=c<<4|b,h[i++]=d,b){case da:switch(this.h){case ea.NONE:f=0;break;case ea.r:f=1;break;case ea.k:f=2;break;default:a(Error("unsupported compression type"))}break;default:a(Error("invalid compression method"))}return e=f<<6|0,h[i++]=e|31-(256*d+e)%31,g=q(this.input),this.A.b=i,h=this.A.j(),i=h.length,x&&(h=new Uint8Array(h.buffer),h.length<=i+4&&(this.a=new Uint8Array(h.length+4),this.a.set(h),h=this.a),h=h.subarray(0,i+4)),h[i++]=g>>24&255,h[i++]=g>>16&255,h[i++]=g>>8&255,h[i++]=255&g,h},b("Zlib.Inflate",r),b("Zlib.Inflate.prototype.decompress",r.prototype.p),t("Zlib.Inflate.BufferType",{ADAPTIVE:M.D,BLOCK:M.F}),b("Zlib.Deflate",s),b("Zlib.Deflate.compress",function(a,b){return new s(a,b).j()}),b("Zlib.Deflate.prototype.compress",s.prototype.j),t("Zlib.Deflate.CompressionType",{NONE:ea.NONE,FIXED:ea.r,DYNAMIC:ea.k})}).call(this)},{}],16:[function(a,b,c){var d=a("../enums.js");b.exports={prefer_hash_algorithm:d.hash.sha256,encryption_cipher:d.symmetric.aes256,compression:d.compression.zip,integrity_protect:!0,ignore_mdc_error:!1,rsa_blinding:!0,useWebCrypto:!0,show_version:!0,show_comment:!0,versionstring:"OpenPGP.js v1.6.2",commentstring:"http://openpgpjs.org",keyserver:"https://keyserver.ubuntu.com",node_store:"./openpgp.store",debug:!1}},{"../enums.js":43}],17:[function(a,b,c){b.exports=a("./config.js")},{"./config.js":16}],18:[function(a,b,c){"use strict";var d=a("../util.js"),e=a("./cipher");b.exports={encrypt:function(a,b,c,f,g){b=new e[b](f);var h=b.blockSize,i=new Uint8Array(h),j=new Uint8Array(h);a=a+a.charAt(h-2)+a.charAt(h-1);var k,l,m,n=new Uint8Array(c.length+2+2*h),o=g?0:2;for(k=0;h>k;k++)i[k]=0;for(j=b.encrypt(i),k=0;h>k;k++)n[k]=j[k]^a.charCodeAt(k);for(i.set(n.subarray(0,h)),j=b.encrypt(i),n[h]=j[0]^a.charCodeAt(h),n[h+1]=j[1]^a.charCodeAt(h+1),g?i.set(n.subarray(2,h+2)):i.set(n.subarray(0,h)),j=b.encrypt(i),k=0;h>k;k++)n[h+2+k]=j[k+o]^c.charCodeAt(k);for(l=h;lk;k++)n[h+m+k]=j[k]^c.charCodeAt(l+k-o);return n=n.subarray(0,c.length+2+h),d.Uint8Array2str(n)},mdc:function(a,b,c){a=new e[a](b);var f,g=a.blockSize,h=new Uint8Array(g),i=new Uint8Array(g);for(f=0;g>f;f++)h[f]=0;for(h=a.encrypt(h),f=0;g>f;f++)i[f]=c.charCodeAt(f),h[f]^=i[f];return i=a.encrypt(i),d.bin2str(h)+String.fromCharCode(i[0]^c.charCodeAt(g))+String.fromCharCode(i[1]^c.charCodeAt(g+1))},decrypt:function(a,b,c,d){a=new e[a](b);var f,g=a.blockSize,h=new Uint8Array(g),i=new Uint8Array(g),j="",k=[];for(f=0;g>f;f++)h[f]=0;for(h=a.encrypt(h),f=0;g>f;f++)i[f]=c.charCodeAt(f),h[f]^=i[f];if(i=a.encrypt(i),h[g-2]!=(i[0]^c.charCodeAt(g))||h[g-1]!=(i[1]^c.charCodeAt(g+1)))throw new Error("CFB decrypt: invalid key");if(d){for(f=0;g>f;f++)h[f]=c.charCodeAt(f+2);for(j=g+2;jf&&f+jf;f++)h[f]=c.charCodeAt(f);for(j=g;jf&&f+jg*j;){var m=a.encrypt(d.str2bin(i));h=c.substring(j*g,j*g+g);for(var n=0;ng;g++)i+=String.fromCharCode(0);else i=f.substring(0,h);for(;c.length>h*j;){var m=a.encrypt(d.str2bin(i));for(i=c.substring(j*h+l,j*h+h+l),g=0;g>8&255}function f(a){return a>>16&255}function g(a){return a>>24&255}function h(a,b,c,d){return e(p[255&a])|e(p[b>>8&255])<<8|e(p[c>>16&255])<<16|e(p[d>>>24])<<24}function i(a){var b,c,d=a.length,e=new Array(d/4);if(a&&!(d%4)){for(b=0,c=0;d>c;c+=4)e[b++]=a[c]|a[c+1]<<8|a[c+2]<<16|a[c+3]<<24;return e}}function j(a){var b,c=0,h=a.length,i=new Array(4*h);for(b=0;h>b;b++)i[c++]=d(a[b]),i[c++]=e(a[b]),i[c++]=f(a[b]),i[c++]=g(a[b]);return i}function k(a){var b,c,h,i,j,k,l=new Array(u+1),m=a.length,p=new Array(t),q=new Array(t),r=0;if(16==m)k=10,b=4;else if(24==m)k=12,b=6;else{if(32!=m)throw new Error("Invalid key-length for AES key:"+m);k=14,b=8}for(c=0;u+1>c;c++)l[c]=new Uint32Array(4);for(c=0,h=0;m>h;h++,c+=4)p[h]=a.charCodeAt(c)|a.charCodeAt(c+1)<<8|a.charCodeAt(c+2)<<16|a.charCodeAt(c+3)<<24;for(h=b-1;h>=0;h--)q[h]=p[h];for(i=0,j=0,h=0;b>h&&k+1>i;){for(;b>h&&4>j;h++,j++)l[i][j]=q[h];4==j&&(i++,j=0)}for(;k+1>i;){var s=q[b-1];if(q[0]^=o[e(s)]|o[f(s)]<<8|o[g(s)]<<16|o[d(s)]<<24,q[0]^=n[r++],8!=b)for(h=1;b>h;h++)q[h]^=q[h-1];else{for(h=1;b/2>h;h++)q[h]^=q[h-1];for(s=q[b/2-1],q[b/2]^=o[d(s)]|o[e(s)]<<8|o[f(s)]<<16|o[g(s)]<<24,h=b/2+1;b>h;h++)q[h]^=q[h-1]}for(h=0;b>h&&k+1>i;){for(;b>h&&4>j;h++,j++)l[i][j]=q[h];4==j&&(i++,j=0)}}return{rounds:k,rk:l}}function l(a,b,c){var d,e,f;for(f=i(a),e=b.rounds,d=0;e-1>d;d++)c[0]=f[0]^b.rk[d][0],c[1]=f[1]^b.rk[d][1],c[2]=f[2]^b.rk[d][2],c[3]=f[3]^b.rk[d][3],f[0]=p[255&c[0]]^q[c[1]>>8&255]^r[c[2]>>16&255]^s[c[3]>>>24],f[1]=p[255&c[1]]^q[c[2]>>8&255]^r[c[3]>>16&255]^s[c[0]>>>24],f[2]=p[255&c[2]]^q[c[3]>>8&255]^r[c[0]>>16&255]^s[c[1]>>>24],f[3]=p[255&c[3]]^q[c[0]>>8&255]^r[c[1]>>16&255]^s[c[2]>>>24];return d=e-1,c[0]=f[0]^b.rk[d][0],c[1]=f[1]^b.rk[d][1],c[2]=f[2]^b.rk[d][2],c[3]=f[3]^b.rk[d][3],f[0]=h(c[0],c[1],c[2],c[3])^b.rk[e][0],f[1]=h(c[1],c[2],c[3],c[0])^b.rk[e][1],f[2]=h(c[2],c[3],c[0],c[1])^b.rk[e][2],f[3]=h(c[3],c[0],c[1],c[2])^b.rk[e][3],j(f)}function m(a){var b=function(a){this.key=k(a),this._temp=new Uint32Array(this.blockSize/4),this.encrypt=function(a){return l(a,this.key,this._temp)}};return b.blockSize=b.prototype.blockSize=16,b.keySize=b.prototype.keySize=a/8,b}var n=(a("../../util.js"),new Uint8Array([1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145])),o=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]),p=new Uint32Array([2774754246,2222750968,2574743534,2373680118,234025727,3177933782,2976870366,1422247313,1345335392,50397442,2842126286,2099981142,436141799,1658312629,3870010189,2591454956,1170918031,2642575903,1086966153,2273148410,368769775,3948501426,3376891790,200339707,3970805057,1742001331,4255294047,3937382213,3214711843,4154762323,2524082916,1539358875,3266819957,486407649,2928907069,1780885068,1513502316,1094664062,49805301,1338821763,1546925160,4104496465,887481809,150073849,2473685474,1943591083,1395732834,1058346282,201589768,1388824469,1696801606,1589887901,672667696,2711000631,251987210,3046808111,151455502,907153956,2608889883,1038279391,652995533,1764173646,3451040383,2675275242,453576978,2659418909,1949051992,773462580,756751158,2993581788,3998898868,4221608027,4132590244,1295727478,1641469623,3467883389,2066295122,1055122397,1898917726,2542044179,4115878822,1758581177,0,753790401,1612718144,536673507,3367088505,3982187446,3194645204,1187761037,3653156455,1262041458,3729410708,3561770136,3898103984,1255133061,1808847035,720367557,3853167183,385612781,3309519750,3612167578,1429418854,2491778321,3477423498,284817897,100794884,2172616702,4031795360,1144798328,3131023141,3819481163,4082192802,4272137053,3225436288,2324664069,2912064063,3164445985,1211644016,83228145,3753688163,3249976951,1977277103,1663115586,806359072,452984805,250868733,1842533055,1288555905,336333848,890442534,804056259,3781124030,2727843637,3427026056,957814574,1472513171,4071073621,2189328124,1195195770,2892260552,3881655738,723065138,2507371494,2690670784,2558624025,3511635870,2145180835,1713513028,2116692564,2878378043,2206763019,3393603212,703524551,3552098411,1007948840,2044649127,3797835452,487262998,1994120109,1004593371,1446130276,1312438900,503974420,3679013266,168166924,1814307912,3831258296,1573044895,1859376061,4021070915,2791465668,2828112185,2761266481,937747667,2339994098,854058965,1137232011,1496790894,3077402074,2358086913,1691735473,3528347292,3769215305,3027004632,4199962284,133494003,636152527,2942657994,2390391540,3920539207,403179536,3585784431,2289596656,1864705354,1915629148,605822008,4054230615,3350508659,1371981463,602466507,2094914977,2624877800,555687742,3712699286,3703422305,2257292045,2240449039,2423288032,1111375484,3300242801,2858837708,3628615824,84083462,32962295,302911004,2741068226,1597322602,4183250862,3501832553,2441512471,1489093017,656219450,3114180135,954327513,335083755,3013122091,856756514,3144247762,1893325225,2307821063,2811532339,3063651117,572399164,2458355477,552200649,1238290055,4283782570,2015897680,2061492133,2408352771,4171342169,2156497161,386731290,3669999461,837215959,3326231172,3093850320,3275833730,2962856233,1999449434,286199582,3417354363,4233385128,3602627437,974525996]),q=new Uint32Array([1667483301,2088564868,2004348569,2071721613,4076011277,1802229437,1869602481,3318059348,808476752,16843267,1734856361,724260477,4278118169,3621238114,2880130534,1987505306,3402272581,2189565853,3385428288,2105408135,4210749205,1499050731,1195871945,4042324747,2913812972,3570709351,2728550397,2947499498,2627478463,2762232823,1920132246,3233848155,3082253762,4261273884,2475900334,640044138,909536346,1061125697,4160222466,3435955023,875849820,2779075060,3857043764,4059166984,1903288979,3638078323,825320019,353708607,67373068,3351745874,589514341,3284376926,404238376,2526427041,84216335,2593796021,117902857,303178806,2155879323,3806519101,3958099238,656887401,2998042573,1970662047,151589403,2206408094,741103732,437924910,454768173,1852759218,1515893998,2694863867,1381147894,993752653,3604395873,3014884814,690573947,3823361342,791633521,2223248279,1397991157,3520182632,0,3991781676,538984544,4244431647,2981198280,1532737261,1785386174,3419114822,3200149465,960066123,1246401758,1280088276,1482207464,3486483786,3503340395,4025468202,2863288293,4227591446,1128498885,1296931543,859006549,2240090516,1162185423,4193904912,33686534,2139094657,1347461360,1010595908,2678007226,2829601763,1364304627,2745392638,1077969088,2408514954,2459058093,2644320700,943222856,4126535940,3166462943,3065411521,3671764853,555827811,269492272,4294960410,4092853518,3537026925,3452797260,202119188,320022069,3974939439,1600110305,2543269282,1145342156,387395129,3301217111,2812761586,2122251394,1027439175,1684326572,1566423783,421081643,1936975509,1616953504,2172721560,1330618065,3705447295,572671078,707417214,2425371563,2290617219,1179028682,4008625961,3099093971,336865340,3739133817,1583267042,185275933,3688607094,3772832571,842163286,976909390,168432670,1229558491,101059594,606357612,1549580516,3267534685,3553869166,2896970735,1650640038,2442213800,2509582756,3840201527,2038035083,3890730290,3368586051,926379609,1835915959,2374828428,3587551588,1313774802,2846444e3,1819072692,1448520954,4109693703,3941256997,1701169839,2054878350,2930657257,134746136,3132780501,2021191816,623200879,774790258,471611428,2795919345,3031724999,3334903633,3907570467,3722289532,1953818780,522141217,1263245021,3183305180,2341145990,2324303749,1886445712,1044282434,3048567236,1718013098,1212715224,50529797,4143380225,235805714,1633796771,892693087,1465364217,3115936208,2256934801,3250690392,488454695,2661164985,3789674808,4177062675,2560109491,286335539,1768542907,3654920560,2391672713,2492740519,2610638262,505297954,2273777042,3924412704,3469641545,1431677695,673730680,3755976058,2357986191,2711706104,2307459456,218962455,3216991706,3873888049,1111655622,1751699640,1094812355,2576951728,757946999,252648977,2964356043,1414834428,3149622742,370551866]),r=new Uint32Array([1673962851,2096661628,2012125559,2079755643,4076801522,1809235307,1876865391,3314635973,811618352,16909057,1741597031,727088427,4276558334,3618988759,2874009259,1995217526,3398387146,2183110018,3381215433,2113570685,4209972730,1504897881,1200539975,4042984432,2906778797,3568527316,2724199842,2940594863,2619588508,2756966308,1927583346,3231407040,3077948087,4259388669,2470293139,642542118,913070646,1065238847,4160029431,3431157708,879254580,2773611685,3855693029,4059629809,1910674289,3635114968,828527409,355090197,67636228,3348452039,591815971,3281870531,405809176,2520228246,84545285,2586817946,118360327,304363026,2149292928,3806281186,3956090603,659450151,2994720178,1978310517,152181513,2199756419,743994412,439627290,456535323,1859957358,1521806938,2690382752,1386542674,997608763,3602342358,3011366579,693271337,3822927587,794718511,2215876484,1403450707,3518589137,0,3988860141,541089824,4242743292,2977548465,1538714971,1792327274,3415033547,3194476990,963791673,1251270218,1285084236,1487988824,3481619151,3501943760,4022676207,2857362858,4226619131,1132905795,1301993293,862344499,2232521861,1166724933,4192801017,33818114,2147385727,1352724560,1014514748,2670049951,2823545768,1369633617,2740846243,1082179648,2399505039,2453646738,2636233885,946882616,4126213365,3160661948,3061301686,3668932058,557998881,270544912,4293204735,4093447923,3535760850,3447803085,202904588,321271059,3972214764,1606345055,2536874647,1149815876,388905239,3297990596,2807427751,2130477694,1031423805,1690872932,1572530013,422718233,1944491379,1623236704,2165938305,1335808335,3701702620,574907938,710180394,2419829648,2282455944,1183631942,4006029806,3094074296,338181140,3735517662,1589437022,185998603,3685578459,3772464096,845436466,980700730,169090570,1234361161,101452294,608726052,1555620956,3265224130,3552407251,2890133420,1657054818,2436475025,2503058581,3839047652,2045938553,3889509095,3364570056,929978679,1843050349,2365688973,3585172693,1318900302,2840191145,1826141292,1454176854,4109567988,3939444202,1707781989,2062847610,2923948462,135272456,3127891386,2029029496,625635109,777810478,473441308,2790781350,3027486644,3331805638,3905627112,3718347997,1961401460,524165407,1268178251,3177307325,2332919435,2316273034,1893765232,1048330814,3044132021,1724688998,1217452104,50726147,4143383030,236720654,1640145761,896163637,1471084887,3110719673,2249691526,3248052417,490350365,2653403550,3789109473,4176155640,2553000856,287453969,1775418217,3651760345,2382858638,2486413204,2603464347,507257374,2266337927,3922272489,3464972750,1437269845,676362280,3752164063,2349043596,2707028129,2299101321,219813645,3211123391,3872862694,1115997762,1758509160,1099088705,2569646233,760903469,253628687,2960903088,1420360788,3144537787,371997206]),s=new Uint32Array([3332727651,4169432188,4003034999,4136467323,4279104242,3602738027,3736170351,2438251973,1615867952,33751297,3467208551,1451043627,3877240574,3043153879,1306962859,3969545846,2403715786,530416258,2302724553,4203183485,4011195130,3001768281,2395555655,4211863792,1106029997,3009926356,1610457762,1173008303,599760028,1408738468,3835064946,2606481600,1975695287,3776773629,1034851219,1282024998,1817851446,2118205247,4110612471,2203045068,1750873140,1374987685,3509904869,4178113009,3801313649,2876496088,1649619249,708777237,135005188,2505230279,1181033251,2640233411,807933976,933336726,168756485,800430746,235472647,607523346,463175808,3745374946,3441880043,1315514151,2144187058,3936318837,303761673,496927619,1484008492,875436570,908925723,3702681198,3035519578,1543217312,2767606354,1984772923,3076642518,2110698419,1383803177,3711886307,1584475951,328696964,2801095507,3110654417,0,3240947181,1080041504,3810524412,2043195825,3069008731,3569248874,2370227147,1742323390,1917532473,2497595978,2564049996,2968016984,2236272591,3144405200,3307925487,1340451498,3977706491,2261074755,2597801293,1716859699,294946181,2328839493,3910203897,67502594,4269899647,2700103760,2017737788,632987551,1273211048,2733855057,1576969123,2160083008,92966799,1068339858,566009245,1883781176,4043634165,1675607228,2009183926,2943736538,1113792801,540020752,3843751935,4245615603,3211645650,2169294285,403966988,641012499,3274697964,3202441055,899848087,2295088196,775493399,2472002756,1441965991,4236410494,2051489085,3366741092,3135724893,841685273,3868554099,3231735904,429425025,2664517455,2743065820,1147544098,1417554474,1001099408,193169544,2362066502,3341414126,1809037496,675025940,2809781982,3168951902,371002123,2910247899,3678134496,1683370546,1951283770,337512970,2463844681,201983494,1215046692,3101973596,2673722050,3178157011,1139780780,3299238498,967348625,832869781,3543655652,4069226873,3576883175,2336475336,1851340599,3669454189,25988493,2976175573,2631028302,1239460265,3635702892,2902087254,4077384948,3475368682,3400492389,4102978170,1206496942,270010376,1876277946,4035475576,1248797989,1550986798,941890588,1475454630,1942467764,2538718918,3408128232,2709315037,3902567540,1042358047,2531085131,1641856445,226921355,260409994,3767562352,2084716094,1908716981,3433719398,2430093384,100991747,4144101110,470945294,3265487201,1784624437,2935576407,1775286713,395413126,2572730817,975641885,666476190,3644383713,3943954680,733190296,573772049,3535497577,2842745305,126455438,866620564,766942107,1008868894,361924487,3374377449,2269761230,2868860245,1350051880,2776293343,59739276,1509466529,159418761,437718285,1708834751,3610371814,2227585602,3501746280,2193834305,699439513,1517759789,504434447,2076946608,2835108948,1842789307,742004246]),t=8,u=14;b.exports={};var v=[128,192,256];for(var w in v)b.exports[v[w]]=m(v[w])},{"../../util.js":76}],20:[function(a,b,c){function d(){}function e(a){this.bf=new d,this.bf.init(f.str2bin(a)),this.encrypt=function(a){return this.bf.encrypt_block(a)}}d.prototype.BLOCKSIZE=8,d.prototype.SBOXES=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]], -d.prototype.PARRAY=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],d.prototype.NN=16,d.prototype._clean=function(a){if(0>a){var b=2147483647&a;a=b+2147483648}return a},d.prototype._F=function(a){var b,c,d,e,f;return e=255&a,a>>>=8,d=255&a,a>>>=8,c=255&a,a>>>=8,b=255&a,f=this.sboxes[0][b]+this.sboxes[1][c],f^=this.sboxes[2][d],f+=this.sboxes[3][e]},d.prototype._encrypt_block=function(a){var b,c=a[0],d=a[1];for(b=0;b>>24-8*b&255,e[b+d]=c[1]>>>24-8*b&255;return e},d.prototype._decrypt_block=function(a){var b,c=a[0],d=a[1];for(b=this.NN+1;b>1;--b){c^=this.parray[b],d=this._F(c)^d;var e=c;c=d,d=e}c^=this.parray[1],d^=this.parray[0],a[0]=this._clean(d),a[1]=this._clean(c)},d.prototype.init=function(a){var b,c=0;for(this.parray=[],b=0;bd;++d)e=e<<8|255&a[c],++c>=a.length&&(c=0);this.parray[b]=this.PARRAY[b]^e}for(this.sboxes=[],b=0;4>b;++b)for(this.sboxes[b]=[],c=0;256>c;++c)this.sboxes[b][c]=this.SBOXES[b][c];var f=[0,0];for(b=0;bb;++b)for(c=0;256>c;c+=2)this._encrypt_block(f),this.sboxes[b][c+0]=f[0],this.sboxes[b][c+1]=f[1]};var f=a("../../util.js");b.exports=e,b.exports.keySize=e.prototype.keySize=16,b.exports.blockSize=e.prototype.blockSize=16},{"../../util.js":76}],21:[function(a,b,c){function d(){function a(a,b,c){var d=b+a,e=d<>>32-c;return(f[0][e>>>24]^f[1][e>>>16&255])-f[2][e>>>8&255]+f[3][255&e]}function b(a,b,c){var d=b^a,e=d<>>32-c;return f[0][e>>>24]-f[1][e>>>16&255]+f[2][e>>>8&255]^f[3][255&e]}function c(a,b,c){var d=b-a,e=d<>>32-c;return(f[0][e>>>24]+f[1][e>>>16&255]^f[2][e>>>8&255])-f[3][255&e]}this.BlockSize=8,this.KeySize=16,this.setKey=function(a){if(this.masking=new Array(16),this.rotate=new Array(16),this.reset(),a.length!=this.KeySize)throw new Error("CAST-128: keys must be 16 bytes");return this.keySchedule(a),!0},this.reset=function(){for(var a=0;16>a;a++)this.masking[a]=0,this.rotate[a]=0},this.getBlockSize=function(){return BlockSize},this.encrypt=function(d){for(var e=new Array(d.length),f=0;f>>24&255,e[f+1]=i>>>16&255,e[f+2]=i>>>8&255,e[f+3]=255&i,e[f+4]=h>>>24&255,e[f+5]=h>>>16&255,e[f+6]=h>>>8&255,e[f+7]=255&h}return e},this.decrypt=function(d){for(var e=new Array(d.length),f=0;f>>24&255,e[f+1]=i>>>16&255,e[f+2]=i>>>8&255,e[f+3]=255&i,e[f+4]=h>>>24&255,e[f+5]=h>>16&255,e[f+6]=h>>8&255,e[f+7]=255&h}return e};var d=new Array(4);d[0]=new Array(4),d[0][0]=new Array(4,0,13,15,12,14,8),d[0][1]=new Array(5,2,16,18,17,19,10),d[0][2]=new Array(6,3,23,22,21,20,9),d[0][3]=new Array(7,1,26,25,27,24,11),d[1]=new Array(4),d[1][0]=new Array(0,6,21,23,20,22,16),d[1][1]=new Array(1,4,0,2,1,3,18),d[1][2]=new Array(2,5,7,6,5,4,17),d[1][3]=new Array(3,7,10,9,11,8,19),d[2]=new Array(4),d[2][0]=new Array(4,0,13,15,12,14,8),d[2][1]=new Array(5,2,16,18,17,19,10),d[2][2]=new Array(6,3,23,22,21,20,9),d[2][3]=new Array(7,1,26,25,27,24,11),d[3]=new Array(4),d[3][0]=new Array(0,6,21,23,20,22,16),d[3][1]=new Array(1,4,0,2,1,3,18),d[3][2]=new Array(2,5,7,6,5,4,17),d[3][3]=new Array(3,7,10,9,11,8,19);var e=new Array(4);e[0]=new Array(4),e[0][0]=new Array(24,25,23,22,18),e[0][1]=new Array(26,27,21,20,22),e[0][2]=new Array(28,29,19,18,25),e[0][3]=new Array(30,31,17,16,28),e[1]=new Array(4),e[1][0]=new Array(3,2,12,13,8),e[1][1]=new Array(1,0,14,15,13),e[1][2]=new Array(7,6,8,9,3),e[1][3]=new Array(5,4,10,11,7),e[2]=new Array(4),e[2][0]=new Array(19,18,28,29,25),e[2][1]=new Array(17,16,30,31,28),e[2][2]=new Array(23,22,24,25,18),e[2][3]=new Array(21,20,26,27,22),e[3]=new Array(4),e[3][0]=new Array(8,9,7,6,3),e[3][1]=new Array(10,11,5,4,7),e[3][2]=new Array(12,13,3,2,8),e[3][3]=new Array(14,15,1,0,13),this.keySchedule=function(a){var b,c,g=new Array(8),h=new Array(32);for(b=0;4>b;b++)c=4*b,g[b]=a[c]<<24|a[c+1]<<16|a[c+2]<<8|a[c+3];for(var i,j=[6,7,4,5],k=0,l=0;2>l;l++)for(var m=0;4>m;m++){for(c=0;4>c;c++){var n=d[m][c];i=g[n[1]],i^=f[4][g[n[2]>>>2]>>>24-8*(3&n[2])&255],i^=f[5][g[n[3]>>>2]>>>24-8*(3&n[3])&255],i^=f[6][g[n[4]>>>2]>>>24-8*(3&n[4])&255],i^=f[7][g[n[5]>>>2]>>>24-8*(3&n[5])&255],i^=f[j[c]][g[n[6]>>>2]>>>24-8*(3&n[6])&255],g[n[0]]=i}for(c=0;4>c;c++){var o=e[m][c];i=f[4][g[o[0]>>>2]>>>24-8*(3&o[0])&255],i^=f[5][g[o[1]>>>2]>>>24-8*(3&o[1])&255],i^=f[6][g[o[2]>>>2]>>>24-8*(3&o[2])&255],i^=f[7][g[o[3]>>>2]>>>24-8*(3&o[3])&255],i^=f[4+c][g[o[4]>>>2]>>>24-8*(3&o[4])&255],h[k]=i,k++}}for(b=0;16>b;b++)this.masking[b]=h[b],this.rotate[b]=31&h[16+b]};var f=new Array(8);f[0]=new Array(821772500,2678128395,1810681135,1059425402,505495343,2617265619,1610868032,3483355465,3218386727,2294005173,3791863952,2563806837,1852023008,365126098,3269944861,584384398,677919599,3229601881,4280515016,2002735330,1136869587,3744433750,2289869850,2731719981,2714362070,879511577,1639411079,575934255,717107937,2857637483,576097850,2731753936,1725645e3,2810460463,5111599,767152862,2543075244,1251459544,1383482551,3052681127,3089939183,3612463449,1878520045,1510570527,2189125840,2431448366,582008916,3163445557,1265446783,1354458274,3529918736,3202711853,3073581712,3912963487,3029263377,1275016285,4249207360,2905708351,3304509486,1442611557,3585198765,2712415662,2731849581,3248163920,2283946226,208555832,2766454743,1331405426,1447828783,3315356441,3108627284,2957404670,2981538698,3339933917,1669711173,286233437,1465092821,1782121619,3862771680,710211251,980974943,1651941557,430374111,2051154026,704238805,4128970897,3144820574,2857402727,948965521,3333752299,2227686284,718756367,2269778983,2731643755,718440111,2857816721,3616097120,1113355533,2478022182,410092745,1811985197,1944238868,2696854588,1415722873,1682284203,1060277122,1998114690,1503841958,82706478,2315155686,1068173648,845149890,2167947013,1768146376,1993038550,3566826697,3390574031,940016341,3355073782,2328040721,904371731,1205506512,4094660742,2816623006,825647681,85914773,2857843460,1249926541,1417871568,3287612,3211054559,3126306446,1975924523,1353700161,2814456437,2438597621,1800716203,722146342,2873936343,1151126914,4160483941,2877670899,458611604,2866078500,3483680063,770352098,2652916994,3367839148,3940505011,3585973912,3809620402,718646636,2504206814,2914927912,3631288169,2857486607,2860018678,575749918,2857478043,718488780,2069512688,3548183469,453416197,1106044049,3032691430,52586708,3378514636,3459808877,3211506028,1785789304,218356169,3571399134,3759170522,1194783844,1523787992,3007827094,1975193539,2555452411,1341901877,3045838698,3776907964,3217423946,2802510864,2889438986,1057244207,1636348243,3761863214,1462225785,2632663439,481089165,718503062,24497053,3332243209,3344655856,3655024856,3960371065,1195698900,2971415156,3710176158,2115785917,4027663609,3525578417,2524296189,2745972565,3564906415,1372086093,1452307862,2780501478,1476592880,3389271281,18495466,2378148571,901398090,891748256,3279637769,3157290713,2560960102,1447622437,4284372637,216884176,2086908623,1879786977,3588903153,2242455666,2938092967,3559082096,2810645491,758861177,1121993112,215018983,642190776,4169236812,1196255959,2081185372,3508738393,941322904,4124243163,2877523539,1848581667,2205260958,3180453958,2589345134,3694731276,550028657,2519456284,3789985535,2973870856,2093648313,443148163,46942275,2734146937,1117713533,1115362972,1523183689,3717140224,1551984063),f[1]=new Array(522195092,4010518363,1776537470,960447360,4267822970,4005896314,1435016340,1929119313,2913464185,1310552629,3579470798,3724818106,2579771631,1594623892,417127293,2715217907,2696228731,1508390405,3994398868,3925858569,3695444102,4019471449,3129199795,3770928635,3520741761,990456497,4187484609,2783367035,21106139,3840405339,631373633,3783325702,532942976,396095098,3548038825,4267192484,2564721535,2011709262,2039648873,620404603,3776170075,2898526339,3612357925,4159332703,1645490516,223693667,1567101217,3362177881,1029951347,3470931136,3570957959,1550265121,119497089,972513919,907948164,3840628539,1613718692,3594177948,465323573,2659255085,654439692,2575596212,2699288441,3127702412,277098644,624404830,4100943870,2717858591,546110314,2403699828,3655377447,1321679412,4236791657,1045293279,4010672264,895050893,2319792268,494945126,1914543101,2777056443,3894764339,2219737618,311263384,4275257268,3458730721,669096869,3584475730,3835122877,3319158237,3949359204,2005142349,2713102337,2228954793,3769984788,569394103,3855636576,1425027204,108000370,2736431443,3671869269,3043122623,1750473702,2211081108,762237499,3972989403,2798899386,3061857628,2943854345,867476300,964413654,1591880597,1594774276,2179821409,552026980,3026064248,3726140315,2283577634,3110545105,2152310760,582474363,1582640421,1383256631,2043843868,3322775884,1217180674,463797851,2763038571,480777679,2718707717,2289164131,3118346187,214354409,200212307,3810608407,3025414197,2674075964,3997296425,1847405948,1342460550,510035443,4080271814,815934613,833030224,1620250387,1945732119,2703661145,3966000196,1388869545,3456054182,2687178561,2092620194,562037615,1356438536,3409922145,3261847397,1688467115,2150901366,631725691,3840332284,549916902,3455104640,394546491,837744717,2114462948,751520235,2221554606,2415360136,3999097078,2063029875,803036379,2702586305,821456707,3019566164,360699898,4018502092,3511869016,3677355358,2402471449,812317050,49299192,2570164949,3259169295,2816732080,3331213574,3101303564,2156015656,3705598920,3546263921,143268808,3200304480,1638124008,3165189453,3341807610,578956953,2193977524,3638120073,2333881532,807278310,658237817,2969561766,1641658566,11683945,3086995007,148645947,1138423386,4158756760,1981396783,2401016740,3699783584,380097457,2680394679,2803068651,3334260286,441530178,4016580796,1375954390,761952171,891809099,2183123478,157052462,3683840763,1592404427,341349109,2438483839,1417898363,644327628,2233032776,2353769706,2201510100,220455161,1815641738,182899273,2995019788,3627381533,3702638151,2890684138,1052606899,588164016,1681439879,4038439418,2405343923,4229449282,167996282,1336969661,1688053129,2739224926,1543734051,1046297529,1138201970,2121126012,115334942,1819067631,1902159161,1941945968,2206692869,1159982321),f[2]=new Array(2381300288,637164959,3952098751,3893414151,1197506559,916448331,2350892612,2932787856,3199334847,4009478890,3905886544,1373570990,2450425862,4037870920,3778841987,2456817877,286293407,124026297,3001279700,1028597854,3115296800,4208886496,2691114635,2188540206,1430237888,1218109995,3572471700,308166588,570424558,2187009021,2455094765,307733056,1310360322,3135275007,1384269543,2388071438,863238079,2359263624,2801553128,3380786597,2831162807,1470087780,1728663345,4072488799,1090516929,532123132,2389430977,1132193179,2578464191,3051079243,1670234342,1434557849,2711078940,1241591150,3314043432,3435360113,3091448339,1812415473,2198440252,267246943,796911696,3619716990,38830015,1526438404,2806502096,374413614,2943401790,1489179520,1603809326,1920779204,168801282,260042626,2358705581,1563175598,2397674057,1356499128,2217211040,514611088,2037363785,2186468373,4022173083,2792511869,2913485016,1173701892,4200428547,3896427269,1334932762,2455136706,602925377,2835607854,1613172210,41346230,2499634548,2457437618,2188827595,41386358,4172255629,1313404830,2405527007,3801973774,2217704835,873260488,2528884354,2478092616,4012915883,2555359016,2006953883,2463913485,575479328,2218240648,2099895446,660001756,2341502190,3038761536,3888151779,3848713377,3286851934,1022894237,1620365795,3449594689,1551255054,15374395,3570825345,4249311020,4151111129,3181912732,310226346,1133119310,530038928,136043402,2476768958,3107506709,2544909567,1036173560,2367337196,1681395281,1758231547,3641649032,306774401,1575354324,3716085866,1990386196,3114533736,2455606671,1262092282,3124342505,2768229131,4210529083,1833535011,423410938,660763973,2187129978,1639812e3,3508421329,3467445492,310289298,272797111,2188552562,2456863912,310240523,677093832,1013118031,901835429,3892695601,1116285435,3036471170,1337354835,243122523,520626091,277223598,4244441197,4194248841,1766575121,594173102,316590669,742362309,3536858622,4176435350,3838792410,2501204839,1229605004,3115755532,1552908988,2312334149,979407927,3959474601,1148277331,176638793,3614686272,2083809052,40992502,1340822838,2731552767,3535757508,3560899520,1354035053,122129617,7215240,2732932949,3118912700,2718203926,2539075635,3609230695,3725561661,1928887091,2882293555,1988674909,2063640240,2491088897,1459647954,4189817080,2302804382,1113892351,2237858528,1927010603,4002880361,1856122846,1594404395,2944033133,3855189863,3474975698,1643104450,4054590833,3431086530,1730235576,2984608721,3084664418,2131803598,4178205752,267404349,1617849798,1616132681,1462223176,736725533,2327058232,551665188,2945899023,1749386277,2575514597,1611482493,674206544,2201269090,3642560800,728599968,1680547377,2620414464,1388111496,453204106,4156223445,1094905244,2754698257,2201108165,3757000246,2704524545,3922940700,3996465027),f[3]=new Array(2645754912,532081118,2814278639,3530793624,1246723035,1689095255,2236679235,4194438865,2116582143,3859789411,157234593,2045505824,4245003587,1687664561,4083425123,605965023,672431967,1336064205,3376611392,214114848,4258466608,3232053071,489488601,605322005,3998028058,264917351,1912574028,756637694,436560991,202637054,135989450,85393697,2152923392,3896401662,2895836408,2145855233,3535335007,115294817,3147733898,1922296357,3464822751,4117858305,1037454084,2725193275,2127856640,1417604070,1148013728,1827919605,642362335,2929772533,909348033,1346338451,3547799649,297154785,1917849091,4161712827,2883604526,3968694238,1469521537,3780077382,3375584256,1763717519,136166297,4290970789,1295325189,2134727907,2798151366,1566297257,3672928234,2677174161,2672173615,965822077,2780786062,289653839,1133871874,3491843819,35685304,1068898316,418943774,672553190,642281022,2346158704,1954014401,3037126780,4079815205,2030668546,3840588673,672283427,1776201016,359975446,3750173538,555499703,2769985273,1324923,69110472,152125443,3176785106,3822147285,1340634837,798073664,1434183902,15393959,216384236,1303690150,3881221631,3711134124,3960975413,106373927,2578434224,1455997841,1801814300,1578393881,1854262133,3188178946,3258078583,2302670060,1539295533,3505142565,3078625975,2372746020,549938159,3278284284,2620926080,181285381,2865321098,3970029511,68876850,488006234,1728155692,2608167508,836007927,2435231793,919367643,3339422534,3655756360,1457871481,40520939,1380155135,797931188,234455205,2255801827,3990488299,397000196,739833055,3077865373,2871719860,4022553888,772369276,390177364,3853951029,557662966,740064294,1640166671,1699928825,3535942136,622006121,3625353122,68743880,1742502,219489963,1664179233,1577743084,1236991741,410585305,2366487942,823226535,1050371084,3426619607,3586839478,212779912,4147118561,1819446015,1911218849,530248558,3486241071,3252585495,2886188651,3410272728,2342195030,20547779,2982490058,3032363469,3631753222,312714466,1870521650,1493008054,3491686656,615382978,4103671749,2534517445,1932181,2196105170,278426614,6369430,3274544417,2913018367,697336853,2143000447,2946413531,701099306,1558357093,2805003052,3500818408,2321334417,3567135975,216290473,3591032198,23009561,1996984579,3735042806,2024298078,3739440863,569400510,2339758983,3016033873,3097871343,3639523026,3844324983,3256173865,795471839,2951117563,4101031090,4091603803,3603732598,971261452,534414648,428311343,3389027175,2844869880,694888862,1227866773,2456207019,3043454569,2614353370,3749578031,3676663836,459166190,4132644070,1794958188,51825668,2252611902,3084671440,2036672799,3436641603,1099053433,2469121526,3059204941,1323291266,2061838604,1018778475,2233344254,2553501054,334295216,3556750194,1065731521,183467730),f[4]=new Array(2127105028,745436345,2601412319,2788391185,3093987327,500390133,1155374404,389092991,150729210,3891597772,3523549952,1935325696,716645080,946045387,2901812282,1774124410,3869435775,4039581901,3293136918,3438657920,948246080,363898952,3867875531,1286266623,1598556673,68334250,630723836,1104211938,1312863373,613332731,2377784574,1101634306,441780740,3129959883,1917973735,2510624549,3238456535,2544211978,3308894634,1299840618,4076074851,1756332096,3977027158,297047435,3790297736,2265573040,3621810518,1311375015,1667687725,47300608,3299642885,2474112369,201668394,1468347890,576830978,3594690761,3742605952,1958042578,1747032512,3558991340,1408974056,3366841779,682131401,1033214337,1545599232,4265137049,206503691,103024618,2855227313,1337551222,2428998917,2963842932,4015366655,3852247746,2796956967,3865723491,3747938335,247794022,3755824572,702416469,2434691994,397379957,851939612,2314769512,218229120,1380406772,62274761,214451378,3170103466,2276210409,3845813286,28563499,446592073,1693330814,3453727194,29968656,3093872512,220656637,2470637031,77972100,1667708854,1358280214,4064765667,2395616961,325977563,4277240721,4220025399,3605526484,3355147721,811859167,3069544926,3962126810,652502677,3075892249,4132761541,3498924215,1217549313,3250244479,3858715919,3053989961,1538642152,2279026266,2875879137,574252750,3324769229,2651358713,1758150215,141295887,2719868960,3515574750,4093007735,4194485238,1082055363,3417560400,395511885,2966884026,179534037,3646028556,3738688086,1092926436,2496269142,257381841,3772900718,1636087230,1477059743,2499234752,3811018894,2675660129,3285975680,90732309,1684827095,1150307763,1723134115,3237045386,1769919919,1240018934,815675215,750138730,2239792499,1234303040,1995484674,138143821,675421338,1145607174,1936608440,3238603024,2345230278,2105974004,323969391,779555213,3004902369,2861610098,1017501463,2098600890,2628620304,2940611490,2682542546,1171473753,3656571411,3687208071,4091869518,393037935,159126506,1662887367,1147106178,391545844,3452332695,1891500680,3016609650,1851642611,546529401,1167818917,3194020571,2848076033,3953471836,575554290,475796850,4134673196,450035699,2351251534,844027695,1080539133,86184846,1554234488,3692025454,1972511363,2018339607,1491841390,1141460869,1061690759,4244549243,2008416118,2351104703,2868147542,1598468138,722020353,1027143159,212344630,1387219594,1725294528,3745187956,2500153616,458938280,4129215917,1828119673,544571780,3503225445,2297937496,1241802790,267843827,2694610800,1397140384,1558801448,3782667683,1806446719,929573330,2234912681,400817706,616011623,4121520928,3603768725,1761550015,1968522284,4053731006,4192232858,4005120285,872482584,3140537016,3894607381,2287405443,1963876937,3663887957,1584857e3,2975024454,1833426440,4025083860),f[5]=new Array(4143615901,749497569,1285769319,3795025788,2514159847,23610292,3974978748,844452780,3214870880,3751928557,2213566365,1676510905,448177848,3730751033,4086298418,2307502392,871450977,3222878141,4110862042,3831651966,2735270553,1310974780,2043402188,1218528103,2736035353,4274605013,2702448458,3936360550,2693061421,162023535,2827510090,687910808,23484817,3784910947,3371371616,779677500,3503626546,3473927188,4157212626,3500679282,4248902014,2466621104,3899384794,1958663117,925738300,1283408968,3669349440,1840910019,137959847,2679828185,1239142320,1315376211,1547541505,1690155329,739140458,3128809933,3933172616,3876308834,905091803,1548541325,4040461708,3095483362,144808038,451078856,676114313,2861728291,2469707347,993665471,373509091,2599041286,4025009006,4170239449,2149739950,3275793571,3749616649,2794760199,1534877388,572371878,2590613551,1753320020,3467782511,1405125690,4270405205,633333386,3026356924,3475123903,632057672,2846462855,1404951397,3882875879,3915906424,195638627,2385783745,3902872553,1233155085,3355999740,2380578713,2702246304,2144565621,3663341248,3894384975,2502479241,4248018925,3094885567,1594115437,572884632,3385116731,767645374,1331858858,1475698373,3793881790,3532746431,1321687957,619889600,1121017241,3440213920,2070816767,2833025776,1933951238,4095615791,890643334,3874130214,859025556,360630002,925594799,1764062180,3920222280,4078305929,979562269,2810700344,4087740022,1949714515,546639971,1165388173,3069891591,1495988560,922170659,1291546247,2107952832,1813327274,3406010024,3306028637,4241950635,153207855,2313154747,1608695416,1150242611,1967526857,721801357,1220138373,3691287617,3356069787,2112743302,3281662835,1111556101,1778980689,250857638,2298507990,673216130,2846488510,3207751581,3562756981,3008625920,3417367384,2198807050,529510932,3547516680,3426503187,2364944742,102533054,2294910856,1617093527,1204784762,3066581635,1019391227,1069574518,1317995090,1691889997,3661132003,510022745,3238594800,1362108837,1817929911,2184153760,805817662,1953603311,3699844737,120799444,2118332377,207536705,2282301548,4120041617,145305846,2508124933,3086745533,3261524335,1877257368,2977164480,3160454186,2503252186,4221677074,759945014,254147243,2767453419,3801518371,629083197,2471014217,907280572,3900796746,940896768,2751021123,2625262786,3161476951,3661752313,3260732218,1425318020,2977912069,1496677566,3988592072,2140652971,3126511541,3069632175,977771578,1392695845,1698528874,1411812681,1369733098,1343739227,3620887944,1142123638,67414216,3102056737,3088749194,1626167401,2546293654,3941374235,697522451,33404913,143560186,2595682037,994885535,1247667115,3859094837,2699155541,3547024625,4114935275,2968073508,3199963069,2732024527,1237921620,951448369,1898488916,1211705605,2790989240,2233243581,3598044975),f[6]=new Array(2246066201,858518887,1714274303,3485882003,713916271,2879113490,3730835617,539548191,36158695,1298409750,419087104,1358007170,749914897,2989680476,1261868530,2995193822,2690628854,3443622377,3780124940,3796824509,2976433025,4259637129,1551479e3,512490819,1296650241,951993153,2436689437,2460458047,144139966,3136204276,310820559,3068840729,643875328,1969602020,1680088954,2185813161,3283332454,672358534,198762408,896343282,276269502,3014846926,84060815,197145886,376173866,3943890818,3813173521,3545068822,1316698879,1598252827,2633424951,1233235075,859989710,2358460855,3503838400,3409603720,1203513385,1193654839,2792018475,2060853022,207403770,1144516871,3068631394,1121114134,177607304,3785736302,326409831,1929119770,2983279095,4183308101,3474579288,3200513878,3228482096,119610148,1170376745,3378393471,3163473169,951863017,3337026068,3135789130,2907618374,1183797387,2015970143,4045674555,2182986399,2952138740,3928772205,384012900,2454997643,10178499,2879818989,2596892536,111523738,2995089006,451689641,3196290696,235406569,1441906262,3890558523,3013735005,4158569349,1644036924,376726067,1006849064,3664579700,2041234796,1021632941,1374734338,2566452058,371631263,4007144233,490221539,206551450,3140638584,1053219195,1853335209,3412429660,3562156231,735133835,1623211703,3104214392,2738312436,4096837757,3366392578,3110964274,3956598718,3196820781,2038037254,3877786376,2339753847,300912036,3766732888,2372630639,1516443558,4200396704,1574567987,4069441456,4122592016,2699739776,146372218,2748961456,2043888151,35287437,2596680554,655490400,1132482787,110692520,1031794116,2188192751,1324057718,1217253157,919197030,686247489,3261139658,1028237775,3135486431,3059715558,2460921700,986174950,2661811465,4062904701,2752986992,3709736643,367056889,1353824391,731860949,1650113154,1778481506,784341916,357075625,3608602432,1074092588,2480052770,3811426202,92751289,877911070,3600361838,1231880047,480201094,3756190983,3094495953,434011822,87971354,363687820,1717726236,1901380172,3926403882,2481662265,400339184,1490350766,2661455099,1389319756,2558787174,784598401,1983468483,30828846,3550527752,2716276238,3841122214,1765724805,1955612312,1277890269,1333098070,1564029816,2704417615,1026694237,3287671188,1260819201,3349086767,1016692350,1582273796,1073413053,1995943182,694588404,1025494639,3323872702,3551898420,4146854327,453260480,1316140391,1435673405,3038941953,3486689407,1622062951,403978347,817677117,950059133,4246079218,3278066075,1486738320,1417279718,481875527,2549965225,3933690356,760697757,1452955855,3897451437,1177426808,1702951038,4085348628,2447005172,1084371187,3516436277,3068336338,1073369276,1027665953,3284188590,1230553676,1368340146,2226246512,267243139,2274220762,4070734279,2497715176,2423353163,2504755875),f[7]=new Array(3793104909,3151888380,2817252029,895778965,2005530807,3871412763,237245952,86829237,296341424,3851759377,3974600970,2475086196,709006108,1994621201,2972577594,937287164,3734691505,168608556,3189338153,2225080640,3139713551,3033610191,3025041904,77524477,185966941,1208824168,2344345178,1721625922,3354191921,1066374631,1927223579,1971335949,2483503697,1551748602,2881383779,2856329572,3003241482,48746954,1398218158,2050065058,313056748,4255789917,393167848,1912293076,940740642,3465845460,3091687853,2522601570,2197016661,1727764327,364383054,492521376,1291706479,3264136376,1474851438,1685747964,2575719748,1619776915,1814040067,970743798,1561002147,2925768690,2123093554,1880132620,3151188041,697884420,2550985770,2607674513,2659114323,110200136,1489731079,997519150,1378877361,3527870668,478029773,2766872923,1022481122,431258168,1112503832,897933369,2635587303,669726182,3383752315,918222264,163866573,3246985393,3776823163,114105080,1903216136,761148244,3571337562,1690750982,3166750252,1037045171,1888456500,2010454850,642736655,616092351,365016990,1185228132,4174898510,1043824992,2023083429,2241598885,3863320456,3279669087,3674716684,108438443,2132974366,830746235,606445527,4173263986,2204105912,1844756978,2532684181,4245352700,2969441100,3796921661,1335562986,4061524517,2720232303,2679424040,634407289,885462008,3294724487,3933892248,2094100220,339117932,4048830727,3202280980,1458155303,2689246273,1022871705,2464987878,3714515309,353796843,2822958815,4256850100,4052777845,551748367,618185374,3778635579,4020649912,1904685140,3069366075,2670879810,3407193292,2954511620,4058283405,2219449317,3135758300,1120655984,3447565834,1474845562,3577699062,550456716,3466908712,2043752612,881257467,869518812,2005220179,938474677,3305539448,3850417126,1315485940,3318264702,226533026,965733244,321539988,1136104718,804158748,573969341,3708209826,937399083,3290727049,2901666755,1461057207,4013193437,4066861423,3242773476,2421326174,1581322155,3028952165,786071460,3900391652,3918438532,1485433313,4023619836,3708277595,3678951060,953673138,1467089153,1930354364,1533292819,2492563023,1346121658,1685000834,1965281866,3765933717,4190206607,2052792609,3515332758,690371149,3125873887,2180283551,2903598061,3933952357,436236910,289419410,14314871,1242357089,2904507907,1616633776,2666382180,585885352,3471299210,2699507360,1432659641,277164553,3354103607,770115018,2303809295,3741942315,3177781868,2853364978,2269453327,3774259834,987383833,1290892879,225909803,1741533526,890078084,1496906255,1111072499,916028167,243534141,1252605537,2204162171,531204876,290011180,3916834213,102027703,237315147,209093447,1486785922,220223953,2758195998,4175039106,82940208,3127791296,2569425252,518464269,1353887104,3941492737,2377294467,3935040926)}function e(a){this.cast5=new d,this.cast5.setKey(f.str2bin(a)),this.encrypt=function(a){return this.cast5.encrypt(a)}}var f=a("../../util.js");b.exports=e,b.exports.blockSize=e.prototype.blockSize=8,b.exports.keySize=e.prototype.keySize=16},{"../../util.js":76}],22:[function(a,b,c){"use strict";function d(a,b,c,d,e,h){var i,j,k,l,m,n,o,p,q,r,s,t,u,v,w=new Array(16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756),x=new Array(-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344),y=new Array(520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584),z=new Array(8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928),A=new Array(256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080),B=new Array(536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312),C=new Array(2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154),D=new Array(268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696),E=0,F=b.length,G=0,H=32==a.length?3:9; -p=3==H?c?new Array(0,32,2):new Array(30,-2,-2):c?new Array(0,32,2,62,30,-2,64,96,2):new Array(94,62,-2,32,64,2,30,-2,-2),c&&(b=f(b,h),F=b.length);var I="",J="";for(1==d&&(q=e.charCodeAt(E++)<<24|e.charCodeAt(E++)<<16|e.charCodeAt(E++)<<8|e.charCodeAt(E++),s=e.charCodeAt(E++)<<24|e.charCodeAt(E++)<<16|e.charCodeAt(E++)<<8|e.charCodeAt(E++),E=0);F>E;){for(n=b.charCodeAt(E++)<<24|b.charCodeAt(E++)<<16|b.charCodeAt(E++)<<8|b.charCodeAt(E++),o=b.charCodeAt(E++)<<24|b.charCodeAt(E++)<<16|b.charCodeAt(E++)<<8|b.charCodeAt(E++),1==d&&(c?(n^=q,o^=s):(r=q,t=s,q=n,s=o)),k=252645135&(n>>>4^o),o^=k,n^=k<<4,k=65535&(n>>>16^o),o^=k,n^=k<<16,k=858993459&(o>>>2^n),n^=k,o^=k<<2,k=16711935&(o>>>8^n),n^=k,o^=k<<8,k=1431655765&(n>>>1^o),o^=k,n^=k<<1,n=n<<1|n>>>31,o=o<<1|o>>>31,j=0;H>j;j+=3){for(u=p[j+1],v=p[j+2],i=p[j];i!=u;i+=v)l=o^a[i],m=(o>>>4|o<<28)^a[i+1],k=n,n=o,o=k^(x[l>>>24&63]|z[l>>>16&63]|B[l>>>8&63]|D[63&l]|w[m>>>24&63]|y[m>>>16&63]|A[m>>>8&63]|C[63&m]);k=n,n=o,o=k}n=n>>>1|n<<31,o=o>>>1|o<<31,k=1431655765&(n>>>1^o),o^=k,n^=k<<1,k=16711935&(o>>>8^n),n^=k,o^=k<<8,k=858993459&(o>>>2^n),n^=k,o^=k<<2,k=65535&(n>>>16^o),o^=k,n^=k<<16,k=252645135&(n>>>4^o),o^=k,n^=k<<4,1==d&&(c?(q=n,s=o):(n^=r,o^=t)),J+=String.fromCharCode(n>>>24,n>>>16&255,n>>>8&255,255&n,o>>>24,o>>>16&255,o>>>8&255,255&o),G+=8,512==G&&(I+=J,J="",G=0)}return I+=J,c||(I=g(I,h)),I}function e(a){for(var b,c,d,e=new Array(0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964),f=new Array(0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697),g=new Array(0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272),h=new Array(0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144),i=new Array(0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256),j=new Array(0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488),k=new Array(0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746),l=new Array(0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568),m=new Array(0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578),n=new Array(0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488),o=new Array(0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800),p=new Array(0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744),q=new Array(0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128),r=new Array(0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261),s=a.length>8?3:1,t=new Array(32*s),u=new Array(0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0),v=0,w=0,x=0;s>x;x++){var y=a.charCodeAt(v++)<<24|a.charCodeAt(v++)<<16|a.charCodeAt(v++)<<8|a.charCodeAt(v++),z=a.charCodeAt(v++)<<24|a.charCodeAt(v++)<<16|a.charCodeAt(v++)<<8|a.charCodeAt(v++);d=252645135&(y>>>4^z),z^=d,y^=d<<4,d=65535&(z>>>-16^y),y^=d,z^=d<<-16,d=858993459&(y>>>2^z),z^=d,y^=d<<2,d=65535&(z>>>-16^y),y^=d,z^=d<<-16,d=1431655765&(y>>>1^z),z^=d,y^=d<<1,d=16711935&(z>>>8^y),y^=d,z^=d<<8,d=1431655765&(y>>>1^z),z^=d,y^=d<<1,d=y<<8|z>>>20&240,y=z<<24|z<<8&16711680|z>>>8&65280|z>>>24&240,z=d;for(var A=0;A>>26,z=z<<2|z>>>26):(y=y<<1|y>>>27,z=z<<1|z>>>27),y&=-15,z&=-15,b=e[y>>>28]|f[y>>>24&15]|g[y>>>20&15]|h[y>>>16&15]|i[y>>>12&15]|j[y>>>8&15]|k[y>>>4&15],c=l[z>>>28]|m[z>>>24&15]|n[z>>>20&15]|o[z>>>16&15]|p[z>>>12&15]|q[z>>>8&15]|r[z>>>4&15],d=65535&(c>>>16^b),t[w++]=b^d,t[w++]=c^d<<16}return t}function f(a,b){var c=8-a.length%8;return 2==b&&8>c?a+=" ".substr(0,c):1==b?a+=String.fromCharCode(c,c,c,c,c,c,c,c).substr(0,c):!b&&8>c&&(a+="\x00\x00\x00\x00\x00\x00\x00\x00".substr(0,c)),a}function g(a,b){if(2==b)a=a.replace(/ *$/g,"");else if(1==b){var c=a.charCodeAt(a.length-1);a=a.substr(0,a.length-c)}else b||(a=a.replace(/\0*$/g,""));return a}function h(a){this.key=[];for(var b=0;3>b;b++)this.key.push(a.substr(8*b,8));this.encrypt=function(a){return j.str2bin(d(e(this.key[2]),d(e(this.key[1]),d(e(this.key[0]),j.bin2str(a),!0,0,null,null),!1,0,null,null),!0,0,null,null))}}function i(a){this.key=a,this.encrypt=function(a,b){var c=e(this.key);return j.str2bin(d(c,j.bin2str(a),!0,0,null,b))},this.decrypt=function(a,b){var c=e(this.key);return j.str2bin(d(c,j.bin2str(a),!1,0,null,b))}}var j=a("../../util.js");h.keySize=h.prototype.keySize=24,h.blockSize=h.prototype.blockSize=8,b.exports={des:h,originalDes:i}},{"../../util.js":76}],23:[function(a,b,c){var d=a("./des.js");b.exports={des:d.originalDes,tripledes:d.des,cast5:a("./cast5.js"),twofish:a("./twofish.js"),blowfish:a("./blowfish.js"),idea:function(){throw new Error("IDEA symmetric-key algorithm not implemented")}};var e=a("./aes.js");for(var f in e)b.exports["aes"+f]=e[f]},{"./aes.js":19,"./blowfish.js":20,"./cast5.js":21,"./des.js":22,"./twofish.js":24}],24:[function(a,b,c){function d(a,b){return(a<>>32-b)&k}function e(a,b){return a[b]|a[b+1]<<8|a[b+2]<<16|a[b+3]<<24}function f(a,b,c){a.splice(b,4,255&c,c>>>8&255,c>>>16&255,c>>>24&255)}function g(a,b){return a>>>8*b&255}function h(){function a(a){function b(a){return a^a>>2^[0,90,180,238][3&a]}function c(a){return a^a>>1^a>>2^[0,238,180,90][3&a]}function f(a,b){var c,d,e;for(c=0;8>c;c++)d=b>>>24,b=b<<8&k|a>>>24,a=a<<8&k,e=d<<1,128&d&&(e^=333),b^=d^e<<16,e^=d>>>1,1&d&&(e^=166),b^=e<<24|e<<8;return b}function h(a,b){var c,d,e,f;return c=b>>4,d=15&b,e=A[a][c^d],f=B[a][E[d]^F[c]],D[a][E[f]^F[e]]<<4|C[a][e^f]}function i(a,b){var c=g(a,0),d=g(a,1),e=g(a,2),f=g(a,3);switch(q){case 4:c=G[1][c]^g(b[3],0),d=G[0][d]^g(b[3],1),e=G[0][e]^g(b[3],2),f=G[1][f]^g(b[3],3);case 3:c=G[1][c]^g(b[2],0),d=G[1][d]^g(b[2],1),e=G[0][e]^g(b[2],2),f=G[0][f]^g(b[2],3);case 2:c=G[0][G[0][c]^g(b[1],0)]^g(b[0],0),d=G[0][G[1][d]^g(b[1],1)]^g(b[0],1),e=G[1][G[0][e]^g(b[1],2)]^g(b[0],2),f=G[1][G[1][f]^g(b[1],3)]^g(b[0],3)}return H[0][c]^H[1][d]^H[2][e]^H[3][f]}o=a;var j,l,m,n,p,q,r,u,v,w=[],x=[],y=[],z=[],A=[[8,1,7,13,6,15,3,2,0,11,5,9,14,12,10,4],[2,8,11,13,15,7,6,14,3,1,9,4,0,10,12,5]],B=[[14,12,11,8,1,2,3,5,15,4,10,6,7,0,9,13],[1,14,2,11,4,12,3,7,6,13,10,5,15,9,0,8]],C=[[11,10,5,14,6,13,9,0,12,8,15,3,2,4,7,1],[4,12,7,5,1,6,9,10,0,14,13,8,2,11,3,15]],D=[[13,7,15,4,1,2,6,14,9,11,3,0,8,5,12,10],[11,9,5,1,12,3,13,14,6,4,7,15,2,0,8,10]],E=[0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15],F=[0,9,2,11,4,13,6,15,8,1,10,3,12,5,14,7],G=[[],[]],H=[[],[],[],[]];for(o=o.slice(0,32),j=o.length;16!=j&&24!=j&&32!=j;)o[j++]=0;for(j=0;j>2]=e(o,j);for(j=0;256>j;j++)G[0][j]=h(0,j),G[1][j]=h(1,j);for(j=0;256>j;j++)r=G[1][j],u=b(r),v=c(r),H[0][j]=r+(u<<8)+(v<<16)+(v<<24),H[2][j]=u+(v<<8)+(r<<16)+(v<<24),r=G[0][j],u=b(r),v=c(r),H[1][j]=v+(v<<8)+(u<<16)+(r<<24),H[3][j]=u+(r<<8)+(v<<16)+(u<<24);for(q=y.length/2,j=0;q>j;j++)l=y[j+j],w[j]=l,m=y[j+j+1],x[j]=m,z[q-j-1]=f(l,m);for(j=0;40>j;j+=2)l=16843009*j,m=l+16843009,l=i(l,w),m=d(i(m,x),8),s[j]=l+m&k,s[j+1]=d(l+2*m,9);for(j=0;256>j;j++)switch(l=m=n=p=j,q){case 4:l=G[1][l]^g(z[3],0),m=G[0][m]^g(z[3],1),n=G[0][n]^g(z[3],2),p=G[1][p]^g(z[3],3);case 3:l=G[1][l]^g(z[2],0),m=G[1][m]^g(z[2],1),n=G[0][n]^g(z[2],2),p=G[0][p]^g(z[2],3);case 2:t[0][j]=H[0][G[0][G[0][l]^g(z[1],0)]^g(z[0],0)],t[1][j]=H[1][G[0][G[1][m]^g(z[1],1)]^g(z[0],1)],t[2][j]=H[2][G[1][G[0][n]^g(z[1],2)]^g(z[0],2)],t[3][j]=H[3][G[1][G[1][p]^g(z[1],3)]^g(z[0],3)]}}function b(a){return t[0][g(a,0)]^t[1][g(a,1)]^t[2][g(a,2)]^t[3][g(a,3)]}function c(a){return t[0][g(a,3)]^t[1][g(a,0)]^t[2][g(a,1)]^t[3][g(a,2)]}function h(a,e){var f=b(e[0]),g=c(e[1]);e[2]=d(e[2]^f+g+s[4*a+8]&k,31),e[3]=d(e[3],1)^f+2*g+s[4*a+9]&k,f=b(e[2]),g=c(e[3]),e[0]=d(e[0]^f+g+s[4*a+10]&k,31),e[1]=d(e[1],1)^f+2*g+s[4*a+11]&k}function i(a,e){var f=b(e[0]),g=c(e[1]);e[2]=d(e[2],1)^f+g+s[4*a+10]&k,e[3]=d(e[3]^f+2*g+s[4*a+11]&k,31),f=b(e[2]),g=c(e[3]),e[0]=d(e[0],1)^f+g+s[4*a+8]&k,e[1]=d(e[1]^f+2*g+s[4*a+9]&k,31)}function j(){s=[],t=[[],[],[],[]]}function l(a,b){p=a,q=b;for(var c=[e(p,q)^s[0],e(p,q+4)^s[1],e(p,q+8)^s[2],e(p,q+12)^s[3]],d=0;8>d;d++)h(d,c);return f(p,q,c[2]^s[4]),f(p,q+4,c[3]^s[5]),f(p,q+8,c[0]^s[6]),f(p,q+12,c[1]^s[7]),q+=16,p}function m(a,b){p=a,q=b;for(var c=[e(p,q)^s[4],e(p,q+4)^s[5],e(p,q+8)^s[6],e(p,q+12)^s[7]],d=7;d>=0;d--)i(d,c);f(p,q,c[2]^s[0]),f(p,q+4,c[3]^s[1]),f(p,q+8,c[0]^s[2]),f(p,q+12,c[1]^s[3]),q+=16}function n(){return p}var o=null,p=null,q=-1,r=null;r="twofish";var s=[],t=[[],[],[],[]];return{name:"twofish",blocksize:16,open:a,close:j,encrypt:l,decrypt:m,finalize:n}}function i(a){this.tf=h(),this.tf.open(l.str2bin(a),0),this.encrypt=function(a){return this.tf.encrypt(j(a),0)}}function j(a){for(var b=[],c=0;c=64;){for(k=0;16>k;++k)b[k]=c.getInt32();for(;64>k;++k)d=b[k-2],d=(d>>>17|d<<15)^(d>>>19|d<<13)^d>>>10,e=b[k-15],e=(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3,b[k]=d+b[k-7]+e+b[k-16]&4294967295;for(l=a.h0,m=a.h1,n=a.h2,o=a.h3,p=a.h4,q=a.h5,r=a.h6,s=a.h7,k=0;64>k;++k)g=(p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7),i=r^p&(q^r),f=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),j=l&m|n&(l^m),d=s+g+i+h[k]+b[k],e=f+j,s=r,r=q,q=p,p=o+d&4294967295,o=n,n=m,m=l,l=d+e&4294967295;a.h0=a.h0+l&4294967295,a.h1=a.h1+m&4294967295,a.h2=a.h2+n&4294967295,a.h3=a.h3+o&4294967295,a.h4=a.h4+p&4294967295,a.h5=a.h5+q&4294967295,a.h6=a.h6+r&4294967295,a.h7=a.h7+s&4294967295,t-=64}};d.create=function(){g||i();var a=null,b=e.createBuffer(),c=new Array(64),d={algorithm:"sha256",blockLength:64,digestLength:32,messageLength:0};return d.start=function(){return d.messageLength=0,b=e.createBuffer(),a={h0:1779033703,h1:3144134277,h2:1013904242,h3:2773480762,h4:1359893119,h5:2600822924,h6:528734635,h7:1541459225},d},d.start(),d.update=function(f,g){return"utf8"===g&&(f=e.encodeUtf8(f)),d.messageLength+=f.length,b.putBytes(f),j(a,c,b),(b.read>2048||0===b.length())&&b.compact(),d},d.digest=function(){var g=d.messageLength,h=e.createBuffer();h.putBytes(b.bytes()),h.putBytes(f.substr(0,64-(g+8)%64)),h.putInt32(g>>>29&255),h.putInt32(g<<3&4294967295);var i={h0:a.h0,h1:a.h1,h2:a.h2,h3:a.h3,h4:a.h4,h5:a.h5,h6:a.h6,h7:a.h7};j(i,c,h);var k=e.createBuffer();return k.putInt32(i.h0),k.putInt32(i.h1),k.putInt32(i.h2),k.putInt32(i.h3),k.putInt32(i.h4),k.putInt32(i.h5),k.putInt32(i.h6),k.putInt32(i.h7),k},d}},{"./forge_util.js":27}],27:[function(a,b,c){var d=b.exports={};d.isArray=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},d.isArrayBuffer=function(a){return"undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer};var e=[];"undefined"!=typeof Int8Array&&e.push(Int8Array),"undefined"!=typeof Uint8Array&&e.push(Uint8Array),"undefined"!=typeof Uint8ClampedArray&&e.push(Uint8ClampedArray),"undefined"!=typeof Int16Array&&e.push(Int16Array),"undefined"!=typeof Uint16Array&&e.push(Uint16Array),"undefined"!=typeof Int32Array&&e.push(Int32Array),"undefined"!=typeof Uint32Array&&e.push(Uint32Array),"undefined"!=typeof Float32Array&&e.push(Float32Array),"undefined"!=typeof Float64Array&&e.push(Float64Array),d.isArrayBufferView=function(a){for(var b=0;b0;)1&b&&(c+=a),b>>>=1,b>0&&(a+=a);return this.data=c,this},d.ByteBuffer.prototype.putBytes=function(a){return this.data+=a,this},d.ByteBuffer.prototype.putString=function(a){return this.data+=d.encodeUtf8(a),this},d.ByteBuffer.prototype.putInt16=function(a){return this.data+=String.fromCharCode(a>>8&255)+String.fromCharCode(255&a),this},d.ByteBuffer.prototype.putInt24=function(a){return this.data+=String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a),this},d.ByteBuffer.prototype.putInt32=function(a){return this.data+=String.fromCharCode(a>>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a),this},d.ByteBuffer.prototype.putInt16Le=function(a){return this.data+=String.fromCharCode(255&a)+String.fromCharCode(a>>8&255),this},d.ByteBuffer.prototype.putInt24Le=function(a){return this.data+=String.fromCharCode(255&a)+String.fromCharCode(a>>8&255)+String.fromCharCode(a>>16&255),this},d.ByteBuffer.prototype.putInt32Le=function(a){return this.data+=String.fromCharCode(255&a)+String.fromCharCode(a>>8&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>24&255),this},d.ByteBuffer.prototype.putInt=function(a,b){do b-=8,this.data+=String.fromCharCode(a>>b&255);while(b>0);return this},d.ByteBuffer.prototype.putSignedInt=function(a,b){return 0>a&&(a+=2<0);return b},d.ByteBuffer.prototype.getSignedInt=function(a){var b=this.getInt(a),c=2<=c&&(b-=c<<1),b},d.ByteBuffer.prototype.getBytes=function(a){var b;return a?(a=Math.min(this.length(),a),b=this.data.slice(this.read,this.read+a),this.read+=a):0===a?b="":(b=0===this.read?this.data:this.data.slice(this.read),this.clear()),b},d.ByteBuffer.prototype.bytes=function(a){return"undefined"==typeof a?this.data.slice(this.read):this.data.slice(this.read,this.read+a)},d.ByteBuffer.prototype.at=function(a){return this.data.charCodeAt(this.read+a)},d.ByteBuffer.prototype.setAt=function(a,b){return this.data=this.data.substr(0,this.read+a)+String.fromCharCode(b)+this.data.substr(this.read+a+1),this},d.ByteBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)},d.ByteBuffer.prototype.copy=function(){var a=d.createBuffer(this.data);return a.read=this.read,a},d.ByteBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this},d.ByteBuffer.prototype.clear=function(){return this.data="",this.read=0,this},d.ByteBuffer.prototype.truncate=function(a){var b=Math.max(0,this.length()-a);return this.data=this.data.substr(this.read,b),this.read=0,this},d.ByteBuffer.prototype.toHex=function(){for(var a="",b=this.read;bc&&(a+="0"),a+=c.toString(16)}return a},d.ByteBuffer.prototype.toString=function(){return d.decodeUtf8(this.bytes())},d.createBuffer=function(a,b){return b=b||"raw",void 0!==a&&"utf8"===b&&(a=d.encodeUtf8(a)),new d.ByteBuffer(a)},d.fillString=function(a,b){for(var c="";b>0;)1&b&&(c+=a),b>>>=1,b>0&&(a+=a);return c},d.xorBytes=function(a,b,c){for(var d="",e="",f="",g=0,h=0;c>0;--c,++g)e=a.charCodeAt(g)^b.charCodeAt(g),h>=10&&(d+=f,f="",h=0),f+=String.fromCharCode(e),++h;return d+=f},d.hexToBytes=function(a){var b="",c=0;for(a.length&!0&&(c=1,b+=String.fromCharCode(parseInt(a[0],16)));c>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+String.fromCharCode(255&a)};var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];d.encode64=function(a,b){for(var c,d,e,g="",h="",i=0;i>2),g+=f.charAt((3&c)<<4|d>>4),isNaN(d)?g+="==":(g+=f.charAt((15&d)<<2|e>>6),g+=isNaN(e)?"=":f.charAt(63&e)),b&&g.length>b&&(h+=g.substr(0,b)+"\r\n",g=g.substr(b));return h+=g},d.decode64=function(a){a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var b,c,d,e,f="",h=0;h>4),64!==d&&(f+=String.fromCharCode((15&c)<<4|d>>2),64!==e&&(f+=String.fromCharCode((3&d)<<6|e)));return f},d.encodeUtf8=function(a){return unescape(encodeURIComponent(a))},d.decodeUtf8=function(a){return decodeURIComponent(escape(a))}},{}],28:[function(a,b,c){var d=a("./sha.js"),e=a("./forge_sha256.js");b.exports={md5:a("./md5.js"),sha1:d.sha1,sha224:d.sha224,sha256:d.sha256,sha384:d.sha384,sha512:d.sha512,ripemd:a("./ripe-md.js"),digest:function(a,b){switch(a){case 1:return this.md5(b);case 2:return this.sha1(b);case 3:return this.ripemd(b);case 8:var c=e.create();return c.update(b),c.digest().getBytes();case 9:return this.sha384(b);case 10:return this.sha512(b);case 11:return this.sha224(b);default:throw new Error("Invalid hash function.")}},getHashByteLength:function(a){switch(a){case 1:return 16;case 2:case 3:return 20;case 8:return 32;case 9:return 48;case 10:return 64;case 11:return 28;default:throw new Error("Invalid hash algorithm.")}}}},{"./forge_sha256.js":26,"./md5.js":29,"./ripe-md.js":30,"./sha.js":31}],29:[function(a,b,c){function d(a,b){var c=a[0],d=a[1],e=a[2],j=a[3];c=f(c,d,e,j,b[0],7,-680876936),j=f(j,c,d,e,b[1],12,-389564586),e=f(e,j,c,d,b[2],17,606105819),d=f(d,e,j,c,b[3],22,-1044525330),c=f(c,d,e,j,b[4],7,-176418897),j=f(j,c,d,e,b[5],12,1200080426),e=f(e,j,c,d,b[6],17,-1473231341),d=f(d,e,j,c,b[7],22,-45705983),c=f(c,d,e,j,b[8],7,1770035416),j=f(j,c,d,e,b[9],12,-1958414417),e=f(e,j,c,d,b[10],17,-42063),d=f(d,e,j,c,b[11],22,-1990404162),c=f(c,d,e,j,b[12],7,1804603682),j=f(j,c,d,e,b[13],12,-40341101),e=f(e,j,c,d,b[14],17,-1502002290),d=f(d,e,j,c,b[15],22,1236535329),c=g(c,d,e,j,b[1],5,-165796510),j=g(j,c,d,e,b[6],9,-1069501632),e=g(e,j,c,d,b[11],14,643717713),d=g(d,e,j,c,b[0],20,-373897302),c=g(c,d,e,j,b[5],5,-701558691),j=g(j,c,d,e,b[10],9,38016083),e=g(e,j,c,d,b[15],14,-660478335),d=g(d,e,j,c,b[4],20,-405537848),c=g(c,d,e,j,b[9],5,568446438),j=g(j,c,d,e,b[14],9,-1019803690),e=g(e,j,c,d,b[3],14,-187363961),d=g(d,e,j,c,b[8],20,1163531501),c=g(c,d,e,j,b[13],5,-1444681467),j=g(j,c,d,e,b[2],9,-51403784),e=g(e,j,c,d,b[7],14,1735328473),d=g(d,e,j,c,b[12],20,-1926607734),c=h(c,d,e,j,b[5],4,-378558),j=h(j,c,d,e,b[8],11,-2022574463),e=h(e,j,c,d,b[11],16,1839030562),d=h(d,e,j,c,b[14],23,-35309556),c=h(c,d,e,j,b[1],4,-1530992060),j=h(j,c,d,e,b[4],11,1272893353),e=h(e,j,c,d,b[7],16,-155497632),d=h(d,e,j,c,b[10],23,-1094730640),c=h(c,d,e,j,b[13],4,681279174),j=h(j,c,d,e,b[0],11,-358537222),e=h(e,j,c,d,b[3],16,-722521979),d=h(d,e,j,c,b[6],23,76029189),c=h(c,d,e,j,b[9],4,-640364487),j=h(j,c,d,e,b[12],11,-421815835),e=h(e,j,c,d,b[15],16,530742520),d=h(d,e,j,c,b[2],23,-995338651),c=i(c,d,e,j,b[0],6,-198630844),j=i(j,c,d,e,b[7],10,1126891415),e=i(e,j,c,d,b[14],15,-1416354905),d=i(d,e,j,c,b[5],21,-57434055),c=i(c,d,e,j,b[12],6,1700485571),j=i(j,c,d,e,b[3],10,-1894986606),e=i(e,j,c,d,b[10],15,-1051523),d=i(d,e,j,c,b[1],21,-2054922799),c=i(c,d,e,j,b[8],6,1873313359),j=i(j,c,d,e,b[15],10,-30611744),e=i(e,j,c,d,b[6],15,-1560198380),d=i(d,e,j,c,b[13],21,1309151649),c=i(c,d,e,j,b[4],6,-145523070),j=i(j,c,d,e,b[11],10,-1120210379),e=i(e,j,c,d,b[2],15,718787259),d=i(d,e,j,c,b[9],21,-343485551),a[0]=o(c,a[0]),a[1]=o(d,a[1]),a[2]=o(e,a[2]),a[3]=o(j,a[3])}function e(a,b,c,d,e,f){return b=o(o(b,a),o(d,f)),o(b<>>32-e,c)}function f(a,b,c,d,f,g,h){return e(b&c|~b&d,a,b,f,g,h)}function g(a,b,c,d,f,g,h){return e(b&d|c&~d,a,b,f,g,h)}function h(a,b,c,d,f,g,h){return e(b^c^d,a,b,f,g,h)}function i(a,b,c,d,f,g,h){return e(c^(b|~d),a,b,f,g,h)}function j(a){var b,c=a.length,e=[1732584193,-271733879,-1732584194,271733878];for(b=64;b<=a.length;b+=64)d(e,k(a.substring(b-64,b)));a=a.substring(b-64);var f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;b>2]|=a.charCodeAt(b)<<(b%4<<3);if(f[b>>2]|=128<<(b%4<<3),b>55)for(d(e,f),b=0;16>b;b++)f[b]=0;return f[14]=8*c,d(e,f),e}function k(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a.charCodeAt(b)+(a.charCodeAt(b+1)<<8)+(a.charCodeAt(b+2)<<16)+(a.charCodeAt(b+3)<<24);return c}function l(a){for(var b="",c=0;4>c;c++)b+=q[a>>8*c+4&15]+q[a>>8*c&15];return b}function m(a){for(var b=0;b>16)+(b>>16)+(c>>16);return d<<16|65535&c}var p=a("../../util.js");b.exports=function(a){var b=n(a),c=p.hex2bin(b);return c};var q="0123456789abcdef".split("");"5d41402abc4b2a76b9719d911017c592"!=n("hello")},{"../../util.js":76}],30:[function(a,b,c){function d(a,b){return new Number(a<>>32-b)}function e(a,b,c){return new Number(a^b^c)}function f(a,b,c){return new Number(a&b|~a&c)}function g(a,b,c){return new Number((a|~b)^c)}function h(a,b,c){return new Number(a&c|b&~c)}function i(a,b,c){return new Number(a^(b|~c))}function j(a,b,c,j,k,l,m,n){switch(n){case 0:a+=e(b,c,j)+l+0;break;case 1:a+=f(b,c,j)+l+1518500249;break;case 2:a+=g(b,c,j)+l+1859775393;break;case 3:a+=h(b,c,j)+l+2400959708;break;case 4:a+=i(b,c,j)+l+2840853838;break;case 5:a+=i(b,c,j)+l+1352829926;break;case 6:a+=h(b,c,j)+l+1548603684;break;case 7:a+=g(b,c,j)+l+1836072691;break;case 8:a+=f(b,c,j)+l+2053994217;break;case 9:a+=e(b,c,j)+l+0;break;default:throw new Error("Bogus round number")}a=d(a,m)+k,c=d(c,10),a&=4294967295,b&=4294967295,c&=4294967295,j&=4294967295,k&=4294967295;var o=[];return o[0]=a,o[1]=b,o[2]=c,o[3]=j,o[4]=k,o[5]=l,o[6]=m,o}function k(a){a[0]=1732584193,a[1]=4023233417,a[2]=2562383102,a[3]=271733878,a[4]=3285377520}function l(a,b){var c,d,e,f=[],g=[];for(d=0;5>d;d++)f[d]=new Number(a[d]),g[d]=new Number(a[d]);var h=0;for(e=0;5>e;e++)for(d=0;16>d;d++)c=j(f[(h+0)%5],f[(h+1)%5],f[(h+2)%5],f[(h+3)%5],f[(h+4)%5],b[t[e][d]],s[e][d],e),f[(h+0)%5]=c[0],f[(h+1)%5]=c[1],f[(h+2)%5]=c[2],f[(h+3)%5]=c[3],f[(h+4)%5]=c[4],h+=4;for(h=0,e=5;10>e;e++)for(d=0;16>d;d++)c=j(g[(h+0)%5],g[(h+1)%5],g[(h+2)%5],g[(h+3)%5],g[(h+4)%5],b[t[e][d]],s[e][d],e),g[(h+0)%5]=c[0],g[(h+1)%5]=c[1],g[(h+2)%5]=c[2],g[(h+3)%5]=c[3],g[(h+4)%5]=c[4],h+=4;g[3]+=f[2]+a[1],a[1]=a[2]+f[3]+g[4],a[2]=a[3]+f[4]+g[0],a[3]=a[4]+f[0]+g[1],a[4]=a[0]+f[1]+g[2],a[0]=g[3]}function m(a){for(var b=0;16>b;b++)a[b]=0}function n(a,b,c,d){var e=new Array(16);m(e);for(var f=0,g=0;(63&c)>g;g++)e[g>>>2]^=(255&b.charCodeAt(f++))<<8*(3&g);e[c>>>2&15]^=1<<8*(3&c)+7,(63&c)>55&&(l(a,e),e=new Array(16),m(e)),e[14]=c<<3,e[15]=c>>>29|d<<3,l(a,e)}function o(a){var b=(255&a.charCodeAt(3))<<24;return b|=(255&a.charCodeAt(2))<<16,b|=(255&a.charCodeAt(1))<<8,b|=255&a.charCodeAt(0)}function p(a){var b,c,d=new Array(r/32),e=new Array(r/8);k(d),b=a.length;var f=new Array(16);m(f);var g,h=0;for(c=b;c>63;c-=64){for(g=0;16>g;g++)f[g]=o(a.substr(h,4)),h+=4;l(d,f)}for(n(d,a.substr(h),b,0),g=0;r/8>g;g+=4)e[g]=255&d[g>>>2],e[g+1]=d[g>>>2]>>>8&255,e[g+2]=d[g>>>2]>>>16&255,e[g+3]=d[g>>>2]>>>24&255;return e}function q(a){for(var b=p(a),c="",d=0;r/8>d;d++)c+=String.fromCharCode(b[d]);return c}var r=160,s=[[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8],[7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12],[11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5],[11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12],[9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6],[9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11],[9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5],[15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8],[8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]],t=[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8],[3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12],[1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2],[4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12],[6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2],[15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13],[8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14],[12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]];b.exports=q},{}],31:[function(a,b,c){var d=function(){var a=8,b="",c=0,d=function(a,b){this.highOrder=a,this.lowOrder=b},e=function(b){var c,d=[],e=(1<c;c+=a)d[c>>5]|=(b.charCodeAt(c/a)&e)<<32-a-c%32;return d},f=function(a){var b,c,d=[],e=a.length;for(b=0;e>b;b+=2){if(c=parseInt(a.substr(b,2),16),isNaN(c))throw new Error("INVALID HEX STRING");d[b>>3]|=c<<24-4*(b%8)}return d},g=function(a){var b,d,e=c?"0123456789ABCDEF":"0123456789abcdef",f="",g=4*a.length;for(b=0;g>b;b+=1)d=a[b>>2]>>8*(3-b%4),f+=e.charAt(d>>4&15)+e.charAt(15&d);return f},h=function(a){var c,d,e,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",g="",h=4*a.length;for(c=0;h>c;c+=3)for(e=(a[c>>2]>>8*(3-c%4)&255)<<16|(a[c+1>>2]>>8*(3-(c+1)%4)&255)<<8|a[c+2>>2]>>8*(3-(c+2)%4)&255,d=0;4>d;d+=1)g+=8*c+6*d<=32*a.length?f.charAt(e>>6*(3-d)&63):b;return g},i=function(a){for(var b="",c=255,d=0;d<32*a.length;d+=8)b+=String.fromCharCode(a[d>>5]>>>24-d%32&c);return b},j=function(a,b){return a<>>32-b},k=function(a,b){return a>>>b|a<<32-b},l=function(a,b){return 32>=b?new d(a.highOrder>>>b|a.lowOrder<<32-b,a.lowOrder>>>b|a.highOrder<<32-b):new d(a.lowOrder>>>b|a.highOrder<<32-b,a.highOrder>>>b|a.lowOrder<<32-b)},m=function(a,b){return a>>>b},n=function(a,b){return 32>=b?new d(a.highOrder>>>b,a.lowOrder>>>b|a.highOrder<<32-b):new d(0,a.highOrder<<32-b)},o=function(a,b,c){return a^b^c},p=function(a,b,c){return a&b^~a&c},q=function(a,b,c){return new d(a.highOrder&b.highOrder^~a.highOrder&c.highOrder,a.lowOrder&b.lowOrder^~a.lowOrder&c.lowOrder)},r=function(a,b,c){return a&b^a&c^b&c},s=function(a,b,c){return new d(a.highOrder&b.highOrder^a.highOrder&c.highOrder^b.highOrder&c.highOrder,a.lowOrder&b.lowOrder^a.lowOrder&c.lowOrder^b.lowOrder&c.lowOrder)},t=function(a){return k(a,2)^k(a,13)^k(a,22)},u=function(a){var b=l(a,28),c=l(a,34),e=l(a,39);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},v=function(a){return k(a,6)^k(a,11)^k(a,25)},w=function(a){var b=l(a,14),c=l(a,18),e=l(a,41);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},x=function(a){return k(a,7)^k(a,18)^m(a,3)},y=function(a){var b=l(a,1),c=l(a,8),e=n(a,7);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},z=function(a){return k(a,17)^k(a,19)^m(a,10)},A=function(a){var b=l(a,19),c=l(a,61),e=n(a,6);return new d(b.highOrder^c.highOrder^e.highOrder,b.lowOrder^c.lowOrder^e.lowOrder)},B=function(a,b){var c=(65535&a)+(65535&b),d=(a>>>16)+(b>>>16)+(c>>>16);return(65535&d)<<16|65535&c},C=function(a,b,c,d){var e=(65535&a)+(65535&b)+(65535&c)+(65535&d),f=(a>>>16)+(b>>>16)+(c>>>16)+(d>>>16)+(e>>>16);return(65535&f)<<16|65535&e},D=function(a,b,c,d,e){var f=(65535&a)+(65535&b)+(65535&c)+(65535&d)+(65535&e),g=(a>>>16)+(b>>>16)+(c>>>16)+(d>>>16)+(e>>>16)+(f>>>16);return(65535&g)<<16|65535&f},E=function(a,b){var c,e,f,g;return c=(65535&a.lowOrder)+(65535&b.lowOrder),e=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c>>>16),f=(65535&e)<<16|65535&c,c=(65535&a.highOrder)+(65535&b.highOrder)+(e>>>16),e=(a.highOrder>>>16)+(b.highOrder>>>16)+(c>>>16),g=(65535&e)<<16|65535&c,new d(g,f)},F=function(a,b,c,e){ -var f,g,h,i;return f=(65535&a.lowOrder)+(65535&b.lowOrder)+(65535&c.lowOrder)+(65535&e.lowOrder),g=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(e.lowOrder>>>16)+(f>>>16),h=(65535&g)<<16|65535&f,f=(65535&a.highOrder)+(65535&b.highOrder)+(65535&c.highOrder)+(65535&e.highOrder)+(g>>>16),g=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(e.highOrder>>>16)+(f>>>16),i=(65535&g)<<16|65535&f,new d(i,h)},G=function(a,b,c,e,f){var g,h,i,j;return g=(65535&a.lowOrder)+(65535&b.lowOrder)+(65535&c.lowOrder)+(65535&e.lowOrder)+(65535&f.lowOrder),h=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(e.lowOrder>>>16)+(f.lowOrder>>>16)+(g>>>16),i=(65535&h)<<16|65535&g,g=(65535&a.highOrder)+(65535&b.highOrder)+(65535&c.highOrder)+(65535&e.highOrder)+(65535&f.highOrder)+(h>>>16),h=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(e.highOrder>>>16)+(f.highOrder>>>16)+(g>>>16),j=(65535&h)<<16|65535&g,new d(j,i)},H=function(a,b){var c,d,e,f,g,h,i,k,l,m=[],n=p,q=o,s=r,t=j,u=B,v=D,w=[1732584193,4023233417,2562383102,271733878,3285377520],x=[1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782];for(a[b>>5]|=128<<24-b%32,a[(b+65>>9<<4)+15]=b,l=a.length,i=0;l>i;i+=16){for(c=w[0],d=w[1],e=w[2],f=w[3],g=w[4],k=0;80>k;k+=1)16>k?m[k]=a[k+i]:m[k]=t(m[k-3]^m[k-8]^m[k-14]^m[k-16],1),h=20>k?v(t(c,5),n(d,e,f),g,x[k],m[k]):40>k?v(t(c,5),q(d,e,f),g,x[k],m[k]):60>k?v(t(c,5),s(d,e,f),g,x[k],m[k]):v(t(c,5),q(d,e,f),g,x[k],m[k]),g=f,f=e,e=t(d,30),d=c,c=h;w[0]=u(c,w[0]),w[1]=u(d,w[1]),w[2]=u(e,w[2]),w[3]=u(f,w[3]),w[4]=u(g,w[4])}return w},I=function(a,b,c){var e,f,g,h,i,j,k,l,m,n,o,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z=[];for("SHA-224"===c||"SHA-256"===c?(H=64,I=(b+65>>9<<4)+15,L=16,M=1,W=Number,N=B,O=C,P=D,Q=x,R=z,S=t,T=v,V=r,U=p,X=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],o="SHA-224"===c?[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]:[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]):("SHA-384"===c||"SHA-512"===c)&&(H=80,I=(b+128>>10<<5)+31,L=32,M=2,W=d,N=E,O=F,P=G,Q=y,R=A,S=u,T=w,V=s,U=q,X=[new W(1116352408,3609767458),new W(1899447441,602891725),new W(3049323471,3964484399),new W(3921009573,2173295548),new W(961987163,4081628472),new W(1508970993,3053834265),new W(2453635748,2937671579),new W(2870763221,3664609560),new W(3624381080,2734883394),new W(310598401,1164996542),new W(607225278,1323610764),new W(1426881987,3590304994),new W(1925078388,4068182383),new W(2162078206,991336113),new W(2614888103,633803317),new W(3248222580,3479774868),new W(3835390401,2666613458),new W(4022224774,944711139),new W(264347078,2341262773),new W(604807628,2007800933),new W(770255983,1495990901),new W(1249150122,1856431235),new W(1555081692,3175218132),new W(1996064986,2198950837),new W(2554220882,3999719339),new W(2821834349,766784016),new W(2952996808,2566594879),new W(3210313671,3203337956),new W(3336571891,1034457026),new W(3584528711,2466948901),new W(113926993,3758326383),new W(338241895,168717936),new W(666307205,1188179964),new W(773529912,1546045734),new W(1294757372,1522805485),new W(1396182291,2643833823),new W(1695183700,2343527390),new W(1986661051,1014477480),new W(2177026350,1206759142),new W(2456956037,344077627),new W(2730485921,1290863460),new W(2820302411,3158454273),new W(3259730800,3505952657),new W(3345764771,106217008),new W(3516065817,3606008344),new W(3600352804,1432725776),new W(4094571909,1467031594),new W(275423344,851169720),new W(430227734,3100823752),new W(506948616,1363258195),new W(659060556,3750685593),new W(883997877,3785050280),new W(958139571,3318307427),new W(1322822218,3812723403),new W(1537002063,2003034995),new W(1747873779,3602036899),new W(1955562222,1575990012),new W(2024104815,1125592928),new W(2227730452,2716904306),new W(2361852424,442776044),new W(2428436474,593698344),new W(2756734187,3733110249),new W(3204031479,2999351573),new W(3329325298,3815920427),new W(3391569614,3928383900),new W(3515267271,566280711),new W(3940187606,3454069534),new W(4118630271,4000239992),new W(116418474,1914138554),new W(174292421,2731055270),new W(289380356,3203993006),new W(460393269,320620315),new W(685471733,587496836),new W(852142971,1086792851),new W(1017036298,365543100),new W(1126000580,2618297676),new W(1288033470,3409855158),new W(1501505948,4234509866),new W(1607167915,987167468),new W(1816402316,1246189591)],o="SHA-384"===c?[new W(3418070365,3238371032),new W(1654270250,914150663),new W(2438529370,812702999),new W(355462360,4144912697),new W(1731405415,4290775857),new W(41048885895,1750603025),new W(3675008525,1694076839),new W(1203062813,3204075428)]:[new W(1779033703,4089235720),new W(3144134277,2227873595),new W(1013904242,4271175723),new W(2773480762,1595750129),new W(1359893119,2917565137),new W(2600822924,725511199),new W(528734635,4215389547),new W(1541459225,327033209)]),a[b>>5]|=128<<24-b%32,a[I]=b,Y=a.length,J=0;Y>J;J+=L){for(e=o[0],f=o[1],g=o[2],h=o[3],i=o[4],j=o[5],k=o[6],l=o[7],K=0;H>K;K+=1)16>K?Z[K]=new W(a[K*M+J],a[K*M+J+1]):Z[K]=O(R(Z[K-2]),Z[K-7],Q(Z[K-15]),Z[K-16]),m=P(l,T(i),U(i,j,k),X[K],Z[K]),n=N(S(e),V(e,f,g)),l=k,k=j,j=i,i=N(h,m),h=g,g=f,f=e,e=N(m,n);o[0]=N(e,o[0]),o[1]=N(f,o[1]),o[2]=N(g,o[2]),o[3]=N(h,o[3]),o[4]=N(i,o[4]),o[5]=N(j,o[5]),o[6]=N(k,o[6]),o[7]=N(l,o[7])}switch(c){case"SHA-224":return[o[0],o[1],o[2],o[3],o[4],o[5],o[6]];case"SHA-256":return o;case"SHA-384":return[o[0].highOrder,o[0].lowOrder,o[1].highOrder,o[1].lowOrder,o[2].highOrder,o[2].lowOrder,o[3].highOrder,o[3].lowOrder,o[4].highOrder,o[4].lowOrder,o[5].highOrder,o[5].lowOrder];case"SHA-512":return[o[0].highOrder,o[0].lowOrder,o[1].highOrder,o[1].lowOrder,o[2].highOrder,o[2].lowOrder,o[3].highOrder,o[3].lowOrder,o[4].highOrder,o[4].lowOrder,o[5].highOrder,o[5].lowOrder,o[6].highOrder,o[6].lowOrder,o[7].highOrder,o[7].lowOrder];default:throw new Error("Unknown SHA variant")}},J=function(b,c){if(this.sha1=null,this.sha224=null,this.sha256=null,this.sha384=null,this.sha512=null,this.strBinLen=null,this.strToHash=null,"HEX"===c){if(0!==b.length%2)throw new Error("TEXT MUST BE IN BYTE INCREMENTS");this.strBinLen=4*b.length,this.strToHash=f(b)}else{if("ASCII"!==c&&"undefined"!=typeof c)throw new Error("UNKNOWN TEXT INPUT TYPE");this.strBinLen=b.length*a,this.strToHash=e(b)}};return J.prototype={getHash:function(a,b){var c=null,d=this.strToHash.slice();switch(b){case"HEX":c=g;break;case"B64":c=h;break;case"ASCII":c=i;break;default:throw new Error("FORMAT NOT RECOGNIZED")}switch(a){case"SHA-1":return null===this.sha1&&(this.sha1=H(d,this.strBinLen)),c(this.sha1);case"SHA-224":return null===this.sha224&&(this.sha224=I(d,this.strBinLen,a)),c(this.sha224);case"SHA-256":return null===this.sha256&&(this.sha256=I(d,this.strBinLen,a)),c(this.sha256);case"SHA-384":return null===this.sha384&&(this.sha384=I(d,this.strBinLen,a)),c(this.sha384);case"SHA-512":return null===this.sha512&&(this.sha512=I(d,this.strBinLen,a)),c(this.sha512);default:throw new Error("HASH NOT RECOGNIZED")}},getHMAC:function(b,c,d,j){var k,l,m,n,o,p,q,r,s,t=[],u=[];switch(j){case"HEX":k=g;break;case"B64":k=h;break;case"ASCII":k=i;break;default:throw new Error("FORMAT NOT RECOGNIZED")}switch(d){case"SHA-1":m=64,s=160;break;case"SHA-224":m=64,s=224;break;case"SHA-256":m=64,s=256;break;case"SHA-384":m=128,s=384;break;case"SHA-512":m=128,s=512;break;default:throw new Error("HASH NOT RECOGNIZED")}if("HEX"===c){if(0!==b.length%2)throw new Error("KEY MUST BE IN BYTE INCREMENTS");l=f(b),r=4*b.length}else{if("ASCII"!==c)throw new Error("UNKNOWN KEY INPUT TYPE");l=e(b),r=b.length*a}for(n=8*m,q=m/4-1,r/8>m?(l="SHA-1"===d?H(l,r):I(l,r,d),l[q]&=4294967040):m>r/8&&(l[q]&=4294967040),o=0;q>=o;o+=1)t[o]=909522486^l[o],u[o]=1549556828^l[o];return"SHA-1"===d?(p=H(t.concat(this.strToHash),n+this.strBinLen),p=H(u.concat(p),n+s)):(p=I(t.concat(this.strToHash),n+this.strBinLen,d),p=I(u.concat(p),n+s,d)),k(p)}},J}();b.exports={sha1:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-1","ASCII")},sha224:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-224","ASCII")},sha256:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-256","ASCII")},sha384:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-384","ASCII")},sha512:function(a){var b=new d(a,"ASCII");return b.getHash("SHA-512","ASCII")}}},{}],32:[function(a,b,c){b.exports={cipher:a("./cipher"),hash:a("./hash"),cfb:a("./cfb.js"),publicKey:a("./public_key"),signature:a("./signature.js"),random:a("./random.js"),pkcs1:a("./pkcs1.js")};var d=a("./crypto.js");for(var e in d)b.exports[e]=d[e]},{"./cfb.js":18,"./cipher":23,"./crypto.js":25,"./hash":28,"./pkcs1.js":33,"./public_key":36,"./random.js":39,"./signature.js":40}],33:[function(a,b,c){function d(a){for(var b,c="";c.lengthb-11)throw new Error("Message too long");var e=d(b-c-3),f=String.fromCharCode(0)+String.fromCharCode(2)+e+String.fromCharCode(0)+a;return f},decode:function(a){0!==a.charCodeAt(0)&&(a=String.fromCharCode(0)+a);for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=2;0!==a.charCodeAt(d)&&d=8&&0===f)return a.substr(d);throw new Error("Decryption error")}},emsa:{encode:function(a,b,c){var d,f=i.digest(a,b);if(f.length!==i.getHashByteLength(a))throw new Error("Invalid hash length");var j="";for(d=0;dc)throw new Error("Intended encoded message length too short");var l="";for(d=0;c-k-3>d;d++)l+=String.fromCharCode(255);var m=String.fromCharCode(0)+String.fromCharCode(1)+l+String.fromCharCode(0)+j;return new h(g.hexstrdump(m),16)}}}},{"../util.js":76,"./crypto.js":25,"./hash":28,"./public_key/jsbn.js":37,"./random.js":39}],34:[function(a,b,c){function d(){function a(a,b,c,d,i,j){for(var k,l,m,n=h.getLeftNBits(g.digest(a,b),i.bitLength()),o=new e(h.hexstrdump(n),16);;)if(k=f.getRandomBigIntegerInRange(e.ONE,i.subtract(e.ONE)),l=c.modPow(k,d).mod(i),m=k.modInverse(i).multiply(o.add(j.multiply(l))).mod(i),0!=l&&0!=m)break;var p=[];return p[0]=l.toMPI(),p[1]=m.toMPI(),p}function b(a){var b=i.prefer_hash_algorithm;switch(Math.round(a.bitLength()/8)){case 20:return 2!=b&&b>11&&10!=b&&8>b?2:b;case 28:return b>11&&8>b?11:b;case 32:return b>10&&8>b?8:b;default:return h.print_debug("DSA select hash algorithm: returning null for an unknown length of q"),null}}function c(a,b,c,d,f,i,j,k){var l=h.getLeftNBits(g.digest(a,d),i.bitLength()),m=new e(h.hexstrdump(l),16);if(e.ZERO.compareTo(b)>=0||b.compareTo(i)>=0||e.ZERO.compareTo(c)>=0||c.compareTo(i)>=0)return h.print_debug("invalid DSA Signature"),null;var n=c.modInverse(i);if(0==e.ZERO.compareTo(n))return h.print_debug("invalid DSA Signature"),null;var o=m.multiply(n).mod(i),p=b.multiply(n).mod(i);return j.modPow(o,f).multiply(k.modPow(p,f)).mod(f).mod(i)}this.select_hash_algorithm=b,this.sign=a,this.verify=c}var e=a("./jsbn.js"),f=a("../random.js"),g=a("../hash"),h=a("../../util.js"),i=a("../../config");b.exports=d},{"../../config":17,"../../util.js":76,"../hash":28,"../random.js":39,"./jsbn.js":37}],35:[function(a,b,c){function d(){function a(a,b,c,d){var g=c.subtract(e.TWO),h=f.getRandomBigIntegerInRange(e.ONE,g);h=h.mod(g).add(e.ONE);var i=[];return i[0]=b.modPow(h,c),i[1]=d.modPow(h,c).multiply(a).mod(c),i}function b(a,b,c,d){return g.print_debug("Elgamal Decrypt:\nc1:"+g.hexstrdump(a.toMPI())+"\nc2:"+g.hexstrdump(b.toMPI())+"\np:"+g.hexstrdump(c.toMPI())+"\nx:"+g.hexstrdump(d.toMPI())),a.modPow(d,c).modInverse(c).multiply(b).mod(c)}this.encrypt=a,this.decrypt=b}var e=a("./jsbn.js"),f=a("../random.js"),g=a("../../util.js");b.exports=d},{"../../util.js":76,"../random.js":39,"./jsbn.js":37}],36:[function(a,b,c){b.exports={rsa:a("./rsa.js"),elgamal:a("./elgamal.js"),dsa:a("./dsa.js")}},{"./dsa.js":34,"./elgamal.js":35,"./rsa.js":38}],37:[function(a,b,c){function d(a,b,c){null!=a&&("number"==typeof a?this.fromNumber(a,b,c):null==b&&"string"!=typeof a?this.fromString(a,256):this.fromString(a,b))}function e(){return new d(null)}function f(a,b,c,d,e,f){for(;--f>=0;){var g=b*this[a++]+c[d]+e;e=Math.floor(g/67108864),c[d++]=67108863&g}return e}function g(a){return fb.charAt(a)}function h(a,b){var c=gb[a.charCodeAt(b)];return null==c?-1:c}function i(a){for(var b=this.t-1;b>=0;--b)a[b]=this[b];a.t=this.t,a.s=this.s}function j(a){this.t=1,this.s=0>a?-1:0,a>0?this[0]=a:-1>a?this[0]=a+this.DV:this.t=0}function k(a){var b=e();return b.fromInt(a),b}function l(a,b){var c;if(16==b)c=4;else if(8==b)c=3;else if(256==b)c=8;else if(2==b)c=1;else if(32==b)c=5;else{if(4!=b)return void this.fromRadix(a,b);c=2}this.t=0,this.s=0;for(var e=a.length,f=!1,g=0;--e>=0;){var i=8==c?255&a[e]:h(a,e);0>i?"-"==a.charAt(e)&&(f=!0):(f=!1,0==g?this[this.t++]=i:g+c>this.DB?(this[this.t-1]|=(i&(1<>this.DB-g):this[this.t-1]|=i<=this.DB&&(g-=this.DB))}8==c&&0!=(128&a[0])&&(this.s=-1,g>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==a;)--this.t}function n(a){if(this.s<0)return"-"+this.negate().toString(a);var b;if(16==a)b=4;else if(8==a)b=3;else if(2==a)b=1;else if(32==a)b=5;else{if(4!=a)return this.toRadix(a);b=2}var c,d=(1<0)for(i>i)>0&&(e=!0,f=g(c));h>=0;)b>i?(c=(this[h]&(1<>(i+=this.DB-b)):(c=this[h]>>(i-=b)&d,0>=i&&(i+=this.DB,--h)),c>0&&(e=!0),e&&(f+=g(c));return e?f:"0"}function o(){var a=e();return d.ZERO.subTo(this,a),a}function p(){return this.s<0?this.negate():this}function q(a){var b=this.s-a.s;if(0!=b)return b;var c=this.t;if(b=c-a.t,0!=b)return this.s<0?-b:b;for(;--c>=0;)if(0!=(b=this[c]-a[c]))return b;return 0}function r(a){var b,c=1;return 0!=(b=a>>>16)&&(a=b,c+=16),0!=(b=a>>8)&&(a=b,c+=8),0!=(b=a>>4)&&(a=b,c+=4),0!=(b=a>>2)&&(a=b,c+=2),0!=(b=a>>1)&&(a=b,c+=1),c}function s(){return this.t<=0?0:this.DB*(this.t-1)+r(this[this.t-1]^this.s&this.DM)}function t(a,b){var c;for(c=this.t-1;c>=0;--c)b[c+a]=this[c];for(c=a-1;c>=0;--c)b[c]=0;b.t=this.t+a,b.s=this.s}function u(a,b){for(var c=a;c=0;--c)b[c+g+1]=this[c]>>e|h,h=(this[c]&f)<=0;--c)b[c]=0;b[g]=h,b.t=this.t+g+1,b.s=this.s,b.clamp()}function w(a,b){b.s=this.s;var c=Math.floor(a/this.DB);if(c>=this.t)return void(b.t=0);var d=a%this.DB,e=this.DB-d,f=(1<>d;for(var g=c+1;g>d;d>0&&(b[this.t-c-1]|=(this.s&f)<c;)d+=this[c]-a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t>=this.DB;d+=this.s}else{for(d+=this.s;c>=this.DB;d-=a.s}b.s=0>d?-1:0,-1>d?b[c++]=this.DV+d:d>0&&(b[c++]=d),b.t=c,b.clamp()}function y(a,b){var c=this.abs(),e=a.abs(),f=c.t;for(b.t=f+e.t;--f>=0;)b[f]=0;for(f=0;f=0;)a[c]=0;for(c=0;c=b.DV&&(a[c+b.t]-=b.DV,a[c+b.t+1]=1)}a.t>0&&(a[a.t-1]+=b.am(c,b[c],a,2*c,0,1)),a.s=0,a.clamp()}function A(a,b,c){var f=a.abs();if(!(f.t<=0)){var g=this.abs();if(g.t0?(f.lShiftTo(k,h),g.lShiftTo(k,c)):(f.copyTo(h),g.copyTo(c));var l=h.t,m=h[l-1];if(0!=m){var n=m*(1<1?h[l-2]>>this.F2:0),o=this.FV/n,p=(1<=0&&(c[c.t++]=1,c.subTo(u,c)),d.ONE.dlShiftTo(l,u),u.subTo(h,h);h.t=0;){var v=c[--s]==m?this.DM:Math.floor(c[s]*o+(c[s-1]+q)*p);if((c[s]+=h.am(0,v,c,t,0,l))0&&c.rShiftTo(k,c),0>i&&d.ZERO.subTo(c,c)}}}function B(a){var b=e();return this.abs().divRemTo(a,null,b),this.s<0&&b.compareTo(d.ZERO)>0&&a.subTo(b,b),b}function C(a){this.m=a}function D(a){return a.s<0||a.compareTo(this.m)>=0?a.mod(this.m):a}function E(a){return a}function F(a){a.divRemTo(this.m,null,a)}function G(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function H(a,b){a.squareTo(b),this.reduce(b)}function I(){if(this.t<1)return 0;var a=this[0];if(0==(1&a))return 0;var b=3&a;return b=b*(2-(15&a)*b)&15,b=b*(2-(255&a)*b)&255,b=b*(2-((65535&a)*b&65535))&65535,b=b*(2-a*b%this.DV)%this.DV,b>0?this.DV-b:-b}function J(a){this.m=a,this.mp=a.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(b,b),b}function L(a){var b=e();return a.copyTo(b),this.reduce(b),b}function M(a){for(;a.t<=this.mt2;)a[a.t++]=0;for(var b=0;b>15)*this.mpl&this.um)<<15)&a.DM;for(c=b+this.m.t,a[c]+=this.m.am(0,d,a,b,0,this.m.t);a[c]>=a.DV;)a[c]-=a.DV,a[++c]++}a.clamp(),a.drShiftTo(this.m.t,a),a.compareTo(this.m)>=0&&a.subTo(this.m,a)}function N(a,b){a.squareTo(b),this.reduce(b)}function O(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function P(){return 0==(this.t>0?1&this[0]:this.s)}function Q(a,b){if(a>4294967295||1>a)return d.ONE;var c=e(),f=e(),g=b.convert(this),h=r(a)-1;for(g.copyTo(c);--h>=0;)if(b.sqrTo(c,f),(a&1<0)b.mulTo(f,g,c);else{var i=c;c=f,f=i}return b.revert(c)}function R(a,b){var c;return c=256>a||b.isEven()?new C(b):new J(b),this.exp(a,c)}function S(){var a=e();return this.copyTo(a),a}function T(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<>24}function V(){return 0==this.t?this.s:this[0]<<16>>16}function W(a){return Math.floor(Math.LN2*this.DB/Math.log(a))}function X(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1}function Y(a){if(null==a&&(a=10),0==this.signum()||2>a||a>36)return"0";var b=this.chunkSize(a),c=Math.pow(a,b),d=k(c),f=e(),g=e(),h="";for(this.divRemTo(d,f,g);f.signum()>0;)h=(c+g.intValue()).toString(a).substr(1)+h,f.divRemTo(d,f,g);return g.intValue().toString(a)+h}function Z(a,b){this.fromInt(0),null==b&&(b=10);for(var c=this.chunkSize(b),e=Math.pow(b,c),f=!1,g=0,i=0,j=0;jk?"-"==a.charAt(j)&&0==this.signum()&&(f=!0):(i=b*i+k,++g>=c&&(this.dMultiply(e),this.dAddOffset(i,0),g=0,i=0))}g>0&&(this.dMultiply(Math.pow(b,g)),this.dAddOffset(i,0)),f&&d.ZERO.subTo(this,this)}function $(a,b,c){if("number"==typeof b)if(2>a)this.fromInt(1);else for(this.fromNumber(a,c),this.testBit(a-1)||this.bitwiseTo(d.ONE.shiftLeft(a-1),ga,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(b);)this.dAddOffset(2,0),this.bitLength()>a&&this.subTo(d.ONE.shiftLeft(a-1),this);else{var e=new Array,f=7&a;e.length=(a>>3)+1,b.nextBytes(e),f>0?e[0]&=(1<0)for(d>d)!=(this.s&this.DM)>>d&&(b[e++]=c|this.s<=0;)8>d?(c=(this[a]&(1<>(d+=this.DB-8)):(c=this[a]>>(d-=8)&255,0>=d&&(d+=this.DB,--a)),(e>0||c!=this.s)&&(b[e++]=c);return b}function aa(a){return 0==this.compareTo(a)}function ba(a){return this.compareTo(a)<0?this:a}function ca(a){return this.compareTo(a)>0?this:a}function da(a,b,c){var d,e,f=Math.min(a.t,this.t);for(d=0;f>d;++d)c[d]=b(this[d],a[d]);if(a.ta?this.rShiftTo(-a,b):this.lShiftTo(a,b),b}function oa(a){var b=e();return 0>a?this.lShiftTo(-a,b):this.rShiftTo(a,b),b}function pa(a){if(0==a)return-1;var b=0;return 0==(65535&a)&&(a>>=16,b+=16),0==(255&a)&&(a>>=8,b+=8),0==(15&a)&&(a>>=4,b+=4),0==(3&a)&&(a>>=2,b+=2),0==(1&a)&&++b,b}function qa(){for(var a=0;a=this.t?0!=this.s:0!=(this[b]&1<c;)d+=this[c]+a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t>=this.DB;d+=this.s}else{for(d+=this.s;c>=this.DB;d+=a.s}b.s=0>d?-1:0,d>0?b[c++]=d:-1>d&&(b[c++]=this.DV+d),b.t=c,b.clamp()}function za(a){var b=e();return this.addTo(a,b),b}function Aa(a){var b=e();return this.subTo(a,b),b}function Ba(a){var b=e();return this.multiplyTo(a,b),b}function Ca(){var a=e();return this.squareTo(a),a}function Da(a){var b=e();return this.divRemTo(a,b,null),b}function Ea(a){var b=e();return this.divRemTo(a,null,b),b}function Fa(a){var b=e(),c=e();return this.divRemTo(a,b,c),new Array(b,c)}function Ga(a){this[this.t]=this.am(0,a-1,this,0,0,this.t),++this.t,this.clamp()}function Ha(a,b){if(0!=a){for(;this.t<=b;)this[this.t++]=0;for(this[b]+=a;this[b]>=this.DV;)this[b]-=this.DV,++b>=this.t&&(this[this.t++]=0),++this[b]}}function Ia(){}function Ja(a){return a}function Ka(a,b,c){a.multiplyTo(b,c)}function La(a,b){a.squareTo(b)}function Ma(a){return this.exp(a,new Ia)}function Na(a,b,c){var d=Math.min(this.t+a.t,b);for(c.s=0,c.t=d;d>0;)c[--d]=0;var e;for(e=c.t-this.t;e>d;++d)c[d+this.t]=this.am(0,a[d],c,d,0,this.t);for(e=Math.min(a.t,b);e>d;++d)this.am(0,a[d],c,d,0,b-d);c.clamp()}function Oa(a,b,c){--b;var d=c.t=this.t+a.t-b;for(c.s=0;--d>=0;)c[d]=0;for(d=Math.max(b-this.t,0);d2*this.m.t)return a.mod(this.m);if(a.compareTo(this.m)<0)return a;var b=e();return a.copyTo(b),this.reduce(b),b}function Ra(a){return a}function Sa(a){for(a.drShiftTo(this.m.t-1,this.r2),a.t>this.m.t+1&&(a.t=this.m.t+1,a.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);a.compareTo(this.r2)<0;)a.dAddOffset(1,this.m.t+1);for(a.subTo(this.r2,a);a.compareTo(this.m)>=0;)a.subTo(this.m,a)}function Ta(a,b){a.squareTo(b),this.reduce(b)}function Ua(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function Va(a,b){var c,d,f=a.bitLength(),g=k(1);if(0>=f)return g;c=18>f?1:48>f?3:144>f?4:768>f?5:6,d=8>f?new C(b):b.isEven()?new Pa(b):new J(b);var h=new Array,i=3,j=c-1,l=(1<1){var m=e();for(d.sqrTo(h[1],m);l>=i;)h[i]=e(),d.mulTo(m,h[i-2],h[i]),i+=2}var n,o,p=a.t-1,q=!0,s=e();for(f=r(a[p])-1;p>=0;){for(f>=j?n=a[p]>>f-j&l:(n=(a[p]&(1<0&&(n|=a[p-1]>>this.DB+f-j)),i=c;0==(1&n);)n>>=1,--i;if((f-=i)<0&&(f+=this.DB,--p),q)h[n].copyTo(g),q=!1;else{for(;i>1;)d.sqrTo(g,s),d.sqrTo(s,g),i-=2;i>0?d.sqrTo(g,s):(o=g,g=s,s=o),d.mulTo(s,h[n],g)}for(;p>=0&&0==(a[p]&1<f)return b;for(f>e&&(f=e),f>0&&(b.rShiftTo(f,b),c.rShiftTo(f,c));b.signum()>0;)(e=b.getLowestSetBit())>0&&b.rShiftTo(e,b),(e=c.getLowestSetBit())>0&&c.rShiftTo(e,c),b.compareTo(c)>=0?(b.subTo(c,b),b.rShiftTo(1,b)):(c.subTo(b,c),c.rShiftTo(1,c));return f>0&&c.lShiftTo(f,c),c}function Xa(a){if(0>=a)return 0;var b=this.DV%a,c=this.s<0?a-1:0;if(this.t>0)if(0==b)c=this[0]%a;else for(var d=this.t-1;d>=0;--d)c=(b*c+this[d])%a;return c}function Ya(a){var b=a.isEven();if(this.isEven()&&b||0==a.signum())return d.ZERO;for(var c=a.clone(),e=this.clone(),f=k(1),g=k(0),h=k(0),i=k(1);0!=c.signum();){for(;c.isEven();)c.rShiftTo(1,c),b?(f.isEven()&&g.isEven()||(f.addTo(this,f),g.subTo(a,g)),f.rShiftTo(1,f)):g.isEven()||g.subTo(a,g),g.rShiftTo(1,g);for(;e.isEven();)e.rShiftTo(1,e),b?(h.isEven()&&i.isEven()||(h.addTo(this,h),i.subTo(a,i)),h.rShiftTo(1,h)):i.isEven()||i.subTo(a,i),i.rShiftTo(1,i);c.compareTo(e)>=0?(c.subTo(e,c),b&&f.subTo(h,f),g.subTo(i,g)):(e.subTo(c,e),b&&h.subTo(f,h),i.subTo(g,i))}return 0!=e.compareTo(d.ONE)?d.ZERO:i.compareTo(a)>=0?i.subtract(a):i.signum()<0?(i.addTo(a,i),i.signum()<0?i.add(a):i):i}function Za(a){var b,c=this.abs();if(1==c.t&&c[0]<=hb[hb.length-1]){for(b=0;bd;)d*=hb[e++];for(d=c.modInt(d);e>b;)if(d%hb[b++]==0)return!1}return c.millerRabin(a)}function r(a){var b,c=1;return 0!=(b=a>>>16)&&(a=b,c+=16),0!=(b=a>>8)&&(a=b,c+=8),0!=(b=a>>4)&&(a=b,c+=4),0!=(b=a>>2)&&(a=b,c+=2),0!=(b=a>>1)&&(a=b,c+=1),c}function $a(){var a=this.toByteArray(),b=8*(a.length-1)+r(a[0]),c="";return c+=String.fromCharCode((65280&b)>>8),c+=String.fromCharCode(255&b),c+=bb.bin2str(a)}function _a(a){var b=this.subtract(d.ONE),c=b.getLowestSetBit();if(0>=c)return!1;var f=b.shiftRight(c);a=a+1>>1,a>hb.length&&(a=hb.length);for(var g,h=e(),i=[],j=0;a>j;++j){for(;g=hb[Math.floor(Math.random()*hb.length)],-1!=i.indexOf(g););i.push(g),h.fromInt(g);var k=h.modPow(f,this);if(0!=k.compareTo(d.ONE)&&0!=k.compareTo(b)){for(var g=1;g++=eb;++eb)gb[db++]=eb;for(db="a".charCodeAt(0),eb=10;36>eb;++eb)gb[db++]=eb;for(db="A".charCodeAt(0),eb=10;36>eb;++eb)gb[db++]=eb;C.prototype.convert=D,C.prototype.revert=E,C.prototype.reduce=F,C.prototype.mulTo=G,C.prototype.sqrTo=H,J.prototype.convert=K,J.prototype.revert=L,J.prototype.reduce=M,J.prototype.mulTo=O,J.prototype.sqrTo=N,d.prototype.copyTo=i,d.prototype.fromInt=j,d.prototype.fromString=l,d.prototype.clamp=m,d.prototype.dlShiftTo=t,d.prototype.drShiftTo=u,d.prototype.lShiftTo=v,d.prototype.rShiftTo=w,d.prototype.subTo=x,d.prototype.multiplyTo=y,d.prototype.squareTo=z,d.prototype.divRemTo=A,d.prototype.invDigit=I,d.prototype.isEven=P,d.prototype.exp=Q,d.prototype.toString=n,d.prototype.negate=o,d.prototype.abs=p,d.prototype.compareTo=q,d.prototype.bitLength=s,d.prototype.mod=B,d.prototype.modPowInt=R,d.ZERO=k(0),d.ONE=k(1),d.TWO=k(2),b.exports=d,Ia.prototype.convert=Ja,Ia.prototype.revert=Ja,Ia.prototype.mulTo=Ka,Ia.prototype.sqrTo=La,Pa.prototype.convert=Qa,Pa.prototype.revert=Ra,Pa.prototype.reduce=Sa,Pa.prototype.mulTo=Ua,Pa.prototype.sqrTo=Ta;var hb=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],ib=(1<<26)/hb[hb.length-1],d=a("./jsbn.js");d.prototype.chunkSize=W,d.prototype.toRadix=Y,d.prototype.fromRadix=Z,d.prototype.fromNumber=$,d.prototype.bitwiseTo=da,d.prototype.changeBit=ua,d.prototype.addTo=ya,d.prototype.dMultiply=Ga,d.prototype.dAddOffset=Ha,d.prototype.multiplyLowerTo=Na,d.prototype.multiplyUpperTo=Oa,d.prototype.modInt=Xa,d.prototype.millerRabin=_a,d.prototype.clone=S,d.prototype.intValue=T,d.prototype.byteValue=U,d.prototype.shortValue=V,d.prototype.signum=X,d.prototype.toByteArray=_,d.prototype.equals=aa,d.prototype.min=ba,d.prototype.max=ca,d.prototype.and=fa,d.prototype.or=ha,d.prototype.xor=ja,d.prototype.andNot=la,d.prototype.not=ma,d.prototype.shiftLeft=na,d.prototype.shiftRight=oa,d.prototype.getLowestSetBit=qa,d.prototype.bitCount=sa,d.prototype.testBit=ta,d.prototype.setBit=va,d.prototype.clearBit=wa,d.prototype.flipBit=xa,d.prototype.add=za,d.prototype.subtract=Aa,d.prototype.multiply=Ba,d.prototype.divide=Da,d.prototype.remainder=Ea,d.prototype.divideAndRemainder=Fa,d.prototype.modPow=Va,d.prototype.modInverse=Ya,d.prototype.pow=Ma,d.prototype.gcd=Wa,d.prototype.isProbablePrime=Za,d.prototype.toMPI=$a,d.prototype.square=Ca},{"../../util.js":76,"./jsbn.js":37}],38:[function(a,b,c){function d(){function a(a){for(var b=0;b>1;for(e.e=parseInt(b,16),e.ee=new h(b,16);;){for(;e.p=new h(a-g,1,f),0!==e.p.subtract(h.ONE).gcd(e.ee).compareTo(h.ONE)||!e.p.isProbablePrime(10););for(;e.q=new h(g,1,f),0!==e.q.subtract(h.ONE).gcd(e.ee).compareTo(h.ONE)||!e.q.isProbablePrime(10););if(e.p.compareTo(e.q)<=0){var i=e.p;e.p=e.q,e.q=i}var k=e.p.subtract(h.ONE),l=e.q.subtract(h.ONE),m=k.multiply(l);if(0===m.gcd(e.ee).compareTo(h.ONE)){e.n=e.p.multiply(e.q),e.d=e.ee.modInverse(m),e.dmp1=e.d.mod(k),e.dmq1=e.d.mod(l),e.u=e.p.modInverse(e.q);break}}c(e)})}this.encrypt=b,this.decrypt=a,this.verify=g,this.sign=c,this.generate=l,this.keyObject=j}var h=a("./jsbn.js"),i=a("../../util.js"),j=a("../random.js"),k=a("../../config"),l=h.ZERO,m=h.ZERO;b.exports=g},{"../../config":17,"../../util.js":76,"../random.js":39,"./jsbn.js":37}],39:[function(a,b,c){function d(){this.buffer=null,this.size=null}var e=a("../type/mpi.js"),f=null;"undefined"==typeof window&&(f=a("crypto")),b.exports={getRandomBytes:function(a){for(var b="",c=0;a>c;c++)b+=String.fromCharCode(this.getSecureRandomOctet());return b},getSecureRandom:function(a,b){for(var c=this.getSecureRandomUint(),d=(b-a).toString(2).length;(c&Math.pow(2,d)-1)>b-a;)c=this.getSecureRandomUint();return a+Math.abs(c&Math.pow(2,d)-1)},getSecureRandomOctet:function(){var a=new Uint8Array(1);return this.getRandomValues(a),a[0]},getSecureRandomUint:function(){var a=new Uint8Array(4),b=new DataView(a.buffer);return this.getRandomValues(a),b.getUint32(0)},getRandomValues:function(a){if(!(a instanceof Uint8Array))throw new Error("Invalid type: buf not an Uint8Array");if("undefined"!=typeof window&&window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(a);else if("undefined"!=typeof window&&"object"==typeof window.msCrypto&&"function"==typeof window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(a);else if(f){var b=f.randomBytes(a.length);a.set(b)}else{if(!this.randomBuffer.buffer)throw new Error("No secure random number generator available.");this.randomBuffer.get(a)}},getRandomBigInteger:function(a){if(1>a)throw new Error("Illegal parameter value: bits < 1");var b=Math.floor((a+7)/8),c=this.getRandomBytes(b);a%8>0&&(c=String.fromCharCode(Math.pow(2,a%8)-1&c.charCodeAt(0))+c.substring(1));var d=new e;return d.fromBytes(c),d.toBigInteger()},getRandomBigIntegerInRange:function(a,b){if(b.compareTo(a)<=0)throw new Error("Illegal parameter value: max <= min");for(var c=b.subtract(a),d=this.getRandomBigInteger(c.bitLength());d.compareTo(c)>0;)d=this.getRandomBigInteger(c.bitLength());return a.add(d)},randomBuffer:new d},d.prototype.init=function(a){this.buffer=new Uint8Array(a),this.size=0},d.prototype.set=function(a){if(!this.buffer)throw new Error("RandomBuffer is not initialized");if(!(a instanceof Uint8Array))throw new Error("Invalid type: buf not an Uint8Array");var b=this.buffer.length-this.size;a.length>b&&(a=a.subarray(0,b)),this.buffer.set(a,this.size),this.size+=a.length},d.prototype.get=function(a){if(!this.buffer)throw new Error("RandomBuffer is not initialized");if(!(a instanceof Uint8Array))throw new Error("Invalid type: buf not an Uint8Array");if(this.size>16)+String.fromCharCode(b>>8&255)+String.fromCharCode(255&b);return n.encode(c)}function g(a,b){var c=f(a),d=b;return c[0]==d[0]&&c[1]==d[1]&&c[2]==d[2]&&c[3]==d[3]}function h(a){for(var b=11994318,c=0;a.length-c>16;)b=b<<8^q[255&(b>>16^a.charCodeAt(c))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+1))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+2))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+3))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+4))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+5))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+6))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+7))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+8))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+9))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+10))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+11))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+12))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+13))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+14))],b=b<<8^q[255&(b>>16^a.charCodeAt(c+15))],c+=16;for(var d=c;d>16^a.charCodeAt(c++))];return 16777215&b}function i(a){var b=/^[ \f\r\t\u00a0\u2000-\u200a\u202f\u205f\u3000]*\n/m,c="",d=a,e=b.exec(a);if(null===e)throw new Error("Mandatory blank line missing between armor headers and armor data");return c=a.slice(0,e.index),d=a.slice(e.index+e[0].length),c=c.split("\n"),c.pop(),{headers:c,body:d}}function j(a){for(var b=0;be;e++)d=a.charCodeAt(e),0===i?(g.push(f.charAt(d>>2&63)),c=(3&d)<<4):1==i?(g.push(f.charAt(c|d>>4&15)),c=(15&d)<<2):2==i&&(g.push(f.charAt(c|d>>6&3)),h+=1,h%60===0&&g.push("\n"),g.push(f.charAt(63&d))),h+=1,h%60===0&&g.push("\n"),i+=1,3==i&&(i=0);return i>0&&(g.push(f.charAt(c)),h+=1,h%60===0&&g.push("\n"),g.push("="),h+=1),1==i&&(h%60===0&&g.push("\n"),g.push("=")),b?void 0:g.join("")}function e(a){var b,c,d=[],e=0,g=0,h=a.length;for(c=0;h>c;c++)b=f.indexOf(a.charAt(c)),b>=0&&(e&&d.push(String.fromCharCode(g|b>>6-e&255)),e=e+2&7,g=b<>c,d.count++})}var e={prio:0,algo:q.encryption_cipher};for(var f in b)try{f!==o.symmetric.plaintext&&f!==o.symmetric.idea&&o.read(o.symmetric,f)&&b[f].count===a.length&&b[f].prio>e.prio&&(e=b[f])}catch(g){}return e.algo}var n=a("./packet"),o=a("./enums.js"),p=a("./encoding/armor.js"),q=a("./config"),r=a("./util");d.prototype.packetlist2structure=function(a){for(var b,c,d,e=0;ethis.primaryKey.created.getTime()+24*this.primaryKey.expirationTimeV3*3600*1e3)return o.keyStatus.expired;for(var a=!1,b=0;bthis.primaryKey.created.getTime()+1e3*c.selfCertificate.keyExpirationTime?o.keyStatus.expired:o.keyStatus.valid:o.keyStatus.invalid},d.prototype.getExpirationTime=function(){if(3==this.primaryKey.version)return g(this.primaryKey);if(4==this.primaryKey.version){var a=this.getPrimaryUser();return a?g(this.primaryKey,a.selfCertificate):null}},d.prototype.getPrimaryUser=function(){for(var a=[],b=0;bb.selfCertificate.isPrimaryUserID?-1:a.selfCertificate.isPrimaryUserIDb.selfCertificate.created?-1:a.selfCertificate.createdb?-1:b>a?1:0}),c=0;cthis.subKey.created.getTime()+24*this.subKey.expirationTimeV3*3600*1e3?o.keyStatus.expired:this.bindingSignature?this.bindingSignature.isExpired()?o.keyStatus.expired:this.bindingSignature.verified||this.bindingSignature.verify(a,{key:a,bind:this.subKey})?4==this.subKey.version&&this.bindingSignature.keyNeverExpires===!1&&Date.now()>this.subKey.created.getTime()+1e3*this.bindingSignature.keyExpirationTime?o.keyStatus.expired:o.keyStatus.valid:o.keyStatus.invalid:o.keyStatus.invalid},j.prototype.getExpirationTime=function(){return g(this.subKey,this.bindingSignature)},j.prototype.update=function(a,b){if(a.verify(b)!==o.keyStatus.invalid){if(this.subKey.getFingerprint()!==a.subKey.getFingerprint())throw new Error("SubKey update method: fingerprints of subkeys not equal");this.subKey.tag===o.packet.publicSubkey&&a.subKey.tag===o.packet.secretSubkey&&(this.subKey=a.subKey),!this.bindingSignature&&a.bindingSignature&&(a.bindingSignature.verified||a.bindingSignature.verify(b,{key:b,bind:this.subKey}))&&(this.bindingSignature=a.bindingSignature),this.revocationSignature||!a.revocationSignature||a.revocationSignature.isExpired()||!a.revocationSignature.verified&&!a.revocationSignature.verify(b,{key:b,bind:this.subKey})||(this.revocationSignature=a.revocationSignature)}},c.Key=d,c.readArmored=k,c.generate=l,c.getPreferredSymAlgo=m},{"./config":17,"./encoding/armor.js":41,"./enums.js":43,"./packet":55,"./util":76}],48:[function(a,b,c){b.exports=a("./keyring.js"),b.exports.localstore=a("./localstore.js")},{"./keyring.js":49,"./localstore.js":50}],49:[function(a,b,c){function d(b){this.storeHandler=b||new(a("./localstore.js")),this.publicKeys=new e(this.storeHandler.loadPublic()),this.privateKeys=new e(this.storeHandler.loadPrivate())}function e(a){this.keys=a}function f(a,b){a=a.toLowerCase();for(var c=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp("<"+c+">"),e=b.getUserIds(),f=0;f=0;e--){var m=new i.Signature;if(m.signatureType=h,m.hashAlgorithm=l.prefer_hash_algorithm,m.publicKeyAlgorithm=f.algorithm,!f.isDecrypted)throw new Error("Private key is not decrypted.");m.sign(f,c),b.push(m)}return new d(b)},d.prototype.verify=function(a){var b=[],c=this.unwrapCompressed(),d=c.packets.filterByTag(j.packet.literal);if(1!==d.length)throw new Error("Can only verify message with one literal data packet.");for(var e=c.packets.filterByTag(j.packet.signature),f=0;fe?(c=a.charCodeAt(0),b=1):255>e?(c=(a.charCodeAt(0)-192<<8)+a.charCodeAt(1)+192,b=2):255==e&&(c=d.readNumber(a.substr(1,4)),b=5),{len:c,offset:b}},writeSimpleLength:function(a){var b="";return 192>a?b+=String.fromCharCode(a):a>191&&8384>a?(b+=String.fromCharCode((a-192>>8)+192),b+=String.fromCharCode(a-192&255)):(b+=String.fromCharCode(255),b+=d.writeNumber(a,4)),b},writeHeader:function(a,b){var c="";return c+=String.fromCharCode(192|a),c+=this.writeSimpleLength(b)},writeOldHeader:function(a,b){var c="";return 256>b?(c+=String.fromCharCode(128|a<<2),c+=String.fromCharCode(b)):65536>b?(c+=String.fromCharCode(128|a<<2|1),c+=d.writeNumber(b,2)):(c+=String.fromCharCode(128|a<<2|2),c+=d.writeNumber(b,4)),c},read:function(a,b,c){if(null===a||a.length<=b||a.substring(b).length<2||0===(128&a.charCodeAt(b)))throw new Error("Error during parsing. This message / key is probably not containing a valid OpenPGP format.");var e,f=b,g=-1,h=-1;h=0,0!==(64&a.charCodeAt(f))&&(h=1);var i;h?g=63&a.charCodeAt(f):(g=(63&a.charCodeAt(f))>>2,i=3&a.charCodeAt(f)),f++;var j=null,k=-1;if(h)if(a.charCodeAt(f)<192)e=a.charCodeAt(f++),d.print_debug("1 byte length:"+e);else if(a.charCodeAt(f)>=192&&a.charCodeAt(f)<224)e=(a.charCodeAt(f++)-192<<8)+a.charCodeAt(f++)+192,d.print_debug("2 byte length:"+e);else if(a.charCodeAt(f)>223&&a.charCodeAt(f)<255){e=1<<(31&a.charCodeAt(f++)),d.print_debug("4 byte length:"+e);var l=f+e;j=a.substring(f,f+e);for(var m;;){if(a.charCodeAt(l)<192){m=a.charCodeAt(l++),e+=m,j+=a.substring(l,l+m),l+=m;break}if(a.charCodeAt(l)>=192&&a.charCodeAt(l)<224){m=(a.charCodeAt(l++)-192<<8)+a.charCodeAt(l++)+192,e+=m,j+=a.substring(l,l+m),l+=m;break}if(!(a.charCodeAt(l)>223&&a.charCodeAt(l)<255)){l++,m=a.charCodeAt(l++)<<24|a.charCodeAt(l++)<<16|a.charCodeAt(l++)<<8|a.charCodeAt(l++),j+=a.substring(l,l+m),e+=m,l+=m;break}m=1<<(31&a.charCodeAt(l++)),e+=m,j+=a.substring(l,l+m),l+=m}k=l-f}else f++,e=a.charCodeAt(f++)<<24|a.charCodeAt(f++)<<16|a.charCodeAt(f++)<<8|a.charCodeAt(f++);else switch(i){case 0:e=a.charCodeAt(f++);break;case 1:e=a.charCodeAt(f++)<<8|a.charCodeAt(f++);break;case 2:e=a.charCodeAt(f++)<<24|a.charCodeAt(f++)<<16|a.charCodeAt(f++)<<8|a.charCodeAt(f++);break;default:e=c}return-1==k&&(k=e),null===j&&(j=a.substring(f,f+k)),{tag:g,packet:j,offset:f+k}}}},{"../enums.js":43,"../util.js":76}],60:[function(a,b,c){function d(){this.length=0}b.exports=d;var e=a("./packet.js"),f=a("./all_packets.js"),g=a("../enums.js");d.prototype.read=function(a){for(var b=0;be;e++)c.push(this[e]);return c},d.prototype.concat=function(a){if(a)for(var b=0;bj&&gd.length)throw new Error("Error reading MPI @:"+g);return g+6}throw new Error("Version "+this.version+" of the key packet is unsupported.")},d.prototype.readPublicKey=d.prototype.read,d.prototype.write=function(){var a=String.fromCharCode(this.version);a+=e.writeDate(this.created),3==this.version&&(a+=e.writeNumber(this.expirationTimeV3,2)),a+=String.fromCharCode(h.write(h.publicKey,this.algorithm));for(var b=i.getPublicMpiCount(this.algorithm),c=0;b>c;c++)a+=this.mpi[c].write();return a},d.prototype.writePublicKey=d.prototype.write,d.prototype.writeOld=function(){var a=this.writePublicKey();return String.fromCharCode(153)+e.writeNumber(a.length,2)+a},d.prototype.getKeyId=function(){return this.keyid?this.keyid:(this.keyid=new g,4==this.version?this.keyid.read(e.hex2bin(this.getFingerprint()).substr(12,8)):3==this.version&&this.keyid.read(this.mpi[0].write().substr(-8)),this.keyid)},d.prototype.getFingerprint=function(){if(this.fingerprint)return this.fingerprint;var a="";if(4==this.version)a=this.writeOld(),this.fingerprint=i.hash.sha1(a);else if(3==this.version){for(var b=i.getPublicMpiCount(this.algorithm),c=0;b>c;c++)a+=this.mpi[c].toBytes();this.fingerprint=i.hash.md5(a)}return this.fingerprint=e.hexstrdump(this.fingerprint),this.fingerprint},d.prototype.getBitSize=function(){return 8*this.mpi[0].byteLength()},d.prototype.postCloneTypeFix=function(){for(var a=0;ad;d++){var e=new g;b+=e.read(a.substr(b)),this.encrypted.push(e)}},d.prototype.write=function(){var a=String.fromCharCode(this.version);a+=this.publicKeyId.write(),a+=String.fromCharCode(h.write(h.publicKey,this.publicKeyAlgorithm));for(var b=0;bo&&kc;){var d=g.readSimpleLength(a.substr(c));c+=d.offset,this.read_sub_packet(a.substr(c,d.len)),c+=d.len}return c}var c=0;switch(this.version=a.charCodeAt(c++),this.version){case 3:5!=a.charCodeAt(c++)&&f.print_debug("packet/signature.js\ninvalid One-octet length of following hashed material.MUST be 5. @:"+(c-1));var d=c;this.signatureType=a.charCodeAt(c++),this.created=f.readDate(a.substr(c,4)),c+=4,this.signatureData=a.substring(d,c),this.issuerKeyId.read(a.substring(c,c+8)),c+=8,this.publicKeyAlgorithm=a.charCodeAt(c++),this.hashAlgorithm=a.charCodeAt(c++);break;case 4:this.signatureType=a.charCodeAt(c++),this.publicKeyAlgorithm=a.charCodeAt(c++),this.hashAlgorithm=a.charCodeAt(c++),c+=b.call(this,a.substr(c),!0),this.signatureData=a.substr(0,c);var e=c;c+=b.call(this,a.substr(c),!1),this.unhashedSubpackets=a.substr(e,c-e);break;default:throw new Error("Version "+this.version+" of the signature is unsupported.")}this.signedHashValue=a.substr(c,2),c+=2,this.signature=a.substr(c)},d.prototype.write=function(){var a="";switch(this.version){case 3:a+=String.fromCharCode(3),a+=String.fromCharCode(5),a+=this.signatureData,a+=this.issuerKeyId.write(),a+=String.fromCharCode(this.publicKeyAlgorithm),a+=String.fromCharCode(this.hashAlgorithm);break;case 4:a+=this.signatureData,a+=this.unhashedSubpackets?this.unhashedSubpackets:f.writeNumber(0,2)}return a+=this.signedHashValue+this.signature},d.prototype.sign=function(a,b){var c=h.write(h.signature,this.signatureType),d=h.write(h.publicKey,this.publicKeyAlgorithm),e=h.write(h.hash,this.hashAlgorithm),f=String.fromCharCode(4);f+=String.fromCharCode(c),f+=String.fromCharCode(d),f+=String.fromCharCode(e),this.issuerKeyId=a.getKeyId(),f+=this.write_all_sub_packets(),this.signatureData=f;var g=this.calculateTrailer(),j=this.toSign(c,b)+this.signatureData+g,k=i.hash.digest(e,j);this.signedHashValue=k.substr(0,2),this.signature=i.signature.sign(e,d,a.mpi,j)},d.prototype.write_all_sub_packets=function(){var a=h.signatureSubpacket,b="",c="";if(null!==this.created&&(b+=e(a.signature_creation_time,f.writeDate(this.created))),null!==this.signatureExpirationTime&&(b+=e(a.signature_expiration_time,f.writeNumber(this.signatureExpirationTime,4))),null!==this.exportable&&(b+=e(a.exportable_certification,String.fromCharCode(this.exportable?1:0))),null!==this.trustLevel&&(c=String.fromCharCode(this.trustLevel)+String.fromCharCode(this.trustAmount),b+=e(a.trust_signature,c)),null!==this.regularExpression&&(b+=e(a.regular_expression,this.regularExpression)),null!==this.revocable&&(b+=e(a.revocable,String.fromCharCode(this.revocable?1:0))),null!==this.keyExpirationTime&&(b+=e(a.key_expiration_time,f.writeNumber(this.keyExpirationTime,4))),null!==this.preferredSymmetricAlgorithms&&(c=f.bin2str(this.preferredSymmetricAlgorithms),b+=e(a.preferred_symmetric_algorithms,c)),null!==this.revocationKeyClass&&(c=String.fromCharCode(this.revocationKeyClass),c+=String.fromCharCode(this.revocationKeyAlgorithm),c+=this.revocationKeyFingerprint,b+=e(a.revocation_key,c)),this.issuerKeyId.isNull()||(b+=e(a.issuer,this.issuerKeyId.write())),null!==this.notation)for(var d in this.notation)if(this.notation.hasOwnProperty(d)){var g=this.notation[d];c=String.fromCharCode(128),c+=String.fromCharCode(0),c+=String.fromCharCode(0),c+=String.fromCharCode(0),c+=f.writeNumber(d.length,2),c+=f.writeNumber(g.length,2),c+=d+g,b+=e(a.notation_data,c)}return null!==this.preferredHashAlgorithms&&(c=f.bin2str(this.preferredHashAlgorithms),b+=e(a.preferred_hash_algorithms,c)),null!==this.preferredCompressionAlgorithms&&(c=f.bin2str(this.preferredCompressionAlgorithms),b+=e(a.preferred_compression_algorithms,c)),null!==this.keyServerPreferences&&(c=f.bin2str(this.keyServerPreferences),b+=e(a.key_server_preferences,c)),null!==this.preferredKeyServer&&(b+=e(a.preferred_key_server,this.preferredKeyServer)),null!==this.isPrimaryUserID&&(b+=e(a.primary_user_id,String.fromCharCode(this.isPrimaryUserID?1:0))),null!==this.policyURI&&(b+=e(a.policy_uri,this.policyURI)),null!==this.keyFlags&&(c=f.bin2str(this.keyFlags),b+=e(a.key_flags,c)),null!==this.signersUserId&&(b+=e(a.signers_user_id,this.signersUserId)),null!==this.reasonForRevocationFlag&&(c=String.fromCharCode(this.reasonForRevocationFlag),c+=this.reasonForRevocationString,b+=e(a.reason_for_revocation,c)),null!==this.features&&(c=f.bin2str(this.features),b+=e(a.features,c)),null!==this.signatureTargetPublicKeyAlgorithm&&(c=String.fromCharCode(this.signatureTargetPublicKeyAlgorithm),c+=String.fromCharCode(this.signatureTargetHashAlgorithm),c+=this.signatureTargetHash,b+=e(a.signature_target,c)),null!==this.embeddedSignature&&(b+=e(a.embedded_signature,this.embeddedSignature.write())),b=f.writeNumber(b.length,2)+b},d.prototype.read_sub_packet=function(a){function b(a,b){this[a]=[];for(var c=0;c0&&4>d?k=1:17==d&&(k=2);for(var l=[],m=0,n=0;k>n;n++)l[n]=new j,m+=l[n].read(this.signature.substr(m));return this.verified=i.signature.verify(d,e,l,a.mpi,f+this.signatureData+g),this.verified},d.prototype.isExpired=function(){return this.signatureNeverExpires?!1:Date.now()>this.created.getTime()+1e3*this.signatureExpirationTime},d.prototype.postCloneTypeFix=function(){this.issuerKeyId=k.fromClone(this.issuerKeyId)}},{"../crypto":32,"../enums.js":43,"../type/keyid.js":73,"../type/mpi.js":74,"../util.js":76,"./packet.js":59}],67:[function(a,b,c){function d(){this.tag=f.packet.symEncryptedIntegrityProtected,this.encrypted=null,this.modification=!1,this.packets=null}b.exports=d;var e=(a("../util.js"),a("../crypto")),f=a("../enums.js");d.prototype.read=function(a){var b=a.charCodeAt(0);if(1!=b)throw new Error("Invalid packet version.");this.encrypted=a.substr(1)},d.prototype.write=function(){return String.fromCharCode(1)+this.encrypted},d.prototype.encrypt=function(a,b){var c=this.packets.write(),d=e.getPrefixRandom(a),f=d+d.charAt(d.length-2)+d.charAt(d.length-1),g=c;g+=String.fromCharCode(211),g+=String.fromCharCode(20),g+=e.hash.sha1(f+g),this.encrypted=e.cfb.encrypt(d,a,g,b,!1),f.length+g.length!=this.encrypted.length&&(this.encrypted=this.encrypted.substring(0,f.length+g.length))},d.prototype.decrypt=function(a,b){var c=e.cfb.decrypt(a,b,this.encrypted,!1),d=c.slice(c.length-20,c.length).join("");if(c.splice(c.length-20),this.hash=e.hash.sha1(e.cfb.mdc(a,b,this.encrypted)+c.join("")),this.hash!=d)throw new Error("Modification detected.");c.splice(c.length-2),this.packets.read(c.join(""))}},{"../crypto":32,"../enums.js":43,"../util.js":76}],68:[function(a,b,c){function d(){this.tag=f.packet.symEncryptedSessionKey,this.version=4,this.sessionKeyEncryptionAlgorithm=null,this.sessionKeyAlgorithm="aes256",this.encrypted=null,this.s2k=new e}var e=a("../type/s2k.js"),f=a("../enums.js"),g=a("../crypto");b.exports=d,d.prototype.read=function(a){this.version=a.charCodeAt(0);var b=f.read(f.symmetric,a.charCodeAt(1)),c=this.s2k.read(a.substr(2)),d=c+2;d>4)+a},d.prototype.read=function(a){var b=0;switch(this.type=e.read(e.s2k,a.charCodeAt(b++)),this.algorithm=e.read(e.hash,a.charCodeAt(b++)),this.type){case"simple":break;case"salted":this.salt=a.substr(b,8),b+=8;break;case"iterated":this.salt=a.substr(b,8),b+=8,this.c=a.charCodeAt(b++);break;case"gnu":if("GNU"!=a.substr(b,3))throw new Error("Unknown s2k type.");b+=3;var c=1e3+a.charCodeAt(b++);if(1001!=c)throw new Error("Unknown s2k gnu protection mode.");this.type=c;break;default:throw new Error("Unknown s2k type.")}return b},d.prototype.write=function(){var a=String.fromCharCode(e.write(e.s2k,this.type));switch(a+=String.fromCharCode(e.write(e.hash,this.algorithm)),this.type){case"simple":break;case"salted":a+=this.salt;break;case"iterated":a+=this.salt,a+=String.fromCharCode(this.c);break;case"gnu":throw new Error("GNU s2k type not supported.");default:throw new Error("Unknown s2k type.")}return a},d.prototype.produce_key=function(a,b){function c(b,c){var d=e.write(e.hash,c.algorithm);switch(c.type){case"simple":return g.hash.digest(d,b+a);case"salted":return g.hash.digest(d,b+c.salt+a);case"iterated":for(var f=[],h=c.get_count(),i=c.salt+a;f.length*i.lengthh&&(f=f.substr(0,h)),g.hash.digest(d,b+f);case"gnu":throw new Error("GNU s2k type not supported.");default:throw new Error("Unknown s2k type.")}}a=f.encode_utf8(a);for(var d="",h="";d.length<=b;)d+=c(h,this),h+=String.fromCharCode(0);return d.substr(0,b)},b.exports.fromClone=function(a){var b=new d;return this.algorithm=a.algorithm,this.type=a.type,this.c=a.c,this.salt=a.salt,b}},{"../crypto":32,"../enums.js":43,"../util.js":76}],76:[function(a,b,c){"use strict";var d=a("./config");b.exports={readNumber:function(a){for(var b=0,c=0;cd;d++)c+=String.fromCharCode(a>>8*(b-d-1)&255);return c},readDate:function(a){var b=this.readNumber(a),c=new Date;return c.setTime(1e3*b),c},writeDate:function(a){var b=Math.round(a.getTime()/1e3);return this.writeNumber(b,4)},emailRegEx:/^[+a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,6}$/,hexdump:function(a){for(var b,c=[],d=a.length,e=0,f=0;d>e;){for(b=a.charCodeAt(e++).toString(16);b.length<2;)b="0"+b;c.push(" "+b),f++,f%32===0&&c.push("\n ")}return c.join("")},hexstrdump:function(a){if(null===a)return"";for(var b,c=[],d=a.length,e=0;d>e;){for(b=a.charCodeAt(e++).toString(16);b.length<2;)b="0"+b;c.push(""+b)}return c.join("")},hex2bin:function(a){for(var b="",c=0;ce;){for(b=a[e++].toString(16);b.length<2;)b="0"+b;c.push(""+b)}return c.join("")},encode_utf8:function(a){return unescape(encodeURIComponent(a))},decode_utf8:function(a){if("string"!=typeof a)throw new Error('Parameter "utf8" is not of type string');try{return decodeURIComponent(escape(a))}catch(b){return a}},bin2str:function(a){for(var b=[],c=0;c=0;d--)c[d]>>=b%8,d>0&&(c[d]|=c[d-1]<<8-b%8&255);return util.bin2str(c)},get_hashAlgorithmString:function(a){switch(a){case 1:return"MD5";case 2:return"SHA1";case 3:return"RIPEMD160";case 8:return"SHA256";case 9:return"SHA384";case 10:return"SHA512";case 11:return"SHA224"}return"unknown"},getWebCrypto:function(){if(d.useWebCrypto!==!1&&"undefined"!=typeof window){if(window.crypto)return window.crypto.subtle||window.crypto.webkitSubtle;if(window.msCrypto)return window.msCrypto.subtle}}}},{"./config":17}],77:[function(a,b,c){"use strict";function d(a,b){b&&b.worker?this.worker=b.worker:this.worker=new Worker(a||"openpgp.worker.js"),this.worker.onmessage=this.onMessage.bind(this),this.worker.onerror=function(a){throw new Error("Unhandled error in openpgp worker: "+a.message+" ("+a.filename+":"+a.lineno+")")},this.seedRandom(i),this.tasks=[],b&&b.config&&this.worker.postMessage({event:"configure",config:b.config})}var e=a("../crypto"),f=a("../packet"),g=a("../key.js"),h=a("../type/keyid.js"),i=5e4,j=2e4;d.prototype.execute=function(a){var b=this,c=new Promise(function(c,d){a(),b.tasks.push({resolve:c,reject:d})});return c},d.prototype.onMessage=function(a){var b=a.data;switch(b.event){case"method-return":b.err?this.tasks.shift().reject(new Error(b.err)):this.tasks.shift().resolve(b.data);break;case"request-seed":this.seedRandom(j);break;default:throw new Error("Unknown Worker Event.")}},d.prototype.seedRandom=function(a){var b=this.getRandomBuffer(a);this.worker.postMessage({event:"seed-random",buf:b})},d.prototype.getRandomBuffer=function(a){if(!a)return null;var b=new Uint8Array(a);return e.random.getRandomValues(b),b},d.prototype.terminate=function(){this.worker.terminate()},d.prototype.encryptMessage=function(a,b,c,d){var e=this;return e.execute(function(){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),e.worker.postMessage({event:"encrypt-message",keys:a,text:b,format:c,filename:d})})},d.prototype.signAndEncryptMessage=function(a,b,c,d,e){var f=this;return f.execute(function(){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),b=b.toPacketlist(),f.worker.postMessage({event:"sign-and-encrypt-message",publicKeys:a,privateKey:b,text:c,format:d,filename:e})})},d.prototype.decryptMessage=function(a,b,c){var d=this;return d.execute(function(){a=a.toPacketlist(),d.worker.postMessage({event:"decrypt-message",privateKey:a,message:b,format:c})})},d.prototype.decryptAndVerifyMessage=function(a,b,c,d){var e=this,f=new Promise(function(f,g){a=a.toPacketlist(),b.length||(b=[b]),b=b.map(function(a){return a.toPacketlist()}),e.worker.postMessage({event:"decrypt-and-verify-message",privateKey:a,publicKeys:b,message:c,format:d}),e.tasks.push({resolve:function(a){a.signatures=a.signatures.map(function(a){return a.keyid=h.fromClone(a.keyid),a}),f(a)},reject:g})});return f},d.prototype.signClearMessage=function(a,b){var c=this;return c.execute(function(){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),c.worker.postMessage({event:"sign-clear-message",privateKeys:a,text:b})})},d.prototype.verifyClearSignedMessage=function(a,b){var c=this,d=new Promise(function(d,e){a.length||(a=[a]),a=a.map(function(a){return a.toPacketlist()}),c.worker.postMessage({event:"verify-clear-signed-message",publicKeys:a,message:b}),c.tasks.push({resolve:function(a){a.signatures=a.signatures.map(function(a){return a.keyid=h.fromClone(a.keyid),a}),d(a)},reject:e})});return d},d.prototype.generateKeyPair=function(a){var b=this,c=new Promise(function(c,d){b.worker.postMessage({event:"generate-key-pair",options:a}),b.tasks.push({resolve:function(a){var b=f.List.fromStructuredClone(a.key);a.key=new g.Key(b),c(a)},reject:d})});return c},d.prototype.decryptKey=function(a,b){var c=this,d=new Promise(function(d,e){a=a.toPacketlist(),c.worker.postMessage({event:"decrypt-key",privateKey:a,password:b}),c.tasks.push({resolve:function(a){var b=f.List.fromStructuredClone(a),a=new g.Key(b);d(a)},reject:e})});return d},d.prototype.decryptKeyPacket=function(a,b,c){var d=this,e=new Promise(function(e,h){a=a.toPacketlist(),d.worker.postMessage({event:"decrypt-key-packet",privateKey:a,keyIds:b,password:c}),d.tasks.push({resolve:function(a){var b=f.List.fromStructuredClone(a),a=new g.Key(b);e(a)},reject:h})});return e},b.exports=d},{"../crypto":32,"../key.js":47,"../packet":55,"../type/keyid.js":73}]},{},[46])(46)}); \ No newline at end of file diff --git a/plugins/managesieve/codemirror/addon/selection/active-line.js b/plugins/managesieve/codemirror/addon/selection/active-line.js deleted file mode 100644 index b0b3f61af20..00000000000 --- a/plugins/managesieve/codemirror/addon/selection/active-line.js +++ /dev/null @@ -1,74 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Because sometimes you need to style the cursor's line. -// -// Adds an option 'styleActiveLine' which, when enabled, gives the -// active line's wrapping
the CSS class "CodeMirror-activeline", -// and gives its background
the class "CodeMirror-activeline-background". - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - var WRAP_CLASS = "CodeMirror-activeline"; - var BACK_CLASS = "CodeMirror-activeline-background"; - var GUTT_CLASS = "CodeMirror-activeline-gutter"; - - CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { - var prev = old && old != CodeMirror.Init; - if (val && !prev) { - cm.state.activeLines = []; - updateActiveLines(cm, cm.listSelections()); - cm.on("beforeSelectionChange", selectionChange); - } else if (!val && prev) { - cm.off("beforeSelectionChange", selectionChange); - clearActiveLines(cm); - delete cm.state.activeLines; - } - }); - - function clearActiveLines(cm) { - for (var i = 0; i < cm.state.activeLines.length; i++) { - cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); - cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); - cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS); - } - } - - function sameArray(a, b) { - if (a.length != b.length) return false; - for (var i = 0; i < a.length; i++) - if (a[i] != b[i]) return false; - return true; - } - - function updateActiveLines(cm, ranges) { - var active = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (!range.empty()) continue; - var line = cm.getLineHandleVisualStart(range.head.line); - if (active[active.length - 1] != line) active.push(line); - } - if (sameArray(cm.state.activeLines, active)) return; - cm.operation(function() { - clearActiveLines(cm); - for (var i = 0; i < active.length; i++) { - cm.addLineClass(active[i], "wrap", WRAP_CLASS); - cm.addLineClass(active[i], "background", BACK_CLASS); - cm.addLineClass(active[i], "gutter", GUTT_CLASS); - } - cm.state.activeLines = active; - }); - } - - function selectionChange(cm, sel) { - updateActiveLines(cm, sel.ranges); - } -}); diff --git a/plugins/managesieve/codemirror/lib/codemirror.css b/plugins/managesieve/codemirror/lib/codemirror.css deleted file mode 100644 index d7821d17dfe..00000000000 --- a/plugins/managesieve/codemirror/lib/codemirror.css +++ /dev/null @@ -1,341 +0,0 @@ -/* BASICS */ - -.CodeMirror { - /* Set height, width, borders, and global font properties here */ - font-family: monospace; - height: 300px; - color: black; -} - -/* PADDING */ - -.CodeMirror-lines { - padding: 4px 0; /* Vertical padding around content */ -} -.CodeMirror pre { - padding: 0 4px; /* Horizontal padding of content */ -} - -.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - background-color: white; /* The little square between H and V scrollbars */ -} - -/* GUTTER */ - -.CodeMirror-gutters { - border-right: 1px solid #ddd; - background-color: #f7f7f7; - white-space: nowrap; -} -.CodeMirror-linenumbers {} -.CodeMirror-linenumber { - padding: 0 3px 0 5px; - min-width: 20px; - text-align: right; - color: #999; - white-space: nowrap; -} - -.CodeMirror-guttermarker { color: black; } -.CodeMirror-guttermarker-subtle { color: #999; } - -/* CURSOR */ - -.CodeMirror-cursor { - border-left: 1px solid black; - border-right: none; - width: 0; -} -/* Shown when moving in bi-directional text */ -.CodeMirror div.CodeMirror-secondarycursor { - border-left: 1px solid silver; -} -.cm-fat-cursor .CodeMirror-cursor { - width: auto; - border: 0 !important; - background: #7e7; -} -.cm-fat-cursor div.CodeMirror-cursors { - z-index: 1; -} - -.cm-animate-fat-cursor { - width: auto; - border: 0; - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; - background-color: #7e7; -} -@-moz-keyframes blink { - 0% {} - 50% { background-color: transparent; } - 100% {} -} -@-webkit-keyframes blink { - 0% {} - 50% { background-color: transparent; } - 100% {} -} -@keyframes blink { - 0% {} - 50% { background-color: transparent; } - 100% {} -} - -/* Can style cursor different in overwrite (non-insert) mode */ -.CodeMirror-overwrite .CodeMirror-cursor {} - -.cm-tab { display: inline-block; text-decoration: inherit; } - -.CodeMirror-rulers { - position: absolute; - left: 0; right: 0; top: -50px; bottom: -20px; - overflow: hidden; -} -.CodeMirror-ruler { - border-left: 1px solid #ccc; - top: 0; bottom: 0; - position: absolute; -} - -/* DEFAULT THEME */ - -.cm-s-default .cm-header {color: blue;} -.cm-s-default .cm-quote {color: #090;} -.cm-negative {color: #d44;} -.cm-positive {color: #292;} -.cm-header, .cm-strong {font-weight: bold;} -.cm-em {font-style: italic;} -.cm-link {text-decoration: underline;} -.cm-strikethrough {text-decoration: line-through;} - -.cm-s-default .cm-keyword {color: #708;} -.cm-s-default .cm-atom {color: #219;} -.cm-s-default .cm-number {color: #164;} -.cm-s-default .cm-def {color: #00f;} -.cm-s-default .cm-variable, -.cm-s-default .cm-punctuation, -.cm-s-default .cm-property, -.cm-s-default .cm-operator {} -.cm-s-default .cm-variable-2 {color: #05a;} -.cm-s-default .cm-variable-3 {color: #085;} -.cm-s-default .cm-comment {color: #a50;} -.cm-s-default .cm-string {color: #a11;} -.cm-s-default .cm-string-2 {color: #f50;} -.cm-s-default .cm-meta {color: #555;} -.cm-s-default .cm-qualifier {color: #555;} -.cm-s-default .cm-builtin {color: #30a;} -.cm-s-default .cm-bracket {color: #997;} -.cm-s-default .cm-tag {color: #170;} -.cm-s-default .cm-attribute {color: #00c;} -.cm-s-default .cm-hr {color: #999;} -.cm-s-default .cm-link {color: #00c;} - -.cm-s-default .cm-error {color: #f00;} -.cm-invalidchar {color: #f00;} - -.CodeMirror-composing { border-bottom: 2px solid; } - -/* Default styles for common addons */ - -div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} -div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} -.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } -.CodeMirror-activeline-background {background: #e8f2ff;} - -/* STOP */ - -/* The rest of this file contains styles related to the mechanics of - the editor. You probably shouldn't touch them. */ - -.CodeMirror { - position: relative; - overflow: hidden; - background: white; -} - -.CodeMirror-scroll { - overflow: scroll !important; /* Things will break if this is overridden */ - /* 30px is the magic margin used to hide the element's real scrollbars */ - /* See overflow: hidden in .CodeMirror */ - margin-bottom: -30px; margin-right: -30px; - padding-bottom: 30px; - height: 100%; - outline: none; /* Prevent dragging from highlighting the element */ - position: relative; -} -.CodeMirror-sizer { - position: relative; - border-right: 30px solid transparent; -} - -/* The fake, visible scrollbars. Used to force redraw during scrolling - before actual scrolling happens, thus preventing shaking and - flickering artifacts. */ -.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - position: absolute; - z-index: 6; - display: none; -} -.CodeMirror-vscrollbar { - right: 0; top: 0; - overflow-x: hidden; - overflow-y: scroll; -} -.CodeMirror-hscrollbar { - bottom: 0; left: 0; - overflow-y: hidden; - overflow-x: scroll; -} -.CodeMirror-scrollbar-filler { - right: 0; bottom: 0; -} -.CodeMirror-gutter-filler { - left: 0; bottom: 0; -} - -.CodeMirror-gutters { - position: absolute; left: 0; top: 0; - min-height: 100%; - z-index: 3; -} -.CodeMirror-gutter { - white-space: normal; - height: 100%; - display: inline-block; - vertical-align: top; - margin-bottom: -30px; -} -.CodeMirror-gutter-wrapper { - position: absolute; - z-index: 4; - background: none !important; - border: none !important; -} -.CodeMirror-gutter-background { - position: absolute; - top: 0; bottom: 0; - z-index: 4; -} -.CodeMirror-gutter-elt { - position: absolute; - cursor: default; - z-index: 4; -} -.CodeMirror-gutter-wrapper { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.CodeMirror-lines { - cursor: text; - min-height: 1px; /* prevents collapsing before first draw */ -} -.CodeMirror pre { - /* Reset some styles that the rest of the page might have set */ - -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; - border-width: 0; - background: transparent; - font-family: inherit; - font-size: inherit; - margin: 0; - white-space: pre; - word-wrap: normal; - line-height: inherit; - color: inherit; - z-index: 2; - position: relative; - overflow: visible; - -webkit-tap-highlight-color: transparent; - -webkit-font-variant-ligatures: none; - font-variant-ligatures: none; -} -.CodeMirror-wrap pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: normal; -} - -.CodeMirror-linebackground { - position: absolute; - left: 0; right: 0; top: 0; bottom: 0; - z-index: 0; -} - -.CodeMirror-linewidget { - position: relative; - z-index: 2; - overflow: auto; -} - -.CodeMirror-widget {} - -.CodeMirror-code { - outline: none; -} - -/* Force content-box sizing for the elements where we expect it */ -.CodeMirror-scroll, -.CodeMirror-sizer, -.CodeMirror-gutter, -.CodeMirror-gutters, -.CodeMirror-linenumber { - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -.CodeMirror-measure { - position: absolute; - width: 100%; - height: 0; - overflow: hidden; - visibility: hidden; -} - -.CodeMirror-cursor { - position: absolute; - pointer-events: none; -} -.CodeMirror-measure pre { position: static; } - -div.CodeMirror-cursors { - visibility: hidden; - position: relative; - z-index: 3; -} -div.CodeMirror-dragcursors { - visibility: visible; -} - -.CodeMirror-focused div.CodeMirror-cursors { - visibility: visible; -} - -.CodeMirror-selected { background: #d9d9d9; } -.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } -.CodeMirror-crosshair { cursor: crosshair; } -.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } -.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } - -.cm-searching { - background: #ffa; - background: rgba(255, 255, 0, .4); -} - -/* Used to force a border model for a node */ -.cm-force-border { padding-right: .1px; } - -@media print { - /* Hide the cursor when printing */ - .CodeMirror div.CodeMirror-cursors { - visibility: hidden; - } -} - -/* See issue #2901 */ -.cm-tab-wrap-hack:after { content: ''; } - -/* Help users use markselection to safely style text background */ -span.CodeMirror-selectedtext { background: none; } diff --git a/plugins/managesieve/codemirror/lib/codemirror.js b/plugins/managesieve/codemirror/lib/codemirror.js deleted file mode 100644 index 333a7e55304..00000000000 --- a/plugins/managesieve/codemirror/lib/codemirror.js +++ /dev/null @@ -1,9096 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// This is CodeMirror (http://codemirror.net), a code editor -// implemented in JavaScript on top of the browser's DOM. -// -// You can find some technical background for some of the code below -// at http://marijnhaverbeke.nl/blog/#cm-internals . - -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global.CodeMirror = factory()); -}(this, (function () { 'use strict'; - -// Kludges for bugs and behavior differences that can't be feature -// detected are enabled based on userAgent etc sniffing. -var userAgent = navigator.userAgent -var platform = navigator.platform - -var gecko = /gecko\/\d/i.test(userAgent) -var ie_upto10 = /MSIE \d/.test(userAgent) -var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent) -var ie = ie_upto10 || ie_11up -var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]) -var webkit = /WebKit\//.test(userAgent) -var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent) -var chrome = /Chrome\//.test(userAgent) -var presto = /Opera\//.test(userAgent) -var safari = /Apple Computer/.test(navigator.vendor) -var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent) -var phantom = /PhantomJS/.test(userAgent) - -var ios = /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent) -// This is woefully incomplete. Suggestions for alternative methods welcome. -var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent) -var mac = ios || /Mac/.test(platform) -var chromeOS = /\bCrOS\b/.test(userAgent) -var windows = /win/i.test(platform) - -var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/) -if (presto_version) { presto_version = Number(presto_version[1]) } -if (presto_version && presto_version >= 15) { presto = false; webkit = true } -// Some browsers use the wrong event properties to signal cmd/ctrl on OS X -var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)) -var captureRightClick = gecko || (ie && ie_version >= 9) - -function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } - -var rmClass = function(node, cls) { - var current = node.className - var match = classTest(cls).exec(current) - if (match) { - var after = current.slice(match.index + match[0].length) - node.className = current.slice(0, match.index) + (after ? match[1] + after : "") - } -} - -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 elt(tag, content, className, style) { - var e = document.createElement(tag) - if (className) { e.className = className } - if (style) { e.style.cssText = style } - if (typeof content == "string") { e.appendChild(document.createTextNode(content)) } - else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]) } } - return e -} - -var range -if (document.createRange) { range = function(node, start, end, endNode) { - var r = document.createRange() - r.setEnd(endNode || node, end) - r.setStart(node, start) - return r -} } -else { range = function(node, start, end) { - var r = document.body.createTextRange() - try { r.moveToElementText(node.parentNode) } - catch(e) { return r } - r.collapse(true) - r.moveEnd("character", end) - r.moveStart("character", start) - return r -} } - -function contains(parent, child) { - if (child.nodeType == 3) // Android browser always returns false when child is a textnode - { child = child.parentNode } - if (parent.contains) - { return parent.contains(child) } - do { - if (child.nodeType == 11) { child = child.host } - if (child == parent) { return true } - } while (child = child.parentNode) -} - -var activeElt = function() { - var activeElement = document.activeElement - while (activeElement && activeElement.root && activeElement.root.activeElement) - { activeElement = activeElement.root.activeElement } - return activeElement -} -// Older versions of IE throws unspecified error when touching -// document.activeElement in some cases (during loading, in iframe) -if (ie && ie_version < 11) { activeElt = function() { - try { return document.activeElement } - catch(e) { return document.body } -} } - -function addClass(node, cls) { - var current = node.className - if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls } -} -function joinClasses(a, b) { - var as = a.split(" ") - for (var i = 0; i < as.length; i++) - { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i] } } - return b -} - -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 bind(f) { - var args = Array.prototype.slice.call(arguments, 1) - return function(){return f.apply(null, args)} -} - -function copyObj(obj, target, overwrite) { - if (!target) { target = {} } - for (var prop in obj) - { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) - { target[prop] = obj[prop] } } - return target -} - -// Counts the column offset in a string, taking tabs into account. -// Used mostly to find indentation. -function countColumn(string, end, tabSize, startIndex, startValue) { - if (end == null) { - end = string.search(/[^\s\u00a0]/) - if (end == -1) { end = string.length } - } - for (var i = startIndex || 0, n = startValue || 0;;) { - var nextTab = string.indexOf("\t", i) - if (nextTab < 0 || nextTab >= end) - { return n + (end - i) } - n += nextTab - i - n += tabSize - (n % tabSize) - i = nextTab + 1 - } -} - -function Delayed() {this.id = null} -Delayed.prototype.set = function(ms, f) { - clearTimeout(this.id) - this.id = setTimeout(f, ms) -} - -function indexOf(array, elt) { - for (var i = 0; i < array.length; ++i) - { if (array[i] == elt) { return i } } - return -1 -} - -// Number of pixels added to scroller and sizer to hide scrollbar -var scrollerGap = 30 - -// Returned or thrown by various protocols to signal 'I'm not -// handling this'. -var Pass = {toString: function(){return "CodeMirror.Pass"}} - -// Reused option objects for setSelection & friends -var sel_dontScroll = {scroll: false}; -var sel_mouse = {origin: "*mouse"}; -var sel_move = {origin: "+move"} - -// 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] } - -function map(array, f) { - var out = [] - for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i) } - return out -} - -function insertSorted(array, value, score) { - var pos = 0, priority = score(value) - while (pos < array.length && score(array[pos]) <= priority) { pos++ } - array.splice(pos, 0, value) -} - -function nothing() {} - -function createObj(base, props) { - var inst - if (Object.create) { - inst = Object.create(base) - } else { - nothing.prototype = base - inst = new nothing() - } - if (props) { copyObj(props, inst) } - return inst -} - -var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/ -function isWordCharBasic(ch) { - return /\w/.test(ch) || ch > "\x80" && - (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) -} -function isWordChar(ch, helper) { - if (!helper) { return isWordCharBasic(ch) } - if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } - return helper.test(ch) -} - -function isEmpty(obj) { - for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } - return true -} - -// Extending unicode characters. A series of a non-extending char + -// any number of extending chars is treated as a single unit as far -// as editing and measuring is concerned. This is not fully correct, -// since some scripts/fonts/browsers also treat other configurations -// of code points as a group. -var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/ -function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } - -// The display handles the DOM integration, both for input reading -// and content drawing. It holds references to DOM nodes and -// display-related state. - -function Display(place, doc, input) { - var d = this - this.input = input - - // Covers bottom-right square when both scrollbars are present. - d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler") - d.scrollbarFiller.setAttribute("cm-not-content", "true") - // Covers bottom of gutter when coverGutterNextToScrollbar is on - // and h scrollbar is present. - d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler") - d.gutterFiller.setAttribute("cm-not-content", "true") - // Will contain the actual code, positioned to cover the viewport. - d.lineDiv = elt("div", null, "CodeMirror-code") - // Elements are added to these to represent selection and cursors. - d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1") - d.cursorDiv = elt("div", null, "CodeMirror-cursors") - // A visibility: hidden element used to find the size of things. - d.measure = elt("div", null, "CodeMirror-measure") - // When lines outside of the viewport are measured, they are drawn in this. - d.lineMeasure = elt("div", null, "CodeMirror-measure") - // Wraps everything that needs to exist inside the vertically-padded coordinate system - d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], - null, "position: relative; outline: none") - // Moved around its parent to cover visible view. - d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative") - // Set to the height of the document, allowing scrolling. - d.sizer = elt("div", [d.mover], "CodeMirror-sizer") - d.sizerWidth = null - // Behavior of elts with overflow: auto and padding is - // inconsistent across browsers. This is used to ensure the - // scrollable area is big enough. - d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;") - // Will contain the gutters, if any. - d.gutters = elt("div", null, "CodeMirror-gutters") - d.lineGutter = null - // Actual scrollable element. - d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll") - d.scroller.setAttribute("tabIndex", "-1") - // The element in which the editor lives. - d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror") - - // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) - if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0 } - if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true } - - if (place) { - if (place.appendChild) { place.appendChild(d.wrapper) } - else { place(d.wrapper) } - } - - // Current rendered range (may be bigger than the view window). - d.viewFrom = d.viewTo = doc.first - d.reportedViewFrom = d.reportedViewTo = doc.first - // Information about the rendered lines. - d.view = [] - d.renderedView = null - // Holds info about a single rendered line when it was rendered - // for measurement, while not in view. - d.externalMeasured = null - // Empty space (in pixels) above the view - d.viewOffset = 0 - d.lastWrapHeight = d.lastWrapWidth = 0 - d.updateLineNumbers = null - - d.nativeBarWidth = d.barHeight = d.barWidth = 0 - d.scrollbarsClipped = false - - // Used to only resize the line number gutter when necessary (when - // the amount of lines crosses a boundary that makes its width change) - d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null - // Set to true when a non-horizontal-scrolling line widget is - // added. As an optimization, line widget aligning is skipped when - // this is false. - d.alignWidgets = false - - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null - - // Tracks the maximum line length so that the horizontal scrollbar - // can be kept static when scrolling. - d.maxLine = null - d.maxLineLength = 0 - d.maxLineChanged = false - - // Used for measuring wheel scrolling granularity - d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null - - // True when shift is held down. - d.shift = false - - // Used to track whether anything happened since the context menu - // was opened. - d.selForContextMenu = null - - d.activeTouch = null - - input.init(d) -} - -// 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.") } - var chunk = doc - while (!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) }) // iter aborts when callback returns truthy value - 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$1 = 0; i$1 < chunk.children.length; ++i$1) { - var child = chunk.children[i$1], ch = child.height - if (h < ch) { chunk = child; continue outer } - h -= ch - n += child.chunkSize() - } - return n - } while (!chunk.lines) - var i = 0 - for (; i < chunk.lines.length; ++i) { - var line = chunk.lines[i], lh = line.height - if (h < lh) { break } - h -= lh - } - return n + i -} - -function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} - -function lineNumberFor(options, i) { - return String(options.lineNumberFormatter(i + options.firstLineNumber)) -} - -// A Pos instance represents a position within the text. -function Pos (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. -function cmp(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 } - -// 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 clipPosArray(doc, array) { - var out = [] - for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]) } - return out -} - -// Optimize some code when these features are not used. -var sawReadOnlySpans = false; -var sawCollapsedSpans = false - -function seeReadOnlySpans() { - sawReadOnlySpans = true -} - -function seeCollapsedSpans() { - sawCollapsedSpans = true -} - -// 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) { - var r - for (var 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) { - var nw - if (old) { for (var i = 0; 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) { - var nw - if (old) { for (var i = 0; i < old.length; ++i) { - var span = old[i], marker = span.marker - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh) - if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, - span.to == null ? null : span.to - endCh)) - } - } } - return nw -} - -// Given a change object, compute the new set of marker spans that -// cover the line in which the change took place. Removes spans -// entirely within the change, reconnects spans belonging to the -// same marker that appear on both sides of the change, and cuts off -// spans partially within the change. Returns an array of span -// arrays with one element for each line in (after) the change. -function stretchSpansOverChange(doc, change) { - if (change.full) { return null } - var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans - var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans - if (!oldFirst && !oldLast) { return null } - - var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0 - // Get the spans that 'stick out' on both sides - var first = markedSpansBefore(oldFirst, startCh, isInsert) - var last = markedSpansAfter(oldLast, endCh, isInsert) - - // Next, merge those two ends - var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0) - if (first) { - // Fix up .to properties of first - for (var i = 0; i < first.length; ++i) { - var span = first[i] - if (span.to == null) { - var found = getMarkedSpanFor(last, span.marker) - if (!found) { span.to = startCh } - else if (sameLine) { span.to = found.to == null ? null : found.to + offset } - } - } - } - if (last) { - // Fix up .from in last (or move them into first in case of sameLine) - for (var i$1 = 0; i$1 < last.length; ++i$1) { - var span$1 = last[i$1] - if (span$1.to != null) { span$1.to += offset } - if (span$1.from == null) { - var found$1 = getMarkedSpanFor(first, span$1.marker) - if (!found$1) { - span$1.from = offset - if (sameLine) { (first || (first = [])).push(span$1) } - } - } else { - span$1.from += offset - if (sameLine) { (first || (first = [])).push(span$1) } - } - } - } - // 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$2 = 0; i$2 < first.length; ++i$2) - { if (first[i$2].to == null) - { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)) } } } - for (var i$3 = 0; i$3 < gap; ++i$3) - { 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 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 = void 0, 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$$1, from, to, marker) { - var line = getLine(doc, lineNo$$1) - 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 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || - fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 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 = void 0, 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 = void 0, 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 } - } -} - -// 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$1 = 0; i$1 < p.children.length; ++i$1) { - var cur = p.children[i$1] - if (cur == chunk) { break } - else { h += cur.height } - } - } - return h -} - -// 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$1 = merged.find(0, true) - len -= cur.text.length - found$1.from.ch - cur = found$1.to.line - len += cur.text.length - found$1.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 - } - }) -} - -// 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 compareBidiLevel(order, a, b) { - var linedir = order[0].level - if (a == linedir) { return true } - if (b == linedir) { return false } - return a < b -} - -var bidiOther = null -function getBidiPartAt(order, pos) { - var found - bidiOther = null - for (var i = 0; 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; i < len; ++i) - { types.push(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$1 = 0, prev = outerType; i$1 < len; ++i$1) { - var type = types[i$1] - if (type == "m") { types[i$1] = 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$2 = 0, cur = outerType; i$2 < len; ++i$2) { - var type$1 = types[i$2] - if (type$1 == "1" && cur == "r") { types[i$2] = "n" } - else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "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$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { - var type$2 = types[i$3] - if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1" } - else if (type$2 == "," && prev$1 == types[i$3+1] && - (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1 } - prev$1 = type$2 - } - - // 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$4 = 0; i$4 < len; ++i$4) { - var type$3 = types[i$4] - if (type$3 == ",") { types[i$4] = "N" } - else if (type$3 == "%") { - var end = void 0 - for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} - var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N" - for (var j = i$4; j < end; ++j) { types[j] = replace } - i$4 = 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$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { - var type$4 = types[i$5] - if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L" } - else if (isStrong.test(type$4)) { cur$1 = type$4 } - } - - // 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$6 = 0; i$6 < len; ++i$6) { - if (isNeutral.test(types[i$6])) { - var end$1 = void 0 - for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} - var before = (i$6 ? types[i$6-1] : outerType) == "L" - var after = (end$1 < len ? types[end$1] : outerType) == "L" - var replace$1 = before || after ? "L" : "R" - for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1 } - i$6 = end$1 - 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$7 = 0; i$7 < len;) { - if (countsAsLeft.test(types[i$7])) { - var start = i$7 - for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} - order.push(new BidiSpan(0, start, i$7)) - } else { - var pos = i$7, at = order.length - for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} - for (var j$2 = pos; j$2 < i$7;) { - if (countsAsNum.test(types[j$2])) { - if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)) } - var nstart = j$2 - for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} - order.splice(at, 0, new BidiSpan(2, nstart, j$2)) - pos = j$2 - } else { ++j$2 } - } - if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)) } - } - } - if (order[0].level == 1 && (m = str.match(/^\s+/))) { - order[0].from = m[0].length - order.unshift(new BidiSpan(0, 0, m[0].length)) - } - if (lst(order).level == 1 && (m = str.match(/\s+$/))) { - lst(order).to -= m[0].length - order.push(new BidiSpan(0, len - m[0].length, len)) - } - if (order[0].level == 2) - { order.unshift(new BidiSpan(1, order[0].to, order[0].to)) } - if (order[0].level != lst(order).level) - { order.push(new BidiSpan(order[0].level, len, len)) } - - return order - } -})() - -// 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 -} - -// EVENT HANDLING - -// Lightweight event framework. on/off also work on DOM nodes, -// registering native DOM handlers. - -var 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$$1 = emitter._handlers || (emitter._handlers = {}) - var arr = map$$1[type] || (map$$1[type] = []) - arr.push(f) - } -} - -var noHandlers = [] -function getHandlers(emitter, type, copy) { - var arr = emitter._handlers && emitter._handlers[type] - if (copy) { return arr && arr.length > 0 ? arr.slice() : noHandlers } - else { return arr || noHandlers } -} - -function off(emitter, type, f) { - if (emitter.removeEventListener) - { emitter.removeEventListener(type, f, false) } - else if (emitter.detachEvent) - { emitter.detachEvent("on" + type, f) } - else { - var handlers = getHandlers(emitter, type, false) - for (var i = 0; i < handlers.length; ++i) - { if (handlers[i] == f) { handlers.splice(i, 1); break } } - } -} - -function signal(emitter, type /*, values...*/) { - var handlers = getHandlers(emitter, type, true) - if (!handlers.length) { return } - var args = Array.prototype.slice.call(arguments, 2) - for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args) } -} - -// The DOM events that CodeMirror handles can be overridden by -// registering a (non-DOM) handler on the editor for the event name, -// and preventDefault-ing the event in that handler. -function signalDOMEvent(cm, e, override) { - if (typeof e == "string") - { e = {type: e, preventDefault: function() { this.defaultPrevented = true }} } - signal(cm, override || e.type, cm, e) - return e_defaultPrevented(e) || e.codemirrorIgnore -} - -function signalCursorActivity(cm) { - var arr = cm._handlers && cm._handlers.cursorActivity - if (!arr) { return } - var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []) - for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) - { set.push(arr[i]) } } -} - -function hasHandler(emitter, type) { - return getHandlers(emitter, type).length > 0 -} - -// Add on and off methods to a constructor's prototype, to make -// registering events on such objects more convenient. -function eventMixin(ctor) { - ctor.prototype.on = function(type, f) {on(this, type, f)} - ctor.prototype.off = function(type, f) {off(this, type, f)} -} - -// Due to the fact that we still support jurassic IE versions, some -// compatibility wrappers are needed. - -function e_preventDefault(e) { - if (e.preventDefault) { e.preventDefault() } - else { e.returnValue = false } -} -function e_stopPropagation(e) { - if (e.stopPropagation) { e.stopPropagation() } - else { e.cancelBubble = true } -} -function e_defaultPrevented(e) { - return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false -} -function e_stop(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 -} - -// Detect drag-and-drop -var dragAndDrop = function() { - // There is *some* kind of drag-and-drop support in IE6-8, but I - // couldn't get it to work yet. - if (ie && ie_version < 9) { return false } - var div = elt('div') - return "draggable" in div || "dragDrop" in div -}() - -var zwspSupported -function zeroWidthElement(measure) { - if (zwspSupported == null) { - var test = elt("span", "\u200b") - removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])) - if (measure.firstChild.offsetHeight != 0) - { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8) } - } - var node = zwspSupported ? elt("span", "\u200b") : - elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px") - node.setAttribute("cm-text", "") - return node -} - -// Feature-detect IE's crummy client rect reporting for bidi text -var badBidiRects -function hasBadBidiRects(measure) { - if (badBidiRects != null) { return badBidiRects } - var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")) - var r0 = range(txt, 0, 1).getBoundingClientRect() - var r1 = range(txt, 1, 2).getBoundingClientRect() - removeChildren(measure) - if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) - return badBidiRects = (r1.right - r0.right < 3) -} - -// See if "".split is the broken IE version, if so, provide an -// alternative way to split lines. -var splitLinesAuto = "\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) { - var range$$1 - try {range$$1 = te.ownerDocument.selection.createRange()} - catch(e) {} - if (!range$$1 || range$$1.parentElement() != te) { return false } - return range$$1.compareEndPoints("StartToEnd", range$$1) != 0 -} - -var hasCopyEvent = (function () { - var e = elt("div") - if ("oncopy" in e) { return true } - e.setAttribute("oncopy", "return;") - return typeof e.oncopy == "function" -})() - -var badZoomedRects = null -function hasBadZoomedRects(measure) { - if (badZoomedRects != null) { return badZoomedRects } - var node = removeChildrenAndAdd(measure, elt("span", "x")) - var normal = node.getBoundingClientRect() - var fromRange = range(node, 0, 1).getBoundingClientRect() - return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 -} - -// Known modes, by name and by MIME -var modes = {}; -var 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.) -function defineMode(name, mode) { - if (arguments.length > 2) - { mode.dependencies = Array.prototype.slice.call(arguments, 2) } - modes[name] = mode -} - -function defineMIME(mime, spec) { - mimeModes[mime] = spec -} - -// Given a MIME type, a {name, ...options} config object, or a name -// string, return a mode config object. -function resolveMode(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 resolveMode("application/xml") - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { - return resolveMode("application/json") - } - 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. -function getMode(options, spec) { - spec = resolveMode(spec) - var mfactory = modes[spec.name] - if (!mfactory) { return 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$1 in spec.modeProps) - { modeObj[prop$1] = spec.modeProps[prop$1] } } - - return modeObj -} - -// This can be used to attach properties to mode objects from -// outside the actual mode definition. -var modeExtensions = {} -function extendMode(mode, properties) { - var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}) - copyObj(properties, exts) -} - -function copyState(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 -} - -// Given a mode and a state (for that mode), find the inner mode and -// state at the position that the state refers to. -function innerMode(mode, state) { - var info - while (mode.innerMode) { - info = mode.innerMode(state) - if (!info || info.mode == mode) { break } - state = info.state - mode = info.mode - } - return info || {mode: mode, state: state} -} - -function startState(mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true -} - -// STRING STREAM - -// Fed to the mode parsers, provides helper functions to make -// parsers more succinct. - -var 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) - var ok - if (typeof match == "string") { ok = ch == match } - else { 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 this$1 = this; - - var start = this.pos - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.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 } - } -} - -// Compute a style array (an array starting with a mode generation -// -- for invalidation -- followed by pairs of end positions and -// style strings), which is used to highlight the tokens on the -// line. -function highlightLine(cm, line, state, forceToEnd) { - // A styles array always starts with a number identifying the - // mode/overlays that it is based on (for easy invalidation). - var st = [cm.state.modeGen], lineClasses = {} - // Compute the base array of styles - runMode(cm, line.text, cm.doc.mode, state, function (end, style) { return st.push(end, style); }, - lineClasses, forceToEnd) - - // Run overlays, adjust style array. - var loop = function ( 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, "overlay " + style) - i = start + 2 - } else { - for (; start < i; start += 2) { - var cur = st[start+1] - st[start+1] = (cur ? cur + " " : "") + "overlay " + style - } - } - }, lineClasses) - }; - - for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); - - return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} -} - -function getLineStyles(cm, line, updateFrontier) { - if (!line.styles || line.styles[0] != cm.state.modeGen) { - var state = getStateBefore(cm, lineNo(line)) - var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state) - line.stateAfter = state - line.styles = result.styles - if (result.classes) { line.styleClasses = result.classes } - else if (line.styleClasses) { line.styleClasses = null } - if (updateFrontier === cm.doc.frontier) { cm.doc.frontier++ } - } - return line.styles -} - -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 -} - -// Lightweight form of highlight -- proceed over this line and -// update state, but don't save a style array. Used for lines that -// aren't currently visible. -function processLine(cm, text, state, startAt) { - var mode = cm.doc.mode - var stream = new StringStream(text, cm.options.tabSize) - stream.start = stream.pos = startAt || 0 - if (text == "") { callBlankLine(mode, state) } - while (!stream.eol()) { - readToken(mode, stream, state) - stream.start = stream.pos - } -} - -function callBlankLine(mode, state) { - if (mode.blankLine) { return mode.blankLine(state) } - if (!mode.innerMode) { return } - var inner = innerMode(mode, state) - if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } -} - -function readToken(mode, stream, state, inner) { - for (var i = 0; i < 10; i++) { - if (inner) { inner[0] = innerMode(mode, state).mode } - var style = mode.token(stream, state) - if (stream.pos > stream.start) { return style } - } - throw new Error("Mode " + mode.name + " failed to advance stream.") -} - -// Utility for getTokenAt and getLineTokens -function takeToken(cm, pos, precise, asArray) { - var getObj = function (copy) { return ({ - start: stream.start, end: stream.pos, - string: stream.current(), - type: style || null, - state: copy ? copyState(doc.mode, state) : state - }); } - - var doc = cm.doc, mode = doc.mode, style - pos = clipPos(doc, pos) - var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise) - var stream = new StringStream(line.text, cm.options.tabSize), tokens - if (asArray) { tokens = [] } - while ((asArray || stream.pos < pos.ch) && !stream.eol()) { - stream.start = stream.pos - style = readToken(mode, stream, state) - if (asArray) { tokens.push(getObj(true)) } - } - return asArray ? tokens : getObj() -} - -function extractLineClasses(type, output) { - if (type) { for (;;) { - var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/) - if (!lineClass) { break } - type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length) - var prop = lineClass[1] ? "bgClass" : "textClass" - if (output[prop] == null) - { output[prop] = lineClass[2] } - else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) - { output[prop] += " " + lineClass[2] } - } } - return type -} - -// Run the given mode's parser over a line, calling f for each token. -function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { - var flattenSpans = mode.flattenSpans - if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans } - var curStart = 0, curStyle = null - var stream = new StringStream(text, cm.options.tabSize), style - var inner = cm.options.addModeClass && [null] - if (text == "") { extractLineClasses(callBlankLine(mode, state), lineClasses) } - while (!stream.eol()) { - if (stream.pos > cm.options.maxHighlightLength) { - flattenSpans = false - if (forceToEnd) { processLine(cm, text, state, stream.pos) } - stream.pos = text.length - style = null - } else { - style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses) - } - if (inner) { - var mName = inner[0].name - if (mName) { style = "m-" + (style ? mName + " " + style : mName) } - } - if (!flattenSpans || curStyle != style) { - while (curStart < stream.start) { - curStart = Math.min(stream.start, curStart + 5000) - f(curStart, curStyle) - } - curStyle = style - } - stream.start = stream.pos - } - while (curStart < stream.pos) { - // Webkit seems to refuse to render text nodes longer than 57444 - // characters, and returns inaccurate measurements in nodes - // starting around 5000 chars. - var pos = Math.min(stream.pos, curStart + 5000) - f(pos, curStyle) - curStart = pos - } -} - -// 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 -} - -// LINE DATA STRUCTURE - -// Line objects. These hold state related to a line, including -// highlighting info (the styles array). -function Line(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) -} - -// 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 = {}; -var styleToClassCacheWithMode = {} -function interpretTokenStyle(style, options) { - if (!style || /^\s*$/.test(style)) { return null } - var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache - return cache[style] || - (cache[style] = style.replace(/\S+/g, "cm-$&")) -} - -// Render the DOM representation of the text of a line. Also builds -// up a 'line map', which points at the DOM nodes that represent -// specific stretches of text, and is used by the measuring code. -// The returned object contains the DOM node, this map, and -// information about line-wide styles that were set by the mode. -function buildLineContent(cm, lineView) { - // The padding-right forces the element to have a 'border', which - // is needed on Webkit to be able to get line-level bounding - // rectangles for it (in measureChar). - var content = elt("span", null, null, webkit ? "padding-right: .1px" : null) - var builder = {pre: elt("pre", [content], "CodeMirror-line"), content: content, - col: 0, pos: 0, cm: cm, - trailingSpace: false, - splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")} - lineView.measure = {} - - // Iterate over the logical lines that make up this visual line. - for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { - var line = i ? lineView.rest[i - 1] : lineView.line, order = void 0 - builder.pos = 0 - builder.addToken = buildToken - // Optionally wire in some hacks into the token-rendering - // algorithm, to deal with browser quirks. - if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) - { builder.addToken = buildTokenBadBidi(builder.addToken, order) } - builder.map = [] - var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line) - insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)) - if (line.styleClasses) { - if (line.styleClasses.bgClass) - { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || "") } - if (line.styleClasses.textClass) - { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || "") } - } - - // Ensure at least a single node is present, for measuring. - if (builder.map.length == 0) - { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))) } - - // Store the map and a cache object for the current logical line - if (i == 0) { - lineView.measure.map = builder.map - lineView.measure.cache = {} - } else { - (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) - ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}) - } - } - - // See issue #2901 - if (webkit) { - var last = builder.content.lastChild - if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) - { builder.content.className = "cm-tab-wrap-hack" } - } - - signal(cm, "renderLine", cm, lineView.line, builder.pre) - if (builder.pre.className) - { builder.textClass = joinClasses(builder.pre.className, builder.textClass || "") } - - return builder -} - -function defaultSpecialCharPlaceholder(ch) { - var token = elt("span", "\u2022", "cm-invalidchar") - token.title = "\\u" + ch.charCodeAt(0).toString(16) - token.setAttribute("aria-label", token.title) - return token -} - -// Build up the DOM representation for a single token, and add it to -// the line map. Takes care to render special characters separately. -function buildToken(builder, text, style, startStyle, endStyle, title, css) { - if (!text) { return } - var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text - var special = builder.cm.state.specialChars, mustWrap = false - var content - if (!special.test(text)) { - builder.col += text.length - content = document.createTextNode(displayText) - builder.map.push(builder.pos, builder.pos + text.length, content) - if (ie && ie_version < 9) { mustWrap = true } - builder.pos += text.length - } else { - content = document.createDocumentFragment() - var pos = 0 - while (true) { - special.lastIndex = pos - var m = special.exec(text) - var skipped = m ? m.index - pos : text.length - pos - if (skipped) { - var txt = document.createTextNode(displayText.slice(pos, pos + skipped)) - if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])) } - else { content.appendChild(txt) } - builder.map.push(builder.pos, builder.pos + skipped, txt) - builder.col += skipped - builder.pos += skipped - } - if (!m) { break } - pos += skipped + 1 - var txt$1 = void 0 - if (m[0] == "\t") { - var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize - txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")) - txt$1.setAttribute("role", "presentation") - txt$1.setAttribute("cm-text", "\t") - builder.col += tabWidth - } else if (m[0] == "\r" || m[0] == "\n") { - txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")) - txt$1.setAttribute("cm-text", m[0]) - builder.col += 1 - } else { - txt$1 = builder.cm.options.specialCharPlaceholder(m[0]) - txt$1.setAttribute("cm-text", m[0]) - if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])) } - else { content.appendChild(txt$1) } - builder.col += 1 - } - builder.map.push(builder.pos, builder.pos + 1, txt$1) - builder.pos++ - } - } - builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32 - if (style || startStyle || endStyle || mustWrap || css) { - var fullStyle = style || "" - if (startStyle) { fullStyle += startStyle } - if (endStyle) { fullStyle += endStyle } - var token = elt("span", [content], fullStyle, css) - if (title) { token.title = title } - return builder.content.appendChild(token) - } - builder.content.appendChild(content) -} - -function splitSpaces(text, trailingBefore) { - if (text.length > 1 && !/ /.test(text)) { return text } - var spaceBefore = trailingBefore, result = "" - for (var i = 0; i < text.length; i++) { - var ch = text.charAt(i) - if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) - { ch = "\u00a0" } - result += ch - spaceBefore = ch == " " - } - return result -} - -// Work around nonsense dimensions being reported for stretches of -// right-to-left text. -function buildTokenBadBidi(inner, order) { - return function (builder, text, style, startStyle, endStyle, title, css) { - style = style ? style + " cm-force-border" : "cm-force-border" - var start = builder.pos, end = start + text.length - for (;;) { - // Find the part that overlaps with the start of this text - var part = void 0 - for (var i = 0; i < order.length; i++) { - part = order[i] - if (part.to > start && part.from <= start) { break } - } - if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) } - inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css) - startStyle = null - text = text.slice(part.to - start) - start = part.to - } - } -} - -function buildCollapsedSpan(builder, size, marker, ignoreWidget) { - var widget = !ignoreWidget && marker.widgetNode - if (widget) { builder.map.push(builder.pos, builder.pos + size, widget) } - if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { - if (!widget) - { widget = builder.content.appendChild(document.createElement("span")) } - widget.setAttribute("cm-marker", marker.id) - } - if (widget) { - builder.cm.display.input.setUneditable(widget) - builder.content.appendChild(widget) - } - builder.pos += size - builder.trailingSpace = false -} - -// 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 = 1; i$1 < styles.length; i$1+=2) - { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)) } - return - } - - var len = allText.length, pos = 0, i = 1, text = "", style, css - var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed - for (;;) { - if (nextChange == pos) { // Update current marker set - spanStyle = spanEndStyle = spanStartStyle = title = css = "" - collapsed = null; nextChange = Infinity - var foundBookmarks = [], endStyles = void 0 - for (var j = 0; j < spans.length; ++j) { - var sp = spans[j], m = sp.marker - if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { - foundBookmarks.push(m) - } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { - if (sp.to != null && sp.to != pos && nextChange > sp.to) { - nextChange = sp.to - spanEndStyle = "" - } - if (m.className) { spanStyle += " " + m.className } - if (m.css) { css = (css ? css + ";" : "") + m.css } - if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle } - if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to) } - if (m.title && !title) { title = m.title } - if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) - { collapsed = sp } - } else if (sp.from > pos && nextChange > sp.from) { - nextChange = sp.from - } - } - if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) - { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1] } } } - - if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) - { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]) } } - if (collapsed && (collapsed.from || 0) == pos) { - buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, - collapsed.marker, collapsed.from == null) - if (collapsed.to == null) { return } - if (collapsed.to == pos) { collapsed = false } - } - } - if (pos >= len) { break } - - var upto = Math.min(len, nextChange) - while (true) { - if (text) { - var end = pos + text.length - if (!collapsed) { - var tokenText = end > upto ? text.slice(0, upto - pos) : text - builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, - spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css) - } - if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} - pos = end - spanStartStyle = "" - } - text = allText.slice(at, at = styles[i++]) - style = interpretTokenStyle(styles[i++], builder.cm.options) - } - } -} - - -// 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 -} - -var operationGroup = null - -function pushOperation(op) { - if (operationGroup) { - operationGroup.ops.push(op) - } else { - op.ownsGroup = operationGroup = { - ops: [op], - delayedCallbacks: [] - } - } -} - -function fireCallbacksForOps(group) { - // Calls delayed callbacks and cursorActivity handlers until no - // new ones appear - var callbacks = group.delayedCallbacks, i = 0 - do { - for (; i < callbacks.length; i++) - { callbacks[i].call(null) } - for (var j = 0; j < group.ops.length; j++) { - var op = group.ops[j] - if (op.cursorActivityHandlers) - { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) - { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm) } } - } - } while (i < callbacks.length) -} - -function finishOperation(op, endCb) { - var group = op.ownsGroup - if (!group) { return } - - try { fireCallbacksForOps(group) } - finally { - operationGroup = null - endCb(group) - } -} - -var orphanDelayedCallbacks = null - -// Often, we want to signal events at a point where we are in the -// middle of some work, but don't want the handler to start calling -// other methods on the editor, which might be in an inconsistent -// state or simply not expect any other events to happen. -// signalLater looks whether there are any handlers, and schedules -// them to be executed when the last operation ends, or, if no -// operation is active, when a timeout fires. -function signalLater(emitter, type /*, values...*/) { - var arr = getHandlers(emitter, type, false) - if (!arr.length) { return } - var args = Array.prototype.slice.call(arguments, 2), list - if (operationGroup) { - list = operationGroup.delayedCallbacks - } else if (orphanDelayedCallbacks) { - list = orphanDelayedCallbacks - } else { - list = orphanDelayedCallbacks = [] - setTimeout(fireOrphanDelayed, 0) - } - var loop = function ( i ) { - list.push(function () { return arr[i].apply(null, args); }) - }; - - for (var i = 0; i < arr.length; ++i) - loop( i ); -} - -function fireOrphanDelayed() { - var delayed = orphanDelayedCallbacks - orphanDelayedCallbacks = null - for (var i = 0; i < delayed.length; ++i) { delayed[i]() } -} - -// When an aspect of a line changes, a string is added to -// lineView.changes. This updates the relevant part of the line's -// DOM structure. -function updateLineForChanges(cm, lineView, lineN, dims) { - for (var j = 0; j < lineView.changes.length; j++) { - var type = lineView.changes[j] - if (type == "text") { updateLineText(cm, lineView) } - else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims) } - else if (type == "class") { updateLineClasses(lineView) } - else if (type == "widget") { updateLineWidgets(cm, lineView, dims) } - } - lineView.changes = null -} - -// Lines with gutter elements, widgets or a background class need to -// be wrapped, and have the extra elements added to the wrapper div -function ensureLineWrapped(lineView) { - if (lineView.node == lineView.text) { - lineView.node = elt("div", null, null, "position: relative") - if (lineView.text.parentNode) - { lineView.text.parentNode.replaceChild(lineView.node, lineView.text) } - lineView.node.appendChild(lineView.text) - if (ie && ie_version < 8) { lineView.node.style.zIndex = 2 } - } - return lineView.node -} - -function updateLineBackground(lineView) { - var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass - if (cls) { cls += " CodeMirror-linebackground" } - if (lineView.background) { - if (cls) { lineView.background.className = cls } - else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null } - } else if (cls) { - var wrap = ensureLineWrapped(lineView) - lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild) - } -} - -// Wrapper around buildLineContent which will reuse the structure -// in display.externalMeasured when possible. -function getLineContent(cm, lineView) { - var ext = cm.display.externalMeasured - if (ext && ext.line == lineView.line) { - cm.display.externalMeasured = null - lineView.measure = ext.measure - return ext.built - } - return buildLineContent(cm, lineView) -} - -// Redraw the line's text. Interacts with the background and text -// classes because the mode may output tokens that influence these -// classes. -function updateLineText(cm, lineView) { - var cls = lineView.text.className - var built = getLineContent(cm, lineView) - if (lineView.text == lineView.node) { lineView.node = built.pre } - lineView.text.parentNode.replaceChild(built.pre, lineView.text) - lineView.text = built.pre - if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { - lineView.bgClass = built.bgClass - lineView.textClass = built.textClass - updateLineClasses(lineView) - } else if (cls) { - lineView.text.className = cls - } -} - -function updateLineClasses(lineView) { - updateLineBackground(lineView) - if (lineView.line.wrapClass) - { ensureLineWrapped(lineView).className = lineView.line.wrapClass } - else if (lineView.node != lineView.text) - { lineView.node.className = "" } - var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass - lineView.text.className = textClass || "" -} - -function updateLineGutter(cm, lineView, lineN, dims) { - if (lineView.gutter) { - lineView.node.removeChild(lineView.gutter) - lineView.gutter = null - } - if (lineView.gutterBackground) { - lineView.node.removeChild(lineView.gutterBackground) - lineView.gutterBackground = null - } - if (lineView.line.gutterClass) { - var wrap = ensureLineWrapped(lineView) - lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, - ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")) - wrap.insertBefore(lineView.gutterBackground, lineView.text) - } - var markers = lineView.line.gutterMarkers - if (cm.options.lineNumbers || markers) { - var wrap$1 = ensureLineWrapped(lineView) - var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")) - cm.display.input.setUneditable(gutterWrap) - wrap$1.insertBefore(gutterWrap, lineView.text) - if (lineView.line.gutterClass) - { gutterWrap.className += " " + lineView.line.gutterClass } - if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) - { lineView.lineNumber = gutterWrap.appendChild( - elt("div", lineNumberFor(cm.options, lineN), - "CodeMirror-linenumber CodeMirror-gutter-elt", - ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))) } - if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) { - var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id] - if (found) - { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", - ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))) } - } } - } -} - -function updateLineWidgets(cm, lineView, dims) { - if (lineView.alignable) { lineView.alignable = null } - for (var node = lineView.node.firstChild, next = void 0; node; node = next) { - next = node.nextSibling - if (node.className == "CodeMirror-linewidget") - { lineView.node.removeChild(node) } - } - insertLineWidgets(cm, lineView, dims) -} - -// Build a line's DOM representation from scratch -function buildLineElement(cm, lineView, lineN, dims) { - var built = getLineContent(cm, lineView) - lineView.text = lineView.node = built.pre - if (built.bgClass) { lineView.bgClass = built.bgClass } - if (built.textClass) { lineView.textClass = built.textClass } - - updateLineClasses(lineView) - updateLineGutter(cm, lineView, lineN, dims) - insertLineWidgets(cm, lineView, dims) - return lineView.node -} - -// A lineView may contain multiple logical lines (when merged by -// collapsed spans). The widgets for all of them need to be drawn. -function insertLineWidgets(cm, lineView, dims) { - insertLineWidgetsFor(cm, lineView.line, lineView, dims, true) - if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) - { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false) } } -} - -function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { - if (!line.widgets) { return } - var wrap = ensureLineWrapped(lineView) - for (var i = 0, ws = line.widgets; i < ws.length; ++i) { - var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget") - if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true") } - positionLineWidget(widget, node, lineView, dims) - cm.display.input.setUneditable(node) - if (allowAbove && widget.above) - { wrap.insertBefore(node, lineView.gutter || lineView.text) } - else - { wrap.appendChild(node) } - signalLater(widget, "redraw") - } -} - -function positionLineWidget(widget, node, lineView, dims) { - if (widget.noHScroll) { - (lineView.alignable || (lineView.alignable = [])).push(node) - var width = dims.wrapperWidth - node.style.left = dims.fixedPos + "px" - if (!widget.coverGutter) { - width -= dims.gutterTotalWidth - node.style.paddingLeft = dims.gutterTotalWidth + "px" - } - node.style.width = width + "px" - } - if (widget.coverGutter) { - node.style.zIndex = 5 - node.style.position = "relative" - if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px" } - } -} - -function widgetHeight(widget) { - if (widget.height != null) { return widget.height } - var cm = widget.doc.cm - if (!cm) { return 0 } - if (!contains(document.body, widget.node)) { - var parentStyle = "position: relative;" - if (widget.coverGutter) - { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;" } - if (widget.noHScroll) - { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;" } - removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)) - } - return widget.height = widget.node.parentNode.offsetHeight -} - -// Return true when the given mouse event happened in a widget -function eventInWidget(display, e) { - for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { - if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || - (n.parentNode == display.sizer && n != display.mover)) - { return true } - } -} - -// POSITION MEASUREMENT - -function paddingTop(display) {return display.lineSpace.offsetTop} -function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} -function paddingH(display) { - if (display.cachedPaddingH) { return display.cachedPaddingH } - var e = removeChildrenAndAdd(display.measure, elt("pre", "x")) - var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle - var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)} - if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data } - return data -} - -function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } -function displayWidth(cm) { - return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth -} -function displayHeight(cm) { - return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight -} - -// Ensure the lineView.wrapping.heights array is populated. This is -// an array of bottom offsets for the lines that make up a drawn -// line. When lineWrapping is on, there might be more than one -// height. -function ensureLineHeights(cm, lineView, rect) { - var wrapping = cm.options.lineWrapping - var curWidth = wrapping && displayWidth(cm) - if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { - var heights = lineView.measure.heights = [] - if (wrapping) { - lineView.measure.width = curWidth - var rects = lineView.text.firstChild.getClientRects() - for (var i = 0; i < rects.length - 1; i++) { - var cur = rects[i], next = rects[i + 1] - if (Math.abs(cur.bottom - next.bottom) > 2) - { heights.push((cur.bottom + next.top) / 2 - rect.top) } - } - } - heights.push(rect.bottom - rect.top) - } -} - -// Find a line map (mapping character offsets to text nodes) and a -// measurement cache for the given line number. (A line view might -// contain multiple lines when collapsed ranges are present.) -function mapFromLineView(lineView, line, lineN) { - if (lineView.line == line) - { return {map: lineView.measure.map, cache: lineView.measure.cache} } - for (var i = 0; i < lineView.rest.length; i++) - { if (lineView.rest[i] == line) - { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } - for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) - { if (lineNo(lineView.rest[i$1]) > lineN) - { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } -} - -// Render a line into the hidden node display.externalMeasured. Used -// when measurement is needed for a line that's not in the viewport. -function updateExternalMeasurement(cm, line) { - line = visualLine(line) - var lineN = lineNo(line) - var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN) - view.lineN = lineN - var built = view.built = buildLineContent(cm, view) - view.text = built.pre - removeChildrenAndAdd(cm.display.lineMeasure, built.pre) - return view -} - -// Get a {top, bottom, left, right} box (in line-local coordinates) -// for a given character. -function measureChar(cm, line, ch, bias) { - return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) -} - -// Find a line view that corresponds to the given line number. -function findViewForLine(cm, lineN) { - if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) - { return cm.display.view[findViewIndex(cm, lineN)] } - var ext = cm.display.externalMeasured - if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) - { return ext } -} - -// Measurement can be split in two steps, the set-up work that -// applies to the whole line, and the measurement of the actual -// character. Functions like coordsChar, that need to do a lot of -// measurements in a row, can thus ensure that the set-up work is -// only done once. -function prepareMeasureForLine(cm, line) { - var lineN = lineNo(line) - var view = findViewForLine(cm, lineN) - if (view && !view.text) { - view = null - } else if (view && view.changes) { - updateLineForChanges(cm, view, lineN, getDimensions(cm)) - cm.curOp.forceUpdate = true - } - if (!view) - { view = updateExternalMeasurement(cm, line) } - - var info = mapFromLineView(view, line, lineN) - return { - line: line, view: view, rect: null, - map: info.map, cache: info.cache, before: info.before, - hasHeights: false - } -} - -// Given a prepared measurement object, measures the position of an -// actual character (or fetches it from the cache). -function measureCharPrepared(cm, prepared, ch, bias, varHeight) { - if (prepared.before) { ch = -1 } - var key = ch + (bias || ""), found - if (prepared.cache.hasOwnProperty(key)) { - found = prepared.cache[key] - } else { - if (!prepared.rect) - { prepared.rect = prepared.view.text.getBoundingClientRect() } - if (!prepared.hasHeights) { - ensureLineHeights(cm, prepared.view, prepared.rect) - prepared.hasHeights = true - } - found = measureCharInner(cm, prepared, ch, bias) - if (!found.bogus) { prepared.cache[key] = found } - } - return {left: found.left, right: found.right, - top: varHeight ? found.rtop : found.top, - bottom: varHeight ? found.rbottom : found.bottom} -} - -var nullRect = {left: 0, right: 0, top: 0, bottom: 0} - -function nodeAndOffsetInLineMap(map$$1, ch, bias) { - var node, start, end, collapse, mStart, mEnd - // First, search the line map for the text node corresponding to, - // or closest to, the target character. - for (var i = 0; i < map$$1.length; i += 3) { - mStart = map$$1[i] - mEnd = map$$1[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$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) { - end = mEnd - mStart - start = end - 1 - if (ch >= mEnd) { collapse = "right" } - } - if (start != null) { - node = map$$1[i + 2] - if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) - { collapse = bias } - if (bias == "left" && start == 0) - { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) { - node = map$$1[(i -= 3) + 2] - collapse = "left" - } } - if (bias == "right" && start == mEnd - mStart) - { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) { - node = map$$1[(i += 3) + 2] - collapse = "right" - } } - break - } - } - return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} -} - -function getUsefulRect(rects, bias) { - var rect = nullRect - if (bias == "left") { for (var i = 0; i < rects.length; i++) { - if ((rect = rects[i]).left != rect.right) { break } - } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { - if ((rect = rects[i$1]).left != rect.right) { break } - } } - return rect -} - -function measureCharInner(cm, prepared, ch, bias) { - var place = nodeAndOffsetInLineMap(prepared.map, ch, bias) - var node = place.node, start = place.start, end = place.end, collapse = place.collapse - - var rect - if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. - for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned - while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start } - while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end } - if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) - { rect = node.parentNode.getBoundingClientRect() } - else - { rect = getUsefulRect(range(node, start, end).getClientRects(), bias) } - if (rect.left || rect.right || start == 0) { break } - end = start - start = start - 1 - collapse = "right" - } - if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect) } - } else { // If it is a widget, simply get the box for the whole widget. - if (start > 0) { collapse = bias = "right" } - var rects - if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) - { rect = rects[bias == "right" ? rects.length - 1 : 0] } - else - { rect = node.getBoundingClientRect() } - } - if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { - var rSpan = node.parentNode.getClientRects()[0] - if (rSpan) - { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom} } - else - { rect = nullRect } - } - - var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top - var mid = (rtop + rbot) / 2 - var heights = prepared.view.measure.heights - var i = 0 - for (; i < heights.length - 1; i++) - { if (mid < heights[i]) { break } } - var top = i ? heights[i - 1] : 0, bot = heights[i] - var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, - right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, - top: top, bottom: bot} - if (!rect.left && !rect.right) { result.bogus = true } - if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot } - - return result -} - -// Work around problem with bounding client rects on ranges being -// returned incorrectly when zoomed on IE10 and below. -function maybeUpdateRectForZooming(measure, rect) { - if (!window.screen || screen.logicalXDPI == null || - screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) - { return rect } - var scaleX = screen.logicalXDPI / screen.deviceXDPI - var scaleY = screen.logicalYDPI / screen.deviceYDPI - return {left: rect.left * scaleX, right: rect.right * scaleX, - top: rect.top * scaleY, bottom: rect.bottom * scaleY} -} - -function clearLineMeasurementCacheFor(lineView) { - if (lineView.measure) { - lineView.measure.cache = {} - lineView.measure.heights = null - if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) - { lineView.measure.caches[i] = {} } } - } -} - -function clearLineMeasurementCache(cm) { - cm.display.externalMeasure = null - removeChildren(cm.display.lineMeasure) - for (var i = 0; i < cm.display.view.length; i++) - { clearLineMeasurementCacheFor(cm.display.view[i]) } -} - -function clearCaches(cm) { - clearLineMeasurementCache(cm) - cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null - if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true } - cm.display.lineNumChars = null -} - -function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft } -function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop } - -// Converts a {top, bottom, left, right} box from line-local -// coordinates into another coordinate system. Context may be one of -// "line", "div" (display.lineDiv), "local"./null (editor), "window", -// or "page". -function intoCoordSystem(cm, lineObj, rect, context) { - if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) { - var size = widgetHeight(lineObj.widgets[i]) - rect.top += size; rect.bottom += size - } } } - if (context == "line") { return rect } - if (!context) { context = "local" } - var yOff = heightAtLine(lineObj) - if (context == "local") { yOff += paddingTop(cm.display) } - else { yOff -= cm.display.viewOffset } - if (context == "page" || context == "window") { - var lOff = cm.display.lineSpace.getBoundingClientRect() - yOff += lOff.top + (context == "window" ? 0 : pageScrollY()) - var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()) - rect.left += xOff; rect.right += xOff - } - rect.top += yOff; rect.bottom += yOff - return rect -} - -// Coverts a box from "div" coords to another coordinate system. -// Context may be "window", "page", "div", or "local"./null. -function fromCoordSystem(cm, coords, context) { - if (context == "div") { return coords } - var left = coords.left, top = coords.top - // First move into "page" coordinate system - if (context == "page") { - left -= pageScrollX() - top -= pageScrollY() - } else if (context == "local" || !context) { - var localBox = cm.display.sizer.getBoundingClientRect() - left += localBox.left - top += localBox.top - } - - var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect() - return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} -} - -function charCoords(cm, pos, context, lineObj, bias) { - if (!lineObj) { lineObj = getLine(cm.doc, pos.line) } - return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) -} - -// Returns a box for a given cursor position, which may have an -// 'other' property containing the position of the secondary cursor -// on a bidi boundary. -function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { - lineObj = lineObj || getLine(cm.doc, pos.line) - if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj) } - function get(ch, right) { - var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight) - if (right) { m.left = m.right; } else { m.right = m.left } - return intoCoordSystem(cm, lineObj, m, context) - } - function getBidi(ch, partPos) { - var part = order[partPos], right = part.level % 2 - if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { - part = order[--partPos] - ch = bidiRight(part) - (part.level % 2 ? 0 : 1) - right = true - } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { - part = order[++partPos] - ch = bidiLeft(part) - part.level % 2 - right = false - } - if (right && ch == part.to && ch > part.from) { return get(ch - 1) } - return get(ch, right) - } - var order = getOrder(lineObj), ch = pos.ch - if (!order) { return get(ch) } - var partPos = getBidiPartAt(order, ch) - var val = getBidi(ch, partPos) - if (bidiOther != null) { val.other = getBidi(ch, bidiOther) } - return val -} - -// Used to cheaply estimate the coordinates for a position. Used for -// intermediate scroll updates. -function estimateCoords(cm, pos) { - var left = 0 - pos = clipPos(cm.doc, pos) - if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch } - var lineObj = getLine(cm.doc, pos.line) - var top = heightAtLine(lineObj) + paddingTop(cm.display) - return {left: left, right: left, top: top, bottom: top + lineObj.height} -} - -// Positions returned by coordsChar contain some extra information. -// xRel is the relative x position of the input coordinates compared -// to the found position (so xRel > 0 means the coordinates are to -// the right of the character position, for example). When outside -// is true, that means the coordinates lie outside the line's -// vertical range. -function PosWithInfo(line, ch, outside, xRel) { - var pos = Pos(line, ch) - pos.xRel = xRel - if (outside) { pos.outside = true } - return pos -} - -// Compute the character position closest to the given coordinates. -// Input must be lineSpace-local ("div" coordinate system). -function coordsChar(cm, x, y) { - var doc = cm.doc - y += cm.display.viewOffset - if (y < 0) { return PosWithInfo(doc.first, 0, true, -1) } - var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1 - if (lineN > last) - { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1) } - if (x < 0) { x = 0 } - - var lineObj = getLine(doc, lineN) - for (;;) { - var found = coordsCharInner(cm, lineObj, lineN, x, y) - var merged = collapsedSpanAtEnd(lineObj) - var mergedPos = merged && merged.find(0, true) - if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) - { lineN = lineNo(lineObj = mergedPos.to.line) } - else - { return found } - } -} - -function coordsCharInner(cm, lineObj, lineNo$$1, 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$$1, 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$$1, 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 outside = ch == from ? fromOutside : toOutside - var xDiff = x - (ch == from ? fromX : toX) - // This is a kludge to handle the case where the coordinates - // are after a line-wrapped line. We should replace it with a - // more general handling of cursor positions around line - // breaks. (Issue #4078) - if (toOutside && !bidi && !/\s/.test(lineObj.text.charAt(ch)) && xDiff > 0 && - ch < lineObj.text.length && preparedMeasure.view.measure.heights.length > 1) { - var charSize = measureCharPrepared(cm, preparedMeasure, ch, "right") - if (innerOff <= charSize.bottom && innerOff >= charSize.top && Math.abs(x - charSize.right) < xDiff) { - outside = false - ch++ - xDiff = x - charSize.right - } - } - while (isExtendingChar(lineObj.text.charAt(ch))) { ++ch } - var pos = PosWithInfo(lineNo$$1, ch, outside, 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 -} - -// Do a bulk-read of the DOM positions and sizes needed to draw the -// view, so that we don't interleave reading and writing to the DOM. -function getDimensions(cm) { - var d = cm.display, left = {}, width = {} - var gutterLeft = d.gutters.clientLeft - for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { - left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft - width[cm.options.gutters[i]] = n.clientWidth - } - return {fixedPos: compensateForHScroll(d), - gutterTotalWidth: d.gutters.offsetWidth, - gutterLeft: left, - gutterWidth: width, - wrapperWidth: d.wrapper.clientWidth} -} - -// 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 -} - -// 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) } - }) -} - -// Given a mouse event, find the corresponding position. If liberal -// is false, it checks whether a gutter or scrollbar was clicked, -// and returns null if it was. forRect is used by rectangular -// selections, and tries to estimate a character position even for -// coordinates beyond the right of the text. -function posFromMouse(cm, e, liberal, forRect) { - var display = cm.display - if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } - - var x, y, space = display.lineSpace.getBoundingClientRect() - // Fails unpredictably on IE[67] when mouse is dragged around quickly. - try { x = e.clientX - space.left; y = e.clientY - space.top } - catch (e) { return null } - var coords = coordsChar(cm, x, y), line - if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { - var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length - coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)) - } - return coords -} - -// 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 updateSelection(cm) { - cm.display.input.showSelection(cm.display.input.prepareSelection()) -} - -function prepareSelection(cm, primary) { - var doc = cm.doc, result = {} - var curFragment = result.cursors = document.createDocumentFragment() - var selFragment = result.selection = document.createDocumentFragment() - - for (var i = 0; i < doc.sel.ranges.length; i++) { - if (primary === false && i == doc.sel.primIndex) { continue } - var range$$1 = doc.sel.ranges[i] - if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue } - var collapsed = range$$1.empty() - if (collapsed || cm.options.showCursorWhenSelecting) - { drawSelectionCursor(cm, range$$1.head, curFragment) } - if (!collapsed) - { drawSelectionRange(cm, range$$1, selFragment) } - } - return result -} - -// Draws a cursor for the given range -function drawSelectionCursor(cm, head, output) { - var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine) - - var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")) - cursor.style.left = pos.left + "px" - cursor.style.top = pos.top + "px" - cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px" - - if (pos.other) { - // Secondary cursor, shown when on a 'jump' in bi-directional text - var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")) - otherCursor.style.display = "" - otherCursor.style.left = pos.other.left + "px" - otherCursor.style.top = pos.other.top + "px" - otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px" - } -} - -// Draws the given range as a highlighted selection -function drawSelectionRange(cm, range$$1, output) { - var display = cm.display, doc = cm.doc - var fragment = document.createDocumentFragment() - var padding = paddingH(cm.display), leftSide = padding.left - var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right - - function add(left, top, width, bottom) { - if (top < 0) { top = 0 } - top = Math.round(top) - bottom = Math.round(bottom) - fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n 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$$1.from(), sTo = range$$1.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 () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, - cm.options.cursorBlinkRate) } - else if (cm.options.cursorBlinkRate < 0) - { display.cursorDiv.style.visibility = "hidden" } -} - -function ensureFocus(cm) { - if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) } -} - -function delayBlurEvent(cm) { - cm.state.delayingBlurEvent = true - setTimeout(function () { if (cm.state.delayingBlurEvent) { - cm.state.delayingBlurEvent = false - onBlur(cm) - } }, 100) -} - -function onFocus(cm, e) { - if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false } - - if (cm.options.readOnly == "nocursor") { return } - if (!cm.state.focused) { - signal(cm, "focus", cm, e) - cm.state.focused = true - addClass(cm.display.wrapper, "CodeMirror-focused") - // This test prevents this from firing when a context - // menu is closed (since the input reset would kill the - // select-all detection hack) - if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { - cm.display.input.reset() - if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20) } // Issue #1730 - } - cm.display.input.receivedFocus() - } - restartBlink(cm) -} -function onBlur(cm, e) { - if (cm.state.delayingBlurEvent) { return } - - if (cm.state.focused) { - signal(cm, "blur", cm, e) - cm.state.focused = false - rmClass(cm.display.wrapper, "CodeMirror-focused") - } - clearInterval(cm.display.blinker) - setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false } }, 150) -} - -// 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) { - if (view[i].gutter) - { view[i].gutter.style.left = left } - if (view[i].gutterBackground) - { view[i].gutterBackground.style.left = left } - } - var align = view[i].alignable - if (align) { for (var j = 0; j < align.length; j++) - { align[j].style.left = left } } - } } - if (cm.options.fixedGutter) - { display.gutters.style.left = (comp + gutterW) + "px" } -} - -// Used to ensure that the line number gutter is still the right -// size for the current document size. Returns true when an update -// is needed. -function maybeUpdateLineNumberWidth(cm) { - if (!cm.options.lineNumbers) { return false } - var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display - if (last.length != display.lineNumChars) { - var test = display.measure.appendChild(elt("div", [elt("div", last)], - "CodeMirror-linenumber CodeMirror-gutter-elt")) - var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW - display.lineGutter.style.width = "" - display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1 - display.lineNumWidth = display.lineNumInnerWidth + padding - display.lineNumChars = display.lineNumInnerWidth ? last.length : -1 - display.lineGutter.style.width = display.lineNumWidth + "px" - updateGutterSpace(cm) - return true - } - return false -} - -// 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 = void 0 - if (cur.hidden) { continue } - if (ie && ie_version < 8) { - var bot = cur.node.offsetTop + cur.node.offsetHeight - height = bot - prevBottom - prevBottom = bot - } else { - var box = cur.node.getBoundingClientRect() - height = box.bottom - box.top - } - var diff = cur.line.height - height - if (height < 2) { height = textHeight(display) } - if (diff > .001 || diff < -.001) { - updateLineHeight(cur.line, height) - updateWidgetHeight(cur.line) - if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) - { updateWidgetHeight(cur.rest[j]) } } - } - } -} - -// Read and store the height of line widgets associated with the -// given line. -function updateWidgetHeight(line) { - if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) - { line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight } } -} - -// Compute the lines that are visible in a given viewport (defaults -// the the current scroll position). viewport may contain top, -// height, and ensure (see op.scrollToPos) properties. -function visibleLines(display, doc, viewport) { - var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop - top = Math.floor(top - paddingTop(display)) - var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight - - var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom) - // Ensure is a {from: {line, ch}, to: {line, ch}} object, and - // forces those lines into the viewport (if possible). - if (viewport && viewport.ensure) { - var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line - if (ensureFrom < from) { - from = ensureFrom - to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight) - } else if (Math.min(ensureTo, doc.lastLine()) >= to) { - from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight) - to = ensureTo - } - } - return {from: from, to: Math.max(to, from + 1)} -} - -// Sync the scrollable area and scrollbars, ensure the viewport -// covers the visible area. -function setScrollTop(cm, val) { - if (Math.abs(cm.doc.scrollTop - val) < 2) { return } - cm.doc.scrollTop = val - if (!gecko) { updateDisplaySimple(cm, {top: val}) } - if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val } - cm.display.scrollbars.setScrollTop(val) - if (gecko) { updateDisplaySimple(cm) } - startWorker(cm, 100) -} -// Sync scroller and scrollbar, ensure the gutter elements are -// aligned. -function setScrollLeft(cm, val, isScroller) { - if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) { return } - val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth) - cm.doc.scrollLeft = val - alignHorizontally(cm) - if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val } - cm.display.scrollbars.setScrollLeft(val) -} - -// Since the delta values reported on mouse wheel events are -// unstandardized between browsers and even browser versions, and -// generally horribly unpredictable, this code starts by measuring -// the scroll effect that the first few mouse wheel events have, -// and, from that, detects the way it can convert deltas to pixel -// offsets afterwards. -// -// The reason we want to know the amount a wheel event will scroll -// is that it gives us a chance to update the display before the -// actual scrolling happens, reducing flickering. - -var wheelSamples = 0; -var 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 wheelEventDelta(e) { - var dx = e.wheelDeltaX, dy = e.wheelDeltaY - if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail } - if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail } - else if (dy == null) { dy = e.wheelDelta } - return {x: dx, y: dy} -} -function wheelEventPixels(e) { - var delta = wheelEventDelta(e) - delta.x *= wheelPixelsPerUnit - delta.y *= wheelPixelsPerUnit - return delta -} - -function onScrollWheel(cm, e) { - var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y - - var display = cm.display, scroll = display.scroller - // Quit if there's nothing to scroll here - var canScrollX = scroll.scrollWidth > scroll.clientWidth - var canScrollY = scroll.scrollHeight > scroll.clientHeight - if (!(dx && canScrollX || dy && canScrollY)) { return } - - // Webkit browsers on OS X abort momentum scrolls when the target - // of the scroll event is removed from the scrollable element. - // This hack (see related code in patchDisplay) makes sure the - // element is kept around. - if (dy && mac && webkit) { - outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { - for (var i = 0; i < view.length; i++) { - if (view[i].node == cur) { - cm.display.currentWheelTarget = cur - break outer - } - } - } - } - - // On some browsers, horizontal scrolling will cause redraws to - // happen before the gutter has been realigned, causing it to - // wriggle around in a most unseemly way. When we have an - // estimated pixels/delta value, we just handle horizontal - // scrolling entirely here. It'll be slightly off from native, but - // better than glitching out. - if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { - if (dy && canScrollY) - { setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))) } - setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))) - // Only prevent default scrolling if vertical scrolling is - // actually possible. Otherwise, it causes vertical scroll - // jitter on OSX trackpads when deltaX is small and deltaY - // is large (issue #3579) - if (!dy || (dy && canScrollY)) - { e_preventDefault(e) } - display.wheelStartX = null // Abort measurement, if in progress - return - } - - // 'Project' the visible viewport to cover the area that is being - // scrolled into view (if we know enough to estimate it). - if (dy && wheelPixelsPerUnit != null) { - var pixels = dy * wheelPixelsPerUnit - var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight - if (pixels < 0) { top = Math.max(0, top + pixels - 50) } - else { bot = Math.min(cm.doc.height, bot + pixels + 50) } - updateDisplaySimple(cm, {top: top, bottom: bot}) - } - - if (wheelSamples < 20) { - if (display.wheelStartX == null) { - display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop - display.wheelDX = dx; display.wheelDY = dy - setTimeout(function () { - if (display.wheelStartX == null) { return } - var movedX = scroll.scrollLeft - display.wheelStartX - var movedY = scroll.scrollTop - display.wheelStartY - var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || - (movedX && display.wheelDX && movedX / display.wheelDX) - display.wheelStartX = display.wheelStartY = null - if (!sample) { return } - wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1) - ++wheelSamples - }, 200) - } else { - display.wheelDX += dx; display.wheelDY += dy - } - } -} - -// SCROLLBARS - -// Prepare DOM reads needed to update the scrollbars. Done in one -// shot to minimize update/measure roundtrips. -function measureForScrollbars(cm) { - var d = cm.display, gutterW = d.gutters.offsetWidth - var docH = Math.round(cm.doc.height + paddingVert(cm.display)) - return { - clientHeight: d.scroller.clientHeight, - viewHeight: d.wrapper.clientHeight, - scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, - viewWidth: d.wrapper.clientWidth, - barLeft: cm.options.fixedGutter ? gutterW : 0, - docHeight: docH, - scrollHeight: docH + scrollGap(cm) + d.barHeight, - nativeBarWidth: d.nativeBarWidth, - gutterWidth: gutterW - } -} - -function NativeScrollbars(place, scroll, cm) { - this.cm = cm - var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar") - var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar") - place(vert); place(horiz) - - on(vert, "scroll", function () { - if (vert.clientHeight) { scroll(vert.scrollTop, "vertical") } - }) - on(horiz, "scroll", function () { - if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal") } - }) - - this.checkedZeroWidth = false - // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). - if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px" } -} - -NativeScrollbars.prototype = copyObj({ - update: function(measure) { - var needsH = measure.scrollWidth > measure.clientWidth + 1 - var needsV = measure.scrollHeight > measure.clientHeight + 1 - var sWidth = measure.nativeBarWidth - - if (needsV) { - this.vert.style.display = "block" - this.vert.style.bottom = needsH ? sWidth + "px" : "0" - var totalHeight = measure.viewHeight - (needsH ? sWidth : 0) - // A bug in IE8 can cause this value to be negative, so guard it. - this.vert.firstChild.style.height = - Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px" - } else { - this.vert.style.display = "" - this.vert.firstChild.style.height = "0" - } - - if (needsH) { - this.horiz.style.display = "block" - this.horiz.style.right = needsV ? sWidth + "px" : "0" - this.horiz.style.left = measure.barLeft + "px" - var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0) - this.horiz.firstChild.style.width = - (measure.scrollWidth - measure.clientWidth + totalWidth) + "px" - } else { - this.horiz.style.display = "" - this.horiz.firstChild.style.width = "0" - } - - if (!this.checkedZeroWidth && measure.clientHeight > 0) { - if (sWidth == 0) { this.zeroWidthHack() } - this.checkedZeroWidth = true - } - - return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} - }, - setScrollLeft: function(pos) { - if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos } - if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz) } - }, - setScrollTop: function(pos) { - if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos } - if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert) } - }, - zeroWidthHack: function() { - var w = mac && !mac_geMountainLion ? "12px" : "18px" - this.horiz.style.height = this.vert.style.width = w - this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none" - this.disableHoriz = new Delayed - this.disableVert = new Delayed - }, - enableZeroWidthBar: function(bar, delay) { - bar.style.pointerEvents = "auto" - function maybeDisable() { - // To find out whether the scrollbar is still visible, we - // check whether the element under the pixel in the bottom - // left corner of the scrollbar box is the scrollbar box - // itself (when the bar is still visible) or its filler child - // (when the bar is hidden). If it is still visible, we keep - // it enabled, if it's hidden, we disable pointer events. - var box = bar.getBoundingClientRect() - var elt$$1 = document.elementFromPoint(box.left + 1, box.bottom - 1) - if (elt$$1 != bar) { bar.style.pointerEvents = "none" } - else { delay.set(1000, maybeDisable) } - } - delay.set(1000, maybeDisable) - }, - clear: function() { - var parent = this.horiz.parentNode - parent.removeChild(this.horiz) - parent.removeChild(this.vert) - } -}, NativeScrollbars.prototype) - -function NullScrollbars() {} - -NullScrollbars.prototype = copyObj({ - update: function() { return {bottom: 0, right: 0} }, - setScrollLeft: function() {}, - setScrollTop: function() {}, - clear: function() {} -}, NullScrollbars.prototype) - -function updateScrollbars(cm, measure) { - if (!measure) { measure = measureForScrollbars(cm) } - var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight - updateScrollbarsInner(cm, measure) - for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { - if (startWidth != cm.display.barWidth && cm.options.lineWrapping) - { updateHeightsInViewport(cm) } - updateScrollbarsInner(cm, measureForScrollbars(cm)) - startWidth = cm.display.barWidth; startHeight = cm.display.barHeight - } -} - -// Re-synchronize the fake scrollbars with the actual size of the -// content. -function updateScrollbarsInner(cm, measure) { - var d = cm.display - var sizes = d.scrollbars.update(measure) - - d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px" - d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px" - d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent" - - if (sizes.right && sizes.bottom) { - d.scrollbarFiller.style.display = "block" - d.scrollbarFiller.style.height = sizes.bottom + "px" - d.scrollbarFiller.style.width = sizes.right + "px" - } else { d.scrollbarFiller.style.display = "" } - if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { - d.gutterFiller.style.display = "block" - d.gutterFiller.style.height = sizes.bottom + "px" - d.gutterFiller.style.width = measure.gutterWidth + "px" - } else { d.gutterFiller.style.display = "" } -} - -var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars} - -function initScrollbars(cm) { - if (cm.display.scrollbars) { - cm.display.scrollbars.clear() - if (cm.display.scrollbars.addClass) - { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass) } - } - - cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { - cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller) - // Prevent clicks in the scrollbars from killing focus - on(node, "mousedown", function () { - if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0) } - }) - node.setAttribute("cm-not-content", "true") - }, function (pos, axis) { - if (axis == "horizontal") { setScrollLeft(cm, pos) } - else { setScrollTop(cm, pos) } - }, cm) - if (cm.display.scrollbars.addClass) - { addClass(cm.display.wrapper, cm.display.scrollbars.addClass) } -} - -// SCROLLING THINGS INTO VIEW - -// If an editor sits on the top or bottom of the window, partially -// scrolled out of view, this ensures that the cursor is visible. -function maybeScrollWindow(cm, coords) { - if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } - - var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null - if (coords.top + box.top < 0) { doScroll = true } - else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false } - if (doScroll != null && !phantom) { - var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (coords.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px;\n 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 } - var coords - for (var limit = 0; limit < 5; limit++) { - var changed = false - coords = cursorCoords(cm, pos) - var endCoords = !end || end == pos ? coords : cursorCoords(cm, end) - var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), - Math.min(coords.top, endCoords.top) - margin, - Math.max(coords.left, endCoords.left), - Math.max(coords.bottom, endCoords.bottom) + margin) - var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft - if (scrollPos.scrollTop != null) { - setScrollTop(cm, scrollPos.scrollTop) - if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true } - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft) - if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true } - } - if (!changed) { break } - } - return coords -} - -// Scroll a given set of coordinates into view (immediately). -function scrollIntoView(cm, x1, y1, x2, y2) { - var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2) - if (scrollPos.scrollTop != null) { setScrollTop(cm, scrollPos.scrollTop) } - if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft) } -} - -// Calculate a new scroll position needed to scroll the given -// rectangle into view. Returns an object with scrollTop and -// scrollLeft properties. When these are undefined, the -// vertical/horizontal position does not need to be adjusted. -function calculateScrollPos(cm, x1, y1, x2, y2) { - var display = cm.display, snapMargin = textHeight(cm.display) - if (y1 < 0) { y1 = 0 } - var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop - var screen = displayHeight(cm), result = {} - if (y2 - y1 > screen) { y2 = y1 + screen } - var docBottom = cm.doc.height + paddingVert(display) - var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin - if (y1 < screentop) { - result.scrollTop = atTop ? 0 : y1 - } else if (y2 > screentop + screen) { - var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen) - if (newTop != screentop) { result.scrollTop = newTop } - } - - var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0) - var tooWide = x2 - x1 > screenw - if (tooWide) { x2 = x1 + screenw } - if (x1 < 10) - { result.scrollLeft = 0 } - else if (x1 < screenleft) - { result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)) } - else if (x2 > screenw + screenleft - 3) - { result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw } - return result -} - -// Store a relative adjustment to the scroll position in the current -// operation (to be applied when the operation finishes). -function addToScrollPos(cm, left, top) { - if (left != null || top != null) { resolveScrollToPos(cm) } - if (left != null) - { cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left } - if (top != null) - { cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top } -} - -// Make sure that at the end of the operation the current cursor is -// shown. -function ensureCursorVisible(cm) { - resolveScrollToPos(cm) - var cur = cm.getCursor(), from = cur, to = cur - if (!cm.options.lineWrapping) { - from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur - to = Pos(cur.line, cur.ch + 1) - } - cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true} -} - -// When an operation has its scrollToPos property set, and another -// scroll action is applied before the end of the operation, this -// 'simulates' scrolling that position into view in a cheap way, so -// that the effect of intermediate scroll commands is not ignored. -function resolveScrollToPos(cm) { - var range$$1 = cm.curOp.scrollToPos - if (range$$1) { - cm.curOp.scrollToPos = null - var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to) - var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), - Math.min(from.top, to.top) - range$$1.margin, - Math.max(from.right, to.right), - Math.max(from.bottom, to.bottom) + range$$1.margin) - cm.scrollTo(sPos.scrollLeft, sPos.scrollTop) - } -} - -// 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 = { - cm: cm, - viewChanged: false, // Flag that indicates that lines might need to be redrawn - startHeight: cm.doc.height, // Used to detect need to update scrollbar - forceUpdate: false, // Used to force a redraw - updateInput: null, // Whether to reset the input textarea - typing: false, // Whether this reset should be careful to leave existing text (for compositing) - changeObjs: null, // Accumulated changes, for firing change events - cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on - cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already - selectionChanged: false, // Whether the selection needs to be redrawn - updateMaxLine: false, // Set when the widest line needs to be determined anew - scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet - scrollToPos: null, // Used to scroll to a specific position - focus: false, - id: ++nextOpId // Unique ID - } - pushOperation(cm.curOp) -} - -// Finish an operation, updating the display and signalling delayed events -function endOperation(cm) { - var op = cm.curOp - finishOperation(op, function (group) { - for (var i = 0; i < group.ops.length; i++) - { group.ops[i].cm.curOp = null } - endOperations(group) - }) -} - -// The DOM updates done when an operation finishes are batched so -// that the minimum number of relayouts are required. -function endOperations(group) { - var ops = group.ops - for (var i = 0; i < ops.length; i++) // Read DOM - { endOperation_R1(ops[i]) } - for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) - { endOperation_W1(ops[i$1]) } - for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM - { endOperation_R2(ops[i$2]) } - for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) - { endOperation_W2(ops[i$3]) } - for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM - { endOperation_finish(ops[i$4]) } -} - -function endOperation_R1(op) { - var cm = op.cm, display = cm.display - maybeClipScrollbars(cm) - if (op.updateMaxLine) { findMaxLine(cm) } - - op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || - op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || - op.scrollToPos.to.line >= display.viewTo) || - display.maxLineChanged && cm.options.lineWrapping - op.update = op.mustUpdate && - new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate) -} - -function endOperation_W1(op) { - op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update) -} - -function endOperation_R2(op) { - var cm = op.cm, display = cm.display - if (op.updatedDisplay) { updateHeightsInViewport(cm) } - - op.barMeasure = measureForScrollbars(cm) - - // If the max line changed since it was last measured, measure it, - // and ensure the document's width matches it. - // updateDisplay_W2 will use these properties to do the actual resizing - if (display.maxLineChanged && !cm.options.lineWrapping) { - op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3 - cm.display.sizerWidth = op.adjustWidthTo - op.barMeasure.scrollWidth = - Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth) - op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)) - } - - if (op.updatedDisplay || op.selectionChanged) - { op.preparedSelection = display.input.prepareSelection(op.focus) } -} - -function endOperation_W2(op) { - var cm = op.cm - - if (op.adjustWidthTo != null) { - cm.display.sizer.style.minWidth = op.adjustWidthTo + "px" - if (op.maxScrollLeft < cm.doc.scrollLeft) - { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true) } - cm.display.maxLineChanged = false - } - - var takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus()) - if (op.preparedSelection) - { cm.display.input.showSelection(op.preparedSelection, takeFocus) } - if (op.updatedDisplay || op.startHeight != cm.doc.height) - { updateScrollbars(cm, op.barMeasure) } - if (op.updatedDisplay) - { setDocumentHeight(cm, op.barMeasure) } - - if (op.selectionChanged) { restartBlink(cm) } - - if (cm.state.focused && op.updateInput) - { cm.display.input.reset(op.typing) } - if (takeFocus) { ensureFocus(op.cm) } -} - -function endOperation_finish(op) { - var cm = op.cm, display = cm.display, doc = cm.doc - - if (op.updatedDisplay) { postUpdateDisplay(cm, op.update) } - - // Abort mouse wheel delta measurement, when scrolling explicitly - if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) - { display.wheelStartX = display.wheelStartY = null } - - // Propagate the scroll position to the actual DOM scroller - if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { - doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)) - display.scrollbars.setScrollTop(doc.scrollTop) - display.scroller.scrollTop = doc.scrollTop - } - if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { - doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft)) - display.scrollbars.setScrollLeft(doc.scrollLeft) - display.scroller.scrollLeft = doc.scrollLeft - alignHorizontally(cm) - } - // If we need to scroll a specific position into view, do so. - if (op.scrollToPos) { - var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), - clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin) - if (op.scrollToPos.isCursor && cm.state.focused) { maybeScrollWindow(cm, coords) } - } - - // Fire events for markers that are hidden/unidden by editing or - // undoing - var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers - if (hidden) { for (var i = 0; i < hidden.length; ++i) - { if (!hidden[i].lines.length) { signal(hidden[i], "hide") } } } - if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) - { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide") } } } - - if (display.wrapper.offsetHeight) - { doc.scrollTop = cm.display.scroller.scrollTop } - - // Fire change events, and delayed event handlers - if (op.changeObjs) - { signal(cm, "changes", cm, op.changeObjs) } - if (op.update) - { op.update.finish() } -} - -// Run the given function in an operation -function runInOp(cm, f) { - if (cm.curOp) { return f() } - startOperation(cm) - try { return f() } - finally { endOperation(cm) } -} -// Wraps a function in an operation. Returns the wrapped function. -function operation(cm, f) { - return function() { - if (cm.curOp) { return f.apply(cm, arguments) } - startOperation(cm) - try { return f.apply(cm, arguments) } - finally { endOperation(cm) } - } -} -// Used to add methods to editor and doc instances, wrapping them in -// operations. -function methodOp(f) { - return function() { - if (this.curOp) { return f.apply(this, arguments) } - startOperation(this) - try { return f.apply(this, arguments) } - finally { endOperation(this) } - } -} -function docMethodOp(f) { - return function() { - var cm = this.cm - if (!cm || cm.curOp) { return f.apply(this, arguments) } - startOperation(cm) - try { return f.apply(this, arguments) } - finally { endOperation(cm) } - } -} - -// 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$1 = viewCuttingPoint(cm, from, from, -1) - if (cut$1) { - display.view = display.view.slice(0, cut$1.index) - display.viewTo = cut$1.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 -} - -function viewCuttingPoint(cm, oldN, newN, dir) { - var index = findViewIndex(cm, oldN), diff, view = cm.display.view - if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) - { return {index: index, lineN: newN} } - var n = cm.display.viewFrom - for (var i = 0; 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 -} - -// HIGHLIGHT WORKER - -function startWorker(cm, time) { - if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) - { cm.state.highlight.set(time, bind(highlightWorker, cm)) } -} - -function highlightWorker(cm) { - var doc = cm.doc - if (doc.frontier < doc.first) { doc.frontier = doc.first } - if (doc.frontier >= cm.display.viewTo) { return } - var end = +new Date + cm.options.workTime - var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)) - var changedLines = [] - - doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { - if (doc.frontier >= cm.display.viewFrom) { // Visible - var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength - var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true) - line.styles = highlighted.styles - var oldCls = line.styleClasses, newCls = highlighted.classes - if (newCls) { line.styleClasses = newCls } - else if (oldCls) { line.styleClasses = null } - var ischange = !oldStyles || oldStyles.length != line.styles.length || - oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass) - for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i] } - if (ischange) { changedLines.push(doc.frontier) } - line.stateAfter = tooLong ? state : copyState(doc.mode, state) - } else { - if (line.text.length <= cm.options.maxHighlightLength) - { processLine(cm, line.text, state) } - line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null - } - ++doc.frontier - if (+new Date > end) { - startWorker(cm, cm.options.workDelay) - return true - } - }) - if (changedLines.length) { runInOp(cm, function () { - for (var i = 0; i < changedLines.length; i++) - { regLineChange(cm, changedLines[i], "text") } - }) } -} - -// DISPLAY DRAWING - -function DisplayUpdate(cm, viewport, force) { - var display = cm.display - - this.viewport = viewport - // Store some values that we'll need later (but don't want to force a relayout for) - this.visible = visibleLines(display, cm.doc, viewport) - this.editorIsHidden = !display.wrapper.offsetWidth - this.wrapperHeight = display.wrapper.clientHeight - this.wrapperWidth = display.wrapper.clientWidth - this.oldDisplayWidth = displayWidth(cm) - this.force = force - this.dims = getDimensions(cm) - this.events = [] -} - -DisplayUpdate.prototype.signal = function(emitter, type) { - if (hasHandler(emitter, type)) - { this.events.push(arguments) } -} -DisplayUpdate.prototype.finish = function() { - var this$1 = this; - - for (var i = 0; i < this.events.length; i++) - { signal.apply(null, this$1.events[i]) } -} - -function maybeClipScrollbars(cm) { - var display = cm.display - if (!display.scrollbarsClipped && display.scroller.offsetWidth) { - display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth - display.heightForcer.style.height = scrollGap(cm) + "px" - display.sizer.style.marginBottom = -display.nativeBarWidth + "px" - display.sizer.style.borderRightWidth = scrollGap(cm) + "px" - display.scrollbarsClipped = true - } -} - -// Does the actual updating of the line display. Bails out -// (returning false) when there is nothing to be done and forced is -// false. -function updateDisplayIfNeeded(cm, update) { - var display = cm.display, doc = cm.doc - - if (update.editorIsHidden) { - resetView(cm) - return false - } - - // Bail out if the visible area is already rendered and nothing changed. - if (!update.force && - update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && - display.renderedView == display.view && countDirtyView(cm) == 0) - { return false } - - if (maybeUpdateLineNumberWidth(cm)) { - resetView(cm) - update.dims = getDimensions(cm) - } - - // Compute a suitable new viewport (from & to) - var end = doc.first + doc.size - var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first) - var to = Math.min(end, update.visible.to + cm.options.viewportMargin) - if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom) } - if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo) } - if (sawCollapsedSpans) { - from = visualLineNo(cm.doc, from) - to = visualLineEndNo(cm.doc, to) - } - - var different = from != display.viewFrom || to != display.viewTo || - display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth - adjustView(cm, from, to) - - display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)) - // Position the mover div to align with the current scroll position - cm.display.mover.style.top = display.viewOffset + "px" - - var toUpdate = countDirtyView(cm) - if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) - { return false } - - // For big changes, we hide the enclosing element during the - // update, since that speeds up the operations on most browsers. - var focused = activeElt() - if (toUpdate > 4) { display.lineDiv.style.display = "none" } - patchDisplay(cm, display.updateLineNumbers, update.dims) - if (toUpdate > 4) { display.lineDiv.style.display = "" } - display.renderedView = display.view - // There might have been a widget with a focused element that got - // hidden or updated, if so re-focus it. - if (focused && activeElt() != focused && focused.offsetHeight) { focused.focus() } - - // Prevent selection and cursors from interfering with the scroll - // width and height. - removeChildren(display.cursorDiv) - removeChildren(display.selectionDiv) - display.gutters.style.height = display.sizer.style.minHeight = 0 - - if (different) { - display.lastWrapHeight = update.wrapperHeight - display.lastWrapWidth = update.wrapperWidth - startWorker(cm, 400) - } - - display.updateLineNumbers = null - - return true -} - -function postUpdateDisplay(cm, update) { - var viewport = update.viewport - - for (var first = true;; first = false) { - if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { - // Clip forced viewport to actual scrollable area. - if (viewport && viewport.top != null) - { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)} } - // Updated line heights might result in the drawn area not - // actually covering the viewport. Keep looping until it does. - update.visible = visibleLines(cm.display, cm.doc, viewport) - if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) - { break } - } - if (!updateDisplayIfNeeded(cm, update)) { break } - updateHeightsInViewport(cm) - var barMeasure = measureForScrollbars(cm) - updateSelection(cm) - updateScrollbars(cm, barMeasure) - setDocumentHeight(cm, barMeasure) - } - - update.signal(cm, "update", cm) - if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { - update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo) - cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo - } -} - -function updateDisplaySimple(cm, viewport) { - var update = new DisplayUpdate(cm, viewport) - if (updateDisplayIfNeeded(cm, update)) { - updateHeightsInViewport(cm) - postUpdateDisplay(cm, update) - var barMeasure = measureForScrollbars(cm) - updateSelection(cm) - updateScrollbars(cm, barMeasure) - setDocumentHeight(cm, barMeasure) - update.finish() - } -} - -// Sync the actual display DOM structure with display.view, removing -// nodes for lines that are no longer in view, and creating the ones -// that are not there yet, and updating the ones that are out of -// date. -function patchDisplay(cm, updateNumbersFrom, dims) { - var display = cm.display, lineNumbers = cm.options.lineNumbers - var container = display.lineDiv, cur = container.firstChild - - function rm(node) { - var next = node.nextSibling - // Works around a throw-scroll bug in OS X Webkit - if (webkit && mac && cm.display.currentWheelTarget == node) - { node.style.display = "none" } - else - { node.parentNode.removeChild(node) } - return next - } - - var view = display.view, lineN = display.viewFrom - // Loop over the elements in the view, syncing cur (the DOM nodes - // in display.lineDiv) with the view as we go. - for (var i = 0; i < view.length; i++) { - var lineView = view[i] - if (lineView.hidden) { - } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet - var node = buildLineElement(cm, lineView, lineN, dims) - container.insertBefore(node, cur) - } else { // Already drawn - while (cur != lineView.node) { cur = rm(cur) } - var updateNumber = lineNumbers && updateNumbersFrom != null && - updateNumbersFrom <= lineN && lineView.lineNumber - if (lineView.changes) { - if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false } - updateLineForChanges(cm, lineView, lineN, dims) - } - if (updateNumber) { - removeChildren(lineView.lineNumber) - lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))) - } - cur = lineView.node.nextSibling - } - lineN += lineView.size - } - while (cur) { cur = rm(cur) } -} - -function updateGutterSpace(cm) { - var width = cm.display.gutters.offsetWidth - cm.display.sizer.style.marginLeft = width + "px" -} - -function setDocumentHeight(cm, measure) { - cm.display.sizer.style.minHeight = measure.docHeight + "px" - cm.display.heightForcer.style.top = measure.docHeight + "px" - cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px" -} - -// 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) - var i = 0 - for (; i < specs.length; ++i) { - var gutterClass = specs[i] - var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)) - if (gutterClass == "CodeMirror-linenumbers") { - cm.display.lineGutter = gElt - gElt.style.width = (cm.display.lineNumWidth || 1) + "px" - } - } - gutters.style.display = i ? "" : "none" - updateGutterSpace(cm) -} - -// 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) - } -} - -// 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) { - var this$1 = this; - - 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$1.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() { - var this$1 = this; - - var out = [] - for (var i = 0; i < this.ranges.length; i++) - { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)) } - return new Selection(out, this.primIndex) - }, - somethingSelected: function() { - var this$1 = this; - - for (var i = 0; i < this.ranges.length; i++) - { if (!this$1.ranges[i].empty()) { return true } } - return false - }, - contains: function(pos, end) { - var this$1 = this; - - if (!end) { end = pos } - for (var i = 0; i < this.ranges.length; i++) { - var range = this$1.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) -} - -// Compute the position of the end of a change (its 'to' property -// refers to the pre-change end). -function changeEnd(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) -} - -// Used to get the editor into a consistent state again when options change. - -function loadMode(cm) { - cm.doc.mode = 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) } -} - -// 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$$1) { - function spansFor(n) {return markedSpans ? markedSpans[n] : null} - function update(line, text, spans) { - updateLine(line, text, spans, estimateHeight$$1) - signalLater(line, "change", line, change) - } - function linesFor(start, end) { - var result = [] - for (var i = start; i < end; ++i) - { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)) } - return result - } - - var from = change.from, to = change.to, text = change.text - var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line) - var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line - - // Adjust the line structure - if (change.full) { - doc.insert(0, linesFor(0, text.length)) - doc.remove(text.length, doc.size - text.length) - } else if (isWholeLineUpdate(doc, change)) { - // This is a whole-line replace. Treated specially to make - // sure line objects move the way they are supposed to. - var added = linesFor(0, text.length - 1) - update(lastLine, lastLine.text, lastSpans) - if (nlines) { doc.remove(from.line, nlines) } - if (added.length) { doc.insert(from.line, added) } - } else if (firstLine == lastLine) { - if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans) - } else { - var added$1 = linesFor(1, text.length - 1) - added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1)) - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)) - doc.insert(from.line + 1, added$1) - } - } else if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)) - doc.remove(from.line + 1, nlines) - } else { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)) - update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans) - var added$2 = linesFor(1, text.length - 1) - if (nlines > 1) { doc.remove(from.line + 1, nlines - 1) } - doc.insert(from.line + 1, added$2) - } - - signalLater(doc, "change", doc, change) -} - -// 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) -} - -function History(startGen) { - // Arrays of change events and selections. Doing something adds an - // event to done and clears undo. Undoing moves events from done - // to undone, redoing moves them in the other direction. - this.done = []; this.undone = [] - this.undoDepth = Infinity - // Used to track when changes can be merged into a single undo - // event - this.lastModTime = this.lastSelTime = 0 - this.lastOp = this.lastSelOp = null - this.lastOrigin = this.lastSelOrigin = null - // Used by the isClean() method - this.generation = this.maxGeneration = startGen || 1 -} - -// Create a history change event from an updateDoc-style change -// object. -function historyChangeFromChange(doc, change) { - var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)} - attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1) - linkedDocs(doc, function (doc) { return 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, or 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 - var last - - 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 - last = lst(cur.changes) - if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { - // Optimized case for simple insertion -- don't want to add - // new changesets for every character typed - last.to = changeEnd(change) - } else { - // Add new sub-event - cur.changes.push(historyChangeFromChange(doc, change)) - } - } else { - // Can not be merged, start a new event. - var before = lst(hist.done) - if (!before || !before.ranges) - { pushSelectionToHistory(doc.sel, hist.done) } - cur = {changes: [historyChangeFromChange(doc, change)], - generation: hist.generation} - hist.done.push(cur) - while (hist.done.length > hist.undoDepth) { - hist.done.shift() - if (!hist.done[0].ranges) { hist.done.shift() } - } - } - hist.done.push(selAfter) - hist.generation = ++hist.maxGeneration - hist.lastModTime = hist.lastSelTime = time - hist.lastOp = hist.lastSelOp = opId - hist.lastOrigin = hist.lastSelOrigin = change.origin - - if (!last) { signal(doc, "historyAdded") } -} - -function selectionEventCanBeMerged(doc, origin, prev, sel) { - var ch = origin.charAt(0) - return ch == "*" || - ch == "+" && - prev.ranges.length == sel.ranges.length && - prev.somethingSelected() == sel.somethingSelected() && - new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) -} - -// Called whenever the selection changes, sets the new selection as -// the pending selection in the history, and pushes the old pending -// selection into the 'done' array when it was significantly -// different (in number of selected ranges, emptiness, or time). -function addSelectionToHistory(doc, sel, opId, options) { - var hist = doc.history, origin = options && options.origin - - // A new event is started when the previous origin does not match - // the current, or the origins don't allow matching. Origins - // starting with * are always merged, those starting with + are - // merged when similar and close together in time. - if (opId == hist.lastSelOp || - (origin && hist.lastSelOrigin == origin && - (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || - selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) - { hist.done[hist.done.length - 1] = sel } - else - { pushSelectionToHistory(sel, hist.done) } - - hist.lastSelTime = +new Date - hist.lastSelOrigin = origin - hist.lastSelOp = opId - if (options && options.clearRedo !== false) - { clearSelectionEvents(hist.undone) } -} - -function pushSelectionToHistory(sel, dest) { - var top = lst(dest) - if (!(top && top.ranges && top.equals(sel))) - { dest.push(sel) } -} - -// Used to store marked span information in the history. -function attachLocalSpans(doc, change, from, to) { - var existing = change["spans_" + doc.id], n = 0 - doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { - if (line.markedSpans) - { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans } - ++n - }) -} - -// When un/re-doing restores text containing marked spans, those -// that have been explicitly cleared should not be restored. -function removeClearedSpans(spans) { - if (!spans) { return null } - var out - for (var i = 0; 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 } - var nw = [] - for (var i = 0; i < change.text.length; ++i) - { nw.push(removeClearedSpans(found[i])) } - return nw -} - -// 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 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) { - var copy = [] - for (var i = 0; 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 = void 0 - 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 -} - -// 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) { - var out = [] - for (var i = 0; i < doc.sel.ranges.length; i++) - { out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null) } - var newSel = normalizeSelection(out, doc.sel.primIndex) - setSelection(doc, newSel, options) -} - -// Updates a single range in the selection. -function replaceOneSelection(doc, i, range, options) { - var ranges = doc.sel.ranges.slice(0) - ranges[i] = range - setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options) -} - -// Reset the selection to a single range. -function setSimpleSelection(doc, anchor, head, options) { - setSelection(doc, simpleSelection(anchor, head), options) -} - -// Give beforeSelectionChange handlers a change to influence a -// selection update. -function filterSelectionChange(doc, sel, options) { - var obj = { - ranges: sel.ranges, - update: function(ranges) { - var this$1 = this; - - this.ranges = [] - for (var i = 0; i < ranges.length; i++) - { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), - clipPos(doc, ranges[i].head)) } - }, - origin: options && options.origin - } - signal(doc, "beforeSelectionChange", doc, obj) - if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj) } - if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) } - else { return sel } -} - -function setSelectionReplaceHistory(doc, sel, options) { - var done = doc.history.done, last = lst(done) - if (last && last.ranges) { - done[done.length - 1] = sel - setSelectionNoUndo(doc, sel, options) - } else { - setSelection(doc, sel, options) - } -} - -// Set a new selection. -function setSelection(doc, sel, options) { - setSelectionNoUndo(doc, sel, options) - addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options) -} - -function setSelectionNoUndo(doc, sel, options) { - if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) - { sel = filterSelectionChange(doc, sel, options) } - - var bias = options && options.bias || - (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1) - setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)) - - if (!(options && options.scroll === false) && doc.cm) - { ensureCursorVisible(doc.cm) } -} - -function setSelectionInner(doc, sel) { - if (sel.equals(doc.sel)) { return } - - doc.sel = sel - - if (doc.cm) { - doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true - signalCursorActivity(doc.cm) - } - signalLater(doc, "cursorActivity", doc) -} - -// Verify that the selection does not partially select any atomic -// marked ranges. -function reCheckSelection(doc) { - setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll) -} - -// Return a selection that does not partially select any atomic -// ranges. -function skipAtomicInSelection(doc, sel, bias, mayClear) { - var out - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i] - var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i] - var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear) - var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear) - if (out || newAnchor != range.anchor || newHead != range.head) { - if (!out) { out = sel.ranges.slice(0, i) } - out[i] = new Range(newAnchor, newHead) - } - } - return out ? normalizeSelection(out, sel.primIndex) : sel -} - -function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { - var line = getLine(doc, pos.line) - if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { - var sp = line.markedSpans[i], m = sp.marker - if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && - (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { - if (mayClear) { - signal(m, "beforeCursorEnter") - if (m.explicitlyCleared) { - if (!line.markedSpans) { break } - else {--i; continue} - } - } - if (!m.atomic) { continue } - - if (oldPos) { - var near = m.find(dir < 0 ? 1 : -1), diff = void 0 - if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) - { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null) } - if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) - { return skipAtomicInner(doc, near, pos, dir, mayClear) } - } - - var far = m.find(dir < 0 ? -1 : 1) - if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) - { far = movePos(doc, far, dir, far.line == pos.line ? line : null) } - return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null - } - } } - return pos -} - -// Ensure a given position is not inside an atomic range. -function skipAtomic(doc, pos, oldPos, bias, mayClear) { - var dir = bias || 1 - var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || - (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || - skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || - (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)) - if (!found) { - doc.cantEdit = true - return Pos(doc.first, 0) - } - return found -} - -function movePos(doc, pos, dir, line) { - if (dir < 0 && pos.ch == 0) { - if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } - else { return null } - } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { - if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } - else { return null } - } else { - return new Pos(pos.line, pos.ch + dir) - } -} - -function selectAll(cm) { - cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll) -} - -// UPDATING - -// 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 () { return obj.canceled = true; } - } - if (update) { obj.update = function (from, to, text, origin) { - if (from) { obj.from = clipPos(doc, from) } - if (to) { obj.to = clipPos(doc, to) } - if (text) { obj.text = text } - if (origin !== undefined) { obj.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 && !allowSelectionOnly) { 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) - var i = 0 - for (; 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") - - var loop = function ( i ) { - var change = event.changes[i] - change.origin = type - if (filter && !filterChange(doc, change, false)) { - source.length = 0 - return {} - } - - antiChanges.push(historyChangeFromChange(doc, change)) - - var after = i ? computeSelAfterChange(doc, change) : lst(source) - makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)) - if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}) } - var rebased = [] - - // Propagate to the linked documents - linkedDocs(doc, function (doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change) - rebased.push(doc.history) - } - makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)) - }) - }; - - for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { - var returned = loop( i$1 ); - - if ( returned ) return returned.v; - } -} - -// Sub-views need their line numbers shifted when text is added -// above or below them in the parent document. -function shiftDoc(doc, distance) { - if (distance == 0) { return } - doc.first += distance - doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( - Pos(range.anchor.line + distance, range.anchor.ch), - Pos(range.head.line + distance, range.head.ch) - ); }), doc.sel.primIndex) - if (doc.cm) { - regChange(doc.cm, doc.first, doc.first - distance, distance) - for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) - { regLineChange(doc.cm, l, "gutter") } - } -} - -// More lower-level change function, handling only a single document -// (not linked ones). -function makeChangeSingleDoc(doc, change, selAfter, spans) { - if (doc.cm && !doc.cm.curOp) - { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } - - if (change.to.line < doc.first) { - shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)) - return - } - if (change.from.line > doc.lastLine()) { return } - - // Clip the change to the size of this doc - if (change.from.line < doc.first) { - var shift = change.text.length - 1 - (doc.first - change.from.line) - shiftDoc(doc, shift) - change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), - text: [lst(change.text)], origin: change.origin} - } - var last = doc.lastLine() - if (change.to.line > last) { - change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), - text: [change.text[0]], origin: change.origin} - } - - change.removed = getBetween(doc, change.from, change.to) - - if (!selAfter) { selAfter = computeSelAfterChange(doc, change) } - if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans) } - else { updateDoc(doc, change, spans) } - setSelectionNoUndo(doc, selAfter, sel_dontScroll) -} - -// Handle the interaction of a change to a document with the editor -// that this document is part of. -function makeChangeSingleDocInEditor(cm, change, spans) { - var doc = cm.doc, display = cm.display, from = change.from, to = change.to - - var recomputeMaxLength = false, checkWidthStart = from.line - if (!cm.options.lineWrapping) { - checkWidthStart = lineNo(visualLine(getLine(doc, from.line))) - doc.iter(checkWidthStart, to.line + 1, function (line) { - if (line == display.maxLine) { - recomputeMaxLength = true - return true - } - }) - } - - if (doc.sel.contains(change.from, change.to) > -1) - { signalCursorActivity(cm) } - - updateDoc(doc, change, spans, estimateHeight(cm)) - - if (!cm.options.lineWrapping) { - doc.iter(checkWidthStart, from.line + change.text.length, function (line) { - var len = lineLength(line) - if (len > display.maxLineLength) { - display.maxLine = line - display.maxLineLength = len - display.maxLineChanged = true - recomputeMaxLength = false - } - }) - if (recomputeMaxLength) { cm.curOp.updateMaxLine = true } - } - - // Adjust frontier, schedule worker - doc.frontier = Math.min(doc.frontier, from.line) - startWorker(cm, 400) - - var lendiff = change.text.length - (to.line - from.line) - 1 - // Remember that these lines changed, for updating the display - if (change.full) - { regChange(cm) } - else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) - { regLineChange(cm, from.line, "text") } - else - { regChange(cm, from.line, to.line + 1, lendiff) } - - var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change") - if (changeHandler || changesHandler) { - var obj = { - from: from, to: to, - text: change.text, - removed: change.removed, - origin: change.origin - } - if (changeHandler) { signalLater(cm, "change", cm, obj) } - if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj) } - } - cm.display.selForContextMenu = null -} - -function replaceRange(doc, code, from, to, origin) { - if (!to) { to = from } - if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp } - if (typeof code == "string") { code = doc.splitLines(code) } - makeChange(doc, {from: from, to: to, text: code, origin: origin}) -} - -// 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$1 = 0; j$1 < sub.changes.length; ++j$1) { - var cur = sub.changes[j$1] - 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) -} - -// Utility for applying a change to a line by handle or number, -// returning the number and optionally registering the line as -// changed. -function changeLine(doc, handle, changeType, op) { - var no = handle, line = handle - if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)) } - else { no = lineNo(handle) } - if (no == null) { return null } - if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType) } - return line -} - -// 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) { - var this$1 = this; - - this.lines = lines - this.parent = null - var height = 0 - for (var i = 0; i < lines.length; ++i) { - lines[i].parent = this$1 - 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) { - var this$1 = this; - - for (var i = at, e = at + n; i < e; ++i) { - var line = this$1.lines[i] - this$1.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) { - var this$1 = this; - - 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$1 } - }, - // Used to iterate over a part of the tree. - iterN: function(at, n, op) { - var this$1 = this; - - for (var e = at + n; at < e; ++at) - { if (op(this$1.lines[at])) { return true } } - } -} - -function BranchChunk(children) { - var this$1 = this; - - 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$1 - } - this.size = size - this.height = height - this.parent = null -} - -BranchChunk.prototype = { - chunkSize: function() { return this.size }, - removeInner: function(at, n) { - var this$1 = this; - - this.size -= n - for (var i = 0; i < this.children.length; ++i) { - var child = this$1.children[i], sz = child.chunkSize() - if (at < sz) { - var rm = Math.min(n, sz - at), oldHeight = child.height - child.removeInner(at, rm) - this$1.height -= oldHeight - child.height - if (sz == rm) { this$1.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) { - var this$1 = this; - - for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines) } - }, - insertInner: function(at, lines, height) { - var this$1 = this; - - this.size += lines.length - this.height += height - for (var i = 0; i < this.children.length; ++i) { - var child = this$1.children[i], sz = child.chunkSize() - if (at <= sz) { - child.insertInner(at, lines, height) - if (child.lines && child.lines.length > 50) { - // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. - // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. - var remaining = child.lines.length % 25 + 25 - for (var pos = remaining; pos < child.lines.length;) { - var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)) - child.height -= leaf.height - this$1.children.splice(++i, 0, leaf) - leaf.parent = this$1 - } - child.lines = child.lines.slice(0, remaining) - this$1.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) { - var this$1 = this; - - for (var i = 0; i < this.children.length; ++i) { - var child = this$1.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 } - } - } -} - -// Line widgets are block elements displayed above or below a line. - -function LineWidget(doc, node, options) { - var this$1 = this; - - if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) - { this$1[opt] = options[opt] } } } - this.doc = doc - this.node = node -} -eventMixin(LineWidget) - -function adjustScrollWhenAboveVisible(cm, line, diff) { - if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) - { addToScrollPos(cm, null, diff) } -} - -LineWidget.prototype.clear = function() { - var this$1 = this; - - var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line) - if (no == null || !ws) { return } - for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1) } } - if (!ws.length) { line.widgets = null } - var height = widgetHeight(this) - updateLineHeight(line, Math.max(0, line.height - height)) - if (cm) { runInOp(cm, function () { - adjustScrollWhenAboveVisible(cm, line, -height) - regLineChange(cm, no, "widget") - }) } -} -LineWidget.prototype.changed = function() { - var oldH = this.height, cm = this.doc.cm, line = this.line - this.height = null - var diff = widgetHeight(this) - oldH - if (!diff) { return } - updateLineHeight(line, line.height + diff) - if (cm) { runInOp(cm, function () { - cm.curOp.forceUpdate = true - adjustScrollWhenAboveVisible(cm, line, diff) - }) } -} - -function addLineWidget(doc, handle, node, options) { - var widget = new LineWidget(doc, node, options) - var cm = doc.cm - if (cm && widget.noHScroll) { cm.display.alignWidgets = true } - changeLine(doc, handle, "widget", function (line) { - var widgets = line.widgets || (line.widgets = []) - if (widget.insertAt == null) { widgets.push(widget) } - else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget) } - widget.line = line - if (cm && !lineIsHidden(doc, line)) { - var aboveVisible = heightAtLine(line) < doc.scrollTop - updateLineHeight(line, line.height + widgetHeight(widget)) - if (aboveVisible) { addToScrollPos(cm, null, widget.height) } - cm.curOp.forceUpdate = true - } - return true - }) - return widget -} - -// 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. - -// 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 - -function TextMarker(doc, type) { - this.lines = [] - this.type = type - this.doc = doc - this.id = ++nextMarkerId -} -eventMixin(TextMarker) - -// Clear the marker. -TextMarker.prototype.clear = function() { - var this$1 = this; - - 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$1.lines[i] - var span = getMarkedSpanFor(line.markedSpans, this$1) - if (cm && !this$1.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$1.collapsed && !lineIsHidden(this$1.doc, line) && cm) - { updateLineHeight(line, textHeight(cm.display)) } - } - if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { - var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual) - if (len > cm.display.maxLineLength) { - cm.display.maxLine = visual - cm.display.maxLineLength = len - cm.display.maxLineChanged = true - } - } } - - if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1) } - this.lines.length = 0 - this.explicitlyCleared = true - if (this.atomic && this.doc.cantEdit) { - this.doc.cantEdit = false - if (cm) { reCheckSelection(cm.doc) } - } - if (cm) { signalLater(cm, "markerCleared", cm, this) } - if (withOp) { endOperation(cm) } - if (this.parent) { this.parent.clear() } -} - -// Find the position of the marker in the document. Returns a {from, -// to} object by default. Side can be passed to get a specific side -// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the -// Pos objects returned contain a line object, rather than a line -// number (used to prevent looking up the same line twice). -TextMarker.prototype.find = function(side, lineObj) { - var this$1 = this; - - if (side == null && this.type == "bookmark") { side = 1 } - var from, to - for (var i = 0; i < this.lines.length; ++i) { - var line = this$1.lines[i] - var span = getMarkedSpanFor(line.markedSpans, this$1) - 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) - } -} - -// Create a marker, wire it up to the right lines, and -function markText(doc, from, to, options, type) { - // Shared markers (across linked documents) are handled separately - // (markTextShared will call out to this again, once per - // document). - if (options && options.shared) { return markTextShared(doc, from, to, options, type) } - // Ensure we are in an operation. - if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } - - var marker = new TextMarker(doc, type), diff = cmp(from, to) - if (options) { copyObj(options, marker, false) } - // Don't connect empty markers unless clearWhenEmpty is false - if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) - { return marker } - if (marker.replacedWith) { - // Showing up as a widget implies collapsed (widget replaces text) - marker.collapsed = true - marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget") - if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true") } - if (options.insertLeft) { marker.widgetNode.insertLeft = true } - } - if (marker.collapsed) { - if (conflictingCollapsedRange(doc, from.line, from, to, marker) || - from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) - { throw new Error("Inserting collapsed marker partially overlapping an existing one") } - seeCollapsedSpans() - } - - 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 () { return marker.clear(); }) } - - if (marker.readOnly) { - seeReadOnlySpans() - if (doc.history.done.length || doc.history.undone.length) - { doc.clearHistory() } - } - if (marker.collapsed) { - marker.id = ++nextMarkerId - marker.atomic = true - } - if (cm) { - // Sync editor state - if (updateMaxLine) { cm.curOp.updateMaxLine = true } - if (marker.collapsed) - { regChange(cm, from.line, to.line + 1) } - else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) - { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text") } } - if (marker.atomic) { reCheckSelection(cm.doc) } - signalLater(cm, "markerAdded", cm, marker) - } - return marker -} - -// SHARED TEXTMARKERS - -// A shared marker spans multiple linked documents. It is -// implemented as a meta-marker-object controlling multiple normal -// markers. -function SharedTextMarker(markers, primary) { - var this$1 = this; - - this.markers = markers - this.primary = primary - for (var i = 0; i < markers.length; ++i) - { markers[i].parent = this$1 } -} -eventMixin(SharedTextMarker) - -SharedTextMarker.prototype.clear = function() { - var this$1 = this; - - if (this.explicitlyCleared) { return } - this.explicitlyCleared = true - for (var i = 0; i < this.markers.length; ++i) - { this$1.markers[i].clear() } - signalLater(this, "clear") -} -SharedTextMarker.prototype.find = function(side, lineObj) { - return this.primary.find(side, lineObj) -} - -function markTextShared(doc, from, to, options, type) { - options = copyObj(options) - options.shared = false - var markers = [markText(doc, from, to, options, type)], primary = markers[0] - var widget = options.widgetNode - linkedDocs(doc, function (doc) { - if (widget) { options.widgetNode = widget.cloneNode(true) } - markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)) - for (var i = 0; i < doc.linked.length; ++i) - { if (doc.linked[i].isParent) { return } } - primary = lst(markers) - }) - return new SharedTextMarker(markers, primary) -} - -function findSharedMarkers(doc) { - return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) -} - -function copySharedMarkers(doc, markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], pos = marker.find() - var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to) - if (cmp(mFrom, mTo)) { - var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type) - marker.markers.push(subMark) - subMark.parent = marker - } - } -} - -function detachSharedMarkers(markers) { - var loop = function ( i ) { - var marker = markers[i], linked = [marker.primary.doc] - linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }) - for (var j = 0; j < marker.markers.length; j++) { - var subMarker = marker.markers[j] - if (indexOf(linked, subMarker.doc) == -1) { - subMarker.parent = null - marker.markers.splice(j--, 1) - } - } - }; - - for (var i = 0; i < markers.length; i++) loop( i ); -} - -var nextDocId = 0 -var Doc = function(text, mode, firstLine, lineSep) { - if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep) } - if (firstLine == null) { firstLine = 0 } - - BranchChunk.call(this, [new LeafChunk([new Line("", null)])]) - this.first = firstLine - this.scrollTop = this.scrollLeft = 0 - this.cantEdit = false - this.cleanGeneration = 1 - this.frontier = firstLine - var start = Pos(firstLine, 0) - this.sel = simpleSelection(start) - this.history = new History(null) - this.id = ++nextDocId - this.modeOption = mode - this.lineSep = lineSep - this.extend = false - - if (typeof text == "string") { text = this.splitLines(text) } - updateDoc(this, {from: start, to: start, text: text}) - setSelection(this, simpleSelection(start), sel_dontScroll) -} - -Doc.prototype = createObj(BranchChunk.prototype, { - constructor: Doc, - // Iterate over the document. Supports two forms -- with only one - // argument, it calls that for each line in the document. With - // three, it iterates over the range given by the first two (with - // the second being non-inclusive). - iter: function(from, to, op) { - if (op) { this.iterN(from - this.first, to - from, op) } - else { this.iterN(this.first, this.first + this.size, from) } - }, - - // Non-public interface for adding and removing lines. - insert: function(at, lines) { - var height = 0 - for (var i = 0; i < lines.length; ++i) { height += lines[i].height } - this.insertInner(at - this.first, lines, height) - }, - remove: function(at, n) { this.removeInner(at - this.first, n) }, - - // From here, the methods are part of the public interface. Most - // are also available from CodeMirror (editor) instances. - - getValue: function(lineSep) { - var lines = getLines(this, this.first, this.first + this.size) - if (lineSep === false) { return lines } - return lines.join(lineSep || this.lineSeparator()) - }, - setValue: docMethodOp(function(code) { - var top = Pos(this.first, 0), last = this.first + this.size - 1 - makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), - text: this.splitLines(code), origin: "setValue", full: true}, true) - setSelection(this, simpleSelection(top)) - }), - replaceRange: function(code, from, to, origin) { - from = clipPos(this, from) - to = to ? clipPos(this, to) : from - replaceRange(this, code, from, to, origin) - }, - getRange: function(from, to, lineSep) { - var lines = getBetween(this, clipPos(this, from), clipPos(this, to)) - if (lineSep === false) { return lines } - return lines.join(lineSep || this.lineSeparator()) - }, - - getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, - - getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, - getLineNumber: function(line) {return lineNo(line)}, - - getLineHandleVisualStart: function(line) { - if (typeof line == "number") { line = getLine(this, line) } - return visualLine(line) - }, - - lineCount: function() {return this.size}, - firstLine: function() {return this.first}, - lastLine: function() {return this.first + this.size - 1}, - - clipPos: function(pos) {return clipPos(this, pos)}, - - getCursor: function(start) { - var range$$1 = this.sel.primary(), pos - if (start == null || start == "head") { pos = range$$1.head } - else if (start == "anchor") { pos = range$$1.anchor } - else if (start == "end" || start == "to" || start === false) { pos = range$$1.to() } - else { pos = range$$1.from() } - return pos - }, - listSelections: function() { return this.sel.ranges }, - somethingSelected: function() {return this.sel.somethingSelected()}, - - setCursor: docMethodOp(function(line, ch, options) { - setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options) - }), - setSelection: docMethodOp(function(anchor, head, options) { - setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options) - }), - extendSelection: docMethodOp(function(head, other, options) { - extendSelection(this, clipPos(this, head), other && clipPos(this, other), options) - }), - extendSelections: docMethodOp(function(heads, options) { - extendSelections(this, clipPosArray(this, heads), options) - }), - extendSelectionsBy: docMethodOp(function(f, options) { - var heads = map(this.sel.ranges, f) - extendSelections(this, clipPosArray(this, heads), options) - }), - setSelections: docMethodOp(function(ranges, primary, options) { - var this$1 = this; - - if (!ranges.length) { return } - var out = [] - for (var i = 0; i < ranges.length; i++) - { out[i] = new Range(clipPos(this$1, ranges[i].anchor), - clipPos(this$1, 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 this$1 = this; - - var ranges = this.sel.ranges, lines - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()) - lines = lines ? lines.concat(sel) : sel - } - if (lineSep === false) { return lines } - else { return lines.join(lineSep || this.lineSeparator()) } - }, - getSelections: function(lineSep) { - var this$1 = this; - - var parts = [], ranges = this.sel.ranges - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()) - if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()) } - parts[i] = sel - } - return parts - }, - replaceSelection: function(code, collapse, origin) { - var dup = [] - for (var i = 0; i < this.sel.ranges.length; i++) - { dup[i] = code } - this.replaceSelections(dup, collapse, origin || "+input") - }, - replaceSelections: docMethodOp(function(code, collapse, origin) { - var this$1 = this; - - var changes = [], sel = this.sel - for (var i = 0; i < sel.ranges.length; i++) { - var range$$1 = sel.ranges[i] - changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin} - } - var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse) - for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) - { makeChange(this$1, changes[i$1]) } - 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$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone } } - return {undo: done, redo: undone} - }, - clearHistory: function() {this.history = new History(this.history.maxGeneration)}, - - markClean: function() { - this.cleanGeneration = this.changeGeneration(true) - }, - changeGeneration: function(forceSplit) { - if (forceSplit) - { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null } - return this.history.generation - }, - isClean: function (gen) { - return this.history.generation == (gen || this.cleanGeneration) - }, - - getHistory: function() { - return {done: copyHistoryArray(this.history.done), - undone: copyHistoryArray(this.history.undone)} - }, - setHistory: function(histData) { - var hist = this.history = new History(this.history.maxGeneration) - hist.done = copyHistoryArray(histData.done.slice(0), null, true) - hist.undone = copyHistoryArray(histData.undone.slice(0), null, true) - }, - - addLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass" - if (!line[prop]) { line[prop] = cls } - else if (classTest(cls).test(line[prop])) { return false } - else { line[prop] += " " + cls } - return true - }) - }), - removeLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass" - var cur = line[prop] - if (!cur) { return false } - else if (cls == null) { line[prop] = null } - else { - var found = cur.match(classTest(cls)) - if (!found) { return false } - var end = found.index + found[0].length - line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null - } - return true - }) - }), - - addLineWidget: docMethodOp(function(handle, node, options) { - return addLineWidget(this, handle, node, options) - }), - removeLineWidget: function(widget) { widget.clear() }, - - markText: function(from, to, options) { - return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") - }, - setBookmark: function(pos, options) { - var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), - insertLeft: options && options.insertLeft, - clearWhenEmpty: false, shared: options && options.shared, - handleMouseEvents: options && options.handleMouseEvents} - pos = clipPos(this, pos) - return markText(this, pos, pos, realOpts, "bookmark") - }, - findMarksAt: function(pos) { - pos = clipPos(this, pos) - var markers = [], spans = getLine(this, pos.line).markedSpans - if (spans) { for (var i = 0; i < spans.length; ++i) { - var span = spans[i] - if ((span.from == null || span.from <= pos.ch) && - (span.to == null || span.to >= pos.ch)) - { markers.push(span.marker.parent || span.marker) } - } } - return markers - }, - findMarks: function(from, to, filter) { - from = clipPos(this, from); to = clipPos(this, to) - var found = [], lineNo$$1 = 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 (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to || - span.from == null && lineNo$$1 != from.line || - span.from != null && lineNo$$1 == to.line && span.from >= to.ch) && - (!filter || filter(span.marker))) - { found.push(span.marker.parent || span.marker) } - } } - ++lineNo$$1 - }) - 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$$1 = this.first, sepSize = this.lineSeparator().length - this.iter(function (line) { - var sz = line.text.length + sepSize - if (sz > off) { ch = off; return true } - off -= sz - ++lineNo$$1 - }) - return clipPos(this, Pos(lineNo$$1, ch)) - }, - indexFromPos: function (coords) { - coords = clipPos(this, coords) - var index = coords.ch - if (coords.line < this.first || coords.ch < 0) { return 0 } - var sepSize = this.lineSeparator().length - this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value - index += line.text.length + sepSize - }) - return index - }, - - copy: function(copyHistory) { - var doc = new Doc(getLines(this, this.first, this.first + this.size), - this.modeOption, this.first, this.lineSep) - doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft - doc.sel = this.sel - doc.extend = false - if (copyHistory) { - doc.history.undoDepth = this.history.undoDepth - doc.setHistory(this.getHistory()) - } - return doc - }, - - linkedDoc: function(options) { - if (!options) { options = {} } - var from = this.first, to = this.first + this.size - if (options.from != null && options.from > from) { from = options.from } - if (options.to != null && options.to < to) { to = options.to } - var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep) - if (options.sharedHist) { copy.history = this.history - ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}) - copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}] - copySharedMarkers(copy, findSharedMarkers(this)) - return copy - }, - unlinkDoc: function(other) { - var this$1 = this; - - if (other instanceof CodeMirror$1) { other = other.doc } - if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { - var link = this$1.linked[i] - if (link.doc != other) { continue } - this$1.linked.splice(i, 1) - other.unlinkDoc(this$1) - detachSharedMarkers(findSharedMarkers(this$1)) - break - } } - // If the histories were shared, split them again - if (other.history == this.history) { - var splitIds = [other.id] - linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true) - other.history = new History(null) - other.history.done = copyHistoryArray(this.history.done, splitIds) - other.history.undone = copyHistoryArray(this.history.undone, splitIds) - } - }, - iterLinkedDocs: function(f) {linkedDocs(this, f)}, - - getMode: function() {return this.mode}, - getEditor: function() {return this.cm}, - - splitLines: function(str) { - if (this.lineSep) { return str.split(this.lineSep) } - return splitLinesAuto(str) - }, - lineSeparator: function() { return this.lineSep || "\n" } -}) - -// Public alias. -Doc.prototype.eachLine = Doc.prototype.iter - -// Kludge to work around strange IE behavior where it'll sometimes -// re-fire a series of drag-related events right after the drop (#1551) -var lastDrop = 0 - -function onDrop(e) { - var cm = this - clearDragCursor(cm) - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) - { return } - e_preventDefault(e) - if (ie) { lastDrop = +new Date } - var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files - if (!pos || cm.isReadOnly()) { return } - // Might be a file drop, in which case we simply extract the text - // and insert it. - if (files && files.length && window.FileReader && window.File) { - var n = files.length, text = Array(n), read = 0 - var loadFile = function (file, i) { - if (cm.options.allowDropFileTypes && - indexOf(cm.options.allowDropFileTypes, file.type) == -1) - { return } - - var reader = new FileReader - reader.onload = operation(cm, function () { - var content = reader.result - if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = "" } - text[i] = content - if (++read == n) { - pos = clipPos(cm.doc, pos) - var change = {from: pos, to: pos, - text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), - origin: "paste"} - makeChange(cm.doc, change) - setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))) - } - }) - reader.readAsText(file) - } - for (var i = 0; i < n; ++i) { loadFile(files[i], i) } - } else { // Normal drop - // Don't do a replace if the drop happened inside of the selected text. - if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { - cm.state.draggingText(e) - // Ensure the editor is re-focused - setTimeout(function () { return cm.display.input.focus(); }, 20) - return - } - try { - var text$1 = e.dataTransfer.getData("Text") - if (text$1) { - var selected - if (cm.state.draggingText && !cm.state.draggingText.copy) - { selected = cm.listSelections() } - setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)) - if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) - { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag") } } - cm.replaceSelection(text$1, "around", "paste") - cm.display.input.focus() - } - } - catch(e){} - } -} - -function onDragStart(cm, e) { - if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } - - e.dataTransfer.setData("Text", cm.getSelection()) - e.dataTransfer.effectAllowed = "copyMove" - - // Use dummy image instead of default browsers image. - // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. - if (e.dataTransfer.setDragImage && !safari) { - var img = elt("img", null, null, "position: fixed; left: 0; top: 0;") - img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" - if (presto) { - img.width = img.height = 1 - cm.display.wrapper.appendChild(img) - // Force a relayout, or Opera won't use our image for some obscure reason - img._top = img.offsetTop - } - e.dataTransfer.setDragImage(img, 0, 0) - if (presto) { img.parentNode.removeChild(img) } - } -} - -function onDragOver(cm, e) { - var pos = posFromMouse(cm, e) - if (!pos) { return } - var frag = document.createDocumentFragment() - drawSelectionCursor(cm, pos, frag) - if (!cm.display.dragCursor) { - cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors") - cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv) - } - removeChildrenAndAdd(cm.display.dragCursor, frag) -} - -function clearDragCursor(cm) { - if (cm.display.dragCursor) { - cm.display.lineSpace.removeChild(cm.display.dragCursor) - cm.display.dragCursor = null - } -} - -// These must be handled carefully, because naively registering a -// handler for each editor will cause the editors to never be -// garbage collected. - -function forEachCodeMirror(f) { - if (!document.body.getElementsByClassName) { return } - var byClass = document.body.getElementsByClassName("CodeMirror") - for (var i = 0; i < byClass.length; i++) { - var cm = byClass[i].CodeMirror - if (cm) { f(cm) } - } -} - -var globalsRegistered = false -function ensureGlobalHandlers() { - if (globalsRegistered) { return } - registerGlobalHandlers() - globalsRegistered = true -} -function registerGlobalHandlers() { - // When the window resizes, we need to refresh active editors. - var resizeTimer - on(window, "resize", function () { - if (resizeTimer == null) { resizeTimer = setTimeout(function () { - resizeTimer = null - forEachCodeMirror(onResize) - }, 100) } - }) - // When the window loses focus, we want to show the editor as blurred - on(window, "blur", function () { return forEachCodeMirror(onBlur); }) -} -// Called when the window resizes -function onResize(cm) { - var d = cm.display - if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) - { return } - // Might be a text scaling operation, clear size caches. - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null - d.scrollbarsClipped = false - cm.setSize() -} - -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", - 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", - 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", - 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", - 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" -} - -// Number keys -for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i) } -// Alphabetic keys -for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1) } -// Function keys -for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2 } - -var keyMap = {} - -keyMap.basic = { - "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", - "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", - "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", - "Tab": "defaultTab", "Shift-Tab": "indentAuto", - "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", - "Esc": "singleSelection" -} -// Note that the save and find-related commands aren't defined by -// default. User code or addons can define them. Unknown commands -// are simply ignored. -keyMap.pcDefault = { - "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", - "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", - "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", - "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", - "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", - "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", - "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", - fallthrough: "basic" -} -// Very basic readline/emacs-style bindings, which are standard on Mac. -keyMap.emacsy = { - "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", - "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", - "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", - "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", - "Ctrl-O": "openLine" -} -keyMap.macDefault = { - "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", - "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", - "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", - "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", - "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", - "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", - "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", - fallthrough: ["basic", "emacsy"] -} -keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault - -// KEYMAP DISPATCH - -function normalizeKeyName(name) { - var parts = name.split(/-(?!$)/) - name = parts[parts.length - 1] - var alt, ctrl, shift, cmd - for (var i = 0; i < parts.length - 1; i++) { - var mod = parts[i] - if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true } - else if (/^a(lt)?$/i.test(mod)) { alt = true } - else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true } - else if (/^s(hift)?$/i.test(mod)) { shift = true } - else { throw new Error("Unrecognized modifier name: " + mod) } - } - if (alt) { name = "Alt-" + name } - if (ctrl) { name = "Ctrl-" + name } - if (cmd) { name = "Cmd-" + name } - if (shift) { name = "Shift-" + name } - return name -} - -// This is a kludge to keep keymaps mostly working as raw objects -// (backwards compatibility) while at the same time support features -// like normalization and multi-stroke key bindings. It compiles a -// new normalized keymap, and then updates the old object to reflect -// this. -function normalizeKeyMap(keymap) { - var copy = {} - for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { - var value = keymap[keyname] - if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } - if (value == "...") { delete keymap[keyname]; continue } - - var keys = map(keyname.split(" "), normalizeKeyName) - for (var i = 0; i < keys.length; i++) { - var val = void 0, name = void 0 - if (i == keys.length - 1) { - name = keys.join(" ") - val = value - } else { - name = keys.slice(0, i + 1).join(" ") - val = "..." - } - var prev = copy[name] - if (!prev) { copy[name] = val } - else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } - } - delete keymap[keyname] - } } - for (var prop in copy) { keymap[prop] = copy[prop] } - return keymap -} - -function lookupKey(key, map$$1, handle, context) { - map$$1 = getKeyMap(map$$1) - var found = map$$1.call ? map$$1.call(key, context) : map$$1[key] - if (found === false) { return "nothing" } - if (found === "...") { return "multi" } - if (found != null && handle(found)) { return "handled" } - - if (map$$1.fallthrough) { - if (Object.prototype.toString.call(map$$1.fallthrough) != "[object Array]") - { return lookupKey(key, map$$1.fallthrough, handle, context) } - for (var i = 0; i < map$$1.fallthrough.length; i++) { - var result = lookupKey(key, map$$1.fallthrough[i], handle, context) - if (result) { return result } - } - } -} - -// Modifier key presses don't count as 'real' key presses for the -// purpose of keymap fallthrough. -function isModifierKey(value) { - var name = typeof value == "string" ? value : keyNames[value.keyCode] - return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" -} - -// Look up the name of a key as indicated by an event object. -function keyName(event, noShift) { - if (presto && event.keyCode == 34 && event["char"]) { return false } - var base = keyNames[event.keyCode], name = base - if (name == null || event.altGraphKey) { return false } - if (event.altKey && base != "Alt") { name = "Alt-" + name } - if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name } - if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name } - if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name } - return name -} - -function getKeyMap(val) { - return typeof val == "string" ? keyMap[val] : val -} - -// 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) - }) -} - -// Commands are parameter-less actions that can be performed on an -// editor, mostly used for keybindings. -var commands = { - selectAll: selectAll, - singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, - killLine: function (cm) { return 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) { return deleteNearSelection(cm, function (range) { return ({ - from: Pos(range.from().line, 0), - to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) - }); }); }, - delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ - from: Pos(range.from().line, 0), to: range.from() - }); }); }, - delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { - var top = cm.charCoords(range.head, "div").top + 5 - var leftPos = cm.coordsChar({left: 0, top: top}, "div") - return {from: leftPos, to: range.from()} - }); }, - delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { - var top = cm.charCoords(range.head, "div").top + 5 - var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") - return {from: range.from(), to: rightPos } - }); }, - undo: function (cm) { return cm.undo(); }, - redo: function (cm) { return cm.redo(); }, - undoSelection: function (cm) { return cm.undoSelection(); }, - redoSelection: function (cm) { return cm.redoSelection(); }, - goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, - goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, - goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, - {origin: "+move", bias: 1} - ); }, - goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, - {origin: "+move", bias: 1} - ); }, - goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, - {origin: "+move", bias: -1} - ); }, - goLineRight: function (cm) { return 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) { return cm.extendSelectionsBy(function (range) { - var top = cm.charCoords(range.head, "div").top + 5 - return cm.coordsChar({left: 0, top: top}, "div") - }, sel_move); }, - goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { - var top = cm.charCoords(range.head, "div").top + 5 - var pos = cm.coordsChar({left: 0, top: top}, "div") - if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } - return pos - }, sel_move); }, - goLineUp: function (cm) { return cm.moveV(-1, "line"); }, - goLineDown: function (cm) { return cm.moveV(1, "line"); }, - goPageUp: function (cm) { return cm.moveV(-1, "page"); }, - goPageDown: function (cm) { return cm.moveV(1, "page"); }, - goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, - goCharRight: function (cm) { return cm.moveH(1, "char"); }, - goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, - goColumnRight: function (cm) { return cm.moveH(1, "column"); }, - goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, - goGroupRight: function (cm) { return cm.moveH(1, "group"); }, - goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, - goWordRight: function (cm) { return cm.moveH(1, "word"); }, - delCharBefore: function (cm) { return cm.deleteH(-1, "char"); }, - delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, - delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, - delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, - delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, - delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, - indentAuto: function (cm) { return cm.indentSelection("smart"); }, - indentMore: function (cm) { return cm.indentSelection("add"); }, - indentLess: function (cm) { return cm.indentSelection("subtract"); }, - insertTab: function (cm) { return cm.replaceSelection("\t"); }, - insertSoftTab: function (cm) { - var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize - for (var i = 0; i < ranges.length; i++) { - var pos = ranges[i].from() - var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize) - spaces.push(spaceStr(tabSize - col % tabSize)) - } - cm.replaceSelections(spaces) - }, - defaultTab: function (cm) { - if (cm.somethingSelected()) { cm.indentSelection("add") } - else { cm.execCommand("insertTab") } - }, - // Swap the two chars left and right of each selection's head. - // Move cursor behind the two swapped characters afterwards. - // - // Doesn't consider line feeds a character. - // Doesn't scan more than one line above to find a character. - // Doesn't do anything on an empty line. - // Doesn't do anything with non-empty selections. - transposeChars: function (cm) { return runInOp(cm, function () { - var ranges = cm.listSelections(), newSel = [] - for (var i = 0; i < ranges.length; i++) { - if (!ranges[i].empty()) { continue } - var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text - if (line) { - if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1) } - if (cur.ch > 0) { - cur = new Pos(cur.line, cur.ch + 1) - cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), - Pos(cur.line, cur.ch - 2), cur, "+transpose") - } else if (cur.line > cm.doc.first) { - var prev = getLine(cm.doc, cur.line - 1).text - if (prev) { - cur = new Pos(cur.line, 1) - cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + - prev.charAt(prev.length - 1), - Pos(cur.line - 1, prev.length - 1), cur, "+transpose") - } - } - } - newSel.push(new Range(cur, cur)) - } - cm.setSelections(newSel) - }); }, - newlineAndIndent: function (cm) { return runInOp(cm, function () { - var sels = cm.listSelections() - for (var i = sels.length - 1; i >= 0; i--) - { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input") } - sels = cm.listSelections() - for (var i$1 = 0; i$1 < sels.length; i$1++) - { cm.indentLine(sels[i$1].from().line, null, true) } - ensureCursorVisible(cm) - }); }, - openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, - toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } -} - - -function lineStart(cm, lineN) { - var line = getLine(cm.doc, lineN) - var visual = visualLine(line) - if (visual != line) { lineN = lineNo(visual) } - var order = getOrder(visual) - var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual) - return Pos(lineN, ch) -} -function lineEnd(cm, lineN) { - var merged, line = getLine(cm.doc, lineN) - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line - lineN = null - } - var order = getOrder(line) - var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line) - return Pos(lineN == null ? lineNo(line) : lineN, ch) -} -function lineStartSmart(cm, pos) { - var start = lineStart(cm, pos.line) - var line = getLine(cm.doc, start.line) - var order = getOrder(line) - if (!order || order[0].level == 0) { - var firstNonWS = Math.max(0, line.text.search(/\S/)) - var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch - return Pos(start.line, inWS ? 0 : firstNonWS) - } - return start -} - -// Run a handler that was bound to a key. -function doHandleBinding(cm, bound, dropShift) { - if (typeof bound == "string") { - bound = commands[bound] - if (!bound) { return false } - } - // Ensure previous input has been read, so that the handler sees a - // consistent view of the document - cm.display.input.ensurePolled() - var prevShift = cm.display.shift, done = false - try { - if (cm.isReadOnly()) { cm.state.suppressEdits = true } - if (dropShift) { cm.display.shift = false } - done = bound(cm) != Pass - } finally { - cm.display.shift = prevShift - cm.state.suppressEdits = false - } - return done -} - -function lookupKeyForEditor(cm, name, handle) { - for (var i = 0; i < cm.state.keyMaps.length; i++) { - var result = lookupKey(name, cm.state.keyMaps[i], handle, cm) - if (result) { return result } - } - return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) - || lookupKey(name, cm.options.keyMap, handle, cm) -} - -var stopSeq = new Delayed -function dispatchKey(cm, name, e, handle) { - var seq = cm.state.keySeq - if (seq) { - if (isModifierKey(name)) { return "handled" } - stopSeq.set(50, function () { - if (cm.state.keySeq == seq) { - cm.state.keySeq = null - cm.display.input.reset() - } - }) - name = seq + " " + name - } - var result = lookupKeyForEditor(cm, name, handle) - - if (result == "multi") - { cm.state.keySeq = name } - if (result == "handled") - { signalLater(cm, "keyHandled", cm, name, e) } - - if (result == "handled" || result == "multi") { - e_preventDefault(e) - restartBlink(cm) - } - - if (seq && !result && /\'$/.test(name)) { - e_preventDefault(e) - return true - } - return !!result -} - -// Handle a key from the keydown event. -function handleKeyBinding(cm, e) { - var name = keyName(e, true) - if (!name) { return false } - - if (e.shiftKey && !cm.state.keySeq) { - // First try to resolve full name (including 'Shift-'). Failing - // that, see if there is a cursor-motion command (starting with - // 'go') bound to the keyname without 'Shift-'. - return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) - || dispatchKey(cm, name, e, function (b) { - if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) - { return doHandleBinding(cm, b) } - }) - } else { - return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) - } -} - -// Handle a key from the keypress event -function handleCharBinding(cm, e, ch) { - return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) -} - -var lastStoppedKey = null -function onKeyDown(e) { - var cm = this - cm.curOp.focus = activeElt() - if (signalDOMEvent(cm, e)) { return } - // IE does strange things with escape. - if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false } - var code = e.keyCode - cm.display.shift = code == 16 || e.shiftKey - var handled = handleKeyBinding(cm, e) - if (presto) { - lastStoppedKey = handled ? code : null - // Opera has no cut event... we try to at least catch the key combo - if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) - { cm.replaceSelection("", null, "cut") } - } - - // Turn mouse into crosshair when Alt is held on Mac. - if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) - { showCrossHair(cm) } -} - -function showCrossHair(cm) { - var lineDiv = cm.display.lineDiv - addClass(lineDiv, "CodeMirror-crosshair") - - function up(e) { - if (e.keyCode == 18 || !e.altKey) { - rmClass(lineDiv, "CodeMirror-crosshair") - off(document, "keyup", up) - off(document, "mouseover", up) - } - } - on(document, "keyup", up) - on(document, "mouseover", up) -} - -function onKeyUp(e) { - if (e.keyCode == 16) { this.doc.sel.shift = false } - signalDOMEvent(this, e) -} - -function onKeyPress(e) { - var cm = this - if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } - var keyCode = e.keyCode, charCode = e.charCode - if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} - if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } - var ch = String.fromCharCode(charCode == null ? keyCode : charCode) - // Some browsers fire keypress events for backspace - if (ch == "\x08") { return } - if (handleCharBinding(cm, e, ch)) { return } - cm.display.input.onKeyPress(e) -} - -// A mouse down can be a single click, double click, triple click, -// start of selection drag, start of text drag, new cursor -// (ctrl-click), rectangle drag (alt-drag), or xwin -// middle-click-paste. Or it might be a click on something we should -// not interfere with, such as a scrollbar or widget. -function onMouseDown(e) { - var cm = this, display = cm.display - if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } - display.shift = e.shiftKey - - if (eventInWidget(display, e)) { - if (!webkit) { - // Briefly turn off draggability, to allow widgets to do - // normal dragging things. - display.scroller.draggable = false - setTimeout(function () { return display.scroller.draggable = true; }, 100) - } - return - } - if (clickInGutter(cm, e)) { return } - var start = posFromMouse(cm, e) - window.focus() - - switch (e_button(e)) { - case 1: - // #3261: make sure, that we're not starting a second selection - if (cm.state.selectingText) - { cm.state.selectingText(e) } - else if (start) - { leftButtonDown(cm, e, start) } - else if (e_target(e) == display.scroller) - { e_preventDefault(e) } - break - case 2: - if (webkit) { cm.state.lastMiddleDown = +new Date } - if (start) { extendSelection(cm.doc, start) } - setTimeout(function () { return display.input.focus(); }, 20) - e_preventDefault(e) - break - case 3: - if (captureRightClick) { onContextMenu(cm, e) } - else { delayBlurEvent(cm) } - break - } -} - -var lastClick; -var lastDoubleClick -function leftButtonDown(cm, e, start) { - if (ie) { setTimeout(bind(ensureFocus, cm), 0) } - else { cm.curOp.focus = activeElt() } - - var now = +new Date, type - if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { - type = "triple" - } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { - type = "double" - lastDoubleClick = {time: now, pos: start} - } else { - type = "single" - lastClick = {time: now, pos: start} - } - - var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained - if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && - type == "single" && (contained = sel.contains(start)) > -1 && - (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) && - (cmp(contained.to(), start) > 0 || start.xRel < 0)) - { leftButtonStartDrag(cm, e, start, modifier) } - else - { leftButtonSelect(cm, e, start, type, modifier) } -} - -// Start a text drag. When it ends, see if any dragging actually -// happen, and treat as a click if it didn't. -function leftButtonStartDrag(cm, e, start, modifier) { - var display = cm.display, startTime = +new Date - var dragEnd = operation(cm, function (e2) { - if (webkit) { display.scroller.draggable = false } - cm.state.draggingText = false - off(document, "mouseup", dragEnd) - off(display.scroller, "drop", dragEnd) - if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { - e_preventDefault(e2) - if (!modifier && +new Date - 200 < startTime) - { extendSelection(cm.doc, start) } - // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) - if (webkit || ie && ie_version == 9) - { setTimeout(function () {document.body.focus(); display.input.focus()}, 20) } - else - { display.input.focus() } - } - }) - // Let the drag handler handle this. - if (webkit) { display.scroller.draggable = true } - cm.state.draggingText = dragEnd - dragEnd.copy = mac ? e.altKey : e.ctrlKey - // IE's approach to draggable - if (display.scroller.dragDrop) { display.scroller.dragDrop() } - on(document, "mouseup", dragEnd) - on(display.scroller, "drop", dragEnd) -} - -// Normal selection, as opposed to text dragging. -function leftButtonSelect(cm, e, start, type, addNew) { - var display = cm.display, doc = cm.doc - e_preventDefault(e) - - var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges - if (addNew && !e.shiftKey) { - ourIndex = doc.sel.contains(start) - if (ourIndex > -1) - { ourRange = ranges[ourIndex] } - else - { ourRange = new Range(start, start) } - } else { - ourRange = doc.sel.primary() - ourIndex = doc.sel.primIndex - } - - if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) { - type = "rect" - if (!addNew) { ourRange = new Range(start, start) } - start = posFromMouse(cm, e, true, true) - ourIndex = -1 - } else if (type == "double") { - var word = cm.findWordAt(start) - if (cm.display.shift || doc.extend) - { ourRange = extendRange(doc, ourRange, word.anchor, word.head) } - else - { ourRange = word } - } else if (type == "triple") { - var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))) - if (cm.display.shift || doc.extend) - { ourRange = extendRange(doc, ourRange, line.anchor, line.head) } - else - { ourRange = line } - } else { - ourRange = extendRange(doc, ourRange, start) - } - - if (!addNew) { - ourIndex = 0 - setSelection(doc, new Selection([ourRange], 0), sel_mouse) - startSel = doc.sel - } else if (ourIndex == -1) { - ourIndex = ranges.length - setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), - {scroll: false, origin: "*mouse"}) - } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { - setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), - {scroll: false, origin: "*mouse"}) - startSel = doc.sel - } else { - replaceOneSelection(doc, ourIndex, ourRange, sel_mouse) - } - - var lastPos = start - function extendTo(pos) { - if (cmp(lastPos, pos) == 0) { return } - lastPos = pos - - if (type == "rect") { - var ranges = [], tabSize = cm.options.tabSize - var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize) - var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize) - var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol) - for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); - line <= end; line++) { - var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize) - if (left == right) - { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))) } - else if (text.length > leftPos) - { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))) } - } - if (!ranges.length) { ranges.push(new Range(start, start)) } - setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), - {origin: "*mouse", scroll: false}) - cm.scrollIntoView(pos) - } else { - var oldRange = ourRange - var anchor = oldRange.anchor, head = pos - if (type != "single") { - var range$$1 - if (type == "double") - { range$$1 = cm.findWordAt(pos) } - else - { range$$1 = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))) } - if (cmp(range$$1.anchor, anchor) > 0) { - head = range$$1.head - anchor = minPos(oldRange.from(), range$$1.anchor) - } else { - head = range$$1.anchor - anchor = maxPos(oldRange.to(), range$$1.head) - } - } - var ranges$1 = startSel.ranges.slice(0) - ranges$1[ourIndex] = new Range(clipPos(doc, anchor), head) - setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse) - } - } - - var editorSize = display.wrapper.getBoundingClientRect() - // Used to ensure timeout re-tries don't fire when another extend - // happened in the meantime (clearTimeout isn't reliable -- at - // least on Chrome, the timeouts still happen even when cleared, - // if the clear happens after their scheduled firing time). - var counter = 0 - - function extend(e) { - var curCount = ++counter - var cur = posFromMouse(cm, e, true, type == "rect") - if (!cur) { return } - if (cmp(cur, lastPos) != 0) { - cm.curOp.focus = activeElt() - extendTo(cur) - var visible = visibleLines(display, doc) - if (cur.line >= visible.to || cur.line < visible.from) - { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e) }}), 150) } - } else { - var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0 - if (outside) { setTimeout(operation(cm, function () { - if (counter != curCount) { return } - display.scroller.scrollTop += outside - extend(e) - }), 50) } - } - } - - function done(e) { - cm.state.selectingText = false - counter = Infinity - e_preventDefault(e) - display.input.focus() - off(document, "mousemove", move) - off(document, "mouseup", up) - doc.history.lastSelOrigin = null - } - - var move = operation(cm, function (e) { - if (!e_button(e)) { done(e) } - else { extend(e) } - }) - var up = operation(cm, done) - cm.state.selectingText = up - on(document, "mousemove", move) - on(document, "mouseup", up) -} - - -// Determines whether an event happened in the gutter, and fires the -// handlers for the corresponding event. -function gutterEvent(cm, e, type, prevent) { - var mX, mY - try { mX = e.clientX; mY = e.clientY } - catch(e) { return false } - if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } - if (prevent) { e_preventDefault(e) } - - var display = cm.display - var lineBox = display.lineDiv.getBoundingClientRect() - - if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } - mY -= lineBox.top - display.viewOffset - - for (var i = 0; i < cm.options.gutters.length; ++i) { - var g = display.gutters.childNodes[i] - if (g && g.getBoundingClientRect().right >= mX) { - var line = lineAtHeight(cm.doc, mY) - var gutter = cm.options.gutters[i] - signal(cm, type, cm, line, gutter, e) - return e_defaultPrevented(e) - } - } -} - -function clickInGutter(cm, e) { - return gutterEvent(cm, e, "gutterClick", true) -} - -// CONTEXT MENU HANDLING - -// To make the context menu work, we need to briefly unhide the -// textarea (making it as unobtrusive as possible) to let the -// right-click take effect on it. -function onContextMenu(cm, e) { - if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } - if (signalDOMEvent(cm, e, "contextmenu")) { return } - cm.display.input.onContextMenu(e) -} - -function contextMenuInGutter(cm, e) { - if (!hasHandler(cm, "gutterContextMenu")) { return false } - return gutterEvent(cm, e, "gutterContextMenu", false) -} - -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) -} - -var Init = {toString: function(){return "CodeMirror.Init"}} - -var defaults = {} -var optionHandlers = {} - -function defineOptions(CodeMirror) { - 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 } - } - - CodeMirror.defineOption = option - - // Passed to option handlers when there is no old value. - CodeMirror.Init = 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) { return cm.setValue(val); }, true) - option("mode", null, function (cm, val) { - cm.doc.modeOption = val - loadMode(cm) - }, true) - - option("indentUnit", 2, loadMode, true) - option("indentWithTabs", false) - option("smartIndent", true) - option("tabSize", 4, function (cm) { - resetModeState(cm) - clearCaches(cm) - regChange(cm) - }, true) - option("lineSeparator", null, function (cm, val) { - cm.doc.lineSep = val - if (!val) { return } - var newBreaks = [], lineNo = cm.doc.first - cm.doc.iter(function (line) { - for (var pos = 0;;) { - var found = line.text.indexOf(val, pos) - if (found == -1) { break } - pos = found + val.length - newBreaks.push(Pos(lineNo, found)) - } - lineNo++ - }) - for (var i = newBreaks.length - 1; i >= 0; i--) - { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) } - }) - option("specialChars", /[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) { - cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g") - if (old != Init) { cm.refresh() } - }) - option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true) - option("electricChars", true) - option("inputStyle", mobile ? "contenteditable" : "textarea", function () { - throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME - }, true) - option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true) - option("rtlMoveVisually", !windows) - option("wholeLineUpdateBefore", true) - - option("theme", "default", function (cm) { - themeChanged(cm) - guttersChanged(cm) - }, true) - option("keyMap", "default", function (cm, val, old) { - var next = getKeyMap(val) - var prev = old != Init && getKeyMap(old) - if (prev && prev.detach) { prev.detach(cm, next) } - if (next.attach) { next.attach(cm, prev || null) } - }) - option("extraKeys", null) - - option("lineWrapping", false, wrappingChanged, true) - option("gutters", [], function (cm) { - setGuttersForLineNumbers(cm.options) - guttersChanged(cm) - }, true) - option("fixedGutter", true, function (cm, val) { - cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0" - cm.refresh() - }, true) - option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true) - option("scrollbarStyle", "native", function (cm) { - initScrollbars(cm) - updateScrollbars(cm) - cm.display.scrollbars.setScrollTop(cm.doc.scrollTop) - cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft) - }, true) - option("lineNumbers", false, function (cm) { - setGuttersForLineNumbers(cm.options) - guttersChanged(cm) - }, true) - option("firstLineNumber", 1, guttersChanged, true) - option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true) - option("showCursorWhenSelecting", false, updateSelection, true) - - option("resetSelectionOnContextMenu", true) - option("lineWiseCopyCut", true) - - option("readOnly", false, function (cm, val) { - if (val == "nocursor") { - onBlur(cm) - cm.display.input.blur() - cm.display.disabled = true - } else { - cm.display.disabled = false - } - cm.display.input.readOnlyChanged(val) - }) - option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset() }}, true) - option("dragDrop", true, dragDropChanged) - option("allowDropFileTypes", null) - - option("cursorBlinkRate", 530) - option("cursorScrollMargin", 0) - option("cursorHeight", 1, updateSelection, true) - option("singleCursorHeightPerLine", true, updateSelection, true) - option("workTime", 100) - option("workDelay", 100) - option("flattenSpans", true, resetModeState, true) - option("addModeClass", false, resetModeState, true) - option("pollInterval", 100) - option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }) - option("historyEventDelay", 1250) - option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true) - option("maxHighlightLength", 10000, resetModeState, true) - option("moveInputWithCursor", true, function (cm, val) { - if (!val) { cm.display.input.resetPosition() } - }) - - option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }) - option("autofocus", null) -} - -function guttersChanged(cm) { - updateGutters(cm) - regChange(cm) - setTimeout(function () { return alignHorizontally(cm); }, 20) -} - -function dragDropChanged(cm, value, old) { - var wasOn = old && old != Init - if (!value != !wasOn) { - var funcs = cm.display.dragFunctions - var toggle = value ? on : off - toggle(cm.display.scroller, "dragstart", funcs.start) - toggle(cm.display.scroller, "dragenter", funcs.enter) - toggle(cm.display.scroller, "dragover", funcs.over) - toggle(cm.display.scroller, "dragleave", funcs.leave) - toggle(cm.display.scroller, "drop", funcs.drop) - } -} - -function wrappingChanged(cm) { - if (cm.options.lineWrapping) { - addClass(cm.display.wrapper, "CodeMirror-wrap") - cm.display.sizer.style.minWidth = "" - cm.display.sizerWidth = null - } else { - rmClass(cm.display.wrapper, "CodeMirror-wrap") - findMaxLine(cm) - } - estimateLineHeights(cm) - regChange(cm) - clearCaches(cm) - setTimeout(function () { return updateScrollbars(cm); }, 100) -} - -// A CodeMirror instance represents an editor. This is the object -// that user code is usually dealing with. - -function CodeMirror$1(place, options) { - var this$1 = this; - - if (!(this instanceof CodeMirror$1)) { return new CodeMirror$1(place, options) } - - this.options = options = options ? copyObj(options) : {} - // Determine effective options based on given values and defaults. - copyObj(defaults, options, false) - setGuttersForLineNumbers(options) - - var doc = options.value - if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator) } - this.doc = doc - - var input = new CodeMirror$1.inputStyles[options.inputStyle](this) - var display = this.display = new Display(place, doc, input) - display.wrapper.CodeMirror = this - updateGutters(this) - themeChanged(this) - if (options.lineWrapping) - { this.display.wrapper.className += " CodeMirror-wrap" } - if (options.autofocus && !mobile) { display.input.focus() } - initScrollbars(this) - - this.state = { - keyMaps: [], // stores maps added by addKeyMap - overlays: [], // highlighting overlays, as added by addOverlay - modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info - overwrite: false, - delayingBlurEvent: false, - focused: false, - suppressEdits: false, // used to disable editing during key handlers when in readOnly mode - pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll - selectingText: false, - draggingText: false, - highlight: new Delayed(), // stores highlight worker timeout - keySeq: null, // Unfinished key sequence - specialChars: null - } - - // Override magic textarea content restore that IE sometimes does - // on our hidden textarea on reload - if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20) } - - registerEventHandlers(this) - ensureGlobalHandlers() - - startOperation(this) - this.curOp.forceUpdate = true - attachDoc(this, doc) - - if ((options.autofocus && !mobile) || this.hasFocus()) - { setTimeout(bind(onFocus, this), 20) } - else - { onBlur(this) } - - for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) - { optionHandlers[opt](this$1, options[opt], Init) } } - maybeUpdateLineNumberWidth(this) - if (options.finishInit) { options.finishInit(this) } - for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1) } - endOperation(this) - // Suppress optimizelegibility in Webkit, since it breaks text - // measuring on line wrapping boundaries. - if (webkit && options.lineWrapping && - getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") - { display.lineDiv.style.textRendering = "auto" } -} - -// The default configuration options. -CodeMirror$1.defaults = defaults -// Functions to run when options are changed. -CodeMirror$1.optionHandlers = optionHandlers - -// Attach the necessary event handlers when initializing the editor -function registerEventHandlers(cm) { - var d = cm.display - on(d.scroller, "mousedown", operation(cm, onMouseDown)) - // Older IE's will not fire a second mousedown for a double click - if (ie && ie_version < 11) - { on(d.scroller, "dblclick", operation(cm, function (e) { - if (signalDOMEvent(cm, e)) { return } - var pos = posFromMouse(cm, e) - if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } - e_preventDefault(e) - var word = cm.findWordAt(pos) - extendSelection(cm.doc, word.anchor, word.head) - })) } - else - { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }) } - // Some browsers fire contextmenu *after* opening the menu, at - // which point we can't mess with it anymore. Context menu is - // handled in onMouseDown for these browsers. - if (!captureRightClick) { on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }) } - - // Used to suppress mouse event handling when a touch happens - var touchFinished, prevTouch = {end: 0} - function finishTouch() { - if (d.activeTouch) { - touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000) - prevTouch = d.activeTouch - prevTouch.end = +new Date - } - } - function isMouseLikeTouchEvent(e) { - if (e.touches.length != 1) { return false } - var touch = e.touches[0] - return touch.radiusX <= 1 && touch.radiusY <= 1 - } - function farAway(touch, other) { - if (other.left == null) { return true } - var dx = other.left - touch.left, dy = other.top - touch.top - return dx * dx + dy * dy > 20 * 20 - } - on(d.scroller, "touchstart", function (e) { - if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) { - clearTimeout(touchFinished) - var now = +new Date - d.activeTouch = {start: now, moved: false, - prev: now - prevTouch.end <= 300 ? prevTouch : null} - if (e.touches.length == 1) { - d.activeTouch.left = e.touches[0].pageX - d.activeTouch.top = e.touches[0].pageY - } - } - }) - on(d.scroller, "touchmove", function () { - if (d.activeTouch) { d.activeTouch.moved = true } - }) - on(d.scroller, "touchend", function (e) { - var touch = d.activeTouch - if (touch && !eventInWidget(d, e) && touch.left != null && - !touch.moved && new Date - touch.start < 300) { - var pos = cm.coordsChar(d.activeTouch, "page"), range - if (!touch.prev || farAway(touch, touch.prev)) // Single tap - { range = new Range(pos, pos) } - else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap - { range = cm.findWordAt(pos) } - else // Triple tap - { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } - cm.setSelection(range.anchor, range.head) - cm.focus() - e_preventDefault(e) - } - finishTouch() - }) - on(d.scroller, "touchcancel", finishTouch) - - // Sync scrolling between fake scrollbars and real scrollable - // area, ensure viewport is updated when scrolling. - on(d.scroller, "scroll", function () { - if (d.scroller.clientHeight) { - setScrollTop(cm, d.scroller.scrollTop) - setScrollLeft(cm, d.scroller.scrollLeft, true) - signal(cm, "scroll", cm) - } - }) - - // Listen to wheel events in order to try and update the viewport on time. - on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }) - on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }) - - // Prevent wrapper from ever scrolling - on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }) - - d.dragFunctions = { - enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e) }}, - over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e) }}, - start: function (e) { return onDragStart(cm, e); }, - drop: operation(cm, onDrop), - leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm) }} - } - - var inp = d.input.getField() - on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }) - on(inp, "keydown", operation(cm, onKeyDown)) - on(inp, "keypress", operation(cm, onKeyPress)) - on(inp, "focus", function (e) { return onFocus(cm, e); }) - on(inp, "blur", function (e) { return onBlur(cm, e); }) -} - -var initHooks = [] -CodeMirror$1.defineInitHook = function (f) { return initHooks.push(f); } - -// Indent the given line. The how parameter can be "smart", -// "add"/null, "subtract", or "prev". When aggressive is false -// (typically set to true for forced single-line indents), empty -// lines are not indented, and places where the mode returns Pass -// are left alone. -function indentLine(cm, n, how, aggressive) { - var doc = cm.doc, state - if (how == null) { how = "add" } - if (how == "smart") { - // Fall back to "prev" when the mode doesn't have an indentation - // method. - if (!doc.mode.indent) { how = "prev" } - else { state = getStateBefore(cm, n) } - } - - var tabSize = cm.options.tabSize - var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize) - if (line.stateAfter) { line.stateAfter = null } - var curSpaceString = line.text.match(/^\s*/)[0], indentation - if (!aggressive && !/\S/.test(line.text)) { - indentation = 0 - how = "not" - } else if (how == "smart") { - indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text) - if (indentation == Pass || indentation > 150) { - if (!aggressive) { return } - how = "prev" - } - } - if (how == "prev") { - if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize) } - else { indentation = 0 } - } else if (how == "add") { - indentation = curSpace + cm.options.indentUnit - } else if (how == "subtract") { - indentation = curSpace - cm.options.indentUnit - } else if (typeof how == "number") { - indentation = curSpace + how - } - indentation = Math.max(0, indentation) - - var indentString = "", pos = 0 - if (cm.options.indentWithTabs) - { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t"} } - if (pos < indentation) { indentString += spaceStr(indentation - pos) } - - if (indentString != curSpaceString) { - replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input") - line.stateAfter = null - return true - } else { - // Ensure that, if the cursor was in the whitespace at the start - // of the line, it is moved to the end of that space. - for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { - var range = doc.sel.ranges[i$1] - if (range.head.line == n && range.head.ch < curSpaceString.length) { - var pos$1 = Pos(n, curSpaceString.length) - replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)) - break - } - } - } -} - -// This will be set to a {lineWise: bool, text: [string]} object, so -// that, when pasting, we know what kind of selections the copied -// text was made out of. -var lastCopied = null - -function setLastCopied(newLastCopied) { - lastCopied = newLastCopied -} - -function applyTextInput(cm, inserted, deleted, sel, origin) { - var doc = cm.doc - cm.display.shift = false - if (!sel) { sel = doc.sel } - - var paste = cm.state.pasteIncoming || origin == "paste" - var textLines = splitLinesAuto(inserted), multiPaste = null - // When pasing N lines into N selections, insert one line per selection - if (paste && sel.ranges.length > 1) { - if (lastCopied && lastCopied.text.join("\n") == inserted) { - if (sel.ranges.length % lastCopied.text.length == 0) { - multiPaste = [] - for (var i = 0; i < lastCopied.text.length; i++) - { multiPaste.push(doc.splitLines(lastCopied.text[i])) } - } - } else if (textLines.length == sel.ranges.length) { - multiPaste = map(textLines, function (l) { return [l]; }) - } - } - - var updateInput - // Normal behavior is to insert the new text into every selection - for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { - var range$$1 = sel.ranges[i$1] - var from = range$$1.from(), to = range$$1.to() - if (range$$1.empty()) { - if (deleted && deleted > 0) // Handle deletion - { from = Pos(from.line, from.ch - deleted) } - else if (cm.state.overwrite && !paste) // Handle overwrite - { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)) } - else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted) - { from = to = Pos(from.line, 0) } - } - updateInput = cm.curOp.updateInput - var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, - origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")} - makeChange(cm.doc, changeEvent) - signalLater(cm, "inputRead", cm, changeEvent) - } - if (inserted && !paste) - { triggerElectric(cm, inserted) } - - ensureCursorVisible(cm) - cm.curOp.updateInput = updateInput - cm.curOp.typing = true - cm.state.pasteIncoming = cm.state.cutIncoming = false -} - -function handlePaste(e, cm) { - var pasted = e.clipboardData && e.clipboardData.getData("Text") - if (pasted) { - e.preventDefault() - if (!cm.isReadOnly() && !cm.options.disableInput) - { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }) } - return true - } -} - -function triggerElectric(cm, inserted) { - // When an 'electric' character is inserted, immediately trigger a reindent - if (!cm.options.electricChars || !cm.options.smartIndent) { return } - var sel = cm.doc.sel - - for (var i = sel.ranges.length - 1; i >= 0; i--) { - var range$$1 = sel.ranges[i] - if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue } - var mode = cm.getModeAt(range$$1.head) - var indented = false - if (mode.electricChars) { - for (var j = 0; j < mode.electricChars.length; j++) - { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { - indented = indentLine(cm, range$$1.head.line, "smart") - break - } } - } else if (mode.electricInput) { - if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch))) - { indented = indentLine(cm, range$$1.head.line, "smart") } - } - if (indented) { signalLater(cm, "electricInput", cm, range$$1.head.line) } - } -} - -function copyableRanges(cm) { - var text = [], ranges = [] - for (var i = 0; i < cm.doc.sel.ranges.length; i++) { - var line = cm.doc.sel.ranges[i].head.line - var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)} - ranges.push(lineRange) - text.push(cm.getRange(lineRange.anchor, lineRange.head)) - } - return {text: text, ranges: ranges} -} - -function disableBrowserMagic(field, spellcheck) { - field.setAttribute("autocorrect", "off") - field.setAttribute("autocapitalize", "off") - field.setAttribute("spellcheck", !!spellcheck) -} - -function hiddenTextarea() { - var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none") - var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;") - // The textarea is kept positioned near the cursor to prevent the - // fact that it'll be scrolled into view on input from scrolling - // our fake cursor out of view. On webkit, when wrap=off, paste is - // very slow. So make the area wide instead. - if (webkit) { te.style.width = "1000px" } - else { te.setAttribute("wrap", "off") } - // If border: 0; -- iOS fails to open keyboard (issue #1287) - if (ios) { te.style.border = "1px solid black" } - disableBrowserMagic(te) - return div -} - -// 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. - -var addEditorMethods = function(CodeMirror) { - var optionHandlers = CodeMirror.optionHandlers - - var helpers = CodeMirror.helpers = {} - - CodeMirror.prototype = { - constructor: CodeMirror, - focus: function(){window.focus(); this.display.input.focus()}, - - setOption: function(option, value) { - var options = this.options, old = options[option] - if (options[option] == value && option != "mode") { return } - options[option] = value - if (optionHandlers.hasOwnProperty(option)) - { operation(this, optionHandlers[option])(this, value, old) } - }, - - getOption: function(option) {return this.options[option]}, - getDoc: function() {return this.doc}, - - addKeyMap: function(map$$1, bottom) { - this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map$$1)) - }, - removeKeyMap: function(map$$1) { - var maps = this.state.keyMaps - for (var i = 0; i < maps.length; ++i) - { if (maps[i] == map$$1 || maps[i].name == map$$1) { - 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.") } - insertSorted(this.state.overlays, - {mode: mode, modeSpec: spec, opaque: options && options.opaque, - priority: (options && options.priority) || 0}, - function (overlay) { return overlay.priority; }) - this.state.modeGen++ - regChange(this) - }), - removeOverlay: methodOp(function(spec) { - var this$1 = this; - - 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$1.state.modeGen++ - regChange(this$1) - 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 this$1 = this; - - var ranges = this.doc.sel.ranges, end = -1 - for (var i = 0; i < ranges.length; i++) { - var range$$1 = ranges[i] - if (!range$$1.empty()) { - var from = range$$1.from(), to = range$$1.to() - var start = Math.max(end, from.line) - end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1 - for (var j = start; j < end; ++j) - { indentLine(this$1, j, how) } - var newRanges = this$1.doc.sel.ranges - if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) - { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll) } - } else if (range$$1.head.line > end) { - indentLine(this$1, range$$1.head.line, how, true) - end = range$$1.head.line - if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1) } - } - } - }), - - // Fetch the parser token for a given character. Useful for hacks - // that want to inspect the mode state (say, for completion). - getTokenAt: function(pos, precise) { - return takeToken(this, pos, precise) - }, - - getLineTokens: function(line, precise) { - return takeToken(this, Pos(line), precise, true) - }, - - getTokenTypeAt: function(pos) { - pos = clipPos(this.doc, pos) - var styles = getLineStyles(this, getLine(this.doc, pos.line)) - var before = 0, after = (styles.length - 1) / 2, ch = pos.ch - var type - if (ch == 0) { type = styles[2] } - else { for (;;) { - var mid = (before + after) >> 1 - if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid } - else if (styles[mid * 2 + 1] < ch) { before = mid + 1 } - else { type = styles[mid * 2 + 2]; break } - } } - var cut = type ? type.indexOf("overlay ") : -1 - return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) - }, - - getModeAt: function(pos) { - var mode = this.doc.mode - if (!mode.innerMode) { return mode } - return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode - }, - - getHelper: function(pos, type) { - return this.getHelpers(pos, type)[0] - }, - - getHelpers: function(pos, type) { - var this$1 = this; - - var found = [] - if (!helpers.hasOwnProperty(type)) { return found } - var help = helpers[type], mode = this.getModeAt(pos) - if (typeof mode[type] == "string") { - if (help[mode[type]]) { found.push(help[mode[type]]) } - } else if (mode[type]) { - for (var i = 0; i < mode[type].length; i++) { - var val = help[mode[type][i]] - if (val) { found.push(val) } - } - } else if (mode.helperType && help[mode.helperType]) { - found.push(help[mode.helperType]) - } else if (help[mode.name]) { - found.push(help[mode.name]) - } - for (var i$1 = 0; i$1 < help._global.length; i$1++) { - var cur = help._global[i$1] - if (cur.pred(mode, this$1) && 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$$1 = this.doc.sel.primary() - if (start == null) { pos = range$$1.head } - else if (typeof start == "object") { pos = clipPos(this.doc, start) } - else { pos = start ? range$$1.from() : range$$1.to() } - return cursorCoords(this, pos, mode || "page") - }, - - charCoords: function(pos, mode) { - return charCoords(this, clipPos(this.doc, pos), mode || "page") - }, - - coordsChar: function(coords, mode) { - coords = fromCoordSystem(this, coords, mode || "page") - return coordsChar(this, coords.left, coords.top) - }, - - lineAtHeight: function(height, mode) { - height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top - return lineAtHeight(this.doc, height + this.display.viewOffset) - }, - heightAtLine: function(line, mode) { - var end = false, lineObj - if (typeof line == "number") { - var last = this.doc.first + this.doc.size - 1 - if (line < this.doc.first) { line = this.doc.first } - else if (line > last) { line = last; end = true } - lineObj = getLine(this.doc, line) - } else { - lineObj = line - } - return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + - (end ? this.doc.height - heightAtLine(lineObj) : 0) - }, - - defaultTextHeight: function() { return textHeight(this.display) }, - defaultCharWidth: function() { return charWidth(this.display) }, - - setGutterMarker: methodOp(function(line, gutterID, value) { - return changeLine(this.doc, line, "gutter", function (line) { - var markers = line.gutterMarkers || (line.gutterMarkers = {}) - markers[gutterID] = value - if (!value && isEmpty(markers)) { line.gutterMarkers = null } - return true - }) - }), - - clearGutter: methodOp(function(gutterID) { - var this$1 = this; - - var doc = this.doc, i = doc.first - doc.iter(function (line) { - if (line.gutterMarkers && line.gutterMarkers[gutterID]) { - line.gutterMarkers[gutterID] = null - regLineChange(this$1, i, "gutter") - if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null } - } - ++i - }) - }), - - lineInfo: function(line) { - var n - if (typeof line == "number") { - if (!isLine(this.doc, line)) { return null } - n = line - line = getLine(this.doc, line) - if (!line) { return null } - } else { - n = lineNo(line) - if (n == null) { return null } - } - return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, - textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, - widgets: line.widgets} - }, - - getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, - - addWidget: function(pos, node, scroll, vert, horiz) { - var display = this.display - pos = cursorCoords(this, clipPos(this.doc, pos)) - var top = pos.bottom, left = pos.left - node.style.position = "absolute" - node.setAttribute("cm-ignore-events", "true") - this.display.input.setUneditable(node) - display.sizer.appendChild(node) - if (vert == "over") { - top = pos.top - } else if (vert == "above" || vert == "near") { - var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), - hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth) - // Default to positioning above (if specified and possible); otherwise default to positioning below - if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) - { top = pos.top - node.offsetHeight } - else if (pos.bottom + node.offsetHeight <= vspace) - { top = pos.bottom } - if (left + node.offsetWidth > hspace) - { left = hspace - node.offsetWidth } - } - node.style.top = top + "px" - node.style.left = node.style.right = "" - if (horiz == "right") { - left = display.sizer.clientWidth - node.offsetWidth - node.style.right = "0px" - } else { - if (horiz == "left") { left = 0 } - else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2 } - node.style.left = left + "px" - } - if (scroll) - { scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight) } - }, - - triggerOnKeyDown: methodOp(onKeyDown), - triggerOnKeyPress: methodOp(onKeyPress), - triggerOnKeyUp: onKeyUp, - - execCommand: function(cmd) { - if (commands.hasOwnProperty(cmd)) - { return commands[cmd].call(null, this) } - }, - - triggerElectric: methodOp(function(text) { triggerElectric(this, text) }), - - findPosH: function(from, amount, unit, visually) { - var this$1 = this; - - var dir = 1 - if (amount < 0) { dir = -1; amount = -amount } - var cur = clipPos(this.doc, from) - for (var i = 0; i < amount; ++i) { - cur = findPosH(this$1.doc, cur, dir, unit, visually) - if (cur.hitSide) { break } - } - return cur - }, - - moveH: methodOp(function(dir, unit) { - var this$1 = this; - - this.extendSelectionsBy(function (range$$1) { - if (this$1.display.shift || this$1.doc.extend || range$$1.empty()) - { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) } - else - { return dir < 0 ? range$$1.from() : range$$1.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$$1) { - var other = findPosH(doc, range$$1.head, dir, unit, false) - return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other} - }) } - }), - - findPosV: function(from, amount, unit, goalColumn) { - var this$1 = this; - - var dir = 1, x = goalColumn - if (amount < 0) { dir = -1; amount = -amount } - var cur = clipPos(this.doc, from) - for (var i = 0; i < amount; ++i) { - var coords = cursorCoords(this$1, cur, "div") - if (x == null) { x = coords.left } - else { coords.left = x } - cur = findPosV(this$1, coords, dir, unit) - if (cur.hitSide) { break } - } - return cur - }, - - moveV: methodOp(function(dir, unit) { - var this$1 = this; - - var doc = this.doc, goals = [] - var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected() - doc.extendSelectionsBy(function (range$$1) { - if (collapse) - { return dir < 0 ? range$$1.from() : range$$1.to() } - var headPos = cursorCoords(this$1, range$$1.head, "div") - if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn } - goals.push(headPos.left) - var pos = findPosV(this$1, headPos, dir, unit) - if (unit == "page" && range$$1 == doc.sel.primary()) - { addToScrollPos(this$1, null, charCoords(this$1, pos, "div").top - headPos.top) } - return pos - }, sel_move) - if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) - { doc.sel.ranges[i].goalColumn = goals[i] } } - }), - - // Find the word at the given position (as returned by coordsChar). - findWordAt: function(pos) { - var doc = this.doc, line = getLine(doc, pos.line).text - var start = pos.ch, end = pos.ch - if (line) { - var helper = this.getHelper(pos, "wordChars") - if ((pos.xRel < 0 || end == line.length) && start) { --start; } else { ++end } - var startChar = line.charAt(start) - var check = isWordChar(startChar, helper) - ? function (ch) { return isWordChar(ch, helper); } - : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } - : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); } - while (start > 0 && check(line.charAt(start - 1))) { --start } - while (end < line.length && check(line.charAt(end))) { ++end } - } - return new Range(Pos(pos.line, start), Pos(pos.line, end)) - }, - - toggleOverwrite: function(value) { - if (value != null && value == this.state.overwrite) { return } - if (this.state.overwrite = !this.state.overwrite) - { addClass(this.display.cursorDiv, "CodeMirror-overwrite") } - else - { rmClass(this.display.cursorDiv, "CodeMirror-overwrite") } - - signal(this, "overwriteToggle", this, this.state.overwrite) - }, - hasFocus: function() { return this.display.input.getField() == activeElt() }, - isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, - - scrollTo: methodOp(function(x, y) { - if (x != null || y != null) { resolveScrollToPos(this) } - if (x != null) { this.curOp.scrollLeft = x } - if (y != null) { this.curOp.scrollTop = y } - }), - getScrollInfo: function() { - var scroller = this.display.scroller - return {left: scroller.scrollLeft, top: scroller.scrollTop, - height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, - width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, - clientHeight: displayHeight(this), clientWidth: displayWidth(this)} - }, - - scrollIntoView: methodOp(function(range$$1, margin) { - if (range$$1 == null) { - range$$1 = {from: this.doc.sel.primary().head, to: null} - if (margin == null) { margin = this.options.cursorScrollMargin } - } else if (typeof range$$1 == "number") { - range$$1 = {from: Pos(range$$1, 0), to: null} - } else if (range$$1.from == null) { - range$$1 = {from: range$$1, to: null} - } - if (!range$$1.to) { range$$1.to = range$$1.from } - range$$1.margin = margin || 0 - - if (range$$1.from.line != null) { - resolveScrollToPos(this) - this.curOp.scrollToPos = range$$1 - } else { - var sPos = calculateScrollPos(this, Math.min(range$$1.from.left, range$$1.to.left), - Math.min(range$$1.from.top, range$$1.to.top) - range$$1.margin, - Math.max(range$$1.from.right, range$$1.to.right), - Math.max(range$$1.from.bottom, range$$1.to.bottom) + range$$1.margin) - this.scrollTo(sPos.scrollLeft, sPos.scrollTop) - } - }), - - setSize: methodOp(function(width, height) { - var this$1 = this; - - var interpret = function (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) } - var lineNo$$1 = this.display.viewFrom - this.doc.iter(lineNo$$1, this.display.viewTo, function (line) { - if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) - { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, "widget"); break } } } - ++lineNo$$1 - }) - 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) - this.curOp.forceUpdate = true - clearCaches(this) - this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop) - updateGutterSpace(this) - if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) - { estimateLineHeights(this) } - signal(this, "refresh", this) - }), - - swapDoc: methodOp(function(doc) { - var old = this.doc - old.cm = null - attachDoc(this, doc) - clearCaches(this) - this.display.input.reset() - this.scrollTo(doc.scrollLeft, doc.scrollTop) - this.curOp.forceScroll = true - signalLater(this, "swapDoc", this, old) - return old - }), - - getInputField: function(){return this.display.input.getField()}, - getWrapperElement: function(){return this.display.wrapper}, - getScrollerElement: function(){return this.display.scroller}, - getGutterElement: function(){return this.display.gutters} - } - eventMixin(CodeMirror) - - 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}) - } -} - -// Used for horizontal relative motion. Dir is -1 or 1 (left or -// right), unit can be "char", "column" (like char, but doesn't -// cross line boundaries), "word" (across next word), or "group" (to -// the start of next group of word or non-word-non-whitespace -// chars). The visually param controls whether, in right-to-left -// text, direction 1 means to move towards the next index in the -// string, or towards the character to the right of the current -// position. The resulting position will have a hitSide=true -// property if it reached the end of the document. -function findPosH(doc, pos, dir, unit, visually) { - var line = pos.line, ch = pos.ch, origDir = dir - var lineObj = getLine(doc, line) - function findNextLine() { - var l = line + dir - if (l < doc.first || l >= doc.first + doc.size) { return false } - line = l - return lineObj = getLine(doc, l) - } - function moveOnce(boundToLine) { - var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true) - if (next == null) { - if (!boundToLine && findNextLine()) { - if (visually) { ch = (dir < 0 ? lineRight : lineLeft)(lineObj) } - else { ch = dir < 0 ? lineObj.text.length : 0 } - } else { return false } - } else { ch = next } - return true - } - - if (unit == "char") { - moveOnce() - } else if (unit == "column") { - moveOnce(true) - } else if (unit == "word" || unit == "group") { - var sawType = null, group = unit == "group" - var helper = doc.cm && doc.cm.getHelper(pos, "wordChars") - for (var first = true;; first = false) { - if (dir < 0 && !moveOnce(!first)) { break } - var cur = lineObj.text.charAt(ch) || "\n" - var type = isWordChar(cur, helper) ? "w" - : group && cur == "\n" ? "n" - : !group || /\s/.test(cur) ? null - : "p" - if (group && !first && !type) { type = "s" } - if (sawType && sawType != type) { - if (dir < 0) {dir = 1; moveOnce()} - break - } - - if (type) { sawType = type } - if (dir > 0 && !moveOnce(!first)) { break } - } - } - var result = skipAtomic(doc, Pos(line, ch), pos, origDir, true) - if (!cmp(pos, result)) { result.hitSide = true } - return result -} - -// For relative vertical movement. Dir may be -1 or 1. Unit can be -// "page" or "line". The resulting position will have a hitSide=true -// property if it reached the end of the document. -function findPosV(cm, pos, dir, unit) { - var doc = cm.doc, x = pos.left, y - if (unit == "page") { - var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight) - var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3) - y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount - - } else if (unit == "line") { - y = dir > 0 ? pos.bottom + 3 : pos.top - 3 - } - var target - for (;;) { - 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 -} - -// CONTENTEDITABLE INPUT STYLE - -function ContentEditableInput(cm) { - this.cm = cm - this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null - this.polling = new Delayed() - this.gracePeriod = false -} - -ContentEditableInput.prototype = copyObj({ - init: function(display) { - var input = this, cm = input.cm - var div = input.div = display.lineDiv - disableBrowserMagic(div, cm.options.spellcheck) - - on(div, "paste", function (e) { - if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } - // IE doesn't fire input events, so we schedule a read for the pasted content in this way - if (ie_version <= 11) { setTimeout(operation(cm, function () { - if (!input.pollContent()) { regChange(cm) } - }), 20) } - }) - - on(div, "compositionstart", function (e) { - var data = e.data - input.composing = {sel: cm.doc.sel, data: data, startData: data} - if (!data) { return } - var prim = cm.doc.sel.primary() - var line = cm.getLine(prim.head.line) - var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length)) - if (found > -1 && found <= prim.head.ch) - { input.composing.sel = simpleSelection(Pos(prim.head.line, found), - Pos(prim.head.line, found + data.length)) } - }) - on(div, "compositionupdate", function (e) { return input.composing.data = e.data; }) - on(div, "compositionend", function (e) { - var ours = input.composing - if (!ours) { return } - if (e.data != ours.startData && !/\u200b/.test(e.data)) - { ours.data = e.data } - // Need a small delay to prevent other code (input event, - // selection polling) from doing damage when fired right after - // compositionend. - setTimeout(function () { - if (!ours.handled) - { input.applyComposition(ours) } - if (input.composing == ours) - { input.composing = null } - }, 50) - }) - - on(div, "touchstart", function () { return input.forceCompositionEnd(); }) - - on(div, "input", function () { - if (input.composing) { return } - if (cm.isReadOnly() || !input.pollContent()) - { runInOp(input.cm, function () { return regChange(cm); }) } - }) - - function onCopyCut(e) { - if (signalDOMEvent(cm, e)) { return } - if (cm.somethingSelected()) { - setLastCopied({lineWise: false, text: cm.getSelections()}) - if (e.type == "cut") { cm.replaceSelection("", null, "cut") } - } else if (!cm.options.lineWiseCopyCut) { - return - } else { - var ranges = copyableRanges(cm) - setLastCopied({lineWise: true, text: ranges.text}) - if (e.type == "cut") { - cm.operation(function () { - cm.setSelections(ranges.ranges, 0, sel_dontScroll) - cm.replaceSelection("", null, "cut") - }) - } - } - if (e.clipboardData) { - e.clipboardData.clearData() - var content = lastCopied.text.join("\n") - // iOS exposes the clipboard API, but seems to discard content inserted into it - e.clipboardData.setData("Text", content) - if (e.clipboardData.getData("Text") == content) { - e.preventDefault() - return - } - } - // Old-fashioned briefly-focus-a-textarea hack - var kludge = hiddenTextarea(), te = kludge.firstChild - cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild) - te.value = lastCopied.text.join("\n") - var hadFocus = document.activeElement - selectInput(te) - setTimeout(function () { - cm.display.lineSpace.removeChild(kludge) - hadFocus.focus() - if (hadFocus == div) { input.showPrimarySelection() } - }, 50) - } - on(div, "copy", onCopyCut) - on(div, "cut", onCopyCut) - }, - - prepareSelection: function() { - var result = prepareSelection(this.cm, false) - result.focus = this.cm.state.focused - return result - }, - - showSelection: function(info, takeFocus) { - if (!info || !this.cm.display.view.length) { return } - if (info.focus || takeFocus) { this.showPrimarySelection() } - this.showMultipleSelections(info) - }, - - showPrimarySelection: function() { - var sel = window.getSelection(), prim = this.cm.doc.sel.primary() - var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset) - var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset) - if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && - cmp(minPos(curAnchor, curFocus), prim.from()) == 0 && - cmp(maxPos(curAnchor, curFocus), prim.to()) == 0) - { return } - - var start = posToDOM(this.cm, prim.from()) - var end = posToDOM(this.cm, prim.to()) - if (!start && !end) { return } - - var view = this.cm.display.view - var old = sel.rangeCount && sel.getRangeAt(0) - if (!start) { - start = {node: view[0].measure.map[2], offset: 0} - } else if (!end) { // FIXME dangerously hacky - var measure = view[view.length - 1].measure - var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map - end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]} - } - - var rng - try { rng = range(start.node, start.offset, end.offset, end.node) } - catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible - if (rng) { - if (!gecko && this.cm.state.focused) { - sel.collapse(start.node, start.offset) - if (!rng.collapsed) { - sel.removeAllRanges() - sel.addRange(rng) - } - } else { - sel.removeAllRanges() - sel.addRange(rng) - } - if (old && sel.anchorNode == null) { sel.addRange(old) } - else if (gecko) { this.startGracePeriod() } - } - this.rememberSelection() - }, - - startGracePeriod: function() { - var this$1 = this; - - clearTimeout(this.gracePeriod) - this.gracePeriod = setTimeout(function () { - this$1.gracePeriod = false - if (this$1.selectionChanged()) - { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }) } - }, 20) - }, - - showMultipleSelections: function(info) { - removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors) - removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection) - }, - - rememberSelection: function() { - var sel = window.getSelection() - this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset - this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset - }, - - selectionInEditor: function() { - var sel = window.getSelection() - if (!sel.rangeCount) { return false } - var node = sel.getRangeAt(0).commonAncestorContainer - return contains(this.div, node) - }, - - focus: function() { - if (this.cm.options.readOnly != "nocursor") { this.div.focus() } - }, - blur: function() { this.div.blur() }, - getField: function() { return this.div }, - - supportsTouch: function() { return true }, - - receivedFocus: function() { - var input = this - if (this.selectionInEditor()) - { this.pollSelection() } - else - { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }) } - - function poll() { - if (input.cm.state.focused) { - input.pollSelection() - input.polling.set(input.cm.options.pollInterval, poll) - } - } - this.polling.set(this.cm.options.pollInterval, poll) - }, - - selectionChanged: function() { - var sel = window.getSelection() - return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || - sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset - }, - - pollSelection: function() { - if (!this.composing && !this.gracePeriod && this.selectionChanged()) { - var sel = window.getSelection(), cm = this.cm - this.rememberSelection() - var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset) - var head = domToPos(cm, sel.focusNode, sel.focusOffset) - if (anchor && head) { runInOp(cm, function () { - setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll) - if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true } - }) } - } - }, - - pollContent: function() { - var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary() - var from = sel.from(), to = sel.to() - if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } - - var fromIndex, fromLine, fromNode - if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { - fromLine = lineNo(display.view[0].line) - fromNode = display.view[0].node - } else { - fromLine = lineNo(display.view[fromIndex].line) - fromNode = display.view[fromIndex - 1].node.nextSibling - } - var toIndex = findViewIndex(cm, to.line) - var toLine, toNode - if (toIndex == display.view.length - 1) { - toLine = display.viewTo - 1 - toNode = display.lineDiv.lastChild - } else { - toLine = lineNo(display.view[toIndex + 1].line) - 1 - toNode = display.view[toIndex + 1].node.previousSibling - } - - var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)) - var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)) - while (newText.length > 1 && oldText.length > 1) { - if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine-- } - else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++ } - else { break } - } - - var cutFront = 0, cutEnd = 0 - var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length) - while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) - { ++cutFront } - var newBot = lst(newText), oldBot = lst(oldText) - var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), - oldBot.length - (oldText.length == 1 ? cutFront : 0)) - while (cutEnd < maxCutEnd && - newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) - { ++cutEnd } - - newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd) - newText[0] = newText[0].slice(cutFront) - - var chFrom = Pos(fromLine, cutFront) - var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0) - if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { - replaceRange(cm.doc, newText, chFrom, chTo, "+input") - return true - } - }, - - ensurePolled: function() { - this.forceCompositionEnd() - }, - reset: function() { - this.forceCompositionEnd() - }, - forceCompositionEnd: function() { - if (!this.composing || this.composing.handled) { return } - this.applyComposition(this.composing) - this.composing.handled = true - this.div.blur() - this.div.focus() - }, - applyComposition: function(composing) { - if (this.cm.isReadOnly()) - { operation(this.cm, regChange)(this.cm) } - else if (composing.data && composing.data != composing.startData) - { operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel) } - }, - - setUneditable: function(node) { - node.contentEditable = "false" - }, - - onKeyPress: function(e) { - e.preventDefault() - if (!this.cm.isReadOnly()) - { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0) } - }, - - readOnlyChanged: function(val) { - this.div.contentEditable = String(val != "nocursor") - }, - - onContextMenu: nothing, - resetPosition: nothing, - - needsContentAttribute: true - }, ContentEditableInput.prototype) - -function posToDOM(cm, pos) { - var view = findViewForLine(cm, pos.line) - if (!view || view.hidden) { return null } - var line = getLine(cm.doc, pos.line) - var info = mapFromLineView(view, line, pos.line) - - var order = getOrder(line), side = "left" - if (order) { - var partPos = getBidiPartAt(order, pos.ch) - side = partPos % 2 ? "right" : "left" - } - var result = nodeAndOffsetInLineMap(info.map, pos.ch, side) - result.offset = result.collapse == "right" ? result.end : result.start - return result -} - -function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } - -function domTextBetween(cm, from, to, fromLine, toLine) { - var text = "", closing = false, lineSep = cm.doc.lineSeparator() - function recognizeMarker(id) { return function (marker) { return marker.id == id; } } - function walk(node) { - if (node.nodeType == 1) { - var cmText = node.getAttribute("cm-text") - if (cmText != null) { - if (cmText == "") { cmText = node.textContent.replace(/\u200b/g, "") } - text += cmText - return - } - var markerID = node.getAttribute("cm-marker"), range$$1 - if (markerID) { - var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)) - if (found.length && (range$$1 = found[0].find())) - { text += getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep) } - return - } - if (node.getAttribute("contenteditable") == "false") { return } - for (var i = 0; i < node.childNodes.length; i++) - { walk(node.childNodes[i]) } - if (/^(pre|div|p)$/i.test(node.nodeName)) - { closing = true } - } else if (node.nodeType == 3) { - var val = node.nodeValue - if (!val) { return } - if (closing) { - text += lineSep - closing = false - } - text += val - } - } - for (;;) { - walk(from) - if (from == to) { break } - from = from.nextSibling - } - return text -} - -function domToPos(cm, node, offset) { - var lineNode - if (node == cm.display.lineDiv) { - lineNode = cm.display.lineDiv.childNodes[offset] - if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } - node = null; offset = 0 - } else { - for (lineNode = node;; lineNode = lineNode.parentNode) { - if (!lineNode || lineNode == cm.display.lineDiv) { return null } - if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } - } - } - for (var i = 0; i < cm.display.view.length; i++) { - var lineView = cm.display.view[i] - if (lineView.node == lineNode) - { return locateNodeInLineView(lineView, node, offset) } - } -} - -function locateNodeInLineView(lineView, node, offset) { - var wrapper = lineView.text.firstChild, bad = false - if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } - if (node == wrapper) { - bad = true - node = wrapper.childNodes[offset] - offset = 0 - if (!node) { - var line = lineView.rest ? lst(lineView.rest) : lineView.line - return badPos(Pos(lineNo(line), line.text.length), bad) - } - } - - var textNode = node.nodeType == 3 ? node : null, topNode = node - if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { - textNode = node.firstChild - if (offset) { offset = textNode.nodeValue.length } - } - while (topNode.parentNode != wrapper) { topNode = topNode.parentNode } - var measure = lineView.measure, maps = measure.maps - - function find(textNode, topNode, offset) { - for (var i = -1; i < (maps ? maps.length : 0); i++) { - var map$$1 = i < 0 ? measure.map : maps[i] - for (var j = 0; j < map$$1.length; j += 3) { - var curNode = map$$1[j + 2] - if (curNode == textNode || curNode == topNode) { - var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]) - var ch = map$$1[j] + offset - if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)] } - return Pos(line, ch) - } - } - } - } - var found = find(textNode, topNode, offset) - if (found) { return badPos(found, bad) } - - // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems - for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { - found = find(after, after.firstChild, 0) - if (found) - { return badPos(Pos(found.line, found.ch - dist), bad) } - else - { dist += after.textContent.length } - } - for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { - found = find(before, before.firstChild, -1) - if (found) - { return badPos(Pos(found.line, found.ch + dist$1), bad) } - else - { dist$1 += before.textContent.length } - } -} - -// TEXTAREA INPUT STYLE - -function TextareaInput(cm) { - this.cm = cm - // See input.poll and input.reset - this.prevInput = "" - - // Flag that indicates whether we expect input to appear real soon - // now (after some event like 'keypress' or 'input') and are - // polling intensively. - this.pollingFast = false - // Self-resetting timeout for the poller - this.polling = new Delayed() - // Tracks when input.reset has punted to just putting a short - // string into the textarea instead of the full selection. - this.inaccurateSelection = false - // Used to work around IE issue with selection being forgotten when focus moves away from textarea - this.hasSelection = false - this.composing = null -} - -TextareaInput.prototype = copyObj({ - init: function(display) { - var this$1 = this; - - var input = this, cm = this.cm - - // Wraps and hides input textarea - var div = this.wrapper = hiddenTextarea() - // The semihidden textarea that is focused when the editor is - // focused, and receives input. - var te = this.textarea = div.firstChild - display.wrapper.insertBefore(div, display.wrapper.firstChild) - - // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) - if (ios) { te.style.width = "0px" } - - on(te, "input", function () { - if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null } - input.poll() - }) - - on(te, "paste", function (e) { - if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } - - cm.state.pasteIncoming = true - input.fastPoll() - }) - - function prepareCopyCut(e) { - if (signalDOMEvent(cm, e)) { return } - if (cm.somethingSelected()) { - setLastCopied({lineWise: false, text: cm.getSelections()}) - if (input.inaccurateSelection) { - input.prevInput = "" - input.inaccurateSelection = false - te.value = lastCopied.text.join("\n") - selectInput(te) - } - } else if (!cm.options.lineWiseCopyCut) { - return - } else { - var ranges = copyableRanges(cm) - setLastCopied({lineWise: true, text: ranges.text}) - if (e.type == "cut") { - cm.setSelections(ranges.ranges, null, sel_dontScroll) - } else { - input.prevInput = "" - te.value = ranges.text.join("\n") - selectInput(te) - } - } - if (e.type == "cut") { cm.state.cutIncoming = true } - } - on(te, "cut", prepareCopyCut) - on(te, "copy", prepareCopyCut) - - on(display.scroller, "paste", function (e) { - if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } - cm.state.pasteIncoming = true - input.focus() - }) - - // Prevent normal selection in the editor (we handle our own) - on(display.lineSpace, "selectstart", function (e) { - if (!eventInWidget(display, e)) { e_preventDefault(e) } - }) - - on(te, "compositionstart", function () { - var start = cm.getCursor("from") - if (input.composing) { input.composing.range.clear() } - input.composing = { - start: start, - range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) - } - }) - on(te, "compositionend", function () { - if (input.composing) { - input.poll() - input.composing.range.clear() - input.composing = null - } - }) - }, - - prepareSelection: function() { - // Redraw the selection and/or cursor - var cm = this.cm, display = cm.display, doc = cm.doc - var result = prepareSelection(cm) - - // Move the hidden textarea near the cursor to prevent scrolling artifacts - if (cm.options.moveInputWithCursor) { - var headPos = cursorCoords(cm, doc.sel.primary().head, "div") - var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect() - result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, - headPos.top + lineOff.top - wrapOff.top)) - result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, - headPos.left + lineOff.left - wrapOff.left)) - } - - return result - }, - - showSelection: function(drawn) { - var cm = this.cm, display = cm.display - removeChildrenAndAdd(display.cursorDiv, drawn.cursors) - removeChildrenAndAdd(display.selectionDiv, drawn.selection) - if (drawn.teTop != null) { - this.wrapper.style.top = drawn.teTop + "px" - this.wrapper.style.left = drawn.teLeft + "px" - } - }, - - // Reset the input to correspond to the selection (or to be empty, - // when not typing and nothing is selected) - reset: function(typing) { - if (this.contextMenuPending) { return } - var minimal, selected, cm = this.cm, doc = cm.doc - if (cm.somethingSelected()) { - this.prevInput = "" - var range$$1 = doc.sel.primary() - minimal = hasCopyEvent && - (range$$1.to().line - range$$1.from().line > 100 || (selected = cm.getSelection()).length > 1000) - var content = minimal ? "-" : selected || cm.getSelection() - this.textarea.value = content - if (cm.state.focused) { selectInput(this.textarea) } - if (ie && ie_version >= 9) { this.hasSelection = content } - } else if (!typing) { - this.prevInput = this.textarea.value = "" - if (ie && ie_version >= 9) { this.hasSelection = null } - } - this.inaccurateSelection = minimal - }, - - getField: function() { return this.textarea }, - - supportsTouch: function() { return false }, - - focus: function() { - if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { - try { this.textarea.focus() } - catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM - } - }, - - blur: function() { this.textarea.blur() }, - - resetPosition: function() { - this.wrapper.style.top = this.wrapper.style.left = 0 - }, - - receivedFocus: function() { this.slowPoll() }, - - // Poll for input changes, using the normal rate of polling. This - // runs as long as the editor is focused. - slowPoll: function() { - var this$1 = this; - - if (this.pollingFast) { return } - this.polling.set(this.cm.options.pollInterval, function () { - this$1.poll() - if (this$1.cm.state.focused) { this$1.slowPoll() } - }) - }, - - // When an event has just come in that is likely to add or change - // something in the input textarea, we poll faster, to ensure that - // the change appears on the screen quickly. - fastPoll: function() { - var missed = false, input = this - input.pollingFast = true - function p() { - var changed = input.poll() - if (!changed && !missed) {missed = true; input.polling.set(60, p)} - else {input.pollingFast = false; input.slowPoll()} - } - input.polling.set(20, p) - }, - - // Read input from the textarea, and update the document to match. - // When something is selected, it is present in the textarea, and - // selected (unless it is huge, in which case a placeholder is - // used). When nothing is selected, the cursor sits after previously - // seen text (can be empty), which is stored in prevInput (we must - // not reset the textarea when typing, because that breaks IME). - poll: function() { - var this$1 = this; - - var cm = this.cm, input = this.textarea, prevInput = this.prevInput - // Since this is called a *lot*, try to bail out as cheaply as - // possible when it is clear that nothing happened. hasSelection - // will be the case when there is a lot of text in the textarea, - // in which case reading its value would be expensive. - if (this.contextMenuPending || !cm.state.focused || - (hasSelection(input) && !prevInput && !this.composing) || - cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) - { return false } - - var text = input.value - // If nothing changed, bail. - if (text == prevInput && !cm.somethingSelected()) { return false } - // Work around nonsensical selection resetting in IE9/10, and - // inexplicable appearance of private area unicode characters on - // some key combos in Mac (#2689). - if (ie && ie_version >= 9 && this.hasSelection === text || - mac && /[\uf700-\uf7ff]/.test(text)) { - cm.display.input.reset() - return false - } - - if (cm.doc.sel == cm.display.selForContextMenu) { - var first = text.charCodeAt(0) - if (first == 0x200b && !prevInput) { prevInput = "\u200b" } - if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } - } - // Find the part of the input that is actually new - var same = 0, l = Math.min(prevInput.length, text.length) - while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same } - - runInOp(cm, function () { - applyTextInput(cm, text.slice(same), prevInput.length - same, - null, this$1.composing ? "*compose" : null) - - // Don't leave long text in the textarea, since it makes further polling slow - if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = "" } - else { this$1.prevInput = text } - - if (this$1.composing) { - this$1.composing.range.clear() - this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), - {className: "CodeMirror-composing"}) - } - }) - return true - }, - - ensurePolled: function() { - if (this.pollingFast && this.poll()) { this.pollingFast = false } - }, - - onKeyPress: function() { - if (ie && ie_version >= 9) { this.hasSelection = null } - this.fastPoll() - }, - - onContextMenu: function(e) { - var input = this, cm = input.cm, display = cm.display, te = input.textarea - var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop - if (!pos || presto) { return } // Opera is difficult. - - // Reset the current text selection only if the click is done outside of the selection - // and 'resetSelectionOnContextMenu' option is true. - var reset = cm.options.resetSelectionOnContextMenu - if (reset && cm.doc.sel.contains(pos) == -1) - { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll) } - - var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText - input.wrapper.style.cssText = "position: absolute" - var wrapperBox = input.wrapper.getBoundingClientRect() - te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);" - var oldScrollY - if (webkit) { oldScrollY = window.scrollY } // Work around Chrome issue (#2712) - display.input.focus() - if (webkit) { window.scrollTo(null, oldScrollY) } - display.input.reset() - // Adds "Select all" to context menu in FF - if (!cm.somethingSelected()) { te.value = input.prevInput = " " } - input.contextMenuPending = true - display.selForContextMenu = cm.doc.sel - clearTimeout(display.detectingSelectAll) - - // Select-all will be greyed out if there's nothing to select, so - // this adds a zero-width space so that we can later check whether - // it got selected. - function prepareSelectAllHack() { - if (te.selectionStart != null) { - var selected = cm.somethingSelected() - var extval = "\u200b" + (selected ? te.value : "") - te.value = "\u21da" // Used to catch context-menu undo - te.value = extval - input.prevInput = selected ? "" : "\u200b" - te.selectionStart = 1; te.selectionEnd = extval.length - // Re-set this, in case some other handler touched the - // selection in the meantime. - display.selForContextMenu = cm.doc.sel - } - } - function rehide() { - input.contextMenuPending = false - input.wrapper.style.cssText = oldWrapperCSS - te.style.cssText = oldCSS - if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos) } - - // Try to detect the user choosing select-all - if (te.selectionStart != null) { - if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack() } - var i = 0, poll = function () { - if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && - te.selectionEnd > 0 && input.prevInput == "\u200b") - { operation(cm, selectAll)(cm) } - else if (i++ < 10) { display.detectingSelectAll = setTimeout(poll, 500) } - else { display.input.reset() } - } - display.detectingSelectAll = setTimeout(poll, 200) - } - } - - if (ie && ie_version >= 9) { prepareSelectAllHack() } - if (captureRightClick) { - e_stop(e) - var mouseup = function () { - off(window, "mouseup", mouseup) - setTimeout(rehide, 20) - } - on(window, "mouseup", mouseup) - } else { - setTimeout(rehide, 50) - } - }, - - readOnlyChanged: function(val) { - if (!val) { this.reset() } - }, - - setUneditable: nothing, - - needsContentAttribute: false -}, TextareaInput.prototype) - -function fromTextArea(textarea, options) { - options = options ? copyObj(options) : {} - options.value = textarea.value - if (!options.tabindex && textarea.tabIndex) - { options.tabindex = textarea.tabIndex } - if (!options.placeholder && textarea.placeholder) - { options.placeholder = textarea.placeholder } - // Set autofocus to true if this textarea is focused, or if it has - // autofocus and no other element is focused. - if (options.autofocus == null) { - var hasFocus = activeElt() - options.autofocus = hasFocus == textarea || - textarea.getAttribute("autofocus") != null && hasFocus == document.body - } - - function save() {textarea.value = cm.getValue()} - - var realSubmit - if (textarea.form) { - on(textarea.form, "submit", save) - // Deplorable hack to make the submit method do the right thing. - if (!options.leaveSubmitMethodAlone) { - var form = textarea.form - realSubmit = form.submit - try { - var wrappedSubmit = form.submit = function () { - save() - form.submit = realSubmit - form.submit() - form.submit = wrappedSubmit - } - } catch(e) {} - } - } - - options.finishInit = function (cm) { - cm.save = save - cm.getTextArea = function () { return textarea; } - cm.toTextArea = function () { - cm.toTextArea = isNaN // Prevent this from being ran twice - save() - textarea.parentNode.removeChild(cm.getWrapperElement()) - textarea.style.display = "" - if (textarea.form) { - off(textarea.form, "submit", save) - if (typeof textarea.form.submit == "function") - { textarea.form.submit = realSubmit } - } - } - } - - textarea.style.display = "none" - var cm = CodeMirror$1(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, - options) - return cm -} - -function addLegacyProps(CodeMirror) { - CodeMirror.off = off - CodeMirror.on = on - CodeMirror.wheelEventPixels = wheelEventPixels - CodeMirror.Doc = Doc - CodeMirror.splitLines = splitLinesAuto - CodeMirror.countColumn = countColumn - CodeMirror.findColumn = findColumn - CodeMirror.isWordChar = isWordCharBasic - CodeMirror.Pass = Pass - CodeMirror.signal = signal - CodeMirror.Line = Line - CodeMirror.changeEnd = changeEnd - CodeMirror.scrollbarModel = scrollbarModel - CodeMirror.Pos = Pos - CodeMirror.cmpPos = cmp - CodeMirror.modes = modes - CodeMirror.mimeModes = mimeModes - CodeMirror.resolveMode = resolveMode - CodeMirror.getMode = getMode - CodeMirror.modeExtensions = modeExtensions - CodeMirror.extendMode = extendMode - CodeMirror.copyState = copyState - CodeMirror.startState = startState - CodeMirror.innerMode = innerMode - CodeMirror.commands = commands - CodeMirror.keyMap = keyMap - CodeMirror.keyName = keyName - CodeMirror.isModifierKey = isModifierKey - CodeMirror.lookupKey = lookupKey - CodeMirror.normalizeKeyMap = normalizeKeyMap - CodeMirror.StringStream = StringStream - CodeMirror.SharedTextMarker = SharedTextMarker - CodeMirror.TextMarker = TextMarker - CodeMirror.LineWidget = LineWidget - CodeMirror.e_preventDefault = e_preventDefault - CodeMirror.e_stopPropagation = e_stopPropagation - CodeMirror.e_stop = e_stop - CodeMirror.addClass = addClass - CodeMirror.contains = contains - CodeMirror.rmClass = rmClass - CodeMirror.keyNames = keyNames -} - -// EDITOR CONSTRUCTOR - -defineOptions(CodeMirror$1) - -addEditorMethods(CodeMirror$1) - -// Set up methods on CodeMirror's prototype to redirect to the editor's document. -var dontDelegate = "iter insert remove copy getEditor constructor".split(" ") -for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) - { CodeMirror$1.prototype[prop] = (function(method) { - return function() {return method.apply(this.doc, arguments)} - })(Doc.prototype[prop]) } } - -eventMixin(Doc) - -// INPUT HANDLING - -CodeMirror$1.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput} - -// MODE DEFINITION AND QUERYING - -// 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$1.defineMode = function(name/*, mode, …*/) { - if (!CodeMirror$1.defaults.mode && name != "null") { CodeMirror$1.defaults.mode = name } - defineMode.apply(this, arguments) -} - -CodeMirror$1.defineMIME = defineMIME - -// Minimal default mode. -CodeMirror$1.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }) -CodeMirror$1.defineMIME("text/plain", "null") - -// EXTENSIONS - -CodeMirror$1.defineExtension = function (name, func) { - CodeMirror$1.prototype[name] = func -} -CodeMirror$1.defineDocExtension = function (name, func) { - Doc.prototype[name] = func -} - -CodeMirror$1.fromTextArea = fromTextArea - -addLegacyProps(CodeMirror$1) - -CodeMirror$1.version = "5.20.2" - -return CodeMirror$1; - -}))); diff --git a/plugins/managesieve/codemirror/mode/sieve/sieve.js b/plugins/managesieve/codemirror/mode/sieve/sieve.js deleted file mode 100644 index f67db2f5531..00000000000 --- a/plugins/managesieve/codemirror/mode/sieve/sieve.js +++ /dev/null @@ -1,193 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.defineMode("sieve", function(config) { - function words(str) { - var obj = {}, words = str.split(" "); - for (var i = 0; i < words.length; ++i) obj[words[i]] = true; - return obj; - } - - var keywords = words("if elsif else stop require"); - var atoms = words("true false not"); - var indentUnit = config.indentUnit; - - function tokenBase(stream, state) { - - var ch = stream.next(); - if (ch == "/" && stream.eat("*")) { - state.tokenize = tokenCComment; - return tokenCComment(stream, state); - } - - if (ch === '#') { - stream.skipToEnd(); - return "comment"; - } - - if (ch == "\"") { - state.tokenize = tokenString(ch); - return state.tokenize(stream, state); - } - - if (ch == "(") { - state._indent.push("("); - // add virtual angel wings so that editor behaves... - // ...more sane incase of broken brackets - state._indent.push("{"); - return null; - } - - if (ch === "{") { - state._indent.push("{"); - return null; - } - - if (ch == ")") { - state._indent.pop(); - state._indent.pop(); - } - - if (ch === "}") { - state._indent.pop(); - return null; - } - - if (ch == ",") - return null; - - if (ch == ";") - return null; - - - if (/[{}\(\),;]/.test(ch)) - return null; - - // 1*DIGIT "K" / "M" / "G" - if (/\d/.test(ch)) { - stream.eatWhile(/[\d]/); - stream.eat(/[KkMmGg]/); - return "number"; - } - - // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_") - if (ch == ":") { - stream.eatWhile(/[a-zA-Z_]/); - stream.eatWhile(/[a-zA-Z0-9_]/); - - return "operator"; - } - - stream.eatWhile(/\w/); - var cur = stream.current(); - - // "text:" *(SP / HTAB) (hash-comment / CRLF) - // *(multiline-literal / multiline-dotstart) - // "." CRLF - if ((cur == "text") && stream.eat(":")) - { - state.tokenize = tokenMultiLineString; - return "string"; - } - - if (keywords.propertyIsEnumerable(cur)) - return "keyword"; - - if (atoms.propertyIsEnumerable(cur)) - return "atom"; - - return null; - } - - function tokenMultiLineString(stream, state) - { - state._multiLineString = true; - // the first line is special it may contain a comment - if (!stream.sol()) { - stream.eatSpace(); - - if (stream.peek() == "#") { - stream.skipToEnd(); - return "comment"; - } - - stream.skipToEnd(); - return "string"; - } - - if ((stream.next() == ".") && (stream.eol())) - { - state._multiLineString = false; - state.tokenize = tokenBase; - } - - return "string"; - } - - function tokenCComment(stream, state) { - var maybeEnd = false, ch; - while ((ch = stream.next()) != null) { - if (maybeEnd && ch == "/") { - state.tokenize = tokenBase; - break; - } - maybeEnd = (ch == "*"); - } - return "comment"; - } - - function tokenString(quote) { - return function(stream, state) { - var escaped = false, ch; - while ((ch = stream.next()) != null) { - if (ch == quote && !escaped) - break; - escaped = !escaped && ch == "\\"; - } - if (!escaped) state.tokenize = tokenBase; - return "string"; - }; - } - - return { - startState: function(base) { - return {tokenize: tokenBase, - baseIndent: base || 0, - _indent: []}; - }, - - token: function(stream, state) { - if (stream.eatSpace()) - return null; - - return (state.tokenize || tokenBase)(stream, state);; - }, - - indent: function(state, _textAfter) { - var length = state._indent.length; - if (_textAfter && (_textAfter[0] == "}")) - length--; - - if (length <0) - length = 0; - - return length * indentUnit; - }, - - electricChars: "}" - }; -}); - -CodeMirror.defineMIME("application/sieve", "sieve"); - -}); diff --git a/program/include/rcmail.php b/program/include/rcmail.php index 0a3051f69a1..29da9b56113 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -1983,7 +1983,7 @@ public function html_editor($mode = '') $this->output->add_label('selectimage', 'addimage', 'selectmedia', 'addmedia'); $this->output->set_env('editor_config', $config); - $this->output->include_css('program/js/tinymce/roundcube/browser.css'); + $this->output->include_css('program/resources/tinymce/browser.css'); $this->output->include_script('tinymce/tinymce.min.js'); $this->output->include_script('editor.js'); } diff --git a/program/js/editor.js b/program/js/editor.js index efdabd8eb00..98c6ebef49b 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -42,7 +42,7 @@ function rcube_text_editor(config, id) cache_suffix: 's=4031301', theme: 'modern', language: config.lang, - content_css: rcmail.assets_path('program/js/tinymce/roundcube/content.css'), + content_css: rcmail.assets_path('program/resources/tinymce/content.css'), menubar: false, statusbar: false, toolbar_items_size: 'small', @@ -751,7 +751,7 @@ function rcube_text_editor(config, id) case 'media': rx = /^video\//i; - img_src = 'program/js/tinymce/roundcube/video.png'; + img_src = 'program/resources/tinymce/video.png'; break; default: diff --git a/program/js/jquery.min.js b/program/js/jquery.min.js deleted file mode 100644 index 650ca83d8af..00000000000 --- a/program/js/jquery.min.js +++ /dev/null @@ -1,36 +0,0 @@ -/*! - * jQuery JavaScript Library v3.1.1 - * http://jquery.com/ - * - * @licstart The following is the entire license notice for the - * JavaScript code in this file. - * - * Copyright 2005, 2016 jQuery Foundation, Inc. - * - * Licensed under the MIT licenses - * - * 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. - * - * @licend The above is the entire license notice - * for the JavaScript code in this file. - */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):C.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/[^\x20\t\r\n\f]+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R), -a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,ka=/^$|\/(?:java|ecma)script/i,la={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};la.optgroup=la.option,la.tbody=la.tfoot=la.colgroup=la.caption=la.thead,la.th=la.td;function ma(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function na(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=ma(l.appendChild(f),"script"),j&&na(g),c){k=0;while(f=g[k++])ka.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var qa=d.documentElement,ra=/^key/,sa=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ta=/^([^.]*)(?:\.(.+)|)/;function ua(){return!0}function va(){return!1}function wa(){try{return d.activeElement}catch(a){}}function xa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)xa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=va;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(qa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,za=/\s*$/g;function Da(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Ea(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Fa(a){var b=Ba.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ga(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Aa.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ia(f,b,c,d)});if(m&&(e=pa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(ma(e,"script"),Ea),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=ma(h),f=ma(a),d=0,e=f.length;d0&&na(g,!i&&ma(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ja(this,a,!0)},remove:function(a){return Ja(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.appendChild(a)}})},prepend:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(ma(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!za.test(a)&&!la[(ja.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function Ya(a,b,c,d,e){return new Ya.prototype.init(a,b,c,d,e)}r.Tween=Ya,Ya.prototype={constructor:Ya,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Ya.propHooks[this.prop];return a&&a.get?a.get(this):Ya.propHooks._default.get(this)},run:function(a){var b,c=Ya.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ya.propHooks._default.set(this),this}},Ya.prototype.init.prototype=Ya.prototype,Ya.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Ya.propHooks.scrollTop=Ya.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Ya.prototype.init,r.fx.step={};var Za,$a,_a=/^(?:toggle|show|hide)$/,ab=/queueHooks$/;function bb(){$a&&(a.requestAnimationFrame(bb),r.fx.tick())}function cb(){return a.setTimeout(function(){Za=void 0}),Za=r.now()}function db(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ba[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function eb(a,b,c){for(var d,e=(hb.tweeners[b]||[]).concat(hb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?ib:void 0)), -void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),ib={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=jb[b]||r.find.attr;jb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=jb[g],jb[g]=e,e=null!=c(a,b,d)?g:null,jb[g]=f),e}});var kb=/^(?:input|select|textarea|button)$/i,lb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):kb.test(a.nodeName)||lb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function mb(a){var b=a.match(K)||[];return b.join(" ")}function nb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,nb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,nb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,nb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=nb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(nb(c))+" ").indexOf(b)>-1)return!0;return!1}});var ob=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ob,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:mb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ia.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,"$1"),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("':f=a.settings.video_template_callback?a.settings.video_template_callback(e):'"}return f}function h(a){var b={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(a,c){if(b.source1||"param"!=a||(b.source1=c.map.movie),"iframe"!=a&&"object"!=a&&"embed"!=a&&"video"!=a&&"audio"!=a||(b.type||(b.type=a),b=tinymce.extend(c.map,b)),"script"==a){var e=d(c.map.src);if(!e)return;b={type:"script",source1:c.map.src,width:e.width,height:e.height}}"source"==a&&(b.source1?b.source2||(b.source2=c.map.src):b.source1=c.map.src),"img"!=a||b.poster||(b.poster=c.map.src)}}).parse(a),b.source1=b.source1||b.src||b.data,b.source2=b.source2||"",b.poster=b.poster||"",b}function i(b){return b.getAttribute("data-mce-object")?h(a.serializer.serialize(b,{selection:!0})):{}}function j(b){if(a.settings.media_filter_html===!1)return b;var c,d=new tinymce.html.Writer;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(a){d.comment(a)},cdata:function(a){d.cdata(a)},text:function(a,b){d.text(a,b)},start:function(b,e,f){if(c=!0,"script"!=b&&"noscript"!=b){for(var g=0;g=g&&(d(h,{src:b["source"+g],type:b["source"+g+"mime"]}),!b["source"+g]))return;break;case"img":if(!b.poster)return;e=!0}f.start(a,h,i)},end:function(a){if("video"==a&&c)for(var h=1;2>=h;h++)if(b["source"+h]){var i=[];i.map={},h>g&&(d(i,{src:b["source"+h],type:b["source"+h+"mime"]}),f.start("source",i,!0))}if(b.poster&&"object"==a&&c&&!e){var j=[];j.map={},d(j,{src:b.poster,width:b.width,height:b.height}),f.start("img",j,!0)}f.end(a)}},new tinymce.html.Schema({})).parse(a),f.getContent()}function l(b,c){var d,e,f,g,h;for(f=b.attributes,g=f.length;g--;)d=f[g].name,e=f[g].value,"width"!==d&&"height"!==d&&"style"!==d&&("data"!=d&&"src"!=d||(e=a.convertURL(e,d)),c.attr("data-mce-p-"+d,e));h=b.firstChild&&b.firstChild.value,h&&(c.attr("data-mce-html",escape(h)),c.firstChild=null)}function m(a){var b,c=a.name;return b=new tinymce.html.Node("img",1),b.shortEnded=!0,l(a,b),b.attr({width:a.attr("width")||"300",height:a.attr("height")||("audio"==c?"30":"150"),style:a.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":c,"class":"mce-object mce-object-"+c}),b}function n(a){var b,c,d,e=a.name;return b=new tinymce.html.Node("span",1),b.attr({contentEditable:"false",style:a.attr("style"),"data-mce-object":e,"class":"mce-preview-object mce-object-"+e}),l(a,b),c=new tinymce.html.Node(e,1),c.attr({src:a.attr("src"),allowfullscreen:a.attr("allowfullscreen"),width:a.attr("width")||"300",height:a.attr("height")||("audio"==e?"30":"150"),frameborder:"0"}),d=new tinymce.html.Node("span",1),d.attr("class","mce-shim"),b.append(c),b.append(d),b}var o=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$2",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\-_]+(?:\?.+)?)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowfullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&byline=0",allowfullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],p=tinymce.Env.ie&&tinymce.Env.ie<=8?"onChange":"onInput";a.on("ResolveName",function(a){var b;1==a.target.nodeType&&(b=a.target.getAttribute("data-mce-object"))&&(a.name=b)}),a.on("preInit",function(){var b=a.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(a){b[a]=new RegExp("]*>","gi")});var c=a.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(a){c[a]={}}),a.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(b){for(var c,e,f,g=b.length;g--;)c=b[g],c.parent&&(c.parent.attr("data-mce-object")||("script"!=c.name||(f=d(c.attr("src"))))&&(f&&(f.width&&c.attr("width",f.width.toString()),f.height&&c.attr("height",f.height.toString())),e="iframe"==c.name&&a.settings.media_live_embeds!==!1&&tinymce.Env.ceFalse?n(c):m(c),c.replace(e)))}),a.serializer.addAttributeFilter("data-mce-object",function(a,b){for(var c,d,e,f,g,h,i,k,l=a.length;l--;)if(c=a[l],c.parent){for(i=c.attr(b),d=new tinymce.html.Node(i,1),"audio"!=i&&"script"!=i&&(k=c.attr("class"),k&&-1!==k.indexOf("mce-preview-object")?d.attr({width:c.firstChild.attr("width"),height:c.firstChild.attr("height")}):d.attr({width:c.attr("width"),height:c.attr("height")})),d.attr({style:c.attr("style")}),f=c.attributes,e=f.length;e--;){var m=f[e].name;0===m.indexOf("data-mce-p-")&&d.attr(m.substr(11),f[e].value)}"script"==i&&d.attr("type","text/javascript"),g=c.attr("data-mce-html"),g&&(h=new tinymce.html.Node("#text",3),h.raw=!0,h.value=j(unescape(g)),d.append(h)),c.replace(d)}})}),a.on("click keyup",function(){var b=a.selection.getNode();b&&a.dom.hasClass(b,"mce-preview-object")&&a.dom.getAttrib(b,"data-mce-selected")&&b.setAttribute("data-mce-selected","2")}),a.on("ObjectSelected",function(a){var b=a.target.getAttribute("data-mce-object");"audio"!=b&&"script"!=b||a.preventDefault()}),a.on("objectResized",function(a){var b,c=a.target;c.getAttribute("data-mce-object")&&(b=c.getAttribute("data-mce-html"),b&&(b=unescape(b),c.setAttribute("data-mce-html",escape(k(b,{width:a.width,height:a.height})))))}),a.addButton("media",{tooltip:"Insert/edit video",onclick:e,stateSelector:["img[data-mce-object]","span[data-mce-object]"]}),a.addMenuItem("media",{icon:"media",text:"Insert/edit video",onclick:e,context:"insert",prependToContext:!0}),a.on("setContent",function(){a.$("span.mce-preview-object").each(function(b,c){var d=a.$(c);0===d.find("span.mce-shim",c).length&&d.append('')})}),a.addCommand("mceMedia",e),this.showDialog=e}); \ No newline at end of file diff --git a/program/js/tinymce/plugins/nonbreaking/plugin.min.js b/program/js/tinymce/plugins/nonbreaking/plugin.min.js deleted file mode 100644 index 190dc334fdb..00000000000 --- a/program/js/tinymce/plugins/nonbreaking/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("nonbreaking",function(a){var b=a.getParam("nonbreaking_force_tab");if(a.addCommand("mceNonBreaking",function(){a.insertContent(a.plugins.visualchars&&a.plugins.visualchars.state?' ':" "),a.dom.setAttrib(a.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),a.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),a.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),b){var c=+b>1?+b:3;a.on("keydown",function(b){if(9==b.keyCode){if(b.shiftKey)return;b.preventDefault();for(var d=0;c>d;d++)a.execCommand("mceNonBreaking")}})}}); \ No newline at end of file diff --git a/program/js/tinymce/plugins/noneditable/plugin.min.js b/program/js/tinymce/plugins/noneditable/plugin.min.js deleted file mode 100644 index 49e9d5a5326..00000000000 --- a/program/js/tinymce/plugins/noneditable/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("noneditable",function(a){function b(a){return function(b){return-1!==(" "+b.attr("class")+" ").indexOf(a)}}function c(b){function c(b){var c=arguments,d=c[c.length-2];return d>0&&'"'==g.charAt(d-1)?b:''+a.dom.encode("string"==typeof c[1]?c[1]:c[0])+""}var d=f.length,g=b.content,h=tinymce.trim(e);if("raw"!=b.format){for(;d--;)g=g.replace(f[d],c);b.content=g}}var d,e,f,g="contenteditable";d=" "+tinymce.trim(a.getParam("noneditable_editable_class","mceEditable"))+" ",e=" "+tinymce.trim(a.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";var h=b(d),i=b(e);f=a.getParam("noneditable_regexp"),f&&!f.length&&(f=[f]),a.on("PreInit",function(){f&&a.on("BeforeSetContent",c),a.parser.addAttributeFilter("class",function(a){for(var b,c=a.length;c--;)b=a[c],h(b)?b.attr(g,"true"):i(b)&&b.attr(g,"false")}),a.serializer.addAttributeFilter(g,function(a){for(var b,c=a.length;c--;)b=a[c],(h(b)||i(b))&&(f&&b.attr("data-mce-content")?(b.name="#text",b.type=3,b.raw=!0,b.value=b.attr("data-mce-content")):b.attr(g,null))})})}); \ No newline at end of file diff --git a/program/js/tinymce/plugins/pagebreak/plugin.min.js b/program/js/tinymce/plugins/pagebreak/plugin.min.js deleted file mode 100644 index 2a69eba08f5..00000000000 --- a/program/js/tinymce/plugins/pagebreak/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("pagebreak",function(a){var b="mce-pagebreak",c=a.getParam("pagebreak_separator",""),d=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(a){return"\\"+a}),"gi"),e='';a.addCommand("mcePageBreak",function(){a.settings.pagebreak_split_block?a.insertContent("

"+e+"

"):a.insertContent(e)}),a.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),a.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),a.on("ResolveName",function(c){"IMG"==c.target.nodeName&&a.dom.hasClass(c.target,b)&&(c.name="pagebreak")}),a.on("click",function(c){c=c.target,"IMG"===c.nodeName&&a.dom.hasClass(c,b)&&a.selection.select(c)}),a.on("BeforeSetContent",function(a){a.content=a.content.replace(d,e)}),a.on("PreInit",function(){a.serializer.addNodeFilter("img",function(b){for(var d,e,f=b.length;f--;)if(d=b[f],e=d.attr("class"),e&&-1!==e.indexOf("mce-pagebreak")){var g=d.parent;if(a.schema.getBlockElements()[g.name]&&a.settings.pagebreak_split_block){g.type=3,g.value=c,g.raw=!0,d.remove();continue}d.type=3,d.value=c,d.raw=!0}})})}); \ No newline at end of file diff --git a/program/js/tinymce/plugins/paste/plugin.min.js b/program/js/tinymce/plugins/paste/plugin.min.js deleted file mode 100644 index 47ead81b2af..00000000000 --- a/program/js/tinymce/plugins/paste/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b){"use strict";function c(a,b){for(var c,d=[],f=0;f/g]),f(h.parse(e)),i}function f(a){function b(a,b,c){return b||c?"\xa0":" "}return a=d(a,[/^[\s\S]*]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/|/g,[/( ?)\u00a0<\/span>( ?)/g,b],/
/g,/
$/i])}function g(a){var b=0;return function(){return a+b++}}return{filter:d,innerText:e,trimHtml:f,createIdGenerator:g}}),d("tinymce/pasteplugin/Clipboard",["tinymce/Env","tinymce/dom/RangeUtils","tinymce/util/VK","tinymce/pasteplugin/Utils","tinymce/util/Delay"],function(a,b,c,d,e){return function(f){function g(a){var b,c=f.dom;if(b=f.fire("BeforePastePreProcess",{content:a}),b=f.fire("PastePreProcess",b),a=b.content,!b.isDefaultPrevented()){if(f.hasEventListeners("PastePostProcess")&&!b.isDefaultPrevented()){var d=c.add(f.getBody(),"div",{style:"display:none"},a);b=f.fire("PastePostProcess",{node:d}),c.remove(d),a=b.node.innerHTML}b.isDefaultPrevented()||f.insertContent(a,{merge:f.settings.paste_merge_formats!==!1,data:{paste:!0}})}}function h(a){a=f.dom.encode(a).replace(/\r\n/g,"\n");var b,c=f.dom.getParent(f.selection.getStart(),f.dom.isBlock),e=f.settings.forced_root_block;e&&(b=f.dom.createHTML(e,f.settings.forced_root_block_attrs),b=b.substr(0,b.length-3)+">"),c&&/^(PRE|DIV)$/.test(c.nodeName)||!e?a=d.filter(a,[[/\n/g,"
"]]):(a=d.filter(a,[[/\n\n/g,"

"+b],[/^(.*<\/p>)(

)$/,b+"$1"],[/\n/g,"
"]]),-1!=a.indexOf("

")&&(a=b+a)),g(a)}function i(){function b(a){var b,c,e,f=a.startContainer;if(b=a.getClientRects(),b.length)return b[0];if(a.collapsed&&1==f.nodeType){for(e=f.childNodes[v.startOffset];e&&3==e.nodeType&&!e.data.length;)e=e.nextSibling;if(e)return"BR"==e.tagName&&(c=d.doc.createTextNode("\ufeff"),e.parentNode.insertBefore(c,e),a=d.createRng(),a.setStartBefore(c),a.setEndAfter(c),b=a.getClientRects(),d.remove(c)),b.length?b[0]:void 0}}var c,d=f.dom,e=f.getBody(),g=f.dom.getViewPort(f.getWin()),h=g.y,i=20;if(v=f.selection.getRng(),f.inline&&(c=f.selection.getScrollContainer(),c&&c.scrollTop>0&&(h=c.scrollTop)),v.getClientRects){var j=b(v);if(j)i=h+(j.top-d.getPos(e).y);else{i=h;var k=v.startContainer;k&&(3==k.nodeType&&k.parentNode!=e&&(k=k.parentNode),1==k.nodeType&&(i=d.getPos(k,c||e).y))}}u=d.add(f.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+i+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},A),(a.ie||a.gecko)&&d.setStyle(u,"left","rtl"==d.getStyle(e,"direction",!0)?65535:-65535),d.bind(u,"beforedeactivate focusin focusout",function(a){a.stopPropagation()}),u.focus(),f.selection.select(u,!0)}function j(){if(u){for(var a;a=f.dom.get("mcepastebin");)f.dom.remove(a),f.dom.unbind(a);v&&f.selection.setRng(v)}u=v=null}function k(){var a,b,c,d,e="";for(a=f.dom.select("div[id=mcepastebin]"),b=0;b0&&-1==c.indexOf(B)&&(b["text/plain"]=c)}if(a.types)for(var d=0;d')}var h,i,j,k=!1;if(d)for(h=0;h0}function s(a){return c.metaKeyPressed(a)&&86==a.keyCode||a.shiftKey&&45==a.keyCode}function t(){function b(a,b,c){var e;return r(a,"text/html")?e=a["text/html"]:(e=k(),e==A&&(c=!0)),e=d.trimHtml(e),u&&u.firstChild&&"mcepastebin"===u.firstChild.id&&(c=!0),j(),e.length||(c=!0),c&&(e=r(a,"text/plain")&&-1==e.indexOf("

")?a["text/plain"]:d.innerText(e)),e==A?void(b||f.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")):void(c?h(e):g(e))}function c(a){return 0===a["text/plain"].indexOf("file://")}f.on("keydown",function(b){function c(a){s(a)&&!a.isDefaultPrevented()&&j()}if(s(b)&&!b.isDefaultPrevented()){if(w=b.shiftKey&&86==b.keyCode,w&&a.webkit&&-1!=navigator.userAgent.indexOf("Version/"))return;if(b.stopImmediatePropagation(),y=(new Date).getTime(),a.ie&&w)return b.preventDefault(),void f.fire("paste",{ieFake:!0});j(),i(),f.once("keyup",c),f.once("paste",function(){f.off("keyup",c)})}});var t=function(){return v||f.selection.getRng()};f.on("paste",function(c){var d=(new Date).getTime(),g=m(c),h=(new Date).getTime()-d,l=(new Date).getTime()-y-h<1e3,q="text"==x.pasteFormat||w;return w=!1,c.isDefaultPrevented()||p(c)?void j():!n(g)&&o(c,t())?void j():(l||c.preventDefault(),!a.ie||l&&!c.ieFake||(i(),f.dom.bind(u,"paste",function(a){a.stopPropagation()}),f.getDoc().execCommand("Paste",!1,null),g["text/html"]=k()),void(r(g,"text/html")?(c.preventDefault(),b(g,l,q)):e.setEditorTimeout(f,function(){b(g,l,q)},0)))}),f.on("dragstart dragend",function(a){z="dragstart"==a.type}),f.on("drop",function(a){var b,i;if(i=q(a),!a.isDefaultPrevented()&&!z&&(b=l(a.dataTransfer),(n(b)&&!c(b)||!o(a,i))&&i&&f.settings.paste_filter_drop!==!1)){var j=b["mce-internal"]||b["text/html"]||b["text/plain"];j&&(a.preventDefault(),e.setEditorTimeout(f,function(){f.undoManager.transact(function(){b["mce-internal"]&&f.execCommand("Delete"),f.selection.setRng(i),j=d.trimHtml(j),b["text/html"]?g(j):h(j)})}))}}),f.on("dragover dragend",function(a){f.settings.paste_data_images&&a.preventDefault()})}var u,v,w,x=this,y=0,z=!1,A="%MCEPASTEBIN%",B="data:text/mce-internal,",C=d.createIdGenerator("mceclip");x.pasteHtml=g,x.pasteText=h,f.on("preInit",function(){t(),f.parser.addNodeFilter("img",function(b,c,d){function e(a){return a.data&&a.data.paste===!0}function g(b){b.attr("data-mce-object")||k===a.transparentSrc||b.remove()}function h(a){return 0===a.indexOf("webkit-fake-url")}function i(a){return 0===a.indexOf("data:")}if(!f.settings.paste_data_images&&e(d))for(var j=b.length;j--;){var k=b[j].attributes.map.src;k&&(h(k)?g(b[j]):!f.settings.allow_html_data_urls&&i(k)&&g(b[j]))}})})}}),d("tinymce/pasteplugin/WordFilter",["tinymce/util/Tools","tinymce/html/DomParser","tinymce/html/Schema","tinymce/html/Serializer","tinymce/html/Node","tinymce/pasteplugin/Utils"],function(a,b,c,d,e,f){function g(a){return/h?g&&(g=g.parent.parent):(j=g,g=null)),g&&g.name==b?g.append(a):(j=j||g,g=new e(b,1),f>1&&g.attr("start",""+f),a.wrap(g)),a.name="li",h>k&&j&&j.lastChild.append(g),k=h,d(a),c(a,/^\u00a0+/),c(a,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),c(a,/^\u00a0+/)}for(var g,j,k=1,l=[],m=a.firstChild;"undefined"!=typeof m&&null!==m;)if(l.push(m),m=m.walk(),null!==m)for(;"undefined"!=typeof m&&m.parent!==a;)m=m.walk();for(var n=0;n]+id="?docs-internal-[^>]*>/gi,""),q=q.replace(/
/gi,""),o=k.paste_retain_style_properties,o&&(p=a.makeMap(o.split(/[, ]/))),k.paste_enable_default_filters!==!1&&g(l.content)){l.wordContent=!0,q=f.filter(q,[//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/([\s\u00a0]*)<\/span>/gi,function(a,b){return b.length>0?b.replace(/./," ").slice(Math.floor(b.length/2)).split("").join("\xa0"):""}]]);var r=k.paste_word_valid_elements;r||(r="-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody");var s=new c({valid_elements:r,valid_children:"-li[p]"});a.each(s.elements,function(a){a.attributes["class"]||(a.attributes["class"]={},a.attributesOrder.push("class")),a.attributes.style||(a.attributes.style={},a.attributesOrder.push("style"))});var t=new b({},s);t.addAttributeFilter("style",function(a){for(var b,c=a.length;c--;)b=a[c],b.attr("style",n(b,b.attr("style"))),"span"==b.name&&b.parent&&!b.attributes.length&&b.unwrap()}),t.addAttributeFilter("class",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(c)&&b.remove(),b.attr("class",null)}),t.addNodeFilter("del",function(a){for(var b=a.length;b--;)a[b].remove()}),t.addNodeFilter("a",function(a){for(var b,c,d,e=a.length;e--;)if(b=a[e],c=b.attr("href"),d=b.attr("name"),c&&-1!=c.indexOf("#_msocom_"))b.remove();else if(c&&0===c.indexOf("file://")&&(c=c.split("#")[1],c&&(c="#"+c)),c||d){if(d&&!/^_?(?:toc|edn|ftn)/i.test(d)){b.unwrap();continue}b.attr({href:c,name:d})}else b.unwrap()});var u=t.parse(q);k.paste_convert_word_fake_lists!==!1&&m(u),l.content=new d({validate:k.validate},s).serialize(u)}})}return j.isWordContent=g,j}),d("tinymce/pasteplugin/Quirks",["tinymce/Env","tinymce/util/Tools","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Utils"],function(a,b,c,d){return function(e){function f(a){e.on("BeforePastePreProcess",function(b){b.content=a(b.content)})}function g(a){if(!c.isWordContent(a))return a;var f=[];b.each(e.schema.getBlockElements(),function(a,b){f.push(b)});var g=new RegExp("(?:
 [\\s\\r\\n]+|
)*(<\\/?("+f.join("|")+")[^>]*>)(?:
 [\\s\\r\\n]+|
)*","g");return a=d.filter(a,[[g,"$1"]]),a=d.filter(a,[[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}function h(a){if(c.isWordContent(a))return a;var b=e.settings.paste_webkit_styles;if(e.settings.paste_remove_styles_if_webkit===!1||"all"==b)return a;if(b&&(b=b.split(/[, ]/)),b){var d=e.dom,f=e.selection.getNode();a=a.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(a,c,e,g){var h=d.parseStyle(e,"span"),i={};if("none"===b)return c+g;for(var j=0;j]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return a=a.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(a,b,c,d){return b+' style="'+c+'"'+d})}a.webkit&&f(h),a.ie&&f(g)}}),d("tinymce/pasteplugin/Plugin",["tinymce/PluginManager","tinymce/pasteplugin/Clipboard","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Quirks"],function(a,b,c,d){var e;a.add("paste",function(a){function f(){return e||a.settings.paste_plaintext_inform===!1}function g(){if("text"==h.pasteFormat)this.active(!1),h.pasteFormat="html",a.fire("PastePlainTextToggle",{state:!1});else if(h.pasteFormat="text",this.active(!0),!f()){var b=a.translate("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.");a.notificationManager.open({text:b,type:"info"}),e=!0,a.fire("PastePlainTextToggle",{state:!0})}a.focus()}var h,i=this,j=a.settings;i.clipboard=h=new b(a),i.quirks=new d(a),i.wordFilter=new c(a),a.settings.paste_as_text&&(i.clipboard.pasteFormat="text"),j.paste_preprocess&&a.on("PastePreProcess",function(a){j.paste_preprocess.call(i,i,a)}),j.paste_postprocess&&a.on("PastePostProcess",function(a){j.paste_postprocess.call(i,i,a)}),a.addCommand("mceInsertClipboardContent",function(a,b){b.content&&i.clipboard.pasteHtml(b.content),b.text&&i.clipboard.pasteText(b.text)}),a.settings.paste_block_drop&&a.on("dragend dragover draggesture dragdrop drop drag",function(a){a.preventDefault(),a.stopPropagation()}),a.settings.paste_data_images||a.on("drop",function(a){var b=a.dataTransfer;b&&b.files&&b.files.length>0&&a.preventDefault()}),a.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:g,active:"text"==i.clipboard.pasteFormat}),a.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:h.pasteFormat,onclick:g})})}),f(["tinymce/pasteplugin/Utils"])}(this); \ No newline at end of file diff --git a/program/js/tinymce/plugins/preview/plugin.min.js b/program/js/tinymce/plugins/preview/plugin.min.js deleted file mode 100644 index 02ec2668b5b..00000000000 --- a/program/js/tinymce/plugins/preview/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("preview",function(a){var b=a.settings,c=!tinymce.Env.ie;a.addCommand("mcePreview",function(){a.windowManager.open({title:"Preview",width:parseInt(a.getParam("plugin_preview_width","650"),10),height:parseInt(a.getParam("plugin_preview_height","500"),10),html:'",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var d,e="";e+='',tinymce.each(a.contentCSS,function(b){e+=''});var f=b.body_id||"tinymce";-1!=f.indexOf("=")&&(f=a.getParam("body_id","","hash"),f=f[a.id]||f);var g=b.body_class||"";-1!=g.indexOf("=")&&(g=a.getParam("body_class","","hash"),g=g[a.id]||"");var h=' ',i=a.settings.directionality?' dir="'+a.settings.directionality+'"':"";if(d=""+e+'"+a.getContent()+h+"",c)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(d);else{var j=this.getEl("body").firstChild.contentWindow.document;j.open(),j.write(d),j.close()}}})}),a.addButton("preview",{title:"Preview",cmd:"mcePreview"}),a.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}); \ No newline at end of file diff --git a/program/js/tinymce/plugins/print/plugin.min.js b/program/js/tinymce/plugins/print/plugin.min.js deleted file mode 100644 index e91ff5404f0..00000000000 --- a/program/js/tinymce/plugins/print/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("print",function(a){a.addCommand("mcePrint",function(){a.getWin().print()}),a.addButton("print",{title:"Print",cmd:"mcePrint"}),a.addShortcut("Meta+P","","mcePrint"),a.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Meta+P",context:"file"})}); \ No newline at end of file diff --git a/program/js/tinymce/plugins/save/plugin.min.js b/program/js/tinymce/plugins/save/plugin.min.js deleted file mode 100644 index bbe0ec4485d..00000000000 --- a/program/js/tinymce/plugins/save/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("save",function(a){function b(){var b;return b=tinymce.DOM.getParent(a.id,"form"),!a.getParam("save_enablewhendirty",!0)||a.isDirty()?(tinymce.triggerSave(),a.getParam("save_onsavecallback")?(a.execCallback("save_onsavecallback",a),void a.nodeChanged()):void(b?(a.setDirty(!1),b.onsubmit&&!b.onsubmit()||("function"==typeof b.submit?b.submit():c(a.translate("Error: Form submit field collision."))),a.nodeChanged()):c(a.translate("Error: No form element found.")))):void 0}function c(b){a.notificationManager.open({text:b,type:"error"})}function d(){var b=tinymce.trim(a.startContent);return a.getParam("save_oncancelcallback")?void a.execCallback("save_oncancelcallback",a):(a.setContent(b),a.undoManager.clear(),void a.nodeChanged())}function e(){var b=this;a.on("nodeChange dirty",function(){b.disabled(a.getParam("save_enablewhendirty",!0)&&!a.isDirty())})}a.addCommand("mceSave",b),a.addCommand("mceCancel",d),a.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:e}),a.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:e}),a.addShortcut("Meta+S","","mceSave")}); \ No newline at end of file diff --git a/program/js/tinymce/plugins/searchreplace/plugin.min.js b/program/js/tinymce/plugins/searchreplace/plugin.min.js deleted file mode 100644 index 3c40122cc70..00000000000 --- a/program/js/tinymce/plugins/searchreplace/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){function a(a){return a&&1==a.nodeType&&"false"===a.contentEditable}function b(b,c,d,e,f){function g(a,b){if(b=b||0,!a[0])throw"findAndReplaceDOMText cannot handle zero-length matches";var c=a.index;if(b>0){var d=a[b];if(!d)throw"Invalid capture group";c+=a[0].indexOf(d),a[0]=d}return[c,c+a[0].length,[a[0]]]}function h(b){var c;if(3===b.nodeType)return b.data;if(o[b.nodeName]&&!n[b.nodeName])return"";if(c="",a(b))return"\n";if((n[b.nodeName]||p[b.nodeName])&&(c+="\n"),b=b.firstChild)do c+=h(b);while(b=b.nextSibling);return c}function i(b,c,d){var e,f,g,h,i=[],j=0,k=b,l=c.shift(),m=0;a:for(;;){if((n[k.nodeName]||p[k.nodeName]||a(k))&&j++,3===k.nodeType&&(!f&&k.length+j>=l[1]?(f=k,h=l[1]-j):e&&i.push(k),!e&&k.length+j>l[0]&&(e=k,g=l[0]-j),j+=k.length),e&&f){if(k=d({startNode:e,startNodeIndex:g,endNode:f,endNodeIndex:h,innerNodes:i,match:l[2],matchIndex:m}),j-=f.length-h,e=null,f=null,i=[],l=c.shift(),m++,!l)break}else if(o[k.nodeName]&&!n[k.nodeName]||!k.firstChild){if(k.nextSibling){k=k.nextSibling;continue}}else if(!a(k)){k=k.firstChild;continue}for(;;){if(k.nextSibling){k=k.nextSibling;break}if(k.parentNode===b)break a;k=k.parentNode}}}function j(a){var b;if("function"!=typeof a){var c=a.nodeType?a:m.createElement(a);b=function(a,b){var d=c.cloneNode(!1);return d.setAttribute("data-mce-index",b),a&&d.appendChild(m.createTextNode(a)),d}}else b=a;return function(a){var c,d,e,f=a.startNode,g=a.endNode,h=a.matchIndex;if(f===g){var i=f;e=i.parentNode,a.startNodeIndex>0&&(c=m.createTextNode(i.data.substring(0,a.startNodeIndex)),e.insertBefore(c,i));var j=b(a.match[0],h);return e.insertBefore(j,i),a.endNodeIndexn;++n){var p=a.innerNodes[n],q=b(p.data,h);p.parentNode.replaceChild(q,p),l.push(q)}var r=b(g.data.substring(0,a.endNodeIndex),h);return e=f.parentNode,e.insertBefore(c,f),e.insertBefore(k,f),e.removeChild(f),e=g.parentNode,e.insertBefore(r,g),e.insertBefore(d,g),e.removeChild(g),r}}var k,l,m,n,o,p,q=[],r=0;if(m=c.ownerDocument,n=f.getBlockElements(),o=f.getWhiteSpaceElements(),p=f.getShortEndedElements(),l=h(c)){if(b.global)for(;k=b.exec(l);)q.push(g(k,e));else k=l.match(b),q.push(g(k,e));return q.length&&(r=q.length,i(c,q,j(d))),r}}function c(a){function c(){function b(){f.statusbar.find("#next").disabled(!g(l+1).length),f.statusbar.find("#prev").disabled(!g(l-1).length)}function c(){a.windowManager.alert("Could not find the specified string.",function(){f.find("#find")[0].focus()})}var d,e={};d=tinymce.trim(a.selection.getContent({format:"text"}));var f=a.windowManager.open({layout:"flex",pack:"center",align:"center",onClose:function(){a.focus(),k.done()},onSubmit:function(a){var d,h,i,j;return a.preventDefault(),h=f.find("#case").checked(),j=f.find("#words").checked(),i=f.find("#find").value(),i.length?e.text==i&&e.caseState==h&&e.wholeWord==j?0===g(l+1).length?void c():(k.next(),void b()):(d=k.find(i,h,j),d||c(),f.statusbar.items().slice(1).disabled(0===d),b(),void(e={text:i,caseState:h,wholeWord:j})):(k.done(!1),void f.statusbar.items().slice(1).disabled(!0))},buttons:[{text:"Find",subtype:"primary",onclick:function(){f.submit()}},{text:"Replace",disabled:!0,onclick:function(){k.replace(f.find("#replace").value())||(f.statusbar.items().slice(1).disabled(!0),l=-1,e={})}},{text:"Replace all",disabled:!0,onclick:function(){k.replace(f.find("#replace").value(),!0,!0),f.statusbar.items().slice(1).disabled(!0),e={}}},{type:"spacer",flex:1},{text:"Prev",name:"prev",disabled:!0,onclick:function(){k.prev(),b()}},{text:"Next",name:"next",disabled:!0,onclick:function(){k.next(),b()}}],title:"Find and replace",items:{type:"form",padding:20,labelGap:30,spacing:10,items:[{type:"textbox",name:"find",size:40,label:"Find",value:d},{type:"textbox",name:"replace",size:40,label:"Replace with"},{type:"checkbox",name:"case",text:"Match case",label:" "},{type:"checkbox",name:"words",text:"Whole words",label:" "}]}})}function d(a){var b=a.getAttribute("data-mce-index");return"number"==typeof b?""+b:b}function e(c){var d,e;return e=a.dom.create("span",{"data-mce-bogus":1}),e.className="mce-match-marker",d=a.getBody(),k.done(!1),b(c,d,e,!1,a.schema)}function f(a){var b=a.parentNode;a.firstChild&&b.insertBefore(a.firstChild,a),a.parentNode.removeChild(a)}function g(b){var c,e=[];if(c=tinymce.toArray(a.getBody().getElementsByTagName("span")),c.length)for(var f=0;f0}var k=this,l=-1;k.init=function(a){a.addMenuItem("searchreplace",{text:"Find and replace",shortcut:"Meta+F",onclick:c,separator:"before",context:"edit"}),a.addButton("searchreplace",{tooltip:"Find and replace",shortcut:"Meta+F",onclick:c}),a.addCommand("SearchReplace",c),a.shortcuts.add("Meta+F","",c)},k.find=function(a,b,c){a=a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),a=c?"\\b"+a+"\\b":a;var d=e(new RegExp(a,b?"g":"gi"));return d&&(l=-1,l=h(!0)),d},k.next=function(){var a=h(!0);-1!==a&&(l=a)},k.prev=function(){var a=h(!1);-1!==a&&(l=a)},k.replace=function(b,c,e){var h,m,n,o,p,q,r=l;for(c=c!==!1,n=a.getBody(),m=tinymce.grep(tinymce.toArray(n.getElementsByTagName("span")),j),h=0;hl&&m[h].setAttribute("data-mce-index",p-1)}return a.undoManager.add(),l=r,c?(q=g(r+1).length>0,k.next()):(q=g(r-1).length>0,k.prev()),!e&&q},k.done=function(b){var c,e,g,h;for(e=tinymce.toArray(a.getBody().getElementsByTagName("span")),c=0;c=i.end?(f=l,h=i.end-k):e&&j.push(l),!e&&l.length+k>i.start&&(e=l,g=i.start-k),k+=l.length),e&&f){if(l=d({startNode:e,startNodeIndex:g,endNode:f,endNodeIndex:h,innerNodes:j,match:i.text,matchIndex:m}),k-=f.length-h,e=null,f=null,j=[],i=c.shift(),m++,!i)break}else if(y[l.nodeName]&&!x[l.nodeName]||!l.firstChild){if(l.nextSibling){l=l.nextSibling;continue}}else if(!a(l)){l=l.firstChild;continue}for(;;){if(l.nextSibling){l=l.nextSibling;break}if(l.parentNode===b)break a;l=l.parentNode}}}function g(a){function b(b,c){var d=A[c];d.stencil||(d.stencil=a(d));var e=d.stencil.cloneNode(!1);return e.setAttribute("data-mce-index",c),b&&e.appendChild(B.doc.createTextNode(b)),e}return function(a){var c,d,e,f=a.startNode,g=a.endNode,h=a.matchIndex,i=B.doc;if(f===g){var j=f;e=j.parentNode,a.startNodeIndex>0&&(c=i.createTextNode(j.data.substring(0,a.startNodeIndex)),e.insertBefore(c,j));var k=b(a.match,h);return e.insertBefore(k,j),a.endNodeIndexn;++n){var p=a.innerNodes[n],q=b(p.data,h);p.parentNode.replaceChild(q,p),m.push(q)}var r=b(g.data.substring(0,a.endNodeIndex),h);return e=f.parentNode,e.insertBefore(c,f),e.insertBefore(l,f),e.removeChild(f),e=g.parentNode,e.insertBefore(r,g),e.insertBefore(d,g),e.removeChild(g),r}}function h(a){var b=a.parentNode;b.insertBefore(a.firstChild,a),a.parentNode.removeChild(a)}function i(a){var c=b.getElementsByTagName("*"),d=[];a="number"==typeof a?""+a:null;for(var e=0;eb&&a(A[b],b)!==!1;b++);return this}function m(a){return A.length&&f(b,A,g(a)),this}function n(a,b){if(w&&a.global)for(;v=a.exec(w);)A.push(d(v,b));return this}function o(a){var b,c=i(a?j(a):null);for(b=c.length;b--;)h(c[b]);return this}function p(a){return A[a.getAttribute("data-mce-index")]}function q(a){return i(j(a))[0]}function r(a,b,c){return A.push({start:a,end:a+b,text:w.substr(a,b),data:c}),this}function s(a){var b=i(j(a)),d=c.dom.createRng();return d.setStartBefore(b[0]),d.setEndAfter(b[b.length-1]),d}function t(a,b){var d=s(a);return d.deleteContents(),b.length>0&&d.insertNode(c.dom.doc.createTextNode(b)),d}function u(){return A.splice(0,A.length),o(),this}var v,w,x,y,z,A=[],B=c.dom;return x=c.schema.getBlockElements(),y=c.schema.getWhiteSpaceElements(),z=c.schema.getShortEndedElements(),w=e(b),{text:w,matches:A,each:l,filter:k,reset:u,matchFromElement:p,elementFromMatch:q,find:n,add:r,wrap:m,unwrap:o,replace:t,rangeFromMatch:s,indexOf:j}}}),d("tinymce/spellcheckerplugin/Plugin",["tinymce/spellcheckerplugin/DomTextMatcher","tinymce/PluginManager","tinymce/util/Tools","tinymce/ui/Menu","tinymce/dom/DOMUtils","tinymce/util/XHR","tinymce/util/URI","tinymce/util/JSON"],function(a,b,c,d,e,f,g,h){b.add("spellchecker",function(b,i){function j(){return E.textMatcher||(E.textMatcher=new a(b.getBody(),b)),E.textMatcher}function k(a,b){var d=[];return c.each(b,function(a){d.push({selectable:!0,text:a.name,data:a.value})}),d}function l(a){for(var b in a)return!1;return!0}function m(a,f){var g=[],h=A[a];c.each(h,function(a){g.push({text:a,onclick:function(){b.insertContent(b.dom.encode(a)),b.dom.remove(f),r()}})}),g.push({text:"-"}),D&&g.push({text:"Add to Dictionary",onclick:function(){s(a,f)}}),g.push.apply(g,[{text:"Ignore",onclick:function(){t(a,f)}},{text:"Ignore all",onclick:function(){t(a,f,!0)}}]),C=new d({items:g,context:"contextmenu",onautohide:function(a){-1!=a.target.className.indexOf("spellchecker")&&a.preventDefault()},onhide:function(){C.remove(),C=null}}),C.renderTo(document.body);var i=e.DOM.getPos(b.getContentAreaContainer()),j=b.dom.getPos(f[0]),k=b.dom.getRoot();"BODY"==k.nodeName?(j.x-=k.ownerDocument.documentElement.scrollLeft||k.scrollLeft,j.y-=k.ownerDocument.documentElement.scrollTop||k.scrollTop):(j.x-=k.scrollLeft,j.y-=k.scrollTop),i.x+=j.x,i.y+=j.y,C.moveTo(i.x,i.y+f[0].offsetHeight)}function n(){return b.getParam("spellchecker_wordchar_pattern")||new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e\xa0\u2002\u2003\u2009]+',"g")}function o(a,d,e,j){var k={method:a,lang:F.spellchecker_language},l="";k["addToDictionary"==a?"word":"text"]=d,c.each(k,function(a,b){l&&(l+="&"),l+=b+"="+encodeURIComponent(a)}),f.send({url:new g(i).toAbsolute(F.spellchecker_rpc_url),type:"post",content_type:"application/x-www-form-urlencoded",data:l,success:function(a){if(a=h.parse(a))a.error?j(a.error):e(a);else{var c=b.translate("Server response wasn't proper JSON.");j(c)}},error:function(){var a=b.translate("The spelling service was not found: (")+F.spellchecker_rpc_url+b.translate(")");j(a)}})}function p(a,b,c,d){var e=F.spellchecker_callback||o;e.call(E,a,b,c,d)}function q(){function a(a){b.notificationManager.open({text:a,type:"error"}),b.setProgressState(!1),u()}u()||(b.setProgressState(!0),p("spellcheck",j().text,y,a),b.focus())}function r(){b.dom.select("span.mce-spellchecker-word").length||u()}function s(a,c){b.setProgressState(!0),p("addToDictionary",a,function(){b.setProgressState(!1),b.dom.remove(c,!0),r()},function(a){b.notificationManager.open({text:a,type:"error"}),b.setProgressState(!1)})}function t(a,d,e){b.selection.collapse(),e?c.each(b.dom.select("span.mce-spellchecker-word"),function(c){c.getAttribute("data-mce-word")==a&&b.dom.remove(c,!0)}):b.dom.remove(d,!0),r()}function u(){return j().reset(),E.textMatcher=null,B?(B=!1,b.fire("SpellcheckEnd"),!0):void 0}function v(a){var b=a.getAttribute("data-mce-index");return"number"==typeof b?""+b:b}function w(a){var d,e=[];if(d=c.toArray(b.getBody().getElementsByTagName("span")),d.length)for(var f=0;f0){var e=b.dom.createRng();e.setStartBefore(d[0]),e.setEndAfter(d[d.length-1]),b.selection.setRng(e),m(c.getAttribute("data-mce-word"),d)}}}),b.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:q,selectable:!0,onPostRender:function(){var a=this;a.active(B),b.on("SpellcheckStart SpellcheckEnd",function(){a.active(B)})}});var H={tooltip:"Spellcheck",onclick:q,onPostRender:function(){var a=this;b.on("SpellcheckStart SpellcheckEnd",function(){a.active(B)})}};z.length>1&&(H.type="splitbutton",H.menu=z,H.onshow=x,H.onselect=function(a){F.spellchecker_language=a.control.settings.data}),b.addButton("spellchecker",H),b.addCommand("mceSpellCheck",q),b.on("remove",function(){C&&(C.remove(),C=null)}),b.on("change",r),this.getTextMatcher=j,this.getWordCharPattern=n,this.markErrors=y,this.getLanguage=function(){return F.spellchecker_language},F.spellchecker_language=F.spellchecker_language||F.language||"en"})}),f(["tinymce/spellcheckerplugin/DomTextMatcher"])}(this); \ No newline at end of file diff --git a/program/js/tinymce/plugins/tabfocus/plugin.min.js b/program/js/tinymce/plugins/tabfocus/plugin.min.js deleted file mode 100644 index df420ac61b4..00000000000 --- a/program/js/tinymce/plugins/tabfocus/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("tabfocus",function(a){function b(a){9!==a.keyCode||a.ctrlKey||a.altKey||a.metaKey||a.preventDefault()}function c(b){function c(c){function f(a){return"BODY"===a.nodeName||"hidden"!=a.type&&"none"!=a.style.display&&"hidden"!=a.style.visibility&&f(a.parentNode)}function i(a){return/INPUT|TEXTAREA|BUTTON/.test(a.tagName)&&tinymce.get(b.id)&&-1!=a.tabIndex&&f(a)}if(h=d.select(":input:enabled,*[tabindex]:not(iframe)"),e(h,function(b,c){return b.id==a.id?(g=c,!1):void 0}),c>0){for(j=g+1;j=0;j--)if(i(h[j]))return h[j];return null}var g,h,i,j;if(!(9!==b.keyCode||b.ctrlKey||b.altKey||b.metaKey||b.isDefaultPrevented())&&(i=f(a.getParam("tab_focus",a.getParam("tabfocus_elements",":prev,:next"))),1==i.length&&(i[1]=i[0],i[0]=":prev"),h=b.shiftKey?":prev"==i[0]?c(-1):d.get(i[0]):":next"==i[1]?c(1):d.get(i[1]))){var k=tinymce.get(h.id||h.name);h.id&&k?k.focus():tinymce.util.Delay.setTimeout(function(){tinymce.Env.webkit||window.focus(),h.focus()},10),b.preventDefault()}}var d=tinymce.DOM,e=tinymce.each,f=tinymce.explode;a.on("init",function(){a.inline&&tinymce.DOM.setAttrib(a.getBody(),"tabIndex",null),a.on("keyup",b),tinymce.Env.gecko?a.on("keypress keydown",c):a.on("keydown",c)})}); \ No newline at end of file diff --git a/program/js/tinymce/plugins/table/plugin.min.js b/program/js/tinymce/plugins/table/plugin.min.js deleted file mode 100644 index 0f79a89cf2a..00000000000 --- a/program/js/tinymce/plugins/table/plugin.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(a,b){"use strict";function c(a,b){for(var c,d=[],g=0;g9)&&(b.hasChildNodes()||(b.innerHTML='
'))}return{getSpanVal:b,paddCell:c}}),d("tinymce/tableplugin/TableGrid",["tinymce/util/Tools","tinymce/Env","tinymce/tableplugin/Utils"],function(a,c,d){var e=a.each,f=d.getSpanVal;return function(g,h,i){function j(){g.$("td[data-mce-selected],th[data-mce-selected]").removeAttr("data-mce-selected")}function k(a){return a===g.getBody()}function l(b,c){return b?(c=a.map(c.split(","),function(a){return a.toLowerCase()}),a.grep(b.childNodes,function(b){return-1!==a.inArray(c,b.nodeName.toLowerCase())})):[]}function m(){var a=0;O=[],P=0,e(["thead","tbody","tfoot"],function(b){var c=l(h,b)[0],d=l(c,"tr");e(d,function(c,d){d+=a,e(l(c,"td,th"),function(a,c){var e,g,h,i;if(O[d])for(;O[d][c];)c++;for(h=f(a,"rowspan"),i=f(a,"colspan"),g=d;d+h>g;g++)for(O[g]||(O[g]=[]),e=c;c+i>e;e++)O[g][e]={part:b,real:g==d&&e==c,elm:a,rowspan:h,colspan:i};P=Math.max(P,c+1)})}),a+=d.length})}function n(a){return g.fire("newrow",{node:a}),a}function o(a){return g.fire("newcell",{node:a}),a}function p(a,b){return a=a.cloneNode(b),a.removeAttribute("id"),a}function q(a,b){var c;return c=O[b],c?c[a]:void 0}function r(a,b,c){a&&(c=parseInt(c,10),1===c?a.removeAttribute(b,1):a.setAttribute(b,c,1))}function s(a){return a&&(!!T.getAttrib(a.elm,"data-mce-selected")||a==i)}function t(){var a=[];return e(h.rows,function(b){e(b.cells,function(c){return T.getAttrib(c,"data-mce-selected")||i&&c==i.elm?(a.push(b),!1):void 0})}),a}function u(){var a=T.createRng();k(h)||(a.setStartAfter(h),a.setEndAfter(h),S.setRng(a),T.remove(h))}function v(b){var f,h={};return g.settings.table_clone_elements!==!1&&(h=a.makeMap((g.settings.table_clone_elements||"strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(),/[ ,]/)),a.walk(b,function(a){var d;return 3==a.nodeType?(e(T.getParents(a.parentNode,null,b).reverse(),function(a){h[a.nodeName]&&(a=p(a,!1),f?d&&d.appendChild(a):f=d=a,d=a)}),d&&(d.innerHTML=c.ie&&c.ie<10?" ":'
'),!1):void 0},"childNodes"),b=p(b,!1),o(b),r(b,"rowSpan",1),r(b,"colSpan",1),f?b.appendChild(f):d.paddCell(b),b}function w(){var a,b=T.createRng();return e(T.select("tr",h),function(a){0===a.cells.length&&T.remove(a)}),0===T.select("tr",h).length?(b.setStartBefore(h),b.setEndBefore(h),S.setRng(b),void T.remove(h)):(e(T.select("thead,tbody,tfoot",h),function(a){0===a.rows.length&&T.remove(a)}),m(),void(Q&&(a=O[Math.min(O.length-1,Q.y)],a&&(S.select(a[Math.min(a.length-1,Q.x)].elm,!0),S.collapse(!0)))))}function x(a,b,c,d){var e,f,g,h,i;for(e=O[b][a].elm.parentNode,g=1;c>=g;g++)if(e=T.getNext(e,"tr")){for(f=a;f>=0;f--)if(i=O[b+g][f].elm,i.parentNode==e){for(h=1;d>=h;h++)T.insertAfter(v(i),i);break}if(-1==f)for(h=1;d>=h;h++)e.insertBefore(v(e.cells[0]),e.cells[0])}}function y(){e(O,function(a,b){e(a,function(a,c){var d,e,g;if(s(a)&&(a=a.elm,d=f(a,"colspan"),e=f(a,"rowspan"),d>1||e>1)){for(r(a,"rowSpan",1),r(a,"colSpan",1),g=0;d-1>g;g++)T.insertAfter(v(a),a);x(c,b,e-1,d)}})})}function z(b,c,d){var f,g,h,i,j,k,l,n,o,p,t;if(b?(f=J(b),g=f.x,h=f.y,i=g+(c-1),j=h+(d-1)):(Q=R=null,e(O,function(a,b){e(a,function(a,c){s(a)&&(Q||(Q={x:c,y:b}),R={x:c,y:b})})}),Q&&(g=Q.x,h=Q.y,i=R.x,j=R.y)),n=q(g,h),o=q(i,j),n&&o&&n.part==o.part){for(y(),m(),n=q(g,h).elm,r(n,"colSpan",i-g+1),r(n,"rowSpan",j-h+1),l=h;j>=l;l++)for(k=g;i>=k;k++)O[l]&&O[l][k]&&(b=O[l][k].elm,b!=n&&(p=a.grep(b.childNodes),e(p,function(a){n.appendChild(a)}),p.length&&(p=a.grep(n.childNodes),t=0,e(p,function(a){"BR"==a.nodeName&&t++0&&O[c-1][h]&&(l=O[c-1][h].elm,m=f(l,"rowSpan"),m>1)){r(l,"rowSpan",m+1);continue}}else if(m=f(d,"rowspan"),m>1){r(d,"rowSpan",m+1);continue}k=v(d),r(k,"colSpan",d.colSpan),j.appendChild(k),g=d}j.hasChildNodes()&&(a?i.parentNode.insertBefore(j,i):T.insertAfter(j,i))}}function B(a){var b,c;e(O,function(c){return e(c,function(c,d){return s(c)&&(b=d,a)?!1:void 0}),a?!b:void 0}),e(O,function(d,e){var g,h,i;d[b]&&(g=d[b].elm,g!=c&&(i=f(g,"colspan"),h=f(g,"rowspan"),1==i?a?(g.parentNode.insertBefore(v(g),g),x(b,e,h-1,i)):(T.insertAfter(v(g),g),x(b,e,h-1,i)):r(g,"colSpan",g.colSpan+1),c=g))})}function C(b){return a.grep(D(b),s)}function D(a){var b=[];return e(a,function(a){e(a,function(a){b.push(a)})}),b}function E(){var b=[];if(k(h)){if(1==O[0].length)return;if(C(O).length==D(O).length)return}e(O,function(c){e(c,function(c,d){s(c)&&-1===a.inArray(b,d)&&(e(O,function(a){var b,c=a[d].elm;b=f(c,"colSpan"),b>1?r(c,"colSpan",b-1):T.remove(c)}),b.push(d))})}),w()}function F(){function a(a){var b,c;e(a.cells,function(a){var c=f(a,"rowSpan");c>1&&(r(a,"rowSpan",c-1),b=J(a),x(b.x,b.y,1,1))}),b=J(a.cells[0]),e(O[b.y],function(a){var b;a=a.elm,a!=c&&(b=f(a,"rowSpan"),1>=b?T.remove(a):r(a,"rowSpan",b-1),c=a)})}var b;b=t(),k(h)&&b.length==h.rows.length||(e(b.reverse(),function(b){a(b)}),w())}function G(){var a=t();if(!k(h)||a.length!=h.rows.length)return T.remove(a),w(),a}function H(){var a=t();return e(a,function(b,c){a[c]=p(b,!0)}),a}function I(a,b){var c=t(),d=c[b?0:c.length-1],f=d.cells.length;a&&(e(O,function(a){var b;return f=0,e(a,function(a){a.real&&(f+=a.colspan),a.elm.parentNode==d&&(b=1)}),b?!1:void 0}),b||a.reverse(),e(a,function(a){var c,e,g=a.cells.length;for(n(a),c=0;g>c;c++)e=a.cells[c],o(e),r(e,"colSpan",1),r(e,"rowSpan",1);for(c=g;f>c;c++)a.appendChild(o(v(a.cells[g-1])));for(c=f;g>c;c++)T.remove(a.cells[c]);b?d.parentNode.insertBefore(a,d):T.insertAfter(a,d)}),j())}function J(a){var b;return e(O,function(c,d){return e(c,function(c,e){return c.elm==a?(b={x:e,y:d},!1):void 0}),!b}),b}function K(a){Q=J(a)}function L(){var a,b;return a=b=0,e(O,function(c,d){e(c,function(c,e){var f,g;s(c)&&(c=O[d][e],e>a&&(a=e),d>b&&(b=d),c.real&&(f=c.colspan-1,g=c.rowspan-1,f&&e+f>a&&(a=e+f),g&&d+g>b&&(b=d+g)))})}),{x:a,y:b}}function M(a){var b,c,d,e,f,g,h,i,k,l;if(R=J(a),Q&&R){for(b=Math.min(Q.x,R.x),c=Math.min(Q.y,R.y),d=Math.max(Q.x,R.x),e=Math.max(Q.y,R.y),f=d,g=e,l=c;e>=l;l++)for(k=b;d>=k;k++)a=O[l][k],a.real&&(h=a.colspan-1,i=a.rowspan-1,h&&k+h>f&&(f=k+h),i&&l+i>g&&(g=l+i));for(j(),l=c;g>=l;l++)for(k=b;f>=k;k++)O[l][k]&&T.setAttrib(O[l][k].elm,"data-mce-selected","1")}}function N(a,b){var c,d,e;c=J(a),d=c.y*P+c.x;do{if(d+=b,e=q(d%P,Math.floor(d/P)),!e)break;if(e.elm!=a)return S.select(e.elm,!0),T.isEmpty(e.elm)&&S.collapse(!0),!0}while(e.elm==a);return!1}var O,P,Q,R,S=g.selection,T=S.dom;h=h||T.getParent(S.getStart(!0),"table"),m(),i=i||T.getParent(S.getStart(!0),"th,td"),i&&(Q=J(i),R=L(),i=q(Q.x,Q.y)),a.extend(this,{deleteTable:u,split:y,merge:z,insertRow:A,insertCol:B,deleteCols:E,deleteRows:F,cutRows:G,copyRows:H,pasteRows:I,getPos:J,setStartCell:K,setEndCell:M,moveRelIdx:N,refresh:m})}}),d("tinymce/tableplugin/Quirks",["tinymce/util/VK","tinymce/util/Delay","tinymce/Env","tinymce/util/Tools","tinymce/tableplugin/Utils"],function(a,b,c,d,e){var f=d.each,g=e.getSpanVal;return function(h){function i(){function c(c){function d(a,b){var d=a?"previousSibling":"nextSibling",f=h.dom.getParent(b,"tr"),g=f[d];if(g)return r(h,b,g,a),c.preventDefault(),!0;var i=h.dom.getParent(f,"table"),l=f.parentNode,m=l.nodeName.toLowerCase();if("tbody"===m||m===(a?"tfoot":"thead")){var n=e(a,i,l,"tbody");if(null!==n)return j(a,n,b)}return k(a,f,d,i)}function e(a,b,c,d){var e=h.dom.select(">"+d,b),f=e.indexOf(c);if(a&&0===f||!a&&f===e.length-1)return i(a,b);if(-1===f){var g="thead"===c.tagName.toLowerCase()?0:e.length-1;return e[g]}return e[f+(a?-1:1)]}function i(a,b){var c=a?"thead":"tfoot",d=h.dom.select(">"+c,b);return 0!==d.length?d[0]:null}function j(a,b,d){var e=l(b,a);return e&&r(h,d,e,a),c.preventDefault(),!0}function k(a,b,e,f){var g=f[e];if(g)return m(g),!0;var i=h.dom.getParent(f,"td,th");if(i)return d(a,i,c);var j=l(b,!a);return m(j),c.preventDefault(),!1}function l(a,b){var c=a&&a[b?"lastChild":"firstChild"];return c&&"BR"===c.nodeName?h.dom.getParent(c,"td,th"):c}function m(a){h.selection.setCursorLocation(a,0)}function n(){return u==a.UP||u==a.DOWN}function o(a){var b=a.selection.getNode(),c=a.dom.getParent(b,"tr");return null!==c}function p(a){for(var b=0,c=a;c.previousSibling;)c=c.previousSibling,b+=g(c,"colspan");return b}function q(a,b){var c=0,d=0;return f(a.children,function(a,e){return c+=g(a,"colspan"),d=e,c>b?!1:void 0}),d}function r(a,b,c,d){var e=p(h.dom.getParent(b,"td,th")),f=q(c,e),g=c.childNodes[f],i=l(g,d);m(i||g)}function s(a){var b=h.selection.getNode(),c=h.dom.getParent(b,"td,th"),d=h.dom.getParent(a,"td,th");return c&&c!==d&&t(c,d)}function t(a,b){return h.dom.getParent(a,"TABLE")===h.dom.getParent(b,"TABLE")}var u=c.keyCode;if(n()&&o(h)){var v=h.selection.getNode();b.setEditorTimeout(h,function(){s(v)&&d(!c.shiftKey&&u===a.UP,v,c)},0)}}h.on("KeyDown",function(a){c(a)})}function j(){function a(a,b){var c,d=b.ownerDocument,e=d.createRange();return e.setStartBefore(b),e.setEnd(a.endContainer,a.endOffset),c=d.createElement("body"),c.appendChild(e.cloneContents()),0===c.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}h.on("KeyDown",function(b){var c,d,e=h.dom;37!=b.keyCode&&38!=b.keyCode||(c=h.selection.getRng(),d=e.getParent(c.startContainer,"table"),d&&h.getBody().firstChild==d&&a(c,d)&&(c=e.createRng(),c.setStartBefore(d),c.setEndBefore(d),h.selection.setRng(c),b.preventDefault()))})}function k(){h.on("KeyDown SetContent VisualAid",function(){var a;for(a=h.getBody().lastChild;a;a=a.previousSibling)if(3==a.nodeType){if(a.nodeValue.length>0)break}else if(1==a.nodeType&&("BR"==a.tagName||!a.getAttribute("data-mce-bogus")))break;a&&"TABLE"==a.nodeName&&(h.settings.forced_root_block?h.dom.add(h.getBody(),h.settings.forced_root_block,h.settings.forced_root_block_attrs,c.ie&&c.ie<10?" ":'
'):h.dom.add(h.getBody(),"br",{"data-mce-bogus":"1"}))}),h.on("PreProcess",function(a){var b=a.node.lastChild;b&&("BR"==b.nodeName||1==b.childNodes.length&&("BR"==b.firstChild.nodeName||"\xa0"==b.firstChild.nodeValue))&&b.previousSibling&&"TABLE"==b.previousSibling.nodeName&&h.dom.remove(b)})}function l(){function a(a,b,c,d){var e,f,g,h=3,i=a.dom.getParent(b.startContainer,"TABLE");return i&&(e=i.parentNode),f=b.startContainer.nodeType==h&&0===b.startOffset&&0===b.endOffset&&d&&("TR"==c.nodeName||c==e),g=("TD"==c.nodeName||"TH"==c.nodeName)&&!d,f||g}function b(){var b=h.selection.getRng(),c=h.selection.getNode(),d=h.dom.getParent(b.startContainer,"TD,TH");if(a(h,b,c,d)){d||(d=c);for(var e=d.lastChild;e.lastChild;)e=e.lastChild;3==e.nodeType&&(b.setEnd(e,e.data.length),h.selection.setRng(b))}}h.on("KeyDown",function(){b()}),h.on("MouseDown",function(a){2!=a.button&&b()})}function m(){function b(a){h.selection.select(a,!0),h.selection.collapse(!0)}function c(a){h.$(a).empty(),e.paddCell(a)}h.on("keydown",function(e){if((e.keyCode==a.DELETE||e.keyCode==a.BACKSPACE)&&!e.isDefaultPrevented()){var f,g,i,j;if(f=h.dom.getParent(h.selection.getStart(),"table")){if(g=h.dom.select("td,th",f),i=d.grep(g,function(a){return!!h.dom.getAttrib(a,"data-mce-selected")}),0===i.length)return j=h.dom.getParent(h.selection.getStart(),"td,th"),void(h.selection.isCollapsed()&&j&&h.dom.isEmpty(j)&&(e.preventDefault(),c(j),b(j)));e.preventDefault(),h.undoManager.transact(function(){g.length==i.length?h.execCommand("mceTableDelete"):(d.each(i,c),b(i[0]))})}}})}m(),c.webkit&&(i(),l()),c.gecko&&(j(),k()),c.ie>9&&(j(),k())}}),d("tinymce/tableplugin/CellSelection",["tinymce/tableplugin/TableGrid","tinymce/dom/TreeWalker","tinymce/util/Tools"],function(a,b,c){return function(d,e){function f(a){d.getBody().style.webkitUserSelect="",(a||o)&&(d.$("td[data-mce-selected],th[data-mce-selected]").removeAttr("data-mce-selected"),o=!1)}function g(a,b){return a&&b?a===n.getParent(b,"table"):!1}function h(b){var c,f,h=b.target;if(!m&&h!==l&&(l=h,k&&j)){if(f=n.getParent(h,"td,th"),g(k,f)||(f=n.getParent(k,"td,th")),j===f&&!o)return;if(e(!0),g(k,f)){b.preventDefault(),i||(i=new a(d,k,j),d.getBody().style.webkitUserSelect="none"),i.setEndCell(f),o=!0,c=d.selection.getSel();try{c.removeAllRanges?c.removeAllRanges():c.empty()}catch(p){}}}}var i,j,k,l,m,n=d.dom,o=!0,p=function(){j=i=k=l=null,e(!1)};return d.on("SelectionChange",function(a){o&&a.stopImmediatePropagation()},!0),d.on("MouseDown",function(a){2==a.button||m||(f(),j=n.getParent(a.target,"td,th"),k=n.getParent(j,"table"))}),d.on("mouseover",h),d.on("remove",function(){n.unbind(d.getDoc(),"mouseover",h),f()}),d.on("MouseUp",function(){function a(a,d){var f=new b(a,a);do{if(3==a.nodeType&&0!==c.trim(a.nodeValue).length)return void(d?e.setStart(a,0):e.setEnd(a,a.nodeValue.length));if("BR"==a.nodeName)return void(d?e.setStartBefore(a):e.setEndBefore(a))}while(a=d?f.next():f.prev())}var e,f,g,h,k,l=d.selection;if(j){if(i&&(d.getBody().style.webkitUserSelect=""),f=n.select("td[data-mce-selected],th[data-mce-selected]"),f.length>0){e=n.createRng(),h=f[0],e.setStartBefore(h),e.setEndAfter(h),a(h,1),g=new b(h,n.getParent(f[0],"table"));do if("TD"==h.nodeName||"TH"==h.nodeName){if(!n.getAttrib(h,"data-mce-selected"))break;k=h}while(h=g.next());a(k),l.setRng(e)}d.nodeChanged(),p()}}),d.on("KeyUp Drop SetContent",function(a){f("setcontent"==a.type),p(),m=!1}),d.on("ObjectResizeStart ObjectResized",function(a){m="objectresized"!=a.type}),{clear:f}}}),d("tinymce/tableplugin/Dialogs",["tinymce/util/Tools","tinymce/Env"],function(a,b){var c=a.each;return function(d){function e(){var a=d.settings.color_picker_callback;return a?function(){var b=this;a.call(d,function(a){b.value(a).fire("change")},b.value())}:void 0}function f(a){return{title:"Advanced",type:"form",defaults:{onchange:function(){l(a,this.parents().reverse()[0],"style"==this.name())}},items:[{label:"Style",name:"style",type:"textbox"},{type:"form",padding:0,formItemDefaults:{layout:"grid",alignH:["start","right"]},defaults:{size:7},items:[{label:"Border color",type:"colorbox",name:"borderColor",onaction:e()},{label:"Background color",type:"colorbox",name:"backgroundColor",onaction:e()}]}]}}function g(a){return a?a.replace(/px$/,""):""}function h(a){return/^[0-9]+$/.test(a)&&(a+="px"),a}function i(a){c("left center right".split(" "),function(b){d.formatter.remove("align"+b,{},a)})}function j(a){c("top middle bottom".split(" "),function(b){d.formatter.remove("valign"+b,{},a)})}function k(b,c,d){function e(b,d){return d=d||[],a.each(b,function(a){var b={text:a.text||a.title};a.menu?b.menu=e(a.menu):(b.value=a.value,c&&c(b)),d.push(b)}),d}return e(b,d||[])}function l(a,b,c){var d=b.toJSON(),e=a.parseStyle(d.style);c?(b.find("#borderColor").value(e["border-color"]||"")[0].fire("change"),b.find("#backgroundColor").value(e["background-color"]||"")[0].fire("change")):(e["border-color"]=d.borderColor,e["background-color"]=d.backgroundColor),b.find("#style").value(a.serializeStyle(a.parseStyle(a.serializeStyle(e))))}function m(a,b,c){var d=a.parseStyle(a.getAttrib(c,"style"));d["border-color"]&&(b.borderColor=d["border-color"]),d["background-color"]&&(b.backgroundColor=d["background-color"]),b.style=a.serializeStyle(d)}function n(a,b,d){var e=a.parseStyle(a.getAttrib(b,"style"));c(d,function(a){e[a.name]=a.value}),a.setAttrib(b,"style",a.serializeStyle(a.parseStyle(a.serializeStyle(e))))}var o=this;o.tableProps=function(){o.table(!0)},o.table=function(e){function j(){function c(a,b,d){if("TD"===a.tagName||"TH"===a.tagName)v.setStyle(a,b,d);else if(a.children)for(var e=0;e',p.insertBefore(e,p.firstChild)),i(p),w.align&&d.formatter.apply("align"+w.align,{},p),d.focus(),d.addVisual()})}function o(a,b){function c(a,c){for(var d=0;dd;d++)c.push(d);return c}function C(a,b,c){for(var d,e=a(),f=0;f0?t(f,g,d):[],k=h.length>0?t(m,n,h):[];x(j,a.offsetWidth,i),y(k,a.offsetHeight,i)}function G(a,b,c,d){if(0>b||b>=a.length-1)return"";var e=a[b];if(e)e={value:e,delta:0};else for(var f=a.slice(0,b).reverse(),g=0;g0?e:f}function J(b,c,d){for(var e=D(b),f=a.map(e,function(a){return m(a.colIndex,a.element).x}),g=[],h=0;h1?G(f,h):I(e[h].element,c,d);j=j?j:wa,g.push(j)}return g}function K(a){var b=H(a,"height"),c=parseInt(b,10);return R(b)&&(c=0),!isNaN(c)&&c>0?c:p(a,"height")}function L(b){for(var c=E(b),d=a.map(c,function(a){return f(a.rowIndex,a.element).y}),e=[],g=0;g1?G(d,g):K(c[g].element);i=i?i:xa,e.push(i)}return e}function M(b,c,d,e,f){function g(b){return a.map(b,function(){return 0})}function h(){var a;if(f)a=[100-l[0]];else{var b=Math.max(e,l[0]+d);a=[b-l[0]]}return a}function i(a,b){var c,f=g(l.slice(0,a)),h=g(l.slice(b+1));if(d>=0){var i=Math.max(e,l[b]-d);c=f.concat([d,i-l[b]]).concat(h)}else{var j=Math.max(e,l[a]+d),k=l[a]-j;c=f.concat([j-l[a],k]).concat(h)}return c}function j(a,b){var c,f=g(l.slice(0,b));if(d>=0)c=f.concat([d]);else{var h=Math.max(e,l[b]+d);c=f.concat([h-l[b]])}return c}var k,l=b.slice(0);return k=0===b.length?[]:1===b.length?h():0===c?i(0,1):c>0&&ce;e++)d+=c[e];return d}function O(b,c){var d=b.getAllCells();return a.map(d,function(a){var b=N(a.colIndex,a.colIndex+a.colspan,c);return{element:a.element,width:b,colspan:a.colspan}})}function P(b,c){var d=b.getAllCells();return a.map(d,function(a){var b=N(a.rowIndex,a.rowIndex+a.rowspan,c);return{element:a.element,height:b,rowspan:a.rowspan}})}function Q(b,c){var d=b.getAllRows();return a.map(d,function(a,b){return{element:a.element,height:c[b]}})}function R(a){return za.test(a)}function S(a){return Aa.test(a)}function T(b,c,d){function f(b,c){a.each(b,function(a){e.dom.setStyle(a.element,"width",a.width+c),e.dom.setAttrib(a.element,"width",null)})}function g(){return dc;c++){for(e+="",d=0;a>d;d++)e+=""+(h.ie&&h.ie<10?" ":"
")+"";e+=""}return e+="",f.undoManager.transact(function(){f.insertContent(e),g=f.dom.get("__mce"),f.dom.setAttrib(g,"id",null),f.$("tr",g).each(function(a,b){f.fire("newrow",{node:b}),f.$("th,td",b).each(function(a,b){f.fire("newcell",{node:b})})}),f.dom.setAttribs(g,f.settings.table_default_attributes||{}),f.dom.setStyles(g,f.settings.table_default_styles||{})}),g}function j(a,b,c){function d(){var d,e,g,h={},i=0;e=f.dom.select("td[data-mce-selected],th[data-mce-selected]"),d=e[0],d||(d=f.selection.getStart()),c&&e.length>0?(k(e,function(a){return h[a.parentNode.parentNode.nodeName]=1}),k(h,function(a){i+=a}),g=1!==i):g=!f.dom.getParent(d,b),a.disabled(g),f.selection.selectorChanged(b,function(b){a.disabled(!b)})}f.initialized?d():f.on("init",d)}function l(){j(this,"table")}function m(){j(this,"td,th")}function n(){j(this,"td,th",!0)}function o(){var a="";a='';for(var b=0;10>b;b++){a+="";for(var c=0;10>c;c++)a+='';a+=""}return a+="
",a+=''}function p(a,b,c){var d,e,g,h,i,j=c.getEl().getElementsByTagName("table")[0],k=c.isRtl()||"tl-tr"==c.parent().rel;for(j.nextSibling.innerHTML=a+1+" x "+(b+1),k&&(a=9-a),e=0;10>e;e++)for(d=0;10>d;d++)h=j.rows[e].childNodes[d].firstChild,i=(k?d>=a:a>=d)&&b>=e,f.dom.toggleClass(h,"mce-active",i),i&&(g=h);return g.parentNode}function q(){f.addButton("tableprops",{title:"Table properties",onclick:w.tableProps,icon:"table"}),f.addButton("tabledelete",{title:"Delete table",onclick:g("mceTableDelete")}),f.addButton("tablecellprops",{title:"Cell properties",onclick:g("mceTableCellProps")}),f.addButton("tablemergecells",{title:"Merge cells",onclick:g("mceTableMergeCells")}),f.addButton("tablesplitcells",{title:"Split cell",onclick:g("mceTableSplitCells")}),f.addButton("tableinsertrowbefore",{title:"Insert row before",onclick:g("mceTableInsertRowBefore")}),f.addButton("tableinsertrowafter",{title:"Insert row after",onclick:g("mceTableInsertRowAfter")}),f.addButton("tabledeleterow",{title:"Delete row",onclick:g("mceTableDeleteRow")}),f.addButton("tablerowprops",{title:"Row properties",onclick:g("mceTableRowProps")}),f.addButton("tablecutrow",{title:"Cut row",onclick:g("mceTableCutRow")}),f.addButton("tablecopyrow",{title:"Copy row",onclick:g("mceTableCopyRow")}),f.addButton("tablepasterowbefore",{title:"Paste row before",onclick:g("mceTablePasteRowBefore")}),f.addButton("tablepasterowafter",{title:"Paste row after",onclick:g("mceTablePasteRowAfter")}),f.addButton("tableinsertcolbefore",{title:"Insert column before",onclick:g("mceTableInsertColBefore")}),f.addButton("tableinsertcolafter",{title:"Insert column after",onclick:g("mceTableInsertColAfter")}),f.addButton("tabledeletecol",{title:"Delete column",onclick:g("mceTableDeleteCol")})}function r(a){var b=f.dom.is(a,"table")&&f.getBody().contains(a);return b}function s(){var a=f.settings.table_toolbar;""!==a&&a!==!1&&(a||(a="tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol"),f.addContextToolbar(r,a))}var t,u,v=this,w=new d(f);!f.settings.object_resizing||f.settings.table_resize_bars===!1||f.settings.object_resizing!==!0&&"table"!==f.settings.object_resizing||(u=e(f)),f.settings.table_grid===!1?f.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onclick:w.table}):f.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",ariaHideMenu:!0,onclick:function(a){a.aria&&(this.parent().hideAll(),a.stopImmediatePropagation(),w.table())},onshow:function(){p(0,0,this.menu.items()[0])},onhide:function(){var a=this.menu.items()[0].getEl().getElementsByTagName("a");f.dom.removeClass(a,"mce-active"),f.dom.addClass(a[0],"mce-active")},menu:[{type:"container",html:o(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(a){var b,c,d=a.target;"A"==d.tagName.toUpperCase()&&(b=parseInt(d.getAttribute("data-mce-x"),10),c=parseInt(d.getAttribute("data-mce-y"),10),(this.isRtl()||"tl-tr"==this.parent().rel)&&(b=9-b),b===this.lastX&&c===this.lastY||(p(b,c,a.control),this.lastX=b,this.lastY=c))},onclick:function(a){var b=this;"A"==a.target.tagName.toUpperCase()&&(a.preventDefault(),a.stopPropagation(),b.parent().cancel(),f.undoManager.transact(function(){i(b.lastX+1,b.lastY+1)}),f.addVisual())}}]}),f.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:l,onclick:w.tableProps}),f.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:l,cmd:"mceTableDelete"}),f.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:g("mceTableCellProps"),onPostRender:m},{text:"Merge cells",onclick:g("mceTableMergeCells"),onPostRender:n},{text:"Split cell",onclick:g("mceTableSplitCells"),onPostRender:m}]}),f.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:g("mceTableInsertRowBefore"),onPostRender:m},{text:"Insert row after",onclick:g("mceTableInsertRowAfter"),onPostRender:m},{text:"Delete row",onclick:g("mceTableDeleteRow"),onPostRender:m},{text:"Row properties",onclick:g("mceTableRowProps"),onPostRender:m},{text:"-"},{text:"Cut row",onclick:g("mceTableCutRow"),onPostRender:m},{text:"Copy row",onclick:g("mceTableCopyRow"),onPostRender:m},{text:"Paste row before",onclick:g("mceTablePasteRowBefore"),onPostRender:m},{text:"Paste row after",onclick:g("mceTablePasteRowAfter"),onPostRender:m}]}),f.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:g("mceTableInsertColBefore"),onPostRender:m},{text:"Insert column after",onclick:g("mceTableInsertColAfter"),onPostRender:m},{text:"Delete column",onclick:g("mceTableDeleteCol"),onPostRender:m}]});var x=[];k("inserttable tableprops deletetable | cell row column".split(" "),function(a){"|"==a?x.push({text:"-"}):x.push(f.menuItems[a])}),f.addButton("table",{type:"menubutton",title:"Table",menu:x}),h.isIE||f.on("click",function(a){a=a.target,"TABLE"===a.nodeName&&(f.selection.select(a),f.nodeChanged())}),v.quirks=new b(f),f.on("Init",function(){v.cellSelection=new c(f,function(a){a&&u.clearBars()}),v.resizeBars=u}),f.on("PreInit",function(){f.serializer.addAttributeFilter("data-mce-cell-padding,data-mce-border,data-mce-border-color",function(a,b){for(var c=a.length;c--;)a[c].attr(b,null)})}),k({mceTableSplitCells:function(a){a.split()},mceTableMergeCells:function(a){var b;b=f.dom.getParent(f.selection.getStart(),"th,td"),f.dom.select("td[data-mce-selected],th[data-mce-selected]").length?a.merge():w.merge(a,b)},mceTableInsertRowBefore:function(a){a.insertRow(!0)},mceTableInsertRowAfter:function(a){a.insertRow()},mceTableInsertColBefore:function(a){a.insertCol(!0)},mceTableInsertColAfter:function(a){a.insertCol()},mceTableDeleteCol:function(a){a.deleteCols()},mceTableDeleteRow:function(a){a.deleteRows()},mceTableCutRow:function(a){t=a.cutRows()},mceTableCopyRow:function(a){t=a.copyRows()},mceTablePasteRowBefore:function(a){a.pasteRows(t,!0)},mceTablePasteRowAfter:function(a){a.pasteRows(t)},mceTableDelete:function(a){u&&u.clearBars(),a.deleteTable()}},function(b,c){f.addCommand(c,function(){var c=new a(f);c&&(b(c),f.execCommand("mceRepaint"),v.cellSelection.clear())})}),k({mceInsertTable:w.table,mceTableProps:function(){w.table(!0)},mceTableRowProps:w.row,mceTableCellProps:w.cell},function(a,b){f.addCommand(b,function(b,c){a(c)})}),q(),s(),f.settings.table_tab_navigation!==!1&&f.on("keydown",function(b){var c,d,e;9==b.keyCode&&(c=f.dom.getParent(f.selection.getStart(),"th,td"),c&&(b.preventDefault(),d=new a(f),e=b.shiftKey?-1:1,f.undoManager.transact(function(){!d.moveRelIdx(c,e)&&e>0&&(d.insertRow(),d.refresh(),d.moveRelIdx(c,e))})))}),v.insertTable=i}var k=f.each;i.add("table",j)})}(this); \ No newline at end of file diff --git a/program/js/tinymce/plugins/template/plugin.min.js b/program/js/tinymce/plugins/template/plugin.min.js deleted file mode 100644 index 892ee754a3d..00000000000 --- a/program/js/tinymce/plugins/template/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("template",function(a){function b(b){return function(){var c=a.settings.templates;return"function"==typeof c?void c(b):void("string"==typeof c?tinymce.util.XHR.send({url:c,success:function(a){b(tinymce.util.JSON.parse(a))}}):b(c))}}function c(b){function c(b){function c(b){if(-1==b.indexOf("")){var c="";tinymce.each(a.contentCSS,function(b){c+=''});var e=a.settings.body_class||"";-1!=e.indexOf("=")&&(e=a.getParam("body_class","","hash"),e=e[a.id]||""),b=""+c+''+b+""}b=f(b,"template_preview_replace_values");var g=d.find("iframe")[0].getEl().contentWindow.document;g.open(),g.write(b),g.close()}var g=b.control.value();g.url?tinymce.util.XHR.send({url:g.url,success:function(a){e=a,c(e)}}):(e=g.content,c(e)),d.find("#description")[0].text(b.control.value().description)}var d,e,h=[];if(!b||0===b.length){var i=a.translate("No templates defined.");return void a.notificationManager.open({text:i,type:"info"})}tinymce.each(b,function(a){h.push({selected:!h.length,text:a.title,value:{url:a.url,content:a.content,description:a.description}})}),d=a.windowManager.open({title:"Insert template",layout:"flex",direction:"column",align:"stretch",padding:15,spacing:10,items:[{type:"form",flex:0,padding:0,items:[{type:"container",label:"Templates",items:{type:"listbox",label:"Templates",name:"template",values:h,onselect:c}}]},{type:"label",name:"description",label:"Description",text:"\xa0"},{type:"iframe",flex:1,border:1}],onsubmit:function(){g(!1,e)},width:a.getParam("template_popup_width",600),height:a.getParam("template_popup_height",500)}),d.find("listbox")[0].fire("select")}function d(b,c){function d(a,b){if(a=""+a,a.length0&&(i=k.create("div",null),i.appendChild(j[0].cloneNode(!0))),h(k.select("*",i),function(b){g(b,a.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))&&(b.innerHTML=d(a.getParam("template_cdate_format",a.getLang("template.cdate_format")))),g(b,a.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(b.innerHTML=d(a.getParam("template_mdate_format",a.getLang("template.mdate_format")))),g(b,a.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))&&(b.innerHTML=l)}),e(i),a.execCommand("mceInsertContent",!1,i.innerHTML),a.addVisual()}var h=tinymce.each;a.addCommand("mceInsertTemplate",g),a.addButton("template",{title:"Insert template",onclick:b(c)}),a.addMenuItem("template",{text:"Insert template",onclick:b(c),context:"insert"}),a.on("PreProcess",function(b){var c=a.dom;h(c.select("div",b.node),function(b){c.hasClass(b,"mceTmpl")&&(h(c.select("*",b),function(b){c.hasClass(b,a.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(b.innerHTML=d(a.getParam("template_mdate_format",a.getLang("template.mdate_format"))))}),e(b))})})}); \ No newline at end of file diff --git a/program/js/tinymce/plugins/textcolor/plugin.min.js b/program/js/tinymce/plugins/textcolor/plugin.min.js deleted file mode 100644 index 889c5c40d1c..00000000000 --- a/program/js/tinymce/plugins/textcolor/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("textcolor",function(a){function b(b){var c;return a.dom.getParents(a.selection.getStart(),function(a){var d;(d=a.style["forecolor"==b?"color":"background-color"])&&(c=d)}),c}function c(b){var c,d,e=[];for(d=["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],d=a.settings.textcolor_map||d,d=a.settings[b+"_map"]||d,c=0;c
'+(c?"×":"")+"
"}var d,e,f,g,h,k,l,m,n=this,o=n._id,p=0;for(m=n.settings.origin,d=c(m),d.push({text:tinymce.translate("No color"),color:"transparent"}),f='',g=d.length-1,k=0;k",h=0;hg?f+="":(e=d[l],f+=b(e.color,e.text));f+=""}if(a.settings.color_picker_callback){for(f+='",f+="",h=0;h'+a+""}function f(){var a,b="";for(a in n)b+=a;return new RegExp("["+b+"]","g")}function g(){var a,b="";for(a in n)b&&(b+=","),b+="span.mce-"+n[a];return b}var h,i,j,k,l,m,n,o,p=a.getBody(),q=a.selection;if(n={"\xa0":"nbsp","\xad":"shy"},d=!d,e.state=d,a.fire("VisualChars",{state:d}),o=f(),b&&(m=q.getBookmark()),d)for(i=[],tinymce.walk(p,function(a){3==a.nodeType&&a.nodeValue&&o.test(a.nodeValue)&&i.push(a)},"childNodes"),j=0;j=0;j--)a.dom.remove(i[j],1);q.moveToBookmark(m)}function c(){var b=this;a.on("VisualChars",function(a){b.active(a.state)})}var d,e=this;a.addCommand("mceVisualChars",b),a.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:c}),a.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:c,selectable:!0,context:"view",prependToContext:!0}),a.on("beforegetcontent",function(a){d&&"raw"!=a.format&&!a.draft&&(d=!0,b(!1))})}); \ No newline at end of file diff --git a/program/js/tinymce/plugins/wordcount/plugin.min.js b/program/js/tinymce/plugins/wordcount/plugin.min.js deleted file mode 100644 index f20e76504a0..00000000000 --- a/program/js/tinymce/plugins/wordcount/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("wordcount",function(a){function b(){a.theme.panel.find("#wordcount").text(["Words: {0}",e.getCount()])}var c,d,e=this;c=a.getParam("wordcount_countregex",/[\w\u2019\x27\-\u00C0-\u1FFF]+/g),d=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\x27\x22_+=\\\/\-]*/g),a.on("init",function(){var c=a.theme.panel&&a.theme.panel.find("#statusbar")[0];c&&tinymce.util.Delay.setEditorTimeout(a,function(){c.insert({type:"label",name:"wordcount",text:["Words: {0}",e.getCount()],classes:"wordcount",disabled:a.settings.readonly},0),a.on("setcontent beforeaddundo",b),a.on("keyup",function(a){32==a.keyCode&&b()})},0)}),e.getCount=function(){var b=a.getContent({format:"raw"}),e=0;if(b){b=b.replace(/\.\.\./g," "),b=b.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," "),b=b.replace(/(\w+)(&#?[a-z0-9]+;)+(\w+)/i,"$1$3").replace(/&.+?;/g," "),b=b.replace(d,"");var f=b.match(c);f&&(e=f.length)}return e}}); \ No newline at end of file diff --git a/program/js/tinymce/skins/lightgray/content.inline.min.css b/program/js/tinymce/skins/lightgray/content.inline.min.css deleted file mode 100644 index 1030094858e..00000000000 --- a/program/js/tinymce/skins/lightgray/content.inline.min.css +++ /dev/null @@ -1 +0,0 @@ -.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #f00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #bbb}td[data-mce-selected],th[data-mce-selected]{background-color:#39f !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7acaff}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1} \ No newline at end of file diff --git a/program/js/tinymce/skins/lightgray/content.min.css b/program/js/tinymce/skins/lightgray/content.min.css deleted file mode 100644 index af85f749da0..00000000000 --- a/program/js/tinymce/skins/lightgray/content.min.css +++ /dev/null @@ -1 +0,0 @@ -body{background-color:#fff;color:#000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#f0f0ee;scrollbar-arrow-color:#676662;scrollbar-base-color:#f0f0ee;scrollbar-darkshadow-color:#ddd;scrollbar-face-color:#e0e0dd;scrollbar-highlight-color:#f0f0ee;scrollbar-shadow-color:#f0f0ee;scrollbar-track-color:#f5f5f5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #f00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #bbb}td[data-mce-selected],th[data-mce-selected]{background-color:#39f !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7acaff}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1} \ No newline at end of file diff --git a/program/js/tinymce/skins/lightgray/fonts/readme.md b/program/js/tinymce/skins/lightgray/fonts/readme.md deleted file mode 100644 index fa5d63946c5..00000000000 --- a/program/js/tinymce/skins/lightgray/fonts/readme.md +++ /dev/null @@ -1 +0,0 @@ -Icons are generated and provided by the http://icomoon.io service. diff --git a/program/js/tinymce/skins/lightgray/fonts/tinymce-small.dev.svg b/program/js/tinymce/skins/lightgray/fonts/tinymce-small.dev.svg deleted file mode 100644 index 578b869549b..00000000000 --- a/program/js/tinymce/skins/lightgray/fonts/tinymce-small.dev.svg +++ /dev/null @@ -1,175 +0,0 @@ - - - - -This is a custom SVG font generated by IcoMoon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/program/js/tinymce/skins/lightgray/fonts/tinymce-small.eot b/program/js/tinymce/skins/lightgray/fonts/tinymce-small.eot deleted file mode 100644 index b144ba0bd949de3c0f87abdd78b517067169884f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9492 zcmcgyYj7Lab-s5Oz=CfqL2yNo1o0rSA|ZkhKoF!Pk}Fb@EmM-IM`Za;N@gTQlt?}7 zN^YjzI+ml=>J6ee66+Gi(ljj5V?YXgkiHL~VwhLrW_=jFxj4b&}2FxhUJr zGAxUpyHmmdVx*4QOl8^o5BBGpnpMn%-9VZ?c6w&v`+xksXECS)^||9S=NFKJUw#F- z|M=Xc&)3`&`5x+58SC<#n4Nh-J1%~evFHovA3T8u?G5!8sK0}H_leUNF8)|){yo$` zLjC64{IQw$x_|f(W3dlVzi@iy;sV>v-eW9&FY3`VGpA>rJwN#k)KB0Y?=H-rzW_dQ zbq`TLQ`P^%o4t%FzpKz2zV7DypIM&Q(6|*B2ivPJi?N@ps#p@tQjyR}Yf-(TvOsU6 z)PX)XSLLV<=3!H458#j5Ig6GymU5-S&()>!(h^!2T3D&KG*D^bOaB=4MAfJgF5rok zZ<2%2!tq?wiXI44aaaz#J^Jo#9-4(JR2w1^WD!E!2-{R5`|z) zAL5&1NP0e@52O-uL_*Jp+)*Rk&{a_?Uyt?o$COg6-?1&rc5H6jRx0e+;gp4(Tj7*F zrA(FjW96tEd0mLI&Dj#>5Kg7SOH8o^72dF&5aw)yHygaQfU^vi%*=52%@y9jiK#`n zktjrX7Y|DQh)-Rzs~&u=d3)HICW49`PPI2@e6{MEwYv9mJKl=-DnEFxxjhvw%a<$B z@b>0DuU`A6TI;)9UR1%BLo1CHToN9v5{}0(xF~=PvuJ7=-p>iWPlaT zC=xIE;wUc~MRSyo@uZe83&p$<^01eE&2=Zv+QGCDSPU5Hpndj4U9<1yJ2X4OmKR_6 z41-tD2)K_C@3g-b_LpQ*!>MgzEEo%6fo>;DwQpgOZ`q1f7L>5=OU&jL-9h4RG^(_g zX$S>tMrjR^yYRs)ye!k;*7}^>g+_Hg%QUKUTEhnB@)g#j{)#%yda*Kl0hNqru!F_y zC{LL+ypc!vWC#8opNSY;iDUda>D!JP}WsDeB7Ss6#8pQ-y&+R6;Gj z1cp#QBxL0fbvk~yXH0Z&sLwjW5!w0;-D0fgaD2F-zyI1$BI+3%^F$Lv*ZTV#h8?an zH|ae=e~UlhkLW!uDAaiP%k9ZzJ0+e+L$F70YF4J>n1WIFS*X?tKKW;8ymL zdpC*OMCtXnU-)2icOVe-`U4XYz1ich4g0_8(r!=wyWblO1iG93;ab0^S&vKvm{(#1 zL-vQ0PzKnY$LNTuCd+}DXYOT^g9L$RWs;5dYNBp`=Y!1nS&UMnU@8>6}Ap_xp%?U)iu59#UaZP))J%p zP^7mv@=>JMmiOLB`R1EVp-_{&y=BqN2+AJ zfgWuLa=Th`mP^cs<7i>777iDkZ^}=d4pfK<+FJV{S%+Flo zv|3hf+cgUpw=iLnM_LEGRIWo4Yj#nsiX<{OG>bssHkdfz@RnUFt%L-HEiT@fUKLd+ z=b9nuRTs_$n02U;zOa}r`Rih1Sc_al3AHpTiFigSm;<9qJ`^W-(EuQ^yYz9kao0d3 zGO%l-iJWgc@mu#7pGf%|G=Gz(+^x@u7Vqm#-&c$xPj?=AVcxp1sn;K<;rxyr5XuEG zjunC(z>=eciJ=-E8jNtCrij+=_~man*ZI`-cgF6YW0Q-|9`yW_Pw}ZAc`m*6@kN|N z&Mj=mRrh&bsNscFBX2b_e3ToC#iyL>-?$v_Zk@Y-?49e%AO6U>?p*(==isx8lNUdJ z>yn3dlAeDV&u3w_{yGQ(LLtOW+}F~@i)LzI45WauUA(oW2{4VL+K)YnplxuB4-S~J z0t8;}%mAIxRe7pdrPs(|vvdLG<%6RHVIV}1K2YR?Iis~jBl7CYmjgYmMo-|iSWMla zdcCiyn!+{pvMg~$Q*b>Yz$_^{{}h2dYG=tp26e=&P&aR$a8N zuFes@MoszgW$Jk?_Gk>`y$yIPs9vrXz(}>*`RWeE<;WePYV^tlSzwBKwXiu>XgE`t|(zMu@5iWIWCx>!f zgUEnwInWoEk71{axmG!_@)!vWL?X>y4gJg5)Bnbv+H!eu$BqgY(1Q)Ir>H1zW$R9( zVDc@G`u`S&fAx87DSCAG`kt;Z2L?ElZbcD&|BizkQ5^&sQpn*@8Dz){&BVA~!}S<9 zH7H@YDfn|37o@`_CbK1sET@G~ey4m&o_z~=X~8q*Wuj|2ggM0A1Zx^> zuBh7rD=pWIVa;r4U!83Mf8?g&Ky-2~Q79H-g_s#{RJ2Al)DlsQh?>uhD#cN?FpyEq zjGEwhIcM$3n~w-si?--HynlBznvLsvJR6Pf-ha67(=C!Ek!*kcC1`3}+-2nQv(Sap zOsI>BV6I%iZ-O4u;3jdtD9DJ(_xrWcy5gjnCUuGd=bE$!*(CK0j5>x1HSA*SC+_++6v3e&k`} z;l}jfc-o5d*fe!P~;RpNr9z1-=>=utLNDYGiJr3ZLGF_8_dlf|Xq17r%~ki(mSJ?IVLi0O2T;o#*pI({*_jnGMyr_l?5 zNLa2B>c%)o+9^3gUJAq<0T3iAsjO@%!m(@|E*pUpT!L zOZo~~;1UxowIng20r%3vafF!>3u~qbuSc{`~TrA1c-#JoC)x z^1rZc#Udx(w#(LXD++i8T0542IyldD%z&jxwmjg5a8FHWW}*f<*vNC(*dQZ*a^=R2 zD>P-wmsl=mUE7AF9Jp~~39UD7kk%lY*h|dHrO8*&)c#MJ$}cKJ&#a<}b;5#xDjNWo z1sC|}$VfO0B}}YL255L24K%c92}KM)wj;Ug=~o_o^p&S~C3ieF3}muWV|{J?`%jOK zp5EWz);E?S#IlpdJr8|hxQYqGUwG&qBRO6AFt~N{NOt_m2XeUwo*d5}ncN!uur$qF zADZ~t0FAO0p6Y|xOc_7Gfvp4;q{T|-ys#F!HmfTgyV%MKpwFzFejIj%O@6sh7#b=R zzC3xmM02UmiE@Cr>(TLL*U#GXrA;+`69@bI4^H&eZ2Hn3bzltf{rfX(QGxeBR) zSExAV25h4sHX5-Cp2xfiy+Vjr;20q#yyU{?24VZ6N2j$>>7dDzp$ZXB`8DUSzjmO+ z!JjBoY!!=wHNeqj&Eaq})(3+GHK^3tdQ}xH%XM z^T-xJ8}ehZZ#e7q(7lWd9`FV}z=@Zv9ojZBB1(WDS)C@K-EOWx*BF9Y&+J~+zt+Fj$cB>4W#EMyR+F;oNr>Ib533uC~^?~5HrU~XCW1|AkFm6#Z z2Q7Jua6`V1=SS6i5Mj7{ zNU^GzaF3nK6$-hWeGf{hT+O#jrPu2AJ@w7c31}VFuAcYl>JS>7dVGM?*#55`--_5B z_L-?batrpq1&tZS$0r8An~W|DbrjIv>|Rtp*CnrH}0mK?M^2~4rEF^nmI6% zm>T=Hj+TjNUtje6E9YA}UZE0yzvEzkde2a-%wj`((&HzM@3eG~ZGY9tcC=ij5*V_< z1O6bdj7ud<0t(%yT346YRmZ}owX0m;l)K?<1p3tjCq@EBI z{^26jvSB11AKB0nva9wRiI@UVGWzsTYimgFGbo^0cy!msjk_L2q>F(i$PCUC_=76t zu}sCA#UdDaGU-q!O@QzO8D>Dp2+Cy4nF(pD0R}32nlGrr`8fGle&XoSiJ=D@&-&7d z)J&l;lj`Z~>*1>6e5~;F@TdBkn%?1}y<>adrtSTS)Xs26S64^Zp}x$aF0OE^VKBbB zy*+PWiNN<_WnEiPsj4PKQsrME#%rZID)Yz&T!fwL980n3}T(y;e#e%d!|`GJb@zY28oh{i4upA6Yf!&azfB*d$o<) zt4U=R08U;q!%d=DwFPzeUlFp2Fp(~pJF72Omo`iL$_pePl)5bj%^3s0#DcMvrj<`K z;C)nL($aD%LcS5ROPR@KM+I`OE;`duXAx3z@ksQRZSg0}@oangzGFi}$L>peJc;KT z8p*p@m}<|p&g=Q0H>k8Yf0N(6J5LFx+NK~w*>22_@83kv(6a#6YxAwSc6x4Vp|Rn) z76lLH^~3H{`Q4R0hiuwd?-bTL3t7F(_ldxS;hXyuoPT3o630vGz-!u&BqcPD9^JvLoyiJOTL?gNzFb zf2CnU%Rm^ubfAqwXeru)7&ZaeyWAIA9#7^M1=@-*LCuxMmj<&0cm(wk%90zMO1zzk zhQpJm=pN0SnxuPYINYf$tl$3LNIE@2=|p-Yv#q(1*uHQ3NLm>`5zU-9HA(kO^u**T zx~C@E+9pzW>}Yf8jHF*0N%wA5+YEJ7Nj`KWJ;HF|_)rQwGx6QWo3{NYtMgDRdp|ou zUx{SCRKizWKfDZzcq-J23(v^!`Ou;0|HR{$l-xe|KI~F*EA$xZ7LrZvl`_?<=_@PB zG=@^OkMac%<16Z%t?8deeP5;R=9<0^)G4iae!cQi3GX1fHj=1}U##TQZocxpkSDro z<#+Zub{+BWEI+_6@E4V=@@vX}K&M_*7uB~tanHEts5j~x_f7j=_5F{wPdlUilmBV| z>;8{xJT-$g(>1?Y^M37A?F+SkRkx{bs_xr$PW^cOv-Q7U|3O2x;XuO|8(wetS>u+* z#l}yXo{=j(%-*GM(zvQSA}f_!Bm0xeesEaq?k>|vjlEcDSJ8fNrR+iZjY^rKO=hJ` z*8Y5@TnoSWePArUoT4R+9=EIj?Y~tiBZ$a8S1Ef?ezQ{c;zu*NO4*0@FILL6@G<}8 z!pSq2P9K}?JAZm+Ztl*%#W_5C?)=I5GtteN?D{{z`HXZv$Df>=Ik)=PKcDg0 zUGrxyM32v&nLRgiVfKmW(M!?Y$L9CW&!5S#UGgVG7g!WODVoKPhv - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/program/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf b/program/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf deleted file mode 100644 index a983e2dc4cb30880fffe00e1f0879be4d95eb4cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9304 zcmcgyYj7Lab-s5Ozyf??34$wvB!~xr6$uf90D>SbkzA3IY?+cwJtDttQZgecqA2QN zS8_A$#<3iwZW2{-ovAyiIrXDI+=r%r>Si?Q&5S4YbR3WCaoZ$KV@#^abf)c$o3^go z5tjYVU4W!$N%fy*!MpdlXV1O&-0wV=j5EgSnaxy|yYIk2zPUy1LCZCynIk7>7r*~U z-+PuZ-iiAB(b=<$$b+a~Lhe60f8q0iyQAMj{W4?So?~;fPiRNQuQC>U0sTYA(4f7c z{sQ%PQ13Z*^4$3!D=oi^`bVf=pFeeE_Pw4TKEzo31Juu*oIStDcCq&uOWcEcY+?4~ zoU{8UUqbyD-tq3@sk7(6C$64h>SwC@UwE^ZG39p@dc!x|oc}W`@Boclb8)bJ^JOvi zb5#|~f>|mOI%zFxS40VR z&3M8W)?3>O@%&Jc7sAP6D6S9l&2c2Xkkkj$NjV~^7sBqSQEup}C|9n=2L|FwIX>Xn zmSsCOw{0sOaqLLiLe8y7+MZUX%LDOBOpd%NM8)Q88FPrF(~)JS*n$dg*iIO8w!xbX z-de#~7E5Mkx%=iSZ{Wn#qTEOpqr97kB!9%GF4-|1#g3#qTC%=6_02ln zd$9v=#e0<>JlE2Zj#T8!l~`n3OTSmIdsD6RU92prV9TME#tJSA4_1lg*a)~Nf(^4| zYFR$OlUftkOwDNG%{**?70oCSFNM+=FBv6sjF0n_mNbi{f)Vzxmwheu$4=X!j1gQ4 z8kvxN`dEF7@8#PxJHnP1U;GS%*U$*Mj}h;*zZUkFWKzSaZDuSK4`YE=lcm}>u*f%T z#i|HOSodXSbBpdEaVHuzS}Qb!f;FSGj>sMO;8k8$XmIP+oZNv%Z9XeBYI9o02Ilfr z)~o)CI>Y*~GJDt&>}M7`Sjvs@v>D({Jjyp4TH1$wHQI)-i)P92wP9yVLuu2C&2Hk! zMA}SKS0PUwS}Bn(4i2FbZuKQGg!&;NYlo;ai9@~PqGv-x&Jm8tHEie+ zt-X5GALI!lBR1Xh2wuUh+#~mF601b%^{X#@u%#y$40-**$*A7q@z+KC-*Rbpr2gIS z4F!WeE&fQI-_xQ;Cxgr@F#;k2Of%UgoC2T(FAk*AA=EHHcFjotQi_Y=}mSTC#7YkhbaR4Lc zhN)E%{MHq2*G?Ga%dEEf>vPqz1%8UC$)0nI63&zjcoC2fm#@^#JgLQ`p2T(_g*7C~ zWxaSa8&DYdlb5ioZ{`bEIIWhI-+INu#Vt&jrZkNxI-r6DR=5KVx@cgGWV8Z$TM9B zUpQr*+tlX|1~|WM2ZVAFjAMmh2e8x_VPZJI!$VQ-(-hIxleqXz=PIAR`p)=$^K5GA z*#n-R@@YQ(BhQ7mK0c3g$hn2>xa>a9iveCtH}N(j%g4B(SbW;K`pt`pp0@e>#^1TB z{K1c$tIpM*dJa6hGG*eu3 z)rh?M^2K0po6#G5Ego05t6uMGs-|#Fy(mju(Ntx-66`hF_)?CF1FPi?up zxMN3!3+SOn*i%%Lw~BSUQ84*dM*V*a!@v5xwiG?Odwow=nF9kHO1G+rzJJ?6j;IZS z3@PMrs0=dXg=S)04{$xsO$|yIZVG-5!eH@NAA-%(&gx8R8H=D!c zf#KuUurjgr9Ksx8Zh|!pHrLc`ft8kP#;|5Kw6D(Y0)OPD;Xrh8Em&!|I;m! zC6VfQ{UvB>Tijvf%CpdgGfb#UieRo>z;A*c(%>d>z9h(+f^fj96BY@HY=9HU+y>0k z%l2Zjf2w|-)nQM1*%&(jU2nj-GMiK_Mb2L-tC}hyhiim)ak9w?!7+cDJk6Y@ozzJI zlm4wK-M#zLXLdw0dv|Oxl!MV7XVUwOEj#vRCOn#Yg=Bl7A>i{i2WF<9KfZPA@#m*& z`PSom`}_A&o0}`&D2zUAJlvESnn?d03ZsSe#89TG@{+=LeL&~v4@m z%FJ3iL=ST&KgY)2w!!Nypge~eW5QCAVQxkd&IPtmZZFhyiVD>YMl(4fD-H?#QdGzr zkpxOo`MDON2}<~b9bzT+^lg7}&z={z_w7lv4|bXd4?Wo5|KOp6X6Il#7dz~;htui9 zXYC!UrJAAm!@~T?$b7-v+10hvtZS|F`xmFD7yW(|-8TM7dVIsi-rkKH#?w!QQ$ZuS zp`l?z(g>!)PhIMneEhDv9-r)~S`!vFd0$lBas$so0=h}?TMpAjcCA!7h+7-Hd`mUedb^5pd*3`PX zH1kE})v;*Ia$#tsF_j=neLCUPEZRr6XP)uY4>tYG%_W+qfIOOnVU=Mo3IAS{8 z;y8E(jgDWOZliP(fl6Fdtke326M*swgN-C>Zif}9&hs#Fb1ec(j zW!rGX>4I#)c>snAg%Ch`@{+zn7P!O&OD#)GXas(-68J3QAS6TJEgUl8=E9pT;qYk| z`RI!Hhd;ac=7);)`_DWxw(=)zTd~NAx9y6x(ux9Jf!5AtpbpM+Ju_e_k}VIoA>31w znwbnh2O9+r8yjTAPcB`%c8R7;`7+Drtt(rRl>OJPEu;0?HPRYH6MKnSxitA2n%e(K zQ~5=e=)z4ju})YJP-TPQvgiUI9T^FS;iQR`$pQ^m(Lh6smQ=*ZW7|_ZpMK@hM_+k* zXKMRnBS0oAJ>K6wu`5R zd4E2C|C1BB2d1`!J}l2L*M}y4HbA3nfv5T)HdDqAaA2!J1!=L;IWMkmVAGd( ztAp!^NOHT^k|DCI9^s0Q_)#IVX==E;dw6P7rhxq=JhQMD7E0~FvY$`rkT!}RM$!T~MH8V`A!2;V9ncYS z`EX^z#~Kk+>;NBTDXy1{c*)S?hNc@@T-VIFX6kXX#LL2VmTUpFBy(Z&846CgIZo^? zTHQ9x*|#EpA&DL%&|H&vU$N?#8?cQ+*l5HmcmeY!^a>+hfn$V}^pXpoAA;?R9-Y=k zrGq9Y{`&qh2Y;eMu~jSz)&NJBwL~H=oiZnZ zCi8<<(ZS=S*2N6faC0yi=8-LcHsr@*-*DC&pnDk^Jm3v{fDY1)+q%QUFD*>RELCbsf~&fvU->bv439**4GzWzbB9kV-N_KzK^PO06m_4ua7L zBP3y30){bOhi50Wtw863kPEn!A67IG| z>jS}YO%u#P#zqC6Vceo-4q6t|R_5e~26E>UM?8ih3LPp?;%Z!lG$Vnt(z>MPf)zU$ z3o0xat1JZ-Dmy4&mMbr6cNH-)#Kj~R*fb#}THyWeg|$_d%Ou#ql{6xAtFeY+o&uDR zBG>Jua6_S<7sk{=2w}KFSg~rDaJQY$7mNA4eK$(!eBe9f@@w^bpZeD41hkH7*UtM) zZ3qocKR!rmY~R<8Zb9r0`^;1zxdr>*g2s$7STXRs$>@Ug#-;t0HqDhl8{&o(YJ;Y9 z<8I37o=kFdf40nH+5Mx*>G6N-Y@Lkt_s7n@a<;Ye6)N%fI}Z$Gb`QrZEIzzDGjZJb zZfhsm_LrSpXX|Aufgu|_;0JkSTqMvsG^vi(nMUq(hxF0m2hxm;oW9D3dW~CZ(+g7^v=Pp{NSy zyhaYS@?aL(7v&G_Uy0^c-m#d2NvBEPWpXzIFeus;W&TajhwhbiHJ0hLk z-JRVB`?CkTxx%f+p~TJY9R&kR1iqK5>)MJ+O*J8sDu2Z|w`tdC18vL3!BZ_NQ=22m zc>yY5ooVhi=H5zn!>y>4OfGIF%`}x;(V%nm`*I95ak>P4vAffRmTZaFb|OYeC)pQ-o|HOr#6u&dryrOIxIU-Z%Ao%{-&^NSAh~vwM{{WirrM0*tdzE zp=SZCS5CF%JLtLT#iqvRS`|E4&=0v!6?Rqk9I|O+z0+9h9Axzl-#2dYc|)qAFdPqB ze=>%RLUH|v4oJr8cMhBqiUGu8R&FV0#bU~*K6fY<;DXkl@CKuSFQ^F1#@a7`!eSo3 zIs<((#U5ZM;0egD7-U>f_$vbwS_Z=Kr2}mgLQB&Y#IXs$-j%-a%6KxrD9~1d32Lr2 zzBHI6z$2)SaE{#Qbn@+NEE1VILHAhp#1!4TB9Sg-@z(9{jb<{Vl#XRavs+t=$!&YL zjb@aIW3lY96H|20#*R&$pnH0VP(M;bKwcSw1l+;5HWJVb-93M)- zXD0vR@#d}n$?84S%HGe7(pMsxFPHHZ*AFj)BAyDh;=(iXdp>k1`akjbB_+4dy^pw* z+zLI0x`kv@d$mmUTKejmGL4~B>!WzcdHks8jS^KA|*fz_Age;b?`C&<=pXw3n!1v^`AXCJ3r6PvEyukUBIV|BM9I0v$H78vUxUt zXzt9}8=G?r5E=;FoCqU{65x;&Hu_e8&UY+?Qh z#$rYE4^z^PieEW~M#kc;sCQG+URQr{?Bw|iXxobV4N5;&nto^T)DetJ#85v^>D}%h zK6G;a0^XZ=9(8Juv7PMQrTLQ!X!}#V`yEQot`EL+`qVi*)BQ|!oQjgF{ujT(yo@Qo zt-Ou;H{6{6Gt2P+>Z>mvTwSBG#n{hORjdeRsYqzyNR=xl3-T=}b)b*R9k|n|4(4IA z$b2UTyJaXi;3sk@B| zV}()4(k;I3-sYiMs6w?_0}HVzD=?PQ&3M8W)|*>$@xkFd&xMouP+TA3o8m}%E~yWt zlX65-&xPGlW8BbHQ7m1H4-CYWVtl}{Ez5RnZrfHm;@FY2g`8WFv^}fL76;;`m>hXc zh?33O3g!?=rz0y&u>}=gx1BKNY=bu&yfuTfek_^U&)qkdc>^b=7Uf1VALU&5vg zb;+)}|JkN(5oeAFDt08@-qi1_QQxT1y_eeYR=ijF!Lv>6=}1YwT!}@tHT8M*nm5!M z-=)&B3bq_tSFGTQ@L-i#mW_goJlHS`rq<5~cv5TNnyDELype|uu%a0S;w4uY=LMr+ zj`Ing(voJrkTb#__L8ru_ShLalre(KK_e5g&m605^1XD2W=Gia;-^2w;8iq&?qkF| z?XQLX#X>R-C%=)gP&|wUx|J-|zKKP?X)9JqP{O*eFq>O+2Z_7UsL-m?5DM0e(mEn{ z;e(fXsnX!q?K!y%jmmtgG%9mi#|Gx|Ro0_^L7ij0Sef1I2==odJ6On$^RyY@4Lr&> z8Cu$heKlH!v5RKG@U>uP3&UyCi_LD}$wb;rQ&(<~IhsP}~Y&HkW2 zs`oUb5b*Gq+Eb}^N<4>#P>nqe>JRb+kr5m3eFU%IR`!v5H;P+C>Gii> z_+V3aFc|XsgHutx$>Xny_`l`SZcqKY-x~@ByPN!x8o#GWk4^=dS7HQ21Q=$rjW`8B z37#KHXWU!D*NHhx#Mr{a@q(V@ID|PQAcvO6_VRpADfm(vj($L0D^sJ_T; zAsmud4!BU*!h$V;212pWZPCfKLiG--4+%jB*0O|UmHvKV;Z?yg&Xr9j@v9eS^IrA< zI0G!i+;TZg*byU^O|x?c6dh~)@th0%Q^+S?obd9>G- z_ugpf#v6^{aHG7vY0=E&jc>ixtXRZ9K^@(Dqs}bR;3LjkGQSq>by%pL9<2{?yHawh zCFa9%v@ll-hl|c~D@!rb)L7ukj{_JnH%zUJ;J2@EyK=%PUtyKaU!SX%E$~xBMfRNA zlyIhOz>9!8B zl1Ewxyi~43BWrR|t%4*nH#Cbt;1-xT;P9qhEUtzGg)J}NnO+4|DCe3X=~Wia1(@4V zBYj~pTk_Y%Ca@NRQ6=2mpd=IhO5PkAS90M5!HWg}iQlDsT8ab>;RS;Crk_n zcz8I0INp*WRAEf04~BKeONS6F$plf8@FN=0~vF80QwY3(#p1KhwQpWZbhj+tKk@c8<@bN&Tyw7d#IygI<(Uf~y?N0?J4w&Kgy*yD zB>OcG1cX9}8@aE!ixUW4m}ub0c6HM|A*u5=Gna1RowUWd#Ua?d%6Sp{x8< zp+c{L!)ECM%*zMI3Bo{#AbqI7hX;+8W{t?JFI@`uv=}|XSL1PYyXy76s%i??)Jw9& z6-`yPE5RP4MUHSTZ&y`CQ7ePW<+a0tx*n_$rLy{$T7$2)mRq&4+S*!2_!>0j$Cs$* z)%c@vkoVT(t)P0TQUD{BZs%*;6_+D-h^o=cWVtfR<<2GO&P6%t^WtTAV=XdAczxJ9 zSnjm;wD<1Xf1Q1s{W1G4`@t`J7Yy1{Y{T#%?J{Xv?8_LJy0w!-xvoQGz_uLdOUTEt z(}lqnIk5Z~2@FIc!(9#i%h=QZ#-7@8d2z>%3K!5r^{}U?C~qa}PNQJ*RY(1Q3&X$q zytWiQx_f<3m6-zr97?yWh`xWvL5`>lf($9-aHtG2jAFExv4=3!%e}@VO)?7 zmzc~}FtU^pLiw%I33>J{$e#tzsGDuV)2sat($nO8s9G(V6;(fEjj97RX~V1XE|!ae ztoM-(8%8Lp@I6YfI9xZNWMM0K%!w&Bynv!RWMl(lfwEp9KEf=*y1-2j{Ei&?t)JkD zC-b?mUcGTLZgSPC?1<~BwTzWq^=5OJJTQFR8dfH@oJ%uTSS!RD&EEwIvZ&6qs1 z9;UO+;E&ui9EeV?CG&-RJRdg`4T{#FhMS{`5mj@8<4R#%%@6e}X1|)`csXb7sT+?7 zSc|skJGggeES62^dLkQ(?c95??~^T(C6Q`>?L}y6Tij)2^;zh`IVRL)MKD(`;5R`J zX>gM`UlwFdK{#O535$e8HoysFZUg4&WqUB$KT$u+YOp6gY@F?ft~cOZnGLFzBImEr zubL_$hiim)aTnU zNGi`YMYmX6J408_Z2sxyGr#$_rqj7MXZ69X*Wc;#}N*V}d(Qf8HHOAqjX zVj``qlO?3z17r%}ki(mSJ?IVNi0O2Tc%)o+9^3g zUJAq<0T3iAsjOrv!m(@|E*pUpT!LOZo~~;1UxowFnIM zuzKJZD}c{D4ni^n-ohahZZ5pp0uG;Mk&mv3fB3UYZ+xg&zxVXh$p;1pA9!*yduV1$=)>Y1bA4#yrxhAy3p~{a zv6(V{fCF0&DoBf!&Ut=4bZt^sJ9hEa6+oX^KK(fC3Y+;#K0h*&&wpj+R*B|PnG@vz zao3~cRoBnj_2rF$zN!5K1N*1?0vo@)OC4HAM3URJnhcS>L+@rXyJ`Yj_)SNt#@0(0AHH zp>|5D1!<%BVI(b(Q#2836(Yu$-2v?(mk(Dad^jJ?tQ~xqg}7cY;sryG8=7utaa}Xx znyJUl0xt^NS+)h#lFWt8=O{Sg<~XspX?5E$XJ1wRLJ~bjp}D5;zI@p+H((ouu+fNB z@Eqn%=oLo10>=m`=_MC_a2U2PdURSFl@6Lb8LAMGv|n@n`s@3O9Q=tA#a6K>SOXkg z))a{}VSO-2P=iXnj;IRZOD(szTvFb zLH9B;c)%O@04H9uc4*tkkf2LpH*o`S30bu*3PK5ir2vXr<+JGe>pG~l0acS_>uQvZ zv2CCa%AlDHAr)kVfbf)nm0DF=90a2gMo7Z61PYU&U~Ob84m8FPWJ$afmR-hCs#_F= zwo0~i*{u?A5-VoOX@g}8oT5UJCERU`)(3*)nkJZojExFB!?;Dw9JDN^Rp;b~26E>U zM?8ih3LVN(;%Z!lG$Vnt!n&kpgC#o{3o0xaD=h~VDmy4&kt;7McNH-)#Kj~R*fb#} zTHyWeg|$^yiX_;;l{6xAw_*+XK?+bpid?ss!VS4vo*P$lA%x*_Va2Lo!aerjU_L)M zXy1cUdNA;vV)515J)i&9X9Tp4YFEztTxAFiPCq_GYHaV+6f1 zd-+^*$IDdW?{(}S$m|-4msoscS7!3K@!jSQvhA-p*^cHbR02abc)$DpD9U8anMrA@0S3x@n#-%g`6%^RZtC#isgVa8&iFFP^n5-)pYG}F>*1>6 ze5CNq=qLIb8{g)ly<=P7#%%-1^o~eJS64^Zfxi9&U0mT-{cvJ!dwb5n5`pjK^13#o zQc+Eaq{?4D&TZN?+CbZ~aqv`&%GBlva$bN6SZA8Mjk!0I-Ecc91(S=lgdB?2eUey- zxwt~Ug}a`2qzN~}T1!*8Jxu~aOqEGJEzeU8aH|P8l>oQNya}|y!7;=5)Ta zc|%IG^EbJjJ9Ct9s%;7~l5|MY_oy~bNWH|soc); zo6o%tL>rck8k;||D&;iM~^_>H!gkk`(n3Y}5TCte& ziO(I11-PK~C%nOE;0r3kva$9nAG4Upug*c=%&gOi**R@uk5m0UkkpgtO#Er;~5>$0CuL6LgRDpO~S0 zXC%_8oW6bgyJMNm7^P#GvHq=1`Q)}e+r~1=oK zE}gN=i({GIEoz&gjw`8$4rRs|E*u|9!KbJG;_=3<|H*1S)XLt=j?q^lnXeS_71s|h zgCd>^wc^4v@_RmXDEdG4_$4K`&%KYjl-vqEhPs7hQ+v5g^-B8csxpnCROzGqw1@Fk zb$~Yr01|V=9~1*`Cjq;kG4l!(*DW+l>asVM*&Y@I4~FZ z^}u^Ivo+7x{8jD7+S%Ig)H-#Ob5^%KO1#vAerWBQ^Fyxm`v3z2!1_y|0(c6m2rgWwQ29mCH5oi{Asr z;>#&oBIt3;3ef)B@(%E2jw@)WiM;N_cnLD5A9zpmuui-{>%B}OBYWbS?D`= za(;0U|EzMHEwPLElyL;%n?809rFs18%;Ld?v*(VVT8eGz&$5H)I*YF3;BJY<5c%w9 z*-uI5Qx4m=aP-N=`Lk>vUUif`2@dAj*-!cG^r@xuv7-x13uougFFX-Dd@;83$f@0@ uPA&DbY02?<@O%`6m*hO=G3f>N1lkT`;`CoRM=)wP63q_(y@A!b>-E1{Pg!yR diff --git a/program/js/tinymce/skins/lightgray/fonts/tinymce.dev.svg b/program/js/tinymce/skins/lightgray/fonts/tinymce.dev.svg deleted file mode 100644 index c87b8cd1aac..00000000000 --- a/program/js/tinymce/skins/lightgray/fonts/tinymce.dev.svg +++ /dev/null @@ -1,153 +0,0 @@ - - - - -This is a custom SVG font generated by IcoMoon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/program/js/tinymce/skins/lightgray/fonts/tinymce.eot b/program/js/tinymce/skins/lightgray/fonts/tinymce.eot deleted file mode 100644 index 09fd441c624d9e3d85e25a1f1e29a0b516e1dc38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17292 zcmdsfdw3j2m2Xw|JT#JKG^2U+X!P)m#xo=9F_tuHjciLwTXN)wB3rRzJ27!0#}R%I z+wv=z0K1LN8gNMP<+UHV2^KhkT;BHrxtoyv=*uG)*ua;Mn=cFO4WA&8jUeIU3+yIv zHLd$Q)!ouawv%P|yZ_vtsjlj(>N-`Y&N+3?shauVFk>$bF~*t1mR_7)_4(^>U*F0KoON15H=jxcXA5(LB^yB z#1#kbddFLT{@%mq@qCc6b!QGv?z^+%w~rlTY+wfEy$6xu{k*G(vB5Z=R~|fa>dY^t z$b0bIkM>@^>)8H%|Mi>3>x^kFD1ZIPzB5zoUiLA@)+h0tJi71533)5OY`#rVseJfw7$q* z^uO5p5<@%EtXH%XnQfTOigr3@*UVmrb{<7Ls%YowW$p0!7m}`|oLH0SOEkteE2GL5 zWwWwT8B#Q5tPAr zcu|#qw@RikB_I!WNP*5lr)oCow{CjNtb1h^mU)Nl=S+1UOwZhaG9J- zf4V=8^0{eIbs{w$lRWZe$tBM{M%CmAua9#RbwR!h<6F&$+f;NbSIl|yd^Jyd1KgYQ zDgj=@qYAp^Rfe-*t#l@%IylPnsN%0b6;5vrskV$fQAwg<@Qx;A|#V3Tj6HsZ6NqR}AKxqoHu4|YY zor^m)bL#_wD=L=uNwmU4)#9AGI`#{bKybWlg;^ffJb6V*qd(lfC4b_h3;NVd9J8X1oy|A3G-~s4 zT;_Ys_fR~qHMZQ;JP;_v)+JkZq+6Q3>(_gmThcpPlIvoHz(DCmPpGOY9;mLXs&1^V zuJE`$!K$jdKy|#@dVV0Isu={{jpwSm>Oj1zDuh}UqC8$5sH>_9is%2+oYpvtZ`iaU zZt7eYiFu}_n+GlxVzG2{%l`b(P=0?)b2=6)TpIX*zpiqjr7FNHZ@H?v?z3u^KxfrC z(W_8ZWu3peuDZ(ZrPb>=J%a`zAB3E#XIa+DI#_|Yu_xPR-I_g(K%XrwqN!qt_wlX* zLNu*<)l@XB7K&-2d|3kSjJq)+?9S|XcGpl(U` zhYe(MrfG(zmEJO`8Is043vz*YY!zg~^=ya5Wf@Q}Pm>hHXQ59d!3t%vj3yg%zmAK^ z4=;IITBdPOK01IqKhrnQ=+oEK+SICxjA;7GY#D6OW|aI^qY zC?ZveMv+sX6vEQp5SDZU)PO)2hyq_@o*7!{)o$&>{RqD^sg@>a;0ie#vuJ=Mne(A^ z9d`@CvlN;o(4fAM$hAILlXb(w^}n@k9?HBy+wdS|{OTq*Hu7J$HLj-@|CH}GRI8svHIjrw@Bw~0&ApWCv1pMR8u(f3~%*`|#> z_P``ocs#!De(+`U6~?*8)++*NNcC|w8{jb|D-Ci*(uk)X{d`}x?a;Q77rrlj?{yOy zrfc$n$Hq?Z@XHUnv4ZCD{*MK0jg)vE>n(B!`>e-{b)YE3cnwk@^3~`WSo%5?liV&s zfob;Ca8G0f7i$C+ zPIguLE?36={{rO#J+*%$X$)OgoNyXujsJIQszy>4$xlE_r=07z3!Y9s3nrms?Ng*GsjF={I`o z;f}K)LFkLjmg(Iviw?nXIu2v$9qiq}aycsgU*R?9#*$rxSa2gid&_w#rttimVd+f} z{IG?mtIthIG4jSCO#>?$GNu2Erg3H%yzxzN)^TS{Q80^t8KyhV1H`OhXy!j6vC80v z2HZ=`09|XKYZrq(77qD%NJdB*T;sG-%%cja>0C3h?#}&ZS~+AAG`O%1Yv2qo^h#Kd zVJvepq^-M5-iK3RUPL`@PA5ITucf7rf>B}yCxJc(*d-t37!smzUFOSGl-^Ams*Z z9#)?*bm$dE>-gw~#-@%H!QhIHrp67UZb9R9|=!gH^kyF{RZzX zv@}unwrB<8l95Rg#qA@MC$oeVvE1CZV^h-@gOIiaw_Fbsn%1j%5@qFNvsq8zTMQ1T_V?ZfA$ z+S{kjeR$hK>O=LJOg#eM*K}R7c|$tAp*eY7)9Rh+^v>0F-HAYGYJ7Yu6i9T}iM*Co zJ9qEN=lAU1xvG78rgfj19UI@#+PY(WEUWHo&1`R%^p(T6uU&il@Jc7vMf-qZ&ey~% z#1*fJuWxBtANNPRvEIhFZ*D)5 zS`!0(Jp-QZgg#Nhs-b%oQ%XTj%Y|@3N%Nt#ykhMMW5zh~z^1iNLgWeakQu;vB?6dk ziJfZkdYa{IZinjL$Wtnhrc|i!D(Q4Ww?jVZohigD4S# zrmf0pZ;rUNs1%^H3GMWMzyHZ6-%rD(c%F6JnyIw?$tQ_tpL|ldZ_pup_rkLT&rABh@D2LmVO#-+c@I|SLGWlHTEIZtI2rzh5Z3C9Y8%|^xS9@m zg@1tXF#yL+y1N&vxUlC=GbY0d683~wubW3Dw6Ny@6)ADUj%xu4(Pe>3I zs0-WxUkgamxHd77$eO?zqU=*xs7+>SJUQ}Fo~OP;m=M1Rz77LV)B*H5nnqt~su19S zfP!G?k~Rl1%FsGJ>ja19fHo2we3R@UZ=M1ykc?anYA=G`huJ2yjaEsU&Dhp0X|>{+ zzyUeH)*F@!ZK{hpgz*^|x(2<&)I=I4ua56kvn3%}(RuiAaX|*_nt=q~CZ?z4@=Od> zC*@L5GsaXtK1=7T$M|S|tsa-fGE~a~sh4sJYfK6P5$G}?8=NQ@EU{oRDCxnH7L+Mj z(t}WXoeOHA#zAx-HQ*XCx`=t2pRxHW109EPN0U>9Ymb(6Va<_8uTaGcgEEJlD?}x2 zQ5bc1t7><*zHy`8o$dBLF*EZ>)z-WJmPg5hp_9C#suNBXs+_&Ohi3T3`wpx#1-@zJ zL1&#P=hwGurUgo&7!(qLwxX=O>Zf?n0e!yIHRaFgRBPlEA0c-OM$RY(2&MxjI!W3g7bZ|jEr3)Z3``KB z1{|Rj+Owu%jzQB-A4x9<-GvD}FWeY|0FOUvel zcs=BhUP7DZME{|!9UWT__48?SqNz`b*Vo6Dz9w@TT>|gebJE9XS4!A~3yPOoaI`H; z5nG~nrorwI3REMekisDSQ>UtSwjUoHJl@`^>L<2tJ#k{INM9|tl%bWMe`Dnxs(Q!D z)JlBsPuF{;T&&;4nw3&R9Haj?NgqC$q`W+GGRoa|0tTq?d zTpx748Wx4$je%rxpi_Ku(EOA%5Dx(d^^Ih60W#JA>*s1;e~ufoU_vuQ<;-b zG3Av95?;C{E)n6zMS`-BSoor!)@8-qep-mo4e*l=U2cW}OJN_+@tn?+d`35?r$Od3 zR*FcQ&Hvbi@uOZNQ`vgFn#!fTDX7lSEX!3Wk5_?}0WsuIb#D=D2Io*V<0vtZ2{L#n zX-;dh-Z$DY$29({+)!tI+m`)(efzhxxm^37@(0L#m>RF|j(s^)2)o0Q`JTe&%>@J* zV>B5zN_wC$bYnZcL2p8S{`kwW?s|G_d@A67Dk9;v!e_-hcn|co=$o&BXI^D%$g2o# zvxr^5DArr-0T$GpSc}DNnXi7itDe>&kZe-xoaxjME%Vot;DE4~fM&AqxuMhQqH(6_ z#&W;CWFVUsqmm|RpdM!Hu1&0&Wzk1jY_$NVX%*I)*p(sUtezKSIEy(5nH(GZg^zdx zZdbrtT_bs8zIe9U?Q^?*(mfyF`_yi;(Peo#;5Qi$H+U=D@`ziODy!WAZ)K#~e4d{) zTW4mlNMgR{Fg0LB);a&L^1J1=f}U5A9v#B01JEFR4d_4w`$|$a7bEWi;=F|E$5fpx z{k=52*}Q>&&HU-mBVTxAh_3vRyWhDkKXLobnZABcXHUnezxwOGUFOeX@W#Z*Yez<%U9L&4v5_rl+IRon5s{;W-8*c0j-SqHJL0JA~w_nw5d z<;J$H7Y+?_9%{_QjE={owfj3n+FfNIU%W`hp*p{@>@!w1T^G@C=yWakbue>d}c6--|x7M2-ipPhtJ^OFlopVuj z9%>4Wt=PEIdKY{*|2j*$D&z^4VWVs}I}9$x>Om?aktVIJQLGzC#YA3~v`1pUltse} zWzmKDs-7Gv>9DN(zv%__D!`W*V)LHEee0QL&b)8(N z$b(X5&&_RMRWHLO z7U{EBz`KUEUj~=J6Kv|pwc#%_^x=0FK1N;eU%8Lb>H(Yz^ufBdB&H{Hy`)*AhJ)-X zDRMHv)nJgX5eu3L;bYx2<4y2Pig$F;%fW426GR<4tFgqlVU5-DY0Mc=XEjOSnO01o z9N5MfJqQ-Amy8iM(t;5}B97#(GgdKf?XkypJ@JHj*u_jZOeAe_oHX*ke{9cV_)6cV zq0SkSQKB(oc-Mj_{0q0ELrdbEQs?rfCt;k z8KN~l751?eRD$=_iz65DEsZ$}|Oo8h_!PWggWr=|%e z?fH?~Nw^g_9kXDXU#00JdWEu%yETI}SPp>rTE>(PfLM#aJ%CY)eUhv4Cqy^--U*g0 zpb#XYTMMQPTikI6M8e{?Pdf2#hAN^uL@u6jGBUi?nOXq9voWMoV{$ z&XEb0C|F9dM5Z=BVjvE+{u^OA)at~9$ps`X!dXm}L0jbhGJI9zl-^3{9$xa5*ofjl z9Nc_RNtHqr11ciq5ahcboF1EgXl(lO*yV>d&s~735z}_<(GuYQUd_C~Pip25p=l00 zMAf#4YGZtu$QE`tKH^4rg(hmx7oF3p#>z)$tdyu%bt|fu;Dd~EbW(zDARwiPj?gXS zMnCCj6Fl}s(so6FI)n3h%wL#i1wTd(T#~0po?hpy0Cxz!lF>!nW#G?7f2-w<$8)Z zQlP;6^}>0V%fff0!J^P~8mKCkQU0IC-G2!<5>Kd9G zvIS<)pK0{WvT>H3*a}(RXtGP4z$^8`nzYN1TCMYmGHZn%_niDi%ytkK8S}v)!zOdC z*xS8=$09Wx=448hUN9@4;IBQdJw6<23*8k84VS#~7v^q~PMVdE^Vgmjcw#sdI)b9% zl0HSJO0g$5{|EH#BKqb-yD7F2=b{ec!0U&I?;+*L&{f@JR@o;k93PZ8Vd3lskwT@U zp>m786KGttAx=6GjvJ(bbUIIGZJ`u#W)Ax$mV1NDd)U&-qPg$EaV)%K*QGZdBS=XL z?C{RvVIDsJ{qyI)&%;lD09R>NR@KI~KuwiYu?31?C>dMTnOC#bRgrL5k%vFxs`e$q z;o4BB!KZHtt-wChKxe!$uyJE!EY?^bhcK zA`cG#tatbmT5jpdVT&tO+j*b zT{XVyKusw9{8V-2^~JSg!EgiL^;|NSOQte89t>xiS7stnxudXgP5;Jjcod0lUlDVW zWG$>6ben@(UVs$D_DD1Z$_0MY(87sfyL-Db*oVRS!$PL0q@~ukH}$lo{TIx~_nJ>g zp7^FhsyB9PVnf?28)h%cE4gRyGkXiq7xtQ89UFUqci!E+d2GC8FRtOgF0LGFUwgQ7 zc6j#U-d9S`+;`vX4}L%*rGjfPAPo5`x|CyaXFwL@i=>!Hgkma_z@a)g6rL{xiWgH5 z73CKm0n70ReG2pqpQum5aSnK!#fM`Fzz2u77@DFFJk2Ngedfte)9s_=?GkxOOBQPK zJW%QI8u@FAVecx)K?vY9t)LW3+8>_&!`vU~O^y0yC!|X^mOgc(WWYO$q3b{ZwWNXf zAh{q<6r8IeZxy`XxXGaVCnGe)N)5)jJX-U`nT1uKIXM9=|Z@RgpQ#s%P_W~aIC9&tiZ9v#>z#$>A z-5{sDF!fXN^c(qG zq57%gJ7s<6@hQ&b!Cl&&b=A9X+p^`h-PLt>YP$wySI5Yn&dxm}9e^puBk7>qIi}Xk zyad#?;{<0>Hzn^F?F?)aJ7J4M1N)IpOZy=y)vXqyZfDex9ScPe+TQXq;@ZX6FwKQ1 z$55v+Mk~UGC)4dLQrYb?14_uUYKEc9niy12w~1m|^o5u!t1x0x<<1vJBLf zR219IY6`}MA(4w(0)IgF0YAc}u4^!h;4IQKLj#F%9TQJ;Zt*=MK8J!M0>lLg2s_ZB z6-|7BSD6Jcf3E^|jpdWi;Gh>RS{#H4>d%$?;EHM4ItL@aYL5C>ghDI)=4f4}AiuSc zsWSui&R*!|2<`B-%LkNLOqu&cyQZ~^9LhE5%t)r5kxpPh*3+2(e>#r>!E2Ap+OK7A zwpSZ2v*@nekzIC(u{PG5dh1ny_5j41|&7yG0@!?~hQq@0JzlMPA> z6|U&T=Rjqk7tq<2fWZe$gOHXQgKKqQ={E@sX^ubtsZXstrC2AHxOG0oEAOit zz4dUhc=*=Qx|*OAiPdeoWl~iqZ`o8Ai%7wmze>GpWYyMGWu&tGrY!@JX4zjA_J*pP z`9EKO_U(7AUVYcw&tBhl^Ub?f0SZk#7 zEL_{@9KIU%LN!n`3zPN+<`FxySWQ^iFB^2!cn&9*rKCvG&3ezK7m}Z;g&kkKMJi<> zg=5tu)Nne)YEPaqr^9}{ZBA2*d_p|%2|P%ei2PTp08rFNaSljhZuC*{@gn>waP7j2 zgU%y`H5zLN>KXQWk9r)x7g0D4?%KsNd0?!H)E>r+X{UPl?SL1Wic>0~RlI|yaZZ(S zO=gmY8HHveLk>Y2X=1fsRz?~EbOeYeG%g|Nc+bFlfZ&sS$e|Cqi;o1NL|WWYLjwUC zkbgdsptMVG`<+8MvJ`TXp_2gBX+h)cocYPO@crko8%#gb5jS)CocYjO_#Nj^oMf6j zBWq&yq_ZDsrI;=|Uy+X52gA}5&ZHgcH(qy=vbMh%Z z>M$xgxdaaF$`-u20&R#o=g*?f!45wCAAm!1%7m;Hc!W2jj$0O&q+zERfq0FHb=<}^ z52c_mI>q*OHu3jQzP;m2vJUGl z{7GtBo_RH#3$}GR=%5(8%RCtRQT=Fr!c{s;+q$%=YsXb2Ds=spABBP(JJAk~Deh_u z=EAQwxf1oGTq=7-yvhyn9#F8f|7-v9{?l)P{^EZB3vI;z<-OK)niDZ^8YXWm$R!2( zSFy48ra|~u$j2fA%uO6tLqP8r0++!>#0wH)sV1}{(6KJC`R2e|PX*5Yr@*Bz2EOtA znxDKF_@imo@R0e70Pirr8{nJGN4@tx`;WnYel2MJi7P?#r@R=19>2T7{FJQCGg6Su z({k_{SH-;xMHS|0%!dX(GcYZ-&f@%zi>y7(a@7ehr7klAtB(P6;9Q+8Fa6M0=(i~& z>?Zsu^#nW5K8zU^TN`ko(7r}**ov$@4UhF}6db4#ze~coC_70%Q*kRX_+6S;^DNvj z-Pk!2F*z2HoAJOO(}N93xM#@GV8?dul?(jh@17)~?AUq{oqFPr(1S*|5)QwL1a8v1 zJHp|xTAQz}4XfeO`LZYJ0CH+kqM}Ae>3sPUA6UjC>d3Qay=n|#q zMagbgw93Cz{v^6$cf{;3f8xJf&SU0;01MEVBFMD@bIb3CoJimSHhU8``2w=FFpIr3 zSrD+;gj}Cz782`#$!!*N+@rAFs>}Cq(wG z|M1Pr&;y7s7IZAKMi)enby}B`qz*y!T%pLAF-O{5smPd&BuR;m+*)He$A+{AK_;SY6f_0gGM@37$;|0RHPbc2Qb{ri(A*T{qsA4XqM}AGT#C5vYXG(7ok0u`B zB^8;!F1^K?bgRyALwi$jdY-rsXJtq~ zz>U-e*dbh#4CF)4ggf2PA?GNMG(n;P5!P>*ZM?mv|6f=Y6nxcto^(mjirDb`B^-N=N!onDn%j(km6f`?7*zq~U z({>s)a8+UtrV0AS{p=+k#Qyvp{Qc5)=>a(+-zGnZv-_{R#$88U_q+SufA+*YBcAtq ze(w!>&sHQW`YYaB@!^VZRlMwr`6hhNRmLmFE5B6vOqEu3w(6;B1}F6m)el!cRsDN^ z!aweR)c<5488{XAyBbz=Cdh)l!85_H1z!%W4BZ;~c<7nhMD0lJyK4Vi?W^ID@IB#g zg?|+ZMxKi{MQ@6piGDizvsi6Ri`^6ZO6*t4cIA|EQF%Jv7e5<+EdKMlp1Se6^K}o@ zeW~tSb#@N{Ywo`H2kKqp>eQrd*l6$PYSAkC;JFl z6Sy4i5D)e(z`i7E5ubUHM;u2ry==lx)2iBQr(H;&w$t=WiKw0SAb-?OS3+K2fK=cv zA94aHvC%*rG9eu}<{gX@oMPk?F ziIazp9Zh!SJFouN5m$Zds+rp-51hVh--)IFNpaPhBgc-ON*smVK&cf2FH zdH=DoW5p-0f)R-D2p4&WDCM-fiouPsg?z7u(O;I~^z{B~kLYK>Hq)$ diff --git a/program/js/tinymce/skins/lightgray/fonts/tinymce.svg b/program/js/tinymce/skins/lightgray/fonts/tinymce.svg deleted file mode 100644 index 8688c1c8fb4..00000000000 --- a/program/js/tinymce/skins/lightgray/fonts/tinymce.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/program/js/tinymce/skins/lightgray/fonts/tinymce.ttf b/program/js/tinymce/skins/lightgray/fonts/tinymce.ttf deleted file mode 100644 index bf22ca64d11265721e0caa8b099a96c23313ee7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17128 zcmdsedw3j2m2Xw|JT#JKG^2U+=;;}aXGYdzG}5RwvMniX%aI?7Y{ic4#KeglNBBW( z%dcPp>^3%Qg0l&}y!InE!2&0c%llp+cN4N7eR<>p8~E~Z^JRg(;S&V12ogTN0Gq(o zwC?XzcS|GLPL|#8{&Rb}x~i+H>r|aO=hQi;Y8YpXRWY5(EWd3>S5HlC)yI+Z6vD** zBm1Vl^Qre28RLxz8xHI{IfeWnW6}iTiUW7O-FIa2@=Xyp-Zj)eKXvTnDfAQ9`tMLVljS*nk)d4rnDh*CK48WCH>|*Y zRIlvf==Rb}W9+wQWMkf7nv8%#!i94sM1r7EXhfM6%c52zb8+hP2)=VO5AqT-tuyLN zRWAizYX23VWwY+tirK2!&}?+JX|{E?ZMJh(ogJKAH@olGpZWFYe$)4xPrrQlUeQiuwsAHi+R4wZp1lt3Jcf2u z(atl=+TrsrCR_=*esz6+eN%k1GOBD*HY*#I^@^sfQF@earAz5l+LTpFW%OIoZ${Tf z{xRYUKNkLE*kAkiwR)|Dv6kaPbnM^x;EZErHD&Edj1^al<`-eSaUL)~Z@3s{$;B#I z2oseI;a3QykSHKoP-J~hcQKRcI@e1~leAG)Hs+YD&m&W2rolB8u{LkW_^~i%v>WYY zb3B!7@kB$BSRvWdr-phn-e#_(R6N2F56Uvg>qA*gi58l9RDRzB@$saYNOpB4rI}<` z@_N}NU6wu4SAE`6!t3*S`HZW=WpXb4>47-P=cYx~iR5@p^2nDZmpu14Rg)*YKF&?l z1^F(FuZt14spwX=nDyp(7f*Qu+?(|(0bawS3cBT0ip_ilFBFG(Q7LBe%z9Hfmub+^z(tgGzf?KYp;P)^q9V*`LtG#i!o9YFP^j@eyO-I)>?xNpg50L27_g z7EVURFNCKPP-%`ydP%21X$rEgYnU3HizhX8&Gr<#E!mF6_lDD;ajh1w*`C{OhnKg< zMenFl^WW1)Yt)NR(MP9ePAtZ(VceQ7PR&hd7h4G;0&OxDK( zJQ7pF-c*YR6o82@^z>oMvqi-dv)}qMSvQD7+^Lofh(_(DI@VnP$%0@bo+4-%B-|52 z8uhK3L}5;St0pR2^}X^tTW)G?(&pp1%=eh@p?F?vYQ3ptFi?oCO|Ug#F{$N^F(+Io=?^Sixfp}F_ z2(>CidAvGMS5*}h@BgPIrEwPDuxUfw)VVGa^Gr*%3|=b4VyTwa{kiq)bNgFcQn6U! z(%}33b(IS(RRLak%T?8NpH?#jI-|~sUWKYE>-^Pq)m3&ctzO6J9W)5}AmmH~%dj@q z$qK}cy_t6F(c)xwhFT0dbY#j zvNWidr$`Fox6mh&V1+VSMw5-XU(3bhhnKu9Ez>wCA05DxpXr}x^y_bKYis8D<~H4m z+DhkNuZc!$=+x3x;%kC zIdoykx)5u^Y%rPwN6KYGDK({rqXm#c5vf8nikt$a5SI3au%sKH1_Zi56u6CfW@x2X zd$bP@ApF*(TAHANE97jz5Gnb@4w`cl4`xptM@4h&)O&fds!AY#}czxad(97m4jB}5zR|L?I>f>rAz+*~A z8sdti5l=n#+5SxXp=~2CepmX=>n1Wx*W`nbkDcJ*mmhLt1<~M`jVd+f}{D_68tIthIF>=NsO#>?$GNu2Erg3H%yy;DF z)_G@4Q80^t8KyhW1H`OhXy!j5vC80v2HZ=`09|XKYZrq(77qD%NJdB+T;sG-%%cja z>0C3h?#}&ZS~+AAG`O%1Yv2qo^h#KdVJvepq^-M5-iMQ6UPL`@PA5ITzqPfWf>B}y zCxJc(*d-w z9RAvUz?XVpKSCW=)FvQ|8{RZDHv@}unwP*$7l9i1_ln%kVX8iRfpEBIkc*^qoZ{pWo~az z53k9GcQsE8NV#3%{F>o(`@n?x8O`gSZvC*#%Dxxvl)kd$d#fc$S@^Q~$%O{{j0(R? z@44HWd!~c#5*XtOwwc{!jnHdPa!&R-stm>l0SVO}65mqQ$I0#v@$soppuVS0)}$mL&+ zu83Au;SpP%JkqhbA>0(Mti+>XbH|b7>KN$jS@3io`a}h*hVE5NDg`+u7s3T4#n-Rl z6>ClyGscMrH?4UJB2Soy%mB_S5x{gy>{N@_Q!Hz9J5={3o>X}>sX~2MNv9LK9r8)< zOd>`TB|*DHu$racN_NJai0O^I5VBq}AP7mFM{Gc=gVeo2BQh?4TwA256?^93ROT(pjp7q$8 zskHs6r-)~tdP=x&&?fj^N1sKTysS;{o3<%A>h94cZK7dYM#BC|!_G>omH;F&7h(~L zw~|zIkc!YGZGq^OfM+at-P;F}#R+}$W__ZV9N6A%>KbPwckk?Sq*m9?yGJyAo;@Gk zbop0ktMcV zKFOrrmUT&n3(2v*-DPP`GCcsUg-majCALf=AHL<|r#Eak{qbAu_{R=2@ddV;XX?J~ z>m%O&oks=-kL>LCM%HiNCmYTXop^4%tQpaqG-dNX@jnIgW0985xOVKuuC5!8Y4OgM z2*Vn+z%#@v;1l8lx9urgixoUXG6>!>S{>8nBLk6PMKtDM`)2A5@Bm`-CDNUFpdlP? zpg^WbrrtymF;b?U!wv>_X){)Fg9YB90S`3t2ztSINHBn#l&DaWgDk)eHCzEL6kY7X zb9X&=!MvNEfc38zOdUBtLKb4#5O2?25S6$-XBUgQ7oH<{Uef=CZ_p19;|i8%y;z-x zz@vp|0RwI4WcU|CSgX^jZE&yUYAWOv{sF?rARITTo<6MN!tV2Nxu|e4R3Jmsby*{1 z)WhtfM}4NYzP=XOw0xTrGut2F6B0xP>H;^w*8-9>u1!qTXH4J>QRZnZ)Fv}Eo*4Ns z&r#nYOo(3uUx$Gw>HvBjO`)$eRS0lEKtV8cNt=ThWoVt=b%H~4z!)r-1--;8ym<<+ zKr*rm)LsO=53@~Z8?BNyo3^c6(rU#!fdg`Ytv4(e+Eh1n2;(y_bPalksfjd9ULE&U zvn3%}(RuiAaX|*_nt=qqCZ?z4@=Od>C*@L5Gv>E^e3s7Ffbr4%T0Jg{WvG?~QZMBs z)|ey&BG6?(HaJl*SYp9MP||}XEhtm6qz9q&Iv3PJjf3bwYQQyObP@A3KV$P%8afW+ zjwYuH*B&kD!kQzGUZIK?hGY&oSBOg5qA=>|QPrLved9*GC)4A5a%Seys;zhb9gmU+ zLnnDfRVSP(R5^2dFU|0c_a9hm3VhSbgU&!N*I6z2Y9)Fy1QRhQrNGQW)5?%)1-+`B zhcT%lDSfLk(K@nMg(qEC_l~q~FyA}bHZZX2t(Puc>KGd0|J-s@7v<0CRBPlEA0c-O zM$RY(2&MxjI!W3g7bZ|rEr3)Z3``KB1{|Rj+Owu%jzQB-A4x9<-Gvx0f$!=muJF_26abc$aVnxB#a;vwLmzL9J$ zK*kziJzdg`$w^bE01<;NAc#yuHzY$dN*IWwO-}O3NtjHK8U}>_LypXSmvv!(dDs%EFro8e%!b{i0B_ceyNKh6M3pe^{T~^HPw}lAZ z06*!_ zMQ+2ZR57O{v^9KGE^T+ES{oJGL>B=3s`<-iZ6Sv=- z?jP{vdpl44)nE7TGJg^q=l5>}Gi?-=sB-5(qdQzFHx|;XFFf!!y`6b?X4Ni*XBm*# z3H|ExvVoQF5T+9ryHJ0zdosXP+}-(JHQ(DkB$J7QT-sYvWKrCmle_cqiI9blyPFJO zS;O|82XoE~?H$&7rXs8&_K2g74;EX9-t@Ji*dzl%Wbj&_-=w{1wZm(E`;0W+W^W-PVq`s3& z)Yp%`jh>0z+eYcxRA1jDO!1iaEm z%W+GPAn5^JI%feaS?~lbi1Rmq2iwXSqBTAh_OTUIg7@W%BNuU(#vFjw0IerM;iZcg zhc8~_nhlarJIKGua9snZe8H+yQv{Rt{7CI2+zOnISuo8n({vKOLRrVtnn4;Y2SD7G zF{J|_*5YptVw7T^p0tjt$D^=H4y6GV%TIJGX$q zXc9~R%gI9_HA%8ayQVB!GD>T-^u*{KnP7>6r4&nKYV#uo;!x|q5tc)(PE43wK;j~t z#Z(!zMeZ-dS2a%Qt%UC3C0~h+C=SHI%?FiKDMT@#B0?5HzWbr+vFV4$rZ10Oet7fT z1*jS^ZPy;H9{k^@nHTs;&HO$z&B2GM+7?l5j1Lpp!tTaTJP5DQMD6*ab6V9{`RI(5 z67{NXMfDPVkWrRSO3(uYq!iH+dW78QCmn5q$G%9~t_V|z9S75g{IR$^_j-T*49Q`^pudH zlP3}7sKpJ=W)=z?8)-h~e*!xDl)wgjnc^guPnLNxP0KZ$`KvwHr&zFMS9^pHAS+dF z*tKhyd69of@|ZX6HvgQGw9mL}e6dJXwXdPNy1vrqkHowom;9k&QPCWiJp9XZzsD9* zVY9oYI^GpVrON8cY8;3OcQjPj(Ado)tV6so^juldANhS@|S??FsFP;ZS?%u25*W z z!ujKXm{DGQ+|eAR)PQ0j%L>dNbjYsP}%M!xI$L^hj9rn5X4 zPPeQ~N1}3PVdLt7jXm%v65YNc<|4sbSqJDg3$?reDTwWnXcCkQ{HCCV6T|lOb*Hfp zgY$=lbWur3ZEtVxZBO|xm{06ApOifDO@(A%?AH1X?XPT@y(q8bp1sfRExb_JYkqlb z>_MKtyJhp(cwKV+p_yhqoA- zq8~iXC;0v5$xqVb!{qG}c?nAvYVtf#>F^r)Yl>m-D#$?y;1sQ(6ieFgpZWdVALvVs z`erAjOE;E2aie6wJBp#}KmfI*f%hP}AWsyWt08X{yx(}pp(UqS;a^j+nC5)^5trk%PSg{_`QGk4tYSHugfmn+ z7V=zQ*`zd9)bH4{XGeWSqtaA)y(iQ#b$q9+?>s)mxjeK>yR)u(_ibCY+_t;A?oMsj zknHLl*^|%j8R-N}F&;?=-PV!i0YPc)Bb1#Yw1$ChFC1f zY};{cL}0r?z$&3Nw0ZIPHdzM{tKlV}wjC!pi@GU!$7p9@o7f3k92(e4N;$Lb}cj*gJcnnJC!n<^%$aG>u|6Zsl;_TYs)?FG?w3HD*j~n(gHt*jXKZlZCP1r? zb3O?kL|LdvIF(|ZSmM_C6tBFmZuHi}#p2;xN9$^WQY2Ql>6S@VoxEjJT`VF6YyK+v zu8~z+la-Omj+?d&Mp|TlRoEM4oHHa$(08Uy({#Na9#E2{oJ!vD%Yo%;~TnUz^j^BA*a1d;%|$CL;gU zDgYGqQJe$Pm>Ydme7p#M3S7JJ;-K?LVU5PxfqI6$-lHDJ|3wszgS&RIOdc4kBDIGx zW7?@6{yX4>rs9-JXcga}X`EAKT$7okVMd|Z$dE&jMw(ddmz9x*038A135`n#I=(aT z9U%B5A9Co2?&2qbD3KOV)X+eH2IQZQBq;6D+kWRzmMn#=WauP7bz0CkJ7<3UEqwnu z>;}`{bi~7)K4(7s7JkP$6epM_&&ZlsJ?ZR6N-3tw&R3+O_Q9}}gfnS}28`EUGupS@ zxq9`Tw6AdIYKLoOjkxl)*PMKck2;KsPA-8%yRrpuwm=)A&iS*bbFhO?{|DgEoH8M6 z1s>tesNX>At<=OtKE^E&NGpN}hQ&oDH^jJLsSoyURQn`a#2JL%pkXmbP_i zQ`e5GNL1+hEk6haId-BQ98=ug9?XVcZFbc+jB=^$6Y(iG#CJf!(*Cdc%ll9N1^SEo z{YTn}|I2%==`<%|-ZV_!R**{)^si!L?@fd7uaJ*L1elvRtcHNzF9a@wi-;E_#8ORY zMWAzSVDrs^x1I`|{ZD~QpAUTPyEQ+0Dewo=tl=T^X93=6emlT7n~!<#d+wit|MFVU z{1aD#=8t(X2t9sxh4~3tn`fjTnWyF8HLi;L7K$p&)0htpd}d%;Y@NmV9~W7Bn&qk! zUP@hN238*f=)k!;TVDF1uh4%}M%YbkKTfZoXCK6jimeSeP-tJHFKk8Do`%QzHwq5a zi2o(wT$G)pzp1#D82m0RT|5IfOb>RBL`;qapq=$6Weig_=KEF zWTA?=lpg&h(Gu6`*^n;1MZB7Lg_l%h{<8EIYtpSczmy)eUeQ02hlW@eYT^09X?OZh zCplXnEMPbYF%9ia!RdM8KAe>y{QwVA7hs2QO)`)VJrnM9Lx-HBJkkV-21Ho5VYcb^ znt?yEDk%K8e)#HYI@KuR`I&hgJCz1rD`-x|h3~|FqapH8{<^C|v}6~G=$%$eRu+9m z?+BV5JMT_>WLeqrdU)p^)XCZ38_U|E`h9lZv&+gF@lJs)3-nD{9(g~RfuP$lLp+V3 zAtVs+&Jjd8#hR7J@`yWuiP!CSD*H==(-wW#w)j11s|#&iD^1^^jO&O4W%Vha!lh+- zhV@Qkal*nF6U*w-_Y^ccF4*xo#M5>fHE>m852hLV#slnEJc#}IJNUiQcIiPmBHt!I zgtPmvyT)BdT@Sbi+<*4OJR_d>dVc2(de2rQDh4XvTk*k)Z&bYOi}@ye&sWAP$1A^3 z`D~R|b++p1Y6d6u4b_iSKVAJhf4zU)|Cs-&Kq7D|@b@*W=1hwe__lwePC^Z?&(6N5c1nzY+dLBp7)<+8n(pdM5hG=ucv`F)ema>`Spw4?P>(19bSoejxZ`3_o_tUyR)YsQ_>ooLDV8X^CFKpj%s?@gq@~Uwa-qw zkUnjv>7No&JMBUKsGY8ayuJXbz+FD%1W;n7C8Q77Y4{6p0>;XBA^k2p?Z%0&gq`*v zf4iNo#Cg_7P8~Y>jwAag;Z#4wj^a;HN3dW|?wUMt^3buPiSAq;9`{MC;3rXh3>6aC zzsa%uRlmAw=Jv@0r|;T#0zfCx(bM>Y!#;N6sx?QB9X*veFnM(H#J*FLcP8$5M`H8- xV`ImT9nC?HAlRn>{Q#OdDtfdJ@009KYVx3Y zC#4jaIV4OdDJ>aZ^U-OEAuaUsz8C17md?kyJbHmCeEqonI>6lW848^mT0Xu4)55im z?{DpMWXn#{4m02V=StdV@3UWP@3q%jd#$y%-oABYgmH$?a4)N&c->3(JEa$Ywr*e9 z!x*nZ?gWLp`kGJdJG}Q8@(v)Zr|{iRzrVPD?@8oIpGO_4OChlTj(5Bjd0%C0&0Q3J z_TEG14ovR7ow1=#l=o4n`psiU4#eCq%fHee}rQ!;{GS0NS0SaOsAy``FQwXg3_5uO}lV z%d`9fb7PDjm!8J^2kn^uh84IM@0A}OsC=We&e(77lFd1j=`sRx1WpmtCn25!3Q|od zqjVFVRI7=(cpKsov~x2L@)FZ+)7pzQFZy5Xc!|%j8TU-pOwCMiCNk4J(>BvS(>0^b z49={b+579y{`&L3>HE!RUOx2l4_aN=FlJDPP6Iu7uk!x7u#QA z=tr7SL_gt~rkRZBCqJ`l<{I?#DEiSvKTj{|htIu`a3$pUs(63AIkrh1RX3}f)D7x7 zRaaN5J!-eQQteXP)fH-WDeMhB8v0boSN{+7M!n?BQVi%n`QVIWW_1E< zc2^Q(#Z>~;3;2HHJYas#bTO=w3zQkeLM4Ov7J?}x3P=`I*_bt4%wmSYjS|x(eN>ap zStc8E$ds97a$Q5L&zUm5EQA&8MnBmcPbFJDkzhDlNcQw;!QPD0!qt?9M=0z;Sq6E1 zD2u9*LJN<`@4G)Xp0pCll`E6dbaG|#TG=ICl0DMbyhR>|>|Jf--#l2uecuj3IF z!&1~@3tz?y#UWl)i&;FgN-C=r3#yA<^wifJIBtYG)WB3g?Fbpi57g9qE?znNlZN>4 zV{cxyqKAZN#2C1aVL4<2SXCf}>VQ)gN=C#th-W#V(kzpVl0kve6lBBDu`~u3PwMKb z{i#l0vJ;E;X1PQ2YCT@HKey8luk4SD(NU+?e`JjItQVeQjOCG)V=-qP^VSW4y2GHw z4+DQaY$v;oy^pbUj(6~EXo&Y_vR>}z;iwu?Qmr0P02aQ`(}yL`7FAEwdF#t$-5?I} zOSNV|G+Hm!v3~`SEC@F2DT0PU!aY%>QQxjf6jrWp*F6i=GxjSkJ}Td zscG=n#%k^N2hy6BM&LbouW6|D$7*VVs8uD(W3~QQd&2-q0R!=j~=SYi4vKZw3yt{x9Nok6f zjD)m8F-4Rw>mlECCT_$t)4ov1#}nK%OJE#RV#Z{nX(5)3DPKsBXEJfrEg8O$iA>IP z-PHBcTPAf=(wS#oE)b8cfNZ#yZMV5B4eI47l7jfokBKB$p+c6?Vq@*saIyHIMQ@AC zbPmeL0Py5@_0KW-_P4aRxA1&RyJ1J|rE{;>MIv?d_?k`=qX$1apDAPP`W$9qhxV4z zGop*Tta~Vy&{fF@`KYBY#LaTb0tW0n@WtXe*D#f(*h;K|!>uG$c$u0p9}>=Da!b++ z3~e*@sHTlxDS#;EnU#SWpXxZ(*Q}b@|V&L+${vp zVraHNgZe@u*ZyKpHcT7W|K7fNF#QI7&sFv=frdSK>RFo_)= zudllweA#-1aqe;S3O_p1yj;upc~s3vLtK?~;;BbJ*PrP)xOL=(?@8Z%-9m=tntb4~ zu@gM>@`G;dpgFYvk$|nU6X+w_SL6`(8IOW}peV$69a13jl^7XV`Wh6I+%7_aY4y}` zPk0#@dju6^6`|NrKDG{2S!h7Dun#z$Wufd~U%7_&^>W>p_45Hg_aU~v?dPABUDe)8 z)iIwh=G|BA^;Tc<#(Y(E%GyYGL(3}lQZBboUDeXETD{cnNv-97wBMo+)7zUh<;;hX z4fwM@!~m8JD0NkUbBW;W1019u_Ex*(wShnspw4vdQ}Mafemb{Ss$WRIQLBf$&VU5T zl5u2u51V8M*>|X18v)u|R-u@}^KXWwH$m{jHlD7$ zHYL@}nFn6lbbqlFEJBz zt%I&z4E9(k=;c8fA!%}*(@rsmDx{`!-NL>*`}eeS$Rud+!9J{mGZg5RF>0F(%8<71 z3V9z&hIkS6^jU-S{QkDKehOxZnVbarEMS+IWKP-n{nkbahQI`)u|PJJ`?qyhl{KiOGyW5t8rV!nRq+2vi`=tc91X5-tUF6tGuU$w&5g*LWp+^}yb3Ypc z9TGM4M4P!ndq+|$w)!Q-FGs>HlG-8{dWNLpkgWCQq-;)3Y2B6L5`vVQuz6Tx+BBe7 znC;`E>ziA;mIVUKx>}mokB+xro^$By_l}R>`}IRk3|vWiy3rJy!_*tJo9}6&qP6G+ z^OBg(Oxcu7<|dznS1NdUGUeq3&UI1;ut3;$pz$+O`>`st`jlhGXa#?Q{C#;d*1H2~ zooxnYfC)ka;eZejDyy#$XwY(P#TDX=XZ^CGLi2SOb214vcPawyxf}M8#K!MEI52RK zrYz!jtvI-P^}!Wwot`qsoXEh~4VQae^Q^u+zaW8>q;g8q0X9_Vl(+$yh#o>+03F4lggqhUgzKthu^amH5Q!Vr$#l z*2a8cCEC|Ke(czIb6->m`$R7PT4Y(IrUsAbs^sC$O^u=EP<1sPjhi|TCs##5U(bN2 z^Ux=%SS@s~Vp1*0DY+0Ts42c~HLqHI!kjiwJg{-~lMs2rJY*(tUX1{zTV$u&yq;oN zhufjLH}j;%BS{VFyGA;l(Cv^O5i- zS{TYeOszJb7rXg)6u%uQcqeq-G01B6A@Yp?IrFEeELxP0|sFiUd4k!|UEQkStCZn>HB}#pJ-Y zZp+X)8@Y4G%Cgj2x#P|e-I!y~MK<1gY-s!g``4`5|AFzLW4CUMJO>GtY}kH>v4PY^ zQaCplcWiIK+PLS(6aw88*fnH{EtO9)X}1+alHo!sTi@=AG$)zv2iHQTx5yG(B9RZ> z^oi5!*Ps5xO-}riGBfdcwwhzw-fio`O8<_-gM){6^ef?Y+xE(4d5YzDcD$k+(VcY6 z;eFzN3f9NNtz9ww==CdCUVl`Nb+v{W_NaNDAzlHW5FfZ5PuUvm;6ai>@Rrf;n68`| zhzvWTISbo26F0#Fh^-e%cjo@aP^ggtnIf6Eg(704Oq|0G26ySxc5$N(zDxriXyjpx zg7KhW05>U7!6XM+fE((#3R)<-*!gGgc=o(?Cp`h{-_BbGa(;{~#Ih;go;@!rabwmg z7In`*OYjuZ|AlYR2M^;imS?@#orl1qg-8Jt?ciki7lPQU)0$&&ui;uMs0jZ6;bRbv zn^aF9c5z|%dAVFvxtJ=Dp&N#*6Efm3`{)tR)W_rX$foVvnwZ{pKcA2wDo_`=0lwyu zq;q{@BA&5;GenuEuu)sg(s^R!BRofAhcF?25qup2o@f9VbtHwc(o!M70RaWUG$ef% zVw9nGdN&9TtpQ`OT;}x>MR@a6V1Z=hN>FZ?*tCW0k+<- zTxe6>G$72+#ME`@9hNTAFnJC9u9z(e$%?_lhl>wnu%Vkspfxc)C6{Jmss<^Sf|{|u zmGiT8zDCTC*4G|!MJz+LERcFBC$YyQArOHs6SAQk1p*}&NCYG!P|^c3B}+yCN^kiC zwNU3EI*=N0jTl43I?YWxe3gcd!+2Sf(}Zh}wsc|5kw>pk!wW+)hny=!Bz-{`_4H_3 zPmi%-gVB@e@jfv<{YcH0JO7SH$b(^!yrQZTB2%B(T@zM%qZOc}~7U`WS zusehT)rhL3Fi8KB*R*`+@u8vPoq5eTv1QAN6I(?3O1Y&p?fm@f%Wu=P+mCw=d5Y>xv=MYq4U+T z2>fmgB$EZ5;+uu$r>1~-2so&3B%2G6u_jp0kPLHj(lRJO#NY@BBGWWX$<)mfCL-yR zlYDX#CKIHF3E{}hke6q9*5C;~ZCF!NAoFQEMWoH< ze&oXZQLmY4Y%Q85vq>ch)ft*)r3&RyR9G1hLuIP&D}v479Ll82N(^Lz3?52YQ@U*Q zk9N&6o&PesF5lR(d0&73zRevj*S@EGelj19jW_m0zZ5Kl+#$(&Phr!h0)mV=T8x_| z!(Ui;eJ8b`mXM!6`ckx~ky?!(^ZT9(OK4X3jA(;)psxkrd>uUV8e2tPMQEEvoB~F$ z-{K6gpk>8gEFMdI^-Ep#v=4z~6MB9+uOnLGuP4C)VJ`vAWZ!espxs61OgGG>etXG8 zHf=^FUD824%-Kg^?5w*kzwK~$p3T?0+- zP_^7tNUu77|KId><=vSTJ5`=#Kw=m4t1rkVcD{pHPFUorj%F7CwI6WcbQzKDXI=yBzJ>vGcmkq>X1It!i(;4G#_gHN(dQ(fjHMHif?;n@M zhs$zy>)7U$+4bK`|MPa9mtAlF`Iq08SiP-#M5$LY>teBWncjW3?8>^RIuEu4$Chna zZnp*B&ArYNt}1zgrP(Ok#SVc>v3ropNTf-7YXtiSQc;nYA?=aaFKN^8d|70^zGmx~ zedN&1R_NS{*o5E+P$GHqlVnog%_ZXT(YMhvk$c-HJ)7h4X6e|K^Pd^)=oqAMpkpvM zP_L!dZdp6nA+0-*$Q^jwC_QtD1EX)FXJ)veVK{Tuf(E;v!S4)qw6BpHRC!2B@4m4E ztg0}4gdAEdUxjB6dd|G{?OtqkTLx_s!seC?&MvdHp^-sVus@E8E&O{|f<^l5W$>EsE(4Loey}tl=QLLW-OWa5b3Z zYs7|TLHO7Y-Fy=~lj0p&@N#em*96gk&T205ZP;_QeHybS)LC5;c%~f_CqT>fjWlnBkccCBTb`?!xBl2;JD+&MI^<#&943;!Fi)EKKR&kmG5n-&(Nt$m$t=+v zF}0_0+B}kC;fG(Z20hVld0v5#i8^D8YRi2_fKMnS= z9W;XXl?x*m@GFg#0ooI^p9F=ME?gMCaDnR%NJ8x({}#jNDmdlyR-Kk2m~`exYA4}V z;B?G}X?=y3ljs%7I-d3l(quUR;%6IE1^{9&{?;I7Y2Wy=*Ksj_LUfbwonXlV3PB>e zwPDJz#mi19G`GR(W#U~xFr_92&z>#+>@gV_fP-roPiE<%axv;*OxR23WkwZz0PvT= z7mv{-=}Jrm*jY9xpPhZT^vc8!eo+1i2#gl7^uNk^D5Ne)7U@@&MT=%>&z7E;U0EjB zqF^z_5}7*uh>4V`_1_7rOs(aZFgcIJ1vm?-3TO-5UxBY$7GTSvdnn{9aS+9UIJo(s zlB$IWCR9YoBFJ|>I5jr)(Ad%@ro?{%Mk-(GNVyD`xKx`;k!2>Zt;EDFt?j<|zzfmE_!wzr5Y1uD#6 z15K}_Gy6)_%g*! zF0U-}Vw$#VIP+I|a85CA%dYYWA3#>BUcYnaPU`~yvgEOD*k%1WCF!4a*LkDinp$sT zZEd{T>kCJfpiBPnu&8K_OCJ7}+27*`sj$giR~uUyLZ#~3>RMcg33WEs*3sIKEijGo zOkrfUjkDy&R?zlFlU-U4yxKUVOFK=e-M*hFvv%ll&&glFY6oDEF)s`<95QE%eLc%~ zG+f7FP9`a7mFrKYN38(yD%(zxKr76T`vaVH6FQjAOU~ zN_+O)?=iLu7@HUUCfNqui#otgu@4g8L&}k%tGUUna&B0ZeNf_tMfo&{6e=|Zm0O&h zK;xnVangx!-5>>|(|tPo2&ITSb2u-t-5X@y!y3v(^}%41 z*Vr6fhI6LDe5~2OVMB8?+T0j}Hh4}_!{nX_tI~$5Yx2c)!>gdv4fAQ8|IYdX4-Egb zZ}{VSarl7;tS<}?Zx|jfMLXO4wY7=(v2bm*;#T}M9m&?LqDYG3_4(@xl1p*bd29W3 z!PN7|YOAj;t{w}7n)uG=64`7bna=V+DBZd|9gfIdg$=6)HuS)wNOb#(Sc?Q}W1XPe zEY$J>q#%w*B1up#@SB1bP7K@A*PX^W4DKHm(nU2TwZFZkw5ob3tCtJ$s(nQ+U3x$NI|H*aJL&XX~c1@wPqq4F7d;`B>-bL;0EEnG1Vf zDLr%FeKX(xK8chnuET&Z8lwwK${nNjn{R6esX>3kHx_Eu*lh;coyrY=90R&J_I(QF~3-Uz8 zy&CdX!TXJe99(pZ75+61r#bS5$TFApKbBn^dEB}nuA$;GD%7?qf+GDXa_usHjcZxN zdYl{c7gh6gV}QmW;4#ORt!E8FQW6@9i$K9gS%BpN|AUHSZ-Y-57Nhfa$!zOSl%}Sn zi5p9==lOJ=PgzrvVf43^bWzUulqlYKW67X$zyt0DJn~E8%!NCEaNdARLgKhVPAV|< zlk(Ioy6Snd6D!zU9?(OlaCbhZxT2HX?*zp~* zvE%qL&gG$<`t1$1yKdRM`IcR^4Y%t%hh$gR$nJc8_ed9Diup(e=(d3@4+u*89HHVC zp*^j%eMb+6kkWYI_*P@<@j$q#DJ&)Mv~Cs`31NaTbL;WrTg|4hMfqVq9d5!Y0?rZu z3iAW*#GXcw$go_1Mj|cgGsI#+W?PTrAOgn?0#*sVq0bA)x5@^9*c~qdwe>i` zSYYtY0YiEXT;}Fa72K(AOYb7y0oH;AMh$O zKi2P6z^=1>@@ZW3qD_l~FhTv(+NEhU{7Saut-#OU} z-WaA6zD{|+8jY&6AMe!lPLV^oCfylHH!{)*Ovrkg^Z!rxQ6PAodD-W+?9I+~g^11ExdB(K*us9Is8sX%6*C1Y95z&Qce%rlHqP^8~ckgf%?{IyR=I>B`($ zP&H9A$o(Q{6UWQgb8t(CL(5^kl~H0-XK;2&@-!-ygOR_p#-Fd_2!EmeWs|hK=+E)Ir*PeO% z9V=Jf@%A&8)-Q%e8)FiWbzPIy4K3Op&Yyv68-v47 z$62TjYGxtQ-oQNKWEQAS|t{Ttc=CYI!NqX4r9C{)7nVdiIMJrM%3rSq7CZUGg zA$EWAv^5p-p|v$dJ@N_h!YA+|=_2x7sRBUJ7{xsxow+ea)ys?Ur@*xfFAfHe6!vKB z9jIqI`#tJ${9i=nxVY;S%jAKvD^h=$GnSp|;lBe4G?j9xgkI4GUE`iA4=9lb=G?5E&R5#C{8e4o|bj7d(z#H zlv+$x+^0IIVRb{S~b>hm`UMuHQe5A~%7~~>2 zbShg=vIRO2b?%$sva)lrgHQb@;Lw^fA!`L5;mv5^w#6msI4MRTUSnb(cW}*vNhplv zV&^!U`1{B5OR|X*hCa3qzI_}V<0iE@!z~XPr=y-IUH2{aWq5h`&WSV0I_$UbCuu2p z`qfZ2(9vB+2gNvD=7Hc38%G=CuF@Gg)}=#TC$1q;VHh|4Fc{!Ci7w-q;_i+>HuP$X zE8aNDrHUq^DK|wspkVR%SO4YXr~d-|#pC`X9mN0Tqt*>t6R~bO7HfZUHD(f`XLkFLkSQbZTDgTd)tUcX!)d?@9Au|)Zj|p_(UY#Q^eb86vzbPZ^2DT5k z*UzyJVMWE!1{^4KuF)5=Bl}FlWB(fk7iz@+l5j7|Nz&g`+-eklm)4a$12;?$PL4!O zjs@hVJ@Ci$;y@Da8FDl@v6FlG2EXvXCrKzfj$TB!p7<%daAVhxG2QP$;C; z=j!W2TBvlc;!WC*oO+aKsL@qASNX;Vm+*+T?v`8DA>h8&eAgA}Iaa>WB}y@hlGCr~ zm4CbPO$@~uh&538#(%Mt$E*nf7ND_2kZT3zmhXX_h~ot|dkYTv{Ib0i< z1Bfr?bu6+*=S7cwTbGlh4np)?rpQ>)vb4Eek+B#_k`i6HwdZh_4dWbhP~01#y$#zS z?U*>@v!1t}-_2XCpY7%;p4x5wOnLzi-nytj;9&|fbpm*BV~Z@(VYxI_-W6%TwYNv$ zt301J?922&D%$GHULfrIbmL7N$I;~zaw?I9D%MhZW;e@Zb{@+k?gA!WciyS&FAe3s zs9pO)d(u|t`?^}1+MtXZi2W7yDWAf{C3&X(PID=T`8g(*)TQMm0XZz+B0q?``>(skT}NE^y9eBV_C!4+p7(lwrv#KU zRf(#Bs`plXsOpaFIGQOqt~3Nd8(GdNqt@I!?jP<{>~Tojr$(; zJ?T&QPx=3$j@8{2V1d5CU4gF#UJfn~-W>c`@R|B}{Yd@0>i=8)tD%w5-Jx%Wei;sg zpNq6aZiw6!`Bdbm(fX(!y*v8l=r7f6>M8Yt`gE*6b|&^%>}L(V4dV^x8Xjo)V#7BZ zo@w}5!yn@D_?GyY_($TOZuB(X()h#1mzthv`gLauEu@Vhff_m@{Ys%CgD^+$d2GoP=~Q$ zPwt#Naq{5NBZ=-@9v=5e?BFL+d=wQDIKRoU{1sbWF>~AG{?m8tJprJT80cyI!C@~u zamAV=M~|FJ?4LX`d1CLW$=egRy(6({-_fz7M~~#7M-c2&fW9By91$bhi}y)(JMwPB WuoL+2#6Hv-L!i2FS!0%O`1!wV+k}Y# diff --git a/program/js/tinymce/skins/lightgray/img/anchor.gif b/program/js/tinymce/skins/lightgray/img/anchor.gif deleted file mode 100644 index 606348c7f53dba169a9aca7279a2a973f4b07bdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53 zcmZ?wbhEHbWM^P!XkcUjg8%>jEB<5wG8q|kKzxu40~1eAV&{y5e`l1KFoiKNSOWkz C+YCGa diff --git a/program/js/tinymce/skins/lightgray/img/loader.gif b/program/js/tinymce/skins/lightgray/img/loader.gif deleted file mode 100644 index c69e937232b24ea30f01c68bbd2ebc798dcecfcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u diff --git a/program/js/tinymce/skins/lightgray/img/object.gif b/program/js/tinymce/skins/lightgray/img/object.gif deleted file mode 100644 index cccd7f023fb80908cb33bb7d9604236cd21b7ae7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#858585}.mce-close:hover i{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#f0f0f0;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#ccc;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ecb}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333}.mce-notification .mce-progress .mce-bar-container{border-color:#ccc}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ecb}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary{min-width:50px;color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9e9e9e}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #ccc}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{background:#bbb}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-alignnone{-ie7-icon:"\e003"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-rotateleft{-ie7-icon:"\eaa8"}.mce-i-rotateright{-ie7-icon:"\eaa9"}.mce-i-crop{-ie7-icon:"\ee78"}.mce-i-editimage{-ie7-icon:"\e914"}.mce-i-options{-ie7-icon:"\ec6a"}.mce-i-flipv{-ie7-icon:"\eaaa"}.mce-i-fliph{-ie7-icon:"\eaac"}.mce-i-zoomin{-ie7-icon:"\eb35"}.mce-i-zoomout{-ie7-icon:"\eb36"}.mce-i-sun{-ie7-icon:"\eccc"}.mce-i-moon{-ie7-icon:"\eccd"}.mce-i-arrowleft{-ie7-icon:"\edc0"}.mce-i-arrowright{-ie7-icon:"\edb8"}.mce-i-drop{-ie7-icon:"\e934"}.mce-i-contrast{-ie7-icon:"\ecd4"}.mce-i-sharpen{-ie7-icon:"\eba7"}.mce-i-palette{-ie7-icon:"\e92a"}.mce-i-resize2{-ie7-icon:"\edf9"}.mce-i-orientation{-ie7-icon:"\e601"}.mce-i-invert{-ie7-icon:"\e602"}.mce-i-gamma{-ie7-icon:"\e600"}.mce-i-remove{-ie7-icon:"\ed6a"}.mce-i-codesample{-ie7-icon:"\e603"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#bbb} \ No newline at end of file diff --git a/program/js/tinymce/skins/lightgray/skin.min.css b/program/js/tinymce/skins/lightgray/skin.min.css deleted file mode 100644 index b9b5056039c..00000000000 --- a/program/js/tinymce/skins/lightgray/skin.min.css +++ /dev/null @@ -1 +0,0 @@ -.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#fff;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid rgba(0,0,0,0.2);width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#3498db}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#3498db}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#3498db;background:#3498db}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp{padding:2px 0}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#3498db}.mce-croprect-handle-move:focus{outline:1px solid #3498db}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:3px}.mce-arrow-down{margin-top:-3px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:rgba(0,0,0,0.2);border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:rgba(0,0,0,0.2);border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#f0f0f0;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#f0f0f0;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:20px}.mce-arrow.mce-arrow-left:after{left:21px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:20px}.mce-arrow.mce-arrow-right:after{right:21px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#aaa;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,0.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;top:0;left:0;background:#fff;border:1px solid rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#858585}.mce-close:hover i{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#f0f0f0;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#ccc;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ecb}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333}.mce-notification .mce-progress .mce-bar-container{border-color:#ccc}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ecb}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary{min-width:50px;color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9e9e9e}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #ccc}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{background:#bbb}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} \ No newline at end of file diff --git a/program/js/tinymce/themes/modern/theme.min.js b/program/js/tinymce/themes/modern/theme.min.js deleted file mode 100644 index 11e2f8747d3..00000000000 --- a/program/js/tinymce/themes/modern/theme.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.ThemeManager.add("modern",function(a){function b(b,c){var d,e=[];if(b)return o(b.split(/[ ,]/),function(b){function f(){function c(a){return function(c,d){for(var e,f=d.parents.length;f--&&(e=d.parents[f].nodeName,"OL"!=e&&"UL"!=e););b.active(c&&e==a)}}var d=a.selection;"bullist"==g&&d.selectorChanged("ul > li",c("UL")),"numlist"==g&&d.selectorChanged("ol > li",c("OL")),b.settings.stateSelector&&d.selectorChanged(b.settings.stateSelector,function(a){b.active(a)},!0),b.settings.disabledStateSelector&&d.selectorChanged(b.settings.disabledStateSelector,function(a){b.disabled(a)})}var g;"|"==b?d=null:n.has(b)?(b={type:b,size:c},e.push(b),d=null):(d||(d={type:"buttongroup",items:[]},e.push(d)),a.buttons[b]&&(g=b,b=a.buttons[g],"function"==typeof b&&(b=b()),b.type=b.type||"button",b.size=c,b=n.create(b),d.items.push(b),a.initialized?f():a.on("init",f)))}),{type:"toolbar",layout:"flow",items:e}}function c(a){function c(c){return c?(d.push(b(c,a)),!0):void 0}var d=[];if(tinymce.isArray(m.toolbar)){if(0===m.toolbar.length)return;tinymce.each(m.toolbar,function(a,b){m["toolbar"+(b+1)]=a}),delete m.toolbar}for(var e=1;10>e&&c(m["toolbar"+e]);e++);return d.length||m.toolbar===!1||c(m.toolbar||t),d.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:d}:void 0}function d(){function b(b){var c;return"|"==b?{text:"|"}:c=a.menuItems[b]}function c(c){var d,e,f,g,h;if(h=tinymce.makeMap((m.removed_menuitems||"").split(/[ ,]/)),m.menu?(e=m.menu[c],g=!0):e=s[c],e){d={text:e.title},f=[],o((e.items||"").split(/[ ,]/),function(a){var c=b(a);c&&!h[a]&&f.push(b(a))}),g||o(a.menuItems,function(a){a.context==c&&("before"==a.separator&&f.push({text:"|"}),a.prependToContext?f.unshift(a):f.push(a),"after"==a.separator&&f.push({text:"|"}))});for(var i=0;i40)&&a===b})}}function k(){function b(){a.selection&&j(s(a.selection.getNode()))}tinymce.util.Delay.requestAnimationFrame(b)}function l(){t||(t=a.selection.getScrollContainer()||a.getWin(),tinymce.$(t).on("scroll",k),a.on("remove",function(){tinymce.$(t).off("scroll")}))}function p(c){var d;return c.toolbar.panel?(c.toolbar.panel.show(),void j(c)):(l(),d=n.create({type:"floatpanel",role:"dialog",classes:"tinymce tinymce-inline arrow",ariaLabel:"Inline toolbar",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:b(c.toolbar.items),oncancel:function(){a.focus()}}),c.toolbar.panel=d,d.renderTo(document.body).reflow(),void j(c))}function r(){tinymce.each(c(),function(a){a.panel&&a.panel.hide()})}function s(b){var d,e,f,g=c();for(f=a.$(b).parents().add(b),d=f.length-1;d>=0;d--)for(e=g.length-1;e>=0;e--)if(g[e].predicate(f[d]))return{toolbar:g[e],element:f[d]};return null}var t;a.on("click keyup setContent",function(b){("setcontent"!=b.type||b.selection)&&tinymce.util.Delay.setEditorTimeout(a,function(){var b;b=s(a.selection.getNode()),b?(r(),p(b)):r()})}),a.on("blur hide",r),a.on("ObjectResizeStart",function(){var b=s(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.hide()}),a.on("nodeChange ResizeEditor ResizeWindow",k),a.on("remove",function(){tinymce.each(c(),function(a){a.panel&&a.panel.remove()}),a.contextToolbars={}}),a.shortcuts.add("ctrl+shift+e > ctrl+shift+p","",function(){var b=s(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.items()[0].focus()})}function i(a){return function(){a.initialized?a.fire("SkinLoaded"):a.on("init",function(){a.fire("SkinLoaded")})}}function j(b){function f(){if(o&&o.moveRel&&o.visible()&&!o._fixed){var b=a.selection.getScrollContainer(),c=a.getBody(),d=0,e=0;if(b){var f=p.getPos(c),g=p.getPos(b);d=Math.max(0,g.x-f.x),e=Math.max(0,g.y-f.y)}o.fixed(!1).moveRel(c,a.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(d,e)}}function g(){o&&(o.show(),f(),p.addClass(a.getBody(),"mce-edit-focus"))}function j(){o&&(o.hide(),r.hideAll(),p.removeClass(a.getBody(),"mce-edit-focus"))}function k(){return o?void(o.visible()||g()):(o=l.panel=n.create({type:q?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!q,border:1,items:[m.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:d()},c(m.toolbar_items_size)]}),a.fire("BeforeRenderUI"),o.renderTo(q||document.body).reflow(),e(o),g(),h(),a.on("nodeChange",f),a.on("activate",g),a.on("deactivate",j),void a.nodeChanged())}var o,q;return m.fixed_toolbar_container&&(q=p.select(m.fixed_toolbar_container)[0]),m.content_editable=!0,a.on("focus",function(){b.skinUiCss?tinymce.DOM.styleSheetLoader.load(b.skinUiCss,k,k):k()}),a.on("blur hide",j),a.on("remove",function(){o&&(o.remove(),o=null)}),b.skinUiCss&&tinymce.DOM.styleSheetLoader.load(b.skinUiCss,i(a)),{}}function k(b){function g(){return function(a){"readonly"==a.mode?j.find("*").disabled(!0):j.find("*").disabled(!1)}}var j,k,o;return b.skinUiCss&&tinymce.DOM.styleSheetLoader.load(b.skinUiCss,i(a)),j=l.panel=n.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[m.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:d()},c(m.toolbar_items_size),{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",html:"",border:"1 0 0 0"}]}),m.resize!==!1&&(k={type:"resizehandle",direction:m.resize,onResizeStart:function(){var b=a.getContentAreaContainer().firstChild;o={width:b.clientWidth,height:b.clientHeight}},onResize:function(a){"both"==m.resize?f(o.width+a.deltaX,o.height+a.deltaY):f(null,o.height+a.deltaY)}}),m.statusbar!==!1&&j.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath"},k]}),a.fire("BeforeRenderUI"),a.on("SwitchMode",g()),j.renderBefore(b.targetNode).reflow(),m.readonly&&a.setMode("readonly"),m.width&&tinymce.DOM.setStyle(j.getEl(),"width",m.width),a.on("remove",function(){j.remove(),j=null}),e(j),h(),{iframeContainer:j.find("#iframe")[0].getEl(),editorContainer:j.getEl()}}var l=this,m=a.settings,n=tinymce.ui.Factory,o=tinymce.each,p=tinymce.DOM,q=tinymce.geom.Rect,r=tinymce.ui.FloatPanel,s={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},t="undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image";l.renderUI=function(b){var c=m.skin!==!1?m.skin||"lightgray":!1;if(c){var d=m.skin_url;d=d?a.documentBaseURI.toAbsolute(d):tinymce.baseURL+"/skins/"+c,tinymce.Env.documentMode<=7?b.skinUiCss=d+"/skin.ie7.min.css":b.skinUiCss=d+"/skin.min.css",a.contentCSS.push(d+"/content"+(a.inline?".inline":"")+".min.css")}return a.on("ProgressState",function(a){l.throbber=l.throbber||new tinymce.ui.Throbber(l.panel.getEl("body")),a.state?l.throbber.show(a.time):l.throbber.hide()}),m.inline?j(b):k(b)},l.resizeTo=f,l.resizeBy=g}); \ No newline at end of file diff --git a/program/js/tinymce/tinymce.min.js b/program/js/tinymce/tinymce.min.js deleted file mode 100644 index 11b34207c37..00000000000 --- a/program/js/tinymce/tinymce.min.js +++ /dev/null @@ -1,13 +0,0 @@ -// 4.3.13 (2016-06-08) -!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i=r.x&&o.x+o.w<=r.w+r.x&&o.y>=r.y&&o.y+o.h<=r.h+r.y)return i[a];return null}function n(e,t,n){return o(e.x-t,e.y-n,e.w+2*t,e.h+2*n)}function r(e,t){var n,r,i,a;return n=l(e.x,t.x),r=l(e.y,t.y),i=s(e.x+e.w,t.x+t.w),a=s(e.y+e.h,t.y+t.h),0>i-n||0>a-r?null:o(n,r,i-n,a-r)}function i(e,t,n){var r,i,a,s,c,u,d,f,h,p;return c=e.x,u=e.y,d=e.x+e.w,f=e.y+e.h,h=t.x+t.w,p=t.y+t.h,r=l(0,t.x-c),i=l(0,t.y-u),a=l(0,d-h),s=l(0,f-p),c+=r,u+=i,n&&(d+=r,f+=i,c-=a,u-=s),d-=a,f-=s,o(c,u,d-c,f-u)}function o(e,t,n,r){return{x:e,y:t,w:n,h:r}}function a(e){return o(e.left,e.top,e.width,e.height)}var s=Math.min,l=Math.max,c=Math.round;return{inflate:n,relativePosition:e,findBestRelativePosition:t,intersect:r,clamp:i,create:o,fromClientRect:a}}),r(c,[],function(){function e(e,t){return function(){e.apply(t,arguments)}}function t(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],s(t,e(r,this),e(i,this))}function n(e){var t=this;return null===this._state?void this._deferreds.push(e):void l(function(){var n=t._state?e.onFulfilled:e.onRejected;if(null===n)return void(t._state?e.resolve:e.reject)(t._value);var r;try{r=n(t._value)}catch(i){return void e.reject(i)}e.resolve(r)})}function r(t){try{if(t===this)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if("function"==typeof n)return void s(e(n,t),e(r,this),e(i,this))}this._state=!0,this._value=t,o.call(this)}catch(a){i.call(this,a)}}function i(e){this._state=!1,this._value=e,o.call(this)}function o(){for(var e=0,t=this._deferreds.length;t>e;e++)n.call(this,this._deferreds[e]);this._deferreds=null}function a(e,t,n,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r}function s(e,t,n){var r=!1;try{e(function(e){r||(r=!0,t(e))},function(e){r||(r=!0,n(e))})}catch(i){if(r)return;r=!0,n(i)}}if(window.Promise)return window.Promise;var l=t.immediateFn||"function"==typeof setImmediate&&setImmediate||function(e){setTimeout(e,1)},c=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return t.prototype["catch"]=function(e){return this.then(null,e)},t.prototype.then=function(e,r){var i=this;return new t(function(t,o){n.call(i,new a(e,r,t,o))})},t.all=function(){var e=Array.prototype.slice.call(1===arguments.length&&c(arguments[0])?arguments[0]:arguments);return new t(function(t,n){function r(o,a){try{if(a&&("object"==typeof a||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(e){r(o,e)},n)}e[o]=a,0===--i&&t(e)}catch(l){n(l)}}if(0===e.length)return t([]);for(var i=e.length,o=0;or;r++)e[r].then(t,n)})},t}),r(u,[c],function(e){function t(e,t){function n(e){window.setTimeout(e,0)}var r,i=window.requestAnimationFrame,o=["ms","moz","webkit"];for(r=0;r=534;return{opera:r,webkit:i,ie:o,gecko:l,mac:c,iOS:u,android:d,contentEditable:g,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=o,range:window.getSelection&&"Range"in window,documentMode:o&&!s?document.documentMode||7:10,fileApi:f,ceFalse:o===!1||o>8,desktop:!h&&!p,windowsPhone:m}}),r(f,[u,d],function(e,t){function n(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)}function r(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)}function i(e,t){var n,r=t;return n=e.path,n&&n.length>0&&(r=n[0]),e.deepPath&&(n=e.deepPath(),n&&n.length>0&&(r=n[0])),r}function o(e,n){function r(){return!1}function o(){return!0}var a,s=n||{},l;for(a in e)u[a]||(s[a]=e[a]);if(s.target||(s.target=s.srcElement||document),t.experimentalShadowDom&&(s.target=i(e,s.target)),e&&c.test(e.type)&&e.pageX===l&&e.clientX!==l){var d=s.target.ownerDocument||document,f=d.documentElement,h=d.body;s.pageX=e.clientX+(f&&f.scrollLeft||h&&h.scrollLeft||0)-(f&&f.clientLeft||h&&h.clientLeft||0),s.pageY=e.clientY+(f&&f.scrollTop||h&&h.scrollTop||0)-(f&&f.clientTop||h&&h.clientTop||0)}return s.preventDefault=function(){s.isDefaultPrevented=o,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},s.stopPropagation=function(){s.isPropagationStopped=o,e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)},s.stopImmediatePropagation=function(){s.isImmediatePropagationStopped=o,s.stopPropagation()},s.isDefaultPrevented||(s.isDefaultPrevented=r,s.isPropagationStopped=r,s.isImmediatePropagationStopped=r),"undefined"==typeof s.metaKey&&(s.metaKey=!1),s}function a(t,i,o){function a(){o.domLoaded||(o.domLoaded=!0,i(u))}function s(){("complete"===c.readyState||"interactive"===c.readyState&&c.body)&&(r(c,"readystatechange",s),a())}function l(){try{c.documentElement.doScroll("left")}catch(t){return void e.setTimeout(l)}a()}var c=t.document,u={type:"ready"};return o.domLoaded?void i(u):(c.addEventListener?"complete"===c.readyState?a():n(t,"DOMContentLoaded",a):(n(c,"readystatechange",s),c.documentElement.doScroll&&t.self===t.top&&l()),void n(t,"load",a))}function s(){function e(e,t){var n,r,o,a,s=i[t];if(n=s&&s[e.type])for(r=0,o=n.length;o>r;r++)if(a=n[r],a&&a.func.call(a.scope,e)===!1&&e.preventDefault(),e.isImmediatePropagationStopped())return}var t=this,i={},s,c,u,d,f;c=l+(+new Date).toString(32),d="onmouseenter"in document.documentElement,u="onfocusin"in document.documentElement,f={mouseenter:"mouseover",mouseleave:"mouseout"},s=1,t.domLoaded=!1,t.events=i,t.bind=function(r,l,h,p){function m(t){e(o(t||N.event),g)}var g,v,y,b,C,x,w,N=window;if(r&&3!==r.nodeType&&8!==r.nodeType){for(r[c]?g=r[c]:(g=s++,r[c]=g,i[g]={}),p=p||r,l=l.split(" "),y=l.length;y--;)b=l[y],x=m,C=w=!1,"DOMContentLoaded"===b&&(b="ready"),t.domLoaded&&"ready"===b&&"complete"==r.readyState?h.call(p,o({type:b})):(d||(C=f[b],C&&(x=function(t){var n,r;if(n=t.currentTarget,r=t.relatedTarget,r&&n.contains)r=n.contains(r);else for(;r&&r!==n;)r=r.parentNode;r||(t=o(t||N.event),t.type="mouseout"===t.type?"mouseleave":"mouseenter",t.target=n,e(t,g))})),u||"focusin"!==b&&"focusout"!==b||(w=!0,C="focusin"===b?"focus":"blur",x=function(t){t=o(t||N.event),t.type="focus"===t.type?"focusin":"focusout",e(t,g)}),v=i[g][b],v?"ready"===b&&t.domLoaded?h({type:b}):v.push({func:h,scope:p}):(i[g][b]=v=[{func:h,scope:p}],v.fakeName=C,v.capture=w,v.nativeHandler=x,"ready"===b?a(r,x,t):n(r,C||b,x,w)));return r=v=0,h}},t.unbind=function(e,n,o){var a,s,l,u,d,f;if(!e||3===e.nodeType||8===e.nodeType)return t;if(a=e[c]){if(f=i[a],n){for(n=n.split(" "),l=n.length;l--;)if(d=n[l],s=f[d]){if(o)for(u=s.length;u--;)if(s[u].func===o){var h=s.nativeHandler,p=s.fakeName,m=s.capture;s=s.slice(0,u).concat(s.slice(u+1)),s.nativeHandler=h,s.fakeName=p,s.capture=m,f[d]=s}o&&0!==s.length||(delete f[d],r(e,s.fakeName||d,s.nativeHandler,s.capture))}}else{for(d in f)s=f[d],r(e,s.fakeName||d,s.nativeHandler,s.capture);f={}}for(d in f)return t;delete i[a];try{delete e[c]}catch(g){e[c]=null}}return t},t.fire=function(n,r,i){var a;if(!n||3===n.nodeType||8===n.nodeType)return t;i=o(null,i),i.type=r,i.target=n;do a=n[c],a&&e(i,a),n=n.parentNode||n.ownerDocument||n.defaultView||n.parentWindow;while(n&&!i.isPropagationStopped());return t},t.clean=function(e){var n,r,i=t.unbind;if(!e||3===e.nodeType||8===e.nodeType)return t;if(e[c]&&i(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(i(e),r=e.getElementsByTagName("*"),n=r.length;n--;)e=r[n],e[c]&&i(e);return t},t.destroy=function(){i={}},t.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}}var l="mce-data-",c=/^(?:mouse|contextmenu)|click/,u={keyLocation:1,layerX:1,layerY:1,returnValue:1,webkitMovementX:1,webkitMovementY:1,keyIdentifier:1};return s.Event=new s,s.Event.bind(window,"ready",function(){}),s}),r(h,[],function(){function e(e,t,n,r){var i,o,a,s,l,c,d,h,p,m;if((t?t.ownerDocument||t:z)!==D&&B(t),t=t||D,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(M&&!r){if(i=ve.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&I(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=i[3])&&x.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(x.qsa&&(!P||!P.test(e))){if(h=d=F,p=t,m=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=_(e),(d=t.getAttribute("id"))?h=d.replace(be,"\\$&"):t.setAttribute("id",h),h="[id='"+h+"'] ",l=c.length;l--;)c[l]=h+f(c[l]);p=ye.test(e)&&u(t.parentNode)||t,m=c.join(",")}if(m)try{return Z.apply(n,p.querySelectorAll(m)),n}catch(g){}finally{d||t.removeAttribute("id")}}}return k(e.replace(se,"$1"),t,n,r)}function n(){function e(n,r){return t.push(n+" ")>w.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[F]=!0,e}function i(e){var t=D.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=e.length;r--;)w.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||X)-(~e.sourceIndex||X);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function u(e){return e&&typeof e.getElementsByTagName!==Y&&e}function d(){}function f(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function h(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=W++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,l,c=[U,o];if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i){if(l=t[F]||(t[F]={}),(s=l[r])&&s[0]===U&&s[1]===o)return c[2]=s[2];if(l[r]=c,c[2]=e(t,n,a))return!0}}}function p(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(t,n,r){for(var i=0,o=n.length;o>i;i++)e(t,n[i],r);return r}function g(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),c&&t.push(s)));return a}function v(e,t,n,i,o,a){return i&&!i[F]&&(i=v(i)),o&&!o[F]&&(o=v(o,a)),r(function(r,a,s,l){var c,u,d,f=[],h=[],p=a.length,v=r||m(t||"*",s.nodeType?[s]:s,[]),y=!e||!r&&t?v:g(v,f,e,s,l),b=n?o||(r?e:p||i)?[]:a:y;if(n&&n(y,b,s,l),i)for(c=g(b,h),i(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[h[u]]=!(y[h[u]]=d));if(r){if(o||e){if(o){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);o(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=o?te.call(r,d):f[u])>-1&&(r[c]=!(a[c]=d))}}else b=g(b===a?b.splice(p,b.length):b),o?o(null,a,b,l):Z.apply(a,b)})}function y(e){for(var t,n,r,i=e.length,o=w.relative[e[0].type],a=o||w.relative[" "],s=o?1:0,l=h(function(e){return e===t},a,!0),c=h(function(e){return te.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==T)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];i>s;s++)if(n=w.relative[e[s].type])u=[h(p(u),n)];else{if(n=w.filter[e[s].type].apply(null,e[s].matches),n[F]){for(r=++s;i>r&&!w.relative[e[r].type];r++);return v(s>1&&p(u),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,r>s&&y(e.slice(s,r)),i>r&&y(e=e.slice(r)),i>r&&f(e))}u.push(n)}return p(u)}function b(t,n){var i=n.length>0,o=t.length>0,a=function(r,a,s,l,c){var u,d,f,h=0,p="0",m=r&&[],v=[],y=T,b=r||o&&w.find.TAG("*",c),C=U+=null==y?1:Math.random()||.1,x=b.length;for(c&&(T=a!==D&&a);p!==x&&null!=(u=b[p]);p++){if(o&&u){for(d=0;f=t[d++];)if(f(u,a,s)){l.push(u);break}c&&(U=C)}i&&((u=!f&&u)&&h--,r&&m.push(u))}if(h+=p,i&&p!==h){for(d=0;f=n[d++];)f(m,v,a,s);if(r){if(h>0)for(;p--;)m[p]||v[p]||(v[p]=J.call(l));v=g(v)}Z.apply(l,v),c&&!r&&v.length>0&&h+n.length>1&&e.uniqueSort(l)}return c&&(U=C,T=y),m};return i?r(a):a}var C,x,w,N,E,_,S,k,T,R,A,B,D,L,M,P,H,O,I,F="sizzle"+-new Date,z=window.document,U=0,W=0,V=n(),$=n(),q=n(),j=function(e,t){return e===t&&(A=!0),0},Y=typeof t,X=1<<31,K={}.hasOwnProperty,G=[],J=G.pop,Q=G.push,Z=G.push,ee=G.slice,te=G.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},ne="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",re="[\\x20\\t\\r\\n\\f]",ie="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",oe="\\["+re+"*("+ie+")(?:"+re+"*([*^$|!~]?=)"+re+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ie+"))|)"+re+"*\\]",ae=":("+ie+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+oe+")*)|.*)\\)|)",se=new RegExp("^"+re+"+|((?:^|[^\\\\])(?:\\\\.)*)"+re+"+$","g"),le=new RegExp("^"+re+"*,"+re+"*"),ce=new RegExp("^"+re+"*([>+~]|"+re+")"+re+"*"),ue=new RegExp("="+re+"*([^\\]'\"]*?)"+re+"*\\]","g"),de=new RegExp(ae),fe=new RegExp("^"+ie+"$"),he={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+"|[*])"),ATTR:new RegExp("^"+oe),PSEUDO:new RegExp("^"+ae),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},pe=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=/'|\\/g,Ce=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),xe=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{Z.apply(G=ee.call(z.childNodes),z.childNodes),G[z.childNodes.length].nodeType}catch(we){Z={apply:G.length?function(e,t){Q.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}x=e.support={},E=e.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},B=e.setDocument=function(e){function t(e){try{return e.top}catch(t){}return null}var n,r=e?e.ownerDocument||e:z,o=r.defaultView;return r!==D&&9===r.nodeType&&r.documentElement?(D=r,L=r.documentElement,M=!E(r),o&&o!==t(o)&&(o.addEventListener?o.addEventListener("unload",function(){B()},!1):o.attachEvent&&o.attachEvent("onunload",function(){B()})),x.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),x.getElementsByTagName=i(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),x.getElementsByClassName=ge.test(r.getElementsByClassName),x.getById=i(function(e){return L.appendChild(e).id=F,!r.getElementsByName||!r.getElementsByName(F).length}),x.getById?(w.find.ID=function(e,t){if(typeof t.getElementById!==Y&&M){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},w.filter.ID=function(e){var t=e.replace(Ce,xe);return function(e){return e.getAttribute("id")===t}}):(delete w.find.ID,w.filter.ID=function(e){var t=e.replace(Ce,xe);return function(e){var n=typeof e.getAttributeNode!==Y&&e.getAttributeNode("id");return n&&n.value===t}}),w.find.TAG=x.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==Y?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},w.find.CLASS=x.getElementsByClassName&&function(e,t){return M?t.getElementsByClassName(e):void 0},H=[],P=[],(x.qsa=ge.test(r.querySelectorAll))&&(i(function(e){e.innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll(":checked").length||P.push(":checked")}),i(function(e){var t=r.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+re+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(x.matchesSelector=ge.test(O=L.matches||L.webkitMatchesSelector||L.mozMatchesSelector||L.oMatchesSelector||L.msMatchesSelector))&&i(function(e){x.disconnectedMatch=O.call(e,"div"),O.call(e,"[s!='']:x"),H.push("!=",ae)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),n=ge.test(L.compareDocumentPosition),I=n||ge.test(L.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},j=n?function(e,t){if(e===t)return A=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!x.sortDetached&&t.compareDocumentPosition(e)===n?e===r||e.ownerDocument===z&&I(z,e)?-1:t===r||t.ownerDocument===z&&I(z,t)?1:R?te.call(R,e)-te.call(R,t):0:4&n?-1:1)}:function(e,t){if(e===t)return A=!0,0;var n,i=0,o=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!o||!s)return e===r?-1:t===r?1:o?-1:s?1:R?te.call(R,e)-te.call(R,t):0;if(o===s)return a(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[i]===c[i];)i++;return i?a(l[i],c[i]):l[i]===z?-1:c[i]===z?1:0},r):D},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==D&&B(t),n=n.replace(ue,"='$1']"),x.matchesSelector&&M&&(!H||!H.test(n))&&(!P||!P.test(n)))try{var r=O.call(t,n);if(r||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(i){}return e(n,D,null,[t]).length>0},e.contains=function(e,t){return(e.ownerDocument||e)!==D&&B(e),I(e,t)},e.attr=function(e,n){(e.ownerDocument||e)!==D&&B(e);var r=w.attrHandle[n.toLowerCase()],i=r&&K.call(w.attrHandle,n.toLowerCase())?r(e,n,!M):t;return i!==t?i:x.attributes||!M?e.getAttribute(n):(i=e.getAttributeNode(n))&&i.specified?i.value:null},e.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},e.uniqueSort=function(e){var t,n=[],r=0,i=0;if(A=!x.detectDuplicates,R=!x.sortStable&&e.slice(0),e.sort(j),A){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return R=null,e},N=e.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=N(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=N(t);return n},w=e.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Ce,xe),e[3]=(e[3]||e[4]||e[5]||"").replace(Ce,xe),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=_(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Ce,xe).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=V[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&V(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==Y&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(i){var o=e.attr(i,t);return null==o?"!="===n:n?(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o+" ").indexOf(r)>-1:"|="===n?o===r||o.slice(0,r.length+1)===r+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,h,p,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?g.firstChild:g.lastChild],a&&y){for(u=g[F]||(g[F]={}),c=u[e]||[],h=c[0]===U&&c[1],f=c[0]===U&&c[2],d=h&&g.childNodes[h];d=++h&&d&&d[m]||(f=h=0)||p.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[U,h,f];break}}else if(y&&(c=(t[F]||(t[F]={}))[e])&&c[0]===U)f=c[1];else for(;(d=++h&&d&&d[m]||(f=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[F]||(d[F]={}))[e]=[U,f]),d!==t)););return f-=i,f===r||f%r===0&&f/r>=0}}},PSEUDO:function(t,n){var i,o=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return o[F]?o(n):o.length>1?(i=[t,t,"",n],w.setFilters.hasOwnProperty(t.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=te.call(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(se,"$1"));return i[F]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),!n.pop()}}),has:r(function(t){return function(n){return e(t,n).length>0}}),contains:r(function(e){return e=e.replace(Ce,xe),function(t){return(t.textContent||t.innerText||N(t)).indexOf(e)>-1}}),lang:r(function(t){return fe.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(Ce,xe).toLowerCase(),function(e){var n;do if(n=M?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===L},focus:function(e){return e===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return pe.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;++r2&&"ID"===(a=o[0]).type&&x.getById&&9===t.nodeType&&M&&w.relative[o[1].type]){if(t=(w.find.ID(a.matches[0].replace(Ce,xe),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length); -}for(i=he.needsContext.test(e)?0:o.length;i--&&(a=o[i],!w.relative[s=a.type]);)if((l=w.find[s])&&(r=l(a.matches[0].replace(Ce,xe),ye.test(o[0].type)&&u(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&f(o),!e)return Z.apply(n,r),n;break}}return(c||S(e,d))(r,t,!M,n,ye.test(e)&&u(t.parentNode)||t),n},x.sortStable=F.split("").sort(j).join("")===F,x.detectDuplicates=!!A,B(),x.sortDetached=i(function(e){return 1&e.compareDocumentPosition(D.createElement("div"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),x.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(ne,function(e,t,n){var r;return n?void 0:e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),e}),r(p,[],function(){function e(e){var t=e,n,r;if(!u(e))for(t=[],n=0,r=e.length;r>n;n++)t[n]=e[n];return t}function n(e,n,r){var i,o;if(!e)return 0;if(r=r||e,e.length!==t){for(i=0,o=e.length;o>i;i++)if(n.call(r,e[i],i,e)===!1)return 0}else for(i in e)if(e.hasOwnProperty(i)&&n.call(r,e[i],i,e)===!1)return 0;return 1}function r(e,t){var r=[];return n(e,function(n,i){r.push(t(n,i,e))}),r}function i(e,t){var r=[];return n(e,function(n,i){t&&!t(n,i,e)||r.push(n)}),r}function o(e,t){var n,r;if(e)for(n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1}function a(e,t,n,r){var i=0;for(arguments.length<3&&(n=e[0]);ir;r++)if(t.call(n,e[r],r,e))return r;return-1}function l(e,n,r){var i=s(e,n,r);return-1!==i?e[i]:t}function c(e){return e[e.length-1]}var u=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return{isArray:u,toArray:e,each:n,map:r,filter:i,indexOf:o,reduce:a,findIndex:s,find:l,last:c}}),r(m,[d,p],function(e,n){function r(e){return null===e||e===t?"":(""+e).replace(h,"")}function i(e,r){return r?"array"==r&&n.isArray(e)?!0:typeof e==r:e!==t}function o(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n}function a(e,t,n){var r=this,i,o,a,s,l,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),a=e[3].match(/(^|\.)(\w+)$/i)[2],o=r.createNS(e[3].replace(/\.\w+$/,""),n),!o[a]){if("static"==e[2])return o[a]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[a]));t[a]||(t[a]=function(){},c=1),o[a]=t[a],r.extend(o[a].prototype,t),e[5]&&(i=r.resolve(e[5]).prototype,s=e[5].match(/\.(\w+)$/i)[1],l=o[a],c?o[a]=function(){return i[s].apply(this,arguments)}:o[a]=function(){return this.parent=i[s],l.apply(this,arguments)},o[a].prototype[a]=o[a],r.each(i,function(e,t){o[a].prototype[t]=i[t]}),r.each(t,function(e,t){i[t]?o[a].prototype[t]=function(){return this.parent=i[t],e.apply(this,arguments)}:t!=a&&(o[a].prototype[t]=e)})),r.each(t["static"],function(e,t){o[a][t]=e})}}function s(e,n){var r,i,o,a=arguments,s;for(r=1,i=a.length;i>r;r++){n=a[r];for(o in n)n.hasOwnProperty(o)&&(s=n[o],s!==t&&(e[o]=s))}return e}function l(e,t,r,i){i=i||this,e&&(r&&(e=e[r]),n.each(e,function(e,n){return t.call(i,e,n,r)===!1?!1:void l(e,t,r,i)}))}function c(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;nn&&(t=t[e[n]],t);n++);return t}function d(e,t){return!e||i(e,"array")?e:n.map(e.split(t||","),r)}function f(t){var n=e.cacheSuffix;return n&&(t+=(-1===t.indexOf("?")?"?":"&")+n),t}var h=/^\s*|\s*$/g;return{trim:r,isArray:n.isArray,is:i,toArray:n.toArray,makeMap:o,each:n.each,map:n.map,grep:n.filter,inArray:n.indexOf,extend:s,create:a,walk:l,createNS:c,resolve:u,explode:d,_addCacheSuffix:f}}),r(g,[f,h,m,d],function(e,n,r,i){function o(e){return"undefined"!=typeof e}function a(e){return"string"==typeof e}function s(e){return e&&e==e.window}function l(e,t){var n,r,i;for(t=t||w,i=t.createElement("div"),n=t.createDocumentFragment(),i.innerHTML=e;r=i.firstChild;)n.appendChild(r);return n}function c(e,t,n,r){var i;if(a(t))t=l(t,v(e[0]));else if(t.length&&!t.nodeType){if(t=f.makeArray(t),r)for(i=t.length-1;i>=0;i--)c(e,t[i],n,r);else for(i=0;ii&&(a=e[i],t.call(a,i,a)!==!1);i++);return e}function g(e,t){var n=[];return m(e,function(e,r){t(r,e)&&n.push(r)}),n}function v(e){return e?9==e.nodeType?e:e.ownerDocument:w}function y(e,n,r){var i=[],o=e[n];for("string"!=typeof r&&r instanceof f&&(r=r[0]);o&&9!==o.nodeType;){if(r!==t){if(o===r)break;if("string"==typeof r&&f(o).is(r))break}1===o.nodeType&&i.push(o),o=o[n]}return i}function b(e,n,r,i){var o=[];for(i instanceof f&&(i=i[0]);e;e=e[n])if(!r||e.nodeType===r){if(i!==t){if(e===i)break;if("string"==typeof i&&f(e).is(i))break}o.push(e)}return o}function C(e,t,n){for(e=e[t];e;e=e[t])if(e.nodeType==n)return e;return null}function x(e,t,n){m(n,function(n,r){e[n]=e[n]||{},e[n][t]=r})}var w=document,N=Array.prototype.push,E=Array.prototype.slice,_=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,S=e.Event,k,T=r.makeMap("children,contents,next,prev"),R=r.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),A=r.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),B={"for":"htmlFor","class":"className",readonly:"readOnly"},D={"float":"cssFloat"},L={},M={},P=/^\s*|\s*$/g;return f.fn=f.prototype={constructor:f,selector:"",context:null,length:0,init:function(e,t){var n=this,r,i;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(t&&t.nodeType)n.context=t;else{if(t)return f(e).attr(t);n.context=t=document}if(a(e)){if(n.selector=e,r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:_.exec(e),!r)return f(t).find(e);if(r[1])for(i=l(e,v(t)).firstChild;i;)N.call(n,i),i=i.nextSibling;else{if(i=v(t).getElementById(r[2]),!i)return n;if(i.id!==r[2])return n.find(e);n.length=1,n[0]=i}}else this.add(e,!1);return n},toArray:function(){return r.toArray(this)},add:function(e,t){var n=this,r,i;if(a(e))return n.add(f(e));if(t!==!1)for(r=f.unique(n.toArray().concat(f.makeArray(e))),n.length=r.length,i=0;it;t++)f.find(e,this[t],r);return f(r)},filter:function(e){return f("function"==typeof e?g(this.toArray(),function(t,n){return e(n,t)}):f.filter(e,this.toArray()))},closest:function(e){var t=[];return e instanceof f&&(e=e[0]),this.each(function(n,r){for(;r;){if("string"==typeof e&&f(r).is(e)){t.push(r);break}if(r==e){t.push(r);break}r=r.parentNode}}),f(t)},offset:function(e){var t,n,r,i=0,o=0,a;return e?this.css(e):(t=this[0],t&&(n=t.ownerDocument,r=n.documentElement,t.getBoundingClientRect&&(a=t.getBoundingClientRect(),i=a.left+(r.scrollLeft||n.body.scrollLeft)-r.clientLeft,o=a.top+(r.scrollTop||n.body.scrollTop)-r.clientTop)),{left:i,top:o})},push:N,sort:[].sort,splice:[].splice},r.extend(f,{extend:r.extend,makeArray:function(e){return s(e)||e.nodeType?[e]:r.toArray(e)},inArray:h,isArray:r.isArray,each:m,trim:p,grep:g,find:n,expr:n.selectors,unique:n.uniqueSort,text:n.getText,contains:n.contains,filter:function(e,t,n){var r=t.length;for(n&&(e=":not("+e+")");r--;)1!=t[r].nodeType&&t.splice(r,1);return t=1===t.length?f.find.matchesSelector(t[0],e)?[t[0]]:[]:f.find.matches(e,t)}}),m({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return y(e,"parentNode")},next:function(e){return C(e,"nextSibling",1)},prev:function(e){return C(e,"previousSibling",1)},children:function(e){return b(e.firstChild,"nextSibling",1)},contents:function(e){return r.toArray(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,t){f.fn[e]=function(n){var r=this,i=[];return r.each(function(){var e=t.call(i,this,n,i);e&&(f.isArray(e)?i.push.apply(i,e):i.push(e))}),this.length>1&&(T[e]||(i=f.unique(i)),0===e.indexOf("parents")&&(i=i.reverse())),i=f(i),n?i.filter(n):i}}),m({parentsUntil:function(e,t){return y(e,"parentNode",t)},nextUntil:function(e,t){return b(e,"nextSibling",1,t).slice(1)},prevUntil:function(e,t){return b(e,"previousSibling",1,t).slice(1)}},function(e,t){f.fn[e]=function(n,r){var i=this,o=[];return i.each(function(){var e=t.call(o,this,n,o);e&&(f.isArray(e)?o.push.apply(o,e):o.push(e))}),this.length>1&&(o=f.unique(o),0!==e.indexOf("parents")&&"prevUntil"!==e||(o=o.reverse())),o=f(o),r?o.filter(r):o}}),f.fn.is=function(e){return!!e&&this.filter(e).length>0},f.fn.init.prototype=f.fn,f.overrideDefaults=function(e){function t(r,i){return n=n||e(),0===arguments.length&&(r=n.element),i||(i=n.context),new t.fn.init(r,i)}var n;return f.extend(t,this),t},i.ie&&i.ie<8&&(x(L,"get",{maxlength:function(e){var t=e.maxLength;return 2147483647===t?k:t},size:function(e){var t=e.size;return 20===t?k:t},"class":function(e){return e.className},style:function(e){var t=e.style.cssText;return 0===t.length?k:t}}),x(L,"set",{"class":function(e,t){e.className=t},style:function(e,t){e.style.cssText=t}})),i.ie&&i.ie<9&&(D["float"]="styleFloat",x(M,"set",{opacity:function(e,t){var n=e.style;null===t||""===t?n.removeAttribute("filter"):(n.zoom=1,n.filter="alpha(opacity="+100*t+")")}})),f.attrHooks=L,f.cssHooks=M,f}),r(v,[],function(){return function(e,t){function n(e,t,n,r){function i(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},u,d,f,h="\ufeff";for(e=e||{},t&&(d=t.getValidStyles(),f=t.getInvalidStyles()),u=("\\\" \\' \\; \\: ; : "+h).split(" "),l=0;l-1&&n||(m[e+t]=-1==l?s[0]:s.join(" "),delete m[e+"-top"+t],delete m[e+"-right"+t],delete m[e+"-bottom"+t],delete m[e+"-left"+t])}}function u(e){var t=m[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return m[e]=t[0],!0}}function d(e,t,n,r){u(t)&&u(n)&&u(r)&&(m[e]=m[t]+" "+m[n]+" "+m[r],delete m[t],delete m[n],delete m[r])}function f(e){return b=!0,c[e]}function h(e,t){return b&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return c[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function p(t,n,r,i,o,a){if(o=o||a)return o=h(o),"'"+o.replace(/\'/g,"\\'")+"'";if(n=h(n||r||i),!e.allow_script_urls){var s=n.replace(/[\s\r\n]+/,"");if(/(java|vb)script:/i.test(s))return"";if(!e.allow_svg_data_urls&&/^data:image\/svg/i.test(s))return""}return C&&(n=C.call(x,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"}var m={},g,v,y,b,C=e.url_converter,x=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,f).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,f)});g=o.exec(t);){if(v=g[1].replace(a,"").toLowerCase(),y=g[2].replace(a,""),y=y.replace(/\\[0-9a-f]+/g,function(e){return String.fromCharCode(parseInt(e.substr(1),16))}),v&&y.length>0){if(!e.allow_script_urls&&("behavior"==v||/expression\s*\(|\/\*|\*\//.test(y)))continue;"font-weight"===v&&"700"===y?y="bold":"color"!==v&&"background-color"!==v||(y=y.toLowerCase()),y=y.replace(r,n),y=y.replace(i,p),m[v]=b?h(y,!0):y}o.lastIndex=g.index+g[0].length}s("border","",!0),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s("margin",""),d("border","border-width","border-style","border-color"),"medium none"===m.border&&delete m.border,"none"===m["border-image"]&&delete m["border-image"]}return m},serialize:function(e,t){function n(t){var n,r,o,a;if(n=d[t])for(r=0,o=n.length;o>r;r++)t=n[r],a=e[t],a!==s&&a.length>0&&(i+=(i.length>0?" ":"")+t+": "+a+";")}function r(e,t){var n;return n=f["*"],n&&n[e]?!1:(n=f[t],!n||!n[e])}var i="",o,a;if(t&&d)n("*"),n(t);else for(o in e)a=e[o],a!==s&&a.length>0&&(f&&!r(o,t)||(i+=(i.length>0?" ":"")+o+": "+a+";"));return i}}}}),r(y,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}function r(e,n,r,i){var o,a,s;if(e){if(o=e[r],t&&o===t)return;if(o){if(!i)for(s=o[n];s;s=s[n])if(!s[n])return s;return o}if(a=e.parentNode,a&&a!==t)return a}}var i=e;this.current=function(){return i},this.next=function(e){return i=n(i,"firstChild","nextSibling",e)},this.prev=function(e){return i=n(i,"lastChild","previousSibling",e)},this.prev2=function(e){return i=r(i,"lastChild","previousSibling",e)}}}),r(b,[m],function(e){function t(n){function r(){return P.createDocumentFragment()}function i(e,t){N(F,e,t)}function o(e,t){N(z,e,t)}function a(e){i(e.parentNode,j(e))}function s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(M[V]=M[W],M[$]=M[U]):(M[W]=M[V],M[U]=M[$]),M.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function h(e,t){var n=M[W],r=M[U],i=M[V],o=M[$],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function p(){E(I)}function m(){return E(H)}function g(){return E(O)}function v(e){var t=this[W],r=this[U],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=M.extractContents();M.insertNode(e),e.appendChild(t),M.selectNode(e)}function b(){return q(new t(n),{startContainer:M[W],startOffset:M[U],endContainer:M[V],endOffset:M[$],collapsed:M.collapsed,commonAncestorContainer:M.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(0>t)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return M[W]==M[V]&&M[U]==M[$]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:i>t?-1:1;for(o=r;o&&o.parentNode!=e;)o=o.parentNode;if(o){for(a=0,s=e.firstChild;s!=o&&t>a;)a++,s=s.nextSibling;return a>=t?-1:1}for(o=e;o&&o.parentNode!=r;)o=o.parentNode;if(o){for(a=0,s=r.firstChild;s!=o&&i>a;)a++,s=s.nextSibling;return i>a?-1:1}for(l=n.findCommonAncestor(e,r),c=e;c&&c.parentNode!=l;)c=c.parentNode;for(c||(c=l),u=r;u&&u.parentNode!=l;)u=u.parentNode;if(u||(u=l),c==u)return 0;for(s=l.firstChild;s;){if(s==c)return-1;if(s==u)return 1;s=s.nextSibling}}function N(e,t,r){var i,o;for(e?(M[W]=t,M[U]=r):(M[V]=t,M[$]=r),i=M[V];i.parentNode;)i=i.parentNode;for(o=M[W];o.parentNode;)o=o.parentNode;o==i?w(M[W],M[U],M[V],M[$])>0&&M.collapse(e):M.collapse(e),M.collapsed=x(),M.commonAncestorContainer=n.findCommonAncestor(M[W],M[V])}function E(e){var t,n=0,r=0,i,o,a,s,l,c;if(M[W]==M[V])return _(e);for(t=M[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[W])return S(t,e);++n}for(t=M[W],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[V])return k(t,e);++r}for(o=r-n,a=M[W];o>0;)a=a.parentNode,o--;for(s=M[V];0>o;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function _(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),M[U]==M[$])return t;if(3==M[W].nodeType){if(n=M[W].nodeValue,i=n.substring(M[U],M[$]),e!=O&&(o=M[W],c=M[U],u=M[$]-M[U],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),M.collapse(F)),e==I)return;return i.length>0&&t.appendChild(P.createTextNode(i)),t}for(o=C(M[W],M[U]),a=M[$]-M[U];o&&a>0;)s=o.nextSibling,l=D(o,e),t&&t.appendChild(l),--a,o=s;return e!=O&&M.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-M[U],0>=a)return t!=O&&(M.setEndBefore(e),M.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=D(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=O&&(M.setEndBefore(e),M.collapse(z)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=M[$]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=D(o,t),n&&n.appendChild(l),--a,o=s;return t!=O&&(M.setStartAfter(e),M.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=j(e),s=j(t),++a,l=s-a,c=e.nextSibling;l>0;)u=c.nextSibling,i=D(c,n),o&&o.appendChild(i),c=u,--l;return i=R(t,n),o&&o.appendChild(i),n!=O&&(M.setStartAfter(e),M.collapse(F)),o}function R(e,t){var n=C(M[V],M[$]-1),r,i,o,a,s,l=n!=M[V];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(M[W],M[U]),r=n!=M[W],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return D(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=M[U],a=o.substring(l),s=o.substring(0,l)):(l=M[$],a=o.substring(0,l),s=o.substring(l)),i!=O&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function D(e,t){return t!=I?t==O?n.clone(e,F):e:void e.parentNode.removeChild(e)}function L(){return n.create("body",null,g()).outerText}var M=this,P=n.doc,H=0,O=1,I=2,F=!0,z=!1,U="startOffset",W="startContainer",V="endContainer",$="endOffset",q=e.extend,j=n.nodeIndex;return q(M,{startContainer:P,startOffset:0,endContainer:P,endOffset:0,collapsed:F,commonAncestorContainer:P,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNode:d,selectNodeContents:f,compareBoundaryPoints:h,deleteContents:p,extractContents:m,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:L}),M}return t.prototype.toString=function(){return this.toStringIE()},t}),r(C,[m],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':""","'":"'","<":"<",">":">","&":"&","`":"`"},a={"<":"<",">":">","&":"&",""":'"',"'":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(u,function(e,n){return n?(n="x"===n.charAt(0).toLowerCase()?parseInt(n.substr(1),16):parseInt(n,10),n>65535?(n-=65536,String.fromCharCode(55296+(n>>10),56320+(1023&n))):d[n]||String.fromCharCode(n)):a[e]||i[e]||t(e)})}};return f}),r(x,[m,u],function(e,t){return function(n,r){function i(e){n.getElementsByTagName("head")[0].appendChild(e)}function o(r,o,c){function u(){for(var e=b.passed,t=e.length;t--;)e[t]();b.status=2,b.passed=[],b.failed=[]}function d(){for(var e=b.failed,t=e.length;t--;)e[t]();b.status=3,b.passed=[],b.failed=[]}function f(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function h(e,n){e()||((new Date).getTime()-y0)return v=n.createElement("style"),v.textContent='@import "'+r+'"',m(),void i(v);p()}i(g),g.href=r}}var a=0,s={},l;r=r||{},l=r.maxLoadTime||5e3,this.load=o}}),r(w,[h,g,v,f,y,b,C,d,m,x],function(e,n,r,i,o,a,s,l,c,u){function d(e,t){var n={},r=t.keep_values,i;return i={set:function(n,r,i){t.url_converter&&(r=t.url_converter.call(t.url_converter_scope||e,r,i,n[0])),n.attr("data-mce-"+i,r).attr(i,r)},get:function(e,t){return e.attr("data-mce-"+t)||e.attr(t)}},n={style:{set:function(e,t){return null!==t&&"object"==typeof t?void e.css(t):(r&&e.attr("data-mce-style",t),void e.attr("style",t))},get:function(t){var n=t.attr("data-mce-style")||t.attr("style");return n=e.serializeStyle(e.parseStyle(n),t[0].nodeName)}}},r&&(n.href=n.src=i),n}function f(e,t){var n=t.attr("style");n=e.serializeStyle(e.parseStyle(n),t[0].nodeName),n||(n=null),t.attr("data-mce-style",n)}function h(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n}function p(e,t){var o=this,a;o.doc=e,o.win=window,o.files={},o.counter=0,o.stdMode=!b||e.documentMode>=8,o.boxModel=!b||"CSS1Compat"==e.compatMode||o.stdMode,o.styleSheetLoader=new u(e),o.boundEvents=[],o.settings=t=t||{},o.schema=t.schema,o.styles=new r({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),o.fixDoc(e),o.events=t.ownEvents?new i(t.proxy):i.Event,o.attrHooks=d(o,t),a=t.schema?t.schema.getBlockElements():{},o.$=n.overrideDefaults(function(){return{context:e,element:o.getRoot()}}),o.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!a[e.nodeName]):!!a[e]}}var m=c.each,g=c.is,v=c.grep,y=c.trim,b=l.ie,C=/^([a-z0-9],?)+$/i,x=/^[ \t\r\n]*$/;return p.prototype={$$:function(e){return"string"==typeof e&&(e=this.get(e)),this.$(e)},root:null,fixDoc:function(e){var t=this.settings,n;if(b&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!b||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),m(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.settings.root_element||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),-1===n.indexOf("px")&&(n=0),-1===r.indexOf("px")&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),g(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){ -return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.settings.root_element||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(C.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeType?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=g(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&"undefined"!=typeof t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return e=this.$$(e),t?e.each(function(){for(var e;e=this.firstChild;)3==e.nodeType&&0===e.data.length?this.removeChild(e):this.parentNode.insertBefore(e,this)}).remove():e.remove(),e.length>1?e.toArray():e[0]},setStyle:function(e,t,n){e=this.$$(e).css(t,n),this.settings.update_styles&&f(this,e)},getStyle:function(e,n,r){return e=this.$$(e),r?e.css(n):(n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=l.ie&&l.ie<12?"styleFloat":"cssFloat"),e[0]&&e[0].style?e[0].style[n]:t)},setStyles:function(e,t){e=this.$$(e).css(t),this.settings.update_styles&&f(this,e)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this,i,o,a=r.settings;""===n&&(n=null),e=r.$$(e),i=e.attr(t),e.length&&(o=r.attrHooks[t],o&&o.set?o.set(e,n,t):e.attr(t,n),i!=n&&a.onSetAttrib&&a.onSetAttrib({attrElm:e,attrName:t,attrValue:n}))},setAttribs:function(e,t){var n=this;n.$$(e).each(function(e,r){m(t,function(e,t){n.setAttrib(r,t,e)})})},getAttrib:function(e,t,n){var r=this,i,o;return e=r.$$(e),e.length&&(i=r.attrHooks[t],o=i&&i.get?i.get(e,t):e.attr(t)),"undefined"==typeof o&&(o=n||""),o},getPos:function(e,t){var r=this,i=0,o=0,a,s=r.doc,l=s.body,c;if(e=r.get(e),t=t||l,e){if(t===l&&e.getBoundingClientRect&&"static"===n(l).css("position"))return c=e.getBoundingClientRect(),t=r.boxModel?s.documentElement:l,i=c.left+(s.documentElement.scrollLeft||l.scrollLeft)-t.clientLeft,o=c.top+(s.documentElement.scrollTop||l.scrollTop)-t.clientTop,{x:i,y:o};for(a=e;a&&a!=t&&a.nodeType;)i+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=e.parentNode;a&&a!=t&&a.nodeType;)i-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode}return{x:i,y:o}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==p.DOM&&n===document){var o=p.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,p.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==p.DOM&&n===document?void p.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void m(e.split(","),function(e){var i;e=c._addCacheSuffix(e),t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),b&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}))},addClass:function(e,t){this.$$(e).addClass(t)},removeClass:function(e,t){this.toggleClass(e,t,!1)},hasClass:function(e,t){return this.$$(e).hasClass(t)},toggleClass:function(e,t,r){this.$$(e).toggleClass(t,r).each(function(){""===this.className&&n(this).attr("class",null)})},show:function(e){this.$$(e).show()},hide:function(e){this.$$(e).hide()},isHidden:function(e){return"none"==this.$$(e).css("display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){e=this.$$(e),b?e.each(function(e,r){if(r.canHaveHTML!==!1){for(;r.firstChild;)r.removeChild(r.firstChild);try{r.innerHTML="
"+t,r.removeChild(r.firstChild)}catch(i){n("
").html("
"+t).contents().slice(1).appendTo(r)}return t}}):e.html(t)},getOuterHTML:function(e){return e=this.get(e),1==e.nodeType&&"outerHTML"in e?e.outerHTML:n("
").append(n(e).clone()).html()},setOuterHTML:function(e,t){var r=this;r.$$(e).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=t)}catch(e){}r.remove(n(this).html(t),!0)})},decode:s.decode,encode:s.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return g(t,"array")&&(e=e.cloneNode(!0)),n&&m(v(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),m(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(c.trim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),e?(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],m(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i)):!1},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(b){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,i,a,s,l,c=0;if(e=e.firstChild){s=new o(e,e.parentNode),t=t||(n.schema?n.schema.getNonEmptyElements():null);do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(i=n.getAttribs(e),r=i.length;r--;)if(l=i[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!x.test(e.nodeValue))return!1}while(e=s.next())}return 1>=c},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new a(this)},nodeIndex:h,split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=y(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;return e&&t?(o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.insertBefore(n,e):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t):void 0},bind:function(e,t,n,r){var i=this;if(c.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(c.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for(i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return e&&1==e.nodeType?(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null):null},getContentEditableParent:function(e){for(var t=this.getRoot(),n=null;e&&e!==t&&(n=this.getContentEditable(e),null===n);e=e.parentNode);return n},destroy:function(){var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n];this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},p.DOM=new p(document),p.nodeIndex=h,p}),r(N,[w,m],function(e,t){function n(){function e(e,n){function i(){a.remove(l),s&&(s.onreadystatechange=s.onload=s=null),n()}function o(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var a=r,s,l;l=a.uniqueId(),s=document.createElement("script"),s.id=l,s.type="text/javascript",s.src=t._addCacheSuffix(e),"onreadystatechange"in s?s.onreadystatechange=function(){/loaded|complete/.test(s.readyState)&&i()}:s.onload=i,s.onerror=o,(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}var n=0,a=1,s=2,l={},c=[],u={},d=[],f=0,h;this.isDone=function(e){return l[e]==s},this.markDone=function(e){l[e]=s},this.add=this.load=function(e,t,r){var i=l[e];i==h&&(c.push(e),l[e]=n),t&&(u[e]||(u[e]=[]),u[e].push({func:t,scope:r||this}))},this.remove=function(e){delete l[e],delete u[e]},this.loadQueue=function(e,t){this.loadScripts(c,e,t)},this.loadScripts=function(t,n,r){function c(e){i(u[e],function(e){e.func.call(e.scope)}),u[e]=h}var p;d.push({func:n,scope:r||this}),(p=function(){var n=o(t);t.length=0,i(n,function(t){return l[t]==s?void c(t):void(l[t]!=a&&(l[t]=a,f++,e(t,function(){l[t]=s,f--,c(t),p()})))}),f||(i(d,function(e){e.func.call(e.scope)}),d.length=0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(E,[N,m],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t,n){var i=r.language;if(i&&r.languageLoad!==!1){if(n)if(n=","+n+",",-1!=n.indexOf(","+i.substr(0,2)+","))i=i.substr(0,2);else if(-1==n.indexOf(","+i+","))return;e.ScriptLoader.add(this.urls[t]+"/langs/"+i+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},remove:function(e){delete this.urls[e],delete this.lookup[e]},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&(s?a.call(s):a.call(e))}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&-1==u.indexOf("://")&&(u=r.baseURL+"/"+u),c.urls[n]=u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(_,[],function(){function e(e){return function(t){return!!t&&t.nodeType==e}}function t(e){return e=e.toLowerCase().split(" "),function(t){var n,r;if(t&&t.nodeType)for(r=t.nodeName.toLowerCase(),n=0;nn.length-1?t=n.length-1:0>t&&(t=0),n[t]||e}function o(e){this.walk=function(t,n){function r(e){var t;return t=e[0],3===t.nodeType&&t===c&&u>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===f&&e.length>0&&t===d&&3===t.nodeType&&e.splice(e.length-1,1),e}function o(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function a(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function l(e,t,i){var a=i?"nextSibling":"previousSibling";for(g=e,v=g.parentNode;g&&g!=t;g=v)v=g.parentNode,y=o(g==e?g:g[a],a),y.length&&(i||y.reverse(),n(r(y)))}var c=t.startContainer,u=t.startOffset,d=t.endContainer,f=t.endOffset,h,p,m,g,v,y,b;if(b=e.select("td[data-mce-selected],th[data-mce-selected]"),b.length>0)return void s(b,function(e){n([e])});if(1==c.nodeType&&c.hasChildNodes()&&(c=c.childNodes[u]),1==d.nodeType&&d.hasChildNodes()&&(d=i(d,f)),c==d)return n(r([c]));for(h=e.findCommonAncestor(c,d),g=c;g;g=g.parentNode){if(g===d)return l(c,h,!0);if(g===h)break}for(g=d;g;g=g.parentNode){if(g===c)return l(d,h);if(g===h)break}p=a(c,h)||c,m=a(d,h)||d,l(c,p,!0),y=o(p==c?p:p.nextSibling,"nextSibling",m==d?m.nextSibling:m),y.length&&n(r(y)),l(d,m)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&rr?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r0&&o0)return h=v,p=n?v.nodeValue.length:0,void(i=!0);if(e.isBlock(v)||y[v.nodeName.toLowerCase()])return;s=v}o&&s&&(h=s,i=!0,p=0)}var h,p,m,g=e.getRoot(),v,y,b,C;if(h=n[(r?"start":"end")+"Container"],p=n[(r?"start":"end")+"Offset"],C=1==h.nodeType&&p===h.childNodes.length,y=e.schema.getNonEmptyElements(),b=r,!c(h)){if(1==h.nodeType&&p>h.childNodes.length-1&&(b=!1),9===h.nodeType&&(h=e.getRoot(),p=0),h===g){if(b&&(v=h.childNodes[p>0?p-1:0])){if(c(v))return;if(y[v.nodeName]||"TABLE"==v.nodeName)return}if(h.hasChildNodes()){if(p=Math.min(!b&&p>0?p-1:p,h.childNodes.length-1),h=h.childNodes[p],p=0,u(h)||c(h))return;if(h.hasChildNodes()&&!/TABLE/.test(h.nodeName)){v=h,m=new t(h,g);do{if(l(v)||c(v)){i=!1;break}if(3===v.nodeType&&v.nodeValue.length>0){p=b?0:v.nodeValue.length,h=v,i=!0;break}if(y[v.nodeName.toLowerCase()]&&!a(v)){p=e.nodeIndex(v),h=v.parentNode,"IMG"!=v.nodeName||b||p++,i=!0;break}}while(v=b?m.next():m.prev())}}}o&&(3===h.nodeType&&0===p&&f(!0),1===h.nodeType&&(v=h.childNodes[p],v||(v=h.childNodes[p-1]),!v||"BR"!==v.nodeName||d(v,"A")||s(v)||s(v,!0)||f(!0,v))),b&&!o&&3===h.nodeType&&p===h.nodeValue.length&&f(!1),i&&n["set"+(r?"Start":"End")](h,p)}}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}function a(t,n,r){var i,o,a;if(i=r.elementFromPoint(t,n),o=r.body.createTextRange(),i&&"HTML"!=i.tagName||(i=r.body),o.moveToElementText(i),a=e.toArray(o.getClientRects()),a=a.sort(function(e,t){return e=Math.abs(Math.max(e.top-n,e.bottom-n)),t=Math.abs(Math.max(t.top-n,t.bottom-n)),e-t}),a.length>0){n=(a[0].bottom+a[0].top)/2;try{return o.moveToPoint(t,n),o.collapse(!0),o}catch(s){}}return null}var s=e.each,l=n.isContentEditableFalse,c=r.isCaretContainer;return o.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&&t.isEqual(e))return!0}return!1},o.getCaretRangeFromPoint=function(e,t,n){var r,i;if(n.caretPositionFromPoint)i=n.caretPositionFromPoint(e,t),r=n.createRange(),r.setStart(i.offsetNode,i.offset),r.collapse(!0);else if(n.caretRangeFromPoint)r=n.caretRangeFromPoint(e,t);else if(n.body.createTextRange){r=n.body.createTextRange();try{r.moveToPoint(e,t),r.collapse(!0)}catch(o){r=a(e,t,n)}}return r},o.getSelectedNode=function(e){var t=e.startContainer,n=e.startOffset;return t.hasChildNodes()&&e.endOffset==n+1?t.childNodes[n]:null},o.getNode=function(e,t){return 1==e.nodeType&&e.hasChildNodes()&&(t>=e.childNodes.length&&(t=e.childNodes.length-1),e=e.childNodes[t]),e},o}),r(R,[T,d,u],function(e,t,n){return function(r){function i(e){var t,n;if(n=r.$(e).parentsUntil(r.getBody()).add(e),n.length===a.length){for(t=n.length;t>=0&&n[t]===a[t];t--);if(-1===t)return a=n,!0}return a=n,!1}var o,a=[];"onselectionchange"in r.getDoc()||r.on("NodeChange Click MouseUp KeyUp Focus",function(t){var n,i;n=r.selection.getRng(),i={startContainer:n.startContainer,startOffset:n.startOffset,endContainer:n.endContainer,endOffset:n.endOffset},"nodechange"!=t.type&&e.compareRanges(i,o)||r.fire("SelectionChange"),o=i}),r.on("contextmenu",function(){r.fire("SelectionChange")}),r.on("SelectionChange",function(){var e=r.selection.getStart(!0);!t.range&&r.selection.isCollapsed()||!i(e)&&r.dom.isChildOf(e,r.getBody())&&r.nodeChanged({selectionChange:!0})}),r.on("MouseUp",function(e){e.isDefaultPrevented()||("IMG"==r.selection.getNode().nodeName?n.setEditorTimeout(r,function(){r.nodeChanged()}):r.nodeChanged())}),this.nodeChanged=function(e){var t=r.selection,n,i,o;r.initialized&&t&&!r.settings.disable_nodechange&&!r.readonly&&(o=r.getBody(),n=t.getStart()||o,n.ownerDocument==r.getDoc()&&r.dom.isChildOf(n,o)||(n=o),"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),i=[],r.dom.getParent(n,function(e){return e===o?!0:void i.push(e)}),e=e||{},e.element=n,e.parents=i,r.fire("NodeChange",e))}}}),r(A,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;i>r;r++)a=o[r],"id"!==a.name&&(s[s.length]={name:a.name,value:a.value},s.map[a.name]=a.value);n.attributes=s}return n.value=e.value,n.shortEnded=e.shortEnded,n},wrap:function(e){var t=this;return t.parent.insert(e,t),e.append(t),t},unwrap:function(){var e=this,t,n;for(t=e.firstChild;t;)n=t.next,e.insert(t,e,!0),t=n;e.remove()},remove:function(){var e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r.next=n,t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n.prev=r,e.parent=e.next=e.prev=null),e},append:function(e){var t=this,n;return e.parent&&e.remove(),n=t.lastChild,n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e},insert:function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(t){var n=this,r,i=[];for(r=n.firstChild;r;r=e(r,n))r.name===t&&i.push(r);return i},empty:function(){var t=this,n,r,i;if(t.firstChild){for(n=[],i=t.firstChild;i;i=e(i,t))n.push(i);for(r=n.length;r--;)i=n[r],i.parent=i.firstChild=i.lastChild=i.next=i.prev=null}return t.firstChild=t.lastChild=null,t},isEmpty:function(t){var r=this,i=r.firstChild,o,a;if(i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(t[i.name])return!1;for(o=i.attributes.length;o--;)if(a=i.attributes[o].name,"name"===a||0===a.indexOf("data-mce-bookmark"))return!1}if(8===i.type)return!1;if(3===i.type&&!n.test(i.value))return!1}while(i=e(i,r));return!0},walk:function(t){return e(this,null,t)}},t.create=function(e,n){var i,o;if(i=new t(e,r[e]||1),n)for(o in n)i.attr(o,n[o]);return i},t}),r(B,[m],function(e){function t(e,t){return e?e.split(t||" "):[]}function n(e){function n(e,n,r){function i(e,t){var n={},r,i;for(r=0,i=e.length;i>r;r++)n[e[r]]=t||{};return n}var s,c,u,d=arguments;for(r=r||[],n=n||"","string"==typeof r&&(r=t(r)),c=3;co;o++)i.attributes[n[o]]={},i.attributesOrder.push(n[o])}var a={},l,c,u,d,f,h;return i[e]?i[e]:(l=t("id accesskey class dir lang style tabindex title"),c=t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),u=t("a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment"),"html4"!=e&&(l.push.apply(l,t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")),c.push.apply(c,t("article aside details dialog figure header footer hgroup section nav")),u.push.apply(u,t("audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen"))),"html5-strict"!=e&&(l.push("xml:lang"),h=t("acronym applet basefont big font strike tt"),u.push.apply(u,h),s(h,function(e){n(e,"",u)}),f=t("center dir isindex noframes"),c.push.apply(c,f),d=[].concat(c,u),s(f,function(e){n(e,"",d)})),d=d||[].concat(c,u),n("html","manifest","head body"),n("head","","base command link meta noscript script style title"),n("title hr noscript br"),n("base","href target"),n("link","href rel media hreflang type sizes hreflang"),n("meta","name http-equiv content charset"),n("style","media type scoped"),n("script","src async defer type charset"),n("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",d),n("address dt dd div caption","",d),n("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",u),n("blockquote","cite",d),n("ol","reversed start type","li"),n("ul","","li"),n("li","value",d),n("dl","","dt dd"),n("a","href target rel media hreflang type",u),n("q","cite",u),n("ins del","cite datetime",d),n("img","src sizes srcset alt usemap ismap width height"),n("iframe","src name width height",d),n("embed","src type width height"),n("object","data type typemustmatch name usemap form width height",d,"param"),n("param","name value"),n("map","name",d,"area"),n("area","alt coords shape href target rel media hreflang type"),n("table","border","caption colgroup thead tfoot tbody tr"+("html4"==e?" col":"")),n("colgroup","span","col"),n("col","span"),n("tbody thead tfoot","","tr"),n("tr","","td th"),n("td","colspan rowspan headers",d),n("th","colspan rowspan headers scope abbr",d),n("form","accept-charset action autocomplete enctype method name novalidate target",d),n("fieldset","disabled form name",d,"legend"),n("label","form for",u),n("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),n("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==e?d:u),n("select","disabled form multiple name required size","option optgroup"),n("optgroup","disabled label","option"),n("option","disabled label selected value"),n("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),n("menu","type label",d,"li"),n("noscript","",d),"html4"!=e&&(n("wbr"),n("ruby","",u,"rt rp"),n("figcaption","",d),n("mark rt rp summary bdi","",u),n("canvas","width height",d),n("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",d,"track source"),n("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",d,"track source"),n("picture","","img source"),n("source","src srcset type media sizes"),n("track","kind src srclang label default"),n("datalist","",u,"option"),n("article section nav aside header footer","",d),n("hgroup","","h1 h2 h3 h4 h5 h6"),n("figure","",d,"figcaption"),n("time","datetime",u),n("dialog","open",d),n("command","type label icon disabled checked radiogroup command"),n("output","for form name",u),n("progress","value max",u),n("meter","value min max low high optimum",u),n("details","open",d,"summary"),n("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!=e&&(r("script","language xml:space"),r("style","xml:space"),r("object","declare classid code codebase codetype archive standby align border hspace vspace"),r("embed","align name hspace vspace"),r("param","valuetype type"),r("a","charset name rev shape coords"),r("br","clear"),r("applet","codebase archive code object alt name width height align hspace vspace"),r("img","name longdesc align border hspace vspace"),r("iframe","longdesc frameborder marginwidth marginheight scrolling align"),r("font basefont","size color face"),r("input","usemap align"),r("select","onchange"),r("textarea"),r("h1 h2 h3 h4 h5 h6 div p legend caption","align"),r("ul","type compact"),r("li","type"),r("ol dl menu dir","compact"),r("pre","width xml:space"),r("hr","align noshade size width"),r("isindex","prompt"),r("table","summary width frame rules cellspacing cellpadding align bgcolor"),r("col","width align char charoff valign"),r("colgroup","width align char charoff valign"),r("thead","align char charoff valign"),r("tr","align char charoff valign bgcolor"),r("th","axis align char charoff valign nowrap bgcolor width height"),r("form","accept"),r("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),r("tfoot","align char charoff valign"),r("tbody","align char charoff valign"),r("area","nohref"),r("body","background bgcolor text link vlink alink")),"html4"!=e&&(r("input button select textarea","autofocus"),r("input textarea","placeholder"),r("a","download"),r("link script img","crossorigin"),r("iframe","sandbox seamless allowfullscreen")),s(t("a form meter progress dfn"),function(e){a[e]&&delete a[e].children[e]}),delete a.caption.children.table,delete a.script,i[e]=a,a)}function r(e,t){var n;return e&&(n={},"string"==typeof e&&(e={"*":e}),s(e,function(e,r){n[r]=n[r.toUpperCase()]="map"==t?a(e,/[, ]/):c(e,/[, ]/)})),n}var i={},o={},a=e.makeMap,s=e.each,l=e.extend,c=e.explode,u=e.inArray;return function(e){function o(t,n,r){var o=e[t];return o?o=a(o,/[, ]/,a(o.toUpperCase(),/[, ]/)):(o=i[t],o||(o=a(n," ",a(n.toUpperCase()," ")),o=l(o,r),i[t]=o)),o}function d(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function f(e){var n,r,i,o,s,l,c,f,h,p,m,g,v,b,x,w,N,E,_,S=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,k=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,T=/[*?+]/;if(e)for(e=t(e,","),y["@"]&&(w=y["@"].attributes,N=y["@"].attributesOrder),n=0,r=e.length;r>n;n++)if(s=S.exec(e[n])){if(b=s[1],h=s[2],x=s[3],f=s[5],g={},v=[],l={attributes:g,attributesOrder:v},"#"===b&&(l.paddEmpty=!0),"-"===b&&(l.removeEmpty=!0),"!"===s[4]&&(l.removeEmptyAttrs=!0),w){for(E in w)g[E]=w[E];v.push.apply(v,N)}if(f)for(f=t(f,"|"),i=0,o=f.length;o>i;i++)if(s=k.exec(f[i])){if(c={},m=s[1],p=s[2].replace(/::/g,":"),b=s[3],_=s[4],"!"===m&&(l.attributesRequired=l.attributesRequired||[],l.attributesRequired.push(p),c.required=!0),"-"===m){delete g[p],v.splice(u(v,p),1);continue}b&&("="===b&&(l.attributesDefault=l.attributesDefault||[],l.attributesDefault.push({name:p,value:_}),c.defaultValue=_),":"===b&&(l.attributesForced=l.attributesForced||[],l.attributesForced.push({name:p,value:_}),c.forcedValue=_),"<"===b&&(c.validValues=a(_,"?"))),T.test(p)?(l.attributePatterns=l.attributePatterns||[],c.pattern=d(p),l.attributePatterns.push(c)):(g[p]||v.push(p),g[p]=c)}w||"@"!=h||(w=g,N=v),x&&(l.outputName=h, -y[x]=l),T.test(h)?(l.pattern=d(h),C.push(l)):y[h]=l}}function h(e){y={},C=[],f(e),s(N,function(e,t){b[t]=e.children})}function p(e){var n=/^(~)?(.+)$/;e&&(i.text_block_elements=i.block_elements=null,s(t(e,","),function(e){var t=n.exec(e),r="~"===t[1],i=r?"span":"div",o=t[2];if(b[o]=b[i],M[o]=i,r||(R[o.toUpperCase()]={},R[o]={}),!y[o]){var a=y[i];a=l({},a),delete a.removeEmptyAttrs,delete a.removeEmpty,y[o]=a}s(b,function(e,t){e[i]&&(b[t]=e=l({},b[t]),e[o]=e[i])})}))}function m(n){var r=/^([+\-]?)(\w+)\[([^\]]+)\]$/;i[e.schema]=null,n&&s(t(n,","),function(e){var n=r.exec(e),i,o;n&&(o=n[1],i=o?b[n[2]]:b[n[2]]={"#comment":{}},i=b[n[2]],s(t(n[3],"|"),function(e){"-"===o?delete i[e]:i[e]={}}))})}function g(e){var t=y[e],n;if(t)return t;for(n=C.length;n--;)if(t=C[n],t.pattern.test(e))return t}var v=this,y={},b={},C=[],x,w,N,E,_,S,k,T,R,A,B,D,L,M={},P={};e=e||{},N=n(e.schema),e.verify_html===!1&&(e.valid_elements="*[*]"),x=r(e.valid_styles),w=r(e.invalid_styles,"map"),T=r(e.valid_classes,"map"),E=o("whitespace_elements","pre script noscript style textarea video audio iframe object"),_=o("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),S=o("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),k=o("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),A=o("non_empty_elements","td th iframe video audio object script",S),B=o("move_caret_before_on_enter_elements","table",A),D=o("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),R=o("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption",D),L=o("text_inline_elements","span strong b em i font strike u var cite dfn code mark q sup sub samp"),s((e.special||"script noscript style textarea").split(" "),function(e){P[e]=new RegExp("]*>","gi")}),e.valid_elements?h(e.valid_elements):(s(N,function(e,t){y[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},b[t]=e.children}),"html5"!=e.schema&&s(t("strong/b em/i"),function(e){e=t(e,"/"),y[e[1]].outputName=e[0]}),s(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){y[e]&&(y[e].removeEmpty=!0)}),s(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(e){y[e].paddEmpty=!0}),s(t("span"),function(e){y[e].removeEmptyAttrs=!0})),p(e.custom_elements),m(e.valid_children),f(e.extended_valid_elements),m("+ol[ul|ol],+ul[ul|ol]"),e.invalid_elements&&s(c(e.invalid_elements),function(e){y[e]&&delete y[e]}),g("span")||f("span[!data-mce-type|*]"),v.children=b,v.getValidStyles=function(){return x},v.getInvalidStyles=function(){return w},v.getValidClasses=function(){return T},v.getBoolAttrs=function(){return k},v.getBlockElements=function(){return R},v.getTextBlockElements=function(){return D},v.getTextInlineElements=function(){return L},v.getShortEndedElements=function(){return S},v.getSelfClosingElements=function(){return _},v.getNonEmptyElements=function(){return A},v.getMoveCaretBeforeOnEnterElements=function(){return B},v.getWhiteSpaceElements=function(){return E},v.getSpecialElements=function(){return P},v.isValidChild=function(e,t){var n=b[e];return!(!n||!n[t])},v.isValid=function(e,t){var n,r,i=g(e);if(i){if(!t)return!0;if(i.attributes[t])return!0;if(n=i.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},v.getElementRule=g,v.getCustomElements=function(){return M},v.addValidElements=f,v.setValidElements=h,v.addCustomElements=p,v.addValidChildren=m,v.elements=y}}),r(D,[B,C,m],function(e,t,n){function r(e,t,n){var r=1,i,o,a,s;for(s=e.getShortEndedElements(),a=/<([!?\/])?([A-Za-z0-9\-_\:\.]+)((?:\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\/|\s+)>/g,a.lastIndex=i=n;o=a.exec(t);){if(i=a.lastIndex,"/"===o[1])r--;else if(!o[1]){if(o[2]in s)continue;r++}if(0===r)break}return i}function i(i,a){function s(){}var l=this;i=i||{},l.schema=a=a||new e,i.fix_self_closing!==!1&&(i.fix_self_closing=!0),o("comment cdata text start end pi doctype".split(" "),function(e){e&&(l[e]=i[e]||s)}),l.parse=function(e){function o(e){var t,n;for(t=h.length;t--&&h[t].name!==e;);if(t>=0){for(n=h.length-1;n>=t;n--)e=h[n],e.valid&&l.end(e.name);h.length=t}}function s(e,t,n,r,o){var a,s,l=/[\s\u0000-\u001F]+/g;if(t=t.toLowerCase(),n=t in x?t:z(n||r||o||""),N&&!y&&0!==t.indexOf("data-")){if(a=T[t],!a&&R){for(s=R.length;s--&&(a=R[s],!a.pattern.test(t)););-1===s&&(a=null)}if(!a)return;if(a.validValues&&!(n in a.validValues))return}if(W[t]&&!i.allow_script_urls){var c=n.replace(l,"");try{c=decodeURIComponent(c)}catch(u){c=unescape(c)}if(V.test(c))return;if(!i.allow_html_data_urls&&$.test(c)&&!/^data:image\//i.test(c))return}p.map[t]=n,p.push({name:t,value:n})}var l=this,c,u=0,d,f,h=[],p,m,g,v,y,b,C,x,w,N,E,_,S,k,T,R,A,B,D,L,M,P,H,O,I,F=0,z=t.decode,U,W=n.makeMap("src,href,data,background,formaction,poster"),V=/((java|vb)script|mhtml):/i,$=/^data:/i;for(P=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-_\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),H=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,C=a.getShortEndedElements(),M=i.self_closing_elements||a.getSelfClosingElements(),x=a.getBoolAttrs(),N=i.validate,b=i.remove_internals,U=i.fix_self_closing,O=a.getSpecialElements();c=P.exec(e);){if(u0&&h[h.length-1].name===d&&o(d),!N||(E=a.getElementRule(d))){if(_=!0,N&&(T=E.attributes,R=E.attributePatterns),(k=c[8])?(y=-1!==k.indexOf("data-mce-type"),y&&b&&(_=!1),p=[],p.map={},k.replace(H,s)):(p=[],p.map={}),N&&!y){if(A=E.attributesRequired,B=E.attributesDefault,D=E.attributesForced,L=E.removeEmptyAttrs,L&&!p.length&&(_=!1),D)for(m=D.length;m--;)S=D[m],v=S.name,I=S.value,"{$uid}"===I&&(I="mce_"+F++),p.map[v]=I,p.push({name:v,value:I});if(B)for(m=B.length;m--;)S=B[m],v=S.name,v in p.map||(I=S.value,"{$uid}"===I&&(I="mce_"+F++),p.map[v]=I,p.push({name:v,value:I}));if(A){for(m=A.length;m--&&!(A[m]in p.map););-1===m&&(_=!1)}if(S=p.map["data-mce-bogus"]){if("all"===S){u=r(a,e,P.lastIndex),P.lastIndex=u;continue}_=!1}}_&&l.start(d,p,w)}else _=!1;if(f=O[d]){f.lastIndex=u=c.index+c[0].length,(c=f.exec(e))?(_&&(g=e.substr(u,c.index-u)),u=c.index+c[0].length):(g=e.substr(u),u=e.length),_&&(g.length>0&&l.text(g,!0),l.end(d)),P.lastIndex=u;continue}w||(k&&k.indexOf("/")==k.length-1?_&&l.end(d):h.push({name:d,valid:_}))}else(d=c[1])?(">"===d.charAt(0)&&(d=" "+d),i.allow_conditional_comments||"[if"!==d.substr(0,3)||(d=" "+d),l.comment(d)):(d=c[2])?l.cdata(d):(d=c[3])?l.doctype(d):(d=c[4])&&l.pi(d,c[5]);u=c.index+c[0].length}for(u=0;m--)d=h[m],d.valid&&l.end(d.name)}}var o=n.each;return i.findEndTag=r,i}),r(L,[A,B,D,m],function(e,t,n,r){var i=r.makeMap,o=r.each,a=r.explode,s=r.extend;return function(r,l){function c(t){var n,r,o,a,s,c,d,f,h,p,m,g,v,y,b;for(m=i("tr,td,th,tbody,thead,tfoot,table"),p=l.getNonEmptyElements(),g=l.getTextBlockElements(),v=l.getSpecialElements(),n=0;n1){for(a.reverse(),s=c=u.filterNode(a[0].clone()),h=0;h0)return void(t.value=r);if(n=t.next){if(3==n.type&&n.value.length){t=t.prev;continue}if(!o[n.name]&&"script"!=n.name&&"style"!=n.name){t=t.prev;continue}}i=t.prev,t.remove(),t=i}}function g(e){var t,n={};for(t in e)"li"!==t&&"p"!=t&&(n[t]=e[t]);return n}var v,y,b,C,x,w,N,E,_,S,k,T,R,A=[],B,D,L,M,P,H,O,I;if(o=o||{},h={},p={},T=s(i("script,style,head,html,body,title,meta,param"),l.getBlockElements()),O=l.getNonEmptyElements(),H=l.children,k=r.validate,I="forced_root_block"in o?o.forced_root_block:r.forced_root_block,P=l.getWhiteSpaceElements(),R=/^[ \t\r\n]+/,D=/[ \t\r\n]+$/,L=/[ \t\r\n]+/g,M=/^[ \t\r\n]+$/,v=new n({validate:k,allow_script_urls:r.allow_script_urls,allow_conditional_comments:r.allow_conditional_comments,self_closing_elements:g(l.getSelfClosingElements()),cdata:function(e){b.append(u("#cdata",4)).value=e},text:function(e,t){var n;B||(e=e.replace(L," "),b.lastChild&&T[b.lastChild.name]&&(e=e.replace(R,""))),0!==e.length&&(n=u("#text",3),n.raw=!!t,b.append(n).value=e)},comment:function(e){b.append(u("#comment",8)).value=e},pi:function(e,t){b.append(u(e,7)).value=t,m(b)},doctype:function(e){var t;t=b.append(u("#doctype",10)),t.value=e,m(b)},start:function(e,t,n){var r,i,o,a,s;if(o=k?l.getElementRule(e):{}){for(r=u(o.outputName||e,1),r.attributes=t,r.shortEnded=n,b.append(r),s=H[b.name],s&&H[r.name]&&!s[r.name]&&A.push(r),i=f.length;i--;)a=f[i].name,a in t.map&&(_=p[a],_?_.push(r):p[a]=[r]);T[e]&&m(r),n||(b=r),!B&&P[e]&&(B=!0)}},end:function(t){var n,r,i,o,a;if(r=k?l.getElementRule(t):{}){if(T[t]&&!B){if(n=b.firstChild,n&&3===n.type)if(i=n.value.replace(R,""),i.length>0)n.value=i,n=n.next;else for(o=n.next,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.next,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o;if(n=b.lastChild,n&&3===n.type)if(i=n.value.replace(D,""),i.length>0)n.value=i,n=n.prev;else for(o=n.prev,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.prev,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o}if(B&&P[t]&&(B=!1),(r.removeEmpty||r.paddEmpty)&&b.isEmpty(O))if(r.paddEmpty)b.empty().append(new e("#text","3")).value="\xa0";else if(!b.attributes.map.name&&!b.attributes.map.id)return a=b.parent,T[b.name]?b.empty().remove():b.unwrap(),void(b=a);b=b.parent}}},l),y=b=new e(o.context||r.root_name,11),v.parse(t),k&&A.length&&(o.context?o.invalid=!0:c(A)),I&&("body"==y.name||o.isRootContent)&&a(),!o.invalid){for(S in h){for(_=d[S],C=h[S],N=C.length;N--;)C[N].parent||C.splice(N,1);for(x=0,w=_.length;w>x;x++)_[x](C,S,o)}for(x=0,w=f.length;w>x;x++)if(_=f[x],_.name in p){for(C=p[_.name],N=C.length;N--;)C[N].parent||C.splice(N,1);for(N=0,E=_.callbacks.length;E>N;N++)_.callbacks[N](C,_.name,o)}}return y},r.remove_trailing_brs&&u.addNodeFilter("br",function(t){var n,r=t.length,i,o=s({},l.getBlockElements()),a=l.getNonEmptyElements(),c,u,d,f,h,p;for(o.body=1,n=0;r>n;n++)if(i=t[n],c=i.parent,o[i.parent.name]&&i===c.lastChild){for(d=i.prev;d;){if(f=d.name,"span"!==f||"bookmark"!==d.attr("data-mce-type")){if("br"!==f)break;if("br"===f){i=null;break}}d=d.prev}i&&(i.remove(),c.isEmpty(a)&&(h=l.getElementRule(c.name),h&&(h.removeEmpty?c.remove():h.paddEmpty&&(c.empty().append(new e("#text",3)).value="\xa0"))))}else{for(u=i;c&&c.firstChild===u&&c.lastChild===u&&(u=c,!o[c.name]);)c=c.parent;u===c&&(p=new e("#text",3),p.value="\xa0",i.replace(p))}}),r.allow_html_in_named_anchor||u.addAttributeFilter("id,name",function(e){for(var t=e.length,n,r,i,o;t--;)if(o=e[t],"a"===o.name&&o.firstChild&&!o.attr("href")){i=o.parent,n=o.lastChild;do r=n.prev,i.insert(n,o),n=r;while(n)}}),r.validate&&l.getValidClasses()&&u.addAttributeFilter("class",function(e){for(var t=e.length,n,r,i,o,a,s=l.getValidClasses(),c,u;t--;){for(n=e[t],r=n.attr("class").split(" "),a="",i=0;i0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n")),r.push("<",e),t)for(c=0,u=t.length;u>c;c++)d=t[c],r.push(" ",d.name,'="',s(d.value,!0),'"');!n||l?r[r.length]=">":r[r.length]=" />",n&&i&&a[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n"))},end:function(e){var t;r.push(""),i&&a[e]&&r.length>0&&(t=r[r.length-1],t.length>0&&"\n"!==t&&r.push("\n"))},text:function(e,t){e.length>0&&(r[r.length]=t?e:s(e))},cdata:function(e){r.push("")},comment:function(e){r.push("")},pi:function(e,t){t?r.push(""):r.push(""),i&&r.push("\n")},doctype:function(e){r.push("",i?"\n":"")},reset:function(){r.length=0},getContent:function(){return r.join("").replace(/\n$/,"")}}}}),r(P,[M,B],function(e,t){return function(n,r){var i=this,o=new e(n);n=n||{},n.validate="validate"in n?n.validate:!0,i.schema=r=r||new t,i.writer=o,i.serialize=function(e){function t(e){var n=i[e.type],s,l,c,u,d,f,h,p,m;if(n)n(e);else{if(s=e.name,l=e.shortEnded,c=e.attributes,a&&c&&c.length>1&&(f=[],f.map={},m=r.getElementRule(e.name))){for(h=0,p=m.attributesOrder.length;p>h;h++)u=m.attributesOrder[h],u in c.map&&(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));for(h=0,p=c.length;p>h;h++)u=c[h].name,u in f.map||(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));c=f}if(o.start(e.name,c,l),!l){if(e=e.firstChild)do t(e);while(e=e.next);o.end(s)}}}var i,a;return a=n.validate,i={3:function(e){o.text(e.value,e.raw)},8:function(e){o.comment(e.value)},7:function(e){o.pi(e.name,e.value)},10:function(e){o.doctype(e.value)},4:function(e){o.cdata(e.value)},11:function(e){if(e=e.firstChild)do t(e);while(e=e.next)}},o.reset(),1!=e.type||n.inner?i[11](e):t(e),o.getContent()}}}),r(H,[w,L,D,C,P,A,B,d,m,S],function(e,t,n,r,i,o,a,s,l,c){function u(e){function t(e){return e&&"br"===e.name}var n,r;n=e.lastChild,t(n)&&(r=n.prev,t(r)&&(n.remove(),r.remove()))}var d=l.each,f=l.trim,h=e.DOM,p=["data-mce-selected"];return function(e,o){function m(e){var t=new RegExp(["]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>","\\s?("+p.join("|")+')="[^"]+"'].join("|"),"gi");return e=c.trim(e.replace(t,""))}function g(){var e=o.getBody().innerHTML,t=/<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g,r,i,a,s,l,c=o.schema;for(e=m(e),l=c.getShortEndedElements();s=t.exec(e);)i=t.lastIndex,a=s[0].length,r=l[s[1]]?i:n.findEndTag(c,e,i),e=e.substring(0,i-a)+e.substring(r),t.lastIndex=i-a;return f(e)}function v(e){-1===l.inArray(p,e)&&(C.addAttributeFilter(e,function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),p.push(e))}var y,b,C;return o&&(y=o.dom,b=o.schema),y=y||h,b=b||new a(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs="remove_trailing_brs"in e?e.remove_trailing_brs:!0,C=new t(e,b),C.addAttributeFilter("data-mce-tabindex",function(e,t){for(var n=e.length,r;n--;)r=e[n],r.attr("tabindex",r.attributes.map["data-mce-tabindex"]),r.attr(t,null)}),C.addAttributeFilter("src,href,style",function(t,n){for(var r=t.length,i,o,a="data-mce-"+n,s=e.url_converter,l=e.url_converter_scope,c;r--;)i=t[r],o=i.attributes.map[a],o!==c?(i.attr(n,o.length>0?o:null),i.attr(a,null)):(o=i.attributes.map[n],"style"===n?o=y.serializeStyle(y.parseStyle(o),i.name):s&&(o=s.call(l,o,n,i.name)),i.attr(n,o.length>0?o:null))}),C.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class"),r&&(r=n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),n.attr("class",r.length>0?r:null))}),C.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length,i;r--;)i=e[r],"bookmark"!==i.attributes.map["data-mce-type"]||n.cleanup||i.remove()}),C.addNodeFilter("noscript",function(e){for(var t=e.length,n;t--;)n=e[t].firstChild,n&&(n.value=r.decode(n.value))}),C.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var r=e.length,i,o,a;r--;)i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t?(a=i.attr("type"),a&&i.attr("type","mce-no/type"==a?null:a.replace(/^mce\-/,"")),o.length>0&&(i.firstChild.value="// ")):o.length>0&&(i.firstChild.value="")}),C.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}),C.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length,r;n--;)r=e[n],7===r.type?r.remove():1===r.type&&("input"!==t||"type"in r.attributes.map||r.attr("type","text"))}),e.fix_list_elements&&C.addNodeFilter("ul,ol",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.parent,"ul"!==r.name&&"ol"!==r.name||n.prev&&"li"===n.prev.name&&n.prev.append(n)}),C.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:b,addNodeFilter:C.addNodeFilter,addAttributeFilter:C.addAttributeFilter,serialize:function(t,n){var r=this,o,a,l,h,p,m;return s.ie&&y.select("script,style,select,map").length>0?(p=t.innerHTML,t=t.cloneNode(!1),y.setHTML(t,p)):t=t.cloneNode(!0),o=t.ownerDocument.implementation,o.createHTMLDocument&&(a=o.createHTMLDocument(""),d("BODY"==t.nodeName?t.childNodes:[t],function(e){a.body.appendChild(a.importNode(e,!0))}),t="BODY"!=t.nodeName?a.body.firstChild:a.body,l=y.doc,y.doc=a),n=n||{},n.format=n.format||"html",n.selection&&(n.forced_root_block=""),n.no_events||(n.node=t,r.onPreProcess(n)),m=C.parse(f(n.getInner?t.innerHTML:y.getOuterHTML(t)),n),u(m),h=new i(e,b),n.content=h.serialize(m),n.cleanup||(n.content=c.trim(n.content),n.content=n.content.replace(/\uFEFF/g,"")),n.no_events||r.onPostProcess(n),l&&(y.doc=l),n.node=null,n.content},addRules:function(e){b.addValidElements(e)},setRules:function(e){b.setValidElements(e)},onPreProcess:function(e){o&&o.fire("PreProcess",e)},onPostProcess:function(e){o&&o.fire("PostProcess",e)},addTempAttr:v,trimHtml:m,getTrimmedContent:g}}}),r(O,[],function(){function e(e){function t(t,n){var r,i=0,o,a,s,l,c,u,d=-1,f;if(r=t.duplicate(),r.collapse(n),f=r.parentElement(),f.ownerDocument===e.dom.doc){for(;"false"===f.contentEditable;)f=f.parentNode;if(!f.hasChildNodes())return{node:f,inside:1};for(s=f.children,o=s.length-1;o>=i;)if(u=Math.floor((i+o)/2),l=s[u],r.moveToElementText(l),d=r.compareEndPoints(n?"StartToStart":"EndToEnd",t),d>0)o=u-1;else{if(!(0>d))return{node:l};i=u+1}if(0>d)for(l?r.collapse(!1):(r.moveToElementText(f),r.collapse(!0),l=f,a=!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",1)&&f==r.parentElement();)c++;else for(r.collapse(!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",-1)&&f==r.parentElement();)c++;return{node:l,position:d,offset:c,inside:a}}}function n(){function n(e){var n=t(o,e),r,i,s=0,l,c,u;if(r=n.node,i=n.offset,n.inside&&!r.hasChildNodes())return void a[e?"setStart":"setEnd"](r,0);if(i===c)return void a[e?"setStartBefore":"setEndAfter"](r);if(n.position<0){if(l=n.inside?r.firstChild:r.nextSibling,!l)return void a[e?"setStartAfter":"setEndAfter"](r);if(!i)return void(3==l.nodeType?a[e?"setStart":"setEnd"](l,0):a[e?"setStartBefore":"setEndBefore"](l));for(;l;){if(3==l.nodeType&&(u=l.nodeValue,s+=u.length,s>=i)){r=l,s-=i,s=u.length-s;break}l=l.nextSibling}}else{if(l=r.previousSibling,!l)return a[e?"setStartBefore":"setEndBefore"](r);if(!i)return void(3==r.nodeType?a[e?"setStart":"setEnd"](l,r.nodeValue.length):a[e?"setStartAfter":"setEndAfter"](l));for(;l;){if(3==l.nodeType&&(s+=l.nodeValue.length,s>=i)){r=l,s-=i;break}l=l.previousSibling}}a[e?"setStart":"setEnd"](r,s)}var o=e.getRng(),a=i.createRng(),s,l,c,u,d;if(s=o.item?o.item(0):o.parentElement(),s.ownerDocument!=i.doc)return a;if(l=e.isCollapsed(),o.item)return a.setStart(s.parentNode,i.nodeIndex(s)),a.setEnd(a.startContainer,a.startOffset+1),a;try{n(!0),l||n()}catch(f){if(-2147024809!=f.number)throw f;d=r.getBookmark(2),c=o.duplicate(),c.collapse(!0),s=c.parentElement(),l||(c=o.duplicate(),c.collapse(!1),u=c.parentElement(),u.innerHTML=u.innerHTML),s.innerHTML=s.innerHTML,r.moveToBookmark(d),o=e.getRng(),n(!0),l||n()}return a}var r=this,i=e.dom,o=!1;this.getBookmark=function(n){function r(e){var t,n,r,o,a=[];for(t=e.parentNode,n=i.getRoot().parentNode;t!=n&&9!==t.nodeType;){for(r=t.children,o=r.length;o--;)if(e===r[o]){a.push(o);break}e=t,t=t.parentNode}return a}function o(e){var n;return n=t(a,e),n?{position:n.position,offset:n.offset,indexes:r(n.node),inside:n.inside}:void 0}var a=e.getRng(),s={};return 2===n&&(a.item?s.start={ctrl:!0,indexes:r(a.item(0))}:(s.start=o(!0),e.isCollapsed()||(s.end=o()))),s},this.moveToBookmark=function(e){function t(e){var t,n,r,o;for(t=i.getRoot(),n=e.length-1;n>=0;n--)o=t.children,r=e[n],r<=o.length-1&&(t=o[r]);return t}function n(n){var i=e[n?"start":"end"],a,s,l,c;i&&(a=i.position>0,s=o.createTextRange(),s.moveToElementText(t(i.indexes)),c=i.offset,c!==l?(s.collapse(i.inside||a),s.moveStart("character",a?-c:c)):s.collapse(n),r.setEndPoint(n?"StartToStart":"EndToStart",s),n&&r.collapse(!0))}var r,o=i.doc.body;e.start&&(e.start.ctrl?(r=o.createControlRange(),r.addElement(t(e.start.indexes)),r.select()):(r=o.createTextRange(),n(!0),n(),r.select()))},this.addRange=function(t){function n(e){var t,n,a,d,p;a=i.create("a"),t=e?s:c,n=e?l:u,d=r.duplicate(),t!=f&&t!=f.documentElement||(t=h,n=0),3==t.nodeType?(t.parentNode.insertBefore(a,t),d.moveToElementText(a),d.moveStart("character",n),i.remove(a),r.setEndPoint(e?"StartToStart":"EndToEnd",d)):(p=t.childNodes,p.length?(n>=p.length?i.insertAfter(a,p[p.length-1]):t.insertBefore(a,p[n]),d.moveToElementText(a)):t.canHaveHTML&&(t.innerHTML="",a=t.firstChild,d.moveToElementText(a),d.collapse(o)),r.setEndPoint(e?"StartToStart":"EndToEnd",d),i.remove(a))}var r,a,s,l,c,u,d,f=e.dom.doc,h=f.body,p,m;if(s=t.startContainer,l=t.startOffset,c=t.endContainer,u=t.endOffset,r=h.createTextRange(),s==c&&1==s.nodeType){if(l==u&&!s.hasChildNodes()){if(s.canHaveHTML)return d=s.previousSibling,d&&!d.hasChildNodes()&&i.isBlock(d)?d.innerHTML="":d=null,s.innerHTML="",r.moveToElementText(s.lastChild),r.select(),i.doc.selection.clear(),s.innerHTML="",void(d&&(d.innerHTML=""));l=i.nodeIndex(s),s=s.parentNode}if(l==u-1)try{if(m=s.childNodes[l],a=h.createControlRange(),a.addElement(m),a.select(),p=e.getRng(),p.item&&m===p.item(0))return}catch(g){}}n(!0),n(),r.select()},this.getRangeAt=n}return e}),r(I,[d],function(e){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey||this.metaKeyPressed(e)},metaKeyPressed:function(t){return e.mac?t.metaKey:t.ctrlKey&&!t.altKey}}}),r(F,[I,m,u,d,_],function(e,t,n,r,i){var o=i.isContentEditableFalse;return function(i,a){function s(e){var t=a.settings.object_resizing;return t===!1||r.iOS?!1:("string"!=typeof t&&(t="table,img,div"),"false"===e.getAttribute("data-mce-resize")?!1:e==a.getBody()?!1:a.dom.is(e,t))}function l(t){var n,r,i,o,s;n=t.screenX-B,r=t.screenY-D,F=n*R[2]+P,z=r*R[3]+H,F=5>F?5:F,z=5>z?5:z,i="IMG"==_.nodeName&&a.settings.resize_img_proportional!==!1?!e.modifierPressed(t):e.modifierPressed(t)||"IMG"==_.nodeName&&R[2]*R[3]!==0,i&&($(n)>$(r)?(z=q(F*O),F=q(z/O)):(F=q(z/O),z=q(F*O))),N.setStyles(S,{width:F,height:z}),o=R.startPos.x+n,s=R.startPos.y+r,o=o>0?o:0,s=s>0?s:0,N.setStyles(k,{left:o,top:s,display:"block"}),k.innerHTML=F+" × "+z,R[2]<0&&S.clientWidth<=F&&N.setStyle(S,"left",L+(P-F)),R[3]<0&&S.clientHeight<=z&&N.setStyle(S,"top",M+(H-z)),n=j.scrollWidth-Y,r=j.scrollHeight-X,n+r!==0&&N.setStyles(k,{left:o-n,top:s-r}),I||(a.fire("ObjectResizeStart",{target:_,width:P,height:H}),I=!0)}function c(){function e(e,t){t&&(_.style[e]||!a.schema.isValid(_.nodeName.toLowerCase(),e)?N.setStyle(_,e,t):N.setAttrib(_,e,t))}I=!1,e("width",F),e("height",z),N.unbind(U,"mousemove",l),N.unbind(U,"mouseup",c),W!=U&&(N.unbind(W,"mousemove",l),N.unbind(W,"mouseup",c)),N.remove(S),N.remove(k),V&&"TABLE"!=_.nodeName||u(_),a.fire("ObjectResized",{target:_,width:F,height:z}),N.setAttrib(_,"style",N.getAttrib(_,"style")),a.nodeChanged()}function u(e,t,n){var i,o,u,f,h;d(),b(),i=N.getPos(e,j),L=i.x,M=i.y,h=e.getBoundingClientRect(),o=h.width||h.right-h.left,u=h.height||h.bottom-h.top,_!=e&&(y(),_=e,F=z=0),f=a.fire("ObjectSelected",{target:e}),s(e)&&!f.isDefaultPrevented()?E(T,function(e,i){function a(t){B=t.screenX,D=t.screenY,P=_.clientWidth,H=_.clientHeight,O=H/P,R=e,e.startPos={x:o*e[0]+L,y:u*e[1]+M},Y=j.scrollWidth,X=j.scrollHeight,S=_.cloneNode(!0),N.addClass(S,"mce-clonedresizable"),N.setAttrib(S,"data-mce-bogus","all"),S.contentEditable=!1,S.unSelectabe=!0,N.setStyles(S,{left:L,top:M,margin:0}),S.removeAttribute("data-mce-selected"),j.appendChild(S),N.bind(U,"mousemove",l),N.bind(U,"mouseup",c),W!=U&&(N.bind(W,"mousemove",l),N.bind(W,"mouseup",c)),k=N.add(j,"div",{"class":"mce-resize-helper","data-mce-bogus":"all"},P+" × "+H)}var s;return t?void(i==t&&a(n)):(s=N.get("mceResizeHandle"+i),s&&N.remove(s),s=N.add(j,"div",{id:"mceResizeHandle"+i,"data-mce-bogus":"all","class":"mce-resizehandle",unselectable:!0,style:"cursor:"+i+"-resize; margin:0; padding:0"}),r.ie&&(s.contentEditable=!1),N.bind(s,"mousedown",function(e){e.stopImmediatePropagation(),e.preventDefault(),a(e)}),e.elm=s,void N.setStyles(s,{left:o*e[0]+L-s.offsetWidth/2,top:u*e[1]+M-s.offsetHeight/2}))}):d(),_.setAttribute("data-mce-selected","1")}function d(){var e,t;b(),_&&_.removeAttribute("data-mce-selected");for(e in T)t=N.get("mceResizeHandle"+e),t&&(N.unbind(t),N.remove(t))}function f(e){function t(e,t){if(e)do if(e===t)return!0;while(e=e.parentNode)}var n,r;if(!I&&!a.removed)return E(N.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),r="mousedown"==e.type?e.target:i.getNode(),r=N.$(r).closest(V?"table":"table,img,hr")[0],t(r,j)&&(C(),n=i.getStart(!0),t(n,r)&&t(i.getEnd(!0),r)&&(!V||r!=n&&"IMG"!==n.nodeName))?void u(r):void d()}function h(e,t,n){e&&e.attachEvent&&e.attachEvent("on"+t,n)}function p(e,t,n){e&&e.detachEvent&&e.detachEvent("on"+t,n)}function m(e){var t=e.srcElement,n,r,i,o,s,l,c;n=t.getBoundingClientRect(),l=A.clientX-n.left,c=A.clientY-n.top;for(r in T)if(i=T[r],o=t.offsetWidth*i[0],s=t.offsetHeight*i[1],$(o-l)<8&&$(s-c)<8){R=i;break}I=!0,a.fire("ObjectResizeStart",{target:_,width:_.clientWidth,height:_.clientHeight}),a.getDoc().selection.empty(),u(t,r,A)}function g(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function v(e){var t=e.srcElement;if(o(t))return void g(e);if(t!=_){if(a.fire("ObjectSelected",{target:t}),y(),0===t.id.indexOf("mceResizeHandle"))return void(e.returnValue=!1);"IMG"!=t.nodeName&&"TABLE"!=t.nodeName||(d(),_=t,h(t,"resizestart",m))}}function y(){p(_,"resizestart",m)}function b(){for(var e in T){var t=T[e];t.elm&&(N.unbind(t.elm),delete t.elm)}}function C(){try{a.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}}function x(e){var t;if(V){t=U.body.createControlRange();try{return t.addElement(e),t.select(),!0}catch(n){}}}function w(){_=S=null,V&&(y(),p(j,"controlselect",v))}var N=a.dom,E=t.each,_,S,k,T,R,A,B,D,L,M,P,H,O,I,F,z,U=a.getDoc(),W=document,V=r.ie&&r.ie<11,$=Math.abs,q=Math.round,j=a.getBody(),Y,X;T={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var K=".mce-content-body";return a.contentStyles.push(K+" div.mce-resizehandle {position: absolute;border: 1px solid black;box-sizing: box-sizing;background: #FFF;width: 7px;height: 7px;z-index: 10000}"+K+" .mce-resizehandle:hover {background: #000}"+K+" img[data-mce-selected],"+K+" hr[data-mce-selected] {outline: 1px solid black;resize: none}"+K+" .mce-clonedresizable {position: absolute;"+(r.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"+K+" .mce-resize-helper {background: #555;background: rgba(0,0,0,0.75);border-radius: 3px;border: 1px;color: white;display: none;font-family: sans-serif;font-size: 12px;white-space: nowrap;line-height: 14px;margin: 5px 10px;padding: 5px;position: absolute;z-index: 10001}"),a.on("init",function(){V?(a.on("ObjectResized",function(e){"TABLE"!=e.target.nodeName&&(d(),x(e.target))}),h(j,"controlselect",v),a.on("mousedown",function(e){A=e})):(C(),r.ie>=11&&(a.on("mousedown click",function(e){var t=e.target.nodeName;!I&&/^(TABLE|IMG|HR)$/.test(t)&&(a.selection.select(e.target,"TABLE"==t),"mousedown"==e.type&&a.nodeChanged())}),a.dom.bind(j,"mscontrolselect",function(e){function t(e){n.setEditorTimeout(a,function(){a.selection.select(e)})}return o(e.target)?(e.preventDefault(),void t(e.target)):void(/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"==e.target.tagName&&t(e.target)))})));var e=n.throttle(function(e){a.composing||f(e)});a.on("nodechange ResizeEditor ResizeWindow drop",e),a.on("keyup compositionend",function(t){_&&"TABLE"==_.nodeName&&e(t)}),a.on("hide blur",d)}),a.on("remove",b),{isResizable:s,showResizeRect:u,hideResizeRect:d,updateResizeRect:f,controlSelect:x,destroy:w}}}),r(z,[],function(){function e(e){return function(){return e}}function t(e){return function(t){return!e(t)}}function n(e,t){return function(n){return e(t(n))}}function r(){var e=a.call(arguments);return function(t){for(var n=0;n=e.length?e.apply(this,t.slice(1)):function(){var e=t.concat([].slice.call(arguments));return o.apply(this,e)}}var a=[].slice;return{constant:e,negate:t,and:i, -or:r,curry:o,compose:n}}),r(U,[_,p,k],function(e,t,n){function r(e){return m(e)?!1:d(e)?!f(e.parentNode):h(e)||u(e)||p(e)||c(e)}function i(e,t){for(e=e.parentNode;e&&e!=t;e=e.parentNode){if(c(e))return!1;if(l(e))return!0}return!0}function o(e){return c(e)?t.reduce(e.getElementsByTagName("*"),function(e,t){return e||l(t)},!1)!==!0:!1}function a(e){return h(e)||o(e)}function s(e,t){return r(e)&&i(e,t)}var l=e.isContentEditableTrue,c=e.isContentEditableFalse,u=e.isBr,d=e.isText,f=e.matchNodeNames("script style textarea"),h=e.matchNodeNames("img input textarea hr iframe video audio object"),p=e.matchNodeNames("table"),m=n.isCaretContainer;return{isCaretCandidate:r,isInEditable:i,isAtomic:a,isEditableCaretCandidate:s}}),r(W,[],function(){function e(e){return e?{left:u(e.left),top:u(e.top),bottom:u(e.bottom),right:u(e.right),width:u(e.width),height:u(e.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0}}function t(t,n){return t=e(t),n?t.right=t.left:(t.left=t.left+t.width,t.right=t.left),t.width=0,t}function n(e,t){return e.left===t.left&&e.top===t.top&&e.bottom===t.bottom&&e.right===t.right}function r(e,t,n){return e>=0&&e<=Math.min(t.height,n.height)/2}function i(e,t){return e.bottomt.bottom?!1:r(t.top-e.bottom,e,t)}function o(e,t){return e.top>t.bottom?!0:e.bottomt.right}function l(e,t){return i(e,t)?-1:o(e,t)?1:a(e,t)?-1:s(e,t)?1:0}function c(e,t,n){return t>=e.left&&t<=e.right&&n>=e.top&&n<=e.bottom}var u=Math.round;return{clone:e,collapse:t,isEqual:n,isAbove:i,isBelow:o,isLeft:a,isRight:s,compare:l,containsXY:c}}),r(V,[],function(){function e(e){return"string"==typeof e&&e.charCodeAt(0)>=768&&t.test(e)}var t=new RegExp("[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\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\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\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\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1abe\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20dd-\u20e0\u20e1\u20e2-\u20e4\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\ua670-\ua672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]");return{isExtendingChar:e}}),r($,[z,_,w,T,U,W,V],function(e,t,n,r,i,o,a){function s(e){return e&&/[\r\n\t ]/.test(e)}function l(e){var t=e.startContainer,n=e.startOffset,r;return!!(s(e.toString())&&g(t.parentNode)&&(r=t.data,s(r[n-1])||s(r[n+1])))}function c(e){function t(e){var t=e.ownerDocument,n=t.createRange(),r=t.createTextNode("\xa0"),i=e.parentNode,a;return i.insertBefore(r,e),n.setStart(r,0),n.setEnd(r,1),a=o.clone(n.getBoundingClientRect()),i.removeChild(r),a}function n(e){var n,r;return r=e.getClientRects(),n=r.length>0?o.clone(r[0]):o.clone(e.getBoundingClientRect()),y(e)&&0===n.left?t(e):n}function r(e,t){return e=o.collapse(e,t),e.width=1,e.right=e.left+1,e}function i(e){0!==e.height&&(c.length>0&&o.isEqual(e,c[c.length-1])||c.push(e))}function s(e,t){var o=e.ownerDocument.createRange();if(t0&&(o.setStart(e,t-1),o.setEnd(e,t),l(o)||i(r(n(o),!1))),t=t.data.length:n>=t.childNodes.length}function a(){var e;return e=t.ownerDocument.createRange(),e.setStart(t,n),e.setEnd(t,n),e}function s(){return r||(r=c(new u(t,n))),r}function l(){return s().length>0}function d(e){return e&&t===e.container()&&n===e.offset()}function f(e){return C(t,e?n-1:n)}return{container:e.constant(t),offset:e.constant(n),toRange:a,getClientRects:s,isVisible:l,isAtStart:i,isAtEnd:o,isEqual:d,getNode:f}}var d=t.isElement,f=i.isCaretCandidate,h=t.matchStyleValues("display","block table"),p=t.matchStyleValues("float","left right"),m=e.and(d,f,e.negate(p)),g=e.negate(t.matchStyleValues("white-space","pre pre-line pre-wrap")),v=t.isText,y=t.isBr,b=n.nodeIndex,C=r.getNode;return u.fromRangeStart=function(e){return new u(e.startContainer,e.startOffset)},u.fromRangeEnd=function(e){return new u(e.endContainer,e.endOffset)},u.after=function(e){return new u(e.parentNode,b(e)+1)},u.before=function(e){return new u(e.parentNode,b(e))},u}),r(q,[_,w,z,p,$],function(e,t,n,r,i){function o(e){var t=e.parentNode;return v(t)?o(t):t}function a(e){return e?r.reduce(e.childNodes,function(e,t){return v(t)&&"BR"!=t.nodeName?e=e.concat(a(t)):e.push(t),e},[]):[]}function s(e,t){for(;(e=e.previousSibling)&&g(e);)t+=e.data.length;return t}function l(e){return function(t){return e===t}}function c(t){var n,i,s;return n=a(o(t)),i=r.findIndex(n,l(t),t),n=n.slice(0,i+1),s=r.reduce(n,function(e,t,r){return g(t)&&g(n[r-1])&&e++,e},0),n=r.filter(n,e.matchNodeNames(t.nodeName)),i=r.findIndex(n,l(t),t),i-s}function u(e){var t;return t=g(e)?"text()":e.nodeName.toLowerCase(),t+"["+c(e)+"]"}function d(e,t,n){var r=[];for(t=t.parentNode;t!=e&&(!n||!n(t));t=t.parentNode)r.push(t);return r}function f(t,i){var o,a,l=[],c,f,h;return o=i.container(),a=i.offset(),g(o)?c=s(o,a):(f=o.childNodes,a>=f.length?(c="after",a=f.length-1):c="before",o=f[a]),l.push(u(o)),h=d(t,o),h=r.filter(h,n.negate(e.isBogus)),l=l.concat(r.map(h,function(e){return u(e)})),l.reverse().join("/")+","+c}function h(t,n,i){var o=a(t);return o=r.filter(o,function(e,t){return!g(e)||!g(o[t-1])}),o=r.filter(o,e.matchNodeNames(n)),o[i]}function p(e,t){for(var n=e,r=0,o;g(n);){if(o=n.data.length,t>=r&&r+o>=t){e=n,t-=r;break}if(!g(n.nextSibling)){e=n,t=o;break}r+=o,n=n.nextSibling}return t>e.data.length&&(t=e.data.length),new i(e,t)}function m(e,t){var n,o,a;return t?(n=t.split(","),t=n[0].split("/"),a=n.length>1?n[1]:"before",o=r.reduce(t,function(e,t){return(t=/([\w\-\(\)]+)\[([0-9]+)\]/.exec(t))?("text()"===t[1]&&(t[1]="#text"),h(e,t[1],parseInt(t[2],10))):null},e),o?g(o)?p(o,parseInt(a,10)):(a="after"===a?y(o)+1:y(o),new i(o.parentNode,a)):null):null}var g=e.isText,v=e.isBogus,y=t.nodeIndex;return{create:f,resolve:m}}),r(j,[d,m,k,q,$,_],function(e,t,n,r,i,o){function a(a){var l=a.dom;this.getBookmark=function(e,c){function u(e,n){var r=0;return t.each(l.select(e),function(e){return"all"!==e.getAttribute("data-mce-bogus")?e==n?!1:void r++:void 0}),r}function d(e){function t(t){var n,r,i,o=t?"start":"end";n=e[o+"Container"],r=e[o+"Offset"],1==n.nodeType&&"TR"==n.nodeName&&(i=n.childNodes,n=i[Math.min(t?r:r-1,i.length-1)],n&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r)))}return t(!0),t(),e}function f(e){function t(e,t){var r=e[t?"startContainer":"endContainer"],i=e[t?"startOffset":"endOffset"],o=[],a,s,u=0;if(3==r.nodeType){if(c)for(a=r.previousSibling;a&&3==a.nodeType;a=a.previousSibling)i+=a.nodeValue.length;o.push(i)}else s=r.childNodes,i>=s.length&&s.length&&(u=1,i=Math.max(0,s.length-1)),o.push(l.nodeIndex(s[i],c)+u);for(;r&&r!=n;r=r.parentNode)o.push(l.nodeIndex(r,c));return o}var n=l.getRoot(),r={};return r.start=t(e,!0),a.isCollapsed()||(r.end=t(e)),r}function h(e){function t(e){var t;if(n.isCaretContainer(e)){if(o.isText(e)&&n.isCaretContainerBlock(e)&&(e=e.parentNode),t=e.previousSibling,s(t))return t;if(t=e.nextSibling,s(t))return t}}return t(e.startContainer)||t(e.endContainer)}var p,m,g,v,y,b,C="",x;if(2==e)return b=a.getNode(),y=b?b.nodeName:null,p=a.getRng(),s(b)||"IMG"==y?{name:y,index:u(y,b)}:a.tridentSel?a.tridentSel.getBookmark(e):(b=h(p),b?(y=b.tagName,{name:y,index:u(y,b)}):f(p));if(3==e)return p=a.getRng(),{start:r.create(l.getRoot(),i.fromRangeStart(p)),end:r.create(l.getRoot(),i.fromRangeEnd(p))};if(e)return{rng:a.getRng()};if(p=a.getRng(),g=l.uniqueId(),v=a.isCollapsed(),x="overflow:hidden;line-height:0px",p.duplicate||p.item){if(p.item)return b=p.item(0),y=b.nodeName,{name:y,index:u(y,b)};m=p.duplicate();try{p.collapse(),p.pasteHTML(''+C+""),v||(m.collapse(!1),p.moveToElementText(m.parentElement()),0===p.compareEndPoints("StartToEnd",m)&&m.move("character",-1),m.pasteHTML(''+C+""))}catch(w){return null}}else{if(b=a.getNode(),y=b.nodeName,"IMG"==y)return{name:y,index:u(y,b)};m=d(p.cloneRange()),v||(m.collapse(!1),m.insertNode(l.create("span",{"data-mce-type":"bookmark",id:g+"_end",style:x},C))),p=d(p),p.collapse(!0),p.insertNode(l.create("span",{"data-mce-type":"bookmark",id:g+"_start",style:x},C))}return a.moveToBookmark({id:g,keep:1}),{id:g}},this.moveToBookmark=function(n){function i(e){var t=n[e?"start":"end"],r,i,o,a;if(t){for(o=t[0],i=d,r=t.length-1;r>=1;r--){if(a=i.childNodes,t[r]>a.length-1)return;i=a[t[r]]}3===i.nodeType&&(o=Math.min(t[0],i.nodeValue.length)),1===i.nodeType&&(o=Math.min(t[0],i.childNodes.length)),e?u.setStart(i,o):u.setEnd(i,o)}return!0}function o(r){var i=l.get(n.id+"_"+r),o,a,s,c,u=n.keep;if(i&&(o=i.parentNode,"start"==r?(u?(o=i.firstChild,a=1):a=l.nodeIndex(i),f=h=o,p=m=a):(u?(o=i.firstChild,a=1):a=l.nodeIndex(i),h=o,m=a),!u)){for(c=i.previousSibling,s=i.nextSibling,t.each(t.grep(i.childNodes),function(e){3==e.nodeType&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});i=l.get(n.id+"_"+r);)l.remove(i,1);c&&s&&c.nodeType==s.nodeType&&3==c.nodeType&&!e.opera&&(a=c.nodeValue.length,c.appendData(s.nodeValue),l.remove(s),"start"==r?(f=h=c,p=m=a):(h=c,m=a))}}function s(t){return!l.isBlock(t)||t.innerHTML||e.ie||(t.innerHTML='
'),t}function c(){var e,t;return e=l.createRng(),t=r.resolve(l.getRoot(),n.start),e.setStart(t.container(),t.offset()),t=r.resolve(l.getRoot(),n.end),e.setEnd(t.container(),t.offset()),e}var u,d,f,h,p,m;if(n)if(t.isArray(n.start)){if(u=l.createRng(),d=l.getRoot(),a.tridentSel)return a.tridentSel.moveToBookmark(n);i(!0)&&i()&&a.setRng(u)}else"string"==typeof n.start?a.setRng(c(n)):n.id?(o("start"),o("end"),f&&(u=l.createRng(),u.setStart(s(f),p),u.setEnd(s(h),m),a.setRng(u))):n.name?a.select(l.select(n.name)[n.index]):n.rng&&a.setRng(n.rng)}}var s=o.isContentEditableFalse;return a.isBookmarkNode=function(e){return e&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")},a}),r(Y,[y,O,F,T,j,_,d,m],function(e,n,r,i,o,a,s,l){function c(e,t,i,a){var s=this;s.dom=e,s.win=t,s.serializer=i,s.editor=a,s.bookmarkManager=new o(s),s.controlSelection=new r(s,a),s.win.getSelection||(s.tridentSel=new n(s))}var u=l.each,d=l.trim,f=s.ie;return c.prototype={setCursorLocation:function(e,t){var n=this,r=n.dom.createRng();e?(r.setStart(e,t),r.setEnd(e,t),n.setRng(r),n.collapse(!1)):(n._moveEndPoint(r,n.editor.getBody(),!0),n.setRng(r))},getContent:function(e){var n=this,r=n.getRng(),i=n.dom.create("body"),o=n.getSel(),a,s,l;return e=e||{},a=s="",e.get=!0,e.format=e.format||"html",e.selection=!0,n.editor.fire("BeforeGetContent",e),"text"==e.format?n.isCollapsed()?"":r.text||(o.toString?o.toString():""):(r.cloneContents?(l=r.cloneContents(),l&&i.appendChild(l)):r.item!==t||r.htmlText!==t?(i.innerHTML="
"+(r.item?r.item(0).outerHTML:r.htmlText),i.removeChild(i.firstChild)):i.innerHTML=r.toString(),/^\s/.test(i.innerHTML)&&(a=" "),/\s+$/.test(i.innerHTML)&&(s=" "),e.getInner=!0,e.content=n.isCollapsed()?"":a+n.serializer.serialize(i,e)+s,n.editor.fire("GetContent",e),e.content)},setContent:function(e,t){var n=this,r=n.getRng(),i,o=n.win.document,a,s;if(t=t||{format:"html"},t.set=!0,t.selection=!0,t.content=e,t.no_events||n.editor.fire("BeforeSetContent",t),e=t.content,r.insertNode){e+='_',r.startContainer==o&&r.endContainer==o?o.body.innerHTML=e:(r.deleteContents(),0===o.body.childNodes.length?o.body.innerHTML=e:r.createContextualFragment?r.insertNode(r.createContextualFragment(e)):(a=o.createDocumentFragment(),s=o.createElement("div"),a.appendChild(s),s.outerHTML=e,r.insertNode(a))),i=n.dom.get("__caret"),r=o.createRange(),r.setStartBefore(i),r.setEndBefore(i),n.setRng(r),n.dom.remove("__caret");try{n.setRng(r)}catch(l){}}else r.item&&(o.execCommand("Delete",!1,null),r=n.getRng()),/^\s+/.test(e)?(r.pasteHTML('_'+e),n.dom.remove("__mce_tmp")):r.pasteHTML(e);t.no_events||n.editor.fire("SetContent",t)},getStart:function(e){var t=this,n=t.getRng(),r,i,o,a;if(n.duplicate||n.item){if(n.item)return n.item(0);for(o=n.duplicate(),o.collapse(1),r=o.parentElement(),r.ownerDocument!==t.dom.doc&&(r=t.dom.getRoot()),i=a=n.parentElement();a=a.parentNode;)if(a==r){r=i;break}return r}return r=n.startContainer,1==r.nodeType&&r.hasChildNodes()&&(e&&n.collapsed||(r=r.childNodes[Math.min(r.childNodes.length-1,n.startOffset)])),r&&3==r.nodeType?r.parentNode:r},getEnd:function(e){var t=this,n=t.getRng(),r,i;return n.duplicate||n.item?n.item?n.item(0):(n=n.duplicate(),n.collapse(0),r=n.parentElement(),r.ownerDocument!==t.dom.doc&&(r=t.dom.getRoot()),r&&"BODY"==r.nodeName?r.lastChild||r:r):(r=n.endContainer,i=n.endOffset,1==r.nodeType&&r.hasChildNodes()&&(e&&n.collapsed||(r=r.childNodes[i>0?i-1:i])),r&&3==r.nodeType?r.parentNode:r)},getBookmark:function(e,t){return this.bookmarkManager.getBookmark(e,t)},moveToBookmark:function(e){return this.bookmarkManager.moveToBookmark(e)},select:function(e,t){var n=this,r=n.dom,i=r.createRng(),o;if(n.lastFocusBookmark=null,e){if(!t&&n.controlSelection.controlSelect(e))return;o=r.nodeIndex(e),i.setStart(e.parentNode,o),i.setEnd(e.parentNode,o+1),t&&(n._moveEndPoint(i,e,!0),n._moveEndPoint(i,e)),n.setRng(i)}return e},isCollapsed:function(){var e=this,t=e.getRng(),n=e.getSel();return!t||t.item?!1:t.compareEndPoints?0===t.compareEndPoints("StartToEnd",t):!n||t.collapsed},collapse:function(e){var t=this,n=t.getRng(),r;n.item&&(r=n.item(0),n=t.win.document.body.createTextRange(),n.moveToElementText(r)),n.collapse(!!e),t.setRng(n)},getSel:function(){var e=this.win;return e.getSelection?e.getSelection():e.document.selection},getRng:function(e){function t(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}}var n=this,r,i,o,a,s,l;if(!n.win)return null;if(a=n.win.document,!e&&n.lastFocusBookmark){var c=n.lastFocusBookmark;return c.startContainer?(i=a.createRange(),i.setStart(c.startContainer,c.startOffset),i.setEnd(c.endContainer,c.endOffset)):i=c,i}if(e&&n.tridentSel)return n.tridentSel.getRangeAt(0);try{(r=n.getSel())&&(i=r.rangeCount>0?r.getRangeAt(0):r.createRange?r.createRange():a.createRange())}catch(u){}if(l=n.editor.fire("GetSelectionRange",{range:i}),l.range!==i)return l.range;if(f&&i&&i.setStart&&a.selection){try{s=a.selection.createRange()}catch(u){}s&&s.item&&(o=s.item(0),i=a.createRange(),i.setStartBefore(o),i.setEndAfter(o))}return i||(i=a.createRange?a.createRange():a.body.createTextRange()),i.setStart&&9===i.startContainer.nodeType&&i.collapsed&&(o=n.dom.getRoot(),i.setStart(o,0),i.setEnd(o,0)),n.selectedRange&&n.explicitRange&&(0===t(i.START_TO_START,i,n.selectedRange)&&0===t(i.END_TO_END,i,n.selectedRange)?i=n.explicitRange:(n.selectedRange=null,n.explicitRange=null)),i},setRng:function(e,t){var n=this,r,i,o;if(e)if(e.select){n.explicitRange=null;try{e.select()}catch(a){}}else if(n.tridentSel){if(e.cloneRange)try{n.tridentSel.addRange(e)}catch(a){}}else{if(r=n.getSel(),o=n.editor.fire("SetSelectionRange",{range:e}),e=o.range,r){n.explicitRange=e;try{r.removeAllRanges(),r.addRange(e)}catch(a){}t===!1&&r.extend&&(r.collapse(e.endContainer,e.endOffset),r.extend(e.startContainer,e.startOffset)),n.selectedRange=r.rangeCount>0?r.getRangeAt(0):null}e.collapsed||e.startContainer!=e.endContainer||!r.setBaseAndExtent||s.ie||e.endOffset-e.startOffset<2&&e.startContainer.hasChildNodes()&&(i=e.startContainer.childNodes[e.startOffset],i&&"IMG"==i.tagName&&n.getSel().setBaseAndExtent(i,0,i,1))}},setNode:function(e){var t=this;return t.setContent(t.dom.getOuterHTML(e)),e},getNode:function(){function e(e,t){for(var n=e;e&&3===e.nodeType&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}var t=this,n=t.getRng(),r,i,o,a,s,l=t.dom.getRoot();return n?(i=n.startContainer,o=n.endContainer,a=n.startOffset,s=n.endOffset,n.setStart?(r=n.commonAncestorContainer,!n.collapsed&&(i==o&&2>s-a&&i.hasChildNodes()&&(r=i.childNodes[a]),3===i.nodeType&&3===o.nodeType&&(i=i.length===a?e(i.nextSibling,!0):i.parentNode,o=0===s?e(o.previousSibling,!1):o.parentNode,i&&i===o))?i:r&&3==r.nodeType?r.parentNode:r):(r=n.item?n.item(0):n.parentElement(),r.ownerDocument!==t.win.document&&(r=l),r)):l},getSelectedBlocks:function(t,n){var r=this,i=r.dom,o,a,s=[];if(a=i.getRoot(),t=i.getParent(t||r.getStart(),i.isBlock),n=i.getParent(n||r.getEnd(),i.isBlock),t&&t!=a&&s.push(t),t&&n&&t!=n){o=t;for(var l=new e(t,a);(o=l.next())&&o!=n;)i.isBlock(o)&&s.push(o)}return n&&t!=n&&n!=a&&s.push(n),s},isForward:function(){var e=this.dom,t=this.getSel(),n,r;return t&&t.anchorNode&&t.focusNode?(n=e.createRng(),n.setStart(t.anchorNode,t.anchorOffset),n.collapse(!0),r=e.createRng(),r.setStart(t.focusNode,t.focusOffset),r.collapse(!0),n.compareBoundaryPoints(n.START_TO_START,r)<=0):!0},normalize:function(){var e=this,t=e.getRng();return s.range&&new i(e.dom).normalize(t)&&e.setRng(t,e.isForward()),t},selectorChanged:function(e,t){var n=this,r;return n.selectorChangedData||(n.selectorChangedData={},r={},n.editor.on("NodeChange",function(e){var t=e.element,i=n.dom,o=i.getParents(t,null,i.getRoot()),a={};u(n.selectorChangedData,function(e,t){u(o,function(n){return i.is(n,t)?(r[t]||(u(e,function(e){e(!0,{node:n,selector:t,parents:o})}),r[t]=e),a[t]=e,!1):void 0})}),u(r,function(e,n){a[n]||(delete r[n],u(e,function(e){e(!1,{node:t,selector:n,parents:o})}))})})),n.selectorChangedData[e]||(n.selectorChangedData[e]=[]),n.selectorChangedData[e].push(t),n},getScrollContainer:function(){for(var e,t=this.dom.getRoot();t&&"BODY"!=t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e,t){function n(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}}var r,i,o=this,s=o.dom,l=s.getRoot(),c,u,d=0;if(a.isElement(e)){if(t===!1&&(d=e.offsetHeight),"BODY"!=l.nodeName){var f=o.getScrollContainer();if(f)return r=n(e).y-n(f).y+d,u=f.clientHeight,c=f.scrollTop,void((c>r||r+25>c+u)&&(f.scrollTop=c>r?r:r-u+25))}i=s.getViewPort(o.editor.getWin()),r=s.getPos(e).y+d,c=i.y,u=i.h,(rc+u)&&o.editor.getWin().scrollTo(0,c>r?r:r-u+25)}},placeCaretAt:function(e,t){this.setRng(i.getCaretRangeFromPoint(e,t,this.editor.getDoc()))},_moveEndPoint:function(t,n,r){var i=n,o=new e(n,i),a=this.dom.schema.getNonEmptyElements();do{if(3==n.nodeType&&0!==d(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(a[n.nodeName]&&!/^(TD|TH)$/.test(n.nodeName))return void(r?t.setStartBefore(n):"BR"==n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(s.ie&&s.ie<11&&this.dom.isBlock(n)&&this.dom.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?o.next():o.prev());"BODY"==i.nodeName&&(r?t.setStart(i,0):t.setEnd(i,i.childNodes.length))},destroy:function(){this.win=null,this.controlSelection.destroy()}},c}),r(X,[j,m],function(e,t){function n(t){this.compare=function(n,i){function o(e){var n={};return r(t.getAttribs(e),function(r){var i=r.nodeName.toLowerCase();0!==i.indexOf("_")&&"style"!==i&&"data-mce-style"!==i&&"data-mce-fragment"!=i&&(n[i]=t.getAttrib(e,i))}),n}function a(e,t){var n,r;for(r in e)if(e.hasOwnProperty(r)){if(n=t[r],"undefined"==typeof n)return!1;if(e[r]!=n)return!1;delete t[r]}for(r in t)if(t.hasOwnProperty(r))return!1;return!0}return n.nodeName!=i.nodeName?!1:a(o(n),o(i))&&a(t.parseStyle(t.getAttrib(n,"style")),t.parseStyle(t.getAttrib(i,"style")))?!e.isBookmarkNode(n)&&!e.isBookmarkNode(i):!1}}var r=t.each;return n}),r(K,[m],function(e){function t(e,t){function r(e){return e.replace(/%(\w+)/g,"")}var i,o,a=e.dom,s="",l,c;if(c=e.settings.preview_styles,c===!1)return"";if(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),"string"==typeof t){if(t=e.formatter.get(t),!t)return;t=t[0]}return i=t.block||t.inline||"span",o=a.create(i),n(t.styles,function(e,t){e=r(e),e&&a.setStyle(o,t,e)}),n(t.attributes,function(e,t){e=r(e),e&&a.setAttrib(o,t,e)}),n(t.classes,function(e){e=r(e),a.hasClass(o,e)||a.addClass(o,e)}),e.fire("PreviewFormats"),a.setStyles(o,{position:"absolute",left:-65535}),e.getBody().appendChild(o),l=a.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,n(c.split(" "),function(t){var n=a.getStyle(o,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=a.getStyle(e.getBody(),t,!0),"#ffffff"==a.toHex(n).toLowerCase())||"color"==t&&"#000000"==a.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(s+="padding:0 2px;"),s+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),a.remove(o),s}var n=e.each;return{getCssText:t}}),r(G,[p,_,g],function(e,t,n){function r(e,t){var n=o[e];n||(o[e]=n=[]),o[e].push(t)}function i(e,t){s(o[e],function(e){e(t)})}var o=[],a=e.filter,s=e.each;return r("pre",function(r){function i(t){return c(t.previousSibling)&&-1!=e.indexOf(u,t.previousSibling)}function o(e,t){n(t).remove(),n(e).append("

").append(t.childNodes)}var l=r.selection.getRng(),c,u;c=t.matchNodeNames("pre"),l.collapsed||(u=r.selection.getSelectedBlocks(),s(a(a(u,c),i),function(e){o(e.previousSibling,e)}))}),{postProcess:i}}),r(J,[y,T,j,X,m,K,G],function(e,t,n,r,i,o,a){return function(s){function l(e){return e.nodeType&&(e=e.nodeName),!!s.schema.getTextBlockElements()[e.toLowerCase()]}function c(e){return/^(TH|TD)$/.test(e.nodeName)}function u(e){return e&&/^(IMG)$/.test(e.nodeName)}function d(e,t){return Y.getParents(e,t,Y.getRoot())}function f(e){return 1===e.nodeType&&"_mce_caret"===e.id}function h(){g({valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure.image",collapsed:!1,classes:"align-left",ceFalseOverride:!0},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},inherit:!1,defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},inherit:!1,defaultBlock:"div"},{selector:"figure.image",collapsed:!1,classes:"align-center",ceFalseOverride:!0},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure.image",collapsed:!1,classes:"align-right",ceFalseOverride:!0},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},inherit:!1,defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"}}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},inherit:!1,defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},links:!0,remove_similar:!0},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(e,t,n){ue(n,function(t,n){Y.setAttrib(e,n,t)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]}),ue("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){g(e,{block:e,remove:"all"})}),g(s.settings.formats)}function p(){s.addShortcut("meta+b","bold_desc","Bold"),s.addShortcut("meta+i","italic_desc","Italic"),s.addShortcut("meta+u","underline_desc","Underline");for(var e=1;6>=e;e++)s.addShortcut("access+"+e,"",["FormatBlock",!1,"h"+e]);s.addShortcut("access+7","",["FormatBlock",!1,"p"]),s.addShortcut("access+8","",["FormatBlock",!1,"div"]),s.addShortcut("access+9","",["FormatBlock",!1,"address"])}function m(e){return e?j[e]:j}function g(e,t){e&&("string"!=typeof e?ue(e,function(e,t){g(t,e)}):(t=t.length?t:[t],ue(t,function(e){e.deep===oe&&(e.deep=!e.selector),e.split===oe&&(e.split=!e.selector||e.inline),e.remove===oe&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),j[e]=t))}function v(e){return e&&j[e]&&delete j[e],j}function y(e,t){var n=m(t);if(n)for(var r=0;r0)return r;if(r.childNodes.length>1||r==t||"BR"==r.tagName)return r}}var n=s.selection.getRng(),i=n.startContainer,o=n.endContainer;if(i!=o&&0===n.endOffset){var a=t(i,o),l=3==a.nodeType?a.data.length:a.childNodes.length;n.setEnd(a,l)}return n}function c(e,r,o){var a=[],s,c,h=!0;s=d.inline||d.block,c=Y.create(s),i(c),K.walk(e,function(e){function r(e){var m,v,y,b,C;return C=h,m=e.nodeName.toLowerCase(),v=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&ae(e)&&(C=h,h="true"===ae(e),b=!0),B(m,"br")?(p=0,void(d.block&&Y.remove(e))):d.wrapper&&E(e,t,n)?void(p=0):h&&!b&&d.block&&!d.wrapper&&l(m)&&G(v,s)?(e=Y.rename(e,s),i(e),a.push(e),void(p=0)):d.selector&&(ue(u,function(t){return"collapsed"in t&&t.collapsed!==g?void 0:Y.is(e,t.selector)&&!f(e)?(i(e,t),y=!0,!1):void 0}),!d.inline||y)?void(p=0):void(!h||b||!G(s,m)||!G(v,s)||!o&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||f(e)||d.inline&&J(e)?(p=0,ue(de(e.childNodes),r),b&&(h=C),p=0):(p||(p=Y.clone(c,ne),e.parentNode.insertBefore(p,e),a.push(p)),p.appendChild(e)))}var p;ue(e,r)}),d.links===!0&&ue(a,function(e){function t(e){"A"===e.nodeName&&i(e,d),ue(de(e.childNodes),t)}t(e)}),ue(a,function(e){function r(e){var t=0;return ue(e.childNodes,function(e){P(e)||ce(e)||t++}),t}function o(e){var t,n;return ue(e.childNodes,function(e){return 1!=e.nodeType||ce(e)||f(e)?void 0:(t=e,ne)}),t&&!ce(t)&&A(t,d)&&(n=Y.clone(t,ne),i(n),Y.replace(n,e,re),Y.remove(t,1)),n||e}var s;if(s=r(e),(a.length>1||!J(e))&&0===s)return void Y.remove(e,1);if(d.inline||d.wrapper){if(d.exact||1!==s||(e=o(e)),ue(u,function(t){ue(Y.select(t.inline,e),function(e){ce(e)||F(t,n,e,t.exact?e:null)})}),E(e.parentNode,t,n))return Y.remove(e,1),e=0,re;d.merge_with_parents&&Y.getParent(e.parentNode,function(r){return E(r,t,n)?(Y.remove(e,1),e=0,re):void 0}),e&&d.merge_siblings!==!1&&(e=W(U(e),e),e=W(e,U(e,re)))}})}var u=m(t),d=u[0],h,p,g=!r&&X.isCollapsed();if("false"!==ae(X.getNode())){if(d){if(r)r.nodeType?(p=Y.createRng(),p.setStartBefore(r),p.setEndAfter(r),c(O(p,u),null,!0)):c(r,null,!0);else if(g&&d.inline&&!Y.select("td[data-mce-selected],th[data-mce-selected]").length)$("apply",t,n);else{var v=s.selection.getNode();Q||!u[0].defaultBlock||Y.getParent(v,Y.isBlock)||x(u[0].defaultBlock),s.selection.setRng(o()),h=X.getBookmark(),c(O(X.getRng(re),u),h),d.styles&&(d.styles.color||d.styles.textDecoration)&&(fe(v,C,"childNodes"),C(v)),X.moveToBookmark(h),q(X.getRng(re)),s.nodeChanged()}a.postProcess(t,s)}}else{r=X.getNode();for(var y=0,b=u.length;b>y;y++)if(u[y].ceFalseOverride&&Y.is(r,u[y].selector))return void i(r,u[y])}}function w(e,t,n,r){function i(e){var n,r,o,a,s;if(1===e.nodeType&&ae(e)&&(a=y,y="true"===ae(e),s=!0),n=de(e.childNodes),y&&!s)for(r=0,o=h.length;o>r&&!F(h[r],t,e,e);r++);if(p.deep&&n.length){for(r=0,o=n.length;o>r;r++)i(n[r]);s&&(y=a)}}function o(n){var i;return ue(d(n.parentNode).reverse(),function(n){var o;i||"_start"==n.id||"_end"==n.id||(o=E(n,e,t,r),o&&o.split!==!1&&(i=n))}),i}function a(e,n,r,i){var o,a,s,l,c,u;if(e){for(u=e.parentNode,o=n.parentNode;o&&o!=u;o=o.parentNode){for(a=Y.clone(o,ne),c=0;cC&&(!h[C].ceFalseOverride||!F(h[C],t,n,n));C++);}}function N(e,t,n){var r=m(e);!_(e,t,n)||"toggle"in r[0]&&!r[0].toggle?x(e,t,n):w(e,t,n)}function E(e,t,n,r){function i(e,t,i){var o,a,s=t[i],l;if(t.onmatch)return t.onmatch(e,t,i);if(s)if(s.length===oe){for(o in s)if(s.hasOwnProperty(o)){if(a="attributes"===i?Y.getAttrib(e,o):D(e,o),r&&!a&&!t.exact)return;if((!r||t.exact)&&!B(a,L(M(s[o],n),o)))return}}else for(l=0;l=0;o--){if(a=t[o].selector,!a||t[o].defaultBlock)return re;for(i=r.length-1;i>=0;i--)if(Y.is(r[i],a))return re}return ne}function T(e,t,n){var r;return ie||(ie={},r={},s.on("NodeChange",function(e){var t=d(e.element),n={};t=i.grep(t,function(e){return 1==e.nodeType&&!e.getAttribute("data-mce-bogus")}),ue(ie,function(e,i){ue(t,function(o){return E(o,i,{},e.similar)?(r[i]||(ue(e,function(e){e(!0,{node:o,format:i,parents:t})}),r[i]=e),n[i]=e,!1):y(o,i)?!1:void 0})}),ue(r,function(i,o){n[o]||(delete r[o],ue(i,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),ue(e.split(","),function(e){ie[e]||(ie[e]=[],ie[e].similar=n),ie[e].push(t)}),this}function R(e){return o.getCssText(s,e)}function A(e,t){return B(e,t.inline)?re:B(e,t.block)?re:t.selector?1==e.nodeType&&Y.is(e,t.selector):void 0}function B(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()==t.toLowerCase()}function D(e,t){return L(Y.getStyle(e,t),t)}function L(e,t){return"color"!=t&&"backgroundColor"!=t||(e=Y.toHex(e)),"fontWeight"==t&&700==e&&(e="bold"),"fontFamily"==t&&(e=e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+e}function M(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e}function P(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)}function H(e,t,n){var r=Y.create(t,n);return e.parentNode.insertBefore(r,e),r.appendChild(e),r}function O(t,n,r){function i(e){function t(e){return"BR"==e.nodeName&&e.getAttribute("data-mce-bogus")&&!e.nextSibling}var r,i,o,a,s;if(r=i=e?g:y,a=e?"previousSibling":"nextSibling",s=Y.getRoot(),3==r.nodeType&&!P(r)&&(e?v>0:bo?n:o,-1===n||r||n++):(n=a.indexOf(" ",t),o=a.indexOf("\xa0",t),n=-1!==n&&(-1===o||o>n)?n:o),n}var a,l,c,u;if(3===t.nodeType){if(c=o(t,n),-1!==c)return{container:t,offset:c};u=t}for(a=new e(t,Y.getParent(t,J)||s.getBody());l=a[i?"prev":"next"]();)if(3===l.nodeType){if(u=l,c=o(l),-1!==c)return{container:l,offset:c}}else if(J(l))break;return u?(n=i?0:u.length,{container:u,offset:n}):void 0}function u(e,r){var i,o,a,s;for(3==e.nodeType&&0===e.nodeValue.length&&e[r]&&(e=e[r]),i=d(e),o=0;oh?h:v],3==g.nodeType&&(v=0)),1==y.nodeType&&y.hasChildNodes()&&(h=y.childNodes.length-1,y=y.childNodes[b>h?h:b-1],3==y.nodeType&&(b=y.nodeValue.length)),g=a(g),y=a(y),(ce(g.parentNode)||ce(g))&&(g=ce(g)?g:g.parentNode,g=g.nextSibling||g,3==g.nodeType&&(v=0)),(ce(y.parentNode)||ce(y))&&(y=ce(y)?y:y.parentNode,y=y.previousSibling||y,3==y.nodeType&&(b=y.length)),n[0].inline&&(t.collapsed&&(m=c(g,v,!0),m&&(g=m.container,v=m.offset),m=c(y,b),m&&(y=m.container,b=m.offset)),p=o(y,b),p.node)){for(;p.node&&0===p.offset&&p.node.previousSibling;)p=o(p.node.previousSibling);p.node&&p.offset>0&&3===p.node.nodeType&&" "===p.node.nodeValue.charAt(p.offset-1)&&p.offset>1&&(y=p.node,y.splitText(p.offset-1))}return(n[0].inline||n[0].block_expand)&&(n[0].inline&&3==g.nodeType&&0!==v||(g=i(!0)),n[0].inline&&3==y.nodeType&&b!==y.nodeValue.length||(y=i())),n[0].selector&&n[0].expand!==ne&&!n[0].inline&&(g=u(g,"previousSibling"),y=u(y,"nextSibling")),(n[0].block||n[0].selector)&&(g=f(g,"previousSibling"),y=f(y,"nextSibling"),n[0].block&&(J(g)||(g=i(!0)),J(y)||(y=i()))),1==g.nodeType&&(v=Z(g),g=g.parentNode),1==y.nodeType&&(b=Z(y)+1,y=y.parentNode),{startContainer:g,startOffset:v,endContainer:y,endOffset:b}}function I(e,t){return t.links&&"A"==e.tagName}function F(e,t,n,r){var i,o,a;if(!A(n,e)&&!I(n,e))return ne;if("all"!=e.remove)for(ue(e.styles,function(i,o){i=L(M(i,t),o),"number"==typeof o&&(o=i,r=0),(e.remove_similar||!r||B(D(r,o),i))&&Y.setStyle(n,o,""),a=1}),a&&""===Y.getAttrib(n,"style")&&(n.removeAttribute("style"),n.removeAttribute("data-mce-style")),ue(e.attributes,function(e,i){var o;if(e=M(e,t),"number"==typeof i&&(i=e,r=0),!r||B(Y.getAttrib(r,i),e)){if("class"==i&&(e=Y.getAttrib(n,i),e&&(o="",ue(e.split(/\s+/),function(e){/mce\-\w+/.test(e)&&(o+=(o?" ":"")+e)}),o)))return void Y.setAttrib(n,i,o);"class"==i&&n.removeAttribute("className"),te.test(i)&&n.removeAttribute("data-mce-"+i),n.removeAttribute(i)}}),ue(e.classes,function(e){e=M(e,t),r&&!Y.hasClass(r,e)||Y.removeClass(n,e)}),o=Y.getAttribs(n),i=0;io?o:i]),3===r.nodeType&&n&&i>=r.nodeValue.length&&(r=new e(r,s.getBody()).next()||r),3!==r.nodeType||n||0!==i||(r=new e(r,s.getBody()).prev()||r),r}function $(t,n,r,i){function o(e){var t=Y.create("span",{id:g,"data-mce-bogus":!0,style:v?"color:red":""});return e&&t.appendChild(s.getDoc().createTextNode(ee)),t}function a(e,t){for(;e;){if(3===e.nodeType&&e.nodeValue!==ee||e.childNodes.length>1)return!1;t&&1===e.nodeType&&t.push(e),e=e.firstChild}return!0}function c(e){for(;e;){if(e.id===g)return e;e=e.parentNode}}function u(t){var n;if(t)for(n=new e(t,t),t=n.current();t;t=n.next())if(3===t.nodeType)return t}function d(e,t){var n,r;if(e)r=X.getRng(!0),a(e)?(t!==!1&&(r.setStartBefore(e),r.setEndBefore(e)),Y.remove(e)):(n=u(e),n.nodeValue.charAt(0)===ee&&(n.deleteData(0,1),r.startContainer==n&&r.startOffset>0&&r.setStart(n,r.startOffset-1),r.endContainer==n&&r.endOffset>0&&r.setEnd(n,r.endOffset-1)),Y.remove(e,1)),X.setRng(r);else if(e=c(X.getStart()),!e)for(;e=Y.get(g);)d(e,!1)}function f(){var e,t,i,a,s,l,d;e=X.getRng(!0),a=e.startOffset,l=e.startContainer,d=l.nodeValue,t=c(X.getStart()),t&&(i=u(t)),d&&a>0&&a=0;h--)u.appendChild(Y.clone(f[h],!1)),u=u.firstChild;u.appendChild(Y.doc.createTextNode(ee)),u=u.firstChild;var g=Y.getParent(d,l);g&&Y.isEmpty(g)?d.parentNode.replaceChild(p,d):Y.insertAfter(p,d),X.setCursorLocation(u,1),Y.isEmpty(d)&&Y.remove(d)}}function p(){var e;e=c(X.getStart()),e&&!Y.isEmpty(e)&&fe(e,function(e){1!=e.nodeType||e.id===g||Y.isEmpty(e)||Y.setAttrib(e,"data-mce-bogus",null)},"childNodes")}var g="_mce_caret",v=s.settings.caret_debug;s._hasCaretEvents||(le=function(){var e=[],t;if(a(c(X.getStart()),e))for(t=e.length;t--;)Y.setAttrib(e[t],"data-mce-bogus","1")},se=function(e){var t=e.keyCode;d(),8==t&&X.isCollapsed()&&X.getStart().innerHTML==ee&&d(c(X.getStart())),37!=t&&39!=t||d(c(X.getStart())),p()},s.on("SetContent",function(e){e.selection&&p()}),s._hasCaretEvents=!0),"apply"==t?f():h()}function q(t){var n=t.startContainer,r=t.startOffset,i,o,a,s,l;if((t.startContainer!=t.endContainer||!u(t.startContainer.childNodes[t.startOffset]))&&(3==n.nodeType&&r>=n.nodeValue.length&&(r=Z(n),n=n.parentNode,i=!0),1==n.nodeType))for(s=n.childNodes,n=s[Math.min(r,s.length-1)],o=new e(n,Y.getParent(n,Y.isBlock)),(r>s.length-1||i)&&o.next(),a=o.current();a;a=o.next())if(3==a.nodeType&&!P(a))return l=Y.create("a",{"data-mce-bogus":"all"},ee),a.parentNode.insertBefore(l,a),t.setStart(a,0),X.setRng(t),void Y.remove(l)}var j={},Y=s.dom,X=s.selection,K=new t(Y),G=s.schema.isValidChild,J=Y.isBlock,Q=s.settings.forced_root_block,Z=Y.nodeIndex,ee="\ufeff",te=/^(src|href|style)$/,ne=!1,re=!0,ie,oe,ae=Y.getContentEditable,se,le,ce=n.isBookmarkNode,ue=i.each,de=i.grep,fe=i.walk,he=i.extend;he(this,{get:m,register:g,unregister:v,apply:x,remove:w,toggle:N,match:_,matchAll:S,matchNode:E,canApply:k,formatChanged:T,getCssText:R}),h(),p(),s.on("BeforeGetContent",function(e){le&&"raw"!=e.format&&le()}),s.on("mouseup keydown",function(e){se&&se(e)})}}),r(Q,[I,d],function(e,t){return function(e){function n(){return e.serializer.getTrimmedContent()}function r(t){e.setDirty(t)}function i(e){o.typing=!1,o.add({},e)}var o=this,a=0,s=[],l,c,u=0;return e.on("init",function(){o.add()}),e.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&o.beforeChange()}),e.on("ExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&i(e)}),e.on("ObjectResizeStart Cut",function(){o.beforeChange()}),e.on("SaveContent ObjectResized blur",i),e.on("DragEnd",i),e.on("KeyUp",function(a){var l=a.keyCode;a.isDefaultPrevented()||((l>=33&&36>=l||l>=37&&40>=l||45==l||13==l||a.ctrlKey)&&(i(),e.nodeChanged()),(46==l||8==l||t.mac&&(91==l||93==l))&&e.nodeChanged(),c&&o.typing&&(e.isDirty()||(r(s[0]&&n()!=s[0].content),e.isDirty()&&e.fire("change",{level:s[0],lastLevel:null})),e.fire("TypingUndo"),c=!1,e.nodeChanged()))}),e.on("KeyDown",function(e){var t=e.keyCode;if(!e.isDefaultPrevented()){if(t>=33&&36>=t||t>=37&&40>=t||45==t)return void(o.typing&&i(e));var n=e.ctrlKey&&!e.altKey||e.metaKey;!(16>t||t>20)||224==t||91==t||o.typing||n||(o.beforeChange(),o.typing=!0,o.add({},e),c=!0)}}),e.on("MouseDown",function(e){o.typing&&i(e)}),e.addShortcut("meta+z","","Undo"),e.addShortcut("meta+y,meta+shift+z","","Redo"),e.on("AddUndo Undo Redo ClearUndos",function(t){t.isDefaultPrevented()||e.nodeChanged()}),o={data:s,typing:!1,beforeChange:function(){u||(l=e.selection.getBookmark(2,!0))},add:function(t,i){var o,c=e.settings,d;if(t=t||{},t.content=n(),u||e.removed)return null;if(d=s[a],e.fire("BeforeAddUndo",{level:t,lastLevel:d,originalEvent:i}).isDefaultPrevented())return null;if(d&&d.content==t.content)return null;if(s[a]&&(s[a].beforeBookmark=l),c.custom_undo_redo_levels&&s.length>c.custom_undo_redo_levels){for(o=0;o0&&(r(!0),e.fire("change",f)),t},undo:function(){var t;return o.typing&&(o.add(),o.typing=!1),a>0&&(t=s[--a],e.setContent(t.content,{format:"raw"}),e.selection.moveToBookmark(t.beforeBookmark),r(!0),e.fire("undo",{level:t})),t},redo:function(){var t;return a0||o.typing&&s[0]&&n()!=s[0].content},hasRedo:function(){return aP)&&(u=a.create("br"),t.parentNode.insertBefore(u,t)),l.setStartBefore(t),l.setEndBefore(t)):(l.setStartAfter(t),l.setEndAfter(t)):(l.setStart(t,0),l.setEnd(t,0));s.setRng(l),a.remove(u),s.scrollIntoView(t)}}function y(e){var t=l.forced_root_block;t&&t.toLowerCase()===e.tagName.toLowerCase()&&a.setAttribs(e,l.forced_root_block_attrs)}function b(e){e.innerHTML=r?"":'
'}function C(e){var t=D,n,i,o,s=u.getTextInlineElements();if(e||"TABLE"==z?(n=a.create(e||W),y(n)):n=M.cloneNode(!1),o=n,l.keep_styles!==!1)do if(s[t.nodeName]){if("_mce_caret"==t.id)continue;i=t.cloneNode(!1),a.setAttrib(i,"id",""),n.hasChildNodes()?(i.appendChild(n.firstChild),n.appendChild(i)):(o=i,n.appendChild(i))}while((t=t.parentNode)&&t!=B);return r||(o.innerHTML='
'),n}function x(t){var n,r,i;if(3==D.nodeType&&(t?L>0:LD.childNodes.length-1,D=D.childNodes[Math.min(L,D.childNodes.length-1)]||D,L=V&&3==D.nodeType?D.nodeValue.length:0),B=S(D)){if(c.beforeChange(),!a.isBlock(B)&&B!=a.getRoot())return void(W&&!H||E());if((W&&!H||!W&&H)&&(D=w(D,L)),M=a.getParent(D,a.isBlock),F=M?a.getParent(M.parentNode,a.isBlock):null,z=M?M.nodeName.toUpperCase():"",U=F?F.nodeName.toUpperCase():"","LI"!=U||o.ctrlKey||(M=F,z=U),/^(LI|DT|DD)$/.test(z)){if(!W&&H)return void E();if(a.isEmpty(M))return void N()}if("PRE"==z&&l.br_in_pre!==!1){if(!H)return void E()}else if(!W&&!H&&"LI"!=z||W&&H)return void E();W&&M===i.getBody()||(W=W||"P",x()?T():x(!0)?(O=M.parentNode.insertBefore(C(),M),m(O),v(M)):(A=R.cloneRange(),A.setEndAfter(M),I=A.extractContents(),_(I),O=I.firstChild,a.insertAfter(I,M),g(O),k(M),a.isEmpty(M)&&b(M),O.normalize(),a.isEmpty(O)?(a.remove(O),T()):v(O)),a.setAttrib(O,"id",""),i.fire("NewBlock",{newBlock:O}),c.add())}}}var a=i.dom,s=i.selection,l=i.settings,c=i.undoManager,u=i.schema,d=u.getNonEmptyElements(),f=u.getMoveCaretBeforeOnEnterElements();i.on("keydown",function(e){13==e.keyCode&&o(e)!==!1&&e.preventDefault()})}}),r(ee,[],function(){return function(e){function t(){var t=i.getStart(),s=e.getBody(),l,c,u,d,f,h,p,m=-16777215,g,v,y,b,C;if(C=n.forced_root_block,t&&1===t.nodeType&&C){for(;t&&t!=s;){if(a[t.nodeName])return;t=t.parentNode}if(l=i.getRng(),l.setStart){c=l.startContainer,u=l.startOffset,d=l.endContainer,f=l.endOffset;try{v=e.getDoc().activeElement===s}catch(x){}}else l.item&&(t=l.item(0),l=e.getDoc().body.createTextRange(),l.moveToElementText(t)),v=l.parentElement().ownerDocument===e.getDoc(),y=l.duplicate(),y.collapse(!0),u=-1*y.move("character",m),y.collapsed||(y=l.duplicate(),y.collapse(!1),f=-1*y.move("character",m)-u);for(t=s.firstChild,b=s.nodeName.toLowerCase();t;)if((3===t.nodeType||1==t.nodeType&&!a[t.nodeName])&&o.isValidChild(b,C.toLowerCase())){if(3===t.nodeType&&0===t.nodeValue.length){p=t,t=t.nextSibling,r.remove(p);continue}h||(h=r.create(C,e.settings.forced_root_block_attrs),t.parentNode.insertBefore(h,t),g=!0),p=t,t=t.nextSibling,h.appendChild(p)}else h=null,t=t.nextSibling;if(g&&v){if(l.setStart)l.setStart(c,u),l.setEnd(d,f),i.setRng(l);else try{l=e.getDoc().body.createTextRange(),l.moveToElementText(s),l.collapse(!0),l.moveStart("character",u),f>0&&l.moveEnd("character",f),l.select()}catch(x){}e.nodeChanged()}}}var n=e.settings,r=e.dom,i=e.selection,o=e.schema,a=o.getBlockElements();n.forced_root_block&&e.on("NodeChange",t)}}),r(te,[z,y,_,$,k,U],function(e,t,n,r,i,o){function a(e){return e>0}function s(e){return 0>e}function l(e,n,r,i,o){var l=new t(e,i);if(s(n)){if(C(e)&&(e=l.prev(!0),r(e)))return e;for(;e=l.prev(o);)if(r(e))return e}if(a(n)){if(C(e)&&(e=l.next(!0),r(e)))return e;for(;e=l.next(o);)if(r(e))return e}return null}function c(e,t){for(e=e.parentNode;e&&e!=t;e=e.parentNode)if(b(e))return e;return t}function u(e,t){for(;e&&e!=t;){if(x(e))return e;e=e.parentNode}return null}function d(e,t,n){return u(e.container(),n)==u(t.container(),n)}function f(e,t,n){return c(e.container(),n)==c(t.container(),n)}function h(e,t){var n,r;return t?(n=t.container(),r=t.offset(),E(n)?n.childNodes[r+e]:null):null}function p(e,t){var n=t.ownerDocument.createRange();return e?(n.setStartBefore(t),n.setEndBefore(t)):(n.setStartAfter(t),n.setEndAfter(t)),n}function m(e,t,n){return u(t,e)==u(n,e)}function g(e,t,n){var r,i;for(i=e?"previousSibling":"nextSibling";n&&n!=t;){if(r=n[i],w(r)&&(r=r[i]),C(r)){if(m(t,r,n))return r;break}if(_(r))break;n=n.parentNode}return null}function v(e,t,r){var o,a,s,l,c=N(g,!0,t),u=N(g,!1,t);if(a=r.startContainer,s=r.startOffset,i.isCaretContainerBlock(a)){if(E(a)||(a=a.parentNode),l=a.getAttribute("data-mce-caret"),"before"==l&&(o=a.nextSibling,C(o)))return S(o);if("after"==l&&(o=a.previousSibling,C(o)))return k(o)}if(!r.collapsed)return r;if(n.isText(a)){if(w(a)){if(1===e){if(o=u(a))return S(o);if(o=c(a))return k(o)}if(-1===e){if(o=c(a))return k(o);if(o=u(a))return S(o)}return r}if(i.endsWithCaretContainer(a)&&s>=a.data.length-1)return 1===e&&(o=u(a))?S(o):r;if(i.startsWithCaretContainer(a)&&1>=s)return-1===e&&(o=c(a))?k(o):r;if(s===a.data.length)return o=u(a),o?S(o):r;if(0===s)return o=c(a),o?k(o):r}return r}function y(e,t){return C(h(e,t))}var b=n.isContentEditableTrue,C=n.isContentEditableFalse,x=n.matchStyleValues("display","block table table-cell table-caption"),w=i.isCaretContainer,N=e.curry,E=n.isElement,_=o.isCaretCandidate,S=N(p,!0),k=N(p,!1);return{isForwards:a,isBackwards:s,findNode:l,getEditingHost:c,getParentBlock:u,isInSameBlock:d,isInSameEditingHost:f,isBeforeContentEditableFalse:N(y,0),isAfterContentEditableFalse:N(y,-1),normalizeRange:v}}),r(ne,[_,U,$,te,p,z],function(e,t,n,r,i,o){function a(e,t){for(var n=[];e&&e!=t;)n.push(e),e=e.parentNode;return n}function s(e,t){return e.hasChildNodes()&&t0)return n(C,--x);if(m(e)&&x0&&(N=s(C,x-1),v(N)))return!y(N)&&(E=r.findNode(N,e,b,N))?f(E)?n(E,E.data.length):n.after(E):f(N)?n(N,N.data.length):n.before(N);if(m(e)&&x0&&s(e[e.length-1])?e.slice(0,-1):e},c=function(e,t){var n=e.getParent(t,e.isBlock);return n&&"LI"===n.nodeName?n:null},u=function(e,t){return!!c(e,t)},d=function(e,t){var n=t.cloneRange(),r=t.cloneRange();return n.setStartBefore(e),r.setEndAfter(e),[n.cloneContents(),r.cloneContents()]},f=function(e,r){var i=n.before(e),o=new t(r),a=o.next(i);return a?a.toRange():null},h=function(e,r){var i=n.after(e),o=new t(r),a=o.prev(i);return a?a.toRange():null},p=function(t,n,r,i){var o=d(t,i),a=t.parentNode;return a.insertBefore(o[0],t),e.each(n,function(e){a.insertBefore(e,t)}),a.insertBefore(o[1],t),a.removeChild(t),h(n[n.length-1],r)},m=function(t,n,r){var i=t.parentNode;return e.each(n,function(e){i.insertBefore(e,t)}),f(t,r)},g=function(e,t,n,r){return r.insertAfter(t.reverse(),e),h(t[0],n)},v=function(e,r,i,s){var u=o(r,e,s),d=c(r,i.startContainer),f=l(a(u.firstChild)),h=1,v=2,y=r.getRoot(),b=function(e){var o=n.fromRangeStart(i),a=new t(r.getRoot()),s=e===h?a.prev(o):a.next(o);return s?c(r,s.getNode())!==d:!0};return b(h)?m(d,f,y):b(v)?g(d,f,y,r):p(d,f,y,i)};return{isListFragment:r,insertAtCaret:v,isParentBlockLi:u,trimListItems:l,listItems:a}}),r(ie,[d,m,P,ne,$,X,_,re],function(e,t,n,r,i,o,a,s){var l=a.matchNodeNames("td th"),c=function(a,c){function u(e){function t(e){return r[e]&&3==r[e].nodeType}var n,r,i;return n=L.getRng(!0),r=n.startContainer,i=n.startOffset,3==r.nodeType&&(i>0?e=e.replace(/^ /," "):t("previousSibling")||(e=e.replace(/^ /," ")),i|)$/," "):t("nextSibling")||(e=e.replace(/( | )(
|)$/," "))),e}function d(){var e,t,n;e=L.getRng(!0),t=e.startContainer,n=e.startOffset,3==t.nodeType&&e.collapsed&&("\xa0"===t.data[n]?(t.deleteData(n,1),/[\u00a0| ]$/.test(c)||(c+=" ")):"\xa0"===t.data[n-1]&&(t.deleteData(n-1,1),/[\u00a0| ]$/.test(c)||(c=" "+c)))}function f(e){if(A)for(k=e.firstChild;k;k=k.walk(!0))D[k.name]&&k.attr("data-mce-new","true")}function h(){if(A){var e=a.getBody(),n=new o(M);t.each(M.select("*[data-mce-new]"),function(t){t.removeAttribute("data-mce-new");for(var r=t.parentNode;r&&r!=e;r=r.parentNode)n.compare(r,t)&&M.remove(t,!0)})}}function p(e){for(var t=e;t=t.walk();)1===t.type&&t.attr("data-mce-fragment","1")}function m(e){t.each(e.getElementsByTagName("*"),function(e){e.removeAttribute("data-mce-fragment")})}function g(e){return!!e.getAttribute("data-mce-fragment")}function v(e){return e&&!a.schema.getShortEndedElements()[e.nodeName]}function y(t){function n(e){for(var t=a.getBody();e&&e!==t;e=e.parentNode)if("false"===a.dom.getContentEditable(e))return e;return null}function o(e){var t=i.fromRangeStart(e),n=new r(a.getBody());return t=n.next(t),t?t.toRange():void 0}var s,c,u;if(t){if(L.scrollIntoView(t),s=n(t))return M.remove(t),void L.select(s);S=M.createRng(),k=t.previousSibling,k&&3==k.nodeType?(S.setStart(k,k.nodeValue.length),e.ie||(T=t.nextSibling,T&&3==T.nodeType&&(k.appendData(T.data),T.parentNode.removeChild(T)))):(S.setStartBefore(t),S.setEndBefore(t)),c=M.getParent(t,M.isBlock),M.remove(t),c&&M.isEmpty(c)&&(a.$(c).empty(),S.setStart(c,0),S.setEnd(c,0),l(c)||g(c)||!(u=o(S))?M.add(c,M.create("br",{"data-mce-bogus":"1"})):(S=u,M.remove(c))),L.setRng(S)}}var b,C,x,w,N,E,_,S,k,T,R,A,B,D=a.schema.getTextInlineElements(),L=a.selection,M=a.dom;"string"!=typeof c&&(A=c.merge,B=c.data,c=c.content),/^ | $/.test(c)&&(c=u(c)),b=a.parser,C=new n({validate:a.settings.validate},a.schema),R='​',E={content:c,format:"html",selection:!0},a.fire("BeforeSetContent",E),c=E.content,-1==c.indexOf("{$caret}")&&(c+="{$caret}"),c=c.replace(/\{\$caret\}/,R),S=L.getRng();var P=S.startContainer||(S.parentElement?S.parentElement():null),H=a.getBody();P===H&&L.isCollapsed()&&M.isBlock(H.firstChild)&&v(H.firstChild)&&M.isEmpty(H.firstChild)&&(S=M.createRng(),S.setStart(H.firstChild,0),S.setEnd(H.firstChild,0),L.setRng(S)),L.isCollapsed()||(a.selection.setRng(a.selection.getRng()),a.getDoc().execCommand("Delete",!1,null),d()),x=L.getNode();var O={context:x.nodeName.toLowerCase(),data:B};if(N=b.parse(c,O),s.isListFragment(N)&&s.isParentBlockLi(M,x))return S=s.insertAtCaret(C,M,a.selection.getRng(),N),a.selection.setRng(S),void a.fire("SetContent",E);if(p(N),f(N),k=N.lastChild,"mce_marker"==k.attr("id"))for(_=k,k=k.prev;k;k=k.walk(!0))if(3==k.type||!M.isBlock(k.name)){a.schema.isValidChild(k.parent.name,"span")&&k.parent.insert(_,k,"br"===k.name);break}if(a._selectionOverrides.showBlockCaretContainer(x),O.invalid){for(L.setContent(R),x=L.getNode(),w=a.getBody(),9==x.nodeType?x=k=w:k=x;k!==w;)x=k,k=k.parentNode; -c=x==w?w.innerHTML:M.getOuterHTML(x),c=C.serialize(b.parse(c.replace(//i,function(){return C.serialize(N)}))),x==w?M.setHTML(w,c):M.setOuterHTML(x,c)}else c=C.serialize(N),k=x.firstChild,T=x.lastChild,!k||k===T&&"BR"===k.nodeName?M.setHTML(x,c):L.setContent(c);h(),y(M.get("mce_marker")),m(a.getBody()),a.fire("SetContent",E),a.addVisual()};return{insertAtCaret:c}}),r(oe,[d,m,T,y,ie],function(e,n,r,i,o){var a=n.each,s=n.extend,l=n.map,c=n.inArray,u=n.explode,d=e.ie&&e.ie<11,f=!0,h=!1;return function(n){function p(e,t,r,i){var o,s,l=0;if(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||i&&i.skip_focus||n.focus(),i=n.fire("BeforeExecCommand",{command:e,ui:t,value:r}),i.isDefaultPrevented())return!1;if(s=e.toLowerCase(),o=B.exec[s])return o(s,t,r),n.fire("ExecCommand",{command:e,ui:t,value:r}),!0;if(a(n.plugins,function(i){return i.execCommand&&i.execCommand(e,t,r)?(n.fire("ExecCommand",{command:e,ui:t,value:r}),l=!0,!1):void 0}),l)return l;if(n.theme&&n.theme.execCommand&&n.theme.execCommand(e,t,r))return n.fire("ExecCommand",{command:e,ui:t,value:r}),!0;try{l=n.getDoc().execCommand(e,t,r)}catch(c){}return l?(n.fire("ExecCommand",{command:e,ui:t,value:r}),!0):!1}function m(e){var t;if(!n.quirks.isHidden()){if(e=e.toLowerCase(),t=B.state[e])return t(e);try{return n.getDoc().queryCommandState(e)}catch(r){}return!1}}function g(e){var t;if(!n.quirks.isHidden()){if(e=e.toLowerCase(),t=B.value[e])return t(e);try{return n.getDoc().queryCommandValue(e)}catch(r){}}}function v(e,t){t=t||"exec",a(e,function(e,n){a(n.toLowerCase().split(","),function(n){B[t][n]=e})})}function y(e,t,r){e=e.toLowerCase(),B.exec[e]=function(e,i,o,a){return t.call(r||n,i,o,a)}}function b(e){if(e=e.toLowerCase(),B.exec[e])return!0;try{return n.getDoc().queryCommandSupported(e)}catch(t){}return!1}function C(e,t,r){e=e.toLowerCase(),B.state[e]=function(){return t.call(r||n)}}function x(e,t,r){e=e.toLowerCase(),B.value[e]=function(){return t.call(r||n)}}function w(e){return e=e.toLowerCase(),!!B.exec[e]}function N(e,r,i){return r===t&&(r=h),i===t&&(i=null),n.getDoc().execCommand(e,r,i)}function E(e){return A.match(e)}function _(e,r){A.toggle(e,r?{value:r}:t),n.nodeChanged()}function S(e){L=R.getBookmark(e)}function k(){R.moveToBookmark(L)}var T,R,A,B={state:{},exec:{},value:{}},D=n.settings,L;n.on("PreInit",function(){T=n.dom,R=n.selection,D=n.settings,A=n.formatter}),s(this,{execCommand:p,queryCommandState:m,queryCommandValue:g,queryCommandSupported:b,addCommands:v,addCommand:y,addQueryStateHandler:C,addQueryValueHandler:x,hasCustomCommand:w}),v({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(t){var r=n.getDoc(),i;try{N(t)}catch(o){i=f}if("paste"!==t||r.queryCommandEnabled(t)||(i=!0),i||!r.queryCommandSupported(t)){var a=n.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");e.mac&&(a=a.replace(/Ctrl\+/g,"\u2318+")),n.notificationManager.open({text:a,type:"error"})}},unlink:function(){if(R.isCollapsed()){var e=R.getNode();return void("A"==e.tagName&&n.dom.remove(e,!0))}A.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone":function(e){var t=e.substring(7);"full"==t&&(t="justify"),a("left,center,right,justify".split(","),function(e){t!=e&&A.remove("align"+e)}),"none"!=t&&_("align"+t)},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;N(e),t=T.getParent(R.getNode(),"ol,ul"),t&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(S(),T.split(n,t),k()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){_(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){_(e,n)},FontSize:function(e,t,n){var r,i;n>=1&&7>=n&&(i=u(D.font_size_style_values),r=u(D.font_size_classes),n=r?r[n-1]||n:i[n-1]||n),_(e,n)},RemoveFormat:function(e){A.remove(e)},mceBlockQuote:function(){_("blockquote")},FormatBlock:function(e,t,n){return _(n||"p")},mceCleanup:function(){var e=R.getBookmark();n.setContent(n.getContent({cleanup:f}),{cleanup:f}),R.moveToBookmark(e)},mceRemoveNode:function(e,t,r){var i=r||R.getNode();i!=n.getBody()&&(S(),n.dom.remove(i,f),k())},mceSelectNodeDepth:function(e,t,r){var i=0;T.getParent(R.getNode(),function(e){return 1==e.nodeType&&i++==r?(R.select(e),h):void 0},n.getBody())},mceSelectNode:function(e,t,n){R.select(n)},mceInsertContent:function(e,t,r){o.insertAtCaret(n,r)},mceInsertRawHTML:function(e,t,r){R.setContent("tiny_mce_marker"),n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return r}))},mceToggleFormat:function(e,t,n){_(n)},mceSetContent:function(e,t,r){n.setContent(r)},"Indent,Outdent":function(e){var t,r,i;t=D.indentation,r=/[a-z%]+$/i.exec(t),t=parseInt(t,10),m("InsertUnorderedList")||m("InsertOrderedList")?N(e):(D.forced_root_block||T.getParent(R.getNode(),T.isBlock)||A.apply("div"),a(R.getSelectedBlocks(),function(o){if("false"!==T.getContentEditable(o)&&"LI"!=o.nodeName){var a=n.getParam("indent_use_margin",!1)?"margin":"padding";a+="rtl"==T.getStyle(o,"direction",!0)?"Right":"Left","outdent"==e?(i=Math.max(0,parseInt(o.style[a]||0,10)-t),T.setStyle(o,a,i?i+r:"")):(i=parseInt(o.style[a]||0,10)+t+r,T.setStyle(o,a,i))}}))},mceRepaint:function(){},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",!1,"
")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual,n.addVisual()},mceReplaceContent:function(e,t,r){n.execCommand("mceInsertContent",!1,r.replace(/\{\$selection\}/g,R.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=T.getParent(R.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||A.remove("link"),n.href&&A.apply("link",n,r)},selectAll:function(){var e=T.getRoot(),t;R.getRng().setStart?(t=T.createRng(),t.setStart(e,0),t.setEnd(e,e.childNodes.length),R.setRng(t)):(t=R.getRng(),t.item||(t.moveToElementText(e),t.select()))},"delete":function(){N("Delete");var e=n.getBody();T.isEmpty(e)&&(n.setContent(""),e.firstChild&&T.isBlock(e.firstChild)?n.selection.setCursorLocation(e.firstChild,0):n.selection.setCursorLocation(e,0))},mceNewDocument:function(){n.setContent("")},InsertLineBreak:function(e,t,o){function a(){for(var e=new i(m,v),t,r=n.schema.getNonEmptyElements();t=e.next();)if(r[t.nodeName.toLowerCase()]||t.length>0)return!0}var s=o,l,c,u,h=R.getRng(!0);new r(T).normalize(h);var p=h.startOffset,m=h.startContainer;if(1==m.nodeType&&m.hasChildNodes()){var g=p>m.childNodes.length-1;m=m.childNodes[Math.min(p,m.childNodes.length-1)]||m,p=g&&3==m.nodeType?m.nodeValue.length:0}var v=T.getParent(m,T.isBlock),y=v?v.nodeName.toUpperCase():"",b=v?T.getParent(v.parentNode,T.isBlock):null,C=b?b.nodeName.toUpperCase():"",x=s&&s.ctrlKey;"LI"!=C||x||(v=b,y=C),m&&3==m.nodeType&&p>=m.nodeValue.length&&(d||a()||(l=T.create("br"),h.insertNode(l),h.setStartAfter(l),h.setEndAfter(l),c=!0)),l=T.create("br"),h.insertNode(l);var w=T.doc.documentMode;return d&&"PRE"==y&&(!w||8>w)&&l.parentNode.insertBefore(T.doc.createTextNode("\r"),l),u=T.create("span",{}," "),l.parentNode.insertBefore(u,l),R.scrollIntoView(u),T.remove(u),c?(h.setStartBefore(l),h.setEndBefore(l)):(h.setStartAfter(l),h.setEndAfter(l)),R.setRng(h),n.undoManager.add(),f}}),v({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t="align"+e.substring(7),n=R.isCollapsed()?[T.getParent(R.getNode(),T.isBlock)]:R.getSelectedBlocks(),r=l(n,function(e){return!!A.matchNode(e,t)});return-1!==c(r,f)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return E(e)},mceBlockQuote:function(){return E("blockquote")},Outdent:function(){var e;if(D.inline_styles){if((e=T.getParent(R.getStart(),T.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return f;if((e=T.getParent(R.getEnd(),T.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return f}return m("InsertUnorderedList")||m("InsertOrderedList")||!D.inline_styles&&!!T.getParent(R.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var t=T.getParent(R.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),v({"FontSize,FontName":function(e){var t=0,n;return(n=T.getParent(R.getNode(),"span"))&&(t="fontsize"==e?n.style.fontSize:n.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),t}},"value"),v({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}}),r(ae,[m],function(e){function t(e,o){var a=this,s,l;if(e=r(e),o=a.settings=o||{},s=o.base_uri,/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))return void(a.source=e);var c=0===e.indexOf("//");0!==e.indexOf("/")||c||(e=(s?s.protocol||"http":"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(l=o.base_uri?o.base_uri.path:new t(location.href).directory,""===o.base_uri.protocol?e="//mce_host"+a.toAbsPath(l,e):(e=/([^#?]*)([#?]?.*)/.exec(e),e=(s&&s.protocol||"http")+"://mce_host"+a.toAbsPath(l,e[1])+e[2])),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),n(i,function(t,n){var r=e[n];r&&(r=r.replace(/\(mce_at\)/g,"@@")),a[t]=r}),s&&(a.protocol||(a.protocol=s.protocol),a.userInfo||(a.userInfo=s.userInfo),a.port||"mce_host"!==a.host||(a.port=s.port),a.host&&"mce_host"!==a.host||(a.host=s.host),a.source=""),c&&(a.protocol="")}var n=e.each,r=e.trim,i="source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),o={ftp:21,http:80,https:443,mailto:25};return t.prototype={setPath:function(e){var t=this;e=/^(.*?)\/?(\w+)?$/.exec(e),t.path=e[0],t.directory=e[1],t.file=e[2],t.source="",t.getURI()},toRelative:function(e){var n=this,r;if("./"===e)return e;if(e=new t(e,{base_uri:n}),"mce_host"!=e.host&&n.host!=e.host&&e.host||n.port!=e.port||n.protocol!=e.protocol&&""!==e.protocol)return e.getURI();var i=n.getURI(),o=e.getURI();return i==o||"/"==i.charAt(i.length-1)&&i.substr(0,i.length-1)==o?i:(r=n.toRelPath(n.path,e.path),e.query&&(r+="?"+e.query),e.anchor&&(r+="#"+e.anchor),r)},toAbsolute:function(e,n){return e=new t(e,{base_uri:this}),e.getURI(n&&this.isSameOrigin(e))},isSameOrigin:function(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;var t=o[this.protocol];if(t&&(this.port||t)==(e.port||t))return!0}return!1},toRelPath:function(e,t){var n,r=0,i="",o,a;if(e=e.substring(0,e.lastIndexOf("/")),e=e.split("/"),n=t.split("/"),e.length>=n.length)for(o=0,a=e.length;a>o;o++)if(o>=n.length||e[o]!=n[o]){r=o+1;break}if(e.lengtho;o++)if(o>=e.length||e[o]!=n[o]){r=o+1;break}if(1===r)return t;for(o=0,a=e.length-(r-1);a>o;o++)i+="../";for(o=r-1,a=n.length;a>o;o++)i+=o!=r-1?"/"+n[o]:n[o];return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),n(e,function(e){e&&o.push(e)}),e=o,r=t.length-1,o=[];r>=0;r--)0!==t[r].length&&"."!==t[r]&&(".."!==t[r]?i>0?i--:o.push(t[r]):i++);return r=e.length-i,s=0>=r?o.reverse().join("/"):e.slice(0,r).join("/")+"/"+o.reverse().join("/"),0!==s.indexOf("/")&&(s="/"+s),a&&s.lastIndexOf("/")!==s.length-1&&(s+=a),s},getURI:function(e){var t,n=this;return n.source&&!e||(t="",e||(t+=n.protocol?n.protocol+"://":"//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},t.parseDataUri=function(e){var t,n;return e=decodeURIComponent(e).split(","),n=/data:([^;]+)/.exec(e[0]),n&&(t=n[1]),{type:t,data:e[1]}},t.getDocumentBaseUrl=function(e){var t;return t=0!==e.protocol.indexOf("http")&&"file:"!==e.protocol?e.href:e.protocol+"//"+e.host+e.pathname,/^[^:]+:\/\/\/?[^\/]+\//.test(t)&&(t=t.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(t)||(t+="/")),t},t}),r(se,[m],function(e){function t(){}var n=e.each,r=e.extend,i,o;return t.extend=i=function(e){function t(){var e,t,n,r=this;if(!o&&(r.init&&r.init.apply(r,arguments),t=r.Mixins))for(e=t.length;e--;)n=t[e],n.init&&n.init.apply(r,arguments)}function a(){return this}function s(e,t){return function(){var n=this,r=n._super,i;return n._super=c[e],i=t.apply(n,arguments),n._super=r,i}}var l=this,c=l.prototype,u,d,f;o=!0,u=new l,o=!1,e.Mixins&&(n(e.Mixins,function(t){for(var n in t)"init"!==n&&(e[n]=t[n])}),c.Mixins&&(e.Mixins=c.Mixins.concat(e.Mixins))),e.Methods&&n(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&n(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){var t=this,r;return e!==r?(t[n]=e,t):t[n]}}),e.Statics&&n(e.Statics,function(e,n){t[n]=e}),e.Defaults&&c.Defaults&&(e.Defaults=r({},c.Defaults,e.Defaults));for(d in e)f=e[d],"function"==typeof f&&c[d]?u[d]=s(d,f):u[d]=f;return t.prototype=u,t.constructor=t,t.extend=i,t},t}),r(le,[m],function(e){function t(t){function n(){return!1}function r(){return!0}function i(e,i){var o,s,l,c;if(e=e.toLowerCase(),i=i||{},i.type=e,i.target||(i.target=u),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=r},i.stopPropagation=function(){i.isPropagationStopped=r},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=r},i.isDefaultPrevented=n,i.isPropagationStopped=n,i.isImmediatePropagationStopped=n),t.beforeFire&&t.beforeFire(i),o=d[e])for(s=0,l=o.length;l>s;s++){if(c=o[s],c.once&&a(e,c.func),i.isImmediatePropagationStopped())return i.stopPropagation(),i;if(c.func.call(u,i)===!1)return i.preventDefault(),i}return i}function o(t,r,i,o){var a,s,l;if(r===!1&&(r=n),r)for(r={func:r},o&&e.extend(r,o),s=t.toLowerCase().split(" "),l=s.length;l--;)t=s[l],a=d[t],a||(a=d[t]=[],f(t,!0)),i?a.unshift(r):a.push(r);return c}function a(e,t){var n,r,i,o,a;if(e)for(o=e.toLowerCase().split(" "),n=o.length;n--;){if(e=o[n],r=d[e],!e){for(i in d)f(i,!1),delete d[i];return c}if(r){if(t)for(a=r.length;a--;)r[a].func===t&&(r=r.slice(0,a).concat(r.slice(a+1)),d[e]=r);else r.length=0;r.length||(f(e,!1),delete d[e])}}else{for(e in d)f(e,!1);d={}}return c}function s(e,t,n){return o(e,t,n,{once:!0})}function l(e){return e=e.toLowerCase(),!(!d[e]||0===d[e].length)}var c=this,u,d={},f;t=t||{},u=t.scope||c,f=t.toggleEvent||n,c.fire=i,c.on=o,c.off=a,c.once=s,c.has=l}var n=e.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchend"," ");return t.isNative=function(e){return!!n[e.toLowerCase()]},t}),r(ce,[],function(){function e(e){this.create=e.create}return e.create=function(t,n){return new e({create:function(e,r){function i(t){e.set(r,t.value)}function o(e){t.set(n,e.value)}var a;return e.on("change:"+r,o),t.on("change:"+n,i),a=e._bindings,a||(a=e._bindings=[],e.on("destroy",function(){for(var e=a.length;e--;)a[e]()})),a.push(function(){t.off("change:"+n,i)}),t.get(n)}})},e}),r(ue,[le],function(e){function t(t){return t._eventDispatcher||(t._eventDispatcher=new e({scope:t,toggleEvent:function(n,r){e.isNative(n)&&t.toggleNativeEvent&&t.toggleNativeEvent(n,r)}})),t._eventDispatcher}return{fire:function(e,n,r){var i=this;if(i.removed&&"remove"!==e)return n;if(n=t(i).fire(e,n,r),r!==!1&&i.parent)for(var o=i.parent();o&&!n.isPropagationStopped();)o.fire(e,n,!1),o=o.parent();return n},on:function(e,n,r){return t(this).on(e,n,r)},off:function(e,n){return t(this).off(e,n)},once:function(e,n){return t(this).once(e,n)},hasEventListeners:function(e){return t(this).has(e)}}}),r(de,[ce,ue,se,m],function(e,t,n,r){function i(e){return e.nodeType>0}function o(e,t){var n,a;if(e===t)return!0;if(null===e||null===t)return e===t;if("object"!=typeof e||"object"!=typeof t)return e===t;if(r.isArray(t)){if(e.length!==t.length)return!1;for(n=e.length;n--;)if(!o(e[n],t[n]))return!1}if(i(e)||i(t))return e===t;a={};for(n in t){if(!o(e[n],t[n]))return!1;a[n]=!0}for(n in e)if(!a[n]&&!o(e[n],t[n]))return!1;return!0}return n.extend({Mixins:[t],init:function(t){var n,r;t=t||{};for(n in t)r=t[n],r instanceof e&&(t[n]=r.create(this,n));this.data=t},set:function(t,n){var r,i,a=this.data[t];if(n instanceof e&&(n=n.create(this,t)),"object"==typeof t){for(r in t)this.set(r,t[r]);return this}return o(a,n)||(this.data[t]=n,i={target:this,name:t,value:n,oldValue:a},this.fire("change:"+t,i),this.fire("change",i)),this},get:function(e){return this.data[e]},has:function(e){return e in this.data},bind:function(t){return e.create(this,t)},destroy:function(){this.fire("destroy")}})}),r(fe,[se],function(e){function t(e){for(var t=[],n=e.length,r;n--;)r=e[n],r.__checked||(t.push(r),r.__checked=1);for(n=t.length;n--;)delete t[n].__checked;return t}var n=/^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,r=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i=/^\s*|\s*$/g,o,a=e.extend({init:function(e){function t(e){return e?(e=e.toLowerCase(),function(t){return"*"===e||t.type===e}):void 0}function o(e){return e?function(t){return t._name===e}:void 0}function a(e){return e?(e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.classes.contains(e[n]))return!1;return!0}):void 0}function s(e,t,n){return e?function(r){var i=r[e]?r[e]():"";return t?"="===t?i===n:"*="===t?i.indexOf(n)>=0:"~="===t?(" "+i+" ").indexOf(" "+n+" ")>=0:"!="===t?i!=n:"^="===t?0===i.indexOf(n):"$="===t?i.substr(i.length-n.length)===n:!1:!!n}:void 0}function l(e){var t;return e?(e=/(?:not\((.+)\))|(.+)/i.exec(e),e[1]?(t=u(e[1],[]),function(e){return!d(e,t)}):(e=e[2],function(t,n,r){return"first"===e?0===n:"last"===e?n===r-1:"even"===e?n%2===0:"odd"===e?n%2===1:t[e]?t[e]():!1})):void 0}function c(e,r,c){function u(e){e&&r.push(e)}var d;return d=n.exec(e.replace(i,"")),u(t(d[1])),u(o(d[2])),u(a(d[3])),u(s(d[4],d[5],d[6])),u(l(d[7])),r.pseudo=!!d[7],r.direct=c,r}function u(e,t){var n=[],i,o,a;do if(r.exec(""),o=r.exec(e),o&&(e=o[3],n.push(o[1]),o[2])){i=o[3];break}while(o);for(i&&u(i,t),e=[],a=0;a"!=n[a]&&e.push(c(n[a],[],">"===n[a-1]));return t.push(e),t}var d=this.match;this._selectors=u(e,[])},match:function(e,t){var n,r,i,o,a,s,l,c,u,d,f,h,p;for(t=t||this._selectors,n=0,r=t.length;r>n;n++){for(a=t[n],o=a.length,p=e,h=0,i=o-1;i>=0;i--)for(c=a[i];p;){if(c.pseudo)for(f=p.parent().items(),u=d=f.length;u--&&f[u]!==p;);for(s=0,l=c.length;l>s;s++)if(!c[s](p,u,d)){s=l+1;break}if(s===l){h++;break}if(i===o-1)break;p=p.parent()}if(h===o)return!0}return!1},find:function(e){function n(e,t,i){var o,a,s,l,c,u=t[i];for(o=0,a=e.length;a>o;o++){for(c=e[o],s=0,l=u.length;l>s;s++)if(!u[s](c,o,a)){s=l+1;break}if(s===l)i==t.length-1?r.push(c):c.items&&n(c.items(),t,i+1);else if(u.direct)return;c.items&&n(c.items(),t,i)}}var r=[],i,s,l=this._selectors;if(e.items){for(i=0,s=l.length;s>i;i++)n(e.items(),l[i],0);s>1&&(r=t(r))}return o||(o=a.Collection),new o(r)}});return a}),r(he,[m,fe,se],function(e,t,n){var r,i,o=Array.prototype.push,a=Array.prototype.slice;return i={length:0,init:function(e){e&&this.add(e)},add:function(t){var n=this;return e.isArray(t)?o.apply(n,t):t instanceof r?n.add(t.toArray()):o.call(n,t),n},set:function(e){var t=this,n=t.length,r;for(t.length=0,t.add(e),r=t.length;n>r;r++)delete t[r];return t},filter:function(e){var n=this,i,o,a=[],s,l;for("string"==typeof e?(e=new t(e),l=function(t){return e.match(t)}):l=e,i=0,o=n.length;o>i;i++)s=n[i],l(s)&&a.push(s);return new r(a)},slice:function(){return new r(a.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(t){return e.each(this,t),this},toArray:function(){return e.toArray(this)},indexOf:function(e){for(var t=this,n=t.length;n--&&t[n]!==e;);return n},reverse:function(){return new r(e.toArray(this).reverse())},hasClass:function(e){return this[0]?this[0].classes.contains(e):!1},prop:function(e,t){var n=this,r,i;return t!==r?(n.each(function(n){n[e]&&n[e](t)}),n):(i=n[0],i&&i[e]?i[e]():void 0)},exec:function(t){var n=this,r=e.toArray(arguments).slice(1);return n.each(function(e){e[t]&&e[t].apply(e,r)}),n},remove:function(){for(var e=this.length;e--;)this[e].remove();return this},addClass:function(e){return this.each(function(t){t.classes.add(e)})},removeClass:function(e){return this.each(function(t){t.classes.remove(e)})}},e.each("fire on off show hide append prepend before after reflow".split(" "),function(t){i[t]=function(){var n=e.toArray(arguments);return this.each(function(e){t in e&&e[t].apply(e,n)}),this}}),e.each("text name disabled active selected checked visible parent value data".split(" "),function(e){i[e]=function(t){return this.prop(e,t)}}),r=n.extend(i),t.Collection=r,r}),r(pe,[m,w],function(e,t){var n=0;return{id:function(){return"mceu_"+n++},create:function(n,r,i){var o=document.createElement(n);return t.DOM.setAttribs(o,r),"string"==typeof i?o.innerHTML=i:e.each(i,function(e){e.nodeType&&o.appendChild(e)}),o},createFragment:function(e){return t.DOM.createFragment(e)},getWindowSize:function(){return t.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=Math.max(r.width||r.right-r.left,e.offsetWidth),n=Math.max(r.height||r.bottom-r.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,n){return t.DOM.getPos(e,n)},getViewPort:function(e){return t.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,n){return t.DOM.addClass(e,n)},removeClass:function(e,n){return t.DOM.removeClass(e,n)},hasClass:function(e,n){return t.DOM.hasClass(e,n)},toggleClass:function(e,n,r){return t.DOM.toggleClass(e,n,r)},css:function(e,n,r){return t.DOM.setStyle(e,n,r)},getRuntimeStyle:function(e,n){return t.DOM.getStyle(e,n,!0)},on:function(e,n,r,i){return t.DOM.bind(e,n,r,i)},off:function(e,n,r){return t.DOM.unbind(e,n,r)},fire:function(e,n,r){return t.DOM.fire(e,n,r)},innerHtml:function(e,n){t.DOM.setHTML(e,n)}}}),r(me,[],function(){return{parseBox:function(e){var t,n=10;if(e)return"number"==typeof e?(e=e||0,{top:e,left:e,bottom:e,right:e}):(e=e.split(" "),t=e.length,1===t?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],n)||0,right:parseInt(e[1],n)||0,bottom:parseInt(e[2],n)||0,left:parseInt(e[3],n)||0})},measureBox:function(e,t){function n(t){var n=document.defaultView;return n?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),n.getComputedStyle(e,null).getPropertyValue(t)):e.currentStyle[t]}function r(e){var t=parseFloat(n(e),10);return isNaN(t)?0:t}return{top:r(t+"TopWidth"),right:r(t+"RightWidth"),bottom:r(t+"BottomWidth"),left:r(t+"LeftWidth")}}}}),r(ge,[m],function(e){function t(){}function n(e){this.cls=[],this.cls._map={},this.onchange=e||t,this.prefix=""}return e.extend(n.prototype,{add:function(e){return e&&!this.contains(e)&&(this.cls._map[e]=!0,this.cls.push(e),this._change()),this},remove:function(e){if(this.contains(e)){for(var t=0;t0&&(e+=" "),e+=this.prefix+this.cls[t];return e},n}),r(ve,[u],function(e){var t={},n;return{add:function(r){var i=r.parent();if(i){if(!i._layout||i._layout.isNative())return;t[i._id]||(t[i._id]=i),n||(n=!0,e.requestAnimationFrame(function(){var e,r;n=!1;for(e in t)r=t[e],r.state.get("rendered")&&r.reflow();t={}},document.body))}},remove:function(e){t[e._id]&&delete t[e._id]}}}),r(ye,[se,m,le,de,he,pe,g,me,ge,ve],function(e,t,n,r,i,o,a,s,l,c){function u(e){return e._eventDispatcher||(e._eventDispatcher=new n({scope:e,toggleEvent:function(t,r){r&&n.isNative(t)&&(e._nativeEvents||(e._nativeEvents={}),e._nativeEvents[t]=!0,e.state.get("rendered")&&d(e))}})),e._eventDispatcher}function d(e){function t(t){var n=e.getParentCtrl(t.target);n&&n.fire(t.type,t)}function n(){var e=c._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),c._lastHoverCtrl=null)}function r(t){var n=e.getParentCtrl(t.target),r=c._lastHoverCtrl,i=0,o,a,s;if(n!==r){if(c._lastHoverCtrl=n,a=n.parents().toArray().reverse(),a.push(n),r){for(s=r.parents().toArray().reverse(),s.push(r),i=0;i=i;o--)r=s[o],r.fire("mouseleave",{target:r.getEl()})}for(o=i;oo;o++)c=l[o]._eventsRoot;for(c||(c=l[l.length-1]||e),e._eventsRoot=c,s=o,o=0;s>o;o++)l[o]._eventsRoot=c;var p=c._delegates;p||(p=c._delegates={});for(d in u){if(!u)return!1;"wheel"!==d||h?("mouseenter"===d||"mouseleave"===d?c._hasMouseEnter||(a(c.getEl()).on("mouseleave",n).on("mouseover",r),c._hasMouseEnter=1):p[d]||(a(c.getEl()).on(d,t),p[d]=!0),u[d]=!1):f?a(e.getEl()).on("mousewheel",i):a(e.getEl()).on("DOMMouseScroll",i)}}}var f="onmousewheel"in document,h=!1,p="mce-",m,g=0,v={Statics:{classPrefix:p},isRtl:function(){return m.rtl},classPrefix:p,init:function(e){function n(e){var t;for(e=e.split(" "),t=0;tn.maxW?n.maxW:i,n.w=i,n.innerW=i-o),i=e.h,i!==s&&(i=in.maxH?n.maxH:i,n.h=i,n.innerH=i-a),i=e.innerW,i!==s&&(i=in.maxW-o?n.maxW-o:i,n.innerW=i,n.w=i+o),i=e.innerH,i!==s&&(i=in.maxH-a?n.maxH-a:i,n.innerH=i,n.h=i+a),e.contentW!==s&&(n.contentW=e.contentW),e.contentH!==s&&(n.contentH=e.contentH),r=t._lastLayoutRect,r.x===n.x&&r.y===n.y&&r.w===n.w&&r.h===n.h||(l=m.repaintControls,l&&l.map&&!l.map[t._id]&&(l.push(t),l.map[t._id]=!0),r.x=n.x,r.y=n.y,r.w=n.w,r.h=n.h),t):n},repaint:function(){var e=this,t,n,r,i,o,a,s,l,c,u;c=document.createRange?function(e){return e}:Math.round,t=e.getEl().style,i=e._layoutRect,l=e._lastRepaintRect||{},o=e.borderBox,a=o.left+o.right,s=o.top+o.bottom,i.x!==l.x&&(t.left=c(i.x)+"px",l.x=i.x),i.y!==l.y&&(t.top=c(i.y)+"px",l.y=i.y),i.w!==l.w&&(u=c(i.w-a),t.width=(u>=0?u:0)+"px",l.w=i.w),i.h!==l.h&&(u=c(i.h-s),t.height=(u>=0?u:0)+"px",l.h=i.h),e._hasBody&&i.innerW!==l.innerW&&(u=c(i.innerW),r=e.getEl("body"),r&&(n=r.style,n.width=(u>=0?u:0)+"px"),l.innerW=i.innerW),e._hasBody&&i.innerH!==l.innerH&&(u=c(i.innerH),r=r||e.getEl("body"),r&&(n=n||r.style,n.height=(u>=0?u:0)+"px"),l.innerH=i.innerH),e._lastRepaintRect=l,e.fire("repaint",{},!1)},updateLayoutRect:function(){var e=this;e.parent()._lastRect=null,o.css(e.getEl(),{width:"",height:""}),e._layoutRect=e._lastRepaintRect=e._lastLayoutRect=null,e.initLayoutRect()},on:function(e,t){function n(e){var t,n;return"string"!=typeof e?e:function(i){return t||r.parentsAndSelf().each(function(r){var i=r.settings.callbacks;return i&&(t=i[e])?(n=r,!1):void 0}),t?t.call(n,i):(i.action=e,void this.fire("execute",i))}}var r=this;return u(r).on(e,n(t)),r},off:function(e,t){return u(this).off(e,t),this},fire:function(e,t,n){var r=this;if(t=t||{},t.control||(t.control=r),t=u(r).fire(e,t),n!==!1&&r.parent)for(var i=r.parent();i&&!t.isPropagationStopped();)i.fire(e,t,!1),i=i.parent();return t},hasEventListeners:function(e){return u(this).has(e)},parents:function(e){var t=this,n,r=new i;for(n=t.parent();n;n=n.parent())r.add(n);return e&&(r=r.filter(e)),r},parentsAndSelf:function(e){return new i(this).add(this.parents(e))},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},innerHtml:function(e){return this.$el.html(e),this},getEl:function(e){var t=e?this._id+"-"+e:this._id;return this._elmCache[t]||(this._elmCache[t]=a("#"+t)[0]),this._elmCache[t]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,r=n.getEl(n.ariaTarget);return"undefined"==typeof t?n._aria[e]:(n._aria[e]=t,n.state.get("rendered")&&r.setAttribute("role"==e?e:"aria-"+e,t),n)},encode:function(e,t){return t!==!1&&(e=this.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},translate:function(e){return m.translate?m.translate(e):e},before:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t),!0),t},after:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t)),t},remove:function(){var e=this,t=e.getEl(),n=e.parent(),r,i;if(e.items){var o=e.items().toArray();for(i=o.length;i--;)o[i].remove()}n&&n.items&&(r=[],n.items().each(function(t){t!==e&&r.push(t)}),n.items().set(r),n._lastRect=null),e._eventsRoot&&e._eventsRoot==e&&a(t).off();var s=e.getRoot().controlIdLookup;return s&&delete s[e._id],t&&t.parentNode&&t.parentNode.removeChild(t),e.state.set("rendered",!1),e.state.destroy(),e.fire("remove"),e},renderBefore:function(e){return a(e).before(this.renderHtml()),this.postRender(),this},renderTo:function(e){return a(e||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return'
'},postRender:function(){var e=this,t=e.settings,n,r,i,o,s;e.$el=a(e.getEl()),e.state.set("rendered",!0);for(o in t)0===o.indexOf("on")&&e.on(o.substr(2),t[o]);if(e._eventsRoot){for(i=e.parent();!s&&i;i=i.parent())s=i._eventsRoot; -if(s)for(o in s._nativeEvents)e._nativeEvents[o]=!0}d(e),t.style&&(n=e.getEl(),n&&(n.setAttribute("style",t.style),n.style.cssText=t.style)),e.settings.border&&(r=e.borderBox,e.$el.css({"border-top-width":r.top,"border-right-width":r.right,"border-bottom-width":r.bottom,"border-left-width":r.left}));var l=e.getRoot();l.controlIdLookup||(l.controlIdLookup={}),l.controlIdLookup[e._id]=e;for(var u in e._aria)e.aria(u,e._aria[u]);e.state.get("visible")===!1&&(e.getEl().style.display="none"),e.bindStates(),e.state.on("change:visible",function(t){var n=t.value,r;e.state.get("rendered")&&(e.getEl().style.display=n===!1?"none":"",e.getEl().getBoundingClientRect()),r=e.parent(),r&&(r._lastRect=null),e.fire(n?"show":"hide"),c.add(e)}),e.fire("postrender",{},!1)},bindStates:function(){},scrollIntoView:function(e){function t(e,t){var n,r,i=e;for(n=r=0;i&&i!=t&&i.nodeType;)n+=i.offsetLeft||0,r+=i.offsetTop||0,i=i.offsetParent;return{x:n,y:r}}var n=this.getEl(),r=n.parentNode,i,o,a,s,l,c,u=t(n,r);return i=u.x,o=u.y,a=n.offsetWidth,s=n.offsetHeight,l=r.clientWidth,c=r.clientHeight,"end"==e?(i-=l-a,o-=c-s):"center"==e&&(i-=l/2-a/2,o-=c/2-s/2),r.scrollLeft=i,r.scrollTop=o,this},getRoot:function(){for(var e=this,t,n=[];e;){if(e.rootControl){t=e.rootControl;break}n.push(e),t=e,e=e.parent()}t||(t=this);for(var r=n.length;r--;)n[r].rootControl=t;return t},reflow:function(){c.remove(this);var e=this.parent();return e._layout&&!e._layout.isNative()&&e.reflow(),this}};return t.each("text title visible disabled active value".split(" "),function(e){v[e]=function(t){return 0===arguments.length?this.state.get(e):("undefined"!=typeof t&&this.state.set(e,t),this)}}),m=e.extend(v)}),r(be,[],function(){var e={},t;return{add:function(t,n){e[t.toLowerCase()]=n},has:function(t){return!!e[t.toLowerCase()]},create:function(n,r){var i,o,a;if(!t){a=tinymce.ui;for(o in a)e[o.toLowerCase()]=a[o];t=!0}if("string"==typeof n?(r=r||{},r.type=n):(r=n,n=r.type),n=n.toLowerCase(),i=e[n],!i)throw new Error("Could not find control by type: "+n);return i=new i(r),i.type=n,i}}}),r(Ce,[],function(){return function(e){function t(e){return e&&1===e.nodeType}function n(e){return e=e||C,t(e)?e.getAttribute("role"):null}function r(e){for(var t,r=e||C;r=r.parentNode;)if(t=n(r))return t}function i(e){var n=C;return t(n)?n.getAttribute("aria-"+e):void 0}function o(e){var t=e.tagName.toUpperCase();return"INPUT"==t||"TEXTAREA"==t||"SELECT"==t}function a(e){return o(e)&&!e.hidden?!0:!!/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(n(e))}function s(e){function t(e){if(1==e.nodeType&&"none"!=e.style.display){a(e)&&n.push(e);for(var r=0;re?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function d(e,t){var n=-1,r=l();t=t||s(r.getEl());for(var i=0;i=0&&(n=t.getEl(),n&&n.parentNode.removeChild(n),n=e.getEl(),n&&n.parentNode.removeChild(n)),t.parent(this)},create:function(t){var n=this,i,a=[];return o.isArray(t)||(t=[t]),o.each(t,function(t){t&&(t instanceof e||("string"==typeof t&&(t={type:t}),i=o.extend({},n.settings.defaults,t),t.type=i.type=i.type||t.type||n.settings.defaultType||(i.defaults?i.defaults.type:null),t=r.create(i)),a.push(t))}),a},renderNew:function(){var e=this;return e.items().each(function(t,n){var r;t.parent(e),t.state.get("rendered")||(r=e.getEl("body"),r.hasChildNodes()&&n<=r.childNodes.length-1?a(r.childNodes[n]).before(t.renderHtml()):a(r).append(t.renderHtml()),t.postRender(),l.add(t))}),e._layout.applyClasses(e.items().filter(":visible")),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){var t=this;return t.items().set(t.create(e).concat(t.items().toArray())),t.renderNew()},insert:function(e,t,n){var r=this,i,o,a;return e=r.create(e),i=r.items(),!n&&t=0&&t
'+(e.settings.html||"")+t.renderHtml(e)+"
"},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e.state.set("rendered",!0),e.settings.style&&e.$el.css(e.settings.style),e.settings.border&&(t=e.borderBox,e.$el.css({"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=new i({root:e})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t;if(l.remove(this),this.visible()){for(e.repaintControls=[],e.repaintControls.map={},this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r(we,[g],function(e){function t(e){var t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}function n(e){var t,n;if(e.changedTouches)for(t="screenX screenY pageX pageY clientX clientY".split(" "),n=0;n").css({position:"absolute",top:0,left:0,width:c.width,height:c.height,zIndex:2147483647,opacity:1e-4,cursor:m}).appendTo(s.body),e(s).on("mousemove touchmove",d).on("mouseup touchend",u),i.start(r)},d=function(e){return n(e),e.button!==l?u(e):(e.deltaX=e.screenX-f,e.deltaY=e.screenY-h,e.preventDefault(),void i.drag(e))},u=function(t){n(t),e(s).off("mousemove touchmove",d).off("mouseup touchend",u),a.remove(),i.stop&&i.stop(t)},this.destroy=function(){e(o()).off()},e(o()).on("mousedown touchstart",c)}}),r(Ne,[g,we],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,u){var d,f,h,p,m,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),e(i.getEl("absend")).css(y,i.layoutRect()[l]-1),!c)return void e(f).css("display","none");e(f).css("display","block"),d=i.getEl("body"),h=i.getEl("scroll"+t+"t"),p=d["client"+s]-2*o,p-=n&&r?f["client"+u]:0,m=d["scroll"+s],g=p/m,v={},v[y]=d["offset"+a]+o,v[b]=p,e(f).css(v),v={},v[y]=d["scroll"+a]*g,v[b]=p*g,e(h).css(v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,u=i._id+"-scroll"+n,d=i.classPrefix;e(i.getEl()).append('
'),i.draghelper=new t(u+"t",{start:function(){c=i.getEl("body")["scroll"+r],e("#"+u).addClass(d+"active")},drag:function(e){var t,u,d,f,h=i.layoutRect();u=h.contentW>h.innerW,d=h.contentH>h.innerH,f=i.getEl("body")["client"+a]-2*o,f-=u&&d?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e("#"+u).removeClass(d+"active")}})}i.classes.add("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e(i.getEl("body")).on("scroll",n)),n())}}}),r(Ee,[xe,Ne],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='
'+t.renderHtml(e)+"
":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'
'+(e._preBodyHtml||"")+n+"
"}})}),r(_e,[pe],function(e){function t(t,n,r){var i,o,a,s,l,c,u,d,f,h;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t.state.get("fixed")&&"static"==e.getRuntimeStyle(document.body,"position")&&(a-=f.x,s-=f.y),i=t.getEl(),h=e.getSize(i),l=h.width,c=h.height,h=e.getSize(n),u=h.width,d=h.height,r=(r||"").split(""),"b"===r[0]&&(s+=d),"r"===r[1]&&(a+=u),"c"===r[0]&&(s+=Math.round(d/2)),"c"===r[1]&&(a+=Math.round(u/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o0&&a.x+a.w0&&a.y+a.hi.x&&a.x+a.wi.y&&a.y+a.he?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i.state.get("rendered")?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(Se,[pe],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(ke,[Ee,_e,Se,pe,g,u],function(e,t,n,r,i,o){function a(e,t){for(;e;){if(e==t)return!0;e=e.parent()}}function s(e){for(var t=v.length;t--;){var n=v[t],r=n.getParentCtrl(e.target);if(n.settings.autohide){if(r&&(a(r,n)||n.parent()===r))continue;e=n.fire("autohide",{target:e.target}),e.isDefaultPrevented()||n.hide()}}}function l(){p||(p=function(e){2!=e.button&&s(e)},i(document).on("click touchstart",p))}function c(){m||(m=function(){var e;for(e=v.length;e--;)d(v[e])},i(window).on("scroll",m))}function u(){if(!g){var e=document.documentElement,t=e.clientWidth,n=e.clientHeight;g=function(){document.all&&t==e.clientWidth&&n==e.clientHeight||(t=e.clientWidth,n=e.clientHeight,C.hideAll())},i(window).on("resize",g)}}function d(e){function t(t,n){for(var r,i=0;in&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY
').appendTo(t.getContainerElm())),o.setTimeout(function(){n.addClass(r+"in"),i(t.getEl()).addClass(r+"in")}),b=!0),f(!0,t)}}),t.on("show",function(){t.parents().each(function(e){return e.state.get("fixed")?(t.fixed(!0),!1):void 0})}),e.popover&&(t._preBodyHtml='
',t.classes.add("popover").add("bottom").add(t.isRtl()?"end":"start")),t.aria("label",e.ariaLabel),t.aria("labelledby",t._id),t.aria("describedby",t.describedBy||t._id+"-none")},fixed:function(e){var t=this;if(t.state.get("fixed")!=e){if(t.state.get("rendered")){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.classes.toggle("fixed",e),t.state.set("fixed",e)}return t},show:function(){var e=this,t,n=e._super();for(t=v.length;t--&&v[t]!==e;);return-1===t&&v.push(e),n},hide:function(){return h(this),f(!1,this),this._super()},hideAll:function(){C.hideAll()},close:function(){var e=this;return e.fire("close").isDefaultPrevented()||(e.remove(),f(!1,e)),e},remove:function(){h(this),this._super()},postRender:function(){var e=this;return e.settings.bodyRole&&this.getEl("body").setAttribute("role",e.settings.bodyRole),e._super()}});return C.hideAll=function(){for(var e=v.length;e--;){var t=v[e];t&&t.settings.autohide&&(t.hide(),v.splice(e,1))}},C}),r(Te,[ke,Ee,pe,g,we,me,d,u],function(e,t,n,r,i,o,a,s){function l(e){var t="width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0",n=r("meta[name=viewport]")[0],i;a.overrideViewPort!==!1&&(n||(n=document.createElement("meta"),n.setAttribute("name","viewport"),document.getElementsByTagName("head")[0].appendChild(n)),i=n.getAttribute("content"),i&&"undefined"!=typeof f&&(f=i),n.setAttribute("content",e?t:f))}function c(e){for(var t=0;tr.w&&(o=r.x-Math.max(0,i/2),e.layoutRect({w:i,x:o}),a=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(o=r.x-Math.max(0,i-r.w),e.layoutRect({w:i,x:o}),a=!0)),a&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;if(e.settings.title&&!e._fullscreen){i=e.getEl("head");var o=n.getSize(i);t.headerW=o.width,t.headerH=o.height,r+=t.headerH}e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var a=n.getWindowSize();return t.x=e.settings.x||Math.max(0,a.w/2-t.w/2),t.y=e.settings.y||Math.max(0,a.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='
'+e.encode(i.title)+'
'),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
'+o+'
'+s+"
"+a+"
"},fullscreen:function(e){var t=this,i=document.documentElement,a,l=t.classPrefix,c;if(e!=t._fullscreen)if(r(window).on("resize",function(){var e;if(t._fullscreen)if(a)t._timer||(t._timer=s.setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(a=!0)}}),c=t.layoutRect(),t._fullscreen=e,e){t._initial={x:c.x,y:c.y,w:c.w,h:c.h},t.borderBox=o.parseBox("0"),t.getEl("head").style.display="none",c.deltaH-=c.headerH+2,r([i,document.body]).addClass(l+"fullscreen"),t.classes.add("fullscreen");var u=n.getWindowSize();t.moveTo(0,0).resizeTo(u.w,u.h)}else t.borderBox=o.parseBox(t.settings.border),t.getEl("head").style.display="",c.deltaH+=c.headerH,r([i,document.body]).removeClass(l+"fullscreen"),t.classes.remove("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t;setTimeout(function(){e.classes.add("in"),e.fire("open")},0),e._super(),e.statusbar&&e.statusbar.postRender(),e.focus(),this.dragHelper=new i(e._id+"-dragh",{start:function(){t={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(n){e.moveTo(t.x+n.deltaX,t.y+n.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()}),d.push(e),l(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t;for(e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),t=d.length;t--;)d[t]===e&&d.splice(t,1);l(d.length>0),c(e.classPrefix)},getContentWindow:function(){var e=this.getEl().getElementsByTagName("iframe")[0];return e?e.contentWindow:null}});return u(),h}),r(Re,[Te],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){function r(e,t,n){return{type:"button",text:e,subtype:n?"primary":"",onClick:function(e){e.control.parents()[1].close(),o(t)}}}var i,o=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:i=[r("Ok",!0,!0),r("Cancel",!1)];break;case t.YES_NO:case t.YES_NO_CANCEL:i=[r("Yes",1,!0),r("No",0)],n.buttons==t.YES_NO_CANCEL&&i.push(r("Cancel",-1));break;default:i=[r("Ok",!0,!0)]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:i,title:n.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:n.onClose,onCancel:function(){o(!1)}}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(Ae,[Te,Re],function(e,t){return function(n){function r(){return s.length?s[s.length-1]:void 0}function i(e){n.fire("OpenWindow",{win:e})}function o(e){n.fire("CloseWindow",{win:e})}var a=this,s=[];a.windows=s,n.on("remove",function(){for(var e=s.length;e--;)s[e].close()}),a.open=function(t,r){var a;return n.editorManager.setActive(n),t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body,data:t.data,callbacks:t.commands}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){a.find("form")[0].submit()}},{text:"Cancel",onclick:function(){a.close()}}]),a=new e(t),s.push(a),a.on("close",function(){for(var e=s.length;e--;)s[e]===a&&s.splice(e,1);s.length||n.focus(),o(a)}),t.data&&a.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),a.features=t||{},a.params=r||{},1===s.length&&n.nodeChanged(),a=a.renderTo().reflow(),i(a),a},a.alert=function(e,r,a){var s;s=t.alert(e,function(){r?r.call(a||this):n.focus()}),s.on("close",function(){o(s)}),i(s)},a.confirm=function(e,n,r){var a;a=t.confirm(e,function(e){n.call(r||this,e)}),a.on("close",function(){o(a)}),i(a)},a.close=function(){r()&&r().close()},a.getParams=function(){return r()?r().params:null},a.setParams=function(e){r()&&(r().params=e)},a.getWindows=function(){return s}}}),r(Be,[ye,_e],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},renderHtml:function(){var e=this,t=e.classPrefix;return'"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().lastChild.innerHTML=e.encode(t.value)}),e._super()},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(De,[ye,Be],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.classes.toggle("tooltip-n","bc-tc"==i),r.classes.toggle("tooltip-nw","bc-tl"==i),r.classes.toggle("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return n||(n=new t({type:"tooltip"}),n.renderTo()),n},postRender:function(){var e=this,t=e.settings;e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},bindStates:function(){function e(e){n.aria("disabled",e),n.classes.toggle("disabled",e)}function t(e){n.aria("pressed",e),n.classes.toggle("active",e)}var n=this;return n.state.on("change:disabled",function(t){e(t.value)}),n.state.on("change:active",function(e){t(e.value)}),n.state.get("disabled")&&e(!0),n.state.get("active")&&t(!0),n._super()},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(Le,[De],function(e){return e.extend({Defaults:{value:0},init:function(e){var t=this;t._super(e),t.classes.add("progress"),t.settings.filter||(t.settings.filter=function(e){return Math.round(e)})},renderHtml:function(){var e=this,t=e._id,n=this.classPrefix;return'
0%
'},postRender:function(){var e=this;return e._super(),e.value(e.settings.value),e},bindStates:function(){function e(e){e=t.settings.filter(e),t.getEl().lastChild.innerHTML=e+"%",t.getEl().firstChild.firstChild.style.width=e+"%"}var t=this;return t.state.on("change:value",function(t){e(t.value)}),e(t.state.get("value")),t._super()}})}),r(Me,[ye,_e,Le,u],function(e,t,n,r){return e.extend({Mixins:[t],Defaults:{classes:"widget notification"},init:function(e){var t=this;t._super(e),e.text&&t.text(e.text),e.icon&&(t.icon=e.icon),e.color&&(t.color=e.color),e.type&&t.classes.add("notification-"+e.type),e.timeout&&(e.timeout<0||e.timeout>0)&&!e.closeButton?t.closeButton=!1:(t.classes.add("has-close"),t.closeButton=!0),e.progressBar&&(t.progressBar=new n),t.on("click",function(e){-1!=e.target.className.indexOf(t.classPrefix+"close")&&t.close()})},renderHtml:function(){var e=this,t=e.classPrefix,n="",r="",i="",o="";return e.icon&&(n=''),e.color&&(o=' style="background-color: '+e.color+'"'),e.closeButton&&(r=''),e.progressBar&&(i=e.progressBar.renderHtml()),'"},postRender:function(){var e=this;return r.setTimeout(function(){e.$el.addClass(e.classPrefix+"in")}),e._super()},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().childNodes[1].innerHTML=t.value}),e.progressBar&&e.progressBar.bindStates(),e._super()},close:function(){var e=this;return e.fire("close").isDefaultPrevented()||e.remove(),e},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(Pe,[Me,u],function(e,t){return function(n){function r(){return l.length?l[l.length-1]:void 0}function i(){t.requestAnimationFrame(function(){o(),a()})}function o(){for(var e=0;e0){var e=l.slice(0,1)[0],t=n.inline?n.getElement():n.getContentAreaContainer();if(e.moveRel(t,"tc-tc"),l.length>1)for(var r=1;r0&&(r.timer=setTimeout(function(){r.close()},t.timeout)),r.on("close",function(){var e=l.length;for(r.timer&&n.getWin().clearTimeout(r.timer);e--;)l[e]===r&&l.splice(e,1);a()}),r.renderTo(),a(),r},s.close=function(){r()&&r().close()},s.getNotifications=function(){return l},n.on("SkinLoaded",function(){var e=n.settings.service_message;e&&n.notificationManager.open({text:e,type:"warning",timeout:0,icon:""})})}}),r(He,[w],function(e){function t(t,n,r){for(var i=[];n&&n!=t;n=n.parentNode)i.push(e.nodeIndex(n,r));return i}function n(e,t){var n,r,i;for(r=e,n=t.length-1;n>=0;n--){if(i=r.childNodes,t[n]>i.length-1)return null;r=i[t[n]]}return r}return{create:t,resolve:n}}),r(Oe,[I,T,y,He,A,C,d,m,u,k],function(e,t,n,r,i,o,a,s,l,c){return function(u){function d(e,t){try{u.getDoc().execCommand(e,!1,t)}catch(n){}}function f(){var e=u.getDoc().documentMode;return e?e:6}function h(e){return e.isDefaultPrevented()}function p(e){var t,n;e.dataTransfer&&(u.selection.isCollapsed()&&"IMG"==e.target.tagName&&ee.select(e.target),t=u.selection.getContent(),t.length>0&&(n=se+escape(u.id)+","+escape(t),e.dataTransfer.setData(le,n)))}function m(e){var t;return e.dataTransfer&&(t=e.dataTransfer.getData(le),t&&t.indexOf(se)>=0)?(t=t.substr(se.length).split(","),{id:unescape(t[0]),html:unescape(t[1])}):null}function g(e){u.queryCommandSupported("mceInsertClipboardContent")?u.execCommand("mceInsertClipboardContent",!1,{content:e}):u.execCommand("mceInsertContent",!1,e)}function v(){function i(e){var t=C.schema.getBlockElements(),n=u.getBody();if("BR"!=e.nodeName)return!1;for(;e!=n&&!t[e.nodeName];e=e.parentNode)if(e.nextSibling)return!1;return!0}function o(e,t){var n;for(n=e.nextSibling;n&&n!=t;n=n.nextSibling)if((3!=n.nodeType||0!==G.trim(n.data).length)&&n!==t)return!1;return n===t}function a(e,t,r){var o,a,s;for(s=C.schema.getNonEmptyElements(),o=new n(r||e,e);a=o[t?"next":"prev"]();){if(s[a.nodeName]&&!i(a))return a;if(3==a.nodeType&&a.data.length>0)return a}}function c(e){var n,r,i,o,s;if(!e.collapsed&&(n=C.getParent(t.getNode(e.startContainer,e.startOffset),C.isBlock),r=C.getParent(t.getNode(e.endContainer,e.endOffset),C.isBlock),s=u.schema.getTextBlockElements(),n!=r&&s[n.nodeName]&&s[r.nodeName]&&"false"!==C.getContentEditable(n)&&"false"!==C.getContentEditable(r)))return e.deleteContents(),i=a(n,!1),o=a(r,!0),C.isEmpty(r)||G(n).append(r.childNodes),G(r).remove(),i?1==i.nodeType?"BR"==i.nodeName?(e.setStartBefore(i),e.setEndBefore(i)):(e.setStartAfter(i),e.setEndAfter(i)):(e.setStart(i,i.data.length),e.setEnd(i,i.data.length)):o&&(1==o.nodeType?(e.setStartBefore(o),e.setEndBefore(o)):(e.setStart(o,0),e.setEnd(o,0))),x.setRng(e),!0}function d(e,n){var r,i,s,l,c,d;if(!e.collapsed)return e;if(c=e.startContainer,d=e.startOffset,3==c.nodeType)if(n){if(d0)return e;if(r=t.getNode(e.startContainer,e.startOffset),s=C.getParent(r,C.isBlock),i=a(u.getBody(),n,r),l=C.getParent(i,C.isBlock),!r||!i)return e;if(l&&s!=l)if(n){if(!o(s,l))return e;1==r.nodeType?"BR"==r.nodeName?e.setStartBefore(r):e.setStartAfter(r):e.setStart(r,r.data.length), -1==i.nodeType?e.setEnd(i,0):e.setEndBefore(i)}else{if(!o(l,s))return e;1==i.nodeType?"BR"==i.nodeName?e.setStartBefore(i):e.setStartAfter(i):e.setStart(i,i.data.length),1==r.nodeType?e.setEnd(r,0):e.setEndBefore(r)}return e}function f(e){var t=x.getRng();return t=d(t,e),c(t)?!0:void 0}function v(e,t){function n(e,n){return m=G(n).parents().filter(function(e,t){return!!u.schema.getTextInlineElements()[t.nodeName]}),l=e.cloneNode(!1),m=s.map(m,function(e){return e=e.cloneNode(!1),l.hasChildNodes()?(e.appendChild(l.firstChild),l.appendChild(e)):l.appendChild(e),l.appendChild(e),e}),m.length?(p=C.create("br"),m[0].appendChild(p),C.replace(l,e),t.setStartBefore(p),t.setEndBefore(p),u.selection.setRng(t),p):null}function i(e){return e&&u.schema.getTextBlockElements()[e.tagName]}var o,a,l,c,d,f,h,p,m;if(t.collapsed&&(f=t.startContainer,h=t.startOffset,a=C.getParent(f,C.isBlock),i(a)))if(1==f.nodeType){if(f=f.childNodes[h],f&&"BR"!=f.tagName)return;if(d=e?a.nextSibling:a.previousSibling,C.isEmpty(a)&&i(d)&&C.isEmpty(d)&&n(a,f))return C.remove(d),!0}else if(3==f.nodeType){if(o=r.create(a,f),c=a.cloneNode(!0),f=r.resolve(c,o),e){if(h>=f.data.length)return;f.deleteData(h,1)}else{if(0>=h)return;f.deleteData(h-1,1)}if(C.isEmpty(c))return n(a,f)}}function y(e){var t,n,r;f(e)||(s.each(u.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&u.dom.setAttrib(e,"style",u.dom.getAttrib(e,"style"))}),t=new w(function(){}),t.observe(u.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),u.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null),n=u.selection.getRng(),r=n.startContainer.parentNode,s.each(t.takeRecords(),function(e){if(C.isChildOf(e.target,u.getBody())){if("style"==e.attributeName){var t=e.target.getAttribute("data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style")}s.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),C.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),u.selection.setRng(n))}})}}),t.disconnect(),s.each(u.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")}))}var b=u.getDoc(),C=u.dom,x=u.selection,w=window.MutationObserver,N,E;w||(N=!0,w=function(){function e(e){var t=e.relatedNode||e.target;n.push({target:t,addedNodes:[t]})}function t(e){var t=e.relatedNode||e.target;n.push({target:t,attributeName:e.attrName})}var n=[],r;this.observe=function(n){r=n,r.addEventListener("DOMSubtreeModified",e,!1),r.addEventListener("DOMNodeInsertedIntoDocument",e,!1),r.addEventListener("DOMNodeInserted",e,!1),r.addEventListener("DOMAttrModified",t,!1)},this.disconnect=function(){r.removeEventListener("DOMSubtreeModified",e,!1),r.removeEventListener("DOMNodeInsertedIntoDocument",e,!1),r.removeEventListener("DOMNodeInserted",e,!1),r.removeEventListener("DOMAttrModified",t,!1)},this.takeRecords=function(){return n}}),u.on("keydown",function(e){var t=e.keyCode==Q,n=e.ctrlKey||e.metaKey;if(!h(e)&&(t||e.keyCode==J)){var r=u.selection.getRng(),i=r.startContainer,o=r.startOffset;if(t&&e.shiftKey)return;if(v(t,r))return void e.preventDefault();if(!n&&r.collapsed&&3==i.nodeType&&(t?o0))return;e.preventDefault(),n&&u.selection.getSel().modify("extend",t?"forward":"backward",e.metaKey?"lineboundary":"word"),y(t)}}),u.on("keypress",function(t){if(!h(t)&&!x.isCollapsed()&&t.charCode>31&&!e.metaKeyPressed(t)){var n,r,i,o,a,s;n=u.selection.getRng(),s=String.fromCharCode(t.charCode),t.preventDefault(),r=G(n.startContainer).parents().filter(function(e,t){return!!u.schema.getTextInlineElements()[t.nodeName]}),y(!0),r=r.filter(function(e,t){return!G.contains(u.getBody(),t)}),r.length?(i=C.createFragment(),r.each(function(e,t){t=t.cloneNode(!1),i.hasChildNodes()?(t.appendChild(i.firstChild),i.appendChild(t)):(a=t,i.appendChild(t)),i.appendChild(t)}),a.appendChild(u.getDoc().createTextNode(s)),o=C.getParent(n.startContainer,C.isBlock),C.isEmpty(o)?G(o).empty().append(i):n.insertNode(i),n.setStart(a.firstChild,1),n.setEnd(a.firstChild,1),u.selection.setRng(n)):u.selection.setContent(s)}}),u.addCommand("Delete",function(){y()}),u.addCommand("ForwardDelete",function(){y(!0)}),N||(u.on("dragstart",function(e){E=x.getRng(),p(e)}),u.on("drop",function(e){if(!h(e)){var n=m(e);n&&(e.preventDefault(),l.setEditorTimeout(u,function(){var r=t.getCaretRangeFromPoint(e.x,e.y,b);E&&(x.setRng(E),E=null),y(),x.setRng(r),g(n.html)}))}}),u.on("cut",function(e){h(e)||!e.clipboardData||u.selection.isCollapsed()||(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",u.selection.getContent()),e.clipboardData.setData("text/plain",u.selection.getContent({format:"text"})),l.setEditorTimeout(u,function(){y(!0)}))}))}function y(){function e(e){var t=Z.create("body"),n=e.cloneContents();return t.appendChild(n),ee.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(u.getBody()),t.compareRanges(n,r)}var i=e(n),o=Z.createRng();o.selectNode(u.getBody());var a=e(o);return i===a}u.on("keydown",function(e){var t=e.keyCode,r,i;if(!h(e)&&(t==Q||t==J)){if(r=u.selection.isCollapsed(),i=u.getBody(),r&&!Z.isEmpty(i))return;if(!r&&!n(u.selection.getRng()))return;e.preventDefault(),u.setContent(""),i.firstChild&&Z.isBlock(i.firstChild)?u.selection.setCursorLocation(i.firstChild,0):u.selection.setCursorLocation(i,0),u.nodeChanged()}})}function b(){u.shortcuts.add("meta+a",null,"SelectAll")}function C(){u.settings.content_editable||Z.bind(u.getDoc(),"mousedown mouseup",function(e){var t;if(e.target==u.getDoc().documentElement)if(t=ee.getRng(),u.getBody().focus(),"mousedown"==e.type){if(c.isCaretContainer(t.startContainer))return;ee.placeCaretAt(e.clientX,e.clientY)}else ee.setRng(t)})}function x(){u.on("keydown",function(e){if(!h(e)&&e.keyCode===J){if(!u.getBody().getElementsByTagName("hr").length)return;if(ee.isCollapsed()&&0===ee.getRng(!0).startOffset){var t=ee.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return Z.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(Z.remove(n),e.preventDefault())}}})}function w(){window.Range.prototype.getClientRects||u.on("mousedown",function(e){if(!h(e)&&"HTML"===e.target.nodeName){var t=u.getBody();t.blur(),l.setEditorTimeout(u,function(){t.focus()})}})}function N(){u.on("click",function(e){var t=e.target;/^(IMG|HR)$/.test(t.nodeName)&&"false"!==Z.getContentEditableParent(t)&&(e.preventDefault(),ee.getSel().setBaseAndExtent(t,0,t,1),u.nodeChanged()),"A"==t.nodeName&&Z.hasClass(t,"mce-item-anchor")&&(e.preventDefault(),ee.select(t))})}function E(){function e(){var e=Z.getAttribs(ee.getStart().cloneNode(!1));return function(){var t=ee.getStart();t!==u.getBody()&&(Z.setAttrib(t,"style",null),K(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!ee.isCollapsed()&&Z.getParent(ee.getStart(),Z.isBlock)!=Z.getParent(ee.getEnd(),Z.isBlock)}u.on("keypress",function(n){var r;return h(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),u.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),Z.bind(u.getDoc(),"cut",function(n){var r;!h(n)&&t()&&(r=e(),l.setEditorTimeout(u,function(){r()}))})}function _(){document.body.setAttribute("role","application")}function S(){u.on("keydown",function(e){if(!h(e)&&e.keyCode===J&&ee.isCollapsed()&&0===ee.getRng(!0).startOffset){var t=ee.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function k(){f()>7||(d("RespectVisibilityInDesign",!0),u.contentStyles.push(".mceHideBrInPre pre br {display: none}"),Z.addClass(u.getBody(),"mceHideBrInPre"),ne.addNodeFilter("pre",function(e){for(var t=e.length,n,r,o,a;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)o=n[r],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new i("#text",3),o,!0).value="\n"}),re.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function T(){Z.bind(u.getBody(),"mouseup",function(){var e,t=ee.getNode();"IMG"==t.nodeName&&((e=Z.getStyle(t,"width"))&&(Z.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),Z.setStyle(t,"width","")),(e=Z.getStyle(t,"height"))&&(Z.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),Z.setStyle(t,"height","")))})}function R(){u.on("keydown",function(t){var n,r,i,o,a;if(!h(t)&&t.keyCode==e.BACKSPACE&&(n=ee.getRng(),r=n.startContainer,i=n.startOffset,o=Z.getRoot(),a=r,n.collapsed&&0===i)){for(;a&&a.parentNode&&a.parentNode.firstChild==a&&a.parentNode!=o;)a=a.parentNode;"BLOCKQUOTE"===a.tagName&&(u.formatter.toggle("blockquote",null,a),n=Z.createRng(),n.setStart(r,0),n.setEnd(r,0),ee.setRng(n))}})}function A(){function e(){Y(),d("StyleWithCSS",!1),d("enableInlineTableEditing",!1),te.object_resizing||d("enableObjectResizing",!1)}te.readonly||u.on("BeforeExecCommand MouseDown",e)}function B(){function e(){K(Z.select("a"),function(e){var t=e.parentNode,n=Z.getRoot();if(t.lastChild===e){for(;t&&!Z.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}Z.add(t,"br",{"data-mce-bogus":1})}})}u.on("SetContent ExecCommand",function(t){"setcontent"!=t.type&&"mceInsertLink"!==t.command||e()})}function D(){te.forced_root_block&&u.on("init",function(){d("DefaultParagraphSeparator",te.forced_root_block)})}function L(){u.on("keydown",function(e){var t;h(e)||e.keyCode!=J||(t=u.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),u.undoManager.beforeChange(),Z.remove(t.item(0)),u.undoManager.add()))})}function M(){var e;f()>=10&&(e="",K("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),u.contentStyles.push(e+"{padding-right: 1px !important}"))}function P(){f()<9&&(ne.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),re.addNodeFilter("noscript",function(e){for(var t=e.length,n,r,a;t--;)n=e[t],r=e[t].firstChild,r?r.value=o.decode(r.value):(a=n.attributes.map["data-mce-innertext"],a&&(n.attr("data-mce-innertext",null),r=new i("#text",3),r.value=a,r.raw=!0,n.append(r)))}))}function H(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),Z.unbind(r,"mouseup",n),Z.unbind(r,"mousemove",t),a=o=0}var r=Z.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,Z.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(Z.bind(r,"mouseup",n),Z.bind(r,"mousemove",t),Z.getRoot().focus(),a.select())}})}function O(){u.on("keyup focusin mouseup",function(t){65==t.keyCode&&e.metaKeyPressed(t)||ee.normalize()},!0)}function I(){u.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function F(){u.inline||u.on("keydown",function(){document.activeElement==document.body&&u.getWin().focus()})}function z(){u.inline||(u.contentStyles.push("body {min-height: 150px}"),u.on("click",function(e){var t;if("HTML"==e.target.nodeName){if(a.ie>11)return void u.getBody().focus();t=u.selection.getRng(),u.getBody().focus(),u.selection.setRng(t),u.selection.normalize(),u.nodeChanged()}}))}function U(){a.mac&&u.on("keydown",function(t){!e.metaKeyPressed(t)||t.shiftKey||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),u.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","lineboundary"))})}function W(){d("AutoUrlDetect",!1)}function V(){u.on("click",function(e){var t=e.target;do if("A"===t.tagName)return void e.preventDefault();while(t=t.parentNode)}),u.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}function $(){u.on("init",function(){u.dom.bind(u.getBody(),"submit",function(e){e.preventDefault()})})}function q(){ne.addNodeFilter("br",function(e){for(var t=e.length;t--;)"Apple-interchange-newline"==e[t].attr("class")&&e[t].remove()})}function j(){u.on("dragstart",function(e){p(e)}),u.on("drop",function(e){if(!h(e)){var n=m(e);if(n&&n.id!=u.id){e.preventDefault();var r=t.getCaretRangeFromPoint(e.x,e.y,u.getDoc());ee.setRng(r),g(n.html)}}})}function Y(){var e,t;X()&&(e=u.getBody(),t=e.parentNode,t.removeChild(e),t.appendChild(e),e.focus())}function X(){var e;return ie?(e=u.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}var K=s.each,G=u.$,J=e.BACKSPACE,Q=e.DELETE,Z=u.dom,ee=u.selection,te=u.settings,ne=u.parser,re=u.serializer,ie=a.gecko,oe=a.ie,ae=a.webkit,se="data:text/mce-internal,",le=oe?"Text":"URL";return R(),y(),a.windowsPhone||O(),ae&&(v(),C(),N(),D(),$(),S(),q(),a.iOS?(F(),z(),V()):b()),oe&&a.ie<11&&(x(),_(),k(),T(),L(),M(),P(),H()),a.ie>=11&&(z(),S()),a.ie&&(b(),W(),j()),ie&&(x(),w(),E(),A(),B(),I(),U(),S()),{refreshContentEditable:Y,isHidden:X}}}),r(Ie,[ue,w,m],function(e,t,n){function r(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu|drop|dragover|dragend/.test(t)?e.getDoc().documentElement:e.settings.event_root?(e.eventRoot||(e.eventRoot=o.select(e.settings.event_root)[0]),e.eventRoot):e.getBody()}function i(e,t){function n(e){return!e.hidden&&!e.readonly}var i=r(e,t),s;if(e.delegates||(e.delegates={}),!e.delegates[t])if(e.settings.event_root){if(a||(a={},e.editorManager.on("removeEditor",function(){var t;if(!e.editorManager.activeEditor&&a){for(t in a)e.dom.unbind(r(e,t));a=null}})),a[t])return;s=function(r){for(var i=r.target,a=e.editorManager.editors,s=a.length;s--;){var l=a[s].getBody();(l===i||o.isChildOf(i,l))&&n(a[s])&&a[s].fire(t,r)}},a[t]=s,o.bind(i,t,s)}else s=function(r){n(e)&&e.fire(t,r)},o.bind(i,t,s),e.delegates[t]=s}var o=t.DOM,a,s={bindPendingEventDelegates:function(){var e=this;n.each(e._pendingNativeEvents,function(t){i(e,t)})},toggleNativeEvent:function(e,t){var n=this;"focus"!=e&&"blur"!=e&&(t?n.initialized?i(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&(n.dom.unbind(r(n,e),e,n.delegates[e]),delete n.delegates[e]))},unbindAllNativeEvents:function(){var e=this,t;if(e.delegates){for(t in e.delegates)e.dom.unbind(r(e,t),t,e.delegates[t]);delete e.delegates}e.inline||(e.getBody().onload=null,e.dom.unbind(e.getWin()),e.dom.unbind(e.getDoc())),e.dom.unbind(e.getBody()),e.dom.unbind(e.getContainer())}};return s=n.extend({},e,s)}),r(Fe,[],function(){function e(e,t,n){try{e.getDoc().execCommand(t,!1,n)}catch(r){}}function t(e){var t,n;return t=e.getBody(),n=function(t){e.dom.getParents(t.target,"a").length>0&&t.preventDefault()},e.dom.bind(t,"click",n),{unbind:function(){e.dom.unbind(t,"click",n)}}}function n(n,r){n._clickBlocker&&(n._clickBlocker.unbind(),n._clickBlocker=null),r?(n._clickBlocker=t(n),n.selection.controlSelection.hideResizeRect(),n.readonly=!0,n.getBody().contentEditable=!1):(n.readonly=!1,n.getBody().contentEditable=!0,e(n,"StyleWithCSS",!1),e(n,"enableInlineTableEditing",!1),e(n,"enableObjectResizing",!1),n.focus(),n.nodeChanged())}function r(e,t){var r=e.readonly?"readonly":"design";t!=r&&(e.initialized?n(e,"readonly"==t):e.on("init",function(){n(e,"readonly"==t)}),e.fire("SwitchMode",{mode:t}))}return{setMode:r}}),r(ze,[m,d],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122},o=e.makeMap("alt,ctrl,shift,meta,access");return function(a){function s(e){var a,s,l={};n(r(e,"+"),function(e){e in o?l[e]=!0:/^[0-9]{2,}$/.test(e)?l.keyCode=parseInt(e,10):(l.charCode=e.charCodeAt(0),l.keyCode=i[e]||e.toUpperCase().charCodeAt(0))}),a=[l.keyCode];for(s in o)l[s]?a.push(s):l[s]=!1;return l.id=a.join(","),l.access&&(l.alt=!0,t.mac?l.ctrl=!0:l.shift=!0),l.meta&&(t.mac?l.meta=!0:(l.ctrl=!0,l.meta=!1)),l}function l(t,n,i,o){var l;return l=e.map(r(t,">"),s),l[l.length-1]=e.extend(l[l.length-1],{func:i,scope:o||a}),e.extend(l[0],{desc:a.translate(n),subpatterns:l.slice(1)})}function c(e){return e.altKey||e.ctrlKey||e.metaKey}function u(e){return e.keyCode>=112&&e.keyCode<=123}function d(e,t){return t?t.ctrl!=e.ctrlKey||t.meta!=e.metaKey?!1:t.alt!=e.altKey||t.shift!=e.shiftKey?!1:e.keyCode==t.keyCode||e.charCode&&e.charCode==t.charCode?(e.preventDefault(),!0):!1:!1}function f(e){return e.func?e.func.call(e.scope):null}var h=this,p={},m=[];a.on("keyup keypress keydown",function(e){!c(e)&&!u(e)||e.isDefaultPrevented()||(n(p,function(t){return d(e,t)?(m=t.subpatterns.slice(0),"keydown"==e.type&&f(t),!0):void 0}),d(e,m[0])&&(1===m.length&&"keydown"==e.type&&f(m[0]),m.shift()))}),h.add=function(t,i,o,s){var c;return c=o,"string"==typeof o?o=function(){a.execCommand(c,!1,null)}:e.isArray(c)&&(o=function(){a.execCommand(c[0],c[1],c[2])}),n(r(e.trim(t.toLowerCase())),function(e){var t=l(e,i,o,s);p[t.id]=t}),!0},h.remove=function(e){var t=l(e);return p[t.id]?(delete p[t.id],!0):!1}}}),r(Ue,[c,m,z],function(e,t,n){return function(r,i){function o(e){var t,n;return n={"image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/png":"png"},t=n[e.blob().type.toLowerCase()]||"dat",e.id()+"."+t}function a(e,t){return e?e.replace(/\/$/,"")+"/"+t.replace(/^\//,""):t}function s(e){return{id:e.id,blob:e.blob,base64:e.base64,filename:n.constant(o(e))}}function l(e,t,n,r){var s,l;s=new XMLHttpRequest,s.open("POST",i.url),s.withCredentials=i.credentials,s.upload.onprogress=function(e){r(e.loaded/e.total*100)},s.onerror=function(){n("Image upload failed due to a XHR Transport error. Code: "+s.status)},s.onload=function(){var e;return 200!=s.status?void n("HTTP Error: "+s.status):(e=JSON.parse(s.responseText),e&&"string"==typeof e.location?void t(a(i.basePath,e.location)):void n("Invalid JSON: "+s.responseText))},l=new FormData,l.append("file",e.blob(),o(e)),s.send(l)}function c(){return new e(function(e){e([])})}function u(e,t){return{url:t,blobInfo:e,status:!0}}function d(e,t){return{url:"",blobInfo:e,status:!1,error:t}}function f(e,n){t.each(y[e],function(e){e(n)}),delete y[e]}function h(t,n,i){return r.markPending(t.blobUri()),new e(function(e){var o,a,l=function(){};try{var c=function(){o&&(o.close(),a=l)},h=function(n){c(),r.markUploaded(t.blobUri(),n),f(t.blobUri(),u(t,n)),e(u(t,n))},p=function(){c(),r.removeFailed(t.blobUri()),f(t.blobUri(),d(t,p)),e(d(t,p))};a=function(e){0>e||e>100||(o||(o=i()),o.progressBar.value(e))},n(s(t),h,p,a)}catch(m){e(d(t,m.message))}})}function p(e){return e===l}function m(t){var n=t.blobUri();return new e(function(e){y[n]=y[n]||[],y[n].push(e)})}function g(n,o){return n=t.grep(n,function(e){return!r.isUploaded(e.blobUri())}),e.all(t.map(n,function(e){return r.isPending(e.blobUri())?m(e):h(e,i.handler,o)}))}function v(e,t){return!i.url&&p(i.handler)?c():g(e,t)}var y={};return i=t.extend({credentials:!1,handler:l},i),{upload:v}}}),r(We,[c],function(e){function t(t){return new e(function(e){var n=new XMLHttpRequest;n.open("GET",t,!0),n.responseType="blob",n.onload=function(){200==this.status&&e(this.response)},n.send()})}function n(e){var t,n;return e=decodeURIComponent(e).split(","),n=/data:([^;]+)/.exec(e[0]),n&&(t=n[1]),{type:t,data:e[1]}}function r(t){return new e(function(e){var r,i,o;t=n(t);try{r=atob(t.data)}catch(a){return void e(new Blob([]))}for(i=new Uint8Array(r.length),o=0;o0&&(n&&(l*=-1),r.left+=l,r.right+=l),r}function l(){var n,r,o,a,s;for(n=i("*[contentEditable=false]",t),a=0;a').css(l).appendTo(t),o&&m.addClass("mce-visual-caret-before"),d(),c=a.ownerDocument.createRange(),f=g.firstChild,c.setStart(f,0),c.setEnd(f,1),c):(g=e.insertInline(a,o),c=a.ownerDocument.createRange(),s(g.nextSibling)?(c.setStart(g,0),c.setEnd(g,0)):(c.setStart(g,1),c.setEnd(g,1)),c)}function u(){l(),g&&(e.remove(g),g=null),m&&(m.remove(),m=null),clearInterval(p)}function d(){p=a.setInterval(function(){i("div.mce-visual-caret",t).toggleClass("mce-visual-caret-hidden")},500)}function f(){a.clearInterval(p)}function h(){return".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}"}var p,m,g;return{show:c,hide:u,getCss:h,destroy:f}}}),r(Xe,[p,_,W],function(e,t,n){function r(i){function o(t){return e.map(t,function(e){return e=n.clone(e),e.node=i,e})}if(e.isArray(i))return e.reduce(i,function(e,t){return e.concat(r(t))},[]);if(t.isElement(i))return o(i.getClientRects());if(t.isText(i)){var a=i.ownerDocument.createRange();return a.setStart(i,0),a.setEnd(i,i.data.length),o(a.getClientRects())}}return{getClientRects:r}}),r(Ke,[z,p,Xe,U,te,ne,$,W],function(e,t,n,r,i,o,a,s){function l(e,t,n,o){for(;o=i.findNode(o,e,r.isEditableCaretCandidate,t);)if(n(o))return}function c(e,r,i,o,a,s){function c(o){var s,l,c;for(c=n.getClientRects(o),-1==e&&(c=c.reverse()),s=0;s0&&r(l,t.last(f))&&u++,l.line=u,a(l))return!0;f.push(l)}}var u=0,d,f=[],h;return(h=t.last(s.getClientRects()))?(d=s.getNode(),c(d),l(e,o,c,d),f):f}function u(e,t){return t.line>e}function d(e,t){return t.line===e}function f(e,n,r,i){function l(n){return 1==e?t.last(n.getClientRects()):t.last(n.getClientRects())}var c=new o(n),u,d,f,h,p=[],m=0,g,v;1==e?(u=c.next,d=s.isBelow,f=s.isAbove,h=a.after(i)):(u=c.prev,d=s.isAbove,f=s.isBelow,h=a.before(i)),v=l(h);do if(h.isVisible()&&(g=l(h),!f(g,v))){if(p.length>0&&d(g,t.last(p))&&m++,g=s.clone(g),g.position=h,g.line=m,r(g))return p;p.push(g)}while(h=u(h));return p}var h=e.curry,p=h(c,-1,s.isAbove,s.isBelow),m=h(c,1,s.isBelow,s.isAbove);return{upUntil:p,downUntil:m,positionsUntil:f,isAboveLine:h(u),isLine:h(d)}}),r(Ge,[z,p,_,Xe,W,te,U],function(e,t,n,r,i,o,a){function s(e,t){return Math.abs(e.left-t)}function l(e,t){return Math.abs(e.right-t)}function c(e,n){function r(e,t){return e>=t.left&&e<=t.right}return t.reduce(e,function(e,t){var i,o;return i=Math.min(s(e,n),l(e,n)),o=Math.min(s(t,n),l(t,n)),r(n,t)?t:r(n,e)?e:o==i&&m(t.node)?t:i>o?t:e})}function u(e,t,n,r){for(;r=g(r,e,a.isEditableCaretCandidate,t);)if(n(r))return}function d(e,n){function o(e,i){var o;return o=t.filter(r.getClientRects(i),function(t){return!e(t,n)}),a=a.concat(o),0===o.length}var a=[];return a.push(n),u(-1,e,v(o,i.isAbove),n.node),u(1,e,v(o,i.isBelow),n.node),a}function f(e){return t.filter(t.toArray(e.getElementsByTagName("*")),m)}function h(e,t){return{node:e.node,before:s(e,t)=e.top&&i<=e.bottom}),a=c(o,n),a&&(a=c(d(e,a),n),a&&m(a.node))?h(a,n):null}var m=n.isContentEditableFalse,g=o.findNode,v=e.curry;return{findClosestClientRect:c,findLineNodeRects:d,closestCaret:p}}),r(Je,[_,p,z],function(e,t,n){function r(e){function r(e){return i(e)}function a(t){f(e.getBody()).css("cursor",t)}function s(t){return t==g.element||e.dom.isChildOf(t,g.element)?!1:!i(t)}function l(t){var n,r,i,o,s=0,l=0,c,u,d,h;0===t.button&&(n=t.screenX-g.screenX,r=t.screenY-g.screenY,c=Math.max(Math.abs(n),Math.abs(r)),!g.dragging&&c>10&&(g.dragging=!0,a("default"),g.clone=g.element.cloneNode(!0),i=m.getPos(g.element),g.relX=g.clientX-i.x,g.relY=g.clientY-i.y,g.width=g.element.offsetWidth,g.height=g.element.offsetHeight,f(g.clone).css({width:g.width,height:g.height}).removeAttr("data-mce-selected"),g.ghost=f("
").css({position:"absolute",opacity:.5,overflow:"hidden",width:g.width,height:g.height}).attr({"data-mce-bogus":"all",unselectable:"on",contenteditable:"false"}).addClass("mce-drag-container mce-reset").append(g.clone).appendTo(e.getBody())[0],o=e.dom.getViewPort(e.getWin()),g.maxX=o.w,g.maxY=o.h),g.dragging&&(e.selection.placeCaretAt(t.clientX,t.clientY),u=g.clientX+n-g.relX,d=g.clientY+r+5,u+g.width>g.maxX&&(s=u+g.width-g.maxX),d+g.height>g.maxY&&(l=d+g.height-g.maxY),h="BODY"!=e.getBody().nodeName?e.getBody().getBoundingClientRect():{left:0,top:0},f(g.ghost).css({left:u-h.left,top:d-h.top,width:g.width-s,height:g.height-l})))}function c(){var t;if(g.dragging&&(e.selection.setRng(e.selection.getSel().getRangeAt(0)),s(e.selection.getNode()))){var n=g.element;if(t=e.fire("drop",{targetClone:n}),t.isDefaultPrevented())return;n=t.targetClone,e.undoManager.transact(function(){e.insertContent(m.getOuterHTML(n)),f(g.element).remove()})}d()}function u(a){var s,u;if(d(),0===a.button&&(s=t.find(e.dom.getParents(a.target),n.or(i,o)),r(s))){if(u=e.fire("dragstart",{target:s}),u.isDefaultPrevented())return;e.on("mousemove",l),e.on("mouseup",c),h!=p&&(m.bind(h,"mousemove",l),m.bind(h,"mouseup",c)),g={screenX:a.screenX,screenY:a.screenY,clientX:a.clientX,clientY:a.clientY,element:s}}}function d(){f(g.ghost).remove(),a(null),e.off("mousemove",l),e.off("mouseup",d),h!=p&&(m.unbind(h,"mousemove",l),m.unbind(h,"mouseup",d)),g={}}var f=e.$,h=document,p=e.getDoc(),m=e.dom,g={};e.on("mousedown",u),e.on("drop",function(t){var n=e.getDoc().elementFromPoint(t.clientX,t.clientY);(i(n)||i(e.dom.getContentEditableParent(n)))&&t.preventDefault()})}var i=e.isContentEditableFalse,o=e.isContentEditableTrue;return{init:r}}),r(Qe,[d,ne,$,k,te,Ye,Ke,Ge,_,T,W,I,z,p,u,Je,S],function(e,t,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g){function v(e,t){for(;t=e(t);)if(t.isVisible())return t;return t}function y(c){function y(e){return c.dom.isBlock(e)}function S(e){e&&c.selection.setRng(e)}function k(){return c.selection.getRng()}function T(e,t){c.selection.scrollIntoView(e,t)}function R(e,t,n){var r;return r=c.fire("ShowCaret",{target:t,direction:e,before:n}),r.isDefaultPrevented()?null:(T(t,-1===e),re.show(n,t))}function A(e){var t;return re.hide(),t=c.fire("BeforeObjectSelected",{target:e}),t.isDefaultPrevented()?null:B(e)}function B(e){var t=e.ownerDocument.createRange();return t.selectNode(e),t}function D(e,t){var n=i.isInSameBlock(e,t);return!n&&l.isBr(e.getNode())?!0:n}function L(e,t){return t=i.normalizeRange(e,Z,t),-1==e?n.fromRangeStart(t):n.fromRangeEnd(t)}function M(e){return r.isCaretContainerBlock(e.startContainer)}function P(e,t,n,r){var i,o,a,s;return!r.collapsed&&(i=_(r),x(i))?R(e,i,-1==e):(s=M(r),o=L(e,r),n(o)?A(o.getNode(-1==e)):(o=t(o))?n(o)?R(e,o.getNode(-1==e),1==e):(a=t(o), -n(a)&&D(o,a)?R(e,a.getNode(-1==e),1==e):s?V(o.toRange()):null):s?r:null)}function H(e,t,n){var r,i,o,l,c,u,d,f,p;if(p=_(n),r=L(e,n),i=t(Z,a.isAboveLine(1),r),o=h.filter(i,a.isLine(1)),c=h.last(r.getClientRects()),E(r)&&(p=r.getNode()),N(r)&&(p=r.getNode(!0)),!c)return null;if(u=c.left,l=s.findClosestClientRect(o,u),l&&x(l.node))return d=Math.abs(u-l.left),f=Math.abs(u-l.right),R(e,l.node,f>d);if(p){var m=a.positionsUntil(e,Z,a.isAboveLine(1),p);if(l=s.findClosestClientRect(h.filter(m,a.isLine(1)),u))return V(l.position.toRange());if(l=h.last(h.filter(m,a.isLine(0))))return V(l.position.toRange())}}function O(t,r){function i(){var t=c.dom.create(c.settings.forced_root_block);return(!e.ie||e.ie>=11)&&(t.innerHTML='
'),t}var o,a,s;if(r.collapsed&&c.settings.forced_root_block){if(o=c.dom.getParent(r.startContainer,"PRE"),!o)return;a=1==t?te(n.fromRangeStart(r)):ne(n.fromRangeStart(r)),a||(s=i(),1==t?c.$(o).after(s):c.$(o).before(s),c.selection.select(s,!0),c.selection.collapse())}}function I(e,t,n,r){var i;return(i=P(e,t,n,r))?i:(i=O(e,r),i?i:null)}function F(e,t,n){var r;return(r=H(e,t,n))?r:(r=O(e,n),r?r:null)}function z(){return ae("*[data-mce-caret]")[0]}function U(e){e=ae(e),e.attr("data-mce-caret")&&(re.hide(),e.removeAttr("data-mce-caret"),e.removeAttr("data-mce-bogus"),e.removeAttr("style"),S(k()),T(e[0]))}function W(e){var t,r;return e=i.normalizeRange(1,Z,e),t=n.fromRangeStart(e),x(t.getNode())?R(1,t.getNode(),!t.isAtEnd()):x(t.getNode(!0))?R(1,t.getNode(!0),!1):(r=c.dom.getParent(t.getNode(),f.or(x,C)),x(r)?R(1,r,!1):(re.hide(),null))}function V(e){var t;return e&&e.collapsed?(t=W(e),t?t:e):e}function $(e){var t,i,o,a;return x(e)?(x(e.previousSibling)&&(o=e.previousSibling),i=ne(n.before(e)),i||(t=te(n.after(e))),t&&w(t.getNode())&&(a=t.getNode()),r.remove(e.previousSibling),r.remove(e.nextSibling),c.dom.remove(e),J(),c.dom.isEmpty(c.getBody())?(c.setContent(""),void c.focus()):o?n.after(o).toRange():a?n.before(a).toRange():i?i.toRange():t?t.toRange():null):null}function q(e,t,n){var r=c.dom,i,o,a,s;if(-1===e){if(N(n)&&y(n.getNode(!0)))return $(n.getNode(!0))}else if(E(t)&&y(t.getNode()))return $(t.getNode());if(s=c.schema.getTextBlockElements(),i=r.getParent(t.getNode(),r.isBlock),o=r.getParent(n.getNode(),r.isBlock),i===o||!s[i.nodeName]||!s[o.nodeName])return null;for(;a=i.firstChild;)o.appendChild(a);return c.dom.remove(i),n.toRange()}function j(e,t,n){var r,i,o;return!n.collapsed&&(r=_(n),x(r))?V($(r)):(i=L(e,n),t(i)?V($(i.getNode(-1==e))):(o=-1==e?ee.prev(i):ee.next(i),t(o)?-1===e?q(e,i,o):q(e,o,i):void 0))}function Y(){function e(e,t){var n=t(k());n&&!e.isDefaultPrevented()&&(e.preventDefault(),S(n))}function r(e){for(var t=c.getBody();e&&e!=t;){if(C(e)||x(e))return e;e=e.parentNode}return null}function i(e,t,n){return n.collapsed?!1:h.reduce(n.getClientRects(),function(n,r){return n||u.containsXY(r,e,t)},!1)}function o(){var e,t=r(c.selection.getNode());C(t)&&y(t)&&c.dom.isEmpty(t)&&(e=c.dom.create("br",{"data-mce-bogus":"1"}),c.$(t).empty().append(e),c.selection.setRng(n.before(e).toRange()))}function l(e){var t=z();if(t)return"compositionstart"==e.type?(e.preventDefault(),e.stopPropagation(),void U(t)):void(" "!=t.innerHTML&&U(t))}function f(e){var t;switch(e.keyCode){case d.DELETE:t=o();break;case d.BACKSPACE:t=o()}t&&e.preventDefault()}var g=b(I,1,te,E),v=b(I,-1,ne,N),w=b(j,1,E),_=b(j,-1,N),T=b(F,-1,a.upUntil),B=b(F,1,a.downUntil);c.on("mouseup",function(){var e=k();e.collapsed&&S(W(e))}),c.on("click",function(e){var t;t=r(e.target),t&&x(t)&&e.preventDefault()});var D=function(e){var r=new t(e);if(!e.firstChild)return!1;var i=n.before(e.firstChild),o=r.next(i);return o&&!E(o)&&!N(o)},L=function(e,t){var n=c.dom.getParent(e,c.dom.isBlock),r=c.dom.getParent(t,c.dom.isBlock);return n===r},M=function(e,t){var n=c.dom.getParent(e,c.dom.isBlock),r=c.dom.getParent(t,c.dom.isBlock);return n&&!L(n,r)&&D(n)};c.on("mousedown",function(e){var t;if(t=r(e.target))x(t)?(e.preventDefault(),G(A(t))):(J(),i(e.clientX,e.clientY,c.selection.getRng())||c.selection.placeCaretAt(e.clientX,e.clientY));else{J(),re.hide();var n=s.closestCaret(Z,e.clientX,e.clientY);n&&(M(e.target,n.node)||(e.preventDefault(),c.getBody().focus(),S(R(1,n.node,n.before))))}}),c.on("keydown",function(t){if(!d.modifierPressed(t))switch(t.keyCode){case d.RIGHT:e(t,g);break;case d.DOWN:e(t,B);break;case d.LEFT:e(t,v);break;case d.UP:e(t,T);break;case d.DELETE:e(t,w);break;case d.BACKSPACE:e(t,_);break;default:x(c.selection.getNode())&&t.preventDefault()}}),c.on("keyup compositionstart",function(e){l(e),f(e)},!0),c.on("cut",function(){var e=c.selection.getNode();x(e)&&p.setEditorTimeout(c,function(){S(V($(e)))})}),c.on("getSelectionRange",function(e){var t=e.range;if(oe){if(!oe.parentNode)return void(oe=null);t=t.cloneRange(),t.selectNode(oe),e.range=t}}),c.on("setSelectionRange",function(e){var t;t=G(e.range),t&&(e.range=t)}),c.on("focus",function(){p.setEditorTimeout(c,function(){c.selection.setRng(V(c.selection.getRng()))},0)}),m.init(c)}function X(){var e=c.contentStyles,t=".mce-content-body";e.push(re.getCss()),e.push(t+" .mce-offscreen-selection {position: absolute;left: -9999999999px;width: 100px;height: 100px;}"+t+" *[contentEditable=false] {cursor: default;}"+t+" *[contentEditable=true] {cursor: text;}")}function K(e){return r.isCaretContainer(e.startContainer)||r.isCaretContainer(e.endContainer)}function G(t){var n,r=c.$,i=c.dom,o,a,s,l,u,d,f,h,p;if(!t)return J(),null;if(t.collapsed){if(J(),!K(t)){if(f=L(1,t),x(f.getNode()))return R(1,f.getNode(),!f.isAtEnd());if(x(f.getNode(!0)))return R(1,f.getNode(!0),!1)}return null}return s=t.startContainer,l=t.startOffset,u=t.endOffset,3==s.nodeType&&0==l&&x(s.parentNode)&&(s=s.parentNode,l=i.nodeIndex(s),s=s.parentNode),1!=s.nodeType?(J(),null):(u==l+1&&(n=s.childNodes[l]),x(n)?(h=p=n.cloneNode(!0),d=c.fire("ObjectSelected",{target:n,targetClone:h}),d.isDefaultPrevented()?(J(),null):(h=d.targetClone,o=r("#"+ie),0===o.length&&(o=r('
').attr("id",ie),o.appendTo(c.getBody())),t=c.dom.createRng(),h===p&&e.ie?(o.empty().append(g.ZWSP).append(h).append(g.ZWSP),t.setStart(o[0].firstChild,0),t.setEnd(o[0].lastChild,1)):(o.empty().append("\xa0").append(h).append("\xa0"),t.setStart(o[0].firstChild,1),t.setEnd(o[0].lastChild,0)),o.css({top:i.getPos(n,c.getBody()).y}),c.getBody().focus(),o[0].focus(),a=c.selection.getSel(),a.removeAllRanges(),a.addRange(t),c.$("*[data-mce-selected]").removeAttr("data-mce-selected"),n.setAttribute("data-mce-selected",1),oe=n,t)):(J(),null))}function J(){oe&&(oe.removeAttribute("data-mce-selected"),c.$("#"+ie).remove(),oe=null)}function Q(){re.destroy(),oe=null}var Z=c.getBody(),ee=new t(Z),te=b(v,ee.next),ne=b(v,ee.prev),re=new o(c.getBody(),y),ie="sel-"+c.dom.uniqueId(),oe,ae=c.$;return e.ceFalse&&(Y(),X()),{showBlockCaretContainer:U,destroy:Q}}var b=f.curry,C=l.isContentEditableTrue,x=l.isContentEditableFalse,w=l.isElement,N=i.isAfterContentEditableFalse,E=i.isBeforeContentEditableFalse,_=c.getSelectedNode;return y}),r(Ze,[w,g,E,R,A,H,P,Y,J,Q,Z,ee,oe,ae,N,f,Ae,Pe,B,L,Oe,d,m,u,Ie,Fe,ze,je,Qe],function(e,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v,y,b,C,x,w,N,E,_,S,k,T,R){function A(e,t,i){var o=this,a,s,l;a=o.documentBaseUrl=i.documentBaseURL,s=i.baseURI,l=i.defaultSettings,t=M({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:a,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:o.convertURL,url_converter_scope:o,ie7_compat:!0},l,t),l&&l.external_plugins&&t.external_plugins&&(t.external_plugins=M({},l.external_plugins,t.external_plugins)),o.settings=t,r.language=t.language||"en",r.languageLoad=t.language_load,r.baseURL=i.baseURL,o.id=t.id=e,o.setDirty(!1),o.plugins={},o.documentBaseURI=new p(t.document_base_url||a,{base_uri:s}),o.baseURI=s,o.contentCSS=[],o.contentStyles=[],o.shortcuts=new k(o),o.loadedCSS={},o.editorCommands=new h(o),t.target&&(o.targetElm=t.target),o.suffix=i.suffix,o.editorManager=i,o.inline=t.inline,t.cache_suffix&&(w.cacheSuffix=t.cache_suffix.replace(/^[\?\&]+/,"")),t.override_viewport===!1&&(w.overrideViewPort=!1),i.fire("SetupEditor",o),o.execCallback("setup",o),o.$=n.overrideDefaults(function(){return{context:o.inline?o.getBody():o.getDoc(),element:o.getBody()}})}var B=e.DOM,D=r.ThemeManager,L=r.PluginManager,M=N.extend,P=N.each,H=N.explode,O=N.inArray,I=N.trim,F=N.resolve,z=g.Event,U=w.gecko,W=w.ie;return A.prototype={render:function(){function e(){B.unbind(window,"ready",e),n.render()}function t(){var e=m.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!D.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",D.load(r.theme,t)}N.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),P(r.external_plugins,function(e,t){L.load(t,e),r.plugins+=" "+t}),P(r.plugins.split(/[ ,]/),function(e){if(e=I(e),e&&!L.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=L.dependencies(e);P(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=L.createUrl(t,e),L.load(e.resource,e)})}else L.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!z.domLoaded)return void B.bind(window,"ready",e);if(n.getElement()&&w.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||B.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(B.insertAfter(B.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},B.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.setDirty(!1),a._mceOldSubmit(a)})),n.windowManager=new v(n),n.notificationManager=new y(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=B.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),n.editorManager.add(n),t()}},init:function(){function e(n){var r=L.get(n),i,o;if(i=L.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=I(n),r&&-1===O(m,n)){if(P(L.dependencies(n),function(t){e(t)}),t.plugins[n])return;o=new r(t,i,t.$),t.plugins[n]=o,o.init&&(o.init(t,i),m.push(n))}}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,u,d,f,h,p,m=[];if(this.editorManager.i18n.setCode(n.language),t.rtl=n.rtl_ui||this.editorManager.i18n.rtl,n.aria_label=n.aria_label||B.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),c=D.get(n.theme),t.theme=new c(t,D.urls[n.theme]),t.theme.init&&t.theme.init(t,D.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""),t.$)):t.theme=n.theme),P(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,h=/^[0-9\.]+(|px)$/i,h.test(""+i)&&(i=Math.max(parseInt(i,10),100)),h.test(""+o)&&(o=Math.max(parseInt(o,10),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&P(H(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();if(t.iframeHTML=n.doctype+"",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!w.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',!/#$/.test(document.location.href))for(p=0;p',t.loadedCSS[g]=!0}d=n.body_id||"tinymce",-1!=d.indexOf("=")&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),f=n.body_class||"",-1!=f.indexOf("=")&&(f=t.getParam("body_class","","hash"),f=f[t.id]||""),n.content_security_policy&&(t.iframeHTML+=''),t.iframeHTML+='
';var v='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';document.domain!=location.hostname&&w.ie&&w.ie<12&&(u=v);var y=B.create("iframe",{id:t.id+"_ifr",frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}});if(y.onload=function(){y.onload=null,t.fire("load")},B.setAttrib(y,"src",u||'javascript:""'),t.contentAreaContainer=l.iframeContainer,t.iframeElement=y,s=B.add(l.iframeContainer,y),W)try{t.getDoc()}catch(b){s.src=u=v}l.editorContainer&&(B.get(l.editorContainer).style.display=t.orgDisplay,t.hidden=B.isHidden(l.editorContainer)),t.getElement().style.display="none",B.setAttrib(t.id,"aria-hidden",!0),u||t.initContentBody(),r=s=l=null},initContentBody:function(t){var n=this,r=n.settings,s=n.getElement(),h=n.getDoc(),p,m;r.inline||(n.getElement().style.visibility=n.orgVisibility),t||r.content_editable||(h.open(),h.write(n.iframeHTML),h.close()),r.content_editable&&(n.on("remove",function(){var e=this.getBody();B.removeClass(e,"mce-content-body"),B.removeClass(e,"mce-edit-focus"),B.setAttrib(e,"contentEditable",null)}),B.addClass(s,"mce-content-body"),n.contentDocument=h=r.content_document||document,n.contentWindow=r.content_window||window,n.bodyElement=s,r.content_document=r.content_window=null,r.root_name=s.nodeName.toLowerCase()),p=n.getBody(),p.disabled=!0,n.readonly=r.readonly,n.readonly||(n.inline&&"static"==B.getStyle(p,"position",!0)&&(p.style.position="relative"),p.contentEditable=n.getParam("content_editable_state",!0)),p.disabled=!1,n.editorUpload=new T(n),n.schema=new b(r),n.dom=new e(h,{keep_values:!0,url_converter:n.convertURL,url_converter_scope:n,hex_colors:r.force_hex_style_colors,class_filter:r.class_filter,update_styles:!0,root_element:n.inline?n.getBody():null,collect:r.content_editable,schema:n.schema,onSetAttrib:function(e){n.fire("SetAttrib",e)}}),n.parser=new C(r,n.schema),n.parser.addAttributeFilter("src,href,style,tabindex",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)if(i=e[r],a=i.attr(t),s="data-mce-"+t,!i.attributes.map[s]){if(0===a.indexOf("data:")||0===a.indexOf("blob:"))continue;"style"===t?(a=o.serializeStyle(o.parseStyle(a),i.name),a.length||(a=null),i.attr(s,a),i.attr(t,a)):"tabindex"===t?(i.attr(s,a),i.attr(t,null)):i.attr(s,n.convertURL(a,t,i.name))}}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("type")||"no/type",0!==r.indexOf("mce-")&&n.attr("type","mce-"+r)}),n.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,r,i=n.schema.getNonEmptyElements();t--;)r=e[t],r.isEmpty(i)&&(r.append(new o("br",1)).shortEnded=!0)}),n.serializer=new a(r,n),n.selection=new l(n.dom,n.getWin(),n.serializer,n),n.formatter=new c(n),n.undoManager=new u(n),n.forceBlocks=new f(n),n.enterKey=new d(n),n._nodeChangeDispatcher=new i(n),n._selectionOverrides=new R(n),n.fire("PreInit"),r.browser_spellcheck||r.gecko_spellcheck||(h.body.spellcheck=!1,B.setAttrib(p,"spellcheck","false")),n.quirks=new x(n),n.fire("PostRender"),r.directionality&&(p.dir=r.directionality),r.nowrap&&(p.style.whiteSpace="nowrap"),r.protect&&n.on("BeforeSetContent",function(e){P(r.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),n.on("SetContent",function(){n.addVisual(n.getBody())}),r.padd_empty_editor&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,n.bindPendingEventDelegates(),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.on("compositionstart compositionend",function(e){n.composing="compositionstart"===e.type}),n.contentStyles.length>0&&(m="",P(n.contentStyles,function(e){m+=e+"\r\n"}),n.dom.addStyle(m)),P(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),r.auto_focus&&E.setEditorTimeout(n,function(){var e;e=r.auto_focus===!0?n:n.editorManager.get(r.auto_focus),e.destroyed||e.focus()},100),s=h=p=null},focus:function(e){function t(e){return n.dom.getParent(e,function(e){return"true"===n.dom.getContentEditable(e)})}var n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l=n.getBody(),c;if(!e){if(o=r.getRng(),o.item&&(a=o.item(0)),n.quirks.refreshContentEditable(),c=t(r.getNode()),n.$.contains(l,c))return c.focus(),r.normalize(),void n.editorManager.setActive(n);if(i||(w.opera||n.getBody().focus(),n.getWin().focus()),U||i){if(l.setActive)try{l.setActive()}catch(u){l.focus()}else l.focus();i&&r.normalize()}a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())}n.editorManager.setActive(n)},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?F(r):0,n=F(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?(e=n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}),this.editorManager.translate(e)):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?P(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(e){e=e.split("="),e.length>1?i[I(e[0])]=I(e[1]):i[I(e[0])]=I(e)}):i=r,i):r},nodeChanged:function(e){this._nodeChangeDispatcher.nodeChanged(e)},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addContextToolbar:function(e,t){var n=this,r;n.contextToolbars=n.contextToolbars||[],"string"==typeof e&&(r=e,e=function(e){return n.dom.is(e,r)}),n.contextToolbars.push({predicate:e,items:t})},addCommand:function(e,t,n){this.editorCommands.addCommand(e,t,n)},addQueryStateHandler:function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},addQueryValueHandler:function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},queryCommandState:function(e){return this.editorCommands.queryCommandState(e)},queryCommandValue:function(e){return this.editorCommands.queryCommandValue(e)},queryCommandSupported:function(e){return this.editorCommands.queryCommandSupported(e)},show:function(){var e=this;e.hidden&&(e.hidden=!1,e.inline?e.getBody().contentEditable=!0:(B.show(e.getContainer()),B.hide(e.id)),e.load(),e.fire("show"))},hide:function(){var e=this,t=e.getDoc();e.hidden||(W&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable=!1,e==e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(B.hide(e.getContainer()),B.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),"raw"==e.format&&t.fire("RawSaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=B.getParent(t.id,"form"))&&P(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&t.setDirty(!1),r},setContent:function(e,t){var n=this,r=n.getBody(),i,o;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(o=W&&11>W?"":'
',"TABLE"==r.nodeName?e="
":/^(UL|OL)$/.test(r.nodeName)&&(e="
  • "+o+"
  • "),i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=o,e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):W||e||(e='
    '),n.dom.setHTML(r,e),n.fire("SetContent",t)):("raw"!==t.format&&(e=new s({validate:n.validate},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=I(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?t.serializer.getTrimmedContent():"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),"text"!=e.format?e.content=I(n):e.content=n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e,t){t&&(e=M({content:e},t)),this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},setDirty:function(e){var t=!this.isNotDirty;this.isNotDirty=!e,e&&e!=t&&this.fire("dirty")},setMode:function(e){S.setMode(this,e)},getContainer:function(){var e=this;return e.container||(e.container=B.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return this.targetElm||(this.targetElm=B.get(this.id)),this.targetElm},getWin:function(){var e=this,t;return e.contentWindow||(t=e.iframeElement,t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),P(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||!n.hasVisual?i.removeClass(e,o):i.addClass(e,o));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o=r.visual_anchor_class||"mce-item-anchor",t&&n.hasVisual?i.addClass(e,o):i.removeClass(e,o)))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;e.removed||(e.save(),e.removed=1,e.unbindAllNativeEvents(),e.hasHiddenInput&&B.remove(e.getElement().nextSibling),e.inline||(W&&10>W&&e.getDoc().execCommand("SelectAll",!1,null),B.setStyle(e.id,"display",e.orgDisplay),e.getBody().onload=null),e.fire("remove"),e.editorManager.remove(e),B.remove(e.getContainer()),e._selectionOverrides.destroy(),e.editorUpload.destroy(),e.destroy())},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),B.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.bodyElement=t.contentDocument=t.contentWindow=null,t.iframeElement=t.targetElm=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},uploadImages:function(e){return this.editorUpload.uploadImages(e)},_scanForImages:function(){return this.editorUpload.scanForImages()}},M(A.prototype,_),A}),r(et,[],function(){var e={},t="en";return{setCode:function(e){e&&(t=e,this.rtl=this.data[e]?"rtl"===this.data[e]._dir:!1)},getCode:function(){return t},rtl:!1,add:function(t,n){var r=e[t];r||(e[t]=r={});for(var i in n)r[i]=n[i];this.setCode(t)},translate:function(n){var r;if(r=e[t],r||(r={}),"undefined"==typeof n)return n;if("string"!=typeof n&&n.raw)return n.raw;if(n.push){var i=n.slice(1);n=(r[n[0]]||n[0]).replace(/\{([0-9]+)\}/g,function(e,t){return i[t]})}return(r[n]||n).replace(/{context:\w+}$/,"")},data:e}}),r(tt,[w,u,d],function(e,t,n){function r(e){function l(){try{return document.activeElement}catch(e){return document.body}}function c(e,t){if(t&&t.startContainer){if(!e.isChildOf(t.startContainer,e.getRoot())||!e.isChildOf(t.endContainer,e.getRoot()))return;return{startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset}}return t}function u(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}function d(e){return!!s.getParent(e,r.isEditorUIElement)}function f(r){var f=r.editor;f.on("init",function(){(f.inline||n.ie)&&("onbeforedeactivate"in document&&n.ie<9?f.dom.bind(f.getBody(),"beforedeactivate",function(e){if(e.target==f.getBody())try{f.lastRng=f.selection.getRng()}catch(t){}}):f.on("nodechange mouseup keyup",function(e){var t=l();"nodechange"==e.type&&e.selectionChange||(t&&t.id==f.id+"_ifr"&&(t=f.getBody()),f.dom.isChildOf(t,f.getBody())&&(f.lastRng=f.selection.getRng()))}),n.webkit&&!i&&(i=function(){var t=e.activeEditor;if(t&&t.selection){var n=t.selection.getRng();n&&!n.collapsed&&(f.lastRng=n)}},s.bind(document,"selectionchange",i)))}),f.on("setcontent",function(){f.lastRng=null}),f.on("mousedown",function(){f.selection.lastFocusBookmark=null}),f.on("focusin",function(){var t=e.focusedEditor,n;f.selection.lastFocusBookmark&&(n=u(f,f.selection.lastFocusBookmark),f.selection.lastFocusBookmark=null,f.selection.setRng(n)),t!=f&&(t&&t.fire("blur",{focusedEditor:f}),e.setActive(f),e.focusedEditor=f,f.fire("focus",{blurredEditor:t}),f.focus(!0)),f.lastRng=null}),f.on("focusout",function(){t.setEditorTimeout(f,function(){var t=e.focusedEditor;d(l())||t!=f||(f.fire("blur",{focusedEditor:null}),e.focusedEditor=null,f.selection&&(f.selection.lastFocusBookmark=null))})}),o||(o=function(t){var n=e.activeEditor,r;r=t.target,n&&r.ownerDocument==document&&(n.selection&&r!=n.getBody()&&(n.selection.lastFocusBookmark=c(n.dom,n.lastRng)),r==document.body||d(r)||e.focusedEditor!=n||(n.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},s.bind(document,"focusin",o)),f.inline&&!a&&(a=function(t){var n=e.activeEditor;if(n.inline&&!n.dom.isChildOf(t.target,n.getBody())){var r=n.selection.getRng();r.collapsed||(n.lastRng=r)}},s.bind(document,"mouseup",a))}function h(t){e.focusedEditor==t.editor&&(e.focusedEditor=null),e.activeEditor||(s.unbind(document,"selectionchange",i),s.unbind(document,"focusin",o),s.unbind(document,"mouseup",a),i=o=a=null)}e.on("AddEditor",f),e.on("RemoveEditor",h)}var i,o,a,s=e.DOM;return r.isEditorUIElement=function(e){return-1!==e.className.toString().indexOf("mce-")},r}),r(nt,[Ze,g,w,ae,d,m,c,ue,et,tt],function(e,t,n,r,i,o,a,s,l,c){function u(e){g(C.editors,function(t){"scroll"===e.type?t.fire("ScrollWindow",e):t.fire("ResizeWindow",e)})}function d(e,n){n!==x&&(n?t(window).on("resize scroll",u):t(window).off("resize scroll",u),x=n)}function f(e){var t=C.editors,n;delete t[e.id];for(var r=0;r0&&g(m(t),function(e){var t;(t=p.get(e))?n.push(t):g(document.forms,function(t){g(t.elements,function(t){t.name===e&&(e="mce_editor_"+y++,p.setAttrib(t,"id",e),n.push(t))})})});break;case"textareas":case"specific_textareas":g(p.select("textarea"),function(t){e.editor_deselector&&s(t,e.editor_deselector)||e.editor_selector&&!s(t,e.editor_selector)||n.push(t)})}return n}function c(){function a(t,n,r){var i=new e(t,n,u);d.push(i),i.on("init",function(){++s===m.length&&f(d)}),i.targetElm=i.targetElm||r,i.render()}var s=0,d=[],m;return p.unbind(window,"ready",c),i("onpageload"),m=t.unique(l(n)),n.types?void g(n.types,function(e){o.each(m,function(t){return p.is(t,e.selector)?(a(r(t),v({},n,e),t),!1):!0})}):(o.each(m,function(e){h(u.get(e.id))}),m=o.grep(m,function(e){return!u.get(e.id)}),void g(m,function(e){a(r(e),n,e)}))}var u=this,d,f=function(e){d=e};return u.settings=n,p.bind(window,"ready",c),new a(function(e){d?e(d):f=function(t){e(t)}})},get:function(e){return arguments.length?e in this.editors?this.editors[e]:null:this.editors},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),d(n,!0),t.activeEditor=e,t.fire("AddEditor",{editor:e}),b||(b=function(){t.fire("BeforeUnload")},p.bind(window,"beforeunload",b)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i;{if(e)return"string"==typeof e?(e=e.selector||e,void g(p.select(e),function(e){i=r[e.id],i&&t.remove(i)})):(i=e,r[i.id]?(f(i)&&t.fire("RemoveEditor",{editor:i}),r.length||p.unbind(window,"beforeunload",b),i.remove(),d(r,r.length>0),i):null);for(n=r.length-1;n>=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){g(this.editors,function(e){e.save()})},addI18n:function(e,t){l.add(e,t)},translate:function(e){return l.translate(e)},setActive:function(e){var t=this.activeEditor;this.activeEditor!=e&&(t&&t.fire("deactivate",{relatedTarget:e}),e.fire("activate",{relatedTarget:t})),this.activeEditor=e}},v(C,s),C.setup(),window.tinymce=window.tinyMCE=C,C}),r(rt,[nt,m],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(n,r){"html4"===t.settings.schema&&e(r,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(it,[ue,m],function(e,t){var n={send:function(e){function r(){!e.async||4==i.readyState||o++>1e4?(e.success&&1e4>o&&200==i.status?e.success.call(e.success_scope,""+i.responseText,i,e):e.error&&e.error.call(e.error_scope,o>1e4?"TIMED_OUT":"GENERAL",i,e),i=null):setTimeout(r,10)}var i,o=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async!==!1,e.data=e.data||"",n.fire("beforeInitialize",{settings:e}),i=new XMLHttpRequest){if(i.overrideMimeType&&i.overrideMimeType(e.content_type),i.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.crossDomain&&(i.withCredentials=!0),e.content_type&&i.setRequestHeader("Content-Type",e.content_type),e.requestheaders&&t.each(e.requestheaders,function(e){i.setRequestHeader(e.key,e.value)}),i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i=n.fire("beforeSend",{xhr:i,settings:e}).xhr,i.send(e.data),!e.async)return r();setTimeout(r,10)}}};return t.extend(n,e),n}),r(ot,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(at,[ot,it,m],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(st,[w],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(lt,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?u+e:i.indexOf(",",u),-1===r||r>i.length?null:(n=i.substring(u,r),u=r+1,n)}var r,i,s,u=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do{var d=n();if(null===d)break;if(r=n(parseInt(d,32)||0),null!==r){if(d=n(),null===d)break;s=n(parseInt(d,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(i){}e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(u){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(ct,[w,f,N,E,m,d],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(ut,[se,m],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.bodyClasses.add(this.settings.containerClass)},applyClasses:function(e){var t=this,n=t.settings,r,i,o,a;r=n.firstControlClass,i=n.lastControlClass,e.each(function(e){e.classes.remove(r).remove(i).add(n.controlClass),e.visible()&&(o||(o=e),a=e)}),o&&o.classes.add(r),a&&a.classes.add(i)},renderHtml:function(e){var t=this,n="";return t.applyClasses(e.items()),e.items().each(function(e){n+=e.renderHtml()}),n},recalc:function(){},postRender:function(){},isNative:function(){return!1}})}),r(dt,[ut],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
    '+this._super(e)}})}),r(ft,[De],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t._super(e),e=t.settings,n=t.settings.size,t.on("click mousedown",function(e){e.preventDefault()}),t.on("touchstart",function(e){t.fire("click",e),e.preventDefault()}),e.subtype&&t.classes.add(e.subtype),n&&t.classes.add("btn-"+n),e.icon&&t.icon(e.icon)},icon:function(e){return arguments.length?(this.state.set("icon",e),this):this.state.get("icon")},repaint:function(){var e=this.getEl().firstChild,t;e&&(t=e.style,t.width=t.height="100%"),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.state.get("icon"),i,o=e.state.get("text"),a="";return i=e.settings.image,i?(r="none","string"!=typeof i&&(i=window.getSelection?i[0]:i[1]),i=" style=\"background-image: url('"+i+"')\""):i="",o&&(e.classes.add("btn-has-text"),a=''+e.encode(o)+""),r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
    "},bindStates:function(){function e(e){var i=n("span."+r,t.getEl());e?(i[0]||(n("button:first",t.getEl()).append(''),i=n("span."+r,t.getEl())),i.html(t.encode(e))):i.remove(),t.classes.toggle("btn-has-text",!!e)}var t=this,n=t.$,r=t.classPrefix+"txt";return t.state.on("change:text",function(t){e(t.value)}),t.state.on("change:icon",function(n){var r=n.value,i=t.classPrefix;t.settings.icon=r,r=r?i+"ico "+i+"i-"+t.settings.icon:"";var o=t.getEl().firstChild,a=o.getElementsByTagName("i")[0];r?(a&&a==o.firstChild||(a=document.createElement("i"),o.insertBefore(a,o.firstChild)),a.className=r):a&&o.removeChild(a),e(t.state.get("text"))}),t._super()}})}),r(ht,[xe],function(e){return e.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.classes.add("btn-group"),e.preRender(),t.preRender(e),'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(pt,[De],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){return arguments.length?(this.state.set("checked",e),this):this.state.get("checked")},value:function(e){return arguments.length?this.checked(e):this.checked()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
    '+e.encode(e.state.get("text"))+"
    "},bindStates:function(){function e(e){t.classes.toggle("checked",e),t.aria("checked",e)}var t=this;return t.state.on("change:text",function(e){t.getEl("al").firstChild.data=t.translate(e.value)}),t.state.on("change:checked change:value",function(n){t.fire("change"),e(n.value)}),t.state.on("change:icon",function(e){var n=e.value,r=t.classPrefix;if("undefined"==typeof n)return t.settings.icon;t.settings.icon=n,n=n?r+"ico "+r+"i-"+t.settings.icon:"";var i=t.getEl().firstChild,o=i.getElementsByTagName("i")[0];n?(o&&o==i.firstChild||(o=document.createElement("i"),i.insertBefore(o,i.firstChild)),o.className=n):o&&i.removeChild(o)}),t.state.get("checked")&&e(!0),t._super()}})}),r(mt,[De,be,pe,g],function(e,t,n,r){return e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.classes.add("combobox"),t.subinput=!0,t.ariaTarget="inp",e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){var i=n.target,o=t.getEl();if(r.contains(o,i)||i==o)for(;i&&i!=o;)i.id&&-1!=i.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].focus())),i=i.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){var r=t.state.get("value"),i=t.getEl("inp").value;return e.preventDefault(),t.state.set("value",i),r!=i&&t.fire("change"),n.hasEventListeners("submit")&&n.toJSON?(n.fire("submit",{data:n.toJSON()}),!1):void 0})}),t.on("keyup",function(e){"INPUT"==e.target.nodeName&&t.state.set("value",e.target.value)})},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName.toUpperCase()&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),i=e.getEl("open"),o=e.layoutRect(),a,s;a=i?o.w-n.getSize(i).width-10:o.w-10;var l=document;return l.all&&(!l.documentMode||l.documentMode<=8)&&(s=e.layoutRect().h-2+"px"),r(t.firstChild).css({width:a,lineHeight:s}),e._super(),e},postRender:function(){var e=this;return r(this.getEl("inp")).on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)}),e._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=e.state.get("value")||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e.state.get("text"),(o||a)&&(s='
    ",e.classes.add("has-open")),'
    '+s+"
    "},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl("inp").value!=t.value&&(e.getEl("inp").value=t.value)}),e.state.on("change:disabled",function(t){e.getEl("inp").disabled=t.value}),e._super()},remove:function(){r(this.getEl("inp")).off(),this._super()}})}),r(gt,[mt],function(e){return e.extend({init:function(e){var t=this;e.spellcheck=!1,e.onaction&&(e.icon="none"),t._super(e),t.classes.add("colorbox"),t.on("change keyup postrender",function(){t.repaintColor(t.value())})},repaintColor:function(e){var t=this.getEl().getElementsByTagName("i")[0];if(t)try{t.style.background=e}catch(n){}},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.state.get("rendered")&&e.repaintColor(t.value)}),e._super()}})}),r(vt,[ft,ke],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.role=r.role||"dialog",r.popover=!0,r.autohide=!0,r.ariaRoot=!0,e.panel=new t(r).on("hide",function(){e.active(!1)}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()},remove:function(){return this.panel&&(this.panel.remove(),this.panel=null),this._super()}})}),r(yt,[vt,w],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.classes.add("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},resetColor:function(){return this._color=null,this.getEl("preview").style.backgroundColor=null,this},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.state.get("text"),i=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",o=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"",a="";return r&&(e.classes.add("btn-has-text"),a=''+e.encode(r)+""),'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.aria&&"down"==r.aria.key||r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(bt,[],function(){function e(e){function i(e,i,o){var a,s,l,c,u,d;return a=0,s=0,l=0,e/=255,i/=255,o/=255,u=t(e,t(i,o)),d=n(e,n(i,o)),u==d?(l=u,{h:0,s:0,v:100*l}):(c=e==u?i-o:o==u?e-i:o-e,a=e==u?3:o==u?1:5,a=60*(a-c/(d-u)),s=(d-u)/d,l=d,{h:r(a),s:r(100*s),v:r(100*l)})}function o(e,i,o){var a,s,l,c;if(e=(parseInt(e,10)||0)%360,i=parseInt(i,10)/100,o=parseInt(o,10)/100,i=n(0,t(i,1)),o=n(0,t(o,1)),0===i)return void(d=f=h=r(255*o));switch(a=e/60,s=o*i,l=s*(1-Math.abs(a%2-1)),c=o-s,Math.floor(a)){case 0:d=s,f=l,h=0;break;case 1:d=l,f=s,h=0;break;case 2:d=0,f=s,h=l;break;case 3:d=0,f=l,h=s;break;case 4:d=l,f=0,h=s;break;case 5:d=s,f=0,h=l;break;default:d=f=h=0}d=r(255*(d+c)),f=r(255*(f+c)),h=r(255*(h+c))}function a(){function e(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+e(d)+e(f)+e(h)}function s(){return{r:d,g:f,b:h}}function l(){return i(d,f,h)}function c(e){var t;return"object"==typeof e?"r"in e?(d=e.r,f=e.g,h=e.b):"v"in e&&o(e.h,e.s,e.v):(t=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(e))?(d=parseInt(t[1],10),f=parseInt(t[2],10),h=parseInt(t[3],10)):(t=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(e))?(d=parseInt(t[1],16),f=parseInt(t[2],16),h=parseInt(t[3],16)):(t=/#([0-F])([0-F])([0-F])/gi.exec(e))&&(d=parseInt(t[1]+t[1],16),f=parseInt(t[2]+t[2],16),h=parseInt(t[3]+t[3],16)),d=0>d?0:d>255?255:d,f=0>f?0:f>255?255:f,h=0>h?0:h>255?255:h,u}var u=this,d=0,f=0,h=0;e&&c(e),u.toRgb=s,u.toHsv=l,u.toHex=a,u.parse=c}var t=Math.min,n=Math.max,r=Math.round;return e}),r(Ct,[De,we,pe,bt],function(e,t,n,r){return e.extend({Defaults:{classes:"widget colorpicker"},init:function(e){this._super(e)},postRender:function(){function e(e,t){var r=n.getPos(e),i,o;return i=t.pageX-r.x,o=t.pageY-r.y,i=Math.max(0,Math.min(i/e.clientWidth,1)),o=Math.max(0,Math.min(o/e.clientHeight,1)),{x:i,y:o}}function i(e,t){var i=(360-e.h)/360;n.css(d,{top:100*i+"%"}),t||n.css(h,{left:e.s+"%",top:100-e.v+"%"}),f.style.background=new r({s:100,v:100,h:e.h}).toHex(),s.color().parse({s:e.s,v:e.v,h:e.h})}function o(t){var n;n=e(f,t),c.s=100*n.x,c.v=100*(1-n.y),i(c),s.fire("change")}function a(t){var n;n=e(u,t),c=l.toHsv(),c.h=360*(1-n.y),i(c,!0),s.fire("change")}var s=this,l=s.color(),c,u,d,f,h;u=s.getEl("h"),d=s.getEl("hp"),f=s.getEl("sv"),h=s.getEl("svp"),s._repaint=function(){c=l.toHsv(),i(c)},s._super(),s._svdraghelper=new t(s._id+"-sv",{start:o,drag:o}),s._hdraghelper=new t(s._id+"-h",{start:a,drag:a}),s._repaint()},rgb:function(){return this.color().toRgb()},value:function(e){var t=this;return arguments.length?(t.color().parse(e),void(t._rendered&&t._repaint())):t.color().toHex()},color:function(){return this._color||(this._color=new r),this._color},renderHtml:function(){function e(){var e,t,n="",i,a;for(i="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",a=o.split(","),e=0,t=a.length-1;t>e;e++)n+='
    ';return n}var t=this,n=t._id,r=t.classPrefix,i,o="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000",a="background: -ms-linear-gradient(top,"+o+");background: linear-gradient(to bottom,"+o+");";return i='
    '+e()+'
    ','
    '+i+"
    "}})}),r(xt,[De],function(e){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.classes.add("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.row()[n],index:n})}),t.row(t.settings.row)},focus:function(){var e=this;return e.getEl().firstChild.focus(),e},row:function(e){return arguments.length?(this.state.set("row",e),this):this.state.get("row")},renderHtml:function(){var e=this;return'
    '+e._getDataPathHtml(e.state.get("row"))+"
    "},bindStates:function(){var e=this;return e.state.on("change:row",function(t){e.innerHtml(e._getDataPathHtml(t.value))}),e._super()},_getDataPathHtml:function(e){var t=this,n=e||[],r,i,o="",a=t.classPrefix;for(r=0,i=n.length;i>r;r++)o+=(r>0?'":"")+'
    '+n[r].name+"
    ";return o||(o='
    \xa0
    '),o}})}),r(wt,[xt,nt],function(e,t){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var n=this,r=t.activeEditor;return r.settings.elementpath!==!1&&(n.on("select",function(e){r.focus(),r.selection.select(this.row()[e.index].element),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});if(s.isDefaultPrevented()||i.push({name:s.name,element:o[a]}),s.isPropagationStopped())break}n.row(i)})),n._super()}})}),r(Nt,[xe],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.classes.add("formitem"),t.preRender(e),'
    '+(e.settings.title?'
    '+e.settings.title+"
    ":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(Et,[xe,Nt,m],function(e,t,n){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,r=e.items();e.settings.formItemDefaults||(e.settings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),r.each(function(r){var i,o=r.settings.label;o&&(i=new t(n.extend({items:{type:"label",id:r._id+"-l",text:o,flex:0,forId:r._id,disabled:r.disabled()}},e.settings.formItemDefaults)),i.type="formitem",r.aria("labelledby",r._id+"-l"),"undefined"==typeof r.settings.flex&&(r.settings.flex=1),e.replace(r,i),i.add(r))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.fromJSON(e.settings.data)},bindStates:function(){function e(){var e=0,n=[],r,i,o;if(t.settings.labelGapCalc!==!1)for(o="children"==t.settings.labelGapCalc?t.find("formitem"):t.items(),o.filter("formitem").each(function(t){var r=t.items()[0],i=r.getEl().clientWidth;e=i>e?i:e,n.push(r)}),i=t.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=e+i}var t=this;t._super(),t.on("show",e),e()}})}),r(_t,[Et],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
    '+(e.settings.title?''+e.settings.title+"":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(St,[mt,m],function(e,t){return e.extend({init:function(e){var n=this,r=tinymce.activeEditor,i=r.settings,o,a,s;e.spellcheck=!1,s=i.file_picker_types||i.file_browser_callback_types,s&&(s=t.makeMap(s,/[, ]/)),s&&!s[e.filetype]||(a=i.file_picker_callback,!a||s&&!s[e.filetype]?(a=i.file_browser_callback,!a||s&&!s[e.filetype]||(o=function(){a(n.getEl("inp").id,n.value(),e.filetype,window)})):o=function(){var i=n.fire("beforecall").meta;i=t.extend({filetype:e.filetype},i),a.call(r,function(e,t){n.value(e).fire("change",{meta:t})},n.value(),i)}),o&&(e.icon="browse",e.onaction=o),n._super(e)}})}),r(kt,[dt],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox;e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(Tt,[dt],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v=[],y,b,C,x,w,N,E,_,S,k,T,R,A,B,D,L,M,P,H,O,I,F,z=Math.max,U=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e.paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,"row-reversed"!=f&&"column-reverse"!=f||(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(S="y",E="h",_="minH",k="maxH",R="innerH",T="top",A="deltaH",B="contentH",H="left",M="w",D="x",L="innerW",P="minW",O="right",I="deltaW",F="contentW"):(S="x",E="w",_="minW",k="maxW",R="innerW",T="left",A="deltaW",B="contentW",H="top",M="h",D="y",L="innerH",P="minH",O="bottom",I="deltaH",F="contentH"),d=i[R]-o[T]-o[T],N=u=0,t=0,n=r.length;n>t;t++)h=r[t],p=h.layoutRect(),m=h.settings,g=m.flex,d-=n-1>t?c:0,g>0&&(u+=g,p[k]&&v.push(h),p.flex=g),d-=p[_],y=o[H]+p[P]+o[O],y>N&&(N=y);if(x={},0>d?x[_]=i[_]-d+i[A]:x[_]=i[R]-d+i[A],x[P]=N+i[I],x[B]=i[R]-d,x[F]=N,x.minW=U(x.minW,i.maxW),x.minH=U(x.minH,i.maxH),x.minW=z(x.minW,i.startMinWidth),x.minH=z(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=d/u,t=0,n=v.length;n>t;t++)h=v[t],p=h.layoutRect(),b=p[k],y=p[_]+p.flex*C,y>b?(d-=p[k]-p[_],u-=p.flex,p.flex=0,p.maxFlexSize=b):p.maxFlexSize=0;for(C=d/u,w=o[T],x={},0===u&&("end"==l?w=d+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-d)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(d/(r.length-1)))),x[D]=o[H],t=0,n=r.length;n>t;t++)h=r[t],p=h.layoutRect(),y=p.maxFlexSize||p[_],"center"===s?x[D]=Math.round(i[L]/2-p[M]/2):"stretch"===s?(x[M]=z(p[P]||0,i[L]-o[H]-o[O]),x[D]=o[H]):"end"===s&&(x[D]=i[L]-p[M]-o.top),p.flex>0&&(y+=p.flex*C),x[E]=y,x[S]=w,h.layoutRect(x),h.recalc&&h.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var W=e.parent();W&&(W._lastRect=null,W.recalc())}}})}),r(Rt,[ut],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})},isNative:function(){return!0}})}),r(At,[ye,De,ke,m,nt,d],function(e,t,n,r,i,o){function a(e){function t(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function r(e){e=e.replace(/;$/,"").split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function i(){function t(e){var n=[];if(e)return s(e,function(e){var o={text:e.title,icon:e.icon};if(e.items)o.menu=t(e.items);else{var a=e.format||"custom"+r++;e.format||(e.name=a,i.push(e)),o.format=a,o.cmd=e.cmd}n.push(o)}),n}function n(){var n;return n=t(e.settings.style_formats_merge?e.settings.style_formats?o.concat(e.settings.style_formats):o:e.settings.style_formats||o)}var r=0,i=[],o=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){s(i,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:n(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?e.formatter.getCssText(this.settings.format):void 0},onPostRender:function(){var t=this;t.parent().on("show",function(){var n,r;n=t.settings.format,n&&(t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))),r=t.settings.cmd,r&&t.active(e.queryCommandState(r))})},onclick:function(){this.settings.format&&c(this.settings.format),this.settings.cmd&&e.execCommand(this.settings.cmd)}}}}function o(t){return function(){var n=this;e.formatter?e.formatter.formatChanged(t,function(e){n.active(e)}):e.on("init",function(){e.formatter.formatChanged(t,function(e){n.active(e)})})}}function a(t){return function(){function n(){return e.undoManager?e.undoManager[t]():!1}var r=this;t="redo"==t?"hasRedo":"hasUndo",r.disabled(!n()),e.on("Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",function(){r.disabled(e.readonly||!n())})}}function l(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function c(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t); -}var u;u=i(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:o(n),onclick:function(){c(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"],alignnone:["No alignment","JustifyNone"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:o(n)})}),e.addButton("undo",{tooltip:"Undo",onPostRender:a("undo"),cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:a("redo"),cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onPostRender:a("undo"),cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onPostRender:a("redo"),cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:l,cmd:"mceToggleVisualAid"}),e.addButton("remove",{tooltip:"Remove",icon:"remove",cmd:"Delete"}),s({cut:["Cut","Cut","Meta+X"],copy:["Copy","Copy","Meta+C"],paste:["Paste","Paste","Meta+V"],selectall:["Select all","SelectAll","Meta+A"],bold:["Bold","Bold","Meta+B"],italic:["Italic","Italic","Meta+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:u}),e.addButton("formatselect",function(){var n=[],i=r(e.settings.block_formats||"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre");return s(i,function(t){n.push({text:t[0],value:t[1],textStyle:function(){return e.formatter.getCssText(t[1])}})}),{type:"listbox",text:i[0][0],values:n,fixedWidth:!0,onselect:c,onPostRender:t(n)}}),e.addButton("fontselect",function(){var n="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",i=[],o=r(e.settings.font_formats||n);return s(o,function(e){i.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:i,fixedWidth:!0,onPostRender:t(i,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var n=[],r="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||r;return s(i.split(" "),function(e){var t=e,r=e,i=e.split("=");i.length>1&&(t=i[0],r=i[1]),n.push({text:t,value:r})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:n,fixedWidth:!0,onPostRender:t(n,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:u})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(Bt,[dt],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v,y,b,C,x,w,N,E=[],_=[],S,k,T,R,A,B;t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e.paddingBox,A="reverseRows"in t?t.reverseRows:e.isRtl(),C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]);for(d=0;r>d;d++)E.push(0);for(f=0;n>f;f++)_.push(0);for(f=0;n>f;f++)for(d=0;r>d&&(u=i[f*r+d],u);d++)c=u.layoutRect(),S=c.minW,k=c.minH,E[d]=S>E[d]?S:E[d],_[f]=k>_[f]?k:_[f];for(T=o.innerW-g.left-g.right,w=0,d=0;r>d;d++)w+=E[d]+(d>0?y:0),T-=(d>0?y:0)+E[d];for(R=o.innerH-g.top-g.bottom,N=0,f=0;n>f;f++)N+=_[f]+(f>0?b:0),R-=(f>0?b:0)+_[f];if(w+=g.left+g.right,N+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=N+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var D;D="start"==t.packV?0:R>0?Math.floor(R/n):0;var L=0,M=t.flexWidths;if(M)for(d=0;dd;d++)E[d]+=M?M[d]*P:P;for(p=g.top,f=0;n>f;f++){for(h=g.left,s=_[f]+D,d=0;r>d&&(B=A?f*r+r-1-d:f*r+d,u=i[B],u);d++)m=u.settings,c=u.layoutRect(),a=Math.max(E[d],c.startMinWidth),c.x=h,c.y=p,v=m.alignH||(C?C[d]||C[0]:null),"center"==v?c.x=h+a/2-c.w/2:"right"==v?c.x=h+a-c.w:"stretch"==v&&(c.w=a),v=m.alignV||(x?x[d]||x[0]:null),"center"==v?c.y=p+s/2-c.h/2:"bottom"==v?c.y=p+s-c.h:"stretch"==v&&(c.h=s),u.layoutRect(c),h+=a+y,u.recalc&&u.recalc();p+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var H=e.parent();H&&(H._lastRect=null,H.recalc())}}})}),r(Dt,[De,u],function(e,t){return e.extend({renderHtml:function(){var e=this;return e.classes.add("iframe"),e.canFocus=!1,''},src:function(e){this.getEl().src=e},html:function(e,n){var r=this,i=this.getEl().contentWindow.document.body;return i?(i.innerHTML=e,n&&n()):t.setTimeout(function(){r.html(e)}),this}})}),r(Lt,[De],function(e){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("widget").add("infobox"),t.canFocus=!1},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},help:function(e){this.state.set("help",e)},renderHtml:function(){var e=this,t=e.classPrefix;return'
    '+e.encode(e.state.get("text"))+'
    '},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl("body").firstChild.data=e.encode(t.value),e.state.get("rendered")&&e.updateLayoutRect()}),e.state.on("change:help",function(t){e.classes.toggle("has-help",t.value),e.state.get("rendered")&&e.updateLayoutRect()}),e._super()}})}),r(Mt,[De,pe],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("widget").add("label"),t.canFocus=!1,e.multiline&&t.classes.add("autoscroll"),e.strong&&t.classes.add("strong")},initLayoutRect:function(){var e=this,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.classes.add("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},renderHtml:function(){var e=this,t,n,r=e.settings.forId;return!r&&(n=e.settings.forName)&&(t=e.getRoot().find("#"+n)[0],t&&(r=t._id)),r?'":''+e.encode(e.state.get("text"))+""},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.innerHtml(e.encode(t.value)),e.state.get("rendered")&&e.updateLayoutRect()}),e._super()}})}),r(Pt,[xe],function(e){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.classes.add("toolbar")},postRender:function(){var e=this;return e.items().each(function(e){e.classes.add("toolbar-item")}),e._super()}})}),r(Ht,[Pt],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(Ot,[ft,be,Ht],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),e=t.settings,t.classes.add("menubtn"),e.fixedWidth&&t.classes.add("fixed-width"),t.aria("haspopup",!0),t.state.set("menu",e.menu||t.render())},showMenu:function(){var e=this,n;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(n=e.state.get("menu")||[],n.length?n={type:"menu",items:n}:n.type=n.type||"menu",n.renderTo?e.menu=n.parent(e).show().renderTo():e.menu=t.create(n).parent(e).renderTo(),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},activeMenu:function(e){this.classes.toggle("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon,o,a=e.state.get("text"),s="";return o=e.settings.image,o?(i="none","string"!=typeof o&&(o=window.getSelection?o[0]:o[1]),o=" style=\"background-image: url('"+o+"')\""):o="",a&&(e.classes.add("btn-has-text"),s=''+e.encode(a)+""),i=e.settings.icon?r+"ico "+r+"i-"+i:"",e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
    '},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.aria&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},bindStates:function(){var e=this;return e.state.on("change:menu",function(){e.menu&&e.menu.remove(),e.menu=null}),e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}});return i}),r(It,[De,be,d,u],function(e,t,n,r){return e.extend({Defaults:{border:0,role:"menuitem"},init:function(e){var t=this,n;t._super(e),e=t.settings,t.classes.add("menu-item"),e.menu&&t.classes.add("menu-item-expand"),e.preview&&t.classes.add("menu-item-preview"),n=t.state.get("text"),"-"!==n&&"|"!==n||(t.classes.add("menu-item-sep"),t.aria("role","separator"),t.state.set("text","-")),e.selectable&&(t.aria("role","menuitemcheckbox"),t.classes.add("menu-item-checkbox"),e.icon="selected"),e.preview||e.selectable||t.classes.add("menu-item-normal"),t.on("mousedown",function(e){e.preventDefault()}),e.menu&&!e.ariaHideMenu&&t.aria("haspopup",!0)},hasMenus:function(){return!!this.settings.menu},showMenu:function(){var e=this,n=e.settings,r,i=e.parent();if(i.items().each(function(t){t!==e&&t.hideMenu()}),n.menu){r=e.menu,r?r.show():(r=n.menu,r.length?r={type:"menu",items:r}:r.type=r.type||"menu",i.settings.itemDefaults&&(r.itemDefaults=i.settings.itemDefaults),r=e.menu=t.create(r).parent(e).renderTo(),r.reflow(),r.on("cancel",function(t){t.stopPropagation(),e.focus(),r.hide()}),r.on("show hide",function(e){e.control.items().each(function(e){e.active(e.settings.selected)})}).fire("show"),r.on("hide",function(t){t.control===r&&e.classes.remove("selected")}),r.submenu=!0),r._parentMenu=i,r.classes.add("menu-sub");var o=r.testMoveRel(e.getEl(),e.isRtl()?["tl-tr","bl-br","tr-tl","br-bl"]:["tr-tl","br-bl","tl-tr","bl-br"]);r.moveRel(e.getEl(),o),r.rel=o,o="menu-sub-"+o,r.classes.remove(r._lastRel).add(o),r._lastRel=o,e.classes.add("selected"),e.aria("expanded",!0)}},hideMenu:function(){var e=this;return e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide(),e.aria("expanded",!1)),e},renderHtml:function(){function e(e){var t,r,i={};for(i=n.mac?{alt:"⌥",ctrl:"⌘",shift:"⇧",meta:"⌘"}:{meta:"Ctrl"},e=e.split("+"),t=0;t'+("-"!==a?'\xa0":"")+("-"!==a?''+a+"":"")+(c?'
    '+c+"
    ":"")+(i.menu?'
    ':"")+""},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var i=e.getEl("text");i&&i.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),r.requestAnimationFrame(function(){e.parent().hideAll()})))}),e._super(),e},hover:function(){var e=this;return e.parent().items().each(function(e){e.classes.remove("selected")}),e.classes.toggle("selected",!0),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(Ft,[g,ye,u],function(e,t,n){return function(r,i){var o=this,a,s=t.classPrefix,l;o.show=function(t,c){function u(){a&&(e(r).append('
    '),c&&c())}return o.hide(),a=!0,t?l=n.setTimeout(u,t):u(),o},o.hide=function(){var e=r.lastChild;return n.clearTimeout(l),e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),a=!1,o}}}),r(zt,[ke,It,Ft,m],function(e,t,n,r){return e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,"function"==typeof e.items&&(e.itemsFactory=e.items,e.items=[]),e.itemDefaults)for(var n=e.items,i=n.length;i--;)n[i]=r.extend({},e.itemDefaults,n[i]);t._super(e),t.classes.add("menu")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},load:function(){function e(){t.throbber&&(t.throbber.hide(),t.throbber=null)}var t=this,r,i;i=t.settings.itemsFactory,i&&(t.throbber||(t.throbber=new n(t.getEl("body"),!0),0===t.items().length?(t.throbber.show(),t.fire("loading")):t.throbber.show(100,function(){t.items().remove(),t.fire("loading")}),t.on("hide close",e)),t.requestTime=r=(new Date).getTime(),t.settings.itemsFactory(function(n){return 0===n.length?void t.hide():void(t.requestTime===r&&(t.getEl().style.width="",t.getEl("body").style.width="",e(),t.items().remove(),t.getEl("body").innerHTML="",t.add(n),t.renderNew(),t.fire("loaded")))}))},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.image||n.selectable?(e._hasIcons=!0,!1):void 0}),e.settings.itemsFactory&&e.on("postrender",function(){e.settings.itemsFactory&&e.load()}),e._super()}})}),r(Ut,[Ot,zt],function(e,t){return e.extend({init:function(e){function t(r){for(var a=0;a0&&(o=r[0].text,n.state.set("value",r[0].value)),n.state.set("menu",r)),n.state.set("text",e.text||o),n.classes.add("listbox"),n.on("select",function(t){var r=t.control;a&&(t.lastControl=a),e.multiple?r.active(!r.active()):n.value(t.control.value()),a=r})},bindStates:function(){function e(e,n){e instanceof t&&e.items().each(function(e){e.hasMenus()||e.active(e.value()===n)})}function n(e,t){var r;if(e)for(var i=0;i'},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r($t,[De],function(e){function t(e){var t="";if(e)for(var n=0;n'+e[n]+"";return t}return e.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(e){var t=this;t._super(e),t.settings.size&&(t.size=t.settings.size),t.settings.options&&(t._options=t.settings.options),t.on("keydown",function(e){var n;13==e.keyCode&&(e.preventDefault(),t.parents().reverse().each(function(e){return e.toJSON?(n=e,!1):void 0}),t.fire("submit",{data:n.toJSON()}))})},options:function(e){return arguments.length?(this.state.set("options",e),this):this.state.get("options")},renderHtml:function(){var e=this,n,r="";return n=t(e._options),e.size&&(r=' size = "'+e.size+'"'),'"},bindStates:function(){var e=this;return e.state.on("change:options",function(n){e.getEl().innerHTML=t(n.value)}),e._super()}})}),r(qt,[De,we,pe],function(e,t,n){function r(e,t,n){return t>e&&(e=t),e>n&&(e=n),e}function i(e,t,n){e.setAttribute("aria-"+t,n)}function o(e,t){var r,o,a,s,l,c;"v"==e.settings.orientation?(s="top",a="height",o="h"):(s="left",a="width",o="w"),c=e.getEl("handle"),r=(e.layoutRect()[o]||100)-n.getSize(c)[a],l=r*((t-e._minValue)/(e._maxValue-e._minValue))+"px",c.style[s]=l,c.style.height=e.layoutRect().h+"px",i(c,"valuenow",t),i(c,"valuetext",""+e.settings.previewFilter(t)),i(c,"valuemin",e._minValue),i(c,"valuemax",e._maxValue)}return e.extend({init:function(e){var t=this;e.previewFilter||(e.previewFilter=function(e){return Math.round(100*e)/100}),t._super(e),t.classes.add("slider"),"v"==e.orientation&&t.classes.add("vertical"),t._minValue=e.minValue||0,t._maxValue=e.maxValue||100,t._initValue=t.state.get("value")},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
    '},reset:function(){this.value(this._initValue).repaint()},postRender:function(){function e(e,t,n){return(n+e)/(t-e)}function i(e,t,n){return n*(t-e)-e}function o(t,n){function o(o){var a;a=s.value(),a=i(t,n,e(t,n,a)+.05*o),a=r(a,t,n),s.value(a),s.fire("dragstart",{value:a}),s.fire("drag",{value:a}),s.fire("dragend",{value:a})}s.on("keydown",function(e){switch(e.keyCode){case 37:case 38:o(-1);break;case 39:case 40:o(1)}})}function a(e,i,o){var a,l,c,p,m;s._dragHelper=new t(s._id,{handle:s._id+"-handle",start:function(e){a=e[u],l=parseInt(s.getEl("handle").style[d],10),c=(s.layoutRect()[h]||100)-n.getSize(o)[f],s.fire("dragstart",{value:m})},drag:function(t){var n=t[u]-a;p=r(l+n,0,c),o.style[d]=p+"px",m=e+p/c*(i-e),s.value(m),s.tooltip().text(""+s.settings.previewFilter(m)).show().moveRel(o,"bc tc"),s.fire("drag",{value:m})},stop:function(){s.tooltip().hide(),s.fire("dragend",{value:m})}})}var s=this,l,c,u,d,f,h;l=s._minValue,c=s._maxValue,"v"==s.settings.orientation?(u="screenY",d="top",f="height",h="h"):(u="screenX",d="left",f="width",h="w"),s._super(),o(l,c,s.getEl("handle")),a(l,c,s.getEl("handle"))},repaint:function(){this._super(),o(this,this.value())},bindStates:function(){var e=this;return e.state.on("change:value",function(t){o(e,t.value)}),e._super()}})}),r(jt,[De],function(e){return e.extend({renderHtml:function(){var e=this;return e.classes.add("spacer"),e.canFocus=!1,'
    '}})}),r(Yt,[Ot,pe,g],function(e,t,n){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,r=e.getEl(),i=e.layoutRect(),o,a;return e._super(),o=r.firstChild,a=r.lastChild,n(o).css({width:i.w-t.getSize(a).width,height:i.h-2}),n(a).css({height:i.h-2}),e},activeMenu:function(e){var t=this;n(t.getEl().lastChild).toggleClass(t.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r,i=e.state.get("icon"),o=e.state.get("text"),a="";return r=e.settings.image,r?(i="none","string"!=typeof r&&(r=window.getSelection?r[0]:r[1]),r=" style=\"background-image: url('"+r+"')\""):r="",i=e.settings.icon?n+"ico "+n+"i-"+i:"",o&&(e.classes.add("btn-has-text"),a=''+e.encode(o)+""),'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void(t&&t.call(this,e));n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(Xt,[Rt],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}})}),r(Kt,[Ee,g,pe],function(e,t,n){return e.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t(n).removeClass(this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t(n).addClass(this.classPrefix+"active"),this.items()[e].show().fire("showtab"),this.reflow(),this.items().each(function(t,n){e!=n&&t.hide()})},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='"}),'
    '+n+'
    '+t.renderHtml(e)+"
    "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,t,r,i;r=n.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(e){r=Math.max(r,e.layoutRect().minW),i=Math.max(i,e.layoutRect().minH)}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=n.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,t=e._super(),t.deltaH+=o,t.innerH=t.h-t.deltaH,t}})}),r(Gt,[De,m,pe],function(e,t,n){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("textbox"),e.multiline?t.classes.add("multiline"):(t.on("keydown",function(e){var n;13==e.keyCode&&(e.preventDefault(),t.parents().reverse().each(function(e){return e.toJSON?(n=e,!1):void 0}),t.fire("submit",{data:n.toJSON()}))}),t.on("keyup",function(e){t.state.set("value",e.target.value)}))},repaint:function(){var e=this,t,n,r,i,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e.borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,r=e.settings,i,o;return i={id:e._id,hidefocus:"1"},t.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(e){i[e]=r[e]}),e.disabled()&&(i.disabled="disabled"),r.subtype&&(i.type=r.subtype),o=n.create(r.multiline?"textarea":"input",i),o.value=e.state.get("value"),o.className=e.classes,o.outerHTML},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var e=this;e.getEl().value=e.state.get("value"),e._super(),e.$el.on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)})},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl().value!=t.value&&(e.getEl().value=t.value)}),e.state.on("change:disabled",function(t){e.getEl().disabled=t.value}),e._super()},remove:function(){this.$el.off(),this._super()}})}),r(Jt,[],function(){var e=this||window,t=function(){return e.tinymce};return"function"==typeof e.define&&(e.define.amd||e.define("ephox/tinymce",[],t)),{}}),a([l,c,u,d,f,h,m,g,v,y,C,w,N,E,T,A,B,D,L,M,P,H,I,F,j,Y,J,Q,oe,ae,se,le,ue,fe,he,ve,ye,be,Ce,xe,we,Ne,Ee,_e,Se,ke,Te,Re,Ae,Be,De,Le,Me,Pe,Ie,ze,Ze,et,tt,nt,it,ot,at,st,lt,ct,ut,dt,ft,ht,pt,mt,gt,vt,yt,bt,Ct,xt,wt,Nt,Et,_t,St,kt,Tt,Rt,At,Bt,Dt,Lt,Mt,Pt,Ht,Ot,It,Ft,zt,Ut,Wt,Vt,$t,qt,jt,Yt,Xt,Kt,Gt])}(this); \ No newline at end of file diff --git a/program/js/tinymce/roundcube/browser.css b/program/resources/tinymce/browser.css similarity index 100% rename from program/js/tinymce/roundcube/browser.css rename to program/resources/tinymce/browser.css diff --git a/program/js/tinymce/roundcube/content.css b/program/resources/tinymce/content.css similarity index 100% rename from program/js/tinymce/roundcube/content.css rename to program/resources/tinymce/content.css diff --git a/program/js/tinymce/roundcube/video.png b/program/resources/tinymce/video.png similarity index 100% rename from program/js/tinymce/roundcube/video.png rename to program/resources/tinymce/video.png From 062328e42fd888ccd87aa4821f0187290faa0315 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sun, 4 Dec 2016 10:49:09 +0100 Subject: [PATCH 02/48] Describe bin/jsdeps.sh in INSTALL --- INSTALL | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/INSTALL b/INSTALL index a2748448083..358509543b3 100644 --- a/INSTALL +++ b/INSTALL @@ -40,13 +40,16 @@ INSTALLATION ============ 1. Decompress and put this folder somewhere inside your document root -2. Install dependencies using composer: - - get composer from https://getcomposer.org/download/ - - rename the composer.json-dist file into composer.json - - if you want to use LDAP address books, enable the LDAP libraries in your - composer.json file by moving the items from "suggest" to the "require" - section (remove the explanation texts after the version!). - - run `php composer.phar install --no-dev` +2. In case you don't use the so-called "complete" release package, + you have to install PHP and javascript dependencies. + 2.1. Install PHP dependencies using composer: + - get composer from https://getcomposer.org/download/ + - rename the composer.json-dist file into composer.json + - if you want to use LDAP address books, enable the LDAP libraries in your + composer.json file by moving the items from "suggest" to the "require" + section (remove the explanation texts after the version!). + - run `php composer.phar install --no-dev` + 2.2. Install Javascript dependencies by executing `bin/jsdeps.sh` script. 3. Make sure that the following directories (and the files within) are writable by the webserver - /temp From 7cbade1ade1849712fc9f62bc491d324f63d80b1 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sun, 4 Dec 2016 11:49:19 +0100 Subject: [PATCH 03/48] Cleanup tinymce.zip with localizations --- bin/jsdeps.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/jsdeps.sh b/bin/jsdeps.sh index 1736d3bfe29..41417fd668b 100755 --- a/bin/jsdeps.sh +++ b/bin/jsdeps.sh @@ -163,6 +163,8 @@ if [ "$WHAT" = "tinymce" ] || [ "$WHAT" = "" ]; then echo "Installing TinyMCE localization..." $UNZIP -q "$TINYMCE_PATH.zip" -d "$TINYMCE_PATH" + # cleanup + rm -f "$TINYMCE_PATH.zip" echo "Done" fi From 4f5ec65a36a7e360209d886d5c8db01fba19aae5 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 7 Dec 2016 10:39:35 +0100 Subject: [PATCH 04/48] Close SMTP connection ASAP after the message has been sent We should not keep the connection open until the script shuts down. It may take long time e.g. to save the message in IMAP. --- program/lib/Roundcube/rcube.php | 8 +++++++- program/steps/mail/func.inc | 2 +- program/steps/mail/sendmail.inc | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/program/lib/Roundcube/rcube.php b/program/lib/Roundcube/rcube.php index 4ac54072e1e..977f7784a9b 100644 --- a/program/lib/Roundcube/rcube.php +++ b/program/lib/Roundcube/rcube.php @@ -1578,10 +1578,12 @@ public function gen_message_id($sender = null) * @param string $body_file Location of file with saved message body (reference), * used when delay_file_io is enabled * @param array $options SMTP options (e.g. DSN request) + * @param bool $disconnect Close SMTP connection ASAP * * @return boolean Send status. */ - public function deliver_message(&$message, $from, $mailto, &$error, &$body_file = null, $options = null) + public function deliver_message(&$message, $from, $mailto, &$error, + &$body_file = null, $options = null, $disconnect = false) { $plugin = $this->plugins->exec_hook('message_before_send', array( 'message' => $message, @@ -1681,6 +1683,10 @@ public function deliver_message(&$message, $from, $mailto, &$error, &$body_file fclose($msg_body); } + if ($disconnect) { + $this->smtp->disconnect(); + } + $message->headers($headers, true); return $sent; diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 3f9503afa74..19d7e7a8ac8 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -1910,7 +1910,7 @@ function rcmail_send_mdn($message, &$smtp_error) // SMTP options $options = array('mdn_use_from' => (bool) $RCMAIL->config->get('mdn_use_from')); - $sent = $RCMAIL->deliver_message($compose, $identity['email'], $mailto, $smtp_error, $body_file, $options); + $sent = $RCMAIL->deliver_message($compose, $identity['email'], $mailto, $smtp_error, $body_file, $options, true); if ($sent) { $RCMAIL->storage->set_flag($message->uid, 'MDNSENT'); diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index e5e461c080c..afaa7ac842a 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -537,7 +537,7 @@ if (!$savedraft && !$saveonly) { $smtp_opts['dsn'] = $dsn_enabled; $sent = $RCMAIL->deliver_message($MAIL_MIME, $from, $mailto, - $smtp_error, $mailbody_file, $smtp_opts); + $smtp_error, $mailbody_file, $smtp_opts, true); // return to compose page if sending failed if (!$sent) { From adbc9b1889c4067286d3e763b29b51164717416d Mon Sep 17 00:00:00 2001 From: Maikel Date: Thu, 8 Dec 2016 04:18:31 +1100 Subject: [PATCH 05/48] Add cPanel Webmail driver (#5549) This driver does not use an admin account. It uses the user's account to authenticate at the Webmail API. It uses the recommended UAPI and does not rely on third-party classes. --- plugins/password/README | 29 ++++- plugins/password/config.inc.php.dist | 9 ++ plugins/password/drivers/cpanel_webmail.php | 130 ++++++++++++++++++++ 3 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 plugins/password/drivers/cpanel_webmail.php diff --git a/plugins/password/README b/plugins/password/README index c4bb7bea0cb..af1a5a5b22b 100644 --- a/plugins/password/README +++ b/plugins/password/README @@ -28,7 +28,9 @@ 2.3. Poppassd/Courierpassd (poppassd) 2.4. LDAP (ldap) 2.5. DirectAdmin Control Panel (directadmin) - 2.6. cPanel (cpanel) + 2.6. cPanel + 2.6.1. cPanel WHM (cpanel) + 2.6.2. cPanel Webmail (cpanel_webmail) 2.7. XIMSS/Communigate (ximms) 2.8. Virtualmin (virtualmin) 2.9. hMailServer (hmail) @@ -190,8 +192,19 @@ See config.inc.php.dist file for more info. - 2.6. cPanel (cpanel) - -------------------- + 2.6. cPanel + ----------- + + cPanel offers various APIs. The `cpanel` driver is configured with and admin + account. It can change user's passwords without access to the current password. + See the next section. + + The `cpanel_webmail` driver authenticates as the current user and does not need + an admin account. See 2.6.2. + + + 2.6.1. cPanel WHM (cpanel) + -------------------------- Install cPanel XMLAPI Client Class into Roundcube program/lib directory or any other place in PHP include path. You can get the class from @@ -201,6 +214,16 @@ See config.inc.php.dist file for more info. + 2.6.2. cPanel Webmail (cpanel_webmail) + -------------------------------------- + + Specify the host to connect to via 'password_webmail_cpanel_host'. This driver + comes with a minimal UAPI implementation and does not use the external xmlapi + class. + + See config.inc.php.dist file for more info. + + 2.7. XIMSS/Communigate (ximms) ------------------------------ diff --git a/plugins/password/config.inc.php.dist b/plugins/password/config.inc.php.dist index ada893e37a6..d24016d01aa 100644 --- a/plugins/password/config.inc.php.dist +++ b/plugins/password/config.inc.php.dist @@ -353,6 +353,15 @@ $config['password_cpanel_hash'] = ''; $config['password_cpanel_port'] = 2087; +// cPanel Webmail Driver options +// ----------------------------- +// The cPanel Host name +$config['password_cpanel_webmail_host'] = 'host.domain.com'; + +// The cPanel port to use +$config['password_cpanel_webmail_port'] = 2096; + + // XIMSS (Communigate server) Driver options // ----------------------------------------- // Host name of the Communigate server diff --git a/plugins/password/drivers/cpanel_webmail.php b/plugins/password/drivers/cpanel_webmail.php new file mode 100644 index 00000000000..5d630de9a05 --- /dev/null +++ b/plugins/password/drivers/cpanel_webmail.php @@ -0,0 +1,130 @@ + + * + * Copyright (C) 2005-2016, The Roundcube Dev Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + */ + +class rcube_cpanel_webmail_password +{ + public function save($curpas, $newpass) + { + $user = $_SESSION['username']; + $userpwd = "$user:$curpas"; + list($login) = split('@', $user); + $data = array( + 'email' => $login, + 'password' => $newpass + ); + $url = self::url(); + $response = $this->curl_auth_post($userpwd, $url, $data); + return self::decode_response($response); + } + + /** + * Provides the UAPI URL of the Email::passwd_pop function. + * + * @return string HTTPS URL + */ + public static function url() + { + $config = rcmail::get_instance()->config; + $storage_host = $_SESSION['storage_host']; + + $host = $config->get('password_cpanel_webmail_host', $storage_host); + $port = $config->get('password_cpanel_webmail_port', 2096); + + return "https://$host:$port/execute/Email/passwd_pop"; + } + + /** + * Converts a UAPI response to a password driver response. + * + * @param string $response JSON response by the Cpanel UAPI + * @return mixed response code or array + */ + public static function decode_response($response) + { + $result = json_decode($response); + + if ($result['status'] === 1) { + return PASSWORD_SUCCESS; + } + + $errors = $result['errors']; + if (is_array($errors) && count($errors) > 0) { + return array( + 'code' => PASSWORD_ERROR, + 'message' => $errors[0], + ); + } + + return PASSWORD_ERROR; + } + + /** + * Post data to the given URL using basic authentication. + * + * Example: + * + * + * curl_auth_post('john:Secr3t', 'https://example.org', array( + * 'param' => 'value', + * 'param' => 'value' + * )); + * + * + * @param string $userpwd user name and password separated by a colon + * : + * @param string $url the URL to post data to + * @param array $postdata the data to post + * @return string the body of the reply + * @throws Exception + */ + private function curl_auth_post($userpwd, $url, $postdata) + { + $ch = curl_init(); + $postfields = http_build_query($postdata, '', '&'); + + // see http://php.net/manual/en/function.curl-setopt.php + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_BUFFERSIZE, 131072); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); + curl_setopt($ch, CURLOPT_USERPWD, $userpwd); + + $result = curl_exec($ch); + $error = curl_error($ch); + curl_close($ch); + + if ($result === false) { + throw new Exception("curl error: $error"); + } + + return $result; + } +} From f351b487711a128de8c52f837be26cea0e865bfe Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 7 Dec 2016 18:28:32 +0100 Subject: [PATCH 06/48] Update changelog, CS fixes --- CHANGELOG | 1 + plugins/password/README | 2 +- plugins/password/drivers/cpanel_webmail.php | 25 ++++++++++++--------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 6bdb918a570..c79c329454b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -17,6 +17,7 @@ CHANGELOG Roundcube Webmail - Password: Added replacement variables support in password_pop_host (#5539) - Password: Don't store passwords in temp files when using dovecotpw (#5531) - Password: Added LDAP PPolicy driver (#5364) +- Password: Added cpanel_webmail driver (#5549) - Password: Added possibility to nicely redirect from other plugins on password expiration (#5468) - Implement separate action to mark all messages in a folder as \Seen (#5006) - Implement marking as \Seen in all folders or in a folder and its subfolders (#5076) diff --git a/plugins/password/README b/plugins/password/README index af1a5a5b22b..8f3305a03af 100644 --- a/plugins/password/README +++ b/plugins/password/README @@ -219,7 +219,7 @@ Specify the host to connect to via 'password_webmail_cpanel_host'. This driver comes with a minimal UAPI implementation and does not use the external xmlapi - class. + class. It requires php-curl extension. See config.inc.php.dist file for more info. diff --git a/plugins/password/drivers/cpanel_webmail.php b/plugins/password/drivers/cpanel_webmail.php index 5d630de9a05..77fa0409f79 100644 --- a/plugins/password/drivers/cpanel_webmail.php +++ b/plugins/password/drivers/cpanel_webmail.php @@ -30,15 +30,18 @@ class rcube_cpanel_webmail_password { public function save($curpas, $newpass) { - $user = $_SESSION['username']; + $user = $_SESSION['username']; $userpwd = "$user:$curpas"; list($login) = split('@', $user); + $data = array( - 'email' => $login, + 'email' => $login, 'password' => $newpass ); - $url = self::url(); + + $url = self::url(); $response = $this->curl_auth_post($userpwd, $url, $data); + return self::decode_response($response); } @@ -49,7 +52,7 @@ public function save($curpas, $newpass) */ public static function url() { - $config = rcmail::get_instance()->config; + $config = rcmail::get_instance()->config; $storage_host = $_SESSION['storage_host']; $host = $config->get('password_cpanel_webmail_host', $storage_host); @@ -62,6 +65,7 @@ public static function url() * Converts a UAPI response to a password driver response. * * @param string $response JSON response by the Cpanel UAPI + * * @return mixed response code or array */ public static function decode_response($response) @@ -75,7 +79,7 @@ public static function decode_response($response) $errors = $result['errors']; if (is_array($errors) && count($errors) > 0) { return array( - 'code' => PASSWORD_ERROR, + 'code' => PASSWORD_ERROR, 'message' => $errors[0], ); } @@ -95,10 +99,11 @@ public static function decode_response($response) * )); * * - * @param string $userpwd user name and password separated by a colon - * : - * @param string $url the URL to post data to - * @param array $postdata the data to post + * @param string $userpwd user name and password separated by a colon + * : + * @param string $url the URL to post data to + * @param array $postdata the data to post + * * @return string the body of the reply * @throws Exception */ @@ -118,7 +123,7 @@ private function curl_auth_post($userpwd, $url, $postdata) curl_setopt($ch, CURLOPT_USERPWD, $userpwd); $result = curl_exec($ch); - $error = curl_error($ch); + $error = curl_error($ch); curl_close($ch); if ($result === false) { From dd29ca1ee88db7dea246a0da0b93ee86a4301eae Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 8 Dec 2016 23:31:27 +1100 Subject: [PATCH 07/48] Correct decoding of JSON response The old version assumed `json_decode` would return an associative array. While it can do so if an extra option is specified, the default behaviour is to return an object. Therefore, a successful password change resulted in an error while parsing the response. The new code is accessing the response as object instead. The method is now covered by a unit test. --- plugins/password/drivers/cpanel_webmail.php | 8 +++++-- plugins/password/tests/Password.php | 25 ++++++++++++++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/plugins/password/drivers/cpanel_webmail.php b/plugins/password/drivers/cpanel_webmail.php index 77fa0409f79..6671c13ed8c 100644 --- a/plugins/password/drivers/cpanel_webmail.php +++ b/plugins/password/drivers/cpanel_webmail.php @@ -70,13 +70,17 @@ public static function url() */ public static function decode_response($response) { + if (!$response) { + return PASSWORD_CONNECT_ERROR; + } + $result = json_decode($response); - if ($result['status'] === 1) { + if ($result->status === 1) { return PASSWORD_SUCCESS; } - $errors = $result['errors']; + $errors = $result->errors; if (is_array($errors) && count($errors) > 0) { return array( 'code' => PASSWORD_ERROR, diff --git a/plugins/password/tests/Password.php b/plugins/password/tests/Password.php index b64c6b889f2..690213d89cf 100644 --- a/plugins/password/tests/Password.php +++ b/plugins/password/tests/Password.php @@ -19,5 +19,28 @@ function test_constructor() $this->assertInstanceOf('password', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin); } -} + function test_driver_cpanel_webmail() + { + $driver = 'cpanel_webmail'; + include_once __DIR__ . "/../drivers/$driver.php"; + $driver_class = "rcube_${driver}_password"; + $this->assertTrue(class_exists($driver_class)); + + $json_response_fail = '{"data":null,"errors":' + . '["Execution of Email::passwdpop (api version:3) is not ' + . 'permitted inside of webmail"],"status":0,"metadata":{},' + . '"messages":null}'; + $result = $driver_class::decode_response($json_response_fail); + $this->assertTrue(is_array($result)); + $this->assertEquals($result['code'], PASSWORD_ERROR); + $expected_message = 'Execution of Email::passwdpop (api version:3) is' + . ' not permitted inside of webmail'; + $this->assertEquals($result['message'], $expected_message); + + $json_response_success = '{"metadata":{},"data":null,"messages":null,' + . '"errors":null,"status":1}'; + $result = $driver_class::decode_response($json_response_success); + $this->assertEquals($result, PASSWORD_SUCCESS); + } +} From 12a49437d2973df05e845c072c8d52972bdb1545 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 8 Dec 2016 16:23:56 +0100 Subject: [PATCH 08/48] Upgrade to TinyMCE 4.5.1 --- bin/jsdeps.sh | 4 ++-- program/js/editor.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/jsdeps.sh b/bin/jsdeps.sh index 41417fd668b..af1e9c81339 100755 --- a/bin/jsdeps.sh +++ b/bin/jsdeps.sh @@ -27,9 +27,9 @@ PKEY_URL="https://raw.githubusercontent.com/diafygi/publickeyjs/$PKEY_VERSION/pu PKEY_SHA="d0920e190754e024c4be76ad5bbc7e76b2e37a4d" PKEY_PATH="$PWD/../program/js/publickey.js" -TINYMCE_VERSION="4.3.13" +TINYMCE_VERSION="4.5.1" TINYMCE_URL="http://download.ephox.com/tinymce/community/tinymce_$TINYMCE_VERSION.zip" -TINYMCE_SHA="28631746784453daf8baa10f2c8982aac5e32aa7" +TINYMCE_SHA="e358301ac9fefafcd0ee21643c6aaed2c8b83470" TINYMCE_PATH="$PWD/../program/js/tinymce" TINYMCE_LANGS="https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy" diff --git a/program/js/editor.js b/program/js/editor.js index 98c6ebef49b..36b54afb2bf 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -39,7 +39,7 @@ function rcube_text_editor(config, id) abs_url = location.href.replace(/[?#].*$/, '').replace(/\/$/, ''), conf = { selector: '#' + ($('#' + id).is('.mce_editor') ? id : 'fake-editor-id'), - cache_suffix: 's=4031301', + cache_suffix: 's=4050100', theme: 'modern', language: config.lang, content_css: rcmail.assets_path('program/resources/tinymce/content.css'), From 5bae3ca6f54cd9c12ed235cdf3e4e0e41eba1b80 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 8 Dec 2016 16:30:39 +0100 Subject: [PATCH 09/48] jsdeps.sh: Add 'cleanup' argument --- bin/jsdeps.sh | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/bin/jsdeps.sh b/bin/jsdeps.sh index af1e9c81339..1917553ebcb 100755 --- a/bin/jsdeps.sh +++ b/bin/jsdeps.sh @@ -41,7 +41,7 @@ OPENPGP_PATH="$PWD/../plugins/enigma/openpgp.min.js" CM_VERSION="5.21.0" CM_URL="http://codemirror.net/codemirror-$CM_VERSION.zip" CM_SHA="3b767c2e3acd6796e54ed19ed2ac0755fcf87984" -CM_PATH="$PWD/../plugins/managesieve/codemirror.zip" +CM_PATH="$PWD/../plugins/managesieve/codemirror" ################################################################################ @@ -66,6 +66,17 @@ else exit 1 fi +if [ "$WHAT" = "cleanup" ]; then + set -x + rm -rf $JQUERY_PATH + rm -rf $JSTZ_PATH + rm -rf $PKEY_PATH + rm -rf $TINYMCE_PATH + rm -rf $OPENPGP_PATH + rm -rf $CM_PATH + exit +fi + if [ "$WHAT" = "jquery" ] || [ "$WHAT" = "" ]; then echo "Downloading jQuery..." @@ -196,15 +207,15 @@ fi if [ "$WHAT" = "codemirror" ] || [ "$WHAT" = "" ]; then echo "Downloading CodeMirror..." - $GET $CM_URL $OPT "$CM_PATH" - if [ ! -f "$CM_PATH" ]; then + $GET $CM_URL $OPT "$CM_PATH.zip" + if [ ! -f "$CM_PATH.zip" ]; then echo "ERROR: Failed to get $CM_URL" exit 1 fi - SUM=`$SHASUM "$CM_PATH" | cut -d " " -f 1` + SUM=`$SHASUM "$CM_PATH.zip" | cut -d " " -f 1` if [ "$SUM" != "$CM_SHA" ]; then - echo "ERROR: Incorrect SHA of $CM_PATH. Expected: $CM_SHA, got: $SUM" + echo "ERROR: Incorrect SHA of $CM_PATH.zip. Expected: $CM_SHA, got: $SUM" exit 1 fi @@ -218,13 +229,13 @@ if [ "$WHAT" = "codemirror" ] || [ "$WHAT" = "" ]; then $UNZIP -q "$CM_PATH" -d "$DIR" "codemirror-$CM_VERSION/addon/selection/active-line.js" $UNZIP -q "$CM_PATH" -d "$DIR" "codemirror-$CM_VERSION/mode/sieve/sieve.js" - if [ -d "$DIR/codemirror" ]; then - rm -drf "$DIR/codemirror" + if [ -d "$CM_PATH" ]; then + rm -drf "$CM_PATH" fi - mv -f "$DIR/codemirror-$CM_VERSION" "$DIR/codemirror" + mv -f "$DIR/codemirror-$CM_VERSION" "$CM_PATH" #cleanup - rm -f "$CM_PATH" + rm -f "$CM_PATH.zip" echo "Done" fi From 29d0b804495f7a4b388bf18e9f40162932fb8c10 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 9 Dec 2016 10:43:31 +0100 Subject: [PATCH 10/48] Enigma: Fix PHP fatal error when decrypting a message with invalid signature (#5555) --- CHANGELOG | 1 + plugins/enigma/lib/enigma_driver_gnupg.php | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index c79c329454b..7938f56bad1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -74,6 +74,7 @@ CHANGELOG Roundcube Webmail - Fix redundant keep-alive/refresh after session error on compose page (#5500) - Managesieve: Fix handling of scripts with nested rules (#5540) - Fix variable substitution in ldap host for some use-cases, e.g. new_user_identity (#5544) +- Enigma: Fix PHP fatal error when decrypting a message with invalid signature (#5555) RELEASE 1.2.3 ------------- diff --git a/plugins/enigma/lib/enigma_driver_gnupg.php b/plugins/enigma/lib/enigma_driver_gnupg.php index ffb3cac3ca7..8632fd43a3f 100644 --- a/plugins/enigma/lib/enigma_driver_gnupg.php +++ b/plugins/enigma/lib/enigma_driver_gnupg.php @@ -437,17 +437,20 @@ protected function get_error_from_exception($e) */ protected function parse_signature($sig) { - $user = $sig->getUserId(); - $data = new enigma_signature(); + $data->id = $sig->getId(); $data->valid = $sig->isValid(); $data->fingerprint = $sig->getKeyFingerprint(); $data->created = $sig->getCreationDate(); $data->expires = $sig->getExpirationDate(); - $data->name = $user->getName(); - $data->comment = $user->getComment(); - $data->email = $user->getEmail(); + + // In case of ERRSIG user may not be set + if ($user = $sig->getUserId()) { + $data->name = $user->getName(); + $data->comment = $user->getComment(); + $data->email = $user->getEmail(); + } return $data; } From bd5eaf98aaa48fa34c58890338305e1b3fe9d65f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Sat, 10 Dec 2016 08:45:08 +1100 Subject: [PATCH 11/48] Handle null or non-JSON result of cPanel UAPI More unit testing. More documentation. --- plugins/password/drivers/cpanel_webmail.php | 17 +++++- plugins/password/tests/Password.php | 65 +++++++++++++++------ 2 files changed, 62 insertions(+), 20 deletions(-) diff --git a/plugins/password/drivers/cpanel_webmail.php b/plugins/password/drivers/cpanel_webmail.php index 6671c13ed8c..674ac870a5c 100644 --- a/plugins/password/drivers/cpanel_webmail.php +++ b/plugins/password/drivers/cpanel_webmail.php @@ -28,6 +28,15 @@ class rcube_cpanel_webmail_password { + /** + * Changes the user's password. It is called by password.php. + * See "Driver API" README and password.php for the interface details. + * + * @param string $curpas current (old) password + * @param string $newpass new requested password + * @return mixed int code or assoc array with 'code' and 'message', see + * "Driver API" README and password.php + */ public function save($curpas, $newpass) { $user = $_SESSION['username']; @@ -66,7 +75,7 @@ public static function url() * * @param string $response JSON response by the Cpanel UAPI * - * @return mixed response code or array + * @return mixed response code or array, see save */ public static function decode_response($response) { @@ -74,9 +83,11 @@ public static function decode_response($response) return PASSWORD_CONNECT_ERROR; } - $result = json_decode($response); + // $result should be `null` or `stdClass` object + $result = json_decode($response, !JSON_OBJECT_AS_ARRAY); - if ($result->status === 1) { + // The UAPI may return HTML instead of JSON on missing authentication + if (is_object($result) && $result->status === 1) { return PASSWORD_SUCCESS; } diff --git a/plugins/password/tests/Password.php b/plugins/password/tests/Password.php index 690213d89cf..d59049feef9 100644 --- a/plugins/password/tests/Password.php +++ b/plugins/password/tests/Password.php @@ -20,27 +20,58 @@ function test_constructor() $this->assertInstanceOf('rcube_plugin', $plugin); } + /** + * cpanel_webmail driver test + */ function test_driver_cpanel_webmail() { - $driver = 'cpanel_webmail'; + $driver_class = $this->load_driver('cpanel_webmail'); + + $error_result = $driver_class::decode_response(false); + $this->assertEquals($error_result, PASSWORD_CONNECT_ERROR); + + $bad_result = $driver_class::decode_response(null); + $this->assertEquals($bad_result, PASSWORD_CONNECT_ERROR); + + $null_result = $driver_class::decode_response('null'); + $this->assertEquals($null_result, PASSWORD_ERROR); + + $malformed_result = $driver_class::decode_response('random {string]!'); + $this->assertEquals($malformed_result, PASSWORD_ERROR); + + $other_result = $driver_class::decode_response('{"a":"b"}'); + $this->assertEquals($other_result, PASSWORD_ERROR); + + $fail_response = '{"data":null,"errors":["Execution of Email::passwdp' + . 'op (api version:3) is not permitted inside of webmail"],"sta' + . 'tus":0,"metadata":{},"messages":null}'; + $error_message = 'Execution of Email::passwdpop (api version:3) is no' + . 't permitted inside of webmail'; + $expected_result = array( + 'code' => PASSWORD_ERROR, + 'message' => $error_message + ); + $fail_result = $driver_class::decode_response($fail_response); + $this->assertEquals($expected_result, $fail_result); + + $success_response = '{"metadata":{},"data":null,"messages":null,"errors' + . '":null,"status":1}'; + $good_result = $driver_class::decode_response($success_response); + $this->assertEquals($good_result, PASSWORD_SUCCESS); + } + + /** + * Loads a driver's source file, checks that its class exist and returns the + * driver's class name. + * + * @param string $driver driver name, example: "chpasswd" + * @return string driver's class name, example: "rcube_chpasswd_password" + */ + function load_driver($driver) + { include_once __DIR__ . "/../drivers/$driver.php"; $driver_class = "rcube_${driver}_password"; $this->assertTrue(class_exists($driver_class)); - - $json_response_fail = '{"data":null,"errors":' - . '["Execution of Email::passwdpop (api version:3) is not ' - . 'permitted inside of webmail"],"status":0,"metadata":{},' - . '"messages":null}'; - $result = $driver_class::decode_response($json_response_fail); - $this->assertTrue(is_array($result)); - $this->assertEquals($result['code'], PASSWORD_ERROR); - $expected_message = 'Execution of Email::passwdpop (api version:3) is' - . ' not permitted inside of webmail'; - $this->assertEquals($result['message'], $expected_message); - - $json_response_success = '{"metadata":{},"data":null,"messages":null,' - . '"errors":null,"status":1}'; - $result = $driver_class::decode_response($json_response_success); - $this->assertEquals($result, PASSWORD_SUCCESS); + return $driver_class; } } From 279e11a45d356d5a11336546b710aa81a566bc89 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sun, 11 Dec 2016 12:59:39 +0100 Subject: [PATCH 12/48] jsdeps.sh: Store downloaded files in cache folder, add option to install deps from it When in git-master you install deps and then want to switch to an older branch you'll get a conflict. In such a case you can just call `jsdeps.sh cleanup` and when you're back in master `jsdeps.sh from-cache` which will be much faster and do not require re-downloading everything. --- bin/jsdeps.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/bin/jsdeps.sh b/bin/jsdeps.sh index 1917553ebcb..4d96fa3663d 100755 --- a/bin/jsdeps.sh +++ b/bin/jsdeps.sh @@ -8,6 +8,7 @@ SHASUM=`which sha1sum` UNZIP=`which unzip` PWD=`dirname "$0"` +CACHE="$PWD/js_cache" WHAT="$1" # Downloads definition @@ -16,32 +17,38 @@ JQUERY_VERSION="3.1.1" JQUERY_URL="https://code.jquery.com/jquery-$JQUERY_VERSION.min.js" JQUERY_SHA="f647a6d37dc4ca055ced3cf64bbc1f490070acba" JQUERY_PATH="$PWD/../program/js/jquery.min.js" +JQUERY_CACHE="$CACHE/jquery.min.js" JSTZ_VERSION="6c427658686c664da52c6a87cd62ec910baab276" #1.0.6 JSTZ_URL="https://bitbucket.org/pellepim/jstimezonedetect/raw/$JSTZ_VERSION/dist/jstz.min.js" JSTZ_SHA="4291cd3b259d2060460c2a6ab99f428d3c0c9537" JSTZ_PATH="$PWD/../program/js/jstz.min.js" +JSTZ_CACHE="$CACHE/jstz.min.js" PKEY_VERSION="0e011cb18907a1adc0313aa92e69cd8858e1ef66" PKEY_URL="https://raw.githubusercontent.com/diafygi/publickeyjs/$PKEY_VERSION/publickey.js" PKEY_SHA="d0920e190754e024c4be76ad5bbc7e76b2e37a4d" PKEY_PATH="$PWD/../program/js/publickey.js" +PKEY_CACHE="$CACHE/publickey.js" TINYMCE_VERSION="4.5.1" TINYMCE_URL="http://download.ephox.com/tinymce/community/tinymce_$TINYMCE_VERSION.zip" TINYMCE_SHA="e358301ac9fefafcd0ee21643c6aaed2c8b83470" TINYMCE_PATH="$PWD/../program/js/tinymce" +TINYMCE_CACHE="$CACHE/tinymce" TINYMCE_LANGS="https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy" OPENPGP_VERSION="1.6.2" OPENPGP_URL="https://github.com/openpgpjs/openpgpjs/archive/v$OPENPGP_VERSION.zip" OPENPGP_SHA="70662ccd317a3e5221132778ec7bdf46342ab3fb" OPENPGP_PATH="$PWD/../plugins/enigma/openpgp.min.js" +OPENPGP_CACHE="$CACHE/openpgp.min.js" CM_VERSION="5.21.0" CM_URL="http://codemirror.net/codemirror-$CM_VERSION.zip" CM_SHA="3b767c2e3acd6796e54ed19ed2ac0755fcf87984" CM_PATH="$PWD/../plugins/managesieve/codemirror" +CM_CACHE="$CACHE/codemirror" ################################################################################ @@ -66,7 +73,7 @@ else exit 1 fi -if [ "$WHAT" = "cleanup" ]; then +cleanup() { set -x rm -rf $JQUERY_PATH rm -rf $JSTZ_PATH @@ -74,9 +81,40 @@ if [ "$WHAT" = "cleanup" ]; then rm -rf $TINYMCE_PATH rm -rf $OPENPGP_PATH rm -rf $CM_PATH +} + +from_cache() { + set -x + cp -rf $JQUERY_CACHE $JQUERY_PATH + cp -rf $JSTZ_CACHE $JSTZ_PATH + cp -rf $PKEY_CACHE $PKEY_PATH + cp -rf $OPENPGP_CACHE $OPENPGP_PATH + cp -rf $TINYMCE_CACHE $TINYMCE_PATH + cp -rf $CM_CACHE $CM_PATH +} + +# Install deps from the cache directory +if [ "$WHAT" = "from-cache" ]; then + if [ ! -d $CACHE ]; then + echo "Cache directory ($CACHE) not found." + exit 1 + fi + + cleanup + from_cache + exit +fi + +# remove all javascript files from defined locations +if [ "$WHAT" = "cleanup" ]; then + cleanup exit fi +if [ ! -d $CACHE ]; then + mkdir $CACHE +fi + if [ "$WHAT" = "jquery" ] || [ "$WHAT" = "" ]; then echo "Downloading jQuery..." @@ -94,6 +132,9 @@ if [ "$WHAT" = "jquery" ] || [ "$WHAT" = "" ]; then echo "Installing jQuery..." echo "Done" + + rm -f $JQUERY_CACHE + cp -f $JQUERY_PATH $JQUERY_CACHE fi if [ "$WHAT" = "jstz" ] || [ "$WHAT" = "" ]; then @@ -113,6 +154,9 @@ if [ "$WHAT" = "jstz" ] || [ "$WHAT" = "" ]; then echo "Installing jsTimezoneDetect..." echo "Done" + + rm -f $JSTZ_CACHE + cp -f $JSTZ_PATH $JSTZ_CACHE fi if [ "$WHAT" = "publickey" ] || [ "$WHAT" = "" ]; then @@ -132,6 +176,9 @@ if [ "$WHAT" = "publickey" ] || [ "$WHAT" = "" ]; then echo "Installing publickey.js..." echo "Done" + + rm -f $PKEY_CACHE + cp -f $PKEY_PATH $PKEY_CACHE fi if [ "$WHAT" = "tinymce" ] || [ "$WHAT" = "" ]; then @@ -178,6 +225,9 @@ if [ "$WHAT" = "tinymce" ] || [ "$WHAT" = "" ]; then rm -f "$TINYMCE_PATH.zip" echo "Done" + + rm -rf $TINYMCE_CACHE + cp -rf $TINYMCE_PATH $TINYMCE_CACHE fi if [ "$WHAT" = "openpgp" ] || [ "$WHAT" = "" ]; then @@ -202,6 +252,9 @@ if [ "$WHAT" = "openpgp" ] || [ "$WHAT" = "" ]; then rm -f "$OPENPGP_PATH.zip" echo "Done" + + rm -f $OPENPGP_CACHE + cp -f $OPENPGP_PATH $OPENPGP_CACHE fi if [ "$WHAT" = "codemirror" ] || [ "$WHAT" = "" ]; then @@ -238,4 +291,7 @@ if [ "$WHAT" = "codemirror" ] || [ "$WHAT" = "" ]; then rm -f "$CM_PATH.zip" echo "Done" + + rm -rf $CM_CACHE + cp -rf $CM_PATH $CM_CACHE fi From 2482088a7632a0779b1503af05689cb570256bcc Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sun, 11 Dec 2016 15:47:14 +0100 Subject: [PATCH 13/48] Possibility to display QR code for contacts data (#5030) --- CHANGELOG | 1 + INSTALL | 1 + composer.json-dist | 3 +- program/js/app.js | 20 ++++++- program/localization/en_US/labels.inc | 1 + program/steps/addressbook/qrcode.inc | 75 +++++++++++++++++++++++++++ program/steps/addressbook/show.inc | 1 + skins/classic/templates/contact.html | 1 + skins/larry/templates/contact.html | 1 + 9 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 program/steps/addressbook/qrcode.inc diff --git a/CHANGELOG b/CHANGELOG index 7938f56bad1..44b7be708b4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Possibility to display QR code for contacts data (#5030) - Added identicon plugin - Widescreen layout aka three column view (#5093) - Unify automatic marking as \Seen in preview pane, full-page and extwin views (#5071) diff --git a/INSTALL b/INSTALL index a2748448083..043398e6b91 100644 --- a/INSTALL +++ b/INSTALL @@ -24,6 +24,7 @@ REQUIREMENTS - Auth_SASL 1.0.6 or newer - Net_Sieve 1.3.2 or newer (for managesieve plugin) - Crypt_GPG 1.6.0 or newer (for enigma plugin) + - Endroid/QrCode 1.6.0 or newer (https://github.com/endroid/QrCode) * php.ini options (see .htaccess file): - error_reporting E_ALL & ~E_NOTICE & ~E_STRICT - memory_limit > 16MB (increase as suitable to support large attachments) diff --git a/composer.json-dist b/composer.json-dist index 07cec526d87..43bd20c9aa4 100644 --- a/composer.json-dist +++ b/composer.json-dist @@ -30,7 +30,8 @@ "pear-pear.php.net/mail_mime": "~1.10.0", "pear-pear.php.net/net_smtp": "~1.7.1", "pear-pear.php.net/crypt_gpg": "~1.6.0@beta", - "roundcube/net_sieve": "~1.5.0" + "roundcube/net_sieve": "~1.5.0", + "endroid/qrcode": "~1.6.5" }, "require-dev": { "phpunit/phpunit": "*" diff --git a/program/js/app.js b/program/js/app.js index f193496e691..892ee6a6346 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -474,7 +474,7 @@ function rcube_webmail() this.set_page_buttons(); if (this.env.cid) { - this.enable_command('show', 'edit', true); + this.enable_command('show', 'edit', 'qrcode', true); // register handlers for group assignment via checkboxes if (this.gui_objects.editform) { $('input.groupmember').change(function() { @@ -6632,6 +6632,24 @@ function rcube_webmail() this.http_request('search', {_sid: id}, lock); }; + // display a dialog with QR code image + this.qrcode = function() + { + var title = this.get_label('qrcode'), + buttons = [{ + text: this.get_label('close'), + 'class': 'mainaction', + click: function() { + (ref.is_framed() ? parent.$ : $)(this).dialog('destroy'); + } + }], + img = new Image(300, 300); + + img.src = this.url('addressbook/qrcode', {_source: this.env.source, _cid: this.env.cid}); + + return this.show_popup_dialog(img, title, buttons, {width: 310, height: 410}); + }; + /*********************************************************/ /********* user settings methods *********/ diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index 043ea2ff21f..acfe45b9281 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -369,6 +369,7 @@ $labels['advsearch'] = 'Advanced Search'; $labels['advanced'] = 'Advanced'; $labels['other'] = 'Other'; $labels['printcontact'] = 'Print contact'; +$labels['qrcode'] = 'QR Code'; $labels['typehome'] = 'Home'; $labels['typework'] = 'Work'; diff --git a/program/steps/addressbook/qrcode.inc b/program/steps/addressbook/qrcode.inc new file mode 100644 index 00000000000..73f098956b3 --- /dev/null +++ b/program/steps/addressbook/qrcode.inc @@ -0,0 +1,75 @@ + | + +-----------------------------------------------------------------------+ +*/ + +// Get contact ID and source ID from request +$cids = rcmail_get_cids(); +$source = key($cids); +$cid = $cids ? array_shift($cids[$source]) : null; + +// read contact record +$abook = rcmail_contact_source($source, true); +$contact = $abook->get_record($cid, true); + +// generate QR code image +if ($data = rcmail_contact_qrcode($contact)) { + header('Content-Type: image/png'); + header('Content-Length: ' . strlen($data)); + echo $data; +} +else { + header('HTTP/1.0 404 Contact not found'); +} + +exit; + + +function rcmail_contact_qrcode($contact) +{ + $vcard = new rcube_vcard(); + + // QR code input is limited, use only common fields + $fields = array('firstname', 'surname', 'middlename', 'nickname', 'organization', + 'prefix', 'suffix', 'phone', 'email', 'jobtitle'); + + foreach ($contact as $field => $value) { + list($field, $section) = explode(':', $field, 2); + if (in_array($field, $fields)) { + foreach ((array) $value as $v) { + $vcard->set($field, $v, $section); + } + } + } + + $data = $vcard->export(); + + $qrCode = new Endroid\QrCode\QrCode(); + $qrCode + ->setText($data) + ->setSize(300) + ->setPadding(0) + ->setErrorCorrection('high') + // ->setLabel('Scan the code') + // ->setLabelFontSize(16) + ->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0)) + ->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0)); + + return $qrCode->get('png'); +} diff --git a/program/steps/addressbook/show.inc b/program/steps/addressbook/show.inc index f8755c48acf..da8f5bf90c1 100644 --- a/program/steps/addressbook/show.inc +++ b/program/steps/addressbook/show.inc @@ -42,6 +42,7 @@ if ($cid && ($record = ($CONTACT_RECORD ?: $CONTACTS->get_record($cid, true)))) // get address book name (for display) rcmail_set_sourcename($CONTACTS); +$OUTPUT->add_label('qrcode'); $OUTPUT->add_handlers(array( 'contacthead' => 'rcmail_contact_head', 'contactdetails' => 'rcmail_contact_details', diff --git a/skins/classic/templates/contact.html b/skins/classic/templates/contact.html index 8be112b490b..2022a2ce04b 100644 --- a/skins/classic/templates/contact.html +++ b/skins/classic/templates/contact.html @@ -21,6 +21,7 @@

    +

    diff --git a/skins/larry/templates/contact.html b/skins/larry/templates/contact.html index 59fe6f79fdc..de42e1a9de4 100644 --- a/skins/larry/templates/contact.html +++ b/skins/larry/templates/contact.html @@ -25,6 +25,7 @@

    +
    From 2733258d2b549557c8c8f1a731b80d4ca88bd01b Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sun, 11 Dec 2016 16:23:31 +0100 Subject: [PATCH 14/48] Load 'close' label for dialogs by default --- program/include/rcmail.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/program/include/rcmail.php b/program/include/rcmail.php index 0a3051f69a1..3c171b69220 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -455,7 +455,7 @@ public function load_gui($framed = false) // add some basic labels to client $this->output->add_label('loading', 'servererror', 'connerror', 'requesttimedout', - 'refreshing', 'windowopenerror', 'uploadingmany'); + 'refreshing', 'windowopenerror', 'uploadingmany', 'close'); return $this->output; } From d45692131be5471ee20eb99444930378c5a39ca3 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 13 Dec 2016 08:28:07 +0100 Subject: [PATCH 15/48] Zipdownload: Fix date format in mbox "From line" --- plugins/zipdownload/composer.json | 2 +- plugins/zipdownload/zipdownload.php | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/plugins/zipdownload/composer.json b/plugins/zipdownload/composer.json index 2d772e52f17..3d86619a51f 100644 --- a/plugins/zipdownload/composer.json +++ b/plugins/zipdownload/composer.json @@ -3,7 +3,7 @@ "type": "roundcube-plugin", "description": "Adds an option to download all attachments to a message in one zip file, when a message has multiple attachments. Also allows the download of a selection of messages in one zip file. Supports mbox and maildir format.", "license": "GPLv3+", - "version": "3.1", + "version": "3.2", "authors": [ { "name": "Thomas Bruederli", diff --git a/plugins/zipdownload/zipdownload.php b/plugins/zipdownload/zipdownload.php index 8f7139db141..aa154b81a07 100644 --- a/plugins/zipdownload/zipdownload.php +++ b/plugins/zipdownload/zipdownload.php @@ -4,10 +4,10 @@ * ZipDownload * * Plugin to allow the download of all message attachments in one zip file - * and downloading of many messages in one go. + * and also download of many messages in one go. * - * @version 3.1 * @requires php_zip extension (including ZipArchive class) + * * @author Philip Weir * @author Thomas Bruderli * @author Aleksander Machniak @@ -15,8 +15,12 @@ class zipdownload extends rcube_plugin { public $task = 'mail'; + private $charset = 'ASCII'; + // RFC4155: mbox date format + const MBOX_DATE_FORMAT = 'D M d H:i:s Y'; + /** * Plugin initialization */ @@ -225,17 +229,22 @@ private function _download_messages($messageset) $headers = $imap->get_message_headers($uid); if ($mode == 'mbox') { + // Sender address $from = rcube_mime::decode_address_list($headers->from, null, true, $headers->charset, true); $from = array_shift($from); + $from = preg_replace('/\s/', '-', $from); + + // Received (internal) date + $date = rcube_utils::anytodatetime($headers->internaldate); + if ($date) { + $date->setTimezone(new DateTimeZone('UTC')); + $date = $date->format(self::MBOX_DATE_FORMAT); + } - // Mbox format header - // @FIXME: \r\n or \n - // @FIXME: date format + // Mbox format header (RFC4155) $header = sprintf("From %s %s\r\n", - // replace spaces with hyphens - $from ? preg_replace('/\s/', '-', $from) : 'MAILER-DAEMON', - // internaldate - $headers->internaldate + $from ?: 'MAILER-DAEMON', + $date ?: '' ); fwrite($tmpfp, $header); From 8d1e0eb574a0ed99d276735b7e083b954de0612c Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 13 Dec 2016 08:30:16 +0100 Subject: [PATCH 16/48] Preserve message internal/received date on import in mbox format (#5559) --- program/steps/mail/import.inc | 66 +++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 14 deletions(-) diff --git a/program/steps/mail/import.inc b/program/steps/mail/import.inc index 9c4eb83a5af..e9c507474b2 100644 --- a/program/steps/mail/import.inc +++ b/program/steps/mail/import.inc @@ -25,6 +25,7 @@ $OUTPUT->reset(); if (is_array($_FILES['_file'])) { $imported = 0; + $folder = $RCMAIL->storage->get_folder(); foreach ((array)$_FILES['_file']['tmp_name'] as $i => $filepath) { // Process uploaded file if there is no error @@ -59,20 +60,16 @@ if (is_array($_FILES['_file'])) { $message = $lastline = ''; fseek($fp, 0); + while (($line = fgets($fp)) !== false) { // importing mbox file, split by From - lines if ($lastline === '' && strncmp($line, 'From ', 5) === 0 && strlen($line) > 5) { if (!empty($message)) { - // unquote ">From " lines in message body - $message = preg_replace('/\n>([>]*)From /', "\n\\1From ", $message); - if ($RCMAIL->storage->save_message(null, rtrim($message))) { - $imported++; - } - else { - rcube::raise_error("Failed to import message to " . $RCMAIL->storage->get_folder(), false, true); - } - $message = ''; + $imported += (int) rcmail_save_message($folder, $message); } + + $message = $line; + $lastline = ''; continue; } @@ -80,8 +77,8 @@ if (is_array($_FILES['_file'])) { $lastline = rtrim($line); } - if (!empty($message) && $RCMAIL->storage->save_message(null, rtrim($message))) { - $imported++; + if (!empty($message)) { + $imported += (int) rcmail_save_message($folder, $message); } // remove temp files extracted from zip @@ -90,15 +87,16 @@ if (is_array($_FILES['_file'])) { } } } - - if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) { + else if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) { $size = $RCMAIL->show_bytes(rcube_utils::max_upload_size()); $msg = $RCMAIL->gettext(array('name' => 'filesizeerror', 'vars' => array('size' => $size))); + + $OUTPUT->command('display_message', $msg, 'error'); } else if ($err) { $OUTPUT->show_message('fileuploaderror', 'error'); } - } // end foreach + } if ($imported) { $OUTPUT->show_message($RCMAIL->gettext(array('name' => 'importmessagesuccess', 'nr' => $imported, 'vars' => array('nr' => $imported))), 'confirmation'); @@ -157,3 +155,43 @@ function rcmail_zip_extract($path) return $files; } + +function rcmail_save_message($folder, &$message) +{ + if (strncmp($message, 'From ', 5) === 0) { + // Extract the mbox from_line + $pos = strpos($message, "\n"); + $from = substr($message, 0, $pos); + $message = substr($message, $pos + 1); + + // Read the received date, support only known date formats + + // RFC4155: "Sat Jan 3 01:05:34 1996" + $mboxdate_rx = '/^([a-z]{3} [a-z]{3} [0-9 ][0-9] [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4})/i'; + // Roundcube/Zipdownload: "12-Dec-2016 10:56:33 +0100" + $imapdate_rx = '/^([0-9]{1,2}-[a-z]{3}-[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9+-]{5})/i'; + + if (($pos = strpos($from, ' ', 6)) && ($dt_str = substr($from, $pos + 1)) + && (preg_match($mboxdate_rx, $dt_str, $m) || preg_match($imapdate_rx, $dt_str, $m)) + ) { + try { + $date = new DateTime($m[0], new DateTimeZone('UTC')); + } + catch (Exception $e) { + // ignore + } + } + } + + // unquote ">From " lines in message body + $message = preg_replace('/\n>([>]*)From /', "\n\\1From ", $message); + $message = rtrim($message); + $rcmail = rcmail::get_instance(); + + if ($rcmail->storage->save_message($folder, $message, '', false, array(), $date)) { + return true; + } + + rcube::raise_error("Failed to import message to $folder", true, false); + return false; +} From 945a22572d5248dd03dae2cfe145251c26cebfe4 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 13 Dec 2016 08:30:29 +0100 Subject: [PATCH 17/48] Update changelog --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 44b7be708b4..59b915f7082 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ CHANGELOG Roundcube Webmail =========================== +- Preserve message internal/received date on import in mbox format (#5559) +- Zipdownload: Fix date format in mbox "From line" - Possibility to display QR code for contacts data (#5030) - Added identicon plugin - Widescreen layout aka three column view (#5093) From de8257613418206ac7024628b12a98d454f94eff Mon Sep 17 00:00:00 2001 From: Jens Carl Date: Mon, 12 Dec 2016 23:32:13 -0800 Subject: [PATCH 18/48] Add mime type detection under FreeBSD and Apache 2.4 (#5560) --- program/lib/Roundcube/rcube_mime.php | 1 + 1 file changed, 1 insertion(+) diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php index c951e5c14cc..f860e5482e1 100644 --- a/program/lib/Roundcube/rcube_mime.php +++ b/program/lib/Roundcube/rcube_mime.php @@ -779,6 +779,7 @@ public static function get_mime_extensions($mimetype = null) $file_paths[] = '/etc/nginx/mime.types'; $file_paths[] = '/usr/local/etc/httpd/conf/mime.types'; $file_paths[] = '/usr/local/etc/apache/conf/mime.types'; + $file_paths[] = '/usr/local/etc/apache24/mime.types'; } foreach ($file_paths as $fp) { From be49c2e1cd6195700db213207e85d4f07a9b3ae5 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 13 Dec 2016 08:42:30 +0100 Subject: [PATCH 19/48] Code improvements, replace exception thrown with rcube::raise_error() --- plugins/password/drivers/cpanel_webmail.php | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/plugins/password/drivers/cpanel_webmail.php b/plugins/password/drivers/cpanel_webmail.php index 674ac870a5c..a34b6a1f877 100644 --- a/plugins/password/drivers/cpanel_webmail.php +++ b/plugins/password/drivers/cpanel_webmail.php @@ -7,7 +7,6 @@ * * This driver has been tested successfully with Digital Pacific hosting. * - * @version 4.0 * @author Maikel Linke * * Copyright (C) 2005-2016, The Roundcube Dev Team @@ -32,10 +31,11 @@ class rcube_cpanel_webmail_password * Changes the user's password. It is called by password.php. * See "Driver API" README and password.php for the interface details. * - * @param string $curpas current (old) password + * @param string $curpas current (old) password * @param string $newpass new requested password + * * @return mixed int code or assoc array with 'code' and 'message', see - * "Driver API" README and password.php + * "Driver API" README and password.php */ public function save($curpas, $newpass) { @@ -84,18 +84,17 @@ public static function decode_response($response) } // $result should be `null` or `stdClass` object - $result = json_decode($response, !JSON_OBJECT_AS_ARRAY); + $result = json_decode($response); // The UAPI may return HTML instead of JSON on missing authentication - if (is_object($result) && $result->status === 1) { + if ($result && $result->status === 1) { return PASSWORD_SUCCESS; } - $errors = $result->errors; - if (is_array($errors) && count($errors) > 0) { + if ($result && is_array($result->errors) && count($result->errors) > 0) { return array( 'code' => PASSWORD_ERROR, - 'message' => $errors[0], + 'message' => $result->errors[0], ); } @@ -119,8 +118,7 @@ public static function decode_response($response) * @param string $url the URL to post data to * @param array $postdata the data to post * - * @return string the body of the reply - * @throws Exception + * @return string|false The body of the reply, False on error */ private function curl_auth_post($userpwd, $url, $postdata) { @@ -142,7 +140,7 @@ private function curl_auth_post($userpwd, $url, $postdata) curl_close($ch); if ($result === false) { - throw new Exception("curl error: $error"); + rcube::raise_error("curl error: $error", true, false); } return $result; From 21732eb2503b1e0cad5a5083e44f5c2ec40ceac0 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 13 Dec 2016 09:37:05 +0100 Subject: [PATCH 20/48] "Bad password" -> "Invalid password" --- plugins/enigma/localization/en_US.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/enigma/localization/en_US.inc b/plugins/enigma/localization/en_US.inc index 1434773aa40..7e121a0ce59 100644 --- a/plugins/enigma/localization/en_US.inc +++ b/plugins/enigma/localization/en_US.inc @@ -102,12 +102,12 @@ $messages['sigerror'] = 'Unverified signature. Internal error.'; $messages['decryptok'] = 'Message decrypted.'; $messages['decrypterror'] = 'Decryption failed.'; $messages['decryptnokey'] = 'Decryption failed. Private key not found. Key ID: $keyid.'; -$messages['decryptbadpass'] = 'Decryption failed. Bad password.'; +$messages['decryptbadpass'] = 'Decryption failed. Invalid password.'; $messages['decryptnopass'] = 'Decryption failed. Key password required.'; $messages['decryptpartial'] = 'Message decrypted, but part of the body was not encrypted.'; $messages['signerror'] = 'Signing failed.'; $messages['signnokey'] = 'Signing failed. Private key not found.'; -$messages['signbadpass'] = 'Signing failed. Bad password.'; +$messages['signbadpass'] = 'Signing failed. Invalid password.'; $messages['signnopass'] = 'Signing failed. Key password required.'; $messages['encrypterror'] = 'Encryption failed.'; $messages['encryptnokey'] = 'Encryption failed. Public key not found for $email.'; From 2e97728d06f35feb33c39dd0131c92abb58b8835 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 14 Dec 2016 08:43:06 +0100 Subject: [PATCH 21/48] Enigma: Add some notes to Known issues section (#5561) --- plugins/enigma/README | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/enigma/README b/plugins/enigma/README index 15df26caa14..c1ae653e6a5 100644 --- a/plugins/enigma/README +++ b/plugins/enigma/README @@ -54,6 +54,11 @@ KNOWN ISSUES: There are some known issues with accepting key passphrases on various system configurations. This is caused by issues in PinEntry handling. Make sure that vendor/bin/crypt-gpg-pinentry works from command line. -Note that pinentry is used with gpg >= 2.0 and <= 2.1.12. + Possible reasons: - non-working loader in shebang (#! /usr/bin/env php) + Make sure it works for the user the php scripts are executed upon + (i.e. apache, www-date, etc.) + +Note: pinentry is used with gpg >= 2.0 and <= 2.1.12. +Note: for server use GnuPG developers still recommend version 1.4. From c183463a6efb3842677ad5eac6f2540f0a1ab214 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 14 Dec 2016 15:39:35 +0100 Subject: [PATCH 22/48] Fix visual glitch when using disabled_actions for items in Settings menu --- program/steps/settings/func.inc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index 6216a1c9d42..f2c3d00384b 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -1371,6 +1371,8 @@ function rcmail_settings_tabs($attrib) array('command' => 'responses', 'type' => 'link', 'label' => 'responses', 'title' => 'manageresponses'), ); + $disabled_actions = (array) $RCMAIL->config->get('disabled_actions'); + // get all identites from DB and define list of cols to be displayed $plugin = $RCMAIL->plugins->exec_hook('settings_actions', array( 'actions' => $default_actions, @@ -1382,6 +1384,11 @@ function rcmail_settings_tabs($attrib) $tabs = array(); foreach ($plugin['actions'] as $action) { + $task_action = $action['command'] ? $action['command'] : $action['action']; + if (in_array('settings.' . $task_action, $disabled_actions)) { + continue; + } + if (!$action['command'] && !$action['href'] && $action['action']) { $action['href'] = $RCMAIL->url(array('_action' => $action['action'])); } From 930c921bed471ee6ab3d92ba86468fa0ccc2a701 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 14 Dec 2016 18:30:16 +0100 Subject: [PATCH 23/48] Disable Print button for pdf attachments in Firefox (#5125) Mozilla's PDF.js viewer does not allow printing from host page. We try to detect such situation and disable the button to minimize user confusion. --- program/js/app.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/program/js/app.js b/program/js/app.js index 892ee6a6346..51469170adb 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -354,7 +354,20 @@ function rcube_webmail() this.init_messageform(); } else if (this.env.action == 'get') { - this.enable_command('download', 'print', true); + this.enable_command('download', true); + + // Mozilla's PDF.js viewer does not allow printing from host page (#5125) + // to minimize user confusion we disable the Print button + if (bw.mz && this.env.mimetype == 'application/pdf') { + n = 0; // there will be two onload events, first for the preload page + $(this.gui_objects.messagepartframe).on('load', function() { + if (n++) try { this.contentWindow.document; ref.enable_command('print', true); } + catch (e) {/* ignore */} + }); + } + else + this.enable_command('print', true); + if (this.env.is_message) { this.enable_command('reply', 'reply-all', 'edit', 'viewsource', 'forward', 'forward-inline', 'forward-attachment', true); From 692cb9c63b9223ee20a32b19e970106ce8a852a4 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 15 Dec 2016 09:42:17 +0100 Subject: [PATCH 24/48] Update localization --- plugins/acl/localization/de_DE.inc | 2 +- plugins/acl/localization/sq_AL.inc | 79 +- plugins/acl/localization/tr_TR.inc | 100 +-- plugins/archive/localization/ar_SA.inc | 2 +- plugins/archive/localization/ast.inc | 2 +- plugins/archive/localization/az_AZ.inc | 2 +- plugins/archive/localization/be_BE.inc | 2 +- plugins/archive/localization/bg_BG.inc | 3 +- plugins/archive/localization/br.inc | 2 +- plugins/archive/localization/bs_BA.inc | 2 +- plugins/archive/localization/ca_ES.inc | 2 +- plugins/archive/localization/cs_CZ.inc | 2 +- plugins/archive/localization/cy_GB.inc | 3 +- plugins/archive/localization/da_DK.inc | 3 +- plugins/archive/localization/de_CH.inc | 3 +- plugins/archive/localization/de_DE.inc | 7 +- plugins/archive/localization/el_GR.inc | 2 +- plugins/archive/localization/en_CA.inc | 2 +- plugins/archive/localization/en_GB.inc | 2 +- plugins/archive/localization/eo.inc | 2 +- plugins/archive/localization/es_419.inc | 2 +- plugins/archive/localization/es_AR.inc | 2 +- plugins/archive/localization/es_ES.inc | 3 +- plugins/archive/localization/et_EE.inc | 2 +- plugins/archive/localization/eu_ES.inc | 2 +- plugins/archive/localization/fa_AF.inc | 2 +- plugins/archive/localization/fa_IR.inc | 2 +- plugins/archive/localization/fi_FI.inc | 3 +- plugins/archive/localization/fo_FO.inc | 2 +- plugins/archive/localization/fr_FR.inc | 3 +- plugins/archive/localization/gl_ES.inc | 2 +- plugins/archive/localization/he_IL.inc | 3 +- plugins/archive/localization/hr_HR.inc | 2 +- plugins/archive/localization/hu_HU.inc | 3 +- plugins/archive/localization/hy_AM.inc | 2 +- plugins/archive/localization/ia.inc | 2 +- plugins/archive/localization/id_ID.inc | 3 +- plugins/archive/localization/it_IT.inc | 3 +- plugins/archive/localization/ja_JP.inc | 3 +- plugins/archive/localization/km_KH.inc | 2 +- plugins/archive/localization/ko_KR.inc | 3 +- plugins/archive/localization/ku.inc | 2 +- plugins/archive/localization/ku_IQ.inc | 2 +- plugins/archive/localization/lb_LU.inc | 2 +- plugins/archive/localization/lt_LT.inc | 2 +- plugins/archive/localization/lv_LV.inc | 2 +- plugins/archive/localization/ml_IN.inc | 2 +- plugins/archive/localization/mn_MN.inc | 2 +- plugins/archive/localization/mr_IN.inc | 2 +- plugins/archive/localization/nb_NO.inc | 2 +- plugins/archive/localization/nl_NL.inc | 2 +- plugins/archive/localization/nn_NO.inc | 2 +- plugins/archive/localization/pl_PL.inc | 3 +- plugins/archive/localization/pt_BR.inc | 3 +- plugins/archive/localization/pt_PT.inc | 3 +- plugins/archive/localization/ro_RO.inc | 2 +- plugins/archive/localization/ru_RU.inc | 3 +- plugins/archive/localization/si_LK.inc | 2 +- plugins/archive/localization/sk_SK.inc | 3 +- plugins/archive/localization/sl_SI.inc | 3 +- plugins/archive/localization/sq_AL.inc | 17 +- plugins/archive/localization/sr_CS.inc | 2 +- plugins/archive/localization/sv_SE.inc | 3 +- plugins/archive/localization/tr_TR.inc | 19 +- plugins/archive/localization/tzl.inc | 2 +- plugins/archive/localization/uk_UA.inc | 3 +- plugins/archive/localization/vi_VN.inc | 2 +- plugins/archive/localization/zh_CN.inc | 2 +- plugins/archive/localization/zh_TW.inc | 2 +- .../localization/sq_AL.inc | 20 + .../localization/tr_TR.inc | 2 +- plugins/enigma/localization/bg_BG.inc | 10 +- plugins/enigma/localization/br.inc | 4 +- plugins/enigma/localization/cs_CZ.inc | 11 +- plugins/enigma/localization/cy_GB.inc | 8 +- plugins/enigma/localization/da_DK.inc | 1 + plugins/enigma/localization/de_CH.inc | 5 +- plugins/enigma/localization/de_DE.inc | 47 +- plugins/enigma/localization/el_GR.inc | 4 +- plugins/enigma/localization/en_GB.inc | 4 +- plugins/enigma/localization/es_ES.inc | 5 +- plugins/enigma/localization/eu_ES.inc | 81 ++ plugins/enigma/localization/fi_FI.inc | 4 +- plugins/enigma/localization/fo_FO.inc | 4 +- plugins/enigma/localization/fr_FR.inc | 7 +- plugins/enigma/localization/he_IL.inc | 13 +- plugins/enigma/localization/hu_HU.inc | 10 +- plugins/enigma/localization/id_ID.inc | 83 ++ plugins/enigma/localization/it_IT.inc | 11 + plugins/enigma/localization/ja_JP.inc | 5 +- plugins/enigma/localization/ko_KR.inc | 17 +- plugins/enigma/localization/lt_LT.inc | 18 +- plugins/enigma/localization/lv_LV.inc | 4 +- plugins/enigma/localization/nl_NL.inc | 7 +- plugins/enigma/localization/pl_PL.inc | 8 +- plugins/enigma/localization/pt_BR.inc | 19 +- plugins/enigma/localization/pt_PT.inc | 7 +- plugins/enigma/localization/ru_RU.inc | 8 +- plugins/enigma/localization/sk_SK.inc | 5 +- plugins/enigma/localization/sq_AL.inc | 123 +++ plugins/enigma/localization/sv_SE.inc | 8 +- plugins/enigma/localization/tr_TR.inc | 133 ++-- plugins/enigma/localization/uk_UA.inc | 13 +- plugins/enigma/localization/zh_CN.inc | 8 +- plugins/help/localization/is_IS.inc | 22 + plugins/help/localization/sl_SI.inc | 1 + plugins/help/localization/sq_AL.inc | 4 +- plugins/help/localization/tr_TR.inc | 2 +- .../hide_blockquote/localization/sq_AL.inc | 5 +- .../hide_blockquote/localization/tr_TR.inc | 4 +- plugins/managesieve/localization/bg_BG.inc | 3 + plugins/managesieve/localization/cs_CZ.inc | 4 + plugins/managesieve/localization/cy_GB.inc | 3 + plugins/managesieve/localization/de_CH.inc | 3 +- plugins/managesieve/localization/de_DE.inc | 2 +- plugins/managesieve/localization/en_CA.inc | 2 - plugins/managesieve/localization/en_GB.inc | 2 - plugins/managesieve/localization/es_ES.inc | 2 + plugins/managesieve/localization/fr_FR.inc | 2 + plugins/managesieve/localization/he_IL.inc | 1 + plugins/managesieve/localization/hu_HU.inc | 2 + plugins/managesieve/localization/id_ID.inc | 13 + plugins/managesieve/localization/it_IT.inc | 6 + plugins/managesieve/localization/ja_JP.inc | 2 + plugins/managesieve/localization/ko_KR.inc | 7 + plugins/managesieve/localization/lt_LT.inc | 9 + plugins/managesieve/localization/nl_NL.inc | 1 + plugins/managesieve/localization/pl_PL.inc | 4 +- plugins/managesieve/localization/pt_PT.inc | 2 + plugins/managesieve/localization/ru_RU.inc | 3 + plugins/managesieve/localization/sk_SK.inc | 2 + plugins/managesieve/localization/sl_SI.inc | 53 ++ plugins/managesieve/localization/sq_AL.inc | 217 +++++- plugins/managesieve/localization/sv_SE.inc | 3 + plugins/managesieve/localization/tr_TR.inc | 240 +++--- plugins/managesieve/localization/uk_UA.inc | 1 + plugins/managesieve/localization/zh_CN.inc | 1 + plugins/markasjunk/localization/is_IS.inc | 21 + plugins/markasjunk/localization/sq_AL.inc | 21 + plugins/markasjunk/localization/tr_TR.inc | 2 +- .../new_user_dialog/localization/de_DE.inc | 4 +- .../new_user_dialog/localization/ku_IQ.inc | 20 + .../new_user_dialog/localization/sq_AL.inc | 20 + .../new_user_dialog/localization/tr_TR.inc | 2 +- .../newmail_notifier/localization/fr_FR.inc | 2 +- .../newmail_notifier/localization/sq_AL.inc | 10 +- .../newmail_notifier/localization/tr_TR.inc | 12 +- plugins/password/localization/bg_BG.inc | 4 + plugins/password/localization/cy_GB.inc | 4 + plugins/password/localization/da_DK.inc | 5 + plugins/password/localization/de_DE.inc | 6 +- plugins/password/localization/en_GB.inc | 5 - plugins/password/localization/es_ES.inc | 4 + plugins/password/localization/fr_FR.inc | 4 + plugins/password/localization/he_IL.inc | 4 + plugins/password/localization/hu_HU.inc | 4 + plugins/password/localization/id_ID.inc | 4 + plugins/password/localization/is_IS.inc | 33 + plugins/password/localization/it_IT.inc | 4 + plugins/password/localization/ja_JP.inc | 4 + plugins/password/localization/ko_KR.inc | 4 + plugins/password/localization/pl_PL.inc | 8 +- plugins/password/localization/pt_BR.inc | 4 + plugins/password/localization/pt_PT.inc | 4 + plugins/password/localization/ru_RU.inc | 4 + plugins/password/localization/sk_SK.inc | 4 + plugins/password/localization/sl_SI.inc | 7 + plugins/password/localization/sq_AL.inc | 24 +- plugins/password/localization/sv_SE.inc | 4 + plugins/password/localization/th_TH.inc | 37 + plugins/password/localization/tr_TR.inc | 28 +- plugins/password/localization/uk_UA.inc | 4 + .../localization/is_IS.inc} | 12 +- .../localization/sq_AL.inc | 19 + plugins/userinfo/localization/is_IS.inc | 22 + plugins/userinfo/localization/sq_AL.inc | 7 +- plugins/userinfo/localization/tr_TR.inc | 4 +- .../vcard_attachments/localization/sq_AL.inc | 20 + .../vcard_attachments/localization/tr_TR.inc | 2 +- plugins/zipdownload/localization/is_IS.inc | 22 + plugins/zipdownload/localization/sl_SI.inc | 4 + plugins/zipdownload/localization/sq_AL.inc | 22 + plugins/zipdownload/localization/tr_TR.inc | 2 +- program/localization/az_AZ/labels.inc | 37 + program/localization/bg_BG/labels.inc | 10 + program/localization/bg_BG/messages.inc | 5 + program/localization/ca_ES/labels.inc | 19 + program/localization/cs_CZ/labels.inc | 1 + program/localization/cy_GB/labels.inc | 10 + program/localization/cy_GB/messages.inc | 5 + program/localization/da_DK/labels.inc | 6 + program/localization/da_DK/messages.inc | 6 + program/localization/de_CH/labels.inc | 1 + program/localization/de_CH/messages.inc | 1 + program/localization/de_DE/labels.inc | 61 +- program/localization/de_DE/messages.inc | 13 +- program/localization/es_ES/labels.inc | 10 + program/localization/es_ES/messages.inc | 5 + program/localization/eu_ES/labels.inc | 8 + program/localization/eu_ES/messages.inc | 14 +- program/localization/fi_FI/labels.inc | 1 + program/localization/fi_FI/messages.inc | 1 + program/localization/fr_FR/labels.inc | 13 +- program/localization/fr_FR/messages.inc | 5 + program/localization/ga_IE/labels.inc | 159 ++++ program/localization/ga_IE/messages.inc | 31 +- program/localization/he_IL/labels.inc | 5 + program/localization/he_IL/messages.inc | 2 + program/localization/hu_HU/labels.inc | 13 +- program/localization/hu_HU/messages.inc | 5 + program/localization/id_ID/labels.inc | 6 + program/localization/id_ID/messages.inc | 5 + program/localization/is_IS/labels.inc | 14 +- program/localization/is_IS/messages.inc | 19 + program/localization/it_IT/labels.inc | 9 + program/localization/it_IT/messages.inc | 2 + program/localization/ja_JP/labels.inc | 11 + program/localization/ja_JP/messages.inc | 5 + program/localization/ko_KR/labels.inc | 5 + program/localization/ko_KR/messages.inc | 6 + program/localization/lt_LT/labels.inc | 1 + program/localization/lt_LT/messages.inc | 2 + program/localization/mk_MK/messages.inc | 3 + program/localization/nl_NL/labels.inc | 1 + program/localization/nl_NL/messages.inc | 1 + program/localization/pl_PL/labels.inc | 11 + program/localization/pl_PL/messages.inc | 9 +- program/localization/pt_BR/csv2vcard.inc | 11 - program/localization/pt_BR/labels.inc | 5 + program/localization/pt_BR/messages.inc | 5 + program/localization/pt_PT/labels.inc | 11 + program/localization/pt_PT/messages.inc | 5 + program/localization/ru_RU/labels.inc | 10 + program/localization/ru_RU/messages.inc | 5 + program/localization/sk_SK/labels.inc | 10 + program/localization/sk_SK/messages.inc | 5 + program/localization/sl_SI/labels.inc | 128 +++- program/localization/sl_SI/messages.inc | 39 +- program/localization/sq_AL/labels.inc | 613 ++++++++++++--- program/localization/sq_AL/messages.inc | 245 ++++-- program/localization/sv_SE/labels.inc | 10 + program/localization/sv_SE/messages.inc | 5 + program/localization/th_TH/labels.inc | 19 +- program/localization/tr_TR/labels.inc | 711 +++++++++--------- program/localization/tr_TR/messages.inc | 257 +++---- program/localization/uk_UA/labels.inc | 67 +- program/localization/uk_UA/messages.inc | 35 +- program/localization/zh_CN/labels.inc | 1 + program/localization/zh_CN/messages.inc | 1 + program/localization/zh_TW/labels.inc | 65 ++ 250 files changed, 3736 insertions(+), 1267 deletions(-) create mode 100644 plugins/attachment_reminder/localization/sq_AL.inc create mode 100644 plugins/enigma/localization/eu_ES.inc create mode 100644 plugins/enigma/localization/sq_AL.inc create mode 100644 plugins/help/localization/is_IS.inc create mode 100644 plugins/markasjunk/localization/is_IS.inc create mode 100644 plugins/markasjunk/localization/sq_AL.inc create mode 100644 plugins/new_user_dialog/localization/ku_IQ.inc create mode 100644 plugins/new_user_dialog/localization/sq_AL.inc create mode 100644 plugins/password/localization/is_IS.inc create mode 100644 plugins/password/localization/th_TH.inc rename plugins/{enigma/localization/ar_SA.inc => subscriptions_option/localization/is_IS.inc} (61%) create mode 100644 plugins/subscriptions_option/localization/sq_AL.inc create mode 100644 plugins/userinfo/localization/is_IS.inc create mode 100644 plugins/vcard_attachments/localization/sq_AL.inc create mode 100644 plugins/zipdownload/localization/is_IS.inc create mode 100644 plugins/zipdownload/localization/sq_AL.inc diff --git a/plugins/acl/localization/de_DE.inc b/plugins/acl/localization/de_DE.inc index 01c330076d9..3de7b332804 100644 --- a/plugins/acl/localization/de_DE.inc +++ b/plugins/acl/localization/de_DE.inc @@ -21,7 +21,7 @@ $labels['username'] = 'Benutzer:'; $labels['advanced'] = 'Erweiterter Modus'; $labels['newuser'] = 'Eintrag hinzufügen'; $labels['editperms'] = 'Zugriffsrechte bearbeiten'; -$labels['actions'] = 'Zugriffsrechte Aktionen...'; +$labels['actions'] = 'Zugriffsrechteaktionen …'; $labels['anyone'] = 'Alle Benutzer (anyone)'; $labels['anonymous'] = 'Gäste (anonymous)'; $labels['identifier'] = 'Bezeichnung'; diff --git a/plugins/acl/localization/sq_AL.inc b/plugins/acl/localization/sq_AL.inc index ed0d7238015..41ecc956687 100644 --- a/plugins/acl/localization/sq_AL.inc +++ b/plugins/acl/localization/sq_AL.inc @@ -15,11 +15,82 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ */ -$labels['aclr'] = 'Lexo mesazhet'; -$labels['aclwrite'] = 'Shkruaj'; +$labels['myrights'] = 'Të drejta Hyrjeje'; +$labels['username'] = 'Përdorues:'; +$labels['advanced'] = 'Mënyra e përparuar'; +$labels['newuser'] = 'Shtoni zë'; +$labels['editperms'] = 'Përpunoni leje'; +$labels['actions'] = 'Veprime të drejtash hyrjeje…'; +$labels['anyone'] = 'Krejt përdoruesit (cilido)'; +$labels['anonymous'] = 'Mysafirë (në mënyrë anonime)'; +$labels['identifier'] = 'Identifikues'; +$labels['acll'] = 'Kërkim'; +$labels['aclr'] = 'Lexoni mesazhe'; +$labels['acls'] = 'Mbaje gjendjen i Parë'; +$labels['acli'] = 'Fut (Kopje te)'; +$labels['aclp'] = 'Postim'; +$labels['aclc'] = 'Krijo nëndosje'; +$labels['aclk'] = 'Krijo nëndosje'; +$labels['acld'] = 'Fshiji mesazhet'; +$labels['aclt'] = 'Fshiji mesazhet'; +$labels['acle'] = 'Spastroje'; +$labels['aclx'] = 'Fshije dosjen'; +$labels['acla'] = 'Administroni'; +$labels['acln'] = 'Shto shënime te mesazhet'; +$labels['aclfull'] = 'Kontroll i plotë'; +$labels['aclother'] = 'Tjetër'; +$labels['aclread'] = 'Leximi'; +$labels['aclwrite'] = 'Shkrimi'; $labels['acldelete'] = 'Fshije'; -$labels['shortaclc'] = 'Krijo'; -$labels['shortaclk'] = 'Krijo'; +$labels['shortacll'] = 'Kërkim'; +$labels['shortaclr'] = 'Leximi'; +$labels['shortacls'] = 'Mbaje'; +$labels['shortaclw'] = 'Shkrimi'; +$labels['shortacli'] = 'Fut'; +$labels['shortaclp'] = 'Posto'; +$labels['shortaclc'] = 'Krijoje'; +$labels['shortaclk'] = 'Krijoje'; $labels['shortacld'] = 'Fshije'; $labels['shortaclt'] = 'Fshije'; +$labels['shortacle'] = 'Spastro'; +$labels['shortaclx'] = 'Fshirje dosjeje'; +$labels['shortacla'] = 'Administro'; +$labels['shortacln'] = 'Shto shënim'; +$labels['shortaclother'] = 'Tjetër'; +$labels['shortaclread'] = 'Leximi'; +$labels['shortaclwrite'] = 'Shkrimi'; +$labels['shortacldelete'] = 'Fshirjeje'; +$labels['longacll'] = 'Dosja është e dukshme në lista dhe në të mund të pajtoheni'; +$labels['longaclr'] = 'Dosja mund të hapet për lexim'; +$labels['longacls'] = 'Mund të ndryshohet shenja Mesazhe të Parë'; +$labels['longaclw'] = 'Mund të ndryshohen shenjat dhe fjalëkyçet për mesazhet, hiq të Parë dhe të Fshirë'; +$labels['longacli'] = 'Mesazhet mund të shkruhen ose kopjohen në dosje'; +$labels['longaclp'] = 'Mesazhet mund të postohen te kjo dosje'; +$labels['longaclc'] = 'Dosjet mund të krijohen (ose riemërtohen) drejt e nën këtë dosje'; +$labels['longaclk'] = 'Dosjet mund të krijohen (ose riemërtohen) drejt e nën këtë dosje'; +$labels['longacld'] = 'Mund të ndryshohet shenja Mesazhe të Fshirë'; +$labels['longaclt'] = 'Mund të ndryshohet shenja Mesazhe të Parë'; +$labels['longacle'] = 'Mesazhet mund të spastrohen'; +$labels['longaclx'] = 'Dosja mund të fshihet ose riemërtohet'; +$labels['longacla'] = 'Mund të ndryshohen të drejta hyrjeje te dosja'; +$labels['longacln'] = 'Mund të ndryshohen tejtëdhëna të përbashkëta (shënime) mesazhesh'; +$labels['longaclfull'] = 'Kontroll i plotë, përfshi administrim dosjesh'; +$labels['longaclread'] = 'Dosja mund të hapet për lexim'; +$labels['longaclwrite'] = 'Mesazheve mund t’u vihet shenjë, shkruhen ose kopjohen te dosja'; +$labels['longacldelete'] = 'Mesazhet mund të fshihen'; +$labels['longaclother'] = 'Të tjera të drejta hyrjesh'; +$labels['ariasummaryacltable'] = 'Listë të drejtash hyrjeje'; +$labels['arialabelaclactions'] = 'Paraqit veprime'; +$labels['arialabelaclform'] = 'Formular të drejtash hyrjeje'; +$messages['deleting'] = 'Po fshihen të drejta hyrjeje…'; +$messages['saving'] = 'Po ruhen të drejtash hyrjeje…'; +$messages['updatesuccess'] = 'U ndryshuan me sukses të drejta hyrjeje'; +$messages['deletesuccess'] = 'U fshinë me sukses të drejta hyrjeje'; +$messages['createsuccess'] = 'U shtuan me sukses të drejta hyrjeje'; +$messages['updateerror'] = 'I pazoti të përditësojë të drejta hyrjeje'; +$messages['deleteerror'] = 'I pazoti të fshijë të drejta hyrjeje'; +$messages['createerror'] = 'I pazoti të shtojë të drejta hyrjeje'; +$messages['deleteconfirm'] = 'Jeni i sigurt, doni t’i hiqni të drejta hyrjeje përdoruesit(ve) të përzgjedhur?'; +$messages['norights'] = 'Nuk janë specifikuar të drejta!'; +$messages['nouser'] = 'Nuk është specifikuar emër përdoruesi!'; ?> diff --git a/plugins/acl/localization/tr_TR.inc b/plugins/acl/localization/tr_TR.inc index 9c1c224e6ab..b13ac8555f8 100644 --- a/plugins/acl/localization/tr_TR.inc +++ b/plugins/acl/localization/tr_TR.inc @@ -16,30 +16,30 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ */ $labels['sharing'] = 'Paylaşım'; -$labels['myrights'] = 'Erişim Hakları'; +$labels['myrights'] = 'Erişim İzinleri'; $labels['username'] = 'Kullanıcı:'; -$labels['advanced'] = 'Gelişmiş mod'; -$labels['newuser'] = 'Girdi ekle'; +$labels['advanced'] = 'Gelişmiş kip'; +$labels['newuser'] = 'Kayıt ekle'; $labels['editperms'] = 'İzinleri düzenle'; -$labels['actions'] = 'Erişim hakları aksiyonları...'; -$labels['anyone'] = 'Tüm kullanıcılar(kim olursa)'; -$labels['anonymous'] = 'Ziyaretçiler(anonim)'; +$labels['actions'] = 'Erişim izinleri işlemleri...'; +$labels['anyone'] = 'Tüm kullanıcılar (kim olursa)'; +$labels['anonymous'] = 'Ziyaretçiler (isimsiz)'; $labels['identifier'] = 'Tanımlayıcı'; $labels['acll'] = 'Arama'; -$labels['aclr'] = 'Mesajları oku'; -$labels['acls'] = 'Göründü durumunu muhafaza et'; -$labels['aclw'] = 'Yazma bayrakları'; -$labels['acli'] = 'Ekle(kopyala)'; +$labels['aclr'] = 'İletileri oku'; +$labels['acls'] = 'Okundu durumu korunsun'; +$labels['aclw'] = 'Yazma işaretleri'; +$labels['acli'] = 'Ekle (kopyala)'; $labels['aclp'] = 'Gönder'; -$labels['aclc'] = 'Alt dizinler oluştur'; -$labels['aclk'] = 'Alt dizinler oluştur'; -$labels['acld'] = 'Mesajları sil'; -$labels['aclt'] = 'Mesajları sil'; +$labels['aclc'] = 'Alt klasörler oluştur'; +$labels['aclk'] = 'Alt klasörler oluştur'; +$labels['acld'] = 'İletileri sil'; +$labels['aclt'] = 'İletileri sil'; $labels['acle'] = 'Sil'; -$labels['aclx'] = 'Dizini sil'; +$labels['aclx'] = 'Klasörü sil'; $labels['acla'] = 'Yönet'; -$labels['acln'] = 'Mesajlara not ekle'; -$labels['aclfull'] = 'Tam kontrol'; +$labels['acln'] = 'İletilere not ekle'; +$labels['aclfull'] = 'Tam denetim'; $labels['aclother'] = 'Diğer'; $labels['aclread'] = 'Oku'; $labels['aclwrite'] = 'Yaz'; @@ -55,7 +55,7 @@ $labels['shortaclk'] = 'Oluştur'; $labels['shortacld'] = 'Sil'; $labels['shortaclt'] = 'Sil'; $labels['shortacle'] = 'Sil'; -$labels['shortaclx'] = 'Dizin sil'; +$labels['shortaclx'] = 'Klasörü sil'; $labels['shortacla'] = 'Yönet'; $labels['shortacln'] = 'Not ekle'; $labels['shortaclother'] = 'Diğer'; @@ -63,36 +63,36 @@ $labels['shortaclread'] = 'Oku'; $labels['shortaclwrite'] = 'Yaz'; $labels['shortacldelete'] = 'Sil'; $labels['longacll'] = 'Klasör listesinde görülebilir ve abone olunabilir'; -$labels['longaclr'] = 'Dizin yazma için okunabilir'; -$labels['longacls'] = 'Mesajların göründü bayrağı değiştirilebilir'; -$labels['longaclw'] = 'Görülme ve Silinme bayrakları hariç bayraklar ve anahtar kelimeler değiştirilebilir'; -$labels['longacli'] = 'Mesajlar dizini yazılabilir veya kopyalanabilir'; -$labels['longaclp'] = 'Mesajlar bu dizine gönderilebilir'; -$labels['longaclc'] = 'Dizinler doğrudan bu klasör altında oluşturulabilir veya yeniden adlandırılabilir.'; -$labels['longaclk'] = 'Dizinler doğrudan bu klasör altında oluşturulabilir veya yeniden adlandırılabilir.'; -$labels['longacld'] = 'mesajları sil bayrakları değiştirilebilir'; -$labels['longaclt'] = 'mesajları sil, bayraklar değiştirilebilir'; -$labels['longacle'] = 'Mesajlar silinebilir'; -$labels['longaclx'] = 'Klasörü silinebilir veya yeniden adlandırılabilir'; -$labels['longacla'] = 'Dizin erişim hakları değiştirilebilir'; -$labels['longacln'] = 'Mesajların paylaşılan üst verileri (notlar) değiştirilebilir'; -$labels['longaclfull'] = 'Dizin yönetimi de dahil olmak üzere tam kontrol'; -$labels['longaclread'] = 'Dizin yazma için okunabilir'; -$labels['longaclwrite'] = 'Dizin yönetimi de dahil olmak üzere tam kontrol'; -$labels['longacldelete'] = 'Mesajlar silinebilir'; -$labels['longaclother'] = 'Diğer erişim hakları'; -$labels['ariasummaryacltable'] = 'Erişim hakları listesi'; -$labels['arialabelaclactions'] = 'Aksiyon listesi'; -$labels['arialabelaclform'] = 'Erişim hakları formu'; -$messages['deleting'] = 'Erişim hakları siliniyor...'; -$messages['saving'] = 'Erişim hakları kaydediliyor...'; -$messages['updatesuccess'] = 'Erişim hakları değiştirildi'; -$messages['deletesuccess'] = 'Erişim hakları silindi'; -$messages['createsuccess'] = 'Erişim hakları eklendi'; -$messages['updateerror'] = 'Erişim hakları güncellenemedi'; -$messages['deleteerror'] = 'Erişim haklarını silinemedi'; -$messages['createerror'] = 'Erişim hakları eklenemedi'; -$messages['deleteconfirm'] = 'Seçilen kullanıcılar için erişim haklarını silmek istediğinizden emin misiniz?'; -$messages['norights'] = 'Hiçbir hak belirtilmemiş!'; -$messages['nouser'] = 'Hiçbir kullanıcı belirtilmemiş!'; +$labels['longaclr'] = 'Klasör okunmak üzere açılabilir'; +$labels['longacls'] = 'İletilerin Okundu işareti değiştirilebilir'; +$labels['longaclw'] = 'Okundu ve Silindi işaretleri dışındaki işaret ve anahtar sözcükler değiştirilebilir'; +$labels['longacli'] = 'Klasöre iletiler yazılabilir ya da kopyalanabilir'; +$labels['longaclp'] = 'İletiler bu klasöre gönderilebilir'; +$labels['longaclc'] = 'Klasörler doğrudan bu klasör altında oluşturulabilir (ya da yeniden adlandırılabilir).'; +$labels['longaclk'] = 'Klasörler doğrudan bu klasör altında oluşturulabilir (ya da yeniden adlandırılabilir).'; +$labels['longacld'] = 'İleti Silindi işareti değiştirilebilir'; +$labels['longaclt'] = 'İleti Silindi işareti değiştirilebilir'; +$labels['longacle'] = 'İletiler silinebilir'; +$labels['longaclx'] = 'Klasör silinebilir ya da yeniden adlandırılabilir'; +$labels['longacla'] = 'Klasör erişim izinleri değiştirilebilir'; +$labels['longacln'] = 'İletilerin paylaşılan üst verileri (notlar) değiştirilebilir'; +$labels['longaclfull'] = 'Klasör yönetimi dahil tam denetim'; +$labels['longaclread'] = 'Klasör okunmak üzere açılabilir'; +$labels['longaclwrite'] = 'Klasöre iletiler işaretlenebilir, yazılabilir ya da kopyalanabilir'; +$labels['longacldelete'] = 'İletiler silinebilir'; +$labels['longaclother'] = 'Diğer erişim izinleri'; +$labels['ariasummaryacltable'] = 'Erişim izinleri listesi'; +$labels['arialabelaclactions'] = 'İşlem listesi'; +$labels['arialabelaclform'] = 'Erişim izinleri formu'; +$messages['deleting'] = 'Erişim izinleri siliniyor...'; +$messages['saving'] = 'Erişim izinleri kaydediliyor...'; +$messages['updatesuccess'] = 'Erişim izinleri değiştirildi'; +$messages['deletesuccess'] = 'Erişim izinleri silindi'; +$messages['createsuccess'] = 'Erişim izinleri eklendi'; +$messages['updateerror'] = 'Erişim izinleri güncellenemedi'; +$messages['deleteerror'] = 'Erişim izinleri silinemedi'; +$messages['createerror'] = 'Erişim izinleri eklenemedi'; +$messages['deleteconfirm'] = 'Seçilmiş kullanıcılar için erişim izinlerini silmek istediğinize emin misiniz?'; +$messages['norights'] = 'Herhangi bir izin belirtilmemiş!'; +$messages['nouser'] = 'Herhangi bir kullanıcı belirtilmemiş!'; ?> diff --git a/plugins/archive/localization/ar_SA.inc b/plugins/archive/localization/ar_SA.inc index 737f745d877..395020d1755 100644 --- a/plugins/archive/localization/ar_SA.inc +++ b/plugins/archive/localization/ar_SA.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/ast.inc b/plugins/archive/localization/ast.inc index 0ae647fe744..03083526b35 100644 --- a/plugins/archive/localization/ast.inc +++ b/plugins/archive/localization/ast.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/az_AZ.inc b/plugins/archive/localization/az_AZ.inc index ab2311776dd..7db0a1ead36 100644 --- a/plugins/archive/localization/az_AZ.inc +++ b/plugins/archive/localization/az_AZ.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/be_BE.inc b/plugins/archive/localization/be_BE.inc index 80850dba1b0..20a6ac05340 100644 --- a/plugins/archive/localization/be_BE.inc +++ b/plugins/archive/localization/be_BE.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/bg_BG.inc b/plugins/archive/localization/bg_BG.inc index 9f9b868cbdb..9251fc6965f 100644 --- a/plugins/archive/localization/bg_BG.inc +++ b/plugins/archive/localization/bg_BG.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Месец (пр. Архив/2012/06)'; $labels['archivetypefolder'] = 'Оригинална папка'; $labels['archivetypesender'] = 'E-mail адрес на подател'; $labels['unkownsender'] = 'неизвестно'; +$labels['readonarchive'] = 'Маркирай писмото като прочетено в архива'; ?> diff --git a/plugins/archive/localization/br.inc b/plugins/archive/localization/br.inc index 3a46694f772..83d66404a69 100644 --- a/plugins/archive/localization/br.inc +++ b/plugins/archive/localization/br.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/bs_BA.inc b/plugins/archive/localization/bs_BA.inc index 47d138ca52e..0e849d8939a 100644 --- a/plugins/archive/localization/bs_BA.inc +++ b/plugins/archive/localization/bs_BA.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/ca_ES.inc b/plugins/archive/localization/ca_ES.inc index 2fc7e5dbe4a..c62c9a9c92a 100644 --- a/plugins/archive/localization/ca_ES.inc +++ b/plugins/archive/localization/ca_ES.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/cs_CZ.inc b/plugins/archive/localization/cs_CZ.inc index ef26a09f3b4..a4cf7a946c9 100644 --- a/plugins/archive/localization/cs_CZ.inc +++ b/plugins/archive/localization/cs_CZ.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/cy_GB.inc b/plugins/archive/localization/cy_GB.inc index 8fa6c65df07..6397d907e27 100644 --- a/plugins/archive/localization/cy_GB.inc +++ b/plugins/archive/localization/cy_GB.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Mis (e.g. Archif/2012/06)'; $labels['archivetypefolder'] = 'Ffolder gwreiddiol'; $labels['archivetypesender'] = 'Ebost anfonwr'; $labels['unkownsender'] = 'anhysbys'; +$labels['readonarchive'] = 'Nodi\'r neges fel darllenwyd ar archif'; ?> diff --git a/plugins/archive/localization/da_DK.inc b/plugins/archive/localization/da_DK.inc index f3dedf8bfb3..e2790644a1e 100644 --- a/plugins/archive/localization/da_DK.inc +++ b/plugins/archive/localization/da_DK.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Måned (f.eks. Arkiv/2012/06)'; $labels['archivetypefolder'] = 'Original mappe'; $labels['archivetypesender'] = 'Afsenders email'; $labels['unkownsender'] = 'ukendt'; +$labels['readonarchive'] = 'Marker denne meddelelse som læst i arkivet'; ?> diff --git a/plugins/archive/localization/de_CH.inc b/plugins/archive/localization/de_CH.inc index 90ab3ad162b..979965bf2ed 100644 --- a/plugins/archive/localization/de_CH.inc +++ b/plugins/archive/localization/de_CH.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Monat (z.B. Archiv/2012/06)'; $labels['archivetypefolder'] = 'Originalordner'; $labels['archivetypesender'] = 'Absender'; $labels['unkownsender'] = 'unbekannt'; +$labels['readonarchive'] = 'Nachrichten beim Archivieren als gelesen markieren'; ?> diff --git a/plugins/archive/localization/de_DE.inc b/plugins/archive/localization/de_DE.inc index ee39acfcb9a..77df41f0d2c 100644 --- a/plugins/archive/localization/de_DE.inc +++ b/plugins/archive/localization/de_DE.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -18,7 +18,7 @@ $labels['buttontext'] = 'Archiv'; $labels['buttontitle'] = 'Nachricht archivieren'; $labels['archived'] = 'Nachricht erfolgreich archiviert'; -$labels['archivedreload'] = 'Erfolgreich archiviert. Seite aktualisieren um die neuen Archiv-Ordner zu sehen'; +$labels['archivedreload'] = 'Erfolgreich archiviert. Bitte die Seite aktualisieren, um die neuen Archivordner zu sehen.'; $labels['archiveerror'] = 'Einige Nachrichten konnten nicht archiviert werden'; $labels['archivefolder'] = 'Archiv'; $labels['settingstitle'] = 'Archiv'; @@ -26,6 +26,7 @@ $labels['archivetype'] = 'Archiv aufteilen nach'; $labels['archivetypeyear'] = 'Jahr (z.B. Archiv/2012)'; $labels['archivetypemonth'] = 'Monat (z.B. Archiv/2012/06)'; $labels['archivetypefolder'] = 'Originalordner'; -$labels['archivetypesender'] = 'Absender E-Mail'; +$labels['archivetypesender'] = 'Absender-E-Mail'; $labels['unkownsender'] = 'unbekannt'; +$labels['readonarchive'] = 'Nachricht im Archiv als gelesen markieren'; ?> diff --git a/plugins/archive/localization/el_GR.inc b/plugins/archive/localization/el_GR.inc index 4254a306d30..8b4ba339615 100644 --- a/plugins/archive/localization/el_GR.inc +++ b/plugins/archive/localization/el_GR.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/en_CA.inc b/plugins/archive/localization/en_CA.inc index 58cb7f4391a..06b78fb2aed 100644 --- a/plugins/archive/localization/en_CA.inc +++ b/plugins/archive/localization/en_CA.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/en_GB.inc b/plugins/archive/localization/en_GB.inc index 58cb7f4391a..06b78fb2aed 100644 --- a/plugins/archive/localization/en_GB.inc +++ b/plugins/archive/localization/en_GB.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/eo.inc b/plugins/archive/localization/eo.inc index bd0c2618c02..8b0105848c9 100644 --- a/plugins/archive/localization/eo.inc +++ b/plugins/archive/localization/eo.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/es_419.inc b/plugins/archive/localization/es_419.inc index 9bde4b1f778..4d469aa96a7 100644 --- a/plugins/archive/localization/es_419.inc +++ b/plugins/archive/localization/es_419.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/es_AR.inc b/plugins/archive/localization/es_AR.inc index 44e974c1909..a55afeae8db 100644 --- a/plugins/archive/localization/es_AR.inc +++ b/plugins/archive/localization/es_AR.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/es_ES.inc b/plugins/archive/localization/es_ES.inc index 75a80489f10..9d6ff9831ef 100644 --- a/plugins/archive/localization/es_ES.inc +++ b/plugins/archive/localization/es_ES.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Mes (p.ej. Archivo/2012/06)'; $labels['archivetypefolder'] = 'Bandeja original'; $labels['archivetypesender'] = 'Correo electrónico del remitente'; $labels['unkownsender'] = 'desconocido'; +$labels['readonarchive'] = 'Marcar el mensaje como leído al archivar'; ?> diff --git a/plugins/archive/localization/et_EE.inc b/plugins/archive/localization/et_EE.inc index aec89984aa4..c5c70547483 100644 --- a/plugins/archive/localization/et_EE.inc +++ b/plugins/archive/localization/et_EE.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/eu_ES.inc b/plugins/archive/localization/eu_ES.inc index c4f0e7b0eca..e8db2e16cfb 100644 --- a/plugins/archive/localization/eu_ES.inc +++ b/plugins/archive/localization/eu_ES.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/fa_AF.inc b/plugins/archive/localization/fa_AF.inc index fafccb5b8d8..347fdd675e8 100644 --- a/plugins/archive/localization/fa_AF.inc +++ b/plugins/archive/localization/fa_AF.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/fa_IR.inc b/plugins/archive/localization/fa_IR.inc index 1876708df80..e5f67700580 100644 --- a/plugins/archive/localization/fa_IR.inc +++ b/plugins/archive/localization/fa_IR.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/fi_FI.inc b/plugins/archive/localization/fi_FI.inc index 09142374dd7..5c1bc2779b1 100644 --- a/plugins/archive/localization/fi_FI.inc +++ b/plugins/archive/localization/fi_FI.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Kuukaudella (esim. Arkisto/2012/06)'; $labels['archivetypefolder'] = 'Alkuperäinen kansio'; $labels['archivetypesender'] = 'Lähettäjän osoite'; $labels['unkownsender'] = 'tuntematon'; +$labels['readonarchive'] = 'Merkitse viesti luetuksi arkistoon'; ?> diff --git a/plugins/archive/localization/fo_FO.inc b/plugins/archive/localization/fo_FO.inc index 2022b41dd06..b7921fbb43a 100644 --- a/plugins/archive/localization/fo_FO.inc +++ b/plugins/archive/localization/fo_FO.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/fr_FR.inc b/plugins/archive/localization/fr_FR.inc index 31d346cd5a2..76ee184c9ad 100644 --- a/plugins/archive/localization/fr_FR.inc +++ b/plugins/archive/localization/fr_FR.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Mois (ex. Archives/2012/06)'; $labels['archivetypefolder'] = 'Dossier original'; $labels['archivetypesender'] = 'Courriel de l\'expéditeur'; $labels['unkownsender'] = 'inconnu'; +$labels['readonarchive'] = 'Marquer le courriel comme lu lors de l\'archivage'; ?> diff --git a/plugins/archive/localization/gl_ES.inc b/plugins/archive/localization/gl_ES.inc index 7ce96a0dfbf..489e569057b 100644 --- a/plugins/archive/localization/gl_ES.inc +++ b/plugins/archive/localization/gl_ES.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/he_IL.inc b/plugins/archive/localization/he_IL.inc index e4e042652ad..06fe416f709 100644 --- a/plugins/archive/localization/he_IL.inc +++ b/plugins/archive/localization/he_IL.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'חודש ( לדוגמה, ארכיב/2012/96 )'; $labels['archivetypefolder'] = 'תיקיה מקורית'; $labels['archivetypesender'] = 'שולח ההודעה'; $labels['unkownsender'] = 'לא ידוע'; +$labels['readonarchive'] = 'יש לסמן את ההודעה בארכיב כאילו נקראה'; ?> diff --git a/plugins/archive/localization/hr_HR.inc b/plugins/archive/localization/hr_HR.inc index e6334cce0d4..4c8d1835d2f 100644 --- a/plugins/archive/localization/hr_HR.inc +++ b/plugins/archive/localization/hr_HR.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/hu_HU.inc b/plugins/archive/localization/hu_HU.inc index 799de16199f..c00b6b47d23 100644 --- a/plugins/archive/localization/hu_HU.inc +++ b/plugins/archive/localization/hu_HU.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Honap ( pl Arhívum/2012/06)'; $labels['archivetypefolder'] = 'Eredeti mappa'; $labels['archivetypesender'] = 'Feladó'; $labels['unkownsender'] = 'ismeretlen'; +$labels['readonarchive'] = 'Üzenet olvasottként jelölése arhiváláskor'; ?> diff --git a/plugins/archive/localization/hy_AM.inc b/plugins/archive/localization/hy_AM.inc index 47fc8d6f686..adadb3b8364 100644 --- a/plugins/archive/localization/hy_AM.inc +++ b/plugins/archive/localization/hy_AM.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/ia.inc b/plugins/archive/localization/ia.inc index 3f0cb5707a0..aa0d43200f0 100644 --- a/plugins/archive/localization/ia.inc +++ b/plugins/archive/localization/ia.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/id_ID.inc b/plugins/archive/localization/id_ID.inc index 0fa59ae7182..8b5192f4ebf 100644 --- a/plugins/archive/localization/id_ID.inc +++ b/plugins/archive/localization/id_ID.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Bulan (contoh: Arsip/2012/06)'; $labels['archivetypefolder'] = 'Folder asli'; $labels['archivetypesender'] = 'Email pengirim'; $labels['unkownsender'] = 'Tidak dikenal'; +$labels['readonarchive'] = 'Tandai pesan telah dibaca di arsip'; ?> diff --git a/plugins/archive/localization/it_IT.inc b/plugins/archive/localization/it_IT.inc index 3f41372edc1..63f72aea04f 100644 --- a/plugins/archive/localization/it_IT.inc +++ b/plugins/archive/localization/it_IT.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Mese (es. Archivio/2012/06)'; $labels['archivetypefolder'] = 'Cartella di origine'; $labels['archivetypesender'] = 'Mittente email'; $labels['unkownsender'] = 'sconosciuto'; +$labels['readonarchive'] = 'Segna i messaggi in archivio come letti'; ?> diff --git a/plugins/archive/localization/ja_JP.inc b/plugins/archive/localization/ja_JP.inc index c9454be1881..8c894caae01 100644 --- a/plugins/archive/localization/ja_JP.inc +++ b/plugins/archive/localization/ja_JP.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = '月 (e.g. アーカイブ/2012/06)'; $labels['archivetypefolder'] = '元のフォルダー'; $labels['archivetypesender'] = '電子メールの送信者'; $labels['unkownsender'] = '不明'; +$labels['readonarchive'] = 'アーカイブでメッセージを既読に設定'; ?> diff --git a/plugins/archive/localization/km_KH.inc b/plugins/archive/localization/km_KH.inc index ab2e5e2cc73..24fe023577d 100644 --- a/plugins/archive/localization/km_KH.inc +++ b/plugins/archive/localization/km_KH.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/ko_KR.inc b/plugins/archive/localization/ko_KR.inc index 1abd2bc9e74..0e12389b415 100644 --- a/plugins/archive/localization/ko_KR.inc +++ b/plugins/archive/localization/ko_KR.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = '월 (예: 보관/2012/06)'; $labels['archivetypefolder'] = '원본 폴더'; $labels['archivetypesender'] = '발송자 이메일'; $labels['unkownsender'] = '알 수 없음'; +$labels['readonarchive'] = '편지 보관함에서 메시지를 읽음으로 표시'; ?> diff --git a/plugins/archive/localization/ku.inc b/plugins/archive/localization/ku.inc index efb31e46b63..0173c796143 100644 --- a/plugins/archive/localization/ku.inc +++ b/plugins/archive/localization/ku.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/ku_IQ.inc b/plugins/archive/localization/ku_IQ.inc index 838ed8439f8..1408ac072ad 100644 --- a/plugins/archive/localization/ku_IQ.inc +++ b/plugins/archive/localization/ku_IQ.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/lb_LU.inc b/plugins/archive/localization/lb_LU.inc index ac16cfea7ee..b72b185e7f7 100644 --- a/plugins/archive/localization/lb_LU.inc +++ b/plugins/archive/localization/lb_LU.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/lt_LT.inc b/plugins/archive/localization/lt_LT.inc index fdcf34336d3..2448596a204 100644 --- a/plugins/archive/localization/lt_LT.inc +++ b/plugins/archive/localization/lt_LT.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/lv_LV.inc b/plugins/archive/localization/lv_LV.inc index 5215786b23a..0bd04740a2a 100644 --- a/plugins/archive/localization/lv_LV.inc +++ b/plugins/archive/localization/lv_LV.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/ml_IN.inc b/plugins/archive/localization/ml_IN.inc index 047223f8365..2e0d010dfba 100644 --- a/plugins/archive/localization/ml_IN.inc +++ b/plugins/archive/localization/ml_IN.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/mn_MN.inc b/plugins/archive/localization/mn_MN.inc index 9b33df6b41a..7db80f15dc0 100644 --- a/plugins/archive/localization/mn_MN.inc +++ b/plugins/archive/localization/mn_MN.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/mr_IN.inc b/plugins/archive/localization/mr_IN.inc index 96ecbc26ba2..4e542881ba4 100644 --- a/plugins/archive/localization/mr_IN.inc +++ b/plugins/archive/localization/mr_IN.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/nb_NO.inc b/plugins/archive/localization/nb_NO.inc index c0f193aa636..b78fdd977ff 100644 --- a/plugins/archive/localization/nb_NO.inc +++ b/plugins/archive/localization/nb_NO.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/nl_NL.inc b/plugins/archive/localization/nl_NL.inc index edec9676176..e1bc1bc896e 100644 --- a/plugins/archive/localization/nl_NL.inc +++ b/plugins/archive/localization/nl_NL.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/nn_NO.inc b/plugins/archive/localization/nn_NO.inc index d4279c7cbeb..5849b7bafa3 100644 --- a/plugins/archive/localization/nn_NO.inc +++ b/plugins/archive/localization/nn_NO.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/pl_PL.inc b/plugins/archive/localization/pl_PL.inc index 9d066e51822..35c9ea9d2ad 100644 --- a/plugins/archive/localization/pl_PL.inc +++ b/plugins/archive/localization/pl_PL.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Miesiąca (np. Archiwum/2012/06)'; $labels['archivetypefolder'] = 'Oryginalny folder'; $labels['archivetypesender'] = 'E-mail nadawcy'; $labels['unkownsender'] = 'nieznany'; +$labels['readonarchive'] = 'Podczas archiwizowania oznacz wiadomość jako przeczytaną'; ?> diff --git a/plugins/archive/localization/pt_BR.inc b/plugins/archive/localization/pt_BR.inc index b819ad2d3a1..a5b198b7c3a 100644 --- a/plugins/archive/localization/pt_BR.inc +++ b/plugins/archive/localization/pt_BR.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Mês (isto é, Arquivo/2012/06)'; $labels['archivetypefolder'] = 'Pasta original'; $labels['archivetypesender'] = 'E-mail do remetente'; $labels['unkownsender'] = 'desconhecido'; +$labels['readonarchive'] = 'Marcar a mensagem como lida ao arquivar'; ?> diff --git a/plugins/archive/localization/pt_PT.inc b/plugins/archive/localization/pt_PT.inc index a2a3e20de8c..bbcdeb7c450 100644 --- a/plugins/archive/localization/pt_PT.inc +++ b/plugins/archive/localization/pt_PT.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Mês (ex. Arquivo/2012/06)'; $labels['archivetypefolder'] = 'Pasta original'; $labels['archivetypesender'] = 'E-mail do remetente'; $labels['unkownsender'] = 'desconhecido'; +$labels['readonarchive'] = 'Marcar a mensagem como lida ao arquivar'; ?> diff --git a/plugins/archive/localization/ro_RO.inc b/plugins/archive/localization/ro_RO.inc index 6cd9df5ee3a..632b5bcbfab 100644 --- a/plugins/archive/localization/ro_RO.inc +++ b/plugins/archive/localization/ro_RO.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/ru_RU.inc b/plugins/archive/localization/ru_RU.inc index b3058b62e2e..5da94122e06 100644 --- a/plugins/archive/localization/ru_RU.inc +++ b/plugins/archive/localization/ru_RU.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Месяц (например, Архив/2012/06) $labels['archivetypefolder'] = 'Исходная папка'; $labels['archivetypesender'] = 'Адрес отправителя'; $labels['unkownsender'] = 'неизвестно'; +$labels['readonarchive'] = 'Помечать как прочитанное при архивировании'; ?> diff --git a/plugins/archive/localization/si_LK.inc b/plugins/archive/localization/si_LK.inc index 24f49ab4f62..a6807f534f8 100644 --- a/plugins/archive/localization/si_LK.inc +++ b/plugins/archive/localization/si_LK.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/sk_SK.inc b/plugins/archive/localization/sk_SK.inc index 79506f650c7..b4c527f60f9 100644 --- a/plugins/archive/localization/sk_SK.inc +++ b/plugins/archive/localization/sk_SK.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'mesiacoch (napríklad Archív/2012/06)'; $labels['archivetypefolder'] = 'Pôvodný priečinok'; $labels['archivetypesender'] = 'E-mailová adresa odosielateľa'; $labels['unkownsender'] = 'neznámy'; +$labels['readonarchive'] = 'Pri archivovaní označiť správu ako prečítanú'; ?> diff --git a/plugins/archive/localization/sl_SI.inc b/plugins/archive/localization/sl_SI.inc index 60d772591e7..a270380742a 100644 --- a/plugins/archive/localization/sl_SI.inc +++ b/plugins/archive/localization/sl_SI.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Mesec (npr. Arhiv/2012/06)'; $labels['archivetypefolder'] = 'Izvorna mapa'; $labels['archivetypesender'] = 'Naslov pošiljatelja'; $labels['unkownsender'] = 'neznan'; +$labels['readonarchive'] = 'Ob arhiviranju označi sporočilo kot prebrano'; ?> diff --git a/plugins/archive/localization/sq_AL.inc b/plugins/archive/localization/sq_AL.inc index 5989cfb3d4e..d98e4f541d5 100644 --- a/plugins/archive/localization/sq_AL.inc +++ b/plugins/archive/localization/sq_AL.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -15,5 +15,18 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ */ -$labels['archivetypeyear'] = 'Viti (p.sh. Arkiv/2012)'; +$labels['buttontext'] = 'Arkivoje'; +$labels['buttontitle'] = 'Arkivoje këtë mesazh'; +$labels['archived'] = 'U arkivua me sukses'; +$labels['archivedreload'] = 'U arkivua me sukses. Ringarkoni faqen që të shihni dosjet e reja arkiv.'; +$labels['archiveerror'] = 'Ca nga mesazhet s’u arkivuan dot'; +$labels['archivefolder'] = 'Arkivoje'; +$labels['settingstitle'] = 'Arkivoje'; +$labels['archivetype'] = 'Ndaje arkivin sipas'; +$labels['archivetypeyear'] = 'Vit (p.sh. Arkiv/2012)'; +$labels['archivetypemonth'] = 'Muaj (p.sh. Arkiv/2012/06)'; +$labels['archivetypefolder'] = 'Dosje origjinale'; +$labels['archivetypesender'] = 'Email dërguesi'; +$labels['unkownsender'] = 'e panjohur'; +$labels['readonarchive'] = 'I vini shenjë si të lexuar mesazhit në arkiv'; ?> diff --git a/plugins/archive/localization/sr_CS.inc b/plugins/archive/localization/sr_CS.inc index 25ff3eaadb5..a4c86a818e1 100644 --- a/plugins/archive/localization/sr_CS.inc +++ b/plugins/archive/localization/sr_CS.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/sv_SE.inc b/plugins/archive/localization/sv_SE.inc index 361b7b6d947..6f6683a8a53 100644 --- a/plugins/archive/localization/sv_SE.inc +++ b/plugins/archive/localization/sv_SE.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Månad (ex. Arkiv/2012/06)'; $labels['archivetypefolder'] = 'Ursprunglig katalog'; $labels['archivetypesender'] = 'Avsändaradress'; $labels['unkownsender'] = 'Okänd'; +$labels['readonarchive'] = 'Märk meddelande som läst vid arkivering'; ?> diff --git a/plugins/archive/localization/tr_TR.inc b/plugins/archive/localization/tr_TR.inc index 8ba2a892568..b1be16c6082 100644 --- a/plugins/archive/localization/tr_TR.inc +++ b/plugins/archive/localization/tr_TR.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -15,17 +15,18 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ */ -$labels['buttontext'] = 'Arşiv'; -$labels['buttontitle'] = 'Bu postayı arşivle'; -$labels['archived'] = 'Arşivleme başarılı.'; -$labels['archivedreload'] = 'Arşivleme başarılı. Yeni arşiv dosyalarını görmek için sayfayı yenileyin.'; -$labels['archiveerror'] = 'Bazı mesajlar arşivlenemedi.'; +$labels['buttontext'] = 'Arşivle'; +$labels['buttontitle'] = 'Bu iletiyi arşivle'; +$labels['archived'] = 'Arşivlendi.'; +$labels['archivedreload'] = 'Arşivlendi. Yeni arşiv klasörlerini görmek için sayfayı yenileyin.'; +$labels['archiveerror'] = 'Bazı iletiler arşivlenemedi'; $labels['archivefolder'] = 'Arşiv'; $labels['settingstitle'] = 'Arşiv'; -$labels['archivetype'] = 'Arşivi bununla böl'; +$labels['archivetype'] = 'Arşivleme şuna göre yapılsın'; $labels['archivetypeyear'] = 'Yıl (Arşiv/2012)'; -$labels['archivetypemonth'] = 'Ay(Arşiv/2012/06)'; +$labels['archivetypemonth'] = 'Ay (Arşiv/2012/06)'; $labels['archivetypefolder'] = 'Özgün dosya'; -$labels['archivetypesender'] = 'E-Posta Göndericisi'; +$labels['archivetypesender'] = 'Gönderici adresi'; $labels['unkownsender'] = 'bilinmeyen'; +$labels['readonarchive'] = 'Arşivdeki ileti okunmuş olarak işaretlensin'; ?> diff --git a/plugins/archive/localization/tzl.inc b/plugins/archive/localization/tzl.inc index 6ae1b67d01e..e07f31da9ee 100644 --- a/plugins/archive/localization/tzl.inc +++ b/plugins/archive/localization/tzl.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/uk_UA.inc b/plugins/archive/localization/uk_UA.inc index e6b6461821e..c669bfadbfc 100644 --- a/plugins/archive/localization/uk_UA.inc +++ b/plugins/archive/localization/uk_UA.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -28,4 +28,5 @@ $labels['archivetypemonth'] = 'Місяць (наприклад Архів/2012/ $labels['archivetypefolder'] = 'Оригінальна тека'; $labels['archivetypesender'] = 'Відправник email'; $labels['unkownsender'] = 'невідомо'; +$labels['readonarchive'] = 'Позначити повідомлення як прочитане по архіву'; ?> diff --git a/plugins/archive/localization/vi_VN.inc b/plugins/archive/localization/vi_VN.inc index b2fe3899a89..219f9ddf7a9 100644 --- a/plugins/archive/localization/vi_VN.inc +++ b/plugins/archive/localization/vi_VN.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/zh_CN.inc b/plugins/archive/localization/zh_CN.inc index 89837c14128..24fbbf4e3a9 100644 --- a/plugins/archive/localization/zh_CN.inc +++ b/plugins/archive/localization/zh_CN.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/archive/localization/zh_TW.inc b/plugins/archive/localization/zh_TW.inc index a50ef284555..ae4b779e5d1 100644 --- a/plugins/archive/localization/zh_TW.inc +++ b/plugins/archive/localization/zh_TW.inc @@ -5,7 +5,7 @@ | plugins/archive/localization/.inc | | | | Localization file of the Roundcube Webmail Archive plugin | - | Copyright (C) 2013, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | diff --git a/plugins/attachment_reminder/localization/sq_AL.inc b/plugins/attachment_reminder/localization/sq_AL.inc new file mode 100644 index 00000000000..aadc33d9933 --- /dev/null +++ b/plugins/attachment_reminder/localization/sq_AL.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Mos harruat të bashkëngjitni një kartelë?"; +$messages['reminderoption'] = "Kujtoji për bashkëngjitje të harruara"; +$messages['keywords'] = "bashkëngjitje,skedar,kartelë,bashkëngjite,bashkëngjitur,përfshirë,CV,letër shoqëruese"; diff --git a/plugins/attachment_reminder/localization/tr_TR.inc b/plugins/attachment_reminder/localization/tr_TR.inc index 6d0d5c02724..c96e2f5c98c 100644 --- a/plugins/attachment_reminder/localization/tr_TR.inc +++ b/plugins/attachment_reminder/localization/tr_TR.inc @@ -16,5 +16,5 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ */ $messages['forgotattachment'] = "Dosya eklemeyi mi unuttunuz?"; -$messages['reminderoption'] = "Dosya ek(ler)i unutulduysa hatırlat."; +$messages['reminderoption'] = "Dosya ekleme unutulduysa hatırlatılsın"; $messages['keywords'] = "ekleme,dosya,ek,eklenildi,ekleniliyor,ekteki,CV,mektup"; diff --git a/plugins/enigma/localization/bg_BG.inc b/plugins/enigma/localization/bg_BG.inc index b78f078643a..3b0e81c5845 100644 --- a/plugins/enigma/localization/bg_BG.inc +++ b/plugins/enigma/localization/bg_BG.inc @@ -80,6 +80,9 @@ $labels['attachpubkeymsg'] = 'Прикрепи моя публичен ключ' $labels['keyexportprompt'] = 'Желаете ли да включите секретните ключове в записания OpenPGP файл?'; $labels['onlypubkeys'] = 'Експорт само на Публичните ключове'; $labels['withprivkeys'] = 'Експорт на Секретни ключове'; +$labels['findkey'] = 'Търси на сървъри за ключове'; +$labels['keyimportlabel'] = 'Импорт от файл'; +$labels['keyimportsearchlabel'] = 'Търси на сървъри за ключове'; $messages['sigvalid'] = 'Верифициран подпис от $sender.'; $messages['sigvalidpartial'] = 'Верифициран подпис от $sender, но част от съдържанието на писмото не е било подписано'; $messages['siginvalid'] = 'Невалиден подпис от $sender.'; @@ -89,16 +92,15 @@ $messages['sigerror'] = 'Неверифициран подпис. Вътрешн $messages['decryptok'] = 'Писмото е декриптирано.'; $messages['decrypterror'] = 'Невъзможно декриптиране.'; $messages['decryptnokey'] = 'Невъзможно декриптиране. Частният ключ не е намерен. Ключ с ИН $keyid.'; -$messages['decryptbadpass'] = 'Невъзможно декриптиране. Грешна парола.'; $messages['decryptnopass'] = 'Невъзможно декриптиране. Паролата на частния ключ е задължителна.'; $messages['decryptpartial'] = 'Писмото е декриптирано, но част от съдържанието му не е било защитено с криптиране.'; $messages['signerror'] = 'Невъзможно подписване.'; $messages['signnokey'] = 'Невъзможно подписване. Частният ключ не е намерен.'; -$messages['signbadpass'] = 'Невъзможно подписване. Грешна парола.'; $messages['signnopass'] = 'Невъзможно подписване. Паролата на частния ключ е задължителна.'; $messages['encrypterror'] = 'Невъзможно криптиране.'; $messages['encryptnokey'] = 'Невъзможно криптиране. Публичният ключ не е намерен за $email.'; $messages['nokeysfound'] = 'Не са намерени ключове'; +$messages['keynotfound'] = 'Ключът не е намерен!'; $messages['keyopenerror'] = 'Невъзможно получаване на информация за ключа! Вътрешна грешка.'; $messages['keylisterror'] = 'Невъзможно получаване на ключове! Вътрешна грешка.'; $messages['keysimportfailed'] = 'Невъзможно импортиране на ключове! Вътрешна грешка.'; @@ -108,10 +110,12 @@ $messages['keyremoveconfirm'] = 'Желаете ли да изтриете из $messages['keyremovesuccess'] = 'Ключовете са изтрити успешно.'; $messages['keyremoveerror'] = 'Невъзможно изтриване на ключове.'; $messages['keyimporttext'] = 'Можете да импортирате частни и публични ключове или сигнатури за отмяна в ASCII-Armor формат.'; +$messages['keyimportsearchtext'] = 'Можете да търсите публични ключове по идентификатор, потребитлско име или адрес на ел. поща, след което директно да ги импортирате.'; $messages['formerror'] = 'Моля попълнете формата. Всички полета са задължителни!'; $messages['passwordsdiffer'] = 'Паролите не съвпадат!'; -$messages['nonameident'] = 'Самоличността трябва да има дефинирано потребителско име!'; $messages['keygenerateerror'] = 'Невъзможно генериране на ключова двойка'; $messages['keygeneratesuccess'] = 'Ключовата двойка е генерирана и импортирана успешно.'; $messages['keygennosupport'] = 'Вашият браузър не поддържа нужните криптографски методи. Невъзможно генериране на ключова двойка.'; +$messages['noidentselected'] = 'Трябва да избере поне една самоличност за този ключ!'; +$messages['nonameident'] = 'Самоличността трябва да има дефинирано потребителско име!'; ?> diff --git a/plugins/enigma/localization/br.inc b/plugins/enigma/localization/br.inc index b5de0e1017d..3273c1acfc9 100644 --- a/plugins/enigma/localization/br.inc +++ b/plugins/enigma/localization/br.inc @@ -90,12 +90,10 @@ $messages['sigerror'] = 'Sinadur amwiriet. Fazi diabarzh.'; $messages['decryptok'] = 'Kemennadenn ezrineget.'; $messages['decrypterror'] = 'Ezrinegañ c\'hwitet.'; $messages['decryptnokey'] = 'Ezrinegañ c\'hwitet. Alc\'hwez prevez ebet kavet. Naoudi an alc\'hwez: $keyid.'; -$messages['decryptbadpass'] = 'Ezrinegañ c\'hwitet. Frazenn-dremen didalvoudek.'; $messages['decryptnopass'] = 'Ezrinegañ c\'hwitet. Frazenn-dremen azgoulennet.'; $messages['decryptpartial'] = 'Kemennadenn ezrineget, met ul lodenn eus ar c\'horf ne oa ket enrineget.'; $messages['signerror'] = 'Sinadur c\'hwitet.'; $messages['signnokey'] = 'Sinadur c\'hwitet. Alc\'hwez prevez ebet kavet.'; -$messages['signbadpass'] = 'Sinadur c\'hwitet. Frazenn-dremen didalvoudek.'; $messages['signnopass'] = 'Sinadur c\'hwitet. Frazenn-dremen azgoulennet.'; $messages['encrypterror'] = 'Enrinegañ c\'hwitet.'; $messages['encryptnokey'] = 'Enrinegañ c\'hwitet. N\'eo ket bet kavet an alc\'hwez foran evit $email.'; @@ -112,8 +110,8 @@ $messages['keyremoveerror'] = 'N\'haller ket dilemel an alc\'hwez(ioù) diuzet.' $messages['keyimporttext'] = 'Gallout a rit enporzhiañ alc\'hwez(ioù) foran ha prevez pe sinadurioù dizorniañ er mentrezh ASCII-Armor.'; $messages['formerror'] = 'Ret eo leuniañ ar furmskrid. An holl vaeziennoù a zo dleet!'; $messages['passwordsdiffer'] = 'Ne glot ket ar gerioù-tremen!'; -$messages['nonameident'] = 'Ret eo d\'ar pivelezh kaout un anv arveriad despizet!'; $messages['keygenerateerror'] = 'C\'hwitadenn war ganedigezh un daouad alc\'hwezhioù'; $messages['keygeneratesuccess'] = 'Ganet hag enporzhiet eo bet un daouad alc\'hwezioù gant berzh. '; $messages['keygennosupport'] = 'N\'eo ket skoret an enrinegañ gant ho merdeer web. N\'haller ket genel un alc\'hwez nevez.'; +$messages['nonameident'] = 'Ret eo d\'ar pivelezh kaout un anv arveriad despizet!'; ?> diff --git a/plugins/enigma/localization/cs_CZ.inc b/plugins/enigma/localization/cs_CZ.inc index 83a0d20a9cf..09d3b823c9e 100644 --- a/plugins/enigma/localization/cs_CZ.inc +++ b/plugins/enigma/localization/cs_CZ.inc @@ -75,7 +75,13 @@ $labels['signmsg'] = 'Digitálně podepsat tuto zprávu'; $labels['enterkeypasstitle'] = 'Zadejte heslo pro klíč'; $labels['enterkeypass'] = 'Heslo je nutné k odemknutí soukromého klíče ($keyid) pro uživatele: $user.'; $labels['arialabelkeyexportoptions'] = 'Možnosti pro export klíčů'; +$labels['attachpubkeymsg'] = 'Připojit můj veřejný klíč'; +$labels['onlypubkeys'] = 'Exportovat pouze veřejné klíče'; +$labels['withprivkeys'] = 'Exportovat soukromé klíče'; +$labels['keyimportlabel'] = 'Importovat ze souboru'; +$labels['keyimportsearchlabel'] = 'Hledat klíč na keyserveru'; $messages['sigvalid'] = 'Ověřený podpis od $sender.'; +$messages['sigvalidpartial'] = 'Ověřený podpis od $sender, ale část těla není podepsána.'; $messages['siginvalid'] = 'Nesprávný podpis od $sender.'; $messages['sigunverified'] = 'Neověřený podpis. Certifikát není ověřen. ID certifikátu: $keyid.'; $messages['signokey'] = 'Neověřený podpis. Veřejný klíč nebyl nalezen. ID klíče: $keyid.'; @@ -83,15 +89,14 @@ $messages['sigerror'] = 'Neověřený podpis. Interní chyba.'; $messages['decryptok'] = 'Zpráva byla dešifrována.'; $messages['decrypterror'] = 'Dešifrování selhalo.'; $messages['decryptnokey'] = 'Dešifrování selhalo. Veřejný klíč nebyl nalezen. ID klíče: $keyid.'; -$messages['decryptbadpass'] = 'Dešifrování selhalo. Špatné heslo.'; $messages['decryptnopass'] = 'Dešifrování selhalo. Heslo pro klíč je požadováno.'; $messages['signerror'] = 'Podepisování selhalo.'; $messages['signnokey'] = 'Podepisování selhalo. Soukromý klíč nebyl nalezen.'; -$messages['signbadpass'] = 'Podepisování selhalo. Špatné heslo.'; $messages['signnopass'] = 'Podepisování selhalo. Heslo pro klíč je požadováno.'; $messages['encrypterror'] = 'Šifrování selhalo.'; $messages['encryptnokey'] = 'Šifrování selhalo. Veřejný klíč pro email $email nebyl nalezen.'; $messages['nokeysfound'] = 'Nebyly nalezeny žádné klíče.'; +$messages['keynotfound'] = 'Klíč nebyl nalezen!'; $messages['keyopenerror'] = 'Nemohu dostat informace o klíči! Interní chyba.'; $messages['keylisterror'] = 'Nemohu získat seznam klíčů! Interní chyba.'; $messages['keysimportfailed'] = 'Nemohu importovat klíč(e)! Interní chyba.'; @@ -103,8 +108,8 @@ $messages['keyremoveerror'] = 'Nemohu smazat vybraný/é klíč(e).'; $messages['keyimporttext'] = 'Můžete naimportovat soukromý/é a veřejný/é klíč(e) nebo podpisy pro revokaci ve formátu ASCII-Armor.'; $messages['formerror'] = 'Prosím vyplňte tento formulář. Všechna pole jsou požadována.'; $messages['passwordsdiffer'] = 'Zadaná hesla se neshodují!'; -$messages['nonameident'] = 'Identita musí mít definované uživatelské jméno.'; $messages['keygenerateerror'] = 'Selhalo generování páru klíčů'; $messages['keygeneratesuccess'] = 'Pár klíčů byl úspěšně vygenerován a naimportován.'; $messages['keygennosupport'] = 'Váš webový prohlížeč nepodporuje kryptografii. Nemohu vygenerovat pár klíčů.'; +$messages['nonameident'] = 'Identita musí mít definované uživatelské jméno.'; ?> diff --git a/plugins/enigma/localization/cy_GB.inc b/plugins/enigma/localization/cy_GB.inc index 55671289295..8e19af86381 100644 --- a/plugins/enigma/localization/cy_GB.inc +++ b/plugins/enigma/localization/cy_GB.inc @@ -81,6 +81,8 @@ $labels['keyexportprompt'] = 'Ydych eisiau cynnwys allweddi cyfrinachol yn y ffe $labels['onlypubkeys'] = 'Allforio Allweddi Cyhoeddus yn unig'; $labels['withprivkeys'] = 'Allforio Allweddi Cyfrinachol'; $labels['findkey'] = 'Chwilio ar weinydd(wyr) allweddi'; +$labels['keyimportlabel'] = 'Mewnforio o ffeil'; +$labels['keyimportsearchlabel'] = 'Chwilio ar weinydd(wyr) allweddi'; $messages['sigvalid'] = 'Llofnod wedi ddilysu o $sender.'; $messages['sigvalidpartial'] = 'Llofnod wedi ddilysu o $sender, ond ni arwyddywyd rhan o gorff y neges'; $messages['siginvalid'] = 'Llofnod annilys o $sender.'; @@ -90,12 +92,10 @@ $messages['sigerror'] = 'Llofnod heb ei ddilysu. Gwall mewnol.'; $messages['decryptok'] = 'Neges wedi ei ddadgryptio.'; $messages['decrypterror'] = 'Dadgryptio wedi methu.'; $messages['decryptnokey'] = 'Dadgryptio wedi methu. Allwedd breifat heb ei ganfod: ID Allwedd: $keyid.'; -$messages['decryptbadpass'] = 'Dadgryptio wedi methu. Cyfrinair anghywir.'; $messages['decryptnopass'] = 'Dadgryptio wedi methu. Mae angen cyfrinair.'; $messages['decryptpartial'] = 'Dadgryptiwyd y neges, ond roedd darn o gorff y neges heb ei amgryptio'; $messages['signerror'] = 'Llofnodi wedi methu.'; $messages['signnokey'] = 'Llofnodi wedi methu. Allwedd breifat heb ei ganfod.'; -$messages['signbadpass'] = 'Llofnodi wedi methu. Cyfrinair anghywir.'; $messages['signnopass'] = 'Llofnodi wedi methu. Mae angen cyfrinair.'; $messages['encrypterror'] = 'Amgryptio wedi methu.'; $messages['encryptnokey'] = 'Amgryptio wedi methu. Allwedd cyhoeddus heb ei ganfod ar gyfer $email.'; @@ -110,10 +110,12 @@ $messages['keyremoveconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu yr allwedd $messages['keyremovesuccess'] = 'Allwedd(i) wedi ei dileu yn llwyddiannus'; $messages['keyremoveerror'] = 'Methwyd dileu yr allwedd(i) dewiswyd.'; $messages['keyimporttext'] = 'Fe allwch chi mewnforio allwedd(i) preifat a chyhoeddus neu lofnodion pallu mewn fformat ASCII-Armor.'; +$messages['keyimportsearchtext'] = 'Gallwch chwilio am allweddi cyhoeddus yn ol adnabydd allwedd, enw defnyddiwr neu gyfeiriad ebost ac yna eu mewnforio yn uniongyrchol.'; $messages['formerror'] = 'Llenwch y ffurflen os gwelwch yn dda. Mae angen llenwi pob maes!'; $messages['passwordsdiffer'] = 'Nid yw\'r cyfrineiriau yn cyfateb!'; -$messages['nonameident'] = 'Rhaid i\'r personoliaeth gael enw defnyddiwr wedi ei ddiffinio!'; $messages['keygenerateerror'] = 'Methwyd creu pâr allweddi'; $messages['keygeneratesuccess'] = 'Creuwyd a mewnforiwyd pâr allweddi yn llwyddiannus.'; $messages['keygennosupport'] = 'Nid yw\'ch porwr gwe yn cefnogi amgryptio. Methwyd creu pâr allweddi!'; +$messages['noidentselected'] = 'Rhaid i chi ddewis o leiaf un hunaniaeth i\'r allwedd!'; +$messages['nonameident'] = 'Rhaid i\'r personoliaeth gael enw defnyddiwr wedi ei ddiffinio!'; ?> diff --git a/plugins/enigma/localization/da_DK.inc b/plugins/enigma/localization/da_DK.inc index 317efe55051..7349e315ea1 100644 --- a/plugins/enigma/localization/da_DK.inc +++ b/plugins/enigma/localization/da_DK.inc @@ -18,4 +18,5 @@ $labels['keyname'] = 'Navn'; $labels['fingerprint'] = 'Fingeravtryk'; $labels['typeencrypt'] = 'Krypter'; +$labels['subkeyid'] = 'ID'; ?> diff --git a/plugins/enigma/localization/de_CH.inc b/plugins/enigma/localization/de_CH.inc index bbf65599ebd..1169ef04fc9 100644 --- a/plugins/enigma/localization/de_CH.inc +++ b/plugins/enigma/localization/de_CH.inc @@ -86,16 +86,15 @@ $messages['sigerror'] = 'Unbestätigte Signatur. Interner Fehler.'; $messages['decryptok'] = 'Nachricht entschlüsselt.'; $messages['decrypterror'] = 'Entschlüsselung fehlgeschlagen.'; $messages['decryptnokey'] = 'Entschlüsselung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden. Schlüssel-ID: $keyid.'; -$messages['decryptbadpass'] = 'Entschlüsselung fehlgeschlagen. Falsches Passwort.'; $messages['decryptnopass'] = 'Entschlüsselung fehlgeschlagen. Schlüsselpasswort wird benötigt.'; $messages['decryptpartial'] = 'Nachricht entschlüsselt, aber ein Teil der Nachricht wurde nicht verschlüsselt.'; $messages['signerror'] = 'Signierung fehlgeschlagen.'; $messages['signnokey'] = 'Signierung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden.'; -$messages['signbadpass'] = 'Signierung fehlgeschlagen. Falsches Passwort.'; $messages['signnopass'] = 'Signierung fehlgeschlagen. Schlüsselpasswort wird benötigt.'; $messages['encrypterror'] = 'Verschlüsselung fehlgeschlagen.'; $messages['encryptnokey'] = 'Verschlüsselung fehlgeschlagen. Öffentlicehr Schlüssel für $email nicht gefunden'; $messages['nokeysfound'] = 'Keine Schlüssel gefunden'; +$messages['keynotfound'] = 'Schlüssel nicht gefunden!'; $messages['keyopenerror'] = 'Abrufen der Schlüsselinformationen nicht möglich. Interner Fehler.'; $messages['keylisterror'] = 'Auflisten der Schlüsselinformationen nicht möglich! Interner Fehler.'; $messages['keysimportfailed'] = 'Schlüsselimport fehlgeschlagen! Interner Fehler.'; @@ -107,8 +106,8 @@ $messages['keyremoveerror'] = 'Löschung der Schlüssel nicht möglich.'; $messages['keyimporttext'] = 'Private und öffentliche Schlüssel sowie zurückgerufene Signaturen können im ASCII-Armor Format importiert werden.'; $messages['formerror'] = 'Bitte, alle Eingabefelder ausfüllen. Alle Eingabefelder werden benötigt!'; $messages['passwordsdiffer'] = 'Passwörter stimmen nicht überein.'; -$messages['nonameident'] = 'Identität muss einen Benutzernamen definiert haben.'; $messages['keygenerateerror'] = 'Schlüsselgenerierung fehlgeschlagen.'; $messages['keygeneratesuccess'] = 'Schlüsselpaar erfolgreich generiert und importiert.'; $messages['keygennosupport'] = 'Dein Browser unterstützt keine Kryptopgraphiefunktionen. Konnte Schlüsselpaar nicht generieren!'; +$messages['nonameident'] = 'Identität muss einen Benutzernamen definiert haben.'; ?> diff --git a/plugins/enigma/localization/de_DE.inc b/plugins/enigma/localization/de_DE.inc index 189ae5d9a7f..441c7d7c487 100644 --- a/plugins/enigma/localization/de_DE.inc +++ b/plugins/enigma/localization/de_DE.inc @@ -16,26 +16,26 @@ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/ */ $labels['encryption'] = 'Verschlüsselung'; -$labels['enigmacerts'] = 'S/MIME Zertifikate'; -$labels['enigmakeys'] = 'PGP Schlüssel'; +$labels['enigmacerts'] = 'S/MIME-Zertifikate'; +$labels['enigmakeys'] = 'PGP-Schlüssel'; $labels['keysfromto'] = 'Schlüssel $from bis $to von $count'; $labels['keyname'] = 'Schlüssel'; -$labels['keyid'] = 'Schlüssel ID'; -$labels['keyuserid'] = 'Benutzer ID'; +$labels['keyid'] = 'Schlüsselkennung'; +$labels['keyuserid'] = 'Benutzerkennung'; $labels['keytype'] = 'Schlüsseltyp'; -$labels['fingerprint'] = 'Fingerprint'; -$labels['subkeys'] = 'Sub-Schlüssel'; +$labels['fingerprint'] = 'Fingerabdruck'; +$labels['subkeys'] = 'Unterschlüssel'; $labels['basicinfo'] = 'Allgemeine Informationen'; $labels['userids'] = 'Zusätzliche Benutzer'; $labels['typepublickey'] = 'Öffentlicher Schlüssel'; $labels['typekeypair'] = 'Schlüsselpaar'; -$labels['keyattfound'] = 'Diese Nachricht enthält angehängte PGP Schlüssel.'; +$labels['keyattfound'] = 'Diese Nachricht enthält angehängte PGP-Schlüssel.'; $labels['keyattimport'] = 'Schlüssel importieren'; $labels['typesign'] = 'Signieren'; $labels['typeencrypt'] = 'Verschlüsseln'; $labels['typecert'] = 'Bestätigen'; $labels['typeauth'] = 'Authentifizierung'; -$labels['subkeyid'] = 'Sub-Schlüssel ID'; +$labels['subkeyid'] = 'Kennung'; $labels['subkeyalgo'] = 'Algorithmus'; $labels['subkeycreated'] = 'Erstellt am'; $labels['subkeyexpires'] = 'Läuft aus'; @@ -43,7 +43,7 @@ $labels['subkeyusage'] = 'Verwendet für'; $labels['expiresnever'] = 'nie'; $labels['unknown'] = 'unbekannt'; $labels['uservalid'] = 'Gültigkeit'; -$labels['userid'] = 'ID'; +$labels['userid'] = 'Kennung'; $labels['valid'] = 'gültig'; $labels['supportencryption'] = 'Nachrichtenverschlüsselung und Signierung aktivieren'; $labels['supportsignatures'] = 'Verifizierung der Nachrichtensignatur aktivieren'; @@ -57,7 +57,7 @@ $labels['wholesession'] = 'die gesamte Sitzung'; $labels['createkeys'] = 'Neues Schlüsselpaar erstellen'; $labels['importkeys'] = 'Schlüssel importieren'; $labels['exportkeys'] = 'Schlüssel exportieren'; -$labels['keyactions'] = 'Aktionen...'; +$labels['keyactions'] = 'Aktionen …'; $labels['keyremove'] = 'Entfernen'; $labels['keydisable'] = 'Deaktivieren'; $labels['keyrevoke'] = 'Widerrufen'; @@ -67,14 +67,14 @@ $labels['newkeyident'] = 'Identität:'; $labels['newkeypass'] = 'Passwort:'; $labels['newkeypassconfirm'] = 'Passwort bestätigen:'; $labels['newkeysize'] = 'Schlüssellänge:'; -$labels['key2048'] = '2048 bits - standard'; -$labels['key4096'] = '4096 bits - sicher'; -$labels['keygenerating'] = 'Schlüssel generieren...'; +$labels['key2048'] = '2048 Bit - Vorgabe'; +$labels['key4096'] = '4096 Bit - mehr Sicherheit'; +$labels['keygenerating'] = 'Schlüssel werden erstellt …'; $labels['encryptionoptions'] = 'Verschlüsselungsoptionen'; $labels['encryptmsg'] = 'Diese Nachricht verschlüsseln'; $labels['signmsg'] = 'Diese Nachricht digital signieren'; -$labels['enterkeypasstitle'] = 'Bitte Schlüssel Passwort eingeben'; -$labels['enterkeypass'] = 'Ein Passwort wird benötigt um den privaten Schlüssel ($keyid) für Benutzer: $user zu entsperren'; +$labels['enterkeypasstitle'] = 'Bitte Schlüsselpasswort eingeben'; +$labels['enterkeypass'] = 'Ein Passwort wird benötigt, um den privaten Schlüssel ($keyid) für Benutzer »$user« zu entsperren.'; $labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport'; $labels['attachpubkeymsg'] = 'Meinen öffentlichen Schlüssel anfügen'; $labels['keyexportprompt'] = 'Möchten Sie geheime Schlüssel in die gespeicherte OpenPGP-Schlüsseldatei mit aufnehmen?'; @@ -86,37 +86,36 @@ $labels['keyimportsearchlabel'] = 'Auf Schlüsselserver(n) suchen'; $messages['sigvalid'] = 'Signatur von $sender wurde erfolgreich überprüft.'; $messages['sigvalidpartial'] = 'Signatur von $sender wurde überprüft, aber ein Teil der Nachricht wurde nicht signiert.'; $messages['siginvalid'] = 'Ungültige Signatur von $sender.'; -$messages['sigunverified'] = 'Unbestätigte Signatur. Zertifikat nicht überprüft. Zertifikat-ID: $keyid. '; -$messages['signokey'] = 'Unbestätigte Signatur. Öffentlicher Schlüssel wurde nicht gefunden. Schlüssel-ID: $keyid.'; +$messages['sigunverified'] = 'Unbestätigte Signatur. Zertifikat nicht überprüft. Zertifikatkennung: $keyid. '; +$messages['signokey'] = 'Unbestätigte Signatur. Öffentlicher Schlüssel wurde nicht gefunden. Schlüsselkennung: $keyid.'; $messages['sigerror'] = 'Unbestätigte Signatur. Interner Fehler.'; $messages['decryptok'] = 'Nachricht entschlüsselt.'; $messages['decrypterror'] = 'Entschlüsselung fehlgeschlagen.'; -$messages['decryptnokey'] = 'Entschlüsselung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden. Schlüssel-ID: $keyid.'; -$messages['decryptbadpass'] = 'Entschlüsselung fehlgeschlagen. Falsches Passwort.'; +$messages['decryptnokey'] = 'Entschlüsselung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden. Schlüsselkennung: $keyid.'; $messages['decryptnopass'] = 'Entschlüsselung fehlgeschlagen. Schlüsselpasswort wird benötigt.'; $messages['decryptpartial'] = 'Nachricht entschlüsselt, aber ein Teil der Nachricht wurde nicht verschlüsselt.'; $messages['signerror'] = 'Signierung fehlgeschlagen.'; $messages['signnokey'] = 'Signierung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden.'; -$messages['signbadpass'] = 'Signierung fehlgeschlagen. Falsches Passwort.'; $messages['signnopass'] = 'Signierung fehlgeschlagen. Schlüsselpasswort wird benötigt.'; $messages['encrypterror'] = 'Verschlüsselung fehlgeschlagen.'; -$messages['encryptnokey'] = 'Verschlüsselung fehlgeschlagen. Öffentlicehr Schlüssel für $email nicht gefunden'; +$messages['encryptnokey'] = 'Verschlüsselung fehlgeschlagen. Öffentlicher Schlüssel für $email nicht gefunden'; $messages['nokeysfound'] = 'Keine Schlüssel gefunden'; $messages['keynotfound'] = 'Schlüssel nicht gefunden!'; $messages['keyopenerror'] = 'Abrufen der Schlüsselinformationen nicht möglich. Interner Fehler.'; $messages['keylisterror'] = 'Auflisten der Schlüsselinformationen nicht möglich! Interner Fehler.'; $messages['keysimportfailed'] = 'Schlüsselimport fehlgeschlagen! Interner Fehler.'; $messages['keysimportsuccess'] = 'Schlüsselimport erfolgreich. Importiert: $new, unverändert: $old.'; -$messages['keyremoving'] = 'Schlüssel entfernen...'; -$messages['keyremoveconfirm'] = 'Bist du dir sicher, dass du die ausgewählten Schlüssel entfernen willst?'; +$messages['keyremoving'] = 'Schlüssel werden entfernt …'; +$messages['keyremoveconfirm'] = 'Sind Sie sich sicher, dass Sie die ausgewählten Schlüssel entfernen wollen?'; $messages['keyremovesuccess'] = 'Schlüssel erfolgreich gelöscht.'; $messages['keyremoveerror'] = 'Löschung der Schlüssel nicht möglich.'; $messages['keyimporttext'] = 'Private und öffentliche Schlüssel sowie zurückgerufene Signaturen können im ASCII-Armor Format importiert werden.'; $messages['keyimportsearchtext'] = 'Sie können für öffentliche Schlüssel nach dem Schlüsselbezeichner, Benutzername oder der E-Mail-Adresse suchen und diese dann direkt importieren.'; $messages['formerror'] = 'Bitte, alle Eingabefelder ausfüllen. Alle Eingabefelder werden benötigt!'; $messages['passwordsdiffer'] = 'Passwörter stimmen nicht überein.'; -$messages['nonameident'] = 'Identität muss einen Benutzernamen definiert haben.'; $messages['keygenerateerror'] = 'Schlüsselgenerierung fehlgeschlagen.'; $messages['keygeneratesuccess'] = 'Schlüsselpaar erfolgreich generiert und importiert.'; $messages['keygennosupport'] = 'Dein Browser unterstützt keine Kryptopgraphiefunktionen. Konnte Schlüsselpaar nicht generieren!'; +$messages['noidentselected'] = 'Sie müssen mindestens eine Identität für den Schlüssel auswählen!'; +$messages['nonameident'] = 'Identität muss einen Benutzernamen definiert haben.'; ?> diff --git a/plugins/enigma/localization/el_GR.inc b/plugins/enigma/localization/el_GR.inc index 92e6c3289ba..d8f25301dec 100644 --- a/plugins/enigma/localization/el_GR.inc +++ b/plugins/enigma/localization/el_GR.inc @@ -90,12 +90,10 @@ $messages['sigerror'] = 'Ανεπαλήθευτη υπογραφή. Εσωτερ $messages['decryptok'] = 'Το μήνυμα αποκρυπτογραφήθηκε.'; $messages['decrypterror'] = 'Η αποκρυπτογράφηση απέτυχε.'; $messages['decryptnokey'] = 'Η αποκρυπτογράφηση απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε. Ταυτότητα κλειδιού: $keyid.'; -$messages['decryptbadpass'] = 'Η αποκρυπτογράφηση απέτυχε. Λάθος κωδικός.'; $messages['decryptnopass'] = 'Η αποκρυπτογράφηση απέτυχε. Απαιτείται ο κωδικός του κλειδιού.'; $messages['decryptpartial'] = 'Το μήνυμα αποκρυπτογραφήθηκε, αλλά τμήμα του μηνύματος δεν ήταν κρυπτογραφημένο.'; $messages['signerror'] = 'Η υπογραφή απέτυχε.'; $messages['signnokey'] = 'Η υπογραφή απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε.'; -$messages['signbadpass'] = 'Η υπογραφή απέτυχε. Λάθος κωδικός.'; $messages['signnopass'] = 'Η υπογραφή απέτυχε. Απαιτείται ο κωδικός του κλειδιού.'; $messages['encrypterror'] = 'Η κρυπτογράφηση απέτυχε.'; $messages['encryptnokey'] = 'Η κρυπτογράφηση απέτυχε. Το δημόσιο κλειδί του $email δε βρέθηκε. @@ -113,8 +111,8 @@ $messages['keyremoveerror'] = 'Αδυναμία διαγραφής του επι $messages['keyimporttext'] = 'Μπορείτε να εισάγετε ιδιωτικά ή δημόσια κλειδιά ή να ανακτήσετε υπογραφές σε μοργή ASCII-Armor.'; $messages['formerror'] = 'Παρακαλώ συμπληρώστε όλα τα πεδία της φόρμας!'; $messages['passwordsdiffer'] = 'Οι κωδικοί δεν ταιριάζουν μεταξύ τους!'; -$messages['nonameident'] = 'Η Ταυτότητα πρέπει να έχει ορισμένο όνομα χρήστη!'; $messages['keygenerateerror'] = 'Αποτυχία δημιουργίας ζεύγους κλειδιών.'; $messages['keygeneratesuccess'] = 'Το ζεύγος κλειδιών δημιουργήθηκε και εισήχθη επιτυχώς.'; $messages['keygennosupport'] = 'To πρόγραμμα περιήγησής σας δεν υποστηρίζει κρυπτογράφηση. Δεν ήταν δυνατή η δημιουργία ενός ζεύγος κλειδιών!'; +$messages['nonameident'] = 'Η Ταυτότητα πρέπει να έχει ορισμένο όνομα χρήστη!'; ?> diff --git a/plugins/enigma/localization/en_GB.inc b/plugins/enigma/localization/en_GB.inc index dac267a27a9..605fdfe4c65 100644 --- a/plugins/enigma/localization/en_GB.inc +++ b/plugins/enigma/localization/en_GB.inc @@ -86,12 +86,10 @@ $messages['sigerror'] = 'Unverified signature. Internal error.'; $messages['decryptok'] = 'Message decrypted.'; $messages['decrypterror'] = 'Decryption failed.'; $messages['decryptnokey'] = 'Decryption failed. Private key not found. Key ID: $keyid.'; -$messages['decryptbadpass'] = 'Decryption failed. Bad password.'; $messages['decryptnopass'] = 'Decryption failed. Key password required.'; $messages['decryptpartial'] = 'Message decrypted, but part of the body was not encrypted.'; $messages['signerror'] = 'Signing failed.'; $messages['signnokey'] = 'Signing failed. Private key not found.'; -$messages['signbadpass'] = 'Signing failed. Bad password.'; $messages['signnopass'] = 'Signing failed. Key password required.'; $messages['encrypterror'] = 'Encryption failed.'; $messages['encryptnokey'] = 'Encryption failed. Public key not found for $email.'; @@ -107,8 +105,8 @@ $messages['keyremoveerror'] = 'Unable to delete selected key(s).'; $messages['keyimporttext'] = 'You can import private and public key(s) or revocation signatures in ASCII-Armor format.'; $messages['formerror'] = 'Please fill in the form. All fields are required!'; $messages['passwordsdiffer'] = 'Passwords do not match!'; -$messages['nonameident'] = 'Identity must have a user name defined!'; $messages['keygenerateerror'] = 'Failed to generate a key pair'; $messages['keygeneratesuccess'] = 'A key pair generated and imported successfully.'; $messages['keygennosupport'] = 'Your web browser does not support cryptography. Unable to generate a key pair!'; +$messages['nonameident'] = 'Identity must have a user name defined!'; ?> diff --git a/plugins/enigma/localization/es_ES.inc b/plugins/enigma/localization/es_ES.inc index 2d048710a48..2ee88125fa2 100644 --- a/plugins/enigma/localization/es_ES.inc +++ b/plugins/enigma/localization/es_ES.inc @@ -92,12 +92,10 @@ $messages['sigerror'] = 'Firma no verificada. Error interno.'; $messages['decryptok'] = 'Mensaje desenciptado.'; $messages['decrypterror'] = 'Desenciptación fallida.'; $messages['decryptnokey'] = 'Desenciptación fallida. Clave privada no encontrada. ID de Clave: $keyid.'; -$messages['decryptbadpass'] = 'Desencriptación fallida. Contraseña incorrecta.'; $messages['decryptnopass'] = 'Desencriptado fallido. Contraseña requerida.'; $messages['decryptpartial'] = 'Mensaje descifrado, pero parte del cuerpo no estaba cifrado.'; $messages['signerror'] = 'Firmado fallido.'; $messages['signnokey'] = 'Firmado fallido. Clave privada no encontrada.'; -$messages['signbadpass'] = 'Firmado fallido. Contraseña incorrecta.'; $messages['signnopass'] = 'Acceso fallido. Contraseña requerida.'; $messages['encrypterror'] = 'Encriptación fallida.'; $messages['encryptnokey'] = 'Encriptación fallida. Clave pública no encontrada para $email.'; @@ -115,8 +113,9 @@ $messages['keyimporttext'] = 'Puede importar la(s) clave(s) privada(s) y públic $messages['keyimportsearchtext'] = 'Puedes buscar claves por identificador de clave, nombre de usuario o dirección de email y después importarlas directamente.'; $messages['formerror'] = 'Por favor llene el formulario. ¡Todos los campos son obligatorios!'; $messages['passwordsdiffer'] = '¡Las contraseñas no coinciden!'; -$messages['nonameident'] = '¡La identidad debe de tener un nombre de usuario definido!'; $messages['keygenerateerror'] = 'No se ha podido generar una clave par'; $messages['keygeneratesuccess'] = 'Un par de claves generadas e importadas correctamente.'; $messages['keygennosupport'] = 'Su navegador web no soporta criptografía. ¡No se puede generar un par de claves!'; +$messages['noidentselected'] = '¡Tiene que seleccionar al menos una identidad para la llave!'; +$messages['nonameident'] = '¡La identidad debe de tener un nombre de usuario definido!'; ?> diff --git a/plugins/enigma/localization/eu_ES.inc b/plugins/enigma/localization/eu_ES.inc new file mode 100644 index 00000000000..799821e65a3 --- /dev/null +++ b/plugins/enigma/localization/eu_ES.inc @@ -0,0 +1,81 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/ +*/ +$labels['encryption'] = 'Zifraketa'; +$labels['enigmacerts'] = 'S/MIME egiaztagiriak'; +$labels['enigmakeys'] = 'PGP gakoak'; +$labels['keysfromto'] = '$count-eko $from-etik $to-rako gakoak'; +$labels['keyname'] = 'Izena'; +$labels['keyid'] = 'gakoaren IDa'; +$labels['keyuserid'] = 'Erabiltzailearen IDa'; +$labels['keytype'] = 'Gako mota'; +$labels['fingerprint'] = 'Hatz-marka'; +$labels['subkeys'] = 'Azpigakoak'; +$labels['basicinfo'] = 'Oinarrizko informazioa'; +$labels['userids'] = 'Erabiltzaile gehigarriak'; +$labels['typepublickey'] = 'gako publikoa'; +$labels['typekeypair'] = 'gako bikotea'; +$labels['keyattfound'] = 'Mezu honek erantsita PGP gakoa(k) d(it)u'; +$labels['keyattimport'] = 'Inportatu gakoa(k)'; +$labels['typesign'] = 'Sinatu'; +$labels['typeencrypt'] = 'Zifratu'; +$labels['typecert'] = 'Ziurtatu'; +$labels['typeauth'] = 'Egiaztapena'; +$labels['subkeyid'] = 'ID'; +$labels['subkeyalgo'] = 'Algoritmoa'; +$labels['subkeycreated'] = 'Sortuta'; +$labels['subkeyexpires'] = 'Iraungitze-data'; +$labels['subkeyusage'] = 'Erabilera'; +$labels['expiresnever'] = 'inoiz ez'; +$labels['unknown'] = 'ezezaguna'; +$labels['uservalid'] = 'Baliozkoa'; +$labels['userid'] = 'ID'; +$labels['valid'] = 'baliozkoa'; +$labels['supportencryption'] = 'Gaitu mezuen zifratzea eta sinadura '; +$labels['supportsignatures'] = 'Gaitu mezuen sinaduren egiaztapena'; +$labels['supportdecryption'] = 'Gaitu mezuen deszifratzea'; +$labels['signdefault'] = 'Mezuen sinatzea lehenetsita'; +$labels['encryptdefault'] = 'Mezuen zifratzea lehenetsita'; +$labels['attachpubkeydefault'] = 'Nire PGP gako publikoa eranstea lehenetsita'; +$labels['passwordtime'] = 'Mantendu gako pribatuen pasahitzak'; +$labels['nminutes'] = '$m minutu'; +$labels['wholesession'] = 'Saio osoa'; +$labels['createkeys'] = 'Sortu gako pare berria'; +$labels['importkeys'] = 'Inportatu gakoa(k)'; +$labels['exportkeys'] = 'Esportatu gakoa(k)'; +$labels['keyactions'] = 'Gakoaren ekintzak...'; +$labels['keyremove'] = 'Kendu'; +$labels['keydisable'] = 'Ezgaitu'; +$labels['keyrevoke'] = 'Errebokatu'; +$labels['keysend'] = 'Bidali gako publiko mezu batean'; +$labels['keychpass'] = 'Aldatu pasahitza'; +$labels['newkeyident'] = 'Identitatea:'; +$labels['newkeypass'] = 'Pasahitza:'; +$labels['newkeypassconfirm'] = 'Berretsi pasahitza:'; +$labels['newkeysize'] = 'Gakoaren tamaina:'; +$labels['key2048'] = '2048 bit - lehenetsita'; +$labels['key4096'] = '4096 bit - seguruagoa'; +$labels['keygenerating'] = 'Gakoak sortzen...'; +$labels['encryptionoptions'] = 'Zifratze aukerak...'; +$labels['encryptmsg'] = 'Zifratu mezu hau'; +$labels['signmsg'] = 'Sinatu era digitalean mezu hau'; +$labels['enterkeypasstitle'] = 'Sartu gakoaren pasaesaldia'; +$labels['enterkeypass'] = 'Pasaesaldi bat behar da erabiltzaile honen gako sekretua ($keyid) desblokeatzeko: $user'; +$labels['arialabelkeyexportoptions'] = 'Gakoaren esportazio aukerak'; +$labels['attachpubkeymsg'] = 'Erantsi nire gako publikoa'; +$labels['keyexportprompt'] = 'Nahi al duzu gako sekretuak sartzea gordetako OpenPGP gakoen fitxategian?'; +?> diff --git a/plugins/enigma/localization/fi_FI.inc b/plugins/enigma/localization/fi_FI.inc index d07c3687f02..9bbfe0b285b 100644 --- a/plugins/enigma/localization/fi_FI.inc +++ b/plugins/enigma/localization/fi_FI.inc @@ -85,11 +85,9 @@ $messages['sigerror'] = 'Vahvistamaton allekirjoitus. Sisäinen virhe.'; $messages['decryptok'] = 'Viestin salaus purettu.'; $messages['decrypterror'] = 'Salauksen purkaminen epäonnistui.'; $messages['decryptnokey'] = 'Salauksen purkaminen epäonnistui. Yksityistä avainta ei löytynyt. Avaimen tunniste: $keyid.'; -$messages['decryptbadpass'] = 'Salauksen purkaminen epäonnistui. Väärä salasana.'; $messages['decryptnopass'] = 'Salauksen purkaminen epäonnistui. Avaimen salasana vaaditaan.'; $messages['signerror'] = 'Allekirjoittaminen epäonnistui.'; $messages['signnokey'] = 'Allekirjoittaminen epäonnistui. Yksityistä avainta ei löytynyt.'; -$messages['signbadpass'] = 'Allekirjoitus epäonnistui. Väärä salasana.'; $messages['signnopass'] = 'Allekirjoitus epäonnistui. Avaimen salasana vaaditaan.'; $messages['encrypterror'] = 'Salaaminen epäonnistui.'; $messages['encryptnokey'] = 'Salaaminen epäonnistui. Osoitteelle $email ei löytynyt julkista avainta.'; @@ -100,8 +98,8 @@ $messages['keylisterror'] = 'Avainten listaaminen ei onnistu! Sisäinen virhe.'; $messages['keysimportfailed'] = 'Avaimen tuominen epäonnistui! Sisäinen virhe.'; $messages['formerror'] = 'Täytä lomake. Kaikki kentät ovat pakollisia!'; $messages['passwordsdiffer'] = 'Salasanat eivät täsmää!'; -$messages['nonameident'] = 'Identiteetillä tulee olla käyttäjänimi määritettynä!'; $messages['keygenerateerror'] = 'Avainparin luominen epäonnistui'; $messages['keygeneratesuccess'] = 'Avainpari luotiin ja tuotiin onnistuneesti.'; $messages['keygennosupport'] = 'Selaimesi ei tue salaustekniikkaa. Avainparin luominen ei onnistu!'; +$messages['nonameident'] = 'Identiteetillä tulee olla käyttäjänimi määritettynä!'; ?> diff --git a/plugins/enigma/localization/fo_FO.inc b/plugins/enigma/localization/fo_FO.inc index cc8ea434679..ab7c8a5188c 100644 --- a/plugins/enigma/localization/fo_FO.inc +++ b/plugins/enigma/localization/fo_FO.inc @@ -83,11 +83,9 @@ $messages['sigerror'] = 'Óvátta boð. Innanhýsis feilur.'; $messages['decryptok'] = 'Boðini eru óbrongla'; $messages['decrypterror'] = 'Feilur kom í óbrongslingina.'; $messages['decryptnokey'] = 'Óbrongsling riggaði ikki. Loyndarlykilin var ikki funnin. Lykila ID: $keyid.'; -$messages['decryptbadpass'] = 'Feilur kom í óbrongslingina. Ógyldigt loyniorð'; $messages['decryptnopass'] = 'Óbrongslan riggaði ikki. Lykla loyniorð er neyðugt.'; $messages['signerror'] = 'Undirskriving riggaði ikki.'; $messages['signnokey'] = 'Undirskriving riggaði ikki. Eingin privat lyki funnin'; -$messages['signbadpass'] = 'Undirskriving riggaði ikki. Skeivt loyniorð'; $messages['signnopass'] = 'Undirskriving riggaði ikki. Lykla loyniorð er neyðugt.'; $messages['encrypterror'] = 'Brongsling riggaði ikk'; $messages['encryptnokey'] = 'Brongsling riggaði ikki. Almennur lykil var ikki funnin fyri $email'; @@ -103,8 +101,8 @@ $messages['keyremoveerror'] = 'Ber ikki til at strika lyk(il/lar)'; $messages['keyimporttext'] = 'Tú kanst innflyta almennar og privat lyklar ella taka aftur undirskriftir í ASCII-Armor formati'; $messages['formerror'] = 'Vinarliga fylla allan formin. Øll felt eru kravd!'; $messages['passwordsdiffer'] = 'Loyniorðini eru ikki eins!'; -$messages['nonameident'] = 'samleiki má hava eitt brúkaranavn'; $messages['keygenerateerror'] = 'Feilur kom í, tá roynt var at framleiða lykla par'; $messages['keygeneratesuccess'] = 'Eitt lykla-par var framleitt og inn flutt'; $messages['keygennosupport'] = 'Tín kagari dugur ikki dulmálsvísindi. Ber ikki til at framleiða lykla par'; +$messages['nonameident'] = 'samleiki má hava eitt brúkaranavn'; ?> diff --git a/plugins/enigma/localization/fr_FR.inc b/plugins/enigma/localization/fr_FR.inc index 7982cce6f36..90ef0be1a18 100644 --- a/plugins/enigma/localization/fr_FR.inc +++ b/plugins/enigma/localization/fr_FR.inc @@ -92,12 +92,12 @@ $messages['sigerror'] = 'Signature non vérifiée. Erreur interne.'; $messages['decryptok'] = 'Courriel déchiffré.'; $messages['decrypterror'] = 'Échec lors du déchiffrement.'; $messages['decryptnokey'] = 'Échec de déchiffrement. Clé privée introuvable. ID de clé : $keyid.'; -$messages['decryptbadpass'] = 'Échec lors du déchiffrement. Mot de passe erroné.'; +$messages['decryptbadpass'] = 'Échec de déchiffrement. Le mot de passe est invalide.'; $messages['decryptnopass'] = 'Échec de déchiffrement. Le mot de passe de la clé est exigé.'; $messages['decryptpartial'] = 'Le courriel a été déchiffré, mais une partie du corps n\'était pas chiffré.'; $messages['signerror'] = 'Échec lors de la signature.'; $messages['signnokey'] = 'Échec lors de la signature. La clé privée est introuvable.'; -$messages['signbadpass'] = 'Échec lors de la signature. Mot de passe erroné.'; +$messages['signbadpass'] = 'Échec de signature. Le mot de passe est invalide.'; $messages['signnopass'] = 'Échec de signature. Le mot de passe de la clé est exigé.'; $messages['encrypterror'] = 'Échec lors du chiffrement.'; $messages['encryptnokey'] = 'Échec lors du chiffrement. La clé publique est introuvable pour $email.'; @@ -115,8 +115,9 @@ $messages['keyimporttext'] = 'Vous pouvez importer des clés privées et publiqu $messages['keyimportsearchtext'] = 'Vous pouvez chercher des clés publiques par identifiant de clé, nom d\'utilisateur ou adresse courriel, et ensuite les importer directement.'; $messages['formerror'] = 'Veuillez remplir le formulaire. Tous les champs sont requis !'; $messages['passwordsdiffer'] = 'Les mots de passe ne correspondent pas !'; -$messages['nonameident'] = 'Un nom d\'utilisateur doit être défini pour l\'identité !'; $messages['keygenerateerror'] = 'La génération de la biclé a échoué'; $messages['keygeneratesuccess'] = 'Une biclé a été générée et importée avec succès.'; $messages['keygennosupport'] = 'Votre navigateur ne prend pas en charge le chiffrement. Activez-le pour générer une biclé !'; +$messages['noidentselected'] = 'Vous devez choisir au moins une identité pour la clé !'; +$messages['nonameident'] = 'Un nom d\'utilisateur doit être défini pour l\'identité !'; ?> diff --git a/plugins/enigma/localization/he_IL.inc b/plugins/enigma/localization/he_IL.inc index c7c579f2e8a..c5e90cea43e 100644 --- a/plugins/enigma/localization/he_IL.inc +++ b/plugins/enigma/localization/he_IL.inc @@ -77,6 +77,12 @@ $labels['enterkeypasstitle'] = 'נא להקיש צרור אותיות וסימנ $labels['enterkeypass'] = 'יש להקיש צרור אותיות וסימנים שנבחרו קודם כדי לשחרר נעילה של המפתח הסודי (keyid$) של משתמש user$'; $labels['arialabelkeyexportoptions'] = 'אפשרויות ייצוא של מפתחות'; $labels['attachpubkeymsg'] = 'צירוף המפתח הציבורי שלי'; +$labels['keyexportprompt'] = 'האם ברצונך לכלול מפתחות סודיים בקובץ השמור של המפתחות ?'; +$labels['onlypubkeys'] = 'ייצוא מפתחות ציבוריים בלבד'; +$labels['withprivkeys'] = 'ייצוא מפתחות סודיים'; +$labels['findkey'] = 'חיפוש בשרת(י) מפתח'; +$labels['keyimportlabel'] = 'ייבוא מקובץ'; +$labels['keyimportsearchlabel'] = 'חיפוש בשרת(י) מפתח'; $messages['sigvalid'] = 'אימות חתימה מ sender$'; $messages['sigvalidpartial'] = 'אומתה חתימה של sender$ אבל חלק מגוף ההודעה לא נחתם'; $messages['siginvalid'] = 'חתימה לא תקינה מ sender$'; @@ -86,16 +92,15 @@ $messages['sigerror'] = 'חתימה לא מאומתת. שגיאה פנימית.' $messages['decryptok'] = 'הודעה פוענחה.'; $messages['decrypterror'] = 'הפיענוח נכשל.'; $messages['decryptnokey'] = 'הפיענוח נכשל. לא נמצא מפתח פרטי. קוד מפתח: keyid$.'; -$messages['decryptbadpass'] = 'פיענוח נכשל. סיסמה שגויה.'; $messages['decryptnopass'] = 'פענוח נכשל. נדרשת סיסמת מפתח.'; $messages['decryptpartial'] = 'ההודעה פוענחה אבל חלק מגוף ההודעה כלל לא הוצפן'; $messages['signerror'] = 'חתימה נכשלה.'; $messages['signnokey'] = 'חתימה נכשלה. לא נמצא מפתח פרטי.'; -$messages['signbadpass'] = 'חתחמה נכשלה. סיסמה שגויה.'; $messages['signnopass'] = 'חיתום נכשל. נדרשת סיסמת מפתח.'; $messages['encrypterror'] = 'הצפנה נכשלה.'; $messages['encryptnokey'] = 'הצפנה נכשלה. לא נמצא מפתח ציבורי עבור mail$.'; $messages['nokeysfound'] = 'לא נמצאו מפתחות.'; +$messages['keynotfound'] = 'לא נמצא מפתח !'; $messages['keyopenerror'] = 'לא ניתן להשיג מידע על מפתח! שגיאה פנימית.'; $messages['keylisterror'] = 'לא ניתן להציג רשימת מפתחות! שגיאה פנימית.'; $messages['keysimportfailed'] = 'לא ניתן לייבא מפתח אחד או יותר ! שגיאה פנימית.'; @@ -105,10 +110,12 @@ $messages['keyremoveconfirm'] = 'האם למחוק את המפתחות שנבח $messages['keyremovesuccess'] = 'מפתח(ות) נמחק(ו) בהצלחה'; $messages['keyremoveerror'] = 'לא ניתן למחוק את המפתחות שנבחרו.'; $messages['keyimporttext'] = 'ניתן לייבא מפתחות פרטיים וציבוריים או חתימות ביטול בםפורמט ASCII-Armor'; +$messages['keyimportsearchtext'] = 'ניתן לחפש מפתחות ציבוריים לפי מזהה מפתח, שם משתמש או כתובת דוא"ל ואח"כ לייבא אותם ישירות.'; $messages['formerror'] = 'נא למלא את כל השדות בטופס !'; $messages['passwordsdiffer'] = 'הסיסמאות לא תואמות!'; -$messages['nonameident'] = 'יש להגדיר שם משתמש בהגדרת הזהות !'; $messages['keygenerateerror'] = 'נכשלה יצירה של צמד המפתחות'; $messages['keygeneratesuccess'] = 'נוצר צמד מפתחות ויובא בהצלחה.'; $messages['keygennosupport'] = 'הדפדפן הזה אינו תומך בהצפנה. לא ניתן לייצר צמד מפתחות !'; +$messages['noidentselected'] = 'יש לבחור לפחות זהות אחת עבור המפתח'; +$messages['nonameident'] = 'יש להגדיר שם משתמש בהגדרת הזהות !'; ?> diff --git a/plugins/enigma/localization/hu_HU.inc b/plugins/enigma/localization/hu_HU.inc index 0e9c7c4b6a1..ec155057438 100644 --- a/plugins/enigma/localization/hu_HU.inc +++ b/plugins/enigma/localization/hu_HU.inc @@ -81,6 +81,8 @@ $labels['keyexportprompt'] = 'A mentett OpenPGP kulcsoknál legyenek-e tárolva $labels['onlypubkeys'] = 'Csak a nyilvános kulcsok exportálása'; $labels['withprivkeys'] = 'Titkos kucsok exportálása'; $labels['findkey'] = 'Keresés a kulcs szerver(ek)en'; +$labels['keyimportlabel'] = 'Importálás fájlból'; +$labels['keyimportsearchlabel'] = 'Keresés a kulcs szerver(ek)en'; $messages['sigvalid'] = 'A $sender feladó aláírása ellenőrízve.'; $messages['sigvalidpartial'] = 'A $sender feladó aláírása ellenőrízve, de részei az üzenetnek nem voltak aláírva.'; $messages['siginvalid'] = 'Érvénytelen aláírás a következő feladótól: $sender'; @@ -90,12 +92,12 @@ $messages['sigerror'] = 'Nem ellenörzött aláírás. Belső hiba.'; $messages['decryptok'] = 'Üzenet ki-tikosítva.'; $messages['decrypterror'] = 'Visszafejtés sikertelen.'; $messages['decryptnokey'] = 'Visszafejtés sikertelen. Nyilvános nem található. Kulcs ID: $keyid.'; -$messages['decryptbadpass'] = 'Visszafejtés sikertelen. Rossz jelszó.'; +$messages['decryptbadpass'] = 'Visszafejtés sikertelen. Hibás jelszó.'; $messages['decryptnopass'] = 'Visszafejtés sikertelen. A kulcshoz jelszó kell.'; $messages['decryptpartial'] = 'Visszafejtés sikeres, de néhány része az üzenetnek nem volt titkosítva.'; $messages['signerror'] = 'Aláírás sikertelen.'; $messages['signnokey'] = 'Aláírás sikertelen. Nyilvános kulcs nem található.'; -$messages['signbadpass'] = 'Aláírás sikertelen. Rossz jelszó.'; +$messages['signbadpass'] = 'Aláírás sikertelen. Hibás jelszó.'; $messages['signnopass'] = 'Aláírás sikertelen. A kulcshoz jelszó kell.'; $messages['encrypterror'] = 'Titkosítás sikertelen.'; $messages['encryptnokey'] = 'Titkosítás sikertelen. Nyilvás kulcs nem található a következőhöz: $email.'; @@ -110,10 +112,12 @@ $messages['keyremoveconfirm'] = 'Biztosan törölni szeretnéd a kiválasztott k $messages['keyremovesuccess'] = 'A kulcs(ok) sikeresen törölve'; $messages['keyremoveerror'] = 'Nem sikerült a kiválasztott kulcso(ka)t törölni.'; $messages['keyimporttext'] = 'Importálhatod a privát és nyilvános kulcsodat vagy a visszavonási aláírásokatr ASCII-Armor formátumban.'; +$messages['keyimportsearchtext'] = 'A publikus kulcsokat keresheted az azonsító, a felhasználó név vagy a email cím alapján, majd közvetlenül beimportálhatod.'; $messages['formerror'] = 'Tőltsd ki az ürlapot. Minden mező kitöltése kötelező!'; $messages['passwordsdiffer'] = 'A jelszavak nem egyeznek!'; -$messages['nonameident'] = 'Egy identitásnak kötelező felhasználó nevet beállítani!'; $messages['keygenerateerror'] = 'Nem sikerült a kulcs-pár létrehozása'; $messages['keygeneratesuccess'] = 'A kulcs-pár létrejött és sikeresen beimportálódott.'; $messages['keygennosupport'] = 'A böngésződ nem támogatja a titkosítást. A kulcs-pár nem hozható létre!'; +$messages['noidentselected'] = 'Ki kell választanod legalább egy identitást a kulcshoz!'; +$messages['nonameident'] = 'Egy identitásnak kötelező felhasználó nevet beállítani!'; ?> diff --git a/plugins/enigma/localization/id_ID.inc b/plugins/enigma/localization/id_ID.inc index bb1685fc261..c82d32dd0bc 100644 --- a/plugins/enigma/localization/id_ID.inc +++ b/plugins/enigma/localization/id_ID.inc @@ -18,6 +18,7 @@ $labels['encryption'] = 'Enkripsi'; $labels['enigmacerts'] = 'Sertifikat S/MIME'; $labels['enigmakeys'] = 'Kunci PGP'; +$labels['keysfromto'] = 'Kunci $from sampai $to dari $count'; $labels['keyname'] = 'Nama'; $labels['keyid'] = 'ID Kunci'; $labels['keyuserid'] = 'ID Pengguna'; @@ -25,13 +26,95 @@ $labels['keytype'] = 'Tipe kunci'; $labels['fingerprint'] = 'Sidik jari'; $labels['subkeys'] = 'Subkunci'; $labels['basicinfo'] = 'Informasi dasar'; +$labels['userids'] = 'Pengguna Tambahan'; $labels['typepublickey'] = 'kunci publik'; $labels['typekeypair'] = 'kunci pasangan'; +$labels['keyattfound'] = 'Pesan ini memuat kunci PGP yang dilampirkan.'; +$labels['keyattimport'] = 'Impor kunci'; +$labels['typesign'] = 'Tandatangani'; $labels['typeencrypt'] = 'Enkripsi'; +$labels['typecert'] = 'Sertifikasikan'; $labels['typeauth'] = 'Otentifikasi'; $labels['subkeyid'] = 'ID'; $labels['subkeyalgo'] = 'Algoritma'; $labels['subkeycreated'] = 'Dibuat'; +$labels['subkeyexpires'] = 'Kedaluarsa'; $labels['subkeyusage'] = 'Penggunaan'; $labels['expiresnever'] = 'tidak pernah'; +$labels['unknown'] = 'tak diketahui'; +$labels['uservalid'] = 'Valid'; +$labels['userid'] = 'ID'; +$labels['valid'] = 'valid'; +$labels['supportencryption'] = 'Fungsikan enkripsi dan penandatanganan pesan'; +$labels['supportsignatures'] = 'Fungsikan verifikasi tanda tangan pesan'; +$labels['supportdecryption'] = 'Fungsikan dekripsi pesan'; +$labels['signdefault'] = 'Tandatangani semua pesan secara baku'; +$labels['encryptdefault'] = 'Enkripsikan semua pesan secara baku'; +$labels['attachpubkeydefault'] = 'Lampirkan kunci PGP publik saya secara baku'; +$labels['passwordtime'] = 'Simpan kata sandi kunci rahasia selama'; +$labels['nminutes'] = '$m menit'; +$labels['wholesession'] = 'seluruh sesi'; +$labels['createkeys'] = 'Buat pasangan kunci baru'; +$labels['importkeys'] = 'Impor kunci'; +$labels['exportkeys'] = 'Ekspor kunci'; +$labels['keyactions'] = 'Aksi kunci...'; +$labels['keyremove'] = 'Hapus'; +$labels['keydisable'] = 'Nonaktifkan'; +$labels['keyrevoke'] = 'Cabut'; +$labels['keysend'] = 'Kirim kunci publik dalam pesan'; +$labels['keychpass'] = 'Ubah kata sandi'; +$labels['newkeyident'] = 'Identitas:'; +$labels['newkeypass'] = 'Kata sandi:'; +$labels['newkeypassconfirm'] = 'Konfirmasi kata sandi:'; +$labels['newkeysize'] = 'Ukuran kunci:'; +$labels['key2048'] = '2048 bit - baku'; +$labels['key4096'] = '4096 bit - lebih aman'; +$labels['keygenerating'] = 'Membuat kunci...'; +$labels['encryptionoptions'] = 'Opsi enkripsi...'; +$labels['encryptmsg'] = 'Enkripsikan pesan ini'; +$labels['signmsg'] = 'Tandatantani pesan ini'; +$labels['enterkeypasstitle'] = 'Masukkan frasa sandi kunci'; +$labels['enterkeypass'] = 'Frasa sandi diperlukan untuk membuka kunci rahasia ($keyid) untuk pengguna: $user.'; +$labels['arialabelkeyexportoptions'] = 'Opsi ekspor kunci'; +$labels['attachpubkeymsg'] = 'Lampirkan kunci publik saya'; +$labels['keyexportprompt'] = 'Apakah Anda ingin menyertakan kunci rahasia dalam berkas kunci OpenPGP yang disimpan?'; +$labels['onlypubkeys'] = 'Ekspor Kunci Publik Saja'; +$labels['withprivkeys'] = 'Ekspor Kunci Rahasia'; +$labels['findkey'] = 'Cari pada server kunci'; +$labels['keyimportlabel'] = 'Impor dari berkas'; +$labels['keyimportsearchlabel'] = 'Cari pada server kunci'; +$messages['sigvalid'] = 'Tanda tangan terverifikasi dari $sender.'; +$messages['sigvalidpartial'] = 'Tanda tangan terverifikasi dari $sender, tapi sebagian pesan tidak ditandatangani.'; +$messages['siginvalid'] = 'Tanda tangan tak valid dari $sender.'; +$messages['sigunverified'] = 'Tanda tangan tak terverifikasi. Sertifikat tak terverifikasi. ID sertifikat: $keyid.'; +$messages['signokey'] = 'Tanda tangan tak terverifikasi. Kunci publik tak ditemukan. ID kunci: $keyid.'; +$messages['sigerror'] = 'Tanda tangan tak terverifikasi. Kesalahan internal.'; +$messages['decryptok'] = 'Pesan didekripsi.'; +$messages['decrypterror'] = 'Dekripsi gagal.'; +$messages['decryptnokey'] = 'Dekripsi gagal. Kunci privat tak ditemukan. ID kunci: $keyid.'; +$messages['decryptnopass'] = 'Dekripsi gagal. Kata sandi kunci diperlukan.'; +$messages['decryptpartial'] = 'Pesan didekripsi, tapi sebagian isi tidak dienkripsi.'; +$messages['signerror'] = 'Penandatanganan gagal.'; +$messages['signnokey'] = 'Penandatanganan gagal. Kunci privat tak ditemukan.'; +$messages['signnopass'] = 'Penandatanganan gagal. Kata sandi kunci diperlukan.'; +$messages['encrypterror'] = 'Enkripsi gagal.'; +$messages['encryptnokey'] = 'Enkripsi gagal. Kunci publik tak ditemukan untuk $email.'; +$messages['nokeysfound'] = 'Tidak ada kunci yang ditemukan'; +$messages['keynotfound'] = 'Kunci tidak ditemukan!'; +$messages['keyopenerror'] = 'Tidak bisa memperoleh informasi kunci! Kesalahan internal.'; +$messages['keylisterror'] = 'Tidak bisa membuat daftar kunci! Kesalahan internal.'; +$messages['keysimportfailed'] = 'Tidak bisa mengimpor kunci! Kesalahan internal.'; +$messages['keysimportsuccess'] = 'Kunci sukses diimpor. Diimpor: $new, tidak berubah: $old.'; +$messages['keyremoving'] = 'Menghapus kunci...'; +$messages['keyremoveconfirm'] = 'Anda yakin hendak menghapus kunci yang dipilih?'; +$messages['keyremovesuccess'] = 'Kunci sukses dihapus'; +$messages['keyremoveerror'] = 'Tidak bisa menghapus kunci yang dipilih.'; +$messages['keyimporttext'] = 'Anda bisa mengimpor kunci privat dan publik atau tanda tangan pencabutan dalam format ASCII-Armor.'; +$messages['keyimportsearchtext'] = 'Anda dapat mencari kunci publik berdasarkan identifier kunci, nama pengguna, atau alamat surel, lalu secara langsung mengimpor mereka.'; +$messages['formerror'] = 'Harap isi formulir. Semua ruas diperlukan!'; +$messages['passwordsdiffer'] = 'Kata sandi tidak cocok!'; +$messages['keygenerateerror'] = 'Gagal membuat suatu pasangan kunci'; +$messages['keygeneratesuccess'] = 'Suatu pasangan kunci dibuat dan sukses diimpor.'; +$messages['keygennosupport'] = 'Peramban web Anda tidak mendukung kriptografi. Tidak bisa membuat suatu pasangan kunci!'; +$messages['nonameident'] = 'Identitas mesti mengandung nama pengguna!'; ?> diff --git a/plugins/enigma/localization/it_IT.inc b/plugins/enigma/localization/it_IT.inc index c9ecbcb6c4a..a41ae3ff867 100644 --- a/plugins/enigma/localization/it_IT.inc +++ b/plugins/enigma/localization/it_IT.inc @@ -28,6 +28,8 @@ $labels['subkeys'] = 'Sottochiavi'; $labels['basicinfo'] = 'Informazioni base'; $labels['userids'] = 'Utenti aggiuntivi'; $labels['typepublickey'] = 'chiave pubblica'; +$labels['keyattfound'] = 'Questo messaggio contiene allegate Chiavi PGP.'; +$labels['keyattimport'] = 'Importa Chiave(i)'; $labels['typesign'] = 'Firma'; $labels['typeencrypt'] = 'Cripta'; $labels['typecert'] = 'Certifica'; @@ -43,6 +45,15 @@ $labels['uservalid'] = 'Valido'; $labels['userid'] = 'ID'; $labels['valid'] = 'valido'; $labels['supportencryption'] = 'Abilita cifratura firma del messaggio'; +$labels['supportsignatures'] = 'Abilita la verifica delle firme dei messaggi'; +$labels['supportdecryption'] = 'Abilita da decodifica del messaggio'; +$labels['signdefault'] = 'Firma tutti i messaggi di default'; +$labels['encryptdefault'] = 'Crypta tutti i messaggi di default'; +$labels['attachpubkeydefault'] = 'Allega la mia chiave pubblica PGP di default'; +$labels['nminutes'] = '$m minuti'; +$labels['createkeys'] = 'Crea una nuova coppia di chiavi'; +$labels['importkeys'] = 'Importa chiave(i)'; +$labels['exportkeys'] = 'Esporta Chiave(i)'; $labels['keyremove'] = 'Rimuovi'; $labels['keydisable'] = 'Disabilita'; $labels['keyrevoke'] = 'Revoca'; diff --git a/plugins/enigma/localization/ja_JP.inc b/plugins/enigma/localization/ja_JP.inc index 7547fa207bf..b2e826ed5a6 100644 --- a/plugins/enigma/localization/ja_JP.inc +++ b/plugins/enigma/localization/ja_JP.inc @@ -92,12 +92,10 @@ $messages['sigerror'] = '署名を検証できません。内部エラーです $messages['decryptok'] = 'メッセージを復号しました。'; $messages['decrypterror'] = '復号できませんでした。'; $messages['decryptnokey'] = '復号できませんでした。次のキーIDの秘密鍵がありません: $keyid'; -$messages['decryptbadpass'] = '復号できませんでした。パスワードが誤っています。'; $messages['decryptnopass'] = '復号できませんでした。キーのパスワードが必要です。'; $messages['decryptpartial'] = 'メッセージを復号しました。しかし、本文の一部は暗号化していませんでした。'; $messages['signerror'] = '署名できませんでした。'; $messages['signnokey'] = '署名できませんでした。秘密鍵がありません。'; -$messages['signbadpass'] = '署名できませんでした。誤ったパスワードです。'; $messages['signnopass'] = '署名できませんでした。キーのパスワードが必要です。'; $messages['encrypterror'] = '暗号化できませんでした。'; $messages['encryptnokey'] = '暗号化できませんでした。$emailへの公開鍵がありません。'; @@ -115,8 +113,9 @@ $messages['keyimporttext'] = '秘密鍵と公開鍵、または失効署名はAS $messages['keyimportsearchtext'] = 'キーの識別子、ユーザー名、電子メールアドレスのいずれかで公開鍵を検索して、直接インポートできます。'; $messages['formerror'] = '項目を入力してください。すべての項目は必須です!'; $messages['passwordsdiffer'] = 'パスワードが一致しません!'; -$messages['nonameident'] = '識別情報にはユーザー名が必須です!'; $messages['keygenerateerror'] = '鍵ペアを生成できませんでした。'; $messages['keygeneratesuccess'] = '鍵ペアを生成してインポートしました。'; $messages['keygennosupport'] = 'Webブラウザーが暗号機能をサポートしていません。鍵ペアを生成できません!'; +$messages['noidentselected'] = 'キーのための識別情報を少なくとも1つ選択しなければなりません!'; +$messages['nonameident'] = '識別情報にはユーザー名が必須です!'; ?> diff --git a/plugins/enigma/localization/ko_KR.inc b/plugins/enigma/localization/ko_KR.inc index b5848f80c4a..b3da3ab3980 100644 --- a/plugins/enigma/localization/ko_KR.inc +++ b/plugins/enigma/localization/ko_KR.inc @@ -50,6 +50,7 @@ $labels['supportsignatures'] = '메시지 서명 검증 활성화'; $labels['supportdecryption'] = '메시지 복호화 활성화'; $labels['signdefault'] = '기본적으로 모든 메시지에 서명 추가'; $labels['encryptdefault'] = '기본적으로 모든 메시지 암호화'; +$labels['attachpubkeydefault'] = '내 공개 PGP 키를 기본으로 첨부'; $labels['passwordtime'] = '비공개 키 암호를 다음 기간동안 유지'; $labels['nminutes'] = '$m분'; $labels['wholesession'] = '전체 세션'; @@ -75,7 +76,15 @@ $labels['signmsg'] = '이 메시지에 디지털 서명 추가'; $labels['enterkeypasstitle'] = '키 암호문 입력'; $labels['enterkeypass'] = '다음 사용자에 대한 비밀 키($keyid)의 잠금을 해제하려면 암호문이 필요합니다: $user.'; $labels['arialabelkeyexportoptions'] = '키 내보내기 옵션'; +$labels['attachpubkeymsg'] = '내 공개 키 첨부'; +$labels['keyexportprompt'] = '암호 키를 저장된 OpenPGP 키 파일에 포함하시겠습니까?'; +$labels['onlypubkeys'] = '공개 키만 내보내기'; +$labels['withprivkeys'] = '비밀 키 내보내기'; +$labels['findkey'] = '키 서버에서 검색'; +$labels['keyimportlabel'] = '파일에서 가져오기'; +$labels['keyimportsearchlabel'] = '키 서버에서 검색'; $messages['sigvalid'] = '$sender이(가) 보낸 검증된 서명.'; +$messages['sigvalidpartial'] = '$sender의 검증된 서명이긴 하나, 본문 일부가 서명되지 않았습니다.'; $messages['siginvalid'] = '$sender이(가) 보낸 검증되지 않은 서명.'; $messages['sigunverified'] = '검증되지 않은 서명. 인증서가 검증되지 않음. 인증서 ID: $keyid.'; $messages['signokey'] = '검증되지 않은 서명. 공개 키를 찾을 수 없습니다. 키 ID: $keyid.'; @@ -83,15 +92,15 @@ $messages['sigerror'] = '검증되지 않은 서명. 내부 오류.'; $messages['decryptok'] = '메시지가 복호화됨.'; $messages['decrypterror'] = '복호화에 실패함.'; $messages['decryptnokey'] = '복호화에 실패함. 비공개 키를 찾을 수 없음. 키 ID: $keyid.'; -$messages['decryptbadpass'] = '복호화에 실패함. 암호 불일치.'; $messages['decryptnopass'] = '복호화에 실패함. 키 암호가 필요합니다.'; +$messages['decryptpartial'] = '메시지가 복호화됐지만 본문 일부가 암호화 되지 않았습니다.'; $messages['signerror'] = '서명 추가에 실패함.'; $messages['signnokey'] = '서명 추가에 실패함. 비공개 키를 찾을 수 없음.'; -$messages['signbadpass'] = '서명 추가에 실패함. 암호 불일치.'; $messages['signnopass'] = '서명 추가에 실패함. 키 암호가 필요합니다.'; $messages['encrypterror'] = '암호화에 실패함.'; $messages['encryptnokey'] = '암호화에 실패함. $email에 대한 공개 키를 찾을 수 없음.'; $messages['nokeysfound'] = '키를 찾을 수 없음'; +$messages['keynotfound'] = '키를 발견하지 못함!'; $messages['keyopenerror'] = '키 정보를 얻을 수 없음! 내부 오류.'; $messages['keylisterror'] = '키 목록을 표시할 수 없음! 내부 오류.'; $messages['keysimportfailed'] = '키를 가져올 수 없음! 내부 오류.'; @@ -101,10 +110,12 @@ $messages['keyremoveconfirm'] = '정말로 선택한 키를 삭제하시겠습 $messages['keyremovesuccess'] = '키가 성공적으로 삭제되었습니다'; $messages['keyremoveerror'] = '선택한 키를 삭제하지 못함.'; $messages['keyimporttext'] = '비공개 및 공개 키 또는 폐기 서명을 ASCII-Armor 형식으로 가져올 수 있습니다.'; +$messages['keyimportsearchtext'] = '키 식별자, 사용자명 또는 이메일 주소로 공개 키를 검색하신 후에, 직접 가져오실 수 있습니다.'; $messages['formerror'] = '양식을 작성해주세요. 모든 필드가 채워져야 합니다!'; $messages['passwordsdiffer'] = '암호가 일치하지 않음!'; -$messages['nonameident'] = '신원에는 사용자명이 정의되어야 합니다!'; $messages['keygenerateerror'] = '키 페어 생성을 실패함'; $messages['keygeneratesuccess'] = '키 페어가 성공적으로 생성되었고 가져왔습니다.'; $messages['keygennosupport'] = '웹 브라우저가 암호화를 지원하지 않습니다. 키 페어를 생성하지 못함!'; +$messages['noidentselected'] = '적어도 키에 대한 하나 이상의 신원을 선택하셔야 합니다!'; +$messages['nonameident'] = '신원에는 사용자명이 정의되어야 합니다!'; ?> diff --git a/plugins/enigma/localization/lt_LT.inc b/plugins/enigma/localization/lt_LT.inc index c4eaa068776..7eaa716f681 100644 --- a/plugins/enigma/localization/lt_LT.inc +++ b/plugins/enigma/localization/lt_LT.inc @@ -50,6 +50,7 @@ $labels['supportsignatures'] = 'Įgalinti laiškų parašų tikrinimą'; $labels['supportdecryption'] = 'Įgalinti laiškų dešifravimą'; $labels['signdefault'] = 'Numatytai pasirašinėti visus laiškus'; $labels['encryptdefault'] = 'Numatytai šifruoti visus laiškus'; +$labels['attachpubkeydefault'] = 'Visada prisegti mano viešąjį raktą prie laiško.'; $labels['passwordtime'] = 'Saugoti privačiųjų raktų slaptažodžius'; $labels['nminutes'] = '$m min.'; $labels['wholesession'] = 'visą seanso laiką'; @@ -75,7 +76,15 @@ $labels['signmsg'] = 'Pasirašyti šį laišką'; $labels['enterkeypasstitle'] = 'Įveskite rakto slaptafrazę'; $labels['enterkeypass'] = 'Naudotojo $user slaptajam raktui ($keyid) atrakinti reikalinga slaptafrazė.'; $labels['arialabelkeyexportoptions'] = 'Raktų eksportavimo parinktys'; +$labels['attachpubkeymsg'] = 'Prisegti mano viešąjį raktą'; +$labels['keyexportprompt'] = 'Ar norite įkelti privačiuosius raktus, saugojamus OpenPGP raktų faile?'; +$labels['onlypubkeys'] = 'Eksportuoti tik viešuosius raktus'; +$labels['withprivkeys'] = 'Eksportuoti privačiuosius raktus'; +$labels['findkey'] = 'Ieškoti raktų serveryje(-iuose)'; +$labels['keyimportlabel'] = 'Importuoti iš failo'; +$labels['keyimportsearchlabel'] = 'Ieškoti raktų serveryje(-iuose)'; $messages['sigvalid'] = 'Galiojantis $sender parašas.'; +$messages['sigvalidpartial'] = '$sender parašas patvirtintas, bet už dalį laiško nebuvo pasirašyta.'; $messages['siginvalid'] = 'Negaliojantis $sender parašas.'; $messages['sigunverified'] = 'Parašo galiojimas nepatikrintas. Nepatvirtintas liudijimas. Liudijimo ID: $keyid.'; $messages['signokey'] = 'Parašo galiojimas nepatikrintas. Nerastas viešasis raktas. Rakto ID: $keyid.'; @@ -83,13 +92,15 @@ $messages['sigerror'] = 'Parašo galiojimas nepatikrintas. Įvyko vidinė klaida $messages['decryptok'] = 'Laiškas iššifruotas.'; $messages['decrypterror'] = 'Iššifruoti nepavyko.'; $messages['decryptnokey'] = 'Iššifruoti nepavyko. Nerastas privatusis raktas. Rakto ID: $keyid.'; -$messages['decryptbadpass'] = 'Iššifruoti nepavyko. Blogas slaptažodis.'; +$messages['decryptnopass'] = 'Nepavyko dešifruoti, reikalingas rakto slaptažodis.'; +$messages['decryptpartial'] = 'Laiškas dešifruotas, nors dalis laiško ir nebuvo užšifruota.'; $messages['signerror'] = 'Pasirašyti nepavyko.'; $messages['signnokey'] = 'Pasirašyti nepavyko. Nerastas privatusis raktas.'; -$messages['signbadpass'] = 'Pasirašyti nepavyko. Blogas slaptažodis.'; +$messages['signnopass'] = 'Nepavyko pasirašyti, reikalingas rakto slaptažodis.'; $messages['encrypterror'] = 'Užšifruoti nepavyko.'; $messages['encryptnokey'] = 'Užšifruoti nepavyko. Nerastas viešasis $email raktas.'; $messages['nokeysfound'] = 'Raktų nerasta'; +$messages['keynotfound'] = 'Raktas nerastas!'; $messages['keyopenerror'] = 'Nepavyko gauti rakto duomenų! Įvyko vidinė klaida.'; $messages['keylisterror'] = 'Nepavyko išvardinti raktų! Įvyko vidinė klaida.'; $messages['keysimportfailed'] = 'Nepavyko importuoti rakto (raktų)! Įvyko vidinė klaida.'; @@ -99,10 +110,11 @@ $messages['keyremoveconfirm'] = 'Ar tikrai norite pašalinti pažymėtus raktus? $messages['keyremovesuccess'] = 'Raktai sėkmingai pašalinti'; $messages['keyremoveerror'] = 'Pasirinktų raktų pašalinti nepavyko.'; $messages['keyimporttext'] = 'Galite importuoti „ASCII-Armor“ formato privačiuosius ir viešuosius raktus bei atšaukimo liudijimus.'; +$messages['keyimportsearchtext'] = 'Galite ieškoti viešųjų raktų pagal rakto identifikatorių, vartotojo vardą arba el. pašto adresą ir juos tiesiogiai importuoti.'; $messages['formerror'] = 'Prašome užpildyti formą. Visi laukai privalomi!'; $messages['passwordsdiffer'] = 'Slaptažodžiai nesutampa!'; -$messages['nonameident'] = 'Tapatybei turi būti nurodytas naudotojo vardas!'; $messages['keygenerateerror'] = 'Nepavyko sugeneruoti raktų poros.'; $messages['keygeneratesuccess'] = 'Raktų pora sėkmingai sugeneruota ir importuota.'; $messages['keygennosupport'] = 'Jūsų naršyklėje kriptografija nepalaikoma. Raktų poros sugeneruoti nepavyko!'; +$messages['nonameident'] = 'Tapatybei turi būti nurodytas naudotojo vardas!'; ?> diff --git a/plugins/enigma/localization/lv_LV.inc b/plugins/enigma/localization/lv_LV.inc index 0a0593d2074..1241f982ff7 100644 --- a/plugins/enigma/localization/lv_LV.inc +++ b/plugins/enigma/localization/lv_LV.inc @@ -86,12 +86,10 @@ $messages['sigerror'] = 'Nepārbaudīts paraksts. Iekšējā kļūda.'; $messages['decryptok'] = 'E-pasts atšifrēts.'; $messages['decrypterror'] = 'Atšifrēšana neizdevās.'; $messages['decryptnokey'] = 'Atšifrēšana neizdevās. Privātā atslēga netika atrasta. Atslēgas ID: $keyid.'; -$messages['decryptbadpass'] = 'Atšifrēšana neizdevās. Nepareiza parole.'; $messages['decryptnopass'] = 'Atšifrēšana neizdevās. Nepieciešama atslēgas parole.'; $messages['decryptpartial'] = 'E-pasts ir atšifrēts, bet daļa no tā nemaz nebija šifrēta.'; $messages['signerror'] = 'Sūtīšana neizdevās.'; $messages['signnokey'] = 'Nosūtīt neizdevās. Nav atrasta privātā atslēga.'; -$messages['signbadpass'] = 'Parakstīšana neizdevās. Nepareiza parole.'; $messages['signnopass'] = 'Nosūtīt neizdevās. Ir nepieciešama atslēgas parole.'; $messages['encrypterror'] = 'Šifrēšana neizdevās.'; $messages['encryptnokey'] = 'Šifrēšana neizdevās. Epastam $email netika atrasta publiskā atslēga.'; @@ -107,8 +105,8 @@ $messages['keyremoveerror'] = 'Atzīmēto atslēgu(as) neizdevās nodzēst.'; $messages['keyimporttext'] = 'Jūs varat importēt privātās un publiskās atslēgas vai anulēšanas parakstus ASCII-Armor formātā.'; $messages['formerror'] = 'Lūdzu aipildiet formu. Visi lauki ir obligāti!'; $messages['passwordsdiffer'] = 'Paroles nesakrīt!'; -$messages['nonameident'] = 'Identitātei jābūt ar definētu lietotāja vārdu!'; $messages['keygenerateerror'] = 'Neizdevās uzģenerēt atslēgu pāri.'; $messages['keygeneratesuccess'] = 'Atslēgu pāris veiksmīgi uzģenerēts un ieimportēts.'; $messages['keygennosupport'] = 'Nav iespējams uzģenerēt atslēgu pāri, jo Jūsu tīmekļa pārlūks neatbalsta kriptogrāfijas iespējas!'; +$messages['nonameident'] = 'Identitātei jābūt ar definētu lietotāja vārdu!'; ?> diff --git a/plugins/enigma/localization/nl_NL.inc b/plugins/enigma/localization/nl_NL.inc index 88b3d5be271..8e6e9059d02 100644 --- a/plugins/enigma/localization/nl_NL.inc +++ b/plugins/enigma/localization/nl_NL.inc @@ -81,6 +81,8 @@ $labels['keyexportprompt'] = 'Wilt u geheime sleutels bewaren in het opgeslagen $labels['onlypubkeys'] = 'Alleen publieke sleutels exporteren'; $labels['withprivkeys'] = 'Geheime sleutels exporteren'; $labels['findkey'] = 'Zoek op keyserver(s)'; +$labels['keyimportlabel'] = 'Importeer van bestand'; +$labels['keyimportsearchlabel'] = 'Zoek op keyserver(s)'; $messages['sigvalid'] = 'Ondertekening van $sender geverifieerd.'; $messages['sigvalidpartial'] = 'Ondertekening van $sender geverifieerd, maar een deel van de inhoud was niet ondertekend.'; $messages['siginvalid'] = 'Ongeldige ondertekening van $sender.'; @@ -90,12 +92,10 @@ $messages['sigerror'] = 'Niet-geverifieerde ondertekening. Interne fout.'; $messages['decryptok'] = 'Bericht ontsleuteld.'; $messages['decrypterror'] = 'Ontsleutelen mislukt.'; $messages['decryptnokey'] = 'Ontsleutelen mislukt. Geheime sleutel niet gevonden. Sleutel-ID: $keyid.'; -$messages['decryptbadpass'] = 'Ontsleutelen mislukt. Wachtwoord onjuist.'; $messages['decryptnopass'] = 'Ontsleutelen mislukt. Sleutelwachtwoord vereist.'; $messages['decryptpartial'] = 'Bericht ontsleuteld, maar een deel van de inhoud was niet versleuteld.'; $messages['signerror'] = 'Ondertekenen mislukt.'; $messages['signnokey'] = 'Ondertekenen mislukt. Geheime sleutel niet gevonden.'; -$messages['signbadpass'] = 'Ondertekenen mislukt. Wachtwoord onjuist.'; $messages['signnopass'] = 'Ondertekenen mislukt. Sleutelwachtwoord vereist.'; $messages['encrypterror'] = 'Versleutelen mislukt.'; $messages['encryptnokey'] = 'Onsleutelen mislukt. Publieke sleutel niet gevonden voor $email.'; @@ -110,10 +110,11 @@ $messages['keyremoveconfirm'] = 'Weet u zeker dat u de geselecteerde sleutel(s) $messages['keyremovesuccess'] = 'Sleutel(s) succesvol verwijderd'; $messages['keyremoveerror'] = 'Geselecteerde sleutel(s) kunnen niet worden verwijderd.'; $messages['keyimporttext'] = 'U kunt geheime en publieke sleutel(s) of intrek-ondertekeningen importeren in ASCII-Armor formaat.'; +$messages['keyimportsearchtext'] = 'U kunt naar publieke sleutels zoeken op basis van sleutel identifier, gebruikersnaam of e-mailadres en ze vervolgens direct importeren.'; $messages['formerror'] = 'Vul alstublieft het formulier in. Alle velden zijn vereist!'; $messages['passwordsdiffer'] = 'Wachtwoorden komen niet overeen!'; -$messages['nonameident'] = 'Identiteit moet een gebruikersnaam hebben!'; $messages['keygenerateerror'] = 'Genereren van een sleutelpaar is mislukt'; $messages['keygeneratesuccess'] = 'Een sleutelpaar is succesvol gegenereerd en geïmporteerd.'; $messages['keygennosupport'] = 'Uw webbrowser ondersteunt geen cryptografie. Sleutelpaar genereren is mislukt!'; +$messages['nonameident'] = 'Identiteit moet een gebruikersnaam hebben!'; ?> diff --git a/plugins/enigma/localization/pl_PL.inc b/plugins/enigma/localization/pl_PL.inc index f0b2cd36dc9..78c1125c07f 100644 --- a/plugins/enigma/localization/pl_PL.inc +++ b/plugins/enigma/localization/pl_PL.inc @@ -81,6 +81,8 @@ $labels['keyexportprompt'] = 'Czy chcesz dołączyć klucze prywatne do utworzon $labels['onlypubkeys'] = 'Eksportuj tylko klucze publiczne'; $labels['withprivkeys'] = 'Eksportuj klucze prywatne'; $labels['findkey'] = 'Wyszukaj na serwerach kluczy'; +$labels['keyimportlabel'] = 'Import z pliku'; +$labels['keyimportsearchlabel'] = 'Wyszukiwanie na serwerach kluczy'; $messages['sigvalid'] = 'Zweryfikowany podpis nadawcy $sender.'; $messages['sigvalidpartial'] = 'Zweryfikowany podpis od $sender, ale część wiadomości nie została podpisana.'; $messages['siginvalid'] = 'Błędny podpis nadawcy $sender.'; @@ -90,12 +92,10 @@ $messages['sigerror'] = 'Podpis niezweryfikowany. Błąd wewnętrzny.'; $messages['decryptok'] = 'Wiadomość odszyfrowana.'; $messages['decrypterror'] = 'Nie udało się odszyfrować wiadomości.'; $messages['decryptnokey'] = 'Odszyfrowanie nie powiodło się. Brak klucza prywatnego. ID klucza: $keyid.'; -$messages['decryptbadpass'] = 'Odszyfrowanie nie powiodło się. Niepoprawne hasło.'; $messages['decryptnopass'] = 'Odszyfrowanie nie powiodło się. Hasło jest wymagane.'; $messages['decryptpartial'] = 'Wiadomość odszyfrowana, ale jej część nie była zaszyfrowana.'; $messages['signerror'] = 'Błąd podpisywania.'; $messages['signnokey'] = 'Błąd podpisywania. Nie znaleziono klucza prywatnego.'; -$messages['signbadpass'] = 'Błąd podpisywania. Nieprawidłowe hasło.'; $messages['signnopass'] = 'Błąd podpisywania. Wymagane hasło klucza.'; $messages['encrypterror'] = 'Błąd szyfrowania.'; $messages['encryptnokey'] = 'Błąd szyfrowania. Nie znaleziono klucza publicznego dla $email.'; @@ -110,10 +110,12 @@ $messages['keyremoveconfirm'] = 'Czy na pewno chcesz usunąć wybrane klucze?'; $messages['keyremovesuccess'] = 'Klucze zostały usunięte.'; $messages['keyremoveerror'] = 'Nie można usunąć wybranych kluczy.'; $messages['keyimporttext'] = 'Możesz zaimportować klucze prywatne i publiczne oraz sygnatury unieważniające w formacie ASCII-Armor.'; +$messages['keyimportsearchtext'] = 'Możesz wyszukiwać przy użyciu identyfikatora klucza, nazwy użytkownika lub adresu email, a następnie bezpośrednio zaimportować wyszukane klucze.'; $messages['formerror'] = 'Proszę wypełnić formularz. Wszystkie pola są wymagane!'; $messages['passwordsdiffer'] = 'Hasła nie pasują!'; -$messages['nonameident'] = 'Tożsamość musi zawierać nazwę użytkownika!'; $messages['keygenerateerror'] = 'Generowanie pary kluczy nie powiodło się'; $messages['keygeneratesuccess'] = 'Para kluczy została zapisana.'; $messages['keygennosupport'] = 'Twoja przeglądarka nie obsługuje kryptografii. Nie można wygenerować kluczy!'; +$messages['noidentselected'] = 'Należy wybrać przynajmniej jedną tożsamość!'; +$messages['nonameident'] = 'Tożsamość musi zawierać nazwę użytkownika!'; ?> diff --git a/plugins/enigma/localization/pt_BR.inc b/plugins/enigma/localization/pt_BR.inc index a7697481e69..f3b62d5f169 100644 --- a/plugins/enigma/localization/pt_BR.inc +++ b/plugins/enigma/localization/pt_BR.inc @@ -50,6 +50,7 @@ $labels['supportsignatures'] = 'Habilitar verificação de mensagens assinadas'; $labels['supportdecryption'] = 'habilita descriptografia de mensagens'; $labels['signdefault'] = 'Assinar todas as mensagens por padrão'; $labels['encryptdefault'] = 'Criptografar todas as mensagens por padrão'; +$labels['attachpubkeydefault'] = 'Anexar minha chave PGP pública'; $labels['passwordtime'] = 'Mantenha senhas de chave privada para'; $labels['nminutes'] = '$m minuto(s)'; $labels['wholesession'] = 'toda a sessão'; @@ -75,7 +76,15 @@ $labels['signmsg'] = 'Assinar digitalmente essa mensagem'; $labels['enterkeypasstitle'] = 'Digite a frase secreta da chave'; $labels['enterkeypass'] = 'Uma frase secreta é necessária para desbloquear a chave ($keyid) para o usuário: $user.'; $labels['arialabelkeyexportoptions'] = 'Opções de exportação das chaves'; +$labels['attachpubkeymsg'] = 'Anexar minha chave pública'; +$labels['keyexportprompt'] = 'Deseja incluir chaves secretas no arquivo de chaves OpenPGP salva?'; +$labels['onlypubkeys'] = 'Exportar somente Chaves Públicas'; +$labels['withprivkeys'] = 'Exportar Chaves Secretas'; +$labels['findkey'] = 'Procurar no(s) servidor(es) de chaves'; +$labels['keyimportlabel'] = 'Importar do arquivo'; +$labels['keyimportsearchlabel'] = 'Procurar no(s) servidor(es) de chaves'; $messages['sigvalid'] = 'Verificar assinatura de $sender.'; +$messages['sigvalidpartial'] = 'Verificar assinatura de $sender, mas parte do corpo não foi assinada.'; $messages['siginvalid'] = 'Assinatura inválida de $sender.'; $messages['sigunverified'] = 'Assinatura não verificada. Certificado não verificado. Certificado de ID: $keyid.'; $messages['signokey'] = 'Assinatura não verificada. Chave pública não encontrada. Chave de ID: $keyid.'; @@ -83,13 +92,15 @@ $messages['sigerror'] = 'Assinatura não verificada. Erro interno.'; $messages['decryptok'] = 'Mensagem descriptografada'; $messages['decrypterror'] = 'Falha ao descriptografar.'; $messages['decryptnokey'] = 'Falha ao descriptografar. Chave privada não encontrada. Chave de ID: $keyid.'; -$messages['decryptbadpass'] = 'Falha ao descriptografar. Senha inválida.'; +$messages['decryptnopass'] = 'Falha ao descriptografar. Senha chave requerida.'; +$messages['decryptpartial'] = 'Mensagem descriptografada, mas parte do corpo não foi encriptado.'; $messages['signerror'] = 'Assinatura falhou.'; $messages['signnokey'] = 'Assinatura falhou. Chave privada não encontrada.'; -$messages['signbadpass'] = 'Assinatura falhou. Senha incorreta.'; +$messages['signnopass'] = 'Assinatura falhou. Senha chave requerida.'; $messages['encrypterror'] = 'Falha ao criptografar.'; $messages['encryptnokey'] = 'Falha ao criptografar. Chave pública não encontrada para $email.'; $messages['nokeysfound'] = 'Nenhuma chave encontrada'; +$messages['keynotfound'] = 'Chave não encontrada!'; $messages['keyopenerror'] = 'Não é possível obter informações da chave! Erro interno.'; $messages['keylisterror'] = 'Não é possível listar as chaves! Erro interno.'; $messages['keysimportfailed'] = 'Não é possível importar chave(s)! Erro interno.'; @@ -99,10 +110,12 @@ $messages['keyremoveconfirm'] = 'Tem a certeza, de que deseja excluir a seleçã $messages['keyremovesuccess'] = 'Chave(s) deletada com sucvesso'; $messages['keyremoveerror'] = 'Não é possível excluir a seleção de chave(s).'; $messages['keyimporttext'] = 'Você pode importar chaves privadas e publicas ou assinaturas de revogação em formato ASCII-Armor.'; +$messages['keyimportsearchtext'] = 'Você pode procurar por chaves públicas pelo identificador de chaves, nome do usuário ou e-mail, e então importá-las diretamente.'; $messages['formerror'] = 'Por favor, preencha o formulário. Todos os campos são necessários!'; $messages['passwordsdiffer'] = 'Senhas não conferem!'; -$messages['nonameident'] = 'A identificação deve ter um nome de usuário definido!'; $messages['keygenerateerror'] = 'Falha ao gerar um par de chaves'; $messages['keygeneratesuccess'] = 'Um par de chaves foi gerado e importado com sucesso.'; $messages['keygennosupport'] = 'Seu navegador não suporta criptografia. Não é possível gerar um par de chaves!'; +$messages['noidentselected'] = 'Você tem que selecionar ao menos uma identidade para a chave!'; +$messages['nonameident'] = 'A identificação deve ter um nome de usuário definido!'; ?> diff --git a/plugins/enigma/localization/pt_PT.inc b/plugins/enigma/localization/pt_PT.inc index d0c2db10838..784b07ae80c 100644 --- a/plugins/enigma/localization/pt_PT.inc +++ b/plugins/enigma/localization/pt_PT.inc @@ -92,12 +92,12 @@ $messages['sigerror'] = 'Assinatura não verificada. Erro interno.'; $messages['decryptok'] = 'Mensagem desencriptada.'; $messages['decrypterror'] = 'A desencriptação falhou.'; $messages['decryptnokey'] = 'A desencriptação falhou. Chave privada não encontrada. ID da chave: $keyid.'; -$messages['decryptbadpass'] = 'A desencriptação falhou. Palavra-passe errada.'; +$messages['decryptbadpass'] = 'A desencriptação falhou. Palavra-passe inválida.'; $messages['decryptnopass'] = 'A desencriptação falhou. Chave necessária.'; $messages['decryptpartial'] = 'Mensagem desencriptada, mas parte do corpo não foi encriptado.'; $messages['signerror'] = 'A assinatura falhou.'; $messages['signnokey'] = 'A assinatura falhou. Chave privada não encontrada.'; -$messages['signbadpass'] = 'A assinatura falhou. Palavra-passe errada.'; +$messages['signbadpass'] = 'A assinatura falhou. Palavra-passe inválida.'; $messages['signnopass'] = 'A assinatura falhou. Chave necessária.'; $messages['encrypterror'] = 'A encriptação falhou.'; $messages['encryptnokey'] = 'A encriptação falhou. Chave pública não encontrada para $email.'; @@ -115,8 +115,9 @@ $messages['keyimporttext'] = 'Pode importar chaves privadas e públicas ou de re $messages['keyimportsearchtext'] = 'Pode procurar por chaves públicas através de identificadores de chave, nome de utilizador ou endereço de e-mail e, em seguida, importá-las directamente.'; $messages['formerror'] = 'Por favor, preencha o formulário. Todos os campos são obrigatórios!'; $messages['passwordsdiffer'] = 'As palavras-passe não coincidem!'; -$messages['nonameident'] = 'A identidade deve ter um nome de utilizador definido!'; $messages['keygenerateerror'] = 'Falha ao gerar o par de chaves'; $messages['keygeneratesuccess'] = 'Foi gerado e importado, com sucesso, um par de chaves.'; $messages['keygennosupport'] = 'O seu navegador não suporta criptografia. Não foi possível gerar um par de chaves!'; +$messages['noidentselected'] = 'Tem de seleccionar pelo menos uma identidade para a chave!'; +$messages['nonameident'] = 'A identidade deve ter um nome de utilizador definido!'; ?> diff --git a/plugins/enigma/localization/ru_RU.inc b/plugins/enigma/localization/ru_RU.inc index d8e9f2e2ac4..b8aaab5cdd7 100644 --- a/plugins/enigma/localization/ru_RU.inc +++ b/plugins/enigma/localization/ru_RU.inc @@ -81,6 +81,8 @@ $labels['keyexportprompt'] = 'Вы хотите включить закрыты $labels['onlypubkeys'] = 'Экспортировать только открытые ключи'; $labels['withprivkeys'] = 'Экспортировать закрытые ключи'; $labels['findkey'] = 'Поиск на сервере(-ах) ключей'; +$labels['keyimportlabel'] = 'Импортировать из файла'; +$labels['keyimportsearchlabel'] = 'Поиск на сервере(-ах) ключей'; $messages['sigvalid'] = 'Проверенная подпись $sender.'; $messages['sigvalidpartial'] = 'Проверенная подпись $sender, но часть сообщения не подписана.'; $messages['siginvalid'] = 'Недействительная подпись $sender.'; @@ -90,12 +92,10 @@ $messages['sigerror'] = 'Непроверенная подпись. Внутре $messages['decryptok'] = 'Сообщение расшифровано.'; $messages['decrypterror'] = 'Сбой расшифровки.'; $messages['decryptnokey'] = 'Сбой расшифровки. Закрытый ключ не найден. ID ключа: $keyid.'; -$messages['decryptbadpass'] = 'Сбой расшифровки. Неверный пароль.'; $messages['decryptnopass'] = 'Сбой расшифровки. Требуется ключ пароля.'; $messages['decryptpartial'] = 'Сообщение расшифровано, но часть сообщения не была зашифрована.'; $messages['signerror'] = 'Сбой подписания.'; $messages['signnokey'] = 'Сбой подписания. Закрытый ключ не найден.'; -$messages['signbadpass'] = 'Сбой подписания. Неверный пароль.'; $messages['signnopass'] = 'Сбой подписания. Требуется ключ пароля.'; $messages['encrypterror'] = 'Сбой шифрования.'; $messages['encryptnokey'] = 'Сбой шифрования. Не найден открытый ключ для $email.'; @@ -110,10 +110,12 @@ $messages['keyremoveconfirm'] = 'Вы уверенны, что хотите уд $messages['keyremovesuccess'] = 'Ключ(и) успешно удален(ы)'; $messages['keyremoveerror'] = 'Невозможно удалить выделенный(е) ключ(и).'; $messages['keyimporttext'] = 'Вы можете импортировать закрытый и открытый ключ(и) или подписи отзыва в формате ASCII-Armor.'; +$messages['keyimportsearchtext'] = 'Вы можете искать открытые ключи по идентификатору ключа, имени пользователя или адресу электронной почты, а затем импортировать их напрямую.'; $messages['formerror'] = 'Заполните форму. Все поля обязательны!'; $messages['passwordsdiffer'] = 'Пароли не совпадают!'; -$messages['nonameident'] = 'У профиля должно быть определено имя пользователя!'; $messages['keygenerateerror'] = 'Не удалось создать пару ключей'; $messages['keygeneratesuccess'] = 'Пара ключей создана и успешно импортирована.'; $messages['keygennosupport'] = 'Ваш браузер не поддерживает шифрование. Невозможно создать пару ключей!'; +$messages['noidentselected'] = 'Вы должны выбрать по крайней мере один профиль для ключа!'; +$messages['nonameident'] = 'У профиля должно быть определено имя пользователя!'; ?> diff --git a/plugins/enigma/localization/sk_SK.inc b/plugins/enigma/localization/sk_SK.inc index 1e8f25b601e..d4b42399bbf 100644 --- a/plugins/enigma/localization/sk_SK.inc +++ b/plugins/enigma/localization/sk_SK.inc @@ -92,12 +92,10 @@ $messages['sigerror'] = 'Neoverený podpis. Interná chyba.'; $messages['decryptok'] = 'Správa bola dešifrovaná.'; $messages['decrypterror'] = 'Dešifrovanie nebolo úspešné.'; $messages['decryptnokey'] = 'Dešifrovanie nebolo úspešné. Súkromný kľúč sa nenašiel. ID kľúča: $keyid.'; -$messages['decryptbadpass'] = 'Dešifrovanie nebolo úspešné. Nesprávne heslo.'; $messages['decryptnopass'] = 'Dešifrovanie nebolo úspešné. Vyžaduje sa kľúčové heslo.'; $messages['decryptpartial'] = 'Správa bola dešifrovaná, ale časť jej tela nebola zašifrovaná.'; $messages['signerror'] = 'Vloženie podpisu bolo neúspešné.'; $messages['signnokey'] = 'Vloženie podpisu bolo neúspešné. Nenašiel sa súkromný kľúč.'; -$messages['signbadpass'] = 'Vloženie podpisu nebolo úspešné. Nesprávne heslo.'; $messages['signnopass'] = 'Vloženie podpisu nebolo úspešné. Vyžaduje sa kľúčové heslo.'; $messages['encrypterror'] = 'Šifrovanie nebolo úspešné.'; $messages['encryptnokey'] = 'Šifrovanie nebolo úspešné. Nenašiel sa verejný kľúč pre $email.'; @@ -115,8 +113,9 @@ $messages['keyimporttext'] = 'Môžete naimportovať súkromné a verejné kľú $messages['keyimportsearchtext'] = 'Verejné kľúče môžete vyhľadávať podľa identifikátora kľúča, mena používateľa alebo e-mailovej adresy a potom ich priamo importovať.'; $messages['formerror'] = 'Prosím vyplňte formulár. Je nutné vyplniť všetky polia!'; $messages['passwordsdiffer'] = 'Heslá sa nezhodujú!'; -$messages['nonameident'] = 'Identita musí mať definované meno používateľa!'; $messages['keygenerateerror'] = 'Nepodarilo sa vygenerovať pár kľúčov'; $messages['keygeneratesuccess'] = 'Pár kľúčov bol úspešne vygenerovaný a naimportovaný.'; $messages['keygennosupport'] = 'Váš internetový prehliadač nepodporuje kryptografiu. Nemožno vygenerovať pár kľúčov!'; +$messages['noidentselected'] = 'Pre tento kľúč si musíte vybrať aspoň jednu identitu!'; +$messages['nonameident'] = 'Identita musí mať definované meno používateľa!'; ?> diff --git a/plugins/enigma/localization/sq_AL.inc b/plugins/enigma/localization/sq_AL.inc new file mode 100644 index 00000000000..274f95ab78a --- /dev/null +++ b/plugins/enigma/localization/sq_AL.inc @@ -0,0 +1,123 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/ +*/ +$labels['encryption'] = 'Fshehtëzim'; +$labels['enigmacerts'] = 'Dëshmi S/MIME'; +$labels['enigmakeys'] = 'Kyçe PGP'; +$labels['keysfromto'] = 'Kyçat nga $from deri në $to nga $count gjithsej'; +$labels['keyname'] = 'Emër'; +$labels['keyid'] = 'ID Kyçi'; +$labels['keyuserid'] = 'ID Përdoruesi'; +$labels['keytype'] = 'Lloj kyçi'; +$labels['fingerprint'] = 'Shenja gishtash'; +$labels['subkeys'] = 'Nënkyç'; +$labels['basicinfo'] = 'Informacion bazë'; +$labels['userids'] = 'Përdorues Shtesë'; +$labels['typepublickey'] = 'kyç publik'; +$labels['typekeypair'] = 'çift kyçesh'; +$labels['keyattfound'] = 'Ky mesazh përmban kyçin(et) PGP të bashkëngjitur.'; +$labels['keyattimport'] = 'Importo kyç(e)'; +$labels['typesign'] = 'Nënshkruaje'; +$labels['typeencrypt'] = 'Fshehtëzoje'; +$labels['typecert'] = 'Dëshmoje'; +$labels['typeauth'] = 'Mirëfilltësim'; +$labels['subkeyid'] = 'ID'; +$labels['subkeyalgo'] = 'Algoritëm'; +$labels['subkeycreated'] = 'Krijuar më'; +$labels['subkeyexpires'] = 'Skadon më'; +$labels['subkeyusage'] = 'Përdorim'; +$labels['expiresnever'] = 'kurrë'; +$labels['unknown'] = 'i panjohur'; +$labels['uservalid'] = 'I vlefshëm'; +$labels['userid'] = 'ID'; +$labels['valid'] = 'i vlefshëm'; +$labels['supportencryption'] = 'Aktivizo fshehtëzim dhe nënshkrim mesazhesh'; +$labels['supportsignatures'] = 'Aktivizo verifikim nënshkrimesh mesazhi'; +$labels['supportdecryption'] = 'Aktivizo çfshehtëzim mesazhi'; +$labels['signdefault'] = 'Si parazgjedhje, nënshkruaji krejt mesazhet'; +$labels['encryptdefault'] = 'Si parazgjedhje, fshehtëzoji krejt mesazhet'; +$labels['attachpubkeydefault'] = 'Bashkëngjite kyçin tim publik, si parazgjedhje'; +$labels['passwordtime'] = 'Fjalëkalimet e kyçeve privatë mbaji për'; +$labels['nminutes'] = '$m minutë(a)'; +$labels['wholesession'] = 'krejt sesionin'; +$labels['createkeys'] = 'Krijoni një çift të ri kyçesh'; +$labels['importkeys'] = 'Importo kyç(e)'; +$labels['exportkeys'] = 'Eksporto kyç(e)'; +$labels['keyactions'] = 'Veprime kyçesh…'; +$labels['keyremove'] = 'Hiqe'; +$labels['keydisable'] = 'Çaktivizoje'; +$labels['keyrevoke'] = 'Shfuqizoje'; +$labels['keysend'] = 'Dërgo kyç publik në mesazh'; +$labels['keychpass'] = 'Ndryshoni fjalëkalimin'; +$labels['newkeyident'] = 'Identitet'; +$labels['newkeypass'] = 'Fjalëkalim:'; +$labels['newkeypassconfirm'] = 'Ripohoni fjalëkalimin:'; +$labels['newkeysize'] = 'Madhësi kyçi:'; +$labels['key2048'] = '2048 bite - parazgjedhje'; +$labels['key4096'] = '4096 bite - më i sigurt'; +$labels['keygenerating'] = 'Po prodhohen kyçe…'; +$labels['encryptionoptions'] = 'Mundësi fshehtëzimi…'; +$labels['encryptmsg'] = 'Fshehtëzoje këtë mesazj'; +$labels['signmsg'] = 'Nënshkruaje në mënyrë dixhitale këtë mesazh'; +$labels['enterkeypasstitle'] = 'Jepni frazëkalim kyçi'; +$labels['enterkeypass'] = 'Frazëkalimi është i nevojshëm për të zhbllokuar kyçin e fshehtë ($keyid) për përdoruesin: $user.'; +$labels['arialabelkeyexportoptions'] = 'Mundësi eksportimi kyçesh'; +$labels['attachpubkeymsg'] = 'Bashkëngjite kyçin tim publik'; +$labels['keyexportprompt'] = 'Doni të përfshihen kyçe të fshehtë te skedari i ruajtur për kyçe OpenPGP?'; +$labels['onlypubkeys'] = 'Eksporto Vetëm Kyçe Publikë'; +$labels['withprivkeys'] = 'Eksporto Kyçe të Fshehtë'; +$labels['findkey'] = 'Kërko në shërbyes kyçesh'; +$labels['keyimportlabel'] = 'Importo prej skedari'; +$labels['keyimportsearchlabel'] = 'Kërko në shërbyes kyçesh'; +$messages['sigvalid'] = 'Nënshkrim nga $sender i verifikuar.'; +$messages['sigvalidpartial'] = 'Nënshkrim nga $sender i verifikuar, por s’pati të nënshkruar pjesë lënde.'; +$messages['siginvalid'] = 'Nënshkrim i pavlefshëm nga $sender.'; +$messages['sigunverified'] = 'Nënshkrim i paverifikuar. Dëshmia s’u verifikua. ID Dëshmie: $keyid.'; +$messages['signokey'] = 'Nënshkrim i paverifikuar. S’u gjet kyç. ID Kyçi: $keyid.'; +$messages['sigerror'] = 'Nënshkrim i paverifikuar. Gabim i brendshëm.'; +$messages['decryptok'] = 'Mesazhi u çfshehtëzua.'; +$messages['decrypterror'] = 'Çfshehtëzimi dështoi.'; +$messages['decryptnokey'] = 'Çfshehtëzimi dështoi. S’u gjet kyç privat. ID Kyçi: $keyid.'; +$messages['decryptbadpass'] = 'Shfshehtëzimi dështoi. Fjalëkalim i pavlefshëm.'; +$messages['decryptnopass'] = 'Çfshehtëzimi dështoi. Lypset fjalëkalim kyçi.'; +$messages['decryptpartial'] = 'Mesazhi u çfshehtëzua, por një pjesë e lëndë s’u çfshehtëzua.'; +$messages['signerror'] = 'Nënshkrimi dështoi.'; +$messages['signnokey'] = 'Nënshkrimi dështoi. S’u gjet kyç privat.'; +$messages['signbadpass'] = 'Hyrja dështoi. Fjalëkalim i pavlefshëm.'; +$messages['signnopass'] = 'Nënshkrimi dështoi. Lypset fjalëkalim kyçi.'; +$messages['encrypterror'] = 'Fshehtëzimi dështoi.'; +$messages['encryptnokey'] = 'Fshehtëzimi dështoi. S’u gjet kyç publik për $email'; +$messages['nokeysfound'] = 'S’u gjetën kyçe'; +$messages['keynotfound'] = 'S’u gjet kyç!'; +$messages['keyopenerror'] = 'I pazoti të marrë të dhëna kyçi! Gabim i brendshëm.'; +$messages['keylisterror'] = 'I pazoti të paraqesë kyçe! Gabim i brendshëm.'; +$messages['keysimportfailed'] = 'I pazoti të importojë kyç(e)! Gabim i brendshëm.'; +$messages['keysimportsuccess'] = 'Kyçi(et) u importuan me sukses. Të importuar: $new, të pandryshuar: $old.'; +$messages['keyremoving'] = 'Po hiqet kyçi(et)…'; +$messages['keyremoveconfirm'] = 'Jeni i sigurt se doni të fshihet kyçi(et) i përzgjedhur?'; +$messages['keyremovesuccess'] = 'Kyçi(et) u fshi me sukses'; +$messages['keyremoveerror'] = 'I pazoti të fshijë kyçin(et) e përzgjedhur?'; +$messages['keyimporttext'] = 'Mund të importoni kyç(e) privatë dhe publikë ose nënshkrime shfuqizimesh në formatin ASCII-Armor.'; +$messages['keyimportsearchtext'] = 'Për kyçe publikë mund të kërkoni sipas identifikuesi kyçi, emri përdoruesi ose adrese email dhe mandej t’i importoni ata drejtpërsëdrejti.'; +$messages['formerror'] = 'Ju lutemi, plotësoni formularin. Janë të domosdoshme krejt fushat!'; +$messages['passwordsdiffer'] = 'Fjalëkalimet nuk përputhen!'; +$messages['keygenerateerror'] = 'Dështoi prodhimi i një çifti kyçesh'; +$messages['keygeneratesuccess'] = 'U prodhua dhe importua me sukses një çift kyçesh.'; +$messages['keygennosupport'] = 'Shfletuesi juaj nuk e mbulon kriptografinë. I pazoti të prodhojë një çift kyçesh!'; +$messages['noidentselected'] = 'Duhet të përzgjidhni të paktën një identitet për kyçin!'; +$messages['nonameident'] = 'Identiteti duhet të ketë të përkufizuar një emër përdoruesi!'; +?> diff --git a/plugins/enigma/localization/sv_SE.inc b/plugins/enigma/localization/sv_SE.inc index d420586e9cf..9e3a4a71190 100644 --- a/plugins/enigma/localization/sv_SE.inc +++ b/plugins/enigma/localization/sv_SE.inc @@ -81,6 +81,8 @@ $labels['keyexportprompt'] = 'Inkludera privata nycklar i den sparade nyckelfile $labels['onlypubkeys'] = 'Exportera endast offentliga nycklar'; $labels['withprivkeys'] = 'Exportera privata nycklar'; $labels['findkey'] = 'Sök nyckel på en eller flera servrar'; +$labels['keyimportlabel'] = 'Importera från fil'; +$labels['keyimportsearchlabel'] = 'Sök nyckel på en eller flera servrar'; $messages['sigvalid'] = 'Signatur verifierad för $sender.'; $messages['sigvalidpartial'] = 'Signatur verifierad för $sender, men meddelandet var delvis osignerat.'; $messages['siginvalid'] = 'Ogiltig signatur från $sender.'; @@ -90,12 +92,10 @@ $messages['sigerror'] = 'Overifierad signatur. Internt fel.'; $messages['decryptok'] = 'Meddelandet är dekrypterat.'; $messages['decrypterror'] = 'Dekrypteringen misslyckades.'; $messages['decryptnokey'] = 'Dekrypteringen misslyckades. Privat nyckel otillgänglig. Nyckel-ID: $keyid.'; -$messages['decryptbadpass'] = 'Dekrypteringen misslyckades. Fel lösenord.'; $messages['decryptnopass'] = 'Dekrypteringen misslyckades. Ange nyckelns lösenord.'; $messages['decryptpartial'] = 'Meddelandet är dekrypterat, men meddelandet var delvis okrypterat.'; $messages['signerror'] = 'Signeringen misslyckades.'; $messages['signnokey'] = 'Signeringen misslyckades. Privat nyckel otillgänglig.'; -$messages['signbadpass'] = 'Signeringen misslyckades. Fel lösenord.'; $messages['signnopass'] = 'Signeringen misslyckades. Ange nyckelns lösenord.'; $messages['encrypterror'] = 'Krypteringen misslyckades.'; $messages['encryptnokey'] = 'Krypteringen misslyckades. Offentlig nyckel otillgänglig för $email.'; @@ -110,10 +110,12 @@ $messages['keyremoveconfirm'] = 'Vill du ta bort markerade nycklar?'; $messages['keyremovesuccess'] = 'Nycklar borttagna.'; $messages['keyremoveerror'] = 'Nycklarna kunde inte tas bort.'; $messages['keyimporttext'] = 'Privata och offentliga nycklar eller återkallande av signaturer kan importeras i formatet ASCII-Armor.'; +$messages['keyimportsearchtext'] = 'Offentlig nyckel kan sökas genom att ange identifierare, användarnamn eller mailadress, för att sedan importeras direkt.'; $messages['formerror'] = 'Fyll i formulärets samtliga fält.'; $messages['passwordsdiffer'] = 'Bekräftelsen av lösenordet stämmer inte.'; -$messages['nonameident'] = 'Användarnamn måste anges.'; $messages['keygenerateerror'] = 'Nyckelpar kunde inte skapas'; $messages['keygeneratesuccess'] = 'Nyckelpar skapat och importerat.'; $messages['keygennosupport'] = 'Webbläsaren saknar krypteringsfunktion. Nyckelpar kunde inte skapas.'; +$messages['noidentselected'] = 'Minst en identitet till nyckeln måste väljas!'; +$messages['nonameident'] = 'Användarnamn måste anges.'; ?> diff --git a/plugins/enigma/localization/tr_TR.inc b/plugins/enigma/localization/tr_TR.inc index 80e7ceb81ac..ae87dfad5a7 100644 --- a/plugins/enigma/localization/tr_TR.inc +++ b/plugins/enigma/localization/tr_TR.inc @@ -16,107 +16,108 @@ For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/ */ $labels['encryption'] = 'Şifreleme'; -$labels['enigmacerts'] = 'S/MIME Sertifilara'; +$labels['enigmacerts'] = 'S/MIME Sertifikaları'; $labels['enigmakeys'] = 'PGP Anahtarları'; -$labels['keysfromto'] = 'Anahtarlar $form dan $to için $count'; +$labels['keysfromto'] = 'Anahtarlar $from - $to / $count'; $labels['keyname'] = 'Ad'; -$labels['keyid'] = 'Anahtar ID'; -$labels['keyuserid'] = 'Kullanıcı ID'; -$labels['keytype'] = 'Anahtar tipi'; -$labels['fingerprint'] = 'parmakizi'; -$labels['subkeys'] = 'Altanahtarlar'; +$labels['keyid'] = 'Anahtar Kodu'; +$labels['keyuserid'] = 'Kullanıcı Kodu'; +$labels['keytype'] = 'Anahtar türü'; +$labels['fingerprint'] = 'Parmak izi'; +$labels['subkeys'] = 'Alt anahtarlar'; $labels['basicinfo'] = 'Temel Bilgiler'; $labels['userids'] = 'Ek Kullanıcılar'; $labels['typepublickey'] = 'Genel Anahtar'; $labels['typekeypair'] = 'Anahtar çifti'; -$labels['keyattfound'] = 'Mesaj ekiniz PGP anahtar(lar)ı içeriyor'; -$labels['keyattimport'] = 'Anahtar(lar)ı içeri al.'; +$labels['keyattfound'] = 'İleti ekinde PGP anahtarları var.'; +$labels['keyattimport'] = 'Anahtar(lar)ı içe aktar.'; $labels['typesign'] = 'İmza'; -$labels['typeencrypt'] = 'Şifreleme'; +$labels['typeencrypt'] = 'Şifrele'; $labels['typecert'] = 'Belgele'; -$labels['typeauth'] = 'Doğrulama'; -$labels['subkeyid'] = 'ID'; -$labels['subkeyalgo'] = 'algoritma'; +$labels['typeauth'] = 'Kimlik Doğrulaması'; +$labels['subkeyid'] = 'Kod'; +$labels['subkeyalgo'] = 'Algoritma'; $labels['subkeycreated'] = 'Oluşturuldu'; $labels['subkeyexpires'] = 'Geçerlilik süresi'; $labels['subkeyusage'] = 'Kullanım'; $labels['expiresnever'] = 'asla'; $labels['unknown'] = 'bilinmeyen'; $labels['uservalid'] = 'Geçerli'; -$labels['userid'] = 'ID'; +$labels['userid'] = 'Kod'; $labels['valid'] = 'geçerli'; -$labels['supportencryption'] = 'İletileri şifrele ve imzala'; -$labels['supportsignatures'] = 'İletilerin imzalarını doğrula'; -$labels['supportdecryption'] = 'İletilerin şifresini çöz'; -$labels['signdefault'] = 'Tüm iletileri imzala-varsayılan'; -$labels['encryptdefault'] = 'Tüm iletileri şifrele-varsayılan-'; -$labels['attachpubkeydefault'] = 'PGP anahtarını varsayılan olarak ekle'; +$labels['supportencryption'] = 'İletiler şifrelensin ve imzalansın'; +$labels['supportsignatures'] = 'İleti imzaları doğrulansın'; +$labels['supportdecryption'] = 'İleti şifreleri çözülsün'; +$labels['signdefault'] = 'Varsayılan olarak tüm iletiler imzalansın'; +$labels['encryptdefault'] = 'Varsayılan olarak tüm iletiler şifrelensin'; +$labels['attachpubkeydefault'] = 'Varsayılan olarak PGP anahtarı eklensin'; $labels['passwordtime'] = 'Parolalar için özel anahtarları tut'; -$labels['nminutes'] = '$m dakika(lar)'; -$labels['wholesession'] = 'bütün oturum'; -$labels['createkeys'] = 'Yeni anahtar çifti oluşturun'; -$labels['importkeys'] = 'Anahtar(lar)ı içeri al.'; -$labels['exportkeys'] = 'Anahtar(lar)ı dışarı ver'; -$labels['keyactions'] = 'Anahtar eylemleri'; +$labels['nminutes'] = '$m dakika'; +$labels['wholesession'] = 'tüm oturum'; +$labels['createkeys'] = 'Yeni anahtar çifti oluştur'; +$labels['importkeys'] = 'Anahtar(lar)ı içe aktar'; +$labels['exportkeys'] = 'Anahtar(lar)ı dışa aktar'; +$labels['keyactions'] = 'Anahtar işlemler...'; $labels['keyremove'] = 'Kaldır'; -$labels['keydisable'] = 'Devredışı'; -$labels['keyrevoke'] = 'Geri alın'; -$labels['keysend'] = 'Ortak anahtarı mesajla gönder'; -$labels['keychpass'] = 'Parolayı değiştirin'; +$labels['keydisable'] = 'Devre dışı'; +$labels['keyrevoke'] = 'Geri al'; +$labels['keysend'] = 'İletiyle birlikte ortak anahtar gönderilsin'; +$labels['keychpass'] = 'Parolayı değiştir'; $labels['newkeyident'] = 'Kimlik:'; $labels['newkeypass'] = 'Parola:'; -$labels['newkeypassconfirm'] = 'Porolayı doğrulayın:'; +$labels['newkeypassconfirm'] = 'Parola Onayı:'; $labels['newkeysize'] = 'Anahtar uzunluğu:'; $labels['key2048'] = '2048 bit-Varsayılan'; $labels['key4096'] = '4096 bit- daha güvenli'; $labels['keygenerating'] = 'Anahtarlar oluştur...'; -$labels['encryptionoptions'] = 'Şifreleme seçenekleri...'; +$labels['encryptionoptions'] = 'Şifreleme ayarları...'; $labels['encryptmsg'] = 'Bu iletiyi şifrele'; $labels['signmsg'] = 'İletiyi dijital imzala'; -$labels['enterkeypasstitle'] = 'Anahtar kelimenizi girin'; -$labels['enterkeypass'] = '$user Kullanıcısının anahtar kelimesi gizli anahtarı ($keyid) açmak için gerekli.'; -$labels['arialabelkeyexportoptions'] = 'Anahtarları dışa aktarma seçenekleri'; +$labels['enterkeypasstitle'] = 'Anahtar sözcüğünüzü yazın'; +$labels['enterkeypass'] = 'Gizli anahtarı ($keyid) açmak için $user kullanıcısının anahtar sözcüğü gerekli.'; +$labels['arialabelkeyexportoptions'] = 'Anahtar dışa aktarma ayarları'; $labels['attachpubkeymsg'] = 'Genel anahtarımı ekle'; $labels['keyexportprompt'] = 'OpenPGP anahtar dosyasına gizli anahtarları da kaydetmek istiyor musunuz?'; -$labels['onlypubkeys'] = 'Yalnız genel anahtarları dışarı aktar'; -$labels['withprivkeys'] = 'Gizli anahtarı dışarı aktar'; +$labels['onlypubkeys'] = 'Yalnız Genel Anahtarları Dışa Aktar'; +$labels['withprivkeys'] = 'Gizli Anahtarları Dışa Aktar'; $labels['findkey'] = 'Anahtarı sunucu(lar)da ara'; -$labels['keyimportlabel'] = 'Dosyadan al'; +$labels['keyimportlabel'] = 'Dosyadan içe aktar'; $labels['keyimportsearchlabel'] = 'Anahtarı sunucu(lar)da ara'; -$messages['sigvalid'] = 'Geçerli imza $sender den.'; -$messages['sigvalidpartial'] = '$sender imzası doğrulandı, fakat mesajın tümü imzalanmamış.'; -$messages['siginvalid'] = 'Geçersiz imza $sender den.'; -$messages['sigunverified'] = 'İmza doğrulanmamış. Sertifika doğrulanmamış. Sertifika ID: $keyid.'; -$messages['signokey'] = 'İmza doğrulanmamış. Genel anahtar bulunamadı. Anahtar ID: $keyid.'; -$messages['sigerror'] = 'Hata!... İmza doğrulanmamış.'; -$messages['decryptok'] = 'İleti şifresini çöz.'; +$messages['sigvalid'] = '$sender imzası geçerli.'; +$messages['sigvalidpartial'] = '$sender imzası doğrulandı, ancak metnin tümü imzalanmamış.'; +$messages['siginvalid'] = '$sender imzası geçersiz.'; +$messages['sigunverified'] = 'İmza doğrulanmamış. Sertifika doğrulanmamış. Sertifika Kodu: $keyid.'; +$messages['signokey'] = 'İmza doğrulanmamış. Genel anahtar bulunamadı. Anahtar Kodu: $keyid.'; +$messages['sigerror'] = 'Sorun var! İmza doğrulanmamış.'; +$messages['decryptok'] = 'İleti şifresi çözüldü.'; $messages['decrypterror'] = 'Şifre çözülemedi.'; -$messages['decryptnokey'] = 'Şifre çözülemedi. Özel anahtar bulunamadı. Anahtar ID: $keyid.'; -$messages['decryptbadpass'] = 'Şifre çözülemedi. Parola yanlış.'; +$messages['decryptnokey'] = 'Şifre çözülemedi. Özel anahtar bulunamadı. Anahtar Kodu: $keyid.'; +$messages['decryptbadpass'] = 'Şifre çözülemedi. Parola geçersiz.'; $messages['decryptnopass'] = 'Şifre çözülemedi. Anahtar parola gerekli.'; -$messages['decryptpartial'] = 'Mesaj çözüldü, fakat mesajın tümü şifrelenmemiş.'; -$messages['signerror'] = 'Geçersiz imza.'; -$messages['signnokey'] = 'Geçersiz imza. Özel anahtar bulunamadı.'; -$messages['signbadpass'] = 'Geçersiz imza. Parola yanlış.'; -$messages['signnopass'] = 'Geçersiz imza. Anahtar parola gerekli.'; -$messages['encrypterror'] = 'Şifreleme başarısız.'; -$messages['encryptnokey'] = 'Şifreleme başarısız. Genel anahtar $email içinde bulunamadı.'; +$messages['decryptpartial'] = 'İletinin şifresi çözüldü, fakat metnin tümü şifrelenmemiş.'; +$messages['signerror'] = 'İmzalama geçersiz.'; +$messages['signnokey'] = 'İmzalanamadı. Özel anahtar bulunamadı.'; +$messages['signbadpass'] = 'İmzalanamadı. Parola geçersiz.'; +$messages['signnopass'] = 'İmzalanamadı. Anahtar parola gerekli.'; +$messages['encrypterror'] = 'Şifrelenemedi.'; +$messages['encryptnokey'] = 'Şifrelenemedi. Genel anahtar $email içinde bulunamadı.'; $messages['nokeysfound'] = 'Anahtarlar bulunamadı'; $messages['keynotfound'] = 'Anahtar buunamadı!'; -$messages['keyopenerror'] = 'Hata!.. Anahtar bilgileri alınamıyor.'; -$messages['keylisterror'] = 'Hata!... Anahtar listesi yok.'; -$messages['keysimportfailed'] = 'Hata!... Anahtar(lar) aktarılamıyor.'; -$messages['keysimportsuccess'] = 'Anahtar(lar) aktarıldı. Aktarıldı: $new, başarısız: $old.'; -$messages['keyremoving'] = 'Anahtar(lar)ı kaldırın...'; -$messages['keyremoveconfirm'] = 'Seçili anahtar(lar)ı silmek istiyormusunuz?'; +$messages['keyopenerror'] = 'Sorun var! Anahtar bilgileri alınamıyor.'; +$messages['keylisterror'] = 'Sorun var! Anahtar listesi yok.'; +$messages['keysimportfailed'] = 'Sorun var! Anahtar(lar) aktarılamıyor.'; +$messages['keysimportsuccess'] = 'Anahtar(lar) içe aktarıldı. İçe Aktarılan: $new, Değişmeyen: $old.'; +$messages['keyremoving'] = 'Anahtar(lar) kaldırılıyor...'; +$messages['keyremoveconfirm'] = 'Seçilmiş anahtar(lar)ı silmek istediğinize emin misiniz?'; $messages['keyremovesuccess'] = 'Anahtar(lar) silindi'; $messages['keyremoveerror'] = 'Anahtar(lar) silinemedi.'; -$messages['keyimporttext'] = 'Özel ve genel anahtar(lar)i aktarabilir veya ASCII-Armor formatlı imzanızı geri alabilirsiniz.'; -$messages['keyimportsearchtext'] = 'Genel anahtarlar ile tanımlayıcı anahtarları email veya kullanıcı adı ile arayıp, doğrudan aktarabilirsiniz.'; -$messages['formerror'] = 'Formun doldurunuz. -Tüm alanlar zorunlu-'; -$messages['passwordsdiffer'] = 'Parolalar eşleşmiyor'; -$messages['nonameident'] = 'Kimlik için kullanıcı adı tanımlamalısınız!'; +$messages['keyimporttext'] = 'Özel ve genel anahtar(lar)ı içe aktarabilir ya da ASCII-Armor biçimindeki imzanızı geri çekebilirsiniz.'; +$messages['keyimportsearchtext'] = 'Genel anahtarları, anahtar tanımlayıcı, e-posta ya da kullanıcı adına göre arayarak doğrudan içe aktarabilirsiniz.'; +$messages['formerror'] = 'Formun doldurun. Tüm alanlar zorunludur!'; +$messages['passwordsdiffer'] = 'Parola ile onayı aynı değil!'; $messages['keygenerateerror'] = 'Anahtar çifti oluşturulamadı.'; -$messages['keygeneratesuccess'] = 'Anahtar çiftiniz oluşturuldu ve aktarıldı.'; +$messages['keygeneratesuccess'] = 'Anahtar çiftiniz oluşturuldu ve içe aktarıldı.'; $messages['keygennosupport'] = 'Tarayıcınız şifrelemeyi desteklemiyor. Anahtar çifti oluşturulamıyor.'; +$messages['noidentselected'] = 'Anahtar için en az bir kimlik seçmelisiniz!'; +$messages['nonameident'] = 'Kimlik için bir kullanıcı adı belirtmelisiniz!'; ?> diff --git a/plugins/enigma/localization/uk_UA.inc b/plugins/enigma/localization/uk_UA.inc index 4357f3d33b9..2961a486185 100644 --- a/plugins/enigma/localization/uk_UA.inc +++ b/plugins/enigma/localization/uk_UA.inc @@ -77,6 +77,12 @@ $labels['enterkeypasstitle'] = 'Введіть фразу-пароль ключ $labels['enterkeypass'] = 'Необхідна фраза-пароль для відімкнення секретного ключа ($keyid) для користувача: $user.'; $labels['arialabelkeyexportoptions'] = 'Опції експорту ключів'; $labels['attachpubkeymsg'] = 'Приєднати мій публічний ключ'; +$labels['keyexportprompt'] = 'Бажаєте включити приватні ключі у файл-ключів OpenPGP?'; +$labels['onlypubkeys'] = 'Експортувати публічні ключі'; +$labels['withprivkeys'] = 'Експортувати приватні ключі'; +$labels['findkey'] = 'Пошук по ключовому(вих) серверах'; +$labels['keyimportlabel'] = 'Імпортувати з файлу'; +$labels['keyimportsearchlabel'] = 'Пошук по ключовому(вих) серверах'; $messages['sigvalid'] = 'Перевірений підпис від $sender.'; $messages['sigvalidpartial'] = 'Перевірений підпис від $sender, але частина тіла повідомлення не було підписано.'; $messages['siginvalid'] = 'Недійсний підпис від $sender.'; @@ -86,16 +92,15 @@ $messages['sigerror'] = 'Неперевірений підпис. Внутріш $messages['decryptok'] = 'Повідомлення розшифровано.'; $messages['decrypterror'] = 'Розшифрування не вдалося.'; $messages['decryptnokey'] = 'Розшифрування не вдалося. Приватний ключ не знайдено. ID ключа: $keyid.'; -$messages['decryptbadpass'] = 'Розшифрування не вдалося. Поганий пароль.'; $messages['decryptnopass'] = 'Розшифрування не вдалося. Потрібен пароль ключа.'; $messages['decryptpartial'] = 'Повідомлення розшифроване, але частина тіла не було зашифроване.'; $messages['signerror'] = 'Підписання не вдалося.'; $messages['signnokey'] = 'Підписання не вдалося. Приватний ключ не знайдено.'; -$messages['signbadpass'] = 'Підписання не вдалося. Поганий пароль.'; $messages['signnopass'] = 'Підписання не вдалося. Потрібен пароль ключа.'; $messages['encrypterror'] = 'Шифрування не вдалося. '; $messages['encryptnokey'] = 'Шифрування не вдалося. Публічний ключ не знайдено для $email.'; $messages['nokeysfound'] = 'Не знайдено ключів'; +$messages['keynotfound'] = 'Ключ не знайдено!'; $messages['keyopenerror'] = 'Не вдалося отримати інформацію про ключ! Внутрішня помилка.'; $messages['keylisterror'] = 'Не вдалося вивести перелік ключів! Внутрішня помилка.'; $messages['keysimportfailed'] = 'Не вдалося імпортувати ключ(і)! Внутрішня помилка.'; @@ -105,10 +110,12 @@ $messages['keyremoveconfirm'] = 'Ви дійсно хочете видалити $messages['keyremovesuccess'] = 'Ключ(і) вилучено успішно'; $messages['keyremoveerror'] = 'Не вдалося вилучити обраний(-і) ключ(і).'; $messages['keyimporttext'] = 'Ви можете імпортувати приватні та публічні ключі чи підписи скасування у форматі ASCII-Armor.'; +$messages['keyimportsearchtext'] = 'Ви можете здійснювати пошук відкритих ключів за допомогою ідентифікатора ключа, ім\'я користувача або адреси електронної пошти, а потім імпортувати їх.'; $messages['formerror'] = 'Будь ласка, заповніть форму. Усі поля обов\'язкові!'; $messages['passwordsdiffer'] = 'Паролі не співпадають!'; -$messages['nonameident'] = 'Профіль повинен мати вказане ім\'я користувача!'; $messages['keygenerateerror'] = 'Не вдалося згенерувати пару ключів'; $messages['keygeneratesuccess'] = 'Пару ключів успішно згенеровано й імпортовано.'; $messages['keygennosupport'] = 'Ваш веб-браузер не підтримує криптографію. Не вдалося згенерувати пару ключів!'; +$messages['noidentselected'] = 'Ви повинні вибрати принаймні, один ідентифікатор для ключа!'; +$messages['nonameident'] = 'Профіль повинен мати вказане ім\'я користувача!'; ?> diff --git a/plugins/enigma/localization/zh_CN.inc b/plugins/enigma/localization/zh_CN.inc index 183daadffd5..ad4aca0b289 100644 --- a/plugins/enigma/localization/zh_CN.inc +++ b/plugins/enigma/localization/zh_CN.inc @@ -81,6 +81,8 @@ $labels['keyexportprompt'] = '您要在保存的 OpenPGP 密钥文件中包含 $labels['onlypubkeys'] = '仅导出公钥'; $labels['withprivkeys'] = '导出私钥'; $labels['findkey'] = '搜索密钥服务器'; +$labels['keyimportlabel'] = '从文件导入'; +$labels['keyimportsearchlabel'] = '在密钥服务器上搜索'; $messages['sigvalid'] = '已验证来自 $sender 的签名。'; $messages['sigvalidpartial'] = '已验证来自 $sender 的签名,但主体部分未被签名。'; $messages['siginvalid'] = '无效的来自 $sender 的签名。'; @@ -90,12 +92,10 @@ $messages['sigerror'] = '未验证签名。内部错误。'; $messages['decryptok'] = '邮件已解密'; $messages['decrypterror'] = '解密失败。'; $messages['decryptnokey'] = '解密失败。私钥未找到。密钥 ID: $keyid。'; -$messages['decryptbadpass'] = '解密失败。密码错误。'; $messages['decryptnopass'] = '解密失败。需要密钥密码。'; $messages['decryptpartial'] = '邮件已解密,但主体部分未被加密。'; $messages['signerror'] = '签名失败。'; $messages['signnokey'] = '签名失败。私钥未找到。'; -$messages['signbadpass'] = '签名失败。密码错误。'; $messages['signnopass'] = '签名失败。需要密钥密码。'; $messages['encrypterror'] = '加密失败。'; $messages['encryptnokey'] = '加密失败。用于 $email 的公钥未找到。'; @@ -110,10 +110,12 @@ $messages['keyremoveconfirm'] = '您确定吗,确定删除选定密钥?'; $messages['keyremovesuccess'] = '密钥删除成功'; $messages['keyremoveerror'] = '无法删除选定密钥。'; $messages['keyimporttext'] = '您可以导入私钥和公钥或废除 ASCII-Armor 格式的签名。'; +$messages['keyimportsearchtext'] = '您可以根据密钥标识符、用户名或电子邮件地址搜索公钥和直接导入它们。'; $messages['formerror'] = '请填写表单。所有字段都为必填!'; $messages['passwordsdiffer'] = '密码不匹配!'; -$messages['nonameident'] = '身份必须有一个用户名!'; $messages['keygenerateerror'] = '生成密钥对失败'; $messages['keygeneratesuccess'] = '密钥对生成和导入成功。'; $messages['keygennosupport'] = '您的网页浏览器不支持加密。无法生成密钥对!'; +$messages['noidentselected'] = '您必须为该密钥选择至少一个身份!'; +$messages['nonameident'] = '身份必须有一个用户名!'; ?> diff --git a/plugins/help/localization/is_IS.inc b/plugins/help/localization/is_IS.inc new file mode 100644 index 00000000000..98271c1cdc5 --- /dev/null +++ b/plugins/help/localization/is_IS.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Help plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/ +*/ +$labels['help'] = 'Hjálp'; +$labels['about'] = 'Um hugbúnaðinn'; +$labels['license'] = 'Notkunarleyfi'; +$labels['csrfinfo'] = 'Lestumeira uF og hvernig við verjum þig'; +?> diff --git a/plugins/help/localization/sl_SI.inc b/plugins/help/localization/sl_SI.inc index 509e667499a..c0942b46428 100644 --- a/plugins/help/localization/sl_SI.inc +++ b/plugins/help/localization/sl_SI.inc @@ -18,4 +18,5 @@ $labels['help'] = 'Pomoč'; $labels['about'] = 'Vizitka'; $labels['license'] = 'Licenca'; +$labels['csrfinfo'] = 'Preberite več o CSRF in kako ste zaščiteni'; ?> diff --git a/plugins/help/localization/sq_AL.inc b/plugins/help/localization/sq_AL.inc index 8d6dcc1f9ad..8812e3c613b 100644 --- a/plugins/help/localization/sq_AL.inc +++ b/plugins/help/localization/sq_AL.inc @@ -16,5 +16,7 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/ */ $labels['help'] = 'Ndihmë'; -$labels['license'] = 'Licenca'; +$labels['about'] = 'Rreth'; +$labels['license'] = 'Licencë'; +$labels['csrfinfo'] = 'Lexoni më teprë rreth CSRF-së dhe se si ju mbrojmë'; ?> diff --git a/plugins/help/localization/tr_TR.inc b/plugins/help/localization/tr_TR.inc index 6a79b4824c1..7b00ae873cb 100644 --- a/plugins/help/localization/tr_TR.inc +++ b/plugins/help/localization/tr_TR.inc @@ -18,5 +18,5 @@ $labels['help'] = 'Yardım'; $labels['about'] = 'Hakkında'; $labels['license'] = 'Lisans'; -$labels['csrfinfo'] = 'Sizi koruma ve CSRF hakkında daha fazla bilgi.'; +$labels['csrfinfo'] = 'Korunmanız ve CSRF hakkında ayrıntılı bilgi.'; ?> diff --git a/plugins/hide_blockquote/localization/sq_AL.inc b/plugins/hide_blockquote/localization/sq_AL.inc index 253fcd09df1..ae4d7226898 100644 --- a/plugins/hide_blockquote/localization/sq_AL.inc +++ b/plugins/hide_blockquote/localization/sq_AL.inc @@ -15,6 +15,7 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/ */ -$labels['hide'] = 'Fsheh'; -$labels['show'] = 'Shfaq'; +$labels['hide'] = 'Fshihe'; +$labels['show'] = 'Shfaqe'; +$labels['quotelimit'] = 'Fshihe citimin kur numri i rreshtave është më i madh se'; ?> diff --git a/plugins/hide_blockquote/localization/tr_TR.inc b/plugins/hide_blockquote/localization/tr_TR.inc index b9ac529cf1d..9a005bd584d 100644 --- a/plugins/hide_blockquote/localization/tr_TR.inc +++ b/plugins/hide_blockquote/localization/tr_TR.inc @@ -16,6 +16,6 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/ */ $labels['hide'] = 'Gizle'; -$labels['show'] = 'Göster'; -$labels['quotelimit'] = 'Satır sayısı şu satır sayısından fazla ise alıntıları gizle:'; +$labels['show'] = 'Görüntüle'; +$labels['quotelimit'] = 'Satır sayısı şundan fazla ise alıntılar gizlensin:'; ?> diff --git a/plugins/managesieve/localization/bg_BG.inc b/plugins/managesieve/localization/bg_BG.inc index b58288d7e89..0204a7d6637 100644 --- a/plugins/managesieve/localization/bg_BG.inc +++ b/plugins/managesieve/localization/bg_BG.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Нов набор филтри'; $labels['filtersetdel'] = 'Изтриване на текущ набор филтри'; $labels['filtersetact'] = 'Активиране на текущ набор филтри'; $labels['filtersetdeact'] = 'Деактивиране на текущ набор филтри'; +$labels['filterseteditraw'] = 'Редакция набор филтри'; $labels['filterdef'] = 'Дефиниране на филтър'; $labels['filtersetname'] = 'Име на набор филтри'; $labels['newfilterset'] = 'Нов набор филтри'; @@ -124,6 +125,7 @@ $labels['filtercreate'] = 'Използвай за нов филтър'; $labels['usedata'] = 'Използвай следните данни във филтъра:'; $labels['nextstep'] = 'Следваща стъпка'; $labels['...'] = '...'; +$labels['string'] = 'Низ'; $labels['currdate'] = 'Текуща дата'; $labels['datetest'] = 'Дата'; $labels['dateheader'] = 'заглавен блок:'; @@ -216,6 +218,7 @@ $messages['setdeleteerror'] = 'Невъзможно изтриване на из $messages['setactivated'] = 'Наборът от филтри е активиран успешно.'; $messages['setdeactivated'] = 'Наборът от филтри е деактивиран успешно.'; $messages['setdeleted'] = 'Наборът от филтри е изтрит успешно.'; +$messages['setupdated'] = 'Наборът филтри е променен успешно'; $messages['setdeleteconfirm'] = 'Сигурни ли сте, че желаете да изтриете избрания набор от филтри?'; $messages['setcreateerror'] = 'Невъзможно създаване на набор от филтри. Възникна сървърна грешка.'; $messages['setcreated'] = 'Наборът от филтри е създаден успешно.'; diff --git a/plugins/managesieve/localization/cs_CZ.inc b/plugins/managesieve/localization/cs_CZ.inc index ff3e4742050..0b392a7d58d 100644 --- a/plugins/managesieve/localization/cs_CZ.inc +++ b/plugins/managesieve/localization/cs_CZ.inc @@ -54,6 +54,7 @@ $labels['add'] = 'Přidej'; $labels['del'] = 'Smaž'; $labels['sender'] = 'Odesílatel'; $labels['recipient'] = 'Příjemce'; +$labels['vacationaddr'] = 'Mé e-mailové adresy:'; $labels['vacationdays'] = 'Počet dnů mezi automatickými odpověďmi:'; $labels['vacationinterval'] = 'Prodleva mezi automatickými odpověďmi:'; $labels['vacationreason'] = 'Zpráva (Důvod nepřítomnosti):'; @@ -171,6 +172,7 @@ $labels['vacation.end'] = 'Konec dovolené'; $labels['vacation.status'] = 'Stav'; $labels['vacation.on'] = 'Zapnuto'; $labels['vacation.off'] = 'Vypnuto'; +$labels['vacation.addresses'] = 'Mé e-mailové adresy'; $labels['vacation.interval'] = 'Doba mezi odpověďmi'; $labels['vacation.after'] = 'Uložit pravidlo o dovolené za'; $labels['vacation.saving'] = 'Ukládám data...'; @@ -187,6 +189,8 @@ $labels['ariasummaryfilterslist'] = 'Seznam filtrů'; $labels['ariasummaryfiltersetslist'] = 'Seznam sad filtrů'; $labels['filterstitle'] = 'Upravit filtry příchozích emailů'; $labels['vacationtitle'] = 'Upravit pravidlo mimo-kancelář'; +$labels['message'] = 'Zprávy'; +$labels['duplicate.uniqueid'] = 'Identifikátor:'; $messages['filterunknownerror'] = 'Neznámá chyba serveru'; $messages['filterconnerror'] = 'Nebylo možné se připojit k sieve serveru'; $messages['filterdeleteerror'] = 'Nebylo možné smazat filtr. Došlo k chybě serveru.'; diff --git a/plugins/managesieve/localization/cy_GB.inc b/plugins/managesieve/localization/cy_GB.inc index a366540e7e7..b466f24c43d 100644 --- a/plugins/managesieve/localization/cy_GB.inc +++ b/plugins/managesieve/localization/cy_GB.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Ychwanegu set hidlyddion'; $labels['filtersetdel'] = 'Dileu set hidlyddion cyfredol'; $labels['filtersetact'] = 'Dileu set hidlyddion gweithredol'; $labels['filtersetdeact'] = 'Analluogi set hidlyddion cyfredol'; +$labels['filterseteditraw'] = 'Golygu set hidlo'; $labels['filterdef'] = 'Diffiniad hidlydd'; $labels['filtersetname'] = 'Enw set hidlyddion'; $labels['newfilterset'] = 'Set hidlyddion newydd'; @@ -124,6 +125,7 @@ $labels['filtercreate'] = 'Creu hidlydd'; $labels['usedata'] = 'Defnyddio\'r wybodaeth ganlynol yn yr hidlydd:'; $labels['nextstep'] = 'Cam nesaf'; $labels['...'] = '...'; +$labels['string'] = 'Llinyn'; $labels['currdate'] = 'Dyddiad cyfredol'; $labels['datetest'] = 'Dyddiad'; $labels['dateheader'] = 'pennawd:'; @@ -216,6 +218,7 @@ $messages['setdeleteerror'] = 'Methwyd dileu y set hidlyddion ddewiswyd. Cafwyd $messages['setactivated'] = 'Bywiogwyd y set hidlydd yn llwyddiannus.'; $messages['setdeactivated'] = 'Dadfywiogwyd y set hidlydd yn llwyddiannus.'; $messages['setdeleted'] = 'Dilëuwyd y set hidlydd yn llwyddiannus.'; +$messages['setupdated'] = 'Diweddarwyd y set hidlo yn llwyddiannus.'; $messages['setdeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r set hidlydd ddewiswyd?'; $messages['setcreateerror'] = 'Methwyd creu set hidlydd. Cafwyd gwall gweinydd.'; $messages['setcreated'] = 'Crëuwyd y set hidlydd yn llwyddiannus.'; diff --git a/plugins/managesieve/localization/de_CH.inc b/plugins/managesieve/localization/de_CH.inc index 1c5650db657..dba3a402aeb 100644 --- a/plugins/managesieve/localization/de_CH.inc +++ b/plugins/managesieve/localization/de_CH.inc @@ -70,7 +70,6 @@ $labels['filtersetadd'] = 'Filtersatz anlegen'; $labels['filtersetdel'] = 'Aktuellen Filtersatz löschen'; $labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren'; $labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren'; -$labels['filterseteditraw'] = 'Filtersatz bearbeiten'; $labels['filterdef'] = 'Filterdefinition'; $labels['filtersetname'] = 'Filtersatzname'; $labels['newfilterset'] = 'Neuer Filtersatz'; @@ -125,6 +124,7 @@ $labels['filtercreate'] = 'Filter erstellen'; $labels['usedata'] = 'Die folgenden Daten im Filter benutzen:'; $labels['nextstep'] = 'Nächster Schritt'; $labels['...'] = '...'; +$labels['string'] = 'Zeichenkette'; $labels['currdate'] = 'Aktuelles Datum'; $labels['datetest'] = 'Datum'; $labels['dateheader'] = 'Kopfzeile:'; @@ -217,7 +217,6 @@ $messages['setdeleteerror'] = 'Serverfehler beim Löschen des gewählten Filters $messages['setactivated'] = 'Filtersatz erfolgreich aktiviert.'; $messages['setdeactivated'] = 'Filtersatz erfolgreich deaktiviert.'; $messages['setdeleted'] = 'Filtersatz erfolgreich gelöscht.'; -$messages['setupdated'] = 'Filtersatz wurde erfolgreich aktualisiert'; $messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?'; $messages['setcreateerror'] = 'Serverfehler beim Erstellen des Filtersatzes.'; $messages['setcreated'] = 'Filter erfolgreich erstellt.'; diff --git a/plugins/managesieve/localization/de_DE.inc b/plugins/managesieve/localization/de_DE.inc index 0fcdf81e51e..366e89bd8aa 100644 --- a/plugins/managesieve/localization/de_DE.inc +++ b/plugins/managesieve/localization/de_DE.inc @@ -183,7 +183,7 @@ $labels['vacation.keep'] = 'Behalten'; $labels['vacation.discard'] = 'Verwerfen'; $labels['vacation.redirect'] = 'Weiterleiten an'; $labels['vacation.copy'] = 'Kopie senden an'; -$labels['filladdresses'] = 'Mit allen meiner Adressen ausfüllen'; +$labels['filladdresses'] = 'Mit allen meinen Adressen ausfüllen'; $labels['arialabelfiltersetactions'] = 'Aktionen für Filtersätze'; $labels['arialabelfilteractions'] = 'Aktionen für Filter'; $labels['arialabelfilterform'] = 'Filtereigenschaften'; diff --git a/plugins/managesieve/localization/en_CA.inc b/plugins/managesieve/localization/en_CA.inc index e4291623bd1..1850bbb019b 100644 --- a/plugins/managesieve/localization/en_CA.inc +++ b/plugins/managesieve/localization/en_CA.inc @@ -68,7 +68,6 @@ $labels['filtersetadd'] = 'Add filters set'; $labels['filtersetdel'] = 'Delete current filters set'; $labels['filtersetact'] = 'Activate current filters set'; $labels['filtersetdeact'] = 'Deactivate current filters set'; -$labels['filterseteditraw'] = 'Edit filter set'; $labels['filterdef'] = 'Filter definition'; $labels['filtersetname'] = 'Filters set name'; $labels['newfilterset'] = 'New filters set'; @@ -189,7 +188,6 @@ $messages['setdeleteerror'] = 'Unable to delete selected filters set. Server err $messages['setactivated'] = 'Filters set activated successfully.'; $messages['setdeactivated'] = 'Filters set deactivated successfully.'; $messages['setdeleted'] = 'Filters set deleted successfully.'; -$messages['setupdated'] = 'Filters set updated successfully.'; $messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?'; $messages['setcreateerror'] = 'Unable to create filters set. Server error occurred.'; $messages['setcreated'] = 'Filters set created successfully.'; diff --git a/plugins/managesieve/localization/en_GB.inc b/plugins/managesieve/localization/en_GB.inc index 472ba974c13..0a0fbba5700 100644 --- a/plugins/managesieve/localization/en_GB.inc +++ b/plugins/managesieve/localization/en_GB.inc @@ -70,7 +70,6 @@ $labels['filtersetadd'] = 'Add filters set'; $labels['filtersetdel'] = 'Delete current filters set'; $labels['filtersetact'] = 'Activate current filters set'; $labels['filtersetdeact'] = 'Deactivate current filters set'; -$labels['filterseteditraw'] = 'Edit filter set'; $labels['filterdef'] = 'Filter definition'; $labels['filtersetname'] = 'Filters set name'; $labels['newfilterset'] = 'New filters set'; @@ -217,7 +216,6 @@ $messages['setdeleteerror'] = 'Unable to delete selected filters set. Server err $messages['setactivated'] = 'Filters set activated successfully.'; $messages['setdeactivated'] = 'Filters set deactivated successfully.'; $messages['setdeleted'] = 'Filters set deleted successfully.'; -$messages['setupdated'] = 'Filters set updated successfully.'; $messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?'; $messages['setcreateerror'] = 'Unable to create filters set. Server error occurred.'; $messages['setcreated'] = 'Filters set created successfully.'; diff --git a/plugins/managesieve/localization/es_ES.inc b/plugins/managesieve/localization/es_ES.inc index c2973d8e698..c7ebc34af9c 100644 --- a/plugins/managesieve/localization/es_ES.inc +++ b/plugins/managesieve/localization/es_ES.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Agregar conjunto de filtros'; $labels['filtersetdel'] = 'Eliminar conjunto de filtros actual'; $labels['filtersetact'] = 'Activar conjunto de filtros actual'; $labels['filtersetdeact'] = 'Desactivar conjunto de filtros actual'; +$labels['filterseteditraw'] = 'Editar conjunto de filtros'; $labels['filterdef'] = 'Definición de filtros'; $labels['filtersetname'] = 'Nombre del conjunto de filtros'; $labels['newfilterset'] = 'Nuevo conjunto de filtros'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'No se pudo borrar el conjunto de filtros seleccio $messages['setactivated'] = 'Conjunto de filtros activado correctamente.'; $messages['setdeactivated'] = 'Conjunto de filtros desactivado correctamente.'; $messages['setdeleted'] = 'Conjunto de filtros borrado correctamente.'; +$messages['setupdated'] = 'El conjunto de filtros se ha actualizado correctamente.'; $messages['setdeleteconfirm'] = '¿Está seguro de que desea borrar el conjunto de filtros seleccionado?'; $messages['setcreateerror'] = 'No se ha podido crear el conjunto de filtros. Ha ocurrido un error en el servidor.'; $messages['setcreated'] = 'Conjunto de filtros creado correctamente.'; diff --git a/plugins/managesieve/localization/fr_FR.inc b/plugins/managesieve/localization/fr_FR.inc index 429f4ad529e..cbff68bb8d9 100644 --- a/plugins/managesieve/localization/fr_FR.inc +++ b/plugins/managesieve/localization/fr_FR.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Ajouter un jeu de filtres'; $labels['filtersetdel'] = 'Supprimer le jeu de filtres actuel'; $labels['filtersetact'] = 'Activer le jeu de filtres actuel'; $labels['filtersetdeact'] = 'Désactiver le jeu de filtres actuel'; +$labels['filterseteditraw'] = 'Modifier le jeu de filtres'; $labels['filterdef'] = 'Définition du filtre'; $labels['filtersetname'] = 'Nom du jeu de filtres'; $labels['newfilterset'] = 'Nouveau jeu de filtres'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'Impossible de supprimer le jeu de filtres sélect $messages['setactivated'] = 'Le jeu de filtres a été activé avec succès.'; $messages['setdeactivated'] = 'Le jeu de filtres a été désactivé avec succès.'; $messages['setdeleted'] = 'Le jeu de filtres a été supprimé avec succès.'; +$messages['setupdated'] = 'Le jeu de filtres a été mis à jour avec succès.'; $messages['setdeleteconfirm'] = 'Voulez vous vraiment supprimer le jeu de filtres sélectionné ?'; $messages['setcreateerror'] = 'Impossible de créer un jeu de filtres. Une erreur de serveur est survenue.'; $messages['setcreated'] = 'Le jeu de filtres a été créé avec succès.'; diff --git a/plugins/managesieve/localization/he_IL.inc b/plugins/managesieve/localization/he_IL.inc index 3dfb26145bb..393bc23c8c5 100644 --- a/plugins/managesieve/localization/he_IL.inc +++ b/plugins/managesieve/localization/he_IL.inc @@ -124,6 +124,7 @@ $labels['filtercreate'] = 'יצירת מסנן'; $labels['usedata'] = 'שימוש במידע שלהלן ליצירת המסנן:'; $labels['nextstep'] = 'הצעד הבא'; $labels['...'] = '...'; +$labels['string'] = 'מחרוזת'; $labels['currdate'] = 'תאריך נוכחי'; $labels['datetest'] = 'תאריך'; $labels['dateheader'] = 'כותרת:'; diff --git a/plugins/managesieve/localization/hu_HU.inc b/plugins/managesieve/localization/hu_HU.inc index 3a0e3df6ed3..6d00e6dc564 100644 --- a/plugins/managesieve/localization/hu_HU.inc +++ b/plugins/managesieve/localization/hu_HU.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Szűrő hozzáadása a készlethez'; $labels['filtersetdel'] = 'Az aktuális szűrő készlet törlése'; $labels['filtersetact'] = 'Az aktuális szűrő készlet engedélyezése'; $labels['filtersetdeact'] = 'Az aktuális szűrő készlet tiltása'; +$labels['filterseteditraw'] = 'Szűrőkészlet beállítás'; $labels['filterdef'] = 'Szűrő definíció'; $labels['filtersetname'] = 'Szűrő készlet neve'; $labels['newfilterset'] = 'Új szűrő készlet'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'Nem sikerült a kiválasztott szűrő készletet $messages['setactivated'] = 'A filter készlet engedélyezése sikeresen végrehajtódott.'; $messages['setdeactivated'] = 'A filter készlet tiltása sikeresen végrehajtódott.'; $messages['setdeleted'] = 'A filter készlet törlése sikeresen végrehajtódott.'; +$messages['setupdated'] = 'A szűrőkészlet sikeresen frissítve'; $messages['setdeleteconfirm'] = 'Biztosan törölni szeretnéd a kiválasztott szűrő készleteket?'; $messages['setcreateerror'] = 'Nem sikerült létrehozni a szűrő készletet. Szerver hiba történt.'; $messages['setcreated'] = 'A szűrő készlet sikeresen létrejött.'; diff --git a/plugins/managesieve/localization/id_ID.inc b/plugins/managesieve/localization/id_ID.inc index 17e0dfb3bbe..9d26140f065 100644 --- a/plugins/managesieve/localization/id_ID.inc +++ b/plugins/managesieve/localization/id_ID.inc @@ -54,6 +54,7 @@ $labels['add'] = 'Tambah'; $labels['del'] = 'Hapus'; $labels['sender'] = 'Pengirim'; $labels['recipient'] = 'Penerima'; +$labels['vacationaddr'] = 'Alamat email saya:'; $labels['vacationdays'] = 'Seberapa sering mengirim pesan (dalam hari):'; $labels['vacationinterval'] = 'Seberapa sering untuk pengiriman pesan:'; $labels['vacationreason'] = 'Isi pesan (alasan liburan):'; @@ -123,6 +124,7 @@ $labels['filtercreate'] = 'Buat filter'; $labels['usedata'] = 'Gunakan data berikut dalam filter:'; $labels['nextstep'] = 'Langkah Selanjutnya'; $labels['...'] = '...'; +$labels['string'] = 'String'; $labels['currdate'] = 'Tanggal sekarang'; $labels['datetest'] = 'Tanggal'; $labels['dateheader'] = 'header / tajuk:'; @@ -171,6 +173,7 @@ $labels['vacation.end'] = 'Akhir libur'; $labels['vacation.status'] = 'Status'; $labels['vacation.on'] = 'Nyala'; $labels['vacation.off'] = 'Mati'; +$labels['vacation.addresses'] = 'Alamat email saya'; $labels['vacation.interval'] = 'Balas secara interval'; $labels['vacation.after'] = 'Atur untuk pengaturan cuti setelah'; $labels['vacation.saving'] = 'Menyimpan data...'; @@ -187,12 +190,21 @@ $labels['ariasummaryfilterslist'] = 'Daftar penyaringan'; $labels['ariasummaryfiltersetslist'] = 'Daftar penyaringan yang telah di set'; $labels['filterstitle'] = 'Ubah penyaringan untuk email masuk'; $labels['vacationtitle'] = 'Ubah aturan untuk sedang-diluar-kantor'; +$labels['message'] = 'Pesan'; +$labels['duplicate'] = 'duplikat'; +$labels['notduplicate'] = 'tidak duplikat'; +$labels['duplicate.handle'] = 'handle:'; +$labels['duplicate.header'] = 'header:'; +$labels['duplicate.uniqueid'] = 'identifier:'; +$labels['duplicate.seconds'] = 'tenggat waktu (detik):'; +$labels['duplicate.last'] = 'relatif terhadap eksekusi terakhir'; $messages['filterunknownerror'] = 'Error pada server tak dikenali.'; $messages['filterconnerror'] = 'Tidak dapat menyambung ke server.'; $messages['filterdeleteerror'] = 'Tidak dapat menghapus penyaringan. Terjadi kesalahan pada server.'; $messages['filterdeleted'] = 'Penyaringan berhasil dihapus.'; $messages['filtersaved'] = 'Penyaringan berhasil disimpan.'; $messages['filtersaveerror'] = 'Tidak dapat menyimpan penyaringan. Terjadi kesalahan pada server.'; +$messages['filterformerror'] = 'Formulir penyaring memuat kesalahan.'; $messages['filterdeleteconfirm'] = 'Yakin untuk menghapus penyaringan terpilih?'; $messages['ruledeleteconfirm'] = 'Yakin untuk menghapus aturan terpilih?'; $messages['actiondeleteconfirm'] = 'Yakin untuk menghapus tindakan terpilih?'; @@ -222,4 +234,5 @@ $messages['invaliddateformat'] = 'Format tanggal atau bagian dari tanggal salah' $messages['saveerror'] = 'Tidak dapat menyimpan data. Terjadi kesalahan pada server.'; $messages['vacationsaved'] = 'Data untuk cuti berhasil disimpan.'; $messages['emptyvacationbody'] = 'Tubuh pesan liburan diperlukan!'; +$messages['duplicate.conflict.err'] = 'Header dan identifier unik keduanya tidak diijinkan.'; ?> diff --git a/plugins/managesieve/localization/it_IT.inc b/plugins/managesieve/localization/it_IT.inc index 9c4f541cb2a..5b3cc2c4fcb 100644 --- a/plugins/managesieve/localization/it_IT.inc +++ b/plugins/managesieve/localization/it_IT.inc @@ -54,6 +54,7 @@ $labels['add'] = 'Aggiungi'; $labels['del'] = 'Elimina'; $labels['sender'] = 'Mittente'; $labels['recipient'] = 'Destinatario'; +$labels['vacationaddr'] = 'I miei indirizzi email:'; $labels['vacationdays'] = 'Ogni quanti giorni ribadire il messaggio allo stesso mittente'; $labels['vacationinterval'] = 'Ogni quanto tempo inviare i messaggi:'; $labels['vacationreason'] = 'Corpo del messaggio (dettagli relativi all\'assenza):'; @@ -171,6 +172,7 @@ $labels['vacation.end'] = 'Fine vacanza'; $labels['vacation.status'] = 'Stato'; $labels['vacation.on'] = 'Attivato'; $labels['vacation.off'] = 'Disattivato'; +$labels['vacation.addresses'] = 'I miei indirizzi email'; $labels['vacation.interval'] = 'Intervallo di risposta'; $labels['vacation.after'] = 'Imposta regola di vacanza dopo'; $labels['vacation.saving'] = 'Salvataggio...'; @@ -187,6 +189,10 @@ $labels['ariasummaryfilterslist'] = 'Lista dei filtri'; $labels['ariasummaryfiltersetslist'] = 'Lista settaggio dei filtri'; $labels['filterstitle'] = 'Modifica filtri dei messaggio in arrivo'; $labels['vacationtitle'] = 'Modifica le regole del Risponditore automatico'; +$labels['message'] = 'Messaggio'; +$labels['duplicate'] = 'è duplicat'; +$labels['notduplicate'] = 'non è duplicato'; +$labels['duplicate.seconds'] = 'timeout (secondi):'; $messages['filterunknownerror'] = 'Errore sconosciuto del server'; $messages['filterconnerror'] = 'Collegamento al server managesieve fallito'; $messages['filterdeleteerror'] = 'Eliminazione del filtro fallita. Si è verificato un errore nel server.'; diff --git a/plugins/managesieve/localization/ja_JP.inc b/plugins/managesieve/localization/ja_JP.inc index b7514a5fe2e..1d231b99788 100644 --- a/plugins/managesieve/localization/ja_JP.inc +++ b/plugins/managesieve/localization/ja_JP.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'フィルターセットを追加'; $labels['filtersetdel'] = '現在のフィルターセットを削除'; $labels['filtersetact'] = '現在のフィルター セットを有効'; $labels['filtersetdeact'] = '現在のフィルター セットを無効'; +$labels['filterseteditraw'] = 'フィルターセットを編集'; $labels['filterdef'] = 'フィルターの定義'; $labels['filtersetname'] = 'フィルターセットの名前'; $labels['newfilterset'] = '新しいフィルターセット'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = '選択したフィルターセットを削除で $messages['setactivated'] = 'フィルターセットを有効にしました。'; $messages['setdeactivated'] = 'フィルターセットを無効にしました。'; $messages['setdeleted'] = 'フィルターセットを削除しました。'; +$messages['setupdated'] = 'フィルターセットを更新しました。'; $messages['setdeleteconfirm'] = '本当に選択したフィルターセットを削除しますか?'; $messages['setcreateerror'] = 'フィルターセットを作成できません。サーバーでエラーが発生しました。'; $messages['setcreated'] = 'フィルターセットを作成しました。'; diff --git a/plugins/managesieve/localization/ko_KR.inc b/plugins/managesieve/localization/ko_KR.inc index 4fc37fd62a7..7823bacb094 100644 --- a/plugins/managesieve/localization/ko_KR.inc +++ b/plugins/managesieve/localization/ko_KR.inc @@ -54,6 +54,7 @@ $labels['add'] = '추가'; $labels['del'] = '삭제'; $labels['sender'] = '발송자'; $labels['recipient'] = '수신자'; +$labels['vacationaddr'] = '내 이메일 주소:'; $labels['vacationdays'] = '메시지 발신 주기 (일):'; $labels['vacationinterval'] = '메시지 발신 주기:'; $labels['vacationreason'] = '메시지 본문 (휴가 사유):'; @@ -123,6 +124,7 @@ $labels['filtercreate'] = '필터 생성'; $labels['usedata'] = '필터에서 다음 데이터를 사용:'; $labels['nextstep'] = '다음 단계'; $labels['...'] = '...'; +$labels['string'] = '스티링'; $labels['currdate'] = '오늘 날짜'; $labels['datetest'] = '날짜'; $labels['dateheader'] = '머리글:'; @@ -171,6 +173,7 @@ $labels['vacation.end'] = '휴가 끝'; $labels['vacation.status'] = '상태'; $labels['vacation.on'] = '켬'; $labels['vacation.off'] = '끔'; +$labels['vacation.addresses'] = '내 이메일 주소'; $labels['vacation.interval'] = '회신 주기'; $labels['vacation.after'] = '다음 이후에 휴가 규칙을 위치함'; $labels['vacation.saving'] = '데이터를 저장하는 중...'; @@ -187,6 +190,10 @@ $labels['ariasummaryfilterslist'] = '필터 목록'; $labels['ariasummaryfiltersetslist'] = '필터 세트 목록'; $labels['filterstitle'] = '수신 메일 필터 편집'; $labels['vacationtitle'] = '자리비움 규칙 편집'; +$labels['message'] = '메시지'; +$labels['duplicate'] = '중복임'; +$labels['notduplicate'] = '중복 아님'; +$labels['duplicate.uniqueid'] = '식별자:'; $messages['filterunknownerror'] = '알수 없는 서버 오류.'; $messages['filterconnerror'] = '서버에 연결할 수 없습니다.'; $messages['filterdeleteerror'] = '필터를 삭제할 수 없습니다. 서버 오류가 발생했습니다.'; diff --git a/plugins/managesieve/localization/lt_LT.inc b/plugins/managesieve/localization/lt_LT.inc index 08cd9c00f53..c8cd8f55d88 100644 --- a/plugins/managesieve/localization/lt_LT.inc +++ b/plugins/managesieve/localization/lt_LT.inc @@ -54,6 +54,7 @@ $labels['add'] = 'Pridėti'; $labels['del'] = 'Pašalinti'; $labels['sender'] = 'Siuntėjas'; $labels['recipient'] = 'Gavėjas'; +$labels['vacationaddr'] = 'Mano el. pašto adresai:'; $labels['vacationdays'] = 'Kaip dažnai išsiųsti laiškus (dienomis):'; $labels['vacationinterval'] = 'Kaip dažnai siųsti laiškus:'; $labels['vacationreason'] = 'Laiško tekstas'; @@ -171,6 +172,7 @@ $labels['vacation.end'] = 'Atostogų pabaiga'; $labels['vacation.status'] = 'Būsena'; $labels['vacation.on'] = 'Įjungta'; $labels['vacation.off'] = 'Išjungta'; +$labels['vacation.addresses'] = 'Mano el. pašto adresai'; $labels['vacation.interval'] = 'Atsakymo intervalas'; $labels['vacation.after'] = 'Atostogų taisyklę pastatyti po'; $labels['vacation.saving'] = 'Išsaugomi duomenys...'; @@ -187,12 +189,18 @@ $labels['ariasummaryfilterslist'] = 'Filtrų sąrašas'; $labels['ariasummaryfiltersetslist'] = 'Filtrų rinkinių sąrašas'; $labels['filterstitle'] = 'Tvarkyti gaunamų laiškų filtrus'; $labels['vacationtitle'] = 'Redaguoti ne-biure taisyklę'; +$labels['message'] = 'Laiškas'; +$labels['duplicate'] = 'yra dubliuojamas'; +$labels['notduplicate'] = 'nėra dubliuojamas'; +$labels['duplicate.header'] = 'antraštė:'; +$labels['duplicate.uniqueid'] = 'identifikatorius:'; $messages['filterunknownerror'] = 'Nežinoma serverio klaida.'; $messages['filterconnerror'] = 'Neįmanoma užmegzti ryšio su serveriu.'; $messages['filterdeleteerror'] = 'Nepavyksta ištrinti filtro. Įvyko serverio klaida.'; $messages['filterdeleted'] = 'Filtras panaikintas sėkmingai.'; $messages['filtersaved'] = 'Filtras sėkmingai išsaugotas'; $messages['filtersaveerror'] = 'Nepavyksta išsaugoti filtro. Įvyko serverio klaida.'; +$messages['filterformerror'] = 'Filtrų formoje yra klaidų.'; $messages['filterdeleteconfirm'] = 'Ar jūs esate įsitikinęs, jog norite panaikinti pasirinktus filtrus(-ą)?'; $messages['ruledeleteconfirm'] = 'Ar jūs įsitikinęs, jog norite panaikinti pasirinktą taisyklę?'; $messages['actiondeleteconfirm'] = 'Ar jūs įsitikinęs, jog norite panaikinti pasirinktą veiksmą?'; @@ -222,4 +230,5 @@ $messages['invaliddateformat'] = 'Neteisingas datos ar jos dalies formatas'; $messages['saveerror'] = 'Nepavyksta išsaugoti duomenų. Įvyko serverio klaida.'; $messages['vacationsaved'] = 'Sėkmingai išsaugoti atostogų duomenys.'; $messages['emptyvacationbody'] = 'Atostogų pranešimui turinys būtinas!'; +$messages['duplicate.conflict.err'] = 'Naudojimas antraštės ir identifikatoriaus kartu yra draudžiamas, negalimas.'; ?> diff --git a/plugins/managesieve/localization/nl_NL.inc b/plugins/managesieve/localization/nl_NL.inc index fe8ea5136e3..35180675801 100644 --- a/plugins/managesieve/localization/nl_NL.inc +++ b/plugins/managesieve/localization/nl_NL.inc @@ -124,6 +124,7 @@ $labels['filtercreate'] = 'Filter aanmaken'; $labels['usedata'] = 'Gebruik de volgende gegevens in het filter:'; $labels['nextstep'] = 'Volgende stap'; $labels['...'] = '...'; +$labels['string'] = 'Karakterreeks'; $labels['currdate'] = 'Huidige datum'; $labels['datetest'] = 'Datum'; $labels['dateheader'] = 'header:'; diff --git a/plugins/managesieve/localization/pl_PL.inc b/plugins/managesieve/localization/pl_PL.inc index e2ffe51c008..536a8c5cd74 100644 --- a/plugins/managesieve/localization/pl_PL.inc +++ b/plugins/managesieve/localization/pl_PL.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Dodaj zbiór filtrów'; $labels['filtersetdel'] = 'Usuń bieżący zbiór filtrów'; $labels['filtersetact'] = 'Aktywuj bieżący zbiór filtrów'; $labels['filtersetdeact'] = 'Deaktywuj bieżący zbiór filtrów'; +$labels['filterseteditraw'] = 'Edytuj zbiór filtrów'; $labels['filterdef'] = 'Definicja filtra'; $labels['filtersetname'] = 'Nazwa zbioru'; $labels['newfilterset'] = 'Nowy zbiór filtrów'; @@ -147,7 +148,7 @@ $labels['address'] = 'adres'; $labels['envelope'] = 'koperta (envelope)'; $labels['modifier'] = 'modyfikator:'; $labels['text'] = 'tekst'; -$labels['undecoded'] = 'nie (raw)'; +$labels['undecoded'] = 'nieprzetworzony (raw)'; $labels['contenttype'] = 'typ części (content type)'; $labels['modtype'] = 'typ:'; $labels['allparts'] = 'wszystkie'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'Nie można usunąć wybranego zbioru filtrów. B $messages['setactivated'] = 'Zbiór filtrów został aktywowany pomyślnie.'; $messages['setdeactivated'] = 'Zbiór filtrów został deaktywowany pomyślnie.'; $messages['setdeleted'] = 'Zbiór filtrów został usunięty pomyślnie.'; +$messages['setupdated'] = 'Zbiór filtrów został zaktualizowany pomyślnie.'; $messages['setdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany zbiór filtrów?'; $messages['setcreateerror'] = 'Nie można utworzyć zbioru filtrów. Błąd serwera.'; $messages['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie.'; diff --git a/plugins/managesieve/localization/pt_PT.inc b/plugins/managesieve/localization/pt_PT.inc index bc45d16e808..02be0540afc 100644 --- a/plugins/managesieve/localization/pt_PT.inc +++ b/plugins/managesieve/localization/pt_PT.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Adicionar definição de filtros'; $labels['filtersetdel'] = 'Eliminar definição de filtros actuais'; $labels['filtersetact'] = 'Activar definição de filtros actuais'; $labels['filtersetdeact'] = 'Desactivar definição de filtros actuais'; +$labels['filterseteditraw'] = 'Editar conjunto de filtros'; $labels['filterdef'] = 'Definição de filtros'; $labels['filtersetname'] = 'Nome da definição de filtros'; $labels['newfilterset'] = 'Nova definição de filtros'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'Não foi possível eliminar os filtros selecionad $messages['setactivated'] = 'Filtros ativados com sucesso.'; $messages['setdeactivated'] = 'Filtros desativados com sucesso.'; $messages['setdeleted'] = 'Filtros eliminados com sucesso.'; +$messages['setupdated'] = 'Conjunto de filtros actualizado com sucesso.'; $messages['setdeleteconfirm'] = 'Tem a certeza que pretende eliminar os filtros selecionados?'; $messages['setcreateerror'] = 'Não foi possível criar o conjunto de filtros. Ocorreu um erro no servidor.'; $messages['setcreated'] = 'Conjunto de filtros criado com sucesso.'; diff --git a/plugins/managesieve/localization/ru_RU.inc b/plugins/managesieve/localization/ru_RU.inc index 9f14def9366..191706860e3 100644 --- a/plugins/managesieve/localization/ru_RU.inc +++ b/plugins/managesieve/localization/ru_RU.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Добавить набор фильтров'; $labels['filtersetdel'] = 'Удалить текущий набор фильтров'; $labels['filtersetact'] = 'Включить текущий набор фильтров'; $labels['filtersetdeact'] = 'Отключить текущий набор фильтров'; +$labels['filterseteditraw'] = 'Изменить набор фильтров'; $labels['filterdef'] = 'Описание фильтра'; $labels['filtersetname'] = 'Название набора фильтров'; $labels['newfilterset'] = 'Новый набор фильтров'; @@ -124,6 +125,7 @@ $labels['filtercreate'] = 'Создать фильтр'; $labels['usedata'] = 'Использовать следующие данные в фильтре:'; $labels['nextstep'] = 'Далее'; $labels['...'] = '...'; +$labels['string'] = 'Строка'; $labels['currdate'] = 'Текущая дата'; $labels['datetest'] = 'Дата'; $labels['dateheader'] = 'заголовок:'; @@ -216,6 +218,7 @@ $messages['setdeleteerror'] = 'Невозможно удалить выбран $messages['setactivated'] = 'Набор фильтров успешно включён.'; $messages['setdeactivated'] = 'Набор фильтров успешно отключён.'; $messages['setdeleted'] = 'Набор фильтров успешно удалён.'; +$messages['setupdated'] = 'Набор фильтров успешно обновлён.'; $messages['setdeleteconfirm'] = 'Вы уверены в том, что хотите удалить выбранный набор фильтров?'; $messages['setcreateerror'] = 'Невозможно создать набор фильтров. Ошибка сервера.'; $messages['setcreated'] = 'Набор фильтров успешно создан.'; diff --git a/plugins/managesieve/localization/sk_SK.inc b/plugins/managesieve/localization/sk_SK.inc index d5feddc0d77..9d6ec8636a0 100644 --- a/plugins/managesieve/localization/sk_SK.inc +++ b/plugins/managesieve/localization/sk_SK.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Pridať súpravu filtrov'; $labels['filtersetdel'] = 'Vymazať aktuálnu súpravu filtrov'; $labels['filtersetact'] = 'Aktivovať aktuálnu súpravu filtrov'; $labels['filtersetdeact'] = 'Deaktivovať aktuálnu súpravu filtrov'; +$labels['filterseteditraw'] = 'Upraviť súpravu filtrov'; $labels['filterdef'] = 'Definícia filtra'; $labels['filtersetname'] = 'Názov súpravy filtrov'; $labels['newfilterset'] = 'Nová súprava filtrov'; @@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'Nemožno vymazať vybranú súpravu filtrov. Nast $messages['setactivated'] = 'Súprava filtrov bola úspešne aktivovaná.'; $messages['setdeactivated'] = 'Súprava filtrov bola úspešne deaktivovaná.'; $messages['setdeleted'] = 'Súprava filtrov bola úspešne vymazaná.'; +$messages['setupdated'] = 'Súprava filtrov bola úspešne aktualizovaná.'; $messages['setdeleteconfirm'] = 'Naozaj chcete vymazať vybranú súpravu filtrov?'; $messages['setcreateerror'] = 'Nemožno vytvoriť súpravu filtrov. Nastala chyba servera.'; $messages['setcreated'] = 'Súprava filtrov bola úspešne vytvorená.'; diff --git a/plugins/managesieve/localization/sl_SI.inc b/plugins/managesieve/localization/sl_SI.inc index 2f18bc71257..9fc16b663bc 100644 --- a/plugins/managesieve/localization/sl_SI.inc +++ b/plugins/managesieve/localization/sl_SI.inc @@ -54,9 +54,11 @@ $labels['add'] = 'Dodaj'; $labels['del'] = 'Izbriši'; $labels['sender'] = 'Pošiljatelj'; $labels['recipient'] = 'Prejemnik'; +$labels['vacationaddr'] = 'Moji elektronski naslovi:'; $labels['vacationdays'] = 'Kako pogosto naj bodo sporočila poslana (v dnevih):'; $labels['vacationinterval'] = 'Sporočila pošlji na:'; $labels['vacationreason'] = 'Vsebina sporočila (vzrok za odsotnost):'; +$labels['vacationfrom'] = 'Naslov za odgovor:'; $labels['vacationsubject'] = 'Zadeva sporočila'; $labels['days'] = 'dni'; $labels['seconds'] = 'sekund'; @@ -68,6 +70,7 @@ $labels['filtersetadd'] = 'Dodaj nastavitev filtrov'; $labels['filtersetdel'] = 'Izbriši trenutne nastavitve filtriranja'; $labels['filtersetact'] = 'Vključi trenutno nastavitev filtriranja'; $labels['filtersetdeact'] = 'Onemogoči trenutno nastavitev filtriranja'; +$labels['filterseteditraw'] = 'Uredi nabor filtrov'; $labels['filterdef'] = 'Opis filtra'; $labels['filtersetname'] = 'Ime filtra'; $labels['newfilterset'] = 'Nov filter'; @@ -107,14 +110,22 @@ $labels['varupperfirst'] = 'prvi znak velika začetnica'; $labels['varquotewildcard'] = 'citiraj posebne znake'; $labels['varlength'] = 'dolžina'; $labels['notify'] = 'Poštlji obvestilo'; +$labels['notifytarget'] = 'Cilj obvestila:'; +$labels['notifymessage'] = 'Besedilo obvestila (ni obvezno):'; +$labels['notifyoptions'] = 'Možnosti obvestila (ni obvezno):'; +$labels['notifyfrom'] = 'Pošiljatelj obvestila (ni obvezno):'; $labels['notifyimportance'] = 'Pomembnost:'; $labels['notifyimportancelow'] = 'nizko'; $labels['notifyimportancenormal'] = 'običajno'; $labels['notifyimportancehigh'] = 'visoko'; +$labels['notifymethodmailto'] = 'E-Pošta'; +$labels['notifymethodtel'] = 'Telefon'; +$labels['notifymethodsms'] = 'SMS'; $labels['filtercreate'] = 'Ustvari filter'; $labels['usedata'] = 'Pri stvarjanju filtra uporabi naslednje podatke'; $labels['nextstep'] = 'Naslednji korak'; $labels['...'] = '...'; +$labels['string'] = 'Niz'; $labels['currdate'] = 'Današnji datum'; $labels['datetest'] = 'Datum'; $labels['dateheader'] = 'glava:'; @@ -152,12 +163,49 @@ $labels['asciicasemap'] = 'ni občutljiv na velike/male črke (ascii-casemap)'; $labels['asciinumeric'] = 'numerično (ascii-numeric)'; $labels['index'] = 'indeks:'; $labels['indexlast'] = 'obraten vrstni red'; +$labels['vacation'] = 'Odsotnost'; +$labels['vacation.reply'] = 'Sporočilo za odgovor'; +$labels['vacation.advanced'] = 'Napredne nastavitve'; +$labels['vacation.from'] = 'Naslov za odgovor'; +$labels['vacation.subject'] = 'Zadeva'; +$labels['vacation.body'] = 'Vsebina'; +$labels['vacation.start'] = 'Začetek odsotnosti'; +$labels['vacation.end'] = 'Konec odsotnosti'; +$labels['vacation.status'] = 'Status'; +$labels['vacation.on'] = 'Vključeno'; +$labels['vacation.off'] = 'Izključeno'; +$labels['vacation.addresses'] = 'Moji elektronski naslovi'; +$labels['vacation.interval'] = 'Interval za odgovor'; +$labels['vacation.after'] = 'Nastavi obvestilo o odsotnost po'; +$labels['vacation.saving'] = 'Shranjevanje podatkov...'; +$labels['vacation.action'] = 'Operacije za dohodna sporočila'; +$labels['vacation.keep'] = 'Ohrani'; +$labels['vacation.discard'] = 'Zavrži'; +$labels['vacation.redirect'] = 'Preusmeri na'; +$labels['vacation.copy'] = 'Pošlji kopijo na'; +$labels['filladdresses'] = 'Dopolni z mojimi naslovi'; +$labels['arialabelfiltersetactions'] = 'Nastavitve operacij filtrov'; +$labels['arialabelfilteractions'] = 'Operacije filtrov'; +$labels['arialabelfilterform'] = 'Lastnosti filtra'; +$labels['ariasummaryfilterslist'] = 'Seznam filtrov'; +$labels['ariasummaryfiltersetslist'] = 'Seznam filtrov'; +$labels['filterstitle'] = 'Uredi filtre za dohodno pošto'; +$labels['vacationtitle'] = 'Uredi sporočilo o odsotnosti'; +$labels['message'] = 'Sporočilo'; +$labels['duplicate'] = 'je podvojen'; +$labels['notduplicate'] = 'ni podvojen'; +$labels['duplicate.handle'] = 'ukrep:'; +$labels['duplicate.header'] = 'glava sporočila:'; +$labels['duplicate.uniqueid'] = 'označevalnik:'; +$labels['duplicate.seconds'] = 'časovna omejitev (sekunde):'; +$labels['duplicate.last'] = 'relativno glede na zadnjo izvedbo'; $messages['filterunknownerror'] = 'Prišlo je do neznane napake.'; $messages['filterconnerror'] = 'Povezave s strežnikom (managesieve) ni bilo mogoče vzpostaviti'; $messages['filterdeleteerror'] = 'Pravila ni bilo mogoče izbrisati. Prišlo je do napake.'; $messages['filterdeleted'] = 'Pravilo je bilo uspešno izbrisano.'; $messages['filtersaved'] = 'Pravilo je bilo uspešno shranjeno'; $messages['filtersaveerror'] = 'Pravila ni bilo mogoče shraniti. Prišlo je do napake.'; +$messages['filterformerror'] = 'Filter vsebuje napake.'; $messages['filterdeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?'; $messages['ruledeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?'; $messages['actiondeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano dejanje?'; @@ -170,6 +218,7 @@ $messages['setdeleteerror'] = 'Izbranih filtrov ni bilo mogoče izbrisati. Priš $messages['setactivated'] = 'Filter je bil uspešno vključen.'; $messages['setdeactivated'] = 'Filter je bil uspešno onemogočen.'; $messages['setdeleted'] = 'Filter je bil uspešno izbrisan.'; +$messages['setupdated'] = 'Filtri so bili uspešno posodobljeni.'; $messages['setdeleteconfirm'] = 'Ste prepričani, da želite izbrisati ta filter?'; $messages['setcreateerror'] = 'Nabora filtrov ni bilo mogoče ustvariti. Prišlo je do napake na strežniku.'; $messages['setcreated'] = 'Filter je bil uspešno ustvarjen.'; @@ -184,4 +233,8 @@ $messages['namereserved'] = 'Rezervirano ime.'; $messages['setexist'] = 'Nastavitev filtra že obstaja.'; $messages['nodata'] = 'Izbrana mora biti vsaj ena nastavitev!'; $messages['invaliddateformat'] = 'Neveljaven datum ali oblika zapisa datuma'; +$messages['saveerror'] = 'Podatkov ni bilo mogoče shraniti. Prišlo je do napake na strežniku.'; +$messages['vacationsaved'] = 'Podatki o odsotnosti so bili uspešno shranjeni.'; +$messages['emptyvacationbody'] = 'Zahtevana je vsebina sporočila o odsotnosti'; +$messages['duplicate.conflict.err'] = 'Tako glava sporočila kot enoličen označevalnik nista dovoljena.'; ?> diff --git a/plugins/managesieve/localization/sq_AL.inc b/plugins/managesieve/localization/sq_AL.inc index da4489b9cee..bc54b1b3a86 100644 --- a/plugins/managesieve/localization/sq_AL.inc +++ b/plugins/managesieve/localization/sq_AL.inc @@ -15,13 +15,220 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/ */ -$labels['moveup'] = 'Lëviz lartë'; -$labels['movedown'] = 'Lëviz poshtë'; +$labels['filters'] = 'Filtra'; +$labels['managefilters'] = 'Administroni filtra për postë ardhëse'; +$labels['filtername'] = 'Emër filtri'; +$labels['newfilter'] = 'Filtër i ri'; +$labels['filteradd'] = 'Shtoni filtër'; +$labels['filterdel'] = 'Fshije filtrin'; +$labels['moveup'] = 'Ngjitu sipër'; +$labels['movedown'] = 'Ulu poshtë'; +$labels['filterallof'] = 'që ka përputhje me krejt rregullat vijues'; +$labels['filteranyof'] = 'që ka përputhje me cilindo nga rregullat vijues'; $labels['filterany'] = 'të gjitha mesazhet'; -$labels['messagemoveto'] = 'Zhvendose mesazhin te'; -$labels['add'] = 'Shto'; +$labels['filtercontains'] = 'përmban'; +$labels['filternotcontains'] = 'nuk përmban'; +$labels['filteris'] = 'është baras me'; +$labels['filterisnot'] = 's’është baras me'; +$labels['filterexists'] = 'ekziston'; +$labels['filternotexists'] = 's’ekziston'; +$labels['filtermatches'] = 'ka përputhje me shprehjen'; +$labels['filternotmatches'] = 's’ka përputhje me shprehjen'; +$labels['filterregex'] = 'ka përputhje me shprehjen rregullt'; +$labels['filternotregex'] = 's’ka përputhje me shprehjen e rregullt'; +$labels['filterunder'] = 'nën'; +$labels['filterover'] = 'mbi'; +$labels['addrule'] = 'Shtoni rregull'; +$labels['delrule'] = 'Fshije rregullin'; +$labels['messagemoveto'] = 'Kaloje mesazhin te'; +$labels['messageredirect'] = 'Ridrejtoje mesazhin te'; +$labels['messagecopyto'] = 'Kopjoje mesazhin te'; +$labels['messagesendcopy'] = 'Dërgo kopje mesazhi te'; +$labels['messagereply'] = 'Përgjigju me mesazh'; +$labels['messagedelete'] = 'Fshije mesazhin'; +$labels['messagediscard'] = 'Hidhe tej mesazhin'; +$labels['messagekeep'] = 'Mbaje mesazhin te Të marrët'; +$labels['messagesrules'] = 'Për postë ardhëse:'; +$labels['messagesactions'] = '…përmbush veprimet vijuese:'; +$labels['add'] = 'Shtoje'; $labels['del'] = 'Fshije'; -$labels['sender'] = 'Dërguesi'; +$labels['sender'] = 'Dërgues'; +$labels['recipient'] = 'Marrës'; +$labels['vacationaddr'] = 'Adresat e mia email:'; $labels['vacationdays'] = 'Sa shpesh dërgon mesazhe (në ditë):'; +$labels['vacationinterval'] = 'Sa shpesh të dërgohen mesazhet:'; +$labels['vacationreason'] = 'Lëndë mesazhi (arsye për pushime):'; +$labels['vacationsubject'] = 'Subjekt mesazhi:'; +$labels['days'] = 'ditë'; +$labels['seconds'] = 'sekonda'; +$labels['rulestop'] = 'Ndale mbikëqyrjen e rregullave'; +$labels['enable'] = 'Aktivizoje/Çaktivizoje'; +$labels['filterset'] = 'Grup filtrash'; +$labels['filtersets'] = 'Grupe filtrash'; +$labels['filtersetadd'] = 'Shto grup filtrash'; +$labels['filtersetdel'] = 'Fshije grupin e tanishëm të filtrave'; +$labels['filtersetact'] = 'Aktivizo grupin e tanishëm të filtrave'; +$labels['filtersetdeact'] = 'Çaktivizo grupin e tanishëm të filtrave'; +$labels['filterseteditraw'] = 'Përpunoni grup filtrash'; +$labels['filterdef'] = 'Përkufizim filtri'; +$labels['filtersetname'] = 'Emër grupi filtrash'; +$labels['newfilterset'] = 'Grup i ri filtrash'; $labels['active'] = 'aktiv'; +$labels['none'] = 'asnjë'; +$labels['fromset'] = 'prej grupi'; +$labels['fromfile'] = 'prej skedari'; +$labels['filterdisabled'] = 'Filtër i çaktivizuar'; +$labels['countisgreaterthan'] = 'numri është më i madh se'; +$labels['countisgreaterthanequal'] = 'numri është më i madh ose baras me'; +$labels['countislessthan'] = 'numri është më i vogël se'; +$labels['countislessthanequal'] = 'numri është më i vogël ose baras me'; +$labels['countequals'] = 'numri është baras me'; +$labels['countnotequals'] = 'numri s’është baras me'; +$labels['valueisgreaterthan'] = 'vlera është më e madhe se'; +$labels['valueisgreaterthanequal'] = 'vlera është më e madh ose baras me'; +$labels['valueislessthan'] = 'vlera është më e vogël se'; +$labels['valueislessthanequal'] = 'vlera është më e vogël ose baras me'; +$labels['valueequals'] = 'vlera është baras me'; +$labels['valuenotequals'] = 'vlera s’është baras me'; +$labels['setflags'] = 'Caktoni shenja për mesazhin'; +$labels['addflags'] = 'Shtoni shenja te mesazhi'; +$labels['removeflags'] = 'Hiqni shenja prej mesazhit'; +$labels['flagread'] = 'I lexuar'; +$labels['flagdeleted'] = 'I fshirë'; +$labels['flaganswered'] = 'Me përgjigje'; +$labels['flagflagged'] = 'Me shenjë'; +$labels['flagdraft'] = 'Skicë'; +$labels['setvarname'] = 'Emër ndryshoreje:'; +$labels['setvarvalue'] = 'Vlerë ndryshoreje:'; +$labels['setvarmodifiers'] = 'Modifikues:'; +$labels['varlower'] = 'me të vogla'; +$labels['varupper'] = 'me të mëdha'; +$labels['varlowerfirst'] = 'Shenja e parë me të vogla'; +$labels['varupperfirst'] = 'shenja e parë me të mëdha'; +$labels['varlength'] = 'gjatësi'; +$labels['notify'] = 'Dërgo njoftim'; +$labels['notifytarget'] = 'Objektiv njoftimi:'; +$labels['notifymessage'] = 'Mesazh njoftimi (opsionale):'; +$labels['notifyoptions'] = 'Opsione njoftimi (opsionale):'; +$labels['notifyfrom'] = 'Dërgues njoftimi (opsionale):'; +$labels['notifyimportance'] = 'Rëndësi:'; +$labels['notifyimportancelow'] = 'e ulët'; +$labels['notifyimportancenormal'] = 'normale'; +$labels['notifyimportancehigh'] = 'e lartë'; +$labels['notifymethodmailto'] = 'Email'; +$labels['notifymethodtel'] = 'Telefon'; +$labels['notifymethodsms'] = 'SMS'; +$labels['filtercreate'] = 'Krijoje filtrin'; +$labels['usedata'] = 'Përdor të dhënat vijuese te filtri:'; +$labels['nextstep'] = 'Hapi Pasues'; +$labels['...'] = '…'; +$labels['string'] = 'Varg'; +$labels['currdate'] = 'Datë e tanishme'; +$labels['datetest'] = 'Datë'; +$labels['dateheader'] = 'krye:'; +$labels['year'] = 'vit'; +$labels['month'] = 'muaj'; +$labels['day'] = 'ditë'; +$labels['date'] = 'datë (yyyy-mm-dd)'; +$labels['julian'] = 'datë (sipas kalendarit julian)'; +$labels['hour'] = 'orë'; +$labels['minute'] = 'minutë'; +$labels['second'] = 'sekondë'; +$labels['time'] = 'kohë (hh:mm:ss)'; +$labels['iso8601'] = 'datë (ISO8601)'; +$labels['std11'] = 'datë (RFC2822)'; +$labels['zone'] = 'brez orar'; +$labels['weekday'] = 'ditë e javës (0-6)'; +$labels['advancedopts'] = 'Mundësi të mëtejshme'; +$labels['body'] = 'Lëndë'; +$labels['address'] = 'adresë'; +$labels['envelope'] = 'zarf'; +$labels['modifier'] = 'modifikues:'; +$labels['text'] = 'tekst'; +$labels['undecoded'] = 'i pakoduar (i papërpunuar)'; +$labels['contenttype'] = 'lloj lënde'; +$labels['modtype'] = 'lloj:'; +$labels['allparts'] = 'krejt'; +$labels['domain'] = 'përkatësi'; +$labels['user'] = 'përdorues'; +$labels['detail'] = 'hollësi'; +$labels['comparator'] = 'krahasues:'; +$labels['default'] = 'parazgjedhje'; +$labels['octet'] = 'strikt (tetëshe)'; +$labels['asciicasemap'] = 'i pavarur nga shkrimi me të mëdha apo të vogla (ascii-casemap)'; +$labels['asciinumeric'] = 'numerike (ascii-numeric)'; +$labels['index'] = 'tregues:'; +$labels['indexlast'] = 'mbrapsht'; +$labels['vacation'] = 'Pushime'; +$labels['vacation.reply'] = 'Mesazh përgjigjeje'; +$labels['vacation.advanced'] = 'Rregullime të mëtejshme'; +$labels['vacation.subject'] = 'Subjekt'; +$labels['vacation.body'] = 'Lëndë'; +$labels['vacation.start'] = 'Pushimet fillojnë'; +$labels['vacation.end'] = 'Pushimet mbarojnë'; +$labels['vacation.status'] = 'Gjendje'; +$labels['vacation.on'] = 'On'; +$labels['vacation.off'] = 'Off'; +$labels['vacation.addresses'] = 'Adresat e mia email'; +$labels['vacation.interval'] = 'Interval përgjigjeje'; +$labels['vacation.after'] = 'Vendose rregullin për pushimet pas'; +$labels['vacation.saving'] = 'Po ruhen të dhënat…'; +$labels['vacation.action'] = 'Veprim për mesazh ardhës'; +$labels['vacation.keep'] = 'Mbaje'; +$labels['vacation.discard'] = 'Hidhe tej'; +$labels['vacation.redirect'] = 'Ridrejtoje te'; +$labels['vacation.copy'] = 'Dërgo kopje te'; +$labels['filladdresses'] = 'Plotësoje me krejt adresat e mia'; +$labels['arialabelfiltersetactions'] = 'Veprime grupi filtrash'; +$labels['arialabelfilteractions'] = 'Veprime filtri'; +$labels['arialabelfilterform'] = 'Veti filtri'; +$labels['ariasummaryfilterslist'] = 'Listë filtrash'; +$labels['ariasummaryfiltersetslist'] = 'Listë grupe filtrash'; +$labels['filterstitle'] = 'Përpunoni filtra për postë ardhëse'; +$labels['vacationtitle'] = 'Përpunoni rregullin jashtë-zyre'; +$labels['message'] = 'Mesazh'; +$labels['duplicate'] = 'është përsëdytje'; +$labels['notduplicate'] = 's’është përsëdytje'; +$labels['duplicate.header'] = 'krye:'; +$labels['duplicate.uniqueid'] = 'identifikues:'; +$labels['duplicate.seconds'] = 'mbarim kohe (sekonda):'; +$labels['duplicate.last'] = 'relative ndaj përmbushjes së fundit'; +$messages['filterunknownerror'] = 'Gabim i panjohur shërbyesi.'; +$messages['filterconnerror'] = 'I pazoti të lidhet me shërbyesin.'; +$messages['filterdeleteerror'] = 'I pazoti të fshijë filtrin. Ndodhi gabim shërbyesi.'; +$messages['filterdeleted'] = 'Grupi u fshi me sukses.'; +$messages['filtersaved'] = 'Filtri u ruajt me sukses.'; +$messages['filtersaveerror'] = 'I pazoti të ruajë filtrin. Ndodhi një gabim shërbyesi.'; +$messages['filterformerror'] = 'Formulari i filtrit përmban gabime.'; +$messages['filterdeleteconfirm'] = 'Doni vërtet të fshihet filtri i përzgjedhur?'; +$messages['ruledeleteconfirm'] = 'Jeni i sigurt se doni të fshihet rregulli i përzgjedhur?'; +$messages['actiondeleteconfirm'] = 'Jeni i sigurt se doni të fshihet veprimi i përzgjedhur?'; +$messages['forbiddenchars'] = 'Shenja të ndaluara te fusha.'; +$messages['cannotbeempty'] = 'Fusha s’mund të jetë e zbrazët.'; +$messages['ruleexist'] = 'Ka tashmë një filtër me emrin e treguar.'; +$messages['setactivateerror'] = 'I pazoti të aktivizojë grupin e përzgjedhur të filtrave. Ndodhi një gabim shërbyesi.'; +$messages['setdeactivateerror'] = 'I pazoti të çaktivizojë grupin e përzgjedhur të filtrave. Ndodhi një gabim shërbyesi.'; +$messages['setdeleteerror'] = 'I pazoti të fshijë grupin e përzgjedhur të filtrave. Ndodhi një gabim shërbyesi.'; +$messages['setactivated'] = 'Grupi i filtrave u aktivizua me sukses.'; +$messages['setdeactivated'] = 'Grupi i filtrave u çaktivizua me sukses.'; +$messages['setdeleted'] = 'Grupi i filtrave u fshi me sukses.'; +$messages['setupdated'] = 'Grupi i filtrave u përditësua me sukses.'; +$messages['setdeleteconfirm'] = 'Jeni i sigurt se doni të fshihet grupi i përzgjedhur i filtrave?'; +$messages['setcreateerror'] = 'I pazoti të krijojë grup filtrash. Ndodhi gabim shërbyesi.'; +$messages['setcreated'] = 'Grupi i filtrave u krijua me sukses.'; +$messages['activateerror'] = 'I pazoti të aktivizojë filtrin(at) e përzgjedhur. Ndodhi një gabim shërbyesi.'; +$messages['deactivateerror'] = 'I pazoti të çaktivizojë filtrin(at) e përzgjedhur. Ndodhi një gabim shërbyesi.'; +$messages['deactivated'] = 'Filtri(at) u çaktivizua me sukses.'; +$messages['activated'] = 'Filtri(at) u aktivizua me sukses.'; +$messages['moved'] = 'Filtri u lëviz me sukses.'; +$messages['moveerror'] = 'I pazoti të lëvizë filtrin e përzgjedhur. Ndodhi një gabim shërbyesi.'; +$messages['nametoolong'] = 'Emër shumë i gjatë.'; +$messages['namereserved'] = 'Emër i rezervuar.'; +$messages['setexist'] = 'Ka tashmë një grup të tillë.'; +$messages['nodata'] = 'Duhet përzgjedhur të paktën një pozicion!'; +$messages['invaliddateformat'] = 'Format i pavlefshëm date ose pjese date'; +$messages['saveerror'] = 'I pazoti të ruajë të dhëna. Ndodhi një gabim shërbyesi.'; +$messages['vacationsaved'] = 'Data e pushimeve u ruajt me sukses.'; +$messages['emptyvacationbody'] = 'Lënda e mesazhit të pushimeve është e domosdoshme!'; +$messages['duplicate.conflict.err'] = 'Nuk lejohet përdorimi i njëkohshëm i kryes dhe identifikuesit unik.'; ?> diff --git a/plugins/managesieve/localization/sv_SE.inc b/plugins/managesieve/localization/sv_SE.inc index 406b9a72c5e..91231d2ef53 100644 --- a/plugins/managesieve/localization/sv_SE.inc +++ b/plugins/managesieve/localization/sv_SE.inc @@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Ny filtergrupp'; $labels['filtersetdel'] = 'Ta bort filtergrupp'; $labels['filtersetact'] = 'Aktivera filtergrupp'; $labels['filtersetdeact'] = 'Deaktivera filtergrupp'; +$labels['filterseteditraw'] = 'Ändra filtergrupp'; $labels['filterdef'] = 'Filterdefinition'; $labels['filtersetname'] = 'Filtergruppsnamn'; $labels['newfilterset'] = 'Ny filtergrupp'; @@ -124,6 +125,7 @@ $labels['filtercreate'] = 'Skapa filter'; $labels['usedata'] = 'Använd följande information i filtret:'; $labels['nextstep'] = 'Nästa steg'; $labels['...'] = '...'; +$labels['string'] = 'Textsträng'; $labels['currdate'] = 'Dagens datum'; $labels['datetest'] = 'Datum'; $labels['dateheader'] = 'huvud:'; @@ -216,6 +218,7 @@ $messages['setdeleteerror'] = 'Filtergruppen kunde inte tas bort på grund av se $messages['setactivated'] = 'Filtergruppen är aktiverad'; $messages['setdeactivated'] = 'Filtergruppen är deaktiverad'; $messages['setdeleted'] = 'Filtergruppen är borttagen'; +$messages['setupdated'] = 'Filtergruppen är ändrad'; $messages['setdeleteconfirm'] = 'Vill du ta bort filtergruppen?'; $messages['setcreateerror'] = 'Filtergruppen kunde inte läggas till på grund av serverfel'; $messages['setcreated'] = 'Filtergruppen har lagts till'; diff --git a/plugins/managesieve/localization/tr_TR.inc b/plugins/managesieve/localization/tr_TR.inc index 05451b06e89..7d83091a991 100644 --- a/plugins/managesieve/localization/tr_TR.inc +++ b/plugins/managesieve/localization/tr_TR.inc @@ -15,93 +15,94 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/ */ -$labels['filters'] = 'Filtreler'; -$labels['managefilters'] = 'Gelen e-posta filtrelerini yönet'; -$labels['filtername'] = 'Filtre adı'; -$labels['newfilter'] = 'Yeni filtre'; -$labels['filteradd'] = 'Filtre ekle'; -$labels['filterdel'] = 'Filtre Sil'; +$labels['filters'] = 'Süzgeçler'; +$labels['managefilters'] = 'Gelen e-posta süzgeçleri yönetimi'; +$labels['filtername'] = 'Süzgeç adı'; +$labels['newfilter'] = 'Yeni süzgeç'; +$labels['filteradd'] = 'Süzgeç ekle'; +$labels['filterdel'] = 'Süzgeci Sil'; $labels['moveup'] = 'Yukarı taşı'; $labels['movedown'] = 'Aşağı taşı'; $labels['filterallof'] = 'Aşağıdaki kuralların hepsine uyan'; $labels['filteranyof'] = 'Aşağıdaki kuralların herhangi birine uyan'; -$labels['filterany'] = 'Tüm mesajlar'; +$labels['filterany'] = 'Tüm iletiler'; $labels['filtercontains'] = 'içeren'; $labels['filternotcontains'] = 'içermeyen'; $labels['filteris'] = 'eşittir'; -$labels['filterisnot'] = 'eşit değildir'; -$labels['filterexists'] = 'mevcut'; -$labels['filternotexists'] = 'mevcut değil'; +$labels['filterisnot'] = 'eşit değil'; +$labels['filterexists'] = 'var'; +$labels['filternotexists'] = 'yok'; $labels['filtermatches'] = 'ifadeye uyan'; $labels['filternotmatches'] = 'ifadeye uymayan'; -$labels['filterregex'] = 'düzenli ifadeye uyan'; -$labels['filternotregex'] = 'düzenli ifadeye uymayan'; +$labels['filterregex'] = 'kurallı ifadeye uyan'; +$labels['filternotregex'] = 'kurallı ifadeye uymayan'; $labels['filterunder'] = 'altında'; $labels['filterover'] = 'üzerinde'; $labels['addrule'] = 'Kural ekle'; $labels['delrule'] = 'Kuralı sil'; -$labels['messagemoveto'] = 'mesajı taşı'; -$labels['messageredirect'] = 'mesajı yönlendir'; -$labels['messagecopyto'] = 'Mesajı kopyala'; -$labels['messagesendcopy'] = 'mesajın kopyasını gönder'; -$labels['messagereply'] = 'mesajla birlikte cevap ver'; -$labels['messagedelete'] = 'Mesajı sil'; -$labels['messagediscard'] = 'mesajı yok say'; -$labels['messagekeep'] = 'Mesajı Gelen Kutusunda tut.'; -$labels['messagesrules'] = 'Gelen e-postalar için:'; -$labels['messagesactions'] = '... aşağıdaki aksiyonları çalıştır:'; +$labels['messagemoveto'] = 'İletiyi şuraya taşı'; +$labels['messageredirect'] = 'İletiyi şuraya yönlendir'; +$labels['messagecopyto'] = 'İletiyi şuraya kopyala'; +$labels['messagesendcopy'] = 'İletinin kopyasını şuraya gönder'; +$labels['messagereply'] = 'İletiyle birlikte yanıtla'; +$labels['messagedelete'] = 'İletiyi sil'; +$labels['messagediscard'] = 'İletiyi yoksay'; +$labels['messagekeep'] = 'İletiyi Gelen Kutusunda tut'; +$labels['messagesrules'] = 'Gelen iletiler için:'; +$labels['messagesactions'] = '...aşağıdaki işlemleri yürüt:'; $labels['add'] = 'Ekle'; $labels['del'] = 'Sil'; $labels['sender'] = 'Gönderici'; $labels['recipient'] = 'Alıcı'; $labels['vacationaddr'] = 'E-Posta adreslerim:'; -$labels['vacationdays'] = 'Ne sıklıkla mesajlar gönderirsiniz.(gün)'; -$labels['vacationinterval'] = 'Ne sıklıkla mesaj gönderirsiniz:'; -$labels['vacationreason'] = 'Mesaj gövdesi(tatil sebebi):'; -$labels['vacationfrom'] = 'Cevaplama Adresi:'; -$labels['vacationsubject'] = 'Mesaj konusu:'; +$labels['vacationdays'] = 'İleti gönderme sıklığı (gün):'; +$labels['vacationinterval'] = 'İleti gönderme sıklığı:'; +$labels['vacationreason'] = 'İleti gövdesi (tatil nedeni):'; +$labels['vacationfrom'] = 'Yanıt Adresi:'; +$labels['vacationsubject'] = 'İleti konusu:'; $labels['days'] = 'günler'; -$labels['seconds'] = 'saniyeler'; +$labels['seconds'] = 'saniye'; $labels['rulestop'] = 'Kuralları değerlendirmeyi bitir'; -$labels['enable'] = 'Etkinleştir/Etkisiz Kıl'; -$labels['filterset'] = 'Filtre seti'; -$labels['filtersets'] = 'Filtre setleri'; -$labels['filtersetadd'] = 'Filtre seti ekle'; -$labels['filtersetdel'] = 'Mevcut filtre setini sil'; -$labels['filtersetact'] = 'Mevcut filtre setini etkinleştir'; -$labels['filtersetdeact'] = 'Mevcut filtre setini etkinsizleştir'; -$labels['filterdef'] = 'Filtre tanımı'; -$labels['filtersetname'] = 'Filtre seti adı'; -$labels['newfilterset'] = 'Yeni filtre seti'; +$labels['enable'] = 'Etkinleştir/Devre Dışı Bırak'; +$labels['filterset'] = 'Süzgeç kümesi'; +$labels['filtersets'] = 'Süzgeç kümeleri'; +$labels['filtersetadd'] = 'Süzgeç kümesi ekle'; +$labels['filtersetdel'] = 'Geçerli süzgeç kümesini sil'; +$labels['filtersetact'] = 'Geçerli süzgeç kümesini etkinleştir'; +$labels['filtersetdeact'] = 'Geçerli süzgeç kümesini devre dışı bırak'; +$labels['filterseteditraw'] = 'Süzgeç kümesini düzenle'; +$labels['filterdef'] = 'Süzgeç tanımı'; +$labels['filtersetname'] = 'Süzgeç kümesi adı'; +$labels['newfilterset'] = 'Yeni süzgeç kümesi '; $labels['active'] = 'etkin'; $labels['none'] = 'hiçbiri'; -$labels['fromset'] = 'gönderici seti'; +$labels['fromset'] = 'gönderi seti'; $labels['fromfile'] = 'gönderici dosya'; -$labels['filterdisabled'] = 'Filtre iptal edildi'; +$labels['filterdisabled'] = 'Süzgeç devre dışı'; $labels['countisgreaterthan'] = 'toplamı büyük'; -$labels['countisgreaterthanequal'] = 'toplamı büyük veya eşit'; +$labels['countisgreaterthanequal'] = 'toplamı büyük ya da eşit'; $labels['countislessthan'] = 'toplamı az'; -$labels['countislessthanequal'] = 'toplamı daha az veya eşit'; +$labels['countislessthanequal'] = 'toplamı küçük ya da eşit'; $labels['countequals'] = 'toplamı eşit'; $labels['countnotequals'] = 'toplamı eşit değil'; $labels['valueisgreaterthan'] = 'değeri büyük'; -$labels['valueisgreaterthanequal'] = 'değeri büyük veya eşit'; +$labels['valueisgreaterthanequal'] = 'değeri büyük ya da eşit'; $labels['valueislessthan'] = 'değer az'; -$labels['valueislessthanequal'] = 'değer daha az veya eşit'; +$labels['valueislessthanequal'] = 'değer küçük ya da eşit'; $labels['valueequals'] = 'değer eşit'; $labels['valuenotequals'] = 'değer eşit değil'; -$labels['setflags'] = 'Mesaja bayrak ekle.'; -$labels['addflags'] = 'Mesaja bayrak ekle.'; -$labels['removeflags'] = 'Bayraklı mesajları sil.'; +$labels['setflags'] = 'İletiyi işaretle'; +$labels['addflags'] = 'İletiye işaret ekle'; +$labels['removeflags'] = 'İleti işaretlerini kaldır'; $labels['flagread'] = 'Oku'; $labels['flagdeleted'] = 'Silindi'; -$labels['flaganswered'] = 'Cevaplanmış'; +$labels['flaganswered'] = 'Yanıtlanmış'; $labels['flagflagged'] = 'İşaretli'; $labels['flagdraft'] = 'Taslak'; $labels['setvariable'] = 'Değişken tanımla'; $labels['setvarname'] = 'Değişken adı:'; $labels['setvarvalue'] = 'Değişken değeri:'; -$labels['setvarmodifiers'] = 'Değiştiriciler:'; +$labels['setvarmodifiers'] = 'Alanlar:'; $labels['varlower'] = 'küçük harf'; $labels['varupper'] = 'büyük harf'; $labels['varlowerfirst'] = 'İlk karakter küçük harf'; @@ -110,9 +111,9 @@ $labels['varquotewildcard'] = 'özel karakterleri tırnak içine al'; $labels['varlength'] = 'uzunluk'; $labels['notify'] = 'Bildirim gönder'; $labels['notifytarget'] = 'Bildirim hedefi:'; -$labels['notifymessage'] = 'Bildirim mesajı (tercihe bağlı):'; -$labels['notifyoptions'] = 'Bildirim tercihleri (tercihe bağlı):'; -$labels['notifyfrom'] = 'Bildirim göndericisi (tercihe bağlı):'; +$labels['notifymessage'] = 'Bildirim iletisi (isteğe bağlı):'; +$labels['notifyoptions'] = 'Bildirim ayarları (isteğe bağlı):'; +$labels['notifyfrom'] = 'Bildirim göndericisi (isteğebağlı):'; $labels['notifyimportance'] = 'Önem derecesi:'; $labels['notifyimportancelow'] = 'düşük'; $labels['notifyimportancenormal'] = 'normal'; @@ -121,11 +122,11 @@ $labels['notifymethodmailto'] = 'E-posta'; $labels['notifymethodtel'] = 'Telefon'; $labels['notifymethodsms'] = 'SMS'; $labels['filtercreate'] = 'Süzgeç oluştur'; -$labels['usedata'] = 'Aşağıdaki verileri süzgeçte kullan'; -$labels['nextstep'] = 'Sonraki adım'; +$labels['usedata'] = 'Süzgeçte şu veriler kullanılsın:'; +$labels['nextstep'] = 'Sonraki Adım'; $labels['...'] = '...'; -$labels['string'] = 'Dizi'; -$labels['currdate'] = 'Mevcut tarih'; +$labels['string'] = 'Dizge'; +$labels['currdate'] = 'Geçerli tarih'; $labels['datetest'] = 'Tarih'; $labels['dateheader'] = 'Başlık'; $labels['year'] = 'yıl'; @@ -140,99 +141,100 @@ $labels['time'] = 'saat (ss:dd:ss)'; $labels['iso8601'] = 'tarih (ISO8601)'; $labels['std11'] = 'tarih (RFC2822)'; $labels['zone'] = 'saat-dilimi'; -$labels['weekday'] = 'Hafta günleri (0-6)'; -$labels['advancedopts'] = 'Gelişmiş seçenekler'; -$labels['body'] = 'Gövde'; +$labels['weekday'] = 'haftanın günleri (0-6)'; +$labels['advancedopts'] = 'Gelişmiş ayarlar'; +$labels['body'] = 'Metin'; $labels['address'] = 'adres'; $labels['envelope'] = 'zarf'; -$labels['modifier'] = 'değiştirici'; +$labels['modifier'] = 'alan:'; $labels['text'] = 'metin'; -$labels['undecoded'] = 'çözülmemiş(ham)'; +$labels['undecoded'] = 'kodu çözülmemiş (ham)'; $labels['contenttype'] = 'içerik türü'; -$labels['modtype'] = 'tip:'; -$labels['allparts'] = 'hepsi'; +$labels['modtype'] = 'tür:'; +$labels['allparts'] = 'tümü'; $labels['domain'] = 'alan adı'; $labels['localpart'] = 'yerel parça'; $labels['user'] = 'kullanıcı'; -$labels['detail'] = 'detay'; -$labels['comparator'] = 'karşılaştırıcı'; -$labels['default'] = 'öntanımlı'; -$labels['octet'] = 'sıkı(sekizli)'; -$labels['asciicasemap'] = 'büyük küçük harf duyarsız(ascii-casemap)'; +$labels['detail'] = 'ayrıntı'; +$labels['comparator'] = 'karşılaştırıcı:'; +$labels['default'] = 'varsayılan'; +$labels['octet'] = 'sıkı (sekizli)'; +$labels['asciicasemap'] = 'büyük küçük harfe duyarsız (ascii-casemap)'; $labels['asciinumeric'] = 'sayı (ascii-numeric)'; $labels['index'] = 'Dizin:'; $labels['indexlast'] = 'geriye yönelik'; $labels['vacation'] = 'Tatil'; -$labels['vacation.reply'] = 'Cevap mesajı'; -$labels['vacation.advanced'] = 'Gelişmiş seçenekler'; -$labels['vacation.from'] = 'Cevaplama Adresi:'; +$labels['vacation.reply'] = 'İletiyi yanıtla'; +$labels['vacation.advanced'] = 'Gelişmiş ayarlar'; +$labels['vacation.from'] = 'Yanıt Adresi'; $labels['vacation.subject'] = 'Konu'; -$labels['vacation.body'] = 'Gövde'; +$labels['vacation.body'] = 'Metin'; $labels['vacation.start'] = 'Tatil başlangıcı'; $labels['vacation.end'] = 'Tatil bitişi'; $labels['vacation.status'] = 'Durum'; $labels['vacation.on'] = 'Etkin'; $labels['vacation.off'] = 'Devre dışı'; $labels['vacation.addresses'] = 'E-Posta adreslerim'; -$labels['vacation.interval'] = 'Cevap aralığı'; +$labels['vacation.interval'] = 'Yanıt aralığı'; $labels['vacation.after'] = 'Şundan sonra tatil kuralı koy'; $labels['vacation.saving'] = 'Veri kaydediliyor...'; -$labels['vacation.action'] = 'Gelen mesaj aksiyonu'; +$labels['vacation.action'] = 'Gelen ileti işlemi'; $labels['vacation.keep'] = 'Koru'; $labels['vacation.discard'] = 'Yoksay'; $labels['vacation.redirect'] = 'Şuraya yönlendir'; $labels['vacation.copy'] = 'Şuraya kopya gönder'; $labels['filladdresses'] = 'Benim adreslerimle doldur'; -$labels['arialabelfiltersetactions'] = 'Filtre seti aksiyonları'; -$labels['arialabelfilteractions'] = 'Filtre aksiyonları'; -$labels['arialabelfilterform'] = 'Filtre özellikleri'; -$labels['ariasummaryfilterslist'] = 'Filtre listesi'; -$labels['ariasummaryfiltersetslist'] = 'Filtre seti listesi'; -$labels['filterstitle'] = 'Gelen e-posta filtrelerini düzenle'; +$labels['arialabelfiltersetactions'] = 'Süzgeç kümesi işlemleri'; +$labels['arialabelfilteractions'] = 'Süzgeç işlemleri'; +$labels['arialabelfilterform'] = 'Süzgeç özellikleri'; +$labels['ariasummaryfilterslist'] = 'Süzgeç listesi'; +$labels['ariasummaryfiltersetslist'] = 'Süzgeç kümesi listesi'; +$labels['filterstitle'] = 'Gelen e-posta süzgeçlerini düzenle'; $labels['vacationtitle'] = 'Ofis dışında kuralını düzenle'; -$labels['message'] = 'Postalar'; -$labels['duplicate'] = 'tekrarlanan'; -$labels['notduplicate'] = 'tekrar edilmeyen'; -$labels['duplicate.handle'] = 'ele al:'; +$labels['message'] = 'İleti'; +$labels['duplicate'] = 'yinelenen'; +$labels['notduplicate'] = 'yinelenmeyen'; +$labels['duplicate.handle'] = 'işle:'; $labels['duplicate.header'] = 'başlık:'; $labels['duplicate.uniqueid'] = 'Tanımı:'; -$labels['duplicate.seconds'] = 'Zamanaşımı (saniye):'; +$labels['duplicate.seconds'] = 'Zaman aşımı (saniye):'; $labels['duplicate.last'] = 'son yapılanlara göre'; -$messages['filterunknownerror'] = 'Bilinmeyen sunucu hatası.'; -$messages['filterconnerror'] = 'Sunucuya bağlanamıyor.'; -$messages['filterdeleteerror'] = 'Filtre silinemedi. Sunucuda hata oluştu.'; -$messages['filterdeleted'] = 'Filtre silindi.'; -$messages['filtersaved'] = 'Filtre kaydedildi.'; -$messages['filtersaveerror'] = 'Filtre kaydedilemedi. Sunucuda hata oluştu.'; -$messages['filterformerror'] = 'Filtre formu hatalı.'; -$messages['filterdeleteconfirm'] = 'Seçilen filtreleri gerçekten silmek istiyor musun?'; -$messages['ruledeleteconfirm'] = 'Seçili kuralları silmek istediğinizden emin misiniz?'; -$messages['actiondeleteconfirm'] = 'Seçili aksiyonları silmek istediğinizden emin misiniz?'; +$messages['filterunknownerror'] = 'Bilinmeyen sunucu sorunu.'; +$messages['filterconnerror'] = 'Sunucuya bağlanılamıyor.'; +$messages['filterdeleteerror'] = 'Süzgeç silinemedi. Sunucuda bir sorun çıktı.'; +$messages['filterdeleted'] = 'Süzgeç silindi.'; +$messages['filtersaved'] = 'Süzgeç kaydedildi.'; +$messages['filtersaveerror'] = 'Süzgeç kaydedilemedi. Sunucuda bir sorun çıktı.'; +$messages['filterformerror'] = 'Süzgeç formunda sorunlar var.'; +$messages['filterdeleteconfirm'] = 'Seçilmiş süzgeçleri silmek istediğinize emin misiniz?'; +$messages['ruledeleteconfirm'] = 'Seçilmiş kuralları silmek istediğinize emin misiniz?'; +$messages['actiondeleteconfirm'] = 'Seçilmiş işlemleri silmek istediğinize emin misiniz?'; $messages['forbiddenchars'] = 'Alanda izin verilmeyen karakterler var.'; $messages['cannotbeempty'] = 'Alan boş olamaz'; -$messages['ruleexist'] = 'Belirtilen isimde bir filtre zaten var.'; -$messages['setactivateerror'] = 'Seçilen filtreler etkinleştirilemedi. Sunucuda hata oluştu.'; -$messages['setdeactivateerror'] = 'Seçilen filtreler pasifleştirilemedi. Sunucuda hata oluştu.'; -$messages['setdeleteerror'] = 'Seçilen filtreler silinemedi. Sunucuda hata oluştu.'; -$messages['setactivated'] = 'Filtreler etkinleştirilemedi.'; -$messages['setdeactivated'] = 'Filtreler pasifleştirildi.'; -$messages['setdeleted'] = 'Filtre seti silindi.'; -$messages['setdeleteconfirm'] = 'Seçilen filtre setlerini silmek istediğinizden emin misiniz?'; -$messages['setcreateerror'] = 'Filtre setleri oluşturulamadı. Sunucuda hata oluştu.'; -$messages['setcreated'] = 'Filtre setleri oluşturuldu.'; -$messages['activateerror'] = 'Seçilen filtre(ler) etkinleştirilemedi. Sunucuda hata oluştu.'; -$messages['deactivateerror'] = 'Seçilen filtre(ler) pasifleştirilemedi. Sunucuda hata oluştu.'; -$messages['deactivated'] = 'Filtre(ler) iptal edildi'; -$messages['activated'] = 'Filtre(ler) etkinleştirildi.'; -$messages['moved'] = 'Filtre taşındı.'; -$messages['moveerror'] = 'Seçilen filtre taşınamadı. Sunucuda hata oluştu.'; -$messages['nametoolong'] = 'İsim çok uzun.'; -$messages['namereserved'] = 'rezerve edilmiş isim.'; -$messages['setexist'] = 'Set zaten var.'; -$messages['nodata'] = 'En az bir pozisyon seçilmelidir.'; -$messages['invaliddateformat'] = 'geçersiz tarih veya tarih biçimi'; -$messages['saveerror'] = 'Veri kaydedilemedi. Sunucuda hata oluştu.'; +$messages['ruleexist'] = 'Aynı adlı bir süzgeç zaten var.'; +$messages['setactivateerror'] = 'Seçilmiş süzgeç kümesi etkinleştirilemedi. Sunucuda bir sorun çıktı.'; +$messages['setdeactivateerror'] = 'Seçilmiş süzgeç kümesi devre dışı bırakılamadı. Sunucuda bir sorun çıktı.'; +$messages['setdeleteerror'] = 'Seçilmiş süzgeç kümeleri silinemedi. Sunucuda bir sorun çıktı.'; +$messages['setactivated'] = 'Süzgeç kümesi etkinleştirildi.'; +$messages['setdeactivated'] = 'Süzgeç kümesi devre dışı bırakıldı.'; +$messages['setdeleted'] = 'Süzgeç kümesi silindi.'; +$messages['setupdated'] = 'Süzgeç kümesi güncellendi.'; +$messages['setdeleteconfirm'] = 'Seçilmiş süzgeç kümelerini silmek istediğinize emin misiniz?'; +$messages['setcreateerror'] = 'Süzgeç kümeleri oluşturulamadı. Sunucuda bir sorun çıktı.'; +$messages['setcreated'] = 'Süzgeç kümesi oluşturuldu.'; +$messages['activateerror'] = 'Seçilmiş süzgeç(ler) etkinleştirilemedi. Sunucuda bir sorun çıktı.'; +$messages['deactivateerror'] = 'Seçilmiş süzgeç(ler) devre dışı bırakılamadı. Sunucuda bir sorun çıktı.'; +$messages['deactivated'] = 'Süzgeç(ler) devre dışı bırakıldı.'; +$messages['activated'] = 'Süzgeç(ler) etkinleştirildi.'; +$messages['moved'] = 'Süzgeç taşındı.'; +$messages['moveerror'] = 'Seçilmiş süzgeç taşınamadı. Sunucuda bir sorun çıktı.'; +$messages['nametoolong'] = 'Ad çok uzun.'; +$messages['namereserved'] = 'Bu ad ayırtılmış.'; +$messages['setexist'] = 'Küme zaten var.'; +$messages['nodata'] = 'En az bir konum seçilmelidir!'; +$messages['invaliddateformat'] = 'Tarih ya da tarih biçimi geçersiz'; +$messages['saveerror'] = 'Veri kaydedilemedi. Sunucuda bir sorun çıktı.'; $messages['vacationsaved'] = 'Tatil verisi kaydedildi.'; -$messages['emptyvacationbody'] = 'Tatil mesajı metni gerekmektedir.'; -$messages['duplicate.conflict.err'] = 'Başlık ve tanımı aynı olamaz.'; +$messages['emptyvacationbody'] = 'Tatil iletisi metnini yazmalısınız!'; +$messages['duplicate.conflict.err'] = 'Üst bilgi ve tekil belirteç aynı anda kullanılamaz.'; ?> diff --git a/plugins/managesieve/localization/uk_UA.inc b/plugins/managesieve/localization/uk_UA.inc index b383e6aeb9b..47b5632decf 100644 --- a/plugins/managesieve/localization/uk_UA.inc +++ b/plugins/managesieve/localization/uk_UA.inc @@ -124,6 +124,7 @@ $labels['filtercreate'] = 'Створити фільтр'; $labels['usedata'] = 'Використати у фільтрі такі дані: '; $labels['nextstep'] = 'Наступний крок'; $labels['...'] = '...'; +$labels['string'] = 'Рядок'; $labels['currdate'] = 'Поточна дата'; $labels['datetest'] = 'Дата'; $labels['dateheader'] = 'шапка:'; diff --git a/plugins/managesieve/localization/zh_CN.inc b/plugins/managesieve/localization/zh_CN.inc index 5c0ce84545a..df5c7b76054 100644 --- a/plugins/managesieve/localization/zh_CN.inc +++ b/plugins/managesieve/localization/zh_CN.inc @@ -124,6 +124,7 @@ $labels['filtercreate'] = '创建过滤规则'; $labels['usedata'] = '在过滤器中使用下列数据'; $labels['nextstep'] = '下一步'; $labels['...'] = '...'; +$labels['string'] = '字符串'; $labels['currdate'] = '当前日期'; $labels['datetest'] = '日期'; $labels['dateheader'] = '头:'; diff --git a/plugins/markasjunk/localization/is_IS.inc b/plugins/markasjunk/localization/is_IS.inc new file mode 100644 index 00000000000..40e5b468ac4 --- /dev/null +++ b/plugins/markasjunk/localization/is_IS.inc @@ -0,0 +1,21 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Mark-As-Junk plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/ +*/ +$labels['buttontext'] = 'Ruslpóstur'; +$labels['buttontitle'] = 'Merkja sem ruslpóst'; +$labels['reportedasjunk'] = 'Tókst að tilkynna sem ruslpóst'; +?> \ No newline at end of file diff --git a/plugins/markasjunk/localization/sq_AL.inc b/plugins/markasjunk/localization/sq_AL.inc new file mode 100644 index 00000000000..fc4dc1d0394 --- /dev/null +++ b/plugins/markasjunk/localization/sq_AL.inc @@ -0,0 +1,21 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Mark-As-Junk plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/ +*/ +$labels['buttontext'] = 'I padëshiruar'; +$labels['buttontitle'] = 'Vëri shenjë si I padëshiruar'; +$labels['reportedasjunk'] = 'U raportua me sukses si I padëshiruar'; +?> \ No newline at end of file diff --git a/plugins/markasjunk/localization/tr_TR.inc b/plugins/markasjunk/localization/tr_TR.inc index 4d46c0b3720..c00830e76a1 100644 --- a/plugins/markasjunk/localization/tr_TR.inc +++ b/plugins/markasjunk/localization/tr_TR.inc @@ -17,5 +17,5 @@ */ $labels['buttontext'] = 'İstenmeyen'; $labels['buttontitle'] = 'İstenmeyen olarak işaretle'; -$labels['reportedasjunk'] = 'Spam olarak rapor edildi'; +$labels['reportedasjunk'] = 'Spam olarak bildirildi'; ?> \ No newline at end of file diff --git a/plugins/new_user_dialog/localization/de_DE.inc b/plugins/new_user_dialog/localization/de_DE.inc index b5aed051979..78d2e91900f 100644 --- a/plugins/new_user_dialog/localization/de_DE.inc +++ b/plugins/new_user_dialog/localization/de_DE.inc @@ -15,6 +15,6 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/ */ -$labels['identitydialogtitle'] = 'Bitte vervollständigen Sie Ihre Absender-Informationen'; -$labels['identitydialoghint'] = 'Dieser Dialog erscheint nur einmal beim ersten Login.'; +$labels['identitydialogtitle'] = 'Bitte vervollständigen Sie Ihre Absenderkennung'; +$labels['identitydialoghint'] = 'Dieser Dialog erscheint nur einmal beim ersten Anmelden.'; ?> \ No newline at end of file diff --git a/plugins/new_user_dialog/localization/ku_IQ.inc b/plugins/new_user_dialog/localization/ku_IQ.inc new file mode 100644 index 00000000000..d37e86ecf56 --- /dev/null +++ b/plugins/new_user_dialog/localization/ku_IQ.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail New User Dialog plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/ +*/ +$labels['identitydialogtitle'] = 'تکایە ناسنامەی نێرەری خۆت تەواوبکە'; +$labels['identitydialoghint'] = 'ئەم خانەیە تەنها لە یەکەم چوونەژوورەوە دەردەکەوێت.'; +?> \ No newline at end of file diff --git a/plugins/new_user_dialog/localization/sq_AL.inc b/plugins/new_user_dialog/localization/sq_AL.inc new file mode 100644 index 00000000000..7596a1f4586 --- /dev/null +++ b/plugins/new_user_dialog/localization/sq_AL.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail New User Dialog plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/ +*/ +$labels['identitydialogtitle'] = 'Ju lutemi, plotësoni identitetin tuaj si dërgues'; +$labels['identitydialoghint'] = 'Kjo kuti shfaqet vetëm një herë gjatë hyrjes së parë.'; +?> \ No newline at end of file diff --git a/plugins/new_user_dialog/localization/tr_TR.inc b/plugins/new_user_dialog/localization/tr_TR.inc index 982a5b6deb4..9ca99c34c37 100644 --- a/plugins/new_user_dialog/localization/tr_TR.inc +++ b/plugins/new_user_dialog/localization/tr_TR.inc @@ -16,5 +16,5 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/ */ $labels['identitydialogtitle'] = 'Lütfen gönderici kimliğinizi tamamlayın'; -$labels['identitydialoghint'] = 'Bu ekran ilk girişte bir kereliğine gözükür'; +$labels['identitydialoghint'] = 'Bu ekran oturum ilk kez açıldığın bir kere görüntülenir.'; ?> \ No newline at end of file diff --git a/plugins/newmail_notifier/localization/fr_FR.inc b/plugins/newmail_notifier/localization/fr_FR.inc index f493420d98f..ab9be50d643 100644 --- a/plugins/newmail_notifier/localization/fr_FR.inc +++ b/plugins/newmail_notifier/localization/fr_FR.inc @@ -16,7 +16,7 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/ */ $labels['basic'] = 'Afficher les notifications du navigateur pour les nouveaux courriels'; -$labels['desktop'] = 'Afficher les notifications du navigateur pour les nouveaux courriels'; +$labels['desktop'] = 'Afficher les notifications de bureau pour les nouveaux courriels'; $labels['sound'] = 'Jouer le son pour les nouveaux courriels'; $labels['test'] = 'Test'; $labels['title'] = 'Nouveau courriel'; diff --git a/plugins/newmail_notifier/localization/sq_AL.inc b/plugins/newmail_notifier/localization/sq_AL.inc index 643ee419224..64374962bad 100644 --- a/plugins/newmail_notifier/localization/sq_AL.inc +++ b/plugins/newmail_notifier/localization/sq_AL.inc @@ -15,6 +15,14 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/ */ +$labels['basic'] = 'Shfaqni njoftime shfletuesi kur ka mesazhe të rinj'; +$labels['desktop'] = 'Shfaqni njoftime për desktop kur ka mesazhe të rinj'; +$labels['sound'] = 'Kur ka mesazhe të rinj, luaj tingullin'; $labels['test'] = 'Test'; -$labels['body'] = 'Ju keni marr një mesazh të ri.'; +$labels['title'] = 'Email i ri!'; +$labels['body'] = 'Morët një mesazh të ri.'; +$labels['testbody'] = 'Ky është një njoftim test.'; +$labels['desktopdisabled'] = 'Njoftimet për desktop janë të çaktivizuara te shfletuesi juaj.'; +$labels['desktopunsupported'] = 'Shfletuesi juaj nuk mbulon njoftime për dekstop.'; +$labels['desktoptimeout'] = 'Mbylle njoftimin për desktop'; ?> diff --git a/plugins/newmail_notifier/localization/tr_TR.inc b/plugins/newmail_notifier/localization/tr_TR.inc index 4e4d4ce7736..fcbb5ce84e6 100644 --- a/plugins/newmail_notifier/localization/tr_TR.inc +++ b/plugins/newmail_notifier/localization/tr_TR.inc @@ -15,14 +15,14 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/ */ -$labels['basic'] = 'Web tarayıcıda yeni mesajları bildir.'; -$labels['desktop'] = 'Masaüstünde yeni mesajları bildir.'; -$labels['sound'] = 'Yeni mesajlarda ses çal.'; +$labels['basic'] = 'Yeni iletiler web tarayıcıdan bildirilsin'; +$labels['desktop'] = 'Yeni iletiler Masaüstünden bildirilsin'; +$labels['sound'] = 'Yeni ileti geldiğinde ses çalınsın'; $labels['test'] = 'Deneme'; -$labels['title'] = 'Yeni E-posta!'; -$labels['body'] = 'Yeni bir mesajınız var.'; +$labels['title'] = 'Yeni İleti!'; +$labels['body'] = 'Yeni bir iletiniz var.'; $labels['testbody'] = 'Bu bir test bildirimidir.'; -$labels['desktopdisabled'] = 'Web tarayıcınızda masaüstü bildirimi iptal edildi'; +$labels['desktopdisabled'] = 'Web tarayıcınızda masaüstü bildirimi devre dışı bırakıldı.'; $labels['desktopunsupported'] = 'Web tarayıcınız masaüstü bildirimleri desteklemiyor'; $labels['desktoptimeout'] = 'Masaüstü bildirimini kapat'; ?> diff --git a/plugins/password/localization/bg_BG.inc b/plugins/password/localization/bg_BG.inc index d7797967ea9..64428fdab9a 100644 --- a/plugins/password/localization/bg_BG.inc +++ b/plugins/password/localization/bg_BG.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Паролата трябва да включва $messages['passwordforbidden'] = 'Паролата съдържа непозволени символи.'; $messages['firstloginchange'] = 'Влизате за първи път. Моля променете Вашата парола.'; $messages['disablednotice'] = 'Системата е в режим на поддръжка и не е възможна промяна на паролата. Всичко би трябвало да се нормализира съвсем скоро. Извиняваме са за причиненото неудобство.'; +$messages['passwinhistory'] = 'Тази парола вече е била използвана.'; +$messages['samepasswd'] = 'Новата парола трябва да е различна от старата парола.'; +$messages['passwdexpirewarning'] = 'Внимание! Срокът на Вашата парола изтича съвсем скоро и е препоръчително да я смените преди $expirationdatetime.'; +$messages['passwdexpired'] = 'Срокът на Вашата парола е изтекъл и трябва да я смените точно сега!'; diff --git a/plugins/password/localization/cy_GB.inc b/plugins/password/localization/cy_GB.inc index 765e445603a..93e9ea5a087 100644 --- a/plugins/password/localization/cy_GB.inc +++ b/plugins/password/localization/cy_GB.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Rhaid i\'r cyfrinair gynnwys o leia un rhif a un cy $messages['passwordforbidden'] = 'Mae\'r cyfrinair yn cynnwys llythrennau wedi gwahardd.'; $messages['firstloginchange'] = 'Dyma eich mewngofnodiad cynta. Newidiwch eich cyfrinair.'; $messages['disablednotice'] = 'Mae gwaith cynnal a chadw ar y system ar hyn o bryd a nid yw\'n bosib newid y cyfrinair ar hyn o bryd. Fe ddylai fod popeth nol i\'r arfer yn fuan. Rydym yn ymddiheuro am yr anghyfleustra.'; +$messages['passwinhistory'] = 'Defnyddiwyd y cyfrinair hwn o\'r blaen.'; +$messages['samepasswd'] = 'Rhaid i\'r cyfrinair newydd fod yn wahanol i\'r hen un.'; +$messages['passwdexpirewarning'] = 'Rhybudd! Fe fydd eich cyfrinair yn dod i ben cyn hir, newidiwch e cyn $expirationdatetime.'; +$messages['passwdexpired'] = 'Mae\'ch cyfrinair wedi dod i ben, rhaid i chi ei newid nawr!'; diff --git a/plugins/password/localization/da_DK.inc b/plugins/password/localization/da_DK.inc index 9265d836943..f0854487a65 100644 --- a/plugins/password/localization/da_DK.inc +++ b/plugins/password/localization/da_DK.inc @@ -30,3 +30,8 @@ $messages['passwordshort'] = 'Adgangskoden skal være mindst $length tegn lang.' $messages['passwordweak'] = 'Adgangskoden skal indeholde mindst et tal og et tegnsætningstegn (-.,)'; $messages['passwordforbidden'] = 'Adgangskoden indeholder forbudte tegn.'; $messages['firstloginchange'] = 'Dette er første gang du logger ind, ændre venligst din adgangskode'; +$messages['disablednotice'] = 'Systemet vedligeholdes i øjeblikket og det er pt. ikke muligt at skifte kodeord. Alt burde være oppe igen om lidt. Vi beklager ulejligheden. '; +$messages['passwinhistory'] = 'Kodeordet har tidligere været anvendt. '; +$messages['samepasswd'] = 'Det nye kodeord skal være forskelligt fra det gamle. '; +$messages['passwdexpirewarning'] = 'Advarsel, Dit kodeord udløber snart. Du skal ændre det før $expirationdatetime.'; +$messages['passwdexpired'] = 'Dit kodeord er udløbet, du skal ændre det nu!'; diff --git a/plugins/password/localization/de_DE.inc b/plugins/password/localization/de_DE.inc index 19eddcb26a7..63c81543045 100644 --- a/plugins/password/localization/de_DE.inc +++ b/plugins/password/localization/de_DE.inc @@ -29,5 +29,9 @@ $messages['internalerror'] = 'Neues Passwort konnte nicht gespeichert werden.'; $messages['passwordshort'] = 'Passwort muss mindestens $length Zeichen lang sein.'; $messages['passwordweak'] = 'Passwort muss mindestens eine Zahl und ein Sonderzeichen enthalten.'; $messages['passwordforbidden'] = 'Passwort enthält unzulässige Zeichen.'; -$messages['firstloginchange'] = 'Dies ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.'; +$messages['firstloginchange'] = 'Das ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.'; $messages['disablednotice'] = 'Das System befindet sich derzeit im Wartungszustand und eine Passwortänderung ist im Moment nicht möglich. Alles sollte bald wieder normal sein. Wir bitten um Entschuldigung für die Unannehmlichkeiten.'; +$messages['passwinhistory'] = 'Dieses Passwort wurde bereits zu einem früheren Zeitpunkt verwendet.'; +$messages['samepasswd'] = 'Das neue Passwort muss sich von dem Alten unterscheiden.'; +$messages['passwdexpirewarning'] = 'Achtung! Ihr Passwort läuft am $expirationdatetime ab. Ändern Sie es rechtzeitig.'; +$messages['passwdexpired'] = 'Ihr Passwort ist abgelaufen, ändern Sie es jetzt!'; diff --git a/plugins/password/localization/en_GB.inc b/plugins/password/localization/en_GB.inc index ddd0c52de09..2120f8f3bf6 100644 --- a/plugins/password/localization/en_GB.inc +++ b/plugins/password/localization/en_GB.inc @@ -31,8 +31,3 @@ $messages['passwordweak'] = 'Password must include at least one number and one s $messages['passwordforbidden'] = 'Password contains forbidden characters.'; $messages['firstloginchange'] = 'This is your first login. Please change your password.'; $messages['disablednotice'] = 'The system is currently under maintenance and password change is not possible at the moment. Everything should be back to normal soon. We apologise for any inconvenience.'; -$messages['passwdinhistory'] = 'This password has already been used previously.'; -$messages['samepasswd'] = 'New password have to be different from the old one.'; -$messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.'; -$messages['passwdexpired'] = 'Your password has expired, you have to change it now!'; - diff --git a/plugins/password/localization/es_ES.inc b/plugins/password/localization/es_ES.inc index 43951aca094..180e989eeeb 100644 --- a/plugins/password/localization/es_ES.inc +++ b/plugins/password/localization/es_ES.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'La contraseña debe incluir al menos un número y u $messages['passwordforbidden'] = 'La contraseña introducida contiene caracteres no permitidos.'; $messages['firstloginchange'] = 'Este es su primer inicio de sesión. Por favor, cambie su contraseña.'; $messages['disablednotice'] = 'El sistema actualmente está en mantenimiento y ahora no se puede cambiar la contraseña. Todo debería volver a la normalidad pronto. Disculpa las molestias.'; +$messages['passwinhistory'] = 'Esta contraseña ya se ha usado previamente.'; +$messages['samepasswd'] = 'La nueva contraseña tiene que ser diferente a la antigua.'; +$messages['passwdexpirewarning'] = '¡ Atención! Su nueva contraseña expirará pronto, cámbiela antes de $expirationdatetime.'; +$messages['passwdexpired'] = 'Su contraseña ha expirado, tiene que cambiarla ahora.'; diff --git a/plugins/password/localization/fr_FR.inc b/plugins/password/localization/fr_FR.inc index 09b76eb8945..49810e2b5b4 100644 --- a/plugins/password/localization/fr_FR.inc +++ b/plugins/password/localization/fr_FR.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Le mot de passe doit comporter au moins un chiffre $messages['passwordforbidden'] = 'Le mot de passe contient des caractères interdits.'; $messages['firstloginchange'] = 'Ceci est votre première connexion. Veuillez changer votre mot de passe.'; $messages['disablednotice'] = 'Le système est en cours de maintenance et les changements de mot de passe sont impossibles pour l\'instant. Tout devrait redevenir normal sous peu. Nous regrettons tout inconvénient que cette situation pourrait occasionner.'; +$messages['passwinhistory'] = 'Le mot de passe a déjà été utilisé précédemment.'; +$messages['samepasswd'] = 'Le nouveau mot de passe doit être différent du précédent.'; +$messages['passwdexpirewarning'] = 'Attention ! Votre mot de passe expirera prochainnement. Changez-le avant le $expirationdatetime.'; +$messages['passwdexpired'] = 'Votre mot de passe a expiré. Vous devez le changer maintenant !'; diff --git a/plugins/password/localization/he_IL.inc b/plugins/password/localization/he_IL.inc index e59551c6dca..15b852213c4 100644 --- a/plugins/password/localization/he_IL.inc +++ b/plugins/password/localization/he_IL.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'הסיסמה חייבת לכלול לפחות סי $messages['passwordforbidden'] = 'הסיסמה מכילה תווים אסורים.'; $messages['firstloginchange'] = 'זוהי כניסתך הראשונה. אנא שנה את סיסמתך.'; $messages['disablednotice'] = 'לא ניתן לשנות סיסמה כעת כי המערכת התחזוקה. המערכת תחזור בקרוב לפעולה רגילה. אנו מתנצלים על אי הנוחות.'; +$messages['passwinhistory'] = 'הסיסמה היתה בשימוש מקודם'; +$messages['samepasswd'] = 'הסיסמה החדשה צריכה להיות שונה מהישנה'; +$messages['passwdexpirewarning'] = 'אזהרה! הסיסמה תפוג בקרוב. יש לשנותה לפני expirationdatetime$.'; +$messages['passwdexpired'] = 'פג תוקפה של הסיסמה. יש לשנותה כעת!'; diff --git a/plugins/password/localization/hu_HU.inc b/plugins/password/localization/hu_HU.inc index 711244e24c6..477fc830f36 100644 --- a/plugins/password/localization/hu_HU.inc +++ b/plugins/password/localization/hu_HU.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'A jelszónak mindenképpen kell tartalmaznia egy sz $messages['passwordforbidden'] = 'A jelszó tiltott karaktert is tartalmaz.'; $messages['firstloginchange'] = 'Ez az első belépésed. Változtass jelszót.'; $messages['disablednotice'] = 'A rendszer jelenleg karbantartás alatt van és a jelszó módosítás nem lehetséges ebben a pillanatban. Minden visszaáll normálisra hamarosan. A kellemetlenségért elnézést kérünk.'; +$messages['passwinhistory'] = 'A megadott jelszó volt már használva.'; +$messages['samepasswd'] = 'Az új jelszó nem lehet azonos a régi jelszóval.'; +$messages['passwdexpirewarning'] = 'Figyelem! A jelszavad hamarosan lejár, változtasd meg még $expirationdatetime elött.'; +$messages['passwdexpired'] = 'A jelszavad lejárt, adj meg újat.'; diff --git a/plugins/password/localization/id_ID.inc b/plugins/password/localization/id_ID.inc index 9a7e6327945..6b2e6f0da6a 100644 --- a/plugins/password/localization/id_ID.inc +++ b/plugins/password/localization/id_ID.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Sandi harus menyertakan setidaknya satu angka dan s $messages['passwordforbidden'] = 'Sandi mengandung karakter terlarang.'; $messages['firstloginchange'] = 'Ini login pertama Anda. Harap ubah sandi Anda.'; $messages['disablednotice'] = 'Sistem saat ini sedang dalam pemeliharaan dan perubahan sandi tidak mungkin saat ini. Semua mestinya segera kembali normal. Kami mohon maaf untuk ketidaknyamanan ini.'; +$messages['passwinhistory'] = 'Kata sandi sudah pernah digunakan'; +$messages['samepasswd'] = 'Kata sandi harus berbeda dengan yang sebelumnya'; +$messages['passwdexpirewarning'] = 'Peringatan! Masa kata sandi segera berakhir, ganti sebelum $expirationdatetime.'; +$messages['passwdexpired'] = 'Kata sandi kadaluarsa, harus diganti sekarang.'; diff --git a/plugins/password/localization/is_IS.inc b/plugins/password/localization/is_IS.inc new file mode 100644 index 00000000000..82810e8ea91 --- /dev/null +++ b/plugins/password/localization/is_IS.inc @@ -0,0 +1,33 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Password plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/ +*/ +$labels['changepasswd'] = 'Breyta lykilorði'; +$labels['curpasswd'] = 'Núverandi lykilorð:'; +$labels['newpasswd'] = 'Nýtt lykilorð:'; +$labels['confpasswd'] = 'Staðfesta nýtt lykilorð:'; +$messages['nopassword'] = 'Settu inn nýtt lykilorð.'; +$messages['nocurpassword'] = 'Settu inn núverandi lykilorð.'; +$messages['passwordincorrect'] = 'Núverandi lykilorð er ekki rétt.'; +$messages['passwordinconsistency'] = 'Lykilorðin samsvara ekki, reyndu aftur.'; +$messages['crypterror'] = 'Gat ekki vistað nýtt lykilorð. Dulritunareiginleika vantar.'; +$messages['connecterror'] = 'Gat ekki vistað nýtt lykilorð. Villa í tengingu.'; +$messages['internalerror'] = 'Gat ekki vistað nýtt lykilorð.'; +$messages['passwordshort'] = 'Lykilorð þarf að vera að minnsta kosti $length stafa langt.'; +$messages['passwordweak'] = 'Lykilorð þarf að innihalda a.m.k. einn tölustaf og eitt greinamerki.'; +$messages['passwordforbidden'] = 'Lykilorð inniheldur óleyfilega stafi.'; +$messages['firstloginchange'] = 'Þetta er í fyrsta skipti sem þú skráir þig inn. Endilega breyttu lykilorðinu þínu.'; +$messages['disablednotice'] = 'Kerfið er í viðhaldsfasa og því er ekki hægt að breyta lykilorðum sem stendur. Allt ætti að vera komið í samt lag innan stundar. Við biðjumst afsökunar á þeim óþægindum sem af þessu geta hlotist.'; diff --git a/plugins/password/localization/it_IT.inc b/plugins/password/localization/it_IT.inc index 359a9646a7c..9803f580f8b 100644 --- a/plugins/password/localization/it_IT.inc +++ b/plugins/password/localization/it_IT.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'La password deve includere almeno una cifra decimal $messages['passwordforbidden'] = 'La password contiene caratteri proibiti.'; $messages['firstloginchange'] = 'Questo è il tuo primo accesso. Si prega di cambiare la propria password.'; $messages['disablednotice'] = 'Il sistema è attualmente in manutenzione e pertanto al momento non è possibile effettuare il cambio della password. Presto tutto tornerà alla normalità. Ci scusiamo per il disagio.'; +$messages['passwinhistory'] = 'Questa password è già stata usata precedentemente'; +$messages['samepasswd'] = 'La nuova password deve essere differente da una usata precedentemente.'; +$messages['passwdexpirewarning'] = 'Attenzione! La tua password scadrà a breve, cambiala prima del $expiretiondatetime.'; +$messages['passwdexpired'] = 'La tua password è scaduta, devi cambiarla adesso.'; diff --git a/plugins/password/localization/ja_JP.inc b/plugins/password/localization/ja_JP.inc index 56c91944dcc..56cda0ddcd2 100644 --- a/plugins/password/localization/ja_JP.inc +++ b/plugins/password/localization/ja_JP.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'パスワードは少なくとも数字の 1 文字 $messages['passwordforbidden'] = 'パスワードに禁止された文字が含まれています。'; $messages['firstloginchange'] = 'これは初めてのログインです。パスワードを変更してください。'; $messages['disablednotice'] = 'このシステムは今は保守中で、現在のところパスワードの変更はできません。しばらくすれば、通常の状態に復帰するはずです。ご迷惑を掛けて申し訳ありません。'; +$messages['passwinhistory'] = 'このパスワードは以前に使用しています。'; +$messages['samepasswd'] = '新しいパスワードは以前のものと異なっていなければなりません。'; +$messages['passwdexpirewarning'] = '警告! パスワードの有効期限がすぐに切れます、$expirationdatetimeよりも前に変更してください。'; +$messages['passwdexpired'] = 'パスワードの期限が切れています、今すぐ変更しなければなりません!'; diff --git a/plugins/password/localization/ko_KR.inc b/plugins/password/localization/ko_KR.inc index c21675e6173..a0aae1594bd 100644 --- a/plugins/password/localization/ko_KR.inc +++ b/plugins/password/localization/ko_KR.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = '암호는 숫자 및 특수문자를 각각 한 개 $messages['passwordforbidden'] = '암호가 금지된 문자을 포함하고 있습니다.'; $messages['firstloginchange'] = '처음 로그인하셨습니다. 암호를 변경해주세요.'; $messages['disablednotice'] = '시스템이 현재 유지보수 중이며 암호 변경이 일시적으로 불가능합니다. 모든 것이 조만간 정상화 될 예정입니다. 불편을 끼쳐드려 죄송합니다.'; +$messages['passwinhistory'] = '이 암호는 이미 이전에 사용됐습니다.'; +$messages['samepasswd'] = '새로운 암호는 예전 암호와 달라야 합니다.'; +$messages['passwdexpirewarning'] = '경고! 암호가 곧 만료됩니다. $expirationdatetime 이전에 변경하십시오.'; +$messages['passwdexpired'] = '암호가 만료됐습니다. 지금 변경하셔야 합니다!'; diff --git a/plugins/password/localization/pl_PL.inc b/plugins/password/localization/pl_PL.inc index a12574d7941..f176affe258 100644 --- a/plugins/password/localization/pl_PL.inc +++ b/plugins/password/localization/pl_PL.inc @@ -31,7 +31,7 @@ $messages['passwordweak'] = 'Hasło musi zawierać co najmniej jedną cyfrę i z $messages['passwordforbidden'] = 'Hasło zawiera niedozwolone znaki.'; $messages['firstloginchange'] = 'To jest twoje pierwsze logowanie. Proszę zmień hasło.'; $messages['disablednotice'] = 'System jest w trakcie konserwacji i zmiana hasła w tym momencie nie jest możliwa. Wszystko powinno wrócić do normy w niedługim czasie. Przepraszamy za wszelkie niedogodności'; -$messages['passwdinhistory'] = 'To hasło było już użyte poprzednio.'; -$messages['samepasswd'] = 'Nowe hasło musi być inne niż obecne.'; -$messages['passwdexpirewarning'] = 'UWAGA! Twoje hasło niebawem wygaśnie, zmień je przed $expirationdatetime.'; -$messages['passwdexpired'] = 'Twoje hasło wygasło, musisz je natychmiast zmienić!'; +$messages['passwinhistory'] = 'To hasło było już wcześniej użyte'; +$messages['samepasswd'] = 'Nowe hasło musi być różne od poprzednich.'; +$messages['passwdexpirewarning'] = 'Uwaga! Twoje hasło wkrótce wygaśnie, zmień je przed $expirationdatetime.'; +$messages['passwdexpired'] = 'Twoje hasło wygasło, musisz je zmienić.'; diff --git a/plugins/password/localization/pt_BR.inc b/plugins/password/localization/pt_BR.inc index 195b117c5d4..8c974e7692c 100644 --- a/plugins/password/localization/pt_BR.inc +++ b/plugins/password/localization/pt_BR.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'A senha precisa conter ao menos um número e um car $messages['passwordforbidden'] = 'A senha contém caracteres proibidos.'; $messages['firstloginchange'] = 'Este é o seu primeiro acesso. Por favor altere sua senha.'; $messages['disablednotice'] = 'O sistema está em manutenção e a senha não pode ser alterada no momento. Tudo voltará ao normal em breve. Pedimos desculpas pelo inconveniente.'; +$messages['passwinhistory'] = 'Esta senha já foi usada antes.'; +$messages['samepasswd'] = 'A nova senha deve ser diferente da antiga.'; +$messages['passwdexpirewarning'] = 'Atenção! Sua senha vai expirar em breve, altere ela antes de $expirationdatetime.'; +$messages['passwdexpired'] = 'Sua senha expirou, você precisa alterá-la agora!'; diff --git a/plugins/password/localization/pt_PT.inc b/plugins/password/localization/pt_PT.inc index 80234532dc8..6c0707aa1fc 100644 --- a/plugins/password/localization/pt_PT.inc +++ b/plugins/password/localization/pt_PT.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'A palavra-passe deve incluir pelo menos um número $messages['passwordforbidden'] = 'A palavra-passe contém caracteres não suportados.'; $messages['firstloginchange'] = 'Este é o seu primeiro acesso. Por favor, altere a sua palavra-passe.'; $messages['disablednotice'] = 'O sistema está em manutenção e a alteração da password não é possível neste momento. Tudo deve volta ao normal em breve. Pedimos desculpas por qualquer inconveniente.'; +$messages['passwinhistory'] = 'Esta palavra-passe já foi usada anteriormente.'; +$messages['samepasswd'] = 'A nova palavra-passe tem de ser diferente da antiga.'; +$messages['passwdexpirewarning'] = 'Aviso! A sua palavra-passe irá expirar em breve. Deve alterá-la antes de $expirationdatetime.'; +$messages['passwdexpired'] = 'A sua palavra-passe expirou. Tem de alterá-la agora!'; diff --git a/plugins/password/localization/ru_RU.inc b/plugins/password/localization/ru_RU.inc index af5e3ffd8de..a9b1506ac90 100644 --- a/plugins/password/localization/ru_RU.inc +++ b/plugins/password/localization/ru_RU.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Пароль должен включать в се $messages['passwordforbidden'] = 'Пароль содержит недопустимые символы.'; $messages['firstloginchange'] = 'Вы выполнили вход впервые. Измените ваш пароль.'; $messages['disablednotice'] = 'В настоящее время проводится обслуживание системы и изменение пароля не возможно в данный момент. Все должно вернуться в нормальное состояние в ближайшее время. Приносим свои извинения за причиненные неудобства.'; +$messages['passwinhistory'] = 'Этот пароль уже использовался ранее.'; +$messages['samepasswd'] = 'Новый пароль должен отличаться от старого.'; +$messages['passwdexpirewarning'] = 'Внимание! Ваш пароль истекает в ближайшее время, измените его до $expirationdatetime.'; +$messages['passwdexpired'] = 'Срок действия вашего пароля истек, вы должны изменить его сейчас!'; diff --git a/plugins/password/localization/sk_SK.inc b/plugins/password/localization/sk_SK.inc index 5666e2c7944..cabc35fd398 100644 --- a/plugins/password/localization/sk_SK.inc +++ b/plugins/password/localization/sk_SK.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Heslo musí obsahovať aspoň jedno číslo a jedno $messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.'; $messages['firstloginchange'] = 'Prihlásili ste sa po prvýkrát. Prosím zmeňte si prístupové heslo.'; $messages['disablednotice'] = 'V systéme momentálne prebieha údržba a preto nie je teraz možné zmeniť heslo. Čoskoro by sa však situácia mala vrátiť do normálu. Ospravedlňujeme sa Vám za spôsobené nepríjemnosti.'; +$messages['passwinhistory'] = 'Toto heslo už bolo predtým použité.'; +$messages['samepasswd'] = 'Nové heslo by sa malo odlišovať od pôvodného hesla.'; +$messages['passwdexpirewarning'] = 'Pozor! Platnosť Vášho hesla čoskoro vyprší, zmeňte ho pred $expirationdatetime.'; +$messages['passwdexpired'] = 'Platnosť Vášho hesla vypršala, teraz ho musíte zmeniť!'; diff --git a/plugins/password/localization/sl_SI.inc b/plugins/password/localization/sl_SI.inc index 421332513b3..5428b9adb9c 100644 --- a/plugins/password/localization/sl_SI.inc +++ b/plugins/password/localization/sl_SI.inc @@ -15,6 +15,7 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/ */ +$labels['changepasswd'] = 'Spremenjeno geslo'; $labels['curpasswd'] = 'Obstoječe geslo:'; $labels['newpasswd'] = 'Novo geslo:'; $labels['confpasswd'] = 'Potrdi novo geslo:'; @@ -28,3 +29,9 @@ $messages['internalerror'] = 'Novega gesla ni bilo mogoče shraniti.'; $messages['passwordshort'] = 'Geslo mora vsebovati vsaj $length znakov'; $messages['passwordweak'] = 'Geslo mora vključevati vsaj eno številko in ločilo.'; $messages['passwordforbidden'] = 'Geslo vsebuje neveljavne znake.'; +$messages['firstloginchange'] = 'To je vaša prva prijava. Spremenite začetno geslo.'; +$messages['disablednotice'] = 'Sistem se trenutno posodablja, zato sprememba gesla v tem trenutku ni mogoča. Postopek bo mogoče opraviti v kratkem. Za nevšečnosti se opravičujemo.'; +$messages['passwinhistory'] = 'To geslo ste v preteklosti že uporabili.'; +$messages['samepasswd'] = 'Novo geslo se mora razlikovati od prejšnjega.'; +$messages['passwdexpirewarning'] = 'Opozorilo! Vaše geslo bo kmalu poteklo, spremenite ga pred $expirationdatetime.'; +$messages['passwdexpired'] = 'Vaše geslo je poteklo, spremenite ga!'; diff --git a/plugins/password/localization/sq_AL.inc b/plugins/password/localization/sq_AL.inc index 2e0bda090d7..df6488463ba 100644 --- a/plugins/password/localization/sq_AL.inc +++ b/plugins/password/localization/sq_AL.inc @@ -16,8 +16,22 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/ */ $labels['changepasswd'] = 'Ndrysho fjalëkalimin'; -$labels['newpasswd'] = 'Fjalëkalimi i ri:'; -$labels['confpasswd'] = 'Konfirmo fjalëkalimin e ri:'; -$messages['nopassword'] = 'Ju lutem shkruani fjalëkalimin e ri.'; -$messages['nocurpassword'] = 'Ju lutem shkruani fjalëkalimin e tanishëm.'; -$messages['passwordincorrect'] = 'Fjalëkalimi i tanishëm nuk është i saktë.'; +$labels['curpasswd'] = 'Fjalëkalimi i Tanishëm'; +$labels['newpasswd'] = 'Fjalëkalimi i Ri:'; +$labels['confpasswd'] = 'Konfirmoni fjalëkalimin e ri:'; +$messages['nopassword'] = 'Ju lutemi, futni fjalëkalimin e ri.'; +$messages['nocurpassword'] = 'Ju lutemi, futni fjalëkalimin e tanishëm.'; +$messages['passwordincorrect'] = 'Fjalëkalimi i tanishëm është i pasaktë.'; +$messages['passwordinconsistency'] = 'Fjalëkalimet nuk përputhen, ju lutemi, riprovoni.'; +$messages['crypterror'] = 'S’u ruajt dot fjalëkalimi i ri. Mungon funksioni i Fshehtëzimit.'; +$messages['connecterror'] = 'S’u ruajt dot fjalëkalimi i ri. Gabim lidhjejej.'; +$messages['internalerror'] = 'S’u ruajt dot fjalëkalimi i ri.'; +$messages['passwordshort'] = 'Fjalëkalimi duhet të jetë të paktën $length shenja i gjatë.'; +$messages['passwordweak'] = 'Fjalëkalimi duhet të përmbajë të paktën një numër dhe një shenjë pikësimi.'; +$messages['passwordforbidden'] = 'Fjalëkalimi përmban shenja të ndaluara.'; +$messages['firstloginchange'] = 'Kjo është hyrja juaj e parë. Ju lutemi, ndryshoni fjalëkalimin tuaj.'; +$messages['disablednotice'] = 'Sistemi është hëpërhë nën gjendje punimesh mirëmbajtjeje dhe ndryshimi i fjalëkalimit s’është i mundur në këtë çast. Gjithçka do të duhej të ish kthyer në gjendje normale shumë shpejt. Kërkojmë ndjesë për çfarëdo siklet.'; +$messages['passwinhistory'] = 'Ky fjalëkalim është përdorur një herë më parë.'; +$messages['samepasswd'] = 'Fjalëkalimi i ri duhet të jetë i ndryshëm nga i vjetri.'; +$messages['passwdexpirewarning'] = 'Kujdes! Fjalëkalimi juaj do të skadojë së shpejti, ndryshojeni para $expirationdatetime.'; +$messages['passwdexpired'] = 'Fjalëkalimi juaj ka skaduar, lypset ta ndryshoni tani!'; diff --git a/plugins/password/localization/sv_SE.inc b/plugins/password/localization/sv_SE.inc index c3207582d76..1b0b5eaf6d2 100644 --- a/plugins/password/localization/sv_SE.inc +++ b/plugins/password/localization/sv_SE.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Lösenordet måste innehålla minst en siffra och e $messages['passwordforbidden'] = 'Lösenordet innehåller otillåtna tecken.'; $messages['firstloginchange'] = 'Du loggar in för första gången. Vänligen ändra ditt lösenord.'; $messages['disablednotice'] = 'Underhåll av systemet pågår och därför kan lösenord inte ändras för tillfället. Allt ska fungera normalt igen så snart som möjligt. Ursäkta den eventuella olägenheten underhållet orsakar.'; +$messages['passwinhistory'] = 'Lösenordet har redan använts tidigare.'; +$messages['samepasswd'] = 'Lösenordet får inte vara samma som det gamla.'; +$messages['passwdexpirewarning'] = 'Varning! Lösenordet blir snart ogiltigt, ändra det innan $expirationdatetime.'; +$messages['passwdexpired'] = 'Lösenordet är ogiltigt, du måste ändra det nu!'; diff --git a/plugins/password/localization/th_TH.inc b/plugins/password/localization/th_TH.inc new file mode 100644 index 00000000000..6a2d65fffb6 --- /dev/null +++ b/plugins/password/localization/th_TH.inc @@ -0,0 +1,37 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Password plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/ +*/ +$labels['changepasswd'] = 'เปลี่ยนรหัสผ่าน'; +$labels['curpasswd'] = 'รหัสผ่านปัจจุบัน'; +$labels['newpasswd'] = 'รหัสผ่านใหม่'; +$labels['confpasswd'] = 'ยืนยันรหัสผ่านใหม่'; +$messages['nopassword'] = 'กรุณาใส่รหัสผ่านใหม่'; +$messages['nocurpassword'] = 'กรุณาใส่รหัสผ่านปัจจุบัน'; +$messages['passwordincorrect'] = 'รหัสผ่านปัจจุบันไม่ถูกต้อง'; +$messages['passwordinconsistency'] = 'รหัสผ่านไม่ตรงกัน กรุณากรอกใหม่อีกครััง'; +$messages['crypterror'] = 'ไม่สามารถบันทึกรหัสผ่านใหม่. ฟังก์ชั่นการเข้ารหัสขาดหายไป.'; +$messages['connecterror'] = 'ไม่สามารถบันทึกรหัสผ่านใหม่. เชื่อมต่อผิดพลาด.'; +$messages['internalerror'] = 'ไม่สามารถบันทึกรหัสผ่านใหม่.'; +$messages['passwordshort'] = 'รหัสผ่านต้องมีอย่างน้อย $length ตัวอักษร.'; +$messages['passwordweak'] = 'รหัสผ่านต้องมีอย่างน้อยหนึ่งตัวเลขและตัวอักษรวรรคตอนหนึ่ง'; +$messages['passwordforbidden'] = 'รหัสผ่านมีอักขระต้องห้าม'; +$messages['firstloginchange'] = 'นี่คือครั้งแรกในการเข้าระบบ กรุณาเปลี่ยนรหัสผ่านของคุณ'; +$messages['disablednotice'] = 'ระบบขณะนี้อยู่ระหว่างการบำรุงรักษาและการเปลี่ยนรหัสผ่านเป็นไปไม่ได้ในขณะนี้ ทุกอย่างควรจะกลับมาเป็นปกติเร็ว ๆ นี้ เราต้องขออภัยในความไม่สะดวก.'; +$messages['passwinhistory'] = 'รหัสผ่านนี้ได้ถูกนำมาใช้ก่อนหน้านี้'; +$messages['samepasswd'] = 'รหัสผ่านใหม่จะต้องมีความแตกต่างจากเดิม'; +$messages['passwdexpirewarning'] = 'คำเตือน! รหัสผ่านของคุณจะหมดอายุในเร็ว ๆ นี้ เปลี่ยนก่อน $expirationdatetime.'; +$messages['passwdexpired'] = 'รหัสผ่านของคุณหมดอายุแล้วคุณมีการเปลี่ยนแปลงในขณะนี้!'; diff --git a/plugins/password/localization/tr_TR.inc b/plugins/password/localization/tr_TR.inc index 60af6494f34..4f9e3794715 100644 --- a/plugins/password/localization/tr_TR.inc +++ b/plugins/password/localization/tr_TR.inc @@ -15,19 +15,23 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/ */ -$labels['changepasswd'] = 'Parolayı değiştir'; -$labels['curpasswd'] = 'Şimdiki Parola:'; +$labels['changepasswd'] = 'Parola Değiştirme'; +$labels['curpasswd'] = 'Geçerli Parola:'; $labels['newpasswd'] = 'Yeni Parola:'; -$labels['confpasswd'] = 'Yeni Parolayı Onaylayın:'; -$messages['nopassword'] = 'Yeni parolayı giriniz.'; -$messages['nocurpassword'] = 'Şimdiki parolayı giriniz.'; -$messages['passwordincorrect'] = 'Şimdiki parolayı yanlış girdiniz.'; -$messages['passwordinconsistency'] = 'Girdiğiniz parolalar uyuşmuyor.Tekrar deneyiniz.'; -$messages['crypterror'] = 'Yeni parola kaydedilemedi. Şifreleme fonksiyonu mevcut değil.'; -$messages['connecterror'] = 'Yeni parola kaydedilemedi. Bağlantı hatası!...'; +$labels['confpasswd'] = 'Yeni Parola Onayı:'; +$messages['nopassword'] = 'Yeni parolayı yazın.'; +$messages['nocurpassword'] = 'Geçerli parolayı yazın.'; +$messages['passwordincorrect'] = 'Geçerli parolayı yanlış yazdınız.'; +$messages['passwordinconsistency'] = 'Parola ile onayı aynı değil, lütfen yeniden deneyin.'; +$messages['crypterror'] = 'Yeni parola kaydedilemedi. Şifreleme işlevi bulunamadı.'; +$messages['connecterror'] = 'Yeni parola kaydedilemedi. Bağlantı sorunu.'; $messages['internalerror'] = 'Yeni parola kaydedilemedi.'; $messages['passwordshort'] = 'Parola en az $length karakterden oluşmalı.'; $messages['passwordweak'] = 'Parola en az bir sayı ve bir noktalama işareti içermeli.'; -$messages['passwordforbidden'] = 'Parola uygunsuz karakter(ler) içeriyor.'; -$messages['firstloginchange'] = 'Bu ilk girişiniz. Parolanızı değiştiriniz.'; -$messages['disablednotice'] = 'Sistem bakımda olduğundan parolayı değiştiremezsiniz. Lüten daha sonra tekrar deneyiniz. Verdiğimiz rahatsızlıktan dolayı özür dileriz.'; +$messages['passwordforbidden'] = 'Parolada izin verilmeyen karakterler var.'; +$messages['firstloginchange'] = 'İlk kez oturum açıyorsunuz. Parolanızı değiştirin.'; +$messages['disablednotice'] = 'Sistem bakımda olduğundan parola değiştirilemez. Lütfen daha sonra yeniden deneyin. Verdiğimiz rahatsızlıktan dolayı özür dileriz.'; +$messages['passwinhistory'] = 'Bu parola daha önce kullanılmış.'; +$messages['samepasswd'] = 'Yeni parola eski paroladan farklı olmalıdır.'; +$messages['passwdexpirewarning'] = 'Uyarı! Parolanızın kullanma süresi yakında dolacak. $expirationdatetime tarihinden önce değiştirin.'; +$messages['passwdexpired'] = 'Parolanızın kullanma süresi dolmuş. Şimdi değiştirmelisiniz!'; diff --git a/plugins/password/localization/uk_UA.inc b/plugins/password/localization/uk_UA.inc index 0b74d73badc..cd2836b6b00 100644 --- a/plugins/password/localization/uk_UA.inc +++ b/plugins/password/localization/uk_UA.inc @@ -31,3 +31,7 @@ $messages['passwordweak'] = 'Пароль повинен містити як м $messages['passwordforbidden'] = 'Пароль містить заборонені символи.'; $messages['firstloginchange'] = 'Це Ваше перше входження в систему. Змініть, будь ласка, свій пароль.'; $messages['disablednotice'] = 'Система зараз в режимі обслуговування і змінити пароль наразі неможливо. Невдовзі все має вернутися в норму. Просимо вибачення за будь-які незручності.'; +$messages['passwinhistory'] = 'Цей пароль вже використовувався раніше.'; +$messages['samepasswd'] = 'Новий пароль повинен відрізнятися від старого.'; +$messages['passwdexpirewarning'] = 'УВАГА! У вашого пароля закінчується термін, змінити його як омога скоріше до $expirationdatetime.'; +$messages['passwdexpired'] = 'Ваш пароль закінчився, ви повинні змінити це зараз!'; diff --git a/plugins/enigma/localization/ar_SA.inc b/plugins/subscriptions_option/localization/is_IS.inc similarity index 61% rename from plugins/enigma/localization/ar_SA.inc rename to plugins/subscriptions_option/localization/is_IS.inc index c7b998933f4..8693d4fdfc2 100644 --- a/plugins/enigma/localization/ar_SA.inc +++ b/plugins/subscriptions_option/localization/is_IS.inc @@ -1,11 +1,11 @@ .inc | + | plugins/subscriptions_option/localization/.inc | | | - | Localization file of the Roundcube Webmail ACL plugin | - | Copyright (C) 2012-2016, The Roundcube Dev Team | + | Localization file of the Roundcube Webmail Subscriptions plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -13,7 +13,7 @@ | | +-----------------------------------------------------------------------+ - For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/ + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/ */ -$messages['decryptbadpass'] = 'فشل فك التشفير. كلمة السر غير صالحة.'; +$labels['useimapsubscriptions'] = 'Nota IMAP-áskriftir'; ?> diff --git a/plugins/subscriptions_option/localization/sq_AL.inc b/plugins/subscriptions_option/localization/sq_AL.inc new file mode 100644 index 00000000000..f952edd0d1e --- /dev/null +++ b/plugins/subscriptions_option/localization/sq_AL.inc @@ -0,0 +1,19 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Subscriptions plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/ +*/ +$labels['useimapsubscriptions'] = 'Përdor Pajtime IMAP'; +?> diff --git a/plugins/userinfo/localization/is_IS.inc b/plugins/userinfo/localization/is_IS.inc new file mode 100644 index 00000000000..12172618b82 --- /dev/null +++ b/plugins/userinfo/localization/is_IS.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Userinfo plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/ +*/ +$labels['userinfo'] = 'Notandaupplýsingar'; +$labels['created'] = 'Búið til'; +$labels['lastlogin'] = 'Síðasta innskráning'; +$labels['defaultidentity'] = 'Sjálfgefið auðkenni'; +?> \ No newline at end of file diff --git a/plugins/userinfo/localization/sq_AL.inc b/plugins/userinfo/localization/sq_AL.inc index 0e2ee16a633..cac02ea8a10 100644 --- a/plugins/userinfo/localization/sq_AL.inc +++ b/plugins/userinfo/localization/sq_AL.inc @@ -15,7 +15,8 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/ */ -$labels['userinfo'] = 'Informacionet e përdoruesit'; -$labels['created'] = 'Krijuar'; -$labels['lastlogin'] = 'Hyrja e fundit'; +$labels['userinfo'] = 'Të dhëna Përdoruesi'; +$labels['created'] = 'Krijuar më'; +$labels['lastlogin'] = 'Hyrja e Fundit'; +$labels['defaultidentity'] = 'Identitet Parazgjedhje'; ?> \ No newline at end of file diff --git a/plugins/userinfo/localization/tr_TR.inc b/plugins/userinfo/localization/tr_TR.inc index 5d876f4d29b..4fb11614f9b 100644 --- a/plugins/userinfo/localization/tr_TR.inc +++ b/plugins/userinfo/localization/tr_TR.inc @@ -17,6 +17,6 @@ */ $labels['userinfo'] = 'Kullanıcı bilgisi'; $labels['created'] = 'Oluşturuldu'; -$labels['lastlogin'] = 'Son Giriş'; -$labels['defaultidentity'] = 'Öntanımlı kimlik'; +$labels['lastlogin'] = 'Son Oturum Açma'; +$labels['defaultidentity'] = 'Varsayılan Kimlik'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/sq_AL.inc b/plugins/vcard_attachments/localization/sq_AL.inc new file mode 100644 index 00000000000..f5e3740ec9c --- /dev/null +++ b/plugins/vcard_attachments/localization/sq_AL.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Vcard Attachments plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/ +*/ +$labels['addvcardmsg'] = 'Shtoje vCard-in te libër adresash'; +$labels['vcardsavefailed'] = 'I pazoti të ruajë vCard-in'; +?> \ No newline at end of file diff --git a/plugins/vcard_attachments/localization/tr_TR.inc b/plugins/vcard_attachments/localization/tr_TR.inc index f524433385d..167bb5b2186 100644 --- a/plugins/vcard_attachments/localization/tr_TR.inc +++ b/plugins/vcard_attachments/localization/tr_TR.inc @@ -15,6 +15,6 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/ */ -$labels['addvcardmsg'] = 'Vcard\'ı adres deferine ekle'; +$labels['addvcardmsg'] = 'Adres defterine vCard ekle'; $labels['vcardsavefailed'] = 'vCard kaydedilemedi'; ?> \ No newline at end of file diff --git a/plugins/zipdownload/localization/is_IS.inc b/plugins/zipdownload/localization/is_IS.inc new file mode 100644 index 00000000000..81c86d51ccf --- /dev/null +++ b/plugins/zipdownload/localization/is_IS.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Zipdownload plugin | + | Copyright (C) 2012-2014, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/ +*/ +$labels['downloadall'] = 'Niðurhala öllum viðhengjum'; +$labels['download'] = 'Hlaða niður...'; +$labels['downloadmbox'] = 'Mbox snið (.zip)'; +$labels['downloadmaildir'] = 'Maildir snið (.zip)'; +$labels['downloademl'] = 'Upprunalegt (.eml)'; diff --git a/plugins/zipdownload/localization/sl_SI.inc b/plugins/zipdownload/localization/sl_SI.inc index 4fa4ca3ea37..2183f0b62f4 100644 --- a/plugins/zipdownload/localization/sl_SI.inc +++ b/plugins/zipdownload/localization/sl_SI.inc @@ -16,3 +16,7 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/ */ $labels['downloadall'] = 'Prenesi vse priponke'; +$labels['download'] = 'Prenesi...'; +$labels['downloadmbox'] = 'Mbox format (.zip)'; +$labels['downloadmaildir'] = 'Maildir format (.zip)'; +$labels['downloademl'] = 'Vir (.eml)'; diff --git a/plugins/zipdownload/localization/sq_AL.inc b/plugins/zipdownload/localization/sq_AL.inc new file mode 100644 index 00000000000..5f5eafc45f2 --- /dev/null +++ b/plugins/zipdownload/localization/sq_AL.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Zipdownload plugin | + | Copyright (C) 2012-2014, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/ +*/ +$labels['downloadall'] = 'Shkarkoji krejt bashkëngjitjet'; +$labels['download'] = 'Shkarkoni…'; +$labels['downloadmbox'] = 'Në format Mbox (.zip)'; +$labels['downloadmaildir'] = 'Në format Maildir (.zip)'; +$labels['downloademl'] = 'Burim (.eml)'; diff --git a/plugins/zipdownload/localization/tr_TR.inc b/plugins/zipdownload/localization/tr_TR.inc index 21a44eb7d6b..ee51f1159b9 100644 --- a/plugins/zipdownload/localization/tr_TR.inc +++ b/plugins/zipdownload/localization/tr_TR.inc @@ -17,6 +17,6 @@ */ $labels['downloadall'] = 'Tüm ek dosyaları indir'; $labels['download'] = 'İndir...'; -$labels['downloadmbox'] = 'Mbox biçimi(.zip)'; +$labels['downloadmbox'] = 'Mbox biçimi (.zip)'; $labels['downloadmaildir'] = 'Maildir biçimi (.zip)'; $labels['downloademl'] = 'Kaynak (.eml)'; diff --git a/program/localization/az_AZ/labels.inc b/program/localization/az_AZ/labels.inc index 2345b45b56b..fa375bd16d4 100644 --- a/program/localization/az_AZ/labels.inc +++ b/program/localization/az_AZ/labels.inc @@ -131,16 +131,24 @@ $labels['moreactions'] = 'Daha çox seçim...'; $labels['more'] = 'Daha çox'; $labels['back'] = 'Geri'; $labels['options'] = 'Ayarlar'; +$labels['first'] = 'İlk'; +$labels['last'] = 'Son'; +$labels['previous'] = 'Əvvəlki'; +$labels['next'] = 'Sonrakı'; $labels['select'] = 'Seçin'; $labels['all'] = 'Hamısı'; $labels['none'] = 'Heç biri'; $labels['currpage'] = 'Hazırki səhifəni'; +$labels['isread'] = 'Oxu'; $labels['unread'] = 'Oxunmamışları'; $labels['flagged'] = 'İşarəliləri'; +$labels['unflagged'] = 'İşarətlənməyib'; $labels['unanswered'] = 'Cavabsızları'; $labels['withattachment'] = 'Qoşma ilə'; $labels['deleted'] = 'Silinmişləri'; $labels['undeleted'] = 'Silinməyib'; +$labels['replied'] = 'Cavablanıb'; +$labels['forwarded'] = 'Yönləndirilib'; $labels['invert'] = 'İnvertliləri'; $labels['filter'] = 'Süzgəc'; $labels['list'] = 'Siyahı'; @@ -171,6 +179,10 @@ $labels['importmessages'] = 'Mesajların idxalı'; $labels['quota'] = 'Disk istifadəsi'; $labels['unknown'] = 'naməlum'; $labels['unlimited'] = 'limitsiz'; +$labels['quotatotal'] = 'Limit'; +$labels['quotaused'] = 'İşlədilib'; +$labels['quotastorage'] = 'Disk həcmi'; +$labels['quotamessage'] = 'Mesaj sayı'; $labels['quicksearch'] = 'Sürətli axtarış'; $labels['resetsearch'] = 'Axtarışı yenilə'; $labels['searchmod'] = 'Axtarış variantları'; @@ -178,6 +190,15 @@ $labels['msgtext'] = 'Bütün məktub'; $labels['body'] = 'Mətn'; $labels['type'] = 'Növ'; $labels['namex'] = 'Ad'; +$labels['currentfolder'] = 'Hazırki qovluq'; +$labels['subfolders'] = 'Bu və alt qovluqlar'; +$labels['allfolders'] = 'Bütün qovluqlar'; +$labels['searchinterval-1W'] = 'bir həftədən köhnə'; +$labels['searchinterval-1M'] = 'bir aydan əvvəl'; +$labels['searchinterval-1Y'] = 'bir ildən əvvəl'; +$labels['searchinterval1W'] = 'bir həftədən cavan'; +$labels['searchinterval1M'] = 'bir aydan cavan'; +$labels['searchinterval1Y'] = 'bir ildən cavan'; $labels['openinextwin'] = 'Yeni pəncərədə aç'; $labels['emlsave'] = 'Saxla (.eml)'; $labels['changeformattext'] = 'Sadə mətn formatında göstər'; @@ -193,6 +214,14 @@ $labels['returnreceipt'] = 'Cavab sorğusu'; $labels['dsn'] = 'Çatdırılma statusu haqda bildiriş'; $labels['mailreplyintro'] = '$date tarixdə, $sender yazıb:'; $labels['originalmessage'] = 'Orijinal məktub'; +$labels['selectimage'] = 'Şəkli seç'; +$labels['addimage'] = 'Şəkil əlavə et'; +$labels['encrypt'] = 'Şifrələ'; +$labels['encryptmessage'] = 'Mesajı şifrələ'; +$labels['importpubkeys'] = 'İctimai açarları idxal et'; +$labels['encryptedsendialog'] = 'Şifrəli mesaj göndərilir'; +$labels['keyid'] = 'Açar ID'; +$labels['keyexpired'] = 'Vaxtı keçib'; $labels['editidents'] = 'İdentifikasiyanı dəyiş'; $labels['spellcheck'] = 'Orfoqrafiya'; $labels['checkspelling'] = 'Orfoqrafiyanı yoxla'; @@ -203,6 +232,8 @@ $labels['restoremessage'] = 'Məktub bərpa edilsin?'; $labels['responses'] = 'Cavablar'; $labels['insertresponse'] = 'Cavab daxil et'; $labels['manageresponses'] = 'Cavabların idarə edilməsi'; +$labels['newresponse'] = 'Yeni cavab yarat'; +$labels['addresponse'] = 'Cavab əlavə et'; $labels['editresponse'] = 'Cavabı redaktə et'; $labels['editresponses'] = 'Cavabları redaktə et'; $labels['responsename'] = 'Ad'; @@ -268,6 +299,7 @@ $labels['assistant'] = 'Köməkçi'; $labels['spouse'] = 'Ər-arvad'; $labels['allfields'] = 'Bütün sahələr'; $labels['search'] = 'Axtar'; +$labels['searchresult'] = 'Axtarış nəticəsi'; $labels['advsearch'] = 'Ətraflı axtarış'; $labels['advanced'] = 'Əlavə'; $labels['other'] = 'Başqa'; @@ -286,6 +318,7 @@ $labels['typehomepage'] = 'Ana səhifə'; $labels['typeblog'] = 'Bloq'; $labels['typeprofile'] = 'Profil'; $labels['addfield'] = 'Sahə əlavə et'; +$labels['addcontact'] = 'Əlaqə əlavə et'; $labels['editcontact'] = 'Ünvanı redaktə et'; $labels['contacts'] = 'Əlaqələr'; $labels['contactproperties'] = 'Kontakt xüsusiyyətləri'; @@ -306,6 +339,7 @@ $labels['export'] = 'İxrac et'; $labels['exportall'] = 'Hamısını İxrac et'; $labels['exportsel'] = 'Seçilmişləri İxrac et'; $labels['exportvcards'] = 'Ünvanları vCards formatında ixrac et'; +$labels['addgroup'] = 'Qrup əlavə et'; $labels['grouprename'] = 'Qruğun adını dəyişdir'; $labels['groupdelete'] = 'Qrupu sil'; $labels['groupremoveselected'] = 'Qrupdan seçilmiş kontaktları sil'; @@ -452,6 +486,9 @@ $labels['foldertype'] = 'Qovluq növü'; $labels['personalfolder'] = 'Gizli qovluq'; $labels['otherfolder'] = 'Başqa istifadəçilərin qovluğu'; $labels['sharedfolder'] = 'İctimai qovluq'; +$labels['findfolders'] = 'Qovluqları tap'; +$labels['namespace.personal'] = 'Şəxsi'; +$labels['namespace.shared'] = 'Paylaşılıb'; $labels['sortby'] = 'Çeşidlə'; $labels['sortasc'] = 'Azdan çoxa'; $labels['sortdesc'] = 'Çoxdan aza'; diff --git a/program/localization/bg_BG/labels.inc b/program/localization/bg_BG/labels.inc index 3dd458fd838..5021a6f8453 100644 --- a/program/localization/bg_BG/labels.inc +++ b/program/localization/bg_BG/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Като нови'; $labels['markflagged'] = 'Като отбелязани'; $labels['markunflagged'] = 'Като неотбелязани'; $labels['moreactions'] = 'Допълнителни действия...'; +$labels['markallread'] = 'Маркирай всички като прочетени'; +$labels['folders-cur'] = 'Само за избраната папка'; +$labels['folders-sub'] = 'Избраната папка и всички подпапки'; +$labels['folders-all'] = 'Всички папки'; $labels['more'] = 'Още'; $labels['back'] = 'Назад'; $labels['options'] = 'Опции'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Колони на списък'; $labels['listsorting'] = 'Подреди по колона'; $labels['listorder'] = 'Посока на подреждане'; $labels['listmode'] = 'Изглед на списък'; +$labels['layout'] = 'Оформление'; +$labels['layoutwidescreen'] = 'Широк екран'; +$labels['layoutdesktop'] = 'Настолен екран'; +$labels['layoutlist'] = 'Списък'; $labels['folderactions'] = 'Действия за папки...'; $labels['compact'] = 'Уплътни данни'; $labels['empty'] = 'Изпразни'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'Ключ ID'; $labels['keylength'] = 'Бита'; $labels['keyexpired'] = 'Изтекъл'; $labels['keyrevoked'] = 'Отменено'; +$labels['bccinstead'] = 'Използвай Bcc'; $labels['editidents'] = 'Промени самоличности'; $labels['spellcheck'] = 'Правопис'; $labels['checkspelling'] = 'Проверка на правописа'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current от $total)'; $labels['close'] = 'Затвори'; $labels['messageoptions'] = 'Настройки на писма...'; $labels['togglecomposeoptions'] = 'Превключване опции за създаване'; +$labels['attachmentrename'] = 'Преименуване на прикачен файл'; $labels['low'] = 'Нисък'; $labels['lowest'] = 'Най-нисък'; $labels['normal'] = 'Нормален'; diff --git a/program/localization/bg_BG/messages.inc b/program/localization/bg_BG/messages.inc index 1b0355ceeaa..048d96070a8 100644 --- a/program/localization/bg_BG/messages.inc +++ b/program/localization/bg_BG/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Моля въведете име.'; $messages['nopagesizewarning'] = 'Въведете брой редове на страница.'; $messages['nosenderwarning'] = 'Моля въведете валиден адрес на ел. поща на подателя.'; $messages['norecipientwarning'] = 'Моля въведете поне един получател.'; +$messages['disclosedrecipwarning'] = 'Всеки получател ще вижда адресите на ел. поща на останалите получатели. За да предотвратите това и за да се погрижите за тяхна конфиденциалност може да използвате поле Bcc.'; +$messages['disclosedreciptitle'] = 'Твърде много публични получатели'; $messages['nosubjectwarning'] = 'Полето "Заглавие" е празно. Желаете ли да въведете заглавие сега?'; +$messages['nosubjecttitle'] = 'Няма Заглавие'; $messages['nobodywarning'] = 'Изпрати това писмо без текст?'; $messages['notsentwarning'] = 'Писмото не е изпратено. Желаете ли да бъде унищожено?'; $messages['restoresavedcomposedata'] = 'Намерено е неизпратено писмо, което е било в процес на създаване.\n\nОтносно: $subject\nЗапазено на: $date\n\nЖелаете ли да възстановите писмото?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Невъзможно зареждане на п $messages['filelinkerror'] = 'Грешка при качване на файл.'; $messages['fileuploaderror'] = 'Грешка при качване на файл.'; $messages['filesizeerror'] = 'Прикаченият файл надвишава лимита от $size.'; +$messages['filecounterror'] = 'Можете да качите не повече от $count файла едновременно'; +$messages['msgsizeerror'] = 'Грешка при качване на прикачен файл. Макс. допустим размер на писмо от ($size) e надвишен.'; $messages['copysuccess'] = 'Успешно копирани $nr контакта.'; $messages['movesuccess'] = 'Успешно преместени $nr контакта.'; $messages['copyerror'] = 'Невъзможно копиране на контакти.'; diff --git a/program/localization/ca_ES/labels.inc b/program/localization/ca_ES/labels.inc index f656c10ff19..801fd2f1619 100644 --- a/program/localization/ca_ES/labels.inc +++ b/program/localization/ca_ES/labels.inc @@ -195,6 +195,12 @@ $labels['searchscope'] = 'Abast'; $labels['currentfolder'] = 'Carpeta actual'; $labels['subfolders'] = 'Aquesta i les seves subcarpetes'; $labels['allfolders'] = 'Totes les carpetes'; +$labels['searchinterval-1W'] = 'Més antic d\'una setmana'; +$labels['searchinterval-1M'] = 'Més antic d\'un mes'; +$labels['searchinterval-1Y'] = 'Més antic d\'un any'; +$labels['searchinterval1W'] = 'Menor d\'una setmana'; +$labels['searchinterval1M'] = 'Menor d\'un mes'; +$labels['searchinterval1Y'] = 'Menor d\'un any'; $labels['openinextwin'] = 'Obre a una nova finestra'; $labels['emlsave'] = 'Descarrega (.eml)'; $labels['changeformattext'] = 'Mostra en format de text net'; @@ -214,6 +220,15 @@ $labels['selectimage'] = 'Selecciona una imatge'; $labels['addimage'] = 'Afegeix una imatge'; $labels['selectmedia'] = 'Selecciona pel·lícula'; $labels['addmedia'] = 'Afegeix pel·lícula'; +$labels['encrypt'] = 'Xifrar'; +$labels['encryptmessage'] = 'Xifrar missatge'; +$labels['encryptmessagemailvelope'] = 'Xifrar missatge amb Mailvelope'; +$labels['importpubkeys'] = 'Importar claus públiques'; +$labels['encryptedsendialog'] = 'Enviar missatge xifrat'; +$labels['keyid'] = 'ID de la clau'; +$labels['keylength'] = 'Bits'; +$labels['keyexpired'] = 'Caducat'; +$labels['keyrevoked'] = 'Revocat'; $labels['editidents'] = 'Edita identitats'; $labels['spellcheck'] = 'Ortografia'; $labels['checkspelling'] = 'Comprova l\'ortografia'; @@ -221,6 +236,7 @@ $labels['resumeediting'] = 'Reprèn l\'edició'; $labels['revertto'] = 'Torna a'; $labels['restore'] = 'Recupera'; $labels['restoremessage'] = 'Recupera el missatge?'; +$labels['ignore'] = 'Ignorar'; $labels['responses'] = 'Respostes'; $labels['insertresponse'] = 'Introduïu una resposta'; $labels['manageresponses'] = 'Gestiona respostes'; @@ -237,6 +253,7 @@ $labels['uploadprogress'] = '$percent ($current de $total)'; $labels['close'] = 'Tanca'; $labels['messageoptions'] = 'Opcions de missatge...'; $labels['togglecomposeoptions'] = 'Commuta les opcions de composició'; +$labels['attachmentrename'] = 'Canviar el nom al fitxer adjunt'; $labels['low'] = 'Baixa'; $labels['lowest'] = 'La més baixa'; $labels['normal'] = 'Normal'; @@ -297,6 +314,7 @@ $labels['searchresult'] = 'Resultat de la cerca'; $labels['advsearch'] = 'Cerca Avançada'; $labels['advanced'] = 'Paràmetres avançats'; $labels['other'] = 'Un altre'; +$labels['printcontact'] = 'Imprimir contacte'; $labels['typehome'] = 'Casa'; $labels['typework'] = 'Feina'; $labels['typeother'] = 'Un altre'; @@ -406,6 +424,7 @@ $labels['askuser'] = 'demana\'m què vull fer'; $labels['autosend'] = 'envia la confirmació de recepció'; $labels['autosendknown'] = 'envia la confirmació de recepció als meus contactes, pels demés demana-m\'ho'; $labels['autosendknownignore'] = 'envia la confirmació als meus contactes, pels demés ignora-ho'; +$labels['ignorerequest'] = 'Ignorar petició'; $labels['readwhendeleted'] = 'Marca el missatge com a llegit quan se suprimeixi'; $labels['flagfordeletion'] = 'Marca el missatge com a suprimit en comptes de suprimir-lo'; $labels['skipdeleted'] = 'No mostris els missatges suprimits'; diff --git a/program/localization/cs_CZ/labels.inc b/program/localization/cs_CZ/labels.inc index c2fef13f91a..193cbd15a1f 100644 --- a/program/localization/cs_CZ/labels.inc +++ b/program/localization/cs_CZ/labels.inc @@ -253,6 +253,7 @@ $labels['uploadprogress'] = '$percent ($current z $total)'; $labels['close'] = 'Zavřít'; $labels['messageoptions'] = 'Nastavení zprávy...'; $labels['togglecomposeoptions'] = 'Přepnout možnosti kompozice'; +$labels['attachmentrename'] = 'Přejmenovat přílohu'; $labels['low'] = 'Nízká'; $labels['lowest'] = 'Nejnižší'; $labels['normal'] = 'Normální'; diff --git a/program/localization/cy_GB/labels.inc b/program/localization/cy_GB/labels.inc index 0cdf5a7cb51..b23520ed130 100644 --- a/program/localization/cy_GB/labels.inc +++ b/program/localization/cy_GB/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Heb eu darllen'; $labels['markflagged'] = 'Wedi eu fflagio'; $labels['markunflagged'] = 'Heb eu fflagio'; $labels['moreactions'] = 'Mwy o weithredoedd...'; +$labels['markallread'] = 'Nodi pob un wedi ei ddarllen'; +$labels['folders-cur'] = 'Ffolder dewiswyd yn unig'; +$labels['folders-sub'] = 'Ffolder dewiswyd a\'i isffolderi'; +$labels['folders-all'] = 'Pob ffolder'; $labels['more'] = 'Mwy'; $labels['back'] = 'Yn ôl'; $labels['options'] = 'Dewisiadau'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Rhestr colofnau'; $labels['listsorting'] = 'Colofn trefnu'; $labels['listorder'] = 'Trefn didoli'; $labels['listmode'] = 'Golwg rhestr'; +$labels['layout'] = 'Cynllun'; +$labels['layoutwidescreen'] = 'Sgrîn lydan'; +$labels['layoutdesktop'] = 'Pen bwrdd'; +$labels['layoutlist'] = 'Rhestr'; $labels['folderactions'] = 'Gweithredoedd ffolder...'; $labels['compact'] = 'Crynhoi'; $labels['empty'] = 'Gwagio'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'ID Allwedd'; $labels['keylength'] = 'Didiau'; $labels['keyexpired'] = 'Wedi darfod'; $labels['keyrevoked'] = 'Wedi dirymu'; +$labels['bccinstead'] = 'Defnyddio Bcc'; $labels['editidents'] = 'Golygu personoliaethau'; $labels['spellcheck'] = 'Sillafu'; $labels['checkspelling'] = 'Gwirio sillafu'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current o $total)'; $labels['close'] = 'Cau'; $labels['messageoptions'] = 'Dewisiadau neges...'; $labels['togglecomposeoptions'] = 'Newid dewisiadau ysgrifennu'; +$labels['attachmentrename'] = 'Ailenwi atodiad'; $labels['low'] = 'Isel'; $labels['lowest'] = 'Isaf'; $labels['normal'] = 'Cyffredin'; diff --git a/program/localization/cy_GB/messages.inc b/program/localization/cy_GB/messages.inc index 444b0323ace..48cf9d02538 100644 --- a/program/localization/cy_GB/messages.inc +++ b/program/localization/cy_GB/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Rhowch enw'; $messages['nopagesizewarning'] = 'Rhowch maint tudalen'; $messages['nosenderwarning'] = 'Rhowch gyfeiriad e-bost y danfonwr'; $messages['norecipientwarning'] = 'Rhowch o leiaf un derbynnydd'; +$messages['disclosedrecipwarning'] = 'Fe fydd pob derbynnydd yn gweld cyfeiriadau ebost pawb arall. I atal hyn ac amddiffyn eu preifatrwydd rhaid i chi ddefnyddio\'r maes Bcc.'; +$messages['disclosedreciptitle'] = 'Gormod o dderbynnwyr cyhoeddus'; $messages['nosubjectwarning'] = 'Mae\'r pennawd "Pwnc" yn wag. Hoffech chi roi un fewn nawr?'; +$messages['nosubjecttitle'] = 'Dim pwnc'; $messages['nobodywarning'] = 'Danfon y neges hwn heb destun?'; $messages['notsentwarning'] = 'Ni ddanfonwyd y neges. Hoffech chi gael gwared a\'r neges?'; $messages['restoresavedcomposedata'] = 'Cafwyd hyd i neges wedi ei ysgrifennu o\'r blaen ond heb ei ddanfon.\n\nPwnc: $subject\nCadwyd: $date\n\nYdych chi am adfer y neges?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Methwyd llwytho\'r neges o\'r gweinydd'; $messages['filelinkerror'] = 'Methwyd atodi\'r ffeil.'; $messages['fileuploaderror'] = 'Methwyd llwytho\'r ffeil i fyny'; $messages['filesizeerror'] = 'Mae\'r ffeil a lwythyd fyny yn fwy na\'r maint uchaf ganiateir o $size'; +$messages['filecounterror'] = 'Cewch chi ddim ond llwytho fyny $count files ar unwaith.'; +$messages['msgsizeerror'] = 'Methwyd atodi ffeil. Roedd maint y neges ($size) yn rhy fawr.'; $messages['copysuccess'] = 'Copïwyd $nr cyswllt yn llwyddiannus'; $messages['movesuccess'] = 'Symudwyd $nr cyswllt yn llwyddiannus.'; $messages['copyerror'] = 'Methwyd copïo unrhyw gysylltiadau.'; diff --git a/program/localization/da_DK/labels.inc b/program/localization/da_DK/labels.inc index 89bbc9c72ca..ea457269b5d 100644 --- a/program/localization/da_DK/labels.inc +++ b/program/localization/da_DK/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Som ulæst'; $labels['markflagged'] = 'Som markeret'; $labels['markunflagged'] = 'Som umarkeret'; $labels['moreactions'] = 'Flere funktioner...'; +$labels['markallread'] = 'Marker alle som læst'; +$labels['folders-cur'] = 'Du må kun vælge mapper'; +$labels['folders-sub'] = 'Vælg mappe og dens undermapper'; +$labels['folders-all'] = 'Alle mapper'; $labels['more'] = 'Mere'; $labels['back'] = 'Tilbage'; $labels['options'] = 'Indstillinger'; @@ -253,6 +257,7 @@ $labels['uploadprogress'] = '$percent ($current af $total)'; $labels['close'] = 'Luk'; $labels['messageoptions'] = 'Beskedmuligheder...'; $labels['togglecomposeoptions'] = 'Skift kompositions indstillinger'; +$labels['attachmentrename'] = 'Omdøb vedhæftet fil'; $labels['low'] = 'Lav'; $labels['lowest'] = 'Lavest'; $labels['normal'] = 'Normal'; @@ -467,6 +472,7 @@ $labels['autoaddsignature'] = 'Indsæt automatisk signatur'; $labels['newmessageonly'] = 'kun på nye beskeder'; $labels['replyandforwardonly'] = 'kun på svar og videresendelse af beskeder'; $labels['insertsignature'] = 'Indsæt signatur'; +$labels['sigbelow'] = 'Placer signaturen under den citerede tekst'; $labels['previewpanemarkread'] = 'Markér forhåndsviste beskeder som læst'; $labels['afternseconds'] = 'efter $n sekunder'; $labels['reqmdn'] = 'Anmod altid om kvittering for læsning'; diff --git a/program/localization/da_DK/messages.inc b/program/localization/da_DK/messages.inc index 8e94f9f9e3d..6a554c905fa 100644 --- a/program/localization/da_DK/messages.inc +++ b/program/localization/da_DK/messages.inc @@ -57,6 +57,8 @@ $messages['contactnameexists'] = 'En kontakt med samme navn eksisterer allerede. $messages['blockedimages'] = 'For at beskytte dit privatliv er billeder fra eksterne internetservere blokeret.'; $messages['encryptedmessage'] = 'Beskeden er krypteret og kan ikke vises. Beklager!'; $messages['externalmessagedecryption'] = 'Dette er en krypteret meddelelse og kan dekrypteres med din browser-udvidelse.'; +$messages['encryptpubkeysfound'] = 'Følgende offentlig nøgle er blevet fundet:'; +$messages['keyservererror'] = 'Det var ikke muligt at få en nøgle fra nøgle serveren.'; $messages['nocontactsfound'] = 'Ingen kontakter blev fundet.'; $messages['contactnotfound'] = 'Den søgte kontakt blev ikke fundet.'; $messages['contactsearchonly'] = 'Indtast søgeord for at finde kontakter.'; @@ -110,6 +112,7 @@ $messages['messageopenerror'] = 'Beskeden kunne ikke hentes fra serveren.'; $messages['filelinkerror'] = 'Vedhæftning af filen mislykkedes.'; $messages['fileuploaderror'] = 'Upload mislykkedes.'; $messages['filesizeerror'] = 'Den indsatte fil fylder mere end det maksimale på $size.'; +$messages['msgsizeerror'] = 'Filen kunne ikke vedhæftes. Max størrelsen på meddelelsen må ikke overstige ($size).'; $messages['copysuccess'] = '$nr blev kopieret.'; $messages['movesuccess'] = '$nr kontakter blev flyttet.'; $messages['copyerror'] = 'Kunne ikke kopiere nogen kontakter.'; @@ -141,6 +144,7 @@ $messages['importconfirmskipped'] = 'Sprang over $skipped eksisterende kontak $messages['importmessagesuccess'] = 'Importerede $nr beskeder'; $messages['importmessageerror'] = 'Import mislykkedes! Den uploadede fil er ikke en gyldig besked eller mailbox-fil'; $messages['opnotpermitted'] = 'Handlingen er ikke tilladt!'; +$messages['nofromaddress'] = 'Der mangler emailadresse i den valgte identitet.'; $messages['editorwarning'] = 'Al formatering af teksten kan forsvinde, hvis der skiftes editor Vil du fortsætte?'; $messages['httpreceivedencrypterror'] = 'Der er opstået en fatal konfigurationsfejl. Kontakt venligst din system-administrator med det samme. Din besked kunne ikke afsendes.'; $messages['smtpconnerror'] = 'SMTP fejl ($code): Forbindelsen til serveren afbrudt'; @@ -166,12 +170,14 @@ $messages['savedsearchcreated'] = 'Gemt søgning oprettet.'; $messages['savedsearchcreateerror'] = 'Kunne ikke oprette Gemt søgning.'; $messages['messagedeleted'] = 'Besked(er) slettet.'; $messages['messagemoved'] = 'Besked(er) flyttet.'; +$messages['messagemovedtotrash'] = 'Meddelelser(ne) blev succesfuldt flyttet til skraldespanden.'; $messages['messagecopied'] = 'Besked(er) kopieret.'; $messages['messagemarked'] = 'Besked(er) markeret.'; $messages['autocompletechars'] = 'Du skal indtaste mindst $min tegn for at benytte autoopslag.'; $messages['autocompletemore'] = 'Flere emner fundet. Indtast flere tegn.'; $messages['namecannotbeempty'] = 'Navn må ikke være tomt.'; $messages['nametoolong'] = 'Navnet er for langt.'; +$messages['namedotforbidden'] = 'Mappenavnet kan ikke starte med et punktum.'; $messages['folderupdated'] = 'Mappen er opdateret.'; $messages['foldercreated'] = 'Mappen er oprettet.'; $messages['invalidimageformat'] = 'Ikke et gyldigt billedformat.'; diff --git a/program/localization/de_CH/labels.inc b/program/localization/de_CH/labels.inc index 6f732a06098..ccb591916f8 100644 --- a/program/localization/de_CH/labels.inc +++ b/program/localization/de_CH/labels.inc @@ -253,6 +253,7 @@ $labels['uploadprogress'] = '$percent ($current von $total)'; $labels['close'] = 'Schliessen'; $labels['messageoptions'] = 'Optionen...'; $labels['togglecomposeoptions'] = 'Nachrichten-Optionen ein-/ausblenden'; +$labels['attachmentrename'] = 'Anhang umbenennen'; $labels['low'] = 'Niedrig'; $labels['lowest'] = 'Niedrigste'; $labels['normal'] = 'Normal'; diff --git a/program/localization/de_CH/messages.inc b/program/localization/de_CH/messages.inc index fe2a72fc92b..bd8df3f64aa 100644 --- a/program/localization/de_CH/messages.inc +++ b/program/localization/de_CH/messages.inc @@ -117,6 +117,7 @@ $messages['messageopenerror'] = 'Die Nachricht konnte nicht vom Server geladen w $messages['filelinkerror'] = 'Datei konnte nicht angehängt werden'; $messages['fileuploaderror'] = 'Der Dateiupload ist fehlgeschlagen.'; $messages['filesizeerror'] = 'Die Datei überschreitet die maximale Grösse von $size.'; +$messages['msgsizeerror'] = 'Datei konnte nicht angehängt werden. Die maximale Grösse einer Nachricht ($size) wird damit überschritten.'; $messages['copysuccess'] = '$nr Kontakt(e) erfolgreich kopiert.'; $messages['movesuccess'] = '$nr Kontakt(e) erfolgreich verschoben.'; $messages['copyerror'] = 'Kontakte konnten nicht kopiert werden.'; diff --git a/program/localization/de_DE/labels.inc b/program/localization/de_DE/labels.inc index a4100dca9cf..dc946d457b2 100644 --- a/program/localization/de_DE/labels.inc +++ b/program/localization/de_DE/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Als ungelesen'; $labels['markflagged'] = 'Markierung hinzufügen'; $labels['markunflagged'] = 'Markierung entfernen'; $labels['moreactions'] = 'Mehr …'; +$labels['markallread'] = 'Alle als gelesen markieren'; +$labels['folders-cur'] = 'Nur ausgewählten Ordner'; +$labels['folders-sub'] = 'Ausgewählter Ordner und seine Unterordner'; +$labels['folders-all'] = 'Alle Ordner'; $labels['more'] = 'Mehr'; $labels['back'] = 'Zurück'; $labels['options'] = 'Optionen'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Spalten'; $labels['listsorting'] = 'Sortierung'; $labels['listorder'] = 'Ordnung'; $labels['listmode'] = 'Anzeigemodus'; +$labels['layout'] = 'Layout'; +$labels['layoutwidescreen'] = 'Breitbildschirm'; +$labels['layoutdesktop'] = 'Desktop'; +$labels['layoutlist'] = 'Liste'; $labels['folderactions'] = 'Ordneraktionen …'; $labels['compact'] = 'Packen'; $labels['empty'] = 'Leeren'; @@ -211,7 +219,7 @@ $labels['sendmessage'] = 'Nachricht jetzt senden'; $labels['savemessage'] = 'Nachricht speichern'; $labels['addattachment'] = 'Datei anhängen'; $labels['charset'] = 'Zeichensatz'; -$labels['editortype'] = 'Editor Typ'; +$labels['editortype'] = 'Bearbeitungstyp'; $labels['returnreceipt'] = 'Empfangsbestätigung (MDN)'; $labels['dsn'] = 'Übermittlungsbestätigung (DSN)'; $labels['mailreplyintro'] = 'Am $date, schrieb $sender:'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'Schlüsselkennung'; $labels['keylength'] = 'Bits'; $labels['keyexpired'] = 'Abgelaufen'; $labels['keyrevoked'] = 'Widerrufen'; +$labels['bccinstead'] = 'Blindkopie verwenden'; $labels['editidents'] = 'Absender ändern'; $labels['spellcheck'] = 'Rechtschreibung'; $labels['checkspelling'] = 'Rechtschreibung prüfen'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current von $total)'; $labels['close'] = 'Schließen'; $labels['messageoptions'] = 'Optionen …'; $labels['togglecomposeoptions'] = 'Zusammenstellungsoptionen auswählen'; +$labels['attachmentrename'] = 'Anhang umbenennen'; $labels['low'] = 'Niedrig'; $labels['lowest'] = 'Niedrigste'; $labels['normal'] = 'Normal'; @@ -263,15 +273,15 @@ $labels['showimages'] = 'Bilder anzeigen'; $labels['alwaysshow'] = 'Bilder von $sender immer zeigen'; $labels['isdraft'] = 'Dies ist ein Entwurf'; $labels['andnmore'] = '$nr weitere …'; -$labels['togglemoreheaders'] = 'Zeige weitere Nachrichten-Header'; -$labels['togglefullheaders'] = 'Original-Kopfzeilen ein-/ausblenden'; +$labels['togglemoreheaders'] = 'Mehr Kopfzeilen der Nachricht anzeigen'; +$labels['togglefullheaders'] = 'Rohkopfzeilen ein-/ausblenden'; $labels['htmltoggle'] = 'HTML'; -$labels['plaintoggle'] = 'Nur-Text'; +$labels['plaintoggle'] = 'Einfacher Text'; $labels['savesentmessagein'] = 'Nachricht speichern in'; $labels['dontsave'] = 'nicht speichern'; $labels['maxuploadsize'] = 'Maximal erlaubte Dateigröße ist $size'; -$labels['addcc'] = 'Cc hinzufügen'; -$labels['addbcc'] = 'Bcc hinzufügen'; +$labels['addcc'] = 'Kopie hinzufügen'; +$labels['addbcc'] = 'Blindkopie hinzufügen'; $labels['addreplyto'] = 'Antwortadresse hinzufügen'; $labels['addfollowupto'] = 'Followup-To hinzufügen'; $labels['mdnrequest'] = 'Der Sender dieser Nachricht möchte gerne eine Lesebestätigung. Wollen Sie dieses bestätigen?'; @@ -314,6 +324,7 @@ $labels['advsearch'] = 'Detaillierte Suche'; $labels['advanced'] = 'Erweitert'; $labels['other'] = 'Andere'; $labels['printcontact'] = 'Kontakt ausdrucken'; +$labels['qrcode'] = 'QR-Code'; $labels['typehome'] = 'Privat'; $labels['typework'] = 'Dienstlich'; $labels['typeother'] = 'Andere'; @@ -390,7 +401,7 @@ $labels['newidentity'] = 'Neue Identität erstellen'; $labels['addidentity'] = 'Identität hinzufügen'; $labels['editidentity'] = 'Identität bearbeiten'; $labels['preferhtml'] = 'HTML anzeigen'; -$labels['defaultcharset'] = 'Standard Zeichensatz'; +$labels['defaultcharset'] = 'Standardzeichensatz'; $labels['htmlmessage'] = 'HTML-Nachricht'; $labels['messagepart'] = 'Teilstück'; $labels['digitalsig'] = 'Digitale Signatur'; @@ -410,14 +421,14 @@ $labels['htmleditor'] = 'HTML-Nachrichten verfassen'; $labels['htmlonreply'] = 'nur Antworten auf HTML-Nachrichten'; $labels['htmlonreplyandforward'] = 'beim Weiterleiten und Beantworten auf HTML-Nachrichten'; $labels['htmlsignature'] = 'HTML-Signatur'; -$labels['showemail'] = 'E-Mail-Adresse mit dem Display Namen anzeigen'; +$labels['showemail'] = 'E-Mail-Adresse mit dem Anzeigenamen anzeigen'; $labels['previewpane'] = 'Nachrichtenvorschau anzeigen'; $labels['skin'] = 'Oberflächendesign'; $labels['logoutclear'] = 'Papierkorb beim Abmelden leeren'; $labels['logoutcompact'] = 'Posteingang beim Abmelden packen'; $labels['uisettings'] = 'Benutzeroberfläche'; -$labels['serversettings'] = 'Server-Einstellungen'; -$labels['mailboxview'] = 'Mailbox-Ansicht'; +$labels['serversettings'] = 'Servereinstellungen'; +$labels['mailboxview'] = 'Postfachansicht'; $labels['mdnrequests'] = 'Empfangsbestätigung senden'; $labels['askuser'] = 'immer fragen'; $labels['autosend'] = 'Lesebestätigung automatisch senden'; @@ -426,7 +437,7 @@ $labels['autosendknownignore'] = 'für bekannte Absender, sonst ignorieren'; $labels['ignorerequest'] = 'Anforderung ignorieren'; $labels['readwhendeleted'] = 'Beim Löschen als gelesen markieren'; $labels['flagfordeletion'] = 'Als gelöscht markieren anstatt in den Papierkorb verschieben'; -$labels['skipdeleted'] = 'Zeige keine gelöschten Nachrichten an'; +$labels['skipdeleted'] = 'Keine gelöschten Nachrichten anzeigen'; $labels['deletealways'] = 'Wenn verschieben in den Papierkorb fehlschlägt, Nachricht löschen'; $labels['deletejunk'] = 'Nachrichten in Spam direkt löschen'; $labels['showremoteimages'] = 'Eingebettete Bilder vom Internet laden'; @@ -451,8 +462,8 @@ $labels['advancedoptions'] = 'Erweiterte Einstellungen'; $labels['toggleadvancedoptions'] = 'Erweiterte Optionen auswählen'; $labels['focusonnewmessage'] = 'Fokussiere Browserfenster bei neuen Nachrichten'; $labels['checkallfolders'] = 'Alle Ordner auf neue Nachrichten prüfen'; -$labels['displaynext'] = 'Zeige nächste Nachricht nach verschieben/löschen'; -$labels['defaultfont'] = 'Standard Schrift von HTML Nachrichten'; +$labels['displaynext'] = 'Nächste Nachricht nach verschieben/löschen anzeigen'; +$labels['defaultfont'] = 'Standardschrift von HTML-Nachrichten'; $labels['mainoptions'] = 'Allgemein'; $labels['browseroptions'] = 'Browsereinstellungen'; $labels['section'] = 'Bereich'; @@ -463,7 +474,7 @@ $labels['whenreplying'] = 'Beantworten einer Nachricht'; $labels['replyempty'] = 'die Originalnachricht nicht zitieren'; $labels['replytopposting'] = 'Antwort über der Originalnachricht'; $labels['replybottomposting'] = 'Antwort unter der Originalnachricht'; -$labels['replyremovesignature'] = 'Beim Antworten Signatur der Originalnachricht entfernen'; +$labels['replyremovesignature'] = 'Beim Antworten die Signatur der Originalnachricht entfernen'; $labels['autoaddsignature'] = 'Signatur automatisch einfügen'; $labels['newmessageonly'] = 'nur bei neuen Nachrichten'; $labels['replyandforwardonly'] = 'nur bei Antworten und Weiterleitungen'; @@ -475,8 +486,8 @@ $labels['afternseconds'] = 'nach $n Sekunden'; $labels['reqmdn'] = 'Empfangsbestätigung (MDN) immer anfordern'; $labels['reqdsn'] = 'Übermittlungsbestätigung (DSN) immer anfordern'; $labels['replysamefolder'] = 'Antworten im selben Ordner wie Original speichern'; -$labels['defaultabook'] = 'Standard Adressbuch'; -$labels['autocompletesingle'] = 'Alternative E-Mailadressen bei der Auto-Vervollständigung nicht berücksichtigen'; +$labels['defaultabook'] = 'Standardadressbuch'; +$labels['autocompletesingle'] = 'Alternative E-Mail-Adressen bei der Auto-Vervollständigung nicht berücksichtigen'; $labels['listnamedisplay'] = 'Kontakte auflisten als'; $labels['spellcheckbeforesend'] = 'Rechtschreibprüfung vor dem Absenden der Nachricht'; $labels['spellcheckoptions'] = 'Rechtschreibprüfungsoptionen'; @@ -484,12 +495,12 @@ $labels['spellcheckignoresyms'] = 'Wörter mit Symbolen überspringen'; $labels['spellcheckignorenums'] = 'Wörter mit Ziffern überspringen'; $labels['spellcheckignorecaps'] = 'Wörter überspringen, die nur aus Großbuchstaben bestehen'; $labels['addtodict'] = 'Zum Wörterbuch hinzufügen'; -$labels['mailtoprotohandler'] = 'Als Empfänger für mailto: Links einrichten'; -$labels['standardwindows'] = 'Popups als Standard Windows behandeln'; +$labels['mailtoprotohandler'] = 'Als Programm für mailto:-Verknüpfunken einrichten'; +$labels['standardwindows'] = 'Popups als Standardfenster behandeln'; $labels['forwardmode'] = 'Nachrichtenweiterleitung'; $labels['inline'] = 'eingebettet'; $labels['asattachment'] = 'als Anhang'; -$labels['replyallmode'] = 'Standardaktion des "Allen antworten" Button'; +$labels['replyallmode'] = 'Standardaktion des Knopfes »Allen antworten«'; $labels['replyalldefault'] = 'Allen antworten'; $labels['replyalllist'] = 'Nur der Mailingliste antworten (wenn gefunden)'; $labels['folder'] = 'Ordner'; @@ -552,15 +563,15 @@ $labels['arialabeltopnav'] = 'Fenstersteuerung'; $labels['arialabeltasknav'] = 'Anwendungsaufgaben'; $labels['arialabeltoolbar'] = 'Anwendungstoolbar'; $labels['arialabelactivetask'] = 'Aktive Aufgabe'; -$labels['arialabelmessagessearchfilter'] = 'Filter für die E-Mailliste'; +$labels['arialabelmessagessearchfilter'] = 'Filter für die E-Mail-Liste'; $labels['arialabelmailsearchform'] = 'Suchmaske für E-Mails'; $labels['arialabelcontactsearchform'] = 'Suchmaske für Kontakte'; -$labels['arialabelmailquicksearchbox'] = 'Eingabe für E-Mailsuche'; +$labels['arialabelmailquicksearchbox'] = 'Eingabe für E-Mail-Suche'; $labels['arialabelquicksearchbox'] = 'Eingabe für Suche'; $labels['arialabelfoldersearchfilter'] = 'Ordnerauflistungsfilter'; $labels['arialabelfoldersearchform'] = 'Ordnersuchfeld'; -$labels['arialabelfolderlist'] = 'E-Mailordnerauswahl'; -$labels['arialabelmessagelist'] = 'Liste der E-Mailnachrichten'; +$labels['arialabelfolderlist'] = 'E-Mail-Ordnerauswahl'; +$labels['arialabelmessagelist'] = 'Liste der E-Mail-Nachrichten'; $labels['arialabelmailpreviewframe'] = 'Vorschau der Nachricht'; $labels['arialabelmailboxmenu'] = 'Aktionsmenü für Ordner'; $labels['arialabellistselectmenu'] = 'Aktionsmenü für Listen'; @@ -572,7 +583,7 @@ $labels['arialabelmessagebody'] = 'Nachrichten-Body'; $labels['arialabelmessageactions'] = 'Nachrichtenaktionen'; $labels['arialabelcontactquicksearch'] = 'Kontaktsuchformular'; $labels['arialabelcontactsearchbox'] = 'Kontakte Sucheingabe'; -$labels['arialabelmessageheaders'] = 'Nachrichten-Header'; +$labels['arialabelmessageheaders'] = 'Nachrichtenkopfzeilen'; $labels['arialabelforwardingoptions'] = 'Weiterleitungsoptionen'; $labels['arialabelreplyalloptions'] = 'Allen antworten-Optionen'; $labels['arialabelmoremessageactions'] = 'Weitere Nachrichtenaktionen'; @@ -586,7 +597,7 @@ $labels['arialabelcontactexportoptions'] = 'Kontakt-Export-Optionen'; $labels['arialabelabookgroupoptions'] = 'Adressbuch/Gruppen-Optionen'; $labels['arialabelpreferencesform'] = 'Einstellungsformular'; $labels['arialabelidentityeditfrom'] = 'Identität-Bearbeitungsformular'; -$labels['arialabelresonseeditfrom'] = 'Antwort Bearbeitungsformular'; +$labels['arialabelresonseeditfrom'] = 'Antwortbearbeitungsformular'; $labels['arialabelsearchterms'] = 'Suchbegriffe'; $labels['helplistnavigation'] = 'Tastaturnavigation auflisten'; $labels['helplistkeyboardnavigation'] = "Pfeil hoch/runter: Zeilenfokus/Zeilenselektion verschieben diff --git a/program/localization/de_DE/messages.inc b/program/localization/de_DE/messages.inc index a478e235e0c..8deff4e4e50 100644 --- a/program/localization/de_DE/messages.inc +++ b/program/localization/de_DE/messages.inc @@ -32,15 +32,15 @@ $messages['errornoperm'] = 'Die Aktion kann nicht ausgeführt werden. Zugriff ve $messages['erroroverquota'] = 'Die Aktion kann nicht ausgeführt werden. Nicht genug freier Speicherplatz.'; $messages['erroroverquotadelete'] = 'Nicht genug freier Speicherplatz. Verwenden sie SHIFT+ENTF um Nachrichten zu löschen.'; $messages['invalidrequest'] = 'Ungültige Anfrage! Es wurden keine Daten gespeichert.'; -$messages['invalidhost'] = 'Ungültiger Server Name'; -$messages['nomessagesfound'] = 'Keine Nachrichten in diesem Ordner.'; +$messages['invalidhost'] = 'Ungültiger Servername.'; +$messages['nomessagesfound'] = 'Keine Nachrichten in diesem Postfach.'; $messages['loggedout'] = 'Sie haben Ihre Sitzung erfolgreich beendet. Auf Wiedersehen!'; -$messages['mailboxempty'] = 'Mailbox ist leer'; +$messages['mailboxempty'] = 'Postfach ist leer'; $messages['nomessages'] = 'Keine Nachrichten'; $messages['refreshing'] = 'Aktualisierung läuft …'; $messages['loading'] = 'Wird geladen …'; $messages['uploading'] = 'Datei wird hochgeladen …'; -$messages['attaching'] = 'Datei wird angehängt...'; +$messages['attaching'] = 'Datei wird angehängt …'; $messages['uploadingmany'] = 'Dateien werden hochgeladen …'; $messages['loadingdata'] = 'Daten werden geladen …'; $messages['checkingmail'] = 'Auf neue Nachrichten wird geprüft …'; @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Bitte geben Sie einen Namen ein.'; $messages['nopagesizewarning'] = 'Bitte geben Sie die Einträge pro Seite an.'; $messages['nosenderwarning'] = 'Bitte geben Sie die E-Mail-Adresse des Senders an.'; $messages['norecipientwarning'] = 'Bitte geben Sie mindestens einen Empfänger an.'; +$messages['disclosedrecipwarning'] = 'Alle Empfänger sehen die E-Mail Adressen der anderen Empfänger. Um deren Privatsphäre zu schützen, können Sie das BCC-Feld verwenden.'; +$messages['disclosedreciptitle'] = 'Zu viele öffentliche Empfänger'; $messages['nosubjectwarning'] = 'Die Betreffzeile ist leer. Möchten Sie jetzt einen Betreff eingeben?'; +$messages['nosubjecttitle'] = 'Kein Betreff'; $messages['nobodywarning'] = 'Diese Nachricht ohne Inhalt senden?'; $messages['notsentwarning'] = 'Ihre Nachricht wurde nicht gesendet. Wollen Sie die Nachricht verwerfen?'; $messages['restoresavedcomposedata'] = 'Es wurde ein nicht versandter Entwurf einer Nachricht gefunden.\n\nBetreff: $subject\nGespeichert am: $date\n\nMöchten Sie diese Nachricht wiederherstellen?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Die Nachricht konnte nicht vom Server geladen w $messages['filelinkerror'] = 'Anhängen der Datei ist fehlgeschlagen.'; $messages['fileuploaderror'] = 'Hochladen der Datei fehlgeschlagen.'; $messages['filesizeerror'] = 'Die hochzuladende Datei überschreitet die Maximalgröße von $size.'; +$messages['filecounterror'] = 'Sie können maximal $count Dateien mit einmal hochladen.'; +$messages['msgsizeerror'] = 'Hinzufügen einer Datei fehlgeschlagen. Die maximale Größe einer Nachricht ($size) wurde überschritten.'; $messages['copysuccess'] = 'Erfolgreich kopiert $nr Kontakte.'; $messages['movesuccess'] = 'Erfolgreich verschoben $nr Kontakte.'; $messages['copyerror'] = 'Die Kontakte konnten nicht kopiert werden.'; diff --git a/program/localization/es_ES/labels.inc b/program/localization/es_ES/labels.inc index 5cf7601d0be..3fda99abe61 100644 --- a/program/localization/es_ES/labels.inc +++ b/program/localization/es_ES/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Como no leído'; $labels['markflagged'] = 'Como resaltado'; $labels['markunflagged'] = 'Como no resaltado'; $labels['moreactions'] = 'Más acciones…'; +$labels['markallread'] = 'Marcar todos como leídos'; +$labels['folders-cur'] = 'Sólo la carpeta seleccionada'; +$labels['folders-sub'] = 'Carpeta seleccionada y sus subcarpetas'; +$labels['folders-all'] = 'Todas las carpetas'; $labels['more'] = 'Más'; $labels['back'] = 'Volver'; $labels['options'] = 'Opciones'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Listar columnas'; $labels['listsorting'] = 'Columna de ordenación'; $labels['listorder'] = 'Criterio de ordenación'; $labels['listmode'] = 'Modo de vista de lista'; +$labels['layout'] = 'Disposición'; +$labels['layoutwidescreen'] = 'Pantalla ancha'; +$labels['layoutdesktop'] = 'Escritorio'; +$labels['layoutlist'] = 'Lista'; $labels['folderactions'] = 'Acciones de carpeta...'; $labels['compact'] = 'Compactar'; $labels['empty'] = 'Vaciar'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'ID de la clave'; $labels['keylength'] = 'Bits'; $labels['keyexpired'] = 'Expirado'; $labels['keyrevoked'] = 'Rechazado'; +$labels['bccinstead'] = 'Use Cco'; $labels['editidents'] = 'Editar identidades'; $labels['spellcheck'] = 'Corrector ortográfico'; $labels['checkspelling'] = 'Revisar ortografía'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current de $total)'; $labels['close'] = 'Cerrar'; $labels['messageoptions'] = 'Opciones de mensaje...'; $labels['togglecomposeoptions'] = 'Mostrar opciones de escritura'; +$labels['attachmentrename'] = 'Renombrar el adjunto'; $labels['low'] = 'Baja'; $labels['lowest'] = 'La más baja'; $labels['normal'] = 'Normal'; diff --git a/program/localization/es_ES/messages.inc b/program/localization/es_ES/messages.inc index 668c501111c..4237558def6 100644 --- a/program/localization/es_ES/messages.inc +++ b/program/localization/es_ES/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Por favor, introduzca un nombre.'; $messages['nopagesizewarning'] = 'Por favor, introduzca un tamaño de página.'; $messages['nosenderwarning'] = 'Por favor, introduzca la dirección de correo del remitente.'; $messages['norecipientwarning'] = 'Por favor, introduzca al menos un destinatario.'; +$messages['disclosedrecipwarning'] = 'Todos los receptores verán las direcciones de correo electrónico de cada uno. Para evitarlo y para proteger su privacidad puede utilizar el campo Cco'; +$messages['disclosedreciptitle'] = 'Demasiados destinatarios'; $messages['nosubjectwarning'] = 'El campo "Asunto" está vacío. ¿Desea completarlo en este momento?'; +$messages['nosubjecttitle'] = 'Sin asunto'; $messages['nobodywarning'] = '¿Desea enviar este mensaje sin texto?'; $messages['notsentwarning'] = 'El mensaje no ha sido enviado. ¿Desea descartar su mensaje?'; $messages['restoresavedcomposedata'] = 'Se ha encontrado un mensaje previamente redactado sin enviar.\n\nAsunto: $subject\nGuardado: $date\n\n¿Desea restaurar este mensaje?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'No se pudo cargar el mensaje del servidor.'; $messages['filelinkerror'] = 'No se pudo adjuntar el archivo.'; $messages['fileuploaderror'] = 'Error al cargar archivos.'; $messages['filesizeerror'] = 'El archivo excede el tamaño máximo ($size).'; +$messages['filecounterror'] = 'Puedes subir un máximo de $count archivos de cada vez.'; +$messages['msgsizeerror'] = 'No se ha podido adjuntar un archivo. El tamaño máximo del mensaje ($size) se ha excedido.'; $messages['copysuccess'] = '$nr contactos copiados correctamente.'; $messages['movesuccess'] = '$nr contactos movidos correctamente.'; $messages['copyerror'] = 'No se pudo copiar ningún contacto.'; diff --git a/program/localization/eu_ES/labels.inc b/program/localization/eu_ES/labels.inc index 269568df58b..e661d4d75e5 100644 --- a/program/localization/eu_ES/labels.inc +++ b/program/localization/eu_ES/labels.inc @@ -195,6 +195,12 @@ $labels['searchscope'] = 'Esparrua'; $labels['currentfolder'] = 'Uneko karpeta'; $labels['subfolders'] = 'Hau eta azpikarpetak'; $labels['allfolders'] = 'Karpeta guztiak'; +$labels['searchinterval-1W'] = 'astebete baino zaharragoak'; +$labels['searchinterval-1M'] = 'hilabete baino zaharragoak'; +$labels['searchinterval-1Y'] = 'urtebete baino zaharragoak'; +$labels['searchinterval1W'] = 'astebetea baino berriagoak'; +$labels['searchinterval1M'] = 'hilabetea baino berriagoak'; +$labels['searchinterval1Y'] = 'urtebetea baino berriagoak'; $labels['openinextwin'] = 'Lehio berrian ireki'; $labels['emlsave'] = 'Deskargatu (.eml)'; $labels['changeformattext'] = 'Bistaratu testua formaturik gabe'; @@ -216,6 +222,7 @@ $labels['selectmedia'] = 'Hautatu bideoa'; $labels['addmedia'] = 'Gehitu bideoa'; $labels['encrypt'] = 'Zifratu'; $labels['encryptmessage'] = 'Zifratu mezua'; +$labels['encryptmessagemailvelope'] = 'Zifratu mezua Mailvelope-ren bidez'; $labels['importpubkeys'] = 'Inportatu gako publikoak'; $labels['encryptedsendialog'] = 'Zifratutako mezua bidaltzen'; $labels['keyid'] = 'Gakoaren IDa'; @@ -246,6 +253,7 @@ $labels['uploadprogress'] = '$percent ($total-etik $current)'; $labels['close'] = 'Itxi'; $labels['messageoptions'] = 'Mezu-aukerak'; $labels['togglecomposeoptions'] = 'Toggle konposizio aukerak'; +$labels['attachmentrename'] = 'Berrizendatu eranskina'; $labels['low'] = 'Baxua'; $labels['lowest'] = 'Baxuena'; $labels['normal'] = 'Normala'; diff --git a/program/localization/eu_ES/messages.inc b/program/localization/eu_ES/messages.inc index bc143b9a886..daa02775cf9 100644 --- a/program/localization/eu_ES/messages.inc +++ b/program/localization/eu_ES/messages.inc @@ -22,6 +22,7 @@ $messages['sessionerror'] = 'Zure saioa baliogabea da edo iraungita dago.'; $messages['storageerror'] = 'Huts egin du biltegiratze-zerbitzarira konektatzean.'; $messages['servererror'] = 'Zerbitzari-errorea!'; $messages['servererrormsg'] = 'Zerbitzari-errorea: $msg'; +$messages['accountlocked'] = 'Sartzeko saio baliogabe gehiegi. Saiatu beranduago.'; $messages['connerror'] = 'Konexio errorea (zerbitzaria atzitzeak huts egin du)!'; $messages['dberror'] = 'Datu-basearen errorea!'; $messages['windowopenerror'] = 'Popup leihoa blokeatua'; @@ -39,6 +40,7 @@ $messages['nomessages'] = 'Ez dago mezurik'; $messages['refreshing'] = 'Freskatzen...'; $messages['loading'] = 'Kargatzen...'; $messages['uploading'] = 'Fitxategia kargatzen...'; +$messages['attaching'] = 'Fitxategia eransten...'; $messages['uploadingmany'] = 'Fitxategiak kargatzen...'; $messages['loadingdata'] = 'Datuak kargatzen...'; $messages['checkingmail'] = 'Mezu berrien bila arakatzen...'; @@ -50,6 +52,7 @@ $messages['successfullysaved'] = 'Behar bezala gorde da.'; $messages['savingresponse'] = 'Erantzun-testua gordetzen...'; $messages['deleteresponseconfirm'] = 'Seguru zaude erantzun-testu hau ezabatu nahi duzula?'; $messages['addedsuccessfully'] = 'Kontaktua behar bezala gehitu da helbide-liburura.'; +$messages['contactexists'] = 'Badago kontaktu bat helbide elektroniko horrekin'; $messages['contactnameexists'] = 'Lehendik badago izen hori duen kontaktua.'; $messages['blockedimages'] = 'Zure pribazitatea mantentzeko urruneko irudiak blokeatu egin dira.'; $messages['encryptedmessage'] = 'Hau enkriptaturiko mezu bat da eta ezin da bistarazi. Barkatu!'; @@ -59,6 +62,8 @@ $messages['nopubkeyforsender'] = 'Ez da baliozko gako publikorik aurkitu zure bi $messages['encryptnoattachments'] = 'Dagoeneko kargatutako eranskinak ezin dira zifratu. Gehitu itzazu berriro zifratze editorera.'; $messages['searchpubkeyservers'] = 'Falta diren gakoak gako publikoen zerbitzarietan bilatzea nahi duzu?'; $messages['encryptpubkeysfound'] = 'Hurrengo gako publikoak aurkitu dira:'; +$messages['keyservererror'] = 'Huts egin du gako zerbitzaritik gakoa eskuratzen'; +$messages['keyimportsuccess'] = '$key gako publikoa ongi inportatu da gako-gunetik'; $messages['nocontactsfound'] = 'Ez da kontakturik aurkitu.'; $messages['contactnotfound'] = 'Eskatutako kontaktua ez da aurkitu.'; $messages['contactsearchonly'] = 'Sartu kontaktua aurkitzeko bilaketa daturen bat.'; @@ -82,16 +87,17 @@ $messages['foldermoving'] = 'Karpeta mugitzen...'; $messages['foldersubscribing'] = 'Karpeta harpidetzen...'; $messages['folderunsubscribing'] = 'Karpetaren harpidetza kentzen...'; $messages['formincomplete'] = 'Inprimakia ez guztiz bete'; -$messages['noemailwarning'] = 'Mesedez idatzi baliozko eposta helbide bat'; +$messages['noemailwarning'] = 'Idatzi baliozko helbide elektroniko bat'; $messages['nonamewarning'] = 'Mesedez izen bat idatzi'; $messages['nopagesizewarning'] = 'Mesedez paper tamaina idatzi'; +$messages['nosenderwarning'] = 'Idatzi bidaltzailearen helbide elektronikoa'; $messages['norecipientwarning'] = 'Mesedez behintzat hartzaile bat idatzi'; $messages['nosubjectwarning'] = '"Gaia" eremua hutsik dago. Bat idatzi nahi al duzu?'; $messages['nobodywarning'] = 'Testu gabeko mezu hau bidali?'; $messages['notsentwarning'] = 'Mezua ez da bidali. Mezua ezeztatu nahi al duzu?'; $messages['restoresavedcomposedata'] = 'Lehendik idatzitako baina bidali gabeko mezu bat aurkitu da.\n\nGaia:$subject\nGordeta:$date\n\nBerreskuratu nahi duzu mezu hau?'; $messages['noldapserver'] = 'Mesedez hautatu bilaketa egiteko LDAP zerbitzari bat'; -$messages['nosearchname'] = 'Mesedez idatzi kontaktu izen bat edo eposta helbide bat'; +$messages['nosearchname'] = 'Idatzi kontaktu izen bat edo helbide elektroniko bat'; $messages['notuploadedwarning'] = 'Oraindik ez dira kargatu eranskin guztiak. Itxaron edo ezeztatu karga.'; $messages['searchsuccessful'] = '$nr mezu aurkiturik'; $messages['contactsearchsuccessful'] = '$nr kontaktu aurkitu dira.'; @@ -108,6 +114,7 @@ $messages['folderexpunged'] = 'Karpeta ongi trinkotu da.'; $messages['deletedsuccessfully'] = 'Behar bezala ezabatu da'; $messages['converting'] = 'Mezuaren formatua ezabatzen'; $messages['messageopenerror'] = 'Ezin da zerbitzaritik mezua kargatu'; +$messages['filelinkerror'] = 'Huts egin du fitxategia eransten.'; $messages['fileuploaderror'] = 'Huts fitxategia eransterakoan'; $messages['filesizeerror'] = 'Erantsi nahi duzun fitxategian $size tamaina muga gainditzen du'; $messages['copysuccess'] = '$nr kontaktu ongi kopiatu dira.'; @@ -141,6 +148,7 @@ $messages['importconfirmskipped'] = 'Saltatu dira $skipped sarrera'; $messages['importmessagesuccess'] = '$nr mezu ongi inportatu dira.'; $messages['importmessageerror'] = 'Inportazio akatsa! Kargatutako fitxategia ez da baliozko mezua edo postontzi-fitxategia'; $messages['opnotpermitted'] = 'Ekintza ez baimendua!'; +$messages['nofromaddress'] = 'Hautatutako identitatearen helbide elektronikoa falta da.'; $messages['editorwarning'] = 'Editore mota aldatzeak ekar dezake testuaren formatua galtzea. Jarraitu nahi duzu?'; $messages['httpreceivedencrypterror'] = 'Ezarpen akats larria gertatu da. Jarri harremanetan zure administratzailearekin ahalik eta lasterren. Zure mezua ezin da bidali.'; $messages['smtpconnerror'] = 'SMTP errorea ($code): Zerbitzariarekiko konexioak huts egin du.'; @@ -149,6 +157,7 @@ $messages['smtpfromerror'] = 'SMTP errorea ($code): "$from" ($msg) bidaltzailea $messages['smtptoerror'] = 'SMTP errorea ($code): "$to" ($msg) hartzailea gehitzen huts egin du.'; $messages['smtprecipientserror'] = 'SMTP errorea: Ezin da hartzaileen zerrenda analizatu.'; $messages['smtperror'] = 'SMTP errorea: $msg'; +$messages['emailformaterror'] = 'Helbide elektroniko baliogabea: $email'; $messages['toomanyrecipients'] = 'Hartzaile gehiegi. Txikitu hartzaile kopura hona $max.'; $messages['maxgroupmembersreached'] = 'Taldeko partaideen kopurua $max -ko maximoa gainditzen du:'; $messages['internalerror'] = 'Barne akatsa. Saiatu berriz, mesedez.'; @@ -165,6 +174,7 @@ $messages['savedsearchcreated'] = 'Bilaketaren gordeketa ongi sortu da.'; $messages['savedsearchcreateerror'] = 'Ezin da sortu bilaketaren gordeketa.'; $messages['messagedeleted'] = 'Mezua(k) ongi ezabatu dira.'; $messages['messagemoved'] = 'Mezua(k) ongi mugitu d(ir)a.'; +$messages['messagemovedtotrash'] = 'Mezua(k) ongi eraman d(ir)a zakarrontzira'; $messages['messagecopied'] = 'Mezua(k) ongi kopiatu d(ir)a'; $messages['messagemarked'] = 'Mezua(k) ongi markatu d(ir)a'; $messages['autocompletechars'] = 'Sartu gutxienez $min karaktere osatze automatikorako'; diff --git a/program/localization/fi_FI/labels.inc b/program/localization/fi_FI/labels.inc index a16ac358490..8bf29ff79b3 100644 --- a/program/localization/fi_FI/labels.inc +++ b/program/localization/fi_FI/labels.inc @@ -253,6 +253,7 @@ $labels['uploadprogress'] = '$percent ($current/$total)'; $labels['close'] = 'Sulje'; $labels['messageoptions'] = 'Viestin asetukset...'; $labels['togglecomposeoptions'] = 'Vaihda kirjoitusvalintoja'; +$labels['attachmentrename'] = 'Nimeä liite uudelleen'; $labels['low'] = 'Matala'; $labels['lowest'] = 'Matalin'; $labels['normal'] = 'Normaali'; diff --git a/program/localization/fi_FI/messages.inc b/program/localization/fi_FI/messages.inc index 8ca4e74eb4e..f3eb8b59c41 100644 --- a/program/localization/fi_FI/messages.inc +++ b/program/localization/fi_FI/messages.inc @@ -117,6 +117,7 @@ $messages['messageopenerror'] = 'Virhe kopioitaessa viestiä palvelimelta'; $messages['filelinkerror'] = 'TIedoston liittäminen epäonnistui.'; $messages['fileuploaderror'] = 'Tiedoston lähettäminen epäonnistui'; $messages['filesizeerror'] = 'Lähetettävä tiedosto ylittää sallitun enimmäiskoon $size'; +$messages['msgsizeerror'] = 'Tiedoston liittäminen epäonnistui. Viestin enimmäiskoko ($size) ylitettiin.'; $messages['copysuccess'] = '$nr yhteystietoa kopioitiin onnistuneesti.'; $messages['movesuccess'] = '$nr yhteystietoa siirrettiin onnistuneesti.'; $messages['copyerror'] = 'Yhdenkään yhteystiedon kopiointi ei onnistunut.'; diff --git a/program/localization/fr_FR/labels.inc b/program/localization/fr_FR/labels.inc index c5dcfe4ad46..0616c0a85d7 100644 --- a/program/localization/fr_FR/labels.inc +++ b/program/localization/fr_FR/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Comme non lu'; $labels['markflagged'] = 'Comme signalé'; $labels['markunflagged'] = 'Comme non signalé'; $labels['moreactions'] = 'Plus d\'actions...'; +$labels['markallread'] = 'Tout marquer comme lu'; +$labels['folders-cur'] = 'Dossier sélectionné seulement'; +$labels['folders-sub'] = 'Dossier sélectionné et ses sous-dossiers'; +$labels['folders-all'] = 'Tous les dossiers'; $labels['more'] = 'Plus'; $labels['back'] = 'Retour'; $labels['options'] = 'Options'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Lister les colonnes'; $labels['listsorting'] = 'Colonne de tri'; $labels['listorder'] = 'Ordre de tri'; $labels['listmode'] = 'Mode d\'affichage en liste'; +$labels['layout'] = 'Disposition'; +$labels['layoutwidescreen'] = 'Écran large'; +$labels['layoutdesktop'] = 'Bureau'; +$labels['layoutlist'] = 'Liste'; $labels['folderactions'] = 'Actions sur les dossiers...'; $labels['compact'] = 'Compacter'; $labels['empty'] = 'Vider'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'ID de la clé'; $labels['keylength'] = 'bits'; $labels['keyexpired'] = 'Expirée'; $labels['keyrevoked'] = 'Révoquée'; +$labels['bccinstead'] = 'Utiliser la Cci'; $labels['editidents'] = 'Éditer les identités'; $labels['spellcheck'] = 'Orthographe'; $labels['checkspelling'] = 'Vérification de l\'orthographe'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current de $total)'; $labels['close'] = 'Fermer'; $labels['messageoptions'] = 'Options de courriel..'; $labels['togglecomposeoptions'] = 'Activer/désactiver les options de rédaction'; +$labels['attachmentrename'] = 'Renommer la pièce jointe'; $labels['low'] = 'Basse'; $labels['lowest'] = 'La plus basse'; $labels['normal'] = 'Normale'; @@ -314,6 +324,7 @@ $labels['advsearch'] = 'Recherche avancée'; $labels['advanced'] = 'Détails'; $labels['other'] = 'Autre'; $labels['printcontact'] = 'Imprimer le contact'; +$labels['qrcode'] = 'Code QR'; $labels['typehome'] = 'Domicile'; $labels['typework'] = 'Travail'; $labels['typeother'] = 'Autre'; @@ -424,7 +435,7 @@ $labels['autosend'] = 'envoyer l\'avis'; $labels['autosendknown'] = 'envoyer un avis de réception à mes contacts, autrement me demander'; $labels['autosendknownignore'] = 'envoyer un avis à mes contacts, sinon ignorer'; $labels['ignorerequest'] = 'ignorer la demande'; -$labels['readwhendeleted'] = 'Marquer le courriel comme lu à la suppression'; +$labels['readwhendeleted'] = 'Marquer le courriel comme lu lors de la suppression'; $labels['flagfordeletion'] = 'Signaler le courriel pour la suppression au lieu de le supprimer'; $labels['skipdeleted'] = 'Ne pas montrer les courriels supprimés'; $labels['deletealways'] = 'Si le déplacement des courriels à la corbeille échoue, les supprimer'; diff --git a/program/localization/fr_FR/messages.inc b/program/localization/fr_FR/messages.inc index 69dbca133eb..838a56d7266 100644 --- a/program/localization/fr_FR/messages.inc +++ b/program/localization/fr_FR/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Veuillez saisir un nom.'; $messages['nopagesizewarning'] = 'Veuillez saisir une taille de page.'; $messages['nosenderwarning'] = 'Veuillez saisir l\'adresse courriel de l\'expéditeur.'; $messages['norecipientwarning'] = 'Veuillez saisir au moins un destinataire.'; +$messages['disclosedrecipwarning'] = 'Tous les destinataires verront réciproquement leur adresse courriel. Afin d\'empêcher cela et de protéger la confidentialité, vous pouvez utiliser le champ Cci.'; +$messages['disclosedreciptitle'] = 'Trop de destinataires publics'; $messages['nosubjectwarning'] = 'Le champ « Objet » est vide. Voudriez-vous le saisir maintenant ?'; +$messages['nosubjecttitle'] = 'Aucun objet'; $messages['nobodywarning'] = 'Envoyer ce courriel sans texte ?'; $messages['notsentwarning'] = 'Le courriel n\'a pas été envoyé. Voulez-vous abandonner ce courriel ?'; $messages['restoresavedcomposedata'] = 'Un courriel rédigé précédemment mais non envoyé a été trouvé.\n\nObjet : $subject\nEnregistré le : $date\n\nVoulez-vous restaurer ce courriel ?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Impossible de charger le courriel depuis le ser $messages['filelinkerror'] = 'Échec lors de l\'ajout du fichier.'; $messages['fileuploaderror'] = 'Échec lors du téléversement du fichier'; $messages['filesizeerror'] = 'Le fichier téléversé dépasse la taille maximale de $size.'; +$messages['filecounterror'] = 'Vous pouvez téléverser un maximum de $count fichiers à la fois.'; +$messages['msgsizeerror'] = 'Échec d\'ajout de fichier. La taille maximale d\'un fichier ($size) a été dépassée.'; $messages['copysuccess'] = '$nr contacts copiés avec succès.'; $messages['movesuccess'] = '$nr contacts déplacés avec succès.'; $messages['copyerror'] = 'Aucun contact n\'a pu être copié.'; diff --git a/program/localization/ga_IE/labels.inc b/program/localization/ga_IE/labels.inc index 0b315c476fa..3adb4179051 100644 --- a/program/localization/ga_IE/labels.inc +++ b/program/localization/ga_IE/labels.inc @@ -117,6 +117,7 @@ $labels['markmessages'] = 'Rianaigh teachtaireachtaí'; $labels['markread'] = 'Léite'; $labels['markunread'] = 'Mar neamhléite'; $labels['moreactions'] = 'Tuilleadh gníomhartha...'; +$labels['folders-all'] = 'Gach fillteán'; $labels['more'] = 'Tuilleadh'; $labels['back'] = 'Siar'; $labels['options'] = 'Roghanna'; @@ -141,6 +142,7 @@ $labels['filter'] = 'Scag'; $labels['list'] = 'Liosta'; $labels['threads'] = 'Snáitheanna'; $labels['expand-all'] = 'Fairsingigh Uile'; +$labels['expand-unread'] = 'Fairsingigh na cinn neamhléite'; $labels['collapse-all'] = 'Leacaigh uile'; $labels['threaded'] = 'Snáithithe'; $labels['do_expand'] = 'gach snáithe'; @@ -163,6 +165,9 @@ $labels['quotatotal'] = 'Teorainn'; $labels['quotamessage'] = 'Líon na dteachtaireachtaí'; $labels['quicksearch'] = 'Mearcuardaigh'; $labels['resetsearch'] = 'Athshocraigh an cuardach'; +$labels['msgtext'] = 'An teachtaireacht ar fad'; +$labels['body'] = 'Colainn'; +$labels['type'] = 'Cineál'; $labels['namex'] = 'Ainm'; $labels['searchscope'] = 'Cuimse'; $labels['currentfolder'] = 'An fillteán reatha'; @@ -184,6 +189,7 @@ $labels['addattachment'] = 'Suimigh Iatán'; $labels['charset'] = 'Foireann carachtar'; $labels['editortype'] = 'Sort eagarthóir'; $labels['returnreceipt'] = 'Admháil léite'; +$labels['mailreplyintro'] = 'Ar an $date, scríobh $sender:'; $labels['originalmessage'] = 'An teachtaireacht bhunaidh'; $labels['selectimage'] = 'Roghnaigh íomhá'; $labels['addimage'] = 'Cuir íomhá leis'; @@ -194,6 +200,7 @@ $labels['encryptmessage'] = 'Criptigh an teachtaireacht'; $labels['keylength'] = 'Bearta'; $labels['keyexpired'] = 'Éagtha'; $labels['keyrevoked'] = 'Aisghairmthe'; +$labels['bccinstead'] = 'Bain feidhm as Bcc'; $labels['spellcheck'] = 'Litrigh'; $labels['checkspelling'] = 'Fiosrú ar mo litriú'; $labels['resumeediting'] = 'Athdhúisigh eagarthóireacht'; @@ -203,9 +210,19 @@ $labels['restoremessage'] = 'Cuir an teachtaireacht ar ais?'; $labels['ignore'] = 'Ná bac leis'; $labels['responses'] = 'Freagraí'; $labels['insertresponse'] = 'Cuir isteach freagra'; +$labels['newresponse'] = 'Cruthaigh freagra nua'; +$labels['addresponse'] = 'Cuir freagra leis'; +$labels['editresponse'] = 'Cuir an freagra in eagar'; +$labels['editresponses'] = 'Cuir na freagraí in eagar'; +$labels['responsename'] = 'Ainm'; +$labels['responsetext'] = 'Téacs an fhreagra'; +$labels['attach'] = 'Ceangail'; $labels['attachments'] = 'Iatání'; $labels['upload'] = 'Aistriú suas'; +$labels['uploadprogress'] = '$percent ($current as $total)'; $labels['close'] = 'Dún'; +$labels['messageoptions'] = 'Roghanna teachtaireachtaí...'; +$labels['attachmentrename'] = 'Athainmnigh an ceangaltán'; $labels['low'] = 'Íseal'; $labels['lowest'] = 'Is Ísle'; $labels['normal'] = 'Gnách'; @@ -213,29 +230,99 @@ $labels['high'] = 'Ard'; $labels['highest'] = 'Is Airde'; $labels['nosubject'] = '(Níl aon Ábhair)'; $labels['showimages'] = 'Taispeáin na híomhánna'; +$labels['alwaysshow'] = 'Taispeáin íomhánna ó $sender i gcónaí'; +$labels['isdraft'] = 'Seo dréachttheachtaireacht.'; +$labels['andnmore'] = '$nr eile...'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Téacs amháin'; +$labels['savesentmessagein'] = 'Coimeád an teachtaireacht seolta i'; +$labels['dontsave'] = 'ná coimeád é'; +$labels['addcc'] = 'Cuir Cc leis'; +$labels['addbcc'] = 'Cuir Bcc leis'; $labels['name'] = 'Leasainm'; $labels['firstname'] = 'Ainm baiste'; $labels['surname'] = 'Sloinne'; +$labels['middlename'] = 'An Dara hAinm'; +$labels['nameprefix'] = 'Réimír'; +$labels['nickname'] = 'Leasainm'; +$labels['gender'] = 'Gnéas'; $labels['email'] = 'Ríomhphost'; +$labels['phone'] = 'Uimhir ghutháin'; +$labels['address'] = 'Seoladh'; +$labels['street'] = 'Sráid'; +$labels['locality'] = 'Cathair'; +$labels['zipcode'] = 'Cód Poist'; +$labels['region'] = 'Stát/Cúige'; +$labels['country'] = 'Tír'; +$labels['birthday'] = 'Lá breithe'; +$labels['anniversary'] = 'Cothrom lae'; +$labels['website'] = 'Suíomh gréasáin'; +$labels['instantmessenger'] = 'TM'; +$labels['notes'] = 'Nótaí'; +$labels['male'] = 'fireann'; +$labels['female'] = 'baineann'; +$labels['manager'] = 'Bainisteoir'; +$labels['assistant'] = 'Cúntóir'; +$labels['spouse'] = 'Céile'; +$labels['allfields'] = 'Gach réimse'; +$labels['search'] = 'Cuardaigh'; +$labels['searchresult'] = 'Toradh an chuardaigh'; +$labels['advsearch'] = 'Cuardach casta'; +$labels['advanced'] = 'Ardroghanna'; +$labels['other'] = 'Eile'; +$labels['printcontact'] = 'Cuir an teagmháil i gcló'; +$labels['typehome'] = 'Baile'; +$labels['typework'] = 'Obair'; +$labels['typeother'] = 'Eile'; +$labels['typemobile'] = 'Soghluaiste'; +$labels['typemain'] = 'Príomh'; +$labels['typehomefax'] = 'Faics baile'; +$labels['typeworkfax'] = 'Faics oibre'; +$labels['typecar'] = 'Gluaisteán'; +$labels['typevideo'] = 'Físeán'; +$labels['typeassistant'] = 'Cúntóir'; +$labels['typehomepage'] = 'Leathanach baile'; +$labels['typeblog'] = 'Blag'; +$labels['typeprofile'] = 'Beathaisnéisín'; +$labels['addfield'] = 'Cuir réimse leis...'; +$labels['addcontact'] = 'Cuir teagmháil leis'; $labels['editcontact'] = 'Chuir chara in eagar'; +$labels['contacts'] = 'Teagmhálacha'; +$labels['contactnameandorg'] = 'Ainm agus Eagraíocht'; +$labels['personalinfo'] = 'Faisnéis phearsanta'; +$labels['contactphoto'] = 'Grianghraf den teagmhálaí'; $labels['edit'] = 'Athraigh'; $labels['cancel'] = 'Cealaigh'; $labels['save'] = 'Sábháil'; $labels['delete'] = 'Scrios'; +$labels['rename'] = 'Athainmnigh'; +$labels['addphoto'] = 'Cuir leis'; +$labels['replacephoto'] = 'Ionadaigh'; +$labels['uploadphoto'] = 'Uasluchtaigh grianghraf'; +$labels['newcontact'] = 'Cruthaigh teagmháil nua'; $labels['deletecontact'] = 'Scrios na daoine seo'; $labels['composeto'] = 'Scríobh teachtaireacht go'; $labels['contactsfromto'] = 'Daoine as $from to $to as $count'; $labels['print'] = 'Priontáil'; $labels['export'] = 'Easportáil'; +$labels['exportall'] = 'Tabhair amach uile'; +$labels['newgroup'] = 'Cruthaigh baicle nua'; +$labels['addgroup'] = 'Cuir baicle leis'; +$labels['grouprename'] = 'Athainmnigh an bhaicle'; +$labels['groupdelete'] = 'Scrios an bhaicle'; +$labels['uponelevel'] = 'Suas'; $labels['previouspage'] = 'Taispeáin an foireann roimhe seo'; $labels['firstpage'] = 'Taispeáin an céad foireann'; $labels['nextpage'] = 'Taispeáin an foireann ina dhiaidh sin'; $labels['lastpage'] = 'Taispeáin an foireann deireanach'; +$labels['group'] = 'Baicle'; $labels['groups'] = 'Grúpaí'; $labels['personaladrbook'] = 'Seoltaí Pearsanta'; +$labels['searchdelete'] = 'Scrios an cuardach'; +$labels['import'] = 'Tabhair isteach'; +$labels['done'] = 'Déanta'; $labels['settingsfor'] = 'Socruithe chun'; +$labels['about'] = 'Maidir le'; $labels['preferences'] = 'Tosaíocht'; $labels['userpreferences'] = 'Tosaíocht Pearsanta'; $labels['editpreferences'] = 'Athraigh tosaíocht pearsanta'; @@ -245,27 +332,99 @@ $labels['htmlmessage'] = 'Teachtaireacht HTML'; $labels['messagepart'] = 'Cuid'; $labels['prettydate'] = 'Dátaí Dheas'; $labels['setdefault'] = 'Socraigh an réamhshocraithe'; +$labels['autodetect'] = 'Uathoibríoch'; $labels['language'] = 'Teanga'; $labels['timezone'] = 'Crios ama'; $labels['pagesize'] = 'Rónna in aghaidh gach leathanach'; $labels['signature'] = 'Mana clabhsúir'; $labels['dstactive'] = 'Laethúil um shamhradh'; +$labels['showinextwin'] = 'Oscail an teachtaireacht i bhfuinneog nua'; +$labels['composeextwin'] = 'Cum i bhfuinneog nua'; $labels['htmleditor'] = 'Scríobh teachtaireachta HTML'; $labels['htmlsignature'] = 'Mana clabhsúir HTML'; $labels['previewpane'] = 'Taispeáin an pána réamhamharc'; +$labels['skin'] = 'Craiceann an comhéadain'; +$labels['uisettings'] = 'Comhéadan'; +$labels['askuser'] = 'iarr orm'; +$labels['autosend'] = 'seol admháil'; +$labels['skipdeleted'] = 'Ná taispeáin teachtaireachtaí scriosta'; +$labels['fromknownsenders'] = 'ó sheoltóirí a bhfuil aithne orthu'; $labels['always'] = 'riamh'; +$labels['showinlineimages'] = 'Taispeáin na híomhánna ceangailte faoin teachtaireacht'; $labels['autosavedraft'] = 'Sábháil dréachta go huathoibríoch'; +$labels['everynminutes'] = 'gach $n nóiméad'; +$labels['refreshinterval'] = 'Athnuaigh (lorg teachtaireachtaí nua, agus araile)'; $labels['never'] = 'riamh'; $labels['immediately'] = 'láithreach'; +$labels['messagesdisplaying'] = 'Ag taispeáint na teachtaireachtaí'; +$labels['messagescomposition'] = 'Ag cumadh na teachtaireachtaí'; +$labels['advancedoptions'] = 'Ardroghanna'; +$labels['mainoptions'] = 'Príomhroghanna'; +$labels['browseroptions'] = 'Roghanna líonléitheora'; +$labels['maintenance'] = 'Cothabháil'; +$labels['newmessage'] = 'Teachtaireacht Nua'; +$labels['signatureoptions'] = 'Roghanna don Síniú'; +$labels['whenreplying'] = 'Nuair atá freagra á thabhairt'; +$labels['replyempty'] = 'ná luaigh an teachtaireacht bhunaidh'; +$labels['replytopposting'] = 'tosaigh an teachtaireacht nua os cionn an lua'; +$labels['replybottomposting'] = 'tosaigh an teachtaireacht nua faoin lua'; +$labels['newmessageonly'] = 'teachtaireacht nua amháin'; +$labels['replyandforwardonly'] = 'freagraí agus teachtaireachtaí curtha ar aghaidh amháin'; +$labels['insertsignature'] = 'Ionsáigh an síniú'; $labels['afternseconds'] = 'tar éis $n soicindí'; +$labels['defaultabook'] = 'An leabhar seoltaí réamhshocraithe'; +$labels['addtodict'] = 'Cuir leis an bhfoclóir é'; +$labels['inline'] = 'i líne'; +$labels['asattachment'] = 'mar cheangaltán'; +$labels['replyalldefault'] = 'freagair uile'; $labels['folder'] = 'Fillteán'; $labels['folders'] = 'Fillteán'; $labels['foldername'] = 'Ainm fillteán'; $labels['subscribed'] = 'Síntiú'; +$labels['messagecount'] = 'Teachtaireachtaí'; $labels['create'] = 'Cruthaigh'; $labels['createfolder'] = 'Cruthaigh fillteán nua'; $labels['managefolders'] = 'Stiúir na fillteán'; +$labels['specialfolders'] = 'Sainfhillteáin'; +$labels['properties'] = 'Airíonna'; +$labels['folderproperties'] = 'Airíonna an fhillteáin'; +$labels['parentfolder'] = 'An máthairfhillteán'; +$labels['location'] = 'Suíomh'; +$labels['info'] = 'Faisnéis'; +$labels['getfoldersize'] = 'Brúigh chun méid an fhillteáin a fháil'; +$labels['foldertype'] = 'An cineál fillteán'; +$labels['personalfolder'] = 'Fillteán príobháideach'; +$labels['sharedfolder'] = 'Fillteán poiblí'; +$labels['findfolders'] = 'Aimsigh fillteáin'; +$labels['namespace.personal'] = 'Pearsanta'; +$labels['namespace.other'] = 'Daoine eile'; +$labels['namespace.shared'] = 'Comhroinnte'; $labels['sortby'] = 'Sórtáil trí'; $labels['sortasc'] = 'Sórtáil in ord méadaitheach'; $labels['sortdesc'] = 'Sórtáil in ord neartaitheach'; +$labels['undo'] = 'Cealaigh'; +$labels['installedplugins'] = 'Breiseáin suiteáilte'; +$labels['plugin'] = 'Breiseán'; +$labels['version'] = 'Leagan'; +$labels['source'] = 'Foinse'; +$labels['license'] = 'Ceadúnas'; +$labels['support'] = 'Faigh tacaíocht'; +$labels['B'] = 'B'; +$labels['KB'] = 'KB'; +$labels['MB'] = 'MB'; +$labels['GB'] = 'GB'; +$labels['unicode'] = 'Unicode'; +$labels['english'] = 'Béarla'; +$labels['westerneuropean'] = 'Iarthar na hEorpach'; +$labels['easterneuropean'] = 'Oirthear na hEorpa'; +$labels['hebrew'] = 'Eabhrais'; +$labels['turkish'] = 'Tuircis'; +$labels['celtic'] = 'Ceilteach'; +$labels['chinese'] = 'Síneach'; +$labels['arialabeltopnav'] = 'Rialtán fuinneoige'; +$labels['arialabelmailpreviewframe'] = 'Réamhamharc ar an teachtaireacht'; +$labels['arialabelmessageactions'] = 'Gníomhartha na teachtaireachta'; +$labels['arialabelmessageheaders'] = 'Ceanntáisc na teachtaireachta'; +$labels['arialabelforwardingoptions'] = 'Roghanna cur ar aghaidh'; +$labels['arialabelmarkmessagesas'] = 'Rianaigh na teachtaireachtaí roghnaithe mar...'; ?> diff --git a/program/localization/ga_IE/messages.inc b/program/localization/ga_IE/messages.inc index 789e6dfbea7..df60b67df5e 100644 --- a/program/localization/ga_IE/messages.inc +++ b/program/localization/ga_IE/messages.inc @@ -16,10 +16,10 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/ */ $messages['errortitle'] = 'Tharla botún!'; -$messages['loginfailed'] = 'Theip an iarraidh chun logáil tú isteach'; -$messages['cookiesdisabled'] = 'Níor glac do sracléitheoir an fianán seisiúin'; -$messages['sessionerror'] = 'Tá an seisiúin neamhbhailí nó as feidhm'; -$messages['storageerror'] = 'Theip an iarraidh chun nasc go dtí an freastalaí Prótacal Rochtana Teachtaireachtaí Idirlín (IMAP)'; +$messages['loginfailed'] = 'Níor éirigh leis an síniú isteach.'; +$messages['cookiesdisabled'] = 'Ní ghlacann do líonléitheoir le fianáin.'; +$messages['sessionerror'] = 'Tá an seisiúin neamhbhailí nó as feidhm.'; +$messages['storageerror'] = 'Theip ar an iarracht chun nasc leis an bhfreastalaí Prótacal Rochtana Teachtaireachtaí Idirlín (IMAP)'; $messages['servererror'] = 'Botún ar an bhfreastalaí!'; $messages['servererrormsg'] = 'Botún freastalaithe: %msg'; $messages['accountlocked'] = 'Bhí an iomarca iarrachtaí chun síniú isteach nár éirigh leo. Déan iarracht arís níos déanaí.'; @@ -88,7 +88,9 @@ $messages['nonamewarning'] = 'Cuir isteach ainm le do thoil.'; $messages['nopagesizewarning'] = 'Cuir isteach méid leathanaigh le do thoil.'; $messages['nosenderwarning'] = 'Cuir isteach seoladh ríomhphoist an tseoltóra.'; $messages['norecipientwarning'] = 'Abair liom faighteoir amhain ar a laghad'; +$messages['disclosedreciptitle'] = 'An iomarca faighteoirí poiblí'; $messages['nosubjectwarning'] = 'Níl aon ábhair ar an teachtaireacht, ba mhaith tú déarfaidh mé ábair?'; +$messages['nosubjecttitle'] = 'Gan ábhar'; $messages['nobodywarning'] = 'Níl aon teacs san teachtaireacht, ba mhaith tú déarfaidh mé teachtaireacht ar bith?'; $messages['notsentwarning'] = 'Theip an iarraidh chun an teachtaireacht a seo. ba mhaith tú scrios do teachtaireacht?'; $messages['restoresavedcomposedata'] = 'Aimsíodh teachtaireacht a chumadh ach nár seoladh.\n\nÁbhar: $subject\nTaiscthe: $date\n\nAr mhaith leat an teachtaireacht seo a chur ar ais?'; @@ -97,20 +99,22 @@ $messages['nosearchname'] = 'Abair liom ainm duine nó seoladh ríomhphost'; $messages['notuploadedwarning'] = 'Níl gach ceangaltán uasluchtaithe fós. Fan le do thoil nó cealaigh an t-uasluchtú.'; $messages['searchsuccessful'] = 'Fuair mé $n teachtaireacht'; $messages['contactsearchsuccessful'] = 'Aimsíodh $nr dteagmhálaí.'; -$messages['searchnomatch'] = 'Ní bhfuair mé aon rud as an ceist seo'; -$messages['searching'] = 'Ag tástáil...'; -$messages['checking'] = 'Bím ag dhéanamh na mhaoirseachtí...'; +$messages['searchnomatch'] = 'Níor aimsigh an cuardach aon rud.'; +$messages['searching'] = 'Ag cuardach...'; +$messages['checking'] = 'Ag dearbháil...'; $messages['stillsearching'] = 'Fós ag cuardach...'; -$messages['nospellerrors'] = 'Ní bhfuair mé aon earráidí i teachtaireacht seo'; -$messages['folderdeleted'] = 'D\'éirigh mé, Scrios mé an fillteán'; +$messages['nospellerrors'] = 'Níor aimsíodh aon bhotún litrithe.'; +$messages['folderdeleted'] = 'Scriosadh an fillteán.'; $messages['folderpurged'] = 'Folmhaíodh an fillteán go rathúil.'; $messages['folderexpunged'] = 'Dlúthaíodh an fillteán go rathúil.'; $messages['deletedsuccessfully'] = 'D\'éirigh mé, Scrios mé'; $messages['converting'] = 'Scrios mé formáidithe as an teachtaireacht seo'; -$messages['messageopenerror'] = 'Theip orm chun an teachtaireacht seo a tarrtháil as an freastalaí'; +$messages['messageopenerror'] = 'Níorbh fhéidir an teachtaireacht a luchtú ón bhfreastalaí.'; $messages['filelinkerror'] = 'Níor éirigh leis an gcomhad a cheangail.'; -$messages['fileuploaderror'] = 'Theip an suas-luchtú'; +$messages['fileuploaderror'] = 'Theip ar uasluchtú an chomhaid.'; $messages['filesizeerror'] = 'Beigh an comhad ró-mhor. Is ea $size uas-saghas chun admháil léite'; +$messages['filecounterror'] = 'Is féidir suas go dtí $count gcomhad a uasluchtú in aon dreas amháin.'; +$messages['msgsizeerror'] = 'Theip air comhad a cheangail. Sáraíodh uasmhéid teachtaireachta ($size).'; $messages['copyerror'] = 'Níorbh fhéidir aon teagmháil a mhacasamhlú.'; $messages['moveerror'] = 'Níorbh fhéidir aon teagmháil a bhogadh...'; $messages['sourceisreadonly'] = 'Tá an foinse seolaigh seo inléite amháin'; @@ -131,6 +135,8 @@ $messages['selectimportfile'] = 'Roghnaigh comhad le huasluchtú.'; $messages['addresswriterror'] = 'Ní féidir scríobh sa leabhar seoltaí roghnaithe.'; $messages['contactaddedtogroup'] = 'Cuireadh na teagmhálacha go rathúil leis an mbaicle seo.'; $messages['importwait'] = 'Á tabhairt isteach, fan le do thoil...'; +$messages['importmessagesuccess'] = 'Tugadh $nr teachtaireacht isteach go rathúil'; +$messages['importmessageerror'] = 'Theip ar an tabhairt isteach! Ní comhad teachtaireachta nó comhad bosca poist bailí é an comhad uasluchtaithe '; $messages['opnotpermitted'] = 'Níl cead sin a dhéanamh!'; $messages['nofromaddress'] = 'Tá seoladh ríomhphoist ar iarraidh san aitheantas roghnaithe. '; $messages['smtpautherror'] = 'Botún SMTP ($code): Theip ar an bhfíordheimhniú.'; @@ -155,11 +161,14 @@ $messages['nametoolong'] = 'Tá an t-ainm rófhada.'; $messages['namedotforbidden'] = 'Ní féidir lanstád a bheith ag tús ainm an fhillteáin.'; $messages['folderupdated'] = 'Nuashonraíodh an fillteán.'; $messages['foldercreated'] = 'Cruthaíodh an fillteán.'; +$messages['invalidimageformat'] = 'Ní formáid íomhá bailí í sin.'; $messages['mispellingsfound'] = 'Aimsíodh botúin litrithe san teachtaireacht.'; $messages['messagetoobig'] = 'Tá an teachtaireacht rómhór le gur féidir obair léi.'; $messages['errnotfound'] = 'Níor Aimsíodh an Comhad'; +$messages['errnotfoundexplain'] = 'Níor aimsíodh an acmhainn a lorgadh!'; $messages['errfailedrequest'] = 'Iarratas ar theip air'; $messages['errauthorizationfailed'] = 'Theip ar an bhfíordheimhniú'; $messages['errunauthorizedexplain'] = 'Níorbh fhéidir a fhíordheimhniú go bhfuil cead agat rochtain a fháil ar an seirbhís seo!'; +$messages['errcontactserveradmin'] = 'Déan teagmháil le riarthóir d\'fhreastalaí.'; $messages['clicktoresumesession'] = 'Brúigh anseo chun leanúint ar aghaidh le do dhreas roimhe'; $messages['clicktocompose'] = 'Brúigh anseo chun teachtaireacht nua a chumadh'; diff --git a/program/localization/he_IL/labels.inc b/program/localization/he_IL/labels.inc index 0f06a9d0b28..4e7b6edb613 100644 --- a/program/localization/he_IL/labels.inc +++ b/program/localization/he_IL/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'כלא נקראו'; $labels['markflagged'] = 'כמסומן'; $labels['markunflagged'] = 'כלא מסומן'; $labels['moreactions'] = 'פעולות נוספות...'; +$labels['markallread'] = 'סימון כל ההודעות כאילו נקראו'; +$labels['folders-cur'] = 'רק התיקיה שנבחרה'; +$labels['folders-sub'] = 'רק התיקיה שנבחרה ותת התיקיות שלה'; +$labels['folders-all'] = 'כל התיקיות'; $labels['more'] = 'עוד'; $labels['back'] = 'חזרה'; $labels['options'] = 'אפשרויות'; @@ -253,6 +257,7 @@ $labels['uploadprogress'] = '$percent ($current מתוך $total)'; $labels['close'] = 'סגירה'; $labels['messageoptions'] = 'אפשרויות הודעה...'; $labels['togglecomposeoptions'] = 'בחירה בין הגדרות בסיסיות או מתקדמות של יצירת הודעה'; +$labels['attachmentrename'] = 'שינוי שם הצרופה'; $labels['low'] = 'נמוך'; $labels['lowest'] = 'נמוך ביותר'; $labels['normal'] = 'רגיל'; diff --git a/program/localization/he_IL/messages.inc b/program/localization/he_IL/messages.inc index ac732761f29..36fd1ac9c54 100644 --- a/program/localization/he_IL/messages.inc +++ b/program/localization/he_IL/messages.inc @@ -117,6 +117,8 @@ $messages['messageopenerror'] = 'לא ניתן לטעון ההודעה מהשר $messages['filelinkerror'] = 'הצמדת הצרופה נכשלה'; $messages['fileuploaderror'] = 'העלאת הקובץ נכשלה'; $messages['filesizeerror'] = 'הקובץ לטעינה גדול מהגודל המקסימלי שהוא $size'; +$messages['filecounterror'] = 'ניתן להעלות לכל היותר count$ קבצים בעת ובעונה אחת'; +$messages['msgsizeerror'] = 'הוספת צרופה נכשלה. גודלה יותר מהגודל (size$) המותר.'; $messages['copysuccess'] = '$nr אנשי קשר הועתקו בהצלחה'; $messages['movesuccess'] = '$nr אנשי קשר הועברו בהצלחה'; $messages['copyerror'] = 'לא ניתן היה להעתיק אנשי קשר כלשהם'; diff --git a/program/localization/hu_HU/labels.inc b/program/localization/hu_HU/labels.inc index 2926e2e107e..cce039742a1 100644 --- a/program/localization/hu_HU/labels.inc +++ b/program/localization/hu_HU/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Olvasatlanként'; $labels['markflagged'] = 'Jelöltként'; $labels['markunflagged'] = 'Jelöletlenként'; $labels['moreactions'] = 'További műveletek...'; +$labels['markallread'] = 'Mind megjelölése olvasottként'; +$labels['folders-cur'] = 'Csak a kiválasztott mappa'; +$labels['folders-sub'] = 'Kiválasztott mappák és almappák'; +$labels['folders-all'] = 'Összes mappa'; $labels['more'] = 'Még...'; $labels['back'] = 'Vissza'; $labels['options'] = 'Beállítások'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Oszlopok listája'; $labels['listsorting'] = 'Rendezés oszlopa'; $labels['listorder'] = 'Rendezés sorrendje'; $labels['listmode'] = 'Megjelenítési mód'; +$labels['layout'] = 'Elrendezés'; +$labels['layoutwidescreen'] = 'Szélesképernyő'; +$labels['layoutdesktop'] = 'Asztal'; +$labels['layoutlist'] = 'Lista'; $labels['folderactions'] = 'Mappaműveletek...'; $labels['compact'] = 'Tömörítés'; $labels['empty'] = 'Kiürítés'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'Kulcs ID'; $labels['keylength'] = 'Bitek'; $labels['keyexpired'] = 'Lejárt'; $labels['keyrevoked'] = 'Visszvont'; +$labels['bccinstead'] = 'Titkos másolat használata'; $labels['editidents'] = 'Azonosítók szerkesztése'; $labels['spellcheck'] = 'Helyesírás ellenőrzés'; $labels['checkspelling'] = 'Helyesírás-ellenőrzés'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current / $total)'; $labels['close'] = 'Bezárás'; $labels['messageoptions'] = 'Üzenetbeállítások...'; $labels['togglecomposeoptions'] = 'Levélírás beállítások kapcsolása'; +$labels['attachmentrename'] = 'Csatolmány átnevezése'; $labels['low'] = 'Alacsony'; $labels['lowest'] = 'Legkisebb'; $labels['normal'] = 'Normál'; @@ -314,6 +324,7 @@ $labels['advsearch'] = 'Részletes keresés'; $labels['advanced'] = 'Haladó'; $labels['other'] = 'Egyéb'; $labels['printcontact'] = 'A kapcsolat nyomtatása'; +$labels['qrcode'] = 'QR Kód'; $labels['typehome'] = 'Otthon'; $labels['typework'] = 'Munkahely'; $labels['typeother'] = 'Egyéb'; @@ -512,7 +523,7 @@ $labels['foldertype'] = 'Mappa típusa'; $labels['personalfolder'] = 'Privát mappa'; $labels['otherfolder'] = 'Más felhasználó(k) mappája'; $labels['sharedfolder'] = 'Megosztott mappa'; -$labels['findfolders'] = 'Mappa kerésése'; +$labels['findfolders'] = 'Mappa keresése'; $labels['namespace.personal'] = 'Személyes'; $labels['namespace.other'] = 'Más felhasználók'; $labels['namespace.shared'] = 'Megosztva'; diff --git a/program/localization/hu_HU/messages.inc b/program/localization/hu_HU/messages.inc index b7a232cb92f..9d3d1fd2d12 100644 --- a/program/localization/hu_HU/messages.inc +++ b/program/localization/hu_HU/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Adjon meg egy nevet'; $messages['nopagesizewarning'] = 'Adja meg a papír méretét'; $messages['nosenderwarning'] = 'Írd be a küldő email címét.'; $messages['norecipientwarning'] = 'Legalább egy címzettet adjon meg'; +$messages['disclosedrecipwarning'] = 'Minden címzet látni fogja az összes többi címzet e-mail címét. Ezt megelőzendően és a személyes adatok biztonságának megörzésének érdekében használhatod a Titkos másolat/Bcc/ mezőt.'; +$messages['disclosedreciptitle'] = 'Túl sok címzet'; $messages['nosubjectwarning'] = 'A Tárgy mező üres. Szeretné most kitölteni?'; +$messages['nosubjecttitle'] = 'Nincs tárgy'; $messages['nobodywarning'] = 'Elküldi az üzenetet üresen?'; $messages['notsentwarning'] = 'Az üzenet még nem lett elküldve. Eldobja az üzenetet?'; $messages['restoresavedcomposedata'] = 'Egy elkezdett de el nem küldött üzenetet talált a program.\n\Tárgy: $subject\nMentve: $date\n\nSzeretnéd visszaállítani és folytatni ez az üzenetet?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'A levelek a szerverről nem tölthetők le'; $messages['filelinkerror'] = 'A fájl csatolása sikertelen.'; $messages['fileuploaderror'] = 'Feltöltés sikertelen'; $messages['filesizeerror'] = 'A feltöltött fájl mérete meghaladja a maximális $size méretet'; +$messages['filecounterror'] = 'Egyszerre csak $count filet tölthetsz fel.'; +$messages['msgsizeerror'] = 'Túl nagy a csatolmány mérete. Egy üzenet maximális mérete: ($size).'; $messages['copysuccess'] = 'Sikeresen átmásolva $nr kapcsolat.'; $messages['movesuccess'] = '$nr kapcsolat sikeresen áthelyezve.'; $messages['copyerror'] = 'Nem lehet másolni a kapcsolatokat.'; diff --git a/program/localization/id_ID/labels.inc b/program/localization/id_ID/labels.inc index 0ad97293312..05fa138c3bb 100644 --- a/program/localization/id_ID/labels.inc +++ b/program/localization/id_ID/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Belum Terbaca'; $labels['markflagged'] = 'Sudah ditandai'; $labels['markunflagged'] = 'Belum ditandai'; $labels['moreactions'] = 'Tindakan lain..'; +$labels['markallread'] = 'Tandai semua telah dibaca'; +$labels['folders-cur'] = 'Hanya pilih folder'; +$labels['folders-sub'] = 'Pilih folder dan subfoldernya'; +$labels['folders-all'] = 'Semua folder'; $labels['more'] = 'Berikutnya'; $labels['back'] = 'Kembali'; $labels['options'] = 'Pilihan'; @@ -229,6 +233,7 @@ $labels['keyid'] = 'ID Kunci'; $labels['keylength'] = 'Bit'; $labels['keyexpired'] = 'Kedaluarsa'; $labels['keyrevoked'] = 'Dicabut'; +$labels['bccinstead'] = 'Gunakan Bcc'; $labels['editidents'] = 'Ubah identitas'; $labels['spellcheck'] = 'Ejaan'; $labels['checkspelling'] = 'Pemeriksaan ejaan'; @@ -253,6 +258,7 @@ $labels['uploadprogress'] = '$percent ($current dari $total)'; $labels['close'] = 'Tutup'; $labels['messageoptions'] = 'Pilihan pesan...'; $labels['togglecomposeoptions'] = 'Jungkitkan opsi penyusunan'; +$labels['attachmentrename'] = 'Ubah nama lampiran'; $labels['low'] = 'Rendah'; $labels['lowest'] = 'Paling Rendah'; $labels['normal'] = 'Normal'; diff --git a/program/localization/id_ID/messages.inc b/program/localization/id_ID/messages.inc index 8cb32584a8c..8603d7910e1 100644 --- a/program/localization/id_ID/messages.inc +++ b/program/localization/id_ID/messages.inc @@ -52,6 +52,7 @@ $messages['successfullysaved'] = 'Berhasil disimpan'; $messages['savingresponse'] = 'Meyimpan pesan tanggapan....'; $messages['deleteresponseconfirm'] = 'Anda yakin ingin menghapus pesan tanggapan ini?'; $messages['addedsuccessfully'] = 'Kontak berhasil ditambahkan ke buku alamat'; +$messages['contactexists'] = 'Kontak dengan alamat email yang sama sudah ada.'; $messages['contactnameexists'] = 'Kontak dengan nama yang sama sudah ada.'; $messages['blockedimages'] = 'Untuk melindungi privasi Anda, gambar-gambar diluar server diblok pada pesan ini.'; $messages['encryptedmessage'] = 'Pesan ini terenkripsi dan tidak bisa ditampilkan. Maaf!'; @@ -89,6 +90,7 @@ $messages['formincomplete'] = 'Formulir tidak terisi semua'; $messages['noemailwarning'] = 'Tolong masukkan alamat email yang valid'; $messages['nonamewarning'] = 'Tolong masukkan nama'; $messages['nopagesizewarning'] = 'Tolong masukkan ukuran halaman'; +$messages['nosenderwarning'] = 'Harap masukkan alamat email pengirim.'; $messages['norecipientwarning'] = 'Tolong masukkan sedikitnya satu penerima'; $messages['nosubjectwarning'] = '"Judul" kosong. Isi judul sekarang?'; $messages['nobodywarning'] = 'Kirim pesan ini tanpa teks?'; @@ -146,6 +148,7 @@ $messages['importconfirmskipped'] = '$skipped entri yang sudah ada dilewatkan $messages['importmessagesuccess'] = 'Berhasil mengimport $nr pesan'; $messages['importmessageerror'] = 'Gagal mengimport! File yang di upload buka pesan yang valid atau file mailbox'; $messages['opnotpermitted'] = 'Operasi tidak diperbolehkan!'; +$messages['nofromaddress'] = 'Kurang alamat email dalam identitas yang dipilih.'; $messages['editorwarning'] = 'Mengubah tipe penyunting dapat menyebabkan pemformatan teks hilang. Apakah Anda hendak melanjutkan?'; $messages['httpreceivedencrypterror'] = 'Terjadi sebuah kesalahan pengaturan fatal. Segera hubungi administrator Anda. Pesan Anda tidak bisa terkirim.'; $messages['smtpconnerror'] = 'SMTP Error ($code): Koneksi ke server gagal'; @@ -154,6 +157,7 @@ $messages['smtpfromerror'] = 'SMTP Error ($code): Gagal mengatur pengirim "$from $messages['smtptoerror'] = 'SMTP Error ($code): Gagal menambah penerima "$to" ($msg)'; $messages['smtprecipientserror'] = 'SMTP Error ($code): Tidak dapat menguraikan daftar penerima'; $messages['smtperror'] = 'SMTP Error : $msg'; +$messages['emailformaterror'] = 'Alamat email tidak valid:$email'; $messages['toomanyrecipients'] = 'Terlalu banyak penerima. Batas maksimal penerima adalah $max'; $messages['maxgroupmembersreached'] = 'Jumlah grup melebihi jumlah maksimum $max'; $messages['internalerror'] = 'Terjadi kesalahan dari dalam. Silahkan coba kembali.'; @@ -170,6 +174,7 @@ $messages['savedsearchcreated'] = 'Pencarian tersimpan berhasil dibuat.'; $messages['savedsearchcreateerror'] = 'Tidak bisa membuat pencarian tersimpan.'; $messages['messagedeleted'] = 'Pesan berhasil dihapus'; $messages['messagemoved'] = 'Pesan berhasil dipindahkan'; +$messages['messagemovedtotrash'] = 'Pesan sukses dipindah ke Tong sampah.'; $messages['messagecopied'] = 'Pesan berhasil disalin'; $messages['messagemarked'] = 'Pesan berhasil ditandai'; $messages['autocompletechars'] = 'Masukkan setidaknya $min karakter untuk pelengkapan otomatis.'; diff --git a/program/localization/is_IS/labels.inc b/program/localization/is_IS/labels.inc index 6d4336ea6f9..be66278292e 100644 --- a/program/localization/is_IS/labels.inc +++ b/program/localization/is_IS/labels.inc @@ -29,6 +29,7 @@ $labels['drafts'] = 'Drög'; $labels['sent'] = 'Sent'; $labels['trash'] = 'Rusl'; $labels['junk'] = 'Ruslpóstur'; +$labels['show_real_foldernames'] = 'Birta raunveruleg heiti á sérmöppum'; $labels['subject'] = 'Titill'; $labels['from'] = 'Frá'; $labels['sender'] = 'Sendandi'; @@ -374,7 +375,7 @@ $labels['manageidentities'] = 'Sýsla með auðkenni'; $labels['newidentity'] = 'Búa til nýtt auðkenni'; $labels['addidentity'] = 'Bæta við auðkenni'; $labels['editidentity'] = 'Breyta auðkenni'; -$labels['preferhtml'] = 'Vil HTML'; +$labels['preferhtml'] = 'Birta HTML'; $labels['defaultcharset'] = 'Venjulegt stafasett'; $labels['htmlmessage'] = 'HTML skeyti'; $labels['digitalsig'] = 'Stafræn undirritun'; @@ -392,7 +393,9 @@ $labels['showinextwin'] = 'Opna skeyti í nýjum glugga'; $labels['composeextwin'] = 'Semja í nýjum glugga'; $labels['htmleditor'] = 'Skrifa HTML-skeyti'; $labels['htmlonreply'] = 'sem svar við HTML-skeytum aðeins'; +$labels['htmlonreplyandforward'] = 'við áframsendingu eða svar við HTML-skeytum'; $labels['htmlsignature'] = 'HTML-undirskrift'; +$labels['showemail'] = 'Birta tölvupóstföng með skjánafni'; $labels['previewpane'] = 'Sýna forskoðunarglugga'; $labels['skin'] = 'Sniðmát á viðmóti'; $labels['logoutclear'] = 'Tæma rusl við útskráningu'; @@ -410,15 +413,18 @@ $labels['readwhendeleted'] = 'Merkja skeyti sem lesið þegar því er hent'; $labels['flagfordeletion'] = 'Merkja skeyti til eyðingar í stað þess að eyða'; $labels['skipdeleted'] = 'Ekki sýna eydd skeyti'; $labels['deletealways'] = 'Ef ekki er hægt að setja skeytið í ruslafötuna, henda þeim'; +$labels['deletejunk'] = 'Eyða skeytum beint úr ruslpóstmöppu'; $labels['showremoteimages'] = 'Sýna myndir annarsstaðar frá'; $labels['fromknownsenders'] = 'frá þekktum sendendum'; $labels['always'] = 'alltaf'; +$labels['alwaysbutplain'] = 'alltaf, nema þegar svarað er skeyti á hreinum texta'; $labels['showinlineimages'] = 'Sýna viðhangandi myndir fyrir neðan skeytið'; $labels['autosavedraft'] = 'Vista sjálfkrafa sem drög'; -$labels['everynminutes'] = '$n mínútu fresti'; +$labels['everynminutes'] = '$n mínútna fresti'; +$labels['refreshinterval'] = 'Endurhlaða (athuga með ný skeyti, o.s.frv.)'; $labels['never'] = 'aldrei'; $labels['immediately'] = 'samstundis'; -$labels['messagesdisplaying'] = 'Sýni skeyti'; +$labels['messagesdisplaying'] = 'Birting skeyta'; $labels['messagescomposition'] = 'Semja skeyti'; $labels['mimeparamfolding'] = 'Nafn á viðhengjum'; $labels['2231folding'] = 'Full RFC 2231 (Thunderbird)'; @@ -459,6 +465,7 @@ $labels['spellcheckignoresyms'] = 'Hunsa orð með merki'; $labels['spellcheckignorenums'] = 'Hunsa orð með tölum'; $labels['spellcheckignorecaps'] = 'Hunsa orð sem eru í hástöfum'; $labels['addtodict'] = 'Bæta við orðalista'; +$labels['forwardmode'] = 'Áframsending skeyta'; $labels['inline'] = 'innfellt'; $labels['asattachment'] = 'sem viðhengi'; $labels['replyallmode'] = 'Sjálfgefin aðgerð [Svara öllum] hnappsins'; @@ -521,5 +528,6 @@ $labels['japanese'] = 'Japanskt'; $labels['korean'] = 'Kóreska'; $labels['chinese'] = 'Kínverska'; $labels['arialabeltopnav'] = 'Gluggastýring'; +$labels['arialabelforwardingoptions'] = 'Valkostir áframsendinga'; $labels['arialabelsearchterms'] = 'Leitarstrengir'; ?> diff --git a/program/localization/is_IS/messages.inc b/program/localization/is_IS/messages.inc index d84464b4d22..ff990fb79e7 100644 --- a/program/localization/is_IS/messages.inc +++ b/program/localization/is_IS/messages.inc @@ -55,6 +55,7 @@ $messages['contactnameexists'] = 'Tengiliður með sama nafn er þegar skráður $messages['blockedimages'] = 'Til verndar hafa allar myndir í þessu skeyti verið blokkaðar.'; $messages['encryptedmessage'] = 'Þetta er dulkóðað skeyti og því miður er ekki hægt að birta það'; $messages['nopubkeyfor'] = 'Enginn gildur dreifilykill fannst fyrir $email'; +$messages['keyservererror'] = 'Mistókst að nálgast lykil á lyklaþjóni'; $messages['nocontactsfound'] = 'Engir tengiliðir fundust.'; $messages['contactnotfound'] = 'Umbeðinn tengiliður fannst ekki.'; $messages['contactsearchonly'] = 'Settu inn leitartexta til að finna tengiliði'; @@ -63,9 +64,12 @@ $messages['errorsaving'] = 'Villa kom upp við vistun.'; $messages['errormoving'] = 'Gat ekki fært skeytið'; $messages['errorcopying'] = 'Gat ekki afritað skeyti(n).'; $messages['errordeleting'] = 'Gat ekki eytt skeytinu'; +$messages['errormarking'] = 'Gat ekki merkt skeytið/skeytin.'; $messages['deletecontactconfirm'] = 'Ertu viss um að þú viljir eyða völdum tengiliðum?'; $messages['deletegroupconfirm'] = 'Ertu viss um að þú viljir eyða völdum hópi?'; +$messages['deletemessagesconfirm'] = 'Ertu viss um að þú viljir eyða völdum skeytum?'; $messages['deletefolderconfirm'] = 'Ertu viss um að vilja eyða þessari möppu?'; +$messages['purgefolderconfirm'] = 'Ertu viss um að þú viljir eyða öllum skeytum í þessari möppu?'; $messages['contactdeleting'] = 'Eyði tengilið(um)...'; $messages['groupdeleting'] = 'Eyði hóp...'; $messages['folderdeleting'] = 'Eyði möppu...'; @@ -76,6 +80,7 @@ $messages['formincomplete'] = 'Formið var ekki fyllt út að fullu'; $messages['noemailwarning'] = 'Sláðu inn gildt netfang'; $messages['nonamewarning'] = 'Sláðu inn nafn'; $messages['nopagesizewarning'] = 'Sláðu inn síðustærð'; +$messages['nosenderwarning'] = 'Settu inn tölvupóstfang sendanda.'; $messages['norecipientwarning'] = 'Í það minnsta einn viðtakandi verður að vera'; $messages['nosubjectwarning'] = 'Efnislínan er tóm. Viltu slá eitthvað inn í hana?'; $messages['nobodywarning'] = 'Viltu senda tómt skeyti?'; @@ -90,6 +95,20 @@ $messages['checking'] = 'Gái...'; $messages['stillsearching'] = 'Enn að leita...'; $messages['nospellerrors'] = 'Engar innsláttarvillur fundust'; $messages['folderdeleted'] = 'Möppu var eytt'; +$messages['deletedsuccessfully'] = 'Tókst að eyða.'; +$messages['filelinkerror'] = 'Mistókst að hengja við skrá.'; +$messages['movingmessage'] = 'Færi skeyti...'; +$messages['copyingmessage'] = 'Afrita skeyti...'; +$messages['copyingcontact'] = 'Afrita tengiliði...'; +$messages['movingcontact'] = 'Færi tengiliði...'; +$messages['deletingmessage'] = 'Eyði skeytum...'; +$messages['markingmessage'] = 'Merki skeyti...'; +$messages['addingmember'] = 'Bæti tengiliðum í hópinn...'; +$messages['removingmember'] = 'Fjarlægi tengiliði úr hópi...'; +$messages['importwait'] = 'Flyt inn, bíddu aðeins...'; +$messages['importmessagesuccess'] = 'Tókst að flytja inn $nr skeyti'; +$messages['smtperror'] = 'SMTP villa: $msg'; +$messages['emailformaterror'] = 'Ógilt tölvupóstfang: $email'; $messages['contactdelerror'] = 'Gat ekki eytt tengilið(um).'; $messages['contactdeleted'] = 'Tókst að eyða tengilið(um).'; $messages['messagedeleted'] = 'Tókst að eyða skeyti/skeytum.'; diff --git a/program/localization/it_IT/labels.inc b/program/localization/it_IT/labels.inc index e6d3fec2c70..2e9c6b5d8ab 100644 --- a/program/localization/it_IT/labels.inc +++ b/program/localization/it_IT/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Non letti'; $labels['markflagged'] = 'Contrassegnato'; $labels['markunflagged'] = 'Non contrassegnato'; $labels['moreactions'] = 'Altre operazioni...'; +$labels['markallread'] = 'Contrassegna tutti come letti'; +$labels['folders-cur'] = 'Seleziona solo la cartelle'; +$labels['folders-sub'] = 'Seleziona la cartelle e le sue sottocartelle'; +$labels['folders-all'] = 'Tutte le cartelle'; $labels['more'] = 'Azioni'; $labels['back'] = 'Indietro'; $labels['options'] = 'Opzioni'; @@ -172,6 +176,9 @@ $labels['listcolumns'] = 'Elenco Colonne'; $labels['listsorting'] = 'Ordina per'; $labels['listorder'] = 'Ordinamento'; $labels['listmode'] = 'Modalità di visualizzazione'; +$labels['layout'] = 'Layout'; +$labels['layoutwidescreen'] = 'Widescreen'; +$labels['layoutdesktop'] = 'Desktop'; $labels['folderactions'] = 'Operazioni cartella'; $labels['compact'] = 'Compatta'; $labels['empty'] = 'Svuota'; @@ -229,6 +236,7 @@ $labels['keyid'] = 'ID della chiave'; $labels['keylength'] = 'Bit'; $labels['keyexpired'] = 'Scaduta'; $labels['keyrevoked'] = 'Revocata'; +$labels['bccinstead'] = 'Usa Bcc'; $labels['editidents'] = 'Modifica identità'; $labels['spellcheck'] = 'Controllo ortografico'; $labels['checkspelling'] = 'Controlla ortografia'; @@ -253,6 +261,7 @@ $labels['uploadprogress'] = '$percent ($current su $total)'; $labels['close'] = 'Chiudi'; $labels['messageoptions'] = 'Opzioni messaggi...'; $labels['togglecomposeoptions'] = 'Passa alle impostazioni di composizione'; +$labels['attachmentrename'] = 'Rinomina Allegato'; $labels['low'] = 'Bassa'; $labels['lowest'] = 'Molto bassa'; $labels['normal'] = 'Normale'; diff --git a/program/localization/it_IT/messages.inc b/program/localization/it_IT/messages.inc index ce1fd8ef312..b16c6236345 100644 --- a/program/localization/it_IT/messages.inc +++ b/program/localization/it_IT/messages.inc @@ -117,6 +117,7 @@ $messages['messageopenerror'] = 'Impossibile caricare il messaggio dal server'; $messages['filelinkerror'] = 'L\'inserimento dell\'allegato è fallito.'; $messages['fileuploaderror'] = 'Errore durante il caricamento del file'; $messages['filesizeerror'] = 'Il file da caricare supera il limite massimo di $size'; +$messages['msgsizeerror'] = 'Errore nell\'allegare un file. Dimensione massima di un messaggio ($size) superata. '; $messages['copysuccess'] = 'Copiati correttamente $nr contatti.'; $messages['movesuccess'] = '$nr contatti spostati correttamente.'; $messages['copyerror'] = 'Impossibile copiare i contatti.'; @@ -174,6 +175,7 @@ $messages['savedsearchcreated'] = 'Ricerca salvata creata con successo.'; $messages['savedsearchcreateerror'] = 'Impossibile creare la ricerca salvata.'; $messages['messagedeleted'] = 'Messaggi/o cancellato correttamente'; $messages['messagemoved'] = 'Messaggi/o spostato correttamente'; +$messages['messagemovedtotrash'] = 'Messaggio(i) spostati correttamente nel cestino.'; $messages['messagecopied'] = 'Messaggi/o copiato correttamente'; $messages['messagemarked'] = 'Messaggi/o marcato correttamente'; $messages['autocompletechars'] = 'Inserisci almeno $min caratteri per l\'autocompletamento'; diff --git a/program/localization/ja_JP/labels.inc b/program/localization/ja_JP/labels.inc index ca50a4093a4..4843844f993 100644 --- a/program/localization/ja_JP/labels.inc +++ b/program/localization/ja_JP/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = '未読に設定'; $labels['markflagged'] = 'フラグを設定'; $labels['markunflagged'] = 'フラグを解除'; $labels['moreactions'] = 'その他の操作...'; +$labels['markallread'] = 'すべてを既読に設定'; +$labels['folders-cur'] = '選択したフォルダーだけ'; +$labels['folders-sub'] = '選択したフォルダーとその下位のフォルダー'; +$labels['folders-all'] = 'すべてのフォルダー'; $labels['more'] = '続く'; $labels['back'] = '戻る'; $labels['options'] = 'オプション'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = '列を一覧'; $labels['listsorting'] = '並べ替える列'; $labels['listorder'] = '並べ替える順序'; $labels['listmode'] = '一覧表示モード'; +$labels['layout'] = '配置'; +$labels['layoutwidescreen'] = 'ワイド画面'; +$labels['layoutdesktop'] = 'デスクトップ'; +$labels['layoutlist'] = '一覧'; $labels['folderactions'] = 'フォルダーの操作...'; $labels['compact'] = '圧縮'; $labels['empty'] = '空'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'キーID'; $labels['keylength'] = 'ビット'; $labels['keyexpired'] = '期限切れ'; $labels['keyrevoked'] = '取り消し済み'; +$labels['bccinstead'] = 'Bccを使用'; $labels['editidents'] = '識別情報を編集'; $labels['spellcheck'] = 'スペル'; $labels['checkspelling'] = 'スペルチェック'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($totalの$current)'; $labels['close'] = '閉じる'; $labels['messageoptions'] = 'メッセージのオプション...'; $labels['togglecomposeoptions'] = '作成のオプションを切り替え'; +$labels['attachmentrename'] = '添付ファイルの名前を変更'; $labels['low'] = '低'; $labels['lowest'] = '最低'; $labels['normal'] = '通常'; @@ -314,6 +324,7 @@ $labels['advsearch'] = '高度な検索'; $labels['advanced'] = '高度'; $labels['other'] = 'その他'; $labels['printcontact'] = '連絡先を印刷'; +$labels['qrcode'] = 'QRコード'; $labels['typehome'] = '自宅'; $labels['typework'] = '職場'; $labels['typeother'] = 'その他'; diff --git a/program/localization/ja_JP/messages.inc b/program/localization/ja_JP/messages.inc index a86f3bf7484..69f73df987a 100644 --- a/program/localization/ja_JP/messages.inc +++ b/program/localization/ja_JP/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = '名前を入力してください。'; $messages['nopagesizewarning'] = 'ページのサイズを入力してください。'; $messages['nosenderwarning'] = '送信者の電子メールアドレスを入力してください。'; $messages['norecipientwarning'] = '少なくとも1つ宛先を入力してください。'; +$messages['disclosedrecipwarning'] = 'すべての宛て先は互いに他のメールアドレスを見ることになります。これを防いで、それぞれのプライバシーを守るにはBcc欄を使用します。'; +$messages['disclosedreciptitle'] = '宛て先が多すぎます。'; $messages['nosubjectwarning'] = '件名(Subject)の欄が空です。今、入力しますか?'; +$messages['nosubjecttitle'] = '件名なし'; $messages['nobodywarning'] = '本文の無いメッセージを送信しますか?'; $messages['notsentwarning'] = 'メッセージを送信しませんでした。このメッセージを破棄しますか。'; $messages['restoresavedcomposedata'] = '以前に作成して未送信のメッセージがあります。\n\n件名: $subject\n保存日: $date\n\nこのメッセージを回復しますか?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'サーバーからメールを読み込めま $messages['filelinkerror'] = 'ファイルを添付できませんでした。'; $messages['fileuploaderror'] = 'ファイルをアップロードできませんでした。'; $messages['filesizeerror'] = 'アップロードするファイルのサイズが上限($size)を超えました。'; +$messages['filecounterror'] = '一度に最大で$count個のファイルをアップロードできます。'; +$messages['msgsizeerror'] = 'ファイルを添付できませんでした。メッセージの最大サイズ($size)を超えています。'; $messages['copysuccess'] = '$nr個の連絡先をコピーしました。'; $messages['movesuccess'] = '$nr個の連絡先を移動しました。'; $messages['copyerror'] = 'どの連絡先もコピーできませんでした。'; diff --git a/program/localization/ko_KR/labels.inc b/program/localization/ko_KR/labels.inc index 445f771ec2c..a9675274f09 100644 --- a/program/localization/ko_KR/labels.inc +++ b/program/localization/ko_KR/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = '읽지 않음으로 표시'; $labels['markflagged'] = '깃발 추가'; $labels['markunflagged'] = '깃발 제거'; $labels['moreactions'] = '추가 동작...'; +$labels['markallread'] = '모두 읽음으로 표시'; +$labels['folders-cur'] = '선택한 폴더에만 적용'; +$labels['folders-sub'] = '선택한 폴더 및 하위 폴더에만 적용'; +$labels['folders-all'] = '모든 폴더에 적용'; $labels['more'] = '더 보기'; $labels['back'] = '뒤로'; $labels['options'] = '옵션'; @@ -253,6 +257,7 @@ $labels['uploadprogress'] = '$percent ($total 중 $current)'; $labels['close'] = '닫기'; $labels['messageoptions'] = '메시지 옵션...'; $labels['togglecomposeoptions'] = '구성 옵션 표시/숨기기'; +$labels['attachmentrename'] = '첨부 파일 이름 바꾸기'; $labels['low'] = '낮음'; $labels['lowest'] = '가장 낮음'; $labels['normal'] = '보통'; diff --git a/program/localization/ko_KR/messages.inc b/program/localization/ko_KR/messages.inc index 5d79cb689c7..df5e09ade9c 100644 --- a/program/localization/ko_KR/messages.inc +++ b/program/localization/ko_KR/messages.inc @@ -52,6 +52,7 @@ $messages['successfullysaved'] = '성공적으로 저장함.'; $messages['savingresponse'] = '응답 문구를 저장하는 중...'; $messages['deleteresponseconfirm'] = '정말로 이 응답 문구를 삭제하시겠습니까?'; $messages['addedsuccessfully'] = '연락처가 주소록에 성공적으로 추가되었습니다.'; +$messages['contactexists'] = '동일한 이메일 주소의 연락처가 이미 존재합니다.'; $messages['contactnameexists'] = '연락처에 동일한 이름이 이미 존재합니다.'; $messages['blockedimages'] = '개인 정보 보호를 위해, 이 메시지의 외부 이미지가 차단되었습니다.'; $messages['encryptedmessage'] = '이것은 암호화된 메시지며 표시할 수 없습니다. 죄송합니다!'; @@ -89,6 +90,7 @@ $messages['formincomplete'] = '양식이 완전히 작성되지 않았습니다. $messages['noemailwarning'] = '유효한 이메일 주소를 입력해주십시오.'; $messages['nonamewarning'] = '이름을 입력해주십시오.'; $messages['nopagesizewarning'] = '페이지 크기를 입력해주십시오.'; +$messages['nosenderwarning'] = '보내는 사람의 이메일 주소를 입력해주세요.'; $messages['norecipientwarning'] = '최소 하나의 수신자를 입력해주십시오.'; $messages['nosubjectwarning'] = '"제목" 필드가 비어있습니다. 지금 입력하시겠습니까?'; $messages['nobodywarning'] = '내용 없는 메시지를 보내시겠습니까?'; @@ -115,6 +117,7 @@ $messages['messageopenerror'] = '서버에서 메시지를 로드할 수 없었 $messages['filelinkerror'] = '파일 첨부를 실패함.'; $messages['fileuploaderror'] = '파일 업로드를 실패했습니다.'; $messages['filesizeerror'] = '업로드한 파일이 최대 크기인 $size를 초과했습니다.'; +$messages['msgsizeerror'] = '파일 첨부에 실패했습니다. 메시지의 최대 크기($size)를 초과했습니다.'; $messages['copysuccess'] = '$nr개의 연락처를 성공적으로 복사함'; $messages['movesuccess'] = '$nr개의 연락처를 성공적으로 이동되었습니다.'; $messages['copyerror'] = '모든 연락처를 복사할 수 없었습니다.'; @@ -146,6 +149,7 @@ $messages['importconfirmskipped'] = '$skipped개의 기존 입력내용을 $messages['importmessagesuccess'] = '$nr개의 메시지를 성공적으로 가져옴'; $messages['importmessageerror'] = '가져오기를 실패했습니다! 업로드한 파일은 잘못된 메시지 또는 메일함 파일입니다.'; $messages['opnotpermitted'] = '작업이 허용되지 않습니다!'; +$messages['nofromaddress'] = '선택한 신원의 이메일 주소가 누락되었습니다.'; $messages['editorwarning'] = '편집기 유형을 전환하면 텍스트 서식을 잃게 될 수도 있습니다. 계속하시겠습니까?'; $messages['httpreceivedencrypterror'] = '치명적인 구성 오류가 발생했습니다. 즉시 관리자에게 연락하십시오. 메시지를 보낼 수 없습니다.'; @@ -155,6 +159,7 @@ $messages['smtpfromerror'] = 'SMTP 오류 ($code): 발송자를 "$from" ($msg) ( $messages['smtptoerror'] = 'SMTP 오류 ($code): 수신자를 "$to" ($msg)에 추가하는데 실패했습니다.'; $messages['smtprecipientserror'] = 'SMTP 오류: 수신자 목록을 구문 분석할 수 없습니다.'; $messages['smtperror'] = 'SMTP 오류: $msg'; +$messages['emailformaterror'] = '유효하지 않은 이메일 주소: $email'; $messages['toomanyrecipients'] = '수신자가 너무 많습니다. 수신자 인원을 $max명으로 줄이십시오.'; $messages['maxgroupmembersreached'] = '그룹 구성원이 최대 인원인 $max명을 초과합니다.'; $messages['internalerror'] = '내부 오류가 발생했습니다. 다시 시도해주십시오.'; @@ -171,6 +176,7 @@ $messages['savedsearchcreated'] = '저장된 검색이 성공적으로 생성되 $messages['savedsearchcreateerror'] = '저장된 검색을 생성하지 못했습니다.'; $messages['messagedeleted'] = '메시지가 성공적으로 삭제되었습니다.'; $messages['messagemoved'] = '메시지가 성공적으로 이동되었습니다.'; +$messages['messagemovedtotrash'] = '메시지를 성공적으로 휴지통으로 이동했습니다.'; $messages['messagecopied'] = '메시지가 성공적으로 복사되었습니다.'; $messages['messagemarked'] = '메시지가 성공적으로 표시되었습니다.'; $messages['autocompletechars'] = '자동 완성을 위해 $min개 이상의 문자를 입력하십시오.'; diff --git a/program/localization/lt_LT/labels.inc b/program/localization/lt_LT/labels.inc index 5b2b1e26b85..0d9237927a6 100644 --- a/program/localization/lt_LT/labels.inc +++ b/program/localization/lt_LT/labels.inc @@ -253,6 +253,7 @@ $labels['uploadprogress'] = '$percent ($current iš $total)'; $labels['close'] = 'Užverti'; $labels['messageoptions'] = 'Laiško savybės…'; $labels['togglecomposeoptions'] = 'Rodyti/slėpti nustatymus'; +$labels['attachmentrename'] = 'Pervardinti priedą'; $labels['low'] = 'Žemas'; $labels['lowest'] = 'Žemiausias'; $labels['normal'] = 'Normalus'; diff --git a/program/localization/lt_LT/messages.inc b/program/localization/lt_LT/messages.inc index d400e51c0df..9dd5947a734 100644 --- a/program/localization/lt_LT/messages.inc +++ b/program/localization/lt_LT/messages.inc @@ -117,6 +117,7 @@ $messages['messageopenerror'] = 'Nepavyko įkelti laiško iš serverio.'; $messages['filelinkerror'] = 'Failo įkelti nepavyko.'; $messages['fileuploaderror'] = 'Nepavyko įkelti failo.'; $messages['filesizeerror'] = 'Įkeltas failas viršija maksimalų leistiną dydį – $size.'; +$messages['msgsizeerror'] = 'Nepavyko pridėti failo. Viršytas maksimalus leistinas laiko dydis ($size).'; $messages['copysuccess'] = 'Nukopijuota adresatų: $nr.'; $messages['movesuccess'] = 'Perkelta adresatų: $nr.'; $messages['copyerror'] = 'Adresatų nukopijuoti nepavyko.'; @@ -174,6 +175,7 @@ $messages['savedsearchcreated'] = 'Radinių aplankas sėkmingai sukurtas.'; $messages['savedsearchcreateerror'] = 'Radinių aplanko sukurti nepavyko.'; $messages['messagedeleted'] = 'Laiškas(-ai) sėkmingai pašalintas(-i).'; $messages['messagemoved'] = 'Laiškas(-ai) sėkmingai perkeltas(-i).'; +$messages['messagemovedtotrash'] = 'Laiškas(-ai) sėkmingai perkeltas(-i) į Šiukšlinę.'; $messages['messagecopied'] = 'Laiškas(-ai) sėkmingai nukopijuotas(-i).'; $messages['messagemarked'] = 'Laiškas(-ai) sėkmingai pažymėtas(-i).'; $messages['autocompletechars'] = 'Automatiniam užbaigimui būtini bent $min simboliai.'; diff --git a/program/localization/mk_MK/messages.inc b/program/localization/mk_MK/messages.inc index 8cbda2f9b1f..74980bf93d1 100644 --- a/program/localization/mk_MK/messages.inc +++ b/program/localization/mk_MK/messages.inc @@ -22,6 +22,7 @@ $messages['sessionerror'] = 'Сесијата е неважечка или е и $messages['storageerror'] = 'Поврзувањето со IMAP не успеа'; $messages['servererror'] = 'Грешка во серверот!'; $messages['servererrormsg'] = 'Грешка со серверот: $msg'; +$messages['accountlocked'] = 'Премногу обиди за најава. Пробајте повторно подоцна.'; $messages['connerror'] = 'Грешка со конекција (Неуспешно конектирање со серверот)!'; $messages['dberror'] = 'Грешка со датабазата!'; $messages['windowopenerror'] = 'Popup прозорецот беше блокиран!'; @@ -39,6 +40,7 @@ $messages['nomessages'] = 'Нема пораки'; $messages['refreshing'] = 'Освежување...'; $messages['loading'] = 'Вчитувам...'; $messages['uploading'] = 'Ја подигам податотеката...'; +$messages['attaching'] = 'Датотеката се прикачува...'; $messages['uploadingmany'] = 'Датотеките се прикачуваат...'; $messages['loadingdata'] = 'Ги вчитувам податоците...'; $messages['checkingmail'] = 'Проверувам нова пошта...'; @@ -50,6 +52,7 @@ $messages['successfullysaved'] = 'Успешно зачувано'; $messages['savingresponse'] = 'Одговорот се снима...'; $messages['deleteresponseconfirm'] = 'Избриши го одговорот?'; $messages['addedsuccessfully'] = 'Името е успешно додадено во Именикот'; +$messages['contactexists'] = 'Контакт со иста адреса на Е-пошта веќе постои.'; $messages['contactnameexists'] = 'Контакт со истото име веќе постои.'; $messages['blockedimages'] = 'За да се заштити вашата приватност, сликите во оваа порака не се прикажани.'; $messages['encryptedmessage'] = 'Оваа порака е кодирана и не може да се прикаже. Жалиме!'; diff --git a/program/localization/nl_NL/labels.inc b/program/localization/nl_NL/labels.inc index d1fb1c60d39..7d594af9146 100644 --- a/program/localization/nl_NL/labels.inc +++ b/program/localization/nl_NL/labels.inc @@ -253,6 +253,7 @@ $labels['uploadprogress'] = '$percent ($current van $total)'; $labels['close'] = 'Sluit'; $labels['messageoptions'] = 'Berichtopties...'; $labels['togglecomposeoptions'] = 'Wissel opties voor opstellen'; +$labels['attachmentrename'] = 'Hernoem bijlage'; $labels['low'] = 'Laag'; $labels['lowest'] = 'Laagste'; $labels['normal'] = 'Normaal'; diff --git a/program/localization/nl_NL/messages.inc b/program/localization/nl_NL/messages.inc index 54ba47bfaf2..5da4d62b2c7 100644 --- a/program/localization/nl_NL/messages.inc +++ b/program/localization/nl_NL/messages.inc @@ -117,6 +117,7 @@ $messages['messageopenerror'] = 'Kan het bericht niet van de server laden.'; $messages['filelinkerror'] = 'Bestand toevoegen mislukt.'; $messages['fileuploaderror'] = 'Bestand uploaden mislukt.'; $messages['filesizeerror'] = 'Het bestand overschrijdt de maximale grootte van $size.'; +$messages['msgsizeerror'] = 'Bestand toevoegen als bijlage mislukt. Maximale grootte van een bericht ($size) overschreden.'; $messages['copysuccess'] = '$nr contactpersonen succesvol gekopieerd.'; $messages['movesuccess'] = '$nr contactpersonen succesvol verplaatst.'; $messages['copyerror'] = 'Kon geen contactpersoon kopieren.'; diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc index 3696f2d887f..2ddfa6ba05c 100644 --- a/program/localization/pl_PL/labels.inc +++ b/program/localization/pl_PL/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Jako nieprzeczytane'; $labels['markflagged'] = 'Jako oflagowane'; $labels['markunflagged'] = 'Jako nieoflagowane'; $labels['moreactions'] = 'Więcej akcji...'; +$labels['markallread'] = 'Oznacz wszystkie jako przeczytane'; +$labels['folders-cur'] = 'Tylko wybrany folder'; +$labels['folders-sub'] = 'Wybrany folder i podfoldery'; +$labels['folders-all'] = 'Wszystkie foldery'; $labels['more'] = 'Więcej'; $labels['back'] = 'Wstecz'; $labels['options'] = 'Ustawienia'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Kolumny'; $labels['listsorting'] = 'Porządek sortowania'; $labels['listorder'] = 'Kierunek sortowania'; $labels['listmode'] = 'Typ listy'; +$labels['layout'] = 'Układ'; +$labels['layoutwidescreen'] = 'Szeroki ekran'; +$labels['layoutdesktop'] = 'Pulpit'; +$labels['layoutlist'] = 'Lista'; $labels['folderactions'] = 'Działania na folderach...'; $labels['compact'] = 'Porządkuj'; $labels['empty'] = 'Opróżnij'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'ID Klucza'; $labels['keylength'] = 'Bitów'; $labels['keyexpired'] = 'Przedawniony'; $labels['keyrevoked'] = 'Unieważniony'; +$labels['bccinstead'] = 'Użyj Bcc'; $labels['editidents'] = 'Edytuj tożsamości'; $labels['spellcheck'] = 'Pisownia'; $labels['checkspelling'] = 'Sprawdź pisownię'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current z $total)'; $labels['close'] = 'Zamknij'; $labels['messageoptions'] = 'Opcje wiadomości...'; $labels['togglecomposeoptions'] = 'Przestaw opcje kompozycji'; +$labels['attachmentrename'] = 'Zmiana nazwy załącznika'; $labels['low'] = 'Niski'; $labels['lowest'] = 'Bardzo niski'; $labels['normal'] = 'Normalny'; @@ -314,6 +324,7 @@ $labels['advsearch'] = 'Wyszukiwanie zaawansowane'; $labels['advanced'] = 'Zaawansowane'; $labels['other'] = 'Inne'; $labels['printcontact'] = 'Drukuj Kontakt'; +$labels['qrcode'] = 'Kod QR'; $labels['typehome'] = 'Dom'; $labels['typework'] = 'Praca'; $labels['typeother'] = 'Inne'; diff --git a/program/localization/pl_PL/messages.inc b/program/localization/pl_PL/messages.inc index e93572148d0..0168f0a9eb7 100644 --- a/program/localization/pl_PL/messages.inc +++ b/program/localization/pl_PL/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Podaj nazwę!'; $messages['nopagesizewarning'] = 'Podaj poprawną wartość!'; $messages['nosenderwarning'] = 'Podaj adres e-mail nadawcy!'; $messages['norecipientwarning'] = 'Podaj co najmniej jednego odbiorcę!'; +$messages['disclosedrecipwarning'] = 'Wszyscy odbiorcy będą widzieć adresy e-mail innych. Aby temu zapobiec i chronić ich prywatność możesz użyć pola Bcc.'; +$messages['disclosedreciptitle'] = 'Zbyt wielu publicznych odbiorców'; $messages['nosubjectwarning'] = 'Nie podano tematu wiadomości. Czy chcesz go teraz uzupełnić?'; +$messages['nosubjecttitle'] = 'Brak tematu'; $messages['nobodywarning'] = 'Ta wiadomość jest pusta, czy mimo to chcesz ją wysłać?'; $messages['notsentwarning'] = 'Wiadomość nie została wysłana. Czy chcesz usunąć tę wiadomość?'; $messages['restoresavedcomposedata'] = 'Wykryto poprzednio tworzoną ale nie wysłaną wiadomość.\n\nTemat: $subject\nZapisano: $date\n\nCzy przywrócić tą wiadomość?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Nie można załadować wiadomości z serwera.'; $messages['filelinkerror'] = 'Dołączanie pliku nie powiodło się.'; $messages['fileuploaderror'] = 'Załączanie pliku nie powiodło się.'; $messages['filesizeerror'] = 'Plik przekracza maksymalną wielkość $size.'; +$messages['filecounterror'] = 'Możesz wysłać tylko $count plików jednocześnie.'; +$messages['msgsizeerror'] = 'Załączanie pliku nie powiodło się. Przekroczony maksymalny rozmiar wiadomości ($size).'; $messages['copysuccess'] = 'Pomyślnie skopiowano $nr kontaktów.'; $messages['movesuccess'] = 'Pomyślnie przeniesiono $nr kontaktów.'; $messages['copyerror'] = 'Nie udało się skopiować żadnego kontaktu.'; @@ -197,9 +202,9 @@ $messages['errfailedrequest'] = 'Błędne żądanie'; $messages['errauthorizationfailed'] = 'Błąd autoryzacji'; $messages['errunauthorizedexplain'] = 'Nie można zweryfikować czy jesteś upoważniony do dostępu dla tej usługi!'; $messages['errrequestcheckfailed'] = 'Sprawdzanie żądania nie powiodło się'; -$messages['errcsrfprotectionexplain'] = "Dla twojego bezpieczeństwa, dostęp do tego zasobu jest dodatkowo zabezpieczony przez CSRF.\nJeśli widzisz ten komunikat, prawdopodobnie nie wylogowałeś się zamykając przeglądarkę. \n\n Wymagane są działania człowieka aby kontynuować."; +$messages['errcsrfprotectionexplain'] = "Dla twojego bezpieczeństwa, dostęp do tego zasobu jest zabezpieczony przeciw atakom typu CSRF.\nJeśli widzisz ten komunikat, prawdopodobnie nie wylogowałeś się przed opuszczeniem aplikacji.\n\nTwoje działanie jest wymagane aby kontynuować."; $messages['errcontactserveradmin'] = 'Skontaktuj się z administratorem serwera.'; -$messages['clicktoresumesession'] = 'Naciśnij tutaj aby przywrócić poprzednią sesję'; +$messages['clicktoresumesession'] = 'Kliknij tutaj aby przywrócić poprzednią sesję'; $messages['errcomposesession'] = 'Błąd sesji tworzenia'; $messages['errcomposesessionexplain'] = 'Wywoływana sesja nie została odnaleziona'; $messages['clicktocompose'] = 'Kliknij tutaj aby stworzyć nową wiadomość'; diff --git a/program/localization/pt_BR/csv2vcard.inc b/program/localization/pt_BR/csv2vcard.inc index 236c9dba1f6..b4893c5bf38 100644 --- a/program/localization/pt_BR/csv2vcard.inc +++ b/program/localization/pt_BR/csv2vcard.inc @@ -15,14 +15,7 @@ | Author: Aleksander Machniak | +-----------------------------------------------------------------------+ */ - -// This is a list of CSV column names specified in CSV file header -// These must be original texts used in Outlook/Thunderbird exported csv files -// Encoding UTF-8 - $map = array(); - -// MS Outlook 2010 $map['anniversary'] = "Aniversário"; $map['assistants_name'] = "Nome do Assistente"; $map['assistants_phone'] = "Fone do Assistente"; @@ -71,8 +64,6 @@ $map['spouse'] = "Spouse"; $map['suffix'] = "Sufixo"; $map['title'] = "Título"; $map['web_page'] = "Página Web"; - -// Thunderbird $map['birth_day'] = "Dia de nascimento"; $map['birth_month'] = "Mês de nascimento"; $map['birth_year'] = "Ano de nascimento"; @@ -93,8 +84,6 @@ $map['work_phone'] = "Fone de trabalho"; $map['work_address'] = "Endereço de trabalho"; $map['work_country'] = "País de trabalho"; $map['work_zipcode'] = "CEP de trabalho"; - -// Atmail $map['date_of_birth'] = "Data de nascimento"; $map['email'] = "E-mail"; $map['home_mobile'] = "Celular pessoal"; diff --git a/program/localization/pt_BR/labels.inc b/program/localization/pt_BR/labels.inc index 459f6c170e1..a9b430ade28 100644 --- a/program/localization/pt_BR/labels.inc +++ b/program/localization/pt_BR/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Como não lidas'; $labels['markflagged'] = 'Como sinalizada(s)'; $labels['markunflagged'] = 'Como não sinalizada(s)'; $labels['moreactions'] = 'Mais ações...'; +$labels['markallread'] = 'Marcar tudo como lido'; +$labels['folders-cur'] = 'Somente a pasta selecionada'; +$labels['folders-sub'] = 'Selecionada pasta e subpastas'; +$labels['folders-all'] = 'Todas pastas'; $labels['more'] = 'Mais'; $labels['back'] = 'Voltar'; $labels['options'] = 'Opções'; @@ -253,6 +257,7 @@ $labels['uploadprogress'] = '$percent ($current de $total)'; $labels['close'] = 'Fechar'; $labels['messageoptions'] = 'Opções da mensagem...'; $labels['togglecomposeoptions'] = 'Exibir opções de composição da mensagem'; +$labels['attachmentrename'] = 'Renomear anexo'; $labels['low'] = 'Baixa'; $labels['lowest'] = 'Mais baixa'; $labels['normal'] = 'Normal'; diff --git a/program/localization/pt_BR/messages.inc b/program/localization/pt_BR/messages.inc index 2d0f158073d..76910c1c697 100644 --- a/program/localization/pt_BR/messages.inc +++ b/program/localization/pt_BR/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Por favor, informe o nome'; $messages['nopagesizewarning'] = 'Por favor, informe o tamanho da página'; $messages['nosenderwarning'] = 'Por favor, informe o e-mail do remetente'; $messages['norecipientwarning'] = 'Por favor, informe pelo menos um destinatário'; +$messages['disclosedrecipwarning'] = 'Todos os destinatários verão os endereços de e-mail uns dos outros. Para prevenir isto e proteger a privacidade deles, você deve usar o campo Cópia Oculta (Cco).'; +$messages['disclosedreciptitle'] = 'Há muitos destinatários públicos'; $messages['nosubjectwarning'] = 'O campo "Assunto" está vazio. Deseja incluí-lo agora?'; +$messages['nosubjecttitle'] = 'Sem assunto'; $messages['nobodywarning'] = 'Enviar a mensagem sem texto?'; $messages['notsentwarning'] = 'A mensagem não foi enviada. Deseja descartar sua mensagem?'; $messages['restoresavedcomposedata'] = 'Uma mensagem criada anteriormente, mas não enviada, foi localizada.\n\nTítulo: $subject\nSalva em: $date\n\nDeseja restaurar esta mensagem?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Não foi possível carregar a mensagem do servi $messages['filelinkerror'] = 'Falha ao anexar o arquivo.'; $messages['fileuploaderror'] = 'Falha ao enviar o arquivo'; $messages['filesizeerror'] = 'O arquivo enviado excede o tamanho máximo de $size'; +$messages['filecounterror'] = 'Você pode enviar no máximo $count arquivos por vez.'; +$messages['msgsizeerror'] = 'Falha ao anexar o arquivo. Tamanho máximo da mensagem ($size) excedido.'; $messages['copysuccess'] = '$nr contato(s) copiado(s) com sucesso.'; $messages['movesuccess'] = '$nr contato(s) movido(s) com sucesso.'; $messages['copyerror'] = 'Não foi possível copiar os contatos.'; diff --git a/program/localization/pt_PT/labels.inc b/program/localization/pt_PT/labels.inc index 27a0163ef20..0c88f72c075 100644 --- a/program/localization/pt_PT/labels.inc +++ b/program/localization/pt_PT/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Como não lida(s)'; $labels['markflagged'] = 'Com sinalização'; $labels['markunflagged'] = 'Como sem sinalização'; $labels['moreactions'] = 'Mais ações...'; +$labels['markallread'] = 'Marcar todas como Lidas'; +$labels['folders-cur'] = 'Apenas pasta seleccionada'; +$labels['folders-sub'] = 'Pasta seleccionada e respectivas subpastas'; +$labels['folders-all'] = 'Todas as pastas'; $labels['more'] = 'Mais'; $labels['back'] = 'Voltar'; $labels['options'] = 'Opções'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Lista de colunas'; $labels['listsorting'] = 'Ordenar por'; $labels['listorder'] = 'Ordenação'; $labels['listmode'] = 'Modo de visualização'; +$labels['layout'] = 'Modelo'; +$labels['layoutwidescreen'] = 'Panorâmico'; +$labels['layoutdesktop'] = 'Área de Trabalho'; +$labels['layoutlist'] = 'Lista'; $labels['folderactions'] = 'Ações para pastas...'; $labels['compact'] = 'Compactar'; $labels['empty'] = 'Esvaziar'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'ID da chave'; $labels['keylength'] = 'Bits'; $labels['keyexpired'] = 'Expirada'; $labels['keyrevoked'] = 'Revogada'; +$labels['bccinstead'] = 'Usar Bcc'; $labels['editidents'] = 'Editar entidades'; $labels['spellcheck'] = 'Corretor ortográfico'; $labels['checkspelling'] = 'Verificar ortografia'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current de $total)'; $labels['close'] = 'Fechar'; $labels['messageoptions'] = 'Opções de mensagens...'; $labels['togglecomposeoptions'] = 'Alternar opções de composição'; +$labels['attachmentrename'] = 'Renomear anexo'; $labels['low'] = 'Baixa'; $labels['lowest'] = 'Muito baixa'; $labels['normal'] = 'Normal'; @@ -314,6 +324,7 @@ $labels['advsearch'] = 'Pesquisa avançada'; $labels['advanced'] = 'Pesquisa avançada'; $labels['other'] = 'Outro'; $labels['printcontact'] = 'Imprimir contacto'; +$labels['qrcode'] = 'Código QR'; $labels['typehome'] = 'Residência'; $labels['typework'] = 'Empresa'; $labels['typeother'] = 'Outro'; diff --git a/program/localization/pt_PT/messages.inc b/program/localization/pt_PT/messages.inc index 16285551426..119eee33331 100644 --- a/program/localization/pt_PT/messages.inc +++ b/program/localization/pt_PT/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Por favor, escreva um nome.'; $messages['nopagesizewarning'] = 'Por favor, escreva o tamanho da página'; $messages['nosenderwarning'] = 'Por favor, introduza o endereço de e-mail do remetente'; $messages['norecipientwarning'] = 'Por favor, insira pelo menos um destinatário'; +$messages['disclosedrecipwarning'] = 'Todos os destinatários verão os endereços de email uns dos outros. Para evitar esta situação e proteger a sua privacidade, pode usar o campo Bcc.'; +$messages['disclosedreciptitle'] = 'Demasiados destinatários públicos'; $messages['nosubjectwarning'] = 'O campo "Assunto" não foi preenchido. Deseja incluí-lo agora?'; +$messages['nosubjecttitle'] = 'Sem assunto'; $messages['nobodywarning'] = 'Enviar a mensagem sem texto?'; $messages['notsentwarning'] = 'A mensagem não foi enviada, deseja apagá-la?'; $messages['restoresavedcomposedata'] = 'Foi encontrada uma mensagem anteriormente composta mas não enviada.\n\nAssunto: $subject\nGuardada: $date\n\nDeseja restaurar esta mensagem?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Não foi possível carregar a mensagem.'; $messages['filelinkerror'] = 'Falha ao anexar o ficheiro.'; $messages['fileuploaderror'] = 'Falha ao carregar o ficheiro'; $messages['filesizeerror'] = 'O ficheiro excede o tamanho máximo permitido de $size'; +$messages['filecounterror'] = 'Pode carregar, no máximo, $count ficheiro(s) de cada vez.'; +$messages['msgsizeerror'] = 'Falha ao anexar um ficheiro. O tamanho máximo da mensagem ($size) foi excedido.'; $messages['copysuccess'] = '$nr contacto(s) copiado(s) com sucesso.'; $messages['movesuccess'] = '$nr contacto(s) movido(s) com sucesso.'; $messages['copyerror'] = 'Não foi possível copiar o(s) contacto(s).'; diff --git a/program/localization/ru_RU/labels.inc b/program/localization/ru_RU/labels.inc index c693e6e3e3e..6148dce6f43 100644 --- a/program/localization/ru_RU/labels.inc +++ b/program/localization/ru_RU/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Как непрочитанное'; $labels['markflagged'] = 'Установить флаг'; $labels['markunflagged'] = 'Снять флаг'; $labels['moreactions'] = 'Дополнительные действия...'; +$labels['markallread'] = 'Отметить все как прочтённые'; +$labels['folders-cur'] = 'Только выбранная папка'; +$labels['folders-sub'] = 'Выбранная папка и её подпапки'; +$labels['folders-all'] = 'Все папки'; $labels['more'] = 'Еще'; $labels['back'] = 'Назад'; $labels['options'] = 'Параметры'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Колонки'; $labels['listsorting'] = 'Сортировать по'; $labels['listorder'] = 'Порядок сортировки'; $labels['listmode'] = 'Режим просмотра'; +$labels['layout'] = 'Размещение'; +$labels['layoutwidescreen'] = 'Широкоэкранное'; +$labels['layoutdesktop'] = 'Рабочий стол'; +$labels['layoutlist'] = 'Список'; $labels['folderactions'] = 'Операции над папкой...'; $labels['compact'] = 'Сжать'; $labels['empty'] = 'Опустошить'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'ID ключа'; $labels['keylength'] = 'Бит'; $labels['keyexpired'] = 'С истёкщим сроком'; $labels['keyrevoked'] = 'Отозван'; +$labels['bccinstead'] = 'Использовать BCC'; $labels['editidents'] = 'Изменить данные'; $labels['spellcheck'] = 'Орфография'; $labels['checkspelling'] = 'Проверить орфографию'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current из $total)'; $labels['close'] = 'Закрыть'; $labels['messageoptions'] = 'Настройки сообщений...'; $labels['togglecomposeoptions'] = 'Параметры создания'; +$labels['attachmentrename'] = 'Переименовать вложения'; $labels['low'] = 'Низкий'; $labels['lowest'] = 'Низший'; $labels['normal'] = 'Норм.'; diff --git a/program/localization/ru_RU/messages.inc b/program/localization/ru_RU/messages.inc index ff997269dd5..372ed304d76 100644 --- a/program/localization/ru_RU/messages.inc +++ b/program/localization/ru_RU/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Пожалуйста, введите имя.'; $messages['nopagesizewarning'] = 'Пожалуйста, введите размер страницы.'; $messages['nosenderwarning'] = 'Пожалуйста, введите адрес электронной почты отправителя.'; $messages['norecipientwarning'] = 'Пожалуйста, введите хотя бы одного получателя.'; +$messages['disclosedrecipwarning'] = 'Все получатели будут видеть адреса друг друга. Чтобы избежать этого и защитить свою частную жизнь, вы можете использовать поле BCC.'; +$messages['disclosedreciptitle'] = 'Слишком много внешних получателей'; $messages['nosubjectwarning'] = 'Поле Тема не заполнено. Хотите заполнить его сейчас?'; +$messages['nosubjecttitle'] = 'Без темы'; $messages['nobodywarning'] = 'Отправить сообщение без текста?'; $messages['notsentwarning'] = 'Сообщение не было отправлено. Вы хотите отказаться от отправки?'; $messages['restoresavedcomposedata'] = 'Найдено ранее составленное, но неотправленное сообщение.\n\nТема: $subject\nСохранено: $date\n\nХотите восстановить это сообщение?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Невозможно загрузить соо $messages['filelinkerror'] = 'Сбой добавления вложения.'; $messages['fileuploaderror'] = 'Ошибка загрузки файла.'; $messages['filesizeerror'] = 'Загруженный файл больше максимального размера в $size.'; +$messages['filecounterror'] = 'Вы можете загрузить максимум $count файлов одновременно.'; +$messages['msgsizeerror'] = 'Не удалось прикрепить файл. Превышен максимальный размер сообщения: ($size).'; $messages['copysuccess'] = 'Успешно скопировано $nr контактов.'; $messages['movesuccess'] = 'Успешно перемещено $nr контактов.'; $messages['copyerror'] = 'Контакты не скопированы.'; diff --git a/program/localization/sk_SK/labels.inc b/program/localization/sk_SK/labels.inc index 4bb9d4531ed..0b552462003 100644 --- a/program/localization/sk_SK/labels.inc +++ b/program/localization/sk_SK/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Ako neprečítané'; $labels['markflagged'] = 'Ako označené značkou'; $labels['markunflagged'] = 'Ako neoznačené značkou'; $labels['moreactions'] = 'Viac akcií...'; +$labels['markallread'] = 'Označiť všetko ako prečítané'; +$labels['folders-cur'] = 'Vybraný len priečinok'; +$labels['folders-sub'] = 'Vybraný priečinok a jeho podpriečinky'; +$labels['folders-all'] = 'Všetky priečinky'; $labels['more'] = 'Viac'; $labels['back'] = 'Dozadu'; $labels['options'] = 'Možnosti'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Stĺpce'; $labels['listsorting'] = 'Zoraďovanie'; $labels['listorder'] = 'Systém zoraďovania'; $labels['listmode'] = 'Režim zobrazenia zoznamu'; +$labels['layout'] = 'Rozloženie'; +$labels['layoutwidescreen'] = 'Na šírku obrazovky'; +$labels['layoutdesktop'] = 'Desktop'; +$labels['layoutlist'] = 'Zoznam'; $labels['folderactions'] = 'Akcie pre priečinky...'; $labels['compact'] = 'Zhustiť'; $labels['empty'] = 'Vyprázdniť'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'ID kľúča'; $labels['keylength'] = 'Bity'; $labels['keyexpired'] = 'Expirované'; $labels['keyrevoked'] = 'Odvolané'; +$labels['bccinstead'] = 'Použiť skrytú kópiu'; $labels['editidents'] = 'Upraviť identitu odosielateľa'; $labels['spellcheck'] = 'Pravopis'; $labels['checkspelling'] = 'Skontrolovať pravopis'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current z $total)'; $labels['close'] = 'Zatvoriť'; $labels['messageoptions'] = 'Nastavenia správy...'; $labels['togglecomposeoptions'] = 'Prepnúť možnosti kompozície'; +$labels['attachmentrename'] = 'Premenovať prílohu'; $labels['low'] = 'Nízka'; $labels['lowest'] = 'Najnižšia'; $labels['normal'] = 'Normálna'; diff --git a/program/localization/sk_SK/messages.inc b/program/localization/sk_SK/messages.inc index d578c0e1bf3..210d7f64374 100644 --- a/program/localization/sk_SK/messages.inc +++ b/program/localization/sk_SK/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Prosím zadajte meno.'; $messages['nopagesizewarning'] = 'Prosím zadajte počet záznamov na stranu.'; $messages['nosenderwarning'] = 'Prosím zadajte e-mailovú adresu odosielateľa.'; $messages['norecipientwarning'] = 'Prosím zadajte aspoň jedného príjemcu.'; +$messages['disclosedrecipwarning'] = 'Všetci používatelia navzájom uvidia svoje e-mailové adresy. Ak si to neželáte a chcete chrániť ich súkromie, použite pole Skrytá kópia.'; +$messages['disclosedreciptitle'] = 'Priveľa verejných príjemcov'; $messages['nosubjectwarning'] = '"Predmet" správy je prázdny. Chcete ho teraz zadať?'; +$messages['nosubjecttitle'] = 'Bez predmetu'; $messages['nobodywarning'] = 'Chcete odoslať správu bez textu?'; $messages['notsentwarning'] = 'Správa nebola odoslaná, chcete ju zrušiť?'; $messages['restoresavedcomposedata'] = 'Našla sa staršia správa, ktorú ste napísali ale neodoslali.\n\nPredmet: $subject\nUložené: $date\n\nChcete túto správu obnoviť?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Správu nemožno načítať zo servera.'; $messages['filelinkerror'] = 'Nepodarilo sa priložiť súbor.'; $messages['fileuploaderror'] = 'Nahrávanie súboru bolo neúspešné.'; $messages['filesizeerror'] = 'Nahraný súbor prekročil maximálnu veľkosť $size.'; +$messages['filecounterror'] = 'Naraz je možné vykonať upload max. $count súborov.'; +$messages['msgsizeerror'] = 'Nepodarilo sa pripojiť súbor. Bola prekročená max. veľkosť správy ($size).'; $messages['copysuccess'] = 'Počet úspešne skopírovaných kontaktov: $nr.'; $messages['movesuccess'] = 'Počet úspešne presunutých kontaktov: $nr.'; $messages['copyerror'] = 'Kontakty nemožno kopírovať.'; diff --git a/program/localization/sl_SI/labels.inc b/program/localization/sl_SI/labels.inc index e2304ff2ffe..f1517322221 100644 --- a/program/localization/sl_SI/labels.inc +++ b/program/localization/sl_SI/labels.inc @@ -28,12 +28,12 @@ $labels['inbox'] = 'Prejeto'; $labels['drafts'] = 'Osnutki'; $labels['sent'] = 'Poslano'; $labels['trash'] = 'Smeti'; -$labels['junk'] = 'Nezaželena sporočila'; +$labels['junk'] = 'Neželena sporočila'; $labels['show_real_foldernames'] = 'Prikaži prava imena za posebne mape'; $labels['subject'] = 'Zadeva'; -$labels['from'] = 'Pošiljatelj'; +$labels['from'] = 'Od'; $labels['sender'] = 'Pošiljatelj'; -$labels['to'] = 'Prejemnik'; +$labels['to'] = 'Za'; $labels['cc'] = 'Kp'; $labels['bcc'] = 'Skp'; $labels['replyto'] = 'Odgovor na'; @@ -77,7 +77,7 @@ $labels['saturday'] = 'sobota'; $labels['jan'] = 'jan'; $labels['feb'] = 'feb'; $labels['mar'] = 'mar'; -$labels['apr'] = 'Apr'; +$labels['apr'] = 'apr'; $labels['may'] = 'maj'; $labels['jun'] = 'jun'; $labels['jul'] = 'jul'; @@ -89,7 +89,7 @@ $labels['dec'] = 'dec'; $labels['longjan'] = 'januar'; $labels['longfeb'] = 'februar'; $labels['longmar'] = 'marec'; -$labels['longapr'] = 'April'; +$labels['longapr'] = 'april'; $labels['longmay'] = 'maj'; $labels['longjun'] = 'junij'; $labels['longjul'] = 'julij'; @@ -100,7 +100,7 @@ $labels['longnov'] = 'november'; $labels['longdec'] = 'december'; $labels['today'] = 'Danes'; $labels['refresh'] = 'Osveži'; -$labels['checkmail'] = 'Preglej nova sporočila'; +$labels['checkmail'] = 'Poglej za nova sporočila'; $labels['compose'] = 'Sestavi sporočilo'; $labels['writenewmessage'] = 'Novo sporočilo'; $labels['reply'] = 'Odgovori'; @@ -109,7 +109,7 @@ $labels['replytoallmessage'] = 'Odgovori listi ali vsem prejemnikom'; $labels['replyall'] = 'Odgovori vsem'; $labels['replylist'] = 'Odgovori listi'; $labels['forward'] = 'Posreduj'; -$labels['forwardinline'] = 'Posreduj medvrstično'; +$labels['forwardinline'] = 'Posreduj kot besedilo'; $labels['forwardattachment'] = 'Posreduj kot priponko'; $labels['forwardmessage'] = 'Posreduj'; $labels['deletemessage'] = 'Izbriši'; @@ -120,7 +120,7 @@ $labels['firstmessage'] = 'Prikaži prvo sporočilo'; $labels['nextmessage'] = 'Prikaži naslednje sporočilo'; $labels['lastmessage'] = 'Prikaži zadnje sporočilo'; $labels['backtolist'] = 'Nazaj na seznam sporočil'; -$labels['viewsource'] = 'Prikaži izvirno kodo'; +$labels['viewsource'] = 'Prikaži izvorno kodo'; $labels['mark'] = 'Označi'; $labels['markmessages'] = 'Označi sporočilo'; $labels['markread'] = 'Kot prebrano'; @@ -128,19 +128,31 @@ $labels['markunread'] = 'Kot neprebrano'; $labels['markflagged'] = 'Kot označeno'; $labels['markunflagged'] = 'Kot neoznačeno'; $labels['moreactions'] = 'Več možnosti...'; +$labels['markallread'] = 'Označi vse kot prebrano'; +$labels['folders-cur'] = 'Samo označeno mapo'; +$labels['folders-sub'] = 'Označeno mapo in njene podmape'; +$labels['folders-all'] = 'Vse mape'; $labels['more'] = 'Več'; $labels['back'] = 'Nazaj'; $labels['options'] = 'Možnosti'; +$labels['first'] = 'Prvo'; +$labels['last'] = 'Zadnje'; +$labels['previous'] = 'Prejšnje'; +$labels['next'] = 'Naslednje'; $labels['select'] = 'Izberi'; $labels['all'] = 'Vse'; $labels['none'] = 'Brez'; $labels['currpage'] = 'Trenutna stran'; +$labels['isread'] = 'Prebrano'; $labels['unread'] = 'Neprebrano'; $labels['flagged'] = 'Označeno'; +$labels['unflagged'] = 'Ni označeno'; $labels['unanswered'] = 'Neoznačeno'; $labels['withattachment'] = 'S priponko'; $labels['deleted'] = 'Izbrisano'; $labels['undeleted'] = 'Ni izbrisano'; +$labels['replied'] = 'Odgovorjeno'; +$labels['forwarded'] = 'Posredovano'; $labels['invert'] = 'Zamenjaj'; $labels['filter'] = 'Prikaži'; $labels['list'] = 'Seznam'; @@ -152,7 +164,7 @@ $labels['threaded'] = 'Nitno'; $labels['autoexpand_threads'] = 'Razširi niti'; $labels['do_expand'] = 'vse niti'; $labels['expand_only_unread'] = 'samo niti z neprebranimi sporočili'; -$labels['fromto'] = 'Pošiljatelj/Prejemnik'; +$labels['fromto'] = 'Od/Za'; $labels['flag'] = 'Oznaka'; $labels['attachment'] = 'Priponka'; $labels['nonesort'] = 'Brez'; @@ -164,6 +176,10 @@ $labels['listcolumns'] = 'Seznam stolpcev'; $labels['listsorting'] = 'Urejanje stolpcev'; $labels['listorder'] = 'Vrstni red'; $labels['listmode'] = 'Način prikaza seznama'; +$labels['layout'] = 'Postavitev'; +$labels['layoutwidescreen'] = 'Širok zaslon'; +$labels['layoutdesktop'] = 'Namizje'; +$labels['layoutlist'] = 'Seznam'; $labels['folderactions'] = 'Upravljanje map...'; $labels['compact'] = 'Stisni'; $labels['empty'] = 'Izprazni'; @@ -171,6 +187,11 @@ $labels['importmessages'] = 'Uvozi sporočila'; $labels['quota'] = 'Poraba prostora'; $labels['unknown'] = 'neznana'; $labels['unlimited'] = 'neomejena'; +$labels['quotatype'] = 'Tip kvote'; +$labels['quotatotal'] = 'Omejitev'; +$labels['quotaused'] = 'Porabljeno'; +$labels['quotastorage'] = 'Prostor na disku'; +$labels['quotamessage'] = 'Število sporočil'; $labels['quicksearch'] = 'Hitri iskalnik'; $labels['resetsearch'] = 'Prekliči iskanje'; $labels['searchmod'] = 'Spremembe iskanja'; @@ -178,6 +199,16 @@ $labels['msgtext'] = 'Celotno sporočilo'; $labels['body'] = 'Vsebina sporočila'; $labels['type'] = 'Tip'; $labels['namex'] = 'Ime'; +$labels['searchscope'] = 'Obseg'; +$labels['currentfolder'] = 'Trenutna mapa'; +$labels['subfolders'] = 'To in podmape'; +$labels['allfolders'] = 'Vse mape'; +$labels['searchinterval-1W'] = 'starejše od enega tedna'; +$labels['searchinterval-1M'] = 'starejše od enega meseca'; +$labels['searchinterval-1Y'] = 'starejše od enega leta'; +$labels['searchinterval1W'] = 'novejše od enega tedna'; +$labels['searchinterval1M'] = 'novejše od enega meseca'; +$labels['searchinterval1Y'] = 'novejše od enega leta'; $labels['openinextwin'] = 'Odpri v novem oknu'; $labels['emlsave'] = 'Prenos datoteke (.eml)'; $labels['changeformattext'] = 'Prikaži kot golo besedilo'; @@ -193,6 +224,20 @@ $labels['returnreceipt'] = 'Potrdilo prejemnika'; $labels['dsn'] = 'Status dostave sporočila'; $labels['mailreplyintro'] = '$date, je $sender napisal'; $labels['originalmessage'] = 'Izvorno sporočilo'; +$labels['selectimage'] = 'Izberi sliko'; +$labels['addimage'] = 'Dodaj sliko'; +$labels['selectmedia'] = 'Izberi film'; +$labels['addmedia'] = 'Dodaj film'; +$labels['encrypt'] = 'Šifriraj'; +$labels['encryptmessage'] = 'Šifriraj sporočilo'; +$labels['encryptmessagemailvelope'] = 'Šifriraj sporočilo z Mailvelope'; +$labels['importpubkeys'] = 'Uvozi javne ključe'; +$labels['encryptedsendialog'] = 'Pošilji šifrirano sporočilo'; +$labels['keyid'] = 'ID ključa'; +$labels['keylength'] = 'Bitov'; +$labels['keyexpired'] = 'Pretečen'; +$labels['keyrevoked'] = 'Preklican'; +$labels['bccinstead'] = 'Uporabi Skp'; $labels['editidents'] = 'Uredi identitete'; $labels['spellcheck'] = 'Črkovanje'; $labels['checkspelling'] = 'Preglej pravopis'; @@ -200,9 +245,12 @@ $labels['resumeediting'] = 'Nadaljuj z urejanjem'; $labels['revertto'] = 'Razveljavi'; $labels['restore'] = 'Obnovi'; $labels['restoremessage'] = 'Obnovi sporočilo'; +$labels['ignore'] = 'Prezri'; $labels['responses'] = 'Odgovori'; $labels['insertresponse'] = 'Vnesi odgovor'; $labels['manageresponses'] = 'Uredi odgovore'; +$labels['newresponse'] = 'Ustvari nov odgovor'; +$labels['addresponse'] = 'Dodaj odgovor'; $labels['editresponse'] = 'Uredi odgovor'; $labels['editresponses'] = 'Uredi odgovore'; $labels['responsename'] = 'Ime'; @@ -210,8 +258,11 @@ $labels['responsetext'] = 'Tekst za odgovor'; $labels['attach'] = 'Pripni'; $labels['attachments'] = 'Priponke'; $labels['upload'] = 'Naloži'; +$labels['uploadprogress'] = '$percent ($current od $total)'; $labels['close'] = 'Zapri'; $labels['messageoptions'] = 'Možnosti'; +$labels['togglecomposeoptions'] = 'Preklopi med možnostmi sestavljanja'; +$labels['attachmentrename'] = 'Preimenuj priponko'; $labels['low'] = 'Nizka'; $labels['lowest'] = 'Najnižja'; $labels['normal'] = 'Običajna'; @@ -268,9 +319,12 @@ $labels['assistant'] = 'Pomoč'; $labels['spouse'] = 'Zakonec'; $labels['allfields'] = 'Vsa polja'; $labels['search'] = 'Iskanje'; +$labels['searchresult'] = 'Rezultat iskanja'; $labels['advsearch'] = 'Napredno iskanje'; $labels['advanced'] = 'Napredno'; $labels['other'] = 'Ostalo'; +$labels['printcontact'] = 'Natisni stik'; +$labels['qrcode'] = 'QR-koda'; $labels['typehome'] = 'Doma'; $labels['typework'] = 'Služba'; $labels['typeother'] = 'Ostalo'; @@ -286,10 +340,13 @@ $labels['typehomepage'] = 'Domača stran'; $labels['typeblog'] = 'Blog'; $labels['typeprofile'] = 'Profil'; $labels['addfield'] = 'Dodaj polje...'; +$labels['addcontact'] = 'Dodaj stik'; $labels['editcontact'] = 'Uredi vizitko'; $labels['contacts'] = 'Stiki'; $labels['contactproperties'] = 'Lastnosti stika'; +$labels['contactnameandorg'] = 'Ime in Organizacija'; $labels['personalinfo'] = 'Osebni podatki'; +$labels['contactphoto'] = 'Kontaktna slika'; $labels['edit'] = 'Uredi'; $labels['cancel'] = 'Prekliči'; $labels['save'] = 'Shrani'; @@ -298,6 +355,7 @@ $labels['rename'] = 'Preimenuj'; $labels['addphoto'] = 'Dodaj'; $labels['replacephoto'] = 'Zamenjaj'; $labels['uploadphoto'] = 'Naloži sliko'; +$labels['newcontact'] = 'Ustvari nov stik'; $labels['deletecontact'] = 'Izbriši izbrane vizitke'; $labels['composeto'] = 'Sestavi sporočilo za'; $labels['contactsfromto'] = 'Vizitke $from od $to do $count'; @@ -306,9 +364,12 @@ $labels['export'] = 'Izvozi'; $labels['exportall'] = 'Izvozi vse'; $labels['exportsel'] = 'Izvozi označeno'; $labels['exportvcards'] = 'Izvozi stike v formatu vCard'; +$labels['newgroup'] = 'Ustvari novo skupino'; +$labels['addgroup'] = 'Dodaj skupino'; $labels['grouprename'] = 'Preimenuj skupino'; $labels['groupdelete'] = 'Izbriši skupino'; $labels['groupremoveselected'] = 'Odstrani izbrane stike iz skupine'; +$labels['uponelevel'] = 'Nivo višje'; $labels['previouspage'] = 'Prejšnja stran'; $labels['firstpage'] = 'Prva stran'; $labels['nextpage'] = 'Naslednja stran'; @@ -335,6 +396,10 @@ $labels['preferences'] = 'Nastavitve'; $labels['userpreferences'] = 'Uporabniške nastavitve'; $labels['editpreferences'] = 'Uredi uporabniške nastavitve'; $labels['identities'] = 'Identitete'; +$labels['manageidentities'] = 'Upravljaj identitete'; +$labels['newidentity'] = 'Ustvari novo identiteto'; +$labels['addidentity'] = 'Dodaj identiteto'; +$labels['editidentity'] = 'Uredi identiteto'; $labels['preferhtml'] = 'Prednostno HTML'; $labels['defaultcharset'] = 'Privzeto kodiranje znakov'; $labels['htmlmessage'] = 'HTML sporočilo'; @@ -369,14 +434,16 @@ $labels['askuser'] = 'vprašaj uporabnika'; $labels['autosend'] = 'pošlji povratnico samodejno'; $labels['autosendknown'] = 'samodejno pošlji povratnico samo mojim stikom'; $labels['autosendknownignore'] = 'pošlji potrdilo le mojim stikom'; +$labels['ignorerequest'] = 'prezri zahtevo'; $labels['readwhendeleted'] = 'Označi izbrisano sporočilo kot prebrano'; $labels['flagfordeletion'] = 'Ne izbriši sporočila, le označi kot izbrisano'; $labels['skipdeleted'] = 'Ne prikaži izbrisanih sporočil'; $labels['deletealways'] = 'Če premikanje sporočil v Smeti spodleti, naj bodo izbrisana.'; $labels['deletejunk'] = 'Neposredno izbriši sporočila v mapi Nezaželena sporočila'; -$labels['showremoteimages'] = 'Prikaži medvrstične slike'; +$labels['showremoteimages'] = 'Prikaži slike iz oddaljenih strežnikov'; $labels['fromknownsenders'] = 'od znanih pošiljateljev'; $labels['always'] = 'vedno'; +$labels['alwaysbutplain'] = 'vedno, razen ko odgovarjam v golem besedilu'; $labels['showinlineimages'] = 'Prikaži priponke na dnu sporočila'; $labels['autosavedraft'] = 'Samodejno shrani osnutke'; $labels['everynminutes'] = '$n minut'; @@ -390,7 +457,9 @@ $labels['2231folding'] = 'Full RFC 2231 (Thunderbird)'; $labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)'; $labels['2047folding'] = 'Full RFC 2047 (ostali)'; $labels['force7bit'] = 'Uporabi MIME kodiranje za 8-bitne znake'; +$labels['savelocalstorage'] = "Shrani v lokalni pomnilnik brskalnika (začasno)"; $labels['advancedoptions'] = 'Dodatne možnosti'; +$labels['toggleadvancedoptions'] = 'Preklopi napredne nastavitve'; $labels['focusonnewmessage'] = 'Usmeri okno brskalnika na novo sporočilo'; $labels['checkallfolders'] = 'Preglej nova sporočila za vse mape'; $labels['displaynext'] = 'Po izbrisu/premikanju sporočila prikaži naslednje sporočilo'; @@ -410,6 +479,8 @@ $labels['autoaddsignature'] = 'Samodejno dodaj podpis'; $labels['newmessageonly'] = 'samo novim sporočilom'; $labels['replyandforwardonly'] = 'samo k odgovorom in posredovanim sporočilom'; $labels['insertsignature'] = 'Vstavi podpis'; +$labels['sigbelow'] = 'Prikaži podpis pod citirano sporočilo'; +$labels['sigseparator'] = 'V podpisu uporabi standardni razmejevalnik'; $labels['previewpanemarkread'] = 'Označi predogledana sporočila kot prebrana'; $labels['afternseconds'] = 'po $n sekundah'; $labels['reqmdn'] = 'Vedno zahtevaj povratnico'; @@ -431,7 +502,7 @@ $labels['inline'] = 'medvrstično'; $labels['asattachment'] = 'Kot priponka'; $labels['replyallmode'] = 'Privzete možnosti gumba [Odgovori vsem]'; $labels['replyalldefault'] = 'odgovori vsem'; -$labels['replyalllist'] = 'odgovori na dopisni seznam (v kolikor ta obstaja)'; +$labels['replyalllist'] = 'odgovori na dopisni seznam (če ta obstaja)'; $labels['folder'] = 'Mapa'; $labels['folders'] = 'Mape'; $labels['foldername'] = 'Ime mape'; @@ -452,6 +523,10 @@ $labels['foldertype'] = 'Tip mape'; $labels['personalfolder'] = 'Zasebna mapa'; $labels['otherfolder'] = 'Mapa drugega uporabnika'; $labels['sharedfolder'] = 'Javna mapa'; +$labels['findfolders'] = 'Najdi mape'; +$labels['namespace.personal'] = 'Osebno'; +$labels['namespace.other'] = 'Drugi uporabniki'; +$labels['namespace.shared'] = 'V skupni rabi'; $labels['sortby'] = 'Uredi po'; $labels['sortasc'] = 'Uredi naraščajoče'; $labels['sortdesc'] = 'Uredi padajoče'; @@ -484,4 +559,35 @@ $labels['vietnamese'] = 'Vietnamsko'; $labels['japanese'] = 'Japonsko'; $labels['korean'] = 'Korejsko'; $labels['chinese'] = 'Kitajsko'; +$labels['arialabeltopnav'] = 'Upravljanje oken'; +$labels['arialabeltasknav'] = 'Opravila programa'; +$labels['arialabeltoolbar'] = 'Opravilna vrstica programa'; +$labels['arialabelactivetask'] = 'Aktivna opravila'; +$labels['arialabelmessagessearchfilter'] = 'Filter seznama sporočil'; +$labels['arialabelmailsearchform'] = 'Iskalnik sporočil'; +$labels['arialabelcontactsearchform'] = 'Iskalnik stikov'; +$labels['arialabelmailquicksearchbox'] = 'Vnos iskanja sporočil'; +$labels['arialabelquicksearchbox'] = 'Vnos iskanja'; +$labels['arialabelfoldersearchfilter'] = 'Filter seznama map'; +$labels['arialabelfoldersearchform'] = 'Iskalnik map'; +$labels['arialabelfolderlist'] = 'Izbor map sporočil'; +$labels['arialabelmessagelist'] = 'Seznam sporočil'; +$labels['arialabelmailpreviewframe'] = 'Predogled sporočila'; +$labels['arialabelmailboxmenu'] = 'Meni operacij mape'; +$labels['arialabellistselectmenu'] = 'Prikaži meni za izbiro'; +$labels['arialabelmessagenav'] = 'Krmarjenje po sporočilu'; +$labels['arialabelmessagebody'] = 'Vsebina sporočila'; +$labels['arialabelmessageactions'] = 'Operacije za sporočila'; +$labels['arialabelcontactquicksearch'] = 'Iskalnik stikov'; +$labels['arialabelmessageheaders'] = 'Glave sporočil'; +$labels['arialabelforwardingoptions'] = 'Možnosti posredovanja'; +$labels['arialabelreplyalloptions'] = 'Možnost Odgovori vsem'; +$labels['arialabelmarkmessagesas'] = 'Označi izbrana sporočila kot ...'; +$labels['arialabelcomposeoptions'] = 'Možnosti sestavljanja sporočil'; +$labels['arialabelattachmentpreview'] = 'Predogled priponke'; +$labels['arialabelpreferencesform'] = 'Nastavitve'; +$labels['arialabelidentityeditfrom'] = 'Urejanje identitete'; +$labels['arialabelresonseeditfrom'] = 'Urejanje odgovora'; +$labels['arialabelsearchterms'] = 'Iskalni pogoji'; +$labels['helplistkeyboardnavcontacts'] = "Odpri izbran stik."; ?> diff --git a/program/localization/sl_SI/messages.inc b/program/localization/sl_SI/messages.inc index bd71cd7a119..aa643cd793b 100644 --- a/program/localization/sl_SI/messages.inc +++ b/program/localization/sl_SI/messages.inc @@ -22,12 +22,15 @@ $messages['sessionerror'] = 'Seja je neveljavna ali je potekla.'; $messages['storageerror'] = 'Povezava z IMAP strežnikom je spodletela.'; $messages['servererror'] = 'Napaka strežnika!'; $messages['servererrormsg'] = 'Napaka strežnika $msg'; +$messages['accountlocked'] = 'Preveliko število napačnih prijav. Poskusite znova kasneje.'; +$messages['connerror'] = 'Napaka pri povezavi do strežnika.'; $messages['dberror'] = 'Napaka v bazi'; +$messages['windowopenerror'] = 'Onemogočen prikaz pojavnih oken.'; $messages['requesttimedout'] = 'Zahteva je potekla'; $messages['errorreadonly'] = 'Operacije ni bilo mogoče izvršiti. Mapa je na voljo samo za branje.'; $messages['errornoperm'] = 'Operacije ni bilo mogoče izvršiti. Dostop zavrnjen.'; $messages['erroroverquota'] = 'Operacije ni mogoče izvršiti. Diskovni prostor je zaseden.'; -$messages['erroroverquotadelete'] = 'Zmanjkalo je diskovnega prostora. Za izbris sporočila porabite tipki SHIFT+DEL.'; +$messages['erroroverquotadelete'] = 'Zmanjkalo je diskovnega prostora. Za izbris sporočila uporabite tipki SHIFT+DEL.'; $messages['invalidrequest'] = 'Neveljavna zahteva. Podatki niso bili shranjeni.'; $messages['invalidhost'] = 'Nepravilno ime strežnika'; $messages['nomessagesfound'] = 'V poštnem predalu ni sporočil.'; @@ -37,6 +40,7 @@ $messages['nomessages'] = 'Ni sporočil'; $messages['refreshing'] = 'Osvežujem...'; $messages['loading'] = 'Nalaganje...'; $messages['uploading'] = 'Prenos dokumenta na strežnik...'; +$messages['attaching'] = 'Pripenjanje dokumenta...'; $messages['uploadingmany'] = 'Nalaganje dokumentov..'; $messages['loadingdata'] = 'Nalaganje podatkov...'; $messages['checkingmail'] = 'Preverjanje novih sporočil...'; @@ -48,9 +52,17 @@ $messages['successfullysaved'] = 'Uspešno shranjeno.'; $messages['savingresponse'] = 'Shranjevanje odgovora...'; $messages['deleteresponseconfirm'] = 'Ste prepričani, da želite izbrisati ta odgovor?'; $messages['addedsuccessfully'] = 'Stik je bil uspešno dodan v imenik.'; +$messages['contactexists'] = 'Stik s tem elektronskim naslovom že obstaja'; $messages['contactnameexists'] = 'Stik s tem imenom že obstaja'; $messages['blockedimages'] = 'Zaradi zaščite zasebnosti je prikaz slik v sporočilu onemogočen.'; $messages['encryptedmessage'] = 'Sporočilo je šifrirano in ne more biti prikazano.'; +$messages['externalmessagedecryption'] = 'To je šifrirano sporočilo, ki ga lahko odšifrirate s pomočjo brskalnika.'; +$messages['nopubkeyfor'] = 'V $email ni bilo mogoče najti javnega ključa'; +$messages['nopubkeyforsender'] = 'Veljavnega javnega ključa za pošiljatelja ni bilo mogoče najti. Ali želite šifrirati sporočila samo za naslovnike?'; +$messages['encryptnoattachments'] = 'Priponke, ki ste jih že naložili, ne morejo biti šifrirane. Dodajte jih znova v urejevalnik.'; +$messages['searchpubkeyservers'] = 'Ali želite manjkajoče javne ključe poiskati na javno dostopnih strežnikih?'; +$messages['encryptpubkeysfound'] = 'Najdeni so bili naslednji javni ključi:'; +$messages['keyservererror'] = 'Na strežniku ključa ni bilo mogoče najti'; $messages['nocontactsfound'] = 'Ni stikov.'; $messages['contactnotfound'] = 'Iskanega stika ni bilo mogoče najti.'; $messages['contactsearchonly'] = 'Vpišite iskalni parameter za iskanje stika'; @@ -77,9 +89,12 @@ $messages['formincomplete'] = 'Obrazec ni v celoti izpolnjen'; $messages['noemailwarning'] = 'Vnesite veljaven elektronski naslov'; $messages['nonamewarning'] = 'Vnesite ime'; $messages['nopagesizewarning'] = 'Vnesite velikost strani'; +$messages['nosenderwarning'] = 'Vnesite elektronski naslov pošiljatelja.'; $messages['norecipientwarning'] = 'Vnesite vsaj enega prejemnika sporočila'; -$messages['nosubjectwarning'] = 'Polje "Zadeva" je prazno. Želite dodati tekst v to polje?'; -$messages['nobodywarning'] = 'Želite poslati sporočilo brez vsebine?'; +$messages['disclosedreciptitle'] = 'Preveliko število javnih naslovov prejemnikov'; +$messages['nosubjectwarning'] = 'Polje "Zadeva" je prazno. Želite dodati besedilo v to polje?'; +$messages['nosubjecttitle'] = 'Brez naslova'; +$messages['nobodywarning'] = 'Želite poslati sporočilo brez besedila?'; $messages['notsentwarning'] = 'Sporočilo ni bilo poslano. Želite zavreči to sporočilo?'; $messages['restoresavedcomposedata'] = 'Ali želite nadaljevati z urejanjem še neodposlanega osnutka:\n\nZadeva: $subject\nShranjeno dne: $date\n\n '; $messages['noldapserver'] = 'Izberite LDAP strežnik, v katerem želite iskati?'; @@ -90,6 +105,7 @@ $messages['contactsearchsuccessful'] = '$nr najdenih stikov.'; $messages['searchnomatch'] = 'Ni zadetkov'; $messages['searching'] = 'Iskanje...'; $messages['checking'] = 'Preverjanje...'; +$messages['stillsearching'] = 'Iskanje v teku...'; $messages['nospellerrors'] = 'V tekstu ni bilo nobenih pravopisnih napak'; $messages['folderdeleted'] = 'Mapa je bila uspešno izbrisana.'; $messages['foldersubscribed'] = 'Mapa je bila uspešno prijavljena.'; @@ -99,6 +115,7 @@ $messages['folderexpunged'] = 'Mapa je bila uspešno skrčena'; $messages['deletedsuccessfully'] = 'Uspešno izbrisano'; $messages['converting'] = 'Odstranjevanje nastavitev oblikovanja...'; $messages['messageopenerror'] = 'Sporočila ni bilo mogoče prenesti iz strežnika'; +$messages['filelinkerror'] = 'Pripenjanje dokumenta je spodletelo.'; $messages['fileuploaderror'] = 'Prenos datoteke je spodletel'; $messages['filesizeerror'] = 'Naložena datoteka presega največjo dovoljeno velikost $size'; $messages['copysuccess'] = 'Uspešno ste kopirali $nr stikov.'; @@ -132,13 +149,14 @@ $messages['importconfirmskipped'] = 'Preskočeni že obstoječi vnosi $skippe $messages['importmessagesuccess'] = 'Upešno ste uvozili $nr sporočil.'; $messages['importmessageerror'] = 'Uvoz je spodletel. Naložena datoteka ni veljavno sporočilo ali poštna datoteka'; $messages['opnotpermitted'] = 'Operacija ni dovoljena.'; -$messages['httpreceivedencrypterror'] = 'Prišlo je do večje napake v konfiguraciji.Obrnite se na skrbnika sistema. Sporočila ni bilo mogoče poslati.'; +$messages['httpreceivedencrypterror'] = 'Prišlo je do večje napake v konfiguraciji. Obrnite se na skrbnika sistema. Sporočila ni bilo mogoče poslati.'; $messages['smtpconnerror'] = 'Napaka pri pošiljanju ($code): Povezava s strežnikom je spodletela'; $messages['smtpautherror'] = 'Napaka pri pošiljanju($code): Avtentikacija je spodletela'; $messages['smtpfromerror'] = 'Napaka pri pošiljanju ($code): Neveljaven elektronski naslov pošiljatelja "$from" ($msg)'; $messages['smtptoerror'] = 'Napaka pri pošiljanju ($code): Neveljaven elektronski naslov prejemnika "$to" ($msg)'; $messages['smtprecipientserror'] = 'Napaka pri pošiljanju: Seznama prejemnikov ni bilo mogoče razčleniti'; $messages['smtperror'] = 'Napaka pri pošiljanju:$msg'; +$messages['emailformaterror'] = 'Neveljaven elektronski naslov: $email'; $messages['toomanyrecipients'] = 'Navedli ste preveč prejemnikov. Zmanjšajte število prejemnikov na $max'; $messages['maxgroupmembersreached'] = 'Število članov skupine presega največje dovoljeno število $max.'; $messages['internalerror'] = 'Prišlo je do napake. Poskusite znova.'; @@ -155,12 +173,14 @@ $messages['savedsearchcreated'] = 'Iskanje je bilo uspešno shranjeno.'; $messages['savedsearchcreateerror'] = 'Iskanja ni bilo mogoče shraniti.'; $messages['messagedeleted'] = 'Sporočila so bila uspešno izbrisana'; $messages['messagemoved'] = 'Sporočila so bila uspešno premaknjena'; +$messages['messagemovedtotrash'] = 'Sporočilo(a) so bila uspešno premaknjena v Smeti.'; $messages['messagecopied'] = 'Sporočila so bila uspešno kopirana'; $messages['messagemarked'] = 'Sporočila so bila uspešno označena'; $messages['autocompletechars'] = 'Vnesite vsaj $min znakov za samodejno dokončanje'; $messages['autocompletemore'] = 'Z iskanjem se ujema več vnosov. Vnesite dodatne črke.'; $messages['namecannotbeempty'] = 'Imena ni mogoče izbrisati'; $messages['nametoolong'] = 'Ime je predolgo'; +$messages['namedotforbidden'] = 'Ime mape se ne more začeti s piko.'; $messages['folderupdated'] = 'Mapa je bila uspešno posodobljena'; $messages['foldercreated'] = 'Mapa je bila uspešno ustvarjena'; $messages['invalidimageformat'] = 'Neveljaven format slike'; @@ -168,4 +188,13 @@ $messages['mispellingsfound'] = 'V sporočilu so bile najdene napake v črkovanj $messages['parentnotwritable'] = 'Podmape v tej mapi ni bilo mogoče ustvariti/premakniti. Nimate pravic.'; $messages['messagetoobig'] = 'Sporočilo je preveliko za obdelavo.'; $messages['attachmentvalidationerror'] = 'OPOZORILO! Priponka vsebuje sumljivo vsebino, saj tip priponke ne ustreza tipu, določenemu v sporočilu. Če ne zaupate pošiljatelju, priponke v brskalniku ne odpirajte, saj lahko vsebuje zlonamerno vsebino.

    Pričakovano: $expected; Najdeno: $detected'; -$messages['noscriptwarning'] = 'Opozorilo: Ta spletna stran zahteva Javascript! Za uporabo jo vključite v nastavitvah vašega brskalnika.'; +$messages['noscriptwarning'] = 'Opozorilo: Ta spletna stran zahteva Javascript! Za uporabo ga vključite v nastavitvah vašega brskalnika.'; +$messages['errnotfound'] = 'Datoteke ni bilo mogoče najti'; +$messages['errnotfoundexplain'] = 'Zahtevanega vira ni bilo mogoče najti!'; +$messages['errfailedrequest'] = 'Zahteva je spodletela'; +$messages['errauthorizationfailed'] = 'Avtorizacija je spodletela'; +$messages['errunauthorizedexplain'] = 'Ni bilo mogoče preveriti, ali ste avtorizirani za uporabo te storitve!'; +$messages['errcontactserveradmin'] = 'Obrnite se na skrbnika strežnika.'; +$messages['clicktoresumesession'] = 'Kliknite tukaj za obnovitev prejšnje seje'; +$messages['errcomposesession'] = 'Napaka v seji sestavljanja sporočila'; +$messages['clicktocompose'] = 'Kliknite tukaj, če želite ustvariti novo sporočilo'; diff --git a/program/localization/sq_AL/labels.inc b/program/localization/sq_AL/labels.inc index e40df591ee6..8699eaf59b1 100644 --- a/program/localization/sq_AL/labels.inc +++ b/program/localization/sq_AL/labels.inc @@ -18,44 +18,49 @@ $labels['welcome'] = 'Mirë se erdhët te $product'; $labels['username'] = 'Emri i përdoruesit'; $labels['password'] = 'Fjalëkalimi'; -$labels['server'] = 'Serveri'; -$labels['login'] = 'Hyr'; -$labels['logout'] = 'Dil'; -$labels['mail'] = 'Mesazhi'; -$labels['settings'] = 'Konfigurimet'; -$labels['addressbook'] = 'Libri i adresave'; -$labels['inbox'] = 'Ardhjet'; -$labels['drafts'] = 'Drafte'; -$labels['sent'] = 'Dërguar'; -$labels['trash'] = 'Fshirë'; -$labels['junk'] = 'Reklama'; -$labels['show_real_foldernames'] = 'Trego emrat real për dosje të veçanta'; -$labels['subject'] = 'Tema'; -$labels['from'] = 'Dërguesi'; +$labels['server'] = 'Shërbyes'; +$labels['login'] = 'Hyrje'; +$labels['logout'] = 'Dalje'; +$labels['mail'] = 'Postë'; +$labels['settings'] = 'Rregullime'; +$labels['addressbook'] = 'Libër Adresash'; +$labels['inbox'] = 'Të marrë'; +$labels['drafts'] = 'Skica'; +$labels['sent'] = 'Të dërguar'; +$labels['trash'] = 'Hedhurina'; +$labels['junk'] = 'Të padëshiruar'; +$labels['show_real_foldernames'] = 'Shfaqi emrat realë për dosjet speciale'; +$labels['subject'] = 'Subjekt'; +$labels['from'] = 'Nga'; $labels['sender'] = 'Dërguesi'; $labels['to'] = 'Për'; -$labels['cc'] = 'Kopje'; +$labels['cc'] = 'Cc'; $labels['bcc'] = 'Bcc'; -$labels['replyto'] = 'Përgjigjja për'; -$labels['date'] = 'Data'; -$labels['size'] = 'Madhësia'; -$labels['priority'] = 'Përparësia'; -$labels['organization'] = 'Organizata'; -$labels['readstatus'] = 'Statusi i leximit'; -$labels['mailboxlist'] = 'Kutitë'; -$labels['messagesfromto'] = 'Mesazhet $from në $to nga $count'; -$labels['messagenrof'] = 'Mesazhi $nr nga $count'; -$labels['copy'] = 'Kopje'; -$labels['moveto'] = 'Lëvize te...'; -$labels['copyto'] = 'Kopjo te...'; -$labels['download'] = 'Shkarko'; +$labels['replyto'] = 'Përgjigjuni-Te'; +$labels['followupto'] = 'Ndiqeni-Te'; +$labels['date'] = 'Datë'; +$labels['size'] = 'Madhësi'; +$labels['priority'] = 'Përparësi'; +$labels['organization'] = 'Organizëm'; +$labels['readstatus'] = 'Gjendje leximi'; +$labels['listoptions'] = 'Mundësi liste…'; +$labels['mailboxlist'] = 'Dosje'; +$labels['messagesfromto'] = 'Mesazhet nga $from deri në $to nga $count gjithsej'; +$labels['threadsfromto'] = 'Rrjedhat nga $from deri në $to nga $count gjithsej'; +$labels['messagenrof'] = 'Mesazhi $nr nga $count gjithsej'; +$labels['fromtoshort'] = '$from – $to nga $count gjithsej'; +$labels['copy'] = 'Kopjoje'; +$labels['move'] = 'Lëvize'; +$labels['moveto'] = 'Shpjere te...'; +$labels['copyto'] = 'Kopjoje te...'; +$labels['download'] = 'Shkarkoje'; $labels['open'] = 'Hape'; -$labels['showattachment'] = 'Shfaq'; -$labels['showanyway'] = 'Shfaqe atë dosido'; -$labels['filename'] = 'Emri i skedarit'; -$labels['filesize'] = 'Madhësia e skedarit'; -$labels['addtoaddressbook'] = 'Shto në librin e adresave'; -$labels['sun'] = 'Dje'; +$labels['showattachment'] = 'Shfaqe'; +$labels['showanyway'] = 'Shfaqe sido qoftë'; +$labels['filename'] = 'Emër skedari'; +$labels['filesize'] = 'Madhësi skedari'; +$labels['addtoaddressbook'] = 'Shtoje në librin e adresave'; +$labels['sun'] = 'Die'; $labels['mon'] = 'Hën'; $labels['tue'] = 'Mar'; $labels['wed'] = 'Mër'; @@ -64,11 +69,11 @@ $labels['fri'] = 'Pre'; $labels['sat'] = 'Sht'; $labels['sunday'] = 'e Dielë'; $labels['monday'] = 'e Hënë'; -$labels['tuesday'] = 'e martë'; -$labels['wednesday'] = 'e mërkurë'; -$labels['thursday'] = 'e enjte'; -$labels['friday'] = 'e premte'; -$labels['saturday'] = 'e shtunë'; +$labels['tuesday'] = 'e Martë'; +$labels['wednesday'] = 'e Mërkurë'; +$labels['thursday'] = 'e Enjte'; +$labels['friday'] = 'e Premte'; +$labels['saturday'] = 'e Shtunë'; $labels['jan'] = 'Jan'; $labels['feb'] = 'Shk'; $labels['mar'] = 'Mar'; @@ -94,16 +99,19 @@ $labels['longoct'] = 'Tetor'; $labels['longnov'] = 'Nëntor'; $labels['longdec'] = 'Dhjetor'; $labels['today'] = 'Sot'; -$labels['refresh'] = 'Rifresko'; -$labels['checkmail'] = 'Shiko për mesazhe të reja'; -$labels['compose'] = 'Shkruaj një mesazh'; -$labels['writenewmessage'] = 'Krijo një mesazh të ri'; +$labels['refresh'] = 'Rifreskoje'; +$labels['checkmail'] = 'Kontrollo për mesazhe të reja'; +$labels['compose'] = 'Hartoni'; +$labels['writenewmessage'] = 'Krijoni një mesazh të ri'; $labels['reply'] = 'Përgjigju'; -$labels['replytomessage'] = 'Përgjigju dërguesit'; -$labels['replytoallmessage'] = 'Përgjigju listës ose dërguesit dhe të gjithë marrësve'; -$labels['replyall'] = 'Përgjigju të gjithve'; -$labels['forward'] = 'Paso'; -$labels['forwardmessage'] = 'Pasoje mesazhin'; +$labels['replytomessage'] = 'Përgjigjiu dërguesit'; +$labels['replytoallmessage'] = 'Përgjigju te lista ose dërguesit dhe të gjithë marrësve'; +$labels['replyall'] = 'Përgjigju të gjithëve'; +$labels['replylist'] = 'Përgjigju listës'; +$labels['forward'] = 'Përcille'; +$labels['forwardinline'] = 'Përcille brendazi'; +$labels['forwardattachment'] = 'Përcille si bashkëngjitje'; +$labels['forwardmessage'] = 'Përcille mesazhin'; $labels['deletemessage'] = 'Fshije mesazhin'; $labels['movemessagetotrash'] = 'Hidhe mesazhin në kosh'; $labels['printmessage'] = 'Shtype këtë mesazh'; @@ -112,114 +120,481 @@ $labels['firstmessage'] = 'Shfaq mesazhin e parë'; $labels['nextmessage'] = 'Shfaq mesazhin pasardhës'; $labels['lastmessage'] = 'Shfaq mesazhin e fundit'; $labels['backtolist'] = 'Kthehu te lista e mesazheve'; -$labels['viewsource'] = 'Shfaq tekstin'; -$labels['markmessages'] = 'Shëno mesazhet'; +$labels['viewsource'] = 'Shfaqi burimin'; +$labels['mark'] = 'Vëri shenjë'; +$labels['markmessages'] = 'Vëru shenjë mesazheve'; $labels['markread'] = 'Si të lexuara'; $labels['markunread'] = 'Si të palexuara'; -$labels['options'] = 'Opsionet'; -$labels['select'] = 'Zgjidh'; +$labels['markflagged'] = 'Si me shenjë'; +$labels['markunflagged'] = 'Si me shenjë të hequr'; +$labels['moreactions'] = 'Më tepër veprime…'; +$labels['markallread'] = 'Vëru shenjë të tërëve si të lexuar'; +$labels['folders-cur'] = 'Vetëm dosjes së përzgjedhur'; +$labels['folders-sub'] = 'Dosjes së përzgjedhur dhe nëndosjeve të saj'; +$labels['folders-all'] = 'Krejt dosjet'; +$labels['more'] = 'Më tepër'; +$labels['back'] = 'Mbrapsht'; +$labels['options'] = 'Opsione'; +$labels['first'] = 'I pari'; +$labels['last'] = 'I fundit'; +$labels['previous'] = 'I mëparshmi'; +$labels['next'] = 'Pasuesi'; +$labels['select'] = 'Përzgjidhni'; $labels['all'] = 'Të gjitha'; $labels['none'] = 'Asnjë'; -$labels['unread'] = 'Palexuar'; +$labels['currpage'] = 'Faqja e tanishme'; +$labels['isread'] = 'Të lexuar'; +$labels['unread'] = 'Të palexuar'; +$labels['flagged'] = 'Me Shenjë'; +$labels['unflagged'] = 'Pa Shenjë'; +$labels['unanswered'] = 'Pa përgjigje'; +$labels['withattachment'] = 'Me bashkëngjitje'; +$labels['deleted'] = 'Të fshirë'; +$labels['undeleted'] = 'Të pafshirë'; +$labels['replied'] = 'Me përgjigje'; +$labels['forwarded'] = 'Të përcjellë'; +$labels['invert'] = 'Përmbyse'; +$labels['filter'] = 'Filtër'; +$labels['list'] = 'Listë'; +$labels['threads'] = 'Rrjedha'; +$labels['expand-all'] = 'Zgjeroji Krejt'; +$labels['expand-unread'] = 'Zgjero të Palexuarit'; +$labels['collapse-all'] = 'Tkurri Krejt'; +$labels['threaded'] = 'Me rrjedhë'; +$labels['autoexpand_threads'] = 'Zgjero rrjedha mesazhesh'; +$labels['do_expand'] = 'krejt rrjedhat'; +$labels['expand_only_unread'] = 'vetëm ato me mesazhe të palexuar'; +$labels['fromto'] = 'Nga/Për'; +$labels['attachment'] = 'Bashkëngjitje'; $labels['nonesort'] = 'Asnjë'; -$labels['compact'] = 'Zvogëlo'; -$labels['empty'] = 'Boshatis'; -$labels['quota'] = 'Përdorimi i diskut'; +$labels['sentdate'] = 'Datë dërgimi'; +$labels['arrival'] = 'Datë mbërritje'; +$labels['asc'] = 'në rend rritës'; +$labels['desc'] = 'në rend zbritës'; +$labels['listcolumns'] = 'Paraqit shtylla'; +$labels['listsorting'] = 'Shtyllë renditjeje'; +$labels['listorder'] = 'Rend renditjeje'; +$labels['listmode'] = 'Mënyra parje si listë'; +$labels['layout'] = 'Skemë'; +$labels['layoutwidescreen'] = 'Me ekran të gjerë'; +$labels['layoutdesktop'] = 'Desktop'; +$labels['folderactions'] = 'Veprime mbi dosje…'; +$labels['compact'] = 'Ngjeshe'; +$labels['empty'] = 'Zbraze'; +$labels['importmessages'] = 'Importo mesazhe'; +$labels['quota'] = 'Përdorim disku'; $labels['unknown'] = 'i panjohur'; $labels['unlimited'] = 'i pakufizuar'; +$labels['quotatotal'] = 'Kufi'; +$labels['quotaused'] = 'E përdorur'; +$labels['quotastorage'] = 'Hapësirë disku'; +$labels['quotamessage'] = 'Numër mesazhesh'; $labels['quicksearch'] = 'Kërkim i shpejtë'; $labels['resetsearch'] = 'Pastro kërkimin'; -$labels['sendmessage'] = 'Dërgoje mesazhin tani'; -$labels['savemessage'] = 'Ruaje si draft'; -$labels['addattachment'] = 'Bashkangjit një skedar'; +$labels['searchmod'] = 'Modifikues kërkimi'; +$labels['msgtext'] = 'Krejt mesazhin'; +$labels['body'] = 'Lëndë'; +$labels['type'] = 'Lloj'; +$labels['namex'] = 'Emër'; +$labels['currentfolder'] = 'Dosja e tanishme'; +$labels['subfolders'] = 'Kjo dhe nëndosjet'; +$labels['allfolders'] = 'Krejt dosjet'; +$labels['searchinterval-1W'] = 'më të vjetër se një javë'; +$labels['searchinterval-1M'] = 'më të vjetër se një muaj'; +$labels['searchinterval-1Y'] = 'më të vjetër se një vit'; +$labels['searchinterval1W'] = 'më të rinj se një javë'; +$labels['searchinterval1M'] = 'më të rinj se një muaj'; +$labels['searchinterval1Y'] = 'më të rinj se një vit'; +$labels['openinextwin'] = 'Hape në dritare të re'; +$labels['emlsave'] = 'Shkarkoje (.eml)'; +$labels['changeformattext'] = 'Shfaqe në format tekst të thjeshtë'; +$labels['changeformathtml'] = 'Shfaqe në format HTML'; +$labels['editasnew'] = 'Përpunojeni si të ri'; +$labels['send'] = 'Dërgoje'; +$labels['sendmessage'] = 'Dërgoje mesazhin'; +$labels['savemessage'] = 'Ruaje si skicë'; +$labels['addattachment'] = 'Bashkëngjit një skedar'; $labels['charset'] = 'Bashkësi shkronjash'; -$labels['editortype'] = 'Lloj editori'; -$labels['returnreceipt'] = 'Njoftim marrje'; -$labels['checkspelling'] = 'Kontroll gabimesh'; -$labels['resumeediting'] = 'Vazhdo editimin'; -$labels['revertto'] = 'Ktheje te'; -$labels['attachments'] = 'Bashkangjitjet'; +$labels['editortype'] = 'Lloj përpunuesi'; +$labels['returnreceipt'] = 'Dëftesë kthimi'; +$labels['dsn'] = 'Njoftim gjendjeje dërgimi'; +$labels['mailreplyintro'] = 'Më $date, $sender shkroi:'; +$labels['originalmessage'] = 'Mesazhi Origjinal'; +$labels['selectimage'] = 'Përzgjidhni figurë'; +$labels['addimage'] = 'Shtoni figurë'; +$labels['selectmedia'] = 'Përzgjidhni film'; +$labels['addmedia'] = 'Shtoni film'; +$labels['encrypt'] = 'Fshehtëzoje'; +$labels['encryptmessage'] = 'Fshehtëzoje mesazhin'; +$labels['encryptmessagemailvelope'] = 'Fshehtëzoje mesazhin me Mailvelope'; +$labels['importpubkeys'] = 'Importo kyçe publikë'; +$labels['encryptedsendialog'] = 'Po dërgohet mesazh i fshehtëzuar'; +$labels['keyid'] = 'ID Kyçi'; +$labels['keylength'] = 'Bite'; +$labels['keyexpired'] = 'I skaduar'; +$labels['keyrevoked'] = 'I shfuzizuar'; +$labels['bccinstead'] = 'Përdor Bcc'; +$labels['editidents'] = 'Përpunoni identitete'; +$labels['spellcheck'] = 'Drejtshkrim'; +$labels['checkspelling'] = 'Kontrolloji drejtshkrimin'; +$labels['resumeediting'] = 'Rikthejuni përpunimit'; +$labels['revertto'] = 'Riktheje te'; +$labels['restore'] = 'Rimerre'; +$labels['restoremessage'] = 'Të rimerret mesazhi?'; +$labels['ignore'] = 'Shpërfille'; +$labels['responses'] = 'Përgjigje'; +$labels['insertresponse'] = 'Futni një përgjigje'; +$labels['manageresponses'] = 'Administroni përgjigje'; +$labels['newresponse'] = 'Krijoni përgjigje të re'; +$labels['addresponse'] = 'Shtoni përgjigje'; +$labels['editresponse'] = 'Përpunoni përgjigje'; +$labels['editresponses'] = 'Përpunoni përgjigje'; +$labels['responsename'] = 'Emër'; +$labels['responsetext'] = 'Tekst Përgjigjeje'; +$labels['attach'] = 'Bashkëngjite'; +$labels['attachments'] = 'Bashkëngjitje'; $labels['upload'] = 'Ngarko'; -$labels['close'] = 'Mbyll'; +$labels['uploadprogress'] = '$percent ($current nga $total)'; +$labels['close'] = 'Mbylle'; +$labels['messageoptions'] = 'Mundësi mesazhesh…'; +$labels['togglecomposeoptions'] = 'Shfaq/fshih mundësi hartimi'; +$labels['attachmentrename'] = 'Riemërtoni bashkëngjitjet'; $labels['low'] = 'I ulët'; $labels['lowest'] = 'Më i ulëti'; $labels['normal'] = 'Normal'; $labels['high'] = 'I lartë'; $labels['highest'] = 'Më i larti'; $labels['nosubject'] = '(pa subjekt)'; -$labels['showimages'] = 'Shfaq imazhet'; +$labels['showimages'] = 'Shfaq figura'; +$labels['alwaysshow'] = 'Shfaqi përherë figurat nga $sender'; +$labels['isdraft'] = 'Kjo është një skicë mesazhi.'; +$labels['andnmore'] = '$nr të tjerë...'; +$labels['togglemoreheaders'] = 'Shfaq krye mesazhi'; +$labels['togglefullheaders'] = 'Shfaq/fshih krye të papërpunuar mesazhi'; $labels['htmltoggle'] = 'HTML'; -$labels['plaintoggle'] = 'TEXT'; +$labels['plaintoggle'] = 'Tekst i thjeshtë'; +$labels['savesentmessagein'] = 'Ruaje mesazhin e dërguar te'; +$labels['dontsave'] = 'mos e ruaj'; +$labels['maxuploadsize'] = 'Maksimumi i lejuar për madhësi skedarësh është $size'; $labels['addcc'] = 'Shto Cc'; $labels['addbcc'] = 'Shto Bcc'; $labels['addreplyto'] = 'Shto Reply-To'; -$labels['mdnrequest'] = 'Dërguesi i këtij mesazhi ka kërkuar që të njoftohet kur ju të lexoni këtë mesazh. Dëshironi ta njoftoni dërguesin?'; -$labels['receiptread'] = 'Njoftim Leximi'; -$labels['yourmessage'] = 'Ky është një njoftim leximi për mesazhin tuaj'; -$labels['receiptnote'] = 'Shënim: Ky njoftim tregon vetëm që mesazhi u shfaq në kompjuterin e marrësit. Nuk ka siguri që marrësi e ka lexuar ose e ka kuptuar përmbajtjen e mesazhit.'; -$labels['name'] = 'Emri që thirret'; +$labels['addfollowupto'] = 'Shto Followup-To'; +$labels['mdnrequest'] = 'Dërguesi i këtij mesazhi ka kërkuar që të njoftohet kur ju të lexoni këtë mesazh. Dëshironi të njoftohet dërguesi?'; +$labels['receiptread'] = 'Dëftesë Kthimi (u lexua)'; +$labels['yourmessage'] = 'Kjo është një Dëftesë Kthimi për mesazhin tuaj'; +$labels['receiptnote'] = 'Shënim: Kjo dëftesë dëshmon vetëm se mesazhi u shfaq në kompjuterin e marrësit. Nuk ka garanci se marrësi e ka lexuar ose e ka kuptuar përmbajtjen e mesazhit.'; +$labels['name'] = 'Emër Në Ekran'; $labels['firstname'] = 'Emri'; $labels['surname'] = 'Mbiemri'; -$labels['email'] = 'E-Mail'; -$labels['editcontact'] = 'Ndrysho kontaktin'; -$labels['edit'] = 'Ndrysho'; -$labels['cancel'] = 'Anullo'; -$labels['save'] = 'Ruaj'; -$labels['delete'] = 'Fshi'; -$labels['deletecontact'] = 'Fshi kontaktet e zgjedhura'; -$labels['composeto'] = 'Shkruaj email për'; -$labels['contactsfromto'] = 'Kontaktet $from në $to nga $count'; +$labels['middlename'] = 'Emër i Dytë'; +$labels['nameprefix'] = 'Parashtesë'; +$labels['namesuffix'] = 'Prapashtesë'; +$labels['nickname'] = 'Nofkë'; +$labels['jobtitle'] = 'Pozicion'; +$labels['department'] = 'Degë'; +$labels['gender'] = 'Gjini'; +$labels['maidenname'] = 'Emri i Vajzërisë'; +$labels['email'] = 'Email'; +$labels['phone'] = 'Telefon'; +$labels['address'] = 'Adresë'; +$labels['street'] = 'Rrugë'; +$labels['locality'] = 'Qytet'; +$labels['zipcode'] = 'Kod ZIP'; +$labels['region'] = 'Shtet/Provincë'; +$labels['country'] = 'Vend'; +$labels['birthday'] = 'Datëlindje'; +$labels['anniversary'] = 'Përvjetor'; +$labels['website'] = 'Sajt'; +$labels['instantmessenger'] = 'IM'; +$labels['notes'] = 'Shënime'; +$labels['male'] = 'mashkull'; +$labels['female'] = 'femër'; +$labels['manager'] = 'Përgjegjës'; +$labels['assistant'] = 'Asistent'; +$labels['spouse'] = 'Bashkëshort'; +$labels['allfields'] = 'Krejt fushat'; +$labels['search'] = 'Kërkoni'; +$labels['searchresult'] = 'Përfundime kërkimi'; +$labels['advsearch'] = 'Kërkim i Thelluar'; +$labels['advanced'] = 'I thelluar'; +$labels['other'] = 'Tjetër'; +$labels['printcontact'] = 'Shtype kontaktin'; +$labels['typehome'] = 'E shtëpisë'; +$labels['typework'] = 'E punës'; +$labels['typeother'] = 'Tjetër'; +$labels['typemobile'] = 'Celular'; +$labels['typemain'] = 'Kryesore'; +$labels['typehomefax'] = 'Faks i shtëpisë'; +$labels['typeworkfax'] = 'Faks i punës'; +$labels['typecar'] = 'Automjet'; +$labels['typepager'] = 'Faques'; +$labels['typevideo'] = 'Video'; +$labels['typeassistant'] = 'Asistent'; +$labels['typehomepage'] = 'Faqe Hyrëse'; +$labels['typeblog'] = 'Blog'; +$labels['typeprofile'] = 'Profil'; +$labels['addfield'] = 'Shtoni fushë…'; +$labels['addcontact'] = 'Shtoni kontakt'; +$labels['editcontact'] = 'Përpunoni kontakt'; +$labels['contacts'] = 'Kontakte'; +$labels['contactproperties'] = 'Veti kontaktesh'; +$labels['contactnameandorg'] = 'Emër dhe Organizëm'; +$labels['personalinfo'] = 'Të dhëna personale'; +$labels['contactphoto'] = 'Foto kontakti'; +$labels['edit'] = 'Përpunoni'; +$labels['cancel'] = 'Anuloje'; +$labels['save'] = 'Ruaje'; +$labels['delete'] = 'Fshije'; +$labels['rename'] = 'Riemërtojeni'; +$labels['addphoto'] = 'Shtoni'; +$labels['replacephoto'] = 'Zëvendësoje'; +$labels['uploadphoto'] = 'Ngarkoni foto'; +$labels['newcontact'] = 'Krijoni kontakt të ri'; +$labels['deletecontact'] = 'Fshiji kontaktet e përzgjedhur'; +$labels['composeto'] = 'Hartoni email për'; +$labels['contactsfromto'] = 'Kontaktet nga $from deri në $to nga $count gjithsej'; $labels['print'] = 'Shtyp'; $labels['export'] = 'Eksporto'; -$labels['previouspage'] = 'Shfaq grupin e mëparshëm'; -$labels['firstpage'] = 'Shfaq grupin e parë'; -$labels['nextpage'] = 'Shfaq grupin tjetër'; -$labels['lastpage'] = 'Shfaq grupin e fundit'; -$labels['groups'] = 'Grupet'; -$labels['personaladrbook'] = 'Adresat Personale'; -$labels['settingsfor'] = 'Konfigurimet për'; -$labels['preferences'] = 'Preferencat'; -$labels['userpreferences'] = 'Preferencat e përdoruesit'; -$labels['editpreferences'] = 'Ndrysho preferencat e përdoruesit'; -$labels['identities'] = 'Identitetet'; +$labels['exportall'] = 'Eksportoji krejt'; +$labels['exportsel'] = 'Eksporto të përzgjedhurat'; +$labels['exportvcards'] = 'Eksportoji kontaktet në format vCard'; +$labels['newgroup'] = 'Krijoni grup të ri'; +$labels['addgroup'] = 'Shtoni grup'; +$labels['grouprename'] = 'Riemërtojeni grupin'; +$labels['groupdelete'] = 'Fshije grupin'; +$labels['groupremoveselected'] = 'Hiqi nga grupi kontaktet e përzgjedhur'; +$labels['uponelevel'] = 'Një nivel më sipër'; +$labels['previouspage'] = 'Shfaq faqen e mëparshme'; +$labels['firstpage'] = 'Shfaq faqen e parë'; +$labels['nextpage'] = 'Shfaq faqen pasuese'; +$labels['lastpage'] = 'Shfaq faqen e fundit'; +$labels['group'] = 'Grup'; +$labels['groups'] = 'Grupe'; +$labels['listgroup'] = 'Paraqit anëtarë grupi'; +$labels['personaladrbook'] = 'Adresa Personale'; +$labels['searchsave'] = 'Ruaje kërkimin'; +$labels['searchdelete'] = 'Fshije kërkimin'; +$labels['import'] = 'Importo'; +$labels['importcontacts'] = 'Importo kontaktet'; +$labels['importfromfile'] = 'Importo prej skedari:'; +$labels['importtarget'] = 'Shtoni kontakte te'; +$labels['importreplace'] = 'Zëvendëso krejt librin e adresave'; +$labels['importgroups'] = 'Importo përshoqërime grupi'; +$labels['importgroupsall'] = 'Krejt (krijo grupe, në u dashtë)'; +$labels['importgroupsexisting'] = 'Vetëm për grupe ekzistues'; +$labels['importdesc'] = 'Mund të ngarkoni kontakte nga një libër ekzistues adresash.
    Hëpërhë mbulojmë adresa nga forma të dhënash vCard ose CSV (ndarë me presje).'; +$labels['done'] = 'U bë'; +$labels['settingsfor'] = 'Rregullime për'; +$labels['about'] = 'Rreth'; +$labels['preferences'] = 'Parapëlqime'; +$labels['userpreferences'] = 'Parapëlqime përdoruesi'; +$labels['editpreferences'] = 'Përpunoni parapëlqime përdoruesi'; +$labels['identities'] = 'Identitete'; +$labels['manageidentities'] = 'Administroni identitete'; +$labels['newidentity'] = 'Krijoni identitet të ri'; +$labels['addidentity'] = 'Shtoni identitet'; +$labels['editidentity'] = 'Përpunoni identitet'; $labels['preferhtml'] = 'Shfaq HTML'; +$labels['defaultcharset'] = 'Shkronja Parazgjedhje'; $labels['htmlmessage'] = 'Mesazh HTML'; -$labels['prettydate'] = 'Data të këndshme'; -$labels['setdefault'] = 'Bëje identitet kryesor'; -$labels['language'] = 'Gjuha'; +$labels['digitalsig'] = 'Nënshkrim Dixhital'; +$labels['dateformat'] = 'Format të dhënash'; +$labels['timeformat'] = 'Format kohe'; +$labels['prettydate'] = 'Data të hijshme'; +$labels['setdefault'] = 'Caktoje si parazgjedhje'; +$labels['autodetect'] = 'Auto'; +$labels['language'] = 'Gjuhë'; $labels['timezone'] = 'Brezi orar'; -$labels['pagesize'] = 'Rreshtat për faqe'; +$labels['pagesize'] = 'Rreshta për faqe'; $labels['signature'] = 'Nënshkrim'; $labels['dstactive'] = 'Ndryshim ore'; -$labels['htmleditor'] = 'Shkruaj mesazhe HTML'; +$labels['showinextwin'] = 'Hape mesazhin në dritare të re'; +$labels['composeextwin'] = 'Hartoni mesazh në dritare të re'; +$labels['htmleditor'] = 'Hartoni mesazhe HTML'; +$labels['htmlonreply'] = 'kur i përgjigjeni mesazheve HTML'; +$labels['htmlonreplyandforward'] = 'kur i përgjigjeni ose përcillni mesazh HTML'; $labels['htmlsignature'] = 'Nënshkrimi HTML'; -$labels['previewpane'] = 'Shiko si duket'; -$labels['autosavedraft'] = 'Ruaje automatikisht si draft'; +$labels['showemail'] = 'Adresën email shfaqe me emrin për në ekran'; +$labels['previewpane'] = 'Shfaq panel paraparjeje'; +$labels['skin'] = 'Temë grafike për ndërfaqen'; +$labels['logoutclear'] = 'Gjatë daljes pastroji Hedhurinat'; +$labels['logoutcompact'] = 'Gjatë daljes ngjeshe kutinë e mesazheve të marrë'; +$labels['uisettings'] = 'Ndërfaqe përdoruesi'; +$labels['serversettings'] = 'Rregullime Shërbyesi'; +$labels['mailboxview'] = 'Me Të marrët të Shfaqur'; +$labels['mdnrequests'] = 'Kur kërkohet dëftesë kthimi'; +$labels['askuser'] = 'pyetmë'; +$labels['autosend'] = 'dërgo dëftesë'; +$labels['autosendknown'] = 'dërgoju dëftesë kontakteve të mi, përndryshe pyetmë'; +$labels['autosendknownignore'] = 'dërgoju dëftesë kontakteve të mi, përndryshe shpërfille'; +$labels['ignorerequest'] = 'shpërfille kërkesën'; +$labels['readwhendeleted'] = 'Gjatë fshirjes shënoje mesazhin si të lexuar'; +$labels['flagfordeletion'] = 'Vëri shenjë mesazhit për fshirje, në vend se ta fshish'; +$labels['skipdeleted'] = 'Mos shfaq mesazhe të fshirë'; +$labels['deletealways'] = 'Nëse shpënia te Hedhurinat dështon, fshiji'; +$labels['deletejunk'] = 'Mesazhet te Të padëshiruarat fshiji direkt'; +$labels['showremoteimages'] = 'Shfaqi figurat e largëta të trupëzuara në mesazh'; +$labels['fromknownsenders'] = 'prej dërguesish të njohur'; +$labels['always'] = 'përherë'; +$labels['alwaysbutplain'] = 'përherë, hiq rastin kur i përgjigjem teksti të thjeshtë'; +$labels['showinlineimages'] = 'Figurat e bashkëngjitura shfaqi nën mesazh'; +$labels['autosavedraft'] = 'Ruaje automatikisht si skicë'; +$labels['everynminutes'] = 'çdo $n minute(s)'; +$labels['refreshinterval'] = 'Rifreskoje (kontrollo për mesazhe të rinj, etj)'; $labels['never'] = 'kurrë'; -$labels['folder'] = 'Kutia'; -$labels['folders'] = 'Kutitë'; -$labels['foldername'] = 'Emër kutie'; -$labels['subscribed'] = 'Regjistruar'; +$labels['immediately'] = 'menjëherë'; +$labels['messagesdisplaying'] = 'Po shfaqen Mesazhe'; +$labels['messagescomposition'] = 'Po hartohen Mesazhe'; +$labels['mimeparamfolding'] = 'Emra bashkëngjitjesh'; +$labels['2231folding'] = 'RFC 2231 i Plotë (Thunderbird)'; +$labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)'; +$labels['2047folding'] = 'RFC 2047 i Plotë (tjetër)'; +$labels['force7bit'] = 'Për shenja 8-bitëshe përdor kodim MIME'; +$labels['savelocalstorage'] = "Ruaji te depoja vendore e shfletuesit (përkohësisht)"; +$labels['advancedoptions'] = 'Mundësi të mëtejshme'; +$labels['toggleadvancedoptions'] = 'Shfaq/fshih mundësi të mëtejshme'; +$labels['focusonnewmessage'] = 'Për mesazhe të rinj kaloje fokusin te dritarja e shfletuesit'; +$labels['checkallfolders'] = 'Kontrollo krejt dosjet për mesazhe të rinj'; +$labels['displaynext'] = 'Pas fshirjes/lëvizjes së një mesazhi shfaq mesazhin pasues'; +$labels['defaultfont'] = 'Shkronja parazgjedhje për mesazhe HTML'; +$labels['mainoptions'] = 'Mundësitë Kryesore'; +$labels['browseroptions'] = 'Mundësi Shfletuesi'; +$labels['section'] = 'Seksion'; +$labels['maintenance'] = 'Mirëmbajtje'; +$labels['newmessage'] = 'Mesazh i Ri'; +$labels['signatureoptions'] = 'Mundësi Nënshkrimesh'; +$labels['whenreplying'] = 'Kur përgjigjem'; +$labels['replyempty'] = 'Mos e cito mesazhin origjinal'; +$labels['replytopposting'] = 'filloje mesazhin e ri sipër citimit'; +$labels['replybottomposting'] = 'filloje mesazhin e ri poshtë citimit'; +$labels['replyremovesignature'] = 'Kur përgjigjem, hiqe prej mesazhit nënshkrimin origjinal'; +$labels['autoaddsignature'] = 'Nënshkrimin shtoje vetvetiu'; +$labels['newmessageonly'] = 'vetëm për mesazh të ri'; +$labels['replyandforwardonly'] = 'vetëm për përgjigje dhe përcjellje'; +$labels['insertsignature'] = 'Fut nënshkrim'; +$labels['sigbelow'] = 'Nënshkrimin vendose nën mesazhin e cituar'; +$labels['sigseparator'] = 'Në nënshkrime përdor detyrimisht ndarës standardë'; +$labels['previewpanemarkread'] = 'Mesazheve të mëparshëm vëru shenjë si të lexuar'; +$labels['afternseconds'] = 'pas $n sekondash'; +$labels['reqmdn'] = 'Kërko përherë dëftesë kthimi'; +$labels['reqdsn'] = 'Kërko përherë njoftim mbi gjendje dërgimi'; +$labels['replysamefolder'] = 'Vendosi përgjigjet te dosja e mesazheve të cilit po i përgjigjeni'; +$labels['defaultabook'] = 'Libër parazgjedhje adresash'; +$labels['autocompletesingle'] = 'Gjatë vetëplotësimit anashkalo adresa email alternative'; +$labels['listnamedisplay'] = 'Kontaktet paraqiti si'; +$labels['spellcheckbeforesend'] = 'Kontrollo drejtshkrimin para dërgimit të një mesazhi'; +$labels['spellcheckoptions'] = 'Mundësi Kontrolli Drejtshkrimi'; +$labels['spellcheckignoresyms'] = 'Shpërfilli fjalët me simbole'; +$labels['spellcheckignorenums'] = 'Shpërfilli fjalët me numra'; +$labels['spellcheckignorecaps'] = 'Shpërfilli fjalët me të tëra shkronjat me të madhe'; +$labels['addtodict'] = 'Shtoje në fjalor'; +$labels['standardwindows'] = 'Flluskat trajtoji si dritare standarde'; +$labels['forwardmode'] = 'Përcjellje mesazhesh'; +$labels['inline'] = 'brendazi'; +$labels['asattachment'] = 'si bashkëngjitje'; +$labels['replyallmode'] = 'Veprim parazgjedhje për butonin [Përgjigju krejt]'; +$labels['replyalldefault'] = 'përgjigju krejt'; +$labels['replyalllist'] = 'përgjigju vetëm te listë postimesh (nëse gjendet e tillë)'; +$labels['folder'] = 'Dosje'; +$labels['folders'] = 'Dosje'; +$labels['foldername'] = 'Emër dosjeje'; $labels['messagecount'] = 'Mesazhe'; -$labels['create'] = 'Krijo'; -$labels['createfolder'] = 'Krijo kuti të re'; -$labels['managefolders'] = 'Sistemo kutitë'; +$labels['create'] = 'Krijoje'; +$labels['createfolder'] = 'Krijo dosje të re'; +$labels['managefolders'] = 'Sistemo dosje'; +$labels['specialfolders'] = 'Dosje Speciale'; +$labels['properties'] = 'Veti'; +$labels['folderproperties'] = 'Veti dosjeje'; +$labels['parentfolder'] = 'Dosje mëmë'; +$labels['location'] = 'Vendndodhje'; +$labels['info'] = 'Informacion'; +$labels['getfoldersize'] = 'Klikoni që të kini madhësinë e dosjes'; +$labels['changesubscription'] = 'Klikoni që të ndryshoni pajtimin'; +$labels['foldertype'] = 'Lloj Dosjeje'; +$labels['personalfolder'] = 'Dosje Private'; +$labels['otherfolder'] = 'Dosje Përdoruesi Tjetër'; +$labels['sharedfolder'] = 'Dosje Publike'; +$labels['findfolders'] = 'Gjeni dosje'; $labels['namespace.personal'] = 'Personale'; -$labels['sortby'] = 'Rradhit sipas'; -$labels['sortasc'] = 'Rradhitje rritëse'; -$labels['sortdesc'] = 'Rradhitje zbritëse'; -$labels['undo'] = 'Prapa'; -$labels['version'] = 'Verzioni'; -$labels['license'] = 'Licensa'; +$labels['namespace.other'] = 'Përdorues të tjerë'; +$labels['namespace.shared'] = 'E përbashkët'; +$labels['sortby'] = 'Renditi sipas'; +$labels['sortasc'] = 'Në rend rritës'; +$labels['sortdesc'] = 'Në rend zbritës'; +$labels['undo'] = 'Zhbëje'; +$labels['installedplugins'] = 'Shtojca të instaluara'; +$labels['plugin'] = 'Shtojcë'; +$labels['version'] = 'Version'; +$labels['source'] = 'Burim'; +$labels['license'] = 'Licencë'; +$labels['support'] = 'Merrni asistencë'; $labels['B'] = 'B'; $labels['KB'] = 'KB'; $labels['MB'] = 'MB'; $labels['GB'] = 'GB'; +$labels['unicode'] = 'Unikod'; $labels['english'] = 'Anglisht'; -$labels['arabic'] = 'Arabisht'; -$labels['greek'] = 'Greqisht'; -$labels['hebrew'] = 'Hebre'; -$labels['turkish'] = 'Turqisht'; -$labels['chinese'] = 'Kinez'; -$labels['arialabeltopnav'] = 'Dritarja e kontrollit'; +$labels['westerneuropean'] = 'Europiano-perëndimore'; +$labels['easterneuropean'] = 'Europiano-lindore'; +$labels['southeasterneuropean'] = 'Europiano-juglindore'; +$labels['baltic'] = 'Baltike'; +$labels['cyrillic'] = 'Cirilike'; +$labels['arabic'] = 'Arabike'; +$labels['greek'] = 'Greke'; +$labels['hebrew'] = 'Hebraike'; +$labels['turkish'] = 'Turke'; +$labels['nordic'] = 'Nordike'; +$labels['thai'] = 'Tajlandishte'; +$labels['celtic'] = 'Celtike'; +$labels['vietnamese'] = 'Vietnameze'; +$labels['japanese'] = 'Japoneze'; +$labels['korean'] = 'Koreane'; +$labels['chinese'] = 'Kineze'; +$labels['arialabeltopnav'] = 'Kontroll dritareje'; +$labels['arialabeltasknav'] = 'Akte aplikacioni'; +$labels['arialabeltoolbar'] = 'Panel aplikacioni'; +$labels['arialabelactivetask'] = 'Akte aktive'; +$labels['arialabelmessagessearchfilter'] = 'Filtër kërkimesh email'; +$labels['arialabelmailsearchform'] = 'Formular kërkimi mesazhi email'; +$labels['arialabelcontactsearchform'] = 'Formular kërkimi kontaktesh'; +$labels['arialabelfoldersearchfilter'] = 'Filtër lënde dosjeje'; +$labels['arialabelfoldersearchform'] = 'Formular kërkimi dosjesh'; +$labels['arialabelfolderlist'] = 'Përzgjedhje dosje email'; +$labels['arialabelmessagelist'] = 'Shfaqje Mesazhesh Email'; +$labels['arialabelmailpreviewframe'] = 'Paraparje mesazhi'; +$labels['arialabelmailboxmenu'] = 'Menu veprimesh mbi dosje'; +$labels['arialabellistselectmenu'] = 'Menu përzgjedhjeje liste'; +$labels['arialabelthreadselectmenu'] = 'Menu paraqitje rrjedhash'; +$labels['arialabelmessagelistoptions'] = 'Mundësi mbi shfaqje dhe renditje listash mesazhesh'; +$labels['arialabelmailimportdialog'] = 'Dialog importimi mesazhesh'; +$labels['arialabelmessagenav'] = 'Lëvizje te mesazhi'; +$labels['arialabelmessagebody'] = 'Lëndë Mesazhi'; +$labels['arialabelmessageactions'] = 'Veprime mbi mesazhe'; +$labels['arialabelcontactquicksearch'] = 'Formular kërkimi kontaktesh'; +$labels['arialabelmessageheaders'] = 'Krye mesazhi'; +$labels['arialabelforwardingoptions'] = 'Mundësi përcjelljesh'; +$labels['arialabelreplyalloptions'] = 'Mundësi për Përgjigju-krejt'; +$labels['arialabelmoremessageactions'] = 'Më tepër veprime mbi mesazhe'; +$labels['arialabelmarkmessagesas'] = 'Mesazheve të përzgjedhur vëru shenjë si…'; +$labels['arialabelcomposeoptions'] = 'Mundësi hartimi'; +$labels['arialabelresponsesmenu'] = 'Menu përgjigjesh të parapëgatitura'; +$labels['arialabelattachmentuploadform'] = 'Formular ngarkimi bashkëngjitjesh'; +$labels['arialabelattachmentpreview'] = 'Paraparje bashkëngjitjes'; +$labels['ariasummarycomposecontacts'] = 'Listë kontaktesh dhe grupesh për t’u përzgjedhur si marrës'; +$labels['arialabelcontactexportoptions'] = 'Mundësi eksportimi kontaktesh'; +$labels['arialabelabookgroupoptions'] = 'Mundësi libri adresash/grupi'; +$labels['arialabelpreferencesform'] = 'Formular parapëlqimesh'; +$labels['arialabelidentityeditfrom'] = 'Formular përpunimi identitetesh'; +$labels['arialabelresonseeditfrom'] = 'Formular përpunimi përgigjesh'; +$labels['arialabelsearchterms'] = 'Terma kërkimi'; +$labels['helplistnavigation'] = 'Lëvizje me tastierë në lista'; +$labels['helplistkeyboardnavigation'] = "Shigjeta sipër/poshtë: Zhvendosni fokusin/përzgjedhje në rreshta. +Space: Përzgjidhni rreshtin që ka fokusin. +Shift + up/down: Përzgjidhni rreshta shtesë sipër/poshtë. +Ctrl + Space: Shtojeni rreshtin që ka fokusin te përzgjedhja/heqja nga përzgjedhja."; +$labels['helplistkeyboardnavmessages'] = "Shigjetat majtas/djathtas: zgjeroni/tkurrni rrjedhë mesazhesh (e vlefshme vetëm nën mënyrën rrjedhë). +Enter: Hapni mesazhin e përzgjedhur/atë që ka fokusin. +Delete: Shpjereni mesazhin e përzgjedhur te Hedhurinat."; +$labels['helplistkeyboardnavcontacts'] = "Enter: Hapni kontaktin e përzgjedhur/atë që ka fokusin."; ?> diff --git a/program/localization/sq_AL/messages.inc b/program/localization/sq_AL/messages.inc index f6a65645499..574978c1058 100644 --- a/program/localization/sq_AL/messages.inc +++ b/program/localization/sq_AL/messages.inc @@ -15,61 +15,196 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/ */ -$messages['errortitle'] = 'Një problem është paraqitur!'; -$messages['loginfailed'] = 'Hyrja dështoi'; -$messages['cookiesdisabled'] = 'Shfletuesi juaj nuk i pranon sheqerkat'; -$messages['sessionerror'] = 'Sesioni juaj është i pavlefshëm ose i ka kaluar afati'; -$messages['storageerror'] = 'Lidhja me serverin IMAP dështoi'; -$messages['servererror'] = 'Problem me Serverin!'; -$messages['dberror'] = 'Problem me bazën e të dhënave!'; -$messages['erroroverquotadelete'] = 'Nuk ka hapësirë të lirë. Përdote SHIFT+DEL që të e fshish një mesazh.'; -$messages['nomessagesfound'] = 'Nuk ka mesazhe në këtë kuti postare'; +$messages['errortitle'] = 'Ndodhi një problem!'; +$messages['loginfailed'] = 'Hyrja dështoi.'; +$messages['cookiesdisabled'] = 'Shfletuesi juaj nuk i pranon cookie-t.'; +$messages['sessionerror'] = 'Sesioni juaj është i pavlefshëm ose ka skaduar.'; +$messages['storageerror'] = 'Lidhja me shërbyesin e depozitimit dështoi.'; +$messages['servererror'] = 'Gabim Shërbyesi!'; +$messages['servererrormsg'] = 'Gabim Shërbyesi: $msg'; +$messages['accountlocked'] = 'Numër i madh përpjekjesh për hyrje. Riprovoni më vonë.'; +$messages['connerror'] = 'Gabim Lidhjeje (Dështoi kapja e shërbyesit)!'; +$messages['dberror'] = 'Gabim Baze të Dhënash!'; +$messages['windowopenerror'] = 'Dritarja flluskë u bllokua!'; +$messages['requesttimedout'] = 'Kërkesës i mbaroi koha'; +$messages['errorreadonly'] = 'I pazoti të kryejë operacionin. Dosja është vetëm për lexim.'; +$messages['errornoperm'] = 'I pazoti të kryejë operacionin. Leje të mohuara.'; +$messages['erroroverquota'] = 'I pazoti të kryejë operacionin. S’ka hapësirë të lirë në disk.'; +$messages['erroroverquotadelete'] = 'Nuk ka hapësirë të lirë në disk. Përdorni SHIFT+DEL që të fshini një mesazh.'; +$messages['invalidrequest'] = 'Kërkesë e pavlefshme! Nuk u ruajt ndonjë e dhënë.'; +$messages['invalidhost'] = 'Emër i pavlefshëm shërbyesi.'; +$messages['nomessagesfound'] = 'S’u gjetën mesazhe në këtë kuti postare.'; $messages['loggedout'] = 'Sesionin e mbyllët me sukses. Mirupafshim!'; +$messages['mailboxempty'] = 'Kutia postare është e zbrazët'; +$messages['nomessages'] = 'S’ka mesazhe'; +$messages['refreshing'] = 'Po rifreskohet…'; $messages['loading'] = 'Po ngarkohet...'; +$messages['uploading'] = 'Po ngarkohet skedar…'; +$messages['attaching'] = 'Po bashkëngjitet skedar…'; +$messages['uploadingmany'] = 'Po ngarkohen skedarë…'; $messages['loadingdata'] = 'Po ngarkohen të dhëna...'; -$messages['checkingmail'] = 'Po shoh për mesazhe të reja...'; -$messages['sendingmessage'] = 'Po dërgoj mesazhin...'; -$messages['messagesent'] = 'Mesazhi u dërgua me sukses'; -$messages['savingmessage'] = 'Po ruaj mesazhin...'; -$messages['messagesaved'] = 'Mesazhi u ruajt te kutia Drafte'; -$messages['successfullysaved'] = 'U ruajt me sukses'; -$messages['addedsuccessfully'] = 'Kontakti u shtua me sukses në librin e adresave'; -$messages['contactnameexists'] = 'Një kontakt me emrin e njëjtë tashmë ekziston.'; -$messages['blockedimages'] = 'Për të mbrojtur fshehtësinë tuaj, imazhet e largëta të këtij mesazhi janë bllokuar.'; -$messages['encryptedmessage'] = 'Ky është një mesazh i koduar dhe nuk mund te shfaqet. Më vjen keq!'; -$messages['nocontactsfound'] = 'Nuk ka kontakte'; -$messages['contactnotfound'] = 'Kontakti që kërkoni nuk gjendet'; -$messages['sendingfailed'] = 'Dërgimi i mesazhit dështoi'; -$messages['errormoving'] = 'Nuk e lëviza dot mesazhin'; -$messages['errordeleting'] = 'Nuk e fshiva dot mesazhin'; -$messages['deletecontactconfirm'] = 'Me të vërtetë doni ti fshini kontaktet e zgjedhura?'; -$messages['deletemessagesconfirm'] = 'Me të vërtetë doni ti fshini mesazhet e zgjedhura?'; -$messages['deletefolderconfirm'] = 'Me të vërtetë doni ta fshini këtë kuti?'; -$messages['purgefolderconfirm'] = 'Me të vërtetë doni ti fshini të gjitha mesazhet në këtë kuti?'; -$messages['formincomplete'] = 'Formulari nuk ishte i gjithi i plotësuar'; -$messages['noemailwarning'] = 'Ju lutem jepni një adresë email të rregullt'; -$messages['nonamewarning'] = 'Ju lutem jepni një emër'; -$messages['nopagesizewarning'] = 'Ju lutem jepni nje madhësi për faqen'; -$messages['norecipientwarning'] = 'Ju lutem shënoni të paktën një marrës'; -$messages['nosubjectwarning'] = 'Fusha e temës është bosh. Dëshironi të shënoni një temë tani?'; -$messages['nobodywarning'] = 'Ta dërgoj mesazhin pa tekst?'; -$messages['notsentwarning'] = 'Mesazhi nuk u dërgua. Doni ta hidhni poshtë mesazhin?'; -$messages['noldapserver'] = 'Ju lutem jepni një server ldap për të kërkuar'; -$messages['nosearchname'] = 'Ju lutem jepni një adresë email ose një emër kontakti'; -$messages['searchsuccessful'] = 'U gjetën $nr mesazhe'; -$messages['searchnomatch'] = 'Kërkimi nuk gjeti gjë'; -$messages['searching'] = 'Po kërkoj...'; -$messages['checking'] = 'Po kontrolloj...'; -$messages['nospellerrors'] = 'Nuk u gjetën gabime'; -$messages['folderdeleted'] = 'Kutia u fshi me sukses'; -$messages['deletedsuccessfully'] = 'U fshi me sukses'; -$messages['converting'] = 'Po i heq formatimin mesazhit...'; -$messages['messageopenerror'] = 'Nuk marr dot mesazhe nga serveri'; -$messages['fileuploaderror'] = 'Ngarkimi i skedarit dështoi'; -$messages['filesizeerror'] = 'Skedari i ngarkuar e kalon madhësinë kufi prej $size'; -$messages['sourceisreadonly'] = 'Ky burim adrese është vetëm i lexueshëm'; -$messages['errorsavingcontact'] = 'Nuk e ruajta dot adresën e kontaktit'; -$messages['movingmessage'] = 'Po lëviz mesazhin...'; -$messages['receiptsent'] = 'U dërgua me sukses një njoftim leximi'; -$messages['errorsendingreceipt'] = 'Nuk mund të dërgohet njoftimi'; -$messages['nodeletelastidentity'] = 'Ju nuk mund ta fshini këtë identitet sepse nuk ju ka mbetur tjetër.'; +$messages['checkingmail'] = 'Po kontrollohet për mesazhe të rinj...'; +$messages['sendingmessage'] = 'Po dërgohet mesazhi...'; +$messages['messagesent'] = 'Mesazhi u dërgua me sukses.'; +$messages['savingmessage'] = 'Po ruhet mesazhi...'; +$messages['messagesaved'] = 'Mesazhi u ruajt te Skicat'; +$messages['successfullysaved'] = 'U ruajt me sukses.'; +$messages['savingresponse'] = 'Po ruhet tekst përgjigjeje…'; +$messages['deleteresponseconfirm'] = 'Doni vërtet të fshihet ky tekst përgjigjeje?'; +$messages['addedsuccessfully'] = 'Kontakti u shtua me sukses në librin e adresave.'; +$messages['contactexists'] = 'Ka tashmë një kontakt me të njëjtën adresë email.'; +$messages['contactnameexists'] = 'Ka tashmë një kontakt me të njëjtin emër.'; +$messages['blockedimages'] = 'Që të mbrohet privatësia juaj, figurat e largëta të këtij mesazhi janë bllokuar.'; +$messages['encryptedmessage'] = 'Ky është një mesazh i fshehtëzuar dhe nuk mund të shfaqet. Na ndjeni!'; +$messages['externalmessagedecryption'] = 'Ky është një mesazh i fshehtëzuar dhe mund të çfshehtëzohet me zgjerimin e shfletuesit tuaj.'; +$messages['nopubkeyfor'] = 'S’u gjet kyç i vlefshëm publik për $email'; +$messages['nopubkeyforsender'] = 'S’u gjet kyç i vlefshëm publik për identitetin e dërguesit tuaj. Doni të fshehtëzohet mesazhi vetëm për marrësit?'; +$messages['encryptnoattachments'] = 'Bashkëngjitjet tashmë të ngarkuara s’mund të fshehtëzohen. Ju lutemi, rishtojini te përpunuesi i fshehtëzimeve.'; +$messages['searchpubkeyservers'] = 'Doni të kërkohet në shërbyes publikë kyçesh për kyçin që mungon?'; +$messages['encryptpubkeysfound'] = 'U gjetën kyçet publikë vijues:'; +$messages['keyservererror'] = 'Dështoi marrja e kyçit nga shërbyesi i kyçeve.'; +$messages['keyimportsuccess'] = 'Kyçi publik $key u importua me sukses te vargu juaj i lyçeve'; +$messages['nocontactsfound'] = 'S’u gjetën kontakte.'; +$messages['contactnotfound'] = 'S’u gjet kontakti i kërkuar.'; +$messages['contactsearchonly'] = 'Jepni ndonjë term kërkimi që të gjeni kontakte'; +$messages['sendingfailed'] = 'Dërgimi i mesazhit dështoi.'; +$messages['senttooquickly'] = 'Ju lutemi, prisni $sec sekondë(a) përpara se të dërgohet ky mesazh.'; +$messages['errorsavingsent'] = 'Ndodhi një gabim teksa ruhej mesazhi i dërguar.'; +$messages['errorsaving'] = 'Ndodhi një gabim gjatë ruajtjes.'; +$messages['errormoving'] = 'S’u lëviz dot mesazhi(et).'; +$messages['errorcopying'] = 'S’u kopjua dot mesazhi(et).'; +$messages['errordeleting'] = 'S’u fshi dot mesazhi(et).'; +$messages['errormarking'] = 'S’iu vu dot shenjë mesazhit(eve).'; +$messages['deletecontactconfirm'] = 'Doni vërtet të fshihet kontakti(et) i përzgjedhur?'; +$messages['deletegroupconfirm'] = 'Doni vërtet të fshihet grupi i përzgjedhur?'; +$messages['deletemessagesconfirm'] = 'Doni vërtet të fshihet mesazhi(et) i përzgjedhur?'; +$messages['deletefolderconfirm'] = 'Doni vërtet të fshihet kjo dosje?'; +$messages['purgefolderconfirm'] = 'Doni vërtet të fshihen krejt mesazhet në këtë dosje?'; +$messages['contactdeleting'] = 'Po fshihet kontakti(et)…'; +$messages['groupdeleting'] = 'Po fshihet grupi…'; +$messages['folderdeleting'] = 'Po fshihet dosja…'; +$messages['foldermoving'] = 'Po lëvizet dosja…'; +$messages['foldersubscribing'] = 'Po pajtohet te dosja…'; +$messages['folderunsubscribing'] = 'Po hiqet pajtimi te dosja…'; +$messages['formincomplete'] = 'Formulari s’u plotësua i tëri.'; +$messages['noemailwarning'] = 'Ju lutemi, jepni një adresë email të vlefshme.'; +$messages['nonamewarning'] = 'Ju lutemi, jepni një emër.'; +$messages['nopagesizewarning'] = 'Ju lutemi, jepni një madhësi faqeje.'; +$messages['nosenderwarning'] = 'Ju lutemi, jepni adresë email të dërguesit.'; +$messages['norecipientwarning'] = 'Ju lutemi, jepni të paktën një marrës.'; +$messages['disclosedrecipwarning'] = 'Krejt pjesëmarrësit do të shohin adresat email të njëri-tjetrit.'; +$messages['disclosedreciptitle'] = 'Shumë pjesëmarrës publikë'; +$messages['nosubjectwarning'] = 'Fusha "Subjekt" është e zbrazët. Do të donit të jepnit një tani?'; +$messages['nosubjecttitle'] = 'S’ka subjekt'; +$messages['nobodywarning'] = 'Të dërgohet mesazhi pa tekst?'; +$messages['notsentwarning'] = 'Mesazhi s’u dërgua. Doni ta hidhni tej mesazhin tuaj?'; +$messages['restoresavedcomposedata'] = 'U gjet një mesazh i hartuar më parë, por i padërguar.\n\nSubjekt: $subject\nRuajtur më: $date\n\nDoni të rimerret ky mesazh?'; +$messages['noldapserver'] = 'Ju lutemi, jepni një shërbyes ldap ku të kërkohet.'; +$messages['nosearchname'] = 'Ju lutemi, jepni emër kontakti ose adresë email.'; +$messages['notuploadedwarning'] = 'S’janë ngarkuar ende krejt bashkëngjitjet. Ju lutemi, prisni ose anulojeni ngarkimin.'; +$messages['searchsuccessful'] = 'U gjetën $nr mesazhe.'; +$messages['contactsearchsuccessful'] = 'U gjetën $nr kontakte.'; +$messages['searchnomatch'] = 'Kërkimi nuk gjeti gjë.'; +$messages['searching'] = 'Po kërkohet…'; +$messages['checking'] = 'Po kontrollohet…'; +$messages['stillsearching'] = 'Ende në kërkim…'; +$messages['nospellerrors'] = 'S’u gjetën gabime drejtshkrimi.'; +$messages['folderdeleted'] = 'Dosja u fshi me sukses.'; +$messages['foldersubscribed'] = 'Pajtimi te dosja u krye me sukses.'; +$messages['folderunsubscribed'] = 'Pajtimi te dosja u hoq me sukses.'; +$messages['folderpurged'] = 'Dosja u zbraz me sukses.'; +$messages['folderexpunged'] = 'Dosja u ngjesh me sukses.'; +$messages['deletedsuccessfully'] = 'U fshi me sukses.'; +$messages['converting'] = 'Po i hiqet formatimi…'; +$messages['messageopenerror'] = 'S’u ngarkuan dot mesazhe që nga shërbyesi.'; +$messages['filelinkerror'] = 'Dështoi bashkëngjitja e skedarit.'; +$messages['fileuploaderror'] = 'Dështoi ngarkimi i skedarit.'; +$messages['filesizeerror'] = 'Skedari i ngarkuar e tejkalon madhësinë maksimum prej $size.'; +$messages['filecounterror'] = 'Mund të ngarkoni maksimumi $count kartela njëherësh.'; +$messages['msgsizeerror'] = 'Dështoi bashkëngjitja e një kartele. Tejkalohej madhësi maksimum e një mesazhi ($size).'; +$messages['copysuccess'] = 'U kopjuan me sukses $nr kontakte.'; +$messages['movesuccess'] = 'U lëvizën me sukses $nr kontakte.'; +$messages['copyerror'] = 'S’u kopjua dot ndonjë kontakt.'; +$messages['moveerror'] = 'S’u lëviz dot ndonjë kontakt.'; +$messages['sourceisreadonly'] = 'Ky burim adrese është vetëm i lexueshëm.'; +$messages['errorsavingcontact'] = 'S’u ruajt dot adresa e kontaktit.'; +$messages['movingmessage'] = 'Po lëvizet mesazhi(et)...'; +$messages['copyingmessage'] = 'Po kopjohet mesazhi(et)…'; +$messages['copyingcontact'] = 'Po kopjohet kontakti(et)…'; +$messages['movingcontact'] = 'Po lëvizet kontakti(et)…'; +$messages['deletingmessage'] = 'Po fshihet mesazhi(et)…'; +$messages['markingmessage'] = 'Po i vihet shenjë mesazhit(et)…'; +$messages['addingmember'] = 'Po shtohet kontakti(et) te grupi…'; +$messages['removingmember'] = 'Po hiqet kontakti(et) nga grupi…'; +$messages['receiptsent'] = 'U dërgua me sukses dëftesë leximi.'; +$messages['errorsendingreceipt'] = 'S’u dërgua dot dëftesa.'; +$messages['deleteidentityconfirm'] = 'Doni vërtet të fshihet ky identitet?'; +$messages['nodeletelastidentity'] = 'Këtë identitet s’mund ta fshini, është i fundit i juaji.'; +$messages['forbiddencharacter'] = 'Emri i dosjes përmban një shenjë të ndaluar.'; +$messages['selectimportfile'] = 'Ju lutemi, përzgjidhni skedar për ngarkim.'; +$messages['addresswriterror'] = 'Libri i adresave i përzgjedhur s’është i shkrueshëm.'; +$messages['contactaddedtogroup'] = 'Kontaktet u shtuan me sukses te ky grup.'; +$messages['contactremovedfromgroup'] = 'Kontaktet u hoqën me sukses nga ky grup.'; +$messages['nogroupassignmentschanged'] = 'S’pati ndryshime në përshoqërime grupi.'; +$messages['importwait'] = 'Po importohet, ju lutemi, prisni…'; +$messages['importformaterror'] = 'Importimi dështoi! Skedari i ngarkuar s’është skedar i vlefshëm të dhënash importimi.'; +$messages['importconfirm'] = 'U importuan me sukses $inserted kontakte'; +$messages['importconfirmskipped'] = 'U anashkaluan $skipped zëra ekzistues'; +$messages['importmessagesuccess'] = 'U importuan me sukses $nr mesazhe'; +$messages['importmessageerror'] = 'Importimi dështoi! Skedari i ngarkuar s’është skedar i vlefshëm mesazhi apo kutie postare'; +$messages['opnotpermitted'] = 'Operacion i palejuar!'; +$messages['nofromaddress'] = 'Në identitetin e përzgjedhur mungon adresë email.'; +$messages['editorwarning'] = 'Këmbimi i llojit të përpunuesit mund të shkaktojë humbjen e formatimit të tekstit. Doni të vazhdohet?'; +$messages['httpreceivedencrypterror'] = 'Ndodhi një gabim fatal formësimi. Lidhuni menjëherë me përgjegjësin tuaj. Mesazhi juaj s’u dërgua dot.'; +$messages['smtpconnerror'] = 'Gabim SMTP ($code): Lidhja me shërbyesin dështoi.'; +$messages['smtpautherror'] = 'Gabim SMTP ($code): Mirëfilltësimi dështoi.'; +$messages['smtpfromerror'] = 'Gabim SMTP ($code): Dështoi rregullimi i dërguesit "$from" ($msg).'; +$messages['smtptoerror'] = 'Gabim SMTP ($code): Dështoi shtimi i marrësit "$to" ($msg).'; +$messages['smtprecipientserror'] = 'Gabim SMTP: S’arrihet të përtypet lista e marrësve.'; +$messages['smtperror'] = 'Gabim SMTP: $msg'; +$messages['emailformaterror'] = 'Adresë email e pavlefshme: $email'; +$messages['toomanyrecipients'] = 'Shumë marrës. Zvogëloni numrin e marrësve deri në $max.'; +$messages['maxgroupmembersreached'] = 'Numri i anëtarëve të grupit e tejkalon maksimumin prej $max.'; +$messages['internalerror'] = 'Ndodhi një gabim i brendshëm. Ju lutemi, riprovoni.'; +$messages['contactdelerror'] = 'S’u fshi dot kontakti(et).'; +$messages['contactdeleted'] = 'Kontakti(et) u fshi me sukses.'; +$messages['contactrestoreerror'] = 'S’u rikthye dot kontakti(et) i fshirë.'; +$messages['contactrestored'] = 'Kontakti(et) u rikthye me sukses.'; +$messages['groupdeleted'] = 'Grupi u fshi me sukses.'; +$messages['grouprenamed'] = 'Grupi u riemërtua me sukses.'; +$messages['groupcreated'] = 'Grupi u krijua me sukses.'; +$messages['savedsearchdeleted'] = 'Kërkimi i ruajtur u fshi me sukses.'; +$messages['savedsearchdeleteerror'] = 'S’u fshi dot kërkimi i ruajtur.'; +$messages['savedsearchcreated'] = 'Kërkimi i ruajtur u krijua me sukses.'; +$messages['savedsearchcreateerror'] = 'S’u krijua dot kërkimi i ruajtur.'; +$messages['messagedeleted'] = 'Mesazhi(et) u fshi me sukses.'; +$messages['messagemoved'] = 'Mesazhi(et) u lëviz me sukses.'; +$messages['messagemovedtotrash'] = 'Mesazhi(et) u shpunë me sukses te Hedhurinat.'; +$messages['messagecopied'] = 'Mesazhi(et) u kopjua me sukses.'; +$messages['messagemarked'] = 'Mesazhi(et) iu vu shenjë me sukses.'; +$messages['autocompletechars'] = 'Për vetëplotësim jepni të paktën $min shenjë.'; +$messages['autocompletemore'] = 'U gjetën më tepër zëra me përputhje. Ju lutemi, shtypni më tepër shenja.'; +$messages['namecannotbeempty'] = 'Emri s’mund të jetë i zbrazët.'; +$messages['nametoolong'] = 'Emri është shumë i gjatë.'; +$messages['namedotforbidden'] = 'Emri i dosjes s’mund të fillojë me një pikë.'; +$messages['folderupdated'] = 'Dosja u përditësua me sukses.'; +$messages['foldercreated'] = 'Dosja u krijua me sukses.'; +$messages['invalidimageformat'] = 'Format i pavlefshëm figure.'; +$messages['mispellingsfound'] = 'U pikasën gabime drejtshkrimi te mesazhi.'; +$messages['parentnotwritable'] = 'I pazoti të krijojë/lëvizë dosje te dosja mëmë e përzgjedhur. Pa të drejta hyrjeje.'; +$messages['messagetoobig'] = 'Pjesa e mesazhit është shumë e madhe për ta përpunuar.'; +$messages['attachmentvalidationerror'] = 'KUJDES! Kjo bashkëngjitje është e dyshimtë, ngaqë lloji i saj nuk përputhet me llojin e deklaruar në mesazh. Nëse nuk i zini besë dërguesit, nuk do të duhej ta hapnit atë që nga shfletuesi, meqë mund të përmbajë lëndë dashakeqe.

    Pritej: $expected; u gjet: $detected'; +$messages['noscriptwarning'] = 'Kujdes: Ky shërbyes webmail lyp Javascript! Që të mund ta përdorni, ju lutemi, aktivizoni Javascript-in te rregullimet e shfletuesit tuaj.'; +$messages['messageissent'] = 'Mesazhi qe dërguar tashmë, por nuk qe ruajtur ende. Doni ta ruani tani?'; +$messages['errnotfound'] = 'Skedar Që S’gjendet'; +$messages['errnotfoundexplain'] = 'Burimi i kërkuar nuk u gjet!'; +$messages['errfailedrequest'] = 'Kërkesë e dështuar'; +$messages['errauthorizationfailed'] = 'Mirëfilltësimi Dështoi'; +$messages['errunauthorizedexplain'] = 'S’u verifikua dot se jeni i autorizuar të hyni në këtë shërbim!'; +$messages['errrequestcheckfailed'] = 'Dështoi Kontrolli i Kërkesës'; +$messages['errcsrfprotectionexplain'] = "Për hir të mbrojtjes tuaj, hyrja në këtë burim është e siguruar kundrejt CSRF-së.\nNëse e shihni këtë sinjalizim, ka gjasa që nuk bëtë daljen para se të dilnit nga aplikacioni web.\n\nQë të vazhdohet, tani lypset ndërveprim nga qenie njerëzore."; +$messages['errcontactserveradmin'] = 'Ju lutemi, lidhuni me përgjegjësin e shërbyesit tuaj.'; +$messages['clicktoresumesession'] = 'Klikoni këtu që të të rimerret sesioni juaj i mëparshëm'; +$messages['errcomposesession'] = 'Gabim sesioni hartimi'; +$messages['errcomposesessionexplain'] = 'S’u gjet sesioni i kërkuar i hartimit.'; +$messages['clicktocompose'] = 'Klikoni këtu që të hartoni një mesazh të ri'; diff --git a/program/localization/sv_SE/labels.inc b/program/localization/sv_SE/labels.inc index a2fa2230b8a..864900b118b 100644 --- a/program/localization/sv_SE/labels.inc +++ b/program/localization/sv_SE/labels.inc @@ -128,6 +128,10 @@ $labels['markunread'] = 'Oläst'; $labels['markflagged'] = 'Flaggat'; $labels['markunflagged'] = 'Oflaggat'; $labels['moreactions'] = 'Fler åtgärder...'; +$labels['markallread'] = 'Märk alla som lästa'; +$labels['folders-cur'] = 'Markerad katalog'; +$labels['folders-sub'] = 'Markerad katalog med underkataloger'; +$labels['folders-all'] = 'Alla kataloger'; $labels['more'] = 'Fler'; $labels['back'] = 'Tillbaka'; $labels['options'] = 'Alternativ'; @@ -172,6 +176,10 @@ $labels['listcolumns'] = 'Kolumner'; $labels['listsorting'] = 'Sortering'; $labels['listorder'] = 'Ordning'; $labels['listmode'] = 'Visningsläge'; +$labels['layout'] = 'Layout'; +$labels['layoutwidescreen'] = 'Bredbild'; +$labels['layoutdesktop'] = 'Skrivbord'; +$labels['layoutlist'] = 'Lista'; $labels['folderactions'] = 'Hantera kataloger...'; $labels['compact'] = 'Packa'; $labels['empty'] = 'Töm'; @@ -229,6 +237,7 @@ $labels['keyid'] = 'Nyckel-ID'; $labels['keylength'] = 'Bitar'; $labels['keyexpired'] = 'Utgången'; $labels['keyrevoked'] = 'Upphävd'; +$labels['bccinstead'] = 'Använd Dold kopia'; $labels['editidents'] = 'Ändra identiteter'; $labels['spellcheck'] = 'Rättstava'; $labels['checkspelling'] = 'Kontrollera stavning'; @@ -253,6 +262,7 @@ $labels['uploadprogress'] = '$percent ($current av $total)'; $labels['close'] = 'Stäng'; $labels['messageoptions'] = 'Meddelandealternativ...'; $labels['togglecomposeoptions'] = 'Växla skapandeinställningar'; +$labels['attachmentrename'] = 'Ändra bilagans namn'; $labels['low'] = 'Låg'; $labels['lowest'] = 'Lägst'; $labels['normal'] = 'Normal'; diff --git a/program/localization/sv_SE/messages.inc b/program/localization/sv_SE/messages.inc index 609a6c78adc..29fc34b21e4 100644 --- a/program/localization/sv_SE/messages.inc +++ b/program/localization/sv_SE/messages.inc @@ -92,7 +92,10 @@ $messages['nonamewarning'] = 'Ange ett namn.'; $messages['nopagesizewarning'] = 'Ange en sidstorlek.'; $messages['nosenderwarning'] = 'Ange en avsändaradress.'; $messages['norecipientwarning'] = 'Ange minst en mottagare.'; +$messages['disclosedrecipwarning'] = 'Alla mottagare kommer att kunna se varandras adresser. Undvik detta genom att ange adresserna i fältet Dold kopia istället.'; +$messages['disclosedreciptitle'] = 'Alltför många mottagaradresser'; $messages['nosubjectwarning'] = 'Ämnesraden är tom. Vill du ange ett ämne nu?'; +$messages['nosubjecttitle'] = 'Inget ämne'; $messages['nobodywarning'] = 'Skicka det här meddelandet utan text?'; $messages['notsentwarning'] = 'Meddelandet har inte skickats. Vill du avbryta meddelandet?'; $messages['restoresavedcomposedata'] = 'Ett tidigare skrivet men inte skickat meddelande upptäcktes.\n\nÄmne: $subject\nSparat: $date\n\nVill du återskapa meddelandet?'; @@ -117,6 +120,8 @@ $messages['messageopenerror'] = 'Meddelandet kunde inte hämtas från servern.'; $messages['filelinkerror'] = 'Filen kunde inte bifogas.'; $messages['fileuploaderror'] = 'Filuppladdning misslyckades.'; $messages['filesizeerror'] = 'Den uppladdade filens storlek överstiger högsta tillåtna $size.'; +$messages['filecounterror'] = 'Högst $count filer kan laddas upp samtidigt.'; +$messages['msgsizeerror'] = 'Filen kunde inte bifogas. Största tillåtna storlek ($size) överskreds.'; $messages['copysuccess'] = '$nr kontakter har kopierats.'; $messages['movesuccess'] = '$nr kontakter har flyttats.'; $messages['copyerror'] = 'Några kontakter kunde inte kopieras.'; diff --git a/program/localization/th_TH/labels.inc b/program/localization/th_TH/labels.inc index 8e3e068f892..c545beb9f8e 100644 --- a/program/localization/th_TH/labels.inc +++ b/program/localization/th_TH/labels.inc @@ -46,14 +46,17 @@ $labels['mailboxlist'] = 'กล่องจดหมาย'; $labels['messagesfromto'] = 'จดหมายจาก $from ถึง $to จำนวน $count ฉบับ'; $labels['messagenrof'] = 'จดหมายฉบับที่ $nr จาก $count ฉบับ'; $labels['copy'] = 'คัดลอก'; -$labels['move'] = 'เลื่อน'; +$labels['move'] = 'ย้าย'; $labels['moveto'] = 'ย้ายไป...'; +$labels['copyto'] = 'คัดลอกไป...'; $labels['download'] = 'ดาวน์โหลด'; +$labels['open'] = 'เปิด'; $labels['showattachment'] = 'แสดง'; +$labels['showanyway'] = 'แสดงตลอด'; $labels['filename'] = 'ชื่อไฟล์'; $labels['filesize'] = 'ขนาดไฟล์'; $labels['addtoaddressbook'] = 'บันทึกในสมุดรายชื่อ'; -$labels['sun'] = 'อ'; +$labels['sun'] = 'อา'; $labels['mon'] = 'จ'; $labels['tue'] = 'อ'; $labels['wed'] = 'พ'; @@ -118,17 +121,29 @@ $labels['markmessages'] = 'ทำเครื่องหมายข้อ $labels['markread'] = 'ว่าอ่านแล้ว'; $labels['markunread'] = 'ว่ายังไม่ได้อ่าน'; $labels['moreactions'] = 'การกระทำเพิ่มเติม...'; +$labels['markallread'] = 'ทำว่าอ่านแล้ว'; +$labels['folders-cur'] = 'เลือกเฉพาะโฟเดอร์'; +$labels['folders-sub'] = 'เลือกโฟเดอร์และโฟเดอร์ย่อย'; +$labels['folders-all'] = 'ทุกโฟเดอร์'; $labels['more'] = 'เพิ่มเติม'; $labels['back'] = 'ย้อนกลับ'; $labels['options'] = 'ตัวเลือก'; +$labels['first'] = 'แรก'; +$labels['last'] = 'ล่าสุด'; +$labels['previous'] = 'ก่อนหน้า'; +$labels['next'] = 'ถัดไป'; $labels['select'] = 'เลือก'; $labels['all'] = 'ทั้งหมด'; $labels['none'] = 'ไม่เลือก'; $labels['currpage'] = 'หน้าปัจจุบัน'; +$labels['isread'] = 'อ่าน'; $labels['unread'] = 'จดหมายที่ไม่ได้อ่าน'; +$labels['flagged'] = 'ปักธง'; +$labels['unflagged'] = 'ไม่ปักธง'; $labels['unanswered'] = 'ยังไม่ได้ตอบ'; $labels['deleted'] = 'ลบแล้ว'; $labels['undeleted'] = 'ยังไม่ได้ลบ'; +$labels['forwarded'] = 'ส่งต่อแล้ว'; $labels['filter'] = 'ตัวกรองข้อมูล'; $labels['list'] = 'รายการ'; $labels['expand-all'] = 'แสดงทั้งหมด'; diff --git a/program/localization/tr_TR/labels.inc b/program/localization/tr_TR/labels.inc index 6d77b8ed6ec..c0f2370cdb9 100644 --- a/program/localization/tr_TR/labels.inc +++ b/program/localization/tr_TR/labels.inc @@ -19,25 +19,25 @@ $labels['welcome'] = '$product E-Posta Sistemine Hoş Geldiniz'; $labels['username'] = 'Kullanıcı Adı'; $labels['password'] = 'Parola'; $labels['server'] = 'Sunucu'; -$labels['login'] = 'Oturum Aç'; -$labels['logout'] = 'Kapat'; -$labels['mail'] = 'E-Posta'; +$labels['login'] = 'Oturum Açın'; +$labels['logout'] = 'Oturumu Kapat'; +$labels['mail'] = 'İletiler'; $labels['settings'] = 'Ayarlar'; $labels['addressbook'] = 'Adresler'; $labels['inbox'] = 'Gelen'; -$labels['drafts'] = 'Taslaklar'; +$labels['drafts'] = 'Taslak'; $labels['sent'] = 'Giden'; $labels['trash'] = 'Çöp'; $labels['junk'] = 'İstenmeyen'; -$labels['show_real_foldernames'] = 'Özel klasörler için gerçek isimleri göster'; +$labels['show_real_foldernames'] = 'Özel klasörlerin gerçek adları görüntülensin'; $labels['subject'] = 'Konu'; $labels['from'] = 'Gönderen'; $labels['sender'] = 'Gönderici'; $labels['to'] = 'Alıcı'; -$labels['cc'] = 'İlgili Kopyası'; +$labels['cc'] = 'Kopya'; $labels['bcc'] = 'Gizli Kopya'; -$labels['replyto'] = 'Yanıtla'; -$labels['followupto'] = 'Takip adresi'; +$labels['replyto'] = 'Yanıt Adresi'; +$labels['followupto'] = 'İzleme adresi'; $labels['date'] = 'Tarih'; $labels['size'] = 'Boyut'; $labels['priority'] = 'Öncelik'; @@ -45,18 +45,18 @@ $labels['organization'] = 'Kuruluş'; $labels['readstatus'] = 'Okunma durumu'; $labels['listoptions'] = 'Seçenekleri listele...'; $labels['mailboxlist'] = 'Klasörler'; -$labels['messagesfromto'] = 'Postalar: $from - $to , Toplam: $count'; -$labels['threadsfromto'] = 'Postalar: $from - $to, Toplam $count'; -$labels['messagenrof'] = 'Posta: $nr / $count'; +$labels['messagesfromto'] = 'İletiler: $from - $to , Toplam: $count'; +$labels['threadsfromto'] = 'Sohbetler: $from - $to, Toplam $count'; +$labels['messagenrof'] = 'İleti: $nr / $count'; $labels['fromtoshort'] = '$from - $to , Toplam: $count'; $labels['copy'] = 'Kopyala'; $labels['move'] = 'Taşı'; -$labels['moveto'] = 'Şuraya taşı...'; -$labels['copyto'] = 'Şuraya kopyala...'; +$labels['moveto'] = 'Şuraya Taşı...'; +$labels['copyto'] = 'Şuraya Kopyala...'; $labels['download'] = 'İndir'; $labels['open'] = 'Aç'; -$labels['showattachment'] = 'Göster'; -$labels['showanyway'] = 'Yine de göster'; +$labels['showattachment'] = 'Görüntüle'; +$labels['showanyway'] = 'Yine de görüntülensin'; $labels['filename'] = 'Dosya Adı'; $labels['filesize'] = 'Dosya Boyutu'; $labels['addtoaddressbook'] = 'Adres Defterine Ekle'; @@ -100,99 +100,107 @@ $labels['longnov'] = 'Kasım'; $labels['longdec'] = 'Aralık'; $labels['today'] = 'Bugün'; $labels['refresh'] = 'Yenile'; -$labels['checkmail'] = 'Yeni Postaları Kontrol Et'; -$labels['compose'] = 'E-Posta Yaz'; -$labels['writenewmessage'] = 'Yeni posta oluştur'; +$labels['checkmail'] = 'Yeni İletileri Denetle'; +$labels['compose'] = 'İleti Gönder'; +$labels['writenewmessage'] = 'Yeni İleti Oluştur'; $labels['reply'] = 'Yanıtla'; -$labels['replytomessage'] = 'Gönderene Yanıt Ver'; -$labels['replytoallmessage'] = 'Gönderene ve Tüm Alıcılara Yanıt Ver'; -$labels['replyall'] = 'Tümüne Yanıt Ver'; -$labels['replylist'] = 'Listeye Yanıt Ver'; +$labels['replytomessage'] = 'Gönderene Yanıtla'; +$labels['replytoallmessage'] = 'Gönderen ve Tüm Alıcılara Yanıtla'; +$labels['replyall'] = 'Toplu Yanıtla'; +$labels['replylist'] = 'Listeye Yanıtla'; $labels['forward'] = 'İlet'; -$labels['forwardinline'] = 'Postanın içinde ilet'; -$labels['forwardattachment'] = 'Eklenti Olarak İlet'; -$labels['forwardmessage'] = 'Postayı İlet'; -$labels['deletemessage'] = 'Postayı Sil'; -$labels['movemessagetotrash'] = 'Postayı Çöpe Taşı'; -$labels['printmessage'] = 'Postayı Yazdır'; -$labels['previousmessage'] = 'Önceki Posta'; -$labels['firstmessage'] = 'İlk Posta'; -$labels['nextmessage'] = 'Sonraki Posta'; -$labels['lastmessage'] = 'Son Posta'; -$labels['backtolist'] = 'Posta Listesine Dön'; -$labels['viewsource'] = 'Kaynağı Göster'; +$labels['forwardinline'] = 'Postanın İçinde İlet'; +$labels['forwardattachment'] = 'Dosya Eki Olarak İlet'; +$labels['forwardmessage'] = 'İletiyi İlet'; +$labels['deletemessage'] = 'İletiyi Sil'; +$labels['movemessagetotrash'] = 'İletiyi Çöpe At'; +$labels['printmessage'] = 'İletiyi Yazdır'; +$labels['previousmessage'] = 'Önceki ileti'; +$labels['firstmessage'] = 'İlk İleti'; +$labels['nextmessage'] = 'Sonraki İleti'; +$labels['lastmessage'] = 'Son İleti'; +$labels['backtolist'] = 'İleti Listesine Dön'; +$labels['viewsource'] = 'Kaynağı Görüntüle'; $labels['mark'] = 'İşaretle'; -$labels['markmessages'] = 'Postaları İşaretle'; +$labels['markmessages'] = 'İletileri işaretle'; $labels['markread'] = 'Okunmuş Olarak'; $labels['markunread'] = 'Okunmamış Olarak'; -$labels['markflagged'] = 'İşaretli Olarak'; -$labels['markunflagged'] = 'İşaretsiz Olarak'; -$labels['moreactions'] = 'Diğer İşlemler'; -$labels['more'] = 'Daha Fazla'; +$labels['markflagged'] = 'İşaretlenmiş Olarak'; +$labels['markunflagged'] = 'İşaretlenmemiş Olarak'; +$labels['moreactions'] = 'Diğer İşlemler...'; +$labels['markallread'] = 'Tümünü Okundu Olarak İşaretle'; +$labels['folders-cur'] = 'Yalnız Seçilmiş Klasör'; +$labels['folders-sub'] = 'Seçilmiş Klasör ve Alt Klasörleri'; +$labels['folders-all'] = 'Tüm Klasörler'; +$labels['more'] = 'Diğer'; $labels['back'] = 'Geri'; -$labels['options'] = 'Seçenekler'; +$labels['options'] = 'Ayarlar'; $labels['first'] = 'İlk'; $labels['last'] = 'Son'; $labels['previous'] = 'Önceki'; $labels['next'] = 'Sonraki'; $labels['select'] = 'Seç'; -$labels['all'] = 'Hepsini'; +$labels['all'] = 'Tümü'; $labels['none'] = 'Yok'; -$labels['currpage'] = 'Şimdiki sayfa'; +$labels['currpage'] = 'Geçerli Sayfa'; $labels['isread'] = 'Oku'; $labels['unread'] = 'Okunmamışları'; -$labels['flagged'] = 'İşaretlenmişleri'; +$labels['flagged'] = 'İşaretlenmişler'; $labels['unflagged'] = 'İşaretlenmemişleri'; $labels['unanswered'] = 'Yanıtlanmamışları'; -$labels['withattachment'] = 'Eklenti ile'; -$labels['deleted'] = 'Silindi'; -$labels['undeleted'] = 'Silinmedi'; -$labels['replied'] = 'Cevaplandı'; -$labels['forwarded'] = 'Yönlendirildi'; -$labels['invert'] = 'Seçimi Tersine Çevir'; -$labels['filter'] = 'Göster'; +$labels['withattachment'] = 'Dosya Eki Olanlar'; +$labels['deleted'] = 'Silinmişler'; +$labels['undeleted'] = 'Silinmemişler'; +$labels['replied'] = 'Yanıtlandı'; +$labels['forwarded'] = 'İletildi'; +$labels['invert'] = 'Seçimi Ters Çevir'; +$labels['filter'] = 'Süz'; $labels['list'] = 'Liste'; -$labels['threads'] = 'Dizilimler'; -$labels['expand-all'] = 'Tümünü genişlet'; -$labels['expand-unread'] = 'Okunmamışları genişlet'; -$labels['collapse-all'] = 'Tümünü daralt'; -$labels['threaded'] = 'Dizilimli'; -$labels['autoexpand_threads'] = 'Dizilimleri aç'; -$labels['do_expand'] = 'tüm dizilimler'; -$labels['expand_only_unread'] = 'sadece okunmamış posta içeren dizilimler'; +$labels['threads'] = 'Sohbetler'; +$labels['expand-all'] = 'Tümünü Genişlet'; +$labels['expand-unread'] = 'Okunmamışları Genişlet'; +$labels['collapse-all'] = 'Tümünü Daralt'; +$labels['threaded'] = 'Sohbet Görünümü'; +$labels['autoexpand_threads'] = 'Sohbet iletileri genişletilsin'; +$labels['do_expand'] = 'tüm sohbetler'; +$labels['expand_only_unread'] = 'yalnız okunmamış iletiler bulunan dizilimler'; $labels['fromto'] = 'Gönderici/Alıcı'; $labels['flag'] = 'İşaret'; -$labels['attachment'] = 'Eklenti'; +$labels['attachment'] = 'Dosya Eki'; $labels['nonesort'] = 'Yok'; -$labels['sentdate'] = 'Gönderim tarihi'; -$labels['arrival'] = 'Alım tarihi'; +$labels['sentdate'] = 'Gönderim Tarihi'; +$labels['arrival'] = 'Alınma Tarih'; $labels['asc'] = 'artan'; $labels['desc'] = 'azalan'; -$labels['listcolumns'] = 'Sütunları listele'; -$labels['listsorting'] = 'Sıralama sütunu'; -$labels['listorder'] = 'Sıralama düzeni'; -$labels['listmode'] = 'Liste görünümü'; -$labels['folderactions'] = 'Klasör eylemleri...'; +$labels['listcolumns'] = 'Sütunları Listele'; +$labels['listsorting'] = 'Sıralama Sütunu'; +$labels['listorder'] = 'Sıralama Düzeni'; +$labels['listmode'] = 'Liste Görünümü'; +$labels['layout'] = 'Görünüm'; +$labels['layoutwidescreen'] = 'Geniş Ekran'; +$labels['layoutdesktop'] = 'Masaüstü'; +$labels['layoutlist'] = 'Liste'; +$labels['folderactions'] = 'Klasör İşlemleri...'; $labels['compact'] = 'Sıkıştır'; $labels['empty'] = 'Boşalt'; -$labels['importmessages'] = 'Mesajları içe aktar'; -$labels['quota'] = 'Disk kullanımı'; +$labels['importmessages'] = 'İletileri İçe Aktar'; +$labels['quota'] = 'Disk Kullanımı'; $labels['unknown'] = 'bilinmeyen'; $labels['unlimited'] = 'sınırsız'; -$labels['quotatype'] = 'Kota tipi'; -$labels['quotatotal'] = 'Limit'; +$labels['quotatype'] = 'Kota türü'; +$labels['quotatotal'] = 'Sınır'; $labels['quotaused'] = 'Kullanılan'; -$labels['quotastorage'] = 'Disk boyutu'; -$labels['quotamessage'] = 'Mesaj Sayısı'; -$labels['quicksearch'] = 'Hızlı arama'; -$labels['resetsearch'] = 'Aramayı bitir'; -$labels['searchmod'] = 'Arama detayları'; -$labels['msgtext'] = 'Tüm posta gövdesi'; -$labels['body'] = 'Gövde'; -$labels['type'] = 'Tip'; +$labels['quotastorage'] = 'Disk Boyutu'; +$labels['quotamessage'] = 'İleti Sayısı'; +$labels['quicksearch'] = 'Hızlı Arama'; +$labels['resetsearch'] = 'Aramayı Sıfırla'; +$labels['searchmod'] = 'Arama Alanları'; +$labels['msgtext'] = 'Tüm İleti Alanları'; +$labels['body'] = 'Metin'; +$labels['type'] = 'Tür'; $labels['namex'] = 'Ad'; $labels['searchscope'] = 'Kapsam'; -$labels['currentfolder'] = 'Mevcut klasör'; +$labels['currentfolder'] = 'Bu klasör'; $labels['subfolders'] = 'Bu ve alt klasörler'; $labels['allfolders'] = 'Tüm klasörler'; $labels['searchinterval-1W'] = 'Bir haftadan eski'; @@ -201,94 +209,96 @@ $labels['searchinterval-1Y'] = 'Bir yıldan eski'; $labels['searchinterval1W'] = 'Bir haftadan yeni'; $labels['searchinterval1M'] = 'Bir aydan yeni'; $labels['searchinterval1Y'] = 'Bir yıldan yeni'; -$labels['openinextwin'] = 'Yeni pencerede aç'; +$labels['openinextwin'] = 'Yeni Pencerede Aç'; $labels['emlsave'] = 'İndir (.eml)'; -$labels['changeformattext'] = 'Düz yazı formatında göster'; -$labels['changeformathtml'] = 'HTML formatında göster'; -$labels['editasnew'] = 'Postayı yeni olarak düzenle'; +$labels['changeformattext'] = 'Düz metin biçiminde görüntülensin'; +$labels['changeformathtml'] = 'HTML biçiminde görüntülensin'; +$labels['editasnew'] = 'Yeni Olarak Düzenle'; $labels['send'] = 'Gönder'; -$labels['sendmessage'] = 'Postayı gönder'; -$labels['savemessage'] = 'Taslak olarak kaydet'; -$labels['addattachment'] = 'Dosya ekle'; -$labels['charset'] = 'Karakter kodlaması'; +$labels['sendmessage'] = 'İletiyi Gönder'; +$labels['savemessage'] = 'Taslak Olarak Kaydet'; +$labels['addattachment'] = 'Dosya Ekle'; +$labels['charset'] = 'Karakter Kodlaması'; $labels['editortype'] = 'Düzenleyici'; -$labels['returnreceipt'] = 'Alındı onayı'; -$labels['dsn'] = 'Teslimat durumu bildirisi'; +$labels['returnreceipt'] = 'Alındı Onayı'; +$labels['dsn'] = 'Teslim Edildi Onayı'; $labels['mailreplyintro'] = '$date, $sender yazmış:'; -$labels['originalmessage'] = 'Özgün ileti'; -$labels['selectimage'] = 'Resim seç'; -$labels['addimage'] = 'Resim ekle'; -$labels['selectmedia'] = 'Video seç'; -$labels['addmedia'] = 'Video ekle'; +$labels['originalmessage'] = 'Özgün İleti'; +$labels['selectimage'] = 'Görsel Seçin'; +$labels['addimage'] = 'Görsel Ekle'; +$labels['selectmedia'] = 'Görüntü Seçin'; +$labels['addmedia'] = 'Görüntü Ekle'; $labels['encrypt'] = 'Şifreleme'; -$labels['encryptmessage'] = 'Şifreleme mesajı'; -$labels['encryptmessagemailvelope'] = 'Mailvelope ile mesajlarınızı şifreleyin.'; -$labels['importpubkeys'] = 'Genel anahtarları içeri aktar'; -$labels['encryptedsendialog'] = 'Şifreli mesajı gönder'; +$labels['encryptmessage'] = 'İletiyi Şifrele'; +$labels['encryptmessagemailvelope'] = 'İletinizi Mailvelope ile şifreleyin'; +$labels['importpubkeys'] = 'Genel Anahtarları İçeri Aktar'; +$labels['encryptedsendialog'] = 'Şifreli ileti gönderiliyor'; $labels['keyid'] = 'Kimlik Anahtarı'; $labels['keylength'] = 'Bit'; -$labels['keyexpired'] = 'Süre doldu'; +$labels['keyexpired'] = 'Süre Doldu'; $labels['keyrevoked'] = 'İptal Edilen'; -$labels['editidents'] = 'Kimlikleri düzenle'; -$labels['spellcheck'] = 'Yazım denetimi'; -$labels['checkspelling'] = 'Yazım denetimi yap'; -$labels['resumeediting'] = 'Düzenlemeye devam et'; -$labels['revertto'] = 'Geri çevir:'; -$labels['restore'] = 'Geri yükle'; -$labels['restoremessage'] = 'Mesajı geri yükle?'; -$labels['ignore'] = 'Gözardı et'; -$labels['responses'] = 'Yanıtlar'; -$labels['insertresponse'] = 'Yanıt ekle'; -$labels['manageresponses'] = 'Yanıtları yönet'; -$labels['newresponse'] = 'Yeni cevaplama oluştur'; -$labels['addresponse'] = 'Cevaplama ekle'; -$labels['editresponse'] = 'Yanıtı düzenle'; -$labels['editresponses'] = 'Yanıtları düzenle'; +$labels['bccinstead'] = 'Gizli Kopya Kullanılsın'; +$labels['editidents'] = 'Kimlikleri Düzenle'; +$labels['spellcheck'] = 'Yazım Denetimi'; +$labels['checkspelling'] = 'Yazımı Denetle'; +$labels['resumeediting'] = 'Düzenlemeyi Sürdür'; +$labels['revertto'] = 'Geri Al:'; +$labels['restore'] = 'Geri Yükle'; +$labels['restoremessage'] = 'İleti geri yüklensin mi?'; +$labels['ignore'] = 'Yoksay'; +$labels['responses'] = 'Hazır Yanıtlar'; +$labels['insertresponse'] = 'Hazır Yanıt Ekle'; +$labels['manageresponses'] = 'Hazır Yanıt Yönetimi'; +$labels['newresponse'] = 'Yeni Hazır Yanıt Ekle'; +$labels['addresponse'] = 'Hazır Yanıt Ekle'; +$labels['editresponse'] = 'Hazır Yanıtı Düzenle'; +$labels['editresponses'] = 'Hazır Yanıtları Düzenle'; $labels['responsename'] = 'Ad'; -$labels['responsetext'] = 'Yanıt metni'; -$labels['attach'] = 'Ekle'; -$labels['attachments'] = 'Ekler'; +$labels['responsetext'] = 'Hazır Yanıt Metni'; +$labels['attach'] = 'Dosya Ekle'; +$labels['attachments'] = 'Ek Dosyalar'; $labels['upload'] = 'Yükle'; -$labels['uploadprogress'] = '$percent($current of $total)'; +$labels['uploadprogress'] = '$percent($current / $total)'; $labels['close'] = 'Kapat'; -$labels['messageoptions'] = 'İleti seçenekleri...'; -$labels['togglecomposeoptions'] = 'Kompozisyon seçeneklerini göster/gizle'; +$labels['messageoptions'] = 'İleti Ayarları...'; +$labels['togglecomposeoptions'] = 'Oluşturma ayarlarını görüntüle/gizle'; +$labels['attachmentrename'] = 'Ek Dosyaları Yeniden Adlandır.'; $labels['low'] = 'Düşük'; $labels['lowest'] = 'En Düşük'; $labels['normal'] = 'Normal'; $labels['high'] = 'Yüksek'; $labels['highest'] = 'En yüksek'; $labels['nosubject'] = '(Konu Belirtilmemiş)'; -$labels['showimages'] = 'Resimleri göster'; -$labels['alwaysshow'] = '$sender tarafından gönderilen resimleri her zaman göster'; -$labels['isdraft'] = 'Bu posta taslaktır.'; +$labels['showimages'] = 'Görselleri Görüntüle'; +$labels['alwaysshow'] = '$sender tarafından gönderilen görseller her zaman görüntülensin'; +$labels['isdraft'] = 'Bu ileti henüz taslak.'; $labels['andnmore'] = '$nr daha...'; -$labels['togglemoreheaders'] = 'Daha fazla posta başlığı göster'; -$labels['togglefullheaders'] = 'Posta başlıklarını göster/gizle'; +$labels['togglemoreheaders'] = 'Daha fazla ileti başlığı görüntüle'; +$labels['togglefullheaders'] = 'İleti başlıklarını görüntüle/gizle'; $labels['htmltoggle'] = 'HTML'; -$labels['plaintoggle'] = 'Düz metin'; -$labels['savesentmessagein'] = 'Gönderileni buraya kaydet'; -$labels['dontsave'] = 'kaydetme'; +$labels['plaintoggle'] = 'Düz Metin'; +$labels['savesentmessagein'] = 'Gönderilen İleti Şuraya Kaydedilsin'; +$labels['dontsave'] = 'kaydedilmesin'; $labels['maxuploadsize'] = 'İzin verilen en büyük dosya boyutu $size'; -$labels['addcc'] = 'İlgili kopyası ekle'; -$labels['addbcc'] = 'Gizli kopya ekle'; -$labels['addreplyto'] = 'Yanıtlama adresi ekle'; -$labels['addfollowupto'] = 'Takip adresi ekle'; -$labels['mdnrequest'] = 'Bu postayı gönderen kişi, postayı okuduğunuza dair alındı onayı istedi. Alındı onayını göndermek ister misiniz ?'; +$labels['addcc'] = 'Kopya Ekle'; +$labels['addbcc'] = 'Gizli Kopya Ekle'; +$labels['addreplyto'] = 'Yanıtlama Adresi Ekle'; +$labels['addfollowupto'] = 'İzleme Adresi Ekle'; +$labels['mdnrequest'] = 'Bu iletiyi gönderen kişi, okuduğunuza dair onay istedi. Onay göndermek ister misiniz ?'; $labels['receiptread'] = 'Alındı Onayı (okundu)'; -$labels['yourmessage'] = 'Bu, postanız için alındı onayıdır'; -$labels['receiptnote'] = 'Not: Bu alındı onayı sadece postanızın alıcının bilgisayarında gösterildiğini belirtir. Alıcının posta içeriğini okuduğunu veya anladığını garantilemez.'; -$labels['name'] = 'Görünen Ad'; +$labels['yourmessage'] = 'İletinizin Okundu Onayı'; +$labels['receiptnote'] = 'Not: Bu okundu onayı iletinizin yalnız alıcının bilgisayarında görüntülendiğini belirtir. Alıcının ileti içeriğini okuduğunu ya da anladığını kanıtlamaz.'; +$labels['name'] = 'Görüntülenecek Ad'; $labels['firstname'] = 'Ad'; $labels['surname'] = 'Soyad'; -$labels['middlename'] = 'Göbek adı'; -$labels['nameprefix'] = 'Ön ek'; -$labels['namesuffix'] = 'Son ek'; -$labels['nickname'] = 'Takma ad'; -$labels['jobtitle'] = 'Ünvan'; +$labels['middlename'] = 'İkinci Ad'; +$labels['nameprefix'] = 'Ön Ek'; +$labels['namesuffix'] = 'Son Ek'; +$labels['nickname'] = 'Takma Ad'; +$labels['jobtitle'] = 'İş Unvanı'; $labels['department'] = 'Bölüm'; $labels['gender'] = 'Cinsiyet'; -$labels['maidenname'] = 'Eski soyadı'; +$labels['maidenname'] = 'Kızlık Soyadı'; $labels['email'] = 'E-Posta'; $labels['phone'] = 'Telefon'; $labels['address'] = 'Adres'; @@ -297,235 +307,236 @@ $labels['locality'] = 'Şehir'; $labels['zipcode'] = 'Posta Kodu'; $labels['region'] = 'Bölge'; $labels['country'] = 'Ülke'; -$labels['birthday'] = 'Doğum günü'; -$labels['anniversary'] = 'Yıl dönümü'; -$labels['website'] = 'Web sayfası'; -$labels['instantmessenger'] = 'Anında mesajlaşma'; +$labels['birthday'] = 'Doğum Günü'; +$labels['anniversary'] = 'Yıl Dönümü'; +$labels['website'] = 'Web Sayfası'; +$labels['instantmessenger'] = 'Anlık İletişim'; $labels['notes'] = 'Notlar'; -$labels['male'] = 'erkek'; -$labels['female'] = 'kadın'; +$labels['male'] = 'Erkek'; +$labels['female'] = 'Kadın'; $labels['manager'] = 'Yönetici'; -$labels['assistant'] = 'Asistan'; +$labels['assistant'] = 'Yardımcı'; $labels['spouse'] = 'Eş'; -$labels['allfields'] = 'Tüm alanlar'; +$labels['allfields'] = 'Tüm Alanlar'; $labels['search'] = 'Ara'; -$labels['searchresult'] = 'Arama sonucu'; -$labels['advsearch'] = 'Gelişmiş ara'; +$labels['searchresult'] = 'Arama Sonucu'; +$labels['advsearch'] = 'Gelişmiş Arama'; $labels['advanced'] = 'Gelişmiş'; $labels['other'] = 'Diğer'; $labels['printcontact'] = 'Kişiyi yazdır'; +$labels['qrcode'] = 'QR Kodu'; $labels['typehome'] = 'Ev'; $labels['typework'] = 'İş'; $labels['typeother'] = 'Diğer'; -$labels['typemobile'] = 'Cep telefonu'; +$labels['typemobile'] = 'Cep Telefonu'; $labels['typemain'] = 'Ana'; -$labels['typehomefax'] = 'Ev Faks'; -$labels['typeworkfax'] = 'İş Faks'; -$labels['typecar'] = 'Araba'; -$labels['typepager'] = 'Çağrı cihazı'; +$labels['typehomefax'] = 'Ev Faksı'; +$labels['typeworkfax'] = 'İş Faksı'; +$labels['typecar'] = 'Araç'; +$labels['typepager'] = 'Çağrı Cihazı'; $labels['typevideo'] = 'Görüntülü'; -$labels['typeassistant'] = 'Asistan'; -$labels['typehomepage'] = 'Ev sayfası'; +$labels['typeassistant'] = 'Yardımcı'; +$labels['typehomepage'] = 'Web Sitesi'; $labels['typeblog'] = 'Günlük'; $labels['typeprofile'] = 'Profil'; -$labels['addfield'] = 'Alan ekle...'; -$labels['addcontact'] = 'Kişi ekle'; -$labels['editcontact'] = 'Düzenle'; +$labels['addfield'] = 'Alan Ekle...'; +$labels['addcontact'] = 'Kişi Ekle'; +$labels['editcontact'] = 'Kişiyi Düzenle'; $labels['contacts'] = 'Kişiler'; -$labels['contactproperties'] = 'Özellikler'; -$labels['contactnameandorg'] = 'İsim ve Kuruluş'; -$labels['personalinfo'] = 'Kişisel bilgiler'; +$labels['contactproperties'] = 'Kişi Bilgileri'; +$labels['contactnameandorg'] = 'Ad ve Kuruluş'; +$labels['personalinfo'] = 'Kişisel Bilgiler'; $labels['contactphoto'] = 'Fotoğraf'; $labels['edit'] = 'Düzenle'; $labels['cancel'] = 'İptal'; $labels['save'] = 'Kaydet'; $labels['delete'] = 'Sil'; -$labels['rename'] = 'Yeniden adlandır'; +$labels['rename'] = 'Yeniden Adlandır'; $labels['addphoto'] = 'Ekle'; $labels['replacephoto'] = 'Değiştir'; -$labels['uploadphoto'] = 'Fotoğraf yükle'; -$labels['newcontact'] = 'Yeni kişi oluştur'; -$labels['deletecontact'] = 'Seçili kişileri sil'; -$labels['composeto'] = 'Seçili kişiye posta gönder'; +$labels['uploadphoto'] = 'Fotoğraf Yükle'; +$labels['newcontact'] = 'Yeni Kişi Ekle'; +$labels['deletecontact'] = 'Seçilmiş Kişileri Sil'; +$labels['composeto'] = 'Şu Kişiye İleti Gönder'; $labels['contactsfromto'] = 'Kişiler: $from - $to , Toplam: $count'; $labels['print'] = 'Yazdır'; -$labels['export'] = 'Dışa aktar'; -$labels['exportall'] = 'Hepsini dışa aktar'; -$labels['exportsel'] = 'Seçileni dışa aktar'; -$labels['exportvcards'] = 'vCard olarak dışa aktar'; -$labels['newgroup'] = 'Yeni grup oluştur'; -$labels['addgroup'] = 'Grup ekle'; -$labels['grouprename'] = 'Grubu yeniden adlandır'; -$labels['groupdelete'] = 'Grubu sil'; -$labels['groupremoveselected'] = 'Seçili kişileri gruptan sil'; -$labels['uponelevel'] = 'Bir seviye yukarı'; -$labels['previouspage'] = 'Öncekileri göster'; -$labels['firstpage'] = 'İlkini göster'; -$labels['nextpage'] = 'Sonrakileri göster'; -$labels['lastpage'] = 'Sonuncuyu göster'; +$labels['export'] = 'Dışa Aktar'; +$labels['exportall'] = 'Tümünü Dışa Aktar'; +$labels['exportsel'] = 'Seçilmişleri Dışa Aktar'; +$labels['exportvcards'] = 'Kişileri vCard Biçiminde Dışa Aktar'; +$labels['newgroup'] = 'Yeni Grup Ekle'; +$labels['addgroup'] = 'Grup Ekle'; +$labels['grouprename'] = 'Grubu Yeniden Adlandır'; +$labels['groupdelete'] = 'Grubu Sil'; +$labels['groupremoveselected'] = 'Seçilmiş Kişileri Gruptan Çıkar'; +$labels['uponelevel'] = 'Bir Düzey Yukarı'; +$labels['previouspage'] = 'Önceki Sayfayı Görüntüle'; +$labels['firstpage'] = 'İlk Sayfayı Görüntüle'; +$labels['nextpage'] = 'Sonraki Sayfayı Görüntüle'; +$labels['lastpage'] = 'Son Sayfayı Görüntüle'; $labels['group'] = 'Grup'; $labels['groups'] = 'Gruplar'; -$labels['listgroup'] = 'Grup üyelerini listele'; +$labels['listgroup'] = 'Grup Üyelerini Listele'; $labels['personaladrbook'] = 'Adresler'; -$labels['searchsave'] = 'Aramayı kaydet'; -$labels['searchdelete'] = 'Aramayı sil'; -$labels['import'] = 'İçe aktar'; -$labels['importcontacts'] = 'Kişileri içe aktar'; -$labels['importfromfile'] = 'Dosyadan içe aktar:'; -$labels['importtarget'] = 'Kişileri ekle'; +$labels['searchsave'] = 'Aramayı Kaydet'; +$labels['searchdelete'] = 'Aramayı Sil'; +$labels['import'] = 'İçe Aktar'; +$labels['importcontacts'] = 'Kişileri İçe Aktar'; +$labels['importfromfile'] = 'Dosyadan İçe Aktar:'; +$labels['importtarget'] = 'Kişileri Ekle'; $labels['importreplace'] = 'Tüm adres defterinin yerine geçsin'; -$labels['importgroups'] = 'Grup atamalarını içe aktar'; -$labels['importgroupsall'] = 'Tümü (Gerekirse grupları oluştur)'; -$labels['importgroupsexisting'] = 'Sadece mevcut gruplar için'; -$labels['importdesc'] = 'Mevcut bir adres defterinden kişileri yükleyebilirsiniz.
    Şu anda vCard veya CSV (virgülle ayrılmış) veri formatları desteklenmektedir.'; +$labels['importgroups'] = 'Grup Atamalarını İçe Aktar'; +$labels['importgroupsall'] = 'Tümü (Gerekirse Gruplar Eklensin)'; +$labels['importgroupsexisting'] = 'Yalnız Varolan Gruplar'; +$labels['importdesc'] = 'Varolan bir adres defterinden kişileri yükleyebilirsiniz.
    Şu anda vCard ya da CSV (virgülle ayrılmış) veri biçimleri desteklenmektedir.'; $labels['done'] = 'Tamam'; -$labels['settingsfor'] = 'Ayarlar'; +$labels['settingsfor'] = 'Şunun Ayarları'; $labels['about'] = 'Hakkında'; -$labels['preferences'] = 'Tercihler'; -$labels['userpreferences'] = 'Kullanıcı tercihleri'; -$labels['editpreferences'] = 'Kullanıcı tercihlerini düzenle'; +$labels['preferences'] = 'Ayarlar'; +$labels['userpreferences'] = 'Kullanıcı Ayarları'; +$labels['editpreferences'] = 'Kullanıcı Ayarlarını Düzenle'; $labels['identities'] = 'Kimlikler'; -$labels['manageidentities'] = 'Kimlikleri yönet'; -$labels['newidentity'] = 'Yeni kimlik oluştur'; -$labels['addidentity'] = 'Kimlik ekle'; -$labels['editidentity'] = 'Kimlik düzenle'; -$labels['preferhtml'] = 'HTML görüntüle'; +$labels['manageidentities'] = 'Kimlik Yönetimi'; +$labels['newidentity'] = 'Yeni Kimlik Ekle'; +$labels['addidentity'] = 'Kimlik Ekle'; +$labels['editidentity'] = 'Kimliği Düzenle'; +$labels['preferhtml'] = 'HTML Görünüm Kullanılsın'; $labels['defaultcharset'] = 'Varsayılan Karakter Kümesi'; -$labels['htmlmessage'] = 'HTML Posta'; +$labels['htmlmessage'] = 'HTML İleti'; $labels['messagepart'] = 'Parça'; $labels['digitalsig'] = 'Dijital İmza'; -$labels['dateformat'] = 'Tarih biçimi'; -$labels['timeformat'] = 'Zaman biçimi'; -$labels['prettydate'] = 'Tarihi kısaltarak göster'; -$labels['setdefault'] = 'Varsayılan olarak ata'; +$labels['dateformat'] = 'Tarih Biçimi'; +$labels['timeformat'] = 'Saat Biçimi'; +$labels['prettydate'] = 'Tarihler Kısa Görüntülensin'; +$labels['setdefault'] = 'Varsayılan Olarak Atansın'; $labels['autodetect'] = 'Otomatik'; $labels['language'] = 'Dil'; -$labels['timezone'] = 'Saat dilimi'; -$labels['pagesize'] = 'Bir sayfadaki satır sayısı'; +$labels['timezone'] = 'Saat Dilimi'; +$labels['pagesize'] = 'Bir Sayfadaki Satır Sayısı'; $labels['signature'] = 'İmza'; -$labels['dstactive'] = 'Yaz saati uygulaması'; -$labels['showinextwin'] = 'Postayı yeni pencerede aç'; -$labels['composeextwin'] = 'Postayı yeni pencerede yaz'; -$labels['htmleditor'] = 'HTML postaları oluştur'; -$labels['htmlonreply'] = 'sadece HTML postaları yanıtlarken'; -$labels['htmlonreplyandforward'] = 'HTML biçimindeki posta yanıtlandığında veye iletildiğinde'; -$labels['htmlsignature'] = 'HTML imza'; -$labels['showemail'] = 'E-posta adresini görünüm ismi ile görüntüle'; -$labels['previewpane'] = 'Önizleme panelini göster'; -$labels['skin'] = 'Arayüz görünümü'; -$labels['logoutclear'] = 'Oturumu kapatınca Çöpü temizle'; -$labels['logoutcompact'] = 'Oturumu kapatınca Gelen Kutusunu sıkıştır'; +$labels['dstactive'] = 'Yaz Saati Uygulaması'; +$labels['showinextwin'] = 'İleti Yeni Pencerede Açılsın'; +$labels['composeextwin'] = 'İleti Yeni Pencerede Oluşturulsun'; +$labels['htmleditor'] = 'HTML İleti Kullanımı'; +$labels['htmlonreply'] = 'yalnız HTML biçimindeki iletiler yanıtlanırken'; +$labels['htmlonreplyandforward'] = 'HTML biçimindeki iletiler yanıtlanırken ya da iletilirken'; +$labels['htmlsignature'] = 'HTML İmza'; +$labels['showemail'] = 'E-posta adresi görüntülenecek ad ile birlikte görüntülensin'; +$labels['previewpane'] = 'Önizleme Panosu Görüntülensin'; +$labels['skin'] = 'Arayüz Görünümü'; +$labels['logoutclear'] = 'Oturum Kapatıldığında Çöp Boşaltılsın'; +$labels['logoutcompact'] = 'Oturum Kapatıldığında Gelen Kutusu Sıkıştırılsın'; $labels['uisettings'] = 'Kullanıcı Arayüzü'; $labels['serversettings'] = 'Sunucu Ayarları'; $labels['mailboxview'] = 'Posta Kutusu Görünümü'; -$labels['mdnrequests'] = 'Alındı onayları'; -$labels['askuser'] = 'kullanıcıya sor'; -$labels['autosend'] = 'otomatik olarak gönder'; -$labels['autosendknown'] = 'adres defterimdekilere alındı onayı gönder, diğerlerini bana sor'; -$labels['autosendknownignore'] = 'adres defterimdekilere alındı onayı gönder, diğerlerini gözardı et'; -$labels['ignorerequest'] = 'görmezden gel'; -$labels['readwhendeleted'] = 'Silinen postaları okunmuş olarak işaretle'; -$labels['flagfordeletion'] = 'Postaları silmek yerine silinecek olarak işaretle'; -$labels['skipdeleted'] = 'Silinmiş postaları gösterme'; -$labels['deletealways'] = 'Postaların çöpe taşınmasında sorun çıkarsa, postaları sil'; -$labels['deletejunk'] = 'İstenmeyenler klasöründeki mesajları doğrudan sil'; -$labels['showremoteimages'] = 'Uzaktan yüklenen resimleri göster'; +$labels['mdnrequests'] = 'Alındı Onayları'; +$labels['askuser'] = 'ne yapılacağı bana sorulsun'; +$labels['autosend'] = 'otomatik olarak gönderilsin'; +$labels['autosendknown'] = 'adres defterimdekilere gönderilsin, diğerleri bana sorulsun'; +$labels['autosendknownignore'] = 'adres defterimdekilere gönderilsin, diğerleri yoksayılsın'; +$labels['ignorerequest'] = 'yoksayılsın'; +$labels['readwhendeleted'] = 'Silinen İletiler Okunmuş Olarak İşaretlensin'; +$labels['flagfordeletion'] = 'İletiler Silinmek Yerine Silinecek Olarak İşaretlensin'; +$labels['skipdeleted'] = 'Silinmiş İletiler Görüntülenmesin'; +$labels['deletealways'] = 'İletiler Çöpe Atılırken Sorun Çıkarsa Tamamen Silinsin'; +$labels['deletejunk'] = 'İstenmeyenler Klasöründeki İletiler Doğrudan Silinsin'; +$labels['showremoteimages'] = 'Uzaktan Yüklenen Görseller Görüntülensin'; $labels['fromknownsenders'] = 'bilinen göndericilerden'; $labels['always'] = 'her zaman'; -$labels['alwaysbutplain'] = 'Herzaman-Düz Metin hariç-'; -$labels['showinlineimages'] = 'Postanın ekindeki resimleri postanın altında göster'; -$labels['autosavedraft'] = 'Taslağı otomatik kaydet:'; -$labels['everynminutes'] = 'her $n dakikada bir'; -$labels['refreshinterval'] = 'Yenile (yeni postaları kontrol et, vb.)'; +$labels['alwaysbutplain'] = 'her zaman, düz metin biçiminde yanıtlama dışında'; +$labels['showinlineimages'] = 'İleti Ekindeki Görseller İletinin Altında Görüntülensin'; +$labels['autosavedraft'] = 'Taslaklar Otomatik Olarak Kaydedilsin'; +$labels['everynminutes'] = '$n dakikada bir'; +$labels['refreshinterval'] = 'Yenileme (yeni iletileri denetle, vb.)'; $labels['never'] = 'asla'; $labels['immediately'] = 'hemen'; -$labels['messagesdisplaying'] = 'Posta Görüntüleme'; -$labels['messagescomposition'] = 'Yeni Posta Oluşturma'; -$labels['mimeparamfolding'] = 'Eklenti isimleri'; +$labels['messagesdisplaying'] = 'İleti Görünümü'; +$labels['messagescomposition'] = 'Yeni İleti Oluşturma'; +$labels['mimeparamfolding'] = 'Ek Dosya Adları'; $labels['2231folding'] = 'Tam RFC 2231 (Thunderbird)'; $labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)'; $labels['2047folding'] = 'Tam RFC 2047 (diğer)'; -$labels['force7bit'] = '8 bitlik karakterler için MIME kodlaması kullan'; -$labels['savelocalstorage'] = "Tarayıcının yerel disk alanına kaydet(geçiçi olarak)"; -$labels['advancedoptions'] = 'Gelişmiş seçenekler'; -$labels['toggleadvancedoptions'] = 'İleri seviye seçeneklerini göster/gizle'; -$labels['focusonnewmessage'] = 'Yeni posta geldiğinde web tarayıcı penceresine odaklan.'; -$labels['checkallfolders'] = 'Tüm klasörlerdeki yeni postaları denetle'; -$labels['displaynext'] = 'Posta silindikten/taşındıktan sonra sıradaki postayı göster'; -$labels['defaultfont'] = 'HTML postalar için varsayılan yazı tipi'; -$labels['mainoptions'] = 'Ana Seçenekler'; -$labels['browseroptions'] = 'Tarayıcı Seçenekleri'; +$labels['force7bit'] = '8 Bitlik Karakterler İçin MIME Kodlaması Kullanılsın'; +$labels['savelocalstorage'] = "Tarayıcının Yerel Disk Alanına Kaydedilsin (geçiçi olarak)"; +$labels['advancedoptions'] = 'Gelişmiş Ayarlar'; +$labels['toggleadvancedoptions'] = 'Gelişmiş ayarları görüntüle/gizle'; +$labels['focusonnewmessage'] = 'Yeni İleti Geldiğinde Web Tarayıcı Penceresine Odaklanılsın'; +$labels['checkallfolders'] = 'Tüm Klasörler İçin Yeni İletiler Denetlensin'; +$labels['displaynext'] = 'İleti Silindiğinde ya da Taşındığında Sonraki İleti Görüntülensin'; +$labels['defaultfont'] = 'HTML İletiler İçin Varsayılan Yazı Türü'; +$labels['mainoptions'] = 'Temel Ayarlar'; +$labels['browseroptions'] = 'Tarayıcı Ayarları'; $labels['section'] = 'Bölüm'; $labels['maintenance'] = 'Bakım'; -$labels['newmessage'] = 'Yeni Posta'; -$labels['signatureoptions'] = 'İmza Seçenekleri'; -$labels['whenreplying'] = 'Yanıtlarken'; -$labels['replyempty'] = 'özgün postayı alıntılama'; -$labels['replytopposting'] = 'yeni postayı alıntı metninin üstünden başlat'; -$labels['replybottomposting'] = 'yeni postayı alıntı metninden sonra başlat'; -$labels['replyremovesignature'] = 'Yanıtlarken önceki imzaları sil'; -$labels['autoaddsignature'] = 'Otomatik olarak imza ekle'; -$labels['newmessageonly'] = 'sadece yeni postalarda'; -$labels['replyandforwardonly'] = 'sadece yanıtlar ve yönlendirmelerde'; -$labels['insertsignature'] = 'İmza ekle'; -$labels['sigbelow'] = 'Alıntı Mesajın altındaki yeri imzala'; -$labels['sigseparator'] = 'İmzalarken normal ayırıcıya zorla.'; -$labels['previewpanemarkread'] = 'Önzilemede görünen postaları okunmuş işaretle'; +$labels['newmessage'] = 'Yeni İleti'; +$labels['signatureoptions'] = 'İmza Ayarları'; +$labels['whenreplying'] = 'Yanıtlarken özgün ileti'; +$labels['replyempty'] = 'alıntılanmasın'; +$labels['replytopposting'] = 'altta yanıt metni üstte olsun'; +$labels['replybottomposting'] = 'üstte yanıt metni altta olsun'; +$labels['replyremovesignature'] = 'Yanıtlarken İletideki Özgün İmza Silinsin'; +$labels['autoaddsignature'] = 'İmza Otomatik Olarak Eklensin'; +$labels['newmessageonly'] = 'yalnız yeni iletilere'; +$labels['replyandforwardonly'] = 'yalnız yanıt ve iletmelere'; +$labels['insertsignature'] = 'İmza ekleme'; +$labels['sigbelow'] = 'İmza Alıntı Metninin Altına Eklensin'; +$labels['sigseparator'] = 'İmza Eklenirken Standart Ayıraç Kullanılsın'; +$labels['previewpanemarkread'] = 'Önizlenen İletiler Okunmuş Olarak İşaretlensin'; $labels['afternseconds'] = '$n saniye sonra'; -$labels['reqmdn'] = 'Her zaman alındı onayı iste'; -$labels['reqdsn'] = 'Her zaman teslimat durumu bildirisi iste'; -$labels['replysamefolder'] = 'Yanıtları, yanıtlanan postanın bulunduğu klasöre kaydet'; -$labels['defaultabook'] = 'Varsayılan adres defteri'; -$labels['autocompletesingle'] = 'Otomatik tamamlamalarda alternatif e-posta adreslerini atla'; -$labels['listnamedisplay'] = 'Kişiyi görüntüle'; -$labels['spellcheckbeforesend'] = 'Posta göndermeden önce yazım denetimi yap'; -$labels['spellcheckoptions'] = 'Yazım Denetimi Seçenekleri'; -$labels['spellcheckignoresyms'] = 'İçinde semboller geçen kelimeleri gözardı et'; -$labels['spellcheckignorenums'] = 'İçinde rakam geçen kelimleri göz ardı et'; -$labels['spellcheckignorecaps'] = 'Tümü büyük harf olan kelimleri göz ardı et'; +$labels['reqmdn'] = 'Her Zaman Alındı Onayı İstensin'; +$labels['reqdsn'] = 'Her Zaman Teslim Edildi Onayı İstensin'; +$labels['replysamefolder'] = 'Yanıtlar İletinin Bulunduğu Klasöre Kaydedilsin'; +$labels['defaultabook'] = 'Varsayılan Adres Defteri'; +$labels['autocompletesingle'] = 'Otomatik Tamamlamalarda Alternatif E-posta Adresleri Atlansın'; +$labels['listnamedisplay'] = 'Kişi Görünümü'; +$labels['spellcheckbeforesend'] = 'İleti Gönderilmeden Önce Yazımı Denetlensin'; +$labels['spellcheckoptions'] = 'Yazım Denetimi Ayarları'; +$labels['spellcheckignoresyms'] = 'İçinde Simge Geçen Sözcükler Yoksayılsın'; +$labels['spellcheckignorenums'] = 'İçinde Rakam Geçen Sözcükler Yoksayılsın'; +$labels['spellcheckignorecaps'] = 'Tümü Büyük Harf Olan Sözcükler Yoksayılsın'; $labels['addtodict'] = 'Sözlüğe Ekle'; -$labels['mailtoprotohandler'] = 'mailto: bağlantıları için protokol işleyici kayıt et'; -$labels['standardwindows'] = 'Açılır pencereleri standart pencere olarak yönet'; -$labels['forwardmode'] = 'Posta yönlendirme'; -$labels['inline'] = 'postanın içinde'; -$labels['asattachment'] = 'ek olarak'; -$labels['replyallmode'] = '[Tümünü yanıtla] düğmesinin varsayılan eylemi'; -$labels['replyalldefault'] = 'Hepsini yanıtla'; -$labels['replyalllist'] = 'Sadece postalama listesindekileri yanıtla (eğer varsa)'; +$labels['mailtoprotohandler'] = 'mailto: Bağlantıları İçin Kullanılacak İşleyici'; +$labels['standardwindows'] = 'Açılır Pencereler Standart Pencere Olarak Kabul Edilsin'; +$labels['forwardmode'] = 'İletiler İletilirken'; +$labels['inline'] = 'iletinin içine eklensin'; +$labels['asattachment'] = 'dosya eki olarak eklensin'; +$labels['replyallmode'] = '[Toplu Yanıt] Düğmesi Varsayılan Olarak'; +$labels['replyalldefault'] = 'Toplu yanıtlasın'; +$labels['replyalllist'] = 'Yalnız postalama listesindekileri yanıtlasın (varsa)'; $labels['folder'] = 'Klasör'; $labels['folders'] = 'Klasörler'; -$labels['foldername'] = 'Klasör adı'; +$labels['foldername'] = 'Klasör Adı'; $labels['subscribed'] = 'Abonelik'; -$labels['messagecount'] = 'Postalar'; -$labels['create'] = 'Oluştur'; -$labels['createfolder'] = 'Yeni klasör oluştur'; -$labels['managefolders'] = 'Klasörleri düzenle'; +$labels['messagecount'] = 'İletiler'; +$labels['create'] = 'Ekle'; +$labels['createfolder'] = 'Yeni Klasör Ekle'; +$labels['managefolders'] = 'Klasör Yönetimi'; $labels['specialfolders'] = 'Özel Klasörler'; $labels['properties'] = 'Özellikler'; -$labels['folderproperties'] = 'Klasör özellikleri'; -$labels['parentfolder'] = 'Ana klasör'; +$labels['folderproperties'] = 'Klasör Özellikleri'; +$labels['parentfolder'] = 'Üst Klasör'; $labels['location'] = 'Konum'; -$labels['info'] = 'Bilgi'; +$labels['info'] = 'Bilgiler'; $labels['getfoldersize'] = 'Klasör büyüklüğünü öğrenmek için tıklayın'; $labels['changesubscription'] = 'Abonelik durumunu değiştirmek için tıklayın'; $labels['foldertype'] = 'Klasör Türü'; $labels['personalfolder'] = 'Kişisel Klasör'; $labels['otherfolder'] = 'Diğer Kullanıcıların Klasörü'; -$labels['sharedfolder'] = 'Genel Klasör'; -$labels['findfolders'] = 'Klasörleri bul'; +$labels['sharedfolder'] = 'Herkese Açık Klasör'; +$labels['findfolders'] = 'Klasör Arama'; $labels['namespace.personal'] = 'Kişisel'; -$labels['namespace.other'] = 'Diğer kullanıcılar'; +$labels['namespace.other'] = 'Diğer Kullanıcılar'; $labels['namespace.shared'] = 'Paylaşılan'; -$labels['sortby'] = 'Sırala'; +$labels['sortby'] = 'Sıralama'; $labels['sortasc'] = 'Artan'; $labels['sortdesc'] = 'Azalan'; -$labels['undo'] = 'Geri al'; -$labels['installedplugins'] = 'Yüklü eklentiler'; -$labels['plugin'] = 'Eklenti'; +$labels['undo'] = 'Geri Al'; +$labels['installedplugins'] = 'Yüklü Uygulama Ekleri'; +$labels['plugin'] = 'Uygulama Eki'; $labels['version'] = 'Sürüm'; $labels['source'] = 'Kaynak'; $labels['license'] = 'Lisans'; -$labels['support'] = 'Destek Al'; +$labels['support'] = 'Destek İsteyin'; $labels['B'] = 'B'; $labels['KB'] = 'KB'; $labels['MB'] = 'MB'; @@ -548,53 +559,53 @@ $labels['vietnamese'] = 'Vietnamca'; $labels['japanese'] = 'Japonca'; $labels['korean'] = 'Korece'; $labels['chinese'] = 'Çince'; -$labels['arialabeltopnav'] = 'Pencere kontrolü'; -$labels['arialabeltasknav'] = 'Uygulama görevleri'; -$labels['arialabeltoolbar'] = 'Uygulama araç çubuğu'; -$labels['arialabelactivetask'] = 'Aktif görevler'; -$labels['arialabelmessagessearchfilter'] = 'E-posta listeleme filtresi'; -$labels['arialabelmailsearchform'] = 'E-posta mesaj arama formu'; -$labels['arialabelcontactsearchform'] = 'Kişiler arama formu'; -$labels['arialabelmailquicksearchbox'] = 'E-posta arama girdisi'; -$labels['arialabelquicksearchbox'] = 'Arama girdisi'; -$labels['arialabelfoldersearchfilter'] = 'Klasör listeleme filtresi'; -$labels['arialabelfoldersearchform'] = 'Klasör arama formu'; -$labels['arialabelfolderlist'] = 'E-posta klasör seçimi'; -$labels['arialabelmessagelist'] = 'E-posta mesajları listelemesi'; -$labels['arialabelmailpreviewframe'] = 'Mesaj önizleme'; -$labels['arialabelmailboxmenu'] = 'Klasör eylem menüsü'; -$labels['arialabellistselectmenu'] = 'Liste seçme menüsü'; -$labels['arialabelthreadselectmenu'] = 'Thread listeleme menüsü'; -$labels['arialabelmessagelistoptions'] = 'Mesaj liste gösterimi ve sıralama seçenekleri'; -$labels['arialabelmailimportdialog'] = 'Mesaj içe aktarım diyalogu'; -$labels['arialabelmessagenav'] = 'Mesaj gezinimi'; -$labels['arialabelmessagebody'] = 'Mesaj gövdesi'; -$labels['arialabelmessageactions'] = 'Mesaj eylemleri'; -$labels['arialabelcontactquicksearch'] = 'Kişiler arama formu'; -$labels['arialabelcontactsearchbox'] = 'Kişi arama girdisi'; -$labels['arialabelmessageheaders'] = 'Mesaj başlıkları'; -$labels['arialabelforwardingoptions'] = 'Yönlendirme seçenekleri'; -$labels['arialabelreplyalloptions'] = 'Hepsine-Yanıtla seçenekleri'; -$labels['arialabelmoremessageactions'] = 'Daha fazla mesaj aksiyonu'; -$labels['arialabelmarkmessagesas'] = 'Seçili mesajları şu şekilde işaretle ..'; -$labels['arialabelcomposeoptions'] = 'Kompozisyon seçenekleri'; -$labels['arialabelresponsesmenu'] = 'Hazır cevaplar menüsü'; -$labels['arialabelattachmentuploadform'] = 'Eklenti yükleme formu'; -$labels['arialabelattachmentpreview'] = 'Eklenti önizleme'; +$labels['arialabeltopnav'] = 'Pencere Denetimi'; +$labels['arialabeltasknav'] = 'Uygulama Görevleri'; +$labels['arialabeltoolbar'] = 'Uygulama Araç Çubuğu'; +$labels['arialabelactivetask'] = 'Etkin Görevler'; +$labels['arialabelmessagessearchfilter'] = 'E-posta Listeleme Süzgeci'; +$labels['arialabelmailsearchform'] = 'E-posta İletisi Arama Formu'; +$labels['arialabelcontactsearchform'] = 'Kişi Arama Formu'; +$labels['arialabelmailquicksearchbox'] = 'E-posta Arama İfadesi'; +$labels['arialabelquicksearchbox'] = 'Arama İfadesi'; +$labels['arialabelfoldersearchfilter'] = 'Klasör Listeleme Süzgeci'; +$labels['arialabelfoldersearchform'] = 'Klasör Arama Formu'; +$labels['arialabelfolderlist'] = 'E-posta Klasör Seçimi'; +$labels['arialabelmessagelist'] = 'E-posta İletilerini Listeleme'; +$labels['arialabelmailpreviewframe'] = 'İleti Önizleme'; +$labels['arialabelmailboxmenu'] = 'Klasör İşlemleri Menüsü'; +$labels['arialabellistselectmenu'] = 'Liste Seçme Menüsü'; +$labels['arialabelthreadselectmenu'] = 'Sohbet Listeleme Menüsü'; +$labels['arialabelmessagelistoptions'] = 'İleti Liste Görünümü ve Sıralama Ayarları'; +$labels['arialabelmailimportdialog'] = 'İleti İçe Aktarma Formu'; +$labels['arialabelmessagenav'] = 'İleti Gezinmesi'; +$labels['arialabelmessagebody'] = 'İleti Metni'; +$labels['arialabelmessageactions'] = 'İleti İşlemleri'; +$labels['arialabelcontactquicksearch'] = 'Kişi Arama Formu'; +$labels['arialabelcontactsearchbox'] = 'Kişi Arama İfadesi'; +$labels['arialabelmessageheaders'] = 'İleti Üst Bilgileri'; +$labels['arialabelforwardingoptions'] = 'İletme Ayarları'; +$labels['arialabelreplyalloptions'] = 'Toplu Yanıt Ayarları'; +$labels['arialabelmoremessageactions'] = 'Diğer İleti İşlemleri'; +$labels['arialabelmarkmessagesas'] = 'Seçilmiş iletileri şu şekilde işaretle...'; +$labels['arialabelcomposeoptions'] = 'İleti Oluşturma Ayarları'; +$labels['arialabelresponsesmenu'] = 'Hazır Yanıtlar Menüsü'; +$labels['arialabelattachmentuploadform'] = 'Ek Dosya Yükleme Formu'; +$labels['arialabelattachmentpreview'] = 'Ek Dosya Önizleme'; $labels['ariasummarycomposecontacts'] = 'Kişileri ve grupları alıcı olarak seçmek için listeleme'; -$labels['arialabelcontactexportoptions'] = 'Kişi dışar aktarım seçenekleri'; -$labels['arialabelabookgroupoptions'] = 'Adres defteri/kişiler seçenekleri'; -$labels['arialabelpreferencesform'] = 'Tercihler formu'; -$labels['arialabelidentityeditfrom'] = 'Kimlik düzenleme formu'; -$labels['arialabelresonseeditfrom'] = 'Yanıt düzenleme formu'; -$labels['arialabelsearchterms'] = 'Arama maddeleri'; -$labels['helplistnavigation'] = 'Klavye gezinimi listele'; -$labels['helplistkeyboardnavigation'] = "Yukarı / aşağı oklar: odak / seçim satırı taşımak. -Boşluk: odaklanan satırı seç. -Shift + yukarı/aşağı: Yukarı/aşağı ilave satır seçimi. -Ctrl + Boşluk: Seçilen odaklı satırı seçme/silme koleksiyonuna ekle"; -$labels['helplistkeyboardnavmessages'] = "Sağ/Sol oklar: Mesaj gruplarını genişlet/topla(Sadece thread modu için) -Enter: Seçilen/odaklanan mesajı aç -Delete: Seçili mesajı çöp kutusuna taşı"; -$labels['helplistkeyboardnavcontacts'] = "Enter: Seçili/odaklı kişiyi aç"; +$labels['arialabelcontactexportoptions'] = 'Kişi Dışa Aktarma Ayarları'; +$labels['arialabelabookgroupoptions'] = 'Adres Defteri/Grubu Ayarları'; +$labels['arialabelpreferencesform'] = 'Ayarlar Formu'; +$labels['arialabelidentityeditfrom'] = 'Kimlik Düzenleme Formu'; +$labels['arialabelresonseeditfrom'] = 'Hazır Yanıt Düzenleme Formu'; +$labels['arialabelsearchterms'] = 'Arama İfadeleri'; +$labels['helplistnavigation'] = 'Tuştakımı ile gezinme listesi'; +$labels['helplistkeyboardnavigation'] = "Yukarı / Aşağı Oklar: Satırı odağa ya da seçime taşır. +Boşluk: Odaklanılmış satırı seçer. +Shift + Yukarı/Aşağı Oklar: Yukarı ya da aşağı ek satır seçer. +Ctrl + Boşluk: Odaklanılmış satırı seçime ekler ya da çıkarır."; +$labels['helplistkeyboardnavmessages'] = "Sağ/Sol Oklar: İleti gruplarını genişletir ya da daraltır (yalnız sohbet kipinde). +Enter: Seçilmiş ya da odaklanılmış iletiyi açar. +Delete: Seçilmiş iletiyi çöpe atar."; +$labels['helplistkeyboardnavcontacts'] = "Enter: Seçilmiş ya da odaklanılmış kişiyi açar."; ?> diff --git a/program/localization/tr_TR/messages.inc b/program/localization/tr_TR/messages.inc index dd7ec9f809f..a57f9fe4f81 100644 --- a/program/localization/tr_TR/messages.inc +++ b/program/localization/tr_TR/messages.inc @@ -15,191 +15,196 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/ */ -$messages['errortitle'] = 'Bir hata oluştu!'; -$messages['loginfailed'] = 'Giriş Başarısız'; -$messages['cookiesdisabled'] = 'Tarayıcınız çerezleri kabul etmiyor'; -$messages['sessionerror'] = 'Oturumunuz sona ermiş veya hatalı'; +$messages['errortitle'] = 'Bir sorun çıktı!'; +$messages['loginfailed'] = 'Oturum açılamadı.'; +$messages['cookiesdisabled'] = 'Tarayıcınız çerezleri kabul etmiyor.'; +$messages['sessionerror'] = 'Oturumunuzun süresi geçmiş ya da geçersiz.'; $messages['storageerror'] = 'IMAP sunucusuna bağlanılamadı'; -$messages['servererror'] = 'Sunucu Hatası!'; -$messages['servererrormsg'] = 'Sunucu hatası: $msg'; -$messages['accountlocked'] = 'Çok fazla oturum açma girişimi.Sonra tekrar deneyin.'; -$messages['connerror'] = 'Bağlantı Hatası (Sunucuya erişim başarısız oldu)!'; -$messages['dberror'] = 'Veritabanı Hatası!'; +$messages['servererror'] = 'Sunucu Sorunu!'; +$messages['servererrormsg'] = 'Sunucu Sorunu: $msg'; +$messages['accountlocked'] = 'Çok fazla başarısız oturum açma girişimi. Daha sonra yeniden deneyin.'; +$messages['connerror'] = 'Bağlantı Sorunu (Sunucuya erişilemedi)!'; +$messages['dberror'] = 'Veritabanı Sorunu!'; $messages['windowopenerror'] = 'Açılır pencere engellendi!'; $messages['requesttimedout'] = 'İstek zaman aşımına uğradı'; -$messages['errorreadonly'] = 'İşlem gerçekleştirilemedi. Dizin salt okunabilir'; -$messages['errornoperm'] = 'İşlem gerçekleştirilemedi. İzin verilmedi.'; +$messages['errorreadonly'] = 'İşlem gerçekleştirilemedi. Klasör salt okunur.'; +$messages['errornoperm'] = 'İşlem gerçekleştirilemedi. İzinler yetersiz.'; $messages['erroroverquota'] = 'İşlem gerçekleştirilemedi. Boş alan yok.'; -$messages['erroroverquotadelete'] = 'Boş alan yok. SHIFT+DEL tuş kombinasyonunu kullanarak mesajı silin.'; -$messages['invalidrequest'] = 'Geçersiz İstek! Veri kaydedilmedi'; -$messages['invalidhost'] = 'Geçersiz sunucu adı.'; -$messages['nomessagesfound'] = 'Posta kutusunda ileti bulunamadı.'; -$messages['loggedout'] = 'Oturumu başarılı bir şekilde kapattınız. Güle güle!'; +$messages['erroroverquotadelete'] = 'Diskte boş alan kalmadı. SHIFT+DEL tuşlarına basarak iletiyi silin.'; +$messages['invalidrequest'] = 'İstek geçersiz! Herhangi bir veri kaydedilmedi'; +$messages['invalidhost'] = 'Sunucu adı geçersiz.'; +$messages['nomessagesfound'] = 'Bu posta kutusunda bir ileti bulunamadı.'; +$messages['loggedout'] = 'Oturumunuzu kapattınız. Yeniden görüşmek üzere!'; $messages['mailboxempty'] = 'Posta kutusu boş'; -$messages['nomessages'] = 'Mesaj yok'; +$messages['nomessages'] = 'Herhangi bir ileti yok'; $messages['refreshing'] = 'Yenileniyor...'; $messages['loading'] = 'Yükleniyor...'; $messages['uploading'] = 'Dosya yükleniyor...'; $messages['attaching'] = 'Dosya ekle...'; $messages['uploadingmany'] = 'Dosyalar yükleniyor...'; $messages['loadingdata'] = 'Veriler yükleniyor...'; -$messages['checkingmail'] = 'Yeni postalara bakılıyor...'; -$messages['sendingmessage'] = 'Posta gönderiliyor...'; -$messages['messagesent'] = 'Posta gönderildi'; -$messages['savingmessage'] = 'Posta kaydediliyor...'; -$messages['messagesaved'] = 'Posta taslaklara kaydedildi'; +$messages['checkingmail'] = 'Yeni iletiler denetleniyor...'; +$messages['sendingmessage'] = 'İleti gönderiliyor...'; +$messages['messagesent'] = 'İleti gönderildi.'; +$messages['savingmessage'] = 'İleti kaydediliyor...'; +$messages['messagesaved'] = 'İleti taslaklara kaydedildi.'; $messages['successfullysaved'] = 'Kaydedildi'; $messages['savingresponse'] = 'Yanıt metni kaydediliyor...'; $messages['deleteresponseconfirm'] = 'Yanıt metnini gerçekten silmek istiyor musunuz?'; $messages['addedsuccessfully'] = 'Kişi adres defterine eklendi'; $messages['contactexists'] = 'Bu e-posta adresi rehberde var.'; -$messages['contactnameexists'] = 'Rehberde bu ada sahip biri zaten var.'; -$messages['blockedimages'] = 'Kişisel gizliliğinizi korumak amacıyla postadaki resimler engellendi'; -$messages['encryptedmessage'] = 'Bu şifrelenmiş bir posta olduğu için gösterilemiyor. Özür dilerim!'; -$messages['externalmessagedecryption'] = 'Bu şifreli mesaj, tarayıcınızın eklentileri ile çözülebilir.'; +$messages['contactnameexists'] = 'Rehberde aynı adlı biri zaten var.'; +$messages['blockedimages'] = 'Kişisel gizliliğinizi korumak amacıyla iletideki görseller engellendi.'; +$messages['encryptedmessage'] = 'Bu ileti şifrelenmiş olduğundan görüntülenemiyor.'; +$messages['externalmessagedecryption'] = 'Bu iletinin şifresi tarayıcınızın eklentileri ile çözülebilir.'; $messages['nopubkeyfor'] = '$email için geçerli bir genel anahtar bulunamadı'; -$messages['nopubkeyforsender'] = 'Gönderenin genel anahtar kimliği bulunamadı.Sadece alıcılar için şifrelenmesini istermisiniz?'; -$messages['encryptnoattachments'] = 'Yüklediğiniz ekler şifrelenmemiş. Şifreleme editörü ile yeniden deneyiniz.'; +$messages['nopubkeyforsender'] = 'Gönderenin genel anahtar kimliği bulunamadı. İletinin yalnız alıcılar için şifrelenmesini ister misiniz?'; +$messages['encryptnoattachments'] = 'Yüklediğiniz dosya ekleri şifrelenmemiş. Lütfen dosya eklerini yeniden şifreleme düzenleyicisine ekleyin.'; $messages['searchpubkeyservers'] = 'Kayıp anahtarları anahtar sunucularında aramak ister misiniz?'; $messages['encryptpubkeysfound'] = 'Aşağıdaki genel anahtarlar bulundu:'; -$messages['keyservererror'] = 'Sunucudan anahtar alınamadı.'; -$messages['keyimportsuccess'] = ' $anahtarı genel anahtar olarak alındı.'; -$messages['nocontactsfound'] = 'Kişi bulunamadı'; -$messages['contactnotfound'] = 'İstenen kişi bulunamadı'; -$messages['contactsearchonly'] = 'Kişi aramak için arama terimleri giriniz'; -$messages['sendingfailed'] = 'Posta gönderilemedi'; -$messages['senttooquickly'] = 'Lütfen bu postayı göndermeden önce $sec saniye bekleyin'; -$messages['errorsavingsent'] = 'Gönderilen postayı kaydederken hata oluştu.'; -$messages['errorsaving'] = 'Kaydederken bir hata oluştu.'; -$messages['errormoving'] = 'Posta taşınamadı'; -$messages['errorcopying'] = 'Posta kopyalanamadı'; -$messages['errordeleting'] = 'Posta silinemedi'; -$messages['errormarking'] = 'Posta işaretlenemedi'; -$messages['deletecontactconfirm'] = 'Seçili kişileri silmek istediğinizden emin misiniz?'; -$messages['deletegroupconfirm'] = 'Seçili grupları silmek istediğinizden emin misiniz?'; -$messages['deletemessagesconfirm'] = 'Seçili postaları silmek istediğinizden emin misiniz?'; -$messages['deletefolderconfirm'] = 'Bu klasörü silmek istediğinizden emin misiniz?'; -$messages['purgefolderconfirm'] = 'Bu klasördeki tüm postaları silmek istediğinizden emin misiniz?'; +$messages['keyservererror'] = 'Anahtar sunucudan alınamadı'; +$messages['keyimportsuccess'] = ' $key genel anahtarı anahtarlığınıza alındı'; +$messages['nocontactsfound'] = 'Uygun bir kişi bulunamadı'; +$messages['contactnotfound'] = 'Aranan kişi bulunamadı'; +$messages['contactsearchonly'] = 'Aranacak kişi ifadelerini yazın'; +$messages['sendingfailed'] = 'İleti gönderilemedi.'; +$messages['senttooquickly'] = 'Lütfen bu iletiyi göndermeden önce $sec saniye bekleyin.'; +$messages['errorsavingsent'] = 'Gönderilen ileti kayıt edilirken bir sorun çıktı.'; +$messages['errorsaving'] = 'Kayıt sırasında bir sorun çıktı.'; +$messages['errormoving'] = 'İleti taşınamadı.'; +$messages['errorcopying'] = 'İleti kopyalanamadı.'; +$messages['errordeleting'] = 'İleti silinemedi'; +$messages['errormarking'] = 'İleti işaretlenemedi'; +$messages['deletecontactconfirm'] = 'Seçilmiş kişileri silmek istediğinize emin misiniz?'; +$messages['deletegroupconfirm'] = 'Seçilmiş grupları silmek istediğinize emin misiniz?'; +$messages['deletemessagesconfirm'] = 'Seçilmiş iletileri silmek istediğinize emin misiniz?'; +$messages['deletefolderconfirm'] = 'Bu klasörü silmek istediğinize emin misiniz?'; +$messages['purgefolderconfirm'] = 'Bu klasördeki tüm iletileri silmek istediğinize emin misiniz?'; $messages['contactdeleting'] = 'Kişi(ler) siliniyor...'; $messages['groupdeleting'] = 'Grup siliniyor...'; $messages['folderdeleting'] = 'Klasör siliniyor...'; $messages['foldermoving'] = 'Klasör taşınıyor...'; $messages['foldersubscribing'] = 'Klasöre abone olunuyor...'; $messages['folderunsubscribing'] = 'Klasör aboneliği kaldırılıyor...'; -$messages['formincomplete'] = 'Form tam olarak doldurulmadı'; -$messages['noemailwarning'] = 'Lütfen geçerli bir e-posta adresi girin'; -$messages['nonamewarning'] = 'Lütfen bir isim girin'; -$messages['nopagesizewarning'] = 'Lütfen bir sayfa boyutu girin'; -$messages['nosenderwarning'] = 'Gönderenin e-posta adresini giriniz.'; +$messages['formincomplete'] = 'Form tam olarak doldurulmamış.'; +$messages['noemailwarning'] = 'Lütfen geçerli bir e-posta adresi yazın.'; +$messages['nonamewarning'] = 'Lütfen bir ad yazın.'; +$messages['nopagesizewarning'] = 'Lütfen bir sayfa boyutu yazın.'; +$messages['nosenderwarning'] = 'Göndericinin e-posta adresini yazın.'; $messages['norecipientwarning'] = 'Lütfen en az bir alıcı belirtin'; -$messages['nosubjectwarning'] = '"Konu" kutusu boş bırakılmış. Şimdi bir konu belirtmek ister misiniz?'; -$messages['nobodywarning'] = 'Postayı boş olarak gönder?'; -$messages['notsentwarning'] = 'Posta gönderilmedi. Postanızı iptal etmek istiyor musunuz?'; -$messages['restoresavedcomposedata'] = 'Daha önce oluşturulmuş fakat gönderilmemiş mesaj bulundu.\n\nKonu: $subject\Kaydetme zamanı: $date\n\nBu mesajı geri yüklemek istiyor musunuz?'; -$messages['noldapserver'] = 'Lütfen arama için bir LDAP sunucu seçin'; -$messages['nosearchname'] = 'Lütfen bir kişi ismi veya e-posta adresi girin'; -$messages['notuploadedwarning'] = 'Henüz tüm ekli dosyalar yüklenmedi. Lütfen bekleyin ya da yüklemeyi iptal edin.'; -$messages['searchsuccessful'] = '$nr posta bulundu'; +$messages['disclosedrecipwarning'] = 'Tüm alıcılar diğer alıcıların e-posta adreslerini görebilir. bu durumu engellemek ve gizliliği korumak için Gizli Kopya alanını kullanabilirsiniz.'; +$messages['disclosedreciptitle'] = 'Herkese açık alıcı sayısı çok fazla'; +$messages['nosubjectwarning'] = '"Konu" alanı boş bırakılmış. Şimdi bir konu yazmak ister misiniz?'; +$messages['nosubjecttitle'] = 'Konu belirtilmemiş'; +$messages['nobodywarning'] = 'İleti boş olarak gönderilsin mi?'; +$messages['notsentwarning'] = 'İleti gönderilemedi. İletiyi iptal etmek ister misiniz?'; +$messages['restoresavedcomposedata'] = 'Daha önce oluşturulmuş ancak gönderilmemiş bir ileti bulundu.\n\nKonu: $subject\Kaydetme zamanı: $date\n\nBu iletiyi geri yüklemek istiyor musunuz?'; +$messages['noldapserver'] = 'Lütfen aranacak LDAP sunucusunu seçin.'; +$messages['nosearchname'] = 'Lütfen bir kişi adı ya da e-posta adresi yazın.'; +$messages['notuploadedwarning'] = 'Henüz tüm ek dosyaları yüklenmedi. Lütfen bekleyin ya da yüklemeyi iptal edin.'; +$messages['searchsuccessful'] = '$nr ileti bulundu'; $messages['contactsearchsuccessful'] = '$nr kişi bulundu.'; -$messages['searchnomatch'] = 'Aramanıza uygun hiçbir sonuç bulunamadı.'; +$messages['searchnomatch'] = 'Arama ifadenize uygun bir sonuç bulunamadı.'; $messages['searching'] = 'Aranıyor...'; $messages['checking'] = 'Denetleniyor...'; -$messages['stillsearching'] = 'Hala arıyor...'; +$messages['stillsearching'] = 'Hala aranıyor...'; $messages['nospellerrors'] = 'Yazım hatası bulunamadı.'; $messages['folderdeleted'] = 'Klasör silindi.'; $messages['foldersubscribed'] = 'Klasöre abone olundu.'; $messages['folderunsubscribed'] = 'Klasör aboneliği kaldırıldı.'; $messages['folderpurged'] = 'Klasör boşaltıldı.'; -$messages['folderexpunged'] = 'Klasör sıkıştırıldı'; +$messages['folderexpunged'] = 'Klasör sıkıştırıldı.'; $messages['deletedsuccessfully'] = 'Silindi.'; -$messages['converting'] = 'Postanın biçimlendirmesi kaldırılıyor...'; -$messages['messageopenerror'] = 'Sunucudan posta yüklenemedi.'; -$messages['filelinkerror'] = 'Dosya ekleme başarısız...'; -$messages['fileuploaderror'] = 'Dosya yükleme başarısız.'; -$messages['filesizeerror'] = 'Yüklenen dosya en büyük dosya boyunu ($size) aşıyor.'; -$messages['copysuccess'] = '$nr adet kişi başarıyla kopyalandı.'; -$messages['movesuccess'] = '$nr adet kişi başarıyla taşındı.'; +$messages['converting'] = 'Biçimlendirme kaldırılıyor...'; +$messages['messageopenerror'] = 'İleti sunucudan yüklenemedi.'; +$messages['filelinkerror'] = 'Dosya eklenemedi.'; +$messages['fileuploaderror'] = 'Dosya yüklenemedi.'; +$messages['filesizeerror'] = 'Dosya izin verilen en büyük değer olan $size boyutundan büyük.'; +$messages['filecounterror'] = 'Bir kerede en fazla $count dosya yüklenebilir.'; +$messages['msgsizeerror'] = 'Dosya eklenemedi. İzin verilen en büyük değer olan $size boyutundan büyük.'; +$messages['copysuccess'] = '$nr kişi kopyalandı.'; +$messages['movesuccess'] = '$nr kişi taşındı.'; $messages['copyerror'] = 'Kişiler kopyalanamadı.'; -$messages['moveerror'] = 'Kişiler taşınamadı.'; +$messages['moveerror'] = 'Herhangi bir kişi taşınamadı.'; $messages['sourceisreadonly'] = 'Adres kaynağı salt okunur durumda.'; $messages['errorsavingcontact'] = 'Kişi adresi kaydedilemedi.'; -$messages['movingmessage'] = 'Posta(lar) taşınıyor...'; -$messages['copyingmessage'] = 'Posta(lar) kopyalanıyor...'; +$messages['movingmessage'] = 'İleti(ler) taşınıyor...'; +$messages['copyingmessage'] = 'İleti(ler) kopyalanıyor...'; $messages['copyingcontact'] = 'Kişile(ler) kopyalanıyor...'; $messages['movingcontact'] = 'Kişi(ler) taşınıyor...'; -$messages['deletingmessage'] = 'Posta(lar) siliniyor...'; -$messages['markingmessage'] = 'Posta(lar) işaretleniyor...'; +$messages['deletingmessage'] = 'İleti(ler) siliniyor...'; +$messages['markingmessage'] = 'İleti(ler) işaretleniyor...'; $messages['addingmember'] = 'Gruba kişi(ler) ekleniyor...'; -$messages['removingmember'] = 'Gruptan kişi(ler) siliniyor...'; -$messages['receiptsent'] = 'Okundu onayı başarıyla gönderildi.'; +$messages['removingmember'] = 'Gruptan kişi(ler) çıkarılıyor...'; +$messages['receiptsent'] = 'Okundu onayı gönderildi.'; $messages['errorsendingreceipt'] = 'Okundu onayı gönderilemedi.'; -$messages['deleteidentityconfirm'] = 'Bu kimliği silmek istediğinizden emin misiniz?'; +$messages['deleteidentityconfirm'] = 'Bu kimliği silmek istediğinize emin misiniz?'; $messages['nodeletelastidentity'] = 'Son kimliğiniz olduğu için bu kimliği silemezsiniz.'; -$messages['forbiddencharacter'] = 'Klasör ismi yasaklanmış bir karakter içeriyor.'; +$messages['forbiddencharacter'] = 'Klasör adında izin verilmeyen karakterler var.'; $messages['selectimportfile'] = 'Lütfen yüklenecek dosyayı seçin.'; -$messages['addresswriterror'] = 'Seçili adres defteri yazılabilir durumda değil.'; -$messages['contactaddedtogroup'] = 'Kişiler bu başarıyla gruba eklendi.'; +$messages['addresswriterror'] = 'Seçilmiş adres defteri yazılabilir durumda değil.'; +$messages['contactaddedtogroup'] = 'Kişiler bu gruba eklendi.'; $messages['contactremovedfromgroup'] = 'Kişiler bu gruptan çıkarıldı'; -$messages['nogroupassignmentschanged'] = 'Grup atamalarında bir değişiklik yapılmadı'; -$messages['importwait'] = 'Aktarılıyor, lütfen bekleyin...'; -$messages['importformaterror'] = 'İçe aktarım başarısız. Yüklenen dosya geçerli bir içe aktarım dosyası değil.'; -$messages['importconfirm'] = '$inserted kişiler başarıyla aktarıldı'; -$messages['importconfirmskipped'] = 'Var olan $skipped girdi atlandı'; -$messages['importmessagesuccess'] = '$nr adet mesaj başarıyla içe aktarıldı'; -$messages['importmessageerror'] = 'İçe aktarım başarısız. Yüklenen dosya geçerli bir içe aktarım dosyası değil.'; -$messages['opnotpermitted'] = 'Bu işleme izin verilmedi!'; +$messages['nogroupassignmentschanged'] = 'Grup atamalarında bir değişiklik yapılmadı.'; +$messages['importwait'] = 'Lütfen içe aktarma sırasında bekleyin...'; +$messages['importformaterror'] = 'İçe aktarılamadı. Yüklenen dosya geçerli bir içe aktarım dosyası değil.'; +$messages['importconfirm'] = '$inserted kişi aktarıldı'; +$messages['importconfirmskipped'] = 'Var olan $skipped kayıt atlandı'; +$messages['importmessagesuccess'] = '$nr ileti içe aktarıldı'; +$messages['importmessageerror'] = 'İçe aktarılamadı. Yüklenen dosya geçerli bir ileti ya da posta kutusu dosyası değil'; +$messages['opnotpermitted'] = 'Bu işleme izin verilmiyor!'; $messages['nofromaddress'] = 'Bu kimliğin e-posta adresi yok.'; -$messages['editorwarning'] = 'Editör tipini değiştirmek, metin biçimlendirmeyi kaybetmenize sebep olabilir. Devam etmek istiyor musunuz?'; -$messages['httpreceivedencrypterror'] = 'Ayarlarda bir hata oluştu. Sistem yöneticinize haber verin. Postanız gönderilemedi'; -$messages['smtpconnerror'] = 'SMTP Hatası ($code): Sunucuya bağlanılamadı'; -$messages['smtpautherror'] = 'SMTP Hatası ($code): Kimlik doğrulama başarısız oldu'; -$messages['smtpfromerror'] = 'SMTP Hatası ($code): Gönderen adresi "$from" olarak ayarlanamadı ($msg)'; -$messages['smtptoerror'] = 'SMTP Hatası ($code): "$to" alıcısı eklenemedi ($msg)'; -$messages['smtprecipientserror'] = 'SMTP Hatası: Posta alıcılarının listesi ayrıştırılamadı'; -$messages['smtperror'] = 'SMTP Hatası: $msg'; -$messages['emailformaterror'] = 'Geçersiz e-posta adresi: $email'; -$messages['toomanyrecipients'] = 'Çok fazla alıcı. En fazla $max alıcı girebilirsiniz.'; +$messages['editorwarning'] = 'Düzenleyici türünü değiştirmek, metin biçimlendirmesinin kaybolmasına neden olabilir. Devam etmek istiyor musunuz?'; +$messages['httpreceivedencrypterror'] = 'Ayarlarda bir sorun var. Sistem yöneticinizle görüşün. İletiniz gönderilemedi'; +$messages['smtpconnerror'] = 'SMTP Sorunu ($code): Sunucuya bağlanılamadı'; +$messages['smtpautherror'] = 'SMTP Sorunu ($code): Kimlik doğrulanamadı.'; +$messages['smtpfromerror'] = 'SMTP Sorunu ($code): Gönderen adresi "$from" olarak ayarlanamadı ($msg)'; +$messages['smtptoerror'] = 'SMTP Sorunu ($code): "$to" alıcısı eklenemedi ($msg)'; +$messages['smtprecipientserror'] = 'SMTP Sorunu: Alıcı listesi ayrıştırılamadı'; +$messages['smtperror'] = 'SMTP Sorunu: $msg'; +$messages['emailformaterror'] = 'E-posta adresi geçersiz: $email'; +$messages['toomanyrecipients'] = 'Çok fazla alıcı var. En fazla $max alıcı olabilir.'; $messages['maxgroupmembersreached'] = 'Grup üyelerinin sayısı $max sınırını aşıyor.'; -$messages['internalerror'] = 'Dahili bir hata oluştu. Lütfen tekrar deneyin.'; -$messages['contactdelerror'] = 'Kişi(ler) silinemedi'; -$messages['contactdeleted'] = 'Kişi(ler) silindi'; -$messages['contactrestoreerror'] = 'Silinen kişi(ler) geri getirilemiyor.'; -$messages['contactrestored'] = 'Kişi(ler) başarıyla geri getirildi.'; +$messages['internalerror'] = 'Sorun var! Lütfen yeniden deneyin.'; +$messages['contactdelerror'] = 'Kişi(ler) silinemedi.'; +$messages['contactdeleted'] = 'Kişi(ler) silindi.'; +$messages['contactrestoreerror'] = 'Silinen kişi(ler) geri yüklenemiyor.'; +$messages['contactrestored'] = 'Kişi(ler) geri yüklendi.'; $messages['groupdeleted'] = 'Grup silindi'; -$messages['grouprenamed'] = 'Grup ismi değiştirildi'; -$messages['groupcreated'] = 'Grup oluşturuldu'; +$messages['grouprenamed'] = 'Grup adı değiştirildi.'; +$messages['groupcreated'] = 'Grup oluşturuldu.'; $messages['savedsearchdeleted'] = 'Kayıtlı arama silindi.'; $messages['savedsearchdeleteerror'] = 'Kayıtlı arama silinemedi.'; $messages['savedsearchcreated'] = 'Kayıtlı arama oluşturuldu.'; $messages['savedsearchcreateerror'] = 'Kayıtlı arama oluşturulamadı.'; -$messages['messagedeleted'] = 'Posta(lar) silindi'; -$messages['messagemoved'] = 'Posta(lar) taşındı'; -$messages['messagemovedtotrash'] = 'Posta(lar) Çöpe taşındı.'; -$messages['messagecopied'] = 'Posta(lar) kopyalandı'; -$messages['messagemarked'] = 'Posta(lar) işaretlendi'; -$messages['autocompletechars'] = 'otomatik tamamlama için en az $min karakter girin'; +$messages['messagedeleted'] = 'İleti(ler) silindi.'; +$messages['messagemoved'] = 'İleti(ler) taşındı.'; +$messages['messagemovedtotrash'] = 'İleti(ler) çöpe atıldı.'; +$messages['messagecopied'] = 'İleti(ler) kopyalandı.'; +$messages['messagemarked'] = 'İleti(ler) işaretlendi.'; +$messages['autocompletechars'] = 'Otomatik tamamlama için en az $min karakter yazın.'; $messages['autocompletemore'] = 'Fazla sayıda eşleşen öğe bulundu. Lütfen daha fazla karakter yazın.'; -$messages['namecannotbeempty'] = 'İsim alanı boş olamaz'; -$messages['nametoolong'] = 'İsim çok uzun'; +$messages['namecannotbeempty'] = 'Ad alanı boş olamaz.'; +$messages['nametoolong'] = 'Ad çok uzun.'; $messages['namedotforbidden'] = 'Klasör adı nokta işareti ile başlayamaz.'; $messages['folderupdated'] = 'Klasör güncellendi'; -$messages['foldercreated'] = 'Klasör oluşturuldu'; -$messages['invalidimageformat'] = 'Geçerli bir resim biçimi değil.'; -$messages['mispellingsfound'] = 'Postada yazım hataları tespit edildi.'; +$messages['foldercreated'] = 'Klasör oluşturuldu.'; +$messages['invalidimageformat'] = 'Geçerli bir görsel biçimi değil.'; +$messages['mispellingsfound'] = 'İletide yazım hataları var.'; $messages['parentnotwritable'] = 'Klasör, seçilen üst klasöre taşınamıyor. Erişim izni yok.'; $messages['messagetoobig'] = 'Bu ileti parçası işlenemeyecek kadar büyük.'; -$messages['attachmentvalidationerror'] = 'UYARI! Bu eklenti mesajda belirtilenden farklı olduğu için şüpheli bulundu. Eğer göndericiye güvenmiyorsanız eki web tarayıcısında açmayın. Şüpheli içerik bulunabilir.'; -$messages['noscriptwarning'] = 'Uyarı: Bu e-posta servisi Javascript gerektirmektedir! Servisi kullanabilmek için lütfen web tarayıcınızın ayarlarından Javascript\'i etkinleştiriniz.'; -$messages['messageissent'] = 'Mesaj zaten gönderildi. Fakat kaydedilmedi. Şimdi kaydetmek ister misiniz?'; +$messages['attachmentvalidationerror'] = 'UYARI! Bu ek dosyası iletide belirtilen dosyadan farklı olduğu için şüpheli bulundu. Göndericiye güvenmiyorsanız eki web tarayıcısında açmayın. Zararlı içerik olabilir.

    Beklenen: $expected; Bulunan: $detected'; +$messages['noscriptwarning'] = 'Uyarı: Bu web e-posta hizmetinin kullanılabilmesi için Javascript gereklidir! Hizmeti kullanabilmek için lütfen web tarayıcınızın Javascript ayarlarını etkinleştirin.'; +$messages['messageissent'] = 'İleti zaten gönderilmiş ancak henüz kaydedilmemiş. Şimdi kaydetmek ister misiniz?'; $messages['errnotfound'] = 'Dosya bulunamadı.'; $messages['errnotfoundexplain'] = 'İstenen kaynak bulunamadı!..'; -$messages['errfailedrequest'] = 'Başarısız istek.'; -$messages['errauthorizationfailed'] = 'Yetkilendirme başarısız.'; -$messages['errunauthorizedexplain'] = 'Bu hizmete erişme yetkiniz yok.'; -$messages['errrequestcheckfailed'] = 'Doğrulama başarısız.'; -$messages['errcsrfprotectionexplain'] = "Güvenliğiniz için, CSRF karşı bu kaynağa erişim sabitlenmiştir.\nlfBakınız web uygulaması muhtemelen düzgün kapatılmadı.\n\nŞimdi etkileşimi doğrulayıp devam edin."; +$messages['errfailedrequest'] = 'İstek yerine getirilemedi'; +$messages['errauthorizationfailed'] = 'Kimlik Doğrulanamadı'; +$messages['errunauthorizedexplain'] = 'Bu hizmete erişme izniniz yok!'; +$messages['errrequestcheckfailed'] = 'İstek Denetlenemedi'; +$messages['errcsrfprotectionexplain'] = "Güvenliğiniz için, CSRF tehditine karşı bu kaynağa erişim engellenmiştir.\nlfBu iletiyi görüyorsanız, büyük olasılıkla oturum kapatılmadan web uygulamasından çıkılmıştır.\n\nDevam etmek için insan müdahalesi gereklidir."; $messages['errcontactserveradmin'] = 'Sunucu yöneticinize başvurun.'; -$messages['clicktoresumesession'] = 'Önceki oturuma devam etmek için tıklayınız.'; -$messages['errcomposesession'] = 'Oturum açma hatası'; +$messages['clicktoresumesession'] = 'Önceki oturuma devam etmek için buraya tıklayın'; +$messages['errcomposesession'] = 'Oturum oluşturma hatası'; $messages['errcomposesessionexplain'] = 'Açılmak istenen oturum bulunamadı.'; $messages['clicktocompose'] = 'Yeni bir ileti oluşturmak için buraya tıklayın.'; diff --git a/program/localization/uk_UA/labels.inc b/program/localization/uk_UA/labels.inc index c2924959111..261ddc1f2b2 100644 --- a/program/localization/uk_UA/labels.inc +++ b/program/localization/uk_UA/labels.inc @@ -44,7 +44,7 @@ $labels['priority'] = 'Пріоритет'; $labels['organization'] = 'Організація'; $labels['readstatus'] = 'Статус прочитання'; $labels['listoptions'] = 'Налаштування списку...'; -$labels['mailboxlist'] = 'Папки'; +$labels['mailboxlist'] = 'Теки'; $labels['messagesfromto'] = 'Повідомлення з $from по $to із $count'; $labels['threadsfromto'] = 'Обговорення з $from по $to із $count'; $labels['messagenrof'] = 'Лист $nr із $count'; @@ -128,6 +128,10 @@ $labels['markunread'] = 'Позначити як непрочитане'; $labels['markflagged'] = 'Додати прапорець'; $labels['markunflagged'] = 'Зняти прапорець'; $labels['moreactions'] = 'Інші дії...'; +$labels['markallread'] = 'Позначити усі повідомлення прочитаними'; +$labels['folders-cur'] = 'Лише обрані теки'; +$labels['folders-sub'] = 'Обрана тека і її вкладені теки'; +$labels['folders-all'] = 'Усі теки'; $labels['more'] = 'Ще'; $labels['back'] = 'Назад'; $labels['options'] = 'Параметри'; @@ -172,7 +176,7 @@ $labels['listcolumns'] = 'Атрибути для відображення'; $labels['listsorting'] = 'Сортувати за атрибутом'; $labels['listorder'] = 'Порядок сортування'; $labels['listmode'] = 'Режим перегляду списку'; -$labels['folderactions'] = 'Операції з папкою...'; +$labels['folderactions'] = 'Операції з текою...'; $labels['compact'] = 'Стиснути'; $labels['empty'] = 'Спорожнити'; $labels['importmessages'] = 'Імпорт повідомлень'; @@ -192,9 +196,9 @@ $labels['body'] = 'Тіло повідомлення'; $labels['type'] = 'Тип'; $labels['namex'] = 'Ім\'я'; $labels['searchscope'] = 'Масштаб'; -$labels['currentfolder'] = 'Поточна папка'; -$labels['subfolders'] = 'Ця і підпапки'; -$labels['allfolders'] = 'Усі папки'; +$labels['currentfolder'] = 'Поточна тека'; +$labels['subfolders'] = 'Ця і підтека'; +$labels['allfolders'] = 'Усі теки'; $labels['searchinterval-1W'] = 'старіші ніж тиждень'; $labels['searchinterval-1M'] = 'старіші ніж місяць'; $labels['searchinterval-1Y'] = 'старіші ніж рік'; @@ -253,6 +257,7 @@ $labels['uploadprogress'] = '$percent ($current із $total)'; $labels['close'] = 'Закрити'; $labels['messageoptions'] = 'Налаштування листів'; $labels['togglecomposeoptions'] = 'Перемкнути опції написання'; +$labels['attachmentrename'] = 'Перейменувати вкладення'; $labels['low'] = 'Низький'; $labels['lowest'] = 'Найнижчий'; $labels['normal'] = 'Нормальний'; @@ -390,14 +395,14 @@ $labels['newidentity'] = 'Створити новий профіль'; $labels['addidentity'] = 'Додати профіль'; $labels['editidentity'] = 'Редагувати профіль'; $labels['preferhtml'] = 'Показувати в HTML'; -$labels['defaultcharset'] = 'Кодування за замовчуваннням'; +$labels['defaultcharset'] = 'Кодування типово'; $labels['htmlmessage'] = 'Лист у HTML'; $labels['messagepart'] = 'Частина'; $labels['digitalsig'] = 'Цифровий підпис'; $labels['dateformat'] = 'Формат дати'; $labels['timeformat'] = 'Формат часу'; $labels['prettydate'] = 'Дати у зручному форматі'; -$labels['setdefault'] = 'Встановити за замовчуванням'; +$labels['setdefault'] = 'Встановити типово'; $labels['autodetect'] = 'Визначати автоматично'; $labels['language'] = 'Мова'; $labels['timezone'] = 'Часовий пояс'; @@ -414,7 +419,7 @@ $labels['showemail'] = 'Показувати електронну адресу $labels['previewpane'] = 'Показати попередній перегляд'; $labels['skin'] = 'Тема'; $labels['logoutclear'] = 'Очищати кошик при виході'; -$labels['logoutcompact'] = 'Стискати папку Вхідні при виході'; +$labels['logoutcompact'] = 'Стискати теку Вхідні при виході'; $labels['uisettings'] = 'Інтерфейс користувача'; $labels['serversettings'] = 'Налаштування сервера'; $labels['mailboxview'] = 'Вид інтерфейсу'; @@ -428,7 +433,7 @@ $labels['readwhendeleted'] = 'Позначати як прочитане при $labels['flagfordeletion'] = 'Позначати для видалення замість видалення'; $labels['skipdeleted'] = 'Не показувати видалені листи'; $labels['deletealways'] = 'Видаляти листи при невдалому переміщенні до кошика'; -$labels['deletejunk'] = 'Напряму видаляти повідомлення з папки Спам'; +$labels['deletejunk'] = 'Напряму видаляти повідомлення з теки Спам'; $labels['showremoteimages'] = 'Показувати віддалені зображення '; $labels['fromknownsenders'] = 'від відомих відправників'; $labels['always'] = 'завжди'; @@ -450,9 +455,9 @@ $labels['savelocalstorage'] = "Зберегти у локальному схов $labels['advancedoptions'] = 'Додаткові параметри'; $labels['toggleadvancedoptions'] = 'Перемкнути додаткові параметри'; $labels['focusonnewmessage'] = 'Фокусувати вікно браузера при новому листі'; -$labels['checkallfolders'] = 'Перевіряти нові листи у всіх папках'; +$labels['checkallfolders'] = 'Перевіряти нові листи у всіх теках'; $labels['displaynext'] = 'Після видалення/переміщення листа відображати наступний'; -$labels['defaultfont'] = 'Шрифт за замовчуванням HTML повідомлення'; +$labels['defaultfont'] = 'Типовий шрифт HTML повідомлення'; $labels['mainoptions'] = 'Основні налаштування'; $labels['browseroptions'] = 'Налаштування браузера'; $labels['section'] = 'Розділ'; @@ -474,8 +479,8 @@ $labels['previewpanemarkread'] = 'Позначити переглянуті л $labels['afternseconds'] = 'через $n секунд'; $labels['reqmdn'] = 'Завжди вимагати повідомлення про доставку'; $labels['reqdsn'] = 'Завжди вимагати повідомлення про статус доставки'; -$labels['replysamefolder'] = 'Розмістити відповіді у тій же папці, де знаходиться оригінал'; -$labels['defaultabook'] = 'Адресна книга за замовчуванням'; +$labels['replysamefolder'] = 'Розмістити відповіді у тій же теці, де знаходиться оригінал'; +$labels['defaultabook'] = 'Адресна книга типово'; $labels['autocompletesingle'] = 'Пропускати додаткові адреси в автозавершенні'; $labels['listnamedisplay'] = 'Виводити список контактів як'; $labels['spellcheckbeforesend'] = 'Перевірити орфографію перед відправкою повідомлення'; @@ -492,27 +497,27 @@ $labels['asattachment'] = 'як вкладення'; $labels['replyallmode'] = 'Типова дія для кнопки [Відповісти всім]'; $labels['replyalldefault'] = 'відповісти усім'; $labels['replyalllist'] = 'відповісти лише списку розсилки (якщо є)'; -$labels['folder'] = 'Папка'; -$labels['folders'] = 'Папки'; -$labels['foldername'] = 'Назва папки'; +$labels['folder'] = 'Тека'; +$labels['folders'] = 'Теки'; +$labels['foldername'] = 'Назва теки'; $labels['subscribed'] = 'Підписані'; $labels['messagecount'] = 'Листи'; $labels['create'] = 'Створити'; -$labels['createfolder'] = 'Створити нову папку'; -$labels['managefolders'] = 'Керування папками'; -$labels['specialfolders'] = 'Особливі папки'; +$labels['createfolder'] = 'Створити нову теку'; +$labels['managefolders'] = 'Керування теками'; +$labels['specialfolders'] = 'Особливі теки'; $labels['properties'] = 'Властивості'; -$labels['folderproperties'] = 'Властивості папки'; -$labels['parentfolder'] = 'Батьківська папка'; +$labels['folderproperties'] = 'Властивості теки'; +$labels['parentfolder'] = 'Батьківська тека'; $labels['location'] = 'Розташування'; $labels['info'] = 'Інформація'; -$labels['getfoldersize'] = 'Показати розмір папки'; +$labels['getfoldersize'] = 'Показати розмір теки'; $labels['changesubscription'] = 'Змінити підписку'; -$labels['foldertype'] = 'Тип папки'; -$labels['personalfolder'] = 'Приватна папка'; -$labels['otherfolder'] = 'Папка іншого користувача'; -$labels['sharedfolder'] = 'Публічна папка'; -$labels['findfolders'] = 'Знайти папки'; +$labels['foldertype'] = 'Тип теки'; +$labels['personalfolder'] = 'Приватна тека'; +$labels['otherfolder'] = 'Тека іншого користувача'; +$labels['sharedfolder'] = 'Публічна тека'; +$labels['findfolders'] = 'Знайти теки'; $labels['namespace.personal'] = 'Особисті'; $labels['namespace.other'] = 'Інші користувачі'; $labels['namespace.shared'] = 'Поширені'; @@ -557,12 +562,12 @@ $labels['arialabelmailsearchform'] = 'Форма пошуку електронн $labels['arialabelcontactsearchform'] = 'Форма пошуку контактів'; $labels['arialabelmailquicksearchbox'] = 'Ввід пошуку пошти'; $labels['arialabelquicksearchbox'] = 'Ввід пошуку'; -$labels['arialabelfoldersearchfilter'] = 'Фільтр списку папок'; -$labels['arialabelfoldersearchform'] = 'Форма пошуку папок'; -$labels['arialabelfolderlist'] = 'Вибір папки пошти'; +$labels['arialabelfoldersearchfilter'] = 'Фільтр списку тек'; +$labels['arialabelfoldersearchform'] = 'Форма пошуку тек'; +$labels['arialabelfolderlist'] = 'Вибір теки пошти'; $labels['arialabelmessagelist'] = 'Список повідомлень пошти'; $labels['arialabelmailpreviewframe'] = 'Попередній перегляд повідомлення'; -$labels['arialabelmailboxmenu'] = 'Меню дій з папками'; +$labels['arialabelmailboxmenu'] = 'Меню дій з теками'; $labels['arialabellistselectmenu'] = 'Меню вибору списку'; $labels['arialabelthreadselectmenu'] = 'Меню списку гілок'; $labels['arialabelmessagelistoptions'] = 'Опції відображення і сортування списку повідомлень'; diff --git a/program/localization/uk_UA/messages.inc b/program/localization/uk_UA/messages.inc index 034257a5dd1..b65478e56a3 100644 --- a/program/localization/uk_UA/messages.inc +++ b/program/localization/uk_UA/messages.inc @@ -27,7 +27,7 @@ $messages['connerror'] = 'Помилка з\'єднання (не вдалося $messages['dberror'] = 'Помилка бази даних!'; $messages['windowopenerror'] = 'Спливне вікно було заблоковано!'; $messages['requesttimedout'] = 'Час запиту вийшов'; -$messages['errorreadonly'] = 'Неможливо виконати операцію. Папка доступна тільки для читання.'; +$messages['errorreadonly'] = 'Неможливо виконати операцію. Тека доступна тільки для читання.'; $messages['errornoperm'] = 'Неможливо виконати операцію. Доступ заборонено'; $messages['erroroverquota'] = 'Неможливо виконати операцію. Немає вільного місця на диску.'; $messages['erroroverquotadelete'] = 'Недостатньо вільного місця на диску. Скористайтесь SHIFT+DEL для видалення повідомлення.'; @@ -78,14 +78,14 @@ $messages['errormarking'] = 'Не вдалося позначити лист(и) $messages['deletecontactconfirm'] = 'Ви дійсно бажаєте видалити вибрані контакти?'; $messages['deletegroupconfirm'] = 'Ви дійсно хочете видалити обрану групу?'; $messages['deletemessagesconfirm'] = 'Ви дійсно бажаєте видалити вибрані листи?'; -$messages['deletefolderconfirm'] = 'Ви дійсно бажаєте видалити цю папку?'; -$messages['purgefolderconfirm'] = 'Ви дійсно бажаєте видалити всі листи у цій папці?'; +$messages['deletefolderconfirm'] = 'Ви дійсно бажаєте видалити цю теку?'; +$messages['purgefolderconfirm'] = 'Справді бажаєте видалити усі листи у цій теці?'; $messages['contactdeleting'] = 'Видалення контакту(ів)...'; $messages['groupdeleting'] = 'Видалення групи...'; -$messages['folderdeleting'] = 'Видалення папки...'; -$messages['foldermoving'] = 'Переміщення папки...'; -$messages['foldersubscribing'] = 'Підписати папку...'; -$messages['folderunsubscribing'] = 'Відписати папку...'; +$messages['folderdeleting'] = 'Видалення теки...'; +$messages['foldermoving'] = 'Переміщення теки...'; +$messages['foldersubscribing'] = 'Підписати теку...'; +$messages['folderunsubscribing'] = 'Відписати теку...'; $messages['formincomplete'] = 'Заповнено не всі поля'; $messages['noemailwarning'] = 'Будь ласка, введіть коректну адресу електронної пошти'; $messages['nonamewarning'] = 'Будь ласка, введіть ім\'я'; @@ -106,17 +106,18 @@ $messages['searching'] = 'Пошук...'; $messages['checking'] = 'Перевірка...'; $messages['stillsearching'] = 'Пошук триває…'; $messages['nospellerrors'] = 'Орфографічних помилок не знайдено'; -$messages['folderdeleted'] = 'Папка видалена'; -$messages['foldersubscribed'] = 'Папка підписана'; -$messages['folderunsubscribed'] = 'Папка відписана'; -$messages['folderpurged'] = 'Папка видалена'; -$messages['folderexpunged'] = 'Папка очищена'; +$messages['folderdeleted'] = 'Тека видалена'; +$messages['foldersubscribed'] = 'Тека підписана'; +$messages['folderunsubscribed'] = 'Тека відписана'; +$messages['folderpurged'] = 'Тека видалена'; +$messages['folderexpunged'] = 'Тека очищена'; $messages['deletedsuccessfully'] = 'Видалено успішно'; $messages['converting'] = 'Видалення форматування...'; $messages['messageopenerror'] = 'Не вдалося завантажити повідомлення з сервера'; $messages['filelinkerror'] = 'Не вдалося прикріпити файл.'; $messages['fileuploaderror'] = 'Не вдалося вкласти файл'; $messages['filesizeerror'] = 'Розмір вибраного файлу перевищує максимально дозволений ($size)'; +$messages['msgsizeerror'] = 'Помилка при додаванні вкладення. Максимальний розмір повідомлення файлу ($size).'; $messages['copysuccess'] = 'Успішно скопійовано $nr контактів'; $messages['movesuccess'] = 'Успішно переміщено $nr контактів'; $messages['copyerror'] = 'Не вдалося скопіювати жодного контакту.'; @@ -135,7 +136,7 @@ $messages['receiptsent'] = 'Повідомлення про прочитання $messages['errorsendingreceipt'] = 'Не вдалося відправити повідомлення про прочитання'; $messages['deleteidentityconfirm'] = 'Ви дійсно бажаєте видалити цей профіль?'; $messages['nodeletelastidentity'] = 'Ви не можете видалити цей профіль, він у Вас останній.'; -$messages['forbiddencharacter'] = 'Назва папки містить заборонені символи'; +$messages['forbiddencharacter'] = 'Назва теки містить заборонені символи'; $messages['selectimportfile'] = 'Виберіть файл для завантаження'; $messages['addresswriterror'] = 'Обрана адресна книга недоступна для запису'; $messages['contactaddedtogroup'] = 'Контакти успішно додано до цієї групи'; @@ -181,12 +182,12 @@ $messages['autocompletechars'] = 'Введіть щонайменше $min си $messages['autocompletemore'] = 'Знайдено багато відповідних записів. Будь ласка, введіть більше символів.'; $messages['namecannotbeempty'] = 'Ім\'я не може бути пустим'; $messages['nametoolong'] = 'Занадто довге ім\'я'; -$messages['namedotforbidden'] = 'Назва папки не може починатися з крапки.'; -$messages['folderupdated'] = 'Папка успішно оновлена'; -$messages['foldercreated'] = 'Папка створена'; +$messages['namedotforbidden'] = 'Назва теки не може починатися з крапки.'; +$messages['folderupdated'] = 'Тека успішно оновлена'; +$messages['foldercreated'] = 'Тека створена'; $messages['invalidimageformat'] = 'Недійсний формат зображення'; $messages['mispellingsfound'] = 'Знайдено орфографічні помилки у повідомленні.'; -$messages['parentnotwritable'] = 'Неможливо створити/перемістити папку до обраної батьківської папки. Нема прав доступу.'; +$messages['parentnotwritable'] = 'Неможливо створити/перемістити теку до обраної батьківської теки. Нема прав доступу.'; $messages['messagetoobig'] = 'Частина повідомлення занадто велика для опрацювання.'; $messages['attachmentvalidationerror'] = 'УВАГА! Це вкладення є підозрілим, тому що його тип не збігається з типом, оголошеним у повідомленні. Якщо Ви не довіряєте відправнику, Ви не повинні відкривати його в браузері, оскільки його вміст може бути шкідливим.

    Очікуване: $expected; знайдене: $detected '; $messages['noscriptwarning'] = 'Увага: Даний клієнт електронної пошти потрібує Javascript! Щоб використовувати його, необхідно включити підтримку Javascript у налаштуваннях Вашого браузера.'; diff --git a/program/localization/zh_CN/labels.inc b/program/localization/zh_CN/labels.inc index 01330b8f33d..0d99fc7c80a 100644 --- a/program/localization/zh_CN/labels.inc +++ b/program/localization/zh_CN/labels.inc @@ -253,6 +253,7 @@ $labels['uploadprogress'] = '$percent ($current of $total)'; $labels['close'] = '关闭'; $labels['messageoptions'] = '邮件选项...'; $labels['togglecomposeoptions'] = '切换布局选项'; +$labels['attachmentrename'] = '重命名附件'; $labels['low'] = '低'; $labels['lowest'] = '最低'; $labels['normal'] = '普通'; diff --git a/program/localization/zh_CN/messages.inc b/program/localization/zh_CN/messages.inc index cb7e5c6b5f6..0cda548a1d8 100644 --- a/program/localization/zh_CN/messages.inc +++ b/program/localization/zh_CN/messages.inc @@ -117,6 +117,7 @@ $messages['messageopenerror'] = '无法从服务器加载邮件内容。'; $messages['filelinkerror'] = '附加文件失败。'; $messages['fileuploaderror'] = '文件上传失败。'; $messages['filesizeerror'] = '上传的文件超过了 $size 的大小限制。'; +$messages['msgsizeerror'] = '附加文件失败。邮件超出最大大小 ($size)。'; $messages['copysuccess'] = '成功复制 $nr 个联系人。'; $messages['movesuccess'] = '成功移动 $nr 个联系人。'; $messages['copyerror'] = '无法复制联系人。'; diff --git a/program/localization/zh_TW/labels.inc b/program/localization/zh_TW/labels.inc index c27f08a54c3..4938420a5b6 100644 --- a/program/localization/zh_TW/labels.inc +++ b/program/localization/zh_TW/labels.inc @@ -131,16 +131,24 @@ $labels['moreactions'] = '更多動作...'; $labels['more'] = '更多'; $labels['back'] = '返回'; $labels['options'] = '選項'; +$labels['first'] = '第一個'; +$labels['last'] = '最後一個'; +$labels['previous'] = '前一個'; +$labels['next'] = '後一個'; $labels['select'] = '選取'; $labels['all'] = '全部郵件'; $labels['none'] = '無'; $labels['currpage'] = '目前頁面'; +$labels['isread'] = '已讀'; $labels['unread'] = '未讀取的郵件'; $labels['flagged'] = '已加標記的郵件'; +$labels['unflagged'] = '未標記'; $labels['unanswered'] = '未回覆的郵件'; $labels['withattachment'] = '包含附件'; $labels['deleted'] = '已刪除的郵件'; $labels['undeleted'] = '未刪除的郵件'; +$labels['replied'] = '已回復'; +$labels['forwarded'] = '已轉發'; $labels['invert'] = '反選'; $labels['filter'] = '篩選範圍'; $labels['list'] = '清單'; @@ -187,6 +195,12 @@ $labels['searchscope'] = '範圍'; $labels['currentfolder'] = '目前的資料夾'; $labels['subfolders'] = '目前的資料夾(含子資料夾)'; $labels['allfolders'] = '所有資料夾'; +$labels['searchinterval-1W'] = '超過一週'; +$labels['searchinterval-1M'] = '超過一個月'; +$labels['searchinterval-1Y'] = '超過一年'; +$labels['searchinterval1W'] = '一週之內'; +$labels['searchinterval1M'] = '一個月之內'; +$labels['searchinterval1Y'] = '一年之內'; $labels['openinextwin'] = '在新視窗開啟'; $labels['emlsave'] = '下載(.eml)'; $labels['changeformattext'] = '以純文字格式顯示'; @@ -202,6 +216,17 @@ $labels['returnreceipt'] = '要求讀取回條'; $labels['dsn'] = '傳送狀態通知'; $labels['mailreplyintro'] = '$sender 於 $date 寫到:'; $labels['originalmessage'] = '原始郵件'; +$labels['selectimage'] = ' 選擇圖片'; +$labels['addimage'] = '添加圖片'; +$labels['selectmedia'] = '選擇影片'; +$labels['addmedia'] = '添加影片'; +$labels['encrypt'] = '加密'; +$labels['encryptmessage'] = '加密信息'; +$labels['encryptmessagemailvelope'] = '使用Mailvelope的加密信息'; +$labels['importpubkeys'] = '導入公鑰'; +$labels['encryptedsendialog'] = '發送加密郵件'; +$labels['keyexpired'] = '已過期'; +$labels['keyrevoked'] = '已撤銷'; $labels['editidents'] = '編輯身份資訊'; $labels['spellcheck'] = '拼字'; $labels['checkspelling'] = '拼字檢查'; @@ -209,9 +234,12 @@ $labels['resumeediting'] = '繼續編輯'; $labels['revertto'] = '恢復至'; $labels['restore'] = '回復'; $labels['restoremessage'] = '回復郵件?'; +$labels['ignore'] = ' 忽略'; $labels['responses'] = '預設回應'; $labels['insertresponse'] = '插入預設回應'; $labels['manageresponses'] = '管理預設回應'; +$labels['newresponse'] = '新建響應'; +$labels['addresponse'] = ' 添加響應'; $labels['editresponse'] = '預設回應'; $labels['editresponses'] = '編輯預設回應'; $labels['responsename'] = '名稱'; @@ -221,6 +249,8 @@ $labels['attachments'] = '附加檔案'; $labels['upload'] = '上傳'; $labels['close'] = '關閉'; $labels['messageoptions'] = '郵件選項...'; +$labels['togglecomposeoptions'] = ' 切換組成選項'; +$labels['attachmentrename'] = '重新命名附件'; $labels['low'] = '低'; $labels['lowest'] = '最低'; $labels['normal'] = '普通'; @@ -277,9 +307,11 @@ $labels['assistant'] = '助理'; $labels['spouse'] = '配偶'; $labels['allfields'] = '所有欄位'; $labels['search'] = '搜尋'; +$labels['searchresult'] = ' 搜索結果'; $labels['advsearch'] = '進階搜尋'; $labels['advanced'] = '進階'; $labels['other'] = '其他'; +$labels['printcontact'] = ' 打印連絡人'; $labels['typehome'] = '住家'; $labels['typework'] = '工作'; $labels['typeother'] = '其他'; @@ -295,10 +327,13 @@ $labels['typehomepage'] = '首頁'; $labels['typeblog'] = '部落格'; $labels['typeprofile'] = '設定檔'; $labels['addfield'] = '新增欄位...'; +$labels['addcontact'] = '添加連絡人'; $labels['editcontact'] = '編輯聯絡人'; $labels['contacts'] = '聯絡人'; $labels['contactproperties'] = '聯絡人資訊'; +$labels['contactnameandorg'] = ' 姓名和單位'; $labels['personalinfo'] = '個人資訊'; +$labels['contactphoto'] = '聯絡人照片'; $labels['edit'] = '編輯'; $labels['cancel'] = '取消'; $labels['save'] = '儲存'; @@ -307,6 +342,7 @@ $labels['rename'] = '重新命名'; $labels['addphoto'] = '新增'; $labels['replacephoto'] = '取代'; $labels['uploadphoto'] = '上傳相片'; +$labels['newcontact'] = ' 新建聯絡人'; $labels['deletecontact'] = '刪除所選擇的聯絡人'; $labels['composeto'] = '寄信至所選擇的聯絡人'; $labels['contactsfromto'] = '聯絡人 $from 至 $to,共 $count 人'; @@ -315,9 +351,12 @@ $labels['export'] = '匯出通訊錄'; $labels['exportall'] = '匯出全部'; $labels['exportsel'] = '匯出選擇項目'; $labels['exportvcards'] = '匯出通訊錄為 vCard 格式'; +$labels['newgroup'] = '新建群組'; +$labels['addgroup'] = '增加群組'; $labels['grouprename'] = '重新命名群組'; $labels['groupdelete'] = '刪除群組'; $labels['groupremoveselected'] = '從群組中刪除選擇的聯絡人'; +$labels['uponelevel'] = '回到上一層'; $labels['previouspage'] = '顯示上一頁'; $labels['firstpage'] = '顯示第一頁'; $labels['nextpage'] = '顯示下一頁'; @@ -344,6 +383,10 @@ $labels['preferences'] = '設定'; $labels['userpreferences'] = '個人設定'; $labels['editpreferences'] = '編輯個人設定'; $labels['identities'] = '身份資訊'; +$labels['manageidentities'] = '管理識別身份'; +$labels['newidentity'] = '新增識別身份'; +$labels['addidentity'] = '增加識別身份'; +$labels['editidentity'] = '編輯識別身份'; $labels['preferhtml'] = '使用 HTML 顯示'; $labels['defaultcharset'] = '預設編碼'; $labels['htmlmessage'] = 'HTML 郵件'; @@ -386,6 +429,7 @@ $labels['deletejunk'] = '直接刪除垃圾郵件中的郵件'; $labels['showremoteimages'] = '顯示遠端郵件內文中的圖片'; $labels['fromknownsenders'] = '從已知的寄件者'; $labels['always'] = '是'; +$labels['alwaysbutplain'] = '除了回文本以外, 永遠是'; $labels['showinlineimages'] = '將附加檔案的圖片顯示於郵件最後'; $labels['autosavedraft'] = '自動儲存草稿'; $labels['everynminutes'] = '每 $n 分鐘'; @@ -399,7 +443,9 @@ $labels['2231folding'] = '完全 RFC 2231 模式(Thunderbird)'; $labels['miscfolding'] = 'RFC 2047/2231 混合模式(MS Outlook)'; $labels['2047folding'] = '完全 RFC 2047 模式(其他)'; $labels['force7bit'] = '對 8 位元字元使用 MIME 編碼'; +$labels['savelocalstorage'] = "( 暫時 ) 保存在流覽器的本地儲存"; $labels['advancedoptions'] = '進階選項'; +$labels['toggleadvancedoptions'] = '切換高級選項'; $labels['focusonnewmessage'] = '收到新郵件時使瀏覽器獲得焦點'; $labels['checkallfolders'] = '檢查所有資料夾中的新郵件'; $labels['displaynext'] = '郵件刪除/移動時顯示下一封郵件'; @@ -419,6 +465,8 @@ $labels['autoaddsignature'] = '自動附加簽名'; $labels['newmessageonly'] = '只有新訊息'; $labels['replyandforwardonly'] = '只有回覆或轉寄'; $labels['insertsignature'] = '插入簽名檔'; +$labels['sigbelow'] = '將簽名置於引用信息之後'; +$labels['sigseparator'] = '在簽名裡強制使用標準分隔'; $labels['previewpanemarkread'] = '標示已預覽訊息為已讀取'; $labels['afternseconds'] = '$n 秒之後'; $labels['reqmdn'] = '永遠索取讀取回條'; @@ -461,6 +509,10 @@ $labels['foldertype'] = '資料夾類型'; $labels['personalfolder'] = '私人資料夾'; $labels['otherfolder'] = '其他使用者資料夾'; $labels['sharedfolder'] = '公用資料夾'; +$labels['findfolders'] = '查找資料夾'; +$labels['namespace.personal'] = '個人的'; +$labels['namespace.other'] = '其它用戶的'; +$labels['namespace.shared'] = '共享的'; $labels['sortby'] = '排序'; $labels['sortasc'] = '遞增排序'; $labels['sortdesc'] = '遞減排序'; @@ -493,4 +545,17 @@ $labels['vietnamese'] = '越南'; $labels['japanese'] = '日本'; $labels['korean'] = '韓國'; $labels['chinese'] = '國語'; +$labels['arialabeltopnav'] = '視窗控制'; +$labels['arialabeltasknav'] = '應用任務'; +$labels['arialabeltoolbar'] = '應用工具欄'; +$labels['arialabelactivetask'] = '現行的任務'; +$labels['arialabelmessagessearchfilter'] = '電子郵件表列過濾器'; +$labels['arialabelmailsearchform'] = '電子郵件信息搜索表單'; +$labels['arialabelcontactsearchform'] = '連絡人搜索表單'; +$labels['arialabelmailquicksearchbox'] = ' 電子郵件搜索輸入'; +$labels['arialabelquicksearchbox'] = '搜索輸入'; +$labels['arialabelfoldersearchfilter'] = '文件夾列表過濾器'; +$labels['arialabelfoldersearchform'] = '文件夾搜索表單'; +$labels['arialabelmessagebody'] = '郵件正文'; +$labels['arialabelreplyalloptions'] = '全部回復選項'; ?> From a487055c5a517eaeae64e18fa35d5e57f31bcb1a Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 16 Dec 2016 15:59:58 +0100 Subject: [PATCH 25/48] Add possibility to attach contact vCard to composed message (#4997) --- CHANGELOG | 1 + plugins/vcard_attachments/composer.json | 4 +- .../vcard_attachments/localization/en_US.inc | 2 + .../vcard_attachments/skins/classic/style.css | 12 ++ .../vcard_attachments/skins/larry/style.css | 5 + .../vcard_attachments/vcard_attachments.php | 114 +++++++++++++++++- plugins/vcard_attachments/vcardattach.js | 40 +++++- program/steps/addressbook/export.inc | 2 +- program/steps/mail/attachments.inc | 13 +- program/steps/mail/func.inc | 59 +++++---- skins/classic/common.css | 5 + skins/classic/mail.css | 1 + skins/classic/templates/compose.html | 21 ++-- skins/larry/images/buttons.png | Bin 15161 -> 15893 bytes skins/larry/templates/compose.html | 2 +- 15 files changed, 230 insertions(+), 51 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 59b915f7082..49c39906aa7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- vcard_attachments: Add possibility to attach contact vCard to composed message (#4997) - Preserve message internal/received date on import in mbox format (#5559) - Zipdownload: Fix date format in mbox "From line" - Possibility to display QR code for contacts data (#5030) diff --git a/plugins/vcard_attachments/composer.json b/plugins/vcard_attachments/composer.json index 07105bdf6b5..504d8a3305e 100644 --- a/plugins/vcard_attachments/composer.json +++ b/plugins/vcard_attachments/composer.json @@ -1,9 +1,9 @@ { "name": "roundcube/vcard_attachments", "type": "roundcube-plugin", - "description": "This plugin detects vCard attachments/bodies and shows a button(s) to add them to address book", + "description": "Detects vCard attachments and allows to add them to address book. Also allows to attach vCards of your contacts to composed messages", "license": "GPLv3+", - "version": "3.2", + "version": "4.0", "authors": [ { "name": "Thomas Bruederli", diff --git a/plugins/vcard_attachments/localization/en_US.inc b/plugins/vcard_attachments/localization/en_US.inc index a52a9322816..65ab8ac24ba 100644 --- a/plugins/vcard_attachments/localization/en_US.inc +++ b/plugins/vcard_attachments/localization/en_US.inc @@ -19,5 +19,7 @@ $labels = array(); $labels['addvcardmsg'] = 'Add vCard to addressbook'; $labels['vcardsavefailed'] = 'Unable to save vCard'; +$labels['attachvcard'] = 'Attach vCard'; +$labels['vcard'] = 'vCard'; ?> \ No newline at end of file diff --git a/plugins/vcard_attachments/skins/classic/style.css b/plugins/vcard_attachments/skins/classic/style.css index 044d3983e45..7c361441fee 100644 --- a/plugins/vcard_attachments/skins/classic/style.css +++ b/plugins/vcard_attachments/skins/classic/style.css @@ -15,3 +15,15 @@ p.vcardattachment a { padding: 0.7em 0.5em 0.3em 42px; height: 22px; } + +#abookactions a.vcard span { + text-indent: -5000px; + display: inline-block; + height: 22px; + width: 15px; + background: url(../../../../skins/classic/images/messageicons.png) 0 -168px no-repeat; +} + +#abookactions a.vcard.disabled span { + opacity: 0.5; +} diff --git a/plugins/vcard_attachments/skins/larry/style.css b/plugins/vcard_attachments/skins/larry/style.css index 4f9f61b8177..3115f69db5c 100644 --- a/plugins/vcard_attachments/skins/larry/style.css +++ b/plugins/vcard_attachments/skins/larry/style.css @@ -14,3 +14,8 @@ p.vcardattachment a { background: url(vcard_add_contact.png) 6px 2px no-repeat; padding: 1.2em 0.5em 0.7em 46px; } + +a.listbutton.vcard .inner +{ + background-position: center -2107px; +} diff --git a/plugins/vcard_attachments/vcard_attachments.php b/plugins/vcard_attachments/vcard_attachments.php index ebc494e45b5..177cb6f8ea6 100644 --- a/plugins/vcard_attachments/vcard_attachments.php +++ b/plugins/vcard_attachments/vcard_attachments.php @@ -1,7 +1,8 @@ action == 'show' || $rcmail->action == 'preview') { $this->add_hook('message_load', array($this, 'message_load')); $this->add_hook('template_object_messagebody', array($this, 'html_output')); } + else if ($rcmail->action == 'upload') { + $this->add_hook('attachment_from_uri', array($this, 'attach_vcard')); + } + else if ($rcmail->action == 'compose' && !$rcmail->output->framed) { + $skin_path = $this->local_skin_path(); + $btn_class = strpos($skin_path, 'classic') ? 'button' : 'listbutton'; + + $this->add_texts('localization', true); + $this->include_stylesheet($skin_path . '/style.css'); + $this->include_script('vcardattach.js'); + $this->add_button( + array( + 'type' => 'link', + 'label' => 'vcard_attachments.vcard', + 'command' => 'attach-vcard', + 'class' => $btn_class . ' vcard disabled', + 'classact' => $btn_class . ' vcard', + 'title' => 'vcard_attachments.attachvcard', + 'innerclass' => 'inner', + ), + 'compose-contacts-toolbar'); + } else if (!$rcmail->output->framed && (!$rcmail->action || $rcmail->action == 'list')) { $icon = 'plugins/vcard_attachments/' .$this->local_skin_path(). '/vcard.png'; $rcmail->output->set_env('vcard_icon', $icon); @@ -46,13 +70,14 @@ function message_load($p) // the same with message bodies foreach ((array)$this->message->parts as $part) { if ($this->is_vcard($part)) { - $this->vcard_parts[] = $part->mime_id; + $this->vcard_parts[] = $part->mime_id; $this->vcard_bodies[] = $part->mime_id; } } - if ($this->vcard_parts) + if ($this->vcard_parts) { $this->add_texts('localization'); + } } /** @@ -87,9 +112,9 @@ function html_output($p) // add box below message body $p['content'] .= html::p(array('class' => 'vcardattachment'), html::a(array( - 'href' => "#", + 'href' => "#", 'onclick' => "return plugin_vcard_save_contact('" . rcube::JQ($part.':'.$idx) . "')", - 'title' => $this->gettext('addvcardmsg'), + 'title' => $this->gettext('addvcardmsg'), ), html::span(null, rcube::Q($display))) ); @@ -222,4 +247,81 @@ private function get_address_book() return $this->abook = $CONTACTS; } + + /** + * Attaches a contact vcard to composed mail + */ + public function attach_vcard($args) + { + if (preg_match('|^vcard://(.+)$|', $args['uri'], $m)) { + list($cid, $source) = explode('-', $m[1]); + + $vcard = $this->get_contact_vcard($source, $cid, $filename); + $params = array( + 'filename' => $filename, + 'mimetype' => 'text/vcard', + ); + + if ($vcard) { + $args['attachment'] = rcmail_save_attachment($vcard, null, $args['compose_id'], $params); + } + } + + return $args; + } + + /** + * Get vcard data for specified contact + */ + private function get_contact_vcard($source, $cid, &$filename = null) + { + $rcmail = rcmail::get_instance(); + $source = $rcmail->get_address_book($source); + $contact = $source->get_record($cid, true); + + if ($contact) { + $fieldmap = $source ? $source->vcard_map : null; + + if (empty($contact['vcard'])) { + $vcard = new rcube_vcard('', RCUBE_CHARSET, false, $fieldmap); + $vcard->reset(); + + foreach ($contact as $key => $values) { + list($field, $section) = explode(':', $key); + // avoid unwanted casting of DateTime objects to an array + // (same as in rcube_contacts::convert_save_data()) + if (is_object($values) && is_a($values, 'DateTime')) { + $values = array($values); + } + + foreach ((array) $values as $value) { + if (is_array($value) || is_a($value, 'DateTime') || @strlen($value)) { + $vcard->set($field, $value, strtoupper($section)); + } + } + } + + $contact['vcard'] = $vcard->export(); + } + + $name = rcube_addressbook::compose_list_name($contact); + $filename = (self::parse_filename($name) ?: 'contact') . '.vcf'; + + // fix folding and end-of-line chars + $vcard = preg_replace('/\r|\n\s+/', '', $contact['vcard']); + $vcard = preg_replace('/\n/', rcube_vcard::$eol, $vcard); + + return rcube_vcard::rfc2425_fold($vcard) . rcube_vcard::$eol; + } + } + + /** + * Helper function to convert contact name into filename + */ + static private function parse_filename($str) + { + $str = preg_replace('/[\t\n\r\0\x0B:\/]+\s*/', ' ', $str); + + return trim($str, " ./_"); + } } diff --git a/plugins/vcard_attachments/vcardattach.js b/plugins/vcard_attachments/vcardattach.js index 40096623198..fe505c8f25f 100644 --- a/plugins/vcard_attachments/vcardattach.js +++ b/plugins/vcard_attachments/vcardattach.js @@ -4,7 +4,7 @@ * @licstart The following is the entire license notice for the * JavaScript code in this file. * - * Copyright (c) 2012-2014, The Roundcube Dev Team + * Copyright (c) 2012-2016, The Roundcube Dev Team * * The JavaScript code in this page is free software: you can redistribute it * and/or modify it under the terms of the GNU General Public License @@ -33,6 +33,40 @@ function plugin_vcard_insertrow(data) } } -if (window.rcmail && rcmail.gui_objects.messagelist) { - rcmail.addEventListener('insertrow', function(data, evt) { plugin_vcard_insertrow(data); }); +function plugin_vcard_attach() +{ + var id, n, contacts = [], + ts = new Date().getTime(), + args = {_uploadid: ts, _id: rcmail.env.compose_id}; + + for (n=0; n < rcmail.contact_list.selection.length; n++) { + id = rcmail.contact_list.selection[n]; + if (id && id.charAt(0) != 'E' && rcmail.env.contactdata[id]) + contacts.push(id); + } + + if (!contacts.length) + return false; + + args._uri = 'vcard://' + contacts.join(','); + + // add to attachments list + if (!rcmail.add2attachment_list(ts, {name: '', html: rcmail.get_label('attaching'), classname: 'uploading', complete: false})) + rcmail.file_upload_id = rcmail.set_busy(true, 'attaching'); + + rcmail.http_post('upload', args); } + +window.rcmail && rcmail.addEventListener('init', function(evt) { + if (rcmail.gui_objects.messagelist) + rcmail.addEventListener('insertrow', function(data, evt) { plugin_vcard_insertrow(data); }); + + if (rcmail.env.action == 'compose' && rcmail.gui_objects.contactslist) { + rcmail.env.compose_commands.push('attach-vcard'); + rcmail.register_command('attach-vcard', function() { plugin_vcard_attach(); }); + rcmail.contact_list.addEventListener('select', function(list) { + // TODO: support attaching more than one at once + rcmail.enable_command('attach-vcard', list.selection.length == 1 && rcmail.contact_list.selection[0].charAt(0) != 'E'); + }); + } +}); diff --git a/program/steps/addressbook/export.inc b/program/steps/addressbook/export.inc index b056a3e74a8..ecec53d737c 100644 --- a/program/steps/addressbook/export.inc +++ b/program/steps/addressbook/export.inc @@ -109,7 +109,7 @@ if ($plugin['abort']) { } // send downlaod headers -header('Content-Type: text/x-vcard; charset='.RCUBE_CHARSET); +header('Content-Type: text/vcard; charset=' . RCUBE_CHARSET); header('Content-Disposition: attachment; filename="contacts.vcf"'); while ($result && ($row = $result->next())) { diff --git a/program/steps/mail/attachments.inc b/program/steps/mail/attachments.inc index b620cd8f72d..21f220871a2 100644 --- a/program/steps/mail/attachments.inc +++ b/program/steps/mail/attachments.inc @@ -102,13 +102,18 @@ if ($uri) { && $RCMAIL->get_user_name() == rawurldecode($url['user']) ) { $message = new rcube_message($params['_uid'], $params['_mbox']); + + if ($message && !empty($message->headers)) { + $attachment = rcmail_save_attachment($message, $params['_part'], $COMPOSE_ID); + } } } - if ($message && !empty($message->headers) - && ($attachment = rcmail_save_attachment($message, $params['_part'], $COMPOSE_ID)) - ) { - rcmail_attachment_success($attachment, $uploadid); + $plugin = $RCMAIL->plugins->exec_hook('attachment_from_uri', array( + 'attachment' => $attachment, 'uri' => $uri, 'compose_id' => $COMPOSE_ID)); + + if ($plugin['attachment']) { + rcmail_attachment_success($plugin['attachment'], $uploadid); } else { $OUTPUT->command('display_message', $RCMAIL->gettext('filelinkerror'), 'error'); diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 19d7e7a8ac8..2c6a8385497 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -2248,42 +2248,51 @@ function rcmail_save_attachment($message, $pid, $compose_id, $params = array()) $mimetype = $part->ctype_primary . '/' . $part->ctype_secondary; $filename = $params['filename'] ?: rcmail_attachment_name($part); } - else { + else if (is_object($message)) { // the whole message requested - $size = $message->size; + $size = $message->size; $mimetype = 'message/rfc822'; $filename = $params['filename'] ?: 'message_rfc822.eml'; } + else if (is_string($message)) { + // the whole message requested + $size = strlen($message); + $data = $message; + $mimetype = $params['mimetype']; + $filename = $params['filename']; + } + + if (!isset($data)) { + // don't load too big attachments into memory + if (!rcube_utils::mem_check($size)) { + $temp_dir = unslashify($rcmail->config->get('temp_dir')); + $path = tempnam($temp_dir, 'rcmAttmnt'); + + if ($fp = fopen($path, 'w')) { + if ($pid) { + // part body + $message->get_part_body($pid, false, 0, $fp); + } + else { + // complete message + $storage->get_raw_body($message->uid, $fp); + } - // don't load too big attachments into memory - if (!rcube_utils::mem_check($size)) { - $temp_dir = unslashify($rcmail->config->get('temp_dir')); - $path = tempnam($temp_dir, 'rcmAttmnt'); - - if ($fp = fopen($path, 'w')) { - if ($pid) { - // part body - $message->get_part_body($pid, false, 0, $fp); + fclose($fp); } else { - // complete message - $storage->get_raw_body($message->uid, $fp); + return false; } - - fclose($fp); + } + else if ($pid) { + // part body + $data = $message->get_part_body($pid); } else { - return false; + // complete message + $data = $storage->get_raw_body($message->uid); } } - else if ($pid) { - // part body - $data = $message->get_part_body($pid); - } - else { - // complete message - $data = $storage->get_raw_body($message->uid); - } $attachment = array( 'group' => $compose_id, @@ -2293,7 +2302,7 @@ function rcmail_save_attachment($message, $pid, $compose_id, $params = array()) 'data' => $data, 'path' => $path, 'size' => $path ? filesize($path) : strlen($data), - 'charset' => $part ? $part->charset : null, + 'charset' => $part ? $part->charset : $params['charset'], ); $attachment = $rcmail->plugins->exec_hook('attachment_save', $attachment); diff --git a/skins/classic/common.css b/skins/classic/common.css index 01ed2684511..5aa7258c1dc 100644 --- a/skins/classic/common.css +++ b/skins/classic/common.css @@ -710,6 +710,11 @@ table.records-table tr.selected td background-color: #CC3333; } +table.records-table tr.selected td a +{ + color: #FFFFFF; +} + table.records-table tr.focused td { } diff --git a/skins/classic/mail.css b/skins/classic/mail.css index d275c054a79..a455454346a 100644 --- a/skins/classic/mail.css +++ b/skins/classic/mail.css @@ -1707,6 +1707,7 @@ input.from_address position: absolute; margin-right: 5px; right: 0; + top: 0; } #abookactions diff --git a/skins/classic/templates/compose.html b/skins/classic/templates/compose.html index ab64e739df9..97b39c4989a 100644 --- a/skins/classic/templates/compose.html +++ b/skins/classic/templates/compose.html @@ -49,7 +49,16 @@
    -
    +
    + + +
    -
    diff --git a/skins/larry/images/buttons.png b/skins/larry/images/buttons.png index fb957ea04234b7d4432dbd3efaae8878ef7cd653..b7528cacf8ed8960ab58e62ddf76435727207d1c 100644 GIT binary patch literal 15893 zcmV+wKI*}VP)+N0{{R3CGIGR00093P)t-s0000B z4G#YP{{R2~0|Nv9|NpD3t^EA`|NsB}{rvy{0836!;^X5>R#{L`P+MDEPf=3;|Nl=> zQHF+w0|NtGTwJB9uXA&A2?`3Bn3zjTOaK4>|NsAWb#K!qo}S{SXrEw25t(2CR0s{kQXlPEy{2hniHUoBd;kCdaBy&5US55D zetv#_eSUs%b91t^v_)QI0s{k&q^Yf~t#EK~XlQ6uSz5lt#%XD3XlQ81$jNt-nudmk zm6es0m6n2nf>u{p{{H?@P*B#|+*VdrLPA2Mr>xxG-_Fp{x4OC^T6Dd=y-umohN7yF zkddCCq07t58+)Z;VPV|f-$X=20099r3=URqbfBW69&wcj3JM@EH=UrNm6esAp`tmIy;8BK931B7diDw$>L~cqyvl zny<7SUwtHVm2ZlXqOY^6wz*PmbU8ggUv_=}|NpAL#BGR=I$31e-QPZbmqr>d*| z{{DJ;dV+$2a&mHsiHT=tXa4^FB)R)-ZEcW{kYHe7_4W0amzQ&#r&w56X^@)k@9%Dx zp}f4j=;-J*zx*Db*m|R`RB?G*eTGm_P-KaeADPbA-rpmy?qGzCqNAfj!~7zs1hVS^y0p@I#QEt0-qzD;mlBu*I7(Lli0LNSSgIFkPU&P!upsL<&` z@9n{;Q2z1fc)7h%^YP!(l!$4-z`Fk6(V3;crB?9pzHnWzb8tZM*=6k{?ucqj`_J>c z{Nj&=Y*F&@yVb>wdT9P-+2GJNp`hX4vitny+^BjY=FiQ#l7H&e&-_Id_^di)^Dy6;*$`D7P1z|8$CPTc{xmwow zQc6pQ#)`0mxXoG|Qz!GFj@nL8nb2;C!-0Q8a)^gua+}3~u&ci(PbW(|@;r~AsQ4}Q zv7?_oOY`)bhjjb}@gLbJeouq8X4Up&w<1q;eEa=2bAS7BZ*)F$=2VM070sOYMt4*- zde>C-9}hD=q^ftkQ4jp;T)bOfOLsg6Kk1<&P;+bQ^ITYEKsrRtNht#-CFN8d!h*WX z!#mHKrg`etaJica8OAmI`=ggvZ$wp?^O|8$5iyV<=_4K-MMEYw&Vl*J0LrAH@MunV zCpQ|Vpe^Mb9F++V2pRNTd5brahYi!`j%f_b-e_~r&UkBf_G|{^5h2joo`BHd8MJXa z{^ys)pWG;v-Ww~1+EW}uo@h4l&eAjup5z}qyi3e_qw99HuDMgM+Sk3&bKCl$G}e)Z zGHF@Qy-~u_tb(%g!>lL;_(_6-G!4|~nmRPPV8K8~SV@;0b4h}E7}0!bdTJcT`qXr3 zo)N7`1-n+QHGS4VYH-hSGcQ6LU&y<`VD!_uiiwbo1H7#4|si=~tcfBMv0&C#a7H$p%6DL=F_h zNasaiyzS6AkxsIo3w}13Bu@?cd?&7oJO=H` z?7n;>tnOl;$v<)%&g}p`!M8{JjO#l?mIFK?nWr}q)m&8dmZ%qLO6b!KcXYi^pdfLd z*%s;w6t@kYY{}p@8WLi8sU`WCKtV{5+amlM1&fl!#l_+npP3EWmSu;MT)kH$SN3Th zB-b=2$GD26@iQp$Gsq$+!iAQaNajJ41byJ^J;%&&_TBA?FWUly8AKAGbc&3gZ2J-@6XfrU64kM-) z=}LH@x8x23>ipt1;TRpEz-~8+vV7;ooQ{)<$5T2^PNYwCGz)Ju^e!o#mb&o&^z4YA zc1|%djMaQl5Q6zt!vLjEAWtOjH=Kk62p?XUyrS$%<>uQ4f=vqMb<#d`Bm@qd5MV%Xb_W=~gksoqWq_fZ(K*BP zIghpBAflrk_@>}0Jn;adxkI3%*lFLx-rg>3x?o&A-N}H&^xJ%AERW~P$6_TZEu#(w z6_gPQJo5RT#1Il?(Pb!S`EI-{^R`hi77HR?G?q+`aib#KH{(TnZOf|Rwcux)qY`@T zN7EL*n&CTl6~tm}xMGHE4FV&)U{Jy`o@3n&9qTzu?=5Mr%rNy{)s3o5y;mSN+!Te} zc`Jwvp99(R)^YFEo#QH2XuY=>a?BFxy(LH4iFaOF@oZsaUFi zbN-}zc&2-n^O4jUde8aL>|!!mv>n6Ld)4OdtGOGSWa_<$=1PsF_pV!R1cygQ%NR8X zXy9>~rT41ZrQY6gY{p@1)Y*DZ!o7#*;O@P5nzq2-dx|pkJ9-Zkgz=r<*)wC;G@>|; z{|=N8$s#x$no_!0hwC+ROaw=^q@R^u7M0$I`wyoq3Yp#b|{wS!`G(>AAXMq_k;UA!|}tA=1(JhrTGJiP~2CF zhn7ZS{b?9ia{JZDB-Osll}K8am0f)o^Gw$dbzLI@k_-?ybIve${yN?o3rg~Hmk^i4 zU3VKJA}Pt_lQ-7prnQl^EZef$e2J0-j-(zcy}%I4mo%5|5K1sRlx8X27LiItE4wk? zUO5_V3ss^tKB^R_G>z~jMoN?w2|GAoq{wJOk`%)Dl9sL8(RvhP*Ru+MEFxtxnJxT` zzMdwNx`4#!G>j{)`7vJ#Xpy(GM6>{>Q6^?lLQ68>lP*+0E+o!0!jEQvJB{!gNGy$X z`*NCFzH~X$_b&NT%IkaPkVDfS-qt@$;w^#0V&xI=8VWsi*(uhzcylH;e zp4az;D)qXy-9>Qid3{enx^A^TU=Z)er$WKJ=1YUS-%-7np+9^y{=2^S4-pQ-;yBKN zLhvXIt_$I#Ac%A7j3nn&+*xtf0VoAncUHvDz|8?L29R^bPb25X0QU9(VrYvJqgMc{ zs{mINZ9(=a4FVFRbRUE<7&G#DZ-oUg)`l3c5P9SH*vP{pe~WTe9!@l1g0_T<+--wD z@4lV@C?6{@LFHZnIQdxte_nsvg7f2T3C>Q3dXHk;1z2wLZ~8$3_@lN0#x@{4EUxDtL{}HK&aFvBqfLpX_rC}Xztb# zG(Fphln75px)WEd}`@R13@lRrn2U~*@1ZkyzT!0qy;orh72CmoM=C_PyOu|pFf zYsohvr`Tffa==_fHwd#4^^Id1F=-iuq!)(M_11U$NRg0Y1jH7XV?C$-+bf!;1P=Jr z1Mc>T1WYdU|Ak`)CMLz-fmrkqf>v_wCWvj(JP0KVrsbY(3nQSLc3cwmPzz&h(?Sx4 zc$9h!Wh=QTaHjU~y~6O8Xvo0~a1@pS$3e)PhXG^2*$oSS{>f1}Z5TT+P`?*zG_|?@d#IV9zQ)L_5lnaXp*m$+L5;z~p53DU$B}-X98w+Q2SjySSl_4aaaqv+2I&7ZAJ+R?>n)-bZ$(!SFT?{BR6HJJL4D8%AH`>1#P^wG zN)ltM^}&P1fOz7A|0LE-nwaf?2Wr3FO}3eSoy>IR@BHa@e^MF_TyPTc1A)@vlQa!~ zcz!C>C}r=!tHk_eTBbspZ-yZ5~7KPo(O=kA>&zN6O{ z5XzY$LCUhtWy@RQ96dn>204M2)G#d` zlOg%MNoI>x(%N!4_1rd|r^@BEOp-w^MS8(rOl0OrRTbso?vEc=HhGzmwn@$}+8jE_ zh=Y9+Q_8k*2pnLFCgdWC6x-cQ*ah^09XZZC^2_rk07&Yy;Cz}u_QPaIFv}0 z6mdHuca3CvH=Su9q+zCDTi`fS)#Ox;oWw{^M~sXKjFmf@&+ki) zbSwrb?&)&R`bd@{i9|G-*hejqEr=d3yBv>JjTl*!du^iDw3xT5uTD1X|IAeF?+c-WwY?ZoF|c$2h*T^j{E(=5o0xJQx?UD8Xa>PYli)Ms_fl z(xKA=y!lW*I(iG2G{TWaa7pokO?@r>`)IeOOE%kOO*^g_v0XzLBW*iJjOf;Y zRI^YpRn*X}W@!o5O)8l>UQ%;K2plSbg=(#;32%lg6@>z9Hshumr5P$14k>j;jnZP> ztw~>8qcl-9oi+jL#2O{ZawSU=YUG?NofB$B>R1V39VL#7oTpQbmerVo%fTFox#XTb z$=rXGS^RN+Ym5N6V+6n-BLL1A(U>}9lWOFM5&Prc*k5~$z$el@ZPF)j?J)u)#Rg%H z7@>cMFGc|M7*Xd>#0Y0)$rmH6$7RzjKeo7HM7dBX(;uD~0ksqWsEs2=Kzmx@O)%JT ztRvi-c-9e>HgT;Z8lB#2&+9hIQq4CS%mhD>bQ>IfwV$Mt`sxZ*ZQQ zzVdGC4Ux|=ThtR#ZpY+4HV8S?La>U-YS|+pUB}a+Fpeiq!@7<<5*aO~ ziwI+kifOpzkyLmfLGGfden}dTA4$m%kg6qYq~%2h4w7Qg1SJ~tN-BVgy^GE-UTORy zm+_3Gr~p=of>l8Ab_6N95RH*Ai&s(*i&BduPt1>G$xoES3n;y$Xo4jw^$IJfShC0> z_X;WaCG1>R^z-WQ?l7l=L6iVUw(=^-Qdt$O(hyd$7r2dxQ!Kt>>mMcxHe(bRZu)bU z4{)IJ?p}-_h6U0$2~p`WODiKqE^T&c84+Wpjw~rgk`i&3TvTKwFN`D(V_D>pKCqP8 znhec_EcCSLDGS>X5e>VbIh8gk817SG>B#n8JjsxgzDsHV6-hiZ%cc7~k(J6Uja1UU zwW(+@4D(3dHZf9!c-zEE-Y1ulVx9@Q*wZG<10#u^2^wKf&kKex1d@%+PR~jl7@#2> z08)eyVw*7vKs_Xc5#Lh?;B@rwh!I}c7~%V(F~ZA`&i&3G8!Rv}qJmjYrOK8&30u{y=7M+&J;8%aO_uYYZd%PUY@eHqBo4ECN>ygvL>RA# z%5IEkee7_^WP>Fors*a{os-KaN6v`_Ou|;xQZ0MtR;0*^Z_>7C1m>2+NFBdPDV4%Z zLYTTvN2xm`S%xXaNR9S?gn#_l^hx4DY(g7b_CaeXjARz5^#Pn}Ngnes33*ez62{q@ zHmfYG6pKb_${-8X5@wS7ogNSa|3YnR3&glUXL5L*LT)1{gY!k9^uCSijnHt}qF#r4#0&Zw#HVlpv*NS0N0IzG#tgky(y2E4GwCcakpQ5&|+a z2M_G40DT7z9+;td`Q%WE=6Tb$G#9fo$7C|?o3h2`Ez{bT6eY8z8PX{uJ%7HvZ{Cto zl!c*^;W$XqjGp6Qk8De8L(0r=E)oSGFt+V|v3Y(&xRj-ieP<1@_taVvDlKa+8d?=b zv3YH%)b*7?d>F67pWOcK1L+?s$zl-y*`IIMsq^RP(AiBa*YxYxZ+8vO@a)3xv7$(0 zMX_JEww$hp@|C^wYiZ?(0{A4sm=H7}5+ns{t?{9XpmHw_+#)I(qc2g6#42h_LGVE? za-aH8iu6ef_qBcS1N8B}^oyK1J1`l_zWdrQ&@+>N{#kctET#YU7w+zfcYn^_Rqi=E zGdpP{y72}AZ~#$?aIO?^5S@txBa$0nC)_zA$J5!VLfLWxI=zN`Azb>kMu!m`F0|ws z_;t9HU7Y5;rSCvt#7JDf>MVkxRenDFOS{b{*tflw8Z3%Txz3VryjGH}^jbm|N$Pv5 zgm{{< zHDx0u`=_~b_CqT@dBq&ay}!#ZF3$URZ;O^j;=@;zMAhl362iaxXvU_Ix9@xh??}M@7H}tAk`P3A6?VHh9l+*w zsFWQFd#9ql|}-W{6bjied|4F zxBCwe>?$QBqR2mKxZoq_sE$Uu3q+Db)~0q)mkB!IHy=5d+VMD`*kwemZSY7+Ncskv zwug_JO0EI#4wmUkXw&OUQ_$`KQ%@=Z&iM~?tf?B-y$;CO7Vk@Z>q#Xr+u}n@2kmxE z|C{u=5+v<$uS-zrl02)jY{oOwmDhNObzM>nr0bx@q6n>s=dRHVO%FjaXbZ4$kmCo#_H?`G$ zJ!w@-;wWU?jYOlN#+(;#?jj?4$`HJ0Nd!tmNz@O zUjO!)^BK8Eg56G^cOkEJmI{_`H$)#ba_=S#`1E3y1#@_Br~xO~0QqK!J;&bb{d2Di z7d~;CJHFFB0GW^>AbdS}Fc>XIterK5Fns|b65#S=8F-KB{XGd7J=la|WwzSOz56>7 zc$D-Sv^8kai@l zom2#+^~t5C&gx`gq$IS1fMTPfB%-9Yq>7L#jw(n6X?Fq8YCyTf@4X&m?iVBAJRcmUc+sh8br&F|e~p4rjFdo(SjI`BSF zcaXf!%U-&<-_nhxbclm44?MJ#Cgg*8EOy-9mu@YktiV1Z%Pdg?N!b_fvd@OKv?K0y zP1w?W-KS|SW#Yk!n3$NqnPMrJVtB&9Aml`-1YQvES4cbvk{pMdiOt*a;pYAAr|b_! zq_!>j^xADj7hz9`uEXlwdkn8zmV2|qn%Qo}XD7ioO!Ey`N(clV&1jA~Z)_#y>rYTn zmeRaLjTD-0JZ~cnu$6?wM=xO`J;Fjd9D7P+&6i9)CGL-iiTO`*Try0#I3ofzQaL!6 zJHQQaG&Zpk`EY469mHg~lzqYU@~M0dg{Eq^hO|vqvJiW zsHeHTOTTq+49U;yHJLzJ9v!e6DK9woIO;c?(~ z=ax9PkofRJxECdj0|$0*rtL_H0f+HO37KCSTuq;$m9!_u2k*sRw6wB0y}2OoNpgX{ zvJ$nj8}Xo}A3}biHRaHGN|pIhQXASPz7cvP^oBYE;mZg;U!m;O*Z)Pdoo4=C^41-AqhH;LMiHUhaaW}t_-z^Rv>B|?Q6!SDF2V9;S z^gEA7I?HhW%kVD;T;{qG_v+EkK_<(xnFGG3-_DGzaPOK{y$V0KgN%tzT2N#xuLN=r zgz`h3)l88Y4)}z5rocRg3NqB0toZ(0MvRf9SG_vm{G9qvo^?*;>dB6*q8K%gSKgYQ z;I9G3X!oom=$QjqTbk9Y1RP^6+r8vEM?LRso>W9_k*(kwD+u_wKk;Nd#A)msr=ajl z`cv+$*!=t~(&9Tsj%twO%km02spvZ5{lF3ANGr$hId`@WyYd^0KW-RDkt1vz_MO^i z*=^&jt@vWh#$mq7QZ{EF$hq;=nw7&Y)QrCB@6_6tvA)6HITaHfDGHByIq zBF8kv2Tc|eK~j_d%u6Kks!){#%UvjSVQfQbqY&UEuyw{8T5A1NlO?u?2d}WwYo-!h zL=<3pg5wBDuTtCanqe!GN`Kt_yJhew**~QMAOV_e9P5-R7Z}zk`AwK}*cHz>MNv(s zXJI)pju#_)c+IMKeCdCuoeJ_`hwaK$>OZZC!Z@xgvHmNYTUTm%PL~JdoCiAWi}VR? z_tT$!o?fE$4zet%cS&}sogYq~n}X5VW+_OT*z5|5oYtbvN+G?Uqj5Mti*|C~`KL4Y zou9Ii4h^-V^pCp^aG18phuJa$NS{t|#+Lw4J+VqQWgttvFPuss(u~x7!DFhwph{YbBO>`{!RWsZ?g^2M!xW zD`^GV?Zr<2@M4SOu9dXlwP$NiZlP*Fk1&q?!kX zdxHY&mLCqxFM3T?5Z0`u@98>MismP#XEA=stSEDkr&oo`x2FmLPjgmMiYyequLKg} zou!qo0cfFGMU=|YN)DyptWLj~8#-IJw@6E6GN~lXk|l-z&N1z7uj>`8n5(rcsH4W& z8Y9Qqif38I#JrqBCE@JkmT}M3q3r3wuA@_-?CD{_N!m3Z&%~E=4$i3Lo(4ATFUF++ z&%n|C65i6BE>6lpI{opdmX3K`12~7e>)b9hPaQfU0nkO7867P!p{3&JLuSHej*2`R zCQ=jPA*Il{kByR{3Dzrc)XnoW8syebeo{;6E(e^y>eGVpFbR^$+veU%GFb{APu zkg;7QeB%q%MIeSrC>h&B6gmX#1K|=KzJp*S9PYCjDcvBfn?_5cT}llZBF#%-W>zfd zP%6KNkn^EZ@#<9Q{-36l3mqClN)aXrU3^KYw?Yhc_*h0tgg!{~QHM%oOLBnlJE$m0 ziD1-xaTJJ&eLjk;7UL@7D+>4k8r zSU8A+9&zFh6^rMQbtGx;TCsc`S1fVG5?3rSG5agSMu|9J_S0KP)@%mdaF|1H{fg?o0 z*+KUl&&GAvhRnGrmx;^)<@kfF%ekptmN}qg?c#{que*uNtfRC4T2vA#S4Yo7aB-A& zD8V~AJ1=rz)y-+_??_iiZaX`^L?O}9`GdW)X-y*tkBFC@wtWSIDNgzOf%EYk_358J^BBy)4g zy99^L7sz;0PXiZ=&3dg<_ekVl$9y}64b$i)F`s`Dav~P zqExaQnEVB@3KiyObe&cMp`x^}Ds5pF8uZH-b()itQ|yBq1lE#3vbY5Ob(JYM=p-5lK`zKJg)x z2uY$=LkSx_vPD!JbEV#%4eC zxP6>-_n?yQ&L@B-z zA|1kLGcsi8-HTDBs;2LtX*=BC1`Cd#2c7P;+C3e5qgZ;liNK2L6aNk<}|YW z34Q4tfT;hDR>oY9ENMM;AK2~zh{^r)8eD!ehEQv1km|0d*Ux)I$B2iMEBE2ukIjfo zV~+?A)7Pl~QY4G?gHy)(A5AFHxV003hm99JI5<+{lsH$pVi^jv@a4cLdm+O~#eaf>ko1EI%sLS%H z(mj=zOyJ#ICu0O|l_QL2=IW(bgF8Nl%eXB-4sE8w88I<%@n z2J(mVu+eheVJdMvQ6cx0lPGq_yWD3*0G8%08xc0}H|Fqd`!epOc374DxwfntO1#_5Is}xhl5FWr9{f0|iw6aJF?bNc9D<-|F5(A5l0qw%5D+Yd_!STg#fpMpMFjl=6kJdV zV~}))*{~qXnm`V|Gf6}xac9(n%086oLi;eg(@o#s?9L_@WwK1C07;2zOT?Su}k&J?5v?kdGh%GnmK~kdKsUdC^kg6-TJIw@0YnTJZ%1go`^q^@T zq(nHE7C{#qongEXF_bV$8L6ZG0=_cbfr1Py{YyHe01B8)^d!GTLzv2Gz7YdKZN4s< zuhr}Pnu4^bO zNVw!4^w`B}iPU9IArMYBcHgrj1_gc`tF?VvWlp>skWIO)tk!CrCCmhfG4~lfBWtls z>xjzrDNZem^7Ki#Nm$j)QkB#6MvJ>H_iq>wZPplN{w)Q`h}+HP`-C9|d2C7ZgV<7A zD$@VOk#PPV5)v|;Fi`xxfnup8sX`B>K(T{K=s}&)J3xHfwp-uS=fFVGpQ|4tq?dS( z#DW6_N~7jFvp_oXrc$TFXe2ODpu{PqZtV~Nb=&bvcs(L8P@p81SGEaVX1Zi0)?hmo z7${H@%PUj9yKfceAP5W;{eg&#k^@@^j{#JzHGzQwC5~rSk=IWeEs{O8l+rDMfdVDs zGR8a2D8ySXWuzSq4iqU{a!Cwp{C%@|dZlKd0As;|Fi?bqgbX5Lej5V11Sm@_O6lyf zuOXmI;35P<2rKq0lFJ3`=Td>loBQnRW!Wx2mt1rZ0y^;dzGTi?RYl3KNeIL!bD5Yt-8r4-XxS4XzMi@I2II-(}6m$%)c zkP=;91~pcEOsAU%OaP+10CL$ZEnK-$V8u1?s5MWDOM{g)7G;Dp#tEmzeJ977X_^x! z{BR<(#ooFIaWv@CmkSduMsqP3PLaAo=_9o@DNfkW;wSq~k(#?4+&bT@wpy|eCL??; zrL?60>;c3fB;^05|D?SZarr!b95gL_o*o@t>oq#sgfHFS;T`Dn=G7a0=k?pyy4Jf_ z_~9(CbWd1Gcv6IfgoOMVo>s=O9miIKiA)LG=lSOvP9^Dh*vVvaGV&AzUUG}l9L0ZbIA)Q zro9SEQ_*sAJ9s-sqUCb$XPIQ<>c{}8luUZbi z`PP|Q9O#VaJ;%%6?mLaf{U`*oc+P1wk{R5^N?th5QBWW{*AQ0eoOHwiDOppZ11}?; z>jo%V_l4yMXZj+jG9oM~&H-pxPQyXzf&qFKl6(lDZCzgsx|Zxn+xo)ZxrH_jg#q{+ zO|`aFhfeJfop+|zfpda*L#?-oco#$w#VImG?et;ZFX)Skq7ORn;0-1YRPc^3KKY)+ zG-)HHtbG|WC?bMS{`=FWXFF%fGDJ}NRbylOw`D$8k7KED(wbNQ^rY~8ls-4R6ntnaEfAZB#+tRS5c|eVC=EVzZ4Fe2t z2^#L%RssrI7CI5Y=>+qb1~6>URy8ycZUN6lUi0<-LM zrn?TUe}A8EV9T`HhI29^9-6p_>+c_n3cR3RQdB>KADTO`d^j{u%*LU4WFrjCGo@x? zB}$a|lWZS>jQ8RU*3?dnqz9*Qova}8wjo6tou#3wl9voEX*1MWsvIDq(k;=5aK5aM zA1cOiE$dWSgj(k$tyI1gXlQ7#?<*^vq>Hws_YZ{oxiu(x93x%?4aBpF%k^Wm@guaFUEX{up8N!yOQ>ow~j##F}>!aB!g zE!CKB9E)g!+zJRp+Yuzec6*OFl2k2>mKT1Ek2P|_~j>rlej4fhbnBa#Ka<$nNLq$nOF@N+(-*F1}POb zEGsCsvn*Mbk5Hy9L<TTa2IFOsT^B+Ix+-0OrgI4LbJ z87a#mg5G0A0UfKlS*+TY9f_6LK3(8obyIP=0xT6RB09_2K+<8XZYt_w4Xw&b;u>|K z#0H{c7ixwE4z;YMt45+A=ugNtQUj~gLCaXWY7jpqlu(iKH?XGH<2=BcZaGxkKCu`| zq7%m17l(RqxJV#XpivZ=wp)mY-edN4oYzpY4F;}>7!_v?R%C~UGve}-9jLoUxa%a} zunZvGvY9d<(cVfE9>fEk zQeAjM{J{jmvZ=hMI1l6TNMK4jT^Fv6#~;$(NVGC;-nXPc?7j&zW2N(AN!n*-nqYXD zOq~>I%9#5kk)(8$0wMEOly*uZD2?7SLji%LC|#|HX>JOWz`@-&qm+auN#84{sY*J5Exq#0?mijx!zRtlx3fFuP16ec(&9b%&wY5hckj~=Ilbdmgu2%e zU`3yO)3dqi>ReX;_6*jYuOr0S{oOYm`1X#??tC4=XZI5)1lj#=%zJi+I>K{y$2!70 zP)E2?sw4hOhS^(|{>+vqc=#-A&mImE7XP6$usw6gFLpjBQ=Mhu9aUX08t#l^c_E9eN=23{@LsbltMiG){ETU~ z;=NYW%;5jB_(KWBD8u)ql|;y2h`$3Yj1LaH0nJ-q6G<4ok@$)ZW5G;qhqv0`;Wl&_ zE3^g}NJd0av=zNX5m^ufUBI9oA`5${sGyDLsRxV7 zhwhhi#);V>cNk(*cT?E*O{~6iX4YM5oB1Z9huA+61pRP4yWri}&3{yIS;LG(hZv45#NqHMt7u%ReoYj1SooL3sMtvd}$Eqe*!ASO1 zwBH()D8`L$TL^K13CobG&a^?sRd7k=6VDd&PCOZd#IU=A0k<{QyuUxKn6|1(W4(=574mU+!T(s97NwS&@eq5=1@$Aq9zgclwr#4%o z5xJSlK7Nob+aCls*cT?NAO$$2NIV6S<#A*&PBHON8^jnbAyO?$b$x_FJbp_#W3^*& z$TR|lsESYwObYEjzq_HxgFq$$R6<<5d?XTvDPdk8u}3Mxs91Z|$&!mG#cVx9futEc zN)aqd5hDqQ(v2jcP|BDHv3k~RYu2J+G?7?kqWW3&1 zlOwru|(xZLMFRVB`oWv8O= zYo8>+Sz(f%=c{?CvLG|cc+GDbHJkt2i++s#e9dqBC$nSZcZEW~+$EA{mj7D>m;0Ot z$MzprP*LG=COoV7mQUfMg$~S^T8WBNGxC%Iv{6`BXzJ|QyStdO*n>Q_Iu_bED-ZT9 zx_N?0ML4t;Or9|{R&8K%1q#)4bu|;SQYNj%n8Pe|5stBkFdqB7RCWX#d9 zDy!jeliNoXB%+EWW(b(H>#!&!E~%NPXs{^#92ycWWd_+G3?Rgs=hQJ_rn^QNv#-*G zcn?X!_+e1VtLI1x=h&hW$`Rc(JZfToF{)uTulQ$vIv3e$k?EOtLH;NB6 zS}v>MNKsXVo0ZK3Q~u6+Kt_tM3S~gK{56JI>0}46T-VN0zkkLom$OkhpAXmBojtQ< z`&)aA-#Ft;oVk1UBy@I%19RkLqLOb-oCw^0h&F*(Fap8m?wF&4BDVY zHi6=?bA-%`VbQI)KoLMKoB%?MIgip2XD!6ORs&rkb-I2v=VcC@v1WXGIr+5TdlSIb|yotohK&bh%! z&d}Oj;DLKzOZ{? z-02ypeV^Oyu|hM0J*k3#K0JTAqAVDkY5l3*daA*k^)CtOeODf}{`ksv{c|eq^q!vO zZ-)*o()D(0)IHj0LHB2UVBMF_&e4|#Y?1!_`OATU^5?7d&)wRy;?=894QbtWNF!uO z8!RT}T6edu^$rd7YPv0o5;EAWt>EYz^!+>k%NniF1_{x1tsRg)KG_Rxg)QpTwfBIu zp`cOEpe^!@8_>0blggudbkHcO*&+Bu`6w(v@R_E6FoKua4(Xc4|5p^`K_kr;MfGH2 ry`f$}Q7i&wq}!pf@I7QdIu+j!T`eQ<6@A++00000NkvXXu0mjfXjf!o literal 15161 zcmV-9JI2I`P)-9go2(lE52# zr7Wi12Mi85l)WG?HyCP;K)CHHf~Yt?Ks=z$7g~7G)70(m?&jy`$H>Xn*Vw+p#iOI6 z000020|VFI-?zHD00992006MCuzh`gL_|cWtFDBFh1J*C{QUgf-rv~T+`YZMhK7c% zt*r+N3r)J}FQ3pUs^TJ%!cnKrQnB0~Zw-p#GRm_&(YF(d3mCv zqqDZQmzS4aU0rr|c9fNtt*xz*l9Fg>XqA0A0{{R2~|Ns2_{r~^}{{H^| z|Ns5{{npytXJ=<JUu;VXlQM1ZCF@XU|?W!a&l&CY zvb41H^!0Odb52%RMqg%DZgf;}d1!)(c9NP~eTHC!jenYv$4ZkM8(ue6}IzPrxSe0+R+dwZp-uc4-@etv#iTU?Qml2%q$hlz<$P*9tk zoS&bcvAx25ett(^WqPBoMP6i6ZFG>Os#0xqMqgzaa+!<5+8&?SZnoAUsO5sQ$dHkd zKAXhOS>UMv008xLQchC<7)uEtyZ=yv)n)R(;Jtdy|Nq&~h}HhT|LLLg|A)K2@Sy(U z|KQ2}vSBSS6+&Q3BD(%kh~NMJW&g|Ke7M>F&(Qz=;r#7?uA%1c!C}BJHlxp0*QLN9 zIREZ!QR&}>ThV&l?WAg@{*BS+_VjO_sU#AQF?5?_@Bfzn(avy*l+oi^~N|Nrg(|NH-X|APPj-~azUs0~8Wz^L)LfT)m5l!*Vp#kr_={B-|_|5@we zkGIFW001`>NklNU?8IqKorD$D-I$6p&ubiZYoVO z6hM3oQLgkUl}F%XMNn+48xv7)Voh8KX+1sd@6YCoJ`m+ot-a`Cj*apqa8*7;C&S0E zx{RYDAIjDdzZR`C589ZBwWj0Ix51Iw$Y^UdtzIK-w=&v=E_ly{I}sh&u?y!$ojwfU zO?S%3DV#$&mv(rOhW3__G**k9*5I0)YxLaR-R0kXcbBusWOsjVPdD9+eC8V%@`RyB zH_Y}JdQaDY&guEx@?Sz$r%-xtC~UVUJOsL;;gOxtaUAp_|H!s;WVkzuxY3x?oLJP2 zbVs8uj3<&mkz^tT;b?a>0v(u6jD0s_i8OTJ2n9I~QiI>r_}~OY8x;|yOcFDxpgD|a zDwECS@hQk%_D@gm5Am59fn)}7AbmDK zb38~>12pe(ARi-%7s>dxL*hhIkXbHtAV9LlgI1~}OL>r&A!ebdb0APUD59+NxxPqR zZed{H&|#0qfFp~JZrv^mN7yHYjvW^S;e?9*9X}RgyuKF&mjihTi%#wXRC7v@S|XgH zDSb{-nrfX-F@Xm6nuCIt2k;Ym5HRC|F>HE0ypNpBc7Y z2wmIa>b-FA%bw*yTEQXN#Z@fHUxKQ?1i=7RxlrvZ(s)oRKykj_Bc{&TdlML?czdtz zIQjJ+-(}=RV~GiOn4|X^1sB4p0)%d%5n{Z)Z5KLU16}*91*oR+oqT5vn$ojPgs?2N z_jWY_wkyy(S08Ul{oFsL_s;kBp64}SS`hjGC;A`$CB$d#0^5vZi!O%1TyW=hX}@p` zFqq5uhjtN~BcUDBQ*@t2mOIg12UhuG~f5nRa;8~MLA9S@( zk|b5SrWA|HHT+KMI~JmtX-rggTiMrjzr2myM@ZA4EAnPl64?Ow@MM*Qa#yO!D#;0- z6zvI>gmPEvt>1cGL{V?xNjFsd{^qSr_esDnD*YHqeKRwC5=Q-sNjvF4H*Sj}VVIyC zH5k5xo-8)y1VcB2JE}N9{=RK@0Uh1L4+XcO7v9h=-qY!*bbsK%!-vsDT~^!Qs2X;iZ^*uj(|V zz|wmW*o?^G(a=+jk^xBK{V7ZDMV-lq5A)dM(VmR4^`3%z56|H4y`7FT!QXp{MDBO* zJredOmEfY#DHpqPeXb+w{y@T;?}+BTzYG%BwML{OY2BdGoWXSx70D${^IzO~f!51A zcV6AOW6BIjLuYFJjefRF|?e}lr=H9+t zPe-b3NYdQ*NgvRXRXQ>y^`orHXnj=G_p17u1r=AmeSiDg$188#xSnZ}s?G{X zF1Hp1{r`-6j{!}Mj*g&(g5L~VR%D8fp!;)d+jjrYPF?{=!t*z4~mBJ#K|? z%6mMF*`tOg2;;qiPNn|Yjj!>!x!16k>-GCw$4x9+V<(QwE&BF+)L(Eh-wz-Hq3^kr z)e)3}s4bU@I>B-YNk=Y~q=KBGlEkHI5eMKzYA$A!GNqh0S1{8v!&Qpu^-SSa8oL8K zcA?z36-EL0v|46nHcV(Hk5L$0&oc9_J6x3vtxB%T42m64NV1~DmQ0bOEQgulZ7PQ) zU3tp5U--ZI$9SAMDK4G+j|L2mPykBz9Rb;9t`<07=Z1m1{yb3I;09SE{{vpE7mk~z zv4(Om{Be*S7n?#cQ8XRz$ISC-`#^Hi4o2V|e! zB`L|2Ls33}flpB!(WGK`Nr%!Iuth=h)eBx=u{C`NWFL7q02SFiFxYcD0?K~TKM{M*rG!9A|V4Gh+=(+f{l=% z$KV4(WF(0T!G`Ce9s}!Ai$1;Rfekw4QWPH{GKwoj!&cSyAYm!Ey$Xe>+4V5Hl2uU{ z&BBbO@ywrxqVVf&I|dUfynup@Yh3IajN04{ajikq+-)HHf|Dfva~RO=BCiuq(;zCl zujuZV!9d+B>GrB1qTZH+dGAv&h&U9*5dm4->7qI9=4;P-y)10d6$@yXM5FliXd3@F ztMIE)#~y&J>=eES*=O1{5QP&QFKl~Afq>y+$0*W{#*3mD(-L8<5ZAQ0PSa0z zmcgRpqBt)>VVSgoa}_LDJp;j@BynG1nY=7`J4bx^SN7c6E6W?OY|Xr)blQ7M1&La8 z69L6bILrk1Mrn|#Ic)K#VD;z%3wtFWJf>l#MhfkGe~ZSib(6)fr~ZX6CH)&CbwB^@^ImZdm%yTo=x~V4;`bSAF!*gAha`FR za7arzWTZeqdJ+yleHwoHL}IMLaEV`4x|E~0_RI3ArAv}CjLgS0O%pUu&cGs4bZYM7 zjIuwsw4^W<^MO)|)~u-@2P6OSjo*XirHtttvWJIOgd>v{1zk)K)0u+dSQ*h%dzYO0 z#o@@YOLDNM{<~^8@Zx+Ce+4A&j(iPocEhBz?mX~WS0_liyBHj)@30*9bk$$N)~;@l z^z=3z?C9<7vCexNLQTEorOv)YM_*rGKTP`dVQ)uY4@kNP4h#+q3|J03_2E$aKtD+O zheuMQ!^4)tq2b}t=-BWO`I3eiuouRAEc1yAESTYLkW3DeYPdcxiU1o1`+r3Ze^$hQ zbq%*>qi_v(!(wM$Y2g}fO$N}}QJ{xYp*SHKKzDDieGh-ROAi6zl6v%U$IBq|Op%f? zpN%PxZ4I9u9_}VR{fDPhbb%T^LAa!ziS1RtwuWOetNw}_{y*&DpFMf9dj>X6z7cri zB+Of_uy)iA3*vwzW<>Xq{?+#a?nQkD9eYbEUv zw{nd>R;>p8GyC?T+cuUy zMh(*hzteAfPuR!e8MQxNjPk}Ui?5eT=|kBC=*1{`;V*{b$xD(OF=k3IE{!=BW$0r+ zIiNelg;Ov`O`;M#Sa*=!d%~;(E^Q+p=3|J9JsA>Zsxxa6WOEUgO{J%|K<+Rh^!T|ew z@4fflySLo}re`aAe?!D+wOWpiG^Jb=Ay@lsz#2^4i3(aMwDj6gik0X{)EDexUoqX)^*It=8eMWY07boFsDx!UJ>C~ zBB4mpRn_T&VHmnD9u{c5AUbD4BpK|yAe!UZn)qBnw8U__PnazgM3I#tE7A(~Muy(d ziWbeJBWxzp3Kza>)GVuJyc=o?p;q&$ruH;xmH&aO-i|)(>g%89_-PBUE8V@JA`m2-$E(4EvYQh~&yrZAMrn6JxVvDa{B| z*Uk8@G9xe+LKut{W(3B#qU#m$q;MUPtx4rNBHbsY>xf!%^lEC?5f&C%!x=Fw*U0i$ z)yPW$C1PsTqV52xXwQ80y;_85Vayjee;E!&)fG`+I7l_arDYx39cjAXunXI970mU%7 zh5!m~M+l+%Cw1`{-42Q&KYsV^3-4f8zAKJ)rve%*yVnuN_nL8UVBU+|GmkRr{n*VR z!a2R=*tWfNi*inK$Xi2O9YQH3oh|teASV7pntSH6UKH(=XXDB{(RD<-Tkc_(_Cul5 zj&s61Vj|MH-$`EN(aK@g3P1r9(ZCBR69qZsdz~!L2Z+M*C?K$)2y&Oov#|1#J8*&Q zIC9!BCpsRqAXP4cxyJ(*{8ReIMW?sDsqYOkU+;QBpS%MtX#xd zp=H=%4o$*LxTdb3<=u%O`XUS-2-~MwWHH^RfO5`t*bG2nqX}w7j}YrqiqON$tPfv8 z5Sg%AjC@TNb-JMC9Lnz#K(?3PCx}Y03P54*1f7c@vT^~0oHoct5apuche#xHQI?y| zfgPXFK9N8hP`E%zpV+uIsK!%zpWb!;J7z>aI3w~uU`Awp?k`_{{?!c)%!o8>8ir}5 zCn4;!PdlF1-TSfIbLLtzqjBTC2wnJ;F-p2y$JdcGqJs$V1e#CgY1TGly=x z`uy|D=daH)5&3BZ5FU?*1Gak6XBS?4G@ofy;|+WVtjQXc->zU&JdR?3(6T&IEVz81 zQ2L7FW;3EvN*c#tSjs}5<2bh1DmP~r!#*crg;~s!XKsq@SFX^DjxElu2%woOWU#BK zpRTFQcpUpy}4%f86 zU=aP4z5D8EB+L6a{#$IRtrgH4y6+o=Hdubr8`;P`;l^BVO~BHaX?TJ!2%aWfz(sL( zcQ|$a^OvWOTOO@zkOAR0U~$#0AvWXp@ti6LlBuvc)W@2tW907?6YEs4UElGhTCR=z zk?y^;|6qwO%X+xu{wMr@M7TsE(QGymn~(yrag`C9{zM~|T&dL5HQg+gN{H-CDQP09 zl!M3?n03|L7qi4bhiCWY@aFyd_gZVSJjX!pDDfS#4A)@Iu7QDyGapy);4l1tti*&z ziOQ3gV|RBfjo;<~$r6tut~||;>01iL~6|>HnuO>cUfN(#4OH&BQ`2eR%RB-xSm;=sW3CWLJ+~sh5T=w#*>pu zrM28}ew#0ZM?{tUZ*&Z||2AJCT0#)jX_%zSY?w9sl?;h0N56Fh8A2)Pubtl> z?FB~-uaRU(!(V&VFoI0})=}~v<@|ORL9+WwJfQZo2vTkhR7Mcn8py_9Ln4vLU7;s^ z_~ONjRfH=wme7@Tln}yskw%EDqLCCj8pN!bMFzpf6>Ap7ER3eqK3+ngb<Tu`iuN$W34}oBZl1f_RoffHk|$GG@?oU?1%eGsEZ3F zgtPym6lEjRuN@^MNnsWwP4>f|r4Vd<-w~47pzcyCXa8piQgQ?l-$gQH7FHJAK}`K6 z(^7CGd5~8K^7eFgfYWyfVs8&rMwALh6`u8Pg zGEF>`YY=~tLdP)IYW+7594I9ukvMy>;jBYilUi@WQ>dE8RHt4;-Za76;jiJYRj;XP zCUF2`s^+VjC?(CGz*DQzy-iu8tg9YP833o%ezd~19$tAc6VO_JW?t*h8YA$cT|9dThY5g6C)taW54W9 ztPE~>QQu>`fb~M&?-$r}Y5}7h7G?MHHau-I4YdJ`FzfDvMG6n)&UzQ(mrn{*IC+}F zq2L?x3J;{R+r3$`T4=Re3*sQ>=3A|g{mq&m%)5BV?X=^Ll2R-QNy0g^Eo(~>k^C^= zNVhb8p(HVrx0t$|1X4vW66<)>^u7|r9hdXlbsOpQu#i&j9jDWHL{UiUYI()s_x2m@ z{DPRvuQ~hQI~?3O{bs>JYTBEHNHOtdzOB50nI~ZYb#s*(7&nQ@rBIIQj+`tWdNg5K;Q7E2FhsPa%@BkR7CJ znu@t-5$P^(Z(aE<21++?N#X76vo6z()9b2gDu~>)Ieq2kmuWY z%yR#Y8lfUlRg=g@A}@Z|0hH&+O!|WD397L}Ke@ zfjcfImn7@3=oNcaIp3)k>wA(}%dm({H2U@P`6;5x$Jv61Qq-pqRYUeQ z5Y>{nb!sB2wO4&>h^n4koJb@Re`D#)VCmo;1`Q(1fe}{+;lD(r2Qg91%gx5=+u+O1 zlSdCtZrcd-T+)5=dH5vkp<{$->*{^F9dWw%a>w(sJL8KM@o(Vy4M&WK4O%aG);mw4 zM#}NNK|w`~HY9nZ@N~x;5u>iCk&txnA)-Y0g-6SC4=p2vsL2c5$KF`2TP&)&Jbv(HOLGC+3{~L$I97YD+utM*hiy7i=S?9FZP~3 zkFu8@`xfpn;659Ru%~|7ji$avQ)Pf%-HDzeK=<}f&FY{i*MQ%$U-5GIeCpZt{J9_& z>xaV}VLs(wZsIxD{*;(WsFButFQbr%nG3({4!E#w{jy-z!O@43nMZ(<<3}H{l<;5jqpPEx9XT>zH)p3NBoT@5(-%?|Z9uhQTq!S7A(1qM zQvw|4XF&QwNFyu~9<~4FzEb-?G)v(LiRL=qy?bXC{?dm)?qEnH5`Xt{%^NvHbS7?` zA)*C+V0sWSHq%X){IOOJw~?yw=$LD0=Vnneyq zPV|RqGYq&NXu~@%!xPhG8#CDQ^wuEIg(@-|F4JCIP!YSG%muVzIW3I)5u7T(`)vlHW+tChW@MJH)?T9i6{+z zq$Xh>`OWB-Bj%zsaFh+$_?c;*I%+ghg9%jvkbA90KQ&Dqk-Sr{SMjsg&ghei$PL^j z$6V5IM(b}Irip5MZfRm^u?~B(9{Jy?2lJ6=wd!xsWigA0kw)Js%XGAeQ|PI%v=PBnm9w`l3RDoq zc~wvJHdQ1ZMHIgr(^O2uNUaN^PZ7zrW_dB5U7fyA#B`BE6t1aAIF1rzh}RLT))X@t zg#wXO5i4uEb$&T}ezKjf#He7o^}1`pHkB04Ys6w7RiqRXh+FN6ks-vc=3+Oda*;?R z{#e;!3UTH3Xc#f2_H>mGVm3vt)vA<590&f_GwHn?qPvp1>fuHTQLPHD`ZN_IS8rRb zmNv;|tM%1)5RvzG4c405W{o(=M8}9pGEBL=qS#65f!hkAoutED`$=?ev|7Mo)<={zfxbU6~OX5N${kElXPPhEh2_LT&^` z>G2EUo&Q;ra-m~HNGXCM;Z44z^p-+wcYGy7Bg1=<=S4?Rghld(a5_|2q{LtKSIxf>B87;`j`F80BvcVmS=X$+NONHbk-3+q zG0|8aG1RBDr)49KAye_k7UDT7@TD7X#&UINpN#D0uHwvCjEuGYoe2?Z#-dqdy(>;S z#*C#}HPyN_>$o$P@BXvRSdtk_GGj?361f$`Z}vnsexo&IV>h)=sxlk9`J|>}RHosY zPp`#ks-0-F9^=GQ)kM`=HBLji>WS4ze)-H~I$m@AO+jmY8KV)V*`qiOz9;DVn}%eL z(O`n;IBtViL_!e7YQ`0LMq@RO_+uI=uk(v>n!|n5EV}WoO)Q(KTmDWF;R7okes0T- z|K;>MxG(p5|Hdlr*{OX}8`LP#qZTbZsPw}IhwtY4PFy@Rph5EaTZsg+S;TLIh+SnV z{yrYZ-l+|lLkz2_`li{(Z`z11s}4}#G&}1!jhOoOAXR@EvzdG)iYYg4Lp+K&jq)0^ zgOAxP{ZS2H#%o3V9>s1PNkUT0rcxk^*WgDYpD)C0vTF3}bvYWVK~XF@D!fVG zKBrewQtT~;Hq-kT&g)fly-*7$+b+U5i#t0DXT7Zsx3(>W+Z#@$hL_M`*Ta+C52vq& z)sOZYGv1T&FH4BPZWoJ7qoZo+VEV-mzg&M~MSkl^y*}SQE3UnnuUm-0cI(@w_*axj zB+@CwS8n7GKcc;C{D@gxAzW$Sxgm6w#d->1%7SjN)|y2z6&exWL!$`ucH#8K6qzP` z-v)d8maimLPF%!ORwG9iqDl3mr6D_F@}h~ZueT9RuBgh0Y4t+LxY3~_h>9<6$wfTp zA=C|LCH!=elJ`XT3mjSy_e6+LpHoV;c5bl{&RuLcWyIwkycR+(S(UoGv=*b@#*zxWO5#Yw@^LZWWUlfs30H->_T0KN$X7*#s3Kw& z_@T?W{Hm~~gSDKstu+-t+&QOZa)fCrHSL^*dA`6~aQA+aqdCTG%$g^szfI+`TdRVI zge;yd!bI-P+P`vVE;ehCST(g3|1K*GK5b)es)@*!=jt+yWiZ*qwz&spPzdBrF{~B$ z7QblYxhbF~MEgYPfdw;nfPC$7Slf1Hk_(inyWdsv+T59AXN; zK3NG{)a2{{5li^omq<$2T+L`w_sj^g7l;Fdx&;G@UuHR6blx(hNG776S(c_u+x*+N z9eG8=w7yND*6NOkl-S;m6xv%iKTk%bRX(3WGcV>N0jc!0Pjw2Ftyf3DLIFv2*QHQ* z*I6VOmC*TLDRlmD9TF^50c!6`q4vWs5HP5y0@B$ig(_=tK88XUs{R#C{y%;npnjAGJQSr-EJeqej z>AwIW6owz+ZlsN?Ux2WU`vPgte&oENTK@$I-P~{X?W0R|(qaaLz`8=0jL2`snxtT2;>7tR?oW^HjuAIx@bm|;$I}lM z2P2co;LH=3u*VZ0xZ$v8aR|F~?eP`AfW;AZ?-IQCHTFwv&Kmne-~EOA5|}}8TmrMi zo!!r?R4SF`YPD*@(Nsz~g`>G;>;p=5q4_F>3XW8c_z}+b$VPwxs?o*W~L0YR)Jih+=iHwB;kzt zKpUG7C)Z$`&;#-E8u0@t*Yyq__$voq7dF;H7Q`BMP81c?3G8fiK62)j^~N?toHH@9 z4Lv|6V$cJyb2SfXHs~tsTp|HW%tV}In8@;EGl-IFgk4yO`I_!=0XDvwhd93TPLt-}q1=~FgM18@N8Rqx zGXE?%ZPswUR7i80?jzGrn3)2RmS0J8CV~-hj%LX44sK%3#tg=cjX5$6&NXloz2$;4 z!4{cqz?nt62b0>DL1%E3r$`+8{;{Aub99KE#-2>>4r10Mg^;9~=?)Yc*lS9hr!x7N z&=eMYNm<6c=I=;0QSOI<)|_Y~VXf5%Q0{O^@#QCD(wgEYFUPzbz`~&6b>IS!quqT9idXG{O4%-EjU|?HJr_94)>6D47Jj9O`6te+Jdz!LI%VX zNO1+$UXH?$nZq!88GEE>Ryc!Uuh$E8n7toj4?84Egx_1AsRH;-&qAC(! zO2^}L3&XZZtb`1d6sgPT`9dw<*;p!bb!%HB-m1cW2mNLEJD_$v9^bwNN{fV~3&`|) z9%`wGViI|(q(}tx5uABZaeT(_bLbux~*3Af&O69*!RVb=L(M*jk3KoUpH_{NtE~B@hu+eD5N}y0uD2i+K z2Z+uZ&(~WPg-&eRYS>5phP}Haaz-mczU{`XKJmNy0pYmHW+Y_YwNU z%s+vhkG&&`+8ZAr>j{wcm6+ap?^I5{h|6(8lO{@iF%^=Ol!}y?yyxJ_b|l8DI?hpB zP0r>;5Hn|4aeB2EOEGR?zljL4NWsLu*jFU4U_bL)u0g@G2(`@RQv9x8vk=l{YkeI&OHgJBr{Cb&?L-V+EA z+`Dh#%0b!@^z#DPLEfeJs#FTq&UYPafVEVoRb}(l>6Qb zhV>=ym)7yK+e_CohLH^NN<#9mO}8Ov?T`fOxFA(#&~?>1zfZQ04tqhZfOfz3Lin*w zt9apS1_`A|sUqDIE+y0kE?oiuR%n?wTm`xbbc||Wdwl?`dv%tc{7#8;=$>08IVqEKCXs(hmDqS#GpN#BcgnCs>N?ae9%njw$ zVLAcnfmtvZQLQBrq^;RHv+Iczm|xa;+;fGfGn{ROZ$W*b~R$q!ch5C^J>I;HS6UbGmBP zR*u6NrouqU?CUV!Fy8Jy$*aigr+sC3|1kW#s~6a{1)KlxALV7j{rvp=B6Zb6`)yIC ztO40+Xo~2vu|+5=Mkga}%LW&>5i**B^3wU0<2!S?_M9r4&DM;sTD5AFOU88Pwh5MM zUA?ggHr9-6DSd+rFwewf_E8YS+qj z<25^}Og}aKCaypKi6mrHP0gSdOHIu@Oo-{!RGsEiQ=Mc!HI;vun4h2D&)LCh*;`)B zQA|XZ4d!jzK$(nojj6V|qanfy$intyL+)tl7rK^KT4;2oUCmoV`dqK&EJAgWS#IbD zmMvCOQIZMSA0)>L5da{p5Z&R52$L;aHV6QN z%XTsuseq_#G?kJM^B<%#ceKKyB7zTs=l~{EWUX*RX-q^EXSNj%j+NmwxFwJXk3=9c zF!>{J%_dHky^x=DZV@ND0%z%xpLX{BKRRKMt&mHyagTG>a{()s6K7+Rd%ch*o zCBAaC@<15fNT~9GWl@(C%fx5hfn`%G&eP?v&SFd|m~voQffPsEPqSH}q{-!2FE@%PbPQY1vW}|5EXR-RpZKnD zv-D?=MdjDc6I?Nh56IKea_gEE(VsmgoKTD_!l#+b3L}*JNX}RyG0h2KKsS=Q3XbQB zI?OTpkx=;&cK;w!(SNAF9hyrnO;MwJY(iyroqi+-smmZt1{aW(aTI9I9#cRXXLmD7 zib{>7(6Q%qaU*v(>+hf7ibw_ezvXJ6=!bH5v%VQMuXlDMO?}{qc!vs3BS zO51)e=tEBh0*Uye;qa{b@j&1yWP;GrKxmPJ;!TS}fu*Pv{Y{Ue=ZAvN@#zJFv!aRT zf}!)HI>e4e@!HUqBoe3^q2!iOZCryGJ60t^q3!h$U-H<-B!c?wp-=);-2w?yrW!)w z?kJ#!+nVYTM7zVGhAD_Sm7?14qZ~!!aRd;3G+bMXK9E=MT_;c_7KNXTL!tPS;YEou zq^tgvV0bkG8Co3C90cb?OuXwzfC@Z(aU$HT$Lnxde3YZ`WEyzVZq(-A7#X{3UULE~~%&isvtK-x8>C z8XFT1dbP1pjpc^WrB}o*cTl|P^4JxZB7-eK^xnqno^z(hSNH20?~NLu_+7EflSm?j zl9$KsiW}@B5{LGsFOPoUeHL=D-8PYD)jj_wr>V8?Qv0(~&SDJTA(RH!g)#`qG z?7H$TfmF)K5;u#Rp>E*KiE<>=u}0pEH;SwK8{!7)wgk!)R`-`;R|qA{6|t9^qGd=I zN^HI^cE$5AUwGlm&tDO{ZgT<|>>~gr&$=1C?X_xk*X<+BSNF&T=BvBWK0;-_k5Kvhh(BRfC10!h)z_LLAI=4UxgSQL zwET%51Hi{8=Jn=3c1GMCYbzy9AdrWAAfQoV9E|7XAwLgerKDl}O)-rUhLAJg27tHE zB!nwv=sf^%57nuqjMDWWT16?D2~IPEq0nj&tqz5PGs{uFHpi?wdA~Hv)#i)ik8mZ& z=VnCBTB-J&&1Y}r+8v`*9`br4)!BK-pY0f>YMe*VI5$aR zYVc>T{+_tyx95E){w=5iDjl*_=1Bj`@2PZXV2^BIkN!=8Hd+iy3l#%Z#kZ*@r!6DH z89S5Fjieu|T?MMJ>PKHazdu1$OZX$)mQ;B|M>FDK@JGF&9mMrPP%e+!qQ4HxX0u+< z*zDOu8zkB=G<)`#8M?pMB9w8&D6x9)2eY1LJb`#mgJJ0}1QD?>(qLN41ar(p3z*kG z%!C>42QTG&SeEtV!CSj`vYorZtg!*vT!0zNW&q6HBU|E*j#z|e*#`kq++;A%w!14J z%6OF6V#jkZV-XQHLGr%o*|TS7upHK^jOHv84R&;H*w8UJxY+9JIJqJsgQ?O!!JVmR z?24#wXlQ8mWNYyLq4|{&!FDmeT-oB{RYIQ)7kZ|oZ{KuBE&aM$z;k|ne*6LUW5u>Y z#0*(PWbrVrhW%!WiRY+^7^6pk^ctybJ1-{^4=HD?x6TkbMxq?G4HV->p_=1s28XH) zP=RoC1X7~3A(Dn!8PNb#M#?ZMuf6T*l8Y#%xH6)GC}WNkF-3|v5i?Y32r)y-ILNMy zNVzdbMPfXX8b)MUMo1a;H=@ETl@Vn`3hk1wRJKctta2lfRJrz?&M2e|&OlKyoe_2L z4NjpBrwvd{YecE3fuEn>pR%{AWd}VW+ae--)SN`RD3j3*W2!25RE-4^5o}L3=8nGq zLf7{{|I-4|Y<hxF?QlbTtsXEIG!vtd`lzT66H2jM;V2V7c1Il&i2;_0WiRy+ z6?M3yPBA-~b-;NlEai1pL=KZ5#E6VoR3i6%ghUP_nQdz@RY<>&P}6g=Y+;x{`hA2# zx;owW5ho1mIsppG|G0vm->;CmyU#}tGtP-1N+5Cu@{bkd3C*n z$`8%pH4$TDv25ddRp`S{i&5Z85uG|+qubuC_Q5i!&{9|TQ<8J z3QaJw-Nd}Za{m*@LyjHXilCoTY=U;M><@JdGd8v}nXaQ9)G|cWB61Hwu-#{ha`G-U z#-lt_loc_VA)3V;GDjMY46ZrqW74ck?HZ*btE)1qBhn1F0OS`7L^7x%Izk1aYbUpw zChr(^GI0s$Nn)nG&IjIhR74$2MDam@F3S`>;~>%vuz^rQjnJu7Dslv%lgRMiim16w z3`7;OI-zo-RHE%-dLq2m0NuZs$xZf>E-VM?XaR!`wFzX|wk6ETyTPRN(~CJ0iE(Ct zS?Sbpn`2J?D(~eu^rt6=hren~wSbq>Vso8_pC>;*|24+Fy}bDU+qsY9hJhFg!MbS zF30kVTU%9&&kZ^yGR~mSSet6miiv$hUTV>570f;rDi3IPM2g?Mm2yDM_fJO%lIAxb z5_z_P>vi_%9$*`g$uu)(7m#}ozXK{Cd|oGl7@b3sw#u1P@6LzotA6I> n2NpN~nmKio=gn>A=(_a>Fh`Mk&7v2v00000NkvXXu0mjfSe&S8 diff --git a/skins/larry/templates/compose.html b/skins/larry/templates/compose.html index b4c7437373c..3dcc48c047c 100644 --- a/skins/larry/templates/compose.html +++ b/skins/larry/templates/compose.html @@ -58,7 +58,7 @@

    - +
    From 15bd0b51a4f868d5c4c00822c451aecabc3c46a6 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 21 Dec 2016 11:35:41 +0100 Subject: [PATCH 26/48] Improve mailvelope decryption errors handling, hide encrypted part attachment on successful decryption (#5279) + small style improvements --- program/js/app.js | 26 +++++++++++++++++++------- program/steps/mail/show.inc | 3 ++- skins/classic/functions.js | 3 +++ skins/larry/mail.css | 4 ++++ skins/larry/ui.js | 2 +- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 51469170adb..4f2f96e4a81 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3806,15 +3806,27 @@ function rcube_webmail() // wrapper for the mailvelope.createDisplayContainer API call this.mailvelope_display_container = function(selector, data, keyring, msgid) { - mailvelope.createDisplayContainer(selector, data, keyring, { showExternalContent: this.env.safemode }).then(function() { - $(selector).addClass('mailvelope').children().not('iframe').hide(); + var error_handler = function(error) { + // remove mailvelope frame with the error message + $(selector + ' > iframe').remove(); ref.hide_message(msgid); - setTimeout(function() { $(window).resize(); }, 10); - }, function(err) { - console.error(err); + ref.display_message(error.message, 'error'); + }; + + mailvelope.createDisplayContainer(selector, data, keyring, { showExternalContent: this.env.safemode }).then(function(status) { + if (status.error && status.error.message) { + return error_handler(status.error); + } + ref.hide_message(msgid); - ref.display_message('Message decryption failed: ' + err.message, 'error') - }); + $(selector).addClass('mailvelope').children().not('iframe').hide(); + + // on success we can remove encrypted part from the attachments list + if (ref.env.pgp_mime_part) + $('#attach' + ref.env.pgp_mime_part).remove(); + + setTimeout(function() { $(window).resize(); }, 10); + }, error_handler); }; // subroutine to query keyservers for public keys diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index 3d52e1c7492..62fe8ffefbb 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -189,7 +189,8 @@ function rcmail_message_attachments($attrib) $filesize = $RCMAIL->message_part_size($attach_prop); if ($PRINT_MODE) { - $ol .= html::tag('li', null, rcube::Q(sprintf("%s (%s)", $filename, $filesize))); + $ol .= html::tag('li', array('id' => 'attach' . $attach_prop->mime_id), + rcube::Q(sprintf("%s (%s)", $filename, $filesize))); } else { if ($attrib['maxlength'] && mb_strlen($filename) > $attrib['maxlength']) { diff --git a/skins/classic/functions.js b/skins/classic/functions.js index df181c73034..c4b0f7a69b1 100644 --- a/skins/classic/functions.js +++ b/skins/classic/functions.js @@ -1085,6 +1085,9 @@ function rcube_init_mail_ui() }); $(window).resize(function() { + if (!$('#attachment-list > li[id^="attach"]').length) + $('#attachment-list').hide(); + var mvlpe = $('#messagebody.mailvelope'); if (mvlpe.length) { var content = $('#messageframe'), diff --git a/skins/larry/mail.css b/skins/larry/mail.css index 83e0b710a61..dc5dbb9d53f 100644 --- a/skins/larry/mail.css +++ b/skins/larry/mail.css @@ -868,6 +868,10 @@ div.hide-headers { margin: 8px; } +#messagebody.mailvelope { + margin: 0; +} + #message-objects div, #messagebody span.part-notice { margin: 8px; diff --git a/skins/larry/ui.js b/skins/larry/ui.js index 984892315f6..d4d450a5779 100644 --- a/skins/larry/ui.js +++ b/skins/larry/ui.js @@ -525,7 +525,7 @@ function rcube_mail_ui() if (mvlpe.length) { var h = $('#messagecontent').length ? $('#messagecontent').height() - 16 : - $(window).height() - mvlpe.offset().top - 10; + $(window).height() - mvlpe.offset().top - 2; mvlpe.height(h); } } From 68c9b669e43be1d735122ac4059e2377ad95dc0a Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 22 Dec 2016 10:35:24 +0100 Subject: [PATCH 27/48] Fix adding images to new identity signatures It already worked only on edits, because the image data for new identity was stored in the wrong session item. --- CHANGELOG | 1 + program/steps/settings/save_identity.inc | 2 +- program/steps/settings/upload.inc | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 49c39906aa7..74c4c23a295 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -79,6 +79,7 @@ CHANGELOG Roundcube Webmail - Managesieve: Fix handling of scripts with nested rules (#5540) - Fix variable substitution in ldap host for some use-cases, e.g. new_user_identity (#5544) - Enigma: Fix PHP fatal error when decrypting a message with invalid signature (#5555) +- Fix adding images to new identity signatures RELEASE 1.2.3 ------------- diff --git a/program/steps/settings/save_identity.inc b/program/steps/settings/save_identity.inc index 8ffe39e6b50..312930b125e 100644 --- a/program/steps/settings/save_identity.inc +++ b/program/steps/settings/save_identity.inc @@ -96,7 +96,7 @@ if (!empty($save_data['signature']) && !empty($save_data['html_signature'])) { unset($_POST['_signature']); } -// update an existing contact +// update an existing identity if ($_POST['_iid']) { $iid = rcube_utils::get_input_value('_iid', rcube_utils::INPUT_POST); diff --git a/program/steps/settings/upload.inc b/program/steps/settings/upload.inc index 99b398d3c8a..0cf7ae60cf1 100644 --- a/program/steps/settings/upload.inc +++ b/program/steps/settings/upload.inc @@ -25,7 +25,7 @@ if (!empty($_GET['_progress'])) { } $from = rcube_utils::get_input_value('_from', rcube_utils::INPUT_GET); -$type = str_replace('edit-', '', $from); +$type = preg_replace('/(add|edit)-/', '', $from); if ($RCMAIL->action == 'upload-display') { $id = 'undefined'; From ab429dbef2bbd426aacf5436f7dcb78866193f2a Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 23 Dec 2016 12:52:50 +0100 Subject: [PATCH 28/48] Fix rsync error handling in installto.sh script (#5562) --- CHANGELOG | 1 + bin/installto.sh | 26 ++++++++++++-------------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 74c4c23a295..24aab297b5c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -80,6 +80,7 @@ CHANGELOG Roundcube Webmail - Fix variable substitution in ldap host for some use-cases, e.g. new_user_identity (#5544) - Enigma: Fix PHP fatal error when decrypting a message with invalid signature (#5555) - Fix adding images to new identity signatures +- Fix rsync error handling in installto.sh script (#5562) RELEASE 1.2.3 ------------- diff --git a/bin/installto.sh b/bin/installto.sh index 2cc1b2558c4..27594b6392c 100755 --- a/bin/installto.sh +++ b/bin/installto.sh @@ -42,7 +42,6 @@ echo "Upgrading from $oldversion. Do you want to continue? (y/N)\n"; $input = trim(fgets(STDIN)); if (strtolower($input) == 'y') { - $err = false; echo "Copying files to target location..."; // Save a copy of original .htaccess file (#1490623) @@ -56,16 +55,16 @@ if (strtolower($input) == 'y') { } foreach ($dirs as $dir) { // @FIXME: should we use --delete for all directories? - $delete = in_array($dir, array('program', 'installer')) ? '--delete ' : ''; - if (!system("rsync -avC " . $delete . INSTALL_PATH . "$dir/* $target_dir/$dir/")) { - $err = true; - break; + $delete = in_array($dir, array('program', 'installer')) ? '--delete ' : ''; + $command = "rsync -aC --out-format \"%n\" " . $delete . INSTALL_PATH . "$dir/* $target_dir/$dir/"; + if (!system($command, $ret) || $ret > 0) { + rcube::raise_error("Failed to execute command: $command", false, true); } } foreach (array('index.php','.htaccess','config/defaults.inc.php','composer.json-dist','CHANGELOG','README.md','UPGRADING','LICENSE','INSTALL') as $file) { - if (!system("rsync -av " . INSTALL_PATH . "$file $target_dir/$file")) { - $err = true; - break; + $command = "rsync -a --out-format \"%n\" " . INSTALL_PATH . "$file $target_dir/$file"; + if (file_exists(INSTALL_PATH . $file) && (!system($command, $ret) || $ret > 0)) { + rcube::raise_error("Failed to execute command: $command", false, true); } } @@ -96,13 +95,12 @@ if (strtolower($input) == 'y') { echo "done.\n\n"; } - if (!$err) { - echo "Running update script at target...\n"; - system("cd $target_dir && php bin/update.sh --version=$oldversion"); - echo "All done.\n"; - } + echo "Running update script at target...\n"; + system("cd $target_dir && php bin/update.sh --version=$oldversion"); + echo "All done.\n"; } -else +else { echo "Update cancelled. See ya!\n"; +} ?> From 2418f0798500e5ac8b743632aa374cc5a30d880f Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 24 Dec 2016 08:48:50 +0100 Subject: [PATCH 29/48] Nicely handle contact deletion on contact edit (#5522) --- CHANGELOG | 1 + program/steps/addressbook/save.inc | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 24aab297b5c..05f59e0904e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Nicely handle contact deletion on contact edit (#5522) - vcard_attachments: Add possibility to attach contact vCard to composed message (#4997) - Preserve message internal/received date on import in mbox format (#5559) - Zipdownload: Fix date format in mbox "From line" diff --git a/program/steps/addressbook/save.inc b/program/steps/addressbook/save.inc index 90704110dd3..49759ff6927 100644 --- a/program/steps/addressbook/save.inc +++ b/program/steps/addressbook/save.inc @@ -158,7 +158,7 @@ if (!empty($cid)) { } // LDAP DN change - if (is_string($result) && strlen($result)>1) { + if (is_string($result) && strlen($result) > 1) { $newcid = $result; // change cid in POST for 'show' action $_POST['_cid'] = $newcid; @@ -167,6 +167,13 @@ if (!empty($cid)) { // refresh contact data for list update and 'show' action $CONTACT_RECORD = $CONTACTS->get_record($newcid ?: $cid, true); + // Plugins can decide to remove the contact on edit, e.g. automatic_addressbook + // Best we can do is to refresh the list (#5522) + if (empty($CONTACT_RECORD)) { + $OUTPUT->command('parent.command', 'list'); + $OUTPUT->send('iframe'); + } + // Update contacts list $a_js_cols = array(); $record = $CONTACT_RECORD; From 369b44d94ab07a2899c4b18d2b275ab4244e0ab0 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 27 Dec 2016 04:46:36 -0500 Subject: [PATCH 30/48] Fix unsetting template objects Fixes compatibility with some plugins e.g. kolab_addressbook which call parse() method (for sub-templates) while parsing the main template --- program/include/rcmail_output_html.php | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/program/include/rcmail_output_html.php b/program/include/rcmail_output_html.php index 583ee2eb219..fd4b9143132 100644 --- a/program/include/rcmail_output_html.php +++ b/program/include/rcmail_output_html.php @@ -1012,18 +1012,13 @@ protected function eval_expression($expression) * with the appropriate content * * @param string $input Input string to parse - * @param bool $reset Reset stored objects * * @return string Altered input string * @todo Use DOM-parser to traverse template HTML * @todo Maybe a cache. */ - protected function parse_xml($input, $reset = true) + protected function parse_xml($input) { - if ($reset) { - $this->objects = array(); - } - return preg_replace_callback('/]|\\\\>)+)(?/Ui', array($this, 'xml_command'), $input); } @@ -1123,7 +1118,7 @@ protected function xml_command($matches) $incl = file_get_contents($path); } $incl = $this->parse_conditions($incl); - $incl = $this->parse_xml($incl, false); + $incl = $this->parse_xml($incl); $incl = $this->fix_paths($incl); $this->base_path = $old_base_path; return $incl; @@ -1296,12 +1291,12 @@ protected function postrender($output) { // insert objects' contents foreach ($this->objects as $key => $val) { - $output = str_replace($key, $val, $output); + $output = str_replace($key, $val, $output, $count); + if ($count) { + $this->objects[$key] = null; + } } - // reset objects - $this->objects = array(); - // make sure all
    tags have a valid request token $output = preg_replace_callback('/]+)>/Ui', array($this, 'alter_form_tag'), $output); From eec77c1a9938c0c93b580a8804ee54c9f36094c5 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 27 Dec 2016 05:57:11 -0500 Subject: [PATCH 31/48] Fix some advanced search issues with multiple addressbooks (#5572) --- CHANGELOG | 1 + program/steps/addressbook/search.inc | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 05f59e0904e..0b30ce33077 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -82,6 +82,7 @@ CHANGELOG Roundcube Webmail - Enigma: Fix PHP fatal error when decrypting a message with invalid signature (#5555) - Fix adding images to new identity signatures - Fix rsync error handling in installto.sh script (#5562) +- Fix some advanced search issues with multiple addressbooks (#5572) RELEASE 1.2.3 ------------- diff --git a/program/steps/addressbook/search.inc b/program/steps/addressbook/search.inc index 6a938cef899..8444f8a17b8 100644 --- a/program/steps/addressbook/search.inc +++ b/program/steps/addressbook/search.inc @@ -240,6 +240,16 @@ function rcmail_contact_search() // Re-set list header $OUTPUT->command('set_group_prop', null); + if ($adv) { + $OUTPUT->command('parent.set_env', array( + 'search_request' => $search_request, + 'pagecount' => ceil($result->count / $PAGE_SIZE), + 'search_id' => $sid, + 'source' => '', + 'group' => '', + )); + } + if (!$sid) { // unselect currently selected directory/group $OUTPUT->command('unselect_directory'); From 9d45ef20cc681e76b1825126c9311b465fc0262c Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 29 Dec 2016 12:22:10 +0100 Subject: [PATCH 32/48] Fix so group/addressbook selection is retained on page refresh --- CHANGELOG | 1 + program/js/app.js | 3 +++ program/steps/addressbook/func.inc | 10 +++++++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 0b30ce33077..def07b2dd69 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -83,6 +83,7 @@ CHANGELOG Roundcube Webmail - Fix adding images to new identity signatures - Fix rsync error handling in installto.sh script (#5562) - Fix some advanced search issues with multiple addressbooks (#5572) +- Fix so group/addressbook selection is retained on page refresh RELEASE 1.2.3 ------------- diff --git a/program/js/app.js b/program/js/app.js index 4f2f96e4a81..8114b08c469 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -5899,6 +5899,9 @@ function rcube_webmail() url._search = this.env.search_request; this.http_request(this.env.task == 'mail' ? 'list-contacts' : 'list', url, lock); + + if (this.env.task != 'mail') + this.update_state({_source: src, _page: page && page > 1 ? page : null, _gid: group}); }; this.list_contacts_clear = function() diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc index 916c7c6bac0..a6c36cd8b68 100644 --- a/program/steps/addressbook/func.inc +++ b/program/steps/addressbook/func.inc @@ -152,14 +152,18 @@ function rcmail_contact_source($source=null, $init_env=false, $writable=false) else $CONTACTS->set_page(isset($_SESSION['page']) ? $_SESSION['page'] : 1); - if (!empty($_REQUEST['_gid'])) - $CONTACTS->set_group(rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GPC)); + if (!empty($_REQUEST['_gid'])) { + $group = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GPC); + $CONTACTS->set_group($group); + } - if (!$init_env) + if (!$init_env) { return $CONTACTS; + } $OUTPUT->set_env('readonly', $CONTACTS->readonly); $OUTPUT->set_env('source', (string) $source); + $OUTPUT->set_env('group', $group); // reduce/extend $CONTACT_COLTYPES with specification from the current $CONTACT object if (is_array($CONTACTS->coltypes)) { From 10f6fb4cc7d47658946778890a00add7ce542c36 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 30 Dec 2016 15:19:27 +0100 Subject: [PATCH 33/48] Install script to fetch javascript dependencies defined in jsdeps.json (#5535) --- bin/install-jsdeps.sh | 279 ++++++++++++++++++++++++++++++++++++++++++ jsdeps.json | 86 +++++++++++++ 2 files changed, 365 insertions(+) create mode 100755 bin/install-jsdeps.sh create mode 100644 jsdeps.json diff --git a/bin/install-jsdeps.sh b/bin/install-jsdeps.sh new file mode 100755 index 00000000000..d34fb7f6b15 --- /dev/null +++ b/bin/install-jsdeps.sh @@ -0,0 +1,279 @@ +#!/usr/bin/env php + | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require_once INSTALL_PATH . 'program/include/clisetup.php'; + +$SOURCES = json_decode(file_get_contents(INSTALL_PATH . 'jsdeps.json'), true); + +if (empty($SOURCES['dependencies'])) { + die("ERROR: Failed to read sources from " . INSTALL_PATH . "jsdeps.json\n"); +} + +$CURL = trim(`which curl`); +$WGET = trim(`which wget`); +$UNZIP = trim(`which unzip`); +$FILEINFO = trim(`which file`); + +$CACHEDIR = sys_get_temp_dir(); + +if (is_writeable(INSTALL_PATH . 'temp/js_cache') || mkdir(INSTALL_PATH . 'temp/js_cache', 0774, true)) { + $CACHEDIR = INSTALL_PATH . 'temp/js_cache'; +} + + +//////////////// License definitions + +$LICENSES = array(); +$LICENSES['MIT'] = << $dest) { + echo "Installing files $extract/$src into $destdir/$dest\n"; + + // make sure the destination's parent directory exists + if (strpos($dest, '/') !== false) { + $parentdir = dirname($destdir . '/' . $dest); + if (!is_dir($parentdir)) { + mkdir($parentdir, 0774, true); + } + } + + // avoid copying source directory as a child into destination + if (is_dir($extract . '/' . $src) && is_dir($destdir . '/' . $dest)) { + exec(sprintf('rm -rf %s/%s', $destdir, $dest)); + } + + exec(sprintf('mv -f %s/%s %s/%s', $extract, $src, $destdir, $dest), $out, $retval); + if ($retval !== 0) { + echo "ERROR: Failed to move $src into $destdir/$dest; " . join('; ' . $out) . "\n"; + } + } + + // remove temp extraction dir + exec('rm -rf ' . $extract); + } + // extract the archive into the destination directory + else { + echo "Extracting zip archive into $destdir\n"; + exec(sprintf('%s -o %s -d %s', $UNZIP, escapeshellarg($srcfile), $destdir), $out, $retval); + if ($retval !== 0) { + echo "ERROR: Failed to unzip $srcfile; " . join('; ' . $out) . "\n"; + } + } + + // remove some files from the destination + if (!empty($package['omit'])) { + foreach ((array)$package['omit'] as $glob) { + exec(sprintf('rm -rf %s/%s', $destdir, escapeshellarg($glob))); + } + } + + // prepend license header to extracted files + if (!empty($package['addlicense'])) { + foreach ((array)$package['addlicense'] as $filename) { + $pkg = $package; + $pkg['dest'] = $package['dest'] . '/' . $filename; + compose_destfile($pkg, $destdir . '/' . $filename); + } + } +} + + +//////////////// Execution + +$WHAT = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : null; + +foreach ($SOURCES['dependencies'] as $package) { + if (!isset($package['name'])) { + $package['name'] = $package['lib']; + } + + if ($WHAT && $package['lib'] !== $WHAT) { + continue; + } + + echo "Installing $package[name]...\n"; + + $srcfile = fetch_from_source($package, true, $filetype); + + if ($filetype === 'zip') { + extrac_zipfile($package, $srcfile); + } + else { + compose_destfile($package, $srcfile); + } + + echo "Done.\n\n"; +} + diff --git a/jsdeps.json b/jsdeps.json new file mode 100644 index 00000000000..cf091c5f5cd --- /dev/null +++ b/jsdeps.json @@ -0,0 +1,86 @@ +{ + "dependencies": [ + { + "lib": "jquery", + "name": "jQuery", + "version": "3.1.1", + "url": "https://code.jquery.com/jquery-3.1.1.min.js", + "dest": "program/js/jquery.min.js", + "sha1": "f647a6d37dc4ca055ced3cf64bbc1f490070acba", + "license": "MIT", + "copyright": "Copyright 2005, 2015 jQuery Foundation, Inc.", + "source": "https://github.com/jquery/jquery/tree/3.1.1" + }, + { + "lib": "jstz", + "name": "jsTimezoneDetect", + "version": "1.0.6", + "url": "https://bitbucket.org/pellepim/jstimezonedetect/raw/6c427658686c664da52c6a87cd62ec910baab276/dist/jstz.min.js", + "dest": "program/js/jstz.min.js", + "sha1": "4291cd3b259d2060460c2a6ab99f428d3c0c9537", + "license": "MIT", + "copyright": "Copyright (c) Jon Nylander", + "source": "https://bitbucket.org/pellepim/jstimezonedetect/raw/6c427658686c664da52c6a87cd62ec910baab276/dist/jstz.js" + }, + { + "lib": "publickey", + "name": "PublicKey.js", + "version": "0e011cb", + "url": "https://raw.githubusercontent.com/diafygi/publickeyjs/0e011cb18907a1adc0313aa92e69cd8858e1ef66/publickey.js", + "dest": "program/js/publickey.js", + "sha1": "d0920e190754e024c4be76ad5bbc7e76b2e37a4d", + "license": "GPLv3", + "copyright": "Copyright (c) 2015 Daniel Roesler", + "source": "https://github.com/diafygi/publickeyjs/blob/master/publickey.js" + }, + { + "lib": "tinymce", + "version": "4.5.1", + "url": "http://download.ephox.com/tinymce/community/tinymce_4.5.1.zip", + "dest": "program/js", + "sha1": "e358301ac9fefafcd0ee21643c6aaed2c8b83470", + "license": "LGPL", + "copyright": "Copyright (c) 1999-2015 Ephox Corp. All rights reserved", + "map": { + "tinymce/js/tinymce": "tinymce" + }, + "omit": [ + "tinymce/license.txt", + "tinymce/jquery.tinymce.min.js" + ], + "addlicense": [ + "tinymce/tinymce.min.js" + ] + }, + { + "lib": "tinymce-langs", + "version": "4.5.1", + "url": "https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy", + "dest": "program/js/tinymce" + }, + { + "lib": "openpgp", + "name": "OpenPGP.js", + "version": "1.6.2", + "url": "https://raw.githubusercontent.com/openpgpjs/openpgpjs/v2.3.5/dist/openpgp.min.js", + "dest": "plugins/enigma/openpgp.min.js", + "sha1": "4f54a93a46ffc0d932372ea0923d760849775f79", + "license": "LGPL", + "copyright": "Copyright (c) OpenPGP Development Team", + "source": "https://github.com/openpgpjs/openpgpjs/blob/v2.3.5/dist/openpgp.js" + }, + { + "lib": "codemirror", + "version": "5.21.0", + "url": "http://codemirror.net/codemirror-5.21.0.zip", + "dest": "plugins/managesieve/codemirror", + "sha1": "3b767c2e3acd6796e54ed19ed2ac0755fcf87984", + "license": "MIT", + "map": { + "*/lib": "lib", + "*/addon/selection": "addon/selection", + "*/mode/sieve": "mode/sieve" + } + } + ] +} \ No newline at end of file From 40cd8d3bdd8d360f9eae8d98171011942141dae1 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 30 Dec 2016 16:10:41 +0100 Subject: [PATCH 34/48] Add --force option + update install insructions (#5535) --- INSTALL | 2 +- bin/install-jsdeps.sh | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/INSTALL b/INSTALL index 358509543b3..f037d700c49 100644 --- a/INSTALL +++ b/INSTALL @@ -49,7 +49,7 @@ INSTALLATION composer.json file by moving the items from "suggest" to the "require" section (remove the explanation texts after the version!). - run `php composer.phar install --no-dev` - 2.2. Install Javascript dependencies by executing `bin/jsdeps.sh` script. + 2.2. Install Javascript dependencies by executing `bin/install-jsdeps.sh` script. 3. Make sure that the following directories (and the files within) are writable by the webserver - /temp diff --git a/bin/install-jsdeps.sh b/bin/install-jsdeps.sh index d34fb7f6b15..ebc539d880e 100755 --- a/bin/install-jsdeps.sh +++ b/bin/install-jsdeps.sh @@ -5,7 +5,7 @@ | bin/install-jsdeps.sh | | | | This file is part of the Roundcube Webmail client | - | Copyright (C) 2015, The Roundcube Dev Team | + | Copyright (C) 2016, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -98,7 +98,7 @@ EOL; //////////////// Functions /** - * + * Fetch package file from source */ function fetch_from_source($package, $useCache = true, &$filetype = null) { @@ -107,7 +107,7 @@ function fetch_from_source($package, $useCache = true, &$filetype = null) $filetype = pathinfo($package['url'], PATHINFO_EXTENSION) ?: 'tmp'; $cache_file = $CACHEDIR . '/' . $package['lib'] . '-' . $package['version'] . '.' . $filetype; - if (!is_readable($cache_file)) { + if (!is_readable($cache_file) || !$useCache) { echo "Fetching $package[url]\n"; exec(sprintf('%s -s %s -o %s', $CURL, escapeshellarg($package['url']), $cache_file), $out, $retval); if ($retval !== 0) { @@ -129,7 +129,7 @@ function fetch_from_source($package, $useCache = true, &$filetype = null) } /** - * + * Create a destination javascript file with copyright and license header */ function compose_destfile($package, $srcfile) { @@ -168,7 +168,7 @@ function compose_destfile($package, $srcfile) } /** - * + * Extract a Zip archive into the destination specified by the package config */ function extrac_zipfile($package, $srcfile) { @@ -252,7 +252,8 @@ function extrac_zipfile($package, $srcfile) //////////////// Execution -$WHAT = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : null; +$args = rcube_utils::get_opt(array('f' => 'force')) + array('force' => false); +$WHAT = $args[0]; foreach ($SOURCES['dependencies'] as $package) { if (!isset($package['name'])) { @@ -265,7 +266,7 @@ foreach ($SOURCES['dependencies'] as $package) { echo "Installing $package[name]...\n"; - $srcfile = fetch_from_source($package, true, $filetype); + $srcfile = fetch_from_source($package, !$args['force'], $filetype); if ($filetype === 'zip') { extrac_zipfile($package, $srcfile); From cb09ff0ffcb2a06c9dd493b5441c03483da8c84a Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 30 Dec 2016 19:41:50 +0100 Subject: [PATCH 35/48] Make it working with wget when curl is not installed, mark --force argument as boolean --- bin/install-jsdeps.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/bin/install-jsdeps.sh b/bin/install-jsdeps.sh index ebc539d880e..c92c94a2fb4 100755 --- a/bin/install-jsdeps.sh +++ b/bin/install-jsdeps.sh @@ -102,14 +102,19 @@ EOL; */ function fetch_from_source($package, $useCache = true, &$filetype = null) { - global $CURL, $FILEINFO, $CACHEDIR; + global $CURL, $WGET, $FILEINFO, $CACHEDIR; $filetype = pathinfo($package['url'], PATHINFO_EXTENSION) ?: 'tmp'; $cache_file = $CACHEDIR . '/' . $package['lib'] . '-' . $package['version'] . '.' . $filetype; if (!is_readable($cache_file) || !$useCache) { echo "Fetching $package[url]\n"; - exec(sprintf('%s -s %s -o %s', $CURL, escapeshellarg($package['url']), $cache_file), $out, $retval); + + if ($CURL) + exec(sprintf('%s -s %s -o %s', $CURL, escapeshellarg($package['url']), $cache_file), $out, $retval); + else + exec(sprintf('%s -q %s -O %s', $WGET, escapeshellarg($package['url']), $cache_file), $out, $retval); + if ($retval !== 0) { die("ERROR: Failed to download source file from " . $package['url'] . "\n"); } @@ -252,7 +257,7 @@ function extrac_zipfile($package, $srcfile) //////////////// Execution -$args = rcube_utils::get_opt(array('f' => 'force')) + array('force' => false); +$args = rcube_utils::get_opt(array('f' => 'force:bool')) + array('force' => false); $WHAT = $args[0]; foreach ($SOURCES['dependencies'] as $package) { From cefe72dcd2c707b33464f8cfca4c0179fa3b84ca Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 30 Dec 2016 19:42:41 +0100 Subject: [PATCH 36/48] Fix required OpenPGP version --- jsdeps.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jsdeps.json b/jsdeps.json index cf091c5f5cd..87f6261c70e 100644 --- a/jsdeps.json +++ b/jsdeps.json @@ -62,12 +62,12 @@ "lib": "openpgp", "name": "OpenPGP.js", "version": "1.6.2", - "url": "https://raw.githubusercontent.com/openpgpjs/openpgpjs/v2.3.5/dist/openpgp.min.js", + "url": "https://raw.githubusercontent.com/openpgpjs/openpgpjs/v1.6.2/dist/openpgp.min.js", "dest": "plugins/enigma/openpgp.min.js", - "sha1": "4f54a93a46ffc0d932372ea0923d760849775f79", + "sha1": "de75af6883019f490f69211e506377c84f49a85b", "license": "LGPL", "copyright": "Copyright (c) OpenPGP Development Team", - "source": "https://github.com/openpgpjs/openpgpjs/blob/v2.3.5/dist/openpgp.js" + "source": "https://github.com/openpgpjs/openpgpjs/blob/v1.6.2/dist/openpgp.js" }, { "lib": "codemirror", From c761f5b6e3ebb5a231c197bafe268c867f78091a Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 30 Dec 2016 19:46:17 +0100 Subject: [PATCH 37/48] Fix function name --- bin/install-jsdeps.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/install-jsdeps.sh b/bin/install-jsdeps.sh index c92c94a2fb4..c4905f6f3ba 100755 --- a/bin/install-jsdeps.sh +++ b/bin/install-jsdeps.sh @@ -175,7 +175,7 @@ function compose_destfile($package, $srcfile) /** * Extract a Zip archive into the destination specified by the package config */ -function extrac_zipfile($package, $srcfile) +function extract_zipfile($package, $srcfile) { global $UNZIP, $CACHEDIR; @@ -274,7 +274,7 @@ foreach ($SOURCES['dependencies'] as $package) { $srcfile = fetch_from_source($package, !$args['force'], $filetype); if ($filetype === 'zip') { - extrac_zipfile($package, $srcfile); + extract_zipfile($package, $srcfile); } else { compose_destfile($package, $srcfile); From 3679cb7c34ec93d5e68c880488e6185c3bd8da55 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 30 Dec 2016 20:25:03 +0100 Subject: [PATCH 38/48] Add --delete argument to install-jsdeps.sh --- bin/install-jsdeps.sh | 25 ++++++++++++++++++++++++- jsdeps.json | 1 + 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/bin/install-jsdeps.sh b/bin/install-jsdeps.sh index c4905f6f3ba..35bf5915bd2 100755 --- a/bin/install-jsdeps.sh +++ b/bin/install-jsdeps.sh @@ -254,10 +254,28 @@ function extract_zipfile($package, $srcfile) } } +/** + * Delete the package destination file/dir + */ +function delete_destfile($package) +{ + $destdir = INSTALL_PATH . ($package['rm'] ?: $package['dest']); + + if (file_exists($destdir)) { + if (PHP_OS === 'Windows') { + exec(sprintf("rd /s /q %s", escapeshellarg($destdir))); + } + else { + exec(sprintf("rm -rf %s", escapeshellarg($destdir))); + } + } +} + //////////////// Execution -$args = rcube_utils::get_opt(array('f' => 'force:bool')) + array('force' => false); +$args = rcube_utils::get_opt(array('f' => 'force:bool', 'd' => 'delete:bool')) + + array('force' => false, 'delete' => false); $WHAT = $args[0]; foreach ($SOURCES['dependencies'] as $package) { @@ -269,6 +287,11 @@ foreach ($SOURCES['dependencies'] as $package) { continue; } + if ($args['delete']) { + delete_destfile($package); + continue; + } + echo "Installing $package[name]...\n"; $srcfile = fetch_from_source($package, !$args['force'], $filetype); diff --git a/jsdeps.json b/jsdeps.json index 87f6261c70e..8b6cb0820a5 100644 --- a/jsdeps.json +++ b/jsdeps.json @@ -41,6 +41,7 @@ "sha1": "e358301ac9fefafcd0ee21643c6aaed2c8b83470", "license": "LGPL", "copyright": "Copyright (c) 1999-2015 Ephox Corp. All rights reserved", + "rm": "program/js/tinymce", "map": { "tinymce/js/tinymce": "tinymce" }, From d28a96e8579333d8ef85d97362f41ab9bb45f7e2 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 30 Dec 2016 20:26:01 +0100 Subject: [PATCH 39/48] Remove old jsdeps.sh script --- bin/jsdeps.sh | 297 -------------------------------------------------- 1 file changed, 297 deletions(-) delete mode 100755 bin/jsdeps.sh diff --git a/bin/jsdeps.sh b/bin/jsdeps.sh deleted file mode 100755 index 4d96fa3663d..00000000000 --- a/bin/jsdeps.sh +++ /dev/null @@ -1,297 +0,0 @@ -#!/bin/sh - -# Required programs - -CURL=`which curl` -WGET=`which wget` -SHASUM=`which sha1sum` -UNZIP=`which unzip` - -PWD=`dirname "$0"` -CACHE="$PWD/js_cache" -WHAT="$1" - -# Downloads definition - -JQUERY_VERSION="3.1.1" -JQUERY_URL="https://code.jquery.com/jquery-$JQUERY_VERSION.min.js" -JQUERY_SHA="f647a6d37dc4ca055ced3cf64bbc1f490070acba" -JQUERY_PATH="$PWD/../program/js/jquery.min.js" -JQUERY_CACHE="$CACHE/jquery.min.js" - -JSTZ_VERSION="6c427658686c664da52c6a87cd62ec910baab276" #1.0.6 -JSTZ_URL="https://bitbucket.org/pellepim/jstimezonedetect/raw/$JSTZ_VERSION/dist/jstz.min.js" -JSTZ_SHA="4291cd3b259d2060460c2a6ab99f428d3c0c9537" -JSTZ_PATH="$PWD/../program/js/jstz.min.js" -JSTZ_CACHE="$CACHE/jstz.min.js" - -PKEY_VERSION="0e011cb18907a1adc0313aa92e69cd8858e1ef66" -PKEY_URL="https://raw.githubusercontent.com/diafygi/publickeyjs/$PKEY_VERSION/publickey.js" -PKEY_SHA="d0920e190754e024c4be76ad5bbc7e76b2e37a4d" -PKEY_PATH="$PWD/../program/js/publickey.js" -PKEY_CACHE="$CACHE/publickey.js" - -TINYMCE_VERSION="4.5.1" -TINYMCE_URL="http://download.ephox.com/tinymce/community/tinymce_$TINYMCE_VERSION.zip" -TINYMCE_SHA="e358301ac9fefafcd0ee21643c6aaed2c8b83470" -TINYMCE_PATH="$PWD/../program/js/tinymce" -TINYMCE_CACHE="$CACHE/tinymce" -TINYMCE_LANGS="https://tinymce-services.azurewebsites.net/1/i18n/download?langs=ar,hy,az,eu,be,bs,bg_BG,ca,zh_CN,zh_TW,hr,cs,cs_CZ,da,nl,en_CA,en_GB,eo,et,fo,fi,fr_FR,fr_CH,gd,gl,ka_GE,de,de_AT,el,he_IL,hi_IN,hu_HU,is_IS,id,ga,it,ja,kab,km_KH,ko_KR,ku,ku_IQ,lv,lt,lb,mk_MK,ml_IN,nb_NO,oc,fa,fa_IR,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,es,es_MX,sv_SE,tg,ta,ta_IN,tt,th_TH,tr,tr_TR,ug,uk,uk_UA,vi,vi_VN,cy" - -OPENPGP_VERSION="1.6.2" -OPENPGP_URL="https://github.com/openpgpjs/openpgpjs/archive/v$OPENPGP_VERSION.zip" -OPENPGP_SHA="70662ccd317a3e5221132778ec7bdf46342ab3fb" -OPENPGP_PATH="$PWD/../plugins/enigma/openpgp.min.js" -OPENPGP_CACHE="$CACHE/openpgp.min.js" - -CM_VERSION="5.21.0" -CM_URL="http://codemirror.net/codemirror-$CM_VERSION.zip" -CM_SHA="3b767c2e3acd6796e54ed19ed2ac0755fcf87984" -CM_PATH="$PWD/../plugins/managesieve/codemirror" -CM_CACHE="$CACHE/codemirror" - -################################################################################ - -if [ -z "$SHASUM" ]; then - echo "Sha1sum is required" - exit 1 -fi - -if [ -z "$UNZIP" ]; then - echo "Unzip is required" - exit 1 -fi - -if [ -n "$CURL" ]; then - GET=$CURL - OPT="-o" -elif [ -n "$WGET" ]; then - GET=$WGET - OPT="-nv -O" -else - echo "Curl or wget is required" - exit 1 -fi - -cleanup() { - set -x - rm -rf $JQUERY_PATH - rm -rf $JSTZ_PATH - rm -rf $PKEY_PATH - rm -rf $TINYMCE_PATH - rm -rf $OPENPGP_PATH - rm -rf $CM_PATH -} - -from_cache() { - set -x - cp -rf $JQUERY_CACHE $JQUERY_PATH - cp -rf $JSTZ_CACHE $JSTZ_PATH - cp -rf $PKEY_CACHE $PKEY_PATH - cp -rf $OPENPGP_CACHE $OPENPGP_PATH - cp -rf $TINYMCE_CACHE $TINYMCE_PATH - cp -rf $CM_CACHE $CM_PATH -} - -# Install deps from the cache directory -if [ "$WHAT" = "from-cache" ]; then - if [ ! -d $CACHE ]; then - echo "Cache directory ($CACHE) not found." - exit 1 - fi - - cleanup - from_cache - exit -fi - -# remove all javascript files from defined locations -if [ "$WHAT" = "cleanup" ]; then - cleanup - exit -fi - -if [ ! -d $CACHE ]; then - mkdir $CACHE -fi - -if [ "$WHAT" = "jquery" ] || [ "$WHAT" = "" ]; then - echo "Downloading jQuery..." - - $GET $JQUERY_URL $OPT $JQUERY_PATH - if [ ! -f $JQUERY_PATH ]; then - echo "ERROR: Failed to get $JQUERY_URL" - exit 1 - fi - - SUM=`$SHASUM $JQUERY_PATH | cut -d " " -f 1` - if [ "$SUM" != "$JQUERY_SHA" ]; then - echo "ERROR: Incorrect SHA of $JQUERY_PATH. Expected: $JQUERY_SHA, got: $SUM" - exit 1 - fi - - echo "Installing jQuery..." - echo "Done" - - rm -f $JQUERY_CACHE - cp -f $JQUERY_PATH $JQUERY_CACHE -fi - -if [ "$WHAT" = "jstz" ] || [ "$WHAT" = "" ]; then - echo "Downloading jsTimezoneDetect..." - - $GET $JSTZ_URL $OPT $JSTZ_PATH - if [ ! -f $JSTZ_PATH ]; then - echo "ERROR: Failed to get $JSTZ_URL" - exit 1 - fi - - SUM=`$SHASUM $JSTZ_PATH | cut -d " " -f 1` - if [ "$SUM" != "$JSTZ_SHA" ]; then - echo "ERROR: Incorrect SHA of $JSTZ_PATH. Expected: $JSTZ_SHA, got: $SUM" - exit 1 - fi - - echo "Installing jsTimezoneDetect..." - echo "Done" - - rm -f $JSTZ_CACHE - cp -f $JSTZ_PATH $JSTZ_CACHE -fi - -if [ "$WHAT" = "publickey" ] || [ "$WHAT" = "" ]; then - echo "Downloading publickey.js..." - - $GET $PKEY_URL $OPT $PKEY_PATH - if [ ! -f $PKEY_PATH ]; then - echo "ERROR: Failed to get $PKEY_URL" - exit 1 - fi - - SUM=`$SHASUM $PKEY_PATH | cut -d " " -f 1` - if [ "$SUM" != "$PKEY_SHA" ]; then - echo "ERROR: Incorrect SHA of $PKEY_PATH. Expected: $PKEY_SHA, got: $SUM" - exit 1 - fi - - echo "Installing publickey.js..." - echo "Done" - - rm -f $PKEY_CACHE - cp -f $PKEY_PATH $PKEY_CACHE -fi - -if [ "$WHAT" = "tinymce" ] || [ "$WHAT" = "" ]; then - echo "Downloading TinyMCE..." - - $GET $TINYMCE_URL $OPT "$TINYMCE_PATH.zip" - if [ ! -f "$TINYMCE_PATH.zip" ]; then - echo "ERROR: Failed to get $TINYMCE_URL" - exit 1 - fi - - SUM=`$SHASUM "$TINYMCE_PATH.zip" | cut -d " " -f 1` - if [ "$SUM" != "$TINYMCE_SHA" ]; then - echo "ERROR: Incorrect SHA of $TINYMCE_PATH.zip. Expected: $TINYMCE_SHA, got: $SUM" - exit 1 - fi - - echo "Installing TinyMCE..." - - $UNZIP -q "$TINYMCE_PATH.zip" -d "$TINYMCE_PATH-$TINYMCE_VERSION" - - if [ -d "$TINYMCE_PATH" ]; then - rm -drf "$TINYMCE_PATH" - fi - - mkdir "$TINYMCE_PATH" - mv -f "$TINYMCE_PATH-$TINYMCE_VERSION/tinymce/js/tinymce" "$TINYMCE_PATH/../" - # cleanup - rm -f "$TINYMCE_PATH/license.txt" - rm -f "$TINYMCE_PATH/jquery.tinymce.min.js" - rm -rf "$TINYMCE_PATH-$TINYMCE_VERSION" - rm -f "$TINYMCE_PATH.zip" - - echo "Done" - - echo "Downloading TinyMCE localization..." - - $GET $TINYMCE_LANGS $OPT "$TINYMCE_PATH.zip" - - echo "Installing TinyMCE localization..." - - $UNZIP -q "$TINYMCE_PATH.zip" -d "$TINYMCE_PATH" - # cleanup - rm -f "$TINYMCE_PATH.zip" - - echo "Done" - - rm -rf $TINYMCE_CACHE - cp -rf $TINYMCE_PATH $TINYMCE_CACHE -fi - -if [ "$WHAT" = "openpgp" ] || [ "$WHAT" = "" ]; then - echo "Downloading OpenPGP.js..." - - $GET $OPENPGP_URL $OPT "$OPENPGP_PATH.zip" - if [ ! -f "$OPENPGP_PATH.zip" ]; then - echo "ERROR: Failed to get $OPENPGP_URL" - exit 1 - fi - - SUM=`$SHASUM "$OPENPGP_PATH.zip" | cut -d " " -f 1` - if [ "$SUM" != "$OPENPGP_SHA" ]; then - echo "ERROR: Incorrect SHA of $OPENPGP_PATH.zip. Expected: $OPENPGP_SHA, got: $SUM" - exit 1 - fi - - echo "Installing OpenPGP.js..." - - $UNZIP -pq "$OPENPGP_PATH.zip" "openpgpjs-$OPENPGP_VERSION/dist/openpgp.min.js" > $OPENPGP_PATH - # cleanup - rm -f "$OPENPGP_PATH.zip" - - echo "Done" - - rm -f $OPENPGP_CACHE - cp -f $OPENPGP_PATH $OPENPGP_CACHE -fi - -if [ "$WHAT" = "codemirror" ] || [ "$WHAT" = "" ]; then - echo "Downloading CodeMirror..." - - $GET $CM_URL $OPT "$CM_PATH.zip" - if [ ! -f "$CM_PATH.zip" ]; then - echo "ERROR: Failed to get $CM_URL" - exit 1 - fi - - SUM=`$SHASUM "$CM_PATH.zip" | cut -d " " -f 1` - if [ "$SUM" != "$CM_SHA" ]; then - echo "ERROR: Incorrect SHA of $CM_PATH.zip. Expected: $CM_SHA, got: $SUM" - exit 1 - fi - - echo "Installing CodeMirror..." - - DIR=`dirname "$CM_PATH"` - - # extract only files we use - $UNZIP -q "$CM_PATH" -d "$DIR" "codemirror-$CM_VERSION/lib/codemirror.css" - $UNZIP -q "$CM_PATH" -d "$DIR" "codemirror-$CM_VERSION/lib/codemirror.js" - $UNZIP -q "$CM_PATH" -d "$DIR" "codemirror-$CM_VERSION/addon/selection/active-line.js" - $UNZIP -q "$CM_PATH" -d "$DIR" "codemirror-$CM_VERSION/mode/sieve/sieve.js" - - if [ -d "$CM_PATH" ]; then - rm -drf "$CM_PATH" - fi - - mv -f "$DIR/codemirror-$CM_VERSION" "$CM_PATH" - #cleanup - rm -f "$CM_PATH.zip" - - echo "Done" - - rm -rf $CM_CACHE - cp -rf $CM_PATH $CM_CACHE -fi From 8086099621c0b6d1430c45ce3c16b825e241a19f Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 3 Jan 2017 13:31:23 +0100 Subject: [PATCH 40/48] Small code improvements in PDF capability checker --- program/js/app.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 8114b08c469..d6de30cf1db 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -9239,10 +9239,15 @@ function rcube_webmail() } window.setTimeout(function() { - $('').css({position: 'absolute', left: '-10000px'}) - .attr({data: ref.assets_path('program/resources/dummy.pdf'), width: 1, height: 1, type: 'application/pdf'}) - .on('load', function() { ref.env.browser_capabilities.pdf = 1; }) - .on('error', function() { ref.env.browser_capabilities.pdf = 0; }) + $('').attr({ + data: ref.assets_path('program/resources/dummy.pdf'), + type: 'application/pdf', + style: 'position: "absolute"; top: -1000px; height: 1px' + }) + .on('load error', function(e) { + ref.env.browser_capabilities.pdf = e.type == 'load' ? 1 : 0; + $(this).remove(); + }) .appendTo($('body')); }, 10); From f78e2a43674722e132df2fa2bcd4765aaa20d003 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Tue, 3 Jan 2017 18:24:34 +0100 Subject: [PATCH 41/48] Add 1.3-beta milestone + update copyright year --- CHANGELOG | 2 ++ index.php | 2 +- program/lib/Roundcube/bootstrap.php | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index def07b2dd69..a679ee2170c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ CHANGELOG Roundcube Webmail =========================== +RELEASE 1.3-beta +---------------- - Nicely handle contact deletion on contact edit (#5522) - vcard_attachments: Add possibility to attach contact vCard to composed message (#4997) - Preserve message internal/received date on import in mbox format (#5559) diff --git a/index.php b/index.php index 12becf27b9a..07ca89d655a 100644 --- a/index.php +++ b/index.php @@ -4,7 +4,7 @@ | Roundcube Webmail IMAP Client | | Version 1.3-git | | | - | Copyright (C) 2005-2016, The Roundcube Dev Team | + | Copyright (C) 2005-2017, The Roundcube Dev Team | | | | This program is free software: you can redistribute it and/or modify | | it under the terms of the GNU General Public License (with exceptions | diff --git a/program/lib/Roundcube/bootstrap.php b/program/lib/Roundcube/bootstrap.php index b5283374aee..9b5b9e084aa 100644 --- a/program/lib/Roundcube/bootstrap.php +++ b/program/lib/Roundcube/bootstrap.php @@ -3,7 +3,7 @@ /** +-----------------------------------------------------------------------+ | This file is part of the Roundcube PHP suite | - | Copyright (C) 2005-2015, The Roundcube Dev Team | + | Copyright (C) 2005-2017, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | From 9d6aa00a44daebe4491c4777ac7f4a542e610195 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 4 Jan 2017 13:03:27 +0100 Subject: [PATCH 42/48] Hide QR-Code button if PHP-GD is not installed Keep it as an optional dependency. --- program/steps/addressbook/show.inc | 3 +++ skins/classic/templates/contact.html | 2 ++ skins/larry/templates/contact.html | 2 ++ 3 files changed, 7 insertions(+) diff --git a/program/steps/addressbook/show.inc b/program/steps/addressbook/show.inc index da8f5bf90c1..0c5a2d61188 100644 --- a/program/steps/addressbook/show.inc +++ b/program/steps/addressbook/show.inc @@ -42,7 +42,10 @@ if ($cid && ($record = ($CONTACT_RECORD ?: $CONTACTS->get_record($cid, true)))) // get address book name (for display) rcmail_set_sourcename($CONTACTS); +// Disable qr-code if php-gd is not installed +$OUTPUT->set_env('qrcode', function_exists('imagecreate')); $OUTPUT->add_label('qrcode'); + $OUTPUT->add_handlers(array( 'contacthead' => 'rcmail_contact_head', 'contactdetails' => 'rcmail_contact_details', diff --git a/skins/classic/templates/contact.html b/skins/classic/templates/contact.html index 2022a2ce04b..3835222e122 100644 --- a/skins/classic/templates/contact.html +++ b/skins/classic/templates/contact.html @@ -21,7 +21,9 @@

    + +

    diff --git a/skins/larry/templates/contact.html b/skins/larry/templates/contact.html index de42e1a9de4..252d83d458a 100644 --- a/skins/larry/templates/contact.html +++ b/skins/larry/templates/contact.html @@ -25,7 +25,9 @@

    + +
    From f65f4bbca859aeb1b10a342c2af3d9094427974c Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 7 Jan 2017 09:43:04 +0100 Subject: [PATCH 43/48] Fix pdf object visibility --- program/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/program/js/app.js b/program/js/app.js index d6de30cf1db..a486a0422da 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -9242,7 +9242,7 @@ function rcube_webmail() $('').attr({ data: ref.assets_path('program/resources/dummy.pdf'), type: 'application/pdf', - style: 'position: "absolute"; top: -1000px; height: 1px' + style: 'position: "absolute"; top: -1000px; height: 1px; width: 1px' }) .on('load error', function(e) { ref.env.browser_capabilities.pdf = e.type == 'load' ? 1 : 0; From 7340360e798ac984214932d5fcd464f26392fa03 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 7 Jan 2017 09:59:42 +0100 Subject: [PATCH 44/48] Fix bug where image data URIs in css style were treated as evil/remote in mail preview (#5580) --- CHANGELOG | 2 ++ program/lib/Roundcube/rcube_utils.php | 2 +- program/steps/mail/func.inc | 2 +- tests/Framework/Utils.php | 4 ++++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a679ee2170c..3c278211334 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ CHANGELOG Roundcube Webmail =========================== +- Fix bug where image data URIs in css style were treated as evil/remote in mail preview (#5580) + RELEASE 1.3-beta ---------------- - Nicely handle contact deletion on contact edit (#5522) diff --git a/program/lib/Roundcube/rcube_utils.php b/program/lib/Roundcube/rcube_utils.php index d52c62115d7..d7d7c963e45 100644 --- a/program/lib/Roundcube/rcube_utils.php +++ b/program/lib/Roundcube/rcube_utils.php @@ -391,7 +391,7 @@ public static function mod_css_styles($source, $container_id, $allow_remote = fa // ignore the whole block if evil styles are detected $source = self::xss_entity_decode($source); $stripped = preg_replace('/[^a-z\(:;]/i', '', $source); - $evilexpr = 'expression|behavior|javascript:|import[^a]' . (!$allow_remote ? '|url\(' : ''); + $evilexpr = 'expression|behavior|javascript:|import[^a]' . (!$allow_remote ? '|url\((?!data:image)' : ''); if (preg_match("/$evilexpr/i", $stripped)) { return '/* evil! */'; diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 2c6a8385497..4da5e5796b4 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -1006,7 +1006,7 @@ function rcmail_washtml_callback($tagname, $attrib, $content, $washtml) // now check for evil strings like expression, behavior or url() if (!preg_match('/expression|behavior|javascript:|import[^a]/i', $stripped)) { - if (!$washtml->get_config('allow_remote') && stripos($stripped, 'url(')) { + if (!$washtml->get_config('allow_remote') && preg_match('/url\((?!data:image)/', $stripped)) { $washtml->extlinks = true; } else { diff --git a/tests/Framework/Utils.php b/tests/Framework/Utils.php index 5f70544d467..ba04e15454d 100644 --- a/tests/Framework/Utils.php +++ b/tests/Framework/Utils.php @@ -214,6 +214,10 @@ function test_mod_css_styles_xss() $mod = rcube_utils::mod_css_styles(".test { position:/**/fixed; }", 'rcmbody'); $this->assertEquals("#rcmbody .test { position: absolute; }", $mod, "Replace position:fixed with position:absolute (2)"); + + // allow data URIs with images (#5580) + $mod = rcube_utils::mod_css_styles("body { background-image: url(data:image/png;base64,123); }", 'rcmbody'); + $this->assertEquals("#rcmbody { background-image: url(data:image/png;base64,123); }", $mod, "Data URIs in url() allowed"); } /** From 6eb8f89b4de9a2dc8caa10f609437b77747d8e17 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 7 Jan 2017 10:31:08 +0100 Subject: [PATCH 45/48] Remove redundant code --- program/js/app.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index a486a0422da..147f8cbb1e2 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -607,10 +607,6 @@ function rcube_webmail() $("input,select,textarea", this.gui_objects.editform) .not(':hidden').not(':disabled').first().select().focus(); - // unset contentframe variable if preview_pane is enabled - if (this.env.contentframe && !$('#' + this.env.contentframe).is(':visible')) - this.env.contentframe = null; - // prevent from form submit with Enter key in file input fields if (bw.ie) $('input[type=file]').keydown(function(e) { if (e.keyCode == '13') e.preventDefault(); }); @@ -2444,7 +2440,7 @@ function rcube_webmail() { var frame, win, name = this.env.contentframe; - if (name && (frame = this.get_frame_element(name))) { + if (frame = this.get_frame_element(name)) { if (!show && (win = this.get_frame_window(name))) { if (win.location.href.indexOf(this.env.blankpage) < 0) { if (win.stop) @@ -6782,7 +6778,7 @@ function rcube_webmail() if (this.responses_list) { this.responses_list.remove_row(key); - if (this.env.contentframe && (frame = this.get_frame_window(this.env.contentframe))) { + if (frame = this.get_frame_window(this.env.contentframe)) { frame.location.href = this.env.blankpage; } } @@ -6797,7 +6793,7 @@ function rcube_webmail() if (list && id) { list.remove_row(rid); - if (this.env.contentframe && (frame = this.get_frame_window(this.env.contentframe))) { + if (frame = this.get_frame_window(this.env.contentframe)) { frame.location.href = this.env.blankpage; } } From 3bb12e75f763e9eca5e07c7022fa1f74dde0b532 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 7 Jan 2017 10:51:21 +0100 Subject: [PATCH 46/48] Add class attribute for preferences sections list --- program/steps/settings/func.inc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index f2c3d00384b..f6c6f06c096 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -170,6 +170,8 @@ function rcmail_user_prefs($current = null) $no_override = array_flip((array)$RCMAIL->config->get('dont_override')); foreach ($sections as $idx => $sect) { + $sections[$idx]['class'] = $idx; + if ($current && $sect['id'] != $current) { continue; } From cb58d37bbc8ac2d85336d935961d74221d545a60 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 7 Jan 2017 19:29:30 +0100 Subject: [PATCH 47/48] Avoid closure compiler suspicious code warning (#5584) --- program/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/program/js/app.js b/program/js/app.js index 147f8cbb1e2..19af482d1bb 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -361,7 +361,7 @@ function rcube_webmail() if (bw.mz && this.env.mimetype == 'application/pdf') { n = 0; // there will be two onload events, first for the preload page $(this.gui_objects.messagepartframe).on('load', function() { - if (n++) try { this.contentWindow.document; ref.enable_command('print', true); } + if (n++) try { if (this.contentWindow.document) ref.enable_command('print', true); } catch (e) {/* ignore */} }); } From e08f22ef28986a9bd8eb0eba4e15c5b5f3c51471 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 7 Jan 2017 20:00:18 +0100 Subject: [PATCH 48/48] Fix bug where external content in src attribute of input/video tags was not secured (#5583) --- CHANGELOG | 1 + program/lib/Roundcube/rcube_washtml.php | 2 +- tests/Framework/Washtml.php | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 3c278211334..1c1c2c13a4f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ CHANGELOG Roundcube Webmail =========================== - Fix bug where image data URIs in css style were treated as evil/remote in mail preview (#5580) +- Fix bug where external content in src attribute of input/video tags was not secured (#5583) RELEASE 1.3-beta ---------------- diff --git a/program/lib/Roundcube/rcube_washtml.php b/program/lib/Roundcube/rcube_washtml.php index 92c5132ca2c..b45a7474a89 100644 --- a/program/lib/Roundcube/rcube_washtml.php +++ b/program/lib/Roundcube/rcube_washtml.php @@ -408,7 +408,7 @@ private function is_image_attribute($tag, $attr) return $attr == 'background' || $attr == 'color-profile' // SVG || ($attr == 'poster' && $tag == 'video') - || ($attr == 'src' && preg_match('/^(img|source)$/i', $tag)) + || ($attr == 'src' && preg_match('/^(img|source|input|video|audio)$/i', $tag)) || ($tag == 'image' && $attr == 'href'); // SVG } diff --git a/tests/Framework/Washtml.php b/tests/Framework/Washtml.php index 46d6bdb27b1..df831910210 100644 --- a/tests/Framework/Washtml.php +++ b/tests/Framework/Washtml.php @@ -336,4 +336,26 @@ function test_wash_mathml() $this->assertSame(trim($washed), trim($exp), "MathML content"); } + + /** + * Test external links in src of input/video elements (#5583) + */ + function test_src_wash() + { + $html = ""; + + $washer = new rcube_washtml; + $washed = $washer->wash($html); + + $this->assertTrue($washer->extlinks); + $this->assertNotContains('TRACKING', $washed, "Src attribute of tag (#5583)"); + + $html = "
    "+o+"