123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- /**
- * @author Roger Wu
- * @version 1.0
- */
- (function($){
- $.fn.extend({
- jTask:function(options){
- return this.each(function(){
- var $task = $(this);
- var id = $task.attr("id");
- $task.click(function(e){
- var dialog = $("body").data(id);
- if ($task.hasClass("selected")) {
- $("a.minimize", dialog).trigger("click");
- } else {
- if (dialog.is(":hidden")) {
- $.taskBar.restoreDialog(dialog);
- } else
- $(dialog).trigger("click");
- }
- $.taskBar.scrollCurrent($(this));
- return false;
- });
- $("div.close", $task).click(function(e){
- $.pdialog.close(id)
- return false;
- }).hoverClass("closeHover");
-
- $task.hoverClass("hover");
- });
- }
- });
- $.taskBar = {
- _taskBar:null,
- _taskBox:null,
- _prevBut:null,
- _nextBut:null,
- _op:{id:"taskbar", taskBox:"div.taskbarContent",prevBut:".taskbarLeft",prevDis:"taskbarLeftDisabled", nextBut:".taskbarRight",nextDis:"taskbarRightDisabled", selected:"selected",boxMargin:"taskbarMargin"},
- init:function(options) {
- var $this = this;
- $.extend(this._op, options);
- this._taskBar = $("#" + this._op.id);
- if (this._taskBar.size() == 0) {
- this._taskBar = $(DWZ.frag["taskbar"]).appendTo($("#layout"));
-
- this._taskBar.find(".taskbarLeft").hoverClass("taskbarLeftHover");
- this._taskBar.find(".taskbarRight").hoverClass("taskbarRightHover");
- }
- this._taskBox = this._taskBar.find(this._op.taskBox);
- this._taskList = this._taskBox.find(">ul");
- this._prevBut = this._taskBar.find(this._op.prevBut);
- this._nextBut = this._taskBar.find(this._op.nextBut);
- this._prevBut.click(function(e){$this.scrollLeft()});
- this._nextBut.click(function(e){$this.scrollRight()});
- this._contextmenu(this._taskBox); // taskBar右键菜单
- },
- _contextmenu:function(obj) {
- $(obj).contextMenu('dialogCM', {
- bindings:{
- closeCurrent:function(t,m){
- var obj = t.isTag("li")?t:$.taskBar._getCurrent();
- $("div.close", obj).trigger("click");
- },
- closeOther:function(t,m){
- var selector = t.isTag("li")?("#" +t.attr("id")):".selected";
- var tasks = $.taskBar._taskList.find(">li:not(:"+selector+")");
- tasks.each(function(i){
- $("div.close",tasks[i]).trigger("click");
- });
- },
- closeAll:function(t,m){
- var tasks = $.taskBar._getTasks();
- tasks.each(function(i){
- $("div.close",tasks[i]).trigger("click");
- });
- }
- },
- ctrSub:function(t,m){
- var mCur = m.find("[rel='closeCurrent']");
- var mOther = m.find("[rel='closeOther']");
- if(!$.taskBar._getCurrent()[0]) {
- mCur.addClass("disabled");
- mOther.addClass("disabled");
- } else {
- if($.taskBar._getTasks().size() == 1)
- mOther.addClass("disabled");
- }
- }
- });
- },
- _scrollCurrent:function(){
- var iW = this._tasksW(this._getTasks());
- if (iW > this._getTaskBarW()) {
- var $this = this;
- var lTask = $(">li:last-child", this._taskList);
- var left = this._getTaskBarW() - lTask.position().left - lTask.outerWidth(true);
- this._taskList.animate({
- left: left + 'px'
- }, 200, function(){
- $this._ctrlScrollBut();
- });
- } else {
- this._ctrlScrollBut();
- }
- },
- _getTaskBarW:function(){
- return this._taskBox.width()- (this._prevBut.is(":hidden")?this._prevBut.width()+2:0) - (this._nextBut.is(":hidden")?this._nextBut.width()+2:0);
- },
- _scrollTask:function(task){
- var $this = this;
- if(task.position().left + this._getLeft()+task.outerWidth() > this._getBarWidth()) {
- var left = this._getTaskBarW()- task.position().left - task.outerWidth(true) - 2;
- this._taskList.animate({left: left + 'px'}, 200, function(){
- $this._ctrlScrollBut();
- });
- } else if(task.position().left + this._getLeft() < 0) {
- var left = this._getLeft()-(task.position().left + this._getLeft());
- this._taskList.animate({left: left + 'px'}, 200, function(){
- $this._ctrlScrollBut();
- });
- }
- },
- /**
- * 控制左右移动按钮何时显示与隐藏
- */
- _ctrlScrollBut:function(){
- var iW = this._tasksW(this._getTasks());
- if (this._getTaskBarW() > iW) {
- this._taskBox.removeClass(this._op.boxMargin);
- this._nextBut.hide();
- this._prevBut.hide();
- if(this._getTasks().eq(0)[0])this._scrollTask(this._getTasks().eq(0));
- } else {
- this._taskBox.addClass(this._op.boxMargin);
- this._nextBut.show().removeClass(this._op.nextDis);
- this._prevBut.show().removeClass(this._op.prevDis);
- if (this._getLeft() >= 0){
- this._prevBut.addClass(this._op.prevDis);
- }
- if (this._getLeft() <= this._getTaskBarW() - iW) {
- this._nextBut.addClass(this._op.nextDis);
- }
- }
- },
- _getLeft: function(){
- return this._taskList.position().left;
- },
- /**
- * 取得第一个完全显示在taskbar上的任务
- */
- _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);
- },
- /**
- * 取得最后一个完全显示在taskbar上的任务
- */
- _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 this._taskList.find(">li");
- },
- /**
- * 计算所传入的所有任务的宽度和
- * @param {Object} jTasks
- */
- _tasksW:function(jTasks){
- var iW = 0;
- jTasks.each(function(){
- iW += $(this).outerWidth(true);
- });
- return iW;
- },
- _getBarWidth: function() {
- return this._taskBar.innerWidth();
- },
- /**
- * 在任务栏上新加一个任务
- * @param {Object} id
- * @param {Object} title
- */
- addDialog: function(id, title){
- this.show();
- var task = $("#"+id,this._taskList);
- if (!task[0]) {
- var taskFrag = '<li id="#taskid#"><div class="taskbutton"><span>#title#</span></div><div class="close">Close</div></li>';
- this._taskList.append(taskFrag.replace("#taskid#", id).replace("#title#", title));
- task = $("#"+id,this._taskList);
- task.jTask();
- } else {
- $(">div>span", task).text(title);
- }
- this._contextmenu(task);
- this.switchTask(id);
- this._scrollTask(task);
- },
- /**
- * 关闭一个任务
- * @param {Object} id
- */
- closeDialog: function(obj){
- var task = (typeof obj == 'string')? $("#"+obj, this._taskList):obj;
- task.remove();
- if(this._getTasks().size() == 0){
- this.hide();
- }
- this._scrollCurrent();
- },
- /**
- *
- * @param {Object} id or dialog
- */
- restoreDialog:function(obj){
- var dialog = (typeof obj == 'string')?$("body").data(obj):obj;
- var id = (typeof obj == 'string')?obj:dialog.data("id");
- var task = $.taskBar.getTask(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();
- $.pdialog.attachShadow(dialog);
- });
- $.taskBar.switchTask(id);
- },
- /**
- * 把任务变成不是当前的
- * @param {Object} id
- */
- inactive:function(id){
- $("#" + id, this._taskList).removeClass("selected");
- },
- /**
- * 向左移一个任务
- */
- scrollLeft: function(){
- var task = this._visibleStart();
- this._scrollTask(task);
- },
- /**
- * 向右移一个任务
- */
- scrollRight: function(){
- var task = this._visibleEnd();
- this._scrollTask(task);
- },
- /**
- * 移出当前点击的任务
- * @param {Object} task
- */
- scrollCurrent:function(task){
- this._scrollTask(task);
- },
- /**
- * 切换任务
- * @param {Object} id
- */
- switchTask:function(id) {
- this._getCurrent().removeClass("selected");
- this.getTask(id).addClass("selected");
- },
- _getCurrent:function() {
- return this._taskList.find(">.selected");
- },
- getTask:function(id) {
- return $("#" + id, this._taskList);
- },
- /**
- * 显示任务栏
- */
- show:function(){
- if (this._taskBar.is(":hidden")) {
- this._taskBar.css("top", $(window).height() - 34 + this._taskBar.outerHeight()).show();
- this._taskBar.animate({
- top: $(window).height() - this._taskBar.outerHeight()
- }, 500);
- }
- },
- /**
- * 隐藏任务栏
- */
- hide:function(){
- this._taskBar.animate({
- top: $(window).height() - 29 + this._taskBar.outerHeight(true)
- }, 500,function(){
- $.taskBar._taskBar.hide();
- });
- }
- }
- })(jQuery);
|