画像の直リンクからポップアップHTMLをつくる
lightboxを使っていたのに突如全てpopupのHTMLを用意しなければいかなくなったときのためのプチツール
やっていること
- 全HTMLから画像への直リンクを見つける
- 同名のhtmlをpopup/以下に作る。
- 上記HTMLにtemplates.htmlの内容を保存する。
- 上記HTMLの画像を差し替える。
- 呼び出し元のHTMLのH1をポップアップ用HTMLのタイトルとH1に挿入する
- 呼び出し元のHTMLのリンクをポップアップ用HTMLへ差し替える。
- 適当にclass="popup"とtarget="_blank"を挿入する。
急な対応にもうまー。
$KCODE = 'utf8' #popupHTMLを自動生成 #画像(gif,jpg)への直リンクを見つけたら「popup/同名.html」を作成してタイトルと画像を挿入 require 'kconv' require 'rubygems' require 'find' require 'hpricot' require "fileutils" htmls=[] Find.find(".") do |path| if path.match(/\.html$/) htmls.push(path.to_s) end end htmls.each do |html| puts html+"処理中".tosjis #windowsのコマンドプロンプト用にsjis変換 doc = Hpricot(open(html,"r")) doc.search("a").each do |_a| if(_a.attributes['href'].match(/(\.gif|\.jpg|\.jpeg)$/)) #画像探索 img=_a.attributes['href'] title=doc.search("title").inner_text hd1=doc.search("h1 span").inner_text if(_a.parent.previous_sibling&&_a.parent.previous_sibling.inner_text) hd2=_a.parent.previous_sibling.inner_text else hd2="ダミーダミー" end popuphtml=img.sub(/images\/([^\/]+)(\.gif|\.jpg|\.jpeg)$/,'popup/\1.html') popuphtml2=popuphtml.sub("/special/detail/","") popupDir=popuphtml.sub("/special/detail/","").sub(/([^\/]+)$/,"") FileUtils.mkdir_p(popupDir) unless FileTest.exist?(popupDir) #popupディレクトリ作成 FileUtils.cp("template.html",popuphtml2) puts popuphtml+"作成".tosjis #windowsのコマンドプロンプト用にsjis変換 file = open(popuphtml2,"w") htmldoc = Hpricot(open("template.html","r")) htmldoc.search("title").each do |_title| _title.innerHTML=hd1 +" | "+ title end htmldoc.search("h1").each do |head| head.innerHTML=hd1 end htmldoc.search("img[@src=/dummy/images/catch-1.jpg]").each do |_img| _img.set_attribute("src",img) end puts ("ページタイトル"+hd1).tosjis #windowsのコマンドプロンプト用にsjis変換 file << htmldoc.to_original_html _a.set_attribute("href",popuphtml) _a.set_attribute("class","popup") _a.set_attribute("target","blank") end end open(html,"w")<<doc.to_original_html #元のHTMLを極力維持した形式で保存 end
殴り書きしたからものすごくアレな感じ。しかも意味も無く残ってる部分が結構あるなー。まぁいいや。