Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save techieBrandon/1864965 to your computer and use it in GitHub Desktop.
Save techieBrandon/1864965 to your computer and use it in GitHub Desktop.
<%#[terry] don't render this partial directly - instead use VulnerabilitiesHelper#bulk_actions %>
<% container = 'vuln-update-selected-dialog' + suffix %>
<% bulk_actions ||= [] %>
<a href="javascript: void(0)" class='bulk-action-activate-btn action-btn' style="display:none; float: left; margin-left: 5em;" id="bulk-action-activate<%= suffix %>"><span class="icon_view_all">Update Selected<span class="bulk-update-vuln-count"></span></span></a>
<% backup, @vulnerability = @vulnerability, nil %>
<div id="hidden-<%= container %>" class="<%= container %> hidden-vuln-update-selected-dialog" style="display: none;">
<%= form_tag(params.merge(:action => :bulk_update), :id => "vuln-bulk-update-form#{suffix}") do %>
<% bulk_actions.each do |action| %>
<%= render(:partial => "/vulnerabilities/bulk_update/#{action}", :locals => {:vuln => backup}) %>
<% end %>
<% end -%>
</div>
<script type="text/javascript">
$(function() {
var dialogName = '<%= container %>';
var dialogHandle = "#" + dialogName;
var trigger = '#bulk-action-activate<%= suffix %>';
var parent = '#<%= parent %>';
var xhr = <%= xhr %>;
var submitHandler = <%= submit %>;
var formHandle = "#vuln-bulk-update-form<%= suffix %>";
$(trigger).click(function(event) {
event.preventDefault();
var hidden_vuln_update_selected_dialog = $("#hidden-" + dialogName);
if($.neo.loadedDialogs[dialogName] === undefined) {
$.neo.loadedDialogs[dialogName] = add_attachment_dialog = $('<div></div>')
.html(
function(){
hidden_vuln_update_selected_dialog.attr("style", "");
return hidden_vuln_update_selected_dialog;
}()
)
.neodialog({
modal: true,
autoOpen: false,
dialogClass: 'neo-green update-selected',
title: "Update Selected",
resizable: false,
titleButtons: [{
text: 'Update',
fx: function(event){
event.preventDefault();
$(dialogHandle).append($.neo.loadedDialogs[dialogName].clone().attr('style', 'display:none;'));
var selects = $.neo.loadedDialogs[dialogName].find("select");
$(selects).each(function(i) {
var select = this;
$(formHandle).find("select").eq(i).val($(select).val());
});
$.each($(parent + ' .vulnerability_checkbox:checked'), function(i, checkbox){
$(formHandle).append("<input type='checkbox' checked='checked' style='display:none;' name='vulnerability_ids[]' value='" + $(checkbox).val() + "'/>");
});
if(xhr) {
$.neo.loadedDialogs[dialogName].neodialog('close');
submitHandler($(formHandle).serializeJSON());
} else {
$(formHandle).submit();
}
}
}],
width: '400px',
}).neodialog('open');
} else {
$.neo.loadedDialogs[dialogName].find("form")[0].reset();
$.neo.loadedDialogs[dialogName].neodialog('open');
}
});
var select_all_matching = function(parent) {
var checkbox_selector = parent + " .vulnerability_checkbox";
var all_checkbox_selector = parent +" .select_all_vulnerabilities_checkbox";
var count_label_selector = parent+" .vuln_count_label";
var results_count_total_selector = parent+" .vul_count_total";
var update_button_selector = parent+" .bulk-action-activate-btn";
var bulk_update_all_on_page_selector = parent+" .bulk_update_select_all_page_btn"
var total_results = ($(results_count_total_selector).size()==0) ? 0 : $(results_count_total_selector).first().val();
var update_all_field = $('<input class="bulk_update_type_field" name="update_all" type="hidden" value="true" />');
$(parent +" .bulk_update_type_field").remove();
$(formHandle).append(update_all_field);
$(count_label_selector).each(function(){
$(this).html('All vulnerabilities matching query selected. <a class="bulk_update_select_all_page_btn" href="javascript: void(0);">Click</a> to select only results on this page');
$(bulk_update_all_on_page_selector).click(function(){
select_all_on_pivot(parent)
});
});
$(checkbox_selector).attr('checked', true);
$(checkbox_selector).attr('disabled', true);
$(all_checkbox_selector).attr('checked', true);
$(all_checkbox_selector).attr('disabled', true);
};
var select_all_on_pivot = function(parent) {
var checkbox_selector = parent + " .vulnerability_checkbox";
var all_checkbox_selector = parent + " .select_all_vulnerabilities_checkbox";
var count_label_selector = parent + " .vuln_count_label";
var bulk_update_all_matching_selector = parent + " .bulk_update_select_all_btn"
var number_checked = $(checkbox_selector).filter(':checked').length;
$(parent + " .bulk_update_type_field").remove();
$(count_label_selector).each(function(){
$(this).html(String(number_checked)+' selected. <a class="bulk_update_select_all_btn" href="javascript: void(0);">Click</a> to select all results matching query.');
$(bulk_update_all_matching_selector).click(function(){
select_all_matching(parent);
});
});
$(checkbox_selector).attr('disabled', false);
$(checkbox_selector).attr('checked', true);
$(all_checkbox_selector).attr('disabled', false);
$(all_checkbox_selector).attr('checked', true);
};
var refresh_bulk_update_view = function(parent){
var checkbox_selector = parent + " .vulnerability_checkbox";
var all_checkbox_selector = parent + " .select_all_vulnerabilities_checkbox";
var count_label_selector = parent + " .vuln_count_label";
var results_count_total_selector = parent + " .vuln_count_total";
var update_button_selector = parent + " .bulk-action-activate-btn";
var bulk_update_all_matching_selector = parent + " .bulk_update_select_all_btn"
var number_checked = $(checkbox_selector).filter(':checked').length;
var number_unchecked = $(checkbox_selector).not(':checked').length;
var total_results = ($(results_count_total_selector).size()==0) ? 0 : $(results_count_total_selector).first().val();
if(number_checked > 0){
$(update_button_selector).show();
if(number_unchecked == 0){
$(count_label_selector).each(function(){
$(this).html('All '+String(number_checked)+' selected. <a class="bulk_update_select_all_btn" href="javascript: void(0);">Click</a> to select all results matching query.');
select_all_matching(parent);
});
}else{
$(parent + " .bulk_update_type_field").remove();
$(all_checkbox_selector).attr('checked', false);
$(checkbox_selector).attr('disabled', false);
$(update_button_selector).show();
$(count_label_selector).each(function(){
$(this).html(String(number_checked)+" selected.");
});
}
}else{
$(count_label_selector).each(function(){ $(this).html(""); });
$(update_button_selector).hide();
$(checkbox_selector).attr('disabled', false);
$(all_checkbox_selector).attr('checked', false);
}
};
$(parent + " .vulnerability_checkbox").click(function() {
refresh_bulk_update_view(parent);
});
$(parent + " .select_all").click(function(){
var checkbox_selector = parent + " .vulnerability_checkbox";
var all_checkbox_selector = parent + " .select_all_vulnerabilities_checkbox";
$(checkbox_selector).attr('checked', $(all_checkbox_selector).is(':checked'));
refresh_bulk_update_view(parent);
});
});
</script>
<% @vulnerability = backup %>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment