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
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63["processAttrs()"]
  02a69150_0003_c070_7030_ea511121f64b["processElement()"]
  02a69150_0003_c070_7030_ea511121f64b -->|calls| 6f72c0fc_c9ca_496b_1bc7_d93b516eda63
  cd39a571_e3cd_e6f0_cc58_0eb0062f0b59["parseModifiers()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| cd39a571_e3cd_e6f0_cc58_0eb0062f0b59
  e82e0ef9_225b_c510_670f_d4553c00a84c["parseFilters()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| e82e0ef9_225b_c510_670f_d4553c00a84c
  836e9c36_fe18_c1c8_9715_d916891f0517["camelize()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 836e9c36_fe18_c1c8_9715_d916891f0517
  36fcfc37_216e_9f34_5a69_e976b9f178f6["genAssignmentCode()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 36fcfc37_216e_9f34_5a69_e976b9f178f6
  5f7b1ed1_7106_20e8_83d2_d329e3f4a814["addHandler()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 5f7b1ed1_7106_20e8_83d2_d329e3f4a814
  e78b8b23_1803_b152_f10f_06b6c4015dc9["hyphenate()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| e78b8b23_1803_b152_f10f_06b6c4015dc9
  4daec7f5_cb46_f8e0_ce45_d7c464826c5d["addProp()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 4daec7f5_cb46_f8e0_ce45_d7c464826c5d
  c66bf8fe_579b_d9ec_aef1_172b5cabedf3["addAttr()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| c66bf8fe_579b_d9ec_aef1_172b5cabedf3
  0d580c5a_94a5_1668_70d1_6bf40da1b73a["addDirective()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 0d580c5a_94a5_1668_70d1_6bf40da1b73a
  fb909a99_f08a_b61e_92c2_2abd48c2ed27["checkForAliasModel()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| fb909a99_f08a_b61e_92c2_2abd48c2ed27
  0a22351a_c237_f9ca_df3f_a6e82bad69d8["parseText()"]
  6f72c0fc_c9ca_496b_1bc7_d93b516eda63 -->|calls| 0a22351a_c237_f9ca_df3f_a6e82bad69d8
  style 6f72c0fc_c9ca_496b_1bc7_d93b516eda63 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])
      }
    }
  }
}

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