From d1da5348dda324191c49b1841d068683f3ac2c86 Mon Sep 17 00:00:00 2001 From: Boten Anna Date: Sun, 10 Jan 2021 13:00:27 +0000 Subject: [PATCH] Automatic! --- data/pathifier.ts | 1 - data/transformers.ts | 15 ++++++++++----- domdom/dd-props.ts | 9 +++++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/data/pathifier.ts b/data/pathifier.ts index 6c9a9e8..162bb23 100644 --- a/data/pathifier.ts +++ b/data/pathifier.ts @@ -84,7 +84,6 @@ export class Pathifier { transformer.next = this._transformer; const lastTransformer = this.lastTransformer(); lastTransformer.next = transformer; - transformer.parent = lastTransformer; } map(map: Mapper): Pathifier { diff --git a/data/transformers.ts b/data/transformers.ts index 3ff9e4c..f124555 100644 --- a/data/transformers.ts +++ b/data/transformers.ts @@ -76,7 +76,6 @@ export class Entries { } export interface Transformer { - parent?: Transformer; entries: Entries; next?: Transformer; onValue?: any; @@ -94,7 +93,6 @@ export interface Transformer { } export abstract class BaseTransformer implements Transformer { - parent?: Transformer; entries = new Entries(); next?: Transformer; onOpts?: ListenerCallbackOptions; @@ -155,7 +153,7 @@ export class MapTransformer extends BaseTransformer { } remove(index: number, entry: Entry): void { - this.entries.remove(entry); + this.entries.remove(entry, index); this.next?.remove(index, entry); } @@ -333,6 +331,7 @@ export class SliceTransformer extends BaseTransformer { export class FilterTransformer extends BaseTransformer { private readonly filter: OnFilter; + private readonly all: Entries = new Entries(); constructor(filter: OnFilter) { super(); @@ -341,7 +340,7 @@ export class FilterTransformer extends BaseTransformer { private _findIndex(key: string): number { let index = 0; - const entries = this.parent?.entries; + const entries = this.all; if (entries) { for (let i = 0; i < entries.length; i++) { if (entries.get(i).key === key || index >= this.entries.length) { @@ -356,6 +355,8 @@ export class FilterTransformer extends BaseTransformer { } add(index: number, entry: Entry): void { + this.all.add(entry, index); + if ( this.filter(entry.value, { opts: entry.opts, @@ -370,6 +371,8 @@ export class FilterTransformer extends BaseTransformer { } remove(index: number, entry: Entry): void { + this.all.remove(entry, index); + index = this.entries.remove(entry); if (index >= 0) { this.next?.remove(index, entry); @@ -380,7 +383,7 @@ export class FilterTransformer extends BaseTransformer { this.onValue = value; this.onOpts = opts; let index = 0; - this.parent?.entries.forEach(entry => { + this.all.forEach(entry => { const test = this.filter(entry.value, { opts: entry.opts, onValue: this.onValue, @@ -400,6 +403,8 @@ export class FilterTransformer extends BaseTransformer { } update(_oldIndex: number, _index: number, entry: Entry): void { + this.all.replace(entry, _index, _oldIndex); + const test = this.filter(entry.value, { opts: entry.opts, onValue: this.onValue, diff --git a/domdom/dd-props.ts b/domdom/dd-props.ts index 999a6f5..2e2c64c 100644 --- a/domdom/dd-props.ts +++ b/domdom/dd-props.ts @@ -1,6 +1,7 @@ import { Domode, Mountable } from './types.ts'; import { BaseTransformer, Data } from '../data/index.ts'; import { DomPathifier } from './pathifier.ts'; +import { isProbablyPlainObject } from './dom-stower.ts'; function setAttribute(element: HTMLElement, key: string, value: any) { if (value === null) value = ''; @@ -10,8 +11,12 @@ function setAttribute(element: HTMLElement, key: string, value: any) { if (key.startsWith('data-')) { const dataKey = key.split('-')[1]; element.dataset[dataKey] = value; - } else if (typeof value === 'object') { - Object.assign(element[key], value); + } else if (isProbablyPlainObject(value)) { + if (!element[key]) { + element[key] = value; + } else { + Object.assign(element[key], value); + } } else { if (typeof value === 'boolean' || typeof value === 'undefined') { if (value) {