mirror of https://github.com/keeweb/keeweb.git
backups ui
This commit is contained in:
parent
6436b3807a
commit
57b677dcc7
|
@ -428,7 +428,8 @@ var AppModel = Backbone.Model.extend({
|
|||
name: params.name,
|
||||
storage: params.storage,
|
||||
path: params.path,
|
||||
keyFileName: params.keyFileName
|
||||
keyFileName: params.keyFileName,
|
||||
backup: fileInfo ? fileInfo.get('backup') : null
|
||||
});
|
||||
file.open(params.password, data, params.keyFileData, err => {
|
||||
if (err) {
|
||||
|
@ -582,7 +583,8 @@ var AppModel = Backbone.Model.extend({
|
|||
editState: null,
|
||||
rev: null,
|
||||
syncDate: dt,
|
||||
openDate: dt
|
||||
openDate: dt,
|
||||
backup: file.get('backup')
|
||||
});
|
||||
}
|
||||
file.setSyncProgress();
|
||||
|
|
|
@ -15,7 +15,8 @@ var FileInfoModel = Backbone.Model.extend({
|
|||
openDate: null,
|
||||
keyFileName: null,
|
||||
keyFileHash: null,
|
||||
opts: null
|
||||
opts: null,
|
||||
backup: null
|
||||
},
|
||||
|
||||
initialize: function(data, options) {
|
||||
|
|
|
@ -33,7 +33,8 @@ var FileModel = Backbone.Model.extend({
|
|||
keyChangeForce: -1,
|
||||
syncing: false,
|
||||
syncError: null,
|
||||
syncDate: null
|
||||
syncDate: null,
|
||||
backup: null
|
||||
},
|
||||
|
||||
db: null,
|
||||
|
|
|
@ -396,6 +396,16 @@ var Locale = {
|
|||
setFileEnableTrash: 'Enable trash',
|
||||
setFileHistLen: 'History length, keep last records per entry',
|
||||
setFileHistSize: 'History size, total MB per file',
|
||||
setFileBackups: 'Backups',
|
||||
setFileBackupEnable: 'Backup this file',
|
||||
setFileBackupPath: 'Backup path',
|
||||
setFileBackupTime: 'Make backups',
|
||||
setFileBackupNow: 'Backup now',
|
||||
setFileBackupOnSave: 'Every time I save the file',
|
||||
setFileBackupDaily: 'Daily',
|
||||
setFileBackupWeekly: 'Weekly',
|
||||
setFileBackupMonthly: 'Monthly',
|
||||
setFileBackupManually: 'Manually',
|
||||
setFileAdvanced: 'Advanced',
|
||||
setFileRounds: 'Key encryption rounds',
|
||||
setFileKeyChangeForce: 'Ask to change key after (days)',
|
||||
|
|
|
@ -13,6 +13,8 @@ var Backbone = require('backbone'),
|
|||
kdbxweb = require('kdbxweb'),
|
||||
FileSaver = require('filesaver');
|
||||
|
||||
const DefaultBackupPath = 'Backups/{name}.{date}.bak';
|
||||
|
||||
var SettingsFileView = Backbone.View.extend({
|
||||
template: require('templates/settings/settings-file.hbs'),
|
||||
|
||||
|
@ -31,6 +33,7 @@ var SettingsFileView = Backbone.View.extend({
|
|||
'blur #settings__file-master-pass': 'blurMasterPass',
|
||||
'input #settings__file-name': 'changeName',
|
||||
'input #settings__file-def-user': 'changeDefUser',
|
||||
'change #settings__file-backup-enabled': 'changeBackupsEnabled',
|
||||
'change #settings__file-trash': 'changeTrash',
|
||||
'input #settings__file-hist-len': 'changeHistoryLength',
|
||||
'input #settings__file-hist-size': 'changeHistorySize',
|
||||
|
@ -54,6 +57,7 @@ var SettingsFileView = Backbone.View.extend({
|
|||
}
|
||||
});
|
||||
storageProviders.sort((x, y) => (x.uipos || Infinity) - (y.uipos || Infinity));
|
||||
let backup = this.model.get('backup');
|
||||
this.renderTemplate({
|
||||
cmd: FeatureDetector.actionShortcutSymbol(true),
|
||||
supportFiles: !!Launcher,
|
||||
|
@ -67,6 +71,8 @@ var SettingsFileView = Backbone.View.extend({
|
|||
password: PasswordGenerator.present(this.model.get('passwordLength')),
|
||||
defaultUser: this.model.get('defaultUser'),
|
||||
recycleBinEnabled: this.model.get('recycleBinEnabled'),
|
||||
backupStorage: backup && backup.storage,
|
||||
backupPath: backup && backup.path || DefaultBackupPath.replace('{name}', this.model.get('name')),
|
||||
historyMaxItems: this.model.get('historyMaxItems'),
|
||||
historyMaxSize: Math.round(this.model.get('historyMaxSize') / 1024 / 1024),
|
||||
keyEncryptionRounds: this.model.get('keyEncryptionRounds'),
|
||||
|
@ -351,6 +357,11 @@ var SettingsFileView = Backbone.View.extend({
|
|||
this.model.setDefaultUser(value);
|
||||
},
|
||||
|
||||
changeBackupsEnabled: function(e) {
|
||||
let enabled = e.target.checked;
|
||||
this.$el.find('.settings__file-backups').toggleClass('hide', !enabled);
|
||||
},
|
||||
|
||||
changeTrash: function(e) {
|
||||
this.model.setRecycleBinEnabled(e.target.checked);
|
||||
},
|
||||
|
|
|
@ -113,7 +113,7 @@ input[type="file"] {
|
|||
}
|
||||
|
||||
select {
|
||||
margin-bottom: $base-spacing;
|
||||
margin-bottom: $small-spacing;
|
||||
max-width: 100%;
|
||||
-webkit-appearance:none;
|
||||
-moz-appearance:none;
|
||||
|
|
|
@ -60,6 +60,32 @@
|
|||
<label for="settings__file-def-user">{{res 'setFileDefUser'}}:</label>
|
||||
<input type="text" class="settings__input input-base" id="settings__file-def-user" value="{{defaultUser}}" />
|
||||
|
||||
<h2>{{res 'setFileBackups'}}</h2>
|
||||
<div>
|
||||
<input type="checkbox" class="settings__input input-base" id="settings__file-backup-enabled" {{#if backupStorage}}checked{{/if}} />
|
||||
<label for="settings__file-backup-enabled">{{res 'setFileBackupEnable'}}</label>
|
||||
</div>
|
||||
<div class="settings__file-backups {{#unless backupStorage}}hide{{/unless}}">
|
||||
<select class="settings__select input-base" id="settings__file-backup-storage">
|
||||
{{#if supportFiles}}<option value="file" {{#ifeq backupStorage 'file'}}selected{{/ifeq}}>{{Res 'file'}}</option>{{/if}}
|
||||
{{#each storageProviders as |prv|}}
|
||||
<option value="{{prv.name}}" {{#ifeq backupStorage prv.name}}selected{{/ifeq}}>{{res prv.name}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
<label for="settings__file-backup-path">{{res 'setFileBackupPath'}}:</label>
|
||||
<input type="text" class="settings__input input-base" id="settings__file-backup-path" value="{{backupPath}}"
|
||||
placeholder="{{backupPath}}" />
|
||||
<label for="settings__file-backup-time">{{res 'setFileBackupTime'}}:</label>
|
||||
<select class="settings__select input-base" id="settings__file-backup-time">
|
||||
<option value="0">{{res 'setFileBackupOnSave'}}</option>
|
||||
<option value="1d">{{res 'setFileBackupDaily'}}</option>
|
||||
<option value="1w">{{res 'setFileBackupWeekly'}}</option>
|
||||
<option value="1m">{{res 'setFileBackupMonthly'}}</option>
|
||||
<option value="-1">{{res 'setFileBackupManually'}}</option>
|
||||
</select>
|
||||
<button class="btn-silent settings__file-button-backup">{{res 'setFileBackupNow'}}</button>
|
||||
</div>
|
||||
|
||||
<h2>{{res 'setFileHistory'}}</h2>
|
||||
<div>
|
||||
<input type="checkbox" class="settings__input input-base" id="settings__file-trash" {{#if recycleBinEnabled}}checked{{/if}} />
|
||||
|
|
Loading…
Reference in New Issue