2012-06-01 1 views
0

Это ссылки на мой предыдущий вопрос, касающийся стиля таблицы css. То, что я не добавил и понял теперь, что это была ошибка, заключается в том, что при рендеринге страницы в качестве html используется некоторый jquery.wicked_pdf - jQuery css zeba style table body only (Rails 3.2.3) и где разместить файлы css/javascript (public или app/assets)

wicked_pdf/wkhtml - support for css tables using tr.odd and tr.even to change background colour

JQuery для этого заключается в следующем:

$(document).ready(function(){ 
    $('tbody tr:even').addClass('stripe'); 
    $('tbody tr').hover(function(){ 
    $(this).addClass('stripeHover'); 
    }, function(){ 
    $(this).removeClass('stripeHover'); 
    }); 
}); 

Я полагаю, что, как мы рендеринг PDF файл, который парение является излишним, так это может быть уменьшено до:

$(document).ready(function(){ 
    $('tbody tr:even').addClass('stripe'); 
}); 

Это файл wicked_pdf_helper.rb, который я использую. С конвейером активов я не уверен, должен ли я создавать свои файлы публично или в app/assets/javascripts. Из моего понимания и поиска здесь, чтобы ответить на мои вопросы + рассмотрение изменений в драгоценном камне, кажется, что изменения от Rails 2 -> 3 -> 3.1 -> 3.2 повлияли на это.

Heres последний файл хелперов файл я использовал:

module WickedPdfHelper 
    def wicked_pdf_stylesheet_link_tag(*sources) 
    css_dir = Rails.root.join('public','stylesheets') 
    sources.collect { |source| 
     "<style type='text/css'>#{File.read(css_dir.join(source+'.css'))}</style>" 
}.join("\n").html_safe 
    end 

    def pdf_image_tag(img, options={}) 
    image_tag "file:///#{Rails.root.join('public', 'images', img)}", options 
    end 

    def wicked_pdf_javascript_src_tag(jsfile, options={}) 
    #javascript_src_tag "file:///#{Rails.root.join('public','javascripts',jsfile)}", options 
    end 

    def wicked_pdf_javascript_include_tag(*sources) 
    sources.collect{ |source| wicked_pdf_javascript_src_tag(source, {}) }.join("\n").html_safe 
    end 

    module Assets 
    def wicked_pdf_stylesheet_link_tag(*sources) 
     sources.collect { |source| 
     "<style type='text/css'>#{read_asset(source+".css")}</style>" 
    }.join("\n").html_safe 
    end 

    def wicked_pdf_image_tag(img, options={}) 
     image_tag "file://#{asset_pathname(img).to_s}", options 
    end 

    def wicked_pdf_javascript_src_tag(jsfile, options={}) 
     javascript_include_tag "file://#{asset_pathname(jsfile).to_s}", options 
    end 

    def wicked_pdf_javascript_include_tag(*sources) 
     sources.collect { |source| 
     "<script type='text/javascript'>#{read_asset(source+".js")}</script>" 
    }.join("\n").html_safe 
    end 

    private 

    def asset_pathname(source) 
     if Rails.configuration.assets.compile == false 
     File.join(Rails.public_path, asset_path(source)) 
     else 
     Rails.application.assets.find_asset(source).pathname 
     end 
    end 

    def read_asset(source) 
     if Rails.configuration.assets.compile == false 
     IO.read(asset_pathname(source)) 
     else 
     Rails.application.assets.find_asset(source).to_s 
     end 
    end 
    end 
end 

В предыдущей версии файла был:

module WickedPdfHelper 
    def wicked_pdf_stylesheet_link_tag(*sources) 
    options = sources.extract_options! 
    if request.try(:format).to_s == 'application/pdf' 
     #css_dir = Rails.root.join('public','stylesheets') 
     css_dir = Rails.root.join('app','assets', 'stylesheets') 
     refer_only = options.delete(:refer_only) 
     sources.collect { |source| 
     source.sub!(/\.css$/o,'') 
     if refer_only 
      stylesheet_link_tag "file://#{Rails.root.join('public','stylesheets',source+'.css')}", options 
     else 
      "<style type='text/css'>#{File.read(css_dir.join(source+'.css'))}</style>" 
     end 
     }.join("\n").html_safe 
    else 
     sources.collect { |source| 
     stylesheet_link_tag(source, options) 
     }.join("\n").html_safe 
    end 
    end 

    # def wicked_pdf_stylesheet_link_tag(*sources) 
    # sources.collect { |source| 
    #  "<style type='text/css'>#{Rails.application.assets.find_asset("#{source}.css")}</style>" 
    # }.join("\n").gsub(/url\(['"](.+)['"]\)(.+)/,%[url("#{wicked_pdf_image_location("\\1")}")\\2]).html_safe 
    # end 

    def pdf_image_tag(img, options={}) 
    if request.try(:format).to_s == 'application/pdf' 
     image_tag "file://#{Rails.root.join('app', 'assets', 'images', img)}", options rescue nil 
    else 
     image_tag img.to_s, options rescue nil 
    end 
    end 

    def wicked_pdf_javascript_src_tag(jsfile, options={}) 
    if request.try(:format).to_s == 'application/pdf' 
     jsfile.sub!(/\.js$/o,'') 
     javascript_src_tag "file://#{Rails.root.join('public','javascripts',jsfile + '.js')}", options 
    else 
     javascript_src_tag jsfile, options 
    end 
    end 

    def wicked_pdf_javascript_include_tag(*sources) 
    options = sources.extract_options! 
    sources.collect{ |source| wicked_pdf_javascript_src_tag(source, options) }.join("\n").html_safe 
    end 
