OSDN Git Service

update generator and mixi.
authorelixirel <elixirel@users.sourceforge.jp>
Fri, 5 Jun 2009 06:20:25 +0000 (15:20 +0900)
committerelixirel <elixirel@users.sourceforge.jp>
Fri, 5 Jun 2009 06:20:25 +0000 (15:20 +0900)
generator.html
js/lunardial/feedblog_gen.js
js/lunardial/feedblog_mixi.js
mixi.html

index 7a867ac..94c590e 100644 (file)
@@ -60,7 +60,7 @@
                 <tbody>
                     <tr>
                         <td class="default" colspan="2" style="padding: 5px; text-align: center; vertical-align: bottom;">
-                            <table>
+                            <table style="width: 100%">
                                 <tbody>
                                     <tr>
                                         <td class="formnavi" style="padding: 0px 20px 0px 20px;">
                                         <td>
                                         </td>
                                         <td class="forminput">
-                                            出力時、&lt;content&gt;要素の改行位置に&lt;br&gt;を挿入する <input type="checkbox" value="1" id="addContentBr">
+                                            <input type="checkbox" value="1" id="addContentBr">
+                                            <label for='addContentBr'>
+                                                出力時、&lt;content&gt;要素の改行位置に&lt;br&gt;を挿入する
+                                            </label>
                                         </td>
                                     </tr>
                                 </tbody>
                             <table style="width: 100%">
                                 <tbody>
                                     <tr>
-                                        <td class="formheader">
-                                            ▼ 出力
+                                        <td class="formheader" onclick="javascript: closePanel('outputArea')">
+                                            ▼ 出力 (UTF-8エンコーディングで保存してください)
                                         </td>
                                     </tr>
                                     <tr>
                                         <td class="forminput">
-                                            <textarea id="stdout" rows="20" style="width: 100%">
-                                            </textarea>
+                                            <div id="outputArea">
+                                                <textarea id="stdout" rows="20" style="width: 100%">
+                                                </textarea>
+                                            </div>
                                         </td>
                                     </tr>
                                 </tbody>
index 21c89bb..bbc6d52 100644 (file)
@@ -6,12 +6,10 @@
  * @since 2009/06/03
  * @version 0.1.0.0
  */
-// feedblogの設置アドレス
-var pageAddr = "http://lunardial.sakura.ne.jp/index.html";
 // Feex XMLの<content>要素で、<br>を使用しているか?
 var inputValidateMode = 0;
-// コンボボックスの横幅を指定します
-var comboWidth = 300;
+// 出力時に<content>要素に<br>を付加するか否かを格納する変数
+var outputValidateMode = 1;
 // ログのリストが書かれたXMLのファイルパスを記入してください
 var logXmlUrl = "./xml/loglist.xml";
 
@@ -21,13 +19,18 @@ var feedInfo;
 var entryList;
 // 現在編集中の記事の位置を示す変数
 var editIndex;
