diff --git a/resources/celerity/map.php b/resources/celerity/map.php --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -8,7 +8,7 @@ return array( 'names' => array( 'core.pkg.css' => 'ed3d6355', - 'core.pkg.js' => '3ed82e2f', + 'core.pkg.js' => '616511ac', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => 'bb338e4b', 'differential.pkg.js' => '895b8d62', @@ -348,10 +348,10 @@ 'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18', 'rsrc/js/application/calendar/event-all-day.js' => 'ca5fa62a', 'rsrc/js/application/config/behavior-reorder-fields.js' => '14a827de', - 'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '9e507b59', + 'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => 'de397217', 'rsrc/js/application/conpherence/behavior-drag-and-drop-photo.js' => 'cf86d16a', - 'rsrc/js/application/conpherence/behavior-durable-column.js' => 'bc5107aa', - 'rsrc/js/application/conpherence/behavior-menu.js' => '804b0773', + 'rsrc/js/application/conpherence/behavior-durable-column.js' => '61252a27', + 'rsrc/js/application/conpherence/behavior-menu.js' => 'eb61cb03', 'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861', 'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3', 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '93568464', @@ -516,7 +516,7 @@ 'conpherence-menu-css' => 'f389e048', 'conpherence-message-pane-css' => '0e75feef', 'conpherence-notification-css' => 'd208f806', - 'conpherence-thread-manager' => '9e507b59', + 'conpherence-thread-manager' => 'de397217', 'conpherence-transaction-css' => '42a457f6', 'conpherence-update-css' => '1099a660', 'conpherence-widget-pane-css' => '2af42ebe', @@ -557,7 +557,7 @@ 'javelin-behavior-choose-control' => '6153c708', 'javelin-behavior-config-reorder-fields' => '14a827de', 'javelin-behavior-conpherence-drag-and-drop-photo' => 'cf86d16a', - 'javelin-behavior-conpherence-menu' => '804b0773', + 'javelin-behavior-conpherence-menu' => 'eb61cb03', 'javelin-behavior-conpherence-pontificate' => '21ba5861', 'javelin-behavior-conpherence-widget-pane' => '93568464', 'javelin-behavior-countdown-timer' => 'e4cc26b3', @@ -584,7 +584,7 @@ 'javelin-behavior-diffusion-locate-file' => '6d3e1947', 'javelin-behavior-diffusion-pull-lastmodified' => '2b228192', 'javelin-behavior-doorkeeper-tag' => 'e5822781', - 'javelin-behavior-durable-column' => 'bc5107aa', + 'javelin-behavior-durable-column' => '61252a27', 'javelin-behavior-error-log' => '6882e80a', 'javelin-behavior-event-all-day' => 'ca5fa62a', 'javelin-behavior-fancy-datepicker' => '5c0f680f', @@ -1256,6 +1256,16 @@ 'javelin-stratcom', 'javelin-dom', ), + '61252a27' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-behavior-device', + 'javelin-scrollbar', + 'javelin-quicksand', + 'phabricator-keyboard-shortcut', + 'conpherence-thread-manager', + ), '6153c708' => array( 'javelin-behavior', 'javelin-stratcom', @@ -1395,20 +1405,6 @@ 'javelin-behavior', 'javelin-history', ), - '804b0773' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-util', - 'javelin-stratcom', - 'javelin-workflow', - 'javelin-behavior-device', - 'javelin-history', - 'javelin-vector', - 'javelin-scrollbar', - 'phabricator-title', - 'phabricator-shaped-request', - 'conpherence-thread-manager', - ), 82439934 => array( 'javelin-behavior', 'javelin-dom', @@ -1578,17 +1574,6 @@ 'phuix-action-view', 'javelin-workflow', ), - '9e507b59' => array( - 'javelin-dom', - 'javelin-util', - 'javelin-stratcom', - 'javelin-install', - 'javelin-aphlict', - 'javelin-workflow', - 'javelin-router', - 'javelin-behavior-device', - 'javelin-vector', - ), '9f36c42d' => array( 'javelin-behavior', 'javelin-stratcom', @@ -1734,16 +1719,6 @@ 'javelin-stratcom', 'javelin-dom', ), - 'bc5107aa' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-stratcom', - 'javelin-behavior-device', - 'javelin-scrollbar', - 'javelin-quicksand', - 'phabricator-keyboard-shortcut', - 'conpherence-thread-manager', - ), 'bd4c8dca' => array( 'javelin-install', 'javelin-util', @@ -1857,6 +1832,17 @@ 'javelin-typeahead-ondemand-source', 'javelin-dom', ), + 'de397217' => array( + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-install', + 'javelin-aphlict', + 'javelin-workflow', + 'javelin-router', + 'javelin-behavior-device', + 'javelin-vector', + ), 'df5e11d2' => array( 'javelin-install', ), @@ -1934,6 +1920,20 @@ 'phabricator-phtize', 'javelin-dom', ), + 'eb61cb03' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-behavior-device', + 'javelin-history', + 'javelin-vector', + 'javelin-scrollbar', + 'phabricator-title', + 'phabricator-shaped-request', + 'conpherence-thread-manager', + ), 'efe49472' => array( 'javelin-install', 'javelin-util', diff --git a/webroot/rsrc/js/application/conpherence/ConpherenceThreadManager.js b/webroot/rsrc/js/application/conpherence/ConpherenceThreadManager.js --- a/webroot/rsrc/js/application/conpherence/ConpherenceThreadManager.js +++ b/webroot/rsrc/js/application/conpherence/ConpherenceThreadManager.js @@ -30,6 +30,7 @@ _canEditLoadedThread: null, _updating: null, _minimalDisplay: false, + _messagesRootCallback: JX.bag, _willLoadThreadCallback: JX.bag, _didLoadThreadCallback: JX.bag, _didUpdateThreadCallback: JX.bag, @@ -99,6 +100,11 @@ return this; }, + setMessagesRootCallback: function(callback) { + this._messagesRootCallback = callback; + return this; + }, + setWillLoadThreadCallback: function(callback) { this._willLoadThreadCallback = callback; return this; @@ -183,6 +189,52 @@ this._updateThread(); })); + + JX.Stratcom.listen( + 'click', + 'show-older-messages', + JX.bind(this, function(e) { + e.kill(); + var data = e.getNodeData('show-older-messages'); + + var node = e.getNode('show-older-messages'); + JX.DOM.setContent(node, 'Loading...'); + JX.DOM.alterClass( + node, + 'conpherence-show-more-messages-loading', + true); + + new JX.Workflow(this._getMoreMessagesURI(), data) + .setHandler(JX.bind(this, function(r) { + JX.DOM.remove(node); + var messages = JX.$H(r.messages); + JX.DOM.prependContent( + this._messagesRootCallback(), + messages); + })).start(); + })); + JX.Stratcom.listen( + 'click', + 'show-newer-messages', + JX.bind(this, function(e) { + e.kill(); + var data = e.getNodeData('show-newer-messages'); + var node = e.getNode('show-newer-messages'); + JX.DOM.setContent(node, 'Loading...'); + JX.DOM.alterClass( + node, + 'conpherence-show-more-messages-loading', + true); + + new JX.Workflow(this._getMoreMessagesURI(), data) + .setHandler(JX.bind(this, function(r) { + JX.DOM.remove(node); + var messages = JX.$H(r.messages); + JX.DOM.appendContent( + this._messagesRootCallback(), + JX.$H(messages)); + })).start(); + })); }, _shouldUpdateDOM: function(r) { @@ -216,9 +268,7 @@ action: 'load', }); - var uri = '/conpherence/update/' + this._loadedThreadID + '/'; - - var workflow = new JX.Workflow(uri) + var workflow = new JX.Workflow(this._getUpdateURI()) .setData(params) .setHandler(JX.bind(this, function(r) { if (this._shouldUpdateDOM(r)) { @@ -350,9 +400,8 @@ var data = e.getNodeData('tag:form'); if (!data.preview) { - var uri = '/conpherence/update/' + this._loadedThreadID + '/'; data.preview = new JX.PhabricatorShapedRequest( - uri, + this._getUpdateURI(), JX.bag, JX.bind(this, function () { var data = JX.DOM.convertFormToDictionary(form); @@ -362,6 +411,14 @@ })); } data.preview.trigger(); + }, + + _getUpdateURI: function() { + return '/conpherence/update/' + this._loadedThreadID + '/'; + }, + + _getMoreMessagesURI: function() { + return '/conpherence/' + this._loadedThreadID + '/'; } }, diff --git a/webroot/rsrc/js/application/conpherence/behavior-durable-column.js b/webroot/rsrc/js/application/conpherence/behavior-durable-column.js --- a/webroot/rsrc/js/application/conpherence/behavior-durable-column.js +++ b/webroot/rsrc/js/application/conpherence/behavior-durable-column.js @@ -119,6 +119,9 @@ var threadManager = new JX.ConpherenceThreadManager(); threadManager.setMinimalDisplay(true); + threadManager.setMessagesRootCallback(function() { + return _getColumnMessagesNode(); + }); threadManager.setLoadThreadURI('/conpherence/columnview/'); threadManager.setWillLoadThreadCallback(function() { _markLoading(true); diff --git a/webroot/rsrc/js/application/conpherence/behavior-menu.js b/webroot/rsrc/js/application/conpherence/behavior-menu.js --- a/webroot/rsrc/js/application/conpherence/behavior-menu.js +++ b/webroot/rsrc/js/application/conpherence/behavior-menu.js @@ -28,6 +28,9 @@ // TODO - move more logic into the ThreadManager var threadManager = new JX.ConpherenceThreadManager(); + threadManager.setMessagesRootCallback(function() { + return scrollbar.getContentNode(); + }); threadManager.setWillLoadThreadCallback(function() { markThreadLoading(true); }); @@ -415,56 +418,6 @@ .start(); }); - var _oldLoadingTransactionID = null; - JX.Stratcom.listen('click', 'show-older-messages', function(e) { - e.kill(); - var data = e.getNodeData('show-older-messages'); - if (data.oldest_transaction_id == _oldLoadingTransactionID) { - return; - } - _oldLoadingTransactionID = data.oldest_transaction_id; - - var node = e.getNode('show-older-messages'); - JX.DOM.setContent(node, 'Loading...'); - JX.DOM.alterClass(node, 'conpherence-show-more-messages-loading', true); - - var conf_id = _thread.selected; - var messages_root = scrollbar.getContentNode(); - new JX.Workflow(config.baseURI + conf_id + '/', data) - .setHandler(function(r) { - JX.DOM.remove(node); - var messages = JX.$H(r.messages); - JX.DOM.prependContent( - messages_root, - JX.$H(messages)); - }).start(); - }); - - var _newLoadingTransactionID = null; - JX.Stratcom.listen('click', 'show-newer-messages', function(e) { - e.kill(); - var data = e.getNodeData('show-newer-messages'); - if (data.newest_transaction_id == _newLoadingTransactionID) { - return; - } - _newLoadingTransactionID = data.newest_transaction_id; - - var node = e.getNode('show-newer-messages'); - JX.DOM.setContent(node, 'Loading...'); - JX.DOM.alterClass(node, 'conpherence-show-more-messages-loading', true); - - var conf_id = _thread.selected; - var messages_root = scrollbar.getContentNode(); - new JX.Workflow(config.baseURI + conf_id + '/', data) - .setHandler(function(r) { - JX.DOM.remove(node); - var messages = JX.$H(r.messages); - JX.DOM.appendContent( - messages_root, - JX.$H(messages)); - }).start(); - }); - /** * On devices, we just show a thread list, so we don't want to automatically * select or load any threads. On desktop, we automatically select the first