glib-web 7.4.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/glib/glib_direct_uploads_controller.rb +4 -1
- data/app/helpers/glib/json_ui/abstract_builder.rb +22 -0
- data/app/helpers/glib/json_ui/view_builder/charts.rb +27 -0
- data/app/helpers/glib/json_ui/view_builder/fields.rb +3 -47
- data/app/models/concerns/glib/enum_symbolization.rb +4 -41
- data/app/views/json_ui/garage/forms/index.json.jbuilder +0 -3
- data/app/views/json_ui/garage/forms/submit_on_change.json.jbuilder +1 -1
- data/app/views/json_ui/garage/test_page/charts.json.jbuilder +20 -0
- data/app/views/json_ui/garage/test_page/fields_upload.json.jbuilder +51 -0
- metadata +3 -9
- data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +0 -52
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dfa432bee9f77048fec3655d894d354986edb1e2eb1750c457b30085c939b7e5
|
|
4
|
+
data.tar.gz: fb85b5fbc2e5d766883eaa623e64ad3ca1661dabc2527e56d9a804673e94e9d1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d5293ff30003202c2ef89f75ad41b92c3d3ab326f40842d95df3f75d73e9c3aaf57ffbe1fa2ba21ae7b233061a2e6e13f2fc9a5f284d694dda0e69e06aa9e0f6
|
|
7
|
+
data.tar.gz: 2d14b253bee2be2015de7c9ced6d76109070568fc4e4018cdc6c24dcc371b5feae5cee4f727bc386696e292bb0dc5d9d8315a86c4aedac4f528503308f9f8944
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module Glib
|
|
2
2
|
class GlibDirectUploadsController < ::ActionController::Base
|
|
3
|
+
include ::ActiveStorage::SetCurrent
|
|
4
|
+
|
|
3
5
|
before_action :authenticate_user!
|
|
4
6
|
|
|
5
7
|
rescue_from StandardError do |e|
|
|
@@ -38,10 +40,11 @@ module Glib
|
|
|
38
40
|
end
|
|
39
41
|
|
|
40
42
|
def direct_upload_json(blob)
|
|
43
|
+
# GlibS3Service returns [url, headers]; other services (e.g. Disk) return just the url
|
|
41
44
|
url, headers = blob.service_url_for_direct_upload
|
|
42
45
|
blob.as_json(root: false, methods: :signed_id).merge(direct_upload: {
|
|
43
46
|
url: url,
|
|
44
|
-
headers: headers.merge(blob.service_headers_for_direct_upload)
|
|
47
|
+
headers: headers.to_h.merge(blob.service_headers_for_direct_upload)
|
|
45
48
|
})
|
|
46
49
|
end
|
|
47
50
|
|
|
@@ -60,6 +60,23 @@ module Glib
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
private
|
|
63
|
+
# HashWithIndifferentAccess.new('x') doesn't fail: it yields an empty hash whose
|
|
64
|
+
# *default* is 'x', which serializes as {}, passes every key validation, and makes
|
|
65
|
+
# `h[k] ||= default` a no-op. Reject such values before wrapping them.
|
|
66
|
+
#
|
|
67
|
+
# Returns true when `value` was rejected and the caller should fall back to {}.
|
|
68
|
+
# Raises only in development/test: such pages rendered (as {}) before this check
|
|
69
|
+
# existed, so production reports instead of turning them into 500s.
|
|
70
|
+
def reject_non_hash(propName, value)
|
|
71
|
+
return false if value.respond_to?(:to_hash)
|
|
72
|
+
|
|
73
|
+
message = "Hash property: '#{propName}' must be a hash, got #{value.inspect}"
|
|
74
|
+
raise ArgumentError, message if Rails.env.development? || Rails.env.test?
|
|
75
|
+
|
|
76
|
+
GLog.warn("#{message}; emitting {} instead")
|
|
77
|
+
true
|
|
78
|
+
end
|
|
79
|
+
|
|
63
80
|
def self.component_name
|
|
64
81
|
@component_name ||= self.name.sub('Glib::JsonUi::ActionBuilder::', '')
|
|
65
82
|
end
|
|
@@ -298,6 +315,11 @@ module Glib
|
|
|
298
315
|
define_method(propName) do |value|
|
|
299
316
|
return if value.nil?
|
|
300
317
|
|
|
318
|
+
if reject_non_hash(propName, value)
|
|
319
|
+
json.set! propName, {}
|
|
320
|
+
return
|
|
321
|
+
end
|
|
322
|
+
|
|
301
323
|
value = ActiveSupport::HashWithIndifferentAccess.new(value)
|
|
302
324
|
|
|
303
325
|
required = options[:required] || []
|
|
@@ -34,10 +34,37 @@ class Glib::JsonUi::ViewBuilder
|
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
# chart.js turns a falsy legend `position` into a TOP legend, the opposite of what
|
|
38
|
+
# `position: false` senders mean (#499), so translate it to `display: false`.
|
|
39
|
+
module LegendShape
|
|
40
|
+
FALSE_POSITIONS = [false, 'false'].freeze
|
|
41
|
+
|
|
42
|
+
def legend(value)
|
|
43
|
+
super(normalized_legend(value))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
def normalized_legend(value)
|
|
48
|
+
return value if !value.respond_to?(:to_hash)
|
|
49
|
+
|
|
50
|
+
hash = ActiveSupport::HashWithIndifferentAccess.new(value)
|
|
51
|
+
return value if !FALSE_POSITIONS.include?(hash[:position])
|
|
52
|
+
|
|
53
|
+
replacement = hash.except(:position).merge(display: false).symbolize_keys
|
|
54
|
+
GLog.warn(
|
|
55
|
+
"Chart `legend: #{value.inspect}` is deprecated; send `legend: #{replacement.inspect}` instead. " \
|
|
56
|
+
'This will raise ArgumentError in glib-web 8.0.'
|
|
57
|
+
)
|
|
58
|
+
replacement
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
37
62
|
module Attributes
|
|
38
63
|
extend ActiveSupport::Concern
|
|
39
64
|
|
|
40
65
|
included do
|
|
66
|
+
prepend LegendShape
|
|
67
|
+
|
|
41
68
|
array :colors
|
|
42
69
|
string :prefix
|
|
43
70
|
string :suffix
|
|
@@ -787,52 +787,6 @@ class Glib::JsonUi::ViewBuilder
|
|
|
787
787
|
views :childViews
|
|
788
788
|
end
|
|
789
789
|
|
|
790
|
-
# Deprecated
|
|
791
|
-
class File < Text
|
|
792
|
-
# file_rules = { fileType: 'image/*', maxFileSize: 5000 }
|
|
793
|
-
# file_rules = { fileType: 'video/*', maxFileSize: 50000 }
|
|
794
|
-
# file_rules = { fileType: 'application/pdf', maxFileSize: 5000 }
|
|
795
|
-
|
|
796
|
-
include Glib::JsonUi::Upload
|
|
797
|
-
|
|
798
|
-
string :fileUrl
|
|
799
|
-
string :fileTitle
|
|
800
|
-
string :uploadText
|
|
801
|
-
hash :placeholderView # deprecated
|
|
802
|
-
hash :infoSpec # deprecated
|
|
803
|
-
|
|
804
|
-
def buttonLabels(obj)
|
|
805
|
-
@buttonLabels = ActiveSupport::HashWithIndifferentAccess.new(obj)
|
|
806
|
-
end
|
|
807
|
-
|
|
808
|
-
def created
|
|
809
|
-
@buttonLabels ||= ActiveSupport::HashWithIndifferentAccess.new
|
|
810
|
-
@buttonLabels['change'] ||= I18n.t('glib.change') if I18n.exists?('glib.change')
|
|
811
|
-
@buttonLabels['upload'] ||= I18n.t('glib.upload') if I18n.exists?('glib.upload')
|
|
812
|
-
@buttonLabels['delete'] ||= I18n.t('glib.delete') if I18n.exists?('glib.delete')
|
|
813
|
-
|
|
814
|
-
json.set! :buttonLabels, @buttonLabels
|
|
815
|
-
|
|
816
|
-
if @prop && context
|
|
817
|
-
# json.fileTitle context.field_value(@prop).blob&.filename
|
|
818
|
-
|
|
819
|
-
if (value = context.field_value(@prop)).attached?
|
|
820
|
-
json.fileTitle value.blob.filename
|
|
821
|
-
json.fileUrl existing_attachment_url(value.attachment)
|
|
822
|
-
end
|
|
823
|
-
end
|
|
824
|
-
|
|
825
|
-
super
|
|
826
|
-
end
|
|
827
|
-
|
|
828
|
-
@Override
|
|
829
|
-
def determine_value(context, prop)
|
|
830
|
-
if (value = context.field_value(prop)).attached?
|
|
831
|
-
value.signed_id || ''
|
|
832
|
-
end
|
|
833
|
-
end
|
|
834
|
-
end
|
|
835
|
-
|
|
836
790
|
# File upload field with direct-upload support and a progress list of
|
|
837
791
|
# already-attached files.
|
|
838
792
|
#
|
|
@@ -852,7 +806,9 @@ class Glib::JsonUi::ViewBuilder
|
|
|
852
806
|
# multi-file submit collapses to the last file server-side (silently
|
|
853
807
|
# saves one Document per drop instead of one per file).
|
|
854
808
|
bool :multiple, cache: true
|
|
855
|
-
|
|
809
|
+
# `url` is the current file's image; `emptyUrl` is shown whenever there is no file
|
|
810
|
+
# (none attached, or after the field is reset), otherwise a neutral box is shown.
|
|
811
|
+
hash :placeholderView, required: [:type, :width, :height], optional: [:url, :emptyUrl]
|
|
856
812
|
hash :inputView, optional: [:files, :variant]
|
|
857
813
|
hash :clipboardView, optional: [:icon]
|
|
858
814
|
|
|
@@ -31,26 +31,9 @@ module Glib
|
|
|
31
31
|
# key and is almost always a bug) and override the reader to return a symbol,
|
|
32
32
|
# so callers can compare with `record.status == :active` without tracking
|
|
33
33
|
# which form they're holding (see backend/01a_defensive_programming.md item 7).
|
|
34
|
-
#
|
|
35
|
-
# The same symbolization covers the per-attribute dirty-tracking readers
|
|
36
|
-
# (`status_was`, `status_in_database`, `status_change`, `saved_change_to_status`,
|
|
37
|
-
# ...), which Rails builds from the raw attribute rather than through the
|
|
38
|
-
# reader and would otherwise hand back the enum's string label. The dirty
|
|
39
|
-
# PREDICATES (`status_changed?(from: :draft)`) need no override: Rails casts
|
|
40
|
-
# their from:/to: through the enum type, so symbols already work there.
|
|
41
|
-
# Hash-form readers (`changes`, `saved_changes`, `attributes`) are left as
|
|
42
|
-
# Rails returns them: they are keyed by attribute name rather than written
|
|
43
|
-
# per attribute, and their consumers (serialization, audit trails, update
|
|
44
|
-
# payloads) expect Rails' native form.
|
|
45
34
|
module EnumSymbolization
|
|
46
35
|
extend ActiveSupport::Concern
|
|
47
36
|
|
|
48
|
-
# Per-attribute dirty readers returning the single value (string or nil).
|
|
49
|
-
VALUE_SUFFIXES = %w[_was _previously_was _before_last_save _in_database].freeze
|
|
50
|
-
# Per-attribute dirty readers returning a [before, after] pair, or nil when
|
|
51
|
-
# unchanged. `saved_change_to_<attr>` is the prefixed member of this set.
|
|
52
|
-
PAIR_SUFFIXES = %w[_change _previous_change _change_to_be_saved].freeze
|
|
53
|
-
|
|
54
37
|
class_methods do
|
|
55
38
|
def enum_symbolize(*attrs, **opts)
|
|
56
39
|
if attrs.size >= 2 && (attrs[1].is_a?(Hash) || attrs[1].is_a?(Array))
|
|
@@ -65,7 +48,7 @@ module Glib
|
|
|
65
48
|
# remove or move below `enum`.
|
|
66
49
|
attribute name, Glib::EnumSymbolization.backing_type(values)
|
|
67
50
|
enum name, values, **opts
|
|
68
|
-
|
|
51
|
+
glib_symbolize_reader(name)
|
|
69
52
|
else
|
|
70
53
|
# Legacy form: enum_symbolize :a[, :b, ...] for enums already declared.
|
|
71
54
|
if opts.any?
|
|
@@ -73,38 +56,18 @@ module Glib
|
|
|
73
56
|
"enum_symbolize: pass enum values as a braced hash, " \
|
|
74
57
|
"e.g. enum_symbolize :#{attrs.first}, { ... }"
|
|
75
58
|
end
|
|
76
|
-
attrs.each { |attr|
|
|
59
|
+
attrs.each { |attr| glib_symbolize_reader(attr) }
|
|
77
60
|
end
|
|
78
61
|
end
|
|
79
62
|
|
|
80
63
|
private
|
|
81
64
|
|
|
82
|
-
|
|
83
|
-
# attribute-methods module Rails includes, so each `super()` reaches the
|
|
84
|
-
# Rails implementation.
|
|
85
|
-
def glib_symbolize_enum(attr)
|
|
65
|
+
def glib_symbolize_reader(attr)
|
|
86
66
|
validates attr, presence: true
|
|
87
|
-
define_method(attr) {
|
|
88
|
-
|
|
89
|
-
VALUE_SUFFIXES.each do |suffix|
|
|
90
|
-
define_method("#{attr}#{suffix}") { Glib::EnumSymbolization.symbolize(super()) }
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
pair_methods = PAIR_SUFFIXES.map { |suffix| "#{attr}#{suffix}" } + ["saved_change_to_#{attr}"]
|
|
94
|
-
pair_methods.each do |method_name|
|
|
95
|
-
define_method(method_name) { super()&.map { |value| Glib::EnumSymbolization.symbolize(value) } }
|
|
96
|
-
end
|
|
67
|
+
define_method(attr) { super()&.to_sym }
|
|
97
68
|
end
|
|
98
69
|
end
|
|
99
70
|
|
|
100
|
-
# A label becomes a symbol; nil stays nil. Anything else passes through:
|
|
101
|
-
# with `validate: true` Rails casts an unknown raw value (99) to itself
|
|
102
|
-
# instead of raising, and that value must survive to fail validation
|
|
103
|
-
# rather than blow up in `to_sym`.
|
|
104
|
-
def self.symbolize(value)
|
|
105
|
-
value.is_a?(String) ? value.to_sym : value
|
|
106
|
-
end
|
|
107
|
-
|
|
108
71
|
# Infer the attribute type backing an enum from its declared values, so the
|
|
109
72
|
# type never depends on the (possibly not-yet-migrated) DB column. A hash
|
|
110
73
|
# whose values are strings backs a :string column; integer-keyed hashes and
|
|
@@ -70,9 +70,6 @@ page.list sections: [
|
|
|
70
70
|
action.windows_open url: json_ui_garage_url(path: 'forms/checkboxes')
|
|
71
71
|
end
|
|
72
72
|
template.thumbnail title: 'File Upload', onClick: ->(action) do
|
|
73
|
-
action.windows_open url: json_ui_garage_url(path: 'forms/file_upload')
|
|
74
|
-
end
|
|
75
|
-
template.thumbnail title: 'File Upload (NEW)', onClick: ->(action) do
|
|
76
73
|
action.windows_open url: json_ui_garage_url(path: 'forms/file_upload_new')
|
|
77
74
|
end
|
|
78
75
|
template.thumbnail title: 'Floating Submit', onClick: ->(action) do
|
|
@@ -108,7 +108,7 @@ page.scroll childViews: ->(scroll) do
|
|
|
108
108
|
|
|
109
109
|
form.spacer height: 20
|
|
110
110
|
rules = { fileType: 'image', maxFileSize: 5000, maxFileSizeErrorText: 'Too big!' }
|
|
111
|
-
form.
|
|
111
|
+
form.fields_upload \
|
|
112
112
|
name: 'user[photo][]',
|
|
113
113
|
width: 'matchParent',
|
|
114
114
|
label: 'Avatar',
|
|
@@ -335,6 +335,26 @@ page.body childViews: ->(body) do
|
|
|
335
335
|
res.hr width: 'matchParent'
|
|
336
336
|
res.spacer height: 16
|
|
337
337
|
|
|
338
|
+
res.h2 text: 'Legends'
|
|
339
|
+
res.label text: 'Each legend wire shape the renderer must honour.'
|
|
340
|
+
[
|
|
341
|
+
['legend_default', 'Default (no legend option)', nil],
|
|
342
|
+
['legend_hidden', 'Hidden', { display: false }],
|
|
343
|
+
['legend_right', 'Right', { position: 'right' }],
|
|
344
|
+
['legend_bottom_start', 'Bottom, start-aligned', { position: 'bottom', align: 'start' }],
|
|
345
|
+
['legend_override', 'Override (HTML legend plugin)', { override: true }],
|
|
346
|
+
# Legacy shape (#499): the builder translates it to `display: false` and logs a GLog warning.
|
|
347
|
+
['legend_position_false', 'Legacy position: false (hidden)', { position: false }]
|
|
348
|
+
].each do |id, label, legend|
|
|
349
|
+
res.spacer height: 8
|
|
350
|
+
res.label text: label
|
|
351
|
+
res.charts_line id: id, dataSeries: line_series_revenue, colors: ['#79AC78', '#3085C3'], legend: legend
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
res.spacer height: 16
|
|
355
|
+
res.hr width: 'matchParent'
|
|
356
|
+
res.spacer height: 16
|
|
357
|
+
|
|
338
358
|
res.h2 text: 'Edge cases'
|
|
339
359
|
res.label text: 'Confirm empty and zero-value inputs render without errors.'
|
|
340
360
|
res.spacer height: 8
|
|
@@ -102,6 +102,39 @@ page.body(
|
|
|
102
102
|
form.hr width: 'matchParent'
|
|
103
103
|
form.spacer height: 12
|
|
104
104
|
|
|
105
|
+
form.h2 text: 'PlaceholderView emptyUrl'
|
|
106
|
+
form.spacer height: 8
|
|
107
|
+
form.label text: 'Without emptyUrl, a reset field shows a neutral box (see Basic usage). With it, the empty-state image.'
|
|
108
|
+
form.spacer height: 8
|
|
109
|
+
form.panels_flow(
|
|
110
|
+
styleClass: 'align-center',
|
|
111
|
+
xs: { gap: { all: 4 } },
|
|
112
|
+
childViews: ->(flow) do
|
|
113
|
+
flow.fields_upload(
|
|
114
|
+
base_props.merge(
|
|
115
|
+
name: 'user[file_empty_url]',
|
|
116
|
+
id: 'fields_upload_empty_url',
|
|
117
|
+
width: 144,
|
|
118
|
+
placeholderView: {
|
|
119
|
+
type: 'image',
|
|
120
|
+
url: image&.url,
|
|
121
|
+
emptyUrl: 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="144" height="144"%3E%3Crect width="144" height="144" fill="%23ccc"/%3E%3C/svg%3E',
|
|
122
|
+
width: 144,
|
|
123
|
+
height: 144
|
|
124
|
+
}
|
|
125
|
+
)
|
|
126
|
+
)
|
|
127
|
+
flow.button(
|
|
128
|
+
text: 'Reset',
|
|
129
|
+
onClick: ->(action) { action.components_invoke targetId: 'fields_upload_empty_url', name: 'reset' }
|
|
130
|
+
)
|
|
131
|
+
end
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
form.spacer height: 12
|
|
135
|
+
form.hr width: 'matchParent'
|
|
136
|
+
form.spacer height: 12
|
|
137
|
+
|
|
105
138
|
form.h2 text: 'InputView variants'
|
|
106
139
|
form.spacer height: 8
|
|
107
140
|
form.label text: 'Outlined text-field input'
|
|
@@ -164,6 +197,24 @@ page.body(
|
|
|
164
197
|
)
|
|
165
198
|
)
|
|
166
199
|
|
|
200
|
+
form.spacer height: 12
|
|
201
|
+
form.label text: 'onFinishUpload fires once per pick'
|
|
202
|
+
form.spacer height: 4
|
|
203
|
+
# Own props, not base_props: the shared snackbar hook would also fire, and the
|
|
204
|
+
# spec counts this field's posts to check onFinishUpload runs once, not per file.
|
|
205
|
+
form.fields_upload(
|
|
206
|
+
name: 'user[file_finish_once][]',
|
|
207
|
+
id: 'fields_upload_finish_once',
|
|
208
|
+
label: 'Choose files',
|
|
209
|
+
width: 320,
|
|
210
|
+
directUploadUrl: glib_direct_uploads_url,
|
|
211
|
+
inputView: {},
|
|
212
|
+
multiple: true,
|
|
213
|
+
onFinishUpload: ->(action) do
|
|
214
|
+
action.http_post url: json_ui_garage_url(path: 'forms/generic_post')
|
|
215
|
+
end
|
|
216
|
+
)
|
|
217
|
+
|
|
167
218
|
form.spacer height: 12
|
|
168
219
|
form.hr width: 'matchParent'
|
|
169
220
|
form.spacer height: 12
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: glib-web
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 8.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- ''
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: activestorage
|
|
@@ -192,7 +191,6 @@ dependencies:
|
|
|
192
191
|
- - ">="
|
|
193
192
|
- !ruby/object:Gem::Version
|
|
194
193
|
version: '0'
|
|
195
|
-
description:
|
|
196
194
|
email: ''
|
|
197
195
|
executables: []
|
|
198
196
|
extensions: []
|
|
@@ -339,7 +337,6 @@ files:
|
|
|
339
337
|
- app/views/json_ui/garage/forms/dynamic_group.json.jbuilder
|
|
340
338
|
- app/views/json_ui/garage/forms/dynamic_select.json.jbuilder
|
|
341
339
|
- app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder
|
|
342
|
-
- app/views/json_ui/garage/forms/file_upload.json.jbuilder
|
|
343
340
|
- app/views/json_ui/garage/forms/file_upload_new.json.jbuilder
|
|
344
341
|
- app/views/json_ui/garage/forms/floating_submit.json.jbuilder
|
|
345
342
|
- app/views/json_ui/garage/forms/full_page_form.json.jbuilder
|
|
@@ -609,10 +606,8 @@ files:
|
|
|
609
606
|
- lib/glib/time_returning_mailer.rb
|
|
610
607
|
- lib/glib/value.rb
|
|
611
608
|
- lib/tasks/db.rake
|
|
612
|
-
homepage:
|
|
613
609
|
licenses: []
|
|
614
610
|
metadata: {}
|
|
615
|
-
post_install_message:
|
|
616
611
|
rdoc_options: []
|
|
617
612
|
require_paths:
|
|
618
613
|
- lib
|
|
@@ -627,8 +622,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
627
622
|
- !ruby/object:Gem::Version
|
|
628
623
|
version: '0'
|
|
629
624
|
requirements: []
|
|
630
|
-
rubygems_version:
|
|
631
|
-
signing_key:
|
|
625
|
+
rubygems_version: 4.0.6
|
|
632
626
|
specification_version: 4
|
|
633
627
|
summary: ''
|
|
634
628
|
test_files: []
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
json.title 'Forms'
|
|
2
|
-
|
|
3
|
-
options = {
|
|
4
|
-
url: json_ui_garage_url(path: 'forms/generic_post'),
|
|
5
|
-
method: 'post',
|
|
6
|
-
padding: { top: 12, left: 20, right: 20, bottom: 12 }
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
page = json_ui_page json
|
|
10
|
-
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
11
|
-
|
|
12
|
-
page.form options.merge(childViews: ->(form) do
|
|
13
|
-
rules = { fileType: 'image', maxFileSize: 5000 }
|
|
14
|
-
form.fields_file name: 'user[photo][]', width: 'matchParent', label: 'Landscape Photo', accepts: rules, directUploadUrl: glib_direct_uploads_url,
|
|
15
|
-
value: 'eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--193dc0d939b9558fc4973fafbba91d989cbb04d4',
|
|
16
|
-
fileUrl: 'https://imageserver-demo.herokuapp.com/image/itinerarybuilder-demo/o6CKzNt67PWnkPdUEnWMt7pr?h=100&w=100',
|
|
17
|
-
fileTitle: '1 month ago',
|
|
18
|
-
placeholderView: { type: 'image', width: 100, height: 75, url: 'https://www.atms.com.au/wp-content/uploads/2019/10/placeholder-1-1024x683.png?x93630' }
|
|
19
|
-
|
|
20
|
-
rules = { fileType: 'image', maxFileSize: 100, maxFileSizeErrorText: 'Too big!' }
|
|
21
|
-
form.fields_file name: 'user[photo][]', width: 'matchParent', label: 'Avatar', accepts: rules, directUploadUrl: glib_direct_uploads_url,
|
|
22
|
-
placeholderView: { type: 'avatar', width: 100, height: 100, url: 'data:image/jpeg;base64,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' }
|
|
23
|
-
|
|
24
|
-
form.fields_file name: 'user[photo1][]', width: 'matchParent', label: 'Avatar without directUploadUrl', accepts: rules,
|
|
25
|
-
placeholderView: { type: 'avatar', width: 100, height: 100, url: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMREBUREhAWFhUWGBcVFRgXFxUVFxcWGRUWFxYVFRUYHSggGB0lHRgVITEhJSkrLi4uGB8zODMtNygtLisBCgoKBQUFDgUFDisZExkrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrK//AABEIAOMA3gMBIgACEQEDEQH/xAAbAAEAAgMBAQAAAAAAAAAAAAAABgcBAwQFAv/EAEAQAAECAwMKAwYEBAYDAAAAAAEAAgMRIQQSMQUGIjJBUWFxgZEHE6FCUnKxwdEUI2LwM4KSskNzg6LC4WOz8f/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwC6XuvCQRj7okcUe27UYoxt4TOKDDG3Knkjm3jeGCMdeoeaOcWmQwQZe6/Qc0a+6Lpx+6PbcqOSNbeF44oMMbcqeSOZeN4YIx1+h5oXEG6MEGXuv0HNGuui6cfuvMytl6zWTXi6XuN039hh1koflPxDe4nyILW/qfpO/pFB6oLDhMLTX0XLbLbChmcSNDZ8T2tPqVUNuy/aY38S0PI3A3W/0tkF5qC4bVnZYsPxLT8Ic71AWgZ72ICXmuP+m/7KpUQWzAzzsQP8Y9Ybx9F0szlsb3TFqhjDWJZ6uAVOogvcR2RR+XEa7bouB+S2B0hdOOHCqoVjiDMEg7xQ917FgzqtcHVjucNz9Mf7qjoUFwMFzHahbM3tmPZQfJ3iG10m2mCR+qGZjqw17EqXZNynCtDZwIrXt2gawn7zTUIOt7r1BzRj7ounFHtu1GOCMbeEzigwxtyp5I5t43hgjHXqHmjnXTdGCDL3X6DmjXXRdOP3R7blRyRrZi8cfsgwxtyp5I9t+o5Iw36Hmj3XaDmgMZcqeVEcy8Zj1Rji4yOHZHuLTIYIMvdfoOdUa+6LpxR7btW44b0Y0OEzigwxtyp5URzLxvDD7JDJdR3NRfOnPFlmnBgSfFwJxbD5+87hs27kHt5byzBs7A6M+7ta3F7vhb9cFXeXM9o8abIX5MPc06ZH6n7OQl1UdtdqfFeYkR5c44k4/wDQ4LSgFERAREQEREBERAREQF9wIzmOD2OLXDAtJBHUL4RBOMgZ/OYQ21NvjDzGgB4+Joo7pI81O7PHZHaIsJ7XsO0H0O48FRi78j5Yi2V9+E+XvNNWuG5w+uKC63uv0HOqNfdF04/deLm5nFCtbNDQigacMmstpZ7wXtNaCJnFBhjblTyojmXjeGH2RhvUdz3I5xBujBBl7r9BzqjHXKHnRHi7Vv3Rjb1XY9kBz79BzqjX3KH0R7Q2rce6MaHCbseyDDG3KnlRCy8bw9UYS6jsOyiGfecvkNNlgO/McNNw9hp9kH3j6BBoz2zxul1mszq4RIg2b2sO/edirxEQEREBERAREJQEXZZskx4mpAiO4hpl3NF3Q81LYf8AAI5uYPqg8VF7UTNS1j/AJ5OYfquC05MjQ/4kGI3iWul3wQciIiAiIgIiINlnjuhvD2OLXNMwRQgq0s1M5G2wXHybHaKjY8D2mcd4VUrZZ47ob2vY4tc0zaRiCgvZ7r9BzqjX3RdOPpVeJmtl8WuDeoIzZCI3/m0bj6VXttaCJnH97EGGNuVPKiObfqOVUYb1HfZHuLaNw7oDWXKnlRHMv1HqjCSZOw7I5100Mm4k7BvM0HlZ05ebZbOXgabtGEDtdLWI3DHsqeixC9xc4kucSSTiSaklernXlj8XaHPH8NuhDH6Rt5nHsvHQEREBERARF6WbuSzabQ2H7Os87mjHqcOqDtzczXiWrTcbkL3pVdvDB9fmp7k3INns8rkIXvedpO7nDpJejChhrQ1oAaAAAMABgF9ICIiAiIg8nKeblnjzvQw13vM0XdZUPVQHOHNyJZDenfhkyDwMDsDhsKtRarTZ2xGOhvE2uEiOCClUXblnJ5s8d8I+ydE72mrT2+q4kBERAREQd2RspvssZsZmLcRsc04tPP7K5LFaW2iG2PDM2uAI3jeDxBmFRqmfhxlry4psrzoRKs4RJYfzAdwN6Cx3Ov0HOqNdcoedEeLurj3RgDqux7IDn36Dmoxn/lT8PZfJadOMS2mxntn1A6qUOaBq491UmfWUfPtr5GbYf5bf5dY/1T7BBH0REBERAREQFYfh3YbsB0YisR0h8LafOfZV4VcGQYHl2WC3dDbPmQCfUlB3oiICIiAiIgIiIIX4j2GbYccCoPlu5GrfW93UEVsZ2QA+xRgdjbw5tId9FU6AiIgIiIC+oby0hzTIgggjEEVBC+UQXXkLKYj2dloGLhJwGx4o4dwu5zL9RyUB8MLfpRLM7AjzW8xJrvS72U+eSKNw7oOfKMb8PBiRidRjnDmBQd5Kj3OJMzianmrT8QbW5lhLTjEe1nSrj/bJVWgIiICIiAiIgK3834/mWWC7/wAbQeYF0+oKqBWJ4d2u9Z3wtsN0x8L6/MOQStERAREQEREBERB4+d0e5Yox3tujm4gfVVQp54kWuTIUEe0S88m0HqT2UDQEREBERAREQelm5bvItcGLOQDwHfC7Rd6Eq6L1ynVUKVeOSLQI1nhRTi+Gwmu26J+s0EP8U7RNlnZvMR3a6B/cVXym3ik786CBgIbj3d/0oSgIiICIiAiIgKW+HN/z4khoXJOO4zm35OUSU88NXjy4w9q80nlIgeoKCZoiICIiAiIgIiIK1z/D/wAXNzSG3GhnECcz3J9FGlNfEt4vQBtk8nkS2XyKhSAiIgIiICIiArazFPmWCFXVL29nlVKrP8OHn8CZbIrx/tYfqg8TxRZKPB/yyP8AeVC1O/FKGZ2d53RGnoWEfMqCICIiAiIgIiIC78iZVfZYoiMrsc3Y5u7hzXAiC5cmZQZaITYsMzB7g7WniF1KBeHFuk+JAJ1gHtHFtHS6Ef0qeoCIiAiIgLiyxlRlmhGJE5NAxc7YAu1V14hW6/aGwgaQ21+J1T6BqDwsr5SfaYpivxNABg1owaFxIiAiIgIiICIiArP8M3XbE874zv7If2VYK1/DuEBYGl3tPe6vOX0QcniZDv2VkSWpEAPJzSPmAqzV0Z02QRrFGY2RNwuA4s0h8lS6AiIgIiICIiAiIg6LBa3QYrIrNZhmOO8HgRMdVcFgtbY0NsVh0XCY4bweINFS6n/hvaSYUWGcGOBH8wMx3bPqgmCIiAiIg48rW9tngviuwaKDe40a0cyqgtEd0R7nuM3OJcTxJmpn4k2kzgwtmk88TQDtXuoQgIiICIiAiIgIiICufNixXbFAbgfLDjzdpH5qn7DZjFishDF7mtHUymrxc0iQZgABThRBny7tTUYd1S2X7B+HtMWDsa43fhOk30IV0snPSw4qC+J2TJ+XamCn8N/zYfmOyCAIiICIiAiIgIi3WWyviuDIbC5x2AT77hxQaVaGZmSjZ7PpiT4hvuG4Sk1p4yr1XHm1miIJEWPJ0QVa3FrDv/UfQKVoCIiAiIgjGfeSTGgiIwTdCmSBiWGV6XKQPdVurvUOzlzOvkxbMAHGroeAJ3s3HhhyQQFFsjwXMcWvaWuGIIkR0WtAREQEREBERBK/DfJ/mWvzCKQml38zptb/AMj0Vn37lMdu5R3MfJhgWNplpxT5jt4aRoDtXqVImS9rHjuQYv36YbVz5RsbYsJ9nfqvBE9xOBHEGRXS+Xs48EZKWljxQUZbrI6DFfCeJOYS0/ccCK9VoVjeIWQTEh/imN02CUUe8wYP5t28OSrlARF9wYTnuDWtLnEyAAmSeSD4XRYrDEjOuwobnngKDmcB1UzyFmQAA+0mZx8sGg+Jwx5D1UwgQGw2hrGhrRgGgAdgghOSsxCZOtESX6GVPV+Hbupjk/J8KA27Chho2yxPM4nqulEBERAREQEREBERBxZTyVBtDZRYYduODhycKhQzKuYsRs3QH3x7rpNd0OB9FYCIKWtVlfCddiMcw7nAjtvWlXVarKyK27EY1zdzgD/8UNy5mQKvsx/03H+1x+R7oIOi+osMtcWuBDgZEESIO4hfKAvZzSyP+KtLWEflt04nwj2epp3XjtaSQAJk0AGJJwAVwZpZFbY7PddLzXydE5yo0cB85oPadoV6SwksXL9cNiwyft4cao+fs4cN6DJZcrjsQMv6WCwwEHSw41R4JOjhwogy19+hFNu2YwkQqqz1zbNki32D8l50f0OxuH6cOStV5B1ceFKLTarMyLCdCjCYcJEH0M9h3FBR0GE57gxoJc4gADEk7FaGbGbzbKy8ZOiuGk7d+lvDjtWnIOaX4SO+I43hhBO0NOJduds771IkBERAREQEREBERAREQEREBERAREQeFnPm621MvNAbGA0Xe9+l3DjsVYRoRY4tcCHNJBBxBGIV2Lx7bmpCj2lloiaoGkyX8Rw1Z8N++QQeNmDm7dlbIzf8lp/9h+nfcp5cvaX7osMEtYSGwbByCOBnTV9ONEAOv0w2oX3KY7Vl8jqY8KURhA1seNaIMB9+mG1C+5o4rLyDq48KIwgCTseNUAsuVx2IGXtJYYCNbDjWqOBJm3Dsg+mRL1CFoiwZcv3itzyDq48KUWWOAEjj+5IONF0PgbcDu+y0ESxQYREQEREBERAREQEREBERARfTGE4BdDGNbiaoNbYUhN3QfdbQy9penJYZMGbsONao4EmbcO3OiAHX6YbUL7uj+6rLyDq48KURpAEjj+5VQC25XHYgbfrhsWGAjWw41R4J1cOFKoMllyo5IGX6lYYCDN2HdHgkzbh2QGvv0NNqF93RWXkGjce1EaQBJ2Pf1QC25UV2IGXtL90WGAjWw71RwJM24dudEBrr9DTasRDLRIn819PIOrj2ojSAJOx7+qD4iWbce60uYRiF0MBGth3qskkmYw/exByIustacBPlRa3QW4TIPGvyQaEW91nl7QWPw53hBpRbhZydo7p5FZFwQaUXSYDRiSshu1rRLf8APFBoZDJwC2CEAZEzO4LbEde1T9FgESkdb67KoPqJo1HKWxfIZe0lhgIq7DujgSZtw7eiA11+hptQvu6P7qsvIOrj2ojSAJOx7+qAW3KiuxAy9pfuiwwEa2HeqOBJmMO3OiAHX6Gm1C65QV2rLzPVx7IwgUdj3QfVp1eqWfVREGqy49PskfW7IiDZasOv3WYGr3REGuy49FiPrdkRBstWHX7rMHV7rKINVlx6LEXX7IiDZasBzWYOp3+qyiDVZcTyWIuv2+iIg2WrAc1mHqdD9URB8WXEr5fr9R9ERBttOr1Sz6vdZRBpsuPT7JH1uyIg2WrDqswdTuiINdlxPJYtOt0REH//2Q==' }
|
|
26
|
-
|
|
27
|
-
rules = { fileType: 'pdf', maxFileSize: 5000 }
|
|
28
|
-
form.fields_file name: 'user[pdf1][]', width: 'matchParent', label: 'PDF Document', accepts: rules, directUploadUrl: glib_direct_uploads_url,
|
|
29
|
-
placeholderView: { type: 'image', width: 100, height: 100, url: 'data:image/webp;base64,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' }
|
|
30
|
-
|
|
31
|
-
rules = { fileType: ['pdf', 'image'], maxFileSize: 5000 }
|
|
32
|
-
form.fields_file name: 'user[pdf2][]', width: 'matchParent', label: 'PDF/Image File', accepts: rules, directUploadUrl: glib_direct_uploads_url
|
|
33
|
-
|
|
34
|
-
rules = { fileType: 'zip', maxFileSize: 5000 }
|
|
35
|
-
form.fields_file name: 'user[zip][]', width: 'matchParent', label: 'ZIP Document', accepts: rules, directUploadUrl: glib_direct_uploads_url
|
|
36
|
-
|
|
37
|
-
# TODO
|
|
38
|
-
# rules = { fileType: 'image/*', maxFileSize: 1, maxFileSizeErrorText: 'Too big!' }
|
|
39
|
-
# form.fields_multiImage name: 'user[photos][]', width: 'matchParent', label: 'Avatar', accepts: rules, directUploadUrl: glib_direct_uploads_url,
|
|
40
|
-
# placeholderView: { type: 'avatar', width: 100, height: 100, url: 'data:image/jpeg;base64,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' }
|
|
41
|
-
|
|
42
|
-
form.spacer height: 16
|
|
43
|
-
form.label text: 'Sign'
|
|
44
|
-
form.spacer height: 8
|
|
45
|
-
form.fields_sign \
|
|
46
|
-
name: 'user[sign]',
|
|
47
|
-
directUploadUrl: glib_direct_uploads_url,
|
|
48
|
-
width: 300, height: 150,
|
|
49
|
-
validation: { required: { message: 'add your signature!' } }
|
|
50
|
-
form.spacer height: 24
|
|
51
|
-
form.fields_submit text: 'Submit'
|
|
52
|
-
end)
|