glib-web 0.5.71 → 0.5.76
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/concerns/glib/analytics/funnel.rb +0 -0
- data/app/controllers/concerns/glib/auth/policy.rb +0 -0
- data/app/controllers/concerns/glib/json/new_dynamic_text.rb +0 -0
- data/app/helpers/glib/app_feature_support_helper.rb +0 -0
- data/app/helpers/glib/dynamic_images_helper.rb +0 -0
- data/app/helpers/glib/dynamic_texts_helper.rb +0 -0
- data/app/helpers/glib/enum_helper.rb +10 -0
- data/app/helpers/glib/forms_helper.rb +0 -0
- data/app/helpers/glib/json_ui/abstract_builder.rb +1 -1
- data/app/helpers/glib/json_ui/action_builder/dialogs.rb +0 -0
- data/app/helpers/glib/json_ui/action_builder/http.rb +0 -0
- data/app/helpers/glib/json_ui/action_builder/panels.rb +0 -0
- data/app/helpers/glib/json_ui/action_builder/sheets.rb +0 -0
- data/app/helpers/glib/json_ui/action_builder/snackbars.rb +0 -0
- data/app/helpers/glib/json_ui/action_builder/windows.rb +0 -0
- data/app/helpers/glib/json_ui/analytics_helper.rb +0 -0
- data/app/helpers/glib/json_ui/generic_builders.rb +0 -0
- data/app/helpers/glib/json_ui/menu_builder.rb +0 -0
- data/app/helpers/glib/json_ui/split_builders.rb +0 -0
- data/app/helpers/glib/json_ui/styling_helper.rb +0 -0
- data/app/helpers/glib/json_ui/table_builders.rb +0 -0
- data/app/helpers/glib/json_ui/view_builder/fields.rb +11 -12
- data/app/helpers/glib/urls_helper.rb +0 -0
- data/app/models/concerns/glib/soft_deletable.rb +68 -0
- data/app/models/glib/active_storage/attachment.rb +0 -0
- data/app/models/glib/active_storage/blob.rb +0 -0
- data/app/models/glib/application_record.rb +0 -0
- data/app/models/glib/dynamic_text_record.rb +0 -0
- data/app/models/glib/text.rb +0 -0
- data/app/policies/glib/application_policy.rb +0 -0
- data/app/validators/email_typo_validator.rb +0 -0
- data/app/validators/email_validator.rb +0 -0
- data/app/validators/url_validator.rb +0 -0
- data/app/views/json_ui/garage/_nav_menu.json.jbuilder +0 -0
- data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +0 -0
- data/app/views/json_ui/garage/actions/_http.json.jbuilder +0 -0
- data/app/views/json_ui/garage/actions/_panels.json.jbuilder +0 -0
- data/app/views/json_ui/garage/actions/_reload.json.jbuilder +0 -0
- data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +0 -0
- data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +0 -0
- data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +0 -0
- data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/basic.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +2 -0
- data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +0 -5
- data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/get_request.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/selects.json.jbuilder +7 -0
- data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +0 -0
- data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +0 -0
- data/app/views/json_ui/garage/home/blank.json.jbuilder +0 -0
- data/app/views/json_ui/garage/home/slow.json.jbuilder +0 -0
- data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +0 -0
- data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +0 -0
- data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +0 -0
- data/app/views/json_ui/garage/lists/fab.json.jbuilder +0 -0
- data/app/views/json_ui/garage/lists/templating.json.jbuilder +0 -0
- data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +0 -0
- data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +0 -0
- data/app/views/json_ui/garage/pages/full_width.json.jbuilder +0 -0
- data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +0 -0
- data/app/views/json_ui/garage/pages/index.json.jbuilder +0 -0
- data/app/views/json_ui/garage/pages/layout.json.jbuilder +0 -0
- data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +0 -0
- data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +0 -0
- data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +0 -0
- data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +0 -0
- data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/_styled.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/card.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/carousel.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/custom.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/flow.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/index.json.jbuilder +4 -0
- data/app/views/json_ui/garage/panels/outlined.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/responsive.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/split.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -0
- data/app/views/json_ui/garage/panels/vertical.json.jbuilder +0 -0
- data/app/views/json_ui/garage/panels/web.json.jbuilder +0 -0
- data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +0 -0
- data/app/views/json_ui/garage/services/image.json.jbuilder +0 -0
- data/app/views/json_ui/garage/services/index.json.jbuilder +0 -0
- data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +0 -0
- data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +0 -0
- data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +0 -0
- data/app/views/json_ui/garage/tables/export_import.json.jbuilder +0 -0
- data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +0 -0
- data/app/views/json_ui/garage/tables/index.json.jbuilder +0 -0
- data/app/views/json_ui/garage/tables/layout.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/banners.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/charts.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/controls.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/icon_names.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/icons.json.jbuilder +1 -0
- data/app/views/json_ui/garage/views/images.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/index.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/links.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/map_data.json.jbuilder +0 -0
- data/app/views/json_ui/garage/views/misc.json.jbuilder +8 -8
- data/app/views/json_ui/garage/views/texts.json.jbuilder +0 -0
- data/config/routes.rb +0 -0
- data/lib/generators/glib/install_generator.rb +0 -0
- data/lib/generators/templates/20191017062519_create_texts.rb +0 -0
- data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +0 -0
- data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +0 -0
- data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +0 -0
- data/lib/generators/templates/database.yml +0 -0
- data/lib/generators/templates/dynamic_text.rb +0 -0
- data/lib/glib/crypt/utils.rb +0 -0
- data/lib/glib/crypt.rb +0 -0
- data/lib/glib/dynamic_text/config.rb +0 -0
- data/lib/glib/dynamic_text.rb +0 -0
- data/lib/glib/engine.rb +0 -0
- data/lib/glib/json_crawler/action_crawler.rb +0 -0
- data/lib/glib/json_crawler/action_crawlers/action_http.rb +0 -0
- data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +0 -0
- data/lib/glib/json_crawler/action_crawlers/menu.rb +0 -0
- data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +0 -0
- data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +0 -0
- data/lib/glib/json_crawler/action_crawlers/windows_open.rb +0 -0
- data/lib/glib/json_crawler/coverage.rb +0 -0
- data/lib/glib/json_crawler/http.rb +0 -0
- data/lib/glib/json_crawler/router.rb +5 -13
- data/lib/glib/json_crawler.rb +0 -0
- data/lib/glib/mailer_tester.rb +0 -0
- data/lib/glib/value.rb +0 -0
- data/lib/glib/version.rb +0 -0
- data/lib/glib-web.rb +0 -0
- data/lib/tasks/db.rake +0 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e195cf56a4e446bc732f67732bd213af40b14bb6fb5d04eee102d28a2e552de4
|
4
|
+
data.tar.gz: fce259c689b6eb4e886f132f396dd2f4b0c93bbf9d5665442dd6950bbcf90a2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9f97af017b745de55389d63b6d8bdfef4ab479c1eca98287e00464ef8fad0a617c7ad4121a6da0905f13579ff81662dc056dd53df926010eb0c67b866cfdd5c
|
7
|
+
data.tar.gz: 0042d88e51f14d8e52f859f27592aa81b3c594e4463845a067c84541495ff46055df363f0713b97222f01d37f91fbcae478ecddc7aaeeec704c09dd59571c724
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -4,5 +4,15 @@ module Glib
|
|
4
4
|
keys ||= clazz.send("#{enum_field}s").keys
|
5
5
|
keys.map { |i| { text: clazz.glib_enum_humanize(enum_field, i), value: i } }
|
6
6
|
end
|
7
|
+
|
8
|
+
# See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones and description
|
9
|
+
def glib_time_zone_options
|
10
|
+
ActiveSupport::TimeZone.all.sort { |a, b|
|
11
|
+
a.utc_offset <=> b.utc_offset
|
12
|
+
}.collect { |tz|
|
13
|
+
utc_offset = "#{tz.utc_offset >= 0 ? '+' : ''}#{tz.utc_offset / 60 / 60}h"
|
14
|
+
{ value: tz.tzinfo.identifier, text: "#{utc_offset} #{tz.name}" }
|
15
|
+
}
|
16
|
+
end
|
7
17
|
end
|
8
18
|
end
|
File without changes
|
@@ -117,7 +117,7 @@ module Glib
|
|
117
117
|
define_method(propName) do |value|
|
118
118
|
if (value = value&.to_s)
|
119
119
|
if !Rails.env.production?
|
120
|
-
if !value.match /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i
|
120
|
+
if !value.match /^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i
|
121
121
|
raise "Invalid color: #{value}"
|
122
122
|
end
|
123
123
|
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -152,6 +152,17 @@ class Glib::JsonUi::ViewBuilder
|
|
152
152
|
hash :append
|
153
153
|
end
|
154
154
|
|
155
|
+
class TimeZone < AbstractField
|
156
|
+
include Glib::EnumHelper
|
157
|
+
|
158
|
+
# Override
|
159
|
+
def created
|
160
|
+
super
|
161
|
+
|
162
|
+
json.options glib_time_zone_options
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
155
166
|
# TODO: Remove (deprecated)
|
156
167
|
class Autocomplete < AbstractField
|
157
168
|
array :options
|
@@ -214,18 +225,6 @@ class Glib::JsonUi::ViewBuilder
|
|
214
225
|
hash :placeholderView
|
215
226
|
end
|
216
227
|
|
217
|
-
class MultiImage < Text
|
218
|
-
# file_rules = { fileType: 'image/*', maxFileSize: 5000 }
|
219
|
-
# file_rules = { fileType: 'video/*', maxFileSize: 50000 }
|
220
|
-
# file_rules = { fileType: 'application/pdf', maxFileSize: 5000 }
|
221
|
-
# hash :accepts
|
222
|
-
|
223
|
-
string :directUploadUrl
|
224
|
-
# string :fileUrl
|
225
|
-
# string :fileTitle
|
226
|
-
hash :placeholderView
|
227
|
-
end
|
228
|
-
|
229
228
|
class Date < AbstractField
|
230
229
|
date :min
|
231
230
|
date :max
|
File without changes
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Glib
|
2
|
+
module SoftDeletable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
default_scope { where(deleted_at: nil) }
|
7
|
+
scope :with_deleted, -> { unscope(where: :deleted_at) }
|
8
|
+
|
9
|
+
# "Soft delete" - set deleted_at if it is nil, actually destroy the record
|
10
|
+
# if forced.
|
11
|
+
#
|
12
|
+
# @param force [Boolean]
|
13
|
+
def destroy(force = nil)
|
14
|
+
return force_destroy_record if force == :force
|
15
|
+
return self if deleted?
|
16
|
+
|
17
|
+
soft_destroy_record
|
18
|
+
end
|
19
|
+
|
20
|
+
# Revive a soft-deleted record and associated records if soft-deleted,
|
21
|
+
# otherwise return self
|
22
|
+
def revive
|
23
|
+
return self unless deleted?
|
24
|
+
|
25
|
+
ActiveRecord::Base.transaction do
|
26
|
+
update(deleted_at: nil)
|
27
|
+
revive_associated_records
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Whether or not a record is deleted
|
32
|
+
def deleted?
|
33
|
+
deleted_at.present?
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def force_destroy_record
|
38
|
+
ActiveRecord::Base.transaction do
|
39
|
+
destroy_associated_records(:force)
|
40
|
+
method(:destroy).super_method.call
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def soft_destroy_record
|
45
|
+
ActiveRecord::Base.transaction do
|
46
|
+
destroy_associated_records
|
47
|
+
update(deleted_at: Time.zone.now)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def destroy_associated_records(force = nil)
|
52
|
+
associated_records.each { |r| r.destroy(force) }
|
53
|
+
end
|
54
|
+
|
55
|
+
def revive_associated_records
|
56
|
+
associated_records.each(&:revive)
|
57
|
+
end
|
58
|
+
|
59
|
+
# This should return an array of all associated records of an object that
|
60
|
+
# should be soft deleted with it (i.e. those that have dependent: :destroy
|
61
|
+
# set). In principle we could figure this out automatically but in the
|
62
|
+
# interest of simplicity we'll just define it manually for each class.
|
63
|
+
def associated_records
|
64
|
+
[]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/app/models/glib/text.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -6,6 +6,8 @@ render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
6
6
|
page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
|
7
7
|
form.h2 text: 'Dynamic Select'
|
8
8
|
form.spacer height: 6
|
9
|
+
form.label text: 'Dynamically loads options from the server. Useful for a huge list (e.g. 1000+ items)'
|
10
|
+
form.spacer height: 14
|
9
11
|
|
10
12
|
form.fields_dynamicSelect name: 'user[primary_language]', width: 'matchParent', label: 'Primary Language',
|
11
13
|
selectedOptions: [ { value: 'id3', text: 'Item 3' } ],
|
File without changes
|
@@ -28,10 +28,5 @@ 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
|
-
# TODO
|
32
|
-
# rules = { fileType: 'image/*', maxFileSize: 1, fileTypeErrorText: 'Invalid!', maxFileSizeErrorText: 'Too big!' }
|
33
|
-
# form.fields_multiImage name: 'user[photos][]', width: 'matchParent', label: 'Avatar', accepts: rules, directUploadUrl: rails_direct_uploads_url,
|
34
|
-
# placeholderView: { type: 'avatar', width: 100, height: 100, url: 'data:image/jpeg;base64,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' }
|
35
|
-
|
36
31
|
form.fields_submit text: 'Submit'
|
37
32
|
end)
|
File without changes
|
File without changes
|
File without changes
|
@@ -71,6 +71,13 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
|
|
71
71
|
form.fields_select name: 'user[nil_default]', width: 'matchParent', label: 'Nil Default', options: languages.map { |k, v| { value: k, text: v } }
|
72
72
|
form.fields_select name: 'user[mixed_default][]', width: 'matchParent', label: 'Mixed Default', options: languages.map { |k, v| { value: k, text: v } }, value: ['', 'specified', nil], multiple: true
|
73
73
|
|
74
|
+
form.spacer height: 20
|
75
|
+
form.h2 text: 'Timezone selection'
|
76
|
+
form.spacer height: 6
|
77
|
+
form.label text: 'The select field defaults to the device\'s time zone.'
|
78
|
+
form.spacer height: 6
|
79
|
+
form.fields_timeZone name: 'user[time_zone]', width: 'matchParent', label: 'Time Zone'
|
80
|
+
|
74
81
|
# TODO: Remove
|
75
82
|
form.spacer height: 20
|
76
83
|
form.h2 text: 'Autocomplete (select with manual entry) -- DEPRECATED: Confusing UX, promote bad backend design'
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -27,6 +27,10 @@ json_ui_page json do |page|
|
|
27
27
|
template.thumbnail title: 'Responsive', subtitle: 'Arrange *column panels* horizontally using flex', onClick: ->(action) do
|
28
28
|
action.windows_open url: json_ui_garage_url(path: 'panels/responsive')
|
29
29
|
end
|
30
|
+
template.thumbnail title: 'Unordered List', subtitle: 'Bullet points similar to HTML\'s <ul> tag', onClick: ->(action) do
|
31
|
+
action.windows_open url: json_ui_garage_url(path: 'panels/ul')
|
32
|
+
end
|
33
|
+
|
30
34
|
|
31
35
|
end
|
32
36
|
end, ->(section) do
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,33 @@
|
|
1
|
+
json.title 'Unordered List'
|
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: 'Standard Usage'
|
8
|
+
scroll.spacer height: 6
|
9
|
+
scroll.panels_ul childViews: ->(ul) do
|
10
|
+
ul.button text: 'Button', styleClass: 'link', onClick: ->(action) do
|
11
|
+
action.windows_open url: json_ui_garage_url(path: 'home/blank')
|
12
|
+
end
|
13
|
+
ul.label text: 'Label'
|
14
|
+
end
|
15
|
+
|
16
|
+
scroll.spacer height: 14
|
17
|
+
scroll.h2 text: 'Breadcrumbs'
|
18
|
+
scroll.spacer height: 6
|
19
|
+
scroll.panels_ul \
|
20
|
+
width: 'matchParent',
|
21
|
+
backgroundColor: '#eeeeee',
|
22
|
+
padding: { top: 10, right: 20, bottom: 10, left: 20 },
|
23
|
+
styleClass: 'breadcrumbs',
|
24
|
+
childViews: ->(ul) do
|
25
|
+
ul.button text: 'Level 1', styleClass: 'link', onClick: ->(action) do
|
26
|
+
action.windows_open url: json_ui_garage_url(path: 'home/blank')
|
27
|
+
end
|
28
|
+
ul.button text: 'Level 2', styleClass: 'link', onClick: ->(action) do
|
29
|
+
action.windows_open url: json_ui_garage_url(path: 'home/blank')
|
30
|
+
end
|
31
|
+
ul.label text: 'Level 3'
|
32
|
+
end
|
33
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -5,14 +5,14 @@ json_ui_page json do |page|
|
|
5
5
|
|
6
6
|
page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
7
7
|
|
8
|
-
scroll.h2 text: 'Unordered List'
|
9
|
-
scroll.spacer height: 6
|
10
|
-
scroll.panels_ul childViews: ->(ul) do
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
8
|
+
# scroll.h2 text: 'Unordered List'
|
9
|
+
# scroll.spacer height: 6
|
10
|
+
# scroll.panels_ul childViews: ->(ul) do
|
11
|
+
# ul.button text: 'Button', styleClass: 'link', onClick: ->(action) do
|
12
|
+
# action.windows_open url: json_ui_garage_url(path: 'home/blank')
|
13
|
+
# end
|
14
|
+
# ul.label text: 'Label'
|
15
|
+
# end
|
16
16
|
|
17
17
|
scroll.spacer height: 20
|
18
18
|
scroll.h2 text: 'Time'
|
File without changes
|
data/config/routes.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/glib/crypt/utils.rb
CHANGED
File without changes
|
data/lib/glib/crypt.rb
CHANGED
File without changes
|
File without changes
|
data/lib/glib/dynamic_text.rb
CHANGED
File without changes
|
data/lib/glib/engine.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,19 +1,19 @@
|
|
1
1
|
module Glib
|
2
2
|
module JsonCrawler
|
3
3
|
class Router
|
4
|
-
attr_reader :read_only_actions
|
4
|
+
attr_reader :read_only_actions, :logger
|
5
5
|
|
6
6
|
def log(action, url, response = nil)
|
7
|
-
@logger
|
7
|
+
@logger +=' ' * @depth + [
|
8
8
|
action,
|
9
9
|
response.present? ? response.code : nil,
|
10
10
|
url
|
11
|
-
].compact.join(' :: ')
|
11
|
+
].compact.join(' :: ') + "\n"
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize
|
14
|
+
def initialize
|
15
15
|
@depth = -1
|
16
|
-
@logger =
|
16
|
+
@logger = ''
|
17
17
|
@visitor = Glib::Json::Traversal::Visitor.new
|
18
18
|
@read_only_actions = Set.new
|
19
19
|
end
|
@@ -82,14 +82,6 @@ module Glib
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
def tear_down
|
86
|
-
# NOTE: Experimental, to address issue where sometimes changes don't get saved.
|
87
|
-
# FINDING: Doesn't work
|
88
|
-
# @logger.flush
|
89
|
-
|
90
|
-
@logger.close
|
91
|
-
end
|
92
|
-
|
93
85
|
def crawl_multiple(views, block)
|
94
86
|
@visitor.traverse_multiple views, block
|
95
87
|
end
|
data/lib/glib/json_crawler.rb
CHANGED
File without changes
|
data/lib/glib/mailer_tester.rb
CHANGED
File without changes
|
data/lib/glib/value.rb
CHANGED
File without changes
|
data/lib/glib/version.rb
CHANGED
File without changes
|
data/lib/glib-web.rb
CHANGED
File without changes
|
data/lib/tasks/db.rake
CHANGED
File without changes
|
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.5.
|
4
|
+
version: 0.5.76
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ''
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- app/helpers/glib/json_ui/view_builder/fields.rb
|
114
114
|
- app/helpers/glib/json_ui/view_builder/panels.rb
|
115
115
|
- app/helpers/glib/urls_helper.rb
|
116
|
+
- app/models/concerns/glib/soft_deletable.rb
|
116
117
|
- app/models/glib/active_storage/attachment.rb
|
117
118
|
- app/models/glib/active_storage/blob.rb
|
118
119
|
- app/models/glib/application_record.rb
|
@@ -197,6 +198,7 @@ files:
|
|
197
198
|
- app/views/json_ui/garage/panels/outlined.json.jbuilder
|
198
199
|
- app/views/json_ui/garage/panels/responsive.json.jbuilder
|
199
200
|
- app/views/json_ui/garage/panels/split.json.jbuilder
|
201
|
+
- app/views/json_ui/garage/panels/ul.json.jbuilder
|
200
202
|
- app/views/json_ui/garage/panels/vertical.json.jbuilder
|
201
203
|
- app/views/json_ui/garage/panels/web.json.jbuilder
|
202
204
|
- app/views/json_ui/garage/services/dynamic_text.json.jbuilder
|
@@ -274,8 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
274
276
|
- !ruby/object:Gem::Version
|
275
277
|
version: '0'
|
276
278
|
requirements: []
|
277
|
-
|
278
|
-
rubygems_version: 2.7.6
|
279
|
+
rubygems_version: 3.1.4
|
279
280
|
signing_key:
|
280
281
|
specification_version: 4
|
281
282
|
summary: ''
|