• R/O
  • HTTP
  • SSH
  • HTTPS

feedgenerator: Commit

rubyで構築された、Atom Feedの管理ツールです


Commit MetaInfo

Revisioneb98d62a79dfaa23eaa34c58ebfc242f33f469de (tree)
Time2013-09-12 20:56:38
AuthorKureha Hisame <kureha@gmai...>
CommiterKureha Hisame

Log Message

- add tag function to newentry and editentry.

Change Summary

Incremental Difference

--- a/define.rb
+++ b/define.rb
@@ -12,8 +12,12 @@
1212 LOGININFO = [
1313 {:id => "login", :password => "password", :name => "テストユーザ"}
1414 ]
15-# インターフェースのテーブルの幅
16-TABLEWIDTH = 1000
15+# タグリスト
16+TAGS = [
17+ {:term => "music", :label => "音楽"},
18+ {:term => "game", :label => "ゲーム"},
19+ {:term => "circle", :label => "サークル"}
20+]
1721 # XMLファイル格納先までの相対パス
1822 XMLPATH = "./../lunardial/xml/"
1923 # FeedBlogを設置したディレクトリのURL
--- a/erbtemp/editentry.html.erb
+++ b/erbtemp/editentry.html.erb
@@ -144,6 +144,7 @@
144144 }
145145 </style>
146146 <% end %>
147+ <%= htmlparts['headjs_tag'] %>
147148 </head>
148149 <body class="yui-skin-sam">
149150 <form action="<%= cgi.script_name %>" method="POST">
@@ -167,7 +168,14 @@
167168 <%= entry.name[val] %>
168169 </th>
169170 <td class="large middle padding_normal">
170- <input type="hidden" name="<%= val %>" value="<%= entry.send(val) %>"><% if val != "content" %><%= entry.send(val) %><% else %><%= entry.content_for_view %><% end %>
171+ <input type="hidden" name="<%= val %>" value="<%= entry.send(val) %>">
172+ <% if val == "category" %>
173+ <div id="entry_category"></div>
174+ <% elsif val != "content" %>
175+ <%= entry.send(val) %>
176+ <% else %>
177+ <%= entry.content_for_view %>
178+ <% end %>
171179 </td>
172180 </tr>
173181 <tr style="display: <%= entry.display[val] %>;">
@@ -194,8 +202,12 @@
194202 <th class="small middle padding_normal">
195203 <%= entry.name[val] %>
196204 </th>
197- <td class="large middle padding_normal center">
198- <% if val == "content" %>
205+ <td class="large middle padding_normal left">
206+ <% if val == "category" %>
207+ <input type="text" name="<%= val %>" value="<%= entry.send(val) %>" class="max_width" style="display: none;">
208+ <div id="entry_category"></div>
209+ <input type="button" value="タグ追加" onclick="javascript: addTagSelectBox();">
210+ <% elsif val == "content" %>
199211 <textarea name="<%= val %>" rows="10" class="max_width" id="contenteditor"><%= entry.content_for_generator %></textarea>
200212 <% elsif val == "updated" %>
201213 <input type="text" name="<%= val %>" value="<%= Time.now.iso8601 %>" class="max_width"><% else %>
@@ -212,7 +224,7 @@
212224 </table>
213225 <br>
214226 <div class="center">
215- <input type="hidden" name="mode" value="editentry"><input type="hidden" name="action" value="confirm"><input type="submit" value="確認">
227+ <input type="hidden" name="mode" value="editentry"><input type="hidden" name="action" value="confirm"><input type="submit" value="確認" onclick="javascript: unionCategory();">
216228 </div>
217229 <br>
218230 <% when "back" %>
@@ -226,8 +238,12 @@
226238 <th class="small middle padding_normal">
227239 <%= entry.name[val] %>
228240 </th>
229- <td class="large middle padding_normal center">
230- <% if val == "content" %>
241+ <td class="large middle padding_normal left">
242+ <% if val == "category" %>
243+ <input type="text" name="<%= val %>" value="<%= entry.send(val) %>" class="max_width" style="display: none;">
244+ <div id="entry_category"></div>
245+ <input type="button" value="タグ追加" onclick="javascript: addTagSelectBox();">
246+ <% elsif val == "content" %>
231247 <textarea name="<%= val %>" rows="10" class="max_width" id="contenteditor"><%= entry.content_for_generator %></textarea>
232248 <% else %>
233249 <input type="text" name="<%= val %>" value="<%= entry.send(val) %>" class="max_width"><% end %>
@@ -243,7 +259,7 @@
243259 </table>
244260 <br>
245261 <div class="center">
246- <input type="hidden" name="mode" value="editentry"><input type="hidden" name="action" value="confirm"><input type="submit" class="wymupdate" value="確認">
262+ <input type="hidden" name="mode" value="editentry"><input type="hidden" name="action" value="confirm"><input type="submit" class="wymupdate" value="確認" onclick="javascript: unionCategory();">
247263 </div>
248264 <br>
249265 <% else %>
--- a/erbtemp/newentry.html.erb
+++ b/erbtemp/newentry.html.erb
@@ -144,6 +144,7 @@
144144 }
145145 </style>
146146 <% end %>
147+ <%= htmlparts['headjs_tag'] %>
147148 </head>
148149 <body class="yui-skin-sam">
149150 <form action="<%= cgi.script_name %>" method="POST">
@@ -167,7 +168,14 @@
167168 <%= entry.name[val] %>
168169 </th>
169170 <td class="large middle padding_normal">
170- <input type="hidden" name="<%= val %>" value="<%= entry.send(val) %>"><% if val != "content" %><%= entry.send(val) %><% else %><%= entry.content_for_view %><% end %>
171+ <input type="hidden" name="<%= val %>" value="<%= entry.send(val) %>">
172+ <% if val == "category" %>
173+ <div id="entry_category"></div>
174+ <% end %>
175+ <% if val != "content" %>
176+ <%= entry.send(val) %>
177+ <% else %>
178+ <%= entry.content_for_view %><% end %>
171179 </td>
172180 </tr>
173181 <tr style="display: <%= entry.display[val] %>;">
@@ -198,7 +206,11 @@
198206 <%= entry.name[val] %>
199207 </th>
200208 <td class="large left padding_normal">
201- <% if val != "content" %>
209+ <% if val == "category" %>
210+ <input type="text" name="<%= val %>" value="<%= entry.send(val) %>" class="max_width" style="display: none;">
211+ <div id="entry_category"></div>
212+ <input type="button" value="タグ追加" onclick="javascript: addTagSelectBox();">
213+ <% elsif val != "content" %>
202214 <input type="text" name="<%= val %>" value="<%= entry.send(val) %>" class="max_width"><% else %>
203215 <textarea name="<%= val %>" rows="10" class="max_width" id="contenteditor"><%= entry.content_for_generator %></textarea>
204216 <% end %>
@@ -214,7 +226,7 @@
214226 </table>
215227 <br>
216228 <div class="center">
217- <input type="hidden" name="mode" value="newentry"><input type="hidden" name="action" value="confirm"><input type="submit" value="確認">
229+ <input type="hidden" name="mode" value="newentry"><input type="hidden" name="action" value="confirm"><input type="submit" value="確認" onclick="javascript: unionCategory();">
218230 </div>
219231 <br>
220232 <% else %>
@@ -235,6 +247,10 @@
235247 <% date = Time.now.iso8601 %>
236248 <% if val == "content" %>
237249 <textarea name="<%= val %>" rows="10" class="max_width" id="contenteditor"><% if entry.content.empty? %><p><br></p><% else %><%= entry.content_for_generator %><% end %></textarea>
250+ <% elsif val == "category" %>
251+ <input type="text" name="<%= val %>" value="<%= entry.send(val) %>" class="max_width" style="display: none;">
252+ <div id="entry_category"></div>
253+ <input type="button" value="タグ追加" onclick="javascript: addTagSelectBox();">
238254 <% elsif val == "entryid" %>
239255 <input type="text" name="<%= val %>" value="<%= db["feed"].feedid %>?<%= date %>" class="max_width"><% elsif val == "updated" || val == "published" %>
240256 <input type="text" name="<%= val %>" value="<%= date %>" class="max_width"><% elsif val == "url" %>
@@ -252,7 +268,7 @@
252268 </table>
253269 <br>
254270 <div class="center">
255- <input type="hidden" name="mode" value="newentry"><input type="hidden" name="action" value="confirm"><input type="submit" class="wymupdate" value="確認">
271+ <input type="hidden" name="mode" value="newentry"><input type="hidden" name="action" value="confirm"><input type="submit" class="wymupdate" value="確認" onclick="javascript: unionCategory();">
256272 </div>
257273 <br>
258274 <% end %>
--- /dev/null
+++ b/erbtemp/parts_headjs_tag.html.erb
@@ -0,0 +1,127 @@
1+<script>
2+ $(document).ready(function() {
3+ // カテゴリーを展開するメソッド
4+ // カテゴリーを表示する場合のみ実行
5+ var categoryTextValues = $("*[type=text][name=category]").val();
6+ // 書き込み時
7+ if (categoryTextValues != undefined) {
8+ // カテゴリーをRuby情報からJSに変換
9+ var categoryValues = categoryTextValues;
10+ var categoryList = [];
11+ for(var i = 0; i < $(categoryValues).length; i++) {
12+ categoryList.push({
13+ "term" : $(categoryValues).eq(i).attr("term"),
14+ "label" : $(categoryValues).eq(i).attr("label")
15+ });
16+ }
17+
18+ addTagSelectBoxFromCategory(categoryList);
19+ return;
20+ }
21+
22+ // カテゴリーを確認する際のみ実行
23+ var categoryHiddenValues = $("*[type=hidden][name=category]").val();
24+ // 書き込み時
25+ if (categoryHiddenValues != undefined) {
26+ // カテゴリーをRuby情報からJSに変換
27+ var categoryValues = categoryHiddenValues;
28+ var categoryList = [];
29+ var addHtml = [];
30+ for(var i = 0; i < $(categoryValues).length; i++) {
31+ categoryList.push({
32+ "term" : $(categoryValues).eq(i).attr("term"),
33+ "label" : $(categoryValues).eq(i).attr("label")
34+ });
35+ addHtml.push($(categoryValues).eq(i).attr("label") + '&nbsp;(' + $(categoryValues).eq(i).attr("term") + ')');
36+ }
37+
38+ $("#entry_category").html(addHtml.join("<br>\n"));
39+ return;
40+ }
41+ });
42+
43+ function getDefaultTags() {
44+ var tagList = [];
45+ // 各tag要素を取得して配列に格納
46+ tagList.push({
47+ "term" : "",
48+ "label" : "タグを選択してください"
49+ });
50+ <% TAGS.each do |tag| %>
51+ tagList.push({
52+ "term" : '<%= tag[:term] %>',
53+ "label" : '<%= tag[:label] %>'
54+ });
55+ <% end %>
56+
57+ return tagList;
58+ }
59+
60+ function addTagSelectBox() {
61+ var tagList = getDefaultTags();
62+ var addHtml = [];
63+
64+ addHtml.push('<select name="tag">');
65+ for(var i = 0; i < tagList.length; i++) {
66+ addHtml.push('<option value="' + tagList[i]["term"] + '">' + tagList[i]["label"] + '</option>');
67+ }
68+ addHtml.push('</select>');
69+
70+ $("#entry_category").append(addHtml.join('') + "<br>");
71+ }
72+
73+ function getTags() {
74+ var tagList = [];
75+ var tagListHtml = $("*[name=tag]");
76+ var tagTemp = {};
77+ for(var i = 0; i < tagListHtml.length; i++) {
78+ // 各tag要素を取得して配列に格納
79+ if(tagListHtml.eq(i).val() != "") {
80+ tagTemp = {
81+ "term" : tagListHtml.eq(i).val(),
82+ "label" : tagListHtml.eq(i).find(":selected").text()
83+ };
84+ tagList.push(tagTemp);
85+ }
86+ }
87+
88+ return tagList;
89+ }
90+
91+ function unionCategory() {
92+ var tagList = getTags();
93+ var stringBuffer = [];
94+ for(var i = 0; i < tagList.length; i++) {
95+ stringBuffer.push('<category term="' + tagList[i]["term"] + '" label="' + tagList[i]["label"] + '"/>');
96+ }
97+ $("*[type=text][name=category]").val(stringBuffer.join('\n'));
98+ }
99+
100+ function addTagSelectBoxFromCategory(categoryList) {
101+ $("#entry_category").html("");
102+ for(var j = 0; j < categoryList.length; j++) {
103+ // 選択対象を取得
104+ var selectedTagTerm = categoryList[j]["term"];
105+ var selectedTagLabel = categoryList[j]["label"];
106+ var selectedTagSetFlag = false;
107+
108+ var tagList = getDefaultTags();
109+ var addHtml = [];
110+ addHtml.push('<select name="tag">');
111+ for(var i = 0; i < tagList.length; i++) {
112+ if (tagList[i]["term"] == selectedTagTerm && tagList[i]["label"] == selectedTagLabel) {
113+ addHtml.push('<option value="' + tagList[i]["term"] + '" selected="selected">' + tagList[i]["label"] + '</option>');
114+ selectedTagSetFlag = true;
115+ } else {
116+ addHtml.push('<option value="' + tagList[i]["term"] + '">' + tagList[i]["label"] + '</option>');
117+ }
118+ }
119+
120+ if (!selectedTagSetFlag) {
121+ addHtml.push('<option value="' + selectedTagTerm + '" selected="selected">' + selectedTagLabel + '</option>');
122+ }
123+ addHtml.push('</select>');
124+ $("#entry_category").append(addHtml.join('') + "<br>");
125+ }
126+ }
127+ </script>
\ No newline at end of file
--- a/feedgenerator.rb
+++ b/feedgenerator.rb
@@ -274,7 +274,7 @@ class Entry < AbstractEntry
274274 @attr = {}
275275
276276 # 内部データの項目名を格納する配列です
277- @paramlist = ["entryid", "title", "summary", "published", "updated", "url", "content", "others"]
277+ @paramlist = ["entryid", "title", "summary", "published", "updated", "url", "content", "category", "others"]
278278
279279 # AbstractEntryのinitializeメソッドを呼び出し、値を@attr配列に格納します
280280 super(hash)
@@ -283,7 +283,8 @@ class Entry < AbstractEntry
283283 @display = {"entryid" => "none", "title" => "",
284284 "summary" => "", "published" => "none",
285285 "updated" => "none", "url" => "",
286- "content" => "", "others"=>"none"}
286+ "content" => "", "category" => "",
287+ "others"=>"none"}
287288
288289 # デバッグモードの場合、全ての入力要素を表示します
289290 if DEBUG == true
@@ -296,7 +297,7 @@ class Entry < AbstractEntry
296297 @name = {"entryid" => "記事固有のID", "title" => "記事のタイトル",
297298 "summary" => "記事の簡単な説明", "published" => "記事の出版時刻",
298299 "updated" => "記事の更新時刻", "url" => "記事へのURLアドレス",
299- "content" => "記事の本文", "others"=>"その他の項目"}
300+ "content" => "記事の本文", "category" => "タグ", "others"=>"その他の項目"}
300301 end
301302
302303 # Atom XMLファイルを読み込んで解析し、等価なEntryオブジェクト配列を返却するメソッドです
@@ -312,6 +313,7 @@ class Entry < AbstractEntry
312313 # XML解析部分です。各element毎に判定を行います
313314 doc.elements.each("feed/entry") do |elm|
314315 xml = {}
316+ category = []
315317 others = []
316318 elm.elements.each do |child|
317319 begin
@@ -322,6 +324,8 @@ class Entry < AbstractEntry
322324 xml[:url] = child.attributes["href"]
323325 when "title", "summary", "summary", "published", "updated", "content"
324326 xml[child.name.to_sym] = child.text
327+ when "category"
328+ category << child.to_s
325329 else
326330 # 上記判定以外の全要素は配列に格納します
327331 others.push(child.to_s)
@@ -329,6 +333,8 @@ class Entry < AbstractEntry
329333 rescue NoMethodError
330334 end
331335 end
336+ # Category要素を代入します
337+ xml[:category] = category.join("\n")
332338 # Others要素を結合して代入します
333339 xml[:others] = others.join("\n")
334340 entrylist.push(Entry.new(xml))
@@ -482,6 +488,7 @@ class Entry < AbstractEntry
482488 buf.push("<updated>#{@attr[:updated]}</updated>")
483489 buf.push("<link href=\"#{@attr[:url]}\" />")
484490 buf.push("<content type=\"html\">#{@attr[:content]}</content>")
491+ buf.push("#{CGI.unescapeHTML(@attr[:category])}") if @attr[:category] != ""
485492 buf.push("#{CGI.unescapeHTML(@attr[:others])}") if @attr[:others] != ""
486493 buf.push("</entry>")
487494
@@ -1327,18 +1334,6 @@ def main
13271334 logger.info "次のアクセスがログインに失敗しました。ログインID:#{cgi["loginid"]}, IPアドレス:#{cgi.remote_addr}"
13281335 end
13291336
1330- # メニューとして表示されるHTML文字列です
1331- if params["target_filepath"].blank?
1332- menu = "<div class=\"divstyle\" style=\"width: #{TABLEWIDTH}px;\"><div class=\"divstyle\" align=\"center\" style=\"margin-bottom: 5px;\">現在編集中のファイル : #{session["filepath"]} "
1333- else
1334- menu = "<div class=\"divstyle\" style=\"width: #{TABLEWIDTH}px;\"><div class=\"divstyle\" align=\"center\" style=\"margin-bottom: 5px;\">現在編集中のファイル : #{session["target_filepath"]} "
1335- end
1336- if USEFILEMANAGER == true
1337- menu += "[ <a href=\"#{cgi.script_name}?mode=selectlog\">他のファイルを選択</a> ]</div>[ <a href=\"#{cgi.script_name}\">トップページ</a> | 記事管理 ( <a href=\"#{cgi.script_name}?mode=newentry\">作成</a> | <a href=\"#{cgi.script_name}?mode=editentry\">編集</a> | <a href=\"#{cgi.script_name}?mode=delentry\">消去</a> ) | <a href=\"#{cgi.script_name}?mode=editfeed\">XML情報編集</a> | <a href=\"#{cgi.script_name}?mode=log\">ログ管理</a> | <a href=\"#{cgi.script_name}?mode=import\">インポート</a> | <a href=\"#{FILEMANAGER}\" target=\"_blank\">ファイル管理</a> | <a href=\"#{cgi.script_name}?mode=reset\">初期化</a> | <a href=\"#{cgi.script_name}?mode=logout\">ログアウト</a> ]</div>"
1338- else
1339- menu += "[ <a href=\"#{cgi.script_name}?mode=selectlog\">他のファイルを選択</a> ]</div>[ <a href=\"#{cgi.script_name}\">トップページ</a> | 記事管理 ( <a href=\"#{cgi.script_name}?mode=newentry\">作成</a> | <a href=\"#{cgi.script_name}?mode=editentry\">編集</a> | <a href=\"#{cgi.script_name}?mode=delentry\">消去</a> ) | <a href=\"#{cgi.script_name}?mode=editfeed\">XML情報編集</a> | <a href=\"#{cgi.script_name}?mode=log\">ログ管理</a> | <a href=\"#{cgi.script_name}?mode=import\">インポート</a> | <a href=\"#{cgi.script_name}?mode=reset\">初期化</a> | <a href=\"#{cgi.script_name}?mode=logout\">ログアウト</a> ]</div>"
1340- end
1341-
13421337 # ビュー部分
13431338 # modeとactionの相関図は以下のようになります。
13441339 # [mode] + [action]
@@ -1382,6 +1377,7 @@ def main
13821377 # ヘッダタグ出力
13831378 htmlparts['headtag'] = HtmlWriter.new("./erbtemp/parts_headtag.html.erb", binding).to_code
13841379 htmlparts['headjs_switchpost'] = HtmlWriter.new("./erbtemp/parts_headjs_switchpost.html.erb", binding).to_code
1380+ htmlparts['headjs_tag'] = HtmlWriter.new("./erbtemp/parts_headjs_tag.html.erb", binding).to_code
13851381 htmlparts['menu'] = HtmlWriter.new("./erbtemp/parts_menu.html.erb", binding).to_code
13861382 htmlparts['selectfile'] = HtmlWriter.new("./erbtemp/parts_selectfile.html.erb", binding).to_code
13871383 # インフォメーションエリア
Show on old repository browser