function processAttrs()

in assets/modelRepository/vue.js [9925:10018]


  function processAttrs(el) {
    const list = el.attrsList;
    let i, l, name, rawName, value, modifiers, isProp;
    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);
        if (modifiers) {
          name = name.replace(modifierRE, "");
        }
        if (bindRE.test(name)) {
          // v-bind
          name = name.replace(bindRE, "");
          value = parseFilters(value);
          isProp = false;
          if (modifiers) {
            if (modifiers.prop) {
              isProp = true;
              name = camelize(name);
              if (name === "innerHtml") {
                name = "innerHTML";
              }
            }
            if (modifiers.camel) {
              name = camelize(name);
            }
            if (modifiers.sync) {
              addHandler(
                el,
                "update:" + camelize(name),
                genAssignmentCode(value, "$event")
              );
            }
          }
          if (
            isProp ||
            (!el.component &&
              platformMustUseProp(el.tag, el.attrsMap.type, name))
          ) {
            addProp(el, name, value);
          } else {
            addAttr(el, name, value);
          }
        } else if (onRE.test(name)) {
          // v-on
          name = name.replace(onRE, "");
          addHandler(el, name, value, modifiers, false, warn$2);
        } else {
          // normal directives
          name = name.replace(dirRE, "");
          // parse arg
          const argMatch = name.match(argRE);
          const arg = argMatch && argMatch[1];
          if (arg) {
            name = name.slice(0, -(arg.length + 1));
          }
          addDirective(el, name, rawName, value, arg, modifiers);
          if ("development" !== "production" && name === "model") {
            checkForAliasModel(el, value);
          }
        }
      } else {
        // literal attribute
        {
          const res = parseText(value, delimiters);
          if (res) {
            warn$2(
              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">.'
            );
          }
        }
        addAttr(el, name, JSON.stringify(value));
        // #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");
        }
      }
    }
  }