From ea15194cd57b5e4bef4e8e23785b349124f55a84 Mon Sep 17 00:00:00 2001 From: elixirel Date: Wed, 4 May 2011 23:14:08 +0900 Subject: [PATCH] - Add plugin function - (temporarily)for iOS device fix (not use YahooUI). --- erbtemp/editentry.html.erb | 10 ++- erbtemp/newentry.html.erb | 14 ++-- feedgenerator.rb | 155 +++++++++++++++++++++++++++------------------ 3 files changed, 100 insertions(+), 79 deletions(-) diff --git a/erbtemp/editentry.html.erb b/erbtemp/editentry.html.erb index 9b3b49f..3341e29 100644 --- a/erbtemp/editentry.html.erb +++ b/erbtemp/editentry.html.erb @@ -3,6 +3,7 @@ <%= APPTITLE %> + <% unless cgi.user_agent =~ /(iPod|iPhone|iPad)/ %> @@ -136,6 +137,7 @@ padding: 0; } + <% end %>
@@ -199,9 +201,7 @@ <% if val == "content" %> - + <% elsif val == "updated" %> <% else %> <% end %> @@ -230,9 +230,7 @@ <% if val == "content" %> - + <% else %> <% end %> diff --git a/erbtemp/newentry.html.erb b/erbtemp/newentry.html.erb index da55986..2fe12fe 100644 --- a/erbtemp/newentry.html.erb +++ b/erbtemp/newentry.html.erb @@ -3,6 +3,7 @@ <%= APPTITLE %> + <% unless cgi.user_agent =~ /(iPod|iPhone|iPad)/ %> @@ -136,6 +137,7 @@ padding: 0; } + <% end %>
@@ -202,9 +204,7 @@ <% if val != "content" %> <% else %> - + <% end %> @@ -236,13 +236,7 @@ <% date = Time.now.iso8601 %> <% if val == "content" %> - + <% elsif val == "entryid" %> ?<%= date %>" style="width: 100%"><% elsif val == "updated" || val == "published" %> <% elsif val == "url" %> diff --git a/feedgenerator.rb b/feedgenerator.rb index de64c8b..9acf606 100644 --- a/feedgenerator.rb +++ b/feedgenerator.rb @@ -43,6 +43,8 @@ FILEMANAGER = "./filemanager.rb" REPLACEBRTAG = false # ファイルの書き込み時にENTRYのIDおよびURLを、FEEDオブジェクトから自動生成した値に置換するか否か REPLACEENTRYIDANDURL = false +# プラグインディレクトリ +PLUGINDIR = "./plugins/" # EXPERIMENTAL AREA START TO_HTML_ENTRYTEMPLATE = 'htmltemp/diary.html.erb' @@ -69,10 +71,10 @@ class Object mode = arg[1] rdonly_p = true case mode - when String + when String arg[1] = mode[/[^:]+/] if RUBY_VERSION < "1.8.7" && mode.include?(':') rdonly_p = /\A[^:]*[wa+]/ !~ mode - when Numeric + when Numeric rdonly_p = !(mode & (IO::WRONY | IO::RDWR)) end open(*arg) do |f| @@ -227,20 +229,20 @@ class Feed < AbstractEntry elm.elements.each { |child| begin case child.name - when "id" + when "id" xml[:feedid] = child.text - when "title", "subtitle", "updated", "rights" + when "title", "subtitle", "updated", "rights" xml[child.name.to_sym] = child.text - when "author" + when "author" child.elements.each do |gchild| case gchild.name - when "name" + when "name" xml[:aname] = gchild.text - when "email" + when "email" xml[:amail] = gchild.text end end - when "link" + when "link" child.attributes.each do |k, v| if k == "rel" if v == "self" @@ -250,7 +252,7 @@ class Feed < AbstractEntry end end end - when "entry" + when "entry" # Entry要素は無視します else # 上記判定以外の全要素は配列に格納します @@ -396,11 +398,11 @@ class Entry < AbstractEntry elm.elements.each do |child| begin case child.name - when "id" + when "id" xml[:entryid] = child.text - when "link" + when "link" xml[:url] = child.attributes["href"] - when "title", "summary", "summary", "published", "updated", "content" + when "title", "summary", "summary", "published", "updated", "content" xml[child.name.to_sym] = child.text else # 上記判定以外の全要素は配列に格納します @@ -623,9 +625,9 @@ class LogList doc.elements.each("list/file") { |elm| elm.elements.each {|child| case child.name - when "display" + when "display" @display.push(child.text) - when "path" + when "path" @path.push(child.text) else # With no action @@ -691,6 +693,24 @@ class FileUploader end end +# = Pluginクラス +# +# プラグインの処理を行うクラスです +class FeedGenPluginManager + def self.exec(mode, feed, entries) + l_feed = feed.dup.freeze + l_entries = entries.dup.freeze + Dir.foreach(PLUGINDIR) do |fn| + next unless File.extname(fn) == '.rb' + require File.join(PLUGINDIR, fn) + plugin_name = "FeedGenPlugins::" + plugin_name << File.basename(fn).gsub(/\.rb\Z/, "") + plugin_ins = plugin_name.split(/::/).inject(Object) { |c,name| c.const_get(name) } + plugin_ins.exec(l_feed, l_entries) + end + end +end + # = Controllerクラス # # コントローラ部分に相当する処理を受け持つクラスです @@ -704,7 +724,7 @@ class Controller # + ... and more case params["mode"] # ログ選択画面 - when "logselect" + when "logselect" session["filepath"] = params["logpath"] db["loglist"] = LogList.readxml(LISTXMLPATH) # 初期状態で選択されるログは「loglist.xml」の最上に位置するログになります @@ -713,23 +733,26 @@ class Controller db["entry"] = Entry.readxml(XMLPATH + File.basename(session["filepath"])) # 新規記事追加部分 - when "newentry" + when "newentry" case params["action"] # 確認画面 - when "confirm" + when "confirm" session["target_filepath"] = params["target_filepath"] db["newentry"] = Entry.new(params) db["newentry"].content = db["newentry"].content_for_blog # 記事の追記を実際にファイルに反映 - when "exec" + when "exec" session["target_filepath"] = params["target_filepath"] successed = Entry.insert(XMLPATH + File.basename(params["target_filepath"]), Entry.new(params)) unless successed db["error"] = "日記の新規追加に失敗しました。" params["mode"] = "error" + else + # 成功時はプラグイン処理を実施する + FeedGenPluginManager.exec("newentry", db["feed"], db["entry"]) end # 画面を戻った際の処理 - when "back" + when "back" session["target_filepath"] = params["target_filepath"] db["newentry"] = Entry.new(params) else @@ -740,28 +763,31 @@ class Controller end # 記事編集部分 - when "editentry" + when "editentry" case params["action"] # 編集画面 - when "edit" + when "edit" session["target_filepath"] = params["target_filepath"] session["editid"] = cgi["editid"].to_s db["editentry"] = Entry.select(XMLPATH + File.basename(session["target_filepath"]), session["editid"]) # 確認画面 - when "confirm" + when "confirm" session["target_filepath"] = params["target_filepath"] session["editid"] = cgi["editid"].to_s db["editentry"] = Entry.new(params) db["editentry"].content = db["editentry"].content_for_blog # 記事の変更を実際にファイルに反映 - when "exec" + when "exec" session["target_filepath"] = params["target_filepath"] successed = Entry.update(XMLPATH + File.basename(params["target_filepath"]), Entry.new(params)) unless successed db["error"] = "日記の編集処理に失敗しました。
該当の日記が既に存在しない可能性があります。" params["mode"] = "error" + else + # 成功時はプラグイン処理を実施する + FeedGenPluginManager.exec("editentry", db["feed"], db["entry"]) end - when "back" + when "back" session["target_filepath"] = params["target_filepath"] db["editentry"] = Entry.new(params) else @@ -772,22 +798,25 @@ class Controller end # 記事削除部分 - when "delentry" + when "delentry" case params["action"] # 確認画面 - when "confirm" + when "confirm" session["target_filepath"] = params["target_filepath"] session["delid"] = cgi["delid"].to_s db["delentry"] = Entry.select(XMLPATH + File.basename(session["target_filepath"]), session["delid"]) # 記事の削除を実際にファイルに反映 - when "exec" + when "exec" session["target_filepath"] = params["target_filepath"] successed = Entry.delete(XMLPATH + File.basename(params["target_filepath"]), cgi["delid"].to_s) unless successed db["error"] = "日記の編集処理に失敗しました。
該当の日記が既に存在しない可能性があります。" params["mode"] = "error" + else + # 成功時はプラグイン処理を実施する + FeedGenPluginManager.exec("delentry", db["feed"], db["entry"]) end - when "back" + when "back" session["target_filepath"] = params["target_filepath"] db["feed"] = Feed.readxml(XMLPATH + File.basename(session["target_filepath"])) db["entry"] = Entry.readxml(XMLPATH + File.basename(session["target_filepath"])) @@ -799,17 +828,17 @@ class Controller end # Feed情報変更部分 - when "editfeed" + when "editfeed" case params["action"] # 確認画面 - when "confirm" + when "confirm" session["target_filepath"] = params["target_filepath"] db["feed"] = Feed.new(params) # 実際にFeed情報の変更をファイルに反映 - when "back" + when "back" session["target_filepath"] = params["target_filepath"] db["feed"] = Feed.new(params) - when "exec" + when "exec" session["target_filepath"] = params["target_filepath"] Feed.update(XMLPATH + File.basename(params["target_filepath"]), Feed.new(params)) else @@ -818,12 +847,12 @@ class Controller end # ログ編集モード - when "log" + when "log" # 必ず内部データをリフレッシュする db["loglist"] = LogList.readxml(LISTXMLPATH) case params["action"] # ログファイルの編集を実際にファイルに反映 - when "addexec" + when "addexec" # エラーチェック。この段階のエラーは強度のエラーを発する。 db["loglist"].path.each do |val| if val == cgi["logpath"] @@ -847,7 +876,7 @@ class Controller # 新たなdiary.xmlを生成。この際保持する情報は同一のFeedオブジェクトnew() Feed.to_xml(XMLPATH + File.basename(db["loglist"].path[0]), db["feed"], []) # 確認画面 - when "addconfirm" + when "addconfirm" # 入力されたログが既に存在するかを確認 db["loglist"].path.each do |val| if val == cgi["logpath"] @@ -864,10 +893,10 @@ class Controller if db["logpath"].blank? || db["logdisplay"].blank? params["action"] = "" end - when "back" + when "back" # 削除確認画面 - when "delconfirm" + when "delconfirm" db["logdelindex"] = params["logdelindex"].to_i if db["logdelindex"] < 1 @@ -875,7 +904,7 @@ class Controller params["action"] = "" end # 削除処理 - when "delexec" + when "delexec" if cgi["logdelindex"].to_i < 1 params["action"] = "" params["mode"] = "error" @@ -894,7 +923,7 @@ class Controller end # 編集画面 - when "edit" + when "edit" db["logeditindex"] = params["logdelindex"].to_i db["logpath"] = db["loglist"].path[db["logeditindex"]] @@ -905,7 +934,7 @@ class Controller params["action"] = "" end # 編集確認画面 - when "editconfirm" + when "editconfirm" checkflag = true db["loglist"].path.each_with_index do |val, i| if db["logeditindex"] != i @@ -925,7 +954,7 @@ class Controller db["logdisplay"] = params["logdisplay"].to_s end # 編集実行 - when "editexec" + when "editexec" checkflag = true db["loglist"].path.each_with_index do |val, i| if db["logeditindex"] != i @@ -972,14 +1001,14 @@ class Controller end # インポートモードの場合の処理 - when "import" + when "import" db["loglist"] = LogList.readxml(LISTXMLPATH) # リセットモードの場合の処理 - when "reset" + when "reset" case params["action"] # リセット実行時の処理 - when "exec" + when "exec" file = FileUploader.new file.filelist().each { |fname| file.delete(fname) if File.ftype(XMLPATH + fname) == "file" @@ -1046,9 +1075,9 @@ class Controller db["loglist"] = LogList.readxml(LISTXMLPATH) case params["mode"] # 特定位置に挿入する場合の処理 - when "insert" + when "insert" case params["action"] - when "exec" + when "exec" # この段階のエラーに対しては強度のエラーを発する checkflag = true db["logpath"] = Controller.get_mpart_value(cgi["logpath"]) @@ -1096,7 +1125,7 @@ class Controller db["feed"] = Feed.readxml(XMLPATH + File.basename(session["filepath"])) db["entry"] = Entry.readxml(XMLPATH + File.basename(session["filepath"])) - when "confirm" + when "confirm" # 入力されたログファイルパスが既に存在するかを確認 checkflag = true db["logpath"] = Controller.get_mpart_value(cgi["logpath"]) @@ -1146,9 +1175,9 @@ class Controller end # diary.xmlを入れ替える処理 - when "replace" + when "replace" case params["action"] - when "exec" + when "exec" # この段階のエラーに対しては強度のエラーを発する checkflag = true db["logpath"] = Controller.get_mpart_value(cgi["logpath"]) @@ -1188,7 +1217,7 @@ class Controller db["feed"] = Feed.readxml(XMLPATH + File.basename(session["filepath"])) db["entry"] = Entry.readxml(XMLPATH + File.basename(session["filepath"])) - when "confirm" + when "confirm" # 入力されたログファイルパスが既に存在するかを確認 checkflag = true db["logpath"] = Controller.get_mpart_value(cgi["logpath"]) @@ -1343,27 +1372,27 @@ def main htmlwriter = HtmlWriter.new("./erbtemp/login.html.erb", binding) else case params["mode"] - when "selectlog" + when "selectlog" htmlwriter = HtmlWriter.new("./erbtemp/select.html.erb", binding) - when "newentry" + when "newentry" htmlwriter = HtmlWriter.new("./erbtemp/newentry.html.erb", binding) - when "editentry" + when "editentry" htmlwriter = HtmlWriter.new("./erbtemp/editentry.html.erb", binding) - when "delentry" + when "delentry" htmlwriter = HtmlWriter.new("./erbtemp/delentry.html.erb", binding) - when "editfeed" + when "editfeed" htmlwriter = HtmlWriter.new("./erbtemp/editfeed.html.erb", binding) - when "log" + when "log" htmlwriter = HtmlWriter.new("./erbtemp/log.html.erb", binding) - when "insert" + when "insert" htmlwriter = HtmlWriter.new("./erbtemp/insertfeed.html.erb", binding) - when "replace" + when "replace" htmlwriter = HtmlWriter.new("./erbtemp/replacefeed.html.erb", binding) - when "import" + when "import" htmlwriter = HtmlWriter.new("./erbtemp/indeximport.html.erb", binding) - when "reset" + when "reset" htmlwriter = HtmlWriter.new("./erbtemp/reset.html.erb", binding) - when "error" + when "error" htmlwriter = HtmlWriter.new("./erbtemp/error.html.erb", binding) else htmlwriter = HtmlWriter.new("./erbtemp/index.html.erb", binding) @@ -1389,7 +1418,7 @@ begin rescue => evar # エラーが発生した場合、それを画面に表示します detail = ("%s: %s (%s)\n" % - [evar.backtrace[0], evar.message, evar.send('class')]) + - evar.backtrace[1..-1].join("\n") + [evar.backtrace[0], evar.message, evar.send('class')]) + + evar.backtrace[1..-1].join("\n") puts "content-type: text/html\n\n\n" + detail end -- 2.11.0