OSDN Git Service

- enhance tag search speed.
authorKureha Hisame <kureha@gmail.com>
Sat, 15 Mar 2014 08:21:09 +0000 (17:21 +0900)
committerKureha Hisame <kureha@gmail.com>
Sat, 15 Mar 2014 08:21:09 +0000 (17:21 +0900)
- change function names.

js/lunardial/feedblog.js
js/lunardial/feedblog_generator.js
js/lunardial/feedblog_search.js

index 3239673..89d47ae 100644 (file)
@@ -268,7 +268,7 @@ function executingEffect() {
 /**
  * 呼び出すとDIV:id名:feedblog_drawpanel_info上に、処理完了の記事を表示します
  */
-function executingEffectComplete() {
+function executingEffectCompleteEffect() {
        $("#feedblog_drawpanel_info").html('<div id="feedblog_drawitem_info" class="feedblog_drawitem">&nbsp;<\/div><\/div>');
 
        // 検索処理完了用のパネルを生成
@@ -276,21 +276,32 @@ function executingEffectComplete() {
        systemEntry.title = "検索完了";
        systemEntry.content = '<br/>検索処理が完了しました。(該当記事:' + fetchEntriesSemaphore.entryCount + '件)<br/><br/>';
        generateSystemPanel(systemEntry, "feedblog_drawitem_info", "feedblog_drawpanel_info", false);
+}
 
-       // 状況に応じて「全件表示」パネルを生成
-       if (fetchEntriesSemaphore.showLimit == true && fetchEntriesSemaphore.entryIndex != fetchEntriesSemaphore.entryCount) {
-               $("#feedblog_writearea").html($("#feedblog_writearea").html() + '<div id="feedblog_drawpanel_abort" class="feedblog_drawpanel"><div id="feedblog_drawitem_abort" class="feedblog_drawitem">&nbsp;<\/div><\/div>');
-               systemEntry = new SystemEntry();
-               systemEntry.title = "以降、" + (fetchEntriesSemaphore.entryCount - fetchEntriesSemaphore.entryIndex) + "件の記事が省略されています。";
-               systemEntry.content = '<br/><a style="cursor: pointer;" onclick="javascript: var tag = getParamFromUrl(\'tag\'); searchTagMode(tag, false);">全ての記事を表示する。</a><br/><br/>';
-               generateSystemPanel(systemEntry, "feedblog_drawitem_abort", "feedblog_drawpanel_abort", false);
-       }
+/**
+ * 呼び出すとDIV:id名:feedblog_drawpanel_abort上に、省略記事がある旨を描画します
+ */
+function showLimitedInfoEffect() {
+       $("#feedblog_writearea").html($("#feedblog_writearea").html() + '<div id="feedblog_drawpanel_abort" class="feedblog_drawpanel"><div id="feedblog_drawitem_abort" class="feedblog_drawitem">&nbsp;<\/div><\/div>');
+
+       // 記事省略用のパネルを生成
+       var systemEntry = new SystemEntry();
+       systemEntry.title = "以降、" + (fetchEntriesSemaphore.entryCount - fetchEntriesSemaphore.entryIndex) + "件の記事が省略されています。";
+       systemEntry.content = '<br/><a style="cursor: pointer;" onclick="javascript: fetchTagHiddenEntries();">全ての記事を表示する。</a><br/><br/>';
+       generateSystemPanel(systemEntry, "feedblog_drawitem_abort", "feedblog_drawpanel_abort", false);
+}
+
+/**
+ * 呼び出すとDIV:id名:feedblog_drawpanel_abortを消去します
+ */
+function showLimitedInfoRemoveEffect() {
+       $("#feedblog_drawpanel_abort").remove();
 }
 
 /**
  * 記事データのエラー時の処理を行います
  */
-function showError() {
+function showErrorEffect() {
        $("#feedblog_writearea").html('<div id="feedblog_drawpanel" class="feedblog_drawpanel"><div id="feedblog_drawitem" class="feedblog_drawitem">&nbsp;<\/div><\/div>');
 
        // エラー内容をパネルに描画
@@ -312,7 +323,7 @@ function showError() {
 /**
  * 記事データのエラー時の処理を行います
  */
-function notFoundError() {
+function notFoundErrorEffect() {
        $("#feedblog_writearea").html('<div id="feedblog_drawpanel" class="feedblog_drawpanel"><div id="feedblog_drawitem" class="feedblog_drawitem">&nbsp;<\/div><\/div>');
 
        // エラー内容をパネルに描画
@@ -427,7 +438,7 @@ function logXMLLoader() {
        jQuery.ajax({
                url : logXmlUrl + '?time=' + urlSuffix,
                method : "GET",
-               error : showError,
+               error : showErrorEffect,
                success : function(xmlData) {
                        var separateTag = xmlData.getElementsByTagName("file");
 
@@ -473,7 +484,7 @@ function fullWriteMode(fileName) {
                        // 表示ロジック呼び出し
                        showEntriesRange(showLength, 0);
                },
-               error : showError
+               error : showErrorEffect
        });
 }
 
@@ -489,7 +500,7 @@ function searchHashMode(urlhash) {
        var loader = new jQuery.ajax({
                url : logXmlUrl + '?time=' + urlSuffix,
                method : "GET",
-               error : showError,
+               error : showErrorEffect,
                success : function(xmlData) {
                        // ファイルパスの要素のみを抽出する
                        var separateTag = xmlData.getElementsByTagName("file");
@@ -558,7 +569,7 @@ function fetchHashEntries(xmlData) {
                var entries = fetchEntriesSemaphore.buf;
 
                if (entries.length == 0) {
-                       notFoundError();
+                       notFoundErrorEffect();
                        return false;
                }
        }
@@ -576,7 +587,7 @@ function searchIdMode(urlhash) {
        var loader = new jQuery.ajax({
                url : logXmlUrl + '?time=' + urlSuffix,
                method : "GET",
-               error : showError,
+               error : showErrorEffect,
                success : function(xmlData) {
                        // ファイルパスの要素のみを抽出する
                        var separateTag = xmlData.getElementsByTagName("file");
@@ -646,7 +657,7 @@ function fetchIdEntries(xmlData) {
                var entries = fetchEntriesSemaphore.buf;
 
                if (entries.length == 0) {
-                       notFoundError();
+                       notFoundErrorEffect();
                        return false;
                }
        }
@@ -666,7 +677,7 @@ function searchTagMode(tag, showLimit) {
        var loader = new jQuery.ajax({
                url : logXmlUrl + '?time=' + urlSuffix,
                method : "GET",
-               error : showError,
+               error : showErrorEffect,
                success : function(xmlData) {
                        // ファイルパスの要素のみを抽出する
                        var separateTag = xmlData.getElementsByTagName("file");
@@ -685,6 +696,7 @@ function searchTagMode(tag, showLimit) {
                        fetchEntriesSemaphore.entryIndex = 0;
                        fetchEntriesSemaphore.entryCount = 0;
                        fetchEntriesSemaphore.showLimit = showLimit;
+                       fetchEntriesSemaphore.hiddenEntries = [];
 
                        // ファイルパス配列に格納されているすべての記事に対し、探索を開始する
                        for (var i = 0; i < separateTag.length; i++) {
@@ -725,6 +737,8 @@ function fetchTagEntries(xmlData) {
                                if (fetchEntriesSemaphore.showLimit == true && fetchEntriesSemaphore.entryIndex >= showLength) {
                                        // 検索一致件数をカウント
                                        fetchEntriesSemaphore.entryCount++;
+                                       // entryを非表示配列に格納する
+                                       fetchEntriesSemaphore.hiddenEntries.push(entry);
                                } else {
                                        // 検索一致件数をカウント
                                        fetchEntriesSemaphore.entryCount++;
@@ -740,16 +754,33 @@ function fetchTagEntries(xmlData) {
 
        if (fetchEntriesSemaphore.count == 0) {
                if (fetchEntriesSemaphore.entryIndex == 0) {
-                       notFoundError();
+                       notFoundErrorEffect();
                        return false;
                } else {
-                       executingEffectComplete();
+                       executingEffectCompleteEffect();
+                       // 省略記事がある場合は、省略パネルを表示する
+                       if (fetchEntriesSemaphore.entryIndex != fetchEntriesSemaphore.entryCount) {
+                               showLimitedInfoEffect();
+                       }
                        return true;
                }
        }
 }
 
 /**
+ * 省略表示されている記事一覧を描画します
+ */
+function fetchTagHiddenEntries() {
+       // 省略パネルを消去する
+       showLimitedInfoRemoveEffect();
+
+       // 省略されている記事を描画する
+       for (var i = 0; i < fetchEntriesSemaphore.hiddenEntries.length; i++) {
+               fetchEntriesSemaphore.entryIndex = showEntriesAdd(fetchEntriesSemaphore.hiddenEntries[i], fetchEntriesSemaphore.entryIndex);
+       }
+}
+
+/**
  * 検索結果を分割して表示します
  * class - div.feedblog_pager, ul.feedblog_pager, li.feedblog_pager などなど
  * @param {int} showLength 一回の画面に表示する記事数
@@ -761,7 +792,7 @@ function showEntriesRange(showLength, startIndex) {
 
        // 表示インデックスが範囲外の場合はエラーパネルを表示して終了
        if (startIndex < 0 || (entries.length <= startIndex && entries.length != 0)) {
-               showError();
+               showErrorEffect();
                return;
        }
 
index f316ee7..1948c8e 100644 (file)
@@ -252,7 +252,7 @@ function logXMLLoader() {
                        // 最新の日記をローディングする
                        xmlLoader(initUrl);
                },
-               error : showError
+               error : showErrorEffect
        });
 }
 
@@ -266,7 +266,7 @@ function xmlLoader(url) {
                url : url + "?time=" + (+new Date()),
                method : "GET",
                success : analyzeTargetXml,
-               error : showError
+               error : showErrorEffect
        });
 }
 
@@ -520,7 +520,7 @@ function closePanel(id) {
 /**
  * エラー画面を表示します
  */
-function showError() {
+function showErrorEffect() {
        alert("XMLファイルのローディング中にエラーが発生しました!");
 }
 
index a067d23..03d8432 100644 (file)
@@ -293,7 +293,7 @@ function loadingEffect() {
 /**
  * 記事データのエラー時の処理を行います
  */
-function showError() {
+function showErrorEffect() {
        $("#feedblog_writearea").html('<div id="feedblog_drawpanel" class="feedblog_drawpanel"><div id="feedblog_drawitem" class="feedblog_drawitem">&nbsp;<\/div><\/div>');
 
        // エラー内容をパネルに描画
@@ -315,7 +315,7 @@ function showError() {
 /**
  * 記事データのエラー時の処理を行います
  */
-function notFoundError() {
+function notFoundErrorEffect() {
        $("#feedblog_writearea").html('<div id="feedblog_drawpanel" class="feedblog_drawpanel"><div id="feedblog_drawitem" class="feedblog_drawitem">&nbsp;<\/div><\/div>');
        $("#feedblog_drawitem").html('<br/>検索条件に一致する記事は見つかりませんでした。<br/><br/>');
 
@@ -431,7 +431,7 @@ function logXMLLoader() {
        jQuery.ajax({
                url : logXmlUrl + '?time=' + urlSuffix,
                method : "GET",
-               error : showError,
+               error : showErrorEffect,
                success : function(xmlData) {
                        var separateTag = xmlData.getElementsByTagName("file");
                        logData = new Array(separateTag.length);
@@ -526,7 +526,7 @@ function showEntriesRange(showLength, startIndex) {
 
        // 表示インデックスが範囲外の場合はエラーパネルを表示して終了
        if (startIndex < 0 || entries.length <= startIndex) {
-               showError();
+               showErrorEffect();
                return;
        }
 
@@ -630,7 +630,7 @@ function fetchEntries(xmlData) {
 
                // 一軒も検索にヒットしなかった場合は専用のパネルを表示して終了
                if (entries.length == 0) {
-                       notFoundError();
+                       notFoundErrorEffect();
                        return;
                }
 
@@ -689,7 +689,7 @@ function searchDiary() {
                        method : "GET",
                        async : true,
                        success : fetchEntries,
-                       error : showError
+                       error : showErrorEffect
                });
                fetchEntriesSemaphore.xhrs.push(xhr);
        }