/ Octopress

[筆記] 自訂 Octopress 側邊欄位與部署 shell-script

起初我以為,Octopress 用的是 jQuery,結果我誤會他了。他基本上是用這幾套:

如果在 Octopress 裡面要寫 javascript 的話,就必須要去看一下上述的東西了。當然,你也可以用 jQuery,但是因為 $ 會跟 ender 那一套衝突,所以這個部份需要你自己想辦法避開囉。

檔案在這裡給你們參考。

<section>
  <h1>Recent Posts</h1>
  <ul id="recent_posts">
  </ul>
</section>
<script type="text/javascript">
    $.domReady(function() {
        if (!window.jXHR){
            var jxhr = document.createElement('script');
            jxhr.type = 'text/javascript';
            jxhr.src = '{{ root_url}}/javascripts/libs/jXHR.js';
            var s = document.getElementsByTagName('script')[0];
            s.parentNode.insertBefore(jxhr, s);
        }
        (function() {
            $.ajax({
                url: '{{ root_url }}/atom.xml',
                dataType: 'xml',
                success: function(xml) {
                    var parser, expectedXML;
                    if (window.DOMParser) {
                        parser = new DOMParser();
                        expectedXML = parser.parseFromString(decodeURIComponent(xml.response),"text/xml");
                    } else {
                        expectedXML = new ActiveXObject("Microsoft.XMLDOM");
                        expectedXML.async = false;
                        expectedXML.loadXML(decodeURIComponent(xml.response));
                    }

                    var entries = expectedXML.getElementsByTagName('entry');
                    var entries_limit = entries.length > {{ site.recent_posts }} ? {{ site.recent_posts }} : entries.length;
                    for(var i=0; i<entries_limit; i++) {
                        $('<a/>')
                        .attr('href', entries[i].childNodes[3].attributes[0].nodeValue)
                        .text(entries[i].childNodes[1].childNodes[0].nodeValue)
                        .appendTo($('<li/>').addClass('post').appendTo($('#recent_posts')));
                    }
                },
                error: function(err) {
                    $('<li/>').addClass('post').text('Error Loading feed').appendTo($('#recent_posts'));
                }
            });
        })();
    });
</script>

一樣,這是我自己寫來用的,出問題一概不負責喔(啾咪

#!/bin/bash 

[ ! -f _config.yml ] && echo "You are not under octopress directory." && exit 0;
# Head 行數,預設使用 8 行
HEADLINE=8
# 找出在 10 分鐘以內**沒有**修改過的 markdown 檔案,-mmin 單位是分鐘。
TIMESTAMP=10
# 利用 sed 把檔案洗出來並重新組合成 public 底下的結構
# 依照 _config.yml 所設定的 permalink: /blog/:year/:month/:day/:title/
# 所以這裡的輸出結果是 \/blog\/\1\/\2\/\3\/\4\/
# MAINPATH="blog"
# SUBPATH="\1\/\2\/\3\/\4"
# 如果你的 permalink 有另外做設定,請自行修改
# 例如我的 permalink: /entry/:title/
# 就設定為 entry\/\4
# \1 代表年
# \2 代表月
# \3 代表日
# \4 代表標題(title)
MAINPATH="entry"
SUBPATH="\4"

# 回朔 source/_posts/ 檔案內容的 post date 來進行回朔
echo "回朔文章時間戳記..."
IFT="\n"
read -ra FILES <<< `find ./source/_posts/ -type f -name "*.markdown" -mmin "+$TIMESTAMP"`
for (( index=0; index<${#FILES[@]}; index++ )); do
    TM=`head "-$HEADLINE" "${FILES[$index]}" | grep "date:" | sed -e "s/date: \([0-9]\{2\}\)\([0-9]\{2\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\) \([0-9]\{2\}\):\([0-9]\{2\}\)/\2\3\4\5\6/g"`
    touch -mt "$TM" "${FILES[$index]}"
done

echo "開始檢查未修改檔案..."
FILES2=`find ./source/_posts/ -type f -name "*.markdown" -mmin "+$TIMESTAMP" | sed -e p -e "s/\.\/source\/_posts\/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)-\([^.]\+\).markdown/\.\/public\/$MAINPATH\/$SUBPATH\//g" | xargs -n 2`

echo "建立暫存用資料夾..."
rmdir --ignore-fail-on-non-empty tmp
mkdir -p tmp
mkdir -p tmp/source/
mkdir -p tmp/public/

echo "開始回寫資料!!!資料回寫中請勿任意中斷!!!"
for (( index=0; index<${#FILES2[@]}; index++ )); do
    while IFS=' ' read -ra FILE; do
        cp "${FILE[0]}" ./tmp/source/
        cp -r "${FILE[1]}" ./tmp/public/

        TT=`echo "${FILE[0]}" | sed -e "s/\.\/source\/_posts\///g"`
        TS=`head "-$HEADLINE" ./tmp/source/"$TT"`
        echo "$TS" > "${FILE[0]}"
        echo -ne '.'
    done <<< "${FILES2[$index]}"
done

echo "執行 rake generate"
rake generate

echo "暫存資料回存..."
find ./tmp/public/ -type d | xargs -n1 [email protected] cp -r @ "./public/$MAINPATH/"
cp ./tmp/source/*.markdown ./source/_posts/

# 拷貝結束之後回朔
for (( index=0; index<${#FILES[@]}; index++ )); do
    TM=`head "-$HEADLINE" "${FILES[$index]}" | grep "date:" | sed -e "s/date: \([0-9]\{2\}\)\([0-9]\{2\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\) \([0-9]\{2\}\):\([0-9]\{2\}\)/\2\3\4\5\6/g"`
    touch -mt "$TM" "${FILES[$index]}"
done

echo "恭喜你,已完成!!!"