Skip to content

Commit 25e7efb

Browse files
committed
created a new "attributes" directive that binds input/wrapper (with support for other named sets) attributes to elements to support dynamic attributes (such as title="Tooltip Text" data-toggle="tooltip", etc)
* added directive to abstractField * implemented directive in various core fields as an example of usage * updated basic/app.vue with samples
1 parent 4b7f551 commit 25e7efb

File tree

11 files changed

+60
-39
lines changed

11 files changed

+60
-39
lines changed

dev/projects/basic/app.vue

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,45 @@ export default {
3838
type: "input",
3939
inputType: "text",
4040
label: "First Name",
41-
model: "first_name"
41+
model: "first_name",
42+
attributes: {
43+
input: {
44+
"data-toggle": "tooltip"
45+
},
46+
wrapper: {
47+
"data-target": "input"
48+
}
49+
}
4250
},
4351
{
4452
type: "checkbox",
4553
label: "Active",
46-
model: "status"
54+
model: "status",
55+
attributes: {
56+
input: {
57+
"data-toggle": "tooltip"
58+
}
59+
}
4760
},
4861
{
4962
type: "input",
5063
inputType: "color",
5164
label: "Color",
52-
model: "color"
65+
model: "color",
66+
attributes: {
67+
input: {
68+
"data-target": "tooltip"
69+
}
70+
}
5371
},
5472
{
5573
type: "submit",
5674
buttonText: "Change Previous Type",
75+
attributes: {
76+
input: {
77+
"data-target": "toggle"
78+
}
79+
},
5780
onSubmit: () => {
5881
// this.schema.fields[2].type = "input";
5982
if (this.schema.fields[2].inputType === "color") {

src/fields/abstractField.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,22 @@ export default {
2424
};
2525
},
2626

27+
directives: {
28+
attributes: {
29+
bind: function(el, binding, vnode) {
30+
let attrs = objGet(vnode.context, "schema.attributes", {});
31+
let container = binding.value || "input";
32+
if(isString(container)) {
33+
attrs = objGet(attrs, container, {});
34+
}
35+
forEach(attrs, (val, key) => {
36+
console.log("v-attributes", key, val);
37+
el.setAttribute(key, val);
38+
});
39+
}
40+
}
41+
},
42+
2743
computed: {
2844
value: {
2945
cache: false,

src/fields/core/fieldCheckbox.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template lang="pug">
2-
input(:id="getFieldID(schema)", type="checkbox", v-model="value", :autocomplete="schema.autocomplete", :disabled="disabled", :name="schema.inputName", :class="schema.fieldClasses")
2+
input(:id="getFieldID(schema)", type="checkbox", v-model="value", :autocomplete="schema.autocomplete", :disabled="disabled", :name="schema.inputName", :class="schema.fieldClasses", v-attributes="")
33
</template>
44

55
<script>

src/fields/core/fieldChecklist.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<template lang="pug">
2-
.wrapper
2+
.wrapper(v-attributes="wrapper")
33
.listbox.form-control(v-if="schema.listBox", :disabled="disabled")
44
.list-row(v-for="item in items", :class="{'is-checked': isItemChecked(item)}")
55
label
6-
input(:id="getFieldID(schema)", type="checkbox", :checked="isItemChecked(item)", :disabled="disabled", @change="onChanged($event, item)", :name="getInputName(item)")
6+
input(:id="getFieldID(schema)", type="checkbox", :checked="isItemChecked(item)", :disabled="disabled", @change="onChanged($event, item)", :name="getInputName(item)", v-attributes="input")
77
| {{ getItemName(item) }}
88

99
.combobox.form-control(v-if="!schema.listBox", :disabled="disabled")
@@ -14,7 +14,7 @@
1414
.dropList
1515
.list-row(v-if="comboExpanded", v-for="item in items", :class="{'is-checked': isItemChecked(item)}")
1616
label
17-
input(:id="getFieldID(schema)", type="checkbox", :checked="isItemChecked(item)", :disabled="disabled", @change="onChanged($event, item)", :name="getInputName(item)")
17+
input(:id="getFieldID(schema)", type="checkbox", :checked="isItemChecked(item)", :disabled="disabled", @change="onChanged($event, item)", :name="getInputName(item)", v-attributes="input")
1818
| {{ getItemName(item) }}
1919
</template>
2020

src/fields/core/fieldInput.vue

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template lang="pug">
2-
.wrapper
2+
.wrapper(v-attributes="'wrapper'")
33
input.form-control(
44
:id="getFieldID(schema)",
55
:type="schema.inputType.toLowerCase()",
@@ -9,33 +9,13 @@
99
:class="schema.fieldClasses",
1010
@change="schema.onChange || null",
1111
:disabled="disabled",
12-
:accept="schema.accept",
13-
:alt="schema.alt",
14-
:autocomplete="schema.autocomplete",
15-
:checked="schema.checked",
16-
:dirname="schema.dirname",
17-
:formaction="schema.formaction",
18-
:formenctype="schema.formenctype",
19-
:formmethod="schema.formmethod",
20-
:formnovalidate="schema.formnovalidate",
21-
:formtarget="schema.formtarget",
22-
:height="schema.height",
23-
:list="schema.list",
24-
:max="schema.max",
25-
:maxlength="schema.maxlength",
26-
:min="schema.min",
27-
:minlength="schema.minlength",
28-
:multiple="schema.multiple",
2912
:name="schema.inputName",
30-
:pattern="schema.pattern",
31-
:placeholder="schema.placeholder",
3213
:readonly="schema.readonly",
3314
:required="schema.required",
34-
:size="schema.size",
3515
:src="schema.src",
36-
:step="schema.step",
37-
:width="schema.width",
38-
:files="schema.files")
16+
:files="schema.files"
17+
v-attributes="'input'")
18+
3919
span.helper(v-if="schema.inputType.toLowerCase() === 'color' || schema.inputType.toLowerCase() === 'range'") {{ value }}
4020
</template>
4121

src/fields/core/fieldLabel.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template lang="pug">
2-
span(:id="getFieldID(schema)", :class="schema.fieldClasses") {{ value }}
2+
span(:id="getFieldID(schema)", :class="schema.fieldClasses", v-attributes) {{ value }}
33
</template>
44

55
<script>

src/fields/core/fieldRadios.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template lang="pug">
2-
.radio-list(:disabled="disabled")
2+
.radio-list(:disabled="disabled", v-attributes="wrapper")
33
label(v-for="item in items", :class="{'is-checked': isItemChecked(item)}")
4-
input(:id="getFieldID(schema)", type="radio", :disabled="disabled", :name="id", @click="onSelection(item)", :value="getItemValue(item)", :checked="isItemChecked(item)", :class="schema.fieldClasses")
4+
input(:id="getFieldID(schema)", type="radio", :disabled="disabled", :name="id", @click="onSelection(item)", :value="getItemValue(item)", :checked="isItemChecked(item)", :class="schema.fieldClasses", v-attributes="input")
55
| {{ getItemName(item) }}
66

77
</template>

src/fields/core/fieldSelect.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template lang="pug">
2-
select.form-control(v-model="value", :disabled="disabled", :name="schema.inputName", :id="getFieldID(schema)", :class="schema.fieldClasses")
2+
select.form-control(v-model="value", :disabled="disabled", :name="schema.inputName", :id="getFieldID(schema)", :class="schema.fieldClasses", v-attributes="input")
33
option(v-if="!selectOptions.hideNoneSelectedText", :disabled="schema.required", :value="null") {{ selectOptions.noneSelectedText || "&lt;Nothing selected&gt;" }}
44

55
template(v-for="item in items")

src/fields/core/fieldSubmit.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template lang="pug">
2-
input(:id="getFieldID(schema)", type="submit", :value="schema.buttonText", @click="onClick", :name="schema.inputName", :disabled="disabled", :class="schema.fieldClasses")
2+
input(:id="getFieldID(schema)", type="submit", :value="schema.buttonText", @click="onClick", :name="schema.inputName", :disabled="disabled", :class="schema.fieldClasses", v-attributes="")
33
</template>
44

55
<script>

src/fields/core/fieldTextArea.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
:placeholder="schema.placeholder",
1010
:readonly="schema.readonly",
1111
:rows="schema.rows || 2",
12-
:name="schema.inputName")
12+
:name="schema.inputName",
13+
v-attributes="input")
1314
</template>
1415

1516
<script>

src/fields/core/fieldUpload.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template lang="pug">
2-
.wrapper
2+
.wrapper(v-attributes="wrapper")
33
input.form-control(
44
id="getFieldID(schema)",
55
type="file",
@@ -10,7 +10,8 @@
1010
:placeholder="schema.placeholder",
1111
:readonly="schema.readonly",
1212
:required="schema.required",
13-
:disabled="disabled",)
13+
:disabled="disabled",
14+
v-attributes="input")
1415
</template>
1516

1617
<script>

0 commit comments

Comments
 (0)