-
Notifications
You must be signed in to change notification settings - Fork 19
/
vue_field.py
235 lines (221 loc) · 7.55 KB
/
vue_field.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
class VueField:
# Field properties include:
# type, label, model, id, inputName, featured, visible, disabled,
# required, multi, default, hint, help, validator,
# validateDebounceTime, styleClasses, buttons, attributes
# https://vue-generators.gitbook.io/vue-generators/fields/field_properties
#
# There are also additional properties dependent on the type
def __init__(self, type_, label, model, id_, input_name, featured, visible,
disabled, required, multi, default, hint, help_, validator,
validate_debounce_time, style_classes, buttons, attributes,
shortname):
# Type of Vue field displayed to user
self.type = type_
# Label of the field
self.label = label
# id determining default value from the model
self.model = model
# id of the field
self.id = id_
# name attribute of the field
self.inputName = input_name
# Should the field/label be bold
self.featured = featured
# Should the field be visible
self.visible = visible
# Should the field be disabled
self.disabled = disabled
# Should the field be required
self.required = required
# If true, visible only if multiple is true on the component attr
self.multi = multi
# Default value of the field
self.default = default
# Hint shown below the field to help user fill in the field
self.hint = hint
# Tooltip on hover to help the user fill in the field
self.help = help_
# Validation function: Built in validators are:
# "number", "integer", "double", "string", "array", "date", "regexp",
# "email", "url", "creditCard", "alpha", "alphaNumeric"
self.validator = validator
# Time in milliseconds before alerting the user when validation fails
# If set, overrides the default for this particular field
self.validateDebounceTime = validate_debounce_time
# Additional css classes
self.styleClasses = style_classes
# Additional buttons associated with field
# (generate password/link etc)
self.buttons = buttons
# Additional attributes to add to the field
self.attributes = attributes
# the question shortname if applicable
self.shortname = shortname
def set(self, **attributes):
for key in attributes:
setattr(self, key, attributes[key])
return self
class VueInputField(VueField):
def __init__(self, question_id, question_text, question_shortname=None):
super().__init__(
type_="input",
label=question_text,
model=str(question_id),
id_=str(question_id),
input_name=str(question_id),
featured=False,
visible=True,
disabled=False,
required=False,
multi=False,
default=None,
hint=None,
help_=None,
validator="string",
validate_debounce_time=None,
style_classes=None,
buttons=None,
attributes=None,
shortname=question_shortname
)
self.inputType = "text"
class VueTextAreaField(VueField):
def __init__(self, question_id, question_text, question_shortname=None):
super().__init__(
type_="textArea",
label=question_text,
model=str(question_id),
id_=str(question_id),
input_name=str(question_id),
featured=False,
visible=True,
disabled=False,
required=False,
multi=False,
default=None,
hint=None,
help_=None,
validator="string",
validate_debounce_time=None,
style_classes=None,
buttons=None,
attributes=None,
shortname=question_shortname
)
self.autocomplete = None
self.max = None
self.min = None
self.placeholder = None
self.readonly = False
self.rows = 5
class VueSelectField(VueField):
def __init__(self, question_id, question_text, valid_responses,
question_shortname=None):
super().__init__(
type_="select",
label=question_text,
model=str(question_id),
id_=str(question_id),
input_name=str(question_id),
featured=False,
visible=True,
disabled=False,
required=False,
multi=False,
default=valid_responses[0],
hint=None,
help_=None,
validator=None,
validate_debounce_time=None,
style_classes=None,
buttons=None,
attributes=None,
shortname=question_shortname
)
self.values = valid_responses
self.selectOptions = {
"hideNoneSelectedText": True,
"value": valid_responses[0]
}
class VueRadiosField(VueField):
def __init__(self, question_id, question_text, valid_responses,
question_shortname=None):
super().__init__(
type_="radios",
label=question_text,
model=str(question_id),
id_=str(question_id),
input_name=str(question_id),
featured=False,
visible=True,
disabled=False,
required=False,
multi=False,
default=valid_responses[0],
hint=None,
help_=None,
validator=None,
validate_debounce_time=None,
style_classes=None,
buttons=None,
attributes=None,
shortname=question_shortname
)
self.values = valid_responses
self.radiosOptions = {
"value": valid_responses[0]
}
class VueChecklistField(VueField):
def __init__(self, question_id, question_text, valid_responses,
question_shortname=None):
super().__init__(
type_="checklist",
label=question_text,
model=str(question_id),
id_=str(question_id),
input_name=str(question_id),
featured=False,
visible=True,
disabled=False,
required=False,
multi=True,
default=None,
hint=None,
help_=None,
validator=None,
validate_debounce_time=None,
style_classes=None,
buttons=None,
attributes=None,
shortname=question_shortname
)
self.listBox = False
self.values = valid_responses
self.selectOptions = {}
class VueDateTimePickerField(VueField):
def __init__(self, question_id, question_text, question_shortname=None):
super().__init__(
type_="dateTimePicker",
label=question_text,
model=str(question_id),
id_=str(question_id),
input_name=str(question_id),
featured=False,
visible=True,
disabled=False,
required=False,
multi=False,
default=None,
hint=None,
help_=None,
validator=None,
validate_debounce_time=None,
style_classes=None,
buttons=None,
attributes=None,
shortname=question_shortname
)
self.dateTimePickerOptions = {
"format": "YYYY-MM-DD HH:mm:ss"
}