Bulk action extension
This commit is contained in:
197
ext/bulk_actions/script.js
Normal file
197
ext/bulk_actions/script.js
Normal file
@ -0,0 +1,197 @@
|
||||
/*jshint bitwise:true, curly:true, forin:false, noarg:true, noempty:true, nonew:true, undef:true, strict:false, browser:true, jquery:true */
|
||||
|
||||
var bulk_selector_active = false;
|
||||
var bulk_selector_initialized = false;
|
||||
var bulk_selector_valid = false;
|
||||
|
||||
function validate_selections(form, confirmationMessage) {
|
||||
var queryOnly = false;
|
||||
if(bulk_selector_active) {
|
||||
var data = get_selected_items();
|
||||
if(data.length==0) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
var query = $(form).find('input[name="bulk_query"]').val();
|
||||
|
||||
if (query == null || query == "") {
|
||||
return false;
|
||||
} else {
|
||||
queryOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(confirmationMessage!=null&&confirmationMessage!="") {
|
||||
return confirm(confirmationMessage);
|
||||
} else if(queryOnly) {
|
||||
var action = $(form).find('input[name="bulk_action"]').val();
|
||||
|
||||
return confirm("Perform bulk action \"" + action + "\" on all images matching the current search?");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function activate_bulk_selector () {
|
||||
set_selected_items([]);
|
||||
if(!bulk_selector_initialized) {
|
||||
$("a.shm-thumb").each(
|
||||
function (index, block) {
|
||||
add_selector_button($(block));
|
||||
}
|
||||
);
|
||||
}
|
||||
$('#bulk_selector_controls').show();
|
||||
$('#bulk_selector_activate').hide();
|
||||
bulk_selector_active = true;
|
||||
bulk_selector_initialized = true;
|
||||
}
|
||||
|
||||
function deactivate_bulk_selector() {
|
||||
set_selected_items([]);
|
||||
$('#bulk_selector_controls').hide();
|
||||
$('#bulk_selector_activate').show();
|
||||
bulk_selector_active = false;
|
||||
}
|
||||
|
||||
function get_selected_items() {
|
||||
var data = $('#bulk_selected_ids').val();
|
||||
if(data==""||data==null) {
|
||||
data = [];
|
||||
} else {
|
||||
data = JSON.parse(data);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
function set_selected_items(items) {
|
||||
$("a.shm-thumb").removeClass('selected');
|
||||
|
||||
$(items).each(
|
||||
function(index,item) {
|
||||
$('a.shm-thumb[data-post-id="' + item + '"]').addClass('selected');
|
||||
}
|
||||
);
|
||||
|
||||
$('input[name="bulk_selected_ids"]').val(JSON.stringify(items));
|
||||
}
|
||||
|
||||
function select_item(id) {
|
||||
var data = get_selected_items();
|
||||
if(!data.includes(id))
|
||||
data.push(id);
|
||||
set_selected_items(data);
|
||||
}
|
||||
|
||||
function deselect_item(id) {
|
||||
var data = get_selected_items();
|
||||
if(data.includes(id))
|
||||
data.splice(data.indexOf(id, 1));
|
||||
set_selected_items(data);
|
||||
}
|
||||
|
||||
function toggle_selection( id ) {
|
||||
var data = get_selected_items();
|
||||
console.log(id);
|
||||
if(data.includes(id)) {
|
||||
data.splice(data.indexOf(id),1);
|
||||
set_selected_items(data);
|
||||
return false;
|
||||
} else {
|
||||
data.push(id);
|
||||
set_selected_items(data);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function select_all() {
|
||||
var items = [];
|
||||
$("a.shm-thumb").each(
|
||||
function ( index, block ) {
|
||||
block = $(block);
|
||||
var id = block.data("post-id");
|
||||
items.push(id);
|
||||
}
|
||||
);
|
||||
set_selected_items(items);
|
||||
}
|
||||
|
||||
function select_invert() {
|
||||
var currentItems = get_selected_items();
|
||||
var items = [];
|
||||
$("a.shm-thumb").each(
|
||||
function ( index, block ) {
|
||||
block = $(block);
|
||||
var id = block.data("post-id");
|
||||
if(!currentItems.includes(id)) {
|
||||
items.push(id);
|
||||
}
|
||||
}
|
||||
);
|
||||
set_selected_items(items);
|
||||
}
|
||||
|
||||
function select_none() {
|
||||
set_selected_items([]);
|
||||
}
|
||||
|
||||
function select_range(start, end) {
|
||||
var data = get_selected_items();
|
||||
var selecting = false;
|
||||
$("a.shm-thumb").each(
|
||||
function ( index, block ) {
|
||||
block = $(block);
|
||||
var id = block.data("post-id");
|
||||
if(id==start)
|
||||
selecting = true;
|
||||
|
||||
if(selecting) {
|
||||
if(!data.includes(id))
|
||||
data.push(id);
|
||||
}
|
||||
|
||||
if(id==end) {
|
||||
selecting = false;
|
||||
}
|
||||
}
|
||||
);
|
||||
set_selected_items(data);
|
||||
}
|
||||
|
||||
var last_clicked_item;
|
||||
|
||||
function add_selector_button($block) {
|
||||
var c = function(e) {
|
||||
if(!bulk_selector_active)
|
||||
return true;
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
var id = $block.data("post-id");
|
||||
if(e.shiftKey) {
|
||||
if(last_clicked_item<id) {
|
||||
select_range(id, last_clicked_item);
|
||||
} else {
|
||||
select_range(last_clicked_item, id);
|
||||
}
|
||||
} else {
|
||||
last_clicked_item = id;
|
||||
toggle_selection(id);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
$block.find("A").click(c);
|
||||
$block.click(c); // sometimes the thumbs *is* the A
|
||||
}
|
||||
|
||||
|
||||
|
||||
$(function () {
|
||||
// Clear the selection, in case it was autocompleted by the browser.
|
||||
$('#bulk_selected_ids').val("");
|
||||
});
|
Reference in New Issue
Block a user