mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-25 10:09:20 +03:00
Admin Panel localization (#467)
This commit is contained in:
parent
470b3645e2
commit
3dac6809d1
46 changed files with 1111 additions and 561 deletions
|
|
@ -8,8 +8,8 @@
|
|||
<form class="wrapper loginForm thm-login" action="#/" data-bind="submit: submitForm">
|
||||
<div class="controls" data-bind="css: {'error': loginError}">
|
||||
<div class="input-append">
|
||||
<input type="text" class="input-block-level inputLogin checkAutocomplete" placeholder="Login" name="RainLoopAdminLogin" id="RainLoopAdminLogin"
|
||||
autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
<input type="text" class="input-block-level inputLogin checkAutocomplete" name="RainLoopAdminLogin" id="RainLoopAdminLogin"
|
||||
autocorrect="off" autocapitalize="off" spellcheck="false" data-i18n="[placeholder]LOGIN/LABEL_LOGIN"
|
||||
data-bind="textInput: login, hasFocus: loginFocus" />
|
||||
<span class="add-on">
|
||||
<i class="icon-user"></i>
|
||||
|
|
@ -19,7 +19,7 @@
|
|||
<div class="controls" data-bind="css: {'error': passwordError}">
|
||||
<div class="input-append">
|
||||
<input type="password" class="input-block-level inputPassword checkAutocomplete" placeholder="Password" name="RainLoopAdminPassword" id="RainLoopAdminPassword"
|
||||
autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autocorrect="off" autocapitalize="off" spellcheck="false" data-i18n="[placeholder]LOGIN/LABEL_PASSWORD"
|
||||
data-bind="textInput: password" />
|
||||
<span class="add-on">
|
||||
<i class="icon-key"></i>
|
||||
|
|
@ -29,7 +29,7 @@
|
|||
<div class="controls">
|
||||
<button type="submit" class="btn btn-large btn-block buttonLogin" data-bind="command: submitCommand">
|
||||
<i class="icon-spinner animated" data-bind="visible: submitRequest"></i>
|
||||
<span data-bind="visible: !submitRequest()">Log into the admin panel</span>
|
||||
<span data-bind="visible: !submitRequest()" data-i18n="LOGIN/BUTTON_LOGIN"></span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@
|
|||
<i class="icon-spinner animated" style="margin-top: 2px" data-bind="style: {'visibility': adminManLoadingVisibility }"></i>
|
||||
|
||||
RainLoop
|
||||
<span data-bind="visible: capa">(Premium)</span>
|
||||
<span data-bind="visible: capa">(<span data-i18n="TOP_PANEL/LABEL_PREMIUM"></span>)</span>
|
||||
—
|
||||
Admin Panel
|
||||
<span data-i18n="TOP_PANEL/LABEL_ADMIN_PANEL"></span>
|
||||
|
||||
(<span data-bind="text: adminDomain"></span>)
|
||||
</h4>
|
||||
|
|
|
|||
|
|
@ -1,15 +1,13 @@
|
|||
<div class="b-admin-about">
|
||||
<div class="form-horizontal">
|
||||
<div class="legend">
|
||||
About
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_ABOUT/LEGEND_ABOUT"></div>
|
||||
<div class="row" style="min-width: 800px;">
|
||||
<div class="span4">
|
||||
<div class="rl-logo"></div>
|
||||
<div style="margin-left: 45px;">
|
||||
2014 © All Rights Reserved.
|
||||
2015 © <span data-i18n="TAB_ABOUT/LABEL_ALL_RIGHTS_RESERVED"></span>
|
||||
<br />
|
||||
<a class="g-ui-link" href="http://rainloop.net/" target="_blank">http://rainloop.net/</a>
|
||||
<a class="g-ui-link" href="http://www.rainloop.net/" target="_blank">http://rainloop.net/</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span8 rl-desc">
|
||||
|
|
@ -20,7 +18,7 @@
|
|||
(<span data-bind="text: coreType"></span> channel)
|
||||
</span>
|
||||
</h4>
|
||||
<h4 style="color: #aaa; font-weight: normal;">Simple, modern & fast web-based email client</h4>
|
||||
<h4 style="color: #aaa; font-weight: normal;" data-i18n="TAB_ABOUT/LABEL_TAG_HINT"></h4>
|
||||
<h5 style="font-weight: normal; margin-top: 40px;">
|
||||
<div data-bind="visible: 'error' === statusType()">
|
||||
<i class="icon-warning" style="color: red"></i>
|
||||
|
|
@ -30,9 +28,7 @@
|
|||
<div data-bind="visible: 'available' === statusType()">
|
||||
<i class="icon-bolt" style="color: red"></i>
|
||||
|
||||
New
|
||||
<b data-bind="text: coreRemoteVersion"></b>
|
||||
version is available.
|
||||
<span data-bind="html: coreRemoteVersionHtmlDesc"></span>
|
||||
<span data-bind="visible: '' !== coreRemoteRelease()">
|
||||
(<span data-bind="text: coreRemoteRelease"></span>)
|
||||
</span>
|
||||
|
|
@ -41,9 +37,9 @@
|
|||
<br />
|
||||
<i class="icon-warning" style="color: red"></i>
|
||||
|
||||
<b>Warning!</b>
|
||||
<b data-i18n="HINTS/WARNING"></b>
|
||||
|
||||
Please read the change log before updating.
|
||||
<span data-i18n="TAB_ABOUT/HINT_READ_CHANGE_LOG"></span>
|
||||
<br />
|
||||
</span>
|
||||
<br />
|
||||
|
|
@ -51,38 +47,38 @@
|
|||
<a class="btn" data-bind="click: updateCoreData">
|
||||
<i class="icon-sync"></i>
|
||||
|
||||
Update
|
||||
<span data-i18n="TAB_ABOUT/BUTTON_UPDATE"></span>
|
||||
</a>
|
||||
|
||||
</span>
|
||||
<span data-bind="visible: coreAccess()">
|
||||
<a class="btn" href="http://rainloop.net/downloads/" target="_blank">
|
||||
<a class="btn" href="http://www.rainloop.net/downloads/" target="_blank">
|
||||
<i class="icon-download"></i>
|
||||
|
||||
Download
|
||||
<span data-i18n="TAB_ABOUT/BUTTON_DOWNLOAD"></span>
|
||||
</a>
|
||||
|
||||
<a class="btn" href="http://rainloop.net/changelog/" target="_blank">
|
||||
<a class="btn" href="http://www.rainloop.net/changelog/" target="_blank">
|
||||
<i class="icon-file-text"></i>
|
||||
|
||||
Changelog
|
||||
<span data-i18n="TAB_ABOUT/BUTTON_CHANGELOG"></span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<div data-bind="visible: 'up-to-date' === statusType()">
|
||||
<i class="icon-ok" style="color: green"></i>
|
||||
|
||||
RainLoop is up to date.
|
||||
<span data-i18n="TAB_ABOUT/HINT_IS_UP_TO_DATE"></span>
|
||||
</div>
|
||||
<div data-bind="visible: 'updating' === statusType()">
|
||||
<i class="icon-spinner animated"></i>
|
||||
|
||||
Updating…
|
||||
<span data-i18n="TAB_ABOUT/LABEL_UPDATING"></span>…
|
||||
</div>
|
||||
<div data-bind="visible: 'checking' === statusType()">
|
||||
<i class="icon-spinner animated"></i>
|
||||
|
||||
Checking for updates…
|
||||
<span data-i18n="TAB_ABOUT/LABEL_CHECKING"></span>…
|
||||
</div>
|
||||
</h5>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,8 @@
|
|||
<div class="b-admin-branding">
|
||||
<div class="form-horizontal">
|
||||
<div class="legend">
|
||||
Branding
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_BRANDING/LEGEND_BRANDING"></div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Page Title
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_PAGE_TITLE"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -19,9 +15,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Loading Description
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_LOADING_DESCRIPTION"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -36,13 +30,9 @@
|
|||
</div>
|
||||
<br />
|
||||
<div class="form-horizontal" data-bind="css: {'disabled-form': !capa()}">
|
||||
<div class="legend">
|
||||
Login
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_BRANDING/LEGEND_LOGIN"></div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Logo
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_LOGIN_LOGO"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -57,9 +47,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Description
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_LOGIN_DESCRIPTION"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -73,9 +61,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Background
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_LOGIN_BACKGROUND"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -90,9 +76,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Custom CSS
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_LOGIN_CUSTOM_CSS"></label>
|
||||
<div class="controls">
|
||||
<div class="custom-css-wrapper" data-bind="component: {
|
||||
name: 'TextArea',
|
||||
|
|
@ -112,20 +96,16 @@
|
|||
name: 'Checkbox',
|
||||
params: {
|
||||
enable: capa,
|
||||
label: 'Show "Powered by RainLoop" link',
|
||||
label: 'TAB_BRANDING/LABEL_LOGIN_SHOW_POWERED_LINK',
|
||||
value: loginPowered
|
||||
}
|
||||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="legend">
|
||||
User
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_BRANDING/LEGEND_USER"></div>
|
||||
<!--
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Logo
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_USER_LOGO"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -141,9 +121,7 @@
|
|||
</div>
|
||||
-->
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Custom CSS
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_USER_CUSTOM_CSS"></label>
|
||||
<div class="controls">
|
||||
<div class="custom-css-wrapper" data-bind="component: {
|
||||
name: 'TextArea',
|
||||
|
|
@ -158,9 +136,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="row" data-bind="visible: !capa()">
|
||||
<div class="alert span8" style="margin-top: 10px;">
|
||||
This functionality is available for <strong><a href="#/licensing">Premium</a></strong> subscribers.
|
||||
</div>
|
||||
<div class="alert span8" style="margin-top: 10px;" data-i18n="[html]TAB_BRANDING/HTML_ALERT_PREMIUM"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,38 +1,30 @@
|
|||
<div class="b-admin-general">
|
||||
<div class="row" data-bind="visible: !contactsSupported">
|
||||
<div class="alert span8" style="margin-top: 10px;">
|
||||
<h4>Notice!</h4>
|
||||
<h4 data-i18n="TAB_CONTACTS/ALERT_NOTICE"></h4>
|
||||
<br />
|
||||
Your system doesn't support contacts.
|
||||
<br />
|
||||
You need to install or enable <strong>PDO (SQLite / MySQL / PostgreSQL)</strong> exstenstion on your server.
|
||||
<div data-i18n="[html]TAB_CONTACTS/HTML_ALERT_DOES_NOT_SUPPORTED"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-horizontal" data-bind="visible: contactsSupported">
|
||||
<div class="legend">
|
||||
Contacts
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_CONTACTS/LEGEND_CONTACTS"></div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: enableContacts, label: 'Enable contacts' }
|
||||
params: { value: enableContacts, label: 'TAB_CONTACTS/LABEL_ENABLE_CONTACTS' }
|
||||
}"></div>
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: contactsSync, label: 'Allow contacts sync (with external CardDAV server)' }
|
||||
params: { value: contactsSync, label: 'TAB_CONTACTS/LABEL_ALLOW_SYNC' }
|
||||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-horizontal" data-bind="visible: contactsSupported">
|
||||
<div class="legend">
|
||||
Storage (PDO)
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_CONTACTS/LEGEND_STORAGE"></div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Type
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_CONTACTS/LABEL_STORAGE_TYPE"></label>
|
||||
<div class="controls">
|
||||
<select data-bind="options: contactsTypesOptions, value: mainContactsType,
|
||||
optionsText: 'name', optionsValue: 'id', optionsAfterRender: defautOptionsAfterRender, saveTrigger: contactsTypeTrigger"></select>
|
||||
|
|
@ -42,26 +34,21 @@
|
|||
<br />
|
||||
<div data-bind="visible: 'sqlite' !== contactsType()">
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Dsn
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_CONTACTS/LABEL_STORAGE_DSN"></label>
|
||||
<div class="controls">
|
||||
<input type="text" class="span6" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="value: pdoDsn, saveTrigger: pdoDsnTrigger" />
|
||||
<div data-bind="saveTrigger: pdoDsnTrigger"></div>
|
||||
<blockquote style="margin: 10px 0 0 0">
|
||||
<p class="muted">
|
||||
mysql:host=127.0.0.1;port=3306;dbname=rainloop
|
||||
<br />
|
||||
pgsql:host=127.0.0.1;port=5432;dbname=rainloop
|
||||
mysql:host=127.0.0.1;port=3306;dbname=rainloop<br />
|
||||
pgsql:host=127.0.0.1;port=5432;dbname=rainloop
|
||||
</p>
|
||||
</blockquote>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
User
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_CONTACTS/LABEL_STORAGE_USER"></label>
|
||||
<div class="controls">
|
||||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="value: pdoUser, saveTrigger: pdoUserTrigger" />
|
||||
|
|
@ -69,9 +56,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Password
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_CONTACTS/LABEL_STORAGE_PASSWORD"></label>
|
||||
<div class="controls">
|
||||
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="value: pdoPassword, saveTrigger: pdoPasswordTrigger" />
|
||||
|
|
@ -83,7 +68,7 @@
|
|||
<a class="btn" data-bind="command: testContactsCommand, css: { 'btn-success': testContactsSuccess, 'btn-danger': testContactsError }">
|
||||
<i data-bind="css: {'icon-info': !testing(), 'icon-spinner animated': testing(), 'icon-white': testContactsSuccess() || testContactsError() }"></i>
|
||||
|
||||
Test
|
||||
<span data-i18n="TAB_CONTACTS/BUTTON_TEST"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -92,9 +77,9 @@
|
|||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class="alert alert-null-left-margin span8">
|
||||
<h4>Notice!</h4>
|
||||
<h4 data-i18n="TAB_CONTACTS/ALERT_NOTICE"></h4>
|
||||
<br />
|
||||
Don't use this database type with a large number of active users.
|
||||
<div data-i18n="[html]TAB_CONTACTS/HTML_ALERT_DO_NOT_USE_THIS_DATABASE"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -103,7 +88,7 @@
|
|||
<a class="btn" data-bind="command: testContactsCommand, css: { 'btn-success': testContactsSuccess, 'btn-danger': testContactsError }">
|
||||
<i data-bind="css: {'icon-info': !testing(), 'icon-spinner animated': testing(), 'icon-white': testContactsSuccess() || testContactsError() }"></i>
|
||||
|
||||
Test
|
||||
<span data-i18n="TAB_CONTACTS/BUTTON_TEST"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
</td>
|
||||
<td>
|
||||
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: function(oDomain) { $root.deleteDomain(oDomain); }">
|
||||
<span>Are you sure?</span>
|
||||
<span data-i18n="TAB_DOMAINS/DELETE_ARE_YOU_SURE"></span>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
|
|
|
|||
|
|
@ -1,21 +1,15 @@
|
|||
<div class="b-admin-domains g-ui-user-select-none">
|
||||
<div class="legend">
|
||||
Domains
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_DOMAINS/LEGEND_DOMAINS"></div>
|
||||
<div>
|
||||
<a class="btn" data-bind="click: createDomain">
|
||||
<i class="icon-plus"></i>
|
||||
|
||||
Add Domain
|
||||
<span data-i18n="TAB_DOMAINS/BUTTON_ADD_DOMAIN"></span>
|
||||
</a>
|
||||
<br />
|
||||
<br />
|
||||
<blockquote>
|
||||
<p class="muted">
|
||||
List of domains webmail is allowed to access.
|
||||
<br />
|
||||
Click on the name to configure the domain.
|
||||
</p>
|
||||
<p class="muted" data-i18n="[html]TAB_DOMAINS/HTML_DOMAINS_HELPER"></p>
|
||||
</blockquote>
|
||||
<table class="table table-hover b-admin-domains-list-table" data-bind="i18nUpdate: domains">
|
||||
<colgroup>
|
||||
|
|
|
|||
|
|
@ -1,22 +1,15 @@
|
|||
<div class="b-admin-general">
|
||||
<div class="row" data-bind="visible: weakPassword">
|
||||
<div class="alert alert-error span8" style="margin-top: 10px;">
|
||||
<h4>Warning!</h4>
|
||||
<h4 data-i18n="TAB_GENERAL/ALERT_WARNING"></h4>
|
||||
<br />
|
||||
You are using the default admin password.
|
||||
<br />
|
||||
For security reasons please <strong><a href="#/security">change</a></strong>
|
||||
password to something else now.
|
||||
<div data-i18n="[html]TAB_GENERAL/HTML_ALERT_WEAK_PASSWORD"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-horizontal">
|
||||
<div class="legend">
|
||||
Interface
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Language
|
||||
</label>
|
||||
<div class="legend i18n i18n-animation" data-i18n="TAB_GENERAL/LEGEND_INTERFACE"></div>
|
||||
<div class="control-group" style="margin-bottom: 10px;">
|
||||
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_LANGUAGE"></label>
|
||||
<div class="controls">
|
||||
<div class="flag-selector">
|
||||
<span class="flag-wrapper">
|
||||
|
|
@ -32,9 +25,23 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Theme
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_LANGUAGE_ADMIN"></label>
|
||||
<div class="controls">
|
||||
<div class="flag-selector">
|
||||
<span class="flag-wrapper">
|
||||
<span data-bind="css: 'flag flag-' + languageAdmin()" style=""></span>
|
||||
</span>
|
||||
<span class="flag-name" data-bind="text: languageAdminFullName, click: selectLanguageAdmin"></span>
|
||||
|
||||
<div data-bind="component: {
|
||||
name: 'SaveTrigger',
|
||||
params: { value: languageAdminTrigger }
|
||||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_THEME"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Select',
|
||||
|
|
@ -54,21 +61,21 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Allow language selection on settings screen',
|
||||
label: 'TAB_GENERAL/LABEL_ALLOW_LANGUAGES_ON_SETTINGS',
|
||||
value: allowLanguagesOnSettings
|
||||
}
|
||||
}"></div>
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Allow theme selection on settings screen',
|
||||
label: 'TAB_GENERAL/LABEL_ALLOW_THEMES_ON_SETTINGS',
|
||||
value: capaThemes
|
||||
}
|
||||
}"></div>
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Allow background selection on settings screen',
|
||||
label: 'TAB_GENERAL/LABEL_ALLOW_BACKGROUND_ON_SETTINGS',
|
||||
value: capaUserBackground
|
||||
}
|
||||
}"></div>
|
||||
|
|
@ -79,7 +86,7 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Show thumbnails (attachments)',
|
||||
label: 'TAB_GENERAL/LABEL_SHOW_THUMBNAILS',
|
||||
value: capaAttachmentThumbnails,
|
||||
inline: false
|
||||
}
|
||||
|
|
@ -87,7 +94,7 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Allow Gravatar',
|
||||
label: 'TAB_GENERAL/LABEL_ALLOW_GRAVATAR',
|
||||
value: capaGravatar,
|
||||
inline: true
|
||||
}
|
||||
|
|
@ -95,14 +102,9 @@
|
|||
(<a class="g-ui-link" href="http://en.gravatar.com/" target="_blank">http://en.gravatar.com/</a>)
|
||||
</div>
|
||||
</div>
|
||||
<div class="legend">
|
||||
Main
|
||||
</div>
|
||||
<div class="legend i18n i18n-animation" data-i18n="TAB_GENERAL/LEGEND_MAIN"></div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Attachment
|
||||
size limit
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_ATTACHMENT_SIZE_LIMIT"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -132,7 +134,7 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Allow additional accounts',
|
||||
label: 'TAB_GENERAL/LABEL_ALLOW_ADDITIONAL_ACCOUNTS',
|
||||
value: capaAdditionalAccounts
|
||||
}
|
||||
}"></div>
|
||||
|
|
@ -144,7 +146,7 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Allow templates',
|
||||
label: 'TAB_GENERAL/LABEL_ALLOW_TEMPLATES',
|
||||
value: capaTemplates
|
||||
}
|
||||
}"></div>
|
||||
|
|
|
|||
|
|
@ -1,24 +1,21 @@
|
|||
<div class="b-admin-licensing" >
|
||||
<div class="row">
|
||||
<div class="alert alert-info span8" style="margin-top: 10px;">
|
||||
RainLoop Webmail is licensed under <strong>Creative Commons
|
||||
<span data-i18n="[html]TAB_LICENSING/HTML_ALERT_TOP_1"></span>
|
||||
<br />
|
||||
Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)</strong> license.
|
||||
<b>Creative Commons Attribution-NonCommercial-ShareAlike 3.0 (CC BY-NC-SA)</b>.
|
||||
<br />
|
||||
<br />
|
||||
You are <strong>free</strong> to use it for your <strong>personal</strong> projects.
|
||||
<span data-i18n="[html]TAB_LICENSING/HTML_ALERT_TOP_2"></span>
|
||||
<br />
|
||||
<br />
|
||||
Commercial use (with additional features) of <strong>RainLoop Webmail</strong> requires getting a
|
||||
<a href="http://rainloop.net/purchase/" target="_blank">subscription</a>.
|
||||
<span data-i18n="[html]TAB_LICENSING/HTML_ALERT_TOP_3"></span>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<div class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Your domain
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_LICENSING/LABEL_YOUR_DOMAIN"></label>
|
||||
<div class="controls">
|
||||
<span class="help-inline" style="padding-top: 5px;">
|
||||
<strong data-bind="text: adminDomain"></strong>
|
||||
|
|
@ -26,50 +23,40 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="visible: !subscriptionEnabled()">
|
||||
<label class="control-label" style="padding-top: 20px">
|
||||
Version
|
||||
</label>
|
||||
<label class="control-label" style="padding-top: 14px" data-i18n="TAB_LICENSING/LABEL_VERSION"></label>
|
||||
<div class="controls">
|
||||
<div class="alert alert-block span6" style="margin-left: 0">
|
||||
<h4>
|
||||
Basic
|
||||
<span data-bind="visible: licenseIsUnlim()"> (Unlim)</span>
|
||||
</h4>
|
||||
<h4 data-i18n="TAB_LICENSING/TYPE_BASIC"></h4>
|
||||
<br />
|
||||
<p>
|
||||
This domain can't be licensed.
|
||||
</p>
|
||||
<p data-i18n="TAB_LICENSING/TYPE_BASIC_HINT_2"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="visible: subscriptionEnabled">
|
||||
<label class="control-label" style="padding-top: 20px">
|
||||
Version
|
||||
</label>
|
||||
<label class="control-label" style="padding-top: 20px" data-i18n="TAB_LICENSING/LABEL_VERSION"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="visible: licensingProcess()" style="padding-top: 20px">
|
||||
<i class="icon-spinner animated"></i>
|
||||
|
||||
Checking…
|
||||
<span data-i18n="TAB_LICENSING/LABEL_CHECKING"></span>…
|
||||
</div>
|
||||
<div data-bind="visible: !licensingProcess()">
|
||||
<div class="alert alert-block span6" style="margin-left: 0; padding-top: 20px" data-bind="visible: !licensing()">
|
||||
<h4>
|
||||
Basic
|
||||
</h4>
|
||||
<h4 data-i18n="TAB_LICENSING/TYPE_BASIC"></h4>
|
||||
<br />
|
||||
<p>
|
||||
This domain isn't licensed for commercial use (with additional features).
|
||||
</p>
|
||||
<p data-i18n="TAB_LICENSING/TYPE_BASIC_HINT"></p>
|
||||
</div>
|
||||
<div data-bind="visible: licensing()">
|
||||
<div class="alert alert-success span6" style="margin-left: 0; margin-top: 10px; padding-top: 20px" data-bind="visible: licenseValid() && '' === licenseError()">
|
||||
<h4>
|
||||
Premium
|
||||
<span data-bind="visible: licenseIsUnlim()">(Lifetime)</span>
|
||||
<snan data-i18n="TAB_LICENSING/TYPE_PREMIUM"></snan>
|
||||
<span data-bind="visible: licenseIsUnlim()">
|
||||
|
||||
(<snan data-i18n="TAB_LICENSING/TYPE_PREMIUM_LIFETIME"></snan>)
|
||||
</span>
|
||||
</h4>
|
||||
<p data-bind="visible: 0 < licenseExpired()" style="padding-top: 10px">
|
||||
<b>Subscription expires:</b>
|
||||
<b data-i18n="TAB_LICENSING/LABEL_SUB_EXPIRES"></b>
|
||||
|
||||
<span data-bind="text: licenseExpiredMomentValue()"></span>
|
||||
</p>
|
||||
|
|
@ -84,19 +71,19 @@
|
|||
<a class="btn" data-bind="click: showActivationForm">
|
||||
<i class="icon-happy-smiley"></i>
|
||||
|
||||
Activate Subscription Key for this domain
|
||||
<span data-i18n="TAB_LICENSING/BUTTON_ACTIVATE"></span>
|
||||
</a>
|
||||
|
||||
<a class="btn" href="http://rainloop.net/purchase/" target="_black">
|
||||
<i class="icon-purchase"></i>
|
||||
|
||||
Purchase
|
||||
<span data-i18n="TAB_LICENSING/BUTTON_PURCHASE"></span>
|
||||
</a>
|
||||
|
||||
<a class="btn" data-bind="click: showTrialForm, visible: !licensing()">
|
||||
<i class="icon-eye"></i>
|
||||
|
||||
Trial
|
||||
<span data-i18n="TAB_LICENSING/BUTTON_TRIAL"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,8 @@
|
|||
<div class="b-admin-general">
|
||||
<div class="form-horizontal">
|
||||
<div class="legend">
|
||||
Login Screen
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_LOGIN/LEGEND_LOGIN_SCREEN"></div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Default Domain
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_LOGIN/LABEL_DEFAULT_DOMAIN"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -22,16 +18,16 @@
|
|||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: determineUserDomain, label: 'Try to determine user domain' }
|
||||
params: { value: determineUserDomain, label: 'TAB_LOGIN/LABEL_DETERMINE_USER_DOMAIN' }
|
||||
}"></div>
|
||||
<br />
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: allowLanguagesOnLogin, label: 'Allow language selection on login screen' }
|
||||
params: { value: allowLanguagesOnLogin, label: 'TAB_LOGIN/LABEL_ALLOW_LANGUAGES_ON_LOGIN' }
|
||||
}"></div>
|
||||
<div data-bind="visible: allowLanguagesOnLogin, component: {
|
||||
name: 'Checkbox',
|
||||
params: { enable: allowLanguagesOnLogin, value: determineUserLanguage, label: 'Try to determine user language' }
|
||||
params: { enable: allowLanguagesOnLogin, value: determineUserLanguage, label: 'TAB_LOGIN/LABEL_DETERMINE_USER_LANGUAGE' }
|
||||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
<div class="b-admin-packages">
|
||||
|
||||
<div class="alert" style="margin-top: 10px;" data-bind="visible: !packagesReal() && !packages.loading()">
|
||||
Cannot access the repository at the moment.
|
||||
</div>
|
||||
<div class="alert" style="margin-top: 10px;" data-bind="visible: !packagesReal() && !packages.loading()"
|
||||
data-i18n="TAB_PACKAGES/ALERT_CANNOT_ACCESS_REPOSITORY"></div>
|
||||
|
||||
<div class="alert" style="margin-top: 10px;" data-bind="visible: '' !== packagesError()">
|
||||
<button type="button" class="close" data-bind="click: function () { packagesError('') }">×</button>
|
||||
|
|
@ -11,24 +10,21 @@
|
|||
|
||||
<div data-bind="visible: 0 < packagesAvailableForUpdate().length">
|
||||
<div class="legend">
|
||||
Available for Update (<span data-bind="text: packagesAvailableForUpdate().length"></span>)
|
||||
<span data-i18n="TAB_PACKAGES/LEGEND_AVAILABLE_FOR_UPDATE"></span>
|
||||
(<span data-bind="text: packagesAvailableForUpdate().length"></span>)
|
||||
</div>
|
||||
<div data-bind="template: { name: 'AdminSettingsPackagesTable', data: {f: packagesAvailableForUpdate} }"></div>
|
||||
<br />
|
||||
</div>
|
||||
|
||||
<div data-bind="visible: 0 < packagesCurrent().length">
|
||||
<div class="legend">
|
||||
Installed Packages
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_PACKAGES/LEGEND_INSTALLED_PACKAGES"></div>
|
||||
<div data-bind="template: { name: 'AdminSettingsPackagesTable', data: {f: packagesCurrent} }"></div>
|
||||
<br />
|
||||
</div>
|
||||
|
||||
<div data-bind="visible: 0 < packagesAvailableForInstallation().length">
|
||||
<div class="legend">
|
||||
Available for Installation
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_PACKAGES/LEGEND_AVAILABLE_FOR_INSTALLATION"></div>
|
||||
<div data-bind="template: { name: 'AdminSettingsPackagesTable', data: {f: packagesAvailableForInstallation} }"></div>
|
||||
<br />
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,6 @@
|
|||
</td>
|
||||
<td class="package-version-parent">
|
||||
<span class="package-version" data-bind="text: version"></span>
|
||||
<div data-bind="if: release_notes">
|
||||
<nobr>
|
||||
<a data-bind="attr: {href: release_notes}" target="_blank">release notes</a>
|
||||
</nobr>
|
||||
</div>
|
||||
</td>
|
||||
<td class="package-release-parent">
|
||||
<span class="package-release" data-bind="text: release"></span>
|
||||
|
|
|
|||
|
|
@ -7,30 +7,23 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="legend">
|
||||
Plugins
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_PLUGINS/LEGEND_PLUGINS"></div>
|
||||
|
||||
<div>
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: enabledPlugins, label: 'Enable plugins' }
|
||||
params: { value: enabledPlugins, label: 'TAB_PLUGINS/LABEL_ENABLE_PLUGINS' }
|
||||
}"></div>
|
||||
</div>
|
||||
<br />
|
||||
<div class="row">
|
||||
<div class="alert alert-info span8" data-bind="visible: 0 === plugins().length">
|
||||
No plugins have yet been installed.
|
||||
<br />
|
||||
<br />
|
||||
<strong><a href="#/packages">Click here to install new!</a></strong>
|
||||
<span data-i18n="TAB_PLUGINS/ALERT_NO_PLUGINS"></span>
|
||||
<br /><br />
|
||||
<strong><a href="#/packages" data-i18n="TAB_PLUGINS/LINK_INSTALL_NEW"></a></strong>
|
||||
</div>
|
||||
<div class="span8" data-bind="visible: 0 < plugins().length">
|
||||
<blockquote>
|
||||
<p class="muted">
|
||||
Click on the name to configure the plugin.
|
||||
</p>
|
||||
</blockquote>
|
||||
<blockquote><p class="muted" data-i18n="TAB_PLUGINS/HINT_CLICK_NAME"></p></blockquote>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
|
|
|||
|
|
@ -1,40 +1,36 @@
|
|||
<div class="adminSecurity g-ui-user-select-none">
|
||||
<div class="form-horizontal">
|
||||
<div class="legend">
|
||||
Security
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_SECURITY/LEGEND_SECURITY"></div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: capaTwoFactorAuth, label: 'Allow 2-Step Verification' }
|
||||
params: { value: capaTwoFactorAuth, label: 'TAB_SECURITY/LABEL_ALLOW_TWO_STEP' }
|
||||
}"></div>
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: useLocalProxyForExternalImages, label: 'Use local proxy for external images' }
|
||||
params: { value: useLocalProxyForExternalImages, label: 'TAB_SECURITY/LABEL_USE_IMAGE_PROXY' }
|
||||
}"></div>
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: capaOpenPGP, label: 'Allow OpenPGP', inline: true }
|
||||
params: { value: capaOpenPGP, label: 'TAB_SECURITY/LABEL_ALLOW_OPEN_PGP', inline: true }
|
||||
}"></div>
|
||||
|
||||
<span style="color:red">(beta)</span>
|
||||
<span style="color:red">(<span data-i18n="HINTS/BETA"></span>)</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<a href="#" target="_blank" class="g-ui-link" data-bind="link: phpInfoLink()">Show PHP information</a>
|
||||
<a href="#" target="_blank" class="g-ui-link" data-bind="link: phpInfoLink()"
|
||||
data-i18n="TAB_SECURITY/LABEL_SHOW_PHP_INFO"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<div class="form-horizontal">
|
||||
<div class="legend">
|
||||
Admin Panel Access Credentials
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_SECURITY/LEGEND_ADMIN_PANEL_ACCESS_CREDENTIALS"></div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Current password
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_SECURITY/LABEL_CURRENT_PASSWORD"></label>
|
||||
<div class="controls">
|
||||
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: adminPassword" />
|
||||
|
|
@ -42,27 +38,21 @@
|
|||
</div>
|
||||
<br />
|
||||
<div class="control-group" data-bind="css: {'error': adminLoginError}">
|
||||
<label class="control-label">
|
||||
New login
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_SECURITY/LABEL_NEW_LOGIN"></label>
|
||||
<div class="controls">
|
||||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: adminLogin" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="css: {'error': adminPasswordNewError}">
|
||||
<label class="control-label">
|
||||
New password
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_SECURITY/LABEL_NEW_PASSWORD"></label>
|
||||
<div class="controls">
|
||||
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: adminPasswordNew" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="css: {'error': adminPasswordNewError}">
|
||||
<label class="control-label">
|
||||
Repeat
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_SECURITY/LABEL_REPEAT_PASSWORD"></label>
|
||||
<div class="controls">
|
||||
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: adminPasswordNew2" />
|
||||
|
|
@ -73,37 +63,34 @@
|
|||
<a class="btn" data-bind="command: saveNewAdminPasswordCommand, css: { 'btn-success': adminPasswordUpdateSuccess, 'btn-danger': adminPasswordUpdateError }">
|
||||
<i class="icon-key" data-bind="css: {'icon-white': adminPasswordUpdateSuccess() || adminPasswordUpdateError() }"></i>
|
||||
|
||||
Update Password
|
||||
<span data-i18n="TAB_SECURITY/BUTTON_UPDATE_PASSWORD"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-horizontal">
|
||||
<div class="legend">
|
||||
SSL
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_SECURITY/LEGEND_SSL"></div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
value: verifySslCertificate,
|
||||
label: 'Require verification of SSL certificate used (IMAP/SMTP)',
|
||||
label: 'TAB_SECURITY/LABEL_REQUIRE_VERIFICATION',
|
||||
inline: true
|
||||
}
|
||||
}"></div>
|
||||
|
||||
<span style="color:red">(unstable)</span>
|
||||
<span style="color:red">(<span data-i18n="HINTS/UNSTABLE"></span>)</span>
|
||||
<br />
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
enable: verifySslCertificate,
|
||||
value: allowSelfSigned,
|
||||
label: 'Allow self signed certificates'
|
||||
label: 'TAB_SECURITY/LABEL_ALLOW_SELF_SIGNED'
|
||||
}
|
||||
}"></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,19 +1,18 @@
|
|||
<div class="adminSecurity">
|
||||
<div class="row">
|
||||
<div class="alert alert-info span8" style="margin-top: 10px;">
|
||||
Detailed information on social integration is found at
|
||||
<span data-i18n="TAB_INTEGRATIONS/TOP_ALERT"></span>
|
||||
|
||||
<a href="http://rainloop.net/docs/social/" target="_blank">http://rainloop.net/docs/social/</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-horizontal g-ui-user-select-none">
|
||||
<div class="legend">
|
||||
Google
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_INTEGRATIONS/LEGEND_GOOGLE"></div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: googleEnable, label: 'Enable Google Integration' }
|
||||
params: { value: googleEnable, label: 'TAB_INTEGRATIONS/LABEL_ENABLE_GOOGLE' }
|
||||
}"></div>
|
||||
<div data-bind="visible: googleEnable">
|
||||
<br />
|
||||
|
|
@ -22,21 +21,21 @@
|
|||
name: 'Checkbox',
|
||||
params: {
|
||||
value: googleEnableAuth,
|
||||
label: 'Authentication'
|
||||
label: 'TAB_INTEGRATIONS/LABEL_GOOGLE_AUTH'
|
||||
}
|
||||
}"></div>
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
value: googleEnableDrive,
|
||||
label: 'Google Drive Integration (Compose view)'
|
||||
label: 'TAB_INTEGRATIONS/LABEL_GOOGLE_DRIVE'
|
||||
}
|
||||
}"></div>
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
value: googleEnablePreview,
|
||||
label: 'Google Viewer Integration (Preview for Microsoft Word, Excel and PowerPoint files)'
|
||||
label: 'TAB_INTEGRATIONS/LABEL_GOOGLE_PREVIEW'
|
||||
}
|
||||
}"></div>
|
||||
</blockquote>
|
||||
|
|
@ -44,14 +43,11 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Client ID
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_GOOGLE_CLIENT_ID"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
params: {
|
||||
name: 'xx',
|
||||
value: googleClientID,
|
||||
trigger: googleTrigger1,
|
||||
enable: googleEnableRequireClientSettings,
|
||||
|
|
@ -61,9 +57,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Client Secret
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_GOOGLE_CLIENT_SECRET"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -78,9 +72,7 @@
|
|||
</div>
|
||||
<br />
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Api Key
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_GOOGLE_API_KEY"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -92,29 +84,25 @@
|
|||
}
|
||||
}"></div>
|
||||
<blockquote style="margin-top: 10px; margin-bottom: 0">
|
||||
<p class="muted">
|
||||
Required for Google Drive File Picker
|
||||
</p>
|
||||
<p class="muted" data-i18n="TAB_INTEGRATIONS/HINT_GOOGLE_API_KEY"></p>
|
||||
</blockquote>
|
||||
</div>
|
||||
</div>
|
||||
<div class="legend">
|
||||
Facebook
|
||||
<span style="color: #ccc; font-size: 14px;" data-bind="visible: !facebookSupported()">(requires PHP 5.4 or greater)</span>
|
||||
<span data-i18n="TAB_INTEGRATIONS/LEGEND_FACEBOOK"></span>
|
||||
<span style="color: #ccc; font-size: 14px;" data-bind="visible: !facebookSupported()">(<span data-i18n="HINTS/REQUIRES_PHP_54"></span>)</span>
|
||||
</div>
|
||||
<div data-bind="if: facebookSupported">
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: facebookEnable, label: 'Enable Facebook Integration (Authentication)' }
|
||||
params: { value: facebookEnable, label: 'TAB_INTEGRATIONS/LABEL_ENABLE_FACEBOOK' }
|
||||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
App ID
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_FACEBOOK_APP_ID"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -128,9 +116,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
App Secret
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_FACEBOOK_APP_SECRET"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -144,21 +130,17 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="legend">
|
||||
Twitter
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_INTEGRATIONS/LEGEND_TWITTER"></div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: twitterEnable, label: 'Enable Twitter Integration (Authentication)' }
|
||||
params: { value: twitterEnable, label: 'TAB_INTEGRATIONS/LABEL_ENABLE_TWITTER' }
|
||||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Consumer Key
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_TWITTER_CONSUMER_KEY"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -172,9 +154,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Consumer Secret
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_TWITTER_CONSUMER_SECRET"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
@ -187,21 +167,17 @@
|
|||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="legend">
|
||||
Dropbox
|
||||
</div>
|
||||
<div class="legend" data-i18n="TAB_INTEGRATIONS/LEGEND_DROPBOX"></div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: { value: dropboxEnable, label: 'Enable Dropbox Integration (Compose view)' }
|
||||
params: { value: dropboxEnable, label: 'TAB_INTEGRATIONS/LABEL_ENABLE_DROPBOX' }
|
||||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Api Key
|
||||
</label>
|
||||
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_DROPBOX_API_KEY"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="component: {
|
||||
name: 'Input',
|
||||
|
|
|
|||
|
|
@ -4,24 +4,20 @@
|
|||
<div class="modal-header">
|
||||
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
|
||||
<h3>
|
||||
<span data-bind="visible: !activateProcess()">Activate Subscription Key?</span>
|
||||
<span data-bind="visible: activateProcess">Activation...</span>
|
||||
<span data-bind="visible: !activateProcess()" data-i18n="POPUPS_ACTIVATE/TITLE_ACTIVATE"></span>
|
||||
<span data-bind="visible: activateProcess" data-i18n="POPUPS_ACTIVATE/TITLE_ACTIVATION"></span>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label">
|
||||
Domain
|
||||
</label>
|
||||
<label class="control-label" data-i18n="POPUPS_ACTIVATE/LABEL_DOMAIN"></label>
|
||||
<div class="controls">
|
||||
<h4 class="help-inline" data-bind="text: domain" style="margin-top: 5px;"></h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="css: {'error': '' !== activateText() && activateText.isError(), 'success': '' !== activateText() && !activateText.isError() }">
|
||||
<label class="control-label">
|
||||
Subscription Key
|
||||
</label>
|
||||
<label class="control-label" data-i18n="POPUPS_ACTIVATE/LABEL_SUB_KEY"></label>
|
||||
<div class="controls ">
|
||||
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="visible: !activateProcess() && !activationSuccessed(), textInput: key, hasFocus: key.focus"></input>
|
||||
|
|
@ -33,27 +29,20 @@
|
|||
</div>
|
||||
<br />
|
||||
<div class="alert">
|
||||
<p>
|
||||
After activation, premium subscription for <strong data-bind="text: domain"></strong> will be extended.
|
||||
<br />
|
||||
Note that subscription key can be activated for a single domain only.
|
||||
</p>
|
||||
<p>
|
||||
Once started, the process of activation cannot be aborted or cancelled.
|
||||
</p>
|
||||
<p data-bind="html: htmlDescription" style="margin-bottom: 0"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a class="btn buttonActivate" data-bind="visible: !activationSuccessed(), command: activateCommand">
|
||||
<i class="icon-key" data-bind="css: {'icon-key': !activateProcess(), 'icon-spinner animated': activateProcess()}" ></i>
|
||||
|
||||
Activate
|
||||
<span data-i18n="POPUPS_ACTIVATE/BUTTON_ACTIVATE"></span>
|
||||
</a>
|
||||
<span style="color: green" data-bind="visible: activationSuccessed">
|
||||
|
||||
<i class="icon-ok"></i>
|
||||
|
||||
Activated
|
||||
<span data-i18n="POPUPS_ACTIVATE/LABEL_ACTIVATED"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,9 @@
|
|||
<form class="form-horizontal domain-form" action="#/" onsubmit="return false;">
|
||||
<div class="row" data-bind="visible: !edit()" style="margin-bottom: 20px;">
|
||||
<div class="span10">
|
||||
Name <span style="color: #aaa">(wildcard supported)</span>
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_NAME"></span>
|
||||
|
||||
<span style="color: #aaa">(<span data-i18n="POPUPS_DOMAIN/NAME_HELPER"></span>)</span>
|
||||
<br />
|
||||
<input type="text" class="span4" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: name, hasfocus: name.focused" />
|
||||
|
|
@ -21,24 +23,24 @@
|
|||
<div class="span5">
|
||||
<div class="legend imap-header" data-bind="visible: !sieveSettings(), css: { 'testing-done': testingDone, 'testing-error': testingImapError }">
|
||||
<span data-placement="bottom" data-bind="tooltipForTest: testingImapErrorDesc">
|
||||
IMAP
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_IMAP"></span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="legend sieve-header" data-bind="visible: sieveSettings(), css: { 'testing-done': testingDone, 'testing-error': testingSieveError }">
|
||||
<span data-placement="bottom" data-bind="tooltipForTest: testingSieveErrorDesc">
|
||||
SIEVE
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_SIEVE"></span>
|
||||
</span>
|
||||
</div>
|
||||
<div data-bind="visible: !sieveSettings()">
|
||||
<div class="row">
|
||||
<div class="span3">
|
||||
Server
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
|
||||
<br />
|
||||
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: imapServer, hasfocus: imapServerFocus" />
|
||||
</div>
|
||||
<div class="span1">
|
||||
Port
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
|
||||
<br />
|
||||
<input type="text" class="span1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: imapPort" />
|
||||
|
|
@ -47,12 +49,12 @@
|
|||
<br />
|
||||
<div class="row">
|
||||
<div class="span4">
|
||||
Secure
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
|
||||
<br />
|
||||
<select class="span2" data-bind="value: imapSecure">
|
||||
<option value="0">None</option>
|
||||
<option value="1">SSL/TLS</option>
|
||||
<option value="2">STARTTLS</option>
|
||||
<option value="0" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_NONE"></option>
|
||||
<option value="1" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_SSL"></option>
|
||||
<option value="2" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_STARTTLS"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -62,7 +64,7 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Use short login',
|
||||
label: 'POPUPS_DOMAIN/LABEL_USE_SHORT_LOGIN',
|
||||
value: imapShortLogin,
|
||||
inline: true
|
||||
}
|
||||
|
|
@ -78,9 +80,9 @@
|
|||
<span data-bind="command: sieveCommand">
|
||||
<i class="icon-filter"></i>
|
||||
|
||||
<a href="#" class="g-ui-link">Sieve configuration</a>
|
||||
<a href="#" class="g-ui-link" data-i18n="POPUPS_DOMAIN/BUTTON_SIEVE_CONFIGURATION"></a>
|
||||
|
||||
<span style="color:red">(beta)</span>
|
||||
<span style="color:red">(<span data-i18n="HINTS/BETA"></span>)</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -91,7 +93,7 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Allow sieve scripts',
|
||||
label: 'POPUPS_DOMAIN/LABEL_ALLOW_SIEVE_SCRIPTS',
|
||||
value: useSieve
|
||||
}
|
||||
}"></div>
|
||||
|
|
@ -103,7 +105,7 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Allow custom user script',
|
||||
label: 'POPUPS_DOMAIN/LABEL_ALLOW_USER_SCRIPT',
|
||||
value: sieveAllowRaw
|
||||
}
|
||||
}"></div>
|
||||
|
|
@ -112,13 +114,13 @@
|
|||
<br />
|
||||
<div class="row">
|
||||
<div class="span3">
|
||||
Server
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
|
||||
<br />
|
||||
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: sieveServer, hasfocus: sieveServerFocus" />
|
||||
</div>
|
||||
<div class="span1">
|
||||
Port
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
|
||||
<br />
|
||||
<input type="text" class="span1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: sievePort" />
|
||||
|
|
@ -127,12 +129,12 @@
|
|||
<br />
|
||||
<div class="row">
|
||||
<div class="span4">
|
||||
Secure
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
|
||||
<br />
|
||||
<select class="span2" data-bind="value: sieveSecure">
|
||||
<option value="0">None</option>
|
||||
<option value="1">SSL/TLS</option>
|
||||
<option value="2">STARTTLS</option>
|
||||
<option value="0" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_NONE"></option>
|
||||
<option value="1" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_SSL"></option>
|
||||
<option value="2" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_STARTTLS"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -143,7 +145,7 @@
|
|||
<span data-bind="command: sieveCommand">
|
||||
<i class="icon-left"></i>
|
||||
|
||||
<a href="#" class="g-ui-link">Back to IMAP settings</a>
|
||||
<a href="#" class="g-ui-link" data-i18n="POPUPS_DOMAIN/BUTTON_BACK_TO_IMAP"></a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -152,19 +154,19 @@
|
|||
<div class="span5">
|
||||
<div class="legend smtp-header" data-bind="css: { 'testing-done': testingDone, 'testing-error': testingSmtpError }">
|
||||
<span data-placement="bottom" data-bind="tooltipForTest: testingSmtpErrorDesc">
|
||||
SMTP
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_SMTP"></span>
|
||||
</span>
|
||||
</div>
|
||||
<div data-bind="visible: !smtpPhpMail()">
|
||||
<div class="row">
|
||||
<div class="span3">
|
||||
Server
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
|
||||
<br />
|
||||
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: smtpServer, hasfocus: smtpServerFocus" />
|
||||
</div>
|
||||
<div class="span1">
|
||||
Port
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
|
||||
<br />
|
||||
<input type="text" class="span1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="textInput: smtpPort" />
|
||||
|
|
@ -173,12 +175,12 @@
|
|||
<br />
|
||||
<div class="row">
|
||||
<div class="span4">
|
||||
Secure
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
|
||||
<br />
|
||||
<select class="span2" data-bind="value: smtpSecure">
|
||||
<option value="0">None</option>
|
||||
<option value="1">SSL/TLS</option>
|
||||
<option value="2">STARTTLS</option>
|
||||
<option value="0" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_NONE"></option>
|
||||
<option value="1" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_SSL"></option>
|
||||
<option value="2" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_STARTTLS"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -188,7 +190,7 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Use short login',
|
||||
label: 'POPUPS_DOMAIN/LABEL_USE_SHORT_LOGIN',
|
||||
value: smtpShortLogin,
|
||||
inline: true
|
||||
}
|
||||
|
|
@ -199,7 +201,7 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Use authentication',
|
||||
label: 'POPUPS_DOMAIN/LABEL_USE_AUTH',
|
||||
value: smtpAuth
|
||||
}
|
||||
}"></div>
|
||||
|
|
@ -212,24 +214,19 @@
|
|||
<div data-bind="component: {
|
||||
name: 'Checkbox',
|
||||
params: {
|
||||
label: 'Use php mail() function',
|
||||
label: 'POPUPS_DOMAIN/LABEL_USE_PHP_MAIL',
|
||||
value: smtpPhpMail,
|
||||
inline: true
|
||||
}
|
||||
}"></div>
|
||||
|
||||
<span style="color: red">(beta)</span>
|
||||
<span style="color:red">(<span data-i18n="HINTS/BETA"></span>)</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span10" data-bind="visible: 'white-list' === page()">
|
||||
<div class="legend white-list-header">
|
||||
White List
|
||||
</div>
|
||||
<div class="alert alert-block span6 alert-null-left-margin" style="width: 562px;">
|
||||
List of domain users webmail is allowed to access.
|
||||
Use a space as delimiter.
|
||||
</div>
|
||||
<div class="legend white-list-header" data-i18n="POPUPS_DOMAIN/LABEL_WHITE_LIST"></div>
|
||||
<div class="alert alert-block span6 alert-null-left-margin" style="width: 562px;" data-i18n="POPUPS_DOMAIN/WHITE_LIST_ALERT"></div>
|
||||
<textarea class="input-xxlarge" style="width: 600px" rows="8" data-bind="value: whiteList" tabindex="-1"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -241,28 +238,29 @@
|
|||
'btn-danger': testingDone() && (testingImapError() || testingSmtpError()) }">
|
||||
<i data-bind="css: {'icon-info': !testing(), 'icon-spinner animated': testing(), 'icon-white': testingDone()}"></i>
|
||||
|
||||
Test
|
||||
<span data-i18n="POPUPS_DOMAIN/BUTTON_TEST"></span>
|
||||
</a>
|
||||
<a class="btn button-white-list pull-left" data-bind="command: whiteListCommand, visible: 'main' === page()">
|
||||
<i class="icon-users"></i>
|
||||
|
||||
White List
|
||||
<span data-i18n="POPUPS_DOMAIN/BUTTON_WHITE_LIST"></span>
|
||||
</a>
|
||||
<a class="btn button-white-list pull-left" data-bind="command: backCommand, visible: 'main' !== page()">
|
||||
<i class="icon-left"></i>
|
||||
|
||||
Back
|
||||
<span data-i18n="POPUPS_DOMAIN/BUTTON_BACK"></span>
|
||||
</a>
|
||||
<a class="btn buttonClose" data-bind="command: cancelCommand">
|
||||
<i class="icon-remove"></i>
|
||||
|
||||
Close
|
||||
<span data-i18n="POPUPS_DOMAIN/BUTTON_CLOSE"></span>
|
||||
</a>
|
||||
<a class="btn buttonClear" data-bind="command: createOrAddCommand">
|
||||
<i data-bind="css: edit() ? 'icon-ok' : 'icon-plus', visible: !saving()"></i>
|
||||
<i class="icon-spinner animated" data-bind="visible: saving"></i>
|
||||
|
||||
<span data-bind="text: edit() ? 'Update' : 'Add'"></span>
|
||||
<span data-bind="visible: !edit()" data-i18n="POPUPS_DOMAIN/BUTTON_ADD"></span>
|
||||
<span data-bind="visible: edit()" data-i18n="POPUPS_DOMAIN/BUTTON_UPDATE"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -3,13 +3,15 @@
|
|||
<div class="modal-header">
|
||||
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
|
||||
<h4>
|
||||
Plugin "<span data-bind="text: name"></span>"
|
||||
<span data-i18n="POPUPS_PLUGIN/TITLE_PLUGIN"></span>
|
||||
|
||||
"<span data-bind="text: name"></span>"
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal plugin-form" action="#/" onsubmit="return false;">
|
||||
<div class="well" data-bind="visible: !hasConfiguration()">
|
||||
Nothing to configure
|
||||
<span data-i18n="POPUPS_PLUGIN/DESC_NOTHING_TO_CONFIGURE"></span>
|
||||
</div>
|
||||
<div class="alert" data-bind="visible: '' !== saveError()">
|
||||
<button type="button" class="close" data-bind="click: function () { saveError('') }">×</button>
|
||||
|
|
@ -27,12 +29,12 @@
|
|||
<a class="btn buttonClose" data-bind="command: cancelCommand">
|
||||
<i class="icon-remove"></i>
|
||||
|
||||
Close
|
||||
<span data-i18n="POPUPS_PLUGIN/BUTTON_CLOSE"></span>
|
||||
</a>
|
||||
<a class="btn buttonClear" data-bind="command: saveCommand, visible: hasConfiguration">
|
||||
<i class="icon-ok"></i>
|
||||
|
||||
Save
|
||||
<span data-i18n="POPUPS_PLUGIN/BUTTON_SAVE"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue