| KB.component('task-move-position', function (containerElement, options) { | |
| function getSelectedValue(id) { | |
| var element = KB.dom(document).find('#' + id); | |
| if (element) { | |
| return parseInt(element.options[element.selectedIndex].value); | |
| } | |
| return null; | |
| } | |
| function getSwimlaneId() { | |
| var swimlaneId = getSelectedValue('form-swimlanes'); | |
| return swimlaneId === null ? options.board[0].id : swimlaneId; | |
| } | |
| function getColumnId() { | |
| var columnId = getSelectedValue('form-columns'); | |
| return columnId === null ? options.board[0].columns[0].id : columnId; | |
| } | |
| function getPosition() { | |
| var position = getSelectedValue('form-position'); | |
| return position === null ? 1 : position; | |
| } | |
| function getPositionChoice() { | |
| var element = KB.find('input[name=positionChoice]:checked'); | |
| if (element) { | |
| return element.value; | |
| } | |
| return 'before'; | |
| } | |
| function onSwimlaneChanged() { | |
| var columnSelect = KB.dom(document).find('#form-columns'); | |
| KB.dom(columnSelect).replace(buildColumnSelect()); | |
| var taskSection = KB.dom(document).find('#form-tasks'); | |
| KB.dom(taskSection).replace(buildTasks()); | |
| } | |
| function onColumnChanged() { | |
| var taskSection = KB.dom(document).find('#form-tasks'); | |
| KB.dom(taskSection).replace(buildTasks()); | |
| } | |
| function onError(message) { | |
| KB.trigger('modal.stop'); | |
| KB.find('#message-container') | |
| .replace(KB.dom('div') | |
| .attr('id', 'message-container') | |
| .attr('class', 'alert alert-error') | |
| .text(message) | |
| .build() | |
| ); | |
| } | |
| function onSubmit() { | |
| var position = getPosition(); | |
| var positionChoice = getPositionChoice(); | |
| if (positionChoice === 'after') { | |
| position++; | |
| } | |
| KB.find('#message-container').replace(KB.dom('div').attr('id', 'message-container').build()); | |
| KB.http.postJson(options.saveUrl, { | |
| "column_id": getColumnId(), | |
| "swimlane_id": getSwimlaneId(), | |
| "position": position | |
| }).error(function (response) { | |
| if (response) { | |
| onError(response.message); | |
| } | |
| }); | |
| } | |
| function buildSwimlaneSelect() { | |
| var swimlanes = []; | |
| options.board.forEach(function(swimlane) { | |
| var option = {'value': swimlane.id, 'text': swimlane.name}; | |
| if(swimlane.id == options.task.swimlane_id) { | |
| option.selected = ""; | |
| } | |
| swimlanes.push(option); | |
| }); | |
| return KB.dom('select') | |
| .attr('id', 'form-swimlanes') | |
| .change(onSwimlaneChanged) | |
| .for('option', swimlanes) | |
| .build(); | |
| } | |
| function buildColumnSelect() { | |
| var columns = []; | |
| var swimlaneId = getSwimlaneId(); | |
| options.board.forEach(function(swimlane) { | |
| if (swimlaneId === swimlane.id) { | |
| swimlane.columns.forEach(function(column) { | |
| var option = {'value': column.id, 'text': column.title}; | |
| if(column.id == options.task.column_id) { | |
| option.selected = ""; | |
| } | |
| columns.push(option); | |
| }); | |
| } | |
| }); | |
| return KB.dom('select') | |
| .attr('id', 'form-columns') | |
| .change(onColumnChanged) | |
| .for('option', columns) | |
| .build(); | |
| } | |
| function buildTasks() { | |
| var tasks = []; | |
| var swimlaneId = getSwimlaneId(); | |
| var columnId = getColumnId(); | |
| var container = KB.dom('div').attr('id', 'form-tasks'); | |
| options.board.forEach(function (swimlane) { | |
| if (swimlaneId === swimlane.id) { | |
| swimlane.columns.forEach(function (column) { | |
| if (columnId === column.id) { | |
| column.tasks.forEach(function (task) { | |
| tasks.push({'value': task.position, 'text': '#' + task.id + ' - ' + task.title}); | |
| }); | |
| } | |
| }); | |
| } | |
| }); | |
| if (tasks.length > 0) { | |
| container | |
| .add(KB.html.label(options.positionLabel, 'form-position')) | |
| .add(KB.dom('select').attr('id', 'form-position').for('option', tasks).build()) | |
| .add(KB.html.radio(options.beforeLabel, 'positionChoice', 'before')) | |
| .add(KB.html.radio(options.afterLabel, 'positionChoice', 'after')) | |
| ; | |
| } | |
| return container.build(); | |
| } | |
| this.render = function () { | |
| KB.on('modal.submit', onSubmit); | |
| KB.on('modal.close', function () { | |
| KB.removeListener('modal.submit', onSubmit); | |
| }); | |
| var form = KB.dom('div') | |
| .add(KB.dom('div').attr('id', 'message-container').build()) | |
| .add(KB.html.label(options.swimlaneLabel, 'form-swimlanes')) | |
| .add(buildSwimlaneSelect()) | |
| .add(KB.html.label(options.columnLabel, 'form-columns')) | |
| .add(buildColumnSelect()) | |
| .add(buildTasks()) | |
| .build(); | |
| containerElement.appendChild(form); | |
| }; | |
| }); | |