2010年9月2日 星期四

實作TiddlyWiki巨集

新增Memo內容,有時候會用到create by yyyy/mm/dd的日期註記,打算寫一個Macro來取代用打的。在寫巨集的時候,因為~對Tiddly Wiki的Source Code不熟悉,導致處處碰壁,最後~參考很多Macros的範例,最後~知道Tiddly Wiki最主要的幾個Class。Ex:Tiddler、Story、~TiddlyWiki(store)…等,果然~Javascript的底子不是很好,對OO還是一知半解,而且欠很多Javascript的功課,不過~還是完成巨集的功能。

  • 最要是用replace的概念來完成此巨集,先Register自訂的巨集到config.macros陣列。

    // Macros; each has a 'handler' member that is inserted later

    config.macros = {
    createdbytoday: {}, //Register自訂的巨集
    //略...
    };

  • 在把handler function完成,就大功告成。

    //--
    //-- Macro definitions
    //--
    //將此巨集來取代成//created by YYYY-MM-DD//的格式 by Donald 2010/09/02
    config.macros.createdbytoday.handler = function(place,macroName,params,wikifier,paramString,tiddler){
    //抓這tiddler最後的修改日期改成YYYY/MM/DD的日期格式
    var modified_date=(new Date(tiddler.modified)).formatString('YYYY/MM/DD');
    //把巨集取代成//create by YYYY/MM/DD//的文字
    var modified_text=tiddler.text.replace(/<<createdbytoday>>/gi,"//created by "+modified_date+"//");
    //儲存修改過text欄位的tiddler
    store.saveTiddler(tiddler.title,tiddler.title,modified_text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields,true,tiddler.created);
    };

在研究的過程中,覺得打開記事本編輯Javascript實在是一件很愚蠢的事情,應該~改寫成Plugin的方式才是王道,也發現小小Bug,就是之前已經有一版在正常運作,如果~再去重寫CreatedByTodayPlugin的內容,會導致Code裡面的createdbytoday被取代,使巨集有異常。>"<所以~在編輯之前,記得先把原本的版本Disable掉。

下面改寫成用Plugin版本:

  • 新增一個名為CreatedByTodayPlugin的Tiddler,把下面的程式碼貼上。

    //{{{
    config.macros.createdbytoday={
    handler: function(place,macroName,params,wikifier,paramString,tiddler){
    //抓這tiddler最後的修改日期改成YYYY/MM/DD的日期格式
    var modified_date=(new Date(tiddler.modified)).formatString('YYYY/MM/DD');
    //把巨集取代成//create by YYYY/MM/DD//的文字
    var modified_text=tiddler.text.replace(///created by 2010/9/3///gi,"//created by "+modified_date+"//");
    //儲存修改過text欄位的tiddler
    store.saveTiddler(tiddler.title,tiddler.title,modified_text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields,true,tiddler.created);
    }
    };
    //}}
  • 再把此Tiddler加入為systemConfig的Tag就完成了!

沒有留言:

張貼留言