card-mod-format 0.11.0 → 0.11.5
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/lib/card/path.rb +9 -31
- data/lib/card/path/cast_params.rb +38 -0
- data/set/all/active_card.rb +0 -1
- data/set/all/base.rb +3 -1
- data/set/all/css.rb +0 -1
- data/set/all/csv.rb +2 -1
- data/set/all/demo.rb +36 -0
- data/set/all/error.rb +12 -19
- data/set/all/export.rb +2 -0
- data/set/all/frame.rb +6 -10
- data/set/all/head.rb +5 -1
- data/set/all/html_content.rb +2 -1
- data/set/all/html_error.rb +25 -10
- data/set/all/html_wrapper.rb +13 -8
- data/set/all/js.rb +0 -1
- data/set/all/json.rb +1 -2
- data/set/all/links.rb +5 -4
- data/set/all/menu.rb +1 -1
- data/set/all/path.rb +1 -0
- data/set/all/rich_html.rb +12 -0
- data/set/all/rss.rb +3 -2
- data/set/all/text.rb +0 -1
- data/set/type/cardtype.rb +89 -0
- data/set/type/json.rb +1 -1
- data/set/type/number.rb +4 -2
- data/set/type/toggle.rb +2 -2
- metadata +16 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7282ec52f287bd080b84b1a539733d85c17f859f1eccd038ff4cd67a1c572d55
|
4
|
+
data.tar.gz: 1b36bb6b8d5b10512774e1dee08f3dd60a79bff24495a569ed91013fd3eacaa8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 901b4a5f4458f02650af6ebabb0af3e04deadbc392f3d69a118d29d54d30f3bfd44a0d90e842d45ee72d584a20f015079e7e3d48630e39cbd0e26addd90b057b
|
7
|
+
data.tar.gz: 21c3fb950df2ed3004e9a21048b3a17ea3e66200dca345984e95b9e57672d497afd1ccc1a999af661bc4ca0a2b6200f4ab315a8243f5bfc27f11567298091032
|
data/lib/card/path.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
class Card
|
2
2
|
# Generate standard card paths.
|
3
3
|
class Path
|
4
|
-
|
5
|
-
self.cast_params = { slot: { hide: :array, show: :array, wrap: :array } }.freeze
|
4
|
+
include CastParams
|
6
5
|
|
7
6
|
def initialize card, opts
|
8
7
|
@card = card
|
@@ -60,7 +59,7 @@ class Card
|
|
60
59
|
name = handle_unknown do
|
61
60
|
opts[:mark] ? Card::Name[opts.delete(:mark)] : @card.name
|
62
61
|
end
|
63
|
-
name.
|
62
|
+
name&.url_key.to_s
|
64
63
|
end
|
65
64
|
|
66
65
|
def markless?
|
@@ -81,47 +80,26 @@ class Card
|
|
81
80
|
query_opts.empty? ? "" : "?#{query_opts.to_param}"
|
82
81
|
end
|
83
82
|
|
84
|
-
# normalizes certain path opts to specified data types
|
85
|
-
def cast_path_hash hash, cast_hash=nil
|
86
|
-
return hash unless hash.is_a? Hash
|
87
|
-
cast_each_path_hash hash, (cast_hash || self.class.cast_params)
|
88
|
-
hash
|
89
|
-
end
|
90
|
-
|
91
|
-
def cast_each_path_hash hash, cast_hash
|
92
|
-
hash.each do |key, value|
|
93
|
-
next unless (cast_to = cast_hash[key])
|
94
|
-
hash[key] = cast_path_value value, cast_to
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
def cast_path_value value, cast_to
|
99
|
-
if cast_to.is_a? Hash
|
100
|
-
cast_path_hash value, cast_to
|
101
|
-
else
|
102
|
-
send "cast_path_value_as_#{cast_to}", value
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def cast_path_value_as_array value
|
107
|
-
Array.wrap value
|
108
|
-
end
|
109
|
-
|
110
83
|
def handle_unknown
|
111
84
|
yield.tap do |name|
|
112
|
-
return name if
|
85
|
+
return name if name.nil? || known_name?(name)
|
86
|
+
|
113
87
|
opts[:card] ||= {}
|
114
88
|
opts[:card][:name] = name
|
115
89
|
end
|
116
90
|
end
|
117
91
|
|
92
|
+
def known_name? name
|
93
|
+
name_specified? || name_standardish?(name) || Card.known?(name)
|
94
|
+
end
|
95
|
+
|
118
96
|
def name_specified?
|
119
97
|
opts.dig :card, :name
|
120
98
|
end
|
121
99
|
|
122
100
|
# no name info will be lost by using url_key
|
123
101
|
def name_standardish? name
|
124
|
-
name.
|
102
|
+
name.url_key == name.tr(" ", "_")
|
125
103
|
end
|
126
104
|
end
|
127
105
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Card
|
2
|
+
class Path
|
3
|
+
cattr_accessor :cast_params
|
4
|
+
self.cast_params = { slot: { hide: :array, show: :array, wrap: :array } }.freeze
|
5
|
+
|
6
|
+
# normalizes certain path opts to specified data types
|
7
|
+
module CastParams
|
8
|
+
private
|
9
|
+
|
10
|
+
def cast_path_hash hash, cast_hash=nil
|
11
|
+
return hash unless hash.is_a? Hash
|
12
|
+
|
13
|
+
cast_each_path_hash hash, (cast_hash || self.class.cast_params)
|
14
|
+
hash
|
15
|
+
end
|
16
|
+
|
17
|
+
def cast_each_path_hash hash, cast_hash
|
18
|
+
hash.each do |key, value|
|
19
|
+
next unless (cast_to = cast_hash[key])
|
20
|
+
|
21
|
+
hash[key] = cast_path_value value, cast_to
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def cast_path_value value, cast_to
|
26
|
+
if cast_to.is_a? Hash
|
27
|
+
cast_path_hash value, cast_to
|
28
|
+
else
|
29
|
+
send "cast_path_value_as_#{cast_to}", value
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def cast_path_value_as_array value
|
34
|
+
Array.wrap value
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/set/all/active_card.rb
CHANGED
data/set/all/base.rb
CHANGED
@@ -42,6 +42,7 @@ format do
|
|
42
42
|
|
43
43
|
def specify_type_in_link! opts
|
44
44
|
return if opts[:known] || !voo.type
|
45
|
+
|
45
46
|
opts[:path] = { card: { type: voo.type } }
|
46
47
|
end
|
47
48
|
|
@@ -71,6 +72,7 @@ format do
|
|
71
72
|
|
72
73
|
def structure_card
|
73
74
|
return nil if voo.structure == true
|
75
|
+
|
74
76
|
voo.structure ? Card[voo.structure] : card
|
75
77
|
end
|
76
78
|
|
@@ -104,7 +106,7 @@ format do
|
|
104
106
|
""
|
105
107
|
end
|
106
108
|
|
107
|
-
#
|
109
|
+
# NOTE: content and open_content may look like they should be aliased to
|
108
110
|
# core, but it's important that they render core explicitly so that core view
|
109
111
|
# overrides work. the titled and labeled views below, however, are not
|
110
112
|
# intended for frequent override, so this shortcut is fine.
|
data/set/all/css.rb
CHANGED
data/set/all/csv.rb
CHANGED
@@ -18,7 +18,7 @@ format :csv do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
view :csv_row do
|
21
|
-
array = _render_raw.scan(/\{\{[
|
21
|
+
array = _render_raw.scan(/\{\{[^}]*\}\}/).map do |inc|
|
22
22
|
process_content(inc).strip
|
23
23
|
end
|
24
24
|
|
@@ -69,6 +69,7 @@ format :csv do
|
|
69
69
|
def title_row extra_titles=nil
|
70
70
|
titles = column_titles extra_titles
|
71
71
|
return "" unless titles.present?
|
72
|
+
|
72
73
|
CSV.generate_line titles.map(&:upcase)
|
73
74
|
end
|
74
75
|
|
data/set/all/demo.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
format :html do
|
2
|
+
view :demo do
|
3
|
+
frame do
|
4
|
+
[view_select, wrap_with(:div, view_demo, class: "demo-slot")]
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
view :view_list do
|
9
|
+
%i[bar box info_bar open closed titled labeled content content_panel].map do |v|
|
10
|
+
wrap_with :p, [content_tag(:h3, v), render(v, show: :menu)]
|
11
|
+
end.flatten.join ""
|
12
|
+
end
|
13
|
+
|
14
|
+
def demo_view
|
15
|
+
Env.params[:demo_view] || :core
|
16
|
+
end
|
17
|
+
|
18
|
+
def view_demo
|
19
|
+
wrap(true) do
|
20
|
+
render demo_view
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def view_select
|
25
|
+
card_form :get, success: { view: :demo } do
|
26
|
+
select_tag :demo_view,
|
27
|
+
options_for_select(all_views, demo_view),
|
28
|
+
class: "_submit-on-select"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def all_views
|
33
|
+
Card::Set::Format::AbstractFormat::ViewDefinition
|
34
|
+
.views.slice(*self.class.ancestors).values.map(&:keys).flatten.uniq
|
35
|
+
end
|
36
|
+
end
|
data/set/all/error.rb
CHANGED
@@ -8,21 +8,21 @@ format do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
view :server_error, perms: :none do
|
11
|
-
|
11
|
+
t(:format_server_error)
|
12
12
|
end
|
13
13
|
|
14
14
|
view :denial, perms: :none do
|
15
|
-
focal? ?
|
15
|
+
focal? ? t(:format_denial) : ""
|
16
16
|
end
|
17
17
|
|
18
18
|
view :not_found, perms: :none do
|
19
|
-
error_name = card.name.present? ? safe_name :
|
20
|
-
|
19
|
+
error_name = card.name.present? ? safe_name : t(:format_not_found_no_name)
|
20
|
+
t(:format_not_found_named, cardname: error_name)
|
21
21
|
end
|
22
22
|
|
23
23
|
view :bad_address, perms: :none do
|
24
24
|
root.error_status = 404
|
25
|
-
|
25
|
+
t(:format_bad_address)
|
26
26
|
end
|
27
27
|
|
28
28
|
view :errors do
|
@@ -50,30 +50,23 @@ format do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def unsupported_view_error_message view
|
53
|
-
|
53
|
+
t(:format_unsupported_view, view: view, cardname: card.name)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
57
|
format :json do
|
58
58
|
view :errors do
|
59
|
-
|
59
|
+
{
|
60
|
+
error_status: error_status,
|
61
|
+
errors: card.errors.each_with_object({}) { |e, h| h[e.attribute] = e.message }
|
62
|
+
}
|
60
63
|
end
|
61
64
|
|
62
65
|
view :server_error, :errors
|
63
66
|
view :denial, :errors
|
64
67
|
view :not_found, :errors
|
65
|
-
|
66
68
|
view :bad_address do
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
def format_error error
|
71
|
-
{ error_status: error_status, errors: error }
|
72
|
-
end
|
73
|
-
|
74
|
-
def error_list
|
75
|
-
card.errors.each_with_object([]) do |(field, message), list|
|
76
|
-
list << { field: field, message: message }
|
77
|
-
end
|
69
|
+
card.errors.add :address, super()
|
70
|
+
render_error
|
78
71
|
end
|
79
72
|
end
|
data/set/all/export.rb
CHANGED
@@ -35,6 +35,7 @@ format :json do
|
|
35
35
|
|
36
36
|
def track_exporting card
|
37
37
|
return unless @exported_keys
|
38
|
+
|
38
39
|
@exported_keys << card.key
|
39
40
|
end
|
40
41
|
|
@@ -52,6 +53,7 @@ format :json do
|
|
52
53
|
def items_for_export
|
53
54
|
nest_chunks.map do |chunk|
|
54
55
|
next if chunk.try :main?
|
56
|
+
|
55
57
|
chunk.referee_card
|
56
58
|
end.compact
|
57
59
|
end
|
data/set/all/frame.rb
CHANGED
@@ -10,9 +10,9 @@ format :html do
|
|
10
10
|
standard_frame(&block)
|
11
11
|
end
|
12
12
|
|
13
|
-
def standard_frame slot=true
|
13
|
+
def standard_frame slot=true, &block
|
14
14
|
with_frame slot do
|
15
|
-
wrap_body
|
15
|
+
wrap_body(&block) if block_given?
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -36,18 +36,14 @@ format :html do
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
def frame_and_form action, form_opts={}
|
39
|
+
def frame_and_form action, form_opts={}, &block
|
40
40
|
form_opts ||= {}
|
41
41
|
frame do
|
42
|
-
card_form action, form_opts
|
43
|
-
yield
|
44
|
-
end
|
42
|
+
card_form action, form_opts, &block
|
45
43
|
end
|
46
44
|
end
|
47
45
|
|
48
|
-
def panel
|
49
|
-
wrap_with :div, class: classy("d0-card-frame")
|
50
|
-
yield
|
51
|
-
end
|
46
|
+
def panel &block
|
47
|
+
wrap_with :div, class: classy("d0-card-frame"), &block
|
52
48
|
end
|
53
49
|
end
|
data/set/all/head.rb
CHANGED
@@ -42,6 +42,7 @@ format :html do
|
|
42
42
|
|
43
43
|
view :universal_edit_button, unknown: true, denial: :blank, perms: :update do
|
44
44
|
return if card.new?
|
45
|
+
|
45
46
|
tag "link", rel: "alternate", type: "application/x-wiki",
|
46
47
|
title: "Edit this page!", href: path(view: :edit)
|
47
48
|
end
|
@@ -51,6 +52,7 @@ format :html do
|
|
51
52
|
# (but note that machine clearing would need to reset card cache...)
|
52
53
|
view :head_stylesheet, unknown: true, cache: :never, perms: :none do
|
53
54
|
return unless (href = head_stylesheet_path)
|
55
|
+
|
54
56
|
tag "link", href: href, media: "all", rel: "stylesheet", type: "text/css"
|
55
57
|
end
|
56
58
|
|
@@ -82,7 +84,7 @@ format :html do
|
|
82
84
|
if value.is_a? Hash
|
83
85
|
string = "{"
|
84
86
|
value.each { |k, v| string += "#{k}:#{script_variable_to_js v}" }
|
85
|
-
string
|
87
|
+
"#{string}}"
|
86
88
|
else
|
87
89
|
"'#{value}'"
|
88
90
|
end
|
@@ -98,11 +100,13 @@ format :html do
|
|
98
100
|
|
99
101
|
def debug_or_machine_path setting, &block
|
100
102
|
return unless (asset_card = param_or_rule_card setting)
|
103
|
+
|
101
104
|
debug_path(setting, asset_card, &block) || asset_card.machine_output_url
|
102
105
|
end
|
103
106
|
|
104
107
|
def debug_path setting, asset_card
|
105
108
|
return unless params[:debug] == setting.to_s
|
109
|
+
|
106
110
|
yield asset_card
|
107
111
|
end
|
108
112
|
|
data/set/all/html_content.rb
CHANGED
@@ -17,7 +17,7 @@ format :html do
|
|
17
17
|
prepare_content_slot
|
18
18
|
end
|
19
19
|
|
20
|
-
view :content_with_edit_button do
|
20
|
+
view :content_with_edit_button, unknown: true do
|
21
21
|
wrap do
|
22
22
|
[_render_menu, _render_core, _render_edit_button(edit: :inline)]
|
23
23
|
end
|
@@ -136,6 +136,7 @@ format :html do
|
|
136
136
|
|
137
137
|
def short_content_items
|
138
138
|
return unless card.respond_to? :count
|
139
|
+
|
139
140
|
"#{count} #{'item'.pluralize count}"
|
140
141
|
end
|
141
142
|
|
data/set/all/html_error.rb
CHANGED
@@ -52,7 +52,12 @@ format :html do
|
|
52
52
|
view :errors, perms: :none do
|
53
53
|
return if card.errors.empty?
|
54
54
|
|
55
|
-
voo.title = card.name.blank?
|
55
|
+
voo.title = if card.name.blank?
|
56
|
+
"Problems"
|
57
|
+
else
|
58
|
+
t(:format_problems_name,
|
59
|
+
cardname: card.name)
|
60
|
+
end
|
56
61
|
voo.hide! :menu
|
57
62
|
class_up "alert", "card-error-msg"
|
58
63
|
standard_errors voo.title
|
@@ -133,21 +138,21 @@ format :html do
|
|
133
138
|
def sign_in_or_up_links to_task
|
134
139
|
return if Auth.signed_in?
|
135
140
|
|
136
|
-
links = [signin_link, signup_link].compact.join " #{
|
141
|
+
links = [signin_link, signup_link].compact.join " #{t(:format_or)} "
|
137
142
|
wrap_with(:div) do
|
138
|
-
[
|
143
|
+
"#{[t(:format_please), links, to_task].join(' ')}."
|
139
144
|
end
|
140
145
|
end
|
141
146
|
|
142
147
|
def signin_link
|
143
|
-
link_to_card :signin,
|
148
|
+
link_to_card :signin, t(:account_sign_in)&.downcase,
|
144
149
|
class: "signin-link", slotter: true, path: { view: :open }
|
145
150
|
end
|
146
151
|
|
147
152
|
def signup_link
|
148
153
|
return unless signup_ok?
|
149
154
|
|
150
|
-
link_to_card :signup,
|
155
|
+
link_to_card :signup, t(:account_sign_up)&.downcase,
|
151
156
|
class: "signup-link", slotter: true, path: { action: :new }
|
152
157
|
end
|
153
158
|
|
@@ -164,19 +169,24 @@ format :html do
|
|
164
169
|
def loud_denial
|
165
170
|
voo.hide :menu
|
166
171
|
frame do
|
167
|
-
[wrap_with(:h1,
|
172
|
+
[wrap_with(:h1, t(:format_sorry)),
|
168
173
|
wrap_with(:div, loud_denial_message)]
|
169
174
|
end
|
170
175
|
end
|
171
176
|
|
172
177
|
def loud_denial_message
|
173
|
-
to_task =
|
178
|
+
to_task = if @denied_task
|
179
|
+
t(:format_denied_task,
|
180
|
+
denied_task: @denied_task)
|
181
|
+
else
|
182
|
+
t(:format_to_do_that)
|
183
|
+
end
|
174
184
|
|
175
185
|
case
|
176
186
|
when not_denied_task_read?
|
177
|
-
|
187
|
+
t(:format_read_only)
|
178
188
|
when Auth.signed_in?
|
179
|
-
|
189
|
+
t(:format_need_permission_task, task: to_task)
|
180
190
|
else
|
181
191
|
Env.save_interrupted_action request.env["REQUEST_URI"]
|
182
192
|
sign_in_or_up_links to_do_unauthorized_task
|
@@ -188,6 +198,11 @@ format :html do
|
|
188
198
|
end
|
189
199
|
|
190
200
|
def to_do_unauthorized_task
|
191
|
-
|
201
|
+
if @denied_task
|
202
|
+
t(:format_denied_task,
|
203
|
+
denied_task: @denied_task)
|
204
|
+
else
|
205
|
+
t(:format_to_do_that)
|
206
|
+
end
|
192
207
|
end
|
193
208
|
end
|
data/set/all/html_wrapper.rb
CHANGED
@@ -37,7 +37,12 @@ format :html do
|
|
37
37
|
|
38
38
|
def wrap_data slot=true
|
39
39
|
with_slot_data slot do
|
40
|
-
{
|
40
|
+
{
|
41
|
+
"card-id": card.id,
|
42
|
+
"card-name": slot_cardname,
|
43
|
+
"card-link-name": card.name.url_key,
|
44
|
+
"slot-id": SecureRandom.hex(10)
|
45
|
+
}
|
41
46
|
end
|
42
47
|
end
|
43
48
|
|
@@ -71,8 +76,8 @@ format :html do
|
|
71
76
|
opts[:name_context] = initial_context_names.map(&:key) * ","
|
72
77
|
end
|
73
78
|
|
74
|
-
def debug_slot
|
75
|
-
debug_slot? ? debug_slot_wrap
|
79
|
+
def debug_slot &block
|
80
|
+
debug_slot? ? debug_slot_wrap(&block) : yield
|
76
81
|
end
|
77
82
|
|
78
83
|
def debug_slot?
|
@@ -92,13 +97,13 @@ format :html do
|
|
92
97
|
classy list
|
93
98
|
end
|
94
99
|
|
95
|
-
def wrap_body
|
96
|
-
wrap_with(:div, class: body_css_classes)
|
100
|
+
def wrap_body &block
|
101
|
+
wrap_with(:div, class: body_css_classes, &block)
|
97
102
|
end
|
98
103
|
|
99
|
-
def haml_wrap_body
|
104
|
+
def haml_wrap_body &block
|
100
105
|
wrap_body do
|
101
|
-
capture_haml
|
106
|
+
capture_haml(&block)
|
102
107
|
end
|
103
108
|
end
|
104
109
|
|
@@ -145,7 +150,7 @@ format :html do
|
|
145
150
|
def html_escape_except_quotes string
|
146
151
|
# to be used inside single quotes (makes for readable json attributes)
|
147
152
|
string.to_s.gsub(/&/, "&")
|
148
|
-
.gsub(
|
153
|
+
.gsub(/'/, "'")
|
149
154
|
.gsub(/>/, ">")
|
150
155
|
.gsub(/</, "<")
|
151
156
|
end
|
data/set/all/js.rb
CHANGED
data/set/all/json.rb
CHANGED
@@ -48,7 +48,6 @@ format :json do
|
|
48
48
|
{ key: card.key,
|
49
49
|
url_key: card.name.url_key,
|
50
50
|
status: card.state }.tap do |h|
|
51
|
-
|
52
51
|
h[:id] = card.id if h[:status] == :real
|
53
52
|
end
|
54
53
|
end
|
@@ -129,6 +128,7 @@ format :json do
|
|
129
128
|
|
130
129
|
def essentials
|
131
130
|
return {} if card.structure
|
131
|
+
|
132
132
|
{ content: card.db_content }
|
133
133
|
end
|
134
134
|
|
@@ -140,7 +140,6 @@ format :json do
|
|
140
140
|
name: card.name,
|
141
141
|
type: card.type_name,
|
142
142
|
url: path(format: :json) }.tap do |h|
|
143
|
-
|
144
143
|
h[:codename] = card.codename if card.codename
|
145
144
|
end
|
146
145
|
end
|
data/set/all/links.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
RESOURCE_TYPE_REGEXP = /^([a-zA-Z][
|
1
|
+
RESOURCE_TYPE_REGEXP = /^([a-zA-Z][\-+.a-zA-Z\d]*):/
|
2
2
|
|
3
3
|
# The #link_to methods support smart formatting of links in multiple formats.
|
4
4
|
format do
|
@@ -63,10 +63,10 @@ format do
|
|
63
63
|
|
64
64
|
def resource_type resource
|
65
65
|
case resource
|
66
|
-
when /^https
|
66
|
+
when /^https?:/ then "external-link"
|
67
67
|
when %r{^/} then "internal-link"
|
68
|
-
when /^mailto
|
69
|
-
when RESOURCE_TYPE_REGEXP then Regexp.last_match(1)
|
68
|
+
when /^mailto:/ then "email-link"
|
69
|
+
when RESOURCE_TYPE_REGEXP then "#{Regexp.last_match(1)}-link"
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -138,6 +138,7 @@ format :html do
|
|
138
138
|
def interpret_data_opts_to_link_to opts
|
139
139
|
%i[remote method].each do |key|
|
140
140
|
next unless (val = opts.delete key)
|
141
|
+
|
141
142
|
opts["data-#{key}"] = val
|
142
143
|
end
|
143
144
|
end
|
data/set/all/menu.rb
CHANGED
data/set/all/path.rb
CHANGED
data/set/all/rich_html.rb
CHANGED
@@ -1,4 +1,16 @@
|
|
1
1
|
format :html do
|
2
2
|
delegate :class_up, :class_down, :with_class_up, :without_upped_class, :classy,
|
3
3
|
to: :voo
|
4
|
+
|
5
|
+
view :type, unknown: true do
|
6
|
+
link_to_card card.type_card, nil, class: "cardtype"
|
7
|
+
end
|
8
|
+
|
9
|
+
view :type_info do
|
10
|
+
return unless card.type_code != :basic
|
11
|
+
|
12
|
+
wrap_with :span, class: "type-info float-right" do
|
13
|
+
link_to_card card.type_name, nil, class: "navbar-link"
|
14
|
+
end
|
15
|
+
end
|
4
16
|
end
|
data/set/all/rss.rb
CHANGED
@@ -14,6 +14,7 @@ format :rss do
|
|
14
14
|
# FIXME: integrate this with common XML features when it is added
|
15
15
|
view :feed, cache: :never do
|
16
16
|
return "RSS feeds disabled" unless Cardio.config.rss_enabled
|
17
|
+
|
17
18
|
begin
|
18
19
|
@xml.instruct! :xml, version: "1.0", standalone: "yes"
|
19
20
|
@xml.rss version: "2.0",
|
@@ -25,7 +26,7 @@ format :rss do
|
|
25
26
|
render_feed_body
|
26
27
|
end
|
27
28
|
end
|
28
|
-
rescue => e
|
29
|
+
rescue StandardError => e
|
29
30
|
@xml.error "\n\nERROR rendering RSS: #{e.inspect}\n\n #{e.backtrace}"
|
30
31
|
end
|
31
32
|
end
|
@@ -43,7 +44,7 @@ format :rss do
|
|
43
44
|
end
|
44
45
|
|
45
46
|
view :feed_title do
|
46
|
-
Card::Rule.global_setting(:title)
|
47
|
+
"#{Card::Rule.global_setting(:title)} : #{card.name.gsub(/^\*/, '')}"
|
47
48
|
end
|
48
49
|
|
49
50
|
view :feed_item do
|
data/set/all/text.rb
CHANGED
@@ -0,0 +1,89 @@
|
|
1
|
+
format :html do
|
2
|
+
view :type, unknown: true do
|
3
|
+
link_to_card card.type_card, nil, class: "cardtype"
|
4
|
+
end
|
5
|
+
|
6
|
+
def type_formgroup args={}
|
7
|
+
if card.cards_of_type_exist?
|
8
|
+
wrap_with :div, t(:format_cards_exist, scope: "core", cardname: safe_name)
|
9
|
+
else
|
10
|
+
super
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
view :add_link do
|
15
|
+
add_link
|
16
|
+
end
|
17
|
+
|
18
|
+
view :add_button do
|
19
|
+
add_link class: "btn btn-secondary"
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_link opts={}
|
23
|
+
voo.title ||= t(:format_add_card, cardname: safe_name)
|
24
|
+
link_to render_title, add_link_opts(opts)
|
25
|
+
end
|
26
|
+
|
27
|
+
def add_link_opts opts
|
28
|
+
modal = opts.delete :modal
|
29
|
+
if modal.nil? || modal
|
30
|
+
modal_link_opts opts.merge(path: add_path(:new_in_modal))
|
31
|
+
else
|
32
|
+
opts.merge path: add_path(:new)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
view :add_url do
|
37
|
+
card_url _render_add_path
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_path view
|
41
|
+
path_args = { mark: card.name }
|
42
|
+
process_voo_params(path_args) if voo.params
|
43
|
+
if view == :new
|
44
|
+
path_args[:action] = :new
|
45
|
+
else
|
46
|
+
path_args[:action] = :type
|
47
|
+
path_args[:view] = view
|
48
|
+
end
|
49
|
+
path path_args
|
50
|
+
end
|
51
|
+
|
52
|
+
# don't cache because it depends on update permission for another card
|
53
|
+
view :configure_link, cache: :never, perms: ->(fmt) { fmt.can_configure? } do
|
54
|
+
configure_link
|
55
|
+
end
|
56
|
+
|
57
|
+
def can_configure?
|
58
|
+
Card.fetch(card, :type, :structure, new: {}).ok? :update
|
59
|
+
end
|
60
|
+
|
61
|
+
view :configure_button, cache: :never,
|
62
|
+
denial: :blank,
|
63
|
+
perms: ->(fmt) { fmt.can_configure? } do
|
64
|
+
configure_link "btn btn-secondary"
|
65
|
+
end
|
66
|
+
|
67
|
+
def configure_link css_class=nil
|
68
|
+
return "" unless Card.fetch(card, :type, :structure, new: {}).ok? :update
|
69
|
+
|
70
|
+
voo.title ||= t(:format_configure_card, cardname: safe_name.pluralize)
|
71
|
+
title = _render_title
|
72
|
+
link_to_card card, title,
|
73
|
+
path: { view: :bridge,
|
74
|
+
bridge: { tab: :rules_tab },
|
75
|
+
set: Card::Name[safe_name, :type] },
|
76
|
+
class: css_classes("configure-type-link ml-3", css_class)
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def process_voo_params path_args
|
82
|
+
context = (@parent&.card || card).name
|
83
|
+
Rack::Utils.parse_nested_query(voo.params).each do |key, value|
|
84
|
+
value = value.to_name.absolute(context) if value
|
85
|
+
key = key.to_name.absolute(context)
|
86
|
+
path_args[key] = value
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
data/set/type/json.rb
CHANGED
data/set/type/number.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
format :html do
|
3
2
|
def input_type
|
4
3
|
:text_field
|
@@ -6,7 +5,10 @@ format :html do
|
|
6
5
|
end
|
7
6
|
|
8
7
|
event :validate_number, :validate, on: :save do
|
9
|
-
|
8
|
+
unless valid_number?(content)
|
9
|
+
errors.add :content,
|
10
|
+
t(:format_not_numeric, content: content)
|
11
|
+
end
|
10
12
|
end
|
11
13
|
|
12
14
|
def valid_number? string
|
data/set/type/toggle.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: card-mod-format
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan McCutchen
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-05-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: card
|
@@ -18,28 +18,28 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.101.
|
21
|
+
version: 1.101.5
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - '='
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 1.101.
|
28
|
+
version: 1.101.5
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: card-mod-content
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - '='
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: 0.11.
|
35
|
+
version: 0.11.5
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - '='
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 0.11.
|
42
|
+
version: 0.11.5
|
43
43
|
description: ''
|
44
44
|
email:
|
45
45
|
- info@decko.org
|
@@ -58,10 +58,12 @@ files:
|
|
58
58
|
- lib/card/format/text_format.rb
|
59
59
|
- lib/card/format/xml_format.rb
|
60
60
|
- lib/card/path.rb
|
61
|
+
- lib/card/path/cast_params.rb
|
61
62
|
- set/all/active_card.rb
|
62
63
|
- set/all/base.rb
|
63
64
|
- set/all/css.rb
|
64
65
|
- set/all/csv.rb
|
66
|
+
- set/all/demo.rb
|
65
67
|
- set/all/error.rb
|
66
68
|
- set/all/export.rb
|
67
69
|
- set/all/file.rb
|
@@ -89,6 +91,7 @@ files:
|
|
89
91
|
- set/all/rss.rb
|
90
92
|
- set/all/text.rb
|
91
93
|
- set/self/home.rb
|
94
|
+
- set/type/cardtype.rb
|
92
95
|
- set/type/html.rb
|
93
96
|
- set/type/json.rb
|
94
97
|
- set/type/number.rb
|
@@ -96,10 +99,15 @@ files:
|
|
96
99
|
- set/type/plain_text.rb
|
97
100
|
- set/type/toggle.rb
|
98
101
|
- set/type/uri.rb
|
99
|
-
homepage:
|
102
|
+
homepage: https://decko.org
|
100
103
|
licenses:
|
101
104
|
- GPL-3.0
|
102
105
|
metadata:
|
106
|
+
source_code_uri: https://github.com/decko-commons/decko
|
107
|
+
homepage_uri: https://decko.org
|
108
|
+
bug_tracker_uri: https://github.com/decko-commons/decko/issues
|
109
|
+
wiki_uri: https://decko.org
|
110
|
+
documentation_url: http://docs.decko.org/
|
103
111
|
card-mod: format
|
104
112
|
post_install_message:
|
105
113
|
rdoc_options: []
|
@@ -116,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
124
|
- !ruby/object:Gem::Version
|
117
125
|
version: '0'
|
118
126
|
requirements: []
|
119
|
-
rubygems_version: 3.
|
127
|
+
rubygems_version: 3.1.4
|
120
128
|
signing_key:
|
121
129
|
specification_version: 4
|
122
130
|
summary: format
|