CS-15292: Split long OS Type list when create Template,ISO.

This commit is contained in:
olgasmola 2012-07-11 16:09:38 +03:00
parent 1075344f03
commit f090fdeea7
2 changed files with 141 additions and 71 deletions

View File

@ -204,11 +204,42 @@
}
},
osTypeId: {
label: 'label.os.type',
osCategory: {
label: 'OS Category',
select: function(args) {
$.ajax({
url: createURL("listOsTypes"),
url: createURL("listOsCategories"),
dataType: "json",
async: true,
success: function(json) {
var osCats = json.listoscategoriesresponse.oscategory;
var items = [];
if (isAdmin())
items.push({id: -1, description: "All OS"});
$(osCats).each(function() {
items.push({id: this.id, description: this.name});
});
args.response.success({data: items});
}
});
}
},
osTypeId: {
label: 'label.os.type',
dependsOn: 'osCategory',
select: function(args) {
if(args.osCategory == null)
return;
var apiCmd;
if(args.osCategory == -1)
apiCmd = "listOsTypes";
else
apiCmd = "listOsTypes&oscategoryid=" + args.osCategory;
$.ajax({
url: createURL(apiCmd),
dataType: "json",
async: true,
success: function(json) {
@ -783,15 +814,46 @@
isBoolean: true,
isChecked: true
},
osCategory: {
label: 'OS Category',
dependsOn: 'isBootable',
select: function(args) {
$.ajax({
url: createURL("listOsCategories"),
dataType: "json",
async: true,
success: function(json) {
var osCats = json.listoscategoriesresponse.oscategory;
var items = [];
if (isAdmin())
items.push({id: -1, description: "All OS"});
$(osCats).each(function() {
items.push({id: this.id, description: this.name});
});
args.response.success({data: items});
}
});
}
},
osTypeId: {
label: 'label.os.type',
dependsOn: 'isBootable',
dependsOn: ['isBootable','osCategory'],
isHidden: false,
validation: { required: true },
select: function(args) {
if(args.osCategory == null)
return;
var apiCmd;
if(args.osCategory == -1)
apiCmd = "listOsTypes";
else
apiCmd = "listOsTypes&oscategoryid=" + args.osCategory;
$.ajax({
url: createURL("listOsTypes"),
url: createURL(apiCmd),
dataType: "json",
async: true,
success: function(json) {

View File

@ -117,52 +117,56 @@
var $value = $('<div>').addClass('value')
.appendTo($formItem);
var $input, $dependsOn, selectFn, selectArgs;
var dependsOn = field.dependsOn;
var dependsOn = $.isArray(field.dependsOn) ? field.dependsOn : [field.dependsOn] ; //now an array
// Depends on fields
if (field.dependsOn) {
$formItem.attr('depends-on', dependsOn);
$dependsOn = $form.find('input, select').filter(function() {
return $(this).attr('name') === dependsOn;
});
if (dependsOn.length) {
$.each(dependsOn, function(key, value){
var dependsOn = value;
if ($dependsOn.is('[type=checkbox]')) {
var isReverse = args.form.fields[dependsOn].isReverse;
// Checkbox
$dependsOn.bind('click', function(event) {
var $target = $(this);
var $dependent = $target.closest('form').find('[depends-on=\'' + dependsOn + '\']');
if (($target.is(':checked') && !isReverse) ||
($target.is(':unchecked') && isReverse)) {
$dependent.css('display', 'inline-block');
$dependent.each(function() {
if ($(this).data('dialog-select-fn')) {
$(this).data('dialog-select-fn')();
}
});
} else if (($target.is(':unchecked') && !isReverse) ||
($target.is(':checked') && isReverse)) {
$dependent.hide();
}
$dependent.find('input[type=checkbox]').click();
if (!isReverse) {
$dependent.find('input[type=checkbox]').attr('checked', false);
} else {
$dependent.find('input[type=checkbox]').attr('checked', true);
}
return true;
$formItem.attr('depends-on-'+value, dependsOn);
$dependsOn = $form.find('input, select').filter(function() {
return $(this).attr('name') === dependsOn;
});
// Show fields by default if it is reverse checkbox
if (isReverse) {
$dependsOn.click();
}
}
if ($dependsOn.is('[type=checkbox]')) {
var isReverse = args.form.fields[dependsOn].isReverse;
// Checkbox
$dependsOn.bind('click', function(event) {
var $target = $(this);
var $dependent = $target.closest('form').find('[depends-on-' + value + '=\'' + dependsOn + '\']');
if (($target.is(':checked') && !isReverse) ||
($target.is(':unchecked') && isReverse)) {
$dependent.css('display', 'inline-block');
$dependent.each(function() {
if ($(this).find('select').data('dialog-select-fn')) {
$(this).find('select').data('dialog-select-fn')();
}
});
} else if (($target.is(':unchecked') && !isReverse) ||
($target.is(':checked') && isReverse)) {
$dependent.hide();
}
$dependent.find('input[type=checkbox]').click();
if (!isReverse) {
$dependent.find('input[type=checkbox]').attr('checked', false);
} else {
$dependent.find('input[type=checkbox]').attr('checked', true);
}
return true;
});
// Show fields by default if it is reverse checkbox
if (isReverse) {
$dependsOn.click();
}
};
});
}
// Determine field type of input
@ -207,31 +211,35 @@
// Pass form item to provider for additional manipulation
$.extend(selectArgs, { $select: $input });
if (dependsOn) {
$dependsOn = $input.closest('form').find('input, select').filter(function() {
return $(this).attr('name') === dependsOn;
if (dependsOn.length) {
$.each(dependsOn, function(key, value){
var dependsOn = value;
$dependsOn = $input.closest('form').find('input, select').filter(function() {
return $(this).attr('name') === dependsOn;
});
$dependsOn.bind('change', function(event) {
var $target = $(this);
if (!$dependsOn.is('select')) return true;
var dependsOnArgs = {};
$input.find('option').remove();
if (!$target.children().size()) return true;
dependsOnArgs[dependsOn] = $target.val();
selectFn($.extend(selectArgs, dependsOnArgs));
return true;
});
if (!$dependsOn.is('select')) {
selectFn(selectArgs);
}
});
$dependsOn.bind('change', function(event) {
var $target = $(this);
if (!$dependsOn.is('select')) return true;
var dependsOnArgs = {};
$input.find('option').remove();
if (!$target.children().size()) return true;
dependsOnArgs[dependsOn] = $target.val();
selectFn($.extend(selectArgs, dependsOnArgs));
return true;
});
if (!$dependsOn.is('select')) {
selectFn(selectArgs);
}
} else {
selectFn(selectArgs);
}