application_helper.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:7k
源码类别:

Ajax

开发平台:

Others

  1. # The methods added to this helper will be available to all templates in the application.
  2. require 'digest/sha1'
  3. module ApplicationHelper
  4.   # Basic english pluralizer.
  5.   # Axe?
  6.   def pluralize(size, zero, one , many )
  7.     case size
  8.     when 0 then zero
  9.     when 1 then one
  10.     else        sprintf(many, size)
  11.     end
  12.   end
  13.   # Produce a link to the permalink_url of 'item'.
  14.   def link_to_permalink(item, title, anchor=nil, style=nil, nofollow=nil)
  15.     anchor = "##{anchor}" if anchor
  16.     class_attr = "class="#{style}"" if style
  17.     rel_attr = "rel="#{nofollow}"" if nofollow
  18.     "<a href="#{item.permalink_url}#{anchor}" #{rel_attr} #{class_attr}>#{title}</a>"
  19.   end
  20.   # The '5 comments' link from the bottom of articles
  21.   def comments_link(article)
  22.     link_to_permalink(article,pluralize(article.published_comments.size, _('no comments') , _('1 comment'), __('%d comments')),'comments')
  23.   end
  24.   def trackbacks_link(article)
  25.     link_to_permalink(article,pluralize(article.published_trackbacks.size, _('no trackbacks') , _('1 trackback'), __('%d trackbacks')),'trackbacks')
  26.   end
  27.   def check_cache(aggregator, *args)
  28.     hash = "#{aggregator.to_s}_#{args.collect { |arg| Digest::SHA1.hexdigest(arg) }.join('_') }".to_sym
  29.     controller.cache[hash] ||= aggregator.new(*args)
  30.   end
  31.   def js_distance_of_time_in_words_to_now(date)
  32.     time = _(date.utc.strftime(_("%%a, %%d %%b %%Y %%H:%%M:%%S GMT", date.utc)))
  33.     timestamp = date.utc.to_i ;
  34.     "<span class="typo_date date gmttimestamp-#{timestamp}" title="#{time}" >#{time}</span>"
  35.   end
  36.   def meta_tag(name, value)
  37.     tag :meta, :name => name, :content => value unless value.blank?
  38.   end
  39.   def date(date)
  40.     "<span class="typo_date">" + date.utc.strftime(_("%%d. %%b", date.utc)) + "</span>"
  41.   end
  42.   def render_theme(options)
  43.     options[:controller]=Themes::ThemeController.active_theme_name
  44.     render_component(options)
  45.   end
  46.   def toggle_effect(domid, true_effect, true_opts, false_effect, false_opts)
  47.     "$('#{domid}').style.display == 'none' ? new #{false_effect}('#{domid}', {#{false_opts}}) : new #{true_effect}('#{domid}', {#{true_opts}}); return false;"
  48.   end
  49.   def markup_help_popup(markup, text)
  50.     if markup and markup.commenthelp.size > 1
  51.       "<a href="#{url_for :controller => :articles, :action => 'markup_help', :id => markup.id}" onclick="return popup(this, 'Typo Markup Help')">#{text}</a>"
  52.     else
  53.       ''
  54.     end
  55.   end
  56.   def onhover_show_admin_tools(type, id = nil)
  57.     tag = []
  58.     tag << %{ onmouseover="if (getCookie('typo_user_profile') == 'admin') { Element.show('admin_#{[type, id].compact.join('_')}'); }" }
  59.     tag << %{ onmouseout="Element.hide('admin_#{[type, id].compact.join('_')}');" }
  60.     tag
  61.   end
  62.   def render_flash
  63.     output = []
  64.     for key,value in flash
  65.       output << "<span class="#{key.to_s.downcase}">#{h(value)}</span>"
  66.     end if flash
  67.     output.join("<br />n")
  68.   end
  69.   
  70.   # Generate the image tag for a commenters gravatar based on their email address
  71.   # Valid options are described at http://www.gravatar.com/implement.php
  72.   def gravatar_tag(email, options={})
  73.     options.update(:gravatar_id => Digest::MD5.hexdigest(email.strip))
  74.     options[:default] = CGI::escape(options[:default]) if options.include?(:default)
  75.     options[:size] ||= 60
  76.     image_tag("http://www.gravatar.com/avatar.php?" <<
  77.       options.map { |key,value| "#{key}=#{value}" }.sort.join("&"), :class => "gravatar")
  78.   end
  79.   def feed_title
  80.     case
  81.     when @feed_title
  82.       return @feed_title
  83.     when (@page_title and not @page_title.blank?)
  84.       return "#{this_blog.blog_name} : #{@page_title}"
  85.     else
  86.       return this_blog.blog_name
  87.     end
  88.   end
  89.   def html(content, what = :all, deprecated = false)
  90.     content.html(what)
  91.   end
  92.   def author_link(article)
  93.     if this_blog.link_to_author and article.user and article.user.email.to_s.size>0
  94.       "<a href="mailto:#{h article.user.email}">#{h article.user.name}</a>"
  95.     elsif article.user and article.user.name.to_s.size>0
  96.       h article.user.name
  97.     else
  98.       h article.author
  99.     end
  100.   end
  101.   def google_analytics
  102.     unless this_blog.google_analytics.empty?
  103.       <<-HTML
  104.       <script type="text/javascript">
  105.       var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
  106.       document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
  107.       </script>
  108.       <script type="text/javascript">
  109.       var pageTracker = _gat._getTracker("#{this_blog.google_analytics}");
  110.       pageTracker._trackPageview();
  111.       </script>
  112.       HTML
  113.     end
  114.   end
  115.   def javascript_include_lang
  116.     javascript_include_tag "lang/#{Localization.lang.to_s}" if File.exists? File.join(RAILS_ROOT, 'public', 'lang', Localization.lang.to_s)    
  117.   end
  118.   def page_header
  119.     page_header_includes = contents.collect { |c| c.whiteboard }.collect do |w|
  120.       w.select {|k,v| k =~ /^page_header_/}.collect do |(k,v)|
  121.         v = v.chomp
  122.         # trim the same number of spaces from the beginning of each line
  123.         # this way plugins can indent nicely without making ugly source output
  124.         spaces = /A[ t]*/.match(v)[0].gsub(/t/, "  ")
  125.         v.gsub!(/^#{spaces}/, '  ') # add 2 spaces to line up with the assumed position of the surrounding tags
  126.       end
  127.     end.flatten.uniq
  128.     (
  129.     <<-HTML
  130.   <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  131.   #{ meta_tag 'ICBM', this_blog.geourl_location unless this_blog.geourl_location.blank? }
  132.   #{ meta_tag 'description', @description unless @description.blank? }
  133.   #{ meta_tag 'robots', 'noindex, follow' unless @noindex.nil? }
  134.   <meta name="generator" content="Typo #{TYPO_VERSION}" />
  135.   #{ meta_tag 'keywords', @keywords unless @keywords.blank? }
  136.   <link rel="EditURI" type="application/rsd+xml" title="RSD" href="#{ url_for :controller => '/xml', :action => 'rsd' }" />
  137.   <link rel="alternate" type="application/atom+xml" title="Atom" href="#{ feed_atom }" />
  138.   <link rel="alternate" type="application/rss+xml" title="RSS" href="#{ feed_rss }" />
  139.   #{ javascript_include_tag 'cookies', 'prototype', 'effects', 'builder', 'typo', :cache => true }
  140.   #{ stylesheet_link_tag 'coderay', 'user-styles', :cache => true }
  141.   #{ javascript_include_lang }
  142.   #{ javascript_tag "window._token = '#{form_authenticity_token}'"}
  143.   #{ page_header_includes.join("n") }
  144.   <script type="text/javascript">#{ @content_for_script }</script>
  145.   #{ google_analytics }
  146.     HTML
  147.     ).chomp
  148.   end
  149.   def feed_atom
  150.     url_for(:format => :atom, :only_path => false)
  151.   end
  152.   def feed_rss
  153.     url_for(:format => :rss, :only_path => false)
  154.   end
  155.   def render_the_flash
  156.     return unless flash[:notice] or flash[:error]
  157.     the_class = flash[:error] ? 'ui-state-error' : 'ui-state-highlight'
  158.     the_icon = flash[:error] ? 'ui-icon-alert' : 'ui-icon-info'
  159.     
  160.     html = "<div class='ui-widget settings'>"
  161.     html << "<div class='#{the_class} ui-corner-all' style='padding: 0 .7em;'>" 
  162.     html << "<p><span class='ui-icon #{the_icon}' style='float: left; margin-right: .3em;'></span>"
  163.     html << render_flash rescue nil
  164.     html << "</div>"
  165.     html << "</div>"    
  166.   end
  167.   
  168. end