%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/assets/90f774c0/js/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/assets/90f774c0/js/humhub.task.list.js |
/* * @link https://www.humhub.org/ * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences * */ humhub.module('task.list', function (module, require, $) { var Widget = require('ui.widget').Widget; var object = require('util').object; var client = require('client'); var loader = require('ui.loader'); var modal = require('ui.modal'); var additions = require('ui.additions'); var event = require('event'); var view = require('ui.view'); var STATUS_PENDING = 1; var STATUS_IN_PROGRESS = 2; var STATUS_PENDING_REVIEW = 3; var STATUS_COMPLETED = 5; var STATUS_ALL = 4; var DELAY_DRAG_SMALL_DEVICES = 250; var Root = function (node, options) { Widget.call(this, node, options); additions.observe(this.$); }; object.inherits(Root, Widget); Root.prototype.init = function () { var that = this; $('.task-list-ul:not(.task-list-unsorted)').sortable({ delay: (view.isSmall()) ? DELAY_DRAG_SMALL_DEVICES : null, handle: '.task-moving-handler', helper: 'clone', placeholder: "task-list-state-highlight", update: $.proxy(this.dropItem, this) }); }; Root.prototype.dropItem = function (event, ui) { var item = ui.item; var $taskList = item.find('[data-task-list-id]'); var taskListId = $taskList.data('task-list-id'); var data = { 'ItemDrop[index]': item.index(), 'ItemDrop[itemId]': taskListId }; var that = this; client.post(this.options.dropListUrl, {data: data}).then(function(response) { if (!response.success) { that.getItemsRoot().sortable('cancel'); module.log.error('', true); } }).catch(function(e) { module.log.error(e, true); that.getItemsRoot().sortable('cancel'); }); }; Root.prototype.loadClosed = function(evt) { client.html(evt).then(function(response) { }).catch(function(e) { module.log.error(e, true); }) }; Root.prototype.collapseAll = function(evt) { var toggler = evt.$trigger; var $visible = this.$.find('.task-list-items.ui-sortable:visible'); var collapse = $visible.length; if (collapse) { $visible.siblings('.task-list-title-bar').click(); } else { this.$.find('.task-list-items.ui-sortable:hidden').siblings('.task-list-title-bar').click(); } $('#toggle-lists').find('i') .removeClass(collapse ? 'fa-toggle-on' : 'fa-toggle-off') .addClass(collapse ? 'fa-toggle-off' : 'fa-toggle-on'); toggler.data(collapse ? 'title-collapse' : 'title-expand', toggler.text()); toggler.html(toggler.html().replace(/(<\/i> ).+$/, '$1' + toggler.data(collapse ? 'title-expand' : 'title-collapse'))); }; var TaskList = function (node, options) { Widget.call(this, node, options); }; object.inherits(TaskList, Widget); TaskList.prototype.init = function () { this.getItemsRoot().sortable({ delay: (view.isSmall()) ? DELAY_DRAG_SMALL_DEVICES : null, handle: '.task-moving-handler', helper: 'clone', connectWith: '.task-list-items', placeholder: "task-state-highlight", update: $.proxy(this.dropItem, this) }); $('.task-list').on('mouseover', '.task-moving-handler', function () { $(this).closest('.task-list-task-title-bar').addClass('highlighter') }); $('.task-list').on('mouseout', '.task-moving-handler', function () { $(this).closest('.task-list-task-title-bar').removeClass('highlighter') }); var $taskTitleBar = this.$.find('.task-list-title-bar'); $taskTitleBar.off('click').on('click', $.proxy(this.toggleItems, this)).disableSelection(); this.updated(); }; TaskList.prototype.toggleItems = function (evt) { var $target = $(evt.target); if (!$target.is('.task-list-title-bar') && !$target.closest('.toggleItems').length && !$target.closest('.task-list-title-text').length) { return; } var $items = this.getItemsRoot(); var downIcon = 'fa-caret-up'; var upIcon ='fa-caret-down'; if($items.is(':visible')) { this.$.find('.toggleItems').removeClass(downIcon).addClass(upIcon); } else { this.$.find('.toggleItems').removeClass(upIcon).addClass(downIcon); } $items.closest('.task-list-li').toggleClass('task-list-li-collapsed'); $items.add(this.getItemsCompletedRoot()).slideToggle(100,"linear"); }; TaskList.prototype.dropItem = function (event, ui) { var item = ui.item; var taskId = item.data('task-id'); var itemWidget = Widget.instance(item); var targetList = itemWidget.parent(); var data = { 'ItemDrop[modelId]': targetList.options.taskListId, 'ItemDrop[index]': item.index(), 'ItemDrop[itemId]': taskId }; var that = this; client.post(this.options.dropTaskUrl, {data: data}).then(function(response) { if (!response.success) { that.getItemsRoot().sortable('cancel'); module.log.error('', true); } that.updated(); targetList.updated(); }).catch(function(e) { module.log.error(e, true); that.getItemsRoot().sortable('cancel'); }); }; TaskList.prototype.getItemsRoot = function ($includeCompleted) { return this.$.find('.task-list-items:not(.tasks-completed)'); }; TaskList.prototype.getItemsCompletedRoot = function ($includeCompleted) { return this.$.find('.tasks-completed'); }; TaskList.prototype.showMoreCompleted = function (evt) { var that = this; var $tasksCompleted = this.$.find('.tasks-completed'); var offset = $tasksCompleted.find('.task-list-item').length ; client.get(evt, {data: {offset: offset}}).then(function(response) { response.tasks.forEach(function(task) { that.appendCompleted($(task)); }); if(response.remainingCount) { that.$.find('.showMoreCompleted').text(response.showMoreMessage); } else { that.$.find('.task-list-task-completed-show-more').remove(); } }).catch(function(e) { module.log.error(e, true); }); }; TaskList.prototype.loader = function (show) { if (show !== false) { loader.set(this.$.find('.task-list-title'), { size: '10px', 'css': {padding: '0px', display: 'inline-block'} }); } else { loader.reset(this.$.find('.task-list-title')); } }; TaskList.prototype.reload = function () { var that = this; this.loader(); client.html(this.options.reloadUrl).then(function (response) { that.$.html($(response.html).html()); that.init(); }).catch(function (e) { module.log.error(e, true); }); }; TaskList.prototype.prependPending = function (task) { var $task = task instanceof $ ? task : task.$; $task.hide(); var $pendingContainer = this.getItemsRoot(); $pendingContainer.prepend($task); $pendingContainer.show(); $task.fadeIn(); }; TaskList.prototype.prependCompleted = function (task) { var $task = task instanceof $ ? task : task.$; $task.hide(); var $completedContainer = this.getItemsCompletedRoot(); $completedContainer.prepend($task); $completedContainer.show(); $task.fadeIn(); }; TaskList.prototype.appendCompleted = function (task) { var $task = task instanceof $ ? task : task.$; $task.hide(); var $completedContainer = this.getItemsCompletedRoot(); var $lastCompleted = $completedContainer.find('.task-list-item').last(); if($lastCompleted.length) { $task.insertAfter($lastCompleted); } else { $completedContainer.prepend($task) } $completedContainer.show(); $task.fadeIn(); }; TaskList.prototype.deleteList = function(evt) { var that = this; this.loader(); client.post(evt).then(function(response) { if(response.success) { that.remove(); reloadList(); // reload unsorted } else { module.log.error(null, true); } }).catch(function(e) { module.log.error(e, true); }).finally(function() { that.loader(false); }); }; TaskList.prototype.updated = function() { var $itemRoot = this.getItemsRoot(); if(!$itemRoot.find('.task-list-item, .task-list-empty').length) { var $empty = $('.task-list-empty:first').clone().show(); $itemRoot.append($empty); } else if($itemRoot.find('.task-list-item').length) { $itemRoot.find('.task-list-empty').remove(); } }; TaskList.prototype.remove = function(evt) { var that = this; this.$.closest('.task-list-li').fadeOut('fast', function() {$(this).remove()}); }; var Task = function (node, options) { Widget.call(this, node, options); }; object.inherits(Task, Widget); Task.prototype.init = function (evt) { this.$.find('.task-list-task-title-bar').off('click').on('click', $.proxy(this.toggleDetails, this)); this.updated(); }; Task.prototype.changeState = function(evt) { var that = this; this.loader(); client.post(evt).then(function(response) { if(response.success) { that.reload(); } else { that.loader(false); module.log.error(null, true); } }).catch(function(e) { that.loader(false); module.log.error(e, true); }); }; Task.prototype.updated = function(evt) { var parent = this.parent(); if(parent && parent.updated) { parent.updated(); } }; Task.prototype.toggleDetails = function (evt) { var that = this; var $target = $(evt.target); if((!$target.parent().is('.task-list-task-title-bar') && !$target.closest('.toggleTaskDetails').length)) { return; } var $details = that.$.find('.task-list-task-details'); if(!$details.length && !that.loadDetailsBlock) { // Prevent double click events that.loadDetailsBlock = true; that.loadDetails(); } else if($details.length) { $details.slideToggle('fast'); } }; Task.prototype.loadDetails = function (evt) { var that = this; loader.append(that.$); client.html(this.options.loadDetailsUrl).then(function(response) { that.$.append(response.html); }).catch(function(e) { module.log.error(e, true); }).finally(function() { loader.remove(that.$); }); }; Task.prototype.loader = function (show) { if (show !== false) { loader.set(this.$.find('.task-list-item-title'), { size: '10px', 'css': {padding: '0px', display: 'inline-block'} }); } else { loader.reset(this.$.find('.task-list-item-title')); } }; Task.prototype.reload = function (evt) { var that = this; this.loader(); var detailsVisible = this.$.find('.task-list-task-details:visible').length; client.html(this.options.reloadUrl).then(function (response) { if (response.html) { that.$.fadeOut(); var $newRoot = $(response.html).hide(); that.$.replaceWith($newRoot); that.$ = $newRoot; if(!detailsVisible) { that.$.find('.task-list-task-details').hide(); } if (that.isCompleted()) { that.parent().prependCompleted(that); } else if(that.$.closest('.tasks-completed')) { that.parent().prependPending(that); } else { that.$.fadeIn(); } that.init(); } }).finally(function () { that.loader(false); that.updated(); }); }; Task.prototype.isCompleted = function () { return this.isStatus(STATUS_COMPLETED); }; Task.prototype.isStatus = function (status) { return this.$.is('[data-task-status="' + status + '"]') }; var CompletedTaskListView = function (node, options) { Widget.call(this, node, options); }; object.inherits(CompletedTaskListView, Widget); CompletedTaskListView.prototype.init = function() { var that = this; that.$.on('click', '.pagination-container a', function (evt) { evt.preventDefault(); that.changePage($(this).attr('href')); }); }; CompletedTaskListView.prototype.changePage = function (url) { var that = this; url = url || this.$.attr('action'); // Note: the additional empty objects are given due an bug in v1.2.1 fixed in v1.2.2 client.html(url).then(function (response) { that.$.find('.closed-task-list-view').html(response.html); }).catch(function (err) { module.log.error(err, true); }).finally(function () { //that.loader(false); }); }; var CompletedTaskListViewItem = function (node, options) { Task.call(this, node, options); }; object.inherits(CompletedTaskListViewItem, TaskList); CompletedTaskListViewItem.prototype.remove = function(evt) { var that = this; this.$.closest('li').fadeOut('fast', function() {$(this).remove()}); }; var edit = function (evt) { modal.load(evt).then(function () { modal.global.$.one('hidden.bs.modal', function() { Widget.closest(evt.$trigger).reload(); }); }).catch(function(e) { module.log.error(e,true); }); }; var reloadList = function (id) { var list = getListById(id); if (list) { list.reload(); } else { client.reload(); } }; var getListById = function (id) { var $node = id ? $('[data-task-list-id="' + id + '"]') : $('[data-task-list-unsored]'); return Widget.instance($node); }; var getTaskById = function (id) { var $node = $('[data-task-id="' + id + '"]'); return $node.length ? Widget.instance($node) : null; }; module.export({ TaskList: TaskList, CompletedTaskListView: CompletedTaskListView, CompletedTaskListViewItem: CompletedTaskListViewItem, Task: Task, Root: Root, edit: edit, getTaskById: getTaskById, reloadList: reloadList }); });