diff --git a/dev/Admin/Security.js b/dev/Admin/Security.js index 5d4bee738..03069909b 100644 --- a/dev/Admin/Security.js +++ b/dev/Admin/Security.js @@ -12,6 +12,8 @@ function AdminSecurity() this.adminLogin = ko.observable(RL.settingsGet('AdminLogin')); this.adminPassword = ko.observable(''); this.adminPasswordNew = ko.observable(''); + this.adminPasswordNew2 = ko.observable(''); + this.adminPasswordNewError = ko.observable(false); this.adminPasswordUpdateError = ko.observable(false); this.adminPasswordUpdateSuccess = ko.observable(false); @@ -24,10 +26,23 @@ function AdminSecurity() this.adminPasswordNew.subscribe(function () { this.adminPasswordUpdateError(false); this.adminPasswordUpdateSuccess(false); + this.adminPasswordNewError(false); + }, this); + + this.adminPasswordNew2.subscribe(function () { + this.adminPasswordUpdateError(false); + this.adminPasswordUpdateSuccess(false); + this.adminPasswordNewError(false); }, this); this.saveNewAdminPasswordCommand = Utils.createCommand(this, function () { + if (this.adminPasswordNew() !== this.adminPasswordNew2()) + { + this.adminPasswordNewError(true); + return false; + } + this.adminPasswordUpdateError(false); this.adminPasswordUpdateSuccess(false); @@ -37,7 +52,7 @@ function AdminSecurity() }); }, function () { - return '' !== this.adminPassword() && '' !== this.adminPasswordNew(); + return '' !== this.adminPassword() && '' !== this.adminPasswordNew() && '' !== this.adminPasswordNew2(); }); this.onNewAdminPasswordResponse = _.bind(this.onNewAdminPasswordResponse, this); @@ -51,6 +66,7 @@ AdminSecurity.prototype.onNewAdminPasswordResponse = function (sResult, oData) { this.adminPassword(''); this.adminPasswordNew(''); + this.adminPasswordNew2(''); this.adminPasswordUpdateSuccess(true); } @@ -85,6 +101,7 @@ AdminSecurity.prototype.onHide = function () { this.adminPassword(''); this.adminPasswordNew(''); + this.adminPasswordNew2(''); }; /** diff --git a/dev/ViewModels/AbstractSystemDropDownViewModel.js b/dev/ViewModels/AbstractSystemDropDownViewModel.js index 0b5b389c5..8d9e89a66 100644 --- a/dev/ViewModels/AbstractSystemDropDownViewModel.js +++ b/dev/ViewModels/AbstractSystemDropDownViewModel.js @@ -51,6 +51,11 @@ AbstractSystemDropDownViewModel.prototype.settingsClick = function () kn.setHash(RL.link().settings()); }; +AbstractSystemDropDownViewModel.prototype.settingsHelp = function () +{ + kn.showScreenPopup(PopupsKeyboardShortcutsHelpViewModel); +}; + AbstractSystemDropDownViewModel.prototype.addAccountClick = function () { if (this.allowAddAccount) @@ -80,4 +85,13 @@ AbstractSystemDropDownViewModel.prototype.onBuild = function () self.accountMenuDropdownTrigger(true); } }); + + // shortcuts help + key('shift+/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView, Enums.KeyState.Settings], function () { + if (self.viewModelVisibility()) + { + kn.showScreenPopup(PopupsKeyboardShortcutsHelpViewModel); + return false; + } + }); }; diff --git a/dev/ViewModels/MailBoxMessageListViewModel.js b/dev/ViewModels/MailBoxMessageListViewModel.js index d6a8d73d7..ebaa863c6 100644 --- a/dev/ViewModels/MailBoxMessageListViewModel.js +++ b/dev/ViewModels/MailBoxMessageListViewModel.js @@ -737,12 +737,6 @@ MailBoxMessageListViewModel.prototype.initShortcuts = function () return false; }); - // shortcuts help - key('shift+/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - kn.showScreenPopup(PopupsKeyboardShortcutsHelpViewModel); - return false; - }); - key('shift+f', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { self.multyForwardCommand(); return false; diff --git a/package.json b/package.json index d66e1182c..05e0c69c6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "RainLoop", "title": "RainLoop Webmail", - "version": "1.6.5", + "version": "1.6.6", "release": "911", "description": "Simple, modern & fast web-based email client", "homepage": "http://rainloop.net", diff --git a/rainloop/v/0.0.0/app/templates/Views/AdminLogin.html b/rainloop/v/0.0.0/app/templates/Views/AdminLogin.html index f23504832..0e70a5eb1 100644 --- a/rainloop/v/0.0.0/app/templates/Views/AdminLogin.html +++ b/rainloop/v/0.0.0/app/templates/Views/AdminLogin.html @@ -8,7 +8,7 @@
- @@ -18,7 +18,7 @@
- diff --git a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsBranding.html b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsBranding.html index 8de0cb008..0232cc377 100644 --- a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsBranding.html +++ b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsBranding.html @@ -8,7 +8,8 @@ Page Title
- +
@@ -17,7 +18,8 @@ Loading Description
- +
@@ -30,7 +32,8 @@ Logo
- +
@@ -39,7 +42,8 @@ Description
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsContacts.html b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsContacts.html index 35771f74d..92bdc3889 100644 --- a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsContacts.html +++ b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsContacts.html @@ -50,7 +50,8 @@ Dsn
- +

@@ -66,7 +67,8 @@ User

- +
@@ -75,7 +77,8 @@ Password
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsLogin.html b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsLogin.html index 9108a13d5..a354d50cc 100644 --- a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsLogin.html +++ b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsLogin.html @@ -8,7 +8,8 @@ Default Domain
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsPluginProperty.html b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsPluginProperty.html index 857671019..ed108f5e2 100644 --- a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsPluginProperty.html +++ b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsPluginProperty.html @@ -4,13 +4,13 @@
- + - + - + diff --git a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsSecurity.html b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsSecurity.html index 17fb3e129..9766ea45b 100644 --- a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsSecurity.html +++ b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsSecurity.html @@ -45,15 +45,26 @@ Current password
- +
-
+
- + +
+
+
+ +
+
diff --git a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsSocial.html b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsSocial.html index a05753561..da779c04c 100644 --- a/rainloop/v/0.0.0/app/templates/Views/AdminSettingsSocial.html +++ b/rainloop/v/0.0.0/app/templates/Views/AdminSettingsSocial.html @@ -22,7 +22,8 @@ Client ID
- +
@@ -31,7 +32,8 @@ Client Secret
- +
@@ -51,7 +53,8 @@ App ID
- +
@@ -60,7 +63,8 @@ App Secret
- +
@@ -80,7 +84,8 @@ Consumer Key
- +
@@ -89,7 +94,8 @@ Consumer Secret
- +
@@ -109,7 +115,8 @@ Api Key
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/Login.html b/rainloop/v/0.0.0/app/templates/Views/Login.html index 9451f0071..982766af8 100644 --- a/rainloop/v/0.0.0/app/templates/Views/Login.html +++ b/rainloop/v/0.0.0/app/templates/Views/Login.html @@ -20,7 +20,7 @@ {{INCLUDE/TopControlGroup/PLACE}}
- @@ -29,7 +29,7 @@
- @@ -38,7 +38,7 @@
- @@ -47,7 +47,7 @@
- @@ -75,37 +75,37 @@
-
- +
@@ -76,7 +76,7 @@
- +
@@ -84,7 +84,7 @@
- +
@@ -92,7 +92,7 @@
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/PopupsComposeOpenPgp.html b/rainloop/v/0.0.0/app/templates/Views/PopupsComposeOpenPgp.html index 975cca6fd..d0728ea7c 100644 --- a/rainloop/v/0.0.0/app/templates/Views/PopupsComposeOpenPgp.html +++ b/rainloop/v/0.0.0/app/templates/Views/PopupsComposeOpenPgp.html @@ -30,7 +30,7 @@
-
diff --git a/rainloop/v/0.0.0/app/templates/Views/PopupsContacts.html b/rainloop/v/0.0.0/app/templates/Views/PopupsContacts.html index 3762438af..82f427163 100644 --- a/rainloop/v/0.0.0/app/templates/Views/PopupsContacts.html +++ b/rainloop/v/0.0.0/app/templates/Views/PopupsContacts.html @@ -67,7 +67,8 @@
Server
- +

Port
- +

Secure @@ -51,12 +54,14 @@
Server
- +

Port
- +

Secure diff --git a/rainloop/v/0.0.0/app/templates/Views/PopupsFolderCreate.html b/rainloop/v/0.0.0/app/templates/Views/PopupsFolderCreate.html index 6f110cceb..6d6d73b09 100644 --- a/rainloop/v/0.0.0/app/templates/Views/PopupsFolderCreate.html +++ b/rainloop/v/0.0.0/app/templates/Views/PopupsFolderCreate.html @@ -15,7 +15,8 @@
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/PopupsGenerateNewOpenPgpKey.html b/rainloop/v/0.0.0/app/templates/Views/PopupsGenerateNewOpenPgpKey.html index 531030668..de6595f72 100644 --- a/rainloop/v/0.0.0/app/templates/Views/PopupsGenerateNewOpenPgpKey.html +++ b/rainloop/v/0.0.0/app/templates/Views/PopupsGenerateNewOpenPgpKey.html @@ -12,21 +12,24 @@
-
-
-
diff --git a/rainloop/v/0.0.0/app/templates/Views/PopupsIdentity.html b/rainloop/v/0.0.0/app/templates/Views/PopupsIdentity.html index 86e37bae7..e74276ac2 100644 --- a/rainloop/v/0.0.0/app/templates/Views/PopupsIdentity.html +++ b/rainloop/v/0.0.0/app/templates/Views/PopupsIdentity.html @@ -17,7 +17,8 @@
-
@@ -30,21 +31,24 @@
-
diff --git a/rainloop/v/0.0.0/app/templates/Views/PopupsTwoFactorTest.html b/rainloop/v/0.0.0/app/templates/Views/PopupsTwoFactorTest.html index d11472be7..fad529149 100644 --- a/rainloop/v/0.0.0/app/templates/Views/PopupsTwoFactorTest.html +++ b/rainloop/v/0.0.0/app/templates/Views/PopupsTwoFactorTest.html @@ -15,7 +15,9 @@
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/SettingsChangePassword.html b/rainloop/v/0.0.0/app/templates/Views/SettingsChangePassword.html index 0db39e3f9..e508b5850 100644 --- a/rainloop/v/0.0.0/app/templates/Views/SettingsChangePassword.html +++ b/rainloop/v/0.0.0/app/templates/Views/SettingsChangePassword.html @@ -10,7 +10,8 @@
- +
@@ -18,7 +19,8 @@
- +
@@ -26,7 +28,8 @@
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/SettingsContacts.html b/rainloop/v/0.0.0/app/templates/Views/SettingsContacts.html index a7b33cf76..3945764d0 100644 --- a/rainloop/v/0.0.0/app/templates/Views/SettingsContacts.html +++ b/rainloop/v/0.0.0/app/templates/Views/SettingsContacts.html @@ -32,7 +32,9 @@
- +
@@ -40,7 +42,8 @@
- +
@@ -48,7 +51,8 @@
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/SettingsFolderItem.html b/rainloop/v/0.0.0/app/templates/Views/SettingsFolderItem.html index bb4144ef7..5a7a1a884 100644 --- a/rainloop/v/0.0.0/app/templates/Views/SettingsFolderItem.html +++ b/rainloop/v/0.0.0/app/templates/Views/SettingsFolderItem.html @@ -4,7 +4,10 @@   - + + diff --git a/rainloop/v/0.0.0/app/templates/Views/SettingsGeneral.html b/rainloop/v/0.0.0/app/templates/Views/SettingsGeneral.html index 39943615f..602710fb1 100644 --- a/rainloop/v/0.0.0/app/templates/Views/SettingsGeneral.html +++ b/rainloop/v/0.0.0/app/templates/Views/SettingsGeneral.html @@ -23,13 +23,13 @@
- +
@@ -17,7 +19,9 @@
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/SettingsIdentity.html b/rainloop/v/0.0.0/app/templates/Views/SettingsIdentity.html index 32a78c1d2..62fd71d66 100644 --- a/rainloop/v/0.0.0/app/templates/Views/SettingsIdentity.html +++ b/rainloop/v/0.0.0/app/templates/Views/SettingsIdentity.html @@ -8,7 +8,9 @@
- +
@@ -17,7 +19,9 @@
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/SettingsThemes.html b/rainloop/v/0.0.0/app/templates/Views/SettingsThemes.html index 8d5b65895..905083dcb 100644 --- a/rainloop/v/0.0.0/app/templates/Views/SettingsThemes.html +++ b/rainloop/v/0.0.0/app/templates/Views/SettingsThemes.html @@ -23,13 +23,13 @@
").addClass("rl-settings-view-model").hide().attr("data-bind",'template: {name: "'+f.__rlSettingsData.Template+'"}, i18nInit: true'),i.appendTo(g),e.data=Ob.data(),e.viewModelDom=i,e.__rlSettingsData=f.__rlSettingsData,f.__dom=i,f.__builded=!0,f.__vm=e,c.applyBindings(e,i[0]),Bb.delegateRun(e,"onBuild",[i])):Bb.log("Cannot find sub settings view model position: SettingsSubScreen")),e&&h.defer(function(){d.oCurrentSubScreen&&(Bb.delegateRun(d.oCurrentSubScreen,"onHide"),d.oCurrentSubScreen.viewModelDom.hide()),d.oCurrentSubScreen=e,d.oCurrentSubScreen&&(d.oCurrentSubScreen.viewModelDom.show(),Bb.delegateRun(d.oCurrentSubScreen,"onShow"),Bb.delegateRun(d.oCurrentSubScreen,"onFocus",[],200),h.each(d.menu(),function(a){a.selected(e&&e.__rlSettingsData&&a.route===e.__rlSettingsData.Route)}),b("#rl-content .b-settings .b-content .content").scrollTop(0)),Bb.windowResize()})):Hb.setHash(Ob.link().settings(),!1,!0)},sb.prototype.onHide=function(){this.oCurrentSubScreen&&this.oCurrentSubScreen.viewModelDom&&(Bb.delegateRun(this.oCurrentSubScreen,"onHide"),this.oCurrentSubScreen.viewModelDom.hide())},sb.prototype.onBuild=function(){h.each(Fb.settings,function(a){a&&a.__rlSettingsData&&!h.find(Fb["settings-removed"],function(b){return b&&b===a})&&this.menu.push({route:a.__rlSettingsData.Route,label:a.__rlSettingsData.Label,selected:c.observable(!1),disabled:!!h.find(Fb["settings-disabled"],function(b){return b&&b===a})})},this),this.oViewModelPlace=b("#rl-content #rl-settings-subscreen")},sb.prototype.routes=function(){var a=h.find(Fb.settings,function(a){return a&&a.__rlSettingsData&&a.__rlSettingsData.IsDefault}),b=a?a.__rlSettingsData.Route:"general",c={subname:/^(.*)$/,normalize_:function(a,c){return c.subname=Bb.isUnd(c.subname)?b:Bb.pString(c.subname),[c.subname]}};return[["{subname}/",c],["{subname}",c],["",c]]},h.extend(tb.prototype,s.prototype),tb.prototype.onShow=function(){Ob.setTitle("")},h.extend(ub.prototype,s.prototype),ub.prototype.oLastRoute={},ub.prototype.setNewTitle=function(){var a=Ob.data().accountEmail(),b=Ob.data().foldersInboxUnreadCount();Ob.setTitle((""===a?"":(b>0?"("+b+") ":" ")+a+" - ")+Bb.i18n("TITLES/MAILBOX"))},ub.prototype.onShow=function(){this.setNewTitle(),Ob.data().keyScope(zb.KeyState.MessageList)},ub.prototype.onRoute=function(a,b,c,d){if(Bb.isUnd(d)?1:!d){var e=Ob.data(),f=Ob.cache().getFolderFullNameRaw(a),g=Ob.cache().getFolderFromCacheList(f);g&&(e.currentFolder(g).messageListPage(b).messageListSearch(c),zb.Layout.NoPreview===e.layout()&&e.message()&&(e.message(null),e.messageFullScreenMode(!1)),Ob.reloadMessageList())}else zb.Layout.NoPreview!==Ob.data().layout()||Ob.data().message()||Ob.historyBack()},ub.prototype.onStart=function(){var a=Ob.data(),b=function(){Bb.windowResize()};(Ob.settingsGet("AllowAdditionalAccounts")||Ob.settingsGet("AllowIdentities"))&&Ob.accountsAndIdentities(),h.delay(function(){"INBOX"!==a.currentFolderFullNameRaw()&&Ob.folderInformation("INBOX")},1e3),h.delay(function(){Ob.quota()},5e3),h.delay(function(){Ob.remote().appDelayStart(Bb.emptyFunction)},35e3),Kb.toggleClass("rl-no-preview-pane",zb.Layout.NoPreview===a.layout()),a.folderList.subscribe(b),a.messageList.subscribe(b),a.message.subscribe(b),a.layout.subscribe(function(a){Kb.toggleClass("rl-no-preview-pane",zb.Layout.NoPreview===a)}),a.foldersInboxUnreadCount.subscribe(function(){this.setNewTitle()},this)},ub.prototype.routes=function(){var a=function(){return["Inbox",1,"",!0]},b=function(a,b){return b[0]=Bb.pString(b[0]),b[1]=Bb.pInt(b[1]),b[1]=0>=b[1]?1:b[1],b[2]=Bb.pString(b[2]),""===a&&(b[0]="Inbox",b[1]=1),[decodeURI(b[0]),b[1],decodeURI(b[2]),!1]},c=function(a,b){return b[0]=Bb.pString(b[0]),b[1]=Bb.pString(b[1]),""===a&&(b[0]="Inbox"),[decodeURI(b[0]),1,decodeURI(b[1]),!1]};return[[/^([a-zA-Z0-9]+)\/p([1-9][0-9]*)\/(.+)\/?$/,{normalize_:b}],[/^([a-zA-Z0-9]+)\/p([1-9][0-9]*)$/,{normalize_:b}],[/^([a-zA-Z0-9]+)\/(.+)\/?$/,{normalize_:c}],[/^message-preview$/,{normalize_:a}],[/^([^\/]*)$/,{normalize_:b}]]},h.extend(vb.prototype,sb.prototype),vb.prototype.onShow=function(){Ob.setTitle(this.sSettingsTitle),Ob.data().keyScope(zb.KeyState.Settings)},h.extend(wb.prototype,q.prototype),wb.prototype.oSettings=null,wb.prototype.oPlugins=null,wb.prototype.oLocal=null,wb.prototype.oLink=null,wb.prototype.oSubs={},wb.prototype.download=function(b){var c=null,d=null,e=navigator.userAgent.toLowerCase();return e&&(e.indexOf("chrome")>-1||e.indexOf("chrome")>-1)&&(c=document.createElement("a"),c.href=b,document.createEvent&&(d=document.createEvent("MouseEvents"),d&&d.initEvent&&c.dispatchEvent))?(d.initEvent("click",!0,!0),c.dispatchEvent(d),!0):(Eb.bMobileDevice?(a.open(b,"_self"),a.focus()):this.iframe.attr("src",b),!0)},wb.prototype.link=function(){return null===this.oLink&&(this.oLink=new k),this.oLink},wb.prototype.local=function(){return null===this.oLocal&&(this.oLocal=new p),this.oLocal},wb.prototype.settingsGet=function(a){return null===this.oSettings&&(this.oSettings=Bb.isNormal(Ib)?Ib:{}),Bb.isUnd(this.oSettings[a])?null:this.oSettings[a]},wb.prototype.settingsSet=function(a,b){null===this.oSettings&&(this.oSettings=Bb.isNormal(Ib)?Ib:{}),this.oSettings[a]=b},wb.prototype.setTitle=function(b){b=(Bb.isNormal(b)&&0l;l++)q.push({id:e[l][0],name:e[l][1],system:!1,seporator:!1,disabled:!1});for(o=!0,l=0,m=b.length;m>l;l++)n=b[l],(h?h.call(null,n):!0)&&(o&&0l;l++)n=c[l],(n.subScribed()||!n.existen)&&(h?h.call(null,n):!0)&&(zb.FolderType.User===n.type()||!j||0 + diff --git a/vendors/fontastic/fonts/rainloop.ttf b/vendors/fontastic/fonts/rainloop.ttf index ff071afc4..de31286f0 100644 Binary files a/vendors/fontastic/fonts/rainloop.ttf and b/vendors/fontastic/fonts/rainloop.ttf differ diff --git a/vendors/fontastic/fonts/rainloop.woff b/vendors/fontastic/fonts/rainloop.woff index ecc01a9da..b96f78386 100644 Binary files a/vendors/fontastic/fonts/rainloop.woff and b/vendors/fontastic/fonts/rainloop.woff differ diff --git a/vendors/fontastic/icons-reference.html b/vendors/fontastic/icons-reference.html index cf97689cb..2c052e203 100644 --- a/vendors/fontastic/icons-reference.html +++ b/vendors/fontastic/icons-reference.html @@ -473,6 +473,10 @@ h2{font-size:18px;padding:0 0 21px 5px;margin:45px 0 0 0;text-transform:uppercas
+
  • +
    + +
  • CSS mapping

      @@ -904,6 +908,10 @@ h2{font-size:18px;padding:0 0 21px 5px;margin:45px 0 0 0;text-transform:uppercas
      +
    • +
      + +