(function() { var checkInterval = null; function on_popover(e) { e.preventDefault(); e.stopPropagation(); Kanboard.Popover(e, Kanboard.InitAfterAjax); } function keyboard_shortcuts() { Mousetrap.bind("n", function() { Kanboard.OpenPopover( $("#board").data("task-creation-url"), Kanboard.InitAfterAjax ); }); Mousetrap.bind("s", function() { stack_toggle(); }); Mousetrap.bind("c", function() { compactview_toggle(); }); } // Collapse/Expand tasks function stack_load_events() { $(".filter-expand-link").click(function(e) { e.preventDefault(); stack_expand(); Kanboard.SetStorageItem(stack_key(), "expanded"); }); $(".filter-collapse-link").click(function(e) { e.preventDefault(); stack_collapse(); Kanboard.SetStorageItem(stack_key(), "collapsed"); }); stack_show(); } function stack_key() { var projectId = $('#board').data('project-id'); return "board_stacking_" + projectId; } function stack_collapse() { $(".filter-collapse").hide(); $(".task-board-collapsed").show(); $(".filter-expand").show(); $(".task-board-expanded").hide(); } function stack_expand() { $(".filter-collapse").show(); $(".task-board-collapsed").hide(); $(".filter-expand").hide(); $(".task-board-expanded").show(); } function stack_toggle() { var state = Kanboard.GetStorageItem(stack_key()) || "expanded"; if (state === "expanded") { stack_collapse(); Kanboard.SetStorageItem(stack_key(), "collapsed"); } else { stack_expand(); Kanboard.SetStorageItem(stack_key(), "expanded"); } } function stack_show() { var state = Kanboard.GetStorageItem(stack_key()) || "expanded"; if (state === "expanded") { stack_expand(); } else { stack_collapse(); } } // Setup the board function board_load_events() { // Drag and drop $(".column").sortable({ delay: 300, distance: 5, connectWith: ".column", placeholder: "draggable-placeholder", items: ".draggable-item", stop: function(event, ui) { board_save( ui.item.attr('data-task-id'), ui.item.parent().attr("data-column-id"), ui.item.index() + 1, ui.item.parent().attr('data-swimlane-id') ); } }); // Task popover $("#board").on("click", ".task-board-popover", on_popover); // Redirect to the task details page $("#board").on("click", ".task-board", function() { window.location = $(this).data("task-url"); }); // Tooltips for tasks $(".task-board-tooltip").tooltip({ track: false, position: { my: 'left-20 top', at: 'center bottom+9', using: function(position, feedback) { $(this).css(position); var arrow_pos = feedback.target.left + feedback.target.width / 2 - feedback.element.left - 20; $("
") .addClass("tooltip-arrow") .addClass(feedback.vertical) .addClass(arrow_pos < 1 ? "align-left" : "align-right") .appendTo(this); } }, content: function(e) { var href = $(this).attr('data-href'); if (! href) { return; } var _this = this; $.get(href, function setTooltipContent(data) { $('.ui-tooltip-content:visible').html(data); var tooltip = $('.ui-tooltip:visible'); // Clear previous position, it interferes with the updated position computation tooltip.css({ top: '', left: '' }); // Remove arrow, it will be added when repositionning tooltip.children('.tooltip-arrow').remove(); // Reposition the tooltip var position = $(_this).tooltip("option", "position"); position.of = $(_this); tooltip.position(position); // Toggle subtasks status $('#tooltip-subtasks a').not(".popover").click(function(e) { e.preventDefault(); e.stopPropagation(); if ($(this).hasClass("popover-subtask-restriction")) { Kanboard.OpenPopover($(this).attr('href')); $(_this).tooltip('close'); } else { $.get($(this).attr('href'), setTooltipContent); } }); }); return ''; } }).on("mouseenter", function() { var _this = this; $(this).tooltip("open"); $(".ui-tooltip").on("mouseleave", function () { $(_this).tooltip('close'); }); }).on("mouseleave focusout", function (e) { e.stopImmediatePropagation(); var _this = this; setTimeout(function () { if (! $(".ui-tooltip:hover").length) { $(_this).tooltip("close"); } }, 100); }); // Automatic refresh var interval = parseInt($("#board").attr("data-check-interval")); if (interval > 0) { checkInterval = window.setInterval(board_check, interval * 1000); } } // Stop events function board_unload_events() { clearInterval(checkInterval); } // Save and refresh the board function board_save(taskId, columnId, position, swimlaneId) { board_unload_events(); $.ajax({ cache: false, url: $("#board").attr("data-save-url"), contentType: "application/json", type: "POST", processData: false, data: JSON.stringify({ "task_id": taskId, "column_id": columnId, "swimlane_id": swimlaneId, "position": position }), success: function(data) { $("#board-container").remove(); $("#main").append(data); Kanboard.InitAfterAjax(); board_load_events(); stack_show(); compactview_reload(); } }); } // Check if the board have been changed by someone else function board_check() { if (Kanboard.IsVisible()) { $.ajax({ cache: false, url: $("#board").attr("data-check-url"), statusCode: { 200: function(data) { $("#board-container").remove(); $("#main").append(data); Kanboard.InitAfterAjax(); board_unload_events(); board_load_events(); stack_show(); compactview_reload(); } } }); } } function compactview_load_events() { jQuery(document).on('click', ".filter-toggle-scrolling", function(e) { e.preventDefault(); compactview_toggle(); }); compactview_reload(); } function compactview_toggle() { var scrolling = Kanboard.GetStorageItem("horizontal_scroll") || 1; Kanboard.SetStorageItem("horizontal_scroll", scrolling == 0 ? 1 : 0); compactview_reload(); } function compactview_reload() { if (Kanboard.GetStorageItem("horizontal_scroll") == 0) { $(".filter-wide").show(); $(".filter-compact").hide(); $("#board-container").addClass("board-container-compact"); $("#board th").addClass("board-column-compact"); } else { $(".filter-wide").hide(); $(".filter-compact").show(); $("#board-container").removeClass("board-container-compact"); $("#board th").removeClass("board-column-compact"); } } jQuery(document).ready(function() { if (Kanboard.Exists("board")) { board_load_events(); stack_load_events(); compactview_load_events(); keyboard_shortcuts(); } }); })();