Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/conpherence/behavior-durable-column.js
Show All 25 Lines | JX.behavior('durable-column', function(config, statics) { | ||||
var userVisible = config.visible; | var userVisible = config.visible; | ||||
var show = null; | var show = null; | ||||
var loadThreadID = null; | var loadThreadID = null; | ||||
var scrollbar = null; | var scrollbar = null; | ||||
var margin = JX.Scrollbar.getScrollbarControlMargin(); | var margin = JX.Scrollbar.getScrollbarControlMargin(); | ||||
var columnWidth = (300 + margin); | |||||
// This is the smallest window size where we'll enable the column. | |||||
var minimumViewportWidth = (920 - margin); | |||||
var quick = JX.$('phabricator-standard-page-body'); | var quick = JX.$('phabricator-standard-page-body'); | ||||
function _getColumnNode() { | function _getColumnNode() { | ||||
return JX.$('conpherence-durable-column'); | return JX.$('conpherence-durable-column'); | ||||
} | } | ||||
function _getColumnScrollNode() { | function _getColumnScrollNode() { | ||||
var column = _getColumnNode(); | var column = _getColumnNode(); | ||||
return JX.DOM.find(column, 'div', 'conpherence-durable-column-main'); | return JX.DOM.find(column, 'div', 'conpherence-durable-column-main'); | ||||
} | } | ||||
function _isViewportWideEnoughForColumn() { | |||||
var viewport = JX.Vector.getViewport(); | |||||
if (viewport.x < minimumViewportWidth) { | |||||
return false; | |||||
} else { | |||||
return true; | |||||
} | |||||
} | |||||
function _updateColumnVisibility() { | function _updateColumnVisibility() { | ||||
var new_value = (userVisible && _isViewportWideEnoughForColumn()); | var new_value = (userVisible); | ||||
if (new_value !== show) { | if (new_value !== show) { | ||||
show = new_value; | show = new_value; | ||||
_drawColumn(show); | _drawColumn(show); | ||||
} | } | ||||
} | } | ||||
function _toggleColumn() { | function _toggleColumn() { | ||||
userVisible = !userVisible; | userVisible = !userVisible; | ||||
_updateColumnVisibility(); | _updateColumnVisibility(); | ||||
new JX.Request(config.settingsURI) | new JX.Request(config.settingsURI) | ||||
.setData({value: (show ? 1 : 0)}) | .setData({value: (show ? 1 : 0)}) | ||||
.send(); | .send(); | ||||
} | } | ||||
function _drawColumn(visible) { | function _drawColumn(visible) { | ||||
JX.DOM.alterClass( | JX.DOM.alterClass( | ||||
document.body, | document.body, | ||||
'with-durable-column', | 'with-durable-column', | ||||
visible); | visible); | ||||
JX.DOM.alterClass( | |||||
document.body, | |||||
'with-durable-margin', | |||||
visible && !!margin); | |||||
var column = _getColumnNode(); | var column = _getColumnNode(); | ||||
if (visible) { | if (visible) { | ||||
JX.DOM.show(column); | JX.DOM.show(column); | ||||
threadManager.loadThreadByID(loadThreadID); | threadManager.loadThreadByID(loadThreadID); | ||||
} else { | } else { | ||||
JX.DOM.hide(column); | JX.DOM.hide(column); | ||||
} | } | ||||
JX.Quicksand.setFrame(visible ? quick : null); | JX.Quicksand.setFrame(visible ? quick : null); | ||||
// When we activate the column, adjust the tablet breakpoint so that we | |||||
// convert the left side of the screen to tablet mode on narrow displays. | |||||
var breakpoint; | |||||
if (visible) { | |||||
breakpoint = minimumViewportWidth + columnWidth; | |||||
} else { | |||||
breakpoint = minimumViewportWidth; | |||||
} | |||||
JX.Device.setTabletBreakpoint(breakpoint); | |||||
JX.Stratcom.invoke('resize'); | JX.Stratcom.invoke('resize'); | ||||
} | } | ||||
new JX.KeyboardShortcut('\\', 'Toggle Conpherence Column') | new JX.KeyboardShortcut('\\', 'Toggle Conpherence Column') | ||||
.setHandler(_toggleColumn) | .setHandler(_toggleColumn) | ||||
.register(); | .register(); | ||||
scrollbar = new JX.Scrollbar(_getColumnScrollNode()); | scrollbar = new JX.Scrollbar(_getColumnScrollNode()); | ||||
▲ Show 20 Lines • Show All 253 Lines • Show Last 20 Lines |