From fcd33e72cf6c26b4278a1fb6c65a9c8d3bfe30bc Mon Sep 17 00:00:00 2001 From: Matt Sanders Date: Fri, 13 Oct 2017 16:45:34 +1300 Subject: [PATCH 01/11] moved errorDisplay to render function --- src/components/errorDisplay.js | 22 ++++++++++++++++++++++ src/components/errorDisplay.vue | 23 ----------------------- src/fields/baseField.js | 2 +- test/unit/specs/ErrorDisplay.spec.js | 2 +- 4 files changed, 24 insertions(+), 25 deletions(-) create mode 100644 src/components/errorDisplay.js delete mode 100644 src/components/errorDisplay.vue diff --git a/src/components/errorDisplay.js b/src/components/errorDisplay.js new file mode 100644 index 0000000..2b050a8 --- /dev/null +++ b/src/components/errorDisplay.js @@ -0,0 +1,22 @@ +export default { + render(h){ + if ( this.message ) return h('span', { + 'class': 'help-block form-text text-danger' + }, this.message); + }, + props: ['field', 'form'], + computed: { + message(){ + let message = false; + if ( !( this.field in this.form.$errors ) || !( this.field in this.form ) || this.form[ this.field ].$active || !this.form[this.field].$dirty ) return message; + let errors = this.form.$errors[ this.field ]; + Object.keys( errors ).some( errorKey => { + if ( typeof errors[ errorKey ] != 'boolean' ){ + message = errors[ errorKey ]; + return true; + } + }); + return message; + } + } +} diff --git a/src/components/errorDisplay.vue b/src/components/errorDisplay.vue deleted file mode 100644 index b0a4729..0000000 --- a/src/components/errorDisplay.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/src/fields/baseField.js b/src/fields/baseField.js index c390a5b..9724880 100644 --- a/src/fields/baseField.js +++ b/src/fields/baseField.js @@ -1,4 +1,4 @@ -import errorDisplay from '../components/errorDisplay.vue'; +import errorDisplay from '../components/errorDisplay'; export default { props: [ diff --git a/test/unit/specs/ErrorDisplay.spec.js b/test/unit/specs/ErrorDisplay.spec.js index 3ec5ca5..0360091 100644 --- a/test/unit/specs/ErrorDisplay.spec.js +++ b/test/unit/specs/ErrorDisplay.spec.js @@ -3,7 +3,7 @@ import {expect} from 'chai'; import sinonChai from 'sinon-chai'; import sinon from 'sinon'; import Vue from 'vue'; -import errorDisplay from 'src/components/errorDisplay.vue'; +import errorDisplay from 'src/components/errorDisplay'; let el, vm, data; From 5a2a7917b11f3a1f46cf785d510f784645765010 Mon Sep 17 00:00:00 2001 From: Matt Sanders Date: Wed, 25 Oct 2017 16:34:53 +1300 Subject: [PATCH 02/11] working on input --- package.json | 5 ++- src/fields/fieldInput.js | 80 +++++++++++++++++++++++++++++++++++ src/index.js | 29 ++++++------- test/unit/specs/index.spec.js | 13 +++++- 4 files changed, 108 insertions(+), 19 deletions(-) create mode 100644 src/fields/fieldInput.js diff --git a/package.json b/package.json index c4e6656..a0aa76f 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "babel-preset-es2015": "6.9.0", "babel-preset-es2015-loose-rollup": "^7.0.0", "babel-preset-stage-0": "6.5.0", + "babel-runtime": "^6.23.0", "chai": "3.5.0", "conventional-changelog-cli": "1.2.0", "conventional-github-releaser": "1.1.3", @@ -74,8 +75,8 @@ "sinon-chai": "2.8.0", "style-loader": "0.13.1", "uglify-js": "^2.6.4", - "vue": "~2.0.0", - "vue-formly": "^2.3.9", + "vue": "^2.2.6", + "vue-formly": "^2.5.0", "vue-hot-reload-api": "1.3.2", "vue-html-loader": "1.2.3", "vue-loader": "8.5.3", diff --git a/src/fields/fieldInput.js b/src/fields/fieldInput.js new file mode 100644 index 0000000..53701bb --- /dev/null +++ b/src/fields/fieldInput.js @@ -0,0 +1,80 @@ +import baseField from './baseField'; +export default { + render(h){ + const children = []; + const self = this; + + // add the label if it needs it + if ( this.to.label ) children.push( + h('label', { + attrs: { + 'for': this.to.id + } + }, this.to.label ) + ); + + // add the input + children.push( + h('input', { + attrs: { + id: this.to.id, + type: this.to.inputType || 'text', + ...this.to.atts + }, + 'class': { + 'form-control': true, + ...this.to.classes + }, + domProps: { + value: self.value + }, + on: { + input(event){ + self.value = event.target.value; + self.$emit('input', event.target.value); + }, + blur: this.onBlur, + focus: this.onFocus, + click: this.onClick, + change: this.onChange, + keyup: this.onKeyup, + keydown: this.onKeydown + } + }) + ); + + // add the error element + children.push( + h('error-display', { + props: { + form: this.form, + field: this.field.key + } + }) + ); + return h('div', { + 'class': [ + 'form-group formly-input', + this.to.inputType, + this.to.wrapperClasses, + { + 'formly-has-value': this.model[ this.field.key ], + 'formly-has-focus': this.form[ this.field.key ].$active, + 'has-error has-danger': this.hasError + } + ] + }, children); + }, + mixins: [baseField], + methods: { + onChange: function(e){ + + this.$set(this.form[this.field.key], '$dirty', true); + this.runFunction('onChange', e); + if ( this.to.inputType == 'file' ){ + this.$set(this.model, this.field.key, this.$el.querySelector('input').files); + } + + } + } +} diff --git a/src/index.js b/src/index.js index ca16812..a9b1de2 100644 --- a/src/index.js +++ b/src/index.js @@ -1,24 +1,23 @@ -let Fields = require.context("./fields/", false, /^\.\/field([\w-_]+)\.vue$/); +let Fields = require.context("./fields/", false, /^\.\/field([\w-_]+)\.js$/); let FormlyBootstrap = { - install(Vue, options){ - Fields.keys().forEach((key) => { - //remove all the .vue crap - let component = key - .replace(/^\.\//, "") - .replace(/\.vue/, "") - .replace(/^field/, ""); - - //convert the first letter to lc - component = component.charAt(0).toLowerCase() + component.slice(1); + install(Vue, options){ + Fields.keys().forEach((key) => { + //remove all the .vue crap + let component = key + .replace(/^\.\//, "") + .replace(/\.js/, "") + .replace(/^field/, ""); + //convert the first letter to lc + component = component.charAt(0).toLowerCase() + component.slice(1); - Vue.$formly.addType(component, Fields(key)); - }); - } + Vue.$formly.addType(component, Fields(key).default); + }); + } }; //auto install if (typeof window !== 'undefined' && window.Vue) { - window.Vue.use(FormlyBootstrap); + window.Vue.use(FormlyBootstrap); } export default FormlyBootstrap; diff --git a/test/unit/specs/index.spec.js b/test/unit/specs/index.spec.js index 556efa1..e9d2c56 100644 --- a/test/unit/specs/index.spec.js +++ b/test/unit/specs/index.spec.js @@ -17,7 +17,15 @@ function createForm(){ //el.innerHTML = ''; vm = new Vue({ data: data, - template: '' + render(h){ + return h('formly-form', { + props: { + form: this.form, + fields: this.fields, + model: this.model + } + }); + } }).$mount(el); return [el, vm]; @@ -226,7 +234,6 @@ describe('Bootstrap Field Inputs', () => { }); }); - describe('conditional elements', ()=>{ describeConditional('input'); }); @@ -293,6 +300,8 @@ describe('Bootstrap Field Inputs', () => { }); }); + + return; describe('Select', () => { describe('functions', ()=>{ From 98106e450e3e83b4d6fa86442e03650b645ee546 Mon Sep 17 00:00:00 2001 From: Matt Sanders Date: Wed, 25 Oct 2017 16:38:27 +1300 Subject: [PATCH 03/11] adding v-model to input --- src/fields/fieldInput.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fields/fieldInput.js b/src/fields/fieldInput.js index 53701bb..53624ee 100644 --- a/src/fields/fieldInput.js +++ b/src/fields/fieldInput.js @@ -26,11 +26,11 @@ export default { ...this.to.classes }, domProps: { - value: self.value + value: this.model[ this.field.key ] }, on: { input(event){ - self.value = event.target.value; + self.model[ self.field.key ] = event.target.value; self.$emit('input', event.target.value); }, blur: this.onBlur, From d42eee9f2baf788a033cfc927f5195433df6888a Mon Sep 17 00:00:00 2001 From: Matt Sanders Date: Mon, 30 Oct 2017 16:19:01 +1300 Subject: [PATCH 04/11] removing .# from commits --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0e33295..d6fff67 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *~ \#*\# +\.\#* /.emacs.desktop /.emacs.desktop.lock From 4a866fe515ce175bf5aacd52f5b070241aec7420 Mon Sep 17 00:00:00 2001 From: Matt Sanders Date: Mon, 30 Oct 2017 16:19:13 +1300 Subject: [PATCH 05/11] adding select --- src/fields/fieldSelect.js | 82 +++++++++++++++++++++++++++++++++++ test/unit/specs/index.spec.js | 21 ++++++++- 2 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 src/fields/fieldSelect.js diff --git a/src/fields/fieldSelect.js b/src/fields/fieldSelect.js new file mode 100644 index 0000000..a17c71c --- /dev/null +++ b/src/fields/fieldSelect.js @@ -0,0 +1,82 @@ +import baseField from './baseField'; +export default { + mixins: [baseField], + render(h){ + const children = []; + const self = this; + + // add the label if it needs it + if ( this.to.label ) children.push( + h('label', { + attrs: { + 'for': this.to.id + } + }, this.to.label ) + ); + + // create each option + const options = []; + if ( 'options' in this.field ){ + this.field.options.forEach( option => { + const optionVal = option.hasOwnProperty('value') ? option.value : option; + options.push( + h('option', { + domProps: { + value: optionVal + } + }, option.label || option) + ); + }); + } + + // add the element + children.push( + h('select', { + attrs: { + id: this.to.id, + ...this.to.atts + }, + 'class': { + 'form-control': true, + ...this.to.classes + }, + domProps: { + value: this.model[this.field.key] + }, + on: { + click: this.onClick, + blur: this.onBlur, + focus: this.onFocus, + keyup: this.onKeyup, + keydown: this.onKeydown, + change(event){ + self.model[ self.field.key ] = event.target.value; + self.$emit('change', event.target.value); + if ( typeof self.onChange === 'function' ) self.onChange(event); + } + } + }, options) + ); + + // add the error element + children.push( + h('error-display', { + props: { + form: this.form, + field: this.field.key + } + }) + ); + + // create the wrapper element + return h('div', { + 'class': [ + 'form-group formly-select', + this.to.wrapperClasses, + { + 'has-error has-danger': this.hasError + } + ] + }, children); + } +} diff --git a/test/unit/specs/index.spec.js b/test/unit/specs/index.spec.js index e9d2c56..02e185b 100644 --- a/test/unit/specs/index.spec.js +++ b/test/unit/specs/index.spec.js @@ -300,8 +300,6 @@ describe('Bootstrap Field Inputs', () => { }); }); - - return; describe('Select', () => { describe('functions', ()=>{ @@ -348,9 +346,28 @@ describe('Bootstrap Field Inputs', () => { expect(option.value).to.equal('bar'); expect(option.innerHTML).to.equal('Foo'); }); + + it('boolean options', done => { + data.model.test = false; + data.fields[0].type = 'select'; + data.fields[0].options = [ + { label: 'Foo', value: true }, + { label: 'Foo', value: false } + ]; + createForm(); + const select = vm.$el.querySelectorAll('select'); + expect(select[0].selectedIndex).to.equal(1); + vm.model.test = true; + setTimeout(() => { + expect(select[0].selectedIndex).to.equal(0); + done(); + }); + }); }); + return; + describe('Textarea', () => { describe('functions', ()=>{ describeFunctions('textarea', 'textarea'); From 0f3c40fce1e9f8bc086561c3cbe73461d99dd17e Mon Sep 17 00:00:00 2001 From: Matt Sanders Date: Mon, 30 Oct 2017 16:23:31 +1300 Subject: [PATCH 06/11] added textarea --- src/fields/fieldTextarea.js | 69 +++++++++++++++++++++++++++++++++++ test/unit/specs/index.spec.js | 4 +- 2 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 src/fields/fieldTextarea.js diff --git a/src/fields/fieldTextarea.js b/src/fields/fieldTextarea.js new file mode 100644 index 0000000..7c7f60b --- /dev/null +++ b/src/fields/fieldTextarea.js @@ -0,0 +1,69 @@ +import baseField from './baseField'; +export default { + mixins: [baseField], + render(h){ + const self = this; + const children = []; + + // add the label if it needs it + if ( this.to.label ) children.push( + h('label', { + attrs: { + 'for': this.to.id + } + }, this.to.label ) + ); + + // add the textarea + children.push( + h('textarea', { + attrs: { + id: this.to.id, + ...this.to.atts + }, + 'class': { + 'form-control': true, + ...this.to.classes + }, + domProps: { + value: this.model[ this.field.key ] + }, + on: { + input(event){ + self.model[ self.field.key ] = event.target.value; + self.$emit('input', event.target.value); + }, + blur: this.onBlur, + focus: this.onFocus, + click: this.onClick, + change: this.onChange, + keyup: this.onKeyup, + keydown: this.onKeydown + } + }) + ); + + // add the error element + children.push( + h('error-display', { + props: { + form: this.form, + field: this.field.key + } + }) + ); + + // create the wrapper element + return h('div', { + 'class': [ + 'form-group formly-textarea', + this.to.wrapperClasses, + { + 'formly-has-value': this.model[ this.field.key ], + 'formly-has-focus': this.form[ this.field.key ].$active, + 'has-error has-danger': this.hasError + } + ] + }, children); + } +} diff --git a/test/unit/specs/index.spec.js b/test/unit/specs/index.spec.js index 02e185b..97987b5 100644 --- a/test/unit/specs/index.spec.js +++ b/test/unit/specs/index.spec.js @@ -365,8 +365,6 @@ describe('Bootstrap Field Inputs', () => { }); }); - - return; describe('Textarea', () => { describe('functions', ()=>{ @@ -389,6 +387,8 @@ describe('Bootstrap Field Inputs', () => { expect(inputs).to.be.length(1); }); }); + + return; describe("List", () => { describe('checkbox functions', ()=>{ From b1d9a5ab55bac0a6b90a5dae1fdac91be2cbf288 Mon Sep 17 00:00:00 2001 From: Matt Sanders Date: Mon, 30 Oct 2017 17:13:33 +1300 Subject: [PATCH 07/11] added lists --- src/fields/fieldList.js | 102 ++++++++++++++++++++++++++++++++++ test/unit/specs/index.spec.js | 19 ++++++- 2 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 src/fields/fieldList.js diff --git a/src/fields/fieldList.js b/src/fields/fieldList.js new file mode 100644 index 0000000..fbdbec5 --- /dev/null +++ b/src/fields/fieldList.js @@ -0,0 +1,102 @@ +import baseField from './baseField'; +export default { + computed: { + inputType(){ + return this.to.inputType || 'checkbox'; + } + }, + created(){ + // set the default value to array + if ( this.inputType === 'checkbox' && ( this.model[ this.field.key ].constructor !== Array || !this.model[ this.field.key ].constructor) ) this.$set( this.model, this.field.key, [] ); + }, + mixins: [baseField], + render(h){ + const children = []; + const self = this; + const isArray = this.inputType === 'checkbox'; + + // add the label if it needs it + if ( this.to.label ) children.push( + h('label', this.to.label ) + ); + + // create each option + if ( 'options' in this.field ){ + this.field.options.forEach( option => { + const optionLabel = option.hasOwnProperty('label') ? option.label : option; + const optionVal = option.hasOwnProperty('value') ? option.value : option; + const optionChecked = isArray ? this.model[ this.field.key ].indexOf( optionVal ) > -1 : this.model[ this.field.key ] === optionVal; + + children.push( + // wrap each option in a label + h('label', { + 'class': this.to.labelClasses + }, [ + // create an input + h('input', { + attrs: { + type: this.inputType, + ...this.to.atts + }, + 'class': { + ...this.to.classes + }, + domProps: { + value: optionVal, + checked: optionChecked + }, + on: { + click: this.onClick, + blur: this.onBlur, + focus: this.onFocus, + keyup: this.onKeyup, + keydown: this.onKeydown, + change(event){ + const isChecked = event.target.checked; + // we need to add/remove differently depending on the type of input we're using + if ( isArray ){ + if ( isChecked ){ + // if it's a checkbox, and hence an array, push it + self.model[ self.field.key ].push( event.target.value ); + } else { + // otherwise remove it + const valueIdx = self.model[ self.field.key ].indexOf( event.target.value ); + if ( valueIdx > -1 ) self.model[ self.field.key ].splice( valueIdx, 1 ); + } + } else { + self.model[ self.field.key ] = isChecked ? event.target.value : null; + } + self.$emit('change', event.target.value); + if ( typeof self.onChange === 'function' ) self.onChange(event); + } + } + }), + // display the label + optionLabel + ]) + ); + }); + } + + // add the error element + children.push( + h('error-display', { + props: { + form: this.form, + field: this.field.key + } + }) + ); + + // create the wrapper element + return h('div', { + 'class': [ + 'form-group formly-list', + this.to.wrapperClasses, + { + 'has-error has-danger': this.hasError + } + ] + }, children); + } +} diff --git a/test/unit/specs/index.spec.js b/test/unit/specs/index.spec.js index 97987b5..a940de4 100644 --- a/test/unit/specs/index.spec.js +++ b/test/unit/specs/index.spec.js @@ -387,8 +387,6 @@ describe('Bootstrap Field Inputs', () => { expect(inputs).to.be.length(1); }); }); - - return; describe("List", () => { describe('checkbox functions', ()=>{ @@ -453,6 +451,23 @@ describe('Bootstrap Field Inputs', () => { expect(labels[2].textContent).to.contain('Bar'); }); + it('boolean options', done => { + data.fields[0].type = 'list'; + data.fields[0].options = [ + { label: 'Foo', value: true }, + { label: 'Bar', value: false } + ]; + data.model.test = [false]; + createForm(); + expect(vm.$el.querySelectorAll('input')[1].checked).to.be.true; + data.model.test.push(true); + setTimeout(()=>{ + expect(vm.$el.querySelectorAll('input')[0].checked).to.be.true; + expect(vm.$el.querySelectorAll('input')[1].checked).to.be.true; + done(); + }); + }); + it('sets defaults', () => { data.fields[0].type = 'list'; data.fields[0].options = ['one', 'two']; From 0f913f2021149647dc0b6cc47b19bb970f9fc29e Mon Sep 17 00:00:00 2001 From: Matt Sanders Date: Mon, 30 Oct 2017 17:14:04 +1300 Subject: [PATCH 08/11] removing old .vue files --- src/fields/fieldInput.vue | 25 ------------------------- src/fields/fieldList.vue | 23 ----------------------- src/fields/fieldSelect.vue | 16 ---------------- src/fields/fieldTextarea.vue | 14 -------------- 4 files changed, 78 deletions(-) delete mode 100644 src/fields/fieldInput.vue delete mode 100644 src/fields/fieldList.vue delete mode 100644 src/fields/fieldSelect.vue delete mode 100644 src/fields/fieldTextarea.vue diff --git a/src/fields/fieldInput.vue b/src/fields/fieldInput.vue deleted file mode 100644 index 059f592..0000000 --- a/src/fields/fieldInput.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/src/fields/fieldList.vue b/src/fields/fieldList.vue deleted file mode 100644 index 844925d..0000000 --- a/src/fields/fieldList.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/src/fields/fieldSelect.vue b/src/fields/fieldSelect.vue deleted file mode 100644 index d063ed3..0000000 --- a/src/fields/fieldSelect.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/src/fields/fieldTextarea.vue b/src/fields/fieldTextarea.vue deleted file mode 100644 index 1eb98b6..0000000 --- a/src/fields/fieldTextarea.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - From fd0994600a76c1e1839a6d945d19e6f3f59e0d44 Mon Sep 17 00:00:00 2001 From: Matt Sanders Date: Thu, 16 Nov 2017 16:47:15 +1300 Subject: [PATCH 09/11] made sure that lists & selects can handle boolean values --- src/fields/baseField.js | 3 + src/fields/fieldList.js | 9 +- src/fields/fieldSelect.js | 5 +- test/unit/specs/index.spec.js | 157 +++++++++++++++++++++++++++------- 4 files changed, 138 insertions(+), 36 deletions(-) diff --git a/src/fields/baseField.js b/src/fields/baseField.js index 9724880..da30d70 100644 --- a/src/fields/baseField.js +++ b/src/fields/baseField.js @@ -16,6 +16,9 @@ export default this.$set(this.form, this.field.key, state); }, methods: { + booleanValue(value){ + return ( value === 'true' || value === 'false' ) ? value === 'true' : value; + }, runFunction: function(action, e){ if ( typeof this.to[action] == 'function' ) this.to[action].call(this, e); }, diff --git a/src/fields/fieldList.js b/src/fields/fieldList.js index fbdbec5..3e6b1a7 100644 --- a/src/fields/fieldList.js +++ b/src/fields/fieldList.js @@ -53,20 +53,21 @@ export default { keydown: this.onKeydown, change(event){ const isChecked = event.target.checked; + const val = self.booleanValue( event.target.value ); // we need to add/remove differently depending on the type of input we're using if ( isArray ){ if ( isChecked ){ // if it's a checkbox, and hence an array, push it - self.model[ self.field.key ].push( event.target.value ); + self.model[ self.field.key ].push( val ); } else { // otherwise remove it - const valueIdx = self.model[ self.field.key ].indexOf( event.target.value ); + const valueIdx = self.model[ self.field.key ].indexOf( val ); if ( valueIdx > -1 ) self.model[ self.field.key ].splice( valueIdx, 1 ); } } else { - self.model[ self.field.key ] = isChecked ? event.target.value : null; + self.model[ self.field.key ] = isChecked ? val : null; } - self.$emit('change', event.target.value); + self.$emit('change', val); if ( typeof self.onChange === 'function' ) self.onChange(event); } } diff --git a/src/fields/fieldSelect.js b/src/fields/fieldSelect.js index a17c71c..eb4059d 100644 --- a/src/fields/fieldSelect.js +++ b/src/fields/fieldSelect.js @@ -50,8 +50,9 @@ export default { keyup: this.onKeyup, keydown: this.onKeydown, change(event){ - self.model[ self.field.key ] = event.target.value; - self.$emit('change', event.target.value); + const val = self.booleanValue( event.target.value ); + self.model[ self.field.key ] = val; + self.$emit('change', val); if ( typeof self.onChange === 'function' ) self.onChange(event); } } diff --git a/test/unit/specs/index.spec.js b/test/unit/specs/index.spec.js index a940de4..acacfe2 100644 --- a/test/unit/specs/index.spec.js +++ b/test/unit/specs/index.spec.js @@ -347,20 +347,48 @@ describe('Bootstrap Field Inputs', () => { expect(option.innerHTML).to.equal('Foo'); }); - it('boolean options', done => { - data.model.test = false; - data.fields[0].type = 'select'; - data.fields[0].options = [ - { label: 'Foo', value: true }, - { label: 'Foo', value: false } - ]; - createForm(); - const select = vm.$el.querySelectorAll('select'); - expect(select[0].selectedIndex).to.equal(1); - vm.model.test = true; - setTimeout(() => { - expect(select[0].selectedIndex).to.equal(0); - done(); + describe('boolean options', () => { + it('sets boolean values', done => { + data.model.test = ''; + data.fields[0].type = 'select'; + data.fields[0].options = [ + { label: 'Foo', value: true }, + { label: 'Foo', value: false } + ]; + createForm(); + const select = vm.$el.querySelectorAll('select'); + select[0].value = 'false'; + trigger(select[0], 'change'); + setTimeout(() => { + expect(vm.model.test).to.be.false; + select[0].value = 'true'; + trigger(select[0], 'change'); + setTimeout(() => { + expect(vm.model.test).to.be.true; + done(); + }); + }); + }); + + it('takes boolean values', done => { + data.model.test = false; + data.fields[0].type = 'select'; + data.fields[0].options = [ + { label: 'Foo', value: true }, + { label: 'Foo', value: false } + ]; + createForm(); + const select = vm.$el.querySelectorAll('select'); + expect(select[0].selectedIndex).to.equal(1); + vm.model.test = true; + setTimeout(() => { + expect(select[0].selectedIndex).to.equal(0); + vm.model.test = false; + setTimeout(() => { + expect(select[0].selectedIndex).to.equal(1); + done(); + }); + }); }); }); @@ -451,22 +479,91 @@ describe('Bootstrap Field Inputs', () => { expect(labels[2].textContent).to.contain('Bar'); }); - it('boolean options', done => { - data.fields[0].type = 'list'; - data.fields[0].options = [ - { label: 'Foo', value: true }, - { label: 'Bar', value: false } - ]; - data.model.test = [false]; - createForm(); - expect(vm.$el.querySelectorAll('input')[1].checked).to.be.true; - data.model.test.push(true); - setTimeout(()=>{ - expect(vm.$el.querySelectorAll('input')[0].checked).to.be.true; - expect(vm.$el.querySelectorAll('input')[1].checked).to.be.true; - done(); - }); - }); + describe('boolean options', () => { + describe('checkbox', () => { + it('sets boolean values', done => { + data.fields[0].type = 'list'; + data.fields[0].options = [ + { label: 'Foo', value: true }, + { label: 'Bar', value: false } + ]; + createForm(); + + const inputs = vm.$el.querySelectorAll('input'); + inputs[0].checked = true; + trigger(inputs[0], 'change'); + setTimeout(() => { + expect(vm.model.test.indexOf(true)).to.equal(0); + inputs[1].checked = true; + trigger(inputs[1], 'change'); + setTimeout(() => { + expect(vm.model.test.indexOf(false)).to.equal(1); + done(); + }); + }); + }); + + it('takes boolean values', done => { + data.fields[0].type = 'list'; + data.fields[0].options = [ + { label: 'Foo', value: true }, + { label: 'Bar', value: false } + ]; + data.model.test = [false]; + createForm(); + expect(vm.$el.querySelectorAll('input')[1].checked).to.be.true; + data.model.test.push(true); + setTimeout(()=>{ + expect(vm.$el.querySelectorAll('input')[0].checked).to.be.true; + expect(vm.$el.querySelectorAll('input')[1].checked).to.be.true; + done(); + }); + }); + });// checkbox + + describe('radio', () => { + it('sets boolean values', done => { + data.fields[0].type = 'list'; + data.fields[0].templateOptions.inputType = 'radio'; + data.fields[0].options = [ + { label: 'Foo', value: true }, + { label: 'Bar', value: false } + ]; + createForm(); + + const inputs = vm.$el.querySelectorAll('input'); + inputs[0].checked = true; + trigger(inputs[0], 'change'); + setTimeout(() => { + expect(vm.model.test).to.be.true; + inputs[1].checked = true; + trigger(inputs[1], 'change'); + setTimeout(() => { + expect(vm.model.test).to.be.false; + done(); + }); + }); + }); + + it('takes boolean values', done => { + data.fields[0].type = 'list'; + data.fields[0].templateOptions.inputType = 'radio'; + data.fields[0].options = [ + { label: 'Foo', value: true }, + { label: 'Bar', value: false } + ]; + data.model.test = false; + createForm(); + expect(vm.$el.querySelectorAll('input')[1].checked).to.be.true; + data.model.test = true; + setTimeout(()=>{ + expect(vm.$el.querySelectorAll('input')[0].checked).to.be.true; + expect(vm.$el.querySelectorAll('input')[1].checked).to.be.false; + done(); + }); + }); + });// radio + });// boolean values it('sets defaults', () => { data.fields[0].type = 'list'; From 8c5cb4769debfbd5b6b4edfdb8f6227e0c7584a4 Mon Sep 17 00:00:00 2001 From: Matt Sanders Date: Thu, 16 Nov 2017 16:52:24 +1300 Subject: [PATCH 10/11] 2.3.0 --- dist/vue-formly-bootstrap.js | 4 ++-- dist/vue-formly-bootstrap.min.js | 4 ++-- package.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/vue-formly-bootstrap.js b/dist/vue-formly-bootstrap.js index f9e1f7a..5cdd0ca 100644 --- a/dist/vue-formly-bootstrap.js +++ b/dist/vue-formly-bootstrap.js @@ -1,7 +1,7 @@ /** - * vue-formly-bootstrap v2.2.7 + * vue-formly-bootstrap v2.3.0 * https://github.com/matt-sanders/vue-formly-bootstrap * Released under the MIT License. */ -(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==="object"&&typeof module==="object")module.exports=factory();else if(typeof define==="function"&&define.amd)define([],factory);else if(typeof exports==="object")exports["VueFormlyBootstrap"]=factory();else root["VueFormlyBootstrap"]=factory()})(this,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:false};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.loaded=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.p="";return __webpack_require__(0)}(function(modules){for(var i in modules){if(Object.prototype.hasOwnProperty.call(modules,i)){switch(typeof modules[i]){case"function":break;case"object":modules[i]=function(_m){var args=_m.slice(1),fn=modules[_m[0]];return function(a,b,c){fn.apply(this,[a,b,c].concat(args))}}(modules[i]);break;default:modules[i]=modules[modules[i]];break}}}return modules}([function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var Fields=__webpack_require__(1);var FormlyBootstrap={install:function install(Vue,options){Fields.keys().forEach(function(key){var component=key.replace(/^\.\//,"").replace(/\.vue/,"").replace(/^field/,"");component=component.charAt(0).toLowerCase()+component.slice(1);Vue.$formly.addType(component,Fields(key))})}};if(typeof window!=="undefined"&&window.Vue){window.Vue.use(FormlyBootstrap)}exports.default=FormlyBootstrap},function(module,exports,__webpack_require__){var map={"./fieldInput.vue":2,"./fieldList.vue":44,"./fieldSelect.vue":47,"./fieldTextarea.vue":50};function webpackContext(req){return __webpack_require__(webpackContextResolve(req))}function webpackContextResolve(req){return map[req]||function(){throw new Error("Cannot find module '"+req+"'.")}()}webpackContext.keys=function webpackContextKeys(){return Object.keys(map)};webpackContext.resolve=webpackContextResolve;module.exports=webpackContext;webpackContext.id=1},function(module,exports,__webpack_require__){var __vue_script__,__vue_template__;__vue_script__=__webpack_require__(3);__vue_template__=__webpack_require__(43);module.exports=__vue_script__||{};if(module.exports.__esModule)module.exports=module.exports.default;if(__vue_template__){(typeof module.exports==="function"?module.exports.options||(module.exports.options={}):module.exports).template=__vue_template__}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _baseField=__webpack_require__(4);var _baseField2=_interopRequireDefault(_baseField);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={mixins:[_baseField2.default],methods:{onChange:function onChange(e){this.$set(this.form[this.field.key],"$dirty",true);this.runFunction("onChange",e);if(this.to.inputType=="file"){this.$set(this.model,this.field.key,this.$el.querySelector("input").files)}}}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _keys=__webpack_require__(5);var _keys2=_interopRequireDefault(_keys);var _errorDisplay=__webpack_require__(40);var _errorDisplay2=_interopRequireDefault(_errorDisplay);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={props:["form","field","model","to"],created:function created(){var state={$dirty:false,$active:false,$hasError:false};this.$set(this.form,this.field.key,state)},methods:{runFunction:function runFunction(action,e){if(typeof this.to[action]=="function")this.to[action].call(this,e)},onFocus:function onFocus(e){this.$set(this.form[this.field.key],"$active",true);this.runFunction("onFocus",e)},onBlur:function onBlur(e){this.$set(this.form[this.field.key],"$dirty",true);this.$set(this.form[this.field.key],"$active",false);this.runFunction("onBlur",e)},onClick:function onClick(e){this.runFunction("onClick",e)},onChange:function onChange(e){this.$set(this.form[this.field.key],"$dirty",true);this.runFunction("onChange",e)},onKeyup:function onKeyup(e){this.runFunction("onKeyup",e)},onKeydown:function onKeydown(e){this.runFunction("onKeydown",e)}},computed:{hasError:function hasError(){if(this.form[this.field.key].$dirty==false||this.form[this.field.key].$active==true){return false}var errors=this.form.$errors[this.field.key];var hasErrors=false;(0,_keys2.default)(errors).forEach(function(err){if(errors[err]!==false)hasErrors=true});this.$set(this.form[this.field.key],"$hasError",hasErrors);return hasErrors}},components:{"error-display":_errorDisplay2.default}}},function(module,exports,__webpack_require__){module.exports={"default":__webpack_require__(6),__esModule:true}},function(module,exports,__webpack_require__){__webpack_require__(7);module.exports=__webpack_require__(27).Object.keys},function(module,exports,__webpack_require__){var toObject=__webpack_require__(8),$keys=__webpack_require__(10);__webpack_require__(25)("keys",function(){return function keys(it){return $keys(toObject(it))}})},function(module,exports,__webpack_require__){var defined=__webpack_require__(9);module.exports=function(it){return Object(defined(it))}},function(module,exports){module.exports=function(it){if(it==undefined)throw TypeError("Can't call method on "+it);return it}},function(module,exports,__webpack_require__){var $keys=__webpack_require__(11),enumBugKeys=__webpack_require__(24);module.exports=Object.keys||function keys(O){return $keys(O,enumBugKeys)}},function(module,exports,__webpack_require__){var has=__webpack_require__(12),toIObject=__webpack_require__(13),arrayIndexOf=__webpack_require__(16)(false),IE_PROTO=__webpack_require__(20)("IE_PROTO");module.exports=function(object,names){var O=toIObject(object),i=0,result=[],key;for(key in O)if(key!=IE_PROTO)has(O,key)&&result.push(key);while(names.length>i)if(has(O,key=names[i++])){~arrayIndexOf(result,key)||result.push(key)}return result}},function(module,exports){var hasOwnProperty={}.hasOwnProperty;module.exports=function(it,key){return hasOwnProperty.call(it,key)}},function(module,exports,__webpack_require__){var IObject=__webpack_require__(14),defined=__webpack_require__(9);module.exports=function(it){return IObject(defined(it))}},function(module,exports,__webpack_require__){var cof=__webpack_require__(15);module.exports=Object("z").propertyIsEnumerable(0)?Object:function(it){return cof(it)=="String"?it.split(""):Object(it)}},function(module,exports){var toString={}.toString;module.exports=function(it){return toString.call(it).slice(8,-1)}},function(module,exports,__webpack_require__){var toIObject=__webpack_require__(13),toLength=__webpack_require__(17),toIndex=__webpack_require__(19);module.exports=function(IS_INCLUDES){return function($this,el,fromIndex){var O=toIObject($this),length=toLength(O.length),index=toIndex(fromIndex,length),value;if(IS_INCLUDES&&el!=el)while(length>index){value=O[index++];if(value!=value)return true}else for(;length>index;index++)if(IS_INCLUDES||index in O){if(O[index]===el)return IS_INCLUDES||index||0}return!IS_INCLUDES&&-1}}},function(module,exports,__webpack_require__){var toInteger=__webpack_require__(18),min=Math.min;module.exports=function(it){return it>0?min(toInteger(it),9007199254740991):0}},function(module,exports){var ceil=Math.ceil,floor=Math.floor;module.exports=function(it){return isNaN(it=+it)?0:(it>0?floor:ceil)(it)}},function(module,exports,__webpack_require__){var toInteger=__webpack_require__(18),max=Math.max,min=Math.min;module.exports=function(index,length){index=toInteger(index);return index<0?max(index+length,0):min(index,length)}},function(module,exports,__webpack_require__){var shared=__webpack_require__(21)("keys"),uid=__webpack_require__(23);module.exports=function(key){return shared[key]||(shared[key]=uid(key))}},function(module,exports,__webpack_require__){var global=__webpack_require__(22),SHARED="__core-js_shared__",store=global[SHARED]||(global[SHARED]={});module.exports=function(key){return store[key]||(store[key]={})}},function(module,exports){var global=module.exports=typeof window!="undefined"&&window.Math==Math?window:typeof self!="undefined"&&self.Math==Math?self:Function("return this")();if(typeof __g=="number")__g=global},function(module,exports){var id=0,px=Math.random();module.exports=function(key){return"Symbol(".concat(key===undefined?"":key,")_",(++id+px).toString(36))}},function(module,exports){module.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(module,exports,__webpack_require__){var $export=__webpack_require__(26),core=__webpack_require__(27),fails=__webpack_require__(36);module.exports=function(KEY,exec){var fn=(core.Object||{})[KEY]||Object[KEY],exp={};exp[KEY]=exec(fn);$export($export.S+$export.F*fails(function(){fn(1)}),"Object",exp)}},function(module,exports,__webpack_require__){var global=__webpack_require__(22),core=__webpack_require__(27),ctx=__webpack_require__(28),hide=__webpack_require__(30),PROTOTYPE="prototype";var $export=function(type,name,source){var IS_FORCED=type&$export.F,IS_GLOBAL=type&$export.G,IS_STATIC=type&$export.S,IS_PROTO=type&$export.P,IS_BIND=type&$export.B,IS_WRAP=type&$export.W,exports=IS_GLOBAL?core:core[name]||(core[name]={}),expProto=exports[PROTOTYPE],target=IS_GLOBAL?global:IS_STATIC?global[name]:(global[name]||{})[PROTOTYPE],key,own,out;if(IS_GLOBAL)source=name;for(key in source){own=!IS_FORCED&&target&&target[key]!==undefined;if(own&&key in exports)continue;out=own?target[key]:source[key];exports[key]=IS_GLOBAL&&typeof target[key]!="function"?source[key]:IS_BIND&&own?ctx(out,global):IS_WRAP&&target[key]==out?function(C){var F=function(a,b,c){if(this instanceof C){switch(arguments.length){case 0:return new C;case 1:return new C(a);case 2:return new C(a,b)}return new C(a,b,c)}return C.apply(this,arguments)};F[PROTOTYPE]=C[PROTOTYPE];return F}(out):IS_PROTO&&typeof out=="function"?ctx(Function.call,out):out;if(IS_PROTO){(exports.virtual||(exports.virtual={}))[key]=out;if(type&$export.R&&expProto&&!expProto[key])hide(expProto,key,out)}}};$export.F=1;$export.G=2;$export.S=4;$export.P=8;$export.B=16;$export.W=32;$export.U=64;$export.R=128;module.exports=$export},function(module,exports){var core=module.exports={version:"2.4.0"};if(typeof __e=="number")__e=core},function(module,exports,__webpack_require__){var aFunction=__webpack_require__(29);module.exports=function(fn,that,length){aFunction(fn);if(that===undefined)return fn;switch(length){case 1:return function(a){return fn.call(that,a)};case 2:return function(a,b){return fn.call(that,a,b)};case 3:return function(a,b,c){return fn.call(that,a,b,c)}}return function(){return fn.apply(that,arguments)}}},function(module,exports){module.exports=function(it){if(typeof it!="function")throw TypeError(it+" is not a function!");return it}},function(module,exports,__webpack_require__){var dP=__webpack_require__(31),createDesc=__webpack_require__(39);module.exports=__webpack_require__(35)?function(object,key,value){return dP.f(object,key,createDesc(1,value))}:function(object,key,value){object[key]=value;return object}},function(module,exports,__webpack_require__){var anObject=__webpack_require__(32),IE8_DOM_DEFINE=__webpack_require__(34),toPrimitive=__webpack_require__(38),dP=Object.defineProperty;exports.f=__webpack_require__(35)?Object.defineProperty:function defineProperty(O,P,Attributes){anObject(O);P=toPrimitive(P,true);anObject(Attributes);if(IE8_DOM_DEFINE)try{return dP(O,P,Attributes)}catch(e){}if("get"in Attributes||"set"in Attributes)throw TypeError("Accessors not supported!");if("value"in Attributes)O[P]=Attributes.value;return O}},function(module,exports,__webpack_require__){var isObject=__webpack_require__(33);module.exports=function(it){if(!isObject(it))throw TypeError(it+" is not an object!");return it}},function(module,exports){module.exports=function(it){return typeof it==="object"?it!==null:typeof it==="function"}},function(module,exports,__webpack_require__){module.exports=!__webpack_require__(35)&&!__webpack_require__(36)(function(){return Object.defineProperty(__webpack_require__(37)("div"),"a",{get:function(){return 7}}).a!=7})},function(module,exports,__webpack_require__){module.exports=!__webpack_require__(36)(function(){return Object.defineProperty({},"a",{get:function(){return 7}}).a!=7})},function(module,exports){module.exports=function(exec){try{return!!exec()}catch(e){return true}}},function(module,exports,__webpack_require__){var isObject=__webpack_require__(33),document=__webpack_require__(22).document,is=isObject(document)&&isObject(document.createElement);module.exports=function(it){return is?document.createElement(it):{}}},function(module,exports,__webpack_require__){var isObject=__webpack_require__(33);module.exports=function(it,S){if(!isObject(it))return it;var fn,val;if(S&&typeof(fn=it.toString)=="function"&&!isObject(val=fn.call(it)))return val;if(typeof(fn=it.valueOf)=="function"&&!isObject(val=fn.call(it)))return val;if(!S&&typeof(fn=it.toString)=="function"&&!isObject(val=fn.call(it)))return val;throw TypeError("Can't convert object to primitive value")}},function(module,exports){module.exports=function(bitmap,value){return{enumerable:!(bitmap&1),configurable:!(bitmap&2),writable:!(bitmap&4),value:value}}},function(module,exports,__webpack_require__){var __vue_script__,__vue_template__;__vue_script__=__webpack_require__(41);__vue_template__=__webpack_require__(42);module.exports=__vue_script__||{};if(module.exports.__esModule)module.exports=module.exports.default;if(__vue_template__){(typeof module.exports==="function"?module.exports.options||(module.exports.options={}):module.exports).template=__vue_template__}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _keys=__webpack_require__(5);var _keys2=_interopRequireDefault(_keys);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={props:["field","form"],computed:{message:function message(){var message=false;if(!(this.field in this.form.$errors)||!(this.field in this.form)||this.form[this.field].$active||!this.form[this.field].$dirty)return message;var errors=this.form.$errors[this.field];(0,_keys2.default)(errors).some(function(errorKey){if(typeof errors[errorKey]!="boolean"){message=errors[errorKey];return true}});return message}}}},function(module,exports){module.exports=' {{message}} '},function(module,exports){module.exports='
'},function(module,exports,__webpack_require__){var __vue_script__,__vue_template__;__vue_script__=__webpack_require__(45);__vue_template__=__webpack_require__(46);module.exports=__vue_script__||{};if(module.exports.__esModule)module.exports=module.exports.default;if(__vue_template__){(typeof module.exports==="function"?module.exports.options||(module.exports.options={}):module.exports).template=__vue_template__}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _baseField=__webpack_require__(4);var _baseField2=_interopRequireDefault(_baseField);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={mixins:[_baseField2.default],created:function created(){var type=this.to.inputType;if((!type||type=="checkbox")&&this.model[this.field.key]=="")this.$set(this.model,this.field.key,[])}}},function(module,exports){module.exports='
'},function(module,exports,__webpack_require__){var __vue_script__,__vue_template__;__vue_script__=__webpack_require__(48);__vue_template__=__webpack_require__(49);module.exports=__vue_script__||{};if(module.exports.__esModule)module.exports=module.exports.default;if(__vue_template__){(typeof module.exports==="function"?module.exports.options||(module.exports.options={}):module.exports).template=__vue_template__}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _baseField=__webpack_require__(4);var _baseField2=_interopRequireDefault(_baseField);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={mixins:[_baseField2.default]}},function(module,exports){module.exports='
'},function(module,exports,__webpack_require__){var __vue_script__,__vue_template__;__vue_script__=__webpack_require__(51);__vue_template__=__webpack_require__(52);module.exports=__vue_script__||{};if(module.exports.__esModule)module.exports=module.exports.default;if(__vue_template__){(typeof module.exports==="function"?module.exports.options||(module.exports.options={}):module.exports).template=__vue_template__}},48,function(module,exports){module.exports='
'}]))}); \ No newline at end of file +(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==="object"&&typeof module==="object")module.exports=factory();else if(typeof define==="function"&&define.amd)define([],factory);else if(typeof exports==="object")exports["VueFormlyBootstrap"]=factory();else root["VueFormlyBootstrap"]=factory()})(this,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:false};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.loaded=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.p="";return __webpack_require__(0)}([function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var Fields=__webpack_require__(1);var FormlyBootstrap={install:function install(Vue,options){Fields.keys().forEach(function(key){var component=key.replace(/^\.\//,"").replace(/\.js/,"").replace(/^field/,"");component=component.charAt(0).toLowerCase()+component.slice(1);Vue.$formly.addType(component,Fields(key).default)})}};if(typeof window!=="undefined"&&window.Vue){window.Vue.use(FormlyBootstrap)}exports.default=FormlyBootstrap},function(module,exports,__webpack_require__){var map={"./fieldInput.js":2,"./fieldList.js":47,"./fieldSelect.js":48,"./fieldTextarea.js":49};function webpackContext(req){return __webpack_require__(webpackContextResolve(req))}function webpackContextResolve(req){return map[req]||function(){throw new Error("Cannot find module '"+req+"'.")}()}webpackContext.keys=function webpackContextKeys(){return Object.keys(map)};webpackContext.resolve=webpackContextResolve;module.exports=webpackContext;webpackContext.id=1},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _extends2=__webpack_require__(3);var _extends3=_interopRequireDefault(_extends2);var _baseField=__webpack_require__(41);var _baseField2=_interopRequireDefault(_baseField);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={render:function render(h){var children=[];var self=this;if(this.to.label)children.push(h("label",{attrs:{"for":this.to.id}},this.to.label));children.push(h("input",{attrs:(0,_extends3.default)({id:this.to.id,type:this.to.inputType||"text"},this.to.atts),"class":(0,_extends3.default)({"form-control":true},this.to.classes),domProps:{value:this.model[this.field.key]},on:{input:function input(event){self.model[self.field.key]=event.target.value;self.$emit("input",event.target.value)},blur:this.onBlur,focus:this.onFocus,click:this.onClick,change:this.onChange,keyup:this.onKeyup,keydown:this.onKeydown}}));children.push(h("error-display",{props:{form:this.form,field:this.field.key}}));return h("div",{"class":["form-group formly-input",this.to.inputType,this.to.wrapperClasses,{"formly-has-value":this.model[this.field.key],"formly-has-focus":this.form[this.field.key].$active,"has-error has-danger":this.hasError}]},children)},mixins:[_baseField2.default],methods:{onChange:function onChange(e){this.$set(this.form[this.field.key],"$dirty",true);this.runFunction("onChange",e);if(this.to.inputType=="file"){this.$set(this.model,this.field.key,this.$el.querySelector("input").files)}}}}},function(module,exports,__webpack_require__){"use strict";exports.__esModule=true;var _assign=__webpack_require__(4);var _assign2=_interopRequireDefault(_assign);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default=_assign2.default||function(target){for(var i=1;iindex){var S=IObject(arguments[index++]);var keys=getSymbols?getKeys(S).concat(getSymbols(S)):getKeys(S);var length=keys.length;var j=0;var key;while(length>j)if(isEnum.call(S,key=keys[j++]))T[key]=S[key]}return T}:$assign},function(module,exports,__webpack_require__){var $keys=__webpack_require__(24);var enumBugKeys=__webpack_require__(37);module.exports=Object.keys||function keys(O){return $keys(O,enumBugKeys)}},function(module,exports,__webpack_require__){var has=__webpack_require__(25);var toIObject=__webpack_require__(26);var arrayIndexOf=__webpack_require__(30)(false);var IE_PROTO=__webpack_require__(34)("IE_PROTO");module.exports=function(object,names){var O=toIObject(object);var i=0;var result=[];var key;for(key in O)if(key!=IE_PROTO)has(O,key)&&result.push(key);while(names.length>i)if(has(O,key=names[i++])){~arrayIndexOf(result,key)||result.push(key)}return result}},function(module,exports){var hasOwnProperty={}.hasOwnProperty;module.exports=function(it,key){return hasOwnProperty.call(it,key)}},function(module,exports,__webpack_require__){var IObject=__webpack_require__(27);var defined=__webpack_require__(29);module.exports=function(it){return IObject(defined(it))}},function(module,exports,__webpack_require__){var cof=__webpack_require__(28);module.exports=Object("z").propertyIsEnumerable(0)?Object:function(it){return cof(it)=="String"?it.split(""):Object(it)}},function(module,exports){var toString={}.toString;module.exports=function(it){return toString.call(it).slice(8,-1)}},function(module,exports){module.exports=function(it){if(it==undefined)throw TypeError("Can't call method on "+it);return it}},function(module,exports,__webpack_require__){var toIObject=__webpack_require__(26);var toLength=__webpack_require__(31);var toAbsoluteIndex=__webpack_require__(33);module.exports=function(IS_INCLUDES){return function($this,el,fromIndex){var O=toIObject($this);var length=toLength(O.length);var index=toAbsoluteIndex(fromIndex,length);var value;if(IS_INCLUDES&&el!=el)while(length>index){value=O[index++];if(value!=value)return true}else for(;length>index;index++)if(IS_INCLUDES||index in O){if(O[index]===el)return IS_INCLUDES||index||0}return!IS_INCLUDES&&-1}}},function(module,exports,__webpack_require__){var toInteger=__webpack_require__(32);var min=Math.min;module.exports=function(it){return it>0?min(toInteger(it),9007199254740991):0}},function(module,exports){var ceil=Math.ceil;var floor=Math.floor;module.exports=function(it){return isNaN(it=+it)?0:(it>0?floor:ceil)(it)}},function(module,exports,__webpack_require__){var toInteger=__webpack_require__(32);var max=Math.max;var min=Math.min;module.exports=function(index,length){index=toInteger(index);return index<0?max(index+length,0):min(index,length)}},function(module,exports,__webpack_require__){var shared=__webpack_require__(35)("keys");var uid=__webpack_require__(36);module.exports=function(key){return shared[key]||(shared[key]=uid(key))}},function(module,exports,__webpack_require__){var global=__webpack_require__(8);var SHARED="__core-js_shared__";var store=global[SHARED]||(global[SHARED]={});module.exports=function(key){return store[key]||(store[key]={})}},function(module,exports){var id=0;var px=Math.random();module.exports=function(key){return"Symbol(".concat(key===undefined?"":key,")_",(++id+px).toString(36))}},function(module,exports){module.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(module,exports){exports.f=Object.getOwnPropertySymbols},function(module,exports){exports.f={}.propertyIsEnumerable},function(module,exports,__webpack_require__){var defined=__webpack_require__(29);module.exports=function(it){return Object(defined(it))}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _keys=__webpack_require__(42);var _keys2=_interopRequireDefault(_keys);var _errorDisplay=__webpack_require__(46);var _errorDisplay2=_interopRequireDefault(_errorDisplay);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={props:["form","field","model","to"],created:function created(){var state={$dirty:false,$active:false,$hasError:false};this.$set(this.form,this.field.key,state)},methods:{booleanValue:function booleanValue(value){return value==="true"||value==="false"?value==="true":value},runFunction:function runFunction(action,e){if(typeof this.to[action]=="function")this.to[action].call(this,e)},onFocus:function onFocus(e){this.$set(this.form[this.field.key],"$active",true);this.runFunction("onFocus",e)},onBlur:function onBlur(e){this.$set(this.form[this.field.key],"$dirty",true);this.$set(this.form[this.field.key],"$active",false);this.runFunction("onBlur",e)},onClick:function onClick(e){this.runFunction("onClick",e)},onChange:function onChange(e){this.$set(this.form[this.field.key],"$dirty",true);this.runFunction("onChange",e)},onKeyup:function onKeyup(e){this.runFunction("onKeyup",e)},onKeydown:function onKeydown(e){this.runFunction("onKeydown",e)}},computed:{hasError:function hasError(){if(this.form[this.field.key].$dirty==false||this.form[this.field.key].$active==true){return false}var errors=this.form.$errors[this.field.key];var hasErrors=false;(0,_keys2.default)(errors).forEach(function(err){if(errors[err]!==false)hasErrors=true});this.$set(this.form[this.field.key],"$hasError",hasErrors);return hasErrors}},components:{"error-display":_errorDisplay2.default}}},function(module,exports,__webpack_require__){module.exports={"default":__webpack_require__(43),__esModule:true}},function(module,exports,__webpack_require__){__webpack_require__(44);module.exports=__webpack_require__(9).Object.keys},function(module,exports,__webpack_require__){var toObject=__webpack_require__(40);var $keys=__webpack_require__(23);__webpack_require__(45)("keys",function(){return function keys(it){return $keys(toObject(it))}})},function(module,exports,__webpack_require__){var $export=__webpack_require__(7);var core=__webpack_require__(9);var fails=__webpack_require__(18);module.exports=function(KEY,exec){var fn=(core.Object||{})[KEY]||Object[KEY];var exp={};exp[KEY]=exec(fn);$export($export.S+$export.F*fails(function(){fn(1)}),"Object",exp)}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _keys=__webpack_require__(42);var _keys2=_interopRequireDefault(_keys);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={render:function render(h){if(this.message)return h("span",{"class":"help-block form-text text-danger"},this.message)},props:["field","form"],computed:{message:function message(){var message=false;if(!(this.field in this.form.$errors)||!(this.field in this.form)||this.form[this.field].$active||!this.form[this.field].$dirty)return message;var errors=this.form.$errors[this.field];(0,_keys2.default)(errors).some(function(errorKey){if(typeof errors[errorKey]!="boolean"){message=errors[errorKey];return true}});return message}}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _extends2=__webpack_require__(3);var _extends3=_interopRequireDefault(_extends2);var _baseField=__webpack_require__(41);var _baseField2=_interopRequireDefault(_baseField);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={computed:{inputType:function inputType(){return this.to.inputType||"checkbox"}},created:function created(){if(this.inputType==="checkbox"&&(this.model[this.field.key].constructor!==Array||!this.model[this.field.key].constructor))this.$set(this.model,this.field.key,[])},mixins:[_baseField2.default],render:function render(h){var _this=this;var children=[];var self=this;var isArray=this.inputType==="checkbox";if(this.to.label)children.push(h("label",this.to.label));if("options"in this.field){this.field.options.forEach(function(option){var optionLabel=option.hasOwnProperty("label")?option.label:option;var optionVal=option.hasOwnProperty("value")?option.value:option;var optionChecked=isArray?_this.model[_this.field.key].indexOf(optionVal)>-1:_this.model[_this.field.key]===optionVal;children.push(h("label",{"class":_this.to.labelClasses},[h("input",{attrs:(0,_extends3.default)({type:_this.inputType},_this.to.atts),"class":(0,_extends3.default)({},_this.to.classes),domProps:{value:optionVal,checked:optionChecked},on:{click:_this.onClick,blur:_this.onBlur,focus:_this.onFocus,keyup:_this.onKeyup,keydown:_this.onKeydown,change:function change(event){var isChecked=event.target.checked;var val=self.booleanValue(event.target.value);if(isArray){if(isChecked){self.model[self.field.key].push(val)}else{var valueIdx=self.model[self.field.key].indexOf(val);if(valueIdx>-1)self.model[self.field.key].splice(valueIdx,1)}}else{self.model[self.field.key]=isChecked?val:null}self.$emit("change",val);if(typeof self.onChange==="function")self.onChange(event)}}}),optionLabel]))})}children.push(h("error-display",{props:{form:this.form,field:this.field.key}}));return h("div",{"class":["form-group formly-list",this.to.wrapperClasses,{"has-error has-danger":this.hasError}]},children)}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _extends2=__webpack_require__(3);var _extends3=_interopRequireDefault(_extends2);var _baseField=__webpack_require__(41);var _baseField2=_interopRequireDefault(_baseField);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={mixins:[_baseField2.default],render:function render(h){var children=[];var self=this;if(this.to.label)children.push(h("label",{attrs:{"for":this.to.id}},this.to.label));var options=[];if("options"in this.field){this.field.options.forEach(function(option){var optionVal=option.hasOwnProperty("value")?option.value:option;options.push(h("option",{domProps:{value:optionVal}},option.label||option))})}children.push(h("select",{attrs:(0,_extends3.default)({id:this.to.id},this.to.atts),"class":(0,_extends3.default)({"form-control":true},this.to.classes),domProps:{value:this.model[this.field.key]},on:{click:this.onClick,blur:this.onBlur,focus:this.onFocus,keyup:this.onKeyup,keydown:this.onKeydown,change:function change(event){var val=self.booleanValue(event.target.value);self.model[self.field.key]=val;self.$emit("change",val);if(typeof self.onChange==="function")self.onChange(event)}}},options));children.push(h("error-display",{props:{form:this.form,field:this.field.key}}));return h("div",{"class":["form-group formly-select",this.to.wrapperClasses,{"has-error has-danger":this.hasError}]},children)}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _extends2=__webpack_require__(3);var _extends3=_interopRequireDefault(_extends2);var _baseField=__webpack_require__(41);var _baseField2=_interopRequireDefault(_baseField);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}exports.default={mixins:[_baseField2.default],render:function render(h){var self=this;var children=[];if(this.to.label)children.push(h("label",{attrs:{"for":this.to.id}},this.to.label));children.push(h("textarea",{attrs:(0,_extends3.default)({id:this.to.id},this.to.atts),"class":(0,_extends3.default)({"form-control":true},this.to.classes),domProps:{value:this.model[this.field.key]},on:{input:function input(event){self.model[self.field.key]=event.target.value;self.$emit("input",event.target.value)},blur:this.onBlur,focus:this.onFocus,click:this.onClick,change:this.onChange,keyup:this.onKeyup,keydown:this.onKeydown}}));children.push(h("error-display",{props:{form:this.form,field:this.field.key}}));return h("div",{"class":["form-group formly-textarea",this.to.wrapperClasses,{"formly-has-value":this.model[this.field.key],"formly-has-focus":this.form[this.field.key].$active,"has-error has-danger":this.hasError}]},children)}}}])}); \ No newline at end of file diff --git a/dist/vue-formly-bootstrap.min.js b/dist/vue-formly-bootstrap.min.js index 8db092f..1ac81d0 100644 --- a/dist/vue-formly-bootstrap.min.js +++ b/dist/vue-formly-bootstrap.min.js @@ -1,7 +1,7 @@ /** - * vue-formly-bootstrap v2.2.7 + * vue-formly-bootstrap v2.3.0 * https://github.com/matt-sanders/vue-formly-bootstrap * Released under the MIT License. */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.VueFormly=e():t.VueFormly=e()}(this,function(){return function(t){function e(n){if(o[n])return o[n].exports;var r=o[n]={exports:{},id:n,loaded:!1};return t[n].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var o={};return e.m=t,e.c=o,e.p="",e(0)}(function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))switch(typeof t[e]){case"function":break;case"object":t[e]=function(e){var o=e.slice(1),n=t[e[0]];return function(t,e,r){n.apply(this,[t,e,r].concat(o))}}(t[e]);break;default:t[e]=t[t[e]]}return t}([function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=o(1),r={install:function(t,e){n.keys().forEach(function(e){var o=e.replace(/^\.\//,"").replace(/\.vue/,"").replace(/^field/,"");o=o.charAt(0).toLowerCase()+o.slice(1),t.$formly.addType(o,n(e))})}};"undefined"!=typeof window&&window.Vue&&window.Vue.use(r),e["default"]=r},function(t,e,o){function n(t){return o(r(t))}function r(t){return i[t]||function(){throw new Error("Cannot find module '"+t+"'.")}()}var i={"./fieldInput.vue":2,"./fieldList.vue":44,"./fieldSelect.vue":47,"./fieldTextarea.vue":50};n.keys=function(){return Object.keys(i)},n.resolve=r,t.exports=n,n.id=1},function(t,e,o){var n,r;n=o(3),r=o(43),t.exports=n||{},t.exports.__esModule&&(t.exports=t.exports["default"]),r&&(("function"==typeof t.exports?t.exports.options||(t.exports.options={}):t.exports).template=r)},function(t,e,o){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var r=o(4),i=n(r);e["default"]={mixins:[i["default"]],methods:{onChange:function(t){this.$set(this.form[this.field.key],"$dirty",!0),this.runFunction("onChange",t),"file"==this.to.inputType&&this.$set(this.model,this.field.key,this.$el.querySelector("input").files)}}}},function(t,e,o){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var r=o(5),i=n(r),s=o(40),u=n(s);e["default"]={props:["form","field","model","to"],created:function(){var t={$dirty:!1,$active:!1,$hasError:!1};this.$set(this.form,this.field.key,t)},methods:{runFunction:function(t,e){"function"==typeof this.to[t]&&this.to[t].call(this,e)},onFocus:function(t){this.$set(this.form[this.field.key],"$active",!0),this.runFunction("onFocus",t)},onBlur:function(t){this.$set(this.form[this.field.key],"$dirty",!0),this.$set(this.form[this.field.key],"$active",!1),this.runFunction("onBlur",t)},onClick:function(t){this.runFunction("onClick",t)},onChange:function(t){this.$set(this.form[this.field.key],"$dirty",!0),this.runFunction("onChange",t)},onKeyup:function(t){this.runFunction("onKeyup",t)},onKeydown:function(t){this.runFunction("onKeydown",t)}},computed:{hasError:function(){if(0==this.form[this.field.key].$dirty||1==this.form[this.field.key].$active)return!1;var t=this.form.$errors[this.field.key],e=!1;return(0,i["default"])(t).forEach(function(o){t[o]!==!1&&(e=!0)}),this.$set(this.form[this.field.key],"$hasError",e),e}},components:{"error-display":u["default"]}}},function(t,e,o){t.exports={"default":o(6),__esModule:!0}},function(t,e,o){o(7),t.exports=o(27).Object.keys},function(t,e,o){var n=o(8),r=o(10);o(25)("keys",function(){return function(t){return r(n(t))}})},function(t,e,o){var n=o(9);t.exports=function(t){return Object(n(t))}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,o){var n=o(11),r=o(24);t.exports=Object.keys||function(t){return n(t,r)}},function(t,e,o){var n=o(12),r=o(13),i=o(16)(!1),s=o(20)("IE_PROTO");t.exports=function(t,e){var o,u=r(t),f=0,l=[];for(o in u)o!=s&&n(u,o)&&l.push(o);for(;e.length>f;)n(u,o=e[f++])&&(~i(l,o)||l.push(o));return l}},function(t,e){var o={}.hasOwnProperty;t.exports=function(t,e){return o.call(t,e)}},function(t,e,o){var n=o(14),r=o(9);t.exports=function(t){return n(r(t))}},function(t,e,o){var n=o(15);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},function(t,e){var o={}.toString;t.exports=function(t){return o.call(t).slice(8,-1)}},function(t,e,o){var n=o(13),r=o(17),i=o(19);t.exports=function(t){return function(e,o,s){var u,f=n(e),l=r(f.length),c=i(s,l);if(t&&o!=o){for(;l>c;)if(u=f[c++],u!=u)return!0}else for(;l>c;c++)if((t||c in f)&&f[c]===o)return t||c||0;return!t&&-1}}},function(t,e,o){var n=o(18),r=Math.min;t.exports=function(t){return t>0?r(n(t),9007199254740991):0}},function(t,e){var o=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:o)(t)}},function(t,e,o){var n=o(18),r=Math.max,i=Math.min;t.exports=function(t,e){return t=n(t),t<0?r(t+e,0):i(t,e)}},function(t,e,o){var n=o(21)("keys"),r=o(23);t.exports=function(t){return n[t]||(n[t]=r(t))}},function(t,e,o){var n=o(22),r="__core-js_shared__",i=n[r]||(n[r]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,e){var o=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=o)},function(t,e){var o=0,n=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++o+n).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,o){var n=o(26),r=o(27),i=o(36);t.exports=function(t,e){var o=(r.Object||{})[t]||Object[t],s={};s[t]=e(o),n(n.S+n.F*i(function(){o(1)}),"Object",s)}},function(t,e,o){var n=o(22),r=o(27),i=o(28),s=o(30),u="prototype",f=function(t,e,o){var l,c,a,p=t&f.F,d=t&f.G,y=t&f.S,h=t&f.P,v=t&f.B,m=t&f.W,x=d?r:r[e]||(r[e]={}),b=x[u],k=d?n:y?n[e]:(n[e]||{})[u];d&&(o=e);for(l in o)c=!p&&k&&void 0!==k[l],c&&l in x||(a=c?k[l]:o[l],x[l]=d&&"function"!=typeof k[l]?o[l]:v&&c?i(a,n):m&&k[l]==a?function(t){var e=function(e,o,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,o)}return new t(e,o,n)}return t.apply(this,arguments)};return e[u]=t[u],e}(a):h&&"function"==typeof a?i(Function.call,a):a,h&&((x.virtual||(x.virtual={}))[l]=a,t&f.R&&b&&!b[l]&&s(b,l,a)))};f.F=1,f.G=2,f.S=4,f.P=8,f.B=16,f.W=32,f.U=64,f.R=128,t.exports=f},function(t,e){var o=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=o)},function(t,e,o){var n=o(29);t.exports=function(t,e,o){if(n(t),void 0===e)return t;switch(o){case 1:return function(o){return t.call(e,o)};case 2:return function(o,n){return t.call(e,o,n)};case 3:return function(o,n,r){return t.call(e,o,n,r)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,o){var n=o(31),r=o(39);t.exports=o(35)?function(t,e,o){return n.f(t,e,r(1,o))}:function(t,e,o){return t[e]=o,t}},function(t,e,o){var n=o(32),r=o(34),i=o(38),s=Object.defineProperty;e.f=o(35)?Object.defineProperty:function(t,e,o){if(n(t),e=i(e,!0),n(o),r)try{return s(t,e,o)}catch(u){}if("get"in o||"set"in o)throw TypeError("Accessors not supported!");return"value"in o&&(t[e]=o.value),t}},function(t,e,o){var n=o(33);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,o){t.exports=!o(35)&&!o(36)(function(){return 7!=Object.defineProperty(o(37)("div"),"a",{get:function(){return 7}}).a})},function(t,e,o){t.exports=!o(36)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},function(t,e,o){var n=o(33),r=o(22).document,i=n(r)&&n(r.createElement);t.exports=function(t){return i?r.createElement(t):{}}},function(t,e,o){var n=o(33);t.exports=function(t,e){if(!n(t))return t;var o,r;if(e&&"function"==typeof(o=t.toString)&&!n(r=o.call(t)))return r;if("function"==typeof(o=t.valueOf)&&!n(r=o.call(t)))return r;if(!e&&"function"==typeof(o=t.toString)&&!n(r=o.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,o){var n,r;n=o(41),r=o(42),t.exports=n||{},t.exports.__esModule&&(t.exports=t.exports["default"]),r&&(("function"==typeof t.exports?t.exports.options||(t.exports.options={}):t.exports).template=r)},function(t,e,o){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var r=o(5),i=n(r);e["default"]={props:["field","form"],computed:{message:function s(){var s=!1;if(!(this.field in this.form.$errors)||!(this.field in this.form)||this.form[this.field].$active||!this.form[this.field].$dirty)return s;var t=this.form.$errors[this.field];return(0,i["default"])(t).some(function(e){if("boolean"!=typeof t[e])return s=t[e],!0}),s}}}},function(t,e){t.exports=' {{message}} '},function(t,e){t.exports='
'},function(t,e,o){var n,r;n=o(45),r=o(46),t.exports=n||{},t.exports.__esModule&&(t.exports=t.exports["default"]),r&&(("function"==typeof t.exports?t.exports.options||(t.exports.options={}):t.exports).template=r)},function(t,e,o){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var r=o(4),i=n(r);e["default"]={mixins:[i["default"]],created:function(){var t=this.to.inputType;t&&"checkbox"!=t||""!=this.model[this.field.key]||this.$set(this.model,this.field.key,[])}}},function(t,e){t.exports='
'},function(t,e,o){var n,r;n=o(48),r=o(49),t.exports=n||{},t.exports.__esModule&&(t.exports=t.exports["default"]),r&&(("function"==typeof t.exports?t.exports.options||(t.exports.options={}):t.exports).template=r)},function(t,e,o){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var r=o(4),i=n(r);e["default"]={mixins:[i["default"]]}},function(t,e){t.exports='
'},function(t,e,o){var n,r;n=o(51),r=o(52),t.exports=n||{},t.exports.__esModule&&(t.exports=t.exports["default"]),r&&(("function"==typeof t.exports?t.exports.options||(t.exports.options={}):t.exports).template=r)},48,function(t,e){t.exports='
'}]))}); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.VueFormly=e():t.VueFormly=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(1),o={install:function(t,e){r.keys().forEach(function(e){var n=e.replace(/^\.\//,"").replace(/\.js/,"").replace(/^field/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t.$formly.addType(n,r(e)["default"])})}};"undefined"!=typeof window&&window.Vue&&window.Vue.use(o),e["default"]=o},function(t,e,n){function r(t){return n(o(t))}function o(t){return i[t]||function(){throw new Error("Cannot find module '"+t+"'.")}()}var i={"./fieldInput.js":2,"./fieldList.js":47,"./fieldSelect.js":48,"./fieldTextarea.js":49};r.keys=function(){return Object.keys(i)},r.resolve=o,t.exports=r,r.id=1},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(3),i=r(o),s=n(41),u=r(s);e["default"]={render:function(t){var e=[],n=this;return this.to.label&&e.push(t("label",{attrs:{"for":this.to.id}},this.to.label)),e.push(t("input",{attrs:(0,i["default"])({id:this.to.id,type:this.to.inputType||"text"},this.to.atts),"class":(0,i["default"])({"form-control":!0},this.to.classes),domProps:{value:this.model[this.field.key]},on:{input:function(t){n.model[n.field.key]=t.target.value,n.$emit("input",t.target.value)},blur:this.onBlur,focus:this.onFocus,click:this.onClick,change:this.onChange,keyup:this.onKeyup,keydown:this.onKeydown}})),e.push(t("error-display",{props:{form:this.form,field:this.field.key}})),t("div",{"class":["form-group formly-input",this.to.inputType,this.to.wrapperClasses,{"formly-has-value":this.model[this.field.key],"formly-has-focus":this.form[this.field.key].$active,"has-error has-danger":this.hasError}]},e)},mixins:[u["default"]],methods:{onChange:function(t){this.$set(this.form[this.field.key],"$dirty",!0),this.runFunction("onChange",t),"file"==this.to.inputType&&this.$set(this.model,this.field.key,this.$el.querySelector("input").files)}}}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var o=n(4),i=r(o);e["default"]=i["default"]||function(t){for(var e=1;ea;)for(var h,d=u(arguments[a++]),p=l?r(d).concat(l(d)):r(d),y=p.length,v=0;y>v;)c.call(d,h=p[v++])&&(n[h]=d[h]);return n}:f},function(t,e,n){var r=n(24),o=n(37);t.exports=Object.keys||function(t){return r(t,o)}},function(t,e,n){var r=n(25),o=n(26),i=n(30)(!1),s=n(34)("IE_PROTO");t.exports=function(t,e){var n,u=o(t),f=0,a=[];for(n in u)n!=s&&r(u,n)&&a.push(n);for(;e.length>f;)r(u,n=e[f++])&&(~i(a,n)||a.push(n));return a}},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(27),o=n(29);t.exports=function(t){return r(o(t))}},function(t,e,n){var r=n(28);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var r=n(26),o=n(31),i=n(33);t.exports=function(t){return function(e,n,s){var u,f=r(e),a=o(f.length),l=i(s,a);if(t&&n!=n){for(;a>l;)if(u=f[l++],u!=u)return!0}else for(;a>l;l++)if((t||l in f)&&f[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){var r=n(32),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){var r=n(32),o=Math.max,i=Math.min;t.exports=function(t,e){return t=r(t),t<0?o(t+e,0):i(t,e)}},function(t,e,n){var r=n(35)("keys"),o=n(36);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,e,n){var r=n(8),o="__core-js_shared__",i=r[o]||(r[o]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,n){var r=n(29);t.exports=function(t){return Object(r(t))}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(42),i=r(o),s=n(46),u=r(s);e["default"]={props:["form","field","model","to"],created:function(){var t={$dirty:!1,$active:!1,$hasError:!1};this.$set(this.form,this.field.key,t)},methods:{booleanValue:function(t){return"true"===t||"false"===t?"true"===t:t},runFunction:function(t,e){"function"==typeof this.to[t]&&this.to[t].call(this,e)},onFocus:function(t){this.$set(this.form[this.field.key],"$active",!0),this.runFunction("onFocus",t)},onBlur:function(t){this.$set(this.form[this.field.key],"$dirty",!0),this.$set(this.form[this.field.key],"$active",!1),this.runFunction("onBlur",t)},onClick:function(t){this.runFunction("onClick",t)},onChange:function(t){this.$set(this.form[this.field.key],"$dirty",!0),this.runFunction("onChange",t)},onKeyup:function(t){this.runFunction("onKeyup",t)},onKeydown:function(t){this.runFunction("onKeydown",t)}},computed:{hasError:function(){if(0==this.form[this.field.key].$dirty||1==this.form[this.field.key].$active)return!1;var t=this.form.$errors[this.field.key],e=!1;return(0,i["default"])(t).forEach(function(n){t[n]!==!1&&(e=!0)}),this.$set(this.form[this.field.key],"$hasError",e),e}},components:{"error-display":u["default"]}}},function(t,e,n){t.exports={"default":n(43),__esModule:!0}},function(t,e,n){n(44),t.exports=n(9).Object.keys},function(t,e,n){var r=n(40),o=n(23);n(45)("keys",function(){return function(t){return o(r(t))}})},function(t,e,n){var r=n(7),o=n(9),i=n(18);t.exports=function(t,e){var n=(o.Object||{})[t]||Object[t],s={};s[t]=e(n),r(r.S+r.F*i(function(){n(1)}),"Object",s)}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(42),i=r(o);e["default"]={render:function(t){if(this.message)return t("span",{"class":"help-block form-text text-danger"},this.message)},props:["field","form"],computed:{message:function s(){var s=!1;if(!(this.field in this.form.$errors)||!(this.field in this.form)||this.form[this.field].$active||!this.form[this.field].$dirty)return s;var t=this.form.$errors[this.field];return(0,i["default"])(t).some(function(e){if("boolean"!=typeof t[e])return s=t[e],!0}),s}}}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(3),i=r(o),s=n(41),u=r(s);e["default"]={computed:{inputType:function(){return this.to.inputType||"checkbox"}},created:function(){"checkbox"!==this.inputType||this.model[this.field.key].constructor===Array&&this.model[this.field.key].constructor||this.$set(this.model,this.field.key,[])},mixins:[u["default"]],render:function(t){var e=this,n=[],r=this,o="checkbox"===this.inputType;return this.to.label&&n.push(t("label",this.to.label)),"options"in this.field&&this.field.options.forEach(function(s){var u=s.hasOwnProperty("label")?s.label:s,f=s.hasOwnProperty("value")?s.value:s,a=o?e.model[e.field.key].indexOf(f)>-1:e.model[e.field.key]===f;n.push(t("label",{"class":e.to.labelClasses},[t("input",{attrs:(0,i["default"])({type:e.inputType},e.to.atts),"class":(0,i["default"])({},e.to.classes),domProps:{value:f,checked:a},on:{click:e.onClick,blur:e.onBlur,focus:e.onFocus,keyup:e.onKeyup,keydown:e.onKeydown,change:function(t){var e=t.target.checked,n=r.booleanValue(t.target.value);if(o)if(e)r.model[r.field.key].push(n);else{var i=r.model[r.field.key].indexOf(n);i>-1&&r.model[r.field.key].splice(i,1)}else r.model[r.field.key]=e?n:null;r.$emit("change",n),"function"==typeof r.onChange&&r.onChange(t)}}}),u]))}),n.push(t("error-display",{props:{form:this.form,field:this.field.key}})),t("div",{"class":["form-group formly-list",this.to.wrapperClasses,{"has-error has-danger":this.hasError}]},n)}}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(3),i=r(o),s=n(41),u=r(s);e["default"]={mixins:[u["default"]],render:function(t){var e=[],n=this;this.to.label&&e.push(t("label",{attrs:{"for":this.to.id}},this.to.label));var r=[];return"options"in this.field&&this.field.options.forEach(function(e){var n=e.hasOwnProperty("value")?e.value:e;r.push(t("option",{domProps:{value:n}},e.label||e))}),e.push(t("select",{attrs:(0,i["default"])({id:this.to.id},this.to.atts),"class":(0,i["default"])({"form-control":!0},this.to.classes),domProps:{value:this.model[this.field.key]},on:{click:this.onClick,blur:this.onBlur,focus:this.onFocus,keyup:this.onKeyup,keydown:this.onKeydown,change:function(t){var e=n.booleanValue(t.target.value);n.model[n.field.key]=e,n.$emit("change",e),"function"==typeof n.onChange&&n.onChange(t)}}},r)),e.push(t("error-display",{props:{form:this.form,field:this.field.key}})),t("div",{"class":["form-group formly-select",this.to.wrapperClasses,{"has-error has-danger":this.hasError}]},e)}}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(3),i=r(o),s=n(41),u=r(s);e["default"]={mixins:[u["default"]],render:function(t){var e=this,n=[];return this.to.label&&n.push(t("label",{attrs:{"for":this.to.id}},this.to.label)),n.push(t("textarea",{attrs:(0,i["default"])({id:this.to.id},this.to.atts),"class":(0,i["default"])({"form-control":!0},this.to.classes),domProps:{value:this.model[this.field.key]},on:{input:function(t){e.model[e.field.key]=t.target.value,e.$emit("input",t.target.value)},blur:this.onBlur,focus:this.onFocus,click:this.onClick,change:this.onChange,keyup:this.onKeyup,keydown:this.onKeydown}})),n.push(t("error-display",{props:{form:this.form,field:this.field.key}})),t("div",{"class":["form-group formly-textarea",this.to.wrapperClasses,{"formly-has-value":this.model[this.field.key],"formly-has-focus":this.form[this.field.key].$active,"has-error has-danger":this.hasError}]},n)}}}])}); \ No newline at end of file diff --git a/package.json b/package.json index a0aa76f..3a7850f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue-formly-bootstrap", - "version": "2.2.7", + "version": "2.3.0", "description": "A bootstrap based form input bundle for Vue Formly", "main": "dist/vue-formly-bootstrap.js", "scripts": { From 3da5deb060989a6df39ddbc87f5d5e6725ac114e Mon Sep 17 00:00:00 2001 From: matt-sanders Date: Thu, 28 Mar 2019 08:12:56 +1300 Subject: [PATCH 11/11] fixed element ID --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5b82e91..e4b65d2 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ let vm = new Vue({ }); ``` ```html -
+