hobo 1.3.0.pre19 → 1.3.0.pre20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/CHANGES.txt +282 -234
  2. data/VERSION +1 -1
  3. data/lib/generators/hobo/admin_subsite/templates/controller.rb.erb +5 -5
  4. data/lib/generators/hobo/assets/templates/dryml-support.js +2 -2
  5. data/lib/generators/hobo/i18n/templates/hobo.it.yml +1 -1
  6. data/lib/generators/hobo/rapid/templates/hobo-rapid.js +64 -64
  7. data/lib/generators/hobo/rapid/templates/ie7-recalc.js +21 -21
  8. data/lib/generators/hobo/rapid/templates/lowpro.js +31 -31
  9. data/lib/generators/hobo/rapid/templates/reset.css +1 -1
  10. data/lib/generators/hobo/rapid/templates/themes/clean/public/stylesheets/clean.css +15 -15
  11. data/lib/generators/hobo/rapid/templates/themes/clean/public/stylesheets/rapid-ui.css +3 -3
  12. data/lib/generators/hobo/rapid/templates/themes/clean/views/clean.dryml +1 -1
  13. data/lib/generators/hobo/setup_wizard/setup_wizard_generator.rb +15 -14
  14. data/lib/generators/hobo/subsite/templates/controller.rb.erb +1 -1
  15. data/lib/generators/hobo/user_controller/templates/controller.rb.erb +2 -2
  16. data/lib/hobo.rb +1 -0
  17. data/lib/hobo/controller.rb +6 -6
  18. data/lib/hobo/controller/authentication_support.rb +1 -1
  19. data/lib/hobo/controller/model.rb +10 -10
  20. data/lib/hobo/controller/user.rb +6 -6
  21. data/lib/hobo/engine.rb +6 -0
  22. data/lib/hobo/extensions/action_view/translation_helper.rb +20 -0
  23. data/lib/hobo/extensions/active_model/translation.rb +1 -1
  24. data/lib/hobo/extensions/i18n.rb +16 -0
  25. data/lib/hobo/helper.rb +2 -2
  26. data/lib/hobo/helper/translations.rb +61 -80
  27. data/lib/hobo/model/lifecycles/lifecycle.rb +5 -1
  28. data/lib/hobo/model/lifecycles/transition.rb +1 -0
  29. data/lib/hobo/rapid/generators/rapid/cards.dryml.erb +2 -2
  30. data/lib/hobo/rapid/generators/rapid/forms.dryml.erb +2 -2
  31. data/lib/hobo/rapid/generators/rapid/pages.dryml.erb +7 -7
  32. data/lib/hobo/rapid/taglibs/rapid.dryml +1 -1
  33. data/lib/hobo/rapid/taglibs/rapid_core.dryml +8 -8
  34. data/lib/hobo/rapid/taglibs/rapid_document_tags.dryml +2 -2
  35. data/lib/hobo/rapid/taglibs/rapid_forms.dryml +9 -9
  36. data/lib/hobo/rapid/taglibs/rapid_generics.dryml +1 -1
  37. data/lib/hobo/rapid/taglibs/rapid_i18n.dryml +0 -17
  38. data/lib/hobo/rapid/taglibs/rapid_lifecycles.dryml +5 -5
  39. data/lib/hobo/rapid/taglibs/rapid_navigation.dryml +1 -1
  40. data/lib/hobo/rapid/taglibs/rapid_plus.dryml +6 -6
  41. data/lib/hobo/rapid/taglibs/rapid_user_pages.dryml +8 -8
  42. data/test/permissions/test_permissions.rb +103 -103
  43. metadata +15 -14
  44. data/lib/hobo/rapid/taglibs/rapid_translations.dryml +0 -36
@@ -198,7 +198,7 @@ module Hobo
198
198
  timestamp = record.read_attribute(key_timestamp_field)
199
199
  if timestamp
200
200
  timestamp = timestamp.getutc
201
- Digest::SHA1.hexdigest("#{record.id}-#{state_name}-#{timestamp}")
201
+ Digest::SHA1.hexdigest("#{record.id}-#{state_name}-#{timestamp}-#{Rails.application.config.secret_token}")
202
202
  end
203
203
  end
204
204
 
