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 @@
+
+.wrapper
+ input.form-control(
+ id="getFieldID(schema)",
+ type="file",
+ :name="schema.inputName",
+ @change="onChange",
+ :accept="schema.accept",
+ :multiple="schema.multiple",
+ :placeholder="schema.placeholder",
+ :readonly="schema.readonly",
+ :required="schema.required",
+ :disabled="disabled",)
+
+
+
+
+
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/*");
+ });
+
+ });
+
+ });
+});