diff --git a/.eslintrc.js b/.eslintrc.js index 49da56a2..df57cea6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,7 +21,8 @@ module.exports = { "rules": { "indent": [ "warn", - "tab" + "tab", + { SwitchCase: 1 } ], "quotes": [ "warn", diff --git a/examples/post-form/main.js b/examples/post-form/main.js index 7cc44221..fd5c4708 100644 --- a/examples/post-form/main.js +++ b/examples/post-form/main.js @@ -7,7 +7,7 @@ var vm = new Vue({ }, methods: { - prettyJSON: function(json) { + prettyJSON: function (json) { if (json) { json = JSON.stringify(json, undefined, 4); json = json.replace(/&/g, "&").replace(//g, ">"); @@ -74,7 +74,7 @@ var vm = new Vue({ required: true, hint: "Minimum 6 characters", validator: VueFormGenerator.validators.string - }, + }, { type: "input", inputType: "email", @@ -83,7 +83,7 @@ var vm = new Vue({ inputName: "email", placeholder: "User's e-mail address", validator: VueFormGenerator.validators.email - }, + }, { type: "select", label: "Skills", @@ -100,6 +100,14 @@ var vm = new Vue({ "VueJS" ], validator: VueFormGenerator.validators.string + }, { + type: "upload", + label: "Photo", + model: "photo", + inputName: "photo", + onChanged(model, schema, event) { + console.log(model, schema, event); + } }, { type: "checkbox", diff --git a/src/fields/core/fieldInput.vue b/src/fields/core/fieldInput.vue index 7ba183f9..972efc8f 100644 --- a/src/fields/core/fieldInput.vue +++ b/src/fields/core/fieldInput.vue @@ -5,7 +5,7 @@ :type="schema.inputType", :value="value", @input="value = $event.target.value", - @change="onChange", + @change="schema.onChange || null", :disabled="disabled", :accept="schema.accept", :alt="schema.alt", @@ -37,22 +37,17 @@ diff --git a/src/fields/core/fieldUpload.vue b/src/fields/core/fieldUpload.vue new file mode 100644 index 00000000..ad4f2058 --- /dev/null +++ b/src/fields/core/fieldUpload.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/formGenerator.vue b/src/formGenerator.vue index 47ae7b0b..c6894b1d 100644 --- a/src/formGenerator.vue +++ b/src/formGenerator.vue @@ -211,12 +211,12 @@ div.vue-form-generator(v-if='schema != null') } switch (relevantType) { - case "button": - case "submit": - case "reset": - return false; - default: - return true; + case "button": + case "submit": + case "reset": + return false; + default: + return true; } }, diff --git a/test/unit/specs/fields/fieldUpload.spec.js b/test/unit/specs/fields/fieldUpload.spec.js new file mode 100644 index 00000000..a12d984f --- /dev/null +++ b/test/unit/specs/fields/fieldUpload.spec.js @@ -0,0 +1,74 @@ +import { expect } from "chai"; +import { createVueField, checkAttribute } from "../util"; + +import Vue from "vue"; +import fieldUpload from "src/fields/core/fieldUpload.vue"; + +Vue.component("fieldUpload", fieldUpload); + +let el, vm, field; + +function createField(test, schema = {}, model = null, disabled = false, options) { + [el, vm, field] = createVueField(test, "fieldUpload", schema, model, disabled, options); +} + +describe("fieldUpload.vue", function () { + + describe("check template", () => { + let schema = { + type: "upload", + label: "Upload", + inputName: "testupload", + placeholder: "Field placeholder", + readonly: false, + required: false, + disabled: false, + multiple: true, + accept: "image/*" + }; + let model = {}; + let attributes = ["disabled", "placeholder", "readonly"]; + let input; + + before(() => { + createField(this, schema, model, false); + input = el.getElementsByTagName("input")[0]; + field.schema.inputType = "file"; + }); + + it("should contain an input text element", () => { + expect(field).to.be.exist; + expect(field.$el).to.be.exist; + + expect(input).to.be.defined; + expect(input.type).to.be.equal("file"); + expect(input.classList.contains("form-control")).to.be.true; + }); + + describe("check optional attribute", () => { + attributes.forEach(function (name) { + it("should set " + name, function (done) { + checkAttribute(name, vm, input, field, schema, done); + }); + }); + + it("should set name", () => { + expect(input.name).to.be.equal("testupload"); + }); + + it("should set required", () => { + expect(input.required).to.be.false; + }); + + it("should set multiple", () => { + expect(input.multiple).to.be.exist; + }); + + it("should set accept", () => { + expect(input.accept).to.be.equal("image/*"); + }); + + }); + + }); +});