@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
90 lines (83 loc) • 7.16 kB
JavaScript
/*
* @method normalizeProperty
* @param element {HTMLElement}
* @param slotName {String}
* @returns {Object} { name, type }
*/
export function normalizeProperty(element, slotName) {
var type, normalized;
if (slotName in element) {
normalized = slotName;
type = 'prop';
} else {
var lower = slotName.toLowerCase();
if (lower in element) {
type = 'prop';
normalized = lower;
} else {
type = 'attr';
normalized = slotName;
}
}
if (type === 'prop' && (normalized.toLowerCase() === 'style' || preferAttr(element.tagName, normalized))) {
type = 'attr';
}
return {
normalized: normalized,
type: type
};
}
export function normalizePropertyValue(value) {
if (value === '') {
return true;
}
return value;
} // properties that MUST be set as attributes, due to:
// * browser bug
// * strange spec outlier
var ATTR_OVERRIDES = {
INPUT: {
form: true,
// Chrome 46.0.2464.0: 'autocorrect' in document.createElement('input') === false
// Safari 8.0.7: 'autocorrect' in document.createElement('input') === false
// Mobile Safari (iOS 8.4 simulator): 'autocorrect' in document.createElement('input') === true
autocorrect: true,
// Chrome 54.0.2840.98: 'list' in document.createElement('input') === true
// Safari 9.1.3: 'list' in document.createElement('input') === false
list: true
},
// element.form is actually a legitimate readOnly property, that is to be
// mutated, but must be mutated by setAttribute...
SELECT: {
form: true
},
OPTION: {
form: true
},
TEXTAREA: {
form: true
},
LABEL: {
form: true
},
FIELDSET: {
form: true
},
LEGEND: {
form: true
},
OBJECT: {
form: true
},
OUTPUT: {
form: true
},
BUTTON: {
form: true
}
};
function preferAttr(tagName, propName) {
var tag = ATTR_OVERRIDES[tagName.toUpperCase()];
return tag && tag[propName.toLowerCase()] || false;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2RvbS9wcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7Ozs7O0FBTUEsT0FBTSxTQUFBLGlCQUFBLENBQUEsT0FBQSxFQUFBLFFBQUEsRUFBb0U7QUFDeEUsTUFBQSxJQUFBLEVBQUEsVUFBQTs7QUFFQSxNQUFJLFFBQVEsSUFBWixPQUFBLEVBQXlCO0FBQ3ZCLElBQUEsVUFBVSxHQUFWLFFBQUE7QUFDQSxJQUFBLElBQUksR0FBSixNQUFBO0FBRkYsR0FBQSxNQUdPO0FBQ0wsUUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFwQixXQUFZLEVBQVo7O0FBQ0EsUUFBSSxLQUFLLElBQVQsT0FBQSxFQUFzQjtBQUNwQixNQUFBLElBQUksR0FBSixNQUFBO0FBQ0EsTUFBQSxVQUFVLEdBQVYsS0FBQTtBQUZGLEtBQUEsTUFHTztBQUNMLE1BQUEsSUFBSSxHQUFKLE1BQUE7QUFDQSxNQUFBLFVBQVUsR0FBVixRQUFBO0FBQ0Q7QUFDRjs7QUFFRCxNQUNFLElBQUksS0FBSixNQUFBLEtBQ0MsVUFBVSxDQUFWLFdBQUEsT0FBQSxPQUFBLElBQXdDLFVBQVUsQ0FBQyxPQUFPLENBQVIsT0FBQSxFQUZyRCxVQUVxRCxDQURuRCxDQURGLEVBR0U7QUFDQSxJQUFBLElBQUksR0FBSixNQUFBO0FBQ0Q7O0FBRUQsU0FBTztBQUFFLElBQUEsVUFBRixFQUFFLFVBQUY7QUFBYyxJQUFBLElBQUEsRUFBQTtBQUFkLEdBQVA7QUFDRDtBQUVELE9BQU0sU0FBQSxzQkFBQSxDQUFBLEtBQUEsRUFBK0M7QUFDbkQsTUFBSSxLQUFLLEtBQVQsRUFBQSxFQUFrQjtBQUNoQixXQUFBLElBQUE7QUFDRDs7QUFFRCxTQUFBLEtBQUE7RUFHRjtBQUNBO0FBQ0E7O0FBQ0EsSUFBTSxjQUFjLEdBQWU7QUFDakMsRUFBQSxLQUFLLEVBQUU7QUFDTCxJQUFBLElBQUksRUFEQyxJQUFBO0FBRUw7QUFDQTtBQUNBO0FBQ0EsSUFBQSxXQUFXLEVBTE4sSUFBQTtBQU1MO0FBQ0E7QUFDQSxJQUFBLElBQUksRUFBRTtBQVJELEdBRDBCO0FBWWpDO0FBQ0E7QUFDQSxFQUFBLE1BQU0sRUFBRTtBQUFFLElBQUEsSUFBSSxFQUFFO0FBQVIsR0FkeUI7QUFlakMsRUFBQSxNQUFNLEVBQUU7QUFBRSxJQUFBLElBQUksRUFBRTtBQUFSLEdBZnlCO0FBZ0JqQyxFQUFBLFFBQVEsRUFBRTtBQUFFLElBQUEsSUFBSSxFQUFFO0FBQVIsR0FoQnVCO0FBaUJqQyxFQUFBLEtBQUssRUFBRTtBQUFFLElBQUEsSUFBSSxFQUFFO0FBQVIsR0FqQjBCO0FBa0JqQyxFQUFBLFFBQVEsRUFBRTtBQUFFLElBQUEsSUFBSSxFQUFFO0FBQVIsR0FsQnVCO0FBbUJqQyxFQUFBLE1BQU0sRUFBRTtBQUFFLElBQUEsSUFBSSxFQUFFO0FBQVIsR0FuQnlCO0FBb0JqQyxFQUFBLE1BQU0sRUFBRTtBQUFFLElBQUEsSUFBSSxFQUFFO0FBQVIsR0FwQnlCO0FBcUJqQyxFQUFBLE1BQU0sRUFBRTtBQUFFLElBQUEsSUFBSSxFQUFFO0FBQVIsR0FyQnlCO0FBc0JqQyxFQUFBLE1BQU0sRUFBRTtBQUFFLElBQUEsSUFBSSxFQUFFO0FBQVI7QUF0QnlCLENBQW5DOztBQXlCQSxTQUFBLFVBQUEsQ0FBQSxPQUFBLEVBQUEsUUFBQSxFQUFxRDtBQUNuRCxNQUFJLEdBQUcsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFoQyxXQUF5QixFQUFELENBQXhCO0FBQ0EsU0FBUSxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBcEIsV0FBWSxFQUFELENBQVYsSUFBUixLQUFBO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTaW1wbGVFbGVtZW50IH0gZnJvbSAnQHNpbXBsZS1kb20vaW50ZXJmYWNlJztcblxuLypcbiAqIEBtZXRob2Qgbm9ybWFsaXplUHJvcGVydHlcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH1cbiAqIEBwYXJhbSBzbG90TmFtZSB7U3RyaW5nfVxuICogQHJldHVybnMge09iamVjdH0geyBuYW1lLCB0eXBlIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BlcnR5KGVsZW1lbnQ6IFNpbXBsZUVsZW1lbnQsIHNsb3ROYW1lOiBzdHJpbmcpIHtcbiAgbGV0IHR5cGUsIG5vcm1hbGl6ZWQ7XG5cbiAgaWYgKHNsb3ROYW1lIGluIGVsZW1lbnQpIHtcbiAgICBub3JtYWxpemVkID0gc2xvdE5hbWU7XG4gICAgdHlwZSA9ICdwcm9wJztcbiAgfSBlbHNlIHtcbiAgICBsZXQgbG93ZXIgPSBzbG90TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlciBpbiBlbGVtZW50KSB7XG4gICAgICB0eXBlID0gJ3Byb3AnO1xuICAgICAgbm9ybWFsaXplZCA9IGxvd2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlID0gJ2F0dHInO1xuICAgICAgbm9ybWFsaXplZCA9IHNsb3ROYW1lO1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlID09PSAncHJvcCcgJiZcbiAgICAobm9ybWFsaXplZC50b0xvd2VyQ2FzZSgpID09PSAnc3R5bGUnIHx8IHByZWZlckF0dHIoZWxlbWVudC50YWdOYW1lLCBub3JtYWxpemVkKSlcbiAgKSB7XG4gICAgdHlwZSA9ICdhdHRyJztcbiAgfVxuXG4gIHJldHVybiB7IG5vcm1hbGl6ZWQsIHR5cGUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BlcnR5VmFsdWUodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vLyBwcm9wZXJ0aWVzIHRoYXQgTVVTVCBiZSBzZXQgYXMgYXR0cmlidXRlcywgZHVlIHRvOlxuLy8gKiBicm93c2VyIGJ1Z1xuLy8gKiBzdHJhbmdlIHNwZWMgb3V0bGllclxuY29uc3QgQVRUUl9PVkVSUklERVM6IERpY3Q8RGljdD4gPSB7XG4gIElOUFVUOiB7XG4gICAgZm9ybTogdHJ1ZSxcbiAgICAvLyBDaHJvbWUgNDYuMC4yNDY0LjA6ICdhdXRvY29ycmVjdCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSA9PT0gZmFsc2VcbiAgICAvLyBTYWZhcmkgOC4wLjc6ICdhdXRvY29ycmVjdCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSA9PT0gZmFsc2VcbiAgICAvLyBNb2JpbGUgU2FmYXJpIChpT1MgOC40IHNpbXVsYXRvcik6ICdhdXRvY29ycmVjdCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSA9PT0gdHJ1ZVxuICAgIGF1dG9jb3JyZWN0OiB0cnVlLFxuICAgIC8vIENocm9tZSA1NC4wLjI4NDAuOTg6ICdsaXN0JyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpID09PSB0cnVlXG4gICAgLy8gU2FmYXJpIDkuMS4zOiAnbGlzdCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSA9PT0gZmFsc2VcbiAgICBsaXN0OiB0cnVlLFxuICB9LFxuXG4gIC8vIGVsZW1lbnQuZm9ybSBpcyBhY3R1YWxseSBhIGxlZ2l0aW1hdGUgcmVhZE9ubHkgcHJvcGVydHksIHRoYXQgaXMgdG8gYmVcbiAgLy8gbXV0YXRlZCwgYnV0IG11c3QgYmUgbXV0YXRlZCBieSBzZXRBdHRyaWJ1dGUuLi5cbiAgU0VMRUNUOiB7IGZvcm06IHRydWUgfSxcbiAgT1BUSU9OOiB7IGZvcm06IHRydWUgfSxcbiAgVEVYVEFSRUE6IHsgZm9ybTogdHJ1ZSB9LFxuICBMQUJFTDogeyBmb3JtOiB0cnVlIH0sXG4gIEZJRUxEU0VUOiB7IGZvcm06IHRydWUgfSxcbiAgTEVHRU5EOiB7IGZvcm06IHRydWUgfSxcbiAgT0JKRUNUOiB7IGZvcm06IHRydWUgfSxcbiAgT1VUUFVUOiB7IGZvcm06IHRydWUgfSxcbiAgQlVUVE9OOiB7IGZvcm06IHRydWUgfSxcbn07XG5cbmZ1bmN0aW9uIHByZWZlckF0dHIodGFnTmFtZTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKSB7XG4gIGxldCB0YWcgPSBBVFRSX09WRVJSSURFU1t0YWdOYW1lLnRvVXBwZXJDYXNlKCldO1xuICByZXR1cm4gKHRhZyAmJiB0YWdbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV0pIHx8IGZhbHNlO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==