diff --git a/resources/celerity/map.php b/resources/celerity/map.php --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -356,10 +356,10 @@ 'rsrc/js/application/config/behavior-reorder-fields.js' => '14a827de', 'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '0a5192c4', 'rsrc/js/application/conpherence/behavior-durable-column.js' => '7ffa744f', - 'rsrc/js/application/conpherence/behavior-menu.js' => 'e67cfd8c', + 'rsrc/js/application/conpherence/behavior-menu.js' => 'eaf57226', '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' => '1ec93bcf', + 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '31b18ee7', 'rsrc/js/application/countdown/timer.js' => 'e4cc26b3', 'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => '469c0d9e', 'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => '82439934', @@ -559,9 +559,9 @@ 'javelin-behavior-boards-dropdown' => '0ec56e1d', 'javelin-behavior-choose-control' => '6153c708', 'javelin-behavior-config-reorder-fields' => '14a827de', - 'javelin-behavior-conpherence-menu' => 'e67cfd8c', + 'javelin-behavior-conpherence-menu' => 'eaf57226', 'javelin-behavior-conpherence-pontificate' => '21ba5861', - 'javelin-behavior-conpherence-widget-pane' => '1ec93bcf', + 'javelin-behavior-conpherence-widget-pane' => '31b18ee7', 'javelin-behavior-countdown-timer' => 'e4cc26b3', 'javelin-behavior-dark-console' => '08883e8b', 'javelin-behavior-dashboard-async-panel' => '469c0d9e', @@ -954,19 +954,6 @@ 'javelin-dom', 'javelin-reactor-dom', ), - '1ec93bcf' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-stratcom', - 'javelin-workflow', - 'javelin-util', - 'phabricator-notification', - 'javelin-behavior-device', - 'phuix-dropdown-menu', - 'phuix-action-list-view', - 'phuix-action-view', - 'conpherence-thread-manager', - ), '2035b9cb' => array( 'javelin-behavior', 'javelin-dom', @@ -1056,6 +1043,19 @@ 'javelin-install', 'javelin-typeahead-source', ), + '31b18ee7' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-util', + 'phabricator-notification', + 'javelin-behavior-device', + 'phuix-dropdown-menu', + 'phuix-action-list-view', + 'phuix-action-view', + 'conpherence-thread-manager', + ), '331b1611' => array( 'javelin-install', ), @@ -1888,19 +1888,6 @@ 'javelin-behavior-device', 'phabricator-keyboard-shortcut', ), - 'e67cfd8c' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-util', - 'javelin-stratcom', - 'javelin-workflow', - 'javelin-behavior-device', - 'javelin-history', - 'javelin-vector', - 'phabricator-title', - 'phabricator-shaped-request', - 'conpherence-thread-manager', - ), 'e723c323' => array( 'javelin-behavior', 'javelin-stratcom', @@ -1922,6 +1909,20 @@ 'phabricator-phtize', 'javelin-dom', ), + 'eaf57226' => 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/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 @@ -8,6 +8,7 @@ * javelin-behavior-device * javelin-history * javelin-vector + * javelin-scrollbar * phabricator-title * phabricator-shaped-request * conpherence-thread-manager @@ -23,6 +24,8 @@ node: null }; + var scrollbar = null; + // TODO - move more logic into the ThreadManager var threadManager = new JX.ConpherenceThreadManager(); threadManager.setWillLoadThreadCallback(function() { @@ -49,7 +52,7 @@ var messages_root = JX.DOM.find(root, 'div', 'conpherence-message-pane'); var messages = JX.DOM.find(messages_root, 'div', 'conpherence-messages'); JX.DOM.appendContent(messages, JX.$H(r.transactions)); - messages.scrollTop = messages.scrollHeight; + scrollbar.scrollTo(messages.scrollHeight); }); threadManager.setWillSendMessageCallback(function () { var root = JX.DOM.find(document, 'div', 'conpherence-layout'); @@ -71,7 +74,7 @@ // Ignore; maybe no files widget } JX.DOM.appendContent(messages, JX.$H(r.transactions)); - messages.scrollTop = messages.scrollHeight; + scrollbar.scrollTo(messages.scrollHeight); if (fileWidget) { JX.DOM.setContent( @@ -116,6 +119,10 @@ } markWidgetLoading(true); onDeviceChange(); + var root = JX.DOM.find(document, 'div', 'conpherence-layout'); + var messages_root = JX.DOM.find(root, 'div', 'conpherence-message-pane'); + var messages = JX.DOM.find(messages_root, 'div', 'conpherence-messages'); + scrollbar = new JX.Scrollbar(messages); } init(); @@ -320,7 +327,7 @@ function _scrollMessageWindow() { var root = JX.DOM.find(document, 'div', 'conpherence-layout'); var messages_root = JX.DOM.find(root, 'div', 'conpherence-messages'); - messages_root.scrollTop = messages_root.scrollHeight; + scrollbar.scrollTo(messages_root.scrollHeight); } function _focusTextarea() { var root = JX.DOM.find(document, 'div', 'conpherence-layout'); @@ -373,7 +380,7 @@ new JX.Workflow.newFromForm(form, data) .setHandler(JX.bind(this, function(r) { JX.DOM.appendContent(messages, JX.$H(r.transactions)); - messages.scrollTop = messages.scrollHeight; + scrollbar.scrollTo(messages.scrollHeight); JX.DOM.setContent( header, diff --git a/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js b/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js --- a/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js +++ b/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js @@ -297,7 +297,7 @@ } if (messages) { JX.DOM.appendContent(messages, JX.$H(r.transactions)); - messages.scrollTop = messages.scrollHeight; + JX.Stratcom.invoke('conpherence-redraw-thread', null, {}); } if (r.people_widget) {