[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/webroot/rsrc/js/application/releeph/ -> releeph-request-state-change.js (source)

   1  /**
   2   * @provides javelin-behavior-releeph-request-state-change
   3   * @requires javelin-behavior
   4   *           javelin-dom
   5   *           javelin-stratcom
   6   *           javelin-workflow
   7   *           javelin-util
   8   *           phabricator-keyboard-shortcut
   9   */
  10  
  11  JX.behavior('releeph-request-state-change', function() {
  12    function getRequestHeaderNodes() {
  13      return JX.DOM.scry(document.body, 'div', 'releeph-request-box');
  14    }
  15  
  16    var keynav_cursor = -1;
  17  
  18    function keynavJump(manager, delta) {
  19      // Calculate this everytime, because the DOM changes.
  20      var headers = getRequestHeaderNodes();
  21      keynav_cursor += delta;
  22  
  23      if (keynav_cursor < 0) {
  24        keynav_cursor = -1;
  25        window.scrollTo(0);
  26        keynavMarkup();
  27        return;
  28      }
  29  
  30      if (keynav_cursor >= headers.length) {
  31        keynav_cursor = headers.length - 1;
  32      }
  33  
  34      var focus = headers[keynav_cursor];
  35      manager.scrollTo(focus);
  36  
  37      keynavMarkup();
  38    }
  39  
  40    function keynavMarkup() {
  41      var headers = getRequestHeaderNodes();
  42      for (var k in headers) {
  43        JX.DOM.alterClass(headers[k], 'focus', k == keynav_cursor);
  44      }
  45    }
  46  
  47    function keynavAction(manager, action_name) {
  48      var headers = getRequestHeaderNodes();
  49      var header = headers[keynav_cursor];
  50  
  51      if (keynav_cursor < 0) {
  52        return;
  53      }
  54  
  55      var sigil = action_name;
  56      var button = JX.DOM.find(header, 'a', sigil);
  57      if (button) {
  58        button.click();
  59      }
  60    }
  61  
  62    function keynavNavigateToRequestPage() {
  63      var headers = getRequestHeaderNodes();
  64      var header = headers[keynav_cursor];
  65      window.open(JX.Stratcom.getData(header).uri);
  66    }
  67  
  68    new JX.KeyboardShortcut('j', 'Jump to next request.')
  69      .setHandler(function(manager) {
  70        keynavJump(manager, +1);
  71      })
  72      .register();
  73  
  74    new JX.KeyboardShortcut('k', 'Jump to previous request.')
  75      .setHandler(function(manager) {
  76        keynavJump(manager, -1);
  77      })
  78      .register();
  79  
  80    new JX.KeyboardShortcut('a', 'Approve the selected request.')
  81      .setHandler(function(manager) {
  82        keynavAction(manager, 'want');
  83      })
  84      .register();
  85  
  86    new JX.KeyboardShortcut('r', 'Reject the selected request.')
  87      .setHandler(function(manager) {
  88        keynavAction(manager, 'pass');
  89      })
  90      .register();
  91  
  92    new JX.KeyboardShortcut(
  93      ['g', 'return'],
  94      "Open selected request's page in a new tab.")
  95      .setHandler(function() {
  96        keynavNavigateToRequestPage();
  97      })
  98      .register();
  99  
 100    function onresponse(box, response) {
 101      JX.DOM.replace(box, JX.$H(response.markup));
 102      keynavMarkup();
 103    }
 104  
 105    JX.Stratcom.listen(
 106      'click',
 107      'releeph-request-state-change',
 108      function(e) {
 109        e.kill();
 110  
 111        var box = e.getNode('releeph-request-box');
 112        var link = e.getNode('releeph-request-state-change');
 113  
 114        box.style.opacity = '0.5';
 115  
 116        JX.Workflow.newFromLink(link)
 117          .setData({render: true})
 118          .setHandler(JX.bind(null, onresponse, box))
 119          .start();
 120      });
 121  });


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