All files / runtime/src/modules attrs.ts

100% Statements 37/37
100% Branches 10/10
100% Functions 1/1
100% Lines 37/37

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 381x 1x 1x 1x 12x 12x 12x 12x 12x 12x 12x 2x 1x 1x 1x 1x 12x 2x 1x 1x 1x 1x 1x 10x 10x 10x 12x 1x 1x 12x 12x 1x 1x 12x 9x 9x 12x  
import { INSVElement } from '../nodes'
import { isBoolean, isAndroidKey, isIOSKey } from '@nativescript-vue/runtime'
import { isAndroid, isIOS } from '@nativescript/core'
 
export function patchAttr(
  el: INSVElement,
  key: string,
  prevValue: any,
  nextValue: any
) {
  if (isAndroidKey(key)) {
    if (!isAndroid) {
      // if we encounter an android key, and we are not on android we can safely ignore it
      return
    }
    key = key.substr(8)
  } else if (isIOSKey(key)) {
    if (!isIOS) {
      // if we encounter an ios key, and we are not on ios we can safely ignore it
      return
    }
    key = key.substr(4)
  }
 
  // detect expandable attrs for boolean values
  // see https://vuejs.org/v2/guide/components-props.html#Passing-a-Boolean
  if (isBoolean(el.getAttribute(key)) && nextValue === '') {
    nextValue = true
  }
 
  if (nextValue === null) {
    // if the nextValue is null, we are removing the attribute
    el.removeAttribute(key)
  } else {
    el.setAttribute(key, nextValue)
  }
}