module ApplicationHelper @@keyQueue = nil @@translationsOnThisPage = nil @@lastTranslation = nil @@allTranslations = nil @@no_banner = true def ThereAreTranslationsOnThisPage? @@translationsOnThisPage end def get_all_translations @@allTranslations end def title(page_title) content_for(:title) { page_title.to_s } end def banner_image(banner_image) @@no_banner = false content_for(:banner_image) { banner_image.to_s } end def banner_attrs(banner_image) if banner_image.length > 0 return {style: 'background-image: url(' + banner_image + ');', class: 'has-image' } end {class: 'no-image'} end def has_banner? !@@no_banner end def banner_title(banner_title) @@no_banner = false content_for(:banner) { ('

' + banner_title.to_s + '

').html_safe } end def page_style(style) classes = ['page-style-' + style.to_s] if @@no_banner classes << 'no-banner' end if ThereAreTranslationsOnThisPage? classes << 'has-translations' end if params[:controller] classes << params[:controller] if params[:action] classes << params[:controller] + '-' + params[:action] end end content_for(:page_style) { classes.join(' ') } end def yield_or_default(section, default = '') content_for?(section) ? content_for(section) : default end def _lorem_ipsum(method, size) options = {:random => true} case method.to_s when 'c', 'char', 'character', 'characters' if size return Forgery::LoremIpsum.characters size, options end return Forgery::LoremIpsum.character, options when 'w', 'word', 'words' if size return Forgery::LoremIpsum.words size, options end #return'LOREM' return Forgery::LoremIpsum.word options when 's', 'sentence', 'sentences' if size return Forgery::LoremIpsum.sentences size, options end return Forgery::LoremIpsum.sentence options when 'p', 'paragraph', 'paragraphs' if size return Forgery::LoremIpsum.paragraphs size, options.merge({:sentences => 10}) end return Forgery::LoremIpsum.sentences 10, options when 't', 'title' return Forgery::LoremIpsum.sentences 1, options end return nil end def _(key, behavior = nil, behavior_size = nil, vars: {}, html: nil, blockData: {}, &block) queued_keys = nil result = nil if key.kind_of?(Hash) blockData.merge!(key) key = key.keys end if block_given? @@keyQueue ||= Array.new if key.kind_of?(Array) @@keyQueue += key else @@keyQueue << key end end if key.kind_of?(Array) new_key = key.shift if key.count > 0 queued_keys = key.dup end key = new_key end if blockData[key] behavior = blockData[key][:behavior] || nil behavior_size = blockData[key][:behavior_size] || nil vars = blockData[key][:vars] || {} end @@lastTranslation = nil generate_control = _can_translate? translation = _do_translate(key, vars, behavior, behavior_size) if block_given? html = capture(&block) end if html translation['html'] = html.gsub('%' + key + '%', translation['untranslated']) end if generate_control @@lastTranslation = translation @@allTranslations ||= Hash.new @@allTranslations[key] = key result = _translate_me(translation) end result ||= translation['html'] || translation['untranslated'] if queued_keys return _ queued_keys, behavior, behavior_size, vars: vars, html: result, blockData: blockData end return result end def _translate_me(translation) @@translationsOnThisPage = true datakeys = '' translation['vars'].each { |key, value| datakeys += ' data-var-' + key.to_s + '="' + value.to_s.gsub('"', '"') + '"' } ('' + (translation['html'] || translation['untranslated']) + '').to_s.html_safe end def _do_translate(key, vars, behavior, behavior_size) translation = {'key' => key, 'lang' => '0', 'vars' => vars} v = vars.dup begin v[:raise] = true translation['untranslated'] = I18n.translate!(key, v) translation['lang'] = I18n.locale.to_s translation['is_translated'] = true hash = Hash.new translations = Translation.where(["locale = ? AND key LIKE ?", I18n.locale, key + '%']).take(6).each { |o| hash[o.key] = o.value } translation['translated'] = hash.to_json.gsub('"', '"') rescue I18n::MissingTranslationData begin translation['untranslated'] = I18n.translate!(config.i18n.default_locale, key, vars) translation['lang'] = config.i18n.default_locale.to_s rescue puts _lorem_ipsum(behavior, behavior_size) translation['untranslated'] = behavior ? _lorem_ipsum(behavior, behavior_size) || key.gsub(/^.*\.(.+)?$/, '\1') : key.gsub(/^.*\.(.+)?$/, '\1') end end return translation end def _can_translate?() false end def _!() if @@keyQueue return '%' + @@keyQueue.shift + '%' end end def _?() if @@keyQueue return '%' + @@keyQueue[0] + '%' end end def field(form, name, type = nil, param = nil, html: nil, help: false, attrs: [], classes: nil, label: nil, placeholder: nil, value: nil, checked: nil, required: false) if form.is_a?(Symbol) || form.is_a?(String) param = type type = name name = form form = nil end if attrs && !attrs.is_a?(Array) attrs = [attrs] end attrs_used = 0 root = 'div' lang_key = "form.#{name.to_s}" if form lang_key = form.object.class.name.underscore.pluralize + '.' + lang_key elsif params[:controller] lang_key = params[:controller] + '.' + lang_key end select_prompt = nil show_label = !(/^hidden_field/.match(type.to_s)) label_after = true value_attribute = !form if /select(_tag)?$/.match(type.to_s) if !label select_prompt = placeholder || (form ? 'Select a ' + name.to_s : 'Select one') label_html = '' show_label = false end placeholder = nil label_after = false if param if param.is_a?(Array) param = options_for_select(param, value) elsif param.is_a?(Hash) param = options_from_collection_for_select(param, :first, :last, value) end end value_attribute = false elsif type.to_s == 'image_field' || type.to_s == 'user_select_field' || type.to_s == 'organization_select_field' placeholder = nil label_html = '' show_label = false else if /^password/.match(type.to_s) placeholder = nil elsif !placeholder placeholder = 'Type in a ' + name.to_s end end if show_label label_html = eval("(" + (form ? 'form.label' : 'label_tag') + " name, '#{label ? CGI.escapeHTML(label) : name}'.html_safe)") end if label === false || !show_label label_html = '' end if /text_area(_tag)?$/.match(type.to_s) root = nil end html_options = nil if html html_options = '' html.each do |key, v| html_options += ', ' + key.to_s + ": html[:" + key.to_s + "]" end end if classes if classes.is_a?(String) classes = [classes] end else classes = [] end if type == :image_field form_html = form.label name do ('
' + image_tag(param || 'http://placehold.it/300x300&text=Click%20to%20upload%20an%20Image') + (form.file_field name) + (form.hidden_field (name.to_s + '_cache')) + '
' + name.to_s + '').html_safe end elsif type == :user_select_field form_html = form.hidden_field(:id, { class: 'id' }).html_safe form_html += form.check_box(:_destroy).html_safe form_html += form.label(:_destroy, '×').html_safe form_html += form.hidden_field(:user_id, { class: 'user-id'} ).html_safe if param && param.id form_html += image_tag(param.avatar.url :thumb).html_safe + ('
' + param.username + '
').html_safe if attrs && attrs.length > 0 && attrs[0].is_a?(UserOrganizationRelationship) form_html += form.select(:relationship, options_for_select(UserOrganizationRelationship::AllRelationships, attrs[0].relationship), {}, {class: 'small'}).html_safe attrs_used += 1 end else classes << 'new' if attrs && attrs.length > 0 && attrs[0].is_a?(UserOrganizationRelationship) form_html += ('' + image_tag('http://placehold.it/120x120&text=%252B').html_safe + '
').html_safe form_html += form.select(:relationship, options_for_select(UserOrganizationRelationship::AllRelationships, UserOrganizationRelationship::DefaultRelationship), {}, {class: 'small'}).html_safe attrs_used += 1 end end elsif type == :organization_select_field form_html = form.hidden_field(:id, { class: 'id' }).html_safe form_html += form.check_box(:_destroy).html_safe form_html += form.label(:_destroy, '×').html_safe form_html += form.hidden_field(:organization_id, { class: 'organzation-id'} ).html_safe if param && param.id form_html += image_tag(param.avatar.url :thumb).html_safe + ('
' + param.name + '
').html_safe else classes << 'new' form_html += ('' + image_tag('http://placehold.it/120x120&text=%252B').html_safe + '
').html_safe end else ph = '' va = '' if value_attribute if /^(check_box|radio_button)/.match(type.to_s) if checked === nil checked = value == "on" || value.to_s == "1" end if /^(radio_button)/.match(type.to_s) va = ', "' + value + '", checked' else va = ', "1", checked' end else va = ', value' end end if placeholder if form ph = ", :placeholder => '#{placeholder}'" else ph = ", placeholder: '#{placeholder}'" end end form_html = (form ? "form.#{type} :#{name}" : "#{type} :#{name}") + va + ph + (param ? ', param' : '') attrs.each_index { |i| form_html += (i >= attrs_used ? ', attrs[' + i.to_s + ']' : '') } if select_prompt if form form_html += ', {prompt: select_prompt}' else form_html += ', prompt: select_prompt' end end form_html += (html_options || '') if required form_html += ', :required => true' end form_html = eval(form_html) if root form_html = "<#{root}>" + form_html + "" end end if help form_html = ('

' + (_ (lang_key + '.help'), :w, 20) + '

').html_safe + form_html.html_safe end return ("
0 ? ' ' + classes.join(' ') : ''}\">" + (label_after ? '' : label_html) + form_html + (label_after ? label_html : '') + "
").html_safe end def actions(action) ('
').html_safe end def sortable(objects, id = 'id', url: nil, &block) result = '