require_dependency 'inline_oneboxer' module PrettyText module Helpers extend self # functions here are available to v8 def t(key, opts) key = "js." + key unless opts I18n.t(key) else str = I18n.t(key, Hash[opts.entries].symbolize_keys).dup opts.each { |k, v| str.gsub!("{{#{k.to_s}}}", v.to_s) } str end end def avatar_template(username) return "" unless username user = User.find_by(username_lower: username.downcase) return "" unless user.present? # TODO: Add support for ES6 and call `avatar-template` directly if !user.uploaded_avatar_id avatar_template = User.default_template(username) else avatar_template = user.avatar_template end UrlHelper.schemaless UrlHelper.absolute avatar_template end def mention_lookup(name) return false if name.blank? return "group" if Group.exists?(name: name) return "user" if User.exists?(username_lower: name.downcase) end def category_hashtag_lookup(category_slug) if category = Category.query_from_hashtag_slug(category_slug) [category.url_with_id, category_slug] else nil end end def lookup_inline_onebox(url) InlineOneboxer.lookup(url) end def get_topic_info(topic_id) return unless topic_id.is_a?(Integer) # TODO this only handles public topics, secured one do not get this topic = Topic.find_by(id: topic_id) if topic && Guardian.new.can_see?(topic) { title: Rack::Utils.escape_html(topic.title), href: topic.url } end end def category_tag_hashtag_lookup(text) tag_postfix = '::tag' is_tag = text =~ /#{tag_postfix}$/ if !is_tag && category = Category.query_from_hashtag_slug(text) [category.url_with_id, text] elsif is_tag && tag = Tag.find_by_name(text.gsub!("#{tag_postfix}", '')) ["#{Discourse.base_url}/tags/#{tag.name}", text] else nil end end def get_current_user(user_id) return unless user_id.is_a?(Integer) { staff: User.where(id: user_id).where("moderator OR admin").exists? } end end end