Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/webroot/rsrc/js/application/transactions/behavior-show-older-transactions.js
12242 views
1
/**
2
* @provides javelin-behavior-phabricator-show-older-transactions
3
* @requires javelin-behavior
4
* javelin-stratcom
5
* javelin-dom
6
* phabricator-busy
7
*/
8
9
JX.behavior('phabricator-show-older-transactions', function(config) {
10
11
function get_hash() {
12
return window.location.hash.replace(/^#/, '');
13
}
14
15
function hash_is_hidden() {
16
var hash = get_hash();
17
if (!hash) {
18
return false;
19
}
20
21
// If the hash isn't purely numeric, ignore it. Comments always have
22
// numeric hashes. See PHI43 and T12970.
23
if (!hash.match(/^\d+$/)) {
24
return false;
25
}
26
27
var id = 'anchor-'+hash;
28
try {
29
JX.$(id);
30
} catch (not_found_exception) {
31
return true;
32
}
33
return false;
34
}
35
36
function check_hash() {
37
if (hash_is_hidden()) {
38
load_older(load_hidden_hash_callback);
39
}
40
}
41
42
function load_older(callback) {
43
var showOlderBlock = null;
44
try {
45
showOlderBlock = JX.DOM.find(
46
JX.$(config.timelineID),
47
'div',
48
'show-older-block');
49
} catch (not_found_exception) {
50
// we loaded everything...!
51
return;
52
}
53
54
var showOlderLink = JX.DOM.find(
55
showOlderBlock,
56
'a',
57
'show-older-link');
58
var workflow = fetch_older_workflow(
59
showOlderLink.href,
60
callback,
61
showOlderBlock);
62
var routable = workflow.getRoutable()
63
.setPriority(2000)
64
.setType('workflow');
65
JX.Router.getInstance().queue(routable);
66
}
67
68
var show_older = function(swap, r) {
69
JX.DOM.replace(swap, JX.$H(r.timeline).getFragment());
70
JX.Stratcom.invoke('resize');
71
};
72
73
var load_hidden_hash_callback = function(swap, r) {
74
show_older(swap, r);
75
76
// We aren't actually doing a scroll position because
77
// `behavior-watch-anchor` will handle that for us.
78
};
79
80
var load_all_older_callback = function(swap, r) {
81
show_older(swap, r);
82
load_older(load_all_older_callback);
83
};
84
85
var fetch_older_workflow = function(href, callback, swap) {
86
var params = {
87
viewData: JX.JSON.stringify(config.viewData)
88
};
89
90
return new JX.Workflow(href, params)
91
.setHandler(JX.bind(null, callback, swap));
92
};
93
94
JX.Stratcom.listen(
95
'click',
96
['show-older-block'],
97
function(e) {
98
e.kill();
99
var workflow = fetch_older_workflow(
100
JX.DOM.find(
101
e.getNode('show-older-block'),
102
'a',
103
'show-older-link').href,
104
show_older,
105
e.getNode('show-older-block'));
106
var routable = workflow.getRoutable()
107
.setPriority(2000)
108
.setType('workflow');
109
JX.Router.getInstance().queue(routable);
110
});
111
112
JX.Stratcom.listen('hashchange', null, check_hash);
113
114
check_hash();
115
116
new JX.KeyboardShortcut(['@'], 'Show all older changes in the timeline.')
117
.setGroup('xactions')
118
.setHandler(JX.bind(null, load_older, load_all_older_callback))
119
.register();
120
});
121
122