You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2012/12/07 13:54:44 UTC

svn commit: r1418291 - /myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js

Author: werpu
Date: Fri Dec  7 12:54:44 2012
New Revision: 1418291

URL: http://svn.apache.org/viewvc?rev=1418291&view=rev
Log:
https://issues.apache.org/jira/browse/TOMAHAWK-1626

Modified:
    myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js

Modified: myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js?rev=1418291&r1=1418290&r2=1418291&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js (original)
+++ myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js Fri Dec  7 12:54:44 2012
@@ -36,10 +36,10 @@ org_apache_myfaces_CalendarInitData = fu
     this.todayDateFormat = null;
     this.weekString = "Wk";
     this.scrollLeftMessage = "Click to scroll to previous month. Hold mouse button to scroll automatically.";
-    this.scrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically."
-    this.selectMonthMessage = "Click to select a month."
-    this.selectYearMessage = "Click to select a year."
-    this.selectDateMessage = "Select [date] as date." // do not replace [date], it will be replaced by date.
+    this.scrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically.";
+    this.selectMonthMessage = "Click to select a month.";
+    this.selectYearMessage = "Click to select a year.";
+    this.selectDateMessage = "Select [date] as date."; // do not replace [date], it will be replaced by date.
 
     this.popupLeft=false;
 
@@ -47,7 +47,7 @@ org_apache_myfaces_CalendarInitData = fu
     this.dayName = this.startAt == 0 ? new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat") : new Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
 
     this.selectMode = "day";
-}
+};
 
 org_apache_myfaces_DateParts = function(sec, min, hour, date, month, year)
 {
@@ -57,7 +57,7 @@ org_apache_myfaces_DateParts = function(
     this.date = date;
     this.month = month;
     this.year = year;
-}
+};
 
 org_apache_myfaces_HolidayRec = function(d, m, y, desc)
 {
@@ -65,7 +65,7 @@ org_apache_myfaces_HolidayRec = function
     this.m = m;
     this.y = y;
     this.desc = desc;
-}
+};
 
 org_apache_myfaces_PopupCalendar = function()
 {
@@ -76,21 +76,24 @@ org_apache_myfaces_PopupCalendar = funct
 
     this.monthConstructed = false;
     this.yearConstructed = false;
-    this.intervalID1;
-    this.intervalID2;
-    this.timeoutID1;
-    this.timeoutID2;
-    this.ctlToPlaceValue;
-    this.ctlNow;
-    this.containerCtl;
+    this.intervalID1 = null;
+    this.intervalID2 = null;
+    this.timeoutID1 = null;
+    this.timeoutID2 = null;
+    this.ctlToPlaceValue = null;
+    this.ctlNow = null;
+    this.containerCtl = null;
     this.dateFormat="MM/dd/yyyy";
-    this.nStartingYear;
+    this.nStartingYear = null;
     this.bPageLoaded = false;
 
     // Detect whether the browser is Microsoft Internet Explorer.
     // Testing for the presence of document.all is not sufficient, as Opera provides that.
     // However hopefully nothing but IE implements ActiveX..
-    this.ie = window.ActiveXObject ? true : false;
+    // it is only needed to test for ie6 and before ie7 and quirks mode
+    // do not expose the bleed through bug anymore
+    this.ieVersion = this.getInternetExplorerVersion();
+    this.ie6 = this.ieVersion != -1 && this.ieVersion < 7;
 
     this.dom = document.getElementById;
     this.ns4 = document.layers;
@@ -128,7 +131,22 @@ org_apache_myfaces_PopupCalendar = funct
 
     this.myFacesCtlType = "x:inputCalendar";
     this.inputDateClientId;
-}
+};
+
+//http://msdn.microsoft.com/en-us/library/ms537509%28v=vs.85%29.aspx
+org_apache_myfaces_PopupCalendar.prototype.getInternetExplorerVersion = function ()
+    // Returns the version of Internet Explorer or a -1
+    // (indicating the use of another browser).
+{
+    var rv = -1; // Return value assumes failure.
+    if (navigator.appName == 'Microsoft Internet Explorer') {
+        var ua = navigator.userAgent;
+        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
+        if (re.exec(ua) != null)
+            rv = parseFloat(RegExp.$1);
+    }
+    return rv;
+};
 
 org_apache_myfaces_PopupCalendar.prototype._MSECS_PER_DAY = 24*60*60*1000;
 
