new UI - add action message box to actions for subgrid items.

This commit is contained in:
Jessica Wang 2010-09-14 17:40:36 -07:00
parent 64c45588b2
commit c3144e0d76
4 changed files with 963 additions and 898 deletions

View File

@ -1,26 +1,23 @@
<!--
<script type="text/javascript" src="scripts/cloud.core.instance.js"></script>
-->
<%@ page import="java.util.*" %>
<%@ page import="com.cloud.utils.*" %>
<%
Locale browserLocale = request.getLocale();
CloudResourceBundle t = CloudResourceBundle.getBundle("resources/resource", browserLocale);
%>
<!-- VM detail panel (begin) -->
<div class="main_title" id="right_panel_header">
<div class="main_titleicon">
<img src="images/title_instanceicons.gif" alt="Instance" /></div>
<h1 id="vm_name">Instance
<h1 id="vm_name">
Instance
</h1>
</div>
<div class="contentbox" id="right_panel_content">
<div class="info_detailbox errorbox" id="after_action_info_container" style="display: none">
<p id="after_action_info"></p>
<p id="after_action_info">
</p>
</div>
<div class="tabbox" style="margin-top: 15px;">
<div class="content_tabs on" id="tab_details">
@ -30,7 +27,6 @@
<div class="content_tabs off" id="tab_statistics">
<%=t.t("Statistics")%></div>
</div>
<!--Details tab (start)-->
<div class="grid_container" style="display: block;" id="tab_content_details">
<div class="grid_rows odd">
@ -152,13 +148,12 @@
</div>
</div>
<!--Details tab (end)-->
<!--Volume tab (start)-->
<div style="display: none;" id="tab_content_volume">
<div class="grid_container" id="volume_tab_template" style="display: block">
<div class="grid_header">
<div class="grid_header_title" id="name"></div>
<div class="grid_header_title" id="name">
</div>
<div class="grid_actionbox" id="volume_action_link" style="display: block;">
<div class="grid_actionsdropdown_box" id="volume_action_menu" style="display: none;">
<ul class="actionsdropdown_boxlist" id="action_list">
@ -168,8 +163,11 @@
</div>
</div>
<div class="gridheader_loaderbox" style="height: 18px;">
<div class="gridheader_loader"></div>
<p> Creating Template &hellip; </p>
<div class="gridheader_loader">
</div>
<p>
Creating Template &hellip;
</p>
</div>
</div>
<div class="grid_rows even">
@ -178,7 +176,8 @@
ID:</div>
</div>
<div class="grid_row_cell" style="width: 79%;">
<div class="row_celltitles" id="id"></div>
<div class="row_celltitles" id="id">
</div>
</div>
</div>
<div class="grid_rows odd">
@ -187,7 +186,8 @@
Type:</div>
</div>
<div class="grid_row_cell" style="width: 79%;">
<div class="row_celltitles" id="type"></div>
<div class="row_celltitles" id="type">
</div>
</div>
</div>
<div class="grid_rows even">
@ -196,7 +196,8 @@
Size:</div>
</div>
<div class="grid_row_cell" style="width: 79%;">
<div class="row_celltitles" id="size"></div>
<div class="row_celltitles" id="size">
</div>
</div>
</div>
<div class="grid_rows odd">
@ -205,15 +206,13 @@
Created:</div>
</div>
<div class="grid_row_cell" style="width: 79%;">
<div class="row_celltitles" id="created"></div>
<div class="row_celltitles" id="created">
</div>
</div>
</div>
</div>
</div>
<!--Volume tab (end)-->
<!--Statistics tab (start)-->
<div class="grid_container" style="display: none;" id="tab_content_statistics">
statistics....
@ -237,7 +236,8 @@
Step 5</div>
<div class="vmpopup_steps" style="background: url(images/laststep_bg.gif) no-repeat top left">
</div>
<div class="vmpopup_container_closebutton" id="close_button"></div>
<div class="vmpopup_container_closebutton" id="close_button">
</div>
</div>
<div class="vmpopup_container_mid">
<div class="vmpopup_maincontentarea">
@ -349,19 +349,24 @@
Step 5</div>
<div class="vmpopup_steps" style="background: url(images/laststep_bg.gif) no-repeat top left">
</div>
<div class="vmpopup_container_closebutton" id="close_button"></div>
<div class="vmpopup_container_closebutton" id="close_button">
</div>
</div>
<div class="vmpopup_container_mid">
<div class="vmpopup_maincontentarea">
<div class="vmpopup_titlebox">
<h2>
Step 2: <strong>Service Offering</strong></h2>
<p><!--
<p>
<!--
Please select the CPU, Memory and Storage requirement you need for your new Virtual
Instance--></p>
Instance-->
</p>
</div>
<div class="vmpopup_contentpanel">
<h3><!--Service Offering--></h3>
<h3>
<!--Service Offering-->
</h3>
<div class="vmpopup_offeringpanel" id="service_offering_container">
<!--
<div class="vmpopup_offeringbox">
@ -444,17 +449,20 @@
Step 5</div>
<div class="vmpopup_steps" style="background: url(images/laststep_bg.gif) no-repeat top left">
</div>
<div class="vmpopup_container_closebutton" id="close_button"></div>
<div class="vmpopup_container_closebutton" id="close_button">
</div>
</div>
<div class="vmpopup_container_mid">
<div class="vmpopup_maincontentarea">
<div class="vmpopup_titlebox">
<h2>
Step 3: <strong id="step3_label">Select a Disk Offering</strong></h2>
<p></p>
<p>
</p>
</div>
<div class="vmpopup_contentpanel">
<h3></h3>
<h3>
</h3>
<div class="vmpopup_offeringpanel" id="data_disk_offering_container" style="display: none">
</div>
<div class="vmpopup_offeringpanel" id="root_disk_offering_container" style="display: none">
@ -485,17 +493,20 @@
Step 5</div>
<div class="vmpopup_steps" style="background: url(images/laststep_bg.gif) no-repeat top left">
</div>
<div class="vmpopup_container_closebutton" id="close_button"></div>
<div class="vmpopup_container_closebutton" id="close_button">
</div>
</div>
<div class="vmpopup_container_mid">
<div class="vmpopup_maincontentarea">
<div class="vmpopup_titlebox">
<h2>
Step 4: <strong>Network</strong></h2>
<p></p>
<p>
</p>
</div>
<div class="vmpopup_contentpanel">
<h3></h3>
<h3>
</h3>
<div class="vmpopup_offeringpanel">
<div class="vmpopup_offeringbox">
<input type="radio" name="radiogroup" class="radio" />
@ -559,17 +570,20 @@
Step 5</div>
<div class="vmpopup_steps" style="background: url(images/laststep_slectedbg.gif) no-repeat top left">
</div>
<div class="vmpopup_container_closebutton" id="close_button"></div>
<div class="vmpopup_container_closebutton" id="close_button">
</div>
</div>
<div class="vmpopup_container_mid">
<div class="vmpopup_maincontentarea">
<div class="vmpopup_titlebox">
<h2>
Step 5: <strong>Last Step</strong></h2>
<p></p>
<p>
</p>
</div>
<div class="vmpopup_contentpanel">
<h3></h3>
<h3>
</h3>
<div class="vmpopup_offeringpanel" style="margin-top: 10px;">
<div class="vmpopup_reviewbox_odd">
<div class="vmopopup_reviewtextbox">
@ -626,7 +640,8 @@
Name (optional):
</div>
<input class="text" type="text" id="wizard_vm_name" />
<div id="wizard_vm_name_errormsg" class="dialog_formcontent_errormsg" style="display: none;"></div>
<div id="wizard_vm_name_errormsg" class="dialog_formcontent_errormsg" style="display: none;">
</div>
</div>
</div>
<div class="vmpopup_reviewbox_odd">
@ -636,7 +651,8 @@
<div class="vmopopup_review_label">
Group (optional):</div>
<input class="text" type="text" id="wizard_vm_group" />
<div id="wizard_vm_group_errormsg" class="dialog_formcontent_errormsg" style="display: none;"></div>
<div id="wizard_vm_group_errormsg" class="dialog_formcontent_errormsg" style="display: none;">
</div>
</div>
</div>
</div>
@ -685,6 +701,7 @@
<span>MB</span>
<div id="custom_disk_size_errormsg" class="dialog_formcontent_errormsg" style="display: none;">
</div>
</div>
<div class="vmpopup_offeringbox" id="vm_popup_disk_offering_template_existing" style="display: none">
<input type="radio" class="radio" checked />
<label class="label" id="name">
@ -699,7 +716,6 @@
</div>
</div>
<!-- VM Wizard - disk Offering template (end)-->
<!-- Attach ISO Dialog -->
<div id="dialog_attach_iso" title="Attach ISO" style="display: none">
<p>
@ -719,7 +735,6 @@
</form>
</div>
</div>
<!-- Change Name Dialog -->
<div id="dialog_change_name" title="Change Name" style="display: none">
<p>
@ -739,11 +754,11 @@
</form>
</div>
</div>
<!-- Change Service Offering Dialog -->
<div id="dialog_change_service_offering" title="Change Service Offering" style="display: none">
<p>
After changing service offering, you must restart virtual instance for the new service offering to take effect.
After changing service offering, you must restart virtual instance for the new service
offering to take effect.
</p>
<div class="dialog_formcontent">
<form action="#" method="post" id="form_acquire">
@ -758,12 +773,11 @@
</form>
</div>
</div>
<!-- Change Group Dialog -->
<div id="dialog_change_group" title="Change Group" style="display: none">
<p>
Please specify the new group you want to assign to your Virtual Instance. If no such group exists, a new one will be created
for you.</p>
Please specify the new group you want to assign to your Virtual Instance. If no
such group exists, a new one will be created for you.</p>
<div class="dialog_formcontent">
<form action="#" method="post" id="form_acquire">
<ol>
@ -778,11 +792,11 @@
</form>
</div>
</div>
<!-- volume tab template -->
<div class="grid_container" id="volume_tab_template" style="display: none">
<div class="grid_header">
<div class="grid_header_title" id="name"></div>
<div class="grid_header_title" id="name">
</div>
<div class="grid_actionbox" id="volume_action_link">
<div class="grid_actionsdropdown_box" id="volume_action_menu" style="display: none;">
<ul class="actionsdropdown_boxlist" id="action_list">
@ -790,8 +804,16 @@
</div>
</div>
<div class="gridheader_loaderbox" id="spinning_wheel" style="display: none; height: 18px;">
<div class="gridheader_loader" id="icon"></div>
<p id="description"> Waiting &hellip; </p>
<div class="gridheader_loader" id="icon">
</div>
<p id="description">
Waiting &hellip;
</p>
</div>
<div class="gridheader_message" id="action_message_box" style="border: 1px solid #999; display: none;">
<p id="description"></p>
<div class="close_button" id="close_button">
</div>
</div>
</div>
<div class="grid_rows even">
@ -800,7 +822,8 @@
ID:</div>
</div>
<div class="grid_row_cell" style="width: 79%;">
<div class="row_celltitles" id="id"></div>
<div class="row_celltitles" id="id">
</div>
</div>
</div>
<div class="grid_rows odd">
@ -809,7 +832,8 @@
Type:</div>
</div>
<div class="grid_row_cell" style="width: 79%;">
<div class="row_celltitles" id="type"></div>
<div class="row_celltitles" id="type">
</div>
</div>
</div>
<div class="grid_rows even">
@ -818,7 +842,8 @@
Size:</div>
</div>
<div class="grid_row_cell" style="width: 79%;">
<div class="row_celltitles" id="size"></div>
<div class="row_celltitles" id="size">
</div>
</div>
</div>
<div class="grid_rows odd">
@ -827,11 +852,11 @@
Created:</div>
</div>
<div class="grid_row_cell" style="width: 79%;">
<div class="row_celltitles" id="created"></div>
<div class="row_celltitles" id="created">
</div>
</div>
</div>
</div>
<!-- Create Template Dialog -->
<div id="dialog_create_template" title="Create Template" style="display: none">
<p>

