Add persistent/cache switch to collections index page.
[arvados.git] / apps / workbench / app / assets / javascripts / collections.js
1 jQuery(function($){
2     $(document).on('change', '.toggle-persist input[name=wants]', function() {
3         var toggle_group = $(this).parents('[data-remote-href]').first();
4         if (toggle_group.attr('data-persistent-state') == $(this).val()) {
5             // When the user clicks the already-selected choice, or
6             // the fail() handler below reverts state to the existing
7             // state, don't start an AJAX request.
8             return;
9         }
10         $.ajax(toggle_group.attr('data-remote-href'),
11                {dataType: 'json',
12                 type: 'POST',
13                 data: {
14                     value: $(this).val()
15                 },
16                 context: {
17                     toggle_group: toggle_group,
18                     input: this
19                 }
20                }).
21             done(function(data, status, jqxhr) {
22                 var context = this;
23                 $(document).trigger('ajax:complete');
24                 // Remove "danger" status in case a previous action failed
25                 $('label.btn-danger', context.toggle_group).
26                     addClass('btn-info').
27                     removeClass('btn-danger');
28                 // Update last-saved-state
29                 context.toggle_group.
30                     attr('data-persistent-state', $(context.input).val());
31             }).
32             fail(function(jqxhr, status, error) {
33                 var context = this;
34                 $(document).trigger('ajax:complete');
35                 // Add a visual indication that something failed
36                 $('label.btn', context.toggle_group).
37                     addClass('btn-danger').
38                     removeClass('btn-info');
39                 // Select the button reflecting the last-saved-state
40                 $('label.btn input[value=' +
41                   context.toggle_group.attr('data-persistent-state') +
42                   ']', context.toggle_group).
43                     button('toggle');
44                 if (jqxhr.responseJSON && jqxhr.responseJSON.errors) {
45                     window.alert("Request failed: " +
46                                  jqxhr.responseJSON.errors.join("; "));
47                 } else {
48                     window.alert("Request failed.");
49                 }
50             });
51         $(document).trigger('ajax:send');
52     });
53 });