12
12
<script type="text/javascript">
13
LPS.use('node', 'io-base', 'lazr.anim', 'lp.soyuz.base',
14
'lp.app.widgets.expander', function(Y) {
13
LPS.use('node', 'io-base', 'lazr.anim', 'lp.soyuz.base', function(Y) {
21
20
function informFailure(transaction_id, response, args) {
21
function retry_handler(e) {
23
startUpdate(args.container);
22
26
var failure_message = Y.lp.soyuz.base.makeFailureNode(
23
'Failed to fetch package details.');
27
'Failed to fetch package details.', retry_handler);
25
args.expander.receive(failure_message);
29
args.container.set('innerHTML', '');
30
args.container.appendChild(failure_message);
27
32
var anim = Y.lazr.anim.red_flash({
28
node: args.expander.content_node
35
40
* Update the row with the XHR response.
37
42
function doUpdate(transaction_id, response, args) {
38
var node = Y.Node.create('<div />')
39
.set('innerHTML', response.responseText);
40
args.expander.receive(node);
43
args.container.set('innerHTML', response.responseText);
45
* Dispatch a XHR to load the given container.
48
* Dispatch a XHR for updating the given container.
47
function loadDetails(expander) {
50
function startUpdate(container) {
51
var in_progress_message = Y.lp.soyuz.base.makeInProgressNode(
52
'Fetching package details ...')
54
container.set('innerHTML', '');
55
container.appendChild(in_progress_message);
66
74
? LP.cache['archive_context_url']
68
76
if (base_url !== '') {
71
var pub_id = expander.content_node.get('id')
73
.replace('-container', '');
79
var pub_id = container.get('id').replace(
80
'-container', '').replace('pub', '');
74
81
var uri = base_url + '+sourcepub/' + pub_id + '/+listing-archive-extra';
79
* Setup expander handlers.
87
* Toggle the visibility of the expander targeted and the visual of
88
* the expander itself.
90
function toggleExpandableRow(expander) {
91
var row = Y.one('#' + expander.get('id').replace('-expander', ''));
92
var icon = expander.one('img');
94
var row_display = row.getStyle('display');
95
if (row_display == 'none') {
96
row.setStyle('display', 'table-row');
97
icon.set('src', '/@@/treeExpanded');
98
var container = Y.one('#' + row.get('id') + '-container');
99
if (trim(container.get('innerHTML')) == ''){
100
startUpdate(container);
104
row.setStyle('display', 'none');
105
icon.set('src', '/@@/treeCollapsed');
111
* Setup expander handlers and pre-load 'treeExpanded', 'no' and
112
* 'spinner' images for better reponsiveness.
81
114
function setupPackageListExpanders() {
115
var spinner = new Image();
116
spinner.src = '/@@/spinner';
118
var no = new Image();
121
var tree_expanded = new Image();
122
tree_expanded.src = '/@@/treeExpanded';
124
function expander_handler (e) {
126
toggleExpandableRow(e.currentTarget);
129
// Note: there are situations, such as displaying empty result
130
// sets, when there will not be any links for expanders on the page.
82
131
var expanders = Y.all('#packages_list a.expander');
84
if (expanders !== null) {
85
function setupExpander(expander) {
86
var base_id = expander.get('id').replace('-expander', '');
87
var container = Y.one('#' + base_id);
88
var content = container.one('td div.package-details');
89
var in_progress_message = Y.lp.soyuz.base.makeInProgressNode(
90
'Fetching package details ...');
92
content.appendChild(in_progress_message);
94
widget = new Y.lp.app.widgets.expander.Expander(
95
expander, container, { loader: loadDetails,
96
animate_node: content });
99
expanders.each(setupExpander);
132
if (expanders !== null){
133
expanders.on("click", expander_handler);