123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- import { ns } from './elem';
- import { kebabCase } from '../string/format';
- export const CASE_SENSITIVE_ATTR = [
- 'viewBox',
- 'attributeName',
- 'attributeType',
- 'repeatCount',
- 'textLength',
- 'lengthAdjust',
- 'gradientUnits',
- ];
- export function getAttribute(elem, name) {
- return elem.getAttribute(name);
- }
- export function removeAttribute(elem, name) {
- const qualified = qualifyAttr(name);
- if (qualified.ns) {
- if (elem.hasAttributeNS(qualified.ns, qualified.local)) {
- elem.removeAttributeNS(qualified.ns, qualified.local);
- }
- }
- else if (elem.hasAttribute(name)) {
- elem.removeAttribute(name);
- }
- }
- export function setAttribute(elem, name, value) {
- if (value == null) {
- return removeAttribute(elem, name);
- }
- const qualified = qualifyAttr(name);
- if (qualified.ns && typeof value === 'string') {
- elem.setAttributeNS(qualified.ns, name, value);
- }
- else if (name === 'id') {
- elem.id = `${value}`;
- }
- else {
- elem.setAttribute(name, `${value}`);
- }
- }
- export function setAttributes(elem, attrs) {
- Object.keys(attrs).forEach((name) => {
- setAttribute(elem, name, attrs[name]);
- });
- }
- export function attr(elem, name, value) {
- if (name == null) {
- const attrs = elem.attributes;
- const ret = {};
- for (let i = 0; i < attrs.length; i += 1) {
- ret[attrs[i].name] = attrs[i].value;
- }
- return ret;
- }
- if (typeof name === 'string' && value === undefined) {
- return elem.getAttribute(name);
- }
- if (typeof name === 'object') {
- setAttributes(elem, name);
- }
- else {
- setAttribute(elem, name, value);
- }
- }
- export function qualifyAttr(name) {
- if (name.indexOf(':') !== -1) {
- const combinedKey = name.split(':');
- return {
- ns: ns[combinedKey[0]],
- local: combinedKey[1],
- };
- }
- return {
- ns: null,
- local: name,
- };
- }
- export function kebablizeAttrs(attrs) {
- const result = {};
- Object.keys(attrs).forEach((key) => {
- const name = CASE_SENSITIVE_ATTR.includes(key) ? key : kebabCase(key);
- result[name] = attrs[key];
- });
- return result;
- }
- export function styleToObject(styleString) {
- const ret = {};
- const styles = styleString.split(';');
- styles.forEach((item) => {
- const section = item.trim();
- if (section) {
- const pair = section.split('=');
- if (pair.length) {
- ret[pair[0].trim()] = pair[1] ? pair[1].trim() : '';
- }
- }
- });
- return ret;
- }
- export function mergeAttrs(target, source) {
- Object.keys(source).forEach((attr) => {
- if (attr === 'class') {
- target[attr] = target[attr]
- ? `${target[attr]} ${source[attr]}`
- : source[attr];
- }
- else if (attr === 'style') {
- const to = typeof target[attr] === 'object';
- const so = typeof source[attr] === 'object';
- let tt;
- let ss;
- if (to && so) {
- tt = target[attr];
- ss = source[attr];
- }
- else if (to) {
- tt = target[attr];
- ss = styleToObject(source[attr]);
- }
- else if (so) {
- tt = styleToObject(target[attr]);
- ss = source[attr];
- }
- else {
- tt = styleToObject(target[attr]);
- ss = styleToObject(source[attr]);
- }
- target[attr] = mergeAttrs(tt, ss);
- }
- else {
- target[attr] = source[attr];
- }
- });
- return target;
- }
- //# sourceMappingURL=attr.js.map
|