card-mod-format 0.11.0 → 0.11.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|