end 

Файл шаблона (genie_help_base.pdf.erb) выглядит следующим образом:

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= full_title(yield(:title)) %></title> 
    <%#= wicked_pdf_stylesheet_link_tag "application", :refer_only => true %> 
    <%#= wicked_pdf_stylesheet_link_tag "application", :refer_only => true %> 
    <%= wicked_pdf_stylesheet_link_tag "static_pages/genie_v23_help" %>  
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
<!--  <%#= render 'layouts/shim' %> --> 
    </head> 
    <body> 
    <div class="container"> 
     <%= yield %> 
     <%= debug(params) if Rails.env.development? %> 
    </div> 
    </body> 
</html> 

шаблон макета для HTML (genie_v23_help_base.html.erb) является:

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= full_title(yield(:title)) %></title> 
    <%= stylesheet_link_tag "application", media: "all" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
    <%= render 'layouts/shim' %>  
    </head> 
    <body> 
    <%= render 'layouts/header' %> 
    <div class="container"> 
     <%= render 'static_pages/genie_v23_help/shared/help_header.html.erb' %>  
     <%= yield %> 
     <%= render 'static_pages/genie_v23_help/shared/help_footer' %> 
     <h4><strong>Did this show up in only the html on screen</strong></h4> 
     <%= render 'layouts/footer' %> 
     <%= debug(params) if Rails.env.development? %> 
    </div> 
    </body> 
</html> 

Вот CSS файл

table { 
    width: 90%; 
    border: 1px solid #999999; 
} 

th, td { 
    padding: 7px 10px 10px 10px; 
} 

th { 
    border-bottom: 2px solid #111111; 
    border-top: 1px solid #999999; 
    font-size: 90%; 
    letter-spacing: 0.1em; 
    text-align: left; 
    text-transform: uppercase;  
} 

/*tr.even { 
    background-color: #efefef; 
}*/ 


.stripe { 
    background-color: #dddddd; 
    /*color: #666666;*/ 
} 

tr.stripeHover { 
    background-color: #FFFACD; 
} 

tbody tr:hover { 
    background-color: #FFFACD; 
} 

Наконец метод показать в моем контроллере, где это все называется из:

def static_page 
    respond_to do |format| 
    format.html do 
     render :template => show_page, 
       :layout => 'genie_v23_help_base' 
    end 
    format.pdf do 
     render :pdf => show_page, 
       :layout => 'genie_v23_help_base.pdf.erb', 
       :template => "#{show_page}.html.erb", 
       :handlers => :erb, 
       :disable_external_links => true, 
       :disable_javascript => false, 
       :show_as_html => params[:debug], 
       :print_media_type => true 
     end 
    end 
    end 

Так что я в настоящее время не может получить функцию JQuery чередование работать.

Я хочу, чтобы эта работа работала, и, если она удастся, скорее всего, построит приложение типа образца для размещения на GitHub, поскольку, похоже, обновленная версия с Rails 3.2.3 не используется с использованием таблиц стилей и jquery, чтобы продемонстрировать это.

Должен ли я использовать инструкцию include в файле где-нибудь? Если да, то где «приложение»?

С обновлением помощника (tobiashm 18 дней назад) При необходимости используйте предварительно скомпилированные активы, как определить, являются ли его «регулярными» методами или методами в модуле Asset? Если я не прокомментирую следующее, я получаю сообщение об ошибке.

def wicked_pdf_javascript_src_tag(jsfile, options={}) 
    #javascript_src_tag "file:///#{Rails.root.join('public','javascripts',jsfile)}", options 
end 

Изменена javascript_src_tag к javascript_include_tag так совместим с Rails 3.2+

def wicked_pdf_javascript_src_tag(jsfile, options={}) 
    javascript_include_tag "file:///#{Rails.root.join('public','javascripts',jsfile)}", options 
end 

Кто-нибудь есть размещаемой образец приложение/приложение, демонстрирующее все это?

Резюме - попытка получить css зебра в PDF-формате с использованием jquery для установки имени класса в html-файле, поэтому можно применить стиль CSS.

Заранее спасибо, Марк

+0

В JavaScripts обычно находятся в 'приложение/активы/javascripts' , Это где вы их размещаете? Также я считаю, что вы сказали, что JQuery работает при рендеринге html. Возможно, файлы javascript не включены в шаблон, который отображается в формате PDF? – austen

+0

Javascripts в публичных/javascripts (только zebra_stripe_tables.js НЕ jquery/jquery_ujs), а также в «app/assets/javascripts». Я думаю, что js-файлы не включены в шаблон, поэтому его не отображает. И это как-то связано с помощниками wicked_pdf. Просто не могу понять, как (все же!). Спасибо за ваше время на Rails Helpline. – user1149642

ответ

0

Ваш PDF макет, используя только регулярные

<%= javascript_include_tag "application" %> 

Когда вы должны использовать

<%= wicked_pdf_javascript_include_tag "application" %> 

 Смежные вопросы

  • Нет связанных вопросов^_^