Skip to content
This repository was archived by the owner on Dec 25, 2017. It is now read-only.

Commit 1d52746

Browse files
committed
feat(classes): add custom validation classes
1 parent 85fe201 commit 1d52746

File tree

3 files changed

+65
-8
lines changed

3 files changed

+65
-8
lines changed

src/directives/validate.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export default function (Vue) {
2828
Vue.directive('validate', {
2929
terminal: true,
3030
priority: vIf.priority + 16,
31-
params: ['group', 'field', 'detect-blur', 'detect-change', 'initial'],
31+
params: ['group', 'field', 'detect-blur', 'detect-change', 'initial', 'validate-classes'],
3232

3333
paramWatchers: {
3434
detectBlur (val, old) {
@@ -132,6 +132,10 @@ export default function (Vue) {
132132
this.isDetectChange(params.detectChange)
133133
)
134134

135+
if (params.validateClasses && typeof params.validateClasses === 'object') {
136+
this.validation.setValidationClasses(params.validateClasses)
137+
}
138+
135139
params.group
136140
&& validator.addGroupValidation(params.group, this.field)
137141

src/validations/base.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export default class BaseValidation {
2424
this._validators = {}
2525
this._detectBlur = detectBlur
2626
this._detectChange = detectChange
27+
this._classes = {}
2728
}
2829

2930
get vm () { return this._vm }
@@ -74,6 +75,12 @@ export default class BaseValidation {
7475
}
7576
}
7677

78+
setValidationClasses (classes) {
79+
each(classes, (value, key) => {
80+
this._classes[key] = value
81+
})
82+
}
83+
7784
willUpdateFlags (touched = false) {
7885
touched && this.willUpdateTouched(this._el, 'blur')
7986
this.willUpdateDirty(this._el)
@@ -285,8 +292,8 @@ export default class BaseValidation {
285292

286293
_toggleValid (el, valid) {
287294
const { addClass, removeClass } = util.Vue.util
288-
const validClass = 'valid'
289-
const invalidClass = 'invalid'
295+
const validClass = this._classes.valid || 'valid'
296+
const invalidClass = this._classes.invalid || 'invalid'
290297

291298
if (valid) {
292299
toggleClasses(el, validClass, addClass)
@@ -299,8 +306,8 @@ export default class BaseValidation {
299306

300307
_toggleTouched (el, touched) {
301308
const { addClass, removeClass } = util.Vue.util
302-
const touchedClass = 'touched'
303-
const untouchedClass = 'untouched'
309+
const touchedClass = this._classes.touched || 'touched'
310+
const untouchedClass = this._classes.untouched || 'untouched'
304311

305312
if (touched) {
306313
toggleClasses(el, touchedClass, addClass)
@@ -313,8 +320,8 @@ export default class BaseValidation {
313320

314321
_togglePristine (el, pristine) {
315322
const { addClass, removeClass } = util.Vue.util
316-
const pristineClass = 'pristine'
317-
const dirtyClass = 'dirty'
323+
const pristineClass = this._classes.pristine || 'pristine'
324+
const dirtyClass = this._classes.dirty || 'dirty'
318325

319326
if (pristine) {
320327
toggleClasses(el, pristineClass, addClass)
@@ -327,7 +334,7 @@ export default class BaseValidation {
327334

328335
_toggleModfied (el, modified) {
329336
const { addClass, removeClass } = util.Vue.util
330-
const modifiedClass = 'modified'
337+
const modifiedClass = this._classes.modified || 'modified'
331338

332339
if (modified) {
333340
toggleClasses(el, modifiedClass, addClass)

test/specs/classes.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,4 +248,50 @@ describe('validation classes', () => {
248248
})
249249
})
250250
})
251+
252+
253+
describe('specify strict', () => {
254+
beforeEach((done) => {
255+
el.innerHTML = '<validator name="validator1">'
256+
+ '<form novalidate>'
257+
+ '<input type="text" v-validate:field1="{ required: true, minlength: 4 }"'
258+
+ ' :validate-classes="{'
259+
+ ' valid: \'valid-custom\', invalid: \'invalid-custom\','
260+
+ ' touched: \'touched-custom\', untouched: \'untouched-custom\', '
261+
+ ' pristine: \'pristine-custom\', dirty: \'dirty-custom\','
262+
+ ' modified: \'modified-custom\''
263+
+ '}">'
264+
+ '</form>'
265+
+ '</validator>'
266+
vm = new Vue({ el: el })
267+
vm.$nextTick(done)
268+
})
269+
270+
it('should be added', (done) => {
271+
let field1 = el.getElementsByTagName('input')[0]
272+
let cls1 = classes(field1)
273+
assert(!cls1.has('valid-custom'))
274+
assert(cls1.has('invalid-custom'))
275+
assert(!cls1.has('touched-custom'))
276+
assert(cls1.has('untouched-custom'))
277+
assert(cls1.has('pristine-custom'))
278+
assert(!cls1.has('dirty-custom'))
279+
assert(!cls1.has('modified-custom'))
280+
281+
field1.value = 'hello'
282+
trigger(field1, 'input')
283+
trigger(field1, 'blur')
284+
vm.$nextTick(() => {
285+
assert(cls1.has('valid-custom'))
286+
assert(!cls1.has('invalid-custom'))
287+
assert(cls1.has('touched-custom'))
288+
assert(!cls1.has('untouched-custom'))
289+
assert(!cls1.has('pristine-custom'))
290+
assert(cls1.has('dirty-custom'))
291+
assert(cls1.has('modified-custom'))
292+
293+
done()
294+
})
295+
})
296+
})
251297
})

0 commit comments

Comments
 (0)