Esempio n. 1
0
export function postTransformComponentRoot (
  el: ASTElement,
  options: WeexCompilerOptions
) {
  if (!el.parent) {
    // component root
    addAttr(el, '@isComponentRoot', 'true')
    addAttr(el, '@componentProps', '$props || {}')
  }
}
Esempio n. 2
0
function genCheckboxModel (
  el: ASTElement,
  value: string,
  modifiers: ?ASTModifiers
) {
  const number = modifiers && modifiers.number
  const valueBinding = getBindingAttr(el, 'value') || 'null'
  const trueValueBinding = getBindingAttr(el, 'true-value') || 'true'
  const falseValueBinding = getBindingAttr(el, 'false-value') || 'false'
  addAttr(el, 'checked',
    `Array.isArray(${value})` +
      `?${COMMON.looseIndexOf.name}(${value},${valueBinding})>-1` + (
        trueValueBinding === 'true'
          ? `:(${value})`
          : `:${COMMON.looseEqual.name}(${value},${trueValueBinding})`
      )
  )
  addHandler(el, 'change',
    `var $$a=${value},` +
        `$$el=$event.target,` +
        `$$c=$$el.checked?(${trueValueBinding}):(${falseValueBinding});` +
    `if(Array.isArray($$a)){` +
      `var $$v=${number ? COMMON.toNumber.name + '(' + valueBinding + ')' : valueBinding},` +
          `$$i=${COMMON.looseIndexOf.name}($$a,$$v);` +
      `if($$c){$$i<0&&(${value}=$$a.concat($$v))}` +
      `else{$$i>-1&&(${value}=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}` +
    `}else{${genAssignmentCode(value, '$$c')}}`,
    null, true
  )
}
Esempio n. 3
0
function genComponentModel (
  el: ASTElement,
  value: string,
  modifiers: ?ASTModifiers
) {
  const { number, trim } = modifiers || {}

  const baseValueExpression = 'arguments[0]'
  let valueExpression = baseValueExpression
  if (trim) {
    valueExpression =
      `(typeof ${baseValueExpression} === 'string'` +
        `? ${baseValueExpression}.trim()` +
        `: ${baseValueExpression})`
  }
  if (number) {
    valueExpression = `${COMMON.toNumber.name}(${valueExpression})`
  }

  // let valueExpression = 'value'
  // if (trim) {
  //   valueExpression = `value.trim()`
  // }
  // if (number) {
  //   valueExpression = `${COMMON.toNumber.name}(${valueExpression})`
  // }

  let code = genAssignmentCode(value, valueExpression)
  code = `function () {${code}}`

  addAttr(el, 'value', `(${value}) == null ? '' : (${value})`)
  addHandler(el, 'input', code, null, true)
}
Esempio n. 4
0
function genDefaultModel (
  el: ASTElement,
  value: string,
  modifiers: ?ASTModifiers
): ?boolean {
  const type = el.attrsMap.type
  const { lazy, number, trim } = modifiers || {}

  let valueExpression = '$event.target.value'
  if (trim) {
    valueExpression = `$event.target.value.trim()`
  }
  if (number) {
    valueExpression = `${COMMON.toNumber.name}(${valueExpression})`
  }

  const code = genAssignmentCode(value, valueExpression)
  // const needCompositionGuard = !lazy && type !== 'range'
  // if (needCompositionGuard) {
  //   code = `if($event.target.composing)return;${code}`
  // }

  addAttr(el, 'value', `(${value}) == null ? '' : (${value})`)
  if (lazy) {
    addHandler(el, 'blur', code, null, true)
  } else {
    addHandler(el, 'change', code, null, true)
  }
  if (trim || number || type === 'number') {
    addHandler(el, 'blur', 'this.forceUpdate()')
  }
}
Esempio n. 5
0
export function postTransformText (el: ASTElement) {
  // weex <text> can only contain text, so the parser
  // always generates a single child.
  if (el.children.length) {
    addAttr(el, 'value', genText(el.children[0]))
    el.children = []
  }
}
Esempio n. 6
0
function genRadioModel (
    el: ASTElement,
    value: string,
    modifiers: ?ASTModifiers
) {
  const number = modifiers && modifiers.number
  let valueBinding = getBindingAttr(el, 'value') || 'null'
  valueBinding = number ? `${COMMON.toNumber.name}(${valueBinding})` : valueBinding
  addAttr(el, 'checked', `${COMMON.looseEqual.name}(${value},${valueBinding})`)
  addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true)
}
Esempio n. 7
0
File: model.js Progetto: AnyGong/vue
function genDefaultModel (
  el: ASTElement,
  value: string,
  modifiers: ?ASTModifiers
): ?boolean {
  const { lazy, trim } = modifiers || {}
  const event = lazy ? 'change' : 'input'
  const isNative = el.tag === 'input' || el.tag === 'textarea'
  const valueExpression = isNative
    ? `$event.target.attr.value${trim ? '.trim()' : ''}`
    : `$event`
  const code = genAssignmentCode(value, valueExpression)
  addAttr(el, 'value', `(${value})`)
  addHandler(el, event, code, null, true)
}
Esempio n. 8
0
function genDefaultModel (
  el: ASTElement,
  value: string,
  modifiers: ?ASTModifiers
): ?boolean {
  const { lazy, trim, number } = modifiers || {}
  const event = lazy ? 'change' : 'input'

  let valueExpression = `$event.target.attr.value${trim ? '.trim()' : ''}`
  if (number) {
    valueExpression = `_n(${valueExpression})`
  }

  const code = genAssignmentCode(value, valueExpression)
  addAttr(el, 'value', `(${value})`)
  addHandler(el, event, code, null, true)
}
Esempio n. 9
0
function genSelect (
    el: ASTElement,
    value: string,
    modifiers: ?ASTModifiers
) {
  const number = modifiers && modifiers.number
  const selectedVal = `Array.prototype.filter` +
    `.call($event.target.options,function(o){return o.selected})` +
    `.map(function(o){var val = "_value" in o ? o._value : o.value;` +
    `return ${number ? COMMON.toNumber.name + '(val)' : 'val'}})`

  const assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'
  let code = `var $$selectedVal = ${selectedVal};`
  code = `${code} ${genAssignmentCode(value, assignment)}`
  addAttr(el, 'value', `(${value}) == null ? '' : (${value})`)
  addHandler(el, 'change', code, null, true)
}