[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/webroot/rsrc/js/application/differential/ -> behavior-comment-preview.js (source)

   1  /**
   2   * @provides javelin-behavior-differential-feedback-preview
   3   * @requires javelin-behavior
   4   *           javelin-stratcom
   5   *           javelin-dom
   6   *           javelin-request
   7   *           javelin-util
   8   *           phabricator-shaped-request
   9   */
  10  
  11  JX.behavior('differential-feedback-preview', function(config) {
  12  
  13    var action = JX.$(config.action);
  14    var content = JX.$(config.content);
  15    var previewTokenizers = {};
  16    var field;
  17    for (field in config.previewTokenizers) {
  18      var tokenizer = JX.$(config.previewTokenizers[field]);
  19      previewTokenizers[field] = JX.Stratcom.getData(tokenizer).tokenizer;
  20    }
  21  
  22    var callback = function(r) {
  23      var preview = JX.$(config.preview);
  24      JX.DOM.setContent(preview, JX.$H(r));
  25      JX.Stratcom.invoke('differential-preview-update', null, {
  26        container: preview
  27      });
  28    };
  29  
  30    var getdata = function() {
  31      var data = {
  32        content : content.value,
  33        action : action.value
  34      };
  35      for (var field in previewTokenizers) {
  36        data[field] = JX.keys(previewTokenizers[field].getTokens()).join(',');
  37      }
  38      return data;
  39    };
  40  
  41    var request = new JX.PhabricatorShapedRequest(config.uri, callback, getdata);
  42    var trigger = JX.bind(request, request.trigger);
  43  
  44    JX.DOM.listen(content, 'keydown', null, trigger);
  45    JX.DOM.listen(action,  'change',  null, trigger);
  46    for (field in previewTokenizers) {
  47      previewTokenizers[field].listen('change', trigger);
  48    }
  49  
  50    request.start();
  51  
  52  
  53    function refreshInlinePreview() {
  54      new JX.Request(config.inlineuri, function(r) {
  55          var inline = JX.$(config.inline);
  56  
  57          JX.DOM.setContent(inline, JX.$H(r));
  58          JX.Stratcom.invoke('differential-preview-update', null, {
  59            container: inline
  60          });
  61  
  62          // Go through the previews and activate any "View" links where the
  63          // actual comment appears in the document.
  64  
  65          var links = JX.DOM.scry(
  66            inline,
  67            'a',
  68            'differential-inline-preview-jump');
  69          for (var ii = 0; ii < links.length; ii++) {
  70            var data = JX.Stratcom.getData(links[ii]);
  71            try {
  72              JX.$(data.anchor);
  73              links[ii].href = '#' + data.anchor;
  74              JX.DOM.setContent(links[ii], 'View');
  75            } catch (ignored) {
  76              // This inline comment isn't visible, e.g. on some other diff.
  77            }
  78          }
  79        })
  80        .setTimeout(5000)
  81        .send();
  82    }
  83  
  84    JX.Stratcom.listen(
  85      'differential-inline-comment-update',
  86      null,
  87      refreshInlinePreview);
  88  
  89    refreshInlinePreview();
  90  });


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