[Rt-commit] r16129 - in rt/branches/3.999-DANGEROUS: share/web/static/js
sunnavy at bestpractical.com
sunnavy at bestpractical.com
Sat Sep 27 23:12:03 EDT 2008
Author: sunnavy
Date: Sat Sep 27 23:12:03 2008
New Revision: 16129
Added:
rt/branches/3.999-DANGEROUS/share/web/static/js/calendar.js
Modified:
rt/branches/3.999-DANGEROUS/ (props changed)
Log:
r16925 at sunnavys-mb: sunnavy | 2008-09-28 11:09:14 +0800
add modified calendar.js to RT so we can input time too
Added: rt/branches/3.999-DANGEROUS/share/web/static/js/calendar.js
==============================================================================
--- (empty file)
+++ rt/branches/3.999-DANGEROUS/share/web/static/js/calendar.js Sat Sep 27 23:12:03 2008
@@ -0,0 +1,144 @@
+if ( typeof Jifty == "undefined" ) Jifty = { };
+
+Jifty.Calendar = {
+ registerDateWidget: function(id) {
+ jQuery(id).bind("focus", Jifty.Calendar.toggleCalendar)
+ .bind("blur", Jifty.Calendar.doBlur);
+
+ return true;
+ },
+
+ dateRegex: /^(\d{4})\W(\d{2})\W(\d{2})( (\d{2}):(\d{2}):(\d{2}))?/,
+
+ Options: {
+ OUT_OF_MONTH_SELECT: true
+ },
+
+ toggleCalendar: function() {
+ var calId = "cal_" + this.id;
+ var wrapId = calId + "_wrap";
+ var wrap = document.getElementById(wrapId);
+
+ if ( Jifty.Calendar.openCalendar == wrapId ) {
+ Jifty.Calendar.hideOpenCalendar();
+ return;
+ }
+
+ Jifty.Calendar.hideOpenCalendar();
+
+ /* We need to delay Jifty's canonicalization until after we've
+ selected a value via the calendar */
+ Jifty.Form.Element.disableValidation(this);
+
+ wrap = document.createElement("div");
+ wrap.setAttribute( "id", wrapId );
+ wrap.setAttribute( "class", "select-free" );
+
+ wrap.style.position = "absolute";
+ wrap.style.left = Jifty.Utils.findRelativePosX( this ) + "px";
+ wrap.style.top = Jifty.Utils.findRelativePosY( this ) + this.offsetHeight + "px";
+ wrap.style.zIndex = 40;
+
+ this.parentNode.insertBefore( wrap, this.nextSibling );
+
+ var cal;
+
+ if (Jifty.Calendar.dateRegex.test(this.value) ) {
+ var bits = this.value.match(Jifty.Calendar.dateRegex);
+ cal = new YAHOO.widget.Calendar( calId,
+ wrapId,
+ { pagedate: bits[2]+"/"+bits[1],
+ selected: bits[2]+"/"+bits[3]+"/"+bits[1] }
+ );
+ }
+ else {
+ cal = new YAHOO.widget.Calendar( calId, wrapId );
+ }
+
+ cal.cfg.applyConfig( Jifty.Calendar.Options );
+ cal.cfg.fireQueue();
+
+ cal.selectEvent.subscribe( Jifty.Calendar.handleSelect, { input: this, calendar: cal }, true );
+ cal.changePageEvent.subscribe( function() { setTimeout( function() { Jifty.Calendar._blurredCalendar = null; }, 75 ) }, null, false );
+
+ cal.render();
+
+ Jifty.Calendar.openCalendar = wrapId;
+ Jifty.Utils.scrollToShow( wrapId );
+ /*Jifty.Calendar.preventStutter = wrapId;*/
+ },
+
+ handleSelect: function(type, args, obj) {
+ // args = [ [ [yyyy, mm, dd] ] ]
+ var year = args[0][0][0],
+ month = args[0][0][1],
+ day = args[0][0][2],
+ time = ' 00:00:00';
+
+ if (month < 10)
+ month = "0" + month;
+
+ if (day < 10)
+ day = "0" + day;
+
+ if ( Jifty.Calendar.dateRegex.test(jQuery(obj.input).val()) ) {
+ var bits = jQuery(obj.input).val().match(Jifty.Calendar.dateRegex);
+ time = bits[4];
+ };
+ jQuery(obj.input).val(year + "-" + month + "-" + day + time);
+ // Trigger an onchange event for any listeners
+ jQuery(obj.input).change();
+
+ Jifty.Calendar.hideOpenCalendar();
+ },
+
+ openCalendar: "",
+
+ hideOpenCalendar: function() {
+ if ( Jifty.Calendar.openCalendar && document.getElementById( Jifty.Calendar.openCalendar ) ) {
+
+ /* Get the input's ID */
+ var inputId = Jifty.Calendar.openCalendar;
+ inputId = inputId.replace(/^cal_/, '');
+ inputId = inputId.replace(/_wrap$/, '');
+
+ // XXX: jQuery(Jifty.Calendar.openCalendar).remove() doesn't work for some reason
+ var cal = document.getElementById(Jifty.Calendar.openCalendar);
+ cal.parentNode.removeChild(cal);
+
+ var input = document.getElementById( inputId );
+
+ /* Reenable canonicalization, and do it */
+ Jifty.Form.Element.enableValidation(input);
+ Jifty.Form.Element.validate(input);
+
+ Jifty.Calendar.openCalendar = "";
+ }
+ },
+
+ _doneBlurOnce: false,
+ _blurredCalendar: null,
+ doBlur: function(ev) {
+ if ( Jifty.Calendar.openCalendar && !Jifty.Calendar._doneBlurOnce ) {
+ Jifty.Calendar._doneBlurOnce = true;
+ Jifty.Calendar._blurredCalendar = Jifty.Calendar.openCalendar;
+ setTimeout( Jifty.Calendar.doBlur, 200 );
+ return;
+ }
+ else if ( Jifty.Calendar._doneBlurOnce
+ && Jifty.Calendar._blurredCalendar == Jifty.Calendar.openCalendar )
+ {
+ Jifty.Calendar.hideOpenCalendar();
+ }
+ Jifty.Calendar._doneBlurOnce = false;
+ Jifty.Calendar._blurredCalendar = null;
+ }
+};
+
+Behaviour.register({
+ 'input.datetime': function(e) {
+ if ( !jQuery(e).hasClass('has_calendar_link') ) {
+ createCalendarLink(e);
+ jQuery(e).addClass('has_calendar_link');
+ }
+ } } );
More information about the Rt-commit
mailing list