-// 出力時に<content>要素に<br>を付加するか否かを格納する変数
-var outputValidateMode = 1;
+// feedblogの設置アドレスを格納する変数
+var pageAddr;
+// コンボボックスの横幅を指定します
+var comboWidth = 300;
 
 /**
  * 編集中の内容を反映し、画面に出力します
  */
 function applyChange(){
+    feedInfo = applyFeedinfo();
+    pageAddr = feedInfo.alternate;
+    
     if (editIndex < 0) {
         var entry = new Object();
         var dateRfc3339 = getDate();
@@ -36,7 +39,7 @@ function applyChange(){
         entry.summary = "";
         entry.published = dateRfc3339;
         entry.updated = dateRfc3339;
-        entry.link = pageAddr + entry.id;
+        entry.link = pageAddr + "#" + entry.id;
         entry.content = document.getElementById("entry_stdin").value;
         
         entryList.unshift(entry);
@@ -47,7 +50,6 @@ function applyChange(){
         entryList[editIndex].content = document.getElementById("entry_stdin").value;
     }
     
-    feedInfo = applyFeedinfo();
     refleshEntrylistBox();
     document.getElementById("stdout").value = toXml(feedInfo, entryList);
 }
@@ -146,6 +148,7 @@ function analyzeTargetXml(xmlData){
     }
     
     feedinfoLoader(feedInfo);
+    pageAddr = feedInfo.alternate;
     
     refleshEntrylistBox();
     document.getElementById("entry_title").value = "";
@@ -310,10 +313,6 @@ function toXml(finfo, elist){
  * @param {String} content
  */
 function convertContent(content){
-    if (!jQuery.browser.msie) {
-        content = content.replace(/[ ]*$/g, "");
-    }
-    
     if (document.getElementById("addContentBr").checked) {
         content = content.replace(/[\n\r]|\r\n/g, "<br>\n");
         // content = content.replace(/(<br>|<\/p>|<\/h\d>|<\/div>)(?=[^\n])/ig, "$1\n");
index e11fecd..801d708 100644 (file)
 /**
- * FeedBlog CoreScript Ext Version
+ * FeedBlog Generator
  *
  * @copyright 2009 FeedBlog Project (http://sourceforge.jp/projects/feedblog/)
  * @author Kureha Hisame (http://lunardial.sakura.ne.jp/) & Yui Naruse (http://airemix.com/)
- * @since 2008/10/16
- * @version 2.1.0.0
+ * @since 2009/06/03
+ * @version 0.1.0.0
  */
-// ブログ本体のHTMLファイルの名前を記入してください
-var blogUrl = "./index.html"
-
-// 最新の日記を示すパスへの文字列です。最新の日記を置く場所を変えたいときは変更してください。
-var latestXml = "./xml/diary.xml";
-
 // ログのリストが書かれたXMLのファイルパスを記入してください
 var logXmlUrl = "./xml/loglist.xml";
+// Feex XMLの<content>要素で、<br>を使用しているか?
+var inputValidateMode = 0;
 
-// Ext jsパネルのサイズを記述してください
-var extPanelWidth = 580;
-
-// ログを表示するコンボボックスのサイズを記述してください
-var extComboWidth = 150;
-
-// 日記間のスパン(間隔)をPIXEL単位で記述してください
-var entrySpan = 3;
-
-// 一画面あたりの表示日記数です
-var showLength = 3;
+// フィードの基本情報を記録する変数
+var feedInfo;
+// 記事リストを格納する変数
+var entryList;
+// 現在編集中の記事の位置を示す変数
+var viewIndex;
+// コンボボックスの横幅を指定します
+var comboWidth = 300;
 
-// 検索結果をメモリ上に保持する変数です
-var loadedEntries;
+/**
+ * 全DOMが使用可能になり次第、自動的に呼ばれる関数
+ */
+function initLoad(){
+    logXMLLoader();
+}
 
 /**
- * XMLファイルから読み込んだファイルのバリデートモードを選択します。
- * 0 = 改行コード部分に<br/>を挿入
- * 1 = 改行コード部分に<br/>を挿入しない
+ * ログファイル選択用のコンボボックスをid名:logSelecterに生成します
  */
-var validateMode = "0";
+function logXMLLoader(){
+    // ログ用のXMLを読み込みます
+    jQuery.ajax({
+        url: logXmlUrl,
+        method: "GET",
+        success: function(xmlData){
+            var separateTag = xmlData.getElementsByTagName("file");
+            var fileList = new Array(separateTag.length);
+            var initUrl;
+            
+            // 読み込んだ要素をStoreに格納して表示
+            var boxBuffer = [];
+            boxBuffer.push("<form name='logform'><select name='logbox' style='width: " + comboWidth + "px' onchange='xmlLoader(this.options[this.selectedIndex].value)'>");
+            for (var i = 0; i < separateTag.length; i++) {
+                if (i == 0) {
+                    initUrl = separateTag[i].getElementsByTagName("path")[0].firstChild.nodeValue;
+                }
+                boxBuffer.push("<option value='" + separateTag[i].getElementsByTagName("path")[0].firstChild.nodeValue + "'/>" + separateTag[i].getElementsByTagName("display")[0].firstChild.nodeValue + " (" + separateTag[i].getElementsByTagName("path")[0].firstChild.nodeValue + ")" + "</option>");
+            }
+            boxBuffer.push("</select></form>");
+            
+            // コンボボックス要素を生成
+            document.getElementById("logSelecter").innerHTML = boxBuffer.join("");
+            
+            // 最新の日記をローディングする
+            xmlLoader(initUrl);
+        }
+    });
+}
 
 /**
- * Ext jsパネルを実際に生成します。この部分を編集することでデザインを変更可能です。
- * @param {String} title パネルのタイトル部分に表示する文字列
- * @param {String} drawitem パネルの本文を格納したDIV要素のid
- * @param {String} renderto 「タイトル・更新日時・本文」の1日分の日記データを焼き付けるDIV要素のid
- * @param {String} closed (Ext jsパネルオプション)日記をクローズ状態で生成するか否か
+ * URLを指定し、指定されたFeedXmlを読み込み、解析を行います
+ * @param {String} url
  */
-function generatePanel(title, drawitem, renderto, closed){
-    // Ext jsパネルを生成する
-    new Ext.Panel({
-        contentEl: drawitem,
-        width: extPanelWidth,
-        title: title,
-        hideCollapseTool: false,
-        titleCollapse: true,
-        collapsible: true,
-        collapsed: closed,
-        renderTo: renderto
+function xmlLoader(url){
+    // 日記本体のデータをローディングする
+    var loader = new jQuery.ajax({
+        url: url,
+        method: "GET",
+        success: analyzeTargetXml
     });
 }
 
 /**
- * Extへのイベント登録です。すべてのDOMが利用可能になった時点で実行されます。
+ * 引数に存在するXMLデータを解析し、画面に反映します
+ * @param {Object} xmlData
  */
-$(document).ready(function(){
-    // 特定の過去ログの探索モードか否かを判別するためにハッシュを取得する
-    var urlhash = "" + location.hash.substring(1);
+function analyzeTargetXml(xmlData){
+    var rootTag = xmlData.getElementsByTagName("feed");
+    var entryTag = xmlData.getElementsByTagName("entry");
     
-    // ハッシュが空か、ハッシュ形式の正規表現に一致しないようなら通常モードで実行
-    if (urlhash.length == 0) {
-        xmlLoader(latestXml);
-        logXMLLoader();
-    }
-    // ハッシュ形式の正規表現に一致したら探索モード
-    else {
-        searchMode(urlhash);
-        logXMLLoader();
+    // グローバル変数を初期化
+    feedInfo = null;
+    entryList = [];
+    
+    for (var i = 0; i < entryTag.length; i++) {
+        entryList.push(new Entry(entryTag[i]));
     }
-});
+    
+    refleshEntrylistBox();
+    entryLoader(0);
+}
 
 /**
- * 記事クラス
- * @param {Object} obj entry 要素の DOM オブジェクト
+ * HTMLの内容をFeedInfoに変換します
  */
-function Entry(obj){
-    this.title = $("title:first", obj).text();
-    if (this.title == "") 
-        requiredElementError(obj, "title");
-    this.title = "<span>" + validateText(this.title) + "</span>";
-    this.content = $("content:first", obj).text();
-    this.content = "<span>" + validateText(this.content) + "</span>";
-    this.id = $("id:first", obj).text();
-    if (this.id == "") 
-        requiredElementError(obj, "id");
-    this.date = $("updated:first", obj).text();
-    if (this.date == "") 
-        requiredElementError(obj, "updated");
-    this.date = validateData(this.date);
+function applyFeedinfo(){
+    var finfo = new Object();
+    finfo.title = document.getElementById("feed_title").value;
+    finfo.subtitle = document.getElementById("feed_subtitle").value;
+    finfo.self = document.getElementById("feed_self").value;
+    finfo.alternate = document.getElementById("feed_alternate").value;
+    finfo.id = document.getElementById("feed_id").value;
+    finfo.rights = document.getElementById("feed_rights").value;
+    finfo.authorname = document.getElementById("feed_authorname").value;
+    finfo.authoremail = document.getElementById("feed_authoremail").value;
+    
+    return finfo;
 }
 
 /**
- * 呼び出すとDIV:id名:writeArea上のHTMLを削除し、ロードエフェクトを表示します
+ * 指定したEntryList上のインデックスの記事をロードします
+ * @param {int} index
  */
-function loadingEffect(){
-    document.getElementById("writeArea").innerHTML = '<br/><br/><div id="drawPanel"><div id="drawItem" class="code" style="text-align: center;"><\/div><\/div>';
-    document.getElementById("drawItem").innerHTML = '<br/><img src="./js/ext/resources/images/default/shared/blue-loading.gif"><br/>長時間画面が切り替わらない場合はページをリロードしてください。<br/><br/>';
-    
-    // ロード表示用のパネルを生成
-    generatePanel("Now Loading .....", "drawItem", "drawPanel", false);
+function entryLoader(index){
+    document.getElementById("entry_title").value = entryList[index].title;
+    document.getElementById("entry_stdin").value = validateText(entryList[index].content);
+    viewIndex = index;
 }
 
 /**
- * 日記データのエラー時の処理を行います
+ * 記事一覧の情報を表示するセレクトボックスにentryListの情報を反映させます
  */
-function requiredElementError(parent, name){
-    Ext.Msg.alert("Error!", parent.ownerDocument.URL + ": 必須な要素 " +
-    name +
-    " が存在しないか空な " +
-    parent.tagName +
-    " 要素が存在します");
+function refleshEntrylistBox(){
+    var stringBuffer = [];
+    stringBuffer.push("<form name='logform'><select name='logbox' style='width: " + comboWidth + "px' onchange='entryLoader(this.options[this.selectedIndex].value)'>");
+    for (var i = 0; i < entryList.length; i++) {
+        stringBuffer.push("<option value='" + i + "'/>" + entryList[i].title + "</option>");
+    }
+    stringBuffer.push("</select></form>");
+    // コンボボックス要素を生成
+    document.getElementById("entrySelect").innerHTML = stringBuffer.join("");
 }
 
-function xmlAttrContentEscape(str){
-    return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
+/**
+ * Feed基本情報保持クラス
+ * @param {Object} obj
+ */
+function FeedInfo(obj){
+    this.title = xmlAttrContentUnescape($("title:first", obj).text());
+    this.subtitle = xmlAttrContentUnescape($("subtitle:first", obj).text());
+    this.self = xmlAttrContentUnescape($("link[rel=self]", obj).attr("href"));
+    this.alternate = xmlAttrContentUnescape($("link[rel=alternate]", obj).attr("href"));
+    this.updated = xmlAttrContentUnescape($("updated:first", obj).text());
+    this.id = xmlAttrContentUnescape($("id:first", obj).text());
+    this.rights = xmlAttrContentUnescape($("rights:first", obj).text());
+    this.authorname = xmlAttrContentUnescape($("author>name", obj).text());
+    this.authoremail = xmlAttrContentUnescape($("author>email", obj).text());
 }
 
 /**
- * 日付のHTML表示用バリデーション処理を行います
- * @param {String} data RFC3339形式のdate-time文字列
+ * 記事クラス
+ * @param {Object} obj entry 要素の DOM オブジェクト
  */
-function validateData(data){
-    var regT = new RegExp("T", "gm");
-    data = data.replace(regT, " ");
-    
-    // 秒数の小数点以下の部分はカットする
-    data = data.substring(0, 19);
-    
-    return data;
+function Entry(obj){
+    this.id = xmlAttrContentUnescape($("id:first", obj).text());
+    this.title = xmlAttrContentUnescape($("title:first", obj).text());
+    this.summary = xmlAttrContentUnescape($("summary:first", obj).text());
+    this.published = xmlAttrContentUnescape($("published:first", obj).text());
+    this.updated = xmlAttrContentUnescape($("updated:first", obj).text());
+    this.link = xmlAttrContentUnescape($("link:first", obj).attr("href"));
+    this.content = xmlAttrContentUnescape($("content:first", obj).text());
+    
+    if (inputValidateMode == 0) {
+        this.content = this.content.replace(/[\r\n]|\r\n/g, "");
+        this.content = this.content.replace(/<br>/ig, "\n");
+    }
 }
 
 /**
@@ -142,7 +174,6 @@ function validateData(data){
  * @param {String} contents 日記の本文が格納されている文字列
  */
 function validateText(contents){
-
     // 置換に使用する変数
     var target_tag;
     var target_element;
@@ -157,342 +188,67 @@ function validateText(contents){
     }
     
     // Aタグを変換する
-    var base_uri = document.location.href.replace(/[^\/]+$/, '');
-    var func = function(target, quote, url) {
+    /*
+     var base_uri = document.location.href.replace(/[^\/]+$/, '');
+     var func = function(target, quote, url){
+     // 相対URIが検出された場合、フルに置換する
+     return '( ' + url.replace(/^(?!http)(?:\.\/)?/, base_uri) + ' )';
+     };
+     contents = contents.replace(/<a[^>]*href=(["'])(.*?)\1[^>]*>.*?<\/a>/i, func);
+     */
+    // Aタグを変換する
+    while (contents.match(/<a[^>]*>/)) {
+        // 置換対象のAタグを抽出する
+        target_tag = contents.match(/<a[^>]*>/i);
+        // href="..."の部分のみを抜き出す
+        target_element = target_tag[0].match(/href=["'][^"']*["']/i);
         // 相対URIが検出された場合、フルに置換する
-        return '( ' + url.replace(/^(?!http)(?:\.\/)?/, base_uri) + ' )';
-    };
-    contents = contents.replace(/<a[^>]*href=(["'])(.*?)\1[^>]*>.*?<\/a>/i, func);
+        target_element = target_element[0].replace(/\.\//, document.location.href.replace(/[^\/]+$/, ''));
+        // Aタグ全体を消去し、再度Aクローズタグの置換を行う
+        contents = contents.replace(target_tag, "");
+        contents = contents.replace(/<\/a>/i, " ( " + target_element.replace(/href=|["']/g, "") + " ) ");
+    }
     
     // 通常のタグすべてを削除する
     contents = contents.replace(/<[^>]*>|<\/[^>]*>/ig, "");
     
-    // <br/>タグを挿入する
-    if (validateMode == 0) {
-        contents = contents.replace(/[\n\r]|\r\n/g, "<br />");
-    }
-    
-    return contents;
-}
-
-/**
- * 日記本文に日付を付加します
- * @param {String} contents 日記の本文が格納されている文字列
- * @param {String} id 日記の初公開日を示す日付文字列
- */
-function contentsWithid(contents, id){
-    // リンク用文末作成
-    var hashTag = '<br/><div style="text-align: right;"><a href="' +
-    xmlAttrContentEscape(blogUrl) +
-    '#' +
-    xmlAttrContentEscape(id) +
-    '" target="_blank">- この日の記事にリンクする -<\/a><\/span>';
-    return contents + hashTag;
-}
-
-/**
- * ログファイル選択用のコンボボックスをid名:logSelecterに生成します
- */
-function logXMLLoader(){
-    // レコード構造を定義します
-    var PathRecord = new Ext.data.Record.create([{
-        name: "display",
-        type: "string"
-    }, {
-        name: "path",
-        type: "string"
-    }]);
-    
-    // ログ用のXMLを読み込みます
-    var logXMLData = new Ext.data.Store();
-    jQuery.ajax({
-        url: logXmlUrl,
-        method: "GET",
-        error: showError,
-        success: function(xmlData){
-            var separateTag = xmlData.getElementsByTagName("file");
-            
-            // 読み込んだ要素をStoreに格納して表示
-            for (var i = 0; i < separateTag.length; i++) {
-                // レコードに登録する
-                var record = new PathRecord({
-                    path: separateTag[i].getElementsByTagName("path")[0].firstChild.nodeValue,
-                    display: separateTag[i].getElementsByTagName("display")[0].firstChild.nodeValue
-                });
-                logXMLData.add(record);
-            }
-            
-            // コンボボックス要素を生成
-            document.getElementById("logSelecter").innerHTML = "<input type='text' id='logbox' style='width: " + extComboWidth + "px'/>";
-            
-            // コンボボックスを生成
-            var comboBox = new Ext.form.ComboBox({
-                store: logXMLData,
-                applyTo: "logbox",
-                displayField: "display",
-                valueField: "path",
-                mode: "local",
-                triggerAction: "all",
-                emptyText: "ログを選択してください..."
-            });
-            
-            // コンボボックスのイベント登録
-            comboBox.on("change", function(){
-                xmlLoader("" + comboBox.getValue());
-            });
-        }
-    });
-}
-
-/**
- * 日記のデータが記述されたXMLデータを読み込むロジックを生成します
- * @param {String} fileName 読み込み日記のデータが記述されているXMLファイルのパス
- */
-function xmlLoader(fileName){
-    // ロードエフェクトに切り替え
-    loadingEffect()
-    
-    var url = fileName;
+    // 通常のタグ置換後、ニコニコ動画のタグを元に戻す
+    contents = contents.replace(/&lt;externalvideo src=&quot;NC:/g, "<externalvideo src='NC:");
+    contents = contents.replace(/:D&quot;&gt;/, ":D'>");
     
-    // 日記をロードします
-    var loader = new jQuery.ajax({
-        url: url,
-        method: "POST",
-        success: writeHtml,
-        error: showError
-    });
-}
-
-/**
- * 日記データのエラー時の処理を行います
- */
-function showError(){
-    document.getElementById("writeArea").innerHTML = '<div id="drawPanel"><div id="drawItem" class="code" style="text-align: center;"><\/div><\/div>';
-    document.getElementById("drawItem").innerHTML = '<br/>日記ファイルのロードに失敗しました!<br/><br/>';
-    
-    // エラー内容をパネルに描画
-    generatePanel("Error!", "drawItem", "drawPanel", false);
-    
-    Ext.Msg.alert("Error!", "日記ファイルが読み込めません!");
-}
-
-/**
- * 渡された文字列と一致するfeed1.0:updated要素を持った日記を検索し、表示します
- * @param {String} urlhash feed1.0:updated要素と一致する文字列
- */
-function searchMode(urlhash){
-    // ロードエフェクト表示
-    loadingEffect();
+    // 半角を置換する
+    contents = contents.replace(/&nbsp;/g, " ");
     
-    // ログXMLファイルを読み込む
-    var loader = new jQuery.ajax({
-        url: logXmlUrl,
-        method: "POST",
-        error: showError,
-        success: function(xmlData){
-            // ファイルパスの要素のみを抽出する
-            var separateTag = xmlData.getElementsByTagName("file");
-            var filelist = new Array(separateTag.length);
-            
-            // すべてのファイルパスを配列に格納する
-            for (var i = 0; i < separateTag.length; i++) {
-                // "path"ノードの値を格納
-                filelist[i] = separateTag[i].getElementsByTagName("path")[0].firstChild.nodeValue;
-            }
-            
-            // ファイルパス配列に格納されているすべての日記に対し、探索を開始する
-            for (var i = 0; i < separateTag.length; i++) {
-                // ファイルパス配列の要素からリクエストを生成し、対象データをロードする
-                var searchlog = new jQuery.ajax({
-                    url: filelist[i],
-                    method: "POST",
-                    success: function(xmlData){
-                        // entry要素のみを切り出す
-                        var searchSeparateTag = xmlData.getElementsByTagName("entry");
-                        
-                        for (var j = 0; j < searchSeparateTag.length; j++) {
-                            // entryタグ内部のidノードの値のみ抽出し、入力されたhashと比較を行う
-                            var id = searchSeparateTag[j].getElementsByTagName("id")[0].firstChild.nodeValue;
-                            
-                            // idの値と比較を行う
-                            if (urlhash == id) {
-                                var entry = new Entry(searchSeparateTag[j]);
-                                
-                                document.getElementById("writeArea").innerHTML = '<div><table class="pager" width="' + extPanelWidth + '" cellspacing="1"><tbody>' +
-                                '<tr><td class="pager" colspan="3">1件~1件(全1件)目の記事を表示中<br/></td></tr>' +
-                                '<tr><td align="left"><<< 前の3件を表示</td><td align="center">[ 0 ]</td><td align="right">次の3件を表示 >>></td></tr></tbody></table></div>' +
-                                '<div style="line-height: ' +
-                                entrySpan +
-                                'px;"><br/></div>' +
-                                '<div id="drawPanel"><div id="drawItem" class="code"><\/div><\/div>' +
-                                '<div style="line-height: ' +
-                                entrySpan +
-                                'px;"><br/></div>' +
-                                '<div><table class="pager" width="' +
-                                extPanelWidth +
-                                '" cellspacing="1"><tbody>' +
-                                '<tr><td align="left"><<< 前の3件を表示</td><td align="center">[ 0 ]</td><td align="right">次の3件を表示 >>></td></tr>' +
-                                '<tr><td class="pager" colspan="3">1件~1件(全1件)目の記事を表示中<br/></td></tr></tbody></table></div>';
-                                document.getElementById("drawItem").innerHTML = contentsWithid(entry.content, entry.id);
-                                
-                                // 探索されたパネルはオープン状態で展開する
-                                generatePanel(entry.title + " / " + entry.date, "drawItem", "drawPanel", false);
-                                
-                                break;
-                            }
-                        }
-                    }
-                });
-            }
-            // ファイルパス配列から日記が見つからなかった場合の処理
-            document.getElementById("writeArea").innerHTML = '<br/><br/><div id="drawPanel"><div id="drawItem" class="code"><\/div><\/div>';
-            document.getElementById("drawItem").innerHTML = "指定された日記は存在しません。";
-            
-            // エラー内容を表示する
-            generatePanel("Search Failed.", "drawItem", "drawPanel", false);
-        }
-    });
+    return contents;
 }
 
 /**
- * 検索結果を分割して表示します
- * @param {int} showLength 一回の画面に表示する記事数
- * @param {int} startIndex 表示を開始する日記のインデックス
+ * <content>要素の変換を行います
+ * @param {String} content
  */
-function showEntriesRange(showLength, startIndex){
-    // メモリ上から日記データをロード
-    var entries = loadedEntries;
-    
-    // 表示インデックスが範囲外の場合はエラーパネルを表示して終了
-    if (startIndex < 0 || (entries.length <= startIndex && entries.length != 0)) {
-        showError();
-        return;
-    }
-    
-    var stringBuffer = [];
-    
-    // リミッターを設定する
-    var loopLimit = (showLength + startIndex > entries.length) ? entries.length : showLength + startIndex;
-    var indexShowEntries = loopLimit + 1;
-    
-    // 情報メニュー表示用バッファです
-    var menuInfoBuffer = [];
-    menuInfoBuffer.push("<tr><td colspan='3' class='pager'>");
-    var viewStartIndex = 0;
-    entries.length == 0 ? viewStartIndex = 0 : viewStartIndex = startIndex + 1
-    menuInfoBuffer.push(viewStartIndex + "件~" + loopLimit + "件(全" + entries.length + "件)目の記事を表示中<br/>");
-    menuInfoBuffer.push("</td></tr>");
-    
-    // ページ移動メニュー表示用バッファです
-    var menuMoveBuffer = [];
-    menuMoveBuffer.push("<tr>");
-    // 左パネルの表示制御
-    if (startIndex - showLength >= 0) {
-        menuMoveBuffer.push("\<td align='left'><a href='' onclick='showEntriesRange(" +
-        showLength +
-        ", " +
-        (startIndex - showLength) +
-        "); return false;'>\<\<\< 前の" +
-        showLength +
-        "件を表示</a\></td>");
+function convertContent(content){
+    if (document.getElementById("addContentBr").checked) {
+        content = content.replace(/[\n\r]|\r\n/g, "<br>\n");
     }
     else {
-        menuMoveBuffer.push("\<td align='left'>\<\<\< 前の" +
-        showLength +
-        "件を表示</a\></td>");
+        content = content.replace(/<br>/ig, "\n");
     }
     
-    // 中央のパネルの表示制御
-    menuMoveBuffer.push("<td align='center'>[ ");
-    var menuNumbers = Math.ceil(entries.length / showLength);
-    for (i = 0; i < menuNumbers; i++) {
-        if (startIndex / showLength == i) {
-            menuMoveBuffer.push(i + " ");
-        }
-        else {
-            menuMoveBuffer.push("<a href='' onclick='showEntriesRange(" +
-            showLength +
-            ", " +
-            (i * showLength) +
-            "); return false;'>");
-            menuMoveBuffer.push(i);
-            menuMoveBuffer.push("</a> ");
-        }
-    }
-    menuMoveBuffer.push("]</td>");
-    
-    // 右パネルの表示制御
-    if (entries.length > startIndex + showLength) {
-        menuMoveBuffer.push("\<td align='right'><a href='' onclick='showEntriesRange(" +
-        showLength +
-        ", " +
-        (startIndex + showLength) +
-        "); return false;'>\次の" +
-        showLength +
-        "件を表示 \>\>\></a\></td>");
-    }
-    else {
-        menuMoveBuffer.push("\<td align='right'>次の" +
-        showLength +
-        "件を表示 \>\>\></a\></td>");
-    }
-    menuMoveBuffer.push("</tr>");
-    
-    // メニューを結合してパネル(前方)に組み込みます
-    stringBuffer.push("<div><table cellspacing='1' width='" +
-    extPanelWidth +
-    "px' class='pager'><tbody>");
-    stringBuffer.push(menuInfoBuffer.join(""));
-    stringBuffer.push(menuMoveBuffer.join(""));
-    stringBuffer.push("</tbody></table></div>");
-    
-    stringBuffer.push('<div style="line-height: ' + entrySpan + 'px;"><br/></div>');
-    
-    // 日記描画部分のパネルを生成します
-    for (var i = startIndex; i < loopLimit; i++) {
-        stringBuffer.push('<div id="drawPanel');
-        stringBuffer.push(i);
-        stringBuffer.push('"><div id="drawItem');
-        stringBuffer.push(i);
-        stringBuffer.push('" class="code"><\/div><\/div><div style="line-height: ' + entrySpan + 'px;"><br/></div>')
-    }
-    
-    // メニューを結合してパネル(後方)に組み込みます
-    stringBuffer.push("<div><table cellspacing='1' width='" +
-    extPanelWidth +
-    "px' class='pager'><tbody>");
-    stringBuffer.push(menuMoveBuffer.join(""));
-    stringBuffer.push(menuInfoBuffer.join(""));
-    stringBuffer.push("</tbody></table></div>");
-    
-    document.getElementById("writeArea").innerHTML = stringBuffer.join("");
-    
-    for (var i = startIndex; i < loopLimit; i++) {
-        // 各要素をオブジェクトに格納します
-        var entry = entries[i];
-        document.getElementById("drawItem" + i).innerHTML = contentsWithid(entry.content, entry.id);
-        
-        // すべてのパネルをオープン状態で生成します
-        generatePanel(entry.title + " / " + entry.date, "drawItem" + i, "drawPanel" + i, false);
-    }
+    return content;
 }
 
 /**
- * 日記のログファイルデータが記述されているXMLファイルを読み込んで表示します。DIV:id名:writeArea上に読み込んだ日記の内容を表示します
- * @param {Object} xmlData 日記が記述されたXMLファイル(feed 1.0準拠)
+ * XMLのエスケープを行う関数
+ * @param {String} str エスケープを行う文字列
  */
-function writeHtml(xmlData){
-    var separateTag = xmlData.getElementsByTagName("entry");
-    var stringBuffer = [];
-    // メモリ上での保持変数を初期化します
-    loadedEntries = [];
-    
-    // メモリ上の変数に全ての日記要素を格納します
-    for (var i = 0; i < separateTag.length; i++) {
-        loadedEntries.push(new Entry(separateTag[i]));
-    }
-    
-    // 表示ロジック呼び出し
-    showEntriesRange(showLength, 0);
+function xmlAttrContentEscape(str){
+    return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
 }
 
+/**
+ * XMLのエスケープを行う関数
+ * @param {String} str エスケープを行う文字列
+ */
+function xmlAttrContentUnescape(str){
+    return str.replace(/&quot;/g, '"').replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&amp;/g, "&");
+}
index 7cc8334..868f897 100644 (file)
--- a/mixi.html
+++ b/mixi.html
@@ -2,15 +2,11 @@
 <html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>日記設置サンプル</title>
-        <link rel="stylesheet" href="./js/ext/resources/css/ext-all.css" type="text/css"/>
+        <title>FeedAtom MIXIラッパー</title>
+        <link rel="stylesheet" href="./js/lunardial/gen_stylesheet.css" type="text/css"/>
         <link rel="alternate" type="application/atom+xml" title="Atom" href="./xml/diary.xml"/>
         <script type="text/javascript" src="./js/jquery/jquery-1.3.2.min.js">
         </script>
-        <script type="text/javascript" src="./js/ext/adapter/jquery/ext-jquery-adapter.js">
-        </script>
-        <script type="text/javascript" src="./js/ext/ext-all.js">
-        </script>
         <script type="text/javascript" src="./js/lunardial/feedblog_mixi.js">
         </script>
         <style type="text/css">
             }
         </style>
     </head>
-    <body>
+    <body onload="javascript:initLoad();">
         <center>
             <table align="center" style="width: 800px;">
                 <tbody>
                     <tr>
-                    <td class="default" colspan="2" style="height: 150px; padding: 5px; text-align: right; vertical-align: bottom;">
-                        <span style="font-size: 20px; font-weight: bold;">[ タイトルを入れてください ]</span>
-                        <br>
-                        [ 説明文を入れてください ]
-                    </td>
-                    </tr>
-                    <tr>
-                        <td colspan="2" style="height: 10px;">
-                        </td>
-                    </tr>
-                    <tr>
-                        <td class="default" style="width: 580px; border: none;">
-                            <div id="writeArea">
-                            </div>
+                        <td class="default" colspan="2" style="padding: 5px; text-align: center; vertical-align: bottom;">
+                            <table>
+                                <tbody>
+                                    <tr>
+                                        <td class="formnavi" style="padding: 0px 20px 0px 20px;">
+                                            表示するファイル
+                                        </td>
+                                        <td class="forminput">
+                                            <div id="logSelecter">
+                                            </div>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td class="formnavi" style="padding: 0px 20px 0px 20px;">
+                                            表示する記事名
+                                        </td>
+                                        <td class="forminput">
+                                            <div id="entrySelect">
+                                            </div>
+                                        </td>
+                                    </tr>
+                                </tbody>
+                            </table>
+                            <br>
+                            <table style="width: 100%">
+                                <tbody>
+                                    <tr>
+                                        <td class="formheader" style="text-align: center; width: 100px;">
+                                            タイトル
+                                        </td>
+                                        <td class="forminput" style="padding: 0px 5px 0px 3px;">
+                                            <input type="text" id="entry_title" style="width: 100%">
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td class="formheader" style="text-align: center;">
+                                            本文
+                                        </td>
+                                        <td class="forminput" style="padding: 0px 5px 0px 3px;">
+                                            <textarea id="entry_stdin" rows="20" style="width: 100%">
+                                            </textarea>
+                                        </td>
+                                    </tr>
+                                </tbody>
+                            </table>
                         </td>
-                        <td class="default" style="padding: 10px;">
-                        ▼ 過去ログを閲覧する<div id="logSelecter"/>
-                        </div>
-                        <br>
-                        <a href="./search.html">日記検索ページへ</a>
-                    </td>
                     </tr>
                 </tbody>
             </table>