glib-web 0.6.6 → 0.6.7
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/helpers/glib/json_ui/abstract_builder.rb +14 -0
- data/app/helpers/glib/json_ui/action_builder/commands.rb +7 -0
- data/app/helpers/glib/json_ui/view_builder/multimedia.rb +7 -0
- data/app/helpers/glib/json_ui/view_builder.rb +1 -1
- data/app/validators/url_validator.rb +11 -5
- data/app/views/json_ui/garage/actions/_commands.json.jbuilder +9 -0
- data/app/views/json_ui/garage/actions/index.json.jbuilder +2 -0
- data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +5 -2
- data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +59 -10
- data/app/views/json_ui/garage/views/controls.json.jbuilder +3 -3
- data/app/views/json_ui/garage/views/index.json.jbuilder +1 -25
- data/app/views/json_ui/garage/views/multimedia.json.jbuilder +26 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a570033b2f2290d45f8678518c0f5cdfcbd5edc3ad58f640e0927c44ebd4e52e
|
4
|
+
data.tar.gz: 48c8031d6b01a819dbc7f2496a4e95861f45df9f29386bf7b96b19adb8dc1c2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8dee6863475ddb393169c8a22cdc09945c656c879e9780782bcd04efdf6a193bdc2153e9371a3fb3c24b67d4fd2bcb479d5fba31d171092b726e31e3dd82e784
|
7
|
+
data.tar.gz: b77f966accd930a4a932d17af6e4d35cec5507b31ac1ec7a7f7153ef075b355d8dea36f512d2fe40c913832c0c241e24e67a91ba65ea0eff2d851408f90be302
|
@@ -113,6 +113,20 @@ module Glib
|
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
|
+
def self.url(propName)
|
117
|
+
define_method(propName) do |value|
|
118
|
+
if (value = value&.to_s)
|
119
|
+
if !Rails.env.production?
|
120
|
+
if !UrlValidator.validate(value)
|
121
|
+
raise "Invalid URL: #{value}"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
json.set! propName, value
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
116
130
|
def self.color(propName)
|
117
131
|
define_method(propName) do |value|
|
118
132
|
if (value = value&.to_s)
|
@@ -1,5 +1,11 @@
|
|
1
1
|
class UrlValidator < ActiveModel::EachValidator
|
2
2
|
def validate_each(record, attribute, value)
|
3
|
+
if !self.class.validate(value)
|
4
|
+
record.errors.add(attribute, :invalid)
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.validate(value)
|
3
9
|
schemes = ['https', 'http']
|
4
10
|
|
5
11
|
begin
|
@@ -8,13 +14,13 @@ class UrlValidator < ActiveModel::EachValidator
|
|
8
14
|
scheme = uri && uri.scheme
|
9
15
|
|
10
16
|
valid_scheme = host && scheme && schemes.include?(scheme)
|
11
|
-
valid_raw_url = scheme && value.match?(URI
|
17
|
+
valid_raw_url = scheme && value.match?(URI.regexp([scheme]))
|
12
18
|
|
13
|
-
unless valid_raw_url && valid_scheme
|
14
|
-
record.errors.add(attribute, :invalid)
|
15
|
-
end
|
19
|
+
return false unless valid_raw_url && valid_scheme
|
16
20
|
rescue URI::InvalidURIError
|
17
|
-
|
21
|
+
return false
|
18
22
|
end
|
23
|
+
|
24
|
+
true
|
19
25
|
end
|
20
26
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
section.header padding: glib_json_padding_list, childViews: ->(header) do
|
2
|
+
header.h3 text: 'Commands'
|
3
|
+
end
|
4
|
+
|
5
|
+
section.rows builder: ->(template) do
|
6
|
+
template.thumbnail title: 'commands/copy', onClick: ->(action) do
|
7
|
+
action.commands_copy text: 'Paste this somewhere else'
|
8
|
+
end
|
9
|
+
end
|
@@ -20,5 +20,7 @@ page.list sections: [
|
|
20
20
|
render "#{@path_prefix}/actions/timeouts", section: section
|
21
21
|
end, ->(section) do
|
22
22
|
render "#{@path_prefix}/actions/http", section: section
|
23
|
+
end, ->(section) do
|
24
|
+
render "#{@path_prefix}/actions/commands", section: section
|
23
25
|
end
|
24
26
|
]
|
@@ -10,14 +10,14 @@ page = json_ui_page json
|
|
10
10
|
render "#{@path_prefix}/nav_menu", json: json, page: page
|
11
11
|
|
12
12
|
page.form options.merge(childViews: ->(form) do
|
13
|
-
rules = { fileType: 'image
|
13
|
+
rules = { fileType: 'image', maxFileSize: 5000 }
|
14
14
|
form.fields_file name: 'user[photo][]', width: 'matchParent', label: 'Landscape Photo', accepts: rules, directUploadUrl: rails_direct_uploads_url,
|
15
15
|
value: 'eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--193dc0d939b9558fc4973fafbba91d989cbb04d4',
|
16
16
|
fileUrl: 'https://imageserver-demo.herokuapp.com/image/itinerarybuilder-demo/o6CKzNt67PWnkPdUEnWMt7pr?h=100&w=100',
|
17
17
|
fileTitle: '1 month ago',
|
18
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
19
|
|
20
|
-
rules = { fileType: 'image
|
20
|
+
rules = { fileType: 'image', maxFileSize: 1, fileTypeErrorText: 'Invalid!', maxFileSizeErrorText: 'Too big!' }
|
21
21
|
form.fields_file name: 'user[photo][]', width: 'matchParent', label: 'Avatar', accepts: rules, directUploadUrl: rails_direct_uploads_url,
|
22
22
|
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==' }
|
23
23
|
|
@@ -28,6 +28,9 @@ page.form options.merge(childViews: ->(form) do
|
|
28
28
|
rules = { fileType: 'pdf', maxFileSize: 5000 }
|
29
29
|
form.fields_file name: 'user[pdf2][]', width: 'matchParent', label: 'PDF Document', accepts: rules, directUploadUrl: rails_direct_uploads_url
|
30
30
|
|
31
|
+
rules = { fileType: 'zip', maxFileSize: 5000 }
|
32
|
+
form.fields_file name: 'user[zip][]', width: 'matchParent', label: 'ZIP Document', accepts: rules, directUploadUrl: rails_direct_uploads_url
|
33
|
+
|
31
34
|
# TODO
|
32
35
|
# rules = { fileType: 'image/*', maxFileSize: 1, fileTypeErrorText: 'Invalid!', maxFileSizeErrorText: 'Too big!' }
|
33
36
|
# form.fields_multiImage name: 'user[photos][]', width: 'matchParent', label: 'Avatar', accepts: rules, directUploadUrl: rails_direct_uploads_url,
|
@@ -4,14 +4,63 @@ page = json_ui_page json
|
|
4
4
|
|
5
5
|
render "#{@path_prefix}/nav_menu", json: json, page: page
|
6
6
|
|
7
|
-
page.form url: json_ui_garage_url(path: 'forms/submission_flow_post'), method: 'post', padding: { top: 12, left: 20, right: 20, bottom: 12 }, childViews: ->(form) do
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
7
|
+
# page.form url: json_ui_garage_url(path: 'forms/submission_flow_post'), method: 'post', padding: { top: 12, left: 20, right: 20, bottom: 12 }, childViews: ->(form) do
|
8
|
+
# form.fields_radioGroup name: 'user[flow]', childViews: ->(group) do
|
9
|
+
# group.h3 text: 'Flow'
|
10
|
+
# group.spacer height: 6
|
11
|
+
# group.fields_radio value: 'open', label: 'open - useful for form create'
|
12
|
+
# group.fields_radio value: 'close_with_reload', label: 'closeWithReload - useful for form update'
|
13
|
+
# group.fields_radio value: 'close_alert', label: 'close+alert - useful for non-model form (e.g. contact us)'
|
14
|
+
# group.fields_radio value: 'alert_close', label: 'alert+close - useful for non-model form (e.g. contact us)'
|
15
|
+
# group.fields_radio value: 'on_submit', label: 'onSubmit - useful for performing an action prior to submitting'
|
16
|
+
# end
|
17
|
+
|
18
|
+
# form.spacer height: 14
|
19
|
+
# form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
20
|
+
# end
|
21
|
+
|
22
|
+
|
23
|
+
page.scroll childViews: ->(scroll) do
|
24
|
+
scroll.panels_form \
|
25
|
+
url: json_ui_garage_url(path: 'forms/submission_flow_post'),
|
26
|
+
method: 'post',
|
27
|
+
padding: { top: 12, left: 20, right: 20, bottom: 12 },
|
28
|
+
childViews: ->(form) do
|
29
|
+
form.h3 text: 'Submission flow best practices'
|
30
|
+
form.spacer height: 6
|
31
|
+
|
32
|
+
form.fields_radioGroup name: 'user[flow]', childViews: ->(group) do
|
33
|
+
group.fields_radio value: 'open', label: 'open - useful for form create'
|
34
|
+
group.fields_radio value: 'close_with_reload', label: 'closeWithReload - useful for form update'
|
35
|
+
group.fields_radio value: 'close_alert', label: 'close+alert - useful for non-model form (e.g. contact us)'
|
36
|
+
group.fields_radio value: 'alert_close', label: 'alert+close - useful for non-model form (e.g. contact us)'
|
37
|
+
end
|
38
|
+
|
39
|
+
form.spacer height: 14
|
40
|
+
form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
41
|
+
end
|
42
|
+
|
43
|
+
scroll.panels_form \
|
44
|
+
url: json_ui_garage_url(path: 'forms/generic_post'),
|
45
|
+
method: 'post',
|
46
|
+
padding: { top: 12, left: 20, right: 20, bottom: 12 },
|
47
|
+
childViews: ->(form) do
|
48
|
+
form.h3 text: 'Perform custom actions on submit'
|
49
|
+
|
50
|
+
form.fields_text width: 'matchParent', styleClass: 'outlined', name: 'user[text]', value: 'Hello'
|
51
|
+
|
52
|
+
form.spacer height: 14
|
53
|
+
# form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
54
|
+
|
55
|
+
form.fields_submit text: 'Submit'
|
56
|
+
end,
|
57
|
+
onSubmit: ->(action) do
|
58
|
+
# action.forms_submit
|
59
|
+
|
60
|
+
action.dialogs_alert \
|
61
|
+
message: 'The form will submit after the dialog is closed',
|
62
|
+
onClose: ->(subaction) do
|
63
|
+
subaction.forms_submit
|
64
|
+
end
|
65
|
+
end
|
17
66
|
end
|
@@ -9,15 +9,15 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
|
9
9
|
|
10
10
|
scroll.button text: 'Button', onClick: ->(action) do
|
11
11
|
action.dialogs_alert message: 'Perform action'
|
12
|
-
end
|
12
|
+
end, tour: { index: 0, key: 'quiz1', title: 'Tutorial Step 1', message: 'This is step 1 of the tutorial' }
|
13
13
|
scroll.spacer height: 20
|
14
14
|
|
15
15
|
scroll.button text: 'Buton with build-in classes', styleClasses: ['rounded', 'outlined', 'tile', 'depressed'], onClick: ->(action) do
|
16
16
|
action.dialogs_alert message: 'Perform action'
|
17
|
-
end
|
17
|
+
end, tour: { index: 1, key: 'quiz1', title: 'Tutorial Step 2', message: 'This is step 2 of the tutorial' }
|
18
18
|
scroll.spacer height: 20
|
19
19
|
|
20
|
-
scroll.button icon: 'info', text: 'Button with Icon and Tooltip', tooltip: { text: 'Tooltip text'}, onClick: ->(action) do
|
20
|
+
scroll.button icon: 'info', text: 'Button with Icon and Tooltip', tooltip: { text: 'Tooltip text' }, onClick: ->(action) do
|
21
21
|
action.dialogs_alert message: 'Perform action'
|
22
22
|
end
|
23
23
|
scroll.spacer height: 20
|
@@ -10,35 +10,11 @@ json_ui_page json do |page|
|
|
10
10
|
end
|
11
11
|
|
12
12
|
section.rows builder: ->(template) do
|
13
|
-
['texts', 'controls', 'images', 'charts', 'banners', 'maps', 'misc', 'icons', 'progress'].each do |component|
|
13
|
+
['texts', 'controls', 'images', 'multimedia', 'charts', 'banners', 'maps', 'misc', 'icons', 'progress'].each do |component|
|
14
14
|
template.thumbnail title: component.humanize, onClick: ->(action) do
|
15
15
|
action.windows_open url: json_ui_garage_url(path: "views/#{component}")
|
16
16
|
end
|
17
17
|
end
|
18
|
-
# template.thumbnail title: 'Texts', onClick: ->(action) do
|
19
|
-
# action.windows_open url: json_ui_garage_url(path: 'views/texts')
|
20
|
-
# end
|
21
|
-
# template.thumbnail title: 'Controls', onClick: ->(action) do
|
22
|
-
# action.windows_open url: json_ui_garage_url(path: 'views/controls')
|
23
|
-
# end
|
24
|
-
# template.thumbnail title: 'Images', onClick: ->(action) do
|
25
|
-
# action.windows_open url: json_ui_garage_url(path: 'views/images')
|
26
|
-
# end
|
27
|
-
# template.thumbnail title: 'Charts', onClick: ->(action) do
|
28
|
-
# action.windows_open url: json_ui_garage_url(path: 'views/charts')
|
29
|
-
# end
|
30
|
-
# template.thumbnail title: 'Banners', onClick: ->(action) do
|
31
|
-
# action.windows_open url: json_ui_garage_url(path: 'views/banners')
|
32
|
-
# end
|
33
|
-
# template.thumbnail title: 'Maps', onClick: ->(action) do
|
34
|
-
# action.windows_open url: json_ui_garage_url(path: 'views/maps')
|
35
|
-
# end
|
36
|
-
# template.thumbnail title: 'Misc', onClick: ->(action) do
|
37
|
-
# action.windows_open url: json_ui_garage_url(path: 'views/misc')
|
38
|
-
# end
|
39
|
-
# template.thumbnail title: 'Icons', onClick: ->(action) do
|
40
|
-
# action.windows_open url: json_ui_garage_url(path: 'views/icons')
|
41
|
-
# end
|
42
18
|
end
|
43
19
|
end,
|
44
20
|
->(section) do
|
@@ -0,0 +1,26 @@
|
|
1
|
+
json.title 'Views'
|
2
|
+
|
3
|
+
page = json_ui_page json
|
4
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
5
|
+
|
6
|
+
page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
7
|
+
scroll.h2 text: 'Youtube (long URL)'
|
8
|
+
scroll.spacer height: 6
|
9
|
+
scroll.multimedia_video width: 560, height: 315, url: 'https://www.youtube.com/watch?v=947op8yKJRY'
|
10
|
+
|
11
|
+
scroll.spacer height: 24
|
12
|
+
scroll.h2 text: 'Youtube (shorten URL)'
|
13
|
+
scroll.spacer height: 6
|
14
|
+
scroll.multimedia_video width: 560, height: 315, url: 'https://youtu.be/ATnpEOo3GJA'
|
15
|
+
|
16
|
+
scroll.spacer height: 24
|
17
|
+
scroll.h2 text: 'Youtube (specific width)'
|
18
|
+
scroll.label text: 'If height is not specified, it will be auto-calculated using 16:9 ratio.'
|
19
|
+
scroll.spacer height: 6
|
20
|
+
scroll.multimedia_video width: 640, url: 'https://youtu.be/ATnpEOo3GJA'
|
21
|
+
|
22
|
+
scroll.spacer height: 24
|
23
|
+
scroll.h2 text: 'Youtube (full width)'
|
24
|
+
scroll.spacer height: 6
|
25
|
+
scroll.multimedia_video width: 'matchParent', url: 'https://youtu.be/ATnpEOo3GJA'
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glib-web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ''
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- app/helpers/glib/forms_helper.rb
|
92
92
|
- app/helpers/glib/json_ui/abstract_builder.rb
|
93
93
|
- app/helpers/glib/json_ui/action_builder.rb
|
94
|
+
- app/helpers/glib/json_ui/action_builder/commands.rb
|
94
95
|
- app/helpers/glib/json_ui/action_builder/dialogs.rb
|
95
96
|
- app/helpers/glib/json_ui/action_builder/http.rb
|
96
97
|
- app/helpers/glib/json_ui/action_builder/iap.rb
|
@@ -112,6 +113,7 @@ files:
|
|
112
113
|
- app/helpers/glib/json_ui/view_builder/charts.rb
|
113
114
|
- app/helpers/glib/json_ui/view_builder/fields.rb
|
114
115
|
- app/helpers/glib/json_ui/view_builder/iap.rb
|
116
|
+
- app/helpers/glib/json_ui/view_builder/multimedia.rb
|
115
117
|
- app/helpers/glib/json_ui/view_builder/panels.rb
|
116
118
|
- app/helpers/glib/urls_helper.rb
|
117
119
|
- app/models/concerns/glib/soft_deletable.rb
|
@@ -125,6 +127,7 @@ files:
|
|
125
127
|
- app/validators/email_validator.rb
|
126
128
|
- app/validators/url_validator.rb
|
127
129
|
- app/views/json_ui/garage/_nav_menu.json.jbuilder
|
130
|
+
- app/views/json_ui/garage/actions/_commands.json.jbuilder
|
128
131
|
- app/views/json_ui/garage/actions/_dialogs.json.jbuilder
|
129
132
|
- app/views/json_ui/garage/actions/_http.json.jbuilder
|
130
133
|
- app/views/json_ui/garage/actions/_panels.json.jbuilder
|
@@ -231,6 +234,7 @@ files:
|
|
231
234
|
- app/views/json_ui/garage/views/maps.json.jbuilder
|
232
235
|
- app/views/json_ui/garage/views/markdowns.json.jbuilder
|
233
236
|
- app/views/json_ui/garage/views/misc.json.jbuilder
|
237
|
+
- app/views/json_ui/garage/views/multimedia.json.jbuilder
|
234
238
|
- app/views/json_ui/garage/views/progress.json.jbuilder
|
235
239
|
- app/views/json_ui/garage/views/texts.json.jbuilder
|
236
240
|
- app/views/layouts/json_ui/renderer.html.erb
|