2015-10-17 23:49:24 +02:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
var Backbone = require('backbone'),
|
|
|
|
OpenFileView = require('./open-file-view'),
|
2015-10-24 21:06:44 +02:00
|
|
|
FileModel = require('../models/file-model'),
|
2015-10-25 10:44:19 +01:00
|
|
|
Launcher = require('../comp/launcher');
|
2015-10-17 23:49:24 +02:00
|
|
|
|
|
|
|
var OpenView = Backbone.View.extend({
|
|
|
|
template: require('templates/open.html'),
|
|
|
|
|
|
|
|
views: null,
|
|
|
|
file: null,
|
|
|
|
|
|
|
|
events: {
|
|
|
|
'dragover': 'dragover',
|
|
|
|
'dragleave': 'dragleave',
|
|
|
|
'drop': 'drop'
|
|
|
|
},
|
|
|
|
|
|
|
|
initialize: function () {
|
|
|
|
this.file = new FileModel();
|
|
|
|
this.views = { openFile: new OpenFileView({ model: this.file }) };
|
|
|
|
this.listenTo(this.file, 'change:open', this.fileOpened);
|
|
|
|
this.listenTo(this.views.openFile, 'select', this.selectFile);
|
|
|
|
this.listenTo(this.views.openFile, 'create', this.createNewFile);
|
|
|
|
this.listenTo(this.views.openFile, 'create-demo', this.createDemoFile);
|
|
|
|
},
|
|
|
|
|
|
|
|
render: function () {
|
|
|
|
if (this.dragTimeout) {
|
|
|
|
clearTimeout(this.dragTimeout);
|
|
|
|
}
|
|
|
|
this.setElement($(this.template(this.model)).appendTo(this.$el));
|
|
|
|
this.views.openFile.setElement(this.$el).render();
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
selectFile: function(e) {
|
|
|
|
this.file.open(e.password, e.fileData, e.keyFileData);
|
|
|
|
},
|
|
|
|
|
|
|
|
createNewFile: function() {
|
|
|
|
var name;
|
|
|
|
for (var i = 0; ; i++) {
|
|
|
|
name = 'New' + (i || '');
|
|
|
|
if (!this.model.files.getByName(name)) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.file.create(name);
|
|
|
|
},
|
|
|
|
|
|
|
|
createDemoFile: function() {
|
|
|
|
if (!this.model.files.getByName('Demo')) {
|
|
|
|
this.file.createDemo();
|
|
|
|
} else {
|
|
|
|
this.trigger('cancel');
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
fileOpened: function(model, open) {
|
|
|
|
if (open) {
|
|
|
|
this.model.addFile(this.file);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
dragover: function(e) {
|
|
|
|
e.preventDefault();
|
|
|
|
if (this.dragTimeout) {
|
|
|
|
clearTimeout(this.dragTimeout);
|
|
|
|
}
|
|
|
|
if (this.model && !this.$el.hasClass('open--drag')) {
|
|
|
|
this.$el.addClass('open--drag');
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
dragleave: function() {
|
|
|
|
if (this.dragTimeout) {
|
|
|
|
clearTimeout(this.dragTimeout);
|
|
|
|
}
|
|
|
|
this.dragTimeout = setTimeout((function() {
|
|
|
|
this.$el.removeClass('open--drag');
|
|
|
|
}).bind(this), 100);
|
|
|
|
},
|
|
|
|
|
|
|
|
drop: function(e) {
|
|
|
|
e.preventDefault();
|
|
|
|
if (this.dragTimeout) {
|
|
|
|
clearTimeout(this.dragTimeout);
|
|
|
|
}
|
|
|
|
this.$el.removeClass('open--drag');
|
|
|
|
var files = e.target.files || e.dataTransfer.files;
|
|
|
|
var dataFile = _.find(files, function(file) { return file.name.split('.').pop().toLowerCase() === 'kdbx'; });
|
|
|
|
var keyFile = _.find(files, function(file) { return file.name.split('.').pop().toLowerCase() === 'key'; });
|
|
|
|
if (dataFile) {
|
|
|
|
this.views.openFile.setFile(dataFile, keyFile);
|
|
|
|
}
|
2015-10-24 21:06:44 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
showOpenLocalFile: function(path) {
|
|
|
|
if (path && Launcher) {
|
|
|
|
try {
|
|
|
|
var name = path.match(/[^/\\]*$/)[0];
|
|
|
|
var data = Launcher.readFile(path);
|
|
|
|
var file = new Blob([data]);
|
|
|
|
Object.defineProperties(file, {
|
|
|
|
path: { value: path },
|
|
|
|
name: { value: name }
|
|
|
|
});
|
|
|
|
this.views.openFile.setFile(file);
|
|
|
|
} catch (e) {
|
2015-11-04 21:23:55 +01:00
|
|
|
console.log('Failed to show local file', e);
|
2015-10-24 21:06:44 +02:00
|
|
|
}
|
|
|
|
}
|
2015-10-17 23:49:24 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
module.exports = OpenView;
|