4ce57941f99bbcbe32402c7e8649bf66a620f6aee0444c280b97921aa002e6b7e6b2d2651c483d8a0b931ce109c7360fefe6e390ff2fb3c1e92df86355acd6 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import Attributor from './attributor.js';
  2. function camelize(name: string): string {
  3. const parts = name.split('-');
  4. const rest = parts
  5. .slice(1)
  6. .map((part: string) => part[0].toUpperCase() + part.slice(1))
  7. .join('');
  8. return parts[0] + rest;
  9. }
  10. class StyleAttributor extends Attributor {
  11. public static keys(node: HTMLElement): string[] {
  12. return (node.getAttribute('style') || '').split(';').map((value) => {
  13. const arr = value.split(':');
  14. return arr[0].trim();
  15. });
  16. }
  17. public add(node: HTMLElement, value: any): boolean {
  18. if (!this.canAdd(node, value)) {
  19. return false;
  20. }
  21. // @ts-expect-error Fix me later
  22. node.style[camelize(this.keyName)] = value;
  23. return true;
  24. }
  25. public remove(node: HTMLElement): void {
  26. // @ts-expect-error Fix me later
  27. node.style[camelize(this.keyName)] = '';
  28. if (!node.getAttribute('style')) {
  29. node.removeAttribute('style');
  30. }
  31. }
  32. public value(node: HTMLElement): any {
  33. // @ts-expect-error Fix me later
  34. const value = node.style[camelize(this.keyName)];
  35. return this.canAdd(node, value) ? value : '';
  36. }
  37. }
  38. export default StyleAttributor;