@@ -211,6 +211,10 @@ module Hobo
211
211
  provided_key && provided_key == key && !key_expired?
212
212
  end
213
213
 
214
+ def clear_key
215
+ record.write_attribute key_timestamp_field, nil
216
+ end
217
+
214
218
  def invariants_satisfied?
215
219
  self.class.invariants.all? { |i| record.instance_eval(&i) }
216
220
  end
@@ -34,6 +34,7 @@ module Hobo
34
34
 
35
35
 
36
36
  def change_state(record)
37
+ record.lifecycle.clear_key unless options[:new_key] || options[:keep_key]
37
38
  record.lifecycle.become(get_state(record, end_state))
38
39
  end
39
40
 
@@ -19,7 +19,7 @@ has_body = (!show_link && description_attribute) || creator_link || creator_a
19
19
 
20
20
  show_title = !show_link && (name_attribute || !has_body)
21
21
 
22
- model_key = model.name.pluralize.underscore
22
+ model_key = model.to_s.underscore
23
23
  -%>
24
24
  <def tag="card" for="<%= model.name %>">
25
25
  <card class="<%= model_class %>" param="default" merge>
@@ -53,7 +53,7 @@ model_key = model.name.pluralize.underscore
53
53
  <view:<%= creator_attribute %> param="creator"/>
54
54
  <% end -%>
55
55
  <% if primary_collection -%>
56
- <ht key="<%= primary_collection.to_s.pluralize.underscore %>.collection.count" count="&this.<%= primary_collection %>.size">
56
+ <ht key="<%= primary_collection.to_s.underscore %>.collection.count" count="&this.<%= primary_collection %>.size">
57
57
  <count:<%= primary_collection%> param/>
58
58
  </ht>
59
59
  <% end -%>
@@ -4,7 +4,7 @@ form_fields = standard_fields :belongs_to, :has_many
4
4
 
5
5
  cancel_to_show_page = linkable?(:show)
6
6
  cancel_to_index_page = !cancel_to_index_page && linkable?(:index)
7
- model_key = model.name.tableize
7
+ model_key = model.to_s.underscore
8
8
  -%>
9
9
  <def tag="form" for="<%= model.name %>">
10
10
  <form merge param="default">
@@ -43,4 +43,4 @@ model_key = model.name.tableize
43
43
  </def>
44
44
  <% end -%>
45
45
 
46
- <% end # of each_model do -%>
46
+ <% end # of each_model do -%>
@@ -4,7 +4,7 @@
4
4
  <navigation class="main-nav" merge-attrs param="default">
5
5
  <nav-item href="#{base_url}/">Home</nav-item>
6
6
  <% models.select { |m| linkable?(m, :index) }[0..4].each do |m| -%>
7
- <nav-item with="&<%= m.name %>"><ht key="<%= m.name.tableize %>.nav_item" count="100"><model-name-human count="100"/></ht></nav-item>
7
+ <nav-item with="&<%= m.name %>"><ht key="<%= m.to_s.underscore %>.nav_item" count="100"><model-name-human count="100"/></ht></nav-item>
8
8
  <% end -%>
9
9
  </navigation>
10
10
  </def>
@@ -17,7 +17,7 @@
17
17
  <%
18
18
  new_link = linkable?(:new)
19
19
  new_form = !new_link && linkable?(model, :create, :method => :post)
20
- model_key = model.name.tableize
20
+ model_key = model.to_s.underscore
21
21
  -%>
22
22
 
23
23
  <def tag="index-page" for="<%= model.name %>">
@@ -177,7 +177,7 @@ end
177
177
  <% if collection -%>
178
178
  <section param="collection-section">
179
179
  <h3 param="collection-heading">
180
- <ht key="<%= collection.to_s.tableize %>.collection.heading" count="&this.<%= collection.to_s %>.count" >
180
+ <ht key="<%= collection.to_s.underscore %>.collection.heading" count="&this.<%= collection.to_s %>.count" >
181
181
  <human-collection-name collection="<%= collection %>" your/>
182
182
  </ht>
183
183
  </h3>
@@ -190,7 +190,7 @@ end
190
190
  <% if add_link -%>
191
191
 
