新增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就完成了!
沒有留言:
張貼留言