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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f6803ad260efc33294f643a2a623e418a260b24b18729142aeb41f6a6d891c9
4
- data.tar.gz: e3c581588cff960a60857cd63aa904dae41a81da4a86596b2bf17275353acca9
3
+ metadata.gz: a570033b2f2290d45f8678518c0f5cdfcbd5edc3ad58f640e0927c44ebd4e52e
4
+ data.tar.gz: 48c8031d6b01a819dbc7f2496a4e95861f45df9f29386bf7b96b19adb8dc1c2c
5
5
  SHA512:
6
- metadata.gz: 1de3a468c5f82b9d4ee70afc5763e1ab9f31e4ff54cbb14ed891ff546b867db084a6c5d091cc4cb70d6f75fc24b0fe052c169beb6edc4e3c3e96beefe3208574
7
- data.tar.gz: c7cd87a3e9399c9b03730eee4a16f679af1d55eada9b0a4468129a122306a5ef54d42e4c3a9ef39617a320d38cadc00e08ca60255443abaeae6b7944034172ce
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)
@@ -0,0 +1,7 @@
1
+ class Glib::JsonUi::ActionBuilder
2
+ module Commands
3
+ class Copy < Action
4
+ string :text
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class Glib::JsonUi::ViewBuilder
2
+ module Multimedia
3
+ class Video < View
4
+ url :url
5
+ end
6
+ end
7
+ end
@@ -34,7 +34,7 @@ module Glib
34
34
  hash :valueIf
35
35
  hash :analytics
36
36
  hash :tooltip
37
- hash :dataset
37
+ hash :tour
38
38
 
39
39
  # def initialize(json, page)
40
40
  # super(json, page)
@@ -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::regexp([scheme]))
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
- record.errors.add(attribute, :invalid)
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/*', maxFileSize: 5000 }
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/*', maxFileSize: 1, fileTypeErrorText: 'Invalid!', maxFileSizeErrorText: 'Too big!' }
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,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' }
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
- 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
- end
16
- form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
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.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