diff --git a/dev/App/Abstract.js b/dev/App/Abstract.js index 9a2141fd0..89176fdb8 100644 --- a/dev/App/Abstract.js +++ b/dev/App/Abstract.js @@ -211,7 +211,16 @@ { Events.pub('rl.bootstart'); - var ssm = require('ssm'); + var + ssm = require('ssm'), + ko = require('ko') + ; + + ko.components.register('SaveTrigger', require('Components/SaveTrigger')); + ko.components.register('Checkbox', require('Components/Checkbox')); + ko.components.register('Input', require('Components/Input')); + ko.components.register('Select', require('Components/Select')); + ko.components.register('TextArea', require('Components/TextArea')); Utils.initOnStartOrLangChange(function () { Utils.initNotificationLanguage(); diff --git a/dev/App/User.js b/dev/App/User.js index 7000b8b19..aa461fc9e 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -1355,17 +1355,38 @@ iContactsSyncInterval = 5 <= iContactsSyncInterval ? iContactsSyncInterval : 20; iContactsSyncInterval = 320 >= iContactsSyncInterval ? iContactsSyncInterval : 320; + _.delay(function () { + self.contactsSync(); + }, 10000); + + _.delay(function () { + self.folderInformationMultiply(true); + }, 2000); + window.setInterval(function () { self.contactsSync(); }, iContactsSyncInterval * 60000 + 5000); + if (Settings.capa(Enums.Capa.AdditionalAccounts) || Settings.capa(Enums.Capa.AdditionalIdentities)) + { + self.accountsAndIdentities(); + } + _.delay(function () { - self.contactsSync(); + var sF = Data.currentFolderFullNameRaw(); + if (Cache.getFolderInboxName() !== sF) + { + self.folderInformation(sF); + } + }, 1000); + + _.delay(function () { + self.quota(); }, 5000); _.delay(function () { - self.folderInformationMultiply(true); - }, 500); + Remote.appDelayStart(Utils.emptyFunction); + }, 35000); Plugins.runHook('rl-start-user-screens'); Events.pub('rl.bootstart-user-screens'); diff --git a/dev/Common/Utils.js b/dev/Common/Utils.js index 400111ddc..ba1bb635f 100644 --- a/dev/Common/Utils.js +++ b/dev/Common/Utils.js @@ -1982,6 +1982,9 @@ Utils.reloadLanguage = function (sLanguage, fDone, fFail) { var iStart = Utils.microtime(); + + Globals.$html.addClass('rl-changing-language'); + $.ajax({ 'url': require('Common/Links').langLink(sLanguage), 'dataType': 'script', @@ -1992,6 +1995,7 @@ _.delay(function () { Utils.i18nReload(); (fDone || Utils.emptyFunction)(); + Globals.$html.removeClass('rl-changing-language'); }, 500 < Utils.microtime() - iStart ? 1 : 500); }) ; diff --git a/dev/Components/Abstract.js b/dev/Components/Abstract.js new file mode 100644 index 000000000..ba5836e76 --- /dev/null +++ b/dev/Components/Abstract.js @@ -0,0 +1,72 @@ + +(function () { + + 'use strict'; + + var + _ = require('_'), + ko = require('ko'), + + Utils = require('Common/Utils') + ; + + /** + * @constructor + */ + function AbstractComponent() + { + this.disposable = []; + } + + /** + * @type {Array} + */ + AbstractComponent.prototype.disposable = []; + + AbstractComponent.prototype.dispose = function () + { + _.each(this.disposable, function (fFuncToDispose) { + if (fFuncToDispose && fFuncToDispose.dispose) + { + fFuncToDispose.dispose(); + } + }); + }; + + /** + * @param {AbstractComponent} fClassObject + * @param {string} sTemplateID + * @return {Object} + */ + AbstractComponent.componentExportHelper = function (fClassObject, sTemplateID) { + return { + viewModel: { + createViewModel: function(oParams, oCmponentInfo) { + + oParams = oParams || {}; + oParams.element = null; + + if (oCmponentInfo.element) + { + oParams.element = $(oCmponentInfo.element); + + Utils.i18nToNode(oParams.element); + + if (!Utils.isUnd(oParams.inline) && ko.unwrap(oParams.inline)) + { + oParams.element.css('display', 'inline-block'); + } + } + + return new fClassObject(oParams); + } + }, + template: { + element: sTemplateID + } + }; + }; + + module.exports = AbstractComponent; + +}()); diff --git a/dev/Components/AbstractInput.js b/dev/Components/AbstractInput.js new file mode 100644 index 000000000..a261db0d8 --- /dev/null +++ b/dev/Components/AbstractInput.js @@ -0,0 +1,89 @@ + +(function () { + + 'use strict'; + + var + _ = require('_'), + ko = require('ko'), + + Enums = require('Common/Enums'), + Utils = require('Common/Utils'), + + AbstractComponent = require('Components/Abstract') + ; + + /** + * @constructor + * + * @param {Object} oParams + * + * @extends AbstractComponent + */ + function AbstractInput(oParams) { + + AbstractComponent.call(this); + + this.value = oParams.value || ''; + this.size = oParams.size || 0; + this.label = oParams.label || ''; + this.enable = oParams.enable || true; + this.trigger = oParams.trigger && oParams.trigger.subscribe ? oParams.trigger : null; + + this.labeled = !Utils.isUnd(oParams.label); + this.triggered = !Utils.isUnd(oParams.trigger) && !!this.trigger; + + this.classForTrigger = ko.observable(''); + + this.className = ko.computed(function () { + + var + iSize = ko.unwrap(this.size), + sSuffixValue = this.trigger ? + ' ' + Utils.trim('settings-saved-trigger-input ' + this.classForTrigger()) : '' + ; + + return (0 < iSize ? 'span' + iSize : '') + sSuffixValue; + + }, this); + + if (!Utils.isUnd(oParams.width) && oParams.element) + { + oParams.element.find('input,select,textarea').css('width', oParams.width); + } + + this.disposable.push(this.className); + + if (this.trigger) + { + this.setTriggerState(this.trigger()); + + this.disposable.push( + this.trigger.subscribe(this.setTriggerState, this) + ); + } + }; + + AbstractInput.prototype.setTriggerState = function (nValue) + { + switch (Utils.pInt(nValue)) + { + case Enums.SaveSettingsStep.TrueResult: + this.classForTrigger('success'); + break; + case Enums.SaveSettingsStep.FalseResult: + this.classForTrigger('error'); + break; + default: + this.classForTrigger(''); + break; + } + }; + + _.extend(AbstractInput.prototype, AbstractComponent.prototype); + + AbstractInput.componentExportHelper = AbstractComponent.componentExportHelper; + + module.exports = AbstractInput; + +}()); diff --git a/dev/Components/Checkbox.js b/dev/Components/Checkbox.js new file mode 100644 index 000000000..1693a9948 --- /dev/null +++ b/dev/Components/Checkbox.js @@ -0,0 +1,38 @@ + +(function () { + + 'use strict'; + + var + _ = require('_'), + ko = require('ko'), + + AbstractComponent = require('Components/Abstract') + ; + + /** + * @constructor + * + * @param {Object} oParams + * + * @extends AbstractComponent + */ + function CheckboxComponent(oParams) { + + AbstractComponent.call(this); + + this.value = oParams.value || ko.observable(false); + this.label = oParams.label || ''; + this.inline = oParams.inline; + }; + + _.extend(CheckboxComponent.prototype, AbstractComponent.prototype); + + CheckboxComponent.prototype.toggle = function() { + this.value(!this.value()); + }; + + module.exports = AbstractComponent.componentExportHelper( + CheckboxComponent, 'CheckboxComponent'); + +}()); diff --git a/dev/Components/Input.js b/dev/Components/Input.js new file mode 100644 index 000000000..c2aeda53f --- /dev/null +++ b/dev/Components/Input.js @@ -0,0 +1,50 @@ + +(function () { + + 'use strict'; + + var + _ = require('_'), + + Enums = require('Common/Enums'), + Utils = require('Common/Utils'), + + AbstractInput = require('Components/AbstractInput') + ; + + /** + * @constructor + * + * @param {Object} oParams + * + * @extends AbstractInput + */ + function InputComponent(oParams) { + + AbstractInput.call(this, oParams); + + this.placeholder = oParams.placeholder || '' + }; + + InputComponent.prototype.setTriggerState = function (nValue) + { + switch (Utils.pInt(nValue)) + { + case Enums.SaveSettingsStep.TrueResult: + this.classForTrigger('success'); + break; + case Enums.SaveSettingsStep.FalseResult: + this.classForTrigger('error'); + break; + default: + this.classForTrigger(''); + break; + } + }; + + _.extend(InputComponent.prototype, AbstractInput.prototype); + + module.exports = AbstractInput.componentExportHelper( + InputComponent, 'InputComponent'); + +}()); diff --git a/dev/Components/SaveTrigger.js b/dev/Components/SaveTrigger.js new file mode 100644 index 000000000..a49777020 --- /dev/null +++ b/dev/Components/SaveTrigger.js @@ -0,0 +1,94 @@ + +(function () { + + 'use strict'; + + var + _ = require('_'), + + Enums = require('Common/Enums'), + Utils = require('Common/Utils'), + + AbstractComponent = require('Components/Abstract') + ; + + /** + * @constructor + * + * @param {Object} oParams + * + * @extends AbstractComponent + */ + function SaveTriggerComponent(oParams) { + + AbstractComponent.call(this); + + this.element = oParams.element || null; + this.value = oParams.value && oParams.value.subscribe ? oParams.value : null; + + if (this.element) + { + if (this.value) + { + this.element.css('display', 'inline-block'); + + if (oParams.verticalAlign) + { + this.element.css('vertical-align', oParams.verticalAlign); + } + + this.setState(this.value()); + + this.disposable.push( + this.value.subscribe(this.setState, this) + ); + } + else + { + this.element.hide(); + } + } + }; + + SaveTriggerComponent.prototype.setState = function (nValue) + { + switch (Utils.pInt(nValue)) + { + case Enums.SaveSettingsStep.TrueResult: + this.element + .find('.animated,.error').hide().removeClass('visible') + .end() + .find('.success').show().addClass('visible') + ; + break; + case Enums.SaveSettingsStep.FalseResult: + this.element + .find('.animated,.success').hide().removeClass('visible') + .end() + .find('.error').show().addClass('visible') + ; + break; + case Enums.SaveSettingsStep.Animate: + this.element + .find('.error,.success').hide().removeClass('visible') + .end() + .find('.animated').show().addClass('visible') + ; + break; + case Enums.SaveSettingsStep.Idle: + default: + this.element + .find('.animated').hide() + .end() + .find('.error,.success').removeClass('visible') + ; + break; + } + }; + + _.extend(SaveTriggerComponent.prototype, AbstractComponent.prototype); + + module.exports = AbstractComponent.componentExportHelper( + SaveTriggerComponent, 'SaveTriggerComponent'); + +}()); diff --git a/dev/Components/Select.js b/dev/Components/Select.js new file mode 100644 index 000000000..3f1750422 --- /dev/null +++ b/dev/Components/Select.js @@ -0,0 +1,37 @@ + +(function () { + + 'use strict'; + + var + _ = require('_'), + + Enums = require('Common/Enums'), + Utils = require('Common/Utils'), + + AbstractInput = require('Components/AbstractInput') + ; + + /** + * @constructor + * + * @param {Object} oParams + * + * @extends AbstractInput + */ + function SelectComponent(oParams) { + + AbstractInput.call(this, oParams); + + this.options = oParams.options || ''; + + this.optionsText = oParams.optionsText || null; + this.optionsValue = oParams.optionsValue || null; + }; + + _.extend(SelectComponent.prototype, AbstractInput.prototype); + + module.exports = AbstractInput.componentExportHelper( + SelectComponent, 'SelectComponent'); + +}()); diff --git a/dev/Components/TextArea.js b/dev/Components/TextArea.js new file mode 100644 index 000000000..8c21565a3 --- /dev/null +++ b/dev/Components/TextArea.js @@ -0,0 +1,34 @@ + +(function () { + + 'use strict'; + + var + _ = require('_'), + + Enums = require('Common/Enums'), + Utils = require('Common/Utils'), + + AbstractInput = require('Components/AbstractInput') + ; + + /** + * @constructor + * + * @param {Object} oParams + * + * @extends AbstractInput + */ + function TextAreaComponent(oParams) { + + AbstractInput.call(this, oParams); + + this.rows = oParams.rows || 5; + }; + + _.extend(TextAreaComponent.prototype, AbstractInput.prototype); + + module.exports = AbstractInput.componentExportHelper( + TextAreaComponent, 'TextAreaComponent'); + +}()); diff --git a/dev/External/ko.js b/dev/External/ko.js index 962b52fab..3a0518973 100644 --- a/dev/External/ko.js +++ b/dev/External/ko.js @@ -1,5 +1,5 @@ -(function (module, ko) { +(function (ko) { 'use strict'; @@ -902,4 +902,4 @@ module.exports = ko; -}(module, ko)); +}(ko)); diff --git a/dev/Screen/User/MailBox.js b/dev/Screen/User/MailBox.js index d9356d164..094c3582f 100644 --- a/dev/Screen/User/MailBox.js +++ b/dev/Screen/User/MailBox.js @@ -102,32 +102,11 @@ MailBoxUserScreen.prototype.onStart = function () { var - sInboxFolderName = Cache.getFolderInboxName(), fResizeFunction = function () { Utils.windowResize(); } ; - if (Settings.capa(Enums.Capa.AdditionalAccounts) || Settings.capa(Enums.Capa.AdditionalIdentities)) - { - require('App/User').accountsAndIdentities(); - } - - _.delay(function () { - if (sInboxFolderName !== Data.currentFolderFullNameRaw()) - { - require('App/User').folderInformation(sInboxFolderName); - } - }, 1000); - - _.delay(function () { - require('App/User').quota(); - }, 5000); - - _.delay(function () { - Remote.appDelayStart(Utils.emptyFunction); - }, 35000); - Globals.$html.toggleClass('rl-no-preview-pane', Enums.Layout.NoPreview === Data.layout()); Data.folderList.subscribe(fResizeFunction); diff --git a/dev/Settings/User/General.js b/dev/Settings/User/General.js index 43ae325d5..843192a47 100644 --- a/dev/Settings/User/General.js +++ b/dev/Settings/User/General.js @@ -36,6 +36,13 @@ this.useCheckboxesInList = Data.useCheckboxesInList; this.allowLanguagesOnSettings = Data.allowLanguagesOnSettings; + this.usePreviewPaneCheckbox = ko.computed({ + read: this.usePreviewPane, + write: function (bValue) { + this.layout(bValue ? Enums.Layout.SidePreview : Enums.Layout.NoPreview); + } + }, this); + this.isDesktopNotificationsSupported = ko.computed(function () { return Enums.DesktopNotifications.NotSupported !== Data.desktopNotificationsPermisions(); }); diff --git a/dev/Storage/User/Data.js b/dev/Storage/User/Data.js index 6f68f74a9..57a140d41 100644 --- a/dev/Storage/User/Data.js +++ b/dev/Storage/User/Data.js @@ -627,7 +627,7 @@ var aResult = [], - iLimit = 10, + iLimit = 5, iUtc = moment().unix(), iTimeout = iUtc - 60 * 5, aTimeouts = [], diff --git a/dev/Styles/Layout.less b/dev/Styles/Layout.less index 838b6ec39..da764aa40 100644 --- a/dev/Styles/Layout.less +++ b/dev/Styles/Layout.less @@ -275,3 +275,6 @@ html.rl-ctrl-key-pressed { background-image: none; display: none; } + +/*html.rl-changing-language { +}*/ diff --git a/dev/bootstrap.js b/dev/bootstrap.js index eec1bff40..6777c7377 100644 --- a/dev/bootstrap.js +++ b/dev/bootstrap.js @@ -57,7 +57,7 @@ _.delay(function () { App.bootstart(); - + Globals.$html .removeClass('no-js rl-booted-trigger') .addClass('rl-booted') diff --git a/rainloop/v/0.0.0/app/src/RainLoop/Actions.php b/rainloop/v/0.0.0/app/src/RainLoop/Actions.php index da3aa0390..5eb1220e8 100644 --- a/rainloop/v/0.0.0/app/src/RainLoop/Actions.php +++ b/rainloop/v/0.0.0/app/src/RainLoop/Actions.php @@ -2427,6 +2427,7 @@ class Actions */ public function DoAdminSettingsUpdate() { +// sleep(3); // return $this->DefaultResponse(__FUNCTION__, false); $this->IsAdminLoggined(); diff --git a/rainloop/v/0.0.0/app/src/RainLoop/Service.php b/rainloop/v/0.0.0/app/src/RainLoop/Service.php index d284233bd..380a9a5b6 100644 --- a/rainloop/v/0.0.0/app/src/RainLoop/Service.php +++ b/rainloop/v/0.0.0/app/src/RainLoop/Service.php @@ -225,9 +225,11 @@ class Service 'AppleTouchLink' => $sStaticPrefix.'apple-touch-icon.png', 'AppCssLink' => $sStaticPrefix.'css/app'.($bAppCssDebug ? '' : '.min').'.css', 'BootJsLink' => $sStaticPrefix.'js/min/boot.js', + 'ComponentsJsLink' => $sStaticPrefix.'js/'.($bAppJsDebug ? '' : 'min/').'components.js', 'LibJsLink' => $sStaticPrefix.'js/min/libs.js', 'EditorJsLink' => $sStaticPrefix.'ckeditor/ckeditor.js', 'OpenPgpJsLink' => $sStaticPrefix.'js/min/openpgp.min.js', + 'AppJsCommonLink' => $sStaticPrefix.'js/'.($bAppJsDebug ? '' : 'min/').'common.js', 'AppJsLink' => $sStaticPrefix.'js/'.($bAppJsDebug ? '' : 'min/').($bAdmin ? 'admin' : 'app').'.js' ); @@ -238,9 +240,11 @@ class Service '{{BaseAppAppleTouchFile}}' => $aData['AppleTouchLink'], '{{BaseAppMainCssLink}}' => $aData['AppCssLink'], '{{BaseAppBootScriptLink}}' => $aData['BootJsLink'], + '{{BaseAppComponentsScriptLink}}' => $aData['ComponentsJsLink'], '{{BaseAppLibsScriptLink}}' => $aData['LibJsLink'], '{{BaseAppEditorScriptLink}}' => $aData['EditorJsLink'], '{{BaseAppOpenPgpScriptLink}}' => $aData['OpenPgpJsLink'], + '{{BaseAppMainCommonScriptLink}}' => $aData['AppJsCommonLink'], '{{BaseAppMainScriptLink}}' => $aData['AppJsLink'], '{{BaseDir}}' => \in_array($aData['Language'], array('ar', 'he', 'ur')) ? 'rtl' : 'ltr' ); diff --git a/rainloop/v/0.0.0/app/src/RainLoop/ServiceActions.php b/rainloop/v/0.0.0/app/src/RainLoop/ServiceActions.php index 35d872612..34d211c1e 100644 --- a/rainloop/v/0.0.0/app/src/RainLoop/ServiceActions.php +++ b/rainloop/v/0.0.0/app/src/RainLoop/ServiceActions.php @@ -442,6 +442,7 @@ class ServiceActions */ public function ServiceLang() { +// sleep(2); $sResult = ''; @\header('Content-Type: application/javascript; charset=utf-8'); @@ -1070,7 +1071,9 @@ class ServiceActions */ private function compileTemplates($bAdmin = false) { - $sHtml = \RainLoop\Utils::CompileTemplates(APP_VERSION_ROOT_PATH.'app/templates/Views/'.($bAdmin ? 'Admin' : 'User'), $this->oActions). + $sHtml = + \RainLoop\Utils::CompileTemplates(APP_VERSION_ROOT_PATH.'app/templates/Views/Components', $this->oActions, 'Component'). + \RainLoop\Utils::CompileTemplates(APP_VERSION_ROOT_PATH.'app/templates/Views/'.($bAdmin ? 'Admin' : 'User'), $this->oActions). \RainLoop\Utils::CompileTemplates(APP_VERSION_ROOT_PATH.'app/templates/Views/Common', $this->oActions). $this->oActions->Plugins()->CompileTemplate($bAdmin); diff --git a/rainloop/v/0.0.0/app/src/RainLoop/Utils.php b/rainloop/v/0.0.0/app/src/RainLoop/Utils.php index ad6231505..9190c6326 100644 --- a/rainloop/v/0.0.0/app/src/RainLoop/Utils.php +++ b/rainloop/v/0.0.0/app/src/RainLoop/Utils.php @@ -245,10 +245,12 @@ class Utils /** * @param string $sDirName + * @param \RainLoop\Actions $oAction + * @param string $sNameSuffix = '' * * @return string */ - public static function CompileTemplates($sDirName, $oAction) + public static function CompileTemplates($sDirName, $oAction, $sNameSuffix = '') { $sResult = ''; if (\file_exists($sDirName)) @@ -257,7 +259,7 @@ class Utils foreach ($aList as $sName) { - $sTemplateName = \substr($sName, 0, -5); + $sTemplateName = \substr($sName, 0, -5).$sNameSuffix; $sResult .= ''; } diff --git a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsBranding.html b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsBranding.html index 5c5a9f0b5..a540dc8b0 100644 --- a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsBranding.html +++ b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsBranding.html @@ -13,9 +13,15 @@ Page Title
- -
+
@@ -23,9 +29,15 @@ Loading Description
- -
+

@@ -37,9 +49,16 @@ Logo
- -
+
@@ -47,18 +66,26 @@ Description
- -
+
@@ -66,8 +93,16 @@ Custom CSS
- -
+
diff --git a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsContacts.html b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsContacts.html index 88cdbbcb7..831d0488c 100644 --- a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsContacts.html +++ b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsContacts.html @@ -14,18 +14,14 @@
- - - +
+
diff --git a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsGeneral.html b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsGeneral.html index fd338f891..4c7055c1d 100644 --- a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsGeneral.html +++ b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsGeneral.html @@ -23,7 +23,11 @@ -
+    +
@@ -32,28 +36,47 @@ Theme
- -
+
- - +
+
- +
(http://en.gravatar.com/)
@@ -66,8 +89,15 @@ size limit
- MB -
+


@@ -84,14 +114,20 @@
- - +
+
diff --git a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsLogin.html b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsLogin.html index e008aa971..51dd04083 100644 --- a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsLogin.html +++ b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsLogin.html @@ -8,26 +8,31 @@ Default Domain
- -
+
- +

- - +
+
diff --git a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsPlugins.html b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsPlugins.html index 93fedf059..55c5526d2 100644 --- a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsPlugins.html +++ b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsPlugins.html @@ -12,11 +12,10 @@
- +

diff --git a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsSecurity.html b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsSecurity.html index dfbbe8a48..2e0710127 100644 --- a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsSecurity.html +++ b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsSecurity.html @@ -5,40 +5,38 @@
- +
- +
- +
+    + (beta)
- +
+    + (beta)
diff --git a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsSocial.html b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsSocial.html index 937f3e83b..32a16f6b0 100644 --- a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsSocial.html +++ b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminSettingsSocial.html @@ -11,21 +11,21 @@
- +

- - +
+
@@ -56,9 +56,15 @@ Api Key
- -
+

Required for Google Drive File Picker @@ -73,10 +79,10 @@

- +
@@ -105,10 +111,10 @@
- +
@@ -136,10 +142,10 @@
- +
diff --git a/rainloop/v/0.0.0/app/templates/Views/Components/Checkbox.html b/rainloop/v/0.0.0/app/templates/Views/Components/Checkbox.html new file mode 100644 index 000000000..48d43c5d6 --- /dev/null +++ b/rainloop/v/0.0.0/app/templates/Views/Components/Checkbox.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/rainloop/v/0.0.0/app/templates/Views/Components/Input.html b/rainloop/v/0.0.0/app/templates/Views/Components/Input.html new file mode 100644 index 000000000..82136194b --- /dev/null +++ b/rainloop/v/0.0.0/app/templates/Views/Components/Input.html @@ -0,0 +1,14 @@ + + +  + +  + + +  +
+ \ No newline at end of file diff --git a/rainloop/v/0.0.0/app/templates/Views/Components/SaveTrigger.html b/rainloop/v/0.0.0/app/templates/Views/Components/SaveTrigger.html new file mode 100644 index 000000000..73c491a19 --- /dev/null +++ b/rainloop/v/0.0.0/app/templates/Views/Components/SaveTrigger.html @@ -0,0 +1,3 @@ +
+ +
\ No newline at end of file diff --git a/rainloop/v/0.0.0/app/templates/Views/Components/Select.html b/rainloop/v/0.0.0/app/templates/Views/Components/Select.html new file mode 100644 index 000000000..877dad302 --- /dev/null +++ b/rainloop/v/0.0.0/app/templates/Views/Components/Select.html @@ -0,0 +1,13 @@ + + +  + +  + + +   +
+ \ No newline at end of file diff --git a/rainloop/v/0.0.0/app/templates/Views/Components/TextArea.html b/rainloop/v/0.0.0/app/templates/Views/Components/TextArea.html new file mode 100644 index 000000000..f4dadfe61 --- /dev/null +++ b/rainloop/v/0.0.0/app/templates/Views/Components/TextArea.html @@ -0,0 +1,9 @@ + + +  +
+ \ No newline at end of file diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsGeneral.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsGeneral.html index 602710fb1..190906b63 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsGeneral.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsGeneral.html @@ -13,7 +13,11 @@ -
+    +
@@ -43,38 +47,56 @@
- - -
+
- - - - - +
+
+
+
+
diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsThemes.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsThemes.html index 56f59965a..22aacab31 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsThemes.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsThemes.html @@ -2,7 +2,11 @@
-
+    +
diff --git a/webpack.config.js b/webpack.config.js index ffecff91f..cf8169976 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -13,6 +13,7 @@ module.exports = { chunkFilename: '[chunkhash].chunk.js' }, plugins: [ +// new webpack.optimize.CommonsChunkPlugin('common.js'), new webpack.optimize.OccurenceOrderPlugin() ], resolve: {