mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-23 15:22:41 +01:00
e15009b76e
Summary: Ref T12733. Show a "reply" icon for replies, and make them stack directly under their parent. Test Plan: {F4968500} Reviewers: chad Reviewed By: chad Maniphest Tasks: T12733 Differential Revision: https://secure.phabricator.com/D17981
141 lines
2.7 KiB
JavaScript
141 lines
2.7 KiB
JavaScript
/**
|
|
* @provides phabricator-scroll-objective
|
|
* @requires javelin-dom
|
|
* javelin-util
|
|
* javelin-stratcom
|
|
* javelin-install
|
|
* javelin-workflow
|
|
* @javelin
|
|
*/
|
|
|
|
|
|
JX.install('ScrollObjective', {
|
|
|
|
construct : function() {
|
|
var node = this.getNode();
|
|
|
|
var onclick = JX.bind(this, this._onclick);
|
|
JX.DOM.listen(node, 'click', null, onclick);
|
|
},
|
|
|
|
members: {
|
|
_list: null,
|
|
|
|
_node: null,
|
|
_anchor: null,
|
|
|
|
_visible: false,
|
|
_callback: false,
|
|
_stack: false,
|
|
|
|
getNode: function() {
|
|
if (!this._node) {
|
|
var attributes = {
|
|
className: 'scroll-objective'
|
|
};
|
|
|
|
var content = this._getIconObject().getNode();
|
|
|
|
var node = JX.$N('div', attributes, content);
|
|
|
|
this._node = node;
|
|
}
|
|
|
|
return this._node;
|
|
},
|
|
|
|
setCallback: function(callback) {
|
|
this._callback = callback;
|
|
return this;
|
|
},
|
|
|
|
setObjectiveList: function(list) {
|
|
this._list = list;
|
|
return this;
|
|
},
|
|
|
|
_getIconObject: function() {
|
|
if (!this._iconObject) {
|
|
this._iconObject = new JX.PHUIXIconView();
|
|
}
|
|
return this._iconObject;
|
|
},
|
|
|
|
_onclick: function(e) {
|
|
(this._callback && this._callback(e));
|
|
|
|
if (e.getPrevented()) {
|
|
return;
|
|
}
|
|
|
|
e.kill();
|
|
|
|
// This is magic to account for the banner, and should probably be made
|
|
// less hard-coded.
|
|
var buffer = 48;
|
|
|
|
JX.DOM.scrollToPosition(null, JX.$V(this.getAnchor()).y - buffer);
|
|
},
|
|
|
|
setAnchor: function(node) {
|
|
this._anchor = node;
|
|
return this;
|
|
},
|
|
|
|
getAnchor: function() {
|
|
return this._anchor;
|
|
},
|
|
|
|
setIcon: function(icon) {
|
|
this._getIconObject().setIcon(icon);
|
|
return this;
|
|
},
|
|
|
|
setColor: function(color) {
|
|
this._getIconObject().setColor(color);
|
|
return this;
|
|
},
|
|
|
|
setTooltip: function(tip) {
|
|
var node = this._getIconObject().getNode();
|
|
JX.Stratcom.addSigil(node, 'has-tooltip');
|
|
JX.Stratcom.getData(node).tip = tip;
|
|
JX.Stratcom.getData(node).align = 'W';
|
|
JX.Stratcom.getData(node).size = 'auto';
|
|
return this;
|
|
},
|
|
|
|
|
|
/**
|
|
* Should this objective always stack immediately under the previous
|
|
* objective?
|
|
*
|
|
* This allows related objectives (like "comment, reply, reply") to be
|
|
* rendered in a tight sequence.
|
|
*/
|
|
setShouldStack: function(stack) {
|
|
this._stack = stack;
|
|
return this;
|
|
},
|
|
|
|
shouldStack: function() {
|
|
return this._stack;
|
|
},
|
|
|
|
show: function() {
|
|
this._visible = true;
|
|
return this;
|
|
},
|
|
|
|
hide: function() {
|
|
this._visible = false;
|
|
return this;
|
|
},
|
|
|
|
isVisible: function() {
|
|
return this._visible;
|
|
}
|
|
|
|
}
|
|
|
|
});
|