UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

90 lines (83 loc) 7.16 kB
/* * @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==