//= require jquery
//= require jquery_ujs
/** Javascript for local persistent selection. */
get_selection_list = null;
form_selection_sources = {};
jQuery(function($){
var storage = localStorage; // sessionStorage
get_selection_list = function() {
if (!storage.persistentSelection) {
storage.persistentSelection = JSON.stringify([]);
}
return JSON.parse(storage.persistentSelection);
}
var put_storage = function(lst) {
storage.persistentSelection = JSON.stringify(lst);
}
var add_selection = function(uuid, name, href, type) {
var lst = get_selection_list();
lst.push({"uuid": uuid, "name": name, "href": href, "type": type});
put_storage(lst);
update_count();
};
var remove_selection = function(uuid) {
var lst = get_selection_list();
for (var i = 0; i < lst.length; i++) {
if (lst[i].uuid == uuid) {
lst.splice(i, 1);
i--;
}
}
put_storage(lst);
update_count();
};
var remove_selection_click = function(e) {
remove_selection($(this).val());
};
var clear_selections = function() {
put_storage([]);
update_count();
}
var update_count = function(e) {
var html;
var this_object_uuid = $('#selection-form-content').
closest('form').
find('input[name=uuid]').val();
var lst = get_selection_list();
$("#persistent-selection-count").text(lst.length);
if (lst.length > 0) {
html = '
Clear selections';
$('#selection-form-content').html(html);
for (var i = 0; i < lst.length; i++) {
$('#selection-form-content > li > table').append(""
+ ""
+ ""
+ " | "
+ ""
+ ""
+ " | "
+ ""
+ "" + lst[i].type + ""
+ " | "
+ "
");
}
} else {
$('#selection-form-content').html("No selections.");
}
var checkboxes = $('.persistent-selection:checkbox');
for (i = 0; i < checkboxes.length; i++) {
for (var j = 0; j < lst.length; j++) {
if (lst[j].uuid == $(checkboxes[i]).val()) {
checkboxes[i].checked = true;
break;
}
}
if (j == lst.length) {
checkboxes[i].checked = false;
}
}
$('.remove-selection').on('click', remove_selection_click);
$('#clear_selections_button').on('click', clear_selections);
$(document).trigger('selections-updated', [lst]);
};
$(document).
on('change', '.persistent-selection:checkbox', function(e) {
var inc = 0;
if ($(this).is(":checked")) {
add_selection($(this).val(), $(this).attr('friendly_name'), $(this).attr('href'), $(this).attr('friendly_type'));
}
else {
remove_selection($(this).val());
}
});
$(window).on('load', clear_selections);
$(window).on('storage', update_count);
$('#selection-form-content').on("click", function(e) {
e.stopPropagation();
});
});
add_form_selection_sources = null;
select_form_sources = null;
(function() {
var form_selection_sources = {};
add_form_selection_sources = function (src) {
for (var i = 0; i < src.length; i++) {
var t = form_selection_sources[src[i].type];
if (!t) {
t = form_selection_sources[src[i].type] = {};
}
if (!t[src[i].uuid]) {
t[src[i].uuid] = src[i];
}
}
};
select_form_sources = function(type) {
var ret = [];
if (get_selection_list) {
var lst = get_selection_list();
if (lst.length > 0) {
var text = "― Selections ―";
var span = document.createElement('span');
span.innerHTML = text;
ret.push({text: span.innerHTML, value: "***invalid***"});
for (var i = 0; i < lst.length; i++) {
if (lst[i].type == type) {
var n = lst[i].name;
n = n.replace(/]*>/i, "[");
n = n.replace(/<\/span>/i, "]");
ret.push({text: n, value: lst[i].uuid})
}
}
}
}
var text = "― Recent ―";
var span = document.createElement('span');
span.innerHTML = text;
ret.push({text: span.innerHTML, value: "***invalid***"});
var t = form_selection_sources[type];
for (var key in t) {
if (t.hasOwnProperty(key)) {
var obj = t[key];
ret.push({text: obj.name, value: obj.uuid})
}
}
return ret;
};
})();
function dispatch_selection_action() {
// Build a new "href" attribute for this link by starting with the
// "data-href" attribute and appending ?foo[]=bar&foo[]=baz (or
// &foo=... as appropriate) to reflect the current object
// selections.
var data = [];
var param_name = $(this).attr('data-selection-param-name');
var href = $(this).attr('data-href');
if ($(this).closest('.disabled').length > 0) {
return false;
}
$(this).
closest('.selection-action-container').
find(':checkbox:checked:visible').
each(function() {
data.push({name: param_name, value: $(this).val()});
});
if (href.indexOf('?') >= 0)
href += '&';
else
href += '?';
href += $.param(data, true);
$(this).attr('href', href);
return true;
}
function enable_disable_selection_actions() {
var $container = $(this).closest('.selection-action-container');
var $checked = $('.persistent-selection:checkbox:checked', $container);
$('[data-selection-action]').
closest('div.btn-group-sm').
find('ul li').
toggleClass('disabled', ($checked.length == 0));
$('[data-selection-action=compare]').
closest('li').
toggleClass('disabled',
($checked.filter('[value*=-d1hrv-]').length < 2) ||
($checked.not('[value*=-d1hrv-]').length > 0));
<% unless Group.copies_to_projects? %>
$('[data-selection-action=copy]').
closest('li').
toggleClass('disabled',
($checked.filter('[value*=-j7d0g-]').length > 0) ||
($checked.length < 1));
<% end %>
$('[data-selection-action=combine-project-contents]').
closest('li').
toggleClass('disabled',
($checked.filter('[value*=-4zz18-]').length < 1) ||
($checked.length != $checked.filter('[value*=-4zz18-]').length));
}
$(document).
on('selections-updated ready ajax:complete', function() {
var $btn = $('[data-selection-action]');
$btn.click(dispatch_selection_action);
enable_disable_selection_actions.call($btn);
});