$(function() { job_invocation_form_binds() });
function refresh_execution_form(perform_description_reset) {
var form = $('form#job_invocation_form');
var data = form.serializeArray();
request = $.ajax({
data: data,
type: 'POST',
url: form.attr('data-refresh-url'),
dataType: 'script'
});
request.done(function () {
password_caps_lock_hint();
form.find('a[rel="popover-modal"]').popover({html: true});
form.find('select').select2({allowClear: true});
if(perform_description_reset == true) {
var fieldset = $('fieldset#job_template_' + $('select.job_template_selector').val());
reset_description(fieldset);
}
template_change($('select.job_template_selector'));
job_invocation_form_binds();
});
}
function refresh_search_query(value){
id = value.val;
$('textarea#targeting_search_query').val($('span#bookmark_query_map span#bookmark-' + id).data('query'));
}
function show_preview_hosts_modal() {
var modal_window = $('#previewHostsModal');
var form = $('form#job_invocation_form');
var data = form.serializeArray();
request = $.ajax({
data: data,
type: 'GET',
url: modal_window.attr('data-url'),
success: function(request) {
modal_window.find('.modal-body').html(request);
},
complete: function() {
modal_window.modal({'show': true});
modal_window.find('a[rel="popover-modal"]').popover();
}
});
}
function close_preview_hosts_modal() {
var modal_window = $('#previewHostsModal');
modal_window.modal('hide');
modal_window.removeData();
modal_window.find('.modal-body').html('');
}
function job_invocation_form_binds() {
$('select.job_template_selector').on('click', function () {
provider_fieldset = $('#provider_' + $(this).data('providerType'));
$(provider_fieldset).find('fieldset.job_template_form').hide();
$('#job_template_' + $(this).val()).show();
});
$('select#job_invocation_job_category').on('change', function() {
refresh_execution_form(true);
});
$('button#refresh_execution_form').on('click', refresh_execution_form);
$('button#preview_hosts').on('click', show_preview_hosts_modal);
$('textarea#targeting_search_query').on('change', refresh_execution_form);
$('select#targeting_bookmark_id').on('change', refresh_search_query);
$('a.advanced_fields_switch').on('click', toggle_advanced_fields )
}
function toggle_advanced_fields() {
switcher = $('a.advanced_fields_switch');
original = switcher.html();
switcher.html(switcher.data('alternativeLabel'));
switcher.data('alternativeLabel', original);
switcher.siblings('i').toggleClass('fa-angle-right').toggleClass('fa-angle-down');
$('div.advanced').toggle()
}
function delayed_refresh(url, data){
setTimeout(function () {
$.ajax(
{
url: url,
data: data,
dataType: "script",
error: function() { $("div.terminal div.printable").append('
' + __('There was an error while updating the status, try refreshing the page.') + '
'); }
}
)
}, 1000);
}
function job_invocation_refresh_data(){
return {
hosts_needs_refresh: $("div#hosts").data('refresh_required'),
host_ids_needing_name_update: fetch_ids_of_hosts('name'),
host_ids_needing_status_update: fetch_ids_of_hosts('status'),
host_ids_needing_actions_update: fetch_ids_of_hosts('actions')
}
}
function fetch_ids_of_hosts(attribute){
return $('div#hosts td.host_' + attribute + '[data-refresh_required="true"]').map(function() { return $(this).data('id') }).get();
}
function regenerate_description(thing) {
var fieldset = $(thing).closest('fieldset');
var dict = load_keys(fieldset);
var format = fieldset.find('.description_format').val();
fieldset.find('.description').val(String.format(format, dict));
}
function load_keys(parent) {
var dict = {};
var pattern = $(parent).find(".description_format").val();
var re = new RegExp("%\\{([^\\}]+)\\}", "gm");
var match = re.exec(pattern);
while(match != null) {
dict[match[1]] = $(parent).find("#" + match[1]).val();
match = re.exec(pattern);
}
dict['job_category'] = $('#job_invocation_job_category').val();
dict['template_name'] = $('.job_template_selector:visible span.select2-chosen').html();
return dict;
}
function description_override(source) {
var description_format_container = $(source).closest('fieldset').find('.description_format_container');
var description_format = $(description_format_container).find('.description_format');
var old_value = $(source).val();
if($(source).is(':checked')) {
$(description_format_container).hide();
} else {
$(description_format_container).show();
}
$(source).val($(description_format).val());
$(description_format).val(old_value);
regenerate_description(description_format);
}
function template_change(source) {
var template_forms = $('fieldset.job_template_form');
for(i = 0; i < template_forms.length; i++) {
set_description_disable(template_forms[i], true);
}
var id = $(source).val();
var template_fieldset = $(source).closest('form').find('fieldset#job_template_' + id);
set_description_disable(template_fieldset, false);
regenerate_description(template_fieldset.find('.description'));
}
function set_description_disable(thing, value) {
$(thing).find('.description').prop('disabled', value);
$(thing).find('.description_format').prop('disabled', value);
$(thing).find('.description_format_override').prop('disabled', value);
}
function reset_description(fieldset) {
var checkbox = $(fieldset).find('.description_format_override');
$(fieldset).find('.description_format').val($(checkbox).val());
$(checkbox).prop('checked', true);
$(fieldset).find('.description_format_container').hide();
}
String.format = function (pattern, dict) {
if(pattern == undefined) {
return "";
}
for (var key in dict) {
var regEx = new RegExp("%\\{" + key + "\\}", "gm");
if(dict[key] == undefined) {
dict[key] = "%{" + key + "}"
}
pattern = pattern.replace(regEx, dict[key]);
}
return pattern;
};