View File

@ -433,7 +433,7 @@ function clickInstanceGroupHeader($arrowIcon) {
"Create Template": {
isAsyncJob: true,
asyncJobResponse: "createtemplateresponse",
dialogBeforeActionFn : doCreateTemplate,
dialogBeforeActionFn : doCreateTemplateFromVmVolume,
inProcessText: "Creating template....",
afterActionSeccessFn: function(){}
}
@ -473,6 +473,10 @@ function clickInstanceGroupHeader($arrowIcon) {
buildActionLinkForSubgridItem("Detach Disk", vmVolumeActionMap, $actionMenu, volumeListAPIMap, template);
}
template.find("#action_message_box #close_button").bind("click", function(event){
$(this).parent().hide();
return false;
});
}
//***** declaration for volume tab (end) *********************************************************
@ -1256,5 +1260,37 @@ function clickInstanceGroupHeader($arrowIcon) {
});
}
function doCreateTemplateFromVmVolume($actionLink, listAPIMap, $subgridItem) {
var jsonObj = $subgridItem.data("jsonObj");
$("#dialog_create_template").find("#volume_name").text(jsonObj.name);
$("#dialog_create_template")
.dialog('option', 'buttons', {
"Create": function() {
//debugger;
var thisDialog = $(this);
thisDialog.dialog("close");
// validate values
var isValid = true;
isValid &= validateString("Name", thisDialog.find("#create_template_name"), thisDialog.find("#create_template_name_errormsg"));
isValid &= validateString("Display Text", thisDialog.find("#create_template_desc"), thisDialog.find("#create_template_desc_errormsg"));
if (!isValid) return;
var name = trim(thisDialog.find("#create_template_name").val());
var desc = trim(thisDialog.find("#create_template_desc").val());
var osType = thisDialog.find("#create_template_os_type").val();
var isPublic = thisDialog.find("#create_template_public").val();
var password = thisDialog.find("#create_template_password").val();
var id = $subgridItem.data("jsonObj").id;
var apiCommand = "command=createTemplate&volumeId="+id+"&name="+encodeURIComponent(name)+"&displayText="+encodeURIComponent(desc)+"&osTypeId="+osType+"&isPublic="+isPublic+"&passwordEnabled="+password;
doActionToSubgridItem(id, $actionLink, apiCommand, listAPIMap, $subgridItem);
},
"Cancel": function() {
$(this).dialog("close");
}
}).dialog("open");
}

