1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-09-20 09:18:48 +02:00
phorge-phorge/webroot/rsrc/js/application/transactions/behavior-show-older-transactions.js
epriestley 8bdc713352 Make the "Keyboard Shortcuts" dialog in Differential less hideous
Summary:
Ref T13515. Adding "\" ("Open in External Editor") made this slighlty worse, but it was already pretty bad.

Long ago the keys had a special style on them, but this got changed and dropped somewhere around D16568 -- although at the time, I think they still had a grey background (see T11654).

Some later change removed this background.

Put the background back and separate the keystrokes into groups.

Test Plan: {F7370615}

Maniphest Tasks: T13515

Differential Revision: https://secure.phabricator.com/D21141
2020-04-19 09:01:07 -07:00

120 lines
2.9 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;
}
// If the hash isn't purely numeric, ignore it. Comments always have
// numeric hashes. See PHI43 and T12970.
if (!hash.match(/^\d+$/)) {
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());
JX.Stratcom.invoke('resize');
};
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) {
var params = {
viewData: JX.JSON.stringify(config.viewData)
};
return new JX.Workflow(href, params)
.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);
});
JX.Stratcom.listen('hashchange', null, check_hash);
check_hash();
new JX.KeyboardShortcut(['@'], 'Show all older changes in the timeline.')
.setGroup('xactions')
.setHandler(JX.bind(null, load_older, load_all_older_callback))
.register();
});