@@ -147,8 +165,8 @@ org_apache_myfaces_PopupCalendar.prototy
 org_apache_myfaces_PopupCalendar.prototype._showPopupPostProcess = function(overDiv)
 {
 	
-
-    if (this.ie)
+    //ie6 detection over object inspections
+    if (this.ie6)
     {
         // The iframe created here is a hack to work around an IE bug. In IE,
         // "windowed controls" (esp selectboxes) do not respect the z-index
@@ -164,10 +182,10 @@ org_apache_myfaces_PopupCalendar.prototy
         {
             // the source attribute is to avoid a IE error message about non secure content on https connections
             iframe = document.createElement("iframe");
-            iframe.setAttribute("id", overDiv.id + "_IFRAME'");
-            iframe.setAttribute("src", "javascript:false;")
+            iframe.setAttribute("id", overDiv.id + "_IFRAME");
+            iframe.setAttribute("src", "javascript:false;");
             Element.setStyle(iframe, "visibility:hidden; position: absolute; top:0px;left:0px;");
-            
+
             //we can append it lazily since we are late here anyway and everything is rendered
             document.body.appendChild(iframe);
         }
@@ -175,13 +193,13 @@ org_apache_myfaces_PopupCalendar.prototy
         // now put the iframe at the appropriate location, and make it visible.
         this._recalculateElement(overDiv);
     }
-}
+};
 
 // IE bug workaround: hide background controls under the specified div; see _showPopupPostProcess.
 // This should be called whenever a popup div is moved.
 org_apache_myfaces_PopupCalendar.prototype._recalculateElement = function(overDiv)
 {
-    if (this.ie)
+    if (this.ie6)
     {
         var iframe = document.getElementById(overDiv.id + "_IFRAME");
 
@@ -191,21 +209,20 @@ org_apache_myfaces_PopupCalendar.prototy
             // size and position match the div exactly, and set its z-index to just
             // below the div. This hack blocks IE selectboxes from being drawn on top
             // of the div. 
-            var popup = overDiv;
 
-            popup.style.zIndex = 98;
+            overDiv.style.zIndex = 98;
 
-            iframe.style.zIndex = popup.style.zIndex - 1;
-            iframe.style.width = popup.offsetWidth;
-            iframe.style.height = popup.offsetHeight;
-            iframe.style.top = popup.style.top;
-            iframe.style.left = popup.style.left;
+            iframe.style.zIndex = overDiv.style.zIndex - 1;
+            iframe.style.width = overDiv.offsetWidth;
+            iframe.style.height = overDiv.offsetHeight;
+            iframe.style.top = overDiv.style.top;
+            iframe.style.left = overDiv.style.left;
             iframe.style.display = "block";
             iframe.style.visibility = "visible";
             /*we have to set an explicit visible otherwise it wont work*/
         }
     }
-}
+};
 
 // IE bug workaround: unhide background controls that are beneath the specified div; see _showPopupPostProcess.
 // Note that although this is called _showeElement, it is called when the popup is being *hidden*,
