mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-21 04:50:55 +01:00
eaa883cf37
Summary: Fixes T7069. When jumping to a comment anchor, we get the scroll positions wrong. Partly this is fixing some calcaulations; partly, the "show older comments" and "scroll anchor" stuff were fighting over the scroll position. Since the anchor can take care of things on its own, just let it handle stuff. Test Plan: - Clicked comment anchors. - Loaded pages with anchors in the URI. - Loaded pages with anchors hidden behind "show older comments". In all cases, got the right scroll position. Reviewers: btrahan, chad Reviewed By: chad Subscribers: epriestley Maniphest Tasks: T7069 Differential Revision: https://secure.phabricator.com/D11540
105 lines
2.5 KiB
JavaScript
105 lines
2.5 KiB
JavaScript
/**
|
|
* @provides javelin-behavior-phabricator-show-older-transactions
|
|
* @requires javelin-behavior
|
|
* javelin-stratcom
|
|
* javelin-dom
|
|
* phabricator-busy
|
|
*/
|
|
|
|
JX.behavior('phabricator-show-older-transactions', function(config) {
|
|
|
|
function get_hash() {
|
|
return window.location.hash.replace(/^#/, '');
|
|
}
|
|
|
|
function hash_is_hidden() {
|
|
var hash = get_hash();
|
|
if (!hash) {
|
|
return false;
|
|
}
|
|
var id = 'anchor-'+hash;
|
|
try {
|
|
JX.$(id);
|
|
} catch (not_found_exception) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function check_hash() {
|
|
if (hash_is_hidden()) {
|
|
load_older(load_hidden_hash_callback);
|
|
}
|
|
}
|
|
|
|
function load_older(callback) {
|
|
var showOlderBlock = null;
|
|
try {
|
|
showOlderBlock = JX.DOM.find(
|
|
JX.$(config.timelineID),
|
|
'div',
|
|
'show-older-block');
|
|
} catch (not_found_exception) {
|
|
// we loaded everything...!
|
|
return;
|
|
}
|
|
|
|
var showOlderLink = JX.DOM.find(
|
|
showOlderBlock,
|
|
'a',
|
|
'show-older-link');
|
|
var workflow = fetch_older_workflow(
|
|
showOlderLink.href,
|
|
callback,
|
|
showOlderBlock);
|
|
var routable = workflow.getRoutable()
|
|
.setPriority(2000)
|
|
.setType('workflow');
|
|
JX.Router.getInstance().queue(routable);
|
|
}
|
|
|
|
var show_older = function(swap, r) {
|
|
JX.DOM.replace(swap, JX.$H(r.timeline).getFragment());
|
|
};
|
|
|
|
var load_hidden_hash_callback = function(swap, r) {
|
|
show_older(swap, r);
|
|
|
|
// We aren't actually doing a scroll position because
|
|
// `behavior-watch-anchor` will handle that for us.
|
|
};
|
|
|
|
var load_all_older_callback = function(swap, r) {
|
|
show_older(swap, r);
|
|
load_older(load_all_older_callback);
|
|
};
|
|
|
|
var fetch_older_workflow = function(href, callback, swap) {
|
|
return new JX.Workflow(href, config.renderData)
|
|
.setHandler(JX.bind(null, callback, swap));
|
|
};
|
|
|
|
JX.Stratcom.listen(
|
|
'click',
|
|
['show-older-block'],
|
|
function(e) {
|
|
e.kill();
|
|
var workflow = fetch_older_workflow(
|
|
JX.DOM.find(
|
|
e.getNode('show-older-block'),
|
|
'a',
|
|
'show-older-link').href,
|
|
show_older,
|
|
e.getNode('show-older-block'));
|
|
var routable = workflow.getRoutable()
|
|
.setPriority(2000)
|
|
.setType('workflow');
|
|
JX.Router.getInstance().queue(routable);
|
|
});
|
|
|
|
check_hash();
|
|
|
|
new JX.KeyboardShortcut(['@'], 'Show all older changes in the timeline.')
|
|
.setHandler(JX.bind(null, load_older, load_all_older_callback))
|
|
.register();
|
|
});
|