You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
4.1 KiB
Plaintext

/**
* datebox - jQuery EasyUI
*
* Licensed under the GPL terms
* To use it on other terms please contact us
*
* Copyright(c) 2009-2012 stworthy [ stworthy@gmail.com ]
*
* Dependencies:
* calendar
* combo
*
*/
(function($){
/**
* create date box
*/
function createBox(target){
var state = $.data(target, 'datebox');
var opts = state.options;
$(target).addClass('datebox-f');
$(target).combo($.extend({}, opts, {
onShowPanel:function(){
state.calendar.calendar('resize');
opts.onShowPanel.call(target);
}
}));
$(target).combo('textbox').parent().addClass('datebox');
/**
* if the calendar isn't created, create it.
*/
if (!state.calendar){
createCalendar();
}
function createCalendar(){
var panel = $(target).combo('panel');
state.calendar = $('<div></div>').appendTo(panel).wrap('<div class="datebox-calendar-inner"></div>');
state.calendar.calendar({
fit:true,
border:false,
onSelect:function(date){
var value = opts.formatter(date);
setValue(target, value);
$(target).combo('hidePanel');
opts.onSelect.call(target, date);
}
});
setValue(target, opts.value);
var button = $('<div class="datebox-button"></div>').appendTo(panel);
$('<a href="javascript:void(0)" class="datebox-current"></a>').html(opts.currentText).appendTo(button);
$('<a href="javascript:void(0)" class="datebox-close"></a>').html(opts.closeText).appendTo(button);
button.find('.datebox-current,.datebox-close').hover(
function(){$(this).addClass('datebox-button-hover');},
function(){$(this).removeClass('datebox-button-hover');}
);
button.find('.datebox-current').click(function(){
state.calendar.calendar({
year:new Date().getFullYear(),
month:new Date().getMonth()+1,
current:new Date()
});
});
button.find('.datebox-close').click(function(){
$(target).combo('hidePanel');
});
}
}
/**
* called when user inputs some value in text box
*/
function doQuery(target, q){
setValue(target, q);
}
/**
* called when user press enter key
*/
function doEnter(target){
var opts = $.data(target, 'datebox').options;
var c = $.data(target, 'datebox').calendar;
var value = opts.formatter(c.calendar('options').current);
setValue(target, value);
$(target).combo('hidePanel');
}
function setValue(target, value){
var state = $.data(target, 'datebox');
var opts = state.options;
$(target).combo('setValue', value).combo('setText', value);
state.calendar.calendar('moveTo', opts.parser(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){
return $.data(jq[0], 'datebox').options;
},
calendar: function(jq){ // get the calendar object
return $.data(jq[0], 'datebox').calendar;
},
setValue: function(jq, value){
return jq.each(function(){
setValue(this, value);
});
}
};
$.fn.datebox.parseOptions = function(target){
var t = $(target);
return $.extend({}, $.fn.combo.parseOptions(target), {
});
};
$.fn.datebox.defaults = $.extend({}, $.fn.combo.defaults, {
panelWidth:180,
panelHeight:'auto',
keyHandler: {
up:function(){},
down:function(){},
enter:function(){doEnter(this);},
query:function(q){doQuery(this, q);}
},
currentText:'Today',
closeText:'Close',
okText:'Ok',
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 new Date();
}
},
onSelect:function(date){}
});
})(jQuery);