[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/webroot/rsrc/js/core/ -> behavior-line-linker.js (source)

   1  /**
   2   * @provides javelin-behavior-phabricator-line-linker
   3   * @requires javelin-behavior
   4   *           javelin-stratcom
   5   *           javelin-dom
   6   *           javelin-history
   7   */
   8  
   9  JX.behavior('phabricator-line-linker', function() {
  10    var origin = null;
  11    var target = null;
  12    var root = null;
  13  
  14    var editor_link = null;
  15    try {
  16      editor_link = JX.$('editor_link');
  17    } catch (ex) {
  18      // Ignore.
  19    }
  20  
  21    function getRowNumber(tr) {
  22      var th = JX.DOM.find(tr, 'th', 'phabricator-source-line');
  23      return +(th.textContent || th.innerText);
  24    }
  25  
  26    JX.Stratcom.listen(
  27      'mousedown',
  28      'phabricator-source-line',
  29      function(e) {
  30        if (!e.isNormalMouseEvent()) {
  31          return;
  32        }
  33        origin = e.getNode('tag:tr');
  34        target = origin;
  35        root = e.getNode('phabricator-source');
  36        e.kill();
  37      });
  38  
  39    JX.Stratcom.listen(
  40      'click',
  41      'phabricator-source-line',
  42      function(e) {
  43        e.kill();
  44      });
  45  
  46    var highlight = function(e) {
  47      if (!origin || e.getNode('phabricator-source') !== root) {
  48        return;
  49      }
  50      target = e.getNode('tag:tr');
  51  
  52      var highlighting = false;
  53      var source = null;
  54      var trs = JX.DOM.scry(root, 'tr');
  55      for (var i = 0; i < trs.length; i++) {
  56        if (!highlighting && (trs[i] === origin || trs[i] === target)) {
  57          highlighting = true;
  58          source = trs[i];
  59        }
  60        JX.DOM.alterClass(trs[i], 'phabricator-source-highlight', highlighting);
  61        if (trs[i] === (source === origin ? target : origin)) {
  62          highlighting = false;
  63        }
  64      }
  65    };
  66  
  67    JX.Stratcom.listen('mouseover', 'phabricator-source', highlight);
  68  
  69    JX.Stratcom.listen(
  70      'mouseup',
  71      null,
  72      function(e) {
  73        if (!origin) {
  74          return;
  75        }
  76  
  77        highlight(e);
  78  
  79        var o = getRowNumber(origin);
  80        var t = getRowNumber(target);
  81        var lines = (o == t ? o : Math.min(o, t) + '-' + Math.max(o, t));
  82        var th = JX.DOM.find(origin, 'th', 'phabricator-source-line');
  83        var uri = JX.DOM.find(th, 'a').href;
  84        uri = uri.replace(/(.*\$)\d+/, '$1' + lines);
  85        origin = null;
  86        target = null;
  87        e.kill();
  88        JX.History.replace(uri);
  89        if (editor_link.href) {
  90          editdata = JX.Stratcom.getData(editor_link);
  91          editor_link.href = editdata.link_template.replace('%25l', o);
  92        }
  93      });
  94  
  95  });


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1