123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- /**
- * jQuery EasyUI 1.3.6
- *
- * 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 = $('<div class="datebox-calendar-inner"></div>').appendTo(panel);
- if (opts.sharedCalendar){
- var sc = $(opts.sharedCalendar);
- if (!sc[0].pholder){
- sc[0].pholder = $('<div class="calendar-pholder" style="display:none"></div>').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 = $('<div></div>').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 = $('<div class="datebox-button"><table cellspacing="0" cellpadding="0" style="width:100%"><tr></tr></table></div>').appendTo(panel);
- var tr = button.find('tr');
- for(var i=0; i<opts.buttons.length; i++){
- var td = $('<td></td>').appendTo(tr);
- var btn = opts.buttons[i];
- var t = $('<a href="javascript:void(0)"></a>').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, {
- 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:allGetServerTime().getFullYear(),
- month:allGetServerTime().getMonth()+1,
- current:allGetServerTime()
- });
- 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+'/'+d+'/'+y;
- },
- parser:function(s){
- var t = Date.parse(s);
- if (!isNaN(t)){
- return new Date(t);
- } else {
- return allGetServerTime();
- }
- },
-
- onSelect:function(date){}
- });
- })(jQuery);
|