ScheduledTaskPage.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. var ScheduledTaskPage = {
  2. onPageShow: function () {
  3. ScheduledTaskPage.refreshScheduledTask();
  4. },
  5. refreshScheduledTask: function () {
  6. Dashboard.showLoadingMsg();
  7. var id = getParameterByName('id');
  8. ApiClient.getScheduledTask(id).done(ScheduledTaskPage.loadScheduledTask);
  9. },
  10. loadScheduledTask: function (task) {
  11. Dashboard.setPageTitle(task.Name);
  12. $('#pTaskDescription', $.mobile.activePage).html(task.Description);
  13. ScheduledTaskPage.loadTaskTriggers(task);
  14. Dashboard.hideLoadingMsg();
  15. },
  16. loadTaskTriggers: function (task) {
  17. var html = '';
  18. html += '<li data-role="list-divider"><h3>Task Triggers</h3></li>';
  19. for (var i = 0, length = task.Triggers.length; i < length; i++) {
  20. var trigger = task.Triggers[i];
  21. html += '<li>';
  22. html += '<a href="#">';
  23. html += ScheduledTaskPage.getTriggerFriendlyName(trigger);
  24. html += '</a>';
  25. html += '<a href="#" onclick="ScheduledTaskPage.confirmDeleteTrigger(' + i + ');">Delete</a>';
  26. html += '</li>';
  27. }
  28. $('#ulTaskTriggers', $.mobile.activePage).html(html).listview('refresh');
  29. },
  30. getTriggerFriendlyName: function (trigger) {
  31. if (trigger.Type == 'DailyTrigger') {
  32. return 'Daily at ' + ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks);
  33. }
  34. if (trigger.Type == 'WeeklyTrigger') {
  35. return trigger.DayOfWeek + 's at ' + ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks);
  36. }
  37. if (trigger.Type == 'SystemEventTrigger') {
  38. if (trigger.SystemEvent == 'WakeFromSleep') {
  39. return 'On wake from sleep';
  40. }
  41. }
  42. if (trigger.Type == 'IntervalTrigger') {
  43. var hours = trigger.IntervalTicks / 36000000000;
  44. if (hours == .25) {
  45. return "Every 15 minutes";
  46. }
  47. if (hours == .5) {
  48. return "Every 30 minutes";
  49. }
  50. if (hours == .75) {
  51. return "Every 45 minutes";
  52. }
  53. if (hours == 1) {
  54. return "Every hour";
  55. }
  56. return 'Every ' + hours + ' hours';
  57. }
  58. if (trigger.Type == 'StartupTrigger') {
  59. return 'On application startup';
  60. }
  61. return trigger.Type;
  62. },
  63. getDisplayTime: function (ticks) {
  64. var hours = ticks / 36000000000;
  65. if (hours < 1) {
  66. hours = 0;
  67. }
  68. hours = parseInt(hours);
  69. ticks -= (hours * 36000000000);
  70. var minutes = parseInt(ticks / 600000000);
  71. var suffix = "am";
  72. if (hours > 11) {
  73. suffix = "pm";
  74. }
  75. hours = hours % 12;
  76. if (hours == 0) {
  77. hours = 12;
  78. }
  79. if (minutes < 10) {
  80. minutes = '0' + minutes;
  81. }
  82. return hours + ':' + minutes + ' ' + suffix;
  83. },
  84. showAddTriggerPopup: function () {
  85. var page = $.mobile.activePage;
  86. $('#selectTriggerType', page).val('DailyTrigger').trigger('change').selectmenu('refresh');
  87. $('#popupAddTrigger', page).popup("open").on("popupafterclose", function () {
  88. $('#addTriggerForm', page).off("submit");
  89. $(this).off("popupafterclose");
  90. });
  91. $('#addTriggerForm', page).on('submit', function () {
  92. ScheduledTaskPage.addTrigger();
  93. return false;
  94. });
  95. },
  96. addTrigger: function () {
  97. Dashboard.showLoadingMsg();
  98. var id = getParameterByName('id');
  99. ApiClient.getScheduledTask(id).done(function (task) {
  100. task.Triggers.push(ScheduledTaskPage.getTriggerToAdd());
  101. ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).done(function () {
  102. $('#popupAddTrigger').popup('close');
  103. ScheduledTaskPage.refreshScheduledTask();
  104. });
  105. });
  106. },
  107. confirmDeleteTrigger: function (index) {
  108. Dashboard.confirm("Are you sure you wish to delete this task trigger?", "Delete Task Trigger", function (result) {
  109. if (result) {
  110. ScheduledTaskPage.deleteTrigger(index);
  111. }
  112. });
  113. },
  114. deleteTrigger: function (index) {
  115. Dashboard.showLoadingMsg();
  116. var id = getParameterByName('id');
  117. ApiClient.getScheduledTask(id).done(function (task) {
  118. task.Triggers.remove(index);
  119. ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).done(function () {
  120. ScheduledTaskPage.refreshScheduledTask();
  121. });
  122. });
  123. },
  124. refreshTriggerFields: function (triggerType) {
  125. var page = $.mobile.activePage;
  126. if (triggerType == 'DailyTrigger') {
  127. $('#fldTimeOfDay', page).show();
  128. $('#fldDayOfWeek', page).hide();
  129. $('#fldSelectSystemEvent', page).hide();
  130. $('#fldSelectInterval', page).hide();
  131. $('#txtTimeOfDay', page).attr('required', 'required');
  132. }
  133. else if (triggerType == 'WeeklyTrigger') {
  134. $('#fldTimeOfDay', page).show();
  135. $('#fldDayOfWeek', page).show();
  136. $('#fldSelectSystemEvent', page).hide();
  137. $('#fldSelectInterval', page).hide();
  138. $('#txtTimeOfDay', page).attr('required', 'required');
  139. }
  140. else if (triggerType == 'SystemEventTrigger') {
  141. $('#fldTimeOfDay', page).hide();
  142. $('#fldDayOfWeek', page).hide();
  143. $('#fldSelectSystemEvent', page).show();
  144. $('#fldSelectInterval', page).hide();
  145. $('#txtTimeOfDay', page).removeAttr('required');
  146. }
  147. else if (triggerType == 'IntervalTrigger') {
  148. $('#fldTimeOfDay', page).hide();
  149. $('#fldDayOfWeek', page).hide();
  150. $('#fldSelectSystemEvent', page).hide();
  151. $('#fldSelectInterval', page).show();
  152. $('#txtTimeOfDay', page).removeAttr('required');
  153. }
  154. else if (triggerType == 'StartupTrigger') {
  155. $('#fldTimeOfDay', page).hide();
  156. $('#fldDayOfWeek', page).hide();
  157. $('#fldSelectSystemEvent', page).hide();
  158. $('#fldSelectInterval', page).hide();
  159. $('#txtTimeOfDay', page).removeAttr('required');
  160. }
  161. },
  162. getTriggerToAdd: function () {
  163. var page = $.mobile.activePage;
  164. var trigger = {
  165. Type: $('#selectTriggerType', page).val()
  166. };
  167. if (trigger.Type == 'DailyTrigger') {
  168. trigger.TimeOfDayTicks = ScheduledTaskPage.getTimeOfDayTicks($('#txtTimeOfDay', page).val());
  169. }
  170. else if (trigger.Type == 'WeeklyTrigger') {
  171. trigger.DayOfWeek = $('#selectDayOfWeek', page).val();
  172. trigger.TimeOfDayTicks = ScheduledTaskPage.getTimeOfDayTicks($('#txtTimeOfDay', page).val());
  173. }
  174. else if (trigger.Type == 'SystemEventTrigger') {
  175. trigger.SystemEvent = $('#selectSystemEvent', page).val();
  176. }
  177. else if (trigger.Type == 'IntervalTrigger') {
  178. trigger.IntervalTicks = $('#selectInterval', page).val();
  179. }
  180. return trigger;
  181. },
  182. getTimeOfDayTicks: function (val) {
  183. var vals = val.split(':');
  184. var hours = vals[0];
  185. var minutes = vals[1];
  186. // Add hours
  187. var ticks = hours * 60 * 60 * 1000 * 10000;
  188. ticks += minutes * 60 * 1000 * 10000;
  189. return ticks;
  190. }
  191. };
  192. $(document).on('pageshow', "#scheduledTaskPage", ScheduledTaskPage.onPageShow);