2015-11-13 21:33:53 +08:00
|
|
|
/*!
|
|
|
|
* B-JUI v1.2 (http://b-jui.com)
|
|
|
|
* Git@OSC (http://git.oschina.net/xknaan/B-JUI)
|
|
|
|
* Copyright 2014 K'naan (xknaan@163.com).
|
|
|
|
* Licensed under Apache (http://www.apache.org/licenses/LICENSE-2.0)
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* ========================================================================
|
|
|
|
* B-JUI: bjui-taskbar.js v1.2
|
|
|
|
* reference: bjui-dialog.js
|
|
|
|
* @author K'naan (xknaan@163.com)
|
|
|
|
* -- Modified from dwz.taskBar.js (author:Roger Wu)
|
|
|
|
* http://git.oschina.net/xknaan/B-JUI/blob/master/BJUI/js/bjui-taskbar.js
|
|
|
|
* ========================================================================
|
|
|
|
* Copyright 2014 K'naan.
|
|
|
|
* Licensed under Apache (http://www.apache.org/licenses/LICENSE-2.0)
|
|
|
|
* ======================================================================== */
|
|
|
|
|
|
|
|
+function ($) {
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
// TASKBAR GLOBAL ELEMENTS
|
|
|
|
// ======================
|
|
|
|
|
|
|
|
var $resizable
|
|
|
|
var $taskBar, $taskBox, $taskList, $prevBtn, $nextBtn, taskDisabled, taskSelected, taskMargin
|
|
|
|
|
|
|
|
$(function() {
|
|
|
|
var INIT_TASKBAR = function() {
|
|
|
|
$resizable = $('#bjui-resizable')
|
|
|
|
$taskBar = $(FRAG.taskbar)
|
|
|
|
$taskBox = $taskBar.find('.taskbarContent')
|
|
|
|
$taskList = $taskBox.find('> ul')
|
|
|
|
$prevBtn = $taskBar.find('.taskbarLeft')
|
|
|
|
$nextBtn = $taskBar.find('.taskbarRight')
|
|
|
|
taskDisabled = 'disabled'
|
|
|
|
taskSelected = 'selected'
|
|
|
|
taskMargin = 'taskbarMargin'
|
|
|
|
|
|
|
|
$('body').append('<!-- dialog task bar -->').append($taskBar)
|
|
|
|
|
|
|
|
//events
|
|
|
|
$prevBtn.click(function(e) { $(this).taskbar('scrollLeft') })
|
|
|
|
$nextBtn.click(function(e) { $(this).taskbar('scrollRight') })
|
|
|
|
}
|
|
|
|
INIT_TASKBAR()
|
|
|
|
})
|
|
|
|
|
|
|
|
// TASKBAR CLASS DEFINITION
|
|
|
|
// ======================
|
|
|
|
|
|
|
|
var Taskbar = function(element, options) {
|
|
|
|
this.$element = $(element)
|
|
|
|
this.$task = null
|
|
|
|
this.options = options
|
|
|
|
this.tools = this.TOOLS()
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.DEFAULTS = {
|
|
|
|
id: undefined,
|
|
|
|
title: undefined
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.init = function() {
|
|
|
|
var that = this
|
|
|
|
var $task = $taskList.find('#'+ this.options.id)
|
|
|
|
|
|
|
|
this.show()
|
|
|
|
if (!$task.length) {
|
|
|
|
var taskFrag = '<li id="#taskid#"><div class="taskbutton"><span><i class="fa fa-th-large"></i></span> <span class="title">#title#</span></div><div class="close"><i class="fa fa-times-circle"></i></div></li>';
|
|
|
|
|
|
|
|
$task = $(taskFrag.replace('#taskid#', this.options.id).replace('#title#', this.options.title))
|
|
|
|
$task.appendTo($taskList)
|
|
|
|
} else {
|
|
|
|
$task.find('> div > span.title').html(this.options.title)
|
|
|
|
}
|
|
|
|
this.contextmenu($task)
|
|
|
|
this.switchTask($task)
|
|
|
|
this.tools.scrollTask($task)
|
|
|
|
|
|
|
|
//events
|
|
|
|
$task.click(function(e) {
|
|
|
|
if ($(e.target).closest('div').hasClass('close') || $(e.target).hasClass('close')) {
|
|
|
|
$task.dialog('close', that.options.id)
|
|
|
|
} else {
|
|
|
|
var $dialog = $('body').data(that.options.id)
|
|
|
|
|
|
|
|
if ($task.hasClass('selected')) {
|
|
|
|
$dialog.find('.dialogHeader a.minimize').trigger('click')
|
|
|
|
} else {
|
|
|
|
if ($dialog.is(':hidden')) {
|
|
|
|
that.restoreDialog($dialog)
|
|
|
|
} else {
|
|
|
|
$dialog.trigger('click')
|
|
|
|
$task.addClass(taskSelected)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
that.scrollCurrent($task)
|
|
|
|
}
|
|
|
|
|
|
|
|
return false
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.TOOLS = function() {
|
|
|
|
var that = this
|
|
|
|
var tools = {
|
|
|
|
scrollCurrent: function() {
|
|
|
|
var iW = this.tasksW(this.getTasks())
|
|
|
|
|
|
|
|
if (iW > this.getTaskBarW()) {
|
|
|
|
var $tools = this
|
|
|
|
var lTask = $taskList.find('> li:last-child')
|
|
|
|
var left = this.getTaskBarW() - lTask.position().left - lTask.outerWidth(true)
|
|
|
|
|
|
|
|
$taskList.animate({left: left}, 200, function() {
|
|
|
|
$tools.ctrlScrollBtn()
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
this.ctrlScrollBtn()
|
|
|
|
}
|
|
|
|
},
|
|
|
|
getTaskBarW: function() {
|
|
|
|
return $taskBox.width()- ($prevBtn.is(':hidden') ? $prevBtn.width() + 2 : 0) - ($nextBtn.is(':hidden') ? $nextBtn.width() + 2 : 0)
|
|
|
|
},
|
|
|
|
scrollTask: function($task) {
|
|
|
|
var $tools = this
|
|
|
|
|
|
|
|
if ($task.position().left + this.getLeft() + $task.outerWidth() > this.getBarWidth()) {
|
|
|
|
var left = this.getTaskBarW() - $task.position().left - $task.outerWidth(true) - 2
|
|
|
|
|
|
|
|
$taskList.animate({left:left}, 200, function() {
|
|
|
|
$tools.ctrlScrollBtn()
|
|
|
|
})
|
|
|
|
} else if ($task.position().left + this.getLeft() < 0) {
|
|
|
|
var left = this.getLeft() - ($task.position().left + this.getLeft())
|
|
|
|
|
|
|
|
$taskList.animate({left:left}, 200, function() {
|
|
|
|
$tools.ctrlScrollBtn()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
},
|
|
|
|
ctrlScrollBtn: function() {
|
|
|
|
var iW = this.tasksW(this.getTasks())
|
|
|
|
|
|
|
|
if (this.getTaskBarW() > iW) {
|
|
|
|
$taskBox.removeClass(taskMargin)
|
|
|
|
$nextBtn.hide()
|
|
|
|
$prevBtn.hide()
|
|
|
|
if (this.getTasks().eq(0).length) this.scrollTask(this.getTasks().eq(0))
|
|
|
|
} else {
|
|
|
|
$taskBox.addClass(taskMargin)
|
|
|
|
$nextBtn.show().removeClass(taskDisabled)
|
|
|
|
$prevBtn.show().removeClass(taskDisabled)
|
|
|
|
if (this.getLeft() >= 0) $prevBtn.addClass(taskDisabled)
|
|
|
|
if (this.getLeft() <= this.getTaskBarW() - iW) $nextBtn.addClass(taskDisabled)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
getLeft: function(){
|
|
|
|
return $taskList.position().left
|
|
|
|
},
|
|
|
|
visibleStart: function() {
|
|
|
|
var iLeft = this.getLeft()
|
|
|
|
var jTasks = this.getTasks()
|
|
|
|
|
|
|
|
for (var i = 0; i < jTasks.size(); i++) {
|
|
|
|
if (jTasks.eq(i).position().left + jTasks.eq(i).outerWidth(true) + iLeft >= 0) return jTasks.eq(i)
|
|
|
|
}
|
|
|
|
|
|
|
|
return jTasks.eq(0)
|
|
|
|
},
|
|
|
|
visibleEnd: function() {
|
|
|
|
var iLeft = this.getLeft()
|
|
|
|
var jTasks = this.getTasks()
|
|
|
|
|
|
|
|
for (var i = 0; i < jTasks.size(); i++) {
|
|
|
|
if (jTasks.eq(i).position().left + jTasks.eq(i).outerWidth(true) + iLeft > this.getBarWidth()) return jTasks.eq(i)
|
|
|
|
}
|
|
|
|
|
|
|
|
return jTasks.eq(jTasks.size() - 1)
|
|
|
|
},
|
|
|
|
getTasks: function() {
|
|
|
|
return $taskList.find('> li')
|
|
|
|
},
|
|
|
|
tasksW: function(jTasks) {
|
|
|
|
var iW = 0
|
|
|
|
|
|
|
|
jTasks.each(function() {
|
|
|
|
iW += $(this).outerWidth(true)
|
|
|
|
})
|
|
|
|
|
|
|
|
return iW
|
|
|
|
},
|
|
|
|
getBarWidth: function() {
|
|
|
|
return $taskBar.innerWidth()
|
|
|
|
},
|
|
|
|
getCurrent: function() {
|
|
|
|
return $taskList.find('li.'+ taskSelected)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return tools
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.contextmenu = function($obj) {
|
|
|
|
var that = this
|
|
|
|
|
|
|
|
$obj.contextmenu({
|
|
|
|
id: 'dialogCM',
|
|
|
|
bindings: {
|
|
|
|
reload: function(t) {
|
|
|
|
t.dialog('refresh', that.options.id)
|
|
|
|
},
|
|
|
|
closeCurrent: function(t, m) {
|
|
|
|
var $obj = t.isTag('li') ? t : that.tools.getCurrent()
|
|
|
|
|
|
|
|
$obj.find('.close').trigger('click')
|
|
|
|
},
|
|
|
|
closeOther: function(t, m){
|
|
|
|
var $tasks = $taskList.find('> li').not(t)
|
|
|
|
|
|
|
|
$tasks.each(function(i) {
|
|
|
|
$(this).find('.close').trigger('click')
|
|
|
|
})
|
|
|
|
},
|
|
|
|
closeAll: function(t, m) {
|
|
|
|
var $tasks = that.tools.getTasks()
|
|
|
|
|
|
|
|
$tasks.each(function(i) {
|
|
|
|
$(this).find('.close').trigger('click')
|
|
|
|
})
|
|
|
|
}
|
|
|
|
},
|
|
|
|
ctrSub: function(t, m) {
|
|
|
|
var mCur = m.find('[rel="closeCurrent"]')
|
|
|
|
var mOther = m.find('[rel="closeOther"]')
|
|
|
|
|
|
|
|
if (!that.tools.getCurrent().length) {
|
|
|
|
mCur.addClass(taskDisabled)
|
|
|
|
mOther.addClass(taskDisabled)
|
|
|
|
} else {
|
|
|
|
if (that.tools.getTasks().size() == 1)
|
|
|
|
mOther.addClass(taskDisabled)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.closeDialog = function(task) {
|
|
|
|
var $task = (typeof task == 'string') ? this.getTask(task) : task
|
|
|
|
|
|
|
|
if (!$task || !$task.length) return
|
|
|
|
|
|
|
|
$task.remove()
|
|
|
|
if (this.tools.getTasks().size() == 0) {
|
|
|
|
this.hide()
|
|
|
|
}
|
|
|
|
this.tools.scrollCurrent()
|
|
|
|
this.$element.removeData('bjui.taskbar')
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.minimize = function(dialog) {
|
|
|
|
var that = this
|
|
|
|
var $dialog = (typeof dialog == 'string') ? $('body').data('dialog') : dialog
|
|
|
|
var $task = this.getTask($dialog.data('options').id)
|
|
|
|
|
|
|
|
$resizable.css({
|
|
|
|
top: $dialog.css('top'),
|
|
|
|
left: $dialog.css('left'),
|
|
|
|
height: $dialog.css('height'),
|
|
|
|
width: $dialog.css('width')
|
|
|
|
}).show().animate({top:$(window).height() - 60, left:$task.position().left, width:$task.outerWidth(), height:$task.outerHeight()}, 250, function() {
|
|
|
|
$(this).hide()
|
|
|
|
that.inactive($task)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {Object} id or dialog
|
|
|
|
*/
|
|
|
|
Taskbar.prototype.restoreDialog = function($dialog) {
|
|
|
|
var $task = this.getTask($dialog.data('options').id)
|
|
|
|
|
|
|
|
$resizable.css({top:$(window).height() - 60, left:$task.position().left, height:$task.outerHeight(), width:$task.outerWidth()})
|
|
|
|
.show()
|
|
|
|
.animate({top:$dialog.css('top'), left:$dialog.css('left'), width:$dialog.css('width'), height:$dialog.css('height')}, 250, function() {
|
|
|
|
$(this).hide()
|
|
|
|
$dialog.show()
|
|
|
|
})
|
|
|
|
|
|
|
|
this.switchTask($task)
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {Object} id
|
|
|
|
*/
|
|
|
|
Taskbar.prototype.inactive = function(task) {
|
|
|
|
var $task = (typeof task == 'string') ? this.getTask(task) : task
|
|
|
|
|
|
|
|
$task.removeClass(taskSelected)
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.scrollLeft = function() {
|
|
|
|
var $task = this.tools.visibleStart()
|
|
|
|
|
|
|
|
this.tools.scrollTask($task)
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.scrollRight = function() {
|
|
|
|
var $task = this.tools.visibleEnd()
|
|
|
|
|
|
|
|
this.tools.scrollTask($task)
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.scrollCurrent = function($task) {
|
|
|
|
this.tools.scrollTask($task)
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {Object} id or $task
|
|
|
|
*/
|
|
|
|
Taskbar.prototype.switchTask = function(task) {
|
|
|
|
this.tools.getCurrent().removeClass(taskSelected)
|
|
|
|
var $task = (typeof task == 'string') ? this.getTask(task) : task
|
|
|
|
|
|
|
|
$task.addClass(taskSelected)
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.getTask = function(id) {
|
|
|
|
return $taskList.find('#'+ id)
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.changeTitle = function(id, title) {
|
|
|
|
var $task = this.getTask(id)
|
|
|
|
|
|
|
|
if ($task && title) $task.find('.title').html(title)
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.show = function() {
|
|
|
|
if ($taskBar.is(':hidden')) $taskBar.show().animate({bottom:0}, 500)
|
|
|
|
}
|
|
|
|
|
|
|
|
Taskbar.prototype.hide = function() {
|
|
|
|
if ($taskBar.is(':visible')) $taskBar.animate({bottom:-50}, 500, function() { $taskBar.hide() })
|
|
|
|
}
|
|
|
|
|
|
|
|
// TASKBAR PLUGIN DEFINITION
|
|
|
|
// =======================
|
|
|
|
|
|
|
|
function Plugin(option) {
|
|
|
|
var args = arguments
|
|
|
|
var property = option
|
|
|
|
|
|
|
|
return this.each(function () {
|
|
|
|
var $this = $(this)
|
|
|
|
var options = $.extend({}, Taskbar.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
|
|
|
var data = $this.data('bjui.taskbar')
|
|
|
|
|
|
|
|
if (!data) $this.data('bjui.taskbar', (data = new Taskbar(this, options)))
|
|
|
|
else if (data.options.id != options.id) $this.data('bjui.taskbar', (data = new Taskbar(this, options)))
|
|
|
|
|
|
|
|
if (typeof property == 'string' && $.isFunction(data[property])) {
|
|
|
|
[].shift.apply(args)
|
|
|
|
if (!args) data[property]()
|
|
|
|
else data[property].apply(data, args)
|
|
|
|
} else {
|
|
|
|
data.init()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
var old = $.fn.taskbar
|
|
|
|
|
|
|
|
$.fn.taskbar = Plugin
|
|
|
|
$.fn.taskbar.Constructor = Taskbar
|
|
|
|
|
|
|
|
// TASKBAR NO CONFLICT
|
|
|
|
// =================
|
|
|
|
|
|
|
|
$.fn.taskbar.noConflict = function () {
|
|
|
|
$.fn.taskbar = old
|
|
|
|
return this
|
|
|
|
}
|
|
|
|
|
2015-10-23 23:19:11 +08:00
|
|
|
}(jQuery);
|