Это ссылки на мой предыдущий вопрос, касающийся стиля таблицы 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.
Заранее спасибо, Марк
В JavaScripts обычно находятся в 'приложение/активы/javascripts' , Это где вы их размещаете? Также я считаю, что вы сказали, что JQuery работает при рендеринге html. Возможно, файлы javascript не включены в шаблон, который отображается в формате PDF? – austen
Javascripts в публичных/javascripts (только zebra_stripe_tables.js НЕ jquery/jquery_ujs), а также в «app/assets/javascripts». Я думаю, что js-файлы не включены в шаблон, поэтому его не отображает. И это как-то связано с помощниками wicked_pdf. Просто не могу понять, как (все же!). Спасибо за ваше время на Rails Helpline. – user1149642