You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

141 lines
3.3 KiB
JavaScript

10 years ago
"use strict";
/*global define, app, templates*/
define('taskbar', function () {
10 years ago
var taskbar = {};
taskbar.init = function () {
10 years ago
var self = this;
templates.parse('modules/taskbar', {}, function (html) {
10 years ago
self.taskbar = $(html);
self.tasklist = self.taskbar.find('ul');
$(document.body).append(self.taskbar);
self.taskbar.on('click', 'li', function () {
var $btn = $(this);
var module = $btn.attr('data-module');
var uuid = $btn.attr('data-uuid');
10 years ago
require([module], function (module) {
10 years ago
if (!$btn.hasClass('active')) {
minimizeAll();
module.load(uuid);
taskbar.toggleNew(uuid, false);
app.alternatingTitle('');
taskbar.tasklist.removeClass('active');
$btn.addClass('active');
} else {
module.minimize(uuid);
}
});
10 years ago
10 years ago
return false;
});
10 years ago
});
};
taskbar.discard = function (module, uuid) {
10 years ago
var btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
btnEl.remove();
10 years ago
update();
10 years ago
};
taskbar.push = function (module, uuid, options) {
var element = taskbar.tasklist.find('li[data-uuid="' + uuid + '"]');
var data = {
module: module,
uuid: uuid,
options: options,
element: element,
};
$(window).trigger('filter:taskbar.push', data);
9 years ago
if (!element.length && data.module) {
createTaskbar(data);
}
};
taskbar.get = function (module) {
var items = $('[data-module="' + module + '"]').map(function (idx, el) {
10 years ago
return $(el).data();
});
return items;
};
taskbar.minimize = function (module, uuid) {
10 years ago
var btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
btnEl.toggleClass('active', false);
10 years ago
};
10 years ago
taskbar.toggleNew = function (uuid, state, silent) {
10 years ago
var btnEl = taskbar.tasklist.find('[data-uuid="' + uuid + '"]');
btnEl.toggleClass('new', state);
10 years ago
if (!silent) {
$(window).trigger('action:taskbar.toggleNew', uuid);
}
10 years ago
};
taskbar.updateActive = function (uuid) {
10 years ago
var tasks = taskbar.tasklist.find('li');
tasks.removeClass('active');
tasks.filter('[data-uuid="' + uuid + '"]').addClass('active');
};
taskbar.isActive = function (uuid) {
10 years ago
var taskBtn = taskbar.tasklist.find('li[data-uuid="' + uuid + '"]');
return taskBtn.hasClass('active');
};
function update() {
var tasks = taskbar.tasklist.find('li');
if (tasks.length > 0) {
taskbar.taskbar.attr('data-active', '1');
} else {
taskbar.taskbar.removeAttr('data-active');
}
}
function minimizeAll() {
taskbar.tasklist.find('.active').removeClass('active');
}
10 years ago
function createTaskbar(data) {
var title = $('<div></div>').text(data.options.title || 'NodeBB Task').html();
var taskbarEl = $('<li />')
.addClass(data.options.className)
.html('<a href="#">' +
(data.options.icon ? '<i class="fa ' + data.options.icon + '"></i> ' : '') +
(data.options.image ? '<img src="' + data.options.image + '"/> ' : '') +
'<span>' + title + '</span>' +
'</a>')
.attr({
'data-module': data.module,
'data-uuid': data.uuid,
})
.addClass(data.options.state !== undefined ? data.options.state : 'active');
if (!data.options.state || data.options.state === 'active') {
minimizeAll();
}
taskbar.tasklist.append(taskbarEl);
update();
data.element = taskbarEl;
10 years ago
taskbarEl.data(data);
$(window).trigger('action:taskbar.pushed', data);
}
10 years ago
return taskbar;
});