1- import { convertNumber2PX , FormElement } from '@tarojs/runtime'
2- import { capitalize , internalComponents , isFunction , isNumber , isObject , isString , PLATFORM_TYPE , toCamelCase } from '@tarojs/shared'
1+ import { convertNumber2PX , eventHandlerTTDom , FormElement , setInnerHTML } from '@tarojs/runtime'
2+ import { capitalize , internalComponents , isEnableTTDom , isFunction , isNumber , isObject , isString , PLATFORM_TYPE , styleObjectToCss , toCamelCase } from '@tarojs/shared'
33
44import type { Style , TaroElement } from '@tarojs/runtime'
55
@@ -8,6 +8,7 @@ import type { Style, TaroElement } from '@tarojs/runtime'
88export type Props = Record < string , unknown >
99
1010const IS_NON_DIMENSIONAL = / a s p e c t | a c i t | e x (?: s | g | n | p | $ ) | r p h | g r i d | o w s | m n c | n t w | i n e [ c h ] | z o o | ^ o r d | i t e r a / i
11+ const IS_DATASET_OR_ARIA = / ^ ( d a t a | a r i a ) - /
1112
1213function isEventName ( s : string ) {
1314 return s [ 0 ] === 'o' && s [ 1 ] === 'n'
@@ -125,6 +126,17 @@ function setEvent (dom: TaroElement, name: string, value: unknown, oldValue?: un
125126 eventName = 'tap'
126127 }
127128
129+ if ( process . env . TARO_ENV === 'tt' && isEnableTTDom ( ) ) {
130+ if ( isFunction ( oldValue ) ) {
131+ ( dom as any ) . removeEventListener ( `bind${ eventName } ` , dom [ `__${ eventName } __` ] )
132+ }
133+ if ( isFunction ( value ) ) {
134+ dom [ `__${ eventName } __` ] = eventHandlerTTDom . bind ( this , dom , value )
135+ dom . addEventListener ( `bind${ eventName } ` , dom [ `__${ eventName } __` ] , isCapture )
136+ }
137+ return
138+ }
139+
128140 if ( isFunction ( value ) ) {
129141 if ( oldValue ) {
130142 dom . removeEventListener ( eventName , oldValue as any , process . env . TARO_PLATFORM !== PLATFORM_TYPE . HARMONY ? false : undefined )
@@ -228,42 +240,50 @@ function setProperty (dom: TaroElement, name: string, value: unknown, oldValue?:
228240 ) {
229241 // skip
230242 } else if ( name === 'style' ) {
231- if ( / h a r m o n y . * c p p / . test ( process . env . TARO_ENV || '' ) ) {
232- return dom . setAttribute ( '_style4cpp' , value )
233- }
234- const style = dom . style
235- if ( isString ( value ) ) {
236- style . cssText = value
243+ if ( process . env . TARO_ENV === 'tt' && isEnableTTDom ( ) ) {
244+ if ( isString ( value ) ) {
245+ dom . setAttribute ( 'style' , value )
246+ } else if ( isObject ( value ) ) {
247+ dom . setAttribute ( 'style' , styleObjectToCss ( value as StyleValue ) )
248+ }
237249 } else {
238- if ( isString ( oldValue ) ) {
239- style . cssText = ''
240- oldValue = null
250+ if ( / h a r m o n y .* c p p / . test ( process . env . TARO_ENV || '' ) ) {
251+ return dom . setAttribute ( '_style4cpp' , value )
241252 }
253+ const style = dom . style
254+ if ( isString ( value ) ) {
255+ style . cssText = value
256+ } else {
257+ if ( isString ( oldValue ) ) {
258+ style . cssText = ''
259+ oldValue = null
260+ }
242261
243- if ( isObject < StyleValue > ( oldValue ) ) {
244- for ( const i in oldValue ) {
245- if ( ! ( value && i in ( value as StyleValue ) ) ) {
246- // Harmony特殊处理
247- if ( process . env . TARO_PLATFORM === PLATFORM_TYPE . HARMONY && i === 'position' && oldValue [ i ] === 'fixed' ) {
248- // @ts -ignore
249- dom . setLayer ( 0 )
262+ if ( isObject < StyleValue > ( oldValue ) ) {
263+ for ( const i in oldValue ) {
264+ if ( ! ( value && i in ( value as StyleValue ) ) ) {
265+ // Harmony特殊处理
266+ if ( process . env . TARO_PLATFORM === PLATFORM_TYPE . HARMONY && i === 'position' && oldValue [ i ] === 'fixed' ) {
267+ // @ts -ignore
268+ dom . setLayer ( 0 )
269+ }
270+ setStyle ( style , i , '' )
250271 }
251- setStyle ( style , i , '' )
252272 }
253273 }
254- }
255274
256- if ( isObject < StyleValue > ( value ) ) {
257- for ( const i in value ) {
258- if ( ! oldValue || ! isEqual ( value [ i ] , ( oldValue as StyleValue ) [ i ] ) ) {
259- // Harmony特殊处理
260- if ( process . env . TARO_PLATFORM === PLATFORM_TYPE . HARMONY && i === 'position' ) {
261- if ( value [ i ] === 'fixed' || ( value [ i ] !== 'fixed' && oldValue ?. [ i ] ) ) {
262- // @ts -ignore
263- dom . setLayer ( value [ i ] === 'fixed' ? 1 : 0 )
275+ if ( isObject < StyleValue > ( value ) ) {
276+ for ( const i in value ) {
277+ if ( ! oldValue || ! isEqual ( value [ i ] , ( oldValue as StyleValue ) [ i ] ) ) {
278+ // Harmony特殊处理
279+ if ( process . env . TARO_PLATFORM === PLATFORM_TYPE . HARMONY && i === 'position' ) {
280+ if ( value [ i ] === 'fixed' || ( value [ i ] !== 'fixed' && oldValue ?. [ i ] ) ) {
281+ // @ts -ignore
282+ dom . setLayer ( value [ i ] === 'fixed' ? 1 : 0 )
283+ }
264284 }
285+ setStyle ( style , i , value [ i ] )
265286 }
266- setStyle ( style , i , value [ i ] )
267287 }
268288 }
269289 }
@@ -275,10 +295,17 @@ function setProperty (dom: TaroElement, name: string, value: unknown, oldValue?:
275295 const oldHtml = ( oldValue as DangerouslySetInnerHTML ) ?. __html ?? ''
276296 if ( newHtml || oldHtml ) {
277297 if ( oldHtml !== newHtml ) {
278- dom . innerHTML = newHtml
298+ if ( process . env . TARO_ENV === 'tt' && isEnableTTDom ( ) ) {
299+ setInnerHTML ( dom , newHtml )
300+ } else {
301+ dom . innerHTML = newHtml
302+ }
279303 }
280304 }
281305 } else if ( ! isFunction ( value ) ) {
306+ if ( process . env . TARO_ENV === 'tt' && isEnableTTDom ( ) && ! IS_DATASET_OR_ARIA . test ( name ) ) {
307+ name = toCamelCase ( name )
308+ }
282309 if ( value == null ) {
283310 dom . removeAttribute ( name )
284311 } else {
0 commit comments