mercurial/templates/static/followlines.js
author Gregory Szorc <gregory.szorc@gmail.com>
Sat, 26 Jan 2019 14:16:34 -0800
changeset 41437 873a28d7e962
parent 37491 685ad41feba0
child 49206 2c0570a6d5ae
permissions -rw-r--r--
githelp: format with %d if an integer Python 3 doesn't allow us to format an int with %s like Python 2 did. So handle that. Differential Revision: https://phab.mercurial-scm.org/D5726
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31788
d15c9feb4399 hgweb: rename linerangelog.js as followlines.js
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31787
diff changeset
     1
// followlines.js - JavaScript utilities for followlines UI
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     2
//
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     3
// Copyright 2017 Logilab SA <contact@logilab.fr>
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     4
//
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     5
// This software may be used and distributed according to the terms of the
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     6
// GNU General Public License version 2 or any later version.
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     7
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     8
//** Install event listeners for line block selection and followlines action */
31786
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
     9
document.addEventListener('DOMContentLoaded', function() {
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    10
    var sourcelines = document.getElementsByClassName('sourcelines')[0];
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    11
    if (typeof sourcelines === 'undefined') {
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    12
        return;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    13
    }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    14
    // URL to complement with "linerange" query parameter
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    15
    var targetUri = sourcelines.dataset.logurl;
35177
9f44d44626a0 hgweb: use strict equals, remove non-breaking space in followlines.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35059
diff changeset
    16
    if (typeof targetUri === 'undefined') {
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    17
        return;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    18
    }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    19
33011
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    20
    // Tag of children of "sourcelines" element on which to add "line
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    21
    // selection" style.
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    22
    var selectableTag = sourcelines.dataset.selectabletag;
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    23
    if (typeof selectableTag === 'undefined') {
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    24
        return;
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    25
    }
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    26
32070
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
    27
    var isHead = parseInt(sourcelines.dataset.ishead || "0");
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
    28
31849
5c1abb4bd3ee hgweb: position the "followlines" box close to latest cursor position
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31848
diff changeset
    29
    //* position "element" on top-right of cursor */
5c1abb4bd3ee hgweb: position the "followlines" box close to latest cursor position
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31848
diff changeset
    30
    function positionTopRight(element, event) {
5c1abb4bd3ee hgweb: position the "followlines" box close to latest cursor position
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31848
diff changeset
    31
        var x = (event.clientX + 10) + 'px',
5c1abb4bd3ee hgweb: position the "followlines" box close to latest cursor position
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31848
diff changeset
    32
            y = (event.clientY - 20) + 'px';
5c1abb4bd3ee hgweb: position the "followlines" box close to latest cursor position
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31848
diff changeset
    33
        element.style.top = y;
5c1abb4bd3ee hgweb: position the "followlines" box close to latest cursor position
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31848
diff changeset
    34
        element.style.left = x;
5c1abb4bd3ee hgweb: position the "followlines" box close to latest cursor position
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31848
diff changeset
    35
    }
5c1abb4bd3ee hgweb: position the "followlines" box close to latest cursor position
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31848
diff changeset
    36
33011
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    37
    // retrieve all direct *selectable* children of class="sourcelines"
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    38
    // element
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    39
    var selectableElements = Array.prototype.filter.call(
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    40
        sourcelines.children,
35059
75013952d8d9 hgweb: add missing semicolons to followlines.js
Anton Shestakov <av6@dwimlabs.net>
parents: 33390
diff changeset
    41
        function(x) { return x.tagName === selectableTag; });
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    42
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    43
    var btnTitleStart = 'start following lines history from here';
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    44
    var btnTitleEnd = 'terminate line block selection here';
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    45
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    46
    //** return a <button> element with +/- spans */
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    47
    function createButton() {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    48
        var btn = document.createElement('button');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    49
        btn.title = btnTitleStart;
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    50
        btn.classList.add('btn-followlines');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    51
        var plusSpan = document.createElement('span');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    52
        plusSpan.classList.add('followlines-plus');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    53
        plusSpan.textContent = '+';
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    54
        btn.appendChild(plusSpan);
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    55
        var br = document.createElement('br');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    56
        btn.appendChild(br);
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    57
        var minusSpan = document.createElement('span');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    58
        minusSpan.classList.add('followlines-minus');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    59
        minusSpan.textContent = '−';
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    60
        btn.appendChild(minusSpan);
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    61
        return btn;
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    62
    }
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    63
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    64
    // extend DOM with CSS class for selection highlight and action buttons
35059
75013952d8d9 hgweb: add missing semicolons to followlines.js
Anton Shestakov <av6@dwimlabs.net>
parents: 33390
diff changeset
    65
    var followlinesButtons = [];
33011
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    66
    for (var i = 0; i < selectableElements.length; i++) {
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    67
        selectableElements[i].classList.add('followlines-select');
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    68
        var btn = createButton();
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    69
        followlinesButtons.push(btn);
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    70
        // insert the <button> as child of `selectableElements[i]` unless the
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    71
        // latter has itself a child  with a "followlines-btn-parent" class
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    72
        // (annotate view)
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    73
        var btnSupportElm = selectableElements[i];
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    74
        var childSupportElms = btnSupportElm.getElementsByClassName(
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    75
            'followlines-btn-parent');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    76
        if ( childSupportElms.length > 0 ) {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    77
            btnSupportElm = childSupportElms[0];
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    78
        }
37491
685ad41feba0 hgweb: insert followlines buttons before any children, including text nodes
Anton Shestakov <av6@dwimlabs.net>
parents: 35177
diff changeset
    79
        var refNode = btnSupportElm.childNodes[0]; // node to insert <button> before
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    80
        btnSupportElm.insertBefore(btn, refNode);
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    81
    }
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    82
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    83
    // ** re-initialize followlines buttons */
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    84
    function resetButtons() {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    85
        for (var i = 0; i < followlinesButtons.length; i++) {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    86
            var btn = followlinesButtons[i];
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    87
            btn.title = btnTitleStart;
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    88
            btn.classList.remove('btn-followlines-end');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    89
            btn.classList.remove('btn-followlines-hidden');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
    90
        }
31787
02eb52e9d413 hgweb: rely on a specific class to change cursor type in followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31786
diff changeset
    91
    }
02eb52e9d413 hgweb: rely on a specific class to change cursor type in followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31786
diff changeset
    92
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    93
    var lineSelectedCSSClass = 'followlines-selected';
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    94
33011
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    95
    //** add CSS class on selectable elements in `from`-`to` line range */
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    96
    function addSelectedCSSClass(from, to) {
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    97
        for (var i = from; i <= to; i++) {
33011
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
    98
            selectableElements[i].classList.add(lineSelectedCSSClass);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    99
        }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   100
    }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   101
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   102
    //** remove CSS class from previously selected lines */
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   103
    function removeSelectedCSSClass() {
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   104
        var elements = sourcelines.getElementsByClassName(
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   105
            lineSelectedCSSClass);
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   106
        while (elements.length) {
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   107
            elements[0].classList.remove(lineSelectedCSSClass);
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   108
        }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   109
    }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   110
33011
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
   111
    // ** return the element of type "selectableTag" parent of `element` */
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
   112
    function selectableParent(element) {
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   113
        var parent = element.parentElement;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   114
        if (parent === null) {
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   115
            return null;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   116
        }
35177
9f44d44626a0 hgweb: use strict equals, remove non-breaking space in followlines.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35059
diff changeset
   117
        if (element.tagName === selectableTag && parent.isSameNode(sourcelines)) {
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   118
            return element;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   119
        }
33011
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
   120
        return selectableParent(parent);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   121
    }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   122
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   123
    // ** update buttons title and style upon first click */
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   124
    function updateButtons(selectable) {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   125
        for (var i = 0; i < followlinesButtons.length; i++) {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   126
            var btn = followlinesButtons[i];
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   127
            btn.title = btnTitleEnd;
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   128
            btn.classList.add('btn-followlines-end');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   129
        }
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   130
        // on clicked button, change title to "cancel"
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   131
        var clicked = selectable.getElementsByClassName('btn-followlines')[0];
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   132
        clicked.title = 'cancel';
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   133
        clicked.classList.remove('btn-followlines-end');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   134
    }
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   135
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   136
    //** add `listener` on "click" event for all `followlinesButtons` */
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   137
    function buttonsAddEventListener(listener) {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   138
        for (var i = 0; i < followlinesButtons.length; i++) {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   139
            followlinesButtons[i].addEventListener('click', listener);
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   140
        }
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   141
    }
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   142
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   143
    //** remove `listener` on "click" event for all `followlinesButtons` */
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   144
    function buttonsRemoveEventListener(listener) {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   145
        for (var i = 0; i < followlinesButtons.length; i++) {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   146
            followlinesButtons[i].removeEventListener('click', listener);
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   147
        }
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   148
    }
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   149
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   150
    //** event handler for "click" on the first line of a block */
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   151
    function lineSelectStart(e) {
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   152
        var startElement = selectableParent(e.target.parentElement);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   153
        if (startElement === null) {
33011
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
   154
            // not a "selectable" element (maybe <a>): abort, keeping event
7c82bfd55d47 hgweb: parameterize the tag name of elements holding followlines selection
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32071
diff changeset
   155
            // listener registered for other click with a "selectable" target
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   156
            return;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   157
        }
31848
7160bdd56b84 hgweb: add a floating tooltip to invite on followlines action
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31788
diff changeset
   158
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   159
        // update button tooltip text and CSS
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   160
        updateButtons(startElement);
31848
7160bdd56b84 hgweb: add a floating tooltip to invite on followlines action
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31788
diff changeset
   161
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   162
        var startId = parseInt(startElement.id.slice(1));
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   163
        startElement.classList.add(lineSelectedCSSClass); // CSS
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   164
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   165
        // remove this event listener
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   166
        buttonsRemoveEventListener(lineSelectStart);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   167
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   168
        //** event handler for "click" on the last line of the block */
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   169
        function lineSelectEnd(e) {
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   170
            var endElement = selectableParent(e.target.parentElement);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   171
            if (endElement === null) {
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   172
                // not a <span> (maybe <a>): abort, keeping event listener
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   173
                // registered for other click with <span> target
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   174
                return;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   175
            }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   176
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   177
            // remove this event listener
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   178
            buttonsRemoveEventListener(lineSelectEnd);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   179
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   180
            // reset button tooltip text
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   181
            resetButtons();
31848
7160bdd56b84 hgweb: add a floating tooltip to invite on followlines action
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31788
diff changeset
   182
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   183
            // compute line range (startId, endId)
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   184
            var endId = parseInt(endElement.id.slice(1));
35177
9f44d44626a0 hgweb: use strict equals, remove non-breaking space in followlines.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35059
diff changeset
   185
            if (endId === startId) {
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   186
                // clicked twice the same line, cancel and reset initial state
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   187
                // (CSS, event listener for selection start)
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   188
                removeSelectedCSSClass();
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   189
                buttonsAddEventListener(lineSelectStart);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   190
                return;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   191
            }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   192
            var inviteElement = endElement;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   193
            if (endId < startId) {
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   194
                var tmp = endId;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   195
                endId = startId;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   196
                startId = tmp;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   197
                inviteElement = startElement;
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   198
            }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   199
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   200
            addSelectedCSSClass(startId - 1, endId -1);  // CSS
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   201
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   202
            // append the <div id="followlines"> element to last line of the
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   203
            // selection block
32070
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   204
            var divAndButton = followlinesBox(targetUri, startId, endId, isHead);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   205
            var div = divAndButton[0],
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   206
                button = divAndButton[1];
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   207
            inviteElement.appendChild(div);
31849
5c1abb4bd3ee hgweb: position the "followlines" box close to latest cursor position
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31848
diff changeset
   208
            // set position close to cursor (top-right)
5c1abb4bd3ee hgweb: position the "followlines" box close to latest cursor position
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31848
diff changeset
   209
            positionTopRight(div, e);
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   210
            // hide all buttons
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   211
            for (var i = 0; i < followlinesButtons.length; i++) {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   212
                followlinesButtons[i].classList.add('btn-followlines-hidden');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   213
            }
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   214
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   215
            //** event handler for cancelling selection */
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   216
            function cancel() {
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   217
                // remove invite box
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   218
                div.parentNode.removeChild(div);
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   219
                // restore initial event listeners
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   220
                buttonsAddEventListener(lineSelectStart);
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   221
                buttonsRemoveEventListener(cancel);
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   222
                for (var i = 0; i < followlinesButtons.length; i++) {
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   223
                    followlinesButtons[i].classList.remove('btn-followlines-hidden');
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   224
                }
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   225
                // remove styles on selected lines
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   226
                removeSelectedCSSClass();
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   227
                resetButtons();
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   228
            }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   229
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   230
            // bind cancel event to click on <button>
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   231
            button.addEventListener('click', cancel);
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   232
            // as well as on an click on any source line
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   233
            buttonsAddEventListener(cancel);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   234
        }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   235
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   236
        buttonsAddEventListener(lineSelectEnd);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   237
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   238
    }
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   239
33390
32331f54930c hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33011
diff changeset
   240
    buttonsAddEventListener(lineSelectStart);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   241
31786
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   242
    //** return a <div id="followlines"> and inner cancel <button> elements */
32070
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   243
    function followlinesBox(targetUri, fromline, toline, isHead) {
31786
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   244
        // <div id="followlines">
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   245
        var div = document.createElement('div');
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   246
        div.id = 'followlines';
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   247
31786
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   248
        //   <div class="followlines-cancel">
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   249
        var buttonDiv = document.createElement('div');
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   250
        buttonDiv.classList.add('followlines-cancel');
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   251
31786
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   252
        //     <button>x</button>
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   253
        var button = document.createElement('button');
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   254
        button.textContent = 'x';
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   255
        buttonDiv.appendChild(button);
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   256
        div.appendChild(buttonDiv);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   257
31786
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   258
        //   <div class="followlines-link">
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   259
        var aDiv = document.createElement('div');
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   260
        aDiv.classList.add('followlines-link');
31940
6ce09d2cc2db hgweb: add a link to followlines in descending direction
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31849
diff changeset
   261
        aDiv.textContent = 'follow history of lines ' + fromline + ':' + toline + ':';
6ce09d2cc2db hgweb: add a link to followlines in descending direction
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31849
diff changeset
   262
        var linesep = document.createElement('br');
6ce09d2cc2db hgweb: add a link to followlines in descending direction
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31849
diff changeset
   263
        aDiv.appendChild(linesep);
6ce09d2cc2db hgweb: add a link to followlines in descending direction
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31849
diff changeset
   264
        //     link to "ascending" followlines
6ce09d2cc2db hgweb: add a link to followlines in descending direction
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31849
diff changeset
   265
        var aAsc = document.createElement('a');
31786
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   266
        var url = targetUri + '?patch=&linerange=' + fromline + ':' + toline;
31940
6ce09d2cc2db hgweb: add a link to followlines in descending direction
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31849
diff changeset
   267
        aAsc.setAttribute('href', url);
32071
1cf0b651fa70 hgweb: change text of followlines links to "older / newer"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32070
diff changeset
   268
        aAsc.textContent = 'older';
31940
6ce09d2cc2db hgweb: add a link to followlines in descending direction
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31849
diff changeset
   269
        aDiv.appendChild(aAsc);
32070
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   270
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   271
        if (!isHead) {
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   272
            var sep = document.createTextNode(' / ');
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   273
            aDiv.appendChild(sep);
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   274
            //     link to "descending" followlines
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   275
            var aDesc = document.createElement('a');
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   276
            aDesc.setAttribute('href', url + '&descend=');
32071
1cf0b651fa70 hgweb: change text of followlines links to "older / newer"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 32070
diff changeset
   277
            aDesc.textContent = 'newer';
32070
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   278
            aDiv.appendChild(aDesc);
a298f5c61b34 hgweb: do not show "descending" link in followlines UI for filelog heads
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31940
diff changeset
   279
        }
31940
6ce09d2cc2db hgweb: add a link to followlines in descending direction
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31849
diff changeset
   280
31786
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   281
        div.appendChild(aDiv);
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   282
31786
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   283
        return [div, button];
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   284
    }
31763
04ec317b8128 hgweb: expose a followlines UI in filerevision view
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
   285
31786
70377de005a0 hgweb: use a function expression for the install listener of followlines UI
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 31763
diff changeset
   286
}, false);