192
192
  <a:<%= collection %> action="new" if="&can_create?(@<%= model.name.underscore %>.<%= collection %>)" param="new-link">
193
- <ht key="<%= collection.to_s.tableize %>.actions.new" count="1">
193
+ <ht key="<%= collection.to_s.underscore %>.actions.new" count="1">
194
194
  New <%= collection.to_s.singularize.titleize %>
195
195
  </ht>
196
196
  </a:<%= collection %>>
@@ -198,13 +198,13 @@ end
198
198
 
199
199
  <section param="add-to-collection" if="&can_create?(@<%= model.name.underscore %>.<%= collection %>)">
200
200
  <h3 param="add-form-heading">
201
- <ht key="<%= collection.to_s.pluralize %>.collection.add_form_heading" count="1">
201
+ <ht key="<%= collection.to_s.underscore %>.collection.add_form_heading" count="1">
202
202
  Add <%= a_or_an collection.to_s.singularize.titleize %>
203
203
  </ht>
204
204
  </h3>
205
205
  <form with="&@<%= collection_class.name.underscore %> || new_for_current_user(@<%= model.name.underscore %>.<%= collection %>)" owner="<%= owner %>" without-cancel param>
206
206
  <field-list: skip="<%= owner %>"/>
207
- <submit: label="#{ht '<%= sq_escape collection.to_s.pluralize %>.actions.add', :default=>['Add'] }"/>
207
+ <submit: label="#{ht '<%= sq_escape collection.to_s.underscore %>.actions.add', :default=>['Add'] }"/>
208
208
  </form>
209
209
  </section>
210
210
  <% end -%>
@@ -223,7 +223,7 @@ end
223
223
  <% else -%>
224
224
  <section param="<%= refl.name %>-collection-section">
225
225
  <h3 param="<%= refl.name %>-collection-heading">
226
- <ht key="<%= refl.name.to_s.tableize %>.collection.heading" count="&this.<%= refl.name.to_s %>.count" >
226
+ <ht key="<%= refl.klass.to_s.underscore %>.collection.heading" count="&this.<%= refl.name.to_s %>.count" >
227
227
  <human-collection-name collection="<%= refl.name %>" your/>
228
228
  </ht>
229
229
  </h3>
@@ -1,6 +1,6 @@
1
1
  <!--
2
2
 
3
- The Rapid tag library makes web development go fast. The Rapid tag library is your friend.
3
+ The Rapid tag library makes web development go fast. The Rapid tag library is your friend.
4
4
 
5
5
  (This taglib defines no tags - it just includes all the other taglibs. Move along. Nothing to see here.)
6
6
 
@@ -493,7 +493,7 @@ Assuming the context is a blog post...
493
493
  %></def>
494
494
 
495
495
  <!-- Renders 'Yes' for true and 'No' for false -->
496
- <def tag="view" for="boolean"><%= this ? I18n.t('hobo.boolean_yes', :default => 'Yes') : I18n.t('hobo.boolean_no', :default => 'No') %></def>
496
+ <def tag="view" for="boolean"><%= this ? t('hobo.boolean_yes', :default => 'Yes') : t('hobo.boolean_no', :default => 'No') %></def>
497
497
 
498
498
  <!-- Renders a link (`<a>`) to `this` -->
499
499
  <def tag="view" for="ActiveRecord::Base"><a merge-attrs/></def>
@@ -591,7 +591,7 @@ You can pass a summary attribute, which will generate a complete localized sente
591
591
  else
592
592
  key = summary.kind_of?(String) ? summary : "default"
593
593
  default = c == 1 ? "There is 1 #{label}" : "There are #{c} #{label}"
594
- I18n.t "tags.count.#{key}", {:count=>c, :label=>label, :default=>default}.merge(attributes)
594
+ t "tags.count.#{key}", {:count=>c, :label=>label, :default=>default}.merge(attributes)
595
595
  end
596
596
  end
597
597
  %></span></def>
@@ -661,12 +661,12 @@ The "titleize" attribute is deprecated: use "capitalize" instead.
661
661
  when attributes[:do] then 'do'
662
662
  end -%>
663
663
  <if test="&this == current_user">
