diff --git a/dashboard-ui/scripts/scheduledtaskspage.js b/dashboard-ui/scripts/scheduledtaskspage.js
index 1b1d273334..88990af577 100644
--- a/dashboard-ui/scripts/scheduledtaskspage.js
+++ b/dashboard-ui/scripts/scheduledtaskspage.js
@@ -1,63 +1,24 @@
-var ScheduledTasksPage = {
+(function ($, document, window) {
- onPageShow: function () {
-
- Dashboard.showLoadingMsg();
-
- ScheduledTasksPage.reloadList(true);
-
- $(ApiClient).on("websocketmessage", ScheduledTasksPage.onWebSocketMessage).on("websocketopen", ScheduledTasksPage.onWebSocketConnectionChange).on("websocketerror", ScheduledTasksPage.onWebSocketConnectionChange).on("websocketclose", ScheduledTasksPage.onWebSocketConnectionChange);
- },
-
- onPageHide: function () {
- $(ApiClient).off("websocketmessage", ScheduledTasksPage.onWebSocketMessage).off("websocketopen", ScheduledTasksPage.onWebSocketConnectionChange).off("websocketerror", ScheduledTasksPage.onWebSocketConnectionChange).off("websocketclose", ScheduledTasksPage.onWebSocketConnectionChange);
- ScheduledTasksPage.stopInterval();
- },
-
- startInterval: function () {
-
- if (ApiClient.isWebSocketOpen()) {
- ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500");
- }
- },
-
- stopInterval: function () {
-
- if (ApiClient.isWebSocketOpen()) {
- ApiClient.sendWebSocketMessage("ScheduledTasksInfoStop");
- }
- },
-
- onWebSocketMessage: function (e, msg) {
-
- if (msg.MessageType == "ScheduledTasksInfo") {
- ScheduledTasksPage.populateList(msg.Data);
- }
- },
-
- onWebSocketConnectionChange: function() {
- ScheduledTasksPage.reloadList(true);
- },
-
- reloadList: function (updateInterval) {
+ function reloadList(page, updateInterval) {
if (updateInterval) {
- ScheduledTasksPage.stopInterval();
+ stopInterval();
}
ApiClient.getScheduledTasks().done(function (tasks) {
- ScheduledTasksPage.populateList(tasks);
+
+ populateList(page, tasks);
Dashboard.hideLoadingMsg();
if (updateInterval) {
- ScheduledTasksPage.startInterval();
+ startInterval();
}
});
- },
-
- populateList: function (tasks) {
+ }
+ function populateList(page, tasks) {
tasks = tasks.sort(function (a, b) {
a = a.Category + " " + a.Name;
@@ -74,8 +35,6 @@
return 1;
});
- var page = $($.mobile.activePage);
-
var html = "";
html += '
';
@@ -98,44 +57,19 @@
html += "" + task.Name + "
";
+ html += "" + getTaskProgressHtml(task) + "
";
+
if (task.State == "Idle") {
- if (task.LastExecutionResult) {
-
- var text = "Last ran " + humane_date(task.LastExecutionResult.EndTimeUtc) + ', taking ' + humane_elapsed(task.LastExecutionResult.StartTimeUtc, task.LastExecutionResult.EndTimeUtc);
-
- if (task.LastExecutionResult.Status == "Failed") {
- text += " (failed)";
- }
- else if (task.LastExecutionResult.Status == "Cancelled") {
- text += " (cancelled)";
- }
- else if (task.LastExecutionResult.Status == "Aborted") {
- text += " (Aborted by server shutdown)";
- }
-
- html += "" + text + "
";
- }
-
- html += "Start";
+ html += "Start";
}
else if (task.State == "Running") {
- var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
-
- html += '';
-
- html += "" + progress + "%";
- html += '
';
-
- html += "Stop";
+ html += "Stop";
} else {
- html += "Stopping
";
- html += "Start";
+ html += "Start";
}
html += "";
@@ -146,24 +80,128 @@
html += "
";
$('#divScheduledTasks', page).html(html).trigger('create');
- },
-
- startTask: function (id) {
-
- ApiClient.startScheduledTask(id).done(function (result) {
-
- ScheduledTasksPage.reloadList();
- });
-
- },
-
- stopTask: function (id) {
-
- ApiClient.stopScheduledTask(id).done(function (result) {
-
- ScheduledTasksPage.reloadList();
- });
}
-};
-$(document).on('pageshow', "#scheduledTasksPage", ScheduledTasksPage.onPageShow).on('pagehide', "#scheduledTasksPage", ScheduledTasksPage.onPageHide);
\ No newline at end of file
+ function getTaskProgressHtml(task) {
+ var html = '';
+
+ if (task.State == "Idle") {
+
+ if (task.LastExecutionResult) {
+
+ html += "Last ran " + humane_date(task.LastExecutionResult.EndTimeUtc) + ', taking ' + humane_elapsed(task.LastExecutionResult.StartTimeUtc, task.LastExecutionResult.EndTimeUtc);
+
+ if (task.LastExecutionResult.Status == "Failed") {
+ html += " (failed)";
+ }
+ else if (task.LastExecutionResult.Status == "Cancelled") {
+ html += " (cancelled)";
+ }
+ else if (task.LastExecutionResult.Status == "Aborted") {
+ html += " (Aborted by server shutdown)";
+ }
+ }
+ }
+ else if (task.State == "Running") {
+
+ var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
+
+ html += '';
+
+ html += "" + progress + "%";
+
+ } else {
+
+ html += "Stopping";
+ }
+
+ return html;
+ }
+
+ function onWebSocketMessage(e, msg) {
+ if (msg.MessageType == "ScheduledTasksInfo") {
+
+ var tasks = msg.Data;
+
+ var page = $.mobile.activePage;
+
+ for (var i = 0, length = tasks.length; i < length; i++) {
+
+ var task = tasks[i];
+
+ $('#' + task.Id, page).html(getTaskProgressHtml(task));
+
+ var btnTask = $('#btnTask' + task.Id, page);
+
+ if (task.State == "Idle") {
+
+ btnTask.addClass('btnStartTask').removeClass('btnStopTask').show().data('icon', 'play').buttonMarkup("refresh");
+ }
+ else if (task.State == "Running") {
+
+ btnTask.addClass('btnStopTask').removeClass('btnStartTask').show().data('icon', 'stop').buttonMarkup("refresh");
+
+ } else {
+
+ btnTask.addClass('btnStartTask').removeClass('btnStopTask').hide().data('icon', 'play').buttonMarkup("refresh");
+ }
+ }
+ }
+ }
+
+ function onWebSocketConnectionChange() {
+ reloadList($.mobile.activePage, true);
+ }
+
+ function startInterval() {
+ if (ApiClient.isWebSocketOpen()) {
+ ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500");
+ }
+ }
+
+ function stopInterval() {
+ if (ApiClient.isWebSocketOpen()) {
+ ApiClient.sendWebSocketMessage("ScheduledTasksInfoStop");
+ }
+ }
+
+ $(document).on('pageshow', "#scheduledTasksPage", function () {
+
+ var page = this;
+
+ Dashboard.showLoadingMsg();
+
+ reloadList(page, true);
+
+ $(ApiClient).on("websocketmessage", onWebSocketMessage).on("websocketopen", onWebSocketConnectionChange).on("websocketerror", onWebSocketConnectionChange).on("websocketclose", onWebSocketConnectionChange);
+
+ $('#divScheduledTasks', page).on('click', '.btnStartTask', function () {
+
+ var id = this.getAttribute('data-taskid');
+ ApiClient.startScheduledTask(id).done(function () {
+
+ reloadList(page);
+ });
+
+ }).on('click', '.btnStopTask', function () {
+
+ var id = this.getAttribute('data-taskid');
+ ApiClient.stopScheduledTask(id).done(function () {
+
+ reloadList(page);
+ });
+ });
+
+ }).on('pagehide', "#scheduledTasksPage", function () {
+
+ var page = this;
+
+ $(ApiClient).off("websocketmessage", onWebSocketMessage).off("websocketopen", onWebSocketConnectionChange).off("websocketerror", onWebSocketConnectionChange).off("websocketclose", onWebSocketConnectionChange);
+ stopInterval();
+
+ $('#divScheduledTasks', page).off('click', '.btnStartTask').off('click', '.btnStopTask');
+ });
+
+})(jQuery, document, window);
\ No newline at end of file