On 11/11/2014 12:27 AM, Wen Wang
wrote:
Hi Aline,
When using iSCSI or SCSI, the disk size is read from the
response and the input is disabled:
I tested it and it is not working in that way for me.
I tested on Fedora 20 and Firefox 33.
Above is my 1G iSCSI test from my machine. The function is
realized by the code below:
+ $('select',
'#form-template-storage').change(function() {
+ var selectedItem =
$(this).parent().parent();
+ var tempStorageName = $(this).val();
+ tempStorageName
=tempStorageName.split('/')[0];
+ var scsiCap;
+ $.each(result, function(index,
storageEntities) {
+ if (tempStorageName ===
storageEntities.name) {
+
selectedItem.find('.template-storage-type').val(storageEntities.type);
+ scsiCap = storageEntities.capacity
/ Math.pow(1024, 3);
}
+ })
+ if (tempStorageName === 'iscsi' ||
tempStorageName === 'scsi') {
+ $('.template-storage-disk',
selectedItem).attr('readonly', true).val(scsiCap);
+ } else {
+ $('.template-storage-disk',
selectedItem).attr('readonly', false).val('10');
}
});
Best Regards
Wang Wen
On 11/10/2014 11:54 PM, Aline
Manera wrote:
Just one comment;
When a SCSI/iSCSI pool/volume is selected the the "Disk size"
must be set with the volume size and the input box must be
disabled.
It was done by the following code:
- $('#template-edit-storagePool').change(function() {
- storagepool = $(this).val();
- var storageArray = storagepool.split("/");
- if (storageArray.length > 3) {
- volumeName = storageArray.pop();
- poolName = storageArray.pop();
- kimchi.getStoragePoolVolume(poolName, volumeName,
function(result) {
- $('input[name="disks"]',
templateEditForm).val(result.capacity / Math.pow(1024,3));
- $('input[name="disks"]',
templateEditForm).attr('disabled','disabled');
- return false;
- }, function (err) {
-
kimchi.message.error(err.responseJSON.reason);
On 11/05/2014 08:17 AM, Wen Wang wrote:
From: Wen Wang <wenwang@linux.vnet.ibm.com>
V1 -> V2:
1) Enable "iSCSI" and "SCSI" for storage.
2) Changed the storage tab from "storage" to "Storage".
3) Fix the defect that when editing/adding "Storage" or
"Interface" line
went down issue.
4) "Storage" and "Interface" content can display properly on
Remote and
Image created template.
5) Fix the defect that "Image" didn't show properly when
using a Image
created template.
This patch redesigned "Edit Template" diaguage in
"Templates". New "Edit
Template" will display all the related information into tabs
of
"General", "Storage" and "Interface". Due to unfinished
back-end work,
functions are not fully supported, which will be finished in
the future
work.
Temporary disabled functions:
1) Multiple disk operation with multiple storage pools edit
in template
for which reason the add button in "Storage" tab is
disabled.
2) iSCSI and SCSI storage pool add is removed since we are
going to
allow this kind of operation in the process of creating a
VM.
Signed-off-by: Wen Wang <wenwang@linux.vnet.ibm.com>
---
ui/css/theme-default/template-edit.css | 116 +++++++----
ui/js/src/kimchi.template_edit_main.js | 364
+++++++++++++++++++++++---------
ui/pages/template-edit.html.tmpl | 168
++++++++-------
3 files changed, 432 insertions(+), 216 deletions(-)
diff --git a/ui/css/theme-default/template-edit.css
b/ui/css/theme-default/template-edit.css
index 4975f1b..094e909 100644
--- a/ui/css/theme-default/template-edit.css
+++ b/ui/css/theme-default/template-edit.css
@@ -17,24 +17,33 @@
*/
#template-edit-window {
font-size: 13px;
- height: 600px;
- width: 1000px;
+ height: 500px;
+ width: 800px;
}
-.template-edit-fieldset {
- float: left;
- padding: 1em;
+#edit-template-tabs {
+ background: none repeat scroll 0 0 transparent;
+ border: medium none;
+ height: 100%;
+ padding: 0;
}
-.template-edit-wrapper-label,
.template-edit-wrapper-controls {
+#edit-template-tabs .form-template-inline-wrapper {
+ display: inline-block;
vertical-align: top;
- width: 470px;
}
.template-edit-wrapper-label {
- height: 18px;
- line-height: 18px;
- margin-top: 8px;
+ vertical-align: top;
+ min-width: 100px;
+ height: 35px;
+ line-height: 35px;
+ margin: 7px 0 8px;
+}
+
+.template-edit-wrapper-controls {
+ vertical-align: top;
+ width: 400px;
}
.template-edit-wrapper-controls input[type="text"] {
@@ -56,7 +65,7 @@
.template-edit-wrapper-controls > .dropdown {
margin: 5px 0 0 1px;
- width: 440px;
+ width: 372px;
}
.template-edit-wrapper-controls
input[type="text"][disabled] {
@@ -65,41 +74,72 @@
cursor: not-allowed;
}
-.hidden-area {
- display: none;
+#edit-template-tabs .template-tab-header {
+ margin-bottom: 8px;
+ padding-bottom: 2px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ overflow: hidden;
}
-.template-edit-wrapper-controls .select-list-box {
- width: 464px;
- max-height: 168px;
- overflow: auto;
- margin-top: 5px;
- border: 1px solid #ccc;
+#edit-template-tabs .template-tab-header .action-area {
+ float: right;
+ height: 20px;
+ width: 20px;
}
-.template-edit-wrapper-controls
.select-list-box>li>label {
- display: block;
+#edit-template-tabs .template-interface-cell {
+ display: inline-block;
+ width: 250px;
}
-.template-edit-wrapper-controls
.select-list-box>li>label>
-input[type="checkbox"] {
- display: none;
+#edit-template-tabs .template-storage-cell{
+ display: inline-block;
+ width: 230px;
+}
+
+#edit-template-tabs .template-storage-cell label {
+ height: 25px;
+ padding: 2px;
+ border: 1px;
}
-.template-edit-wrapper-controls
.select-list-box>li>label>.item {
- display: block;
- height: 41px;
- line-height: 41px;
- padding: 0 20px 0 40px;
- border-bottom: 1px solid #ccc;
- box-shadow: 0px 1px 1px #fff;
- text-shadow: -1px -1px 1px #ddd, 1px 1px 1px #fff;
- color: #222;
- font-size: 12px;
+#form-template-storage .template-tab-body select {
+ width: 140px;
}
-.template-edit-wrapper-controls
.select-list-box>li>label>
-input[type="checkbox"]:CHECKED+.item {
- background: #f8f8f8
url(../images/theme-default/check-green.png) no-repeat
- 10px center;
+#form-template-storage .template-tab-body input {
+ width: 56px;
+ height: 17px;
}
+
+#form-template-storage .template-tab-body
.template-storage-name {
+ width: 220px;
+}
+
+#edit-template-tabs .template-tab-body input[readonly] {
+ background: none repeat scroll 0 0 rgba(0, 0, 0, 0);
+ border-color: transparent;
+ text-overflow: ellipsis;
+}
+
+#edit-template-tabs .template-tab-body .item {
+ height: 25px;
+}
+
+#form-template-interface .template-tab-body select {
+ width: 180px;
+}
+
+#edit-template-tabs .template-tab-body .action-area {
+ float: right;
+}
+
+#edit-template-tabs .template-tab-body .action-area button
{
+ width: 20px;
+ height: 20px;
+}
+
+#edit-template-tabs .hide {
+ display: none;
+}
\ No newline at end of file
diff --git a/ui/js/src/kimchi.template_edit_main.js
b/ui/js/src/kimchi.template_edit_main.js
index 2f4cc9a..12a9f20 100644
--- a/ui/js/src/kimchi.template_edit_main.js
+++ b/ui/js/src/kimchi.template_edit_main.js
@@ -16,19 +16,23 @@
* limitations under the License.
*/
kimchi.template_edit_main = function() {
- var templateEditForm = $('#form-template-edit');
+ var templateEditMain = $('#edit-template-tabs');
var origDisks;
var origPool;
+ var origNetworks;
var templateDiskSize;
- $('#template-name',
templateEditForm).val(kimchi.selectedTemplate);
- kimchi.retrieveTemplate(kimchi.selectedTemplate,
function(template) {
+ $('#template-name',
templateEditMain).val(kimchi.selectedTemplate);
+ templateEditMain.tabs();
+
+ var initTemplate = function(template) {
origDisks = template.disks;
origPool = template.storagepool;
+ origNetworks = template.networks;
for(var i=0;i<template.disks.length;i++){
if(template.disks[i].base){
template["vm-image"] =
template.disks[i].base;
-
$('#templ-edit-cdrom').addClass('hide-content');
-
$('#templ-edit-vm-image').removeClass('hide-content');
+ $('.templ-edit-cdrom').addClass('hide');
+
$('.templ-edit-vm-image').removeClass('hide');
break;
}
}
@@ -37,18 +41,12 @@ kimchi.template_edit_main = function() {
if (prop == 'graphics') {
value = value["type"];
}
- $('input[name="' + prop + '"]',
templateEditForm).val(value);
- }
- var disks = template.disks;
- $('input[name="disks"]').val(disks[0].size);
- templateDiskSize = $('input[name="disks"]').val();
- if (disks[0].volume) {
- var spool_value = $('#form-template-edit
[name="storagepool"]').val();
- $('input[name="storagepool"]',
templateEditForm).val(spool_value + '/' + disks[0].volume);
- $('input[name="disks"]',
templateEditForm).attr('disabled','disabled');
+ $('input[name="' + prop + '"]',
templateEditMain).val(value);
}
var vncOpt = [{label: 'VNC', value: 'vnc'}];
+ $('#template-edit-graphics').append('<option
selected>VNC</option>');
+
$('#template-edit-graphics').append('<option>Spice</option>');
kimchi.select('template-edit-graphics-list',
vncOpt);
var enableSpice = function() {
if (kimchi.capabilities == undefined) {
@@ -61,119 +59,281 @@ kimchi.template_edit_main = function()
{
}
};
enableSpice();
-
- var scsipools = {};
- kimchi.listStoragePools(function(result) {
- var options = [];
- if (result && result.length) {
- $.each(result, function(index, storagePool)
{
- if ((storagePool.state=="active")
&& (storagePool.type !== 'kimchi-iso')) {
- if ((storagePool.type == 'iscsi')
|| (storagePool.type == 'scsi')){
- scsipools[storagePool.name] =
[];
-
kimchi.listStorageVolumes(storagePool.name, function(result)
{
- if (result &&
result.length) {
- $.each(result,
function(index, storageVolume) {
- options.push({
- label:
storagePool.name + '/' + storageVolume.name,
- value:
'/storagepools/' + storagePool.name + '/' +
storageVolume.name
- });
-
scsipools[storagePool.name].push(storageVolume)
- });
- }
-
kimchi.select('template-edit-storagePool-list', options);
- });
+ var initStorage = function(result) {
+ var scsipools = {};
+ var addStorageItem = function(storageData) {
+ var thisName;
+ var thisType;
+ var thisDisk;
+ var nodeStorage =
$.parseHTML(kimchi.substitute($('#template-storage-pool-tmpl').html(),
storageData));
+ $('.template-tab-body',
'#form-template-storage').append(nodeStorage);
+ $('.edit',
'#form-template-storage').button({
+ icons : {primary : 'ui-icon-pencil'},
+ text : false
+ }).click(function(evt) {
+ evt.preventDefault();
+ var storageItem =
$(this).parent().parent();
+ thisName = $('.template-storage-name',
storageItem).val();
+ thisType = $('.template-storage-type',
storageItem).val();
+ thisDisk = $('.template-storage-disk',
storageItem).val();
+ $('.template-storage-name',
storageItem).hide();
+ $('.template-storage-disk',
storageItem).attr('readonly', false);
+ if (thisType === 'iscsi' || thisType
=== 'scsi') {
+ $('.template-storage-disk',
storageItem).attr('readonly', true);
+ } else {
+ $('.template-storage-disk',
storageItem).attr('readonly', false);
+ }
+ $('.save',
storageItem).parent().show();
+ $('.delete',
storageItem).parent().hide();
+ var selectedStorage = $('select',
storageItem).val();
+ $('.template-storage-name',
storageItem).val(selectedStorage).hide();
+ $('select',
storageItem).val(thisName).show();
+ });
+ $('.delete',
'#form-template-storage').button({
+ icons : {primary : 'ui-icon-trash'},
+ text : false
+ }).click(function(evt) {
+ evt.preventDefault();
+ $(this).parent().parent().remove();
+ });
+ $('.cancel',
'#form-template-storage').button({
+ icons : {primary :
'ui-icon-arrowreturnthick-1-w'},
+ text : false
+ }).click(function(evt) {
+ evt.preventDefault();
+ var cancelEntity =
$(this).parent().parent();
+ if ($('.template-storage-name',
cancelEntity).val() === 'null') {
+ cancelEntity.remove();
+ } else {
+ $('select', cancelEntity).hide();
+ $('.template-storage-name',
cancelEntity).val(thisName).attr('readonly', true).show();
+ $('.template-storage-type',
cancelEntity).val(thisType).attr('readonly', true);
+ $('.template-storage-disk',
cancelEntity).val(thisDisk).attr('readonly', true);
+ $('.save',
cancelEntity).parent().hide();
+ $('.edit',
cancelEntity).parent().show();
+ }
+ });
+ $('.save',
'#form-template-storage').button({
+ icons : {primary : 'ui-icon-disk'},
+ text : false
+ }).click(function(evt) {
+ evt.preventDefault();
+ var storageItem =
$(this).parent().parent();
+ $('.save',
storageItem).parent().hide();
+ $('.delete',
storageItem).parent().show();
+ var selectedStorage = $('select',
storageItem).val();
+ $('.template-storage-name',
storageItem).val(selectedStorage).attr('readonly',
true).show();
+ $('.template-storage-disk',
storageItem).attr('readonly', true);
+ $('.template-storage-type',
storageItem).attr('readonly', true);
+ $('select', storageItem).hide();
+ });
+ var storageOptions = '';
+ var scsiOptions = '';
+ $('select',
'#form-template-storage').find('option').remove();
+ $.each(result, function(index,
storageEntities) {
+ if((storageEntities.state === 'active')
&& (storageEntities.type != 'kimchi-iso')) {
+ if(storageEntities.type === 'iscsi'
|| storageEntities.type === 'scsi') {
+
kimchi.listStorageVolumes(storageEntities.name,
function(currentVolume) {
+ $.each(currentVolume,
function(indexSCSI, scsiEntities) {
+ scsiOptions +=
'<option>' + storageEntities.name + '/' +
scsiEntities.name + '</option>';
+ });
+ $('select',
'#form-template-storage').append(scsiOptions);
+ }, function() {});
+ } else {
+ var isSlected =
storageEntities.name === 'default' ? ' selected' : '';
+ storageOptions += '<option'
+ isSlected + '>' + storageEntities.name +
'</option>';
}
- else {
- options.push({
- label: storagePool.name,
- value: '/storagepools/' +
storagePool.name
- });
+ }
+ });
+ $('select',
'#form-template-storage').append(storageOptions);
+ $('select',
'#form-template-storage').change(function() {
+ var selectedItem =
$(this).parent().parent();
+ var tempStorageName = $(this).val();
+ tempStorageName
=tempStorageName.split('/')[0];
+ var scsiCap;
+ $.each(result, function(index,
storageEntities) {
+ if (tempStorageName ===
storageEntities.name) {
+
selectedItem.find('.template-storage-type').val(storageEntities.type);
+ scsiCap =
storageEntities.capacity / Math.pow(1024, 3);
}
+ })
+ if (tempStorageName === 'iscsi' ||
tempStorageName === 'scsi') {
+ $('.template-storage-disk',
selectedItem).attr('readonly', true).val(scsiCap);
+ } else {
+ $('.template-storage-disk',
selectedItem).attr('readonly', false).val('10');
}
});
- }
- if ($.isEmptyObject(scsipools)) {
-
kimchi.select('template-edit-storagePool-list', options);
- }
- });
- kimchi.listNetworks(function(result) {
- if(result && result.length > 0) {
- var html = '';
- var tmpl = $('#tmpl-network').html();
- $.each(result, function(index, network) {
- if (result[index].state === 'active')
- html += kimchi.substitute(tmpl,
network);
+ };
+
+ if ((origDisks && origDisks.length)
&& (origPool && origPool.length)) {
+ splitPool = origPool.split('/');
+ var defaultPool;
+ var defaultType;
+ $.each(result, function(index,
poolEntities) {
+ if (poolEntities.name ===
splitPool[splitPool.length-1]) {
+ defaultType = poolEntities.type;
+ defaultPool =
splitPool[splitPool.length-1]
+ }
});
-
$('#template-edit-network-list').html(html).show();
- if(template.networks &&
template.networks.length > 0) {
- $('input[name="networks"]',
templateEditForm).each(function(index, element) {
- var value = $(element).val();
- if(template.networks.indexOf(value)
>= 0) {
- $(element).prop('checked',
true);
- }
- });
+ if (origDisks[0]['volume']) {
+ defaultPool = defaultPool + '/' +
origDisks[0]['volume'];
}
- } else {
- $('#template-edit-network-list').hide();
+ $.each(origDisks, function(index,
diskEntities) {
+ var storageNodeData = {
+ viewMode : '',
+ editMode : 'hide',
+ storageName : defaultPool,
+ storageType : defaultType,
+ storageDisk : diskEntities.size
+ }
+ addStorageItem(storageNodeData);
+ });
+
$('.template-storage-disk').attr('readonly', true);
}
- });
- });
- $('#template-edit-storagePool').change(function() {
- storagepool = $(this).val();
- var storageArray = storagepool.split("/");
- if (storageArray.length > 3) {
- volumeName = storageArray.pop();
- poolName = storageArray.pop();
- kimchi.getStoragePoolVolume(poolName,
volumeName, function(result) {
- $('input[name="disks"]',
templateEditForm).val(result.capacity / Math.pow(1024,3));
- $('input[name="disks"]',
templateEditForm).attr('disabled','disabled');
- return false;
- }, function (err) {
-
kimchi.message.error(err.responseJSON.reason);
+ $('#template-edit-storage-add-button').button({
+ icons: {
+ primary: "ui-icon-plusthick"
+ },
+ text: false,
+ disabled: true
+ }).click(function(event) {
+ event.preventDefault();
+ var storageNodeData = {
+ viewMode : 'hide',
+ editMode : '',
+ storageName : 'null',
+ storageType : 'dir',
+ storageDisk : '10'
+ }
+ addStorageItem(storageNodeData);
});
- } else {
- $('input[name="disks"]',
templateEditForm).removeAttr('disabled');
- $('input[name="disks"]',
templateEditForm).val(templateDiskSize);
- }
- });
- $('input[name="disks"]',
templateEditForm).keyup(function() {
- templateDiskSize = $('input[name="disks"]',
templateEditForm).val();
- });
+ };
+ var initInterface = function(result) {
+ var addInterfaceItem = function(networkData) {
+ var nodeInterface =
$.parseHTML(kimchi.substitute($('#template-interface-tmpl').html(),
networkData));
+ $('.template-tab-body',
'#form-template-interface').append(nodeInterface);
+ $('.edit',
'#form-template-interface').button({
+ icons : {primary : 'ui-icon-pencil'},
+ text : false,
+ disabled : true
+ });
+ $('.delete',
'#form-template-interface').button({
+ icons : {primary : 'ui-icon-trash'},
+ text : false
+ }).click(function(evt) {
+ evt.preventDefault();
+ $(this).parent().parent().remove();
+ });
+ $('.cancel',
'#form-template-interface').button({
+ icons : {primary :
'ui-icon-arrowreturnthick-1-w'},
+ text : false
+ }).click(function(evt) {
+ evt.preventDefault();
+ $(this).parent().parent().remove();
+ });
+ $('.save',
'#form-template-interface').button({
+ icons : {primary : 'ui-icon-disk'},
+ text : false
+ }).click(function(evt) {
+ evt.preventDefault();
+ var interItem =
$(this).parent().parent();
+ $('.save', interItem).parent().hide();
+ $('.delete',
interItem).parent().show();
+ var selectedInterface = $('select',
interItem).val();
+ $('.template-interface-name',
interItem).val(selectedInterface).show();
+ $('select', interItem).hide();
+ });
+ var networkOptions = '';
+ for(var i=0;i<result.length;i++){
+ if(result[i].state === "active") {
+ var isSlected = i==0 ? ' selected'
: '';
+ networkOptions += '<option' +
isSlected + '>' + result[i].name + '</option>';
+ }
+ }
+ $('select',
'#form-template-interface').find('option').remove();
+ $('select',
'#form-template-interface').append(networkOptions);
+ };
+ if(result && result.length > 0) {
+ $.each(result, function(index, data) {
+ if($.inArray(data.name, origNetworks)
> -1) {
+ addInterfaceItem({
+ mac : '',
+ network : data.name,
+ type : 'network',
+ viewMode : '',
+ editMode : 'hide'
+ });
+ }
+ });
+ }
+
$('#template-edit-interface-add-button').button({
+ icons: {
+ primary: 'ui-icon-plusthick'
+ },
+ text: false
+ }).click(function(evt) {
+ evt.preventDefault();
+ addInterfaceItem({
+ mac : '',
+ network : '',
+ type : 'network',
+ viewMode : 'hide',
+ editMode : ''
+ });
+ });
+ };
+ kimchi.listNetworks(initInterface);
+ kimchi.listStoragePools(initStorage);
+ };
+ kimchi.retrieveTemplate(kimchi.selectedTemplate,
initTemplate);
+
$('#tmpl-edit-button-save').on('click', function() {
- var editableFields = [ 'name', 'cpus', 'memory',
'storagepool', 'disks', 'graphics'];
+ var editableFields = [ 'name', 'cpus', 'memory',
'disks', 'graphics'];
var data = {};
+ //Fix me: Only support one storage pool now
+ var storages = $('.template-tab-body .item',
'#form-template-storage');
+ var tempName = $('.template-storage-name',
storages).val();
+ tempName = tempName.split('/');
+ var tempNameHead =tempName[0];
+ var tempNameTail = tempNameHead;
+ if(tempNameHead === 'iscsi' || tempNameHead
=='scsi') {
+ tempNameTail = tempName[tempName.length-1];
+ }
+ tempName = '/storagepools/' + tempNameHead;
+ data['storagepool'] = tempName;
$.each(editableFields, function(i, field) {
/* Support only 1 disk at this moment */
if (field == 'disks') {
- origDisks[0].size =
Number($('#form-template-edit [name="' + field +
'"]').val());
+ var tmpItem = $('#form-template-storage
.item');
+ origDisks[0].size =
Number($('.template-storage-disk', tmpItem).val());
+ if($('.template-storage-type',
tmpItem).val() === 'iscsi' || $('.template-storage-type',
tmpItem).val() =='scsi') {
+ origDisks[0]['volume'] = tempNameTail;
+ } else {
+ origDisks[0]['volume'] &&
delete origDisks[0]['volume'];
+ }
data[field] = origDisks;
}
else if (field == 'graphics') {
- var type = $('#form-template-edit [name="' +
field + '"]').val();
+ var type = $('#form-template-general
[name="' + field + '"]').val();
data[field] = {'type': type};
}
else {
- data[field] = $('#form-template-edit
[name="' + field + '"]').val();
+ data[field] = $('#form-template-general
[name="' + field + '"]').val();
}
});
data['memory'] = Number(data['memory']);
data['cpus'] = Number(data['cpus']);
- storagepool = data['storagepool'];
- storageArray = storagepool.split("/");
- if (storageArray.length > 3){
- /* Support only 1 disk at this moment */
- data["disks"][0].volume = storageArray.pop();
- data['storagepool'] = storageArray.join("/");
- } else if (data["disks"][0].volume) {
- delete data["disks"][0].volume;
- }
- var networks =
templateEditForm.serializeObject().networks;
- if (networks instanceof Array) {
- data.networks = networks;
- } else if (networks != null) {
- data.networks = [networks];
+ var networks = $('.template-tab-body .item',
'#form-template-interface');
+ var networkForUpdate = new Array();
+ $.each(networks, function(index, networkEntities) {
+
networkForUpdate.push($('.template-interface-name',
networkEntities).val());
+ });
+ if (networkForUpdate instanceof Array) {
+ data.networks = networkForUpdate;
+ } else if (networkForUpdate != null) {
+ data.networks = [networkForUpdate];
} else {
data.networks = [];
}
diff --git a/ui/pages/template-edit.html.tmpl
b/ui/pages/template-edit.html.tmpl
index 5a71d91..018ac10 100644
--- a/ui/pages/template-edit.html.tmpl
+++ b/ui/pages/template-edit.html.tmpl
@@ -28,74 +28,67 @@
<div class="close">X</div>
</header>
<div class="content">
- <form id="form-template-edit">
+ <div id="edit-template-tabs">
<input type="hidden" id="template-name"
name="templateName" />
- <fieldset class="template-edit-fieldset">
- <div>
+ <ul>
+ <li>
+ <a
href="#form-template-general">$_("General")</a>
+ </li>
+ <li>
+ <a
href="#form-template-storage">$_("Storage")</a>
+ </li>
+ <li>
+ <a
href="#form-template-interface">$_("Interface")</a>
+ </li>
+ </ul>
+ <form id="form-template-general">
+ <div
class="form-template-inline-wrapper">
<div
class="template-edit-wrapper-label">
<label
for="template-edit-id-textbox">$_("Name")</label>
</div>
- <div
class="template-edit-wrapper-controls">
- <input
id="template-edit-id-textbox" name="name" type="text" />
- </div>
- </div>
- <div>
<div
class="template-edit-wrapper-label">
<label
for="template-edit-vendor-textbox">$_("Vendor")</label>
</div>
- <div
class="template-edit-wrapper-controls">
- <input
id="template-edit-vendor-textbox" name="os_distro"
type="text" disabled="disabled" />
- </div>
- </div>
- <div>
<div
class="template-edit-wrapper-label">
<label
for="template-edit-version-textbox">$_("Version")</label>
</div>
- <div
class="template-edit-wrapper-controls">
- <input
id="template-edit-version-textbox" name="os_version"
type="text" disabled="disabled" />
- </div>
- </div>
- <div>
<div
class="template-edit-wrapper-label">
<label
for="template-edit-cpu-textbox">$_("CPU
Number")</label>
</div>
- <div
class="template-edit-wrapper-controls">
- <input
id="template-edit-cpu-textbox" name="cpus" type="text" />
- </div>
- </div>
- <div>
<div
class="template-edit-wrapper-label">
<label
for="template-edit-memory-textbox">$_("Memory
(MB)")</label>
</div>
- <div
class="template-edit-wrapper-controls">
- <input
id="template-edit-memory-textbox" name="memory" type="text"
/>
+ <div
class="template-edit-wrapper-label templ-edit-cdrom">
+ <label
for="template-edit-cdrom-textbox">$_("CDROM")</label>
+ </div>
+ <div
class="template-edit-wrapper-label templ-edit-vm-image
hide">
+ <label
for="template-edit-vmimage-textbox">$_("Image
File")</label>
</div>
- </div>
- <div>
<div
class="template-edit-wrapper-label">
- <label
for="template-edit-disk-textbox">$_("Disk
(GB)")</label>
+
<label>$_("Graphics")</label>
</div>
+ </div>
+ <div
class="form-template-inline-wrapper">
<div
class="template-edit-wrapper-controls">
- <input
id="template-edit-disk-textbox" name="disks" type="text"
/>
+ <input
id="template-edit-id-textbox" name="name" type="text" />
</div>
- </div>
- </fieldset>
- <fieldset class="template-edit-fieldset">
- <div id="templ-edit-cdrom">
- <div
class="template-edit-wrapper-label">
- <label
for="template-edit-cdrom-textbox">$_("CDROM")</label>
+ <div
class="template-edit-wrapper-controls">
+ <input
id="template-edit-vendor-textbox" name="os_distro"
type="text" disabled="disabled" />
</div>
<div
class="template-edit-wrapper-controls">
- <input
id="template-edit-cdrom-textbox" name="cdrom" type="text"
disabled="disabled"/>
+ <input
id="template-edit-version-textbox" name="os_version"
type="text" disabled="disabled" />
</div>
- </div>
- <div id="templ-edit-vm-image"
class="hide-content">
- <div
class="template-edit-wrapper-label">$_("Image
File")</div>
- <div
class="template-edit-wrapper-controls"><input
name="vm-image" type="text" disabled/></div>
- </div>
- <div>
- <div
class="template-edit-wrapper-label">
-
<label>$_("Graphics")</label>
+ <div
class="template-edit-wrapper-controls">
+ <input
id="template-edit-cpu-textbox" name="cpus" type="text" />
+ </div>
+ <div
class="template-edit-wrapper-controls">
+ <input
id="template-edit-memory-textbox" name="memory" type="text"
/>
+ </div>
+ <div
class="template-edit-wrapper-controls templ-edit-cdrom">
+ <input
id="template-edit-cdrom-textbox" name="cdrom" type="text"
disabled="disabled" />
+ </div>
+ <div
class="template-edit-wrapper-controls templ-edit-vm-image
hide">
+ <input
id="template-edit-vmimage-textbox" name="vm-image"
type="text" disabled="disabled" />
</div>
<div
class="template-edit-wrapper-controls">
<div class="btn dropdown
popable">
@@ -108,40 +101,26 @@
</div>
</div>
</div>
- <div>
- <div
class="template-edit-wrapper-label">
- <label>$_("Storage
Pool")</label>
- </div>
- <div
class="template-edit-wrapper-controls">
- <div class="btn dropdown
popable">
- <input
id="template-edit-storagePool" name="storagepool"
type="hidden" />
- <span class="text"
id="template-edit-storage-label"></span><span
class="arrow"></span>
- <div class="popover"
style="width: 100%">
- <ul class="select-list"
id="template-edit-storagePool-list"
data-target="template-edit-storagePool"
data-label="template-edit-storage-label">
- </ul>
- </div>
- </div>
- </div>
+ </form>
+ <form id="form-template-storage">
+ <div class="template-tab-header">
+ <span
class="template-storage-cell">$_("Storage
Pool")</span>
+ <span
class="template-storage-cell">$_("Type")</span>
+ <span
class="template-storage-cell">$_("Disk(GB)")</span>
+ <button type="button"
id="template-edit-storage-add-button"
class="action-area"></button>
</div>
- <div>
- <div
class="template-edit-wrapper-label">
-
<label>$_("Network")</label>
- </div>
- <div
class="template-edit-wrapper-controls">
- <ul class="select-list-box"
id="template-edit-network-list">
- </ul>
- <script id="tmpl-network"
type="text/html">
- <li>
- <label>
- <input
name="networks" type="checkbox" value="{name}" />
- <span
class="item">{name}</span>
- </label>
- </li>
- </script>
- </div>
+ <div class="template-tab-body">
</div>
- </fieldset>
- </form>
+ </form>
+ <form id="form-template-interface">
+ <div class="template-tab-header">
+ <span
class="template-interface-cell">$_("Network")</span>
+ <span
class="template-interface-cell">$_("Type")</span>
+ <button type="button"
id="template-edit-interface-add-button"
class="action-area"></button>
+ </div>
+ <div
class="template-tab-body"></div>
+ </form>
+ </div>
</div>
<footer>
<div class="btn-group">
@@ -152,3 +131,40 @@
<script>
kimchi.template_edit_main();
</script>
+<script id="template-storage-pool-tmpl"
type="text/html">
+ <div class='item'>
+ <span class="template-storage-cell">
+ <input class="template-storage-name
{viewMode}" value={storageName} readonly=true
type="text"/>
+ <select
class="{editMode}"></select>
+ </span>
+ <span class="template-storage-cell">
+ <input class="template-storage-type"
value={storageType} readonly=true type="text" />
+ </span>
+ <span class="template-storage-cell">
+ <input class="template-storage-disk"
value={storageDisk} type="text" />
+ </span>
+ <span class="action-area {editMode}">
+ <button
class="save"></button><button
class="cancel"></button>
+ </span>
+ <span class="action-area {viewMode}">
+ <button
class="edit"></button><button
class="delete"></button>
+ </span>
+ </div>
+</script>
+<script id="template-interface-tmpl"
type="text/html">
+ <div class="item">
+ <span class="template-interface-cell">
+ <input class="template-interface-name
{viewMode}" readonly="true" type="text" value={network}
/>
+ <select
class="{editMode}"></select>
+ </span>
+ <span class="template-interface-cell">
+ <input value={type} readonly=true
type="text" />
+ </span>
+ <span class="action-area {editMode}">
+ <button
class="save"></button><button
class="cancel"></button>
+ </span>
+ <span class="action-area {viewMode}">
+ <button
class="edit"></button><button
class="delete"></button>
+ </span>
+ </div>
+</script>
\ No newline at end of file