|
|
|
@ -390,6 +390,75 @@ define([
|
|
|
|
|
$container.addClass('cp-app-readonly');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var getSelectedElement = function () {
|
|
|
|
|
var node = document.getSelection().anchorNode;
|
|
|
|
|
return (node.nodeType === 3 ? node.parentNode : node);
|
|
|
|
|
};
|
|
|
|
|
var getCursor = function () {
|
|
|
|
|
if (!kanban || !kanban.inEditMode) { return; }
|
|
|
|
|
try {
|
|
|
|
|
var el = getSelectedElement();
|
|
|
|
|
var input = $(el).is('input') ? el : $(el).find('input')[0];
|
|
|
|
|
var $item = $(el).closest('.kanban-item');
|
|
|
|
|
|
|
|
|
|
var pos = kanban.findElementPosition($item[0]);
|
|
|
|
|
var board = $item.closest('.kanban-board').attr('data-id');
|
|
|
|
|
var val = ($(input).val && $(input).val()) || '';
|
|
|
|
|
var start = input.selectionStart;
|
|
|
|
|
var end = input.selectionEnd;
|
|
|
|
|
|
|
|
|
|
var boardEl = kanban.options.boards.find(function (b) {
|
|
|
|
|
return b.id === board;
|
|
|
|
|
});
|
|
|
|
|
var oldVal = boardEl.item[pos] || {};
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
board: board,
|
|
|
|
|
pos: pos,
|
|
|
|
|
value: val,
|
|
|
|
|
start: start,
|
|
|
|
|
end: end,
|
|
|
|
|
oldValue: oldVal.title
|
|
|
|
|
};
|
|
|
|
|
} catch (e) {
|
|
|
|
|
return {};
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
var restoreCursor = function (data) {
|
|
|
|
|
try {
|
|
|
|
|
var boardEl = kanban.options.boards.find(function (b) {
|
|
|
|
|
return b.id === data.board;
|
|
|
|
|
});
|
|
|
|
|
if (!boardEl) { return; }
|
|
|
|
|
|
|
|
|
|
// An item was added: add a new item
|
|
|
|
|
if (!data.oldValue) {
|
|
|
|
|
var $board = $('.kanban-board[data-id="'+data.board+'"');
|
|
|
|
|
$board.find('.kanban-title-button.fa-plus').click();
|
|
|
|
|
var $newInput = $board.find('.kanban-item:last-child input');
|
|
|
|
|
$newInput.val(data.value);
|
|
|
|
|
$newInput[0].selectionStart = data.start;
|
|
|
|
|
$newInput[0].selectionEnd = data.end;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// An item was edited: click on the correct item
|
|
|
|
|
var newVal = boardEl.item[data.pos];
|
|
|
|
|
if (!newVal || newVal.title !== data.oldValue) { return; }
|
|
|
|
|
var $el = $('.kanban-board[data-id="' + data.board + '"]')
|
|
|
|
|
.find('.kanban-item:nth-child('+(data.pos + 1)+')');
|
|
|
|
|
$el.find('.kanban-item-text').click();
|
|
|
|
|
var $input = $el.find('input');
|
|
|
|
|
if ($input.length) {
|
|
|
|
|
$input.val(data.value);
|
|
|
|
|
$input[0].selectionStart = data.start;
|
|
|
|
|
$input[0].selectionEnd = data.end;
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
framework.onContentUpdate(function (newContent) {
|
|
|
|
|
// Init if needed
|
|
|
|
|
if (!kanban) {
|
|
|
|
@ -404,11 +473,12 @@ define([
|
|
|
|
|
var remoteContent = newContent.content;
|
|
|
|
|
|
|
|
|
|
if (Sortify(currentContent) !== Sortify(remoteContent)) {
|
|
|
|
|
// reinit kanban (TODO: optimize to diff only)
|
|
|
|
|
var cursor = getCursor();
|
|
|
|
|
verbose("Content is different.. Applying content");
|
|
|
|
|
kanban.setBoards(remoteContent);
|
|
|
|
|
kanban.inEditMode = false;
|
|
|
|
|
addRemoveItemButton(framework, kanban);
|
|
|
|
|
restoreCursor(cursor);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|