105 if (typeof window !==
"undefined" && typeof window.navigator !==
"undefined")
109 if (typeof window !==
"undefined" && window.opera)
117 else if (typeof window !==
"undefined" && window.attachEvent)
150 var versionStart =
USER_AGENT.indexOf(
"AppleWebKit/") +
"AppleWebKit/".length,
151 versionEnd =
USER_AGENT.indexOf(
" ", versionStart),
152 versionString =
USER_AGENT.substring(versionStart, versionEnd),
153 versionDivision = versionString.indexOf(
'.'),
154 majorVersion = parseInt(versionString.substring(0, versionDivision)),
155 minorVersion = parseInt(versionString.substr(versionDivision + 1));
165 if (majorVersion < 532 || (majorVersion === 532 && minorVersion < 6))
169 if (majorVersion < 537)
183 if (majorVersion > 533)
201 version = (index === -1) ? 2.0 : parseFloat(
USER_AGENT.substring(index +
"Firefox".length + 1));
226 if (typeof document !=
"undefined")
228 var canvasElement = document.createElement(
"canvas");
231 if (canvasElement && canvasElement.getContext)
239 var context = document.createElement(
"canvas").getContext(
"2d");
241 if (context && context.setTransform && context.transform)
245 var DOMElement = document.createElement(
"div");
248 if (DOMElement.innerText != undefined)
250 else if (DOMElement.textContent != undefined)
253 var DOMInputElement = document.createElement(
"input");
255 if (
"oninput" in DOMInputElement)
257 else if (typeof DOMInputElement.setAttribute ===
"function")
259 DOMInputElement.setAttribute(
"oninput",
"return;");
261 if (typeof DOMInputElement.oninput ===
"function")
266 if (typeof DOMInputElement.setAttribute ===
"function")
268 DOMInputElement.setAttribute(
"type",
"file");
334 var lowerProperty = aProperty.toLowerCase();
341 var testElement = document.createElement(
'div');
343 switch (lowerProperty)
345 case 'transitionend':
347 'WebkitTransition' :
'webkitTransitionEnd',
348 'MozTransition' :
'transitionend',
349 'OTransition' :
'oTransitionEnd',
350 'msTransition' :
'MSTransitionEnd',
351 'transition' :
'transitionend'
357 case 'transformorigin':
360 'WebkitTransform' :
'WebkitTransformOrigin',
361 'MozTransform' :
'MozTransformOrigin',
362 'OTransform' :
'OTransformOrigin',
363 'msTransform' :
'MSTransformOrigin',
364 'transform' :
'transformOrigin'
371 var prefixes = [
"Webkit",
"Moz",
"O",
"ms"],
372 strippedProperty = aProperty.split(
'-').join(
' '),
373 capProperty = [strippedProperty capitalizedString].split(
' ').join(
'');
375 for (var i = 0; i < prefixes.length; i++)
378 if (prefixes[i] + aProperty in testElement.style)
380 r = prefixes[i] + aProperty;
383 else if (prefixes[i] + capProperty in testElement.style)
385 r = prefixes[i] + capProperty;
390 if (!r && lowerProperty in testElement.style)
407 if (!browserProperty)
411 'Webkit':
'-webkit-',
417 for (var prefix in prefixes)
419 if (browserProperty.substring(0, prefix.length) == prefix)
421 var browserPropertyWithoutPrefix = browserProperty.substring(prefix.length),
422 parts = browserPropertyWithoutPrefix.match(/[A-
Z][a-z]+/g);
425 if (parts && parts.length > 0)
426 browserPropertyWithoutPrefix = parts.join(
"-");
428 return prefixes[prefix] + browserPropertyWithoutPrefix.toLowerCase();
432 var parts = browserProperty.match(/[A-
Z][a-z]+/g);
434 if (parts && parts.length > 0)
435 browserProperty = parts.join(
"-");
437 return browserProperty.toLowerCase();
442 return context.webkitBackingStorePixelRatio ||
443 context.mozBackingStorePixelRatio ||
444 context.msBackingStorePixelRatio ||
445 context.oBackingStorePixelRatio ||
446 context.backingStorePixelRatio || 1;