card 1.15.7 → 1.16.0

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.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/card.gemspec +3 -2
  4. data/config/initializers/inflections.rb +1 -1
  5. data/db/migrate_core_cards/20150528084659_add_session_cardtype.rb +0 -1
  6. data/db/migrate_core_cards/20150601133433_add_recent_setting_session_card.rb +12 -0
  7. data/db/migrate_core_cards/20150610171702_add_debugger_session_card.rb +11 -0
  8. data/db/migrate_core_cards/20150611203506_rails_inflection_updates.rb +82 -0
  9. data/db/migrate_core_cards/20150627205133_fix_script_bootstrap_card_type.rb +7 -0
  10. data/db/migrate_core_cards/20150702130543_remove_edit_toolbar_pinned.rb +9 -0
  11. data/db/schema.rb +81 -81
  12. data/db/seed/new/card_actions.yml +12581 -1647
  13. data/db/seed/new/card_acts.yml +1 -1
  14. data/db/seed/new/card_changes.yml +39326 -7569
  15. data/db/seed/new/card_references.yml +518 -455
  16. data/db/seed/new/cards.yml +1547 -1291
  17. data/db/seed/test/fixtures/card_actions.yml +13700 -2717
  18. data/db/seed/test/fixtures/card_acts.yml +314 -272
  19. data/db/seed/test/fixtures/card_changes.yml +45409 -13573
  20. data/db/seed/test/fixtures/card_references.yml +1223 -1125
  21. data/db/seed/test/fixtures/cards.yml +2694 -2433
  22. data/db/seed/test/fixtures/file1.txt +1 -0
  23. data/db/seed/test/fixtures/file2.txt +1 -0
  24. data/db/version_core_cards.txt +1 -1
  25. data/lib/card.rb +23 -13
  26. data/lib/card/auth.rb +6 -6
  27. data/lib/card/cache.rb +24 -5
  28. data/lib/card/env.rb +10 -10
  29. data/lib/card/format.rb +29 -12
  30. data/lib/card/log.rb +5 -3
  31. data/lib/card/migration.rb +17 -41
  32. data/lib/card/name.rb +12 -0
  33. data/lib/card/reference.rb +11 -12
  34. data/lib/card/set.rb +59 -6
  35. data/lib/card/simplecov_helper.rb +6 -1
  36. data/lib/card/spec_helper.rb +3 -2
  37. data/lib/card/view_cache.rb +77 -0
  38. data/lib/cardio.rb +30 -22
  39. data/mod/01_core/format/html_format.rb +17 -9
  40. data/mod/01_core/layout/blank.html +1 -1
  41. data/mod/01_core/layout/default.html +6 -16
  42. data/mod/01_core/layout/modal.html +9 -0
  43. data/mod/01_core/layout/noside.html +5 -12
  44. data/mod/01_core/layout/simple.html +1 -1
  45. data/mod/01_core/set/all/collection.rb +57 -5
  46. data/mod/01_core/set/all/content.rb +5 -7
  47. data/mod/01_core/set/all/name.rb +8 -10
  48. data/mod/01_core/set/all/permissions.rb +1 -2
  49. data/mod/01_core/set/all/phases.rb +5 -13
  50. data/mod/01_core/set/all/references.rb +10 -10
  51. data/mod/01_core/set/all/rules.rb +2 -2
  52. data/mod/01_core/set/all/tracked_attributes.rb +5 -3
  53. data/mod/01_core/set/all/utils.rb +79 -9
  54. data/mod/01_core/set/all/view_cache.rb +9 -0
  55. data/mod/01_core/spec/format/html_format_spec.rb +2 -2
  56. data/mod/01_core/spec/set/all/collection_spec.rb +1 -1
  57. data/mod/01_history/lib/card/act.rb +3 -1
  58. data/mod/01_history/lib/card/action.rb +20 -12
  59. data/mod/01_history/lib/card/change.rb +12 -8
  60. data/mod/01_history/set/all/actions.rb +2 -2
  61. data/mod/01_history/set/all/content_history.rb +3 -2
  62. data/mod/01_history/set/all/history.rb +57 -19
  63. data/mod/02_basic_types/set/all/rss.rb +5 -6
  64. data/mod/{05_standard → 02_basic_types}/set/type/html.rb +4 -3
  65. data/mod/02_basic_types/set/type/plain_text.rb +1 -1
  66. data/mod/02_basic_types/set/type/pointer.rb +7 -4
  67. data/mod/02_basic_types/spec/set/type/pointer_spec.rb +21 -17
  68. data/mod/03_machines/lib/card/machine.rb +33 -31
  69. data/mod/03_machines/lib/javascript/script_card_menu.js.coffee +2 -10
  70. data/mod/03_machines/lib/javascript/wagn.js.coffee +10 -10
  71. data/mod/03_machines/lib/javascript/wagn_mod.js.coffee +87 -40
  72. data/mod/03_machines/lib/stylesheets/style_cards.scss +26 -28
  73. data/mod/03_machines/set/right/machine_output.rb +3 -3
  74. data/mod/03_machines/set/type/coffee_script.rb +6 -6
  75. data/mod/03_machines/set/type/css.rb +1 -1
  76. data/mod/03_machines/set/type/java_script.rb +5 -6
  77. data/mod/03_machines/spec/lib/shared_machine_examples.rb +3 -1
  78. data/mod/03_machines/spec/set/type/scss_spec.rb +9 -10
  79. data/mod/04_settings/lib/card/setting.rb +16 -14
  80. data/mod/04_settings/set/right/structure.rb +6 -0
  81. data/mod/04_settings/set/self/add_help.rb +1 -1
  82. data/mod/04_settings/set/self/autoname.rb +1 -1
  83. data/mod/04_settings/set/self/captcha.rb +1 -1
  84. data/mod/04_settings/set/self/default.rb +1 -1
  85. data/mod/04_settings/set/self/help.rb +1 -1
  86. data/mod/04_settings/set/self/input.rb +1 -1
  87. data/mod/04_settings/set/self/layout.rb +1 -1
  88. data/mod/04_settings/set/self/on_create.rb +1 -1
  89. data/mod/04_settings/set/self/on_delete.rb +1 -1
  90. data/mod/04_settings/set/self/on_update.rb +1 -1
  91. data/mod/04_settings/set/self/options.rb +1 -1
  92. data/mod/04_settings/set/self/options_label.rb +1 -1
  93. data/mod/04_settings/set/self/script.rb +1 -1
  94. data/mod/04_settings/set/self/structure.rb +1 -1
  95. data/mod/04_settings/set/self/style.rb +1 -1
  96. data/mod/04_settings/set/self/table_of_contents.rb +1 -1
  97. data/mod/04_settings/set/self/thanks.rb +1 -1
  98. data/mod/05_email/set/all/follow.rb +3 -21
  99. data/mod/05_email/set/all/notify.rb +20 -4
  100. data/mod/05_email/set/right/follow.rb +16 -18
  101. data/mod/05_email/set/self/follow.rb +1 -1
  102. data/mod/05_email/spec/set/all/follow_spec.rb +6 -13
  103. data/mod/05_standard/set/all/attach.rb +23 -9
  104. data/mod/05_standard/set/all/error.rb +5 -7
  105. data/mod/05_standard/set/all/event_viz.rb +10 -6
  106. data/mod/05_standard/set/all/links.rb +37 -13
  107. data/mod/05_standard/set/all/rich_html/content.rb +46 -18
  108. data/mod/05_standard/set/all/rich_html/editing.rb +29 -25
  109. data/mod/05_standard/set/all/rich_html/form.rb +17 -10
  110. data/mod/05_standard/set/all/rich_html/header.rb +26 -4
  111. data/mod/05_standard/set/all/rich_html/menu.rb +17 -34
  112. data/mod/05_standard/set/all/rich_html/modal.rb +50 -12
  113. data/mod/05_standard/set/all/rich_html/toolbar.rb +178 -186
  114. data/mod/05_standard/set/all/rich_html/wrapper.rb +44 -21
  115. data/mod/05_standard/set/rstar/rules.rb +43 -53
  116. data/mod/05_standard/set/self/all.rb +2 -1
  117. data/mod/05_standard/set/self/head.rb +2 -2
  118. data/mod/05_standard/set/self/signin.rb +18 -18
  119. data/mod/05_standard/set/self/stats.rb +14 -2
  120. data/mod/05_standard/set/type/search_type.rb +9 -4
  121. data/mod/05_standard/set/type/session.rb +12 -7
  122. data/mod/05_standard/set/type/set.rb +135 -18
  123. data/mod/05_standard/spec/chunk/include_spec.rb +15 -16
  124. data/mod/05_standard/spec/set/all/account_spec.rb +21 -21
  125. data/mod/05_standard/spec/set/all/event_viz_spec.rb +7 -7
  126. data/mod/05_standard/spec/set/all/history_spec.rb +54 -24
  127. data/mod/05_standard/spec/set/all/rich_html/editing_spec.rb +42 -40
  128. data/mod/05_standard/spec/set/rstar/rules_spec.rb +1 -1
  129. data/mod/05_standard/spec/set/type/search_type_spec.rb +9 -1
  130. data/mod/05_standard/spec/set/type/signup_spec.rb +42 -42
  131. data/mod/06_bootstrap/lib/stylesheets/bootstrap_cards.scss +6 -0
  132. data/mod/06_bootstrap/set/all/bootstrap/form.rb +4 -5
  133. data/mod/06_bootstrap/set/all/bootstrap/helper.rb +145 -0
  134. data/mod/06_bootstrap/set/all/rich_bootstrap.rb +0 -59
  135. data/spec/lib/card/action_spec.rb +1 -1
  136. data/spec/lib/card/log_spec.rb +7 -7
  137. data/spec/models/card/cardtype_spec.rb +1 -1
  138. data/spec/spec_helper.rb +1 -1
  139. metadata +31 -6
  140. data/mod/04_settings/set/self/comment.rb +0 -2
