From 42b8a446c6d88fb6d9fce4a73259c1842782671b Mon Sep 17 00:00:00 2001 From: RainLoop Team Date: Sat, 6 Dec 2014 01:01:33 +0400 Subject: [PATCH] Merged from sub repository (updated ckeditor, filters - step 3) Release commit --- dev/App/User.js | 38 +- dev/Common/Globals.js | 2 +- dev/Common/HtmlEditor.js | 4 + dev/Styles/Login.less | 27 +- dev/Styles/MessageView.less | 17 +- dev/Styles/SettingsIdentities.less | 2 +- dev/Styles/SettingsIdentity.less | 2 +- dev/Styles/_CkeFix.less | 2 +- dev/Styles/_End.less | 11 + dev/View/Popup/Compose.js | 15 +- dev/View/User/Login.js | 23 + dev/View/User/MailBox/MessageView.js | 113 +- gulpfile.js | 13 +- package.json | 2 +- plugins/recaptcha-2/index.php | 150 + plugins/recaptcha-2/js/recaptcha.js | 83 + .../templates/PluginLoginReCaptchaGroup.html | 3 + plugins/recaptcha/VERSION | 2 +- .../templates/PluginLoginReCaptchaGroup.html | 26 +- rainloop/v/0.0.0/app/templates/Index.html | 2 +- .../app/templates/Views/Admin/AdminLogin.html | 14 +- .../0.0.0/app/templates/Views/User/Login.html | 34 +- .../templates/Views/User/MailMessageView.html | 6 +- .../app/templates/Views/User/PhotoSwipe.html | 33 + rainloop/v/0.0.0/langs/bg.ini | 4 +- rainloop/v/0.0.0/langs/de.ini | 4 +- rainloop/v/0.0.0/langs/en.ini | 8 +- rainloop/v/0.0.0/langs/es.ini | 4 +- rainloop/v/0.0.0/langs/fr.ini | 4 +- rainloop/v/0.0.0/langs/hu.ini | 4 +- rainloop/v/0.0.0/langs/is.ini | 4 +- rainloop/v/0.0.0/langs/it.ini | 4 +- rainloop/v/0.0.0/langs/ja-jp.ini | 4 +- rainloop/v/0.0.0/langs/ko-kr.ini | 4 +- rainloop/v/0.0.0/langs/lt.ini | 4 +- rainloop/v/0.0.0/langs/lv.ini | 4 +- rainloop/v/0.0.0/langs/nl.ini | 4 +- rainloop/v/0.0.0/langs/no.ini | 4 +- rainloop/v/0.0.0/langs/pl.ini | 4 +- rainloop/v/0.0.0/langs/pt-br.ini | 4 +- rainloop/v/0.0.0/langs/pt-pt.ini | 4 +- rainloop/v/0.0.0/langs/ro.ini | 4 +- rainloop/v/0.0.0/langs/ru.ini | 4 +- rainloop/v/0.0.0/langs/sk.ini | 4 +- rainloop/v/0.0.0/langs/sv.ini | 4 +- rainloop/v/0.0.0/langs/tr.ini | 4 +- rainloop/v/0.0.0/langs/ua.ini | 4 +- rainloop/v/0.0.0/langs/zh-cn.ini | 4 +- rainloop/v/0.0.0/langs/zh-tw.ini | 4 +- rainloop/v/0.0.0/static/ckeditor/CHANGES.md | 36 +- .../v/0.0.0/static/ckeditor/build-config.js | 9 +- rainloop/v/0.0.0/static/ckeditor/ckeditor.js | 729 ++-- .../v/0.0.0/static/ckeditor/ckeditor.orig.js | 905 ++++ rainloop/v/0.0.0/static/ckeditor/lang/af.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/ar.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/bg.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/bn.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/bs.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/ca.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/cs.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/cy.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/da.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/de.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/el.js | 2 +- .../v/0.0.0/static/ckeditor/lang/en-au.js | 2 +- .../v/0.0.0/static/ckeditor/lang/en-ca.js | 2 +- .../v/0.0.0/static/ckeditor/lang/en-gb.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/en.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/eo.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/es.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/et.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/eu.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/fa.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/fi.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/fo.js | 2 +- .../v/0.0.0/static/ckeditor/lang/fr-ca.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/fr.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/gl.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/gu.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/he.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/hi.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/hr.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/hu.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/id.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/is.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/it.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/ja.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/ka.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/km.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/ko.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/ku.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/lt.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/lv.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/mk.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/mn.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/ms.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/nb.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/nl.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/no.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/pl.js | 2 +- .../v/0.0.0/static/ckeditor/lang/pt-br.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/pt.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/ro.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/ru.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/si.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/sk.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/sl.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/sq.js | 2 +- .../v/0.0.0/static/ckeditor/lang/sr-latn.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/sr.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/sv.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/th.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/tr.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/tt.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/ug.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/uk.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/vi.js | 2 +- .../v/0.0.0/static/ckeditor/lang/zh-cn.js | 2 +- rainloop/v/0.0.0/static/ckeditor/lang/zh.js | 2 +- .../ckeditor/plugins/bidi/icons/bidiltr.png | Bin 0 -> 769 bytes .../ckeditor/plugins/bidi/icons/bidirtl.png | Bin 0 -> 768 bytes .../plugins/bidi/icons/hidpi/bidiltr.png | Bin 0 -> 1579 bytes .../plugins/bidi/icons/hidpi/bidirtl.png | Bin 0 -> 1596 bytes .../static/ckeditor/plugins/bidi/lang/af.js | 8 + .../static/ckeditor/plugins/bidi/lang/ar.js | 8 + .../static/ckeditor/plugins/bidi/lang/bg.js | 8 + .../static/ckeditor/plugins/bidi/lang/bn.js | 8 + .../static/ckeditor/plugins/bidi/lang/bs.js | 8 + .../static/ckeditor/plugins/bidi/lang/ca.js | 8 + .../static/ckeditor/plugins/bidi/lang/cs.js | 8 + .../static/ckeditor/plugins/bidi/lang/cy.js | 8 + .../static/ckeditor/plugins/bidi/lang/da.js | 8 + .../static/ckeditor/plugins/bidi/lang/de.js | 8 + .../static/ckeditor/plugins/bidi/lang/el.js | 8 + .../ckeditor/plugins/bidi/lang/en-au.js | 8 + .../ckeditor/plugins/bidi/lang/en-ca.js | 8 + .../ckeditor/plugins/bidi/lang/en-gb.js | 8 + .../static/ckeditor/plugins/bidi/lang/en.js | 8 + .../static/ckeditor/plugins/bidi/lang/eo.js | 8 + .../static/ckeditor/plugins/bidi/lang/es.js | 8 + .../static/ckeditor/plugins/bidi/lang/et.js | 8 + .../static/ckeditor/plugins/bidi/lang/eu.js | 8 + .../static/ckeditor/plugins/bidi/lang/fa.js | 8 + .../static/ckeditor/plugins/bidi/lang/fi.js | 8 + .../static/ckeditor/plugins/bidi/lang/fo.js | 8 + .../ckeditor/plugins/bidi/lang/fr-ca.js | 8 + .../static/ckeditor/plugins/bidi/lang/fr.js | 8 + .../static/ckeditor/plugins/bidi/lang/gl.js | 8 + .../static/ckeditor/plugins/bidi/lang/gu.js | 8 + .../static/ckeditor/plugins/bidi/lang/he.js | 8 + .../static/ckeditor/plugins/bidi/lang/hi.js | 8 + .../static/ckeditor/plugins/bidi/lang/hr.js | 8 + .../static/ckeditor/plugins/bidi/lang/hu.js | 8 + .../static/ckeditor/plugins/bidi/lang/id.js | 8 + .../static/ckeditor/plugins/bidi/lang/is.js | 8 + .../static/ckeditor/plugins/bidi/lang/it.js | 8 + .../static/ckeditor/plugins/bidi/lang/ja.js | 8 + .../static/ckeditor/plugins/bidi/lang/ka.js | 8 + .../static/ckeditor/plugins/bidi/lang/km.js | 8 + .../static/ckeditor/plugins/bidi/lang/ko.js | 8 + .../static/ckeditor/plugins/bidi/lang/ku.js | 8 + .../static/ckeditor/plugins/bidi/lang/lt.js | 8 + .../static/ckeditor/plugins/bidi/lang/lv.js | 8 + .../static/ckeditor/plugins/bidi/lang/mk.js | 8 + .../static/ckeditor/plugins/bidi/lang/mn.js | 8 + .../static/ckeditor/plugins/bidi/lang/ms.js | 8 + .../static/ckeditor/plugins/bidi/lang/nb.js | 8 + .../static/ckeditor/plugins/bidi/lang/nl.js | 8 + .../static/ckeditor/plugins/bidi/lang/no.js | 8 + .../static/ckeditor/plugins/bidi/lang/pl.js | 8 + .../ckeditor/plugins/bidi/lang/pt-br.js | 8 + .../static/ckeditor/plugins/bidi/lang/pt.js | 8 + .../static/ckeditor/plugins/bidi/lang/ro.js | 8 + .../static/ckeditor/plugins/bidi/lang/ru.js | 8 + .../static/ckeditor/plugins/bidi/lang/si.js | 8 + .../static/ckeditor/plugins/bidi/lang/sk.js | 8 + .../static/ckeditor/plugins/bidi/lang/sl.js | 8 + .../static/ckeditor/plugins/bidi/lang/sq.js | 8 + .../ckeditor/plugins/bidi/lang/sr-latn.js | 8 + .../static/ckeditor/plugins/bidi/lang/sr.js | 8 + .../static/ckeditor/plugins/bidi/lang/sv.js | 8 + .../static/ckeditor/plugins/bidi/lang/th.js | 8 + .../static/ckeditor/plugins/bidi/lang/tr.js | 8 + .../static/ckeditor/plugins/bidi/lang/tt.js | 8 + .../static/ckeditor/plugins/bidi/lang/ug.js | 8 + .../static/ckeditor/plugins/bidi/lang/uk.js | 8 + .../static/ckeditor/plugins/bidi/lang/vi.js | 8 + .../ckeditor/plugins/bidi/lang/zh-cn.js | 8 + .../static/ckeditor/plugins/bidi/lang/zh.js | 8 + .../static/ckeditor/plugins/bidi/plugin.js | 305 ++ .../v/0.0.0/static/ckeditor/plugins/icons.png | Bin 9145 -> 8827 bytes .../static/ckeditor/plugins/icons_hidpi.png | Bin 28240 -> 27211 bytes .../static/ckeditor/plugins/plain/plugin.js | 2 +- .../ckeditor/plugins/signature/plugin.js | 18 - .../static/ckeditor/skins/icy_orange/bold.png | Bin 1064 -> 0 bytes .../ckeditor/skins/icy_orange/dialog.css | 5 - .../ckeditor/skins/icy_orange/dialog_ie.css | 5 - .../ckeditor/skins/icy_orange/dialog_ie7.css | 5 - .../ckeditor/skins/icy_orange/dialog_ie8.css | 5 - .../skins/icy_orange/dialog_iequirks.css | 5 - .../skins/icy_orange/dialog_opera.css | 5 - .../ckeditor/skins/icy_orange/editor.css | 5 - .../skins/icy_orange/editor_gecko.css | 5 - .../ckeditor/skins/icy_orange/editor_ie.css | 5 - .../ckeditor/skins/icy_orange/editor_ie7.css | 5 - .../ckeditor/skins/icy_orange/editor_ie8.css | 5 - .../skins/icy_orange/editor_iequirks.css | 5 - .../ckeditor/skins/icy_orange/find-rtl.png | Bin 1186 -> 0 bytes .../ckeditor/skins/icy_orange/icons.png | Bin 4914 -> 0 bytes .../ckeditor/skins/icy_orange/icons_hidpi.png | Bin 6251 -> 0 bytes .../skins/icy_orange/images/arrow.png | Bin 261 -> 0 bytes .../skins/icy_orange/images/close.png | Bin 824 -> 0 bytes .../skins/icy_orange/images/hidpi/close.png | Bin 1792 -> 0 bytes .../skins/icy_orange/images/hidpi/lock.png | Bin 1616 -> 0 bytes .../skins/icy_orange/images/hidpi/refresh.png | Bin 2320 -> 0 bytes .../skins/icy_orange/images/lock-open.png | Bin 736 -> 0 bytes .../ckeditor/skins/icy_orange/images/lock.png | Bin 728 -> 0 bytes .../skins/icy_orange/images/refresh.png | Bin 953 -> 0 bytes .../ckeditor/skins/icy_orange/scayt.png | Bin 1191 -> 0 bytes .../static/ckeditor/skins/moono/dialog.css | 5 + .../static/ckeditor/skins/moono/dialog_ie.css | 5 + .../ckeditor/skins/moono/dialog_ie7.css | 5 + .../ckeditor/skins/moono/dialog_ie8.css | 5 + .../ckeditor/skins/moono/dialog_iequirks.css | 5 + .../static/ckeditor/skins/moono/editor.css | 5 + .../ckeditor/skins/moono/editor_gecko.css | 5 + .../static/ckeditor/skins/moono/editor_ie.css | 5 + .../ckeditor/skins/moono/editor_ie7.css | 5 + .../ckeditor/skins/moono/editor_ie8.css | 5 + .../ckeditor/skins/moono/editor_iequirks.css | 5 + .../static/ckeditor/skins/moono/icons.png | Bin 0 -> 8827 bytes .../ckeditor/skins/moono/icons_hidpi.png | Bin 0 -> 27211 bytes .../ckeditor/skins/moono/images/arrow.png | Bin 0 -> 191 bytes .../ckeditor/skins/moono/images/close.png | Bin 0 -> 468 bytes .../skins/moono/images/hidpi/close.png | Bin 0 -> 1271 bytes .../skins/moono}/images/hidpi/lock-open.png | Bin 1503 -> 1329 bytes .../skins/moono/images/hidpi/lock.png | Bin 0 -> 1299 bytes .../skins/moono/images/hidpi/refresh.png | Bin 0 -> 1842 bytes .../ckeditor/skins/moono/images/lock-open.png | Bin 0 -> 349 bytes .../ckeditor/skins/moono/images/lock.png | Bin 0 -> 475 bytes .../ckeditor/skins/moono/images/refresh.png | Bin 0 -> 422 bytes .../skins/{icy_orange => moono}/readme.md | 2 +- rainloop/v/0.0.0/static/css/default-skin.png | Bin 0 -> 1088 bytes rainloop/v/0.0.0/static/css/default-skin.svg | 38 + rainloop/v/0.0.0/static/css/preloader.gif | Bin 0 -> 869 bytes vendors/ckeditor/CHANGES.md | 36 +- vendors/ckeditor/adapters/jquery.js | 2 +- vendors/ckeditor/build-config.js | 11 +- vendors/ckeditor/ckeditor.js | 723 ++-- vendors/ckeditor/ckeditor.orig.js | 905 ++++ vendors/ckeditor/lang/af.js | 4 +- vendors/ckeditor/lang/ar.js | 4 +- vendors/ckeditor/lang/bg.js | 4 +- vendors/ckeditor/lang/bn.js | 4 +- vendors/ckeditor/lang/bs.js | 4 +- vendors/ckeditor/lang/ca.js | 4 +- vendors/ckeditor/lang/cs.js | 4 +- vendors/ckeditor/lang/cy.js | 4 +- vendors/ckeditor/lang/da.js | 4 +- vendors/ckeditor/lang/de.js | 4 +- vendors/ckeditor/lang/el.js | 4 +- vendors/ckeditor/lang/en-au.js | 4 +- vendors/ckeditor/lang/en-ca.js | 4 +- vendors/ckeditor/lang/en-gb.js | 4 +- vendors/ckeditor/lang/en.js | 4 +- vendors/ckeditor/lang/eo.js | 4 +- vendors/ckeditor/lang/es.js | 4 +- vendors/ckeditor/lang/et.js | 4 +- vendors/ckeditor/lang/eu.js | 4 +- vendors/ckeditor/lang/fa.js | 4 +- vendors/ckeditor/lang/fi.js | 4 +- vendors/ckeditor/lang/fo.js | 4 +- vendors/ckeditor/lang/fr-ca.js | 4 +- vendors/ckeditor/lang/fr.js | 4 +- vendors/ckeditor/lang/gl.js | 4 +- vendors/ckeditor/lang/gu.js | 4 +- vendors/ckeditor/lang/he.js | 4 +- vendors/ckeditor/lang/hi.js | 4 +- vendors/ckeditor/lang/hr.js | 4 +- vendors/ckeditor/lang/hu.js | 4 +- vendors/ckeditor/lang/id.js | 4 +- vendors/ckeditor/lang/is.js | 4 +- vendors/ckeditor/lang/it.js | 4 +- vendors/ckeditor/lang/ja.js | 4 +- vendors/ckeditor/lang/ka.js | 4 +- vendors/ckeditor/lang/km.js | 4 +- vendors/ckeditor/lang/ko.js | 4 +- vendors/ckeditor/lang/ku.js | 4 +- vendors/ckeditor/lang/lt.js | 4 +- vendors/ckeditor/lang/lv.js | 4 +- vendors/ckeditor/lang/mk.js | 4 +- vendors/ckeditor/lang/mn.js | 4 +- vendors/ckeditor/lang/ms.js | 4 +- vendors/ckeditor/lang/nb.js | 4 +- vendors/ckeditor/lang/nl.js | 4 +- vendors/ckeditor/lang/no.js | 4 +- vendors/ckeditor/lang/pl.js | 4 +- vendors/ckeditor/lang/pt-br.js | 4 +- vendors/ckeditor/lang/pt.js | 4 +- vendors/ckeditor/lang/ro.js | 4 +- vendors/ckeditor/lang/ru.js | 4 +- vendors/ckeditor/lang/si.js | 4 +- vendors/ckeditor/lang/sk.js | 4 +- vendors/ckeditor/lang/sl.js | 4 +- vendors/ckeditor/lang/sq.js | 4 +- vendors/ckeditor/lang/sr-latn.js | 4 +- vendors/ckeditor/lang/sr.js | 4 +- vendors/ckeditor/lang/sv.js | 4 +- vendors/ckeditor/lang/th.js | 4 +- vendors/ckeditor/lang/tr.js | 4 +- vendors/ckeditor/lang/tt.js | 4 +- vendors/ckeditor/lang/ug.js | 4 +- vendors/ckeditor/lang/uk.js | 4 +- vendors/ckeditor/lang/vi.js | 4 +- vendors/ckeditor/lang/zh-cn.js | 4 +- vendors/ckeditor/lang/zh.js | 4 +- .../base64image/dialogs/base64image.js | 2 +- .../ckeditor/plugins/bidi/icons/bidiltr.png | Bin 0 -> 769 bytes .../ckeditor/plugins/bidi/icons/bidirtl.png | Bin 0 -> 768 bytes .../plugins/bidi/icons/hidpi/bidiltr.png | Bin 0 -> 1579 bytes .../plugins/bidi/icons/hidpi/bidirtl.png | Bin 0 -> 1596 bytes vendors/ckeditor/plugins/bidi/lang/af.js | 8 + vendors/ckeditor/plugins/bidi/lang/ar.js | 8 + vendors/ckeditor/plugins/bidi/lang/bg.js | 8 + vendors/ckeditor/plugins/bidi/lang/bn.js | 8 + vendors/ckeditor/plugins/bidi/lang/bs.js | 8 + vendors/ckeditor/plugins/bidi/lang/ca.js | 8 + vendors/ckeditor/plugins/bidi/lang/cs.js | 8 + vendors/ckeditor/plugins/bidi/lang/cy.js | 8 + vendors/ckeditor/plugins/bidi/lang/da.js | 8 + vendors/ckeditor/plugins/bidi/lang/de.js | 8 + vendors/ckeditor/plugins/bidi/lang/el.js | 8 + vendors/ckeditor/plugins/bidi/lang/en-au.js | 8 + vendors/ckeditor/plugins/bidi/lang/en-ca.js | 8 + vendors/ckeditor/plugins/bidi/lang/en-gb.js | 8 + vendors/ckeditor/plugins/bidi/lang/en.js | 8 + vendors/ckeditor/plugins/bidi/lang/eo.js | 8 + vendors/ckeditor/plugins/bidi/lang/es.js | 8 + vendors/ckeditor/plugins/bidi/lang/et.js | 8 + vendors/ckeditor/plugins/bidi/lang/eu.js | 8 + vendors/ckeditor/plugins/bidi/lang/fa.js | 8 + vendors/ckeditor/plugins/bidi/lang/fi.js | 8 + vendors/ckeditor/plugins/bidi/lang/fo.js | 8 + vendors/ckeditor/plugins/bidi/lang/fr-ca.js | 8 + vendors/ckeditor/plugins/bidi/lang/fr.js | 8 + vendors/ckeditor/plugins/bidi/lang/gl.js | 8 + vendors/ckeditor/plugins/bidi/lang/gu.js | 8 + vendors/ckeditor/plugins/bidi/lang/he.js | 8 + vendors/ckeditor/plugins/bidi/lang/hi.js | 8 + vendors/ckeditor/plugins/bidi/lang/hr.js | 8 + vendors/ckeditor/plugins/bidi/lang/hu.js | 8 + vendors/ckeditor/plugins/bidi/lang/id.js | 8 + vendors/ckeditor/plugins/bidi/lang/is.js | 8 + vendors/ckeditor/plugins/bidi/lang/it.js | 8 + vendors/ckeditor/plugins/bidi/lang/ja.js | 8 + vendors/ckeditor/plugins/bidi/lang/ka.js | 8 + vendors/ckeditor/plugins/bidi/lang/km.js | 8 + vendors/ckeditor/plugins/bidi/lang/ko.js | 8 + vendors/ckeditor/plugins/bidi/lang/ku.js | 8 + vendors/ckeditor/plugins/bidi/lang/lt.js | 8 + vendors/ckeditor/plugins/bidi/lang/lv.js | 8 + vendors/ckeditor/plugins/bidi/lang/mk.js | 8 + vendors/ckeditor/plugins/bidi/lang/mn.js | 8 + vendors/ckeditor/plugins/bidi/lang/ms.js | 8 + vendors/ckeditor/plugins/bidi/lang/nb.js | 8 + vendors/ckeditor/plugins/bidi/lang/nl.js | 8 + vendors/ckeditor/plugins/bidi/lang/no.js | 8 + vendors/ckeditor/plugins/bidi/lang/pl.js | 8 + vendors/ckeditor/plugins/bidi/lang/pt-br.js | 8 + vendors/ckeditor/plugins/bidi/lang/pt.js | 8 + vendors/ckeditor/plugins/bidi/lang/ro.js | 8 + vendors/ckeditor/plugins/bidi/lang/ru.js | 8 + vendors/ckeditor/plugins/bidi/lang/si.js | 8 + vendors/ckeditor/plugins/bidi/lang/sk.js | 8 + vendors/ckeditor/plugins/bidi/lang/sl.js | 8 + vendors/ckeditor/plugins/bidi/lang/sq.js | 8 + vendors/ckeditor/plugins/bidi/lang/sr-latn.js | 8 + vendors/ckeditor/plugins/bidi/lang/sr.js | 8 + vendors/ckeditor/plugins/bidi/lang/sv.js | 8 + vendors/ckeditor/plugins/bidi/lang/th.js | 8 + vendors/ckeditor/plugins/bidi/lang/tr.js | 8 + vendors/ckeditor/plugins/bidi/lang/tt.js | 8 + vendors/ckeditor/plugins/bidi/lang/ug.js | 8 + vendors/ckeditor/plugins/bidi/lang/uk.js | 8 + vendors/ckeditor/plugins/bidi/lang/vi.js | 8 + vendors/ckeditor/plugins/bidi/lang/zh-cn.js | 8 + vendors/ckeditor/plugins/bidi/lang/zh.js | 8 + vendors/ckeditor/plugins/bidi/plugin.js | 305 ++ .../plugins/clipboard/dialogs/paste.js | 2 +- .../plugins/dialog/dialogDefinition.js | 2 +- vendors/ckeditor/plugins/icons.png | Bin 9145 -> 8827 bytes vendors/ckeditor/plugins/icons_hidpi.png | Bin 28240 -> 27211 bytes .../ckeditor/plugins/image/dialogs/image.js | 2 +- .../ckeditor/plugins/image2/dialogs/image2.js | 2 +- .../ckeditor/plugins/link/dialogs/anchor.js | 2 +- vendors/ckeditor/plugins/link/dialogs/link.js | 2 +- .../plugins/plain/icons/hidpi/plain-rtl.png | Bin 0 -> 1968 bytes .../plugins/plain/icons/hidpi/plain.png | Bin 0 -> 1999 bytes .../plugins/plain/icons/plain-rtl.png | Bin 0 -> 762 bytes .../ckeditor/plugins/plain/icons/plain.png | Bin 0 -> 764 bytes vendors/ckeditor/plugins/plain/plugin.js | 177 + .../samples/assets/uilanguages/languages.js | 2 +- .../plugins/dialog/assets/my_dialog.js | 2 +- .../assets/outputforflash/swfobject.js | 2 +- vendors/ckeditor/samples/sample.js | 2 +- vendors/ckeditor/skins/icy_orange/bold.png | Bin 1064 -> 0 bytes vendors/ckeditor/skins/icy_orange/dialog.css | 5 - .../ckeditor/skins/icy_orange/dialog_ie.css | 5 - .../ckeditor/skins/icy_orange/dialog_ie7.css | 5 - .../ckeditor/skins/icy_orange/dialog_ie8.css | 5 - .../skins/icy_orange/dialog_iequirks.css | 5 - .../skins/icy_orange/dialog_opera.css | 5 - vendors/ckeditor/skins/icy_orange/editor.css | 5 - .../skins/icy_orange/editor_gecko.css | 5 - .../ckeditor/skins/icy_orange/editor_ie.css | 5 - .../ckeditor/skins/icy_orange/editor_ie7.css | 5 - .../ckeditor/skins/icy_orange/editor_ie8.css | 5 - .../skins/icy_orange/editor_iequirks.css | 5 - .../ckeditor/skins/icy_orange/find-rtl.png | Bin 1186 -> 0 bytes vendors/ckeditor/skins/icy_orange/icons.png | Bin 4914 -> 0 bytes .../ckeditor/skins/icy_orange/icons_hidpi.png | Bin 6251 -> 0 bytes .../skins/icy_orange/images/arrow.png | Bin 261 -> 0 bytes .../skins/icy_orange/images/close.png | Bin 824 -> 0 bytes .../skins/icy_orange/images/hidpi/close.png | Bin 1792 -> 0 bytes .../skins/icy_orange/images/hidpi/lock.png | Bin 1616 -> 0 bytes .../skins/icy_orange/images/hidpi/refresh.png | Bin 2320 -> 0 bytes .../skins/icy_orange/images/lock-open.png | Bin 736 -> 0 bytes .../ckeditor/skins/icy_orange/images/lock.png | Bin 728 -> 0 bytes .../skins/icy_orange/images/refresh.png | Bin 953 -> 0 bytes vendors/ckeditor/skins/icy_orange/scayt.png | Bin 1191 -> 0 bytes vendors/ckeditor/skins/moono/dialog.css | 5 + vendors/ckeditor/skins/moono/dialog_ie.css | 5 + vendors/ckeditor/skins/moono/dialog_ie7.css | 5 + vendors/ckeditor/skins/moono/dialog_ie8.css | 5 + .../ckeditor/skins/moono/dialog_iequirks.css | 5 + vendors/ckeditor/skins/moono/editor.css | 5 + vendors/ckeditor/skins/moono/editor_gecko.css | 5 + vendors/ckeditor/skins/moono/editor_ie.css | 5 + vendors/ckeditor/skins/moono/editor_ie7.css | 5 + vendors/ckeditor/skins/moono/editor_ie8.css | 5 + .../ckeditor/skins/moono/editor_iequirks.css | 5 + vendors/ckeditor/skins/moono/icons.png | Bin 0 -> 8827 bytes vendors/ckeditor/skins/moono/icons_hidpi.png | Bin 0 -> 27211 bytes vendors/ckeditor/skins/moono/images/arrow.png | Bin 0 -> 191 bytes vendors/ckeditor/skins/moono/images/close.png | Bin 0 -> 468 bytes .../skins/moono/images/hidpi/close.png | Bin 0 -> 1271 bytes .../skins/moono}/images/hidpi/lock-open.png | Bin 1503 -> 1329 bytes .../skins/moono/images/hidpi/lock.png | Bin 0 -> 1299 bytes .../skins/moono/images/hidpi/refresh.png | Bin 0 -> 1842 bytes .../ckeditor/skins/moono/images/lock-open.png | Bin 0 -> 349 bytes vendors/ckeditor/skins/moono/images/lock.png | Bin 0 -> 475 bytes .../ckeditor/skins/moono/images/refresh.png | Bin 0 -> 422 bytes .../skins/{icy_orange => moono}/readme.md | 2 +- vendors/ckeditor/styles.js | 2 +- .../photoswipe/default-skin/default-skin.css | 418 ++ .../photoswipe/default-skin/default-skin.png | Bin 0 -> 1088 bytes .../photoswipe/default-skin/default-skin.svg | 38 + vendors/photoswipe/default-skin/preloader.gif | Bin 0 -> 869 bytes vendors/photoswipe/photoswipe-ui-default.js | 824 ++++ .../photoswipe/photoswipe-ui-default.min.js | 4 + vendors/photoswipe/photoswipe.css | 125 + vendors/photoswipe/photoswipe.js | 3644 +++++++++++++++++ vendors/photoswipe/photoswipe.min.js | 4 + webpack.config.js | 2 + 464 files changed, 10395 insertions(+), 1303 deletions(-) create mode 100644 plugins/recaptcha-2/index.php create mode 100644 plugins/recaptcha-2/js/recaptcha.js create mode 100644 plugins/recaptcha-2/templates/PluginLoginReCaptchaGroup.html create mode 100644 rainloop/v/0.0.0/app/templates/Views/User/PhotoSwipe.html create mode 100644 rainloop/v/0.0.0/static/ckeditor/ckeditor.orig.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/icons/bidiltr.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/icons/bidirtl.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/icons/hidpi/bidiltr.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/icons/hidpi/bidirtl.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/af.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/ar.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/bg.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/bn.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/bs.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/ca.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/cs.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/cy.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/da.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/de.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/el.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/en-au.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/en-ca.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/en-gb.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/en.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/eo.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/es.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/et.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/eu.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/fa.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/fi.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/fo.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/fr-ca.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/fr.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/gl.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/gu.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/he.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/hi.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/hr.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/hu.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/id.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/is.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/it.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/ja.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/ka.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/km.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/ko.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/ku.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/lt.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/lv.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/mk.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/mn.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/ms.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/nb.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/nl.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/no.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/pl.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/pt-br.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/pt.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/ro.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/ru.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/si.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/sk.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/sl.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/sq.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/sr-latn.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/sr.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/sv.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/th.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/tr.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/tt.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/ug.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/uk.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/vi.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/zh-cn.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/lang/zh.js create mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/bidi/plugin.js delete mode 100644 rainloop/v/0.0.0/static/ckeditor/plugins/signature/plugin.js delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/bold.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/dialog.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/dialog_ie.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/dialog_ie7.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/dialog_ie8.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/dialog_iequirks.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/dialog_opera.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/editor.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/editor_gecko.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/editor_ie.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/editor_ie7.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/editor_ie8.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/editor_iequirks.css delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/find-rtl.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/icons.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/icons_hidpi.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/images/arrow.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/images/close.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/images/hidpi/close.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/images/hidpi/lock.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/images/hidpi/refresh.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/images/lock-open.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/images/lock.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/images/refresh.png delete mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/icy_orange/scayt.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/dialog.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/dialog_ie.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/dialog_ie7.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/dialog_ie8.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/dialog_iequirks.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/editor.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/editor_gecko.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/editor_ie.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/editor_ie7.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/editor_ie8.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/editor_iequirks.css create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/icons.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/icons_hidpi.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/images/arrow.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/images/close.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/images/hidpi/close.png rename {vendors/ckeditor/skins/icy_orange => rainloop/v/0.0.0/static/ckeditor/skins/moono}/images/hidpi/lock-open.png (61%) create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/images/hidpi/lock.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/images/hidpi/refresh.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/images/lock-open.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/images/lock.png create mode 100644 rainloop/v/0.0.0/static/ckeditor/skins/moono/images/refresh.png rename rainloop/v/0.0.0/static/ckeditor/skins/{icy_orange => moono}/readme.md (97%) create mode 100644 rainloop/v/0.0.0/static/css/default-skin.png create mode 100644 rainloop/v/0.0.0/static/css/default-skin.svg create mode 100644 rainloop/v/0.0.0/static/css/preloader.gif create mode 100644 vendors/ckeditor/ckeditor.orig.js create mode 100644 vendors/ckeditor/plugins/bidi/icons/bidiltr.png create mode 100644 vendors/ckeditor/plugins/bidi/icons/bidirtl.png create mode 100644 vendors/ckeditor/plugins/bidi/icons/hidpi/bidiltr.png create mode 100644 vendors/ckeditor/plugins/bidi/icons/hidpi/bidirtl.png create mode 100644 vendors/ckeditor/plugins/bidi/lang/af.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/ar.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/bg.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/bn.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/bs.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/ca.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/cs.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/cy.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/da.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/de.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/el.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/en-au.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/en-ca.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/en-gb.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/en.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/eo.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/es.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/et.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/eu.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/fa.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/fi.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/fo.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/fr-ca.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/fr.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/gl.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/gu.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/he.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/hi.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/hr.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/hu.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/id.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/is.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/it.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/ja.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/ka.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/km.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/ko.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/ku.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/lt.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/lv.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/mk.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/mn.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/ms.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/nb.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/nl.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/no.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/pl.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/pt-br.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/pt.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/ro.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/ru.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/si.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/sk.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/sl.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/sq.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/sr-latn.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/sr.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/sv.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/th.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/tr.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/tt.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/ug.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/uk.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/vi.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/zh-cn.js create mode 100644 vendors/ckeditor/plugins/bidi/lang/zh.js create mode 100644 vendors/ckeditor/plugins/bidi/plugin.js create mode 100644 vendors/ckeditor/plugins/plain/icons/hidpi/plain-rtl.png create mode 100644 vendors/ckeditor/plugins/plain/icons/hidpi/plain.png create mode 100644 vendors/ckeditor/plugins/plain/icons/plain-rtl.png create mode 100644 vendors/ckeditor/plugins/plain/icons/plain.png create mode 100644 vendors/ckeditor/plugins/plain/plugin.js delete mode 100644 vendors/ckeditor/skins/icy_orange/bold.png delete mode 100644 vendors/ckeditor/skins/icy_orange/dialog.css delete mode 100644 vendors/ckeditor/skins/icy_orange/dialog_ie.css delete mode 100644 vendors/ckeditor/skins/icy_orange/dialog_ie7.css delete mode 100644 vendors/ckeditor/skins/icy_orange/dialog_ie8.css delete mode 100644 vendors/ckeditor/skins/icy_orange/dialog_iequirks.css delete mode 100644 vendors/ckeditor/skins/icy_orange/dialog_opera.css delete mode 100644 vendors/ckeditor/skins/icy_orange/editor.css delete mode 100644 vendors/ckeditor/skins/icy_orange/editor_gecko.css delete mode 100644 vendors/ckeditor/skins/icy_orange/editor_ie.css delete mode 100644 vendors/ckeditor/skins/icy_orange/editor_ie7.css delete mode 100644 vendors/ckeditor/skins/icy_orange/editor_ie8.css delete mode 100644 vendors/ckeditor/skins/icy_orange/editor_iequirks.css delete mode 100644 vendors/ckeditor/skins/icy_orange/find-rtl.png delete mode 100644 vendors/ckeditor/skins/icy_orange/icons.png delete mode 100644 vendors/ckeditor/skins/icy_orange/icons_hidpi.png delete mode 100644 vendors/ckeditor/skins/icy_orange/images/arrow.png delete mode 100644 vendors/ckeditor/skins/icy_orange/images/close.png delete mode 100644 vendors/ckeditor/skins/icy_orange/images/hidpi/close.png delete mode 100644 vendors/ckeditor/skins/icy_orange/images/hidpi/lock.png delete mode 100644 vendors/ckeditor/skins/icy_orange/images/hidpi/refresh.png delete mode 100644 vendors/ckeditor/skins/icy_orange/images/lock-open.png delete mode 100644 vendors/ckeditor/skins/icy_orange/images/lock.png delete mode 100644 vendors/ckeditor/skins/icy_orange/images/refresh.png delete mode 100644 vendors/ckeditor/skins/icy_orange/scayt.png create mode 100644 vendors/ckeditor/skins/moono/dialog.css create mode 100644 vendors/ckeditor/skins/moono/dialog_ie.css create mode 100644 vendors/ckeditor/skins/moono/dialog_ie7.css create mode 100644 vendors/ckeditor/skins/moono/dialog_ie8.css create mode 100644 vendors/ckeditor/skins/moono/dialog_iequirks.css create mode 100644 vendors/ckeditor/skins/moono/editor.css create mode 100644 vendors/ckeditor/skins/moono/editor_gecko.css create mode 100644 vendors/ckeditor/skins/moono/editor_ie.css create mode 100644 vendors/ckeditor/skins/moono/editor_ie7.css create mode 100644 vendors/ckeditor/skins/moono/editor_ie8.css create mode 100644 vendors/ckeditor/skins/moono/editor_iequirks.css create mode 100644 vendors/ckeditor/skins/moono/icons.png create mode 100644 vendors/ckeditor/skins/moono/icons_hidpi.png create mode 100644 vendors/ckeditor/skins/moono/images/arrow.png create mode 100644 vendors/ckeditor/skins/moono/images/close.png create mode 100644 vendors/ckeditor/skins/moono/images/hidpi/close.png rename {rainloop/v/0.0.0/static/ckeditor/skins/icy_orange => vendors/ckeditor/skins/moono}/images/hidpi/lock-open.png (61%) create mode 100644 vendors/ckeditor/skins/moono/images/hidpi/lock.png create mode 100644 vendors/ckeditor/skins/moono/images/hidpi/refresh.png create mode 100644 vendors/ckeditor/skins/moono/images/lock-open.png create mode 100644 vendors/ckeditor/skins/moono/images/lock.png create mode 100644 vendors/ckeditor/skins/moono/images/refresh.png rename vendors/ckeditor/skins/{icy_orange => moono}/readme.md (97%) create mode 100644 vendors/photoswipe/default-skin/default-skin.css create mode 100644 vendors/photoswipe/default-skin/default-skin.png create mode 100644 vendors/photoswipe/default-skin/default-skin.svg create mode 100644 vendors/photoswipe/default-skin/preloader.gif create mode 100644 vendors/photoswipe/photoswipe-ui-default.js create mode 100644 vendors/photoswipe/photoswipe-ui-default.min.js create mode 100644 vendors/photoswipe/photoswipe.css create mode 100644 vendors/photoswipe/photoswipe.js create mode 100644 vendors/photoswipe/photoswipe.min.js diff --git a/dev/App/User.js b/dev/App/User.js index c21d080f4..154819268 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -1265,25 +1265,25 @@ bTwitter = Settings.settingsGet('AllowTwitterSocial') ; - Utils.initOnStartOrLangChange(function () { - - $.extend(true, $.magnificPopup.defaults, { - 'tClose': Utils.i18n('MAGNIFIC_POPUP/CLOSE'), - 'tLoading': Utils.i18n('MAGNIFIC_POPUP/LOADING'), - 'gallery': { - 'tPrev': Utils.i18n('MAGNIFIC_POPUP/GALLERY_PREV'), - 'tNext': Utils.i18n('MAGNIFIC_POPUP/GALLERY_NEXT'), - 'tCounter': Utils.i18n('MAGNIFIC_POPUP/GALLERY_COUNTER') - }, - 'image': { - 'tError': Utils.i18n('MAGNIFIC_POPUP/IMAGE_ERROR') - }, - 'ajax': { - 'tError': Utils.i18n('MAGNIFIC_POPUP/AJAX_ERROR') - } - }); - - }, this); +// Utils.initOnStartOrLangChange(function () { +// +// $.extend(true, $.magnificPopup.defaults, { +// 'tClose': Utils.i18n('PREVIEW_POPUP/CLOSE'), +// 'tLoading': Utils.i18n('PREVIEW_POPUP/LOADING'), +// 'gallery': { +// 'tPrev': Utils.i18n('PREVIEW_POPUP/GALLERY_PREV'), +// 'tNext': Utils.i18n('PREVIEW_POPUP/GALLERY_NEXT'), +// 'tCounter': Utils.i18n('PREVIEW_POPUP/GALLERY_COUNTER') +// }, +// 'image': { +// 'tError': Utils.i18n('PREVIEW_POPUP/IMAGE_ERROR') +// }, +// 'ajax': { +// 'tError': Utils.i18n('PREVIEW_POPUP/AJAX_ERROR') +// } +// }); +// +// }, this); if (SimplePace) { diff --git a/dev/Common/Globals.js b/dev/Common/Globals.js index 87d32af36..c819c02cb 100644 --- a/dev/Common/Globals.js +++ b/dev/Common/Globals.js @@ -145,7 +145,7 @@ 'removeButtons': 'Format,Undo,Redo,Cut,Copy,Paste,Anchor,Strike,Subscript,Superscript,Image,SelectAll,Source', 'removeDialogTabs': 'link:advanced;link:target;image:advanced;images:advanced', - 'extraPlugins': 'plain,signature', + 'extraPlugins': 'plain,bidi', // signature 'allowedContent': true, 'font_defaultLabel': 'Arial', diff --git a/dev/Common/HtmlEditor.js b/dev/Common/HtmlEditor.js index c255ce956..198bd5de3 100644 --- a/dev/Common/HtmlEditor.js +++ b/dev/Common/HtmlEditor.js @@ -198,6 +198,10 @@ { oConfig.removePlugins += (oConfig.removePlugins ? ',' : '') + 'bidi'; } + else + { + oConfig.removeButtons = oConfig.removeButtons.replace(',bidi', ''); + } } oConfig.enterMode = window.CKEDITOR.ENTER_BR; diff --git a/dev/Styles/Login.less b/dev/Styles/Login.less index 5166c99eb..0f70cf73f 100644 --- a/dev/Styles/Login.less +++ b/dev/Styles/Login.less @@ -30,14 +30,15 @@ color: #333; margin: 0; float: none; + width: 303px; } - .control-label { +/* .control-label { font-size: 16px; line-height: 30px; - } + }*/ - .control-group { + .controls, .control-group { margin-bottom: 25px; } @@ -50,10 +51,20 @@ border-radius: 3px; } - .inputLoginForm, .inputEmail, .inputLogin, .inputPassword, .inputAdditionalCode { - font-size: 18px; - height: 30px; - line-height: 29px; + .control-group { + .inputLoginForm, .inputEmail, .inputLogin, .inputPassword, .inputAdditionalCode { + font-size: 18px; + height: 30px; + line-height: 29px; + } + } + + .controls { + .inputLoginForm, .inputEmail, .inputLogin, .inputPassword, .inputAdditionalCode { + font-size: 18px; + height: 40px; + line-height: 39px; + } } .signMeLabel, .languageLabel { @@ -79,7 +90,7 @@ color: #999; } - .control-group.error .add-on i { + .controls.error .add-on i, .control-group.error .add-on i { color: #b94a48; } } diff --git a/dev/Styles/MessageView.less b/dev/Styles/MessageView.less index 30a2348d7..ec5e3a51e 100644 --- a/dev/Styles/MessageView.less +++ b/dev/Styles/MessageView.less @@ -33,7 +33,7 @@ html.rl-no-preview-pane { left: -1px; overflow: hidden; border: @rlLowBorderSize solid @rlMainDarkColor; - + .border-top-right-radius(@rlLowBorderRadius); .border-bottom-right-radius(@rlLowBorderRadius); @@ -218,7 +218,9 @@ html.rl-no-preview-pane { .attachmentsPlace { - padding: 10px; + padding: 10px 10px 6px 10px; + background: #eee; + border-bottom: 1px solid #ddd; .attachmentList { @@ -235,17 +237,20 @@ html.rl-no-preview-pane { cursor: pointer; list-style: none; line-height: 24px; - border: 2px solid grey; + /*border: 2px solid grey;*/ + border: 0; background-color: #fff; - box-shadow: 1px 1px 5px #ccc; - box-shadow: 1px 1px 5px rgba(0,0,0,0.1); + box-shadow: 0 1px 5px #ccc; + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.04), 0 1px 5px rgba(0, 0, 0, 0.1); - border-radius: 6px; + border-radius: 2px; .attachmentIcon { font-size: 23px; width: 23px; height: 23px; + color: #666; } .attachmentPreview { diff --git a/dev/Styles/SettingsIdentities.less b/dev/Styles/SettingsIdentities.less index 5a600587e..5545ef66a 100644 --- a/dev/Styles/SettingsIdentities.less +++ b/dev/Styles/SettingsIdentities.less @@ -10,7 +10,7 @@ .e-signature-place { display: inline-block; width: 680px; - width: 725px; + width: 730px; height: 250px; } diff --git a/dev/Styles/SettingsIdentity.less b/dev/Styles/SettingsIdentity.less index a99427467..cb95e2f64 100644 --- a/dev/Styles/SettingsIdentity.less +++ b/dev/Styles/SettingsIdentity.less @@ -3,7 +3,7 @@ .e-signature-place { display: inline-block; width: 680px; - width: 725px; + width: 730px; height: 250px; } } diff --git a/dev/Styles/_CkeFix.less b/dev/Styles/_CkeFix.less index 158f07624..708572c55 100644 --- a/dev/Styles/_CkeFix.less +++ b/dev/Styles/_CkeFix.less @@ -27,7 +27,7 @@ } .cke_combo_button { - background: #FBFBFB !important; + /*background: #FBFBFB !important;*/ } .cke_source { diff --git a/dev/Styles/_End.less b/dev/Styles/_End.less index 33dfbbfa9..177bb118f 100644 --- a/dev/Styles/_End.less +++ b/dev/Styles/_End.less @@ -10,4 +10,15 @@ .mfp-container .mfp-figure { min-height: 300px; min-width: 300px; +} + +.pswp__error-msg { + color: #ccc; + a, a:hover { + color: #fff; + } +} + +.pswp__img--placeholder { + opacity: 0; } \ No newline at end of file diff --git a/dev/View/Popup/Compose.js b/dev/View/Popup/Compose.js index 2039a4eb8..e0ef5a387 100644 --- a/dev/View/Popup/Compose.js +++ b/dev/View/Popup/Compose.js @@ -461,9 +461,12 @@ var oIDs = {}, sResult = '', + sEmail = '', + fFindHelper = function (oItem) { if (oItem && oItem.email && oIDs[oItem.email]) { + sEmail = oItem.email; sResult = oIDs[oItem.email]; return true; } @@ -507,9 +510,10 @@ if ('' === sResult) { sResult = Data.accountEmail(); + sEmail = sResult; } - return sResult; + return [sResult, sEmail]; }; ComposePopupView.prototype.selectIdentity = function (oIdentity) @@ -744,6 +748,7 @@ sReplyTitle = '', aResplyAllParts = [], oExcludeEmail = {}, + oIdResult = null, mEmail = Data.accountEmail(), sSignature = Data.signature(), bSignatureToAll = Data.signatureToAll(), @@ -780,7 +785,13 @@ oExcludeEmail[mEmail] = true; } - this.currentIdentityID(this.findIdentityIdByMessage(sComposeType, oMessage)); + oIdResult = this.findIdentityIdByMessage(sComposeType, oMessage); + if (oIdResult && oIdResult[0]) + { + oExcludeEmail[oIdResult[1]] = true; + this.currentIdentityID(oIdResult[0]); + } + this.reset(); if (Utils.isNonEmptyArray(aToEmails)) diff --git a/dev/View/User/Login.js b/dev/View/User/Login.js index e65b540c4..ae158bc2b 100644 --- a/dev/View/User/Login.js +++ b/dev/View/User/Login.js @@ -13,6 +13,8 @@ Utils = require('Common/Utils'), Links = require('Common/Links'), + Plugins = require('Common/Plugins'), + Settings = require('Storage/Settings'), Data = require('Storage/User/Data'), Remote = require('Storage/User/Remote'), @@ -111,6 +113,27 @@ return false; } + var + iPluginResultCode = 0, + sPluginResultMessage = '', + fSubmitResult = function (iResultCode, sResultMessage) { + iPluginResultCode = iResultCode || 0; + sPluginResultMessage = sResultMessage || ''; + } + ; + + Plugins.runHook('user-login-submit', [fSubmitResult]); + if (0 < iPluginResultCode) + { + this.submitError(Utils.getNotification(iPluginResultCode)); + return false; + } + else if ('' !== sPluginResultMessage) + { + this.submitError(sPluginResultMessage); + return false; + } + this.submitRequest(true); var diff --git a/dev/View/User/MailBox/MessageView.js b/dev/View/User/MailBox/MessageView.js index 2fa1cd386..e95094beb 100644 --- a/dev/View/User/MailBox/MessageView.js +++ b/dev/View/User/MailBox/MessageView.js @@ -9,6 +9,9 @@ ko = require('ko'), key = require('key'), + PhotoSwipe = require('PhotoSwipe'), + PhotoSwipeUI_Default = require('PhotoSwipeUI_Default'), + Consts = require('Common/Consts'), Enums = require('Common/Enums'), Globals = require('Common/Globals'), @@ -43,6 +46,8 @@ this.oMessageScrollerDom = null; + this.pswp = null; + this.message = Data.message; this.currentMessage = Data.currentMessage; this.messageListChecked = Data.messageListChecked; @@ -323,7 +328,11 @@ MessageViewMailBoxUserView.prototype.onBuild = function (oDom) { - var self = this; + var + self = this, + sErrorMessage = Utils.i18n('PREVIEW_POPUP/IMAGE_ERROR') + ; + this.fullScreenMode.subscribe(function (bValue) { if (bValue) { @@ -331,25 +340,89 @@ } }, this); - $('.attachmentsPlace', oDom).magnificPopup({ - 'delegate': '.magnificPopupImage:visible', - 'type': 'image', - 'gallery': { - 'enabled': true, - 'preload': [1, 1], - 'navigateByImgClick': true - }, - 'callbacks': { - 'open': function() { - Globals.useKeyboardShortcuts(false); - }, - 'close': function() { - Globals.useKeyboardShortcuts(true); - } - }, - 'mainClass': 'mfp-fade', - 'removalDelay': 400 - }); +// $('.attachmentsPlace', oDom).magnificPopup({ +// 'delegate': '.attachmentImagePreview:visible', +// 'type': 'image', +// 'gallery': { +// 'enabled': true, +// 'preload': [1, 1], +// 'navigateByImgClick': true +// }, +// 'callbacks': { +// 'open': function() { +// Globals.useKeyboardShortcuts(false); +// }, +// 'close': function() { +// Globals.useKeyboardShortcuts(true); +// } +// }, +// 'mainClass': 'mfp-fade', +// 'removalDelay': 400 +// }); + + this.pswpDom = $('.pswp', oDom)[0]; + if (this.pswpDom) + { + oDom + .on('click', 'a.attachmentImagePreview[data-index]:visible', function (oEvent) { + + var + oPs = null, + oEl = oEvent.currentTarget || null, + aItems = [] + ; + + oDom.find('a.attachmentImagePreview:visible').each(function (index, oSubElement) { + + var $oItem = $(oSubElement); + + aItems.push({ + w: 600, h: 400, + 'src': $oItem.attr('href'), + 'title': $oItem.attr('title') || '' + }); + + }); + + if (aItems && 0 < aItems.length) + { + Globals.useKeyboardShortcuts(false); + + oPs = new PhotoSwipe(self.pswpDom, PhotoSwipeUI_Default, aItems, { + 'index': Utils.pInt($(oEl).data('index')), + 'bgOpacity': 0.85, + 'loadingIndicatorDelay': 500, + 'errorMsg': '
' + sErrorMessage + '
', + 'showHideOpacity': true, + 'tapToToggleControls': false, + 'timeToIdle': 0, + 'timeToIdleOutside': 0, + 'history': false, + 'arrowEl': 1 < aItems.length, + 'counterEl': 1 < aItems.length, + 'shareEl': false + }); + + oPs.listen('imageLoadComplete', function(index, item) { + if (item && item.img && item.img.width && item.img.height) + { + item.w = item.img.width; + item.h = item.img.height; + + oPs.updateSize(); + } + }); + + oPs.listen('close', function() { + Globals.useKeyboardShortcuts(true); + }); + + oPs.init(); + } + + return false; + }); + } oDom .on('click', 'a', function (oEvent) { diff --git a/gulpfile.js b/gulpfile.js index d1529077d..c6a8e3d70 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -95,11 +95,13 @@ cfg.paths.css = { 'vendors/normalize/normalize.css', 'vendors/fontastic/styles.css', 'vendors/jquery-nanoscroller/nanoscroller.css', - 'vendors/jquery-magnific-popup/magnific-popup.css', - 'vendors/jquery-magnific-popup/magnific-popup-animations.css', +// 'vendors/jquery-magnific-popup/magnific-popup.css', +// 'vendors/jquery-magnific-popup/magnific-popup-animations.css', 'vendors/jquery-letterfx/jquery-letterfx.min.css', 'vendors/simple-pace/styles.css', 'vendors/inputosaurus/inputosaurus.css', + 'vendors/photoswipe/photoswipe.css', + 'vendors/photoswipe/default-skin/default-skin.css', 'vendors/flags/flags-fixed.css', cfg.paths.staticCSS + cfg.paths.less.main.name ] @@ -162,10 +164,12 @@ cfg.paths.js = { 'vendors/ssm/ssm.min.js', 'vendors/jua/jua.min.js', 'vendors/Autolinker/Autolinker.min.js', + 'vendors/photoswipe/photoswipe.min.js', + 'vendors/photoswipe/photoswipe-ui-default.min.js', 'vendors/jsencrypt/jsencrypt.min.js', 'vendors/keymaster/keymaster.min.js', 'vendors/ifvisible/ifvisible.min.js', - 'vendors/jquery-magnific-popup/jquery.magnific-popup.min.js', +// 'vendors/jquery-magnific-popup/jquery.magnific-popup.min.js', 'vendors/bootstrap/js/bootstrap.min.js' ] }, @@ -411,6 +415,7 @@ gulp.task('ckeditor:copy', ['ckeditor:clear'], function() { }); gulp.task('ckeditor:copy-plugins', ['ckeditor:copy'], function() { + return true; return gulp.src('vendors/ckeditor-plugins/**/*') .pipe(gulp.dest('rainloop/v/' + cfg.devVersion + '/static/ckeditor/plugins')); }); @@ -418,7 +423,7 @@ gulp.task('ckeditor:copy-plugins', ['ckeditor:copy'], function() { gulp.task('ckeditor', ['ckeditor:copy-plugins'], function () { return gulp.src('rainloop/v/' + cfg.devVersion + '/static/ckeditor/*.js') .pipe(stripbom()) - .pipe(replace("\u200B", "\\u200B")) +// .pipe(replace("\u200B", "\\u200B")) .pipe(header("\uFEFF")) // BOM .pipe(gulp.dest('rainloop/v/' + cfg.devVersion + '/static/ckeditor')); }); diff --git a/package.json b/package.json index a35dc8e77..6e52b4a3a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "RainLoop", "title": "RainLoop Webmail", "version": "1.7.0", - "release": "207", + "release": "210", "description": "Simple, modern & fast web-based email client", "homepage": "http://rainloop.net", "main": "gulpfile.js", diff --git a/plugins/recaptcha-2/index.php b/plugins/recaptcha-2/index.php new file mode 100644 index 000000000..b3426cc02 --- /dev/null +++ b/plugins/recaptcha-2/index.php @@ -0,0 +1,150 @@ +UseLangs(true); + + $this->addJs('js/recaptcha.js'); + + $this->addHook('ajax.action-pre-call', 'AjaxActionPreCall'); + $this->addHook('filter.ajax-response', 'FilterAjaxResponse'); + + $this->addTemplate('templates/PluginLoginReCaptchaGroup.html'); + $this->addTemplateHook('Login', 'BottomControlGroup', 'PluginLoginReCaptchaGroup'); + } + + /** + * @return array + */ + public function configMapping() + { + return array( + \RainLoop\Plugins\Property::NewInstance('public_key')->SetLabel('Site key') + ->SetAllowedInJs(true) + ->SetDefaultValue(''), + \RainLoop\Plugins\Property::NewInstance('private_key')->SetLabel('Secret key') + ->SetDefaultValue(''), + \RainLoop\Plugins\Property::NewInstance('theme')->SetLabel('Theme') + ->SetAllowedInJs(true) + ->SetType(\RainLoop\Enumerations\PluginPropertyType::SELECTION) + ->SetDefaultValue(array('light', 'dark')), + \RainLoop\Plugins\Property::NewInstance('error_limit')->SetLabel('Limit') + ->SetType(\RainLoop\Enumerations\PluginPropertyType::SELECTION) + ->SetDefaultValue(array(0, 1, 2, 3, 4, 5)) + ->SetDescription('') + ); + } + + /** + * @return string + */ + private function getCaptchaCacherKey() + { + return 'Captcha2/Login/'.\RainLoop\Utils::GetConnectionToken(); + } + + /** + * @return int + */ + private function getLimit() + { + $iConfigLimit = $this->Config()->Get('plugin', 'error_limit', 0); + if (0 < $iConfigLimit) + { + $oCacher = $this->Manager()->Actions()->Cacher(); + $sLimit = $oCacher && $oCacher->IsInited() ? $oCacher->Get($this->getCaptchaCacherKey()) : '0'; + + if (0 < \strlen($sLimit) && \is_numeric($sLimit)) + { + $iConfigLimit -= (int) $sLimit; + } + } + + return $iConfigLimit; + } + + /** + * @return void + */ + public function FilterAppDataPluginSection($bAdmin, $bAuth, &$aData) + { + if (!$bAdmin && !$bAuth && \is_array($aData)) + { + $aData['show_captcha_on_login'] = 1 > $this->getLimit(); + } + } + + /** + * @param string $sAction + */ + public function AjaxActionPreCall($sAction) + { + if ('Login' === $sAction && 0 >= $this->getLimit()) + { + $bResult = false; + + $sResult = $this->Manager()->Actions()->Http()->GetUrlAsString( + 'https://www.google.com/recaptcha/api/siteverify?secret='. + \urlencode($this->Config()->Get('plugin', 'private_key', '')).'&response='. + \urlencode($this->Manager()->Actions()->GetActionParam('RecaptchaResponse', ''))); + + if ($sResult) + { + $aResp = @\json_decode($sResult, true); + if (\is_array($aResp) && isset($aResp['success']) && $aResp['success']) + { + $bResult = true; + } + } + + if (!$bResult) + { + $this->Manager()->Actions()->Logger()->Write('RecaptchaResponse:'.$sResult); + throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::CaptchaError); + } + } + } + + /** + * @param string $sAction + * @param array $aResponseItem + */ + public function FilterAjaxResponse($sAction, &$aResponseItem) + { + if ('Login' === $sAction && $aResponseItem && isset($aResponseItem['Result'])) + { + $oCacher = $this->Manager()->Actions()->Cacher(); + $iConfigLimit = (int) $this->Config()->Get('plugin', 'error_limit', 0); + $sKey = $this->getCaptchaCacherKey(); + + if (0 < $iConfigLimit && $oCacher && $oCacher->IsInited()) + { + if (false === $aResponseItem['Result']) + { + $iLimit = 0; + $sLimut = $oCacher->Get($sKey); + if (0 < \strlen($sLimut) && \is_numeric($sLimut)) + { + $iLimit = (int) $sLimut; + } + + $oCacher->Set($sKey, ++$iLimit); + + if ($iConfigLimit <= $iLimit) + { + $aResponseItem['Captcha'] = true; + } + } + else + { + $oCacher->Delete($sKey); + } + } + } + } +} diff --git a/plugins/recaptcha-2/js/recaptcha.js b/plugins/recaptcha-2/js/recaptcha.js new file mode 100644 index 000000000..d824f5a18 --- /dev/null +++ b/plugins/recaptcha-2/js/recaptcha.js @@ -0,0 +1,83 @@ + +$(function () { + + var + nId = null, + bStarted = false + ; + + function ShowRecaptcha() + { + if (window.grecaptcha) + { + if (null === nId) + { + $('#recaptcha-place').show(); + + nId = window.grecaptcha.render('recaptcha-div', { + 'sitekey': window.rl.pluginSettingsGet('recaptcha-2', 'public_key'), + 'theme': window.rl.pluginSettingsGet('recaptcha-2', 'theme') + }); + } + } + } + + window.__globalShowRecaptcha = ShowRecaptcha; + + function StartRecaptcha() + { + if (!window.grecaptcha && window.rl) + { + $.getScript('https://www.google.com/recaptcha/api.js?onload=__globalShowRecaptcha&render=explicit&hl=' + window.rl.settingsGet('Language')); + } + else + { + ShowRecaptcha(); + } + } + + if (window.rl) + { + window.rl.addHook('user-login-submit', function (fSubmitResult) { + if (null !== nId && !window.grecaptcha.getResponse(nId)) + { + fSubmitResult(105); + } + }); + + window.rl.addHook('view-model-on-show', function (sName, oViewModel) { + if (!bStarted && oViewModel && + ('View:RainLoop:Login' === sName || 'View/App/Login' === sName || 'LoginViewModel' === sName || 'LoginAppView' === sName) && + window.rl.pluginSettingsGet('recaptcha-2', 'show_captcha_on_login')) + { + bStarted = true; + StartRecaptcha(); + } + }); + + window.rl.addHook('ajax-default-request', function (sAction, oParameters) { + if ('Login' === sAction && oParameters && null !== nId && window.grecaptcha) + { + oParameters['RecaptchaResponse'] = window.grecaptcha.getResponse(nId); + } + }); + + window.rl.addHook('ajax-default-response', function (sAction, oData, sType) { + if ('Login' === sAction) + { + if (!oData || 'success' !== sType || !oData['Result']) + { + if (null !== nId && window.grecaptcha) + { + window.grecaptcha.reset(nId); + } + else if (oData && oData['Captcha']) + { + StartRecaptcha(); + } + + } + } + }); + } +}); \ No newline at end of file diff --git a/plugins/recaptcha-2/templates/PluginLoginReCaptchaGroup.html b/plugins/recaptcha-2/templates/PluginLoginReCaptchaGroup.html new file mode 100644 index 000000000..1f4332f6e --- /dev/null +++ b/plugins/recaptcha-2/templates/PluginLoginReCaptchaGroup.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/plugins/recaptcha/VERSION b/plugins/recaptcha/VERSION index 468437494..872765e5f 100644 --- a/plugins/recaptcha/VERSION +++ b/plugins/recaptcha/VERSION @@ -1 +1 @@ -1.8 \ No newline at end of file +1.9 \ No newline at end of file diff --git a/plugins/recaptcha/templates/PluginLoginReCaptchaGroup.html b/plugins/recaptcha/templates/PluginLoginReCaptchaGroup.html index e6595a774..4a15d78c6 100644 --- a/plugins/recaptcha/templates/PluginLoginReCaptchaGroup.html +++ b/plugins/recaptcha/templates/PluginLoginReCaptchaGroup.html @@ -1,14 +1,14 @@ - -
-
+ +
- @@ -16,9 +16,9 @@
-
+
- @@ -26,8 +26,8 @@
-
- diff --git a/rainloop/v/0.0.0/app/templates/Views/User/Login.html b/rainloop/v/0.0.0/app/templates/Views/User/Login.html index 94625236c..e2a8912df 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/Login.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/Login.html @@ -16,11 +16,11 @@
- + {{INCLUDE/TopControlGroup/PLACE}} -
+
- @@ -28,9 +28,9 @@
-
+
- @@ -38,16 +38,16 @@
-
+
-
-
+
{{INCLUDE/BottomControlGroup/PLACE}} -
-
-
- +
+
-
+