summaryrefslogtreecommitdiffstats
path: root/public/js/icinga/behavior/selectable.js
blob: 3f328400580c31e0814c09fcdd7ce8738f3f9be5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*! Icinga Web 2 | (c) 2015 Icinga Development Team | GPLv2+ */

;(function(Icinga, $) {
    'use strict';

    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);
    };

    $.extend(Selectable.prototype, new Icinga.EventListener(), {
        onRendered: function(e) {
            $(e.target).find('.selectable').on('dblclick', onSelect);
        }
    });

    Icinga.Behaviors.Selectable = Selectable;

})(Icinga, jQuery);