TiddlyWikiのマクロを書いてみる

タグが便利。
適当にタグを振っておけば、それに関連するものをずらっと引き出せる。
、、、のだけど、一覧にできない。


ということで、マクロを書いてみた。
new tiddlerして、systemConfigタグを振って、内容は以下を。

config.macros.tiddlerList = {};
config.macros.tiddlerList.handler = function(place,macroName,params) {
 // read parameters //
 var type = params[0] ? params[0] : "";
 var sort = params[1] ? params[1] : "title";
 var target = params[2] ? params[2] : "tags";
 var list = new Array();
 var title = new Array();
 var len = new Array();
 var i = 0, offset = 3;
 if(params[offset]) {
  while(offset < params.length) {
   list[i] = params[offset++];
   title[i] = params[offset++];
   len[i++] = params[offset++];
  }
 } else {
  list[0] = "title";
  title[0] = "Title";
  len[0] = 0;
  list[1] = "modified";
  title[1] = "Modified";
  len[1] = "YYYY-0MM-0DD";
  list[2] = "text";
  title[2] = "Text";
  len[2] = 20;
 }

 // make header //
 var theTable = createTiddlyElement(place, "table");
 var theTableHead = createTiddlyElement(theTable, "thead");
 theTableHead = createTiddlyElement(theTableHead, "tr");
 for(i = 0; i < title.length; i++) {
  createTiddlyElement(theTableHead, "th", null, null, title[i]);
 }

 // make body //
 var theTableBody = createTiddlyElement(theTable, "tbody");
 var results = store.reverseLookup(target, type, true, sort);
 for(var t = 0; t < results.length; t++) {
  var theTableRecord = createTiddlyElement(theTableBody, "tr");
  if(typeof(results[t]) == "string") {
   var theTableElement = createTiddlyElement(theTableRecord, "td");
   createTiddlyLink(theTableElement,results[t],true);
  } else {
   for(i = 0; i < list.length; i++) {
    if(list[i] == "title") {
     var theTableElement = createTiddlyElement(theTableRecord, "td");
     createTiddlyLink(theTableElement,results[t][list[i]],true);
    } else if(typeof(results[t][list[i]]) == "object") {
     createTiddlyElement(theTableRecord,"td",null,null,results[t][list[i]].formatString(len[i]));
    } else {
     var theText = results[t][list[i]];
     if(len[i] > 0 && theText.length > len[i])
      theText = theText.substr(0,len[i]) + "...";
     createTiddlyElement(theTableRecord,"td",null,null,theText);
    }
   }
  }
 }
}

「task」というタグを振っているものの一覧なら、<>
で表示されます。


他にもパラメータ指定できますが、、、説明も面倒なので、、、。
また、タグも表示できるバージョンも作ったのですが、
今手元にあるのが古いのなので、ここは、古いのにしときます。