Home / Function/ processAttrs() — vue Function Reference

processAttrs() — vue Function Reference

Architecture documentation for the processAttrs() function in index.ts from the vue codebase.

Entity Profile

Dependency Diagram

graph TD
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3["processAttrs()"]
  31f9edc3_10e5_9556_86c6_7c900b922f60["processElement()"]
  31f9edc3_10e5_9556_86c6_7c900b922f60 -->|calls| a8b5582c_75a3_d739_c9b5_27e2ceb67bc3
  5940d769_1bd3_4c53_35fc_6968ebb6cb90["parseModifiers()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 5940d769_1bd3_4c53_35fc_6968ebb6cb90
  864d3348_97c0_ef1e_0722_64a34582d8e6["parseFilters()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 864d3348_97c0_ef1e_0722_64a34582d8e6
  447f7b2d_d677_800e_b42e_db97e7d830a7["camelize()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 447f7b2d_d677_800e_b42e_db97e7d830a7
  4f4016d4_c2a9_540e_d1fd_9dabe55a1d29["genAssignmentCode()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 4f4016d4_c2a9_540e_d1fd_9dabe55a1d29
  754feb41_b555_757e_313c_0f0096cdc970["addHandler()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 754feb41_b555_757e_313c_0f0096cdc970
  e667d00b_a47f_c88a_e931_82b5917dddc2["hyphenate()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| e667d00b_a47f_c88a_e931_82b5917dddc2
  4760a472_5347_3554_a7fe_3e7d21471a37["addProp()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 4760a472_5347_3554_a7fe_3e7d21471a37
  a5568283_0566_a9dd_887d_0985c4097fee["addAttr()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| a5568283_0566_a9dd_887d_0985c4097fee
  c2fb6a46_dbd6_cdae_1536_1098e913cb08["addDirective()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| c2fb6a46_dbd6_cdae_1536_1098e913cb08
  0e2e0e33_ed3c_0f90_9245_4b781a654aec["checkForAliasModel()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 0e2e0e33_ed3c_0f90_9245_4b781a654aec
  98ee1e5f_4546_f8dd_b03c_1579380b057f["parseText()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 98ee1e5f_4546_f8dd_b03c_1579380b057f
  style a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

src/compiler/parser/index.ts lines 773–920

function processAttrs(el) {
  const list = el.attrsList
  let i, l, name, rawName, value, modifiers, syncGen, isDynamic
  for (i = 0, l = list.length; i < l; i++) {
    name = rawName = list[i].name
    value = list[i].value
    if (dirRE.test(name)) {
      // mark element as dynamic
      el.hasBindings = true
      // modifiers
      modifiers = parseModifiers(name.replace(dirRE, ''))
      // support .foo shorthand syntax for the .prop modifier
      if (process.env.VBIND_PROP_SHORTHAND && propBindRE.test(name)) {
        ;(modifiers || (modifiers = {})).prop = true
        name = `.` + name.slice(1).replace(modifierRE, '')
      } else if (modifiers) {
        name = name.replace(modifierRE, '')
      }
      if (bindRE.test(name)) {
        // v-bind
        name = name.replace(bindRE, '')
        value = parseFilters(value)
        isDynamic = dynamicArgRE.test(name)
        if (isDynamic) {
          name = name.slice(1, -1)
        }
        if (__DEV__ && value.trim().length === 0) {
          warn(
            `The value for a v-bind expression cannot be empty. Found in "v-bind:${name}"`
          )
        }
        if (modifiers) {
          if (modifiers.prop && !isDynamic) {
            name = camelize(name)
            if (name === 'innerHtml') name = 'innerHTML'
          }
          if (modifiers.camel && !isDynamic) {
            name = camelize(name)
          }
          if (modifiers.sync) {
            syncGen = genAssignmentCode(value, `$event`)
            if (!isDynamic) {
              addHandler(
                el,
                `update:${camelize(name)}`,
                syncGen,
                null,
                false,
                warn,
                list[i]
              )
              if (hyphenate(name) !== camelize(name)) {
                addHandler(
                  el,
                  `update:${hyphenate(name)}`,
                  syncGen,
                  null,
                  false,
                  warn,
                  list[i]
                )
              }
            } else {
              // handler w/ dynamic event name
              addHandler(
                el,
                `"update:"+(${name})`,
                syncGen,
                null,
                false,
                warn,
                list[i],
                true // dynamic
              )
            }
          }
        }
        if (
          (modifiers && modifiers.prop) ||
          (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))
        ) {
          addProp(el, name, value, list[i], isDynamic)
        } else {
          addAttr(el, name, value, list[i], isDynamic)
        }
      } else if (onRE.test(name)) {
        // v-on
        name = name.replace(onRE, '')
        isDynamic = dynamicArgRE.test(name)
        if (isDynamic) {
          name = name.slice(1, -1)
        }
        addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic)
      } else {
        // normal directives
        name = name.replace(dirRE, '')
        // parse arg
        const argMatch = name.match(argRE)
        let arg = argMatch && argMatch[1]
        isDynamic = false
        if (arg) {
          name = name.slice(0, -(arg.length + 1))
          if (dynamicArgRE.test(arg)) {
            arg = arg.slice(1, -1)
            isDynamic = true
          }
        }
        addDirective(
          el,
          name,
          rawName,
          value,
          arg,
          isDynamic,
          modifiers,
          list[i]
        )
        if (__DEV__ && name === 'model') {
          checkForAliasModel(el, value)
        }
      }
    } else {
      // literal attribute
      if (__DEV__) {
        const res = parseText(value, delimiters)
        if (res) {
          warn(
            `${name}="${value}": ` +
              'Interpolation inside attributes has been removed. ' +
              'Use v-bind or the colon shorthand instead. For example, ' +
              'instead of <div id="{{ val }}">, use <div :id="val">.',
            list[i]
          )
        }
      }
      addAttr(el, name, JSON.stringify(value), list[i])
      // #6887 firefox doesn't update muted state if set via attribute
      // even immediately after element creation
      if (
        !el.component &&
        name === 'muted' &&
        platformMustUseProp(el.tag, el.attrsMap.type, name)
      ) {
        addProp(el, name, 'true', list[i])
      }
    }
  }
}

Domain

Subdomains

Called By

Frequently Asked Questions

What does processAttrs() do?
processAttrs() is a function in the vue codebase.
What does processAttrs() call?
processAttrs() calls 11 function(s): addAttr, addDirective, addHandler, addProp, camelize, checkForAliasModel, genAssignmentCode, hyphenate, and 3 more.
What calls processAttrs()?
processAttrs() is called by 1 function(s): processElement.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free