116 if (typeof window !==
"undefined" && typeof window.navigator !==
"undefined")
120 if (typeof window !==
"undefined" && window.opera)
128 else if (typeof window !==
"undefined" && (window.attachEvent || (!(window.ActiveXObject) &&
"ActiveXObject" in window)))
160 var versionStart =
USER_AGENT.indexOf(
"Edge/") +
"Edge/".length,
161 versionEnd =
USER_AGENT.indexOf(
" ", versionStart),
162 versionString =
USER_AGENT.substring(versionStart, versionEnd),
163 versionDivision = versionString.indexOf(
'.'),
164 majorVersion = parseInt(versionString.substring(0, versionDivision)),
165 minorVersion = parseInt(versionString.substr(versionDivision + 1));
183 var versionStart =
USER_AGENT.indexOf(
"AppleWebKit/") +
"AppleWebKit/".length,
184 versionEnd =
USER_AGENT.indexOf(
" ", versionStart),
185 versionString =
USER_AGENT.substring(versionStart, versionEnd),
186 versionDivision = versionString.indexOf(
'.'),
187 majorVersion = parseInt(versionString.substring(0, versionDivision)),
188 minorVersion = parseInt(versionString.substr(versionDivision + 1));
198 if (majorVersion < 532 || (majorVersion === 532 && minorVersion < 6))
202 if (majorVersion < 537)
215 else if ((window.chrome || (window.Intl && Intl.v8BreakIterator)) &&
'CSS' in window)
219 if (majorVersion > 533)
237 version = (index === -1) ? 2.0 : parseFloat(
USER_AGENT.substring(index +
"Firefox".length + 1));
262 if (typeof document !=
"undefined")
264 var canvasElement = document.createElement(
"canvas");
267 if (canvasElement && canvasElement.getContext)
275 var context = document.createElement(
"canvas").getContext(
"2d");
277 if (context && context.setTransform && context.transform)
281 var DOMElement = document.createElement(
"div");
284 if (DOMElement.innerText != undefined)
286 else if (DOMElement.textContent != undefined)
289 var DOMInputElement = document.createElement(
"input");
291 if (
"oninput" in DOMInputElement)
293 else if (typeof DOMInputElement.setAttribute ===
"function")
295 DOMInputElement.setAttribute(
"oninput",
"return;");
297 if (typeof DOMInputElement.oninput ===
"function")
302 if (typeof DOMInputElement.setAttribute ===
"function")
304 DOMInputElement.setAttribute(
"type",
"file");
378 var lowerProperty = aProperty.toLowerCase();
385 var testElement = document.createElement(
'div');
387 switch (lowerProperty)
389 case 'transitionend':
391 'WebkitTransition' :
'webkitTransitionEnd',
392 'MozTransition' :
'transitionend',
393 'OTransition' :
'oTransitionEnd',
394 'msTransition' :
'MSTransitionEnd',
395 'transition' :
'transitionend' 398 r = candidates[PLATFORM_STYLE_JS_PROPERTIES['transition']] || nil;
401 case 'transformorigin':
404 'WebkitTransform' :
'WebkitTransformOrigin',
405 'MozTransform' :
'MozTransformOrigin',
406 'OTransform' :
'OTransformOrigin',
407 'msTransform' :
'MSTransformOrigin',
408 'transform' :
'transformOrigin' 411 r = candidates[PLATFORM_STYLE_JS_PROPERTIES['transform']] || nil;
416 'WebkitAnimation' :
'webkitAnimationEnd',
417 'MozAnimation' :
'animationend',
418 'OAnimation' :
'oAnimationEnd',
419 'msAnimation' :
'MSAnimationEnd',
420 'animation' :
'animationend' 423 r = candidates[PLATFORM_STYLE_JS_PROPERTIES['animation']] || nil;
427 var prefixes = ["Webkit", "Moz", "O", "ms"],
428 strippedProperty = aProperty.split(
'-').join(
' '),
429 capProperty = [strippedProperty capitalizedString].split(
' ').join(
'');
431 for (var i = 0; i < prefixes.length; i++)
434 if (prefixes[i] + aProperty in testElement.style)
436 r = prefixes[i] + aProperty;
439 else if (prefixes[i] + capProperty in testElement.style)
441 r = prefixes[i] + capProperty;
446 if (!r && lowerProperty in testElement.style)
463 if (!browserProperty)
467 'Webkit':
'-webkit-',
473 for (var prefix in prefixes)
475 if (browserProperty.substring(0, prefix.length) == prefix)
477 var browserPropertyWithoutPrefix = browserProperty.substring(prefix.length),
478 parts = browserPropertyWithoutPrefix.match(/[A-
Z][a-z]+/g);
481 if (parts && parts.length > 0)
482 browserPropertyWithoutPrefix = parts.join(
"-");
484 return prefixes[prefix] + browserPropertyWithoutPrefix.toLowerCase();
488 var parts = browserProperty.match(/[A-
Z][a-z]+/g);
490 if (parts && parts.length > 0)
491 browserProperty = parts.join(
"-");
493 return browserProperty.toLowerCase();
498 return context.webkitBackingStorePixelRatio ||
499 context.mozBackingStorePixelRatio ||
500 context.msBackingStorePixelRatio ||
501 context.oBackingStorePixelRatio ||
502 context.backingStorePixelRatio || 1;
function CPBrowserCSSProperty(aProperty)
CPJavaScriptNegativeMouseWheelValues
function CPBrowserBackingStorePixelRatio(context)
CPJavaScriptInnerTextFeature
CPRedoKeyEquivalentModifierMask
CPInputOnInputEventFeature
CPJavaScriptPasteRequiresEditableTarget
CPJavaScriptClipboardEventsFeature
CPJavaScriptClipboardAccessFeature
CPAltEnterTextAreaFeature
CPJavaScriptTextContentFeature
var PLATFORM_STYLE_JS_PROPERTIES
CPJavaScriptCanvasDrawFeature
CPInternetExplorerBrowserEngine
function CPFeatureIsCompatible(aFeature)
CPInputSetFontOutsideOfDOM
CPJavaScriptMouseWheelValues_8_15
CPHTML5DragAndDropSourceYOffBy1
CPTextSizingAlwaysNeedsSetFontBug
function CPBrowserIsOperatingSystem(anOperatingSystem)
function CPBrowserStyleProperty(aProperty)
function CPSetPlatformFeature(aFeature, aBool)
CPJavaScriptShadowFeature
CPJavaScriptCanvasTransformFeature
CPInputTypeCanBeChangedFeature
CPJavaScriptPasteCantRefocus
CPHTMLContentEditableFeature
CPJavaScriptRemedialKeySupport
CPOpacityRequiresFilterFeature
function CPBrowserIsEngine(anEngine)
CPUndoKeyEquivalentModifierMask
function CPPlatformHasBug(aBug)
CPSOPDisabledFromFileURLs
CPCanvasParentDrawErrorsOnMovementBug