@amaui/style
Version:
CSS in JS styling solution
55 lines (45 loc) • 2.72 kB
JavaScript
import isEnvironment from '@amaui/utils/isEnvironment';
class AmauiStyleRenderer {
make() {
let attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
element: {},
data: {}
};
let version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'style';
// Append to the bottom of head element
if (isEnvironment('browser')) {
const element = window.document.createElement(version);
Object.keys((attributes === null || attributes === void 0 ? void 0 : attributes.element) || {}).forEach(attribute => element.setAttribute(attribute, attributes.element[attribute])); // Add attributes
Object.keys((attributes === null || attributes === void 0 ? void 0 : attributes.data) || {}).forEach(attribute => {
element[attribute] = attributes.data[attribute];
element.setAttribute(attribute.indexOf('data-') === 0 ? attribute : "data-".concat(attribute), attributes.data[attribute]);
});
return element;
}
}
add(value) {
let priority = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'lower';
let attributes = arguments.length > 2 ? arguments[2] : undefined;
// Append to the bottom of head element
if (isEnvironment('browser')) {
const styleSheets = window.document.styleSheets;
if (!styleSheets.length || priority === 'upper') window.document.head.append(value);else {
var _attributes$data, _styleSheets$;
const reset = Array.from(styleSheets).find(item => item.ownerNode.method === 'reset');
let pure = Array.from(styleSheets).filter(item => item.ownerNode.method === 'pure');
pure = pure[pure.length - 1];
if ((attributes === null || attributes === void 0 ? void 0 : (_attributes$data = attributes.data) === null || _attributes$data === void 0 ? void 0 : _attributes$data.method) === 'reset' || priority === 'lower' && !(pure || reset)) window.document.head.insertBefore(value, ((_styleSheets$ = styleSheets[0]) === null || _styleSheets$ === void 0 ? void 0 : _styleSheets$.ownerNode) || null);else if (priority === 'lower') {
if (pure) window.document.head.insertBefore(value, pure.ownerNode.nextElementSibling);else if (reset) window.document.head.insertBefore(value, reset.ownerNode.nextElementSibling);
} else window.document.head.append(value);
}
return value;
}
}
remove(value) {
var _element;
let element = value;
if (value !== null && value !== void 0 && value.ownerNode) element = element.ownerNode;
if ((_element = element) !== null && _element !== void 0 && _element.remove) element.remove();
}
}
export default AmauiStyleRenderer;