Project

General

Profile

« Previous | Next » 

Revision 5c9dc2dc

Added by Ohad Levy about 5 years ago

fixes #26554 - move class_edit to webpack.

this is a pure move + lint, no code changes introduced.

View differences:

app/assets/javascripts/class_edit.js
function filter_puppet_classes(item){
var term = $(item).val().trim();
var class_elems = $('.available_classes').find('.puppetclass_group, .puppetclass');
if (term.length > 0) {
class_elems.hide().has('[data-class-name*="'+term+'"]').show();
} else {
class_elems.show();
}
}
function add_puppet_class(item){
var id = $(item).attr('data-class-id');
var type = $(item).attr('data-type');
$(item).tooltip('hide');
var content = $(item).closest('li').clone();
content.attr('id', 'selected_puppetclass_'+ id);
content.append("<input id='" + type +"_puppetclass_ids_' name='" + type +"[puppetclass_ids][]' type='hidden' value=" +id+ ">");
var link = content.children('a');
var links = content.find('a');
links.attr('onclick', 'remove_puppet_class(this)');
links.attr('data-original-title', tfm.i18n.sprintf(__('Click to remove %s'), link.data("class-name")));
links.tooltip();
link.removeClass('glyphicon-plus-sign').addClass('glyphicon-minus-sign');
$('#selected_classes').append(content);
$("#selected_puppetclass_"+ id).show('highlight', 5000);
$("#puppetclass_"+ id).addClass('selected-marker').hide();
findElementsForRemoveIcon($("#puppetclass_"+ id));
// trigger load_puppet_class_parameters in host_edit.js which is fired by custom event handler called 'AddedClass'
$(document.body).trigger('AddedClass', link);
}
function add_group_puppet_class(item){
var id = $(item).attr('data-class-id');
var type = $(item).attr('data-type');
$(item).tooltip('hide');
var content = $(item).closest('li').clone();
content.attr('id', 'selected_puppetclass_'+ id);
content.children('span').tooltip();
content.val('');
var link = content.children('a');
var links = content.find('a');
links.attr('onclick', '');
links.attr('data-original-title', __('belongs to config group'));
links.tooltip();
link.removeClass('glyphicon-plus-sign');
$('#selected_classes').append(content);
$("#selected_puppetclass_"+ id).show('highlight', 5000);
$("#puppetclass_"+ id).addClass('selected-marker').hide();
// trigger load_puppet_class_parameters in host_edit.js which is fired by custom event handler called 'AddedClass'
$(document.body).trigger('AddedClass', link);
}
function remove_puppet_class(item){
var id = $(item).attr('data-class-id');
$('#puppetclass_' + id).removeClass('selected-marker').show();
$('#puppetclass_' + id).parent().prev().find('i').show();
$('#puppetclass_' + id).closest('.puppetclass_group').show();
$('#selected_puppetclass_' + id).children('a').tooltip('hide');
$('#selected_puppetclass_' + id).remove();
$('#puppetclass_' + id + '_params_loading').remove();
$('[id^="puppetclass_' + id + '_params\\["]').remove();
$('#params-tab').removeClass("tab-error");
if ($("#params").find('.form-group.error').length > 0) $('#params-tab').addClass('tab-error');
return false;
}
function addConfigGroup(item){
var id = $(item).attr('data-group-id');
var type = $(item).attr('data-type');
var content = $(item).closest('li').clone();
content.attr('id', 'selected_config_group_'+ id);
content.append("<input id='config_group_ids' name=" + type + "[config_group_ids][] type='hidden' value=" +id+ ">");
$("#selected_config_group_"+ id).show('highlight', 5000);
$("#config_group_"+ id).addClass('selected-marker').hide();
var link = content.children('a');
var links = content.find('a');
link.attr('onclick', 'removeConfigGroup(this)');
link.attr('data-original-title', __('Click to remove config group'));
links.tooltip();
link.removeClass('glyphicon-plus-sign').addClass('glyphicon-minus-sign');
link.text(__(' Remove'));
$('#selected_config_groups').append(content);
$("#selected_config_group_"+ id).show('highlight', 5000);
$("#config_group_"+ id).addClass('selected-marker').hide();
var puppetclass_ids = $.parseJSON($(item).attr('data-puppetclass-ids'));
var inherited_ids = $.parseJSON($('#inherited_ids').attr('data-inherited-puppetclass-ids'));
$.each(puppetclass_ids, function(index,puppetclass_id) {
var pc = $("li#puppetclass_" + puppetclass_id);
var pc_link = $("a[data-class-id='" + puppetclass_id + "']");
if ( (pc_link.length > 0) && (pc.length > 0) && ($.inArray(puppetclass_id, inherited_ids) == -1 ) ) {
if (!($("#selected_puppetclass_"+ puppetclass_id).length > 0)) {
add_group_puppet_class(pc_link);
}
}
})
}
function removeConfigGroup(item){
var id = $(item).attr('data-group-id');
$('#config_group_' + id).removeClass('selected-marker').show();
$('#selected_config_group_' + id).children('a').tooltip('hide');
$('#selected_config_group_' + id).remove();
var puppetclass_ids = $.parseJSON($(item).attr('data-puppetclass-ids'));
var inherited_ids = $.parseJSON($('#inherited_ids').attr('data-inherited-puppetclass-ids'));
$.each(puppetclass_ids, function(index,puppetclass_id){
var pc = $('#selected_puppetclass_' + puppetclass_id);
var pc_link = $("a[data-class-id='" + puppetclass_id + "']");
if ( (pc_link.length > 0) && (pc.length > 0) && ($.inArray(puppetclass_id, inherited_ids) == -1 ) ) {
remove_puppet_class(pc_link);
}
});
return false;
}
function findElementsForRemoveIcon(element) {
var clicked_element = element.parent().prev();
var ul_id = '#' + element.parent().attr('id');
removeIconIfEmpty(clicked_element, ul_id);
}
function expandClassList(clicked_element, toggle_element) {
$(toggle_element).fadeToggle();
clicked_element.find('i').toggleClass('glyphicon-plus glyphicon-minus');
removeIconIfEmpty(clicked_element, toggle_element);
}
function removeIconIfEmpty(element, ul_id) {
if ($(ul_id).children(':visible').length == 0) {
element.find('i').hide();
}
}
app/helpers/application_helper.rb
def remove_link_to_function(text, options)
options.delete_if { |key, value| !options[key].to_s } # otherwise error during template render
title = (_("Click to remove %s") % options[:"data-class-name"])
link_to_function(text, "remove_puppet_class(this)", options.merge!(:'data-original-title' => title))
link_to_function(text, "tfm.classEditor.removePuppetClass(this)", options.merge!(:'data-original-title' => title))
end
def link_to_add_puppetclass(klass, type)
......
end
def add_link_to_function(text, options)
link_to_function(text, "add_puppet_class(this)",
link_to_function(text, "tfm.classEditor.addPuppetClass(this)",
options.merge(:'data-original-title' => _("Click to add %s") % options[:"data-class-name"]))
end
app/helpers/puppetclasses_helper.rb
{}
end
link_to_function(icon_text('plus', list.first, css_options),
"expandClassList($(this), '#pc_#{list.first}')")
"tfm.classEditor.expandClassList($(this), '#pc_#{list.first}')")
end
end
app/views/config_groups/_config_group.html.erb
<%= hidden_field_tag("#{type}[config_group_ids][]", config_group.id) if added == 'manually' %>
<span>
<%= link_to(icon_text('plus', config_group.name), '#', :rel=>'twipsy', :class => 'config_group_name',
:onclick => "expandClassList($(this), '#cgroup_#{config_group.id}')",
:onclick => "tfm.classEditor.expandClassList($(this), '#cgroup_#{config_group.id}')",
:data => {:puppetclass_ids => config_group.puppetclass_ids,
:'group-id' => config_group.id,
:id => config_group.id,
......
) %>
</span>
<%= link_to(" #{added ? _('Remove') : _('Add')}", '#', :rel=>'twipsy', :class => "btn btn-default btn-sm glyphicon glyphicon-#{added ? 'minus' : 'plus'}-sign",
:onclick => (added ? 'removeConfigGroup(this)' : 'addConfigGroup(this)'),
:onclick => (added ? 'tfm.classEditor.removeConfigGroup(this)' : 'tfm.classEditor.addConfigGroup(this)'),
:data => {:puppetclass_ids => config_group.puppetclass_ids,
:'group-id' => config_group.id,
:id => config_group.id,
app/views/config_groups/_form.html.erb
<%= javascript 'class_edit' %>
<%= form_for(@config_group) do |f| %>
<%= base_errors_for @config_group %>
app/views/config_groups/index.html.erb
<%= javascript 'class_edit' %>
<% title _('Config Groups') %>
<% title_actions new_link(_('Create Config Group')), help_button %>
app/views/hostgroups/_form.html.erb
<%= javascript 'host_edit', 'host_edit_interfaces', 'class_edit' %>
<%= javascript 'host_edit', 'host_edit_interfaces' %>
<%= form_for @hostgroup, :html => {:data => {:id => @hostgroup.try(:id), :submit => 'progress_bar' }} do |f| %>
<%= base_errors_for @hostgroup %>
app/views/hosts/_form.html.erb
<%= javascript 'hosts', 'host_edit', 'host_edit_interfaces', 'class_edit', 'charts' %>
<%= javascript 'hosts', 'host_edit', 'host_edit_interfaces', 'charts' %>
<%= render "hosts/dhcp_lease_errors" if has_dhcp_lease_errors?(@host.errors) %>
<%= render "hosts/conflicts" if (!has_dhcp_lease_errors?(@host.errors) && has_conflicts?(@host.errors)) %>
<%= render "hosts/progress" %>
app/views/puppetclasses/_class_selection.html.erb
<h3><%= _('Available Classes') %></h3>
<div class='clearfix'>
<div class='form-group col-md-6'>
<input placeholder="<%= _('Filter classes') %>" class="form-control" onkeyup="filter_puppet_classes(this);" type='text'>
<input placeholder="<%= _('Filter classes') %>" class="form-control" onkeyup="tfm.classEditor.filterPuppetClasses(this);" type='text'>
</div>
</div>
<div class="row">
config/initializers/assets.rb
taxonomy_edit
gettext/all
filters
class_edit
subnets
hidden_values
proxy_status
webpack/assets/javascripts/bundle.js
advancedFields: require('./foreman_advanced_fields'),
breadcrumbs: require('./foreman_breadcrumbs'),
configReportsModalDiff: require('./foreman_config_reports_modal_diff'),
classEditor: require('./foreman_class_edit'),
dashboard: require('./foreman_dashboard'),
i18n,
document: foremanDocument,
webpack/assets/javascripts/foreman_class_edit.js
import { sprintf } from './react_app/common/I18n';
export function filterPuppetClasses(item) {
const term = $(item)
.val()
.trim();
const classElems = $('.available_classes').find(
'.puppetclass_group, .puppetclass'
);
if (term.length > 0) {
classElems
.hide()
.has(`[data-class-name*="${term}"]`)
.show();
} else {
classElems.show();
}
}
export function addPuppetClass(item) {
const id = $(item).attr('data-class-id');
const type = $(item).attr('data-type');
$(item).tooltip('hide');
const content = $(item)
.closest('li')
.clone();
content.attr('id', `selected_puppetclass_${id}`);
content.append(
`<input id='${type}_puppetclass_ids_' name='${type}[puppetclass_ids][]' type='hidden' value=${id}>`
);
const link = content.children('a');
const links = content.find('a');
links.attr('onclick', 'tfm.classEditor.removePuppetClass(this)');
links.attr(
'data-original-title',
sprintf(__('Click to remove %s'), link.data('class-name'))
);
links.tooltip();
link.removeClass('glyphicon-plus-sign').addClass('glyphicon-minus-sign');
$('#selected_classes').append(content);
$(`#selected_puppetclass_${id}`).show('highlight', 5000);
$(`#puppetclass_${id}`)
.addClass('selected-marker')
.hide();
findElementsForRemoveIcon($(`#puppetclass_${id}`));
// trigger load_puppet_class_parameters in host_edit.js which is fired by custom event handler called 'AddedClass'
$(document.body).trigger('AddedClass', link);
}
function addGroupPuppetClass(item) {
const id = $(item).attr('data-class-id');
$(item).tooltip('hide');
const content = $(item)
.closest('li')
.clone();
content.attr('id', `selected_puppetclass_${id}`);
content.children('span').tooltip();
content.val('');
const link = content.children('a');
const links = content.find('a');
links.attr('onclick', '');
links.attr('data-original-title', __('belongs to config group'));
links.tooltip();
link.removeClass('glyphicon-plus-sign');
$('#selected_classes').append(content);
$(`#selected_puppetclass_${id}`).show('highlight', 5000);
$(`#puppetclass_${id}`)
.addClass('selected-marker')
.hide();
// trigger load_puppet_class_parameters in host_edit.js which is fired by custom event handler called 'AddedClass'
$(document.body).trigger('AddedClass', link);
}
export function removePuppetClass(item) {
const id = $(item).attr('data-class-id');
$(`#puppetclass_${id}`)
.removeClass('selected-marker')
.show();
$(`#puppetclass_${id}`)
.parent()
.prev()
.find('i')
.show();
$(`#puppetclass_${id}`)
.closest('.puppetclass_group')
.show();
$(`#selected_puppetclass_${id}`)
.children('a')
.tooltip('hide');
$(`#selected_puppetclass_${id}`).remove();
$(`#puppetclass_${id}_params_loading`).remove();
$(`[id^="puppetclass_${id}_params\\["]`).remove();
$('#params-tab').removeClass('tab-error');
if ($('#params').find('.form-group.error').length > 0)
$('#params-tab').addClass('tab-error');
return false;
}
export function addConfigGroup(item) {
const id = $(item).attr('data-group-id');
const type = $(item).attr('data-type');
const content = $(item)
.closest('li')
.clone();
content.attr('id', `selected_config_group_${id}`);
content.append(
`<input id='config_group_ids' name=${type}[config_group_ids][] type='hidden' value=${id}>`
);
$(`#selected_config_group_${id}`).show('highlight', 5000);
$(`#config_group_${id}`)
.addClass('selected-marker')
.hide();
const link = content.children('a');
const links = content.find('a');
link.attr('onclick', 'tfm.classEditor.removeConfigGroup(this)');
link.attr('data-original-title', __('Click to remove config group'));
links.tooltip();
link.removeClass('glyphicon-plus-sign').addClass('glyphicon-minus-sign');
link.text(__(' Remove'));
$('#selected_config_groups').append(content);
$(`#selected_config_group_${id}`).show('highlight', 5000);
$(`#config_group_${id}`)
.addClass('selected-marker')
.hide();
const puppetclassIds = $.parseJSON($(item).attr('data-puppetclass-ids'));
const inheritedIds = $.parseJSON(
$('#inherited_ids').attr('data-inherited-puppetclass-ids')
);
$.each(puppetclassIds, (index, puppetclassId) => {
const pc = $(`li#puppetclass_${puppetclassId}`);
const pcLink = $(`a[data-class-id='${puppetclassId}']`);
if (
pcLink.length > 0 &&
pc.length > 0 &&
$.inArray(puppetclassId, inheritedIds) === -1
) {
if (!($(`#selected_puppetclass_${puppetclassId}`).length > 0)) {
addGroupPuppetClass(pcLink);
}
}
});
}
export function removeConfigGroup(item) {
const id = $(item).attr('data-group-id');
$(`#config_group_${id}`)
.removeClass('selected-marker')
.show();
$(`#selected_config_group_${id}`)
.children('a')
.tooltip('hide');
$(`#selected_config_group_${id}`).remove();
const puppetclassIds = $.parseJSON($(item).attr('data-puppetclass-ids'));
const inheritedIds = $.parseJSON(
$('#inherited_ids').attr('data-inherited-puppetclass-ids')
);
$.each(puppetclassIds, (index, puppetclassId) => {
const pc = $(`#selected_puppetclass_${puppetclassId}`);
const pcLink = $(`a[data-class-id='${puppetclassId}']`);
if (
pcLink.length > 0 &&
pc.length > 0 &&
$.inArray(puppetclassId, inheritedIds) === -1
) {
removePuppetClass(pcLink);
}
});
return false;
}
function findElementsForRemoveIcon(element) {
const clickedElement = element.parent().prev();
const ulId = `#${element.parent().attr('id')}`;
removeIconIfEmpty(clickedElement, ulId);
}
export function expandClassList(clickedElement, toggleElement) {
$(toggleElement).fadeToggle();
clickedElement.find('i').toggleClass('glyphicon-plus glyphicon-minus');
removeIconIfEmpty(clickedElement, toggleElement);
}
function removeIconIfEmpty(element, ulId) {
if ($(ulId).children(':visible').length === 0) {
element.find('i').hide();
}
}

Also available in: Unified diff