JS: Improve selector used in the selectable behavior

This commit is contained in:
Eric Lippmann 2015-12-04 10:49:35 +01:00
parent 755f361e4c
commit 30124f384e
1 changed files with 30 additions and 17 deletions

View File

@ -5,6 +5,34 @@
Icinga.Behaviors = Icinga.Behaviors || {};
/**
* Select all contents from the target of the given event
*
* @param {object} e Event
*/
function onSelect(e) {
var b = document.body,
r;
if (b.createTextRange) {
r = b.createTextRange();
r.moveToElementText(e.target);
r.select();
} else if (window.getSelection) {
var s = window.getSelection();
r = document.createRange();
r.selectNodeContents(e.target);
s.removeAllRanges();
s.addRange(r);
}
}
/**
* Behavior for text that is selectable via double click
*
* @param {Icinga} icinga
*
* @constructor
*/
var Selectable = function(icinga) {
Icinga.EventListener.call(this, icinga);
this.on('rendered', this.onRendered, this);
@ -12,25 +40,10 @@
$.extend(Selectable.prototype, new Icinga.EventListener(), {
onRendered: function(e) {
$('.selectable', e.target).on('dblclick', e.data.self.selectText);
},
selectText: function(e) {
var b = document.body,
r;
if (b.createTextRange) {
r = b.createTextRange();
r.moveToElementText(e.target);
r.select();
} else if (window.getSelection) {
var s = window.getSelection();
r = document.createRange();
r.selectNodeContents(e.target);
s.removeAllRanges();
s.addRange(r);
}
$(e.target).find('.selectable').on('dblclick', onSelect);
}
});
Icinga.Behaviors.Selectable = Selectable;
})(Icinga, jQuery);