@@ -215,24 +232,24 @@ org_apache_myfaces_PopupCalendar.prototy
 {
 	
 
-    if (this.ie)
+    if (this.ie6)
     {
         var iframe = document.getElementById(overDiv.id + "_IFRAME");
         if (iframe) iframe.style.display = "none";
     }
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype.addHoliday = function(d, m, y, desc)
 {
     this.holidays[this.holidaysCounter++] = new org_apache_myfaces_HolidayRec (d, m, y, desc);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._swapImage = function(srcImg, destImg)
 {
 
     if (srcImg)
         srcImg.setAttribute("src", this.initData.imgDir + destImg+ this.initData.imgDirSuffix);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._keypresshandler = function()
 {
@@ -243,7 +260,7 @@ org_apache_myfaces_PopupCalendar.prototy
     {
         this._hideCalendar();
     }
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._clickhandler = function()
 {
@@ -253,22 +270,22 @@ org_apache_myfaces_PopupCalendar.prototy
     }
 
     this.bClickOnCalendar = false;
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._isDaySelectable = function()
 {
   return (this.initData.selectMode == "day");
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._isWeekSelectable = function()
 {
   return (this.initData.selectMode == "week");
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._isMonthSelectable = function()
 {
   return (this.initData.selectMode == "month");
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype.init = function(containerCtl)
 {
@@ -427,7 +444,7 @@ org_apache_myfaces_PopupCalendar.prototy
     if (!this.ns4)
     {
         /* Instead use getFullYear() */
-        /*if (!this.ie)
+        /*if (!this.ie6)
             this.yearNow += 1900;*/
 
         this._hideCalendar();
@@ -527,7 +544,7 @@ org_apache_myfaces_PopupCalendar.prototy
         this.bPageLoaded = true;
 
     }
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._appendNavToCaption = function(direction)
 {
@@ -546,7 +563,7 @@ org_apache_myfaces_PopupCalendar.prototy
     this._appendNbsp(spanLeft);
     this.captionSpan.appendChild(spanLeft);
     this._appendNbsp(spanLeft);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._createControl = function(direction, spanLeft, imgLeft)
 {
@@ -602,18 +619,18 @@ org_apache_myfaces_PopupCalendar.prototy
         clearTimeout(this.timeoutID1);
         clearInterval(this.intervalID1);
     }.bind(this), false);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._appendNbsp = function(element)
 {
     if (element)
         element.appendChild(document.createTextNode(String.fromCharCode(160)));
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._todayIsDate = function()
 {
     return this.todayDateFormatter.format(this.today);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._hideCalendar = function()
 {
@@ -631,18 +648,18 @@ org_apache_myfaces_PopupCalendar.prototy
     this._hidePopupPostProcess(this.selectMonthDiv);
     this._hidePopupPostProcess(this.selectYearDiv);
     this._hidePopupPostProcess(this.calendarDiv);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._padZero = function(num)
 {
     return (num < 10)? '0' + num : num;
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._constructDate = function(d, m, y)
 {
     var date = new Date(y, m, d, this.selectedDate.hour, this.selectedDate.min, this.selectedDate.sec);
     return this.stdDateFormatter.format(date);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._closeCalendar = function()
 {
@@ -663,7 +680,7 @@ org_apache_myfaces_PopupCalendar.prototy
         document.getElementById(this.myFacesInputDateClientId + ".month").value = this.selectedDate.month + 1;
         document.getElementById(this.myFacesInputDateClientId + ".year").value = this.selectedDate.year;
     }
-}
+};
 
 /*** Month Pulldown ***/
 
@@ -671,7 +688,7 @@ org_apache_myfaces_PopupCalendar.prototy
 {
     this.intervalID1 = setInterval((function()
     {
-        this._decMonth
+        this._decMonth();
     }).bind(this), 80);
 }
 
@@ -679,7 +696,7 @@ org_apache_myfaces_PopupCalendar.prototy
 {
     this.intervalID1 = setInterval((function()
     {
-        this._incMonth
+        this._incMonth();
     }).bind(this), 80);
 }
 
@@ -699,18 +716,18 @@ org_apache_myfaces_PopupCalendar.prototy
     this.selectedDate.month = this.selectedDate.month - 1;
     if (this.selectedDate.month < 0)
     {
-        this.selectedDate.month = 11
-        this.selectedDate.year--
+        this.selectedDate.month = 11;
+        this.selectedDate.year--;
     }
     this._constructCalendar()
-}
+};
 
 
 org_apache_myfaces_PopupCalendar.prototype._removeAllChildren = function(element)
 {
     while (element && element.hasChildNodes())
         element.removeChild(element.lastChild);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._constructMonth = function()
 {
@@ -794,38 +811,38 @@ org_apache_myfaces_PopupCalendar.prototy
 
         this.monthConstructed = true;
     }
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._popUpMonth = function()
 {
     this._constructMonth()
     this._fixPopupDomOrder(this.selectMonthDiv);
-    this.selectMonthDiv.style.visibility = (this.dom || this.ie)? "visible"    : "show"
+    this.selectMonthDiv.style.visibility = (this.dom || this.ie6)? "visible"    : "show";
     this.selectMonthDiv.style.left = parseInt(this._formatInt(this.calendarDiv.style.left), 10) + 50 + "px";
     this.selectMonthDiv.style.top = parseInt(this._formatInt(this.calendarDiv.style.top), 10) + 26 + "px";
 
     this._showPopupPostProcess(this.selectMonthDiv);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._popDownMonth = function()
 {
     this.selectMonthDiv.style.visibility = "hidden";
     this._hidePopupPostProcess(this.selectMonthDiv);
-}
+};
 
 /*** Year Pulldown ***/
 
 org_apache_myfaces_PopupCalendar.prototype._incYear = function()
 {
-    for (i = 0; i < 7; i++)
+    for (var i = 0; i < 7; i++)
     {
-        newYear = (i + this.nStartingYear) + 1;
+        var newYear = (i + this.nStartingYear) + 1;
 
         this._createAndAddYear(newYear, i);
     }
     this.nStartingYear++;
     this.bClickOnCalendar = true;
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._createAndAddYear = function(newYear, i)
 {
@@ -850,20 +867,20 @@ org_apache_myfaces_PopupCalendar.prototy
     }
 
     parentNode.setAttribute("userData",newYear);
-}
+};
 
 
 org_apache_myfaces_PopupCalendar.prototype._decYear = function()
 {
     for (i = 0; i < 7; i++)
     {
-        newYear = (i + this.nStartingYear) - 1;
+        var newYear = (i + this.nStartingYear) - 1;
 
         this._createAndAddYear(newYear, i);
     }
     this.nStartingYear--;
     this.bClickOnCalendar = true;
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._constructYear = function()
 {
@@ -1030,7 +1047,7 @@ org_apache_myfaces_PopupCalendar.prototy
 
         this.yearConstructed = true;
     }
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._popDownYear = function()
 {
@@ -1040,22 +1057,22 @@ org_apache_myfaces_PopupCalendar.prototy
     clearTimeout(this.timeoutID2);
     this.selectYearDiv.style.visibility = "hidden";
     this._hidePopupPostProcess(this.selectYearDiv);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._popUpYear = function()
 {
     var leftOffset;
 	this._fixPopupDomOrder(this.selectYearDiv);
     this._constructYear();
-    this.selectYearDiv.style.visibility = (this.dom || this.ie) ? "visible" : "show";
+    this.selectYearDiv.style.visibility = (this.dom || this.ie6) ? "visible" : "show";
     leftOffset = parseInt(this._formatInt(this.calendarDiv.style.left), 10) + this.yearSpan.offsetLeft;
-    if (this.ie)
+    if (this.ie6)
         leftOffset += 6;
     this.selectYearDiv.style.left = leftOffset + "px";
     this.selectYearDiv.style.top = parseInt(this._formatInt(this.calendarDiv.style.top), 10) + 26 + "px";
 
     this._showPopupPostProcess(this.selectYearDiv);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._appendCell = function(parentElement, value)
 {
@@ -1072,7 +1089,7 @@ org_apache_myfaces_PopupCalendar.prototy
     }
 
     parentElement.appendChild(cell);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._getDateStyle = function(datePointer)
 {
@@ -1109,7 +1126,7 @@ org_apache_myfaces_PopupCalendar.prototy
     }
 
     return sStyle;
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._getHolidayHint = function(datePointer)
 {
@@ -1126,7 +1143,7 @@ org_apache_myfaces_PopupCalendar.prototy
     }
 
     return sHint;
-}
+};
 
 
 org_apache_myfaces_PopupCalendar.prototype._addWeekCell = function(currentRow, startDate, weekSelectable,
@@ -1188,7 +1205,7 @@ org_apache_myfaces_PopupCalendar.prototy
     }
 
     currentRow.appendChild(cell);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._constructCalendar = function()
 {
@@ -1241,7 +1258,7 @@ org_apache_myfaces_PopupCalendar.prototy
 
         var dividerCell = document.createElement("td");
         Element.setStyle(dividerCell, "width:1px;");
-        if(this.ie) //fix for https://issues.apache.org/jira/browse/TOMAHAWK-1184
+        if(this.ie6) //fix for https://issues.apache.org/jira/browse/TOMAHAWK-1184
         	dividerCell.setAttribute("rowSpan", "7");
         else	
         	dividerCell.setAttribute("rowspan", "7");
@@ -1409,7 +1426,7 @@ org_apache_myfaces_PopupCalendar.prototy
     this.closeCalendarSpan.appendChild(closeButtonImg);
 
     this._recalculateElement(this.calendarDiv);
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._popUpCalendar = function(ctl, ctl2, format)
 {
@@ -1464,7 +1481,7 @@ org_apache_myfaces_PopupCalendar.prototy
         }
     }
     this.ctlNow = ctl;
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._popUpCalendarForInputDate = function(clientId, format)
 {
@@ -1484,7 +1501,7 @@ org_apache_myfaces_PopupCalendar.prototy
         this.ctlNow = document.getElementById(clientId + ".day");
         this._popUpCalendar_Show(document.getElementById(clientId + ".day"));
     }
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._getStyle = function(ctl, property)
 {
@@ -1507,7 +1524,7 @@ org_apache_myfaces_PopupCalendar.prototy
        }
     }
 	return value;
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._popUpCalendar_Show = function(ctl)
 {
@@ -1600,7 +1617,7 @@ org_apache_myfaces_PopupCalendar.prototy
     this.calendarDiv.style.top = this.initData.fixedY == -1 ? top + "px": this.initData.fixedY;
     this._constructCalendar(1, this.selectedDate.month, this.selectedDate.year);
 
-    this.calendarDiv.style.visibility = (this.dom || this.ie)? "visible" : "show";
+    this.calendarDiv.style.visibility = (this.dom || this.ie6)? "visible" : "show";
     this.bCalendarHidden = false;
 
     setTimeout((function()
@@ -1611,7 +1628,7 @@ org_apache_myfaces_PopupCalendar.prototy
     this._showPopupPostProcess(this.calendarDiv);
 
     this.bClickOnCalendar = true;
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._getVisibleBodyRectangle = function()
 {
@@ -1655,7 +1672,7 @@ org_apache_myfaces_PopupCalendar.prototy
         visibleRect.bottom = visibleRect.top + document.body.clientHeight;
     }
     return visibleRect;
-}
+};
 
 org_apache_myfaces_PopupCalendar.prototype._formatInt = function(str)
 {
@@ -1672,7 +1689,7 @@ org_apache_myfaces_PopupCalendar.prototy
     }
     return str;
 
-}
+};
 
 function org_apache_myfaces_Rectangle()
 {