[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/webroot/rsrc/js/application/conpherence/ -> behavior-pontificate.js (source)

   1  /**
   2   * @provides javelin-behavior-conpherence-pontificate
   3   * @requires javelin-behavior
   4   *           javelin-dom
   5   *           javelin-util
   6   *           javelin-workflow
   7   *           javelin-stratcom
   8   */
   9  
  10  JX.behavior('conpherence-pontificate', function() {
  11  
  12    JX.Stratcom.listen('aphlict-receive-message', null, function(e) {
  13      var message = e.getData();
  14  
  15      if (message.type != 'message') {
  16        // Not a message event.
  17        return;
  18      }
  19  
  20      // TODO: This is really, really gross.
  21      var infonode = JX.DOM.find(document, 'input', 'latest-transaction-id');
  22      var data = JX.Stratcom.getData(infonode);
  23  
  24      var latest_id = infonode.value;
  25      var thread_phid = data.threadPHID;
  26      var thread_id = data.threadID;
  27  
  28      if (message.threadPHID != thread_phid) {
  29        // Message event for some thread other than the visible one.
  30        return;
  31      }
  32  
  33      if (message.messageID <= latest_id) {
  34        // Message event for something we already know about.
  35        return;
  36      }
  37  
  38      var params = {
  39        action: 'load',
  40        latest_transaction_id: latest_id
  41      };
  42  
  43      new JX.Workflow('/conpherence/update/' + thread_id + '/')
  44        .setData(params)
  45        .setHandler(function(r) {
  46          var messages = JX.DOM.find(document, 'div', 'conpherence-messages');
  47          JX.DOM.appendContent(messages, JX.$H(r.transactions));
  48          messages.scrollTop = messages.scrollHeight;
  49  
  50          // TODO: Continued grossness from above.
  51          infonode.value = r.latest_transaction_id;
  52        })
  53        .start();
  54    });
  55  
  56  
  57    var onsubmit = function(e) {
  58      e.kill();
  59  
  60      var form = e.getNode('tag:form');
  61  
  62      var root = e.getNode('conpherence-layout');
  63      var messages_root = JX.DOM.find(root, 'div', 'conpherence-message-pane');
  64      var form_root = JX.DOM.find(root, 'div', 'conpherence-form');
  65      var messages = JX.DOM.find(messages_root, 'div', 'conpherence-messages');
  66      var fileWidget = null;
  67      try {
  68        fileWidget = JX.DOM.find(root, 'div', 'widgets-files');
  69      } catch (ex) {
  70        // Ignore; maybe no files widget
  71      }
  72      JX.DOM.alterClass(form_root, 'loading', true);
  73  
  74      JX.Workflow.newFromForm(form)
  75        .setHandler(JX.bind(this, function(r) {
  76          JX.DOM.appendContent(messages, JX.$H(r.transactions));
  77          messages.scrollTop = messages.scrollHeight;
  78  
  79          if (fileWidget) {
  80            JX.DOM.setContent(
  81              fileWidget,
  82              JX.$H(r.file_widget)
  83            );
  84          }
  85  
  86          var latest_transaction_dom = JX.DOM.find(
  87            root,
  88            'input',
  89            'latest-transaction-id');
  90          latest_transaction_dom.value = r.latest_transaction_id;
  91  
  92          var textarea = JX.DOM.find(form, 'textarea');
  93          textarea.value = '';
  94  
  95          JX.Stratcom.invoke(
  96            'conpherence-selectthread',
  97            null,
  98            { id : r.conpherence_phid + '-nav-item' }
  99            );
 100  
 101          JX.DOM.alterClass(form_root, 'loading', false);
 102        }))
 103      .start();
 104    };
 105  
 106    JX.Stratcom.listen(
 107      ['submit', 'didSyntheticSubmit'],
 108      'conpherence-pontificate',
 109      onsubmit);
 110  
 111  });


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