ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
75 lines (74 loc) • 7.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.normalizeProperty = normalizeProperty;
exports.normalizePropertyValue = normalizePropertyValue;
/*
* @method normalizeProperty
* @param element {HTMLElement}
* @param slotName {String}
* @returns {Object} { name, type }
*/
function normalizeProperty(element, slotName) {
var type = void 0,
normalized = void 0;
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 };
}
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 = {
// phantomjs < 2.0 lets you set it as a prop but won't reflect it
// back to the attribute. button.getAttribute('type') === null
BUTTON: { type: true, form: true },
INPUT: {
// Some version of IE (like IE9) actually throw an exception
// if you set input.type = 'something-unknown'
type: true,
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 }
};
function preferAttr(tagName, propName) {
var tag = ATTR_OVERRIDES[tagName.toUpperCase()];
return tag && tag[propName.toLowerCase()] || false;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kb20vcHJvcHMuanMiXSwibmFtZXMiOlsibm9ybWFsaXplUHJvcGVydHkiLCJlbGVtZW50Iiwic2xvdE5hbWUiLCJ0eXBlIiwibm9ybWFsaXplZCIsImxvd2VyIiwidG9Mb3dlckNhc2UiLCJwcmVmZXJBdHRyIiwidGFnTmFtZSIsIm5vcm1hbGl6ZVByb3BlcnR5VmFsdWUiLCJ2YWx1ZSIsIkFUVFJfT1ZFUlJJREVTIiwiQlVUVE9OIiwiZm9ybSIsIklOUFVUIiwiYXV0b2NvcnJlY3QiLCJsaXN0IiwiU0VMRUNUIiwiT1BUSU9OIiwiVEVYVEFSRUEiLCJMQUJFTCIsIkZJRUxEU0VUIiwiTEVHRU5EIiwiT0JKRUNUIiwicHJvcE5hbWUiLCJ0YWciLCJ0b1VwcGVyQ2FzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7UUFNTyxBQUFTO1FBb0JULEFBQVM7QUExQmhCLEFBTUE7Ozs7OztBQUFPLDJCQUFBLEFBQTJCLFNBQTNCLEFBQW9DLFVBQVUsQUFDakQ7UUFBSSxZQUFKO1FBQVUsa0JBQVYsQUFDQTtRQUFJLFlBQUosQUFBZ0IsU0FBUyxBQUNyQjtxQkFBQSxBQUFhLEFBQ2I7ZUFBQSxBQUFPLEFBQ1Y7QUFIRCxXQUdPLEFBQ0g7WUFBSSxRQUFRLFNBQVosQUFBWSxBQUFTLEFBQ3JCO1lBQUksU0FBSixBQUFhLFNBQVMsQUFDbEI7bUJBQUEsQUFBTyxBQUNQO3lCQUFBLEFBQWEsQUFDaEI7QUFIRCxlQUdPLEFBQ0g7bUJBQUEsQUFBTyxBQUNQO3lCQUFBLEFBQWEsQUFDaEI7QUFDSjtBQUNEO1FBQUksU0FBQSxBQUFTLFdBQVcsV0FBQSxBQUFXLGtCQUFYLEFBQTZCLFdBQVcsV0FBVyxRQUFYLEFBQW1CLFNBQW5GLEFBQUksQUFBNEQsQUFBNEIsY0FBYyxBQUN0RztlQUFBLEFBQU8sQUFDVjtBQUNEO1dBQU8sRUFBRSxZQUFGLFlBQWMsTUFBckIsQUFBTyxBQUNWO0FBQ0Q7QUFBTyxnQ0FBQSxBQUFnQyxPQUFPLEFBQzFDO1FBQUksVUFBSixBQUFjLElBQUksQUFDZDtlQUFBLEFBQU8sQUFDVjtBQUNEO1dBQUEsQUFBTyxBQUNWOztBQUNEO0FBQ0E7QUFDQTtBQUNBLElBQU07QUFFRjtBQUNBO1lBQVEsRUFBRSxNQUFGLEFBQVEsTUFBTSxNQUhILEFBR1gsQUFBb0IsQUFDNUI7O0FBRUk7QUFDQTtjQUhHLEFBR0csQUFDTjtjQUpHLEFBSUcsQUFDTjtBQUNBO0FBQ0E7QUFDQTtxQkFSRyxBQVFVLEFBQ2I7QUFDQTtBQUNBO2NBZmUsQUFJWixBQVdHLEFBRVY7QUFiTyxBQUNIO0FBYUo7QUFDQTtZQUFRLEVBQUUsTUFuQlMsQUFtQlgsQUFBUSxBQUNoQjtZQUFRLEVBQUUsTUFwQlMsQUFvQlgsQUFBUSxBQUNoQjtjQUFVLEVBQUUsTUFyQk8sQUFxQlQsQUFBUSxBQUNsQjtXQUFPLEVBQUUsTUF0QlUsQUFzQlosQUFBUSxBQUNmO2NBQVUsRUFBRSxNQXZCTyxBQXVCVCxBQUFRLEFBQ2xCO1lBQVEsRUFBRSxNQXhCUyxBQXdCWCxBQUFRLEFBQ2hCO1lBQVEsRUFBRSxNQXpCZCxBQUF1QixBQXlCWCxBQUFRO0FBekJHLEFBQ25CO0FBMEJKLFNBQUEsQUFBUyxXQUFULEFBQW9CLFNBQXBCLEFBQTZCLFVBQVUsQUFDbkM7UUFBSSxNQUFNLGVBQWUsUUFBekIsQUFBVSxBQUFlLEFBQVEsQUFDakM7V0FBTyxPQUFPLElBQUksU0FBWCxBQUFPLEFBQUksQUFBUyxrQkFBM0IsQUFBNkMsQUFDaEQiLCJmaWxlIjoibGliL2RvbS9wcm9wcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBAbWV0aG9kIG5vcm1hbGl6ZVByb3BlcnR5XG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9XG4gKiBAcGFyYW0gc2xvdE5hbWUge1N0cmluZ31cbiAqIEByZXR1cm5zIHtPYmplY3R9IHsgbmFtZSwgdHlwZSB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQcm9wZXJ0eShlbGVtZW50LCBzbG90TmFtZSkge1xuICAgIGxldCB0eXBlLCBub3JtYWxpemVkO1xuICAgIGlmIChzbG90TmFtZSBpbiBlbGVtZW50KSB7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBzbG90TmFtZTtcbiAgICAgICAgdHlwZSA9ICdwcm9wJztcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgbG93ZXIgPSBzbG90TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobG93ZXIgaW4gZWxlbWVudCkge1xuICAgICAgICAgICAgdHlwZSA9ICdwcm9wJztcbiAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSBsb3dlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHR5cGUgPSAnYXR0cic7XG4gICAgICAgICAgICBub3JtYWxpemVkID0gc2xvdE5hbWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdwcm9wJyAmJiAobm9ybWFsaXplZC50b0xvd2VyQ2FzZSgpID09PSAnc3R5bGUnIHx8IHByZWZlckF0dHIoZWxlbWVudC50YWdOYW1lLCBub3JtYWxpemVkKSkpIHtcbiAgICAgICAgdHlwZSA9ICdhdHRyJztcbiAgICB9XG4gICAgcmV0dXJuIHsgbm9ybWFsaXplZCwgdHlwZSB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BlcnR5VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyBwcm9wZXJ0aWVzIHRoYXQgTVVTVCBiZSBzZXQgYXMgYXR0cmlidXRlcywgZHVlIHRvOlxuLy8gKiBicm93c2VyIGJ1Z1xuLy8gKiBzdHJhbmdlIHNwZWMgb3V0bGllclxuY29uc3QgQVRUUl9PVkVSUklERVMgPSB7XG4gICAgLy8gcGhhbnRvbWpzIDwgMi4wIGxldHMgeW91IHNldCBpdCBhcyBhIHByb3AgYnV0IHdvbid0IHJlZmxlY3QgaXRcbiAgICAvLyBiYWNrIHRvIHRoZSBhdHRyaWJ1dGUuIGJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gbnVsbFxuICAgIEJVVFRPTjogeyB0eXBlOiB0cnVlLCBmb3JtOiB0cnVlIH0sXG4gICAgSU5QVVQ6IHtcbiAgICAgICAgLy8gU29tZSB2ZXJzaW9uIG9mIElFIChsaWtlIElFOSkgYWN0dWFsbHkgdGhyb3cgYW4gZXhjZXB0aW9uXG4gICAgICAgIC8vIGlmIHlvdSBzZXQgaW5wdXQudHlwZSA9ICdzb21ldGhpbmctdW5rbm93bidcbiAgICAgICAgdHlwZTogdHJ1ZSxcbiAgICAgICAgZm9ybTogdHJ1ZSxcbiAgICAgICAgLy8gQ2hyb21lIDQ2LjAuMjQ2NC4wOiAnYXV0b2NvcnJlY3QnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgPT09IGZhbHNlXG4gICAgICAgIC8vIFNhZmFyaSA4LjAuNzogJ2F1dG9jb3JyZWN0JyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpID09PSBmYWxzZVxuICAgICAgICAvLyBNb2JpbGUgU2FmYXJpIChpT1MgOC40IHNpbXVsYXRvcik6ICdhdXRvY29ycmVjdCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSA9PT0gdHJ1ZVxuICAgICAgICBhdXRvY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgLy8gQ2hyb21lIDU0LjAuMjg0MC45ODogJ2xpc3QnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgPT09IHRydWVcbiAgICAgICAgLy8gU2FmYXJpIDkuMS4zOiAnbGlzdCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSA9PT0gZmFsc2VcbiAgICAgICAgbGlzdDogdHJ1ZVxuICAgIH0sXG4gICAgLy8gZWxlbWVudC5mb3JtIGlzIGFjdHVhbGx5IGEgbGVnaXRpbWF0ZSByZWFkT25seSBwcm9wZXJ0eSwgdGhhdCBpcyB0byBiZVxuICAgIC8vIG11dGF0ZWQsIGJ1dCBtdXN0IGJlIG11dGF0ZWQgYnkgc2V0QXR0cmlidXRlLi4uXG4gICAgU0VMRUNUOiB7IGZvcm06IHRydWUgfSxcbiAgICBPUFRJT046IHsgZm9ybTogdHJ1ZSB9LFxuICAgIFRFWFRBUkVBOiB7IGZvcm06IHRydWUgfSxcbiAgICBMQUJFTDogeyBmb3JtOiB0cnVlIH0sXG4gICAgRklFTERTRVQ6IHsgZm9ybTogdHJ1ZSB9LFxuICAgIExFR0VORDogeyBmb3JtOiB0cnVlIH0sXG4gICAgT0JKRUNUOiB7IGZvcm06IHRydWUgfVxufTtcbmZ1bmN0aW9uIHByZWZlckF0dHIodGFnTmFtZSwgcHJvcE5hbWUpIHtcbiAgICBsZXQgdGFnID0gQVRUUl9PVkVSUklERVNbdGFnTmFtZS50b1VwcGVyQ2FzZSgpXTtcbiAgICByZXR1cm4gdGFnICYmIHRhZ1twcm9wTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBmYWxzZTtcbn0iXX0=