From 5a727393c95ed16b82b1c3ee71f477fc56bea9d6 Mon Sep 17 00:00:00 2001 From: RemiZOffAlex Date: Mon, 26 Feb 2018 09:59:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B8=D0=B7=20=D1=80=D0=B5=D0=BF=D0=BE?= =?UTF-8?q?=D0=B7=D0=B8=D1=82=D0=B0=D1=80=D0=B8=D1=8F=20SpecialistOff.NET?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 12 + README.html | 1 + myapp/__init__.py | 39 + myapp/forms/__init__.py | 12 + myapp/forms/page.py | 21 + myapp/forms/users.py | 14 + myapp/models/__init__.py | 46 + myapp/models/acl.py | 180 + myapp/models/ip.py | 30 + myapp/models/users.py | 25 + myapp/static/ckeditor/CHANGES.md | 1358 ++ myapp/static/ckeditor/LICENSE.md | 1420 +++ myapp/static/ckeditor/README.md | 39 + myapp/static/ckeditor/adapters/jquery.js | 10 + myapp/static/ckeditor/build-config.js | 164 + myapp/static/ckeditor/ckeditor.js | 1091 ++ myapp/static/ckeditor/config.js | 38 + myapp/static/ckeditor/contents.css | 208 + myapp/static/ckeditor/lang/af.js | 5 + myapp/static/ckeditor/lang/ar.js | 5 + myapp/static/ckeditor/lang/az.js | 5 + myapp/static/ckeditor/lang/bg.js | 5 + myapp/static/ckeditor/lang/bn.js | 5 + myapp/static/ckeditor/lang/bs.js | 5 + myapp/static/ckeditor/lang/ca.js | 5 + myapp/static/ckeditor/lang/cs.js | 5 + myapp/static/ckeditor/lang/cy.js | 5 + myapp/static/ckeditor/lang/da.js | 5 + myapp/static/ckeditor/lang/de-ch.js | 5 + myapp/static/ckeditor/lang/de.js | 5 + myapp/static/ckeditor/lang/el.js | 5 + myapp/static/ckeditor/lang/en-au.js | 5 + myapp/static/ckeditor/lang/en-ca.js | 5 + myapp/static/ckeditor/lang/en-gb.js | 5 + myapp/static/ckeditor/lang/en.js | 5 + myapp/static/ckeditor/lang/eo.js | 5 + myapp/static/ckeditor/lang/es-mx.js | 5 + myapp/static/ckeditor/lang/es.js | 5 + myapp/static/ckeditor/lang/et.js | 5 + myapp/static/ckeditor/lang/eu.js | 5 + myapp/static/ckeditor/lang/fa.js | 5 + myapp/static/ckeditor/lang/fi.js | 5 + myapp/static/ckeditor/lang/fo.js | 5 + myapp/static/ckeditor/lang/fr-ca.js | 5 + myapp/static/ckeditor/lang/fr.js | 5 + myapp/static/ckeditor/lang/gl.js | 5 + myapp/static/ckeditor/lang/gu.js | 5 + myapp/static/ckeditor/lang/he.js | 5 + myapp/static/ckeditor/lang/hi.js | 5 + myapp/static/ckeditor/lang/hr.js | 5 + myapp/static/ckeditor/lang/hu.js | 5 + myapp/static/ckeditor/lang/id.js | 5 + myapp/static/ckeditor/lang/is.js | 5 + myapp/static/ckeditor/lang/it.js | 5 + myapp/static/ckeditor/lang/ja.js | 5 + myapp/static/ckeditor/lang/ka.js | 5 + myapp/static/ckeditor/lang/km.js | 5 + myapp/static/ckeditor/lang/ko.js | 5 + myapp/static/ckeditor/lang/ku.js | 5 + myapp/static/ckeditor/lang/lt.js | 5 + myapp/static/ckeditor/lang/lv.js | 5 + myapp/static/ckeditor/lang/mk.js | 5 + myapp/static/ckeditor/lang/mn.js | 5 + myapp/static/ckeditor/lang/ms.js | 5 + myapp/static/ckeditor/lang/nb.js | 5 + myapp/static/ckeditor/lang/nl.js | 5 + myapp/static/ckeditor/lang/no.js | 5 + myapp/static/ckeditor/lang/oc.js | 5 + myapp/static/ckeditor/lang/pl.js | 5 + myapp/static/ckeditor/lang/pt-br.js | 5 + myapp/static/ckeditor/lang/pt.js | 5 + myapp/static/ckeditor/lang/ro.js | 5 + myapp/static/ckeditor/lang/ru.js | 5 + myapp/static/ckeditor/lang/si.js | 5 + myapp/static/ckeditor/lang/sk.js | 5 + myapp/static/ckeditor/lang/sl.js | 5 + myapp/static/ckeditor/lang/sq.js | 5 + myapp/static/ckeditor/lang/sr-latn.js | 5 + myapp/static/ckeditor/lang/sr.js | 5 + myapp/static/ckeditor/lang/sv.js | 5 + myapp/static/ckeditor/lang/th.js | 5 + myapp/static/ckeditor/lang/tr.js | 5 + myapp/static/ckeditor/lang/tt.js | 5 + myapp/static/ckeditor/lang/ug.js | 5 + myapp/static/ckeditor/lang/uk.js | 5 + myapp/static/ckeditor/lang/vi.js | 5 + myapp/static/ckeditor/lang/zh-cn.js | 5 + myapp/static/ckeditor/lang/zh.js | 5 + .../plugins/a11yhelp/dialogs/a11yhelp.js | 10 + .../dialogs/lang/_translationstatus.txt | 25 + .../plugins/a11yhelp/dialogs/lang/af.js | 11 + .../plugins/a11yhelp/dialogs/lang/ar.js | 11 + .../plugins/a11yhelp/dialogs/lang/az.js | 11 + .../plugins/a11yhelp/dialogs/lang/bg.js | 11 + .../plugins/a11yhelp/dialogs/lang/ca.js | 13 + .../plugins/a11yhelp/dialogs/lang/cs.js | 12 + .../plugins/a11yhelp/dialogs/lang/cy.js | 11 + .../plugins/a11yhelp/dialogs/lang/da.js | 11 + .../plugins/a11yhelp/dialogs/lang/de-ch.js | 12 + .../plugins/a11yhelp/dialogs/lang/de.js | 13 + .../plugins/a11yhelp/dialogs/lang/el.js | 12 + .../plugins/a11yhelp/dialogs/lang/en-gb.js | 11 + .../plugins/a11yhelp/dialogs/lang/en.js | 11 + .../plugins/a11yhelp/dialogs/lang/eo.js | 12 + .../plugins/a11yhelp/dialogs/lang/es-mx.js | 13 + .../plugins/a11yhelp/dialogs/lang/es.js | 13 + .../plugins/a11yhelp/dialogs/lang/et.js | 11 + .../plugins/a11yhelp/dialogs/lang/eu.js | 12 + .../plugins/a11yhelp/dialogs/lang/fa.js | 11 + .../plugins/a11yhelp/dialogs/lang/fi.js | 11 + .../plugins/a11yhelp/dialogs/lang/fo.js | 11 + .../plugins/a11yhelp/dialogs/lang/fr-ca.js | 11 + .../plugins/a11yhelp/dialogs/lang/fr.js | 13 + .../plugins/a11yhelp/dialogs/lang/gl.js | 12 + .../plugins/a11yhelp/dialogs/lang/gu.js | 11 + .../plugins/a11yhelp/dialogs/lang/he.js | 11 + .../plugins/a11yhelp/dialogs/lang/hi.js | 11 + .../plugins/a11yhelp/dialogs/lang/hr.js | 11 + .../plugins/a11yhelp/dialogs/lang/hu.js | 12 + .../plugins/a11yhelp/dialogs/lang/id.js | 11 + .../plugins/a11yhelp/dialogs/lang/it.js | 13 + .../plugins/a11yhelp/dialogs/lang/ja.js | 9 + .../plugins/a11yhelp/dialogs/lang/km.js | 11 + .../plugins/a11yhelp/dialogs/lang/ko.js | 10 + .../plugins/a11yhelp/dialogs/lang/ku.js | 11 + .../plugins/a11yhelp/dialogs/lang/lt.js | 11 + .../plugins/a11yhelp/dialogs/lang/lv.js | 12 + .../plugins/a11yhelp/dialogs/lang/mk.js | 11 + .../plugins/a11yhelp/dialogs/lang/mn.js | 11 + .../plugins/a11yhelp/dialogs/lang/nb.js | 12 + .../plugins/a11yhelp/dialogs/lang/nl.js | 12 + .../plugins/a11yhelp/dialogs/lang/no.js | 11 + .../plugins/a11yhelp/dialogs/lang/oc.js | 12 + .../plugins/a11yhelp/dialogs/lang/pl.js | 13 + .../plugins/a11yhelp/dialogs/lang/pt-br.js | 13 + .../plugins/a11yhelp/dialogs/lang/pt.js | 12 + .../plugins/a11yhelp/dialogs/lang/ro.js | 11 + .../plugins/a11yhelp/dialogs/lang/ru.js | 11 + .../plugins/a11yhelp/dialogs/lang/si.js | 10 + .../plugins/a11yhelp/dialogs/lang/sk.js | 11 + .../plugins/a11yhelp/dialogs/lang/sl.js | 11 + .../plugins/a11yhelp/dialogs/lang/sq.js | 11 + .../plugins/a11yhelp/dialogs/lang/sr-latn.js | 11 + .../plugins/a11yhelp/dialogs/lang/sr.js | 11 + .../plugins/a11yhelp/dialogs/lang/sv.js | 11 + .../plugins/a11yhelp/dialogs/lang/th.js | 11 + .../plugins/a11yhelp/dialogs/lang/tr.js | 12 + .../plugins/a11yhelp/dialogs/lang/tt.js | 11 + .../plugins/a11yhelp/dialogs/lang/ug.js | 12 + .../plugins/a11yhelp/dialogs/lang/uk.js | 12 + .../plugins/a11yhelp/dialogs/lang/vi.js | 11 + .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 9 + .../plugins/a11yhelp/dialogs/lang/zh.js | 9 + .../ckeditor/plugins/about/dialogs/about.js | 8 + .../about/dialogs/hidpi/logo_ckeditor.png | Bin 0 -> 13339 bytes .../plugins/about/dialogs/logo_ckeditor.png | Bin 0 -> 6757 bytes .../plugins/dialog/dialogDefinition.js | 4 + myapp/static/ckeditor/plugins/icons.png | Bin 0 -> 5881 bytes myapp/static/ckeditor/plugins/icons_hidpi.png | Bin 0 -> 20430 bytes .../ckeditor/plugins/image/dialogs/image.js | 44 + .../ckeditor/plugins/image/images/noimage.png | Bin 0 -> 1610 bytes .../ckeditor/plugins/link/dialogs/anchor.js | 8 + .../ckeditor/plugins/link/dialogs/link.js | 28 + .../ckeditor/plugins/link/images/anchor.png | Bin 0 -> 752 bytes .../plugins/link/images/hidpi/anchor.png | Bin 0 -> 1109 bytes .../magicline/images/hidpi/icon-rtl.png | Bin 0 -> 176 bytes .../plugins/magicline/images/hidpi/icon.png | Bin 0 -> 199 bytes .../plugins/magicline/images/icon-rtl.png | Bin 0 -> 138 bytes .../plugins/magicline/images/icon.png | Bin 0 -> 133 bytes .../plugins/pastefromword/filter/default.js | 53 + .../ckeditor/plugins/scayt/CHANGELOG.md | 20 + .../static/ckeditor/plugins/scayt/LICENSE.md | 28 + myapp/static/ckeditor/plugins/scayt/README.md | 25 + .../ckeditor/plugins/scayt/dialogs/dialog.css | 23 + .../ckeditor/plugins/scayt/dialogs/options.js | 33 + .../plugins/scayt/dialogs/toolbar.css | 71 + .../plugins/scayt/skins/moono-lisa/scayt.css | 25 + .../dialogs/lang/_translationstatus.txt | 20 + .../plugins/specialchar/dialogs/lang/af.js | 13 + .../plugins/specialchar/dialogs/lang/ar.js | 13 + .../plugins/specialchar/dialogs/lang/az.js | 10 + .../plugins/specialchar/dialogs/lang/bg.js | 13 + .../plugins/specialchar/dialogs/lang/ca.js | 14 + .../plugins/specialchar/dialogs/lang/cs.js | 13 + .../plugins/specialchar/dialogs/lang/cy.js | 14 + .../plugins/specialchar/dialogs/lang/da.js | 11 + .../plugins/specialchar/dialogs/lang/de-ch.js | 13 + .../plugins/specialchar/dialogs/lang/de.js | 13 + .../plugins/specialchar/dialogs/lang/el.js | 13 + .../plugins/specialchar/dialogs/lang/en-au.js | 13 + .../plugins/specialchar/dialogs/lang/en-ca.js | 13 + .../plugins/specialchar/dialogs/lang/en-gb.js | 13 + .../plugins/specialchar/dialogs/lang/en.js | 13 + .../plugins/specialchar/dialogs/lang/eo.js | 12 + .../plugins/specialchar/dialogs/lang/es-mx.js | 13 + .../plugins/specialchar/dialogs/lang/es.js | 13 + .../plugins/specialchar/dialogs/lang/et.js | 13 + .../plugins/specialchar/dialogs/lang/eu.js | 13 + .../plugins/specialchar/dialogs/lang/fa.js | 12 + .../plugins/specialchar/dialogs/lang/fi.js | 13 + .../plugins/specialchar/dialogs/lang/fr-ca.js | 10 + .../plugins/specialchar/dialogs/lang/fr.js | 12 + .../plugins/specialchar/dialogs/lang/gl.js | 13 + .../plugins/specialchar/dialogs/lang/he.js | 12 + .../plugins/specialchar/dialogs/lang/hr.js | 13 + .../plugins/specialchar/dialogs/lang/hu.js | 12 + .../plugins/specialchar/dialogs/lang/id.js | 13 + .../plugins/specialchar/dialogs/lang/it.js | 14 + .../plugins/specialchar/dialogs/lang/ja.js | 9 + .../plugins/specialchar/dialogs/lang/km.js | 13 + .../plugins/specialchar/dialogs/lang/ko.js | 10 + .../plugins/specialchar/dialogs/lang/ku.js | 13 + .../plugins/specialchar/dialogs/lang/lt.js | 13 + .../plugins/specialchar/dialogs/lang/lv.js | 13 + .../plugins/specialchar/dialogs/lang/nb.js | 11 + .../plugins/specialchar/dialogs/lang/nl.js | 13 + .../plugins/specialchar/dialogs/lang/no.js | 11 + .../plugins/specialchar/dialogs/lang/oc.js | 12 + .../plugins/specialchar/dialogs/lang/pl.js | 12 + .../plugins/specialchar/dialogs/lang/pt-br.js | 11 + .../plugins/specialchar/dialogs/lang/pt.js | 13 + .../plugins/specialchar/dialogs/lang/ru.js | 13 + .../plugins/specialchar/dialogs/lang/si.js | 13 + .../plugins/specialchar/dialogs/lang/sk.js | 13 + .../plugins/specialchar/dialogs/lang/sl.js | 12 + .../plugins/specialchar/dialogs/lang/sq.js | 13 + .../plugins/specialchar/dialogs/lang/sv.js | 11 + .../plugins/specialchar/dialogs/lang/th.js | 13 + .../plugins/specialchar/dialogs/lang/tr.js | 12 + .../plugins/specialchar/dialogs/lang/tt.js | 13 + .../plugins/specialchar/dialogs/lang/ug.js | 13 + .../plugins/specialchar/dialogs/lang/uk.js | 12 + .../plugins/specialchar/dialogs/lang/vi.js | 14 + .../plugins/specialchar/dialogs/lang/zh-cn.js | 9 + .../plugins/specialchar/dialogs/lang/zh.js | 9 + .../specialchar/dialogs/specialchar.js | 14 + .../ckeditor/plugins/table/dialogs/table.js | 21 + .../tableselection/styles/tableselection.css | 32 + .../plugins/tabletools/dialogs/tableCell.js | 17 + myapp/static/ckeditor/plugins/wsc/LICENSE.md | 28 + myapp/static/ckeditor/plugins/wsc/README.md | 25 + .../ckeditor/plugins/wsc/dialogs/ciframe.html | 66 + .../plugins/wsc/dialogs/tmpFrameset.html | 52 + .../ckeditor/plugins/wsc/dialogs/wsc.css | 82 + .../ckeditor/plugins/wsc/dialogs/wsc.js | 91 + .../ckeditor/plugins/wsc/dialogs/wsc_ie.js | 11 + .../plugins/wsc/skins/moono-lisa/wsc.css | 43 + myapp/static/ckeditor/samples/css/samples.css | 1632 +++ .../ckeditor/samples/img/github-top.png | Bin 0 -> 383 bytes .../static/ckeditor/samples/img/header-bg.png | Bin 0 -> 13086 bytes .../ckeditor/samples/img/header-separator.png | Bin 0 -> 123 bytes myapp/static/ckeditor/samples/img/logo.png | Bin 0 -> 5891 bytes .../ckeditor/samples/img/navigation-tip.png | Bin 0 -> 12029 bytes myapp/static/ckeditor/samples/index.html | 128 + myapp/static/ckeditor/samples/js/sample.js | 53 + myapp/static/ckeditor/samples/js/sf.js | 17 + myapp/static/ckeditor/samples/old/ajax.html | 85 + myapp/static/ckeditor/samples/old/api.html | 210 + .../static/ckeditor/samples/old/appendto.html | 59 + .../samples/old/assets/inlineall/logo.png | Bin 0 -> 4283 bytes .../old/assets/outputxhtml/outputxhtml.css | 204 + .../samples/old/assets/posteddata.php | 59 + .../ckeditor/samples/old/assets/sample.jpg | Bin 0 -> 14449 bytes .../old/assets/uilanguages/languages.js | 7 + .../ckeditor/samples/old/datafiltering.html | 508 + .../samples/old/dialog/assets/my_dialog.js | 48 + .../ckeditor/samples/old/dialog/dialog.html | 190 + .../ckeditor/samples/old/divreplace.html | 144 + .../samples/old/enterkey/enterkey.html | 106 + .../assets/outputforflash/outputforflash.fla | Bin 0 -> 85504 bytes .../assets/outputforflash/outputforflash.swf | Bin 0 -> 15571 bytes .../assets/outputforflash/swfobject.js | 19 + .../old/htmlwriter/outputforflash.html | 283 + .../samples/old/htmlwriter/outputhtml.html | 224 + myapp/static/ckeditor/samples/old/index.html | 131 + .../ckeditor/samples/old/inlineall.html | 314 + .../ckeditor/samples/old/inlinebycode.html | 124 + .../ckeditor/samples/old/inlinetextarea.html | 113 + myapp/static/ckeditor/samples/old/jquery.html | 103 + .../samples/old/magicline/magicline.html | 209 + .../static/ckeditor/samples/old/readonly.html | 76 + .../ckeditor/samples/old/replacebyclass.html | 60 + .../ckeditor/samples/old/replacebycode.html | 59 + myapp/static/ckeditor/samples/old/sample.css | 357 + myapp/static/ckeditor/samples/old/sample.js | 50 + .../samples/old/sample_posteddata.php | 16 + .../static/ckeditor/samples/old/tabindex.html | 78 + .../ckeditor/samples/old/toolbar/toolbar.html | 235 + .../static/ckeditor/samples/old/uicolor.html | 72 + .../ckeditor/samples/old/uilanguages.html | 122 + .../samples/old/wysiwygarea/fullpage.html | 80 + .../ckeditor/samples/old/xhtmlstyle.html | 234 + .../toolbarconfigurator/css/fontello.css | 55 + .../toolbarconfigurator/font/LICENSE.txt | 10 + .../toolbarconfigurator/font/config.json | 28 + .../toolbarconfigurator/font/fontello.eot | Bin 0 -> 4988 bytes .../toolbarconfigurator/font/fontello.svg | 14 + .../toolbarconfigurator/font/fontello.ttf | Bin 0 -> 4820 bytes .../toolbarconfigurator/font/fontello.woff | Bin 0 -> 2904 bytes .../samples/toolbarconfigurator/index.html | 446 + .../js/abstracttoolbarmodifier.js | 13 + .../js/fulltoolbareditor.js | 9 + .../toolbarconfigurator/js/toolbarmodifier.js | 33 + .../js/toolbartextmodifier.js | 14 + .../lib/codemirror/LICENSE | 19 + .../lib/codemirror/codemirror.css | 325 + .../lib/codemirror/codemirror.js | 288 + .../lib/codemirror/javascript.js | 25 + .../lib/codemirror/neo.css | 36 + .../lib/codemirror/show-hint.css | 38 + .../lib/codemirror/show-hint.js | 16 + .../ckeditor/skins/moono-lisa/dialog.css | 5 + .../ckeditor/skins/moono-lisa/dialog_ie.css | 5 + .../ckeditor/skins/moono-lisa/dialog_ie8.css | 5 + .../skins/moono-lisa/dialog_iequirks.css | 5 + .../ckeditor/skins/moono-lisa/editor.css | 5 + .../skins/moono-lisa/editor_gecko.css | 5 + .../ckeditor/skins/moono-lisa/editor_ie.css | 5 + .../ckeditor/skins/moono-lisa/editor_ie8.css | 5 + .../skins/moono-lisa/editor_iequirks.css | 5 + .../ckeditor/skins/moono-lisa/icons.png | Bin 0 -> 5881 bytes .../ckeditor/skins/moono-lisa/icons_hidpi.png | Bin 0 -> 20430 bytes .../skins/moono-lisa/images/arrow.png | Bin 0 -> 191 bytes .../skins/moono-lisa/images/close.png | Bin 0 -> 615 bytes .../skins/moono-lisa/images/hidpi/close.png | Bin 0 -> 1238 bytes .../moono-lisa/images/hidpi/lock-open.png | Bin 0 -> 1071 bytes .../skins/moono-lisa/images/hidpi/lock.png | Bin 0 -> 1062 bytes .../skins/moono-lisa/images/hidpi/refresh.png | Bin 0 -> 1623 bytes .../skins/moono-lisa/images/lock-open.png | Bin 0 -> 511 bytes .../ckeditor/skins/moono-lisa/images/lock.png | Bin 0 -> 506 bytes .../skins/moono-lisa/images/refresh.png | Bin 0 -> 757 bytes .../skins/moono-lisa/images/spinner.gif | Bin 0 -> 2984 bytes .../ckeditor/skins/moono-lisa/readme.md | 46 + myapp/static/ckeditor/styles.js | 137 + myapp/static/css/bootstrap.css | 8899 ++++++++++++++ myapp/static/css/bootstrap.css.map | 1 + myapp/static/css/font-awesome.css | 2337 ++++ myapp/static/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes myapp/static/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes myapp/static/fonts/fontawesome-webfont.svg | 2671 ++++ myapp/static/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes myapp/static/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes myapp/static/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes myapp/static/js/bootstrap.js | 3892 ++++++ myapp/static/js/bootstrap.js.map | 1 + myapp/static/js/ckeditor-conf.js | 38 + myapp/static/js/jquery-3.2.1.js | 10253 ++++++++++++++++ myapp/static/js/popper.js | 2445 ++++ myapp/templates/edit.html | 26 + myapp/templates/header.html | 12 + myapp/templates/index.html | 12 + myapp/templates/login.html | 31 + myapp/templates/page.html | 8 + myapp/templates/skeleton.html | 14 + myapp/templates/topbar.html | 5 + myapp/views.py | 51 + run.py | 6 + wsgi.py | 10 + 358 files changed, 46103 insertions(+) create mode 100644 .gitignore create mode 100644 README.html create mode 100644 myapp/__init__.py create mode 100644 myapp/forms/__init__.py create mode 100644 myapp/forms/page.py create mode 100644 myapp/forms/users.py create mode 100644 myapp/models/__init__.py create mode 100644 myapp/models/acl.py create mode 100644 myapp/models/ip.py create mode 100644 myapp/models/users.py create mode 100644 myapp/static/ckeditor/CHANGES.md create mode 100644 myapp/static/ckeditor/LICENSE.md create mode 100644 myapp/static/ckeditor/README.md create mode 100644 myapp/static/ckeditor/adapters/jquery.js create mode 100644 myapp/static/ckeditor/build-config.js create mode 100644 myapp/static/ckeditor/ckeditor.js create mode 100644 myapp/static/ckeditor/config.js create mode 100644 myapp/static/ckeditor/contents.css create mode 100644 myapp/static/ckeditor/lang/af.js create mode 100644 myapp/static/ckeditor/lang/ar.js create mode 100644 myapp/static/ckeditor/lang/az.js create mode 100644 myapp/static/ckeditor/lang/bg.js create mode 100644 myapp/static/ckeditor/lang/bn.js create mode 100644 myapp/static/ckeditor/lang/bs.js create mode 100644 myapp/static/ckeditor/lang/ca.js create mode 100644 myapp/static/ckeditor/lang/cs.js create mode 100644 myapp/static/ckeditor/lang/cy.js create mode 100644 myapp/static/ckeditor/lang/da.js create mode 100644 myapp/static/ckeditor/lang/de-ch.js create mode 100644 myapp/static/ckeditor/lang/de.js create mode 100644 myapp/static/ckeditor/lang/el.js create mode 100644 myapp/static/ckeditor/lang/en-au.js create mode 100644 myapp/static/ckeditor/lang/en-ca.js create mode 100644 myapp/static/ckeditor/lang/en-gb.js create mode 100644 myapp/static/ckeditor/lang/en.js create mode 100644 myapp/static/ckeditor/lang/eo.js create mode 100644 myapp/static/ckeditor/lang/es-mx.js create mode 100644 myapp/static/ckeditor/lang/es.js create mode 100644 myapp/static/ckeditor/lang/et.js create mode 100644 myapp/static/ckeditor/lang/eu.js create mode 100644 myapp/static/ckeditor/lang/fa.js create mode 100644 myapp/static/ckeditor/lang/fi.js create mode 100644 myapp/static/ckeditor/lang/fo.js create mode 100644 myapp/static/ckeditor/lang/fr-ca.js create mode 100644 myapp/static/ckeditor/lang/fr.js create mode 100644 myapp/static/ckeditor/lang/gl.js create mode 100644 myapp/static/ckeditor/lang/gu.js create mode 100644 myapp/static/ckeditor/lang/he.js create mode 100644 myapp/static/ckeditor/lang/hi.js create mode 100644 myapp/static/ckeditor/lang/hr.js create mode 100644 myapp/static/ckeditor/lang/hu.js create mode 100644 myapp/static/ckeditor/lang/id.js create mode 100644 myapp/static/ckeditor/lang/is.js create mode 100644 myapp/static/ckeditor/lang/it.js create mode 100644 myapp/static/ckeditor/lang/ja.js create mode 100644 myapp/static/ckeditor/lang/ka.js create mode 100644 myapp/static/ckeditor/lang/km.js create mode 100644 myapp/static/ckeditor/lang/ko.js create mode 100644 myapp/static/ckeditor/lang/ku.js create mode 100644 myapp/static/ckeditor/lang/lt.js create mode 100644 myapp/static/ckeditor/lang/lv.js create mode 100644 myapp/static/ckeditor/lang/mk.js create mode 100644 myapp/static/ckeditor/lang/mn.js create mode 100644 myapp/static/ckeditor/lang/ms.js create mode 100644 myapp/static/ckeditor/lang/nb.js create mode 100644 myapp/static/ckeditor/lang/nl.js create mode 100644 myapp/static/ckeditor/lang/no.js create mode 100644 myapp/static/ckeditor/lang/oc.js create mode 100644 myapp/static/ckeditor/lang/pl.js create mode 100644 myapp/static/ckeditor/lang/pt-br.js create mode 100644 myapp/static/ckeditor/lang/pt.js create mode 100644 myapp/static/ckeditor/lang/ro.js create mode 100644 myapp/static/ckeditor/lang/ru.js create mode 100644 myapp/static/ckeditor/lang/si.js create mode 100644 myapp/static/ckeditor/lang/sk.js create mode 100644 myapp/static/ckeditor/lang/sl.js create mode 100644 myapp/static/ckeditor/lang/sq.js create mode 100644 myapp/static/ckeditor/lang/sr-latn.js create mode 100644 myapp/static/ckeditor/lang/sr.js create mode 100644 myapp/static/ckeditor/lang/sv.js create mode 100644 myapp/static/ckeditor/lang/th.js create mode 100644 myapp/static/ckeditor/lang/tr.js create mode 100644 myapp/static/ckeditor/lang/tt.js create mode 100644 myapp/static/ckeditor/lang/ug.js create mode 100644 myapp/static/ckeditor/lang/uk.js create mode 100644 myapp/static/ckeditor/lang/vi.js create mode 100644 myapp/static/ckeditor/lang/zh-cn.js create mode 100644 myapp/static/ckeditor/lang/zh.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/af.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/az.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/da.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/de-ch.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/de.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/el.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/en.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/es-mx.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/es.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/et.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/he.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/id.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/it.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/km.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/no.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/oc.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/si.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/th.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js create mode 100644 myapp/static/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js create mode 100644 myapp/static/ckeditor/plugins/about/dialogs/about.js create mode 100644 myapp/static/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png create mode 100644 myapp/static/ckeditor/plugins/about/dialogs/logo_ckeditor.png create mode 100644 myapp/static/ckeditor/plugins/dialog/dialogDefinition.js create mode 100644 myapp/static/ckeditor/plugins/icons.png create mode 100644 myapp/static/ckeditor/plugins/icons_hidpi.png create mode 100644 myapp/static/ckeditor/plugins/image/dialogs/image.js create mode 100644 myapp/static/ckeditor/plugins/image/images/noimage.png create mode 100644 myapp/static/ckeditor/plugins/link/dialogs/anchor.js create mode 100644 myapp/static/ckeditor/plugins/link/dialogs/link.js create mode 100644 myapp/static/ckeditor/plugins/link/images/anchor.png create mode 100644 myapp/static/ckeditor/plugins/link/images/hidpi/anchor.png create mode 100644 myapp/static/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png create mode 100644 myapp/static/ckeditor/plugins/magicline/images/hidpi/icon.png create mode 100644 myapp/static/ckeditor/plugins/magicline/images/icon-rtl.png create mode 100644 myapp/static/ckeditor/plugins/magicline/images/icon.png create mode 100644 myapp/static/ckeditor/plugins/pastefromword/filter/default.js create mode 100644 myapp/static/ckeditor/plugins/scayt/CHANGELOG.md create mode 100644 myapp/static/ckeditor/plugins/scayt/LICENSE.md create mode 100644 myapp/static/ckeditor/plugins/scayt/README.md create mode 100644 myapp/static/ckeditor/plugins/scayt/dialogs/dialog.css create mode 100644 myapp/static/ckeditor/plugins/scayt/dialogs/options.js create mode 100644 myapp/static/ckeditor/plugins/scayt/dialogs/toolbar.css create mode 100644 myapp/static/ckeditor/plugins/scayt/skins/moono-lisa/scayt.css create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/af.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/ar.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/az.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/bg.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/ca.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/cs.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/cy.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/da.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/de-ch.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/de.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/el.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/en-au.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/en-ca.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/en.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/eo.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/es-mx.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/es.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/et.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/eu.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/fa.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/fi.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/fr.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/gl.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/he.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/hr.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/hu.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/id.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/it.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/ja.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/km.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/ko.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/ku.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/lt.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/lv.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/nb.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/nl.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/no.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/oc.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/pl.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/pt.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/ru.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/si.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/sk.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/sl.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/sq.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/sv.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/th.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/tr.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/tt.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/ug.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/uk.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/vi.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/lang/zh.js create mode 100644 myapp/static/ckeditor/plugins/specialchar/dialogs/specialchar.js create mode 100644 myapp/static/ckeditor/plugins/table/dialogs/table.js create mode 100644 myapp/static/ckeditor/plugins/tableselection/styles/tableselection.css create mode 100644 myapp/static/ckeditor/plugins/tabletools/dialogs/tableCell.js create mode 100644 myapp/static/ckeditor/plugins/wsc/LICENSE.md create mode 100644 myapp/static/ckeditor/plugins/wsc/README.md create mode 100644 myapp/static/ckeditor/plugins/wsc/dialogs/ciframe.html create mode 100644 myapp/static/ckeditor/plugins/wsc/dialogs/tmpFrameset.html create mode 100644 myapp/static/ckeditor/plugins/wsc/dialogs/wsc.css create mode 100644 myapp/static/ckeditor/plugins/wsc/dialogs/wsc.js create mode 100644 myapp/static/ckeditor/plugins/wsc/dialogs/wsc_ie.js create mode 100644 myapp/static/ckeditor/plugins/wsc/skins/moono-lisa/wsc.css create mode 100644 myapp/static/ckeditor/samples/css/samples.css create mode 100644 myapp/static/ckeditor/samples/img/github-top.png create mode 100644 myapp/static/ckeditor/samples/img/header-bg.png create mode 100644 myapp/static/ckeditor/samples/img/header-separator.png create mode 100644 myapp/static/ckeditor/samples/img/logo.png create mode 100644 myapp/static/ckeditor/samples/img/navigation-tip.png create mode 100644 myapp/static/ckeditor/samples/index.html create mode 100644 myapp/static/ckeditor/samples/js/sample.js create mode 100644 myapp/static/ckeditor/samples/js/sf.js create mode 100644 myapp/static/ckeditor/samples/old/ajax.html create mode 100644 myapp/static/ckeditor/samples/old/api.html create mode 100644 myapp/static/ckeditor/samples/old/appendto.html create mode 100644 myapp/static/ckeditor/samples/old/assets/inlineall/logo.png create mode 100644 myapp/static/ckeditor/samples/old/assets/outputxhtml/outputxhtml.css create mode 100644 myapp/static/ckeditor/samples/old/assets/posteddata.php create mode 100644 myapp/static/ckeditor/samples/old/assets/sample.jpg create mode 100644 myapp/static/ckeditor/samples/old/assets/uilanguages/languages.js create mode 100644 myapp/static/ckeditor/samples/old/datafiltering.html create mode 100644 myapp/static/ckeditor/samples/old/dialog/assets/my_dialog.js create mode 100644 myapp/static/ckeditor/samples/old/dialog/dialog.html create mode 100644 myapp/static/ckeditor/samples/old/divreplace.html create mode 100644 myapp/static/ckeditor/samples/old/enterkey/enterkey.html create mode 100644 myapp/static/ckeditor/samples/old/htmlwriter/assets/outputforflash/outputforflash.fla create mode 100644 myapp/static/ckeditor/samples/old/htmlwriter/assets/outputforflash/outputforflash.swf create mode 100644 myapp/static/ckeditor/samples/old/htmlwriter/assets/outputforflash/swfobject.js create mode 100644 myapp/static/ckeditor/samples/old/htmlwriter/outputforflash.html create mode 100644 myapp/static/ckeditor/samples/old/htmlwriter/outputhtml.html create mode 100644 myapp/static/ckeditor/samples/old/index.html create mode 100644 myapp/static/ckeditor/samples/old/inlineall.html create mode 100644 myapp/static/ckeditor/samples/old/inlinebycode.html create mode 100644 myapp/static/ckeditor/samples/old/inlinetextarea.html create mode 100644 myapp/static/ckeditor/samples/old/jquery.html create mode 100644 myapp/static/ckeditor/samples/old/magicline/magicline.html create mode 100644 myapp/static/ckeditor/samples/old/readonly.html create mode 100644 myapp/static/ckeditor/samples/old/replacebyclass.html create mode 100644 myapp/static/ckeditor/samples/old/replacebycode.html create mode 100644 myapp/static/ckeditor/samples/old/sample.css create mode 100644 myapp/static/ckeditor/samples/old/sample.js create mode 100644 myapp/static/ckeditor/samples/old/sample_posteddata.php create mode 100644 myapp/static/ckeditor/samples/old/tabindex.html create mode 100644 myapp/static/ckeditor/samples/old/toolbar/toolbar.html create mode 100644 myapp/static/ckeditor/samples/old/uicolor.html create mode 100644 myapp/static/ckeditor/samples/old/uilanguages.html create mode 100644 myapp/static/ckeditor/samples/old/wysiwygarea/fullpage.html create mode 100644 myapp/static/ckeditor/samples/old/xhtmlstyle.html create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/css/fontello.css create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/font/LICENSE.txt create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/font/config.json create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/font/fontello.eot create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/font/fontello.svg create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/font/fontello.ttf create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/font/fontello.woff create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/index.html create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/js/abstracttoolbarmodifier.js create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/js/fulltoolbareditor.js create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/js/toolbarmodifier.js create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/js/toolbartextmodifier.js create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/lib/codemirror/LICENSE create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/lib/codemirror/codemirror.css create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/lib/codemirror/codemirror.js create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/lib/codemirror/javascript.js create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/lib/codemirror/neo.css create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/lib/codemirror/show-hint.css create mode 100644 myapp/static/ckeditor/samples/toolbarconfigurator/lib/codemirror/show-hint.js create mode 100644 myapp/static/ckeditor/skins/moono-lisa/dialog.css create mode 100644 myapp/static/ckeditor/skins/moono-lisa/dialog_ie.css create mode 100644 myapp/static/ckeditor/skins/moono-lisa/dialog_ie8.css create mode 100644 myapp/static/ckeditor/skins/moono-lisa/dialog_iequirks.css create mode 100644 myapp/static/ckeditor/skins/moono-lisa/editor.css create mode 100644 myapp/static/ckeditor/skins/moono-lisa/editor_gecko.css create mode 100644 myapp/static/ckeditor/skins/moono-lisa/editor_ie.css create mode 100644 myapp/static/ckeditor/skins/moono-lisa/editor_ie8.css create mode 100644 myapp/static/ckeditor/skins/moono-lisa/editor_iequirks.css create mode 100644 myapp/static/ckeditor/skins/moono-lisa/icons.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/icons_hidpi.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/images/arrow.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/images/close.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/images/hidpi/close.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/images/hidpi/lock.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/images/hidpi/refresh.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/images/lock-open.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/images/lock.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/images/refresh.png create mode 100644 myapp/static/ckeditor/skins/moono-lisa/images/spinner.gif create mode 100644 myapp/static/ckeditor/skins/moono-lisa/readme.md create mode 100644 myapp/static/ckeditor/styles.js create mode 100644 myapp/static/css/bootstrap.css create mode 100644 myapp/static/css/bootstrap.css.map create mode 100644 myapp/static/css/font-awesome.css create mode 100644 myapp/static/fonts/FontAwesome.otf create mode 100644 myapp/static/fonts/fontawesome-webfont.eot create mode 100644 myapp/static/fonts/fontawesome-webfont.svg create mode 100644 myapp/static/fonts/fontawesome-webfont.ttf create mode 100644 myapp/static/fonts/fontawesome-webfont.woff create mode 100644 myapp/static/fonts/fontawesome-webfont.woff2 create mode 100644 myapp/static/js/bootstrap.js create mode 100644 myapp/static/js/bootstrap.js.map create mode 100644 myapp/static/js/ckeditor-conf.js create mode 100644 myapp/static/js/jquery-3.2.1.js create mode 100644 myapp/static/js/popper.js create mode 100644 myapp/templates/edit.html create mode 100644 myapp/templates/header.html create mode 100644 myapp/templates/index.html create mode 100644 myapp/templates/login.html create mode 100644 myapp/templates/page.html create mode 100644 myapp/templates/skeleton.html create mode 100644 myapp/templates/topbar.html create mode 100644 myapp/views.py create mode 100755 run.py create mode 100755 wsgi.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f7ae8ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +# Игнорировать байткод +*.pyc +*.pio +**/__pycache__/ + +# Каталог с данными +**/data/ +**/config/ +**/logs/ + +Python/graph.png +*.rrd diff --git a/README.html b/README.html new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/README.html @@ -0,0 +1 @@ + diff --git a/myapp/__init__.py b/myapp/__init__.py new file mode 100644 index 0000000..f7031d6 --- /dev/null +++ b/myapp/__init__.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- + +__author__ = 'RemiZOffAlex' +__copyright__ = '(c) RemiZOffAlex' +__license__ = 'MIT' +__email__ = 'remizoffalex@mail.ru' +__url__ = 'http://remizoffalex.ru' + +import config +import logging + +from flask import Flask +from logging.handlers import RotatingFileHandler + +app = Flask(__name__) +app.config.from_object(config.CONFIG) + +app.config.from_envvar('FLASKR_SETTINGS', silent=True) + +# Логирование +handler = RotatingFileHandler(app.config['LOG_FILE'], + maxBytes=app.config['LOG_FILE_SIZE']*1024*1024, + backupCount=1) +handler.setLevel(logging.INFO) +formatter = logging.Formatter(app.config['LONG_LOG_FORMAT']) +handler.setFormatter(formatter) +app.logger.addHandler(handler) + +# celery +from celery import Celery + +celery = Celery(app.name, + broker=app.config['CELERY_BROKER_URL'], + backend=app.config['CELERY_RESULT_BACKEND'], + include=['myapp.tasks']) +celery.conf.update(app.config) + +from . import views diff --git a/myapp/forms/__init__.py b/myapp/forms/__init__.py new file mode 100644 index 0000000..2fb73c6 --- /dev/null +++ b/myapp/forms/__init__.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- + +__author__ = 'RemiZOffAlex' +__copyright__ = '(c) RemiZOffAlex' +__license__ = 'MIT' +__email__ = 'remizoffalex@mail.ru' + +from .users import LoginForm +from .page import PageEdit + +__all__ = [] diff --git a/myapp/forms/page.py b/myapp/forms/page.py new file mode 100644 index 0000000..de7a886 --- /dev/null +++ b/myapp/forms/page.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- + +__author__ = 'RemiZOffAlex' +__copyright__ = '(c) RemiZOffAlex' +__license__ = 'MIT' +__email__ = 'remizoffalex@mail.ru' +__url__ = 'http://remizoffalex.ru' + +from wtforms import ( + Form, + BooleanField, + TextField, + PasswordField, + TextAreaField +) + + +class PageEdit(Form): + title = TextField('Заголовок') + text = TextAreaField('Текст') diff --git a/myapp/forms/users.py b/myapp/forms/users.py new file mode 100644 index 0000000..8f836c9 --- /dev/null +++ b/myapp/forms/users.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- + +__author__ = 'RemiZOffAlex' +__copyright__ = '(c) RemiZOffAlex' +__license__ = 'MIT' +__email__ = 'remizoffalex@mail.ru' +__url__ = 'http://remizoffalex.ru' + +from wtforms import Form, BooleanField, TextField, PasswordField + +class LoginForm(Form): + username = TextField('Имя пользователя') + password = PasswordField('Пароль') diff --git a/myapp/models/__init__.py b/myapp/models/__init__.py new file mode 100644 index 0000000..7580e0e --- /dev/null +++ b/myapp/models/__init__.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- + +__author__ = 'RemiZOffAlex' +__copyright__ = '(c) RemiZOffAlex' +__license__ = 'MIT' +__email__ = 'remizoffalex@mail.ru' + +from sqlalchemy import create_engine +from sqlalchemy.orm import scoped_session, sessionmaker +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy_utils import database_exists, create_database + +from .. import app + +engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'], echo=True) +if not database_exists(engine.url): + create_database(engine.url) + +db_session = scoped_session(sessionmaker(autocommit=False, + autoflush=False, + bind=engine)) +Base = declarative_base() +Base.query = db_session.query_property() + +# Пользователи +from .users import User + +# IP +from .ip import IP + +# ACL +from .acl import ( + ObjectPermission, + RolePermission, + RoleSetPermission, + UserPermission, + UserRole, + IPPermission +) + +Base.metadata.create_all(engine) + +__all__ = [ + 'db_session' +] diff --git a/myapp/models/acl.py b/myapp/models/acl.py new file mode 100644 index 0000000..601e286 --- /dev/null +++ b/myapp/models/acl.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- + +__author__ = 'RemiZOffAlex' +__copyright__ = '(c) RemiZOffAlex' +__license__ = 'MIT' +__email__ = 'remizoffalex@mail.ru' +__url__ = 'http://remizoffalex.ru' + +import datetime +from sqlalchemy import ( + Table, + Column, + Boolean, + Integer, + ForeignKey, + String, + DateTime, + Enum +) +from sqlalchemy.orm import relationship + +from . import Base + + +class ObjectPermission(Base): + """ + Объекты доступа: процедура и содержащий процедуру модуль + """ + __tablename__ = "object_permission" + + id = Column(Integer, primary_key=True) + funcname = Column(String) + modulename = Column(String) + + # Связи + user_permissions = relationship( + "UserPermission", + primaryjoin="ObjectPermission.id==UserPermission.object_id" + ) + ip_permissions = relationship( + "IPPermission", + primaryjoin="ObjectPermission.id==IPPermission.object_id" + ) + + def __init__(self, modulename, funcname): + self.funcname = funcname + self.modulename = modulename + + def __repr__(self): + return "" % (self.funcname, + self.modulename) + + +class RolePermission(Base): + """Роли доступа""" + __tablename__ = "role_permission" + + id = Column(Integer, primary_key=True) + name = Column(String) + description = Column(String, default='') + + # Связи + set_objects = relationship( + "RoleSetPermission", + primaryjoin="RolePermission.id==RoleSetPermission.role_id" + ) + users = relationship( + "UserRole", + primaryjoin="RolePermission.id==UserRole.role_id" + ) + + def __init__(self, name): + self.name = name + + +class RoleSetPermission(Base): + """Набор прав доступа для роли""" + __tablename__ = "role_set_permission" + + id = Column(Integer, primary_key=True) + role_id = Column(Integer, ForeignKey('role_permission.id')) + object_id = Column(Integer, ForeignKey('object_permission.id')) + permission = Column(Enum('allow', 'deny')) # Разрешение + + # Связи + role = relationship( + "RolePermission", + primaryjoin="RoleSetPermission.role_id==RolePermission.id", + uselist=False + ) + object_permission = relationship( + "ObjectPermission", + primaryjoin="RoleSetPermission.object_id==ObjectPermission.id", + uselist=False + ) + + def __init__(self, role_permission, object_permission, permission): + self.role_id = role_permission.id + self.object_id = object_permission.id + self.permission = permission + + +class UserPermission(Base): + """Права доступа пользователя""" + __tablename__ = "user_permission" + + id = Column(Integer, primary_key=True) + object_id = Column(Integer, ForeignKey('object_permission.id')) + user_id = Column(Integer, ForeignKey('user.id')) + permission = Column(Enum('allow', 'deny')) # Разрешение + + # Связи + user = relationship( + "User", + primaryjoin="UserPermission.user_id==User.id", + uselist=False + ) + object_permission = relationship( + "ObjectPermission", + primaryjoin="UserPermission.object_id==ObjectPermission.id", + uselist=False + ) + + def __init__(self, object_permission, user, permission): + assert type(object_permission).__name__=='ObjectPermission', app.logger.info('Не передан объект ObjectPermission') + assert type(user).__name__=='User', app.logger.info('Не передан объект User') + self.object_id = object_permission.id + self.user_id = user.id + self.permission = permission + + +class UserRole(Base): + """Роль пользователя""" + __tablename__ = "user_role" + + id = Column(Integer, primary_key=True) + role_id = Column(Integer, ForeignKey('role_permission.id')) + user_id = Column(Integer, ForeignKey('user.id')) + + # Связи + user = relationship( + "User", + primaryjoin="UserRole.user_id==User.id", + uselist=False + ) + role_permission = relationship( + "RolePermission", + primaryjoin="UserRole.role_id==RolePermission.id", + uselist=False + ) + + def __init__(self, role_permission, user): + assert type(role_permission).__name__=='RolePermission', app.logger.info('Не передан объект RolePermission') + assert type(user).__name__=='User', app.logger.info('Не передан объект User') + self.role_id = role_permission.id + self.user_id = user.id + + +class IPPermission(Base): + """ + Права доступа для IP + """ + __tablename__ = "ip_permission" + + id = Column(Integer, primary_key=True) + object_id = Column(Integer, ForeignKey('object_permission.id')) + ip_id = Column(Integer, ForeignKey('ip.id')) + permission = Column(Enum('allow', 'deny')) # Разрешение + + # Связи + ip = relationship("IP", primaryjoin="IPPermission.ip_id==IP.id", uselist=False) + object_permission = relationship("ObjectPermission", primaryjoin="IPPermission.object_id==ObjectPermission.id", uselist=False) + + def __init__(self, object_permission, ip, permission): + assert type(object_permission).__name__=='ObjectPermission', app.logger.info('Не передан объект ObjectPermission') + assert type(ip).__name__=='IP', app.logger.info('Не передан объект IP') + self.object_id = object_permission.id + self.ip_id = ip.id + self.permission = permission diff --git a/myapp/models/ip.py b/myapp/models/ip.py new file mode 100644 index 0000000..930e7b0 --- /dev/null +++ b/myapp/models/ip.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- + +__author__ = 'RemiZOffAlex' +__copyright__ = '(c) RemiZOffAlex' +__license__ = 'MIT' +__email__ = 'remizoffalex@mail.ru' +__url__ = 'http://remizoffalex.ru' + +import datetime +from sqlalchemy import Table, Column, Boolean, Integer, ForeignKey, String, DateTime +from sqlalchemy.orm import relationship + +from . import Base + +class IP(Base): + __tablename__ = "ip" + + id = Column(Integer, primary_key=True) + ip = Column(String, nullable=False, unique=True) + description = Column(String) + + # Связи + # tagquestion = relationship("TagQuestion", primaryjoin="TagQuestion.tag_id==Tag.id") + + def __init__(self, ip): + self.ip = ip + + def __repr__(self): + return "" % (self.ip) diff --git a/myapp/models/users.py b/myapp/models/users.py new file mode 100644 index 0000000..2b4088e --- /dev/null +++ b/myapp/models/users.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- + +__author__ = 'RemiZOffAlex' +__copyright__ = '(c) RemiZOffAlex' +__license__ = 'MIT' +__email__ = 'remizoffalex@mail.ru' + +import datetime +from sqlalchemy import Table, Column, Boolean, Integer, ForeignKey, String, DateTime +from sqlalchemy.orm import relationship + +from . import Base + +class User(Base): + __tablename__ = "user" + + id = Column(Integer, primary_key=True) + name = Column(String, nullable=False, unique=True) + password = Column(String, nullable=False) + created = Column(DateTime) + + def __init__(self, name): + self.name = name + self.created = datetime.datetime.utcnow() diff --git a/myapp/static/ckeditor/CHANGES.md b/myapp/static/ckeditor/CHANGES.md new file mode 100644 index 0000000..0803614 --- /dev/null +++ b/myapp/static/ckeditor/CHANGES.md @@ -0,0 +1,1358 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.7.3 + +New Features: + +* [#568](https://github.com/ckeditor/ckeditor-dev/issues/568): Added possibility to adjust nested editables' filters using the [`CKEDITOR.filter.disallowedContent`](https://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-disallowedContent) property. + +Fixed Issues: + +* [#554](https://github.com/ckeditor/ckeditor-dev/issues/554): Fixed: [`change`](https://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event not fired when typing the first character after pasting into the editor. Thanks to [Daniel Miller](https://github.com/millerdev)! +* [#566](https://github.com/ckeditor/ckeditor-dev/issues/566): Fixed: The CSS `border` shorthand property with zero width (`border: 0px solid #000;`) causes the table to have the border attribute set to 1. +* [#779](https://github.com/ckeditor/ckeditor-dev/issues/779): Fixed: The [Remove Format](https://ckeditor.com/addon/removeformat) plugin removes elements with language definition inserted by the [Language](https://ckeditor.com/addon/language) plugin. +* [#423](https://github.com/ckeditor/ckeditor-dev/issues/423): Fixed: The [Paste from Word](https://ckeditor.com/addon/pastefromword) plugin pastes paragraphs into the editor even if [`CKEDITOR.config.enterMode`](https://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is set to `CKEDITOR.ENTER_BR`. +* [#719](https://github.com/ckeditor/ckeditor-dev/issues/719): Fixed: Image inserted using the [Enhanced Image](https://ckeditor.com/addon/image2) plugin can be resized when the editor is in [read-only mode](https://docs.ckeditor.com/#!/guide/dev_readonly). +* [#577](https://github.com/ckeditor/ckeditor-dev/issues/577): Fixed: The "Delete Columns" command provided by the [Table Tools](https://ckeditor.com/addon/tabletools) plugin throws an error when trying to delete columns. +* [#867](https://github.com/ckeditor/ckeditor-dev/issues/867): Fixed: Typing into a selected table throws an error. +* [#817](https://github.com/ckeditor/ckeditor-dev/issues/817): Fixed: The [Save](https://ckeditor.com/addon/save) plugin does not work in [Source Mode](https://ckeditor.com/addon/sourcearea). + +Other Changes: + +* Updated the [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin: + * [#40](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/40): Fixed: IE10 throws an error when spell checking is started. +* [#800](https://github.com/ckeditor/ckeditor-dev/issues/800): Added the [`CKEDITOR.dom.selection.isCollapsed`](https://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-isCollapsed) method which is a simpler way to check if the selection is collapsed. +* [#830](https://github.com/ckeditor/ckeditor-dev/issues/830): Added an option to define which dialog tab should be shown by default when creating [`CKEDITOR.dialogCommand`](https://docs.ckeditor.com/#!/api/CKEDITOR.dialogCommand). + +## CKEditor 4.7.2 + +New Features: + +* [#455](https://github.com/ckeditor/ckeditor-dev/issues/455): Added [Advanced Content Filter](https://docs.ckeditor.com/#!/guide/dev_acf) integration with the [Justify](http://ckeditor.com/addon/justify) plugin. + +Fixed Issues: + +* [#663](https://github.com/ckeditor/ckeditor-dev/issues/663): [Chrome] Fixed: Clicking the scrollbar throws an `Uncaught TypeError: element.is is not a function` error. +* [#694](https://github.com/ckeditor/ckeditor-dev/pull/694): Refactoring in the [Table Selection](http://ckeditor.com/addon/tableselection) plugin: + * [#520](https://github.com/ckeditor/ckeditor-dev/issues/520): Fixed: Widgets cannot be properly pasted into a table cell. + * [#460](https://github.com/ckeditor/ckeditor-dev/issues/460): Fixed: Editor gone after pasting into an editor within a table. +* [#579](https://github.com/ckeditor/ckeditor-dev/issues/579): Fixed: Internal `cke_table-faked-selection-table` class is visible in the Stylesheet Classes field of the [Table Properties](http://ckeditor.com/addon/table) dialog. +* [#545](https://github.com/ckeditor/ckeditor-dev/issues/545): [Edge] Fixed: Error thrown when pressing the [Select All](https://ckeditor.com/addon/selectall) button in [Source Mode](http://ckeditor.com/addon/sourcearea). +* [#582](https://github.com/ckeditor/ckeditor-dev/issues/582): Fixed: Double slash in the path to stylesheet needed by the [Table Selection](http://ckeditor.com/addon/tableselection) plugin. Thanks to [Marius Dumitru Florea](https://github.com/mflorea)! +* [#491](https://github.com/ckeditor/ckeditor-dev/issues/491): Fixed: Unnecessary dependency on the [Editor Toolbar](http://ckeditor.com/addon/toolbar) plugin inside the [Notification](http://ckeditor.com/addon/notification) plugin. +* [#646](https://github.com/ckeditor/ckeditor-dev/issues/646): Fixed: Error thrown into the browser console after opening the [Styles Combo](http://ckeditor.com/addon/stylescombo) plugin menu in the editor without any selection. +* [#501](https://github.com/ckeditor/ckeditor-dev/issues/501): Fixed: Double click does not open the dialog for modifying anchors inserted via the [Link](http://ckeditor.com/addon/link) plugin. +* [#9780](https://dev.ckeditor.com/ticket/9780): [IE8-9] Fixed: Clicking inside an empty [read-only](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) editor throws an error. +* [#16820](https://dev.ckeditor.com/ticket/16820): [IE10] Fixed: Clicking below a single horizontal rule throws an error. +* [#426](https://github.com/ckeditor/ckeditor-dev/issues/426): Fixed: The [`range.cloneContents`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-cloneContents) method selects the whole element when the selection starts at the beginning of that element. +* [#644](https://github.com/ckeditor/ckeditor-dev/issues/644): Fixed: The [`range.extractContents`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-extractContents) method returns an incorrect result when multiple nodes are selected. +* [#684](https://github.com/ckeditor/ckeditor-dev/issues/684): Fixed: The [`elementPath.contains`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.elementPath-method-contains) method incorrectly excludes the last element instead of root when the `fromTop` parameter is set to `true`. + +Other Changes: + +* Updated the [SCAYT](http://ckeditor.com/addon/scayt) (Spell Check As You Type) plugin: + * [#148](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/148): Fixed: SCAYT leaves underlined word after the CKEditor Replace dialog corrects it. +* [#751](https://github.com/ckeditor/ckeditor-dev/issues/751): Added the [`CKEDITOR.dom.nodeList.toArray`](https://docs.ckeditor.com/#!/api/CKEDITOR.dom.nodeList-method-toArray) method which returns an array representation of a [node list](https://docs.ckeditor.com/#!/api/CKEDITOR.dom.nodeList). + +## CKEditor 4.7.1 + +New Features: + +* Added a new Mexican Spanish localization. Thanks to [David Alexandro Rodriguez](https://www.transifex.com/user/profile/darsco16/)! +* [#413](https://github.com/ckeditor/ckeditor-dev/issues/413): Added Paste as Plain Text keyboard shortcut to the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) instructions. + +Fixed Issues: + +* [#515](https://github.com/ckeditor/ckeditor-dev/issues/515): [Chrome] Fixed: Mouse actions on CKEditor scrollbar throw an exception when the [Table Selection](http://ckeditor.com/addon/tableselection) plugin is loaded. +* [#493](https://github.com/ckeditor/ckeditor-dev/issues/493): Fixed: Selection started from a nested table causes an error in the browser while scrolling down. +* [#415](https://github.com/ckeditor/ckeditor-dev/issues/415): [Firefox] Fixed: Enter key breaks the table structure when pressed in a table selection. +* [#457](https://github.com/ckeditor/ckeditor-dev/issues/457): Fixed: Error thrown when deleting content from the editor with no selection. +* [#478](https://github.com/ckeditor/ckeditor-dev/issues/478): [Chrome] Fixed: Error thrown by the [Enter Key](http://ckeditor.com/addon/enterkey) plugin when pressing Enter with no selection. +* [#424](https://github.com/ckeditor/ckeditor-dev/issues/424): Fixed: Error thrown by [Tab Key Handling](http://ckeditor.com/addon/tab) and [Indent List](http://ckeditor.com/addon/indentlist) plugins when pressing Tab with no selection in inline editor. +* [#476](https://github.com/ckeditor/ckeditor-dev/issues/476): Fixed: Anchors inserted with the [Link](http://ckeditor.com/addon/link) plugin on collapsed selection cannot be edited. +* [#417](https://github.com/ckeditor/ckeditor-dev/issues/417): Fixed: The [Table Resize](http://ckeditor.com/addon/tableresize) plugin throws an error when used with a table with only header or footer rows. +* [#523](https://github.com/ckeditor/ckeditor-dev/issues/523): Fixed: The [`editor.getCommandKeystroke`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getCommandKeystroke) method does not obtain the correct keystroke. +* [#534](https://github.com/ckeditor/ckeditor-dev/issues/534): [IE] Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) does not work in Quirks Mode. +* [#450](https://github.com/ckeditor/ckeditor-dev/issues/450): Fixed: [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) incorrectly transforms the `margin` CSS property. + +## CKEditor 4.7 + +**Important Notes:** + +* [#13793](http://dev.ckeditor.com/ticket/13793): The [`embed_provider`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-embed_provider) configuration option for the [Media Embed](http://ckeditor.com/addon/embed) and [Semantic Media Embed](http://ckeditor.com/addon/embedsemantic) plugins is no longer preset by default. +* The [UI Color](http://ckeditor.com/addon/uicolor) plugin now uses a custom color picker instead of the `YUI 2.7.0` library which has some known vulnerabilities (it's a security precaution, there was no security issue in CKEditor due to the way it was used). + +New Features: + +* [#16755](http://dev.ckeditor.com/ticket/16755): Added the [Table Selection](http://ckeditor.com/addon/tableselection) plugin that lets you select and manipulate an arbitrary rectangular table fragment (a few cells, a row or a column). +* [#16961](http://dev.ckeditor.com/ticket/16961): Added support for pasting from Microsoft Excel. +* [#13381](http://dev.ckeditor.com/ticket/13381): Dynamic code evaluation call in [`CKEDITOR.template`](http://docs.ckeditor.com/#!/api/CKEDITOR.template) removed. CKEditor can now be used without the `unsafe-eval` Content Security Policy. Thanks to [Caridy Patiño](http://caridy.name)! +* [#16971](http://dev.ckeditor.com/ticket/16971): Added support for color in the `background` property containing also other styles for table cells in the [Table Tools](http://ckeditor.com/addon/tabletools) plugin. +* [#16847](http://dev.ckeditor.com/ticket/16847): Added support for parsing and inlining any formatting created using the Microsoft Word style system to the [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin. +* [#16818](http://dev.ckeditor.com/ticket/16818): Added table cell height parsing in the [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin. +* [#16850](http://dev.ckeditor.com/ticket/16850): Added a new [`config.enableContextMenu`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enableContextMenu) configuration option for enabling and disabling the [context menu](http://ckeditor.com/addon/contextmenu). +* [#16937](http://dev.ckeditor.com/ticket/16937): The `command` parameter in [CKEDITOR.editor.getCommandKeystroke](http://docs.ckeditor.dev/#!/api/CKEDITOR.editor-method-getCommandKeystroke) now also accepts a command name as an argument. +* [#17010](http://dev.ckeditor.com/ticket/17010): The [`CKEDITOR.dom.range.shrink`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-shrink) method now allows for skipping bogus `
` elements. + +Fixed Issues: + +* [#16935](http://dev.ckeditor.com/ticket/16935): [Chrome] Fixed: Blurring the editor in [Source Mode](http://ckeditor.com/addon/sourcearea) throws an error. +* [#16825](http://dev.ckeditor.com/ticket/16825): [Chrome] Fixed: Error thrown when destroying a focused inline editor. +* [#16857](http://dev.ckeditor.com/ticket/16857): Fixed: Ctrl+Shift+V blocked by [Copy Formatting](http://ckeditor.com/addon/copyformatting). +* [#16845](https://dev.ckeditor.com/ticket/16845): [IE] Fixed: Cursor jumps to the top of the scrolled editor after focusing it when the [Copy Formatting](http://ckeditor.com/addon/copyformatting) plugin is enabled. +* [#16786](http://dev.ckeditor.com/ticket/16786): Fixed: Added missing translations for the [Copy Formatting](http://ckeditor.com/addon/copyformatting) plugin. +* [#14714](http://dev.ckeditor.com/ticket/14714): [WebKit/Blink] Fixed: Exception thrown on refocusing a blurred inline editor. +* [#16913](http://dev.ckeditor.com/ticket/16913): [Firefox, IE] Fixed: [Paste as Plain Text](http://ckeditor.com/addon/pastetext) keystroke does not work. +* [#16968](http://dev.ckeditor.com/ticket/16968): Fixed: [Safari] [Paste as Plain Text](http://ckeditor.com/addon/pastetext) is not handled by the editor. +* [#16912](http://dev.ckeditor.com/ticket/16912): Fixed: Exception thrown when a single image is pasted using [Paste from Word](http://ckeditor.com/addon/pastefromword). +* [#16821](http://dev.ckeditor.com/ticket/16821): Fixed: Extraneous `` elements with `height` style stacked when [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#16866](http://dev.ckeditor.com/ticket/16866): [IE, Edge] Fixed: Whitespaces not preserved when [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#16860](http://dev.ckeditor.com/ticket/16860): Fixed: Paragraphs which only look like lists incorrectly transformed into them when [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#16817](http://dev.ckeditor.com/ticket/16817): Fixed: When [pasting from Word](http://ckeditor.com/addon/pastefromword), paragraphs are transformed into lists with some corrupted data. +* [#16833](http://dev.ckeditor.com/ticket/16833): [IE11] Fixed: Malformed list with headers [pasted from Word](http://ckeditor.com/addon/pastefromword). +* [#16826](http://dev.ckeditor.com/ticket/16826): [IE] Fixed: Superfluous paragraphs within lists [pasted from Word](http://ckeditor.com/addon/pastefromword). +* [#12465](http://dev.ckeditor.com/ticket/12465): Fixed: Cannot change the state of checkboxes or radio buttons if the properties dialog was invoked with a double-click. +* [#13062](http://dev.ckeditor.com/ticket/13062): Fixed: Impossible to unlink when the caret is at the edge of the link. +* [#13585](http://dev.ckeditor.com/ticket/13585): Fixed: Error when wrapping two adjacent `
` elements with a `
`. +* [#16811](http://dev.ckeditor.com/ticket/16811): Fixed: Table alignment is not preserved by the [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin. +* [#16810](http://dev.ckeditor.com/ticket/16810): Fixed: Vertical align in tables is not supported by the [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin. +* [#11956](http://dev.ckeditor.com/ticket/11956): [Blink, IE] Fixed: [Link](http://ckeditor.com/addon/link) dialog does not open on a double click on the second word of the link with a background color or other styles. +* [#10472](http://dev.ckeditor.com/ticket/10472): Fixed: Unable to use [Table Resize](http://ckeditor.com/addon/tableresize) on table header and footer. +* [#14762](http://dev.ckeditor.com/ticket/14762): Fixed: Hovering over an empty table (without rows or cells) throws an error when the [Table Resize](http://ckeditor.com/addon/tableresize) plugin is active. +* [#16777](https://dev.ckeditor.com/ticket/16777): [Edge] Fixed: The [Clipboard](http://ckeditor.com/addon/clipboard) plugin does not allow to drop widgets into the editor. +* [#14894](https://dev.ckeditor.com/ticket/14894): [Chrome] Fixed: The editor scrolls to the top after focusing or when a dialog is opened. +* [#14769](https://dev.ckeditor.com/ticket/14769): Fixed: URLs with '-' in host are not detected by the [Auto Link](http://ckeditor.com/addon/autolink) plugin. +* [#16804](https://dev.ckeditor.com/ticket/16804): Fixed: Focus is not on the first menu item when the user opens a context menu or a drop-down list from the editor toolbar. +* [#14407](https://dev.ckeditor.com/ticket/14407): [IE] Fixed: Non-editable widgets can be edited. +* [#16927](https://dev.ckeditor.com/ticket/16927): Fixed: An error thrown if a bundle containing the [Color Button](http://ckeditor.com/addon/colorbutton) plugin is run in ES5 strict mode. Thanks to [Igor Rubinovich](https://github.com/IgorRubinovich)! +* [#16920](http://dev.ckeditor.com/ticket/16920): Fixed: Several plugins not using the [Dialog](http://ckeditor.com/addon/dialog) plugin as a direct dependency. +* [PR#336](https://github.com/ckeditor/ckeditor-dev/pull/336): Fixed: Typo in [`CKEDITOR.getCss`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getCss) API documentation. Thanks to [knusperpixel](https://github.com/knusperpixel)! +* [#17027](http://dev.ckeditor.com/ticket/17027): Fixed: Command event data should be initialized as an empty object. +* Fixed the behavior of HTML parser when parsing `src`/`srcdoc` attributes of the `