@@ -7,6 +7,8 @@ format :html do
7
7
  options_hash['name_context'] = @context_names.map( &:key ) * ','
8
8
  end
9
9
 
10
+ options_hash[:subslot] = 'true' if args[:subslot]
11
+
10
12
  @@slot_option_keys.inject(options_hash) do |hash, opt|
11
13
  hash[opt] = args[opt] if args[opt].present?
12
14
  hash
@@ -18,15 +20,20 @@ format :html do
18
20
  def wrap args = {}
19
21
  @slot_view = @current_view
20
22
  classes = [
21
- ( 'card-slot' unless args[:no_slot] ),
22
- "#{ @current_view }-view",
23
- ( args[:slot_class] if args[:slot_class] ),
24
- ( "STRUCTURE-#{args[:structure].to_name.key}" if args[:structure]),
25
- card.safe_set_keys
26
- ].compact
27
-
28
- div = %{<div id="#{card.cardname.url_key}" data-card-id="#{card.id}" data-card-name="#{h card.name}" style="#{h args[:style]}" class="#{classes*' '}" } +
29
- %{data-slot='#{html_escape_except_quotes slot_options( args )}'>#{ output yield }</div>}
23
+ ( 'card-slot' unless args[:no_slot] ),
24
+ "#{ @current_view }-view",
25
+ ( args[:slot_class] if args[:slot_class] ),
26
+ ( "STRUCTURE-#{args[:structure].to_name.key}" if args[:structure]),
27
+ card.safe_set_keys
28
+ ].compact.join ' '
29
+ data = {
30
+ 'card-id' => card.id,
31
+ 'card-name' => h(card.name),
32
+ 'slot' => html_escape_except_quotes(slot_options( args ))
33
+ }
34
+ div =
35
+ content_tag :div, output(yield).html_safe,
36
+ :id=>card.cardname.url_key, :data=>data, :style=>h(args[:style]), :class=>classes
30
37
 
