if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (elt /*, from*/) { var len = this.length; var from = Number(arguments[1]) || 0; from = (from < 0) ? Math.ceil(from) : Math.floor(from); if (from < 0) from += len; for (; from < len; from++) { if (from in this && this[from] === elt) return from; } return -1; }; } var kanban = {}; kanban.KanbanUrl = "/"; kanban.SettingsUrl = "/Kanban/Settings"; kanban.SaveSettingsUrl = "/Kanban/SaveSettings"; kanban.ResetSettingsUrl = "/Kanban/ResetSettings"; kanban.notifications = new Array(); kanban.cancelledNotifications = new Array(); kanban.notify = function(label, theme, sticky) { if (typeof sticky == "undefined") sticky = false; var id = kanban.notifications.length; $.jGrowl(label, { theme: theme, sticky: sticky, open: function(e,m,o){ if (kanban.notifications[id] == id) setTimeout(function(){ e.find(".jGrowl-close").click(); }, 0); else kanban.notifications[id] = e; } }); return id; } kanban.endNotify = function(notificationId) { if (typeof kanban.notifications[notificationId] == "undefined") kanban.notifications[notificationId] = notificationId; else setTimeout(function(){ kanban.notifications[notificationId].find(".jGrowl-close").click(); }, 0); } kanban.saveSettings = function (reload) { $.ajax({ url: kanban.SaveSettingsUrl, data: kanban.settings, type: "POST", success: function (result) { if (!result.success) { $.jGrowl(result.error, { theme: 'error' }); } else { $.jGrowl("Connection details validated, loading kanban ...", { theme: 'saved', close: function () { window.localStorage.settings = JSON.stringify(kanban.settings); window.location.href = kanban.KanbanUrl; } }); } }, error: function (a, b) { $.jGrowl("Error initialising session: " + b, { theme: 'error' }); } }); } kanban.resetSettings = function () { kanban.settings = null; window.localStorage.settings = null; $.ajax({ url: kanban.ResetSettingsUrl, type: "POST", success: function () { location.reload(); }, error: function (a, b) { $.jGrowl("Error resetting session: " + b, { theme: 'error' ,close: function () { location.reload(); } }); } }); } kanban.changeStatus = function (ticket, ticketId, statusId, cancelHandler) { var notificationId = kanban.notify("Updating status...", "saved", true); $.ajax({ url: kanban.ChangeStatusUrl, type: "POST", data: JSON.stringify({ ticketId: ticketId, statusId: statusId }), traditional: true, contentType: 'application/json; charset=utf-8', async: true, success: function (result) { kanban.endNotify(notificationId); if (!result.success) { // TODO: react on required fields in jira kanban.notify("Error updating status. " + result.error, "error"); } else { ticket.data('statusId', statusId); ticket.data("transitions", result.transitions); kanban.notify("Status updated.", "success"); } }, error: function (a,b) { kanban.endNotify(notificationId); kanban.notify("Error updating status", "error"); cancelHandler.apply(); } }); return true; } kanban.isValidDropTarget = function(dragElement, ui) { var transitions = ui.item.find(".box").data("transitions"); if (typeof transitions != "undefined" && transitions != null && transitions != "") { transitions = ("" + transitions).split(","); if (transitions.indexOf(dragElement.id) == -1) return false; } return true; } $(document).ready(function() { if (typeof kanban.settings == "undefined") { try { kanban.settings = JSON.parse(window.localStorage.settings); } catch(ex) { kanban.settings = { }; } } else { window.localStorage.settings = JSON.stringify(kanban.settings); } });