card 1.20.0 → 1.20.1
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/VERSION +1 -1
- data/card.gemspec +1 -1
- data/lib/card.rb +7 -3
- data/lib/card/act_manager/stage_director.rb +22 -10
- data/lib/card/cache/persistent.rb +15 -9
- data/lib/card/format/nest.rb +12 -5
- data/lib/card/format/nest/fetch.rb +2 -1
- data/lib/card/format/render.rb +5 -2
- data/lib/card/set/event.rb +7 -1
- data/lib/card/subcards.rb +3 -3
- data/lib/card/view/cache.rb +1 -1
- data/lib/card/view/fetch.rb +17 -5
- data/lib/card/view/options.rb +52 -26
- data/lib/cardio.rb +2 -1
- data/mod/account/spec/set/right/account_spec.rb +17 -3
- data/mod/admin/set/self/admin.rb +0 -2
- data/mod/admin/spec/set/self/admin_spec.rb +14 -11
- data/mod/bootstrap/set/all/bootstrap/helper.rb +27 -29
- data/mod/carrierwave/set/type/file.rb +1 -1
- data/mod/carrierwave/set/type/image.rb +18 -6
- data/mod/core/set/all/collection.rb +33 -7
- data/mod/core/set/all/fetch.rb +16 -3
- data/mod/core/set/all/permissions.rb +6 -12
- data/mod/core/set/all/trash.rb +3 -1
- data/mod/core/spec/set/all/collection_spec.rb +9 -8
- data/mod/email/set/all/notify.rb +27 -17
- data/mod/email/set/right/follow.rb +49 -36
- data/mod/email/set/type/email_template.rb +25 -69
- data/mod/email/set/type/email_template/email_config.rb +63 -0
- data/mod/email/set/type_plus_right/user/follow.rb +3 -3
- data/mod/machines/lib/stylesheets/style_cards.scss +292 -0
- data/mod/pointer/set/abstract/01_pointer.rb +8 -8
- data/mod/pointer/set/abstract/01_pointer/edit.rb +6 -2
- data/mod/prosemirror_editor/lib/javascript/script_prosemirror.js +12283 -11605
- data/mod/prosemirror_editor/lib/javascript/script_prosemirror_config.js.coffee +1 -1
- data/mod/standard/set/abstract/01_search_params.rb +1 -1
- data/mod/standard/set/abstract/search/paging.rb +4 -4
- data/mod/standard/set/all/comment.rb +67 -47
- data/mod/standard/set/all/links.rb +2 -2
- data/mod/standard/set/all/rich_html/content.rb +1 -1
- data/mod/standard/set/all/rich_html/editing.rb +3 -2
- data/mod/standard/set/all/rich_html/form.rb +21 -12
- data/mod/standard/set/all/rich_html/header.rb +9 -0
- data/mod/standard/set/all/rich_html/menu.rb +16 -12
- data/mod/standard/set/all/rich_html/toolbar.rb +140 -130
- data/mod/standard/set/all/rich_html/wrapper.rb +11 -1
- data/mod/standard/set/rstar/rules_editor.rb +2 -34
- data/mod/standard/set/self/search.rb +1 -1
- data/mod/standard/set/type/set.rb +4 -4
- data/mod/standard/spec/set/type/email_template/email_config_spec.rb +218 -0
- data/mod/standard/spec/set/type/email_template_spec.rb +3 -185
- data/spec/lib/card/cache_spec.rb +0 -1
- data/spec/lib/card/format/render_spec.rb +19 -0
- data/spec/lib/card/stage_director_spec.rb +1 -1
- data/tmpsets/set/mod001-core/all/actify.rb +5 -6
- data/tmpsets/set/mod001-core/all/fetch.rb +14 -12
- data/tmpsets/set/mod001-core/all/name.rb +1 -1
- data/tmpsets/set/mod001-core/all/permissions.rb +12 -22
- data/tmpsets/set/mod001-core/all/tracked_attributes.rb +76 -0
- data/tmpsets/set/mod001-core/all/utils.rb +40 -3
- data/tmpsets/set/mod002-history/all/history.rb +1 -2
- data/tmpsets/set/mod008-solid_cache/abstract/solid_cache.rb +1 -1
- data/tmpsets/set/mod013-carrierwave/abstract/attachment.rb +282 -0
- data/tmpsets/set/mod013-carrierwave/type/file.rb +155 -0
- data/tmpsets/set/mod013-carrierwave/type/image.rb +96 -0
- data/tmpsets/set/mod014-admin/self/admin.rb +113 -0
- data/tmpsets/set/mod014-admin/self/admin_info.rb +110 -0
- data/tmpsets/set/mod014-admin/self/version.rb +15 -0
- data/tmpsets/set/mod015-developer/all/event_viz.rb +59 -0
- data/tmpsets/set/mod015-developer/all/view_viz.rb +30 -0
- data/tmpsets/set/mod015-developer/right/debug.rb +96 -0
- metadata +15 -2
@@ -0,0 +1,155 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
class Card; module Set; class Type; module File; extend Card::Set
|
3
|
+
# ~~ above autogenerated; below pulled from /Users/ethan/dev/wagn/gem/card/mod/carrierwave/set/type/file.rb ~~
|
4
|
+
attachment :file, uploader: CarrierWave::FileCardUploader
|
5
|
+
|
6
|
+
module SelectedAction
|
7
|
+
def select_action_by_params params
|
8
|
+
# skip action table lookups for current revision
|
9
|
+
rev_id = params[:rev_id]
|
10
|
+
super unless rev_id && rev_id == last_content_action_id
|
11
|
+
end
|
12
|
+
|
13
|
+
def last_content_action_id
|
14
|
+
# find action id from content (saves lookups)
|
15
|
+
db_content.to_s.split(%r{[/\.]})[1]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
include SelectedAction
|
19
|
+
|
20
|
+
format do
|
21
|
+
view :source do |_args|
|
22
|
+
card.attachment.url
|
23
|
+
end
|
24
|
+
|
25
|
+
view :core do |args|
|
26
|
+
handle_source args do |source|
|
27
|
+
card_url source
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def handle_source args
|
32
|
+
source = _render_source args
|
33
|
+
source ? yield(source) : ""
|
34
|
+
rescue
|
35
|
+
"File Error"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
format :file do
|
40
|
+
# returns send_file args. not in love with this...
|
41
|
+
view :core do |_args|
|
42
|
+
# this means we only support known formats. dislike.
|
43
|
+
if (_format = card.attachment_format(params[:format]))
|
44
|
+
if params[:explicit_file] && (r = controller.response)
|
45
|
+
r.headers["Expires"] = 1.year.from_now.httpdate
|
46
|
+
# currently using default "private", because proxy servers could block
|
47
|
+
# needed permission checks
|
48
|
+
# r.headers["Cache-Control"] = "public"
|
49
|
+
end
|
50
|
+
|
51
|
+
# formerly supported redirecting to correct file format
|
52
|
+
# elsif ![format, 'file'].member? params[:format]
|
53
|
+
# path = request.fullpath.sub( /\.#{params[:format]}\b/, '.' + format )
|
54
|
+
# return redirect_to(path) #card.attachment.url(style) )
|
55
|
+
|
56
|
+
file = selected_file_version
|
57
|
+
[file.path,
|
58
|
+
{
|
59
|
+
type: file.content_type,
|
60
|
+
filename: "#{card.cardname.safe_key}#{file.extension}",
|
61
|
+
x_sendfile: true,
|
62
|
+
disposition: (params[:format] == "file" ? "attachment" : "inline")
|
63
|
+
}]
|
64
|
+
else
|
65
|
+
_render_not_found
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def selected_file_version
|
70
|
+
card.attachment
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
format :html do
|
75
|
+
view :core do |args|
|
76
|
+
handle_source args do |source|
|
77
|
+
"<a href=\"#{source}\">Download #{showname args[:title]}</a>"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
view :editor do |args|
|
82
|
+
file_chooser args
|
83
|
+
end
|
84
|
+
|
85
|
+
def preview _args
|
86
|
+
""
|
87
|
+
end
|
88
|
+
|
89
|
+
view :preview_editor, tags: :unknown_ok do |args|
|
90
|
+
cached_upload_card_name = Card::Env.params[:attachment_upload]
|
91
|
+
cached_upload_card_name.gsub!(/\[\w+\]$/, "[action_id_of_cached_upload]")
|
92
|
+
<<-HTML
|
93
|
+
<div class="chosen-file">
|
94
|
+
<input type="hidden" name="#{cached_upload_card_name}"
|
95
|
+
value="#{card.selected_action_id}">
|
96
|
+
<table role="presentation" class="table table-striped">
|
97
|
+
<tbody class="files">
|
98
|
+
<tr class="template-download fade in">
|
99
|
+
<td>
|
100
|
+
<span class="preview">
|
101
|
+
#{preview(args)}
|
102
|
+
</span>
|
103
|
+
</td>
|
104
|
+
<td>
|
105
|
+
<p class="name">
|
106
|
+
#{card.original_filename}
|
107
|
+
</p>
|
108
|
+
</td>
|
109
|
+
<td>
|
110
|
+
<span class="size">
|
111
|
+
#{number_to_human_size(card.attachment.size)}
|
112
|
+
</span>
|
113
|
+
</td>
|
114
|
+
<td class="pull-right">
|
115
|
+
<button class="btn btn-danger delete cancel-upload"
|
116
|
+
data-type="DELETE">
|
117
|
+
<i class="glyphicon glyphicon-trash"></i>
|
118
|
+
<span>Delete</span>
|
119
|
+
</button>
|
120
|
+
</td>
|
121
|
+
</tr>
|
122
|
+
</tbody>
|
123
|
+
</table>
|
124
|
+
</div>
|
125
|
+
HTML
|
126
|
+
end
|
127
|
+
|
128
|
+
def file_chooser args
|
129
|
+
<<-HTML
|
130
|
+
<div class="choose-file">
|
131
|
+
#{preview(args)}
|
132
|
+
<span class="btn btn-success fileinput-button">
|
133
|
+
<i class="glyphicon glyphicon-cloud-upload"></i>
|
134
|
+
<span>
|
135
|
+
#{card.new_card? ? 'Add' : 'Replace'} #{card.attachment_name}...
|
136
|
+
</span>
|
137
|
+
<input class="file-upload slotter form-control" type="file"
|
138
|
+
name="card[#{card.type_code}]" id="card_#{card.type_code}">
|
139
|
+
#{hidden_field_tag 'attachment_type_id', card.type_id}
|
140
|
+
#{hidden_field card.attachment_name, class: 'attachment_card_name',
|
141
|
+
value: ''}
|
142
|
+
#{hidden_field_tag 'file_card_name', card.cardname.url_key}
|
143
|
+
</span>
|
144
|
+
</div>
|
145
|
+
<div id="progress" class="progress" style="display: none;">
|
146
|
+
<div class="progress-bar progress-bar-success" style="width: 0%;"></div>
|
147
|
+
</div>
|
148
|
+
<div class="chosen-file"></div>
|
149
|
+
HTML
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
# ~~ below autogenerated; above pulled from /Users/ethan/dev/wagn/gem/card/mod/carrierwave/set/type/file.rb ~~
|
155
|
+
end;end;end;end;
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
class Card; module Set; class Type; module Image; extend Card::Set
|
3
|
+
# ~~ above autogenerated; below pulled from /Users/ethan/dev/wagn/gem/card/mod/carrierwave/set/type/image.rb ~~
|
4
|
+
attachment :image, uploader: CarrierWave::ImageCardUploader
|
5
|
+
|
6
|
+
include File::SelectedAction
|
7
|
+
|
8
|
+
format do
|
9
|
+
include File::Format
|
10
|
+
|
11
|
+
view :closed_content do |_args|
|
12
|
+
_render_core size: :icon
|
13
|
+
end
|
14
|
+
|
15
|
+
view :source do |args|
|
16
|
+
style =
|
17
|
+
case
|
18
|
+
when @mode == :closed then :icon
|
19
|
+
when args[:size] then args[:size].to_sym
|
20
|
+
when main? then :large
|
21
|
+
else :medium
|
22
|
+
end
|
23
|
+
style = :original if style.to_sym == :full
|
24
|
+
if style == :original
|
25
|
+
card.image.url
|
26
|
+
else
|
27
|
+
card.image.versions[style].url
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
format :html do
|
33
|
+
include File::HtmlFormat
|
34
|
+
|
35
|
+
view :core do |args|
|
36
|
+
handle_source args do |source|
|
37
|
+
if source == "missing"
|
38
|
+
"<!-- image missing #{@card.name} -->"
|
39
|
+
else
|
40
|
+
image_tag(source)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def preview args
|
46
|
+
if !card.new_card? || card.preliminary_upload?
|
47
|
+
content_tag :div, _render_core(args.merge(size: :medium)).html_safe,
|
48
|
+
class: "attachment-preview",
|
49
|
+
id: "#{card.attachment.filename}-preview"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
view :content_changes do |args|
|
54
|
+
out = ""
|
55
|
+
size = args[:diff_type] == :summary ? :icon : :medium
|
56
|
+
if !args[:hide_diff] && args[:action] &&
|
57
|
+
(last_change = card.last_change_on(:db_content, before: args[:action]))
|
58
|
+
card.selected_action_id = last_change.card_action_id
|
59
|
+
out << Card::Content::Diff.render_deleted_chunk(_render_core(size: size))
|
60
|
+
end
|
61
|
+
card.selected_action_id = args[:action].id
|
62
|
+
out << Card::Content::Diff.render_added_chunk(_render_core(size: size))
|
63
|
+
out
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
format :css do
|
68
|
+
view :core do |_args|
|
69
|
+
render_source
|
70
|
+
end
|
71
|
+
|
72
|
+
view :content do |_args| # why is this necessary?
|
73
|
+
render_core
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
format :file do
|
78
|
+
include File::FileFormat
|
79
|
+
|
80
|
+
view :style do |args| # should this be in model?
|
81
|
+
["", "full"].member?(args[:style].to_s) ? :original : args[:style]
|
82
|
+
end
|
83
|
+
|
84
|
+
def selected_file_version
|
85
|
+
style = _render_style(style: params[:size]).to_sym
|
86
|
+
if style && style != :original
|
87
|
+
card.attachment.versions[style]
|
88
|
+
else
|
89
|
+
card.attachment
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
# ~~ below autogenerated; above pulled from /Users/ethan/dev/wagn/gem/card/mod/carrierwave/set/type/image.rb ~~
|
96
|
+
end;end;end;end;
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
class Card; module Set; class Self; module Admin; extend Card::Set
|
3
|
+
# ~~ above autogenerated; below pulled from /Users/ethan/dev/wagn/gem/card/mod/admin/set/self/admin.rb ~~
|
4
|
+
event :admin_tasks, :initialize, on: :update do
|
5
|
+
return unless (task = Env.params[:task])
|
6
|
+
raise Card::Error::PermissionDenied.new(self) unless Auth.always_ok?
|
7
|
+
|
8
|
+
case task.to_sym
|
9
|
+
when :clear_cache then Card::Cache.reset_all
|
10
|
+
when :repair_references then Card::Reference.repair_all
|
11
|
+
when :empty_trash then Card.empty_trash
|
12
|
+
when :clear_view_cache then Card::Cache::ViewCache.reset
|
13
|
+
when :delete_old_revisions then Card::Action.delete_old
|
14
|
+
when :repair_permissions then Card.repair_all_permissions
|
15
|
+
when :clear_solid_cache then Card.clear_solid_cache
|
16
|
+
when :clear_machine_cache then Card.reset_all_machines
|
17
|
+
end
|
18
|
+
abort :success
|
19
|
+
end
|
20
|
+
|
21
|
+
format :html do
|
22
|
+
view :core do |_args|
|
23
|
+
stats = card_stats
|
24
|
+
stats += cache_stats
|
25
|
+
stats += memory_stats
|
26
|
+
table_content = stats.map { |args| stat_row(*args) }
|
27
|
+
table table_content, header: %w(Stat Value Action)
|
28
|
+
end
|
29
|
+
|
30
|
+
def card_stats
|
31
|
+
[
|
32
|
+
["cards", { count: Card.where(trash: false) }],
|
33
|
+
["trashed cards", { count: Card.where(trash: true),
|
34
|
+
link_text: "delete all", task: "empty_trash" }],
|
35
|
+
["actions", { count: Card::Action,
|
36
|
+
link_text: "delete old",
|
37
|
+
task: "delete_old_revisions" }],
|
38
|
+
["references", { count: Card::Reference,
|
39
|
+
link_text: "repair all", task: "repair_references" }]
|
40
|
+
]
|
41
|
+
end
|
42
|
+
|
43
|
+
def cache_stats
|
44
|
+
stats = [
|
45
|
+
["solid cache", { count: solid_cache_count, unit: " cards",
|
46
|
+
link_text: "clear cache",
|
47
|
+
task: "clear_solid_cache" }],
|
48
|
+
["machine cache", { count: machine_cache_count, unit: " cards",
|
49
|
+
link_text: "clear cache",
|
50
|
+
task: "clear_machine_cache" }]
|
51
|
+
]
|
52
|
+
return stats unless Card.config.view_cache
|
53
|
+
stats <<
|
54
|
+
["view cache", { count: Card::Cache::ViewCache,
|
55
|
+
link_text: "clear view cache",
|
56
|
+
task: "clear_view_cache" }]
|
57
|
+
stats
|
58
|
+
end
|
59
|
+
|
60
|
+
def memory_stats
|
61
|
+
oldmem = session[:memory]
|
62
|
+
session[:memory] = newmem = card.profile_memory
|
63
|
+
stats = [
|
64
|
+
["memory now", { count: newmem, unit: "M",
|
65
|
+
link_text: "clear cache", task: "clear_cache" }]
|
66
|
+
]
|
67
|
+
return stats unless oldmem
|
68
|
+
stats << ["memory prev", { count: oldmem, unit: "M" }]
|
69
|
+
stats << ["memory diff", { count: newmem - oldmem, unit: "M" }]
|
70
|
+
stats
|
71
|
+
end
|
72
|
+
|
73
|
+
def stat_row name, args={}
|
74
|
+
res = [name]
|
75
|
+
args[:count] = args[:count].count if args[:count].respond_to?(:count)
|
76
|
+
res << "#{args[:count]}#{args[:unit]}"
|
77
|
+
return res unless args[:task]
|
78
|
+
path = card_path("update/:admin?task=#{args[:task]}")
|
79
|
+
res << link_to(args[:link_text] || args[:task], path)
|
80
|
+
res
|
81
|
+
end
|
82
|
+
|
83
|
+
def solid_cache_count
|
84
|
+
Card.search right: { codename: "solid_cache" }, return: "count"
|
85
|
+
end
|
86
|
+
|
87
|
+
def machine_cache_count
|
88
|
+
Card.search right: { codename: "machine_cache" }, return: "count"
|
89
|
+
end
|
90
|
+
|
91
|
+
def delete_sessions_link months
|
92
|
+
link_to months,
|
93
|
+
card_path("update/:admin?task=delete_old_sessions&months=#{months}")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def current_memory_usage
|
98
|
+
`ps -o rss= -p #{Process.pid}`.to_i
|
99
|
+
end
|
100
|
+
|
101
|
+
def profile_memory &block
|
102
|
+
before = current_memory_usage
|
103
|
+
if block_given?
|
104
|
+
instance_eval(&block)
|
105
|
+
else
|
106
|
+
before = 0
|
107
|
+
end
|
108
|
+
(current_memory_usage - before) / 1024.to_i
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
# ~~ below autogenerated; above pulled from /Users/ethan/dev/wagn/gem/card/mod/admin/set/self/admin.rb ~~
|
113
|
+
end;end;end;end;
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
class Card; module Set; class Self; module AdminInfo; extend Card::Set
|
3
|
+
# ~~ above autogenerated; below pulled from /Users/ethan/dev/wagn/gem/card/mod/admin/set/self/admin_info.rb ~~
|
4
|
+
def clean_html?
|
5
|
+
false
|
6
|
+
end
|
7
|
+
|
8
|
+
format :html do
|
9
|
+
view :core do
|
10
|
+
warnings = []
|
11
|
+
if Card.config.action_mailer.perform_deliveries == false
|
12
|
+
warnings << email_warning
|
13
|
+
end
|
14
|
+
if Card.config.recaptcha_public_key ==
|
15
|
+
Card::Auth::Permissions::RECAPTCHA_DEFAULTS[:recaptcha_public_key] &&
|
16
|
+
card.rule(:captcha) == "1"
|
17
|
+
warnings << recaptcha_warning
|
18
|
+
end
|
19
|
+
return "" if warnings.empty?
|
20
|
+
alert :warning, dismissible: true do
|
21
|
+
render_warning_list warnings
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def render_warning_list warnings
|
26
|
+
# 'ADMINISTRATOR WARNING'
|
27
|
+
admin_warn = I18n.t(:admin_warn,
|
28
|
+
scope: "mod.standard.set.self.admin_info")
|
29
|
+
"<h6>#{admin_warn}</h6>".html_safe + list_group(
|
30
|
+
warnings,
|
31
|
+
items: { class: "list-group-item-warning" }
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def email_warning
|
36
|
+
# "Email delivery is turned off."
|
37
|
+
# "Change settings in config/application.rb to send sign up notifications."
|
38
|
+
I18n.t(:email_off,
|
39
|
+
scope: "mod.standard.set.self.admin_info",
|
40
|
+
path: "config/application.rb")
|
41
|
+
end
|
42
|
+
|
43
|
+
def recaptcha_warning
|
44
|
+
warning =
|
45
|
+
if Card::Env.localhost?
|
46
|
+
# %(Your captcha is currently working with temporary settings.
|
47
|
+
# This is fine for a local installation, but you will need new
|
48
|
+
# recaptcha keys if you want to make this site public.)
|
49
|
+
I18n.t(:captcha_temp, scope: "mod.standard.set.self.admin_info")
|
50
|
+
else
|
51
|
+
# %(You are configured to use [[*captcha]], but for that to work
|
52
|
+
# you need new recaptcha keys.)
|
53
|
+
process_content(I18n.t(:captcha_keys,
|
54
|
+
scope: "mod.standard.set.self.admin_info"))
|
55
|
+
end
|
56
|
+
# 'Instructions'
|
57
|
+
instructions = I18n.t(:instructions,
|
58
|
+
scope: "mod.standard.set.self.admin_info")
|
59
|
+
<<-HTML
|
60
|
+
<p>
|
61
|
+
#{warning}
|
62
|
+
</p>
|
63
|
+
<h4>#{instructions}</h4>
|
64
|
+
#{howto_add_new_recaptcha_keys}
|
65
|
+
#{howto_turn_captcha_off}
|
66
|
+
HTML
|
67
|
+
end
|
68
|
+
|
69
|
+
def instructions title, steps
|
70
|
+
steps = list_group steps
|
71
|
+
"#{title}#{steps}"
|
72
|
+
end
|
73
|
+
|
74
|
+
def howto_add_new_recaptcha_keys
|
75
|
+
instructions(
|
76
|
+
# 'How to add new recaptcha keys:'
|
77
|
+
I18n.t(:howto_add_keys, scope: "mod.standard.set.self.admin_info"),
|
78
|
+
[
|
79
|
+
# "1. Register your domain at #{web_link 'http://google.com/recaptcha'}"
|
80
|
+
I18n.t(:howto_register,
|
81
|
+
scope: "mod.standard.set.self.admin_info",
|
82
|
+
recaptcha_link: web_link("http://google.com/recaptcha")),
|
83
|
+
# "2. Add your keys to #{card_link :recaptcha_settings}"
|
84
|
+
I18n.t(:howto_add,
|
85
|
+
scope: "mod.standard.set.self.admin_info",
|
86
|
+
recaptcha_settings: card_link(:recaptcha_settings))
|
87
|
+
]
|
88
|
+
)
|
89
|
+
end
|
90
|
+
|
91
|
+
def howto_turn_captcha_off
|
92
|
+
instructions(
|
93
|
+
# 'How to turn captcha off:'
|
94
|
+
I18n.t(:howto_turn_off, scope: "mod.standard.set.self.admin_info"),
|
95
|
+
[
|
96
|
+
# "1. Go to #{card_link :captcha}"
|
97
|
+
I18n.t(:howto_go,
|
98
|
+
scope: "mod.standard.set.self.admin_info",
|
99
|
+
captcha_card: card_link(:captcha)),
|
100
|
+
# '2. Update all *captcha rules to "no".'
|
101
|
+
I18n.t(:howto_update,
|
102
|
+
scope: "mod.standard.set.self.admin_info")
|
103
|
+
]
|
104
|
+
)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
# ~~ below autogenerated; above pulled from /Users/ethan/dev/wagn/gem/card/mod/admin/set/self/admin_info.rb ~~
|
110
|
+
end;end;end;end;
|