modernizr
Version:
Modernizr is a JavaScript library that detects HTML5 and CSS3 features in the user’s browser.
52 lines (48 loc) • 2.04 kB
JavaScript
/*!
{
"name": "input[type=\"number\"] Localization",
"property": "localizednumber",
"tags": ["forms", "localization", "attribute"],
"authors": ["Peter Janes"],
"notes": [{
"name": "Webkit Bug Tracker Listing",
"href": "https://bugs.webkit.org/show_bug.cgi?id=42484"
},{
"name": "Based on This",
"href": "https://trac.webkit.org/browser/trunk/LayoutTests/fast/forms/script-tests/input-number-keyoperation.js?rev=80096#L9"
}],
"knownBugs": ["Only ever returns true if the browser/OS is configured to use comma as a decimal separator. This is probably fine for most use cases."]
}
!*/
/* DOC
Detects whether input type="number" is capable of receiving and displaying localized numbers, e.g. with comma separator.
*/
define(['Modernizr', 'createElement', 'docElement', 'getBody', 'test/inputtypes', 'test/forms/validation'], function(Modernizr, createElement, docElement, getBody) {
Modernizr.addTest('localizednumber', function() {
// this extends our testing of input[type=number], so bomb out if that's missing
if (!Modernizr.inputtypes.number) { return false; }
// we rely on checkValidity later, so bomb out early if we don't have it
if (!Modernizr.formvalidation) { return false; }
var el = createElement('div');
var diff;
var body = getBody();
var root = (function() {
return docElement.insertBefore(body, docElement.firstElementChild || docElement.firstChild);
}());
el.innerHTML = '<input type="number" value="1.0" step="0.1"/>';
var input = el.childNodes[0];
root.appendChild(el);
input.focus();
try {
document.execCommand('SelectAll', false); // Overwrite current input value, rather than appending text
document.execCommand('InsertText', false, '1,1');
} catch (e) { // prevent warnings in IE
}
diff = input.type === 'number' && input.valueAsNumber === 1.1 && input.checkValidity();
root.removeChild(el);
if (body.fake) {
root.parentNode.removeChild(root);
}
return diff;
});
});