/** * jQuery EasyUI 1.4 * * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved. * * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt * To use it on other terms please contact us at info@jeasyui.com * */ /** * datebox - jQuery EasyUI * * 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(){ setCalendar(); setValue(target, $(target).datebox('getText'), true); // setValue(target, $(target).datebox('getText')); opts.onShowPanel.call(target); } })); $(target).combo('textbox').parent().addClass('datebox'); /** * if the calendar isn't created, create it. */ if (!state.calendar){ createCalendar(); } setValue(target, opts.value); function createCalendar(){ var panel = $(target).combo('panel').css('overflow','hidden'); panel.panel('options').onBeforeDestroy = function(){ var sc = $(this).find('.calendar-shared'); if (sc.length){ sc.insertBefore(sc[0].pholder); } }; var cc = $('
').appendTo(panel); if (opts.sharedCalendar){ var sc = $(opts.sharedCalendar); if (!sc[0].pholder){ sc[0].pholder = $('').insertAfter(sc); } sc.addClass('calendar-shared').appendTo(cc); if (!sc.hasClass('calendar')){ sc.calendar(); } state.calendar = sc; // state.calendar = $(opts.sharedCalendar).appendTo(cc); // if (!state.calendar.hasClass('calendar')){ // state.calendar.calendar(); // } } else { state.calendar = $('
').appendTo(cc).calendar(); } $.extend(state.calendar.calendar('options'), { fit:true, border:false, onSelect:function(date){ var opts = $(this.target).datebox('options'); setValue(this.target, opts.formatter.call(this.target, date)); $(this.target).combo('hidePanel'); opts.onSelect.call(target, date); } }); // setValue(target, opts.value); 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.bind('click', {target: target, handler: btn.handler}, function(e){ e.data.handler.call(this, e.data.target); }); } tr.find('td').css('width', (100/opts.buttons.length)+'%'); } function setCalendar(){ 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; $(target).combo('setValue', value); calendar.calendar('moveTo', opts.parser.call(target, value)); if (!remainText){ if (value){ value = opts.formatter.call(target, calendar.calendar('options').current); $(target).combo('setValue', value).combo('setText', value); } else { $(target).combo('setText', 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 }); }, calendar: function(jq){ // get the calendar object return $.data(jq[0], 'datebox').calendar; }, 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){ $(target).datebox('calendar').calendar({ year:new Date().getFullYear(), month:new Date().getMonth()+1, current:new Date() }); 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; // return m+'/'+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);