664
- <%= s = I18n.t("tags.you.current_user.#{k || attributes.keys.first || 'default'}",:default=>"you #{k}")
664
+ <%= s = t("tags.you.current_user.#{k || attributes.keys.first || 'default'}",:default=>"you #{k}")
665
665
  (titleize||capitalize) ? s.sub(/^./){|c| c.upcase} : s %>
666
666
  </if>
667
667
  <else>
668
668
  <do param="default">
669
- <%= s = I18n.t("tags.you.other_user.#{k || attributes.keys.first || 'default'}", :name=>this.name,
669
+ <%= s = t("tags.you.other_user.#{k || attributes.keys.first || 'default'}", :name=>this.name,
670
670
  :default=>"#{this.name} #{'has' if attributes[:have]}#{'is' if attributes[:are]}#{'does' if attributes[:do]}")
671
671
  (titleize||capitalize) ? s.sub(/^./){|c| c.upcase} : s %>
672
672
  </do>
@@ -738,14 +738,14 @@ Notes
738
738
  options = {:default=>[d], :count=>(attrs[:count]||1), :name=>this.name}
739
739
  your_key = key.split('.').last
740
740
  unless key.eql?(your_key) || attrs.has_key?(your_key.to_sym)
741
- options[your_key.to_sym] = I18n.t(key, :count=>options[:count], :default=>your_key.titleize)
741
+ options[your_key.to_sym] = t(key, :count=>options[:count], :default=>your_key.titleize)
742
742
  end
743
743
  s = if this == current_user
744
744
  options[:default].unshift :"tags.your.default.current_user"
745
- I18n.t("tags.your.#{your_key}.current_user", options.merge(attrs))
745
+ t("tags.your.#{your_key}.current_user", options.merge(attrs))
746
746
  else
747
747
  options[:default].unshift :"tags.your.default.other_user"
748
- I18n.t("tags.your.#{your_key}.other_user", options.merge(attrs))
748
+ t("tags.your.#{your_key}.other_user", options.merge(attrs))
749
749
  end
750
750
  capitalize ? s.sub(/^./){|c| c.upcase} : s
751
751
  %></def>
@@ -774,7 +774,7 @@ Notes
774
774
  <def tag="dev-user-changer">
775
775
  <set user="&Hobo::Model::User.default_user_model"/>
776
776
  <select-menu if="&user && Rails.env.development?"
777
- first-option="#{I18n.t('hobo.dev_user_changer.guest', {:default=>'Guest'})}" options="&user.all(:limit => 30).*.login"
777
+ first-option="#{t('hobo.dev_user_changer.guest', {:default=>'Guest'})}" options="&user.all(:limit => 30).*.login"
778
778
  onchange="location.href = '#{dev_support_path :action=>:set_current_user}?login=' + encodeURIComponent(this.options[this.selectedIndex].value)"
779
779
  selected="#{current_user.login}"
780
780
  class="dev-user-changer"
@@ -1,6 +1,6 @@
1
1
  <!-- Extra tags for semantic markup -->
2
2
 
3
- <!-- Used as a semantic wrapper around a group of sections and asides. CSS layouts can be provided based on this structure.
3
+ <!-- Used as a semantic wrapper around a group of sections and asides. CSS layouts can be provided based on this structure.
4
4
 
5
5
  ### Usage
6
6
 
@@ -13,7 +13,7 @@
13
13
  <def tag="section-group"><div class="section-group"><div class="section-group-inner" merge-attrs param="default"></div></div></def>
14
14
 
15
15
  <!-- A proposed HTML 5 tag for representing a generic document or application section. Slightly more semantic than `<div>` for indicating document structure. For the time being, `<section>` is output as `<div class="section">`. In Hobo, `<section>` also has one other important behaviour which is different to using `<div>` directly, when the content of the section is empty, the wrapper tag will disappear. e.g.
16
-
16
+
17
17
  <section>My Section</section> -> <div class="section">My Section</div>
18
18
  <section><% # empty %></section> -> (nothing is generated)
19
19
  -->
@@ -575,8 +575,8 @@ All the standard ajax attributes *except the callbacks* are supported (see the m
575
575
  else
576
576
  { :type => "button" }
577
577
  end)
578
- label ||= I18n.t("hobo.actions.remove", :default=>"Remove")
579
- confirm = I18n.t("hobo.messages.confirm", :default=>"Are you sure?") if confirm.nil?
578
+ label ||= t("hobo.actions.remove", :default=>"Remove")
579
+ confirm = t("hobo.messages.confirm", :default=>"Are you sure?") if confirm.nil?
580
580
 
581
581
  add_classes!(attributes,
582
582
  image ? "image-button" : "button",
@@ -623,7 +623,7 @@ All of the standard ajax attributes are supported (see the main taglib documenti
623
623
  new = class_or_assoc.new(fields)
624
624
  new.set_creator(current_user)
625
625
  if can_create?(new)
626
- label ||= ht("#{new.class.name.tableize}.actions.new", :default=>"New #{new.class.model_name.human}")
626
+ label ||= ht("#{new.class.to_s.underscore}.actions.new", :default=>"New #{new.class.model_name.human}")
627
627
  ajax_attributes = { :message => message }
628
628
  class_name = new.class.name.underscore
629
629
  ajax_attributes[:params] = { class_name => fields } unless fields.empty?
@@ -652,7 +652,7 @@ For situations where there are too many target records to practically include in
652
652
 
653
653
  -->
654
654
  <def tag="select-one" attrs="include-none, blank-message, options, sort, limit, text-method"><%
655
- raise Hobo::PermissionDeniedError.new("Not allowed to edit #{this_field}") if !attributes[:disabled] && !can_edit?
655
+ raise Hobo::PermissionDeniedError.new("Not allowed to edit #{this_field}") if !attributes[:disabled] && !can_edit?
656
656
  blank_message ||= ht("#{this_type.name.tableize}.message.no", :default=>"(No #{this_type.model_name.human})")
657
657
  limit ||= 100
658
658
 
@@ -783,7 +783,7 @@ If you wish to set `min-chars` to 0, you will require this [patch to controls.js
783
783
  <h2 param="heading"><t key="activerecord.errors.template.header" model="&this.class.model_name.human" count="&this.errors.size"/></h2>
784
784
  <t key="activerecord.errors.template.body"></t>
785
785
  <ul param>
786
- <% this.errors.each_full do |message| -%>
786
+ <% this.errors.to_a.each do |message| -%>
787
787
  <li param><%= message %></li>
788
788
  <% end -%>
789
789
  </ul>
@@ -797,12 +797,12 @@ An input for `has_many :through` associations that lets the user chose the items
797
797
  To use this tag, the model of the items the user is chosing *must* have unique names, and the
798
798
  -->
799
799
  <def tag="select-many" attrs="options, targets, remove-label, prompt, disabled, name"><%
800
- prompt ||= ht("#{this_field.tableize}.form.select_many.prompt", :default=>"Add #{this_field.titleize.singularize}")
800
+ prompt ||= ht("#{this_field.underscore}.form.select_many.prompt", :default=>"Add #{this_field.titleize.singularize}")
801
801
  options ||= this_field_reflection.klass.all(:conditions =>this.send(:conditions)).select {|x| can_view?(x)}
802
802
  name ||= param_name_for_this
803
803
 
804
804
  values = this
805
- remove_label ||= I18n.t("hobo.actions.remove", :default=>'Remove')
805
+ remove_label ||= t("hobo.actions.remove", :default=>'Remove')
806
806
  -%>
807
807
  <div class="input select-many" merge-attrs>
808
808
  <div style="display:none" class="item-proto">
@@ -883,7 +883,7 @@ Use the `uri` option to specify a redirect location:
883
883
  <def tag="select-menu" attrs="options, selected, first-option, first-value, key">
884
884
  <% key ||= 'default'
885
885
  %w[options first_option first_value].each do |a|
886
- str = I18n.t("tags.select_menu.#{key}.#{a}", :default=>'')
886
+ str = t("tags.select_menu.#{key}.#{a}", :default=>'')
887
887
  eval "#{a} = str unless str.blank?"
888
888
  end
889
889
  -%>
@@ -1026,7 +1026,7 @@ end
1026
1026
  <input type="hidden" class="empty-input" id="#{underize param_name_for_this}" name="#{param_name_for_this}" value="" disabled="&(!this.empty? || minimum>0)" />
1027
1027
  <fake-field-context fake-field="-1" context="&template">
1028
1028
  <div param="empty-message">
1029
- <ht key="#{this.class.name.tableize}.collection.empty_message">
1029
+ <ht key="#{this.class.to_s.underscore}.collection.empty_message">
1030
1030
  No <%= this.class.name.titleize.downcase.pluralize %>.
1031
1031
  </ht>
1032
1032
  </div>
@@ -20,7 +20,7 @@
20
20
  <def tag="empty-collection-message">
21
21
  <unless test="&this.member_class.nil?">
22
22
  <div class="empty-collection-message" style="#{'display:none' if !this.empty?}" param="default">
23
- <ht key="#{this.member_class.name.tableize}.collection.empty_message">
23
+ <ht key="#{this.member_class.to_s.underscore}.collection.empty_message">
24
24
  No <collection-name/> to display
25
25
  </ht>
26
26
  </div>
@@ -1,22 +1,5 @@
1
1
  <!-- Rapid i18n provides tags related with the Rails-I18n project -->
2
2
 
3
- <!-- Simple wrapper around I18n.t.
4
- The tag content is used as the :default option. It is overridden by an explicit 'default' attribute.
5
- There is a default :count => 1
6
-
7
- ### Attributes
8
-
9
- - key: the key to lookup
10
- - all the attributes accepted by the wrapped method
11
-
12
- -->
13
- <def tag="t"><%=
14
- options = {}
15
- all_attributes.each_pair{|k,v| options[k.to_sym] = h(v)}
16
- k = options.delete(:key)
17
- I18n.t(k, {:default=>all_parameters.default}.merge(options)).html_safe
18
- %></def>
19
-
20
3
  <!-- Wrapper around ActiveModel::Name#human
21
4
 
22
5
  #### Attributes
@@ -1,14 +1,14 @@
1
1
  <!-- Contains view-layer support for Hobo's lifecycles. Note that lifecycle forms are generated automatically in `app/views/taglibs/auto/rapid/forms.dryml` - this library contains only lifecycle push-buttons. -->
2
2
 
3
3
  <!-- A push-button to invoke a lifecycle transition either as a page-reload or as an ajax call.
4
-
4
+
5
5
  ### Attributes
6
6
 
7
7
  - `transition` - the name of the transition to invoke. Required
8
8
  - `update` - one or more DOM IDs of ajax parts to update after the transition
9
9
  - `label` - the label on the button. Defaults to the name of the transition
10
10
 
11
- All of the [standard ajax attributes](/api_taglibs/rapid_forms) are also supported.
11
+ All of the [standard ajax attributes](/api_taglibs/rapid_forms) are also supported.
12
12
 
13
13
  ### Warning
14
14
 
@@ -25,7 +25,7 @@ Transitions with parameters are implemented using a form. HTML does not allow f
25
25
 
26
26
  html_attributes[:method] ||= has_params ? :get : :put
27
27
  add_classes!(html_attributes, "transition-button #{transition_name}-button")
28
- label = ht("#{this.class.name.tableize}.actions.#{transition_name}", :default => (label || transition_name.to_s.titleize))
28
+ label = ht("#{this.class.to_s.underscore}.actions.#{transition_name}", :default => (label || transition_name.to_s.titleize))
29
29
  url = object_url(this, transition_name, :method => html_attributes[:method])
30
30
 
31
31
  if (update || !ajax_attributes.empty?) && !has_params
@@ -48,7 +48,7 @@ For example, you could use this on a `Friendship` card: the person invited to ha
48
48
  This tag behaves similarly to repeat: an else tag may be used to handle the case of no buttons:
49
49
 
50
50
  <transition-buttons/><else>Sorry, no buttons to press.</else>
51
- -->
51
+ -->
52
52
  <def tag="transition-buttons">
53
53
  <% ajax_attrs, html_attrs = attributes.partition_hash(Hobo::Rapid::Helper::AJAX_ATTRS) %>
54
54
  <div merge-attrs="&html_attrs" class="transitions">
@@ -59,4 +59,4 @@ This tag behaves similarly to repeat: an else tag may be used to handle the case
59
59
  <% end %>
60
60
  </if>
61
61
  </div>
62
- </def>
62
+ </def>
@@ -89,7 +89,7 @@ This is a simple tag - just look at the source if you need to know more detail.
89
89
  <ul class="navigation account-nav" param>
90
90
  <li if="&Rails.env.development?" param="dev-user-changer"><dev-user-changer/></li>
91
91
  <if test="&logged_in?">
92
- <li class='nav-item' param="logged-in-as"><a to="&current_user"><t key="hobo.actions.logged_in_as" name="&name.html_safe">Logged in as <name/></t></a></li>
92
+ <li class='nav-item' param="logged-in-as"><a to="&current_user"><t key="hobo.actions.logged_in_as_html" name="&name">Logged in as <name/></t></a></li>
93
93
  <li class='nav-item' param="account"><a action="account"><t key="hobo.actions.account">Account</t></a></li>
94
94
  <li class='nav-item' param="log-out"><a href="&logout_url"><t key="hobo.actions.logout">Log out</t></a></li>
95
95
  </if>
@@ -17,7 +17,7 @@ An [worked example](/tutorials/agility#improve_the_project_page_with_a_searchabl
17
17
  <hidden-fields for-query-string skip="page, search"/>
18
18
  <span><t key="hobo.table_plus.search">Search</t></span>
19
19
  <input class="search" type="search" name="search" value="&params[:search]"/>
20
- <submit label="&I18n.t('hobo.table_plus.submit_label', :default=>'Go')" class="search-button" param="search-submit"/>
20
+ <submit label="&t('hobo.table_plus.submit_label', :default=>'Go')" class="search-button" param="search-submit"/>
21
21
  </form>
22
22
  </div>
23
23
  </div>
@@ -105,16 +105,16 @@ This tag assumes the controller has a `reorder` action and the model has a `posi
105
105
  name ||= model_class.name.downcase.pluralize -%>
106
106
  <section class="#{name.dasherize} collection-preview" param="default">
107
107
  <h3 param="heading">
108
- <ht key="#{name.to_s.tableize}.collection.heading" count="&this.size">
108
+ <ht key="#{model_class.to_s.underscore}.collection.heading" count="&this.size">
109
109
  <do param="heading-content"><%= name.pluralize.titleize %></do>
110
110
  </ht>
111
111
  </h3>
112
112
  <a with="&model_class" action="new" if="&can_create?(model_class.new)" param="new-link">
113
- <ht key="#{model_class.to_s.tableize}.actions.new">New <%= model_class.model_name.human %></ht>
113
+ <ht key="#{model_class.to_s.underscore}.actions.new">New <%= model_class.model_name.human %></ht>
114
114
  </a>
115
115
  <collection param/>
116
116
  <unless test="&this.empty? || this.size <= model_class.count">
117
- <a param="show-all"><ht key="#{model_class.to_s.tableize}.actions.show_all" count="100">Show all <%= name.pluralize.titleize %>...</ht></a>
117
+ <a param="show-all"><ht key="#{model_class.to_s.underscore}.actions.show_all" count="100">Show all <%= name.pluralize.titleize %>...</ht></a>
118
118
  </unless>
119
119
  </section>
120
120
  </def>
@@ -210,9 +210,9 @@ Besides the "tags.filter_menu.default.no_filter" key is used as default of the a
210
210
 
211
211
  -->
212
212
  <def tag="filter-menu" attrs="param-name, options, no-filter, id">
213
- <% opt = I18n.t("tags.filter_menu.#{param_name}.options", :default=>'')
213
+ <% opt = t("tags.filter_menu.#{param_name}.options", :default=>'')
214
214
  options = opt unless opt.blank?
215
- no_filter = I18n.t("tags.filter_menu.#{param_name}.no_filter", :default=>[:"tags.filter_menu.default.no_filter", no_filter, "All"]) %>
215
+ no_filter = t("tags.filter_menu.#{param_name}.no_filter", :default=>[:"tags.filter_menu.default.no_filter", no_filter, "All"]) %>
216
216
  <form action="&request.fullpath" method="get" class="filter-menu" merge-attrs="id">
217
217
  <div>
218
218
  <% opt = options.first.kind_of?(Array) ? options.*.last : options
@@ -39,7 +39,7 @@
39
39
  </labelled-item>
40
40
  </labelled-item-list>
41
41
  <div param="actions">
42
- <submit label="#{I18n.t 'hobo.actions.login', :default=>['Log in'] }" param/><if test="&signup_url" class='nav-item'>
42
+ <submit label="#{t 'hobo.actions.login', :default=>['Log in'] }" param/><if test="&signup_url" class='nav-item'>
43
43
  <t key="hobo.support.or">or</t> <a param="signup" href="&signup_url"><t key="hobo.login.signup">Sign up</t></a></if>
44
44
  </div>
45
45
  </form>
@@ -48,7 +48,7 @@
48
48
  <!-- Simple log-in page -->
49
49
  <def tag="login-page">
50
50
  <% remember_me = true if remember_me.nil? %>
51
- <simple-page title="#{I18n.t 'hobo.login.title', :default=>['Log in'] }" merge>
51
+ <simple-page title="#{t 'hobo.login.title', :default=>['Log in'] }" merge>
52
52
 
53
53
  <body: class="login-page" param/>
54
54
 
@@ -69,7 +69,7 @@
69
69
  <!-- The page that initiates the forgotten password process. Contains a single text-input where the user can provide
70
70
  their email address -->
71
71
  <def tag="forgot-password-page">
72
- <simple-page title="#{I18n.t 'hobo.forgot_password.title', :default=>['Forgotten Password'] }" merge>
72
+ <simple-page title="#{t 'hobo.forgot_password.title', :default=>['Forgotten Password'] }" merge>
73
73
 
74
74
  <body: class="forgot-password-page" param/>
75
75
 
@@ -92,7 +92,7 @@
92
92
  </labelled-item>
93
93
  </labelled-item-list>
94
94
  <div param="actions">
95
- <submit label="#{I18n.t 'hobo.actions.send', :default=>['Send'] }" param/>
95
+ <submit label="#{t 'hobo.actions.send', :default=>['Send'] }" param/>
96
96
  </div>
97
97
  </form>
98
98
  </section>
@@ -105,7 +105,7 @@
105
105
  entered is in our records". This is to avoid a privacy concern that the forgotten-password mechanism can be otherwise used to tell
106
106
  if a given email is associated with an account or not. -->
107
107
  <def tag="forgot-password-email-sent-page">
108
- <simple-page title="#{I18n.t 'hobo.forgot_password_sent.title', :default=>['Forgotten Password - Sent'] }" merge>
108
+ <simple-page title="#{t 'hobo.forgot_password_sent.title', :default=>['Forgotten Password - Sent'] }" merge>
109
109
  <body: class="forgot-password-page" param/>
110
110
 
111
111
  <content: param>
@@ -132,7 +132,7 @@ if a given email is associated with an account or not. -->
132
132
  <!-- The page that is displayed on attempting to log in to an account that has been disabled. -->
133
133
  <def tag="account-disabled-page">
134
134
 
135
- <simple-page title="#{I18n.t 'hobo.account_disabled_page.title', :default=>['Account Disabled'] }" merge>
135
+ <simple-page title="#{t 'hobo.account_disabled_page.title', :default=>['Account Disabled'] }" merge>
136
136
 
137
137
  <body: class="account-disabled-page" param/>
138
138
 
@@ -153,7 +153,7 @@ if a given email is associated with an account or not. -->
153
153
  <!-- Basic account page that provides the ability for the user to change their email address and password. -->
154
154
  <def tag="account-page">
155
155
 
156
- <page title="#{I18n.t 'hobo.account_page.title', :default=>['Your Account'] }" merge>
156
+ <page title="#{t 'hobo.account_page.title', :default=>['Your Account'] }" merge>
157
157
 
158
158
  <body: class="user-account-page #{type_name}" param/>
159
159
 
@@ -171,7 +171,7 @@ if a given email is associated with an account or not. -->
171
171
  </field-list>
172
172
 
173
173
  <div class="actions" param="actions">
174
- <submit label="#{I18n.t 'hobo.actions.save_account', :default=>'Save'}" param/>
174
+ <submit label="#{t 'hobo.actions.save_account', :default=>'Save'}" param/>
175
175
  </div>
176
176
  </form>
177
177
  </section>