(function (global, factory) {
if (typeof define === "function" && define.amd) {
define("/App/Taskboard", ["exports", "Site"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("Site"));
} else {
var mod = {
exports: {}
};
factory(mod.exports, global.Site);
global.AppTaskboard = mod.exports;
}
})(this, function (_exports, _Site2) {
"use strict";
Object.defineProperty(_exports, "__esModule", {
value: true
});
_exports.run = run;
_exports.getInstance = getInstance;
_exports.default = _exports.AppTaskboard = void 0;
_Site2 = babelHelpers.interopRequireDefault(_Site2);
var dataTpl = function dataTpl() {
var data = {
status: false,
title: '',
description: '',
priority: 'normal',
duedate: '',
members: [],
subtasks: [],
attachments: [],
comments: []
};
return data;
};
var StageList =
/*#__PURE__*/
function () {
function StageList($el, data) {
babelHelpers.classCallCheck(this, StageList);
this.$el = $el;
this.data = data;
this.render();
this.$el.sortable({
handle: '.taskboard-stage-header'
});
}
babelHelpers.createClass(StageList, [{
key: "add",
value: function add() {
var stage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (stage instanceof Stage) {
this.$el.append(stage.$el);
} else {
this.add(this.createStage(stage));
}
}
}, {
key: "createStage",
value: function createStage(data) {
return new Stage(data);
}
}, {
key: "render",
value: function render() {
var length = this.data.length;
for (var i = 0; i < length; i++) {
var stage = this.createStage(this.data[i]);
this.add(stage);
}
}
}]);
return StageList;
}();
var Stage =
/*#__PURE__*/
function () {
function Stage(data) {
babelHelpers.classCallCheck(this, Stage);
this.data = data;
this.$el = null;
this.$taskList = null;
this.taskList = null;
this.render();
this.$stageDropdownArrow = $('.taskboard-stage-actions a[data-toggle="dropdown"]', this.$el);
this.bindStageDropdownArrow();
this.$renameBtn = $('.taskboard-stage-rename', this.$el);
this.bindRenameBtn();
this.$renameSaveBtn = $('.taskboard-stage-rename-save', this.$el);
this.bindRenameSaveBtn();
this.$deleteBtn = $('.taskboard-stage-delete', this.$el);
this.bindDeleteBtn();
}
babelHelpers.createClass(Stage, [{
key: "render",
value: function render() {
this.$el = $(this.getTpl(this.data.title));
this.$taskList = this.$el.find('.taskboard-list');
var tasksData = this.data.tasks;
this.taskList = new TaskList(this.$taskList, tasksData);
}
}, {
key: "getTpl",
value: function getTpl(title) {
return "\n
\n \n \n \n ");
}
}, {
key: "bindStageDropdownArrow",
value: function bindStageDropdownArrow() {
this.$stageDropdownArrow.on('click', function () {
$(this).next('.dropdown-menu').removeClass('is-edit');
});
}
}, {
key: "bindRenameBtn",
value: function bindRenameBtn() {
this.$renameBtn.on('click', function (e) {
var $header = $(this).closest('.taskboard-stage-header');
var $menu = $(this).closest('.dropdown-menu');
var $input = $('.taskboard-stage-rename-input', $menu);
var $title = $('.taskboard-stage-title', $header);
$menu.toggleClass('is-edit');
$input.val('').focus().val($title.html());
e.stopPropagation();
});
}
}, {
key: "bindRenameSaveBtn",
value: function bindRenameSaveBtn() {
this.$renameSaveBtn.on('click', function () {
var $header = $(this).closest('.taskboard-stage-header');
var $input = $('.taskboard-stage-rename-input', $header);
var $title = $('.taskboard-stage-title', $header);
var value = $input.val();
if (value.length === 0) {
return;
}
$title.html(value);
});
}
}, {
key: "bindDeleteBtn",
value: function bindDeleteBtn() {
this.$deleteBtn.on('click', function () {
var $this = $(this);
bootbox.dialog({
message: 'Do you want to delete the stage?',
buttons: {
success: {
label: 'Delete',
className: 'btn-danger',
callback: function callback() {
$this.closest('.taskboard-stage').remove();
}
}
}
});
});
}
}]);
return Stage;
}();
var TaskList =
/*#__PURE__*/
function () {
function TaskList($el, data) {
babelHelpers.classCallCheck(this, TaskList);
this.$el = $el;
this.data = data;
this.render();
this.$el.sortable({
connectWith: '.taskboard-stage .list-group'
});
this.$wrap = this.$el.parent().find('.action-wrap');
this.$addItemToggle = this.$wrap.find('.add-item-toggle');
this.bindAddItemToggle();
this.$addItemBtn = this.$wrap.find('.add-item-add');
this.bindAddItemBtn();
this.$cancelBtn = this.$wrap.find('.add-item-cancel');
this.bindCancelBtn();
this.bindTaskInput();
this.handleOpenSlidePanel();
}
babelHelpers.createClass(TaskList, [{
key: "add",
value: function add() {
var task = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (task instanceof Task) {
this.$el.append(task.$el);
} else {
var taskObj = this.createTask(task);
taskObj.$el.data('taskInfo', task);
this.add(taskObj);
}
}
}, {
key: "createTask",
value: function createTask(data) {
return new Task(data);
}
}, {
key: "render",
value: function render() {
var length = this.data.length;
if (length === 0) {
return;
}
for (var i = 0; i < length; i++) {
var task = this.createTask(this.data[i]);
task.$el.data('taskInfo', this.data[i]);
this.add(task);
}
}
}, {
key: "bindAddItemToggle",
value: function bindAddItemToggle() {
var _this2 = this;
this.$addItemToggle.on('click', function () {
var $input = $('[name="name"]', _this2.$wrap);
_this2.$wrap.toggleClass('action-open');
$input.val('');
});
this.$wrap.on('click.add-item', '.form-control-label', function (e) {
_this2.$wrap.removeClass('action-open');
_this2.$el.off('click.add-item');
});
}
}, {
key: "bindAddItemBtn",
value: function bindAddItemBtn() {
var _this3 = this;
this.$addItemBtn.on('click', function () {
var $input = $('[name="name"]', _this3.$wrap);
var taskData = dataTpl();
if ($input.val().length !== 0) {
taskData.title = $input.val();
_this3.add(taskData);
}
_this3.$wrap.toggleClass('action-open');
});
}
}, {
key: "bindCancelBtn",
value: function bindCancelBtn() {
var self = this;
this.$cancelBtn.on('click', function () {
self.$wrap.toggleClass('action-open');
});
}
}, {
key: "bindTaskInput",
value: function bindTaskInput() {
this.$el.on('click', '.checkbox-custom input', function (e) {
var $this = $(this);
var $target = $this.closest('.list-group-item');
var taskData = $target.data('taskInfo');
taskData.complete = $this.prop('checked');
$target.data('taskInfo', taskData);
e.stopPropagation();
});
}
}, {
key: "openSlidePanel",
value: function openSlidePanel(jsonObj, showOptions) {
if (typeof $.slidePanel === 'undefined') {
return;
}
slidePanel.show(jsonObj, showOptions);
}
}, {
key: "handleOpenSlidePanel",
value: function handleOpenSlidePanel() {
var self = this;
var options = $.extend({}, slidePanel.defaults, slidePanel.defaultsOptions);
this.$el.on('click', '[data-taskboard="slidePanel"]', function (e) {
var $target = $(e.target).closest('.list-group-item');
var jsonData = {
url: $(this).data('url'),
target: $target
};
self.openSlidePanel(jsonData, options);
e.stopPropagation();
});
}
}]);
return TaskList;
}();
var sildePaneldefaults = Plugin.getDefaults('slidePanel');
var sildePaneldefaultsOptions = {
template: function template(options) {
return "\n \n ");
},
afterLoad: function afterLoad(object) {
var _this = this;
var $target = $(object.target);
var info = $target.data('taskInfo');
this.$panel.find(".".concat(this.options.classes.base, "-scrollable")).asScrollable({
namespace: 'scrollable',
contentSelector: '>',
containerSelector: '>'
});
this.$panel.find('#task-description').markdown();
if (typeof info !== 'undefined' && info.duedate.length > 0) {
this.$panel.find('#taskDatepicker').data('date', info.duedate);
}
this.$panel.find('#taskDatepicker').datepicker({
autoclose: false,
todayHighlight: true
}).on('changeDate', function () {
$('#taskDatepickerInput').val(_this.$panel.find('#taskDatepicker').datepicker('getFormattedDate'));
});
this.$panel.data('slidePanel', object);
$(document).off('click.slidePanelDatepicker');
$(document).on('click.slidePanelDatepicker', 'span, td, th', function (e) {
e.stopPropagation();
});
},
afterShow: function afterShow() {
var self = this;
$(document).on('click.slidePanelShow', function (e) {
if ($(e.target).closest('.slidePanel').length === 0 && $(e.target).closest('body').length === 1) {
self.hide();
}
});
},
afterHide: function afterHide() {
$(document).off('click.slidePanelShow');
$(document).off('click.slidePanelDatepicker');
},
contentFilter: function contentFilter(data, object) {
var $checked;
var $panel = $(data);
var $target = $(object.target);
var info = $target.data('taskInfo');
var $stage = $target.closest('.taskboard-stage');
$('.stage-name', $panel).html($('.taskboard-stage-title', $stage.html()));
$('.task-title', $panel).html(info.title);
switch (info.priority) {
case 'high':
$checked = $('#priorityHigh', $panel);
break;
case 'urgent':
$checked = $('#priorityUrgent', $panel);
break;
default:
$checked = $('#priorityNormal', $panel);
break;
// no default
}
$checked.prop('checked', true);
slidePanel.handleSelective($('[data-plugin="jquery-selective"]', $panel), info.members);
if (info.description.length === 0) {
$('.description', $panel).addClass('is-empty');
} else {
$('.description-content', $panel).html(info.description);
}
if (info.subtasks.length !== 0) {
var length = info.subtasks.length;
for (var i = 0; i < length; i++) {
var $subtask = $(slidePanel.subtaskTpl(info.subtasks[i]));
$('.subtasks-list', $panel).append($subtask);
}
$('.subtasks', $panel).toggleClass('is-show');
}
if (info.attachments.length !== 0) {
var _length = info.attachments.length;
for (var _i = 0; _i < _length; _i++) {
var $attachment = $(slidePanel.attachmentTpl(info.attachments[_i]));
$('.attachments-list', $panel).append($attachment);
}
$('.attachments', $panel).toggleClass('is-show');
}
if (info.comments.length !== 0) {
var _length2 = info.comments.length;
for (var _i2 = 0; _i2 < _length2; _i2++) {
var $comment = $(slidePanel.commentTpl(info.comments[_i2].src, info.comments[_i2].user, info.comments[_i2].time, info.comments[_i2].content));
$('.comments-history', $panel).append($comment);
}
}
return $panel;
}
};
var slidePanel = {
defaults: sildePaneldefaults,
defaultsOptions: sildePaneldefaultsOptions,
handleSelective: function handleSelective($target, selected) {
var getSelected = function getSelected() {
var _this = this;
var arr = [];
$.each(this._options.getOptions(this), function (n, option) {
$.each(_this.options.local, function (i, user) {
if (user.id === $(option).val()) {
arr.push(user);
}
});
});
return arr;
};
var members = [{
id: 'uid_1',
name: 'Herman Beck',
img: '../../../../global/portraits/1.jpg'
}, {
id: 'uid_2',
name: 'Mary Adams',
img: '../../../../global/portraits/2.jpg'
}, {
id: 'uid_3',
name: 'Caleb Richards',
img: '../../../../global/portraits/3.jpg'
}, {
id: 'uid_4',
name: 'June Lane',
img: '../../../../global/portraits/4.jpg'
}, {
id: 'uid_5',
name: 'Edward Fletcher',
img: '../../../../global/portraits/5.jpg'
}, {
id: 'uid_6',
name: 'Crystal Bates',
img: '../../../../global/portraits/6.jpg'
}];
$target.selective({
namespace: 'addMember',
local: members,
selected: selected,
buildFromHtml: false,
tpl: {
optionValue: function optionValue(data) {
return data.id;
},
frame: function frame() {
return "\n ").concat(this.options.tpl.items.call(this), "\n
\n ").concat(this.options.tpl.triggerButton.call(this), "\n
\n ").concat(this.options.tpl.list.call(this), "\n
\n
\n
");
},
triggerButton: function triggerButton() {
return "
");
},
listItem: function listItem(data) {
return "
").concat(data.name, "");
},
item: function item(data) {
return "
\n ").concat(this.options.tpl.itemRemove.call(this), "\n ");
},
itemRemove: function itemRemove() {
return "");
},
option: function option(data) {
return "");
}
},
onAfterItemAdd: function onAfterItemAdd() {
var $target = this.$element.closest('.slidePanel').data('slidePanel').target;
var arr = getSelected.call(this);
var taskData = $target.data('taskInfo');
taskData.members = arr;
$target.data('taskInfo', taskData);
var $memberList = $target.find('.task-members');
var memberList = new MemberList($memberList, arr);
},
onAfterItemRemove: function onAfterItemRemove() {
var $target = this.$element.closest('.slidePanel').data('slidePanel').target;
var arr = getSelected.call(this);
var taskData = $target.data('taskInfo');
taskData.members = arr;
$target.data('taskInfo', taskData);
var $memberList = $target.find('.task-members');
var memberList = new MemberList($memberList, arr);
}
});
},
subtaskTpl: function subtaskTpl(data) {
var checkedString = data.complete ? 'checked="checked"' : '';
return "\n \n \n \n \n
\n \n \n ");
},
attachmentTpl: function attachmentTpl(data) {
return "\n \n \n
\n
\n

\n
\n
\n
\n
").concat(data.title, "\n \n ").concat(data.size, "\n \n \n \n \n
\n
\n
\n \n ");
},
commentTpl: function commentTpl(src, user, time, content) {
return "\n
").concat(content, "
\n
\n
\n