/** * EasyUI for jQuery 1.5.4.1 * * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved. * * Licensed under the commercial license: http://www.jeasyui.com/license_commercial.php * To use it on other terms please contact us: info@jeasyui.com * */ /** * parser - EasyUI for jQuery * */ (function($){ $.easyui = { /** * Get the index of array item, return -1 when the item is not found. */ indexOfArray: function(a, o, id){ for(var i=0,len=a.length; i=0; i--){ nodes.unshift(node.children[i]); } } } } }; $.parser = { auto: true, onComplete: function(context){}, plugins:['draggable','droppable','resizable','pagination','tooltip', 'linkbutton','menu','menubutton','splitbutton','switchbutton','progressbar', 'tree','textbox','passwordbox','filebox','combo','combobox','combotree','combogrid','combotreegrid','tagbox','numberbox','validatebox','searchbox', 'spinner','numberspinner','timespinner','datetimespinner','calendar','datebox','datetimebox','slider', 'layout','panel','datagrid','propertygrid','treegrid','datalist','tabs','accordion','window','dialog','form' ], parse: function(context){ var aa = []; for(var i=0; i<$.parser.plugins.length; i++){ var name = $.parser.plugins[i]; var r = $('.easyui-' + name, context); if (r.length){ if (r[name]){ r.each(function(){ $(this)[name]($.data(this, 'options')||{}); }); } else { aa.push({name:name,jq:r}); } } } if (aa.length && window.easyloader){ var names = []; for(var i=0; i= 0){ v = Math.floor((parent.width()-delta) * v / 100.0); } else { v = Math.floor((parent.height()-delta) * v / 100.0); } } else { v = parseInt(v) || undefined; } return v; }, /** * parse options, including standard 'data-options' attribute. * * calling examples: * $.parser.parseOptions(target); * $.parser.parseOptions(target, ['id','title','width',{fit:'boolean',border:'boolean'},{min:'number'}]); */ parseOptions: function(target, properties){ var t = $(target); var options = {}; var s = $.trim(t.attr('data-options')); if (s){ if (s.substring(0, 1) != '{'){ s = '{' + s + '}'; } options = (new Function('return ' + s))(); } $.map(['width','height','left','top','minWidth','maxWidth','minHeight','maxHeight'], function(p){ var pv = $.trim(target.style[p] || ''); if (pv){ if (pv.indexOf('%') == -1){ pv = parseInt(pv); if (isNaN(pv)){ pv = undefined; } } options[p] = pv; } }); if (properties){ var opts = {}; for(var i=0; i').appendTo('body'); $._boxModel = d.outerWidth()!=100; d.remove(); d = $('
').appendTo('body'); $._positionFixed = (d.css('position') == 'fixed'); d.remove(); if (!window.easyloader && $.parser.auto){ $.parser.parse(); } }); /** * extend plugin to set box model width */ $.fn._outerWidth = function(width){ if (width == undefined){ if (this[0] == window){ return this.width() || document.body.clientWidth; } return this.outerWidth()||0; } return this._size('width', width); }; /** * extend plugin to set box model height */ $.fn._outerHeight = function(height){ if (height == undefined){ if (this[0] == window){ return this.height() || document.body.clientHeight; } return this.outerHeight()||0; } return this._size('height', height); }; $.fn._scrollLeft = function(left){ if (left == undefined){ return this.scrollLeft(); } else { return this.each(function(){$(this).scrollLeft(left)}); } }; $.fn._propAttr = $.fn.prop || $.fn.attr; $.fn._size = function(options, parent){ if (typeof options == 'string'){ if (options == 'clear'){ return this.each(function(){ $(this).css({width:'',minWidth:'',maxWidth:'',height:'',minHeight:'',maxHeight:''}); }); } else if (options == 'fit'){ return this.each(function(){ _fit(this, this.tagName=='BODY' ? $('body') : $(this).parent(), true); }); } else if (options == 'unfit'){ return this.each(function(){ _fit(this, $(this).parent(), false); }); } else { if (parent == undefined){ return _css(this[0], options); } else { return this.each(function(){ _css(this, options, parent); }); } } } else { return this.each(function(){ parent = parent || $(this).parent(); $.extend(options, _fit(this, parent, options.fit)||{}); var r1 = _setSize(this, 'width', parent, options); var r2 = _setSize(this, 'height', parent, options); if (r1 || r2){ $(this).addClass('easyui-fluid'); } else { $(this).removeClass('easyui-fluid'); } }); } function _fit(target, parent, fit){ if (!parent.length){return false;} var t = $(target)[0]; var p = parent[0]; var fcount = p.fcount || 0; if (fit){ if (!t.fitted){ t.fitted = true; p.fcount = fcount + 1; $(p).addClass('panel-noscroll'); if (p.tagName == 'BODY'){ $('html').addClass('panel-fit'); } } return { width: ($(p).width()||1), height: ($(p).height()||1) }; } else { if (t.fitted){ t.fitted = false; p.fcount = fcount - 1; if (p.fcount == 0){ $(p).removeClass('panel-noscroll'); if (p.tagName == 'BODY'){ $('html').removeClass('panel-fit'); } } } return false; } } function _setSize(target, property, parent, options){ var t = $(target); var p = property; var p1 = p.substr(0,1).toUpperCase() + p.substr(1); var min = $.parser.parseValue('min'+p1, options['min'+p1], parent);// || 0; var max = $.parser.parseValue('max'+p1, options['max'+p1], parent);// || 99999; var val = $.parser.parseValue(p, options[p], parent); var fluid = (String(options[p]||'').indexOf('%') >= 0 ? true : false); if (!isNaN(val)){ var v = Math.min(Math.max(val, min||0), max||99999); if (!fluid){ options[p] = v; } t._size('min'+p1, ''); t._size('max'+p1, ''); t._size(p, v); } else { t._size(p, ''); t._size('min'+p1, min); t._size('max'+p1, max); } return fluid || options.fit; } function _css(target, property, value){ var t = $(target); if (value == undefined){ value = parseInt(target.style[property]); if (isNaN(value)){return undefined;} if ($._boxModel){ value += getDeltaSize(); } return value; } else if (value === ''){ t.css(property, ''); } else { if ($._boxModel){ value -= getDeltaSize(); if (value < 0){value = 0;} } t.css(property, value+'px'); } function getDeltaSize(){ if (property.toLowerCase().indexOf('width') >= 0){ return t.outerWidth() - t.width(); } else { return t.outerHeight() - t.height(); } } } }; })(jQuery); /** * support for mobile devices */ (function($){ var longTouchTimer = null; var dblTouchTimer = null; var isDblClick = false; function onTouchStart(e){ if (e.touches.length != 1){return} if (!isDblClick){ isDblClick = true; dblClickTimer = setTimeout(function(){ isDblClick = false; }, 500); } else { clearTimeout(dblClickTimer); isDblClick = false; fire(e, 'dblclick'); // e.preventDefault(); } longTouchTimer = setTimeout(function(){ fire(e, 'contextmenu', 3); }, 1000); fire(e, 'mousedown'); if ($.fn.draggable.isDragging || $.fn.resizable.isResizing){ e.preventDefault(); } } function onTouchMove(e){ if (e.touches.length != 1){return} if (longTouchTimer){ clearTimeout(longTouchTimer); } fire(e, 'mousemove'); if ($.fn.draggable.isDragging || $.fn.resizable.isResizing){ e.preventDefault(); } } function onTouchEnd(e){ // if (e.touches.length > 0){return} if (longTouchTimer){ clearTimeout(longTouchTimer); } fire(e, 'mouseup'); if ($.fn.draggable.isDragging || $.fn.resizable.isResizing){ e.preventDefault(); } } function fire(e, name, which){ var event = new $.Event(name); event.pageX = e.changedTouches[0].pageX; event.pageY = e.changedTouches[0].pageY; event.which = which || 1; $(e.target).trigger(event); } if (document.addEventListener){ document.addEventListener("touchstart", onTouchStart, true); document.addEventListener("touchmove", onTouchMove, true); document.addEventListener("touchend", onTouchEnd, true); } })(jQuery); /** * draggable - EasyUI for jQuery * */ (function($){ function drag(e){ var state = $.data(e.data.target, 'draggable'); var opts = state.options; var proxy = state.proxy; var dragData = e.data; var left = dragData.startLeft + e.pageX - dragData.startX; var top = dragData.startTop + e.pageY - dragData.startY; if (proxy){ if (proxy.parent()[0] == document.body){ if (opts.deltaX != null && opts.deltaX != undefined){ left = e.pageX + opts.deltaX; } else { left = e.pageX - e.data.offsetWidth; } if (opts.deltaY != null && opts.deltaY != undefined){ top = e.pageY + opts.deltaY; } else { top = e.pageY - e.data.offsetHeight; } } else { if (opts.deltaX != null && opts.deltaX != undefined){ left += e.data.offsetWidth + opts.deltaX; } if (opts.deltaY != null && opts.deltaY != undefined){ top += e.data.offsetHeight + opts.deltaY; } } } if (e.data.parent != document.body) { left += $(e.data.parent).scrollLeft(); top += $(e.data.parent).scrollTop(); } if (opts.axis == 'h') { dragData.left = left; } else if (opts.axis == 'v') { dragData.top = top; } else { dragData.left = left; dragData.top = top; } } function applyDrag(e){ var state = $.data(e.data.target, 'draggable'); var opts = state.options; var proxy = state.proxy; if (!proxy){ proxy = $(e.data.target); } proxy.css({ left:e.data.left, top:e.data.top }); $('body').css('cursor', opts.cursor); } function doDown(e){ if (!$.fn.draggable.isDragging){return false;} var state = $.data(e.data.target, 'draggable'); var opts = state.options; var droppables = $('.droppable:visible').filter(function(){ return e.data.target != this; }).filter(function(){ var accept = $.data(this, 'droppable').options.accept; if (accept){ return $(accept).filter(function(){ return this == e.data.target; }).length > 0; } else { return true; } }); state.droppables = droppables; var proxy = state.proxy; if (!proxy){ if (opts.proxy){ if (opts.proxy == 'clone'){ proxy = $(e.data.target).clone().insertAfter(e.data.target); } else { proxy = opts.proxy.call(e.data.target, e.data.target); } state.proxy = proxy; } else { proxy = $(e.data.target); } } proxy.css('position', 'absolute'); drag(e); applyDrag(e); opts.onStartDrag.call(e.data.target, e); return false; } function doMove(e){ if (!$.fn.draggable.isDragging){return false;} var state = $.data(e.data.target, 'draggable'); drag(e); if (state.options.onDrag.call(e.data.target, e) != false){ applyDrag(e); } var source = e.data.target; state.droppables.each(function(){ var dropObj = $(this); if (dropObj.droppable('options').disabled){return;} var p2 = dropObj.offset(); if (e.pageX > p2.left && e.pageX < p2.left + dropObj.outerWidth() && e.pageY > p2.top && e.pageY < p2.top + dropObj.outerHeight()){ if (!this.entered){ $(this).trigger('_dragenter', [source]); this.entered = true; } $(this).trigger('_dragover', [source]); } else { if (this.entered){ $(this).trigger('_dragleave', [source]); this.entered = false; } } }); return false; } function doUp(e){ if (!$.fn.draggable.isDragging){ clearDragging(); return false; } doMove(e); var state = $.data(e.data.target, 'draggable'); var proxy = state.proxy; var opts = state.options; opts.onEndDrag.call(e.data.target, e); if (opts.revert){ if (checkDrop() == true){ $(e.data.target).css({ position:e.data.startPosition, left:e.data.startLeft, top:e.data.startTop }); } else { if (proxy){ var left, top; if (proxy.parent()[0] == document.body){ left = e.data.startX - e.data.offsetWidth; top = e.data.startY - e.data.offsetHeight; } else { left = e.data.startLeft; top = e.data.startTop; } proxy.animate({ left: left, top: top }, function(){ removeProxy(); }); } else { $(e.data.target).animate({ left:e.data.startLeft, top:e.data.startTop }, function(){ $(e.data.target).css('position', e.data.startPosition); }); } } } else { $(e.data.target).css({ position:'absolute', left:e.data.left, top:e.data.top }); checkDrop(); } opts.onStopDrag.call(e.data.target, e); clearDragging(); function removeProxy(){ if (proxy){ proxy.remove(); } state.proxy = null; } function checkDrop(){ var dropped = false; state.droppables.each(function(){ var dropObj = $(this); if (dropObj.droppable('options').disabled){return;} var p2 = dropObj.offset(); if (e.pageX > p2.left && e.pageX < p2.left + dropObj.outerWidth() && e.pageY > p2.top && e.pageY < p2.top + dropObj.outerHeight()){ if (opts.revert){ $(e.data.target).css({ position:e.data.startPosition, left:e.data.startLeft, top:e.data.startTop }); } $(this).triggerHandler('_drop', [e.data.target]); removeProxy(); dropped = true; this.entered = false; return false; } }); if (!dropped && !opts.revert){ removeProxy(); } return dropped; } return false; } function clearDragging(){ if ($.fn.draggable.timer){ clearTimeout($.fn.draggable.timer); $.fn.draggable.timer = undefined; } $(document).unbind('.draggable'); $.fn.draggable.isDragging = false; setTimeout(function(){ $('body').css('cursor',''); },100); } $.fn.draggable = function(options, param){ if (typeof options == 'string'){ return $.fn.draggable.methods[options](this, param); } return this.each(function(){ var opts; var state = $.data(this, 'draggable'); if (state) { state.handle.unbind('.draggable'); opts = $.extend(state.options, options); } else { opts = $.extend({}, $.fn.draggable.defaults, $.fn.draggable.parseOptions(this), options || {}); } var handle = opts.handle ? (typeof opts.handle=='string' ? $(opts.handle, this) : opts.handle) : $(this); $.data(this, 'draggable', { options: opts, handle: handle }); if (opts.disabled) { $(this).css('cursor', ''); return; } handle.unbind('.draggable').bind('mousemove.draggable', {target:this}, function(e){ if ($.fn.draggable.isDragging){return} var opts = $.data(e.data.target, 'draggable').options; if (checkArea(e)){ $(this).css('cursor', opts.cursor); } else { $(this).css('cursor', ''); } }).bind('mouseleave.draggable', {target:this}, function(e){ $(this).css('cursor', ''); }).bind('mousedown.draggable', {target:this}, function(e){ if (checkArea(e) == false) return; $(this).css('cursor', ''); var position = $(e.data.target).position(); var offset = $(e.data.target).offset(); var data = { startPosition: $(e.data.target).css('position'), startLeft: position.left, startTop: position.top, left: position.left, top: position.top, startX: e.pageX, startY: e.pageY, width: $(e.data.target).outerWidth(), height: $(e.data.target).outerHeight(), offsetWidth: (e.pageX - offset.left), offsetHeight: (e.pageY - offset.top), target: e.data.target, parent: $(e.data.target).parent()[0] }; $.extend(e.data, data); var opts = $.data(e.data.target, 'draggable').options; if (opts.onBeforeDrag.call(e.data.target, e) == false) return; $(document).bind('mousedown.draggable', e.data, doDown); $(document).bind('mousemove.draggable', e.data, doMove); $(document).bind('mouseup.draggable', e.data, doUp); $.fn.draggable.timer = setTimeout(function(){ $.fn.draggable.isDragging = true; doDown(e); }, opts.delay); return false; }); // check if the handle can be dragged function checkArea(e) { var state = $.data(e.data.target, 'draggable'); var handle = state.handle; var offset = $(handle).offset(); var width = $(handle).outerWidth(); var height = $(handle).outerHeight(); var t = e.pageY - offset.top; var r = offset.left + width - e.pageX; var b = offset.top + height - e.pageY; var l = e.pageX - offset.left; return Math.min(t,r,b,l) > state.options.edge; } }); }; $.fn.draggable.methods = { options: function(jq){ return $.data(jq[0], 'draggable').options; }, proxy: function(jq){ return $.data(jq[0], 'draggable').proxy; }, enable: function(jq){ return jq.each(function(){ $(this).draggable({disabled:false}); }); }, disable: function(jq){ return jq.each(function(){ $(this).draggable({disabled:true}); }); } }; $.fn.draggable.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, ['cursor','handle','axis', {'revert':'boolean','deltaX':'number','deltaY':'number','edge':'number','delay':'number'}]), { disabled: (t.attr('disabled') ? true : undefined) }); }; $.fn.draggable.defaults = { proxy:null, // 'clone' or a function that will create the proxy object, // the function has the source parameter that indicate the source object dragged. revert:false, cursor:'move', deltaX:null, deltaY:null, handle: null, disabled: false, edge:0, axis:null, // v or h delay:100, onBeforeDrag: function(e){}, onStartDrag: function(e){}, onDrag: function(e){}, onEndDrag: function(e){}, onStopDrag: function(e){} }; $.fn.draggable.isDragging = false; })(jQuery); /** * droppable - EasyUI for jQuery * */ (function($){ function init(target){ $(target).addClass('droppable'); $(target).bind('_dragenter', function(e, source){ $.data(target, 'droppable').options.onDragEnter.apply(target, [e, source]); }); $(target).bind('_dragleave', function(e, source){ $.data(target, 'droppable').options.onDragLeave.apply(target, [e, source]); }); $(target).bind('_dragover', function(e, source){ $.data(target, 'droppable').options.onDragOver.apply(target, [e, source]); }); $(target).bind('_drop', function(e, source){ $.data(target, 'droppable').options.onDrop.apply(target, [e, source]); }); } $.fn.droppable = function(options, param){ if (typeof options == 'string'){ return $.fn.droppable.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'droppable'); if (state){ $.extend(state.options, options); } else { init(this); $.data(this, 'droppable', { options: $.extend({}, $.fn.droppable.defaults, $.fn.droppable.parseOptions(this), options) }); } }); }; $.fn.droppable.methods = { options: function(jq){ return $.data(jq[0], 'droppable').options; }, enable: function(jq){ return jq.each(function(){ $(this).droppable({disabled:false}); }); }, disable: function(jq){ return jq.each(function(){ $(this).droppable({disabled:true}); }); } }; $.fn.droppable.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, ['accept']), { disabled: (t.attr('disabled') ? true : undefined) }); }; $.fn.droppable.defaults = { accept:null, disabled:false, onDragEnter:function(e, source){}, onDragOver:function(e, source){}, onDragLeave:function(e, source){}, onDrop:function(e, source){} }; })(jQuery); /** * resizable - EasyUI for jQuery * */ (function($){ function resize(e){ var resizeData = e.data; var options = $.data(resizeData.target, 'resizable').options; if (resizeData.dir.indexOf('e') != -1) { var width = resizeData.startWidth + e.pageX - resizeData.startX; width = Math.min( Math.max(width, options.minWidth), options.maxWidth ); resizeData.width = width; } if (resizeData.dir.indexOf('s') != -1) { var height = resizeData.startHeight + e.pageY - resizeData.startY; height = Math.min( Math.max(height, options.minHeight), options.maxHeight ); resizeData.height = height; } if (resizeData.dir.indexOf('w') != -1) { var width = resizeData.startWidth - e.pageX + resizeData.startX; width = Math.min( Math.max(width, options.minWidth), options.maxWidth ); resizeData.width = width; resizeData.left = resizeData.startLeft + resizeData.startWidth - resizeData.width; } if (resizeData.dir.indexOf('n') != -1) { var height = resizeData.startHeight - e.pageY + resizeData.startY; height = Math.min( Math.max(height, options.minHeight), options.maxHeight ); resizeData.height = height; resizeData.top = resizeData.startTop + resizeData.startHeight - resizeData.height; } } function applySize(e){ var resizeData = e.data; var t = $(resizeData.target); t.css({ left: resizeData.left, top: resizeData.top }); if (t.outerWidth() != resizeData.width){t._outerWidth(resizeData.width)} if (t.outerHeight() != resizeData.height){t._outerHeight(resizeData.height)} } function doDown(e){ $.fn.resizable.isResizing = true; $.data(e.data.target, 'resizable').options.onStartResize.call(e.data.target, e); return false; } function doMove(e){ resize(e); if ($.data(e.data.target, 'resizable').options.onResize.call(e.data.target, e) != false){ applySize(e) } return false; } function doUp(e){ $.fn.resizable.isResizing = false; resize(e, true); applySize(e); $.data(e.data.target, 'resizable').options.onStopResize.call(e.data.target, e); $(document).unbind('.resizable'); $('body').css('cursor',''); return false; } // get the resize direction function getDirection(e) { var opts = $(e.data.target).resizable('options'); var tt = $(e.data.target); var dir = ''; var offset = tt.offset(); var width = tt.outerWidth(); var height = tt.outerHeight(); var edge = opts.edge; if (e.pageY > offset.top && e.pageY < offset.top + edge) { dir += 'n'; } else if (e.pageY < offset.top + height && e.pageY > offset.top + height - edge) { dir += 's'; } if (e.pageX > offset.left && e.pageX < offset.left + edge) { dir += 'w'; } else if (e.pageX < offset.left + width && e.pageX > offset.left + width - edge) { dir += 'e'; } var handles = opts.handles.split(','); handles = $.map(handles, function(h){return $.trim(h).toLowerCase();}); if ($.inArray('all', handles) >= 0 || $.inArray(dir, handles) >= 0){ return dir; } for(var i=0; i= 0){ return handles[index]; } } return ''; } $.fn.resizable = function(options, param){ if (typeof options == 'string'){ return $.fn.resizable.methods[options](this, param); } return this.each(function(){ var opts = null; var state = $.data(this, 'resizable'); if (state) { $(this).unbind('.resizable'); opts = $.extend(state.options, options || {}); } else { opts = $.extend({}, $.fn.resizable.defaults, $.fn.resizable.parseOptions(this), options || {}); $.data(this, 'resizable', { options:opts }); } if (opts.disabled == true) { return; } $(this).bind('mousemove.resizable', {target:this}, function(e){ if ($.fn.resizable.isResizing){return} var dir = getDirection(e); $(e.data.target).css('cursor', dir ? dir+'-resize' : ''); }).bind('mouseleave.resizable', {target:this}, function(e){ $(e.data.target).css('cursor', ''); }).bind('mousedown.resizable', {target:this}, function(e){ var dir = getDirection(e); if (dir == ''){return;} function getCssValue(css) { var val = parseInt($(e.data.target).css(css)); if (isNaN(val)) { return 0; } else { return val; } } var data = { target: e.data.target, dir: dir, startLeft: getCssValue('left'), startTop: getCssValue('top'), left: getCssValue('left'), top: getCssValue('top'), startX: e.pageX, startY: e.pageY, startWidth: $(e.data.target).outerWidth(), startHeight: $(e.data.target).outerHeight(), width: $(e.data.target).outerWidth(), height: $(e.data.target).outerHeight(), deltaWidth: $(e.data.target).outerWidth() - $(e.data.target).width(), deltaHeight: $(e.data.target).outerHeight() - $(e.data.target).height() }; $(document).bind('mousedown.resizable', data, doDown); $(document).bind('mousemove.resizable', data, doMove); $(document).bind('mouseup.resizable', data, doUp); $('body').css('cursor', dir+'-resize'); }); }); }; $.fn.resizable.methods = { options: function(jq){ return $.data(jq[0], 'resizable').options; }, enable: function(jq){ return jq.each(function(){ $(this).resizable({disabled:false}); }); }, disable: function(jq){ return jq.each(function(){ $(this).resizable({disabled:true}); }); } }; $.fn.resizable.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, [ 'handles',{minWidth:'number',minHeight:'number',maxWidth:'number',maxHeight:'number',edge:'number'} ]), { disabled: (t.attr('disabled') ? true : undefined) }) }; $.fn.resizable.defaults = { disabled:false, handles:'n, e, s, w, ne, se, sw, nw, all', minWidth: 10, minHeight: 10, maxWidth: 10000,//$(document).width(), maxHeight: 10000,//$(document).height(), edge:5, onStartResize: function(e){}, onResize: function(e){}, onStopResize: function(e){} }; $.fn.resizable.isResizing = false; })(jQuery); /** * linkbutton - EasyUI for jQuery * */ (function($){ function setSize(target, param){ var opts = $.data(target, 'linkbutton').options; if (param){ $.extend(opts, param); } if (opts.width || opts.height || opts.fit){ var btn = $(target); var parent = btn.parent(); var isVisible = btn.is(':visible'); if (!isVisible){ var spacer = $('
').insertBefore(target); var style = { position: btn.css('position'), display: btn.css('display'), left: btn.css('left') }; btn.appendTo('body'); btn.css({ position: 'absolute', display: 'inline-block', left: -20000 }); } btn._size(opts, parent); var left = btn.find('.l-btn-left'); left.css('margin-top', 0); left.css('margin-top', parseInt((btn.height()-left.height())/2)+'px'); if (!isVisible){ btn.insertAfter(spacer); btn.css(style); spacer.remove(); } } } function createButton(target) { var opts = $.data(target, 'linkbutton').options; var t = $(target).empty(); t.addClass('l-btn').removeClass('l-btn-plain l-btn-selected l-btn-plain-selected l-btn-outline'); t.removeClass('l-btn-small l-btn-medium l-btn-large').addClass('l-btn-'+opts.size); if (opts.plain){t.addClass('l-btn-plain')} if (opts.outline){t.addClass('l-btn-outline')} if (opts.selected){ t.addClass(opts.plain ? 'l-btn-selected l-btn-plain-selected' : 'l-btn-selected'); } t.attr('group', opts.group || ''); t.attr('id', opts.id || ''); var inner = $('').appendTo(t); if (opts.text){ $('').html(opts.text).appendTo(inner); } else { $(' ').appendTo(inner); } if (opts.iconCls){ $(' ').addClass(opts.iconCls).appendTo(inner); inner.addClass('l-btn-icon-'+opts.iconAlign); } t.unbind('.linkbutton').bind('focus.linkbutton',function(){ if (!opts.disabled){ $(this).addClass('l-btn-focus'); } }).bind('blur.linkbutton',function(){ $(this).removeClass('l-btn-focus'); }).bind('click.linkbutton',function(){ if (!opts.disabled){ if (opts.toggle){ if (opts.selected){ $(this).linkbutton('unselect'); } else { $(this).linkbutton('select'); } } opts.onClick.call(this); } // return false; }); // if (opts.toggle && !opts.disabled){ // t.bind('click.linkbutton', function(){ // if (opts.selected){ // $(this).linkbutton('unselect'); // } else { // $(this).linkbutton('select'); // } // }); // } setSelected(target, opts.selected) setDisabled(target, opts.disabled); } function setSelected(target, selected){ var opts = $.data(target, 'linkbutton').options; if (selected){ if (opts.group){ $('a.l-btn[group="'+opts.group+'"]').each(function(){ var o = $(this).linkbutton('options'); if (o.toggle){ $(this).removeClass('l-btn-selected l-btn-plain-selected'); o.selected = false; } }); } $(target).addClass(opts.plain ? 'l-btn-selected l-btn-plain-selected' : 'l-btn-selected'); opts.selected = true; } else { if (!opts.group){ $(target).removeClass('l-btn-selected l-btn-plain-selected'); opts.selected = false; } } } function setDisabled(target, disabled){ var state = $.data(target, 'linkbutton'); var opts = state.options; $(target).removeClass('l-btn-disabled l-btn-plain-disabled'); if (disabled){ opts.disabled = true; var href = $(target).attr('href'); if (href){ state.href = href; $(target).attr('href', 'javascript:;'); } if (target.onclick){ state.onclick = target.onclick; target.onclick = null; } opts.plain ? $(target).addClass('l-btn-disabled l-btn-plain-disabled') : $(target).addClass('l-btn-disabled'); } else { opts.disabled = false; if (state.href) { $(target).attr('href', state.href); } if (state.onclick) { target.onclick = state.onclick; } } } $.fn.linkbutton = function(options, param){ if (typeof options == 'string'){ return $.fn.linkbutton.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'linkbutton'); if (state){ $.extend(state.options, options); } else { $.data(this, 'linkbutton', { options: $.extend({}, $.fn.linkbutton.defaults, $.fn.linkbutton.parseOptions(this), options) }); $(this).removeAttr('disabled'); $(this).bind('_resize', function(e, force){ if ($(this).hasClass('easyui-fluid') || force){ setSize(this); } return false; }); } createButton(this); setSize(this); }); }; $.fn.linkbutton.methods = { options: function(jq){ return $.data(jq[0], 'linkbutton').options; }, resize: function(jq, param){ return jq.each(function(){ setSize(this, param); }); }, enable: function(jq){ return jq.each(function(){ setDisabled(this, false); }); }, disable: function(jq){ return jq.each(function(){ setDisabled(this, true); }); }, select: function(jq){ return jq.each(function(){ setSelected(this, true); }); }, unselect: function(jq){ return jq.each(function(){ setSelected(this, false); }); } }; $.fn.linkbutton.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, ['id','iconCls','iconAlign','group','size','text',{plain:'boolean',toggle:'boolean',selected:'boolean',outline:'boolean'}] ), { disabled: (t.attr('disabled') ? true : undefined), text: ($.trim(t.html()) || undefined), iconCls: (t.attr('icon') || t.attr('iconCls')) }); }; $.fn.linkbutton.defaults = { id: null, disabled: false, toggle: false, selected: false, outline: false, group: null, plain: false, text: '', iconCls: null, iconAlign: 'left', size: 'small', // small,large onClick: function(){} }; })(jQuery); /** * pagination - EasyUI for jQuery * * Dependencies: * linkbutton * */ (function($){ function buildToolbar(target){ var state = $.data(target, 'pagination'); var opts = state.options; var bb = state.bb = {}; // the buttons; var pager = $(target).addClass('pagination').html('
'); var tr = pager.find('tr'); var aa = $.extend([], opts.layout); if (!opts.showPageList){removeArrayItem(aa, 'list');} if (!opts.showPageInfo){removeArrayItem(aa, 'info');} if (!opts.showRefresh){removeArrayItem(aa, 'refresh');} if (aa[0] == 'sep'){aa.shift();} if (aa[aa.length-1] == 'sep'){aa.pop();} for(var index=0; index'); ps.bind('change', function(){ opts.pageSize = parseInt($(this).val()); opts.onChangePageSize.call(target, opts.pageSize); selectPage(target, opts.pageNumber); }); for(var i=0; i').text(opts.pageList[i]).appendTo(ps); } $('').append(ps).appendTo(tr); } else if (item == 'sep'){ $('
').appendTo(tr); } else if (item == 'first'){ bb.first = createButton('first'); } else if (item == 'prev'){ bb.prev = createButton('prev'); } else if (item == 'next'){ bb.next = createButton('next'); } else if (item == 'last'){ bb.last = createButton('last'); } else if (item == 'manual'){ $('').html(opts.beforePageText).appendTo(tr).wrap(''); bb.num = $('').appendTo(tr).wrap(''); bb.num.unbind('.pagination').bind('keydown.pagination', function(e){ if (e.keyCode == 13){ var pageNumber = parseInt($(this).val()) || 1; selectPage(target, pageNumber); return false; } }); bb.after = $('').appendTo(tr).wrap(''); } else if (item == 'refresh'){ bb.refresh = createButton('refresh'); } else if (item == 'links'){ $('').appendTo(tr); } else if (item == 'info'){ if (index == aa.length-1){ $('
').appendTo(pager); //$('
').appendTo(pager); } else { $('
').appendTo(tr); } } } if (opts.buttons){ $('
').appendTo(tr); if ($.isArray(opts.buttons)){ for(var i=0; i
').appendTo(tr); } else { var td = $('').appendTo(tr); var a = $('').appendTo(td); a[0].onclick = eval(btn.handler || function(){}); a.linkbutton($.extend({}, btn, { plain:true })); } } } else { var td = $('').appendTo(tr); $(opts.buttons).appendTo(td).show(); } } $('
').appendTo(pager); function createButton(name){ var btn = opts.nav[name]; var a = $('').appendTo(tr); a.wrap(''); a.linkbutton({ iconCls: btn.iconCls, plain: true }).unbind('.pagination').bind('click.pagination', function(){ btn.handler.call(target); }); return a; } function removeArrayItem(aa, item){ var index = $.inArray(item, aa); if (index >= 0){ aa.splice(index, 1); } return aa; } } function selectPage(target, page){ var opts = $.data(target, 'pagination').options; refreshData(target, {pageNumber:page}); opts.onSelectPage.call(target, opts.pageNumber, opts.pageSize); } function refreshData(target, param){ var state = $.data(target, 'pagination'); var opts = state.options; var bb = state.bb; $.extend(opts, param||{}); var ps = $(target).find('select.pagination-page-list'); if (ps.length){ ps.val(opts.pageSize+''); opts.pageSize = parseInt(ps.val()); } var pageCount = Math.ceil(opts.total/opts.pageSize) || 1; if (opts.pageNumber < 1){opts.pageNumber = 1;} if (opts.pageNumber > pageCount){opts.pageNumber = pageCount} if (opts.total == 0){ opts.pageNumber = 0; pageCount = 0; } if (bb.num) {bb.num.val(opts.pageNumber);} if (bb.after) {bb.after.html(opts.afterPageText.replace(/{pages}/, pageCount));} var td = $(target).find('td.pagination-links'); if (td.length){ td.empty(); var listBegin = opts.pageNumber - Math.floor(opts.links/2); if (listBegin < 1) {listBegin = 1;} var listEnd = listBegin + opts.links - 1; if (listEnd > pageCount) {listEnd = pageCount;} listBegin = listEnd - opts.links + 1; if (listBegin < 1) {listBegin = 1;} for(var i=listBegin; i<=listEnd; i++){ var a = $('').appendTo(td); a.linkbutton({ plain:true, text:i }); if (i == opts.pageNumber){ a.linkbutton('select'); } else { a.unbind('.pagination').bind('click.pagination', {pageNumber:i}, function(e){ selectPage(target, e.data.pageNumber); }); } } } var pinfo = opts.displayMsg; pinfo = pinfo.replace(/{from}/, opts.total==0 ? 0 : opts.pageSize*(opts.pageNumber-1)+1); pinfo = pinfo.replace(/{to}/, Math.min(opts.pageSize*(opts.pageNumber), opts.total)); pinfo = pinfo.replace(/{total}/, opts.total); $(target).find('div.pagination-info').html(pinfo); // bb.first.add(bb.prev).linkbutton({disabled: (opts.pageNumber == 1)}); // bb.next.add(bb.last).linkbutton({disabled: (opts.pageNumber == pageCount)}); if (bb.first){bb.first.linkbutton({disabled: ((!opts.total) || opts.pageNumber == 1)})} if (bb.prev){bb.prev.linkbutton({disabled: ((!opts.total) || opts.pageNumber == 1)})} if (bb.next){bb.next.linkbutton({disabled: (opts.pageNumber == pageCount)})} if (bb.last){bb.last.linkbutton({disabled: (opts.pageNumber == pageCount)})} setLoadStatus(target, opts.loading); } function setLoadStatus(target, loading){ var state = $.data(target, 'pagination'); var opts = state.options; opts.loading = loading; if (opts.showRefresh && state.bb.refresh){ state.bb.refresh.linkbutton({ iconCls:(opts.loading ? 'pagination-loading' : 'pagination-load') }); } } $.fn.pagination = function(options, param) { if (typeof options == 'string'){ return $.fn.pagination.methods[options](this, param); } options = options || {}; return this.each(function(){ var opts; var state = $.data(this, 'pagination'); if (state) { opts = $.extend(state.options, options); } else { opts = $.extend({}, $.fn.pagination.defaults, $.fn.pagination.parseOptions(this), options); $.data(this, 'pagination', { options: opts }); } buildToolbar(this); refreshData(this); }); }; $.fn.pagination.methods = { options: function(jq){ return $.data(jq[0], 'pagination').options; }, loading: function(jq){ return jq.each(function(){ setLoadStatus(this, true); }); }, loaded: function(jq){ return jq.each(function(){ setLoadStatus(this, false); }); }, refresh: function(jq, options){ return jq.each(function(){ refreshData(this, options); }); }, select: function(jq, page){ return jq.each(function(){ selectPage(this, page); }); } }; $.fn.pagination.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, [ {total:'number',pageSize:'number',pageNumber:'number',links:'number'}, {loading:'boolean',showPageList:'boolean',showPageInfo:'boolean',showRefresh:'boolean'} ]), { pageList: (t.attr('pageList') ? eval(t.attr('pageList')) : undefined) }); }; $.fn.pagination.defaults = { total: 1, pageSize: 10, pageNumber: 1, pageList: [10,20,30,50], loading: false, buttons: null, showPageList: true, showPageInfo: true, showRefresh: true, links: 10, layout: ['list','sep','first','prev','sep','manual','sep','next','last','sep','refresh','info'], onSelectPage: function(pageNumber, pageSize){}, onBeforeRefresh: function(pageNumber, pageSize){}, onRefresh: function(pageNumber, pageSize){}, onChangePageSize: function(pageSize){}, beforePageText: 'Page', afterPageText: 'of {pages}', displayMsg: 'Displaying {from} to {to} of {total} items', nav: { first: { iconCls: 'pagination-first', handler: function(){ var opts = $(this).pagination('options'); if (opts.pageNumber > 1){$(this).pagination('select', 1)} } }, prev: { iconCls: 'pagination-prev', handler: function(){ var opts = $(this).pagination('options'); if (opts.pageNumber > 1){$(this).pagination('select', opts.pageNumber - 1)} } }, next: { iconCls: 'pagination-next', handler: function(){ var opts = $(this).pagination('options'); var pageCount = Math.ceil(opts.total/opts.pageSize); if (opts.pageNumber < pageCount){$(this).pagination('select', opts.pageNumber + 1)} } }, last: { iconCls: 'pagination-last', handler: function(){ var opts = $(this).pagination('options'); var pageCount = Math.ceil(opts.total/opts.pageSize); if (opts.pageNumber < pageCount){$(this).pagination('select', pageCount)} } }, refresh: { iconCls: 'pagination-refresh', handler: function(){ var opts = $(this).pagination('options'); if (opts.onBeforeRefresh.call(this, opts.pageNumber, opts.pageSize) != false){ $(this).pagination('select', opts.pageNumber); opts.onRefresh.call(this, opts.pageNumber, opts.pageSize); } } } } }; })(jQuery); /** * tree - EasyUI for jQuery * * Dependencies: * draggable * droppable * * Node is a javascript object which contains following properties: * 1 id: An identity value bind to the node. * 2 text: Text to be showed. * 3 checked: Indicate whether the node is checked selected. * 3 attributes: Custom attributes bind to the node. * 4 target: Target DOM object. */ (function($){ /** * wrap the
    tag as a tree and then return it. */ function wrapTree(target){ var tree = $(target); tree.addClass('tree'); return tree; } function bindTreeEvents(target){ var opts = $.data(target, 'tree').options; $(target).unbind().bind('mouseover', function(e){ var tt = $(e.target); var node = tt.closest('div.tree-node'); if (!node.length){return;} node.addClass('tree-node-hover'); if (tt.hasClass('tree-hit')){ if (tt.hasClass('tree-expanded')){ tt.addClass('tree-expanded-hover'); } else { tt.addClass('tree-collapsed-hover'); } } e.stopPropagation(); }).bind('mouseout', function(e){ var tt = $(e.target); var node = tt.closest('div.tree-node'); if (!node.length){return;} node.removeClass('tree-node-hover'); if (tt.hasClass('tree-hit')){ if (tt.hasClass('tree-expanded')){ tt.removeClass('tree-expanded-hover'); } else { tt.removeClass('tree-collapsed-hover'); } } e.stopPropagation(); }).bind('click', function(e){ var tt = $(e.target); var node = tt.closest('div.tree-node'); if (!node.length){return;} if (tt.hasClass('tree-hit')){ toggleNode(target, node[0]); return false; } else if (tt.hasClass('tree-checkbox')){ // checkNode(target, node[0], !tt.hasClass('tree-checkbox1')); checkNode(target, node[0]); return false; } else { selectNode(target, node[0]); opts.onClick.call(target, getNode(target, node[0])); } e.stopPropagation(); }).bind('dblclick', function(e){ var node = $(e.target).closest('div.tree-node'); if (!node.length){return;} selectNode(target, node[0]); opts.onDblClick.call(target, getNode(target, node[0])); e.stopPropagation(); }).bind('contextmenu', function(e){ var node = $(e.target).closest('div.tree-node'); if (!node.length){return;} opts.onContextMenu.call(target, e, getNode(target, node[0])); e.stopPropagation(); }); } function disableDnd(target){ var opts = $.data(target, 'tree').options; opts.dnd = false; var nodes = $(target).find('div.tree-node'); nodes.draggable('disable'); nodes.css('cursor', 'pointer'); } function enableDnd(target){ var state = $.data(target, 'tree'); var opts = state.options; var tree = state.tree; state.disabledNodes = []; opts.dnd = true; tree.find('div.tree-node').draggable({ disabled: false, revert: true, cursor: 'pointer', proxy: function(source){ var p = $('
    ').appendTo('body'); p.html(' '+$(source).find('.tree-title').html()); p.hide(); return p; }, deltaX: 15, deltaY: 15, onBeforeDrag: function(e){ if (opts.onBeforeDrag.call(target, getNode(target, this)) == false){return false} if ($(e.target).hasClass('tree-hit') || $(e.target).hasClass('tree-checkbox')){return false;} if (e.which != 1){return false;} // $(this).next('ul').find('div.tree-node').droppable({accept:'no-accept'}); // the child node can't be dropped var indent = $(this).find('span.tree-indent'); if (indent.length){ e.data.offsetWidth -= indent.length*indent.width(); } }, onStartDrag: function(e){ // disable the droppable of child nodes $(this).next('ul').find('div.tree-node').each(function(){ $(this).droppable('disable'); state.disabledNodes.push(this); }); $(this).draggable('proxy').css({ left:-10000, top:-10000 }); opts.onStartDrag.call(target, getNode(target, this)); var node = getNode(target, this); if (node.id == undefined){ node.id = 'easyui_tree_node_id_temp'; updateNode(target, node); } state.draggingNodeId = node.id; // store the dragging node id }, onDrag: function(e){ var x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY; var d = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); if (d>3){ // when drag a little distance, show the proxy object $(this).draggable('proxy').show(); } this.pageY = e.pageY; }, onStopDrag: function(){ // $(this).next('ul').find('div.tree-node').droppable({accept:'div.tree-node'}); // restore the accept property of child nodes for(var i=0; i top + (bottom - top) / 2){ if (bottom - pageY < 5){ $(this).addClass('tree-node-bottom'); } else { $(this).addClass('tree-node-append'); } } else { if (pageY - top < 5){ $(this).addClass('tree-node-top'); } else { $(this).addClass('tree-node-append'); } } if (opts.onDragOver.call(target, this, getSourceData(source)) == false){ allowDrop(source, false); $(this).removeClass('tree-node-append tree-node-top tree-node-bottom'); $(this).droppable('disable'); state.disabledNodes.push(this); } }, onDragLeave: function(e, source){ allowDrop(source, false); $(this).removeClass('tree-node-append tree-node-top tree-node-bottom'); opts.onDragLeave.call(target, this, getSourceData(source)); }, onDrop: function(e, source){ var dest = this; var action, point; if ($(this).hasClass('tree-node-append')){ action = append; point = 'append'; } else { action = insert; point = $(this).hasClass('tree-node-top') ? 'top' : 'bottom'; } if (opts.onBeforeDrop.call(target, dest, getSourceData(source), point) == false){ $(this).removeClass('tree-node-append tree-node-top tree-node-bottom'); return; } action(source, dest, point); $(this).removeClass('tree-node-append tree-node-top tree-node-bottom'); } }); function getSourceData(source, pop){ return $(source).closest('ul.tree').tree(pop?'pop':'getData', source); } function allowDrop(source, allowed){ var icon = $(source).draggable('proxy').find('span.tree-dnd-icon'); icon.removeClass('tree-dnd-yes tree-dnd-no').addClass(allowed ? 'tree-dnd-yes' : 'tree-dnd-no'); } function append(source, dest){ if (getNode(target, dest).state == 'closed'){ expandNode(target, dest, function(){ doAppend(); }); } else { doAppend(); } function doAppend(){ var node = getSourceData(source, true); $(target).tree('append', { parent: dest, data: [node] }); opts.onDrop.call(target, dest, node, 'append'); } } function insert(source, dest, point){ var param = {}; if (point == 'top'){ param.before = dest; } else { param.after = dest; } var node = getSourceData(source, true); param.data = node; $(target).tree('insert', param); opts.onDrop.call(target, dest, node, point); } } function checkNode(target, nodeEl, checked, nocallback){ var state = $.data(target, 'tree'); var opts = state.options; if (!opts.checkbox) {return;} var nodedata = getNode(target, nodeEl); if (!nodedata.checkState){return;} var ck = $(nodeEl).find('.tree-checkbox'); if (checked == undefined){ if (ck.hasClass('tree-checkbox1')){ checked = false; } else if (ck.hasClass('tree-checkbox0')){ checked = true; } else { if (nodedata._checked == undefined){ nodedata._checked = $(nodeEl).find('.tree-checkbox').hasClass('tree-checkbox1'); } checked = !nodedata._checked; } } nodedata._checked = checked; if (checked){ if (ck.hasClass('tree-checkbox1')){return;} } else { if (ck.hasClass('tree-checkbox0')){return;} } if (!nocallback){ if (opts.onBeforeCheck.call(target, nodedata, checked) == false){return;} } if (opts.cascadeCheck){ setChildCheckbox(target, nodedata, checked); setParentCheckbox(target, nodedata); } else { setCheckedFlag(target, nodedata, checked?'1':'0'); } if (!nocallback){ opts.onCheck.call(target, nodedata, checked); } } function setChildCheckbox(target, nodedata, checked){ var opts = $.data(target, 'tree').options; var flag = checked ? 1 : 0; setCheckedFlag(target, nodedata, flag); if (opts.deepCheck){ $.easyui.forEach(nodedata.children||[], true, function(n){ setCheckedFlag(target, n, flag); }); } else { var nodes = []; if (nodedata.children && nodedata.children.length){ nodes.push(nodedata); } $.easyui.forEach(nodedata.children||[], true, function(n){ if (!n.hidden){ setCheckedFlag(target, n, flag); if (n.children && n.children.length){ nodes.push(n); } } }); for(var i=nodes.length-1; i>=0; i--){ var node = nodes[i]; setCheckedFlag(target, node, calcCheckFlag(node)) } } } function setCheckedFlag(target, nodedata, flag){ var opts = $.data(target, 'tree').options; if (!nodedata.checkState || flag==undefined){return;} if (nodedata.hidden && !opts.deepCheck){return;} var ck = $('#'+nodedata.domId).find('.tree-checkbox'); nodedata.checkState = ['unchecked','checked','indeterminate'][flag]; nodedata.checked = (nodedata.checkState=='checked'); ck.removeClass('tree-checkbox0 tree-checkbox1 tree-checkbox2'); ck.addClass('tree-checkbox' + flag); } function setParentCheckbox(target, nodedata){ var pd = getParentNode(target, $('#'+nodedata.domId)[0]); if (pd){ setCheckedFlag(target, pd, calcCheckFlag(pd)); setParentCheckbox(target, pd); } } function calcCheckFlag(row){ var c0 = 0; var c1 = 0; var len = 0; $.easyui.forEach(row.children||[], false, function(r){ if (r.checkState){ len ++; if (r.checkState == 'checked'){ c1 ++; } else if (r.checkState == 'unchecked'){ c0 ++; } } }); if (len == 0){return undefined;} var flag = 0; if (c0 == len){ flag = 0; } else if (c1 == len){ flag = 1; } else { flag = 2; } return flag; } /** * when remove node, adjust its parent node check status. */ function adjustCheck(target, nodeEl){ var opts = $.data(target, 'tree').options; if (!opts.checkbox){return;} var node = $(nodeEl); var ck = node.find('.tree-checkbox'); var nodedata = getNode(target, nodeEl); if (opts.view.hasCheckbox(target, nodedata)){ if (!ck.length){ nodedata.checkState = nodedata.checkState || 'unchecked'; $('').insertBefore(node.find('.tree-title')); } if (nodedata.checkState == 'checked'){ checkNode(target, nodeEl, true, true); } else if (nodedata.checkState == 'unchecked'){ checkNode(target, nodeEl, false, true); } else { var flag = calcCheckFlag(nodedata); if (flag === 0){ checkNode(target, nodeEl, false, true); } else if (flag === 1){ checkNode(target, nodeEl, true, true); } } } else { ck.remove(); nodedata.checkState = undefined; nodedata.checked = undefined; setParentCheckbox(target, nodedata); } } /** * load tree data to
      tag * ul: the
        dom element * data: array, the tree node data * append: defines if to append data */ function loadData(target, ul, data, append, nocallback){ var state = $.data(target, 'tree'); var opts = state.options; var parent = $(ul).prevAll('div.tree-node:first'); data = opts.loadFilter.call(target, data, parent[0]); var pnode = findNodeBy(target, 'domId', parent.attr('id')); if (!append){ pnode ? pnode.children = data : state.data = data; $(ul).empty(); } else { if (pnode){ pnode.children ? pnode.children = pnode.children.concat(data) : pnode.children = data; } else { state.data = state.data.concat(data); } } opts.view.render.call(opts.view, target, ul, data); if (opts.dnd){enableDnd(target);} if (pnode){updateNode(target, pnode);} for(var i=0; i 1){ $(roots[0].target).addClass('tree-root-first'); } else if (roots.length == 1){ $(roots[0].target).addClass('tree-root-one'); } } $(ul).children('li').each(function(){ var node = $(this).children('div.tree-node'); var ul = node.next('ul'); if (ul.length){ if ($(this).next().length){ _line(node); } showLines(target, ul, called); } else { _join(node); } }); var lastNode = $(ul).children('li:last').children('div.tree-node').addClass('tree-node-last'); lastNode.children('span.tree-join').removeClass('tree-join').addClass('tree-joinbottom'); function _join(node, hasNext){ var icon = node.find('span.tree-icon'); icon.prev('span.tree-indent').addClass('tree-join'); } function _line(node){ var depth = node.find('span.tree-indent, span.tree-hit').length; node.next().find('div.tree-node').each(function(){ $(this).children('span:eq('+(depth-1)+')').addClass('tree-line'); }); } } /** * request remote data and then load nodes in the
          tag. * ul: the
            dom element * param: request parameter */ function request(target, ul, param, callback){ var opts = $.data(target, 'tree').options; param = $.extend({}, opts.queryParams, param||{}); // param = param || {}; var nodedata = null; if (target != ul){ var node = $(ul).prev(); nodedata = getNode(target, node[0]); } if (opts.onBeforeLoad.call(target, nodedata, param) == false) return; var folder = $(ul).prev().children('span.tree-folder'); folder.addClass('tree-loading'); var result = opts.loader.call(target, param, function(data){ folder.removeClass('tree-loading'); loadData(target, ul, data); if (callback){ callback(); } }, function(){ folder.removeClass('tree-loading'); opts.onLoadError.apply(target, arguments); if (callback){ callback(); } }); if (result == false){ folder.removeClass('tree-loading'); } } function expandNode(target, nodeEl, callback){ var opts = $.data(target, 'tree').options; var hit = $(nodeEl).children('span.tree-hit'); if (hit.length == 0) return; // is a leaf node if (hit.hasClass('tree-expanded')) return; // has expanded var node = getNode(target, nodeEl); if (opts.onBeforeExpand.call(target, node) == false) return; hit.removeClass('tree-collapsed tree-collapsed-hover').addClass('tree-expanded'); hit.next().addClass('tree-folder-open'); var ul = $(nodeEl).next(); if (ul.length){ if (opts.animate){ ul.slideDown('normal', function(){ node.state = 'open'; opts.onExpand.call(target, node); if (callback) callback(); }); } else { ul.css('display','block'); node.state = 'open'; opts.onExpand.call(target, node); if (callback) callback(); } } else { var subul = $('
              ').insertAfter(nodeEl); // request children nodes data request(target, subul[0], {id:node.id}, function(){ if (subul.is(':empty')){ subul.remove(); // if load children data fail, remove the children node container } if (opts.animate){ subul.slideDown('normal', function(){ node.state = 'open'; opts.onExpand.call(target, node); if (callback) callback(); }); } else { subul.css('display','block'); node.state = 'open'; opts.onExpand.call(target, node); if (callback) callback(); } }); } } function collapseNode(target, nodeEl){ var opts = $.data(target, 'tree').options; var hit = $(nodeEl).children('span.tree-hit'); if (hit.length == 0) return; // is a leaf node if (hit.hasClass('tree-collapsed')) return; // has collapsed var node = getNode(target, nodeEl); if (opts.onBeforeCollapse.call(target, node) == false) return; hit.removeClass('tree-expanded tree-expanded-hover').addClass('tree-collapsed'); hit.next().removeClass('tree-folder-open'); var ul = $(nodeEl).next(); if (opts.animate){ ul.slideUp('normal', function(){ node.state = 'closed'; opts.onCollapse.call(target, node); }); } else { ul.css('display','none'); node.state = 'closed'; opts.onCollapse.call(target, node); } } function toggleNode(target, nodeEl){ var hit = $(nodeEl).children('span.tree-hit'); if (hit.length == 0) return; // is a leaf node if (hit.hasClass('tree-expanded')){ collapseNode(target, nodeEl); } else { expandNode(target, nodeEl); } } function expandAllNode(target, nodeEl){ var nodes = getChildren(target, nodeEl); if (nodeEl){ nodes.unshift(getNode(target, nodeEl)); } for(var i=0; i ctop + c.outerHeight() - 18){ c.scrollTop(c.scrollTop() + ntop + n.outerHeight() - ctop - c.outerHeight() + 18); } } else { c.scrollTop(ntop); } } function collapseAllNode(target, nodeEl){ var nodes = getChildren(target, nodeEl); if (nodeEl){ nodes.unshift(getNode(target, nodeEl)); } for(var i=0; i').insertBefore(nodeIcon); if (hit.prev().length){ hit.prev().remove(); } } ul = node.next(); if (!ul.length){ ul = $('
                ').insertAfter(node); } } loadData(target, ul[0], data, true, true); // adjustCheck(target, ul.prev()); } /** * insert node to before or after specified node * param has the following properties: * before: DOM object, the node to insert before * after: DOM object, the node to insert after * data: object, the node data */ function insertNode(target, param){ var ref = param.before || param.after; var pnode = getParentNode(target, ref); var data = param.data; if (!data){return} data = $.isArray(data) ? data : [data]; if (!data.length){return} appendNodes(target, { parent: (pnode ? pnode.target : null), data: data }); //adjust the sequence of nodes var pdata = pnode ? pnode.children : $(target).tree('getRoots'); for(var i=0; i=0; j--){ pdata.splice((param.before ? i : (i+1)), 0, data[j]); } pdata.splice(pdata.length-data.length, data.length); break; } } var li = $(); for(var i=0; i').prependTo(node); node.next().remove(); } updateNode(target, parent); } showLines(target, target); function del(nodeEl){ var id = $(nodeEl).attr('id'); var parent = getParentNode(target, nodeEl); var cc = parent ? parent.children : $.data(target, 'tree').data; for(var i=0; i').appendTo(nt); editor.val(node.text).focus(); editor.width(width + 20); editor._outerHeight(18); editor.bind('click', function(e){ return false; }).bind('mousedown', function(e){ e.stopPropagation(); }).bind('mousemove', function(e){ e.stopPropagation(); }).bind('keydown', function(e){ if (e.keyCode == 13){ // enter endEdit(target, nodeEl); return false; } else if (e.keyCode == 27){ // esc cancelEdit(target, nodeEl); return false; } }).bind('blur', function(e){ e.stopPropagation(); endEdit(target, nodeEl); }); } function endEdit(target, nodeEl){ var opts = $.data(target, 'tree').options; $(nodeEl).css('position', ''); var editor = $(nodeEl).find('input.tree-editor'); var val = editor.val(); editor.remove(); var node = getNode(target, nodeEl); node.text = val; updateNode(target, node); opts.onAfterEdit.call(target, node); } function cancelEdit(target, nodeEl){ var opts = $.data(target, 'tree').options; $(nodeEl).css('position', ''); $(nodeEl).find('input.tree-editor').remove(); var node = getNode(target, nodeEl); updateNode(target, node); opts.onCancelEdit.call(target, node); } function doFilter(target, q){ var state = $.data(target, 'tree'); var opts = state.options; var ids = {}; $.easyui.forEach(state.data, true, function(node){ if (opts.filter.call(target, q, node)){ $('#'+node.domId).removeClass('tree-node-hidden'); ids[node.domId] = 1; node.hidden = false; } else { $('#'+node.domId).addClass('tree-node-hidden'); node.hidden = true; } }); for(var id in ids){ showParents(id); } function showParents(domId){ var p = $(target).tree('getParent', $('#'+domId)[0]); while (p){ $(p.target).removeClass('tree-node-hidden'); p.hidden = false; p = $(target).tree('getParent', p.target); } } } $.fn.tree = function(options, param){ if (typeof options == 'string'){ return $.fn.tree.methods[options](this, param); } var options = options || {}; return this.each(function(){ var state = $.data(this, 'tree'); var opts; if (state){ opts = $.extend(state.options, options); state.options = opts; } else { opts = $.extend({}, $.fn.tree.defaults, $.fn.tree.parseOptions(this), options); $.data(this, 'tree', { options: opts, tree: wrapTree(this), data: [], tmpIds: [] }); var data = $.fn.tree.parseData(this); if (data.length){ loadData(this, this, data); } } bindTreeEvents(this); if (opts.data){ loadData(this, this, $.extend(true,[],opts.data)); } request(this, this); }); }; $.fn.tree.methods = { options: function(jq){ return $.data(jq[0], 'tree').options; }, loadData: function(jq, data){ return jq.each(function(){ loadData(this, this, data); }); }, getNode: function(jq, nodeEl){ // get the single node return getNode(jq[0], nodeEl); }, getData: function(jq, nodeEl){ // get the specified node data, include its children return getData(jq[0], nodeEl); }, reload: function(jq, nodeEl){ return jq.each(function(){ if (nodeEl){ var node = $(nodeEl); var hit = node.children('span.tree-hit'); hit.removeClass('tree-expanded tree-expanded-hover').addClass('tree-collapsed'); node.next().remove(); expandNode(this, nodeEl); } else { $(this).empty(); request(this, this); } }); }, getRoot: function(jq, nodeEl){ // if specify 'nodeEl', return its top parent node, otherwise return the first root node. return getRootNode(jq[0], nodeEl); }, getRoots: function(jq){ return getRootNodes(jq[0]); }, getParent: function(jq, nodeEl){ return getParentNode(jq[0], nodeEl); }, getChildren: function(jq, nodeEl){ return getChildren(jq[0], nodeEl); }, getChecked: function(jq, state){ // the state available values are: 'checked','unchecked','indeterminate', default is 'checked'. return getCheckedNode(jq[0], state); }, getSelected: function(jq){ return getSelectedNode(jq[0]); }, isLeaf: function(jq, nodeEl){ return isLeaf(jq[0], nodeEl); }, find: function(jq, id){ return findNode(jq[0], id); }, select: function(jq, nodeEl){ return jq.each(function(){ selectNode(this, nodeEl); }); }, check: function(jq, nodeEl){ return jq.each(function(){ checkNode(this, nodeEl, true); }); }, uncheck: function(jq, nodeEl){ return jq.each(function(){ checkNode(this, nodeEl, false); }); }, collapse: function(jq, nodeEl){ return jq.each(function(){ collapseNode(this, nodeEl); }); }, expand: function(jq, nodeEl){ return jq.each(function(){ expandNode(this, nodeEl); }); }, collapseAll: function(jq, nodeEl){ return jq.each(function(){ collapseAllNode(this, nodeEl); }); }, expandAll: function(jq, nodeEl){ return jq.each(function(){ expandAllNode(this, nodeEl); }); }, expandTo: function(jq, nodeEl){ return jq.each(function(){ expandToNode(this, nodeEl); }); }, scrollTo: function(jq, nodeEl){ return jq.each(function(){ scrollToNode(this, nodeEl); }); }, toggle: function(jq, nodeEl){ return jq.each(function(){ toggleNode(this, nodeEl); }); }, append: function(jq, param){ return jq.each(function(){ appendNodes(this, param); }); }, insert: function(jq, param){ return jq.each(function(){ insertNode(this, param); }); }, remove: function(jq, nodeEl){ return jq.each(function(){ removeNode(this, nodeEl); }); }, pop: function(jq, nodeEl){ var node = jq.tree('getData', nodeEl); jq.tree('remove', nodeEl); return node; }, update: function(jq, param){ return jq.each(function(){ updateNode(this, $.extend({}, param, { checkState: param.checked ? 'checked' : (param.checked===false ? 'unchecked' : undefined) })); }); }, enableDnd: function(jq){ return jq.each(function(){ enableDnd(this); }); }, disableDnd: function(jq){ return jq.each(function(){ disableDnd(this); }); }, beginEdit: function(jq, nodeEl){ return jq.each(function(){ beginEdit(this, nodeEl); }); }, endEdit: function(jq, nodeEl){ return jq.each(function(){ endEdit(this, nodeEl); }); }, cancelEdit: function(jq, nodeEl){ return jq.each(function(){ cancelEdit(this, nodeEl); }); }, doFilter: function(jq, q){ return jq.each(function(){ doFilter(this, q); }); } }; $.fn.tree.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, [ 'url','method', {checkbox:'boolean',cascadeCheck:'boolean',onlyLeafCheck:'boolean'}, {animate:'boolean',lines:'boolean',dnd:'boolean'} ])); }; $.fn.tree.parseData = function(target){ var data = []; _parseNode(data, $(target)); return data; function _parseNode(aa, tree){ tree.children('li').each(function(){ var node = $(this); var item = $.extend({}, $.parser.parseOptions(this, ['id','iconCls','state']), { checked: (node.attr('checked') ? true : undefined) }); item.text = node.children('span').html(); if (!item.text){ item.text = node.html(); } var subTree = node.children('ul'); if (subTree.length){ item.children = []; _parseNode(item.children, subTree); } aa.push(item); }); } }; var nodeIndex = 1; var defaultView = { render: function(target, ul, data) { var state = $.data(target, 'tree'); var opts = state.options; var pnode = $(ul).prev('.tree-node'); var pdata = pnode.length ? $(target).tree('getNode', pnode[0]) : null; var depth = pnode.find('span.tree-indent, span.tree-hit').length; var cc = getTreeData.call(this, depth, data); $(ul).append(cc.join('')); function getTreeData(depth, children){ var cc = []; for(var i=0; i'); cc.push('
                '); for(var j=0; j'); } if (item.state == 'closed'){ cc.push(''); cc.push(''); } else { if (item.children && item.children.length){ cc.push(''); cc.push(''); } else { cc.push(''); cc.push(''); } } if (this.hasCheckbox(target, item)){ var flag = 0; if (pdata && pdata.checkState=='checked' && opts.cascadeCheck){ flag = 1; item.checked = true; } else if (item.checked){ $.easyui.addArrayItem(state.tmpIds, item.domId); } item.checkState = flag ? 'checked' : 'unchecked'; cc.push(''); } else { item.checkState = undefined; item.checked = undefined; } cc.push('' + opts.formatter.call(target, item) + ''); cc.push('
                '); if (item.children && item.children.length){ var tmp = getTreeData.call(this, depth+1, item.children); cc.push('
                  '); cc = cc.concat(tmp); cc.push('
                '); } cc.push(''); } return cc; } }, hasCheckbox: function(target, item){ var state = $.data(target, 'tree'); var opts = state.options; if (opts.checkbox){ if ($.isFunction(opts.checkbox)){ if (opts.checkbox.call(target, item)){ return true; } else { return false; } } else if (opts.onlyLeafCheck){ if (item.state == 'open' && !(item.children && item.children.length)){ return true; } } else { return true; } } return false; } }; $.fn.tree.defaults = { url: null, method: 'post', animate: false, checkbox: false, cascadeCheck: true, onlyLeafCheck: false, lines: false, dnd: false, data: null, queryParams: {}, formatter: function(node){ return node.text; }, filter: function(q, node){ var qq = []; $.map($.isArray(q) ? q : [q], function(q){ q = $.trim(q); if (q){ qq.push(q); } }); for(var i=0; i= 0){ return true; } } return !qq.length; }, loader: function(param, success, error){ var opts = $(this).tree('options'); if (!opts.url) return false; $.ajax({ type: opts.method, url: opts.url, data: param, dataType: 'json', success: function(data){ success(data); }, error: function(){ error.apply(this, arguments); } }); }, loadFilter: function(data, parent){ return data; }, view: defaultView, onBeforeLoad: function(node, param){}, onLoadSuccess: function(node, data){}, onLoadError: function(){}, onClick: function(node){}, // node: id,text,checked,attributes,target onDblClick: function(node){}, // node: id,text,checked,attributes,target onBeforeExpand: function(node){}, onExpand: function(node){}, onBeforeCollapse: function(node){}, onCollapse: function(node){}, onBeforeCheck: function(node, checked){}, onCheck: function(node, checked){}, onBeforeSelect: function(node){}, onSelect: function(node){}, onContextMenu: function(e, node){}, onBeforeDrag: function(node){}, // return false to deny drag onStartDrag: function(node){}, onStopDrag: function(node){}, onDragEnter: function(target, source){}, // return false to deny drop onDragOver: function(target, source){}, // return false to deny drop onDragLeave: function(target, source){}, onBeforeDrop: function(target, source, point){}, onDrop: function(target, source, point){}, // point:'append','top','bottom' onBeforeEdit: function(node){}, onAfterEdit: function(node){}, onCancelEdit: function(node){} }; })(jQuery); /** * progressbar - EasyUI for jQuery * * Dependencies: * none * */ (function($){ function init(target){ $(target).addClass('progressbar'); $(target).html('
                '); $(target).bind('_resize', function(e,force){ if ($(this).hasClass('easyui-fluid') || force){ setSize(target); } return false; }); return $(target); } function setSize(target,width){ var opts = $.data(target, 'progressbar').options; var bar = $.data(target, 'progressbar').bar; if (width) opts.width = width; bar._size(opts); bar.find('div.progressbar-text').css('width', bar.width()); bar.find('div.progressbar-text,div.progressbar-value').css({ height: bar.height()+'px', lineHeight: bar.height()+'px' }); } $.fn.progressbar = function(options, param){ if (typeof options == 'string'){ var method = $.fn.progressbar.methods[options]; if (method){ return method(this, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'progressbar'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'progressbar', { options: $.extend({}, $.fn.progressbar.defaults, $.fn.progressbar.parseOptions(this), options), bar: init(this) }); } $(this).progressbar('setValue', state.options.value); setSize(this); }); }; $.fn.progressbar.methods = { options: function(jq){ return $.data(jq[0], 'progressbar').options; }, resize: function(jq, width){ return jq.each(function(){ setSize(this, width); }); }, getValue: function(jq){ return $.data(jq[0], 'progressbar').options.value; }, setValue: function(jq, value){ if (value < 0) value = 0; if (value > 100) value = 100; return jq.each(function(){ var opts = $.data(this, 'progressbar').options; var text = opts.text.replace(/{value}/, value); var oldValue = opts.value; opts.value = value; $(this).find('div.progressbar-value').width(value+'%'); $(this).find('div.progressbar-text').html(text); if (oldValue != value){ opts.onChange.call(this, value, oldValue); } }); } }; $.fn.progressbar.parseOptions = function(target){ return $.extend({}, $.parser.parseOptions(target, ['width','height','text',{value:'number'}])); }; $.fn.progressbar.defaults = { width: 'auto', height: 22, value: 0, // percentage value text: '{value}%', onChange:function(newValue,oldValue){} }; })(jQuery); /** * tooltip - EasyUI for jQuery * */ (function($){ function init(target){ $(target).addClass('tooltip-f'); } function bindEvents(target){ var opts = $.data(target, 'tooltip').options; $(target).unbind('.tooltip').bind(opts.showEvent+'.tooltip', function(e){ // showTip(target, e); $(target).tooltip('show', e); }).bind(opts.hideEvent+'.tooltip', function(e){ // hideTip(target, e); $(target).tooltip('hide', e); }).bind('mousemove.tooltip', function(e){ if (opts.trackMouse){ opts.trackMouseX = e.pageX; opts.trackMouseY = e.pageY; $(target).tooltip('reposition'); } }); } function clearTimeouts(target){ var state = $.data(target, 'tooltip'); if (state.showTimer){ clearTimeout(state.showTimer); state.showTimer = null; } if (state.hideTimer){ clearTimeout(state.hideTimer); state.hideTimer = null; } } function reposition(target){ var state = $.data(target, 'tooltip'); if (!state || !state.tip){return} var opts = state.options; var tip = state.tip; var pos = {left:-100000,top:-100000}; if ($(target).is(':visible')){ pos = getPosition(opts.position); if (opts.position == 'top' && pos.top < 0){ pos = getPosition('bottom'); } else if ((opts.position == 'bottom') && (pos.top + tip._outerHeight() > $(window)._outerHeight() + $(document).scrollTop())){ pos = getPosition('top'); } if (pos.left < 0){ if (opts.position == 'left'){ pos = getPosition('right'); } else { $(target).tooltip('arrow').css('left', tip._outerWidth()/2 + pos.left); pos.left = 0; } } else if (pos.left + tip._outerWidth() > $(window)._outerWidth() + $(document)._scrollLeft()){ if (opts.position == 'right'){ pos = getPosition('left'); } else { var left = pos.left; pos.left = $(window)._outerWidth() + $(document)._scrollLeft() - tip._outerWidth(); $(target).tooltip('arrow').css('left', tip._outerWidth()/2 - (pos.left-left)); } } } tip.css({ left: pos.left, top: pos.top, zIndex: (opts.zIndex!=undefined ? opts.zIndex : ($.fn.window ? $.fn.window.defaults.zIndex++ : '')) }); opts.onPosition.call(target, pos.left, pos.top); function getPosition(position){ opts.position = position || 'bottom'; tip.removeClass('tooltip-top tooltip-bottom tooltip-left tooltip-right').addClass('tooltip-'+opts.position); var left,top; var deltaX = $.isFunction(opts.deltaX) ? opts.deltaX.call(target, opts.position) : opts.deltaX; var deltaY = $.isFunction(opts.deltaY) ? opts.deltaY.call(target, opts.position) : opts.deltaY; if (opts.trackMouse){ t = $(); left = opts.trackMouseX + deltaX; top = opts.trackMouseY + deltaY; } else { var t = $(target); left = t.offset().left + deltaX; top = t.offset().top + deltaY; } switch(opts.position){ case 'right': left += t._outerWidth() + 12 + (opts.trackMouse?12:0); top -= (tip._outerHeight() - t._outerHeight()) / 2; break; case 'left': left -= tip._outerWidth() + 12 + (opts.trackMouse?12:0); top -= (tip._outerHeight() - t._outerHeight()) / 2; break; case 'top': left -= (tip._outerWidth() - t._outerWidth()) / 2; top -= tip._outerHeight() + 12 + (opts.trackMouse?12:0); break; case 'bottom': left -= (tip._outerWidth() - t._outerWidth()) / 2; top += t._outerHeight() + 12 + (opts.trackMouse?12:0); break; } return { left: left, top: top } } } function showTip(target, e){ var state = $.data(target, 'tooltip'); var opts = state.options; var tip = state.tip; if (!tip){ tip = $( '
                ' + '
                ' + '
                ' + '
                ' + '
                ' ).appendTo('body'); state.tip = tip; updateTip(target); } // tip.removeClass('tooltip-top tooltip-bottom tooltip-left tooltip-right').addClass('tooltip-'+opts.position); clearTimeouts(target); state.showTimer = setTimeout(function(){ $(target).tooltip('reposition'); tip.show(); opts.onShow.call(target, e); var arrowOuter = tip.children('.tooltip-arrow-outer'); var arrow = tip.children('.tooltip-arrow'); var bc = 'border-'+opts.position+'-color'; arrowOuter.add(arrow).css({ borderTopColor:'', borderBottomColor:'', borderLeftColor:'', borderRightColor:'' }); arrowOuter.css(bc, tip.css(bc)); arrow.css(bc, tip.css('backgroundColor')); }, opts.showDelay); } function hideTip(target, e){ var state = $.data(target, 'tooltip'); if (state && state.tip){ clearTimeouts(target); state.hideTimer = setTimeout(function(){ state.tip.hide(); state.options.onHide.call(target, e); }, state.options.hideDelay); } } function updateTip(target, content){ var state = $.data(target, 'tooltip'); var opts = state.options; if (content){opts.content = content;} if (!state.tip){return;} var cc = typeof opts.content == 'function' ? opts.content.call(target) : opts.content; state.tip.children('.tooltip-content').html(cc); opts.onUpdate.call(target, cc); } function destroyTip(target){ var state = $.data(target, 'tooltip'); if (state){ clearTimeouts(target); var opts = state.options; if (state.tip){state.tip.remove();} if (opts._title){ $(target).attr('title', opts._title); } $.removeData(target, 'tooltip'); $(target).unbind('.tooltip').removeClass('tooltip-f'); opts.onDestroy.call(target); } } $.fn.tooltip = function(options, param){ if (typeof options == 'string'){ return $.fn.tooltip.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'tooltip'); if (state){ $.extend(state.options, options); } else { $.data(this, 'tooltip', { options: $.extend({}, $.fn.tooltip.defaults, $.fn.tooltip.parseOptions(this), options) }); init(this); } bindEvents(this); updateTip(this); }); }; $.fn.tooltip.methods = { options: function(jq){ return $.data(jq[0], 'tooltip').options; }, tip: function(jq){ return $.data(jq[0], 'tooltip').tip; }, arrow: function(jq){ return jq.tooltip('tip').children('.tooltip-arrow-outer,.tooltip-arrow'); }, show: function(jq, e){ return jq.each(function(){ showTip(this, e); }); }, hide: function(jq, e){ return jq.each(function(){ hideTip(this, e); }); }, update: function(jq, content){ return jq.each(function(){ updateTip(this, content); }); }, reposition: function(jq){ return jq.each(function(){ reposition(this); }); }, destroy: function(jq){ return jq.each(function(){ destroyTip(this); }); } }; $.fn.tooltip.parseOptions = function(target){ var t = $(target); var opts = $.extend({}, $.parser.parseOptions(target, [ 'position','showEvent','hideEvent','content', {trackMouse:'boolean',deltaX:'number',deltaY:'number',showDelay:'number',hideDelay:'number'} ]), { _title: t.attr('title') }); t.attr('title', ''); if (!opts.content){ opts.content = opts._title; } return opts; }; $.fn.tooltip.defaults = { position: 'bottom', // possible values are: 'left','right','top','bottom' content: null, trackMouse: false, deltaX: 0, deltaY: 0, showEvent: 'mouseenter', hideEvent: 'mouseleave', showDelay: 200, hideDelay: 100, onShow: function(e){}, onHide: function(e){}, onUpdate: function(content){}, onPosition: function(left,top){}, onDestroy: function(){} }; })(jQuery); /** * panel - EasyUI for jQuery * */ (function($){ $.fn._remove = function(){ return this.each(function(){ $(this).remove(); try{ this.outerHTML = ''; } catch(err){} }); } function removeNode(node){ node._remove(); } function setSize(target, param){ var state = $.data(target, 'panel'); var opts = state.options; var panel = state.panel; var pheader = panel.children('.panel-header'); var pbody = panel.children('.panel-body'); var pfooter = panel.children('.panel-footer'); var isHorizontal = (opts.halign=='left' || opts.halign=='right'); if (param){ $.extend(opts, { width: param.width, height: param.height, minWidth: param.minWidth, maxWidth: param.maxWidth, minHeight: param.minHeight, maxHeight: param.maxHeight, left: param.left, top: param.top }); opts.hasResized = false; } var oldWidth = panel.outerWidth(); var oldHeight = panel.outerHeight(); panel._size(opts); var newWidth = panel.outerWidth(); var newHeight = panel.outerHeight(); if (opts.hasResized && (oldWidth == newWidth && oldHeight == newHeight)){ return; } opts.hasResized = true; // pheader.add(pbody)._outerWidth(panel.width()); if (!isHorizontal){ pheader._outerWidth(panel.width()); } pbody._outerWidth(panel.width()); if (!isNaN(parseInt(opts.height))){ if (isHorizontal){ if (opts.header){ var headerWidth = $(opts.header)._outerWidth(); } else { pheader.css('width',''); var headerWidth = pheader._outerWidth(); } var ptitle = pheader.find('.panel-title'); headerWidth += Math.min(ptitle._outerWidth(),ptitle._outerHeight()); var headerHeight = panel.height(); pheader._outerWidth(headerWidth)._outerHeight(headerHeight); ptitle._outerWidth(pheader.height()); pbody._outerWidth(panel.width()-headerWidth-pfooter._outerWidth())._outerHeight(headerHeight); pfooter._outerHeight(headerHeight); pbody.css({left:'',right:''}).css(opts.halign, (pheader.position()[opts.halign]+headerWidth)+'px'); opts.panelCssWidth = panel.css('width'); if (opts.collapsed){ panel._outerWidth(headerWidth+pfooter._outerWidth()); } } else { // pheader.css('height',''); pbody._outerHeight(panel.height() - pheader._outerHeight() - pfooter._outerHeight()); } } else { pbody.css('height', ''); var min = $.parser.parseValue('minHeight', opts.minHeight, panel.parent()); var max = $.parser.parseValue('maxHeight', opts.maxHeight, panel.parent()); var distance = pheader._outerHeight() + pfooter._outerHeight() + panel._outerHeight() - panel.height(); pbody._size('minHeight', min ? (min - distance) : ''); pbody._size('maxHeight', max ? (max - distance) : ''); } panel.css({ height: (isHorizontal?undefined:''), minHeight: '', maxHeight: '', left: opts.left, top: opts.top }); opts.onResize.apply(target, [opts.width, opts.height]); $(target).panel('doLayout'); // $(target).find('>div:visible,>form>div:visible').triggerHandler('_resize'); } function movePanel(target, param){ var state = $.data(target, 'panel'); var opts = state.options; var panel = state.panel; if (param){ if (param.left != null) opts.left = param.left; if (param.top != null) opts.top = param.top; } panel.css({ left: opts.left, top: opts.top }); panel.find('.tooltip-f').each(function(){ $(this).tooltip('reposition'); }); opts.onMove.apply(target, [opts.left, opts.top]); } function wrapPanel(target){ $(target).addClass('panel-body')._size('clear'); var panel = $('
                ').insertBefore(target); panel[0].appendChild(target); panel.bind('_resize', function(e, force){ if ($(this).hasClass('easyui-fluid') || force){ setSize(target,{}); } return false; }); return panel; } function createPanel(target){ var state = $.data(target, 'panel'); var opts = state.options; var panel = state.panel; panel.css(opts.style); panel.addClass(opts.cls); panel.removeClass('panel-hleft panel-hright').addClass('panel-h'+opts.halign); _addHeader(); _addFooter(); var header = $(target).panel('header'); var body = $(target).panel('body'); var footer = $(target).siblings('.panel-footer'); if (opts.border){ header.removeClass('panel-header-noborder'); body.removeClass('panel-body-noborder'); footer.removeClass('panel-footer-noborder'); } else { header.addClass('panel-header-noborder'); body.addClass('panel-body-noborder'); footer.addClass('panel-footer-noborder'); } header.addClass(opts.headerCls); body.addClass(opts.bodyCls); $(target).attr('id', opts.id || ''); if (opts.content){ $(target).panel('clear'); $(target).html(opts.content); $.parser.parse($(target)); } function _addHeader(){ if (opts.noheader || (!opts.title && !opts.header)){ removeNode(panel.children('.panel-header')); panel.children('.panel-body').addClass('panel-body-noheader'); } else { if (opts.header){ $(opts.header).addClass('panel-header').prependTo(panel); } else { var header = panel.children('.panel-header'); if (!header.length){ header = $('
                ').prependTo(panel); } if (!$.isArray(opts.tools)){ header.find('div.panel-tool .panel-tool-a').appendTo(opts.tools); } header.empty(); var htitle = $('
                ').html(opts.title).appendTo(header); if (opts.iconCls){ htitle.addClass('panel-with-icon'); $('
                ').addClass(opts.iconCls).appendTo(header); } if (opts.halign=='left' || opts.halign=='right'){ htitle.addClass('panel-title-'+opts.titleDirection); } var tool = $('
                ').appendTo(header); tool.bind('click', function(e){ e.stopPropagation(); }); if (opts.tools){ if ($.isArray(opts.tools)){ $.map(opts.tools, function(t){ _buildTool(tool, t.iconCls, eval(t.handler)); }); } else { $(opts.tools).children().each(function(){ $(this).addClass($(this).attr('iconCls')).addClass('panel-tool-a').appendTo(tool); }); } } if (opts.collapsible){ _buildTool(tool, 'panel-tool-collapse', function(){ if (opts.collapsed == true){ expandPanel(target, true); } else { collapsePanel(target, true); } }); } if (opts.minimizable){ _buildTool(tool, 'panel-tool-min', function(){ minimizePanel(target); }); } if (opts.maximizable){ _buildTool(tool, 'panel-tool-max', function(){ if (opts.maximized == true){ restorePanel(target); } else { maximizePanel(target); } }); } if (opts.closable){ _buildTool(tool, 'panel-tool-close', function(){ closePanel(target); }); } } panel.children('div.panel-body').removeClass('panel-body-noheader'); } } function _buildTool(c, icon, handler){ var a = $('').addClass(icon).appendTo(c); a.bind('click', handler); } function _addFooter(){ if (opts.footer){ $(opts.footer).addClass('panel-footer').appendTo(panel); $(target).addClass('panel-body-nobottom'); } else { panel.children('.panel-footer').remove(); $(target).removeClass('panel-body-nobottom'); } } } /** * load content from remote site if the href attribute is defined */ function loadData(target, params){ var state = $.data(target, 'panel'); var opts = state.options; if (param){opts.queryParams = params} if (!opts.href){return;} if (!state.isLoaded || !opts.cache){ var param = $.extend({}, opts.queryParams); if (opts.onBeforeLoad.call(target, param) == false){return} state.isLoaded = false; // $(target).panel('clear'); if (opts.loadingMessage){ $(target).panel('clear'); $(target).html($('
                ').html(opts.loadingMessage)); } opts.loader.call(target, param, function(data){ var content = opts.extractor.call(target, data); $(target).panel('clear'); $(target).html(content); $.parser.parse($(target)); opts.onLoad.apply(target, arguments); state.isLoaded = true; }, function(){ opts.onLoadError.apply(target, arguments); }); } } /** * clear the panel content. */ function clearPanel(target){ var t = $(target); t.find('.combo-f').each(function(){ $(this).combo('destroy'); }); t.find('.m-btn').each(function(){ $(this).menubutton('destroy'); }); t.find('.s-btn').each(function(){ $(this).splitbutton('destroy'); }); t.find('.tooltip-f').each(function(){ $(this).tooltip('destroy'); }); t.children('div').each(function(){ $(this)._size('unfit'); }); t.empty(); } function doLayout(target){ $(target).panel('doLayout', true); // $(target).find('div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible').each(function(){ // $(this).triggerHandler('_resize', [true]); // }); } function openPanel(target, forceOpen){ var state = $.data(target, 'panel'); var opts = state.options; var panel = state.panel; if (forceOpen != true){ if (opts.onBeforeOpen.call(target) == false) return; } panel.stop(true, true); if ($.isFunction(opts.openAnimation)){ opts.openAnimation.call(target, cb); } else { switch(opts.openAnimation){ case 'slide': panel.slideDown(opts.openDuration, cb); break; case 'fade': panel.fadeIn(opts.openDuration, cb); break; case 'show': panel.show(opts.openDuration, cb); break; default: panel.show(); cb(); } } function cb(){ opts.closed = false; opts.minimized = false; var tool = panel.children('.panel-header').find('a.panel-tool-restore'); if (tool.length){ opts.maximized = true; } opts.onOpen.call(target); if (opts.maximized == true) { opts.maximized = false; maximizePanel(target); } if (opts.collapsed == true) { opts.collapsed = false; collapsePanel(target); } if (!opts.collapsed){ if (opts.href && (!state.isLoaded || !opts.cache)){ loadData(target); doLayout(target); opts.doneLayout = true; } } if (!opts.doneLayout){ opts.doneLayout = true; doLayout(target); } } } function closePanel(target, forceClose){ var state = $.data(target, 'panel'); var opts = state.options; var panel = state.panel; if (forceClose != true){ if (opts.onBeforeClose.call(target) == false) return; } panel.find('.tooltip-f').each(function(){ $(this).tooltip('hide'); }); panel.stop(true, true); panel._size('unfit'); if ($.isFunction(opts.closeAnimation)){ opts.closeAnimation.call(target, cb); } else { switch(opts.closeAnimation){ case 'slide': panel.slideUp(opts.closeDuration, cb); break; case 'fade': panel.fadeOut(opts.closeDuration, cb); break; case 'hide': panel.hide(opts.closeDuration, cb); break; default: panel.hide(); cb(); } } function cb(){ opts.closed = true; opts.onClose.call(target); } } function destroyPanel(target, forceDestroy){ var state = $.data(target, 'panel'); var opts = state.options; var panel = state.panel; if (forceDestroy != true){ if (opts.onBeforeDestroy.call(target) == false) return; } $(target).panel('clear').panel('clear', 'footer'); removeNode(panel); opts.onDestroy.call(target); } function collapsePanel(target, animate){ var opts = $.data(target, 'panel').options; var panel = $.data(target, 'panel').panel; var body = panel.children('.panel-body'); var header = panel.children('.panel-header'); var tool = header.find('a.panel-tool-collapse'); if (opts.collapsed == true) return; body.stop(true, true); // stop animation if (opts.onBeforeCollapse.call(target) == false) return; tool.addClass('panel-tool-expand'); if (animate == true){ if (opts.halign=='left' || opts.halign=='right'){ panel.animate({width:header._outerWidth()+panel.children('.panel-footer')._outerWidth()}, function(){ cb(); }); } else { body.slideUp('normal', function(){ cb(); }); } } else { if (opts.halign=='left' || opts.halign=='right'){ panel._outerWidth(header._outerWidth()+panel.children('.panel-footer')._outerWidth()); } cb(); } function cb(){ body.hide(); opts.collapsed = true; opts.onCollapse.call(target); } } function expandPanel(target, animate){ var opts = $.data(target, 'panel').options; var panel = $.data(target, 'panel').panel; var body = panel.children('.panel-body'); var tool = panel.children('.panel-header').find('a.panel-tool-collapse'); if (opts.collapsed == false) return; body.stop(true, true); // stop animation if (opts.onBeforeExpand.call(target) == false) return; tool.removeClass('panel-tool-expand'); if (animate == true){ if (opts.halign=='left' || opts.halign=='right'){ body.show(); panel.animate({width:opts.panelCssWidth}, function(){ cb(); }); } else { body.slideDown('normal', function(){ cb(); }); } } else { if (opts.halign=='left' || opts.halign=='right'){ panel.css('width',opts.panelCssWidth); } cb(); } function cb(){ body.show(); opts.collapsed = false; opts.onExpand.call(target); loadData(target); doLayout(target); } } function maximizePanel(target){ var opts = $.data(target, 'panel').options; var panel = $.data(target, 'panel').panel; var tool = panel.children('.panel-header').find('a.panel-tool-max'); if (opts.maximized == true) return; tool.addClass('panel-tool-restore'); if (!$.data(target, 'panel').original){ $.data(target, 'panel').original = { width: opts.width, height: opts.height, left: opts.left, top: opts.top, fit: opts.fit }; } opts.left = 0; opts.top = 0; opts.fit = true; setSize(target); opts.minimized = false; opts.maximized = true; opts.onMaximize.call(target); } function minimizePanel(target){ var opts = $.data(target, 'panel').options; var panel = $.data(target, 'panel').panel; panel._size('unfit'); panel.hide(); opts.minimized = true; opts.maximized = false; opts.onMinimize.call(target); } function restorePanel(target){ var opts = $.data(target, 'panel').options; var panel = $.data(target, 'panel').panel; var tool = panel.children('.panel-header').find('a.panel-tool-max'); if (opts.maximized == false) return; panel.show(); tool.removeClass('panel-tool-restore'); $.extend(opts, $.data(target, 'panel').original); // var original = $.data(target, 'panel').original; // opts.width = original.width; // opts.height = original.height; // opts.left = original.left; // opts.top = original.top; // opts.fit = original.fit; setSize(target); opts.minimized = false; opts.maximized = false; $.data(target, 'panel').original = null; opts.onRestore.call(target); } function setTitle(target, title){ $.data(target, 'panel').options.title = title; $(target).panel('header').find('div.panel-title').html(title); } var resizeTimer = null; $(window).unbind('.panel').bind('resize.panel', function(){ if (resizeTimer){ clearTimeout(resizeTimer); } resizeTimer = setTimeout(function(){ var layout = $('body.layout'); if (layout.length){ layout.layout('resize'); // $('body').children('.easyui-fluid:visible').trigger('_resize'); $('body').children('.easyui-fluid:visible').each(function(){ $(this).triggerHandler('_resize'); }); } else { $('body').panel('doLayout'); // $('body').children('div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible').triggerHandler('_resize'); } resizeTimer = null; }, 100); }); $.fn.panel = function(options, param){ if (typeof options == 'string'){ return $.fn.panel.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'panel'); var opts; if (state){ opts = $.extend(state.options, options); state.isLoaded = false; } else { opts = $.extend({}, $.fn.panel.defaults, $.fn.panel.parseOptions(this), options); $(this).attr('title', ''); state = $.data(this, 'panel', { options: opts, panel: wrapPanel(this), isLoaded: false }); } createPanel(this); $(this).show(); if (opts.doSize == true){ state.panel.css('display','block'); setSize(this); } if (opts.closed == true || opts.minimized == true){ state.panel.hide(); } else { openPanel(this); } }); }; $.fn.panel.methods = { options: function(jq){ return $.data(jq[0], 'panel').options; }, panel: function(jq){ return $.data(jq[0], 'panel').panel; }, header: function(jq){ return $.data(jq[0], 'panel').panel.children('.panel-header'); }, footer: function(jq){ return jq.panel('panel').children('.panel-footer'); }, body: function(jq){ return $.data(jq[0], 'panel').panel.children('.panel-body'); }, setTitle: function(jq, title){ return jq.each(function(){ setTitle(this, title); }); }, open: function(jq, forceOpen){ return jq.each(function(){ openPanel(this, forceOpen); }); }, close: function(jq, forceClose){ return jq.each(function(){ closePanel(this, forceClose); }); }, destroy: function(jq, forceDestroy){ return jq.each(function(){ destroyPanel(this, forceDestroy); }); }, clear: function(jq, type){ return jq.each(function(){ clearPanel(type=='footer' ? $(this).panel('footer') : this); // clearPanel(this); }); }, refresh: function(jq, href){ return jq.each(function(){ var state = $.data(this, 'panel'); state.isLoaded = false; if (href){ if (typeof href == 'string'){ state.options.href = href; } else { state.options.queryParams = href; } } loadData(this); }); }, resize: function(jq, param){ return jq.each(function(){ setSize(this, param||{}); }); }, doLayout: function(jq, all){ return jq.each(function(){ _layout(this, 'body'); _layout($(this).siblings('.panel-footer')[0], 'footer'); function _layout(target, type){ if (!target){return} var isBody = target == $('body')[0]; var s = $(target).find('div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible,.easyui-fluid:visible').filter(function(index, el){ var p = $(el).parents('.panel-'+type+':first'); return isBody ? p.length==0 : p[0]==target; }); // s.trigger('_resize', [all||false]); s.each(function(){ $(this).triggerHandler('_resize', [all||false]); }); } }); }, move: function(jq, param){ return jq.each(function(){ movePanel(this, param); }); }, maximize: function(jq){ return jq.each(function(){ maximizePanel(this); }); }, minimize: function(jq){ return jq.each(function(){ minimizePanel(this); }); }, restore: function(jq){ return jq.each(function(){ restorePanel(this); }); }, collapse: function(jq, animate){ return jq.each(function(){ collapsePanel(this, animate); }); }, expand: function(jq, animate){ return jq.each(function(){ expandPanel(this, animate); }); } }; $.fn.panel.parseOptions = function(target){ var t = $(target); var hh = t.children('.panel-header,header'); var ff = t.children('.panel-footer,footer'); return $.extend({}, $.parser.parseOptions(target, ['id','width','height','left','top', 'title','iconCls','cls','headerCls','bodyCls','tools','href','method','header','footer','halign','titleDirection', {cache:'boolean',fit:'boolean',border:'boolean',noheader:'boolean'}, {collapsible:'boolean',minimizable:'boolean',maximizable:'boolean'}, {closable:'boolean',collapsed:'boolean',minimized:'boolean',maximized:'boolean',closed:'boolean'}, 'openAnimation','closeAnimation', {openDuration:'number',closeDuration:'number'}, ]), { loadingMessage: (t.attr('loadingMessage')!=undefined ? t.attr('loadingMessage') : undefined), header: (hh.length ? hh.removeClass('panel-header') : undefined), footer: (ff.length ? ff.removeClass('panel-footer') : undefined) }); }; $.fn.panel.defaults = { id: null, title: null, iconCls: null, width: 'auto', height: 'auto', left: null, top: null, cls: null, headerCls: null, bodyCls: null, style: {}, href: null, cache: true, fit: false, border: true, doSize: true, // true to set size and do layout noheader: false, content: null, // the body content if specified halign: 'top', // the header alignment: 'top','left','right' titleDirection: 'down', // up,down collapsible: false, minimizable: false, maximizable: false, closable: false, collapsed: false, minimized: false, maximized: false, closed: false, openAnimation: false, openDuration: 400, closeAnimation: false, closeDuration: 400, // custom tools, every tool can contain two properties: iconCls and handler // iconCls is a icon CSS class // handler is a function, which will be run when tool button is clicked tools: null, footer: null, header: null, queryParams: {}, method: 'get', href: null, loadingMessage: 'Loading...', loader: function(param, success, error){ var opts = $(this).panel('options'); if (!opts.href){return false} $.ajax({ type: opts.method, url: opts.href, cache: false, data: param, dataType: 'html', success: function(data){ success(data); }, error: function(){ error.apply(this, arguments); } }); }, extractor: function(data){ // define how to extract the content from ajax response, return extracted data var pattern = /]*>((.|[\n\r])*)<\/body>/im; var matches = pattern.exec(data); if (matches){ return matches[1]; // only extract body content } else { return data; } }, onBeforeLoad: function(param){}, onLoad: function(){}, onLoadError: function(){}, onBeforeOpen: function(){}, onOpen: function(){}, onBeforeClose: function(){}, onClose: function(){}, onBeforeDestroy: function(){}, onDestroy: function(){}, onResize: function(width,height){}, onMove: function(left,top){}, onMaximize: function(){}, onRestore: function(){}, onMinimize: function(){}, onBeforeCollapse: function(){}, onBeforeExpand: function(){}, onCollapse: function(){}, onExpand: function(){} }; })(jQuery); /** * window - EasyUI for jQuery * * Dependencies: * panel * draggable * resizable * */ (function($){ function moveWindow(target, param){ var state = $.data(target, 'window'); if (param){ if (param.left != null) state.options.left = param.left; if (param.top != null) state.options.top = param.top; } $(target).panel('move', state.options); if (state.shadow){ state.shadow.css({ left: state.options.left, top: state.options.top }); } } /** * center the window only horizontally */ function hcenter(target, tomove){ var opts = $.data(target, 'window').options; var pp = $(target).window('panel'); var width = pp._outerWidth(); if (opts.inline){ var parent = pp.parent(); opts.left = Math.ceil((parent.width() - width) / 2 + parent.scrollLeft()); } else { opts.left = Math.ceil(($(window)._outerWidth() - width) / 2 + $(document).scrollLeft()); } if (tomove){moveWindow(target);} } /** * center the window only vertically */ function vcenter(target, tomove){ var opts = $.data(target, 'window').options; var pp = $(target).window('panel'); var height = pp._outerHeight(); if (opts.inline){ var parent = pp.parent(); opts.top = Math.ceil((parent.height() - height) / 2 + parent.scrollTop()); } else { opts.top = Math.ceil(($(window)._outerHeight() - height) / 2 + $(document).scrollTop()); } if (tomove){moveWindow(target);} } function create(target){ var state = $.data(target, 'window'); var opts = state.options; var win = $(target).panel($.extend({}, state.options, { border: false, doSize: true, // size the panel, the property undefined in window component closed: true, // close the panel cls: 'window ' + (!opts.border?'window-thinborder window-noborder ':(opts.border=='thin'?'window-thinborder ':'')) + (opts.cls || ''), headerCls: 'window-header ' + (opts.headerCls || ''), bodyCls: 'window-body ' + (opts.noheader ? 'window-body-noheader ' : ' ') + (opts.bodyCls||''), onBeforeDestroy: function(){ if (opts.onBeforeDestroy.call(target) == false){return false;} if (state.shadow){state.shadow.remove();} if (state.mask){state.mask.remove();} }, onClose: function(){ if (state.shadow){state.shadow.hide();} if (state.mask){state.mask.hide();} opts.onClose.call(target); }, onOpen: function(){ if (state.mask){ state.mask.css($.extend({ display:'block', zIndex: $.fn.window.defaults.zIndex++ }, $.fn.window.getMaskSize(target))); } if (state.shadow){ state.shadow.css({ display:'block', zIndex: $.fn.window.defaults.zIndex++, left: opts.left, top: opts.top, width: state.window._outerWidth(), height: state.window._outerHeight() }); } state.window.css('z-index', $.fn.window.defaults.zIndex++); opts.onOpen.call(target); }, onResize: function(width, height){ var popts = $(this).panel('options'); $.extend(opts, { width: popts.width, height: popts.height, left: popts.left, top: popts.top }); if (state.shadow){ state.shadow.css({ left: opts.left, top: opts.top, width: state.window._outerWidth(), height: state.window._outerHeight() }); } opts.onResize.call(target, width, height); }, onMinimize: function(){ if (state.shadow){state.shadow.hide();} if (state.mask){state.mask.hide();} state.options.onMinimize.call(target); }, onBeforeCollapse: function(){ if (opts.onBeforeCollapse.call(target) == false){return false;} if (state.shadow){state.shadow.hide();} }, onExpand: function(){ if (state.shadow){state.shadow.show();} opts.onExpand.call(target); } })); state.window = win.panel('panel'); // create mask if (state.mask){state.mask.remove();} if (opts.modal){ state.mask = $('').insertAfter(state.window); } // create shadow if (state.shadow){state.shadow.remove();} if (opts.shadow){ state.shadow = $('').insertAfter(state.window); } // center and open the window var closed = opts.closed; if (opts.left == null){hcenter(target);} if (opts.top == null){vcenter(target);} moveWindow(target); if (!closed){win.window('open');} } function constrain(left, top, width, height){ var target = this; var state = $.data(target, 'window'); var opts = state.options; if (!opts.constrain){return {};} if ($.isFunction(opts.constrain)){ return opts.constrain.call(target, left, top, width, height); } var win = $(target).window('window'); var parent = opts.inline ? win.parent() : $(window); if (left < 0){left = 0;} if (top < parent.scrollTop()){top = parent.scrollTop();} if (left + width > parent.width()){ if (width == win.outerWidth()){ // moving left = parent.width() - width; } else { // resizing width = parent.width() - left; } } if (top - parent.scrollTop() + height > parent.height()){ if (height == win.outerHeight()){ // moving top = parent.height() - height + parent.scrollTop(); } else { // resizing height = parent.height() - top + parent.scrollTop(); } } return { left:left, top:top, width:width, height:height }; } /** * set window drag and resize property */ function setProperties(target){ var state = $.data(target, 'window'); state.window.draggable({ handle: '>div.panel-header>div.panel-title', disabled: state.options.draggable == false, onBeforeDrag: function(e){ if (state.mask) state.mask.css('z-index', $.fn.window.defaults.zIndex++); if (state.shadow) state.shadow.css('z-index', $.fn.window.defaults.zIndex++); state.window.css('z-index', $.fn.window.defaults.zIndex++); }, onStartDrag: function(e){ start1(e); }, onDrag: function(e){ proc1(e); return false; }, onStopDrag: function(e){ stop1(e, 'move'); } }); state.window.resizable({ disabled: state.options.resizable == false, onStartResize:function(e){ start1(e); }, onResize: function(e){ proc1(e); return false; }, onStopResize: function(e){ stop1(e, 'resize'); } }); function start1(e){ if (state.pmask){state.pmask.remove();} state.pmask = $('
                ').insertAfter(state.window); state.pmask.css({ display: 'none', zIndex: $.fn.window.defaults.zIndex++, left: e.data.left, top: e.data.top, width: state.window._outerWidth(), height: state.window._outerHeight() }); if (state.proxy){state.proxy.remove();} state.proxy = $('
                ').insertAfter(state.window); state.proxy.css({ display: 'none', zIndex: $.fn.window.defaults.zIndex++, left: e.data.left, top: e.data.top }); state.proxy._outerWidth(e.data.width)._outerHeight(e.data.height); state.proxy.hide(); setTimeout(function(){ if (state.pmask){state.pmask.show();} if (state.proxy){state.proxy.show();} }, 500); } function proc1(e){ $.extend(e.data, constrain.call(target, e.data.left, e.data.top, e.data.width, e.data.height)); state.pmask.show(); state.proxy.css({ display: 'block', left: e.data.left, top: e.data.top }); state.proxy._outerWidth(e.data.width); state.proxy._outerHeight(e.data.height); } function stop1(e, method){ $.extend(e.data, constrain.call(target, e.data.left, e.data.top, e.data.width+0.1, e.data.height+0.1)); $(target).window(method, e.data); state.pmask.remove(); state.pmask = null; state.proxy.remove(); state.proxy = null; } } // when window resize, reset the width and height of the window's mask $(function(){ if (!$._positionFixed){ $(window).resize(function(){ $('body>div.window-mask:visible').css({ width: '', height: '' }); setTimeout(function(){ $('body>div.window-mask:visible').css($.fn.window.getMaskSize()); }, 50); }); } }); $.fn.window = function(options, param){ if (typeof options == 'string'){ var method = $.fn.window.methods[options]; if (method){ return method(this, param); } else { return this.panel(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'window'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'window', { options: $.extend({}, $.fn.window.defaults, $.fn.window.parseOptions(this), options) }); if (!state.options.inline){ document.body.appendChild(this); } } create(this); setProperties(this); }); }; $.fn.window.methods = { options: function(jq){ var popts = jq.panel('options'); var wopts = $.data(jq[0], 'window').options; return $.extend(wopts, { closed: popts.closed, collapsed: popts.collapsed, minimized: popts.minimized, maximized: popts.maximized }); }, window: function(jq){ return $.data(jq[0], 'window').window; }, move: function(jq, param){ return jq.each(function(){ moveWindow(this, param); }); }, hcenter: function(jq){ return jq.each(function(){ hcenter(this, true); }); }, vcenter: function(jq){ return jq.each(function(){ vcenter(this, true); }); }, center: function(jq){ return jq.each(function(){ hcenter(this); vcenter(this); moveWindow(this); }); } }; $.fn.window.getMaskSize = function(target){ var state = $(target).data('window'); if (state && state.options.inline){ return {}; } else if ($._positionFixed){ return {position: 'fixed'}; } else { return { width: $(document).width(), height: $(document).height() }; } }; $.fn.window.parseOptions = function(target){ return $.extend({}, $.fn.panel.parseOptions(target), $.parser.parseOptions(target, [ {draggable:'boolean',resizable:'boolean',shadow:'boolean',modal:'boolean',inline:'boolean'} ])); }; // Inherited from $.fn.panel.defaults $.fn.window.defaults = $.extend({}, $.fn.panel.defaults, { zIndex: 9000, draggable: true, resizable: true, shadow: true, modal: false, border: true, // possible values are: true,false,'thin','thick' inline: false, // true to stay inside its parent, false to go on top of all elements // window's property which difference from panel title: 'New Window', collapsible: true, minimizable: true, maximizable: true, closable: true, closed: false, constrain: false /* constrain: function(left,top,width,height){ return { left:left, top:top, width:width, height:height }; } */ }); })(jQuery); /** * dialog - EasyUI for jQuery * * Dependencies: * window * linkbutton * */ (function($){ /** * build the dialog */ function buildDialog(target){ var opts = $.data(target, 'dialog').options; opts.inited = false; $(target).window($.extend({}, opts, { onResize: function(w,h){ if (opts.inited){ setContentSize(this); opts.onResize.call(this, w, h); } } })); var win = $(target).window('window'); if (opts.toolbar){ if ($.isArray(opts.toolbar)){ $(target).siblings('div.dialog-toolbar').remove(); var toolbar = $('
                ').appendTo(win); var tr = toolbar.find('tr'); for(var i=0; i
                ').appendTo(tr); } else { var td = $('').appendTo(tr); var tool = $('').appendTo(td); tool[0].onclick = eval(btn.handler || function(){}); tool.linkbutton($.extend({}, btn, { plain:true })); } } } else { $(opts.toolbar).addClass('dialog-toolbar').appendTo(win); $(opts.toolbar).show(); } } else { $(target).siblings('div.dialog-toolbar').remove(); } if (opts.buttons){ if ($.isArray(opts.buttons)){ $(target).siblings('div.dialog-button').remove(); var buttons = $('
                ').appendTo(win); for(var i=0; i').appendTo(buttons); if (p.handler) button[0].onclick = p.handler; button.linkbutton(p); } } else { $(opts.buttons).addClass('dialog-button').appendTo(win); $(opts.buttons).show(); } } else { $(target).siblings('div.dialog-button').remove(); } opts.inited = true; var closed = opts.closed; win.show(); $(target).window('resize',{}); if (closed){ win.hide(); } } function setContentSize(target, param){ var t = $(target); var opts = t.dialog('options'); var noheader = opts.noheader; var tb = t.siblings('.dialog-toolbar'); var bb = t.siblings('.dialog-button'); tb.insertBefore(target).css({ // position:'relative', borderTopWidth: (noheader?1:0), top: (noheader?tb.length:0) }); bb.insertAfter(target); // bb.insertAfter(target).css({ // position:'relative', // top: -1 // }); tb.add(bb)._outerWidth(t._outerWidth()).find('.easyui-fluid:visible').each(function(){ $(this).triggerHandler('_resize'); }); var extHeight = tb._outerHeight() + bb._outerHeight(); if (!isNaN(parseInt(opts.height))){ t._outerHeight(t._outerHeight() - extHeight); } else { var minHeight = t._size('min-height'); if (minHeight){ t._size('min-height', minHeight - extHeight); } var maxHeight = t._size('max-height'); if (maxHeight){ t._size('max-height', maxHeight - extHeight); } } var shadow = $.data(target, 'window').shadow; if (shadow){ var cc = t.panel('panel'); shadow.css({ width: cc._outerWidth(), height: cc._outerHeight() }); } } $.fn.dialog = function(options, param){ if (typeof options == 'string'){ var method = $.fn.dialog.methods[options]; if (method){ return method(this, param); } else { return this.window(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'dialog'); if (state){ $.extend(state.options, options); } else { $.data(this, 'dialog', { options: $.extend({}, $.fn.dialog.defaults, $.fn.dialog.parseOptions(this), options) }); } buildDialog(this); }); }; $.fn.dialog.methods = { options: function(jq){ var dopts = $.data(jq[0], 'dialog').options; var popts = jq.panel('options'); $.extend(dopts, { width: popts.width, height: popts.height, left: popts.left, top: popts.top, closed: popts.closed, collapsed: popts.collapsed, minimized: popts.minimized, maximized: popts.maximized }); return dopts; }, dialog: function(jq){ return jq.window('window'); } }; $.fn.dialog.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.window.parseOptions(target), $.parser.parseOptions(target,['toolbar','buttons']), { toolbar: (t.children('.dialog-toolbar').length ? t.children('.dialog-toolbar').removeClass('dialog-toolbar') : undefined), buttons: (t.children('.dialog-button').length ? t.children('.dialog-button').removeClass('dialog-button') : undefined) }); }; // Inherited from $.fn.window.defaults. $.fn.dialog.defaults = $.extend({}, $.fn.window.defaults, { title: 'New Dialog', collapsible: false, minimizable: false, maximizable: false, resizable: false, toolbar:null, buttons:null }); })(jQuery); /** * messager - EasyUI for jQuery * * Dependencies: * linkbutton * dialog * progressbar */ (function($){ function bindEvents(){ $(document).unbind('.messager').bind('keydown.messager', function(e){ if (e.keyCode == 27){ //ESC $('body').children('div.messager-window').children('div.messager-body').each(function(){ $(this).dialog('close'); }); } else if (e.keyCode == 9){ //TAB var win = $('body').children('div.messager-window'); if (!win.length){return} var buttons = win.find('.messager-input,.messager-button .l-btn'); for(var i=0; i=buttons.length-1?0:i+1]).focus(); return false; } } } else if (e.keyCode == 13){ // ENTER var input = $(e.target).closest('input.messager-input'); if (input.length){ var dlg = input.closest('.messager-body'); closeDialog(dlg, input.val()); } } }); } function unbindEvents(){ $(document).unbind('.messager'); } /** * create the message window */ function createWindow(options){ var opts = $.extend({}, $.messager.defaults, { modal: false, shadow: false, draggable: false, resizable: false, closed: true, // set the message window to the right bottom position style: { left: '', top: '', right: 0, zIndex: $.fn.window.defaults.zIndex++, bottom: -document.body.scrollTop-document.documentElement.scrollTop }, title: '', width: 250, height: 100, minHeight: 0, showType: 'slide', showSpeed: 600, content: options.msg, timeout: 4000 }, options); var dlg = $('
                ').appendTo('body'); dlg.dialog($.extend({}, opts, { noheader: (opts.title?false:true), openAnimation: (opts.showType), closeAnimation: (opts.showType=='show'?'hide':opts.showType), openDuration: opts.showSpeed, closeDuration: opts.showSpeed, onOpen: function(){ dlg.dialog('dialog').hover( function(){ if (opts.timer){clearTimeout(opts.timer);} }, function(){ closeMe(); } ); closeMe(); function closeMe(){ if (opts.timeout > 0){ opts.timer = setTimeout(function(){ if (dlg.length && dlg.data('dialog')){ dlg.dialog('close'); } }, opts.timeout); } } if (options.onOpen){ options.onOpen.call(this); } else { opts.onOpen.call(this); } }, onClose: function(){ if (opts.timer){clearTimeout(opts.timer);} if (options.onClose){ options.onClose.call(this); } else { opts.onClose.call(this); } dlg.dialog('destroy'); } })); dlg.dialog('dialog').css(opts.style); dlg.dialog('open'); return dlg; } /** * create a dialog, when dialog is closed destroy it */ function createDialog(options){ bindEvents(); var dlg = $('
                ').appendTo('body'); dlg.dialog($.extend({}, options, { noheader: (options.title?false:true), onClose: function(){ unbindEvents(); if (options.onClose){ options.onClose.call(this); } dlg.dialog('destroy'); // setTimeout(function(){ // }, 100); } })); var win = dlg.dialog('dialog').addClass('messager-window'); win.find('.dialog-button').addClass('messager-button').find('a:first').focus(); return dlg; } function closeDialog(dlg, cbValue){ var opts = dlg.dialog('options'); dlg.dialog('close'); opts.fn(cbValue); } $.messager = { show: function(options){ return createWindow(options); }, alert: function(title, msg, icon, fn) { var opts = typeof title == 'object' ? title : {title:title, msg:msg, icon:icon, fn:fn}; var cls = opts.icon ? 'messager-icon messager-'+opts.icon : ''; opts = $.extend({}, $.messager.defaults, { content: '
                ' + '
                ' + opts.msg + '
                ' + '
                ' }, opts); if (!opts.buttons){ opts.buttons = [{ text: opts.ok, onClick: function(){closeDialog(dlg);} }] } var dlg = createDialog(opts); return dlg; }, confirm: function(title, msg, fn) { var opts = typeof title == 'object' ? title : {title:title, msg:msg, fn:fn}; opts = $.extend({}, $.messager.defaults, { content: '
                ' + '
                ' + opts.msg + '
                ' + '
                ' }, opts); if (!opts.buttons){ opts.buttons = [{ text: opts.ok, onClick: function(){closeDialog(dlg, true);} },{ text: opts.cancel, onClick: function(){closeDialog(dlg, false);} }]; } var dlg = createDialog(opts); return dlg; }, prompt: function(title, msg, fn) { var opts = typeof title == 'object' ? title : {title:title, msg:msg, fn:fn}; opts = $.extend({}, $.messager.defaults, { content: '
                ' + '
                ' + opts.msg + '
                ' + '
                ' + '
                ' + '
                ' }, opts); if (!opts.buttons){ opts.buttons = [{ text: opts.ok, onClick: function(){closeDialog(dlg, dlg.find('.messager-input').val());} },{ text: opts.cancel, onClick: function(){closeDialog(dlg);} }] } var dlg = createDialog(opts); dlg.find('.messager-input').focus(); return dlg; }, progress: function(options){ var methods = { bar: function(){ // get the progress bar object return $('body>div.messager-window').find('div.messager-p-bar'); }, close: function(){ // close the progress window var dlg = $('body>div.messager-window>div.messager-body:has(div.messager-progress)'); if (dlg.length){ dlg.dialog('close'); } } }; if (typeof options == 'string'){ var method = methods[options]; return method(); } options = options || {}; var opts = $.extend({}, { title: '', minHeight: 0, content: undefined, msg: '', // The message box body text text: undefined, // The text to display in the progress bar interval: 300 // The length of time in milliseconds between each progress update }, options); var dlg = createDialog($.extend({}, $.messager.defaults, { content: '
                ' + opts.msg + '
                ', closable: false, doSize: false }, opts, { onClose: function(){ if (this.timer){ clearInterval(this.timer); } if (options.onClose){ options.onClose.call(this); } else { $.messager.defaults.onClose.call(this); } } })); var bar = dlg.find('div.messager-p-bar'); bar.progressbar({ text: opts.text }); dlg.dialog('resize'); if (opts.interval){ dlg[0].timer = setInterval(function(){ var v = bar.progressbar('getValue'); v += 10; if (v > 100) v = 0; bar.progressbar('setValue', v); }, opts.interval); } return dlg; } }; $.messager.defaults = $.extend({}, $.fn.dialog.defaults, { ok: 'Ok', cancel: 'Cancel', width: 300, height: 'auto', minHeight: 150, modal: true, collapsible: false, minimizable: false, maximizable: false, resizable: false, fn: function(){} }); })(jQuery); /** * accordion - EasyUI for jQuery * * Dependencies: * panel * */ (function($){ // function setSize(container, param){ // var state = $.data(container, 'accordion'); // var opts = state.options; // var panels = state.panels; // var cc = $(container); // if (param){ // $.extend(opts, { // width: param.width, // height: param.height // }); // } // cc._size(opts); // var headerHeight = 0; // var bodyHeight = 'auto'; // var headers = cc.find('>.panel>.accordion-header'); // if (headers.length){ // headerHeight = $(headers[0]).css('height', '')._outerHeight(); // } // if (!isNaN(parseInt(opts.height))){ // bodyHeight = cc.height() - headerHeight*headers.length; // } // _resize(true, bodyHeight - _resize(false) + 1); // function _resize(collapsible, height){ // var totalHeight = 0; // for(var i=0; i.panel>.accordion-header'); if (headers.length){ if (isHorizontal){ $(panels[0]).panel('resize', {width:cc.width(),height:cc.height()}); headerHeight = $(headers[0])._outerWidth(); } else { headerHeight = $(headers[0]).css('height', '')._outerHeight(); } } if (!isNaN(parseInt(opts.height))){ if (isHorizontal){ bodyHeight = cc.width() - headerHeight*headers.length; } else { bodyHeight = cc.height() - headerHeight*headers.length; } } // _resize(true, bodyHeight - _resize(false) + 1); _resize(true, bodyHeight - _resize(false)); function _resize(collapsible, height){ var totalHeight = 0; for(var i=0; i= panels.length){ return null; } else { return panels[which]; } } return findBy(container, 'title', which); } function setProperties(container){ var opts = $.data(container, 'accordion').options; var cc = $(container); if (opts.border){ cc.removeClass('accordion-noborder'); } else { cc.addClass('accordion-noborder'); } } function init(container){ var state = $.data(container, 'accordion'); var cc = $(container); cc.addClass('accordion'); state.panels = []; cc.children('div').each(function(){ var opts = $.extend({}, $.parser.parseOptions(this), { selected: ($(this).attr('selected') ? true : undefined) }); var pp = $(this); state.panels.push(pp); createPanel(container, pp, opts); }); cc.bind('_resize', function(e,force){ if ($(this).hasClass('easyui-fluid') || force){ setSize(container); } return false; }); } function createPanel(container, pp, options){ var opts = $.data(container, 'accordion').options; pp.panel($.extend({}, { collapsible: true, minimizable: false, maximizable: false, closable: false, doSize: false, collapsed: true, headerCls: 'accordion-header', bodyCls: 'accordion-body', halign: opts.halign }, options, { onBeforeExpand: function(){ if (options.onBeforeExpand){ if (options.onBeforeExpand.call(this) == false){return false} } if (!opts.multiple){ // get all selected panel var all = $.grep(getSelections(container), function(p){ return p.panel('options').collapsible; }); for(var i=0; i.panel-last>.accordion-header').removeClass('accordion-header-border'); if (options.onExpand){options.onExpand.call(this)} opts.onSelect.call(container, $(this).panel('options').title, getPanelIndex(container, this)); }, onBeforeCollapse: function(){ if (options.onBeforeCollapse){ if (options.onBeforeCollapse.call(this) == false){return false} } $(container).find('>.panel-last>.accordion-header').addClass('accordion-header-border'); var header = $(this).panel('header'); header.removeClass('accordion-header-selected'); header.find('.accordion-collapse').addClass('accordion-expand'); }, onCollapse: function(){ if (isNaN(parseInt(opts.height))){ $(container).find('>.panel-last>.accordion-header').removeClass('accordion-header-border'); } if (options.onCollapse){options.onCollapse.call(this)} opts.onUnselect.call(container, $(this).panel('options').title, getPanelIndex(container, this)); } })); var header = pp.panel('header'); var tool = header.children('div.panel-tool'); tool.children('a.panel-tool-collapse').hide(); // hide the old collapse button var t = $('').addClass('accordion-collapse accordion-expand').appendTo(tool); t.bind('click', function(){ togglePanel(pp); return false; }); pp.panel('options').collapsible ? t.show() : t.hide(); if (opts.halign=='left' || opts.halign=='right'){ t.hide(); } header.click(function(){ togglePanel(pp); return false; }); function togglePanel(p){ var popts = p.panel('options'); if (popts.collapsible){ var index = getPanelIndex(container, p); if (popts.collapsed){ select(container, index); } else { unselect(container, index); } } } } /** * select and set the specified panel active */ function select(container, which){ var p = getPanel(container, which); if (!p){return} stopAnimate(container); var opts = $.data(container, 'accordion').options; p.panel('expand', opts.animate); } function unselect(container, which){ var p = getPanel(container, which); if (!p){return} stopAnimate(container); var opts = $.data(container, 'accordion').options; p.panel('collapse', opts.animate); } function doFirstSelect(container){ var opts = $.data(container, 'accordion').options; $(container).find('>.panel-last>.accordion-header').addClass('accordion-header-border'); var p = findBy(container, 'selected', true); if (p){ _select(getPanelIndex(container, p)); } else { _select(opts.selected); } function _select(index){ var animate = opts.animate; opts.animate = false; select(container, index); opts.animate = animate; } } /** * stop the animation of all panels */ function stopAnimate(container){ var panels = $.data(container, 'accordion').panels; for(var i=0; i
                ').appendTo(container); panels.push(pp); createPanel(container, pp, options); setSize(container); opts.onAdd.call(container, options.title, panels.length-1); if (options.selected){ select(container, panels.length-1); } } function remove(container, which){ var state = $.data(container, 'accordion'); var opts = state.options; var panels = state.panels; stopAnimate(container); var panel = getPanel(container, which); var title = panel.panel('options').title; var index = getPanelIndex(container, panel); if (!panel){return} if (opts.onBeforeRemove.call(container, title, index) == false){return} panels.splice(index, 1); panel.panel('destroy'); if (panels.length){ setSize(container); var curr = getSelected(container); if (!curr){ select(container, 0); } } opts.onRemove.call(container, title, index); } $.fn.accordion = function(options, param){ if (typeof options == 'string'){ return $.fn.accordion.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'accordion'); if (state){ $.extend(state.options, options); } else { $.data(this, 'accordion', { options: $.extend({}, $.fn.accordion.defaults, $.fn.accordion.parseOptions(this), options), accordion: $(this).addClass('accordion'), panels: [] }); init(this); } setProperties(this); setSize(this); doFirstSelect(this); }); }; $.fn.accordion.methods = { options: function(jq){ return $.data(jq[0], 'accordion').options; }, panels: function(jq){ return $.data(jq[0], 'accordion').panels; }, resize: function(jq, param){ return jq.each(function(){ setSize(this, param); }); }, getSelections: function(jq){ return getSelections(jq[0]); }, getSelected: function(jq){ return getSelected(jq[0]); }, getPanel: function(jq, which){ return getPanel(jq[0], which); }, getPanelIndex: function(jq, panel){ return getPanelIndex(jq[0], panel); }, select: function(jq, which){ return jq.each(function(){ select(this, which); }); }, unselect: function(jq, which){ return jq.each(function(){ unselect(this, which); }); }, add: function(jq, options){ return jq.each(function(){ add(this, options); }); }, remove: function(jq, which){ return jq.each(function(){ remove(this, which); }); } }; $.fn.accordion.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, [ 'width','height','halign', {fit:'boolean',border:'boolean',animate:'boolean',multiple:'boolean',selected:'number'} ])); }; $.fn.accordion.defaults = { width: 'auto', height: 'auto', fit: false, border: true, animate: true, multiple: false, selected: 0, halign: 'top', // the header alignment: 'top','left','right' onSelect: function(title, index){}, onUnselect: function(title, index){}, onAdd: function(title, index){}, onBeforeRemove: function(title, index){}, onRemove: function(title, index){} }; })(jQuery); /** * tabs - EasyUI for jQuery * * Dependencies: * panel * linkbutton * */ (function($){ function getContentWidth(c){ var w = 0; $(c).children().each(function(){ w += $(this).outerWidth(true); }); return w; } /** * set the tabs scrollers to show or not, * dependent on the tabs count and width */ function setScrollers(container) { var opts = $.data(container, 'tabs').options; if (opts.tabPosition == 'left' || opts.tabPosition == 'right' || !opts.showHeader){return} var header = $(container).children('div.tabs-header'); var tool = header.children('div.tabs-tool:not(.tabs-tool-hidden)'); var sLeft = header.children('div.tabs-scroller-left'); var sRight = header.children('div.tabs-scroller-right'); var wrap = header.children('div.tabs-wrap'); // set the tool height var tHeight = header.outerHeight(); if (opts.plain){ tHeight -= tHeight - header.height(); } tool._outerHeight(tHeight); var tabsWidth = getContentWidth(header.find('ul.tabs')); var cWidth = header.width() - tool._outerWidth(); if (tabsWidth > cWidth) { sLeft.add(sRight).show()._outerHeight(tHeight); if (opts.toolPosition == 'left'){ tool.css({ left: sLeft.outerWidth(), right: '' }); wrap.css({ marginLeft: sLeft.outerWidth() + tool._outerWidth(), marginRight: sRight._outerWidth(), width: cWidth - sLeft.outerWidth() - sRight.outerWidth() }); } else { tool.css({ left: '', right: sRight.outerWidth() }); wrap.css({ marginLeft: sLeft.outerWidth(), marginRight: sRight.outerWidth() + tool._outerWidth(), width: cWidth - sLeft.outerWidth() - sRight.outerWidth() }); } } else { sLeft.add(sRight).hide(); if (opts.toolPosition == 'left'){ tool.css({ left: 0, right: '' }); wrap.css({ marginLeft: tool._outerWidth(), marginRight: 0, width: cWidth }); } else { tool.css({ left: '', right: 0 }); wrap.css({ marginLeft: 0, marginRight: tool._outerWidth(), width: cWidth }); } } } function addTools(container){ var opts = $.data(container, 'tabs').options; var header = $(container).children('div.tabs-header'); if (opts.tools) { if (typeof opts.tools == 'string'){ $(opts.tools).addClass('tabs-tool').appendTo(header); $(opts.tools).show(); } else { header.children('div.tabs-tool').remove(); var tools = $('
                ').appendTo(header); var tr = tools.find('tr'); for(var i=0; i').appendTo(tr); var tool = $('').appendTo(td); tool[0].onclick = eval(opts.tools[i].handler || function(){}); tool.linkbutton($.extend({}, opts.tools[i], { plain: true })); } } } else { header.children('div.tabs-tool').remove(); } } function setSize(container, param) { var state = $.data(container, 'tabs'); var opts = state.options; var cc = $(container); if (!opts.doSize){return} if (param){ $.extend(opts, { width: param.width, height: param.height }); } cc._size(opts); var header = cc.children('div.tabs-header'); var panels = cc.children('div.tabs-panels'); var wrap = header.find('div.tabs-wrap'); var ul = wrap.find('.tabs'); ul.children('li').removeClass('tabs-first tabs-last'); ul.children('li:first').addClass('tabs-first'); ul.children('li:last').addClass('tabs-last'); if (opts.tabPosition == 'left' || opts.tabPosition == 'right'){ header._outerWidth(opts.showHeader ? opts.headerWidth : 0); panels._outerWidth(cc.width() - header.outerWidth()); header.add(panels)._size('height', isNaN(parseInt(opts.height)) ? '' : cc.height()); wrap._outerWidth(header.width()); ul._outerWidth(wrap.width()).css('height',''); } else { header.children('div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool:not(.tabs-tool-hidden)').css('display', opts.showHeader?'block':'none'); header._outerWidth(cc.width()).css('height',''); if (opts.showHeader){ header.css('background-color',''); wrap.css('height',''); } else { header.css('background-color','transparent'); header._outerHeight(0); wrap._outerHeight(0); } ul._outerHeight(opts.tabHeight).css('width',''); ul._outerHeight(ul.outerHeight()-ul.height()-1+opts.tabHeight).css('width',''); panels._size('height', isNaN(parseInt(opts.height)) ? '' : (cc.height()-header.outerHeight())); panels._size('width', cc.width()); } if (state.tabs.length){ var d1 = ul.outerWidth(true) - ul.width(); var li = ul.children('li:first'); var d2 = li.outerWidth(true) - li.width(); var hwidth = header.width() - header.children('.tabs-tool:not(.tabs-tool-hidden)')._outerWidth(); var justifiedWidth = Math.floor((hwidth-d1-d2*state.tabs.length)/state.tabs.length); $.map(state.tabs, function(p){ setTabSize(p, (opts.justified && $.inArray(opts.tabPosition,['top','bottom'])>=0) ? justifiedWidth : undefined); }); if (opts.justified && $.inArray(opts.tabPosition,['top','bottom'])>=0){ var deltaWidth = hwidth - d1 - getContentWidth(ul); setTabSize(state.tabs[state.tabs.length-1], justifiedWidth+deltaWidth); } } setScrollers(container); function setTabSize(p, width){ var p_opts = p.panel('options'); var p_t = p_opts.tab.find('a.tabs-inner'); var width = width ? width : (parseInt(p_opts.tabWidth||opts.tabWidth||undefined)); if (width){ p_t._outerWidth(width); } else { p_t.css('width', ''); } p_t._outerHeight(opts.tabHeight); p_t.css('lineHeight', p_t.height()+'px'); p_t.find('.easyui-fluid:visible').triggerHandler('_resize'); } } /** * set selected tab panel size */ function setSelectedSize(container){ var opts = $.data(container, 'tabs').options; var tab = getSelectedTab(container); if (tab){ var panels = $(container).children('div.tabs-panels'); var width = opts.width=='auto' ? 'auto' : panels.width(); var height = opts.height=='auto' ? 'auto' : panels.height(); tab.panel('resize', { width: width, height: height }); } } /** * wrap the tabs header and body */ function wrapTabs(container) { var tabs = $.data(container, 'tabs').tabs; var cc = $(container).addClass('tabs-container'); var panels = $('
                ').insertBefore(cc); cc.children('div').each(function(){ panels[0].appendChild(this); }); cc[0].appendChild(panels[0]); $('
                ' + '
                ' + '
                ' + '
                ' + '
                  ' + '
                  ' + '
                  ').prependTo(container); cc.children('div.tabs-panels').children('div').each(function(i){ var opts = $.extend({}, $.parser.parseOptions(this), { disabled: ($(this).attr('disabled') ? true : undefined), selected: ($(this).attr('selected') ? true : undefined) }); createTab(container, opts, $(this)); }); cc.children('div.tabs-header').find('.tabs-scroller-left, .tabs-scroller-right').hover( function(){$(this).addClass('tabs-scroller-over');}, function(){$(this).removeClass('tabs-scroller-over');} ); cc.bind('_resize', function(e,force){ if ($(this).hasClass('easyui-fluid') || force){ setSize(container); setSelectedSize(container); } return false; }); } function bindEvents(container){ var state = $.data(container, 'tabs') var opts = state.options; $(container).children('div.tabs-header').unbind().bind('click', function(e){ if ($(e.target).hasClass('tabs-scroller-left')){ $(container).tabs('scrollBy', -opts.scrollIncrement); } else if ($(e.target).hasClass('tabs-scroller-right')){ $(container).tabs('scrollBy', opts.scrollIncrement); } else { var li = $(e.target).closest('li'); if (li.hasClass('tabs-disabled')){return false;} var a = $(e.target).closest('a.tabs-close'); if (a.length){ closeTab(container, getLiIndex(li)); } else if (li.length){ // selectTab(container, getLiIndex(li)); var index = getLiIndex(li); var popts = state.tabs[index].panel('options'); if (popts.collapsible){ popts.closed ? selectTab(container, index) : unselectTab(container, index); } else { selectTab(container, index); } } return false; } }).bind('contextmenu', function(e){ var li = $(e.target).closest('li'); if (li.hasClass('tabs-disabled')){return;} if (li.length){ opts.onContextMenu.call(container, e, li.find('span.tabs-title').html(), getLiIndex(li)); } }); function getLiIndex(li){ var index = 0; li.parent().children('li').each(function(i){ if (li[0] == this){ index = i; return false; } }); return index; } } function setProperties(container){ var opts = $.data(container, 'tabs').options; var header = $(container).children('div.tabs-header'); var panels = $(container).children('div.tabs-panels'); header.removeClass('tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right'); panels.removeClass('tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right'); if (opts.tabPosition == 'top'){ header.insertBefore(panels); } else if (opts.tabPosition == 'bottom'){ header.insertAfter(panels); header.addClass('tabs-header-bottom'); panels.addClass('tabs-panels-top'); } else if (opts.tabPosition == 'left'){ header.addClass('tabs-header-left'); panels.addClass('tabs-panels-right'); } else if (opts.tabPosition == 'right'){ header.addClass('tabs-header-right'); panels.addClass('tabs-panels-left'); } if (opts.plain == true) { header.addClass('tabs-header-plain'); } else { header.removeClass('tabs-header-plain'); } header.removeClass('tabs-header-narrow').addClass(opts.narrow?'tabs-header-narrow':''); var tabs = header.find('.tabs'); tabs.removeClass('tabs-pill').addClass(opts.pill?'tabs-pill':''); tabs.removeClass('tabs-narrow').addClass(opts.narrow?'tabs-narrow':''); tabs.removeClass('tabs-justified').addClass(opts.justified?'tabs-justified':''); if (opts.border == true){ header.removeClass('tabs-header-noborder'); panels.removeClass('tabs-panels-noborder'); } else { header.addClass('tabs-header-noborder'); panels.addClass('tabs-panels-noborder'); } opts.doSize = true; } function createTab(container, options, pp) { options = options || {}; var state = $.data(container, 'tabs'); var tabs = state.tabs; if (options.index == undefined || options.index > tabs.length){options.index = tabs.length} if (options.index < 0){options.index = 0} var ul = $(container).children('div.tabs-header').find('ul.tabs'); var panels = $(container).children('div.tabs-panels'); var tab = $( '
                • ' + '' + '' + '' + '' + '
                • '); if (!pp){pp = $('
                  ');} if (options.index >= tabs.length){ tab.appendTo(ul); pp.appendTo(panels); tabs.push(pp); } else { tab.insertBefore(ul.children('li:eq('+options.index+')')); pp.insertBefore(panels.children('div.panel:eq('+options.index+')')); tabs.splice(options.index, 0, pp); } // create panel pp.panel($.extend({}, options, { tab: tab, border: false, noheader: true, closed: true, doSize: false, iconCls: (options.icon ? options.icon : undefined), onLoad: function(){ if (options.onLoad){ options.onLoad.apply(this, arguments); } state.options.onLoad.call(container, $(this)); }, onBeforeOpen: function(){ if (options.onBeforeOpen){ if (options.onBeforeOpen.call(this) == false){return false;} } var p = $(container).tabs('getSelected'); if (p){ if (p[0] != this){ $(container).tabs('unselect', getTabIndex(container, p)); p = $(container).tabs('getSelected'); if (p){ return false; } } else { setSelectedSize(container); return false; } } var popts = $(this).panel('options'); popts.tab.addClass('tabs-selected'); // scroll the tab to center position if required. var wrap = $(container).find('>div.tabs-header>div.tabs-wrap'); var left = popts.tab.position().left; var right = left + popts.tab.outerWidth(); if (left < 0 || right > wrap.width()){ var deltaX = left - (wrap.width()-popts.tab.width()) / 2; $(container).tabs('scrollBy', deltaX); } else { $(container).tabs('scrollBy', 0); } var panel = $(this).panel('panel'); panel.css('display','block'); setSelectedSize(container); panel.css('display','none'); }, onOpen: function(){ if (options.onOpen){ options.onOpen.call(this); } var popts = $(this).panel('options'); var index = getTabIndex(container, this); // state.selectHis.push(popts.title); state.selectHis.push(index); state.options.onSelect.call(container, popts.title, index); }, onBeforeClose: function(){ if (options.onBeforeClose){ if (options.onBeforeClose.call(this) == false){return false;} } $(this).panel('options').tab.removeClass('tabs-selected'); }, onClose: function(){ if (options.onClose){ options.onClose.call(this); } var popts = $(this).panel('options'); state.options.onUnselect.call(container, popts.title, getTabIndex(container, this)); } })); // only update the tab header $(container).tabs('update', { tab: pp, options: pp.panel('options'), type: 'header' }); } function addTab(container, options) { var state = $.data(container, 'tabs'); var opts = state.options; if (options.selected == undefined) options.selected = true; createTab(container, options); opts.onAdd.call(container, options.title, options.index); if (options.selected){ selectTab(container, options.index); // select the added tab panel } } /** * update tab panel, param has following properties: * tab: the tab panel to be updated * options: the tab panel options * type: the update type, possible values are: 'header','body','all' */ function updateTab(container, param){ param.type = param.type || 'all'; var selectHis = $.data(container, 'tabs').selectHis; var pp = param.tab; // the tab panel var opts = pp.panel('options'); // get the tab panel options var oldTitle = opts.title; $.extend(opts, param.options, { iconCls: (param.options.icon ? param.options.icon : undefined) }); if (param.type == 'all' || param.type == 'body'){ pp.panel(); } if (param.type == 'all' || param.type == 'header'){ var tab = opts.tab; if (opts.header){ tab.find('.tabs-inner').html($(opts.header)); } else { var s_title = tab.find('span.tabs-title'); var s_icon = tab.find('span.tabs-icon'); s_title.html(opts.title); s_icon.attr('class', 'tabs-icon'); tab.find('a.tabs-close').remove(); if (opts.closable){ s_title.addClass('tabs-closable'); $('').appendTo(tab); } else{ s_title.removeClass('tabs-closable'); } if (opts.iconCls){ s_title.addClass('tabs-with-icon'); s_icon.addClass(opts.iconCls); } else { s_title.removeClass('tabs-with-icon'); } if (opts.tools){ var p_tool = tab.find('span.tabs-p-tool'); if (!p_tool.length){ var p_tool = $('').insertAfter(tab.find('a.tabs-inner')); } if ($.isArray(opts.tools)){ p_tool.empty(); for(var i=0; i').appendTo(p_tool); t.addClass(opts.tools[i].iconCls); if (opts.tools[i].handler){ t.bind('click', {handler:opts.tools[i].handler}, function(e){ if ($(this).parents('li').hasClass('tabs-disabled')){return;} e.data.handler.call(this); }); } } } else { $(opts.tools).children().appendTo(p_tool); } var pr = p_tool.children().length * 12; if (opts.closable) { pr += 8; p_tool.css('right', ''); } else { pr -= 3; p_tool.css('right','5px'); } s_title.css('padding-right', pr+'px'); } else { tab.find('span.tabs-p-tool').remove(); s_title.css('padding-right', ''); } } // if (oldTitle != opts.title){ // for(var i=0; i index ? tindex-1 : tindex); } } state.selectHis = his; var selected = $(container).tabs('getSelected'); if (!selected && his.length){ index = state.selectHis.pop(); $(container).tabs('select', index); } // for(var i=0; i=0 && which < tabs.length){ tab = tabs[which]; if (removeit){ tabs.splice(which, 1); } } } else { var tmp = $(''); for(var i=0; i.tabs-header>.tabs-tool'); if (visible){ tool.removeClass('tabs-tool-hidden').show(); } else { tool.addClass('tabs-tool-hidden').hide(); } $(container).tabs('resize').tabs('scrollBy', 0); } $.fn.tabs = function(options, param){ if (typeof options == 'string') { return $.fn.tabs.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'tabs'); if (state) { $.extend(state.options, options); } else { $.data(this, 'tabs', { options: $.extend({},$.fn.tabs.defaults, $.fn.tabs.parseOptions(this), options), tabs: [], selectHis: [] }); wrapTabs(this); } addTools(this); setProperties(this); setSize(this); bindEvents(this); doFirstSelect(this); }); }; $.fn.tabs.methods = { options: function(jq){ var cc = jq[0]; var opts = $.data(cc, 'tabs').options; var s = getSelectedTab(cc); opts.selected = s ? getTabIndex(cc, s) : -1; return opts; }, tabs: function(jq){ return $.data(jq[0], 'tabs').tabs; }, resize: function(jq, param){ return jq.each(function(){ setSize(this, param); setSelectedSize(this); }); }, add: function(jq, options){ return jq.each(function(){ addTab(this, options); }); }, close: function(jq, which){ return jq.each(function(){ closeTab(this, which); }); }, getTab: function(jq, which){ return getTab(jq[0], which); }, getTabIndex: function(jq, tab){ return getTabIndex(jq[0], tab); }, getSelected: function(jq){ return getSelectedTab(jq[0]); }, select: function(jq, which){ return jq.each(function(){ selectTab(this, which); }); }, unselect: function(jq, which){ return jq.each(function(){ unselectTab(this, which); }); }, exists: function(jq, which){ return exists(jq[0], which); }, update: function(jq, options){ return jq.each(function(){ updateTab(this, options); }); }, enableTab: function(jq, which){ return jq.each(function(){ var opts = $(this).tabs('getTab', which).panel('options'); opts.tab.removeClass('tabs-disabled'); opts.disabled = false; }); }, disableTab: function(jq, which){ return jq.each(function(){ var opts = $(this).tabs('getTab', which).panel('options'); opts.tab.addClass('tabs-disabled'); opts.disabled = true; }); }, showHeader: function(jq){ return jq.each(function(){ showHeader(this, true); }); }, hideHeader: function(jq){ return jq.each(function(){ showHeader(this, false); }); }, showTool: function(jq){ return jq.each(function(){ showTool(this, true); }); }, hideTool: function(jq){ return jq.each(function(){ showTool(this, false); }); }, scrollBy: function(jq, deltaX){ // scroll the tab header by the specified amount of pixels return jq.each(function(){ var opts = $(this).tabs('options'); var wrap = $(this).find('>div.tabs-header>div.tabs-wrap'); var pos = Math.min(wrap._scrollLeft() + deltaX, getMaxScrollWidth()); wrap.animate({scrollLeft: pos}, opts.scrollDuration); function getMaxScrollWidth(){ var w = 0; var ul = wrap.children('ul'); ul.children('li').each(function(){ w += $(this).outerWidth(true); }); return w - wrap.width() + (ul.outerWidth() - ul.width()); } }); } }; $.fn.tabs.parseOptions = function(target){ return $.extend({}, $.parser.parseOptions(target, [ 'tools','toolPosition','tabPosition', {fit:'boolean',border:'boolean',plain:'boolean'}, {headerWidth:'number',tabWidth:'number',tabHeight:'number',selected:'number'}, {showHeader:'boolean',justified:'boolean',narrow:'boolean',pill:'boolean'} ])); }; $.fn.tabs.defaults = { width: 'auto', height: 'auto', headerWidth: 150, // the tab header width, it is valid only when tabPosition set to 'left' or 'right' tabWidth: 'auto', // the tab width tabHeight: 27, // the tab height selected: 0, // the initialized selected tab index showHeader: true, plain: false, fit: false, border: true, justified: false, narrow: false, pill: false, tools: null, toolPosition: 'right', // left,right tabPosition: 'top', // possible values: top,bottom scrollIncrement: 100, scrollDuration: 400, onLoad: function(panel){}, onSelect: function(title, index){}, onUnselect: function(title, index){}, onBeforeClose: function(title, index){}, onClose: function(title, index){}, onAdd: function(title, index){}, onUpdate: function(title, index){}, onContextMenu: function(e, title, index){} }; })(jQuery); /** * layout - EasyUI for jQuery * * Dependencies: * resizable * panel */ (function($){ var resizing = false; // indicate if the region panel is being resized function setSize(container, param){ var state = $.data(container, 'layout'); var opts = state.options; var panels = state.panels; var cc = $(container); if (param){ $.extend(opts, { width: param.width, height: param.height }); } if (container.tagName.toLowerCase() == 'body'){ // opts.fit = true; // cc._size(opts, $('body'))._size('clear'); cc._size('fit'); } else { cc._size(opts); } var cpos = { top:0, left:0, width:cc.width(), height:cc.height() }; setVSize(isVisible(panels.expandNorth) ? panels.expandNorth : panels.north, 'n'); setVSize(isVisible(panels.expandSouth) ? panels.expandSouth : panels.south, 's'); setHSize(isVisible(panels.expandEast) ? panels.expandEast : panels.east, 'e'); setHSize(isVisible(panels.expandWest) ? panels.expandWest : panels.west, 'w'); panels.center.panel('resize', cpos); function setVSize(pp, type){ if (!pp.length || !isVisible(pp)){return} var opts = pp.panel('options'); pp.panel('resize', { width: cc.width(), height: opts.height }); var height = pp.panel('panel').outerHeight(); pp.panel('move', { left: 0, top: (type=='n' ? 0 : cc.height()-height) }); cpos.height -= height; if (type == 'n'){ cpos.top += height; if (!opts.split && opts.border){cpos.top--;} } if (!opts.split && opts.border){ cpos.height++; } } function setHSize(pp, type){ if (!pp.length || !isVisible(pp)){return} var opts = pp.panel('options'); pp.panel('resize', { width: opts.width, height: cpos.height }); var width = pp.panel('panel').outerWidth(); pp.panel('move', { left: (type=='e' ? cc.width()-width : 0), top: cpos.top }); cpos.width -= width; if (type == 'w'){ cpos.left += width; if (!opts.split && opts.border){cpos.left--;} } if (!opts.split && opts.border){cpos.width++;} } } /** * initialize and wrap the layout */ function init(container){ var cc = $(container); cc.addClass('layout'); function _add(el){ var popts = $.fn.layout.parsePanelOptions(el); if ('north,south,east,west,center'.indexOf(popts.region) >= 0){ addPanel(container, popts, el); } } var opts = cc.layout('options'); var onAdd = opts.onAdd; opts.onAdd = function(){}; cc.find('>div,>form>div').each(function(){ _add(this); }); opts.onAdd = onAdd; cc.append('
                  '); cc.bind('_resize', function(e,force){ if ($(this).hasClass('easyui-fluid') || force){ setSize(container); } return false; }); } /** * Add a new region panel on specified element */ function addPanel(container, param, el){ param.region = param.region || 'center'; var panels = $.data(container, 'layout').panels; var cc = $(container); var dir = param.region; if (panels[dir].length) return; // the region panel is already exists var pp = $(el); if (!pp.length){ pp = $('
                  ').appendTo(cc); // the predefined panel isn't exists, create a new panel instead } var popts = $.extend({}, $.fn.layout.paneldefaults, { width: (pp.length ? parseInt(pp[0].style.width) || pp.outerWidth() : 'auto'), height: (pp.length ? parseInt(pp[0].style.height) || pp.outerHeight() : 'auto'), doSize: false, collapsible: true, onOpen: function(){ var tool = $(this).panel('header').children('div.panel-tool'); tool.children('a.panel-tool-collapse').hide(); // hide the old collapse button var buttonDir = {north:'up',south:'down',east:'right',west:'left'}; if (!buttonDir[dir]) return; var iconCls = 'layout-button-' + buttonDir[dir]; // add collapse tool to panel header var t = tool.children('a.' + iconCls); if (!t.length){ t = $('').addClass(iconCls).appendTo(tool); t.bind('click', {dir:dir}, function(e){ collapsePanel(container, e.data.dir); return false; }); } $(this).panel('options').collapsible ? t.show() : t.hide(); } }, param, { cls: ((param.cls||'') + ' layout-panel layout-panel-' + dir), bodyCls: ((param.bodyCls||'') + ' layout-body') }); pp.panel(popts); // create region panel panels[dir] = pp; var handles = {north:'s',south:'n',east:'w',west:'e'}; var panel = pp.panel('panel'); if (pp.panel('options').split){ panel.addClass('layout-split-' + dir); } panel.resizable($.extend({}, { handles: (handles[dir]||''), disabled: (!pp.panel('options').split), onStartResize: function(e){ resizing = true; if (dir == 'north' || dir == 'south'){ var proxy = $('>div.layout-split-proxy-v', container); } else { var proxy = $('>div.layout-split-proxy-h', container); } var top=0,left=0,width=0,height=0; var pos = {display: 'block'}; if (dir == 'north'){ pos.top = parseInt(panel.css('top')) + panel.outerHeight() - proxy.height(); pos.left = parseInt(panel.css('left')); pos.width = panel.outerWidth(); pos.height = proxy.height(); } else if (dir == 'south'){ pos.top = parseInt(panel.css('top')); pos.left = parseInt(panel.css('left')); pos.width = panel.outerWidth(); pos.height = proxy.height(); } else if (dir == 'east'){ pos.top = parseInt(panel.css('top')) || 0; pos.left = parseInt(panel.css('left')) || 0; pos.width = proxy.width(); pos.height = panel.outerHeight(); } else if (dir == 'west'){ pos.top = parseInt(panel.css('top')) || 0; pos.left = panel.outerWidth() - proxy.width(); pos.width = proxy.width(); pos.height = panel.outerHeight(); } proxy.css(pos); $('
                  ').css({ left:0, top:0, width:cc.width(), height:cc.height() }).appendTo(cc); }, onResize: function(e){ if (dir == 'north' || dir == 'south'){ var maxHeight = _getMaxSize(this); $(this).resizable('options').maxHeight = maxHeight; var proxy = $('>div.layout-split-proxy-v', container); var top = dir=='north' ? e.data.height-proxy.height() : $(container).height()-e.data.height; proxy.css('top', top); } else { var maxWidth = _getMaxSize(this); $(this).resizable('options').maxWidth = maxWidth; var proxy = $('>div.layout-split-proxy-h', container); var left = dir=='west' ? e.data.width-proxy.width() : $(container).width()-e.data.width; proxy.css('left', left); } return false; }, onStopResize: function(e){ cc.children('div.layout-split-proxy-v,div.layout-split-proxy-h').hide(); pp.panel('resize',e.data); setSize(container); resizing = false; cc.find('>div.layout-mask').remove(); } }, param)); cc.layout('options').onAdd.call(container, dir); function _getMaxSize(p){ var expandP = 'expand' + dir.substring(0,1).toUpperCase() + dir.substring(1); var pcenter = panels['center']; var minSizeName = (dir=='north'||dir=='south')?'minHeight':'minWidth'; var maxSizeName = (dir=='north'||dir=='south')?'maxHeight':'maxWidth'; var outerName = (dir=='north'||dir=='south')?'_outerHeight':'_outerWidth'; var pmaxSize = $.parser.parseValue(maxSizeName,panels[dir].panel('options')[maxSizeName],$(container)); var cminSize = $.parser.parseValue(minSizeName,pcenter.panel('options')[minSizeName],$(container)); var maxSize = pcenter.panel('panel')[outerName]()-cminSize; if (isVisible(panels[expandP])){ maxSize += panels[expandP][outerName]()-1; } else { maxSize += $(p)[outerName](); } if (maxSize>pmaxSize){ maxSize = pmaxSize; } return maxSize; } } /** * remove a region panel */ function removePanel(container, region){ var panels = $.data(container, 'layout').panels; if (panels[region].length){ panels[region].panel('destroy'); panels[region] = $(); var expandP = 'expand' + region.substring(0,1).toUpperCase() + region.substring(1); if (panels[expandP]){ panels[expandP].panel('destroy'); panels[expandP] = undefined; } $(container).layout('options').onRemove.call(container, region); } } function collapsePanel(container, region, animateSpeed){ if (animateSpeed == undefined){animateSpeed = 'normal';} var panels = $.data(container, 'layout').panels; var p = panels[region]; var popts = p.panel('options'); if (popts.onBeforeCollapse.call(p) == false) return; // expand panel name: expandNorth, expandSouth, expandWest, expandEast var expandP = 'expand' + region.substring(0,1).toUpperCase() + region.substring(1); if (!panels[expandP]){ panels[expandP] = createExpandPanel(region); var ep = panels[expandP].panel('panel'); if (!popts.expandMode){ ep.css('cursor', 'default'); } else { ep.bind('click', function(){ if (popts.expandMode == 'dock'){ expandPanel(container, region); } else { p.panel('expand',false).panel('open'); var copts = getOption(); p.panel('resize', copts.collapse); p.panel('panel').animate(copts.expand, function(){ $(this).unbind('.layout').bind('mouseleave.layout', {region:region}, function(e){ if (resizing == true){return;} if ($('body>div.combo-p>div.combo-panel:visible').length){return;} collapsePanel(container, e.data.region); }); $(container).layout('options').onExpand.call(container, region); }); } return false; }); } } var copts = getOption(); if (!isVisible(panels[expandP])){ panels.center.panel('resize', copts.resizeC); } p.panel('panel').animate(copts.collapse, animateSpeed, function(){ p.panel('collapse',false).panel('close'); panels[expandP].panel('open').panel('resize', copts.expandP); $(this).unbind('.layout'); $(container).layout('options').onCollapse.call(container, region); }); /** * create expand panel */ function createExpandPanel(dir){ var iconMap = { 'east':'left', 'west':'right', 'north':'down', 'south':'up' }; var isns = (popts.region=='north' || popts.region=='south'); var icon = 'layout-button-' + iconMap[dir]; var p = $('
                  ').appendTo(container); p.panel($.extend({}, $.fn.layout.paneldefaults, { cls: ('layout-expand layout-expand-' + dir), title: ' ', titleDirection: popts.titleDirection, iconCls: (popts.hideCollapsedContent ? null : popts.iconCls), closed: true, minWidth: 0, minHeight: 0, doSize: false, region: popts.region, collapsedSize: popts.collapsedSize, noheader: (!isns && popts.hideExpandTool), tools: ((isns && popts.hideExpandTool) ? null : [{ iconCls: icon, handler:function(){ expandPanel(container, region); return false; } }]), onResize: function(){ var ptitle = $(this).children('.layout-expand-title'); if (ptitle.length){ ptitle._outerWidth($(this).height()); var left = ($(this).width()-Math.min(ptitle._outerWidth(),ptitle._outerHeight()))/2; var top = Math.max(ptitle._outerWidth(),ptitle._outerHeight()); if (ptitle.hasClass('layout-expand-title-down')){ left += Math.min(ptitle._outerWidth(),ptitle._outerHeight()); top = 0; } ptitle.css({ left: (left+'px'), top: (top+'px') }); } } })); if (!popts.hideCollapsedContent){ var title = typeof popts.collapsedContent=='function' ? popts.collapsedContent.call(p[0],popts.title) : popts.collapsedContent; isns ? p.panel('setTitle', title) : p.html(title); } p.panel('panel').hover( function(){$(this).addClass('layout-expand-over');}, function(){$(this).removeClass('layout-expand-over');} ); return p; } /** * get collapse option:{ * resizeC:{}, * expand:{}, * expandP:{}, // the expand holder panel * collapse:{} * } */ function getOption(){ var cc = $(container); var copts = panels.center.panel('options'); var csize = popts.collapsedSize; if (region == 'east'){ var pwidth = p.panel('panel')._outerWidth(); var cwidth = copts.width + pwidth - csize; if (popts.split || !popts.border){cwidth++;} return { resizeC:{ width: cwidth }, expand:{ left: cc.width() - pwidth }, expandP:{ top: copts.top, left: cc.width() - csize, width: csize, height: copts.height }, collapse:{ left: cc.width(), top: copts.top, height: copts.height } }; } else if (region == 'west'){ var pwidth = p.panel('panel')._outerWidth(); var cwidth = copts.width + pwidth - csize; if (popts.split || !popts.border){cwidth++;} return { resizeC:{ width: cwidth, left: csize - 1 }, expand:{ left: 0 }, expandP:{ left: 0, top: copts.top, width: csize, height: copts.height }, collapse:{ left: -pwidth, top: copts.top, height: copts.height } }; } else if (region == 'north'){ var pheight = p.panel('panel')._outerHeight(); var hh = copts.height; if (!isVisible(panels.expandNorth)){ hh += pheight - csize + ((popts.split || !popts.border)?1:0); } panels.east.add(panels.west).add(panels.expandEast).add(panels.expandWest).panel('resize', { top: csize - 1, height: hh }); return { resizeC:{ top: csize - 1, height: hh }, expand:{ top:0 }, expandP:{ top: 0, left: 0, width: cc.width(), height: csize }, collapse:{ top: -pheight, width: cc.width() } }; } else if (region == 'south'){ var pheight = p.panel('panel')._outerHeight(); var hh = copts.height; if (!isVisible(panels.expandSouth)){ hh += pheight - csize + ((popts.split || !popts.border)?1:0); } panels.east.add(panels.west).add(panels.expandEast).add(panels.expandWest).panel('resize', { height: hh }); return { resizeC:{ height: hh }, expand:{ top: cc.height()-pheight }, expandP:{ top: cc.height() - csize, left: 0, width: cc.width(), height: csize }, collapse:{ top: cc.height(), width: cc.width() } }; } } } function expandPanel(container, region){ var panels = $.data(container, 'layout').panels; var p = panels[region]; var popts = p.panel('options'); if (popts.onBeforeExpand.call(p) == false){return;} var expandP = 'expand' + region.substring(0,1).toUpperCase() + region.substring(1); if (panels[expandP]){ panels[expandP].panel('close'); p.panel('panel').stop(true,true); p.panel('expand',false).panel('open'); var eopts = getOption(); p.panel('resize', eopts.collapse); p.panel('panel').animate(eopts.expand, function(){ setSize(container); $(container).layout('options').onExpand.call(container, region); }); } /** * get expand option: { * collapse:{}, * expand:{} * } */ function getOption(){ var cc = $(container); var copts = panels.center.panel('options'); if (region == 'east' && panels.expandEast){ return { collapse:{ left: cc.width(), top: copts.top, height: copts.height }, expand:{ left: cc.width() - p.panel('panel')._outerWidth() } }; } else if (region == 'west' && panels.expandWest){ return { collapse:{ left: -p.panel('panel')._outerWidth(), top: copts.top, height: copts.height }, expand:{ left: 0 } }; } else if (region == 'north' && panels.expandNorth){ return { collapse:{ top: -p.panel('panel')._outerHeight(), width: cc.width() }, expand:{ top: 0 } }; } else if (region == 'south' && panels.expandSouth){ return { collapse:{ top: cc.height(), width: cc.width() }, expand:{ top: cc.height()-p.panel('panel')._outerHeight() } }; } } } function isVisible(pp){ if (!pp) return false; if (pp.length){ return pp.panel('panel').is(':visible'); } else { return false; } } function initCollapse(container){ var state = $.data(container, 'layout'); var opts = state.options; var panels = state.panels; var onCollapse = opts.onCollapse; opts.onCollapse = function(){}; _collapse('east'); _collapse('west'); _collapse('north'); _collapse('south'); opts.onCollapse = onCollapse; function _collapse(region){ var p = panels[region]; if (p.length && p.panel('options').collapsed){ collapsePanel(container, region, 0); } } } function setSplit(container, region, isSplit){ var p = $(container).layout('panel', region); p.panel('options').split = isSplit; var cls = 'layout-split-' + region; var panel = p.panel('panel').removeClass(cls); if (isSplit){panel.addClass(cls);} panel.resizable({disabled:(!isSplit)}); setSize(container); } $.fn.layout = function(options, param){ if (typeof options == 'string'){ return $.fn.layout.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'layout'); if (state){ $.extend(state.options, options); } else { var opts = $.extend({}, $.fn.layout.defaults, $.fn.layout.parseOptions(this), options); $.data(this, 'layout', { options: opts, panels: {center:$(), north:$(), south:$(), east:$(), west:$()} }); init(this); // bindEvents(this); } setSize(this); initCollapse(this); }); }; $.fn.layout.methods = { options: function(jq){ return $.data(jq[0], 'layout').options; }, resize: function(jq, param){ return jq.each(function(){ setSize(this, param); }); }, panel: function(jq, region){ return $.data(jq[0], 'layout').panels[region]; }, collapse: function(jq, region){ return jq.each(function(){ collapsePanel(this, region); }); }, expand: function(jq, region){ return jq.each(function(){ expandPanel(this, region); }); }, add: function(jq, options){ return jq.each(function(){ addPanel(this, options); setSize(this); if ($(this).layout('panel', options.region).panel('options').collapsed){ collapsePanel(this, options.region, 0); } }); }, remove: function(jq, region){ return jq.each(function(){ removePanel(this, region); setSize(this); }); }, split: function(jq, region){ return jq.each(function(){ setSplit(this, region, true); }); }, unsplit: function(jq, region){ return jq.each(function(){ setSplit(this, region, false); }); } }; $.fn.layout.parseOptions = function(target){ return $.extend({}, $.parser.parseOptions(target,[{fit:'boolean'}])); }; $.fn.layout.defaults = { fit: false, onExpand: function(region){}, onCollapse: function(region){}, onAdd: function(region){}, onRemove: function(region){} }; $.fn.layout.parsePanelOptions = function(target){ var t = $(target); return $.extend({}, $.fn.panel.parseOptions(target), $.parser.parseOptions(target, [ 'region',{split:'boolean',collpasedSize:'number',minWidth:'number',minHeight:'number',maxWidth:'number',maxHeight:'number'} ])); }; $.fn.layout.paneldefaults = $.extend({}, $.fn.panel.defaults, { region:null, // possible values are: 'north','south','east','west','center' split:false, collapsedSize:28, expandMode:'float', // possible values are: 'float','dock',null hideExpandTool:false, hideCollapsedContent:true, collapsedContent: function(title){ var p = $(this); var opts = p.panel('options'); if (opts.region == 'north' || opts.region == 'south'){ return title; } var cc = []; if (opts.iconCls){ cc.push('
                  '); } cc.push('
                  '); cc.push(title); cc.push('
                  '); return cc.join(''); }, minWidth:10, minHeight:10, maxWidth:10000, maxHeight:10000 }); })(jQuery); /** * menu - EasyUI for jQuery * */ (function($){ $(function(){ $(document).unbind('.menu').bind('mousedown.menu', function(e){ var m = $(e.target).closest('div.menu,div.combo-p'); if (m.length){return} $('body>div.menu-top:visible').not('.menu-inline').menu('hide'); hideMenu($('body>div.menu:visible').not('.menu-inline')); }); }); /** * initialize the target menu, the function can be invoked only once */ function init(target){ var opts = $.data(target, 'menu').options; $(target).addClass('menu-top'); // the top menu opts.inline ? $(target).addClass('menu-inline') : $(target).appendTo('body'); $(target).bind('_resize', function(e, force){ if ($(this).hasClass('easyui-fluid') || force){ $(target).menu('resize', target); } return false; }); var menus = splitMenu($(target)); for(var i=0; i
                  ').prependTo(menu); } setMenuSize(target, menu); if (!menu.hasClass('menu-inline')){ menu.hide(); } bindMenuEvent(target, menu); } /** * create the menu item */ function createItem(target, div, options){ var item = $(div); var itemOpts = $.extend({}, $.parser.parseOptions(item[0], ['id','name','iconCls','href',{separator:'boolean'}]), { disabled: (item.attr('disabled') ? true : undefined), text: $.trim(item.html()), onclick: item[0].onclick }, options||{}); itemOpts.onclick = itemOpts.onclick || itemOpts.handler || null; item.data('menuitem', { options: itemOpts }); if (itemOpts.separator){ item.addClass('menu-sep'); } if (!item.hasClass('menu-sep')){ item.addClass('menu-item'); item.empty().append($('').html(itemOpts.text)); if (itemOpts.iconCls){ $('').addClass(itemOpts.iconCls).appendTo(item); } if (itemOpts.id){ item.attr('id', itemOpts.id); } if (itemOpts.onclick){ if (typeof itemOpts.onclick == 'string'){ item.attr('onclick', itemOpts.onclick); } else { item[0].onclick = eval(itemOpts.onclick); } } if (itemOpts.disabled){ setDisabled(target, item[0], true); } if (item[0].submenu){ $('').appendTo(item); // has sub menu } } } function setMenuSize(target, menu){ var opts = $.data(target, 'menu').options; var style = menu.attr('style') || ''; var isVisible = menu.is(':visible'); menu.css({ display: 'block', left: -10000, height: 'auto', overflow: 'hidden' }); menu.find('.menu-item').each(function(){ $(this)._outerHeight(opts.itemHeight); $(this).find('.menu-text').css({ height: (opts.itemHeight-2)+'px', lineHeight: (opts.itemHeight-2)+'px' }); }); menu.removeClass('menu-noline').addClass(opts.noline?'menu-noline':''); var mopts = menu.data('menu').options; var width = mopts.width; var height = mopts.height; if (isNaN(parseInt(width))){ width = 0; menu.find('div.menu-text').each(function(){ if (width < $(this).outerWidth()){ width = $(this).outerWidth(); } }); // width += 40; width = width ? width+40 : ''; } var autoHeight = menu.outerHeight(); if (isNaN(parseInt(height))){ height = autoHeight; if (menu.hasClass('menu-top') && opts.alignTo){ var at = $(opts.alignTo); var h1 = at.offset().top - $(document).scrollTop(); var h2 = $(window)._outerHeight() + $(document).scrollTop() - at.offset().top - at._outerHeight(); height = Math.min(height, Math.max(h1, h2)); } else if (height > $(window)._outerHeight()){ height = $(window).height(); } } menu.attr('style', style); // restore the original style menu.show(); menu._size($.extend({}, mopts, { width: width, height: height, minWidth: mopts.minWidth || opts.minWidth, maxWidth: mopts.maxWidth || opts.maxWidth })); menu.find('.easyui-fluid').triggerHandler('_resize', [true]); menu.css('overflow', menu.outerHeight() < autoHeight ? 'auto' : 'hidden'); menu.children('div.menu-line')._outerHeight(autoHeight-2); if (!isVisible){ menu.hide(); } } /** * bind menu event */ function bindMenuEvent(target, menu){ var state = $.data(target, 'menu'); var opts = state.options; menu.unbind('.menu'); for(var event in opts.events){ menu.bind(event+'.menu', {target:target}, opts.events[event]); } } function mouseenterHandler(e){ var target = e.data.target; var state = $.data(target, 'menu'); if (state.timer){ clearTimeout(state.timer); state.timer = null; } } function mouseleaveHandler(e){ var target = e.data.target; var state = $.data(target, 'menu'); if (state.options.hideOnUnhover){ state.timer = setTimeout(function(){ hideAll(target, $(target).hasClass('menu-inline')); }, state.options.duration); } } function mouseoverHandler(e){ var target = e.data.target; var item = $(e.target).closest('.menu-item'); if (item.length){ item.siblings().each(function(){ if (this.submenu){ hideMenu(this.submenu); } $(this).removeClass('menu-active'); }); // show this menu item.addClass('menu-active'); if (item.hasClass('menu-item-disabled')){ item.addClass('menu-active-disabled'); return; } var submenu = item[0].submenu; if (submenu){ $(target).menu('show', { menu: submenu, parent: item }); } } } function mouseoutHandler(e){ var item = $(e.target).closest('.menu-item'); if (item.length){ item.removeClass('menu-active menu-active-disabled'); var submenu = item[0].submenu; if (submenu){ if (e.pageX>=parseInt(submenu.css('left'))){ item.addClass('menu-active'); } else { hideMenu(submenu); } } else { item.removeClass('menu-active'); } } } function clickHandler(e){ var target = e.data.target; var item = $(e.target).closest('.menu-item'); if (item.length){ var opts = $(target).data('menu').options; var itemOpts = item.data('menuitem').options; if (itemOpts.disabled){return;} if (!item[0].submenu){ hideAll(target, opts.inline); if (itemOpts.href){ location.href = itemOpts.href; } } item.trigger('mouseenter'); opts.onClick.call(target, $(target).menu('getItem', item[0])); } } /** * hide top menu and it's all sub menus */ function hideAll(target, inline){ var state = $.data(target, 'menu'); if (state){ if ($(target).is(':visible')){ hideMenu($(target)); if (inline){ $(target).show(); } else { state.options.onHide.call(target); } } } return false; } /** * show the menu, the 'param' object has one or more properties: * left: the left position to display * top: the top position to display * menu: the menu to display, if not defined, the 'target menu' is used * parent: the parent menu item to align to * alignTo: the element object to align to */ function showMenu(target, param){ param = param || {}; var left,top; var opts = $.data(target, 'menu').options; var menu = $(param.menu || target); $(target).menu('resize', menu[0]); if (menu.hasClass('menu-top')){ $.extend(opts, param); left = opts.left; top = opts.top; if (opts.alignTo){ var at = $(opts.alignTo); left = at.offset().left; top = at.offset().top + at._outerHeight(); if (opts.align == 'right'){ left += at.outerWidth() - menu.outerWidth(); } } if (left + menu.outerWidth() > $(window)._outerWidth() + $(document)._scrollLeft()){ left = $(window)._outerWidth() + $(document).scrollLeft() - menu.outerWidth() - 5; } if (left < 0){left = 0;} top = _fixTop(top, opts.alignTo); } else { var parent = param.parent; // the parent menu item left = parent.offset().left + parent.outerWidth() - 2; if (left + menu.outerWidth() + 5 > $(window)._outerWidth() + $(document).scrollLeft()){ left = parent.offset().left - menu.outerWidth() + 2; } top = _fixTop(parent.offset().top - 3); } function _fixTop(top, alignTo){ if (top + menu.outerHeight() > $(window)._outerHeight() + $(document).scrollTop()){ if (alignTo){ top = $(alignTo).offset().top - menu._outerHeight(); } else { top = $(window)._outerHeight() + $(document).scrollTop() - menu.outerHeight(); } } if (top < 0){top = 0;} return top; } menu.css(opts.position.call(target, menu[0], left, top)); menu.show(0, function(){ if (!menu[0].shadow){ menu[0].shadow = $('').insertAfter(menu); } menu[0].shadow.css({ display:(menu.hasClass('menu-inline')?'none':'block'), zIndex:$.fn.menu.defaults.zIndex++, left:menu.css('left'), top:menu.css('top'), width:menu.outerWidth(), height:menu.outerHeight() }); menu.css('z-index', $.fn.menu.defaults.zIndex++); if (menu.hasClass('menu-top')){ opts.onShow.call(target); } }); } function hideMenu(menu){ if (menu && menu.length){ hideit(menu); menu.find('div.menu-item').each(function(){ if (this.submenu){ hideMenu(this.submenu); } $(this).removeClass('menu-active'); }); } function hideit(m){ m.stop(true,true); if (m[0].shadow){ m[0].shadow.hide(); } m.hide(); } } function findItem(target, text){ var result = null; var tmp = $('
                  '); function find(menu){ menu.children('div.menu-item').each(function(){ var item = $(target).menu('getItem', this); var s = tmp.empty().html(item.text).text(); if (text == $.trim(s)) { result = item; } else if (this.submenu && !result){ find(this.submenu); } }); } find($(target)); tmp.remove(); return result; } function setDisabled(target, itemEl, disabled){ var t = $(itemEl); if (t.hasClass('menu-item')){ var opts = t.data('menuitem').options; opts.disabled = disabled; if (disabled){ t.addClass('menu-item-disabled'); t[0].onclick = null; } else { t.removeClass('menu-item-disabled'); t[0].onclick = opts.onclick; } } } function appendItem(target, param){ var opts = $.data(target, 'menu').options; var menu = $(target); if (param.parent){ if (!param.parent.submenu){ var submenu = $('
                  ').appendTo('body'); param.parent.submenu = submenu; $('').appendTo(param.parent); createMenu(target, submenu); } menu = param.parent.submenu; } var div = $('
                  ').appendTo(menu); createItem(target, div, param); } function removeItem(target, itemEl){ function removeit(el){ if (el.submenu){ el.submenu.children('div.menu-item').each(function(){ removeit(this); }); var shadow = el.submenu[0].shadow; if (shadow) shadow.remove(); el.submenu.remove(); } $(el).remove(); } removeit(itemEl); } function setVisible(target, itemEl, visible){ var menu = $(itemEl).parent(); if (visible){ $(itemEl).show(); } else { $(itemEl).hide(); } setMenuSize(target, menu); } function destroyMenu(target){ $(target).children('div.menu-item').each(function(){ removeItem(target, this); }); if (target.shadow) target.shadow.remove(); $(target).remove(); } $.fn.menu = function(options, param){ if (typeof options == 'string'){ return $.fn.menu.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'menu'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'menu', { options: $.extend({}, $.fn.menu.defaults, $.fn.menu.parseOptions(this), options) }); init(this); } $(this).css({ left: state.options.left, top: state.options.top }); }); }; $.fn.menu.methods = { options: function(jq){ return $.data(jq[0], 'menu').options; }, show: function(jq, pos){ return jq.each(function(){ showMenu(this, pos); }); }, hide: function(jq){ return jq.each(function(){ hideAll(this); }); }, destroy: function(jq){ return jq.each(function(){ destroyMenu(this); }); }, /** * set the menu item text * param: { * target: DOM object, indicate the menu item * text: string, the new text * } */ setText: function(jq, param){ return jq.each(function(){ var item = $(param.target).data('menuitem').options; item.text = param.text; $(param.target).children('div.menu-text').html(param.text); }); }, /** * set the menu icon class * param: { * target: DOM object, indicate the menu item * iconCls: the menu item icon class * } */ setIcon: function(jq, param){ return jq.each(function(){ var item = $(param.target).data('menuitem').options; item.iconCls = param.iconCls; $(param.target).children('div.menu-icon').remove(); if (param.iconCls){ $('').addClass(param.iconCls).appendTo(param.target); } }); }, /** * get the menu item data that contains the following property: * { * target: DOM object, the menu item * id: the menu id * text: the menu item text * iconCls: the icon class * href: a remote address to redirect to * onclick: a function to be called when the item is clicked * } */ getItem: function(jq, itemEl){ var item = $(itemEl).data('menuitem').options; return $.extend({}, item, { target: $(itemEl)[0] }); }, findItem: function(jq, text){ return findItem(jq[0], text); }, /** * append menu item, the param contains following properties: * parent,id,text,iconCls,href,onclick * when parent property is assigned, append menu item to it */ appendItem: function(jq, param){ return jq.each(function(){ appendItem(this, param); }); }, removeItem: function(jq, itemEl){ return jq.each(function(){ removeItem(this, itemEl); }); }, enableItem: function(jq, itemEl){ return jq.each(function(){ setDisabled(this, itemEl, false); }); }, disableItem: function(jq, itemEl){ return jq.each(function(){ setDisabled(this, itemEl, true); }); }, showItem: function(jq, itemEl){ return jq.each(function(){ setVisible(this, itemEl, true); }); }, hideItem: function(jq, itemEl){ return jq.each(function(){ setVisible(this, itemEl, false); }); }, resize: function(jq, menuEl){ return jq.each(function(){ setMenuSize(this, menuEl ? $(menuEl) : $(this)); }); } }; $.fn.menu.parseOptions = function(target){ return $.extend({}, $.parser.parseOptions(target, [ {minWidth:'number',itemHeight:'number',duration:'number',hideOnUnhover:'boolean'}, {fit:'boolean',inline:'boolean',noline:'boolean'} ])); }; $.fn.menu.defaults = { zIndex:110000, left: 0, top: 0, alignTo: null, align: 'left', minWidth: 120, itemHeight: 22, duration: 100, // Defines duration time in milliseconds to hide when the mouse leaves the menu. hideOnUnhover: true, // Automatically hides the menu when mouse exits it inline: false, // true to stay inside its parent, false to go on top of all elements fit: false, noline: false, events: { mouseenter: mouseenterHandler, mouseleave: mouseleaveHandler, mouseover: mouseoverHandler, mouseout: mouseoutHandler, click: clickHandler }, position: function(target, left, top){ return {left:left,top:top} }, onShow: function(){}, onHide: function(){}, onClick: function(item){} }; })(jQuery); /** * menubutton - EasyUI for jQuery * * Dependencies: * linkbutton * menu */ (function($){ function init(target){ var opts = $.data(target, 'menubutton').options; var btn = $(target); btn.linkbutton(opts); if (opts.hasDownArrow){ btn.removeClass(opts.cls.btn1+' '+opts.cls.btn2).addClass('m-btn'); btn.removeClass('m-btn-small m-btn-medium m-btn-large').addClass('m-btn-'+opts.size); var inner = btn.find('.l-btn-left'); $('').addClass(opts.cls.arrow).appendTo(inner); $('').addClass('m-btn-line').appendTo(inner); } $(target).menubutton('resize'); if (opts.menu){ $(opts.menu).menu({duration:opts.duration}); var mopts = $(opts.menu).menu('options'); var onShow = mopts.onShow; var onHide = mopts.onHide; $.extend(mopts, { onShow: function(){ var mopts = $(this).menu('options'); var btn = $(mopts.alignTo); var opts = btn.menubutton('options'); btn.addClass((opts.plain==true) ? opts.cls.btn2 : opts.cls.btn1); onShow.call(this); }, onHide: function(){ var mopts = $(this).menu('options'); var btn = $(mopts.alignTo); var opts = btn.menubutton('options'); btn.removeClass((opts.plain==true) ? opts.cls.btn2 : opts.cls.btn1); onHide.call(this); } }); } } function bindEvents(target){ var opts = $.data(target, 'menubutton').options; var btn = $(target); var t = btn.find('.'+opts.cls.trigger); if (!t.length){t = btn} t.unbind('.menubutton'); var timeout = null; t.bind('click.menubutton', function(){ if (!isDisabled()){ showMenu(target); return false; } }).bind('mouseenter.menubutton', function(){ if (!isDisabled()){ timeout = setTimeout(function(){ showMenu(target); }, opts.duration); return false; } }).bind('mouseleave.menubutton', function(){ if (timeout){ clearTimeout(timeout); } $(opts.menu).triggerHandler('mouseleave'); }); function isDisabled(){ return $(target).linkbutton('options').disabled; } } function showMenu(target){ // var opts = $.data(target, 'menubutton').options; var opts = $(target).menubutton('options'); if (opts.disabled || !opts.menu){return} $('body>div.menu-top').menu('hide'); var btn = $(target); var mm = $(opts.menu); if (mm.length){ mm.menu('options').alignTo = btn; mm.menu('show', {alignTo:btn,align:opts.menuAlign}); } btn.blur(); } $.fn.menubutton = function(options, param){ if (typeof options == 'string'){ var method = $.fn.menubutton.methods[options]; if (method){ return method(this, param); } else { return this.linkbutton(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'menubutton'); if (state){ $.extend(state.options, options); } else { $.data(this, 'menubutton', { options: $.extend({}, $.fn.menubutton.defaults, $.fn.menubutton.parseOptions(this), options) }); $(this).removeAttr('disabled'); } init(this); bindEvents(this); }); }; $.fn.menubutton.methods = { options: function(jq){ var bopts = jq.linkbutton('options'); return $.extend($.data(jq[0], 'menubutton').options, { toggle: bopts.toggle, selected: bopts.selected, disabled: bopts.disabled }); }, destroy: function(jq){ return jq.each(function(){ var opts = $(this).menubutton('options'); if (opts.menu){ $(opts.menu).menu('destroy'); } $(this).remove(); }); } }; $.fn.menubutton.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.linkbutton.parseOptions(target), $.parser.parseOptions(target, [ 'menu',{plain:'boolean',hasDownArrow:'boolean',duration:'number'} ])); }; $.fn.menubutton.defaults = $.extend({}, $.fn.linkbutton.defaults, { plain: true, hasDownArrow: true, menu: null, menuAlign: 'left', // the top level menu alignment duration: 100, cls: { btn1: 'm-btn-active', btn2: 'm-btn-plain-active', arrow: 'm-btn-downarrow', trigger: 'm-btn' } }); })(jQuery); /** * splitbutton - EasyUI for jQuery * * Dependencies: * menubutton */ (function($){ function init(target){ var opts = $.data(target, 'splitbutton').options; $(target).menubutton(opts); $(target).addClass('s-btn'); } $.fn.splitbutton = function(options, param){ if (typeof options == 'string'){ var method = $.fn.splitbutton.methods[options]; if (method){ return method(this, param); } else { return this.menubutton(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'splitbutton'); if (state){ $.extend(state.options, options); } else { $.data(this, 'splitbutton', { options: $.extend({}, $.fn.splitbutton.defaults, $.fn.splitbutton.parseOptions(this), options) }); $(this).removeAttr('disabled'); } init(this); }); }; $.fn.splitbutton.methods = { options: function(jq){ var mopts = jq.menubutton('options'); var sopts = $.data(jq[0], 'splitbutton').options; $.extend(sopts, { disabled: mopts.disabled, toggle: mopts.toggle, selected: mopts.selected }); return sopts; } }; $.fn.splitbutton.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.linkbutton.parseOptions(target), $.parser.parseOptions(target, ['menu',{plain:'boolean',duration:'number'}])); }; $.fn.splitbutton.defaults = $.extend({}, $.fn.linkbutton.defaults, { plain: true, menu: null, duration: 100, cls: { btn1: 'm-btn-active s-btn-active', btn2: 'm-btn-plain-active s-btn-plain-active', arrow: 'm-btn-downarrow', trigger: 'm-btn-line' } }); })(jQuery); /** * switchbutton - EasyUI for jQuery */ (function($){ function init(target){ var button = $( '' + '' + '' + '' + '' + '' + '' + '').insertAfter(target); var t = $(target); t.addClass('switchbutton-f').hide(); var name = t.attr('name'); if (name){ t.removeAttr('name').attr('switchbuttonName', name); button.find('.switchbutton-value').attr('name', name); } button.bind('_resize', function(e,force){ if ($(this).hasClass('easyui-fluid') || force){ setSize(target); } return false; }); return button; } function setSize(target, param){ var state = $.data(target, 'switchbutton'); var opts = state.options; var button = state.switchbutton; if (param){ $.extend(opts, param); } var isVisible = button.is(':visible'); if (!isVisible){ button.appendTo('body'); } button._size(opts); var w = button.width(); var h = button.height(); var w = button.outerWidth(); var h = button.outerHeight(); var handleWidth = parseInt(opts.handleWidth) || button.height(); var innerWidth = w * 2 - handleWidth; button.find('.switchbutton-inner').css({ width: innerWidth+'px', height: h+'px', lineHeight: h+'px' }); button.find('.switchbutton-handle')._outerWidth(handleWidth)._outerHeight(h).css({ marginLeft: -handleWidth/2+'px' }); button.find('.switchbutton-on').css({ width: (w - handleWidth/2)+'px', textIndent: (opts.reversed ? '' : '-')+handleWidth/2+'px' }); button.find('.switchbutton-off').css({ width: (w - handleWidth/2)+'px', textIndent: (opts.reversed ? '-' : '')+handleWidth/2+'px' }); opts.marginWidth = w - handleWidth; checkButton(target, opts.checked, false); if (!isVisible){ button.insertAfter(target); } } function createButton(target){ var state = $.data(target, 'switchbutton'); var opts = state.options; var button = state.switchbutton; var inner = button.find('.switchbutton-inner'); var on = inner.find('.switchbutton-on').html(opts.onText); var off = inner.find('.switchbutton-off').html(opts.offText); var handle = inner.find('.switchbutton-handle').html(opts.handleText); if (opts.reversed){ off.prependTo(inner); on.insertAfter(handle); } else { on.prependTo(inner); off.insertAfter(handle); } button.find('.switchbutton-value')._propAttr('checked', opts.checked); button.removeClass('switchbutton-disabled').addClass(opts.disabled ? 'switchbutton-disabled' : ''); button.removeClass('switchbutton-reversed').addClass(opts.reversed ? 'switchbutton-reversed' : ''); checkButton(target, opts.checked); setReadonly(target, opts.readonly); $(target).switchbutton('setValue', opts.value); } function checkButton(target, checked, animate){ var state = $.data(target, 'switchbutton'); var opts = state.options; opts.checked = checked; var inner = state.switchbutton.find('.switchbutton-inner'); var labelOn = inner.find('.switchbutton-on'); var margin = opts.reversed ? (opts.checked?opts.marginWidth:0) : (opts.checked?0:opts.marginWidth); var dir = labelOn.css('float').toLowerCase(); var css = {}; css['margin-'+dir] = -margin+'px'; animate ? inner.animate(css, 200) : inner.css(css); var input = inner.find('.switchbutton-value'); var ck = input.is(':checked'); $(target).add(input)._propAttr('checked', opts.checked); if (ck != opts.checked){ opts.onChange.call(target, opts.checked); } } function setDisabled(target, disabled){ var state = $.data(target, 'switchbutton'); var opts = state.options; var button = state.switchbutton; var input = button.find('.switchbutton-value'); if (disabled){ opts.disabled = true; $(target).add(input).attr('disabled', 'disabled'); button.addClass('switchbutton-disabled'); } else { opts.disabled = false; $(target).add(input).removeAttr('disabled'); button.removeClass('switchbutton-disabled'); } } function setReadonly(target, mode){ var state = $.data(target, 'switchbutton'); var opts = state.options; opts.readonly = mode==undefined ? true : mode; state.switchbutton.removeClass('switchbutton-readonly').addClass(opts.readonly ? 'switchbutton-readonly' : ''); } function bindEvents(target){ var state = $.data(target, 'switchbutton'); var opts = state.options; state.switchbutton.unbind('.switchbutton').bind('click.switchbutton', function(){ if (!opts.disabled && !opts.readonly){ checkButton(target, opts.checked ? false : true, true); } }); } $.fn.switchbutton = function(options, param){ if (typeof options == 'string'){ return $.fn.switchbutton.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'switchbutton'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'switchbutton', { options: $.extend({}, $.fn.switchbutton.defaults, $.fn.switchbutton.parseOptions(this), options), switchbutton: init(this) }); } state.options.originalChecked = state.options.checked; createButton(this); setSize(this); bindEvents(this); }); }; $.fn.switchbutton.methods = { options: function(jq){ var state = jq.data('switchbutton'); return $.extend(state.options, { value: state.switchbutton.find('.switchbutton-value').val() }); }, resize: function(jq, param){ return jq.each(function(){ setSize(this, param); }); }, enable: function(jq){ return jq.each(function(){ setDisabled(this, false); }); }, disable: function(jq){ return jq.each(function(){ setDisabled(this, true); }); }, readonly: function(jq, mode){ return jq.each(function(){ setReadonly(this, mode); }); }, check: function(jq){ return jq.each(function(){ checkButton(this, true); }); }, uncheck: function(jq){ return jq.each(function(){ checkButton(this, false); }); }, clear: function(jq){ return jq.each(function(){ checkButton(this, false); }); }, reset: function(jq){ return jq.each(function(){ var opts = $(this).switchbutton('options'); checkButton(this, opts.originalChecked); }); }, setValue: function(jq, value){ return jq.each(function(){ $(this).val(value); $.data(this, 'switchbutton').switchbutton.find('.switchbutton-value').val(value); }); } }; $.fn.switchbutton.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, [ 'onText','offText','handleText',{handleWidth:'number',reversed:'boolean'} ]), { value: (t.val() || undefined), checked: (t.attr('checked') ? true : undefined), disabled: (t.attr('disabled') ? true : undefined), readonly: (t.attr('readonly') ? true : undefined) }); }; $.fn.switchbutton.defaults = { handleWidth: 'auto', width: 60, height: 26, checked: false, disabled: false, readonly: false, reversed: false, onText: 'ON', offText: 'OFF', handleText: '', value: 'on', onChange: function(checked){} }; })(jQuery); /** * validatebox - EasyUI for jQuery * * Dependencies: * tooltip * */ (function($){ function init(target){ $(target).addClass('validatebox-text'); } /** * destroy the box, including it's tip object. */ function destroyBox(target){ var state = $.data(target, 'validatebox'); state.validating = false; if (state.vtimer){ clearTimeout(state.vtimer); } if (state.ftimer){ clearTimeout(state.ftimer); } $(target).tooltip('destroy'); $(target).unbind(); $(target).remove(); } function bindEvents(target){ var opts = $.data(target, 'validatebox').options; $(target).unbind('.validatebox'); if (opts.novalidate || opts.disabled){return;} for(var event in opts.events){ $(target).bind(event+'.validatebox', {target:target}, opts.events[event]); } } function focusEventHandler(e){ var target = e.data.target; var state = $.data(target, 'validatebox'); var opts = state.options; if ($(target).attr('readonly')){return;} state.validating = true; state.value = opts.val(target); // state.value = undefined; (function(){ if (!$(target).is(':visible')){ state.validating = false; } if (state.validating){ var value = opts.val(target); if (state.value != value){ // when the value changed, validate it state.value = value; if (state.vtimer){ clearTimeout(state.vtimer); } state.vtimer = setTimeout(function(){ $(target).validatebox('validate'); }, opts.delay); } else if (state.message) { opts.err(target, state.message); } state.ftimer = setTimeout(arguments.callee, opts.interval); } })(); } function blurEventHandler(e){ var target = e.data.target; var state = $.data(target, 'validatebox'); var opts = state.options; state.validating = false; if (state.vtimer){ clearTimeout(state.vtimer); state.vtimer = undefined; } if (state.ftimer){ clearTimeout(state.ftimer); state.ftimer = undefined; } if (opts.validateOnBlur){ setTimeout(function(){ $(target).validatebox('validate'); },0); } opts.err(target, state.message, 'hide'); } function mouseenterEventHandler(e){ var target = e.data.target; var state = $.data(target, 'validatebox'); state.options.err(target, state.message, 'show'); } function mouseleaveEventHandler(e){ var target = e.data.target; var state = $.data(target, 'validatebox'); if (!state.validating){ state.options.err(target, state.message, 'hide'); } } function handleError(target, message, action){ var state = $.data(target, 'validatebox'); var opts = state.options; var t = $(target); if (action == 'hide' || !message){ t.tooltip('hide'); } else { if ((t.is(':focus') && state.validating) || action=='show'){ t.tooltip($.extend({}, opts.tipOptions, { content: message, position: opts.tipPosition, deltaX: opts.deltaX, deltaY: opts.deltaY })).tooltip('show'); } } } /** * do validate action */ function validate(target){ var state = $.data(target, 'validatebox'); var opts = state.options; var box = $(target); opts.onBeforeValidate.call(target); var result = _validate(); result ? box.removeClass('validatebox-invalid') : box.addClass('validatebox-invalid'); opts.err(target, state.message); opts.onValidate.call(target, result); return result; function setTipMessage(msg){ state.message = msg; } function doValidate(vtype, vparam){ var value = opts.val(target); // the value to be validated var result = /([a-zA-Z_]+)(.*)/.exec(vtype); var rule = opts.rules[result[1]]; if (rule && value){ var param = vparam || opts.validParams || eval(result[2]); if (!rule['validator'].call(target, value, param)){ var message = rule['message']; if (param){ for(var i=0; i= param[0] && len <= param[1] }, message: 'Please enter a value between {0} and {1}.' }, remote: { validator: function(value, param){ var data = {}; data[param[1]] = value; var response = $.ajax({ url:param[0], dataType:'json', data:data, async:false, cache:false, type:'post' }).responseText; return response == 'true'; }, message: 'Please fix this field.' } }, onBeforeValidate: function(){}, onValidate: function(valid){} // fires when validation completes }; })(jQuery); /** * textbox - EasyUI for jQuery * * Dependencies: * validatebox * linkbutton * */ (function($){ var TEXTBOX_SERNO = 0; function init(target){ $(target).addClass('textbox-f').hide(); var span = $( '' + '' + '' + '' ).insertAfter(target); var name = $(target).attr('name'); if (name){ span.find('input.textbox-value').attr('name', name); $(target).removeAttr('name').attr('textboxName', name); } return span; } /** * build textbox component */ function buildTextBox(target){ var state = $.data(target, 'textbox'); var opts = state.options; var tb = state.textbox; var inputId = '_easyui_textbox_input' + (++TEXTBOX_SERNO); tb.addClass(opts.cls); tb.find('.textbox-text').remove(); if (opts.multiline){ $('').prependTo(tb); } else { $('').prependTo(tb); } $('#'+inputId).attr('tabindex', $(target).attr('tabindex')||'').css('text-align', target.style.textAlign || ''); tb.find('.textbox-addon').remove(); var bb = opts.icons ? $.extend(true, [], opts.icons) : []; if (opts.iconCls){ bb.push({ iconCls: opts.iconCls, disabled: true }); } if (bb.length){ var bc = $('').prependTo(tb); bc.addClass('textbox-addon-'+opts.iconAlign); for(var i=0; i'); } } tb.find('.textbox-button').remove(); if (opts.buttonText || opts.buttonIcon){ var btn = $('').prependTo(tb); btn.addClass('textbox-button-'+opts.buttonAlign).linkbutton({ text: opts.buttonText, iconCls: opts.buttonIcon, onClick: function(){ var t = $(this).parent().prev(); t.textbox('options').onClickButton.call(t[0]); } }); } if (opts.label){ if (typeof opts.label == 'object'){ state.label = $(opts.label); state.label.attr('for', inputId); } else { $(state.label).remove(); state.label = $('').html(opts.label); state.label.css('textAlign', opts.labelAlign).attr('for',inputId); if (opts.labelPosition == 'after'){ state.label.insertAfter(tb); } else { state.label.insertBefore(target); } state.label.removeClass('textbox-label-left textbox-label-right textbox-label-top'); state.label.addClass('textbox-label-'+opts.labelPosition) } } else { $(state.label).remove(); } validate(target); setDisabled(target, opts.disabled); setReadonly(target, opts.readonly); } function destroy(target){ var state = $.data(target, 'textbox'); var tb = state.textbox; tb.find('.textbox-text').validatebox('destroy'); tb.remove(); $(state.label).remove(); $(target).remove(); } function setSize(target, param){ var state = $.data(target, 'textbox'); var opts = state.options; var tb = state.textbox; var parent = tb.parent(); // the parent container if (param){ if (typeof param == 'object'){ $.extend(opts, param); } else { opts.width = param; } } if (isNaN(parseInt(opts.width))){ var c = $(target).clone(); c.css('visibility','hidden'); c.insertAfter(target); opts.width = c.outerWidth(); c.remove(); } var isVisible = tb.is(':visible'); if (!isVisible){ tb.appendTo('body'); } var input = tb.find('.textbox-text'); var btn = tb.find('.textbox-button'); var addon = tb.find('.textbox-addon'); var icons = addon.find('.textbox-icon'); if (opts.height == 'auto'){ input.css({ margin:'', paddingTop:'', paddingBottom:'', height:'', lineHeight:'' }); } tb._size(opts, parent); if (opts.label && opts.labelPosition){ if (opts.labelPosition == 'top'){ state.label._size({width:opts.labelWidth=='auto'?tb.outerWidth():opts.labelWidth}, tb); if (opts.height != 'auto'){ tb._size('height', tb.outerHeight()-state.label.outerHeight()); } } else { state.label._size({width:opts.labelWidth,height:tb.outerHeight()}, tb); if (!opts.multiline){ state.label.css('lineHeight', state.label.height()+'px'); } tb._size('width', tb.outerWidth()-state.label.outerWidth()); } } if (opts.buttonAlign == 'left' || opts.buttonAlign == 'right'){ btn.linkbutton('resize', {height: tb.height()}); } else { btn.linkbutton('resize', {width: '100%'}); } var inputWidth = tb.width() - icons.length * opts.iconWidth - getButtonSize('left') - getButtonSize('right'); var inputHeight = opts.height=='auto' ? input.outerHeight() : (tb.height() - getButtonSize('top') - getButtonSize('bottom')); addon.css(opts.iconAlign, getButtonSize(opts.iconAlign)+'px'); addon.css('top', getButtonSize('top')+'px'); icons.css({ width: opts.iconWidth+'px', height: inputHeight+'px' }); input.css({ paddingLeft: (target.style.paddingLeft || ''), paddingRight: (target.style.paddingRight || ''), marginLeft: getInputMargin('left'), marginRight: getInputMargin('right'), marginTop: getButtonSize('top'), marginBottom: getButtonSize('bottom') }); if (opts.multiline){ input.css({ paddingTop: (target.style.paddingTop || ''), paddingBottom: (target.style.paddingBottom || '') }); input._outerHeight(inputHeight); } else { input.css({ paddingTop: 0, paddingBottom: 0, height: inputHeight+'px', lineHeight: inputHeight+'px' }); } input._outerWidth(inputWidth); opts.onResizing.call(target, opts.width, opts.height); if (!isVisible){ tb.insertAfter(target); } opts.onResize.call(target, opts.width, opts.height); function getInputMargin(align){ return (opts.iconAlign==align ? addon._outerWidth() : 0) + getButtonSize(align); } function getButtonSize(align){ var w = 0; btn.filter('.textbox-button-'+align).each(function(){ if (align == 'left' || align == 'right'){ w += $(this).outerWidth(); } else { w += $(this).outerHeight(); } }); return w; } } /** * create validation on the textbox */ function validate(target){ var opts = $(target).textbox('options'); var input = $(target).textbox('textbox'); input.validatebox($.extend({}, opts, { deltaX: function(position){ return $(target).textbox('getTipX', position); }, deltaY: function(position){ return $(target).textbox('getTipY', position); }, onBeforeValidate: function(){ opts.onBeforeValidate.call(target); var box = $(this); if (!box.is(':focus')){ if (box.val() !== opts.value){ opts.oldInputValue = box.val(); box.val(opts.value); } } }, onValidate: function(valid){ var box = $(this); if (opts.oldInputValue != undefined){ box.val(opts.oldInputValue); opts.oldInputValue = undefined; } var tb = box.parent(); if (valid){ tb.removeClass('textbox-invalid'); } else { tb.addClass('textbox-invalid'); } opts.onValidate.call(target, valid); } })); } function bindEvents(target){ var state = $.data(target, 'textbox'); var opts = state.options; var tb = state.textbox; var input = tb.find('.textbox-text'); input.attr('placeholder', opts.prompt); input.unbind('.textbox'); $(state.label).unbind('.textbox'); if (!opts.disabled && !opts.readonly){ if (state.label){ $(state.label).bind('click.textbox', function(e){ // at the first time, select all the value. if (!opts.hasFocusMe){ input.focus(); $(target).textbox('setSelectionRange', {start:0, end:input.val().length}); } }); } input.bind('blur.textbox', function(e){ if (!tb.hasClass('textbox-focused')){return;} opts.value = $(this).val(); if (opts.value == ''){ $(this).val(opts.prompt).addClass('textbox-prompt'); } else { $(this).removeClass('textbox-prompt'); } tb.removeClass('textbox-focused'); }).bind('focus.textbox', function(e){ opts.hasFocusMe = true; // set the focus flag if (tb.hasClass('textbox-focused')){return;} if ($(this).val() != opts.value){ $(this).val(opts.value); } $(this).removeClass('textbox-prompt'); tb.addClass('textbox-focused'); }); for(var event in opts.inputEvents){ input.bind(event+'.textbox', {target:target}, opts.inputEvents[event]); } } var addon = tb.find('.textbox-addon'); addon.unbind().bind('click', {target:target}, function(e){ var icon = $(e.target).closest('a.textbox-icon:not(.textbox-icon-disabled)'); if (icon.length){ var iconIndex = parseInt(icon.attr('icon-index')); var conf = opts.icons[iconIndex]; if (conf && conf.handler){ conf.handler.call(icon[0], e); } opts.onClickIcon.call(target, iconIndex); } }); addon.find('.textbox-icon').each(function(index){ var conf = opts.icons[index]; var icon = $(this); if (!conf || conf.disabled || opts.disabled || opts.readonly){ icon.addClass('textbox-icon-disabled'); } else { icon.removeClass('textbox-icon-disabled'); } }); var btn = tb.find('.textbox-button'); btn.linkbutton((opts.disabled || opts.readonly) ? 'disable' : 'enable'); tb.unbind('.textbox').bind('_resize.textbox', function(e, force){ if ($(this).hasClass('easyui-fluid') || force){ setSize(target); } return false; }); } function setDisabled(target, disabled){ var state = $.data(target, 'textbox'); var opts = state.options; var tb = state.textbox; var input = tb.find('.textbox-text'); var ss = $(target).add(tb.find('.textbox-value')); opts.disabled = disabled; if (opts.disabled){ input.blur(); input.validatebox('disable'); tb.addClass('textbox-disabled'); ss.attr('disabled', 'disabled'); $(state.label).addClass('textbox-label-disabled'); } else { input.validatebox('enable'); tb.removeClass('textbox-disabled'); ss.removeAttr('disabled'); $(state.label).removeClass('textbox-label-disabled'); } } function setReadonly(target, mode){ var state = $.data(target, 'textbox'); var opts = state.options; var tb = state.textbox; var input = tb.find('.textbox-text'); opts.readonly = mode==undefined ? true : mode; if (opts.readonly){ input.triggerHandler('blur.textbox'); } input.validatebox('readonly', opts.readonly); tb.removeClass('textbox-readonly').addClass(opts.readonly ? 'textbox-readonly' : ''); } $.fn.textbox = function(options, param){ if (typeof options == 'string'){ var method = $.fn.textbox.methods[options]; if (method){ return method(this, param); } else { return this.each(function(){ var input = $(this).textbox('textbox'); input.validatebox(options, param); }); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'textbox'); if (state){ $.extend(state.options, options); if (options.value != undefined){ state.options.originalValue = options.value; } } else { state = $.data(this, 'textbox', { options: $.extend({}, $.fn.textbox.defaults, $.fn.textbox.parseOptions(this), options), textbox: init(this) }); state.options.originalValue = state.options.value; } buildTextBox(this); bindEvents(this); if (state.options.doSize){ setSize(this); } var value = state.options.value; state.options.value = ''; $(this).textbox('initValue', value); }); } $.fn.textbox.methods = { options: function(jq){ return $.data(jq[0], 'textbox').options; }, cloneFrom: function(jq, from){ return jq.each(function(){ var t = $(this); if (t.data('textbox')){return} if (!$(from).data('textbox')){ $(from).textbox(); } var opts = $.extend(true, {}, $(from).textbox('options')); var name = t.attr('name') || ''; t.addClass('textbox-f').hide(); t.removeAttr('name').attr('textboxName', name); var span = $(from).next().clone().insertAfter(t); var inputId = '_easyui_textbox_input' + (++TEXTBOX_SERNO); span.find('.textbox-value').attr('name', name); span.find('.textbox-text').attr('id', inputId); var label = $($(from).textbox('label')).clone(); if (label.length){ label.attr('for', inputId); if (opts.labelPosition == 'after'){ label.insertAfter(t.next()); } else { label.insertBefore(t); } } $.data(this, 'textbox', { options: opts, textbox: span, label: (label.length ? label : undefined) }); var srcBtn = $(from).textbox('button'); if (srcBtn.length){ t.textbox('button').linkbutton($.extend(true, {}, srcBtn.linkbutton('options'))); } bindEvents(this); validate(this); }); }, textbox: function(jq){ return $.data(jq[0], 'textbox').textbox.find('.textbox-text'); }, button: function(jq){ return $.data(jq[0], 'textbox').textbox.find('.textbox-button'); }, label: function(jq){ return $.data(jq[0], 'textbox').label; }, destroy: function(jq){ return jq.each(function(){ destroy(this); }); }, resize: function(jq, width){ return jq.each(function(){ setSize(this, width); }); }, disable: function(jq){ return jq.each(function(){ setDisabled(this, true); bindEvents(this); }); }, enable: function(jq){ return jq.each(function(){ setDisabled(this, false); bindEvents(this); }); }, readonly: function(jq, mode){ return jq.each(function(){ setReadonly(this, mode); bindEvents(this); }); }, isValid: function(jq){ return jq.textbox('textbox').validatebox('isValid'); }, clear: function(jq){ return jq.each(function(){ $(this).textbox('setValue', ''); }); }, setText: function(jq, value){ return jq.each(function(){ var opts = $(this).textbox('options'); var input = $(this).textbox('textbox'); value = value == undefined ? '' : String(value); if ($(this).textbox('getText') != value){ input.val(value); } opts.value = value; if (!input.is(':focus')){ if (value){ input.removeClass('textbox-prompt'); } else { input.val(opts.prompt).addClass('textbox-prompt'); } } $(this).textbox('validate'); }); }, initValue: function(jq, value){ return jq.each(function(){ var state = $.data(this, 'textbox'); // state.options.value = ''; $(this).textbox('setText', value); state.textbox.find('.textbox-value').val(value); $(this).val(value); }); }, setValue: function(jq, value){ return jq.each(function(){ var opts = $.data(this, 'textbox').options; var oldValue = $(this).textbox('getValue'); $(this).textbox('initValue', value); if (oldValue != value){ opts.onChange.call(this, value, oldValue); $(this).closest('form').trigger('_change', [this]); } }); }, getText: function(jq){ var input = jq.textbox('textbox'); if (input.is(':focus')){ return input.val(); } else { return jq.textbox('options').value; } }, getValue: function(jq){ return jq.data('textbox').textbox.find('.textbox-value').val(); }, reset: function(jq){ return jq.each(function(){ var opts = $(this).textbox('options'); $(this).textbox('textbox').val(opts.originalValue); $(this).textbox('setValue', opts.originalValue); }); }, getIcon: function(jq, index){ return jq.data('textbox').textbox.find('.textbox-icon:eq('+index+')'); }, // getTipX: function(jq, position){ // var state = jq.data('textbox'); // var opts = state.options; // var tb = state.textbox; // var input = tb.find('.textbox-text'); // var iconWidth = tb.find('.textbox-addon')._outerWidth(); // var btnWidth = tb.find('.textbox-button')._outerWidth(); // var position = position || opts.tipPosition; // if (position == 'right'){ // return (opts.iconAlign=='right' ? iconWidth : 0) + (opts.buttonAlign=='right' ? btnWidth : 0) + 1; // } else if (position == 'left'){ // return (opts.iconAlign=='left' ? -iconWidth : 0) + (opts.buttonAlign=='left' ? -btnWidth : 0) - 1; // } else { // return iconWidth/2*(opts.iconAlign=='right'?1:-1)+btnWidth/2*(opts.buttonAlign=='right'?1:-1); // } // }, getTipX: function(jq, position){ var state = jq.data('textbox'); var opts = state.options; var tb = state.textbox; var input = tb.find('.textbox-text'); var position = position || opts.tipPosition; var p1 = tb.offset(); var p2 = input.offset(); var w1 = tb.outerWidth(); var w2 = input.outerWidth(); if (position == 'right'){ return w1-w2-p2.left+p1.left; } else if (position == 'left'){ return p1.left-p2.left; } else { return (w1-w2-p2.left+p1.left)/2 - (p2.left-p1.left)/2; } }, getTipY: function(jq, position){ var state = jq.data('textbox'); var opts = state.options; var tb = state.textbox; var input = tb.find('.textbox-text'); var position = position || opts.tipPosition; var p1 = tb.offset(); var p2 = input.offset(); var h1 = tb.outerHeight(); var h2 = input.outerHeight(); if (position == 'left' || position == 'right'){ return (h1-h2-p2.top+p1.top)/2 - (p2.top-p1.top)/2; } else if (position == 'bottom'){ return (h1-h2-p2.top+p1.top); } else { return (p1.top-p2.top); } }, getSelectionStart: function(jq){ return jq.textbox('getSelectionRange').start; }, getSelectionRange: function(jq){ var target = jq.textbox('textbox')[0]; var start = 0; var end = 0; if (typeof target.selectionStart == 'number'){ start = target.selectionStart; end = target.selectionEnd; } else if (target.createTextRange){ var s = document.selection.createRange(); var range = target.createTextRange(); range.setEndPoint("EndToStart", s); start = range.text.length; end = start + s.text.length; } return {start:start,end:end}; }, setSelectionRange: function(jq, param){ return jq.each(function(){ var target = $(this).textbox('textbox')[0]; var start = param.start; var end = param.end; if (target.setSelectionRange){ target.setSelectionRange(start, end); } else if (target.createTextRange){ var range = target.createTextRange(); range.collapse(); range.moveEnd('character', end); range.moveStart('character', start); range.select(); } }); } } $.fn.textbox.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.validatebox.parseOptions(target), $.parser.parseOptions(target, [ 'prompt','iconCls','iconAlign','buttonText','buttonIcon','buttonAlign', 'label','labelPosition','labelAlign', {multiline:'boolean',iconWidth:'number',labelWidth:'number'} ]), { value: (t.val() || undefined), type: (t.attr('type') ? t.attr('type') : undefined) }); } $.fn.textbox.defaults = $.extend({}, $.fn.validatebox.defaults, { doSize:true, width:'auto', // height:22, height:'auto', cls:null, prompt:'', value:'', type:'text', multiline:false, icons:[], // {iconCls:'icon-clear',disabled:true,handler:function(e){}} iconCls:null, iconAlign:'right', // 'left' or 'right' iconWidth:18, buttonText:'', buttonIcon:null, buttonAlign:'right', label:null, labelWidth:'auto', labelPosition:'before', // before,after,top labelAlign:'left', // left, right inputEvents:{ blur: function(e){ var t = $(e.data.target); var opts = t.textbox('options'); // t.textbox('setValue', opts.value); if (t.textbox('getValue') != opts.value){ t.textbox('setValue', opts.value); } }, keydown: function(e){ if (e.keyCode == 13){ var t = $(e.data.target); t.textbox('setValue', t.textbox('getText')); } } }, onChange: function(newValue, oldValue){}, onResizing: function(width, height){}, onResize: function(width, height){}, onClickButton: function(){}, onClickIcon: function(index){} }); })(jQuery); /** * passwordbox - EasyUI for jQuery * * Dependencies: * textbox * */ (function($){ function buildBox(target){ var state = $.data(target, 'passwordbox'); var opts = state.options; var icons = $.extend(true, [], opts.icons); if (opts.showEye){ icons.push({ iconCls: 'passwordbox-open', handler: function(e){ opts.revealed = !opts.revealed; setValue(target); } }); } $(target).addClass('passwordbox-f').textbox($.extend({}, opts, { icons: icons })); setValue(target); } // convert to password char function convert(target, value, all){ var t = $(target); var opts = t.passwordbox('options'); if (opts.revealed){ t.textbox('setValue', value); return; } var pchar = unescape(opts.passwordChar); var cc = value.split(''); var vv = t.passwordbox('getValue').split(''); for(var i=0; i').appendTo(btn); if (btn.linkbutton('options').disabled){ file.attr('disabled', 'disabled'); } else { file.removeAttr('disabled'); } } } function resetFile(target){ var state = $.data(target, 'filebox'); var opts = state.options; state.filebox.find('.textbox-value').remove(); opts.oldValue = ""; var file = $('').appendTo(state.filebox); file.attr('id', opts.fileboxId).attr('name', $(target).attr('textboxName')||''); file.attr('accept', opts.accept); file.attr('capture', opts.capture); if (opts.multiple){ file.attr('multiple', 'multiple'); } file.change(function(){ var value = this.value; if (this.files){ value = $.map(this.files, function(file){ return file.name; }).join(opts.separator); } $(target).filebox('setText', value); opts.onChange.call(target, value, opts.oldValue); opts.oldValue = value; }); return file; } $.fn.filebox = function(options, param){ if (typeof options == 'string'){ var method = $.fn.filebox.methods[options]; if (method){ return method(this, param); } else { return this.textbox(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'filebox'); if (state){ $.extend(state.options, options); } else { $.data(this, 'filebox', { options: $.extend({}, $.fn.filebox.defaults, $.fn.filebox.parseOptions(this), options) }); } buildFileBox(this); }); }; $.fn.filebox.methods = { options: function(jq){ var opts = jq.textbox('options'); return $.extend($.data(jq[0], 'filebox').options, { width: opts.width, value: opts.value, originalValue: opts.originalValue, disabled: opts.disabled, readonly: opts.readonly }); }, clear: function(jq){ return jq.each(function(){ $(this).textbox('clear'); resetFile(this); }); }, reset: function(jq){ return jq.each(function(){ $(this).filebox('clear'); }); }, setValue: function(jq){ return jq; }, setValues: function(jq){ return jq; }, files: function(jq){ return jq.next().find('.textbox-value')[0].files; } }; $.fn.filebox.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.textbox.parseOptions(target), $.parser.parseOptions(target, ['accept','capture','separator']), { multiple: (t.attr('multiple') ? true : undefined) }); }; $.fn.filebox.defaults = $.extend({}, $.fn.textbox.defaults, { buttonIcon: null, buttonText: 'Choose File', buttonAlign: 'right', inputEvents: {}, accept: '', capture: '', separator: ',', multiple: false }); })(jQuery); /** * searchbox - EasyUI for jQuery * * Dependencies: * textbox * menubutton * */ (function($){ function buildSearchBox(target){ var state = $.data(target, 'searchbox'); var opts = state.options; var icons = $.extend(true, [], opts.icons); icons.push({ iconCls:'searchbox-button', handler:function(e){ var t = $(e.data.target); var opts = t.searchbox('options'); opts.searcher.call(e.data.target, t.searchbox('getValue'), t.searchbox('getName')); } }); buildMenu(); var menuItem = getSelectedItem(); $(target).addClass('searchbox-f').textbox($.extend({}, opts, { icons: icons, buttonText: (menuItem ? menuItem.text : '') })); $(target).attr('searchboxName', $(target).attr('textboxName')); state.searchbox = $(target).next(); state.searchbox.addClass('searchbox'); attachMenuItem(menuItem); function buildMenu(){ if (opts.menu){ state.menu = $(opts.menu).menu(); var menuOpts = state.menu.menu('options'); var onClick = menuOpts.onClick; menuOpts.onClick = function(item){ attachMenuItem(item); onClick.call(this, item); } } else { if (state.menu){state.menu.menu('destroy');} state.menu = null; } } function getSelectedItem(){ if (state.menu){ var item = state.menu.children('div.menu-item:first'); state.menu.children('div.menu-item').each(function(){ var itemOpts = $.extend({}, $.parser.parseOptions(this), { selected: ($(this).attr('selected') ? true : undefined) }); if (itemOpts.selected) { item = $(this); return false; } }); return state.menu.menu('getItem', item[0]); } else { return null; } } function attachMenuItem(item){ if (!item){return;} $(target).textbox('button').menubutton({ text:item.text, iconCls:(item.iconCls||null), menu:state.menu, menuAlign:opts.buttonAlign, plain:false }); state.searchbox.find('input.textbox-value').attr('name', item.name || item.text); $(target).searchbox('resize'); } } $.fn.searchbox = function(options, param){ if (typeof options == 'string'){ var method = $.fn.searchbox.methods[options]; if (method){ return method(this, param); } else { return this.textbox(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'searchbox'); if (state){ $.extend(state.options, options); } else { $.data(this, 'searchbox', { options: $.extend({}, $.fn.searchbox.defaults, $.fn.searchbox.parseOptions(this), options) }); } buildSearchBox(this); }); } $.fn.searchbox.methods = { options: function(jq){ var opts = jq.textbox('options'); return $.extend($.data(jq[0], 'searchbox').options, { width: opts.width, value: opts.value, originalValue: opts.originalValue, disabled: opts.disabled, readonly: opts.readonly }); }, menu: function(jq){ return $.data(jq[0], 'searchbox').menu; }, getName: function(jq){ return $.data(jq[0], 'searchbox').searchbox.find('input.textbox-value').attr('name'); }, selectName: function(jq, name){ return jq.each(function(){ var menu = $.data(this, 'searchbox').menu; if (menu){ menu.children('div.menu-item').each(function(){ var item = menu.menu('getItem', this); if (item.name == name){ // $(this).triggerHandler('click'); $(this).trigger('click'); return false; } }); } }); }, destroy: function(jq){ return jq.each(function(){ var menu = $(this).searchbox('menu'); if (menu){ menu.menu('destroy'); } $(this).textbox('destroy'); }); } }; $.fn.searchbox.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.textbox.parseOptions(target), $.parser.parseOptions(target, ['menu']), { searcher: (t.attr('searcher') ? eval(t.attr('searcher')) : undefined) }); }; $.fn.searchbox.defaults = $.extend({}, $.fn.textbox.defaults, { inputEvents: $.extend({}, $.fn.textbox.defaults.inputEvents, { keydown: function(e){ if (e.keyCode == 13){ e.preventDefault(); var t = $(e.data.target); var opts = t.searchbox('options'); t.searchbox('setValue', $(this).val()); opts.searcher.call(e.data.target, t.searchbox('getValue'), t.searchbox('getName')); return false; } } }), buttonAlign:'left', menu:null, searcher:function(value,name){} }); })(jQuery); /** * form - EasyUI for jQuery * */ (function($){ /** * submit the form */ function ajaxSubmit(target, options){ var opts = $.data(target, 'form').options; $.extend(opts, options||{}); var param = $.extend({}, opts.queryParams); if (opts.onSubmit.call(target, param) == false){return;} // $(target).find('.textbox-text:focus').blur(); var input = $(target).find('.textbox-text:focus'); input.triggerHandler('blur'); input.focus(); var disabledFields = null; // the fields to be disabled if (opts.dirty){ var ff = []; // all the dirty fields $.map(opts.dirtyFields, function(f){ if ($(f).hasClass('textbox-f')){ $(f).next().find('.textbox-value').each(function(){ ff.push(this); }); } else { ff.push(f); } }); disabledFields = $(target).find('input[name]:enabled,textarea[name]:enabled,select[name]:enabled').filter(function(){ return $.inArray(this, ff) == -1; }); disabledFields.attr('disabled', 'disabled'); } if (opts.ajax){ if (opts.iframe){ submitIframe(target, param); } else { if (window.FormData !== undefined){ submitXhr(target, param); } else { submitIframe(target, param); } } } else { $(target).submit(); } if (opts.dirty){ disabledFields.removeAttr('disabled'); } } function submitIframe(target, param){ var opts = $.data(target, 'form').options; var frameId = 'easyui_frame_' + (new Date().getTime()); var frame = $('').appendTo('body') frame.attr('src', window.ActiveXObject ? 'javascript:false' : 'about:blank'); frame.css({ position:'absolute', top:-1000, left:-1000 }); frame.bind('load', cb); submit(param); function submit(param){ var form = $(target); if (opts.url){ form.attr('action', opts.url); } var t = form.attr('target'), a = form.attr('action'); form.attr('target', frameId); var paramFields = $(); try { for(var n in param){ var field = $('').val(param[n]).appendTo(form); paramFields = paramFields.add(field); } checkState(); form[0].submit(); } finally { form.attr('action', a); t ? form.attr('target', t) : form.removeAttr('target'); paramFields.remove(); } } function checkState(){ var f = $('#'+frameId); if (!f.length){return} try{ var s = f.contents()[0].readyState; if (s && s.toLowerCase() == 'uninitialized'){ setTimeout(checkState, 100); } } catch(e){ cb(); } } var checkCount = 10; function cb(){ var f = $('#'+frameId); if (!f.length){return} f.unbind(); var data = ''; try{ var body = f.contents().find('body'); data = body.html(); if (data == ''){ if (--checkCount){ setTimeout(cb, 100); return; } } var ta = body.find('>textarea'); if (ta.length){ data = ta.val(); } else { var pre = body.find('>pre'); if (pre.length){ data = pre.html(); } } } catch(e){ } opts.success.call(target, data); setTimeout(function(){ f.unbind(); f.remove(); }, 100); } } function submitXhr(target, param){ var opts = $.data(target, 'form').options; var formData = new FormData($(target)[0]); for(var name in param){ formData.append(name, param[name]); } $.ajax({ url: opts.url, type: 'post', xhr: function(){ var xhr = $.ajaxSettings.xhr(); if (xhr.upload) { xhr.upload.addEventListener('progress', function(e){ if (e.lengthComputable) { var total = e.total; var position = e.loaded || e.position; var percent = Math.ceil(position * 100 / total); opts.onProgress.call(target, percent); } }, false); } return xhr; }, data: formData, dataType: 'html', cache: false, contentType: false, processData: false, complete: function(res){ opts.success.call(target, res.responseText); } }); } /** * load form data * if data is a URL string type load from remote site, * otherwise load from local data object. */ function load(target, data){ var opts = $.data(target, 'form').options; if (typeof data == 'string'){ var param = {}; if (opts.onBeforeLoad.call(target, param) == false) return; $.ajax({ url: data, data: param, dataType: 'json', success: function(data){ _load(data); }, error: function(){ opts.onLoadError.apply(target, arguments); } }); } else { _load(data); } function _load(data){ var form = $(target); for(var name in data){ var val = data[name]; if (!_checkField(name, val)){ if (!_loadBox(name, val)){ form.find('input[name="'+name+'"]').val(val); form.find('textarea[name="'+name+'"]').val(val); form.find('select[name="'+name+'"]').val(val); } } } opts.onLoadSuccess.call(target, data); form.form('validate'); } /** * check the checkbox and radio fields */ function _checkField(name, val){ var cc = $(target).find('[switchbuttonName="'+name+'"]'); if (cc.length){ cc.switchbutton('uncheck'); cc.each(function(){ if (_isChecked($(this).switchbutton('options').value, val)){ $(this).switchbutton('check'); } }); return true; } cc = $(target).find('input[name="'+name+'"][type=radio], input[name="'+name+'"][type=checkbox]'); if (cc.length){ cc._propAttr('checked', false); cc.each(function(){ if (_isChecked($(this).val(), val)){ $(this)._propAttr('checked', true); } }); return true; } return false; } function _isChecked(v, val){ if (v == String(val) || $.inArray(v, $.isArray(val)?val:[val]) >= 0){ return true; } else { return false; } } function _loadBox(name, val){ var field = $(target).find('[textboxName="'+name+'"],[sliderName="'+name+'"]'); if (field.length){ for(var i=0; i=0; i--){ var type = opts.fieldTypes[i]; var field = form.find('.'+type+'-f'); if (field.length && field[type]){ field[type]('reset'); } } form.form('validate'); } /** * set the form to make it can submit with ajax. */ function setForm(target){ var options = $.data(target, 'form').options; $(target).unbind('.form'); if (options.ajax){ $(target).bind('submit.form', function(){ setTimeout(function(){ ajaxSubmit(target, options); }, 0); return false; }); } $(target).bind('_change.form', function(e, t){ if ($.inArray(t, options.dirtyFields) == -1){ options.dirtyFields.push(t); } options.onChange.call(this, t); }).bind('change.form', function(e){ var t = e.target; if (!$(t).hasClass('textbox-text')){ if ($.inArray(t, options.dirtyFields) == -1){ options.dirtyFields.push(t); } options.onChange.call(this, t); } }); setValidation(target, options.novalidate); } function initForm(target, options){ options = options || {}; var state = $.data(target, 'form'); if (state){ $.extend(state.options, options); } else { $.data(target, 'form', { options: $.extend({}, $.fn.form.defaults, $.fn.form.parseOptions(target), options) }); } } function validate(target){ if ($.fn.validatebox){ var t = $(target); t.find('.validatebox-text:not(:disabled)').validatebox('validate'); var invalidbox = t.find('.validatebox-invalid'); invalidbox.filter(':not(:disabled):first').focus(); return invalidbox.length == 0; } return true; } function setValidation(target, novalidate){ var opts = $.data(target, 'form').options; opts.novalidate = novalidate; $(target).find('.validatebox-text:not(:disabled)').validatebox(novalidate ? 'disableValidation' : 'enableValidation'); } $.fn.form = function(options, param){ if (typeof options == 'string'){ this.each(function(){ initForm(this); }); return $.fn.form.methods[options](this, param); } return this.each(function(){ initForm(this, options); setForm(this); }); }; $.fn.form.methods = { options: function(jq){ return $.data(jq[0], 'form').options; }, submit: function(jq, options){ return jq.each(function(){ ajaxSubmit(this, options); }); }, load: function(jq, data){ return jq.each(function(){ load(this, data); }); }, clear: function(jq){ return jq.each(function(){ clear(this); }); }, reset: function(jq){ return jq.each(function(){ reset(this); }); }, validate: function(jq){ return validate(jq[0]); }, disableValidation: function(jq){ return jq.each(function(){ setValidation(this, true); }); }, enableValidation: function(jq){ return jq.each(function(){ setValidation(this, false); }); }, resetValidation: function(jq){ return jq.each(function(){ $(this).find('.validatebox-text:not(:disabled)').validatebox('resetValidation'); }); }, resetDirty: function(jq){ return jq.each(function(){ $(this).form('options').dirtyFields = []; }); } }; $.fn.form.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, [ {ajax:'boolean',dirty:'boolean'} ]), { url: (t.attr('action') ? t.attr('action') : undefined) }); }; $.fn.form.defaults = { fieldTypes: ['tagbox','combobox','combotree','combogrid','combotreegrid','datetimebox','datebox','combo', 'datetimespinner','timespinner','numberspinner','spinner', 'slider','searchbox','numberbox','passwordbox','filebox','textbox','switchbutton'], novalidate: false, ajax: true, iframe: true, dirty: false, dirtyFields: [], url: null, queryParams: {}, onSubmit: function(param){return $(this).form('validate');}, onProgress: function(percent){}, success: function(data){}, onBeforeLoad: function(param){}, onLoadSuccess: function(data){}, onLoadError: function(){}, onChange: function(target){} }; })(jQuery); /** * numberbox - EasyUI for jQuery * * Dependencies: * textbox * */ (function($){ function buildNumberBox(target){ var state = $.data(target, 'numberbox'); var opts = state.options; $(target).addClass('numberbox-f').textbox(opts); $(target).textbox('textbox').css({imeMode:"disabled"}); $(target).attr('numberboxName', $(target).attr('textboxName')); state.numberbox = $(target).next(); state.numberbox.addClass('numberbox'); var initValue = opts.parser.call(target, opts.value); var initText = opts.formatter.call(target, initValue); $(target).numberbox('initValue', initValue).numberbox('setText', initText); } function setValue(target, value){ var state = $.data(target, 'numberbox'); var opts = state.options; opts.value = parseFloat(value); var value = opts.parser.call(target, value); var text = opts.formatter.call(target, value); opts.value = value; $(target).textbox('setText', text).textbox('setValue', value); text = opts.formatter.call(target, $(target).textbox('getValue')); $(target).textbox('setText', text); } $.fn.numberbox = function(options, param){ if (typeof options == 'string'){ var method = $.fn.numberbox.methods[options]; if (method){ return method(this, param); } else { return this.textbox(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'numberbox'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'numberbox', { options: $.extend({}, $.fn.numberbox.defaults, $.fn.numberbox.parseOptions(this), options) }); } buildNumberBox(this); }); }; $.fn.numberbox.methods = { options: function(jq){ var opts = jq.data('textbox') ? jq.textbox('options') : {}; return $.extend($.data(jq[0], 'numberbox').options, { width: opts.width, originalValue: opts.originalValue, disabled: opts.disabled, readonly: opts.readonly }); }, fix: function(jq){ return jq.each(function(){ var opts = $(this).numberbox('options'); opts.value = null; var value = opts.parser.call(this, $(this).numberbox('getText')); $(this).numberbox('setValue', value); }); }, setValue: function(jq, value){ return jq.each(function(){ setValue(this, value); }); }, clear: function(jq){ return jq.each(function(){ $(this).textbox('clear'); $(this).numberbox('options').value = ''; }); }, reset: function(jq){ return jq.each(function(){ $(this).textbox('reset'); $(this).numberbox('setValue', $(this).numberbox('getValue')); }); } }; $.fn.numberbox.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.textbox.parseOptions(target), $.parser.parseOptions(target, [ 'decimalSeparator','groupSeparator','suffix', {min:'number',max:'number',precision:'number'} ]), { prefix: (t.attr('prefix') ? t.attr('prefix') : undefined) }); }; // Inherited from $.fn.textbox.defaults $.fn.numberbox.defaults = $.extend({}, $.fn.textbox.defaults, { inputEvents: { keypress:function(e){ var target = e.data.target; var opts = $(target).numberbox('options'); return opts.filter.call(target, e); }, blur:function(e){ $(e.data.target).numberbox('fix'); }, keydown: function(e){ if (e.keyCode == 13){ $(e.data.target).numberbox('fix'); } } }, min: null, max: null, precision: 0, decimalSeparator: '.', groupSeparator: '', prefix: '', suffix: '', filter: function(e){ var opts = $(this).numberbox('options'); var s = $(this).numberbox('getText'); if (e.metaKey || e.ctrlKey){ return true; } if ($.inArray(String(e.which), ['46','8','13','0']) >= 0){ // DELETE BACKSPACE ENTER return true; } var tmp = $(''); tmp.html(String.fromCharCode(e.which)); var c = tmp.text(); tmp.remove(); if (!c){ return true; } if (c == '-' || c == opts.decimalSeparator){ return (s.indexOf(c) == -1) ? true : false; } else if (c == opts.groupSeparator){ return true; } else if ('0123456789'.indexOf(c) >= 0){ return true; } else { return false; } }, formatter: function(value){ if (!value) return value; value = value + ''; var opts = $(this).numberbox('options'); var s1 = value, s2 = ''; var dpos = value.indexOf('.'); if (dpos >= 0){ s1 = value.substring(0, dpos); s2 = value.substring(dpos+1, value.length); } if (opts.groupSeparator){ var p = /(\d+)(\d{3})/; while(p.test(s1)){ s1 = s1.replace(p, '$1' + opts.groupSeparator + '$2'); } } if (s2){ return opts.prefix + s1 + opts.decimalSeparator + s2 + opts.suffix; } else { return opts.prefix + s1 + opts.suffix; } }, parser: function(s){ s = s + ''; var opts = $(this).numberbox('options'); // if (parseFloat(s) != s){ // if (opts.prefix) s = $.trim(s.replace(new RegExp('\\'+$.trim(opts.prefix),'g'), '')); // if (opts.suffix) s = $.trim(s.replace(new RegExp('\\'+$.trim(opts.suffix),'g'), '')); // if (opts.groupSeparator) s = $.trim(s.replace(new RegExp('\\'+opts.groupSeparator,'g'), '')); // if (opts.decimalSeparator) s = $.trim(s.replace(new RegExp('\\'+opts.decimalSeparator,'g'), '.')); // s = s.replace(/\s/g,''); // } if (opts.prefix) s = $.trim(s.replace(new RegExp('\\'+$.trim(opts.prefix),'g'), '')); if (opts.suffix) s = $.trim(s.replace(new RegExp('\\'+$.trim(opts.suffix),'g'), '')); if (parseFloat(s) != opts.value){ if (opts.groupSeparator) s = $.trim(s.replace(new RegExp('\\'+opts.groupSeparator,'g'), '')); if (opts.decimalSeparator) s = $.trim(s.replace(new RegExp('\\'+opts.decimalSeparator,'g'), '.')); s = s.replace(/\s/g,''); } var val = parseFloat(s).toFixed(opts.precision); if (isNaN(val)) { val = ''; } else if (typeof(opts.min) == 'number' && val < opts.min) { val = opts.min.toFixed(opts.precision); } else if (typeof(opts.max) == 'number' && val > opts.max) { val = opts.max.toFixed(opts.precision); } return val; } }); })(jQuery); /** * calendar - EasyUI for jQuery * */ (function($){ function setSize(target, param){ var opts = $.data(target, 'calendar').options; var t = $(target); if (param){ $.extend(opts, { width: param.width, height: param.height }); } t._size(opts, t.parent()); t.find('.calendar-body')._outerHeight(t.height() - t.find('.calendar-header')._outerHeight()); if (t.find('.calendar-menu').is(':visible')){ showSelectMenus(target); } } function init(target){ $(target).addClass('calendar').html( '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '' + '' + '' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' ); $(target).bind('_resize', function(e,force){ if ($(this).hasClass('easyui-fluid') || force){ setSize(target); } return false; }); } function bindEvents(target){ var opts = $.data(target, 'calendar').options; var menu = $(target).find('.calendar-menu'); menu.find('.calendar-menu-year').unbind('.calendar').bind('keypress.calendar', function(e){ if (e.keyCode == 13){ setDate(true); } }); $(target).unbind('.calendar').bind('mouseover.calendar', function(e){ var t = toTarget(e.target); if (t.hasClass('calendar-nav') || t.hasClass('calendar-text') || (t.hasClass('calendar-day') && !t.hasClass('calendar-disabled'))){ t.addClass('calendar-nav-hover'); } }).bind('mouseout.calendar', function(e){ var t = toTarget(e.target); if (t.hasClass('calendar-nav') || t.hasClass('calendar-text') || (t.hasClass('calendar-day') && !t.hasClass('calendar-disabled'))){ t.removeClass('calendar-nav-hover'); } }).bind('click.calendar', function(e){ var t = toTarget(e.target); if (t.hasClass('calendar-menu-next') || t.hasClass('calendar-nextyear')){ showYear(1); } else if (t.hasClass('calendar-menu-prev') || t.hasClass('calendar-prevyear')){ showYear(-1); } else if (t.hasClass('calendar-menu-month')){ menu.find('.calendar-selected').removeClass('calendar-selected'); t.addClass('calendar-selected'); setDate(true); } else if (t.hasClass('calendar-prevmonth')){ showMonth(-1); } else if (t.hasClass('calendar-nextmonth')){ showMonth(1); } else if (t.hasClass('calendar-text')){ if (menu.is(':visible')){ menu.hide(); } else { showSelectMenus(target); } } else if (t.hasClass('calendar-day')){ if (t.hasClass('calendar-disabled')){return} var oldValue = opts.current; t.closest('div.calendar-body').find('.calendar-selected').removeClass('calendar-selected'); t.addClass('calendar-selected'); var parts = t.attr('abbr').split(','); var y = parseInt(parts[0]); var m = parseInt(parts[1]); var d = parseInt(parts[2]); opts.current = new Date(y, m-1, d); opts.onSelect.call(target, opts.current); if (!oldValue || oldValue.getTime() != opts.current.getTime()){ opts.onChange.call(target, opts.current, oldValue); } if (opts.year != y || opts.month != m){ opts.year = y; opts.month = m; show(target); } } }); function toTarget(t){ var day = $(t).closest('.calendar-day'); if (day.length){ return day; } else { return $(t); } } function setDate(hideMenu){ var menu = $(target).find('.calendar-menu'); var year = menu.find('.calendar-menu-year').val(); var month = menu.find('.calendar-selected').attr('abbr'); if (!isNaN(year)){ opts.year = parseInt(year); opts.month = parseInt(month); show(target); } if (hideMenu){menu.hide()} } function showYear(delta){ opts.year += delta; show(target); menu.find('.calendar-menu-year').val(opts.year); } function showMonth(delta){ opts.month += delta; if (opts.month > 12){ opts.year++; opts.month = 1; } else if (opts.month < 1){ opts.year--; opts.month = 12; } show(target); menu.find('td.calendar-selected').removeClass('calendar-selected'); menu.find('td:eq(' + (opts.month-1) + ')').addClass('calendar-selected'); } } /** * show the select menu that can change year or month, if the menu is not be created then create it. */ function showSelectMenus(target){ var opts = $.data(target, 'calendar').options; $(target).find('.calendar-menu').show(); if ($(target).find('.calendar-menu-month-inner').is(':empty')){ $(target).find('.calendar-menu-month-inner').empty(); var t = $('
                  ').appendTo($(target).find('.calendar-menu-month-inner')); var idx = 0; for(var i=0; i<3; i++){ var tr = $('').appendTo(t); for(var j=0; j<4; j++){ $('').html(opts.months[idx++]).attr('abbr',idx).appendTo(tr); } } } var body = $(target).find('.calendar-body'); var sele = $(target).find('.calendar-menu'); var seleYear = sele.find('.calendar-menu-year-inner'); var seleMonth = sele.find('.calendar-menu-month-inner'); seleYear.find('input').val(opts.year).focus(); seleMonth.find('td.calendar-selected').removeClass('calendar-selected'); seleMonth.find('td:eq('+(opts.month-1)+')').addClass('calendar-selected'); sele._outerWidth(body._outerWidth()); sele._outerHeight(body._outerHeight()); seleMonth._outerHeight(sele.height() - seleYear._outerHeight()); } /** * get weeks data. */ function getWeeks(target, year, month){ var opts = $.data(target, 'calendar').options; var dates = []; var lastDay = new Date(year, month, 0).getDate(); for(var i=1; i<=lastDay; i++) dates.push([year,month,i]); // group date by week var weeks = [], week = []; var memoDay = -1; while(dates.length > 0){ var date = dates.shift(); week.push(date); var day = new Date(date[0],date[1]-1,date[2]).getDay(); if (memoDay == day){ day = 0; } else if (day == (opts.firstDay==0 ? 7 : opts.firstDay) - 1){ weeks.push(week); week = []; } memoDay = day; } if (week.length){ weeks.push(week); } var firstWeek = weeks[0]; if (firstWeek.length < 7){ while(firstWeek.length < 7){ var firstDate = firstWeek[0]; var date = new Date(firstDate[0],firstDate[1]-1,firstDate[2]-1) firstWeek.unshift([date.getFullYear(), date.getMonth()+1, date.getDate()]); } } else { var firstDate = firstWeek[0]; var week = []; for(var i=1; i<=7; i++){ var date = new Date(firstDate[0], firstDate[1]-1, firstDate[2]-i); week.unshift([date.getFullYear(), date.getMonth()+1, date.getDate()]); } weeks.unshift(week); } var lastWeek = weeks[weeks.length-1]; while(lastWeek.length < 7){ var lastDate = lastWeek[lastWeek.length-1]; var date = new Date(lastDate[0], lastDate[1]-1, lastDate[2]+1); lastWeek.push([date.getFullYear(), date.getMonth()+1, date.getDate()]); } if (weeks.length < 6){ var lastDate = lastWeek[lastWeek.length-1]; var week = []; for(var i=1; i<=7; i++){ var date = new Date(lastDate[0], lastDate[1]-1, lastDate[2]+i); week.push([date.getFullYear(), date.getMonth()+1, date.getDate()]); } weeks.push(week); } return weeks; } /** * show the calendar day. */ function show(target){ var opts = $.data(target, 'calendar').options; if (opts.current && !opts.validator.call(target, opts.current)){ opts.current = null; } var now = new Date(); var todayInfo = now.getFullYear()+','+(now.getMonth()+1)+','+now.getDate(); var currentInfo = opts.current ? (opts.current.getFullYear()+','+(opts.current.getMonth()+1)+','+opts.current.getDate()) : ''; // calulate the saturday and sunday index var saIndex = 6 - opts.firstDay; var suIndex = saIndex + 1; if (saIndex >= 7) saIndex -= 7; if (suIndex >= 7) suIndex -= 7; $(target).find('.calendar-title span').html(opts.months[opts.month-1] + ' ' + opts.year); var body = $(target).find('div.calendar-body'); body.children('table').remove(); var data = ['']; data.push(''); if (opts.showWeek){ data.push(''); } for(var i=opts.firstDay; i'+opts.weeks[i]+''); } for(var i=0; i'+opts.weeks[i]+''); } data.push(''); data.push(''); var weeks = getWeeks(target, opts.year, opts.month); for(var i=0; i'); if (opts.showWeek){ var weekNumber = opts.getWeekNumber(new Date(week[0][0], parseInt(week[0][1])-1, week[0][2])); data.push(''); } for(var j=0; j' + d + ''); } data.push(''); } data.push(''); data.push('
                  '+opts.weekNumberHeader+'
                  '+weekNumber+'
                  '); body.append(data.join('')); body.children('table.calendar-dtable').prependTo(body); opts.onNavigate.call(target, opts.year, opts.month); } $.fn.calendar = function(options, param){ if (typeof options == 'string'){ return $.fn.calendar.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'calendar'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'calendar', { options:$.extend({}, $.fn.calendar.defaults, $.fn.calendar.parseOptions(this), options) }); init(this); } if (state.options.border == false){ $(this).addClass('calendar-noborder'); } setSize(this); bindEvents(this); show(this); $(this).find('div.calendar-menu').hide(); // hide the calendar menu }); }; $.fn.calendar.methods = { options: function(jq){ return $.data(jq[0], 'calendar').options; }, resize: function(jq, param){ return jq.each(function(){ setSize(this, param); }); }, moveTo: function(jq, date){ return jq.each(function(){ if (!date){ var now = new Date(); $(this).calendar({ year: now.getFullYear(), month: now.getMonth()+1, current: date }); return; } var opts = $(this).calendar('options'); if (opts.validator.call(this, date)){ var oldValue = opts.current; $(this).calendar({ year: date.getFullYear(), month: date.getMonth()+1, current: date }); if (!oldValue || oldValue.getTime() != date.getTime()){ opts.onChange.call(this, opts.current, oldValue); } } }); } }; $.fn.calendar.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, [ 'weekNumberHeader',{firstDay:'number',fit:'boolean',border:'boolean',showWeek:'boolean'} ])); }; $.fn.calendar.defaults = { width:180, height:180, fit:false, border:true, showWeek:false, firstDay:0, weeks:['S','M','T','W','T','F','S'], months:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], year:new Date().getFullYear(), month:new Date().getMonth()+1, current:(function(){ var d = new Date(); return new Date(d.getFullYear(), d.getMonth(), d.getDate()); })(), weekNumberHeader:'', getWeekNumber: function(date){ var checkDate = new Date(date.getTime()); checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); var time = checkDate.getTime(); checkDate.setMonth(0); checkDate.setDate(1); return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; }, formatter:function(date){return date.getDate()}, styler:function(date){return ''}, validator:function(date){return true}, onSelect: function(date){}, onChange: function(newDate, oldDate){}, onNavigate: function(year, month){} }; })(jQuery); /** * spinner - EasyUI for jQuery * * Dependencies: * textbox * */ (function($){ function buildSpinner(target){ var state = $.data(target, 'spinner'); var opts = state.options; var icons = $.extend(true, [], opts.icons); if (opts.spinAlign == 'left' || opts.spinAlign == 'right'){ opts.spinArrow = true; opts.iconAlign = opts.spinAlign; var arrow = { iconCls:'spinner-arrow', handler:function(e){ var spin = $(e.target).closest('.spinner-arrow-up,.spinner-arrow-down'); doSpin(e.data.target, spin.hasClass('spinner-arrow-down')); } }; if (opts.spinAlign == 'left'){ icons.unshift(arrow); } else { icons.push(arrow); } } else { opts.spinArrow = false; if (opts.spinAlign == 'vertical'){ if (opts.buttonAlign != 'top'){ opts.buttonAlign = 'bottom'; } opts.clsLeft = 'textbox-button-bottom'; opts.clsRight = 'textbox-button-top'; } else { opts.clsLeft = 'textbox-button-left'; opts.clsRight = 'textbox-button-right'; } } $(target).addClass('spinner-f').textbox($.extend({}, opts, { icons: icons, doSize: false, onResize: function(width, height){ if (!opts.spinArrow){ var span = $(this).next(); var btn = span.find('.textbox-button:not(.spinner-button)'); if (btn.length){ var btnWidth = btn.outerWidth(); var btnHeight = btn.outerHeight(); var btnLeft = span.find('.spinner-button.'+opts.clsLeft); var btnRight = span.find('.spinner-button.'+opts.clsRight); if (opts.buttonAlign == 'right'){ btnRight.css('marginRight', btnWidth+'px'); } else if (opts.buttonAlign == 'left'){ btnLeft.css('marginLeft', btnWidth+'px'); } else if (opts.buttonAlign == 'top'){ btnRight.css('marginTop', btnHeight+'px'); } else { btnLeft.css('marginBottom', btnHeight+'px'); } } } opts.onResize.call(this, width, height); } })); $(target).attr('spinnerName', $(target).attr('textboxName')); state.spinner = $(target).next(); state.spinner.addClass('spinner'); if (opts.spinArrow){ var arrowIcon = state.spinner.find('.spinner-arrow'); arrowIcon.append(''); arrowIcon.append(''); } else { var btnLeft = $('').addClass(opts.clsLeft).appendTo(state.spinner); var btnRight = $('').addClass(opts.clsRight).appendTo(state.spinner); btnLeft.linkbutton({ iconCls: opts.reversed ? 'spinner-button-up' : 'spinner-button-down', onClick: function(){doSpin(target, !opts.reversed);} }); btnRight.linkbutton({ iconCls: opts.reversed ? 'spinner-button-down' : 'spinner-button-up', onClick: function(){doSpin(target, opts.reversed);} }); if (opts.disabled){$(target).spinner('disable');} if (opts.readonly){$(target).spinner('readonly');} } $(target).spinner('resize'); } function doSpin(target, down){ var opts = $(target).spinner('options'); opts.spin.call(target, down); opts[down ? 'onSpinDown' : 'onSpinUp'].call(target); $(target).spinner('validate'); } $.fn.spinner = function(options, param){ if (typeof options == 'string'){ var method = $.fn.spinner.methods[options]; if (method){ return method(this, param); } else { return this.textbox(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'spinner'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'spinner', { options: $.extend({}, $.fn.spinner.defaults, $.fn.spinner.parseOptions(this), options) }); } buildSpinner(this); }); }; $.fn.spinner.methods = { options: function(jq){ var opts = jq.textbox('options'); return $.extend($.data(jq[0], 'spinner').options, { width: opts.width, value: opts.value, originalValue: opts.originalValue, disabled: opts.disabled, readonly: opts.readonly }); } }; $.fn.spinner.parseOptions = function(target){ return $.extend({}, $.fn.textbox.parseOptions(target), $.parser.parseOptions(target, [ 'min','max','spinAlign',{increment:'number',reversed:'boolean'} ])); }; $.fn.spinner.defaults = $.extend({}, $.fn.textbox.defaults, { min: null, max: null, increment: 1, spinAlign: 'right', // possible values: 'left','right','horizontal','vertical' reversed: false, spin: function(down){}, // the function to implement the spin button clicking onSpinUp: function(){}, onSpinDown: function(){} }); })(jQuery); /** * numberspinner - EasyUI for jQuery * * Dependencies: * spinner * numberbox */ (function($){ function create(target){ $(target).addClass('numberspinner-f'); var opts = $.data(target, 'numberspinner').options; $(target).numberbox($.extend({},opts,{doSize:false})).spinner(opts); $(target).numberbox('setValue', opts.value); } function doSpin(target, down){ var opts = $.data(target, 'numberspinner').options; var v = parseFloat($(target).numberbox('getValue') || opts.value) || 0; if (down){ v -= opts.increment; } else { v += opts.increment; } $(target).numberbox('setValue', v); } $.fn.numberspinner = function(options, param){ if (typeof options == 'string'){ var method = $.fn.numberspinner.methods[options]; if (method){ return method(this, param); } else { return this.numberbox(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'numberspinner'); if (state){ $.extend(state.options, options); } else { $.data(this, 'numberspinner', { options: $.extend({}, $.fn.numberspinner.defaults, $.fn.numberspinner.parseOptions(this), options) }); } create(this); }); }; $.fn.numberspinner.methods = { options: function(jq){ var opts = jq.numberbox('options'); return $.extend($.data(jq[0], 'numberspinner').options, { width: opts.width, value: opts.value, originalValue: opts.originalValue, disabled: opts.disabled, readonly: opts.readonly }); } }; $.fn.numberspinner.parseOptions = function(target){ return $.extend({}, $.fn.spinner.parseOptions(target), $.fn.numberbox.parseOptions(target), { }); }; $.fn.numberspinner.defaults = $.extend({}, $.fn.spinner.defaults, $.fn.numberbox.defaults, { spin: function(down){doSpin(this, down);} }); })(jQuery); /** * timespinner - EasyUI for jQuery * * Dependencies: * spinner * */ (function($){ function create(target){ var opts = $.data(target, 'timespinner').options; $(target).addClass('timespinner-f').spinner(opts); var initValue = opts.formatter.call(target, opts.parser.call(target, opts.value)); $(target).timespinner('initValue', initValue); } function clickHandler(e){ var target = e.data.target; var opts = $.data(target, 'timespinner').options; var start = $(target).timespinner('getSelectionStart'); for(var i=0; i= range[0] && start <= range[1]){ highlight(target, i); return; } } } /** * highlight the hours or minutes or seconds. */ function highlight(target, index){ var opts = $.data(target, 'timespinner').options; if (index != undefined){ opts.highlight = index; } var range = opts.selections[opts.highlight]; if (range){ var tb = $(target).timespinner('textbox'); $(target).timespinner('setSelectionRange', {start:range[0],end:range[1]}); tb.focus(); } } function setValue(target, value){ var opts = $.data(target, 'timespinner').options; var value = opts.parser.call(target, value); var text = opts.formatter.call(target, value); $(target).spinner('setValue', text); } function doSpin(target, down){ var opts = $.data(target, 'timespinner').options; var s = $(target).timespinner('getValue'); var range = opts.selections[opts.highlight]; var s1 = s.substring(0, range[0]); var s2 = s.substring(range[0], range[1]); var s3 = s.substring(range[1]); var v = s1 + ((parseInt(s2,10)||0) + opts.increment*(down?-1:1)) + s3; $(target).timespinner('setValue', v); highlight(target); } $.fn.timespinner = function(options, param){ if (typeof options == 'string'){ var method = $.fn.timespinner.methods[options]; if (method){ return method(this, param); } else { return this.spinner(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'timespinner'); if (state){ $.extend(state.options, options); } else { $.data(this, 'timespinner', { options: $.extend({}, $.fn.timespinner.defaults, $.fn.timespinner.parseOptions(this), options) }); } create(this); }); }; $.fn.timespinner.methods = { options: function(jq){ var opts = jq.data('spinner') ? jq.spinner('options') : {}; return $.extend($.data(jq[0], 'timespinner').options, { width: opts.width, value: opts.value, originalValue: opts.originalValue, disabled: opts.disabled, readonly: opts.readonly }); }, setValue: function(jq, value){ return jq.each(function(){ setValue(this, value); }); }, getHours: function(jq){ var opts = $.data(jq[0], 'timespinner').options; var vv = jq.timespinner('getValue').split(opts.separator); return parseInt(vv[0], 10); }, getMinutes: function(jq){ var opts = $.data(jq[0], 'timespinner').options; var vv = jq.timespinner('getValue').split(opts.separator); return parseInt(vv[1], 10); }, getSeconds: function(jq){ var opts = $.data(jq[0], 'timespinner').options; var vv = jq.timespinner('getValue').split(opts.separator); return parseInt(vv[2], 10) || 0; } }; $.fn.timespinner.parseOptions = function(target){ return $.extend({}, $.fn.spinner.parseOptions(target), $.parser.parseOptions(target,[ 'separator',{showSeconds:'boolean',highlight:'number'} ])); }; $.fn.timespinner.defaults = $.extend({}, $.fn.spinner.defaults, { inputEvents: $.extend({}, $.fn.spinner.defaults.inputEvents, { click: function(e){ clickHandler.call(this, e); }, blur: function(e){ var t = $(e.data.target); t.timespinner('setValue', t.timespinner('getText')); }, keydown: function(e){ if (e.keyCode == 13){ var t = $(e.data.target); t.timespinner('setValue', t.timespinner('getText')); } } }), formatter: function(date){ if (!date){return '';} var opts = $(this).timespinner('options'); var tt = [formatN(date.getHours()), formatN(date.getMinutes())]; if (opts.showSeconds){ tt.push(formatN(date.getSeconds())); } return tt.join(opts.separator); function formatN(value){ return (value < 10 ? '0' : '') + value; } }, parser: function(s){ var opts = $(this).timespinner('options'); var date = parseD(s); if (date){ var min = parseD(opts.min); var max = parseD(opts.max); if (min && min > date){date = min;} if (max && max < date){date = max;} } return date; function parseD(s){ if (!s){return null;} var tt = s.split(opts.separator); return new Date(1900, 0, 0, parseInt(tt[0],10)||0, parseInt(tt[1],10)||0, parseInt(tt[2],10)||0); } }, selections:[[0,2],[3,5],[6,8]], separator: ':', showSeconds: false, highlight: 0, // The field to highlight initially, 0 = hours, 1 = minutes, ... spin: function(down){doSpin(this, down);} }); })(jQuery); /** * datetimespinner - EasyUI for jQuery * * Dependencies: * timespinner * */ (function($){ function create(target){ var opts = $.data(target, 'datetimespinner').options; $(target).addClass('datetimespinner-f').timespinner(opts); } $.fn.datetimespinner = function(options, param){ if (typeof options == 'string'){ var method = $.fn.datetimespinner.methods[options]; if (method){ return method(this, param); } else { return this.timespinner(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'datetimespinner'); if (state){ $.extend(state.options, options); } else { $.data(this, 'datetimespinner', { options: $.extend({}, $.fn.datetimespinner.defaults, $.fn.datetimespinner.parseOptions(this), options) }); } create(this); }); }; $.fn.datetimespinner.methods = { options: function(jq){ var opts = jq.timespinner('options'); return $.extend($.data(jq[0], 'datetimespinner').options, { width: opts.width, value: opts.value, originalValue: opts.originalValue, disabled: opts.disabled, readonly: opts.readonly }); } }; $.fn.datetimespinner.parseOptions = function(target){ return $.extend({}, $.fn.timespinner.parseOptions(target), $.parser.parseOptions(target, [ ])); }; $.fn.datetimespinner.defaults = $.extend({}, $.fn.timespinner.defaults, { formatter:function(date){ if (!date){return '';} return $.fn.datebox.defaults.formatter.call(this, date) + ' ' + $.fn.timespinner.defaults.formatter.call(this, date); }, parser:function(s){ s = $.trim(s); if (!s){return null;} var dt = s.split(' '); var date1 = $.fn.datebox.defaults.parser.call(this, dt[0]); if (dt.length < 2){ return date1; } var date2 = $.fn.timespinner.defaults.parser.call(this, dt[1]); return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate(), date2.getHours(), date2.getMinutes(), date2.getSeconds()); }, selections:[[0,2],[3,5],[6,10],[11,13],[14,16],[17,19]] }); })(jQuery); /** * datagrid - EasyUI for jQuery * * Dependencies: * panel * resizable * linkbutton * pagination * */ (function($){ var DATAGRID_SERNO = 0; /** * Get the index of array item, return -1 when the item is not found. */ function indexOfArray(a,o){ return $.easyui.indexOfArray(a,o); // for(var i=0,len=a.length; i']; for(var i=0; i'); $(ss.join('\n')).appendTo(cc); cc.children('style[easyui]:not(:last)').remove(); // setTimeout(function(){ // cc.children('style[easyui]:not(:last)').remove(); // }, 0); }, getRule: function(index){ var style = cc.children('style[easyui]:last')[0]; var styleSheet = style.styleSheet ? style.styleSheet : (style.sheet || document.styleSheets[document.styleSheets.length-1]); var rules = styleSheet.cssRules || styleSheet.rules; return rules[index]; }, set: function(selector, width){ var item = state.cache[selector]; if (item){ item.width = width; var rule = this.getRule(item.index); if (rule){ rule.style['width'] = width; } } }, remove: function(selector){ var tmp = []; for(var s in state.cache){ if (s.indexOf(selector) == -1){ tmp.push([s, state.cache[s].width]); } } state.cache = {}; this.add(tmp); }, dirty: function(selector){ if (selector){ state.dirty.push(selector); } }, clean: function(){ for(var i=0; i body2.width()){ height += 18; } height -= parseInt(body2.css('marginTop')) || 0; body1.height(height); body2.height(height); dc.view.height(dc.view2.height()); } dc.body2.triggerHandler('scroll'); // set body row or footer row height function setHeight(trs1, trs2){ for(var i=0; i'); } moveTr(true); moveTr(false); setBodySize(target); function moveTr(frozen){ var serno = frozen ? 1 : 2; var tr = opts.finder.getTr(target, index, 'body', serno); (frozen ? dc.body1 : dc.body2).children('table.datagrid-btable-frozen').append(tr); } } /** * wrap and return the grid object, fields and columns */ function wrapGrid(target, rownumbers) { function getColumns(){ var frozenColumns = []; var columns = []; $(target).children('thead').each(function(){ var opt = $.parser.parseOptions(this, [{frozen:'boolean'}]); $(this).find('tr').each(function(){ var cols = []; $(this).find('th').each(function(){ var th = $(this); var col = $.extend({}, $.parser.parseOptions(this, [ 'id','field','align','halign','order','width', {sortable:'boolean',checkbox:'boolean',resizable:'boolean',fixed:'boolean'}, {rowspan:'number',colspan:'number'} ]), { title: (th.html() || undefined), hidden: (th.attr('hidden') ? true : undefined), formatter: (th.attr('formatter') ? eval(th.attr('formatter')) : undefined), styler: (th.attr('styler') ? eval(th.attr('styler')) : undefined), sorter: (th.attr('sorter') ? eval(th.attr('sorter')) : undefined) }); if (col.width && String(col.width).indexOf('%')==-1){ col.width = parseInt(col.width); } // if (!col.align) col.align = 'left'; if (th.attr('editor')){ var s = $.trim(th.attr('editor')); if (s.substr(0,1) == '{'){ col.editor = eval('(' + s + ')'); } else { col.editor = s; } } cols.push(col); }); opt.frozen ? frozenColumns.push(cols) : columns.push(cols); }); }); return [frozenColumns, columns]; } var panel = $( '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '
                  ' + '' + '
                  ' + // '
                  ' + '
                  ' + '
                  ' ).insertAfter(target); panel.panel({ doSize:false, cls:'datagrid' }); $(target).addClass('datagrid-f').hide().appendTo(panel.children('div.datagrid-view')); var cc = getColumns(); var view = panel.children('div.datagrid-view'); var view1 = view.children('div.datagrid-view1'); var view2 = view.children('div.datagrid-view2'); return { panel: panel, frozenColumns: cc[0], columns: cc[1], dc: { // some data container view: view, view1: view1, view2: view2, header1: view1.children('div.datagrid-header').children('div.datagrid-header-inner'), header2: view2.children('div.datagrid-header').children('div.datagrid-header-inner'), body1: view1.children('div.datagrid-body').children('div.datagrid-body-inner'), body2: view2.children('div.datagrid-body'), footer1: view1.children('div.datagrid-footer').children('div.datagrid-footer-inner'), footer2: view2.children('div.datagrid-footer').children('div.datagrid-footer-inner') } }; } function buildGrid(target){ var state = $.data(target, 'datagrid'); var opts = state.options; var dc = state.dc; var panel = state.panel; state.ss = $(target).datagrid('createStyleSheet'); panel.panel($.extend({}, opts, { id: null, doSize: false, onResize: function(width, height){ if ($.data(target, 'datagrid')){ setBodySize(target); $(target).datagrid('fitColumns'); opts.onResize.call(panel, width, height); } }, onExpand: function(){ if ($.data(target, 'datagrid')){ $(target).datagrid('fixRowHeight').datagrid('fitColumns'); opts.onExpand.call(panel); } } })); state.rowIdPrefix = 'datagrid-row-r' + (++DATAGRID_SERNO); state.cellClassPrefix = 'datagrid-cell-c' + DATAGRID_SERNO; createColumnHeader(dc.header1, opts.frozenColumns, true); createColumnHeader(dc.header2, opts.columns, false); createColumnStyle(); dc.header1.add(dc.header2).css('display', opts.showHeader ? 'block' : 'none'); dc.footer1.add(dc.footer2).css('display', opts.showFooter ? 'block' : 'none'); if (opts.toolbar) { if ($.isArray(opts.toolbar)){ $('div.datagrid-toolbar', panel).remove(); var tb = $('
                  ').prependTo(panel); var tr = tb.find('tr'); for(var i=0; i
                  ').appendTo(tr); } else { var td = $('').appendTo(tr); var tool = $('').appendTo(td); tool[0].onclick = eval(btn.handler || function(){}); tool.linkbutton($.extend({}, btn, { plain:true })); } } } else { $(opts.toolbar).addClass('datagrid-toolbar').prependTo(panel); $(opts.toolbar).show(); } } else { $('div.datagrid-toolbar', panel).remove(); } $('div.datagrid-pager', panel).remove(); if (opts.pagination) { var pager = $('
                  '); if (opts.pagePosition == 'bottom'){ pager.appendTo(panel); } else if (opts.pagePosition == 'top'){ pager.addClass('datagrid-pager-top').prependTo(panel); } else { var ptop = $('
                  ').prependTo(panel); pager.appendTo(panel); pager = pager.add(ptop); } pager.pagination({ total:0, // total:(opts.pageNumber*opts.pageSize), pageNumber:opts.pageNumber, pageSize:opts.pageSize, pageList:opts.pageList, onSelectPage: function(pageNum, pageSize){ // save the page state opts.pageNumber = pageNum || 1; opts.pageSize = pageSize; pager.pagination('refresh',{ pageNumber:pageNum, pageSize:pageSize }); request(target); // request new page data } }); opts.pageSize = pager.pagination('options').pageSize; // repare the pageSize value } function createColumnHeader(container, columns, frozen){ if (!columns) return; $(container).show(); $(container).empty(); var tmp = $('
                  ').appendTo('body'); tmp._outerWidth(99); var deltaWidth = 100 - parseInt(tmp[0].style.width); tmp.remove(); var names = []; var orders = []; var hiddenFields = []; if (opts.sortName){ names = opts.sortName.split(','); orders = opts.sortOrder.split(','); } var t = $('
                  ').appendTo(container); for(var i=0; i').appendTo($('tbody', t)); var cols = columns[i]; for(var j=0; j').appendTo(tr); if (col.checkbox){ td.attr('field', col.field); $('
                  ').html('').appendTo(td); } else if (col.field){ td.attr('field', col.field); td.append('
                  '); td.find('span:first').html(col.title); var cell = td.find('div.datagrid-cell'); var pos = indexOfArray(names, col.field); if (pos >= 0){ cell.addClass('datagrid-sort-' + orders[pos]); } if (col.sortable){ cell.addClass('datagrid-sort'); } if (col.resizable == false){ cell.attr('resizable', 'false'); } if (col.width){ var value = $.parser.parseValue('width',col.width,dc.view,opts.scrollbarSize+(opts.rownumbers?opts.rownumberWidth:0)); col.deltaWidth = deltaWidth; col.boxWidth = value - deltaWidth; } else { col.auto = true; } cell.css('text-align', (col.halign || col.align || '')); // define the cell class col.cellClass = state.cellClassPrefix + '-' + col.field.replace(/[\.|\s]/g,'-'); cell.addClass(col.cellClass); } else { $('
                  ').html(col.title).appendTo(td); } if (col.hidden){ td.hide(); hiddenFields.push(col.field); } } } if (frozen && opts.rownumbers){ var td = $('
                  '); if ($('tr',t).length == 0){ td.wrap('').parent().appendTo($('tbody',t)); } else { td.prependTo($('tr:first', t)); } } for(var i=0; i
                  ').appendTo(dc.view); } if (e.data.dir == 'e'){ e.data.deltaEdge = $(this)._outerWidth() - (e.pageX - $(this).offset().left); } else { e.data.deltaEdge = $(this).offset().left - e.pageX - 1; } state.proxy.css({ left:e.pageX - $(panel).offset().left - 1 + e.data.deltaEdge, display:'none' }); setTimeout(function(){ if (state.proxy) state.proxy.show(); }, 500); }, onResize: function(e){ state.proxy.css({ left:e.pageX - $(panel).offset().left - 1 + e.data.deltaEdge, display:'block' }); return false; }, onStopResize: function(e){ header.css('cursor', ''); $(this).css('height',''); var field = $(this).parent().attr('field'); var col = getColumnOption(target, field); col.width = $(this)._outerWidth() + 1; col.boxWidth = col.width - col.deltaWidth; col.auto = undefined; $(this).css('width', ''); $(target).datagrid('fixColumnSize', field); state.proxy.remove(); state.proxy = null; if ($(this).parents('div:first.datagrid-header').parent().hasClass('datagrid-view1')){ setBodySize(target); } $(target).datagrid('fitColumns'); opts.onResizeColumn.call(target, field, col.width); setTimeout(function(){ state.resizing = false; }, 0); } }); }); var bb = dc.body1.add(dc.body2); bb.unbind(); for(var event in opts.rowEvents){ bb.bind(event, opts.rowEvents[event]); } dc.body1.bind('mousewheel DOMMouseScroll', function(e){ e.preventDefault(); var e1 = e.originalEvent || window.event; var delta = e1.wheelDelta || e1.detail*(-1); if ('deltaY' in e1){ delta = e1.deltaY * -1; } var dg = $(e.target).closest('div.datagrid-view').children('.datagrid-f'); var dc = dg.data('datagrid').dc; dc.body2.scrollTop(dc.body2.scrollTop() - delta); }); dc.body2.bind('scroll', function(){ var b1 = dc.view1.children('div.datagrid-body'); b1.scrollTop($(this).scrollTop()); var c1 = dc.body1.children(':first'); var c2 = dc.body2.children(':first'); if (c1.length && c2.length){ var top1 = c1.offset().top; var top2 = c2.offset().top; if (top1 != top2){ b1.scrollTop(b1.scrollTop()+top1-top2); } } // dc.view1.children('div.datagrid-body').scrollTop($(this).scrollTop()); dc.view2.children('div.datagrid-header,div.datagrid-footer')._scrollLeft($(this)._scrollLeft()); dc.body2.children('table.datagrid-btable-frozen').css('left', -$(this)._scrollLeft()); }); } function headerOverEventHandler(isOver){ return function(e){ var td = $(e.target).closest('td[field]'); if (td.length){ var target = getTableTarget(td); if (!$(target).data('datagrid').resizing && isOver){ td.addClass('datagrid-header-over'); } else { td.removeClass('datagrid-header-over'); } } } } function headerClickEventHandler(e){ var target = getTableTarget(e.target); var opts = $(target).datagrid('options'); var ck = $(e.target).closest('input[type=checkbox]'); if (ck.length){ if (opts.singleSelect && opts.selectOnCheck){return false;} if (ck.is(':checked')){ checkAll(target); } else { uncheckAll(target); } e.stopPropagation(); } else { var cell = $(e.target).closest('.datagrid-cell'); if (cell.length){ var p1 = cell.offset().left + 5; var p2 = cell.offset().left + cell._outerWidth() - 5; if (e.pageX < p2 && e.pageX > p1){ sortGrid(target, cell.parent().attr('field')); } } } } function headerDblclickEventHandler(e){ var target = getTableTarget(e.target); var opts = $(target).datagrid('options'); var cell = $(e.target).closest('.datagrid-cell'); if (cell.length){ var p1 = cell.offset().left + 5; var p2 = cell.offset().left + cell._outerWidth() - 5; var cond = opts.resizeHandle == 'right' ? (e.pageX > p2) : (opts.resizeHandle == 'left' ? (e.pageX < p1) : (e.pageX < p1 || e.pageX > p2)); if (cond){ var field = cell.parent().attr('field'); var col = getColumnOption(target, field); if (col.resizable == false) return; $(target).datagrid('autoSizeColumn', field); col.auto = false; } } } function headerMenuEventHandler(e){ var target = getTableTarget(e.target); var opts = $(target).datagrid('options'); var td = $(e.target).closest('td[field]'); opts.onHeaderContextMenu.call(target, e, td.attr('field')); } function hoverEventHandler(isOver){ return function(e){ var tr = getClosestTr(e.target); if (!tr){return} var target = getTableTarget(tr); if ($.data(target, 'datagrid').resizing){return} var index = getTrIndex(tr); if (isOver){ highlightRow(target, index); // $(target).datagrid('highlightRow', index); } else { var opts = $.data(target, 'datagrid').options; opts.finder.getTr(target, index).removeClass('datagrid-row-over'); } } } function clickEventHandler(e){ var tr = getClosestTr(e.target); if (!tr){return} var target = getTableTarget(tr); var opts = $.data(target, 'datagrid').options; var index = getTrIndex(tr); var tt = $(e.target); if (tt.parent().hasClass('datagrid-cell-check')){ // click the checkbox if (opts.singleSelect && opts.selectOnCheck){ // if (!opts.checkOnSelect) { // uncheckAll(target, true); // } tt._propAttr('checked', !tt.is(':checked')); checkRow(target, index); } else { if (tt.is(':checked')){ tt._propAttr('checked', false); checkRow(target, index); } else { tt._propAttr('checked', true); uncheckRow(target, index); } } } else { var row = opts.finder.getRow(target, index); var td = tt.closest('td[field]',tr); if (td.length){ var field = td.attr('field'); opts.onClickCell.call(target, index, field, row[field]); } if (opts.singleSelect == true){ selectRow(target, index); } else { if (opts.ctrlSelect){ if (e.metaKey || e.ctrlKey){ if (tr.hasClass('datagrid-row-selected')){ unselectRow(target, index); } else { selectRow(target, index); } } else if (e.shiftKey){ $(target).datagrid('clearSelections'); var fromIndex = Math.min(opts.lastSelectedIndex||0, index); var toIndex = Math.max(opts.lastSelectedIndex||0, index); for(var i=fromIndex; i<=toIndex; i++){ selectRow(target, i); } } else { $(target).datagrid('clearSelections'); selectRow(target, index); opts.lastSelectedIndex = index; } } else { if (tr.hasClass('datagrid-row-selected')){ unselectRow(target, index); } else { selectRow(target, index); } } } opts.onClickRow.apply(target, getArguments(target, [index, row])); } } function dblclickEventHandler(e){ var tr = getClosestTr(e.target); if (!tr){return} var target = getTableTarget(tr); var opts = $.data(target, 'datagrid').options; var index = getTrIndex(tr); var row = opts.finder.getRow(target, index); var td = $(e.target).closest('td[field]',tr); if (td.length){ var field = td.attr('field'); opts.onDblClickCell.call(target, index, field, row[field]); } opts.onDblClickRow.apply(target, getArguments(target, [index, row])); } function contextmenuEventHandler(e){ var tr = getClosestTr(e.target); if (tr){ var target = getTableTarget(tr); var opts = $.data(target, 'datagrid').options; var index = getTrIndex(tr); var row = opts.finder.getRow(target, index); opts.onRowContextMenu.call(target, e, index, row); } else { var body = getClosestTr(e.target, '.datagrid-body'); if (body){ var target = getTableTarget(body); var opts = $.data(target, 'datagrid').options; opts.onRowContextMenu.call(target, e, -1, null); } } } function getTableTarget(t){ return $(t).closest('div.datagrid-view').children('.datagrid-f')[0]; } function getClosestTr(t, selector){ var tr = $(t).closest(selector||'tr.datagrid-row'); if (tr.length && tr.parent().length){ return tr; } else { return undefined; } } function getTrIndex(tr){ if (tr.attr('datagrid-row-index')){ return parseInt(tr.attr('datagrid-row-index')); } else { return tr.attr('node-id'); } } function sortGrid(target, param){ var state = $.data(target, 'datagrid'); var opts = state.options; param = param || {}; var sparam = {sortName: opts.sortName, sortOrder:opts.sortOrder}; if (typeof param == 'object'){ $.extend(sparam, param); } var names = []; var orders = []; if (sparam.sortName){ names = sparam.sortName.split(','); orders = sparam.sortOrder.split(','); } if (typeof param == 'string'){ var field = param; var col = getColumnOption(target, field); if (!col.sortable || state.resizing){return} var originalOrder = col.order || 'asc'; var pos = indexOfArray(names, field); if (pos >= 0){ var nextOrder = orders[pos] == 'asc' ? 'desc' : 'asc'; if (opts.multiSort && nextOrder == originalOrder){ names.splice(pos,1); orders.splice(pos,1); } else { orders[pos] = nextOrder; } } else { if (opts.multiSort){ names.push(field); orders.push(originalOrder); } else { names = [field]; orders = [originalOrder]; } } sparam.sortName = names.join(','); sparam.sortOrder = orders.join(','); } if (opts.onBeforeSortColumn.call(target, sparam.sortName, sparam.sortOrder) == false){return} $.extend(opts, sparam); var dc = state.dc; var header = dc.header1.add(dc.header2); header.find('div.datagrid-cell').removeClass('datagrid-sort-asc datagrid-sort-desc'); for(var i=0; i= 0){ for(var rowIndex=0; rowIndex= header.find('table').width()){ dc.body2.css('overflow-x', 'hidden'); } function fillWidth(){ if (!opts.fitColumns){return;} if (!state.leftWidth){state.leftWidth = 0;} var fieldWidths = 0; var cc = []; var fields = getColumnFields(target, false); for(var i=0; i 0){ c.col.boxWidth += c.addingWidth; c.col.width += c.addingWidth; } } state.leftWidth = leftWidth; $(target).datagrid('fixColumnSize'); } function setPercentWidth(){ var changed = false; var fields = getColumnFields(target, true).concat(getColumnFields(target, false)); $.map(fields, function(field){ var col = getColumnOption(target, field); if (String(col.width||'').indexOf('%') >= 0){ var width = $.parser.parseValue('width',col.width,dc.view,opts.scrollbarSize+(opts.rownumbers?opts.rownumberWidth:0)) - col.deltaWidth; if (width > 0){ col.boxWidth = width; changed = true; } } }); if (changed){ $(target).datagrid('fixColumnSize'); } } function setGroupWidth(fit){ var groups = dc.header1.add(dc.header2).find('.datagrid-cell-group'); if (groups.length){ groups.each(function(){ $(this)._outerWidth(fit ? $(this).parent().width() : 10); }); if (fit){ setBodySize(target); } } } function canResize(col){ if (String(col.width||'').indexOf('%') >= 0){return false;} if (!col.hidden && !col.checkbox && !col.auto && !col.fixed){return true;} } } /** * adjusts the column width to fit the contents. */ function autoSizeColumn(target, field){ var state = $.data(target, 'datagrid'); var opts = state.options; var dc = state.dc; var tmp = $('
                  ').appendTo('body'); if (field){ setSize(field); $(target).datagrid('fitColumns'); } else { var canFitColumns = false; var fields = getColumnFields(target,true).concat(getColumnFields(target,false)); for(var i=0; i 1){ var col = getColumnOption(target, td.attr('field')); var width = col.boxWidth + col.deltaWidth - 1; for(var i=1; i= 0){ var value = col.field || col.id || ''; for(var c=0; c<(col.colspan||1); c++){ for(var r=0; r<(col.rowspan||1); r++){ aa[rowIndex + r][colIndex] = value; } colIndex++; } } }); } return aa; function getCount(){ var count = 0; $.map(columns[0]||[], function(col){ count += col.colspan || 1; }); return count; } function getIndex(a){ for(var i=0; ib?1:-1); }; r = sortFunc(r1[sn], r2[sn]) * (so=='asc'?1:-1); if (r != 0){ return r; } } return r; }); } // render datagrid view if (opts.view.onBeforeRender){ opts.view.onBeforeRender.call(opts.view, target, data.rows); } opts.view.render.call(opts.view, target, dc.body2, false); opts.view.render.call(opts.view, target, dc.body1, true); if (opts.showFooter){ opts.view.renderFooter.call(opts.view, target, dc.footer2, false); opts.view.renderFooter.call(opts.view, target, dc.footer1, true); } if (opts.view.onAfterRender){ opts.view.onAfterRender.call(opts.view, target); } state.ss.clean(); // opts.onLoadSuccess.call(target, data); var pager = $(target).datagrid('getPager'); if (pager.length){ var popts = pager.pagination('options'); if (popts.total != data.total){ pager.pagination('refresh',{pageNumber:opts.pageNumber,total:data.total}); if (opts.pageNumber != popts.pageNumber && popts.pageNumber > 0){ opts.pageNumber = popts.pageNumber; request(target); } } } fixRowHeight(target); dc.body2.triggerHandler('scroll'); $(target).datagrid('setSelectionState'); $(target).datagrid('autoSizeColumn'); opts.onLoadSuccess.call(target, data); } /** * set row selection that previously selected */ function setSelectionState(target){ var state = $.data(target, 'datagrid'); var opts = state.options; var dc = state.dc; dc.header1.add(dc.header2).find('input[type=checkbox]')._propAttr('checked', false); if (opts.idField){ var isTreeGrid = $.data(target, 'treegrid') ? true : false; var onSelect = opts.onSelect; var onCheck = opts.onCheck; opts.onSelect = opts.onCheck = function(){}; var rows = opts.finder.getRows(target); for(var i=0; i body2.height() - scrollbarSize){ body2.scrollTop(body2.scrollTop() + top + tr._outerHeight() - body2.height() + scrollbarSize); } } } function highlightRow(target, index){ var state = $.data(target, 'datagrid'); var opts = state.options; opts.finder.getTr(target, state.highlightIndex).removeClass('datagrid-row-over'); opts.finder.getTr(target, index).addClass('datagrid-row-over'); state.highlightIndex = index; // scrollTo(target, index); } /** * select a row, the row index start with 0 */ function selectRow(target, index, notCheck, notScroll){ var state = $.data(target, 'datagrid'); var opts = state.options; var row = opts.finder.getRow(target, index); if (!row){return;} if (opts.onBeforeSelect.apply(target, getArguments(target, [index, row])) == false){return} if (opts.singleSelect){ unselectAll(target, true); state.selectedRows = []; } if (!notCheck && opts.checkOnSelect){ checkRow(target, index, true); // don't select the row again } if (opts.idField){ addArrayItem(state.selectedRows, opts.idField, row); } opts.finder.getTr(target, index).addClass('datagrid-row-selected'); opts.onSelect.apply(target, getArguments(target, [index, row])); if (!notScroll && opts.scrollOnSelect){ scrollTo(target, index); } } /** * unselect a row */ function unselectRow(target, index, notCheck){ var state = $.data(target, 'datagrid'); var dc = state.dc; var opts = state.options; var row = opts.finder.getRow(target, index); if (!row){return;} if (opts.onBeforeUnselect.apply(target, getArguments(target, [index, row])) == false){return} if (!notCheck && opts.checkOnSelect){ uncheckRow(target, index, true); // don't unselect the row again } opts.finder.getTr(target, index).removeClass('datagrid-row-selected'); if (opts.idField){ removeArrayItem(state.selectedRows, opts.idField, row[opts.idField]); } opts.onUnselect.apply(target, getArguments(target, [index, row])); } /** * select all rows on current page */ function selectAll(target, notCheck){ var state = $.data(target, 'datagrid'); var opts = state.options; var rows = opts.finder.getRows(target); var selectedRows = $.data(target, 'datagrid').selectedRows; if (!notCheck && opts.checkOnSelect){ checkAll(target, true); // don't select rows again } opts.finder.getTr(target, '', 'allbody').addClass('datagrid-row-selected'); if (opts.idField){ for(var index=0; index'); cell.children('table').bind('click dblclick contextmenu',function(e){ e.stopPropagation(); }); $.data(cell[0], 'datagrid.editor', { actions: editor, //target: editor.init(cell.find('td'), editoptions), target: editor.init(cell.find('td'), $.extend({height:opts.editorHeight},editoptions)), field: field, type: edittype, oldHtml: oldHtml }); } } }); fixRowHeight(target, index, true); } /** * destroy the row editor and restore the row height. */ function destroyEditor(target, index){ var opts = $.data(target, 'datagrid').options; var tr = opts.finder.getTr(target, index); tr.children('td').each(function(){ var cell = $(this).find('div.datagrid-editable'); if (cell.length){ var ed = $.data(cell[0], 'datagrid.editor'); if (ed.actions.destroy) { ed.actions.destroy(ed.target); } cell.html(ed.oldHtml); $.removeData(cell[0], 'datagrid.editor'); cell.removeClass('datagrid-editable'); cell.css('width',''); } }); } /** * Validate while editing, if valid return true. */ function validateRow(target, index){ var tr = $.data(target, 'datagrid').options.finder.getTr(target, index); if (!tr.hasClass('datagrid-row-editing')){ return true; } var vbox = tr.find('.validatebox-text'); vbox.validatebox('validate'); vbox.trigger('mouseleave'); var invalidbox = tr.find('.validatebox-invalid'); return invalidbox.length == 0; } /** * Get changed rows, if state parameter is not assigned, return all changed. * state: inserted,deleted,updated */ function getChanges(target, state){ var insertedRows = $.data(target, 'datagrid').insertedRows; var deletedRows = $.data(target, 'datagrid').deletedRows; var updatedRows = $.data(target, 'datagrid').updatedRows; if (!state){ var rows = []; rows = rows.concat(insertedRows); rows = rows.concat(deletedRows); rows = rows.concat(updatedRows); return rows; } else if (state == 'inserted'){ return insertedRows; } else if (state == 'deleted'){ return deletedRows; } else if (state == 'updated'){ return updatedRows; } return []; } function deleteRow(target, index){ var state = $.data(target, 'datagrid'); var opts = state.options; var data = state.data; var insertedRows = state.insertedRows; var deletedRows = state.deletedRows; $(target).datagrid('cancelEdit', index); var row = opts.finder.getRow(target, index); if (indexOfArray(insertedRows, row) >= 0){ removeArrayItem(insertedRows, row); } else { deletedRows.push(row); } removeArrayItem(state.selectedRows, opts.idField, row[opts.idField]); removeArrayItem(state.checkedRows, opts.idField, row[opts.idField]); opts.view.deleteRow.call(opts.view, target, index); if (opts.height == 'auto'){ fixRowHeight(target); // adjust the row height } $(target).datagrid('getPager').pagination('refresh', {total:data.total}); } function insertRow(target, param){ var data = $.data(target, 'datagrid').data; var view = $.data(target, 'datagrid').options.view; var insertedRows = $.data(target, 'datagrid').insertedRows; view.insertRow.call(view, target, param.index, param.row); insertedRows.push(param.row); $(target).datagrid('getPager').pagination('refresh', {total:data.total}); } function appendRow(target, row){ var data = $.data(target, 'datagrid').data; var view = $.data(target, 'datagrid').options.view; var insertedRows = $.data(target, 'datagrid').insertedRows; view.insertRow.call(view, target, null, row); insertedRows.push(row); $(target).datagrid('getPager').pagination('refresh', {total:data.total}); } function updateRow(target, param){ var state = $.data(target, 'datagrid'); var opts = state.options; var row = opts.finder.getRow(target, param.index); var updated = false; param.row = param.row || {}; for(var field in param.row){ if (row[field] !== param.row[field]){ updated = true; break; } } if (updated){ if (indexOfArray(state.insertedRows, row) == -1){ if (indexOfArray(state.updatedRows, row) == -1){ state.updatedRows.push(row); } } opts.view.updateRow.call(opts.view, target, param.index, param.row); } } function initChanges(target){ var state = $.data(target, 'datagrid'); var data = state.data; var rows = data.rows; var originalRows = []; for(var i=0; i= 0){ (action=='s'?selectRow:checkRow)(target, index, true); } } } for(var i=0; i 0){ $(this).datagrid('loadData', data); } else { // opts.view.setEmptyMsg(this); $(this).datagrid('autoSizeColumn'); } } request(this); }); }; function getDefaultEditors(names){ var editors = {}; $.map(names, function(name){ editors[name] = getEditorConf(name); }); return editors; function getEditorConf(name){ function isA(target){ return $.data($(target)[0], name) != undefined; } return { init: function(container, options){ var input = $('').appendTo(container); if (input[name] && name != 'text'){ return input[name](options); } else { return input; } }, destroy: function(target){ if (isA(target, name)){ $(target)[name]('destroy'); } }, getValue: function(target){ if (isA(target, name)){ var opts = $(target)[name]('options'); if (opts.multiple){ return $(target)[name]('getValues').join(opts.separator); } else { return $(target)[name]('getValue'); } } else { return $(target).val(); } }, setValue: function(target, value){ if (isA(target, name)){ var opts = $(target)[name]('options'); if (opts.multiple){ if (value){ $(target)[name]('setValues', value.split(opts.separator)); } else { $(target)[name]('clear'); } } else { $(target)[name]('setValue', value); } } else { $(target).val(value); } }, resize: function(target, width){ if (isA(target, name)){ $(target)[name]('resize', width); } else { $(target)._size({ width: width, height: $.fn.datagrid.defaults.editorHeight }); } } } } } var editors = $.extend({}, getDefaultEditors([ 'text','textbox','passwordbox','filebox','numberbox','numberspinner', 'combobox','combotree','combogrid','combotreegrid','datebox','datetimebox', 'timespinner','datetimespinner' ]), { textarea: { init: function(container, options){ var input = $('').appendTo(container); input.css('vertical-align','middle')._outerHeight(options.height); return input; }, getValue: function(target){ return $(target).val(); }, setValue: function(target, value){ $(target).val(value); }, resize: function(target, width){ $(target)._outerWidth(width); } }, checkbox: { init: function(container, options){ var input = $('').appendTo(container); input.val(options.on); input.attr('offval', options.off); return input; }, getValue: function(target){ if ($(target).is(':checked')){ return $(target).val(); } else { return $(target).attr('offval'); } }, setValue: function(target, value){ var checked = false; if ($(target).val() == value){ checked = true; } $(target)._propAttr('checked', checked); } }, validatebox: { init: function(container, options){ var input = $('').appendTo(container); input.validatebox(options); return input; }, destroy: function(target){ $(target).validatebox('destroy'); }, getValue: function(target){ return $(target).val(); }, setValue: function(target, value){ $(target).val(value); }, resize: function(target, width){ $(target)._outerWidth(width)._outerHeight($.fn.datagrid.defaults.editorHeight); } } }); $.fn.datagrid.methods = { options: function(jq){ var gopts = $.data(jq[0], 'datagrid').options; var popts = $.data(jq[0], 'datagrid').panel.panel('options'); var opts = $.extend(gopts, { width: popts.width, height: popts.height, closed: popts.closed, collapsed: popts.collapsed, minimized: popts.minimized, maximized: popts.maximized }); // var pager = jq.datagrid('getPager'); // if (pager.length){ // var pagerOpts = pager.pagination('options'); // $.extend(opts, { // pageNumber: pagerOpts.pageNumber, // pageSize: pagerOpts.pageSize // }); // } return opts; }, setSelectionState: function(jq){ return jq.each(function(){ setSelectionState(this); }); }, createStyleSheet: function(jq){ return createStyleSheet(jq[0]); }, getPanel: function(jq){ return $.data(jq[0], 'datagrid').panel; }, getPager: function(jq){ return $.data(jq[0], 'datagrid').panel.children('div.datagrid-pager'); }, getColumnFields: function(jq, frozen){ return getColumnFields(jq[0], frozen); }, getColumnOption: function(jq, field){ return getColumnOption(jq[0], field); }, resize: function(jq, param){ return jq.each(function(){ setSize(this, param); }); }, load: function(jq, params){ return jq.each(function(){ var opts = $(this).datagrid('options'); if (typeof params == 'string'){ opts.url = params; params = null; } opts.pageNumber = 1; var pager = $(this).datagrid('getPager'); // pager.pagination({pageNumber:1}); pager.pagination('refresh', {pageNumber:1}); request(this, params); }); }, reload: function(jq, params){ return jq.each(function(){ var opts = $(this).datagrid('options'); if (typeof params == 'string'){ opts.url = params; params = null; } request(this, params); }); }, reloadFooter: function(jq, footer){ return jq.each(function(){ var opts = $.data(this, 'datagrid').options; var dc = $.data(this, 'datagrid').dc; if (footer){ $.data(this, 'datagrid').footer = footer; } if (opts.showFooter){ opts.view.renderFooter.call(opts.view, this, dc.footer2, false); opts.view.renderFooter.call(opts.view, this, dc.footer1, true); if (opts.view.onAfterRender){ opts.view.onAfterRender.call(opts.view, this); } $(this).datagrid('fixRowHeight'); } }); }, loading: function(jq){ return jq.each(function(){ var opts = $.data(this, 'datagrid').options; $(this).datagrid('getPager').pagination('loading'); if (opts.loadMsg){ var panel = $(this).datagrid('getPanel'); if (!panel.children('div.datagrid-mask').length){ $('
                  ').appendTo(panel); var msg = $('
                  ').html(opts.loadMsg).appendTo(panel); // msg.css('marginLeft', -msg.outerWidth()/2); msg._outerHeight(40); msg.css({ marginLeft: (-msg.outerWidth()/2), lineHeight: (msg.height()+'px') }); } } }); }, loaded: function(jq){ return jq.each(function(){ $(this).datagrid('getPager').pagination('loaded'); var panel = $(this).datagrid('getPanel'); panel.children('div.datagrid-mask-msg').remove(); panel.children('div.datagrid-mask').remove(); }); }, fitColumns: function(jq){ return jq.each(function(){ fitColumns(this); }); }, fixColumnSize: function(jq, field){ return jq.each(function(){ fixColumnSize(this, field); }); }, fixRowHeight: function(jq, index){ return jq.each(function(){ fixRowHeight(this, index); }); }, freezeRow: function(jq, index){ return jq.each(function(){ freezeRow(this, index); }); }, autoSizeColumn: function(jq, field){ // adjusts the column width to fit the contents. return jq.each(function(){ autoSizeColumn(this, field); }); }, loadData: function(jq, data){ return jq.each(function(){ loadData(this, data); initChanges(this); }); }, getData: function(jq){ return $.data(jq[0], 'datagrid').data; }, getRows: function(jq){ return $.data(jq[0], 'datagrid').data.rows; }, getFooterRows: function(jq){ return $.data(jq[0], 'datagrid').footer; }, getRowIndex: function(jq, id){ // id or row record return getRowIndex(jq[0], id); }, getChecked: function(jq){ return getCheckedRows(jq[0]); }, getSelected: function(jq){ var rows = getSelectedRows(jq[0]); return rows.length>0 ? rows[0] : null; }, getSelections: function(jq){ return getSelectedRows(jq[0]); }, clearSelections: function(jq){ return jq.each(function(){ var state = $.data(this, 'datagrid'); var selectedRows = state.selectedRows; var checkedRows = state.checkedRows; selectedRows.splice(0, selectedRows.length); unselectAll(this); if (state.options.checkOnSelect){ checkedRows.splice(0, checkedRows.length); } }); }, clearChecked: function(jq){ return jq.each(function(){ var state = $.data(this, 'datagrid'); var selectedRows = state.selectedRows; var checkedRows = state.checkedRows; checkedRows.splice(0, checkedRows.length); uncheckAll(this); if (state.options.selectOnCheck){ selectedRows.splice(0, selectedRows.length); } }); }, scrollTo: function(jq, index){ return jq.each(function(){ scrollTo(this, index); }); }, highlightRow: function(jq, index){ return jq.each(function(){ highlightRow(this, index); scrollTo(this, index); }); }, selectAll: function(jq){ return jq.each(function(){ selectAll(this); }); }, unselectAll: function(jq){ return jq.each(function(){ unselectAll(this); }); }, selectRow: function(jq, index){ return jq.each(function(){ selectRow(this, index); }); }, selectRecord: function(jq, id){ return jq.each(function(){ var opts = $.data(this, 'datagrid').options; if (opts.idField){ var index = getRowIndex(this, id); if (index >= 0){ $(this).datagrid('selectRow', index); } } }); }, unselectRow: function(jq, index){ return jq.each(function(){ unselectRow(this, index); }); }, checkRow: function(jq, index){ return jq.each(function(){ checkRow(this, index); }); }, uncheckRow: function(jq, index){ return jq.each(function(){ uncheckRow(this, index); }); }, checkAll: function(jq){ return jq.each(function(){ checkAll(this); }); }, uncheckAll: function(jq){ return jq.each(function(){ uncheckAll(this); }); }, beginEdit: function(jq, index){ return jq.each(function(){ beginEdit(this, index); }); }, endEdit: function(jq, index){ return jq.each(function(){ endEdit(this, index, false); }); }, cancelEdit: function(jq, index){ return jq.each(function(){ endEdit(this, index, true); }); }, getEditors: function(jq, index){ return getEditors(jq[0], index); }, getEditor: function(jq, param){ // param: {index:0, field:'name'} return getEditor(jq[0], param); }, refreshRow: function(jq, index){ return jq.each(function(){ var opts = $.data(this, 'datagrid').options; opts.view.refreshRow.call(opts.view, this, index); }); }, validateRow: function(jq, index){ return validateRow(jq[0], index); }, updateRow: function(jq, param){ // param: {index:1,row:{code:'code1',name:'name1'}} return jq.each(function(){ updateRow(this, param); // var opts = $.data(this, 'datagrid').options; // opts.view.updateRow.call(opts.view, this, param.index, param.row); }); }, appendRow: function(jq, row){ return jq.each(function(){ appendRow(this, row); }); }, insertRow: function(jq, param){ return jq.each(function(){ insertRow(this, param); }); }, deleteRow: function(jq, index){ return jq.each(function(){ deleteRow(this, index); }); }, getChanges: function(jq, state){ return getChanges(jq[0], state); // state: inserted,deleted,updated }, acceptChanges: function(jq){ return jq.each(function(){ acceptChanges(this); }); }, rejectChanges: function(jq){ return jq.each(function(){ rejectChanges(this); }); }, mergeCells: function(jq, param){ return jq.each(function(){ mergeCells(this, param); }); }, showColumn: function(jq, field){ return jq.each(function(){ var col = $(this).datagrid('getColumnOption', field); if (col.hidden){ col.hidden = false; $(this).datagrid('getPanel').find('td[field="' + field + '"]').show(); fixColumnSpan(this, field, 1); $(this).datagrid('fitColumns'); } }); }, hideColumn: function(jq, field){ return jq.each(function(){ var col = $(this).datagrid('getColumnOption', field); if (!col.hidden){ col.hidden = true; $(this).datagrid('getPanel').find('td[field="' + field + '"]').hide(); fixColumnSpan(this, field, -1); $(this).datagrid('fitColumns'); } }); }, sort: function(jq, param){ return jq.each(function(){ sortGrid(this, param); }); }, gotoPage: function(jq, param){ return jq.each(function(){ var target = this; var page, cb; if (typeof param == 'object'){ page = param.page; cb = param.callback; } else { page = param; } $(target).datagrid('options').pageNumber = page; $(target).datagrid('getPager').pagination('refresh', { pageNumber: page }); request(target, null, function(){ if (cb){ cb.call(target, page); } }); }); } }; $.fn.datagrid.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.panel.parseOptions(target), $.parser.parseOptions(target, [ 'url','toolbar','idField','sortName','sortOrder','pagePosition','resizeHandle', {sharedStyleSheet:'boolean',fitColumns:'boolean',autoRowHeight:'boolean',striped:'boolean',nowrap:'boolean'}, {rownumbers:'boolean',singleSelect:'boolean',ctrlSelect:'boolean',checkOnSelect:'boolean',selectOnCheck:'boolean'}, {pagination:'boolean',pageSize:'number',pageNumber:'number'}, {multiSort:'boolean',remoteSort:'boolean',showHeader:'boolean',showFooter:'boolean'}, {scrollbarSize:'number',scrollOnSelect:'boolean'} ]), { pageList: (t.attr('pageList') ? eval(t.attr('pageList')) : undefined), loadMsg: (t.attr('loadMsg')!=undefined ? t.attr('loadMsg') : undefined), rowStyler: (t.attr('rowStyler') ? eval(t.attr('rowStyler')) : undefined) }); }; $.fn.datagrid.parseData = function(target){ var t = $(target); var data = { total:0, rows:[] }; var fields = t.datagrid('getColumnFields',true).concat(t.datagrid('getColumnFields',false)); t.find('tbody tr').each(function(){ data.total++; var row = {}; $.extend(row, $.parser.parseOptions(this,['iconCls','state'])); for(var i=0; i']; for(var i=0; i'); table.push(this.renderRow.call(this, target, fields, frozen, i, rows[i])); table.push(''); } table.push(''); $(container).html(table.join('')); }, renderTable: function(target, index, rows, frozen){ var state = $.data(target, 'datagrid'); var opts = state.options; if (frozen){ if (!(opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length))){ return ''; } } var fields = $(target).datagrid('getColumnFields', frozen); var table = ['']; for(var i=0; i'); table.push(this.renderRow.call(this, target, fields, frozen, index, row)); table.push(''); index++; } table.push('
                  '); return table.join(''); }, renderRow: function(target, fields, frozen, rowIndex, rowData){ var opts = $.data(target, 'datagrid').options; var cc = []; if (frozen && opts.rownumbers){ var rownumber = rowIndex + 1; if (opts.pagination){ rownumber += (opts.pageNumber-1)*opts.pageSize; } cc.push('
                  '+rownumber+'
                  '); } for(var i=0; i'); var style = ''; if (!col.checkbox){ if (col.align){style += 'text-align:' + col.align + ';'} if (!opts.nowrap){ style += 'white-space:normal;height:auto;'; } else if (opts.autoRowHeight){ style += 'height:auto;'; } } cc.push('
                  '); if (col.checkbox){ cc.push(''); } else if (col.formatter){ cc.push(col.formatter(value, rowData, rowIndex)); } else { cc.push(value); } cc.push('
                  '); cc.push(''); } } return cc.join(''); }, getStyleValue: function(css){ var classValue = ''; var styleValue = ''; if (typeof css == 'string'){ styleValue = css; } else if (css){ classValue = css['class'] || ''; styleValue = css['style'] || ''; } return {c:classValue, s:styleValue}; }, refreshRow: function(target, rowIndex){ this.updateRow.call(this, target, rowIndex, {}); }, updateRow: function(target, rowIndex, row){ var opts = $.data(target, 'datagrid').options; var rowData = opts.finder.getRow(target, rowIndex); $.extend(rowData, row); var cs = _getRowStyle.call(this, rowIndex); var style = cs.s; var cls = 'datagrid-row ' + (rowIndex % 2 && opts.striped ? 'datagrid-row-alt ' : ' ') + cs.c; function _getRowStyle(rowIndex){ var css = opts.rowStyler ? opts.rowStyler.call(target, rowIndex, rowData) : ''; return this.getStyleValue(css); } function _update(frozen){ var tr = opts.finder.getTr(target, rowIndex, 'body', (frozen?1:2)); if (!tr.length){return;} var fields = $(target).datagrid('getColumnFields', frozen); var checked = tr.find('div.datagrid-cell-check input[type=checkbox]').is(':checked'); tr.html(this.renderRow.call(this, target, fields, frozen, rowIndex, rowData)); var cls12 = (tr.hasClass('datagrid-row-checked') ? ' datagrid-row-checked' : '') + (tr.hasClass('datagrid-row-selected') ? ' datagrid-row-selected' : ''); tr.attr('style', style).attr('class', cls + cls12); if (checked){ tr.find('div.datagrid-cell-check input[type=checkbox]')._propAttr('checked', true); } } _update.call(this, true); _update.call(this, false); $(target).datagrid('fixRowHeight', rowIndex); }, insertRow: function(target, index, row){ var state = $.data(target, 'datagrid'); var opts = state.options; var dc = state.dc; var data = state.data; if (index == undefined || index == null) index = data.rows.length; if (index > data.rows.length) index = data.rows.length; function _incIndex(frozen){ var serno = frozen?1:2; for(var i=data.rows.length-1; i>=index; i--){ var tr = opts.finder.getTr(target, i, 'body', serno); tr.attr('datagrid-row-index', i+1); tr.attr('id', state.rowIdPrefix + '-' + serno + '-' + (i+1)); if (frozen && opts.rownumbers){ var rownumber = i+2; if (opts.pagination){ rownumber += (opts.pageNumber-1)*opts.pageSize; } tr.find('div.datagrid-cell-rownumber').html(rownumber); } if (opts.striped){ tr.removeClass('datagrid-row-alt').addClass((i+1)%2 ? 'datagrid-row-alt' : ''); } } } function _insert(frozen){ var serno = frozen?1:2; var fields = $(target).datagrid('getColumnFields', frozen); var rowId = state.rowIdPrefix + '-' + serno + '-' + index; var tr = ''; // var tr = '' + this.renderRow.call(this, target, fields, frozen, index, row) + ''; if (index >= data.rows.length){ // append new row if (data.rows.length){ // not empty opts.finder.getTr(target, '', 'last', serno).after(tr); } else { var cc = frozen ? dc.body1 : dc.body2; cc.html('' + tr + '
                  '); } } else { // insert new row opts.finder.getTr(target, index+1, 'body', serno).before(tr); } } _incIndex.call(this, true); _incIndex.call(this, false); _insert.call(this, true); _insert.call(this, false); data.total += 1; data.rows.splice(index, 0, row); this.setEmptyMsg(target); this.refreshRow.call(this, target, index); }, deleteRow: function(target, index){ var state = $.data(target, 'datagrid'); var opts = state.options; var data = state.data; function _decIndex(frozen){ var serno = frozen?1:2; for(var i=index+1; i').appendTo(state.dc.view); d.html(opts.emptyMsg).css('top', h+'px'); } } }, renderEmptyRow: function(target){ var cols = $.map($(target).datagrid('getColumnFields'), function(field){ return $(target).datagrid('getColumnOption', field); }); $.map(cols, function(col){ col.formatter1 = col.formatter; col.styler1 = col.styler; col.formatter = col.styler = undefined; }); var body2 = $.data(target, 'datagrid').dc.body2; body2.html(this.renderTable(target, 0, [{}], false)); body2.find('tbody *').css({ height: 1, borderColor: 'transparent', background: 'transparent' }); var tr = body2.find('.datagrid-row'); tr.removeClass('datagrid-row').removeAttr('datagrid-row-index'); tr.find('.datagrid-cell,.datagrid-cell-check').empty(); $.map(cols, function(col){ col.formatter = col.formatter1; col.styler = col.styler1; col.formatter1 = col.styler1 = undefined; }); } }; $.fn.datagrid.defaults = $.extend({}, $.fn.panel.defaults, { sharedStyleSheet: false, frozenColumns: undefined, columns: undefined, fitColumns: false, resizeHandle: 'right', // left,right,both resizeEdge: 5, autoRowHeight: true, toolbar: null, striped: false, method: 'post', nowrap: true, idField: null, url: null, data: null, loadMsg: 'Processing, please wait ...', emptyMsg: '', rownumbers: false, singleSelect: false, ctrlSelect: false, // only allows multi-selection when ctrl+click is used selectOnCheck: true, checkOnSelect: true, pagination: false, pagePosition: 'bottom', // top,bottom,both pageNumber: 1, pageSize: 10, pageList: [10,20,30,40,50], queryParams: {}, sortName: null, sortOrder: 'asc', multiSort: false, remoteSort: true, showHeader: true, showFooter: false, scrollOnSelect: true, scrollbarSize: 18, rownumberWidth: 30, // the column width of rownumbers editorHeight: 24, // the default height of editors headerEvents: { mouseover: headerOverEventHandler(true), mouseout: headerOverEventHandler(false), click: headerClickEventHandler, dblclick: headerDblclickEventHandler, contextmenu: headerMenuEventHandler }, rowEvents: { mouseover: hoverEventHandler(true), mouseout: hoverEventHandler(false), click: clickEventHandler, dblclick: dblclickEventHandler, contextmenu: contextmenuEventHandler }, rowStyler: function(rowIndex, rowData){}, // return style such as 'background:red' loader: function(param, success, error){ var opts = $(this).datagrid('options'); if (!opts.url) return false; $.ajax({ type: opts.method, url: opts.url, data: param, dataType: 'json', success: function(data){ success(data); }, error: function(){ error.apply(this, arguments); } }); }, loadFilter: function(data){ return data; }, editors: editors, finder:{ getTr:function(target, index, type, serno){ type = type || 'body'; serno = serno || 0; var state = $.data(target, 'datagrid'); var dc = state.dc; // data container var opts = state.options; if (serno == 0){ var tr1 = opts.finder.getTr(target, index, type, 1); var tr2 = opts.finder.getTr(target, index, type, 2); return tr1.add(tr2); } else { if (type == 'body'){ var tr = $('#' + state.rowIdPrefix + '-' + serno + '-' + index); if (!tr.length){ tr = (serno==1?dc.body1:dc.body2).find('>table>tbody>tr[datagrid-row-index='+index+']'); } return tr; } else if (type == 'footer'){ return (serno==1?dc.footer1:dc.footer2).find('>table>tbody>tr[datagrid-row-index='+index+']'); } else if (type == 'selected'){ return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr.datagrid-row-selected'); } else if (type == 'highlight'){ return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr.datagrid-row-over'); } else if (type == 'checked'){ return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr.datagrid-row-checked'); } else if (type == 'editing'){ return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr.datagrid-row-editing'); } else if (type == 'last'){ return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr[datagrid-row-index]:last'); } else if (type == 'allbody'){ return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr[datagrid-row-index]'); } else if (type == 'allfooter'){ return (serno==1?dc.footer1:dc.footer2).find('>table>tbody>tr[datagrid-row-index]'); } } }, getRow:function(target, p){ // p can be row index or tr object var index = (typeof p == 'object') ? p.attr('datagrid-row-index') : p; return $.data(target, 'datagrid').data.rows[parseInt(index)]; }, getRows:function(target){ return $(target).datagrid('getRows'); } }, view: defaultView, onBeforeLoad: function(param){}, onLoadSuccess: function(){}, onLoadError: function(){}, onClickRow: function(rowIndex, rowData){}, onDblClickRow: function(rowIndex, rowData){}, onClickCell: function(rowIndex, field, value){}, onDblClickCell: function(rowIndex, field, value){}, onBeforeSortColumn: function(sort, order){}, onSortColumn: function(sort, order){}, onResizeColumn: function(field, width){}, onBeforeSelect: function(rowIndex, rowData){}, onSelect: function(rowIndex, rowData){}, onBeforeUnselect: function(rowIndex, rowData){}, onUnselect: function(rowIndex, rowData){}, onSelectAll: function(rows){}, onUnselectAll: function(rows){}, onBeforeCheck: function(rowIndex, rowData){}, onCheck: function(rowIndex, rowData){}, onBeforeUncheck: function(rowIndex, rowData){}, onUncheck: function(rowIndex, rowData){}, onCheckAll: function(rows){}, onUncheckAll: function(rows){}, onBeforeEdit: function(rowIndex, rowData){}, onBeginEdit: function(rowIndex, rowData){}, onEndEdit: function(rowIndex, rowData, changes){}, onAfterEdit: function(rowIndex, rowData, changes){}, onCancelEdit: function(rowIndex, rowData){}, onHeaderContextMenu: function(e, field){}, onRowContextMenu: function(e, rowIndex, rowData){} }); })(jQuery); /** * propertygrid - EasyUI for jQuery * * Dependencies: * datagrid * */ (function($){ var currTarget; $(document).unbind('.propertygrid').bind('mousedown.propertygrid', function(e){ var p = $(e.target).closest('div.datagrid-view,div.combo-panel'); if (p.length){return;} stopEditing(currTarget); currTarget = undefined; }); function buildGrid(target){ var state = $.data(target, 'propertygrid'); var opts = $.data(target, 'propertygrid').options; $(target).datagrid($.extend({}, opts, { cls:'propertygrid', view:(opts.showGroup ? opts.groupView : opts.view), onBeforeEdit:function(index, row){ if (opts.onBeforeEdit.call(target, index, row) == false){return false;} var dg = $(this); var row = dg.datagrid('getRows')[index]; var col = dg.datagrid('getColumnOption', 'value'); col.editor = row.editor; }, onClickCell:function(index, field, value){ if (currTarget != this){ stopEditing(currTarget); currTarget = this; } if (opts.editIndex != index){ stopEditing(currTarget); $(this).datagrid('beginEdit', index); var ed = $(this).datagrid('getEditor', {index:index,field:field}); if (!ed){ ed = $(this).datagrid('getEditor', {index:index,field:'value'}); } if (ed){ var t = $(ed.target); var input = t.data('textbox') ? t.textbox('textbox') : t; input.focus(); opts.editIndex = index; } } opts.onClickCell.call(target, index, field, value); }, loadFilter:function(data){ stopEditing(this); return opts.loadFilter.call(this, data); } })); } function stopEditing(target){ var t = $(target); if (!t.length){return} var opts = $.data(target, 'propertygrid').options; opts.finder.getTr(target, null, 'editing').each(function(){ var index = parseInt($(this).attr('datagrid-row-index')); if (t.datagrid('validateRow', index)){ t.datagrid('endEdit', index); } else { t.datagrid('cancelEdit', index); } }); opts.editIndex = undefined; } $.fn.propertygrid = function(options, param){ if (typeof options == 'string'){ var method = $.fn.propertygrid.methods[options]; if (method){ return method(this, param); } else { return this.datagrid(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'propertygrid'); if (state){ $.extend(state.options, options); } else { var opts = $.extend({}, $.fn.propertygrid.defaults, $.fn.propertygrid.parseOptions(this), options); opts.frozenColumns = $.extend(true, [], opts.frozenColumns); opts.columns = $.extend(true, [], opts.columns); $.data(this, 'propertygrid', { options: opts }); } buildGrid(this); }); } $.fn.propertygrid.methods = { options: function(jq){ return $.data(jq[0], 'propertygrid').options; } }; $.fn.propertygrid.parseOptions = function(target){ return $.extend({}, $.fn.datagrid.parseOptions(target), $.parser.parseOptions(target,[{showGroup:'boolean'}])); }; // the group view definition var groupview = $.extend({}, $.fn.datagrid.defaults.view, { render: function(target, container, frozen){ var table = []; var groups = this.groups; for(var i=0; i'); if ((frozen && (opts.rownumbers || opts.frozenColumns.length)) || (!frozen && !(opts.rownumbers || opts.frozenColumns.length))){ table.push(''); table.push(' '); table.push(''); } if (!frozen){ table.push(''); table.push(opts.groupFormatter.call(target, group.value, group.rows)); table.push(''); } table.push(''); table.push(''); var index = group.startIndex; for(var j=0; j'); table.push(this.renderRow.call(this, target, fields, frozen, index, group.rows[j])); table.push(''); index++; } table.push('
                  '); return table.join(''); }, bindEvents: function(target){ var state = $.data(target, 'datagrid'); var dc = state.dc; var body = dc.body1.add(dc.body2); var clickHandler = ($.data(body[0],'events')||$._data(body[0],'events')).click[0].handler; body.unbind('click').bind('click', function(e){ var tt = $(e.target); var expander = tt.closest('span.datagrid-row-expander'); if (expander.length){ var gindex = expander.closest('div.datagrid-group').attr('group-index'); if (expander.hasClass('datagrid-row-collapse')){ $(target).datagrid('collapseGroup', gindex); } else { $(target).datagrid('expandGroup', gindex); } } else { clickHandler(e); } e.stopPropagation(); }); }, onBeforeRender: function(target, rows){ var state = $.data(target, 'datagrid'); var opts = state.options; initCss(); var groups = []; for(var i=0; i' + '.datagrid-group{height:'+opts.groupHeight+'px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;}' + '.datagrid-group-title,.datagrid-group-expander{display:inline-block;vertical-align:bottom;height:100%;line-height:'+opts.groupHeight+'px;padding:0 4px;}' + '.datagrid-group-expander{width:'+opts.expanderWidth+'px;text-align:center;padding:0}' + '.datagrid-row-expander{margin:'+Math.floor((opts.groupHeight-16)/2)+'px 0;display:inline-block;width:16px;height:16px;cursor:pointer}' + '' ); } } } }); $.extend($.fn.datagrid.methods, { groups:function(jq){ return jq.datagrid('options').view.groups; }, expandGroup:function(jq, groupIndex){ return jq.each(function(){ var view = $.data(this, 'datagrid').dc.view; var group = view.find(groupIndex!=undefined ? 'div.datagrid-group[group-index="'+groupIndex+'"]' : 'div.datagrid-group'); var expander = group.find('span.datagrid-row-expander'); if (expander.hasClass('datagrid-row-expand')){ expander.removeClass('datagrid-row-expand').addClass('datagrid-row-collapse'); group.next('table').show(); } $(this).datagrid('fixRowHeight'); }); }, collapseGroup:function(jq, groupIndex){ return jq.each(function(){ var view = $.data(this, 'datagrid').dc.view; var group = view.find(groupIndex!=undefined ? 'div.datagrid-group[group-index="'+groupIndex+'"]' : 'div.datagrid-group'); var expander = group.find('span.datagrid-row-expander'); if (expander.hasClass('datagrid-row-collapse')){ expander.removeClass('datagrid-row-collapse').addClass('datagrid-row-expand'); group.next('table').hide(); } $(this).datagrid('fixRowHeight'); }); } }); $.extend(groupview, { refreshGroupTitle: function(target, groupIndex){ var state = $.data(target, 'datagrid'); var opts = state.options; var dc = state.dc; var group = this.groups[groupIndex]; var span = dc.body2.children('div.datagrid-group[group-index=' + groupIndex + ']').find('span.datagrid-group-title'); span.html(opts.groupFormatter.call(target, group.value, group.rows)); }, insertRow: function(target, index, row){ var state = $.data(target, 'datagrid'); var opts = state.options; var dc = state.dc; var group = null; var groupIndex; if (!state.data.rows.length){ var originalRows = state.originalRows; var updatedRows = state.updatedRows; var insertedRows = state.insertedRows; var deletedRows = state.deletedRows; $(target).datagrid('loadData', [row]); state.originalRows = $.extend([],originalRows); state.updatedRows = $.extend([],updatedRows); state.insertedRows = $.extend([],insertedRows); state.deletedRows = $.extend([],deletedRows); state.insertedRows.push(row); return; } for(var i=0; i group.startIndex + group.rows.length){ index = group.startIndex + group.rows.length; } $.fn.datagrid.defaults.view.insertRow.call(this, target, index, row); if (index >= group.startIndex + group.rows.length){ _moveTr(index, true); _moveTr(index, false); } group.rows.splice(index - group.startIndex, 0, row); } else { group = { value: row[opts.groupField], rows: [row], startIndex: state.data.rows.length } groupIndex = this.groups.length; dc.body1.append(this.renderGroup.call(this, target, groupIndex, group, true)); dc.body2.append(this.renderGroup.call(this, target, groupIndex, group, false)); this.groups.push(group); state.data.rows.push(row); } this.refreshGroupTitle(target, groupIndex); function _moveTr(index,frozen){ var serno = frozen?1:2; var prevTr = opts.finder.getTr(target, index-1, 'body', serno); var tr = opts.finder.getTr(target, index, 'body', serno); tr.insertAfter(prevTr); } }, updateRow: function(target, index, row){ var opts = $.data(target, 'datagrid').options; $.fn.datagrid.defaults.view.updateRow.call(this, target, index, row); var tb = opts.finder.getTr(target, index, 'body', 2).closest('table.datagrid-btable'); var groupIndex = parseInt(tb.prev().attr('group-index')); this.refreshGroupTitle(target, groupIndex); }, deleteRow: function(target, index){ var state = $.data(target, 'datagrid'); var opts = state.options; var dc = state.dc; var body = dc.body1.add(dc.body2); var tb = opts.finder.getTr(target, index, 'body', 2).closest('table.datagrid-btable'); var groupIndex = parseInt(tb.prev().attr('group-index')); $.fn.datagrid.defaults.view.deleteRow.call(this, target, index); var group = this.groups[groupIndex]; if (group.rows.length > 1){ group.rows.splice(index-group.startIndex, 1); this.refreshGroupTitle(target, groupIndex); } else { body.children('div.datagrid-group[group-index='+groupIndex+']').remove(); for(var i=groupIndex+1; i').insertBefore(tr.find('.tree-title')); } if (row.checkState == 'checked'){ checkNode(target, idValue, true, true); } else if (row.checkState == 'unchecked'){ checkNode(target, idValue, false, true); } else { var flag = calcCheckFlag(row); if (flag === 0){ checkNode(target, idValue, false, true); } else if (flag === 1){ checkNode(target, idValue, true, true); } } } else { ck.remove(); row.checkState = undefined; row.checked = undefined; setParentCheckbox(target, row); } } /** * create sub tree * parentId: the node id value */ function createSubTree(target, parentId){ var opts = $.data(target, 'treegrid').options; var tr1 = opts.finder.getTr(target, parentId, 'body', 1); var tr2 = opts.finder.getTr(target, parentId, 'body', 2); var colspan1 = $(target).datagrid('getColumnFields', true).length + (opts.rownumbers?1:0); var colspan2 = $(target).datagrid('getColumnFields', false).length; _create(tr1, colspan1); _create(tr2, colspan2); function _create(tr, colspan){ $('' + '' + '
                  ' + '' + '').insertAfter(tr); } } /** * load data to specified node. */ function loadData(target, parentId, data, append, nocallback){ var state = $.data(target, 'treegrid'); var opts = state.options; var dc = state.dc; data = opts.loadFilter.call(target, data, parentId); var node = find(target, parentId); if (node){ var node1 = opts.finder.getTr(target, parentId, 'body', 1); var node2 = opts.finder.getTr(target, parentId, 'body', 2); var cc1 = node1.next('tr.treegrid-tr-tree').children('td').children('div'); var cc2 = node2.next('tr.treegrid-tr-tree').children('td').children('div'); if (!append){node.children = [];} } else { var cc1 = dc.body1; var cc2 = dc.body2; if (!append){state.data = [];} } if (!append){ cc1.empty(); cc2.empty(); } if (opts.view.onBeforeRender){ opts.view.onBeforeRender.call(opts.view, target, parentId, data); } opts.view.render.call(opts.view, target, cc1, true); opts.view.render.call(opts.view, target, cc2, false); if (opts.showFooter){ opts.view.renderFooter.call(opts.view, target, dc.footer1, true); opts.view.renderFooter.call(opts.view, target, dc.footer2, false); } if (opts.view.onAfterRender){ opts.view.onAfterRender.call(opts.view, target); } // reset the pagination if (!parentId && opts.pagination){ var total = $.data(target, 'treegrid').total; var pager = $(target).datagrid('getPager'); if (pager.pagination('options').total != total){ pager.pagination({total:total}); } } setRowHeight(target); setRowNumbers(target); $(target).treegrid('showLines'); $(target).treegrid('setSelectionState'); $(target).treegrid('autoSizeColumn'); if (!nocallback){ opts.onLoadSuccess.call(target, node, data); } } function request(target, parentId, params, append, callback){ var opts = $.data(target, 'treegrid').options; var body = $(target).datagrid('getPanel').find('div.datagrid-body'); if (parentId == undefined && opts.queryParams){opts.queryParams.id = undefined;} if (params) opts.queryParams = params; var param = $.extend({}, opts.queryParams); if (opts.pagination){ $.extend(param, { page: opts.pageNumber, rows: opts.pageSize }); } if (opts.sortName){ $.extend(param, { sort: opts.sortName, order: opts.sortOrder }); } var row = find(target, parentId); if (opts.onBeforeLoad.call(target, row, param) == false) return; // if (!opts.url) return; var folder = body.find('tr[node-id="' + parentId + '"] span.tree-folder'); folder.addClass('tree-loading'); $(target).treegrid('loading'); var result = opts.loader.call(target, param, function(data){ folder.removeClass('tree-loading'); $(target).treegrid('loaded'); loadData(target, parentId, data, append); if (callback) { callback(); } }, function(){ folder.removeClass('tree-loading'); $(target).treegrid('loaded'); opts.onLoadError.apply(target, arguments); if (callback){ callback(); } }); if (result == false){ folder.removeClass('tree-loading'); $(target).treegrid('loaded'); } } function getRoot(target){ var roots = getRoots(target); return roots.length ? roots[0] : null; } function getRoots(target){ return $.data(target, 'treegrid').data; } function getParent(target, idValue){ var row = find(target, idValue); if (row._parentId){ return find(target, row._parentId); } else { return null; } } function getChildren(target, parentId){ var data = $.data(target, 'treegrid').data; if (parentId){ var pnode = find(target, parentId); data = pnode ? (pnode.children||[]) : []; } var nodes = []; $.easyui.forEach(data, true, function(node){ nodes.push(node); }); return nodes; } // function getSelected(target){ // var rows = getSelections(target); // if (rows.length){ // return rows[0]; // } else { // return null; // } // } // // function getSelections(target){ // var rows = []; // var panel = $(target).datagrid('getPanel'); // panel.find('div.datagrid-view2 div.datagrid-body tr.datagrid-row-selected').each(function(){ // var id = $(this).attr('node-id'); // rows.push(find(target, id)); // }); // return rows; // } function getLevel(target, idValue){ // if (!idValue) return 0; var opts = $.data(target, 'treegrid').options; var tr = opts.finder.getTr(target, idValue); var node = tr.children('td[field="' + opts.treeField + '"]'); return node.find('span.tree-indent,span.tree-hit').length; } function find(target, idValue){ var state = $.data(target, 'treegrid'); var opts = state.options; var result = null; $.easyui.forEach(state.data, true, function(node){ if (node[opts.idField] == idValue){ result = node; return false; } }); return result; } function collapse(target, idValue){ var opts = $.data(target, 'treegrid').options; var row = find(target, idValue); var tr = opts.finder.getTr(target, idValue); var hit = tr.find('span.tree-hit'); if (hit.length == 0) return; // is leaf if (hit.hasClass('tree-collapsed')) return; // has collapsed if (opts.onBeforeCollapse.call(target, row) == false) return; hit.removeClass('tree-expanded tree-expanded-hover').addClass('tree-collapsed'); hit.next().removeClass('tree-folder-open'); row.state = 'closed'; tr = tr.next('tr.treegrid-tr-tree'); var cc = tr.children('td').children('div'); if (opts.animate){ cc.slideUp('normal', function(){ $(target).treegrid('autoSizeColumn'); setRowHeight(target, idValue); opts.onCollapse.call(target, row); }); } else { cc.hide(); $(target).treegrid('autoSizeColumn'); setRowHeight(target, idValue); opts.onCollapse.call(target, row); } } function expand(target, idValue){ var opts = $.data(target, 'treegrid').options; var tr = opts.finder.getTr(target, idValue); var hit = tr.find('span.tree-hit'); var row = find(target, idValue); if (hit.length == 0) return; // is leaf if (hit.hasClass('tree-expanded')) return; // has expanded if (opts.onBeforeExpand.call(target, row) == false) return; hit.removeClass('tree-collapsed tree-collapsed-hover').addClass('tree-expanded'); hit.next().addClass('tree-folder-open'); var subtree = tr.next('tr.treegrid-tr-tree'); if (subtree.length){ var cc = subtree.children('td').children('div'); _expand(cc); } else { createSubTree(target, row[opts.idField]); var subtree = tr.next('tr.treegrid-tr-tree'); var cc = subtree.children('td').children('div'); cc.hide(); // var params = opts.queryParams || {}; var params = $.extend({}, opts.queryParams || {}); params.id = row[opts.idField]; request(target, row[opts.idField], params, true, function(){ if (cc.is(':empty')){ subtree.remove(); } else { _expand(cc); } }); } function _expand(cc){ row.state = 'open'; if (opts.animate){ cc.slideDown('normal', function(){ $(target).treegrid('autoSizeColumn'); setRowHeight(target, idValue); opts.onExpand.call(target, row); }); } else { cc.show(); $(target).treegrid('autoSizeColumn'); setRowHeight(target, idValue); opts.onExpand.call(target, row); } } } function toggle(target, idValue){ var opts = $.data(target, 'treegrid').options; var tr = opts.finder.getTr(target, idValue); var hit = tr.find('span.tree-hit'); if (hit.hasClass('tree-expanded')){ collapse(target, idValue); } else { expand(target, idValue); } } function collapseAll(target, idValue){ var opts = $.data(target, 'treegrid').options; var nodes = getChildren(target, idValue); if (idValue){ nodes.unshift(find(target, idValue)); } for(var i=0; i').insertBefore(nodeIcon); if (hit.prev().length){ hit.prev().remove(); } } } loadData(target, param.parent, param.data, state.data.length > 0, true); } function insert(target, param){ var ref = param.before || param.after; var opts = $.data(target, 'treegrid').options; var pnode = getParent(target, ref); append(target, { parent: (pnode?pnode[opts.idField]:null), data: [param.data] }); // adjust the sequence of nodes var pdata = pnode ? pnode.children : $(target).treegrid('getRoots'); for(var i=0; i 1){ _getCell(roots[0]).addClass('tree-root-first'); } else if (roots.length == 1){ _getCell(roots[0]).addClass('tree-root-one'); } _join(roots); _line(roots); function _join(nodes){ $.map(nodes, function(node){ if (node.children && node.children.length){ _join(node.children); } else { var cell = _getCell(node); cell.find('.tree-icon').prev().addClass('tree-join'); } }); if (nodes.length){ var cell = _getCell(nodes[nodes.length-1]); cell.addClass('tree-node-last'); cell.find('.tree-join').removeClass('tree-join').addClass('tree-joinbottom'); } } function _line(nodes){ $.map(nodes, function(node){ if (node.children && node.children.length){ _line(node.children); } }); for(var i=0; i']; for(var i=0; i'); table = table.concat(view.renderRow.call(view, target, fields, frozen, depth, row)); table.push(''); if (row.children && row.children.length){ var tt = getTreeData.call(this, frozen, depth+1, row.children); var v = row.state == 'closed' ? 'none' : 'block'; table.push('
                  '); table = table.concat(tt); table.push('
                  '); } } table.push(''); return table; } }, renderFooter: function(target, container, frozen){ var opts = $.data(target, 'treegrid').options; var rows = $.data(target, 'treegrid').footer || []; var fields = $(target).datagrid('getColumnFields', frozen); var table = ['']; for(var i=0; i'); table.push(this.renderRow.call(this, target, fields, frozen, 0, row)); table.push(''); } table.push('
                  '); $(container).html(table.join('')); }, renderRow: function(target, fields, frozen, depth, row){ var state = $.data(target, 'treegrid'); var opts = state.options; var cc = []; if (frozen && opts.rownumbers){ cc.push('
                  0
                  '); } for(var i=0; i'); var style = ''; if (!col.checkbox){ if (col.align){style += 'text-align:' + col.align + ';'} if (!opts.nowrap){ style += 'white-space:normal;height:auto;'; } else if (opts.autoRowHeight){ style += 'height:auto;'; } } cc.push('
                  '); if (col.checkbox){ if (row.checked){ cc.push(''); } else { var val = null; if (col.formatter){ val = col.formatter(row[field], row); } else { val = row[field]; // val = row[field] || ' '; } if (field == opts.treeField){ for(var j=0; j'); } if (row.state == 'closed'){ cc.push(''); cc.push(''); } else { if (row.children && row.children.length){ cc.push(''); cc.push(''); } else { cc.push(''); cc.push(''); } } if (this.hasCheckbox(target, row)){ var flag = 0; var crow = $.easyui.getArrayItem(state.checkedRows, opts.idField, row[opts.idField]); if (crow){ flag = crow.checkState == 'checked' ? 1 : 2; row.checkState = crow.checkState; row.checked = crow.checked; $.easyui.addArrayItem(state.checkedRows, opts.idField, row); } else { var prow = $.easyui.getArrayItem(state.checkedRows, opts.idField, row._parentId); if (prow && prow.checkState == 'checked' && opts.cascadeCheck){ flag = 1; row.checked = true; $.easyui.addArrayItem(state.checkedRows, opts.idField, row); } else if (row.checked){ $.easyui.addArrayItem(state.tmpIds, row[opts.idField]); } row.checkState = flag ? 'checked' : 'unchecked'; } cc.push(''); } else { row.checkState = undefined; row.checked = undefined; } cc.push('' + val + ''); } else { cc.push(val); } } cc.push('
                  '); cc.push(''); } } return cc.join(''); }, hasCheckbox: function(target, row){ var opts = $.data(target, 'treegrid').options; if (opts.checkbox){ if ($.isFunction(opts.checkbox)){ if (opts.checkbox.call(target, row)){ return true; } else { return false; } } else if (opts.onlyLeafCheck){ if (row.state == 'open' && !(row.children && row.children.length)){ return true; } } else { return true; } } return false; }, refreshRow: function(target, id){ this.updateRow.call(this, target, id, {}); }, updateRow: function(target, id, row){ var opts = $.data(target, 'treegrid').options; var rowData = $(target).treegrid('find', id); $.extend(rowData, row); var depth = $(target).treegrid('getLevel', id) - 1; var styleValue = opts.rowStyler ? opts.rowStyler.call(target, rowData) : ''; var rowIdPrefix = $.data(target, 'datagrid').rowIdPrefix; var newId = rowData[opts.idField]; function _update(frozen){ var fields = $(target).treegrid('getColumnFields', frozen); var tr = opts.finder.getTr(target, id, 'body', (frozen?1:2)); var rownumber = tr.find('div.datagrid-cell-rownumber').html(); var checked = tr.find('div.datagrid-cell-check input[type=checkbox]').is(':checked'); tr.html(this.renderRow(target, fields, frozen, depth, rowData)); tr.attr('style', styleValue || ''); tr.find('div.datagrid-cell-rownumber').html(rownumber); if (checked){ tr.find('div.datagrid-cell-check input[type=checkbox]')._propAttr('checked', true); } if (newId != id){ tr.attr('id', rowIdPrefix + '-' + (frozen?1:2) + '-' + newId); tr.attr('node-id', newId); } } _update.call(this, true); _update.call(this, false); $(target).treegrid('fixRowHeight', id); }, deleteRow: function(target, id){ var opts = $.data(target, 'treegrid').options; var tr = opts.finder.getTr(target, id); tr.next('tr.treegrid-tr-tree').remove(); tr.remove(); var pnode = del(id); if (pnode){ if (pnode.children.length == 0){ tr = opts.finder.getTr(target, pnode[opts.idField]); tr.next('tr.treegrid-tr-tree').remove(); var cell = tr.children('td[field="' + opts.treeField + '"]').children('div.datagrid-cell'); cell.find('.tree-icon').removeClass('tree-folder').addClass('tree-file'); cell.find('.tree-hit').remove(); $('').prependTo(cell); } } this.setEmptyMsg(target); function del(id){ var cc; var pnode = $(target).treegrid('getParent', id); if (pnode){ cc = pnode.children; } else { cc = $(target).treegrid('getData'); } for(var i=0; ib?1:-1); }; r = sortFunc(r1[sn], r2[sn]) * (so=='asc'?1:-1); if (r != 0){ return r; } } return r; }); for(var i=0; i'); if (!frozen){ table.push(''); table.push(opts.groupFormatter.call(target, group.value, group.rows)); table.push(''); } table.push(''); table.push(this.renderTable(target, group.startIndex, group.rows, frozen)); return table.join(''); }, groupRows: function(target, rows){ var state = $.data(target, 'datagrid'); var opts = state.options; var groups = []; for(var i=0; idiv.combo-p>div.combo-panel:visible').panel('close'); }); }); /** * create the combo component. */ function buildCombo(target){ var state = $.data(target, 'combo'); var opts = state.options; if (!state.panel){ state.panel = $('
                  ').appendTo('body'); state.panel.panel({ minWidth: opts.panelMinWidth, maxWidth: opts.panelMaxWidth, minHeight: opts.panelMinHeight, maxHeight: opts.panelMaxHeight, doSize:false, closed:true, cls:'combo-p', style:{ position:'absolute', zIndex:10 }, onOpen:function(){ var target = $(this).panel('options').comboTarget; var state = $.data(target, 'combo'); if (state){ state.options.onShowPanel.call(target); } }, onBeforeClose:function(){ hideInnerPanel($(this).parent()); }, onClose:function(){ var target = $(this).panel('options').comboTarget; var state = $(target).data('combo'); // var state = $.data(target, 'combo'); if (state){ state.options.onHidePanel.call(target); } } }); } var icons = $.extend(true, [], opts.icons); if (opts.hasDownArrow){ icons.push({ iconCls: 'combo-arrow', handler: function(e){ togglePanel(e.data.target); } }); } $(target).addClass('combo-f').textbox($.extend({}, opts, { icons: icons, onChange: function(){} })); $(target).attr('comboName', $(target).attr('textboxName')); state.combo = $(target).next(); state.combo.addClass('combo'); state.panel.unbind('.combo'); for(var event in opts.panelEvents){ state.panel.bind(event+'.combo', {target:target}, opts.panelEvents[event]); } } function destroy(target){ var state = $.data(target, 'combo'); var opts = state.options; var p = state.panel; if (p.is(':visible')){p.panel('close')} if (!opts.cloned){p.panel('destroy')} $(target).textbox('destroy'); } // function togglePanel(target){ // var panel = $.data(target, 'combo').panel; // if (panel.is(':visible')){ // hidePanel(target); // } else { // var p = $(target).closest('div.combo-panel'); // the parent combo panel // $('div.combo-panel:visible').not(panel).not(p).panel('close'); // $(target).combo('showPanel'); // } // $(target).combo('textbox').focus(); // } function togglePanel(target){ var panel = $.data(target, 'combo').panel; if (panel.is(':visible')){ var comboTarget = panel.combo('combo'); hidePanel(comboTarget); if (comboTarget != target){ $(target).combo('showPanel'); } } else { var p = $(target).closest('div.combo-p').children('.combo-panel'); // the parent combo panel $('div.combo-panel:visible').not(panel).not(p).panel('close'); $(target).combo('showPanel'); } $(target).combo('textbox').focus(); } /** * hide inner drop-down panels of a specified container */ function hideInnerPanel(container){ $(container).find('.combo-f').each(function(){ var p = $(this).combo('panel'); if (p.is(':visible')){ p.panel('close'); } }); } /** * The click event handler on input box */ function inputClickHandler(e){ var target = e.data.target; var state = $.data(target, 'combo'); var opts = state.options; if (!opts.editable){ togglePanel(target); } else { var p = $(target).closest('div.combo-p').children('.combo-panel'); // the parent combo panel // $('div.combo-panel:visible').not(panel).not(p).panel('close'); $('div.combo-panel:visible').not(p).each(function(){ var comboTarget = $(this).combo('combo'); if (comboTarget != target){ hidePanel(comboTarget); } }); } } /** * The key event handler on input box */ function inputEventHandler(e){ var target = e.data.target; var t = $(target); var state = t.data('combo'); var opts = t.combo('options'); state.panel.panel('options').comboTarget = target; switch(e.keyCode){ case 38: // up opts.keyHandler.up.call(target, e); break; case 40: // down opts.keyHandler.down.call(target, e); break; case 37: // left opts.keyHandler.left.call(target, e); break; case 39: // right opts.keyHandler.right.call(target, e); break; case 13: // enter e.preventDefault(); opts.keyHandler.enter.call(target, e); return false; case 9: // tab case 27: // esc hidePanel(target); break; default: if (opts.editable){ if (state.timer){ clearTimeout(state.timer); } state.timer = setTimeout(function(){ var q = t.combo('getText'); if (state.previousText != q){ state.previousText = q; t.combo('showPanel'); opts.keyHandler.query.call(target, q, e); t.combo('validate'); } }, opts.delay); } } } /** * show the drop down panel. */ function showPanel(target){ var state = $.data(target, 'combo'); var combo = state.combo; var panel = state.panel; var opts = $(target).combo('options'); var palOpts = panel.panel('options'); palOpts.comboTarget = target; // store the target combo element if (palOpts.closed){ panel.panel('panel').show().css({ zIndex: ($.fn.menu ? $.fn.menu.defaults.zIndex++ : ($.fn.window ? $.fn.window.defaults.zIndex++ : 99)), left: -999999 }); panel.panel('resize', { width: (opts.panelWidth ? opts.panelWidth : combo._outerWidth()), height: opts.panelHeight }); panel.panel('panel').hide(); panel.panel('open'); } // (function(){ // if (panel.is(':visible')){ // panel.panel('move', { // left:getLeft(), // top:getTop() // }); // setTimeout(arguments.callee, 200); // } // })(); (function(){ if (palOpts.comboTarget == target && panel.is(':visible')){ panel.panel('move', { left:getLeft(), top:getTop() }); setTimeout(arguments.callee, 200); } })(); function getLeft(){ var left = combo.offset().left; if (opts.panelAlign == 'right'){ left += combo._outerWidth() - panel._outerWidth(); } if (left + panel._outerWidth() > $(window)._outerWidth() + $(document).scrollLeft()){ left = $(window)._outerWidth() + $(document).scrollLeft() - panel._outerWidth(); } if (left < 0){ left = 0; } return left; } function getTop(){ var top = combo.offset().top + combo._outerHeight(); if (top + panel._outerHeight() > $(window)._outerHeight() + $(document).scrollTop()){ top = combo.offset().top - panel._outerHeight(); } if (top < $(document).scrollTop()){ top = combo.offset().top + combo._outerHeight(); } return top; } } /** * hide the drop down panel. */ function hidePanel(target){ var panel = $.data(target, 'combo').panel; panel.panel('close'); } // function clear(target){ // var state = $.data(target, 'combo'); // var opts = state.options; // var combo = state.combo; // $(target).textbox('clear'); // if (opts.multiple){ // combo.find('.textbox-value').remove(); // } else { // combo.find('.textbox-value').val(''); // } // } function setText(target, text){ var state = $.data(target, 'combo'); var oldText = $(target).textbox('getText'); if (oldText != text){ $(target).textbox('setText', text); } state.previousText = text; } function getValues(target){ var state = $.data(target, 'combo'); var opts = state.options; // var combo = state.combo; var combo = $(target).next(); var values = []; combo.find('.textbox-value').each(function(){ values.push($(this).val()); }); if (opts.multivalue){ return values; } else { return values.length ? values[0].split(opts.separator) : values; } } function setValues(target, values){ var state = $.data(target, 'combo'); var combo = state.combo; // var opts = state.options; var opts = $(target).combo('options'); if (!$.isArray(values)){values = values.split(opts.separator)} var oldValues = getValues(target); combo.find('.textbox-value').remove(); if (values.length){ if (opts.multivalue){ for(var i=0; i').appendTo(combo); input.attr('name', name); if (opts.disabled){ input.attr('disabled', 'disabled'); } input.val(value); } // var changed = (function(){ // if (oldValues.length != values.length){return true;} // var a1 = $.extend(true, [], oldValues); // var a2 = $.extend(true, [], values); // a1.sort(); // a2.sort(); // for(var i=0; i panel.height()){ var h = panel.scrollTop() + item.position().top + item.outerHeight() - panel.height(); panel.scrollTop(h); } } panel.triggerHandler('scroll'); // trigger the group sticking } function nav(target, dir){ var opts = $.data(target, 'combobox').options; var panel = $(target).combobox('panel'); var item = panel.children('div.combobox-item-hover'); if (!item.length){ item = panel.children('div.combobox-item-selected'); } item.removeClass('combobox-item-hover'); var firstSelector = 'div.combobox-item:visible:not(.combobox-item-disabled):first'; var lastSelector = 'div.combobox-item:visible:not(.combobox-item-disabled):last'; if (!item.length){ item = panel.children(dir=='next' ? firstSelector : lastSelector); } else { if (dir == 'next'){ item = item.nextAll(firstSelector); if (!item.length){ item = panel.children(firstSelector); } } else { item = item.prevAll(firstSelector); if (!item.length){ item = panel.children(lastSelector); } } } if (item.length){ item.addClass('combobox-item-hover'); var row = opts.finder.getRow(target, item); if (row){ $(target).combobox('scrollTo', row[opts.valueField]); if (opts.selectOnNavigation){ select(target, row[opts.valueField]); } } } } /** * select the specified value */ function select(target, value, remainText){ var opts = $.data(target, 'combobox').options; var values = $(target).combo('getValues'); if ($.inArray(value+'', values) == -1){ if (opts.multiple){ values.push(value); } else { values = [value]; } setValues(target, values, remainText); } } /** * unselect the specified value */ function unselect(target, value){ var opts = $.data(target, 'combobox').options; var values = $(target).combo('getValues'); var index = $.inArray(value+'', values); if (index >= 0){ values.splice(index, 1); setValues(target, values); } } /** * set values */ function setValues(target, values, remainText){ var opts = $.data(target, 'combobox').options; var panel = $(target).combo('panel'); if (!$.isArray(values)){ values = values.split(opts.separator); } if (!opts.multiple){ values = values.length ? [values[0]] : ['']; } // unselect the old rows var oldValues = $(target).combo('getValues'); if (panel.is(':visible')){ panel.find('.combobox-item-selected').each(function(){ var row = opts.finder.getRow(target, $(this)); if (row){ if ($.easyui.indexOfArray(oldValues, row[opts.valueField]) == -1){ $(this).removeClass('combobox-item-selected'); } } }); } $.map(oldValues, function(v){ if ($.easyui.indexOfArray(values, v) == -1){ var el = opts.finder.getEl(target, v); if (el.hasClass('combobox-item-selected')){ el.removeClass('combobox-item-selected'); opts.onUnselect.call(target, opts.finder.getRow(target, v)); } } }); var theRow = null; var vv = [], ss = []; for(var i=0; i= 0){ vv.push(v); } }); t.combobox('setValues', vv); if (!opts.multiple){ t.combobox('hidePanel'); } } /** * create the component */ function create(target){ var state = $.data(target, 'combobox'); var opts = state.options; $(target).addClass('combobox-f'); $(target).combo($.extend({}, opts, { onShowPanel: function(){ $(this).combo('panel').find('div.combobox-item:hidden,div.combobox-group:hidden').show(); setValues(this, $(this).combobox('getValues'), true); $(this).combobox('scrollTo', $(this).combobox('getValue')); opts.onShowPanel.call(this); } })); // var p = $(target).combo('panel'); // p.unbind('.combobox'); // for(var event in opts.panelEvents){ // p.bind(event+'.combobox', {target:target}, opts.panelEvents[event]); // } } function mouseoverHandler(e){ $(this).children('div.combobox-item-hover').removeClass('combobox-item-hover'); var item = $(e.target).closest('div.combobox-item'); if (!item.hasClass('combobox-item-disabled')){ item.addClass('combobox-item-hover'); } e.stopPropagation(); } function mouseoutHandler(e){ $(e.target).closest('div.combobox-item').removeClass('combobox-item-hover'); e.stopPropagation(); } function clickHandler(e){ var target = $(this).panel('options').comboTarget; if (!target){return;} var opts = $(target).combobox('options'); var item = $(e.target).closest('div.combobox-item'); if (!item.length || item.hasClass('combobox-item-disabled')){return} var row = opts.finder.getRow(target, item); if (!row){return;} if (opts.blurTimer){ clearTimeout(opts.blurTimer); opts.blurTimer = null; } opts.onClick.call(target, row); var value = row[opts.valueField]; if (opts.multiple){ if (item.hasClass('combobox-item-selected')){ unselect(target, value); } else { select(target, value); } } else { $(target).combobox('setValue', value).combobox('hidePanel'); } e.stopPropagation(); } function scrollHandler(e){ var target = $(this).panel('options').comboTarget; if (!target){return;} var opts = $(target).combobox('options'); if (opts.groupPosition == 'sticky'){ var stick = $(this).children('.combobox-stick'); if (!stick.length){ stick = $('
                  ').appendTo(this); } stick.hide(); var state = $(target).data('combobox'); $(this).children('.combobox-group:visible').each(function(){ var g = $(this); var groupData = opts.finder.getGroup(target, g); var rowData = state.data[groupData.startIndex + groupData.count - 1]; var last = opts.finder.getEl(target, rowData[opts.valueField]); if (g.position().top < 0 && last.position().top > 0){ stick.show().html(g.html()); return false; } }); } } $.fn.combobox = function(options, param){ if (typeof options == 'string'){ var method = $.fn.combobox.methods[options]; if (method){ return method(this, param); } else { return this.combo(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'combobox'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'combobox', { options: $.extend({}, $.fn.combobox.defaults, $.fn.combobox.parseOptions(this), options), data: [] }); } create(this); if (state.options.data){ loadData(this, state.options.data); } else { var data = $.fn.combobox.parseData(this); if (data.length){ loadData(this, data); } } request(this); }); }; $.fn.combobox.methods = { options: function(jq){ var copts = jq.combo('options'); return $.extend($.data(jq[0], 'combobox').options, { width: copts.width, height: copts.height, originalValue: copts.originalValue, disabled: copts.disabled, readonly: copts.readonly }); }, cloneFrom: function(jq, from){ return jq.each(function(){ $(this).combo('cloneFrom', from); $.data(this, 'combobox', $(from).data('combobox')); $(this).addClass('combobox-f').attr('comboboxName', $(this).attr('textboxName')); }); }, getData: function(jq){ return $.data(jq[0], 'combobox').data; }, setValues: function(jq, values){ return jq.each(function(){ var opts = $(this).combobox('options'); if ($.isArray(values)){ values = $.map(values, function(value){ if (value && typeof value == 'object'){ $.easyui.addArrayItem(opts.mappingRows, opts.valueField, value); return value[opts.valueField]; } else { return value; } }); } setValues(this, values); }); }, setValue: function(jq, value){ return jq.each(function(){ $(this).combobox('setValues', $.isArray(value)?value:[value]); }); }, clear: function(jq){ return jq.each(function(){ setValues(this, []); }); }, reset: function(jq){ return jq.each(function(){ var opts = $(this).combobox('options'); if (opts.multiple){ $(this).combobox('setValues', opts.originalValue); } else { $(this).combobox('setValue', opts.originalValue); } }); }, loadData: function(jq, data){ return jq.each(function(){ loadData(this, data); }); }, reload: function(jq, url){ return jq.each(function(){ if (typeof url == 'string'){ request(this, url); } else { if (url){ var opts = $(this).combobox('options'); opts.queryParams = url; } request(this); } }); }, select: function(jq, value){ return jq.each(function(){ select(this, value); }); }, unselect: function(jq, value){ return jq.each(function(){ unselect(this, value); }); }, scrollTo: function(jq, value){ return jq.each(function(){ scrollTo(this, value); }); } }; $.fn.combobox.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.combo.parseOptions(target), $.parser.parseOptions(target,[ 'valueField','textField','groupField','groupPosition','mode','method','url', {showItemIcon:'boolean',limitToList:'boolean'} ])); }; $.fn.combobox.parseData = function(target){ var data = []; var opts = $(target).combobox('options'); $(target).children().each(function(){ if (this.tagName.toLowerCase() == 'optgroup'){ var group = $(this).attr('label'); $(this).children().each(function(){ _parseItem(this, group); }); } else { _parseItem(this); } }); return data; function _parseItem(el, group){ var t = $(el); var row = {}; row[opts.valueField] = t.attr('value')!=undefined ? t.attr('value') : t.text(); row[opts.textField] = t.text(); row['iconCls'] = $.parser.parseOptions(el, ['iconCls']).iconCls; row['selected'] = t.is(':selected'); row['disabled'] = t.is(':disabled'); if (group){ opts.groupField = opts.groupField || 'group'; row[opts.groupField] = group; } data.push(row); } }; var COMBOBOX_SERNO = 0; var defaultView = { render: function(target, container, data){ var state = $.data(target, 'combobox'); var opts = state.options; COMBOBOX_SERNO++; state.itemIdPrefix = '_easyui_combobox_i' + COMBOBOX_SERNO; state.groupIdPrefix = '_easyui_combobox_g' + COMBOBOX_SERNO; state.groups = []; var dd = []; var group = undefined; for(var i=0; i'); dd.push(opts.groupFormatter ? opts.groupFormatter.call(target, g) : g); dd.push(''); } else { state.groups[state.groups.length-1].count++; } } else { group = undefined; } var cls = 'combobox-item' + (row.disabled ? ' combobox-item-disabled' : '') + (g ? ' combobox-gitem' : ''); dd.push('
                  '); if (opts.showItemIcon && row.iconCls){ dd.push(''); } dd.push(opts.formatter ? opts.formatter.call(target, row) : s); dd.push('
                  '); } $(container).html(dd.join('')); } }; $.fn.combobox.defaults = $.extend({}, $.fn.combo.defaults, { valueField: 'value', textField: 'text', groupPosition: 'static', // or 'sticky' groupField: null, groupFormatter: function(group){return group;}, mode: 'local', // or 'remote' method: 'post', url: null, data: null, queryParams: {}, showItemIcon: false, limitToList: false, // limit the inputed values to the listed items unselectedValues: [], mappingRows: [], view: defaultView, keyHandler: { up: function(e){nav(this,'prev');e.preventDefault()}, down: function(e){nav(this,'next');e.preventDefault()}, left: function(e){}, right: function(e){}, enter: function(e){doEnter(this)}, query: function(q,e){doQuery(this, q)} }, inputEvents: $.extend({}, $.fn.combo.defaults.inputEvents, { blur: function(e){ var target = e.data.target; var opts = $(target).combobox('options'); if (opts.reversed || opts.limitToList){ if (opts.blurTimer){ clearTimeout(opts.blurTimer); } opts.blurTimer = setTimeout(function(){ var existing = $(target).parent().length; if (existing){ if (opts.reversed){ $(target).combobox('setValues', $(target).combobox('getValues')); } else if (opts.limitToList){ //doEnter(target); var vv = []; $.map($(target).combobox('getValues'), function(v){ var index = $.easyui.indexOfArray($(target).combobox('getData'), opts.valueField, v); if (index >= 0){ vv.push(v); } }); $(target).combobox('setValues', vv); } opts.blurTimer = null; } },50); } } }), panelEvents: { mouseover: mouseoverHandler, mouseout: mouseoutHandler, mousedown: function(e){ e.preventDefault(); e.stopPropagation(); }, click: clickHandler, scroll: scrollHandler }, filter: function(q, row){ var opts = $(this).combobox('options'); return row[opts.textField].toLowerCase().indexOf(q.toLowerCase()) >= 0; }, formatter: function(row){ var opts = $(this).combobox('options'); return row[opts.textField]; }, loader: function(param, success, error){ var opts = $(this).combobox('options'); if (!opts.url) return false; $.ajax({ type: opts.method, url: opts.url, data: param, dataType: 'json', success: function(data){ success(data); }, error: function(){ error.apply(this, arguments); } }); }, loadFilter: function(data){ return data; }, finder:{ getEl:function(target, value){ var index = getRowIndex(target, value); var id = $.data(target, 'combobox').itemIdPrefix + '_' + index; return $('#'+id); }, getGroupEl:function(target, gvalue){ var state = $.data(target, 'combobox'); var index = $.easyui.indexOfArray(state.groups, 'value', gvalue); var id = state.groupIdPrefix + '_' + index; return $('#'+id); }, getGroup:function(target, p){ var state = $.data(target, 'combobox'); var index = p.attr('id').substr(state.groupIdPrefix.length+1); return state.groups[parseInt(index)]; }, getRow:function(target, p){ var state = $.data(target, 'combobox'); var index = (p instanceof $) ? p.attr('id').substr(state.itemIdPrefix.length+1) : getRowIndex(target, p); return state.data[parseInt(index)]; } }, onBeforeLoad: function(param){}, onLoadSuccess: function(data){}, onLoadError: function(){}, onSelect: function(record){}, onUnselect: function(record){}, onClick: function(record){} }); })(jQuery); /** * combotree - EasyUI for jQuery * * Dependencies: * combo * tree * */ (function($){ /** * create the combotree component. */ function create(target){ var state = $.data(target, 'combotree'); var opts = state.options; var tree = state.tree; $(target).addClass('combotree-f'); $(target).combo($.extend({}, opts, { onShowPanel: function(){ if (opts.editable){ tree.tree('doFilter', ''); } opts.onShowPanel.call(this); } })); var panel = $(target).combo('panel'); if (!tree){ tree = $('
                    ').appendTo(panel); state.tree = tree; } tree.tree($.extend({}, opts, { checkbox: opts.multiple, onLoadSuccess: function(node, data){ var values = $(target).combotree('getValues'); if (opts.multiple){ $.map(tree.tree('getChecked'), function(node){ $.easyui.addArrayItem(values, node.id); }); } setValues(target, values, state.remainText); opts.onLoadSuccess.call(this, node, data); }, onClick: function(node){ if (opts.multiple){ $(this).tree(node.checked ? 'uncheck' : 'check', node.target); } else { $(target).combo('hidePanel'); } state.remainText = false; retrieveValues(target); opts.onClick.call(this, node); }, onCheck: function(node, checked){ state.remainText = false; retrieveValues(target); opts.onCheck.call(this, node, checked); } })); } /** * retrieve values from tree panel. */ function retrieveValues(target){ var state = $.data(target, 'combotree'); var opts = state.options; var tree = state.tree; var vv = []; if (opts.multiple){ vv = $.map(tree.tree('getChecked'), function(node){ return node.id; }); } else { var node = tree.tree('getSelected'); if (node){ vv.push(node.id); } } vv = vv.concat(opts.unselectedValues); setValues(target, vv, state.remainText); } function setValues(target, values, remainText){ var state = $.data(target, 'combotree'); var opts = state.options; var tree = state.tree; var topts = tree.tree('options'); var onBeforeCheck = topts.onBeforeCheck; var onCheck = topts.onCheck; var onSelect = topts.onSelect; topts.onBeforeCheck = topts.onCheck = topts.onSelect = function(){}; if (!$.isArray(values)){ values = values.split(opts.separator); } if (!opts.multiple){ values = values.length ? [values[0]] : ['']; } var vv = $.map(values, function(value){return String(value);}); tree.find('div.tree-node-selected').removeClass('tree-node-selected'); $.map(tree.tree('getChecked'), function(node){ if ($.inArray(String(node.id), vv) == -1){ tree.tree('uncheck', node.target); } }); var ss = []; opts.unselectedValues = []; $.map(vv, function(v){ var node = tree.tree('find', v); if (node){ tree.tree('check', node.target).tree('select', node.target); // ss.push(node.text); ss.push(getText(node)); } else { ss.push(findText(v, opts.mappingRows) || v); opts.unselectedValues.push(v); } }); if (opts.multiple){ $.map(tree.tree('getChecked'), function(node){ var id = String(node.id); if ($.inArray(id, vv) == -1){ vv.push(id); // ss.push(node.text); ss.push(getText(node)); } }); } topts.onBeforeCheck = onBeforeCheck; topts.onCheck = onCheck; topts.onSelect = onSelect; if (!remainText){ var s = ss.join(opts.separator); if ($(target).combo('getText') != s){ $(target).combo('setText', s); } } $(target).combo('setValues', vv); function findText(value, a){ var item = $.easyui.getArrayItem(a, 'id', value); // return item ? item.text : undefined; return item ? getText(item) : undefined; } function getText(node){ return node[opts.textField||''] || node.text; } } function doQuery(target, q){ var state = $.data(target, 'combotree'); var opts = state.options; var tree = state.tree; state.remainText = true; tree.tree('doFilter', opts.multiple ? q.split(opts.separator) : q); } function doEnter(target){ var state = $.data(target, 'combotree'); state.remainText = false; $(target).combotree('setValues', $(target).combotree('getValues')); $(target).combotree('hidePanel'); } $.fn.combotree = function(options, param){ if (typeof options == 'string'){ var method = $.fn.combotree.methods[options]; if (method){ return method(this, param); } else { return this.combo(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'combotree'); if (state){ $.extend(state.options, options); } else { $.data(this, 'combotree', { options: $.extend({}, $.fn.combotree.defaults, $.fn.combotree.parseOptions(this), options) }); } create(this); }); }; $.fn.combotree.methods = { options: function(jq){ var copts = jq.combo('options'); return $.extend($.data(jq[0], 'combotree').options, { width: copts.width, height: copts.height, originalValue: copts.originalValue, disabled: copts.disabled, readonly: copts.readonly }); }, clone: function(jq, container){ var t = jq.combo('clone', container); t.data('combotree', { options: $.extend(true, {}, jq.combotree('options')), tree: jq.combotree('tree') }); return t; }, tree: function(jq){ return $.data(jq[0], 'combotree').tree; }, loadData: function(jq, data){ return jq.each(function(){ var opts = $.data(this, 'combotree').options; opts.data = data; var tree = $.data(this, 'combotree').tree; tree.tree('loadData', data); }); }, reload: function(jq, url){ return jq.each(function(){ var opts = $.data(this, 'combotree').options; var tree = $.data(this, 'combotree').tree; if (url) opts.url = url; tree.tree({url:opts.url}); }); }, setValues: function(jq, values){ return jq.each(function(){ var opts = $(this).combotree('options'); if ($.isArray(values)){ values = $.map(values, function(value){ if (value && typeof value == 'object'){ $.easyui.addArrayItem(opts.mappingRows, 'id', value); return value.id; } else { return value; } }) } setValues(this, values); }); }, setValue: function(jq, value){ return jq.each(function(){ $(this).combotree('setValues', $.isArray(value)?value:[value]); }); }, clear: function(jq){ return jq.each(function(){ $(this).combotree('setValues', []); }); }, reset: function(jq){ return jq.each(function(){ var opts = $(this).combotree('options'); if (opts.multiple){ $(this).combotree('setValues', opts.originalValue); } else { $(this).combotree('setValue', opts.originalValue); } }); } }; $.fn.combotree.parseOptions = function(target){ return $.extend({}, $.fn.combo.parseOptions(target), $.fn.tree.parseOptions(target)); }; $.fn.combotree.defaults = $.extend({}, $.fn.combo.defaults, $.fn.tree.defaults, { editable: false, textField: null, // the text field to display. unselectedValues: [], mappingRows: [], keyHandler: { up: function(e){}, down: function(e){}, left: function(e){}, right: function(e){}, enter: function(e){doEnter(this)}, query: function(q,e){doQuery(this, q)} } }); })(jQuery); /** * combogrid - EasyUI for jQuery * * Dependencies: * combo * datagrid * */ (function($){ /** * create this component. */ function create(target){ var state = $.data(target, 'combogrid'); var opts = state.options; var grid = state.grid; $(target).addClass('combogrid-f').combo($.extend({}, opts, { onShowPanel: function(){ setValues(this, $(this).combogrid('getValues'), true); var p = $(this).combogrid('panel'); var distance = p.outerHeight() - p.height(); var minHeight = p._size('minHeight'); var maxHeight = p._size('maxHeight'); var dg = $(this).combogrid('grid'); dg.datagrid('resize', { width: '100%', height: (isNaN(parseInt(opts.panelHeight)) ? 'auto' : '100%'), minHeight: (minHeight ? minHeight-distance : ''), maxHeight: (maxHeight ? maxHeight-distance : '') }); var row = dg.datagrid('getSelected'); if (row){ dg.datagrid('scrollTo', dg.datagrid('getRowIndex', row)); } opts.onShowPanel.call(this); } })); var panel = $(target).combo('panel'); if (!grid){ grid = $('
                    ').appendTo(panel); state.grid = grid; } grid.datagrid($.extend({}, opts, { border: false, singleSelect: (!opts.multiple), onLoadSuccess: onLoadSuccess, onClickRow: onClickRow, onSelect: handleEvent('onSelect'), onUnselect: handleEvent('onUnselect'), onSelectAll: handleEvent('onSelectAll'), onUnselectAll: handleEvent('onUnselectAll') })); function getComboTarget(dg){ return $(dg).closest('.combo-panel').panel('options').comboTarget || target; } function onLoadSuccess(data){ var comboTarget = getComboTarget(this); var state = $(comboTarget).data('combogrid'); var opts = state.options; var values = $(comboTarget).combo('getValues'); setValues(comboTarget, values, state.remainText); opts.onLoadSuccess.call(this, data); } function onClickRow(index, row){ var comboTarget = getComboTarget(this); var state = $(comboTarget).data('combogrid'); var opts = state.options; state.remainText = false; retrieveValues.call(this); if (!opts.multiple){ $(comboTarget).combo('hidePanel'); } opts.onClickRow.call(this, index, row); } function handleEvent(event){ return function(index, row){ var comboTarget = getComboTarget(this); var opts = $(comboTarget).combogrid('options'); if (event == 'onUnselectAll'){ if (opts.multiple){ retrieveValues.call(this); } } else { retrieveValues.call(this); } opts[event].call(this, index, row); } } /** * retrieve values from datagrid panel. */ function retrieveValues(){ var dg = $(this); var comboTarget = getComboTarget(dg); var state = $(comboTarget).data('combogrid'); var opts = state.options; var vv = $.map(dg.datagrid('getSelections'), function(row){ return row[opts.idField]; }); vv = vv.concat(opts.unselectedValues); setValues(comboTarget, vv, state.remainText); } } function nav(target, dir){ var state = $.data(target, 'combogrid'); var opts = state.options; var grid = state.grid; var rowCount = grid.datagrid('getRows').length; if (!rowCount){return} var tr = opts.finder.getTr(grid[0], null, 'highlight'); if (!tr.length){ tr = opts.finder.getTr(grid[0], null, 'selected');; } var index; if (!tr.length){ index = (dir == 'next' ? 0 : rowCount-1); } else { var index = parseInt(tr.attr('datagrid-row-index')); index += (dir == 'next' ? 1 : -1); if (index < 0) {index = rowCount - 1} if (index >= rowCount) {index = 0} } grid.datagrid('highlightRow', index); if (opts.selectOnNavigation){ state.remainText = false; grid.datagrid('selectRow', index); } } /** * set combogrid values */ function setValues(target, values, remainText){ var state = $.data(target, 'combogrid'); var opts = state.options; var grid = state.grid; var oldValues = $(target).combo('getValues'); var cOpts = $(target).combo('options'); var onChange = cOpts.onChange; cOpts.onChange = function(){}; // prevent from triggering onChange event var gOpts = grid.datagrid('options'); var onSelect = gOpts.onSelect; var onUnselectAll = gOpts.onUnselectAll; gOpts.onSelect = gOpts.onUnselectAll = function(){}; if (!$.isArray(values)){ values = values.split(opts.separator); } if (!opts.multiple){ values = values.length ? [values[0]] : ['']; } var vv = $.map(values, function(value){return String(value);}); vv = $.grep(vv, function(v, index){ return index === $.inArray(v, vv); }); var selectedRows = $.grep(grid.datagrid('getSelections'), function(row, index){ return $.inArray(String(row[opts.idField]), vv) >= 0; }); grid.datagrid('clearSelections'); grid.data('datagrid').selectedRows = selectedRows; var ss = []; opts.unselectedValues = []; $.map(vv, function(v){ var index = grid.datagrid('getRowIndex', v); if (index >= 0){ grid.datagrid('selectRow', index); } else { opts.unselectedValues.push(v); } ss.push(findText(v, grid.datagrid('getRows')) || findText(v, selectedRows) || findText(v, opts.mappingRows) || v ); }); $(target).combo('setValues', oldValues); cOpts.onChange = onChange; // restore to trigger onChange event gOpts.onSelect = onSelect; gOpts.onUnselectAll = onUnselectAll; if (!remainText){ var s = ss.join(opts.separator); if ($(target).combo('getText') != s){ $(target).combo('setText', s); } } $(target).combo('setValues', values); function findText(value, a){ var item = $.easyui.getArrayItem(a, opts.idField, value); return item ? item[opts.textField] : undefined; } } /** * do the query action */ function doQuery(target, q){ var state = $.data(target, 'combogrid'); var opts = state.options; var grid = state.grid; state.remainText = true; var qq = opts.multiple ? q.split(opts.separator) : [q]; qq = $.grep(qq, function(q){return $.trim(q)!='';}); if (opts.mode == 'remote'){ _setValues(qq); grid.datagrid('load', $.extend({}, opts.queryParams, {q:q})); } else { grid.datagrid('highlightRow', -1); var rows = grid.datagrid('getRows'); var vv = []; $.map(qq, function(q){ q = $.trim(q); var value = q; _addRowValue(opts.mappingRows, q); _addRowValue(grid.datagrid('getSelections'), q); var index = _addRowValue(rows, q); if (index >= 0){ if (opts.reversed){ grid.datagrid('highlightRow', index); } } else { $.map(rows, function(row, i){ if (opts.filter.call(target, q, row)){ grid.datagrid('highlightRow', i); } }); } }); _setValues(vv); } function _addRowValue(rows, q){ for(var i=0; i= 0){ $.easyui.addArrayItem(vv, v); } }); $(target).combogrid('setValues', vv); if (!opts.multiple){ $(target).combogrid('hidePanel'); } } $.fn.combogrid = function(options, param){ if (typeof options == 'string'){ var method = $.fn.combogrid.methods[options]; if (method){ return method(this, param); } else { return this.combo(options, param); // return $.fn.combo.methods[options](this, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'combogrid'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'combogrid', { options: $.extend({}, $.fn.combogrid.defaults, $.fn.combogrid.parseOptions(this), options) }); } create(this); }); }; $.fn.combogrid.methods = { options: function(jq){ var copts = jq.combo('options'); return $.extend($.data(jq[0], 'combogrid').options, { width: copts.width, height: copts.height, originalValue: copts.originalValue, disabled: copts.disabled, readonly: copts.readonly }); }, cloneFrom: function(jq, from){ return jq.each(function(){ $(this).combo('cloneFrom', from); $.data(this, 'combogrid', { options: $.extend(true, {cloned:true}, $(from).combogrid('options')), combo: $(this).next(), panel: $(from).combo('panel'), grid: $(from).combogrid('grid') }); }); }, // get the datagrid object. grid: function(jq){ return $.data(jq[0], 'combogrid').grid; }, setValues: function(jq, values){ return jq.each(function(){ var opts = $(this).combogrid('options'); if ($.isArray(values)){ values = $.map(values, function(value){ if (value && typeof value == 'object'){ $.easyui.addArrayItem(opts.mappingRows, opts.idField, value); return value[opts.idField]; } else { return value; } }); } setValues(this, values); }); }, setValue: function(jq, value){ return jq.each(function(){ $(this).combogrid('setValues', $.isArray(value)?value:[value]); }); }, clear: function(jq){ return jq.each(function(){ $(this).combogrid('setValues', []); }); }, reset: function(jq){ return jq.each(function(){ var opts = $(this).combogrid('options'); if (opts.multiple){ $(this).combogrid('setValues', opts.originalValue); } else { $(this).combogrid('setValue', opts.originalValue); } }); } }; $.fn.combogrid.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.combo.parseOptions(target), $.fn.datagrid.parseOptions(target), $.parser.parseOptions(target, ['idField','textField','mode'])); }; $.fn.combogrid.defaults = $.extend({}, $.fn.combo.defaults, $.fn.datagrid.defaults, { // height:22, loadMsg: null, idField: null, textField: null, // the text field to display. unselectedValues: [], mappingRows: [], mode: 'local', // or 'remote' keyHandler: { up: function(e){nav(this, 'prev');e.preventDefault()}, down: function(e){nav(this, 'next');e.preventDefault()}, left: function(e){}, right: function(e){}, enter: function(e){doEnter(this)}, query: function(q,e){doQuery(this, q)} }, inputEvents: $.extend({}, $.fn.combo.defaults.inputEvents, { blur: function(e){ var target = e.data.target; var opts = $(target).combogrid('options'); if (opts.reversed){ $(target).combogrid('setValues', $(target).combogrid('getValues')); } } }), filter: function(q, row){ var opts = $(this).combogrid('options'); return (row[opts.textField]||'').toLowerCase().indexOf(q.toLowerCase()) >= 0; } }); })(jQuery); /** * combotreegrid - EasyUI for jQuery * * Dependencies: * combo * treegrid * */ (function($){ function create(target){ var state = $.data(target, 'combotreegrid'); var opts = state.options; $(target).addClass('combotreegrid-f').combo($.extend({}, opts, { onShowPanel:function(){ var p = $(this).combotreegrid('panel'); var distance = p.outerHeight() - p.height(); var minHeight = p._size('minHeight'); var maxHeight = p._size('maxHeight'); var dg = $(this).combotreegrid('grid'); dg.treegrid('resize', { width: '100%', height: (isNaN(parseInt(opts.panelHeight)) ? 'auto' : '100%'), minHeight: (minHeight ? minHeight-distance : ''), maxHeight: (maxHeight ? maxHeight-distance : '') }); var row = dg.treegrid('getSelected'); if (row){ dg.treegrid('scrollTo', row[opts.idField]); } opts.onShowPanel.call(this); } })); if (!state.grid){ var panel = $(target).combo('panel'); state.grid = $('
                    ').appendTo(panel); } state.grid.treegrid($.extend({}, opts, { border: false, checkbox: opts.multiple, onLoadSuccess: function(row, data){ var values = $(target).combotreegrid('getValues'); if (opts.multiple){ $.map($(this).treegrid('getCheckedNodes'), function(row){ $.easyui.addArrayItem(values, row[opts.idField]); }); } setValues(target, values); opts.onLoadSuccess.call(this, row, data); state.remainText = false; }, onClickRow: function(row){ if (opts.multiple){ $(this).treegrid(row.checked?'uncheckNode':'checkNode', row[opts.idField]); $(this).treegrid('unselect', row[opts.idField]); } else { $(target).combo('hidePanel'); } retrieveValues(target); opts.onClickRow.call(this, row); }, onCheckNode: function(row, checked){ retrieveValues(target); opts.onCheckNode.call(this, row, checked); } })); } function retrieveValues(target){ var state = $.data(target, 'combotreegrid'); var opts = state.options; var grid = state.grid; var vv = []; if (opts.multiple){ vv = $.map(grid.treegrid('getCheckedNodes'), function(row){ return row[opts.idField]; }); } else { var row = grid.treegrid('getSelected'); if (row){ vv.push(row[opts.idField]); } } vv = vv.concat(opts.unselectedValues); setValues(target, vv); } function setValues(target, values){ var state = $.data(target, 'combotreegrid'); var opts = state.options; var grid = state.grid; if (!$.isArray(values)){ values = values.split(opts.separator); } if (!opts.multiple){ values = values.length ? [values[0]] : ['']; } var vv = $.map(values, function(value){return String(value);}); vv = $.grep(vv, function(v, index){ return index === $.inArray(v, vv); }); var selected = grid.treegrid('getSelected'); if (selected){ grid.treegrid('unselect', selected[opts.idField]); } $.map(grid.treegrid('getCheckedNodes'), function(row){ if ($.inArray(String(row[opts.idField]), vv) == -1){ grid.treegrid('uncheckNode', row[opts.idField]); } }); var ss = []; opts.unselectedValues = []; $.map(vv, function(v){ var row = grid.treegrid('find', v); if (row){ if (opts.multiple){ grid.treegrid('checkNode', v); } else { grid.treegrid('select', v); } ss.push(getText(row)); // ss.push(row[opts.treeField]); } else { ss.push(findText(v, opts.mappingRows) || v); opts.unselectedValues.push(v); } }); if (opts.multiple){ $.map(grid.treegrid('getCheckedNodes'), function(row){ var id = String(row[opts.idField]); if ($.inArray(id, vv) == -1){ vv.push(id); ss.push(getText(row)); // ss.push(row[opts.treeField]); } }); } if (!state.remainText){ var s = ss.join(opts.separator); if ($(target).combo('getText') != s){ $(target).combo('setText', s); } } $(target).combo('setValues', vv); function findText(value, a){ var item = $.easyui.getArrayItem(a, opts.idField, value); return item ? getText(item) : undefined; // return item ? item[opts.treeField] : undefined; } function getText(row){ return row[opts.textField||''] || row[opts.treeField]; } } function doQuery(target, q){ var state = $.data(target, 'combotreegrid'); var opts = state.options; var grid = state.grid; state.remainText = true; var qq = opts.multiple ? q.split(opts.separator) : [q]; qq = $.grep(qq, function(q){return $.trim(q)!='';}); grid.treegrid('clearSelections').treegrid('clearChecked').treegrid('highlightRow', -1); if (opts.mode == 'remote'){ // $(target).combotreegrid('clear'); _setValues(qq); grid.treegrid('load', $.extend({}, opts.queryParams, {q:q})); } else if (q){ var data = grid.treegrid('getData'); var vv = []; // var qq = opts.multiple ? q.split(opts.separator) : [q]; $.map(qq, function(q){ q = $.trim(q); if (q){ var v = undefined; $.easyui.forEach(data, true, function(row){ if (q.toLowerCase() == String(row[opts.treeField]).toLowerCase()){ v = row[opts.idField]; return false; } else if (opts.filter.call(target, q, row)){ grid.treegrid('expandTo', row[opts.idField]); grid.treegrid('highlightRow', row[opts.idField]); return false; } }); if (v == undefined){ $.easyui.forEach(opts.mappingRows, false, function(row){ if (q.toLowerCase() == String(row[opts.treeField])){ v = row[opts.idField]; return false; } }) } if (v != undefined){ vv.push(v); } else { vv.push(q); } } }); // setValues(target, vv); _setValues(vv); state.remainText = false; } function _setValues(vv){ if (!opts.reversed){ $(target).combotreegrid('setValues', vv); } } } // function doEnter(target){ // retrieveValues(target); // } function doEnter(target){ var state = $.data(target, 'combotreegrid'); var opts = state.options; var grid = state.grid; var tr = opts.finder.getTr(grid[0], null, 'highlight'); state.remainText = false; if (tr.length){ var id = tr.attr('node-id'); if (opts.multiple){ if (tr.hasClass('datagrid-row-selected')){ grid.treegrid('uncheckNode', id); } else { grid.treegrid('checkNode', id); } } else { grid.treegrid('selectRow', id); } } var vv = []; if (opts.multiple){ $.map(grid.treegrid('getCheckedNodes'), function(row){ vv.push(row[opts.idField]); }); } else { var row = grid.treegrid('getSelected'); if (row){ vv.push(row[opts.idField]); } } $.map(opts.unselectedValues, function(v){ if ($.easyui.indexOfArray(opts.mappingRows, opts.idField, v) >= 0){ $.easyui.addArrayItem(vv, v); } }); $(target).combotreegrid('setValues', vv); if (!opts.multiple){ $(target).combotreegrid('hidePanel'); } } $.fn.combotreegrid = function(options, param){ if (typeof options == 'string'){ var method = $.fn.combotreegrid.methods[options]; if (method){ return method(this, param); } else { return this.combo(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'combotreegrid'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'combotreegrid', { options: $.extend({}, $.fn.combotreegrid.defaults, $.fn.combotreegrid.parseOptions(this), options) }); } create(this); }); }; $.fn.combotreegrid.methods = { options: function(jq){ var copts = jq.combo('options'); return $.extend($.data(jq[0], 'combotreegrid').options, { width: copts.width, height: copts.height, originalValue: copts.originalValue, disabled: copts.disabled, readonly: copts.readonly }); }, grid: function(jq){ return $.data(jq[0], 'combotreegrid').grid; }, setValues: function(jq, values){ return jq.each(function(){ var opts = $(this).combotreegrid('options'); if ($.isArray(values)){ values = $.map(values, function(value){ if (value && typeof value == 'object'){ $.easyui.addArrayItem(opts.mappingRows, opts.idField, value); return value[opts.idField]; } else { return value; } }); } setValues(this, values); }); }, setValue: function(jq, value){ return jq.each(function(){ $(this).combotreegrid('setValues', $.isArray(value)?value:[value]); }); }, clear: function(jq){ return jq.each(function(){ $(this).combotreegrid('setValues', []); }); }, reset: function(jq){ return jq.each(function(){ var opts = $(this).combotreegrid('options'); if (opts.multiple){ $(this).combotreegrid('setValues', opts.originalValue); } else { $(this).combotreegrid('setValue', opts.originalValue); } }); } }; $.fn.combotreegrid.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.combo.parseOptions(target), $.fn.treegrid.parseOptions(target), $.parser.parseOptions(target, ['mode',{limitToGrid:'boolean'}])); }; $.fn.combotreegrid.defaults = $.extend({}, $.fn.combo.defaults, $.fn.treegrid.defaults, { editable: false, singleSelect: true, limitToGrid: false, // limit the inputed values to the listed grid rows unselectedValues: [], mappingRows: [], mode: 'local', // or 'remote' textField: null, // the text field to display. keyHandler: { up: function(e){}, down: function(e){}, left: function(e){}, right: function(e){}, enter: function(e){doEnter(this)}, query: function(q,e){doQuery(this, q)} }, inputEvents: $.extend({}, $.fn.combo.defaults.inputEvents, { blur: function(e){ var target = e.data.target; var opts = $(target).combotreegrid('options'); if (opts.limitToGrid){ doEnter(target); } } }), filter: function(q, row){ var opts = $(this).combotreegrid('options'); return (row[opts.treeField]||'').toLowerCase().indexOf(q.toLowerCase()) >= 0; } }); })(jQuery); /** * tagbox - EasyUI for jQuery * * Dependencies: * combobox * */ (function($){ function create(target){ var state = $.data(target, 'tagbox'); var opts = state.options; $(target).addClass('tagbox-f').combobox($.extend({}, opts, { cls: 'tagbox', reversed: true, onChange: function(newValue, oldValue){ buildTag(); $(this).combobox('hidePanel'); opts.onChange.call(target, newValue, oldValue); }, onResizing: function(width, height){ var input = $(this).combobox('textbox'); var tb = $(this).data('textbox').textbox; tb.css({ height: '', paddingLeft: input.css('marginLeft'), paddingRight: input.css('marginRight') }); input.css('margin', 0); tb._size({width: opts.width}, $(this).parent()); autoSizeInput(target); resizeLabel(this); opts.onResizing.call(target, width, height); }, onLoadSuccess: function(data){ buildTag(); opts.onLoadSuccess.call(target, data); } })); buildTag(); autoSizeInput(target); function buildTag(){ $(target).next().find('.tagbox-label').remove(); var input = $(target).tagbox('textbox'); var ss = []; $.map($(target).tagbox('getValues'), function(value, index){ var row = opts.finder.getRow(target, value); var text = opts.tagFormatter.call(target, value, row); var cs = {}; var css = opts.tagStyler.call(target, value, row) || ''; if (typeof css == 'string'){ cs = {s:css}; } else { cs = {c:css['class']||'',s:css['style']||''}; } var label = $('').insertBefore(input).html(text); label.attr('tagbox-index', index); label.attr('style', cs.s).addClass(cs.c); $('').appendTo(label); }); resizeLabel(target); $(target).combobox('setText', '');//.combobox('resize'); } } function resizeLabel(target, label){ var span = $(target).next(); var labels = label ? $(label) : span.find('.tagbox-label'); if (labels.length){ var input = $(target).tagbox('textbox'); var first = $(labels[0]); var margin = first.outerHeight(true) - first.outerHeight(); var height = input.outerHeight() - margin*2; labels.css({ height: height+'px', lineHeight: height+'px' }); var addon = span.find('.textbox-addon').css('height', '100%'); addon.find('.textbox-icon').css('height', '100%'); span.find('.textbox-button').linkbutton('resize', {height:'100%'}); } } function bindEvents(target){ var span = $(target).next(); span.unbind('.tagbox').bind('click.tagbox', function(e){ var opts = $(target).tagbox('options'); if (opts.disabled || opts.readonly){return;} if ($(e.target).hasClass('tagbox-remove')){ var index = parseInt($(e.target).parent().attr('tagbox-index')); var values = $(target).tagbox('getValues'); if (opts.onBeforeRemoveTag.call(target, values[index]) == false){ return; } opts.onRemoveTag.call(target, values[index]); values.splice(index, 1); $(target).tagbox('setValues', values); } else { var label = $(e.target).closest('.tagbox-label'); if (label.length){ var index = parseInt(label.attr('tagbox-index')); var values = $(target).tagbox('getValues'); opts.onClickTag.call(target, values[index]); } } $(this).find('.textbox-text').focus(); }).bind('keyup.tagbox', function(e){ autoSizeInput(target); }).bind('mouseover.tagbox', function(e){ if ($(e.target).closest('.textbox-button,.textbox-addon,.tagbox-label').length){ $(this).triggerHandler('mouseleave'); } else { $(this).find('.textbox-text').triggerHandler('mouseenter'); } }).bind('mouseleave.tagbox', function(e){ $(this).find('.textbox-text').triggerHandler('mouseleave'); }); } function autoSizeInput(target){ var opts = $(target).tagbox('options'); var input = $(target).tagbox('textbox'); var span = $(target).next(); var tmp = $('').appendTo('body'); tmp.attr('style', input.attr('style')); tmp.css({ position: 'absolute', top: -9999, left: -9999, width: 'auto', fontFamily: input.css('fontFamily'), fontSize: input.css('fontSize'), fontWeight: input.css('fontWeight'), whiteSpace: 'nowrap' }); var width1 = _getWidth(input.val()); var width2 = _getWidth(opts.prompt || ''); tmp.remove(); var width = Math.min(Math.max(width1,width2)+20, span.width()); input._outerWidth(width); span.find('.textbox-button').linkbutton('resize', {height:'100%'}); function _getWidth(val){ var s = val.replace(/&/g, '&').replace(/\s/g,' ').replace(//g, '>'); tmp.html(s); return tmp.outerWidth(); } } function doEnter(target){ var t = $(target); var opts = t.tagbox('options'); // if (!$(target).tagbox('isValid')){return;} if (opts.limitToList){ var panel = t.tagbox('panel'); var item = panel.children('div.combobox-item-hover'); if (item.length){ item.removeClass('combobox-item-hover'); var row = opts.finder.getRow(target, item); var value = row[opts.valueField]; $(target).tagbox(item.hasClass('combobox-item-selected')?'unselect':'select', value); } $(target).tagbox('hidePanel'); } else { var v = $.trim($(target).tagbox('getText')); if (v !== ''){ var values = $(target).tagbox('getValues'); values.push(v); $(target).tagbox('setValues', values); } } } function setValues(target, values){ $(target).combobox('setText', ''); autoSizeInput(target); $(target).combobox('setValues', values); $(target).combobox('setText', ''); $(target).tagbox('validate'); } $.fn.tagbox = function(options, param){ if (typeof options == 'string'){ var method = $.fn.tagbox.methods[options]; if (method){ return method(this, param); } else { return this.combobox(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'tagbox'); if (state){ $.extend(state.options, options); } else { $.data(this, 'tagbox', { options: $.extend({}, $.fn.tagbox.defaults, $.fn.tagbox.parseOptions(this), options) }); } create(this); bindEvents(this); }); }; $.fn.tagbox.methods = { options: function(jq){ var copts = jq.combobox('options'); return $.extend($.data(jq[0], 'tagbox').options, { width: copts.width, height: copts.height, originalValue: copts.originalValue, disabled: copts.disabled, readonly: copts.readonly }); }, setValues: function(jq, values){ return jq.each(function(){ setValues(this, values); }); }, reset: function(jq){ return jq.each(function(){ $(this).combobox('reset').combobox('setText', ''); }); } }; $.fn.tagbox.parseOptions = function(target){ return $.extend({}, $.fn.combobox.parseOptions(target), $.parser.parseOptions(target,[ ])); }; $.fn.tagbox.defaults = $.extend({}, $.fn.combobox.defaults, { hasDownArrow: false, multiple: true, reversed: true, selectOnNavigation: false, tipOptions: $.extend({}, $.fn.textbox.defaults.tipOptions, { showDelay: 200 }), val: function(target){ var vv = $(target).parent().prev().tagbox('getValues'); if ($(target).is(':focus')){ vv.push($(target).val()); } return vv.join(','); }, inputEvents: $.extend({}, $.fn.combo.defaults.inputEvents, { blur: function(e){ var target = e.data.target; var opts = $(target).tagbox('options'); if (opts.limitToList){ doEnter(target); } } }), keyHandler: $.extend({}, $.fn.combobox.defaults.keyHandler, { enter: function(e){doEnter(this);}, query: function(q,e){ var opts = $(this).tagbox('options'); if (opts.limitToList){ $.fn.combobox.defaults.keyHandler.query.call(this, q, e); } else { $(this).combobox('hidePanel'); } } }), tagFormatter: function(value,row){ var opts = $(this).tagbox('options'); return row ? row[opts.textField] : value; }, tagStyler: function(value,row){return ''}, onClickTag: function(value){}, onBeforeRemoveTag: function(value){}, onRemoveTag: function(value){} }); })(jQuery); /** * datebox - EasyUI for jQuery * * Dependencies: * calendar * combo * */ (function($){ /** * create date box */ function createBox(target){ var state = $.data(target, 'datebox'); var opts = state.options; $(target).addClass('datebox-f').combo($.extend({}, opts, { onShowPanel:function(){ bindEvents(this); setButtons(this); setCalendar(this); setValue(this, $(this).datebox('getText'), true); opts.onShowPanel.call(this); } })); /** * if the calendar isn't created, create it. */ if (!state.calendar){ var panel = $(target).combo('panel').css('overflow','hidden'); panel.panel('options').onBeforeDestroy = function(){ var c = $(this).find('.calendar-shared'); if (c.length){ c.insertBefore(c[0].pholder); } }; var cc = $('
                    ').prependTo(panel); if (opts.sharedCalendar){ var c = $(opts.sharedCalendar); if (!c[0].pholder){ c[0].pholder = $('').insertAfter(c); } c.addClass('calendar-shared').appendTo(cc); if (!c.hasClass('calendar')){ c.calendar(); } state.calendar = c; } else { state.calendar = $('
                    ').appendTo(cc).calendar(); } $.extend(state.calendar.calendar('options'), { fit:true, border:false, onSelect:function(date){ var target = this.target; var opts = $(target).datebox('options'); opts.onSelect.call(target, date); setValue(target, opts.formatter.call(target, date)); $(target).combo('hidePanel'); } }); } $(target).combo('textbox').parent().addClass('datebox'); $(target).datebox('initValue', opts.value); function bindEvents(target){ var opts = $(target).datebox('options'); var panel = $(target).combo('panel'); panel.unbind('.datebox').bind('click.datebox', function(e){ if ($(e.target).hasClass('datebox-button-a')){ var index = parseInt($(e.target).attr('datebox-button-index')); opts.buttons[index].handler.call(e.target, target); } }); } function setButtons(target){ var panel = $(target).combo('panel'); if (panel.children('div.datebox-button').length){return} var button = $('
                    ').appendTo(panel); var tr = button.find('tr'); for(var i=0; i').appendTo(tr); var btn = opts.buttons[i]; var t = $('').html($.isFunction(btn.text) ? btn.text(target) : btn.text).appendTo(td); t.attr('datebox-button-index', i); } tr.find('td').css('width', (100/opts.buttons.length)+'%'); } function setCalendar(target){ var panel = $(target).combo('panel'); var cc = panel.children('div.datebox-calendar-inner'); panel.children()._outerWidth(panel.width()); state.calendar.appendTo(cc); state.calendar[0].target = target; if (opts.panelHeight != 'auto'){ var height = panel.height(); panel.children().not(cc).each(function(){ height -= $(this).outerHeight(); }); cc._outerHeight(height); } state.calendar.calendar('resize'); } } /** * called when user inputs some value in text box */ function doQuery(target, q){ setValue(target, q, true); } /** * called when user press enter key */ function doEnter(target){ var state = $.data(target, 'datebox'); var opts = state.options; var current = state.calendar.calendar('options').current; if (current){ setValue(target, opts.formatter.call(target, current)); $(target).combo('hidePanel'); } } function setValue(target, value, remainText){ var state = $.data(target, 'datebox'); var opts = state.options; var calendar = state.calendar; calendar.calendar('moveTo', opts.parser.call(target, value)); if (remainText){ $(target).combo('setValue', value); } else { if (value){ value = opts.formatter.call(target, calendar.calendar('options').current); } $(target).combo('setText', value).combo('setValue', value); } } $.fn.datebox = function(options, param){ if (typeof options == 'string'){ var method = $.fn.datebox.methods[options]; if (method){ return method(this, param); } else { return this.combo(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'datebox'); if (state){ $.extend(state.options, options); } else { $.data(this, 'datebox', { options: $.extend({}, $.fn.datebox.defaults, $.fn.datebox.parseOptions(this), options) }); } createBox(this); }); }; $.fn.datebox.methods = { options: function(jq){ var copts = jq.combo('options'); return $.extend($.data(jq[0], 'datebox').options, { width: copts.width, height: copts.height, originalValue: copts.originalValue, disabled: copts.disabled, readonly: copts.readonly }); }, cloneFrom: function(jq, from){ return jq.each(function(){ $(this).combo('cloneFrom', from); $.data(this, 'datebox', { options: $.extend(true, {}, $(from).datebox('options')), calendar: $(from).datebox('calendar') }); $(this).addClass('datebox-f'); }); }, calendar: function(jq){ // get the calendar object return $.data(jq[0], 'datebox').calendar; }, initValue: function(jq, value){ return jq.each(function(){ var opts = $(this).datebox('options'); var value = opts.value; if (value){ value = opts.formatter.call(this, opts.parser.call(this, value)); } $(this).combo('initValue', value).combo('setText', value); }); }, setValue: function(jq, value){ return jq.each(function(){ setValue(this, value); }); }, reset: function(jq){ return jq.each(function(){ var opts = $(this).datebox('options'); $(this).datebox('setValue', opts.originalValue); }); } }; $.fn.datebox.parseOptions = function(target){ return $.extend({}, $.fn.combo.parseOptions(target), $.parser.parseOptions(target, ['sharedCalendar'])); }; $.fn.datebox.defaults = $.extend({}, $.fn.combo.defaults, { panelWidth:180, panelHeight:'auto', sharedCalendar:null, keyHandler: { up:function(e){}, down:function(e){}, left: function(e){}, right: function(e){}, enter:function(e){doEnter(this)}, query:function(q,e){doQuery(this, q)} }, currentText:'Today', closeText:'Close', okText:'Ok', buttons:[{ text: function(target){return $(target).datebox('options').currentText;}, handler: function(target){ var opts = $(target).datebox('options'); var now = new Date(); var current = new Date(now.getFullYear(), now.getMonth(), now.getDate()); $(target).datebox('calendar').calendar({ year:current.getFullYear(), month:current.getMonth()+1, current:current }); opts.onSelect.call(target, current); doEnter(target); } },{ text: function(target){return $(target).datebox('options').closeText;}, handler: function(target){ $(this).closest('div.combo-panel').panel('close'); } }], formatter:function(date){ var y = date.getFullYear(); var m = date.getMonth()+1; var d = date.getDate(); return (m<10?('0'+m):m)+'/'+(d<10?('0'+d):d)+'/'+y; }, parser:function(s){ if (!s) return new Date(); var ss = s.split('/'); var m = parseInt(ss[0],10); var d = parseInt(ss[1],10); var y = parseInt(ss[2],10); if (!isNaN(y) && !isNaN(m) && !isNaN(d)){ return new Date(y,m-1,d); } else { return new Date(); } }, onSelect:function(date){} }); })(jQuery); /** * datetimebox - EasyUI for jQuery * * Dependencies: * datebox * timespinner * */ (function($){ function createBox(target){ var state = $.data(target, 'datetimebox'); var opts = state.options; $(target).datebox($.extend({}, opts, { onShowPanel:function(){ var value = $(this).datetimebox('getValue'); setValue(this, value, true); opts.onShowPanel.call(this); }, formatter: $.fn.datebox.defaults.formatter, parser: $.fn.datebox.defaults.parser })); $(target).removeClass('datebox-f').addClass('datetimebox-f'); // override the calendar onSelect event, don't close panel when selected $(target).datebox('calendar').calendar({ onSelect:function(date){ opts.onSelect.call(this.target, date); } }); if (!state.spinner){ var panel = $(target).datebox('panel'); var p = $('
                    ').insertAfter(panel.children('div.datebox-calendar-inner')); state.spinner = p.children('input'); } state.spinner.timespinner({ width: opts.spinnerWidth, showSeconds: opts.showSeconds, separator: opts.timeSeparator }); $(target).datetimebox('initValue', opts.value); } /** * get current date, including time */ function getCurrentDate(target){ var c = $(target).datetimebox('calendar'); var t = $(target).datetimebox('spinner'); var date = c.calendar('options').current; return new Date(date.getFullYear(), date.getMonth(), date.getDate(), t.timespinner('getHours'), t.timespinner('getMinutes'), t.timespinner('getSeconds')); } /** * called when user inputs some value in text box */ function doQuery(target, q){ setValue(target, q, true); } /** * called when user press enter key */ function doEnter(target){ var opts = $.data(target, 'datetimebox').options; var date = getCurrentDate(target); setValue(target, opts.formatter.call(target, date)); $(target).combo('hidePanel'); } /** * set value, if remainText is assigned, don't change the text value */ function setValue(target, value, remainText){ var opts = $.data(target, 'datetimebox').options; $(target).combo('setValue', value); if (!remainText){ if (value){ var date = opts.parser.call(target, value); $(target).combo('setText', opts.formatter.call(target, date)); $(target).combo('setValue', opts.formatter.call(target, date)); } else { $(target).combo('setText', value); } } var date = opts.parser.call(target, value); $(target).datetimebox('calendar').calendar('moveTo', date); $(target).datetimebox('spinner').timespinner('setValue', getTimeS(date)); /** * get the time formatted string such as '03:48:02' */ function getTimeS(date){ function formatNumber(value){ return (value < 10 ? '0' : '') + value; } var tt = [formatNumber(date.getHours()), formatNumber(date.getMinutes())]; if (opts.showSeconds){ tt.push(formatNumber(date.getSeconds())); } return tt.join($(target).datetimebox('spinner').timespinner('options').separator); } } $.fn.datetimebox = function(options, param){ if (typeof options == 'string'){ var method = $.fn.datetimebox.methods[options]; if (method){ return method(this, param); } else { return this.datebox(options, param); } } options = options || {}; return this.each(function(){ var state = $.data(this, 'datetimebox'); if (state){ $.extend(state.options, options); } else { $.data(this, 'datetimebox', { options: $.extend({}, $.fn.datetimebox.defaults, $.fn.datetimebox.parseOptions(this), options) }); } createBox(this); }); } $.fn.datetimebox.methods = { options: function(jq){ var copts = jq.datebox('options'); return $.extend($.data(jq[0], 'datetimebox').options, { originalValue: copts.originalValue, disabled: copts.disabled, readonly: copts.readonly }); }, cloneFrom: function(jq, from){ return jq.each(function(){ $(this).datebox('cloneFrom', from); $.data(this, 'datetimebox', { options: $.extend(true, {}, $(from).datetimebox('options')), spinner: $(from).datetimebox('spinner') }); $(this).removeClass('datebox-f').addClass('datetimebox-f'); }); }, spinner: function(jq){ return $.data(jq[0], 'datetimebox').spinner; }, initValue: function(jq, value){ return jq.each(function(){ var opts = $(this).datetimebox('options'); var value = opts.value; if (value){ value = opts.formatter.call(this, opts.parser.call(this, value)); } $(this).combo('initValue', value).combo('setText', value); }); }, setValue: function(jq, value){ return jq.each(function(){ setValue(this, value); }); }, reset: function(jq){ return jq.each(function(){ var opts = $(this).datetimebox('options'); $(this).datetimebox('setValue', opts.originalValue); }); } }; $.fn.datetimebox.parseOptions = function(target){ var t = $(target); return $.extend({}, $.fn.datebox.parseOptions(target), $.parser.parseOptions(target, [ 'timeSeparator','spinnerWidth',{showSeconds:'boolean'} ])); }; $.fn.datetimebox.defaults = $.extend({}, $.fn.datebox.defaults, { spinnerWidth:'100%', showSeconds:true, timeSeparator:':', panelEvents: { mousedown: function(e){ // e.preventDefault(); // e.stopPropagation(); } }, keyHandler: { up:function(e){}, down:function(e){}, left: function(e){}, right: function(e){}, enter:function(e){doEnter(this)}, query:function(q,e){doQuery(this, q);} }, buttons:[{ text: function(target){return $(target).datetimebox('options').currentText;}, handler: function(target){ var opts = $(target).datetimebox('options'); setValue(target, opts.formatter.call(target, new Date())); $(target).datetimebox('hidePanel'); } },{ text: function(target){return $(target).datetimebox('options').okText;}, handler: function(target){ doEnter(target); } },{ text: function(target){return $(target).datetimebox('options').closeText;}, handler: function(target){ $(target).datetimebox('hidePanel'); } }], formatter:function(date){ var h = date.getHours(); var M = date.getMinutes(); var s = date.getSeconds(); function formatNumber(value){ return (value < 10 ? '0' : '') + value; } var separator = $(this).datetimebox('spinner').timespinner('options').separator; var r = $.fn.datebox.defaults.formatter(date) + ' ' + formatNumber(h)+separator+formatNumber(M); if ($(this).datetimebox('options').showSeconds){ r += separator+formatNumber(s); } return r; }, parser:function(s){ if ($.trim(s) == ''){ return new Date(); } var dt = s.split(' '); var d = $.fn.datebox.defaults.parser(dt[0]); if (dt.length < 2){ return d; } var separator = $(this).datetimebox('spinner').timespinner('options').separator; var tt = dt[1].split(separator); var hour = parseInt(tt[0], 10) || 0; var minute = parseInt(tt[1], 10) || 0; var second = parseInt(tt[2], 10) || 0; return new Date(d.getFullYear(), d.getMonth(), d.getDate(), hour, minute, second); } }); })(jQuery); /** * slider - EasyUI for jQuery * * Dependencies: * draggable * */ (function($){ function init(target){ var slider = $('
                    ' + '
                    ' + '' + '' + '
                    ' + '
                    ' + '
                    ' + '
                    ' + '' + '
                    ').insertAfter(target); var t = $(target); t.addClass('slider-f').hide(); var name = t.attr('name'); if (name){ slider.find('input.slider-value').attr('name', name); t.removeAttr('name').attr('sliderName', name); } slider.bind('_resize', function(e,force){ if ($(this).hasClass('easyui-fluid') || force){ setSize(target); } return false; }); return slider; } /** * set the slider size, for vertical slider, the height property is required */ function setSize(target, param){ var state = $.data(target, 'slider'); var opts = state.options; var slider = state.slider; if (param){ if (param.width) opts.width = param.width; if (param.height) opts.height = param.height; } slider._size(opts); if (opts.mode == 'h'){ slider.css('height', ''); slider.children('div').css('height', ''); } else { slider.css('width', ''); slider.children('div').css('width', ''); slider.children('div.slider-rule,div.slider-rulelabel,div.slider-inner')._outerHeight(slider._outerHeight()); } initValue(target); } /** * show slider rule if needed */ function showRule(target){ var state = $.data(target, 'slider'); var opts = state.options; var slider = state.slider; var aa = opts.mode == 'h' ? opts.rule : opts.rule.slice(0).reverse(); if (opts.reversed){ aa = aa.slice(0).reverse(); } _build(aa); function _build(aa){ var rule = slider.find('div.slider-rule'); var label = slider.find('div.slider-rulelabel'); rule.empty(); label.empty(); for(var i=0; i').appendTo(rule); span.css((opts.mode=='h'?'left':'top'), distance); // show the labels if (aa[i] != '|'){ span = $('').appendTo(label); span.html(aa[i]); if (opts.mode == 'h'){ span.css({ left: distance, marginLeft: -Math.round(span.outerWidth()/2) }); } else { span.css({ top: distance, marginTop: -Math.round(span.outerHeight()/2) }); } } } } } /** * build the slider and set some properties */ function buildSlider(target){ var state = $.data(target, 'slider'); var opts = state.options; var slider = state.slider; slider.removeClass('slider-h slider-v slider-disabled'); slider.addClass(opts.mode == 'h' ? 'slider-h' : 'slider-v'); slider.addClass(opts.disabled ? 'slider-disabled' : ''); var inner = slider.find('.slider-inner'); inner.html( '' + '' ); if (opts.range){ inner.append( '' + '' ); } slider.find('a.slider-handle').draggable({ axis:opts.mode, cursor:'pointer', disabled: opts.disabled, onDrag:function(e){ var left = e.data.left; var width = slider.width(); if (opts.mode!='h'){ left = e.data.top; width = slider.height(); } if (left < 0 || left > width) { return false; } else { setPos(left, this); return false; } }, onStartDrag:function(){ state.isDragging = true; opts.onSlideStart.call(target, opts.value); }, onStopDrag:function(e){ setPos(opts.mode=='h'?e.data.left:e.data.top, this); opts.onSlideEnd.call(target, opts.value); opts.onComplete.call(target, opts.value); state.isDragging = false; } }); slider.find('div.slider-inner').unbind('.slider').bind('mousedown.slider', function(e){ if (state.isDragging || opts.disabled){return} var pos = $(this).offset(); setPos(opts.mode=='h'?(e.pageX-pos.left):(e.pageY-pos.top)); opts.onComplete.call(target, opts.value); }); function setPos(pos, handle){ var value = pos2value(target, pos); var s = Math.abs(value % opts.step); if (s < opts.step/2){ value -= s; } else { value = value - s + opts.step; } if (opts.range){ var v1 = opts.value[0]; var v2 = opts.value[1]; var m = parseFloat((v1+v2)/2); if (handle){ var isLeft = $(handle).nextAll('.slider-handle').length > 0; if (value <= v2 && isLeft){ v1 = value; } else if (value >= v1 && (!isLeft)){ v2 = value; } } else { if (value < v1){ v1 = value; } else if (value > v2){ v2 = value; } else { value < m ? v1 = value : v2 = value; } } $(target).slider('setValues', [v1,v2]); } else { $(target).slider('setValue', value); } } } /** * set a specified value to slider */ function setValues(target, values){ var state = $.data(target, 'slider'); var opts = state.options; var slider = state.slider; var oldValues = $.isArray(opts.value) ? opts.value : [opts.value]; var newValues = []; if (!$.isArray(values)){ values = $.map(String(values).split(opts.separator), function(v){ return parseFloat(v); }); } slider.find('.slider-value').remove(); var name = $(target).attr('sliderName') || ''; for(var i=0; i opts.max) value = opts.max; var input = $('').appendTo(slider); input.attr('name', name); input.val(value); newValues.push(value); var handle = slider.find('.slider-handle:eq('+i+')'); var tip = handle.next(); var pos = value2pos(target, value); if (opts.showTip){ tip.show(); tip.html(opts.tipFormatter.call(target, value)); } else { tip.hide(); } if (opts.mode == 'h'){ var style = 'left:'+pos+'px;'; handle.attr('style', style); tip.attr('style', style + 'margin-left:' + (-Math.round(tip.outerWidth()/2)) + 'px'); } else { var style = 'top:' + pos + 'px;'; handle.attr('style', style); tip.attr('style', style + 'margin-left:' + (-Math.round(tip.outerWidth())) + 'px'); } } opts.value = opts.range ? newValues : newValues[0]; $(target).val(opts.range ? newValues.join(opts.separator) : newValues[0]); if (oldValues.join(',') != newValues.join(',')){ opts.onChange.call(target, opts.value, (opts.range?oldValues:oldValues[0])); } } function initValue(target){ var opts = $.data(target, 'slider').options; var fn = opts.onChange; opts.onChange = function(){}; setValues(target, opts.value); opts.onChange = fn; } /** * translate value to slider position */ function value2pos(target, value){ var state = $.data(target, 'slider'); var opts = state.options; var slider = state.slider; var size = opts.mode == 'h' ? slider.width() : slider.height(); var pos = opts.converter.toPosition.call(target, value, size); if (opts.mode == 'v'){ pos = slider.height() - pos; } if (opts.reversed){ pos = size - pos; } return pos.toFixed(0); } /** * translate slider position to value */ function pos2value(target, pos){ var state = $.data(target, 'slider'); var opts = state.options; var slider = state.slider; var size = opts.mode == 'h' ? slider.width() : slider.height(); var pos = opts.mode=='h' ? (opts.reversed?(size-pos):pos) : (opts.reversed?pos:(size-pos)); var value = opts.converter.toValue.call(target, pos, size); return value.toFixed(0); } $.fn.slider = function(options, param){ if (typeof options == 'string'){ return $.fn.slider.methods[options](this, param); } options = options || {}; return this.each(function(){ var state = $.data(this, 'slider'); if (state){ $.extend(state.options, options); } else { state = $.data(this, 'slider', { options: $.extend({}, $.fn.slider.defaults, $.fn.slider.parseOptions(this), options), slider: init(this) }); $(this).removeAttr('disabled'); } var opts = state.options; opts.min = parseFloat(opts.min); opts.max = parseFloat(opts.max); if (opts.range){ if (!$.isArray(opts.value)){ opts.value = $.map(String(opts.value).split(opts.separator), function(v){ return parseFloat(v); }); } if (opts.value.length < 2){ opts.value.push(opts.max); } } else { opts.value = parseFloat(opts.value); } opts.step = parseFloat(opts.step); opts.originalValue = opts.value; buildSlider(this); showRule(this); setSize(this); }); }; $.fn.slider.methods = { options: function(jq){ return $.data(jq[0], 'slider').options; }, destroy: function(jq){ return jq.each(function(){ $.data(this, 'slider').slider.remove(); $(this).remove(); }); }, resize: function(jq, param){ return jq.each(function(){ setSize(this, param); }); }, getValue: function(jq){ return jq.slider('options').value; }, getValues: function(jq){ return jq.slider('options').value; }, setValue: function(jq, value){ return jq.each(function(){ setValues(this, [value]); }); }, setValues: function(jq, values){ return jq.each(function(){ setValues(this, values); }); }, clear: function(jq){ return jq.each(function(){ var opts = $(this).slider('options'); setValues(this, opts.range?[opts.min,opts.max]:[opts.min]); }); }, reset: function(jq){ return jq.each(function(){ var opts = $(this).slider('options'); $(this).slider(opts.range?'setValues':'setValue', opts.originalValue); }); }, enable: function(jq){ return jq.each(function(){ $.data(this, 'slider').options.disabled = false; buildSlider(this); }); }, disable: function(jq){ return jq.each(function(){ $.data(this, 'slider').options.disabled = true; buildSlider(this); }); } }; $.fn.slider.parseOptions = function(target){ var t = $(target); return $.extend({}, $.parser.parseOptions(target, [ 'width','height','mode',{reversed:'boolean',showTip:'boolean',range:'boolean',min:'number',max:'number',step:'number'} ]), { value: (t.val() || undefined), disabled: (t.attr('disabled') ? true : undefined), rule: (t.attr('rule') ? eval(t.attr('rule')) : undefined) }); }; $.fn.slider.defaults = { width: 'auto', height: 'auto', mode: 'h', // 'h'(horizontal) or 'v'(vertical) reversed: false, showTip: false, disabled: false, range: false, value: 0, separator: ',', min: 0, max: 100, step: 1, rule: [], // [0,'|',100] tipFormatter: function(value){return value}, converter:{ toPosition:function(value, size){ var opts = $(this).slider('options'); return (value-opts.min)/(opts.max-opts.min)*size; }, toValue:function(pos, size){ var opts = $(this).slider('options'); return opts.min + (opts.max-opts.min)*(pos/size); } }, onChange: function(value, oldValue){}, onSlideStart: function(value){}, onSlideEnd: function(value){}, onComplete: function(value){} }; })(jQuery);