initial commit
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
function prepareDataForSave(name,data) {
|
||||
var obj = new Object();
|
||||
obj.Name = name;
|
||||
obj.Data = data;
|
||||
return obj;
|
||||
}
|
||||
|
||||
function prepareMultiPartPOST(data) {
|
||||
// var boundary = 'sPlItME' + Math.floor(Math.random()*10000);
|
||||
var boundary = '' + Math.floor(Math.random()*10000);
|
||||
var reqdata = '--' + boundary + '\r\n';
|
||||
//console.log(data.length);
|
||||
for (var i=0;i < data.length;i++)
|
||||
{
|
||||
reqdata += 'content-disposition: form-data; name="' + data[i].Name + '"';
|
||||
reqdata += "\r\n\r\n" ;
|
||||
reqdata += data[i].Data;
|
||||
reqdata += "\r\n" ;
|
||||
reqdata += '--' + boundary + '\r\n';
|
||||
}
|
||||
return new Array(reqdata,boundary);
|
||||
}
|
||||
|
||||
function on_error() {
|
||||
jQuery("input[name='saved_on']").attr('style','background-color:red');
|
||||
jQuery("input[name='saved_on']").val('communication error');
|
||||
}
|
||||
|
||||
function doClickSave() {
|
||||
try {
|
||||
var data = eamy.instances[0].getText();
|
||||
} catch(e) {
|
||||
var data = area.textarea.value;
|
||||
}
|
||||
var dataForPost = prepareMultiPartPOST(new Array(
|
||||
prepareDataForSave('data', data),
|
||||
prepareDataForSave('file_hash', jQuery("input[name='file_hash']").val()),
|
||||
prepareDataForSave('saved_on', jQuery("input[name='saved_on']").val()),
|
||||
prepareDataForSave('from_ajax','true')));
|
||||
// console.info(area.textarea.value);
|
||||
jQuery("input[name='saved_on']").attr('style','background-color:yellow');
|
||||
jQuery("input[name='saved_on']").val('saving now...')
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
contentType: 'multipart/form-data;boundary="' + dataForPost[1] + '"',
|
||||
url: self.location.href,
|
||||
dataType: "json",
|
||||
data: dataForPost[0],
|
||||
timeout: 5000,
|
||||
beforeSend: function(xhr) {
|
||||
xhr.setRequestHeader('web2py-component-location',document.location);
|
||||
xhr.setRequestHeader('web2py-component-element','doClickSave');},
|
||||
success: function(json,text,xhr){
|
||||
|
||||
// show flash message (if any)
|
||||
var flash=xhr.getResponseHeader('web2py-component-flash');
|
||||
if (flash) jQuery('.flash').html(flash).slideDown();
|
||||
else jQuery('.flash').hide();
|
||||
|
||||
// reenable disabled submit button
|
||||
var t=jQuery("input[name='save']");
|
||||
t.attr('class','');
|
||||
t.attr('disabled','');
|
||||
|
||||
try {
|
||||
if (json.error) {
|
||||
window.location.href=json.redirect;
|
||||
} else {
|
||||
// console.info( json.file_hash );
|
||||
jQuery("input[name='file_hash']").val(json.file_hash);
|
||||
jQuery("input[name='saved_on']").val(json.saved_on);
|
||||
if (json.highlight) {
|
||||
editAreaLoader.setSelectionRange('body', json.highlight.start, json.highlight.end);
|
||||
} else {
|
||||
jQuery("input[name='saved_on']").attr('style','background-color:#99FF99');
|
||||
jQuery(".flash").delay(1000).fadeOut('slow');
|
||||
}
|
||||
// console.info(jQuery("input[name='file_hash']").val());
|
||||
|
||||
var output = '<b>exposes:</b> ';
|
||||
for ( var i in json.functions) {
|
||||
output += ' <a href="/' + json.application + '/' + json.controller + '/' + json.functions[i] + '">' + json.functions[i] + '</a>,';
|
||||
}
|
||||
if(output!='<b>exposes:</b> ') {
|
||||
jQuery("#exposed").html( output.substring(0, output.length-1));
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
on_error();
|
||||
}
|
||||
},
|
||||
error: function(json) { on_error(); }
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
function keepalive(url) {
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: url,
|
||||
timeout: 1000,
|
||||
success: function(){},
|
||||
error: function(x) { on_error(); } });
|
||||
}
|
||||
@@ -0,0 +1,790 @@
|
||||
/* anytimec.js 4.1112H (anytime.js 4.1112H)
|
||||
Copyright 2008-2010 Andrew M. Andrews III (www.AMA3.com). Some Rights
|
||||
Reserved. This work licensed under the Creative Commons Attribution-
|
||||
Noncommercial-Share Alike 3.0 Unported License except in jurisdicitons
|
||||
for which the license has been ported by Creative Commons International,
|
||||
where the work is licensed under the applicable ported license instead.
|
||||
For a copy of the unported license, visit
|
||||
http://creativecommons.org/licenses/by-nc-sa/3.0/
|
||||
or send a letter to Creative Commons, 171 Second Street, Suite 300,
|
||||
San Francisco, California, 94105, USA. For ported versions of the
|
||||
license, visit http://creativecommons.org/international/
|
||||
Any+Time is a trademark of Andrew M. Andrews III. */
|
||||
var AnyTime={pad:function(val,len)
|
||||
{var str=String(Math.abs(val));while(str.length<len)
|
||||
str='0'+str;if(val<0)
|
||||
str='-'+str;return str;}};(function($)
|
||||
{var __oneDay=(24*60*60*1000);var __daysIn=[31,28,31,30,31,30,31,31,30,31,30,31];var __iframe=null;var __initialized=false;var __msie6=(navigator.userAgent.indexOf('MSIE 6')>0);var __msie7=(navigator.userAgent.indexOf('MSIE 7')>0);var __pickers=[];jQuery.prototype.AnyTime_picker=function(options)
|
||||
{return this.each(function(i){AnyTime.picker(this.id,options);});}
|
||||
jQuery.prototype.AnyTime_noPicker=function()
|
||||
{return this.each(function(i){AnyTime.noPicker(this.id);});}
|
||||
jQuery.prototype.AnyTime_height=function(inclusive)
|
||||
{return(__msie6?Number(this.css('height').replace(/[^0-9]/g,'')):this.outerHeight(inclusive));};jQuery.prototype.AnyTime_width=function(inclusive)
|
||||
{return(__msie6?(1+Number(this.css('width').replace(/[^0-9]/g,''))):this.outerWidth(inclusive));};jQuery.prototype.AnyTime_current=function(isCurrent,isLegal)
|
||||
{if(isCurrent)
|
||||
{this.removeClass('AnyTime-out-btn ui-state-default ui-state-disabled ui-state-highlight');this.addClass('AnyTime-cur-btn ui-state-default ui-state-highlight');}
|
||||
else
|
||||
{this.removeClass('AnyTime-cur-btn ui-state-highlight');if(!isLegal)
|
||||
this.addClass('AnyTime-out-btn ui-state-disabled');else
|
||||
this.removeClass('AnyTime-out-btn ui-state-disabled');}};jQuery.prototype.AnyTime_clickCurrent=function()
|
||||
{this.find('.AnyTime-cur-btn').triggerHandler('click');}
|
||||
$(document).ready(function()
|
||||
{if(__msie6)
|
||||
{__iframe=$('<iframe frameborder="0" scrolling="no"></iframe>');__iframe.src="javascript:'<html></html>';";$(__iframe).css({display:'block',height:'1px',left:'0',top:'0',width:'1px',zIndex:0});$(document.body).append(__iframe);}
|
||||
for(var id in __pickers)
|
||||
if(!Array.prototype[id])
|
||||
__pickers[id].onReady();__initialized=true;});AnyTime.Converter=function(options)
|
||||
{var _flen=0;var _longDay=9;var _longMon=9;var _shortDay=6;var _shortMon=3;var _offAl=Number.MIN_VALUE;var _offCap=Number.MIN_VALUE;var _offF=Number.MIN_VALUE;var _offFSI=(-1);var _offP=Number.MIN_VALUE;var _offPSI=(-1);var _captureOffset=false;this.fmt='%Y-%m-%d %T';this.dAbbr=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];this.dNames=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];this.eAbbr=['BCE','CE'];this.mAbbr=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];this.mNames=['January','February','March','April','May','June','July','August','September','October','November','December'];this.baseYear=null;this.dAt=function(str,pos)
|
||||
{return((str.charCodeAt(pos)>='0'.charCodeAt(0))&&(str.charCodeAt(pos)<='9'.charCodeAt(0)));};this.format=function(date)
|
||||
{var d=new Date(date.getTime());if((_offAl==Number.MIN_VALUE)&&(_offF!=Number.MIN_VALUE))
|
||||
d.setTime((d.getTime()+(d.getTimezoneOffset()*60000))+(_offF*60000));var t;var str='';for(var f=0;f<_flen;f++)
|
||||
{if(this.fmt.charAt(f)!='%')
|
||||
str+=this.fmt.charAt(f);else
|
||||
{var ch=this.fmt.charAt(f+1)
|
||||
switch(ch)
|
||||
{case'a':str+=this.dAbbr[d.getDay()];break;case'B':if(d.getFullYear()<0)
|
||||
str+=this.eAbbr[0];break;case'b':str+=this.mAbbr[d.getMonth()];break;case'C':if(d.getFullYear()>0)
|
||||
str+=this.eAbbr[1];break;case'c':str+=d.getMonth()+1;break;case'd':t=d.getDate();if(t<10)str+='0';str+=String(t);break;case'D':t=String(d.getDate());str+=t;if((t.length==2)&&(t.charAt(0)=='1'))
|
||||
str+='th';else
|
||||
{switch(t.charAt(t.length-1))
|
||||
{case'1':str+='st';break;case'2':str+='nd';break;case'3':str+='rd';break;default:str+='th';break;}}
|
||||
break;case'E':str+=this.eAbbr[(d.getFullYear()<0)?0:1];break;case'e':str+=d.getDate();break;case'H':t=d.getHours();if(t<10)str+='0';str+=String(t);break;case'h':case'I':t=d.getHours()%12;if(t==0)
|
||||
str+='12';else
|
||||
{if(t<10)str+='0';str+=String(t);}
|
||||
break;case'i':t=d.getMinutes();if(t<10)str+='0';str+=String(t);break;case'k':str+=d.getHours();break;case'l':t=d.getHours()%12;if(t==0)
|
||||
str+='12';else
|
||||
str+=String(t);break;case'M':str+=this.mNames[d.getMonth()];break;case'm':t=d.getMonth()+1;if(t<10)str+='0';str+=String(t);break;case'p':str+=((d.getHours()<12)?'AM':'PM');break;case'r':t=d.getHours()%12;if(t==0)
|
||||
str+='12:';else
|
||||
{if(t<10)str+='0';str+=String(t)+':';}
|
||||
t=d.getMinutes();if(t<10)str+='0';str+=String(t)+':';t=d.getSeconds();if(t<10)str+='0';str+=String(t);str+=((d.getHours()<12)?'AM':'PM');break;case'S':case's':t=d.getSeconds();if(t<10)str+='0';str+=String(t);break;case'T':t=d.getHours();if(t<10)str+='0';str+=String(t)+':';t=d.getMinutes();if(t<10)str+='0';str+=String(t)+':';t=d.getSeconds();if(t<10)str+='0';str+=String(t);break;case'W':str+=this.dNames[d.getDay()];break;case'w':str+=d.getDay();break;case'Y':str+=AnyTime.pad(d.getFullYear(),4);break;case'y':t=d.getFullYear()%100;str+=AnyTime.pad(t,2);break;case'Z':str+=AnyTime.pad(Math.abs(d.getFullYear()),4);break;case'z':str+=Math.abs(d.getFullYear());break;case'%':str+='%';break;case'#':t=(_offAl!=Number.MIN_VALUE)?_offAl:(_offF==Number.MIN_VALUE)?(0-d.getTimezoneOffset()):_offF;if(t>=0)
|
||||
str+='+';str+=t;break;case'@':t=(_offAl!=Number.MIN_VALUE)?_offAl:(_offF==Number.MIN_VALUE)?(0-d.getTimezoneOffset()):_offF;if(AnyTime.utcLabel&&AnyTime.utcLabel[t])
|
||||
{if((_offFSI>0)&&(_offFSI<AnyTime.utcLabel[t].length))
|
||||
str+=AnyTime.utcLabel[t][_offFSI];else
|
||||
str+=AnyTime.utcLabel[t][0];break;}
|
||||
str+='UTC';ch=':';case'+':case'-':case':':case';':t=(_offAl!=Number.MIN_VALUE)?_offAl:(_offF==Number.MIN_VALUE)?(0-d.getTimezoneOffset()):_offF;if(t<0)
|
||||
str+='-';else
|
||||
str+='+';t=Math.abs(t);str+=((ch=='+')||(ch==':'))?AnyTime.pad(Math.floor(t/60),2):Math.floor(t/60);if((ch==':')||(ch==';'))
|
||||
str+=':';str+=AnyTime.pad(t%60,2);break;case'f':case'j':case'U':case'u':case'V':case'v':case'X':case'x':throw'%'+ch+' not implemented by AnyTime.Converter';default:str+=this.fmt.substr(f,2);}
|
||||
f++;}}
|
||||
return str;};this.getUtcParseOffsetCaptured=function()
|
||||
{return _offCap;};this.getUtcParseOffsetSubIndex=function()
|
||||
{return _offPSI;};this.parse=function(str)
|
||||
{_offCap=_offP;_offPSI=(-1);var era=1;var time=new Date(4,0,1,0,0,0,0);var slen=str.length;var s=0;var tzSign=1,tzOff=_offP;var i,matched,sub,sublen,temp;for(var f=0;f<_flen;f++)
|
||||
{if(this.fmt.charAt(f)=='%')
|
||||
{var ch=this.fmt.charAt(f+1);switch(ch)
|
||||
{case'a':matched=false;for(sublen=0;s+sublen<slen;sublen++)
|
||||
{sub=str.substr(s,sublen);for(i=0;i<12;i++)
|
||||
if(this.dAbbr[i]==sub)
|
||||
{matched=true;s+=sublen;break;}
|
||||
if(matched)
|
||||
break;}
|
||||
if(!matched)
|
||||
throw'unknown weekday: '+str.substr(s);break;case'B':sublen=this.eAbbr[0].length;if((s+sublen<=slen)&&(str.substr(s,sublen)==this.eAbbr[0]))
|
||||
{era=(-1);s+=sublen;}
|
||||
break;case'b':matched=false;for(sublen=0;s+sublen<slen;sublen++)
|
||||
{sub=str.substr(s,sublen);for(i=0;i<12;i++)
|
||||
if(this.mAbbr[i]==sub)
|
||||
{time.setMonth(i);matched=true;s+=sublen;break;}
|
||||
if(matched)
|
||||
break;}
|
||||
if(!matched)
|
||||
throw'unknown month: '+str.substr(s);break;case'C':sublen=this.eAbbr[1].length;if((s+sublen<=slen)&&(str.substr(s,sublen)==this.eAbbr[1]))
|
||||
s+=sublen;break;case'c':if((s+1<slen)&&this.dAt(str,s+1))
|
||||
{time.setMonth((Number(str.substr(s,2))-1)%12);s+=2;}
|
||||
else
|
||||
{time.setMonth((Number(str.substr(s,1))-1)%12);s++;}
|
||||
break;case'D':if((s+1<slen)&&this.dAt(str,s+1))
|
||||
{time.setDate(Number(str.substr(s,2)));s+=4;}
|
||||
else
|
||||
{time.setDate(Number(str.substr(s,1)));s+=3;}
|
||||
break;case'd':time.setDate(Number(str.substr(s,2)));s+=2;break;case'E':sublen=this.eAbbr[0].length;if((s+sublen<=slen)&&(str.substr(s,sublen)==this.eAbbr[0]))
|
||||
{era=(-1);s+=sublen;}
|
||||
else if((s+(sublen=this.eAbbr[1].length)<=slen)&&(str.substr(s,sublen)==this.eAbbr[1]))
|
||||
s+=sublen;else
|
||||
throw'unknown era: '+str.substr(s);break;case'e':if((s+1<slen)&&this.dAt(str,s+1))
|
||||
{time.setDate(Number(str.substr(s,2)));s+=2;}
|
||||
else
|
||||
{time.setDate(Number(str.substr(s,1)));s++;}
|
||||
break;case'f':s+=6;break;case'H':time.setHours(Number(str.substr(s,2)));s+=2;break;case'h':case'I':time.setHours(Number(str.substr(s,2)));s+=2;break;case'i':time.setMinutes(Number(str.substr(s,2)));s+=2;break;case'k':if((s+1<slen)&&this.dAt(str,s+1))
|
||||
{time.setHours(Number(str.substr(s,2)));s+=2;}
|
||||
else
|
||||
{time.setHours(Number(str.substr(s,1)));s++;}
|
||||
break;case'l':if((s+1<slen)&&this.dAt(str,s+1))
|
||||
{time.setHours(Number(str.substr(s,2)));s+=2;}
|
||||
else
|
||||
{time.setHours(Number(str.substr(s,1)));s++;}
|
||||
break;case'M':matched=false;for(sublen=_shortMon;s+sublen<=slen;sublen++)
|
||||
{if(sublen>_longMon)
|
||||
break;sub=str.substr(s,sublen);for(i=0;i<12;i++)
|
||||
{if(this.mNames[i]==sub)
|
||||
{time.setMonth(i);matched=true;s+=sublen;break;}}
|
||||
if(matched)
|
||||
break;}
|
||||
break;case'm':time.setMonth((Number(str.substr(s,2))-1)%12);s+=2;break;case'p':if(time.getHours()==12)
|
||||
{if(str.charAt(s)=='A')
|
||||
time.setHours(0);}
|
||||
else if(str.charAt(s)=='P')
|
||||
time.setHours(time.getHours()+12);s+=2;break;case'r':time.setHours(Number(str.substr(s,2)));time.setMinutes(Number(str.substr(s+3,2)));time.setSeconds(Number(str.substr(s+6,2)));if(time.getHours()==12)
|
||||
{if(str.charAt(s)=='A')
|
||||
time.setHours(0);}
|
||||
else if(str.charAt(s)=='P')
|
||||
time.setHours(time.getHours()+12);s+=10;break;case'S':case's':time.setSeconds(Number(str.substr(s,2)));s+=2;break;case'T':time.setHours(Number(str.substr(s,2)));time.setMinutes(Number(str.substr(s+3,2)));time.setSeconds(Number(str.substr(s+6,2)));s+=8;break;case'W':matched=false;for(sublen=_shortDay;s+sublen<=slen;sublen++)
|
||||
{if(sublen>_longDay)
|
||||
break;sub=str.substr(s,sublen);for(i=0;i<7;i++)
|
||||
{if(this.dNames[i]==sub)
|
||||
{matched=true;s+=sublen;break;}}
|
||||
if(matched)
|
||||
break;}
|
||||
break;case'w':s+=1;break;case'Y':i=4;if(str.substr(s,1)=='-')
|
||||
i++;time.setFullYear(Number(str.substr(s,i)));s+=i;break;case'y':i=2;if(str.substr(s,1)=='-')
|
||||
i++;temp=Number(str.substr(s,i));if(typeof(this.baseYear)=='number')
|
||||
temp+=this.baseYear;else if(temp<70)
|
||||
temp+=2000;else
|
||||
temp+=1900;time.setFullYear(temp);s+=i;break;case'Z':time.setFullYear(Number(str.substr(s,4)));s+=4;break;case'z':i=0;while((s<slen)&&this.dAt(str,s))
|
||||
i=(i*10)+Number(str.charAt(s++));time.setFullYear(i);break;case'#':if(str.charAt(s++)=='-')
|
||||
tzSign=(-1);for(tzOff=0;(s<slen)&&(String(i=Number(str.charAt(s)))==str.charAt(s));s++)
|
||||
tzOff=(tzOff*10)+i;tzOff*=tzSign;break;case'@':_offPSI=(-1);if(AnyTime.utcLabel)
|
||||
{matched=false;for(tzOff in AnyTime.utcLabel)
|
||||
if(!Array.prototype[tzOff])
|
||||
{for(i=0;i<AnyTime.utcLabel[tzOff].length;i++)
|
||||
{sub=AnyTime.utcLabel[tzOff][i];sublen=sub.length;if((s+sublen<=slen)&&(str.substr(s,sublen)==sub))
|
||||
{s+=sublen;matched=true;break;}}
|
||||
if(matched)
|
||||
break;}
|
||||
if(matched)
|
||||
{_offPSI=i;tzOff=Number(tzOff);break;}}
|
||||
if((s+9<slen)||(str.substr(s,3)!="UTC"))
|
||||
throw'unknown time zone: '+str.substr(s);s+=3;ch=':';case'-':case'+':case':':case';':if(str.charAt(s++)=='-')
|
||||
tzSign=(-1);tzOff=Number(str.charAt(s));if((ch=='+')||(ch==':')||((s+3<slen)&&(String(Number(str.charAt(s+3)))!==str.charAt(s+3))))
|
||||
tzOff=(tzOff*10)+Number(str.charAt(++s));tzOff*=60;if((ch==':')||(ch==';'))
|
||||
s++;tzOff=(tzOff+Number(str.substr(++s,2)))*tzSign;s+=2;break;case'j':case'U':case'u':case'V':case'v':case'X':case'x':throw'%'+this.fmt.charAt(f+1)+' not implemented by AnyTime.Converter';case'%':default:throw'%'+this.fmt.charAt(f+1)+' reserved for future use';break;}
|
||||
f++;}
|
||||
else if(this.fmt.charAt(f)!=str.charAt(s))
|
||||
throw str+' is not in "'+this.fmt+'" format';else
|
||||
s++;}
|
||||
if(era<0)
|
||||
time.setFullYear(0-time.getFullYear());if(tzOff!=Number.MIN_VALUE)
|
||||
{if(_captureOffset)
|
||||
_offCap=tzOff;else
|
||||
time.setTime((time.getTime()-(tzOff*60000))-(time.getTimezoneOffset()*60000));}
|
||||
return time;};this.setUtcFormatOffsetAlleged=function(offset)
|
||||
{var prev=_offAl;_offAl=offset;return prev;};this.setUtcFormatOffsetSubIndex=function(subIndex)
|
||||
{var prev=_offFSI;_offFSI=subIndex;return prev;};(function(_this)
|
||||
{var i,len;options=jQuery.extend(true,{},options||{});if(options.baseYear)
|
||||
_this.baseYear=Number(options.baseYear);if(options.format)
|
||||
_this.fmt=options.format;_flen=_this.fmt.length;if(options.dayAbbreviations)
|
||||
_this.dAbbr=$.makeArray(options.dayAbbreviations);if(options.dayNames)
|
||||
{_this.dNames=$.makeArray(options.dayNames);_longDay=1;_shortDay=1000;for(i=0;i<7;i++)
|
||||
{len=_this.dNames[i].length;if(len>_longDay)
|
||||
_longDay=len;if(len<_shortDay)
|
||||
_shortDay=len;}}
|
||||
if(options.eraAbbreviations)
|
||||
_this.eAbbr=$.makeArray(options.eraAbbreviations);if(options.monthAbbreviations)
|
||||
_this.mAbbr=$.makeArray(options.monthAbbreviations);if(options.monthNames)
|
||||
{_this.mNames=$.makeArray(options.monthNames);_longMon=1;_shortMon=1000;for(i=0;i<12;i++)
|
||||
{len=_this.mNames[i].length;if(len>_longMon)
|
||||
_longMon=len;if(len<_shortMon)
|
||||
_shortMon=len;}}
|
||||
if(typeof options.utcFormatOffsetImposed!="undefined")
|
||||
_offF=options.utcFormatOffsetImposed;if(typeof options.utcParseOffsetAssumed!="undefined")
|
||||
_offP=options.utcParseOffsetAssumed;if(options.utcParseOffsetCapture)
|
||||
_captureOffset=true;})(this);};AnyTime.noPicker=function(id)
|
||||
{if(__pickers[id])
|
||||
{__pickers[id].cleanup();delete __pickers[id];}};AnyTime.picker=function(id,options)
|
||||
{if(__pickers[id])
|
||||
throw'Cannot create another AnyTime picker for "'+id+'"';var _this=null;__pickers[id]={twelveHr:false,ajaxOpts:null,denyTab:true,askEra:false,cloak:null,conv:null,bMinW:0,bMinH:0,dMinW:0,dMinH:0,div:null,dB:null,dD:null,dY:null,dMo:null,dDoM:null,hDoM:null,hMo:null,hTitle:null,hY:null,dT:null,dH:null,dM:null,dS:null,dO:null,earliest:null,fBtn:null,fDOW:0,hBlur:null,hClick:null,hFocus:null,hKeydown:null,hKeypress:null,id:null,inp:null,latest:null,lastAjax:null,lostFocus:false,lX:'X',lY:'Year',lO:'Time Zone',oBody:null,oConv:null,oCur:null,oDiv:null,oLab:null,oListMinW:0,oMinW:0,oSel:null,offMin:Number.MIN_VALUE,offSI:-1,offStr:"",pop:true,time:null,tMinW:0,tMinH:0,url:null,wMinW:0,wMinH:0,yAhead:null,y0XXX:null,yCur:null,yDiv:null,yLab:null,yNext:null,yPast:null,yPrior:null,initialize:function(id)
|
||||
{_this=this;this.id='AnyTime--'+id.replace(/[^-_.A-Za-z0-9]/g,'--AnyTime--');options=jQuery.extend(true,{},options||{});options.utcParseOffsetCapture=true;this.conv=new AnyTime.Converter(options);if(options.placement)
|
||||
{if(options.placement=='inline')
|
||||
this.pop=false;else if(options.placement!='popup')
|
||||
throw'unknown placement: '+options.placement;}
|
||||
if(options.ajaxOptions)
|
||||
{this.ajaxOpts=jQuery.extend({},options.ajaxOptions);if(!this.ajaxOpts.success)
|
||||
this.ajaxOpts.success=function(data,status){_this.inp.val(data);};}
|
||||
if(options.earliest)
|
||||
{if(typeof options.earliest.getTime=='function')
|
||||
this.earliest=options.earliest.getTime();else
|
||||
this.earliest=this.conv.parse(options.earliest.toString());}
|
||||
if(options.firstDOW)
|
||||
{if((options.firstDOW<0)||(options.firstDOW>6))
|
||||
throw new Exception('illegal firstDOW: '+options.firstDOW);this.fDOW=options.firstDOW;}
|
||||
if(options.latest)
|
||||
{if(typeof options.latest.getTime=='function')
|
||||
this.latest=options.latest.getTime();else
|
||||
this.latest=this.conv.parse(options.latest.toString());}
|
||||
this.lX=options.labelDismiss||'X';this.lY=options.labelYear||'Year';this.lO=options.labelTimeZone||'Time Zone';var i;var t;var lab;var shownFields=0;var format=this.conv.fmt;if(typeof options.askEra!='undefined')
|
||||
this.askEra=options.askEra;else
|
||||
this.askEra=(format.indexOf('%B')>=0)||(format.indexOf('%C')>=0)||(format.indexOf('%E')>=0);var askYear=(format.indexOf('%Y')>=0)||(format.indexOf('%y')>=0)||(format.indexOf('%Z')>=0)||(format.indexOf('%z')>=0);var askMonth=(format.indexOf('%b')>=0)||(format.indexOf('%c')>=0)||(format.indexOf('%M')>=0)||(format.indexOf('%m')>=0);var askDoM=(format.indexOf('%D')>=0)||(format.indexOf('%d')>=0)||(format.indexOf('%e')>=0);var askDate=askYear||askMonth||askDoM;this.twelveHr=(format.indexOf('%h')>=0)||(format.indexOf('%I')>=0)||(format.indexOf('%l')>=0)||(format.indexOf('%r')>=0);var askHour=this.twelveHr||(format.indexOf('%H')>=0)||(format.indexOf('%k')>=0)||(format.indexOf('%T')>=0);var askMinute=(format.indexOf('%i')>=0)||(format.indexOf('%r')>=0)||(format.indexOf('%T')>=0);var askSec=((format.indexOf('%r')>=0)||(format.indexOf('%S')>=0)||(format.indexOf('%s')>=0)||(format.indexOf('%T')>=0));if(askSec&&(typeof options.askSecond!='undefined'))
|
||||
askSec=options.askSecond;var askOff=((format.indexOf('%#')>=0)||(format.indexOf('%+')>=0)||(format.indexOf('%-')>=0)||(format.indexOf('%:')>=0)||(format.indexOf('%;')>=0)||(format.indexOf('%<')>=0)||(format.indexOf('%>')>=0)||(format.indexOf('%@')>=0));var askTime=askHour||askMinute||askSec||askOff;if(askOff)
|
||||
this.oConv=new AnyTime.Converter({format:options.formatUtcOffset||format.match(/\S*%[-+:;<>#@]\S*/g).join(' ')});this.inp=$(document.getElementById(id));this.div=$('<div class="AnyTime-win AnyTime-pkr ui-widget ui-widget-content ui-corner-all" style="width:0;height:0" id="'+this.id+'" aria-live="off"/>');this.inp.after(this.div);this.wMinW=this.div.outerWidth(!$.browser.safari);this.wMinH=this.div.AnyTime_height(true);this.hTitle=$('<h5 class="AnyTime-hdr ui-widget-header ui-corner-top"/>');this.div.append(this.hTitle);this.dB=$('<div class="AnyTime-body" style="width:0;height:0"/>');this.div.append(this.dB);this.bMinW=this.dB.outerWidth(true);this.bMinH=this.dB.AnyTime_height(true);if(options.hideInput)
|
||||
this.inp.css({border:0,height:'1px',margin:0,padding:0,width:'1px'});t=null;var xDiv=null;if(this.pop)
|
||||
{xDiv=$('<div class="AnyTime-x-btn ui-state-default">'+this.lX+'</div>');this.hTitle.append(xDiv);xDiv.click(function(e){_this.dismiss(e);});}
|
||||
lab='';if(askDate)
|
||||
{this.dD=$('<div class="AnyTime-date" style="width:0;height:0"/>');this.dB.append(this.dD);this.dMinW=this.dD.outerWidth(true);this.dMinH=this.dD.AnyTime_height(true);if(askYear)
|
||||
{this.yLab=$('<h6 class="AnyTime-lbl AnyTime-lbl-yr">'+this.lY+'</h6>');this.dD.append(this.yLab);this.dY=$('<ul class="AnyTime-yrs ui-helper-reset" />');this.dD.append(this.dY);this.yPast=this.btn(this.dY,'<',this.newYear,['yrs-past'],'- '+this.lY);this.yPrior=this.btn(this.dY,'1',this.newYear,['yr-prior'],'-1 '+this.lY);this.yCur=this.btn(this.dY,'2',this.newYear,['yr-cur'],this.lY);this.yCur.removeClass('ui-state-default');this.yCur.addClass('AnyTime-cur-btn ui-state-default ui-state-highlight');this.yNext=this.btn(this.dY,'3',this.newYear,['yr-next'],'+1 '+this.lY);this.yAhead=this.btn(this.dY,'>',this.newYear,['yrs-ahead'],'+ '+this.lY);shownFields++;}
|
||||
if(askMonth)
|
||||
{lab=options.labelMonth||'Month';this.hMo=$('<h6 class="AnyTime-lbl AnyTime-lbl-month">'+lab+'</h6>');this.dD.append(this.hMo);this.dMo=$('<ul class="AnyTime-mons" />');this.dD.append(this.dMo);for(i=0;i<12;i++)
|
||||
{var mBtn=this.btn(this.dMo,this.conv.mAbbr[i],function(event)
|
||||
{var elem=$(event.target);if(elem.hasClass("AnyTime-out-btn"))
|
||||
return;var mo=event.target.AnyTime_month;var t=new Date(this.time.getTime());if(t.getDate()>__daysIn[mo])
|
||||
t.setDate(__daysIn[mo])
|
||||
t.setMonth(mo);this.set(t);this.upd(elem);},['mon','mon'+String(i+1)],lab+' '+this.conv.mNames[i]);mBtn[0].AnyTime_month=i;}
|
||||
shownFields++;}
|
||||
if(askDoM)
|
||||
{lab=options.labelDayOfMonth||'Day of Month';this.hDoM=$('<h6 class="AnyTime-lbl AnyTime-lbl-dom">'+lab+'</h6>');this.dD.append(this.hDoM);this.dDoM=$('<table border="0" cellpadding="0" cellspacing="0" class="AnyTime-dom-table"/>');this.dD.append(this.dDoM);t=$('<thead class="AnyTime-dom-head"/>');this.dDoM.append(t);var tr=$('<tr class="AnyTime-dow"/>');t.append(tr);for(i=0;i<7;i++)
|
||||
tr.append('<th class="AnyTime-dow AnyTime-dow'+String(i+1)+'">'+this.conv.dAbbr[(this.fDOW+i)%7]+'</th>');var tbody=$('<tbody class="AnyTime-dom-body" />');this.dDoM.append(tbody);for(var r=0;r<6;r++)
|
||||
{tr=$('<tr class="AnyTime-wk AnyTime-wk'+String(r+1)+'"/>');tbody.append(tr);for(i=0;i<7;i++)
|
||||
this.btn(tr,'x',function(event)
|
||||
{var elem=$(event.target);if(elem.hasClass("AnyTime-out-btn"))
|
||||
return;var dom=Number(elem.html());if(dom)
|
||||
{var t=new Date(this.time.getTime());t.setDate(dom);this.set(t);this.upd(elem);}},['dom'],lab);}
|
||||
shownFields++;}}
|
||||
if(askTime)
|
||||
{var tensDiv,onesDiv;this.dT=$('<div class="AnyTime-time" style="width:0;height:0" />');this.dB.append(this.dT);this.tMinW=this.dT.outerWidth(true);this.tMinH=this.dT.AnyTime_height(true);if(askHour)
|
||||
{this.dH=$('<div class="AnyTime-hrs"/>');this.dT.append(this.dH);lab=options.labelHour||'Hour';this.dH.append($('<h6 class="AnyTime-lbl AnyTime-lbl-hr">'+lab+'</h6>'));var amDiv=$('<ul class="AnyTime-hrs-am"/>');this.dH.append(amDiv);var pmDiv=$('<ul class="AnyTime-hrs-pm"/>');this.dH.append(pmDiv);for(i=0;i<12;i++)
|
||||
{if(this.twelveHr)
|
||||
{if(i==0)
|
||||
t='12am';else
|
||||
t=String(i)+'am';}
|
||||
else
|
||||
t=AnyTime.pad(i,2);this.btn(amDiv,t,this.newHour,['hr','hr'+String(i)],lab+' '+t);if(this.twelveHr)
|
||||
{if(i==0)
|
||||
t='12pm';else
|
||||
t=String(i)+'pm';}
|
||||
else
|
||||
t=i+12;this.btn(pmDiv,t,this.newHour,['hr','hr'+String(i+12)],lab+' '+t);}
|
||||
shownFields++;}
|
||||
if(askMinute)
|
||||
{this.dM=$('<div class="AnyTime-mins"/>');this.dT.append(this.dM);lab=options.labelMinute||'Minute';this.dM.append($('<h6 class="AnyTime-lbl AnyTime-lbl-min">'+lab+'</h6>'));tensDiv=$('<ul class="AnyTime-mins-tens"/>');this.dM.append(tensDiv);for(i=0;i<6;i++)
|
||||
this.btn(tensDiv,i,function(event)
|
||||
{var elem=$(event.target);if(elem.hasClass("AnyTime-out-btn"))
|
||||
return;var t=new Date(this.time.getTime());t.setMinutes((Number(elem.text())*10)+(this.time.getMinutes()%10));this.set(t);this.upd(elem);},['min-ten','min'+i+'0'],lab+' '+i+'0');for(;i<12;i++)
|
||||
this.btn(tensDiv,' ',$.noop,['min-ten','min'+i+'0'],lab+' '+i+'0').addClass('AnyTime-min-ten-btn-empty ui-state-default ui-state-disabled');onesDiv=$('<ul class="AnyTime-mins-ones"/>');this.dM.append(onesDiv);for(i=0;i<10;i++)
|
||||
this.btn(onesDiv,i,function(event)
|
||||
{var elem=$(event.target);if(elem.hasClass("AnyTime-out-btn"))
|
||||
return;var t=new Date(this.time.getTime());t.setMinutes((Math.floor(this.time.getMinutes()/10)*10)+Number(elem.text()));this.set(t);this.upd(elem);},['min-one','min'+i],lab+' '+i);for(;i<12;i++)
|
||||
this.btn(onesDiv,' ',$.noop,['min-one','min'+i+'0'],lab+' '+i).addClass('AnyTime-min-one-btn-empty ui-state-default ui-state-disabled');shownFields++;}
|
||||
if(askSec)
|
||||
{this.dS=$('<div class="AnyTime-secs"/>');this.dT.append(this.dS);lab=options.labelSecond||'Second';this.dS.append($('<h6 class="AnyTime-lbl AnyTime-lbl-sec">'+lab+'</h6>'));tensDiv=$('<ul class="AnyTime-secs-tens"/>');this.dS.append(tensDiv);for(i=0;i<6;i++)
|
||||
this.btn(tensDiv,i,function(event)
|
||||
{var elem=$(event.target);if(elem.hasClass("AnyTime-out-btn"))
|
||||
return;var t=new Date(this.time.getTime());t.setSeconds((Number(elem.text())*10)+(this.time.getSeconds()%10));this.set(t);this.upd(elem);},['sec-ten','sec'+i+'0'],lab+' '+i+'0');for(;i<12;i++)
|
||||
this.btn(tensDiv,' ',$.noop,['sec-ten','sec'+i+'0'],lab+' '+i+'0').addClass('AnyTime-sec-ten-btn-empty ui-state-default ui-state-disabled');onesDiv=$('<ul class="AnyTime-secs-ones"/>');this.dS.append(onesDiv);for(i=0;i<10;i++)
|
||||
this.btn(onesDiv,i,function(event)
|
||||
{var elem=$(event.target);if(elem.hasClass("AnyTime-out-btn"))
|
||||
return;var t=new Date(this.time.getTime());t.setSeconds((Math.floor(this.time.getSeconds()/10)*10)+Number(elem.text()));this.set(t);this.upd(elem);},['sec-one','sec'+i],lab+' '+i);for(;i<12;i++)
|
||||
this.btn(onesDiv,' ',$.noop,['sec-one','sec'+i+'0'],lab+' '+i).addClass('AnyTime-sec-one-btn-empty ui-state-default ui-state-disabled');shownFields++;}
|
||||
if(askOff)
|
||||
{this.dO=$('<div class="AnyTime-offs" />');this.dT.append(this.dO);this.oMinW=this.dO.outerWidth(true);this.oLab=$('<h6 class="AnyTime-lbl AnyTime-lbl-off">'+this.lO+'</h6>');this.dO.append(this.oLab);var offDiv=$('<ul class="AnyTime-off-list ui-helper-reset" />');this.dO.append(offDiv);this.oCur=this.btn(offDiv,'',this.newOffset,['off','off-cur'],lab);this.oCur.removeClass('ui-state-default');this.oCur.addClass('AnyTime-cur-btn ui-state-default ui-state-highlight');this.oCur.css({overflow:"hidden"});this.oSel=this.btn(offDiv,'±',this.newOffset,['off','off-select'],'+/- '+this.lO);this.oListMinW=this.oCur.outerWidth(true)+this.oSel.outerWidth(true);shownFields++;}}
|
||||
if(options.labelTitle)
|
||||
this.hTitle.append(options.labelTitle);else if(shownFields>1)
|
||||
this.hTitle.append('Select a '+(askDate?(askTime?'Date and Time':'Date'):'Time'));else
|
||||
this.hTitle.append('Select');try
|
||||
{this.time=this.conv.parse(this.inp.val());this.offMin=this.conv.getUtcParseOffsetCaptured();this.offSI=this.conv.getUtcParseOffsetSubIndex();}
|
||||
catch(e)
|
||||
{this.time=new Date();}
|
||||
this.lastAjax=this.time;if(this.pop)
|
||||
{this.div.hide();if(__iframe)
|
||||
__iframe.hide();this.div.css('position','absolute');}
|
||||
this.inp.blur(this.hBlur=function(e)
|
||||
{_this.inpBlur(e);});this.inp.click(this.hClick=function(e)
|
||||
{_this.showPkr(e);});this.inp.focus(this.hFocus=function(e)
|
||||
{if(_this.lostFocus)
|
||||
_this.showPkr(e);_this.lostFocus=false;});this.inp.keydown(this.hKeydown=function(e)
|
||||
{_this.key(e);});this.inp.keypress(this.hKeypress=function(e)
|
||||
{if($.browser.opera&&_this.denyTab)
|
||||
e.preventDefault();});this.div.click(function(e)
|
||||
{_this.lostFocus=false;_this.inp.focus();});$(window).resize(function(e)
|
||||
{_this.pos(e);});if(__initialized)
|
||||
this.onReady();},ajax:function()
|
||||
{if(this.ajaxOpts&&(this.time.getTime()!=this.lastAjax.getTime()))
|
||||
{try
|
||||
{var opts=jQuery.extend({},this.ajaxOpts);if(typeof opts.data=='object')
|
||||
opts.data[this.inp[0].name||this.inp[0].id]=this.inp.val();else
|
||||
{var opt=(this.inp[0].name||this.inp[0].id)+'='+encodeURI(this.inp.val());if(opts.data)
|
||||
opts.data+='&'+opt;else
|
||||
opts.data=opt;}
|
||||
$.ajax(opts);this.lastAjax=this.time;}
|
||||
catch(e)
|
||||
{}}
|
||||
return;},askOffset:function(event)
|
||||
{if(!this.oDiv)
|
||||
{this.makeCloak();this.oDiv=$('<div class="AnyTime-win AnyTime-off-selector ui-widget ui-widget-content ui-corner-all" style="position:absolute" />');this.div.append(this.oDiv);var title=$('<h5 class="AnyTime-hdr AnyTime-hdr-off-selector ui-widget-header ui-corner-top" />');this.oDiv.append(title);this.oBody=$('<div class="AnyTime-body AnyTime-body-off-selector" style="overflow:auto;white-space:nowrap" />');this.oDiv.append(this.oBody);var oBHS=this.oBody.AnyTime_height(true);var oBWS=this.oBody.AnyTime_width(true);var oTWS=title.AnyTime_width(true);var xDiv=$('<div class="AnyTime-x-btn ui-state-default">'+this.lX+'</div>');title.append(xDiv);xDiv.click(function(e){_this.dismissODiv(e);});title.append(this.lO);if(__msie6||__msie7)
|
||||
title.width(String(this.lO.length*0.8)+"em");var oBW=title.AnyTime_width(true)-oBWS;var cont=$('<ul class="AnyTime-off-off" />');var last=null;this.oBody.append(cont);var useSubIndex=(this.oConv.fmt.indexOf('%@')>=0);var btnW=0;if(AnyTime.utcLabel)
|
||||
for(var o=-720;o<720;o++)
|
||||
if(AnyTime.utcLabel[o])
|
||||
{this.oConv.setUtcFormatOffsetAlleged(o);for(var i=0;i<AnyTime.utcLabel[o].length;i++)
|
||||
{this.oConv.setUtcFormatOffsetSubIndex(i);last=this.btn(cont,this.oConv.format(this.time),this.newOPos,['off-off'],o);last[0].AnyTime_offMin=o;last[0].AnyTime_offSI=i;var w=last.width();if(w>btnW)
|
||||
btnW=w;if(!useSubIndex)
|
||||
break;}}
|
||||
if(last)
|
||||
last.addClass('AnyTime-off-off-last-btn');this.oBody.find('.AnyTime-off-off-btn').width(btnW);if(last)
|
||||
{var lW=last.AnyTime_width(true);if(lW>oBW)
|
||||
oBW=lW+1;}
|
||||
this.oBody.width(oBW);oBW=this.oBody.AnyTime_width(true);this.oDiv.width(oBW);if(__msie6||__msie7)
|
||||
title.width(oBW-oTWS);var oH=this.oDiv.AnyTime_height(true);var oHmax=this.div.height()*0.75;if(oH>oHmax)
|
||||
{oH=oHmax;this.oBody.height(oH-(title.AnyTime_height(true)+oBHS));this.oBody.width(this.oBody.width()+20);this.oDiv.width(this.oDiv.width()+20);if(__msie6||__msie7)
|
||||
title.width(this.oBody.AnyTime_width(true)-oTWS);}
|
||||
if(!__msie7)
|
||||
this.oDiv.height(String(oH)+'px');}
|
||||
else
|
||||
{this.cloak.show();this.oDiv.show();}
|
||||
this.pos(event);this.updODiv(null);var f=this.oDiv.find('.AnyTime-off-off-btn.AnyTime-cur-btn:first');if(!f.length)
|
||||
f=this.oDiv.find('.AnyTime-off-off-btn:first');this.setFocus(f);},askYear:function(event)
|
||||
{if(!this.yDiv)
|
||||
{this.makeCloak();this.yDiv=$('<div class="AnyTime-win AnyTime-yr-selector ui-widget ui-widget-content ui-corner-all" style="position:absolute" />');this.div.append(this.yDiv);var title=$('<h5 class="AnyTime-hdr AnyTime-hdr-yr-selector ui-widget-header ui-corner-top" />');this.yDiv.append(title);var xDiv=$('<div class="AnyTime-x-btn ui-state-default">'+this.lX+'</div>');title.append(xDiv);xDiv.click(function(e){_this.dismissYDiv(e);});title.append(this.lY);var yBody=$('<div class="AnyTime-body AnyTime-body-yr-selector" />');var yW=yBody.AnyTime_width(true);var yH=0;this.yDiv.append(yBody);cont=$('<ul class="AnyTime-yr-mil" />');yBody.append(cont);this.y0XXX=this.btn(cont,0,this.newYPos,['mil','mil0'],this.lY+' '+0+'000');for(i=1;i<10;i++)
|
||||
this.btn(cont,i,this.newYPos,['mil','mil'+i],this.lY+' '+i+'000');yW+=cont.AnyTime_width(true);if(yH<cont.AnyTime_height(true))
|
||||
yH=cont.AnyTime_height(true);cont=$('<ul class="AnyTime-yr-cent" />');yBody.append(cont);for(i=0;i<10;i++)
|
||||
this.btn(cont,i,this.newYPos,['cent','cent'+i],this.lY+' '+i+'00');yW+=cont.AnyTime_width(true);if(yH<cont.AnyTime_height(true))
|
||||
yH=cont.AnyTime_height(true);cont=$('<ul class="AnyTime-yr-dec" />');yBody.append(cont);for(i=0;i<10;i++)
|
||||
this.btn(cont,i,this.newYPos,['dec','dec'+i],this.lY+' '+i+'0');yW+=cont.AnyTime_width(true);if(yH<cont.AnyTime_height(true))
|
||||
yH=cont.AnyTime_height(true);cont=$('<ul class="AnyTime-yr-yr" />');yBody.append(cont);for(i=0;i<10;i++)
|
||||
this.btn(cont,i,this.newYPos,['yr','yr'+i],this.lY+' '+i);yW+=cont.AnyTime_width(true);if(yH<cont.AnyTime_height(true))
|
||||
yH=cont.AnyTime_height(true);if(this.askEra)
|
||||
{cont=$('<ul class="AnyTime-yr-era" />');yBody.append(cont);this.btn(cont,this.conv.eAbbr[0],function(event)
|
||||
{var t=new Date(this.time.getTime());var year=t.getFullYear();if(year>0)
|
||||
t.setFullYear(0-year);this.set(t);this.updYDiv($(event.target));},['era','bce'],this.conv.eAbbr[0]);this.btn(cont,this.conv.eAbbr[1],function(event)
|
||||
{var t=new Date(this.time.getTime());var year=t.getFullYear();if(year<0)
|
||||
t.setFullYear(0-year);this.set(t);this.updYDiv($(event.target));},['era','ce'],this.conv.eAbbr[1]);yW+=cont.AnyTime_width(true);if(yH<cont.AnyTime_height(true))
|
||||
yH=cont.AnyTime_height(true);}
|
||||
if($.browser.msie)
|
||||
yW+=1;else if($.browser.safari)
|
||||
yW+=2;yH+=yBody.AnyTime_height(true);yBody.css('width',String(yW)+'px');if(!__msie7)
|
||||
yBody.css('height',String(yH)+'px');if(__msie6||__msie7)
|
||||
title.width(yBody.outerWidth(true));yH+=title.AnyTime_height(true);if(title.AnyTime_width(true)>yW)
|
||||
yW=title.AnyTime_width(true);this.yDiv.css('width',String(yW)+'px');if(!__msie7)
|
||||
this.yDiv.css('height',String(yH)+'px');}
|
||||
else
|
||||
{this.cloak.show();this.yDiv.show();}
|
||||
this.pos(event);this.updYDiv(null);this.setFocus(this.yDiv.find('.AnyTime-yr-btn.AnyTime-cur-btn:first'));},inpBlur:function(event)
|
||||
{if(this.oDiv&&this.oDiv.is(":visible"))
|
||||
{_this.inp.focus();return;}
|
||||
this.lostFocus=true;setTimeout(function()
|
||||
{if(_this.lostFocus)
|
||||
{_this.div.find('.AnyTime-focus-btn').removeClass('AnyTime-focus-btn ui-state-focus');if(_this.pop)
|
||||
_this.dismiss(event);else
|
||||
_this.ajax();}},334);},btn:function(parent,text,handler,classes,title)
|
||||
{var tagName=((parent[0].nodeName.toLowerCase()=='ul')?'li':'td');var div$='<'+tagName+' class="AnyTime-btn';for(var i=0;i<classes.length;i++)
|
||||
div$+=' AnyTime-'+classes[i]+'-btn';var div=$(div$+' ui-state-default">'+text+'</'+tagName+'>');parent.append(div);div.AnyTime_title=title;div.click(function(e)
|
||||
{_this.tempFunc=handler;_this.tempFunc(e);});div.dblclick(function(e)
|
||||
{var elem=$(this);if(elem.is('.AnyTime-off-off-btn'))
|
||||
_this.dismissODiv(e);else if(elem.is('.AnyTime-mil-btn')||elem.is('.AnyTime-cent-btn')||elem.is('.AnyTime-dec-btn')||elem.is('.AnyTime-yr-btn')||elem.is('.AnyTime-era-btn'))
|
||||
_this.dismissYDiv(e);else if(_this.pop)
|
||||
_this.dismiss(e);});return div;},cleanup:function(event)
|
||||
{this.inp.unbind('blur',this.hBlur);this.inp.unbind('click',this.hClick);this.inp.unbind('focus',this.hFocus);this.inp.unbind('keydown',this.hKeydown);this.inp.unbind('keypress',this.hKeypress);this.div.remove();},dismiss:function(event)
|
||||
{this.ajax();this.div.hide();if(__iframe)
|
||||
__iframe.hide();if(this.yDiv)
|
||||
this.dismissYDiv();if(this.oDiv)
|
||||
this.dismissODiv();this.lostFocus=true;},dismissODiv:function(event)
|
||||
{this.oDiv.hide();this.cloak.hide();this.setFocus(this.oCur);},dismissYDiv:function(event)
|
||||
{this.yDiv.hide();this.cloak.hide();this.setFocus(this.yCur);},setFocus:function(btn)
|
||||
{if(!btn.hasClass('AnyTime-focus-btn'))
|
||||
{this.div.find('.AnyTime-focus-btn').removeClass('AnyTime-focus-btn ui-state-focus');this.fBtn=btn;btn.removeClass('ui-state-default ui-state-highlight');btn.addClass('AnyTime-focus-btn ui-state-default ui-state-highlight ui-state-focus');}
|
||||
if(btn.hasClass('AnyTime-off-off-btn'))
|
||||
{var oBT=this.oBody.offset().top;var btnT=btn.offset().top;var btnH=btn.AnyTime_height(true);if(btnT-btnH<oBT)
|
||||
this.oBody.scrollTop(btnT+this.oBody.scrollTop()-(this.oBody.innerHeight()+oBT)+(btnH*2));else if(btnT+btnH>oBT+this.oBody.innerHeight())
|
||||
this.oBody.scrollTop((btnT+this.oBody.scrollTop())-(oBT+btnH));}},key:function(event)
|
||||
{var mo;var t=null;var elem=this.div.find('.AnyTime-focus-btn');var key=event.keyCode||event.which;this.denyTab=true;if(key==16)
|
||||
{}
|
||||
else if((key==10)||(key==13)||(key==27))
|
||||
{if(this.oDiv&&this.oDiv.is(':visible'))
|
||||
this.dismissODiv(event);else if(this.yDiv&&this.yDiv.is(':visible'))
|
||||
this.dismissYDiv(event);else if(this.pop)
|
||||
this.dismiss(event);}
|
||||
else if((key==33)||((key==9)&&event.shiftKey))
|
||||
{if(this.fBtn.hasClass('AnyTime-off-off-btn'))
|
||||
{if(key==9)
|
||||
this.dismissODiv(event);}
|
||||
else if(this.fBtn.hasClass('AnyTime-mil-btn'))
|
||||
{if(key==9)
|
||||
this.dismissYDiv(event);}
|
||||
else if(this.fBtn.hasClass('AnyTime-cent-btn'))
|
||||
this.yDiv.find('.AnyTime-mil-btn.AnyTime-cur-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-dec-btn'))
|
||||
this.yDiv.find('.AnyTime-cent-btn.AnyTime-cur-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-yr-btn'))
|
||||
this.yDiv.find('.AnyTime-dec-btn.AnyTime-cur-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-era-btn'))
|
||||
this.yDiv.find('.AnyTime-yr-btn.AnyTime-cur-btn').triggerHandler('click');else if(this.fBtn.parents('.AnyTime-yrs').length)
|
||||
{if(key==9)
|
||||
{this.denyTab=false;return;}}
|
||||
else if(this.fBtn.hasClass('AnyTime-mon-btn'))
|
||||
{if(this.dY)
|
||||
this.yCur.triggerHandler('click');else if(key==9)
|
||||
{this.denyTab=false;return;}}
|
||||
else if(this.fBtn.hasClass('AnyTime-dom-btn'))
|
||||
{if((key==9)&&event.shiftKey)
|
||||
{this.denyTab=false;return;}
|
||||
else
|
||||
{t=new Date(this.time.getTime());if(event.shiftKey)
|
||||
t.setFullYear(t.getFullYear()-1);else
|
||||
{mo=t.getMonth()-1;if(t.getDate()>__daysIn[mo])
|
||||
t.setDate(__daysIn[mo])
|
||||
t.setMonth(mo);}
|
||||
this.keyDateChange(t);}}
|
||||
else if(this.fBtn.hasClass('AnyTime-hr-btn'))
|
||||
{t=this.dDoM||this.dMo;if(t)
|
||||
t.AnyTime_clickCurrent();else if(this.dY)
|
||||
this.yCur.triggerHandler('click');else if(key==9)
|
||||
{this.denyTab=false;return;}}
|
||||
else if(this.fBtn.hasClass('AnyTime-min-ten-btn'))
|
||||
{t=this.dH||this.dDoM||this.dMo;if(t)
|
||||
t.AnyTime_clickCurrent();else if(this.dY)
|
||||
this.yCur.triggerHandler('click');else if(key==9)
|
||||
{this.denyTab=false;return;}}
|
||||
else if(this.fBtn.hasClass('AnyTime-min-one-btn'))
|
||||
this.dM.AnyTime_clickCurrent();else if(this.fBtn.hasClass('AnyTime-sec-ten-btn'))
|
||||
{if(this.dM)
|
||||
t=this.dM.find('.AnyTime-mins-ones');else
|
||||
t=this.dH||this.dDoM||this.dMo;if(t)
|
||||
t.AnyTime_clickCurrent();else if(this.dY)
|
||||
this.yCur.triggerHandler('click');else if(key==9)
|
||||
{this.denyTab=false;return;}}
|
||||
else if(this.fBtn.hasClass('AnyTime-sec-one-btn'))
|
||||
this.dS.AnyTime_clickCurrent();else if(this.fBtn.hasClass('AnyTime-off-btn'))
|
||||
{if(this.dS)
|
||||
t=this.dS.find('.AnyTime-secs-ones');else if(this.dM)
|
||||
t=this.dM.find('.AnyTime-mins-ones');else
|
||||
t=this.dH||this.dDoM||this.dMo;if(t)
|
||||
t.AnyTime_clickCurrent();else if(this.dY)
|
||||
this.yCur.triggerHandler('click');else if(key==9)
|
||||
{this.denyTab=false;return;}}}
|
||||
else if((key==34)||(key==9))
|
||||
{if(this.fBtn.hasClass('AnyTime-mil-btn'))
|
||||
this.yDiv.find('.AnyTime-cent-btn.AnyTime-cur-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-cent-btn'))
|
||||
this.yDiv.find('.AnyTime-dec-btn.AnyTime-cur-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-dec-btn'))
|
||||
this.yDiv.find('.AnyTime-yr-btn.AnyTime-cur-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-yr-btn'))
|
||||
{t=this.yDiv.find('.AnyTime-era-btn.AnyTime-cur-btn');if(t.length)
|
||||
t.triggerHandler('click');else if(key==9)
|
||||
this.dismissYDiv(event);}
|
||||
else if(this.fBtn.hasClass('AnyTime-era-btn'))
|
||||
{if(key==9)
|
||||
this.dismissYDiv(event);}
|
||||
else if(this.fBtn.hasClass('AnyTime-off-off-btn'))
|
||||
{if(key==9)
|
||||
this.dismissODiv(event);}
|
||||
else if(this.fBtn.parents('.AnyTime-yrs').length)
|
||||
{t=this.dDoM||this.dMo||this.dH||this.dM||this.dS||this.dO;if(t)
|
||||
t.AnyTime_clickCurrent();else if(key==9)
|
||||
{this.denyTab=false;return;}}
|
||||
else if(this.fBtn.hasClass('AnyTime-mon-btn'))
|
||||
{t=this.dDoM||this.dH||this.dM||this.dS||this.dO;if(t)
|
||||
t.AnyTime_clickCurrent();else if(key==9)
|
||||
{this.denyTab=false;return;}}
|
||||
else if(this.fBtn.hasClass('AnyTime-dom-btn'))
|
||||
{if(key==9)
|
||||
{t=this.dH||this.dM||this.dS||this.dO;if(t)
|
||||
t.AnyTime_clickCurrent();else
|
||||
{this.denyTab=false;return;}}
|
||||
else
|
||||
{t=new Date(this.time.getTime());if(event.shiftKey)
|
||||
t.setFullYear(t.getFullYear()+1);else
|
||||
{mo=t.getMonth()+1;if(t.getDate()>__daysIn[mo])
|
||||
t.setDate(__daysIn[mo])
|
||||
t.setMonth(mo);}
|
||||
this.keyDateChange(t);}}
|
||||
else if(this.fBtn.hasClass('AnyTime-hr-btn'))
|
||||
{t=this.dM||this.dS||this.dO;if(t)
|
||||
t.AnyTime_clickCurrent();else if(key==9)
|
||||
{this.denyTab=false;return;}}
|
||||
else if(this.fBtn.hasClass('AnyTime-min-ten-btn'))
|
||||
this.dM.find('.AnyTime-mins-ones .AnyTime-cur-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-min-one-btn'))
|
||||
{t=this.dS||this.dO;if(t)
|
||||
t.AnyTime_clickCurrent();else if(key==9)
|
||||
{this.denyTab=false;return;}}
|
||||
else if(this.fBtn.hasClass('AnyTime-sec-ten-btn'))
|
||||
this.dS.find('.AnyTime-secs-ones .AnyTime-cur-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-sec-one-btn'))
|
||||
{if(this.dO)
|
||||
this.dO.AnyTime_clickCurrent();else if(key==9)
|
||||
{this.denyTab=false;return;}}
|
||||
else if(this.fBtn.hasClass('AnyTime-off-btn'))
|
||||
{if(key==9)
|
||||
{this.denyTab=false;return;}}}
|
||||
else if(key==35)
|
||||
{if(this.fBtn.hasClass('AnyTime-mil-btn')||this.fBtn.hasClass('AnyTime-cent-btn')||this.fBtn.hasClass('AnyTime-dec-btn')||this.fBtn.hasClass('AnyTime-yr-btn')||this.fBtn.hasClass('AnyTime-era-btn'))
|
||||
{t=this.yDiv.find('.AnyTime-ce-btn');if(!t.length)
|
||||
t=this.yDiv.find('.AnyTime-yr9-btn');t.triggerHandler('click');}
|
||||
else if(this.fBtn.hasClass('AnyTime-dom-btn'))
|
||||
{t=new Date(this.time.getTime());t.setDate(1);t.setMonth(t.getMonth()+1);t.setDate(t.getDate()-1);if(event.ctrlKey)
|
||||
t.setMonth(11);this.keyDateChange(t);}
|
||||
else if(this.dS)
|
||||
this.dS.find('.AnyTime-sec9-btn').triggerHandler('click');else if(this.dM)
|
||||
this.dM.find('.AnyTime-min9-btn').triggerHandler('click');else if(this.dH)
|
||||
this.dH.find('.AnyTime-hr23-btn').triggerHandler('click');else if(this.dDoM)
|
||||
this.dDoM.find('.AnyTime-dom-btn-filled:last').triggerHandler('click');else if(this.dMo)
|
||||
this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');else if(this.dY)
|
||||
this.yAhead.triggerHandler('click');}
|
||||
else if(key==36)
|
||||
{if(this.fBtn.hasClass('AnyTime-mil-btn')||this.fBtn.hasClass('AnyTime-cent-btn')||this.fBtn.hasClass('AnyTime-dec-btn')||this.fBtn.hasClass('AnyTime-yr-btn')||this.fBtn.hasClass('AnyTime-era-btn'))
|
||||
{this.yDiv.find('.AnyTime-mil0-btn').triggerHandler('click');}
|
||||
else if(this.fBtn.hasClass('AnyTime-dom-btn'))
|
||||
{t=new Date(this.time.getTime());t.setDate(1);if(event.ctrlKey)
|
||||
t.setMonth(0);this.keyDateChange(t);}
|
||||
else if(this.dY)
|
||||
this.yCur.triggerHandler('click');else if(this.dMo)
|
||||
this.dMo.find('.AnyTime-mon1-btn').triggerHandler('click');else if(this.dDoM)
|
||||
this.dDoM.find('.AnyTime-dom-btn-filled:first').triggerHandler('click');else if(this.dH)
|
||||
this.dH.find('.AnyTime-hr0-btn').triggerHandler('click');else if(this.dM)
|
||||
this.dM.find('.AnyTime-min00-btn').triggerHandler('click');else if(this.dS)
|
||||
this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');}
|
||||
else if(key==37)
|
||||
{if(this.fBtn.hasClass('AnyTime-dom-btn'))
|
||||
this.keyDateChange(new Date(this.time.getTime()-__oneDay));else
|
||||
this.keyBack();}
|
||||
else if(key==38)
|
||||
{if(this.fBtn.hasClass('AnyTime-dom-btn'))
|
||||
this.keyDateChange(new Date(this.time.getTime()-(7*__oneDay)));else
|
||||
this.keyBack();}
|
||||
else if(key==39)
|
||||
{if(this.fBtn.hasClass('AnyTime-dom-btn'))
|
||||
this.keyDateChange(new Date(this.time.getTime()+__oneDay));else
|
||||
this.keyAhead();}
|
||||
else if(key==40)
|
||||
{if(this.fBtn.hasClass('AnyTime-dom-btn'))
|
||||
this.keyDateChange(new Date(this.time.getTime()+(7*__oneDay)));else
|
||||
this.keyAhead();}
|
||||
else if(((key==86)||(key==118))&&event.ctrlKey)
|
||||
{this.inp.val("").change();var _this=this;setTimeout(function(){_this.showPkr(null);},100);return;}
|
||||
else
|
||||
return;event.preventDefault();},keyAhead:function()
|
||||
{if(this.fBtn.hasClass('AnyTime-mil9-btn'))
|
||||
this.yDiv.find('.AnyTime-cent0-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-cent9-btn'))
|
||||
this.yDiv.find('.AnyTime-dec0-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-dec9-btn'))
|
||||
this.yDiv.find('.AnyTime-yr0-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-yr9-btn'))
|
||||
this.yDiv.find('.AnyTime-bce-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-sec9-btn'))
|
||||
{}
|
||||
else if(this.fBtn.hasClass('AnyTime-sec50-btn'))
|
||||
this.dS.find('.AnyTime-sec0-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-min9-btn'))
|
||||
{if(this.dS)
|
||||
this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');}
|
||||
else if(this.fBtn.hasClass('AnyTime-min50-btn'))
|
||||
this.dM.find('.AnyTime-min0-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-hr23-btn'))
|
||||
{if(this.dM)
|
||||
this.dM.find('.AnyTime-min00-btn').triggerHandler('click');else if(this.dS)
|
||||
this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');}
|
||||
else if(this.fBtn.hasClass('AnyTime-hr11-btn'))
|
||||
this.dH.find('.AnyTime-hr12-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-mon12-btn'))
|
||||
{if(this.dDoM)
|
||||
this.dDoM.AnyTime_clickCurrent();else if(this.dH)
|
||||
this.dH.find('.AnyTime-hr0-btn').triggerHandler('click');else if(this.dM)
|
||||
this.dM.find('.AnyTime-min00-btn').triggerHandler('click');else if(this.dS)
|
||||
this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');}
|
||||
else if(this.fBtn.hasClass('AnyTime-yrs-ahead-btn'))
|
||||
{if(this.dMo)
|
||||
this.dMo.find('.AnyTime-mon1-btn').triggerHandler('click');else if(this.dH)
|
||||
this.dH.find('.AnyTime-hr0-btn').triggerHandler('click');else if(this.dM)
|
||||
this.dM.find('.AnyTime-min00-btn').triggerHandler('click');else if(this.dS)
|
||||
this.dS.find('.AnyTime-sec00-btn').triggerHandler('click');}
|
||||
else if(this.fBtn.hasClass('AnyTime-yr-cur-btn'))
|
||||
this.yNext.triggerHandler('click');else
|
||||
this.fBtn.next().triggerHandler('click');},keyBack:function()
|
||||
{if(this.fBtn.hasClass('AnyTime-cent0-btn'))
|
||||
this.yDiv.find('.AnyTime-mil9-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-dec0-btn'))
|
||||
this.yDiv.find('.AnyTime-cent9-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-yr0-btn'))
|
||||
this.yDiv.find('.AnyTime-dec9-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-bce-btn'))
|
||||
this.yDiv.find('.AnyTime-yr9-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-yr-cur-btn'))
|
||||
this.yPrior.triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-mon1-btn'))
|
||||
{if(this.dY)
|
||||
this.yCur.triggerHandler('click');}
|
||||
else if(this.fBtn.hasClass('AnyTime-hr0-btn'))
|
||||
{if(this.dDoM)
|
||||
this.dDoM.AnyTime_clickCurrent();else if(this.dMo)
|
||||
this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');else if(this.dY)
|
||||
this.yNext.triggerHandler('click');}
|
||||
else if(this.fBtn.hasClass('AnyTime-hr12-btn'))
|
||||
this.dH.find('.AnyTime-hr11-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-min00-btn'))
|
||||
{if(this.dH)
|
||||
this.dH.find('.AnyTime-hr23-btn').triggerHandler('click');else if(this.dDoM)
|
||||
this.dDoM.AnyTime_clickCurrent();else if(this.dMo)
|
||||
this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');else if(this.dY)
|
||||
this.yNext.triggerHandler('click');}
|
||||
else if(this.fBtn.hasClass('AnyTime-min0-btn'))
|
||||
this.dM.find('.AnyTime-min50-btn').triggerHandler('click');else if(this.fBtn.hasClass('AnyTime-sec00-btn'))
|
||||
{if(this.dM)
|
||||
this.dM.find('.AnyTime-min9-btn').triggerHandler('click');else if(this.dH)
|
||||
this.dH.find('.AnyTime-hr23-btn').triggerHandler('click');else if(this.dDoM)
|
||||
this.dDoM.AnyTime_clickCurrent();else if(this.dMo)
|
||||
this.dMo.find('.AnyTime-mon12-btn').triggerHandler('click');else if(this.dY)
|
||||
this.yNext.triggerHandler('click');}
|
||||
else if(this.fBtn.hasClass('AnyTime-sec0-btn'))
|
||||
this.dS.find('.AnyTime-sec50-btn').triggerHandler('click');else
|
||||
this.fBtn.prev().triggerHandler('click');},keyDateChange:function(newDate)
|
||||
{if(this.fBtn.hasClass('AnyTime-dom-btn'))
|
||||
{this.set(newDate);this.upd(null);this.setFocus(this.dDoM.find('.AnyTime-cur-btn'));}},makeCloak:function()
|
||||
{if(!this.cloak)
|
||||
{this.cloak=$('<div class="AnyTime-cloak" style="position:absolute" />');this.div.append(this.cloak);this.cloak.click(function(e)
|
||||
{if(_this.oDiv&&_this.oDiv.is(":visible"))
|
||||
_this.dismissODiv(e);else
|
||||
_this.dismissYDiv(e);});}
|
||||
else
|
||||
this.cloak.show();},newHour:function(event)
|
||||
{var h;var t;var elem=$(event.target);if(elem.hasClass("AnyTime-out-btn"))
|
||||
return;if(!this.twelveHr)
|
||||
h=Number(elem.text());else
|
||||
{var str=elem.text();t=str.indexOf('a');if(t<0)
|
||||
{t=Number(str.substr(0,str.indexOf('p')));h=((t==12)?12:(t+12));}
|
||||
else
|
||||
{t=Number(str.substr(0,t));h=((t==12)?0:t);}}
|
||||
t=new Date(this.time.getTime());t.setHours(h);this.set(t);this.upd(elem);},newOffset:function(event)
|
||||
{if(event.target==this.oSel[0])
|
||||
this.askOffset(event);else
|
||||
{this.upd(this.oCur);}},newOPos:function(event)
|
||||
{var elem=$(event.target);this.offMin=elem[0].AnyTime_offMin;this.offSI=elem[0].AnyTime_offSI;var t=new Date(this.time.getTime());this.set(t);this.updODiv(elem);},newYear:function(event)
|
||||
{var elem=$(event.target);if(elem.hasClass("AnyTime-out-btn"))
|
||||
return;var txt=elem.text();if((txt=='<')||(txt=='<'))
|
||||
this.askYear(event);else if((txt=='>')||(txt=='>'))
|
||||
this.askYear(event);else
|
||||
{var t=new Date(this.time.getTime());t.setFullYear(Number(txt));this.set(t);this.upd(this.yCur);}},newYPos:function(event)
|
||||
{var elem=$(event.target);if(elem.hasClass("AnyTime-out-btn"))
|
||||
return;var era=1;var year=this.time.getFullYear();if(year<0)
|
||||
{era=(-1);year=0-year;}
|
||||
year=AnyTime.pad(year,4);if(elem.hasClass('AnyTime-mil-btn'))
|
||||
year=elem.html()+year.substring(1,4);else if(elem.hasClass('AnyTime-cent-btn'))
|
||||
year=year.substring(0,1)+elem.html()+year.substring(2,4);else if(elem.hasClass('AnyTime-dec-btn'))
|
||||
year=year.substring(0,2)+elem.html()+year.substring(3,4);else
|
||||
year=year.substring(0,3)+elem.html();if(year=='0000')
|
||||
year=1;var t=new Date(this.time.getTime());t.setFullYear(era*year);this.set(t);this.updYDiv(elem);},onReady:function()
|
||||
{this.lostFocus=true;if(!this.pop)
|
||||
this.upd(null);else
|
||||
{if(this.div.parent()!=document.body)
|
||||
this.div.appendTo(document.body);}},pos:function(event)
|
||||
{if(this.pop)
|
||||
{var off=this.inp.offset();var bodyWidth=$(document.body).outerWidth(true);var pickerWidth=this.div.outerWidth(true);var left=off.left;if(left+pickerWidth>bodyWidth-20)
|
||||
left=bodyWidth-(pickerWidth+20);var top=off.top-this.div.outerHeight(true);if(top<0)
|
||||
top=off.top+this.inp.outerHeight(true);this.div.css({top:String(top)+'px',left:String(left<0?0:left)+'px'});}
|
||||
var wOff=this.div.offset();if(this.oDiv&&this.oDiv.is(":visible"))
|
||||
{var oOff=this.oLab.offset();if(this.div.css('position')=='absolute')
|
||||
{oOff.top-=wOff.top;oOff.left=oOff.left-wOff.left;wOff={top:0,left:0};}
|
||||
var oW=this.oDiv.AnyTime_width(true);var wW=this.div.AnyTime_width(true);if(oOff.left+oW>wOff.left+wW)
|
||||
{oOff.left=(wOff.left+wW)-oW;if(oOff.left<2)
|
||||
oOff.left=2;}
|
||||
var oH=this.oDiv.AnyTime_height(true);var wH=this.div.AnyTime_height(true);oOff.top+=this.oLab.AnyTime_height(true);if(oOff.top+oH>wOff.top+wH)
|
||||
oOff.top=oOff.top-oH;if(oOff.top<wOff.top)
|
||||
oOff.top=wOff.top;this.oDiv.css({top:oOff.top+'px',left:oOff.left+'px'});}
|
||||
else if(this.yDiv&&this.yDiv.is(":visible"))
|
||||
{var yOff=this.yLab.offset();if(this.div.css('position')=='absolute')
|
||||
{yOff.top-=wOff.top;yOff.left=yOff.left-wOff.left;wOff={top:0,left:0};}
|
||||
yOff.left+=((this.yLab.outerWidth(true)-this.yDiv.outerWidth(true))/2);this.yDiv.css({top:yOff.top+'px',left:yOff.left+'px'});}
|
||||
if(this.cloak)
|
||||
this.cloak.css({top:wOff.top+'px',left:wOff.left+'px',height:String(this.div.outerHeight(true)-2)+'px',width:String(this.div.outerWidth(!$.browser.safari)-2)+'px'});},set:function(newTime)
|
||||
{var t=newTime.getTime();if(this.earliest&&(t<this.earliest))
|
||||
this.time=new Date(this.earliest);else if(this.latest&&(t>this.latest))
|
||||
this.time=new Date(this.latest);else
|
||||
this.time=newTime;},showPkr:function(event)
|
||||
{try
|
||||
{this.time=this.conv.parse(this.inp.val());this.offMin=this.conv.getUtcParseOffsetCaptured();this.offSI=this.conv.getUtcParseOffsetSubIndex();}
|
||||
catch(e)
|
||||
{this.time=new Date();}
|
||||
this.set(this.time);this.upd(null);fBtn=null;var cb='.AnyTime-cur-btn:first';if(this.dDoM)
|
||||
fBtn=this.dDoM.find(cb);else if(this.yCur)
|
||||
fBtn=this.yCur;else if(this.dMo)
|
||||
fBtn=this.dMo.find(cb);else if(this.dH)
|
||||
fBtn=this.dH.find(cb);else if(this.dM)
|
||||
fBtn=this.dM.find(cb);else if(this.dS)
|
||||
fBtn=this.dS.find(cb);this.setFocus(fBtn);this.pos(event);if(this.pop&&__iframe)
|
||||
setTimeout(function()
|
||||
{var pos=_this.div.offset();__iframe.css({height:String(_this.div.outerHeight(true))+'px',left:String(pos.left)+'px',position:'absolute',top:String(pos.top)+'px',width:String(_this.div.outerWidth(true))+'px'});__iframe.show();},300);},upd:function(fBtn)
|
||||
{var cmpLo=new Date(this.time.getTime());cmpLo.setMonth(0,1);cmpLo.setHours(0,0,0,0);var cmpHi=new Date(this.time.getTime());cmpHi.setMonth(11,31);cmpHi.setHours(23,59,59,999);var current=this.time.getFullYear();if(this.earliest&&this.yPast)
|
||||
{cmpHi.setYear(current-2);if(cmpHi.getTime()<this.earliest)
|
||||
this.yPast.addClass('AnyTime-out-btn ui-state-disabled');else
|
||||
this.yPast.removeClass('AnyTime-out-btn ui-state-disabled');}
|
||||
if(this.yPrior)
|
||||
{this.yPrior.text(AnyTime.pad((current==1)?(-1):(current-1),4));if(this.earliest)
|
||||
{cmpHi.setYear(current-1);if(cmpHi.getTime()<this.earliest)
|
||||
this.yPrior.addClass('AnyTime-out-btn ui-state-disabled');else
|
||||
this.yPrior.removeClass('AnyTime-out-btn ui-state-disabled');}}
|
||||
if(this.yCur)
|
||||
this.yCur.text(AnyTime.pad(current,4));if(this.yNext)
|
||||
{this.yNext.text(AnyTime.pad((current==-1)?1:(current+1),4));if(this.latest)
|
||||
{cmpLo.setYear(current+1);if(cmpLo.getTime()>this.latest)
|
||||
this.yNext.addClass('AnyTime-out-btn ui-state-disabled');else
|
||||
this.yNext.removeClass('AnyTime-out-btn ui-state-disabled');}}
|
||||
if(this.latest&&this.yAhead)
|
||||
{cmpLo.setYear(current+2);if(cmpLo.getTime()>this.latest)
|
||||
this.yAhead.addClass('AnyTime-out-btn ui-state-disabled');else
|
||||
this.yAhead.removeClass('AnyTime-out-btn ui-state-disabled');}
|
||||
cmpLo.setFullYear(this.time.getFullYear());cmpHi.setFullYear(this.time.getFullYear());var i=0;current=this.time.getMonth();$('#'+this.id+' .AnyTime-mon-btn').each(function()
|
||||
{cmpLo.setMonth(i);cmpHi.setDate(1);cmpHi.setMonth(i+1);cmpHi.setDate(0);$(this).AnyTime_current(i==current,((!_this.earliest)||(cmpHi.getTime()>=_this.earliest))&&((!_this.latest)||(cmpLo.getTime()<=_this.latest)));i++;});cmpLo.setFullYear(this.time.getFullYear());cmpHi.setFullYear(this.time.getFullYear());cmpLo.setMonth(this.time.getMonth());cmpHi.setMonth(this.time.getMonth(),1);current=this.time.getDate();var currentMonth=this.time.getMonth();var dow1=cmpLo.getDay();if(this.fDOW>dow1)
|
||||
dow1+=7;var wom=0,dow=0;$('#'+this.id+' .AnyTime-wk').each(function()
|
||||
{dow=_this.fDOW;$(this).children().each(function()
|
||||
{if(dow-_this.fDOW<7)
|
||||
{var td=$(this);if(((wom==0)&&(dow<dow1))||(cmpLo.getMonth()!=currentMonth))
|
||||
{td.html(' ');td.removeClass('AnyTime-dom-btn-filled AnyTime-cur-btn ui-state-default ui-state-highlight');td.addClass('AnyTime-dom-btn-empty');if(wom)
|
||||
{if((cmpLo.getDate()==1)&&(dow!=0))
|
||||
td.addClass('AnyTime-dom-btn-empty-after-filled');else
|
||||
td.removeClass('AnyTime-dom-btn-empty-after-filled');if(cmpLo.getDate()<=7)
|
||||
td.addClass('AnyTime-dom-btn-empty-below-filled');else
|
||||
td.removeClass('AnyTime-dom-btn-empty-below-filled');cmpLo.setDate(cmpLo.getDate()+1);cmpHi.setDate(cmpHi.getDate()+1);}
|
||||
else
|
||||
{td.addClass('AnyTime-dom-btn-empty-above-filled');if(dow==dow1-1)
|
||||
td.addClass('AnyTime-dom-btn-empty-before-filled');else
|
||||
td.removeClass('AnyTime-dom-btn-empty-before-filled');}
|
||||
td.addClass('ui-state-default ui-state-disabled');}
|
||||
else
|
||||
{i=cmpLo.getDate();td.text(i);td.removeClass('AnyTime-dom-btn-empty AnyTime-dom-btn-empty-above-filled AnyTime-dom-btn-empty-before-filled '+'AnyTime-dom-btn-empty-after-filled AnyTime-dom-btn-empty-below-filled '+'ui-state-default ui-state-disabled');td.addClass('AnyTime-dom-btn-filled ui-state-default');td.AnyTime_current(i==current,((!_this.earliest)||(cmpHi.getTime()>=_this.earliest))&&((!_this.latest)||(cmpLo.getTime()<=_this.latest)));cmpLo.setDate(i+1);cmpHi.setDate(i+1);}}
|
||||
dow++;});wom++;});cmpLo.setFullYear(this.time.getFullYear());cmpHi.setFullYear(this.time.getFullYear());cmpLo.setMonth(this.time.getMonth(),this.time.getDate());cmpHi.setMonth(this.time.getMonth(),this.time.getDate());var not12=!this.twelveHr;var hr=this.time.getHours();$('#'+this.id+' .AnyTime-hr-btn').each(function()
|
||||
{var html=this.innerHTML;var i;if(not12)
|
||||
i=Number(html);else
|
||||
{i=Number(html.substring(0,html.length-2));if(html.charAt(html.length-2)=='a')
|
||||
{if(i==12)
|
||||
i=0;}
|
||||
else if(i<12)
|
||||
i+=12;}
|
||||
cmpLo.setHours(i);cmpHi.setHours(i);$(this).AnyTime_current(hr==i,((!_this.earliest)||(cmpHi.getTime()>=_this.earliest))&&((!_this.latest)||(cmpLo.getTime()<=_this.latest)));if(i<23)
|
||||
cmpLo.setHours(cmpLo.getHours()+1);});cmpLo.setHours(this.time.getHours());cmpHi.setHours(this.time.getHours());var units=this.time.getMinutes();var tens=String(Math.floor(units/10));var ones=String(units%10);$('#'+this.id+' .AnyTime-min-ten-btn:not(.AnyTime-min-ten-btn-empty)').each(function()
|
||||
{$(this).AnyTime_current(this.innerHTML==tens,((!_this.earliest)||(cmpHi.getTime()>=_this.earliest))&&((!_this.latest)||(cmpLo.getTime()<=_this.latest)));if(cmpLo.getMinutes()<50)
|
||||
{cmpLo.setMinutes(cmpLo.getMinutes()+10);cmpHi.setMinutes(cmpHi.getMinutes()+10);}});cmpLo.setMinutes(Math.floor(this.time.getMinutes()/10)*10);cmpHi.setMinutes(Math.floor(this.time.getMinutes()/10)*10);$('#'+this.id+' .AnyTime-min-one-btn:not(.AnyTime-min-one-btn-empty)').each(function()
|
||||
{$(this).AnyTime_current(this.innerHTML==ones,((!_this.earliest)||(cmpHi.getTime()>=_this.earliest))&&((!_this.latest)||(cmpLo.getTime()<=_this.latest)));cmpLo.setMinutes(cmpLo.getMinutes()+1);cmpHi.setMinutes(cmpHi.getMinutes()+1);});cmpLo.setMinutes(this.time.getMinutes());cmpHi.setMinutes(this.time.getMinutes());units=this.time.getSeconds();tens=String(Math.floor(units/10));ones=String(units%10);$('#'+this.id+' .AnyTime-sec-ten-btn:not(.AnyTime-sec-ten-btn-empty)').each(function()
|
||||
{$(this).AnyTime_current(this.innerHTML==tens,((!_this.earliest)||(cmpHi.getTime()>=_this.earliest))&&((!_this.latest)||(cmpLo.getTime()<=_this.latest)));if(cmpLo.getSeconds()<50)
|
||||
{cmpLo.setSeconds(cmpLo.getSeconds()+10);cmpHi.setSeconds(cmpHi.getSeconds()+10);}});cmpLo.setSeconds(Math.floor(this.time.getSeconds()/10)*10);cmpHi.setSeconds(Math.floor(this.time.getSeconds()/10)*10);$('#'+this.id+' .AnyTime-sec-one-btn:not(.AnyTime-sec-one-btn-empty)').each(function()
|
||||
{$(this).AnyTime_current(this.innerHTML==ones,((!_this.earliest)||(cmpHi.getTime()>=_this.earliest))&&((!_this.latest)||(cmpLo.getTime()<=_this.latest)));cmpLo.setSeconds(cmpLo.getSeconds()+1);cmpHi.setSeconds(cmpHi.getSeconds()+1);});if(this.oConv)
|
||||
{this.oConv.setUtcFormatOffsetAlleged(this.offMin);this.oConv.setUtcFormatOffsetSubIndex(this.offSI);var tzs=this.oConv.format(this.time);this.oCur.html(tzs);}
|
||||
if(fBtn)
|
||||
this.setFocus(fBtn);this.conv.setUtcFormatOffsetAlleged(this.offMin);this.conv.setUtcFormatOffsetSubIndex(this.offSI);this.inp.val(this.conv.format(this.time)).change();this.div.show();var d,totH=0,totW=0,dYW=0,dMoW=0,dDoMW=0;if(this.dY)
|
||||
{totW=dYW=this.dY.outerWidth(true);totH=this.yLab.AnyTime_height(true)+this.dY.AnyTime_height(true);}
|
||||
if(this.dMo)
|
||||
{dMoW=this.dMo.outerWidth(true);if(dMoW>totW)
|
||||
totW=dMoW;totH+=this.hMo.AnyTime_height(true)+this.dMo.AnyTime_height(true);}
|
||||
if(this.dDoM)
|
||||
{dDoMW=this.dDoM.outerWidth(true);if(dDoMW>totW)
|
||||
totW=dDoMW;if(__msie6||__msie7)
|
||||
{if(dMoW>dDoMW)
|
||||
this.dDoM.css('width',String(dMoW)+'px');else if(dYW>dDoMW)
|
||||
this.dDoM.css('width',String(dYW)+'px');}
|
||||
totH+=this.hDoM.AnyTime_height(true)+this.dDoM.AnyTime_height(true);}
|
||||
if(this.dD)
|
||||
{this.dD.css({width:String(totW)+'px',height:String(totH)+'px'});totW+=this.dMinW;totH+=this.dMinH;}
|
||||
var w=0,h=0,timeH=0,timeW=0;if(this.dH)
|
||||
{w=this.dH.outerWidth(true);timeW+=w+1;h=this.dH.AnyTime_height(true);if(h>timeH)
|
||||
timeH=h;}
|
||||
if(this.dM)
|
||||
{w=this.dM.outerWidth(true);timeW+=w+1;h=this.dM.AnyTime_height(true);if(h>timeH)
|
||||
timeH=h;}
|
||||
if(this.dS)
|
||||
{w=this.dS.outerWidth(true);timeW+=w+1;h=this.dS.AnyTime_height(true);if(h>timeH)
|
||||
timeH=h;}
|
||||
if(this.dO)
|
||||
{w=this.oMinW;if(timeW<w+1)
|
||||
timeW=w+1;timeH+=this.dO.AnyTime_height(true);}
|
||||
if(this.dT)
|
||||
{this.dT.css({width:String(timeW)+'px',height:String(timeH)+'px'});timeW+=this.tMinW+1;timeH+=this.tMinH;totW+=timeW;if(timeH>totH)
|
||||
totH=timeH;if(this.dO)
|
||||
{var dOW=this.dT.width()-(this.oMinW+1);this.dO.css({width:String(dOW)+"px"});this.oCur.css({width:String(dOW-(this.oListMinW+4))+"px"});}}
|
||||
this.dB.css({height:String(totH)+'px',width:String(totW)+'px'});totH+=this.bMinH;totW+=this.bMinW;totH+=this.hTitle.AnyTime_height(true)+this.wMinH;totW+=this.wMinW;if(this.hTitle.outerWidth(true)>totW)
|
||||
totW=this.hTitle.outerWidth(true);this.div.css({height:String(totH)+'px',width:String(totW)+'px'});if(!this.pop)
|
||||
this.ajax();},updODiv:function(fBtn)
|
||||
{var cur,matched=false,def=null;this.oDiv.find('.AnyTime-off-off-btn').each(function()
|
||||
{if(this.AnyTime_offMin==_this.offMin)
|
||||
{if(this.AnyTime_offSI==_this.offSI)
|
||||
$(this).AnyTime_current(matched=true,true);else
|
||||
{$(this).AnyTime_current(false,true);if(def==null)
|
||||
def=$(this);}}
|
||||
else
|
||||
$(this).AnyTime_current(false,true);});if((!matched)&&(def!=null))
|
||||
def.AnyTime_current(true,true);this.conv.setUtcFormatOffsetAlleged(this.offMin);this.conv.setUtcFormatOffsetSubIndex(this.offSI);this.inp.val(this.conv.format(this.time)).change();this.upd(fBtn);},updYDiv:function(fBtn)
|
||||
{var i,legal;var era=1;var yearValue=this.time.getFullYear();if(yearValue<0)
|
||||
{era=(-1);yearValue=0-yearValue;}
|
||||
yearValue=AnyTime.pad(yearValue,4);var eY=_this.earliest&&new Date(_this.earliest).getFullYear();var lY=_this.latest&&new Date(_this.latest).getFullYear();i=0;this.yDiv.find('.AnyTime-mil-btn').each(function()
|
||||
{legal=(((!_this.earliest)||(era*(i+(era<0?0:999))>=eY))&&((!_this.latest)||(era*(i+(era>0?0:999))<=lY)));$(this).AnyTime_current(this.innerHTML==yearValue.substring(0,1),legal);i+=1000;});i=(Math.floor(yearValue/1000)*1000);this.yDiv.find('.AnyTime-cent-btn').each(function()
|
||||
{legal=(((!_this.earliest)||(era*(i+(era<0?0:99))>=eY))&&((!_this.latest)||(era*(i+(era>0?0:99))<=lY)));$(this).AnyTime_current(this.innerHTML==yearValue.substring(1,2),legal);i+=100;});i=(Math.floor(yearValue/100)*100);this.yDiv.find('.AnyTime-dec-btn').each(function()
|
||||
{legal=(((!_this.earliest)||(era*(i+(era<0?0:9))>=eY))&&((!_this.latest)||(era*(i+(era>0?0:9))<=lY)));$(this).AnyTime_current(this.innerHTML==yearValue.substring(2,3),legal);i+=10;});i=(Math.floor(yearValue/10)*10);this.yDiv.find('.AnyTime-yr-btn').each(function()
|
||||
{legal=(((!_this.earliest)||(era*i>=eY))&&((!_this.latest)||(era*i<=lY)));$(this).AnyTime_current(this.innerHTML==yearValue.substring(3),legal);i+=1;});this.yDiv.find('.AnyTime-bce-btn').each(function()
|
||||
{$(this).AnyTime_current(era<0,(!_this.earliest)||(_this.earliest<0));});this.yDiv.find('.AnyTime-ce-btn').each(function()
|
||||
{$(this).AnyTime_current(era>0,(!_this.latest)||(_this.latest>0));});this.conv.setUtcFormatOffsetAlleged(this.offMin);this.conv.setUtcFormatOffsetSubIndex(this.offSI);this.inp.val(this.conv.format(this.time)).change();this.upd(fBtn);}};__pickers[id].initialize(id);}})(jQuery);
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* autoscroll.js widget with jquery event(s)
|
||||
* Copyright 2011 Michael Whitford <michael@alwandassociates.com>
|
||||
* License: BSD
|
||||
*/
|
||||
|
||||
// toggle - id of the toggle element for the click event
|
||||
// textarea - id of the textarea to autoscroll
|
||||
var toggleAutoScroll = function (toggle, textarea) {
|
||||
var autoScrollDebug = false;
|
||||
var state = toggle + 'interval';
|
||||
var scrollOn = function() {
|
||||
if (autoScrollDebug) { console.log('on:', toggle, textarea); }
|
||||
var onAnimation = function(name, target) {
|
||||
jQuery('#' + name).unbind().click(function() {
|
||||
toggleAutoScroll(name, target);
|
||||
}).fadeTo(350, 1);
|
||||
};
|
||||
// uses obj attached to window for state
|
||||
window[state] = {};
|
||||
window[state].name = toggle;
|
||||
window[state].target = textarea;
|
||||
// get a handle to the textarea el
|
||||
var area = jQuery('#' + textarea);
|
||||
// set the interval
|
||||
window[state].interval = setInterval(function() {
|
||||
// ui hack? needs more testing
|
||||
area[0].scrollTop = area[0].scrollHeight;
|
||||
}, 2500); // 2.5 seconds
|
||||
onAnimation(toggle, textarea);
|
||||
};
|
||||
var scrollOff = function() {
|
||||
if (autoScrollDebug) { console.log('off:', toggle, textarea); }
|
||||
var offAnimation = function(name, target) {
|
||||
jQuery('#' + name).unbind().click(function() {
|
||||
toggleAutoScroll(name, target);
|
||||
}).fadeTo(350, 0.55);
|
||||
};
|
||||
offAnimation(toggle, textarea);
|
||||
clearInterval(window[state].interval);
|
||||
window[state] = undefined;
|
||||
};
|
||||
if (arguments.length == 2) {
|
||||
if (typeof window[state] === 'undefined') {
|
||||
scrollOn();
|
||||
} else {
|
||||
scrollOff();
|
||||
}
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
// jquery onready
|
||||
|
||||
jQuery(document).ready(function () {
|
||||
// turn it on by default
|
||||
toggleAutoScroll('autoscroll', 'output');
|
||||
});
|
||||
|
||||
// todo: some key - toggle off
|
||||
// todo: drag scrollbar up - toggle off
|
||||
// todo: drag scrollbar to bottom - toggle off
|
||||
@@ -0,0 +1,244 @@
|
||||
/*
|
||||
(c) Copyrights 2007 - 2008
|
||||
|
||||
Original idea by by Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
|
||||
|
||||
jQuery Plugin by Tzury Bar Yochay
|
||||
tzury.by@gmail.com
|
||||
http://evalinux.wordpress.com
|
||||
http://facebook.com/profile.php?id=513676303
|
||||
|
||||
Project's sites:
|
||||
http://code.google.com/p/js-hotkeys/
|
||||
http://github.com/tzuryby/hotkeys/tree/master
|
||||
|
||||
License: same as jQuery license.
|
||||
|
||||
USAGE:
|
||||
// simple usage
|
||||
$(document).bind('keydown', 'Ctrl+c', function(){ alert('copy anyone?');});
|
||||
|
||||
// special options such as disableInIput
|
||||
$(document).bind('keydown', {combi:'Ctrl+x', disableInInput: true} , function() {});
|
||||
|
||||
Note:
|
||||
This plugin wraps the following jQuery methods: $.fn.find, $.fn.bind and $.fn.unbind
|
||||
|
||||
*/
|
||||
|
||||
|
||||
(function (jQuery){
|
||||
// keep reference to the original $.fn.bind and $.fn.unbind
|
||||
jQuery.fn.__bind__ = jQuery.fn.bind;
|
||||
jQuery.fn.__unbind__ = jQuery.fn.unbind;
|
||||
jQuery.fn.__find__ = jQuery.fn.find;
|
||||
|
||||
var hotkeys = {
|
||||
version: '0.7.8',
|
||||
override: /keydown|keypress|keyup/g,
|
||||
triggersMap: {},
|
||||
|
||||
specialKeys: { 27: 'esc', 9: 'tab', 32:'space', 13: 'return', 8:'backspace', 145: 'scroll',
|
||||
20: 'capslock', 144: 'numlock', 19:'pause', 45:'insert', 36:'home', 46:'del',
|
||||
35:'end', 33: 'pageup', 34:'pagedown', 37:'left', 38:'up', 39:'right',40:'down',
|
||||
112:'f1',113:'f2', 114:'f3', 115:'f4', 116:'f5', 117:'f6', 118:'f7', 119:'f8',
|
||||
120:'f9', 121:'f10', 122:'f11', 123:'f12' },
|
||||
|
||||
shiftNums: { "`":"~", "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&",
|
||||
"8":"*", "9":"(", "0":")", "-":"_", "=":"+", ";":":", "'":"\"", ",":"<",
|
||||
".":">", "/":"?", "\\":"|" },
|
||||
|
||||
newTrigger: function (type, combi, callback) {
|
||||
// i.e. {'keyup': {'ctrl': {cb: callback, disableInInput: false}}}
|
||||
var result = {};
|
||||
result[type] = {};
|
||||
result[type][combi] = {cb: callback, disableInInput: false};
|
||||
return result;
|
||||
}
|
||||
};
|
||||
// add firefox num pad char codes
|
||||
if (jQuery.browser.mozilla){
|
||||
hotkeys.specialKeys = jQuery.extend(hotkeys.specialKeys, { 96: '0', 97:'1', 98: '2', 99:
|
||||
'3', 100: '4', 101: '5', 102: '6', 103: '7', 104: '8', 105: '9' });
|
||||
}
|
||||
|
||||
// a wrapper around of $.fn.find
|
||||
// see more at: http://groups.google.com/group/jquery-en/browse_thread/thread/18f9825e8d22f18d
|
||||
jQuery.fn.find = function( selector ) {
|
||||
this.query=selector;
|
||||
return jQuery.fn.__find__.apply(this, arguments);
|
||||
};
|
||||
|
||||
jQuery.fn.unbind = function (type, combi, fn){
|
||||
if (jQuery.isFunction(combi)){
|
||||
fn = combi;
|
||||
combi = null;
|
||||
}
|
||||
if (combi && typeof combi === 'string'){
|
||||
var selectorId = ((this.prevObject && this.prevObject.query) || (this[0].id && this[0].id) || this[0]).toString();
|
||||
var hkTypes = type.split(' ');
|
||||
for (var x=0; x<hkTypes.length; x++){
|
||||
delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi];
|
||||
}
|
||||
}
|
||||
// call jQuery original unbind
|
||||
return this.__unbind__(type, fn);
|
||||
};
|
||||
|
||||
jQuery.fn.bind = function(type, data, fn){
|
||||
// grab keyup,keydown,keypress
|
||||
var handle = type.match(hotkeys.override);
|
||||
|
||||
if (jQuery.isFunction(data) || !handle){
|
||||
// call jQuery.bind only
|
||||
return this.__bind__(type, data, fn);
|
||||
}
|
||||
else{
|
||||
// split the job
|
||||
var result = null,
|
||||
// pass the rest to the original $.fn.bind
|
||||
pass2jq = jQuery.trim(type.replace(hotkeys.override, ''));
|
||||
|
||||
// see if there are other types, pass them to the original $.fn.bind
|
||||
if (pass2jq){
|
||||
// call original jQuery.bind()
|
||||
result = this.__bind__(pass2jq, data, fn);
|
||||
}
|
||||
|
||||
if (typeof data === "string"){
|
||||
data = {'combi': data};
|
||||
}
|
||||
if(data.combi){
|
||||
for (var x=0; x < handle.length; x++){
|
||||
var eventType = handle[x];
|
||||
var combi = data.combi.toLowerCase(),
|
||||
trigger = hotkeys.newTrigger(eventType, combi, fn),
|
||||
selectorId = ((this.prevObject && this.prevObject.query) || (this[0].id && this[0].id) || this[0]).toString();
|
||||
|
||||
//trigger[eventType][combi].propagate = data.propagate;
|
||||
trigger[eventType][combi].disableInInput = data.disableInInput;
|
||||
|
||||
// first time selector is bounded
|
||||
if (!hotkeys.triggersMap[selectorId]) {
|
||||
hotkeys.triggersMap[selectorId] = trigger;
|
||||
}
|
||||
// first time selector is bounded with this type
|
||||
else if (!hotkeys.triggersMap[selectorId][eventType]) {
|
||||
hotkeys.triggersMap[selectorId][eventType] = trigger[eventType];
|
||||
}
|
||||
// make trigger point as array so more than one handler can be bound
|
||||
var mapPoint = hotkeys.triggersMap[selectorId][eventType][combi];
|
||||
if (!mapPoint){
|
||||
hotkeys.triggersMap[selectorId][eventType][combi] = [trigger[eventType][combi]];
|
||||
}
|
||||
else if (mapPoint.constructor !== Array){
|
||||
hotkeys.triggersMap[selectorId][eventType][combi] = [mapPoint];
|
||||
}
|
||||
else {
|
||||
hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length] = trigger[eventType][combi];
|
||||
}
|
||||
|
||||
// add attribute and call $.event.add per matched element
|
||||
this.each(function(){
|
||||
// jQuery wrapper for the current element
|
||||
var jqElem = jQuery(this);
|
||||
|
||||
// element already associated with another collection
|
||||
if (jqElem.attr('hkId') && jqElem.attr('hkId') !== selectorId){
|
||||
selectorId = jqElem.attr('hkId') + ";" + selectorId;
|
||||
}
|
||||
jqElem.attr('hkId', selectorId);
|
||||
});
|
||||
result = this.__bind__(handle.join(' '), data, hotkeys.handler)
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
// work-around for opera and safari where (sometimes) the target is the element which was last
|
||||
// clicked with the mouse and not the document event it would make sense to get the document
|
||||
hotkeys.findElement = function (elem){
|
||||
if (!jQuery(elem).attr('hkId')){
|
||||
if (jQuery.browser.opera || jQuery.browser.safari){
|
||||
while (!jQuery(elem).attr('hkId') && elem.parentNode){
|
||||
elem = elem.parentNode;
|
||||
}
|
||||
}
|
||||
}
|
||||
return elem;
|
||||
};
|
||||
// the event handler
|
||||
hotkeys.handler = function(event) {
|
||||
var target = hotkeys.findElement(event.currentTarget),
|
||||
jTarget = jQuery(target),
|
||||
ids = jTarget.attr('hkId');
|
||||
|
||||
if(ids){
|
||||
ids = ids.split(';');
|
||||
var code = event.which,
|
||||
type = event.type,
|
||||
special = hotkeys.specialKeys[code],
|
||||
// prevent f5 overlapping with 't' (or f4 with 's', etc.)
|
||||
character = !special && String.fromCharCode(code).toLowerCase(),
|
||||
shift = event.shiftKey,
|
||||
ctrl = event.ctrlKey,
|
||||
// patch for jquery 1.2.5 && 1.2.6 see more at:
|
||||
// http://groups.google.com/group/jquery-en/browse_thread/thread/83e10b3bb1f1c32b
|
||||
alt = event.altKey || event.originalEvent.altKey,
|
||||
mapPoint = null;
|
||||
|
||||
for (var x=0; x < ids.length; x++){
|
||||
if (hotkeys.triggersMap[ids[x]][type]){
|
||||
mapPoint = hotkeys.triggersMap[ids[x]][type];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//find by: id.type.combi.options
|
||||
if (mapPoint){
|
||||
var trigger;
|
||||
// event type is associated with the hkId
|
||||
if(!shift && !ctrl && !alt) { // No Modifiers
|
||||
trigger = mapPoint[special] || (character && mapPoint[character]);
|
||||
}
|
||||
else{
|
||||
// check combinations (alt|ctrl|shift+anything)
|
||||
var modif = '';
|
||||
if(alt) modif +='alt+';
|
||||
if(ctrl) modif+= 'ctrl+';
|
||||
if(shift) modif += 'shift+';
|
||||
|
||||
// modifiers + special keys or modifiers + character or modifiers + shift character or just shift character
|
||||
trigger = mapPoint[modif+special];
|
||||
if (!trigger){
|
||||
if (character){
|
||||
trigger = mapPoint[modif+character]
|
||||
|| mapPoint[modif+hotkeys.shiftNums[character]]
|
||||
// '$' can be triggered as 'Shift+4' or 'Shift+$' or just '$'
|
||||
|| (modif === 'shift+' && mapPoint[hotkeys.shiftNums[character]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (trigger){
|
||||
var result = false;
|
||||
for (var x=0; x < trigger.length; x++){
|
||||
if(trigger[x].disableInInput){
|
||||
// double check event.currentTarget and event.target
|
||||
var elem = jQuery(event.target);
|
||||
if (jTarget.is("input") || jTarget.is("textarea")
|
||||
|| elem.is("input") || elem.is("textarea")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// call the registered callback function
|
||||
result = result || trigger[x].cb.apply(this, [event]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
// place it under window so it can be extended and overridden by others
|
||||
window.hotkeys = hotkeys;
|
||||
return jQuery;
|
||||
})(jQuery);
|
||||
+4
File diff suppressed because one or more lines are too long
@@ -0,0 +1,570 @@
|
||||
/*
|
||||
http://keith-wood.name/timeEntry.html
|
||||
Time entry for jQuery v1.4.8.
|
||||
Written by Keith Wood (kbwood{at}iinet.com.au) June 2007.
|
||||
Minor changes by Massimo Di Pierro Nov 2010 (simplified and changed behavior)
|
||||
Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
|
||||
MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
|
||||
Please attribute the author if you use it.
|
||||
|
||||
Turn an input field into an entry point for a time value.
|
||||
The time can be entered via directly typing the value,
|
||||
via the arrow keys.
|
||||
It is configurable to show 12 or 24-hour time, to show or hide seconds,
|
||||
to enforce a minimum and/or maximum time, to change the spinner image.
|
||||
|
||||
Example: jQuery('input.time').timeEntry();
|
||||
*/
|
||||
|
||||
(function(jQuery) { // Hide scope, no jQuery conflict
|
||||
|
||||
var PROP_NAME = 'timeEntry';
|
||||
|
||||
/* TimeEntry manager.
|
||||
Use the singleton instance of this class, jQuery.timeEntry, to interact with the time entry
|
||||
functionality. Settings for (groups of) fields are maintained in an instance object
|
||||
(TimeEntryInstance), allowing multiple different settings on the same page.
|
||||
*/
|
||||
|
||||
function TimeEntry() {
|
||||
this._disabledInputs = []; // List of time entry inputs that have been disabled
|
||||
this._defaults = {
|
||||
showSeconds: true, // True to show seconds as well, false for hours/minutes only
|
||||
defaultTime: null, // The time to use if none has been set, leave at null for now
|
||||
minTime: null, // The earliest selectable time, or null for no limit
|
||||
maxTime: null, // The latest selectable time, or null for no limit
|
||||
show24Hours: true, // True to use 24 hour time, false for 12 hour (AM/PM)
|
||||
ampmNames: ['am', 'pm'] // Names of morning/evening markers
|
||||
};
|
||||
jQuery.extend(this._defaults);
|
||||
}
|
||||
|
||||
jQuery.extend(TimeEntry.prototype, {
|
||||
/*
|
||||
Class name added to elements to indicate already configured with time entry.
|
||||
*/
|
||||
markerClassName: 'hasTimeEntry',
|
||||
|
||||
/* Override the default settings for all instances of the time entry.
|
||||
@param options (object) the new settings to use as defaults (anonymous object)
|
||||
@return (DateEntry) this object
|
||||
*/
|
||||
setDefaults: function(options) {
|
||||
extendRemove(this._defaults, options || {});
|
||||
return this;
|
||||
},
|
||||
|
||||
/* Attach the time entry handler to an input field.
|
||||
@param target (element) the field to attach to
|
||||
@param options (object) custom settings for this instance
|
||||
*/
|
||||
_connectTimeEntry: function(target, options) {
|
||||
var input = jQuery(target);
|
||||
if (input.hasClass(this.markerClassName)) {
|
||||
return;
|
||||
}
|
||||
var inst = {};
|
||||
inst.options = jQuery.extend({}, options);
|
||||
inst._selectedHour = 0; // The currently selected hour
|
||||
inst._selectedMinute = 0; // The currently selected minute
|
||||
inst._selectedSecond = 0; // The currently selected second
|
||||
inst._field = 0; // The selected subfield
|
||||
inst.input = jQuery(target); // The attached input field
|
||||
jQuery.data(target, PROP_NAME, inst);
|
||||
input.addClass(this.markerClassName).bind('focus.timeEntry', this._doFocus).
|
||||
bind('blur.timeEntry', this._doBlur).bind('click.timeEntry', this._doClick).
|
||||
bind('keydown.timeEntry', this._doKeyDown).bind('keypress.timeEntry', this._doKeyPress);
|
||||
// Check pastes
|
||||
if (jQuery.browser.mozilla)
|
||||
input.bind('input.timeEntry', function(event) { jQuery.timeEntry._parseTime(inst); });
|
||||
if (jQuery.browser.msie)
|
||||
input.bind('paste.timeEntry', function(event) { setTimeout(function() { jQuery.timeEntry._parseTime(inst); }, 1); });
|
||||
},
|
||||
|
||||
|
||||
/* Check whether an input field has been disabled.
|
||||
@param input (element) input field to check
|
||||
@return (boolean) true if this field has been disabled, false if it is enabled
|
||||
*/
|
||||
_isDisabledTimeEntry: function(input) {
|
||||
return jQuery.inArray(input, this._disabledInputs) > -1;
|
||||
},
|
||||
|
||||
/* Reconfigure the settings for a time entry field.
|
||||
@param input (element) input field to change
|
||||
@param options (object) new settings to add or
|
||||
(string) an individual setting name
|
||||
@param value (any) the individual setting's value
|
||||
*/
|
||||
_changeTimeEntry: function(input, options, value) {
|
||||
var inst = jQuery.data(input, PROP_NAME);
|
||||
if (inst) {
|
||||
if (typeof options == 'string') {
|
||||
var name = options;
|
||||
options = {};
|
||||
options[name] = value;
|
||||
}
|
||||
var currentTime = this._extractTime(inst);
|
||||
extendRemove(inst.options, options || {});
|
||||
if (currentTime)
|
||||
this._setTime(inst, new Date(0, 0, 0,
|
||||
currentTime[0], currentTime[1], currentTime[2]));
|
||||
}
|
||||
jQuery.data(input, PROP_NAME, inst);
|
||||
},
|
||||
|
||||
/* Remove the time entry functionality from an input.
|
||||
@param input (element) input field to affect
|
||||
*/
|
||||
_destroyTimeEntry: function(input) {
|
||||
jQueryinput = jQuery(input);
|
||||
if (!jQueryinput.hasClass(this.markerClassName)) return;
|
||||
jQueryinput.removeClass(this.markerClassName).unbind('.timeEntry');
|
||||
this._disabledInputs = jQuery.map(this._disabledInputs, function(value) { return (value == input ? null : value); }); // Delete entry
|
||||
jQueryinput.parent().replaceWith(jQueryinput);
|
||||
jQuery.removeData(input, PROP_NAME);
|
||||
},
|
||||
|
||||
/* Initialise the current time for a time entry input field.
|
||||
@param input (element) input field to update
|
||||
@param time (Date) the new time (year/month/day ignored) or null for now
|
||||
*/
|
||||
_setTimeTimeEntry: function(input, time) {
|
||||
var inst = jQuery.data(input, PROP_NAME);
|
||||
if (inst) this._setTime(inst, time ? (typeof time == 'object' ? new Date(time.getTime()) : time) : null);
|
||||
},
|
||||
|
||||
/* Retrieve the current time for a time entry input field.
|
||||
@param input (element) input field to examine
|
||||
@return (Date) current time (year/month/day zero) or null if none
|
||||
*/
|
||||
_getTimeTimeEntry: function(input) {
|
||||
var inst = jQuery.data(input, PROP_NAME);
|
||||
var currentTime = (inst ? this._extractTime(inst) : null);
|
||||
return (!currentTime ? null : new Date(0, 0, 0, currentTime[0], currentTime[1], currentTime[2]));
|
||||
},
|
||||
|
||||
/* Retrieve the millisecond offset for the current time.
|
||||
@param input (element) input field to examine
|
||||
@return (number) the time as milliseconds offset or zero if none
|
||||
*/
|
||||
_getOffsetTimeEntry: function(input) {
|
||||
var inst = jQuery.data(input, PROP_NAME);
|
||||
var currentTime = (inst ? this._extractTime(inst) : null);
|
||||
return (!currentTime ? 0 : (currentTime[0] * 3600 + currentTime[1] * 60 + currentTime[2]) * 1000);
|
||||
},
|
||||
|
||||
/* Initialise time entry.
|
||||
@param target (element) the input field or (event) the focus event
|
||||
*/
|
||||
_doFocus: function(target) {
|
||||
var input = (target.nodeName && target.nodeName.toLowerCase() == 'input' ? target : this);
|
||||
if (jQuery.timeEntry._lastInput == input || jQuery.timeEntry._isDisabledTimeEntry(input)) {
|
||||
jQuery.timeEntry._focussed = false;
|
||||
return;
|
||||
}
|
||||
var inst = jQuery.data(input, PROP_NAME);
|
||||
jQuery.timeEntry._focussed = true;
|
||||
jQuery.timeEntry._lastInput = input;
|
||||
jQuery.timeEntry._blurredInput = null;
|
||||
jQuery.data(input, PROP_NAME, inst);
|
||||
jQuery.timeEntry._parseTime(inst);
|
||||
setTimeout(function() { jQuery.timeEntry._showField(inst); }, 10);
|
||||
},
|
||||
|
||||
/* Note that the field has been exited.
|
||||
@param event (event) the blur event
|
||||
*/
|
||||
_doBlur: function(event) {
|
||||
jQuery.timeEntry._blurredInput = jQuery.timeEntry._lastInput;
|
||||
jQuery.timeEntry._lastInput = null;
|
||||
},
|
||||
|
||||
/* Select appropriate field portion on click, if already in the field.
|
||||
@param event (event) the click event
|
||||
*/
|
||||
_doClick: function(event) {
|
||||
var input = event.target;
|
||||
var inst = jQuery.data(input, PROP_NAME);
|
||||
if (!jQuery.timeEntry._focussed) {
|
||||
var fieldSize = 3;
|
||||
inst._field = 0;
|
||||
if (input.selectionStart != null) { // Use input select range
|
||||
for (var field = 0; field <= Math.max(1, inst._secondField, inst._ampmField); field++) {
|
||||
var end = (field != inst._ampmField ? (field * fieldSize) + 2 : (inst._ampmField * fieldSize) + 2);
|
||||
inst._field = field;
|
||||
if (input.selectionStart < end) break;
|
||||
}
|
||||
} else if (input.createTextRange) { // Check against bounding boxes
|
||||
var src = jQuery(event.srcElement);
|
||||
var range = input.createTextRange();
|
||||
var convert = function(value) {
|
||||
return {thin: 2, medium: 4, thick: 6}[value] || value;
|
||||
};
|
||||
var offsetX = event.clientX + document.documentElement.scrollLeft -
|
||||
(src.offset().left + parseInt(convert(src.css('border-left-width')), 10)) -
|
||||
range.offsetLeft; // Position - left edge - alignment
|
||||
for (var field = 0; field <= Math.max(1, inst._secondField, inst._ampmField); field++) {
|
||||
var end = (field != inst._ampmField ? (field * fieldSize) + 2 : (inst._ampmField * fieldSize) + 2);
|
||||
range.collapse();
|
||||
range.moveEnd('character', end);
|
||||
inst._field = field;
|
||||
if (offsetX < range.boundingWidth) break; // And compare
|
||||
}
|
||||
}
|
||||
}
|
||||
jQuery.data(input, PROP_NAME, inst);
|
||||
jQuery.timeEntry._showField(inst);
|
||||
jQuery.timeEntry._focussed = false;
|
||||
},
|
||||
|
||||
/* Handle keystrokes in the field.
|
||||
@param event (event) the keydown event
|
||||
@return (boolean) true to continue, false to stop processing
|
||||
*/
|
||||
_doKeyDown: function(event) {
|
||||
if (event.keyCode >= 48) return true;
|
||||
var inst = jQuery.data(event.target, PROP_NAME);
|
||||
|
||||
switch (event.keyCode) {
|
||||
case 9:
|
||||
var its = jQuery(':input');
|
||||
its.eq(its.index(this)+(event.shiftKey?-1:+1)).focus();
|
||||
break;
|
||||
case 37: jQuery.timeEntry._changeField(inst, -1, false); break; // Previous field on left
|
||||
case 38: jQuery.timeEntry._adjustField(inst, -1); break; // Increment time field on down
|
||||
case 16: if(!event.shiftKey) jQuery.timeEntry._changeField(inst, +1, false); break; // Next field on right
|
||||
case 39: jQuery.timeEntry._changeField(inst, +1, false); break; // Next field on right
|
||||
case 40: jQuery.timeEntry._adjustField(inst, +1); break; // Decrement time field on up
|
||||
case 32: case 46: jQuery.timeEntry._setValue(inst, ''); break; // Clear time on delete
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
/* Disallow unwanted characters.
|
||||
@param event (event) the keypress event
|
||||
@return (boolean) true to continue, false to stop processing
|
||||
*/
|
||||
_doKeyPress: function(event) {
|
||||
var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
|
||||
if (chr < ' ') return true;
|
||||
var inst = jQuery.data(event.target, PROP_NAME);
|
||||
jQuery.timeEntry._handleKeyPress(inst, chr);
|
||||
return false;
|
||||
},
|
||||
|
||||
/* Get a setting value, defaulting if necessary.
|
||||
@param inst (object) the instance settings
|
||||
@param name (string) the setting name
|
||||
@return (any) the setting value
|
||||
*/
|
||||
_get: function(inst, name) {
|
||||
return (inst.options[name] != null ? inst.options[name] : jQuery.timeEntry._defaults[name]);
|
||||
},
|
||||
|
||||
/* Extract the time value from the input field, or default to now.
|
||||
@param inst (object) the instance settings
|
||||
*/
|
||||
_parseTime: function(inst) {
|
||||
var currentTime = this._extractTime(inst);
|
||||
var showSeconds = this._get(inst, 'showSeconds');
|
||||
if (currentTime) {
|
||||
inst._selectedHour = currentTime[0];
|
||||
inst._selectedMinute = currentTime[1];
|
||||
inst._selectedSecond = currentTime[2];
|
||||
}
|
||||
else {
|
||||
var now = this._constrainTime(inst);
|
||||
inst._selectedHour = now[0];
|
||||
inst._selectedMinute = now[1];
|
||||
inst._selectedSecond = (showSeconds ? now[2] : 0);
|
||||
}
|
||||
inst._secondField = (showSeconds ? 2 : -1);
|
||||
inst._ampmField = (this._get(inst, 'show24Hours') ? -1 : (showSeconds ? 3 : 2));
|
||||
inst._lastChr = '';
|
||||
inst._field = Math.max(0, Math.min(Math.max(1, inst._secondField, inst._ampmField), 0));
|
||||
if (inst.input.val() != '') this._showTime(inst);
|
||||
},
|
||||
|
||||
/* Extract the time value from a string as an array of values, or default to null.
|
||||
@param inst (object) the instance settings
|
||||
@param value (string) the time value to parse
|
||||
@return (number[3]) the time components (hours, minutes, seconds)
|
||||
or null if no value
|
||||
*/
|
||||
_extractTime: function(inst, value) {
|
||||
value = value || inst.input.val();
|
||||
var currentTime = value.split(':');
|
||||
var ampmNames = this._get(inst, 'ampmNames');
|
||||
var show24Hours = this._get(inst, 'show24Hours');
|
||||
if (currentTime.length >= 2) {
|
||||
var isAM = !show24Hours && (value.indexOf(ampmNames[0]) > -1);
|
||||
var isPM = !show24Hours && (value.indexOf(ampmNames[1]) > -1);
|
||||
var hour = parseInt(currentTime[0], 10);
|
||||
hour = (isNaN(hour) ? 0 : hour);
|
||||
hour = ((isAM || isPM) && hour == 12 ? 0 : hour) + (isPM ? 12 : 0);
|
||||
var minute = parseInt(currentTime[1], 10);
|
||||
minute = (isNaN(minute) ? 0 : minute);
|
||||
var second = (currentTime.length >= 3 ?
|
||||
parseInt(currentTime[2], 10) : 0);
|
||||
second = (isNaN(second) || !this._get(inst, 'showSeconds') ? 0 : second);
|
||||
return this._constrainTime(inst, [hour, minute, second]);
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
/* Constrain the given/current time to the time steps.
|
||||
@param inst (object) the instance settings
|
||||
@param fields (number[3]) the current time components (hours, minutes, seconds)
|
||||
@return (number[3]) the constrained time components (hours, minutes, seconds)
|
||||
*/
|
||||
_constrainTime: function(inst, fields) {
|
||||
var specified = (fields != null);
|
||||
if (!specified) {
|
||||
var now = this._determineTime(inst, this._get(inst, 'defaultTime')) || new Date();
|
||||
fields = [now.getHours(), now.getMinutes(), now.getSeconds()];
|
||||
}
|
||||
return fields;
|
||||
},
|
||||
|
||||
/* Set the selected time into the input field.
|
||||
@param inst (object) the instance settings
|
||||
*/
|
||||
_showTime: function(inst) {
|
||||
var show24Hours = this._get(inst, 'show24Hours');
|
||||
var currentTime = (this._formatNumber(show24Hours ? inst._selectedHour :
|
||||
((inst._selectedHour + 11) % 12) + 1) + ':' +
|
||||
this._formatNumber(inst._selectedMinute) +
|
||||
(this._get(inst, 'showSeconds') ? ':' +
|
||||
this._formatNumber(inst._selectedSecond) : '') +
|
||||
(show24Hours ? '' : this._get(inst, 'ampmNames')[(inst._selectedHour < 12 ? 0 : 1)]));
|
||||
this._setValue(inst, currentTime);
|
||||
this._showField(inst);
|
||||
},
|
||||
|
||||
/* Highlight the current time field.
|
||||
@param inst (object) the instance settings
|
||||
*/
|
||||
_showField: function(inst) {
|
||||
var input = inst.input[0];
|
||||
if (inst.input.is(':hidden') || jQuery.timeEntry._lastInput != input) return;
|
||||
var fieldSize = 3;
|
||||
var start = (inst._field == inst._ampmField ? (inst._ampmField * fieldSize) - 1 : (inst._field * fieldSize));
|
||||
var end = start + (inst._field == inst._ampmField ? 2 : 2);
|
||||
if (input.setSelectionRange) { // Mozilla
|
||||
input.setSelectionRange(start, end);
|
||||
}
|
||||
else if (input.createTextRange) { // IE
|
||||
var range = input.createTextRange();
|
||||
range.moveStart('character', start);
|
||||
range.moveEnd('character', end - inst.input.val().length);
|
||||
range.select();
|
||||
}
|
||||
if (!input.disabled) input.focus();
|
||||
},
|
||||
|
||||
/* Ensure displayed single number has a leading zero.
|
||||
@param value (number) current value
|
||||
@return (string) number with at least two digits
|
||||
*/
|
||||
_formatNumber: function(value) {
|
||||
return (value < 10 ? '0' : '') + value;
|
||||
},
|
||||
|
||||
/* Update the input field and notify listeners.
|
||||
@param inst (object) the instance settings
|
||||
@param value (string) the new value
|
||||
*/
|
||||
_setValue: function(inst, value) {
|
||||
if (value != inst.input.val()) inst.input.val(value).trigger('change');
|
||||
},
|
||||
|
||||
/* Move to previous/next field, or out of field altogether if appropriate.
|
||||
@param inst (object) the instance settings
|
||||
@param offset (number) the direction of change (-1, +1)
|
||||
@param moveOut (boolean) true if can move out of the field
|
||||
@return (boolean) true if exitting the field, false if not
|
||||
*/
|
||||
_changeField: function(inst, offset, moveOut) {
|
||||
var atFirstLast = (inst.input.val() == '' || inst._field == (offset == -1 ? 0 : Math.max(1, inst._secondField, inst._ampmField)));
|
||||
if (!atFirstLast) inst._field += offset;
|
||||
this._showField(inst);
|
||||
inst._lastChr = '';
|
||||
jQuery.data(inst.input[0], PROP_NAME, inst);
|
||||
return (atFirstLast && moveOut);
|
||||
},
|
||||
|
||||
/* Update the current field in the direction indicated.
|
||||
@param inst (object) the instance settings
|
||||
@param offset (number) the amount to change by
|
||||
*/
|
||||
_adjustField: function(inst, offset) {
|
||||
if (inst.input.val() == '') offset = 0;
|
||||
this._setTime(inst, new Date(0, 0, 0,
|
||||
inst._selectedHour + (inst._field == 0 ? offset : 0) +
|
||||
(inst._field == inst._ampmField ? offset * 12 : 0),
|
||||
inst._selectedMinute + (inst._field == 1 ? offset : 0),
|
||||
inst._selectedSecond + (inst._field == inst._secondField ? offset : 0)));
|
||||
},
|
||||
|
||||
/* Check against minimum/maximum and display time.
|
||||
@param inst (object) the instance settings
|
||||
@param time (Date) an actual time or
|
||||
(number) offset in seconds from now or
|
||||
(string) units and periods of offsets from now
|
||||
*/
|
||||
_setTime: function(inst, time) {
|
||||
time = this._determineTime(inst, time);
|
||||
var fields = this._constrainTime(inst, time ?
|
||||
[time.getHours(), time.getMinutes(), time.getSeconds()] : null);
|
||||
time = new Date(0, 0, 0, fields[0], fields[1], fields[2]);
|
||||
// Normalise to base date
|
||||
var time = this._normaliseTime(time);
|
||||
var minTime = this._normaliseTime(this._determineTime(inst, this._get(inst, 'minTime')));
|
||||
var maxTime = this._normaliseTime(this._determineTime(inst, this._get(inst, 'maxTime')));
|
||||
// Ensure it is within the bounds set
|
||||
time = (minTime && time < minTime ? minTime :
|
||||
(maxTime && time > maxTime ? maxTime : time));
|
||||
inst._selectedHour = time.getHours();
|
||||
inst._selectedMinute = time.getMinutes();
|
||||
inst._selectedSecond = time.getSeconds();
|
||||
this._showTime(inst);
|
||||
jQuery.data(inst.input[0], PROP_NAME, inst);
|
||||
},
|
||||
|
||||
/* Normalise time object to a common date.
|
||||
@param time (Date) the original time
|
||||
@return (Date) the normalised time
|
||||
*/
|
||||
_normaliseTime: function(time) {
|
||||
if (!time) return null;
|
||||
time.setFullYear(1900);
|
||||
time.setMonth(0);
|
||||
time.setDate(0);
|
||||
return time;
|
||||
},
|
||||
|
||||
/* A time may be specified as an exact value or a relative one.
|
||||
@param inst (object) the instance settings
|
||||
@param setting (Date) an actual time or
|
||||
(number) offset in seconds from now or
|
||||
(string) units and periods of offsets from now
|
||||
@return (Date) the calculated time
|
||||
*/
|
||||
_determineTime: function(inst, setting) {
|
||||
var offsetNumeric = function(offset) { // E.g. +300, -2
|
||||
var time = new Date();
|
||||
time.setTime(time.getTime() + offset * 1000);
|
||||
return time;
|
||||
};
|
||||
var offsetString = function(offset) { // E.g. '+2m', '-4h', '+3h +30m' or '12:34:56PM'
|
||||
var fields = jQuery.timeEntry._extractTime(inst, offset); // Actual time?
|
||||
var time = new Date();
|
||||
var hour = (fields ? fields[0] : time.getHours());
|
||||
var minute = (fields ? fields[1] : time.getMinutes());
|
||||
var second = (fields ? fields[2] : time.getSeconds());
|
||||
if (!fields) {
|
||||
var pattern = /([+-]?[0-9]+)\s*(s|S|m|M|h|H)?/g;
|
||||
var matches = pattern.exec(offset);
|
||||
while (matches) {
|
||||
switch (matches[2] || 's') {
|
||||
case 's' : case 'S' : second += parseInt(matches[1], 10); break;
|
||||
case 'm' : case 'M' : minute += parseInt(matches[1], 10); break;
|
||||
case 'h' : case 'H' : hour += parseInt(matches[1], 10); break;
|
||||
}
|
||||
matches = pattern.exec(offset);
|
||||
}
|
||||
}
|
||||
time = new Date(0, 0, 10, hour, minute, second, 0);
|
||||
if (/^!/.test(offset)) { // No wrapping
|
||||
if (time.getDate() > 10)
|
||||
time = new Date(0, 0, 10, 23, 59, 59);
|
||||
else if (time.getDate() < 10)
|
||||
time = new Date(0, 0, 10, 0, 0, 0);
|
||||
}
|
||||
return time;
|
||||
};
|
||||
return (setting ? (typeof setting == 'string' ? offsetString(setting) :
|
||||
(typeof setting == 'number' ? offsetNumeric(setting) : setting)) : null);
|
||||
},
|
||||
|
||||
/* Update time based on keystroke entered.
|
||||
@param inst (object) the instance settings
|
||||
@param chr (ch) the new character
|
||||
*/
|
||||
_handleKeyPress: function(inst, chr) {
|
||||
if (chr == ':') this._changeField(inst, +1, false);
|
||||
else if (chr >= '0' && chr <= '9') { // Allow direct entry of time
|
||||
var key = parseInt(chr, 10);
|
||||
var value = parseInt(inst._lastChr + chr, 10);
|
||||
var show24Hours = this._get(inst, 'show24Hours');
|
||||
var hour = (inst._field != 0 ? inst._selectedHour :
|
||||
(show24Hours ? (value < 24 ? value : key) :
|
||||
(value >= 1 && value <= 12 ? value :
|
||||
(key > 0 ? key : inst._selectedHour)) % 12 +
|
||||
(inst._selectedHour >= 12 ? 12 : 0)));
|
||||
var minute = (inst._field != 1 ? inst._selectedMinute :
|
||||
(value < 60 ? value : key));
|
||||
var second = (inst._field != inst._secondField ? inst._selectedSecond :
|
||||
(value < 60 ? value : key));
|
||||
var fields = this._constrainTime(inst, [hour, minute, second]);
|
||||
this._setTime(inst, new Date(0, 0, 0, fields[0], fields[1], fields[2]));
|
||||
inst._lastChr = chr;
|
||||
}
|
||||
else if (!this._get(inst, 'show24Hours')) { // Set am/pm based on first char of names
|
||||
chr = chr.toLowerCase();
|
||||
var ampmNames = this._get(inst, 'ampmNames');
|
||||
if ((chr == ampmNames[0].substring(0, 1).toLowerCase() && inst._selectedHour >= 12) ||
|
||||
(chr == ampmNames[1].substring(0, 1).toLowerCase() && inst._selectedHour < 12)) {
|
||||
var saveField = inst._field;
|
||||
inst._field = inst._ampmField;
|
||||
this._adjustField(inst, +1);
|
||||
inst._field = saveField;
|
||||
this._showField(inst);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/* jQuery extend now ignores nulls!
|
||||
@param target (object) the object to update
|
||||
@param props (object) the new settings
|
||||
@return (object) the updated object
|
||||
*/
|
||||
function extendRemove(target, props) {
|
||||
jQuery.extend(target, props);
|
||||
for (var name in props) if (props[name] == null) target[name] = null;
|
||||
return target;
|
||||
}
|
||||
|
||||
// Commands that don't return a jQuery object
|
||||
var getters = ['getOffset', 'getTime', 'isDisabled'];
|
||||
|
||||
/* Attach the time entry functionality to a jQuery selection.
|
||||
@param command (string) the command to run (optional, default 'attach')
|
||||
@param options (object) the new settings to use for these countdown instances (optional)
|
||||
@return (jQuery) for chaining further calls
|
||||
*/
|
||||
jQuery.fn.timeEntry = function(options) {
|
||||
var otherArgs = Array.prototype.slice.call(arguments, 1);
|
||||
if (typeof options == 'string' && jQuery.inArray(options, getters) > -1) {
|
||||
return jQuery.timeEntry['_' + options + 'TimeEntry'].apply(jQuery.timeEntry, [this[0]].concat(otherArgs));
|
||||
}
|
||||
return this.each(function() {
|
||||
var nodeName = this.nodeName.toLowerCase();
|
||||
if (nodeName == 'input') {
|
||||
if (typeof options == 'string')
|
||||
jQuery.timeEntry['_' + options + 'TimeEntry'].apply(jQuery.timeEntry, [this].concat(otherArgs));
|
||||
else {
|
||||
// Check for settings on the control itself
|
||||
var inlineSettings = (jQuery.fn.metadata ? jQuery(this).metadata() : {});
|
||||
jQuery.timeEntry._connectTimeEntry(this, jQuery.extend(inlineSettings, options));
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/* Initialise the time entry functionality. */
|
||||
jQuery.timeEntry = new TimeEntry(); // Singleton instance
|
||||
|
||||
})(jQuery);
|
||||
+270
@@ -0,0 +1,270 @@
|
||||
/*
|
||||
// jQuery multiSelect
|
||||
//
|
||||
// Version 1.0 beta
|
||||
//
|
||||
// Cory S.N. LaViska
|
||||
// A Beautiful Site (http://abeautifulsite.net/)
|
||||
// 06 April 2008
|
||||
//
|
||||
// Visit http://abeautifulsite.net/notebook.php?article=62 for more information
|
||||
//
|
||||
// Usage: $('#control_id').multiSelect( options, callback )
|
||||
//
|
||||
// Options: selectAll - whether or not to display the Select All option; true/false, default = true
|
||||
// selectAllText - text to display for selecting/unselecting all options simultaneously
|
||||
// noneSelected - text to display when there are no selected items in the list
|
||||
// oneOrMoreSelected - text to display when there are one or more selected items in the list
|
||||
// (note: you can use % as a placeholder for the number of items selected).
|
||||
// Use * to show a comma separated list of all selected; default = '% selected'
|
||||
//
|
||||
// Dependencies: jQuery 1.2 or higher (http://jquery.com/)
|
||||
// the jQuery Dimensions plugin (http://plugins.jquery.com/project/dimensions)
|
||||
//
|
||||
// Licensing & Terms of Use
|
||||
//
|
||||
// jQuery File Tree is licensed under a Creative Commons License and is copyrighted (C)2008 by Cory S.N. LaViska.
|
||||
// For details, visit http://creativecommons.org/licenses/by/3.0/us/
|
||||
//
|
||||
*/
|
||||
if(jQuery) (function($){
|
||||
|
||||
$.extend($.fn, {
|
||||
multiSelect: function(o, callback) {
|
||||
// Default options
|
||||
if( !o ) var o = {};
|
||||
if( o.selectAll == undefined ) o.selectAll = true;
|
||||
if( o.selectAllText == undefined ) o.selectAllText = "Select All";
|
||||
if( o.noneSelected == undefined ) o.noneSelected = 'Select options';
|
||||
if( o.oneOrMoreSelected == undefined ) o.oneOrMoreSelected = '% selected';
|
||||
|
||||
// Initialize each multiSelect
|
||||
$(this).each( function() {
|
||||
var select = $(this);
|
||||
var html = '<input type="text" readonly="readonly" class="multiSelect" value="" style="cursor: default;" />';
|
||||
html += '<div class="multiSelectOptions" style="position: absolute; z-index: 99999; display: none;">';
|
||||
if( o.selectAll ) html += '<label class="selectAll"><input type="checkbox" class="selectAll" />' + o.selectAllText + '</label>';
|
||||
$(select).find('OPTION').each( function() {
|
||||
if( $(this).val() != '' ) {
|
||||
html += '<label><input type="checkbox" name="' + $(select).attr('name') + '" value="' + $(this).val() + '"';
|
||||
if( $(this).attr('selected') ) html += ' checked="checked"';
|
||||
html += ' />' + $(this).html() + '</label>';
|
||||
}
|
||||
});
|
||||
html += '</div>';
|
||||
$(select).after(html);
|
||||
|
||||
// Events
|
||||
$(select).next('.multiSelect').mouseover( function() {
|
||||
$(this).addClass('hover');
|
||||
}).mouseout( function() {
|
||||
$(this).removeClass('hover');
|
||||
}).click( function() {
|
||||
// Show/hide on click
|
||||
if( $(this).hasClass('active') ) {
|
||||
$(this).multiSelectOptionsHide();
|
||||
} else {
|
||||
$(this).multiSelectOptionsShow();
|
||||
}
|
||||
return false;
|
||||
}).focus( function() {
|
||||
// So it can be styled with CSS
|
||||
$(this).addClass('focus');
|
||||
}).blur( function() {
|
||||
// So it can be styled with CSS
|
||||
$(this).removeClass('focus');
|
||||
});
|
||||
|
||||
// Determine if Select All should be checked initially
|
||||
if( o.selectAll ) {
|
||||
var sa = true;
|
||||
$(select).next('.multiSelect').next('.multiSelectOptions').find('INPUT:checkbox').not('.selectAll').each( function() {
|
||||
if( !$(this).attr('checked') ) sa = false;
|
||||
});
|
||||
if( sa ) $(select).next('.multiSelect').next('.multiSelectOptions').find('INPUT.selectAll').attr('checked', true).parent().addClass('checked');
|
||||
}
|
||||
|
||||
// Handle Select All
|
||||
$(select).next('.multiSelect').next('.multiSelectOptions').find('INPUT.selectAll').click( function() {
|
||||
if( $(this).attr('checked') == true ) $(this).parent().parent().find('INPUT:checkbox').attr('checked', true).parent().addClass('checked'); else $(this).parent().parent().find('INPUT:checkbox').attr('checked', false).parent().removeClass('checked');
|
||||
});
|
||||
|
||||
// Handle checkboxes
|
||||
$(select).next('.multiSelect').next('.multiSelectOptions').find('INPUT:checkbox').click( function() {
|
||||
$(this).parent().parent().multiSelectUpdateSelected(o);
|
||||
$(this).parent().parent().find('LABEL').removeClass('checked').find('INPUT:checked').parent().addClass('checked');
|
||||
$(this).parent().parent().prev('.multiSelect').focus();
|
||||
if( !$(this).attr('checked') ) $(this).parent().parent().find('INPUT:checkbox.selectAll').attr('checked', false).parent().removeClass('checked');
|
||||
if( callback ) callback($(this));
|
||||
});
|
||||
|
||||
// Initial display
|
||||
$(select).next('.multiSelect').next('.multiSelectOptions').each( function() {
|
||||
$(this).multiSelectUpdateSelected(o);
|
||||
$(this).find('INPUT:checked').parent().addClass('checked');
|
||||
});
|
||||
|
||||
// Handle hovers
|
||||
$(select).next('.multiSelect').next('.multiSelectOptions').find('LABEL').mouseover( function() {
|
||||
$(this).parent().find('LABEL').removeClass('hover');
|
||||
$(this).addClass('hover');
|
||||
}).mouseout( function() {
|
||||
$(this).parent().find('LABEL').removeClass('hover');
|
||||
});
|
||||
|
||||
// Keyboard
|
||||
$(select).next('.multiSelect').keydown( function(e) {
|
||||
// Is dropdown visible?
|
||||
if( $(this).next('.multiSelectOptions').is(':visible') ) {
|
||||
// Dropdown is visible
|
||||
// Tab
|
||||
if( e.keyCode == 9 ) {
|
||||
$(this).addClass('focus').trigger('click'); // esc, left, right - hide
|
||||
$(this).focus().next(':input').focus();
|
||||
return true;
|
||||
}
|
||||
|
||||
// ESC, Left, Right
|
||||
if( e.keyCode == 27 || e.keyCode == 37 || e.keyCode == 39 ) {
|
||||
// Hide dropdown
|
||||
$(this).addClass('focus').trigger('click');
|
||||
}
|
||||
// Down
|
||||
if( e.keyCode == 40 ) {
|
||||
if( !$(this).next('.multiSelectOptions').find('LABEL').hasClass('hover') ) {
|
||||
// Default to first item
|
||||
$(this).next('.multiSelectOptions').find('LABEL:first').addClass('hover');
|
||||
} else {
|
||||
// Move down, cycle to top if on bottom
|
||||
$(this).next('.multiSelectOptions').find('LABEL.hover').removeClass('hover').next('LABEL').addClass('hover');
|
||||
if( !$(this).next('.multiSelectOptions').find('LABEL').hasClass('hover') ) {
|
||||
$(this).next('.multiSelectOptions').find('LABEL:first').addClass('hover');
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// Up
|
||||
if( e.keyCode == 38 ) {
|
||||
if( !$(this).next('.multiSelectOptions').find('LABEL').hasClass('hover') ) {
|
||||
// Default to first item
|
||||
$(this).next('.multiSelectOptions').find('LABEL:first').addClass('hover');
|
||||
} else {
|
||||
// Move up, cycle to bottom if on top
|
||||
$(this).next('.multiSelectOptions').find('LABEL.hover').removeClass('hover').prev('LABEL').addClass('hover');
|
||||
if( !$(this).next('.multiSelectOptions').find('LABEL').hasClass('hover') ) {
|
||||
$(this).next('.multiSelectOptions').find('LABEL:last').addClass('hover');
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// Enter, Space
|
||||
if( e.keyCode == 13 || e.keyCode == 32 ) {
|
||||
// Select All
|
||||
if( $(this).next('.multiSelectOptions').find('LABEL.hover INPUT:checkbox').hasClass('selectAll') ) {
|
||||
if( $(this).next('.multiSelectOptions').find('LABEL.hover INPUT:checkbox').attr('checked') ) {
|
||||
// Uncheck all
|
||||
$(this).next('.multiSelectOptions').find('INPUT:checkbox').attr('checked', false).parent().removeClass('checked');
|
||||
} else {
|
||||
// Check all
|
||||
$(this).next('.multiSelectOptions').find('INPUT:checkbox').attr('checked', true).parent().addClass('checked');
|
||||
}
|
||||
$(this).next('.multiSelectOptions').multiSelectUpdateSelected(o);
|
||||
if( callback ) callback($(this));
|
||||
return false;
|
||||
}
|
||||
// Other checkboxes
|
||||
if( $(this).next('.multiSelectOptions').find('LABEL.hover INPUT:checkbox').attr('checked') ) {
|
||||
// Uncheck
|
||||
$(this).next('.multiSelectOptions').find('LABEL.hover INPUT:checkbox').attr('checked', false);
|
||||
$(this).next('.multiSelectOptions').multiSelectUpdateSelected(o);
|
||||
$(this).next('.multiSelectOptions').find('LABEL').removeClass('checked').find('INPUT:checked').parent().addClass('checked');
|
||||
// Select all status can't be checked at this point
|
||||
$(this).next('.multiSelectOptions').find('INPUT:checkbox.selectAll').attr('checked', false).parent().removeClass('checked');
|
||||
if( callback ) callback($(this));
|
||||
} else {
|
||||
// Check
|
||||
$(this).next('.multiSelectOptions').find('LABEL.hover INPUT:checkbox').attr('checked', true);
|
||||
$(this).next('.multiSelectOptions').multiSelectUpdateSelected(o);
|
||||
$(this).next('.multiSelectOptions').find('LABEL').removeClass('checked').find('INPUT:checked').parent().addClass('checked');
|
||||
if( callback ) callback($(this));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
// Dropdown is not visible
|
||||
if( e.keyCode == 38 || e.keyCode == 40 || e.keyCode == 13 || e.keyCode == 32 ) { // down, enter, space - show
|
||||
// Show dropdown
|
||||
$(this).removeClass('focus').trigger('click');
|
||||
$(this).next('.multiSelectOptions').find('LABEL:first').addClass('hover');
|
||||
return false;
|
||||
}
|
||||
// Tab key
|
||||
if( e.keyCode == 9 ) {
|
||||
// Shift focus to next INPUT element on page
|
||||
$(this).focus().next(':input').focus();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// Prevent enter key from submitting form
|
||||
if( e.keyCode == 13 ) return false;
|
||||
});
|
||||
|
||||
// Eliminate the original form element
|
||||
$(select).remove();
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
// Hide the dropdown
|
||||
multiSelectOptionsHide: function() {
|
||||
$(this).removeClass('active').next('.multiSelectOptions').hide();
|
||||
},
|
||||
|
||||
// Show the dropdown
|
||||
multiSelectOptionsShow: function() {
|
||||
// Hide any open option boxes
|
||||
$('.multiSelect').multiSelectOptionsHide();
|
||||
$(this).next('.multiSelectOptions').find('LABEL').removeClass('hover');
|
||||
$(this).addClass('active').next('.multiSelectOptions').show();
|
||||
|
||||
// Position it
|
||||
var offset = $(this).offset();
|
||||
$(this).next('.multiSelectOptions').css({ top: offset.top + $(this).outerHeight() + 'px' });
|
||||
$(this).next('.multiSelectOptions').css({ left: offset.left + 'px' });
|
||||
|
||||
// Disappear on hover out
|
||||
multiSelectCurrent = $(this);
|
||||
var timer = '';
|
||||
$(this).next('.multiSelectOptions').hover( function() {
|
||||
clearTimeout(timer);
|
||||
}, function() {
|
||||
timer = setTimeout('$(multiSelectCurrent).multiSelectOptionsHide(); $(multiSelectCurrent).unbind("hover");', 250);
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
// Update the textbox with the total number of selected items
|
||||
multiSelectUpdateSelected: function(o) {
|
||||
var i = 0, s = '';
|
||||
$(this).find('INPUT:checkbox:checked').not('.selectAll').each( function() {
|
||||
i++;
|
||||
})
|
||||
if( i == 0 ) {
|
||||
$(this).prev('INPUT.multiSelect').val( o.noneSelected );
|
||||
} else {
|
||||
if( o.oneOrMoreSelected == '*' ) {
|
||||
var display = '';
|
||||
$(this).find('INPUT:checkbox:checked').each( function() {
|
||||
if( $(this).parent().text() != o.selectAllText ) display = display + $(this).parent().text() + ', ';
|
||||
});
|
||||
display = display.substr(0, display.length - 2);
|
||||
$(this).prev('INPUT.multiSelect').val( display );
|
||||
} else {
|
||||
$(this).prev('INPUT.multiSelect').val( o.oneOrMoreSelected.replace('%', i) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,109 @@
|
||||
function popup(url) {
|
||||
newwindow=window.open(url,'name','height=400,width=600');
|
||||
if (window.focus) newwindow.focus();
|
||||
return false;
|
||||
}
|
||||
function collapse(id) { jQuery('#'+id).slideToggle(); }
|
||||
function fade(id,value) { if(value>0) jQuery('#'+id).hide().fadeIn('slow'); else jQuery('#'+id).show().fadeOut('slow'); }
|
||||
function ajax(u,s,t) {
|
||||
query = '';
|
||||
if (typeof s == "string") {
|
||||
d = jQuery(s).serialize();
|
||||
if(d){ query = d; }
|
||||
} else {
|
||||
pcs = [];
|
||||
if (s != null && s != undefined) for(i=0; i<s.length; i++) {
|
||||
q = jQuery("[name="+s[i]+"]").serialize();
|
||||
if(q){pcs.push(q);}
|
||||
}
|
||||
if (pcs.length>0){query = pcs.join("&");}
|
||||
}
|
||||
jQuery.ajax({type: "POST", url: u, data: query, success: function(msg) { if(t) { if(t==':eval') eval(msg); else jQuery("#" + t).html(msg); } } });
|
||||
}
|
||||
|
||||
String.prototype.reverse = function () { return this.split('').reverse().join('');};
|
||||
function web2py_ajax_fields(target) {
|
||||
jQuery('input.integer', target).keyup(function(){this.value=this.value.reverse().replace(/[^0-9\-]|\-(?=.)/g,'').reverse();});
|
||||
jQuery('input.double,input.decimal', target).keyup(function(){this.value=this.value.reverse().replace(/[^0-9\-\.,]|[\-](?=.)|[\.,](?=[0-9]*[\.,])/g,'').reverse();});
|
||||
var confirm_message = (typeof w2p_ajax_confirm_message != 'undefined') ? w2p_ajax_confirm_message : "Are you sure you want to delete this object?";
|
||||
jQuery("input[type='checkbox'].delete", target).click(function(){ if(this.checked) if(!confirm(confirm_message)) this.checked=false; });
|
||||
var date_format = (typeof w2p_ajax_date_format != 'undefined') ? w2p_ajax_date_format : "%Y-%m-%d";
|
||||
var datetime_format = (typeof w2p_ajax_datetime_format != 'undefined') ? w2p_ajax_datetime_format : "%Y-%m-%d %H:%M:%S";
|
||||
try {
|
||||
jQuery("input.datetime", target).AnyTime_noPicker().AnyTime_picker({
|
||||
format: datetime_format.replace('%M','%i')});
|
||||
jQuery("input.date", target).AnyTime_noPicker().AnyTime_picker({
|
||||
format: date_format.replace('%M','%i')});
|
||||
jQuery("input.time", target).AnyTime_noPicker().AnyTime_picker({
|
||||
format: "%H:%i:%S"});
|
||||
} catch(e) {};
|
||||
};
|
||||
function web2py_ajax_init(target) {
|
||||
jQuery('.hidden', target).hide();
|
||||
jQuery('.error', target).hide().slideDown('slow');
|
||||
jQuery('.flash', target).click(function(e) { jQuery(this).fadeOut('slow'); e.preventDefault(); });
|
||||
// jQuery('input[type=submit]').click(function(){var t=jQuery(this);t.hide();t.after('<input class="submit_disabled" disabled="disabled" type="submit" name="'+t.attr("name")+'_dummy" value="'+t.val()+'">')});
|
||||
web2py_ajax_fields(target);
|
||||
};
|
||||
|
||||
jQuery(function() {
|
||||
var flash = jQuery('.flash');
|
||||
flash.hide();
|
||||
if(flash.html()) flash.slideDown();
|
||||
web2py_ajax_init(document);
|
||||
});
|
||||
function web2py_trap_form(action,target) {
|
||||
jQuery('#'+target+' form').each(function(i){
|
||||
var form=jQuery(this);
|
||||
if(!form.hasClass('no_trap'))
|
||||
form.submit(function(e){
|
||||
jQuery('.flash').hide().html('');
|
||||
web2py_ajax_page('post',action,form.serialize(),target);
|
||||
e.preventDefault();
|
||||
});
|
||||
});
|
||||
}
|
||||
function web2py_trap_link(target) {
|
||||
jQuery('#'+target+' a.w2p_trap').each(function(i){
|
||||
var link=jQuery(this);
|
||||
link.click(function(e) {
|
||||
jQuery('.flash').hide().html('');
|
||||
web2py_ajax_page('get',link.attr('href'),[],target);
|
||||
e.preventDefault();
|
||||
});
|
||||
});
|
||||
}
|
||||
function web2py_ajax_page(method,action,data,target) {
|
||||
jQuery.ajax({'type':method,'url':action,'data':data,
|
||||
'beforeSend':function(xhr) {
|
||||
xhr.setRequestHeader('web2py-component-location',document.location);
|
||||
xhr.setRequestHeader('web2py-component-element',target);},
|
||||
'complete':function(xhr,text){
|
||||
var html=xhr.responseText;
|
||||
var content=xhr.getResponseHeader('web2py-component-content');
|
||||
var command=xhr.getResponseHeader('web2py-component-command');
|
||||
var flash=xhr.getResponseHeader('web2py-component-flash');
|
||||
var t = jQuery('#'+target);
|
||||
if(content=='prepend') t.prepend(html);
|
||||
else if(content=='append') t.append(html);
|
||||
else if(content!='hide') t.html(html);
|
||||
web2py_trap_form(action,target);
|
||||
web2py_trap_link(target);
|
||||
web2py_ajax_init('#'+target);
|
||||
if(command) eval(command);
|
||||
if(flash) jQuery('.flash').html(flash).slideDown();
|
||||
}
|
||||
});
|
||||
}
|
||||
function web2py_component(action,target) {
|
||||
jQuery(function(){ web2py_ajax_page('get',action,null,target); });
|
||||
}
|
||||
function web2py_comet(url,onmessage,onopen,onclose) {
|
||||
if ("WebSocket" in window) {
|
||||
var ws = new WebSocket(url);
|
||||
ws.onopen = onopen?onopen:(function(){});
|
||||
ws.onmessage = onmessage;
|
||||
ws.onclose = onclose?onclose:(function(){});
|
||||
return true; // supported
|
||||
} else return false; // not supported
|
||||
}
|
||||
Reference in New Issue
Block a user