moduleApplicationHelperincludeAdmin::RegionsHelperdeftrusty_configTrustyCms::Configenddefdefault_page_titletitle+' - '+subtitleenddeftitletrusty_config['admin.title']||'Trusty CMS'enddefsubtitletrusty_config['admin.subtitle']||'Publishing for Small Teams'enddeflogged_in?!current_user.nil?enddefonsubmit_status(model)model.new_record??t('creating_status',:model=>t(model.class.name.downcase)):"#{I18n.t('saving_changes')}…"enddefsave_model_button(model,options={})model_name=model.class.name.underscorehuman_model_name=model_name.humanize.titlecaseoptions[:label]||=model.new_record??t('buttons.create',:name=>t(model_name,:default=>human_model_name),:default=>'Create '+human_model_name):t('buttons.save_changes',:default=>'Save Changes')options[:class]||="button"options[:accesskey]||='S'submit_tagoptions.delete(:label),optionsenddefsave_model_and_continue_editing_button(model)submit_tagt('buttons.save_and_continue'),:name=>'continue',:class=>'button',:accesskey=>"s"enddefcurrent_item?(item)ifitem.tab&&item.tab.many?{|i|current_url?(i.relative_url)}# Accept only stricter URL matches if more than one matchescurrent_page?(item.url)elsecurrent_url?(item.relative_url)endenddefcurrent_tab?(tab)@current_tab||=tabiftab.any?{|item|current_url?(item.relative_url)}@current_tab==tabenddefcurrent_url?(options)url=caseoptionswhenHashurl_foroptionselseoptions.to_send#TODO: look for other instances of request_urirequest.original_fullpath=~Regexp.new('^'+Regexp.quote(clean(url)))enddefclean(url)uri=URI.parse(url)uri.path.gsub(%r{/+},'/').gsub(%r{/$},'')enddefnav_link_to(name,options)ifcurrent_url?(options)%{<strong>#{link_totranslate_with_default(name),options}</strong>}elselink_totranslate_with_default(name),optionsendenddefadmin?current_userandcurrent_user.admin?enddefdesigner?current_userand(current_user.designer?orcurrent_user.admin?)enddefupdated_stamp(model)unlessmodel.new_record?updated_by=(model.updated_by||model.created_by)name=updated_by?updated_by.name:niltime=(model.updated_at||model.created_at)ifnameortimehtml=%{<p class="updated_line">#{t('timestamp.last_updated')} }html<<%{#{t('timestamp.by')} <strong>#{name}</strong> }ifnamehtml<<%{#{t('timestamp.at')}#{timestamp(time)}}iftimehtml<<%{</p>}html.html_safeendendenddeftimestamp(time)# time.strftime("%I:%M %p on %B %e, %Y").sub("AM", 'am').sub("PM", 'pm')I18n.localize(time,:format=>:timestamp)enddefmeta_visible(symbol)v=casesymbolwhen:meta_morenotmeta_errors?when:meta,:meta_lessmeta_errors?endv?{}:{:style=>"display: none"}enddefmeta_errors?falseenddefmeta_labelmeta_errors??'Less':'More'enddefimage(name,options={})image_tag(append_image_extension("admin/#{name}"),options)enddefimage_submit(name,options={})image_submit_tag(append_image_extension("admin/#{name}"),options)enddefadminTrustyCms::AdminUI.instanceenddeffilter_options_for_select(selected=nil)options_for_select([[t('select.none'),'']]+TextFilter.descendants_names,selected)enddefbody_classes@body_classes||=[]enddefnav_tabsadmin.navenddeftranslate_with_default(name)t(name.underscore.downcase,:default=>name)enddefavailable_locales_select[[t('select.default'),'']]+TrustyCms::AvailableLocales.localesenddefstylesheet_overridesoverrides=[]ifFile.exist?("#{Rails.root}/public/stylesheets/admin/overrides.css")||File.exist?("#{Rails.root}/public/stylesheets/sass/admin/overrides.sass")overrides<<'admin/overrides'endoverridesenddefjavascript_overridesoverrides=[]ifFile.exist?("#{Rails.root}/public/javascripts/admin/overrides.js")overrides<<'admin/overrides'endoverridesend# Returns a Gravatar URL associated with the email parameter.# See: http://douglasfshearer.com/blog/gravatar-for-ruby-and-ruby-on-railsdefgravatar_url(email,options={})# Default to highest rating. Rating can be one of G, PG, R X.options[:rating]||="G"# Default size of the image.options[:size]||="32px"# Default image url to be used when no gravatar is found# or when an image exceeds the rating parameter.local_avatar_url="/images/admin/avatar_#{([options[:size].to_i]*2).join('x')}.png"default_avatar_url="#{request.protocol}#{request.host_with_port}#{ActionController::Base.relative_url_root}#{local_avatar_url}"options[:default]||=default_avatar_urlunlessemail.blank?# Build the Gravatar url.url='//gravatar.com/avatar/'url<<"#{Digest::MD5.new.update(email)}?"url<<"rating=#{options[:rating]}"ifoptions[:rating]url<<"&size=#{options[:size]}"ifoptions[:size]url<<"&default=#{options[:default]}"ifoptions[:default]# Test the Gravatar urlrequire'open-uri'begin;open"http:#{url}",:proxy=>truerescue;local_avatar_urlelse;urlendelselocal_avatar_urlendend# returns the usual set of pagination links.# options are passed through to will_paginate# and a 'show all' depagination link is added if relevant.defpagination_for(list,options={})iflist.respond_to?:total_pagesoptions={:max_per_page=>@trusty_config['pagination.max_per_page']||500,:depaginate=>true}.merge(options.symbolize_keys)depaginate=options.delete(:depaginate)# supply :depaginate => false to omit the 'show all' linkdepagination_limit=options.delete(:max_per_page)# supply :max_per_page => false to include the 'show all' link no matter how large the collectionhtml=will_paginate(list,will_paginate_options.merge(options))ifdepaginate&&list.total_pages>1&&(!depagination_limit.blank?||list.total_entries<=depagination_limit.to_i)html<<content_tag(:div,link_to(t('show_all'),:pp=>'all'),:class=>'depaginate')elsifdepaginate&&list.total_entries>depagination_limit.to_ihtml=content_tag(:div,link_to("paginate",:p=>1),:class=>'pagination')endhtmlendendprivatedefappend_image_extension(name)unlessname=~/\.(.*?)$/name+'.png'elsenameendendend