102 if (typeof window !==
"undefined" && typeof window.navigator !==
"undefined")
106 if (typeof window !==
"undefined" && window.opera)
114 else if (typeof window !==
"undefined" && window.attachEvent)
147 var versionStart =
USER_AGENT.indexOf(
"AppleWebKit/") +
"AppleWebKit/".length,
148 versionEnd =
USER_AGENT.indexOf(
" ", versionStart),
149 versionString =
USER_AGENT.substring(versionStart, versionEnd),
150 versionDivision = versionString.indexOf(
'.'),
151 majorVersion = parseInt(versionString.substring(0, versionDivision)),
152 minorVersion = parseInt(versionString.substr(versionDivision + 1));
162 if (majorVersion < 532 || (majorVersion === 532 && minorVersion < 6))
166 if (majorVersion < 537)
180 if (majorVersion > 533)
198 version = (index === -1) ? 2.0 : parseFloat(
USER_AGENT.substring(index +
"Firefox".length + 1));
222 if (typeof document !=
"undefined")
224 var canvasElement = document.createElement(
"canvas");
227 if (canvasElement && canvasElement.getContext)
235 var context = document.createElement(
"canvas").getContext(
"2d");
237 if (context && context.setTransform && context.transform)
241 var DOMElement = document.createElement(
"div");
244 if (DOMElement.innerText != undefined)
246 else if (DOMElement.textContent != undefined)
249 var DOMInputElement = document.createElement(
"input");
251 if (
"oninput" in DOMInputElement)
253 else if (typeof DOMInputElement.setAttribute ===
"function")
255 DOMInputElement.setAttribute(
"oninput",
"return;");
257 if (typeof DOMInputElement.oninput ===
"function")
262 if (typeof DOMInputElement.setAttribute ===
"function")
264 DOMInputElement.setAttribute(
"type",
"file");
330 var lowerProperty = aProperty.toLowerCase();
337 var testElement = document.createElement(
'div');
339 switch (lowerProperty)
341 case 'transitionend':
343 'WebkitTransition' :
'webkitTransitionEnd',
344 'MozTransition' :
'transitionend',
345 'OTransition' :
'oTransitionEnd',
346 'msTransition' :
'MSTransitionEnd',
347 'transition' :
'transitionend'
353 case 'transformorigin':
356 'WebkitTransform' :
'WebkitTransformOrigin',
357 'MozTransform' :
'MozTransformOrigin',
358 'OTransform' :
'OTransformOrigin',
359 'msTransform' :
'MSTransformOrigin',
360 'transform' :
'transformOrigin'
367 var prefixes = [
"Webkit",
"Moz",
"O",
"ms"],
368 strippedProperty = aProperty.split(
'-').join(
' '),
369 capProperty = [strippedProperty capitalizedString].split(
' ').join(
'');
371 for (var i = 0; i < prefixes.length; i++)
374 if (prefixes[i] + aProperty in testElement.style)
376 r = prefixes[i] + aProperty;
379 else if (prefixes[i] + capProperty in testElement.style)
381 r = prefixes[i] + capProperty;
386 if (!r && lowerProperty in testElement.style)
403 if (!browserProperty)
407 'Webkit':
'-webkit-',
413 for (var prefix in prefixes)
415 if (browserProperty.substring(0, prefix.length) == prefix)
417 var browserPropertyWithoutPrefix = browserProperty.substring(prefix.length),
418 parts = browserPropertyWithoutPrefix.match(/[A-
Z][a-z]+/g);
421 if (parts && parts.length > 0)
422 browserPropertyWithoutPrefix = parts.join(
"-");
424 return prefixes[prefix] + browserPropertyWithoutPrefix.toLowerCase();
428 var parts = browserProperty.match(/[A-
Z][a-z]+/g);
430 if (parts && parts.length > 0)
431 browserProperty = parts.join(
"-");
433 return browserProperty.toLowerCase();