From 75ebbc6bea5008c5580a67d2514e9ab2621141cb Mon Sep 17 00:00:00 2001 From: Huang ShengYu Date: Wed, 12 Mar 2014 14:15:11 +0800 Subject: [PATCH] update zkckeditor from 4.1.1.0 to 4.3.3.0-FL --- .gitignore | 8 +- ckez/pom.xml | 2 +- ckez/src/archive/metainfo/zk/config.xml | 2 +- ckez/src/archive/metainfo/zk/lang-addon.xml | 2 +- ckez/src/archive/web/js/ckez/CKeditor.js | 11 +- .../web/js/ckez/ext/CKeditor/LICENSE.md | 2 +- .../js/ckez/ext/CKeditor/adapters/jquery.js | 284 +- .../web/js/ckez/ext/CKeditor/ckeditor.js | 49055 +--------------- .../web/js/ckez/ext/CKeditor/config.js | 22 +- .../web/js/ckez/ext/CKeditor/contents.css | 62 +- .../ext/CKeditor/lang/_translationstatus.txt | 63 - .../web/js/ckez/ext/CKeditor/lang/af.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/ar.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/bg.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/bn.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/bs.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/ca.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/cs.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/cy.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/da.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/de.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/el.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/en-au.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/en-ca.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/en-gb.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/en.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/eo.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/es.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/et.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/eu.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/fa.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/fi.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/fo.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/fr-ca.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/fr.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/gl.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/gu.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/he.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/hi.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/hr.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/hu.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/id.js | 5 + .../web/js/ckez/ext/CKeditor/lang/is.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/it.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/ja.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/ka.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/km.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/ko.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/ku.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/lt.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/lv.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/mk.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/mn.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/ms.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/nb.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/nl.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/no.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/pl.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/pt-br.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/pt.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/ro.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/ru.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/si.js | 5 + .../web/js/ckez/ext/CKeditor/lang/sk.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/sl.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/sq.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/sr-latn.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/sr.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/sv.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/th.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/tr.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/ug.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/uk.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/vi.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/zh-cn.js | 931 +- .../web/js/ckez/ext/CKeditor/lang/zh.js | 931 +- .../plugins/a11yhelp/dialogs/a11yhelp.js | 227 +- .../dialogs/lang/_translationstatus.txt | 4 +- .../plugins/a11yhelp/dialogs/lang/ar.js | 96 +- .../plugins/a11yhelp/dialogs/lang/bg.js | 96 +- .../plugins/a11yhelp/dialogs/lang/ca.js | 98 +- .../plugins/a11yhelp/dialogs/lang/cs.js | 98 +- .../plugins/a11yhelp/dialogs/lang/cy.js | 96 +- .../plugins/a11yhelp/dialogs/lang/da.js | 96 +- .../plugins/a11yhelp/dialogs/lang/de.js | 97 +- .../plugins/a11yhelp/dialogs/lang/el.js | 98 +- .../plugins/a11yhelp/dialogs/lang/en-gb.js | 11 + .../plugins/a11yhelp/dialogs/lang/en.js | 117 +- .../plugins/a11yhelp/dialogs/lang/eo.js | 97 +- .../plugins/a11yhelp/dialogs/lang/es.js | 97 +- .../plugins/a11yhelp/dialogs/lang/et.js | 96 +- .../plugins/a11yhelp/dialogs/lang/fa.js | 96 +- .../plugins/a11yhelp/dialogs/lang/fi.js | 97 +- .../plugins/a11yhelp/dialogs/lang/fr-ca.js | 97 +- .../plugins/a11yhelp/dialogs/lang/fr.js | 98 +- .../plugins/a11yhelp/dialogs/lang/gl.js | 12 + .../plugins/a11yhelp/dialogs/lang/gu.js | 96 +- .../plugins/a11yhelp/dialogs/lang/he.js | 96 +- .../plugins/a11yhelp/dialogs/lang/hi.js | 96 +- .../plugins/a11yhelp/dialogs/lang/hr.js | 96 +- .../plugins/a11yhelp/dialogs/lang/hu.js | 98 +- .../plugins/a11yhelp/dialogs/lang/id.js | 11 + .../plugins/a11yhelp/dialogs/lang/it.js | 97 +- .../plugins/a11yhelp/dialogs/lang/ja.js | 94 +- .../plugins/a11yhelp/dialogs/lang/km.js | 96 +- .../plugins/a11yhelp/dialogs/lang/ko.js | 10 + .../plugins/a11yhelp/dialogs/lang/ku.js | 97 +- .../plugins/a11yhelp/dialogs/lang/lt.js | 96 +- .../plugins/a11yhelp/dialogs/lang/lv.js | 98 +- .../plugins/a11yhelp/dialogs/lang/mk.js | 96 +- .../plugins/a11yhelp/dialogs/lang/mn.js | 96 +- .../plugins/a11yhelp/dialogs/lang/nb.js | 96 +- .../plugins/a11yhelp/dialogs/lang/nl.js | 97 +- .../plugins/a11yhelp/dialogs/lang/no.js | 96 +- .../plugins/a11yhelp/dialogs/lang/pl.js | 98 +- .../plugins/a11yhelp/dialogs/lang/pt-br.js | 96 +- .../plugins/a11yhelp/dialogs/lang/pt.js | 97 +- .../plugins/a11yhelp/dialogs/lang/ro.js | 97 +- .../plugins/a11yhelp/dialogs/lang/ru.js | 96 +- .../plugins/a11yhelp/dialogs/lang/si.js | 10 + .../plugins/a11yhelp/dialogs/lang/sk.js | 97 +- .../plugins/a11yhelp/dialogs/lang/sl.js | 97 +- .../plugins/a11yhelp/dialogs/lang/sq.js | 96 +- .../plugins/a11yhelp/dialogs/lang/sr-latn.js | 11 + .../plugins/a11yhelp/dialogs/lang/sr.js | 11 + .../plugins/a11yhelp/dialogs/lang/sv.js | 97 +- .../plugins/a11yhelp/dialogs/lang/th.js | 96 +- .../plugins/a11yhelp/dialogs/lang/tr.js | 97 +- .../plugins/a11yhelp/dialogs/lang/ug.js | 96 +- .../plugins/a11yhelp/dialogs/lang/uk.js | 97 +- .../plugins/a11yhelp/dialogs/lang/vi.js | 96 +- .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 94 +- .../plugins/a11yhelp/dialogs/lang/zh.js | 10 + .../CKeditor/plugins/about/dialogs/about.js | 80 +- .../about/dialogs/hidpi/logo_ckeditor.png | Bin 0 -> 13339 bytes .../plugins/about/dialogs/logo_ckeditor.png | Bin 2759 -> 6757 bytes .../plugins/clipboard/dialogs/paste.js | 236 +- .../colordialog/dialogs/colordialog.js | 353 +- .../plugins/dialog/dialogDefinition.js | 1010 +- .../ext/CKeditor/plugins/div/dialogs/div.js | 466 +- .../ext/CKeditor/plugins/find/dialogs/find.js | 809 +- .../CKeditor/plugins/flash/dialogs/flash.js | 692 +- .../CKeditor/plugins/forms/dialogs/button.js | 108 +- .../plugins/forms/dialogs/checkbox.js | 138 +- .../CKeditor/plugins/forms/dialogs/form.js | 159 +- .../plugins/forms/dialogs/hiddenfield.js | 93 +- .../CKeditor/plugins/forms/dialogs/radio.js | 123 +- .../CKeditor/plugins/forms/dialogs/select.js | 523 +- .../plugins/forms/dialogs/textarea.js | 126 +- .../plugins/forms/dialogs/textfield.js | 192 +- .../js/ckez/ext/CKeditor/plugins/icons.png | Bin 16583 -> 20643 bytes .../ckez/ext/CKeditor/plugins/icons_hidpi.png | Bin 0 -> 67753 bytes .../CKeditor/plugins/iframe/dialogs/iframe.js | 228 +- .../CKeditor/plugins/image/dialogs/image.js | 1252 +- .../CKeditor/plugins/link/dialogs/anchor.js | 128 +- .../ext/CKeditor/plugins/link/dialogs/link.js | 1323 +- .../CKeditor/plugins/link/images/anchor.png | Bin 566 -> 763 bytes .../plugins/link/images/hidpi/anchor.png | Bin 0 -> 1597 bytes .../plugins/liststyle/dialogs/liststyle.js | 209 +- .../plugins/magicline/images/hidpi/icon.png | Bin 0 -> 260 bytes .../plugins/pastefromword/filter/default.js | 1242 +- .../CKeditor/plugins/scayt/dialogs/options.js | 493 +- .../CKeditor/plugins/smiley/dialogs/smiley.js | 202 +- .../plugins/smiley/images/angel_smile.gif | Bin 465 -> 1250 bytes .../plugins/smiley/images/angel_smile.png | Bin 0 -> 1294 bytes .../plugins/smiley/images/angry_smile.gif | Bin 443 -> 1221 bytes .../plugins/smiley/images/angry_smile.png | Bin 0 -> 1351 bytes .../plugins/smiley/images/broken_heart.gif | Bin 192 -> 1131 bytes .../plugins/smiley/images/broken_heart.png | Bin 0 -> 1213 bytes .../plugins/smiley/images/confused_smile.gif | Bin 464 -> 1210 bytes .../plugins/smiley/images/confused_smile.png | Bin 0 -> 1175 bytes .../plugins/smiley/images/cry_smile.gif | Bin 468 -> 795 bytes .../plugins/smiley/images/cry_smile.png | Bin 0 -> 1315 bytes .../plugins/smiley/images/devil_smile.gif | Bin 436 -> 1239 bytes .../plugins/smiley/images/devil_smile.png | Bin 0 -> 1299 bytes .../smiley/images/embaressed_smile.gif | Bin 442 -> 790 bytes .../smiley/images/embarrassed_smile.gif | Bin 442 -> 790 bytes .../smiley/images/embarrassed_smile.png | Bin 0 -> 1222 bytes .../plugins/smiley/images/envelope.gif | Bin 426 -> 712 bytes .../plugins/smiley/images/envelope.png | Bin 0 -> 1049 bytes .../CKeditor/plugins/smiley/images/heart.gif | Bin 183 -> 1091 bytes .../CKeditor/plugins/smiley/images/heart.png | Bin 0 -> 1073 bytes .../CKeditor/plugins/smiley/images/kiss.gif | Bin 241 -> 1082 bytes .../CKeditor/plugins/smiley/images/kiss.png | Bin 0 -> 1077 bytes .../plugins/smiley/images/lightbulb.gif | Bin 368 -> 1062 bytes .../plugins/smiley/images/lightbulb.png | Bin 0 -> 993 bytes .../plugins/smiley/images/omg_smile.gif | Bin 451 -> 1207 bytes .../plugins/smiley/images/omg_smile.png | Bin 0 -> 1196 bytes .../plugins/smiley/images/regular_smile.gif | Bin 450 -> 1216 bytes .../plugins/smiley/images/regular_smile.png | Bin 0 -> 1158 bytes .../plugins/smiley/images/sad_smile.gif | Bin 460 -> 1199 bytes .../plugins/smiley/images/sad_smile.png | Bin 0 -> 1189 bytes .../plugins/smiley/images/shades_smile.gif | Bin 449 -> 1234 bytes .../plugins/smiley/images/shades_smile.png | Bin 0 -> 1353 bytes .../plugins/smiley/images/teeth_smile.gif | Bin 442 -> 1210 bytes .../plugins/smiley/images/teeth_smile.png | Bin 0 -> 1257 bytes .../plugins/smiley/images/thumbs_down.gif | Bin 408 -> 1117 bytes .../plugins/smiley/images/thumbs_down.png | Bin 0 -> 1059 bytes .../plugins/smiley/images/thumbs_up.gif | Bin 396 -> 1112 bytes .../plugins/smiley/images/thumbs_up.png | Bin 0 -> 1033 bytes .../plugins/smiley/images/tongue_smile.gif | Bin 446 -> 1216 bytes .../plugins/smiley/images/tongue_smile.png | Bin 0 -> 1206 bytes .../plugins/smiley/images/tounge_smile.gif | Bin 446 -> 1216 bytes .../images/whatchutalkingabout_smile.gif | Bin 452 -> 1190 bytes .../images/whatchutalkingabout_smile.png | Bin 0 -> 1113 bytes .../plugins/smiley/images/wink_smile.gif | Bin 458 -> 1214 bytes .../plugins/smiley/images/wink_smile.png | Bin 0 -> 1188 bytes .../dialogs/lang/_translationstatus.txt | 4 +- .../plugins/specialchar/dialogs/lang/ar.js | 13 + .../plugins/specialchar/dialogs/lang/bg.js | 13 + .../plugins/specialchar/dialogs/lang/ca.js | 139 +- .../plugins/specialchar/dialogs/lang/cs.js | 138 +- .../plugins/specialchar/dialogs/lang/cy.js | 139 +- .../plugins/specialchar/dialogs/lang/de.js | 138 +- .../plugins/specialchar/dialogs/lang/el.js | 138 +- .../plugins/specialchar/dialogs/lang/en-gb.js | 13 + .../plugins/specialchar/dialogs/lang/en.js | 138 +- .../plugins/specialchar/dialogs/lang/eo.js | 137 +- .../plugins/specialchar/dialogs/lang/es.js | 138 +- .../plugins/specialchar/dialogs/lang/et.js | 138 +- .../plugins/specialchar/dialogs/lang/fa.js | 137 +- .../plugins/specialchar/dialogs/lang/fi.js | 138 +- .../plugins/specialchar/dialogs/lang/fr-ca.js | 135 +- .../plugins/specialchar/dialogs/lang/fr.js | 136 +- .../plugins/specialchar/dialogs/lang/gl.js | 13 + .../plugins/specialchar/dialogs/lang/he.js | 137 +- .../plugins/specialchar/dialogs/lang/hr.js | 138 +- .../plugins/specialchar/dialogs/lang/hu.js | 12 + .../plugins/specialchar/dialogs/lang/id.js | 13 + .../plugins/specialchar/dialogs/lang/it.js | 139 +- .../plugins/specialchar/dialogs/lang/ja.js | 9 + .../plugins/specialchar/dialogs/lang/km.js | 13 + .../plugins/specialchar/dialogs/lang/ku.js | 138 +- .../plugins/specialchar/dialogs/lang/lv.js | 138 +- .../plugins/specialchar/dialogs/lang/nb.js | 136 +- .../plugins/specialchar/dialogs/lang/nl.js | 138 +- .../plugins/specialchar/dialogs/lang/no.js | 136 +- .../plugins/specialchar/dialogs/lang/pl.js | 137 +- .../plugins/specialchar/dialogs/lang/pt-br.js | 136 +- .../plugins/specialchar/dialogs/lang/pt.js | 13 + .../plugins/specialchar/dialogs/lang/ru.js | 13 + .../plugins/specialchar/dialogs/lang/si.js | 13 + .../plugins/specialchar/dialogs/lang/sk.js | 138 +- .../plugins/specialchar/dialogs/lang/sl.js | 12 + .../plugins/specialchar/dialogs/lang/sq.js | 138 +- .../plugins/specialchar/dialogs/lang/sv.js | 136 +- .../plugins/specialchar/dialogs/lang/th.js | 138 +- .../plugins/specialchar/dialogs/lang/tr.js | 137 +- .../plugins/specialchar/dialogs/lang/ug.js | 138 +- .../plugins/specialchar/dialogs/lang/uk.js | 12 + .../plugins/specialchar/dialogs/lang/vi.js | 14 + .../plugins/specialchar/dialogs/lang/zh-cn.js | 134 +- .../plugins/specialchar/dialogs/lang/zh.js | 12 + .../specialchar/dialogs/specialchar.js | 318 +- .../CKeditor/plugins/table/dialogs/table.js | 577 +- .../plugins/tabletools/dialogs/tableCell.js | 435 +- .../plugins/templates/dialogs/templates.css | 4 +- .../plugins/templates/dialogs/templates.js | 213 +- .../plugins/templates/templates/default.js | 95 +- .../CKeditor/plugins/wsc/dialogs/ciframe.html | 17 + .../ext/CKeditor/plugins/wsc/dialogs/tmp.html | 118 + .../ext/CKeditor/plugins/wsc/dialogs/wsc.js | 242 +- .../CKeditor/plugins/wsc/dialogs/wsc_ie.js | 11 + .../ckez/ext/CKeditor/skins/moono/dialog.css | 6 +- .../ext/CKeditor/skins/moono/dialog_ie.css | 6 +- .../ext/CKeditor/skins/moono/dialog_ie7.css | 6 +- .../ext/CKeditor/skins/moono/dialog_ie8.css | 6 +- .../CKeditor/skins/moono/dialog_iequirks.css | 6 +- .../ext/CKeditor/skins/moono/dialog_opera.css | 6 +- .../ckez/ext/CKeditor/skins/moono/editor.css | 6 +- .../ext/CKeditor/skins/moono/editor_gecko.css | 6 +- .../ext/CKeditor/skins/moono/editor_ie.css | 6 +- .../ext/CKeditor/skins/moono/editor_ie7.css | 6 +- .../ext/CKeditor/skins/moono/editor_ie8.css | 6 +- .../CKeditor/skins/moono/editor_iequirks.css | 6 +- .../ckez/ext/CKeditor/skins/moono/icons.png | Bin 16583 -> 20643 bytes .../ext/CKeditor/skins/moono/icons_hidpi.png | Bin 0 -> 67753 bytes .../ext/CKeditor/skins/moono/images/close.png | Bin 389 -> 824 bytes .../skins/moono/images/hidpi/close.png | Bin 0 -> 1792 bytes .../skins/moono/images/hidpi/lock-open.png | Bin 0 -> 1503 bytes .../skins/moono/images/hidpi/lock.png | Bin 0 -> 1616 bytes .../skins/moono/images/hidpi/refresh.png | Bin 0 -> 2320 bytes .../CKeditor/skins/moono/images/lock-open.png | Bin 0 -> 736 bytes .../ext/CKeditor/skins/moono/images/lock.png | Bin 0 -> 728 bytes .../ext/CKeditor/skins/moono/images/mini.png | Bin 818 -> 0 bytes .../CKeditor/skins/moono/images/refresh.png | Bin 0 -> 953 bytes .../ckez/ext/CKeditor/skins/moono/readme.md | 2 +- .../web/js/ckez/ext/CKeditor/styles.js | 8 +- ckez/src/org/zkforge/ckez/Version.java | 2 +- ckez/version | 2 +- test/addon/ckeztest/.classpath | 8 - test/addon/ckeztest/.project | 37 - test/addon/ckeztest/.settings/.jsdtscope | 12 - .../.settings/org.eclipse.jdt.core.prefs | 13 - .../org.eclipse.wst.common.component | 10 - ....eclipse.wst.common.project.facet.core.xml | 7 - ...rg.eclipse.wst.jsdt.ui.superType.container | 1 - .../org.eclipse.wst.jsdt.ui.superType.name | 1 - .../.settings/org.maven.ide.eclipse.prefs | 9 - test/addon/ckeztest/pom.xml | 2 +- zkdoc/ckez-release-note | 8 + 301 files changed, 3131 insertions(+), 126642 deletions(-) delete mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/lang/_translationstatus.txt create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/lang/id.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/lang/si.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/a11yhelp/dialogs/lang/en-gb.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/a11yhelp/dialogs/lang/gl.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/a11yhelp/dialogs/lang/id.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/a11yhelp/dialogs/lang/ko.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/a11yhelp/dialogs/lang/si.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/a11yhelp/dialogs/lang/sr.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/a11yhelp/dialogs/lang/zh.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/icons_hidpi.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/link/images/hidpi/anchor.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/magicline/images/hidpi/icon.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/angel_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/angry_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/broken_heart.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/confused_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/cry_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/devil_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/embarrassed_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/envelope.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/heart.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/kiss.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/lightbulb.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/omg_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/regular_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/sad_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/shades_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/teeth_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/thumbs_down.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/thumbs_up.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/tongue_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/whatchutalkingabout_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/smiley/images/wink_smile.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/ar.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/bg.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/en-gb.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/gl.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/hu.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/id.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/ja.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/km.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/pt.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/ru.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/si.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/sl.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/uk.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/vi.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/specialchar/dialogs/lang/zh.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/tmp.html create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/wsc_ie.js create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/icons_hidpi.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/hidpi/close.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/hidpi/lock-open.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/hidpi/lock.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/hidpi/refresh.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/lock-open.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/lock.png delete mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/mini.png create mode 100644 ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/refresh.png delete mode 100644 test/addon/ckeztest/.classpath delete mode 100644 test/addon/ckeztest/.project delete mode 100644 test/addon/ckeztest/.settings/.jsdtscope delete mode 100644 test/addon/ckeztest/.settings/org.eclipse.jdt.core.prefs delete mode 100644 test/addon/ckeztest/.settings/org.eclipse.wst.common.component delete mode 100644 test/addon/ckeztest/.settings/org.eclipse.wst.common.project.facet.core.xml delete mode 100644 test/addon/ckeztest/.settings/org.eclipse.wst.jsdt.ui.superType.container delete mode 100644 test/addon/ckeztest/.settings/org.eclipse.wst.jsdt.ui.superType.name delete mode 100644 test/addon/ckeztest/.settings/org.maven.ide.eclipse.prefs diff --git a/.gitignore b/.gitignore index 670d34e0..5f9dd702 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,12 @@ codegen *.class javadoc Thumbs.db -ckez/.classpath -ckez/.project +*.classpath +*.project +*.prefs +*.component +*.container +*.name ckez/target/* */.settings/*.prefs */.settings/*.component diff --git a/ckez/pom.xml b/ckez/pom.xml index 2606703f..bf28aeae 100644 --- a/ckez/pom.xml +++ b/ckez/pom.xml @@ -5,7 +5,7 @@ 4.0.0 org.zkoss.zkforge ckez - 4.1.1.0 + 4.3.3.0-FL 5.0.6 diff --git a/ckez/src/archive/metainfo/zk/config.xml b/ckez/src/archive/metainfo/zk/config.xml index a80df43b..eb5d26f2 100644 --- a/ckez/src/archive/metainfo/zk/config.xml +++ b/ckez/src/archive/metainfo/zk/config.xml @@ -19,7 +19,7 @@ Copyright (C) 2012 Potix Corporation. All Rights Reserved. org.zkforge.ckez.Version - 4.1.1.0 + 4.3.3.0-FL 5.0.6 diff --git a/ckez/src/archive/metainfo/zk/lang-addon.xml b/ckez/src/archive/metainfo/zk/lang-addon.xml index 8ce95f14..4ef642b8 100644 --- a/ckez/src/archive/metainfo/zk/lang-addon.xml +++ b/ckez/src/archive/metainfo/zk/lang-addon.xml @@ -20,7 +20,7 @@ Copyright (C) 2009 Potix Corporation. All Rights Reserved. org.zkforge.ckez.Version - 4.1.1.0 + 4.3.3.0-FL 5.0.6 diff --git a/ckez/src/archive/web/js/ckez/CKeditor.js b/ckez/src/archive/web/js/ckez/CKeditor.js index 5d75e9fc..11ee121f 100644 --- a/ckez/src/archive/web/js/ckez/CKeditor.js +++ b/ckez/src/archive/web/js/ckez/CKeditor.js @@ -393,8 +393,15 @@ ckez.CKeditor = zk.$extends(zul.Widget, { if (!zk(wgt).isRealVisible) return; - selection = CKEDITOR.env.ie ? selection.getNative().createRange().text: - selection.getNative().toString(); + + // fix selection for ie11 + if (CKEDITOR.env.ie && CKEDITOR.env.version < 11) { + selection = selection.getNative().createRange().text; + } else if (CKEDITOR.env.ie && CKEDITOR.env.version > 10) { + selection = document.getSelection(); + } else { + selection = selection.getNative().toString(); + } if (selection == '') return; diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/LICENSE.md b/ckez/src/archive/web/js/ckez/ext/CKeditor/LICENSE.md index d447c67b..b6e0b9ca 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/LICENSE.md +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/LICENSE.md @@ -2,7 +2,7 @@ Software License Agreement ========================== CKEditor - The text editor for Internet - http://ckeditor.com -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Licensed under the terms of any of the following licenses at your choice: diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/adapters/jquery.js b/ckez/src/archive/web/js/ckez/ext/CKeditor/adapters/jquery.js index f6527141..3ec908b0 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/adapters/jquery.js +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/adapters/jquery.js @@ -1,274 +1,10 @@ -/* -Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license -*/ - -/** - * @fileOverview jQuery adapter provides easy use of basic CKEditor functions - * and access to internal API. It also integrates some aspects of CKEditor with - * jQuery framework. - * - * Every TEXTAREA, DIV and P elements can be converted to working editor. - * - * Plugin exposes some of editor's event to jQuery event system. All of those are namespaces inside - * ".ckeditor" namespace and can be binded/listened on supported textarea, div and p nodes. - * - * Available jQuery events: - * - instanceReady.ckeditor( editor, rootNode ) - * Triggered when new instance is ready. - * - destroy.ckeditor( editor ) - * Triggered when instance is destroyed. - * - getData.ckeditor( editor, eventData ) - * Triggered when getData event is fired inside editor. It can change returned data using eventData reference. - * - setData.ckeditor( editor ) - * Triggered when getData event is fired inside editor. - * - * @example - * - * - * - */ - -(function() { - /** - * Allows CKEditor to override jQuery.fn.val(), making it possible to use the val() - * function on textareas, as usual, having it synchronized with CKEditor.
- *
- * This configuration option is global and executed during the jQuery Adapter loading. - * It can't be customized across editor instances. - * @type Boolean - * @example - * <script> - * CKEDITOR.config.jqueryOverrideVal = true; - * </script> - * <!-- Important: The JQuery adapter is loaded *after* setting jqueryOverrideVal --> - * <script src="/ckeditor/adapters/jquery.js"></script> - * @example - * // ... then later in the code ... - * - * $( 'textarea' ).ckeditor(); - * // ... - * $( 'textarea' ).val( 'New content' ); - */ - CKEDITOR.config.jqueryOverrideVal = typeof CKEDITOR.config.jqueryOverrideVal == 'undefined' - ? true : CKEDITOR.config.jqueryOverrideVal; - - var jQuery = window.jQuery; - - if ( typeof jQuery == 'undefined' ) - return; - - // jQuery object methods. - jQuery.extend( jQuery.fn, - /** @lends jQuery.fn */ - { - /** - * Return existing CKEditor instance for first matched element. - * Allows to easily use internal API. Doesn't return jQuery object. - * - * Raised exception if editor doesn't exist or isn't ready yet. - * - * @name jQuery.ckeditorGet - * @return CKEDITOR.editor - * @see CKEDITOR.editor - */ - ckeditorGet: function() { - var instance = this.eq( 0 ).data( 'ckeditorInstance' ); - if ( !instance ) - throw "CKEditor not yet initialized, use ckeditor() with callback."; - return instance; - }, - /** - * Triggers creation of CKEditor in all matched elements (reduced to DIV, P and TEXTAREAs). - * Binds callback to instanceReady event of all instances. If editor is already created, than - * callback is fired right away. - * - * Mixed parameter order allowed. - * - * @param callback Function to be run on editor instance. Passed parameters: [ textarea ]. - * Callback is fired in "this" scope being ckeditor instance and having source textarea as first param. - * - * @param config Configuration options for new instance(s) if not already created. - * See URL - * - * @example - * $( 'textarea' ).ckeditor( function( textarea ) { - * $( textarea ).val( this.getData() ) - * } ); - * - * @name jQuery.fn.ckeditor - * @return jQuery.fn - */ - ckeditor: function( callback, config ) { - if ( !CKEDITOR.env.isCompatible ) - return this; - - if ( !jQuery.isFunction( callback ) ) { - var tmp = config; - config = callback; - callback = tmp; - } - config = config || {}; - - this.filter( 'textarea, div, p' ).each( function() { - var $element = jQuery( this ), - editor = $element.data( 'ckeditorInstance' ), - instanceLock = $element.data( '_ckeditorInstanceLock' ), - element = this; - - if ( editor && !instanceLock ) { - if ( callback ) - callback.apply( editor, [ this ] ); - } else if ( !instanceLock ) { - // CREATE NEW INSTANCE - - // Handle config.autoUpdateElement inside this plugin if desired. - if ( config.autoUpdateElement - || ( typeof config.autoUpdateElement == 'undefined' && CKEDITOR.config.autoUpdateElement ) ) { - config.autoUpdateElementJquery = true; - } - - // Always disable config.autoUpdateElement. - config.autoUpdateElement = false; - $element.data( '_ckeditorInstanceLock', true ); - - // Set instance reference in element's data. - editor = CKEDITOR.replace( element, config ); - $element.data( 'ckeditorInstance', editor ); - - // Register callback. - editor.on( 'instanceReady', function( event ) { - var editor = event.editor; - setTimeout( function() { - // Delay bit more if editor is still not ready. - if ( !editor.element ) { - setTimeout( arguments.callee, 100 ); - return; - } - - // Remove this listener. - event.removeListener( 'instanceReady', this.callee ); - - // Forward setData on dataReady. - editor.on( 'dataReady', function() { - $element.trigger( 'setData' + '.ckeditor', [ editor ] ); - }); - - // Forward getData. - editor.on( 'getData', function( event ) { - $element.trigger( 'getData' + '.ckeditor', [ editor, event.data ] ); - }, 999 ); - - // Forward destroy event. - editor.on( 'destroy', function() { - $element.trigger( 'destroy.ckeditor', [ editor ] ); - }); - - // Integrate with form submit. - if ( editor.config.autoUpdateElementJquery && - $element.is( 'textarea' ) && - $element.parents( 'form' ).length ) { - var onSubmit = function() { - $element.ckeditor( function() { - editor.updateElement(); - }); - }; - - // Bind to submit event. - $element.parents( 'form' ).submit( onSubmit ); - - // Bind to form-pre-serialize from jQuery Forms plugin. - $element.parents( 'form' ).bind( 'form-pre-serialize', onSubmit ); - - // Unbind when editor destroyed. - $element.bind( 'destroy.ckeditor', function() { - $element.parents( 'form' ).unbind( 'submit', onSubmit ); - $element.parents( 'form' ).unbind( 'form-pre-serialize', onSubmit ); - }); - } - - // Garbage collect on destroy. - editor.on( 'destroy', function() { - $element.data( 'ckeditorInstance', null ); - }); - - // Remove lock. - $element.data( '_ckeditorInstanceLock', null ); - - // Fire instanceReady event. - $element.trigger( 'instanceReady.ckeditor', [ editor ] ); - - // Run given (first) code. - if ( callback ) - callback.apply( editor, [ element ] ); - }, 0 ); - }, null, null, 9999); - } else { - // Editor is already during creation process, bind our code to the event. - CKEDITOR.on( 'instanceReady', function( event ) { - var editor = event.editor; - setTimeout( function() { - // Delay bit more if editor is still not ready. - if ( !editor.element ) { - setTimeout( arguments.callee, 100 ); - return; - } - - if ( editor.element.$ == element ) { - // Run given code. - if ( callback ) - callback.apply( editor, [ element ] ); - } - }, 0 ); - }, null, null, 9999); - } - }); - return this; - } - }); - - // New val() method for objects. - if ( CKEDITOR.config.jqueryOverrideVal ) { - jQuery.fn.val = CKEDITOR.tools.override( jQuery.fn.val, function( oldValMethod ) { - /** - * CKEditor-aware val() method. - * - * Acts same as original jQuery val(), but for textareas which have CKEditor instances binded to them, method - * returns editor's content. It also works for settings values. - * - * @param oldValMethod - * @name jQuery.fn.val - */ - return function( newValue, forceNative ) { - var isSetter = typeof newValue != 'undefined', - result; - - this.each( function() { - var $this = jQuery( this ), - editor = $this.data( 'ckeditorInstance' ); - - if ( !forceNative && $this.is( 'textarea' ) && editor ) { - if ( isSetter ) - editor.setData( newValue ); - else { - result = editor.getData(); - // break; - return null; - } - } else { - if ( isSetter ) - oldValMethod.call( $this, newValue ); - else { - result = oldValMethod.call( $this ); - // break; - return null; - } - } - - return true; - }); - return isSetter ? this : result; - }; - }); - } -})(); +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(a){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof a&&(a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b= +a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock", +!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit(); +return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee, +100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}}),CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k=this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise()); +return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}})))})(window.jQuery); \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/ckeditor.js b/ckez/src/archive/web/js/ckez/ext/CKeditor/ckeditor.js index 320e56b0..62882500 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/ckeditor.js +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/ckeditor.js @@ -1,48077 +1,980 @@ -/* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license -*/ -(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Contains the first and essential part of the {@link CKEDITOR} - * object definition. - */ - -// #### Compressed Code -// Must be updated on changes in the script as well as updated in the -// ckeditor_source.js and ckeditor_basic_source.js files. - -// window.CKEDITOR||(window.CKEDITOR=function(){var l=Math.floor(900*Math.random())+100,b=window.CKEDITOR_BASEPATH||"";if(!b)for(var g=document.getElementsByTagName("script"),e=0;e tag. - var path = window.CKEDITOR_BASEPATH || ''; - - if ( !path ) { - var scripts = document.getElementsByTagName( 'script' ); - - for ( var i = 0; i < scripts.length; i++ ) { - var match = scripts[ i ].src.match( /(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i ); - - if ( match ) { - path = match[ 1 ]; - break; - } - } - } - - // In IE (only) the script.src string is the raw value entered in the - // HTML source. Other browsers return the full resolved URL instead. - if ( path.indexOf( ':/' ) == -1 ) { - // Absolute path. - if ( path.indexOf( '/' ) === 0 ) - path = location.href.match( /^.*?:\/\/[^\/]*/ )[ 0 ] + path; - // Relative path. - else - path = location.href.match( /^[^\?]*\/(?:)/ )[ 0 ] + path; - } - - if ( !path ) - throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.'; - - return path; - })(), - - /** - * Gets the full URL for CKEditor resources. By default, URLs - * returned by this function contain a querystring parameter ("t") - * set to the {@link CKEDITOR#timestamp} value. - * - * It is possible to provide a custom implementation of this - * function by setting a global variable named `CKEDITOR_GETURL`. - * This global variable must be set **before** the editor script - * loading. If the custom implementation returns nothing (`==null`), the - * default implementation is used. - * - * // e.g. 'http://www.example.com/ckeditor/skins/default/editor.css?t=87dm' - * alert( CKEDITOR.getUrl( 'skins/default/editor.css' ) ); - * - * // e.g. 'http://www.example.com/skins/default/editor.css?t=87dm' - * alert( CKEDITOR.getUrl( '/skins/default/editor.css' ) ); - * - * // e.g. 'http://www.somesite.com/skins/default/editor.css?t=87dm' - * alert( CKEDITOR.getUrl( 'http://www.somesite.com/skins/default/editor.css' ) ); - * - * @param {String} resource The resource whose full URL we want to get. - * It may be a full, absolute, or relative URL. - * @returns {String} The full URL. - */ - getUrl: function( resource ) { - // If this is not a full or absolute path. - if ( resource.indexOf( ':/' ) == -1 && resource.indexOf( '/' ) !== 0 ) - resource = this.basePath + resource; - - // Add the timestamp, except for directories. - if ( this.timestamp && resource.charAt( resource.length - 1 ) != '/' && !( /[&?]t=/ ).test( resource ) ) - resource += ( resource.indexOf( '?' ) >= 0 ? '&' : '?' ) + 't=' + this.timestamp; - - return resource; - }, - - /** - * Specify a function to execute when the DOM is fully loaded. - * - * If called after the DOM has been initialized, the function passed in will - * be executed immediately. - * - * @method - * @todo - */ - domReady: (function() { - // Based on the original jQuery code. - - var callbacks = []; - - function onReady() { - try { - // Cleanup functions for the document ready method - if ( document.addEventListener ) { - document.removeEventListener( 'DOMContentLoaded', onReady, false ); - executeCallbacks(); - } - // Make sure body exists, at least, in case IE gets a little overzealous. - else if ( document.attachEvent && document.readyState === 'complete' ) { - document.detachEvent( 'onreadystatechange', onReady ); - executeCallbacks(); - } - } catch ( er ) {} - } - - function executeCallbacks() { - var i; - while ( ( i = callbacks.shift() ) ) - i(); - } - - return function( fn ) { - callbacks.push( fn ); - - // Catch cases where this is called after the - // browser event has already occurred. - if ( document.readyState === 'complete' ) - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( onReady, 1 ); - - // Run below once on demand only. - if ( callbacks.length != 1 ) - return; - - // For IE>8, Firefox, Opera and Webkit. - if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( 'DOMContentLoaded', onReady, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( 'load', onReady, false ); - - } - // If old IE event model is used - else if ( document.attachEvent ) { - // ensure firing before onload, - // maybe late but safe also for iframes - document.attachEvent( 'onreadystatechange', onReady ); - - // A fallback to window.onload, that will always work - window.attachEvent( 'onload', onReady ); - - // If IE and not a frame - // continually check to see if the document is ready - // use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - var toplevel = false; - - try { - toplevel = !window.frameElement; - } catch ( e ) {} - - if ( document.documentElement.doScroll && toplevel ) { - function scrollCheck() { - try { - document.documentElement.doScroll( 'left' ); - } catch ( e ) { - setTimeout( scrollCheck, 1 ); - return; - } - onReady(); - } - scrollCheck(); - } - } - }; - - })() - }; - - // Make it possible to override the "url" function with a custom - // implementation pointing to a global named CKEDITOR_GETURL. - var newGetUrl = window.CKEDITOR_GETURL; - if ( newGetUrl ) { - var originalGetUrl = CKEDITOR.getUrl; - CKEDITOR.getUrl = function( resource ) { - return newGetUrl.call( CKEDITOR, resource ) || originalGetUrl.call( CKEDITOR, resource ); - }; - } - - return CKEDITOR; - })(); -} - -/** - * Function called upon loading a custom configuration file that can - * modify the editor instance configuration ({@link CKEDITOR.editor#config}). - * It is usually defined inside the custom configuration files that can - * include developer defined settings. - * - * // This is supposed to be placed in the config.js file. - * CKEDITOR.editorConfig = function( config ) { - * // Define changes to default configuration here. For example: - * config.language = 'fr'; - * config.uiColor = '#AADC6E'; - * }; - * - * @method editorConfig - * @param {CKEDITOR.config} config A configuration object containing the - * settings defined for a {@link CKEDITOR.editor} instance up to this - * function call. Note that not all settings may still be available. See - * [Configuration Loading Order](http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Setting_Configurations#Configuration_Loading_Order) - * for details. - */ - -// PACKAGER_RENAME( CKEDITOR ) -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.event} class, which serves as the - * base for classes and objects that require event handling features. - */ - -if ( !CKEDITOR.event ) { - /** - * Creates an event class instance. This constructor is rearely used, being - * the {@link #implementOn} function used in class prototypes directly - * instead. - * - * This is a base class for classes and objects that require event - * handling features. - * - * Do not confuse this class with {@link CKEDITOR.dom.event} which is - * instead used for DOM events. The CKEDITOR.event class implements the - * internal event system used by the CKEditor to fire API related events. - * - * @class - * @constructor Creates an event class instance. - */ - CKEDITOR.event = function() {}; - - /** - * Implements the {@link CKEDITOR.event} features in an object. - * - * var myObject = { message: 'Example' }; - * CKEDITOR.event.implementOn( myObject ); - * - * myObject.on( 'testEvent', function() { - * alert( this.message ); - * } ); - * myObject.fire( 'testEvent' ); // 'Example' - * - * @static - * @param {Object} targetObject The object into which implement the features. - */ - CKEDITOR.event.implementOn = function( targetObject ) { - var eventProto = CKEDITOR.event.prototype; - - for ( var prop in eventProto ) { - if ( targetObject[ prop ] == undefined ) - targetObject[ prop ] = eventProto[ prop ]; - } - }; - - CKEDITOR.event.prototype = (function() { - // Returns the private events object for a given object. - var getPrivate = function( obj ) { - var _ = ( obj.getPrivate && obj.getPrivate() ) || obj._ || ( obj._ = {} ); - return _.events || ( _.events = {} ); - }; - - var eventEntry = function( eventName ) { - this.name = eventName; - this.listeners = []; - }; - - eventEntry.prototype = { - // Get the listener index for a specified function. - // Returns -1 if not found. - getListenerIndex: function( listenerFunction ) { - for ( var i = 0, listeners = this.listeners; i < listeners.length; i++ ) { - if ( listeners[ i ].fn == listenerFunction ) - return i; - } - return -1; - } - }; - - // Retrieve the event entry on the event host (create it if needed). - function getEntry( name ) { - // Get the event entry (create it if needed). - var events = getPrivate( this ); - return events[ name ] || ( events[ name ] = new eventEntry( name ) ); - } - - return { - /** - * Predefine some intrinsic properties on a specific event name. - * - * @param {String} name The event name - * @param meta - * @param [meta.errorProof=false] Whether the event firing should catch error thrown from a per listener call. - */ - define: function( name, meta ) { - var entry = getEntry.call( this, name ); - CKEDITOR.tools.extend( entry, meta, true ); - }, - - /** - * Registers a listener to a specific event in the current object. - * - * someObject.on( 'someEvent', function() { - * alert( this == someObject ); // true - * } ); - * - * someObject.on( 'someEvent', function() { - * alert( this == anotherObject ); // true - * }, anotherObject ); - * - * someObject.on( 'someEvent', function( event ) { - * alert( event.listenerData ); // 'Example' - * }, null, 'Example' ); - * - * someObject.on( 'someEvent', function() { ... } ); // 2nd called - * someObject.on( 'someEvent', function() { ... }, null, null, 100 ); // 3rd called - * someObject.on( 'someEvent', function() { ... }, null, null, 1 ); // 1st called - * - * @param {String} eventName The event name to which listen. - * @param {Function} listenerFunction The function listening to the - * event. A single {@link CKEDITOR.eventInfo} object instanced - * is passed to this function containing all the event data. - * @param {Object} [scopeObj] The object used to scope the listener - * call (the `this` object). If omitted, the current object is used. - * @param {Object} [listenerData] Data to be sent as the - * {@link CKEDITOR.eventInfo#listenerData} when calling the - * listener. - * @param {Number} [priority=10] The listener priority. Lower priority - * listeners are called first. Listeners with the same priority - * value are called in registration order. - * @returns {Object} An object containing the `removeListener` - * function, which can be used to remove the listener at any time. - */ - on: function( eventName, listenerFunction, scopeObj, listenerData, priority ) { - // Create the function to be fired for this listener. - function listenerFirer( editor, publisherData, stopFn, cancelFn ) { - var ev = { - name: eventName, - sender: this, - editor: editor, - data: publisherData, - listenerData: listenerData, - stop: stopFn, - cancel: cancelFn, - removeListener: removeListener - }; - - var ret = listenerFunction.call( scopeObj, ev ); - - return ret === false ? false : ev.data; - } - - function removeListener() { - me.removeListener( eventName, listenerFunction ); - } - - var event = getEntry.call( this, eventName ); - - if ( event.getListenerIndex( listenerFunction ) < 0 ) { - // Get the listeners. - var listeners = event.listeners; - - // Fill the scope. - if ( !scopeObj ) - scopeObj = this; - - // Default the priority, if needed. - if ( isNaN( priority ) ) - priority = 10; - - var me = this; - - listenerFirer.fn = listenerFunction; - listenerFirer.priority = priority; - - // Search for the right position for this new listener, based on its - // priority. - for ( var i = listeners.length - 1; i >= 0; i-- ) { - // Find the item which should be before the new one. - if ( listeners[ i ].priority <= priority ) { - // Insert the listener in the array. - listeners.splice( i + 1, 0, listenerFirer ); - return { removeListener: removeListener }; - } - } - - // If no position has been found (or zero length), put it in - // the front of list. - listeners.unshift( listenerFirer ); - } - - return { removeListener: removeListener }; - }, - - /** - * Similiar with {@link #on} but the listener will be called only once upon the next event firing. - * - * @see CKEDITOR.event#on - */ - once: function() { - var fn = arguments[ 1 ]; - - arguments[ 1 ] = function( evt ) { - evt.removeListener(); - return fn.apply( this, arguments ); - }; - - return this.on.apply( this, arguments ); - }, - - /** - * @static - * @property {Boolean} useCapture - * @todo - */ - - /** - * Register event handler under the capturing stage on supported target. - */ - capture: function() { - CKEDITOR.event.useCapture = 1; - var retval = this.on.apply( this, arguments ); - CKEDITOR.event.useCapture = 0; - return retval; - }, - - /** - * Fires an specific event in the object. All registered listeners are - * called at this point. - * - * someObject.on( 'someEvent', function() { ... } ); - * someObject.on( 'someEvent', function() { ... } ); - * someObject.fire( 'someEvent' ); // Both listeners are called. - * - * someObject.on( 'someEvent', function( event ) { - * alert( event.data ); // 'Example' - * } ); - * someObject.fire( 'someEvent', 'Example' ); - * - * @method - * @param {String} eventName The event name to fire. - * @param {Object} [data] Data to be sent as the - * {@link CKEDITOR.eventInfo#data} when calling the listeners. - * @param {CKEDITOR.editor} [editor] The editor instance to send as the - * {@link CKEDITOR.eventInfo#editor} when calling the listener. - * @returns {Boolean/Object} A boolean indicating that the event is to be - * canceled, or data returned by one of the listeners. - */ - fire: (function() { - // Create the function that marks the event as stopped. - var stopped = 0; - var stopEvent = function() { - stopped = 1; - }; - - // Create the function that marks the event as canceled. - var canceled = 0; - var cancelEvent = function() { - canceled = 1; - }; - - return function( eventName, data, editor ) { - // Get the event entry. - var event = getPrivate( this )[ eventName ]; - - // Save the previous stopped and cancelled states. We may - // be nesting fire() calls. - var previousStopped = stopped, - previousCancelled = canceled; - - // Reset the stopped and canceled flags. - stopped = canceled = 0; - - if ( event ) { - var listeners = event.listeners; - - if ( listeners.length ) { - // As some listeners may remove themselves from the - // event, the original array length is dinamic. So, - // let's make a copy of all listeners, so we are - // sure we'll call all of them. - listeners = listeners.slice( 0 ); - - var retData; - // Loop through all listeners. - for ( var i = 0; i < listeners.length; i++ ) { - // Call the listener, passing the event data. - if ( event.errorProof ) { - try { - retData = listeners[ i ].call( this, editor, data, stopEvent, cancelEvent ); - } catch ( er ) {} - } else - retData = listeners[ i ].call( this, editor, data, stopEvent, cancelEvent ); - - if ( retData === false ) - canceled = 1; - else if ( typeof retData != 'undefined' ) - data = retData; - - // No further calls is stopped or canceled. - if ( stopped || canceled ) - break; - } - } - } - - var ret = canceled ? false : ( typeof data == 'undefined' ? true : data ); - - // Restore the previous stopped and canceled states. - stopped = previousStopped; - canceled = previousCancelled; - - return ret; - }; - })(), - - /** - * Fires an specific event in the object, releasing all listeners - * registered to that event. The same listeners are not called again on - * successive calls of it or of {@link #fire}. - * - * someObject.on( 'someEvent', function() { ... } ); - * someObject.fire( 'someEvent' ); // Above listener called. - * someObject.fireOnce( 'someEvent' ); // Above listener called. - * someObject.fire( 'someEvent' ); // No listeners called. - * - * @param {String} eventName The event name to fire. - * @param {Object} [data] Data to be sent as the - * {@link CKEDITOR.eventInfo#data} when calling the listeners. - * @param {CKEDITOR.editor} [editor] The editor instance to send as the - * {@link CKEDITOR.eventInfo#editor} when calling the listener. - * @returns {Boolean/Object} A booloan indicating that the event is to be - * canceled, or data returned by one of the listeners. - */ - fireOnce: function( eventName, data, editor ) { - var ret = this.fire( eventName, data, editor ); - delete getPrivate( this )[ eventName ]; - return ret; - }, - - /** - * Unregisters a listener function from being called at the specified - * event. No errors are thrown if the listener has not been registered previously. - * - * var myListener = function() { ... }; - * someObject.on( 'someEvent', myListener ); - * someObject.fire( 'someEvent' ); // myListener called. - * someObject.removeListener( 'someEvent', myListener ); - * someObject.fire( 'someEvent' ); // myListener not called. - * - * @param {String} eventName The event name. - * @param {Function} listenerFunction The listener function to unregister. - */ - removeListener: function( eventName, listenerFunction ) { - // Get the event entry. - var event = getPrivate( this )[ eventName ]; - - if ( event ) { - var index = event.getListenerIndex( listenerFunction ); - if ( index >= 0 ) - event.listeners.splice( index, 1 ); - } - }, - - /** - * Remove all existing listeners on this object, for cleanup purpose. - */ - removeAllListeners: function() { - var events = getPrivate( this ); - for ( var i in events ) - delete events[ i ]; - }, - - /** - * Checks if there is any listener registered to a given event. - * - * var myListener = function() { ... }; - * someObject.on( 'someEvent', myListener ); - * alert( someObject.hasListeners( 'someEvent' ) ); // true - * alert( someObject.hasListeners( 'noEvent' ) ); // false - * - * @param {String} eventName The event name. - * @returns {Boolean} - */ - hasListeners: function( eventName ) { - var event = getPrivate( this )[ eventName ]; - return ( event && event.listeners.length > 0 ); - } - }; - })(); -} -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -if ( !CKEDITOR.editor ) { - // Documented at editor.js. - CKEDITOR.editor = function() { - // Push this editor to the pending list. It'll be processed later once - // the full editor code is loaded. - CKEDITOR._.pending.push( [ this, arguments ] ); - - // Call the CKEDITOR.event constructor to initialize this instance. - CKEDITOR.event.call( this ); - }; - - // Both fire and fireOnce will always pass this editor instance as the - // "editor" param in CKEDITOR.event.fire. So, we override it to do that - // automaticaly. - CKEDITOR.editor.prototype.fire = function( eventName, data ) { - if ( eventName in { instanceReady:1,loaded:1 } ) - this[ eventName ] = true; - - return CKEDITOR.event.prototype.fire.call( this, eventName, data, this ); - }; - - CKEDITOR.editor.prototype.fireOnce = function( eventName, data ) { - if ( eventName in { instanceReady:1,loaded:1 } ) - this[ eventName ] = true; - - return CKEDITOR.event.prototype.fireOnce.call( this, eventName, data, this ); - }; - - // "Inherit" (copy actually) from CKEDITOR.event. - CKEDITOR.event.implementOn( CKEDITOR.editor.prototype ); -} -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.env} object, which constains - * environment and browser information. - */ - -if ( !CKEDITOR.env ) { - /** - * Environment and browser information. - * - * @class CKEDITOR.env - * @singleton - */ - CKEDITOR.env = (function() { - var agent = navigator.userAgent.toLowerCase(); - var opera = window.opera; - - var env = { - /** - * Indicates that CKEditor is running on Internet Explorer. - * - * if ( CKEDITOR.env.ie ) - * alert( 'I\'m on IE!' ); - * - * @property {Boolean} - */ - ie: eval( '/*@cc_on!@*/false' ), - // Use eval to preserve conditional comment when compiling with Google Closure Compiler (#93). - - /** - * Indicates that CKEditor is running on Opera. - * - * if ( CKEDITOR.env.opera ) - * alert( 'I\'m on Opera!' ); - * - * @property {Boolean} - */ - opera: ( !!opera && opera.version ), - - /** - * Indicates that CKEditor is running on a WebKit based browser, like Safari. - * - * if ( CKEDITOR.env.webkit ) - * alert( 'I\'m on WebKit!' ); - * - * @property {Boolean} - */ - webkit: ( agent.indexOf( ' applewebkit/' ) > -1 ), - - /** - * Indicates that CKEditor is running on Adobe AIR. - * - * if ( CKEDITOR.env.air ) - * alert( 'I\'m on AIR!' ); - * - * @property {Boolean} - */ - air: ( agent.indexOf( ' adobeair/' ) > -1 ), - - /** - * Indicates that CKEditor is running on Macintosh. - * - * if ( CKEDITOR.env.mac ) - * alert( 'I love apples!'' ); - * - * @property {Boolean} - */ - mac: ( agent.indexOf( 'macintosh' ) > -1 ), - - /** - * Indicates that CKEditor is running on a quirks mode environemnt. - * - * if ( CKEDITOR.env.quirks ) - * alert( 'Nooooo!' ); - * - * @property {Boolean} - */ - quirks: ( document.compatMode == 'BackCompat' ), - - /** - * Indicates that CKEditor is running on a mobile like environemnt. - * - * if ( CKEDITOR.env.mobile ) - * alert( 'I\'m running with CKEditor today!' ); - * - * @property {Boolean} - */ - mobile: ( agent.indexOf( 'mobile' ) > -1 ), - - /** - * Indicates that CKEditor is running on Apple iPhone/iPad/iPod devices. - * - * if ( CKEDITOR.env.iOS ) - * alert( 'I like little apples!' ); - * - * @property {Boolean} - */ - iOS: /(ipad|iphone|ipod)/.test( agent ), - - /** - * Indicates that the browser has a custom domain enabled. This has - * been set with `document.domain`. - * - * if ( CKEDITOR.env.isCustomDomain() ) - * alert( 'I\'m in a custom domain!' ); - * - * @returns {Boolean} `true` if a custom domain is enabled. - */ - isCustomDomain: function() { - if ( !this.ie ) - return false; - - var domain = document.domain, - hostname = window.location.hostname; - - return domain != hostname && domain != ( '[' + hostname + ']' ); // IPv6 IP support (#5434) - }, - - /** - * Indicates that page is running under an encrypted connection. - * - * if ( CKEDITOR.env.secure ) - * alert( 'I\'m in SSL!' ); - * - * @returns {Boolean} `true` if the page has an encrypted connection. - */ - secure: location.protocol == 'https:' - }; - - /** - * Indicates that CKEditor is running on a Gecko based browser, like - * Firefox. - * - * if ( CKEDITOR.env.gecko ) - * alert( 'I\'m riding a gecko!' ); - * - * @property {Boolean} - */ - env.gecko = ( navigator.product == 'Gecko' && !env.webkit && !env.opera ); - - /** - * Indicates that CKEditor is running on Chrome. - * - * if ( CKEDITOR.env.chrome ) - * alert( 'I\'m riding Chrome!' ); - * - * @property {Boolean} chrome - */ - - /** - * Indicates that CKEditor is running on Safari (including mobile version). - * - * if ( CKEDITOR.env.safari ) - * alert( 'I\'m riding Safari!' ); - * - * @property {Boolean} safari - */ - if ( env.webkit ) { - if ( agent.indexOf( 'chrome' ) > -1 ) - env.chrome = true; - else - env.safari = true; - } - - var version = 0; - - // Internet Explorer 6.0+ - if ( env.ie ) { - // We use env.version for feature detection, so set it properly. - if ( env.quirks || !document.documentMode ) - version = parseFloat( agent.match( /msie (\d+)/ )[ 1 ] ); - else - version = document.documentMode; - - // Deprecated features available just for backwards compatibility. - env.ie9Compat = version == 9; - env.ie8Compat = version == 8; - env.ie7Compat = version == 7; - env.ie6Compat = version < 7 || env.quirks; - - /** - * Indicates that CKEditor is running on an IE6-like environment, which - * includes IE6 itself and IE7 and IE8 quirks mode. - * - * @deprecated - * @property {Boolean} ie6Compat - */ - - /** - * Indicates that CKEditor is running on an IE7-like environment, which - * includes IE7 itself and IE8's IE7 document mode. - * - * @deprecated - * @property {Boolean} ie7Compat - */ - - /** - * Indicates that CKEditor is running on Internet Explorer 8 on - * standards mode. - * - * @deprecated - * @property {Boolean} ie8Compat - */ - - /** - * Indicates that CKEditor is running on Internet Explorer 9's standards mode. - * - * @deprecated - * @property {Boolean} ie9Compat - */ - } - - // Gecko. - if ( env.gecko ) { - var geckoRelease = agent.match( /rv:([\d\.]+)/ ); - if ( geckoRelease ) { - geckoRelease = geckoRelease[ 1 ].split( '.' ); - version = geckoRelease[ 0 ] * 10000 + ( geckoRelease[ 1 ] || 0 ) * 100 + ( geckoRelease[ 2 ] || 0 ) * 1; - } - } - - // Opera 9.50+ - if ( env.opera ) - version = parseFloat( opera.version() ); - - // Adobe AIR 1.0+ - // Checked before Safari because AIR have the WebKit rich text editor - // features from Safari 3.0.4, but the version reported is 420. - if ( env.air ) - version = parseFloat( agent.match( / adobeair\/(\d+)/ )[ 1 ] ); - - // WebKit 522+ (Safari 3+) - if ( env.webkit ) - version = parseFloat( agent.match( / applewebkit\/(\d+)/ )[ 1 ] ); - - /** - * Contains the browser version. - * - * For gecko based browsers (like Firefox) it contains the revision - * number with first three parts concatenated with a padding zero - * (e.g. for revision 1.9.0.2 we have 10900). - * - * For webkit based browser (like Safari and Chrome) it contains the - * WebKit build version (e.g. 522). - * - * For IE browsers, it matches the "document mode". - * - * if ( CKEDITOR.env.ie && CKEDITOR.env.version <= 6 ) - * alert( 'Ouch!' ); - * - * @property {Number} - */ - env.version = version; - - /** - * Indicates that CKEditor is running on a compatible browser. - * - * if ( CKEDITOR.env.isCompatible ) - * alert( 'Your browser is pretty cool!' ); - * - * @property {Boolean} - */ - env.isCompatible = - // White list of mobile devices that supports. - env.iOS && version >= 534 || - !env.mobile && ( - ( env.ie && version > 6 ) || - ( env.gecko && version >= 10801 ) || - ( env.opera && version >= 9.5 ) || - ( env.air && version >= 1 ) || - ( env.webkit && version >= 522 ) || - false - ); - - /** - * The CSS class to be appended on the main UI containers, making it - * easy to apply browser specific styles to it. - * - * myDiv.className = CKEDITOR.env.cssClass; - * - * @property {String} - */ - env.cssClass = 'cke_browser_' + ( env.ie ? 'ie' : env.gecko ? 'gecko' : env.opera ? 'opera' : env.webkit ? 'webkit' : 'unknown' ); - - if ( env.quirks ) - env.cssClass += ' cke_browser_quirks'; - - if ( env.ie ) { - env.cssClass += ' cke_browser_ie' + ( env.quirks || env.version < 7 ? '6' : env.version ); - - if ( env.quirks ) - env.cssClass += ' cke_browser_iequirks'; - } - - if ( env.gecko ) { - if ( version < 10900 ) - env.cssClass += ' cke_browser_gecko18'; - else if ( version <= 11000 ) - env.cssClass += ' cke_browser_gecko19'; - } - - if ( env.air ) - env.cssClass += ' cke_browser_air'; - - return env; - })(); -} - -// PACKAGER_RENAME( CKEDITOR.env ) -// PACKAGER_RENAME( CKEDITOR.env.ie ) -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Contains the second part of the {@link CKEDITOR} object - * definition, which defines the basic editor features to be available in - * the root ckeditor_basic.js file. - */ - -if ( CKEDITOR.status == 'unloaded' ) { - (function() { - CKEDITOR.event.implementOn( CKEDITOR ); - - /** - * Forces the full CKEditor core code, in the case only the basic code has been - * loaded (`ckeditor_basic.js`). This method self-destroys (becomes undefined) in - * the first call or as soon as the full code is available. - * - * // Check if the full core code has been loaded and load it. - * if ( CKEDITOR.loadFullCore ) - * CKEDITOR.loadFullCore(); - * - * @member CKEDITOR - */ - CKEDITOR.loadFullCore = function() { - // If the basic code is not ready, just mark it to be loaded. - if ( CKEDITOR.status != 'basic_ready' ) { - CKEDITOR.loadFullCore._load = 1; - return; - } - - // Destroy this function. - delete CKEDITOR.loadFullCore; - - // Append the script to the head. - var script = document.createElement( 'script' ); - script.type = 'text/javascript'; - script.src = CKEDITOR.basePath + 'ckeditor.js'; - - document.getElementsByTagName( 'head' )[ 0 ].appendChild( script ); - }; - - /** - * The time to wait (in seconds) to load the full editor code after the - * page load, if the "ckeditor_basic" file is used. If set to zero, the - * editor is loaded on demand, as soon as an instance is created. - * - * This value must be set on the page before the page load completion. - * - * // Loads the full source after five seconds. - * CKEDITOR.loadFullCoreTimeout = 5; - * - * @property - * @member CKEDITOR - */ - CKEDITOR.loadFullCoreTimeout = 0; - - // Documented at ckeditor.js. - CKEDITOR.add = function( editor ) { - // For now, just put the editor in the pending list. It will be - // processed as soon as the full code gets loaded. - var pending = this._.pending || ( this._.pending = [] ); - pending.push( editor ); - }; - - (function() { - var onload = function() { - var loadFullCore = CKEDITOR.loadFullCore, - loadFullCoreTimeout = CKEDITOR.loadFullCoreTimeout; - - if ( !loadFullCore ) - return; - - CKEDITOR.status = 'basic_ready'; - - if ( loadFullCore && loadFullCore._load ) - loadFullCore(); - else if ( loadFullCoreTimeout ) { - setTimeout( function() { - if ( CKEDITOR.loadFullCore ) - CKEDITOR.loadFullCore(); - }, loadFullCoreTimeout * 1000 ); - } - }; - - CKEDITOR.domReady( onload ); - })(); - - CKEDITOR.status = 'basic_loaded'; - })(); -} -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.dom} object, which contains DOM - * manipulation objects and function. - */ - -CKEDITOR.dom = {}; - -// PACKAGER_RENAME( CKEDITOR.dom ) -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.tools} object, which contains - * utility functions. - */ - -(function() { - var functions = [], - cssVendorPrefix = - CKEDITOR.env.gecko ? '-moz-' : - CKEDITOR.env.webkit ? '-webkit-' : - CKEDITOR.env.opera ? '-o-' : - CKEDITOR.env.ie ? '-ms-' : - ''; - - CKEDITOR.on( 'reset', function() { - functions = []; - }); - - /** - * Utility functions. - * - * @class - * @singleton - */ - CKEDITOR.tools = { - /** - * Compare the elements of two arrays. - * - * var a = [ 1, 'a', 3 ]; - * var b = [ 1, 3, 'a' ]; - * var c = [ 1, 'a', 3 ]; - * var d = [ 1, 'a', 3, 4 ]; - * - * alert( CKEDITOR.tools.arrayCompare( a, b ) ); // false - * alert( CKEDITOR.tools.arrayCompare( a, c ) ); // true - * alert( CKEDITOR.tools.arrayCompare( a, d ) ); // false - * - * @param {Array} arrayA An array to be compared. - * @param {Array} arrayB The other array to be compared. - * @returns {Boolean} "true" is the arrays have the same lenght and - * their elements match. - */ - arrayCompare: function( arrayA, arrayB ) { - if ( !arrayA && !arrayB ) - return true; - - if ( !arrayA || !arrayB || arrayA.length != arrayB.length ) - return false; - - for ( var i = 0; i < arrayA.length; i++ ) { - if ( arrayA[ i ] != arrayB[ i ] ) - return false; - } - - return true; - }, - - /** - * Creates a deep copy of an object. - * - * **Note**: there is no support for recursive references. - * - * var obj = { - * name: 'John', - * cars: { - * Mercedes: { color: 'blue' }, - * Porsche: { color: 'red' } - * } - * }; - * var clone = CKEDITOR.tools.clone( obj ); - * clone.name = 'Paul'; - * clone.cars.Porsche.color = 'silver'; - * - * alert( obj.name ); // 'John' - * alert( clone.name ); // 'Paul' - * alert( obj.cars.Porsche.color ); // 'red' - * alert( clone.cars.Porsche.color ); // 'silver' - * - * @param {Object} object The object to be cloned. - * @returns {Object} The object clone. - */ - clone: function( obj ) { - var clone; - - // Array. - if ( obj && ( obj instanceof Array ) ) { - clone = []; - - for ( var i = 0; i < obj.length; i++ ) - clone[ i ] = CKEDITOR.tools.clone( obj[ i ] ); - - return clone; - } - - // "Static" types. - if ( obj === null || ( typeof( obj ) != 'object' ) || ( obj instanceof String ) || ( obj instanceof Number ) || ( obj instanceof Boolean ) || ( obj instanceof Date ) || ( obj instanceof RegExp ) ) { - return obj; - } - - // Objects. - clone = new obj.constructor(); - - for ( var propertyName in obj ) { - var property = obj[ propertyName ]; - clone[ propertyName ] = CKEDITOR.tools.clone( property ); - } - - return clone; - }, - - /** - * Turn the first letter of string to upper-case. - * - * @param {String} str - * @returns {String} - */ - capitalize: function( str ) { - return str.charAt( 0 ).toUpperCase() + str.substring( 1 ).toLowerCase(); - }, - - /** - * Copy the properties from one object to another. By default, properties - * already present in the target object **are not** overwritten. - * - * // Create the sample object. - * var myObject = { - * prop1: true - * }; - * - * // Extend the above object with two properties. - * CKEDITOR.tools.extend( myObject, { - * prop2: true, - * prop3: true - * } ); - * - * // Alert 'prop1', 'prop2' and 'prop3'. - * for ( var p in myObject ) - * alert( p ); - * - * @param {Object} target The object to be extended. - * @param {Object...} source The object(s) from which copy - * properties. Any number of objects can be passed to this function. - * @param {Boolean} [overwrite] If 'true' is specified it indicates that - * properties already present in the target object could be - * overwritten by subsequent objects. - * @param {Object} [properties] Only properties within the specified names - * list will be received from the source object. - * @returns {Object} the extended object (target). - */ - extend: function( target ) { - var argsLength = arguments.length, - overwrite, propertiesList; - - if ( typeof( overwrite = arguments[ argsLength - 1 ] ) == 'boolean' ) - argsLength--; - else if ( typeof( overwrite = arguments[ argsLength - 2 ] ) == 'boolean' ) { - propertiesList = arguments[ argsLength - 1 ]; - argsLength -= 2; - } - for ( var i = 1; i < argsLength; i++ ) { - var source = arguments[ i ]; - for ( var propertyName in source ) { - // Only copy existed fields if in overwrite mode. - if ( overwrite === true || target[ propertyName ] == undefined ) { - // Only copy specified fields if list is provided. - if ( !propertiesList || ( propertyName in propertiesList ) ) - target[ propertyName ] = source[ propertyName ]; - - } - } - } - - return target; - }, - - /** - * Creates an object which is an instance of a class which prototype is a - * predefined object. All properties defined in the source object are - * automatically inherited by the resulting object, including future - * changes to it. - * - * @param {Object} source The source object to be used as the prototype for - * the final object. - * @returns {Object} The resulting copy. - */ - prototypedCopy: function( source ) { - var copy = function() {}; - copy.prototype = source; - return new copy(); - }, - - /** - * Make fast (shallow) copy of an object. - * This method is faster than {@link #clone} which does - * deep copy of an object (including arrays). - * - * @since 4.1 - * @param {Object} source The object to be copied. - * @returns {Object} Copy of `source`. - */ - copy: function( source ) { - var obj = {}, - name; - - for ( name in source ) - obj[ name ] = source[ name ]; - - return obj; - }, - - /** - * Checks if an object is an Array. - * - * alert( CKEDITOR.tools.isArray( [] ) ); // true - * alert( CKEDITOR.tools.isArray( 'Test' ) ); // false - * - * @param {Object} object The object to be checked. - * @returns {Boolean} `true` if the object is an Array, otherwise `false`. - */ - isArray: function( object ) { - return ( !!object && object instanceof Array ); - }, - - /** - * Whether the object contains no properties of it's own. - * - * @param object - * @returns {Boolean} - */ - isEmpty: function( object ) { - for ( var i in object ) { - if ( object.hasOwnProperty( i ) ) - return false; - } - return true; - }, - - /** - * Generate object or string containing vendor specific and vendor free CSS properties. - * - * CKEDITOR.tools.cssVendorPrefix( 'border-radius', '0', true ); - * // On Firefox: '-moz-border-radius:0;border-radius:0' - * // On Chrome: '-webkit-border-radius:0;border-radius:0' - * - * @param {String} property The CSS property name. - * @param {String} value The CSS value. - * @param {Boolean} [asString=false] If `true`, then returned value will be a CSS string. - * @returns {Object/String} The object containing CSS properties or its stringified version. - */ - cssVendorPrefix: function( property, value, asString ) { - if ( asString ) - return cssVendorPrefix + property + ':' + value + ';' + property + ':' + value; - - var ret = {}; - ret[ property ] = value; - ret[ cssVendorPrefix + property ] = value; - - return ret; - }, - - /** - * Transforms a CSS property name to its relative DOM style name. - * - * alert( CKEDITOR.tools.cssStyleToDomStyle( 'background-color' ) ); // 'backgroundColor' - * alert( CKEDITOR.tools.cssStyleToDomStyle( 'float' ) ); // 'cssFloat' - * - * @method - * @param {String} cssName The CSS property name. - * @returns {String} The transformed name. - */ - cssStyleToDomStyle: (function() { - var test = document.createElement( 'div' ).style; - - var cssFloat = ( typeof test.cssFloat != 'undefined' ) ? 'cssFloat' : ( typeof test.styleFloat != 'undefined' ) ? 'styleFloat' : 'float'; - - return function( cssName ) { - if ( cssName == 'float' ) - return cssFloat; - else { - return cssName.replace( /-./g, function( match ) { - return match.substr( 1 ).toUpperCase(); - }); - } - }; - })(), - - /** - * Build the HTML snippet of a set of `' ); - else - retval.push( '' ); - } - } - return retval.join( '' ); - }, - - /** - * Replace special HTML characters in a string with their relative HTML - * entity values. - * - * alert( CKEDITOR.tools.htmlEncode( 'A > B & C < D' ) ); // 'A > B & C < D' - * - * @param {String} text The string to be encoded. - * @returns {String} The encode string. - */ - htmlEncode: function( text ) { - return String( text ).replace( /&/g, '&' ).replace( />/g, '>' ).replace( /' ); - * alert( CKEDITOR.tools.htmlEncodeAttr( element.getAttribute( 'title' ) ); // '>a " b <' - * - * @param {String} The attribute's value to be encoded. - * @returns {String} The encode value. - */ - htmlEncodeAttr: function( text ) { - return text.replace( /"/g, '"' ).replace( //g, '>' ); - }, - - /** - * Gets a unique number for this CKEDITOR execution session. It returns - * progressive numbers starting at 1. - * - * alert( CKEDITOR.tools.getNextNumber() ); // (e.g.) 1 - * alert( CKEDITOR.tools.getNextNumber() ); // 2 - * - * @method - * @returns {Number} A unique number. - */ - getNextNumber: (function() { - var last = 0; - return function() { - return ++last; - }; - })(), - - /** - * Gets a unique ID for CKEditor's interface elements. It returns a - * string with the "cke_" prefix and a progressive number. - * - * alert( CKEDITOR.tools.getNextId() ); // (e.g.) 'cke_1' - * alert( CKEDITOR.tools.getNextId() ); // 'cke_2' - * - * @returns {String} A unique ID. - */ - getNextId: function() { - return 'cke_' + this.getNextNumber(); - }, - - /** - * Creates a function override. - * - * var obj = { - * myFunction: function( name ) { - * alert( 'Name: ' + name ); - * } - * }; - * - * obj.myFunction = CKEDITOR.tools.override( obj.myFunction, function( myFunctionOriginal ) { - * return function( name ) { - * alert( 'Overriden name: ' + name ); - * myFunctionOriginal.call( this, name ); - * }; - * } ); - * - * @param {Function} originalFunction The function to be overridden. - * @param {Function} functionBuilder A function that returns the new - * function. The original function reference will be passed to this function. - * @returns {Function} The new function. - */ - override: function( originalFunction, functionBuilder ) { - var newFn = functionBuilder( originalFunction ); - newFn.prototype = originalFunction.prototype; - return newFn; - }, - - /** - * Executes a function after specified delay. - * - * CKEDITOR.tools.setTimeout( function() { - * alert( 'Executed after 2 seconds' ); - * }, 2000 ); - * - * @param {Function} func The function to be executed. - * @param {Number} [milliseconds=0] The amount of time (millisecods) to wait - * to fire the function execution. - * @param {Object} [scope=window] The object to hold the function execution scope - * (the `this` object). - * @param {Object/Array} [args] A single object, or an array of objects, to - * pass as arguments to the function. - * @param {Object} [ownerWindow=window] The window that will be used to set the - * timeout. - * @returns {Object} A value that can be used to cancel the function execution. - */ - setTimeout: function( func, milliseconds, scope, args, ownerWindow ) { - if ( !ownerWindow ) - ownerWindow = window; - - if ( !scope ) - scope = ownerWindow; - - return ownerWindow.setTimeout( function() { - if ( args ) - func.apply( scope, [].concat( args ) ); - else - func.apply( scope ); - }, milliseconds || 0 ); - }, - - /** - * Remove spaces from the start and the end of a string. The following - * characters are removed: space, tab, line break, line feed. - * - * alert( CKEDITOR.tools.trim( ' example ' ); // 'example' - * - * @method - * @param {String} str The text from which remove the spaces. - * @returns {String} The modified string without the boundary spaces. - */ - trim: (function() { - // We are not using \s because we don't want "non-breaking spaces" to be caught. - var trimRegex = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g; - return function( str ) { - return str.replace( trimRegex, '' ); - }; - })(), - - /** - * Remove spaces from the start (left) of a string. The following - * characters are removed: space, tab, line break, line feed. - * - * alert( CKEDITOR.tools.ltrim( ' example ' ); // 'example ' - * - * @method - * @param {String} str The text from which remove the spaces. - * @returns {String} The modified string excluding the removed spaces. - */ - ltrim: (function() { - // We are not using \s because we don't want "non-breaking spaces" to be caught. - var trimRegex = /^[ \t\n\r]+/g; - return function( str ) { - return str.replace( trimRegex, '' ); - }; - })(), - - /** - * Remove spaces from the end (right) of a string. The following - * characters are removed: space, tab, line break, line feed. - * - * alert( CKEDITOR.tools.ltrim( ' example ' ); // ' example' - * - * @method - * @param {String} str The text from which remove the spaces. - * @returns {String} The modified string excluding the removed spaces. - */ - rtrim: (function() { - // We are not using \s because we don't want "non-breaking spaces" to be caught. - var trimRegex = /[ \t\n\r]+$/g; - return function( str ) { - return str.replace( trimRegex, '' ); - }; - })(), - - /** - * Returns the index of an element in an array. - * - * var letters = [ 'a', 'b', 0, 'c', false ]; - * alert( CKEDITOR.tools.indexOf( letters, '0' ) ); // -1 because 0 !== '0' - * alert( CKEDITOR.tools.indexOf( letters, false ) ); // 4 because 0 !== false - * - * @param {Array} array The array to be searched. - * @param {Object/Function} value The element to be found. Can be an - * evaluation function which receives a single parameter call for - * each entry in the array, returning `true` if the entry matches. - * @returns {Number} The (zero based) index of the first entry that matches - * the entry, or `-1` if not found. - */ - indexOf: function( array, value ) { - if ( typeof value == 'function' ) { - for ( var i = 0, len = array.length; i < len; i++ ) { - if ( value( array[ i ] ) ) - return i; - } - } else if ( array.indexOf ) { - return array.indexOf( value ); - } else { - for ( i = 0, len = array.length; i < len; i++ ) { - if ( array[ i ] === value ) - return i; - } - } - return -1; - }, - - /** - * Returns the index of an element in an array. - * - * var obj = { prop: true }; - * var letters = [ 'a', 'b', 0, obj, false ]; - * - * alert( CKEDITOR.tools.indexOf( letters, '0' ) ); // null - * alert( CKEDITOR.tools.indexOf( letters, function( value ) { - * // Return true when passed value has property 'prop'. - * return value && 'prop' in value; - * } ) ); // obj - * - * @param {Array} array The array to be searched. - * @param {Object/Function} value The element to be found. Can be an - * evaluation function which receives a single parameter call for - * each entry in the array, returning `true` if the entry matches. - * @returns Object The value that was found in an array. - */ - search: function( array, value ) { - var index = CKEDITOR.tools.indexOf( array, value ); - return index >= 0 ? array[ index ] : null; - }, - - /** - * Creates a function that will always execute in the context of a - * specified object. - * - * var obj = { text: 'My Object' }; - * - * function alertText() { - * alert( this.text ); - * } - * - * var newFunc = CKEDITOR.tools.bind( alertText, obj ); - * newFunc(); // Alerts 'My Object'. - * - * @param {Function} func The function to be executed. - * @param {Object} obj The object to which bind the execution context. - * @returns {Function} The function that can be used to execute the - * `func` function in the context of `obj`. - */ - bind: function( func, obj ) { - return function() { - return func.apply( obj, arguments ); - }; - }, - - /** - * Class creation based on prototype inheritance, with supports of the - * following features: - * - * * Static fields - * * Private fields - * * Public (prototype) fields - * * Chainable base class constructor - * - * @param {Object} definition The class definition object. - * @returns {Function} A class-like JavaScript function. - */ - createClass: function( definition ) { - var $ = definition.$, - baseClass = definition.base, - privates = definition.privates || definition._, - proto = definition.proto, - statics = definition.statics; - - // Create the constructor, if not present in the definition. - !$ && ( $ = function() { - baseClass && this.base.apply( this, arguments ); - }); - - if ( privates ) { - var originalConstructor = $; - $ = function() { - // Create (and get) the private namespace. - var _ = this._ || ( this._ = {} ); - - // Make some magic so "this" will refer to the main - // instance when coding private functions. - for ( var privateName in privates ) { - var priv = privates[ privateName ]; - - _[ privateName ] = ( typeof priv == 'function' ) ? CKEDITOR.tools.bind( priv, this ) : priv; - } - - originalConstructor.apply( this, arguments ); - }; - } - - if ( baseClass ) { - $.prototype = this.prototypedCopy( baseClass.prototype ); - $.prototype.constructor = $; - // Super references. - $.base = baseClass; - $.baseProto = baseClass.prototype; - // Super constructor. - $.prototype.base = function() { - this.base = baseClass.prototype.base; - baseClass.apply( this, arguments ); - this.base = arguments.callee; - }; - } - - if ( proto ) - this.extend( $.prototype, proto, true ); - - if ( statics ) - this.extend( $, statics, true ); - - return $; - }, - - /** - * Creates a function reference that can be called later using - * {@link #callFunction}. This approach is specially useful to - * make DOM attribute function calls to JavaScript defined functions. - * - * var ref = CKEDITOR.tools.addFunction( function() { - * alert( 'Hello!'); - * } ); - * CKEDITOR.tools.callFunction( ref ); // 'Hello!' - * - * @param {Function} fn The function to be executed on call. - * @param {Object} [scope] The object to have the context on `fn` execution. - * @returns {Number} A unique reference to be used in conjuction with - * {@link #callFunction}. - */ - addFunction: function( fn, scope ) { - return functions.push( function() { - return fn.apply( scope || this, arguments ); - }) - 1; - }, - - /** - * Removes the function reference created with {@link #addFunction}. - * - * @param {Number} ref The function reference created with - * {@link #addFunction}. - */ - removeFunction: function( ref ) { - functions[ ref ] = null; - }, - - /** - * Executes a function based on the reference created with {@link #addFunction}. - * - * var ref = CKEDITOR.tools.addFunction( function() { - * alert( 'Hello!'); - * } ); - * CKEDITOR.tools.callFunction( ref ); // 'Hello!' - * - * @param {Number} ref The function reference created with {@link #addFunction}. - * @param {Mixed} params Any number of parameters to be passed to the executed function. - * @returns {Mixed} The return value of the function. - */ - callFunction: function( ref ) { - var fn = functions[ ref ]; - return fn && fn.apply( window, Array.prototype.slice.call( arguments, 1 ) ); - }, - - /** - * Append the `px` length unit to the size if it's missing. - * - * var cssLength = CKEDITOR.tools.cssLength; - * cssLength( 42 ); // '42px' - * cssLength( '42' ); // '42px' - * cssLength( '42px' ); // '42px' - * cssLength( '42%' ); // '42%' - * cssLength( 'bold' ); // 'bold' - * cssLength( false ); // '' - * cssLength( NaN ); // '' - * - * @method - * @param {Number/String/Boolean} length - */ - cssLength: (function() { - var pixelRegex = /^-?\d+\.?\d*px$/, - lengthTrimmed; - - return function( length ) { - lengthTrimmed = CKEDITOR.tools.trim( length + '' ) + 'px'; - - if ( pixelRegex.test( lengthTrimmed ) ) - return lengthTrimmed; - else - return length || ''; - }; - })(), - - /** - * Convert the specified CSS length value to the calculated pixel length inside this page. - * - * **Note:** Percentage based value is left intact. - * - * @method - * @param {String} cssLength CSS length value. - */ - convertToPx: (function() { - var calculator; - - return function( cssLength ) { - if ( !calculator ) { - calculator = CKEDITOR.dom.element.createFromHtml( '
', CKEDITOR.document ); - CKEDITOR.document.getBody().append( calculator ); - } - - if ( !( /%$/ ).test( cssLength ) ) { - calculator.setStyle( 'width', cssLength ); - return calculator.$.clientWidth; - } - - return cssLength; - }; - })(), - - /** - * String specified by `str` repeats `times` times. - * - * @param {String} str - * @param {Number} times - * @returns {String} - */ - repeat: function( str, times ) { - return new Array( times + 1 ).join( str ); - }, - - /** - * Return the first successfully executed function's return value that - * doesn't throw any exception. - * - * @param {Function...} fn - * @returns {Mixed} - */ - tryThese: function() { - var returnValue; - for ( var i = 0, length = arguments.length; i < length; i++ ) { - var lambda = arguments[ i ]; - try { - returnValue = lambda(); - break; - } catch ( e ) {} - } - return returnValue; - }, - - /** - * Generate a combined key from a series of params. - * - * var key = CKEDITOR.tools.genKey( 'key1', 'key2', 'key3' ); - * alert( key ); // 'key1-key2-key3'. - * - * @param {String} subKey One or more string used as sub keys. - * @returns {String} - */ - genKey: function() { - return Array.prototype.slice.call( arguments ).join( '-' ); - }, - - /** - * Create A "deferred" function which will not run immediately, - * rather runs as soon as the interpreter’s call stack is empty. - * Behaves much like window.setTimeout with a delay. - * - * **Note:** The return value of the original function will loose. - * - * @param {Function} fn The callee function. - * @returns {Function} The new deferred function. - */ - defer: function( fn ) { - return function() { - var args = arguments, - self = this; - window.setTimeout( function() { - fn.apply( self, args ); - }, 0 ); - }; - }, - - /** - * Try to avoid differences in the style attribute. - * - * @param {String} styleText The style data to be normalized. - * @param {Boolean} [nativeNormalize=false] Parse the data using the browser. - * @returns {String} The normalized value. - */ - normalizeCssText: function( styleText, nativeNormalize ) { - var props = [], - name, - parsedProps = CKEDITOR.tools.parseCssText( styleText, true, nativeNormalize ); - - for ( name in parsedProps ) - props.push( name + ':' + parsedProps[ name ] ); - - props.sort(); - - return props.length ? ( props.join( ';' ) + ';' ) : ''; - }, - - /** - * Find and convert `rgb(x,x,x)` colors definition to hexadecimal notation. - * - * @param {String} styleText The style data (or just a string containing rgb colors) to be converted. - * @returns {String} The style data with rgb colors converted to hexadecimal equivalents. - */ - convertRgbToHex: function( styleText ) { - return styleText.replace( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, function( match, red, green, blue ) { - var color = [ red, green, blue ]; - // Add padding zeros if the hex value is less than 0x10. - for ( var i = 0; i < 3; i++ ) - color[ i ] = ( '0' + parseInt( color[ i ], 10 ).toString( 16 ) ).slice( -2 ); - return '#' + color.join( '' ); - }); - }, - - /** - * Turn inline style text properties into one hash. - * - * @param {String} styleText The style data to be parsed. - * @param {Boolean} [normalize=false] Normalize properties and values - * (e.g. trim spaces, convert to lower case). - * @param {Boolean} [nativeNormalize=false] Parse the data using the browser. - * @returns {Object} The object containing parsed properties. - */ - parseCssText: function( styleText, normalize, nativeNormalize ) { - var retval = {}; - - if ( nativeNormalize ) { - // Injects the style in a temporary span object, so the browser parses it, - // retrieving its final format. - var temp = new CKEDITOR.dom.element( 'span' ); - temp.setAttribute( 'style', styleText ); - styleText = CKEDITOR.tools.convertRgbToHex( temp.getAttribute( 'style' ) || '' ); - } - - // IE will leave a single semicolon when failed to parse the style text. (#3891) - if ( !styleText || styleText == ';' ) - return retval; - - styleText.replace( /"/g, '"' ).replace( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function( match, name, value ) { - if ( normalize ) { - name = name.toLowerCase(); - // Normalize font-family property, ignore quotes and being case insensitive. (#7322) - // http://www.w3.org/TR/css3-fonts/#font-family-the-font-family-property - if ( name == 'font-family' ) - value = value.toLowerCase().replace( /["']/g, '' ).replace( /\s*,\s*/g, ',' ); - value = CKEDITOR.tools.trim( value ); - } - - retval[ name ] = value; - }); - return retval; - }, - - /** - * Serialize `style name => value` hash to a style text. - * - * var styleObj = CKEDITOR.tools.parseCssText( 'color: red; border: none' ); - * console.log( styleObj.color ); // -> 'red' - * CKEDITOR.tools.writeCssText( styleObj ); // -> 'color:red; border:none' - * CKEDITOR.tools.writeCssText( styleObj, true ); // -> 'border:none; color:red' - * - * @since 4.1 - * @param {Object} styles The object contaning style properties. - * @param {Boolean} [sort] Whether to sort CSS properties. - * @returns {String} The serialized style text. - */ - writeCssText: function( styles, sort ) { - var name, - stylesArr = []; - - for ( name in styles ) - stylesArr.push( name + ':' + styles[ name ] ); - - if ( sort ) - stylesArr.sort(); - - return stylesArr.join( '; ' ); - }, - - /** - * Compare two objects. - * - * **Note:** This method performs shallow, non-strict comparison. - * - * @since 4.1 - * @param {Object} left - * @param {Object} right - * @param {Boolean} [onlyLeft] Check only these properties which are present in `left` object. - * @returns {Boolean} Whether objects are identical. - */ - objectCompare: function( left, right, onlyLeft ) { - var name; - - if ( !left && !right ) - return true; - if ( !left || !right ) - return false; - - for ( name in left ) { - if ( left[ name ] != right[ name ] ) { - return false; - } - } - - if ( !onlyLeft ) { - for ( name in right ) { - if ( left[ name ] != right[ name ] ) - return false; - } - } - - return true; - }, - - /** - * Return array of passed object's keys. - * - * console.log( CKEDITOR.tools.objectKeys( { foo: 1, bar: false } ); - * // -> [ 'foo', 'bar' ] - * - * @since 4.1 - * @param {Object} obj - * @returns {Array} Object's keys. - */ - objectKeys: function( obj ) { - var keys = []; - for ( var i in obj ) - keys.push( i ); - - return keys; - }, - - /** - * Convert an array to an object by rewriting array's items - * to object properties. - * - * var arr = [ 'foo', 'bar', 'foo' ]; - * console.log( CKEDITOR.tools.convertArrayToObject( arr ) ); - * // -> { foo: true, bar: true } - * console.log( CKEDITOR.tools.convertArrayToObject( arr, 1 ) ); - * // -> { foo: 1, bar: 1 } - * - * @since 4.1 - * @param {Array} arr The array to be converted to object. - * @param [fillWith=true] Set each property of an object to `fillWith` value. - */ - convertArrayToObject: function( arr, fillWith ) { - var obj = {}; - - if ( arguments.length == 1 ) - fillWith = true; - - for ( var i = 0, l = arr.length; i < l; ++i ) - obj[ arr[ i ] ] = fillWith; - - return obj; - } - }; -})(); - -// PACKAGER_RENAME( CKEDITOR.tools ) -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.dtd} object, which holds the DTD - * mapping for XHTML 1.0 Transitional. This file was automatically - * generated from the file: xhtml1-transitional.dtd. - */ - -/** - * Holds and object representation of the HTML DTD to be used by the - * editor in its internal operations. - * - * Each element in the DTD is represented by a property in this object. Each - * property contains the list of elements that can be contained by the element. - * Text is represented by the `#` property. - * - * Several special grouping properties are also available. Their names start - * with the `$` character. - * - * // Check if
can be contained in a

element. - * alert( !!CKEDITOR.dtd[ 'p' ][ 'div' ] ); // false - * - * // Check if

can be contained in a

element. - * alert( !!CKEDITOR.dtd[ 'div' ][ 'p' ] ); // true - * - * // Check if

is a block element. - * alert( !!CKEDITOR.dtd.$block[ 'p' ] ); // true - * - * @class CKEDITOR.dtd - * @singleton - */ -CKEDITOR.dtd = (function() { - 'use strict'; - - var X = CKEDITOR.tools.extend, - // Subtraction rest of sets, from the first set. - Y = function( source, removed ) { - var substracted = CKEDITOR.tools.clone( source ); - for ( var i = 1; i < arguments.length; i++ ) { - removed = arguments[ i ]; - for( var name in removed ) - delete substracted[ name ]; - } - return substracted; - }; - - // Phrasing elements. - // P = { a:1,em:1,strong:1,small:1,abbr:1,dfn:1,i:1,b:1,s:1,u:1,code:1,'var':1,samp:1,kbd:1,sup:1,sub:1,q:1,cite:1,span:1,bdo:1,bdi:1,br:1,wbr:1,ins:1,del:1,img:1,embed:1,object:1,iframe:1,map:1,area:1,script:1,noscript:1,ruby:1,video:1,audio:1,input:1,textarea:1,select:1,button:1,label:1,output:1,keygen:1,progress:1,command:1,canvas:1,time:1,meter:1,detalist:1 }, - - // Flow elements. - // F = { a:1,p:1,hr:1,pre:1,ul:1,ol:1,dl:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hgroup:1,address:1,blockquote:1,ins:1,del:1,object:1,map:1,noscript:1,section:1,nav:1,article:1,aside:1,header:1,footer:1,video:1,audio:1,figure:1,table:1,form:1,fieldset:1,menu:1,canvas:1,details:1 }, - - // Text can be everywhere. - // X( P, T ); - // Flow elements set consists of phrasing elements set. - // X( F, P ); - - var P = {}, F = {}, - // Intersection of flow elements set and phrasing elements set. - PF = { a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,'var':1,video:1,wbr:1 }, - // F - PF (Flow Only). - FO = { address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1 }, - // Metadata elements. - M = { command:1,link:1,meta:1,noscript:1,script:1,style:1 }, - // Empty. - E = {}, - // Text. - T = { '#':1 }, - - // Deprecated phrasing elements. - DP = { acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1 }, // TODO remove "style". - // Deprecated flow only elements. - DFO = { center:1,dir:1,noframes:1 }; - - // Phrasing elements := PF + T + DP - X( P, PF, T, DP ); - // Flow elements := FO + P + DFO - X( F, FO, P, DFO ); - - var dtd = { - a: Y( P, { a:1,button:1 } ), // Treat as normal inline element (not a transparent one). - abbr: P, - address: F, - area: E, - article: X( { style:1 }, F ), - aside: X( { style:1 }, F ), - audio: X( { source:1,track:1 }, F ), - b: P, - base: E, - bdi: P, - bdo: P, - blockquote: F, - body: F, - br: E, - button: Y( P, { a:1,button:1 } ), - canvas: P, // Treat as normal inline element (not a transparent one). - caption: F, - cite: P, - code: P, - col: E, - colgroup: { col:1 }, - command: E, - datalist: X( { option:1 }, P ), - dd: F, - del: P, // Treat as normal inline element (not a transparent one). - details: X( { summary:1 }, F ), - dfn: P, - div: X( { style:1 }, F ), - dl: { dt:1,dd:1 }, - dt: F, - em: P, - embed: E, - fieldset: X( { legend:1 }, F ), - figcaption: F, - figure: X( { figcaption:1 }, F ), - footer: F, - form: F, - h1: P, - h2: P, - h3: P, - h4: P, - h5: P, - h6: P, - head: X( { title:1,base:1 }, M ), - header: F, - hgroup: { h1:1,h2:1,h3:1,h4:1,h5:1,h6:1 }, - hr: E, - html: X( { head:1,body:1 }, F, M ), // Head and body are optional... - i: P, - iframe: T, - img: E, - input: E, - ins: P, // Treat as normal inline element (not a transparent one). - kbd: P, - keygen: E, - label: P, - legend: P, - li: F, - link: E, - map: F, - mark: P, // Treat as normal inline element (not a transparent one). - menu: X( { li:1 }, F ), - meta: E, - meter: Y( P, { meter:1 } ), - nav: F, - noscript: X( { link:1,meta:1,style:1 }, P ), // Treat as normal inline element (not a transparent one). - object: X( { param:1 }, P ), // Treat as normal inline element (not a transparent one). - ol: { li:1 }, - optgroup: { option:1 }, - option: T, - output: P, - p: P, - param: E, - pre: P, - progress: Y( P, { progress:1 } ), - q: P, - rp: P, - rt: P, - ruby: X( { rp:1,rt:1 }, P ), - s: P, - samp: P, - script: T, - section: X( { style:1 }, F ), - select: { optgroup:1,option:1 }, - small: P, - source: E, - span: P, - strong: P, - style: T, - sub: P, - summary: P, - sup: P, - table: { caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1 }, - tbody: { tr:1 }, - td: F, - textarea: T, - tfoot: { tr:1 }, - th: F, - thead: { tr:1 }, - time: Y( P, { time:1 } ), - title: T, - tr: { th:1,td:1 }, - track: E, - u: P, - ul: { li:1 }, - 'var': P, - video: X( { source:1,track:1 }, F ), - wbr: E, - - // Deprecated tags. - acronym: P, - applet: X( { param:1 }, F ), - basefont: E, - big: P, - center: F, - dialog: E, - dir: { li:1 }, - font: P, - isindex: E, - noframes: F, - strike: P, - tt: P - }; - - X( dtd, { - /** - * List of block elements, like `

` or `

`. - */ - $block: X( { audio:1,dd:1,dt:1,li:1,video:1 }, FO, DFO ), - - /** - * List of elements that contains other blocks, in which block-level operations should be limited, - * this property is not intended to be checked directly, use {@link CKEDITOR.dom.elementPath#blockLimit} instead. - * - * Some examples of editor behaviors that are impacted by block limits: - * - * * Enter key never split a block-limit element; - * * Style application is constraint by the block limit of the current selection. - * * Pasted html will be inserted into the block limit of the current selection. - * - * **Note:** As an exception `
  • ` is not considered as a block limit, as it's generally used as a text block. - */ - $blockLimit: { article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,header:1,hgroup:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1 }, - - /** - * List of elements that contain character data. - */ - $cdata: { script:1,style:1 }, - - /** - * List of elements that are accepted as inline editing hosts. - */ - $editable: { address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,nav:1,p:1,pre:1,section:1 }, - - /** - * List of empty (self-closing) elements, like `
    ` or ``. - */ - $empty: { area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1 }, - - /** - * List of inline (`` like) elements. - */ - $inline: P, - - /** - * List of list root elements. - */ - $list: { dl:1,ol:1,ul:1 }, - - /** - * List of list item elements, like `
  • ` or `
    `. - */ - $listItem: { dd:1,dt:1,li:1 }, - - /** - * List of elements which may live outside body. - */ - $nonBodyContent: X( { body:1,head:1,html:1 }, dtd.head ), - - /** - * Elements that accept text nodes, but are not possible to edit into the browser. - */ - $nonEditable: { applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1 }, - - /** - * Elements that are considered objects, therefore selected as a whole in the editor. - */ - $object: { applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1 }, - - /** - * List of elements that can be ignored if empty, like `` or ``. - */ - $removeEmpty: { abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,'var':1 }, - - /** - * List of elements that have tabindex set to zero by default. - */ - $tabIndex: { a:1,area:1,button:1,input:1,object:1,select:1,textarea:1 }, - - /** - * List of elements used inside the `` element, like `` or `' ]; - for ( i = 0; i < childHtmlList.length; i++ ) { - var className = 'cke_dialog_ui_hbox_child', - styles = []; - if ( i === 0 ) - className = 'cke_dialog_ui_hbox_first'; - if ( i == childHtmlList.length - 1 ) - className = 'cke_dialog_ui_hbox_last'; - html.push( '' ); - } - html.push( '' ); - return html.join( '' ); - }; - - var attribs = { role: 'presentation' }; - elementDefinition && elementDefinition.align && ( attribs.align = elementDefinition.align ); - - CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type: 'hbox' }, htmlList, 'table', styles, attribs, innerHTML ); - }, - - /** - * Vertical layout box for dialog UI elements. - * - * @class CKEDITOR.ui.dialog.vbox - * @extends CKEDITOR.ui.dialog.hbox - * @constructor Creates a vbox class instance. - * @param {CKEDITOR.dialog} dialog Parent dialog object. - * @param {Array} childObjList - * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. - * @param {Array} childHtmlList - * Array of HTML code that correspond to the HTML output of all the - * objects in childObjList. - * @param {Array} htmlList Array of HTML code that this element will output to. - * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition - * The element definition. Accepted fields: - * - * * `width` (Optional) The width of the layout. - * * `heights` (Optional) The heights of individual cells. - * * `align` (Optional) The alignment of the layout. - * * `padding` (Optional) The padding width inside child cells. - * * `expand` (Optional) Whether the layout should expand - * vertically to fill its container. - */ - vbox: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { - if ( arguments.length < 3 ) - return; - - this._ || ( this._ = {} ); - - var children = this._.children = childObjList, - width = elementDefinition && elementDefinition.width || null, - heights = elementDefinition && elementDefinition.heights || null; - /** @ignore */ - var innerHTML = function() { - var html = [ '
    `. - */ - $tableContent: { caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1 }, - - /** - * List of "transparent" elements. See [W3C's definition of "transparent" element](http://dev.w3.org/html5/markup/terminology.html#transparent). - */ - $transparent: { a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1 }, - - /** - * List of elements that are not to exist standalone that must live under it's parent element. - */ - $intermediate: { caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1 } - } ); - - return dtd; -})(); - -// PACKAGER_RENAME( CKEDITOR.dtd ) -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.dom.event} class, which - * represents the a native DOM event object. - */ - -/** - * Represents a native DOM event object. - * - * @class - * @constructor Creates an event class instance. - * @param {Object} domEvent A native DOM event object. - */ -CKEDITOR.dom.event = function( domEvent ) { - /** - * The native DOM event object represented by this class instance. - * - * @readonly - */ - this.$ = domEvent; -}; - -CKEDITOR.dom.event.prototype = { - /** - * Gets the key code associated to the event. - * - * alert( event.getKey() ); // '65' is 'a' has been pressed - * - * @returns {Number} The key code. - */ - getKey: function() { - return this.$.keyCode || this.$.which; - }, - - /** - * Gets a number represeting the combination of the keys pressed during the - * event. It is the sum with the current key code and the {@link CKEDITOR#CTRL}, - * {@link CKEDITOR#SHIFT} and {@link CKEDITOR#ALT} constants. - * - * alert( event.getKeystroke() == 65 ); // 'a' key - * alert( event.getKeystroke() == CKEDITOR.CTRL + 65 ); // CTRL + 'a' key - * alert( event.getKeystroke() == CKEDITOR.CTRL + CKEDITOR.SHIFT + 65 ); // CTRL + SHIFT + 'a' key - * - * @returns {Number} The number representing the keys combination. - */ - getKeystroke: function() { - var keystroke = this.getKey(); - - if ( this.$.ctrlKey || this.$.metaKey ) - keystroke += CKEDITOR.CTRL; - - if ( this.$.shiftKey ) - keystroke += CKEDITOR.SHIFT; - - if ( this.$.altKey ) - keystroke += CKEDITOR.ALT; - - return keystroke; - }, - - /** - * Prevents the original behavior of the event to happen. It can optionally - * stop propagating the event in the event chain. - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * element.on( 'click', function( ev ) { - * // The DOM event object is passed by the 'data' property. - * var domEvent = ev.data; - * // Prevent the click to chave any effect in the element. - * domEvent.preventDefault(); - * } ); - * - * @param {Boolean} [stopPropagation=false] Stop propagating this event in the - * event chain. - */ - preventDefault: function( stopPropagation ) { - var $ = this.$; - if ( $.preventDefault ) - $.preventDefault(); - else - $.returnValue = false; - - if ( stopPropagation ) - this.stopPropagation(); - }, - - /** - * Stops this event propagation in the event chain. - */ - stopPropagation: function() { - var $ = this.$; - if ( $.stopPropagation ) - $.stopPropagation(); - else - $.cancelBubble = true; - }, - - /** - * Returns the DOM node where the event was targeted to. - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * element.on( 'click', function( ev ) { - * // The DOM event object is passed by the 'data' property. - * var domEvent = ev.data; - * // Add a CSS class to the event target. - * domEvent.getTarget().addClass( 'clicked' ); - * } ); - * - * @returns {CKEDITOR.dom.node} The target DOM node. - */ - getTarget: function() { - var rawNode = this.$.target || this.$.srcElement; - return rawNode ? new CKEDITOR.dom.node( rawNode ) : null; - }, - - /** - * Returns an integer value that indicates the current processing phase of an event. - * For browsers that doesn't support event phase, {@link CKEDITOR#EVENT_PHASE_AT_TARGET} is always returned. - * - * @returns {Number} One of {@link CKEDITOR#EVENT_PHASE_CAPTURING}, - * {@link CKEDITOR#EVENT_PHASE_AT_TARGET}, or {@link CKEDITOR#EVENT_PHASE_BUBBLING}. - */ - getPhase: function() { - return this.$.eventPhase || 2; - }, - - /** - * Retrieves the coordinates of the mouse pointer relative to the top-left - * corner of the document, in mouse related event. - * - * element.on( 'mousemouse', function( ev ) { - * var pageOffset = ev.data.getPageOffset(); - * alert( pageOffset.x ); // page offset X - * alert( pageOffset.y ); // page offset Y - * } ); - * - * @returns {Object} The object contains the position. - * @returns {Number} return.x - * @returns {Number} return.y - */ - getPageOffset : function() { - var doc = this.getTarget().getDocument().$; - var pageX = this.$.pageX || this.$.clientX + ( doc.documentElement.scrollLeft || doc.body.scrollLeft ); - var pageY = this.$.pageY || this.$.clientY + ( doc.documentElement.scrollTop || doc.body.scrollTop ); - return { x : pageX, y : pageY }; - } -}; - -// For the followind constants, we need to go over the Unicode boundaries -// (0x10FFFF) to avoid collision. - -/** - * CTRL key (0x110000). - * - * @readonly - * @property {Number} [=0x110000] - * @member CKEDITOR - */ -CKEDITOR.CTRL = 0x110000; - -/** - * SHIFT key (0x220000). - * - * @readonly - * @property {Number} [=0x220000] - * @member CKEDITOR - */ -CKEDITOR.SHIFT = 0x220000; - -/** - * ALT key (0x440000). - * - * @readonly - * @property {Number} [=0x440000] - * @member CKEDITOR - */ -CKEDITOR.ALT = 0x440000; - -/** - * Capturing phase. - * - * @readonly - * @property {Number} [=1] - * @member CKEDITOR - */ -CKEDITOR.EVENT_PHASE_CAPTURING = 1; - -/** - * Event at target. - * - * @readonly - * @property {Number} [=2] - * @member CKEDITOR - */ -CKEDITOR.EVENT_PHASE_AT_TARGET = 2; - -/** - * Bubbling phase. - * - * @readonly - * @property {Number} [=3] - * @member CKEDITOR - */ -CKEDITOR.EVENT_PHASE_BUBBLING = 3; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.editor} class, which is the base - * for other classes representing DOM objects. - */ - -/** - * Represents a DOM object. This class is not intended to be used directly. It - * serves as the base class for other classes representing specific DOM - * objects. - * - * @class - * @mixins CKEDITOR.event - * @constructor Creates a domObject class instance. - * @param {Object} nativeDomObject A native DOM object. - */ -CKEDITOR.dom.domObject = function( nativeDomObject ) { - if ( nativeDomObject ) { - /** - * The native DOM object represented by this class instance. - * - * var element = new CKEDITOR.dom.element( 'span' ); - * alert( element.$.nodeType ); // '1' - * - * @readonly - * @property {Object} - */ - this.$ = nativeDomObject; - } -}; - -CKEDITOR.dom.domObject.prototype = (function() { - // Do not define other local variables here. We want to keep the native - // listener closures as clean as possible. - - var getNativeListener = function( domObject, eventName ) { - return function( domEvent ) { - // In FF, when reloading the page with the editor focused, it may - // throw an error because the CKEDITOR global is not anymore - // available. So, we check it here first. (#2923) - if ( typeof CKEDITOR != 'undefined' ) - domObject.fire( eventName, new CKEDITOR.dom.event( domEvent ) ); - }; - }; - - return { - - /** - * Get the private `_` object which is bound to the native - * DOM object using {@link #getCustomData}. - * - * var elementA = new CKEDITOR.dom.element( nativeElement ); - * elementA.getPrivate().value = 1; - * ... - * var elementB = new CKEDITOR.dom.element( nativeElement ); - * elementB.getPrivate().value; // 1 - * - * @returns {Object} The private object. - */ - getPrivate: function() { - var priv; - - // Get the main private object from the custom data. Create it if not defined. - if ( !( priv = this.getCustomData( '_' ) ) ) - this.setCustomData( '_', ( priv = {} ) ); - - return priv; - }, - - // Docs inherited from event. - on: function( eventName ) { - // We customize the "on" function here. The basic idea is that we'll have - // only one listener for a native event, which will then call all listeners - // set to the event. - - // Get the listeners holder object. - var nativeListeners = this.getCustomData( '_cke_nativeListeners' ); - - if ( !nativeListeners ) { - nativeListeners = {}; - this.setCustomData( '_cke_nativeListeners', nativeListeners ); - } - - // Check if we have a listener for that event. - if ( !nativeListeners[ eventName ] ) { - var listener = nativeListeners[ eventName ] = getNativeListener( this, eventName ); - - if ( this.$.addEventListener ) - this.$.addEventListener( eventName, listener, !!CKEDITOR.event.useCapture ); - else if ( this.$.attachEvent ) - this.$.attachEvent( 'on' + eventName, listener ); - } - - // Call the original implementation. - return CKEDITOR.event.prototype.on.apply( this, arguments ); - }, - - // Docs inherited from event. - removeListener: function( eventName ) { - // Call the original implementation. - CKEDITOR.event.prototype.removeListener.apply( this, arguments ); - - // If we don't have listeners for this event, clean the DOM up. - if ( !this.hasListeners( eventName ) ) { - var nativeListeners = this.getCustomData( '_cke_nativeListeners' ); - var listener = nativeListeners && nativeListeners[ eventName ]; - if ( listener ) { - if ( this.$.removeEventListener ) - this.$.removeEventListener( eventName, listener, false ); - else if ( this.$.detachEvent ) - this.$.detachEvent( 'on' + eventName, listener ); - - delete nativeListeners[ eventName ]; - } - } - }, - - /** - * Removes any listener set on this object. - * - * To avoid memory leaks we must assure that there are no - * references left after the object is no longer needed. - */ - removeAllListeners: function() { - var nativeListeners = this.getCustomData( '_cke_nativeListeners' ); - for ( var eventName in nativeListeners ) { - var listener = nativeListeners[ eventName ]; - if ( this.$.detachEvent ) - this.$.detachEvent( 'on' + eventName, listener ); - else if ( this.$.removeEventListener ) - this.$.removeEventListener( eventName, listener, false ); - - delete nativeListeners[ eventName ]; - } - } - }; -})(); - -(function( domObjectProto ) { - var customData = {}; - - CKEDITOR.on( 'reset', function() { - customData = {}; - }); - - /** - * Determines whether the specified object is equal to the current object. - * - * var doc = new CKEDITOR.dom.document( document ); - * alert( doc.equals( CKEDITOR.document ) ); // true - * alert( doc == CKEDITOR.document ); // false - * - * @param {Object} object The object to compare with the current object. - * @returns {Boolean} `true` if the object is equal. - */ - domObjectProto.equals = function( object ) { - // Try/Catch to avoid IE permission error when object is from different document. - try { - return ( object && object.$ === this.$ ); - } catch ( er ) { - return false; - } - }; - - /** - * Sets a data slot value for this object. These values are shared by all - * instances pointing to that same DOM object. - * - * **Note:** The created data slot is only guarantied to be available on this unique dom node, - * thus any wish to continue access it from other element clones (either created by - * clone node or from `innerHtml`) will fail, for such usage, please use - * {@link CKEDITOR.dom.element#setAttribute} instead. - * - * var element = new CKEDITOR.dom.element( 'span' ); - * element.setCustomData( 'hasCustomData', true ); - * - * @param {String} key A key used to identify the data slot. - * @param {Object} value The value to set to the data slot. - * @returns {CKEDITOR.dom.domObject} This DOM object instance. - * @chainable - */ - domObjectProto.setCustomData = function( key, value ) { - var expandoNumber = this.getUniqueId(), - dataSlot = customData[ expandoNumber ] || ( customData[ expandoNumber ] = {} ); - - dataSlot[ key ] = value; - - return this; - }; - - /** - * Gets the value set to a data slot in this object. - * - * var element = new CKEDITOR.dom.element( 'span' ); - * alert( element.getCustomData( 'hasCustomData' ) ); // e.g. 'true' - * alert( element.getCustomData( 'nonExistingKey' ) ); // null - * - * @param {String} key The key used to identify the data slot. - * @returns {Object} This value set to the data slot. - */ - domObjectProto.getCustomData = function( key ) { - var expandoNumber = this.$[ 'data-cke-expando' ], - dataSlot = expandoNumber && customData[ expandoNumber ]; - - return ( dataSlot && key in dataSlot ) ? dataSlot[ key ] : null; - }; - - /** - * Removes the value in data slot under given `key`. - * - * @param {String} key - * @returns {Object} Removed value or `null` if not found. - */ - domObjectProto.removeCustomData = function( key ) { - var expandoNumber = this.$[ 'data-cke-expando' ], - dataSlot = expandoNumber && customData[ expandoNumber ], - retval, hadKey; - - if ( dataSlot ) { - retval = dataSlot[ key ]; - hadKey = key in dataSlot; - delete dataSlot[ key ]; - } - - return hadKey ? retval : null; - }; - - /** - * Removes any data stored on this object. - * To avoid memory leaks we must assure that there are no - * references left after the object is no longer needed. - */ - domObjectProto.clearCustomData = function() { - // Clear all event listeners - this.removeAllListeners(); - - var expandoNumber = this.$[ 'data-cke-expando' ]; - expandoNumber && delete customData[ expandoNumber ]; - }; - - /** - * Gets an ID that can be used to identiquely identify this DOM object in - * the running session. - * - * @returns {Number} A unique ID. - */ - domObjectProto.getUniqueId = function() { - return this.$[ 'data-cke-expando' ] || ( this.$[ 'data-cke-expando' ] = CKEDITOR.tools.getNextNumber() ); - }; - - // Implement CKEDITOR.event. - CKEDITOR.event.implementOn( domObjectProto ); - -})( CKEDITOR.dom.domObject.prototype ); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.dom.node} class which is the base - * class for classes that represent DOM nodes. - */ - -/** - * Base class for classes representing DOM nodes. This constructor may return - * an instance of a class that inherits from this class, like - * {@link CKEDITOR.dom.element} or {@link CKEDITOR.dom.text}. - * - * @class - * @extends CKEDITOR.dom.domObject - * @constructor Creates a node class instance. - * @param {Object} domNode A native DOM node. - * @see CKEDITOR.dom.element - * @see CKEDITOR.dom.text - */ -CKEDITOR.dom.node = function( domNode ) { - if ( domNode ) { - var type = domNode.nodeType == CKEDITOR.NODE_DOCUMENT ? 'document' : domNode.nodeType == CKEDITOR.NODE_ELEMENT ? 'element' : domNode.nodeType == CKEDITOR.NODE_TEXT ? 'text' : domNode.nodeType == CKEDITOR.NODE_COMMENT ? 'comment' : domNode.nodeType == CKEDITOR.NODE_DOCUMENT_FRAGMENT ? 'documentFragment' : 'domObject'; // Call the base constructor otherwise. - - return new CKEDITOR.dom[ type ]( domNode ); - } - - return this; -}; - -CKEDITOR.dom.node.prototype = new CKEDITOR.dom.domObject(); - -/** - * Element node type. - * - * @readonly - * @property {Number} [=1] - * @member CKEDITOR - */ -CKEDITOR.NODE_ELEMENT = 1; - -/** - * Document node type. - * - * @readonly - * @property {Number} [=9] - * @member CKEDITOR - */ -CKEDITOR.NODE_DOCUMENT = 9; - -/** - * Text node type. - * - * @readonly - * @property {Number} [=3] - * @member CKEDITOR - */ -CKEDITOR.NODE_TEXT = 3; - -/** - * Comment node type. - * - * @readonly - * @property {Number} [=8] - * @member CKEDITOR - */ -CKEDITOR.NODE_COMMENT = 8; - -/** - * Document fragment node type. - * - * @readonly - * @property {Number} [=11] - * @member CKEDITOR - */ -CKEDITOR.NODE_DOCUMENT_FRAGMENT = 11; - -CKEDITOR.POSITION_IDENTICAL = 0; -CKEDITOR.POSITION_DISCONNECTED = 1; -CKEDITOR.POSITION_FOLLOWING = 2; -CKEDITOR.POSITION_PRECEDING = 4; -CKEDITOR.POSITION_IS_CONTAINED = 8; -CKEDITOR.POSITION_CONTAINS = 16; - -CKEDITOR.tools.extend( CKEDITOR.dom.node.prototype, { - /** - * Makes this node a child of another element. - * - * var p = new CKEDITOR.dom.element( 'p' ); - * var strong = new CKEDITOR.dom.element( 'strong' ); - * strong.appendTo( p ); - * - * // Result: '

    '. - * - * @param {CKEDITOR.dom.element} element The target element to which this node will be appended. - * @returns {CKEDITOR.dom.element} The target element. - */ - appendTo: function( element, toStart ) { - element.append( this, toStart ); - return element; - }, - - /** - * Clone this node. - * - * **Note**: Values set by {#setCustomData} won't be available in the clone. - * - * @param {Boolean} [includeChildren=false] If `true` then all node's - * children will be cloned recursively. - * @param {Boolean} [cloneId=false] Whether ID attributes should be cloned too. - * @returns {CKEDITOR.dom.node} Clone of this node. - */ - clone: function( includeChildren, cloneId ) { - var $clone = this.$.cloneNode( includeChildren ); - - var removeIds = function( node ) { - // Reset data-cke-expando only when has been cloned (IE and only for some types of objects). - if ( node['data-cke-expando'] ) - node['data-cke-expando'] = false; - - if ( node.nodeType != CKEDITOR.NODE_ELEMENT ) - return; - if ( !cloneId ) - node.removeAttribute( 'id', false ); - - if ( includeChildren ) { - var childs = node.childNodes; - for ( var i = 0; i < childs.length; i++ ) - removeIds( childs[ i ] ); - } - }; - - // The "id" attribute should never be cloned to avoid duplication. - removeIds( $clone ); - - return new CKEDITOR.dom.node( $clone ); - }, - - /** - * Check if node is preceded by any sibling. - * - * @returns {Boolean} - */ - hasPrevious: function() { - return !!this.$.previousSibling; - }, - - /** - * Check if node is succeeded by any sibling. - * - * @returns {Boolean} - */ - hasNext: function() { - return !!this.$.nextSibling; - }, - - /** - * Inserts this element after a node. - * - * var em = new CKEDITOR.dom.element( 'em' ); - * var strong = new CKEDITOR.dom.element( 'strong' ); - * strong.insertAfter( em ); - * - * // Result: '' - * - * @param {CKEDITOR.dom.node} node The node that will precede this element. - * @returns {CKEDITOR.dom.node} The node preceding this one after insertion. - */ - insertAfter: function( node ) { - node.$.parentNode.insertBefore( this.$, node.$.nextSibling ); - return node; - }, - - /** - * Inserts this element before a node. - * - * var em = new CKEDITOR.dom.element( 'em' ); - * var strong = new CKEDITOR.dom.element( 'strong' ); - * strong.insertBefore( em ); - * - * // result: '' - * - * @param {CKEDITOR.dom.node} node The node that will succeed this element. - * @returns {CKEDITOR.dom.node} The node being inserted. - */ - insertBefore: function( node ) { - node.$.parentNode.insertBefore( this.$, node.$ ); - return node; - }, - - /** - * Inserts node before this node. - * - * var em = new CKEDITOR.dom.element( 'em' ); - * var strong = new CKEDITOR.dom.element( 'strong' ); - * strong.insertBeforeMe( em ); - * - * // result: '' - * - * @param {CKEDITOR.dom.node} node The node that will preceed this element. - * @returns {CKEDITOR.dom.node} The node being inserted. - */ - insertBeforeMe: function( node ) { - this.$.parentNode.insertBefore( node.$, this.$ ); - return node; - }, - - /** - * Retrieves a uniquely identifiable tree address for this node. - * The tree address returned is an array of integers, with each integer - * indicating a child index of a DOM node, starting from - * `document.documentElement`. - * - * For example, assuming `` is the second child - * of `` (`` being the first), - * and we would like to address the third child under the - * fourth child of ``, the tree address returned would be: - * `[1, 3, 2]`. - * - * The tree address cannot be used for finding back the DOM tree node once - * the DOM tree structure has been modified. - * - * @param {Boolean} [normalized=false] See {@link #getIndex}. - * @returns {Array} The address. - */ - getAddress: function( normalized ) { - var address = []; - var $documentElement = this.getDocument().$.documentElement; - var node = this.$; - - while ( node && node != $documentElement ) { - var parentNode = node.parentNode; - - if ( parentNode ) { - // Get the node index. For performance, call getIndex - // directly, instead of creating a new node object. - address.unshift( this.getIndex.call({ $: node }, normalized ) ); - } - - node = parentNode; - } - - return address; - }, - - /** - * Gets the document containing this element. - * - * var element = CKEDITOR.document.getById( 'example' ); - * alert( element.getDocument().equals( CKEDITOR.document ) ); // true - * - * @returns {CKEDITOR.dom.document} The document. - */ - getDocument: function() { - return new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument ); - }, - - /** - * Get index of a node in an array of its parent.childNodes. - * - * Let's assume having childNodes array: - * - * [ emptyText, element1, text, text, element2 ] - * element1.getIndex(); // 1 - * element1.getIndex( true ); // 0 - * element2.getIndex(); // 4 - * element2.getIndex( true ); // 2 - * - * @param {Boolean} normalized When `true` empty text nodes and one followed - * by another one text node are not counted in. - * @returns {Number} Index of a node. - */ - getIndex: function( normalized ) { - // Attention: getAddress depends on this.$ - // getIndex is called on a plain object: { $ : node } - - var current = this.$, - index = -1, - isNormalizing; - - if ( !this.$.parentNode ) - return index; - - do { - // Bypass blank node and adjacent text nodes. - if ( normalized && current != this.$ && current.nodeType == CKEDITOR.NODE_TEXT && ( isNormalizing || !current.nodeValue ) ) { - continue; - } - - index++; - isNormalizing = current.nodeType == CKEDITOR.NODE_TEXT; - } - while ( ( current = current.previousSibling ) ) - - return index; - }, - - /** - * @todo - */ - getNextSourceNode: function( startFromSibling, nodeType, guard ) { - // If "guard" is a node, transform it in a function. - if ( guard && !guard.call ) { - var guardNode = guard; - guard = function( node ) { - return !node.equals( guardNode ); - }; - } - - var node = ( !startFromSibling && this.getFirst && this.getFirst() ), - parent; - - // Guarding when we're skipping the current element( no children or 'startFromSibling' ). - // send the 'moving out' signal even we don't actually dive into. - if ( !node ) { - if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false ) - return null; - node = this.getNext(); - } - - while ( !node && ( parent = ( parent || this ).getParent() ) ) { - // The guard check sends the "true" paramenter to indicate that - // we are moving "out" of the element. - if ( guard && guard( parent, true ) === false ) - return null; - - node = parent.getNext(); - } - - if ( !node ) - return null; - - if ( guard && guard( node ) === false ) - return null; - - if ( nodeType && nodeType != node.type ) - return node.getNextSourceNode( false, nodeType, guard ); - - return node; - }, - - /** - * @todo - */ - getPreviousSourceNode: function( startFromSibling, nodeType, guard ) { - if ( guard && !guard.call ) { - var guardNode = guard; - guard = function( node ) { - return !node.equals( guardNode ); - }; - } - - var node = ( !startFromSibling && this.getLast && this.getLast() ), - parent; - - // Guarding when we're skipping the current element( no children or 'startFromSibling' ). - // send the 'moving out' signal even we don't actually dive into. - if ( !node ) { - if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false ) - return null; - node = this.getPrevious(); - } - - while ( !node && ( parent = ( parent || this ).getParent() ) ) { - // The guard check sends the "true" paramenter to indicate that - // we are moving "out" of the element. - if ( guard && guard( parent, true ) === false ) - return null; - - node = parent.getPrevious(); - } - - if ( !node ) - return null; - - if ( guard && guard( node ) === false ) - return null; - - if ( nodeType && node.type != nodeType ) - return node.getPreviousSourceNode( false, nodeType, guard ); - - return node; - }, - - /** - * Gets the node that preceed this element in its parent's child list. - * - * var element = CKEDITOR.dom.element.createFromHtml( '
    prevExample
    ' ); - * var first = element.getLast().getPrev(); - * alert( first.getName() ); // 'i' - * - * @param {Function} [evaluator] Filtering the result node. - * @returns {CKEDITOR.dom.node} The previous node or null if not available. - */ - getPrevious: function( evaluator ) { - var previous = this.$, - retval; - do { - previous = previous.previousSibling; - - // Avoid returning the doc type node. - // http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-412266927 - retval = previous && previous.nodeType != 10 && new CKEDITOR.dom.node( previous ); - } - while ( retval && evaluator && !evaluator( retval ) ) - return retval; - }, - - /** - * Gets the node that follows this element in its parent's child list. - * - * var element = CKEDITOR.dom.element.createFromHtml( '
    Examplenext
    ' ); - * var last = element.getFirst().getNext(); - * alert( last.getName() ); // 'i' - * - * @param {Function} [evaluator] Filtering the result node. - * @returns {CKEDITOR.dom.node} The next node or null if not available. - */ - getNext: function( evaluator ) { - var next = this.$, - retval; - do { - next = next.nextSibling; - retval = next && new CKEDITOR.dom.node( next ); - } - while ( retval && evaluator && !evaluator( retval ) ) - return retval; - }, - - /** - * Gets the parent element for this node. - * - * var node = editor.document.getBody().getFirst(); - * var parent = node.getParent(); - * alert( node.getName() ); // 'body' - * - * @param {Boolean} [allowFragmentParent=false] Consider also parent node that is of - * fragment type {@link CKEDITOR#NODE_DOCUMENT_FRAGMENT}. - * @returns {CKEDITOR.dom.element} The parent element. - */ - getParent: function( allowFragmentParent ) { - var parent = this.$.parentNode; - return ( parent && ( parent.nodeType == CKEDITOR.NODE_ELEMENT || allowFragmentParent && parent.nodeType == CKEDITOR.NODE_DOCUMENT_FRAGMENT ) ) ? new CKEDITOR.dom.node( parent ) : null; - }, - - /** - * @todo - */ - getParents: function( closerFirst ) { - var node = this; - var parents = []; - - do { - parents[ closerFirst ? 'push' : 'unshift' ]( node ); - } - while ( ( node = node.getParent() ) ) - - return parents; - }, - - /** - * @todo - */ - getCommonAncestor: function( node ) { - if ( node.equals( this ) ) - return this; - - if ( node.contains && node.contains( this ) ) - return node; - - var start = this.contains ? this : this.getParent(); - - do { - if ( start.contains( node ) ) return start; - } - while ( ( start = start.getParent() ) ); - - return null; - }, - - /** - * @todo - */ - getPosition: function( otherNode ) { - var $ = this.$; - var $other = otherNode.$; - - if ( $.compareDocumentPosition ) - return $.compareDocumentPosition( $other ); - - // IE and Safari have no support for compareDocumentPosition. - - if ( $ == $other ) - return CKEDITOR.POSITION_IDENTICAL; - - // Only element nodes support contains and sourceIndex. - if ( this.type == CKEDITOR.NODE_ELEMENT && otherNode.type == CKEDITOR.NODE_ELEMENT ) { - if ( $.contains ) { - if ( $.contains( $other ) ) - return CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING; - - if ( $other.contains( $ ) ) - return CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING; - } - - if ( 'sourceIndex' in $ ) { - return ( $.sourceIndex < 0 || $other.sourceIndex < 0 ) ? CKEDITOR.POSITION_DISCONNECTED : ( $.sourceIndex < $other.sourceIndex ) ? CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING; - } - } - - // For nodes that don't support compareDocumentPosition, contains - // or sourceIndex, their "address" is compared. - - var addressOfThis = this.getAddress(), - addressOfOther = otherNode.getAddress(), - minLevel = Math.min( addressOfThis.length, addressOfOther.length ); - - // Determinate preceed/follow relationship. - for ( var i = 0; i <= minLevel - 1; i++ ) { - if ( addressOfThis[ i ] != addressOfOther[ i ] ) { - if ( i < minLevel ) { - return addressOfThis[ i ] < addressOfOther[ i ] ? CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING; - } - break; - } - } - - // Determinate contains/contained relationship. - return ( addressOfThis.length < addressOfOther.length ) ? CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING; - }, - - /** - * Gets the closest ancestor node of this node, specified by its name. - * - * // Suppose we have the following HTML structure: - * //

    Some text

    - * // If node == - * ascendant = node.getAscendant( 'div' ); // ascendant ==
    - * ascendant = node.getAscendant( 'b' ); // ascendant == null - * ascendant = node.getAscendant( 'b', true ); // ascendant == - * ascendant = node.getAscendant( { div:1,p:1 } ); // Searches for the first 'div' or 'p': ascendant ==
    - * - * @since 3.6.1 - * @param {String} reference The name of the ancestor node to search or - * an object with the node names to search for. - * @param {Boolean} [includeSelf] Whether to include the current - * node in the search. - * @returns {CKEDITOR.dom.node} The located ancestor node or null if not found. - */ - getAscendant: function( reference, includeSelf ) { - var $ = this.$, - name; - - if ( !includeSelf ) - $ = $.parentNode; - - while ( $ ) { - if ( $.nodeName && ( name = $.nodeName.toLowerCase(), ( typeof reference == 'string' ? name == reference : name in reference ) ) ) - return new CKEDITOR.dom.node( $ ); - - try { - $ = $.parentNode; - } catch( e ) { - $ = null; - } - } - return null; - }, - - /** - * @todo - */ - hasAscendant: function( name, includeSelf ) { - var $ = this.$; - - if ( !includeSelf ) - $ = $.parentNode; - - while ( $ ) { - if ( $.nodeName && $.nodeName.toLowerCase() == name ) - return true; - - $ = $.parentNode; - } - return false; - }, - - /** - * @todo - */ - move: function( target, toStart ) { - target.append( this.remove(), toStart ); - }, - - /** - * Removes this node from the document DOM. - * - * var element = CKEDITOR.document.getById( 'MyElement' ); - * element.remove(); - * - * @param {Boolean} [preserveChildren=false] Indicates that the children - * elements must remain in the document, removing only the outer tags. - */ - remove: function( preserveChildren ) { - var $ = this.$; - var parent = $.parentNode; - - if ( parent ) { - if ( preserveChildren ) { - // Move all children before the node. - for ( var child; - ( child = $.firstChild ); ) { - parent.insertBefore( $.removeChild( child ), $ ); - } - } - - parent.removeChild( $ ); - } - - return this; - }, - - /** - * @todo - */ - replace: function( nodeToReplace ) { - this.insertBefore( nodeToReplace ); - nodeToReplace.remove(); - }, - - /** - * @todo - */ - trim: function() { - this.ltrim(); - this.rtrim(); - }, - - /** - * @todo - */ - ltrim: function() { - var child; - while ( this.getFirst && ( child = this.getFirst() ) ) { - if ( child.type == CKEDITOR.NODE_TEXT ) { - var trimmed = CKEDITOR.tools.ltrim( child.getText() ), - originalLength = child.getLength(); - - if ( !trimmed ) { - child.remove(); - continue; - } else if ( trimmed.length < originalLength ) { - child.split( originalLength - trimmed.length ); - - // IE BUG: child.remove() may raise JavaScript errors here. (#81) - this.$.removeChild( this.$.firstChild ); - } - } - break; - } - }, - - /** - * @todo - */ - rtrim: function() { - var child; - while ( this.getLast && ( child = this.getLast() ) ) { - if ( child.type == CKEDITOR.NODE_TEXT ) { - var trimmed = CKEDITOR.tools.rtrim( child.getText() ), - originalLength = child.getLength(); - - if ( !trimmed ) { - child.remove(); - continue; - } else if ( trimmed.length < originalLength ) { - child.split( trimmed.length ); - - // IE BUG: child.getNext().remove() may raise JavaScript errors here. - // (#81) - this.$.lastChild.parentNode.removeChild( this.$.lastChild ); - } - } - break; - } - - if ( !CKEDITOR.env.ie && !CKEDITOR.env.opera ) { - child = this.$.lastChild; - - if ( child && child.type == 1 && child.nodeName.toLowerCase() == 'br' ) { - // Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#324). - child.parentNode.removeChild( child ); - } - } - }, - - /** - * Checks if this node is read-only (should not be changed). - * - * **Note:** When `attributeCheck` is not used, this method only work for elements - * that are already presented in the document, otherwise the result - * is not guaranteed, it's mainly for performance consideration. - * - * // For the following HTML: - * //
    Some text
    - * - * // If "ele" is the above
    - * element.isReadOnly(); // true - * - * @since 3.5 - * @returns {Boolean} - */ - isReadOnly: function() { - var element = this; - if ( this.type != CKEDITOR.NODE_ELEMENT ) - element = this.getParent(); - - if ( element && typeof element.$.isContentEditable != 'undefined' ) - return !( element.$.isContentEditable || element.data( 'cke-editable' ) ); - else { - // Degrade for old browsers which don't support "isContentEditable", e.g. FF3 - - while ( element ) { - if ( element.data( 'cke-editable' ) ) - break; - - if ( element.getAttribute( 'contentEditable' ) == 'false' ) - return true; - else if ( element.getAttribute( 'contentEditable' ) == 'true' ) - break; - - element = element.getParent(); - } - - // Reached the root of DOM tree, no editable found. - return !element; - } - } -}); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which - * represents a DOM document. - */ - -/** - * Represents a DOM window. - * - * var document = new CKEDITOR.dom.window( window ); - * - * @class - * @extends CKEDITOR.dom.domObject - * @constructor Creates a window class instance. - * @param {Object} domWindow A native DOM window. - */ -CKEDITOR.dom.window = function( domWindow ) { - CKEDITOR.dom.domObject.call( this, domWindow ); -}; - -CKEDITOR.dom.window.prototype = new CKEDITOR.dom.domObject(); - -CKEDITOR.tools.extend( CKEDITOR.dom.window.prototype, { - /** - * Moves the selection focus to this window. - * - * var win = new CKEDITOR.dom.window( window ); - * win.focus(); - */ - focus: function() { - this.$.focus(); - }, - - /** - * Gets the width and height of this window's viewable area. - * - * var win = new CKEDITOR.dom.window( window ); - * var size = win.getViewPaneSize(); - * alert( size.width ); - * alert( size.height ); - * - * @returns {Object} An object with the `width` and `height` - * properties containing the size. - */ - getViewPaneSize: function() { - var doc = this.$.document, - stdMode = doc.compatMode == 'CSS1Compat'; - return { - width: ( stdMode ? doc.documentElement.clientWidth : doc.body.clientWidth ) || 0, - height: ( stdMode ? doc.documentElement.clientHeight : doc.body.clientHeight ) || 0 - }; - }, - - /** - * Gets the current position of the window's scroll. - * - * var win = new CKEDITOR.dom.window( window ); - * var pos = win.getScrollPosition(); - * alert( pos.x ); - * alert( pos.y ); - * - * @returns {Object} An object with the `x` and `y` properties - * containing the scroll position. - */ - getScrollPosition: function() { - var $ = this.$; - - if ( 'pageXOffset' in $ ) { - return { - x: $.pageXOffset || 0, - y: $.pageYOffset || 0 - }; - } else { - var doc = $.document; - return { - x: doc.documentElement.scrollLeft || doc.body.scrollLeft || 0, - y: doc.documentElement.scrollTop || doc.body.scrollTop || 0 - }; - } - }, - - /** - * Gets the frame element containing this window context. - * - * @returns {CKEDITOR.dom.element} The frame element or `null` if not in a frame context. - */ - getFrame: function() { - var iframe = this.$.frameElement; - return iframe ? new CKEDITOR.dom.element.get( iframe ) : null; - } -}); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which - * represents a DOM document. - */ - -/** - * Represents a DOM document. - * - * var document = new CKEDITOR.dom.document( document ); - * - * @class - * @extends CKEDITOR.dom.domObject - * @constructor Creates a document class instance. - * @param {Object} domDocument A native DOM document. - */ -CKEDITOR.dom.document = function( domDocument ) { - CKEDITOR.dom.domObject.call( this, domDocument ); -}; - -// PACKAGER_RENAME( CKEDITOR.dom.document ) - -CKEDITOR.dom.document.prototype = new CKEDITOR.dom.domObject(); - -CKEDITOR.tools.extend( CKEDITOR.dom.document.prototype, { - /** - * The node type. This is a constant value set to {@link CKEDITOR#NODE_DOCUMENT}. - * - * @readonly - * @property {Number} [=CKEDITOR.NODE_DOCUMENT] - */ - type: CKEDITOR.NODE_DOCUMENT, - - /** - * Appends a CSS file to the document. - * - * CKEDITOR.document.appendStyleSheet( '/mystyles.css' ); - * - * @param {String} cssFileUrl The CSS file URL. - */ - appendStyleSheet: function( cssFileUrl ) { - if ( this.$.createStyleSheet ) - this.$.createStyleSheet( cssFileUrl ); - else { - var link = new CKEDITOR.dom.element( 'link' ); - link.setAttributes({ - rel: 'stylesheet', - type: 'text/css', - href: cssFileUrl - }); - - this.getHead().append( link ); - } - }, - - /** - * Creates a CSS style sheet and inserts it into the document. - * - * @param cssStyleText {String} CSS style text. - * @returns {Object} The created DOM native style sheet object. - */ - appendStyleText: function( cssStyleText ) { - if ( this.$.createStyleSheet ) { - var styleSheet = this.$.createStyleSheet( "" ); - styleSheet.cssText = cssStyleText; - } else { - var style = new CKEDITOR.dom.element( 'style', this ); - style.append( new CKEDITOR.dom.text( cssStyleText, this ) ); - this.getHead().append( style ); - } - - return styleSheet || style.$.sheet; - }, - - /** - * Creates {@link CKEDITOR.dom.element} instance in this document. - * - * @returns {CKEDITOR.dom.element} - * @todo - */ - createElement: function( name, attribsAndStyles ) { - var element = new CKEDITOR.dom.element( name, this ); - - if ( attribsAndStyles ) { - if ( attribsAndStyles.attributes ) - element.setAttributes( attribsAndStyles.attributes ); - - if ( attribsAndStyles.styles ) - element.setStyles( attribsAndStyles.styles ); - } - - return element; - }, - - /** - * Creates {@link CKEDITOR.dom.text} instance in this document. - * - * @param {String} text Value of the text node. - * @returns {CKEDITOR.dom.element} - */ - createText: function( text ) { - return new CKEDITOR.dom.text( text, this ); - }, - - /** - * Moves the selection focus to this document's window. - */ - focus: function() { - this.getWindow().focus(); - }, - - /** - * Returns the element that is currently designated as the active element in the document. - * - * **Note:** Only one element can be active at a time in a document. - * An active element does not necessarily have focus, - * but an element with focus is always the active element in a document. - * - * @returns {CKEDITOR.dom.element} - */ - getActive: function() { - return new CKEDITOR.dom.element( this.$.activeElement ); - }, - - /** - * Gets an element based on its id. - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * alert( element.getId() ); // 'myElement' - * - * @param {String} elementId The element id. - * @returns {CKEDITOR.dom.element} The element instance, or null if not found. - */ - getById: function( elementId ) { - var $ = this.$.getElementById( elementId ); - return $ ? new CKEDITOR.dom.element( $ ) : null; - }, - - /** - * Gets a node based on its address. See {@link CKEDITOR.dom.node#getAddress}. - * - * @param {Array} address - * @param {Boolean} [normalized=false] - */ - getByAddress: function( address, normalized ) { - var $ = this.$.documentElement; - - for ( var i = 0; $ && i < address.length; i++ ) { - var target = address[ i ]; - - if ( !normalized ) { - $ = $.childNodes[ target ]; - continue; - } - - var currentIndex = -1; - - for ( var j = 0; j < $.childNodes.length; j++ ) { - var candidate = $.childNodes[ j ]; - - if ( normalized === true && candidate.nodeType == 3 && candidate.previousSibling && candidate.previousSibling.nodeType == 3 ) { - continue; - } - - currentIndex++; - - if ( currentIndex == target ) { - $ = candidate; - break; - } - } - } - - return $ ? new CKEDITOR.dom.node( $ ) : null; - }, - - /** - * Gets elements list based on given tag name. - * - * @param {String} tagName The element tag name. - * @returns {CKEDITOR.dom.nodeList} The nodes list. - */ - getElementsByTag: function( tagName, namespace ) { - if ( !( CKEDITOR.env.ie && !( document.documentMode > 8 ) ) && namespace ) - tagName = namespace + ':' + tagName; - return new CKEDITOR.dom.nodeList( this.$.getElementsByTagName( tagName ) ); - }, - - /** - * Gets the `` element for this document. - * - * var element = CKEDITOR.document.getHead(); - * alert( element.getName() ); // 'head' - * - * @returns {CKEDITOR.dom.element} The `` element. - */ - getHead: function() { - var head = this.$.getElementsByTagName( 'head' )[ 0 ]; - if ( !head ) - head = this.getDocumentElement().append( new CKEDITOR.dom.element( 'head' ), true ); - else - head = new CKEDITOR.dom.element( head ); - - return head; - }, - - /** - * Gets the `` element for this document. - * - * var element = CKEDITOR.document.getBody(); - * alert( element.getName() ); // 'body' - * - * @returns {CKEDITOR.dom.element} The `` element. - */ - getBody: function() { - return new CKEDITOR.dom.element( this.$.body ); - }, - - /** - * Gets the DOM document element for this document. - * - * @returns {CKEDITOR.dom.element} The DOM document element. - */ - getDocumentElement: function() { - return new CKEDITOR.dom.element( this.$.documentElement ); - }, - - /** - * Gets the window object that holds this document. - * - * @returns {CKEDITOR.dom.window} The window object. - */ - getWindow: function() { - var win = new CKEDITOR.dom.window( this.$.parentWindow || this.$.defaultView ); - - return ( this.getWindow = function() { - return win; - })(); - }, - - /** - * Defines the document contents through document.write. Note that the - * previous document contents will be lost (cleaned). - * - * document.write( - * '' + - * 'Sample Doc' + - * 'Document contents created by code' + - * '' - * ); - * - * @since 3.5 - * @param {String} html The HTML defining the document contents. - */ - write: function( html ) { - // Don't leave any history log in IE. (#5657) - this.$.open( 'text/html', 'replace' ); - - // Support for custom document.domain in IE. - CKEDITOR.env.isCustomDomain() && ( this.$.domain = document.domain ); - - this.$.write( html ); - this.$.close(); - } -}); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * Represents a list of {@link CKEDITOR.dom.node} objects. - * It's a wrapper for native nodes list. - * - * var nodeList = CKEDITOR.document.getBody().getChildren(); - * alert( nodeList.count() ); // number [0;N] - * - * @class - * @constructor Creates a document class instance. - * @param {Object} nativeList - */ -CKEDITOR.dom.nodeList = function( nativeList ) { - this.$ = nativeList; -}; - -CKEDITOR.dom.nodeList.prototype = { - /** - * Get count of nodes in this list. - * - * @returns {Number} - */ - count: function() { - return this.$.length; - }, - - /** - * Get node from the list. - * - * @returns {CKEDITOR.dom.node} - */ - getItem: function( index ) { - if ( index < 0 || index >= this.$.length ) - return null; - - var $node = this.$[ index ]; - return $node ? new CKEDITOR.dom.node( $node ) : null; - } -}; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Defines the {@link CKEDITOR.dom.element} class, which - * represents a DOM element. - */ - -/** - * Represents a DOM element. - * - * // Create a new element. - * var element = new CKEDITOR.dom.element( 'span' ); - * - * // Create an element based on a native DOM element. - * var element = new CKEDITOR.dom.element( document.getElementById( 'myId' ) ); - * - * @class - * @extends CKEDITOR.dom.node - * @constructor Creates an element class instance. - * @param {Object/String} element A native DOM element or the element name for - * new elements. - * @param {CKEDITOR.dom.document} [ownerDocument] The document that will contain - * the element in case of element creation. - */ -CKEDITOR.dom.element = function( element, ownerDocument ) { - if ( typeof element == 'string' ) - element = ( ownerDocument ? ownerDocument.$ : document ).createElement( element ); - - // Call the base constructor (we must not call CKEDITOR.dom.node). - CKEDITOR.dom.domObject.call( this, element ); -}; - -// PACKAGER_RENAME( CKEDITOR.dom.element ) -/** - * The the {@link CKEDITOR.dom.element} representing and element. If the - * element is a native DOM element, it will be transformed into a valid - * CKEDITOR.dom.element object. - * - * var element = new CKEDITOR.dom.element( 'span' ); - * alert( element == CKEDITOR.dom.element.get( element ) ); // true - * - * var element = document.getElementById( 'myElement' ); - * alert( CKEDITOR.dom.element.get( element ).getName() ); // (e.g.) 'p' - * - * @static - * @param {String/Object} element Element's id or name or native DOM element. - * @returns {CKEDITOR.dom.element} The transformed element. - */ -CKEDITOR.dom.element.get = function( element ) { - var el = typeof element == 'string' ? document.getElementById( element ) || document.getElementsByName( element )[ 0 ] : element; - - return el && ( el.$ ? el : new CKEDITOR.dom.element( el ) ); -}; - -CKEDITOR.dom.element.prototype = new CKEDITOR.dom.node(); - -/** - * Creates an instance of the {@link CKEDITOR.dom.element} class based on the - * HTML representation of an element. - * - * var element = CKEDITOR.dom.element.createFromHtml( 'My element' ); - * alert( element.getName() ); // 'strong' - * - * @static - * @param {String} html The element HTML. It should define only one element in - * the "root" level. The "root" element can have child nodes, but not siblings. - * @returns {CKEDITOR.dom.element} The element instance. - */ -CKEDITOR.dom.element.createFromHtml = function( html, ownerDocument ) { - var temp = new CKEDITOR.dom.element( 'div', ownerDocument ); - temp.setHtml( html ); - - // When returning the node, remove it from its parent to detach it. - return temp.getFirst().remove(); -}; - -/** - * @static - * @todo - */ -CKEDITOR.dom.element.setMarker = function( database, element, name, value ) { - var id = element.getCustomData( 'list_marker_id' ) || ( element.setCustomData( 'list_marker_id', CKEDITOR.tools.getNextNumber() ).getCustomData( 'list_marker_id' ) ), - markerNames = element.getCustomData( 'list_marker_names' ) || ( element.setCustomData( 'list_marker_names', {} ).getCustomData( 'list_marker_names' ) ); - database[ id ] = element; - markerNames[ name ] = 1; - - return element.setCustomData( name, value ); -}; - -/** - * @static - * @todo - */ -CKEDITOR.dom.element.clearAllMarkers = function( database ) { - for ( var i in database ) - CKEDITOR.dom.element.clearMarkers( database, database[ i ], 1 ); -}; - -/** - * @static - * @todo - */ -CKEDITOR.dom.element.clearMarkers = function( database, element, removeFromDatabase ) { - var names = element.getCustomData( 'list_marker_names' ), - id = element.getCustomData( 'list_marker_id' ); - for ( var i in names ) - element.removeCustomData( i ); - element.removeCustomData( 'list_marker_names' ); - if ( removeFromDatabase ) { - element.removeCustomData( 'list_marker_id' ); - delete database[ id ]; - } -}; -( function() { - -CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, { - /** - * The node type. This is a constant value set to {@link CKEDITOR#NODE_ELEMENT}. - * - * @readonly - * @property {Number} [=CKEDITOR.NODE_ELEMENT] - */ - type: CKEDITOR.NODE_ELEMENT, - - /** - * Adds a CSS class to the element. It appends the class to the - * already existing names. - * - * var element = new CKEDITOR.dom.element( 'div' ); - * element.addClass( 'classA' ); //
    - * element.addClass( 'classB' ); //
    - * element.addClass( 'classA' ); //
    - * - * @param {String} className The name of the class to be added. - */ - addClass: function( className ) { - var c = this.$.className; - if ( c ) { - var regex = new RegExp( '(?:^|\\s)' + className + '(?:\\s|$)', '' ); - if ( !regex.test( c ) ) - c += ' ' + className; - } - this.$.className = c || className; - }, - - /** - * Removes a CSS class name from the elements classes. Other classes - * remain untouched. - * - * var element = new CKEDITOR.dom.element( 'div' ); - * element.addClass( 'classA' ); //
    - * element.addClass( 'classB' ); //
    - * element.removeClass( 'classA' ); //
    - * element.removeClass( 'classB' ); //
    - * - * @chainable - * @param {String} className The name of the class to remove. - */ - removeClass: function( className ) { - var c = this.getAttribute( 'class' ); - if ( c ) { - var regex = new RegExp( '(?:^|\\s+)' + className + '(?=\\s|$)', 'i' ); - if ( regex.test( c ) ) { - c = c.replace( regex, '' ).replace( /^\s+/, '' ); - - if ( c ) - this.setAttribute( 'class', c ); - else - this.removeAttribute( 'class' ); - } - } - - return this; - }, - - /** - * Checks if element has class name. - * - * @param {String} className - * @returns {Boolean} - */ - hasClass: function( className ) { - var regex = new RegExp( '(?:^|\\s+)' + className + '(?=\\s|$)', '' ); - return regex.test( this.getAttribute( 'class' ) ); - }, - - /** - * Append a node as a child of this element. - * - * var p = new CKEDITOR.dom.element( 'p' ); - * - * var strong = new CKEDITOR.dom.element( 'strong' ); - * p.append( strong ); - * - * var em = p.append( 'em' ); - * - * // Result: '

    ' - * - * @param {CKEDITOR.dom.node/String} node The node or element name to be appended. - * @param {Boolean} [toStart=false] Indicates that the element is to be appended at the start. - * @returns {CKEDITOR.dom.node} The appended node. - */ - append: function( node, toStart ) { - if ( typeof node == 'string' ) - node = this.getDocument().createElement( node ); - - if ( toStart ) - this.$.insertBefore( node.$, this.$.firstChild ); - else - this.$.appendChild( node.$ ); - - return node; - }, - - /** - * Append HTML as a child(ren) of this element. - * - * @param {String} html - */ - appendHtml: function( html ) { - if ( !this.$.childNodes.length ) - this.setHtml( html ); - else { - var temp = new CKEDITOR.dom.element( 'div', this.getDocument() ); - temp.setHtml( html ); - temp.moveChildren( this ); - } - }, - - /** - * Append text to this element. - * - * var p = new CKEDITOR.dom.element( 'p' ); - * p.appendText( 'This is' ); - * p.appendText( ' some text' ); - * - * // Result: '

    This is some text

    ' - * - * @param {String} text The text to be appended. - * @returns {CKEDITOR.dom.node} The appended node. - */ - appendText: function( text ) { - if ( this.$.text != undefined ) - this.$.text += text; - else - this.append( new CKEDITOR.dom.text( text ) ); - }, - - /** - * @todo - */ - appendBogus: function() { - var lastChild = this.getLast(); - - // Ignore empty/spaces text. - while ( lastChild && lastChild.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.rtrim( lastChild.getText() ) ) - lastChild = lastChild.getPrevious(); - if ( !lastChild || !lastChild.is || !lastChild.is( 'br' ) ) { - var bogus = CKEDITOR.env.opera ? this.getDocument().createText( '' ) : this.getDocument().createElement( 'br' ); - - CKEDITOR.env.gecko && bogus.setAttribute( 'type', '_moz' ); - - this.append( bogus ); - } - }, - - /** - * Breaks one of the ancestor element in the element position, moving - * this element between the broken parts. - * - * // Before breaking: - * // This is some sample test text - * // If "element" is and "parent" is : - * // This is some sample test text - * element.breakParent( parent ); - * - * // Before breaking: - * // This is some sample test text - * // If "element" is and "parent" is : - * // This is some sample test text - * element.breakParent( parent ); - * - * @param {CKEDITOR.dom.element} parent The anscestor element to get broken. - */ - breakParent: function( parent ) { - var range = new CKEDITOR.dom.range( this.getDocument() ); - - // We'll be extracting part of this element, so let's use our - // range to get the correct piece. - range.setStartAfter( this ); - range.setEndAfter( parent ); - - // Extract it. - var docFrag = range.extractContents(); - - // Move the element outside the broken element. - range.insertNode( this.remove() ); - - // Re-insert the extracted piece after the element. - docFrag.insertAfterNode( this ); - }, - - /** - * Checks if this element contains given node. - * - * @method - * @param {CKEDITOR.dom.node} node - * @returns {Boolean} - */ - contains: CKEDITOR.env.ie || CKEDITOR.env.webkit ? - function( node ) { - var $ = this.$; - - return node.type != CKEDITOR.NODE_ELEMENT ? $.contains( node.getParent().$ ) : $ != node.$ && $.contains( node.$ ); - } : function( node ) { - return !!( this.$.compareDocumentPosition( node.$ ) & 16 ); - }, - - /** - * Moves the selection focus to this element. - * - * var element = CKEDITOR.document.getById( 'myTextarea' ); - * element.focus(); - * - * @method - * @param {Boolean} defer Whether to asynchronously defer the - * execution by 100 ms. - */ - focus: (function() { - function exec() { - // IE throws error if the element is not visible. - try { - this.$.focus(); - } catch ( e ) {} - } - - return function( defer ) { - if ( defer ) - CKEDITOR.tools.setTimeout( exec, 100, this ); - else - exec.call( this ); - }; - })(), - - /** - * Gets the inner HTML of this element. - * - * var element = CKEDITOR.dom.element.createFromHtml( '
    Example
    ' ); - * alert( element.getHtml() ); // 'Example' - * - * @returns {String} The inner HTML of this element. - */ - getHtml: function() { - var retval = this.$.innerHTML; - // Strip tags in IE. (#3341). - return CKEDITOR.env.ie ? retval.replace( /<\?[^>]*>/g, '' ) : retval; - }, - - /** - * Gets the outer (inner plus tags) HTML of this element. - * - * var element = CKEDITOR.dom.element.createFromHtml( '
    Example
    ' ); - * alert( element.getOuterHtml() ); // '
    Example
    ' - * - * @returns {String} The outer HTML of this element. - */ - getOuterHtml: function() { - if ( this.$.outerHTML ) { - // IE includes the tag in the outerHTML of - // namespaced element. So, we must strip it here. (#3341) - return this.$.outerHTML.replace( /<\?[^>]*>/, '' ); - } - - var tmpDiv = this.$.ownerDocument.createElement( 'div' ); - tmpDiv.appendChild( this.$.cloneNode( true ) ); - return tmpDiv.innerHTML; - }, - - /** - * Retrieve the bounding rectangle of the current element, in pixels, - * relative to the upper-left corner of the browser's client area. - * - * @returns {Object} The dimensions of the DOM element including - * `left`, `top`, `right`, `bottom`, `width` and `height`. - */ - getClientRect: function() { - // http://help.dottoro.com/ljvmcrrn.php - var rect = CKEDITOR.tools.extend( {}, this.$.getBoundingClientRect() ); - - !rect.width && ( rect.width = rect.right - rect.left ); - !rect.height && ( rect.height = rect.bottom - rect.top ); - - return rect; - }, - - /** - * Sets the inner HTML of this element. - * - * var p = new CKEDITOR.dom.element( 'p' ); - * p.setHtml( 'Inner HTML' ); - * - * // Result: '

    Inner HTML

    ' - * - * @method - * @param {String} html The HTML to be set for this element. - * @returns {String} The inserted HTML. - */ - setHtml: (function() { - var standard = function( html ) { - return ( this.$.innerHTML = html ); - }; - - if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { - // old IEs throws error on HTML manipulation (through the "innerHTML" property) - // on the element which resides in an DTD invalid position, e.g.
    - // fortunately it can be worked around with DOM manipulation. - return function( html ) { - try { return standard.call( this, html ); } - catch ( e ) { - this.$.innerHTML = ''; - - var temp = new CKEDITOR.dom.element( 'body', this.getDocument() ); - temp.$.innerHTML = html; - - var children = temp.getChildren(); - while( children.count() ) - this.append( children.getItem( 0 ) ); - - return html; - } - }; - } else - return standard; - })(), - - /** - * Sets the element contents as plain text. - * - * var element = new CKEDITOR.dom.element( 'div' ); - * element.setText( 'A > B & C < D' ); - * alert( element.innerHTML ); // 'A > B & C < D' - * - * @param {String} text The text to be set. - * @returns {String} The inserted text. - */ - setText: function( text ) { - CKEDITOR.dom.element.prototype.setText = ( this.$.innerText != undefined ) ? - function( text ) { - return this.$.innerText = text; - } : function( text ) { - return this.$.textContent = text; - }; - - return this.setText( text ); - }, - - /** - * Gets the value of an element attribute. - * - * var element = CKEDITOR.dom.element.createFromHtml( '' ); - * alert( element.getAttribute( 'type' ) ); // 'text' - * - * @method - * @param {String} name The attribute name. - * @returns {String} The attribute value or null if not defined. - */ - getAttribute: (function() { - var standard = function( name ) { - return this.$.getAttribute( name, 2 ); - }; - - if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ) { - return function( name ) { - switch ( name ) { - case 'class': - name = 'className'; - break; - - case 'http-equiv': - name = 'httpEquiv'; - break; - - case 'name': - return this.$.name; - - case 'tabindex': - var tabIndex = standard.call( this, name ); - - // IE returns tabIndex=0 by default for all - // elements. For those elements, - // getAtrribute( 'tabindex', 2 ) returns 32768 - // instead. So, we must make this check to give a - // uniform result among all browsers. - if ( tabIndex !== 0 && this.$.tabIndex === 0 ) - tabIndex = null; - - return tabIndex; - break; - - case 'checked': - { - var attr = this.$.attributes.getNamedItem( name ), - attrValue = attr.specified ? attr.nodeValue // For value given by parser. - : this.$.checked; // For value created via DOM interface. - - return attrValue ? 'checked' : null; - } - - case 'hspace': - case 'value': - return this.$[ name ]; - - case 'style': - // IE does not return inline styles via getAttribute(). See #2947. - return this.$.style.cssText; - - case 'contenteditable': - case 'contentEditable': - return this.$.attributes.getNamedItem( 'contentEditable' ).specified ? this.$.getAttribute( 'contentEditable' ) : null; - } - - return standard.call( this, name ); - }; - } else - return standard; - })(), - - /** - * Gets the nodes list containing all children of this element. - * - * @returns {CKEDITOR.dom.nodeList} - */ - getChildren: function() { - return new CKEDITOR.dom.nodeList( this.$.childNodes ); - }, - - /** - * Gets the current computed value of one of the element CSS style - * properties. - * - * var element = new CKEDITOR.dom.element( 'span' ); - * alert( element.getComputedStyle( 'display' ) ); // 'inline' - * - * @method - * @param {String} propertyName The style property name. - * @returns {String} The property value. - */ - getComputedStyle: CKEDITOR.env.ie ? - function( propertyName ) { - return this.$.currentStyle[ CKEDITOR.tools.cssStyleToDomStyle( propertyName ) ]; - } : function( propertyName ) { - var style = this.getWindow().$.getComputedStyle( this.$, null ); - // Firefox may return null if we call the above on a hidden iframe. (#9117) - return style ? style.getPropertyValue( propertyName ) : ''; - }, - - /** - * Gets the DTD entries for this element. - * - * @returns {Object} An object containing the list of elements accepted - * by this element. - */ - getDtd: function() { - var dtd = CKEDITOR.dtd[ this.getName() ]; - - this.getDtd = function() { - return dtd; - }; - - return dtd; - }, - - /** - * Gets all this element's descendants having given tag name. - * - * @method - * @param {String} tagName - */ - getElementsByTag: CKEDITOR.dom.document.prototype.getElementsByTag, - - /** - * Gets the computed tabindex for this element. - * - * var element = CKEDITOR.document.getById( 'myDiv' ); - * alert( element.getTabIndex() ); // (e.g.) '-1' - * - * @method - * @returns {Number} The tabindex value. - */ - getTabIndex: CKEDITOR.env.ie ? - function() { - var tabIndex = this.$.tabIndex; - - // IE returns tabIndex=0 by default for all elements. In - // those cases we must check that the element really has - // the tabindex attribute set to zero, or it is one of - // those element that should have zero by default. - if ( tabIndex === 0 && !CKEDITOR.dtd.$tabIndex[ this.getName() ] && parseInt( this.getAttribute( 'tabindex' ), 10 ) !== 0 ) - tabIndex = -1; - - return tabIndex; - } : CKEDITOR.env.webkit ? - function() { - var tabIndex = this.$.tabIndex; - - // Safari returns "undefined" for elements that should not - // have tabindex (like a div). So, we must try to get it - // from the attribute. - // https://bugs.webkit.org/show_bug.cgi?id=20596 - if ( tabIndex == undefined ) { - tabIndex = parseInt( this.getAttribute( 'tabindex' ), 10 ); - - // If the element don't have the tabindex attribute, - // then we should return -1. - if ( isNaN( tabIndex ) ) - tabIndex = -1; - } - - return tabIndex; - } : function() { - return this.$.tabIndex; - }, - - /** - * Gets the text value of this element. - * - * Only in IE (which uses innerText), `
    ` will cause linebreaks, - * and sucessive whitespaces (including line breaks) will be reduced to - * a single space. This behavior is ok for us, for now. It may change - * in the future. - * - * var element = CKEDITOR.dom.element.createFromHtml( '
    Sample text.
    ' ); - * alert( element.getText() ); // 'Sample text.' - * - * @returns {String} The text value. - */ - getText: function() { - return this.$.textContent || this.$.innerText || ''; - }, - - /** - * Gets the window object that contains this element. - * - * @returns {CKEDITOR.dom.window} The window object. - */ - getWindow: function() { - return this.getDocument().getWindow(); - }, - - /** - * Gets the value of the `id` attribute of this element. - * - * var element = CKEDITOR.dom.element.createFromHtml( '

    ' ); - * alert( element.getId() ); // 'myId' - * - * @returns {String} The element id, or null if not available. - */ - getId: function() { - return this.$.id || null; - }, - - /** - * Gets the value of the `name` attribute of this element. - * - * var element = CKEDITOR.dom.element.createFromHtml( '' ); - * alert( element.getNameAtt() ); // 'myName' - * - * @returns {String} The element name, or null if not available. - */ - getNameAtt: function() { - return this.$.name || null; - }, - - /** - * Gets the element name (tag name). The returned name is guaranteed to - * be always full lowercased. - * - * var element = new CKEDITOR.dom.element( 'span' ); - * alert( element.getName() ); // 'span' - * - * @returns {String} The element name. - */ - getName: function() { - // Cache the lowercased name inside a closure. - var nodeName = this.$.nodeName.toLowerCase(); - - if ( CKEDITOR.env.ie && !( document.documentMode > 8 ) ) { - var scopeName = this.$.scopeName; - if ( scopeName != 'HTML' ) - nodeName = scopeName.toLowerCase() + ':' + nodeName; - } - - return ( this.getName = function() { - return nodeName; - })(); - }, - - /** - * Gets the value set to this element. This value is usually available - * for form field elements. - * - * @returns {String} The element value. - */ - getValue: function() { - return this.$.value; - }, - - /** - * Gets the first child node of this element. - * - * var element = CKEDITOR.dom.element.createFromHtml( '
    Example
    ' ); - * var first = element.getFirst(); - * alert( first.getName() ); // 'b' - * - * @param {Function} evaluator Filtering the result node. - * @returns {CKEDITOR.dom.node} The first child node or null if not available. - */ - getFirst: function( evaluator ) { - var first = this.$.firstChild, - retval = first && new CKEDITOR.dom.node( first ); - if ( retval && evaluator && !evaluator( retval ) ) - retval = retval.getNext( evaluator ); - - return retval; - }, - - /** - * See {@link #getFirst}. - * - * @param {Function} evaluator Filtering the result node. - * @returns {CKEDITOR.dom.node} - */ - getLast: function( evaluator ) { - var last = this.$.lastChild, - retval = last && new CKEDITOR.dom.node( last ); - if ( retval && evaluator && !evaluator( retval ) ) - retval = retval.getPrevious( evaluator ); - - return retval; - }, - - /** - * Gets CSS style value. - * - * @param {String} name The CSS property name. - * @returns {String} Style value. - */ - getStyle: function( name ) { - return this.$.style[ CKEDITOR.tools.cssStyleToDomStyle( name ) ]; - }, - - /** - * Checks if the element name matches the specified criteria. - * - * var element = new CKEDITOR.element( 'span' ); - * alert( element.is( 'span' ) ); // true - * alert( element.is( 'p', 'span' ) ); // true - * alert( element.is( 'p' ) ); // false - * alert( element.is( 'p', 'div' ) ); // false - * alert( element.is( { p:1,span:1 } ) ); // true - * - * @param {String.../Object} name One or more names to be checked, or a {@link CKEDITOR.dtd} object. - * @returns {Boolean} `true` if the element name matches any of the names. - */ - is: function() { - var name = this.getName(); - - // Check against the specified DTD liternal. - if ( typeof arguments[ 0 ] == 'object' ) - return !!arguments[ 0 ][ name ]; - - // Check for tag names - for ( var i = 0; i < arguments.length; i++ ) { - if ( arguments[ i ] == name ) - return true; - } - return false; - }, - - /** - * Decide whether one element is able to receive cursor. - * - * @param {Boolean} [textCursor=true] Only consider element that could receive text child. - */ - isEditable: function( textCursor ) { - var name = this.getName(); - - if ( this.isReadOnly() || this.getComputedStyle( 'display' ) == 'none' || - this.getComputedStyle( 'visibility' ) == 'hidden' || - CKEDITOR.dtd.$nonEditable[ name ] || - CKEDITOR.dtd.$empty[ name ] || - ( this.is( 'a' ) && - ( this.data( 'cke-saved-name' ) || this.hasAttribute( 'name' ) ) && - !this.getChildCount() - ) ) - { - return false; - } - - if ( textCursor !== false ) { - // Get the element DTD (defaults to span for unknown elements). - var dtd = CKEDITOR.dtd[ name ] || CKEDITOR.dtd.span; - // In the DTD # == text node. - return !!( dtd && dtd[ '#' ] ); - } - - return true; - }, - - /** - * Compare this element's inner html, tag name, attributes, etc. with other one. - * - * See [W3C's DOM Level 3 spec - node#isEqualNode](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isEqualNode) - * for more details. - * - * @param {CKEDITOR.dom.element} otherElement Element to compare. - * @returns {Boolean} - */ - isIdentical: function( otherElement ) { - // do shallow clones, but with IDs - var thisEl = this.clone( 0, 1 ), - otherEl = otherElement.clone( 0, 1 ); - - // Remove distractions. - thisEl.removeAttributes( [ '_moz_dirty', 'data-cke-expando', 'data-cke-saved-href', 'data-cke-saved-name' ] ); - otherEl.removeAttributes( [ '_moz_dirty', 'data-cke-expando', 'data-cke-saved-href', 'data-cke-saved-name' ] ); - - // Native comparison available. - if ( thisEl.$.isEqualNode ) { - // Styles order matters. - thisEl.$.style.cssText = CKEDITOR.tools.normalizeCssText( thisEl.$.style.cssText ); - otherEl.$.style.cssText = CKEDITOR.tools.normalizeCssText( otherEl.$.style.cssText ); - return thisEl.$.isEqualNode( otherEl.$ ); - } else { - thisEl = thisEl.getOuterHtml(); - otherEl = otherEl.getOuterHtml(); - - // Fix tiny difference between link href in older IEs. - if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 && this.is( 'a' ) ) { - var parent = this.getParent(); - if ( parent.type == CKEDITOR.NODE_ELEMENT ) { - var el = parent.clone(); - el.setHtml( thisEl ), thisEl = el.getHtml(); - el.setHtml( otherEl ), otherEl = el.getHtml(); - } - } - - return thisEl == otherEl; - } - }, - - /** - * Checks if this element is visible. May not work if the element is - * child of an element with visibility set to `hidden`, but works well - * on the great majority of cases. - * - * @returns {Boolean} True if the element is visible. - */ - isVisible: function() { - var isVisible = ( this.$.offsetHeight || this.$.offsetWidth ) && this.getComputedStyle( 'visibility' ) != 'hidden', - elementWindow, elementWindowFrame; - - // Webkit and Opera report non-zero offsetHeight despite that - // element is inside an invisible iframe. (#4542) - if ( isVisible && ( CKEDITOR.env.webkit || CKEDITOR.env.opera ) ) { - elementWindow = this.getWindow(); - - if ( !elementWindow.equals( CKEDITOR.document.getWindow() ) && ( elementWindowFrame = elementWindow.$.frameElement ) ) { - isVisible = new CKEDITOR.dom.element( elementWindowFrame ).isVisible(); - } - } - - return !!isVisible; - }, - - /** - * Whether it's an empty inline elements which has no visual impact when removed. - * - * @returns {Boolean} - */ - isEmptyInlineRemoveable: function() { - if ( !CKEDITOR.dtd.$removeEmpty[ this.getName() ] ) - return false; - - var children = this.getChildren(); - for ( var i = 0, count = children.count(); i < count; i++ ) { - var child = children.getItem( i ); - - if ( child.type == CKEDITOR.NODE_ELEMENT && child.data( 'cke-bookmark' ) ) - continue; - - if ( child.type == CKEDITOR.NODE_ELEMENT && !child.isEmptyInlineRemoveable() || child.type == CKEDITOR.NODE_TEXT && CKEDITOR.tools.trim( child.getText() ) ) { - return false; - } - } - return true; - }, - - /** - * Checks if the element has any defined attributes. - * - * var element = CKEDITOR.dom.element.createFromHtml( '
    Example
    ' ); - * alert( element.hasAttributes() ); // true - * - * var element = CKEDITOR.dom.element.createFromHtml( '
    Example
    ' ); - * alert( element.hasAttributes() ); // false - * - * @method - * @returns {Boolean} True if the element has attributes. - */ - hasAttributes: CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ? - function() { - var attributes = this.$.attributes; - - for ( var i = 0; i < attributes.length; i++ ) { - var attribute = attributes[ i ]; - - switch ( attribute.nodeName ) { - case 'class': - // IE has a strange bug. If calling removeAttribute('className'), - // the attributes collection will still contain the "class" - // attribute, which will be marked as "specified", even if the - // outerHTML of the element is not displaying the class attribute. - // Note : I was not able to reproduce it outside the editor, - // but I've faced it while working on the TC of #1391. - if ( this.getAttribute( 'class' ) ) - return true; - - // Attributes to be ignored. - case 'data-cke-expando': - continue; - - /*jsl:fallthru*/ - - default: - if ( attribute.specified ) - return true; - } - } - - return false; - } : function() { - var attrs = this.$.attributes, - attrsNum = attrs.length; - - // The _moz_dirty attribute might get into the element after pasting (#5455) - var execludeAttrs = { 'data-cke-expando':1,_moz_dirty:1 }; - - return attrsNum > 0 && ( attrsNum > 2 || !execludeAttrs[ attrs[ 0 ].nodeName ] || ( attrsNum == 2 && !execludeAttrs[ attrs[ 1 ].nodeName ] ) ); - }, - - /** - * Checks if the specified attribute is defined for this element. - * - * @method - * @param {String} name The attribute name. - * @returns {Boolean} `true` if the specified attribute is defined. - */ - hasAttribute: (function() { - function standard( name ) { - var $attr = this.$.attributes.getNamedItem( name ); - return !!( $attr && $attr.specified ); - } - - return ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) ? - function( name ) { - // On IE < 8 the name attribute cannot be retrieved - // right after the element creation and setting the - // name with setAttribute. - if ( name == 'name' ) - return !!this.$.name; - - return standard.call( this, name ); - } : standard; - })(), - - /** - * Hides this element (sets `display: none`). - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * element.hide(); - */ - hide: function() { - this.setStyle( 'display', 'none' ); - }, - - /** - * Moves this element's children to the target element. - * - * @param {CKEDITOR.dom.element} target - * @param {Boolean} [toStart=false] Insert moved children at the - * beginning of the target element. - */ - moveChildren: function( target, toStart ) { - var $ = this.$; - target = target.$; - - if ( $ == target ) - return; - - var child; - - if ( toStart ) { - while ( ( child = $.lastChild ) ) - target.insertBefore( $.removeChild( child ), target.firstChild ); - } else { - while ( ( child = $.firstChild ) ) - target.appendChild( $.removeChild( child ) ); - } - }, - - /** - * Merges sibling elements that are identical to this one. - * - * Identical child elements are also merged. For example: - * - * => - * - * @method - * @param {Boolean} [inlineOnly=true] Allow only inline elements to be merged. - */ - mergeSiblings: (function() { - function mergeElements( element, sibling, isNext ) { - if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT ) { - // Jumping over bookmark nodes and empty inline elements, e.g. , - // queuing them to be moved later. (#5567) - var pendingNodes = []; - - while ( sibling.data( 'cke-bookmark' ) || sibling.isEmptyInlineRemoveable() ) { - pendingNodes.push( sibling ); - sibling = isNext ? sibling.getNext() : sibling.getPrevious(); - if ( !sibling || sibling.type != CKEDITOR.NODE_ELEMENT ) - return; - } - - if ( element.isIdentical( sibling ) ) { - // Save the last child to be checked too, to merge things like - // => - var innerSibling = isNext ? element.getLast() : element.getFirst(); - - // Move pending nodes first into the target element. - while ( pendingNodes.length ) - pendingNodes.shift().move( element, !isNext ); - - sibling.moveChildren( element, !isNext ); - sibling.remove(); - - // Now check the last inner child (see two comments above). - if ( innerSibling && innerSibling.type == CKEDITOR.NODE_ELEMENT ) - innerSibling.mergeSiblings(); - } - } - } - - return function( inlineOnly ) { - if ( !( inlineOnly === false || CKEDITOR.dtd.$removeEmpty[ this.getName() ] || this.is( 'a' ) ) ) // Merge empty links and anchors also. (#5567) - { - return; - } - - mergeElements( this, this.getNext(), true ); - mergeElements( this, this.getPrevious() ); - }; - })(), - - /** - * Shows this element (displays it). - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * element.show(); - */ - show: function() { - this.setStyles({ - display: '', - visibility: '' - }); - }, - - /** - * Sets the value of an element attribute. - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * element.setAttribute( 'class', 'myClass' ); - * element.setAttribute( 'title', 'This is an example' ); - * - * @method - * @param {String} name The name of the attribute. - * @param {String} value The value to be set to the attribute. - * @returns {CKEDITOR.dom.element} This element instance. - */ - setAttribute: (function() { - var standard = function( name, value ) { - this.$.setAttribute( name, value ); - return this; - }; - - if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ) { - return function( name, value ) { - if ( name == 'class' ) - this.$.className = value; - else if ( name == 'style' ) - this.$.style.cssText = value; - else if ( name == 'tabindex' ) // Case sensitive. - this.$.tabIndex = value; - else if ( name == 'checked' ) - this.$.checked = value; - else if ( name == 'contenteditable' ) - standard.call( this, 'contentEditable', value ); - else - standard.apply( this, arguments ); - return this; - }; - } else if ( CKEDITOR.env.ie8Compat && CKEDITOR.env.secure ) { - return function( name, value ) { - // IE8 throws error when setting src attribute to non-ssl value. (#7847) - if ( name == 'src' && value.match( /^http:\/\// ) ) - try { - standard.apply( this, arguments ); - } catch ( e ) {} else - standard.apply( this, arguments ); - return this; - }; - } else - return standard; - })(), - - /** - * Sets the value of several element attributes. - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * element.setAttributes( { - * 'class': 'myClass', - * title: 'This is an example' - * } ); - * - * @chainable - * @param {Object} attributesPairs An object containing the names and - * values of the attributes. - * @returns {CKEDITOR.dom.element} This element instance. - */ - setAttributes: function( attributesPairs ) { - for ( var name in attributesPairs ) - this.setAttribute( name, attributesPairs[ name ] ); - return this; - }, - - /** - * Sets the element value. This function is usually used with form - * field element. - * - * @chainable - * @param {String} value The element value. - * @returns {CKEDITOR.dom.element} This element instance. - */ - setValue: function( value ) { - this.$.value = value; - return this; - }, - - /** - * Removes an attribute from the element. - * - * var element = CKEDITOR.dom.element.createFromHtml( '
    ' ); - * element.removeAttribute( 'class' ); - * - * @method - * @param {String} name The attribute name. - */ - removeAttribute: (function() { - var standard = function( name ) { - this.$.removeAttribute( name ); - }; - - if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ) { - return function( name ) { - if ( name == 'class' ) - name = 'className'; - else if ( name == 'tabindex' ) - name = 'tabIndex'; - else if ( name == 'contenteditable' ) - name = 'contentEditable'; - standard.call( this, name ); - }; - } else - return standard; - })(), - - /** - * Removes all element's attributes or just given ones. - * - * @param {Array} [attributes] The array with attributes names. - */ - removeAttributes: function( attributes ) { - if ( CKEDITOR.tools.isArray( attributes ) ) { - for ( var i = 0; i < attributes.length; i++ ) - this.removeAttribute( attributes[ i ] ); - } else { - for ( var attr in attributes ) - attributes.hasOwnProperty( attr ) && this.removeAttribute( attr ); - } - }, - - /** - * Removes a style from the element. - * - * var element = CKEDITOR.dom.element.createFromHtml( '
    ' ); - * element.removeStyle( 'display' ); - * - * @method - * @param {String} name The style name. - */ - removeStyle: function( name ) { - // Removes the specified property from the current style object. - var $ = this.$.style; - - // "removeProperty" need to be specific on the following styles. - if ( !$.removeProperty && ( name == 'border' || name == 'margin' || name == 'padding' ) ) { - var names = expandedRules( name ); - for ( var i = 0 ; i < names.length ; i++ ) - this.removeStyle( names[ i ] ); - return; - } - - $.removeProperty ? $.removeProperty( name ) : $.removeAttribute( CKEDITOR.tools.cssStyleToDomStyle( name ) ); - - // Eventually remove empty style attribute. - if ( !this.$.style.cssText ) - this.removeAttribute( 'style' ); - }, - - /** - * Sets the value of an element style. - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * element.setStyle( 'background-color', '#ff0000' ); - * element.setStyle( 'margin-top', '10px' ); - * element.setStyle( 'float', 'right' ); - * - * @param {String} name The name of the style. The CSS naming notation - * must be used (e.g. `background-color`). - * @param {String} value The value to be set to the style. - * @returns {CKEDITOR.dom.element} This element instance. - */ - setStyle: function( name, value ) { - this.$.style[ CKEDITOR.tools.cssStyleToDomStyle( name ) ] = value; - return this; - }, - - /** - * Sets the value of several element styles. - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * element.setStyles( { - * position: 'absolute', - * float: 'right' - * } ); - * - * @param {Object} stylesPairs An object containing the names and - * values of the styles. - * @returns {CKEDITOR.dom.element} This element instance. - */ - setStyles: function( stylesPairs ) { - for ( var name in stylesPairs ) - this.setStyle( name, stylesPairs[ name ] ); - return this; - }, - - /** - * Sets the opacity of an element. - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * element.setOpacity( 0.75 ); - * - * @param {Number} opacity A number within the range `[0.0, 1.0]`. - */ - setOpacity: function( opacity ) { - if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { - opacity = Math.round( opacity * 100 ); - this.setStyle( 'filter', opacity >= 100 ? '' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')' ); - } else - this.setStyle( 'opacity', opacity ); - }, - - /** - * Makes the element and its children unselectable. - * - * var element = CKEDITOR.document.getById( 'myElement' ); - * element.unselectable(); - * - * @method - */ - unselectable: function() { - // CSS unselectable. - this.setStyles( CKEDITOR.tools.cssVendorPrefix( 'user-select', 'none' ) ); - - // For IE/Opera which doesn't support for the above CSS style, - // the unselectable="on" attribute only specifies the selection - // process cannot start in the element itself, and it doesn't inherit. - if ( CKEDITOR.env.ie || CKEDITOR.env.opera ) { - this.setAttribute( 'unselectable', 'on' ); - - var element, - elements = this.getElementsByTag( "*" ); - - for ( var i = 0, count = elements.count() ; i < count ; i++ ) { - element = elements.getItem( i ); - element.setAttribute( 'unselectable', 'on' ); - } - } - }, - - /** - * Gets closest positioned (`position != static`) ancestor. - * - * @returns {CKEDITOR.dom.element} Positioned ancestor or `null`. - */ - getPositionedAncestor: function() { - var current = this; - while ( current.getName() != 'html' ) { - if ( current.getComputedStyle( 'position' ) != 'static' ) - return current; - - current = current.getParent(); - } - return null; - }, - - /** - * Gets this element's position in document. - * - * @param {CKEDITOR.dom.document} [refDocument] - * @returns {Object} Element's position. - * @returns {Number} return.x - * @returns {Number} return.y - * @todo refDocument - */ - getDocumentPosition: function( refDocument ) { - var x = 0, - y = 0, - doc = this.getDocument(), - body = doc.getBody(), - quirks = doc.$.compatMode == 'BackCompat'; - - if ( document.documentElement[ "getBoundingClientRect" ] ) { - var box = this.$.getBoundingClientRect(), - $doc = doc.$, - $docElem = $doc.documentElement; - - var clientTop = $docElem.clientTop || body.$.clientTop || 0, - clientLeft = $docElem.clientLeft || body.$.clientLeft || 0, - needAdjustScrollAndBorders = true; - - // #3804: getBoundingClientRect() works differently on IE and non-IE - // browsers, regarding scroll positions. - // - // On IE, the top position of the element is always 0, no matter - // how much you scrolled down. - // - // On other browsers, the top position of the element is negative - // scrollTop. - if ( CKEDITOR.env.ie ) { - var inDocElem = doc.getDocumentElement().contains( this ), - inBody = doc.getBody().contains( this ); - - needAdjustScrollAndBorders = ( quirks && inBody ) || ( !quirks && inDocElem ); - } - - if ( needAdjustScrollAndBorders ) { - x = box.left + ( !quirks && $docElem.scrollLeft || body.$.scrollLeft ); - x -= clientLeft; - y = box.top + ( !quirks && $docElem.scrollTop || body.$.scrollTop ); - y -= clientTop; - } - } else { - var current = this, - previous = null, - offsetParent; - while ( current && !( current.getName() == 'body' || current.getName() == 'html' ) ) { - x += current.$.offsetLeft - current.$.scrollLeft; - y += current.$.offsetTop - current.$.scrollTop; - - // Opera includes clientTop|Left into offsetTop|Left. - if ( !current.equals( this ) ) { - x += ( current.$.clientLeft || 0 ); - y += ( current.$.clientTop || 0 ); - } - - var scrollElement = previous; - while ( scrollElement && !scrollElement.equals( current ) ) { - x -= scrollElement.$.scrollLeft; - y -= scrollElement.$.scrollTop; - scrollElement = scrollElement.getParent(); - } - - previous = current; - current = ( offsetParent = current.$.offsetParent ) ? new CKEDITOR.dom.element( offsetParent ) : null; - } - } - - if ( refDocument ) { - var currentWindow = this.getWindow(), - refWindow = refDocument.getWindow(); - - if ( !currentWindow.equals( refWindow ) && currentWindow.$.frameElement ) { - var iframePosition = ( new CKEDITOR.dom.element( currentWindow.$.frameElement ) ).getDocumentPosition( refDocument ); - - x += iframePosition.x; - y += iframePosition.y; - } - } - - if ( !document.documentElement[ "getBoundingClientRect" ] ) { - // In Firefox, we'll endup one pixel before the element positions, - // so we must add it here. - if ( CKEDITOR.env.gecko && !quirks ) { - x += this.$.clientLeft ? 1 : 0; - y += this.$.clientTop ? 1 : 0; - } - } - - return { x: x, y: y }; - }, - - /** - * Make any page element visible inside the browser viewport. - * - * @param {Boolean} [alignToTop=false] - */ - scrollIntoView: function( alignToTop ) { - var parent = this.getParent(); - if ( !parent ) - return; - - // Scroll the element into parent container from the inner out. - do { - // Check ancestors that overflows. - var overflowed = - parent.$.clientWidth && parent.$.clientWidth < parent.$.scrollWidth || - parent.$.clientHeight && parent.$.clientHeight < parent.$.scrollHeight; - - // Skip body element, which will report wrong clientHeight when containing - // floated content. (#9523) - if ( overflowed && !parent.is( 'body' ) ) - this.scrollIntoParent( parent, alignToTop, 1 ); - - // Walk across the frame. - if ( parent.is( 'html' ) ) { - var win = parent.getWindow(); - - // Avoid security error. - try { - var iframe = win.$.frameElement; - iframe && ( parent = new CKEDITOR.dom.element( iframe ) ); - } catch ( er ) {} - } - } - while ( ( parent = parent.getParent() ) ); - }, - - /** - * Make any page element visible inside one of the ancestors by scrolling the parent. - * - * @param {CKEDITOR.dom.element/CKEDITOR.dom.window} parent The container to scroll into. - * @param {Boolean} [alignToTop] Align the element's top side with the container's - * when `true` is specified; align the bottom with viewport bottom when - * `false` is specified. Otherwise scroll on either side with the minimum - * amount to show the element. - * @param {Boolean} [hscroll] Whether horizontal overflow should be considered. - */ - scrollIntoParent: function( parent, alignToTop, hscroll ) { - !parent && ( parent = this.getWindow() ); - - var doc = parent.getDocument(); - var isQuirks = doc.$.compatMode == 'BackCompat'; - - // On window is scrolled while quirks scrolls . - if ( parent instanceof CKEDITOR.dom.window ) - parent = isQuirks ? doc.getBody() : doc.getDocumentElement(); - - // Scroll the parent by the specified amount. - function scrollBy( x, y ) { - // Webkit doesn't support "scrollTop/scrollLeft" - // on documentElement/body element. - if ( /body|html/.test( parent.getName() ) ) - parent.getWindow().$.scrollBy( x, y ); - else { - parent.$[ 'scrollLeft' ] += x; - parent.$[ 'scrollTop' ] += y; - } - } - - // Figure out the element position relative to the specified window. - function screenPos( element, refWin ) { - var pos = { x: 0, y: 0 }; - - if ( !( element.is( isQuirks ? 'body' : 'html' ) ) ) { - var box = element.$.getBoundingClientRect(); - pos.x = box.left, pos.y = box.top; - } - - var win = element.getWindow(); - if ( !win.equals( refWin ) ) { - var outerPos = screenPos( CKEDITOR.dom.element.get( win.$.frameElement ), refWin ); - pos.x += outerPos.x, pos.y += outerPos.y; - } - - return pos; - } - - // calculated margin size. - function margin( element, side ) { - return parseInt( element.getComputedStyle( 'margin-' + side ) || 0, 10 ) || 0; - } - - var win = parent.getWindow(); - - var thisPos = screenPos( this, win ), - parentPos = screenPos( parent, win ), - eh = this.$.offsetHeight, - ew = this.$.offsetWidth, - ch = parent.$.clientHeight, - cw = parent.$.clientWidth, - lt, br; - - // Left-top margins. - lt = { - x: thisPos.x - margin( this, 'left' ) - parentPos.x || 0, - y: thisPos.y - margin( this, 'top' ) - parentPos.y || 0 - }; - - // Bottom-right margins. - br = { - x: thisPos.x + ew + margin( this, 'right' ) - ( ( parentPos.x ) + cw ) || 0, - y: thisPos.y + eh + margin( this, 'bottom' ) - ( ( parentPos.y ) + ch ) || 0 - }; - - // 1. Do the specified alignment as much as possible; - // 2. Otherwise be smart to scroll only the minimum amount; - // 3. Never cut at the top; - // 4. DO NOT scroll when already visible. - if ( lt.y < 0 || br.y > 0 ) { - scrollBy( 0, alignToTop === true ? lt.y : alignToTop === false ? br.y : lt.y < 0 ? lt.y : br.y ); - } - - if ( hscroll && ( lt.x < 0 || br.x > 0 ) ) - scrollBy( lt.x < 0 ? lt.x : br.x, 0 ); - }, - - /** - * Switch the `class` attribute to reflect one of the triple states of an - * element in one of {@link CKEDITOR#TRISTATE_ON}, {@link CKEDITOR#TRISTATE_OFF} - * or {@link CKEDITOR#TRISTATE_DISABLED}. - * - * link.setState( CKEDITOR.TRISTATE_ON ); - * // ... - * link.setState( CKEDITOR.TRISTATE_OFF ); - * // ... - * link.setState( CKEDITOR.TRISTATE_DISABLED ); - * // ... - * - * span.setState( CKEDITOR.TRISTATE_ON, 'cke_button' ); - * // ... - * - * @param {Number} state Indicate the element state. One of {@link CKEDITOR#TRISTATE_ON}, - * {@link CKEDITOR#TRISTATE_OFF}, {@link CKEDITOR#TRISTATE_DISABLED}. - * @param [base='cke'] The prefix apply to each of the state class name. - * @param [useAria=true] Whether toggle the ARIA state attributes besides of class name change. - */ - setState: function( state, base, useAria ) { - base = base || 'cke'; - - switch ( state ) { - case CKEDITOR.TRISTATE_ON: - this.addClass( base + '_on' ); - this.removeClass( base + '_off' ); - this.removeClass( base + '_disabled' ); - useAria && this.setAttribute( 'aria-pressed', true ); - useAria && this.removeAttribute( 'aria-disabled' ); - break; - - case CKEDITOR.TRISTATE_DISABLED: - this.addClass( base + '_disabled' ); - this.removeClass( base + '_off' ); - this.removeClass( base + '_on' ); - useAria && this.setAttribute( 'aria-disabled', true ); - useAria && this.removeAttribute( 'aria-pressed' ); - break; - - default: - this.addClass( base + '_off' ); - this.removeClass( base + '_on' ); - this.removeClass( base + '_disabled' ); - useAria && this.removeAttribute( 'aria-pressed' ); - useAria && this.removeAttribute( 'aria-disabled' ); - break; - } - }, - - /** - * Returns the inner document of this `' ); - - return html.join( '' ); - }; - - // IE BUG: Parent container does not resize to contain the iframe automatically. - dialog.on( 'load', function() { - var iframe = CKEDITOR.document.getById( _.frameId ), - contentDiv = iframe.getParent(); - contentDiv.addClass( 'cke_dialog_ui_input_file' ); - }); - - CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); - }, - - /** - * A button for submitting the file in a file upload input. - * - * @class CKEDITOR.ui.dialog.fileButton - * @extends CKEDITOR.ui.dialog.button - * @constructor Creates a fileButton class instance. - * @param {CKEDITOR.dialog} dialog Parent dialog object. - * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition - * The element definition. Accepted fields: - * - * * `for` (Required) The file input's page and element Id - * to associate to, in a 2-item array format: `[ 'page_id', 'element_id' ]`. - * * `validate` (Optional) The validation function. - * - * @param {Array} htmlList List of HTML code to output to. - */ - fileButton: function( dialog, elementDefinition, htmlList ) { - if ( arguments.length < 3 ) - return; - - var _ = initPrivateObject.call( this, elementDefinition ), - me = this; - - if ( elementDefinition.validate ) - this.validate = elementDefinition.validate; - - var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition ); - var onClick = myDefinition.onClick; - myDefinition.className = ( myDefinition.className ? myDefinition.className + ' ' : '' ) + 'cke_dialog_ui_button'; - myDefinition.onClick = function( evt ) { - var target = elementDefinition[ 'for' ]; // [ pageId, elementId ] - if ( !onClick || onClick.call( this, evt ) !== false ) { - dialog.getContentElement( target[ 0 ], target[ 1 ] ).submit(); - this.disable(); - } - }; - - dialog.on( 'load', function() { - dialog.getContentElement( elementDefinition[ 'for' ][ 0 ], elementDefinition[ 'for' ][ 1 ] )._.buttons.push( me ); - }); - - CKEDITOR.ui.dialog.button.call( this, dialog, myDefinition, htmlList ); - }, - - html: (function() { - var myHtmlRe = /^\s*<[\w:]+\s+([^>]*)?>/, - theirHtmlRe = /^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/, - emptyTagRe = /\/$/; - /** - * A dialog element made from raw HTML code. - * - * @class CKEDITOR.ui.dialog.html - * @extends CKEDITOR.ui.dialog.uiElement - * @constructor Creates a html class instance. - * @param {CKEDITOR.dialog} dialog Parent dialog object. - * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element definition. - * Accepted fields: - * - * * `html` (Required) HTML code of this element. - * - * @param {Array} htmlList List of HTML code to be added to the dialog's content area. - */ - return function( dialog, elementDefinition, htmlList ) { - if ( arguments.length < 3 ) - return; - - var myHtmlList = [], - myHtml, - theirHtml = elementDefinition.html, - myMatch, theirMatch; - - // If the HTML input doesn't contain any tags at the beginning, add a tag around it. - if ( theirHtml.charAt( 0 ) != '<' ) - theirHtml = '' + theirHtml + ''; - - // Look for focus function in definition. - var focus = elementDefinition.focus; - if ( focus ) { - var oldFocus = this.focus; - this.focus = function() { - ( typeof focus == 'function' ? focus : oldFocus ).call( this ); - this.fire( 'focus' ); - }; - if ( elementDefinition.isFocusable ) { - var oldIsFocusable = this.isFocusable; - this.isFocusable = oldIsFocusable; - } - this.keyboardFocusable = true; - } - - CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, myHtmlList, 'span', null, null, '' ); - - // Append the attributes created by the uiElement call to the real HTML. - myHtml = myHtmlList.join( '' ); - myMatch = myHtml.match( myHtmlRe ); - theirMatch = theirHtml.match( theirHtmlRe ) || [ '', '', '' ]; - - if ( emptyTagRe.test( theirMatch[ 1 ] ) ) { - theirMatch[ 1 ] = theirMatch[ 1 ].slice( 0, -1 ); - theirMatch[ 2 ] = '/' + theirMatch[ 2 ]; - } - - htmlList.push( [ theirMatch[ 1 ], ' ', myMatch[ 1 ] || '', theirMatch[ 2 ] ].join( '' ) ); - }; - })(), - - /** - * Form fieldset for grouping dialog UI elements. - * - * @class CKEDITOR.ui.dialog.fieldset - * @extends CKEDITOR.ui.dialog.uiElement - * @constructor Creates a fieldset class instance. - * @param {CKEDITOR.dialog} dialog Parent dialog object. - * @param {Array} childObjList - * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. - * @param {Array} childHtmlList Array of HTML code that correspond to the HTML output of all the - * objects in childObjList. - * @param {Array} htmlList Array of HTML code that this element will output to. - * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition - * The element definition. Accepted fields: - * - * * `label` (Optional) The legend of the this fieldset. - * * `children` (Required) An array of dialog field definitions which will be grouped inside this fieldset. - * - */ - fieldset: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { - var legendLabel = elementDefinition.label; - /** @ignore */ - var innerHTML = function() { - var html = []; - legendLabel && html.push( '' + legendLabel + '' ); - for ( var i = 0; i < childHtmlList.length; i++ ) - html.push( childHtmlList[ i ] ); - return html.join( '' ); - }; - - this._ = { children: childObjList }; - CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'fieldset', null, null, innerHTML ); - } - - }, true ); - - CKEDITOR.ui.dialog.html.prototype = new CKEDITOR.ui.dialog.uiElement; - - /** @class CKEDITOR.ui.dialog.labeledElement */ - CKEDITOR.ui.dialog.labeledElement.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement, { - /** - * Sets the label text of the element. - * - * @param {String} label The new label text. - * @returns {CKEDITOR.ui.dialog.labeledElement} The current labeled element. - */ - setLabel: function( label ) { - var node = CKEDITOR.document.getById( this._.labelId ); - if ( node.getChildCount() < 1 ) - ( new CKEDITOR.dom.text( label, CKEDITOR.document ) ).appendTo( node ); - else - node.getChild( 0 ).$.nodeValue = label; - return this; - }, - - /** - * Retrieves the current label text of the elment. - * - * @returns {String} The current label text. - */ - getLabel: function() { - var node = CKEDITOR.document.getById( this._.labelId ); - if ( !node || node.getChildCount() < 1 ) - return ''; - else - return node.getChild( 0 ).getText(); - }, - - /** - * Defines the onChange event for UI element definitions. - * @property {Object} - */ - eventProcessors: commonEventProcessors - }, true ); - - /** @class CKEDITOR.ui.dialog.button */ - CKEDITOR.ui.dialog.button.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement, { - /** - * Simulates a click to the button. - * - * @returns {Object} Return value of the `click` event. - */ - click: function() { - if ( !this._.disabled ) - return this.fire( 'click', { dialog: this._.dialog } ); - return false; - }, - - /** - * Enables the button. - */ - enable: function() { - this._.disabled = false; - var element = this.getElement(); - element && element.removeClass( 'cke_disabled' ); - }, - - /** - * Disables the button. - */ - disable: function() { - this._.disabled = true; - this.getElement().addClass( 'cke_disabled' ); - }, - - /** - * @todo - */ - isVisible: function() { - return this.getElement().getFirst().isVisible(); - }, - - /** - * @todo - */ - isEnabled: function() { - return !this._.disabled; - }, - - /** - * Defines the onChange event and onClick for button element definitions. - * - * @property {Object} - */ - eventProcessors: CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, { - onClick: function( dialog, func ) { - this.on( 'click', function() { - func.apply( this, arguments ); - }); - } - }, true ), - - /** - * Handler for the element's access key up event. Simulates a click to - * the button. - */ - accessKeyUp: function() { - this.click(); - }, - - /** - * Handler for the element's access key down event. Simulates a mouse - * down to the button. - */ - accessKeyDown: function() { - this.focus(); - }, - - keyboardFocusable: true - }, true ); - - /** @class CKEDITOR.ui.dialog.textInput */ - CKEDITOR.ui.dialog.textInput.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement, { - /** - * Gets the text input DOM element under this UI object. - * - * @returns {CKEDITOR.dom.element} The DOM element of the text input. - */ - getInputElement: function() { - return CKEDITOR.document.getById( this._.inputId ); - }, - - /** - * Puts focus into the text input. - */ - focus: function() { - var me = this.selectParentTab(); - - // GECKO BUG: setTimeout() is needed to workaround invisible selections. - setTimeout( function() { - var element = me.getInputElement(); - element && element.$.focus(); - }, 0 ); - }, - - /** - * Selects all the text in the text input. - */ - select: function() { - var me = this.selectParentTab(); - - // GECKO BUG: setTimeout() is needed to workaround invisible selections. - setTimeout( function() { - var e = me.getInputElement(); - if ( e ) { - e.$.focus(); - e.$.select(); - } - }, 0 ); - }, - - /** - * Handler for the text input's access key up event. Makes a `select()` - * call to the text input. - */ - accessKeyUp: function() { - this.select(); - }, - - /** - * Sets the value of this text input object. - * - * uiElement.setValue( 'Blamo' ); - * - * @param {Object} value The new value. - * @returns {CKEDITOR.ui.dialog.textInput} The current UI element. - */ - setValue: function( value ) { - !value && ( value = '' ); - return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply( this, arguments ); - }, - - keyboardFocusable: true - }, commonPrototype, true ); - - CKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput(); - - /** @class CKEDITOR.ui.dialog.select */ - CKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement, { - /** - * Gets the DOM element of the select box. - * - * @returns {CKEDITOR.dom.element} The `` element of this file input. - * - * @returns {CKEDITOR.dom.element} The file input element. - */ - getInputElement: function() { - var frameDocument = CKEDITOR.document.getById( this._.frameId ).getFrameDocument(); - return frameDocument.$.forms.length > 0 ? new CKEDITOR.dom.element( frameDocument.$.forms[ 0 ].elements[ 0 ] ) : this.getElement(); - }, - - /** - * Uploads the file in the file input. - * - * @returns {CKEDITOR.ui.dialog.file} This object. - */ - submit: function() { - this.getInputElement().getParent().$.submit(); - return this; - }, - - /** - * Get the action assigned to the form. - * - * @returns {String} The value of the action. - */ - getAction: function() { - return this.getInputElement().getParent().$.action; - }, - - /** - * The events must be applied on the inner input element, and - * that must be done when the iframe & form has been loaded. - */ - registerEvents: function( definition ) { - var regex = /^on([A-Z]\w+)/, - match; - - var registerDomEvent = function( uiElement, dialog, eventName, func ) { - uiElement.on( 'formLoaded', function() { - uiElement.getInputElement().on( eventName, func, uiElement ); - }); - }; - - for ( var i in definition ) { - if ( !( match = i.match( regex ) ) ) - continue; - - if ( this.eventProcessors[ i ] ) - this.eventProcessors[ i ].call( this, this._.dialog, definition[ i ] ); - else - registerDomEvent( this, this._.dialog, match[ 1 ].toLowerCase(), definition[ i ] ); - } - - return this; - }, - - /** - * Redraws the file input and resets the file path in the file input. - * The redraw logic is necessary because non-IE browsers tend to clear - * the `' ); - iframe.appendTo( body.getParent() ); - } - - // Make the Title and Close Button unselectable. - title.unselectable(); - close.unselectable(); - - return { - element: element, - parts: { - dialog: element.getChild( 0 ), - title: title, - close: close, - tabs: body.getChild( 2 ), - contents: body.getChild( [ 3, 0, 0, 0 ] ), - footer: body.getChild( [ 3, 0, 1, 0 ] ) - } - }; - } - - /** - * This is the base class for runtime dialog objects. An instance of this - * class represents a single named dialog for a single editor instance. - * - * var dialogObj = new CKEDITOR.dialog( editor, 'smiley' ); - * - * @class - * @constructor Creates a dialog class instance. - * @param {Object} editor The editor which created the dialog. - * @param {String} dialogName The dialog's registered name. - */ - CKEDITOR.dialog = function( editor, dialogName ) { - // Load the dialog definition. - var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ], - defaultDefinition = CKEDITOR.tools.clone( defaultDialogDefinition ), - buttonsOrder = editor.config.dialog_buttonsOrder || 'OS', - dir = editor.lang.dir, - tabsToRemove = {}, - i, processed, stopPropagation; - - if ( ( buttonsOrder == 'OS' && CKEDITOR.env.mac ) || // The buttons in MacOS Apps are in reverse order (#4750) - ( buttonsOrder == 'rtl' && dir == 'ltr' ) || ( buttonsOrder == 'ltr' && dir == 'rtl' ) ) - defaultDefinition.buttons.reverse(); - - - // Completes the definition with the default values. - definition = CKEDITOR.tools.extend( definition( editor ), defaultDefinition ); - - // Clone a functionally independent copy for this dialog. - definition = CKEDITOR.tools.clone( definition ); - - // Create a complex definition object, extending it with the API - // functions. - definition = new definitionObject( this, definition ); - - var doc = CKEDITOR.document; - - var themeBuilt = buildDialog( editor ); - - // Initialize some basic parameters. - this._ = { - editor: editor, - element: themeBuilt.element, - name: dialogName, - contentSize: { width: 0, height: 0 }, - size: { width: 0, height: 0 }, - contents: {}, - buttons: {}, - accessKeyMap: {}, - - // Initialize the tab and page map. - tabs: {}, - tabIdList: [], - currentTabId: null, - currentTabIndex: null, - pageCount: 0, - lastTab: null, - tabBarMode: false, - - // Initialize the tab order array for input widgets. - focusList: [], - currentFocusIndex: 0, - hasFocus: false - }; - - this.parts = themeBuilt.parts; - - CKEDITOR.tools.setTimeout( function() { - editor.fire( 'ariaWidget', this.parts.contents ); - }, 0, this ); - - // Set the startup styles for the dialog, avoiding it enlarging the - // page size on the dialog creation. - var startStyles = { - position: CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed', - top: 0, - visibility: 'hidden' - }; - - startStyles[ dir == 'rtl' ? 'right' : 'left' ] = 0; - this.parts.dialog.setStyles( startStyles ); - - - // Call the CKEDITOR.event constructor to initialize this instance. - CKEDITOR.event.call( this ); - - // Fire the "dialogDefinition" event, making it possible to customize - // the dialog definition. - this.definition = definition = CKEDITOR.fire( 'dialogDefinition', { - name: dialogName, - definition: definition - }, editor ).definition; - - // Cache tabs that should be removed. - if ( !( 'removeDialogTabs' in editor._ ) && editor.config.removeDialogTabs ) { - var removeContents = editor.config.removeDialogTabs.split( ';' ); - - for ( i = 0; i < removeContents.length; i++ ) { - var parts = removeContents[ i ].split( ':' ); - if ( parts.length == 2 ) { - var removeDialogName = parts[ 0 ]; - if ( !tabsToRemove[ removeDialogName ] ) - tabsToRemove[ removeDialogName ] = []; - tabsToRemove[ removeDialogName ].push( parts[ 1 ] ); - } - } - editor._.removeDialogTabs = tabsToRemove; - } - - // Remove tabs of this dialog. - if ( editor._.removeDialogTabs && ( tabsToRemove = editor._.removeDialogTabs[ dialogName ] ) ) { - for ( i = 0; i < tabsToRemove.length; i++ ) - definition.removeContents( tabsToRemove[ i ] ); - } - - // Initialize load, show, hide, ok and cancel events. - if ( definition.onLoad ) - this.on( 'load', definition.onLoad ); - - if ( definition.onShow ) - this.on( 'show', definition.onShow ); - - if ( definition.onHide ) - this.on( 'hide', definition.onHide ); - - if ( definition.onOk ) { - this.on( 'ok', function( evt ) { - // Dialog confirm might probably introduce content changes (#5415). - editor.fire( 'saveSnapshot' ); - setTimeout( function() { - editor.fire( 'saveSnapshot' ); - }, 0 ); - if ( definition.onOk.call( this, evt ) === false ) - evt.data.hide = false; - }); - } - - if ( definition.onCancel ) { - this.on( 'cancel', function( evt ) { - if ( definition.onCancel.call( this, evt ) === false ) - evt.data.hide = false; - }); - } - - var me = this; - - // Iterates over all items inside all content in the dialog, calling a - // function for each of them. - var iterContents = function( func ) { - var contents = me._.contents, - stop = false; - - for ( var i in contents ) { - for ( var j in contents[ i ] ) { - stop = func.call( this, contents[ i ][ j ] ); - if ( stop ) - return; - } - } - }; - - this.on( 'ok', function( evt ) { - iterContents( function( item ) { - if ( item.validate ) { - var retval = item.validate( this ), - invalid = typeof( retval ) == 'string' || retval === false; - - if ( invalid ) { - evt.data.hide = false; - evt.stop(); - } - - handleFieldValidated.call( item, !invalid, typeof retval == 'string' ? retval : undefined ); - return invalid; - } - }); - }, this, null, 0 ); - - this.on( 'cancel', function( evt ) { - iterContents( function( item ) { - if ( item.isChanged() ) { - if ( !confirm( editor.lang.common.confirmCancel ) ) - evt.data.hide = false; - return true; - } - }); - }, this, null, 0 ); - - this.parts.close.on( 'click', function( evt ) { - if ( this.fire( 'cancel', { hide: true } ).hide !== false ) - this.hide(); - evt.data.preventDefault(); - }, this ); - - // Sort focus list according to tab order definitions. - function setupFocus() { - var focusList = me._.focusList; - focusList.sort( function( a, b ) { - // Mimics browser tab order logics; - if ( a.tabIndex != b.tabIndex ) - return b.tabIndex - a.tabIndex; - // Sort is not stable in some browsers, - // fall-back the comparator to 'focusIndex'; - else - return a.focusIndex - b.focusIndex; - }); - - var size = focusList.length; - for ( var i = 0; i < size; i++ ) - focusList[ i ].focusIndex = i; - } - - function changeFocus( offset ) { - var focusList = me._.focusList; - offset = offset || 0; - - if ( focusList.length < 1 ) - return; - - var current = me._.currentFocusIndex; - - // Trigger the 'blur' event of any input element before anything, - // since certain UI updates may depend on it. - try { - focusList[ current ].getInputElement().$.blur(); - } catch ( e ) {} - - var startIndex = ( current + offset + focusList.length ) % focusList.length, - currentIndex = startIndex; - while ( offset && !focusList[ currentIndex ].isFocusable() ) { - currentIndex = ( currentIndex + offset + focusList.length ) % focusList.length; - if ( currentIndex == startIndex ) - break; - } - - focusList[ currentIndex ].focus(); - - // Select whole field content. - if ( focusList[ currentIndex ].type == 'text' ) - focusList[ currentIndex ].select(); - } - - this.changeFocus = changeFocus; - - - function keydownHandler( evt ) { - // If I'm not the top dialog, ignore. - if ( me != CKEDITOR.dialog._.currentTop ) - return; - - var keystroke = evt.data.getKeystroke(), - rtl = editor.lang.dir == 'rtl', - button; - - processed = stopPropagation = 0; - - if ( keystroke == 9 || keystroke == CKEDITOR.SHIFT + 9 ) { - var shiftPressed = ( keystroke == CKEDITOR.SHIFT + 9 ); - - // Handling Tab and Shift-Tab. - if ( me._.tabBarMode ) { - // Change tabs. - var nextId = shiftPressed ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ); - me.selectPage( nextId ); - me._.tabs[ nextId ][ 0 ].focus(); - } else { - // Change the focus of inputs. - changeFocus( shiftPressed ? -1 : 1 ); - } - - processed = 1; - } else if ( keystroke == CKEDITOR.ALT + 121 && !me._.tabBarMode && me.getPageCount() > 1 ) { - // Alt-F10 puts focus into the current tab item in the tab bar. - me._.tabBarMode = true; - me._.tabs[ me._.currentTabId ][ 0 ].focus(); - processed = 1; - } else if ( ( keystroke == 37 || keystroke == 39 ) && me._.tabBarMode ) { - // Arrow keys - used for changing tabs. - nextId = ( keystroke == ( rtl ? 39 : 37 ) ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ) ); - me.selectPage( nextId ); - me._.tabs[ nextId ][ 0 ].focus(); - processed = 1; - } else if ( ( keystroke == 13 || keystroke == 32 ) && me._.tabBarMode ) { - this.selectPage( this._.currentTabId ); - this._.tabBarMode = false; - this._.currentFocusIndex = -1; - changeFocus( 1 ); - processed = 1; - } - // If user presses enter key in a text box, it implies clicking OK for the dialog. - else if ( keystroke == 13 /*ENTER*/ ) { - // Don't do that for a target that handles ENTER. - var target = evt.data.getTarget(); - if ( !target.is( 'a', 'button', 'select', 'textarea' ) && ( !target.is( 'input' ) || target.$.type != 'button' ) ) { - button = this.getButton( 'ok' ); - button && CKEDITOR.tools.setTimeout( button.click, 0, button ); - processed = 1; - } - stopPropagation = 1; // Always block the propagation (#4269) - } else if ( keystroke == 27 /*ESC*/ ) { - button = this.getButton( 'cancel' ); - - // If there's a Cancel button, click it, else just fire the cancel event and hide the dialog. - if ( button ) - CKEDITOR.tools.setTimeout( button.click, 0, button ); - else { - if ( this.fire( 'cancel', { hide: true } ).hide !== false ) - this.hide(); - } - stopPropagation = 1; // Always block the propagation (#4269) - } else - return; - - keypressHandler( evt ); - } - - function keypressHandler( evt ) { - if ( processed ) - evt.data.preventDefault( 1 ); - else if ( stopPropagation ) - evt.data.stopPropagation(); - } - - var dialogElement = this._.element; - - editor.focusManager.add( dialogElement, 1 ); - - // Add the dialog keyboard handlers. - this.on( 'show', function() { - dialogElement.on( 'keydown', keydownHandler, this ); - - // Some browsers instead, don't cancel key events in the keydown, but in the - // keypress. So we must do a longer trip in those cases. (#4531,#8985) - if ( CKEDITOR.env.opera || CKEDITOR.env.gecko ) - dialogElement.on( 'keypress', keypressHandler, this ); - - }); - this.on( 'hide', function() { - dialogElement.removeListener( 'keydown', keydownHandler ); - if ( CKEDITOR.env.opera || CKEDITOR.env.gecko ) - dialogElement.removeListener( 'keypress', keypressHandler ); - - // Reset fields state when closing dialog. - iterContents( function( item ) { - resetField.apply( item ); - }); - }); - this.on( 'iframeAdded', function( evt ) { - var doc = new CKEDITOR.dom.document( evt.data.iframe.$.contentWindow.document ); - doc.on( 'keydown', keydownHandler, this, null, 0 ); - }); - - // Auto-focus logic in dialog. - this.on( 'show', function() { - // Setup tabIndex on showing the dialog instead of on loading - // to allow dynamic tab order happen in dialog definition. - setupFocus(); - - if ( editor.config.dialog_startupFocusTab && me._.pageCount > 1 ) { - me._.tabBarMode = true; - me._.tabs[ me._.currentTabId ][ 0 ].focus(); - } else if ( !this._.hasFocus ) { - this._.currentFocusIndex = -1; - - // Decide where to put the initial focus. - if ( definition.onFocus ) { - var initialFocus = definition.onFocus.call( this ); - // Focus the field that the user specified. - initialFocus && initialFocus.focus(); - } - // Focus the first field in layout order. - else - changeFocus( 1 ); - } - }, this, null, 0xffffffff ); - - // IE6 BUG: Text fields and text areas are only half-rendered the first time the dialog appears in IE6 (#2661). - // This is still needed after [2708] and [2709] because text fields in hidden TR tags are still broken. - if ( CKEDITOR.env.ie6Compat ) { - this.on( 'load', function( evt ) { - var outer = this.getElement(), - inner = outer.getFirst(); - inner.remove(); - inner.appendTo( outer ); - }, this ); - } - - initDragAndDrop( this ); - initResizeHandles( this ); - - // Insert the title. - ( new CKEDITOR.dom.text( definition.title, CKEDITOR.document ) ).appendTo( this.parts.title ); - - // Insert the tabs and contents. - for ( i = 0; i < definition.contents.length; i++ ) { - var page = definition.contents[ i ]; - page && this.addPage( page ); - } - - this.parts[ 'tabs' ].on( 'click', function( evt ) { - var target = evt.data.getTarget(); - // If we aren't inside a tab, bail out. - if ( target.hasClass( 'cke_dialog_tab' ) ) { - // Get the ID of the tab, without the 'cke_' prefix and the unique number suffix. - var id = target.$.id; - this.selectPage( id.substring( 4, id.lastIndexOf( '_' ) ) ); - - if ( this._.tabBarMode ) { - this._.tabBarMode = false; - this._.currentFocusIndex = -1; - changeFocus( 1 ); - } - evt.data.preventDefault(); - } - }, this ); - - // Insert buttons. - var buttonsHtml = [], - buttons = CKEDITOR.dialog._.uiElementBuilders.hbox.build( this, { - type: 'hbox', - className: 'cke_dialog_footer_buttons', - widths: [], - children: definition.buttons - }, buttonsHtml ).getChild(); - this.parts.footer.setHtml( buttonsHtml.join( '' ) ); - - for ( i = 0; i < buttons.length; i++ ) - this._.buttons[ buttons[ i ].id ] = buttons[ i ]; - }; - - // Focusable interface. Use it via dialog.addFocusable. - function Focusable( dialog, element, index ) { - this.element = element; - this.focusIndex = index; - // TODO: support tabIndex for focusables. - this.tabIndex = 0; - this.isFocusable = function() { - return !element.getAttribute( 'disabled' ) && element.isVisible(); - }; - this.focus = function() { - dialog._.currentFocusIndex = this.focusIndex; - this.element.focus(); - }; - // Bind events - element.on( 'keydown', function( e ) { - if ( e.data.getKeystroke() in { 32:1,13:1 } ) - this.fire( 'click' ); - }); - element.on( 'focus', function() { - this.fire( 'mouseover' ); - }); - element.on( 'blur', function() { - this.fire( 'mouseout' ); - }); - } - - // Re-layout the dialog on window resize. - function resizeWithWindow( dialog ) { - var win = CKEDITOR.document.getWindow(); - function resizeHandler() { dialog.layout(); } - win.on( 'resize', resizeHandler ); - dialog.on( 'hide', function() { win.removeListener( 'resize', resizeHandler ); } ); - } - - CKEDITOR.dialog.prototype = { - destroy: function() { - this.hide(); - this._.element.remove(); - }, - - /** - * Resizes the dialog. - * - * dialogObj.resize( 800, 640 ); - * - * @method - * @param {Number} width The width of the dialog in pixels. - * @param {Number} height The height of the dialog in pixels. - */ - resize: (function() { - return function( width, height ) { - if ( this._.contentSize && this._.contentSize.width == width && this._.contentSize.height == height ) - return; - - CKEDITOR.dialog.fire( 'resize', { - dialog: this, - width: width, - height: height - }, this._.editor ); - - this.fire( 'resize', { - width: width, - height: height - }, this._.editor ); - - var contents = this.parts.contents; - contents.setStyles({ - width: width + 'px', - height: height + 'px' - }); - - // Update dialog position when dimension get changed in RTL. - if ( this._.editor.lang.dir == 'rtl' && this._.position ) - this._.position.x = CKEDITOR.document.getWindow().getViewPaneSize().width - this._.contentSize.width - parseInt( this._.element.getFirst().getStyle( 'right' ), 10 ); - - this._.contentSize = { width: width, height: height }; - }; - })(), - - /** - * Gets the current size of the dialog in pixels. - * - * var width = dialogObj.getSize().width; - * - * @returns {Object} - * @returns {Number} return.width - * @returns {Number} return.height - */ - getSize: function() { - var element = this._.element.getFirst(); - return { width: element.$.offsetWidth || 0, height: element.$.offsetHeight || 0 }; - }, - - /** - * Moves the dialog to an `(x, y)` coordinate relative to the window. - * - * dialogObj.move( 10, 40 ); - * - * @method - * @param {Number} x The target x-coordinate. - * @param {Number} y The target y-coordinate. - * @param {Boolean} save Flag indicate whether the dialog position should be remembered on next open up. - */ - move: function( x, y, save ) { - - // The dialog may be fixed positioned or absolute positioned. Ask the - // browser what is the current situation first. - var element = this._.element.getFirst(), rtl = this._.editor.lang.dir == 'rtl'; - var isFixed = element.getComputedStyle( 'position' ) == 'fixed'; - - // (#8888) In some cases of a very small viewport, dialog is incorrectly - // positioned in IE7. It also happens that it remains sticky and user cannot - // scroll down/up to reveal dialog's content below/above the viewport; this is - // cumbersome. - // The only way to fix this is to move mouse out of the browser and - // go back to see that dialog position is automagically fixed. No events, - // no style change - pure magic. This is a IE7 rendering issue, which can be - // fixed with dummy style redraw on each move. - if ( CKEDITOR.env.ie ) - element.setStyle( 'zoom', '100%' ); - - if ( isFixed && this._.position && this._.position.x == x && this._.position.y == y ) - return; - - // Save the current position. - this._.position = { x: x, y: y }; - - // If not fixed positioned, add scroll position to the coordinates. - if ( !isFixed ) { - var scrollPosition = CKEDITOR.document.getWindow().getScrollPosition(); - x += scrollPosition.x; - y += scrollPosition.y; - } - - // Translate coordinate for RTL. - if ( rtl ) { - var dialogSize = this.getSize(), viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(); - x = viewPaneSize.width - dialogSize.width - x; - } - - var styles = { 'top': ( y > 0 ? y : 0 ) + 'px' }; - styles[ rtl ? 'right' : 'left' ] = ( x > 0 ? x : 0 ) + 'px'; - - element.setStyles( styles ); - - save && ( this._.moved = 1 ); - }, - - /** - * Gets the dialog's position in the window. - * - * var dialogX = dialogObj.getPosition().x; - * - * @returns {Object} - * @returns {Number} return.x - * @returns {Number} return.y - */ - getPosition: function() { - return CKEDITOR.tools.extend( {}, this._.position ); - }, - - /** - * Shows the dialog box. - * - * dialogObj.show(); - */ - show: function() { - // Insert the dialog's element to the root document. - var element = this._.element; - var definition = this.definition; - if ( !( element.getParent() && element.getParent().equals( CKEDITOR.document.getBody() ) ) ) - element.appendTo( CKEDITOR.document.getBody() ); - else - element.setStyle( 'display', 'block' ); - - // FIREFOX BUG: Fix vanishing caret for Firefox 2 or Gecko 1.8. - if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) { - var dialogElement = this.parts.dialog; - dialogElement.setStyle( 'position', 'absolute' ); - setTimeout( function() { - dialogElement.setStyle( 'position', 'fixed' ); - }, 0 ); - } - - - // First, set the dialog to an appropriate size. - this.resize( this._.contentSize && this._.contentSize.width || definition.width || definition.minWidth, this._.contentSize && this._.contentSize.height || definition.height || definition.minHeight ); - - // Reset all inputs back to their default value. - this.reset(); - - // Select the first tab by default. - this.selectPage( this.definition.contents[ 0 ].id ); - - // Set z-index. - if ( CKEDITOR.dialog._.currentZIndex === null ) - CKEDITOR.dialog._.currentZIndex = this._.editor.config.baseFloatZIndex; - this._.element.getFirst().setStyle( 'z-index', CKEDITOR.dialog._.currentZIndex += 10 ); - - // Maintain the dialog ordering and dialog cover. - if ( CKEDITOR.dialog._.currentTop === null ) { - CKEDITOR.dialog._.currentTop = this; - this._.parentDialog = null; - showCover( this._.editor ); - - } else { - this._.parentDialog = CKEDITOR.dialog._.currentTop; - var parentElement = this._.parentDialog.getElement().getFirst(); - parentElement.$.style.zIndex -= Math.floor( this._.editor.config.baseFloatZIndex / 2 ); - CKEDITOR.dialog._.currentTop = this; - } - - element.on( 'keydown', accessKeyDownHandler ); - element.on( CKEDITOR.env.opera ? 'keypress' : 'keyup', accessKeyUpHandler ); - - // Reset the hasFocus state. - this._.hasFocus = false; - - CKEDITOR.tools.setTimeout( function() { - this.layout(); - resizeWithWindow( this ); - - this.parts.dialog.setStyle( 'visibility', '' ); - - // Execute onLoad for the first show. - this.fireOnce( 'load', {} ); - CKEDITOR.ui.fire( 'ready', this ); - - this.fire( 'show', {} ); - this._.editor.fire( 'dialogShow', this ); - - if ( !this._.parentDialog ) - this._.editor.focusManager.lock(); - - // Save the initial values of the dialog. - this.foreach( function( contentObj ) { - contentObj.setInitValue && contentObj.setInitValue(); - }); - - }, 100, this ); - }, - - /** - * Rearrange the dialog to its previous position or the middle of the window. - * - * @since 3.5 - */ - layout: function() { - var el = this.parts.dialog; - var dialogSize = this.getSize(); - var win = CKEDITOR.document.getWindow(), - viewSize = win.getViewPaneSize(); - - var posX = ( viewSize.width - dialogSize.width ) / 2, - posY = ( viewSize.height - dialogSize.height ) / 2; - - // Switch to absolute position when viewport is smaller than dialog size. - if ( !CKEDITOR.env.ie6Compat ) { - if ( dialogSize.height + ( posY > 0 ? posY : 0 ) > viewSize.height || - dialogSize.width + ( posX > 0 ? posX : 0 ) > viewSize.width ) - el.setStyle( 'position', 'absolute' ); - else - el.setStyle( 'position', 'fixed' ); - } - - this.move( this._.moved ? this._.position.x : posX, - this._.moved ? this._.position.y : posY ); - }, - - /** - * Executes a function for each UI element. - * - * @param {Function} fn Function to execute for each UI element. - * @returns {CKEDITOR.dialog} The current dialog object. - */ - foreach: function( fn ) { - for ( var i in this._.contents ) { - for ( var j in this._.contents[ i ] ) - fn.call( this, this._.contents[ i ][ j ] ); - } - return this; - }, - - /** - * Resets all input values in the dialog. - * - * dialogObj.reset(); - * - * @method - * @chainable - */ - reset: (function() { - var fn = function( widget ) { - if ( widget.reset ) - widget.reset( 1 ); - }; - return function() { - this.foreach( fn ); - return this; - }; - })(), - - - /** - * Calls the {@link CKEDITOR.dialog.definition.uiElement#setup} method of each - * of the UI elements, with the arguments passed through it. - * It is usually being called when the dialog is opened, to put the initial value inside the field. - * - * dialogObj.setupContent(); - * - * var timestamp = ( new Date() ).valueOf(); - * dialogObj.setupContent( timestamp ); - */ - setupContent: function() { - var args = arguments; - this.foreach( function( widget ) { - if ( widget.setup ) - widget.setup.apply( widget, args ); - }); - }, - - /** - * Calls the {@link CKEDITOR.dialog.definition.uiElement#commit} method of each - * of the UI elements, with the arguments passed through it. - * It is usually being called when the user confirms the dialog, to process the values. - * - * dialogObj.commitContent(); - * - * var timestamp = ( new Date() ).valueOf(); - * dialogObj.commitContent( timestamp ); - */ - commitContent: function() { - var args = arguments; - this.foreach( function( widget ) { - // Make sure IE triggers "change" event on last focused input before closing the dialog. (#7915) - if ( CKEDITOR.env.ie && this._.currentFocusIndex == widget.focusIndex ) - widget.getInputElement().$.blur(); - - if ( widget.commit ) - widget.commit.apply( widget, args ); - }); - }, - - /** - * Hides the dialog box. - * - * dialogObj.hide(); - */ - hide: function() { - if ( !this.parts.dialog.isVisible() ) - return; - - this.fire( 'hide', {} ); - this._.editor.fire( 'dialogHide', this ); - // Reset the tab page. - this.selectPage( this._.tabIdList[ 0 ] ); - var element = this._.element; - element.setStyle( 'display', 'none' ); - this.parts.dialog.setStyle( 'visibility', 'hidden' ); - // Unregister all access keys associated with this dialog. - unregisterAccessKey( this ); - - // Close any child(top) dialogs first. - while ( CKEDITOR.dialog._.currentTop != this ) - CKEDITOR.dialog._.currentTop.hide(); - - // Maintain dialog ordering and remove cover if needed. - if ( !this._.parentDialog ) - hideCover( this._.editor ); - else { - var parentElement = this._.parentDialog.getElement().getFirst(); - parentElement.setStyle( 'z-index', parseInt( parentElement.$.style.zIndex, 10 ) + Math.floor( this._.editor.config.baseFloatZIndex / 2 ) ); - } - CKEDITOR.dialog._.currentTop = this._.parentDialog; - - // Deduct or clear the z-index. - if ( !this._.parentDialog ) { - CKEDITOR.dialog._.currentZIndex = null; - - // Remove access key handlers. - element.removeListener( 'keydown', accessKeyDownHandler ); - element.removeListener( CKEDITOR.env.opera ? 'keypress' : 'keyup', accessKeyUpHandler ); - - var editor = this._.editor; - editor.focus(); - - // Give a while before unlock, waiting for focus to return to the editable. (#172) - setTimeout( function() { editor.focusManager.unlock(); }, 0 ); - - } else - CKEDITOR.dialog._.currentZIndex -= 10; - - delete this._.parentDialog; - // Reset the initial values of the dialog. - this.foreach( function( contentObj ) { - contentObj.resetInitValue && contentObj.resetInitValue(); - }); - }, - - /** - * Adds a tabbed page into the dialog. - * - * @param {Object} contents Content definition. - */ - addPage: function( contents ) { - if ( contents.requiredContent && !this._.editor.filter.check( contents.requiredContent ) ) - return; - - var pageHtml = [], - titleHtml = contents.label ? ' title="' + CKEDITOR.tools.htmlEncode( contents.label ) + '"' : '', - elements = contents.elements, - vbox = CKEDITOR.dialog._.uiElementBuilders.vbox.build( this, { - type: 'vbox', - className: 'cke_dialog_page_contents', - children: contents.elements, - expand: !!contents.expand, - padding: contents.padding, - style: contents.style || 'width: 100%;' - }, pageHtml ); - - var contentMap = this._.contents[ contents.id ] = {}, - cursor, - children = vbox.getChild(), - enabledFields = 0; - - while ( ( cursor = children.shift() ) ) { - // Count all allowed fields. - if ( !cursor.notAllowed && cursor.type != 'hbox' && cursor.type != 'vbox' ) - enabledFields++; - - contentMap[ cursor.id ] = cursor; - if ( typeof( cursor.getChild ) == 'function' ) - children.push.apply( children, cursor.getChild() ); - } - - // If all fields are disabled (because they are not allowed) hide this tab. - if ( !enabledFields ) - contents.hidden = true; - - // Create the HTML for the tab and the content block. - var page = CKEDITOR.dom.element.createFromHtml( pageHtml.join( '' ) ); - page.setAttribute( 'role', 'tabpanel' ); - - var env = CKEDITOR.env; - var tabId = 'cke_' + contents.id + '_' + CKEDITOR.tools.getNextNumber(), - tab = CKEDITOR.dom.element.createFromHtml( [ - ' 0 ? ' cke_last' : 'cke_first' ), - titleHtml, - ( !!contents.hidden ? ' style="display:none"' : '' ), - ' id="', tabId, '"', - env.gecko && env.version >= 10900 && !env.hc ? '' : ' href="javascript:void(0)"', - ' tabIndex="-1"', - ' hidefocus="true"', - ' role="tab">', - contents.label, - '' - ].join( '' ) ); - - page.setAttribute( 'aria-labelledby', tabId ); - - // Take records for the tabs and elements created. - this._.tabs[ contents.id ] = [ tab, page ]; - this._.tabIdList.push( contents.id ); - !contents.hidden && this._.pageCount++; - this._.lastTab = tab; - this.updateStyle(); - - // Attach the DOM nodes. - - page.setAttribute( 'name', contents.id ); - page.appendTo( this.parts.contents ); - - tab.unselectable(); - this.parts.tabs.append( tab ); - - // Add access key handlers if access key is defined. - if ( contents.accessKey ) { - registerAccessKey( this, this, 'CTRL+' + contents.accessKey, tabAccessKeyDown, tabAccessKeyUp ); - this._.accessKeyMap[ 'CTRL+' + contents.accessKey ] = contents.id; - } - }, - - /** - * Activates a tab page in the dialog by its id. - * - * dialogObj.selectPage( 'tab_1' ); - * - * @param {String} id The id of the dialog tab to be activated. - */ - selectPage: function( id ) { - if ( this._.currentTabId == id ) - return; - - // Returning true means that the event has been canceled - if ( this.fire( 'selectPage', { page: id, currentPage: this._.currentTabId } ) === true ) - return; - - // Hide the non-selected tabs and pages. - for ( var i in this._.tabs ) { - var tab = this._.tabs[ i ][ 0 ], - page = this._.tabs[ i ][ 1 ]; - if ( i != id ) { - tab.removeClass( 'cke_dialog_tab_selected' ); - page.hide(); - } - page.setAttribute( 'aria-hidden', i != id ); - } - - var selected = this._.tabs[ id ]; - selected[ 0 ].addClass( 'cke_dialog_tab_selected' ); - - // [IE] an invisible input[type='text'] will enlarge it's width - // if it's value is long when it shows, so we clear it's value - // before it shows and then recover it (#5649) - if ( CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat ) { - clearOrRecoverTextInputValue( selected[ 1 ] ); - selected[ 1 ].show(); - setTimeout( function() { - clearOrRecoverTextInputValue( selected[ 1 ], 1 ); - }, 0 ); - } else - selected[ 1 ].show(); - - this._.currentTabId = id; - this._.currentTabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, id ); - }, - - /** - * Dialog state-specific style updates. - */ - updateStyle: function() { - // If only a single page shown, a different style is used in the central pane. - this.parts.dialog[ ( this._.pageCount === 1 ? 'add' : 'remove' ) + 'Class' ]( 'cke_single_page' ); - }, - - /** - * Hides a page's tab away from the dialog. - * - * dialog.hidePage( 'tab_3' ); - * - * @param {String} id The page's Id. - */ - hidePage: function( id ) { - var tab = this._.tabs[ id ] && this._.tabs[ id ][ 0 ]; - if ( !tab || this._.pageCount == 1 || !tab.isVisible() ) - return; - // Switch to other tab first when we're hiding the active tab. - else if ( id == this._.currentTabId ) - this.selectPage( getPreviousVisibleTab.call( this ) ); - - tab.hide(); - this._.pageCount--; - this.updateStyle(); - }, - - /** - * Unhides a page's tab. - * - * dialog.showPage( 'tab_2' ); - * - * @param {String} id The page's Id. - */ - showPage: function( id ) { - var tab = this._.tabs[ id ] && this._.tabs[ id ][ 0 ]; - if ( !tab ) - return; - tab.show(); - this._.pageCount++; - this.updateStyle(); - }, - - /** - * Gets the root DOM element of the dialog. - * - * var dialogElement = dialogObj.getElement().getFirst(); - * dialogElement.setStyle( 'padding', '5px' ); - * - * @returns {CKEDITOR.dom.element} The `` element containing this dialog. - */ - getElement: function() { - return this._.element; - }, - - /** - * Gets the name of the dialog. - * - * var dialogName = dialogObj.getName(); - * - * @returns {String} The name of this dialog. - */ - getName: function() { - return this._.name; - }, - - /** - * Gets a dialog UI element object from a dialog page. - * - * dialogObj.getContentElement( 'tabId', 'elementId' ).setValue( 'Example' ); - * - * @param {String} pageId id of dialog page. - * @param {String} elementId id of UI element. - * @returns {CKEDITOR.ui.dialog.uiElement} The dialog UI element. - */ - getContentElement: function( pageId, elementId ) { - var page = this._.contents[ pageId ]; - return page && page[ elementId ]; - }, - - /** - * Gets the value of a dialog UI element. - * - * alert( dialogObj.getValueOf( 'tabId', 'elementId' ) ); - * - * @param {String} pageId id of dialog page. - * @param {String} elementId id of UI element. - * @returns {Object} The value of the UI element. - */ - getValueOf: function( pageId, elementId ) { - return this.getContentElement( pageId, elementId ).getValue(); - }, - - /** - * Sets the value of a dialog UI element. - * - * dialogObj.setValueOf( 'tabId', 'elementId', 'Example' ); - * - * @param {String} pageId id of the dialog page. - * @param {String} elementId id of the UI element. - * @param {Object} value The new value of the UI element. - */ - setValueOf: function( pageId, elementId, value ) { - return this.getContentElement( pageId, elementId ).setValue( value ); - }, - - /** - * Gets the UI element of a button in the dialog's button row. - * - * @returns {CKEDITOR.ui.dialog.button} The button object. - * - * @param {String} id The id of the button. - */ - getButton: function( id ) { - return this._.buttons[ id ]; - }, - - /** - * Simulates a click to a dialog button in the dialog's button row. - * - * @returns The return value of the dialog's `click` event. - * - * @param {String} id The id of the button. - */ - click: function( id ) { - return this._.buttons[ id ].click(); - }, - - /** - * Disables a dialog button. - * - * @param {String} id The id of the button. - */ - disableButton: function( id ) { - return this._.buttons[ id ].disable(); - }, - - /** - * Enables a dialog button. - * - * @param {String} id The id of the button. - */ - enableButton: function( id ) { - return this._.buttons[ id ].enable(); - }, - - /** - * Gets the number of pages in the dialog. - * - * @returns {Number} Page count. - */ - getPageCount: function() { - return this._.pageCount; - }, - - /** - * Gets the editor instance which opened this dialog. - * - * @returns {CKEDITOR.editor} Parent editor instances. - */ - getParentEditor: function() { - return this._.editor; - }, - - /** - * Gets the element that was selected when opening the dialog, if any. - * - * @returns {CKEDITOR.dom.element} The element that was selected, or `null`. - */ - getSelectedElement: function() { - return this.getParentEditor().getSelection().getSelectedElement(); - }, - - /** - * Adds element to dialog's focusable list. - * - * @param {CKEDITOR.dom.element} element - * @param {Number} [index] - */ - addFocusable: function( element, index ) { - if ( typeof index == 'undefined' ) { - index = this._.focusList.length; - this._.focusList.push( new Focusable( this, element, index ) ); - } else { - this._.focusList.splice( index, 0, new Focusable( this, element, index ) ); - for ( var i = index + 1; i < this._.focusList.length; i++ ) - this._.focusList[ i ].focusIndex++; - } - } - }; - - CKEDITOR.tools.extend( CKEDITOR.dialog, { - /** - * Registers a dialog. - * - * // Full sample plugin, which does not only register a dialog window but also adds an item to the context menu. - * // To open the dialog window, choose "Open dialog" in the context menu. - * CKEDITOR.plugins.add( 'myplugin', { - * init: function( editor ) { - * editor.addCommand( 'mydialog',new CKEDITOR.dialogCommand( 'mydialog' ) ); - * - * if ( editor.contextMenu ) { - * editor.addMenuGroup( 'mygroup', 10 ); - * editor.addMenuItem( 'My Dialog', { - * label: 'Open dialog', - * command: 'mydialog', - * group: 'mygroup' - * } ); - * editor.contextMenu.addListener( function( element ) { - * return { 'My Dialog': CKEDITOR.TRISTATE_OFF }; - * } ); - * } - * - * CKEDITOR.dialog.add( 'mydialog', function( api ) { - * // CKEDITOR.dialog.definition - * var dialogDefinition = { - * title: 'Sample dialog', - * minWidth: 390, - * minHeight: 130, - * contents: [ - * { - * id: 'tab1', - * label: 'Label', - * title: 'Title', - * expand: true, - * padding: 0, - * elements: [ - * { - * type: 'html', - * html: '

    This is some sample HTML content.

    ' - * }, - * { - * type: 'textarea', - * id: 'textareaId', - * rows: 4, - * cols: 40 - * } - * ] - * } - * ], - * buttons: [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ], - * onOk: function() { - * // "this" is now a CKEDITOR.dialog object. - * // Accessing dialog elements: - * var textareaObj = this.getContentElement( 'tab1', 'textareaId' ); - * alert( "You have entered: " + textareaObj.getValue() ); - * } - * }; - * - * return dialogDefinition; - * } ); - * } - * } ); - * - * CKEDITOR.replace( 'editor1', { extraPlugins: 'myplugin' } ); - * - * @static - * @param {String} name The dialog's name. - * @param {Function/String} dialogDefinition - * A function returning the dialog's definition, or the URL to the `.js` file holding the function. - * The function should accept an argument `editor` which is the current editor instance, and - * return an object conforming to {@link CKEDITOR.dialog.definition}. - * @see CKEDITOR.dialog.definition - */ - add: function( name, dialogDefinition ) { - // Avoid path registration from multiple instances override definition. - if ( !this._.dialogDefinitions[ name ] || typeof dialogDefinition == 'function' ) - this._.dialogDefinitions[ name ] = dialogDefinition; - }, - - /** - * @static - * @todo - */ - exists: function( name ) { - return !!this._.dialogDefinitions[ name ]; - }, - - /** - * @static - * @todo - */ - getCurrent: function() { - return CKEDITOR.dialog._.currentTop; - }, - - /** - * Check whether tab wasn't removed by {@link CKEDITOR.config#removeDialogTabs}. - * - * @since 4.1 - * @static - * @param {CKEDITOR.editor} editor - * @param {String} dialogName - * @param {String} tabName - * @returns {Boolean} - */ - isTabEnabled: function( editor, dialogName, tabName ) { - var cfg = editor.config.removeDialogTabs; - - return !( cfg && cfg.match( new RegExp( '(?:^|;)' + dialogName + ':' + tabName + '(?:$|;)', 'i' ) ) ); - }, - - /** - * The default OK button for dialogs. Fires the `ok` event and closes the dialog if the event succeeds. - * - * @static - * @method - */ - okButton: (function() { - var retval = function( editor, override ) { - override = override || {}; - return CKEDITOR.tools.extend({ - id: 'ok', - type: 'button', - label: editor.lang.common.ok, - 'class': 'cke_dialog_ui_button_ok', - onClick: function( evt ) { - var dialog = evt.data.dialog; - if ( dialog.fire( 'ok', { hide: true } ).hide !== false ) - dialog.hide(); - } - }, override, true ); - }; - retval.type = 'button'; - retval.override = function( override ) { - return CKEDITOR.tools.extend( function( editor ) { - return retval( editor, override ); - }, { type: 'button' }, true ); - }; - return retval; - })(), - - /** - * The default cancel button for dialogs. Fires the `cancel` event and - * closes the dialog if no UI element value changed. - * - * @static - * @method - */ - cancelButton: (function() { - var retval = function( editor, override ) { - override = override || {}; - return CKEDITOR.tools.extend({ - id: 'cancel', - type: 'button', - label: editor.lang.common.cancel, - 'class': 'cke_dialog_ui_button_cancel', - onClick: function( evt ) { - var dialog = evt.data.dialog; - if ( dialog.fire( 'cancel', { hide: true } ).hide !== false ) - dialog.hide(); - } - }, override, true ); - }; - retval.type = 'button'; - retval.override = function( override ) { - return CKEDITOR.tools.extend( function( editor ) { - return retval( editor, override ); - }, { type: 'button' }, true ); - }; - return retval; - })(), - - /** - * Registers a dialog UI element. - * - * @static - * @param {String} typeName The name of the UI element. - * @param {Function} builder The function to build the UI element. - */ - addUIElement: function( typeName, builder ) { - this._.uiElementBuilders[ typeName ] = builder; - } - }); - - CKEDITOR.dialog._ = { - uiElementBuilders: {}, - - dialogDefinitions: {}, - - currentTop: null, - - currentZIndex: null - }; - - // "Inherit" (copy actually) from CKEDITOR.event. - CKEDITOR.event.implementOn( CKEDITOR.dialog ); - CKEDITOR.event.implementOn( CKEDITOR.dialog.prototype ); - - var defaultDialogDefinition = { - resizable: CKEDITOR.DIALOG_RESIZE_BOTH, - minWidth: 600, - minHeight: 400, - buttons: [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ] - }; - - // Tool function used to return an item from an array based on its id - // property. - var getById = function( array, id, recurse ) { - for ( var i = 0, item; - ( item = array[ i ] ); i++ ) { - if ( item.id == id ) - return item; - if ( recurse && item[ recurse ] ) { - var retval = getById( item[ recurse ], id, recurse ); - if ( retval ) - return retval; - } - } - return null; - }; - - // Tool function used to add an item into an array. - var addById = function( array, newItem, nextSiblingId, recurse, nullIfNotFound ) { - if ( nextSiblingId ) { - for ( var i = 0, item; - ( item = array[ i ] ); i++ ) { - if ( item.id == nextSiblingId ) { - array.splice( i, 0, newItem ); - return newItem; - } - - if ( recurse && item[ recurse ] ) { - var retval = addById( item[ recurse ], newItem, nextSiblingId, recurse, true ); - if ( retval ) - return retval; - } - } - - if ( nullIfNotFound ) - return null; - } - - array.push( newItem ); - return newItem; - }; - - // Tool function used to remove an item from an array based on its id. - var removeById = function( array, id, recurse ) { - for ( var i = 0, item; - ( item = array[ i ] ); i++ ) { - if ( item.id == id ) - return array.splice( i, 1 ); - if ( recurse && item[ recurse ] ) { - var retval = removeById( item[ recurse ], id, recurse ); - if ( retval ) - return retval; - } - } - return null; - }; - - /** - * This class is not really part of the API. It is the `definition` property value - * passed to `dialogDefinition` event handlers. - * - * CKEDITOR.on( 'dialogDefinition', function( evt ) { - * var definition = evt.data.definition; - * var content = definition.getContents( 'page1' ); - * // ... - * } ); - * - * @private - * @class CKEDITOR.dialog.definitionObject - * @extends CKEDITOR.dialog.definition - * @constructor Creates a definitionObject class instance. - */ - var definitionObject = function( dialog, dialogDefinition ) { - // TODO : Check if needed. - this.dialog = dialog; - - // Transform the contents entries in contentObjects. - var contents = dialogDefinition.contents; - for ( var i = 0, content; - ( content = contents[ i ] ); i++ ) - contents[ i ] = content && new contentObject( dialog, content ); - - CKEDITOR.tools.extend( this, dialogDefinition ); - }; - - definitionObject.prototype = { - /** - * Gets a content definition. - * - * @param {String} id The id of the content definition. - * @returns {CKEDITOR.dialog.definition.content} The content definition matching id. - */ - getContents: function( id ) { - return getById( this.contents, id ); - }, - - /** - * Gets a button definition. - * - * @param {String} id The id of the button definition. - * @returns {CKEDITOR.dialog.definition.button} The button definition matching id. - */ - getButton: function( id ) { - return getById( this.buttons, id ); - }, - - /** - * Adds a content definition object under this dialog definition. - * - * @param {CKEDITOR.dialog.definition.content} contentDefinition The - * content definition. - * @param {String} [nextSiblingId] The id of an existing content - * definition which the new content definition will be inserted - * before. Omit if the new content definition is to be inserted as - * the last item. - * @returns {CKEDITOR.dialog.definition.content} The inserted content definition. - */ - addContents: function( contentDefinition, nextSiblingId ) { - return addById( this.contents, contentDefinition, nextSiblingId ); - }, - - /** - * Adds a button definition object under this dialog definition. - * - * @param {CKEDITOR.dialog.definition.button} buttonDefinition The - * button definition. - * @param {String} [nextSiblingId] The id of an existing button - * definition which the new button definition will be inserted - * before. Omit if the new button definition is to be inserted as - * the last item. - * @returns {CKEDITOR.dialog.definition.button} The inserted button definition. - */ - addButton: function( buttonDefinition, nextSiblingId ) { - return addById( this.buttons, buttonDefinition, nextSiblingId ); - }, - - /** - * Removes a content definition from this dialog definition. - * - * @param {String} id The id of the content definition to be removed. - * @returns {CKEDITOR.dialog.definition.content} The removed content definition. - */ - removeContents: function( id ) { - removeById( this.contents, id ); - }, - - /** - * Removes a button definition from the dialog definition. - * - * @param {String} id The id of the button definition to be removed. - * @returns {CKEDITOR.dialog.definition.button} The removed button definition. - */ - removeButton: function( id ) { - removeById( this.buttons, id ); - } - }; - - /** - * This class is not really part of the API. It is the template of the - * objects representing content pages inside the - * CKEDITOR.dialog.definitionObject. - * - * CKEDITOR.on( 'dialogDefinition', function( evt ) { - * var definition = evt.data.definition; - * var content = definition.getContents( 'page1' ); - * content.remove( 'textInput1' ); - * // ... - * } ); - * - * @private - * @class CKEDITOR.dialog.definition.contentObject - * @constructor Creates a contentObject class instance. - */ - function contentObject( dialog, contentDefinition ) { - this._ = { - dialog: dialog - }; - - CKEDITOR.tools.extend( this, contentDefinition ); - } - - contentObject.prototype = { - /** - * Gets a UI element definition under the content definition. - * - * @param {String} id The id of the UI element definition. - * @returns {CKEDITOR.dialog.definition.uiElement} - */ - get: function( id ) { - return getById( this.elements, id, 'children' ); - }, - - /** - * Adds a UI element definition to the content definition. - * - * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition The - * UI elemnet definition to be added. - * @param {String} nextSiblingId The id of an existing UI element - * definition which the new UI element definition will be inserted - * before. Omit if the new button definition is to be inserted as - * the last item. - * @returns {CKEDITOR.dialog.definition.uiElement} The element definition inserted. - */ - add: function( elementDefinition, nextSiblingId ) { - return addById( this.elements, elementDefinition, nextSiblingId, 'children' ); - }, - - /** - * Removes a UI element definition from the content definition. - * - * @param {String} id The id of the UI element definition to be removed. - * @returns {CKEDITOR.dialog.definition.uiElement} The element definition removed. - */ - remove: function( id ) { - removeById( this.elements, id, 'children' ); - } - }; - - function initDragAndDrop( dialog ) { - var lastCoords = null, - abstractDialogCoords = null, - element = dialog.getElement().getFirst(), - editor = dialog.getParentEditor(), - magnetDistance = editor.config.dialog_magnetDistance, - margins = CKEDITOR.skin.margins || [ 0, 0, 0, 0 ]; - - if ( typeof magnetDistance == 'undefined' ) - magnetDistance = 20; - - function mouseMoveHandler( evt ) { - var dialogSize = dialog.getSize(), - viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(), - x = evt.data.$.screenX, - y = evt.data.$.screenY, - dx = x - lastCoords.x, - dy = y - lastCoords.y, - realX, realY; - - lastCoords = { x: x, y: y }; - abstractDialogCoords.x += dx; - abstractDialogCoords.y += dy; - - if ( abstractDialogCoords.x + margins[ 3 ] < magnetDistance ) - realX = -margins[ 3 ]; - else if ( abstractDialogCoords.x - margins[ 1 ] > viewPaneSize.width - dialogSize.width - magnetDistance ) - realX = viewPaneSize.width - dialogSize.width + ( editor.lang.dir == 'rtl' ? 0 : margins[ 1 ] ); - else - realX = abstractDialogCoords.x; - - if ( abstractDialogCoords.y + margins[ 0 ] < magnetDistance ) - realY = -margins[ 0 ]; - else if ( abstractDialogCoords.y - margins[ 2 ] > viewPaneSize.height - dialogSize.height - magnetDistance ) - realY = viewPaneSize.height - dialogSize.height + margins[ 2 ]; - else - realY = abstractDialogCoords.y; - - dialog.move( realX, realY, 1 ); - - evt.data.preventDefault(); - } - - function mouseUpHandler( evt ) { - CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler ); - CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); - - if ( CKEDITOR.env.ie6Compat ) { - var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); - coverDoc.removeListener( 'mousemove', mouseMoveHandler ); - coverDoc.removeListener( 'mouseup', mouseUpHandler ); - } - } - - dialog.parts.title.on( 'mousedown', function( evt ) { - lastCoords = { x: evt.data.$.screenX, y: evt.data.$.screenY }; - - CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); - CKEDITOR.document.on( 'mouseup', mouseUpHandler ); - abstractDialogCoords = dialog.getPosition(); - - if ( CKEDITOR.env.ie6Compat ) { - var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); - coverDoc.on( 'mousemove', mouseMoveHandler ); - coverDoc.on( 'mouseup', mouseUpHandler ); - } - - evt.data.preventDefault(); - }, dialog ); - } - - function initResizeHandles( dialog ) { - var def = dialog.definition, - resizable = def.resizable; - - if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE ) - return; - - var editor = dialog.getParentEditor(); - var wrapperWidth, wrapperHeight, viewSize, origin, startSize, dialogCover; - - var mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) { - startSize = dialog.getSize(); - - var content = dialog.parts.contents, - iframeDialog = content.$.getElementsByTagName( 'iframe' ).length; - - // Shim to help capturing "mousemove" over iframe. - if ( iframeDialog ) { - dialogCover = CKEDITOR.dom.element.createFromHtml( '
    ' ); - content.append( dialogCover ); - } - - // Calculate the offset between content and chrome size. - wrapperHeight = startSize.height - dialog.parts.contents.getSize( 'height', !( CKEDITOR.env.gecko || CKEDITOR.env.opera || CKEDITOR.env.ie && CKEDITOR.env.quirks ) ); - wrapperWidth = startSize.width - dialog.parts.contents.getSize( 'width', 1 ); - - origin = { x: $event.screenX, y: $event.screenY }; - - viewSize = CKEDITOR.document.getWindow().getViewPaneSize(); - - CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); - CKEDITOR.document.on( 'mouseup', mouseUpHandler ); - - if ( CKEDITOR.env.ie6Compat ) { - var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); - coverDoc.on( 'mousemove', mouseMoveHandler ); - coverDoc.on( 'mouseup', mouseUpHandler ); - } - - $event.preventDefault && $event.preventDefault(); - }); - - // Prepend the grip to the dialog. - dialog.on( 'load', function() { - var direction = ''; - if ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH ) - direction = ' cke_resizer_horizontal'; - else if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT ) - direction = ' cke_resizer_vertical'; - var resizer = CKEDITOR.dom.element.createFromHtml( - '' + - // BLACK LOWER RIGHT TRIANGLE (ltr) - // BLACK LOWER LEFT TRIANGLE (rtl) - ( editor.lang.dir == 'ltr' ? '\u25E2' : '\u25E3' ) + - '
    ' ); - dialog.parts.footer.append( resizer, 1 ); - }); - editor.on( 'destroy', function() { - CKEDITOR.tools.removeFunction( mouseDownFn ); - }); - - function mouseMoveHandler( evt ) { - var rtl = editor.lang.dir == 'rtl', - dx = ( evt.data.$.screenX - origin.x ) * ( rtl ? -1 : 1 ), - dy = evt.data.$.screenY - origin.y, - width = startSize.width, - height = startSize.height, - internalWidth = width + dx * ( dialog._.moved ? 1 : 2 ), - internalHeight = height + dy * ( dialog._.moved ? 1 : 2 ), - element = dialog._.element.getFirst(), - right = rtl && element.getComputedStyle( 'right' ), - position = dialog.getPosition(); - - if ( position.y + internalHeight > viewSize.height ) - internalHeight = viewSize.height - position.y; - - if ( ( rtl ? right : position.x ) + internalWidth > viewSize.width ) - internalWidth = viewSize.width - ( rtl ? right : position.x ); - - // Make sure the dialog will not be resized to the wrong side when it's in the leftmost position for RTL. - if ( ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) ) - width = Math.max( def.minWidth || 0, internalWidth - wrapperWidth ); - - if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) - height = Math.max( def.minHeight || 0, internalHeight - wrapperHeight ); - - dialog.resize( width, height ); - - if ( !dialog._.moved ) - dialog.layout(); - - evt.data.preventDefault(); - } - - function mouseUpHandler() { - CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); - CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler ); - - if ( dialogCover ) { - dialogCover.remove(); - dialogCover = null; - } - - if ( CKEDITOR.env.ie6Compat ) { - var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); - coverDoc.removeListener( 'mouseup', mouseUpHandler ); - coverDoc.removeListener( 'mousemove', mouseMoveHandler ); - } - } - } - - var resizeCover; - // Caching resuable covers and allowing only one cover - // on screen. - var covers = {}, - currentCover; - - function cancelEvent( ev ) { - ev.data.preventDefault( 1 ); - } - - function showCover( editor ) { - var win = CKEDITOR.document.getWindow(); - var config = editor.config, - backgroundColorStyle = config.dialog_backgroundCoverColor || 'white', - backgroundCoverOpacity = config.dialog_backgroundCoverOpacity, - baseFloatZIndex = config.baseFloatZIndex, - coverKey = CKEDITOR.tools.genKey( backgroundColorStyle, backgroundCoverOpacity, baseFloatZIndex ), - coverElement = covers[ coverKey ]; - - if ( !coverElement ) { - var html = [ - '
    ' - ]; - - if ( CKEDITOR.env.ie6Compat ) { - // Support for custom document.domain in IE. - var isCustomDomain = CKEDITOR.env.isCustomDomain(), - iframeHtml = ''; - - html.push( '' + - '' ); - } - - html.push( '
    ' ); - - coverElement = CKEDITOR.dom.element.createFromHtml( html.join( '' ) ); - coverElement.setOpacity( backgroundCoverOpacity != undefined ? backgroundCoverOpacity : 0.5 ); - - coverElement.on( 'keydown', cancelEvent ); - coverElement.on( 'keypress', cancelEvent ); - coverElement.on( 'keyup', cancelEvent ); - - coverElement.appendTo( CKEDITOR.document.getBody() ); - covers[ coverKey ] = coverElement; - } else - coverElement.show(); - - // Makes the dialog cover a focus holder as well. - editor.focusManager.add( coverElement ); - - currentCover = coverElement; - var resizeFunc = function() { - var size = win.getViewPaneSize(); - coverElement.setStyles({ - width: size.width + 'px', - height: size.height + 'px' - }); - }; - - var scrollFunc = function() { - var pos = win.getScrollPosition(), - cursor = CKEDITOR.dialog._.currentTop; - coverElement.setStyles({ - left: pos.x + 'px', - top: pos.y + 'px' - }); - - if ( cursor ) { - do { - var dialogPos = cursor.getPosition(); - cursor.move( dialogPos.x, dialogPos.y ); - } while ( ( cursor = cursor._.parentDialog ) ); - } - }; - - resizeCover = resizeFunc; - win.on( 'resize', resizeFunc ); - resizeFunc(); - // Using Safari/Mac, focus must be kept where it is (#7027) - if ( !( CKEDITOR.env.mac && CKEDITOR.env.webkit ) ) - coverElement.focus(); - - if ( CKEDITOR.env.ie6Compat ) { - // IE BUG: win.$.onscroll assignment doesn't work.. it must be window.onscroll. - // So we need to invent a really funny way to make it work. - var myScrollHandler = function() { - scrollFunc(); - arguments.callee.prevScrollHandler.apply( this, arguments ); - }; - win.$.setTimeout( function() { - myScrollHandler.prevScrollHandler = window.onscroll || - function() {}; - window.onscroll = myScrollHandler; - }, 0 ); - scrollFunc(); - } - } - - function hideCover( editor ) { - if ( !currentCover ) - return; - - editor.focusManager.remove( currentCover ); - var win = CKEDITOR.document.getWindow(); - currentCover.hide(); - win.removeListener( 'resize', resizeCover ); - - if ( CKEDITOR.env.ie6Compat ) { - win.$.setTimeout( function() { - var prevScrollHandler = window.onscroll && window.onscroll.prevScrollHandler; - window.onscroll = prevScrollHandler || null; - }, 0 ); - } - resizeCover = null; - } - - function removeCovers() { - for ( var coverId in covers ) - covers[ coverId ].remove(); - covers = {}; - } - - var accessKeyProcessors = {}; - - var accessKeyDownHandler = function( evt ) { - var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey, - alt = evt.data.$.altKey, - shift = evt.data.$.shiftKey, - key = String.fromCharCode( evt.data.$.keyCode ), - keyProcessor = accessKeyProcessors[ ( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '' ) + ( shift ? 'SHIFT+' : '' ) + key ]; - - if ( !keyProcessor || !keyProcessor.length ) - return; - - keyProcessor = keyProcessor[ keyProcessor.length - 1 ]; - keyProcessor.keydown && keyProcessor.keydown.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key ); - evt.data.preventDefault(); - }; - - var accessKeyUpHandler = function( evt ) { - var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey, - alt = evt.data.$.altKey, - shift = evt.data.$.shiftKey, - key = String.fromCharCode( evt.data.$.keyCode ), - keyProcessor = accessKeyProcessors[ ( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '' ) + ( shift ? 'SHIFT+' : '' ) + key ]; - - if ( !keyProcessor || !keyProcessor.length ) - return; - - keyProcessor = keyProcessor[ keyProcessor.length - 1 ]; - if ( keyProcessor.keyup ) { - keyProcessor.keyup.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key ); - evt.data.preventDefault(); - } - }; - - var registerAccessKey = function( uiElement, dialog, key, downFunc, upFunc ) { - var procList = accessKeyProcessors[ key ] || ( accessKeyProcessors[ key ] = [] ); - procList.push({ - uiElement: uiElement, - dialog: dialog, - key: key, - keyup: upFunc || uiElement.accessKeyUp, - keydown: downFunc || uiElement.accessKeyDown - }); - }; - - var unregisterAccessKey = function( obj ) { - for ( var i in accessKeyProcessors ) { - var list = accessKeyProcessors[ i ]; - for ( var j = list.length - 1; j >= 0; j-- ) { - if ( list[ j ].dialog == obj || list[ j ].uiElement == obj ) - list.splice( j, 1 ); - } - if ( list.length === 0 ) - delete accessKeyProcessors[ i ]; - } - }; - - var tabAccessKeyUp = function( dialog, key ) { - if ( dialog._.accessKeyMap[ key ] ) - dialog.selectPage( dialog._.accessKeyMap[ key ] ); - }; - - var tabAccessKeyDown = function( dialog, key ) {}; - - (function() { - CKEDITOR.ui.dialog = { - /** - * The base class of all dialog UI elements. - * - * @class CKEDITOR.ui.dialog.uiElement - * @constructor Creates a uiElement class instance. - * @param {CKEDITOR.dialog} dialog Parent dialog object. - * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element - * definition. - * - * Accepted fields: - * - * * `id` (Required) The id of the UI element. See {@link CKEDITOR.dialog#getContentElement}. - * * `type` (Required) The type of the UI element. The - * value to this field specifies which UI element class will be used to - * generate the final widget. - * * `title` (Optional) The popup tooltip for the UI - * element. - * * `hidden` (Optional) A flag that tells if the element - * should be initially visible. - * * `className` (Optional) Additional CSS class names - * to add to the UI element. Separated by space. - * * `style` (Optional) Additional CSS inline styles - * to add to the UI element. A semicolon (;) is required after the last - * style declaration. - * * `accessKey` (Optional) The alphanumeric access key - * for this element. Access keys are automatically prefixed by CTRL. - * * `on*` (Optional) Any UI element definition field that - * starts with `on` followed immediately by a capital letter and - * probably more letters is an event handler. Event handlers may be further - * divided into registered event handlers and DOM event handlers. Please - * refer to {@link CKEDITOR.ui.dialog.uiElement#registerEvents} and - * {@link CKEDITOR.ui.dialog.uiElement#eventProcessors} for more information. - * - * @param {Array} htmlList - * List of HTML code to be added to the dialog's content area. - * @param {Function/String} [nodeNameArg='div'] - * A function returning a string, or a simple string for the node name for - * the root DOM node. - * @param {Function/Object} [stylesArg={}] - * A function returning an object, or a simple object for CSS styles applied - * to the DOM node. - * @param {Function/Object} [attributesArg={}] - * A fucntion returning an object, or a simple object for attributes applied - * to the DOM node. - * @param {Function/String} [contentsArg=''] - * A function returning a string, or a simple string for the HTML code inside - * the root DOM node. Default is empty string. - */ - uiElement: function( dialog, elementDefinition, htmlList, nodeNameArg, stylesArg, attributesArg, contentsArg ) { - if ( arguments.length < 4 ) - return; - - var nodeName = ( nodeNameArg.call ? nodeNameArg( elementDefinition ) : nodeNameArg ) || 'div', - html = [ '<', nodeName, ' ' ], - styles = ( stylesArg && stylesArg.call ? stylesArg( elementDefinition ) : stylesArg ) || {}, - attributes = ( attributesArg && attributesArg.call ? attributesArg( elementDefinition ) : attributesArg ) || {}, - innerHTML = ( contentsArg && contentsArg.call ? contentsArg.call( this, dialog, elementDefinition ) : contentsArg ) || '', - domId = this.domId = attributes.id || CKEDITOR.tools.getNextId() + '_uiElement', - id = this.id = elementDefinition.id, - i; - - if ( elementDefinition.requiredContent && !dialog.getParentEditor().filter.check( elementDefinition.requiredContent ) ) { - styles.display = 'none'; - this.notAllowed = true; - } - - // Set the id, a unique id is required for getElement() to work. - attributes.id = domId; - - // Set the type and definition CSS class names. - var classes = {}; - if ( elementDefinition.type ) - classes[ 'cke_dialog_ui_' + elementDefinition.type ] = 1; - if ( elementDefinition.className ) - classes[ elementDefinition.className ] = 1; - if ( elementDefinition.disabled ) - classes[ 'cke_disabled' ] = 1; - - var attributeClasses = ( attributes[ 'class' ] && attributes[ 'class' ].split ) ? attributes[ 'class' ].split( ' ' ) : []; - for ( i = 0; i < attributeClasses.length; i++ ) { - if ( attributeClasses[ i ] ) - classes[ attributeClasses[ i ] ] = 1; - } - var finalClasses = []; - for ( i in classes ) - finalClasses.push( i ); - attributes[ 'class' ] = finalClasses.join( ' ' ); - - // Set the popup tooltop. - if ( elementDefinition.title ) - attributes.title = elementDefinition.title; - - // Write the inline CSS styles. - var styleStr = ( elementDefinition.style || '' ).split( ';' ); - - // Element alignment support. - if ( elementDefinition.align ) { - var align = elementDefinition.align; - styles[ 'margin-left' ] = align == 'left' ? 0 : 'auto'; - styles[ 'margin-right' ] = align == 'right' ? 0 : 'auto'; - } - - for ( i in styles ) - styleStr.push( i + ':' + styles[ i ] ); - if ( elementDefinition.hidden ) - styleStr.push( 'display:none' ); - for ( i = styleStr.length - 1; i >= 0; i-- ) { - if ( styleStr[ i ] === '' ) - styleStr.splice( i, 1 ); - } - if ( styleStr.length > 0 ) - attributes.style = ( attributes.style ? ( attributes.style + '; ' ) : '' ) + styleStr.join( '; ' ); - - // Write the attributes. - for ( i in attributes ) - html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[ i ] ) + '" ' ); - - // Write the content HTML. - html.push( '>', innerHTML, '' ); - - // Add contents to the parent HTML array. - htmlList.push( html.join( '' ) ); - - ( this._ || ( this._ = {} ) ).dialog = dialog; - - // Override isChanged if it is defined in element definition. - if ( typeof( elementDefinition.isChanged ) == 'boolean' ) - this.isChanged = function() { - return elementDefinition.isChanged; - }; - if ( typeof( elementDefinition.isChanged ) == 'function' ) - this.isChanged = elementDefinition.isChanged; - - // Overload 'get(set)Value' on definition. - if ( typeof( elementDefinition.setValue ) == 'function' ) { - this.setValue = CKEDITOR.tools.override( this.setValue, function( org ) { - return function( val ) { - org.call( this, elementDefinition.setValue.call( this, val ) ); - }; - }); - } - - if ( typeof( elementDefinition.getValue ) == 'function' ) { - this.getValue = CKEDITOR.tools.override( this.getValue, function( org ) { - return function() { - return elementDefinition.getValue.call( this, org.call( this ) ); - }; - }); - } - - // Add events. - CKEDITOR.event.implementOn( this ); - - this.registerEvents( elementDefinition ); - if ( this.accessKeyUp && this.accessKeyDown && elementDefinition.accessKey ) - registerAccessKey( this, dialog, 'CTRL+' + elementDefinition.accessKey ); - - var me = this; - dialog.on( 'load', function() { - var input = me.getInputElement(); - if ( input ) { - var focusClass = me.type in { 'checkbox':1,'ratio':1 } && CKEDITOR.env.ie && CKEDITOR.env.version < 8 ? 'cke_dialog_ui_focused' : ''; - input.on( 'focus', function() { - dialog._.tabBarMode = false; - dialog._.hasFocus = true; - me.fire( 'focus' ); - focusClass && this.addClass( focusClass ); - - }); - - input.on( 'blur', function() { - me.fire( 'blur' ); - focusClass && this.removeClass( focusClass ); - }); - } - }); - - // Register the object as a tab focus if it can be included. - if ( this.keyboardFocusable ) { - this.tabIndex = elementDefinition.tabIndex || 0; - - this.focusIndex = dialog._.focusList.push( this ) - 1; - this.on( 'focus', function() { - dialog._.currentFocusIndex = me.focusIndex; - }); - } - - // Completes this object with everything we have in the - // definition. - CKEDITOR.tools.extend( this, elementDefinition ); - }, - - /** - * Horizontal layout box for dialog UI elements, auto-expends to available width of container. - * - * @class CKEDITOR.ui.dialog.hbox - * @extends CKEDITOR.ui.dialog.uiElement - * @constructor Creates a hbox class instance. - * @param {CKEDITOR.dialog} dialog Parent dialog object. - * @param {Array} childObjList - * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. - * @param {Array} childHtmlList - * Array of HTML code that correspond to the HTML output of all the - * objects in childObjList. - * @param {Array} htmlList - * Array of HTML code that this element will output to. - * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition - * The element definition. Accepted fields: - * - * * `widths` (Optional) The widths of child cells. - * * `height` (Optional) The height of the layout. - * * `padding` (Optional) The padding width inside child cells. - * * `align` (Optional) The alignment of the whole layout. - */ - hbox: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { - if ( arguments.length < 4 ) - return; - - this._ || ( this._ = {} ); - - var children = this._.children = childObjList, - widths = elementDefinition && elementDefinition.widths || null, - height = elementDefinition && elementDefinition.height || null, - styles = {}, - i; - /** @ignore */ - var innerHTML = function() { - var html = [ '
    ' ); - for ( var i = 0; i < childHtmlList.length; i++ ) { - var styles = []; - html.push( '' ); - } - html.push( '
    0 ) - html.push( 'style="', styles.join( '; ' ), '" ' ); - html.push( ' class="cke_dialog_ui_vbox_child">', childHtmlList[ i ], '
    ' ); - return html.join( '' ); - }; - CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type: 'vbox' }, htmlList, 'div', null, { role: 'presentation' }, innerHTML ); - } - }; - })(); - - /** @class CKEDITOR.ui.dialog.uiElement */ - CKEDITOR.ui.dialog.uiElement.prototype = { - /** - * Gets the root DOM element of this dialog UI object. - * - * uiElement.getElement().hide(); - * - * @returns {CKEDITOR.dom.element} Root DOM element of UI object. - */ - getElement: function() { - return CKEDITOR.document.getById( this.domId ); - }, - - /** - * Gets the DOM element that the user inputs values. - * - * This function is used by {@link #setValue}, {@link #getValue} and {@link #focus}. It should - * be overrided in child classes where the input element isn't the root - * element. - * - * var rawValue = textInput.getInputElement().$.value; - * - * @returns {CKEDITOR.dom.element} The element where the user input values. - */ - getInputElement: function() { - return this.getElement(); - }, - - /** - * Gets the parent dialog object containing this UI element. - * - * var dialog = uiElement.getDialog(); - * - * @returns {CKEDITOR.dialog} Parent dialog object. - */ - getDialog: function() { - return this._.dialog; - }, - - /** - * Sets the value of this dialog UI object. - * - * uiElement.setValue( 'Dingo' ); - * - * @chainable - * @param {Object} value The new value. - * @param {Boolean} noChangeEvent Internal commit, to supress `change` event on this element. - */ - setValue: function( value, noChangeEvent ) { - this.getInputElement().setValue( value ); - !noChangeEvent && this.fire( 'change', { value: value } ); - return this; - }, - - /** - * Gets the current value of this dialog UI object. - * - * var myValue = uiElement.getValue(); - * - * @returns {Object} The current value. - */ - getValue: function() { - return this.getInputElement().getValue(); - }, - - /** - * Tells whether the UI object's value has changed. - * - * if ( uiElement.isChanged() ) - * confirm( 'Value changed! Continue?' ); - * - * @returns {Boolean} `true` if changed, `false` if not changed. - */ - isChanged: function() { - // Override in input classes. - return false; - }, - - /** - * Selects the parent tab of this element. Usually called by focus() or overridden focus() methods. - * - * focus : function() { - * this.selectParentTab(); - * // do something else. - * } - * - * @chainable - */ - selectParentTab: function() { - var element = this.getInputElement(), - cursor = element, - tabId; - while ( ( cursor = cursor.getParent() ) && cursor.$.className.search( 'cke_dialog_page_contents' ) == -1 ) { - /*jsl:pass*/ - } - - // Some widgets don't have parent tabs (e.g. OK and Cancel buttons). - if ( !cursor ) - return this; - - tabId = cursor.getAttribute( 'name' ); - // Avoid duplicate select. - if ( this._.dialog._.currentTabId != tabId ) - this._.dialog.selectPage( tabId ); - return this; - }, - - /** - * Puts the focus to the UI object. Switches tabs if the UI object isn't in the active tab page. - * - * uiElement.focus(); - * - * @chainable - */ - focus: function() { - this.selectParentTab().getInputElement().focus(); - return this; - }, - - /** - * Registers the `on*` event handlers defined in the element definition. - * - * The default behavior of this function is: - * - * 1. If the on* event is defined in the class's eventProcesors list, - * then the registration is delegated to the corresponding function - * in the eventProcessors list. - * 2. If the on* event is not defined in the eventProcessors list, then - * register the event handler under the corresponding DOM event of - * the UI element's input DOM element (as defined by the return value - * of {@link #getInputElement}). - * - * This function is only called at UI element instantiation, but can - * be overridded in child classes if they require more flexibility. - * - * @chainable - * @param {CKEDITOR.dialog.definition.uiElement} definition The UI element - * definition. - */ - registerEvents: function( definition ) { - var regex = /^on([A-Z]\w+)/, - match; - - var registerDomEvent = function( uiElement, dialog, eventName, func ) { - dialog.on( 'load', function() { - uiElement.getInputElement().on( eventName, func, uiElement ); - }); - }; - - for ( var i in definition ) { - if ( !( match = i.match( regex ) ) ) - continue; - if ( this.eventProcessors[ i ] ) - this.eventProcessors[ i ].call( this, this._.dialog, definition[ i ] ); - else - registerDomEvent( this, this._.dialog, match[ 1 ].toLowerCase(), definition[ i ] ); - } - - return this; - }, - - /** - * The event processor list used by - * {@link CKEDITOR.ui.dialog.uiElement#getInputElement} at UI element - * instantiation. The default list defines three `on*` events: - * - * 1. `onLoad` - Called when the element's parent dialog opens for the - * first time. - * 2. `onShow` - Called whenever the element's parent dialog opens. - * 3. `onHide` - Called whenever the element's parent dialog closes. - * - * // This connects the 'click' event in CKEDITOR.ui.dialog.button to onClick - * // handlers in the UI element's definitions. - * CKEDITOR.ui.dialog.button.eventProcessors = CKEDITOR.tools.extend( {}, - * CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, - * { onClick : function( dialog, func ) { this.on( 'click', func ); } }, - * true - * ); - * - * @property {Object} - */ - eventProcessors: { - onLoad: function( dialog, func ) { - dialog.on( 'load', func, this ); - }, - - onShow: function( dialog, func ) { - dialog.on( 'show', func, this ); - }, - - onHide: function( dialog, func ) { - dialog.on( 'hide', func, this ); - } - }, - - /** - * The default handler for a UI element's access key down event, which - * tries to put focus to the UI element. - * - * Can be overridded in child classes for more sophisticaed behavior. - * - * @param {CKEDITOR.dialog} dialog The parent dialog object. - * @param {String} key The key combination pressed. Since access keys - * are defined to always include the `CTRL` key, its value should always - * include a `'CTRL+'` prefix. - */ - accessKeyDown: function( dialog, key ) { - this.focus(); - }, - - /** - * The default handler for a UI element's access key up event, which - * does nothing. - * - * Can be overridded in child classes for more sophisticated behavior. - * - * @param {CKEDITOR.dialog} dialog The parent dialog object. - * @param {String} key The key combination pressed. Since access keys - * are defined to always include the `CTRL` key, its value should always - * include a `'CTRL+'` prefix. - */ - accessKeyUp: function( dialog, key ) {}, - - /** - * Disables a UI element. - */ - disable: function() { - var element = this.getElement(), - input = this.getInputElement(); - input.setAttribute( 'disabled', 'true' ); - element.addClass( 'cke_disabled' ); - }, - - /** - * Enables a UI element. - */ - enable: function() { - var element = this.getElement(), - input = this.getInputElement(); - input.removeAttribute( 'disabled' ); - element.removeClass( 'cke_disabled' ); - }, - - /** - * Determines whether an UI element is enabled or not. - * - * @returns {Boolean} Whether the UI element is enabled. - */ - isEnabled: function() { - return !this.getElement().hasClass( 'cke_disabled' ); - }, - - /** - * Determines whether an UI element is visible or not. - * - * @returns {Boolean} Whether the UI element is visible. - */ - isVisible: function() { - return this.getInputElement().isVisible(); - }, - - /** - * Determines whether an UI element is focus-able or not. - * Focus-able is defined as being both visible and enabled. - * - * @returns {Boolean} Whether the UI element can be focused. - */ - isFocusable: function() { - if ( !this.isEnabled() || !this.isVisible() ) - return false; - return true; - } - }; - - /** @class CKEDITOR.ui.dialog.hbox */ - CKEDITOR.ui.dialog.hbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement, { - /** - * Gets a child UI element inside this container. - * - * var checkbox = hbox.getChild( [0,1] ); - * checkbox.setValue( true ); - * - * @param {Array/Number} indices An array or a single number to indicate the child's - * position in the container's descendant tree. Omit to get all the children in an array. - * @returns {Array/CKEDITOR.ui.dialog.uiElement} Array of all UI elements in the container - * if no argument given, or the specified UI element if indices is given. - */ - getChild: function( indices ) { - // If no arguments, return a clone of the children array. - if ( arguments.length < 1 ) - return this._.children.concat(); - - // If indices isn't array, make it one. - if ( !indices.splice ) - indices = [ indices ]; - - // Retrieve the child element according to tree position. - if ( indices.length < 2 ) - return this._.children[ indices[ 0 ] ]; - else - return ( this._.children[ indices[ 0 ] ] && this._.children[ indices[ 0 ] ].getChild ) ? this._.children[ indices[ 0 ] ].getChild( indices.slice( 1, indices.length ) ) : null; - } - }, true ); - - CKEDITOR.ui.dialog.vbox.prototype = new CKEDITOR.ui.dialog.hbox(); - - (function() { - var commonBuilder = { - build: function( dialog, elementDefinition, output ) { - var children = elementDefinition.children, - child, - childHtmlList = [], - childObjList = []; - for ( var i = 0; - ( i < children.length && ( child = children[ i ] ) ); i++ ) { - var childHtml = []; - childHtmlList.push( childHtml ); - childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) ); - } - return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, childObjList, childHtmlList, output, elementDefinition ); - } - }; - - CKEDITOR.dialog.addUIElement( 'hbox', commonBuilder ); - CKEDITOR.dialog.addUIElement( 'vbox', commonBuilder ); - })(); - - /** - * Generic dialog command. It opens a specific dialog when executed. - * - * // Register the "link" command, which opens the "link" dialog. - * editor.addCommand( 'link', new CKEDITOR.dialogCommand( 'link' ) ); - * - * @class - * @constructor Creates a dialogCommand class instance. - * @extends CKEDITOR.commandDefinition - * @param {String} dialogName The name of the dialog to open when executing - * this command. - * @param {Object} [ext] Additional command definition's properties. - */ - CKEDITOR.dialogCommand = function( dialogName, ext ) { - this.dialogName = dialogName; - CKEDITOR.tools.extend( this, ext, true ); - }; - - CKEDITOR.dialogCommand.prototype = { - exec: function( editor ) { - // Special treatment for Opera. (#8031) - CKEDITOR.env.opera ? CKEDITOR.tools.setTimeout( function() { - editor.openDialog( this.dialogName ); - }, 0, this ) : editor.openDialog( this.dialogName ); - }, - - // Dialog commands just open a dialog ui, thus require no undo logic, - // undo support should dedicate to specific dialog implementation. - canUndo: false, - - editorFocus: 1 - }; - - (function() { - var notEmptyRegex = /^([a]|[^a])+$/, - integerRegex = /^\d*$/, - numberRegex = /^\d*(?:\.\d+)?$/, - htmlLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/, - cssLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i, - inlineStyleRegex = /^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/; - - CKEDITOR.VALIDATE_OR = 1; - CKEDITOR.VALIDATE_AND = 2; - - CKEDITOR.dialog.validate = { - functions: function() { - var args = arguments; - return function() { - /** - * It's important for validate functions to be able to accept the value - * as argument in addition to this.getValue(), so that it is possible to - * combine validate functions together to make more sophisticated - * validators. - */ - var value = this && this.getValue ? this.getValue() : args[ 0 ]; - - var msg = undefined, - relation = CKEDITOR.VALIDATE_AND, - functions = [], - i; - - for ( i = 0; i < args.length; i++ ) { - if ( typeof( args[ i ] ) == 'function' ) - functions.push( args[ i ] ); - else - break; - } - - if ( i < args.length && typeof( args[ i ] ) == 'string' ) { - msg = args[ i ]; - i++; - } - - if ( i < args.length && typeof( args[ i ] ) == 'number' ) - relation = args[ i ]; - - var passed = ( relation == CKEDITOR.VALIDATE_AND ? true : false ); - for ( i = 0; i < functions.length; i++ ) { - if ( relation == CKEDITOR.VALIDATE_AND ) - passed = passed && functions[ i ]( value ); - else - passed = passed || functions[ i ]( value ); - } - - return !passed ? msg : true; - }; - }, - - regex: function( regex, msg ) { - /* - * Can be greatly shortened by deriving from functions validator if code size - * turns out to be more important than performance. - */ - return function() { - var value = this && this.getValue ? this.getValue() : arguments[ 0 ]; - return !regex.test( value ) ? msg : true; - }; - }, - - notEmpty: function( msg ) { - return this.regex( notEmptyRegex, msg ); - }, - - integer: function( msg ) { - return this.regex( integerRegex, msg ); - }, - - 'number': function( msg ) { - return this.regex( numberRegex, msg ); - }, - - 'cssLength': function( msg ) { - return this.functions( function( val ) { - return cssLengthRegex.test( CKEDITOR.tools.trim( val ) ); - }, msg ); - }, - - 'htmlLength': function( msg ) { - return this.functions( function( val ) { - return htmlLengthRegex.test( CKEDITOR.tools.trim( val ) ); - }, msg ); - }, - - 'inlineStyle': function( msg ) { - return this.functions( function( val ) { - return inlineStyleRegex.test( CKEDITOR.tools.trim( val ) ); - }, msg ); - }, - - equals: function( value, msg ) { - return this.functions( function( val ) { - return val == value; - }, msg ); - }, - - notEqual: function( value, msg ) { - return this.functions( function( val ) { - return val != value; - }, msg ); - } - }; - - CKEDITOR.on( 'instanceDestroyed', function( evt ) { - // Remove dialog cover on last instance destroy. - if ( CKEDITOR.tools.isEmpty( CKEDITOR.instances ) ) { - var currentTopDialog; - while ( ( currentTopDialog = CKEDITOR.dialog._.currentTop ) ) - currentTopDialog.hide(); - removeCovers(); - } - - var dialogs = evt.editor._.storedDialogs; - for ( var name in dialogs ) - dialogs[ name ].destroy(); - - }); - - })(); - - // Extend the CKEDITOR.editor class with dialog specific functions. - CKEDITOR.tools.extend( CKEDITOR.editor.prototype, { - /** - * Loads and opens a registered dialog. - * - * CKEDITOR.instances.editor1.openDialog( 'smiley' ); - * - * @member CKEDITOR.editor - * @param {String} dialogName The registered name of the dialog. - * @param {Function} callback The function to be invoked after dialog instance created. - * @returns {CKEDITOR.dialog} The dialog object corresponding to the dialog displayed. - * `null` if the dialog name is not registered. - * @see CKEDITOR.dialog#add - */ - openDialog: function( dialogName, callback ) { - var dialog = null, dialogDefinitions = CKEDITOR.dialog._.dialogDefinitions[ dialogName ]; - - if ( CKEDITOR.dialog._.currentTop === null ) - showCover( this ); - - // If the dialogDefinition is already loaded, open it immediately. - if ( typeof dialogDefinitions == 'function' ) { - var storedDialogs = this._.storedDialogs || ( this._.storedDialogs = {} ); - - dialog = storedDialogs[ dialogName ] || ( storedDialogs[ dialogName ] = new CKEDITOR.dialog( this, dialogName ) ); - - callback && callback.call( dialog, dialog ); - dialog.show(); - - } else if ( dialogDefinitions == 'failed' ) { - hideCover( this ); - throw new Error( '[CKEDITOR.dialog.openDialog] Dialog "' + dialogName + '" failed when loading definition.' ); - } else if ( typeof dialogDefinitions == 'string' ) { - - CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( dialogDefinitions ), - function() { - var dialogDefinition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ]; - // In case of plugin error, mark it as loading failed. - if ( typeof dialogDefinition != 'function' ) - CKEDITOR.dialog._.dialogDefinitions[ dialogName ] = 'failed'; - - this.openDialog( dialogName, callback ); - }, this, 0, 1 ); - } - - CKEDITOR.skin.loadPart( 'dialog' ); - - return dialog; - } - }); -})(); - -CKEDITOR.plugins.add( 'dialog', { - requires: 'dialogui', - init: function( editor ) { - editor.on( 'contentDom', function() { - var editable = editor.editable(); - // Open dialog on double-clicks. - editable.attachListener( editable, 'dblclick', function( evt ) { - if ( editor.readOnly ) - return false; - - var data = { element: evt.data.getTarget() }; - editor.fire( 'doubleclick', data ); - data.dialog && editor.openDialog( data.dialog ); - - return 1; - }); - }); - } -}); - -// Dialog related configurations. - -/** - * The color of the dialog background cover. It should be a valid CSS color string. - * - * config.dialog_backgroundCoverColor = 'rgb(255, 254, 253)'; - * - * @cfg {String} [dialog_backgroundCoverColor='white'] - * @member CKEDITOR.config - */ - -/** - * The opacity of the dialog background cover. It should be a number within the - * range `[0.0, 1.0]`. - * - * config.dialog_backgroundCoverOpacity = 0.7; - * - * @cfg {Number} [dialog_backgroundCoverOpacity=0.5] - * @member CKEDITOR.config - */ - -/** - * If the dialog has more than one tab, put focus into the first tab as soon as dialog is opened. - * - * config.dialog_startupFocusTab = true; - * - * @cfg {Boolean} [dialog_startupFocusTab=false] - * @member CKEDITOR.config - */ - -/** - * The distance of magnetic borders used in moving and resizing dialogs, - * measured in pixels. - * - * config.dialog_magnetDistance = 30; - * - * @cfg {Number} [dialog_magnetDistance=20] - * @member CKEDITOR.config - */ - -/** - * The guideline to follow when generating the dialog buttons. There are 3 possible options: - * - * * `'OS'` - the buttons will be displayed in the default order of the user's OS; - * * `'ltr'` - for Left-To-Right order; - * * `'rtl'` - for Right-To-Left order. - * - * Example: - * - * config.dialog_buttonsOrder = 'rtl'; - * - * @since 3.5 - * @cfg {String} [dialog_buttonsOrder='OS'] - * @member CKEDITOR.config - */ - -/** - * The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them. - * - * Separate each pair with semicolon (see example). - * - * **Note:** All names are case-sensitive. - * - * **Note:** Be cautious when specifying dialog tabs that are mandatory, - * like `'info'`, dialog functionality might be broken because of this! - * - * config.removeDialogTabs = 'flash:advanced;image:Link'; - * - * @since 3.5 - * @cfg {String} [removeDialogTabs=''] - * @member CKEDITOR.config - */ - -/** - * Fired when a dialog definition is about to be used to create a dialog into - * an editor instance. This event makes it possible to customize the definition - * before creating it. - * - * Note that this event is called only the first time a specific dialog is - * opened. Successive openings will use the cached dialog, and this event will - * not get fired. - * - * @event dialogDefinition - * @member CKEDITOR - * @param {CKEDITOR.dialog.definition} data The dialog defination that - * is being loaded. - * @param {CKEDITOR.editor} editor The editor instance that will use the dialog. - */ - -/** - * Fired when a tab is going to be selected in a dialog. - * - * @event selectPage - * @member CKEDITOR.dialog - * @param data - * @param {String} data.page The id of the page that it's gonna be selected. - * @param {String} data.currentPage The id of the current page. - */ - -/** - * Fired when the user tries to dismiss a dialog. - * - * @event cancel - * @member CKEDITOR.dialog - * @param data - * @param {Boolean} data.hide Whether the event should proceed or not. - */ - -/** - * Fired when the user tries to confirm a dialog. - * - * @event ok - * @member CKEDITOR.dialog - * @param data - * @param {Boolean} data.hide Whether the event should proceed or not. - */ - -/** - * Fired when a dialog is shown. - * - * @event show - * @member CKEDITOR.dialog - */ - -/** - * Fired when a dialog is shown. - * - * @event dialogShow - * @member CKEDITOR.editor - * @param {CKEDITOR.editor} editor This editor instance. - */ - -/** - * Fired when a dialog is hidden. - * - * @event hide - * @member CKEDITOR.dialog - */ - -/** - * Fired when a dialog is hidden. - * - * @event dialogHide - * @member CKEDITOR.editor - * @param {CKEDITOR.editor} editor This editor instance. - */ - -/** - * Fired when a dialog is being resized. The event is fired on - * both the {@link CKEDITOR.dialog} object and the dialog instance - * since 3.5.3, previously it's available only in the global object. - * - * @static - * @event resize - * @member CKEDITOR.dialog - * @param data - * @param {CKEDITOR.dialog} data.dialog The dialog being resized (if - * it's fired on the dialog itself, this parameter isn't sent). - * @param {String} data.skin The skin name. - * @param {Number} data.width The new width. - * @param {Number} data.height The new height. - */ - -/** - * Fired when a dialog is being resized. The event is fired on - * both the {@link CKEDITOR.dialog} object and the dialog instance - * since 3.5.3, previously it's available only in the global object. - * - * @since 3.5 - * @event resize - * @member CKEDITOR.dialog - * @param data - * @param {Number} data.width The new width. - * @param {Number} data.height The new height. - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'about', { - requires: 'dialog', - init: function( editor ) { - var command = editor.addCommand( 'about', new CKEDITOR.dialogCommand( 'about' ) ); - command.modes = { wysiwyg:1,source:1 }; - command.canUndo = false; - command.readOnly = 1; - - editor.ui.addButton && editor.ui.addButton( 'About', { - label: editor.lang.about.title, - command: 'about', - toolbar: 'about' - }); - - CKEDITOR.dialog.add( 'about', this.path + 'dialogs/about.js' ); - } -}); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Plugin definition for the a11yhelp, which provides a dialog - * with accessibility related help. - */ - -(function() { - var pluginName = 'a11yhelp', - commandName = 'a11yHelp'; - - CKEDITOR.plugins.add( pluginName, { - requires: 'dialog', - - // List of available localizations. - availableLangs: { en:1,ar:1,bg:1,ca:1,et:1,cs:1,cy:1,da:1,de:1,el:1,eo:1,es:1,fa:1,fi:1,fr:1,'fr-ca':1,gu:1,he:1,hi:1,hr:1,hu:1,it:1,ja:1,km:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,pl:1,pt:1,'pt-br':1,ro:1,ru:1,sk:1,sl:1,sq:1,sv:1,th:1,tr:1,ug:1,uk:1,vi:1,'zh-cn':1 }, - - init: function( editor ) { - var plugin = this; - editor.addCommand( commandName, { - exec: function() { - var langCode = editor.langCode; - langCode = - plugin.availableLangs[ langCode ] ? langCode : - plugin.availableLangs[ langCode.replace( /-.*/, '' ) ] ? langCode.replace( /-.*/, '' ) : - 'en'; - - CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( plugin.path + 'dialogs/lang/' + langCode + '.js' ), function() { - editor.lang.a11yhelp = plugin.langEntries[ langCode ]; - editor.openDialog( commandName ); - }); - }, - modes: { wysiwyg:1,source:1 }, - readOnly: 1, - canUndo: false - }); - - editor.setKeystroke( CKEDITOR.ALT + 48 /*0*/, 'a11yHelp' ); - CKEDITOR.dialog.add( commandName, this.path + 'dialogs/a11yhelp.js' ); - } - }); -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - - function setupAdvParams( element ) { - var attrName = this.att; - - var value = element && element.hasAttribute( attrName ) && element.getAttribute( attrName ) || ''; - - if ( value !== undefined ) - this.setValue( value ); - } - - function commitAdvParams() { - // Dialogs may use different parameters in the commit list, so, by - // definition, we take the first CKEDITOR.dom.element available. - var element; - - for ( var i = 0; i < arguments.length; i++ ) { - if ( arguments[ i ] instanceof CKEDITOR.dom.element ) { - element = arguments[ i ]; - break; - } - } - - if ( element ) { - var attrName = this.att, - value = this.getValue(); - - if ( value ) - element.setAttribute( attrName, value ); - else - element.removeAttribute( attrName, value ); - } - } - - var defaultTabConfig = { id:1,dir:1,classes:1,styles:1 }; - - CKEDITOR.plugins.add( 'dialogadvtab', { - requires : 'dialog', - - // Returns allowed content rule for the content created by this plugin. - allowedContent: function( tabConfig ) { - if ( !tabConfig ) - tabConfig = defaultTabConfig; - - var allowedAttrs = []; - if ( tabConfig.id ) - allowedAttrs.push( 'id' ); - if ( tabConfig.dir ) - allowedAttrs.push( 'dir' ); - - var allowed = ''; - - if ( allowedAttrs.length ) - allowed += '[' + allowedAttrs.join( ',' ) + ']'; - - if ( tabConfig.classes ) - allowed += '(*)'; - if ( tabConfig.styles ) - allowed += '{*}'; - - return allowed; - }, - - // @param tabConfig - // id, dir, classes, styles - createAdvancedTab: function( editor, tabConfig, element ) { - if ( !tabConfig ) - tabConfig = defaultTabConfig; - - var lang = editor.lang.common; - - var result = { - id: 'advanced', - label: lang.advancedTab, - title: lang.advancedTab, - elements: [ - { - type: 'vbox', - padding: 1, - children: [] - } - ] - }; - - var contents = []; - - if ( tabConfig.id || tabConfig.dir ) { - if ( tabConfig.id ) { - contents.push({ - id: 'advId', - att: 'id', - type: 'text', - requiredContent: element ? element + '[id]' : null, - label: lang.id, - setup: setupAdvParams, - commit: commitAdvParams - }); - } - - if ( tabConfig.dir ) { - contents.push({ - id: 'advLangDir', - att: 'dir', - type: 'select', - requiredContent: element ? element + '[dir]' : null, - label: lang.langDir, - 'default': '', - style: 'width:100%', - items: [ - [ lang.notSet, '' ], - [ lang.langDirLTR, 'ltr' ], - [ lang.langDirRTL, 'rtl' ] - ], - setup: setupAdvParams, - commit: commitAdvParams - }); - } - - result.elements[ 0 ].children.push({ - type: 'hbox', - widths: [ '50%', '50%' ], - children: [].concat( contents ) - }); - } - - if ( tabConfig.styles || tabConfig.classes ) { - contents = []; - - if ( tabConfig.styles ) { - contents.push({ - id: 'advStyles', - att: 'style', - type: 'text', - requiredContent: element ? element + '{cke-xyz}' : null, - label: lang.styles, - 'default': '', - - validate: CKEDITOR.dialog.validate.inlineStyle( lang.invalidInlineStyle ), - onChange: function() {}, - - getStyle: function( name, defaultValue ) { - var match = this.getValue().match( new RegExp( '(?:^|;)\\s*' + name + '\\s*:\\s*([^;]*)', 'i' ) ); - return match ? match[ 1 ] : defaultValue; - }, - - updateStyle: function( name, value ) { - var styles = this.getValue(); - - var tmp = editor.document.createElement( 'span' ); - tmp.setAttribute( 'style', styles ); - tmp.setStyle( name, value ); - styles = CKEDITOR.tools.normalizeCssText( tmp.getAttribute( 'style' ) ); - - this.setValue( styles, 1 ); - }, - - setup: setupAdvParams, - - commit: commitAdvParams - - }); - } - - if ( tabConfig.classes ) { - contents.push({ - type: 'hbox', - widths: [ '45%', '55%' ], - children: [ - { - id: 'advCSSClasses', - att: 'class', - type: 'text', - requiredContent: element ? element + '(cke-xyz)' : null, - label: lang.cssClasses, - 'default': '', - setup: setupAdvParams, - commit: commitAdvParams - - } - ] - }); - } - - result.elements[ 0 ].children.push({ - type: 'hbox', - widths: [ '50%', '50%' ], - children: [].concat( contents ) - }); - } - - return result; - } - }); - -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'basicstyles', { - init: function( editor ) { - var order = 0; - // All buttons use the same code to register. So, to avoid - // duplications, let's use this tool function. - var addButtonCommand = function( buttonName, buttonLabel, commandName, styleDefiniton ) { - // Disable the command if no definition is configured. - if ( !styleDefiniton ) - return; - - var style = new CKEDITOR.style( styleDefiniton ), - forms = contentForms[ commandName ]; - - // Put the style as the most important form. - forms.unshift( style ); - - // Listen to contextual style activation. - editor.attachStyleStateChange( style, function( state ) { - !editor.readOnly && editor.getCommand( commandName ).setState( state ); - }); - - // Create the command that can be used to apply the style. - editor.addCommand( commandName, new CKEDITOR.styleCommand( style, { - contentForms: forms - } ) ); - - // Register the button, if the button plugin is loaded. - if ( editor.ui.addButton ) { - editor.ui.addButton( buttonName, { - label: buttonLabel, - command: commandName, - toolbar: 'basicstyles,' + ( order += 10 ) - }); - } - }; - - var contentForms = { - bold: [ - 'strong', - 'b', - [ 'span', function( el ) { - var fw = el.styles[ 'font-weight' ]; - return fw == 'bold' || +fw >= 700; - } ] - ], - - italic: [ - 'em', - 'i', - [ 'span', function( el ) { - return el.styles[ 'font-style' ] == 'italic'; - } ] - ], - - underline: [ - 'u', - [ 'span', function( el ) { - return el.styles[ 'text-decoration' ] == 'underline'; - } ] - ], - - strike: [ - 's', - 'strike', - [ 'span', function( el ) { - return el.styles[ 'text-decoration' ] == 'line-through'; - } ] - ], - - subscript: [ - 'sub' - ], - - superscript: [ - 'sup' - ] - }, - config = editor.config, - lang = editor.lang.basicstyles; - - addButtonCommand( 'Bold', lang.bold, 'bold', config.coreStyles_bold ); - addButtonCommand( 'Italic', lang.italic, 'italic', config.coreStyles_italic ); - addButtonCommand( 'Underline', lang.underline, 'underline', config.coreStyles_underline ); - addButtonCommand( 'Strike', lang.strike, 'strike', config.coreStyles_strike ); - addButtonCommand( 'Subscript', lang.subscript, 'subscript', config.coreStyles_subscript ); - addButtonCommand( 'Superscript', lang.superscript, 'superscript', config.coreStyles_superscript ); - - editor.setKeystroke( [ - [ CKEDITOR.CTRL + 66 /*B*/, 'bold' ], - [ CKEDITOR.CTRL + 73 /*I*/, 'italic' ], - [ CKEDITOR.CTRL + 85 /*U*/, 'underline' ] - ] ); - } -}); - -// Basic Inline Styles. - -/** - * The style definition that applies the **bold** style to the text. - * - * config.coreStyles_bold = { element: 'b', overrides: 'strong' }; - * - * config.coreStyles_bold = { - * element: 'span', - * attributes: { 'class': 'Bold' } - * }; - * - * @cfg - * @member CKEDITOR.config - */ -CKEDITOR.config.coreStyles_bold = { element: 'strong', overrides: 'b' }; - -/** - * The style definition that applies the *italics* style to the text. - * - * config.coreStyles_italic = { element: 'i', overrides: 'em' }; - * - * CKEDITOR.config.coreStyles_italic = { - * element: 'span', - * attributes: { 'class': 'Italic' } - * }; - * - * @cfg - * @member CKEDITOR.config - */ -CKEDITOR.config.coreStyles_italic = { element: 'em', overrides: 'i' }; - -/** - * The style definition that applies the underline style to the text. - * - * CKEDITOR.config.coreStyles_underline = { - * element: 'span', - * attributes: { 'class': 'Underline' } - * }; - * - * @cfg - * @member CKEDITOR.config - */ -CKEDITOR.config.coreStyles_underline = { element: 'u' }; - -/** - * The style definition that applies the strike-through style to the text. - * - * CKEDITOR.config.coreStyles_strike = { - * element: 'span', - * attributes: { 'class': 'StrikeThrough' }, - * overrides: 'strike' - * }; - * - * @cfg - * @member CKEDITOR.config - */ -CKEDITOR.config.coreStyles_strike = { element: 's', overrides: 'strike' }; - -/** - * The style definition that applies the subscript style to the text. - * - * CKEDITOR.config.coreStyles_subscript = { - * element: 'span', - * attributes: { 'class': 'Subscript' }, - * overrides: 'sub' - * }; - * - * @cfg - * @member CKEDITOR.config - */ -CKEDITOR.config.coreStyles_subscript = { element: 'sub' }; - -/** - * The style definition that applies the superscript style to the text. - * - * CKEDITOR.config.coreStyles_superscript = { - * element: 'span', - * attributes: { 'class': 'Superscript' }, - * overrides: 'sup' - * }; - * - * @cfg - * @member CKEDITOR.config - */ -CKEDITOR.config.coreStyles_superscript = { element: 'sup' }; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - var guardElements = { table:1,ul:1,ol:1,blockquote:1,div:1 }, - directSelectionGuardElements = {}, - // All guard elements which can have a direction applied on them. - allGuardElements = {}; - CKEDITOR.tools.extend( directSelectionGuardElements, guardElements, { tr:1,p:1,div:1,li:1 } ); - CKEDITOR.tools.extend( allGuardElements, directSelectionGuardElements, { td:1 } ); - - function setToolbarStates( editor, path ) { - var useComputedState = editor.config.useComputedState, - selectedElement; - - useComputedState = useComputedState === undefined || useComputedState; - - // We can use computedState provided by the browser or traverse parents manually. - if ( !useComputedState ) - selectedElement = getElementForDirection( path.lastElement, editor.editable() ); - - selectedElement = selectedElement || path.block || path.blockLimit; - - // If we're having BODY here, user probably done CTRL+A, let's try to get the enclosed node, if any. - if ( selectedElement.equals( editor.editable() ) ) { - var enclosedNode = editor.getSelection().getRanges()[ 0 ].getEnclosedNode(); - enclosedNode && enclosedNode.type == CKEDITOR.NODE_ELEMENT && ( selectedElement = enclosedNode ); - } - - if ( !selectedElement ) - return; - - var selectionDir = useComputedState ? selectedElement.getComputedStyle( 'direction' ) : selectedElement.getStyle( 'direction' ) || selectedElement.getAttribute( 'dir' ); - - editor.getCommand( 'bidirtl' ).setState( selectionDir == 'rtl' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); - editor.getCommand( 'bidiltr' ).setState( selectionDir == 'ltr' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); - } - - function handleMixedDirContent( editor, path ) { - var directionNode = path.block || path.blockLimit || editor.editable(); - var pathDir = directionNode.getDirection( 1 ); - if ( pathDir != ( editor._.selDir || editor.lang.dir ) ) { - editor._.selDir = pathDir; - editor.fire( 'contentDirChanged', pathDir ); - } - } - - // Returns element with possibility of applying the direction. - // @param node - function getElementForDirection( node, root ) { - while ( node && !( node.getName() in allGuardElements || node.equals( root ) ) ) { - var parent = node.getParent(); - if ( !parent ) - break; - - node = parent; - } - - return node; - } - - function switchDir( element, dir, editor, database ) { - if ( element.isReadOnly() || element.equals( editor.editable() ) ) - return; - - // Mark this element as processed by switchDir. - CKEDITOR.dom.element.setMarker( database, element, 'bidi_processed', 1 ); - - // Check whether one of the ancestors has already been styled. - var parent = element, - editable = editor.editable(); - while ( ( parent = parent.getParent() ) && !parent.equals( editable ) ) { - if ( parent.getCustomData( 'bidi_processed' ) ) { - // Ancestor style must dominate. - element.removeStyle( 'direction' ); - element.removeAttribute( 'dir' ); - return; - } - } - - var useComputedState = ( 'useComputedState' in editor.config ) ? editor.config.useComputedState : 1; - - var elementDir = useComputedState ? element.getComputedStyle( 'direction' ) : element.getStyle( 'direction' ) || element.hasAttribute( 'dir' ); - - // Stop if direction is same as present. - if ( elementDir == dir ) - return; - - // Clear direction on this element. - element.removeStyle( 'direction' ); - - // Do the second check when computed state is ON, to check - // if we need to apply explicit direction on this element. - if ( useComputedState ) { - element.removeAttribute( 'dir' ); - if ( dir != element.getComputedStyle( 'direction' ) ) - element.setAttribute( 'dir', dir ); - } else - // Set new direction for this element. - element.setAttribute( 'dir', dir ); - - editor.forceNextSelectionCheck(); - - return; - } - - function getFullySelected( range, elements, enterMode ) { - var ancestor = range.getCommonAncestor( false, true ); - - range = range.clone(); - range.enlarge( enterMode == CKEDITOR.ENTER_BR ? CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS ); - - if ( range.checkBoundaryOfElement( ancestor, CKEDITOR.START ) && range.checkBoundaryOfElement( ancestor, CKEDITOR.END ) ) { - var parent; - while ( ancestor && ancestor.type == CKEDITOR.NODE_ELEMENT && ( parent = ancestor.getParent() ) && parent.getChildCount() == 1 && !( ancestor.getName() in elements ) ) - ancestor = parent; - - return ancestor.type == CKEDITOR.NODE_ELEMENT && ( ancestor.getName() in elements ) && ancestor; - } - } - - function bidiCommand( dir ) { - return { - // It applies to a "block-like" context. - context: 'p', - allowedContent: { - 'h1 h2 h3 h4 h5 h6 table ul ol blockquote div tr p div li td': { - propertiesOnly: true, - attributes: 'dir' - } - }, - requiredContent: 'p[dir]', - refresh: function( editor, path ) { - setToolbarStates( editor, path ); - handleMixedDirContent( editor, path ); - }, - exec: function( editor ) { - var selection = editor.getSelection(), - enterMode = editor.config.enterMode, - ranges = selection.getRanges(); - - if ( ranges && ranges.length ) { - var database = {}; - - // Creates bookmarks for selection, as we may split some blocks. - var bookmarks = selection.createBookmarks(); - - var rangeIterator = ranges.createIterator(), - range, - i = 0; - - while ( ( range = rangeIterator.getNextRange( 1 ) ) ) { - // Apply do directly selected elements from guardElements. - var selectedElement = range.getEnclosedNode(); - - // If this is not our element of interest, apply to fully selected elements from guardElements. - if ( !selectedElement || selectedElement && !( selectedElement.type == CKEDITOR.NODE_ELEMENT && selectedElement.getName() in directSelectionGuardElements ) ) - selectedElement = getFullySelected( range, guardElements, enterMode ); - - selectedElement && switchDir( selectedElement, dir, editor, database ); - - var iterator, block; - - // Walker searching for guardElements. - var walker = new CKEDITOR.dom.walker( range ); - - var start = bookmarks[ i ].startNode, - end = bookmarks[ i++ ].endNode; - - walker.evaluator = function( node ) { - return !!( node.type == CKEDITOR.NODE_ELEMENT && node.getName() in guardElements && !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) && node.getParent().type == CKEDITOR.NODE_ELEMENT && node.getParent().getName() == 'blockquote' ) - // Element must be fully included in the range as well. (#6485). - && node.getPosition( start ) & CKEDITOR.POSITION_FOLLOWING && ( ( node.getPosition( end ) & CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_CONTAINS ) == CKEDITOR.POSITION_PRECEDING ) ); - }; - - while ( ( block = walker.next() ) ) - switchDir( block, dir, editor, database ); - - iterator = range.createIterator(); - iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR; - - while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) - switchDir( block, dir, editor, database ); - } - - CKEDITOR.dom.element.clearAllMarkers( database ); - - editor.forceNextSelectionCheck(); - // Restore selection position. - selection.selectBookmarks( bookmarks ); - - editor.focus(); - } - } - }; - } - - CKEDITOR.plugins.add( 'bidi', { - init: function( editor ) { - if ( editor.blockless ) - return; - - // All buttons use the same code to register. So, to avoid - // duplications, let's use this tool function. - function addButtonCommand( buttonName, buttonLabel, commandName, commandDef, order ) { - editor.addCommand( commandName, new CKEDITOR.command( editor, commandDef ) ); - - if ( editor.ui.addButton ) { - editor.ui.addButton( buttonName, { - label: buttonLabel, - command: commandName, - toolbar: 'bidi,' + order - }); - } - } - - var lang = editor.lang.bidi; - - if ( editor.ui.addToolbarGroup ) - editor.ui.addToolbarGroup( 'bidi', 'align', 'paragraph' ); - - addButtonCommand( 'BidiLtr', lang.ltr, 'bidiltr', bidiCommand( 'ltr' ), 10 ); - addButtonCommand( 'BidiRtl', lang.rtl, 'bidirtl', bidiCommand( 'rtl' ), 20 ); - - editor.on( 'contentDom', function() { - editor.document.on( 'dirChanged', function( evt ) { - editor.fire( 'dirChanged', { - node: evt.data, - dir: evt.data.getDirection( 1 ) - }); - }); - }); - - // Indicate that the current selection is in different direction than the UI. - editor.on( 'contentDirChanged', function( evt ) { - var func = ( editor.lang.dir != evt.data ? 'add' : 'remove' ) + 'Class'; - var toolbar = editor.ui.space( editor.config.toolbarLocation ); - if ( toolbar ) - toolbar[ func ]( 'cke_mixed_dir_content' ); - }); - } - }); - - // If the element direction changed, we need to switch the margins of - // the element and all its children, so it will get really reflected - // like a mirror. (#5910) - function isOffline( el ) { - var html = el.getDocument().getBody().getParent(); - while ( el ) { - if ( el.equals( html ) ) - return false; - el = el.getParent(); - } - return true; - } - - function dirChangeNotifier( org ) { - var isAttribute = org == elementProto.setAttribute, - isRemoveAttribute = org == elementProto.removeAttribute, - dirStyleRegexp = /\bdirection\s*:\s*(.*?)\s*(:?$|;)/; - - return function( name, val ) { - if ( !this.isReadOnly() ) { - var orgDir; - if ( ( name == ( isAttribute || isRemoveAttribute ? 'dir' : 'direction' ) || name == 'style' && ( isRemoveAttribute || dirStyleRegexp.test( val ) ) ) && !isOffline( this ) ) { - orgDir = this.getDirection( 1 ); - var retval = org.apply( this, arguments ); - if ( orgDir != this.getDirection( 1 ) ) { - this.getDocument().fire( 'dirChanged', this ); - return retval; - } - } - } - - return org.apply( this, arguments ); - }; - } - - var elementProto = CKEDITOR.dom.element.prototype, - methods = [ 'setStyle', 'removeStyle', 'setAttribute', 'removeAttribute' ]; - for ( var i = 0; i < methods.length; i++ ) - elementProto[ methods[ i ] ] = CKEDITOR.tools.override( elementProto[ methods[ i ] ], dirChangeNotifier ); -})(); - -/** - * Fired when the language direction of an element is changed. - * - * @event dirChanged - * @member CKEDITOR.editor - * @param {CKEDITOR.editor} editor This editor instance. - * @param data - * @param {CKEDITOR.dom.node} data.node The element that is being changed. - * @param {String} data.dir The new direction. - */ - -/** - * Fired when the language direction in the specific cursor position is changed - * - * @event contentDirChanged - * @member CKEDITOR.editor - * @param {CKEDITOR.editor} editor This editor instance. - * @param {String} data The direction in the current position. - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - function noBlockLeft( bqBlock ) { - for ( var i = 0, length = bqBlock.getChildCount(), child; i < length && ( child = bqBlock.getChild( i ) ); i++ ) { - if ( child.type == CKEDITOR.NODE_ELEMENT && child.isBlockBoundary() ) - return false; - } - return true; - } - - var commandObject = { - exec: function( editor ) { - var state = editor.getCommand( 'blockquote' ).state, - selection = editor.getSelection(), - range = selection && selection.getRanges( true )[ 0 ]; - - if ( !range ) - return; - - var bookmarks = selection.createBookmarks(); - - // Kludge for #1592: if the bookmark nodes are in the beginning of - // blockquote, then move them to the nearest block element in the - // blockquote. - if ( CKEDITOR.env.ie ) { - var bookmarkStart = bookmarks[ 0 ].startNode, - bookmarkEnd = bookmarks[ 0 ].endNode, - cursor; - - if ( bookmarkStart && bookmarkStart.getParent().getName() == 'blockquote' ) { - cursor = bookmarkStart; - while ( ( cursor = cursor.getNext() ) ) { - if ( cursor.type == CKEDITOR.NODE_ELEMENT && cursor.isBlockBoundary() ) { - bookmarkStart.move( cursor, true ); - break; - } - } - } - - if ( bookmarkEnd && bookmarkEnd.getParent().getName() == 'blockquote' ) { - cursor = bookmarkEnd; - while ( ( cursor = cursor.getPrevious() ) ) { - if ( cursor.type == CKEDITOR.NODE_ELEMENT && cursor.isBlockBoundary() ) { - bookmarkEnd.move( cursor ); - break; - } - } - } - } - - var iterator = range.createIterator(), - block; - iterator.enlargeBr = editor.config.enterMode != CKEDITOR.ENTER_BR; - - if ( state == CKEDITOR.TRISTATE_OFF ) { - var paragraphs = []; - while ( ( block = iterator.getNextParagraph() ) ) - paragraphs.push( block ); - - // If no paragraphs, create one from the current selection position. - if ( paragraphs.length < 1 ) { - var para = editor.document.createElement( editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ), - firstBookmark = bookmarks.shift(); - range.insertNode( para ); - para.append( new CKEDITOR.dom.text( '\ufeff', editor.document ) ); - range.moveToBookmark( firstBookmark ); - range.selectNodeContents( para ); - range.collapse( true ); - firstBookmark = range.createBookmark(); - paragraphs.push( para ); - bookmarks.unshift( firstBookmark ); - } - - // Make sure all paragraphs have the same parent. - var commonParent = paragraphs[ 0 ].getParent(), - tmp = []; - for ( var i = 0; i < paragraphs.length; i++ ) { - block = paragraphs[ i ]; - commonParent = commonParent.getCommonAncestor( block.getParent() ); - } - - // The common parent must not be the following tags: table, tbody, tr, ol, ul. - var denyTags = { table:1,tbody:1,tr:1,ol:1,ul:1 }; - while ( denyTags[ commonParent.getName() ] ) - commonParent = commonParent.getParent(); - - // Reconstruct the block list to be processed such that all resulting blocks - // satisfy parentNode.equals( commonParent ). - var lastBlock = null; - while ( paragraphs.length > 0 ) { - block = paragraphs.shift(); - while ( !block.getParent().equals( commonParent ) ) - block = block.getParent(); - if ( !block.equals( lastBlock ) ) - tmp.push( block ); - lastBlock = block; - } - - // If any of the selected blocks is a blockquote, remove it to prevent - // nested blockquotes. - while ( tmp.length > 0 ) { - block = tmp.shift(); - if ( block.getName() == 'blockquote' ) { - var docFrag = new CKEDITOR.dom.documentFragment( editor.document ); - while ( block.getFirst() ) { - docFrag.append( block.getFirst().remove() ); - paragraphs.push( docFrag.getLast() ); - } - - docFrag.replace( block ); - } else - paragraphs.push( block ); - } - - // Now we have all the blocks to be included in a new blockquote node. - var bqBlock = editor.document.createElement( 'blockquote' ); - bqBlock.insertBefore( paragraphs[ 0 ] ); - while ( paragraphs.length > 0 ) { - block = paragraphs.shift(); - bqBlock.append( block ); - } - } else if ( state == CKEDITOR.TRISTATE_ON ) { - var moveOutNodes = [], - database = {}; - - while ( ( block = iterator.getNextParagraph() ) ) { - var bqParent = null, - bqChild = null; - while ( block.getParent() ) { - if ( block.getParent().getName() == 'blockquote' ) { - bqParent = block.getParent(); - bqChild = block; - break; - } - block = block.getParent(); - } - - // Remember the blocks that were recorded down in the moveOutNodes array - // to prevent duplicates. - if ( bqParent && bqChild && !bqChild.getCustomData( 'blockquote_moveout' ) ) { - moveOutNodes.push( bqChild ); - CKEDITOR.dom.element.setMarker( database, bqChild, 'blockquote_moveout', true ); - } - } - - CKEDITOR.dom.element.clearAllMarkers( database ); - - var movedNodes = [], - processedBlockquoteBlocks = []; - - database = {}; - while ( moveOutNodes.length > 0 ) { - var node = moveOutNodes.shift(); - bqBlock = node.getParent(); - - // If the node is located at the beginning or the end, just take it out - // without splitting. Otherwise, split the blockquote node and move the - // paragraph in between the two blockquote nodes. - if ( !node.getPrevious() ) - node.remove().insertBefore( bqBlock ); - else if ( !node.getNext() ) - node.remove().insertAfter( bqBlock ); - else { - node.breakParent( node.getParent() ); - processedBlockquoteBlocks.push( node.getNext() ); - } - - // Remember the blockquote node so we can clear it later (if it becomes empty). - if ( !bqBlock.getCustomData( 'blockquote_processed' ) ) { - processedBlockquoteBlocks.push( bqBlock ); - CKEDITOR.dom.element.setMarker( database, bqBlock, 'blockquote_processed', true ); - } - - movedNodes.push( node ); - } - - CKEDITOR.dom.element.clearAllMarkers( database ); - - // Clear blockquote nodes that have become empty. - for ( i = processedBlockquoteBlocks.length - 1; i >= 0; i-- ) { - bqBlock = processedBlockquoteBlocks[ i ]; - if ( noBlockLeft( bqBlock ) ) - bqBlock.remove(); - } - - if ( editor.config.enterMode == CKEDITOR.ENTER_BR ) { - var firstTime = true; - while ( movedNodes.length ) { - node = movedNodes.shift(); - - if ( node.getName() == 'div' ) { - docFrag = new CKEDITOR.dom.documentFragment( editor.document ); - var needBeginBr = firstTime && node.getPrevious() && !( node.getPrevious().type == CKEDITOR.NODE_ELEMENT && node.getPrevious().isBlockBoundary() ); - if ( needBeginBr ) - docFrag.append( editor.document.createElement( 'br' ) ); - - var needEndBr = node.getNext() && !( node.getNext().type == CKEDITOR.NODE_ELEMENT && node.getNext().isBlockBoundary() ); - while ( node.getFirst() ) - node.getFirst().remove().appendTo( docFrag ); - - if ( needEndBr ) - docFrag.append( editor.document.createElement( 'br' ) ); - - docFrag.replace( node ); - firstTime = false; - } - } - } - } - - selection.selectBookmarks( bookmarks ); - editor.focus(); - }, - - refresh: function( editor, path ) { - // Check if inside of blockquote. - var firstBlock = path.block || path.blockLimit; - this.setState( editor.elementPath( firstBlock ).contains( 'blockquote', 1 ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); - }, - - context: 'blockquote', - - allowedContent: 'blockquote', - requiredContent: 'blockquote' - }; - - CKEDITOR.plugins.add( 'blockquote', { - init: function( editor ) { - if ( editor.blockless ) - return; - - editor.addCommand( 'blockquote', commandObject ); - - editor.ui.addButton && editor.ui.addButton( 'Blockquote', { - label: editor.lang.blockquote.toolbar, - command: 'blockquote', - toolbar: 'blocks,10' - }); - } - }); -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @ignore - * File overview: Clipboard support. - */ - -// -// EXECUTION FLOWS: -// -- CTRL+C -// * browser's default behaviour -// -- CTRL+V -// * listen onKey (onkeydown) -// * simulate 'beforepaste' for non-IEs on editable -// * simulate 'paste' for Fx2/Opera on editable -// * listen 'onpaste' on editable ('onbeforepaste' for IE) -// * fire 'beforePaste' on editor -// * !canceled && getClipboardDataByPastebin -// * fire 'paste' on editor -// * !canceled && fire 'afterPaste' on editor -// -- CTRL+X -// * listen onKey (onkeydown) -// * fire 'saveSnapshot' on editor -// * browser's default behaviour -// * deferred second 'saveSnapshot' event -// -- Copy command -// * tryToCutCopy -// * execCommand -// * !success && alert -// -- Cut command -// * fixCut -// * tryToCutCopy -// * execCommand -// * !success && alert -// -- Paste command -// * fire 'paste' on editable ('beforepaste' for IE) -// * !canceled && execCommand 'paste' -// * !success && fire 'pasteDialog' on editor -// -- Paste from native context menu & menubar -// (Fx & Webkits are handled in 'paste' default listner. -// Opera cannot be handled at all because it doesn't fire any events -// Special treatment is needed for IE, for which is this part of doc) -// * listen 'onpaste' -// * cancel native event -// * fire 'beforePaste' on editor -// * !canceled && getClipboardDataByPastebin -// * execIECommand( 'paste' ) -> this fires another 'paste' event, so cancel it -// * fire 'paste' on editor -// * !canceled && fire 'afterPaste' on editor -// -// -// PASTE EVENT - PREPROCESSING: -// -- Possible dataValue types: auto, text, html. -// -- Possible dataValue contents: -// * text (possible \n\r) -// * htmlified text (text + br,div,p - no presentional markup & attrs - depends on browser) -// * html -// -- Possible flags: -// * htmlified - if true then content is a HTML even if no markup inside. This flag is set -// for content from editable pastebins, because they 'htmlify' pasted content. -// -// -- Type: auto: -// * content: htmlified text -> filter, unify text markup (brs, ps, divs), set type: text -// * content: html -> filter, set type: html -// -- Type: text: -// * content: htmlified text -> filter, unify text markup -// * content: html -> filter, strip presentional markup, unify text markup -// -- Type: html: -// * content: htmlified text -> filter, unify text markup -// * content: html -> filter -// -// -- Phases: -// * filtering (priorities 3-5) - e.g. pastefromword filters -// * content type sniffing (priority 6) -// * markup transformations for text (priority 6) -// - -'use strict'; - -(function() { - // Register the plugin. - CKEDITOR.plugins.add( 'clipboard', { - requires: 'dialog', - init: function( editor ) { - var textificationFilter; - - initClipboard( editor ); - - CKEDITOR.dialog.add( 'paste', CKEDITOR.getUrl( this.path + 'dialogs/paste.js' ) ); - - editor.on( 'paste', function( evt ) { - var data = evt.data.dataValue, - blockElements = CKEDITOR.dtd.$block; - - // Filter webkit garbage. - if ( data.indexOf( 'Apple-' ) > -1 ) { - // Replace special webkit's   with simple space, because webkit - // produces them even for normal spaces. - data = data.replace( / <\/span>/gi, ' ' ); - - // Strip around white-spaces when not in forced 'html' content type. - // This spans are created only when pasting plain text into Webkit, - // but for safety reasons remove them always. - if ( evt.data.type != 'html' ) - data = data.replace( /]*>([^<]*)<\/span>/gi, function( all, spaces ) { - // Replace tabs with 4 spaces like Fx does. - return spaces.replace( /\t/g, '    ' ); - }); - - // This br is produced only when copying & pasting HTML content. - if ( data.indexOf( '
    ' ) > -1 ) { - evt.data.startsWithEOL = 1; - evt.data.preSniffing = 'html'; // Mark as not text. - data = data.replace( /
    /, '' ); - } - - // Remove all other classes. - data = data.replace( /(<[^>]+) class="Apple-[^"]*"/gi, '$1' ); - } - - // Strip editable that was copied from inside. (#9534) - if ( data.match( /^<[^<]+cke_(editable|contents)/i ) ) { - var tmp, - editable_wrapper, - wrapper = new CKEDITOR.dom.element( 'div' ); - - wrapper.setHtml( data ); - // Verify for sure and check for nested editor UI parts. (#9675) - while ( wrapper.getChildCount() == 1 && - ( tmp = wrapper.getFirst() ) && - tmp.type == CKEDITOR.NODE_ELEMENT && // Make sure first-child is element. - ( tmp.hasClass( 'cke_editable' ) || tmp.hasClass( 'cke_contents' ) ) ) { - wrapper = editable_wrapper = tmp; - } - - // If editable wrapper was found strip it and bogus
    (added on FF). - if ( editable_wrapper ) - data = editable_wrapper.getHtml().replace( /
    $/i, '' ); - } - - if ( CKEDITOR.env.ie ) { - //  

    ->

    (br.cke-pasted-remove will be removed later) - data = data.replace( /^ (?: |\r\n)?<(\w+)/g, function( match, elementName ) { - if ( elementName.toLowerCase() in blockElements ) { - evt.data.preSniffing = 'html'; // Mark as not a text. - return '<' + elementName; - } - return match; - }); - } else if ( CKEDITOR.env.webkit ) { - //


    ->


    - // We don't mark br, because this situation can happen for htmlified text too. - data = data.replace( /<\/(\w+)>

    <\/div>$/, function( match, elementName ) { - if ( elementName in blockElements ) { - evt.data.endsWithEOL = 1; - return ''; - } - return match; - }); - } else if ( CKEDITOR.env.gecko ) { - // Firefox adds bogus
    when user pasted text followed by space(s). - data = data.replace( /(\s)
    $/, '$1' ); - } - - evt.data.dataValue = data; - }, null, null, 3 ); - - editor.on( 'paste', function( evt ) { - var dataObj = evt.data, - type = dataObj.type, - data = dataObj.dataValue, - trueType, - // Default is 'html'. - defaultType = editor.config.clipboard_defaultContentType || 'html'; - - // If forced type is 'html' we don't need to know true data type. - if ( type == 'html' || dataObj.preSniffing == 'html' ) - trueType = 'html'; - else - trueType = recogniseContentType( data ); - - // Unify text markup. - if ( trueType == 'htmlifiedtext' ) - data = htmlifiedTextHtmlification( editor.config, data ); - // Strip presentional markup & unify text markup. - else if ( type == 'text' && trueType == 'html' ) { - // Init filter only if needed and cache it. - data = htmlTextification( editor.config, data, textificationFilter || ( textificationFilter = getTextificationFilter( editor ) ) ); - } - - if ( dataObj.startsWithEOL ) - data = '
    ' + data; - if ( dataObj.endsWithEOL ) - data += '
    '; - - if ( type == 'auto' ) - type = ( trueType == 'html' || defaultType == 'html' ) ? 'html' : 'text'; - - dataObj.type = type; - dataObj.dataValue = data; - delete dataObj.preSniffing; - delete dataObj.startsWithEOL; - delete dataObj.endsWithEOL; - }, null, null, 6 ); - - // Inserts processed data into the editor at the end of the - // events chain. - editor.on( 'paste', function( evt ) { - var data = evt.data; - - editor.insertHtml( data.dataValue, data.type ); - - // Deferr 'afterPaste' so all other listeners for 'paste' will be fired first. - setTimeout( function() { - editor.fire( 'afterPaste' ); - }, 0 ); - }, null, null, 1000 ); - - editor.on( 'pasteDialog', function( evt ) { - // TODO it's possible that this setTimeout is not needed any more, - // because of changes introduced in the same commit as this comment. - // Editor.getClipboardData adds listner to the dialog's events which are - // fired after a while (not like 'showDialog'). - setTimeout( function() { - // Open default paste dialog. - editor.openDialog( 'paste', evt.data ); - }, 0 ); - }); - } - }); - - function initClipboard( editor ) { - var preventBeforePasteEvent = 0, - preventPasteEvent = 0, - inReadOnly = 0, - // Safari doesn't like 'beforepaste' event - it sometimes doesn't - // properly handles ctrl+c. Probably some race-condition between events. - // Chrome and Firefox works well with both events, so better to use 'paste' - // which will handle pasting from e.g. browsers' menu bars. - // IE7/8 doesn't like 'paste' event for which it's throwing random errors. - mainPasteEvent = CKEDITOR.env.ie ? 'beforepaste' : 'paste'; - - addListeners(); - addButtonsCommands(); - - /** - * Gets clipboard data by directly accessing the clipboard (IE only) or opening paste dialog. - * - * editor.getClipboardData( { title: 'Get my data' }, function( data ) { - * if ( data ) - * alert( data.type + ' ' + data.dataValue ); - * } ); - * - * @member CKEDITOR.editor - * @param {Object} options - * @param {String} [options.title] Title of paste dialog. - * @param {Function} callback Function that will be executed with `data.type` and `data.dataValue` - * or `null` if none of the capturing method succeeded. - */ - editor.getClipboardData = function( options, callback ) { - var beforePasteNotCanceled = false, - dataType = 'auto', - dialogCommited = false; - - // Options are optional - args shift. - if ( !callback ) { - callback = options; - options = null; - } - - // Listen with maximum priority to handle content before everyone else. - // This callback will handle paste event that will be fired if direct - // access to the clipboard succeed in IE. - editor.on( 'paste', onPaste, null, null, 0 ); - - // Listen at the end of listeners chain to see if event wasn't canceled - // and to retrieve modified data.type. - editor.on( 'beforePaste', onBeforePaste, null, null, 1000 ); - - // getClipboardDataDirectly() will fire 'beforePaste' synchronously, so we can - // check if it was canceled and if any listener modified data.type. - - // If command didn't succeed (only IE allows to access clipboard and only if - // user agrees) open and handle paste dialog. - if ( getClipboardDataDirectly() === false ) { - // Direct access to the clipboard wasn't successful so remove listener. - editor.removeListener( 'paste', onPaste ); - - // If beforePaste was canceled do not open dialog. - // Add listeners only if dialog really opened. 'pasteDialog' can be canceled. - if ( beforePasteNotCanceled && editor.fire( 'pasteDialog', onDialogOpen ) ) { - editor.on( 'pasteDialogCommit', onDialogCommit ); - - // 'dialogHide' will be fired after 'pasteDialogCommit'. - editor.on( 'dialogHide', function( evt ) { - evt.removeListener(); - evt.data.removeListener( 'pasteDialogCommit', onDialogCommit ); - - // Because Opera has to wait a while in pasteDialog we have to wait here. - setTimeout( function() { - // Notify even if user canceled dialog (clicked 'cancel', ESC, etc). - if ( !dialogCommited ) - callback( null ); - }, 10 ); - }); - } else - callback( null ); - } - - function onPaste( evt ) { - evt.removeListener(); - evt.cancel(); - callback( evt.data ); - } - - function onBeforePaste( evt ) { - evt.removeListener(); - beforePasteNotCanceled = true; - dataType = evt.data.type; - } - - function onDialogCommit( evt ) { - evt.removeListener(); - // Cancel pasteDialogCommit so paste dialog won't automatically fire - // 'paste' evt by itself. - evt.cancel(); - dialogCommited = true; - callback( { type: dataType, dataValue: evt.data } ); - } - - function onDialogOpen() { - this.customTitle = ( options && options.title ); - } - }; - - function addButtonsCommands() { - addButtonCommand( 'Cut', 'cut', createCutCopyCmd( 'cut' ), 10, 1 ); - addButtonCommand( 'Copy', 'copy', createCutCopyCmd( 'copy' ), 20, 4 ); - addButtonCommand( 'Paste', 'paste', createPasteCmd(), 30, 8 ); - - function addButtonCommand( buttonName, commandName, command, toolbarOrder, ctxMenuOrder ) { - var lang = editor.lang.clipboard[ commandName ]; - - editor.addCommand( commandName, command ); - editor.ui.addButton && editor.ui.addButton( buttonName, { - label: lang, - command: commandName, - toolbar: 'clipboard,' + toolbarOrder - }); - - // If the "menu" plugin is loaded, register the menu item. - if ( editor.addMenuItems ) { - editor.addMenuItem( commandName, { - label: lang, - command: commandName, - group: 'clipboard', - order: ctxMenuOrder - }); - } - } - } - - function addListeners() { - editor.on( 'key', onKey ); - editor.on( 'contentDom', addListenersToEditable ); - - // For improved performance, we're checking the readOnly state on selectionChange instead of hooking a key event for that. - editor.on( 'selectionChange', function( evt ) { - inReadOnly = evt.data.selection.getRanges()[ 0 ].checkReadOnly(); - setToolbarStates(); - }); - - // If the "contextmenu" plugin is loaded, register the listeners. - if ( editor.contextMenu ) { - editor.contextMenu.addListener( function( element, selection ) { - inReadOnly = selection.getRanges()[ 0 ].checkReadOnly(); - return { - cut: stateFromNamedCommand( 'Cut' ), - copy: stateFromNamedCommand( 'Copy' ), - paste: stateFromNamedCommand( 'Paste' ) - }; - }); - } - } - - // Add events listeners to editable. - function addListenersToEditable() { - var editable = editor.editable(); - - // We'll be catching all pasted content in one line, regardless of whether - // it's introduced by a document command execution (e.g. toolbar buttons) or - // user paste behaviors (e.g. CTRL+V). - editable.on( mainPasteEvent, function( evt ) { - if ( CKEDITOR.env.ie && preventBeforePasteEvent ) - return; - - // If you've just asked yourself why preventPasteEventNow() is not here, but - // in listener for CTRL+V and exec method of 'paste' command - // you've asked the same question we did. - // - // THE ANSWER: - // - // First thing to notice - this answer makes sense only for IE, - // because other browsers don't listen for 'paste' event. - // - // What would happen if we move preventPasteEventNow() here? - // For: - // * CTRL+V - IE fires 'beforepaste', so we prevent 'paste' and pasteDataFromClipboard(). OK. - // * editor.execCommand( 'paste' ) - we fire 'beforepaste', so we prevent - // 'paste' and pasteDataFromClipboard() and doc.execCommand( 'Paste' ). OK. - // * native context menu - IE fires 'beforepaste', so we prevent 'paste', but unfortunately - // on IE we fail with pasteDataFromClipboard() here, because of... we don't know why, but - // we just fail, so... we paste nothing. FAIL. - // * native menu bar - the same as for native context menu. - // - // But don't you know any way to distinguish first two cases from last two? - // Only one - special flag set in CTRL+V handler and exec method of 'paste' - // command. And that's what we did using preventPasteEventNow(). - - pasteDataFromClipboard( evt ); - }); - - // It's not possible to clearly handle all four paste methods (ctrl+v, native menu bar - // native context menu, editor's command) in one 'paste/beforepaste' event in IE. - // - // For ctrl+v & editor's command it's easy to handle pasting in 'beforepaste' listener, - // so we do this. For another two methods it's better to use 'paste' event. - // - // 'paste' is always being fired after 'beforepaste' (except of weird one on opening native - // context menu), so for two methods handled in 'beforepaste' we're canceling 'paste' - // using preventPasteEvent state. - // - // 'paste' event in IE is being fired before getClipboardDataByPastebin executes its callback. - // - // QUESTION: Why didn't you handle all 4 paste methods in handler for 'paste'? - // Wouldn't this just be simpler? - // ANSWER: Then we would have to evt.data.preventDefault() only for native - // context menu and menu bar pastes. The same with execIECommand(). - // That would force us to mark CTRL+V and editor's paste command with - // special flag, other than preventPasteEvent. But we still would have to - // have preventPasteEvent for the second event fired by execIECommand. - // Code would be longer and not cleaner. - CKEDITOR.env.ie && editable.on( 'paste', function( evt ) { - if ( preventPasteEvent ) - return; - // Cancel next 'paste' event fired by execIECommand( 'paste' ) - // at the end of this callback. - preventPasteEventNow(); - - // Prevent native paste. - evt.data.preventDefault(); - - pasteDataFromClipboard( evt ); - - // Force IE to paste content into pastebin so pasteDataFromClipboard will work. - if ( !execIECommand( 'paste' ) ) - editor.openDialog( 'paste' ); - }); - - // [IE] Dismiss the (wrong) 'beforepaste' event fired on context/toolbar menu open. (#7953) - if ( CKEDITOR.env.ie ) { - editable.on( 'contextmenu', preventBeforePasteEventNow, null, null, 0 ); - - editable.on( 'beforepaste', function( evt ) { - if ( evt.data && !evt.data.$.ctrlKey ) - preventBeforePasteEventNow(); - }, null, null, 0 ); - - } - - editable.on( 'beforecut', function() { - !preventBeforePasteEvent && fixCut( editor ); - }); - - var mouseupTimeout; - - // Use editor.document instead of editable in non-IEs for observing mouseup - // since editable won't fire the event if selection process started within - // iframe and ended out of the editor (#9851). - editable.attachListener( CKEDITOR.env.ie ? editable : editor.document.getDocumentElement(), 'mouseup', function() { - mouseupTimeout = setTimeout( function() { - setToolbarStates(); - }, 0 ); - }); - - // Make sure that deferred mouseup callback isn't executed after editor instance - // had been destroyed. This may happen when editor.destroy() is called in parallel - // with mouseup event (i.e. a button with onclick callback) (#10219). - editor.on( 'destroy', function() { - clearTimeout( mouseupTimeout ); - }); - - editable.on( 'keyup', setToolbarStates ); - } - - // Create object representing Cut or Copy commands. - function createCutCopyCmd( type ) { - return { - type: type, - canUndo: type == 'cut', // We can't undo copy to clipboard. - startDisabled: true, - exec: function( data ) { - // Attempts to execute the Cut and Copy operations. - function tryToCutCopy( type ) { - if ( CKEDITOR.env.ie ) - return execIECommand( type ); - - // non-IEs part - try { - // Other browsers throw an error if the command is disabled. - return editor.document.$.execCommand( type, false, null ); - } catch ( e ) { - return false; - } - } - - this.type == 'cut' && fixCut(); - - var success = tryToCutCopy( this.type ); - - if ( !success ) - alert( editor.lang.clipboard[ this.type + 'Error' ] ); // Show cutError or copyError. - - return success; - } - }; - } - - function createPasteCmd() { - return { - // Snapshots are done manually by editable.insertXXX methods. - canUndo: false, - async: true, - - exec: function( editor, data ) { - var fire = function( data, withBeforePaste ) { - data && firePasteEvents( data.type, data.dataValue, !!withBeforePaste ); - - editor.fire( 'afterCommandExec', { - name: 'paste', - command: cmd, - returnValue: !!data - }); - }, - cmd = this; - - // Check data precisely - don't open dialog on empty string. - if ( typeof data == 'string' ) - fire( { type: 'auto', dataValue: data }, 1 ); - else - editor.getClipboardData( fire ); - } - }; - } - - function preventPasteEventNow() { - preventPasteEvent = 1; - // For safety reason we should wait longer than 0/1ms. - // We don't know how long execution of quite complex getClipboardData will take - // and in for example 'paste' listner execCommand() (which fires 'paste') is called - // after getClipboardData finishes. - // Luckily, it's impossible to immediately fire another 'paste' event we want to handle, - // because we only handle there native context menu and menu bar. - setTimeout( function() { - preventPasteEvent = 0; - }, 100 ); - } - - function preventBeforePasteEventNow() { - preventBeforePasteEvent = 1; - setTimeout( function() { - preventBeforePasteEvent = 0; - }, 10 ); - } - - // Tries to execute any of the paste, cut or copy commands in IE. Returns a - // boolean indicating that the operation succeeded. - // @param {String} command *LOWER CASED* name of command ('paste', 'cut', 'copy'). - function execIECommand( command ) { - var doc = editor.document, - body = doc.getBody(), - enabled = false, - onExec = function() { - enabled = true; - }; - - // The following seems to be the only reliable way to detect that - // clipboard commands are enabled in IE. It will fire the - // onpaste/oncut/oncopy events only if the security settings allowed - // the command to execute. - body.on( command, onExec ); - - // IE6/7: document.execCommand has problem to paste into positioned element. - ( CKEDITOR.env.version > 7 ? doc.$ : doc.$.selection.createRange() )[ 'execCommand' ]( command ); - - body.removeListener( command, onExec ); - - return enabled; - } - - function firePasteEvents( type, data, withBeforePaste ) { - var eventData = { type: type }; - - if ( withBeforePaste ) { - // Fire 'beforePaste' event so clipboard flavor get customized - // by other plugins. - if ( !editor.fire( 'beforePaste', eventData ) ) - return false; // Event canceled - } - - // The very last guard to make sure the paste has successfully happened. - // This check should be done after firing 'beforePaste' because for native paste - // 'beforePaste' is by default fired even for empty clipboard. - if ( !data ) - return false; - - // Reuse eventData.type because the default one could be changed by beforePaste listeners. - eventData.dataValue = data; - - return editor.fire( 'paste', eventData ); - } - - // Cutting off control type element in IE standards breaks the selection entirely. (#4881) - function fixCut() { - if ( !CKEDITOR.env.ie || CKEDITOR.env.quirks ) - return; - - var sel = editor.getSelection(), - control, range, dummy; - - if ( ( sel.getType() == CKEDITOR.SELECTION_ELEMENT ) && ( control = sel.getSelectedElement() ) ) { - range = sel.getRanges()[ 0 ]; - dummy = editor.document.createText( '' ); - dummy.insertBefore( control ); - range.setStartBefore( dummy ); - range.setEndAfter( control ); - sel.selectRanges( [ range ] ); - - // Clear up the fix if the paste wasn't succeeded. - setTimeout( function() { - // Element still online? - if ( control.getParent() ) { - dummy.remove(); - sel.selectElement( control ); - } - }, 0 ); - } - } - - // Allow to peek clipboard content by redirecting the - // pasting content into a temporary bin and grab the content of it. - function getClipboardDataByPastebin( evt, callback ) { - var doc = editor.document, - editable = editor.editable(), - cancel = function( evt ) { - evt.cancel(); - }, - ff3x = CKEDITOR.env.gecko && CKEDITOR.env.version <= 10902; - - // Avoid recursions on 'paste' event or consequent paste too fast. (#5730) - if ( doc.getById( 'cke_pastebin' ) ) - return; - - var sel = editor.getSelection(); - var bms = sel.createBookmarks(); - - // Create container to paste into. - // For rich content we prefer to use "body" since it holds - // the least possibility to be splitted by pasted content, while this may - // breaks the text selection on a frame-less editable, "div" would be - // the best one in that case. - // In another case on old IEs moving the selection into a "body" paste bin causes error panic. - // Body can't be also used for Opera which fills it with
    - // what is indistinguishable from pasted
    (copying
    in Opera isn't possible, - // but it can be copied from other browser). - var pastebin = new CKEDITOR.dom.element( - editable.is( 'body' ) && !( CKEDITOR.env.ie || CKEDITOR.env.opera ) ? 'body' : 'div', doc ); - - pastebin.setAttribute( 'id', 'cke_pastebin' ); - - // Append bogus to prevent Opera from doing this. (#9522) - if ( CKEDITOR.env.opera ) - pastebin.appendBogus(); - - var containerOffset = 0, - win = doc.getWindow(); - - // Seems to be the only way to avoid page scroll in Fx 3.x. - if ( ff3x ) { - pastebin.insertAfter( bms[ 0 ].startNode ); - pastebin.setStyle( 'display', 'inline' ); - } else { - if ( CKEDITOR.env.webkit ) { - // It's better to paste close to the real paste destination, so inherited styles - // (which Webkits will try to compensate by styling span) differs less from the destination's one. - editable.append( pastebin ); - // Style pastebin like .cke_editable, to minimize differences between origin and destination. (#9754) - pastebin.addClass( 'cke_editable' ); - // Compensate position of offsetParent. - containerOffset = ( editable.is( 'body' ) ? editable : CKEDITOR.dom.element.get( pastebin.$.offsetParent ) ).getDocumentPosition().y; - } else { - // Opera and IE doesn't allow to append to html element. - editable.getAscendant( CKEDITOR.env.ie || CKEDITOR.env.opera ? 'body' : 'html', 1 ).append( pastebin ); - } - - pastebin.setStyles({ - position: 'absolute', - // Position the bin at the top (+10 for safety) of viewport to avoid any subsequent document scroll. - top: ( win.getScrollPosition().y - containerOffset + 10 ) + 'px', - width: '1px', - // Caret has to fit in that height, otherwise browsers like Chrome & Opera will scroll window to show it. - // Set height equal to viewport's height - 20px (safety gaps), minimum 1px. - height: Math.max( 1, win.getViewPaneSize().height - 20 ) + 'px', - overflow: 'hidden', - // Reset styles that can mess up pastebin position. - margin: 0, - padding: 0 - }); - } - - // Check if the paste bin now establishes new editing host. - var isEditingHost = pastebin.getParent().isReadOnly(); - - if ( isEditingHost ) { - // Hide the paste bin. - pastebin.setOpacity( 0 ); - // And make it editable. - pastebin.setAttribute( 'contenteditable', true ); - } - // Transparency is not enough since positioned non-editing host always shows - // resize handler, pull it off the screen instead. - else - pastebin.setStyle( editor.config.contentsLangDirection == 'ltr' ? 'left' : 'right', '-1000px' ); - - editor.on( 'selectionChange', cancel, null, null, 0 ); - - // Temporarily move selection to the pastebin. - isEditingHost && pastebin.focus(); - var range = new CKEDITOR.dom.range( pastebin ); - range.selectNodeContents( pastebin ); - var selPastebin = range.select(); - - // If non-native paste is executed, IE will open security alert and blur editable. - // Editable will then lock selection inside itself and after accepting security alert - // this selection will be restored. We overwrite stored selection, so it's restored - // in pastebin. (#9552) - if ( CKEDITOR.env.ie ) { - var blurListener = editable.once( 'blur', function( evt ) { - editor.lockSelection( selPastebin ); - } ); - } - - var scrollTop = CKEDITOR.document.getWindow().getScrollPosition().y; - - // Wait a while and grab the pasted contents. - setTimeout( function() { - // Restore main window's scroll position which could have been changed - // by browser in cases described in #9771. - if ( CKEDITOR.env.webkit || CKEDITOR.env.opera ) - CKEDITOR.document[ CKEDITOR.env.webkit ? 'getBody' : 'getDocumentElement' ]().$.scrollTop = scrollTop; - - // Blur will be fired only on non-native paste. In other case manually remove listener. - blurListener && blurListener.removeListener(); - - // Restore properly the document focus. (#8849) - if ( CKEDITOR.env.ie ) - editable.focus(); - - // IE7: selection must go before removing pastebin. (#8691) - sel.selectBookmarks( bms ); - pastebin.remove(); - - // Grab the HTML contents. - // We need to look for a apple style wrapper on webkit it also adds - // a div wrapper if you copy/paste the body of the editor. - // Remove hidden div and restore selection. - var bogusSpan; - if ( CKEDITOR.env.webkit && ( bogusSpan = pastebin.getFirst() ) && ( bogusSpan.is && bogusSpan.hasClass( 'Apple-style-span' ) ) ) - pastebin = bogusSpan; - - editor.removeListener( 'selectionChange', cancel ); - callback( pastebin.getHtml() ); - }, 0 ); - } - - // Try to get content directly from clipboard, without native event - // being fired before. In other words - synthetically get clipboard data - // if it's possible. - // mainPasteEvent will be fired, so if forced native paste: - // * worked, getClipboardDataByPastebin will grab it, - // * didn't work, pastebin will be empty and editor#paste won't be fired. - function getClipboardDataDirectly() { - if ( CKEDITOR.env.ie ) { - // Prevent IE from pasting at the begining of the document. - editor.focus(); - - // Command will be handled by 'beforepaste', but as - // execIECommand( 'paste' ) will fire also 'paste' event - // we're canceling it. - preventPasteEventNow(); - - // #9247: Lock focus to prevent IE from hiding toolbar for inline editor. - var focusManager = editor.focusManager; - focusManager.lock(); - - if ( editor.editable().fire( mainPasteEvent ) && !execIECommand( 'paste' ) ) { - focusManager.unlock(); - return false; - } - focusManager.unlock(); - } else { - try { - if ( editor.editable().fire( mainPasteEvent ) && !editor.document.$.execCommand( 'Paste', false, null ) ) { - throw 0; - } - } catch ( e ) { - return false; - } - } - - return true; - } - - // Listens for some clipboard related keystrokes, so they get customized. - // Needs to be bind to keydown event. - function onKey( event ) { - if ( editor.mode != 'wysiwyg' ) - return; - - switch ( event.data.keyCode ) { - // Paste - case CKEDITOR.CTRL + 86: // CTRL+V - case CKEDITOR.SHIFT + 45: // SHIFT+INS - var editable = editor.editable(); - - // Cancel 'paste' event because ctrl+v is for IE handled - // by 'beforepaste'. - preventPasteEventNow(); - - // Simulate 'beforepaste' event for all none-IEs. - !CKEDITOR.env.ie && editable.fire( 'beforepaste' ); - - // Simulate 'paste' event for Opera/Firefox2. - if ( CKEDITOR.env.opera || CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) - editable.fire( 'paste' ); - return; - - // Cut - case CKEDITOR.CTRL + 88: // CTRL+X - case CKEDITOR.SHIFT + 46: // SHIFT+DEL - // Save Undo snapshot. - editor.fire( 'saveSnapshot' ); // Save before cut - setTimeout( function() { - editor.fire( 'saveSnapshot' ); // Save after cut - }, 0 ); - } - } - - function pasteDataFromClipboard( evt ) { - // Default type is 'auto', but can be changed by beforePaste listeners. - var eventData = { type: 'auto' }; - // Fire 'beforePaste' event so clipboard flavor get customized by other plugins. - // If 'beforePaste' is canceled continue executing getClipboardDataByPastebin and then do nothing - // (do not fire 'paste', 'afterPaste' events). This way we can grab all - synthetically - // and natively pasted content and prevent its insertion into editor - // after canceling 'beforePaste' event. - var beforePasteNotCanceled = editor.fire( 'beforePaste', eventData ); - - getClipboardDataByPastebin( evt, function( data ) { - // Clean up. - data = data.replace( /]+data-cke-bookmark[^<]*?<\/span>/ig, '' ); - - // Fire remaining events (without beforePaste) - beforePasteNotCanceled && firePasteEvents( eventData.type, data, 0, 1 ); - }); - } - - function setToolbarStates() { - if ( editor.mode != 'wysiwyg' ) - return; - - var pasteState = stateFromNamedCommand( 'Paste' ); - - editor.getCommand( 'cut' ).setState( stateFromNamedCommand( 'Cut' ) ); - editor.getCommand( 'copy' ).setState( stateFromNamedCommand( 'Copy' ) ); - editor.getCommand( 'paste' ).setState( pasteState ); - editor.fire( 'pasteState', pasteState ); - } - - function stateFromNamedCommand( command ) { - var retval; - - if ( inReadOnly && command in { Paste:1,Cut:1 } ) - return CKEDITOR.TRISTATE_DISABLED; - - if ( command == 'Paste' ) { - // IE Bug: queryCommandEnabled('paste') fires also 'beforepaste(copy/cut)', - // guard to distinguish from the ordinary sources (either - // keyboard paste or execCommand) (#4874). - CKEDITOR.env.ie && ( preventBeforePasteEvent = 1 ); - try { - // Always return true for Webkit (which always returns false) - retval = editor.document.$.queryCommandEnabled( command ) || CKEDITOR.env.webkit; - } catch ( er ) {} - preventBeforePasteEvent = 0; - } - // Cut, Copy - check if the selection is not empty - else { - var sel = editor.getSelection(), - ranges = sel.getRanges(); - retval = sel.getType() != CKEDITOR.SELECTION_NONE && !( ranges.length == 1 && ranges[ 0 ].collapsed ); - } - - return retval ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; - } - } - - // Returns: - // * 'htmlifiedtext' if content looks like transformed by browser from plain text. - // See clipboard/paste.html TCs for more info. - // * 'html' if it is not 'htmlifiedtext'. - function recogniseContentType( data ) { - if ( CKEDITOR.env.webkit ) { - // Plain text or (

    and text inside
    ). - if ( !data.match( /^[^<]*$/g ) && !data.match( /^(
    <\/div>|
    [^<]*<\/div>)*$/gi ) ) - return 'html'; - } else if ( CKEDITOR.env.ie ) { - // Text and
    or ( text and
    in

    - paragraphs can be separated by new \r\n ). - if ( !data.match( /^([^<]|)*$/gi ) && !data.match( /^(

    ([^<]|)*<\/p>|(\r\n))*$/gi ) ) - return 'html'; - } else if ( CKEDITOR.env.gecko || CKEDITOR.env.opera ) { - // Text or
    . - if ( !data.match( /^([^<]|)*$/gi ) ) - return 'html'; - } else - return 'html'; - - return 'htmlifiedtext'; - } - - // This function transforms what browsers produce when - // pasting plain text into editable element (see clipboard/paste.html TCs - // for more info) into correct HTML (similar to that produced by text2Html). - function htmlifiedTextHtmlification( config, data ) { - function repeatParagraphs( repeats ) { - // Repeat blocks floor((n+1)/2) times. - // Even number of repeats - add
    at the beginning of last

    . - return CKEDITOR.tools.repeat( '

    ', ~~ ( repeats / 2 ) ) + ( repeats % 2 == 1 ? '
    ' : '' ); - } - - // Replace adjacent white-spaces (EOLs too - Fx sometimes keeps them) with one space. - data = data.replace( /\s+/g, ' ' ) - // Remove spaces from between tags. - .replace( /> +<' ) - // Normalize XHTML syntax and upper cased
    tags. - .replace( /
    /gi, '
    ' ); - - // IE - lower cased tags. - data = data.replace( /<\/?[A-Z]+>/g, function( match ) { - return match.toLowerCase(); - }); - - // Don't touch single lines (no ) - nothing to do here. - if ( data.match( /^[^<]$/ ) ) - return data; - - // Webkit. - if ( CKEDITOR.env.webkit && data.indexOf( '

    ' ) > -1 ) { - // One line break at the beginning - insert
    - data = data.replace( /^(
    (
    |)<\/div>)(?!$|(
    (
    |)<\/div>))/g, '
    ' ) - // Two or more - reduce number of new lines by one. - .replace( /^(
    (
    |)<\/div>){2}(?!$)/g, '
    ' ); - - // Two line breaks create one paragraph in Webkit. - if ( data.match( /
    (
    |)<\/div>/ ) ) { - data = '

    ' + data.replace( /(

    (
    |)<\/div>)+/g, function( match ) { - return repeatParagraphs( match.split( '
    ' ).length + 1 ); - }) + '

    '; - } - - // One line break create br. - data = data.replace( /<\/div>
    /g, '
    ' ); - - // Remove remaining divs. - data = data.replace( /<\/?div>/g, '' ); - } - - // Opera and Firefox and enterMode != BR. - if ( ( CKEDITOR.env.gecko || CKEDITOR.env.opera ) && config.enterMode != CKEDITOR.ENTER_BR ) { - // Remove bogus
    - Fx generates two for one line break. - // For two line breaks it still produces two , but it's better to ignore this case than the first one. - if ( CKEDITOR.env.gecko ) - data = data.replace( /^

    $/, '
    ' ); - - // This line satisfy edge case when for Opera we have two line breaks - //data = data.replace( /) - - if ( data.indexOf( '

    ' ) > -1 ) { - // Two line breaks create one paragraph, three - 2, four - 3, etc. - data = '

    ' + data.replace( /(
    ){2,}/g, function( match ) { - return repeatParagraphs( match.length / 4 ); - }) + '

    '; - } - } - - return switchEnterMode( config, data ); - } - - // Filter can be editor dependent. - function getTextificationFilter( editor ) { - var filter = new CKEDITOR.htmlParser.filter(); - - // Elements which creates vertical breaks (have vert margins) - took from HTML5 spec. - // http://dev.w3.org/html5/markup/Overview.html#toc - var replaceWithParaIf = { blockquote:1,dl:1,fieldset:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ol:1,p:1,table:1,ul:1 }, - - // All names except of
    . - stripInlineIf = CKEDITOR.tools.extend({ br: 0 }, CKEDITOR.dtd.$inline ), - - // What's finally allowed (cke:br will be removed later). - allowedIf = { p:1,br:1,'cke:br':1 }, - - knownIf = CKEDITOR.dtd, - - // All names that will be removed (with content). - removeIf = CKEDITOR.tools.extend( { area:1,basefont:1,embed:1,iframe:1,map:1,object:1,param:1 }, CKEDITOR.dtd.$nonBodyContent, CKEDITOR.dtd.$cdata ); - - var flattenTableCell = function( element ) { - delete element.name; - element.add( new CKEDITOR.htmlParser.text( ' ' ) ); - }, - // Squash adjacent headers into one.

    A

    B

    ->

    A
    B

    - // Empty ones will be removed later. - squashHeader = function( element ) { - var next = element, - br, el; - - while ( ( next = next.next ) && next.name && next.name.match( /^h\d$/ ) ) { - // TODO shitty code - waitin' for htmlParse.element fix. - br = new CKEDITOR.htmlParser.element( 'cke:br' ); - br.isEmpty = true; - element.add( br ); - while ( ( el = next.children.shift() ) ) - element.add( el ); - } - }; - - filter.addRules({ - elements: { - h1: squashHeader, - h2: squashHeader, - h3: squashHeader, - h4: squashHeader, - h5: squashHeader, - h6: squashHeader, - - img: function( element ) { - var alt = CKEDITOR.tools.trim( element.attributes.alt || '' ), - txt = ' '; - - // Replace image with its alt if it doesn't look like an url or is empty. - if ( alt && !alt.match( /(^http|\.(jpe?g|gif|png))/i ) ) - txt = ' [' + alt + '] '; - - return new CKEDITOR.htmlParser.text( txt ); - }, - - td: flattenTableCell, - th: flattenTableCell, - - $: function( element ) { - var initialName = element.name, - br; - - // Remove entirely. - if ( removeIf[ initialName ] ) - return false; - - // Remove all attributes. - delete element.attributes; - - // Pass brs. - if ( initialName == 'br' ) - return element; - - // Elements that we want to replace with paragraphs. - if ( replaceWithParaIf[ initialName ] ) - element.name = 'p'; - - // Elements that we want to strip (tags only, without the content). - else if ( stripInlineIf[ initialName ] ) - delete element.name; - - // Surround other known element with and strip tags. - else if ( knownIf[ initialName ] ) { - // TODO shitty code - waitin' for htmlParse.element fix. - br = new CKEDITOR.htmlParser.element( 'cke:br' ); - br.isEmpty = true; - - // Replace hrs (maybe sth else too?) with only one br. - if ( CKEDITOR.dtd.$empty[ initialName ] ) - return br; - - element.add( br, 0 ); - br = br.clone(); - br.isEmpty = true; - element.add( br ); - delete element.name; - } - - // Final cleanup - if we can still find some not allowed elements then strip their names. - if ( !allowedIf[ element.name ] ) - delete element.name; - - return element; - } - } - }); - - return filter; - } - - function htmlTextification( config, data, filter ) { - var fragment = new CKEDITOR.htmlParser.fragment.fromHtml( data ), - writer = new CKEDITOR.htmlParser.basicWriter(); - - fragment.writeHtml( writer, filter ); - data = writer.getHtml(); - - // Cleanup cke:brs. - data = data.replace( /\s*(<\/?[a-z:]+ ?\/?>)\s*/g, '$1' ) // Remove spaces around tags. - .replace( /(){2,}/g, '' ) // Join multiple adjacent cke:brs - .replace( /()(<\/?p>|
    )/g, '$2' ) // Strip cke:brs adjacent to original brs or ps. - .replace( /(<\/?p>|
    )()/g, '$1' ) - .replace( /<(cke:)?br( \/)?>/g, '
    ' ) // Finally - rename cke:brs to brs and fix
    to
    . - .replace( /

    <\/p>/g, '' ); // Remove empty paragraphs. - - // Fix nested ps. E.g.: - //

    A

    B

    C

    D

    E

    F

    G - //

    A

    B

    C

    D

    E

    F

    G - var nested = 0; - data = data.replace( /<\/?p>/g, function( match ) { - if ( match == '

    ' ) { - if ( ++nested > 1 ) - return '

    '; - } else { - if ( --nested > 0 ) - return '

    '; - } - - return match; - }).replace( /

    <\/p>/g, '' ); // Step before:

    ->

    . Fix this here. - - return switchEnterMode( config, data ); - } - - function switchEnterMode( config, data ) { - if ( config.enterMode == CKEDITOR.ENTER_BR ) { - data = data.replace( /(<\/p>

    )+/g, function( match ) { - return CKEDITOR.tools.repeat( '
    ', match.length / 7 * 2 ); - }).replace( /<\/?p>/g, '' ); - } else if ( config.enterMode == CKEDITOR.ENTER_DIV ) { - data = data.replace( /<(\/)?p>/g, '<$1div>' ); - } - - return data; - } -})(); - -/** - * The default content type is used when pasted data cannot be clearly recognized as HTML or text. - * - * For example: `'foo'` may come from a plain text editor or a website. It isn't possible to recognize content - * type in this case, so default will be used. However, it's clear that `'example text'` is an HTML - * and its origin is webpage, email or other rich text editor. - * - * **Note:** If content type is text, then styles of context of paste are preserved. - * - * CKEDITOR.config.clipboard_defaultContentType = 'text'; - * - * @since 4.0 - * @cfg {'html'/'text'} [clipboard_defaultContentType='html'] - * @member CKEDITOR.config - */ - -/** - * Fired when a clipboard operation is about to be taken into the editor. - * Listeners can manipulate the data to be pasted before having it effectively - * inserted into the document. - * - * @since 3.1 - * @event paste - * @member CKEDITOR.editor - * @param {CKEDITOR.editor} editor This editor instance. - * @param data - * @param {String} data.type Type of data in `data.dataValue`. Usually `html` or `text`, but for listeners - * with priority less than 6 it may be also `auto`, what means that content type hasn't been recognised yet - * (this will be done by content type sniffer that listens with priority 6). - * @param {String} data.dataValue HTML to be pasted. - */ - -/** - * Internal event to open the Paste dialog. - * - * @private - * @event pasteDialog - * @member CKEDITOR.editor - * @param {CKEDITOR.editor} editor This editor instance. - * @param {Function} [data] Callback that will be passed to {@link CKEDITOR.editor#openDialog}. - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - var template = '= 10900 && !CKEDITOR.env.hc ? '' : '" href="javascript:void(\'{titleJs}\')"' ) + - ' title="{title}"' + - ' tabindex="-1"' + - ' hidefocus="true"' + - ' role="button"' + - ' aria-labelledby="{id}_label"' + - ' aria-haspopup="{hasArrow}"'; - - // Some browsers don't cancel key events in the keydown but in the - // keypress. - // TODO: Check if really needed for Gecko+Mac. - if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) ) - template += ' onkeypress="return false;"'; - - // With Firefox, we need to force the button to redraw, otherwise it - // will remain in the focus state. - if ( CKEDITOR.env.gecko ) - template += ' onblur="this.style.cssText = this.style.cssText;"'; - - template += ' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event);"' + - ' onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" ' + - ' onmousedown="return CKEDITOR.tools.callFunction({mousedownFn},event);" ' + - ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) + // #188 - '="CKEDITOR.tools.callFunction({clickFn},this);return false;">' + - '{label}' + - '{arrowHtml}' + - ''; - - var templateArrow = '' + - // BLACK DOWN-POINTING TRIANGLE - ( CKEDITOR.env.hc ? '▼' : '' ) + - ''; - - var btnArrowTpl = CKEDITOR.addTemplate( 'buttonArrow', templateArrow ), - btnTpl = CKEDITOR.addTemplate( 'button', template ); - - CKEDITOR.plugins.add( 'button', { - beforeInit: function( editor ) { - editor.ui.addHandler( CKEDITOR.UI_BUTTON, CKEDITOR.ui.button.handler ); - } - }); - - /** - * Button UI element. - * - * @readonly - * @property {String} [='button'] - * @member CKEDITOR - */ - CKEDITOR.UI_BUTTON = 'button'; - - /** - * Represents a button UI element. This class should not be called directly. To - * create new buttons use {@link CKEDITOR.ui#addButton} instead. - * - * @class - * @constructor Creates a button class instance. - * @param {Object} definition The button definition. - */ - CKEDITOR.ui.button = function( definition ) { - CKEDITOR.tools.extend( this, definition, - // Set defaults. - { - title: definition.label, - click: definition.click || - function( editor ) { - editor.execCommand( definition.command ); - } - }); - - this._ = {}; - }; - - /** - * Represents button handler object. - * - * @class - * @singleton - * @extends CKEDITOR.ui.handlerDefinition - */ - CKEDITOR.ui.button.handler = { - /** - * Transforms a button definition in a {@link CKEDITOR.ui.button} instance. - * - * @member CKEDITOR.ui.button.handler - * @param {Object} definition - * @returns {CKEDITOR.ui.button} - */ - create: function( definition ) { - return new CKEDITOR.ui.button( definition ); - } - }; - - /** @class CKEDITOR.ui.button */ - CKEDITOR.ui.button.prototype = { - /** - * Renders the button. - * - * @param {CKEDITOR.editor} editor The editor instance which this button is - * to be used by. - * @param {Array} output The output array to which append the HTML relative - * to this button. - */ - render: function( editor, output ) { - var env = CKEDITOR.env, - id = this._.id = CKEDITOR.tools.getNextId(), - stateName = '', - command = this.command, - // Get the command name. - clickFn; - - this._.editor = editor; - - var instance = { - id: id, - button: this, - editor: editor, - focus: function() { - var element = CKEDITOR.document.getById( id ); - element.focus(); - }, - execute: function() { - this.button.click( editor ); - }, - attach: function( editor ) { - this.button.attach( editor ); - } - }; - - var keydownFn = CKEDITOR.tools.addFunction( function( ev ) { - if ( instance.onkey ) { - ev = new CKEDITOR.dom.event( ev ); - return ( instance.onkey( instance, ev.getKeystroke() ) !== false ); - } - }); - - var focusFn = CKEDITOR.tools.addFunction( function( ev ) { - var retVal; - - if ( instance.onfocus ) - retVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false ); - - // FF2: prevent focus event been bubbled up to editor container, which caused unexpected editor focus. - if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) - ev.preventBubble(); - return retVal; - }); - - var selLocked = 0; - - var mousedownFn = CKEDITOR.tools.addFunction( function() { - // Opera: lock to prevent loosing editable text selection when clicking on button. - if ( CKEDITOR.env.opera ) { - var edt = editor.editable(); - if ( edt.isInline() && edt.hasFocus ) { - editor.lockSelection(); - selLocked = 1; - } - } - }); - - instance.clickFn = clickFn = CKEDITOR.tools.addFunction( function() { - - // Restore locked selection in Opera. - if ( selLocked ) { - editor.unlockSelection( 1 ); - selLocked = 0; - } - - instance.execute(); - }); - - - // Indicate a mode sensitive button. - if ( this.modes ) { - var modeStates = {}; - - function updateState() { - // "this" is a CKEDITOR.ui.button instance. - - var mode = editor.mode; - - if ( mode ) { - // Restore saved button state. - var state = this.modes[ mode ] ? modeStates[ mode ] != undefined ? modeStates[ mode ] : CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; - - this.setState( editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state ); - } - } - - editor.on( 'beforeModeUnload', function() { - if ( editor.mode && this._.state != CKEDITOR.TRISTATE_DISABLED ) - modeStates[ editor.mode ] = this._.state; - }, this ); - - editor.on( 'mode', updateState, this ); - - // If this button is sensitive to readOnly state, update it accordingly. - !this.readOnly && editor.on( 'readOnly', updateState, this ); - } else if ( command ) { - // Get the command instance. - command = editor.getCommand( command ); - - if ( command ) { - command.on( 'state', function() { - this.setState( command.state ); - }, this ); - - stateName += ( command.state == CKEDITOR.TRISTATE_ON ? 'on' : command.state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : 'off' ); - } - } - - // For button that has text-direction awareness on selection path. - if ( this.directional ) { - editor.on( 'contentDirChanged', function( evt ) { - var el = CKEDITOR.document.getById( this._.id ), - icon = el.getFirst(); - - var pathDir = evt.data; - - // Make a minor direction change to become style-able for the skin icon. - if ( pathDir != editor.lang.dir ) - el.addClass( 'cke_' + pathDir ); - else - el.removeClass( 'cke_ltr' ).removeClass( 'cke_rtl' ); - - // Inline style update for the plugin icon. - icon.setAttribute( 'style', CKEDITOR.skin.getIconStyle( iconName, pathDir == 'rtl', this.icon, this.iconOffset ) ); - }, this ); - } - - if ( !command ) - stateName += 'off'; - - var name = this.name || this.command, - iconName = name; - - // Check if we're pointing to an icon defined by another command. (#9555) - if ( this.icon && !( /\./ ).test( this.icon ) ) { - iconName = this.icon; - this.icon = null; - } - - var params = { - id: id, - name: name, - iconName: iconName, - label: this.label, - cls: this.className || '', - state: stateName, - title: this.title, - titleJs: env.gecko && env.version >= 10900 && !env.hc ? '' : ( this.title || '' ).replace( "'", '' ), - hasArrow: this.hasArrow ? 'true' : 'false', - keydownFn: keydownFn, - mousedownFn: mousedownFn, - focusFn: focusFn, - clickFn: clickFn, - style: CKEDITOR.skin.getIconStyle( iconName, ( editor.lang.dir == 'rtl' ), this.icon, this.iconOffset ), - arrowHtml: this.hasArrow ? btnArrowTpl.output() : '' - }; - - btnTpl.output( params, output ); - - if ( this.onRender ) - this.onRender(); - - return instance; - }, - - /** - * @todo - */ - setState: function( state ) { - if ( this._.state == state ) - return false; - - this._.state = state; - - var element = CKEDITOR.document.getById( this._.id ); - - if ( element ) { - element.setState( state, 'cke_button' ); - - state == CKEDITOR.TRISTATE_DISABLED ? - element.setAttribute( 'aria-disabled', true ) : - element.removeAttribute( 'aria-disabled' ); - - state == CKEDITOR.TRISTATE_ON ? - element.setAttribute( 'aria-pressed', true ) : - element.removeAttribute( 'aria-pressed' ); - - return true; - } else - return false; - }, - - /** - * Returns this button's {@link CKEDITOR.feature} instance. - * - * It may be this button instance if it has at least one of - * `allowedContent` and `requiredContent` properties. Otherwise, - * if command is bound to this button by `command` property, then - * that command will be returned. - * - * This method implements {@link CKEDITOR.feature#toFeature} interface method. - * - * @since 4.1 - * @param {CKEDITOR.editor} Editor instance. - * @returns {CKEDITOR.feature} The feature. - */ - toFeature: function( editor ) { - if ( this._.feature ) - return this._.feature; - - var feature = this; - - // If button isn't a feature, return command if is bound. - if ( !this.allowedContent && !this.requiredContent && this.command ) - feature = editor.getCommand( this.command ) || feature; - - return this._.feature = feature; - } - }; - - /** - * Adds a button definition to the UI elements list. - * - * editorInstance.ui.addButton( 'MyBold', { - * label: 'My Bold', - * command: 'bold', - * toolbar: 'basicstyles,1' - * } ); - * - * @member CKEDITOR.ui - * @param {String} name The button name. - * @param {Object} definition The button definition. - */ - CKEDITOR.ui.prototype.addButton = function( name, definition ) { - this.add( name, CKEDITOR.UI_BUTTON, definition ); - }; - -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'panelbutton', { - requires: 'button', - onLoad: function() { - function clickFn( editor ) { - var _ = this._; - - if ( _.state == CKEDITOR.TRISTATE_DISABLED ) - return; - - this.createPanel( editor ); - - if ( _.on ) { - _.panel.hide(); - return; - } - - _.panel.showBlock( this._.id, this.document.getById( this._.id ), 4 ); - } - - /** - * @class - * @extends CKEDITOR.ui.button - * @todo class and methods - */ - CKEDITOR.ui.panelButton = CKEDITOR.tools.createClass({ - base: CKEDITOR.ui.button, - - /** - * Creates a panelButton class instance. - * - * @constructor - */ - $: function( definition ) { - // We don't want the panel definition in this object. - var panelDefinition = definition.panel || {}; - delete definition.panel; - - this.base( definition ); - - this.document = ( panelDefinition.parent && panelDefinition.parent.getDocument() ) || CKEDITOR.document; - - panelDefinition.block = { - attributes: panelDefinition.attributes - }; - panelDefinition.toolbarRelated = true; - - this.hasArrow = true; - - this.click = clickFn; - - this._ = { - panelDefinition: panelDefinition - }; - }, - - statics: { - handler: { - create: function( definition ) { - return new CKEDITOR.ui.panelButton( definition ); - } - } - }, - - proto: { - createPanel: function( editor ) { - var _ = this._; - - if ( _.panel ) - return; - - var panelDefinition = this._.panelDefinition, - panelBlockDefinition = this._.panelDefinition.block, - panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(), - panel = this._.panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ), - block = panel.addBlock( _.id, panelBlockDefinition ), - me = this; - - panel.onShow = function() { - if ( me.className ) - this.element.addClass( me.className + '_panel' ); - - me.setState( CKEDITOR.TRISTATE_ON ); - - _.on = 1; - - me.editorFocus && editor.focus(); - - if ( me.onOpen ) - me.onOpen(); - }; - - panel.onHide = function( preventOnClose ) { - if ( me.className ) - this.element.getFirst().removeClass( me.className + '_panel' ); - - me.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); - - _.on = 0; - - if ( !preventOnClose && me.onClose ) - me.onClose(); - }; - - panel.onEscape = function() { - panel.hide( 1 ); - me.document.getById( _.id ).focus(); - }; - - if ( this.onBlock ) - this.onBlock( panel, block ); - - block.onHide = function() { - _.on = 0; - me.setState( CKEDITOR.TRISTATE_OFF ); - }; - } - } - }); - - }, - beforeInit: function( editor ) { - editor.ui.addHandler( CKEDITOR.UI_PANELBUTTON, CKEDITOR.ui.panelButton.handler ); - } -}); - -/** - * Button UI element. - * - * @readonly - * @property {String} [='panelbutton'] - * @member CKEDITOR - */ -CKEDITOR.UI_PANELBUTTON = 'panelbutton'; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - CKEDITOR.plugins.add( 'panel', { - beforeInit: function( editor ) { - editor.ui.addHandler( CKEDITOR.UI_PANEL, CKEDITOR.ui.panel.handler ); - } - }); - - /** - * Panel UI element. - * - * @readonly - * @property {String} [='panel'] - * @member CKEDITOR - */ - CKEDITOR.UI_PANEL = 'panel'; - - /** - * @class - * @constructor Creates a panel class instance. - * @param {CKEDITOR.dom.document} document - * @param {Object} definition - */ - CKEDITOR.ui.panel = function( document, definition ) { - // Copy all definition properties to this object. - if ( definition ) - CKEDITOR.tools.extend( this, definition ); - - // Set defaults. - CKEDITOR.tools.extend( this, { - className: '', - css: [] - }); - - this.id = CKEDITOR.tools.getNextId(); - this.document = document; - this.isFramed = this.forceIFrame || this.css.length; - - this._ = { - blocks: {} - }; - }; - - /** - * Represents panel handler object. - * - * @class - * @singleton - * @extends CKEDITOR.ui.handlerDefinition - */ - CKEDITOR.ui.panel.handler = { - /** - * Transforms a panel definition in a {@link CKEDITOR.ui.panel} instance. - * - * @param {Object} definition - * @returns {CKEDITOR.ui.panel} - */ - create: function( definition ) { - return new CKEDITOR.ui.panel( definition ); - } - }; - - var panelTpl = CKEDITOR.addTemplate( 'panel', '

    ' ); - - var frameTpl = CKEDITOR.addTemplate( 'panel-frame', '' ); - - var frameDocTpl = CKEDITOR.addTemplate( 'panel-frame-inner', '' + - '' + - '{css}' + - '' + - '<\/html>' ); - - /** @class CKEDITOR.ui.panel */ - CKEDITOR.ui.panel.prototype = { - /** - * Renders the combo. - * - * @param {CKEDITOR.editor} editor The editor instance which this button is - * to be used by. - * @param {Array} [output] The output array to which append the HTML relative - * to this button. - */ - render: function( editor, output ) { - this.getHolderElement = function() { - var holder = this._.holder; - - if ( !holder ) { - if ( this.isFramed ) { - var iframe = this.document.getById( this.id + '_frame' ), - parentDiv = iframe.getParent(), - doc = iframe.getFrameDocument(); - - // Make it scrollable on iOS. (#8308) - CKEDITOR.env.iOS && parentDiv.setStyles({ - 'overflow': 'scroll', - '-webkit-overflow-scrolling': 'touch' - }); - - var onLoad = CKEDITOR.tools.addFunction( CKEDITOR.tools.bind( function( ev ) { - this.isLoaded = true; - if ( this.onLoad ) - this.onLoad(); - }, this ) ); - - doc.write( frameDocTpl.output( CKEDITOR.tools.extend({ - css: CKEDITOR.tools.buildStyleHtml( this.css ), - onload: 'window.parent.CKEDITOR.tools.callFunction(' + onLoad + ');' - }, data ) ) ); - - var win = doc.getWindow(); - - // Register the CKEDITOR global. - win.$.CKEDITOR = CKEDITOR; - - // Arrow keys for scrolling is only preventable with 'keypress' event in Opera (#4534). - doc.on( 'key' + ( CKEDITOR.env.opera ? 'press' : 'down' ), function( evt ) { - var keystroke = evt.data.getKeystroke(), - dir = this.document.getById( this.id ).getAttribute( 'dir' ); - - // Delegate key processing to block. - if ( this._.onKeyDown && this._.onKeyDown( keystroke ) === false ) { - evt.data.preventDefault(); - return; - } - - // ESC/ARROW-LEFT(ltr) OR ARROW-RIGHT(rtl) - if ( keystroke == 27 || keystroke == ( dir == 'rtl' ? 39 : 37 ) ) { - if ( this.onEscape && this.onEscape( keystroke ) === false ) - evt.data.preventDefault(); - } - }, this ); - - holder = doc.getBody(); - holder.unselectable(); - CKEDITOR.env.air && CKEDITOR.tools.callFunction( onLoad ); - } else - holder = this.document.getById( this.id ); - - this._.holder = holder; - } - - return holder; - }; - - var data = { - editorId: editor.id, - id: this.id, - langCode: editor.langCode, - dir: editor.lang.dir, - cls: this.className, - frame: '', - env: CKEDITOR.env.cssClass, - 'z-index': editor.config.baseFloatZIndex + 1 - }; - - if ( this.isFramed ) { - data.frame = frameTpl.output({ - id: this.id + '_frame', - src: 'javascript:void(document.open(),' + ( CKEDITOR.env.isCustomDomain() ? 'document.domain=\'' + document.domain + '\',' : '' ) - + 'document.close())">' - }); - } - - var html = panelTpl.output( data ); - - if ( output ) - output.push( html ); - - return html; - }, - - /** - * @todo - */ - addBlock: function( name, block ) { - block = this._.blocks[ name ] = block instanceof CKEDITOR.ui.panel.block ? block : new CKEDITOR.ui.panel.block( this.getHolderElement(), block ); - - if ( !this._.currentBlock ) - this.showBlock( name ); - - return block; - }, - - /** - * @todo - */ - getBlock: function( name ) { - return this._.blocks[ name ]; - }, - - /** - * @todo - */ - showBlock: function( name ) { - var blocks = this._.blocks, - block = blocks[ name ], - current = this._.currentBlock; - - // ARIA role works better in IE on the body element, while on the iframe - // for FF. (#8864) - var holder = !this.forceIFrame || CKEDITOR.env.ie ? this._.holder : this.document.getById( this.id + '_frame' ); - - if ( current ) { - // Clean up the current block's effects on holder. - holder.removeAttributes( current.attributes ); - current.hide(); - } - - this._.currentBlock = block; - - holder.setAttributes( block.attributes ); - CKEDITOR.fire( 'ariaWidget', holder ); - - // Reset the focus index, so it will always go into the first one. - block._.focusIndex = -1; - - this._.onKeyDown = block.onKeyDown && CKEDITOR.tools.bind( block.onKeyDown, block ); - - block.show(); - - return block; - }, - - /** - * @todo - */ - destroy: function() { - this.element && this.element.remove(); - } - }; - - /** - * @class - * - * @todo class and all methods - */ - CKEDITOR.ui.panel.block = CKEDITOR.tools.createClass({ - /** - * Creates a block class instances. - * - * @constructor - * @todo - */ - $: function( blockHolder, blockDefinition ) { - this.element = blockHolder.append( blockHolder.getDocument().createElement( 'div', { - attributes: { - 'tabIndex': -1, - 'class': 'cke_panel_block', - 'role': 'presentation' - }, - styles: { - display: 'none' - } - })); - - // Copy all definition properties to this object. - if ( blockDefinition ) - CKEDITOR.tools.extend( this, blockDefinition ); - - if ( !this.attributes.title ) - this.attributes.title = this.attributes[ 'aria-label' ]; - - this.keys = {}; - - this._.focusIndex = -1; - - // Disable context menu for panels. - this.element.disableContextMenu(); - }, - - _: { - - /** - * Mark the item specified by the index as current activated. - */ - markItem: function( index ) { - if ( index == -1 ) - return; - var links = this.element.getElementsByTag( 'a' ); - var item = links.getItem( this._.focusIndex = index ); - - // Safari need focus on the iframe window first(#3389), but we need - // lock the blur to avoid hiding the panel. - if ( CKEDITOR.env.webkit || CKEDITOR.env.opera ) - item.getDocument().getWindow().focus(); - item.focus(); - - this.onMark && this.onMark( item ); - } - }, - - proto: { - show: function() { - this.element.setStyle( 'display', '' ); - }, - - hide: function() { - if ( !this.onHide || this.onHide.call( this ) !== true ) - this.element.setStyle( 'display', 'none' ); - }, - - onKeyDown: function( keystroke ) { - var keyAction = this.keys[ keystroke ]; - switch ( keyAction ) { - // Move forward. - case 'next': - var index = this._.focusIndex, - links = this.element.getElementsByTag( 'a' ), - link; - - while ( ( link = links.getItem( ++index ) ) ) { - // Move the focus only if the element is marked with - // the _cke_focus and it it's visible (check if it has - // width). - if ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth ) { - this._.focusIndex = index; - link.focus(); - break; - } - } - return false; - - // Move backward. - case 'prev': - index = this._.focusIndex; - links = this.element.getElementsByTag( 'a' ); - - while ( index > 0 && ( link = links.getItem( --index ) ) ) { - // Move the focus only if the element is marked with - // the _cke_focus and it it's visible (check if it has - // width). - if ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth ) { - this._.focusIndex = index; - link.focus(); - break; - } - } - return false; - - case 'click': - case 'mouseup': - index = this._.focusIndex; - link = index >= 0 && this.element.getElementsByTag( 'a' ).getItem( index ); - - if ( link ) - link.$[ keyAction ] ? link.$[ keyAction ]() : link.$[ 'on' + keyAction ](); - - return false; - } - - return true; - } - } - }); - -})(); - -/** - * Fired when a panel is added to the document. - * - * @event ariaWidget - * @member CKEDITOR - * @param {Object} data The element wrapping the panel. - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'floatpanel', { - requires: 'panel' -}); - -(function() { - var panels = {}; - - function getPanel( editor, doc, parentElement, definition, level ) { - // Generates the panel key: docId-eleId-skinName-langDir[-uiColor][-CSSs][-level] - var key = CKEDITOR.tools.genKey( doc.getUniqueId(), parentElement.getUniqueId(), editor.lang.dir, editor.uiColor || '', definition.css || '', level || '' ), - panel = panels[ key ]; - - if ( !panel ) { - panel = panels[ key ] = new CKEDITOR.ui.panel( doc, definition ); - panel.element = parentElement.append( CKEDITOR.dom.element.createFromHtml( panel.render( editor ), doc ) ); - - panel.element.setStyles({ - display: 'none', - position: 'absolute' - }); - } - - return panel; - } - - /** - * Represents a floating panel UI element. - * - * It's reused by rich combos, color combos, menus, etc. - * and it renders its content using {@link CKEDITOR.ui.panel}. - * - * @class - * @todo - */ - CKEDITOR.ui.floatPanel = CKEDITOR.tools.createClass({ - /** - * Creates a floatPanel class instance. - * - * @constructor - * @param {CKEDITOR.editor} editor - * @param {CKEDITOR.dom.element} parentElement - * @param {Object} definition Definition of the panel that will be floating. - * @param {Number} level - */ - $: function( editor, parentElement, definition, level ) { - definition.forceIFrame = 1; - - // In case of editor with floating toolbar append panels that should float - // to the main UI element. - if ( definition.toolbarRelated && editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ) - parentElement = CKEDITOR.document.getById( 'cke_' + editor.name ); - - var doc = parentElement.getDocument(), - panel = getPanel( editor, doc, parentElement, definition, level || 0 ), - element = panel.element, - iframe = element.getFirst(), - that = this; - - // Disable native browser menu. (#4825) - element.disableContextMenu(); - - // Floating panels are placed outside the main editor UI, so we must - // make them application regions as well. (#9543) - element.setAttribute( 'role', 'application' ); - - this.element = element; - - this._ = { - editor: editor, - // The panel that will be floating. - panel: panel, - parentElement: parentElement, - definition: definition, - document: doc, - iframe: iframe, - children: [], - dir: editor.lang.dir - }; - - editor.on( 'mode', hide ); - editor.on( 'resize', hide ); - // Window resize doesn't cause hide on blur. (#9800) - doc.getWindow().on( 'resize', hide ); - - // We need a wrapper because events implementation doesn't allow to attach - // one listener more than once for the same event on the same object. - // Remember that floatPanel#hide is shared between all instances. - function hide() { - that.hide(); - } - }, - - proto: { - /** - * @todo - */ - addBlock: function( name, block ) { - return this._.panel.addBlock( name, block ); - }, - - /** - * @todo - */ - addListBlock: function( name, multiSelect ) { - return this._.panel.addListBlock( name, multiSelect ); - }, - - /** - * @todo - */ - getBlock: function( name ) { - return this._.panel.getBlock( name ); - }, - - /** - * Shows panel block. - * - * @param {String} name - * @param {CKEDITOR.dom.element} offsetParent Positioned parent. - * @param {Number} corner - * - * * For LTR (left to right) oriented editor: - * * `1` = top-left - * * `2` = top-right - * * `3` = bottom-right - * * `4` = bottom-left - * * For RTL (right to left): - * * `1` = top-right - * * `2` = top-left - * * `3` = bottom-left - * * `4` = bottom-right - * - * @param {Number} [offsetX=0] - * @param {Number} [offsetY=0] - * @todo what do exactly these params mean (especially corner)? - */ - showBlock: function( name, offsetParent, corner, offsetX, offsetY ) { - var panel = this._.panel, - block = panel.showBlock( name ); - - this.allowBlur( false ); - - // Record from where the focus is when open panel. - var editable = this._.editor.editable(); - this._.returnFocus = editable.hasFocus ? editable : new CKEDITOR.dom.element( CKEDITOR.document.$.activeElement ); - - var element = this.element, - iframe = this._.iframe, - // Non IE prefer the event into a window object. - focused = CKEDITOR.env.ie ? iframe : new CKEDITOR.dom.window( iframe.$.contentWindow ), - doc = element.getDocument(), - positionedAncestor = this._.parentElement.getPositionedAncestor(), - position = offsetParent.getDocumentPosition( doc ), - positionedAncestorPosition = positionedAncestor ? positionedAncestor.getDocumentPosition( doc ) : { x: 0, y: 0 }, - rtl = this._.dir == 'rtl', - left = position.x + ( offsetX || 0 ) - positionedAncestorPosition.x, - top = position.y + ( offsetY || 0 ) - positionedAncestorPosition.y; - - // Floating panels are off by (-1px, 0px) in RTL mode. (#3438) - if ( rtl && ( corner == 1 || corner == 4 ) ) - left += offsetParent.$.offsetWidth; - else if ( !rtl && ( corner == 2 || corner == 3 ) ) - left += offsetParent.$.offsetWidth - 1; - - if ( corner == 3 || corner == 4 ) - top += offsetParent.$.offsetHeight - 1; - - // Memorize offsetParent by it's ID. - this._.panel._.offsetParentId = offsetParent.getId(); - - element.setStyles({ - top: top + 'px', - left: 0, - display: '' - }); - - // Don't use display or visibility style because we need to - // calculate the rendering layout later and focus the element. - element.setOpacity( 0 ); - - // To allow the context menu to decrease back their width - element.getFirst().removeStyle( 'width' ); - - // Report to focus manager. - this._.editor.focusManager.add( focused ); - - // Configure the IFrame blur event. Do that only once. - if ( !this._.blurSet ) { - - // With addEventListener compatible browsers, we must - // useCapture when registering the focus/blur events to - // guarantee they will be firing in all situations. (#3068, #3222 ) - CKEDITOR.event.useCapture = true; - - focused.on( 'blur', function( ev ) { - - // As we are using capture to register the listener, - // the blur event may get fired even when focusing - // inside the window itself, so we must ensure the - // target is out of it. - if ( !this.allowBlur() || ev.data.getPhase() != CKEDITOR.EVENT_PHASE_AT_TARGET ) - return; - - if ( this.visible && !this._.activeChild ) { - // Panel close is caused by user's navigating away the focus, e.g. click outside the panel. - // DO NOT restore focus in this case. - delete this._.returnFocus; - this.hide(); - } - }, this ); - - focused.on( 'focus', function() { - this._.focused = true; - this.hideChild(); - this.allowBlur( true ); - }, this ); - - CKEDITOR.event.useCapture = false; - - this._.blurSet = 1; - } - - panel.onEscape = CKEDITOR.tools.bind( function( keystroke ) { - if ( this.onEscape && this.onEscape( keystroke ) === false ) - return false; - }, this ); - - CKEDITOR.tools.setTimeout( function() { - var panelLoad = CKEDITOR.tools.bind( function() { - var target = element; - - // Reset panel width as the new content can be narrower - // than the old one. (#9355) - target.removeStyle( 'width' ); - - if ( block.autoSize ) { - var panelDoc = block.element.getDocument(); - var width = ( CKEDITOR.env.webkit? block.element : panelDoc.getBody() )[ '$' ].scrollWidth; - - // Account for extra height needed due to IE quirks box model bug: - // http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug - // (#3426) - if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && width > 0 ) - width += ( target.$.offsetWidth || 0 ) - ( target.$.clientWidth || 0 ) + 3; - - // Add some extra pixels to improve the appearance. - width += 10; - - target.setStyle( 'width', width + 'px' ); - - var height = block.element.$.scrollHeight; - - // Account for extra height needed due to IE quirks box model bug: - // http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug - // (#3426) - if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && height > 0 ) - height += ( target.$.offsetHeight || 0 ) - ( target.$.clientHeight || 0 ) + 3; - - target.setStyle( 'height', height + 'px' ); - - // Fix IE < 8 visibility. - panel._.currentBlock.element.setStyle( 'display', 'none' ).removeStyle( 'display' ); - } else - target.removeStyle( 'height' ); - - // Flip panel layout horizontally in RTL with known width. - if ( rtl ) - left -= element.$.offsetWidth; - - // Pop the style now for measurement. - element.setStyle( 'left', left + 'px' ); - - /* panel layout smartly fit the viewport size. */ - var panelElement = panel.element, - panelWindow = panelElement.getWindow(), - rect = element.$.getBoundingClientRect(), - viewportSize = panelWindow.getViewPaneSize(); - - // Compensation for browsers that dont support "width" and "height". - var rectWidth = rect.width || rect.right - rect.left, - rectHeight = rect.height || rect.bottom - rect.top; - - // Check if default horizontal layout is impossible. - var spaceAfter = rtl ? rect.right : viewportSize.width - rect.left, - spaceBefore = rtl ? viewportSize.width - rect.right : rect.left; - - if ( rtl ) { - if ( spaceAfter < rectWidth ) { - // Flip to show on right. - if ( spaceBefore > rectWidth ) - left += rectWidth; - // Align to window left. - else if ( viewportSize.width > rectWidth ) - left = left - rect.left; - // Align to window right, never cutting the panel at right. - else - left = left - rect.right + viewportSize.width; - } - } else if ( spaceAfter < rectWidth ) { - // Flip to show on left. - if ( spaceBefore > rectWidth ) - left -= rectWidth; - // Align to window right. - else if ( viewportSize.width > rectWidth ) - left = left - rect.right + viewportSize.width; - // Align to window left, never cutting the panel at left. - else - left = left - rect.left; - } - - - // Check if the default vertical layout is possible. - var spaceBelow = viewportSize.height - rect.top, - spaceAbove = rect.top; - - if ( spaceBelow < rectHeight ) { - // Flip to show above. - if ( spaceAbove > rectHeight ) - top -= rectHeight; - // Align to window bottom. - else if ( viewportSize.height > rectHeight ) - top = top - rect.bottom + viewportSize.height; - // Align to top, never cutting the panel at top. - else - top = top - rect.top; - } - - // If IE is in RTL, we have troubles with absolute - // position and horizontal scrolls. Here we have a - // series of hacks to workaround it. (#6146) - if ( CKEDITOR.env.ie ) { - var offsetParent = new CKEDITOR.dom.element( element.$.offsetParent ), - scrollParent = offsetParent; - - // Quirks returns , but standards returns . - if ( scrollParent.getName() == 'html' ) - scrollParent = scrollParent.getDocument().getBody(); - - if ( scrollParent.getComputedStyle( 'direction' ) == 'rtl' ) { - // For IE8, there is not much logic on this, but it works. - if ( CKEDITOR.env.ie8Compat ) - left -= element.getDocument().getDocumentElement().$.scrollLeft * 2; - else - left -= ( offsetParent.$.scrollWidth - offsetParent.$.clientWidth ); - } - } - - // Trigger the onHide event of the previously active panel to prevent - // incorrect styles from being applied (#6170) - var innerElement = element.getFirst(), - activePanel; - if ( ( activePanel = innerElement.getCustomData( 'activePanel' ) ) ) - activePanel.onHide && activePanel.onHide.call( this, 1 ); - innerElement.setCustomData( 'activePanel', this ); - - element.setStyles({ - top: top + 'px', - left: left + 'px' - }); - element.setOpacity( 1 ); - }, this ); - - panel.isLoaded ? panelLoad() : panel.onLoad = panelLoad; - - // Set the panel frame focus, so the blur event gets fired. - CKEDITOR.tools.setTimeout( function() { - - this.focus(); - - // We need this get fired manually because of unfired focus() function. - this.allowBlur( true ); - this._.editor.fire( 'panelShow', this ); - }, 0, this ); - }, CKEDITOR.env.air ? 200 : 0, this ); - this.visible = 1; - - if ( this.onShow ) - this.onShow.call( this ); - - }, - - /** - * Restores last focused element or simply focus panel window. - */ - focus: function() { - // Webkit requires to blur any previous focused page element, in - // order to properly fire the "focus" event. - if ( CKEDITOR.env.webkit ) { - var active = CKEDITOR.document.getActive(); - !active.equals( this._.iframe ) && active.$.blur(); - } - - // Restore last focused element or simply focus panel window. - var focus = this._.lastFocused || this._.iframe.getFrameDocument().getWindow(); - focus.focus(); - }, - - /** - * @todo - */ - blur: function() { - var doc = this._.iframe.getFrameDocument(), - active = doc.getActive(); - - active.is( 'a' ) && ( this._.lastFocused = active ); - }, - - /** - * Hides panel. - * - * @todo - */ - hide: function( returnFocus ) { - if ( this.visible && ( !this.onHide || this.onHide.call( this ) !== true ) ) { - this.hideChild(); - // Blur previously focused element. (#6671) - CKEDITOR.env.gecko && this._.iframe.getFrameDocument().$.activeElement.blur(); - this.element.setStyle( 'display', 'none' ); - this.visible = 0; - this.element.getFirst().removeCustomData( 'activePanel' ); - - // Return focus properly. (#6247) - var focusReturn = returnFocus && this._.returnFocus; - if ( focusReturn ) { - // Webkit requires focus moved out panel iframe first. - if ( CKEDITOR.env.webkit && focusReturn.type ) - focusReturn.getWindow().$.focus(); - - focusReturn.focus(); - } - - delete this._.lastFocused; - - this._.editor.fire( 'panelHide', this ); - } - }, - - /** - * @todo - */ - allowBlur: function( allow ) // Prevent editor from hiding the panel. #3222. - { - var panel = this._.panel; - if ( allow != undefined ) - panel.allowBlur = allow; - - return panel.allowBlur; - }, - - /** - * Shows specified panel as a child of one block of this one. - * - * @param {CKEDITOR.ui.floatPanel} panel - * @param {String} blockName - * @param {CKEDITOR.dom.element} offsetParent Positioned parent. - * @param {Number} corner - * - * * For LTR (left to right) oriented editor: - * * `1` = top-left - * * `2` = top-right - * * `3` = bottom-right - * * `4` = bottom-left - * * For RTL (right to left): - * * `1` = top-right - * * `2` = top-left - * * `3` = bottom-left - * * `4` = bottom-right - * - * @param {Number} [offsetX=0] - * @param {Number} [offsetY=0] - * @todo - */ - showAsChild: function( panel, blockName, offsetParent, corner, offsetX, offsetY ) { - // Skip reshowing of child which is already visible. - if ( this._.activeChild == panel && panel._.panel._.offsetParentId == offsetParent.getId() ) - return; - - this.hideChild(); - - panel.onHide = CKEDITOR.tools.bind( function() { - // Use a timeout, so we give time for this menu to get - // potentially focused. - CKEDITOR.tools.setTimeout( function() { - if ( !this._.focused ) - this.hide(); - }, 0, this ); - }, this ); - - this._.activeChild = panel; - this._.focused = false; - - panel.showBlock( blockName, offsetParent, corner, offsetX, offsetY ); - this.blur(); - - /* #3767 IE: Second level menu may not have borders */ - if ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) { - setTimeout( function() { - panel.element.getChild( 0 ).$.style.cssText += ''; - }, 100 ); - } - }, - - /** - * @todo - */ - hideChild: function( restoreFocus ) { - var activeChild = this._.activeChild; - - if ( activeChild ) { - delete activeChild.onHide; - delete this._.activeChild; - activeChild.hide(); - - // At this point focus should be moved back to parent panel. - restoreFocus && this.focus(); - } - } - } - }); - - CKEDITOR.on( 'instanceDestroyed', function() { - var isLastInstance = CKEDITOR.tools.isEmpty( CKEDITOR.instances ); - - for ( var i in panels ) { - var panel = panels[ i ]; - // Safe to destroy it since there're no more instances.(#4241) - if ( isLastInstance ) - panel.destroy(); - // Panel might be used by other instances, just hide them.(#4552) - else - panel.element.hide(); - } - // Remove the registration. - isLastInstance && ( panels = {} ); - - } ); -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview The "colorbutton" plugin that makes it possible to assign - * text and background colors to editor contents. - * - */ -CKEDITOR.plugins.add( 'colorbutton', { - requires: 'panelbutton,floatpanel', - init: function( editor ) { - var config = editor.config, - lang = editor.lang.colorbutton; - - var clickFn; - - if ( !CKEDITOR.env.hc ) { - addButton( 'TextColor', 'fore', lang.textColorTitle, 10 ); - addButton( 'BGColor', 'back', lang.bgColorTitle, 20 ); - } - - function addButton( name, type, title, order ) { - var style = new CKEDITOR.style( config[ 'colorButton_' + type + 'Style' ] ), - colorBoxId = CKEDITOR.tools.getNextId() + '_colorBox'; - - editor.ui.add( name, CKEDITOR.UI_PANELBUTTON, { - label: title, - title: title, - modes: { wysiwyg:1 }, - editorFocus: 1, - toolbar: 'colors,' + order, - allowedContent: style, - requiredContent: style, - - panel: { - css: CKEDITOR.skin.getPath( 'editor' ), - attributes: { role: 'listbox', 'aria-label': lang.panelTitle } - }, - - onBlock: function( panel, block ) { - block.autoSize = true; - block.element.addClass( 'cke_colorblock' ); - block.element.setHtml( renderColors( panel, type, colorBoxId ) ); - // The block should not have scrollbars (#5933, #6056) - block.element.getDocument().getBody().setStyle( 'overflow', 'hidden' ); - - CKEDITOR.ui.fire( 'ready', this ); - - var keys = block.keys; - var rtl = editor.lang.dir == 'rtl'; - keys[ rtl ? 37 : 39 ] = 'next'; // ARROW-RIGHT - keys[ 40 ] = 'next'; // ARROW-DOWN - keys[ 9 ] = 'next'; // TAB - keys[ rtl ? 39 : 37 ] = 'prev'; // ARROW-LEFT - keys[ 38 ] = 'prev'; // ARROW-UP - keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB - keys[ 32 ] = 'click'; // SPACE - }, - - // The automatic colorbox should represent the real color (#6010) - onOpen: function() { - - var selection = editor.getSelection(), - block = selection && selection.getStartElement(), - path = editor.elementPath( block ), - color; - - // Find the closest block element. - block = path.block || path.blockLimit || editor.document.getBody(); - - // The background color might be transparent. In that case, look up the color in the DOM tree. - do { - color = block && block.getComputedStyle( type == 'back' ? 'background-color' : 'color' ) || 'transparent'; - } - while ( type == 'back' && color == 'transparent' && block && ( block = block.getParent() ) ); - - // The box should never be transparent. - if ( !color || color == 'transparent' ) - color = '#ffffff'; - - this._.panel._.iframe.getFrameDocument().getById( colorBoxId ).setStyle( 'background-color', color ); - - return color; - } - }); - } - - - function renderColors( panel, type, colorBoxId ) { - var output = [], - colors = config.colorButton_colors.split( ',' ); - - var clickFn = CKEDITOR.tools.addFunction( function( color, type ) { - if ( color == '?' ) { - var applyColorStyle = arguments.callee; - - function onColorDialogClose( evt ) { - this.removeListener( 'ok', onColorDialogClose ); - this.removeListener( 'cancel', onColorDialogClose ); - - evt.name == 'ok' && applyColorStyle( this.getContentElement( 'picker', 'selectedColor' ).getValue(), type ); - } - - editor.openDialog( 'colordialog', function() { - this.on( 'ok', onColorDialogClose ); - this.on( 'cancel', onColorDialogClose ); - }); - - return; - } - - editor.focus(); - - panel.hide(); - - editor.fire( 'saveSnapshot' ); - - // Clean up any conflicting style within the range. - editor.removeStyle( new CKEDITOR.style( config[ 'colorButton_' + type + 'Style' ], { color: 'inherit' } ) ); - - if ( color ) { - var colorStyle = config[ 'colorButton_' + type + 'Style' ]; - - colorStyle.childRule = type == 'back' ? - function( element ) { - // It's better to apply background color as the innermost style. (#3599) - // Except for "unstylable elements". (#6103) - return isUnstylable( element ); - } : function( element ) { - // Fore color style must be applied inside links instead of around it. (#4772,#6908) - return !( element.is( 'a' ) || element.getElementsByTag( 'a' ).count() ) || isUnstylable( element ); - }; - - editor.applyStyle( new CKEDITOR.style( colorStyle, { color: color } ) ); - } - - editor.fire( 'saveSnapshot' ); - }); - - // Render the "Automatic" button. - output.push( '' + - '' + - '' + - '' + - '' + - '' + - '
    ' + - '' + - '', lang.auto, '
    ' + - '
    ' + - '' ); - - // Render the color boxes. - for ( var i = 0; i < colors.length; i++ ) { - if ( ( i % 8 ) === 0 ) - output.push( '' ); - - var parts = colors[ i ].split( '/' ), - colorName = parts[ 0 ], - colorCode = parts[ 1 ] || colorName; - - // The data can be only a color code (without #) or colorName + color code - // If only a color code is provided, then the colorName is the color with the hash - // Convert the color from RGB to RRGGBB for better compatibility with IE and . See #5676 - if ( !parts[ 1 ] ) - colorName = '#' + colorName.replace( /^(.)(.)(.)$/, '$1$1$2$2$3$3' ); - - var colorLabel = editor.lang.colorbutton.colors[ colorCode ] || colorCode; - output.push( '' ); - } - - // Render the "More Colors" button. - if ( editor.plugins.colordialog && config.colorButton_enableMore === undefined || config.colorButton_enableMore ) { - output.push( '' + - '' + - '' ); // tr is later in the code. - } - - output.push( '
    ' + - '' + - '' + - '' + - '
    ' + - '', lang.more, '' + - '
    ' ); - - return output.join( '' ); - } - - function isUnstylable( ele ) { - return ( ele.getAttribute( 'contentEditable' ) == 'false' ) || ele.getAttribute( 'data-nostyle' ); - } - } -}); - -/** - * Whether to enable the **More Colors*** button in the color selectors. - * - * config.colorButton_enableMore = false; - * - * @cfg {Boolean} [colorButton_enableMore=true] - * @member CKEDITOR.config - */ - -/** - * Defines the colors to be displayed in the color selectors. This is a string - * containing hexadecimal notation for HTML colors, without the `'#'` prefix. - * - * **Since 3.3:** A color name may optionally be defined by prefixing the entries with - * a name and the slash character. For example, `'FontColor1/FF9900'` will be - * displayed as the color `#FF9900` in the selector, but will be output as `'FontColor1'`. - * - * // Brazil colors only. - * config.colorButton_colors = '00923E,F8C100,28166F'; - * - * config.colorButton_colors = 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00'; - * - * @cfg {String} [colorButton_colors=see source] - * @member CKEDITOR.config - */ -CKEDITOR.config.colorButton_colors = '000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,' + - 'B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,' + - 'F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,' + - 'FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,' + - 'FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF'; - -/** - * Stores the style definition that applies the text foreground color. - * - * // This is actually the default value. - * config.colorButton_foreStyle = { - * element: 'span', - * styles: { color: '#(color)' } - * }; - * - * @cfg [colorButton_foreStyle=see source] - * @member CKEDITOR.config - */ -CKEDITOR.config.colorButton_foreStyle = { - element: 'span', - styles: { 'color': '#(color)' }, - overrides: [ { - element: 'font', attributes: { 'color': null } - }] -}; - -/** - * Stores the style definition that applies the text background color. - * - * // This is actually the default value. - * config.colorButton_backStyle = { - * element: 'span', - * styles: { 'background-color': '#(color)' } - * }; - * - * @cfg [colorButton_backStyle=see source] - * @member CKEDITOR.config - */ -CKEDITOR.config.colorButton_backStyle = { - element: 'span', - styles: { 'background-color': '#(color)' } -}; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.colordialog = { - requires: 'dialog', - init: function( editor ) { - editor.addCommand( 'colordialog', new CKEDITOR.dialogCommand( 'colordialog' ) ); - CKEDITOR.dialog.add( 'colordialog', this.path + 'dialogs/colordialog.js' ); - - /** - * Open up color dialog and to receive the selected color. - * - * @param {Function} callback The callback when color dialog is closed - * @param {String} callback.color The color value received if selected on the dialog. - * @param [scope] The scope in which the callback will be bound. - * @member CKEDITOR.editor - */ - editor.getColorFromDialog = function( callback, scope ) { - var onClose = function( evt ) { - releaseHandlers( this ); - var color = evt.name == 'ok' ? this.getValueOf( 'picker', 'selectedColor' ) : null; - callback.call( scope, color ); - }; - var releaseHandlers = function( dialog ) { - dialog.removeListener( 'ok', onClose ); - dialog.removeListener( 'cancel', onClose ); - }; - var bindToDialog = function( dialog ) { - dialog.on( 'ok', onClose ); - dialog.on( 'cancel', onClose ); - }; - - editor.execCommand( 'colordialog' ); - - if ( editor._.storedDialogs && editor._.storedDialogs.colordialog ) - bindToDialog( editor._.storedDialogs.colordialog ); - else { - CKEDITOR.on( 'dialogDefinition', function( e ) { - if ( e.data.name != 'colordialog' ) - return; - - var definition = e.data.definition; - - e.removeListener(); - definition.onLoad = CKEDITOR.tools.override( definition.onLoad, - function( orginal ) { - return function() { - bindToDialog( this ); - definition.onLoad = orginal; - if ( typeof orginal == 'function' ) - orginal.call( this ); - }; - } ); - } ); - } - }; - - - } -}; - -CKEDITOR.plugins.add( 'colordialog', CKEDITOR.plugins.colordialog ); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - CKEDITOR.plugins.add( 'templates', { - requires: 'dialog', - init: function( editor ) { - CKEDITOR.dialog.add( 'templates', CKEDITOR.getUrl( this.path + 'dialogs/templates.js' ) ); - - editor.addCommand( 'templates', new CKEDITOR.dialogCommand( 'templates' ) ); - - editor.ui.addButton && editor.ui.addButton( 'Templates', { - label: editor.lang.templates.button, - command: 'templates', - toolbar: 'doctools,10' - }); - } - }); - - var templates = {}, - loadedTemplatesFiles = {}; - - CKEDITOR.addTemplates = function( name, definition ) { - templates[ name ] = definition; - }; - - CKEDITOR.getTemplates = function( name ) { - return templates[ name ]; - }; - - CKEDITOR.loadTemplates = function( templateFiles, callback ) { - // Holds the templates files to be loaded. - var toLoad = []; - - // Look for pending template files to get loaded. - for ( var i = 0, count = templateFiles.length; i < count; i++ ) { - if ( !loadedTemplatesFiles[ templateFiles[ i ] ] ) { - toLoad.push( templateFiles[ i ] ); - loadedTemplatesFiles[ templateFiles[ i ] ] = 1; - } - } - - if ( toLoad.length ) - CKEDITOR.scriptLoader.load( toLoad, callback ); - else - setTimeout( callback, 0 ); - }; -})(); - - - -/** - * The templates definition set to use. It accepts a list of names separated by - * comma. It must match definitions loaded with the {@link #templates_files} setting. - * - * config.templates = 'my_templates'; - * - * @cfg {String} [templates='default'] - * @member CKEDITOR.config - */ - -/** - * The list of templates definition files to load. - * - * config.templates_files = [ - * '/editor_templates/site_default.js', - * 'http://www.example.com/user_templates.js - * ]; - * - * @cfg - * @member CKEDITOR.config - */ -CKEDITOR.config.templates_files = [ - CKEDITOR.getUrl( 'plugins/templates/templates/default.js' ) - ]; - -/** - * Whether the "Replace actual contents" checkbox is checked by default in the - * Templates dialog. - * - * config.templates_replaceContent = false; - * - * @cfg - * @member CKEDITOR.config - */ -CKEDITOR.config.templates_replaceContent = true; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'menu', { - requires: 'floatpanel', - - beforeInit: function( editor ) { - var groups = editor.config.menu_groups.split( ',' ), - groupsOrder = editor._.menuGroups = {}, - menuItems = editor._.menuItems = {}; - - for ( var i = 0; i < groups.length; i++ ) - groupsOrder[ groups[ i ] ] = i + 1; - - /** - * Registers an item group to the editor context menu in order to make it - * possible to associate it with menu items later. - * - * @param {String} name Specify a group name. - * @param {Number} [order=100] Define the display sequence of this group - * inside the menu. A smaller value gets displayed first. - * @member CKEDITOR.editor - */ - editor.addMenuGroup = function( name, order ) { - groupsOrder[ name ] = order || 100; - }; - - /** - * Adds an item from the specified definition to the editor context menu. - * - * @method - * @param {String} name The menu item name. - * @param {Object} definition The menu item definition. - * @member CKEDITOR.editor - */ - editor.addMenuItem = function( name, definition ) { - if ( groupsOrder[ definition.group ] ) - menuItems[ name ] = new CKEDITOR.menuItem( this, name, definition ); - }; - - /** - * Adds one or more items from the specified definition array to the editor context menu. - * - * @method - * @param {Array} definitions List of definitions for each menu item as if {@link #addMenuItem} is called. - * @member CKEDITOR.editor - */ - editor.addMenuItems = function( definitions ) { - for ( var itemName in definitions ) { - this.addMenuItem( itemName, definitions[ itemName ] ); - } - }; - - /** - * Retrieves a particular menu item definition from the editor context menu. - * - * @method - * @param {String} name The name of the desired menu item. - * @returns {Object} - * @member CKEDITOR.editor - */ - editor.getMenuItem = function( name ) { - return menuItems[ name ]; - }; - - /** - * Removes a particular menu item added before from the editor context menu. - * - * @since 3.6.1 - * @method - * @param {String} name The name of the desired menu item. - * @member CKEDITOR.editor - */ - editor.removeMenuItem = function( name ) { - delete menuItems[ name ]; - }; - } -}); - -(function() { - var menuItemSource = '' + - ''; - - menuItemSource += - '' + - '' + - '' + - '' + - '' + - '{label}' + - '' + - '{arrowHtml}' + - '' + - ''; - - var menuArrowSource = '' + - '{label}' + - ''; - - var menuItemTpl = CKEDITOR.addTemplate( 'menuItem', menuItemSource ), - menuArrowTpl = CKEDITOR.addTemplate( 'menuArrow', menuArrowSource ); - - /** - * @class - * @todo - */ - CKEDITOR.menu = CKEDITOR.tools.createClass({ - $: function( editor, definition ) { - definition = this._.definition = definition || {}; - this.id = CKEDITOR.tools.getNextId(); - - this.editor = editor; - this.items = []; - this._.listeners = []; - - this._.level = definition.level || 1; - - var panelDefinition = CKEDITOR.tools.extend( {}, definition.panel, { - css: [ CKEDITOR.skin.getPath( 'editor' ) ], - level: this._.level - 1, - block: {} - }); - - var attrs = panelDefinition.block.attributes = ( panelDefinition.attributes || {} ); - // Provide default role of 'menu'. - !attrs.role && ( attrs.role = 'menu' ); - this._.panelDefinition = panelDefinition; - }, - - _: { - onShow: function() { - var selection = this.editor.getSelection(), - start = selection && selection.getStartElement(), - path = this.editor.elementPath(), - listeners = this._.listeners; - - this.removeAll(); - // Call all listeners, filling the list of items to be displayed. - for ( var i = 0; i < listeners.length; i++ ) { - var listenerItems = listeners[ i ]( start, selection, path ); - - if ( listenerItems ) { - for ( var itemName in listenerItems ) { - var item = this.editor.getMenuItem( itemName ); - - if ( item && ( !item.command || this.editor.getCommand( item.command ).state ) ) { - item.state = listenerItems[ itemName ]; - this.add( item ); - } - } - } - } - }, - - onClick: function( item ) { - this.hide(); - - if ( item.onClick ) - item.onClick(); - else if ( item.command ) - this.editor.execCommand( item.command ); - }, - - onEscape: function( keystroke ) { - var parent = this.parent; - // 1. If it's sub-menu, close it, with focus restored on this. - // 2. In case of a top-menu, close it, with focus returned to page. - if ( parent ) - parent._.panel.hideChild( 1 ); - else if ( keystroke == 27 ) - this.hide( 1 ); - - return false; - }, - - onHide: function() { - this.onHide && this.onHide(); - }, - - showSubMenu: function( index ) { - var menu = this._.subMenu, - item = this.items[ index ], - subItemDefs = item.getItems && item.getItems(); - - // If this item has no subitems, we just hide the submenu, if - // available, and return back. - if ( !subItemDefs ) { - // Hide sub menu with focus returned. - this._.panel.hideChild( 1 ); - return; - } - - // Create the submenu, if not available, or clean the existing - // one. - if ( menu ) - menu.removeAll(); - else { - menu = this._.subMenu = new CKEDITOR.menu( this.editor, CKEDITOR.tools.extend( {}, this._.definition, { level: this._.level + 1 }, true ) ); - menu.parent = this; - menu._.onClick = CKEDITOR.tools.bind( this._.onClick, this ); - } - - // Add all submenu items to the menu. - for ( var subItemName in subItemDefs ) { - var subItem = this.editor.getMenuItem( subItemName ); - if ( subItem ) { - subItem.state = subItemDefs[ subItemName ]; - menu.add( subItem ); - } - } - - // Get the element representing the current item. - var element = this._.panel.getBlock( this.id ).element.getDocument().getById( this.id + String( index ) ); - - // Show the submenu. - // This timeout is needed to give time for the sub-menu get - // focus when JAWS is running. (#9844) - setTimeout( function() { - menu.show( element, 2 ); - },0); - } - }, - - proto: { - add: function( item ) { - // Later we may sort the items, but Array#sort is not stable in - // some browsers, here we're forcing the original sequence with - // 'order' attribute if it hasn't been assigned. (#3868) - if ( !item.order ) - item.order = this.items.length; - - this.items.push( item ); - }, - - removeAll: function() { - this.items = []; - }, - - show: function( offsetParent, corner, offsetX, offsetY ) { - // Not for sub menu. - if ( !this.parent ) { - this._.onShow(); - // Don't menu with zero items. - if ( !this.items.length ) - return; - } - - corner = corner || ( this.editor.lang.dir == 'rtl' ? 2 : 1 ); - - var items = this.items, - editor = this.editor, - panel = this._.panel, - element = this._.element; - - // Create the floating panel for this menu. - if ( !panel ) { - panel = this._.panel = new CKEDITOR.ui.floatPanel( this.editor, CKEDITOR.document.getBody(), this._.panelDefinition, this._.level ); - - panel.onEscape = CKEDITOR.tools.bind( function( keystroke ) { - if ( this._.onEscape( keystroke ) === false ) - return false; - }, this ); - - panel.onShow = function() { - // Menu need CSS resets, compensate class name. - var holder = panel._.panel.getHolderElement(); - holder.getParent().addClass( 'cke cke_reset_all' ); - }; - - panel.onHide = CKEDITOR.tools.bind( function() { - this._.onHide && this._.onHide(); - }, this ); - - // Create an autosize block inside the panel. - var block = panel.addBlock( this.id, this._.panelDefinition.block ); - block.autoSize = true; - - var keys = block.keys; - keys[ 40 ] = 'next'; // ARROW-DOWN - keys[ 9 ] = 'next'; // TAB - keys[ 38 ] = 'prev'; // ARROW-UP - keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB - keys[ ( editor.lang.dir == 'rtl' ? 37 : 39 ) ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // ARROW-RIGHT/ARROW-LEFT(rtl) - keys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE - CKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (#8041). - - element = this._.element = block.element; - - var elementDoc = element.getDocument(); - elementDoc.getBody().setStyle( 'overflow', 'hidden' ); - elementDoc.getElementsByTag( 'html' ).getItem( 0 ).setStyle( 'overflow', 'hidden' ); - - this._.itemOverFn = CKEDITOR.tools.addFunction( function( index ) { - clearTimeout( this._.showSubTimeout ); - this._.showSubTimeout = CKEDITOR.tools.setTimeout( this._.showSubMenu, editor.config.menu_subMenuDelay || 400, this, [ index ] ); - }, this ); - - this._.itemOutFn = CKEDITOR.tools.addFunction( function( index ) { - clearTimeout( this._.showSubTimeout ); - }, this ); - - this._.itemClickFn = CKEDITOR.tools.addFunction( function( index ) { - var item = this.items[ index ]; - - if ( item.state == CKEDITOR.TRISTATE_DISABLED ) { - this.hide( 1 ); - return; - } - - if ( item.getItems ) - this._.showSubMenu( index ); - else - this._.onClick( item ); - }, this ); - } - - // Put the items in the right order. - sortItems( items ); - - // Apply the editor mixed direction status to menu. - var path = editor.elementPath(), - mixedDirCls = ( path && path.direction() != editor.lang.dir ) ? ' cke_mixed_dir_content' : ''; - - // Build the HTML that composes the menu and its items. - var output = [ '' ); - - // Inject the HTML inside the panel. - element.setHtml( output.join( '' ) ); - - CKEDITOR.ui.fire( 'ready', this ); - - // Show the panel. - if ( this.parent ) - this.parent._.panel.showAsChild( panel, this.id, offsetParent, corner, offsetX, offsetY ); - else - panel.showBlock( this.id, offsetParent, corner, offsetX, offsetY ); - - editor.fire( 'menuShow', [ panel ] ); - }, - - addListener: function( listenerFn ) { - this._.listeners.push( listenerFn ); - }, - - hide: function( returnFocus ) { - this._.onHide && this._.onHide(); - this._.panel && this._.panel.hide( returnFocus ); - } - } - }); - - function sortItems( items ) { - items.sort( function( itemA, itemB ) { - if ( itemA.group < itemB.group ) - return -1; - else if ( itemA.group > itemB.group ) - return 1; - - return itemA.order < itemB.order ? -1 : itemA.order > itemB.order ? 1 : 0; - }); - } - - /** - * @class - * @todo - */ - CKEDITOR.menuItem = CKEDITOR.tools.createClass({ - $: function( editor, name, definition ) { - CKEDITOR.tools.extend( this, definition, - // Defaults - { - order: 0, - className: 'cke_menubutton__' + name - }); - - // Transform the group name into its order number. - this.group = editor._.menuGroups[ this.group ]; - - this.editor = editor; - this.name = name; - }, - - proto: { - render: function( menu, index, output ) { - var id = menu.id + String( index ), - state = ( typeof this.state == 'undefined' ) ? CKEDITOR.TRISTATE_OFF : this.state; - - var stateName = state == CKEDITOR.TRISTATE_ON ? 'on' : state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : 'off'; - - var hasSubMenu = this.getItems; - // ltr: BLACK LEFT-POINTING POINTER - // rtl: BLACK RIGHT-POINTING POINTER - var arrowLabel = '&#' + ( this.editor.lang.dir == 'rtl' ? '9668' : '9658' ) + ';'; - - var iconName = this.name; - if ( this.icon && !( /\./ ).test( this.icon ) ) - iconName = this.icon; - - var params = { - id: id, - name: this.name, - iconName: iconName, - label: this.label, - cls: this.className || '', - state: stateName, - hasPopup: hasSubMenu ? 'true' : 'false', - disabled: state == CKEDITOR.TRISTATE_DISABLED, - title: this.label, - href: 'javascript:void(\'' + ( this.label || '' ).replace( "'" + '' ) + '\')', - hoverFn: menu._.itemOverFn, - moveOutFn: menu._.itemOutFn, - clickFn: menu._.itemClickFn, - index: index, - iconStyle: CKEDITOR.skin.getIconStyle( iconName, ( this.editor.lang.dir == 'rtl' ), iconName == this.icon ? null : this.icon, this.iconOffset ), - arrowHtml: hasSubMenu ? menuArrowTpl.output({ label: arrowLabel } ) : '' - }; - - menuItemTpl.output( params, output ); - } - } - }); - -})(); - - -/** - * The amount of time, in milliseconds, the editor waits before displaying submenu - * options when moving the mouse over options that contain submenus, like the - * "Cell Properties" entry for tables. - * - * // Remove the submenu delay. - * config.menu_subMenuDelay = 0; - * - * @cfg {Number} [menu_subMenuDelay=400] - * @member CKEDITOR.config - */ - -/** - * Fired when a menu is shown. - * - * @event menuShow - * @member CKEDITOR.editor - * @param {CKEDITOR.editor} editor This editor instance. - * @param {CKEDITOR.ui.panel[]} data - */ - -/** - * A comma separated list of items group names to be displayed in the context - * menu. The order of items will reflect the order specified in this list if - * no priority was defined in the groups. - * - * config.menu_groups = 'clipboard,table,anchor,link,image'; - * - * @cfg {String} [menu_groups=see source] - * @member CKEDITOR.config - */ -CKEDITOR.config.menu_groups = 'clipboard,' + - 'form,' + - 'tablecell,tablecellproperties,tablerow,tablecolumn,table,' + - 'anchor,link,image,flash,' + - 'checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div'; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'contextmenu', { - requires: 'menu', - - // Make sure the base class (CKEDITOR.menu) is loaded before it (#3318). - onLoad: function() { - CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass({ - base: CKEDITOR.menu, - - $: function( editor ) { - this.base.call( this, editor, { - panel: { - className: 'cke_menu_panel', - attributes: { - 'aria-label': editor.lang.contextmenu.options - } - } - }); - }, - - proto: { - addTarget: function( element, nativeContextMenuOnCtrl ) { - // Opera doesn't support 'contextmenu' event, we have duo approaches employed here: - // 1. Inherit the 'button override' hack we introduced in v2 (#4530), while this require the Opera browser - // option 'Allow script to detect context menu/right click events' to be always turned on. - // 2. Considering the fact that ctrl/meta key is not been occupied - // for multiple range selecting (like Gecko), we use this key - // combination as a fallback for triggering context-menu. (#4530) - if ( CKEDITOR.env.opera && !( 'oncontextmenu' in document.body ) ) { - var contextMenuOverrideButton; - element.on( 'mousedown', function( evt ) { - evt = evt.data; - if ( evt.$.button != 2 ) { - if ( evt.getKeystroke() == CKEDITOR.CTRL + 1 ) - element.fire( 'contextmenu', evt ); - return; - } - - if ( nativeContextMenuOnCtrl && ( CKEDITOR.env.mac ? evt.$.metaKey : evt.$.ctrlKey ) ) - return; - - var target = evt.getTarget(); - - if ( !contextMenuOverrideButton ) { - var ownerDoc = target.getDocument(); - contextMenuOverrideButton = ownerDoc.createElement( 'input' ); - contextMenuOverrideButton.$.type = 'button'; - ownerDoc.getBody().append( contextMenuOverrideButton ); - } - - contextMenuOverrideButton.setAttribute( 'style', 'position:absolute;top:' + ( evt.$.clientY - 2 ) + - 'px;left:' + ( evt.$.clientX - 2 ) + - 'px;width:5px;height:5px;opacity:0.01' ); - - }); - - element.on( 'mouseup', function( evt ) { - if ( contextMenuOverrideButton ) { - contextMenuOverrideButton.remove(); - contextMenuOverrideButton = undefined; - // Simulate 'contextmenu' event. - element.fire( 'contextmenu', evt.data ); - } - }); - } - - element.on( 'contextmenu', function( event ) { - var domEvent = event.data; - - if ( nativeContextMenuOnCtrl && - // Safari on Windows always show 'ctrlKey' as true in 'contextmenu' event, - // which make this property unreliable. (#4826) - ( CKEDITOR.env.webkit ? holdCtrlKey : ( CKEDITOR.env.mac ? domEvent.$.metaKey : domEvent.$.ctrlKey ) ) ) - return; - - - // Cancel the browser context menu. - domEvent.preventDefault(); - - var doc = domEvent.getTarget().getDocument(), - offsetParent = domEvent.getTarget().getDocument().getDocumentElement(), - fromFrame = !doc.equals( CKEDITOR.document ), - scroll = doc.getWindow().getScrollPosition(), - offsetX = fromFrame ? domEvent.$.clientX : domEvent.$.pageX || scroll.x + domEvent.$.clientX, - offsetY = fromFrame ? domEvent.$.clientY : domEvent.$.pageY || scroll.y + domEvent.$.clientY; - - CKEDITOR.tools.setTimeout( function() { - this.open( offsetParent, null, offsetX, offsetY ); - - // IE needs a short while to allow selection change before opening menu. (#7908) - }, CKEDITOR.env.ie ? 200 : 0, this ); - }, this ); - - if ( CKEDITOR.env.opera ) { - // 'contextmenu' event triggered by Windows menu key is unpreventable, - // cancel the key event itself. (#6534) - element.on( 'keypress', function( evt ) { - var domEvent = evt.data; - - if ( domEvent.$.keyCode === 0 ) - domEvent.preventDefault(); - }); - } - - if ( CKEDITOR.env.webkit ) { - var holdCtrlKey, - onKeyDown = function( event ) { - holdCtrlKey = CKEDITOR.env.mac ? event.data.$.metaKey : event.data.$.ctrlKey; - }, - resetOnKeyUp = function() { - holdCtrlKey = 0; - }; - - element.on( 'keydown', onKeyDown ); - element.on( 'keyup', resetOnKeyUp ); - element.on( 'contextmenu', resetOnKeyUp ); - } - }, - - open: function( offsetParent, corner, offsetX, offsetY ) { - this.editor.focus(); - offsetParent = offsetParent || CKEDITOR.document.getDocumentElement(); - - // #9362: Force selection check to update commands' states in the new context. - this.editor.selectionChange( 1 ); - - this.show( offsetParent, corner, offsetX, offsetY ); - } - } - }); - }, - - beforeInit: function( editor ) { - var contextMenu = editor.contextMenu = new CKEDITOR.plugins.contextMenu( editor ); - - editor.on( 'contentDom', function() { - contextMenu.addTarget( editor.editable(), editor.config.browserContextMenuOnCtrl !== false ); - }); - - editor.addCommand( 'contextMenu', { - exec: function() { - editor.contextMenu.open( editor.document.getBody() ); - } - }); - - editor.setKeystroke( CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ); - editor.setKeystroke( CKEDITOR.CTRL + CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ); - } -}); - -/** - * Whether to show the browser native context menu when the *Ctrl* or - * *Meta* (Mac) key is pressed on opening the context menu with the - * right mouse button click or the *Menu* key. - * - * config.browserContextMenuOnCtrl = false; - * - * @since 3.0.2 - * @cfg {Boolean} [browserContextMenuOnCtrl=true] - * @member CKEDITOR.config - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview The "div" plugin. It wraps the selected block level elements with a 'div' element with specified styles and attributes. - * - */ - -(function() { - CKEDITOR.plugins.add( 'div', { - requires: 'dialog', - init: function( editor ) { - if ( editor.blockless ) - return; - - var lang = editor.lang.div, - allowed = 'div(*)'; - - if ( CKEDITOR.dialog.isTabEnabled( editor, 'editdiv', 'advanced' ) ) - allowed += ';div[dir,id,lang,title]{*}'; - - editor.addCommand( 'creatediv', new CKEDITOR.dialogCommand( 'creatediv', { - allowedContent: allowed, - requiredContent: 'div', - contextSensitive: true, - refresh: function( editor, path ) { - var context = editor.config.div_wrapTable ? path.root : path.blockLimit; - this.setState( 'div' in context.getDtd() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); - } - })); - - editor.addCommand( 'editdiv', new CKEDITOR.dialogCommand( 'editdiv', { requiredContent: 'div' } ) ); - editor.addCommand( 'removediv', { - requiredContent: 'div', - exec: function( editor ) { - var selection = editor.getSelection(), - ranges = selection && selection.getRanges(), - range, - bookmarks = selection.createBookmarks(), - walker, - toRemove = []; - - function findDiv( node ) { - var div = CKEDITOR.plugins.div.getSurroundDiv( editor, node ); - if ( div && !div.data( 'cke-div-added' ) ) { - toRemove.push( div ); - div.data( 'cke-div-added' ); - } - } - - for ( var i = 0; i < ranges.length; i++ ) { - range = ranges[ i ]; - if ( range.collapsed ) - findDiv( selection.getStartElement() ); - else { - walker = new CKEDITOR.dom.walker( range ); - walker.evaluator = findDiv; - walker.lastForward(); - } - } - - for ( i = 0; i < toRemove.length; i++ ) - toRemove[ i ].remove( true ); - - selection.selectBookmarks( bookmarks ); - } - }); - - editor.ui.addButton && editor.ui.addButton( 'CreateDiv', { - label: lang.toolbar, - command: 'creatediv', - toolbar: 'blocks,50' - }); - - if ( editor.addMenuItems ) { - editor.addMenuItems({ - editdiv: { - label: lang.edit, - command: 'editdiv', - group: 'div', - order: 1 - }, - - removediv: { - label: lang.remove, - command: 'removediv', - group: 'div', - order: 5 - } - }); - - if ( editor.contextMenu ) { - editor.contextMenu.addListener( function( element ) { - if ( !element || element.isReadOnly() ) - return null; - - - if ( CKEDITOR.plugins.div.getSurroundDiv( editor ) ) { - return { - editdiv: CKEDITOR.TRISTATE_OFF, - removediv: CKEDITOR.TRISTATE_OFF - }; - } - - return null; - }); - } - } - - CKEDITOR.dialog.add( 'creatediv', this.path + 'dialogs/div.js' ); - CKEDITOR.dialog.add( 'editdiv', this.path + 'dialogs/div.js' ); - } - }); - - CKEDITOR.plugins.div = { - getSurroundDiv: function( editor, start ) { - var path = editor.elementPath( start ); - return editor.elementPath( path.blockLimit ).contains( 'div', 1 ); - } - }; -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'resize', { - init: function( editor ) { - var config = editor.config; - var spaceId = editor.ui.spaceId( 'resizer' ); - - // Resize in the same direction of chrome, - // which is identical to dir of editor element. (#6614) - var resizeDir = editor.element ? editor.element.getDirection( 1 ) : 'ltr'; - - !config.resize_dir && ( config.resize_dir = 'vertical' ); - ( config.resize_maxWidth == undefined ) && ( config.resize_maxWidth = 3000 ); - ( config.resize_maxHeight == undefined ) && ( config.resize_maxHeight = 3000 ); - ( config.resize_minWidth == undefined ) && ( config.resize_minWidth = 750 ); - ( config.resize_minHeight == undefined ) && ( config.resize_minHeight = 250 ); - - if ( config.resize_enabled !== false ) { - var container = null, - origin, startSize, - resizeHorizontal = ( config.resize_dir == 'both' || config.resize_dir == 'horizontal' ) && ( config.resize_minWidth != config.resize_maxWidth ), - resizeVertical = ( config.resize_dir == 'both' || config.resize_dir == 'vertical' ) && ( config.resize_minHeight != config.resize_maxHeight ); - - function dragHandler( evt ) { - var dx = evt.data.$.screenX - origin.x, - dy = evt.data.$.screenY - origin.y, - width = startSize.width, - height = startSize.height, - internalWidth = width + dx * ( resizeDir == 'rtl' ? -1 : 1 ), - internalHeight = height + dy; - - if ( resizeHorizontal ) - width = Math.max( config.resize_minWidth, Math.min( internalWidth, config.resize_maxWidth ) ); - - if ( resizeVertical ) - height = Math.max( config.resize_minHeight, Math.min( internalHeight, config.resize_maxHeight ) ); - - // DO NOT impose fixed size with single direction resize. (#6308) - editor.resize( resizeHorizontal ? width : null, height ); - } - - function dragEndHandler( evt ) { - CKEDITOR.document.removeListener( 'mousemove', dragHandler ); - CKEDITOR.document.removeListener( 'mouseup', dragEndHandler ); - - if ( editor.document ) { - editor.document.removeListener( 'mousemove', dragHandler ); - editor.document.removeListener( 'mouseup', dragEndHandler ); - } - } - - var mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) { - if ( !container ) - container = editor.getResizable(); - - startSize = { width: container.$.offsetWidth || 0, height: container.$.offsetHeight || 0 }; - origin = { x: $event.screenX, y: $event.screenY }; - - config.resize_minWidth > startSize.width && ( config.resize_minWidth = startSize.width ); - config.resize_minHeight > startSize.height && ( config.resize_minHeight = startSize.height ); - - CKEDITOR.document.on( 'mousemove', dragHandler ); - CKEDITOR.document.on( 'mouseup', dragEndHandler ); - - if ( editor.document ) { - editor.document.on( 'mousemove', dragHandler ); - editor.document.on( 'mouseup', dragEndHandler ); - } - - $event.preventDefault && $event.preventDefault(); - }); - - editor.on( 'destroy', function() { - CKEDITOR.tools.removeFunction( mouseDownFn ); - }); - - editor.on( 'uiSpace', function( event ) { - if ( event.data.space == 'bottom' ) { - var direction = ''; - if ( resizeHorizontal && !resizeVertical ) - direction = ' cke_resizer_horizontal'; - if ( !resizeHorizontal && resizeVertical ) - direction = ' cke_resizer_vertical'; - - var resizerHtml = - '' + - // BLACK LOWER RIGHT TRIANGLE (ltr) - // BLACK LOWER LEFT TRIANGLE (rtl) - ( resizeDir == 'ltr' ? '\u25E2' : '\u25E3' ) + - ''; - - // Always sticks the corner of botttom space. - resizeDir == 'ltr' && direction == 'ltr' ? event.data.html += resizerHtml : event.data.html = resizerHtml + event.data.html; - } - }, editor, null, 100 ); - - // Toggle the visibility of the resizer when an editor is being maximized or minimized. - editor.on( 'maximize', function( event ) { - editor.ui.space( 'resizer' )[ event.data == CKEDITOR.TRISTATE_ON ? 'hide' : 'show' ](); - }); - } - } -}); - -/** - * The minimum editor width, in pixels, when resizing the editor interface by using the resize handle. - * Note: It falls back to editor's actual width if it is smaller than the default value. - * - * config.resize_minWidth = 500; - * - * @cfg {Number} [resize_minWidth=750] - * @member CKEDITOR.config - */ - -/** - * The minimum editor height, in pixels, when resizing the editor interface by using the resize handle. - * Note: It falls back to editor's actual height if it is smaller than the default value. - * - * config.resize_minHeight = 600; - * - * @cfg {Number} [resize_minHeight=250] - * @member CKEDITOR.config - */ - -/** - * The maximum editor width, in pixels, when resizing the editor interface by using the resize handle. - * - * config.resize_maxWidth = 750; - * - * @cfg {Number} [resize_maxWidth=3000] - * @member CKEDITOR.config - */ - -/** - * The maximum editor height, in pixels, when resizing the editor interface by using the resize handle. - * - * config.resize_maxHeight = 600; - * - * @cfg {Number} [resize_maxHeight=3000] - * @member CKEDITOR.config - */ - -/** - * Whether to enable the resizing feature. If this feature is disabled, the resize handle will not be visible. - * - * config.resize_enabled = false; - * - * @cfg {Boolean} [resize_enabled=true] - * @member CKEDITOR.config - */ - -/** - * The dimensions for which the editor resizing is enabled. Possible values - * are `both`, `vertical`, and `horizontal`. - * - * config.resize_dir = 'both'; - * - * @since 3.3 - * @cfg {String} [resize_dir='vertical'] - * @member CKEDITOR.config - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview The "toolbar" plugin. Renders the default toolbar interface in - * the editor. - */ - -(function() { - var toolbox = function() { - this.toolbars = []; - this.focusCommandExecuted = false; - }; - - toolbox.prototype.focus = function() { - for ( var t = 0, toolbar; toolbar = this.toolbars[ t++ ]; ) { - for ( var i = 0, item; item = toolbar.items[ i++ ]; ) { - if ( item.focus ) { - item.focus(); - return; - } - } - } - }; - - var commands = { - toolbarFocus: { - modes: { wysiwyg:1,source:1 }, - readOnly: 1, - - exec: function( editor ) { - if ( editor.toolbox ) { - editor.toolbox.focusCommandExecuted = true; - - // Make the first button focus accessible for IE. (#3417) - // Adobe AIR instead need while of delay. - if ( CKEDITOR.env.ie || CKEDITOR.env.air ) - setTimeout( function() { - editor.toolbox.focus(); - }, 100 ); - else - editor.toolbox.focus(); - } - } - } - }; - - CKEDITOR.plugins.add( 'toolbar', { - requires: 'button', - - init: function( editor ) { - var endFlag; - - var itemKeystroke = function( item, keystroke ) { - var next, toolbar; - var rtl = editor.lang.dir == 'rtl', - toolbarGroupCycling = editor.config.toolbarGroupCycling; - - toolbarGroupCycling = toolbarGroupCycling === undefined || toolbarGroupCycling; - - switch ( keystroke ) { - case 9: // TAB - case CKEDITOR.SHIFT + 9: // SHIFT + TAB - // Cycle through the toolbars, starting from the one - // closest to the current item. - while ( !toolbar || !toolbar.items.length ) { - toolbar = keystroke == 9 ? ( ( toolbar ? toolbar.next : item.toolbar.next ) || editor.toolbox.toolbars[ 0 ] ) : ( ( toolbar ? toolbar.previous : item.toolbar.previous ) || editor.toolbox.toolbars[ editor.toolbox.toolbars.length - 1 ] ); - - // Look for the first item that accepts focus. - if ( toolbar.items.length ) { - item = toolbar.items[ endFlag ? ( toolbar.items.length - 1 ) : 0 ]; - while ( item && !item.focus ) { - item = endFlag ? item.previous : item.next; - - if ( !item ) - toolbar = 0; - } - } - } - - if ( item ) - item.focus(); - - return false; - - case rtl ? 37: - 39 : // RIGHT-ARROW - case 40: // DOWN-ARROW - next = item; - do { - // Look for the next item in the toolbar. - next = next.next; - - // If it's the last item, cycle to the first one. - if ( !next && toolbarGroupCycling ) next = item.toolbar.items[ 0 ]; - } - while ( next && !next.focus ) - - // If available, just focus it, otherwise focus the - // first one. - if ( next ) - next.focus(); - else - // Send a TAB. - itemKeystroke( item, 9 ); - - return false; - - case rtl ? 39: - 37 : // LEFT-ARROW - case 38: // UP-ARROW - next = item; - do { - // Look for the previous item in the toolbar. - next = next.previous; - - // If it's the first item, cycle to the last one. - if ( !next && toolbarGroupCycling ) next = item.toolbar.items[ item.toolbar.items.length - 1 ]; - } - while ( next && !next.focus ) - - // If available, just focus it, otherwise focus the - // last one. - if ( next ) - next.focus(); - else { - endFlag = 1; - // Send a SHIFT + TAB. - itemKeystroke( item, CKEDITOR.SHIFT + 9 ); - endFlag = 0; - } - - return false; - - case 27: // ESC - editor.focus(); - return false; - - case 13: // ENTER - case 32: // SPACE - item.execute(); - return false; - } - return true; - }; - - editor.on( 'uiSpace', function( event ) { - if ( event.data.space != editor.config.toolbarLocation ) - return; - - // Create toolbar only once. - event.removeListener(); - - editor.toolbox = new toolbox(); - - var labelId = CKEDITOR.tools.getNextId(); - - var output = [ - '', editor.lang.toolbar.toolbars, '', - '' ]; - - var expanded = editor.config.toolbarStartupExpanded !== false, - groupStarted, pendingSeparator; - - // If the toolbar collapser will be available, we'll have - // an additional container for all toolbars. - if ( editor.config.toolbarCanCollapse && editor.elementMode != CKEDITOR.ELEMENT_MODE_INLINE ) - output.push( '' : ' style="display:none">' ) ); - - var toolbars = editor.toolbox.toolbars, - toolbar = getToolbarConfig( editor ); - - for ( var r = 0; r < toolbar.length; r++ ) { - var toolbarId, - toolbarObj = 0, - toolbarName, - row = toolbar[ r ], - items; - - // It's better to check if the row object is really - // available because it's a common mistake to leave - // an extra comma in the toolbar definition - // settings, which leads on the editor not loading - // at all in IE. (#3983) - if ( !row ) - continue; - - if ( groupStarted ) { - output.push( '' ); - groupStarted = 0; - pendingSeparator = 0; - } - - if ( row === '/' ) { - output.push( '' ); - continue; - } - - items = row.items || row; - - // Create all items defined for this toolbar. - for ( var i = 0; i < items.length; i++ ) { - var item = items[ i ], - canGroup; - - if ( item ) { - if ( item.type == CKEDITOR.UI_SEPARATOR ) { - // Do not add the separator immediately. Just save - // it be included if we already have something in - // the toolbar and if a new item is to be added (later). - pendingSeparator = groupStarted && item; - continue; - } - - canGroup = item.canGroup !== false; - - // Initialize the toolbar first, if needed. - if ( !toolbarObj ) { - // Create the basic toolbar object. - toolbarId = CKEDITOR.tools.getNextId(); - toolbarObj = { id: toolbarId, items: [] }; - toolbarName = row.name && ( editor.lang.toolbar.toolbarGroups[ row.name ] || row.name ); - - // Output the toolbar opener. - output.push( '' ); - - // If a toolbar name is available, send the voice label. - toolbarName && output.push( '', toolbarName, '' ); - - output.push( '' ); - - // Add the toolbar to the "editor.toolbox.toolbars" - // array. - var index = toolbars.push( toolbarObj ) - 1; - - // Create the next/previous reference. - if ( index > 0 ) { - toolbarObj.previous = toolbars[ index - 1 ]; - toolbarObj.previous.next = toolbarObj; - } - } - - if ( canGroup ) { - if ( !groupStarted ) { - output.push( '' ); - groupStarted = 1; - } - } else if ( groupStarted ) { - output.push( '' ); - groupStarted = 0; - } - - function addItem( item ) { - var itemObj = item.render( editor, output ); - index = toolbarObj.items.push( itemObj ) - 1; - - if ( index > 0 ) { - itemObj.previous = toolbarObj.items[ index - 1 ]; - itemObj.previous.next = itemObj; - } - - itemObj.toolbar = toolbarObj; - itemObj.onkey = itemKeystroke; - - // Fix for #3052: - // Prevent JAWS from focusing the toolbar after document load. - itemObj.onfocus = function() { - if ( !editor.toolbox.focusCommandExecuted ) - editor.focus(); - }; - } - - if ( pendingSeparator ) { - addItem( pendingSeparator ); - pendingSeparator = 0; - } - - addItem( item ); - } - } - - if ( groupStarted ) { - output.push( '' ); - groupStarted = 0; - pendingSeparator = 0; - } - - if ( toolbarObj ) - output.push( '' ); - } - - if ( editor.config.toolbarCanCollapse ) - output.push( '' ); - - // Not toolbar collapser for inline mode. - if ( editor.config.toolbarCanCollapse && editor.elementMode != CKEDITOR.ELEMENT_MODE_INLINE ) { - var collapserFn = CKEDITOR.tools.addFunction( function() { - editor.execCommand( 'toolbarCollapse' ); - }); - - editor.on( 'destroy', function() { - CKEDITOR.tools.removeFunction( collapserFn ); - }); - - editor.addCommand( 'toolbarCollapse', { - readOnly: 1, - exec: function( editor ) { - var collapser = editor.ui.space( 'toolbar_collapser' ), - toolbox = collapser.getPrevious(), - contents = editor.ui.space( 'contents' ), - toolboxContainer = toolbox.getParent(), - contentHeight = parseInt( contents.$.style.height, 10 ), - previousHeight = toolboxContainer.$.offsetHeight, - minClass = 'cke_toolbox_collapser_min', - collapsed = collapser.hasClass( minClass ); - - if ( !collapsed ) { - toolbox.hide(); - collapser.addClass( minClass ); - collapser.setAttribute( 'title', editor.lang.toolbar.toolbarExpand ); - } else { - toolbox.show(); - collapser.removeClass( minClass ); - collapser.setAttribute( 'title', editor.lang.toolbar.toolbarCollapse ); - } - - // Update collapser symbol. - collapser.getFirst().setText( collapsed ? '\u25B2' : // BLACK UP-POINTING TRIANGLE - '\u25C0' ); // BLACK LEFT-POINTING TRIANGLE - - var dy = toolboxContainer.$.offsetHeight - previousHeight; - contents.setStyle( 'height', ( contentHeight - dy ) + 'px' ); - - editor.fire( 'resize' ); - }, - - modes: { wysiwyg:1,source:1 } - }); - - editor.setKeystroke( CKEDITOR.ALT + ( CKEDITOR.env.ie || CKEDITOR.env.webkit ? 189 : 109 ) /*-*/, 'toolbarCollapse' ); - - output.push( '', '', // BLACK UP-POINTING TRIANGLE - '' ); - } - - output.push( '' ); - event.data.html += output.join( '' ); - }); - - editor.on( 'destroy', function() { - - if ( this.toolbox ) - { - var toolbars, - index = 0, - i, items, instance; - toolbars = this.toolbox.toolbars; - for ( ; index < toolbars.length; index++ ) { - items = toolbars[ index ].items; - for ( i = 0; i < items.length; i++ ) { - instance = items[ i ]; - if ( instance.clickFn ) - CKEDITOR.tools.removeFunction( instance.clickFn ); - if ( instance.keyDownFn ) - CKEDITOR.tools.removeFunction( instance.keyDownFn ); - } - } - } - }); - - // Manage editor focus when navigating the toolbar. - editor.on( 'uiReady', function() { - var toolbox = editor.ui.space( 'toolbox' ); - toolbox && editor.focusManager.add( toolbox, 1 ); - }); - - editor.addCommand( 'toolbarFocus', commands.toolbarFocus ); - editor.setKeystroke( CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ); - - editor.ui.add( '-', CKEDITOR.UI_SEPARATOR, {} ); - editor.ui.addHandler( CKEDITOR.UI_SEPARATOR, { - create: function() { - return { - render: function( editor, output ) { - output.push( '' ); - return {}; - } - }; - } - }); - } - }); - - function getToolbarConfig( editor ) { - var removeButtons = editor.config.removeButtons; - - removeButtons = removeButtons && removeButtons.split( ',' ); - - function buildToolbarConfig() { - - // Object containing all toolbar groups used by ui items. - var lookup = getItemDefinedGroups(); - - // Take the base for the new toolbar, which is basically a toolbar - // definition without items. - var toolbar = CKEDITOR.tools.clone( editor.config.toolbarGroups ) || getPrivateToolbarGroups( editor ); - - // Fill the toolbar groups with the available ui items. - for ( var i = 0; i < toolbar.length; i++ ) { - var toolbarGroup = toolbar[ i ]; - - // Skip toolbar break. - if ( toolbarGroup == '/' ) - continue; - // Handle simply group name item. - else if ( typeof toolbarGroup == 'string' ) - toolbarGroup = toolbar[ i ] = { name: toolbarGroup }; - - var items, subGroups = toolbarGroup.groups; - - // Look for items that match sub groups. - if ( subGroups ) { - for ( var j = 0, sub; j < subGroups.length; j++ ) { - sub = subGroups[ j ]; - - // If any ui item is registered for this subgroup. - items = lookup[ sub ]; - items && fillGroup( toolbarGroup, items ); - } - } - - // Add the main group items as well. - items = lookup[ toolbarGroup.name ]; - items && fillGroup( toolbarGroup, items ); - } - - return toolbar; - } - - // Returns an object containing all toolbar groups used by ui items. - function getItemDefinedGroups() { - var groups = {}, - itemName, item, itemToolbar, group, order; - - for ( itemName in editor.ui.items ) { - item = editor.ui.items[ itemName ]; - itemToolbar = item.toolbar || 'others'; - if ( itemToolbar ) { - // Break the toolbar property into its parts: "group_name[,order]". - itemToolbar = itemToolbar.split( ',' ); - group = itemToolbar[ 0 ]; - order = parseInt( itemToolbar[ 1 ] || -1, 10 ); - - // Initialize the group, if necessary. - groups[ group ] || ( groups[ group ] = [] ); - - // Push the data used to build the toolbar later. - groups[ group ].push( { name: itemName, order: order} ); - } - } - - // Put the items in the right order. - for ( group in groups ) { - groups[ group ] = groups[ group ].sort( function( a, b ) { - return a.order == b.order ? 0 : - b.order < 0 ? -1 : - a.order < 0 ? 1 : - a.order < b.order ? -1 : - 1; - }); - } - - return groups; - } - - function fillGroup( toolbarGroup, uiItems ) { - if ( uiItems.length ) { - if ( toolbarGroup.items ) - toolbarGroup.items.push( editor.ui.create( '-' ) ); - else - toolbarGroup.items = []; - - var item, name; - while ( ( item = uiItems.shift() ) ) { - name = typeof item == 'string' ? item : item.name; - - // Ignore items that are configured to be removed. - if ( !removeButtons || CKEDITOR.tools.indexOf( removeButtons, name ) == -1 ) { - item = editor.ui.create( name ); - - if ( !item ) - continue; - - if ( !editor.addFeature( item ) ) - continue; - - toolbarGroup.items.push( item ); - } - } - } - } - - function populateToolbarConfig( config ) { - var toolbar = [], - i, group, newGroup; - - for ( i = 0; i < config.length; ++i ) { - group = config[ i ]; - newGroup = {}; - - if ( group == '/' ) - toolbar.push( group ); - else if ( CKEDITOR.tools.isArray( group) ) { - fillGroup( newGroup, CKEDITOR.tools.clone( group ) ); - toolbar.push( newGroup ); - } - else if ( group.items ) { - fillGroup( newGroup, CKEDITOR.tools.clone( group.items ) ); - newGroup.name = group.name; - toolbar.push( newGroup); - } - } - - return toolbar; - } - - var toolbar = editor.config.toolbar; - - // If it is a string, return the relative "toolbar_name" config. - if ( typeof toolbar == 'string' ) - toolbar = editor.config[ 'toolbar_' + toolbar ]; - - return ( editor.toolbar = toolbar ? populateToolbarConfig( toolbar ) : buildToolbarConfig() ); - } - - /** - * Add toolbar group. See {@link CKEDITOR.config#toolbarGroups} for more details. - * - * **Note:** This method won't modify toolbar groups set explicitly by - * {@link CKEDITOR.config#toolbarGroups}. It will extend only default setting. - * - * @param {String} name Group name. - * @param {Number/String} previous Name of group after which this one - * should be added or `0` if this group should be the first one. - * @param {String} [subgroupOf] Name of parent group. - * @member CKEDITOR.ui - */ - CKEDITOR.ui.prototype.addToolbarGroup = function( name, previous, subgroupOf ) { - // The toolbarGroups from the privates is the one we gonna use for automatic toolbar creation. - var toolbarGroups = getPrivateToolbarGroups( this.editor ), - atStart = previous === 0, - newGroup = { name: name }; - - if ( subgroupOf ) { - // Transform the subgroupOf name in the real subgroup object. - subgroupOf = CKEDITOR.tools.search( toolbarGroups, function( group ) { - return group.name == subgroupOf; - }); - - if ( subgroupOf ) { - !subgroupOf.groups && ( subgroupOf.groups = [] ) ; - - if ( previous ) { - // Search the "previous" item and add the new one after it. - previous = CKEDITOR.tools.indexOf( subgroupOf.groups, previous ); - if ( previous >= 0 ) { - subgroupOf.groups.splice( previous + 1, 0, name ); - return; - } - } - - // If no previous found. - - if ( atStart ) - subgroupOf.groups.splice( 0, 0, name ); - else - subgroupOf.groups.push( name ); - return; - } else { - // Ignore "previous" if subgroupOf has not been found. - previous = null; - } - } - - if ( previous ) { - // Transform the "previous" name into its index. - previous = CKEDITOR.tools.indexOf( toolbarGroups, function( group ) { - return group.name == previous; - }); - } - - if ( atStart ) - toolbarGroups.splice( 0, 0, name ); - else if ( typeof previous == 'number' ) - toolbarGroups.splice( previous + 1, 0, newGroup ); - else - toolbarGroups.push( name ); - }; - - function getPrivateToolbarGroups( editor ) { - return editor._.toolbarGroups || ( editor._.toolbarGroups = [ - { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, - { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, - { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, - { name: 'forms' }, - '/', - { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, - { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align' ] }, - { name: 'links' }, - { name: 'insert' }, - '/', - { name: 'styles' }, - { name: 'colors' }, - { name: 'tools' }, - { name: 'others' }, - { name: 'about' } - ]); - } -})(); - -/** - * Separator UI element. - * - * @readonly - * @property {String} [='separator'] - * @member CKEDITOR - */ -CKEDITOR.UI_SEPARATOR = 'separator'; - -/** - * The "UI space" to which rendering the toolbar. For the default editor implementation, - * the recommended options are `'top'` and `'bottom'`. - * - * config.toolbarLocation = 'bottom'; - * - * @cfg - * @member CKEDITOR.config - */ -CKEDITOR.config.toolbarLocation = 'top'; - -/** - * The toolbox (alias toolbar) definition. It is a toolbar name or an array of - * toolbars (strips), each one being also an array, containing a list of UI items. - * - * If set to `null`, generate toolbar automatically using all available buttons - * and {@link #toolbarGroups} as a toolbar groups layout. - * - * // Defines a toolbar with only one strip containing the "Source" button, a - * // separator and the "Bold" and "Italic" buttons. - * config.toolbar = [ - * [ 'Source', '-', 'Bold', 'Italic' ] - * ]; - * - * // Similar to example the above, defines a "Basic" toolbar with only one strip containing three buttons. - * // Note that this setting is composed by "toolbar_" added by the toolbar name, which in this case is called "Basic". - * // This second part of the setting name can be anything. You must use this name in the CKEDITOR.config.toolbar setting, - * // so you instruct the editor which toolbar_(name) setting to use. - * config.toolbar_Basic = [ - * [ 'Source', '-', 'Bold', 'Italic' ] - * ]; - * // Load toolbar_Name where Name = Basic. - * config.toolbar = 'Basic'; - * - * @cfg {Array/String} [toolbar=null] - * @member CKEDITOR.config - */ - -/** - * The toolbar groups definition. - * - * If toolbar layout isn't explicitly defined by {@link #toolbar} setting, then - * this setting is used to group all defined buttons (see {@link CKEDITOR.ui#addButton}). - * Buttons are associated with toolbar groups by `toolbar` property in their definition objects. - * - * New groups may be dynamically added during the editor and plugins initialization by - * {@link CKEDITOR.ui#addToolbarGroup}. Although only if default setting was used. - * - * // Default setting. - * config.toolbarGroups = [ - * { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, - * { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, - * { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, - * { name: 'forms' }, - * '/', - * { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, - * { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align' ] }, - * { name: 'links' }, - * { name: 'insert' }, - * '/', - * { name: 'styles' }, - * { name: 'colors' }, - * { name: 'tools' }, - * { name: 'others' }, - * { name: 'about' } - * ]; - * - * @cfg {Array} [toolbarGroups=see example] - * @member CKEDITOR.config - */ - -/** - * Whether the toolbar can be collapsed by the user. If disabled, the collapser - * button will not be displayed. - * - * config.toolbarCanCollapse = true; - * - * @cfg {Boolean} [toolbarCanCollapse=false] - * @member CKEDITOR.config - */ - -/** - * Whether the toolbar must start expanded when the editor is loaded. - * - * Setting this option to `false` will affect toolbar only when - * {@link #toolbarCanCollapse} is set to `true`: - * - * config.toolbarCanCollapse = true; - * config.toolbarStartupExpanded = false; - * - * @cfg {Boolean} [toolbarStartupExpanded=true] - * @member CKEDITOR.config - */ - -/** - * When enabled, makes the arrow keys navigation cycle within the current - * toolbar group. Otherwise the arrows will move through all items available in - * the toolbar. The *TAB* key will still be used to quickly jump among the - * toolbar groups. - * - * config.toolbarGroupCycling = false; - * - * @since 3.6 - * @cfg {Boolean} [toolbarGroupCycling=true] - * @member CKEDITOR.config - */ - -/** - * List of toolbar button names that must not be rendered. This will work as - * well for non-button toolbar items, like the Font combos. - * - * config.removeButtons = 'Underline,JustifyCenter'; - * - * This configuration should not be overused, having - * {@link CKEDITOR.config#removePlugins} removing features from the editor. In - * some cases though, a single plugin may define a set of toolbar buttons and - * removeButtons may be useful when just a few of them are to be removed. - * - * @cfg {String} [removeButtons] - * @member CKEDITOR.config - */ - -/** - * Toolbar definition used by the editor. It is crated from the - * {@link CKEDITOR.config#toolbar} if it is set or automatically - * based on {@link CKEDITOR.config#toolbarGroups}. - * - * @readonly - * @property {Object} toolbar - * @member CKEDITOR.editor - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview The "elementspath" plugin. It shows all elements in the DOM - * parent tree relative to the current selection in the editing area. - */ - -(function() { - var commands = { - toolbarFocus: { - editorFocus: false, - readOnly: 1, - exec: function( editor ) { - var idBase = editor._.elementsPath.idBase; - var element = CKEDITOR.document.getById( idBase + '0' ); - - // Make the first button focus accessible for IE. (#3417) - // Adobe AIR instead need while of delay. - element && element.focus( CKEDITOR.env.ie || CKEDITOR.env.air ); - } - } - }; - - var emptyHtml = ' '; - - var extra = ''; - - // Some browsers don't cancel key events in the keydown but in the - // keypress. - // TODO: Check if really needed for Gecko+Mac. - if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) ) - extra += ' onkeypress="return false;"'; - - // With Firefox, we need to force the button to redraw, otherwise it - // will remain in the focus state. - if ( CKEDITOR.env.gecko ) - extra += ' onblur="this.style.cssText = this.style.cssText;"'; - - var pathItemTpl = CKEDITOR.addTemplate( 'pathItem', '' + - '{text}' + - '' ); - - CKEDITOR.plugins.add( 'elementspath', { - init: function( editor ) { - editor.on( 'uiSpace', function( event ) { - if ( event.data.space == 'bottom' ) - initElementsPath( editor, event.data ); - } ); - } - } ); - - function initElementsPath( editor, bottomSpaceData ) { - var spaceId = editor.ui.spaceId( 'path' ); - var spaceElement; - var getSpaceElement = function() { - if ( !spaceElement ) - spaceElement = CKEDITOR.document.getById( spaceId ); - return spaceElement; - }; - - var idBase = 'cke_elementspath_' + CKEDITOR.tools.getNextNumber() + '_'; - - editor._.elementsPath = { idBase: idBase, filters: [] }; - - bottomSpaceData.html += '' + editor.lang.elementspath.eleLabel + '' + - '' + emptyHtml + ''; - - // Register the ui element to the focus manager. - editor.on( 'uiReady', function() { - var element = editor.ui.space( 'path' ); - element && editor.focusManager.add( element, 1 ); - } ); - - function onClick( elementIndex ) { - var element = editor._.elementsPath.list[ elementIndex ]; - if ( element.equals( editor.editable() ) ) { - var range = editor.createRange(); - range.selectNodeContents( element ); - range.select(); - } else - editor.getSelection().selectElement( element ); - - // It is important to focus() *after* the above selection - // manipulation, otherwise Firefox will have troubles. #10119 - editor.focus(); - } - - var onClickHanlder = CKEDITOR.tools.addFunction( onClick ); - - var onKeyDownHandler = CKEDITOR.tools.addFunction( function( elementIndex, ev ) { - var idBase = editor._.elementsPath.idBase, - element; - - ev = new CKEDITOR.dom.event( ev ); - - var rtl = editor.lang.dir == 'rtl'; - switch ( ev.getKeystroke() ) { - case rtl ? 39: - 37 : // LEFT-ARROW - case 9: // TAB - element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) ); - if ( !element ) - element = CKEDITOR.document.getById( idBase + '0' ); - element.focus(); - return false; - - case rtl ? 37: - 39 : // RIGHT-ARROW - case CKEDITOR.SHIFT + 9: // SHIFT + TAB - element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) ); - if ( !element ) - element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) ); - element.focus(); - return false; - - case 27: // ESC - editor.focus(); - return false; - - case 13: // ENTER // Opera - case 32: // SPACE - onClick( elementIndex ); - return false; - } - return true; - } ); - - editor.on( 'selectionChange', function( ev ) { - var env = CKEDITOR.env, - editable = editor.editable(), - selection = ev.data.selection, - element = selection.getStartElement(), - html = [], - elementsList = editor._.elementsPath.list = [], - filters = editor._.elementsPath.filters; - - while ( element ) { - var ignore = 0, - name; - - if ( element.data( 'cke-display-name' ) ) - name = element.data( 'cke-display-name' ); - else if ( element.data( 'cke-real-element-type' ) ) - name = element.data( 'cke-real-element-type' ); - else - name = element.getName(); - - for ( var i = 0; i < filters.length; i++ ) { - var ret = filters[ i ]( element, name ); - if ( ret === false ) { - ignore = 1; - break; - } - name = ret || name; - } - - if ( !ignore ) { - var index = elementsList.push( element ) - 1, - label = editor.lang.elementspath.eleTitle.replace( /%1/, name ); - - var item = pathItemTpl.output({ - id: idBase + index, - label: label, - text: name, - jsTitle: 'javascript:void(\'' + name + '\')', - index: index, - keyDownFn: onKeyDownHandler, - clickFn: onClickHanlder - } ); - html.unshift( item ); - - } - - if ( element.equals( editable ) ) - break; - - element = element.getParent(); - } - - var space = getSpaceElement(); - space.setHtml( html.join( '' ) + emptyHtml ); - editor.fire( 'elementsPathUpdate', { space: space } ); - } ); - - function empty() { - spaceElement && spaceElement.setHtml( emptyHtml ); - delete editor._.elementsPath.list; - } - - editor.on( 'readOnly', empty ); - editor.on( 'contentDomUnload', empty ); - - editor.addCommand( 'elementsPathFocus', commands.toolbarFocus ); - editor.setKeystroke( CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ); - } -})(); - -/** - * Fired when the contents of the elementsPath are changed. - * - * @event elementsPathUpdate - * @member CKEDITOR.editor - * @param {CKEDITOR.editor} editor This editor instance. - * @param data - * @param {CKEDITOR.dom.element} data.space The elementsPath container. - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Insert and remove numbered and bulleted lists. - */ - -(function() { - var listNodeNames = { ol:1,ul:1 }, - emptyTextRegex = /^[\n\r\t ]*$/; - - var whitespaces = CKEDITOR.dom.walker.whitespaces(), - bookmarks = CKEDITOR.dom.walker.bookmark(), - nonEmpty = function( node ) { - return !( whitespaces( node ) || bookmarks( node ) ); - }, - blockBogus = CKEDITOR.dom.walker.bogus(); - - function cleanUpDirection( element ) { - var dir, parent, parentDir; - if ( ( dir = element.getDirection() ) ) { - parent = element.getParent(); - while ( parent && !( parentDir = parent.getDirection() ) ) - parent = parent.getParent(); - - if ( dir == parentDir ) - element.removeAttribute( 'dir' ); - } - } - - // Inheirt inline styles from another element. - function inheirtInlineStyles( parent, el ) { - var style = parent.getAttribute( 'style' ); - - // Put parent styles before child styles. - style && el.setAttribute( 'style', style.replace( /([^;])$/, '$1;' ) + ( el.getAttribute( 'style' ) || '' ) ); - } - - CKEDITOR.plugins.list = { - /** - * Convert a DOM list tree into a data structure that is easier to - * manipulate. This operation should be non-intrusive in the sense that it - * does not change the DOM tree, with the exception that it may add some - * markers to the list item nodes when database is specified. - * - * @member CKEDITOR.plugins.list - * @todo params - */ - listToArray: function( listNode, database, baseArray, baseIndentLevel, grandparentNode ) { - if ( !listNodeNames[ listNode.getName() ] ) - return []; - - if ( !baseIndentLevel ) - baseIndentLevel = 0; - if ( !baseArray ) - baseArray = []; - - // Iterate over all list items to and look for inner lists. - for ( var i = 0, count = listNode.getChildCount(); i < count; i++ ) { - var listItem = listNode.getChild( i ); - - // Fixing malformed nested lists by moving it into a previous list item. (#6236) - if ( listItem.type == CKEDITOR.NODE_ELEMENT && listItem.getName() in CKEDITOR.dtd.$list ) - CKEDITOR.plugins.list.listToArray( listItem, database, baseArray, baseIndentLevel + 1 ); - - // It may be a text node or some funny stuff. - if ( listItem.$.nodeName.toLowerCase() != 'li' ) - continue; - - var itemObj = { 'parent': listNode, indent: baseIndentLevel, element: listItem, contents: [] }; - if ( !grandparentNode ) { - itemObj.grandparent = listNode.getParent(); - if ( itemObj.grandparent && itemObj.grandparent.$.nodeName.toLowerCase() == 'li' ) - itemObj.grandparent = itemObj.grandparent.getParent(); - } else - itemObj.grandparent = grandparentNode; - - if ( database ) - CKEDITOR.dom.element.setMarker( database, listItem, 'listarray_index', baseArray.length ); - baseArray.push( itemObj ); - - for ( var j = 0, itemChildCount = listItem.getChildCount(), child; j < itemChildCount; j++ ) { - child = listItem.getChild( j ); - if ( child.type == CKEDITOR.NODE_ELEMENT && listNodeNames[ child.getName() ] ) - // Note the recursion here, it pushes inner list items with - // +1 indentation in the correct order. - CKEDITOR.plugins.list.listToArray( child, database, baseArray, baseIndentLevel + 1, itemObj.grandparent ); - else - itemObj.contents.push( child ); - } - } - return baseArray; - }, - - /** - * Convert our internal representation of a list back to a DOM forest. - * - * @member CKEDITOR.plugins.list - * @todo params - */ - arrayToList: function( listArray, database, baseIndex, paragraphMode, dir ) { - if ( !baseIndex ) - baseIndex = 0; - if ( !listArray || listArray.length < baseIndex + 1 ) - return null; - var i, - doc = listArray[ baseIndex ].parent.getDocument(), - retval = new CKEDITOR.dom.documentFragment( doc ), - rootNode = null, - currentIndex = baseIndex, - indentLevel = Math.max( listArray[ baseIndex ].indent, 0 ), - currentListItem = null, - orgDir, block, - paragraphName = ( paragraphMode == CKEDITOR.ENTER_P ? 'p' : 'div' ); - while ( 1 ) { - var item = listArray[ currentIndex ], - itemGrandParent = item.grandparent; - - orgDir = item.element.getDirection( 1 ); - - if ( item.indent == indentLevel ) { - if ( !rootNode || listArray[ currentIndex ].parent.getName() != rootNode.getName() ) { - rootNode = listArray[ currentIndex ].parent.clone( false, 1 ); - dir && rootNode.setAttribute( 'dir', dir ); - retval.append( rootNode ); - } - currentListItem = rootNode.append( item.element.clone( 0, 1 ) ); - - if ( orgDir != rootNode.getDirection( 1 ) ) - currentListItem.setAttribute( 'dir', orgDir ); - - for ( i = 0; i < item.contents.length; i++ ) - currentListItem.append( item.contents[ i ].clone( 1, 1 ) ); - currentIndex++; - } else if ( item.indent == Math.max( indentLevel, 0 ) + 1 ) { - // Maintain original direction (#6861). - var currDir = listArray[ currentIndex - 1 ].element.getDirection( 1 ), - listData = CKEDITOR.plugins.list.arrayToList( listArray, null, currentIndex, paragraphMode, currDir != orgDir ? orgDir : null ); - - // If the next block is an
  • with another list tree as the first - // child, we'll need to append a filler (
    /NBSP) or the list item - // wouldn't be editable. (#6724) - if ( !currentListItem.getChildCount() && CKEDITOR.env.ie && !( doc.$.documentMode > 7 ) ) - currentListItem.append( doc.createText( '\xa0' ) ); - currentListItem.append( listData.listNode ); - currentIndex = listData.nextIndex; - } else if ( item.indent == -1 && !baseIndex && itemGrandParent ) { - if ( listNodeNames[ itemGrandParent.getName() ] ) { - currentListItem = item.element.clone( false, true ); - if ( orgDir != itemGrandParent.getDirection( 1 ) ) - currentListItem.setAttribute( 'dir', orgDir ); - } else - currentListItem = new CKEDITOR.dom.documentFragment( doc ); - - // Migrate all children to the new container, - // apply the proper text direction. - var dirLoose = itemGrandParent.getDirection( 1 ) != orgDir, - li = item.element, - className = li.getAttribute( 'class' ), - style = li.getAttribute( 'style' ); - - var needsBlock = currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && ( paragraphMode != CKEDITOR.ENTER_BR || dirLoose || style || className ); - - var child, - count = item.contents.length; - for ( i = 0; i < count; i++ ) { - child = item.contents[ i ]; - - if ( child.type == CKEDITOR.NODE_ELEMENT && child.isBlockBoundary() ) { - // Apply direction on content blocks. - if ( dirLoose && !child.getDirection() ) - child.setAttribute( 'dir', orgDir ); - - inheirtInlineStyles( li, child ); - - className && child.addClass( className ); - } else if ( needsBlock ) { - // Establish new block to hold text direction and styles. - if ( !block ) { - block = doc.createElement( paragraphName ); - dirLoose && block.setAttribute( 'dir', orgDir ); - } - - // Copy over styles to new block; - style && block.setAttribute( 'style', style ); - className && block.setAttribute( 'class', className ); - - block.append( child.clone( 1, 1 ) ); - } - - currentListItem.append( block || child.clone( 1, 1 ) ); - } - - if ( currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && currentIndex != listArray.length - 1 ) { - var last = currentListItem.getLast(); - if ( last && last.type == CKEDITOR.NODE_ELEMENT && last.getAttribute( 'type' ) == '_moz' ) { - last.remove(); - } - - if ( !( last = currentListItem.getLast( nonEmpty ) && last.type == CKEDITOR.NODE_ELEMENT && last.getName() in CKEDITOR.dtd.$block ) ) { - currentListItem.append( doc.createElement( 'br' ) ); - } - } - - var currentListItemName = currentListItem.$.nodeName.toLowerCase(); - if ( !CKEDITOR.env.ie && ( currentListItemName == 'div' || currentListItemName == 'p' ) ) - currentListItem.appendBogus(); - retval.append( currentListItem ); - rootNode = null; - currentIndex++; - } else - return null; - - block = null; - - if ( listArray.length <= currentIndex || Math.max( listArray[ currentIndex ].indent, 0 ) < indentLevel ) - break; - } - - if ( database ) { - var currentNode = retval.getFirst(), - listRoot = listArray[ 0 ].parent; - - while ( currentNode ) { - if ( currentNode.type == CKEDITOR.NODE_ELEMENT ) { - // Clear marker attributes for the new list tree made of cloned nodes, if any. - CKEDITOR.dom.element.clearMarkers( database, currentNode ); - - // Clear redundant direction attribute specified on list items. - if ( currentNode.getName() in CKEDITOR.dtd.$listItem ) - cleanUpDirection( currentNode ); - } - - currentNode = currentNode.getNextSourceNode(); - } - } - - return { listNode: retval, nextIndex: currentIndex }; - } - }; - - function changeListType( editor, groupObj, database, listsCreated ) { - // This case is easy... - // 1. Convert the whole list into a one-dimensional array. - // 2. Change the list type by modifying the array. - // 3. Recreate the whole list by converting the array to a list. - // 4. Replace the original list with the recreated list. - var listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ), - selectedListItems = []; - - for ( var i = 0; i < groupObj.contents.length; i++ ) { - var itemNode = groupObj.contents[ i ]; - itemNode = itemNode.getAscendant( 'li', true ); - if ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) ) - continue; - selectedListItems.push( itemNode ); - CKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true ); - } - - var root = groupObj.root, - doc = root.getDocument(), - listNode, newListNode; - - for ( i = 0; i < selectedListItems.length; i++ ) { - var listIndex = selectedListItems[ i ].getCustomData( 'listarray_index' ); - listNode = listArray[ listIndex ].parent; - - // Switch to new list node for this particular item. - if ( !listNode.is( this.type ) ) { - newListNode = doc.createElement( this.type ); - // Copy all attributes, except from 'start' and 'type'. - listNode.copyAttributes( newListNode, { start:1,type:1 } ); - // The list-style-type property should be ignored. - newListNode.removeStyle( 'list-style-type' ); - listArray[ listIndex ].parent = newListNode; - } - } - - var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode ); - var child, - length = newList.listNode.getChildCount(); - for ( i = 0; i < length && ( child = newList.listNode.getChild( i ) ); i++ ) { - if ( child.getName() == this.type ) - listsCreated.push( child ); - } - newList.listNode.replace( groupObj.root ); - } - - var headerTagRegex = /^h[1-6]$/; - - function createList( editor, groupObj, listsCreated ) { - var contents = groupObj.contents, - doc = groupObj.root.getDocument(), - listContents = []; - - // It is possible to have the contents returned by DomRangeIterator to be the same as the root. - // e.g. when we're running into table cells. - // In such a case, enclose the childNodes of contents[0] into a
    . - if ( contents.length == 1 && contents[ 0 ].equals( groupObj.root ) ) { - var divBlock = doc.createElement( 'div' ); - contents[ 0 ].moveChildren && contents[ 0 ].moveChildren( divBlock ); - contents[ 0 ].append( divBlock ); - contents[ 0 ] = divBlock; - } - - // Calculate the common parent node of all content blocks. - var commonParent = groupObj.contents[ 0 ].getParent(); - for ( var i = 0; i < contents.length; i++ ) - commonParent = commonParent.getCommonAncestor( contents[ i ].getParent() ); - - var useComputedState = editor.config.useComputedState, - listDir, explicitDirection; - - useComputedState = useComputedState === undefined || useComputedState; - - // We want to insert things that are in the same tree level only, so calculate the contents again - // by expanding the selected blocks to the same tree level. - for ( i = 0; i < contents.length; i++ ) { - var contentNode = contents[ i ], - parentNode; - while ( ( parentNode = contentNode.getParent() ) ) { - if ( parentNode.equals( commonParent ) ) { - listContents.push( contentNode ); - - // Determine the lists's direction. - if ( !explicitDirection && contentNode.getDirection() ) - explicitDirection = 1; - - var itemDir = contentNode.getDirection( useComputedState ); - - if ( listDir !== null ) { - // If at least one LI have a different direction than current listDir, we can't have listDir. - if ( listDir && listDir != itemDir ) - listDir = null; - else - listDir = itemDir; - } - - break; - } - contentNode = parentNode; - } - } - - if ( listContents.length < 1 ) - return; - - // Insert the list to the DOM tree. - var insertAnchor = listContents[ listContents.length - 1 ].getNext(), - listNode = doc.createElement( this.type ); - - listsCreated.push( listNode ); - - var contentBlock, listItem; - - while ( listContents.length ) { - contentBlock = listContents.shift(); - listItem = doc.createElement( 'li' ); - - // Preserve preformat block and heading structure when converting to list item. (#5335) (#5271) - if ( contentBlock.is( 'pre' ) || headerTagRegex.test( contentBlock.getName() ) ) - contentBlock.appendTo( listItem ); - else { - contentBlock.copyAttributes( listItem ); - // Remove direction attribute after it was merged into list root. (#7657) - if ( listDir && contentBlock.getDirection() ) { - listItem.removeStyle( 'direction' ); - listItem.removeAttribute( 'dir' ); - } - contentBlock.moveChildren( listItem ); - contentBlock.remove(); - } - - listItem.appendTo( listNode ); - } - - // Apply list root dir only if it has been explicitly declared. - if ( listDir && explicitDirection ) - listNode.setAttribute( 'dir', listDir ); - - if ( insertAnchor ) - listNode.insertBefore( insertAnchor ); - else - listNode.appendTo( commonParent ); - } - - function removeList( editor, groupObj, database ) { - // This is very much like the change list type operation. - // Except that we're changing the selected items' indent to -1 in the list array. - var listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ), - selectedListItems = []; - - for ( var i = 0; i < groupObj.contents.length; i++ ) { - var itemNode = groupObj.contents[ i ]; - itemNode = itemNode.getAscendant( 'li', true ); - if ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) ) - continue; - selectedListItems.push( itemNode ); - CKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true ); - } - - var lastListIndex = null; - for ( i = 0; i < selectedListItems.length; i++ ) { - var listIndex = selectedListItems[ i ].getCustomData( 'listarray_index' ); - listArray[ listIndex ].indent = -1; - lastListIndex = listIndex; - } - - // After cutting parts of the list out with indent=-1, we still have to maintain the array list - // model's nextItem.indent <= currentItem.indent + 1 invariant. Otherwise the array model of the - // list cannot be converted back to a real DOM list. - for ( i = lastListIndex + 1; i < listArray.length; i++ ) { - if ( listArray[ i ].indent > listArray[ i - 1 ].indent + 1 ) { - var indentOffset = listArray[ i - 1 ].indent + 1 - listArray[ i ].indent; - var oldIndent = listArray[ i ].indent; - while ( listArray[ i ] && listArray[ i ].indent >= oldIndent ) { - listArray[ i ].indent += indentOffset; - i++; - } - i--; - } - } - - var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, groupObj.root.getAttribute( 'dir' ) ); - - // Compensate
    before/after the list node if the surrounds are non-blocks.(#3836) - var docFragment = newList.listNode, - boundaryNode, siblingNode; - - function compensateBrs( isStart ) { - if ( ( boundaryNode = docFragment[ isStart ? 'getFirst' : 'getLast' ]() ) && !( boundaryNode.is && boundaryNode.isBlockBoundary() ) && ( siblingNode = groupObj.root[ isStart ? 'getPrevious' : 'getNext' ] - ( CKEDITOR.dom.walker.invisible( true ) ) ) && !( siblingNode.is && siblingNode.isBlockBoundary( { br:1 } ) ) ) - editor.document.createElement( 'br' )[ isStart ? 'insertBefore' : 'insertAfter' ]( boundaryNode ); - } - compensateBrs( true ); - compensateBrs(); - - docFragment.replace( groupObj.root ); - } - - function listCommand( name, type ) { - this.name = name; - this.type = type; - this.context = type; - this.allowedContent = type + ' li'; - this.requiredContent = type; - } - - var elementType = CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_ELEMENT ); - - // Merge child nodes with direction preserved. (#7448) - function mergeChildren( from, into, refNode, forward ) { - var child, itemDir; - while ( ( child = from[ forward ? 'getLast' : 'getFirst' ]( elementType ) ) ) { - if ( ( itemDir = child.getDirection( 1 ) ) !== into.getDirection( 1 ) ) - child.setAttribute( 'dir', itemDir ); - - child.remove(); - - refNode ? child[ forward ? 'insertBefore' : 'insertAfter' ]( refNode ) : into.append( child, forward ); - } - } - - listCommand.prototype = { - exec: function( editor ) { - // Run state check first of all. - this.refresh( editor, editor.elementPath() ); - - var doc = editor.document, - config = editor.config, - selection = editor.getSelection(), - ranges = selection && selection.getRanges( true ); - - // Midas lists rule #1 says we can create a list even in an empty document. - // But DOM iterator wouldn't run if the document is really empty. - // So create a paragraph if the document is empty and we're going to create a list. - if ( this.state == CKEDITOR.TRISTATE_OFF ) { - var editable = editor.editable(); - if ( !editable.getFirst( nonEmpty ) ) { - config.enterMode == CKEDITOR.ENTER_BR ? editable.appendBogus() : ranges[ 0 ].fixBlock( 1, config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ); - - selection.selectRanges( ranges ); - } - // Maybe a single range there enclosing the whole list, - // turn on the list state manually(#4129). - else { - var range = ranges.length == 1 && ranges[ 0 ], - enclosedNode = range && range.getEnclosedNode(); - if ( enclosedNode && enclosedNode.is && this.type == enclosedNode.getName() ) - this.setState( CKEDITOR.TRISTATE_ON ); - } - } - - var bookmarks = selection.createBookmarks( true ); - - // Group the blocks up because there are many cases where multiple lists have to be created, - // or multiple lists have to be cancelled. - var listGroups = [], - database = {}, - rangeIterator = ranges.createIterator(), - index = 0; - - while ( ( range = rangeIterator.getNextRange() ) && ++index ) { - var boundaryNodes = range.getBoundaryNodes(), - startNode = boundaryNodes.startNode, - endNode = boundaryNodes.endNode; - - if ( startNode.type == CKEDITOR.NODE_ELEMENT && startNode.getName() == 'td' ) - range.setStartAt( boundaryNodes.startNode, CKEDITOR.POSITION_AFTER_START ); - - if ( endNode.type == CKEDITOR.NODE_ELEMENT && endNode.getName() == 'td' ) - range.setEndAt( boundaryNodes.endNode, CKEDITOR.POSITION_BEFORE_END ); - - var iterator = range.createIterator(), - block; - - iterator.forceBrBreak = ( this.state == CKEDITOR.TRISTATE_OFF ); - - while ( ( block = iterator.getNextParagraph() ) ) { - // Avoid duplicate blocks get processed across ranges. - if ( block.getCustomData( 'list_block' ) ) - continue; - else - CKEDITOR.dom.element.setMarker( database, block, 'list_block', 1 ); - - var path = editor.elementPath( block ), - pathElements = path.elements, - pathElementsCount = pathElements.length, - listNode = null, - processedFlag = 0, - blockLimit = path.blockLimit, - element; - - // First, try to group by a list ancestor. - for ( var i = pathElementsCount - 1; i >= 0 && ( element = pathElements[ i ] ); i-- ) { - if ( listNodeNames[ element.getName() ] && blockLimit.contains( element ) ) // Don't leak outside block limit (#3940). - { - // If we've encountered a list inside a block limit - // The last group object of the block limit element should - // no longer be valid. Since paragraphs after the list - // should belong to a different group of paragraphs before - // the list. (Bug #1309) - blockLimit.removeCustomData( 'list_group_object_' + index ); - - var groupObj = element.getCustomData( 'list_group_object' ); - if ( groupObj ) - groupObj.contents.push( block ); - else { - groupObj = { root: element, contents: [ block ] }; - listGroups.push( groupObj ); - CKEDITOR.dom.element.setMarker( database, element, 'list_group_object', groupObj ); - } - processedFlag = 1; - break; - } - } - - if ( processedFlag ) - continue; - - // No list ancestor? Group by block limit, but don't mix contents from different ranges. - var root = blockLimit; - if ( root.getCustomData( 'list_group_object_' + index ) ) - root.getCustomData( 'list_group_object_' + index ).contents.push( block ); - else { - groupObj = { root: root, contents: [ block ] }; - CKEDITOR.dom.element.setMarker( database, root, 'list_group_object_' + index, groupObj ); - listGroups.push( groupObj ); - } - } - } - - // Now we have two kinds of list groups, groups rooted at a list, and groups rooted at a block limit element. - // We either have to build lists or remove lists, for removing a list does not makes sense when we are looking - // at the group that's not rooted at lists. So we have three cases to handle. - var listsCreated = []; - while ( listGroups.length > 0 ) { - groupObj = listGroups.shift(); - if ( this.state == CKEDITOR.TRISTATE_OFF ) { - if ( listNodeNames[ groupObj.root.getName() ] ) - changeListType.call( this, editor, groupObj, database, listsCreated ); - else - createList.call( this, editor, groupObj, listsCreated ); - } else if ( this.state == CKEDITOR.TRISTATE_ON && listNodeNames[ groupObj.root.getName() ] ) - removeList.call( this, editor, groupObj, database ); - } - - // For all new lists created, merge into adjacent, same type lists. - for ( i = 0; i < listsCreated.length; i++ ) - mergeListSiblings( listsCreated[ i ] ); - - // Clean up, restore selection and update toolbar button states. - CKEDITOR.dom.element.clearAllMarkers( database ); - selection.selectBookmarks( bookmarks ); - editor.focus(); - }, - - refresh: function( editor, path ) { - var list = path.contains( listNodeNames, 1 ), - limit = path.blockLimit || path.root; - - // 1. Only a single type of list activate. - // 2. Do not show list outside of block limit. - if ( list && limit.contains( list ) ) - this.setState( list.is( this.type ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); - else - this.setState( CKEDITOR.TRISTATE_OFF ); - } - }; - - var dtd = CKEDITOR.dtd; - var tailNbspRegex = /[\t\r\n ]*(?: |\xa0)$/; - - // Merge list adjacent, of same type lists. - function mergeListSiblings( listNode ) - { - var mergeSibling; - ( mergeSibling = function( rtl ) - { - var sibling = listNode[ rtl ? 'getPrevious' : 'getNext' ]( nonEmpty ); - if ( sibling && - sibling.type == CKEDITOR.NODE_ELEMENT && - sibling.is( listNode.getName() ) ) - { - // Move children order by merge direction.(#3820) - mergeChildren( listNode, sibling, null, !rtl ); - - listNode.remove(); - listNode = sibling; - } - } )(); - mergeSibling( 1 ); - } - - function indexOfFirstChildElement( element, tagNameList ) { - var child, - children = element.children, - length = children.length; - - for ( var i = 0; i < length; i++ ) { - child = children[ i ]; - if ( child.name && ( child.name in tagNameList ) ) - return i; - } - - return length; - } - - // Check if node is block element that recieves text. - function isTextBlock( node ) { - return node.type == CKEDITOR.NODE_ELEMENT && ( node.getName() in CKEDITOR.dtd.$block || node.getName() in CKEDITOR.dtd.$listItem ) && CKEDITOR.dtd[ node.getName() ][ '#' ]; - } - - // Join visually two block lines. - function joinNextLineToCursor( editor, cursor, nextCursor ) { - editor.fire( 'saveSnapshot' ); - - // Merge with previous block's content. - nextCursor.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ); - var frag = nextCursor.extractContents(); - - cursor.trim( false, true ); - var bm = cursor.createBookmark(); - - // Kill original bogus; - var currentPath = new CKEDITOR.dom.elementPath( cursor.startContainer ), - pathBlock = currentPath.block, - currentBlock = currentPath.lastElement.getAscendant( 'li', 1 ) || pathBlock, - nextPath = new CKEDITOR.dom.elementPath( nextCursor.startContainer ), - nextLi = nextPath.contains( CKEDITOR.dtd.$listItem ), - nextList = nextPath.contains( CKEDITOR.dtd.$list ), - last; - - // Remove bogus node the current block/pseudo block. - if ( pathBlock ) { - var bogus = pathBlock.getBogus(); - bogus && bogus.remove(); - } - else if ( nextList ) { - last = nextList.getPrevious( nonEmpty ); - if ( last && blockBogus( last ) ) - last.remove(); - } - - // Kill the tail br in extracted. - last = frag.getLast(); - if ( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( 'br' ) ) - last.remove(); - - // Insert fragment at the range position. - var nextNode = cursor.startContainer.getChild( cursor.startOffset ); - if ( nextNode ) - frag.insertBefore( nextNode ); - else - cursor.startContainer.append( frag ); - - // Move the sub list nested in the next list item. - if ( nextLi ) { - var sublist = getSubList( nextLi ); - if ( sublist ) { - // If next line is in the sub list of the current list item. - if ( currentBlock.contains( nextLi ) ) { - mergeChildren( sublist, nextLi.getParent(), nextLi ); - sublist.remove(); - } - // Migrate the sub list to current list item. - else - currentBlock.append( sublist ); - } - } - - var nextBlock, parent; - // Remove any remaining zombies path blocks at the end after line merged. - while ( nextCursor.checkStartOfBlock() && nextCursor.checkEndOfBlock() ) { - nextPath = nextCursor.startPath(); - nextBlock = nextPath.block; - - // Check if also to remove empty list. - if ( nextBlock.is( 'li' ) ) { - parent = nextBlock.getParent(); - if ( nextBlock.equals( parent.getLast( nonEmpty ) ) && nextBlock.equals( parent.getFirst( nonEmpty ) ) ) - nextBlock = parent; - } - - nextCursor.moveToPosition( nextBlock, CKEDITOR.POSITION_BEFORE_START ); - nextBlock.remove(); - } - - // Check if need to further merge with the list resides after the merged block. (#9080) - var walkerRng = nextCursor.clone(), editable = editor.editable(); - walkerRng.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END ); - var walker = new CKEDITOR.dom.walker( walkerRng ); - walker.evaluator = function( node ) { return nonEmpty( node ) && !blockBogus( node ); }; - var next = walker.next(); - if ( next && next.type == CKEDITOR.NODE_ELEMENT && next.getName() in CKEDITOR.dtd.$list ) - mergeListSiblings( next ); - - cursor.moveToBookmark( bm ); - - // Make fresh selection. - cursor.select(); - - editor.fire( 'saveSnapshot' ); - } - - function getSubList( li ) { - var last = li.getLast( nonEmpty ); - return last && last.type == CKEDITOR.NODE_ELEMENT && last.getName() in listNodeNames ? last : null; - } - - CKEDITOR.plugins.add( 'list', { - requires: 'indent', - init: function( editor ) { - if ( editor.blockless ) - return; - - // Register commands. - editor.addCommand( 'numberedlist', new listCommand( 'numberedlist', 'ol' ) ); - editor.addCommand( 'bulletedlist', new listCommand( 'bulletedlist', 'ul' ) ); - - // Register the toolbar button. - if ( editor.ui.addButton ) { - editor.ui.addButton( 'NumberedList', { - label: editor.lang.list.numberedlist, - command: 'numberedlist', - directional: true, - toolbar: 'list,10' - }); - editor.ui.addButton( 'BulletedList', { - label: editor.lang.list.bulletedlist, - command: 'bulletedlist', - directional: true, - toolbar: 'list,20' - }); - } - - // Handled backspace/del key to join list items. (#8248,#9080) - editor.on( 'key', function( evt ) { - var key = evt.data.keyCode; - - // DEl/BACKSPACE - if ( editor.mode == 'wysiwyg' && key in { 8:1,46:1 } ) { - var sel = editor.getSelection(), - range = sel.getRanges()[ 0 ], - path = range.startPath(); - - if ( !range.collapsed ) - return; - - path = new CKEDITOR.dom.elementPath( range.startContainer ); - var isBackspace = key == 8; - var editable = editor.editable(); - var walker = new CKEDITOR.dom.walker( range.clone() ); - walker.evaluator = function( node ) { - return nonEmpty( node ) && !blockBogus( node ); - }; - // Backspace/Del behavior at the start/end of table is handled in core. - walker.guard = function( node, isOut ) { - return !( isOut && node.type == CKEDITOR.NODE_ELEMENT && node.is( 'table' ) ); - }; - - var cursor = range.clone(); - - if ( isBackspace ) { - var previous, joinWith; - - // Join a sub list's first line, with the previous visual line in parent. - if ( ( previous = path.contains( listNodeNames ) ) && - range.checkBoundaryOfElement( previous, CKEDITOR.START ) && - ( previous = previous.getParent() ) && previous.is( 'li' ) && - ( previous = getSubList( previous ) ) ) { - joinWith = previous; - previous = previous.getPrevious( nonEmpty ); - // Place cursor before the nested list. - cursor.moveToPosition( - previous && blockBogus( previous ) ? previous : joinWith, - CKEDITOR.POSITION_BEFORE_START ); - } - // Join any line following a list, with the last visual line of the list. - else { - walker.range.setStartAt( editable, CKEDITOR.POSITION_AFTER_START ); - walker.range.setEnd( range.startContainer, range.startOffset ); - - previous = walker.previous(); - - if ( previous && previous.type == CKEDITOR.NODE_ELEMENT && - ( previous.getName() in listNodeNames || - previous.is( 'li' ) ) ) { - if ( !previous.is( 'li' ) ) { - walker.range.selectNodeContents( previous ); - walker.reset(); - walker.evaluator = isTextBlock; - previous = walker.previous(); - } - - joinWith = previous; - // Place cursor at the end of previous block. - cursor.moveToElementEditEnd( joinWith ); - } - } - - if ( joinWith ) { - joinNextLineToCursor( editor, cursor, range ); - evt.cancel(); - } - else { - var list = path.contains( listNodeNames ); - // Backspace pressed at the start of list outdents the first list item. (#9129) - if ( list && range.checkBoundaryOfElement( list, CKEDITOR.START ) ) { - li = list.getFirst( nonEmpty ); - - if ( range.checkBoundaryOfElement( li, CKEDITOR.START ) ) { - previous = list.getPrevious( nonEmpty ); - - // Only if the list item contains a sub list, do nothing but - // simply move cursor backward one character. - if ( getSubList( li ) ) { - if ( previous ) { - range.moveToElementEditEnd( previous ); - range.select(); - } - - evt.cancel(); - } - else { - editor.execCommand( 'outdent' ); - evt.cancel(); - } - } - } - } - - } else { - - var next, nextLine, li = path.contains( 'li' ); - - if ( li ) { - walker.range.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END ); - - var last = li.getLast( nonEmpty ); - var block = last && isTextBlock( last ) ? last : li; - - // Indicate cursor at the visual end of an list item. - var isAtEnd = 0; - - next = walker.next(); - - // When list item contains a sub list. - if ( next && next.type == CKEDITOR.NODE_ELEMENT && - next.getName() in listNodeNames && - next.equals( last ) ) - { - isAtEnd = 1; - - // Move to the first item in sub list. - next = walker.next(); - } - // Right at the end of list item. - else if ( range.checkBoundaryOfElement( block, CKEDITOR.END ) ) - isAtEnd = 1; - - - if ( isAtEnd && next ) { - // Put cursor range there. - nextLine = range.clone(); - nextLine.moveToElementEditStart( next ); - - joinNextLineToCursor( editor, cursor, nextLine ); - evt.cancel(); - } - } - else - { - // Handle Del key pressed before the list. - walker.range.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END ); - next = walker.next(); - - if ( next && next.type == CKEDITOR.NODE_ELEMENT && - next.is( listNodeNames ) ) { - // The start
  • - next = next.getFirst( nonEmpty ); - - // Simply remove the current empty block, move cursor to the - // subsequent list. - if ( path.block && - range.checkStartOfBlock() && - range.checkEndOfBlock() ) { - path.block.remove(); - range.moveToElementEditStart( next ); - range.select(); - evt.cancel(); - } - // Preventing the default (merge behavior), but simply move - // the cursor one character forward if subsequent list item - // contains sub list. - else if ( getSubList( next ) ) { - range.moveToElementEditStart( next ); - range.select(); - evt.cancel(); - } - // Merge the first list item with the current line. - else { - nextLine = range.clone(); - nextLine.moveToElementEditStart( next ); - joinNextLineToCursor( editor, cursor, nextLine ); - evt.cancel(); - } - } - } - - } - - // The backspace/del could potentially put cursor at a bad position, - // being it handled or not, check immediately the selection to have it fixed. - setTimeout( function() { editor.selectionChange( 1 ); } ); - } - }); - } - }); -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Increse and decrease indent commands. - */ - -(function() { - var listNodeNames = { ol:1,ul:1 }, - isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ), - isNotBookmark = CKEDITOR.dom.walker.bookmark( false, true ); - - function indentCommand( editor, name ) { - this.name = name; - var useClasses = this.useIndentClasses = editor.config.indentClasses && editor.config.indentClasses.length > 0; - if ( useClasses ) { - this.classNameRegex = new RegExp( '(?:^|\\s+)(' + editor.config.indentClasses.join( '|' ) + ')(?=$|\\s)' ); - this.indentClassMap = {}; - for ( var i = 0; i < editor.config.indentClasses.length; i++ ) - this.indentClassMap[ editor.config.indentClasses[ i ] ] = i + 1; - } - - this.startDisabled = name == 'outdent'; - - this.allowedContent = { - 'div h1 h2 h3 h4 h5 h6 ol p pre ul': { - // Do not add elements, but only text-align style if element is validated by other rule. - propertiesOnly: true, - styles: !useClasses ? 'margin-left,margin-right' : null, - classes: useClasses ? editor.config.indentClasses : null - } - }; - - // #10192: Either blocks intendation or lists are required - acitvate - // indent commands in both situations. Lists are sufficient, because - // indent is needed for leaving list with enter key. - this.requiredContent = [ - 'p' + ( useClasses ? '(' + editor.config.indentClasses[ 0 ] + ')' : '{margin-left}' ), - 'li' - ]; - } - - // Returns the CSS property to be used for identing a given element. - function getIndentCssProperty( element, dir ) { - return ( dir || element.getComputedStyle( 'direction' ) ) == 'ltr' ? 'margin-left' : 'margin-right'; - } - - function isListItem( node ) { - return node.type == CKEDITOR.NODE_ELEMENT && node.is( 'li' ); - } - - indentCommand.prototype = { - // It applies to a "block-like" context. - context: 'p', - - refresh: function( editor, path ) { - var list = path && path.contains( listNodeNames ), - firstBlock = path.block || path.blockLimit; - - if ( list ) - this.setState( CKEDITOR.TRISTATE_OFF ); - - else if ( !this.useIndentClasses && this.name == 'indent' ) - this.setState( CKEDITOR.TRISTATE_OFF ); - - else if ( !firstBlock ) - this.setState( CKEDITOR.TRISTATE_DISABLED ); - - else if ( this.useIndentClasses ) { - var indentClass = firstBlock.$.className.match( this.classNameRegex ), - indentStep = 0; - - if ( indentClass ) { - indentClass = indentClass[ 1 ]; - indentStep = this.indentClassMap[ indentClass ]; - } - - if ( ( this.name == 'outdent' && !indentStep ) || ( this.name == 'indent' && indentStep == editor.config.indentClasses.length ) ) - this.setState( CKEDITOR.TRISTATE_DISABLED ); - else - this.setState( CKEDITOR.TRISTATE_OFF ); - } else { - var indent = parseInt( firstBlock.getStyle( getIndentCssProperty( firstBlock ) ), 10 ); - if ( isNaN( indent ) ) - indent = 0; - if ( indent <= 0 ) - this.setState( CKEDITOR.TRISTATE_DISABLED ); - else - this.setState( CKEDITOR.TRISTATE_OFF ); - } - }, - exec: function( editor ) { - var self = this, - database = {}; - - function indentList( listNode ) { - // Our starting and ending points of the range might be inside some blocks under a list item... - // So before playing with the iterator, we need to expand the block to include the list items. - var startContainer = range.startContainer, - endContainer = range.endContainer; - while ( startContainer && !startContainer.getParent().equals( listNode ) ) - startContainer = startContainer.getParent(); - while ( endContainer && !endContainer.getParent().equals( listNode ) ) - endContainer = endContainer.getParent(); - - if ( !startContainer || !endContainer ) - return; - - // Now we can iterate over the individual items on the same tree depth. - var block = startContainer, - itemsToMove = [], - stopFlag = false; - while ( !stopFlag ) { - if ( block.equals( endContainer ) ) - stopFlag = true; - itemsToMove.push( block ); - block = block.getNext(); - } - if ( itemsToMove.length < 1 ) - return; - - // Do indent or outdent operations on the array model of the list, not the - // list's DOM tree itself. The array model demands that it knows as much as - // possible about the surrounding lists, we need to feed it the further - // ancestor node that is still a list. - var listParents = listNode.getParents( true ); - for ( var i = 0; i < listParents.length; i++ ) { - if ( listParents[ i ].getName && listNodeNames[ listParents[ i ].getName() ] ) { - listNode = listParents[ i ]; - break; - } - } - var indentOffset = self.name == 'indent' ? 1 : -1, - startItem = itemsToMove[ 0 ], - lastItem = itemsToMove[ itemsToMove.length - 1 ]; - - // Convert the list DOM tree into a one dimensional array. - var listArray = CKEDITOR.plugins.list.listToArray( listNode, database ); - - // Apply indenting or outdenting on the array. - var baseIndent = listArray[ lastItem.getCustomData( 'listarray_index' ) ].indent; - for ( i = startItem.getCustomData( 'listarray_index' ); i <= lastItem.getCustomData( 'listarray_index' ); i++ ) { - listArray[ i ].indent += indentOffset; - // Make sure the newly created sublist get a brand-new element of the same type. (#5372) - if ( indentOffset > 0 ) { - var listRoot = listArray[ i ].parent; - listArray[ i ].parent = new CKEDITOR.dom.element( listRoot.getName(), listRoot.getDocument() ); - } - } - - for ( i = lastItem.getCustomData( 'listarray_index' ) + 1; - i < listArray.length && listArray[ i ].indent > baseIndent; i++ ) - listArray[ i ].indent += indentOffset; - - // Convert the array back to a DOM forest (yes we might have a few subtrees now). - // And replace the old list with the new forest. - var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, listNode.getDirection() ); - - // Avoid nested
  • after outdent even they're visually same, - // recording them for later refactoring.(#3982) - if ( self.name == 'outdent' ) { - var parentLiElement; - if ( ( parentLiElement = listNode.getParent() ) && parentLiElement.is( 'li' ) ) { - var children = newList.listNode.getChildren(), - pendingLis = [], - count = children.count(), - child; - - for ( i = count - 1; i >= 0; i-- ) { - if ( ( child = children.getItem( i ) ) && child.is && child.is( 'li' ) ) - pendingLis.push( child ); - } - } - } - - if ( newList ) - newList.listNode.replace( listNode ); - - // Move the nested
  • to be appeared after the parent. - if ( pendingLis && pendingLis.length ) { - for ( i = 0; i < pendingLis.length; i++ ) { - var li = pendingLis[ i ], - followingList = li; - - // Nest preceding
      /
        inside current
      1. if any. - while ( ( followingList = followingList.getNext() ) && followingList.is && followingList.getName() in listNodeNames ) { - // IE requires a filler NBSP for nested list inside empty list item, - // otherwise the list item will be inaccessiable. (#4476) - if ( CKEDITOR.env.ie && !li.getFirst( function( node ) { - return isNotWhitespaces( node ) && isNotBookmark( node ); - })) - li.append( range.document.createText( '\u00a0' ) ); - - li.append( followingList ); - } - - li.insertAfter( parentLiElement ); - } - } - } - - function indentBlock() { - var iterator = range.createIterator(), - enterMode = editor.config.enterMode; - iterator.enforceRealBlocks = true; - iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR; - var block; - while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) - indentElement( block ); - } - - function indentElement( element, dir ) { - if ( element.getCustomData( 'indent_processed' ) ) - return false; - - if ( self.useIndentClasses ) { - // Transform current class name to indent step index. - var indentClass = element.$.className.match( self.classNameRegex ), - indentStep = 0; - if ( indentClass ) { - indentClass = indentClass[ 1 ]; - indentStep = self.indentClassMap[ indentClass ]; - } - - // Operate on indent step index, transform indent step index back to class - // name. - if ( self.name == 'outdent' ) - indentStep--; - else - indentStep++; - - if ( indentStep < 0 ) - return false; - - indentStep = Math.min( indentStep, editor.config.indentClasses.length ); - indentStep = Math.max( indentStep, 0 ); - element.$.className = CKEDITOR.tools.ltrim( element.$.className.replace( self.classNameRegex, '' ) ); - if ( indentStep > 0 ) - element.addClass( editor.config.indentClasses[ indentStep - 1 ] ); - } else { - var indentCssProperty = getIndentCssProperty( element, dir ), - currentOffset = parseInt( element.getStyle( indentCssProperty ), 10 ); - if ( isNaN( currentOffset ) ) - currentOffset = 0; - var indentOffset = editor.config.indentOffset || 40; - currentOffset += ( self.name == 'indent' ? 1 : -1 ) * indentOffset; - - if ( currentOffset < 0 ) - return false; - - currentOffset = Math.max( currentOffset, 0 ); - currentOffset = Math.ceil( currentOffset / indentOffset ) * indentOffset; - element.setStyle( indentCssProperty, currentOffset ? currentOffset + ( editor.config.indentUnit || 'px' ) : '' ); - if ( element.getAttribute( 'style' ) === '' ) - element.removeAttribute( 'style' ); - } - - CKEDITOR.dom.element.setMarker( database, element, 'indent_processed', 1 ); - return true; - } - - var selection = editor.getSelection(), - bookmarks = selection.createBookmarks( 1 ), - ranges = selection && selection.getRanges( 1 ), - range; - - - var iterator = ranges.createIterator(); - while ( ( range = iterator.getNextRange() ) ) { - var rangeRoot = range.getCommonAncestor(), - nearestListBlock = rangeRoot; - - while ( nearestListBlock && !( nearestListBlock.type == CKEDITOR.NODE_ELEMENT && listNodeNames[ nearestListBlock.getName() ] ) ) - nearestListBlock = nearestListBlock.getParent(); - - // Avoid having selection enclose the entire list. (#6138) - // [
        • ...
        ] =>
        • [...]
        - if ( !nearestListBlock ) { - var selectedNode = range.getEnclosedNode(); - if ( selectedNode && selectedNode.type == CKEDITOR.NODE_ELEMENT && selectedNode.getName() in listNodeNames ) { - range.setStartAt( selectedNode, CKEDITOR.POSITION_AFTER_START ); - range.setEndAt( selectedNode, CKEDITOR.POSITION_BEFORE_END ); - nearestListBlock = selectedNode; - } - } - - // Avoid selection anchors under list root. - //
          [
        • ...
        • ]
        =>
        • [...]
        - if ( nearestListBlock && range.startContainer.type == CKEDITOR.NODE_ELEMENT && range.startContainer.getName() in listNodeNames ) { - var walker = new CKEDITOR.dom.walker( range ); - walker.evaluator = isListItem; - range.startContainer = walker.next(); - } - - if ( nearestListBlock && range.endContainer.type == CKEDITOR.NODE_ELEMENT && range.endContainer.getName() in listNodeNames ) { - walker = new CKEDITOR.dom.walker( range ); - walker.evaluator = isListItem; - range.endContainer = walker.previous(); - } - - if ( nearestListBlock ) { - var firstListItem = nearestListBlock.getFirst( isListItem ), - hasMultipleItems = !!firstListItem.getNext( isListItem ), - rangeStart = range.startContainer, - indentWholeList = firstListItem.equals( rangeStart ) || firstListItem.contains( rangeStart ); - - // Indent the entire list if cursor is inside the first list item. (#3893) - // Only do that for indenting or when using indent classes or when there is something to outdent. (#6141) - if ( !( indentWholeList && ( self.name == 'indent' || self.useIndentClasses || parseInt( nearestListBlock.getStyle( getIndentCssProperty( nearestListBlock ) ), 10 ) ) && indentElement( nearestListBlock, !hasMultipleItems && firstListItem.getDirection() ) ) ) - indentList( nearestListBlock ); - } else - indentBlock(); - } - - // Clean up the markers. - CKEDITOR.dom.element.clearAllMarkers( database ); - - editor.forceNextSelectionCheck(); - selection.selectBookmarks( bookmarks ); - } - }; - - CKEDITOR.plugins.add( 'indent', { - // TODO: Remove this dependency. - requires: 'list', - onLoad: function() { - // [IE6/7] Raw lists are using margin instead of padding for visual indentation in wysiwyg mode. (#3893) - if ( CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat ) { - CKEDITOR.addCss( ".cke_editable ul," + - ".cke_editable ol" + - "{" + - " margin-left: 0px;" + - " padding-left: 40px;" + - "}" ); - } - }, - init: function( editor ) { - if ( editor.blockless ) - return; - - // Register commands. - var indent = editor.addCommand( 'indent', new indentCommand( editor, 'indent' ) ), - outdent = editor.addCommand( 'outdent', new indentCommand( editor, 'outdent' ) ); - - if ( editor.ui.addButton ) { - // Register the toolbar buttons. - editor.ui.addButton( 'Indent', { - label: editor.lang.indent.indent, - command: 'indent', - directional: true, - toolbar: 'indent,20' - }); - editor.ui.addButton( 'Outdent', { - label: editor.lang.indent.outdent, - command: 'outdent', - directional: true, - toolbar: 'indent,10' - }); - } - - // Register dirChanged listener. - editor.on( 'dirChanged', function( e ) { - var range = editor.createRange(); - range.setStartBefore( e.data.node ); - range.setEndAfter( e.data.node ); - - var walker = new CKEDITOR.dom.walker( range ), - node; - - while ( ( node = walker.next() ) ) { - if ( node.type == CKEDITOR.NODE_ELEMENT ) { - // A child with the defined dir is to be ignored. - if ( !node.equals( e.data.node ) && node.getDirection() ) { - range.setStartAfter( node ); - walker = new CKEDITOR.dom.walker( range ); - continue; - } - - // Switch alignment classes. - var classes = editor.config.indentClasses; - if ( classes ) { - var suffix = ( e.data.dir == 'ltr' ) ? [ '_rtl', '' ] : [ '', '_rtl' ]; - for ( var i = 0; i < classes.length; i++ ) { - if ( node.hasClass( classes[ i ] + suffix[ 0 ] ) ) { - node.removeClass( classes[ i ] + suffix[ 0 ] ); - node.addClass( classes[ i ] + suffix[ 1 ] ); - } - } - } - - // Switch the margins. - var marginLeft = node.getStyle( 'margin-right' ), - marginRight = node.getStyle( 'margin-left' ); - - marginLeft ? node.setStyle( 'margin-left', marginLeft ) : node.removeStyle( 'margin-left' ); - marginRight ? node.setStyle( 'margin-right', marginRight ) : node.removeStyle( 'margin-right' ); - } - } - }); - } - }); -})(); - -/** - * Size of each indentation step. - * - * config.indentOffset = 4; - * - * @cfg {Number} [indentOffset=40] - * @member CKEDITOR.config - */ - -/** - * Unit for the indentation style. - * - * config.indentUnit = 'em'; - * - * @cfg {String} [indentUnit='px'] - * @member CKEDITOR.config - */ - -/** - * List of classes to use for indenting the contents. If it's `null`, no classes will be used - * and instead the {@link #indentUnit} and {@link #indentOffset} properties will be used. - * - * // Use the classes 'Indent1', 'Indent2', 'Indent3' - * config.indentClasses = ['Indent1', 'Indent2', 'Indent3']; - * - * @cfg {Array} [indentClasses=null] - * @member CKEDITOR.config - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - CKEDITOR.plugins.add( 'enterkey', { - // TODO: should not depend on a particular format plugin. - requires: 'indent', - - init: function( editor ) { - editor.addCommand( 'enter', { modes:{wysiwyg:1 }, - editorFocus: false, - exec: function( editor ) { - enter( editor ); - } - }); - - editor.addCommand( 'shiftEnter', { modes:{wysiwyg:1 }, - editorFocus: false, - exec: function( editor ) { - shiftEnter( editor ); - } - }); - - editor.setKeystroke( [ - [ 13, 'enter' ], - [ CKEDITOR.SHIFT + 13, 'shiftEnter' ] - ] ); - } - }); - - var whitespaces = CKEDITOR.dom.walker.whitespaces(), - bookmark = CKEDITOR.dom.walker.bookmark(); - - CKEDITOR.plugins.enterkey = { - enterBlock: function( editor, mode, range, forceMode ) { - // Get the range for the current selection. - range = range || getRange( editor ); - - // We may not have valid ranges to work on, like when inside a - // contenteditable=false element. - if ( !range ) - return; - - var doc = range.document; - - var atBlockStart = range.checkStartOfBlock(), - atBlockEnd = range.checkEndOfBlock(), - path = editor.elementPath( range.startContainer ), - block = path.block; - - // Exit the list when we're inside an empty list item block. (#5376) - if ( atBlockStart && atBlockEnd ) { - // Exit the list when we're inside an empty list item block. (#5376) - if ( block && ( block.is( 'li' ) || block.getParent().is( 'li' ) ) ) { - editor.execCommand( 'outdent' ); - return; - } - - if ( block && block.getParent().is( 'blockquote' ) ) { - block.breakParent( block.getParent() ); - - // If we were at the start of
        , there will be an empty element before it now. - if ( !block.getPrevious().getFirst( CKEDITOR.dom.walker.invisible( 1 ) ) ) - block.getPrevious().remove(); - - // If we were at the end of
        , there will be an empty element after it now. - if ( !block.getNext().getFirst( CKEDITOR.dom.walker.invisible( 1 ) ) ) - block.getNext().remove(); - - range.moveToElementEditStart( block ); - range.select(); - return; - } - } - // Don't split
         if we're in the middle of it, act as shift enter key.
        -			else if ( block && block.is( 'pre' ) ) {
        -				if ( !atBlockEnd ) {
        -					enterBr( editor, mode, range, forceMode );
        -					return;
        -				}
        -			}
        -
        -			// Determine the block element to be used.
        -			var blockTag = ( mode == CKEDITOR.ENTER_DIV ? 'div' : 'p' );
        -
        -			// Split the range.
        -			var splitInfo = range.splitBlock( blockTag );
        -
        -			if ( !splitInfo )
        -				return;
        -
        -			// Get the current blocks.
        -			var previousBlock = splitInfo.previousBlock,
        -				nextBlock = splitInfo.nextBlock;
        -
        -			var isStartOfBlock = splitInfo.wasStartOfBlock,
        -				isEndOfBlock = splitInfo.wasEndOfBlock;
        -
        -			var node;
        -
        -			// If this is a block under a list item, split it as well. (#1647)
        -			if ( nextBlock ) {
        -				node = nextBlock.getParent();
        -				if ( node.is( 'li' ) ) {
        -					nextBlock.breakParent( node );
        -					nextBlock.move( nextBlock.getNext(), 1 );
        -				}
        -			} else if ( previousBlock && ( node = previousBlock.getParent() ) && node.is( 'li' ) ) {
        -				previousBlock.breakParent( node );
        -				node = previousBlock.getNext();
        -				range.moveToElementEditStart( node );
        -				previousBlock.move( previousBlock.getPrevious() );
        -			}
        -
        -			// If we have both the previous and next blocks, it means that the
        -			// boundaries were on separated blocks, or none of them where on the
        -			// block limits (start/end).
        -			if ( !isStartOfBlock && !isEndOfBlock ) {
        -				// If the next block is an 
      2. with another list tree as the first - // child, we'll need to append a filler (
        /NBSP) or the list item - // wouldn't be editable. (#1420) - if ( nextBlock.is( 'li' ) ) { - var walkerRange = range.clone(); - walkerRange.selectNodeContents( nextBlock ); - var walker = new CKEDITOR.dom.walker( walkerRange ); - walker.evaluator = function( node ) { - return !( bookmark( node ) || whitespaces( node ) || node.type == CKEDITOR.NODE_ELEMENT && node.getName() in CKEDITOR.dtd.$inline && !( node.getName() in CKEDITOR.dtd.$empty ) ); - }; - - node = walker.next(); - if ( node && node.type == CKEDITOR.NODE_ELEMENT && node.is( 'ul', 'ol' ) ) { - ( CKEDITOR.env.ie ? doc.createText( '\xa0' ) : doc.createElement( 'br' ) ).insertBefore( node ); - } - } - - // Move the selection to the end block. - if ( nextBlock ) - range.moveToElementEditStart( nextBlock ); - } else { - var newBlock, newBlockDir; - - if ( previousBlock ) { - // Do not enter this block if it's a header tag, or we are in - // a Shift+Enter (#77). Create a new block element instead - // (later in the code). - if ( previousBlock.is( 'li' ) || !( headerTagRegex.test( previousBlock.getName() ) || previousBlock.is( 'pre' ) ) ) { - // Otherwise, duplicate the previous block. - newBlock = previousBlock.clone(); - } - } else if ( nextBlock ) - newBlock = nextBlock.clone(); - - if ( !newBlock ) { - // We have already created a new list item. (#6849) - if ( node && node.is( 'li' ) ) - newBlock = node; - else { - newBlock = doc.createElement( blockTag ); - if ( previousBlock && ( newBlockDir = previousBlock.getDirection() ) ) - newBlock.setAttribute( 'dir', newBlockDir ); - } - } - // Force the enter block unless we're talking of a list item. - else if ( forceMode && !newBlock.is( 'li' ) ) - newBlock.renameNode( blockTag ); - - // Recreate the inline elements tree, which was available - // before hitting enter, so the same styles will be available in - // the new block. - var elementPath = splitInfo.elementPath; - if ( elementPath ) { - for ( var i = 0, len = elementPath.elements.length; i < len; i++ ) { - var element = elementPath.elements[ i ]; - - if ( element.equals( elementPath.block ) || element.equals( elementPath.blockLimit ) ) - break; - - if ( CKEDITOR.dtd.$removeEmpty[ element.getName() ] ) { - element = element.clone(); - newBlock.moveChildren( element ); - newBlock.append( element ); - } - } - } - - if ( !CKEDITOR.env.ie ) - newBlock.appendBogus(); - - if ( !newBlock.getParent() ) - range.insertNode( newBlock ); - - // list item start number should not be duplicated (#7330), but we need - // to remove the attribute after it's onto the DOM tree because of old IEs (#7581). - newBlock.is( 'li' ) && newBlock.removeAttribute( 'value' ); - - // This is tricky, but to make the new block visible correctly - // we must select it. - // The previousBlock check has been included because it may be - // empty if we have fixed a block-less space (like ENTER into an - // empty table cell). - if ( CKEDITOR.env.ie && isStartOfBlock && ( !isEndOfBlock || !previousBlock.getChildCount() ) ) { - // Move the selection to the new block. - range.moveToElementEditStart( isEndOfBlock ? previousBlock : newBlock ); - range.select(); - } - - // Move the selection to the new block. - range.moveToElementEditStart( isStartOfBlock && !isEndOfBlock ? nextBlock : newBlock ); - } - - range.select(); - range.scrollIntoView(); - }, - - enterBr: function( editor, mode, range, forceMode ) { - // Get the range for the current selection. - range = range || getRange( editor ); - - // We may not have valid ranges to work on, like when inside a - // contenteditable=false element. - if ( !range ) - return; - - var doc = range.document; - - // Determine the block element to be used. - var blockTag = ( mode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ); - - var isEndOfBlock = range.checkEndOfBlock(); - - var elementPath = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() ); - - var startBlock = elementPath.block, - startBlockTag = startBlock && elementPath.block.getName(); - - var isPre = false; - - if ( !forceMode && startBlockTag == 'li' ) { - enterBlock( editor, mode, range, forceMode ); - return; - } - - // If we are at the end of a header block. - if ( !forceMode && isEndOfBlock && headerTagRegex.test( startBlockTag ) ) { - var newBlock, newBlockDir; - - if ( ( newBlockDir = startBlock.getDirection() ) ) { - newBlock = doc.createElement( 'div' ); - newBlock.setAttribute( 'dir', newBlockDir ); - newBlock.insertAfter( startBlock ); - range.setStart( newBlock, 0 ); - } else { - // Insert a
        after the current paragraph. - doc.createElement( 'br' ).insertAfter( startBlock ); - - // A text node is required by Gecko only to make the cursor blink. - if ( CKEDITOR.env.gecko ) - doc.createText( '' ).insertAfter( startBlock ); - - // IE has different behaviors regarding position. - range.setStartAt( startBlock.getNext(), CKEDITOR.env.ie ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_START ); - } - } else { - var lineBreak; - - // IE<8 prefers text node as line-break inside of
         (#4711).
        -				if ( startBlockTag == 'pre' && CKEDITOR.env.ie && CKEDITOR.env.version < 8 )
        -					lineBreak = doc.createText( '\r' );
        -				else
        -					lineBreak = doc.createElement( 'br' );
        -
        -				range.deleteContents();
        -				range.insertNode( lineBreak );
        -
        -				// IE has different behavior regarding position.
        -				if ( CKEDITOR.env.ie )
        -					range.setStartAt( lineBreak, CKEDITOR.POSITION_AFTER_END );
        -				else {
        -					// A text node is required by Gecko only to make the cursor blink.
        -					// We need some text inside of it, so the bogus 
        is properly - // created. - doc.createText( '\ufeff' ).insertAfter( lineBreak ); - - // If we are at the end of a block, we must be sure the bogus node is available in that block. - if ( isEndOfBlock ) - lineBreak.getParent().appendBogus(); - - // Now we can remove the text node contents, so the caret doesn't - // stop on it. - lineBreak.getNext().$.nodeValue = ''; - - range.setStartAt( lineBreak.getNext(), CKEDITOR.POSITION_AFTER_START ); - - } - } - - // This collapse guarantees the cursor will be blinking. - range.collapse( true ); - - range.select(); - range.scrollIntoView(); - } - }; - - var plugin = CKEDITOR.plugins.enterkey, - enterBr = plugin.enterBr, - enterBlock = plugin.enterBlock, - headerTagRegex = /^h[1-6]$/; - - function shiftEnter( editor ) { - // Only effective within document. - if ( editor.mode != 'wysiwyg' ) - return false; - - // On SHIFT+ENTER: - // 1. We want to enforce the mode to be respected, instead - // of cloning the current block. (#77) - return enter( editor, editor.config.shiftEnterMode, 1 ); - } - - function enter( editor, mode, forceMode ) { - forceMode = editor.config.forceEnterMode || forceMode; - - // Only effective within document. - if ( editor.mode != 'wysiwyg' ) - return false; - - if ( !mode ) - mode = editor.config.enterMode; - - // Check path block specialities: - // 1. Cannot be a un-splittable element, e.g. table caption; - // 2. Must not be the editable element itself. (blockless) - var path = editor.elementPath(); - if ( !path.isContextFor( 'p' ) ) { - mode = CKEDITOR.ENTER_BR; - forceMode = 1; - } - - editor.fire( 'saveSnapshot' ); // Save undo step. - - if ( mode == CKEDITOR.ENTER_BR ) - enterBr( editor, mode, null, forceMode ); - else - enterBlock( editor, mode, null, forceMode ); - - editor.fire( 'saveSnapshot' ); - - return true; - } - - function getRange( editor ) { - // Get the selection ranges. - var ranges = editor.getSelection().getRanges( true ); - - // Delete the contents of all ranges except the first one. - for ( var i = ranges.length - 1; i > 0; i-- ) { - ranges[ i ].deleteContents(); - } - - // Return the first range. - return ranges[ 0 ]; - } -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - // Base HTML entities. - var htmlbase = 'nbsp,gt,lt,amp'; - - var entities = - // Latin-1 Entities - 'quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' + - 'not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,' + - 'cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,' + - - // Symbols - 'fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,' + - 'alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,' + - 'forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,' + - 'radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,' + - 'equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,' + - 'rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,' + - - // Other Special Characters - 'circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,' + - 'rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,' + - 'euro'; - - // Latin Letters Entities - var latin = 'Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,' + - 'Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,' + - 'Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,' + - 'agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,' + - 'ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,' + - 'otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,' + - 'OElig,oelig,Scaron,scaron,Yuml'; - - // Greek Letters Entities. - var greek = 'Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,' + - 'Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,' + - 'beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,' + - 'omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,' + - 'upsih,piv'; - - // Create a mapping table between one character and its entity form from a list of entity names. - // @param reverse {Boolean} Whether to create a reverse map from the entity string form to an actual character. - function buildTable( entities, reverse ) { - var table = {}, - regex = []; - - // Entities that the browsers DOM don't transform to the final char - // automatically. - var specialTable = { - nbsp: '\u00A0', // IE | FF - shy: '\u00AD', // IE - gt: '\u003E', // IE | FF | -- | Opera - lt: '\u003C', // IE | FF | Safari | Opera - amp: '\u0026', // ALL - apos: '\u0027', // IE - quot: '\u0022' // IE - }; - - entities = entities.replace( /\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g, function( match, entity ) { - var org = reverse ? '&' + entity + ';' : specialTable[ entity ], - result = reverse ? specialTable[ entity ] : '&' + entity + ';'; - - table[ org ] = result; - regex.push( org ); - return ''; - }); - - if ( !reverse && entities ) { - // Transforms the entities string into an array. - entities = entities.split( ',' ); - - // Put all entities inside a DOM element, transforming them to their - // final chars. - var div = document.createElement( 'div' ), - chars; - div.innerHTML = '&' + entities.join( ';&' ) + ';'; - chars = div.innerHTML; - div = null; - - // Add all chars to the table. - for ( var i = 0; i < chars.length; i++ ) { - var charAt = chars.charAt( i ); - table[ charAt ] = '&' + entities[ i ] + ';'; - regex.push( charAt ); - } - } - - table.regex = regex.join( reverse ? '|' : '' ); - - return table; - } - - CKEDITOR.plugins.add( 'entities', { - afterInit: function( editor ) { - var config = editor.config; - - var dataProcessor = editor.dataProcessor, - htmlFilter = dataProcessor && dataProcessor.htmlFilter; - - if ( htmlFilter ) { - // Mandatory HTML base entities. - var selectedEntities = []; - - if ( config.basicEntities !== false ) - selectedEntities.push( htmlbase ); - - if ( config.entities ) { - if ( selectedEntities.length ) - selectedEntities.push( entities ); - - if ( config.entities_latin ) - selectedEntities.push( latin ); - - if ( config.entities_greek ) - selectedEntities.push( greek ); - - if ( config.entities_additional ) - selectedEntities.push( config.entities_additional ); - } - - var entitiesTable = buildTable( selectedEntities.join( ',' ) ); - - // Create the Regex used to find entities in the text, leave it matches nothing if entities are empty. - var entitiesRegex = entitiesTable.regex ? '[' + entitiesTable.regex + ']' : 'a^'; - delete entitiesTable.regex; - - if ( config.entities && config.entities_processNumerical ) - entitiesRegex = '[^ -~]|' + entitiesRegex; - - entitiesRegex = new RegExp( entitiesRegex, 'g' ); - - function getEntity( character ) { - return config.entities_processNumerical == 'force' || !entitiesTable[ character ] ? '&#' + character.charCodeAt( 0 ) + ';' - : entitiesTable[ character ]; - } - - // Decode entities that the browsers has transformed - // at first place. - var baseEntitiesTable = buildTable( [ htmlbase, 'shy' ].join( ',' ), true ), - baseEntitiesRegex = new RegExp( baseEntitiesTable.regex, 'g' ); - - function getChar( character ) { - return baseEntitiesTable[ character ]; - } - - htmlFilter.addRules({ - text: function( text ) { - return text.replace( baseEntitiesRegex, getChar ).replace( entitiesRegex, getEntity ); - } - }); - } - } - }); -})(); - -/** - * Whether to escape basic HTML entities in the document, including: - * - * * `nbsp` - * * `gt` - * * `lt` - * * `amp` - * - * **Note:** It should not be subject to change unless when outputting a non-HTML data format like BBCode. - * - * config.basicEntities = false; - * - * @cfg {Boolean} [basicEntities=true] - * @member CKEDITOR.config - */ -CKEDITOR.config.basicEntities = true; - -/** - * Whether to use HTML entities in the output. - * - * config.entities = false; - * - * @cfg {Boolean} [entities=true] - * @member CKEDITOR.config - */ -CKEDITOR.config.entities = true; - -/** - * Whether to convert some Latin characters (Latin alphabet No. 1, ISO 8859-1) - * to HTML entities. The list of entities can be found in the - * [W3C HTML 4.01 Specification, section 24.2.1](http://www.w3.org/TR/html4/sgml/entities.html#h-24.2.1). - * - * config.entities_latin = false; - * - * @cfg {Boolean} [entities_latin=true] - * @member CKEDITOR.config - */ -CKEDITOR.config.entities_latin = true; - -/** - * Whether to convert some symbols, mathematical symbols, and Greek letters to - * HTML entities. This may be more relevant for users typing text written in Greek. - * The list of entities can be found in the - * [W3C HTML 4.01 Specification, section 24.3.1(http://www.w3.org/TR/html4/sgml/entities.html#h-24.3.1). - * - * config.entities_greek = false; - * - * @cfg {Boolean} [entities_greek=true] - * @member CKEDITOR.config - */ -CKEDITOR.config.entities_greek = true; - -/** - * Whether to convert all remaining characters not included in the ASCII - * character table to their relative decimal numeric representation of HTML entity. - * When set to `force`, it will convert all entities into this format. - * - * For example the phrase `'This is Chinese: 汉语.'` is output - * as `'This is Chinese: 汉语.'` - * - * config.entities_processNumerical = true; - * config.entities_processNumerical = 'force'; // Converts from ' ' into ' '; - * - * @cfg {Boolean/String} [entities_processNumerical=false] - * @member CKEDITOR.config - */ - -/** - * A comma separated list of additional entities to be used. Entity names - * or numbers must be used in a form that excludes the `'&'` prefix and the `';'` ending. - * - * config.entities_additional = '#1049'; // Adds Cyrillic capital letter Short I (Й). - * - * @cfg {String} [entities_additional='#39' (The single quote (') character)] - * @member CKEDITOR.config - */ -CKEDITOR.config.entities_additional = '#39'; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'popup' ); - -CKEDITOR.tools.extend( CKEDITOR.editor.prototype, { - /** - * Opens Browser in a popup. The `width` and `height` parameters accept - * numbers (pixels) or percent (of screen size) values. - * - * @member CKEDITOR.editor - * @param {String} url The url of the external file browser. - * @param {Number/String} [width='80%'] Popup window width. - * @param {Number/String} [height='70%'] Popup window height. - * @param {String} [options='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes'] - * Popup window features. - */ - popup: function( url, width, height, options ) { - width = width || '80%'; - height = height || '70%'; - - if ( typeof width == 'string' && width.length > 1 && width.substr( width.length - 1, 1 ) == '%' ) - width = parseInt( window.screen.width * parseInt( width, 10 ) / 100, 10 ); - - if ( typeof height == 'string' && height.length > 1 && height.substr( height.length - 1, 1 ) == '%' ) - height = parseInt( window.screen.height * parseInt( height, 10 ) / 100, 10 ); - - if ( width < 640 ) - width = 640; - - if ( height < 420 ) - height = 420; - - var top = parseInt( ( window.screen.height - height ) / 2, 10 ), - left = parseInt( ( window.screen.width - width ) / 2, 10 ); - - options = ( options || 'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes' ) + ',width=' + width + - ',height=' + height + - ',top=' + top + - ',left=' + left; - - var popupWindow = window.open( '', null, options, true ); - - // Blocked by a popup blocker. - if ( !popupWindow ) - return false; - - try { - // Chrome is problematic with moveTo/resizeTo, but it's not really needed here (#8855). - var ua = navigator.userAgent.toLowerCase(); - if ( ua.indexOf( ' chrome/' ) == -1 ) { - popupWindow.moveTo( left, top ); - popupWindow.resizeTo( width, height ); - } - popupWindow.focus(); - popupWindow.location.href = url; - } catch ( e ) { - popupWindow = window.open( url, null, options, true ); - } - - return true; - } -}); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview The "filebrowser" plugin that adds support for file uploads and - * browsing. - * - * When a file is uploaded or selected inside the file browser, its URL is - * inserted automatically into a field defined in the filebrowser - * attribute. In order to specify a field that should be updated, pass the tab ID and - * the element ID, separated with a colon.

        - * - * Example 1: (Browse) - * - *
        - * {
        - * 	type : 'button',
        - * 	id : 'browse',
        - * 	filebrowser : 'tabId:elementId',
        - * 	label : editor.lang.common.browseServer
        - * }
        - * 
        - * - * If you set the filebrowser attribute for an element other than - * the fileButton, the Browse action will be triggered.

        - * - * Example 2: (Quick Upload) - * - *
        - * {
        - * 	type : 'fileButton',
        - * 	id : 'uploadButton',
        - * 	filebrowser : 'tabId:elementId',
        - * 	label : editor.lang.common.uploadSubmit,
        - * 	'for' : [ 'upload', 'upload' ]
        - * }
        - * 
        - * - * If you set the filebrowser attribute for a fileButton - * element, the QuickUpload action will be executed.

        - * - * The filebrowser plugin also supports more advanced configuration performed through - * a JavaScript object. - * - * The following settings are supported: - * - *
          - *
        • actionBrowse or QuickUpload.
        • - *
        • target – the field to update in the tabId:elementId format.
        • - *
        • params – additional arguments to be passed to the server connector (optional).
        • - *
        • onSelect – a function to execute when the file is selected/uploaded (optional).
        • - *
        • url – the URL to be called (optional).
        • - *
        - * - * Example 3: (Quick Upload) - * - *
        - * {
        - * 	type : 'fileButton',
        - * 	label : editor.lang.common.uploadSubmit,
        - * 	id : 'buttonId',
        - * 	filebrowser :
        - * 	{
        - * 		action : 'QuickUpload', // required
        - * 		target : 'tab1:elementId', // required
        - * 		params : // optional
        - * 		{
        - * 			type : 'Files',
        - * 			currentFolder : '/folder/'
        - * 		},
        - * 		onSelect : function( fileUrl, errorMessage ) // optional
        - * 		{
        - * 			// Do not call the built-in selectFuntion.
        - * 			// return false;
        - * 		}
        - * 	},
        - * 	'for' : [ 'tab1', 'myFile' ]
        - * }
        - * 
        - * - * Suppose you have a file element with an ID of myFile, a text - * field with an ID of elementId and a fileButton. - * If the filebowser.url attribute is not specified explicitly, - * the form action will be set to filebrowser[DialogWindowName]UploadUrl - * or, if not specified, to filebrowserUploadUrl. Additional parameters - * from the params object will be added to the query string. It is - * possible to create your own uploadHandler and cancel the built-in - * updateTargetElement command.

        - * - * Example 4: (Browse) - * - *
        - * {
        - * 	type : 'button',
        - * 	id : 'buttonId',
        - * 	label : editor.lang.common.browseServer,
        - * 	filebrowser :
        - * 	{
        - * 		action : 'Browse',
        - * 		url : '/ckfinder/ckfinder.html&type=Images',
        - * 		target : 'tab1:elementId'
        - * 	}
        - * }
        - * 
        - * - * In this example, when the button is pressed, the file browser will be opened in a - * popup window. If you do not specify the filebrowser.url attribute, - * filebrowser[DialogName]BrowseUrl or - * filebrowserBrowseUrl will be used. After selecting a file in the file - * browser, an element with an ID of elementId will be updated. Just - * like in the third example, a custom onSelect function may be defined. - */ - -(function() { - // Adds (additional) arguments to given url. - // - // @param {String} - // url The url. - // @param {Object} - // params Additional parameters. - function addQueryString( url, params ) { - var queryString = []; - - if ( !params ) - return url; - else { - for ( var i in params ) - queryString.push( i + "=" + encodeURIComponent( params[ i ] ) ); - } - - return url + ( ( url.indexOf( "?" ) != -1 ) ? "&" : "?" ) + queryString.join( "&" ); - } - - // Make a string's first character uppercase. - // - // @param {String} - // str String. - function ucFirst( str ) { - str += ''; - var f = str.charAt( 0 ).toUpperCase(); - return f + str.substr( 1 ); - } - - // The onlick function assigned to the 'Browse Server' button. Opens the - // file browser and updates target field when file is selected. - // - // @param {CKEDITOR.event} - // evt The event object. - function browseServer( evt ) { - var dialog = this.getDialog(); - var editor = dialog.getParentEditor(); - - editor._.filebrowserSe = this; - - var width = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowWidth' ] || editor.config.filebrowserWindowWidth || '80%'; - var height = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowHeight' ] || editor.config.filebrowserWindowHeight || '70%'; - - var params = this.filebrowser.params || {}; - params.CKEditor = editor.name; - params.CKEditorFuncNum = editor._.filebrowserFn; - if ( !params.langCode ) - params.langCode = editor.langCode; - - var url = addQueryString( this.filebrowser.url, params ); - // TODO: V4: Remove backward compatibility (#8163). - editor.popup( url, width, height, editor.config.filebrowserWindowFeatures || editor.config.fileBrowserWindowFeatures ); - } - - // The onlick function assigned to the 'Upload' button. Makes the final - // decision whether form is really submitted and updates target field when - // file is uploaded. - // - // @param {CKEDITOR.event} - // evt The event object. - function uploadFile( evt ) { - var dialog = this.getDialog(); - var editor = dialog.getParentEditor(); - - editor._.filebrowserSe = this; - - // If user didn't select the file, stop the upload. - if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getInputElement().$.value ) - return false; - - if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getAction() ) - return false; - - return true; - } - - // Setups the file element. - // - // @param {CKEDITOR.ui.dialog.file} - // fileInput The file element used during file upload. - // @param {Object} - // filebrowser Object containing filebrowser settings assigned to - // the fileButton associated with this file element. - function setupFileElement( editor, fileInput, filebrowser ) { - var params = filebrowser.params || {}; - params.CKEditor = editor.name; - params.CKEditorFuncNum = editor._.filebrowserFn; - if ( !params.langCode ) - params.langCode = editor.langCode; - - fileInput.action = addQueryString( filebrowser.url, params ); - fileInput.filebrowser = filebrowser; - } - - // Traverse through the content definition and attach filebrowser to - // elements with 'filebrowser' attribute. - // - // @param String - // dialogName Dialog name. - // @param {CKEDITOR.dialog.definitionObject} - // definition Dialog definition. - // @param {Array} - // elements Array of {@link CKEDITOR.dialog.definition.content} - // objects. - function attachFileBrowser( editor, dialogName, definition, elements ) { - if ( !elements || !elements.length ) - return; - - var element, fileInput; - - for ( var i = elements.length; i--; ) { - element = elements[ i ]; - - if ( element.type == 'hbox' || element.type == 'vbox' || element.type == 'fieldset' ) - attachFileBrowser( editor, dialogName, definition, element.children ); - - if ( !element.filebrowser ) - continue; - - if ( typeof element.filebrowser == 'string' ) { - var fb = { - action: ( element.type == 'fileButton' ) ? 'QuickUpload' : 'Browse', - target: element.filebrowser - }; - element.filebrowser = fb; - } - - if ( element.filebrowser.action == 'Browse' ) { - var url = element.filebrowser.url; - if ( url === undefined ) { - url = editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'BrowseUrl' ]; - if ( url === undefined ) - url = editor.config.filebrowserBrowseUrl; - } - - if ( url ) { - element.onClick = browseServer; - element.filebrowser.url = url; - element.hidden = false; - } - } else if ( element.filebrowser.action == 'QuickUpload' && element[ 'for' ] ) { - url = element.filebrowser.url; - if ( url === undefined ) { - url = editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'UploadUrl' ]; - if ( url === undefined ) - url = editor.config.filebrowserUploadUrl; - } - - if ( url ) { - var onClick = element.onClick; - element.onClick = function( evt ) { - // "element" here means the definition object, so we need to find the correct - // button to scope the event call - var sender = evt.sender; - if ( onClick && onClick.call( sender, evt ) === false ) - return false; - - return uploadFile.call( sender, evt ); - }; - - element.filebrowser.url = url; - element.hidden = false; - setupFileElement( editor, definition.getContents( element[ 'for' ][ 0 ] ).get( element[ 'for' ][ 1 ] ), element.filebrowser ); - } - } - } - } - - // Updates the target element with the url of uploaded/selected file. - // - // @param {String} - // url The url of a file. - function updateTargetElement( url, sourceElement ) { - var dialog = sourceElement.getDialog(); - var targetElement = sourceElement.filebrowser.target || null; - - // If there is a reference to targetElement, update it. - if ( targetElement ) { - var target = targetElement.split( ':' ); - var element = dialog.getContentElement( target[ 0 ], target[ 1 ] ); - if ( element ) { - element.setValue( url ); - dialog.selectPage( target[ 0 ] ); - } - } - } - - // Returns true if filebrowser is configured in one of the elements. - // - // @param {CKEDITOR.dialog.definitionObject} - // definition Dialog definition. - // @param String - // tabId The tab id where element(s) can be found. - // @param String - // elementId The element id (or ids, separated with a semicolon) to check. - function isConfigured( definition, tabId, elementId ) { - if ( elementId.indexOf( ";" ) !== -1 ) { - var ids = elementId.split( ";" ); - for ( var i = 0; i < ids.length; i++ ) { - if ( isConfigured( definition, tabId, ids[ i ] ) ) - return true; - } - return false; - } - - var elementFileBrowser = definition.getContents( tabId ).get( elementId ).filebrowser; - return ( elementFileBrowser && elementFileBrowser.url ); - } - - function setUrl( fileUrl, data ) { - var dialog = this._.filebrowserSe.getDialog(), - targetInput = this._.filebrowserSe[ 'for' ], - onSelect = this._.filebrowserSe.filebrowser.onSelect; - - if ( targetInput ) - dialog.getContentElement( targetInput[ 0 ], targetInput[ 1 ] ).reset(); - - if ( typeof data == 'function' && data.call( this._.filebrowserSe ) === false ) - return; - - if ( onSelect && onSelect.call( this._.filebrowserSe, fileUrl, data ) === false ) - return; - - // The "data" argument may be used to pass the error message to the editor. - if ( typeof data == 'string' && data ) - alert( data ); - - if ( fileUrl ) - updateTargetElement( fileUrl, this._.filebrowserSe ); - } - - CKEDITOR.plugins.add( 'filebrowser', { - requires: 'popup', - init: function( editor, pluginPath ) { - editor._.filebrowserFn = CKEDITOR.tools.addFunction( setUrl, editor ); - editor.on( 'destroy', function() { - CKEDITOR.tools.removeFunction( this._.filebrowserFn ); - }); - } - }); - - CKEDITOR.on( 'dialogDefinition', function( evt ) { - var definition = evt.data.definition, - element; - // Associate filebrowser to elements with 'filebrowser' attribute. - for ( var i = 0; i < definition.contents.length; ++i ) { - if ( ( element = definition.contents[ i ] ) ) { - attachFileBrowser( evt.editor, evt.data.name, definition, element.elements ); - if ( element.hidden && element.filebrowser ) { - element.hidden = !isConfigured( definition, element[ 'id' ], element.filebrowser ); - } - } - } - }); - -})(); - -/** - * The location of an external file browser that should be launched when the **Browse Server** - * button is pressed. If configured, the **Browse Server** button will appear in the - * **Link**, **Image**, and **Flash** dialog windows. - * - * See the [File Browser/Uploader](http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader\)) documentation. - * - * config.filebrowserBrowseUrl = '/browser/browse.php'; - * - * @since 3.0 - * @cfg {String} [filebrowserBrowseUrl='' (empty string = disabled)] - * @member CKEDITOR.config - */ - -/** - * The location of the script that handles file uploads. - * If set, the **Upload** tab will appear in the **Link**, **Image**, - * and **Flash** dialog windows. - * - * See the [File Browser/Uploader](http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader\)) documentation. - * - * config.filebrowserUploadUrl = '/uploader/upload.php'; - * - * @since 3.0 - * @cfg {String} [filebrowserUploadUrl='' (empty string = disabled)] - * @member CKEDITOR.config - */ - -/** - * The location of an external file browser that should be launched when the **Browse Server** - * button is pressed in the **Image** dialog window. - * - * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserBrowseUrl}. - * - * config.filebrowserImageBrowseUrl = '/browser/browse.php?type=Images'; - * - * @since 3.0 - * @cfg {String} [filebrowserImageBrowseUrl='' (empty string = disabled)] - * @member CKEDITOR.config - */ - -/** - * The location of an external file browser that should be launched when the **Browse Server** - * button is pressed in the **Flash** dialog window. - * - * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserBrowseUrl}. - * - * config.filebrowserFlashBrowseUrl = '/browser/browse.php?type=Flash'; - * - * @since 3.0 - * @cfg {String} [filebrowserFlashBrowseUrl='' (empty string = disabled)] - * @member CKEDITOR.config - */ - -/** - * The location of the script that handles file uploads in the **Image** dialog window. - * - * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserUploadUrl}. - * - * config.filebrowserImageUploadUrl = '/uploader/upload.php?type=Images'; - * - * @since 3.0 - * @cfg {String} [filebrowserImageUploadUrl='' (empty string = disabled)] - * @member CKEDITOR.config - */ - -/** - * The location of the script that handles file uploads in the **Flash** dialog window. - * - * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserUploadUrl}. - * - * config.filebrowserFlashUploadUrl = '/uploader/upload.php?type=Flash'; - * - * @since 3.0 - * @cfg {String} filebrowserFlashUploadUrl='' (empty string = disabled)] - * @member CKEDITOR.config - */ - -/** - * The location of an external file browser that should be launched when the **Browse Server** - * button is pressed in the **Link** tab of the **Image** dialog window. - * - * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserBrowseUrl}. - * - * config.filebrowserImageBrowseLinkUrl = '/browser/browse.php'; - * - * @since 3.2 - * @cfg {String} [filebrowserImageBrowseLinkUrl='' (empty string = disabled)] - * @member CKEDITOR.config - */ - -/** - * The features to use in the file browser popup window. - * - * config.filebrowserWindowFeatures = 'resizable=yes,scrollbars=no'; - * - * @since 3.4.1 - * @cfg {String} [filebrowserWindowFeatures='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes'] - * @member CKEDITOR.config - */ - -/** - * The width of the file browser popup window. It can be a number denoting a value in - * pixels or a percent string. - * - * config.filebrowserWindowWidth = 750; - * - * config.filebrowserWindowWidth = '50%'; - * - * @cfg {Number/String} [filebrowserWindowWidth='80%'] - * @member CKEDITOR.config - */ - -/** - * The height of the file browser popup window. It can be a number denoting a value in - * pixels or a percent string. - * - * config.filebrowserWindowHeight = 580; - * - * config.filebrowserWindowHeight = '50%'; - * - * @cfg {Number/String} [filebrowserWindowHeight='70%'] - * @member CKEDITOR.config - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'find', { - requires: 'dialog', - init: function( editor ) { - var findCommand = editor.addCommand( 'find', new CKEDITOR.dialogCommand( 'find' ) ); - findCommand.canUndo = false; - findCommand.readOnly = 1; - - var replaceCommand = editor.addCommand( 'replace', new CKEDITOR.dialogCommand( 'replace' ) ); - replaceCommand.canUndo = false; - - if ( editor.ui.addButton ) { - editor.ui.addButton( 'Find', { - label: editor.lang.find.find, - command: 'find', - toolbar: 'find,10' - }); - - editor.ui.addButton( 'Replace', { - label: editor.lang.find.replace, - command: 'replace', - toolbar: 'find,20' - }); - } - - CKEDITOR.dialog.add( 'find', this.path + 'dialogs/find.js' ); - CKEDITOR.dialog.add( 'replace', this.path + 'dialogs/find.js' ); - } -}); - -/** - * Defines the style to be used to highlight results with the find dialog. - * - * // Highlight search results with blue on yellow. - * config.find_highlight = { - * element: 'span', - * styles: { 'background-color': '#ff0', color: '#00f' } - * }; - * - * @cfg - * @member CKEDITOR.config - */ -CKEDITOR.config.find_highlight = { - element: 'span', styles: { 'background-color': '#004', color: '#fff' } }; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - var cssStyle = CKEDITOR.htmlParser.cssStyle, - cssLength = CKEDITOR.tools.cssLength; - - var cssLengthRegex = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i; - - // Replacing the former CSS length value with the later one, with - // adjustment to the length unit. - function replaceCssLength( length1, length2 ) { - var parts1 = cssLengthRegex.exec( length1 ), - parts2 = cssLengthRegex.exec( length2 ); - - // Omit pixel length unit when necessary, - // e.g. replaceCssLength( 10, '20px' ) -> 20 - if ( parts1 ) { - if ( !parts1[ 2 ] && parts2[ 2 ] == 'px' ) - return parts2[ 1 ]; - if ( parts1[ 2 ] == 'px' && !parts2[ 2 ] ) - return parts2[ 1 ] + 'px'; - } - - return length2; - } - - var htmlFilterRules = { - elements: { - $: function( element ) { - var attributes = element.attributes, - realHtml = attributes && attributes[ 'data-cke-realelement' ], - realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ), - realElement = realFragment && realFragment.children[ 0 ]; - - // Width/height in the fake object are subjected to clone into the real element. - if ( realElement && element.attributes[ 'data-cke-resizable' ] ) { - var styles = new cssStyle( element ).rules, - realAttrs = realElement.attributes, - width = styles.width, - height = styles.height; - - width && ( realAttrs.width = replaceCssLength( realAttrs.width, width ) ); - height && ( realAttrs.height = replaceCssLength( realAttrs.height, height ) ); - } - - return realElement; - } - } - }; - - var plugin = CKEDITOR.plugins.add( 'fakeobjects', { - - afterInit: function( editor ) { - var dataProcessor = editor.dataProcessor, - htmlFilter = dataProcessor && dataProcessor.htmlFilter; - - if ( htmlFilter ) - htmlFilter.addRules( htmlFilterRules ); - } - }); - - /** - * @member CKEDITOR.editor - * @todo - */ - CKEDITOR.editor.prototype.createFakeElement = function( realElement, className, realElementType, isResizable ) { - var lang = this.lang.fakeobjects, - label = lang[ realElementType ] || lang.unknown; - - var attributes = { - 'class': className, - 'data-cke-realelement': encodeURIComponent( realElement.getOuterHtml() ), - 'data-cke-real-node-type': realElement.type, - alt: label, - title: label, - align: realElement.getAttribute( 'align' ) || '' - }; - - // Do not set "src" on high-contrast so the alt text is displayed. (#8945) - if ( !CKEDITOR.env.hc ) - attributes.src = CKEDITOR.getUrl( plugin.path + 'images/spacer.gif' ); - - if ( realElementType ) - attributes[ 'data-cke-real-element-type' ] = realElementType; - - if ( isResizable ) { - attributes[ 'data-cke-resizable' ] = isResizable; - - var fakeStyle = new cssStyle(); - - var width = realElement.getAttribute( 'width' ), - height = realElement.getAttribute( 'height' ); - - width && ( fakeStyle.rules.width = cssLength( width ) ); - height && ( fakeStyle.rules.height = cssLength( height ) ); - fakeStyle.populate( attributes ); - } - - return this.document.createElement( 'img', { attributes: attributes } ); - }; - - /** - * @member CKEDITOR.editor - * @todo - */ - CKEDITOR.editor.prototype.createFakeParserElement = function( realElement, className, realElementType, isResizable ) { - var lang = this.lang.fakeobjects, - label = lang[ realElementType ] || lang.unknown, - html; - - var writer = new CKEDITOR.htmlParser.basicWriter(); - realElement.writeHtml( writer ); - html = writer.getHtml(); - - var attributes = { - 'class': className, - 'data-cke-realelement': encodeURIComponent( html ), - 'data-cke-real-node-type': realElement.type, - alt: label, - title: label, - align: realElement.attributes.align || '' - }; - - // Do not set "src" on high-contrast so the alt text is displayed. (#8945) - if ( !CKEDITOR.env.hc ) - attributes.src = CKEDITOR.getUrl( plugin.path + 'images/spacer.gif' ); - - if ( realElementType ) - attributes[ 'data-cke-real-element-type' ] = realElementType; - - if ( isResizable ) { - attributes[ 'data-cke-resizable' ] = isResizable; - var realAttrs = realElement.attributes, - fakeStyle = new cssStyle(); - - var width = realAttrs.width, - height = realAttrs.height; - - width != undefined && ( fakeStyle.rules.width = cssLength( width ) ); - height != undefined && ( fakeStyle.rules.height = cssLength( height ) ); - fakeStyle.populate( attributes ); - } - - return new CKEDITOR.htmlParser.element( 'img', attributes ); - }; - - /** - * @member CKEDITOR.editor - * @todo - */ - CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement ) { - if ( fakeElement.data( 'cke-real-node-type' ) != CKEDITOR.NODE_ELEMENT ) - return null; - - var element = CKEDITOR.dom.element.createFromHtml( decodeURIComponent( fakeElement.data( 'cke-realelement' ) ), this.document ); - - if ( fakeElement.data( 'cke-resizable' ) ) { - var width = fakeElement.getStyle( 'width' ), - height = fakeElement.getStyle( 'height' ); - - width && element.setAttribute( 'width', replaceCssLength( element.getAttribute( 'width' ), width ) ); - height && element.setAttribute( 'height', replaceCssLength( element.getAttribute( 'height' ), height ) ); - } - - return element; - }; - -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - var flashFilenameRegex = /\.swf(?:$|\?)/i; - - function isFlashEmbed( element ) { - var attributes = element.attributes; - - return ( attributes.type == 'application/x-shockwave-flash' || flashFilenameRegex.test( attributes.src || '' ) ); - } - - function createFakeElement( editor, realElement ) { - return editor.createFakeParserElement( realElement, 'cke_flash', 'flash', true ); - } - - CKEDITOR.plugins.add( 'flash', { - requires: 'dialog,fakeobjects', - onLoad: function() { - CKEDITOR.addCss( 'img.cke_flash' + - '{' + - 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/placeholder.png' ) + ');' + - 'background-position: center center;' + - 'background-repeat: no-repeat;' + - 'border: 1px solid #a9a9a9;' + - 'width: 80px;' + - 'height: 80px;' + - '}' - ); - - }, - init: function( editor ) { - var allowed = 'object[classid,codebase,height,hspace,vspace,width];' + - 'param[name,value];' + - 'embed[height,hspace,pluginspage,src,type,vspace,width]'; - - if ( CKEDITOR.dialog.isTabEnabled( editor, 'flash', 'properties' ) ) - allowed += ';object[align]; embed[allowscriptaccess,quality,scale,wmode]'; - if ( CKEDITOR.dialog.isTabEnabled( editor, 'flash', 'advanced' ) ) - allowed += ';object[id]{*}; embed[bgcolor]{*}(*)'; - - editor.addCommand( 'flash', new CKEDITOR.dialogCommand( 'flash', { - allowedContent: allowed, - requiredContent: 'embed' - } ) ); - editor.ui.addButton && editor.ui.addButton( 'Flash', { - label: editor.lang.common.flash, - command: 'flash', - toolbar: 'insert,20' - }); - CKEDITOR.dialog.add( 'flash', this.path + 'dialogs/flash.js' ); - - // If the "menu" plugin is loaded, register the menu items. - if ( editor.addMenuItems ) { - editor.addMenuItems({ - flash: { - label: editor.lang.flash.properties, - command: 'flash', - group: 'flash' - } - }); - } - - editor.on( 'doubleclick', function( evt ) { - var element = evt.data.element; - - if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'flash' ) - evt.data.dialog = 'flash'; - }); - - // If the "contextmenu" plugin is loaded, register the listeners. - if ( editor.contextMenu ) { - editor.contextMenu.addListener( function( element, selection ) { - if ( element && element.is( 'img' ) && !element.isReadOnly() && element.data( 'cke-real-element-type' ) == 'flash' ) - return { flash: CKEDITOR.TRISTATE_OFF }; - }); - } - }, - - afterInit: function( editor ) { - var dataProcessor = editor.dataProcessor, - dataFilter = dataProcessor && dataProcessor.dataFilter; - - if ( dataFilter ) { - dataFilter.addRules({ - elements: { - 'cke:object': function( element ) { - var attributes = element.attributes, - classId = attributes.classid && String( attributes.classid ).toLowerCase(); - - if ( !classId && !isFlashEmbed( element ) ) { - // Look for the inner - for ( var i = 0; i < element.children.length; i++ ) { - if ( element.children[ i ].name == 'cke:embed' ) { - if ( !isFlashEmbed( element.children[ i ] ) ) - return null; - - return createFakeElement( editor, element ); - } - } - return null; - } - - return createFakeElement( editor, element ); - }, - - 'cke:embed': function( element ) { - if ( !isFlashEmbed( element ) ) - return null; - - return createFakeElement( editor, element ); - } - } - }, 5 ); - } - } - }); -})(); - -CKEDITOR.tools.extend( CKEDITOR.config, { - /** - * Save as `` tag only. This tag is unrecommended. - * - * @cfg {Boolean} [flashEmbedTagOnly=false] - * @member CKEDITOR.config - */ - flashEmbedTagOnly: false, - - /** - * Add `` tag as alternative: ``. - * - * @cfg {Boolean} [flashAddEmbedTag=false] - * @member CKEDITOR.config - */ - flashAddEmbedTag: true, - - /** - * Use {@link #flashEmbedTagOnly} and {@link #flashAddEmbedTag} values on edit. - * - * @cfg {Boolean} [flashConvertOnEdit=false] - * @member CKEDITOR.config - */ - flashConvertOnEdit: false -}); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - var floatSpaceTpl = CKEDITOR.addTemplate( 'floatcontainer', '' + - '
        ' + - '' + - '
        ' + - '
  • ' ); - - CKEDITOR.plugins.add( 'floatingspace', { - init: function( editor ) { - // Add listener with lower priority than that in themedui creator. - // Thereby floatingspace will be created only if themedui wasn't used. - editor.on( 'loaded', function() { - attach( editor ); - }, null, null, 20 ); - } - }); - - var win = CKEDITOR.document.getWindow(); - var pixelate = CKEDITOR.tools.cssLength; - - function scrollOffset( side ) { - var pageOffset = side == 'left' ? 'pageXOffset' : 'pageYOffset', - docScrollOffset = side == 'left' ? 'scrollLeft' : 'scrollTop'; - return ( pageOffset in win.$ ) ? win.$[ pageOffset ] : CKEDITOR.document.$.documentElement[ docScrollOffset ]; - } - - function attach( editor ) { - // Indicates the vertical aligning mode. - var mode; - - // Allow minor adjustments of the float space from custom configs. - var config = editor.config; - var dockedOffsetX = config.floatSpaceDockedOffsetX || 0, - dockedOffsetY = config.floatSpaceDockedOffsetY || 0, - pinnedOffsetX = config.floatSpacePinnedOffsetX || 0, - pinnedOffsetY = config.floatSpacePinnedOffsetY || 0; - - var layout = function( evt ) { - // Update the float space position. - function updatePos( pos, prop, val ) { - floatSpace.setStyle( prop, pixelate( val ) ); - floatSpace.setStyle( 'position', pos ); - } - - // Change the current mode and update float space position accordingly. - function changeMode( newMode ) { - var editorPos = editable.getDocumentPosition(); - switch ( newMode ) { - case 'top': - updatePos( 'absolute', 'top', editorPos.y - spaceHeight - dockedOffsetY ); - break; - case 'pin': - updatePos( 'fixed', 'top', pinnedOffsetY ); - break; - case 'bottom': - updatePos( 'absolute', 'top', editorPos.y + ( editorRect.height || editorRect.bottom - editorRect.top ) + dockedOffsetY ); - break; - } - - mode = newMode; - } - - var editable = editor.editable(); - // #10112 Do not fail on editable-less editor. - if ( !editable ) - return; - - // Show up the space on focus gain. - evt.name == 'focus' && floatSpace.show(); - - // Reset the horizontal position for below measurement. - floatSpace.removeStyle( 'left' ); - floatSpace.removeStyle( 'right' ); - - // Compute the screen position from the TextRectangle object would - // be very simple, even though the "width"/"height" property is not - // available for all, it's safe to figure that out from the rest. - - // http://help.dottoro.com/ljgupwlp.php - var spaceRect = floatSpace.getClientRect(), - editorRect = editable.getClientRect(), - spaceHeight = spaceRect.height, - pageScrollX = scrollOffset( 'left' ); - - // We initialize it as pin mode. - if ( !mode ) { - mode = 'pin'; - changeMode( 'pin' ); - // Call for a refresh to the actual layout. - layout( evt ); - return; - } - // Pin the space element while page scrolls down to pull it off the view port. - else if ( mode == 'top' && spaceRect.top < pinnedOffsetY ) - changeMode( 'pin' ); - else if ( mode == 'pin' ) { - // Restore into docked top from pin. - if ( editorRect.top > dockedOffsetY + spaceHeight ) - changeMode( 'top' ); - // Docked the space below editable when page scrolls down and the space masks - // the final few lines of the content. - else if ( editorRect.bottom - spaceRect.bottom < spaceHeight ) - changeMode( 'bottom' ); - } else if ( mode == 'bottom' ) { - // Jump to top mode. ( with pin mode skipped) - if ( editorRect.top > dockedOffsetY + spaceHeight ) - changeMode( 'top' ); - // Restore into pin mode from docked bottom. - else if ( editorRect.bottom > 2 * spaceHeight + pinnedOffsetY ) - changeMode( 'pin' ); - } - - var viewRect = win.getViewPaneSize(); - var mid = viewRect.width / 2; - var alignSide = - ( editorRect.left > 0 && editorRect.right < viewRect.width && - editorRect.width > spaceRect.width ) ? - ( editor.config.contentsLangDirection == 'rtl' ? 'right' : 'left' ) : - ( mid - editorRect.left > editorRect.right - mid ? 'left' : - 'right' ), - offset; - - // (#9769) If viewport width is less than space width, - // make sure space never cross the left boundary of the viewport. - // In other words: top-left corner of the space is always visible. - if ( spaceRect.width > viewRect.width ) { - alignSide = 'left'; - offset = 0; - } - else { - if ( alignSide == 'left' ) { - // If the space rect fits into viewport, align it - // to the left edge of editor: - // - // +------------------------ Viewport -+ - // | | - // | +------------- Space -+ | - // | | | | - // | +---------------------+ | - // | +------------------ Editor -+ | - // | | | | - // - if ( editorRect.left > 0 ) - offset = editorRect.left; - - // If the left part of the editor is cut off by the left - // edge of the viewport, stick the space to the viewport: - // - // +------------------------ Viewport -+ - // | | - // +---------------- Space -+ | - // | | | - // +------------------------+ | - // +----|------------- Editor -+ | - // | | | | - // - else - offset = 0; - } - else { - // If the space rect fits into viewport, align it - // to the right edge of editor: - // - // +------------------------ Viewport -+ - // | | - // | +------------- Space -+ | - // | | | | - // | +---------------------+ | - // | +------------------ Editor -+ | - // | | | | - // - if ( editorRect.right < viewRect.width ) - offset = viewRect.width - editorRect.right; - - // If the right part of the editor is cut off by the right - // edge of the viewport, stick the space to the viewport: - // - // +------------------------ Viewport -+ - // | | - // | +------------- Space -+ - // | | | - // | +---------------------+ - // | +-----------------|- Editor -+ - // | | | | - // - else - offset = 0; - } - - // (#9769) Finally, stick the space to the opposite side of - // the viewport when it's cut off horizontally on the left/right - // side like below. - // - // This trick reveals cut off space in some edge cases and - // hence it improves accessibility. - // - // +------------------------ Viewport -+ - // | | - // | +--------------------|-- Space -+ - // | | | | - // | +--------------------|----------+ - // | +------- Editor -+ | - // | | | | - // - // becomes: - // - // +------------------------ Viewport -+ - // | | - // | +----------------------- Space -+ - // | | | - // | +-------------------------------+ - // | +------- Editor -+ | - // | | | | - // - if ( offset + spaceRect.width > viewRect.width ) { - alignSide = alignSide == 'left' ? 'right' : 'left'; - offset = 0; - } - } - - // Pin mode is fixed, so don't include scroll-x. - // (#9903) For mode is "top" or "bottom", add opposite scroll-x for right-aligned space. - var scroll = mode == 'pin' ? 0 : alignSide == 'left' ? pageScrollX : -pageScrollX; - - floatSpace.setStyle( alignSide, pixelate( ( mode == 'pin' ? pinnedOffsetX : dockedOffsetX ) + offset + scroll ) ); - }; - - var body = CKEDITOR.document.getBody(); - - - var vars = { - id : editor.id, - name: editor.name, - langDir: editor.lang.dir, - langCode: editor.langCode - }; - - // Get the HTML for the predefined spaces. - var topHtml = editor.fire( 'uiSpace', { space: 'top', html: '' } ).html; - if ( topHtml ) { - var floatSpace = body.append( CKEDITOR.dom.element.createFromHtml( floatSpaceTpl.output( CKEDITOR.tools.extend({ - topId: editor.ui.spaceId( 'top' ), - content: topHtml, - style: 'display:none;z-index:' + ( editor.config.baseFloatZIndex - 1 ) - }, vars ) ) ) ); - - // There's no need for the floatSpace to be selectable. - floatSpace.unselectable(); - - // Prevent clicking on non-buttons area of the space from blurring editor. - floatSpace.on( 'mousedown', function( evt ) { - evt = evt.data; - if ( !evt.getTarget().hasAscendant( 'a', 1 ) ) - evt.preventDefault(); - }); - - editor.on( 'focus', function( evt ) { - layout( evt ); - win.on( 'scroll', layout ); - win.on( 'resize', layout ); - }); - - editor.on( 'blur', function() { - floatSpace.hide(); - win.removeListener( 'scroll', layout ); - win.removeListener( 'resize', layout ); - }); - - editor.on( 'destroy', function() { - win.removeListener( 'scroll', layout ); - win.removeListener( 'resize', layout ); - floatSpace.clearCustomData(); - floatSpace.remove(); - }); - - // Handle initial focus. - if ( editor.focusManager.hasFocus ) - floatSpace.show(); - - // Register this UI space to the focus manager. - editor.focusManager.add( floatSpace, 1 ); - } - } - -})(); - -/** - * Along with {@link #floatSpaceDockedOffsetY} it defines the - * amount of offset (in pixels) between float space and the editable left/right - * boundaries when space element is docked at either side of the editable. - * - * config.floatSpaceDockedOffsetX = 10; - * - * @cfg {Number} [floatSpaceDockedOffsetX=0] - * @member CKEDITOR.config - */ - -/** - * Along with {@link #floatSpaceDockedOffsetX} it defines the - * amount of offset (in pixels) between float space and the editable top/bottom - * boundaries when space element is docked at either side of the editable. - * - * config.floatSpaceDockedOffsetY = 10; - * - * @cfg {Number} [floatSpaceDockedOffsetY=0] - * @member CKEDITOR.config - */ - -/** - * Along with {@link #floatSpacePinnedOffsetY} it defines the - * amount of offset (in pixels) between float space and the view port boundaries - * when space element is pinned. - * - * config.floatSpacePinnedOffsetX = 20; - * - * @cfg {Number} [floatSpacePinnedOffsetX=0] - * @member CKEDITOR.config - */ - -/** - * Along with {@link #floatSpacePinnedOffsetX} it defines the - * amount of offset (in pixels) between float space and the view port boundaries - * when space element is pinned. - * - * config.floatSpacePinnedOffsetY = 20; - * - * @cfg {Number} [floatSpacePinnedOffsetY=0] - * @member CKEDITOR.config - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'listblock', { - requires: 'panel', - - onLoad: function() { - var list = CKEDITOR.addTemplate( 'panel-list', '' ), - listItem = CKEDITOR.addTemplate( 'panel-list-item', '' ), - listGroup = CKEDITOR.addTemplate( 'panel-list-group', '

    {label}

    ' ); - - CKEDITOR.ui.panel.prototype.addListBlock = function( name, definition ) { - return this.addBlock( name, new CKEDITOR.ui.listBlock( this.getHolderElement(), definition ) ); - }; - - CKEDITOR.ui.listBlock = CKEDITOR.tools.createClass({ - base: CKEDITOR.ui.panel.block, - - $: function( blockHolder, blockDefinition ) { - blockDefinition = blockDefinition || {}; - - var attribs = blockDefinition.attributes || ( blockDefinition.attributes = {} ); - ( this.multiSelect = !!blockDefinition.multiSelect ) && ( attribs[ 'aria-multiselectable' ] = true ); - // Provide default role of 'listbox'. - !attribs.role && ( attribs.role = 'listbox' ); - - // Call the base contructor. - this.base.apply( this, arguments ); - - var keys = this.keys; - keys[ 40 ] = 'next'; // ARROW-DOWN - keys[ 9 ] = 'next'; // TAB - keys[ 38 ] = 'prev'; // ARROW-UP - keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB - keys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE - CKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (#8041). - - this._.pendingHtml = []; - this._.pendingList = []; - this._.items = {}; - this._.groups = {}; - }, - - _: { - close: function() { - if ( this._.started ) { - var output = list.output({ items: this._.pendingList.join( '' ) } ); - this._.pendingList = []; - this._.pendingHtml.push( output ); - delete this._.started; - } - }, - - getClick: function() { - if ( !this._.click ) { - this._.click = CKEDITOR.tools.addFunction( function( value ) { - var marked = this.toggle( value ); - if ( this.onClick ) - this.onClick( value, marked ); - }, this ); - } - return this._.click; - } - }, - - proto: { - add: function( value, html, title ) { - var id = CKEDITOR.tools.getNextId(); - - if ( !this._.started ) { - this._.started = 1; - this._.size = this._.size || 0; - } - - this._.items[ value ] = id; - - var data = { - id: id, - val: value, - onclick: CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick', - clickFn: this._.getClick(), - title: title || value, - text: html || value - }; - - this._.pendingList.push( listItem.output( data ) ); - }, - - startGroup: function( title ) { - this._.close(); - - var id = CKEDITOR.tools.getNextId(); - - this._.groups[ title ] = id; - - this._.pendingHtml.push( listGroup.output({ id: id, label: title } ) ); - }, - - commit: function() { - this._.close(); - this.element.appendHtml( this._.pendingHtml.join( '' ) ); - delete this._.size; - - this._.pendingHtml = []; - }, - - toggle: function( value ) { - var isMarked = this.isMarked( value ); - - if ( isMarked ) - this.unmark( value ); - else - this.mark( value ); - - return !isMarked; - }, - - hideGroup: function( groupTitle ) { - var group = this.element.getDocument().getById( this._.groups[ groupTitle ] ), - list = group && group.getNext(); - - if ( group ) { - group.setStyle( 'display', 'none' ); - - if ( list && list.getName() == 'ul' ) - list.setStyle( 'display', 'none' ); - } - }, - - hideItem: function( value ) { - this.element.getDocument().getById( this._.items[ value ] ).setStyle( 'display', 'none' ); - }, - - showAll: function() { - var items = this._.items, - groups = this._.groups, - doc = this.element.getDocument(); - - for ( var value in items ) { - doc.getById( items[ value ] ).setStyle( 'display', '' ); - } - - for ( var title in groups ) { - var group = doc.getById( groups[ title ] ), - list = group.getNext(); - - group.setStyle( 'display', '' ); - - if ( list && list.getName() == 'ul' ) - list.setStyle( 'display', '' ); - } - }, - - mark: function( value ) { - if ( !this.multiSelect ) - this.unmarkAll(); - - var itemId = this._.items[ value ], - item = this.element.getDocument().getById( itemId ); - item.addClass( 'cke_selected' ); - - this.element.getDocument().getById( itemId + '_option' ).setAttribute( 'aria-selected', true ); - this.onMark && this.onMark( item ); - }, - - unmark: function( value ) { - var doc = this.element.getDocument(), - itemId = this._.items[ value ], - item = doc.getById( itemId ); - - item.removeClass( 'cke_selected' ); - doc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' ); - - this.onUnmark && this.onUnmark( item ); - }, - - unmarkAll: function() { - var items = this._.items, - doc = this.element.getDocument(); - - for ( var value in items ) { - var itemId = items[ value ]; - - doc.getById( itemId ).removeClass( 'cke_selected' ); - doc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' ); - } - - this.onUnmark && this.onUnmark(); - }, - - isMarked: function( value ) { - return this.element.getDocument().getById( this._.items[ value ] ).hasClass( 'cke_selected' ); - }, - - focus: function( value ) { - this._.focusIndex = -1; - - if ( value ) { - var selected = this.element.getDocument().getById( this._.items[ value ] ).getFirst(); - - var links = this.element.getElementsByTag( 'a' ), - link, - i = -1; - - while ( ( link = links.getItem( ++i ) ) ) { - if ( link.equals( selected ) ) { - this._.focusIndex = i; - break; - } - } - - setTimeout( function() { - selected.focus(); - }, 0 ); - } - } - } - }); - } -}); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'richcombo', { - requires: 'floatpanel,listblock,button', - - beforeInit: function( editor ) { - editor.ui.addHandler( CKEDITOR.UI_RICHCOMBO, CKEDITOR.ui.richCombo.handler ); - } -}); - -(function() { - var template = '' + - '{label}' + - '= 10900 && !CKEDITOR.env.hc ? '' : '" href="javascript:void(\'{titleJs}\')"' ) + - ' hidefocus="true"' + - ' role="button"' + - ' aria-labelledby="{id}_label"' + - ' aria-haspopup="true"'; - - // Some browsers don't cancel key events in the keydown but in the - // keypress. - // TODO: Check if really needed for Gecko+Mac. - if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) ) - template += ' onkeypress="return false;"'; - - // With Firefox, we need to force the button to redraw, otherwise it - // will remain in the focus state. - if ( CKEDITOR.env.gecko ) - template += ' onblur="this.style.cssText = this.style.cssText;"'; - - template += - ' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);"' + - ' onmousedown="return CKEDITOR.tools.callFunction({mousedownFn},event);" ' + - ' onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" ' + - ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) + // #188 - '="CKEDITOR.tools.callFunction({clickFn},this);return false;">' + - '{label}' + - '' + - '' + - // BLACK DOWN-POINTING TRIANGLE - ( CKEDITOR.env.hc ? '▼' : CKEDITOR.env.air ? ' ' : '' ) + - '' + - '' + - '' + - ''; - - var rcomboTpl = CKEDITOR.addTemplate( 'combo', template ); - - /** - * Button UI element. - * - * @readonly - * @property {String} [='richcombo'] - * @member CKEDITOR - */ - CKEDITOR.UI_RICHCOMBO = 'richcombo'; - - /** - * @class - * @todo - */ - CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass({ - $: function( definition ) { - // Copy all definition properties to this object. - CKEDITOR.tools.extend( this, definition, - // Set defaults. - { - // The combo won't participate in toolbar grouping. - canGroup: false, - title: definition.label, - modes: { wysiwyg:1 }, - editorFocus: 1 - }); - - // We don't want the panel definition in this object. - var panelDefinition = this.panel || {}; - delete this.panel; - - this.id = CKEDITOR.tools.getNextNumber(); - - this.document = ( panelDefinition.parent && panelDefinition.parent.getDocument() ) || CKEDITOR.document; - - panelDefinition.className = 'cke_combopanel'; - panelDefinition.block = { - multiSelect: panelDefinition.multiSelect, - attributes: panelDefinition.attributes - }; - panelDefinition.toolbarRelated = true; - - this._ = { - panelDefinition: panelDefinition, - items: {} - }; - }, - - proto: { - renderHtml: function( editor ) { - var output = []; - this.render( editor, output ); - return output.join( '' ); - }, - - /** - * Renders the combo. - * - * @param {CKEDITOR.editor} editor The editor instance which this button is - * to be used by. - * @param {Array} output The output array to which append the HTML relative - * to this button. - */ - render: function( editor, output ) { - var env = CKEDITOR.env; - - var id = 'cke_' + this.id; - var clickFn = CKEDITOR.tools.addFunction( function( el ) { - - // Restore locked selection in Opera. - if ( selLocked ) { - editor.unlockSelection( 1 ); - selLocked = 0; - } - - instance.execute( el ); - }, this ); - - var combo = this; - var instance = { - id: id, - combo: this, - focus: function() { - var element = CKEDITOR.document.getById( id ).getChild( 1 ); - element.focus(); - }, - execute: function( el ) { - var _ = combo._; - - if ( _.state == CKEDITOR.TRISTATE_DISABLED ) - return; - - combo.createPanel( editor ); - - if ( _.on ) { - _.panel.hide(); - return; - } - - combo.commit(); - var value = combo.getValue(); - if ( value ) - _.list.mark( value ); - else - _.list.unmarkAll(); - - _.panel.showBlock( combo.id, new CKEDITOR.dom.element( el ), 4 ); - }, - clickFn: clickFn - }; - - function updateState() { - var state = this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; - this.setState( editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state ); - this.setValue( '' ); - } - - editor.on( 'mode', updateState, this ); - // If this combo is sensitive to readOnly state, update it accordingly. - !this.readOnly && editor.on( 'readOnly', updateState, this ); - - var keyDownFn = CKEDITOR.tools.addFunction( function( ev, element ) { - ev = new CKEDITOR.dom.event( ev ); - - var keystroke = ev.getKeystroke(); - switch ( keystroke ) { - case 13: // ENTER - case 32: // SPACE - case 40: // ARROW-DOWN - // Show panel - CKEDITOR.tools.callFunction( clickFn, element ); - break; - default: - // Delegate the default behavior to toolbar button key handling. - instance.onkey( instance, keystroke ); - } - - // Avoid subsequent focus grab on editor document. - ev.preventDefault(); - }); - - var focusFn = CKEDITOR.tools.addFunction( function() { - instance.onfocus && instance.onfocus(); - }); - - var selLocked = 0; - var mouseDownFn = CKEDITOR.tools.addFunction( function() { - // Opera: lock to prevent loosing editable text selection when clicking on button. - if ( CKEDITOR.env.opera ) { - var edt = editor.editable(); - if ( edt.isInline() && edt.hasFocus ) { - editor.lockSelection(); - selLocked = 1; - } - } - }); - - // For clean up - instance.keyDownFn = keyDownFn; - - var params = { - id: id, - name: this.name || this.command, - label: this.label, - title: this.title, - cls: this.className || '', - titleJs: env.gecko && env.version >= 10900 && !env.hc ? '' : ( this.title || '' ).replace( "'", '' ), - keydownFn: keyDownFn, - mousedownFn: mouseDownFn, - focusFn: focusFn, - clickFn: clickFn - }; - - rcomboTpl.output( params, output ); - - if ( this.onRender ) - this.onRender(); - - return instance; - }, - - createPanel: function( editor ) { - if ( this._.panel ) - return; - - var panelDefinition = this._.panelDefinition, - panelBlockDefinition = this._.panelDefinition.block, - panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(), - namedPanelCls = 'cke_combopanel__' + this.name, - panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ), - list = panel.addListBlock( this.id, panelBlockDefinition ), - me = this; - - panel.onShow = function() { - this.element.addClass( namedPanelCls ); - - me.setState( CKEDITOR.TRISTATE_ON ); - - list.focus( !list.multiSelect && me.getValue() ); - - me._.on = 1; - - me.editorFocus && editor.focus(); - - if ( me.onOpen ) - me.onOpen(); - }; - - panel.onHide = function( preventOnClose ) { - this.element.removeClass( namedPanelCls ); - - me.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); - - me._.on = 0; - - if ( !preventOnClose && me.onClose ) - me.onClose(); - }; - - panel.onEscape = function() { - // Hide drop-down with focus returned. - panel.hide( 1 ); - }; - - list.onClick = function( value, marked ) { - - if ( me.onClick ) - me.onClick.call( me, value, marked ); - - panel.hide(); - }; - - this._.panel = panel; - this._.list = list; - - panel.getBlock( this.id ).onHide = function() { - me._.on = 0; - me.setState( CKEDITOR.TRISTATE_OFF ); - }; - - if ( this.init ) - this.init(); - }, - - setValue: function( value, text ) { - this._.value = value; - - var textElement = this.document.getById( 'cke_' + this.id + '_text' ); - if ( textElement ) { - if ( !( value || text ) ) { - text = this.label; - textElement.addClass( 'cke_combo_inlinelabel' ); - } else - textElement.removeClass( 'cke_combo_inlinelabel' ); - - textElement.setText( typeof text != 'undefined' ? text : value ); - } - }, - - getValue: function() { - return this._.value || ''; - }, - - unmarkAll: function() { - this._.list.unmarkAll(); - }, - - mark: function( value ) { - this._.list.mark( value ); - }, - - hideItem: function( value ) { - this._.list.hideItem( value ); - }, - - hideGroup: function( groupTitle ) { - this._.list.hideGroup( groupTitle ); - }, - - showAll: function() { - this._.list.showAll(); - }, - - add: function( value, html, text ) { - this._.items[ value ] = text || value; - this._.list.add( value, html, text ); - }, - - startGroup: function( title ) { - this._.list.startGroup( title ); - }, - - commit: function() { - if ( !this._.committed ) { - this._.list.commit(); - this._.committed = 1; - CKEDITOR.ui.fire( 'ready', this ); - } - this._.committed = 1; - }, - - setState: function( state ) { - if ( this._.state == state ) - return; - - var el = this.document.getById( 'cke_' + this.id ); - el.setState( state, 'cke_combo' ); - - state == CKEDITOR.TRISTATE_DISABLED ? - el.setAttribute( 'aria-disabled', true ) : - el.removeAttribute( 'aria-disabled' ); - - this._.state = state; - }, - - enable: function() { - if ( this._.state == CKEDITOR.TRISTATE_DISABLED ) - this.setState( this._.lastState ); - }, - - disable: function() { - if ( this._.state != CKEDITOR.TRISTATE_DISABLED ) { - this._.lastState = this._.state; - this.setState( CKEDITOR.TRISTATE_DISABLED ); - } - } - }, - - /** - * Represents richCombo handler object. - * - * @class CKEDITOR.ui.richCombo.handler - * @singleton - * @extends CKEDITOR.ui.handlerDefinition - */ - statics: { - handler: { - /** - * Transforms a richCombo definition in a {@link CKEDITOR.ui.richCombo} instance. - * - * @param {Object} definition - * @returns {CKEDITOR.ui.richCombo} - */ - create: function( definition ) { - return new CKEDITOR.ui.richCombo( definition ); - } - } - } - }); - - /** - * @member CKEDITOR.ui - * @param {String} - * @param {Object} definition - * @todo - */ - CKEDITOR.ui.prototype.addRichCombo = function( name, definition ) { - this.add( name, CKEDITOR.UI_RICHCOMBO, definition ); - }; - -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - function addCombo( editor, comboName, styleType, lang, entries, defaultLabel, styleDefinition, order ) { - var config = editor.config, - style = new CKEDITOR.style( styleDefinition ); - - // Gets the list of fonts from the settings. - var names = entries.split( ';' ), - values = []; - - // Create style objects for all fonts. - var styles = {}; - for ( var i = 0; i < names.length; i++ ) { - var parts = names[ i ]; - - if ( parts ) { - parts = parts.split( '/' ); - - var vars = {}, - name = names[ i ] = parts[ 0 ]; - - vars[ styleType ] = values[ i ] = parts[ 1 ] || name; - - styles[ name ] = new CKEDITOR.style( styleDefinition, vars ); - styles[ name ]._.definition.name = name; - } else - names.splice( i--, 1 ); - } - - editor.ui.addRichCombo( comboName, { - label: lang.label, - title: lang.panelTitle, - toolbar: 'styles,' + order, - allowedContent: style, - requiredContent: style, - - panel: { - css: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ), - multiSelect: false, - attributes: { 'aria-label': lang.panelTitle } - }, - - init: function() { - this.startGroup( lang.panelTitle ); - - for ( var i = 0; i < names.length; i++ ) { - var name = names[ i ]; - - // Add the tag entry to the panel list. - this.add( name, styles[ name ].buildPreview(), name ); - } - }, - - onClick: function( value ) { - editor.focus(); - editor.fire( 'saveSnapshot' ); - - var style = styles[ value ]; - - editor[ this.getValue() == value ? 'removeStyle' : 'applyStyle' ]( style ); - editor.fire( 'saveSnapshot' ); - }, - - onRender: function() { - editor.on( 'selectionChange', function( ev ) { - var currentValue = this.getValue(); - - var elementPath = ev.data.path, - elements = elementPath.elements; - - // For each element into the elements path. - for ( var i = 0, element; i < elements.length; i++ ) { - element = elements[ i ]; - - // Check if the element is removable by any of - // the styles. - for ( var value in styles ) { - if ( styles[ value ].checkElementMatch( element, true ) ) { - if ( value != currentValue ) - this.setValue( value ); - return; - } - } - } - - // If no styles match, just empty it. - this.setValue( '', defaultLabel ); - }, this ); - } - }); - } - - CKEDITOR.plugins.add( 'font', { - requires: 'richcombo', - init: function( editor ) { - var config = editor.config; - - addCombo( editor, 'Font', 'family', editor.lang.font, config.font_names, config.font_defaultLabel, config.font_style, 30 ); - addCombo( editor, 'FontSize', 'size', editor.lang.font.fontSize, config.fontSize_sizes, config.fontSize_defaultLabel, config.fontSize_style, 40 ); - } - }); -})(); - -/** - * The list of fonts names to be displayed in the Font combo in the toolbar. - * Entries are separated by semi-colons (`';'`), while it's possible to have more - * than one font for each entry, in the HTML way (separated by comma). - * - * A display name may be optionally defined by prefixing the entries with the - * name and the slash character. For example, `'Arial/Arial, Helvetica, sans-serif'` - * will be displayed as `'Arial'` in the list, but will be outputted as - * `'Arial, Helvetica, sans-serif'`. - * - * config.font_names = - * 'Arial/Arial, Helvetica, sans-serif;' + - * 'Times New Roman/Times New Roman, Times, serif;' + - * 'Verdana'; - * - * config.font_names = 'Arial;Times New Roman;Verdana'; - * - * @cfg {String} [font_names=see source] - * @member CKEDITOR.config - */ -CKEDITOR.config.font_names = 'Arial/Arial, Helvetica, sans-serif;' + - 'Comic Sans MS/Comic Sans MS, cursive;' + - 'Courier New/Courier New, Courier, monospace;' + - 'Georgia/Georgia, serif;' + - 'Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;' + - 'Tahoma/Tahoma, Geneva, sans-serif;' + - 'Times New Roman/Times New Roman, Times, serif;' + - 'Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;' + - 'Verdana/Verdana, Geneva, sans-serif'; - -/** - * The text to be displayed in the Font combo is none of the available values - * matches the current cursor position or text selection. - * - * // If the default site font is Arial, we may making it more explicit to the end user. - * config.font_defaultLabel = 'Arial'; - * - * @cfg {String} [font_defaultLabel=''] - * @member CKEDITOR.config - */ -CKEDITOR.config.font_defaultLabel = ''; - -/** - * The style definition to be used to apply the font in the text. - * - * // This is actually the default value for it. - * config.font_style = { - * element: 'span', - * styles: { 'font-family': '#(family)' }, - * overrides: [ { element: 'font', attributes: { 'face': null } } ] - * }; - * - * @cfg {Object} [font_style=see example] - * @member CKEDITOR.config - */ -CKEDITOR.config.font_style = { - element: 'span', - styles: { 'font-family': '#(family)' }, - overrides: [ { - element: 'font', attributes: { 'face': null } - }] -}; - -/** - * The list of fonts size to be displayed in the Font Size combo in the - * toolbar. Entries are separated by semi-colons (`';'`). - * - * Any kind of "CSS like" size can be used, like `'12px'`, `'2.3em'`, `'130%'`, - * `'larger'` or `'x-small'`. - * - * A display name may be optionally defined by prefixing the entries with the - * name and the slash character. For example, `'Bigger Font/14px'` will be - * displayed as `'Bigger Font'` in the list, but will be outputted as `'14px'`. - * - * config.fontSize_sizes = '16/16px;24/24px;48/48px;'; - * - * config.fontSize_sizes = '12px;2.3em;130%;larger;x-small'; - * - * config.fontSize_sizes = '12 Pixels/12px;Big/2.3em;30 Percent More/130%;Bigger/larger;Very Small/x-small'; - * - * @cfg {String} [fontSize_sizes=see source] - * @member CKEDITOR.config - */ -CKEDITOR.config.fontSize_sizes = '8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px'; - -/** - * The text to be displayed in the Font Size combo is none of the available - * values matches the current cursor position or text selection. - * - * // If the default site font size is 12px, we may making it more explicit to the end user. - * config.fontSize_defaultLabel = '12px'; - * - * @cfg {String} [fontSize_defaultLabel=''] - * @member CKEDITOR.config - */ -CKEDITOR.config.fontSize_defaultLabel = ''; - -/** - * The style definition to be used to apply the font size in the text. - * - * // This is actually the default value for it. - * config.fontSize_style = { - * element: 'span', - * styles: { 'font-size': '#(size)' }, - * overrides: [ { element :'font', attributes: { 'size': null } } ] - * }; - * - * @cfg {Object} [fontSize_style=see example] - * @member CKEDITOR.config - */ -CKEDITOR.config.fontSize_style = { - element: 'span', - styles: { 'font-size': '#(size)' }, - overrides: [ { - element: 'font', attributes: { 'size': null } - }] -}; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Forms Plugin - */ - -CKEDITOR.plugins.add( 'forms', { - requires: 'dialog,fakeobjects', - onLoad: function() { - CKEDITOR.addCss( '.cke_editable form' + - '{' + - 'border: 1px dotted #FF0000;' + - 'padding: 2px;' + - '}\n' ); - - CKEDITOR.addCss( 'img.cke_hidden' + - '{' + - 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/hiddenfield.gif' ) + ');' + - 'background-position: center center;' + - 'background-repeat: no-repeat;' + - 'border: 1px solid #a9a9a9;' + - 'width: 16px !important;' + - 'height: 16px !important;' + - '}' ); - - }, - init: function( editor ) { - var lang = editor.lang, - order = 0, - textfieldTypes = { email:1,password:1,search:1,tel:1,text:1,url:1 }, - allowedContent = { - checkbox: 'input[type,name,checked]', - radio: 'input[type,name,checked]', - textfield: 'input[type,name,value,size,maxlength]', - textarea: 'textarea[cols,rows,name]', - select: 'select[name,size,multiple]; option[value,selected]', - button: 'input[type,name,value]', - form: 'form[action,name,id,enctype,target,method]', - hiddenfield: 'input[type,name,value]', - imagebutton: 'input[type,alt,src]{width,height,border,border-width,border-style,margin,float}' - }, - requiredContent = { - checkbox: 'input', - radio: 'input', - textfield: 'input', - textarea: 'textarea', - select: 'select', - button: 'input', - form: 'form', - hiddenfield: 'input', - imagebutton: 'input' - }; - - // All buttons use the same code to register. So, to avoid - // duplications, let's use this tool function. - var addButtonCommand = function( buttonName, commandName, dialogFile ) { - var def = { - allowedContent: allowedContent[ commandName ], - requiredContent: requiredContent[ commandName ] - }; - commandName == 'form' && ( def.context = 'form' ); - - editor.addCommand( commandName, new CKEDITOR.dialogCommand( commandName, def ) ); - - editor.ui.addButton && editor.ui.addButton( buttonName, { - label: lang.common[ buttonName.charAt( 0 ).toLowerCase() + buttonName.slice( 1 ) ], - command: commandName, - toolbar: 'forms,' + ( order += 10 ) - }); - CKEDITOR.dialog.add( commandName, dialogFile ); - }; - - var dialogPath = this.path + 'dialogs/'; - !editor.blockless && addButtonCommand( 'Form', 'form', dialogPath + 'form.js' ); - addButtonCommand( 'Checkbox', 'checkbox', dialogPath + 'checkbox.js' ); - addButtonCommand( 'Radio', 'radio', dialogPath + 'radio.js' ); - addButtonCommand( 'TextField', 'textfield', dialogPath + 'textfield.js' ); - addButtonCommand( 'Textarea', 'textarea', dialogPath + 'textarea.js' ); - addButtonCommand( 'Select', 'select', dialogPath + 'select.js' ); - addButtonCommand( 'Button', 'button', dialogPath + 'button.js' ); - - // If the "image" plugin is loaded. - var imagePlugin = CKEDITOR.plugins.get( 'image' ); - imagePlugin && addButtonCommand( 'ImageButton', 'imagebutton', CKEDITOR.plugins.getPath( 'image' ) + 'dialogs/image.js' ); - - addButtonCommand( 'HiddenField', 'hiddenfield', dialogPath + 'hiddenfield.js' ); - - // If the "menu" plugin is loaded, register the menu items. - if ( editor.addMenuItems ) { - var items = { - checkbox: { - label: lang.forms.checkboxAndRadio.checkboxTitle, - command: 'checkbox', - group: 'checkbox' - }, - - radio: { - label: lang.forms.checkboxAndRadio.radioTitle, - command: 'radio', - group: 'radio' - }, - - textfield: { - label: lang.forms.textfield.title, - command: 'textfield', - group: 'textfield' - }, - - hiddenfield: { - label: lang.forms.hidden.title, - command: 'hiddenfield', - group: 'hiddenfield' - }, - - imagebutton: { - label: lang.image.titleButton, - command: 'imagebutton', - group: 'imagebutton' - }, - - button: { - label: lang.forms.button.title, - command: 'button', - group: 'button' - }, - - select: { - label: lang.forms.select.title, - command: 'select', - group: 'select' - }, - - textarea: { - label: lang.forms.textarea.title, - command: 'textarea', - group: 'textarea' - } - }; - - !editor.blockless && ( items.form = { - label: lang.forms.form.menu, - command: 'form', - group: 'form' - }); - - editor.addMenuItems( items ); - - } - - // If the "contextmenu" plugin is loaded, register the listeners. - if ( editor.contextMenu ) { - !editor.blockless && editor.contextMenu.addListener( function( element, selection, path ) { - var form = path.contains( 'form', 1 ); - if ( form && !form.isReadOnly() ) - return { form: CKEDITOR.TRISTATE_OFF }; - }); - - editor.contextMenu.addListener( function( element ) { - if ( element && !element.isReadOnly() ) { - var name = element.getName(); - - if ( name == 'select' ) - return { select: CKEDITOR.TRISTATE_OFF }; - - if ( name == 'textarea' ) - return { textarea: CKEDITOR.TRISTATE_OFF }; - - if ( name == 'input' ) { - var type = element.getAttribute( 'type' ) || 'text'; - switch ( type ) { - case 'button': - case 'submit': - case 'reset': - return { button: CKEDITOR.TRISTATE_OFF }; - - case 'checkbox': - return { checkbox: CKEDITOR.TRISTATE_OFF }; - - case 'radio': - return { radio: CKEDITOR.TRISTATE_OFF }; - - case 'image': - return imagePlugin ? { imagebutton: CKEDITOR.TRISTATE_OFF } : null; - } - - if ( textfieldTypes[ type ] ) - return { textfield: CKEDITOR.TRISTATE_OFF }; - } - - if ( name == 'img' && element.data( 'cke-real-element-type' ) == 'hiddenfield' ) - return { hiddenfield: CKEDITOR.TRISTATE_OFF }; - } - }); - } - - editor.on( 'doubleclick', function( evt ) { - var element = evt.data.element; - - if ( !editor.blockless && element.is( 'form' ) ) - evt.data.dialog = 'form'; - else if ( element.is( 'select' ) ) - evt.data.dialog = 'select'; - else if ( element.is( 'textarea' ) ) - evt.data.dialog = 'textarea'; - else if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'hiddenfield' ) - evt.data.dialog = 'hiddenfield'; - else if ( element.is( 'input' ) ) { - var type = element.getAttribute( 'type' ) || 'text'; - switch ( type ) { - case 'button': - case 'submit': - case 'reset': - evt.data.dialog = 'button'; - break; - case 'checkbox': - evt.data.dialog = 'checkbox'; - break; - case 'radio': - evt.data.dialog = 'radio'; - break; - case 'image': - evt.data.dialog = 'imagebutton'; - break; - } - if ( textfieldTypes[ type ] ) - evt.data.dialog = 'textfield'; - } - }); - }, - - afterInit: function( editor ) { - var dataProcessor = editor.dataProcessor, - htmlFilter = dataProcessor && dataProcessor.htmlFilter, - dataFilter = dataProcessor && dataProcessor.dataFilter; - - // Cleanup certain IE form elements default values. - if ( CKEDITOR.env.ie ) { - htmlFilter && htmlFilter.addRules({ - elements: { - input: function( input ) { - var attrs = input.attributes, - type = attrs.type; - // Old IEs don't provide type for Text inputs #5522 - if ( !type ) - attrs.type = 'text'; - if ( type == 'checkbox' || type == 'radio' ) - attrs.value == 'on' && delete attrs.value; - } - } - }); - } - - if ( dataFilter ) { - dataFilter.addRules({ - elements: { - input: function( element ) { - if ( element.attributes.type == 'hidden' ) - return editor.createFakeParserElement( element, 'cke_hidden', 'hiddenfield' ); - } - } - }); - } - } -}); - -if ( CKEDITOR.env.ie ) { - CKEDITOR.dom.element.prototype.hasAttribute = CKEDITOR.tools.override( CKEDITOR.dom.element.prototype.hasAttribute, function( original ) { - return function( name ) { - var $attr = this.$.attributes.getNamedItem( name ); - - if ( this.getName() == 'input' ) { - switch ( name ) { - case 'class': - return this.$.className.length > 0; - case 'checked': - return !!this.$.checked; - case 'value': - var type = this.getAttribute( 'type' ); - return type == 'checkbox' || type == 'radio' ? this.$.value != 'on' : this.$.value; - } - } - - return original.apply( this, arguments ); - }; - }); -} -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'format', { - requires: 'richcombo', - init: function( editor ) { - if ( editor.blockless ) - return; - - var config = editor.config, - lang = editor.lang.format; - - // Gets the list of tags from the settings. - var tags = config.format_tags.split( ';' ); - - // Create style objects for all defined styles. - var styles = {}, - stylesCount = 0, - allowedContent = []; - for ( var i = 0; i < tags.length; i++ ) { - var tag = tags[ i ]; - var style = new CKEDITOR.style( config[ 'format_' + tag ] ); - if ( !editor.filter.customConfig || editor.filter.check( style ) ) { - stylesCount++; - styles[ tag ] = style; - styles[ tag ]._.enterMode = editor.config.enterMode; - allowedContent.push( style ); - } - } - - // Hide entire combo when all formats are rejected. - if ( stylesCount === 0 ) - return; - - editor.ui.addRichCombo( 'Format', { - label: lang.label, - title: lang.panelTitle, - toolbar: 'styles,20', - allowedContent: allowedContent, - - panel: { - css: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ), - multiSelect: false, - attributes: { 'aria-label': lang.panelTitle } - }, - - init: function() { - this.startGroup( lang.panelTitle ); - - for ( var tag in styles ) { - var label = lang[ 'tag_' + tag ]; - - // Add the tag entry to the panel list. - this.add( tag, styles[ tag ].buildPreview( label ), label ); - } - }, - - onClick: function( value ) { - editor.focus(); - editor.fire( 'saveSnapshot' ); - - var style = styles[ value ], - elementPath = editor.elementPath(); - - editor[ style.checkActive( elementPath ) ? 'removeStyle' : 'applyStyle' ]( style ); - - // Save the undo snapshot after all changes are affected. (#4899) - setTimeout( function() { - editor.fire( 'saveSnapshot' ); - }, 0 ); - }, - - onRender: function() { - editor.on( 'selectionChange', function( ev ) { - - var currentTag = this.getValue(), - elementPath = ev.data.path, - isEnabled = !editor.readOnly && elementPath.isContextFor( 'p' ); - - // Disable the command when selection path is "blockless". - this[ isEnabled ? 'enable' : 'disable' ](); - - if ( isEnabled ) { - - for ( var tag in styles ) { - if ( styles[ tag ].checkActive( elementPath ) ) { - if ( tag != currentTag ) - this.setValue( tag, editor.lang.format[ 'tag_' + tag ] ); - return; - } - } - - // If no styles match, just empty it. - this.setValue( '' ); - } - }, this ); - } - }); - } -}); - -/** - * A list of semi colon separated style names (by default tags) representing - * the style definition for each entry to be displayed in the Format combo in - * the toolbar. Each entry must have its relative definition configuration in a - * setting named `'format_(tagName)'`. For example, the `'p'` entry has its - * definition taken from `config.format_p`. - * - * config.format_tags = 'p;h2;h3;pre'; - * - * @cfg {String} [format_tags='p;h1;h2;h3;h4;h5;h6;pre;address;div'] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_tags = 'p;h1;h2;h3;h4;h5;h6;pre;address;div'; - -/** - * The style definition to be used to apply the `'Normal'` format. - * - * config.format_p = { element : 'p', attributes : { 'class' : 'normalPara' } }; - * - * @cfg {Object} [format_p={ element: 'p' }] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_p = { element: 'p' }; - -/** - * The style definition to be used to apply the `'Normal (DIV)'` format. - * - * config.format_div = { element : 'div', attributes : { 'class' : 'normalDiv' } }; - * - * @cfg {Object} [format_div={ element: 'div' }] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_div = { element: 'div' }; - -/** - * The style definition to be used to apply the `'Formatted'` format. - * - * config.format_pre = { element: 'pre', attributes: { 'class': 'code' } }; - * - * @cfg {Object} [format_pre={ element: 'pre' }] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_pre = { element: 'pre' }; - -/** - * The style definition to be used to apply the `'Address'` format. - * - * config.format_address = { element: 'address', attributes: { 'class': 'styledAddress' } }; - * - * @cfg {Object} [format_address={ element: 'address' }] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_address = { element: 'address' }; - -/** - * The style definition to be used to apply the ``'Heading 1'` format. - * - * config.format_h1 = { element: 'h1', attributes: { 'class': 'contentTitle1' } }; - * - * @cfg {Object} [format_h1={ element: 'h1' }] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_h1 = { element: 'h1' }; - -/** - * The style definition to be used to apply the `'Heading 1'` format. - * - * config.format_h2 = { element: 'h2', attributes: { 'class': 'contentTitle2' } }; - * - * @cfg {Object} [format_h2={ element: 'h2' }] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_h2 = { element: 'h2' }; - -/** - * The style definition to be used to apply the `'Heading 1'` format. - * - * config.format_h3 = { element: 'h3', attributes: { 'class': 'contentTitle3' } }; - * - * @cfg {Object} [format_h3={ element: 'h3' }] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_h3 = { element: 'h3' }; - -/** - * The style definition to be used to apply the `'Heading 1'` format. - * - * config.format_h4 = { element: 'h4', attributes: { 'class': 'contentTitle4' } }; - * - * @cfg {Object} [format_h4={ element: 'h4' }] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_h4 = { element: 'h4' }; - -/** - * The style definition to be used to apply the `'Heading 1'` format. - * - * config.format_h5 = { element: 'h5', attributes: { 'class': 'contentTitle5' } }; - * - * @cfg {Object} [format_h5={ element: 'h5' }] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_h5 = { element: 'h5' }; - -/** - * The style definition to be used to apply the `'Heading 1'` format. - * - * config.format_h6 = { element: 'h6', attributes: { 'class': 'contentTitle6' } }; - * - * @cfg {Object} [format_h6={ element: 'h6' }] - * @member CKEDITOR.config - */ -CKEDITOR.config.format_h6 = { element: 'h6' }; -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.plugins.add( 'htmlwriter', { - init: function( editor ) { - var writer = new CKEDITOR.htmlWriter(); - - writer.forceSimpleAmpersand = editor.config.forceSimpleAmpersand; - writer.indentationChars = editor.config.dataIndentationChars || '\t'; - - // Overwrite default basicWriter initialized in hmtlDataProcessor constructor. - editor.dataProcessor.writer = writer; - } -}); - -/** - * Class used to write HTML data. - * - * var writer = new CKEDITOR.htmlWriter(); - * writer.openTag( 'p' ); - * writer.attribute( 'class', 'MyClass' ); - * writer.openTagClose( 'p' ); - * writer.text( 'Hello' ); - * writer.closeTag( 'p' ); - * alert( writer.getHtml() ); // '

    Hello

    ' - * - * @class - * @extends CKEDITOR.htmlParser.basicWriter - */ -CKEDITOR.htmlWriter = CKEDITOR.tools.createClass({ - base: CKEDITOR.htmlParser.basicWriter, - - /** - * Creates a htmlWriter class instance. - * - * @constructor - */ - $: function() { - // Call the base contructor. - this.base(); - - /** - * The characters to be used for each identation step. - * - * // Use tab for indentation. - * editorInstance.dataProcessor.writer.indentationChars = '\t'; - */ - this.indentationChars = '\t'; - - /** - * The characters to be used to close "self-closing" elements, like `
    ` or ``. - * - * // Use HTML4 notation for self-closing elements. - * editorInstance.dataProcessor.writer.selfClosingEnd = '>'; - */ - this.selfClosingEnd = ' />'; - - /** - * The characters to be used for line breaks. - * - * // Use CRLF for line breaks. - * editorInstance.dataProcessor.writer.lineBreakChars = '\r\n'; - */ - this.lineBreakChars = '\n'; - - this.sortAttributes = 1; - - this._.indent = 0; - this._.indentation = ''; - // Indicate preformatted block context status. (#5789) - this._.inPre = 0; - this._.rules = {}; - - var dtd = CKEDITOR.dtd; - - for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { - this.setRules( e, { - indent: !dtd[ e ][ '#' ], - breakBeforeOpen: 1, - breakBeforeClose: !dtd[ e ][ '#' ], - breakAfterClose: 1, - needsSpace: ( e in dtd.$block ) && !( e in { li:1,dt:1,dd:1 } ) - }); - } - - this.setRules( 'br', { breakAfterOpen:1 } ); - - this.setRules( 'title', { - indent: 0, - breakAfterOpen: 0 - }); - - this.setRules( 'style', { - indent: 0, - breakBeforeClose: 1 - }); - - this.setRules( 'pre', { - breakAfterOpen: 1, // Keep line break after the opening tag - indent: 0 // Disable indentation on
    .
    -		});
    -	},
    -
    -	proto: {
    -		/**
    -		 * Writes the tag opening part for a opener tag.
    -		 *
    -		 *		// Writes ''.
    -		 *		writer.openTagClose( 'p', false );
    -		 *
    -		 *		// Writes ' />'.
    -		 *		writer.openTagClose( 'br', true );
    -		 *
    -		 * @param {String} tagName The element name for this tag.
    -		 * @param {Boolean} isSelfClose Indicates that this is a self-closing tag,
    -		 * like `
    ` or ``. - */ - openTagClose: function( tagName, isSelfClose ) { - var rules = this._.rules[ tagName ]; - - if ( isSelfClose ) { - this._.output.push( this.selfClosingEnd ); - - if ( rules && rules.breakAfterClose ) - this._.needsSpace = rules.needsSpace; - } else { - this._.output.push( '>' ); - - if ( rules && rules.indent ) - this._.indentation += this.indentationChars; - } - - if ( rules && rules.breakAfterOpen ) - this.lineBreak(); - tagName == 'pre' && ( this._.inPre = 1 ); - }, - - /** - * Writes an attribute. This function should be called after opening the - * tag with {@link #openTagClose}. - * - * // Writes ' class="MyClass"'. - * writer.attribute( 'class', 'MyClass' ); - * - * @param {String} attName The attribute name. - * @param {String} attValue The attribute value. - */ - attribute: function( attName, attValue ) { - - if ( typeof attValue == 'string' ) { - this.forceSimpleAmpersand && ( attValue = attValue.replace( /&/g, '&' ) ); - // Browsers don't always escape special character in attribute values. (#4683, #4719). - attValue = CKEDITOR.tools.htmlEncodeAttr( attValue ); - } - - this._.output.push( ' ', attName, '="', attValue, '"' ); - }, - - /** - * Writes a closer tag. - * - * // Writes '

    '. - * writer.closeTag( 'p' ); - * - * @param {String} tagName The element name for this tag. - */ - closeTag: function( tagName ) { - var rules = this._.rules[ tagName ]; - - if ( rules && rules.indent ) - this._.indentation = this._.indentation.substr( this.indentationChars.length ); - - if ( this._.indent ) - this.indentation(); - // Do not break if indenting. - else if ( rules && rules.breakBeforeClose ) { - this.lineBreak(); - this.indentation(); - } - - this._.output.push( '' ); - tagName == 'pre' && ( this._.inPre = 0 ); - - if ( rules && rules.breakAfterClose ) { - this.lineBreak(); - this._.needsSpace = rules.needsSpace; - } - - this._.afterCloser = 1; - }, - - /** - * Writes text. - * - * // Writes 'Hello Word'. - * writer.text( 'Hello Word' ); - * - * @param {String} text The text value - */ - text: function( text ) { - if ( this._.indent ) { - this.indentation(); - !this._.inPre && ( text = CKEDITOR.tools.ltrim( text ) ); - } - - this._.output.push( text ); - }, - - /** - * Writes a comment. - * - * // Writes "". - * writer.comment( ' My comment ' ); - * - * @param {String} comment The comment text. - */ - comment: function( comment ) { - if ( this._.indent ) - this.indentation(); - - this._.output.push( '' ); - }, - - /** - * Writes a line break. It uses the {@link #lineBreakChars} property for it. - * - * // Writes '\n' (e.g.). - * writer.lineBreak(); - */ - lineBreak: function() { - if ( !this._.inPre && this._.output.length > 0 ) - this._.output.push( this.lineBreakChars ); - this._.indent = 1; - }, - - /** - * Writes the current indentation chars. It uses the {@link #indentationChars} - * property, repeating it for the current indentation steps. - * - * // Writes '\t' (e.g.). - * writer.indentation(); - */ - indentation: function() { - if ( !this._.inPre && this._.indentation ) - this._.output.push( this._.indentation ); - this._.indent = 0; - }, - - /** - * Empties the current output buffer. It also brings back the default - * values of the writer flags. - * - * writer.reset(); - */ - reset: function() { - this._.output = []; - this._.indent = 0; - this._.indentation = ''; - this._.afterCloser = 0; - this._.inPre = 0; - }, - - /** - * Sets formatting rules for a give element. The possible rules are: - * - * * `indent`: indent the element contents. - * * `breakBeforeOpen`: break line before the opener tag for this element. - * * `breakAfterOpen`: break line after the opener tag for this element. - * * `breakBeforeClose`: break line before the closer tag for this element. - * * `breakAfterClose`: break line after the closer tag for this element. - * - * All rules default to `false`. Each call to the function overrides - * already present rules, leaving the undefined untouched. - * - * By default, all elements available in the {@link CKEDITOR.dtd#$block}, - * {@link CKEDITOR.dtd#$listItem} and {@link CKEDITOR.dtd#$tableContent} - * lists have all the above rules set to `true`. Additionaly, the `
    ` - * element has the `breakAfterOpen` set to `true`. - * - * // Break line before and after "img" tags. - * writer.setRules( 'img', { - * breakBeforeOpen: true - * breakAfterOpen: true - * } ); - * - * // Reset the rules for the "h1" tag. - * writer.setRules( 'h1', {} ); - * - * @param {String} tagName The element name to which set the rules. - * @param {Object} rules An object containing the element rules. - */ - setRules: function( tagName, rules ) { - var currentRules = this._.rules[ tagName ]; - - if ( currentRules ) - CKEDITOR.tools.extend( currentRules, rules, true ); - else - this._.rules[ tagName ] = rules; - } - } -}); - -/** - * Whether to force using `'&'` instead of `'&'` in elements attributes - * values, it's not recommended to change this setting for compliance with the - * W3C XHTML 1.0 standards ([C.12, XHTML 1.0](http://www.w3.org/TR/xhtml1/#C_12)). - * - * // Use `'&'` instead of `'&'` - * CKEDITOR.config.forceSimpleAmpersand = true; - * - * @cfg {Boolean} [forceSimpleAmpersand=false] - * @member CKEDITOR.config - */ - -/** - * The characters to be used for indenting the HTML produced by the editor. - * Using characters different than `' '` (space) and `'\t'` (tab) is definitely - * a bad idea as it'll mess the code. - * - * // No indentation. - * CKEDITOR.config.dataIndentationChars = ''; - * - * // Use two spaces for indentation. - * CKEDITOR.config.dataIndentationChars = ' '; - * - * @cfg {String} [dataIndentationChars='\t'] - * @member CKEDITOR.config - */ -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview Horizontal Rule plugin. - */ - -(function() { - var horizontalruleCmd = { - canUndo: false, // The undo snapshot will be handled by 'insertElement'. - exec: function( editor ) { - var hr = editor.document.createElement( 'hr' ); - editor.insertElement( hr ); - }, - - allowedContent: 'hr', - requiredContent: 'hr' - }; - - var pluginName = 'horizontalrule'; - - // Register a plugin named "horizontalrule". - CKEDITOR.plugins.add( pluginName, { - init: function( editor ) { - if ( editor.blockless ) - return; - - editor.addCommand( pluginName, horizontalruleCmd ); - editor.ui.addButton && editor.ui.addButton( 'HorizontalRule', { - label: editor.lang.horizontalrule.toolbar, - command: pluginName, - toolbar: 'insert,40' - }); - } - }); -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -(function() { - CKEDITOR.plugins.add( 'iframe', { - requires: 'dialog,fakeobjects', - onLoad: function() { - CKEDITOR.addCss( 'img.cke_iframe' + - '{' + - 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/placeholder.png' ) + ');' + - 'background-position: center center;' + - 'background-repeat: no-repeat;' + - 'border: 1px solid #a9a9a9;' + - 'width: 80px;' + - 'height: 80px;' + - '}' - ); - }, - init: function( editor ) { - var pluginName = 'iframe', - lang = editor.lang.iframe, - allowed = 'iframe[align,longdesc,frameborder,height,name,scrolling,src,title,width]'; - - if ( editor.plugins.dialogadvtab ) - allowed += ';iframe' + editor.plugins.dialogadvtab.allowedContent( { id:1,classes:1,styles:1 } ); - - CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/iframe.js' ); - editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName, { - allowedContent: allowed, - requiredContent: 'iframe' - } ) ); - - editor.ui.addButton && editor.ui.addButton( 'Iframe', { - label: lang.toolbar, - command: pluginName, - toolbar: 'insert,80' - }); - - editor.on( 'doubleclick', function( evt ) { - var element = evt.data.element; - if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'iframe' ) - evt.data.dialog = 'iframe'; - }); - - if ( editor.addMenuItems ) { - editor.addMenuItems({ - iframe: { - label: lang.title, - command: 'iframe', - group: 'image' - } - }); - } - - // If the "contextmenu" plugin is loaded, register the listeners. - if ( editor.contextMenu ) { - editor.contextMenu.addListener( function( element, selection ) { - if ( element && element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'iframe' ) - return { iframe: CKEDITOR.TRISTATE_OFF }; - }); - } - }, - afterInit: function( editor ) { - var dataProcessor = editor.dataProcessor, - dataFilter = dataProcessor && dataProcessor.dataFilter; - - if ( dataFilter ) { - dataFilter.addRules({ - elements: { - iframe: function( element ) { - return editor.createFakeParserElement( element, 'cke_iframe', 'iframe', true ); - } - } - }); - } - } - }); -})(); -/** - * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -/** - * @fileOverview The "wysiwygarea" plugin. It registers the "wysiwyg" editing - * mode, which handles the main editing area space. - */ - -(function() { - CKEDITOR.plugins.add( 'wysiwygarea', { - init: function( editor ) { - if ( editor.config.fullPage ) { - editor.addFeature( { - allowedContent: 'html head title; style [media,type]; body (*)[id]; meta link [*]', - requiredContent: 'body' - } ); - } - - editor.addMode( 'wysiwyg', function( callback ) { - var iframe = CKEDITOR.document.createElement( 'iframe' ); - iframe.setStyles({ width: '100%', height: '100%' } ); - iframe.addClass( 'cke_wysiwyg_frame cke_reset' ); - - var contentSpace = editor.ui.space( 'contents' ); - contentSpace.append( iframe ); - - var src = 'document.open();' + - // The document domain must be set any time we - // call document.open(). - ( isCustomDomain ? ( 'document.domain="' + document.domain + '";' ) : '' ) + - 'document.close();'; - - // With IE, the custom domain has to be taken care at first, - // for other browers, the 'src' attribute should be left empty to - // trigger iframe's 'load' event. - src = CKEDITOR.env.air ? 'javascript:void(0)' : CKEDITOR.env.ie ? 'javascript:void(function(){' + encodeURIComponent( src ) + '}())' - : - ''; - - // Asynchronous iframe loading is only required in IE>8 and Gecko (other reasons probably). - // Do not use it on WebKit as it'll break the browser-back navigation. - var useOnloadEvent = CKEDITOR.env.ie || CKEDITOR.env.gecko; - if ( useOnloadEvent ) - iframe.on( 'load', onLoad ); - - var frameLabel = [ editor.lang.editor, editor.name ].join( ',' ), - frameDesc = editor.lang.common.editorHelp; - - if ( CKEDITOR.env.ie ) - frameLabel += ', ' + frameDesc; - - var labelId = CKEDITOR.tools.getNextId(), - desc = CKEDITOR.dom.element.createFromHtml( '' + frameDesc + '' ); - - contentSpace.append( desc, 1 ); - - // Remove the ARIA description. - editor.on( 'beforeModeUnload', function( evt ) { - evt.removeListener(); - desc.remove(); - }); - - iframe.setAttributes({ - frameBorder: 0, - 'aria-describedby' : labelId, - title: frameLabel, - src: src, - tabIndex: editor.tabIndex, - allowTransparency: 'true' - }); - - // Execute onLoad manually for all non IE||Gecko browsers. - !useOnloadEvent && onLoad(); - - if ( CKEDITOR.env.webkit ) { - // Webkit: iframe size doesn't auto fit well. (#7360) - var onResize = function() { - // Hide the iframe to get real size of the holder. (#8941) - contentSpace.setStyle( 'width', '100%' ); - - iframe.hide(); - iframe.setSize( 'width', contentSpace.getSize( 'width' ) ); - contentSpace.removeStyle( 'width' ); - iframe.show(); - }; - - iframe.setCustomData( 'onResize', onResize ); - - CKEDITOR.document.getWindow().on( 'resize', onResize ); - } - - editor.fire( 'ariaWidget', iframe ); - - function onLoad( evt ) { - evt && evt.removeListener(); - editor.editable( new framedWysiwyg( editor, iframe.$.contentWindow.document.body ) ); - editor.setData( editor.getData( 1 ), callback ); - } - }); - } - }); - - // Support for custom document.domain in IE. - var isCustomDomain = CKEDITOR.env.isCustomDomain(); - - function onDomReady( win ) { - var editor = this.editor, - doc = win.document, - body = doc.body; - - // Remove helper scripts from the DOM. - var script = doc.getElementById( 'cke_actscrpt' ); - script && script.parentNode.removeChild( script ); - script = doc.getElementById( 'cke_shimscrpt' ); - script && script.parentNode.removeChild( script ); - - if ( CKEDITOR.env.gecko ) { - // Force Gecko to change contentEditable from false to true on domReady - // (because it's previously set to true on iframe's body creation). - // Otherwise del/backspace and some other editable features will be broken in Fx <4 - // See: #107 and https://bugzilla.mozilla.org/show_bug.cgi?id=440916 - body.contentEditable = false; - - // Remove any leading
    which is between the and the comment. - // This one fixes Firefox 3.6 bug: the browser inserts a leading
    - // on document.write if the body has contenteditable="true". - if ( CKEDITOR.env.version < 20000 ) { - body.innerHTML = body.innerHTML.replace( /^.*/, '' ); - - // The above hack messes up the selection in FF36. - // To clean this up, manually select collapsed range that - // starts within the body. - setTimeout( function() { - var range = new CKEDITOR.dom.range( new CKEDITOR.dom.document( doc ) ); - range.setStart( new CKEDITOR.dom.node( body ), 0 ); - editor.getSelection().selectRanges( [ range ] ); - }, 0 ); - } - } - - body.contentEditable = true; - - if ( CKEDITOR.env.ie ) { - // Don't display the focus border. - body.hideFocus = true; - - // Disable and re-enable the body to avoid IE from - // taking the editing focus at startup. (#141 / #523) - body.disabled = true; - body.removeAttribute( 'disabled' ); - } - - delete this._.isLoadingData; - - // Play the magic to alter element reference to the reloaded one. - this.$ = body; - - doc = new CKEDITOR.dom.document( doc ); - - this.setup(); - - if ( CKEDITOR.env.ie ) { - doc.getDocumentElement().addClass( doc.$.compatMode ); - - // Prevent IE from leaving new paragraph after deleting all contents in body. (#6966) - editor.config.enterMode != CKEDITOR.ENTER_P && doc.on( 'selectionchange', function() { - var body = doc.getBody(), - sel = editor.getSelection(), - range = sel && sel.getRanges()[ 0 ]; - - if ( range && body.getHtml().match( /^

     <\/p>$/i ) && range.startContainer.equals( body ) ) { - // Avoid the ambiguity from a real user cursor position. - setTimeout( function() { - range = editor.getSelection().getRanges()[ 0 ]; - if ( !range.startContainer.equals( 'body' ) ) { - body.getFirst().remove( 1 ); - range.moveToElementEditEnd( body ); - range.select(); - } - }, 0 ); - } - }); - } - - // Gecko needs a key event to 'wake up' editing when the document is - // empty. (#3864, #5781) - CKEDITOR.env.gecko && CKEDITOR.tools.setTimeout( activateEditing, 0, this, editor ); - - // ## START : disableNativeTableHandles and disableObjectResizing settings. - - // Enable dragging of position:absolute elements in IE. - try { - editor.document.$.execCommand( '2D-position', false, true ); - } catch ( e ) {} - - // IE, Opera and Safari may not support it and throw errors. - try { - editor.document.$.execCommand( 'enableInlineTableEditing', false, !editor.config.disableNativeTableHandles ); - } catch ( e ) {} - - if ( editor.config.disableObjectResizing ) { - try { - this.getDocument().$.execCommand( 'enableObjectResizing', false, false ); - } catch ( e ) { - // For browsers in which the above method failed, we can cancel the resizing on the fly (#4208) - this.attachListener( this, CKEDITOR.env.ie ? 'resizestart' : 'resize', function( evt ) { - evt.data.preventDefault(); - }); - } - } - - if ( CKEDITOR.env.gecko || CKEDITOR.env.ie && editor.document.$.compatMode == 'CSS1Compat' ) { - this.attachListener( this, 'keydown', function( evt ) { - var keyCode = evt.data.getKeystroke(); - - // PageUp OR PageDown - if ( keyCode == 33 || keyCode == 34 ) { - // PageUp/PageDown scrolling is broken in document - // with standard doctype, manually fix it. (#4736) - if ( CKEDITOR.env.ie ) { - setTimeout( function() { - editor.getSelection().scrollIntoView(); - }, 0 ); - } - // Page up/down cause editor selection to leak - // outside of editable thus we try to intercept - // the behavior, while it affects only happen - // when editor contents are not overflowed. (#7955) - else if ( editor.window.$.innerHeight > this.$.offsetHeight ) { - var range = editor.createRange(); - range[ keyCode == 33 ? 'moveToElementEditStart' : 'moveToElementEditEnd' ]( this ); - range.select(); - evt.data.preventDefault(); - } - } - }); - } - - if ( CKEDITOR.env.ie ) { - // [IE] Iframe will still keep the selection when blurred, if - // focus is moved onto a non-editing host, e.g. link or button, but - // it becomes a problem for the object type selection, since the resizer - // handler attached on it will mark other part of the UI, especially - // for the dialog. (#8157) - // [IE<8 & Opera] Even worse For old IEs, the cursor will not vanish even if - // the selection has been moved to another text input in some cases. (#4716) - // - // Now the range restore is disabled, so we simply force IE to clean - // up the selection before blur. - this.attachListener( doc, 'blur', function() { - // Error proof when the editor is not visible. (#6375) - try { - doc.$.selection.empty(); - } catch ( er ) {} - }); - } - - // ## END - - - var title = editor.document.getElementsByTag( 'title' ).getItem( 0 ); - title.data( 'cke-title', editor.document.$.title ); - - // [IE] JAWS will not recognize the aria label we used on the iframe - // unless the frame window title string is used as the voice label, - // backup the original one and restore it on output. - if ( CKEDITOR.env.ie ) - editor.document.$.title = this._.docTitle; - - CKEDITOR.tools.setTimeout( function() { - editor.fire( 'contentDom' ); - - if ( this._.isPendingFocus ) { - editor.focus(); - this._.isPendingFocus = false; - } - - setTimeout( function() { - editor.fire( 'dataReady' ); - }, 0 ); - - // IE BUG: IE might have rendered the iframe with invisible contents. - // (#3623). Push some inconsequential CSS style changes to force IE to - // refresh it. - // - // Also, for some unknown reasons, short timeouts (e.g. 100ms) do not - // fix the problem. :( - if ( CKEDITOR.env.ie ) { - setTimeout( function() { - if ( editor.document ) { - var $body = editor.document.$.body; - $body.runtimeStyle.marginBottom = '0px'; - $body.runtimeStyle.marginBottom = ''; - } - }, 1000 ); - } - }, 0, this ); - } - - var framedWysiwyg = CKEDITOR.tools.createClass({ - $: function( editor ) { - this.base.apply( this, arguments ); - - this._.frameLoadedHandler = CKEDITOR.tools.addFunction( function( win ) { - // Avoid opening design mode in a frame window thread, - // which will cause host page scrolling.(#4397) - CKEDITOR.tools.setTimeout( onDomReady, 0, this, win ); - }, this ); - - this._.docTitle = this.getWindow().getFrame().getAttribute( 'title' ); - }, - - base: CKEDITOR.editable, - - proto: { - setData: function( data, isSnapshot ) { - var editor = this.editor; - - if ( isSnapshot ) - this.setHtml( data ); - else { - this._.isLoadingData = true; - editor._.dataStore = { id:1 }; - - var config = editor.config, - fullPage = config.fullPage, - docType = config.docType; - - // Build the additional stuff to be included into . - var headExtra = CKEDITOR.tools.buildStyleHtml( iframeCssFixes() ) - .replace( /"):e.push('');return e.join("")},htmlEncode:function(b){return(""+b).replace(/&/g,"&").replace(/>/g,">").replace(//g,">")},htmlDecodeAttr:function(b){return b.replace(/"/g,'"').replace(/</g,"<").replace(/>/g,">")},getNextNumber:function(){var b=0;return function(){return++b}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(b,a){var e=a(b);e.prototype=b.prototype;return e},setTimeout:function(b,a,e,g,d){d||(d=window);e||(e=d);return d.setTimeout(function(){g?b.apply(e,[].concat(g)): +b.apply(e)},a||0)},trim:function(){var b=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(a){return a.replace(b,"")}}(),ltrim:function(){var b=/^[ \t\n\r]+/g;return function(a){return a.replace(b,"")}}(),rtrim:function(){var b=/[ \t\n\r]+$/g;return function(a){return a.replace(b,"")}}(),indexOf:function(b,a){if(typeof a=="function")for(var e=0,g=b.length;e=0?b[e]:null},bind:function(b,a){return function(){return b.apply(a,arguments)}},createClass:function(b){var a=b.$,e=b.base,g=b.privates||b._,d=b.proto,b=b.statics;!a&&(a=function(){e&&this.base.apply(this,arguments)});if(g)var m=a,a=function(){var e=this._||(this._={}),a;for(a in g){var b=g[a];e[a]=typeof b=="function"?CKEDITOR.tools.bind(b,this):b}m.apply(this,arguments)};if(e){a.prototype=this.prototypedCopy(e.prototype);a.prototype.constructor=a;a.base= +e;a.baseProto=e.prototype;a.prototype.base=function(){this.base=e.prototype.base;e.apply(this,arguments);this.base=arguments.callee}}d&&this.extend(a.prototype,d,true);b&&this.extend(a,b,true);return a},addFunction:function(b,c){return a.push(function(){return b.apply(c||this,arguments)})-1},removeFunction:function(b){a[b]=null},callFunction:function(b){var c=a[b];return c&&c.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\d+\.?\d*px$/,c;return function(e){c= +CKEDITOR.tools.trim(e+"")+"px";return a.test(c)?c:e||""}}(),convertToPx:function(){var a;return function(c){if(!a){a=CKEDITOR.dom.element.createFromHtml('

    ',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(c)){a.setStyle("width",c);return a.$.clientWidth}return c}}(),repeat:function(a,c){return Array(c+1).join(a)},tryThese:function(){for(var a,c=0,e=arguments.length;c8)&&d)a=d+":"+a;return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0];return a= +a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*]*?>)|^/i,'$&\n' + - ''; - - var src = - CKEDITOR.env.air ? - 'javascript:void(0)' : - isCustomDomain ? - 'javascript:void((function(){' + - 'document.open();' + - 'document.domain=\'' + document.domain + '\';' + - 'document.close();' + - '})())"' - : ''; - - var iframe = CKEDITOR.dom.element.createFromHtml( '' ); - - iframe.on( 'load', function( e ) { - e.removeListener(); - - var doc = iframe.getFrameDocument(); - doc.write( htmlToLoad ); - - editor.focusManager.add( doc.getBody() ); - - if ( CKEDITOR.env.air ) - onPasteFrameLoad.call( this, doc.getWindow().$ ); - }, dialog ); - - iframe.setCustomData( 'dialog', dialog ); - - var container = this.getElement(); - container.setHtml( '' ); - container.append( iframe ); - - // IE need a redirect on focus to make - // the cursor blinking inside iframe. (#5461) - if ( CKEDITOR.env.ie ) { - var focusGrabber = CKEDITOR.dom.element.createFromHtml( '' ); - focusGrabber.on( 'focus', function() { - iframe.$.contentWindow.focus(); - }); - container.append( focusGrabber ); - - // Override focus handler on field. - this.focus = function() { - focusGrabber.focus(); - this.fire( 'focus' ); - }; - } - - this.getInputElement = function() { - return iframe; - }; - - // Force container to scale in IE. - if ( CKEDITOR.env.ie ) { - container.setStyle( 'display', 'block' ); - container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' ); - } - }, - commit: function( data ) { - var editor = this.getDialog().getParentEditor(), - body = this.getInputElement().getFrameDocument().getBody(), - bogus = body.getBogus(), - html; - bogus && bogus.remove(); - - // Saving the contents so changes until paste is complete will not take place (#7500) - html = body.getHtml(); - - // Opera needs some time to think about what has happened and what it should do now. - setTimeout( function() { - editor.fire( 'pasteDialogCommit', html ); - }, 0 ); - } - } - ] - } - ] - }; -}); - -/** - * Internal event to pass paste dialog's data to the listeners. - * - * @private - * @event pasteDialogCommit - * @member CKEDITOR.editor - * @param {CKEDITOR.editor} editor This editor instance. - */ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("paste",function(c){function h(a){var b=new CKEDITOR.dom.document(a.document),f=b.getBody(),d=b.getById("cke_actscrpt");d&&d.remove();f.setAttribute("contenteditable",!0);if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){var a=a.data,b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire("ariaWidget",new CKEDITOR.dom.element(a.frameElement)); +b.getWindow().getFrame().removeCustomData("pendingFocus")&&f.focus()}var e=c.lang.clipboard;c.on("pasteDialogCommit",function(a){a.data&&c.fire("paste",{type:"auto",dataValue:a.data})},null,null,1E3);return{title:e.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle||e.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat|| +CKEDITOR.env.ie6Compat)&&"rtl"==c.lang.dir&&this.parts.contents.setStyle("overflow","hidden")},onOk:function(){this.commitContent()},contents:[{id:"general",label:c.lang.common.generalTab,elements:[{type:"html",id:"securityMsg",html:'
    '+e.securityMsg+"
    "},{type:"html",id:"pasteMsg",html:'
    '+e.pasteMsg+"
    "},{type:"html",id:"editing_area",style:"width:100%;height:100%",html:"",focus:function(){var a=this.getInputElement(), +b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData("pendingFocus",1):b.focus()},setup:function(){var a=this.getDialog(),b=' diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/tmp.html b/ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/tmp.html new file mode 100644 index 00000000..c00d8c2e --- /dev/null +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/tmp.html @@ -0,0 +1,118 @@ + + + + + iframe + + + + +
    + + + + + + + diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/wsc.js b/ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/wsc.js index ddded575..22410bdb 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/wsc.js +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/wsc.js @@ -1,175 +1,67 @@ -/** - * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license - */ - -CKEDITOR.dialog.add( 'checkspell', function( editor ) { - var number = CKEDITOR.tools.getNextNumber(), - iframeId = 'cke_frame_' + number, - textareaId = 'cke_data_' + number, - errorBoxId = 'cke_error_' + number, - interval, - protocol = document.location.protocol || 'http:', - errorMsg = editor.lang.wsc.notAvailable; - - var pasteArea = - '
    ' + - ''; - - var wscCoreUrl = editor.config.wsc_customLoaderScript || ( protocol + '//loader.webspellchecker.net/sproxy_fck/sproxy.php' + '?plugin=fck2' - + '&customerid=' + editor.config.wsc_customerId - + '&cmd=script&doc=wsc&schema=22' - ); - - if ( editor.config.wsc_customLoaderScript ) { - errorMsg += '

    ' + - editor.lang.wsc.errorLoading.replace( /%s/g, editor.config.wsc_customLoaderScript ) + '

    '; - } - - function burnSpelling( dialog, errorMsg ) { - var i = 0; - return function() { - if ( typeof( window.doSpell ) == 'function' ) { - //Call from window.setInteval expected at once. - if ( typeof( interval ) != 'undefined' ) - window.clearInterval( interval ); - - initAndSpell( dialog ); - } else if ( i++ == 180 ) // Timeout: 180 * 250ms = 45s. - window._cancelOnError( errorMsg ); - }; - } - - window._cancelOnError = function( m ) { - if ( typeof( window.WSC_Error ) == 'undefined' ) { - CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'none' ); - var errorBox = CKEDITOR.document.getById( errorBoxId ); - errorBox.setStyle( 'display', 'block' ); - errorBox.setHtml( m || editor.lang.wsc.notAvailable ); - } - }; - - function initAndSpell( dialog ) { - var LangComparer = new window._SP_FCK_LangCompare(), - // Language abbr standarts comparer. - pluginPath = CKEDITOR.getUrl( editor.plugins.wsc.path + 'dialogs/' ), - // Service paths corecting/preparing. - framesetPath = pluginPath + 'tmpFrameset.html'; - - // global var is used in FCK specific core - // change on equal var used in fckplugin.js - window.gFCKPluginName = 'wsc'; - - LangComparer.setDefaulLangCode( editor.config.defaultLanguage ); - - window.doSpell({ - ctrl: textareaId, - - lang: editor.config.wsc_lang || LangComparer.getSPLangCode( editor.langCode ), - intLang: editor.config.wsc_uiLang || LangComparer.getSPLangCode( editor.langCode ), - winType: iframeId, // If not defined app will run on winpopup. - - // Callback binding section. - onCancel: function() { - dialog.hide(); - }, - onFinish: function( dT ) { - editor.focus(); - dialog.getParentEditor().setData( dT.value ); - dialog.hide(); - }, - - // Some manipulations with client static pages. - staticFrame: framesetPath, - framesetPath: framesetPath, - iframePath: pluginPath + 'ciframe.html', - - // Styles defining. - schemaURI: pluginPath + 'wsc.css', - - userDictionaryName: editor.config.wsc_userDictionaryName, - customDictionaryName: editor.config.wsc_customDictionaryIds && editor.config.wsc_customDictionaryIds.split( "," ), - domainName: editor.config.wsc_domainName - - }); - - // Hide user message console (if application was loaded more then after timeout). - CKEDITOR.document.getById( errorBoxId ).setStyle( 'display', 'none' ); - CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'block' ); - } - - return { - title: editor.config.wsc_dialogTitle || editor.lang.wsc.title, - minWidth: 485, - minHeight: 380, - buttons: [ CKEDITOR.dialog.cancelButton ], - onShow: function() { - var contentArea = this.getContentElement( 'general', 'content' ).getElement(); - contentArea.setHtml( pasteArea ); - contentArea.getChild( 2 ).setStyle( 'height', this._.contentSize.height + 'px' ); - - if ( typeof( window.doSpell ) != 'function' ) { - // Load script. - CKEDITOR.document.getHead().append( CKEDITOR.document.createElement( 'script', { - attributes: { - type: 'text/javascript', - src: wscCoreUrl - } - })); - } - - var sData = editor.getData(); // Get the data to be checked. - CKEDITOR.document.getById( textareaId ).setValue( sData ); - - interval = window.setInterval( burnSpelling( this, errorMsg ), 250 ); - }, - onHide: function() { - window.ooo = undefined; - window.int_framsetLoaded = undefined; - window.framesetLoaded = undefined; - window.is_window_opened = false; - }, - contents: [ - { - id: 'general', - label: editor.config.wsc_dialogTitle || editor.lang.wsc.title, - padding: 0, - elements: [ - { - type: 'html', - id: 'content', - html: '' - } - ] - } - ] - }; -}); - -// Expand the spell-check frame when dialog resized. (#6829) -CKEDITOR.dialog.on( 'resize', function( evt ) { - var data = evt.data, - dialog = data.dialog; - - if ( dialog._.name == 'checkspell' ) { - var content = dialog.getContentElement( 'general', 'content' ).getElement(), - iframe = content && content.getChild( 2 ); - - iframe && iframe.setSize( 'height', data.height ); - iframe && iframe.setSize( 'width', data.width ); - } -}); +/* + Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +(function(){function w(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],d="",f;for(f in a)for(var g in a[f]){var h=a[f][g];"en_US"==h?d=h:c.push(h)}c.sort();d&&c.unshift(d);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var f in a[d])if(f.toUpperCase()===c.toUpperCase()){c=d;break a}c=""}return c},setLangList:function(){var c={},d;for(d in a)for(var f in a[d])c[a[d][f]]=f;return c}()}}var e=function(){var a=function(a,b,f){var f=f||{},g=f.expires; +if("number"==typeof g&&g){var h=new Date;h.setTime(h.getTime()+1E3*g);g=f.expires=h}g&&g.toUTCString&&(f.expires=g.toUTCString());var b=encodeURIComponent(b),a=a+"="+b,e;for(e in f)b=f[e],a+="; "+e,!0!==b&&(a+="="+b);document.cookie=a};return{postMessage:{init:function(a){document.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=a.fn||null,f=a.id||"",g=a.target||window,h=a.message||{id:f};"[object Object]"==Object.prototype.toString.call(a.message)&& +(a.message.id||(a.message.id=f),h=a.message);a=window.JSON.stringify(h,b);g.postMessage(a,"*")}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}}}}(),a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode= +null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check=null;a.targetFromFrame={};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.LocalizationButton={ChangeTo:{instance:null,text:"Change to"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null, +text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking:{instance:null,text:"Finish Checking"}};a.LocalizationLabel={ChangeTo:{instance:null,text:"Change to"},Suggestions:{instance:null,text:"Suggestions"}};var x=function(b){for(var c in b)b[c].instance.getElement().setText(a.LocalizationComing[c])},y=function(b){for(var c in b){if(!b[c].instance.setLabel)break;b[c].instance.setLabel(a.LocalizationComing[c])}}, +j,p;a.framesetHtml=function(b){return''};a.setIframe=function(b,c){var d=a.framesetHtml(c);return b.getElement().setHtml(d)};a.setCurrentIframe=function(b){a.setIframe(a.dialog._.contents[b].Content,b)};a.setHeightBannerFrame=function(){var b=a.dialog.getContentElement("SpellTab","banner").getElement(), +c=a.dialog.getContentElement("GrammTab","banner").getElement(),d=a.dialog.getContentElement("Thesaurus","banner").getElement();b.setStyle("height","90px");c.setStyle("height","90px");d.setStyle("height","90px")};a.setHeightFrame=function(){document.getElementById(a.iframeNumber+"_"+a.dialog._.currentTabId).style.height="240px"};a.sendData=function(b){var c=b._.currentTabId,d=b._.contents[c].Content,f,g;a.setIframe(d,c);b.parts.tabs.removeAllListeners();b.parts.tabs.on("click",function(h){h=h||window.event; +h.data.getTarget().is("a")&&c!=b._.currentTabId&&(c=b._.currentTabId,d=b._.contents[c].Content,f=a.iframeNumber+"_"+c,a.div_overlay.setEnable(),d.getElement().getChildCount()?t(a.targetFromFrame[f],a.cmd[c]):(a.setIframe(d,c),g=document.getElementById(f),a.targetFromFrame[f]=g.contentWindow))})};a.buildSelectLang=function(a){var c=new CKEDITOR.dom.element("div"),d=new CKEDITOR.dom.element("select"),a="wscLang"+a;c.addClass("cke_dialog_ui_input_select");c.setAttribute("role","presentation");c.setStyles({height:"auto", +position:"absolute",right:"0",top:"-1px",width:"160px","white-space":"normal"});d.setAttribute("id",a);d.addClass("cke_dialog_ui_input_select");d.setStyles({width:"160px"});c.append(d);return c};a.buildOptionLang=function(b,c){var d=document.getElementById("wscLang"+c),f=document.createDocumentFragment(),g,h,e=[];if(0===d.options.length){for(g in b)e.push([g,b[g]]);e.sort();for(var k=0;k
    "},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(b){var b=a.iframeNumber+"_"+b._.currentTabId, +c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"hbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",widths:["50%","50%"],children:[{type:"hbox",id:"leftCol",align:"left",width:"50%",children:[{type:"vbox",id:"rightCol1",widths:["50%","50%"],children:[{type:"text",id:"text",label:a.LocalizationLabel.ChangeTo.text+":",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",width:"140px","default":"",onShow:function(){a.textNode.SpellTab=this;a.LocalizationLabel.ChangeTo.instance= +this},onHide:function(){this.reset()}},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"text",id:"labelSuggestions",label:a.LocalizationLabel.Suggestions.text+":",onShow:function(){a.LocalizationLabel.Suggestions.instance=this;this.getInputElement().hide()}},{type:"html",id:"logo",html:'WebSpellChecker.net',setup:function(){this.getElement().$.src= +a.logotype;this.getElement().getParent().setStyles({"text-align":"left"})}}]},{type:"select",id:"list_of_suggestions",labelStyle:"font: 12px/25px arial, sans-serif;",size:"6",inputStyle:"width: 140px; height: auto;",items:[["loading..."]],onShow:function(){p=this},onHide:function(){this.clear()},onChange:function(){a.textNode.SpellTab.setValue(this.getValue())}}]}]}]},{type:"hbox",id:"rightCol",align:"right",width:"50%",children:[{type:"vbox",id:"rightCol_col__left",widths:["50%","50%","50%","50%"], +children:[{type:"button",id:"ChangeTo",label:a.LocalizationButton.ChangeTo.text,title:"Change to",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeTo.instance=this},onClick:c},{type:"button",id:"ChangeAll",label:a.LocalizationButton.ChangeAll.text,title:"Change All",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeAll.instance=this},onClick:c},{type:"button",id:"AddWord", +label:a.LocalizationButton.AddWord.text,title:"Add word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.AddWord.instance=this},onClick:c},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text,title:"Finish Checking",style:"width: 100%;margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.FinishChecking.instance=this},onClick:c}]},{type:"vbox",id:"rightCol_col__right", +widths:["50%","50%","50%"],children:[{type:"button",id:"IgnoreWord",label:a.LocalizationButton.IgnoreWord.text,title:"Ignore word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreWord.instance=this},onClick:c},{type:"button",id:"IgnoreAllWords",label:a.LocalizationButton.IgnoreAllWords.text,title:"Ignore all words",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreAllWords.instance= +this},onClick:c},{type:"button",id:"option",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){a.LocalizationButton.Options.instance=this;"file:"==document.location.protocol&&this.disable()},onClick:function(){"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):b.openDialog("options")}}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().hide()}, +onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",setup:function(){this.getChild()[0].getElement().$.src=a.logotype;this.getChild()[0].getElement().getParent().setStyles({"text-align":"center"})},children:[{type:"html",id:"logo",html:'WebSpellChecker.net'}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox", +id:"rightCol_col__left",children:[{type:"button",id:"Option_button",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);"file:"==document.location.protocol&&this.disable()},onClick:function(){"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):b.openDialog("options")}},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text, +title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"GrammTab",label:"Grammar",accessKey:"G",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"
    "},{type:"html",id:"Content",label:"GrammarContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;", +children:[{type:"hbox",id:"leftCol",widths:["66%","34%"],children:[{type:"vbox",children:[{type:"text",id:"text",label:"Change to:",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",inputStyle:"float: right; width: 200px;","default":"",onShow:function(){a.textNode.GrammTab=this},onHide:function(){this.reset()}},{type:"html",id:"html_text",html:"
    ", +onShow:function(){a.textNodeInfo.GrammTab=this}},{type:"html",id:"radio",html:"",onShow:function(){a.grammerSuggest=this}}]},{type:"vbox",children:[{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreWord",label:"Ignore word",title:"Ignore word",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)}, +onClick:c},{type:"button",id:"IgnoreAllWords",label:"Ignore Problem",title:"Ignore Problem",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 133px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;", +widths:["70%","30%"],onShow:function(){this.getElement().hide()},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'WebSpellChecker.net',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right", +width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"Thesaurus",label:"Thesaurus",accessKey:"T",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"
    "},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId, +c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: -10px auto; overflow: hidden;",children:[{type:"hbox",widths:["75%","25%"],children:[{type:"vbox",children:[{type:"hbox",widths:["65%","35%"],children:[{type:"text",id:"ChangeTo",label:"Change to:",labelLayout:"horizontal",inputStyle:"width: 160px;",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onShow:function(){a.textNode.Thesaurus=this},onHide:function(){this.reset()}}, +{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 121px; margin-top: 1px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]},{type:"hbox",children:[{type:"select",id:"categories",label:"Categories:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.categories=this},onHide:function(){this.clear()},onChange:function(){a.buildOptionSynonyms(this.getValue())}}, +{type:"select",id:"synonyms",label:"Synonyms:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.synonyms=this;a.textNode.Thesaurus.setValue(this.getValue())},onHide:function(){this.clear()},onChange:function(){a.textNode.Thesaurus.setValue(this.getValue())}}]}]},{type:"vbox",width:"120px",style:"margin-top:46px;",children:[{type:"html",id:"logotype",label:"WebSpellChecker.net",html:'WebSpellChecker.net', +setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}},{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 121px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().hide()},children:[{type:"hbox", +id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'WebSpellChecker.net',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking", +label:"Finish Checking",title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]}]}});CKEDITOR.dialog.add("options",function(){var b=null,c={},d={},f=null,g=null;e.cookie.get("udn");e.cookie.get("osp");var h=function(){g=this.getElement().getAttribute("title-cmd");var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp", +a);e.cookie.set("udnCmd",g?g:"ignore");"delete"!=g&&(a="",""!==j.getValue()&&(a=j.getValue()),e.cookie.set("udn",a));e.postMessage.send({id:"options_dic_send"})},i=function(){f.getElement().setHtml(a.LocalizationComing.error);f.getElement().show()};return{title:a.LocalizationComing.Options,minWidth:430,minHeight:130,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"OptionsTab",label:"Options",accessKey:"O",elements:[{type:"hbox",id:"options_error",children:[{type:"html",style:"display: block;text-align: center;white-space: normal!important; font-size: 12px;color:red", +html:"
    ",onShow:function(){f=this}}]},{type:"vbox",id:"Options_content",children:[{type:"hbox",id:"Options_manager",widths:["52%","48%"],children:[{type:"fieldset",label:"Spell Checking Options",style:"border: none;margin-top: 13px;padding: 10px 0 10px 10px",onShow:function(){this.getInputElement().$.children[0].innerHTML=a.LocalizationComing.SpellCheckingOptions},children:[{type:"vbox",id:"Options_checkbox",children:[{type:"checkbox",id:"IgnoreAllCapsWords",label:"Ignore All-Caps Words", +labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreWordsNumbers",label:"Ignore Words with Numbers",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox", +id:"IgnoreMixedCaseWords",label:"Ignore Mixed-Case Words",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreDomainNames",label:"Ignore Domain Names",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]= +!this.getValue()?0:1}}]}]},{type:"vbox",id:"Options_DictionaryName",children:[{type:"text",id:"DictionaryName",style:"margin-bottom: 10px",label:"Dictionary Name:",labelLayout:"vertical",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onLoad:function(){j=this;this.setValue(a.userDictionaryName?a.userDictionaryName:(e.cookie.get("udn"),this.getValue()))},onShow:function(){j=this;this.setValue(!e.cookie.get("udn")?this.getValue():e.cookie.get("udn"));this.setLabel(a.LocalizationComing.DictionaryName)}, +onHide:function(){this.reset()}},{type:"hbox",id:"Options_buttons",children:[{type:"vbox",id:"Options_leftCol_col",widths:["50%","50%"],children:[{type:"button",id:"create",label:"Create",title:"Create",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Create)},onClick:h},{type:"button",id:"restore",label:"Restore",title:"Restore",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", +this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Restore)},onClick:h}]},{type:"vbox",id:"Options_rightCol_col",widths:["50%","50%"],children:[{type:"button",id:"rename",label:"Rename",title:"Rename",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Rename)},onClick:h},{type:"button",id:"delete",label:"Remove",title:"Remove",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", +this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Remove)},onClick:h}]}]}]}]},{type:"hbox",id:"Options_text",children:[{type:"html",style:"text-align: justify;margin-top: 15px;white-space: normal!important; font-size: 12px;color:#777;",html:"
    "+a.LocalizationComing.OptionsTextIntro+"
    ",onShow:function(){this.getElement().setText(a.LocalizationComing.OptionsTextIntro)}}]}]}]}],buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton],onOk:function(){var a=[]; +a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udn",j.getValue());e.postMessage.send({id:"options_checkbox_send"});f.getElement().hide();f.getElement().setHtml(" ")},onLoad:function(){b=this;e.postMessage.init(i);c.IgnoreAllCapsWords=b.getContentElement("OptionsTab","IgnoreAllCapsWords");c.IgnoreWordsNumbers=b.getContentElement("OptionsTab","IgnoreWordsNumbers");c.IgnoreMixedCaseWords= +b.getContentElement("OptionsTab","IgnoreMixedCaseWords");c.IgnoreDomainNames=b.getContentElement("OptionsTab","IgnoreDomainNames")},onShow:function(){var b=e.cookie.get("osp").split("");d.IgnoreAllCapsWords=b[0];d.IgnoreWordsNumbers=b[1];d.IgnoreMixedCaseWords=b[2];d.IgnoreDomainNames=b[3];!parseInt(d.IgnoreAllCapsWords,10)?c.IgnoreAllCapsWords.setValue("",!1):c.IgnoreAllCapsWords.setValue("checked",!1);!parseInt(d.IgnoreWordsNumbers,10)?c.IgnoreWordsNumbers.setValue("",!1):c.IgnoreWordsNumbers.setValue("checked", +!1);!parseInt(d.IgnoreMixedCaseWords,10)?c.IgnoreMixedCaseWords.setValue("",!1):c.IgnoreMixedCaseWords.setValue("checked",!1);!parseInt(d.IgnoreDomainNames,10)?c.IgnoreDomainNames.setValue("",!1):c.IgnoreDomainNames.setValue("checked",!1);d.IgnoreAllCapsWords=!c.IgnoreAllCapsWords.getValue()?0:1;d.IgnoreWordsNumbers=!c.IgnoreWordsNumbers.getValue()?0:1;d.IgnoreMixedCaseWords=!c.IgnoreMixedCaseWords.getValue()?0:1;d.IgnoreDomainNames=!c.IgnoreDomainNames.getValue()?0:1;c.IgnoreAllCapsWords.getElement().$.lastChild.innerHTML= +a.LocalizationComing.IgnoreAllCapsWords;c.IgnoreWordsNumbers.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreWordsWithNumbers;c.IgnoreMixedCaseWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreMixedCaseWords;c.IgnoreDomainNames.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreDomainNames}}});CKEDITOR.dialog.on("resize",function(b){var b=b.data,c=b.dialog,d=CKEDITOR.document.getById(a.iframeNumber+"_"+c._.currentTabId);"checkspell"==c._.name&&(a.bnr?d&& +d.setSize("height",b.height-310):d&&d.setSize("height",b.height-220))});CKEDITOR.on("dialogDefinition",function(b){var c=b.data.definition;a.onLoadOverlay=new q({opacity:"1",background:"#fff",target:c.dialog.parts.tabs.getParent().$});a.onLoadOverlay.setEnable();c.dialog.on("show",function(){});c.dialog.on("cancel",function(){c.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame());a.div_overlay.setDisable();return!1},this,null,-1)})})(); \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/wsc_ie.js b/ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/wsc_ie.js new file mode 100644 index 00000000..6b39b006 --- /dev/null +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/plugins/wsc/dialogs/wsc_ie.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("checkspell",function(a){function c(a,c){var d=0;return function(){"function"==typeof window.doSpell?("undefined"!=typeof e&&window.clearInterval(e),j(a)):180==d++&&window._cancelOnError(c)}}function j(c){var f=new window._SP_FCK_LangCompare,b=CKEDITOR.getUrl(a.plugins.wsc.path+"dialogs/"),e=b+"tmpFrameset.html";window.gFCKPluginName="wsc";f.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:g,lang:a.config.wsc_lang||f.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang|| +f.getSPLangCode(a.langCode),winType:d,onCancel:function(){c.hide()},onFinish:function(b){a.focus();c.getParentEditor().setData(b.value);c.hide()},staticFrame:e,framesetPath:e,iframePath:b+"ciframe.html",schemaURI:b+"wsc.css",userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(","),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(h).setStyle("display","none");CKEDITOR.document.getById(d).setStyle("display", +"block")}var b=CKEDITOR.tools.getNextNumber(),d="cke_frame_"+b,g="cke_data_"+b,h="cke_error_"+b,e,b=document.location.protocol||"http:",i=a.lang.wsc.notAvailable,k='', +l=a.config.wsc_customLoaderScript||b+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.config.wsc_customerId+"&cmd=script&doc=wsc&schema=22";a.config.wsc_customLoaderScript&&(i+='

    '+a.lang.wsc.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+"

    ");window._cancelOnError=function(c){if("undefined"==typeof window.WSC_Error){CKEDITOR.document.getById(d).setStyle("display", +"none");var b=CKEDITOR.document.getById(h);b.setStyle("display","block");b.setHtml(c||a.lang.wsc.notAvailable)}};return{title:a.config.wsc_dialogTitle||a.lang.wsc.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var b=this.getContentElement("general","content").getElement();b.setHtml(k);b.getChild(2).setStyle("height",this._.contentSize.height+"px");"function"!=typeof window.doSpell&&CKEDITOR.document.getHead().append(CKEDITOR.document.createElement("script", +{attributes:{type:"text/javascript",src:l}}));b=a.getData();CKEDITOR.document.getById(g).setValue(b);e=window.setInterval(c(this,i),250)},onHide:function(){window.ooo=void 0;window.int_framsetLoaded=void 0;window.framesetLoaded=void 0;window.is_window_opened=!1},contents:[{id:"general",label:a.config.wsc_dialogTitle||a.lang.wsc.title,padding:0,elements:[{type:"html",id:"content",html:""}]}]}}); +CKEDITOR.dialog.on("resize",function(a){var a=a.data,c=a.dialog;"checkspell"==c._.name&&((c=(c=c.getContentElement("general","content").getElement())&&c.getChild(2))&&c.setSize("height",a.height),c&&c.setSize("width",a.width))}); \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog.css index a0b60e2e..41ce000e 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie.css index ad7069c5..c2e129e0 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie7.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie7.css index 0915841e..5f2fbbae 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie7.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie7.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie8.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie8.css index f8b51318..49050b86 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie8.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_ie8.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_iequirks.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_iequirks.css index b826b089..7dbe9191 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_iequirks.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_iequirks.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:} \ No newline at end of file +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_opera.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_opera.css index bc93c9ee..62f4c363 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_opera.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/dialog_opera.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_footer{display:block;height:38px}.cke_ltr .cke_dialog_footer>*{float:right}.cke_rtl .cke_dialog_footer>*{float:left} \ No newline at end of file +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_footer{display:block;height:38px}.cke_ltr .cke_dialog_footer>*{float:right}.cke_rtl .cke_dialog_footer>*{float:left} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor.css index fe3b48c7..a8a1d0e9 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -832px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -896px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -928px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -992px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1024px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1088px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -1120px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -1184px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1216px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1280px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1312px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1376px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1408px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1472px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1504px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1568px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1664px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1696px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1760px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1792px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1856px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1888px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1952px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1984px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2048px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -2080px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -2144px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -2176px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2240px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2272px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -2304px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2336px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2368px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -2400px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2432px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2464px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2496px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2528px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2560px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2592px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2624px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2656px!important} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_gecko.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_gecko.css index 1319d1a2..479777eb 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_gecko.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_gecko.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -832px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -896px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -928px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -992px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1024px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1088px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -1120px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -1184px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1216px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1280px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1312px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1376px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1408px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1472px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1504px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1568px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1664px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1696px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1760px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1792px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1856px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1888px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1952px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1984px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2048px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -2080px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -2144px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -2176px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2240px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2272px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -2304px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2336px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2368px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -2400px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2432px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2464px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2496px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2528px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2560px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2592px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2624px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2656px!important}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie.css index d75cbc37..45bc5cec 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -832px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -896px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -928px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -992px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1024px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1088px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -1120px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -1184px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1216px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1280px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1312px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1376px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1408px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1472px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1504px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1568px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1664px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1696px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1760px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1792px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1856px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1888px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1952px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1984px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2048px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -2080px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -2144px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -2176px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2240px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2272px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -2304px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2336px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2368px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -2400px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2432px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2464px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2496px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2528px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2560px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2592px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2624px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2656px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie7.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie7.css index 39b100c0..758a6a81 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie7.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie7.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -832px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -896px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -928px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -992px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1024px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1088px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -1120px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -1184px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1216px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1280px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1312px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1376px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1408px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1472px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1504px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1568px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1664px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1696px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1760px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1792px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1856px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1888px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1952px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1984px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2048px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -2080px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -2144px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -2176px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2240px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2272px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -2304px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2336px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2368px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -2400px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2432px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2464px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2496px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2528px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2560px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2592px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2624px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2656px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie8.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie8.css index 332877e2..d1b130e9 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie8.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_ie8.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -832px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -896px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -928px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -992px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1024px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1088px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -1120px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -1184px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1216px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1280px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1312px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1376px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1408px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1472px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1504px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1568px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1664px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1696px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1760px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1792px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1856px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1888px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1952px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1984px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2048px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -2080px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -2144px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -2176px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2240px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2272px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -2304px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2336px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2368px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -2400px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2432px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2464px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2496px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2528px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2560px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2592px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2624px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2656px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_iequirks.css b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_iequirks.css index cb6b4806..51661124 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_iequirks.css +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/editor_iequirks.css @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license */ -.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -832px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -896px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -928px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -992px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1024px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1088px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -1120px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -1184px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1216px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1280px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -1312px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -1376px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -1408px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1472px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -1504px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1568px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1664px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -1696px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1760px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -1792px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1856px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1888px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1952px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1984px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2016px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2048px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -2080px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -2112px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -2144px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -2176px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -2208px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2240px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -2272px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -2304px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2336px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -2368px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -2400px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -2432px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2464px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -2496px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2528px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -2560px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2592px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -2624px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -2656px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0} \ No newline at end of file +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/icons.png b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/icons.png index b3b6bbc3fb240051576195b9fa198d17ce5df9dc..f558c2db8e8ca474b4e249443a69d3efcac1e450 100644 GIT binary patch literal 20643 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 z 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 literal 0 HcmV?d00001 diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/close.png b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/close.png index a795fd520a9b6d2cc6ae7847635d3a3d15ce44de..04b9c97dde8273f8518060c82104b38b51832fa0 100644 GIT binary patch literal 824 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ=q4dV~EA+rIQW2r5r_$|IbhBX1!iK_4XmB4ZGuZyxX>Mli(%E z3$HvlGJ~HaFWITo!p#_bl)s>kG4~ILn4ZiInf3+cyI*T<`W(k~_vmY;nOSN7-tT?5 z_kMlG#)t>?(@N_U7A5H`{SZHU%5|y8mTLiCjxG~YC1*%7ESS=i8mXXUVBBMvkk)Zx zV?z+v(jd;QQM_K73j+!*M=?Jx=(qL zyV9$j>$uN4a_JV!q7Nf$g=w9`d^C7^PGA=~P!uT~qnS$!bq$4+Rn zRm$m#aRaT?oBmm{=FQhCd#|NJzRQD|8O+Vit9IW#m0|Mh$eHi2ze*L#9F{1SQ8HHc z4Zg9BH*Meg5Uo|W-`4Hlx9=LmhWqbRZRG0Hp8YoQowzL1@kK9x5mTUu>hHgCQ-VsW z92RMKolEYT^XF2b3{bDqtLv}7DjKgo{7|9&u;Yx#t3aOM*WBA}k1bpkwU1Xgef{_8 zQ_+pAttB$Yjb{4TF*LmYZ6CdM+Pt%A&Pql~pVU2tB$E3i4jY^)wB33;_hapR#yj&8 z_k69LfBWq=h6*9Umc$MPj)YE+L~jQEM2UT~&p(fMdGbAP`{}*^yE`_mUcEY>LGD~J zSC6>3_=>RA3QDRDyr(~v8;?`jEllcfxgCxj?;QX|b^2DN4hVt@qz0ADq;^f4F ZRK5J7^x5xhq=1STJYD@<);T3K0RTH-Q&a!| literal 389 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 literal 0 HcmV?d00001 diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/lock.png b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..c127f9ebe788baaf9c69bea6d1c7653d990cbe3c GIT binary patch literal 728 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<3~>y#}JFtwUamcJ$4Xi+b?OIx5#CqXV9F5Wxj{CWzI9}I~1#a zxe)M?q2wX2-yR1Qm6(Yl9w#m)DsJBWEpFlsaiv2;q%iS9F@!!9`;&sdy-?D_h?Q(q*;!@Xr zV*c4mE2&-y9=7-yFU!6waO`^Yu%KeH%1PY`s-8vGGJN?_6BIZECcgK-;k1vV>B05e zw{L%aRyS9L^8l;C?_&!@*Ij?jI3e|BVW3Dk!?h@eu0=aeZ+auK;QH%@t6uNgR=ody zy3tGqgSmdn?`v`p(oynm@B2FvhaW#y*4NkH6rr=P%R;Vy@CgHpZ{!H zwJLSq^XbxxyXWj>$o)R8an-!;6a1mJ`I1|7zP)n_4XvrE3Ak>WC{a{WQnD>V=iDWe zr8?eoifiiXfN&PEETh{4m<&t;ucLK6UWP&V5D literal 0 HcmV?d00001 diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/mini.png b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/mini.png deleted file mode 100644 index 3e65bd5b8e071c242b9becf6edafa2549f435365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 zcmV-21I_%2P)%S1Z0(}J4<7u!_q^ZZd4HZ)DVnCq-z@6iBv7eTiz6c=4@Dx81J8SV zd-+DAaj#OTWO)%xPfwRD7R&cgD71y=L?YqZ-Q890?CfZJoRNSHr_)J;^KICh5V%Jh zmoF!Q!{I<@=^>l+z}Dm269T+?Myu7jYqc7wR;!Fnp-_R+Rt!8XOp^yj!0@7?Y-E99J0*ORIAp4}-?UHafoJ8CD`uZvo;In}Q7}Ea! zK7q24jg5^rXsg%jt58#;l*r|BW*!8C!Qng@&I5jnj~1YekDwaT6N|}av;8oe%^!itHc(6ljk72g zi`PH{7qG3N{_0k%B`Fq*&2qVX6GZi-Zzt+>y8C*)K91do?F&Sx#wK9sL;y1fI>$&trRUb0%?SX6F6U(h?ny$6vwO z1&|@&SNa{i_8r)3j!fdh!a^Osna<^MS6Ggh0V1vh{~;!bkwVoalgSUP)Vze8$T2jH zMpNsnMsWIy1ler%8aufY6B7ZLR>W?%f9p%IyuAE^q9_^=g9~f$H%E`aJ-pomoK}9n z|M^j!I2DORUeC?V(N?RKhKex2J=&ttXa;=-HIgfxPTxqSQkM#af&mRiqw&ki%F0`> w*NY|G;v=Rhz(u@!a4rCHfX}C{#$N&q08tFxHw5c*b^rhX07*qoM6N<$f*8n#+W-In diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/refresh.png b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/images/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a061c50de209f0b3749537a6a20fba2b93c8e3 GIT binary patch literal 953 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(=iY?K- z+T>WE_|9u#iQ?6_3VMH-)0Rt%@4C1)k0tvrvkZ&loF;Dff{VURL7EFQFE4q&cfzy3 zyEe~Io3gXOO#IyOrv>Y-ye^HC6Fg|Zv+1TzaBy%32gBbw`SYJU7IB2K9;mpPF-z@b z$*deR?~M^h40Ve#ULHzQ+dU=I$FK<`iUaz4iRSe5FrS zX0ui2pHGeyQ)*)MIVU^YWeHafbN;PubEBf8ldGzJy9yaFtrFZ>9zj|)JT`TzH=g*%O7yY+w z-(Ff@AAkDkr|k!{%YV;oZf0J4HS0ekf9TZNv!&0SJC|W1b>a2bfKZ;pKdSTd{lmk; z>ViX$F{O!#iPf>ltl`$5UteQoE)C=@^Vp&fY6xhvdmBH3f7!H z?LF(PT3d%eTcX+IlQ#lI7-N`O939qQSLSivdwp`e%afTMHdV$tqPW~jOU|4`{&{%O;vd(ZWIzOti+-G(*I=klM5?CjN2 zER5>v>iwZxU+&T?luK3-Pe-~bU zDYGi;PTuyNd-opon#6Mcvw^R0=-*hEFr%4grhoqY`F)7i)T0)Cd($@m%wK)=ms@B* z!@BkBIhzr!AdYO6I#mR{Use1WE>9gP2NC6cwc)I$z JtaD0e0su#cn~(qi literal 0 HcmV?d00001 diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/readme.md b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/readme.md index 0fa4c1ac..d086fe9b 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/readme.md +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/skins/moono/readme.md @@ -44,7 +44,7 @@ Other parts: License ------- -Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). diff --git a/ckez/src/archive/web/js/ckez/ext/CKeditor/styles.js b/ckez/src/archive/web/js/ckez/ext/CKeditor/styles.js index 160801d7..18e4316b 100644 --- a/ckez/src/archive/web/js/ckez/ext/CKeditor/styles.js +++ b/ckez/src/archive/web/js/ckez/ext/CKeditor/styles.js @@ -1,6 +1,6 @@ -/** - * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.html or http://ckeditor.com/license +/** + * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license */ // This file contains style definitions that can be used by CKEditor plugins. @@ -107,5 +107,5 @@ CKEDITOR.stylesSet.add( 'default', [ { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } } -]); +] ); diff --git a/ckez/src/org/zkforge/ckez/Version.java b/ckez/src/org/zkforge/ckez/Version.java index 23edf641..2a98575d 100644 --- a/ckez/src/org/zkforge/ckez/Version.java +++ b/ckez/src/org/zkforge/ckez/Version.java @@ -25,5 +25,5 @@ public class Version { /** Returns the version UID. */ - public static final String UID = "4.1.1.0"; + public static final String UID = "4.3.3.0-FL"; } diff --git a/ckez/version b/ckez/version index 9080b49d..ee489c9d 100644 --- a/ckez/version +++ b/ckez/version @@ -1 +1 @@ -4.1.1.0 \ No newline at end of file +4.3.3.0-FL \ No newline at end of file diff --git a/test/addon/ckeztest/.classpath b/test/addon/ckeztest/.classpath deleted file mode 100644 index 142f3ceb..00000000 --- a/test/addon/ckeztest/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/test/addon/ckeztest/.project b/test/addon/ckeztest/.project deleted file mode 100644 index f17254bf..00000000 --- a/test/addon/ckeztest/.project +++ /dev/null @@ -1,37 +0,0 @@ - - - ckeztest - - - - - - org.eclipse.wst.jsdt.core.javascriptValidator - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.wst.validation.validationbuilder - - - - - org.maven.ide.eclipse.maven2Builder - - - - - - org.eclipse.jem.workbench.JavaEMFNature - org.eclipse.wst.common.modulecore.ModuleCoreNature - org.eclipse.jdt.core.javanature - org.maven.ide.eclipse.maven2Nature - org.eclipse.wst.common.project.facet.core.nature - org.eclipse.wst.jsdt.core.jsNature - - diff --git a/test/addon/ckeztest/.settings/.jsdtscope b/test/addon/ckeztest/.settings/.jsdtscope deleted file mode 100644 index fac399cb..00000000 --- a/test/addon/ckeztest/.settings/.jsdtscope +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/test/addon/ckeztest/.settings/org.eclipse.jdt.core.prefs b/test/addon/ckeztest/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 5bf591aa..00000000 --- a/test/addon/ckeztest/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -#Mon Jan 30 10:58:59 CST 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.5 diff --git a/test/addon/ckeztest/.settings/org.eclipse.wst.common.component b/test/addon/ckeztest/.settings/org.eclipse.wst.common.component deleted file mode 100644 index a132bf17..00000000 --- a/test/addon/ckeztest/.settings/org.eclipse.wst.common.component +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/test/addon/ckeztest/.settings/org.eclipse.wst.common.project.facet.core.xml b/test/addon/ckeztest/.settings/org.eclipse.wst.common.project.facet.core.xml deleted file mode 100644 index 0fa51699..00000000 --- a/test/addon/ckeztest/.settings/org.eclipse.wst.common.project.facet.core.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/test/addon/ckeztest/.settings/org.eclipse.wst.jsdt.ui.superType.container b/test/addon/ckeztest/.settings/org.eclipse.wst.jsdt.ui.superType.container deleted file mode 100644 index 3bd5d0a4..00000000 --- a/test/addon/ckeztest/.settings/org.eclipse.wst.jsdt.ui.superType.container +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/test/addon/ckeztest/.settings/org.eclipse.wst.jsdt.ui.superType.name b/test/addon/ckeztest/.settings/org.eclipse.wst.jsdt.ui.superType.name deleted file mode 100644 index 05bd71b6..00000000 --- a/test/addon/ckeztest/.settings/org.eclipse.wst.jsdt.ui.superType.name +++ /dev/null @@ -1 +0,0 @@ -Window \ No newline at end of file diff --git a/test/addon/ckeztest/.settings/org.maven.ide.eclipse.prefs b/test/addon/ckeztest/.settings/org.maven.ide.eclipse.prefs deleted file mode 100644 index e90d72c8..00000000 --- a/test/addon/ckeztest/.settings/org.maven.ide.eclipse.prefs +++ /dev/null @@ -1,9 +0,0 @@ -#Thu Sep 16 15:49:38 CST 2010 -activeProfiles= -eclipse.preferences.version=1 -fullBuildGoals=process-test-resources -includeModules=false -resolveWorkspaceProjects=true -resourceFilterGoals=process-resources resources\:testResources -skipCompilerPlugin=true -version=1 diff --git a/test/addon/ckeztest/pom.xml b/test/addon/ckeztest/pom.xml index ac892768..21b5ccd4 100644 --- a/test/addon/ckeztest/pom.xml +++ b/test/addon/ckeztest/pom.xml @@ -21,7 +21,7 @@ 4.0.1 1.0.13 2.0.235 - 4.1.1.0 + 4.3.3.0-FL 2.6.5_50 2.0.51 2.3.1_50 diff --git a/zkdoc/ckez-release-note b/zkdoc/ckez-release-note index 1b3dbaa5..922e60b5 100644 --- a/zkdoc/ckez-release-note +++ b/zkdoc/ckez-release-note @@ -1,4 +1,12 @@ -------- +Ckez 4.3.3.0 +* Features: + Issue #1: Add IE11 Support +* Bugs: + +* Upgrade Notes: + + Upgrade to ckeditor 4.3.3 + -------- Ckez 4.1.1.0 * Features: Issue 15: Support per-instance config