new UI - volume page - implement Recurring Snapshot action.

This commit is contained in:
Jessica Wang 2010-09-21 16:18:04 -07:00
parent 5d0d69ce48
commit 67cfa3582e
4 changed files with 714 additions and 9 deletions

View File

@ -224,3 +224,312 @@
Please confirm you want to create snapshot for this volume.</p>
</div>
<!-- Create Snapshot Dialog (end) -->
<!-- Recurring Snapshots Dialog (begin) -->
<div id="dialog_recurring_snapshot" title="Recurring Snapshot" style="display:none;">
<div class="dialog_snapshotcontainer">
<div class="dialog_snapshotleft" id="dialog_snapshotleft">
<div class="dialog_snapshotleft_list">
<div class="dialog_snapshotleft_label">
Hourly:</div>
<div class="dialog_snapshotleft_info" id="dialog_snapshot_hourly_info_unset">
<p><i>&nbsp;Please click <b>'Edit'</b> to set your <b>hourly</b> recurring snapshot schedule</i></p>
</div>
<div class="dialog_snapshotleft_info" id="dialog_snapshot_hourly_info_set" style="display:none">
<span id="read_hourly_minute">mm</span></span><span> Minute(s) Past the Hour</span><span id="read_hourly_timezone"></span>
</div>
<div class="dialog_snapshotleft_max">
<p>Keeping:</p>
<span id="read_hourly_max">N/A</span></div>
<div class="dialog_snapshotleft_actions">
<a id="hourly_edit_link" href="#">Edit</a> | <a id="hourly_delete_link" href="#">&nbsp;Delete</a></div>
</div>
<div class="dialog_snapshotleft_list">
<div class="dialog_snapshotleft_label">
Daily:</div>
<div class="dialog_snapshotleft_info" id="dialog_snapshot_daily_info_unset">
<p><i>&nbsp;Please click <b>'Edit'</b> to set your <b>daily</b> recurring snapshot schedule</i></p>
</div>
<div class="dialog_snapshotleft_info" id="dialog_snapshot_daily_info_set" style="display:none">
<span id="read_daily_hour">hh</span><span>:</span><span id="read_daily_minute">mm</span>
<span id="read_daily_meridiem">AM</span><span id="read_daily_timezone"></span>
</div>
<div class="dialog_snapshotleft_max">
<p>
Keeping:</p>
<span id="read_daily_max">N/A</span></div>
<div class="dialog_snapshotleft_actions">
<a id="daily_edit_link" href="#">Edit</a> | <a id="daily_delete_link" href="#">&nbsp;Delete</a></div>
</div>
<div class="dialog_snapshotleft_list">
<div class="dialog_snapshotleft_label">
Weekly:</div>
<div class="dialog_snapshotleft_info" id="dialog_snapshot_weekly_info_unset">
<p><i>&nbsp;Please click <b>'Edit'</b> to set your <b>weekly</b> recurring snapshot schedule</i></p>
</div>
<div class="dialog_snapshotleft_info" id="dialog_snapshot_weekly_info_set" style="display:none">
<span id="read_weekly_hour">hh</span><span>:</span><span id="read_weekly_minute">mm</span>
<span id="read_weekly_meridiem">AM</span><span id="read_weekly_timezone"></span>
<span id="read_weekly_day_of_week">day-of-week</span>
</div>
<div class="dialog_snapshotleft_max">
<p>Keeping:</p>
<span id="read_weekly_max">N/A</span></div>
<div class="dialog_snapshotleft_actions">
<a id="weekly_edit_link" href="#">Edit</a> | <a id="weekly_delete_link" href="#">&nbsp;Delete</a></div>
</div>
<div class="dialog_snapshotleft_list">
<div class="dialog_snapshotleft_label">
Monthly:</div>
<div class="dialog_snapshotleft_info" id="dialog_snapshot_monthly_info_unset">
<p><i>&nbsp;Please click <b>'Edit'</b> to set your <b>monthly</b> recurring snapshot schedule</i></p>
</div>
<div class="dialog_snapshotleft_info" id="dialog_snapshot_monthly_info_set" style="display:none">
<span id="read_monthly_hour">hh</span><span>:</span><span id="read_monthly_minute">mm</span>
<span id="read_monthly_meridiem">AM</span><span id="read_monthly_timezone"></span>
<span id="read_monthly_day_of_month">day-of-month</span>
</div>
<div class="dialog_snapshotleft_max">
<p>Keeping:</p>
<span id="read_monthly_max">N/A</span></div>
<div class="dialog_snapshotleft_actions">
<a id="monthly_edit_link" href="#">Edit</a> | <a id="monthly_delete_link" href="#">&nbsp;Delete</a></div>
</div>
</div>
<div class="dialog_snapshotright" id="dialog_snapshotright">
<div class="dialog_snapshotright_infotext" style="display:none"> Cick Edit to Schedule</div>
<div class="dialog_snapshots_editcontent" style="display:block;">
<div class="dialog_snapshots_editcontent_title">
<p>&nbsp;Edit:</p>
<span id="edit_interval_type" style="text-decoration:underline">Interval Type</span>
</div>
<div class="dialog_formcontent">
<form action="#" method="post" id="form4">
<ol>
<li>
<label for="add_volume_name" style="width:75px">
Time:</label>
<span id="edit_hardcoding_hour" style="display:none">00</span>
<span id="edit_hour_container">
<select class="snapselect" id="edit_hour">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
</select>
</span>
<span id="edit_time_colon">:</span>
<span id="edit_minute_container">
<select class="snapselect" id="edit_minute">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option>
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option>
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>
</span>
<span id="edit_past_the_hour" style="display:none"> Minute(s) Past the Hour</span>
<span id="edit_meridiem_container">
<select class="snapselect"id="edit_meridiem">
<option value="AM">AM</option>
<option value="PM">PM</option>
</select>
</span>
</li>
<li style="margin-top:10px;" id="edit_day_of_week_container">
<label for="filter" style="width:75px">
Day of Week:</label>
<select class="snapselect"id="edit_day_of_week">
<option value="1">Sunday</option>
<option value="2">Monday</option>
<option value="3">Tuesday</option>
<option value="4">Wednesday</option>
<option value="5">Thursday</option>
<option value="6">Friday</option>
<option value="7">Saturday</option>
</select>
</li>
<li style="margin-top:10px;" id="edit_day_of_month_container">
<label for="filter" style="width:75px">
Day of Month:</label>
<select class="snapselect" id="edit_day_of_month">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
</select>
</li>
<li style="margin-top:10px;">
<label for="edit_timezone" style="width:75px">
Time Zone:</label>
<select class="snapselect" id="edit_timezone" style="width:240px">
<option value='Etc/GMT+12'>[UTC-12:00] GMT-12:00</option>
<option value='Etc/GMT+11'>[UTC-11:00] GMT-11:00</option>
<option value='Pacific/Samoa'>[UTC-11:00] Samoa Standard Time</option>
<option value='Pacific/Honolulu'>[UTC-10:00] Hawaii Standard Time</option>
<option value='US/Alaska'>[UTC-09:00] Alaska Standard Time</option>
<option value='America/Los_Angeles'>[UTC-08:00] Pacific Standard Time</option>
<option value='Mexico/BajaNorte'>[UTC-08:00] Baja California</option>
<option value='US/Arizona'>[UTC-07:00] Arizona</option>
<option value='US/Mountain'>[UTC-07:00] Mountain Standard Time</option>
<option value='America/Chihuahua'>[UTC-07:00] Chihuahua, La Paz</option>
<option value='America/Chicago'>[UTC-06:00] Central Standard Time</option>
<option value='America/Costa_Rica'>[UTC-06:00] Central America</option>
<option value='America/Mexico_City'>[UTC-06:00] Mexico City, Monterrey</option>
<option value='Canada/Saskatchewan'>[UTC-06:00] Saskatchewan</option>
<option value='America/Bogota'>[UTC-05:00] Bogota, Lima</option>
<option value='America/New_York'>[UTC-05:00] Eastern Standard Time</option>
<option value='America/Caracas'>[UTC-04:00] Venezuela Time</option>
<option value='America/Asuncion'>[UTC-04:00] Paraguay Time</option>
<option value='America/Cuiaba'>[UTC-04:00] Amazon Time</option>
<option value='America/Halifax'>[UTC-04:00] Atlantic Standard Time</option>
<option value='America/La_Paz'>[UTC-04:00] Bolivia Time</option>
<option value='America/Santiago'>[UTC-04:00] Chile Time</option>
<option value='America/St_Johns'>[UTC-03:30] Newfoundland Standard Time</option>
<option value='America/Araguaina'>[UTC-03:00] Brasilia Time</option>
<option value='America/Argentina/Buenos_Aires'>[UTC-03:00] Argentine Time</option>
<option value='America/Cayenne'>[UTC-03:00] French Guiana Time</option>
<option value='America/Godthab'>[UTC-03:00] Greenland Time</option>
<option value='America/Montevideo'>[UTC-03:00] Uruguay Time]</option>
<option value='Etc/GMT+2'>[UTC-02:00] GMT-02:00</option>
<option value='Atlantic/Azores'>[UTC-01:00] Azores Time</option>
<option value='Atlantic/Cape_Verde'>[UTC-01:00] Cape Verde Time</option>
<option value='Africa/Casablanca'>[UTC] Casablanca</option>
<option value='Etc/UTC'>[UTC] Coordinated Universal Time</option>
<option value='Atlantic/Reykjavik'>[UTC] Reykjavik</option>
<option value='Europe/London'>[UTC] Western European Time</option>
<option value='CET'>[UTC+01:00] Central European Time</option>
<option value='Europe/Bucharest'>[UTC+02:00] Eastern European Time</option>
<option value='Africa/Johannesburg'>[UTC+02:00] South Africa Standard Time</option>
<option value='Asia/Beirut'>[UTC+02:00] Beirut</option>
<option value='Africa/Cairo'>[UTC+02:00] Cairo</option>
<option value='Asia/Jerusalem'>[UTC+02:00] Israel Standard Time</option>
<option value='Europe/Minsk'>[UTC+02:00] Minsk</option>
<option value='Europe/Moscow'>[UTC+03:00] Moscow Standard Time</option>
<option value='Africa/Nairobi'>[UTC+03:00] Eastern African Time</option>
<option value='Asia/Karachi'>[UTC+05:00] Pakistan Time</option>
<option value='Asia/Kolkata'>[UTC+05:30] India Standard Time</option>
<option value='Asia/Bangkok'>[UTC+05:30] Indochina Time</option>
<option value='Asia/Shanghai'>[UTC+08:00] China Standard Time</option>
<option value='Asia/Kuala_Lumpur'>[UTC+08:00] Malaysia Time</option>
<option value='Australia/Perth'>[UTC+08:00] Western Standard Time (Australia)</option>
<option value='Asia/Taipei'>[UTC+08:00] Taiwan</option>
<option value='Asia/Tokyo'>[UTC+09:00] Japan Standard Time</option>
<option value='Asia/Seoul'>[UTC+09:00] Korea Standard Time</option>
<option value='Australia/Adelaide'>[UTC+09:30] Central Standard Time (South Australia)</option>
<option value='Australia/Darwin'>[UTC+09:30] Central Standard Time (Northern Territory)</option>
<option value='Australia/Brisbane'>[UTC+10:00] Eastern Standard Time (Queensland)</option>
<option value='Australia/Canberra'>[UTC+10:00] Eastern Standard Time (New South Wales)</option>
<option value='Pacific/Guam'>[UTC+10:00] Chamorro Standard Time</option>
<option value='Pacific/Auckland'>[UTC+12:00] New Zealand Standard Time</option>
</select>
</li>
<li style="margin-top:10px;">
<label for="edit_max" style="width:75px">
Keep:</label>
<input class="text" style="width: 68px;" type="text" id="edit_max"/>
<span>Snapshot(s)</span>
<div id="edit_max_errormsg" class="dialog_formcontent_errormsg" style="display:none;"></div>
</li>
</ol>
<input class="ui-state-default" type="submit" id="apply_button" value="Apply Schedule" style="background-color:Yellow; width: 150px; height:20px; margin:15px 0 0 0;"/>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Take Snapshots Dialog (end) -->