View File

@ -407,7 +407,8 @@ function doActionToSubgridItem(id, $actionLink, apiCommand, listAPIMap, $subgrid
$("body").stopTime(timerKey);
$spinningWheel.hide();
if (result.jobstatus == 1) { // Succeeded
$subgridItem.data("afterActionInfo", (label + " action succeeded."));
$subgridItem.find("#action_message_box #description").text(label + " action succeeded.");
$subgridItem.find("#action_message_box").removeClass("error").show();
//DestroyVirtualMachine API doesn't return an embedded object on success (Bug 6041)
//Before Bug 6041 get fixed, use the temporary solution below.
@ -423,7 +424,8 @@ function doActionToSubgridItem(id, $actionLink, apiCommand, listAPIMap, $subgrid
//afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0], $subgridItem);
} else if (result.jobstatus == 2) { // Failed
$subgridItem.data("afterActionInfo", (label + " action failed. Reason: " + sanitizeXSS(result.jobresult)));
$subgridItem.find("#action_message_box #description").text(label + " action failed. Reason: " + sanitizeXSS(result.jobresult));
$subgridItem.find("#action_message_box").addClass("error").show();
}
}
},
@ -460,7 +462,8 @@ function doActionToSubgridItem(id, $actionLink, apiCommand, listAPIMap, $subgrid
dataType: "json",
async: false,
success: function(json) {
$subgridItem.data("afterActionInfo", (label + " action succeeded."));
$subgridItem.find("#action_message_box #description").text(label + " action succeeded.");
$subgridItem.find("#action_message_box").removeClass("error").show();
afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0], $subgridItem);
}
});
@ -485,9 +488,10 @@ function handleErrorInSubgridItem(XMLHttpResponse, $subgridItem, label) {
errorMsg = XMLHttpResponse.responseText.substring(start, end);
}
if(errorMsg.length > 0)
$subgridItem.data("afterActionInfo", ((label + " action failed. Reason: " + sanitizeXSS(unescape(errorMsg)))));
$subgridItem.find("#action_message_box #description").text(label + " action failed. Reason: " + sanitizeXSS(unescape(errorMsg)));
else
$subgridItem.data("afterActionInfo", (label + " action failed."));
$subgridItem.find("#action_message_box #description").text(label + " action failed.");
$subgridItem.find("#action_message_box").addClass("error").show();
}
//***** actions for a subgrid item in right panel (end) **************************************************************************

