2015-10-18 23:30:29 +02:00
|
|
|
'use strict';
|
|
|
|
|
2015-10-19 23:24:32 +02:00
|
|
|
var Backbone = require('backbone'),
|
2015-10-20 21:58:07 +02:00
|
|
|
PasswordGenerator = require('../util/password-generator'),
|
|
|
|
CopyPaste = require('../util/copy-paste');
|
2015-10-18 23:30:29 +02:00
|
|
|
|
2015-10-24 21:06:44 +02:00
|
|
|
var DefaultGenOpts = {
|
|
|
|
length: 16, upper: true, lower: true, digits: true, special: false, brackets: false, high: false, ambiguous: false
|
|
|
|
};
|
|
|
|
|
2015-10-18 23:30:29 +02:00
|
|
|
var GeneratorView = Backbone.View.extend({
|
|
|
|
el: 'body',
|
|
|
|
|
|
|
|
template: require('templates/generator.html'),
|
|
|
|
|
|
|
|
events: {
|
2015-10-19 23:24:32 +02:00
|
|
|
'click': 'click',
|
2015-10-20 19:17:15 +02:00
|
|
|
'mousedown .gen__length-range': 'generate',
|
2015-10-19 23:24:32 +02:00
|
|
|
'mousemove .gen__length-range': 'lengthChange',
|
|
|
|
'change .gen__length-range': 'lengthChange',
|
2015-10-20 21:58:07 +02:00
|
|
|
'change .gen__check input[type=checkbox]': 'checkChange',
|
|
|
|
'click .gen__btn-ok': 'btnOkClick'
|
2015-10-18 23:30:29 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
initialize: function () {
|
2015-10-19 23:24:32 +02:00
|
|
|
$('body').one('click', this.remove.bind(this));
|
2015-10-24 21:06:44 +02:00
|
|
|
this.gen = _.clone(DefaultGenOpts);
|
2015-10-18 23:30:29 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
render: function() {
|
2015-10-20 21:58:07 +02:00
|
|
|
var canCopy = document.queryCommandSupported('copy');
|
2015-10-22 20:03:44 +02:00
|
|
|
var btnTitle = this.model.copy ? canCopy ? 'Copy' : 'Close' : 'OK';
|
|
|
|
this.renderTemplate({ btnTitle: btnTitle, opt: this.gen });
|
2015-10-20 21:58:07 +02:00
|
|
|
this.resultEl = this.$el.find('.gen__result');
|
2015-10-18 23:30:29 +02:00
|
|
|
this.$el.css(this.model.pos);
|
2015-10-19 23:24:32 +02:00
|
|
|
this.generate();
|
2015-10-20 21:58:07 +02:00
|
|
|
return this;
|
2015-10-18 23:30:29 +02:00
|
|
|
},
|
|
|
|
|
2015-10-19 23:24:32 +02:00
|
|
|
click: function(e) {
|
2015-10-18 23:30:29 +02:00
|
|
|
e.stopPropagation();
|
2015-10-19 23:24:32 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
lengthChange: function(e) {
|
|
|
|
var val = +e.target.value;
|
|
|
|
if (val !== this.gen.length) {
|
|
|
|
this.gen.length = val;
|
|
|
|
this.$el.find('.gen__length-range-val').html(val);
|
|
|
|
this.generate();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
checkChange: function(e) {
|
|
|
|
var id = $(e.target).data('id');
|
|
|
|
if (id) {
|
|
|
|
this.gen[id] = e.target.checked;
|
|
|
|
}
|
|
|
|
this.generate();
|
|
|
|
},
|
|
|
|
|
|
|
|
generate: function() {
|
2015-10-20 21:58:07 +02:00
|
|
|
this.password = PasswordGenerator.generate(this.gen);
|
|
|
|
this.resultEl.text(this.password);
|
|
|
|
},
|
|
|
|
|
|
|
|
btnOkClick: function() {
|
|
|
|
var selection = window.getSelection();
|
|
|
|
var range = document.createRange();
|
|
|
|
range.selectNodeContents(this.resultEl[0]);
|
|
|
|
selection.removeAllRanges();
|
|
|
|
selection.addRange(range);
|
|
|
|
CopyPaste.tryCopy();
|
|
|
|
this.trigger('result', this.password);
|
|
|
|
this.remove();
|
2015-10-18 23:30:29 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
module.exports = GeneratorView;
|