1466ada43204aa0eeaf9769eebbf0d4cfd6fe35881738511f5fd51e91edc8092930256b6bc6f2af24c5d5e9c614ecdb7b46ab381ad6a676dd32b61e2c0aece 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /* @flow */
  2. import { parseText } from 'compiler/parser/text-parser'
  3. import {
  4. getAndRemoveAttr,
  5. getBindingAttr,
  6. baseWarn
  7. } from 'compiler/helpers'
  8. function transformNode (el: ASTElement, options: CompilerOptions) {
  9. const warn = options.warn || baseWarn
  10. const staticClass = getAndRemoveAttr(el, 'class')
  11. if (process.env.NODE_ENV !== 'production' && staticClass) {
  12. const res = parseText(staticClass, options.delimiters)
  13. if (res) {
  14. warn(
  15. `class="${staticClass}": ` +
  16. 'Interpolation inside attributes has been removed. ' +
  17. 'Use v-bind or the colon shorthand instead. For example, ' +
  18. 'instead of <div class="{{ val }}">, use <div :class="val">.',
  19. el.rawAttrsMap['class']
  20. )
  21. }
  22. }
  23. if (staticClass) {
  24. el.staticClass = JSON.stringify(staticClass)
  25. }
  26. const classBinding = getBindingAttr(el, 'class', false /* getStatic */)
  27. if (classBinding) {
  28. el.classBinding = classBinding
  29. }
  30. }
  31. function genData (el: ASTElement): string {
  32. let data = ''
  33. if (el.staticClass) {
  34. data += `staticClass:${el.staticClass},`
  35. }
  36. if (el.classBinding) {
  37. data += `class:${el.classBinding},`
  38. }
  39. return data
  40. }
  41. export default {
  42. staticKeys: ['staticClass'],
  43. transformNode,
  44. genData
  45. }