View File

@ -107,14 +107,14 @@ var volumeActionMap = {
"Create Template": {
isAsyncJob: true,
asyncJobResponse: "createtemplateresponse",
dialogBeforeActionFn : doCreateTemplate,
dialogBeforeActionFn : doCreateTemplateFromVolume,
inProcessText: "Creating template....",
afterActionSeccessFn: function(){}
}
}
function doCreateTemplate($actionLink, listAPIMap, $singleObject) {
var jsonObj = $singleObject.data("jsonObj");
function doCreateTemplateFromVolume($actionLink, listAPIMap, $detailsTab) {
var jsonObj = $detailsTab.data("jsonObj");
$("#dialog_create_template").find("#volume_name").text(jsonObj.name);
$("#dialog_create_template")
@ -136,7 +136,7 @@ function doCreateTemplate($actionLink, listAPIMap, $singleObject) {
var isPublic = thisDialog.find("#create_template_public").val();
var password = thisDialog.find("#create_template_password").val();
var id = $singleObject.data("jsonObj").id;
var id = $detailsTab.data("jsonObj").id;
var apiCommand = "command=createTemplate&volumeId="+id+"&name="+encodeURIComponent(name)+"&displayText="+encodeURIComponent(desc)+"&osTypeId="+osType+"&isPublic="+isPublic+"&passwordEnabled="+password;
doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap);
},