1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.css = void 0;
- var utils_1 = require("../utils");
- function css(prop, val) {
- if ((prop != null && val != null) ||
- // When `prop` is a "plain" object
- (typeof prop === 'object' && !Array.isArray(prop))) {
- return utils_1.domEach(this, function (el, i) {
- if (utils_1.isTag(el)) {
- // `prop` can't be an array here anymore.
- setCss(el, prop, val, i);
- }
- });
- }
- return getCss(this[0], prop);
- }
- exports.css = css;
- /**
- * Set styles of all elements.
- *
- * @private
- * @param el - Element to set style of.
- * @param prop - Name of property.
- * @param value - Value to set property to.
- * @param idx - Optional index within the selection.
- */
- function setCss(el, prop, value, idx) {
- if (typeof prop === 'string') {
- var styles = getCss(el);
- var val = typeof value === 'function' ? value.call(el, idx, styles[prop]) : value;
- if (val === '') {
- delete styles[prop];
- }
- else if (val != null) {
- styles[prop] = val;
- }
- el.attribs.style = stringify(styles);
- }
- else if (typeof prop === 'object') {
- Object.keys(prop).forEach(function (k, i) {
- setCss(el, k, prop[k], i);
- });
- }
- }
- function getCss(el, prop) {
- if (!el || !utils_1.isTag(el))
- return;
- var styles = parse(el.attribs.style);
- if (typeof prop === 'string') {
- return styles[prop];
- }
- if (Array.isArray(prop)) {
- var newStyles_1 = {};
- prop.forEach(function (item) {
- if (styles[item] != null) {
- newStyles_1[item] = styles[item];
- }
- });
- return newStyles_1;
- }
- return styles;
- }
- /**
- * Stringify `obj` to styles.
- *
- * @private
- * @category CSS
- * @param obj - Object to stringify.
- * @returns The serialized styles.
- */
- function stringify(obj) {
- return Object.keys(obj).reduce(function (str, prop) { return "" + str + (str ? ' ' : '') + prop + ": " + obj[prop] + ";"; }, '');
- }
- /**
- * Parse `styles`.
- *
- * @private
- * @category CSS
- * @param styles - Styles to be parsed.
- * @returns The parsed styles.
- */
- function parse(styles) {
- styles = (styles || '').trim();
- if (!styles)
- return {};
- return styles.split(';').reduce(function (obj, str) {
- var n = str.indexOf(':');
- // Skip if there is no :, or if it is the first/last character
- if (n < 1 || n === str.length - 1)
- return obj;
- obj[str.slice(0, n).trim()] = str.slice(n + 1).trim();
- return obj;
- }, {});
- }
|