31
38
  if params[:debug] == 'slot' && !tagged( @current_view, :no_wrap_comments )
32
39
  name = h card.name
@@ -52,16 +59,37 @@ format :html do
52
59
  end
53
60
  end
54
61
 
55
- def frame args={}
62
+ def frame args={}, &block
63
+ if args[:subframe]
64
+ args.delete(:panel_class)
65
+ subframe args, &block
66
+ else
67
+ show_subheader = show_view?(:toolbar, args.merge(:default_visibility=>:hide)) && @current_view != :related && @current_view != :open
68
+ wrap args do
69
+ [
70
+ _optional_render( :menu, args ),
71
+ panel(args) do
72
+ [
73
+ _optional_render( :header, args, :show),
74
+ _optional_render( :subheader, args,(show_subheader ? :show : :hide)),
75
+ _optional_render( :help, args.merge(:help_class=>'alert alert-info'), :hide),
76
+ wrap_body(args) { output( block.call(args) ) } ,
77
+ ]
78
+ end
79
+ ]
80
+ end
81
+ end
82
+ end
83
+
84
+ def subframe args={}
56
85
  wrap args do
57
86
  [
58
- _optional_render( :menu, args ),
87
+ _optional_render( :menu, args.merge(:optional_horizontal_menu=>:hide) ),
88
+ _optional_render( :subheader, args, :show),
89
+ _optional_render( :help, args.merge(:help_class=>'alert alert-info'), :hide),
59
90
  panel(args) do
60
91
  [
61
- _optional_render( :header, args, :show),
62
- (%{ <div class="card-subheader">#{ args[:subheader] }</div> } if args[:subheader]),
63
- _optional_render( :help, args.merge(:help_class=>'alert alert-info'), :hide),
64
- (_render( :close_related_link, args) if @slot_view == :related),
92
+ _optional_render( :header, args, :hide),
65
93
  wrap_body(args) { output( yield args ) } ,
66
94
  ]
67
95
  end
@@ -96,7 +124,7 @@ format :html do
96
124
  end
97
125
 
98
126
  def wrap_main(content)
99
- return content if params[:layout]=='none'
127
+ return content if Env.ajax? || params[:layout]=='none'
100
128
  %{<div id="main">#{content}</div>}
101
129
  end
102
130
 
@@ -121,9 +149,4 @@ format :html do
121
149
  end
122
150
  end.join "\n"
123
151
  end
124
-
125
- view :close_related_link do |args|
126
- card_link( args[:parent], :text=>glyphicon('remove'), :view=>:home, :remote=>true, :class=>'pull-right slotter close-related-view', :title=>'cancel', 'data-slot-selector'=>'.card-slot.related-view')
127
- end
128
-
129
152
  end
@@ -1,3 +1,9 @@
1
+ event :save_recently_edited_settings, :before=>:extend, :on=>:save, :when=>proc{|c| c.is_rule? } do
2
+ if (recent = Card[:recent_settings])
3
+ recent.insert_item 0, cardname.right
4
+ recent.save
5
+ end
6
+ end
1
7
 
2
8
  format :html do
3
9
 
@@ -32,8 +38,6 @@ format :html do
32
38
  end
33
39
 
34
40
 
35
-
36
-
37
41
  view :open_rule, :tags=>:unknown_ok do |args|
38
42
  return 'not a rule' if !card.is_rule?
39
43
  current_rule = args[:current_rule]
@@ -76,7 +80,6 @@ format :html do
76
80
  </td>
77
81
  </tr>
78
82
  }
79
-
80
83
  end
81
84
 
82
85
  def default_open_rule_args args
@@ -87,7 +90,6 @@ format :html do
87
90
  args.reverse_merge! :current_rule => current_rule_card, :setting_name => card.rule_setting_name
88
91
  end
89
92
 
90
-
91
93
  view :show_rule, :tags=>:unknown_ok do |args|
92
94
  return 'not a rule' if !card.is_rule?
93
95
 
@@ -107,9 +109,14 @@ format :html do
107
109
 
108
110
  view :edit_rule, :tags=>:unknown_ok do |args|
109
111
  return 'not a rule' if !card.is_rule?
112
+ form_args = { :url=>path(:action=>:update, :no_id=>true),
113
+ :html=> {:class=>"card-form card-rule-form" } }
114
+ if args[:remote]
115
+ form_args[:remote] = true
116
+ form_args[:html][:class] += ' slotter'
117
+ end
110
118
 
111
- form_for card, :url=>path(:action=>:update, :no_id=>true), :remote=>true, :html=>
112
- {:class=>"card-form card-rule-form slotter" } do |form|
119
+ form_for card, form_args do |form|
113
120
  @form = form
114
121
  %{
115
122
  #{ hidden_success_formgroup args[:success]}
@@ -119,7 +126,10 @@ format :html do
119
126
  end
120
127
  end
121
128
 
129
+ view :related_edit_rule, :view=>:edit_rule
130
+
122
131
  def default_edit_rule_args args
132
+ args[:remote] ||= true
123
133
  args[:rule_context] ||= card
124
134
  args[:set_context] ||= card.rule_set_name
125
135
  args[:set_selected] = params[:type_reload] ? card.rule_set_name : false
@@ -132,51 +142,41 @@ format :html do
132
142
  :view => 'open_rule',
133
143
  :item => 'view_rule'
134
144
  })
135
- end
136
145
 
137
- view :related_edit_rule, :tags=>:unknown_ok do |args|
138
- delete_button = if !card.new_card?
139
- b_args = { :remote=>true, :class=>'rule-delete-button slotter', 'data-slot-selector'=>'.card-slot.related-view', :type=>'button' }
140
- b_args[:href] = path :action=>:delete, :success=>args[:success]
141
- if (fset = args[:fallback_set]) && (fcard = Card.fetch(fset))
142
- b_args['data-confirm']="Deleting will revert to #{card.rule_setting_name} rule for #{fcard.label }"
143
- end
144
- %{<span class="rule-delete-section">#{ button_tag 'Delete', b_args }</span>}
145
- end
146
-
147
- frame do
148
- form_for card, :url=>path(:action=>:update, :no_id=>true), :html=>
149
- {:class=>"card-form card-rule-form" } do |form|
150
- @form = form
151
- %{
152
- #{ hidden_success_formgroup args[:success]}
153
- #{ editor args }
154
- #{
155
- wrap_with( :div, :class=>'button-area' ) do
156
- [
157
- delete_button,
158
- button_tag( 'Submit', :class=>'rule-submit-button', :situation=>'primary' ),
159
- card_link( args[:success][:id], :text=>'Cancel', :class=>'rule-cancel-button btn btn-default',
160
- :path_opts=>{:view=>args[:success][:view], :success=>'true'}
161
- )
162
- ]
163
- end
164
- }
165
- }
146
+ args[:delete_button] ||= delete_button args
147
+ args[:cancel_button] ||=
148
+ begin
149
+ cancel_path = path :view=>( card.new_card? ? :closed_rule : :open_rule ), :success=>false
150
+ button_tag( 'Cancel', :class=>'rule-cancel-button slotter', :type=>'button',
151
+ :href=>cancel_path )
166
152
  end
167
- end
168
153
  end
169
154
 
170
155
  def default_related_edit_rule_args args
171
- args[:success] = {
172
- :view => :open,
173
- :item => nil,
156
+ args[:remote] ||= false
157
+ args[:success] ||= {
174
158
  :card => args[:parent] || card,
175
- :id => (args[:parent] && args[:parent].cardname.url_key) || card.cardname.url_key
159
+ :id => (args[:parent] && args[:parent].cardname.url_key) || card.cardname.url_key,
160
+ :view => :open,
161
+ :item => nil
176
162
  }
177
163
  default_edit_rule_args args
164
+ args[:delete_button] = delete_button args, '.card-slot.related-view'
165
+ args[:cancel_button] = card_link( args[:success][:id], :text=>'Cancel',
166
+ :class=>'rule-cancel-button btn btn-default', :path_opts=>{:view=>args[:success][:view]} )
178
167
  end
179
168
 
169
+ def delete_button args, slot_selector=nil
170
+ if !card.new_card?
171
+ b_args = { :remote=>true, :class=>'rule-delete-button slotter', :type=>'button' }
172
+ b_args['data-slot-selector'] = slot_selector if slot_selector
173
+ b_args[:href] = path :action=>:delete, :success=>args[:success]
174
+ if (fset = args[:fallback_set]) && (fcard = Card.fetch(fset))
175
+ b_args['data-confirm']="Deleting will revert to #{card.rule_setting_name} rule for #{fcard.label }"
176
+ end
177
+ %{<span class="rule-delete-section">#{ button_tag 'Delete', b_args }</span>}
178
+ end
179
+ end
180
180
 
181
181
  # used keys for args:
182
182
  # :success, :set_selected, :set_options, :rule_context
@@ -271,21 +271,11 @@ format :html do
271
271
  end
272
272
 
273
273
  def edit_buttons args
274
- delete_button = if !card.new_card?
275
- b_args = { :remote=>true, :class=>'rule-delete-button slotter', :type=>'button' }
276
- b_args[:href] = path :action=>:delete, :success=>args[:success]
277
- if (fset = args[:fallback_set]) && (fcard = Card.fetch(fset))
278
- b_args['data-confirm']="Deleting will revert to #{card.rule_setting_name} rule for #{fcard.label }"
279
- end
280
- %{<span class="rule-delete-section">#{ button_tag 'Delete', b_args }</span>}
281
- end
282
- cancel_path = path :view=>( card.new_card? ? :closed_rule : :open_rule ), :success=>'true'
283
274
  wrap_with( :div, :class=>'button-area' ) do
284
275
  [
285
- delete_button,
276
+ args[:delete_button],
286
277
  button_tag( 'Submit', :class=>'rule-submit-button', :situation=>'primary' ),
287
- button_tag( 'Cancel', :class=>'rule-cancel-button slotter', :type=>'button',
288
- :href=>cancel_path )
278
+ args[:cancel_button]
289
279
  ]
290
280
  end
291
281
  end
@@ -3,9 +3,10 @@ event :admin_tasks, :on=>:update, :before=>:approve do
3
3
  if task = Env.params[:task]
4
4
  if Auth.always_ok?
5
5
  case task.to_sym
6
- when :clear_cache ; Card::Cache.reset_global
6
+ when :clear_cache ; Card::Cache.reset_global; Card::ViewCache.reset
7
7
  when :repair_references ; Card::Reference.repair_all
8
8
  when :empty_trash ; Card.empty_trash
9
+ when :clear_view_cache ; Card::ViewCache.reset
9
10
  when :delete_old_revisions ; Card::Action.delete_old
10
11
  when :delete_old_sessions
11
12
  if months = Env.params[:months].to_i and months > 0
@@ -2,8 +2,8 @@ format :html do
2
2
 
3
3
  view :raw do |args|
4
4
  %(
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
7
7
  #{ head_title }
8
8
  #{ head_buttons }
9
9
  #{ head_stylesheets }
@@ -5,7 +5,7 @@ format :html do
5
5
  args.merge! :optional_help=>:show
6
6
  super args
7
7
  end
8
-
8
+
9
9
  def default_title_args args
10
10
  args[:title] ||= 'Sign In'
11
11
  end
@@ -14,34 +14,34 @@ format :html do
14
14
  # annoying step designed to avoid table of contents. sigh
15
15
  _render_core( args )
16
16
  end
17
-
17
+
18
18
  view :closed_content do |args|
19
19
  ''
20
20
  end
21
-
21
+
22
22
  def default_core_args args={}
23
23
  args[:buttons] = button_tag 'Sign in', :situation=>'primary'
24
24
  if Card.new(:type_id=>Card::SignupID).ok? :create
25
25
  args[:buttons] += link_to( '...or sign up!', card_path("account/signup"))
26
26
  end
27
- args[:buttons] += raw("<div style='float:right'>#{ view_link 'RESET PASSWORD', :edit }</div>") #FIXME - hardcoded styling
27
+ args[:buttons] += raw("<div style='float:right'>#{ view_link 'RESET PASSWORD', :edit, :path_opts=>{:slot=>{:hide=>:toolbar}} }</div>") #FIXME - hardcoded styling
28
28
  args
29
29
  end
30
-
30
+
31
31
  view :core do |args|
32
32
  account = card.fetch :trait=>:account, :new=>{}
33
-
33
+
34
34
  form_args = {
35
35
  :hidden => { :success=>"REDIRECT: #{interrupted_action || '*previous'}" },
36
36
  :recaptcha => :off
37
37
  }
38
-
38
+
39
39
  with_inclusion_mode :edit do
40
40
  card_form :update, form_args do
41
41
  [
42
42
  Auth.as_bot do
43
43
  subformat(account)._render :content_formgroup, :structure=>true, :items=>{:autocomplete=>'on'}
44
- end,
44
+ end,
45
45
  _optional_render( :button_formgroup, args )
46
46
  ].join
47
47
  end
@@ -54,16 +54,16 @@ format :html do
54
54
  :title=>'Forgot Password',
55
55
  :optional_help=>:hide,
56
56
  :buttons => button_tag( 'Reset my password', :situation=>'primary' ),
57
- :structure => true,
58
- :hidden => {
57
+ :structure => true,
58
+ :hidden => {
59
59
  :reset_password => true,
60
60
  :success => { :view => :reset_password_success }
61
61
  }
62
62
  } )
63
-
63
+
64
64
  Auth.as_bot { super args }
65
65
  end
66
-
66
+
67
67
  view :raw do |args|
68
68
  '{{+*email|title:email;type:Phrase}}'
69
69
  end
@@ -74,14 +74,14 @@ format :html do
74
74
 
75
75
  end
76
76
 
77
- event :signin, :before=>:approve, :on=>:update do
77
+ event :signin, :before=>:approve, :on=>:update do
78
78
  email = subcards["+#{Card[:email ].name}"]
79
79
  email &&= email['content']
80
80
  pword = subcards["+#{Card[:password].name}"]
81
81
  pword &&= pword['content']
82
82
 
83
- abort :failure, 'bad signin args' unless email && pword
84
-
83
+ abort :failure, 'bad signin args' unless email && pword
84
+
85
85
  if signin_id = Auth.authenticate( email, pword )
86
86
  Auth.signin signin_id
87
87
  else
@@ -92,7 +92,7 @@ event :signin, :before=>:approve, :on=>:update do
92
92
  else ; "Wrong password"
93
93
  end
94
94
  abort :failure
95
- end
95
+ end
96
96
  end
97
97
 
98
98
  event :signin_success, :after=>:signin do
@@ -102,10 +102,10 @@ end
102
102
  event :send_reset_password_token, :before=>:signin, :on=>:update, :when=>proc{ |c| Env.params[:reset_password] } do
103
103
  email = subcards["+#{Card[:email].name}"]
104
104
  email &&= email['content']
105
-
105
+
106
106
  if accted = Auth[ email.strip.downcase ] and accted.account.active?
107
107
  accted.account.send_reset_password_token
108
- abort :success
108
+ abort :success
109
109
  else
110
110
  if accted
111
111
  errors.add :account, 'not active'
@@ -40,6 +40,18 @@ format :html do
40
40
  months
41
41
  </td>
42
42
  </tr>
43
+ #{
44
+ if Card.config.view_cache
45
+ %{
46
+ <tr>
47
+ <td>view cache</td>
48
+ <td>#{ Card::ViewCache.count }</td>
49
+ <td>#{link_to 'clear view cache', card_path( 'update/:all?task=clear_view_cache' ) }</td>
50
+ </tr>
51
+ }
52
+ end
53
+ }
54
+
43
55
  <tr>
44
56
  <td>memory now</td>
45
57
  <td>#{ newmem }M</td>
@@ -58,14 +70,14 @@ format :html do
58
70
  <td>#{ newmem - oldmem }M</td>
59
71
  <td></td>
60
72
  </tr>
61
-
73
+
62
74
  }
63
75
  end
64
76
  }
65
77
  </table>
66
78
  }
67
79
  end
68
-
80
+
69
81
  def delete_sessions_link months
70
82
  link_to months, card_path( "update/:all?task=delete_old_sessions&months=#{months}")
71
83
  end
@@ -100,7 +100,7 @@ format do
100
100
  end
101
101
  end
102
102
 
103
- def each_nest args={}
103
+ def each_reference_with_args args={}
104
104
  search_result_names.each do |name|
105
105
  yield(name, nest_args(args.reverse_merge!(:item=>:content)))
106
106
  end
@@ -174,6 +174,13 @@ format :json do
174
174
  end
175
175
  end
176
176
 
177
+ format :rss do
178
+ def raw_feed_items
179
+ search_params.merge!(:default_limit => 25)
180
+ search_results
181
+ end
182
+ end
183
+
177
184
  format :html do
178
185
 
179
186
  view :card_list do |args|
@@ -215,9 +222,7 @@ format :html do
215
222
  end
216
223
  end
217
224
 
218
- view :editor do |args|
219
- text_area :content, :rows=>5, "data-card-type-code"=>card.type_code
220
- end
225
+ view :editor, :mod=>Html::HtmlFormat
221
226
 
222
227
  view :no_search_results do |args|
223
228
  %{<div class="search-no-results"></div>}