Skip to content

Commit 03d6e5d

Browse files
committed
adjust attribute interpolation deprecation warnings
1 parent 64ab8d5 commit 03d6e5d

File tree

3 files changed

+37
-11
lines changed

3 files changed

+37
-11
lines changed

src/compiler/compile.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -709,11 +709,6 @@ function collectAttrDirective (name, value, options) {
709709
var tokens = textParser.parse(value)
710710
var isClass = name === 'class'
711711
if (tokens) {
712-
713-
if (process.env.NODE_ENV !== 'production') {
714-
_.deprecation.ATTR_INTERPOLATION(name, value)
715-
}
716-
717712
var dirName = isClass ? 'class' : 'attr'
718713
var def = options.directives[dirName]
719714
var i = tokens.length
@@ -722,6 +717,9 @@ function collectAttrDirective (name, value, options) {
722717
var token = tokens[i]
723718
if (token.tag && !token.oneTime) {
724719
allOneTime = false
720+
} else if (token.tag) {
721+
process.env.NODE_ENV !== 'production' &&
722+
_.deprecation.ATTR_ONETIME(name, value)
725723
}
726724
}
727725
var linker
@@ -732,9 +730,15 @@ function collectAttrDirective (name, value, options) {
732730
} else {
733731
linker = function (vm, el, scope) {
734732
var exp = textParser.tokensToExp(tokens, (scope || vm))
733+
734+
// silence the argument deprecation warning
735+
var silent = config.silent
736+
config.silent = true
735737
var desc = isClass
736738
? dirParser.parse(exp)[0]
737739
: dirParser.parse(name + ':' + exp)[0]
740+
config.silent = silent
741+
738742
if (isClass) {
739743
desc._rawClass = value
740744
}

src/deprecations.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,18 @@ if (process.env.NODE_ENV !== 'production') {
117117
)
118118
},
119119

120-
ATTR_INTERPOLATION: function (name, value) {
120+
ATTR_ONETIME: function (name, value) {
121121
warn(
122-
'Mustache interpolations inside attributes: ' + name + '="' + value + '". ' +
123-
'This will be deprecated in 1.0.0. ' +
124-
'Use v-bind:attr="expression" instead.' + newBindingSyntaxLink
122+
name + '="' + value + '": One-time interpolations inside attributes will ' +
123+
'no longer be supported in 1.0.0.'
124+
)
125+
},
126+
127+
ATTR_INVALID: function (name) {
128+
warn(
129+
'Mustache interpolation found in non-native attribute "' + name + '": ' +
130+
'attribute interpolation will be limited to native attributes only ' +
131+
'in 1.0.0. Use v-bind for custom attributes and props.'
125132
)
126133
},
127134

@@ -159,8 +166,8 @@ if (process.env.NODE_ENV !== 'production') {
159166
PARTIAL_NAME: function (id) {
160167
warn(
161168
'<partial name="' + id + '">: mustache interpolations inside attributes ' +
162-
'will be deprecated in 1.0.0. Use v-bind:name="expression" or just ' +
163-
':name="expression" instead.'
169+
'will only be allowed in native attributes in 1.0.0. ' +
170+
'Use v-bind:name="expression" or just :name="expression" instead.'
164171
)
165172
},
166173

src/directives/attr.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
var _ = require('../util')
2+
13
// xlink
24
var xlinkNS = 'http://www.w3.org/1999/xlink'
35
var xlinkRE = /^xlink:/
@@ -24,6 +26,19 @@ module.exports = {
2426

2527
update: function (value) {
2628
if (this.arg) {
29+
30+
if (process.env.NODE_ENV !== 'production') {
31+
var attr = this.arg
32+
if (!(
33+
attr === 'class' ||
34+
/^data-/.test(attr) ||
35+
(attr === 'for' && 'htmlFor' in this.el) ||
36+
_.camelize(attr) in this.el
37+
)) {
38+
_.deprecation.ATTR_INVALID(attr)
39+
}
40+
}
41+
2742
this.setAttr(this.arg, value)
2843
} else if (typeof value === 'object') {
2944
// TODO no longer need to support object in 1.0.0

0 commit comments

Comments
 (0)