summaryrefslogtreecommitdiff
path: root/modules/gallery/views/admin_maintenance_task.html.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules/gallery/views/admin_maintenance_task.html.php')
-rw-r--r--modules/gallery/views/admin_maintenance_task.html.php84
1 files changed, 84 insertions, 0 deletions
diff --git a/modules/gallery/views/admin_maintenance_task.html.php b/modules/gallery/views/admin_maintenance_task.html.php
new file mode 100644
index 0000000..013ac01
--- /dev/null
+++ b/modules/gallery/views/admin_maintenance_task.html.php
@@ -0,0 +1,84 @@
+<?php defined("SYSPATH") or die("No direct script access.") ?>
+<script type="text/javascript">
+ var target_value;
+ var animation = null;
+ var delta = 1;
+ var consecutive_error_count = 0;
+ animate_progress_bar = function() {
+ var current_value = parseInt($(".g-progress-bar div").css("width").replace("%", ""));
+ if (target_value > current_value) {
+ // speed up
+ delta = Math.min(delta + 0.04, 3);
+ } else {
+ // slow down
+ delta = Math.max(delta - 0.05, 1);
+ }
+
+ if (target_value == 100) {
+ $(".g-progress-bar").progressbar("value", 100);
+ } else if (current_value != target_value || delta != 1) {
+ var new_value = Math.min(current_value + delta, target_value);
+ $(".g-progress-bar").progressbar("value", new_value);
+ animation = setTimeout(function() { animate_progress_bar(target_value); }, 100);
+ } else {
+ animation = null;
+ delta = 1;
+ }
+ $.fn.gallery_hover_init();
+ }
+
+ var FAILED_MSG = <?= t("Something went wrong...sorry! <a>Retry</a> or check the task log for details")->for_js() ?>;
+ var ERROR_MSG = <?= t("Something went wrong! Trying again in a moment... (__COUNT__)")->for_js() ?>;
+ update = function() {
+ $.ajax({
+ url: <?= html::js_string(url::site("admin/maintenance/run/$task->id?csrf=$csrf")) ?>,
+ dataType: "json",
+ success: function(data) {
+ target_value = data.task.percent_complete;
+ consecutive_error_count = 0;
+ if (!animation) {
+ animate_progress_bar();
+ }
+ $("#g-status").html("" + data.task.status);
+ if (data.task.done) {
+ $("#g-pause-button").hide();
+ $("#g-done-button").show();
+ } else {
+ setTimeout(update, 100);
+ }
+ },
+ error: function(req, textStatus, errorThrown) {
+ if (textStatus == "timeout" || textStatus == "parsererror") {
+ consecutive_error_count++;
+ if (consecutive_error_count == 5) {
+ $("#g-status").html(FAILED_MSG);
+ $("#g-pause-button").hide();
+ $("#g-done-button").show();
+ consecutive_error_count = 0; // in case of a manual retry
+ $("#g-status a").attr("href", "javascript:update()");
+ } else {
+ $("#g-status").html(ERROR_MSG.replace("__COUNT__", consecutive_error_count));
+ // Give a little time to back off before retrying
+ setTimeout(update, 1500 * consecutive_error_count);
+ }
+ }
+ }
+ });
+ }
+ $(".g-progress-bar").progressbar({value: 0});
+ update();
+ dismiss = function() {
+ window.location.reload();
+ }
+</script>
+<div id="g-progress">
+ <h1> <?= $task->name ?> </h1>
+ <div class="g-progress-bar"></div>
+ <div id="g-status">
+ <?= t("Starting up...") ?>
+ </div>
+ <div class="g-text-right">
+ <button id="g-pause-button" class="ui-state-default ui-corner-all" onclick="dismiss()"><?= t("Pause") ?></button>
+ <button id="g-done-button" class="ui-state-default ui-corner-all" style="display: none" onclick="dismiss()"><?= t("Close") ?></button>
+ </div>
+</div>