/django/contrib/admin/media/js/core.js
JavaScript | 221 lines | 161 code | 21 blank | 39 comment | 42 complexity | c549fd6812ac00be6733b70cb84ce3a0 MD5 | raw file
1// Core javascript helper functions 2 3// basic browser identification & version 4var isOpera = (navigator.userAgent.indexOf("Opera")>=0) && parseFloat(navigator.appVersion); 5var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]); 6 7// Cross-browser event handlers. 8function addEvent(obj, evType, fn) { 9 if (obj.addEventListener) { 10 obj.addEventListener(evType, fn, false); 11 return true; 12 } else if (obj.attachEvent) { 13 var r = obj.attachEvent("on" + evType, fn); 14 return r; 15 } else { 16 return false; 17 } 18} 19 20function removeEvent(obj, evType, fn) { 21 if (obj.removeEventListener) { 22 obj.removeEventListener(evType, fn, false); 23 return true; 24 } else if (obj.detachEvent) { 25 obj.detachEvent("on" + evType, fn); 26 return true; 27 } else { 28 return false; 29 } 30} 31 32// quickElement(tagType, parentReference, textInChildNode, [, attribute, attributeValue ...]); 33function quickElement() { 34 var obj = document.createElement(arguments[0]); 35 if (arguments[2] != '' && arguments[2] != null) { 36 var textNode = document.createTextNode(arguments[2]); 37 obj.appendChild(textNode); 38 } 39 var len = arguments.length; 40 for (var i = 3; i < len; i += 2) { 41 obj.setAttribute(arguments[i], arguments[i+1]); 42 } 43 arguments[1].appendChild(obj); 44 return obj; 45} 46 47// ---------------------------------------------------------------------------- 48// Cross-browser xmlhttp object 49// from http://jibbering.com/2002/4/httprequest.html 50// ---------------------------------------------------------------------------- 51var xmlhttp; 52/*@cc_on @*/ 53/*@if (@_jscript_version >= 5) 54 try { 55 xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 56 } catch (e) { 57 try { 58 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 59 } catch (E) { 60 xmlhttp = false; 61 } 62 } 63@else 64 xmlhttp = false; 65@end @*/ 66if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { 67 xmlhttp = new XMLHttpRequest(); 68} 69 70// ---------------------------------------------------------------------------- 71// Find-position functions by PPK 72// See http://www.quirksmode.org/js/findpos.html 73// ---------------------------------------------------------------------------- 74function findPosX(obj) { 75 var curleft = 0; 76 if (obj.offsetParent) { 77 while (obj.offsetParent) { 78 curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft); 79 obj = obj.offsetParent; 80 } 81 // IE offsetParent does not include the top-level 82 if (isIE && obj.parentElement){ 83 curleft += obj.offsetLeft - obj.scrollLeft; 84 } 85 } else if (obj.x) { 86 curleft += obj.x; 87 } 88 return curleft; 89} 90 91function findPosY(obj) { 92 var curtop = 0; 93 if (obj.offsetParent) { 94 while (obj.offsetParent) { 95 curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop); 96 obj = obj.offsetParent; 97 } 98 // IE offsetParent does not include the top-level 99 if (isIE && obj.parentElement){ 100 curtop += obj.offsetTop - obj.scrollTop; 101 } 102 } else if (obj.y) { 103 curtop += obj.y; 104 } 105 return curtop; 106} 107 108//----------------------------------------------------------------------------- 109// Date object extensions 110// ---------------------------------------------------------------------------- 111Date.prototype.getCorrectYear = function() { 112 // Date.getYear() is unreliable -- 113 // see http://www.quirksmode.org/js/introdate.html#year 114 var y = this.getYear() % 100; 115 return (y < 38) ? y + 2000 : y + 1900; 116} 117 118Date.prototype.getTwelveHours = function() { 119 hours = this.getHours(); 120 if (hours == 0) { 121 return 12; 122 } 123 else { 124 return hours <= 12 ? hours : hours-12 125 } 126} 127 128Date.prototype.getTwoDigitMonth = function() { 129 return (this.getMonth() < 9) ? '0' + (this.getMonth()+1) : (this.getMonth()+1); 130} 131 132Date.prototype.getTwoDigitDate = function() { 133 return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); 134} 135 136Date.prototype.getTwoDigitTwelveHour = function() { 137 return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); 138} 139 140Date.prototype.getTwoDigitHour = function() { 141 return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); 142} 143 144Date.prototype.getTwoDigitMinute = function() { 145 return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); 146} 147 148Date.prototype.getTwoDigitSecond = function() { 149 return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); 150} 151 152Date.prototype.getISODate = function() { 153 return this.getCorrectYear() + '-' + this.getTwoDigitMonth() + '-' + this.getTwoDigitDate(); 154} 155 156Date.prototype.getHourMinute = function() { 157 return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute(); 158} 159 160Date.prototype.getHourMinuteSecond = function() { 161 return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond(); 162} 163 164Date.prototype.strftime = function(format) { 165 var fields = { 166 c: this.toString(), 167 d: this.getTwoDigitDate(), 168 H: this.getTwoDigitHour(), 169 I: this.getTwoDigitTwelveHour(), 170 m: this.getTwoDigitMonth(), 171 M: this.getTwoDigitMinute(), 172 p: (this.getHours() >= 12) ? 'PM' : 'AM', 173 S: this.getTwoDigitSecond(), 174 w: '0' + this.getDay(), 175 x: this.toLocaleDateString(), 176 X: this.toLocaleTimeString(), 177 y: ('' + this.getFullYear()).substr(2, 4), 178 Y: '' + this.getFullYear(), 179 '%' : '%' 180 }; 181 var result = '', i = 0; 182 while (i < format.length) { 183 if (format.charAt(i) === '%') { 184 result = result + fields[format.charAt(i + 1)]; 185 ++i; 186 } 187 else { 188 result = result + format.charAt(i); 189 } 190 ++i; 191 } 192 return result; 193} 194 195// ---------------------------------------------------------------------------- 196// String object extensions 197// ---------------------------------------------------------------------------- 198String.prototype.pad_left = function(pad_length, pad_string) { 199 var new_string = this; 200 for (var i = 0; new_string.length < pad_length; i++) { 201 new_string = pad_string + new_string; 202 } 203 return new_string; 204} 205 206// ---------------------------------------------------------------------------- 207// Get the computed style for and element 208// ---------------------------------------------------------------------------- 209function getStyle(oElm, strCssRule){ 210 var strValue = ""; 211 if(document.defaultView && document.defaultView.getComputedStyle){ 212 strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); 213 } 214 else if(oElm.currentStyle){ 215 strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){ 216 return p1.toUpperCase(); 217 }); 218 strValue = oElm.currentStyle[strCssRule]; 219 } 220 return strValue; 221}