View File

@ -34,6 +34,7 @@ function buildActionLinkForDetailsTab(label, actionMap, $actionMenu, listAPIMap)
$link.data("asyncJobResponse", apiInfo.asyncJobResponse);
$link.data("afterActionSeccessFn", apiInfo.afterActionSeccessFn);
$link.data("dialogBeforeActionFn", apiInfo.dialogBeforeActionFn);
$link.data("customActionFn", apiInfo.customActionFn);
var $detailsTab = $("#right_panel_content #tab_content_details");
var id = $detailsTab.data("jsonObj").id;
@ -41,6 +42,13 @@ function buildActionLinkForDetailsTab(label, actionMap, $actionMenu, listAPIMap)
$link.bind("click", function(event) {
$actionMenu.hide();
var $actionLink = $(this);
var customActionFn = $actionLink.data("customActionFn");
if(customActionFn != null) {
customActionFn();
return false;
}
var dialogBeforeActionFn = $actionLink.data("dialogBeforeActionFn");
if(dialogBeforeActionFn == null) {
var apiCommand = "command="+$actionLink.data("api")+"&id="+id;

View File

@ -10,9 +10,15 @@ function afterLoadVolumeJSP() {
modal: true,
zIndex: 2000
}));
activateDialog($("#dialog_recurring_snapshot").dialog({
width: 735,
autoOpen: false,
modal: true,
zIndex: 2000
}));
$.ajax({
data: createURL("command=listOsTypes&response=json"),
data: createURL("command=listOsTypes"),
dataType: "json",
success: function(json) {
types = json.listostypesresponse.ostype;
@ -24,6 +30,219 @@ function afterLoadVolumeJSP() {
}
}
});
// *** recurring snapshot dialog - event binding (begin) ******************************
$("#dialog_recurring_snapshot").bind("click", function(event) {
event.preventDefault();
event.stopPropagation();
var target = event.target;
var targetId = target.id;
var thisDialog = $(this);
var volumeId = thisDialog.data("volumeId");
var topPanel = thisDialog.find("#dialog_snapshotleft");
var bottomPanel = thisDialog.find("#dialog_snapshotright");
if(targetId.indexOf("_edit_link")!=-1) {
clearBottomPanel();
bottomPanel.animate({
height: 200
}, 1000, function() {}
);
}
else if(targetId.indexOf("_delete_link")!=-1) {
clearBottomPanel();
var snapshotPolicyId = $("#"+targetId).data("snapshotPolicyId");
if(snapshotPolicyId == null || snapshotPolicyId.length==0)
return;
$.ajax({
data: createURL("command=deleteSnapshotPolicies&id="+snapshotPolicyId),
dataType: "json",
success: function(json) {
clearTopPanel($("#"+targetId).data("intervalType"));
},
error: function(XMLHttpResponse) {
handleError(XMLHttpResponse);
}
});
}
var thisLink;
switch(targetId) {
case "hourly_edit_link":
$("#edit_interval_type").text("Hourly");
$("#edit_time_colon, #edit_hour_container, #edit_meridiem_container, #edit_day_of_week_container, #edit_day_of_month_container").hide();
$("#edit_past_the_hour, #edit_minute_container").show();
thisLink = thisDialog.find("#hourly_edit_link");
thisDialog.find("#edit_minute").val(thisLink.data("minute"));
thisDialog.find("#edit_max").val(thisLink.data("max"));
thisDialog.find("#edit_timezone").val(thisLink.data("timezone"));
break;
case "daily_edit_link":
$("#edit_interval_type").text("Daily");
$("#edit_past_the_hour, #edit_day_of_week_container, #edit_day_of_month_container").hide();
$("#edit_minute_container, #edit_hour_container, #edit_meridiem_container").show();
thisLink = thisDialog.find("#daily_edit_link");
thisDialog.find("#edit_minute").val(thisLink.data("minute"));
thisDialog.find("#edit_hour").val(thisLink.data("hour12"));
thisDialog.find("#edit_meridiem").val(thisLink.data("meridiem"));
thisDialog.find("#edit_max").val(thisLink.data("max"));
thisDialog.find("#edit_timezone").val(thisLink.data("timezone"));
break;
case "weekly_edit_link":
$("#edit_interval_type").text("Weekly");
$("#edit_past_the_hour, #edit_day_of_month_container").hide();
$("#edit_minute_container, #edit_hour_container, #edit_meridiem_container, #edit_day_of_week_container").show();
thisLink = thisDialog.find("#weekly_edit_link");
thisDialog.find("#edit_minute").val(thisLink.data("minute"));
thisDialog.find("#edit_hour").val(thisLink.data("hour12"));
thisDialog.find("#edit_meridiem").val(thisLink.data("meridiem"));
thisDialog.find("#edit_day_of_week").val(thisLink.data("dayOfWeek"));
thisDialog.find("#edit_max").val(thisLink.data("max"));
thisDialog.find("#edit_timezone").val(thisLink.data("timezone"));
break;
case "monthly_edit_link":
$("#edit_interval_type").text("Monthly");
$("#edit_past_the_hour, #edit_day_of_week_container").hide();
$("#edit_minute_container, #edit_hour_container, #edit_meridiem_container, #edit_day_of_month_container").show();
thisLink = thisDialog.find("#monthly_edit_link");
thisDialog.find("#edit_minute").val(thisLink.data("minute"));
thisDialog.find("#edit_hour").val(thisLink.data("hour12"));
thisDialog.find("#edit_meridiem").val(thisLink.data("meridiem"));
thisDialog.find("#edit_day_of_month").val(thisLink.data("dayOfMonth"));
thisDialog.find("#edit_max").val(thisLink.data("max"));
thisDialog.find("#edit_timezone").val(thisLink.data("timezone"));
break;
case "apply_button":
var intervalType = bottomPanel.find("#edit_interval_type").text().toLowerCase();
var minute, hour12, hour24, meridiem, dayOfWeek, dayOfWeekString, dayOfMonth, schedule, max, timezone;
switch(intervalType) {
case "hourly":
var isValid = true;
isValid &= validateNumber("Keep # of snapshots", bottomPanel.find("#edit_max"), bottomPanel.find("#edit_max_errormsg"));
if (!isValid) return;
minute = bottomPanel.find("#edit_minute").val();
schedule = minute;
max = bottomPanel.find("#edit_max").val();
timezone = bottomPanel.find("#edit_timezone").val();
break;
case "daily":
var isValid = true;
isValid &= validateNumber("Keep # of snapshots", bottomPanel.find("#edit_max"), bottomPanel.find("#edit_max_errormsg"));
if (!isValid) return;
minute = bottomPanel.find("#edit_minute").val();
hour12 = bottomPanel.find("#edit_hour").val();
meridiem = bottomPanel.find("#edit_meridiem").val();
if(meridiem=="AM")
hour24 = hour12;
else //meridiem=="PM"
hour24 = (parseInt(hour12)+12).toString();
schedule = minute + ":" + hour24;
max = bottomPanel.find("#edit_max").val();
timezone = bottomPanel.find("#edit_timezone").val();
break;
case "weekly":
var isValid = true;
isValid &= validateNumber("Keep # of snapshots", bottomPanel.find("#edit_max"), bottomPanel.find("#edit_max_errormsg"));
if (!isValid) return;
minute = bottomPanel.find("#edit_minute").val();
hour12 = bottomPanel.find("#edit_hour").val();
meridiem = bottomPanel.find("#edit_meridiem").val();
if(meridiem=="AM")
hour24 = hour12;
else //meridiem=="PM"
hour24 = (parseInt(hour12)+12).toString();
dayOfWeek = bottomPanel.find("#edit_day_of_week").val();
dayOfWeekString = bottomPanel.find("#edit_day_of_week option:selected").text();
schedule = minute + ":" + hour24 + ":" + dayOfWeek;
max = bottomPanel.find("#edit_max").val();
timezone = bottomPanel.find("#edit_timezone").val();
break;
case "monthly":
var isValid = true;
isValid &= validateNumber("Keep # of snapshots", bottomPanel.find("#edit_max"), bottomPanel.find("#edit_max_errormsg"));
if (!isValid) return;
minute = bottomPanel.find("#edit_minute").val();
hour12 = bottomPanel.find("#edit_hour").val();
meridiem = bottomPanel.find("#edit_meridiem").val();
if(meridiem=="AM")
hour24 = hour12;
else //meridiem=="PM"
hour24 = (parseInt(hour12)+12).toString();
dayOfMonth = bottomPanel.find("#edit_day_of_month").val();
schedule = minute + ":" + hour24 + ":" + dayOfMonth;
max = bottomPanel.find("#edit_max").val();
timezone = bottomPanel.find("#edit_timezone").val();
break;
}
var thisLink;
$.ajax({
data: createURL("command=createSnapshotPolicy&intervaltype="+intervalType+"&schedule="+schedule+"&volumeid="+volumeId+"&maxsnaps="+max+"&timezone="+encodeURIComponent(timezone)),
dataType: "json",
success: function(json) {
switch(intervalType) {
case "hourly":
topPanel.find("#dialog_snapshot_hourly_info_unset").hide();
topPanel.find("#dialog_snapshot_hourly_info_set").show();
topPanel.find("#read_hourly_minute").text(minute);
topPanel.find("#read_hourly_timezone").text("("+timezones[timezone]+")");
topPanel.find("#read_hourly_max").text(max);
topPanel.find("#hourly_edit_link, #hourly_delete_link").data("intervalType", "hourly").data("snapshotPolicyId", json.createsnapshotpolicyresponse.id).data("max",max).data("timezone",timezone).data("minute", minute);
break;
case "daily":
topPanel.find("#dialog_snapshot_daily_info_unset").hide();
topPanel.find("#dialog_snapshot_daily_info_set").show();
topPanel.find("#read_daily_minute").text(minute);
topPanel.find("#read_daily_hour").text(hour12);
topPanel.find("#read_daily_meridiem").text(meridiem);
topPanel.find("#read_daily_timezone").text("("+timezones[timezone]+")");
topPanel.find("#read_daily_max").text(max);
topPanel.find("#daily_edit_link, #daily_delete_link").data("intervalType", "daily").data("snapshotPolicyId", json.createsnapshotpolicyresponse.id).data("max",max).data("timezone",timezone).data("minute", minute).data("hour12", hour12).data("meridiem", meridiem);
break;
case "weekly":
topPanel.find("#dialog_snapshot_weekly_info_unset").hide();
topPanel.find("#dialog_snapshot_weekly_info_set").show();
topPanel.find("#read_weekly_minute").text(minute);
topPanel.find("#read_weekly_hour").text(hour12);
topPanel.find("#read_weekly_meridiem").text(meridiem);
topPanel.find("#read_weekly_timezone").text("("+timezones[timezone]+")");
topPanel.find("#read_weekly_day_of_week").text(dayOfWeekString);
topPanel.find("#read_weekly_max").text(max);
topPanel.find("#weekly_edit_link, #weekly_delete_link").data("intervalType", "weekly").data("snapshotPolicyId", json.createsnapshotpolicyresponse.id).data("max",max).data("timezone",timezone).data("minute", minute).data("hour12", hour12).data("meridiem", meridiem).data("dayOfWeek",dayOfWeek);
break;
case "monthly":
topPanel.find("#dialog_snapshot_monthly_info_unset").hide();
topPanel.find("#dialog_snapshot_monthly_info_set").show();
topPanel.find("#read_monthly_minute").text(minute);
topPanel.find("#read_monthly_hour").text(hour12);
topPanel.find("#read_monthly_meridiem").text(meridiem);
topPanel.find("#read_monthly_timezone").text("("+timezones[timezone]+")");
topPanel.find("#read_monthly_day_of_month").text(toDayOfMonthDesp(dayOfMonth));
topPanel.find("#read_monthly_max").text(max);
topPanel.find("#monthly_edit_link, #monthly_delete_link").data("intervalType", "monthly").data("snapshotPolicyId", json.createsnapshotpolicyresponse.id).data("max",max).data("timezone",timezone).data("minute", minute).data("hour12", hour12).data("meridiem", meridiem).data("dayOfMonth",dayOfMonth);
break;
}
},
error: function(XMLHttpResponse) {
handleError(XMLHttpResponse);
}
});
break;
}
});
// *** recurring snapshot dialog - event binding (end) ******************************
}
function volumeAfterDetailsTabAction(jsonObj) {
@ -73,7 +292,7 @@ function volumeJsonToDetailsTab(jsonObj){
$actionMenu.find("#action_list").empty();
buildActionLinkForDetailsTab("Take Snapshot", volumeActionMap, $actionMenu, volumeListAPIMap); //show take snapshot
//buildActionLinkForDetailsTab("Recurring Snapshot", volumeActionMap, $actionMenu, volumeListAPIMap); //show Recurring Snapshot
buildActionLinkForDetailsTab("Recurring Snapshot", volumeActionMap, $actionMenu, volumeListAPIMap); //show Recurring Snapshot
if(jsonObj.state != "Creating" && jsonObj.state != "Corrupted" && jsonObj.name != "attaching") {
if(jsonObj.type=="ROOT") {
@ -145,6 +364,9 @@ var volumeActionMap = {
dialogBeforeActionFn : doTakeSnapshot,
inProcessText: "Taking Snapshot....",
afterActionSeccessFn: function(){}
},
"Recurring Snapshot": {
customActionFn : doRecurringSnapshot
}
}
@ -201,3 +423,169 @@ function doTakeSnapshot($actionLink, listAPIMap, $detailsTab) {
}
}).dialog("open");
}
function clearTopPanel(target) { // "target == null" means target at all (hourly + daily + weekly + monthly)
var dialogBox = $("#dialog_recurring_snapshot");
if(target == "hourly" || target == null) {
dialogBox.find("#dialog_snapshot_hourly_info_unset").show();
dialogBox.find("#dialog_snapshot_hourly_info_set").hide();
dialogBox.find("#read_hourly_max, #read_hourly_minute").text("N/A");
dialogBox.find("#hourly_edit_link, #hourly_delete_link").data("intervalType", "hourly").data("max", "").data("timezone", (g_timezone==null)?"Etc/GMT+12":g_timezone).data("minute", "00");
}
if(target == "daily" || target == null) {
dialogBox.find("#dialog_snapshot_daily_info_unset").show();
dialogBox.find("#dialog_snapshot_daily_info_set").hide();
dialogBox.find("#read_daily_max, #read_daily_minute, #read_daily_hour, #read_daily_meridiem").text("N/A");
dialogBox.find("#daily_edit_link, #daily_delete_link").data("intervalType", "daily").data("max", "").data("timezone", (g_timezone==null)?"Etc/GMT+12":g_timezone).data("minute", "00").data("hour12", "00").data("meridiem", "AM");
}
if(target == "weekly" || target == null) {
dialogBox.find("#dialog_snapshot_weekly_info_unset").show();
dialogBox.find("#dialog_snapshot_weekly_info_set").hide();
dialogBox.find("#read_weekly_max, #read_weekly_minute, #read_weekly_hour, #read_weekly_meridiem, #read_weekly_day_of_week").text("N/A");
dialogBox.find("#weekly_edit_link, #weekly_delete_link").data("intervalType", "weekly").data("max", "").data("timezone", (g_timezone==null)?"Etc/GMT+12":g_timezone).data("minute", "00").data("hour12", "00").data("meridiem", "AM").data("dayOfWeek", "1");
}
if(target == "monthly" || target == null) {
dialogBox.find("#dialog_snapshot_monthly_info_unset").show();
dialogBox.find("#dialog_snapshot_monthly_info_set").hide();
dialogBox.find("#read_monthly_max, #read_monthly_minute, #read_monthly_hour, #read_monthly_meridiem, #read_monthly_day_of_month").text("N/A");
dialogBox.find("#monthly_edit_link, #monthly_delete_link").data("intervalType", "monthly").data("max", "").data("timezone", (g_timezone==null)?"Etc/GMT+12":g_timezone).data("minute", "00").data("hour12", "00").data("meridiem", "AM").data("dayOfMonth", "1");
}
}
function clearBottomPanel() {
var dialogBox = $("#dialog_recurring_snapshot");
dialogBox.find("#edit_hour").val("00");
cleanErrMsg(dialogBox.find("#edit_hour"), dialogBox.find("#edit_time_errormsg"));
dialogBox.find("#edit_minute").val("00");
cleanErrMsg(dialogBox.find("#edit_minute"), dialogBox.find("#edit_time_errormsg"));
dialogBox.find("#edit_meridiem").val("AM");
dialogBox.find("#edit_max").val("");
cleanErrMsg(dialogBox.find("#edit_max"), dialogBox.find("#edit_max_errormsg"));
dialogBox.find("#edit_timezone").val((g_timezone==null)?"Etc/GMT+12":g_timezone);
cleanErrMsg(dialogBox.find("#edit_timezone"), dialogBox.find("#edit_timezone_errormsg"));
dialogBox.find("#edit_day_of_week").val("1");
cleanErrMsg(dialogBox.find("#edit_day_of_week"), dialogBox.find("#edit_day_of_week_errormsg"));
dialogBox.find("#edit_day_of_month").val("1");
cleanErrMsg(dialogBox.find("#edit_day_of_month"), dialogBox.find("#edit_day_of_month_errormsg"));
}
function doRecurringSnapshot() {
var $detailsTab = $("#right_panel_content #tab_content_details");
var volumeId = $detailsTab.data("jsonObj").id;
var dialogBox = $("#dialog_recurring_snapshot");
clearTopPanel();
$.ajax({
data: createURL("command=listSnapshotPolicies&volumeid="+volumeId),
dataType: "json",
async: false,
success: function(json) {
var items = json.listsnapshotpoliciesresponse.snapshotpolicy;
if(items!=null && items.length>0) {
for(var i=0; i<items.length; i++) {
var item = items[i];
switch(item.intervaltype) {
case "0": //hourly
dialogBox.find("#dialog_snapshot_hourly_info_unset").hide();
dialogBox.find("#dialog_snapshot_hourly_info_set").show();
dialogBox.find("#read_hourly_max").text(item.maxsnaps);
dialogBox.find("#read_hourly_minute").text(item.schedule);
dialogBox.find("#read_hourly_timezone").text("("+timezones[item.timezone]+")");
dialogBox.find("#hourly_edit_link, #hourly_delete_link").data("intervalType", "hourly").data("snapshotPolicyId", item.id).data("max",item.maxsnaps).data("timezone",item.timezone).data("minute", item.schedule);
break;
case "1": //daily
dialogBox.find("#dialog_snapshot_daily_info_unset").hide();
dialogBox.find("#dialog_snapshot_daily_info_set").show();
dialogBox.find("#read_daily_max").text(item.maxsnaps);
var parts = item.schedule.split(":");
dialogBox.find("#read_daily_minute").text(parts[0]);
var hour12, meridiem;
var hour24 = parts[1];
if(hour24 < 12) {
hour12 = hour24;
meridiem = "AM";
}
else {
hour12 = hour24 - 12;
meridiem = "PM"
}
if (hour12 < 10 && hour12.toString().length==1)
hour12 = "0"+hour12.toString();
dialogBox.find("#read_daily_hour").text(hour12);
dialogBox.find("#read_daily_meridiem").text(meridiem);
dialogBox.find("#read_daily_timezone").text("("+timezones[item.timezone]+")");
dialogBox.find("#daily_edit_link, #daily_delete_link").data("intervalType", "daily").data("snapshotPolicyId", item.id).data("max",item.maxsnaps).data("timezone",item.timezone).data("minute", parts[0]).data("hour12", hour12).data("meridiem", meridiem);
break;
case "2": //weekly
dialogBox.find("#dialog_snapshot_weekly_info_unset").hide();
dialogBox.find("#dialog_snapshot_weekly_info_set").show();
dialogBox.find("#read_weekly_max").text(item.maxsnaps);
var parts = item.schedule.split(":");
dialogBox.find("#read_weekly_minute").text(parts[0]);
var hour12, meridiem;
var hour24 = parts[1];
if(hour24 < 12) {
hour12 = hour24;
meridiem = "AM";
}
else {
hour12 = hour24 - 12;
meridiem = "PM"
}
if (hour12 < 10 && hour12.toString().length==1)
hour12 = "0"+hour12.toString();
dialogBox.find("#read_weekly_hour").text(hour12);
dialogBox.find("#read_weekly_meridiem").text(meridiem);
dialogBox.find("#read_weekly_timezone").text("("+timezones[item.timezone]+")");
dialogBox.find("#read_weekly_day_of_week").text(toDayOfWeekDesp(parts[2]));
dialogBox.find("#weekly_edit_link, #weekly_delete_link").data("intervalType", "weekly").data("snapshotPolicyId", item.id).data("max",item.maxsnaps).data("timezone",item.timezone).data("minute", parts[0]).data("hour12", hour12).data("meridiem", meridiem).data("dayOfWeek",parts[2]);
break;
case "3": //monthly
dialogBox.find("#dialog_snapshot_monthly_info_unset").hide();
dialogBox.find("#dialog_snapshot_monthly_info_set").show();
dialogBox.find("#read_monthly_max").text(item.maxsnaps);
var parts = item.schedule.split(":");
dialogBox.find("#read_monthly_minute").text(parts[0]);
var hour12, meridiem;
var hour24 = parts[1];
if(hour24 < 12) {
hour12 = hour24;
meridiem = "AM";
}
else {
hour12 = hour24 - 12;
meridiem = "PM"
}
if (hour12 < 10 && hour12.toString().length==1)
hour12 = "0"+hour12.toString();
dialogBox.find("#read_monthly_hour").text(hour12);
dialogBox.find("#read_monthly_meridiem").text(meridiem);
dialogBox.find("#read_monthly_timezone").text("("+timezones[item.timezone]+")");
dialogBox.find("#read_monthly_day_of_month").text(toDayOfMonthDesp(parts[2]));
dialogBox.find("#monthly_edit_link, #monthly_delete_link").data("intervalType", "monthly").data("snapshotPolicyId", item.id).data("max",item.maxsnaps).data("timezone",item.timezone).data("minute", parts[0]).data("hour12", hour12).data("meridiem", meridiem).data("dayOfMonth",parts[2]);
break;
}
}
}
},
error: function(XMLHttpResponse) {
handleError(XMLHttpResponse);
}
});
dialogBox
.dialog('option', 'buttons', {
"Close": function() {
$("#dialog_snapshotright").hide(0, function() { $(this).height("0px");});
$(this).dialog("close");
}
}).dialog("open").data("volumeId", volumeId);
}

View File

@ -23,7 +23,7 @@ function showStorageTab(domainId, targetTab) {
var populateZoneField = function(isAdmin) {
$.ajax({
data: createURL("command=listZones&available=true&response=json"+maxPageSize),
data: createURL("command=listZones&available=true&response=json"+maxPageSize),
dataType: "json",
success: function(json) {
var zones = json.listzonesresponse.zone;
@ -50,7 +50,7 @@ function showStorageTab(domainId, targetTab) {
var populateDiskOfferingField = function() {
$.ajax({
data: createURL("command=listDiskOfferings&response=json"),
data: createURL("command=listDiskOfferings&response=json"),
dataType: "json",
success: function(json) {
var offerings = json.listdiskofferingsresponse.diskoffering;