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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef6d2c7a456c6e35591c10a980bc93de5b970d87d88bc6af9518acc0f314a6cc
4
- data.tar.gz: d1f9e4f0ce72e65f79d8bf35391e95954317647628cbb342eb7617304fe9966c
3
+ metadata.gz: 7282ec52f287bd080b84b1a539733d85c17f859f1eccd038ff4cd67a1c572d55
4
+ data.tar.gz: 1b36bb6b8d5b10512774e1dee08f3dd60a79bff24495a569ed91013fd3eacaa8
5
5
  SHA512:
6
- metadata.gz: 53c0aef92bdd7fded5ff0a237d6d95aa1460a3612a9ec56a43e232be697ce627fffc69542ccdd3f2554d1f16df01f58459a85f575dc791981a906267b5d72c96
7
- data.tar.gz: 74a7614d7a49a49e46fedc2f2064f523de67f98a88a9f06740dbe8f024edfa9a3dc3658a5e4cc4a7c0c137a8eebc783e3d9e4d6987aba658526d68d2d032992e
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
- cattr_accessor :cast_params
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.url_key
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 name_specified? || name_standardish?(name) || Card.known?(name)
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.s == Card::Name.url_key_to_standard(name.url_key)
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
@@ -1,4 +1,3 @@
1
-
2
1
  # FIXME: -this needs a better home!
3
2
  def format opts={}
4
3
  opts = { format: opts.to_sym } if [Symbol, String].member? opts.class
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
- # note: content and open_content may look like they should be aliased to
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
@@ -1,4 +1,3 @@
1
-
2
1
  format :css do
3
2
  def default_nest_view
4
3
  :raw
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(/\{\{[^\}]*\}\}/).map do |inc|
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
- tr(:server_error)
11
+ t(:format_server_error)
12
12
  end
13
13
 
14
14
  view :denial, perms: :none do
15
- focal? ? tr(:denial) : ""
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 : tr(:not_found_no_name)
20
- tr(:not_found_named, cardname: error_name)
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
- tr(:bad_address)
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
- tr(:unsupported_view, view: view, cardname: card.name)
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
- format_error error_list
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
- format_error super()
68
- end
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 { yield } if block_given?
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 do
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") do
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
 
@@ -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
 
@@ -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? ? "Problems" : tr(:problems_name, cardname: card.name)
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 " #{tr :or} "
141
+ links = [signin_link, signup_link].compact.join " #{t(:format_or)} "
137
142
  wrap_with(:div) do
138
- [tr(:please), links, to_task].join(" ") + "."
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, tr(:sign_in),
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, tr(:sign_up),
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, tr(:sorry)),
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 = @denied_task ? tr(:denied_task, denied_task: @denied_task) : tr(:to_do_that)
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
- tr(:read_only)
187
+ t(:format_read_only)
178
188
  when Auth.signed_in?
179
- tr(:need_permission_task, task: to_task)
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
- @denied_task ? tr(:denied_task, denied_task: @denied_task) : tr(:to_do_that)
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
@@ -37,7 +37,12 @@ format :html do
37
37
 
38
38
  def wrap_data slot=true
39
39
  with_slot_data slot do
40
- { "card-id": card.id, "card-name": slot_cardname, "slot-id": SecureRandom.hex(10) }
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 { yield } : yield
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) { yield }
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 { yield }
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(/&/, "&amp;")
148
- .gsub(/\'/, "&apos;")
153
+ .gsub(/'/, "&apos;")
149
154
  .gsub(/>/, "&gt;")
150
155
  .gsub(/</, "&lt;")
151
156
  end
data/set/all/js.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  format :js do
3
2
  def default_item_view
4
3
  :core
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][\-+\.a-zA-Z\d]*):/
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?\:/ then "external-link"
66
+ when /^https?:/ then "external-link"
67
67
  when %r{^/} then "internal-link"
68
- when /^mailto\:/ then "email-link"
69
- when RESOURCE_TYPE_REGEXP then Regexp.last_match(1) + "-link"
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
@@ -116,7 +116,7 @@ format :html do
116
116
  end
117
117
 
118
118
  def menu_link_classes
119
- "nodblclick" + (show_view?(:hover_link) ? " _show-on-hover" : "")
119
+ "nodblclick#{show_view?(:hover_link) ? ' _show-on-hover' : ''}"
120
120
  end
121
121
 
122
122
  def menu_icon
data/set/all/path.rb CHANGED
@@ -34,6 +34,7 @@ format do
34
34
 
35
35
  def path opts={}
36
36
  return opts unless opts.is_a? Hash
37
+
37
38
  path = Card::Path.new(card, opts)&.render
38
39
  contextualize_path path
39
40
  end
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) + " : " + card.name.gsub(/^\*/, "")
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
@@ -1,4 +1,3 @@
1
-
2
1
  format :text do
3
2
  view :core do
4
3
  HTMLEntities.new.decode strip_tags(super()).to_s
@@ -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
@@ -7,7 +7,7 @@ end
7
7
  def check_json_syntax
8
8
  parse_content
9
9
  rescue JSON::ParserError => e
10
- errors.add tr(:invalid_json), e.message.sub(/^\d+: /, "").to_s
10
+ errors.add t(:format_invalid_json), e.message.sub(/^\d+: /, "").to_s
11
11
  end
12
12
 
13
13
  def parse_content
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
- errors.add :content, tr(:not_numeric, content: content) unless valid_number?(content)
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
@@ -4,8 +4,8 @@ end
4
4
 
5
5
  view :core do
6
6
  case card.content.to_i
7
- when 1 then tr(:yes)
8
- when 0 then tr(:no)
7
+ when 1 then t(:format_toggle_yes)
8
+ when 0 then t(:format_toggle_no)
9
9
  else
10
10
  "?"
11
11
  end
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.0
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: 2020-12-24 00:00:00.000000000 Z
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.0
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.0
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.0
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.0
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: http://decko.org
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.0.3
127
+ rubygems_version: 3.1.4
120
128
  signing_key:
121
129
  specification_version: 4
122
130
  summary: format