# Copyright (c) 2010, Diaspora Inc. This file is # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. module ApplicationHelper @@youtube_title_cache = Hash.new("no-title") def timeago(time, options = {}) options[:class] ||= "timeago" content_tag(:abbr, time.to_s, options.merge(:title => time.iso8601)) if time end def modern_browser? false end def page_title text=nil title = "" if text.blank? title = "#{current_user.name} | " if current_user else title = "#{text} | " end title += "DIASPORA*" end def aspects_with_post aspects, post aspects.select do |aspect| aspect.post_ids.include?(post.id) end end def aspects_without_post aspects, post aspects.reject do |aspect| aspect.post_ids.include?(post.id) end end def aspect_badges aspects str = '' aspects.each do |aspect| str << aspect_badge(aspect) end str.html_safe end def aspect_badge aspect str = "" str << link_for_aspect(aspect, 'data-guid' => aspect.id, :class => 'hard_aspect_link').html_safe str << "" end def aspect_links aspects, opts={} str = "" aspects.each do |aspect| str << '
  • ' str << link_for_aspect(aspect, :params => opts, 'data-guid' => aspect.id, :class => 'hard_aspect_link').html_safe str << '
  • ' end str.html_safe end def aspect_li aspect, opts= {} param_string = "" if opts.size > 0 param_string << '?' opts.each_pair do |k, v| param_string << "#{k}=#{v}" end end "
  • #{aspect.name}
  • ".html_safe end def current_aspect?(aspect) !@aspect.nil? && !@aspect.is_a?(Symbol) && @aspect.id == aspect.id end def aspect_or_all_path aspect if @aspect.is_a? Aspect aspect_path @aspect else aspects_path end end def object_path(object, opts = {}) return "" if object.nil? object = object.person if object.is_a? User eval("#{object.class.name.underscore}_path(object, opts)") end def object_fields(object) object.attributes.keys end def mine?(post) current_user.owns? post end def type_partial(post) class_name = post.class.name.to_s.underscore "#{class_name.pluralize}/#{class_name}" end def how_long_ago(obj) timeago(obj.created_at) end def person_url(person) case person.class.to_s when "User" user_path(person) when "Person" person_path(person) else I18n.t('application.helper.unknown_person') end end def profile_photo(person) person_image_link(person, :size => :thumb_large, :to => :photos) end def owner_image_tag(size=nil) person_image_tag(current_user.person, size) end def owner_image_link person_image_link(current_user.person) end def person_image_tag(person, size=:thumb_small) "\"#{h(person.name)}\"".html_safe end def person_link(person) " #{h(person.name)} ".html_safe end def hard_link(string, path) link_to string, path, :rel => 'external' end def person_image_link(person, opts = {}) return "" if person.nil? || person.profile.nil? if opts[:to] == :photos link_to person_image_tag(person, opts[:size]), person_photos_path(person) else " #{person_image_tag(person)} ".html_safe end end def post_yield_tag(post) (':' + post.id.to_s).to_sym end def markdownify(message, options = {}) message = h(message).html_safe if !options.has_key?(:newlines) options[:newlines] = true end message = process_links(message) message = process_youtube(message, options[:youtube_maps]) message = process_vimeo(message, options[:vimeo_maps]) message = process_autolinks(message) message = process_emphasis(message) if options[:newlines] message.gsub!(/\n+/, '
    ') end return message end def process_links(message) message.gsub!(/\[([^\[]+)\]\(([^ ]+) \"(([^&]|(&[^q])|(&q[^u])|(&qu[^o])|(&quo[^t])|("[^;]))+)\"\)/) do |m| escape = "\\" link = $1 url = $2 title = $3 url.gsub!("_", "\\_") url.gsub!("*", "\\*") protocol = (url =~ /^\w+:\/\//) ? '' :'http://' res = "#{link}" res end message.gsub!(/\[([^\[]+)\]\(([^ ]+)\)/) do |m| escape = "\\" link = $1 url = $2 url.gsub!("_", "\\_") url.gsub!("*", "\\*") protocol = (url =~ /^\w+:\/\//) ? '' :'http://' res = "#{link}" res end return message end def process_youtube(message, youtube_maps) regex = /( |^)(http:\/\/)?www\.youtube\.com\/watch[^ ]*v=([A-Za-z0-9_\-]+)(&[^ ]*|)/ while youtube = message.match(regex) video_id = youtube[3] if youtube_maps && youtube_maps[video_id] title = h(CGI::unescape(youtube_maps[video_id])) else title = I18n.t 'application.helper.video_title.unknown' end message.gsub!(youtube[0], 'Youtube: ' + title + '') end return message end def process_autolinks(message) message.gsub!(/( |^)(www\.[^\s]+\.[^\s])/, '\1http://\2') message.gsub!(/(#{$3}} res.gsub!(/(\*|_)/) { |m| "\\#{$1}" } res end end return message end def process_emphasis(message) message.gsub!("\\**", "-^doublestar^-") message.gsub!("\\__", "-^doublescore^-") message.gsub!("\\*", "-^star^-") message.gsub!("\\_", "-^score^-") message.gsub!(/(\*\*\*|___)(.+?)\1/m, '\2') message.gsub!(/(\*\*|__)(.+?)\1/m, '\2') message.gsub!(/(\*|_)(.+?)\1/m, '\2') message.gsub!("-^doublestar^-", "**") message.gsub!("-^doublescore^-", "__") message.gsub!("-^star^-", "*") message.gsub!("-^score^-", "_") return message end def process_vimeo(message, vimeo_maps) regex = /https?:\/\/(?:w{3}\.)?vimeo.com\/(\d{6,})/ while vimeo = message.match(regex) video_id = vimeo[1] if vimeo_maps && vimeo_maps[video_id] title = h(CGI::unescape(vimeo_maps[video_id])) else title = I18n.t 'application.helper.video_title.unknown' end message.gsub!(vimeo[0], 'Vimeo: ' + title + '') end return message end def info_text(text) image_tag 'icons/monotone_question.png', :class => 'what_is_this', :title => text end def get_javascript_strings_for(language) defaults = I18n.t('javascripts', :locale => DEFAULT_LANGUAGE) if language != DEFAULT_LANGUAGE translations = I18n.t('javascripts', :locale => language) defaults.update(translations) end defaults end end