Skip to content

Commit c9a0317

Browse files
committed
use custom type
1 parent 006658f commit c9a0317

File tree

5 files changed

+49
-23
lines changed

5 files changed

+49
-23
lines changed

build/webpack.dist.conf.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ function resolve (dir) {
1212
module.exports = {
1313
entry: resolve('src/JsonEditor.vue'),
1414
output: {
15-
path: path.resolve(__dirname, '../dist'),
16-
publicPath: '/dist/',
15+
path: path.resolve(__dirname, '../lib'),
16+
publicPath: '/lib/',
1717
filename: 'json-editor.min.js',
1818
library: 'json-editor',
1919
libraryTarget: 'umd',

example/components/Subscription.vue

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,27 @@
11
<template>
2-
<el-card class="form">
3-
<json-editor ref="JsonEditor" :schema="schema" v-model="model">
4-
<el-button type="primary" @click="submit">Subscribe</el-button>
5-
<el-button type="reset">Reset</el-button>
6-
</json-editor>
7-
</el-card>
2+
<el-row>
3+
<el-col :span="12">
4+
<el-card class="form">
5+
<json-editor ref="JsonEditor" :schema="schema" v-model="model">
6+
<el-button type="primary" @click="submit">Subscribe</el-button>
7+
<el-button type="reset">Reset</el-button>
8+
</json-editor>
9+
</el-card>
10+
</el-col>
11+
<el-col :span="12">
12+
<el-card class="box-card">
13+
<div slot="header" class="clearfix">
14+
<span>Model</span>
15+
</div>
16+
<pre class="json">{{ jsonString }}</pre>
17+
</el-card>
18+
</el-col>
19+
</el-row>
820
</template>
921

1022
<script>
11-
import JsonEditor from '../../src/JsonEditor';
23+
// import JsonEditor from '../../lib/json-editor.min.js';
24+
import JsonEditor from '../../src/JsonEditor.vue';
1225
import { Option } from 'element-ui';
1326
1427
JsonEditor.setComponent('form', 'el-form', ({ vm }) => {
@@ -25,13 +38,20 @@
2538
return parseField(field);
2639
}
2740
if(!field.name) return;
41+
rules[field.name] = [];
42+
// http://element.eleme.io/#/en-US/component/form#validation
2843
const type = field.schemaType === 'array' && field.type === 'radio' ? 'string' : field.schemaType;
2944
const required = field.required;
3045
const message = field.title;
3146
const trigger = [ 'radio', 'checkbox', 'select' ].includes(field.type) ? 'change' : 'blur';
47+
rules[field.name].push({ type, required, message, trigger });
3248
33-
// http://element.eleme.io/#/en-US/component/form#validation
34-
rules[field.name] = { type, required, message, trigger };
49+
if(field.minlength !== undefined || field.maxlength !== undefined) {
50+
const max = field.maxlength || 255;
51+
const min = field.minlength || 0;
52+
const msg = `Length must between ${ min } and ${ max }`;
53+
rules[field.name].push({ min, max, message: msg, trigger });
54+
}
3555
});
3656
}
3757
@@ -51,9 +71,11 @@
5171
JsonEditor.setComponent('textarea', 'el-input');
5272
JsonEditor.setComponent('checkbox', 'el-checkbox');
5373
JsonEditor.setComponent('checkboxgroup', 'el-checkbox-group');
54-
JsonEditor.setComponent('switch', 'el-switch');
5574
JsonEditor.setComponent('radio', 'el-radio');
5675
JsonEditor.setComponent('select', 'el-select');
76+
JsonEditor.setComponent('switch', 'el-switch');
77+
JsonEditor.setComponent('color', 'el-color-picker');
78+
JsonEditor.setComponent('rate', 'el-rate');
5779
5880
// You can also use the component object
5981
JsonEditor.setComponent('option', Option);
@@ -83,6 +105,11 @@
83105
},
84106
},
85107
}),
108+
computed: {
109+
jsonString() {
110+
return JSON.stringify(this.model, null, 2).trim();
111+
},
112+
},
86113
methods: {
87114
submit(_e) {
88115
// this.$refs.JsonEditor.form() returns the ElementUI's form instance
@@ -109,7 +136,7 @@
109136
<style>
110137
.form {
111138
text-align: left;
112-
width: 600px;
139+
width: 90%;
113140
margin: auto;
114141
}
115142
@@ -142,4 +169,8 @@
142169
.el-form .sub-2 {
143170
margin-left: 20%;
144171
}
172+
173+
.json {
174+
text-align: left;
175+
}
145176
</style>

example/schema/newsletter.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
"title": "Rate",
113113
"default": 2,
114114
"attrs": {
115-
"compoment": "el-rate",
115+
"type": "rate",
116116
"allow-half": true
117117
}
118118
},
@@ -121,7 +121,7 @@
121121
"title": "Color",
122122
"default": "#409EFF",
123123
"attrs": {
124-
"compoment": "el-color-picker"
124+
"type": "color"
125125
}
126126
},
127127
"agree": {
@@ -130,7 +130,7 @@
130130
"description": "You agree to receive occasional updates and special offers for vue-json-schema updates.",
131131
"default": false,
132132
"attrs": {
133-
"compoment": "el-switch"
133+
"type": "switch"
134134
}
135135
}
136136
},

src/JsonEditor.vue

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -176,14 +176,9 @@
176176
});
177177
break;
178178
}
179-
let inputElement;
180-
if(field.compoment) {
181-
inputElement = createElement(field.compoment, input);
182-
} else {
183-
inputElement = hasMultitpleElements
179+
const inputElement = hasMultitpleElements
184180
? createElement(element.component, input, children)
185181
: createElement(element.component, input, children);
186-
}
187182
188183
const formControlsNodes = [];
189184
if (field.label && !option.disableWrappingLabel) {

src/parser.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const setCommonFields = (schema, field, schemaName) => {
99
? schema.default
1010
: field.hasOwnProperty('value') ? field.value : '';
1111

12-
field.schemaType = schema.compoment || schema.type;
12+
field.schemaType = schema.type;
1313
field.label = schema.title || '';
1414
field.description = schema.description || '';
1515
field.required = schema.required || false;

0 commit comments

Comments
 (0)