From 4a8725b8dcac3bd0e7afe463968d281e4cf8df6c Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 20 May 2014 19:20:02 +0200 Subject: JS Stuff for Taskmanager interaction More work on AD wizard --- script/custom.js | 19 ++++++- script/taskmanager.js | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 script/taskmanager.js (limited to 'script') diff --git a/script/custom.js b/script/custom.js index 3269749e..12e760af 100644 --- a/script/custom.js +++ b/script/custom.js @@ -1,3 +1,4 @@ +/* function loadContent(elem, source) { $(elem).html('
In Progress....
'); @@ -14,4 +15,20 @@ function selectDir(obj) if (text.substr(0, dirname.length) !== dirname) return; $(this).parent().find('.fileBox')[0].checked = obj.checked; }); -} \ No newline at end of file +} +*/ + +function updater(url, postdata, callback) +{ + var updateTimer = setInterval(function () { + if (typeof $ === 'undefined') + return; + $.post(url, postdata, function (data, status) { + if (!callback(data, status)) + clearInterval(updateTimer); + }, 'json').fail(function (jqXHR, textStatus, errorThrown) { + if (!callback(errorThrown, textStatus)) + clearInterval(updateTimer); + }); + }, 1000); +} diff --git a/script/taskmanager.js b/script/taskmanager.js new file mode 100644 index 00000000..da3a0586 --- /dev/null +++ b/script/taskmanager.js @@ -0,0 +1,141 @@ +var tmItems = false; +var tmErrors = 0; +var TM_MAX_ERRORS = 5; + +function tmInit() +{ + tmItems = $("div[data-tm-id]"); + if (tmItems.length === 0) return; + tmItems.each(function(i, item) { + item = $(item); + if (item.is('[data-tm-progress]')) { + item.append('
'); + } + if (item.is('[data-tm-log]')) { + item.append('
');
+		}
+		item.prepend('');
+	});
+	setTimeout(tmUpdate, 100);
+}
+
+function tmUpdate()
+{
+	var active = [];
+	tmItems.each(function(i, item) {
+		item = $(item);
+		var id = item.attr('data-tm-id');
+		if (typeof id === 'undefined' || id === false || id === '') return;
+		active.push(id);
+	});
+	if (active.length === 0) return;
+	$.post('api.php?do=taskmanager', { 'ids[]' : active, token : TOKEN }, function (data, status) {
+		// POST success
+		if (tmResult(data, status)) {
+			setTimeout(tmUpdate, 1000);
+		}
+	}, 'json').fail(function (jqXHR, textStatus, errorThrown) {
+		// POST failure
+		console.log("TaskManager Error: " + textStatus + " - " + errorThrown);
+		if (++tmErrors < TM_MAX_ERRORS) setTimeout(tmUpdate, 2000);
+	});
+}
+
+function tmResult(data, status)
+{
+	// Bail out on error
+	if (typeof data.error !== 'undefined') {
+		$('#mainpage').prepend($('
').append(document.createTextNode(data.error))); + console.log("Error ERROR"); + return false; + } + // No task list is also bad + if (typeof data.tasks === 'undefined') { + $('#mainpage').prepend('
Internal Error #67452
'); + console.log("Error UNEXPECTED"); + return false; + } + var lastRunOnError = (tmErrors > TM_MAX_ERRORS); + // Let's continue handling stuff + var counter = 0; + for (var idx in data.tasks) { + var task = data.tasks[idx]; + if (!task.id) continue; + counter++; + if (lastRunOnError) { + task.statusCode = 'TASK_ERROR'; + } else if (task.error) { + ++tmErrors; + continue; + } else if (tmErrors > 0) { + --tmErrors; + } + var obj = $('div[data-tm-id="' + task.id + '"]'); + if (!obj) continue; + if (task.statusCode === 'TASK_FINISHED') { + obj.attr('data-tm-id', ''); + } + var icon = obj.find('.data-tm-icon'); + if (icon) { + if (typeof task.statusCode === 'undefined') { + icon.attr('class', 'data-tm-icon glyphicon glyphicon-question-sign'); + } else if (task.statusCode === 'TASK_WAITING') { + icon.attr('class', 'data-tm-icon glyphicon glyphicon-pause'); + } else if (task.statusCode === 'TASK_PROCESSING') { + icon.attr('class', 'data-tm-icon glyphicon glyphicon-play'); + } else if (task.statusCode === 'TASK_FINISHED') { + icon.attr('class', 'data-tm-icon glyphicon glyphicon-ok'); + } else if (task.statusCode === 'TASK_ERROR') { + icon.attr('class', 'data-tm-icon glyphicon glyphicon-remove'); + } else { + icon.attr('class', 'data-tm-icon glyphicon glyphicon-trash'); + } + } + var progress = obj.find('.data-tm-progress'); + if (progress) { + var pKey = obj.attr('data-tm-progress'); + if (task.data && task.data[pKey]) { + tmSetProgress(progress, task.data[pKey], task.statusCode); + } else { + tmSetProgress(progress, false, task.statusCode); + } + } + var log = obj.find('.data-tm-log'); + if (log) { + var lKey = obj.attr('data-tm-log'); + if (task.data && task.data[lKey]) { + log.text(task.data[lKey]); + } + } + var cb = obj.attr('data-tm-callback'); + if (cb && window[cb]) { + window[cb](task); + } + } + if (lastRunOnError) { + $('#mainpage').prepend($('
').append(document.createTextNode(task.error))); + return false; + } + return counter > 0; +} + +function tmSetProgress(elem, percent, status) +{ + var outer = '', inner = ''; + if (status === 'TASK_PROCESSING') { + outer = ' active'; + } else if (status === 'TASK_ERROR') { + inner = ' progress-bar-danger'; + } else if (status === 'TASK_FINISHED') { + inner = ' progress-bar-success'; + } + elem.find('.progress').attr('class', 'progress progress-striped' + outer); + var bar = elem.find('.progress-bar'); + bar.attr('class', 'progress-bar' + inner); + if (percent !== false) { + bar.attr('aria-valuenow', percent); + bar.attr('style', 'width: ' + percent + '%'); + } +} + +tmInit(); -- cgit v1.2.3-55-g7522