# amp.rb # # generate AMP style HTML # # Copyright (c) 2016 MATSUOKA Kohei # Distributed under the GPL2 or any later version. # module AMP def amp_header_procs @amp_header_procs ||= [] end def amp_body_enter_procs @amp_body_enter_procs ||= [] end def add_amp_header_proc(block = Proc::new) amp_header_procs << block end def add_amp_body_enter_proc(block = Proc::new) amp_body_enter_procs << block end def amp_header_proc amp_header_procs.map{|proc| proc.call }.join("\n") end def amp_body_enter_proc amp_body_enter_procs.map {|proc| proc.call }.join("\n") end end extend AMP add_header_proc do if @mode == 'day' begin diary = @diaries[@date.strftime('%Y%m%d')] %Q|| rescue NoMethodError '' end end end add_content_proc('amp') do |date| begin diary = @diaries[date] template = File.read(File.join(TDiary::root, "views/amp.rhtml")) ERB.new(template).result(binding) rescue NoMethodError raise TDiary::NotFound end end def amp_body(diary) apply_plugin(diary.to_html) .gsub(//, '') end def amp_canonical_url(diary) URI.join(@conf.base_url, anchor(diary.date.strftime('%Y%m%d'))) end def amp_day_title(diary) title_proc(Time::at(@date.to_i), diary.title) end def amp_html_url(diary) uri = amp_canonical_url(diary) uri.query = [uri.query, "plugin=amp"].compact.join '&' uri end def amp_style base_css = amp_base_css theme_css = amp_theme_css .gsub(/^@charset.*$/, '') .gsub(/!important/, '') <<-EOL #{base_css} #{theme_css} EOL end def amp_base_css base_css_path = theme_paths_local.map {|path| File.join(File.dirname(path), "base.css") }.find {|path| File.exist?(path) } base_css_path ? File.read(base_css_path) : '' end def amp_theme_css _, location, theme = @conf.theme.match(%r|(\w+)/(\w+)|).to_a case location when 'online' require 'uri' require 'open-uri' uri = URI.parse(theme_url_online(theme)) uri.scheme ||= 'https' URI.parse(uri.to_s).read when 'local' theme_path = theme_paths_local.map {|path| File.join(File.dirname(path), "#{theme}/#{theme}.css") }.find {|path| File.exist?(path) } theme_path ? File.read(theme_path) : '' end end def amp_title @conf.html_title end