[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/webroot/rsrc/js/application/repository/ -> repository-crossreference.js (source)

   1  /**
   2   * @provides javelin-behavior-repository-crossreference
   3   * @requires javelin-behavior
   4   *           javelin-dom
   5   *           javelin-stratcom
   6   *           javelin-uri
   7   */
   8  
   9  JX.behavior('repository-crossreference', function(config) {
  10  
  11    // NOTE: Pretty much everything in this file is a worst practice. We're
  12    // constrained by the markup generated by the syntax highlighters.
  13  
  14    function link(element, lang) {
  15      JX.DOM.alterClass(element, 'repository-crossreference', true);
  16      JX.DOM.listen(
  17        element,
  18        'click',
  19        'tag:span',
  20        function(e) {
  21          var target = e.getTarget();
  22          var map = {nc : 'class', nf : 'function', na : null};
  23          while (target !== document.body) {
  24            if (JX.DOM.isNode(target, 'span') && (target.className in map)) {
  25              var timeout = function() {
  26                if (window.getSelection && !window.getSelection().isCollapsed) {
  27                  return;
  28                }
  29                var symbol = target.textContent || target.innerText;
  30                var query = {
  31                  lang : lang,
  32                  projects : config.projects.join(','),
  33                  jump : true
  34                };
  35                if (map[target.className]) {
  36                  query.type = map[target.className];
  37                }
  38                if (target.hasAttribute('data-symbol-context')) {
  39                  query.context = target.getAttribute('data-symbol-context');
  40                }
  41                if (target.hasAttribute('data-symbol-name')) {
  42                  symbol = target.getAttribute('data-symbol-name');
  43                }
  44                var uri = JX.$U('/diffusion/symbol/' + symbol + '/');
  45                uri.addQueryParams(query);
  46                window.open(uri);
  47              };
  48              setTimeout(timeout, 250);
  49              e.kill();
  50              break;
  51            }
  52            target = target.parentNode;
  53          }
  54        });
  55    }
  56  
  57    function linkAll() {
  58      var blocks = JX.DOM.scry(document.body, 'div', 'remarkup-code-block');
  59      for (var i = 0; i < blocks.length; ++i) {
  60        if (blocks[i].hasAttribute('data-code-lang')) {
  61          var lang = blocks[i].getAttribute('data-code-lang');
  62          link(blocks[i], lang);
  63        }
  64      }
  65    }
  66  
  67    if (config.container) {
  68      link(JX.$(config.container), config.lang);
  69    } else if (config.section) {
  70      linkAll(JX.$(config.section));
  71    }
  72  
  73    JX.Stratcom.listen(
  74      'differential-preview-update',
  75      null,
  76      function(e) {
  77        linkAll(e.getData().container);
  78      });
  79  
  80  });


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