HelloThere
HelloThere\nLatestStuff\n<<newTiddler>>
資訊隨筆
電腦、硬體、軟體、PDA、網路的資料庫
在Zope後台管理當中的根目錄設定它的properties,新增一個項目:\n|!id|zw_client_timezone|\n|!type|string|\n|!value|GMT+/-X|\n就可以讓ZiddlyWiki的時區調成在地的時間。
在[[Tim Morgan]]所採用的這幾個skin當中(其實總共也才三個,分別是:\n*[[Kubrick]]\n*[[rin]]\n*[[ziddlr]]\n),rin和ziddlr感覺都很不錯,都是[[Clint Checketts]]的作品。\n\n「資訊隨筆」這裡創站的時候首先就是用ziddlr。\n\n可惜進入當TiddlyWiki即將進入1.2.39之時,StyleSheet大地震式的再度變動,讓Tim Morgan意興蘭珊,不想再跟著調整skin,讓它們跟著升級上去了。偏偏要1.2.39(b1).4的ZiddlyWiki才能支援雙位元字的[[tiddler]]標題。\n----\n後來我用1.2.39的時候使用的skin如下:\n*「資訊隨筆」用Wygent-Pale-Blue\n*「微笑‧語言‧歷史」用Ectopolis2\n*還有神祕小站用zRenard-Blue……--20060126
!微軟萬聖節文件\n|華譯|http://www.freebsd.org.hk/html/halloween/halloween.html|\n*從IBM PC意外地排擠Apple II、Microsoft靠著MS-DOS竄起、M$ Internet Explorer打垮Netscape以來,歌利亞和大衛的爭鬥一章一章地搬演。不過近年來Linux、Mozilla、OpenOffice.org,甚至是iPod,似乎都象徵著一股對巨人、大公司、主流的普遍不滿仍然未曾止息。--20051126 20:16\n**這篇文章[[SS tactics|http://www.freebsd.org.hk/html/halloween/sstactics.html]]無獨有偶地也用到了大衛與歌利亞的比喻,不過居然把大衛說成是「神話中的侏儒」?是譯者白目還是作者沒讀聖經呢?--20051126 20:53
http://www.freebsd.org.hk/html/halloween/fuddef.html\n\n據說是大公司對付對手屢試不爽的策略。
*蒐集大全\n**[[TiddlerWiki - Notes on Sites|http://checketts.objectis.net/wiki/]] (Clint Checketts)\n**[[TiddlyStyles - TiddlyWiki can do that?!?!|http://www.checkettsweb.com/]](Clint Checketts)
SimpleBits | Work\n"Philosophy\n\nKeep it simple. The web is a vast and ever-changing place. Simplify your message and goal. Make it readable, useable and attractive."\nhttp://www.simplebits.com/work/
!本站大事記\n|20051126|''資訊隨筆 - 電腦、硬體、軟體、PDA、網路的資料庫''<html><br /></html>http://milchflasche.objectis.net/InfoCreative <html><br />有了TiddlyWiki以後非常棒,但假如能線上直接編輯,甚至讓使用者參尋,成為真正的wiki站台則更棒。之前接觸到ZiddlyWiki,也在Objectis上申請,但試了一下有些缺點(標題還不支援雙位元字、有些plugin會掛掉,就先放著了。最近一、兩個禮拜才再次打算用ZiddlyWiki來建構個人資訊庫,同時也提供面對世上的blogging平台。先從這裡開始吧!目前尚未公開,先用ZiddlyWiki 1.2.36測試一些功能。</html>|
教堂與市集 (The Cathedral and the Bazaar)\nhttp://www.linux.org.tw/CLDP/OLD/doc/Cathedral-Bazaar-1.html\n\n開放原始碼社群的經典文件。
[[開放原始碼革命(The Open-Source Revolution)|http://72.14.203.104/search?q=cache:q8aO1MfNbWoJ:netlab.cse.yzu.edu.tw/~statue/cfc/goods/other/osr.html+%E8%90%AC%E8%81%96%E7%AF%80%E6%96%87%E4%BB%B6&hl=zh-TW&client=firefox-a]]\n"網際網路就是數位時代的印刷術, 又一次大幅降低了進入資訊傳播骨幹的門檻, 原始程式碼不再需要用紙帶散布 (如在最原始的 UNIX 中執行的程式), 不再 需要用軟碟片散布 (如在早期的 DOS 時代), 甚至也不需要用光碟散布. 任何 FTP 或 Web 的伺服器都可以成為便宜和立即的散布站台."
*Windows XP的SP2真的很多缺陷啊,很多程式在SP2上面反而出現問題,而且安全性不見得有多少提升。\n
*從我開始用HanDBase到現在已有719天了!!!\n*但我仍然希望有一個軟體可以有強大的資料庫功能,而且可以直接輸出成csv或doc檔,就可以直接從記憶卡上隨地取用……還要桌面端的程式實在太麻煩了……--20051126 12:43\n
!優點\n*每一個欄位可用popup list儲存預設的內容,方便快速輸入\n**且可分層、分類整理預設項目\n**可惜不同欄位的popup list無法引用\n!記事\n*找到3.0j了,真正適用高解析度,而且似乎比較不會當機的樣子喔!(之前用3.0i5,資料庫一大就非常非常容易當機)--20051208 19:00
*已經陪伴我超過一年的好軟體\n*拖拉式的大綱超方便\n*但Palm上的匯出功能只有純文字的memo或DOC,是用很醜的tab縮排;桌面端的匯出只有到[[M$ Word]]比較有用,但還要把資料轉出來很麻煩;況且M$ Word又是現在要打倒的對象。所以我已經感到不耐,想要換別的大綱記事軟體了。--20051202
import url(/Addins/Wygent-Pale-Blue.css);
http://www.muchy.com/review/clips.html\n\n*好耶這東西!用Palm本身的Copy/Paste就能存取七個剪貼簿暫存,而且每個都可達32K,這樣就可以完全取代[[LCipDA]]囉!--20051213\n*不過用Targus鍵盤操作的時候,按Ctrl+V再用Enter貼上以後,暫時會造成Alt、Fn等鍵失效,要再按一次Ctrl鍵才會恢復正常。--20051214
作者 onelife (旺來) 看板 PTT EZsoft\n 標題 Re: [問題] 想請問各位大大一個關於關機軟體的問題\n 時間 Fri Dec 16 00:29:04 2005\n\nshutdown [-i | -l | -s | -r | -a] [-f] [-m \s\scomputername]\n [-t xx] [-c "comment"] [-d up:xx:yy]\n\n 沒有引數 顯示這個訊息 (和 -? 相同)\n -i 顯示 GUI 介面,必須是第一個選項\n -l 登出 (不能和 -m 選項一起使用)\n -s 電腦關機\n -r 關機並重新啟動電腦\n -a 中止系統關機\n -m \s\s\s\scomputername 從遠端進行關機/重新啟動/中止\n -t xx 將關機等候時間設定成 xx 秒\n -c "comment" 關機註解 (最多 127 個字元)\n -f 強制關閉執行中的應用程式,不顯示警告\n -d [u][p]:xx:yy 關機原因代碼\n u 是使用者代碼\n p 是預先計劃的關機代碼\n xx 是主要原因代碼 (小於 256 的正整數)\n yy 是次要原因代碼 (小於 65536 的正整數)
[[Opinmind|http://www.opinmind.com/search.jsp]]\n搜尋blog文章的搜尋引擎,會把搜尋結果依正反面分別列出,還會計算兩邊的比例(他們到底怎麼樣寫那個索引機器人的?程式怎麼樣判斷是正面還是負面啊?不會是一個個人工去看吧?@_@還有,模稜兩可的文章怎麼算?)。不過目前似乎還不支援非西方語文。\n\n另外,它的名字應該是脫胎自「open mind」,不過不知道改成「opin-」有何含義就是了。\n\n介紹\n*[[Jan's Tech Blog: Opinmind|http://www.azuremedia.net/tech/history/search/001040.html]]
!相關資源\n*軟體相容\n**[[台灣FTP聯盟 - Unicode|http://vbb3.twftp.org/forumdisplay.php?f=89]]--由coca維護,致力於找出能完整支援Unicode的軟體
!名稱\n*J和S應該都要大寫。\n!概述\n*[[Taiwan.CNET.com : 企業應用 : IT技術 : JavaScript說分明|http://taiwan.cnet.com/enterprise/technology/0,2000062852,20103386,00.htm]]\n\n*和'''[[Java]]'''完全不同\n**Java語法近似C++\n**Java先編譯後執行\n**javascript直接加在網頁上\n*最初由Netscape研發,稱為Livescript,之後改稱JavaScript,微軟則稱javascript或jscript\n*[[物件導向程式設計]]\n\n= 語法 =\n*大小寫有差\n*每行用分號「;」結尾\n\n== 宣告 ==\n*放在<code><head></code>檔頭\n**再用onload事件呼叫\n***e.g. <code><body onload="%函數名%"></code>\n*放在<code><body></code>\n**內部:用\n<pre><script language="javascript">\n<nowiki><!--</nowiki>\n……\n//<nowiki>--></nowiki>\n</script></pre>\n包起來\n***<nowiki><!-- --></nowiki>是為了如果瀏覽器不接受<code><script></code>時的fallback\n***<code>//</code>是註解\n**外部:\n<pre><script src="xxx.js">\n</script></pre>\n== 觸發 ==\n*在<code><body></code>中用鏈結:<code><a href="javascript:%函數名%()">……</a></code>\n*使用[[表單]]\n\n== 變數 ==\n;值 : 可以是數字、字串\n;名稱 : 可以是字串、字母\n;使用 : 不需加引號,直接使用\n;連結 : <code>%變數% + %其他數值%</code>\n;宣告 : <code>var %變數名% = "%變數值%"</code>\n\n== 常數 ==\n*字串常數:<code>"%字串%"</code>\n\n== 函數 ==\n;結構\n function %函數名% (%argument1%,%argument2%,...)\n { %命令%;\n %命令%;\n ……\n }\n;運作方式\n*e.g.\n<pre><nowiki>function total(numberA,numberB)\n{\nreturn numberA + numberB\n}\n...\ndocument.write(total(2,3))</nowiki></pre>\n**先宣告好"total"此一函數之內容\n**看到<code>total(2,3)</code>,馬上將2指定給numberA、3指定給numberB\n**執行函數,內容為「回傳numberA+numberB」\n**故<code>total(2,3)</code>之回傳值為5\n**再丟給<code>document.write()</code>使用\n\n== 條件陳述 ==\n=== if...then ===\n<pre>if (%比較式%)\n{\n%命令%……\n}\nelse\n{\n%命令%……\n}</pre>\n=== switch ===\n<pre>switch (theDay)\n{\n case 5:\n document.write("Finally Friday")\n break\n case 6:\n document.write("Super Saturday")\n break\n case 0:\n document.write("Sleepy Sunday")\n break\n default:\n document.write("I'm really looking forward to this weekend!")\n}</pre>\n\n== 命令(method,俗稱「command」) ==\n=== 一般類 ===\n;跳出警示視窗: <code>alert ("%內容%")</code>\n;跳出提示輸入文字視窗: <code>prompt ("%提示文字%", "%輸入區預設文字%")</code>\n*e.g. <code>prompt('Type the word castle',"")</code>←<code>%輸入區預設文字%</code>留空\n*e.g. <code>prompt("Please type your name","Newt")</code>\n;使函數傳回值: <code>return (%變數或字串,任何東西%)</code>\n;產生HTML原始碼: <code>document.write("%字串%")</code>\n*e.g. <code>document.write("<nowiki><h1></nowiki>Hello World!<nowiki></h1></nowiki>")</code>\n=== 數學類 ===\n;傳回亂數: <code>Math.random()</code>\n=== 時間類 ===\n參考JavaScript Date Object\nhttp://www.w3schools.com/js/js_obj_date.asp\n;傳回目前小時: <code>d.getHours()</code>\n\n= 參考資源 =\n; PageTutor.com HTML Tutorials & Javascript - Javascript Tutor : http://www.pagetutor.com/javascript/ (要收錢><,只能學到第二課)\n; Java script tutorial for the total non-programmer : http://www.webteacher.com/javascript/ (免費,學到第四章了http://linshi.twbbs.org/blog/bblog/smiles/tongue.gif )\n; JavaScript Tutorial : http://www.w3schools.com/js/default.asp (W3Schools的官方教材http://noellab.net/ernest/tavi/template_ernest/img/icon_smile.gif )\n\n[[Category:程式設計]]\n[[Category:網頁撰寫]]
Hello Tim, thanks a lot for your willing to help; I really should have donate you something!\n\n!Here's what I'm encountering:\n*Since I have already done "[[MultipleZWs|http://ziddlywiki.org/#MultipleZWs]]",\n**(and here's what I was having:)<html><pre>http://milchflasche.objectis.net/\n Addins/ //storing my preloaded js and css files\n Info/ //this ZW document, independent tiddlers\n MS //a Python script and another ZW\n Smile/ //a third ZW folder, independent tiddlers\n ZiddlyWiki/ //now using 1.2.39\n ZiddlyWiki_1.2.31/ //legacy\n ZiddlyWiki_1.2.36/ //legacy\n tiddlers/ //tiddlers for MS</pre></html>\n*so I renamed my {{{/ZiddlyWiki}}} folder as {{{/ZiddlyWiki_1.2.39}}}\n*then I have Quick Imported into the root then reload the ZWs with\n##2.0.3.1, and\n***when pressing "done", any edition could not be saved; the AJAX message "Saving..." keeps showing;\n***the Status Bar of my Firefox tells<html><pre>Javascipt Error: http//.../ZiddlyWiki/Javascript/ziddly.js, line 124: modified has no properties.</pre></html>\n***tiddlers being edited shows a created date as "NaN".\n##2.0.3.2, and\n***editing and saving existing tiddlers works, but\n***ZW still could not get the created date right, it could only show\n****"NaN" or\n****always the same thing with the modified date;\n***a new tiddler could still not be saved, and this time the Status Bar says<html><pre>Javascipt Error: http//.../ZiddlyWiki/Javascript/ziddly.js, line 124: stor...</pre></html>(Sorry there are too many things on my Status Bar so I couldn't get it all.)\n***(The most frustrating thing is, IE seems immune to the above situations, except that it ignores {{{@import}}} syntax in the StyleSheet, and for along with hundreds of other reasons, I hardly use IE anymore.)\n!My Client-side Environment\n*Firefox 1.0.6 (I have tested with the Safe Mode and the problem is still there, so it should have nothing to do with any of the extension, I think.) on a\n*Windows XP SP1\n!Some Passages\nSo, if you have got some spare time to look into it, I'd 100% appreciate it. I have sent you the id and password, so just test anything necessary, taking it your home. (A strange thing: my Zope can't do copy/paste...) And if you could, please keep these folders intact:\n{{{\nAddins/\nInfo/\nMS\nSmile/\nZiddlyWiki_1.2.31/\nZiddlyWiki_1.2.36/\ntiddlers/\n}}}\nThanks a lot!\n!My Management Page\nhttp://milchflasche.objectis.net/manage
// //''Name:'' LoadExtPlugin\n// //''Source:'' http://www.sourceforge.net/projects/ptw/\n// //''Author:'' BramChen\n// //''Type:'' Plugin\n// //''Description:'' LoadExtPlugin allows you to load external extensions from the file lists (named .js) within those tiddlers taged with "ExtList". \n// //''Syntax: ''\n// //''Revision History:''\n// // v1.1.0 (10 Jan 2006) - To make the extensions list handling more robust, thank Udo.\n// // Fix bugs for multi-tiddlers tagged with ExtList\n// // v1.0.0 (07 Jan 2006) - Combine the RefreshExt code and LoadExtPlugin, and also make TW 1.2 to be backward compatible, thanks Udo.\n// // Globle function refreshCode() added, and reserve the refreshExt macro.\n// // Fix a minor bug for variable "scriptfile".\n// // v0.3.0 (29 Dec 2005) - macro refreshExt modified to refresh formatter\n// // v0.2.0 (24 Nov 2005) - macro refreshExt modified for TW 1.2.39 beta 2 and above\n// // v0.1.0 (25 Sep 2005) - initial release\n// //''Code section:''\n//{{{\n\nversion.extensions.refreshExt = {major: 1, minor: 1, revision: 0, date: new Date("Jan 10, 2006")};\nvar extTag = "ExtList";\nvar str = ""; var scripts = [];\nvar tiddlers = store.getTaggedTiddlers(extTag);\nfor(s=0 ; s<tiddlers.length; s++){\n str += store.getRecursiveTiddlerText(tiddlers[s].title)+"\sn";\n}\n\n//scripts = str.split(";");\nscripts = str.replace(/[;\sr]/mg,"\sn").split("\sn");\nfor (i=0; i<scripts.length-1; i++) {\n var scriptfile = scripts[i].trim();\n if (scriptfile.length < 2 || scriptfile.substr(0,2) == "//")\n continue;\n \n// displayMessage("loaded: "+ scriptfile);\n var n = document.createElement("script"); \n n.type = "text/javascript";\n n.src = scriptfile;\n document.getElementsByTagName("head")[0].appendChild(n);\n}\nvar theCodes = "config.macros.refreshExt.refreshCode();";\nvar refreshScriptElem = document.createElement("script");\n refreshScriptElem.type = "text/javascript";\n refreshScriptElem.appendChild(document.createTextNode(theCodes));\ndocument.getElementsByTagName("head")[0].appendChild(refreshScriptElem); \n\nconfig.macros.refreshExt = {\n handler: function(place,macroName,params){config.macros.refreshExt.refreshCode();},\n refreshCode: function() {\n if (story) story.closeAllTiddlers(); else closeAllTiddlers(); \n if (Formatter) formatter = new Formatter(config.formatters); \n store.notify("MainMenu",true);\n store.notifyAll();\n restart();\n }\n}\n//}}}
-/Addins/MandarinTranslation.js\n/Addins/RecentPlugin.js\n/Addins/CommentPluginMandarin.js\n/Addins/ImportTiddlersPlugin.js
[[Fusion]]這個擴充套件沒有為[[Firefox 1.5]]更新,但是剛剛發現了這個套件:[[Fission|https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&id=1951]],實在是太棒了!有點機車的是,它的描述寫:「Not Fusion.」:p\n\n功能:讓Firefox也能擁有像Safari一樣,將網頁載入進度條色塊整合顯示的網址列。
!特異功能\n*按Ctrl+某些標點符號鍵,可以輔助輸入歐語帶修飾符號的字母!(重點是會在狀態列直接提示)想不到日本人這麼貼心!
http://www.openomy.com/filemanager/\n\n剛發現的1GB免費網路公事包,不用白不用,先註冊再說啦:p這樣就不用傷腦筋是不是要拿Gmail的空間來動手腳了:p
|!官方網站|http://www.debian.org/|\n!參考閱讀\n*[[Free Software Magazine - Jump to Debian GNU/Linux!|http://www.freesoftwaremagazine.com/free_issues/issue_10/jump_to_debian/]]
!參考閱讀\n*[[Free Software Magazine - It’s an Ubuntu world|http://www.freesoftwaremagazine.com/free_issues/newsletters/fs_sites_review_january_2006/]]
!wiki是什麼?MilchFlasche簡單說:\n一種網路組織的概念,希望\n*人人可直接在網路上修改網頁\n**這也是WWW創始人的本意,但這夢想至今仍然只有少部份達成......\n*但並非直接修改HTML標記,而是透過系統底層所支援的簡化語法,產生出格式化的文字、表格、超鏈結等等網頁呈現。\n**wiki式的語法因此成為一種極富魅力的特色,許多單機的系統或軟體即使不具wiki的公開性,也採納了此特色,如TiddlyWiki。\n**「駝峰字」(CamelCase)也非常具有wiki代表性,因為最初[[Wiki Wiki Web|http://c2.com/cgi/wiki?WikiWikiWeb]]就採用這種方式為條目(頁面)命名。\n*因為放在線上,所以具有公共性,適合社群參與。\n*還有,我喜歡這句話(Joi Ito[[說的|http://joi.ito.com/joiwiki/SuperNovaOutline]]──他是誰啊?!)<<br>><html><blockquote>write first, structure later</blockquote></html>\n----\n*^^@@20060513@@^^但是,wiki概念和實作在台灣普及太慢,反而被Wikipedia(維基百科)知名度的提升趕過去,導致許多人直接把wiki當作Wikipedia的同義詞或暱稱而已orz\n!我怎樣認識wiki\n*最早先在雜誌上看到對wiki以及Wikipedia的介紹(2004年初)\n*幾個月之後(200407)裝了Firefox的同時,發現有「[[PTT Wiki|http://wiki.ptt.cc/]]」,就建了[[自己的頁面|http://milchflasche.wiki.ptt.cc/]]\n*之後不久也參與了Wikipedia,不過一直都沒什麼貢獻,只打了一些筆戰(關於應否支持漢語其他語言成立Wikipedia);加入教會以後就沒有時間參與至今。\n**不過參與Wikipedia的收穫是對MediaWiki這套wiki系統的運作還算熟悉,2004年底~2005年初還曾經想幫忙「[[目光相對]]blog」的架設工作。可惜後來站長當兵沒時間管,又變成spammer的垃圾場,現已[[關閉|http://linshi.twbbs.org/wiki/]](不過藉此發現linshi是用Gentoo架站的:p)。\n*用過MediaWiki以後覺得'Tavi很遜(可能台灣相關資源引進太少),想在PTT Wiki之外找個更好的host,就開始了[[我的wiki出埃及記|http://linshi.twbbs.org/blog/MilchFlasche/7623]]\n*出埃及以後到[[曠野|http://linshi.twbbs.org/blog/MilchFlasche/45426]],還有[[曠野續篇|http://linshi.twbbs.org/blog/MilchFlasche/48082]]......XD(Oddmuse及XWiki)\n*然後,到[[迦南地|http://linshi.twbbs.org/blog/MilchFlasche/52256]]了嗎?(TiddlyWiki)\n!參考閱讀\n本來以為[[Jedi]]那邊應該會有不少介紹wiki的文章,後來發現我搞錯了,Jedi大最關心的首先是blog;至於我一開始接觸wiki的概念,好像是某期的Download雜誌(還是PC Office?反正是城邦集團的就對了)介紹Wikipedia,還有wiki的觀念。台灣網路上wiki的先驅中,[[hlb]](布丁)也是非常重要的一位吧。\n\n以下文章中,大部份距今(200603)都有一段時間了,不過還是值得一看。國外的來源先不找了。\n*[[圍紀與知識網路化 Jedi's BLOG | Jedi.org|http://jedi.org/blog/archives/004613.html]]\n*[[自由主義:快紀 (Kwiki) Jedi's BLOG | Jedi.org|http://jedi.org/blog/archives/004658.html]]\n*[[hlb's articles: Wiki 簡介|http://ccca.nctu.edu.tw/~hlb/articles/archives/000662.php]]\n*[[hlb's articles: 臺灣 Wiki 小事記|http://ccca.nctu.edu.tw/~hlb/articles/archives/000945.php]]\n*[[hlb關於wiki的文章分類|http://ccca.nctu.edu.tw/~hlb/articles/archives/cat_wiki.php]],可以看到wiki剛引進台灣的一些蓽路藍縷\n*再追索上去,發現比hlb更早注意到wiki的好像是[[Schee]],在此選一篇\n**[[Schee - 摩托車日記 » 先上菜:Wiki/Blog 最大的不同(請一起來煮)|http://blog.schee.info/archives/2003/03/11/774/]]\n*[[批踢踢實業坊對wiki的介紹|http://www.ptt.cc/index.wiki.html]]\n*也選一篇中國人寫的好了:[[车东Blog^2: Wiki发布系统的选型|http://www.chedong.com/blog/archives/001110.html]]\n其他文章:\n*[[我blog上的wiki分類|http://linshi.twbbs.org/blog/MilchFlasche§ionid=1790]]\n*對了,怎麼可以忘了Wikipedia對wiki的介紹呢?[[Wiki - Wikipedia, the free encyclopedia|http://en.wikipedia.org/wiki/Wiki]]\n----\n最近wiki又開始受到關心了,這篇很熱騰騰:\n*[[阿孝札記: 用wiki管理知識、協調工作|http://www.ashaw.org/2006/04/wiki.html]]\n--20060422 0:14\n----\n網站:\n*wiki的祖師爺——[[Wiki Wiki Web|http://c2.com/cgi/wiki?WikiWikiWeb]]——至今仍然保持原汁原味。(是用CGI寫的呢)\n還有什麼的話,''敬請再[[告訴我|MilchFlasche]]喔!''
http://blog.schee.info/
台大歷史所焦慮的碩士班四年級生,興趣是語言、歷史、足球還有資訊新知,不過都不是很專業XD\n\n寄信請到Robertus0617 [at] gmail [dot] com。
*好像是一種繪圖規格,Firefox 1.1以上已經開始支援?\n*看看這個網頁吧——[[Decorative borders and the Canvas|http://www.agustinfernandez.com.ar/proyectos/canvas/]]——如果你用的瀏覽器有支援canvas規格的話,游標移到每個圖框上它們的邊框還會產生很多花俏的變化喔!這才是未來的技術啊!
!閱讀\n*[[A List Apart: Articles: Getting Started with Ajax|http://www.alistapart.com/articles/gettingstartedwithajax]]
20050326找到,和ThoughtManager接近,做大綱的軟體\n*大綱功能沒有那麼強\n*可以匯出到記憶卡上成為HTML檔。
20050326找到,可以編輯記憶體以及本機中的[[Palm doc檔|Palm doc]]。\n*介面圖示很美觀\n*有華文化\n*檔案管理介面優\n*可匯入或匯出至[[Memo]]
|!官網|http://www.flock.com/|\n*看在[[BobChao的面子|http://forum.moztw.org/viewtopic.php?p=68420#68410]]上,還是去下載來「玩玩」吧。(雖然它已經推出快一年了......)\n*[[官網|http://www.flock.com/]]的風格是米白底,大的無襯線字型,並用鮮明色彩強調某些字句和鏈結點綴其中,感覺很有活力、很新潮。\n*我下載了0.5.12,用的Gecko核心是20060224的1.8.0.1,比Firefox 1.5.0.1用的20060111還新!\n**[[0.5.12的特色|http://www.flock.com/products/flock/releases/0.5.12.php]]\n**不過預設搜尋引擎居然也是Yahoo!,真是無恥的Yahoo!。\n**算了,不要罵了,來看一些新功能好了,請移駕Flickr看那裡的註解:<html><a href="http://www.flickr.com/photos/milchflasche/109197292/"><img src="http://static.flickr.com/41/109197292_d4f135dd2b.jpg?v=0" style="float:right; width:50%;" /></a></html>\n!預設介面\n*粗估來說,我覺得和Firefox還有75%的相似度,但更重大的特色是以下的部份。\n*取代Firefox個人書籤列所占空間的是「Topbar」,裡面包含\n**「Collections」,可以一次切換一整套要顯示在Topbar上的書籤組,可說比個人書籤列更靈活\n***如果該網址內含RSS的話,Topbar上的按鈕會直接顯示書籤本身的按鈕,還有RSS的下拉選單,太貼心了!\n**「Topbar」,它在功能上也同時取代了傳統的側邊列,Flock預設結合了地圖(Yahoo!的......)、blog編輯器、flickr的照片瀏覽與上傳器、Technorati,還有所謂的「Shelf」,似乎是個暫存頁面縮圖的櫃子。\n*取代「書籤」的「最愛」\n**剛好和IE的「My Favorites」同名,但又豐富得多\n**要把網頁「標上星號(並標上標籤)」的時候,會問要不要分享到線上\n**管理介面也是用分頁開啟,結合得非常好\n**除了與del.icio.us合作,現在又和[[Shadows.com]]合作,也可以匯入桌上書籤,還可以隱私!太酷了!\n*blog文章編輯\n**也當作分頁來處理,而且可以從「檔案」選單中選擇「新增blog post」\n**驚覺:這和我夢想中的「Firefox Suite」編輯的部份還真像!\n*內建RSS閱讀,樣式非常清爽\n*網頁右鍵選單\n**對一個頁面的預設動作多了「Blog this」還有「加到Shelf中」\n!擴充與自訂\n*支援的擴充套件也越來越多了!看[[這裡|http://ehoffmann.blogsome.com/2005/10/23/the-ultimate-flock-extensions-list/]]和[[這裡|http://adminid.com/flock/]]就知道了。\n*不過目前完完全全沒有別的佈景主題。(所幸,預設的佈景主題很有味道)--20060308 2:29\n!Bug\n*「Star this page」好像沒有作用?\n!感想\n*一開始看到這個瀏覽器的介紹時,帶著一點看熱鬧、冷淡甚至有點排斥的心情,因為一直覺得有Firefox就好了,這麼多好的功能應該是做成Firefox的套件整合進去,共冶一爐,免得使用者不管用哪邊都會有缺憾不是嗎。不過今天裝了Flock之後,對於很多創新和大膽的嘗試卻覺得頗為驚艷,開始覺得有這樣的刺激和試驗,才有可能讓人們對瀏覽器與網路的想像力更加釋放(比如我夢想中的//[[Firefox Suite]]//:p)\n*結果我寫Flock的記事居然比Firefox還多更多......orz --20060308 2:34\n*所以現在我對Flock的態度嘛......其實我還挺想看看它的潛力有多大的,能把多少Firefox的套件移過去用,而它未來又能有多大的突破。(說真的看到「New Blog Post」那個選項開啟的是一個編輯的分頁,我全身好像被電到了一樣:P)所以,之後的時間也許偶爾會切過去用一下,裝裝套件、經營一下。\n!相關閱讀\n*[[BobChao介紹0.5.12|http://leolo.ath.cx/~bobchao/index.php?mode=link&bid=900]]\n*[[Mozilla Taiwan 討論區: 轉貼:新的瀏覽器計劃 Flock|http://forum.moztw.org/viewtopic.php?t=11104&highlight=flock]]
*看到不同的人們介紹這個台灣地區華文為取向的線上書籤服務,已經有好一陣子了。今天聽說它可以匯入桌上的書籤,便去瞧瞧,決定註冊一下。\n*用AJAX來翻閱上/下頁,感覺就精緻多了。AJAX越來越無處不在。\n**不過壞處是,它會讓瀏覽器的上/下頁機制形同廢物……\n*又是白底,字體用灰、綠、橘。Web 2.0真的是走簡明、清爽、活力風啊:D\n*囉嗦了半天,還沒開始用哩:P --20060307 22:25\n*再怎麼說,線上書籤最重要的是社群,所以介面到底是華文還是英文,實在有差。
我只能說我「非常、非常」失望。從[[最初煞有介事的短片|http://www.youtube.com/watch?v=rV1WGDW37c0&search=project%20origami]](說真的配樂還有裡面的人用那台小機器所做的事還讓人蠻有遐想的,應用方式和傳統的Table PC看來也頗不同;雖然拍得實在太冗長了:wink:),到微軟架的[[故弄玄虛Flash|http://www.origamiproject.com/1]],前兩週釋出搞神祕的動畫,還有一些相關的報導和期待,像\n*[[Will 'Origami' Breathe New Life into Mobile PCs?|http://www.microsoft-watch.com/article2/0,1995,1933439,00.asp?kc=MWRSS02129TX1K0000535]]\n*[[微軟的「折紙(Origami)」計畫 - Engadget Chinese|http://chinese.engadget.com/2006/02/25/microsofts-origami-project/]]\n*[[Origami 真照?信不信由你 - Engadget Chinese|http://chinese.engadget.com/2006/03/06/possible-origami-pic-surfaces-on-the-web/]]\n*[[Taiwan.CNET.com : 新聞專區 : 企業軟體 : 微軟:Origami與迷你平板電腦有關|http://taiwan.cnet.com/news/software/0,2000064574,20104787,00.htm]]\n*[[Personal Tech Pipeline Microsoft Confirms 'Origami' Handheld Project|http://www.personaltechpipeline.com/news/181400685]]\n真的讓人覺得微軟好像會有一些很大的突破。\n\n結果,好啦,3/9 CeBit大展公布啦,結果是這種東西:[[傅瑞德繼續貼:Origami摺出什麼來了?|http://blog.yam.com/fredjame/archives/1237667.html#comments]]\n\n說真的他們再不把Windows桌上的模式丟掉,什麼行動裝置到他們手上,軟體層面都會變得呆板、肥大而沒有效率。如果真的只是把執行Windows XP的平板電腦再變小一點的話,那麼這個計畫走上平板電腦之路的日子也不遠了。
[[Web Frame Works - by einSTein|http://web.sven-tissot.de/]]\n\n有ZiddlyWiki上面能使用的TiddlyWiki plugin的列表。
*記事標題的英文單字\n**到底該不該用[[駝峰字]]?\n**到底該不該逐字大寫?\n
希望plug-in還有CSS都可以像早先版本的ZiddlyWiki一樣,直接集中放在Zope的某個目錄中,再用index_html的Python script去匯入,這樣也可以達到一整套的插件和樣式都能讓全部的分站可以使用,並且又不必在每次升級主程式的時候重新安裝一次。→參見[[集中載入ZiddlyWiki的plugin及CSS]]\n!Plug-in\n*[[AddUserForm|http://ziddlywiki.com/#AddUserFormMacro]]\n*AuthorsFooter\n*TagglyTagging\n*LogIn\n*Recent\n*Redirect\n*讓javascript和CSS可以直接套用blockquote樣式\n!CSS\n*LargerFonts\n**修改中\n!Wikifier\n*CheckBox\n!介面翻譯\n*配合TiddlyWiki 1.2.39\n*ZiddlyWiki獨家的部份\n*其他plug-in\n
*尚未登入時卻可以按「新增記事」的巨集;雖然不會造成之後資料的損失(只要正式登入一次,修改還是會在),但還是一致性地要求登入比較保隔。\n*UTF-8 URL解析失效→[[反映|http://ziddlywiki.org/forum#%5B%5BTwo%20Unicdoe%20Issues%5D%5D]]→TW 2.0.7(ZW 2.0.10.0)@@已解決@@\n*@@20060509@@ 匿名使用者的「view」功能失效→[[反映|http://ziddlywiki.org/forum#%5B%5B%22view%22%20for%20Non-logged-in%20Users%20Not%20Working%5D%5D]]\n*@@20060509@@ 匿名使用者編輯時,可否透過填寫{{{<<option txtUserName>>}}},而變更其署名?(不要每次reload完又都變成「Anonymous User」)→[[反映|http://ziddlywiki.org/forum#%5B%5BIs%20it%20possible%20for%20names%20of%20anonymous%20editors%20kept%3F%5D%5D]]、[[請教|http://groups.google.com/group/PrinceTiddlyWiki/browse_thread/thread/69404c33f5a821f0/dc5681b556ebbd70?#4bbb4ef96acb85b6]]
*讓每則記事內容可從片段想法開始發展,可以隨意而記、隨時增修,並不試圖馬上產生一篇篇成熟的「文章」,因此使用上更靈活(當然也容易讓讀者不知所云:p)\n*想到什麼就記什麼,一切都在成形當中,一切也永遠沒有確切的終止——夠[[後現代|Smile#後現代]]吧——這是個進行中的歷史。
|!功能|!已提出要求|!已獲得回應|!已有成果|!已滿足|\n|匯入/匯出csv檔,也就是說任何方式建立的資料庫,只要檔頭的欄標題有設定「title、author、content、created date、tags」等等資料,就能建立tiddler。|||||\n|自由拖拉tiddler順序<html><blockquote>甚至完全像便利貼一樣。</blockquote></html>|||||\n|TagglyTagging的列表會依其他的標籤再做區隔。|✔|✔|||\n|SortableGrid|||||\n|插入現在時間、日期的標籤,像Wikipedia的「{{{~~~~}}}」一樣,不等於現有的{{{<<today>>}}}巨集!|||||\n|讓{{{@@}}}語法可以巢狀套用。<html><blockquote>wiki語法的弱點就是,為了求簡單易用,只能在有限的符號當中做標記,再用regexp去轉換,無法直接做清楚的標記。</blockquote></html>|||||
ZiddlyWiki還在1.2.29左右的時候是將plug-in及CSS存放在後台當中,用index_html來載入的,後來CSS的機制被skin庫所取代。但最近進入1.2.39之後,skin被拿掉了,Tim Morgan也想讓ZiddlyWiki完全按TiddlyWiki的方式來運作。不過,其實大家都希望,當個人擁有的TiddlyWiki文件有很多份時,能有個辦法將CSS及plug-in集中存放,然後分別按需要載入,所以我其實還是蠻希望ZiddlyWiki可以有這樣的機制的,以下就開始來嘗試吧!--20051202\n!方案1\n|!適用|ZiddlyWiki 1.2.39、2.0.x|\n*在Zope根目錄下建立一個資料夾,名稱隨便取,把plug-in的js還有css檔都放到底下\n*在{{{/ZiddlyWiki}}}目錄下的Python script「ziddly」當中,找到下列的程式碼:<html><br /><pre># insert the extra stuff\nsrc = src.replace('</head>', '%s</head>' % (status_vars + base_css + rss + scripts))</pre>在其前插入:<br /><pre># ---------------------\n# MilchFlasche add-ins\n# set necessary variables\nstylesheet_tag = '<style type="text/css">@import url(%s/%s);</style>\sn'\naddins_path = '/%YourAdd-InsFolderName%'\n\n# point to various addins such as\n# scripts += javascript_tag % (addins_path, '%PlugInName%.js')\n# scripts += stylesheet_tag % (addins_path, '%StyleSheetName%.css')\n(append your add-ins here)\n# ---------------------</pre></html>\n*把{{{%YourAdd-InsFolderName%}}}改成你放add-in資料夾的名字,前面加一個。\n*在{{{(append your add-ins here)}}}的地方把要載入的plug-in還有CSS一行一行照格式寫清楚\n^^Yes!測試成功!感謝神!^^\n----\n*這個方法已經可以將額外的plug-in和CSS放在{{{/ZiddlyWiki}}}之外的資料夾,不過還是需要在每次升級之後去改{{{/ZiddlyWiki/ziddly}}}\n*不過這樣載入的CSS效果很可能會被TiddlyWiki本身的ShadowTiddlers給蓋掉,所以為求保險,每個規則後面可能都得加上{{{!important}}}……有辦法不加嗎?\n----\n*升級到2.0.3.1,經測試之後此方法仍然可用。--20060125 0:48\n----\n*不對,在2.0.3.2破功了,為什麼?--20060130 17:53\n**不是,是RecentPlugin一直出不來,不知道怎麼了。--20060130 18:32\n**還有別的plugin也會受到影響,這個方案恐怕面臨很大的危機了。--20060203 16:32\n!方案2\n*要是能直接把額外的code也放在{{{/ZiddlyWiki}}}之外,再從個別資料夾的index_html去呼叫就好了……可是還不太熟悉Python script的呼叫方式。\n!方案3\n個別文件直接從StyleSheet中用{{{@import}}}匯入外部樣式表\n*把樣式表也都放在Zope下面的一個資料夾中\n*在StyleSheet中使用<html><br /><pre>@import url(%樣式表路徑%/%樣式表名稱.css%);</pre></html>\n*存檔,okay!簡潔又方便!考慮把方案1中載入CSS的方式也用這裡取代,這樣就不用擔心規則被覆蓋的問題了。\n!方案4\n把script的呼叫放在MainMenu當中,用{{{<html>...</html>}}}包起來\n*似乎是失敗了……這樣的呼叫法,好像並沒有辦法讓T/ZiddlyWiki頁面在載入的時候執行script。恐怕還是得用{{{systemConfig}}}的tiddler了。--20060203 16:35\n!方案5\n建立某個tiddler,標為systemConfig,讓它成為script,再從中呼叫外部的script,可行嗎?--20060203 16:36\n*目前還是找不到怎樣在JavaScript中匯入別的script的方法……17:00\n!方案6\n結果還是要用到BramChen兄的「LoadExtPlugin」才行的樣子……\n*成功是成功了啦,但還是要裝那一千零一個plugin,而且還要至少建立一個標為{{{ExtList}}}的tiddler,所以至少要增加兩個系統的tiddler,{{{systemConfig}}}這個標籤也得用上,真是不乾不脆啊:(--17:05
*ThoughtManager的匯入/匯出真的蠻遜的,看了一下[[Bonsai]],真是頗強。\n*新試用的侯選人有[[Bonsai]]、[[BrainForest]],還有[[HandOutline|http://www.fgolware.com/]],後者最陽春,但也是免費的。\n**已經裝了[[Bonsai]]了,很強大,不過也好複雜,要摸熟又要花不少時間吧。但真的比ThoughtManager好用很多!\n**HandOutline匯出html到卡上的功能似乎不支援中文,而且程式還是有些粗糙之處,殘念。\n^^--20051202^^
*[[Emperor Penguin Empire~ペンギンのフリーWeb素材サイト~|http://www.peso.nu/penguin01.html]]
*昨天的事,真是個好消息啊;不過要把我現在1.0.6用的八十幾個[[套件|Firefox擴充套件]]全都順利升級上去,想起來就是一件超頭大的事,不如等到該更新、能更新的套件都差不多了以後再說吧。--20051202\n!相關閱讀\n*[[Vive Firefox 1.5:Hemiola 生活日誌|http://hemiolapei.free.fr/blog/index.php/20051129/firefox-1-5]]
[[www.planearium.de - South Park Studio|http://spstudio.linda.hosting-friends.de/spstudio.html]]
*TiddlyWiki鼓勵micro-content,那麼一則記事要分多細呢?\n*標籤又要取到什麼層次呢?\n**如果標籤之間有從屬關係的話,應不應該全部都列呢?\n**還是只列直接上一層的標籤呢?
*網友整理\n**[[zRenard整理的repository|http://www.zrenard.com/tiddlywiki/tiddlywiki.html#ListStyles]]
給Windows使用者們(包括我自己):\n*對微軟軟體的肥大、錯誤百出、更新遲緩感到不耐煩嗎?\n*對高昂的價格和一再做無意義升級的剝削感到痛苦嗎?\n*對自己使用盜版軟體覺得常常心裡發毛嗎?\n用電腦,並不一定要用微軟。\n----\n以下僅列出自由軟體的替代方案,其他非自由軟體但也值得一試的選擇在此不贅。被替代的軟體則不限於微軟,也包括其他廠商的商業軟體。\n打✓的是我自己已經替換的。\n*作業系統<html><br /></html>茲事體大,請參見[[改用Linux]]\n*網頁瀏覽器、郵件程式\n**✓==Internet Explorer==→Firefox\n**✓==Outlook Express、Outlook==→Thunderbird\n*網頁編輯器\n**✓==FrontPage、Dreamweaver==→Nvu\n*辦公室軟體\n**✓==Microsoft Office==→OpenOffice.org\n*PDF閱讀\n**✓==Adobe Reader==→Foxit Reader\n*影像處理\n**✔==PhotoShop==→GIMP\n***不過我實在不太擅長影像處理……[img[天使|http://messenger.msn.com/MMM2004-08-11_11.52/Resource/emoticons/angel_smile.gif]]
|20051201|更新到ZiddlyWiki 1.2.39.1,終於可以用雙位元字當標題,不必一直用英文了,感謝神!(不過美美的[[skin|ZiddlyWiki skins]]暫時也不見了......)畢竟有很多東西還是用華語去表達比較直接。|\n|20051202|各分站重新使用比較漂亮的[[樣式表|TiddlyWiki style大全]],不必再用樸素又倒胃口的預設樣式。^^另參見[[集中載入ZiddlyWiki的plugin及CSS]]及[[打造個人ZiddlyWikiBlog事業群]]^^|\n|20060208|讓各分站可以讀取{{{/Addins}}}當中的plugin。|\n|20060508|之前2.0.6.2時代網址中若含有UTF-8字元會解析錯誤,升級到2.0.10.1就可以囉!|
!書目\n*收集、編輯→HanDBase\n**出外用PDA\n**在家用桌面端\n**可輸出為csv檔\n*瀏覽→在HanDBase中搜尋,或輸出到csv檔,用試算表軟體(當然啦,我用OpenOffice.org Calc,不用Micro$oft Excel!)自動篩選\n!本文寫作\n*大綱、初稿階段→Bonsai\n**同樣出外或在家都可用\n*完稿\n**網頁→Bonsai輸出成給TiddlyWiki的格式?或是輸出成HTML?\n**書面→用[[HTMLtoBook]]說的方法輸出成PDF
參考[[Advance Search Sidebar]]、[[MID]]。基本上這兩個套件的理念都很不錯,都能讓人一次搜尋多個目標,但是各有其不足之處。MID搜尋以及管理字典網站的方式幾近完美,也收錄了很多字典網站,但最大的敗筆就是它另外開一個和Firefox主視窗毫不相干的新視窗,在那裡面我們啥套件的功能都不能用,沒有滑鼠手勢、沒有辦法更快地切換分頁,甚至還不能擋廣告——以致整個Firefox會因為Merriam-Webster該死的廣告視窗而當掉!至於Advanced Search Sidebar從側邊欄運作,並且可以將search plug-in分類整理、一次搜尋也是不錯的做法,但是記憶使用偏好上還要再加強,而且搜尋很多網站(又是Merriam-Webster!)時會跑出平常單純用一個search plug-in時不會跑出的一堆怪結果,真不知道程式是怎麼run的。而且它通常只占用一個分頁,無法將所有查詢的結果列在各分頁中快速切換,要看不同的搜尋結果時還要花幾秒等網頁重新呈現好,不像MID那麼豪邁。\n\n所以,希望未來能有更方便的Mozilla/Firefox字典查詢套件問世。當然,要把它擴大成廣泛的綜合搜尋工具、不限於字典,也應該一點都不難才是。構想如下:\n*從側邊欄或是偏好設定對話窗中勾選要查詢的字典網站\n**最好能夠記憶不同的組合、分類整理\n*從搜尋框或是側邊欄輸入尋找的字串\n*同時搜尋所有被勾選的目標,將它們分別顯示在一系列分頁中\n**這些分頁應該能和一般的Firefox分頁一樣運作\n**但是最好也能鎖定成一個群組\n***這部份可能需要和分頁瀏覽套件做個協調\n**鎖定的意思也包括,輸入下一個搜尋字串時,不至於再重新開一組分頁,而是直接在現有的字典網站分頁中繼續做查詢\n***除非勾選了新的字典網站作為目標\n***這些部份真的很需要避免和分頁瀏覽套件的控制產生衝突!\n----\n^^''建立:''20051208^^
[ ]推薦使用Firefox\n[ ]CC公用創意授權標示\n[ ]給TiddlyWiki、ZiddlyWiki及stylesheet作者的credit
|項目|!TiddlyWiki|!MediaWiki|\n|>|>|文字|\n|!粗體|{{{''文字''}}}(兩個{{{'}}})|{{{'''文字'''}}}(三個{{{'}}})|\n|!斜體|{{{//文字//}}}|{{{''文字''}}}(兩個{{{'}}})|\n|>|>|鏈結|\n|!外部PrettyLink|{{{[[顯示文字|URL]]}}}|{{{[URL 顯示文字]}}}|\n|!內部PrettyLink|同上;這正是TiddlyWiki的一個麻煩|{{{[[目標頁面標題 顯示文字]]}}}|
原作者:MoonMoon\n出處:[[Mozilla Taiwan 討論區: Firefox 官方 DoS History 安全警報|http://forum.moztw.org/viewtopic.php?p=61166#61166]]\n\n解法:\n<<<\n改 prefs 來暫時解決, 令 javascirpt 不能改動 page title 來避免受 javascript 跑 DoS History 攻陷\n\nURL 欄 about:config\n{{{\n新增字串capability.policy.default.HTMLDocument.title.set\n內容值noAccess\n}}}\n或編輯 prefs.js新增\n{{{\nuser_pref("capability.policy.default.HTMLDocument.title.set", "noAccess");\n}}}\n<<<\n----\n*昨天就想說這個方法既然和script修改page title有關,那TiddlyWiki不就是這樣的script?但後來還是把這個方法用上去了。果不其然,今天所有的TiddlyWiki、ZiddlyWiki文件全都只開到一半,要改SiteSubtitle的時候就掛了,一開始一直都找不出原因,後來還好是Firefox狀態列的Javascript錯誤訊息提醒了我禍首就是這個解法。看來是不成的了。--20051214
*首先,我的標準是很高的,因為我用Nvu(也就是Gecko核心)編輯網頁,而Gecko核心對CSS解譯的正確性數一數二,同時也就代表它能做到的事別的軟體未必做得到。\n#按照[[HTML to Book]]所述,用[[Prince]]這個軟體轉檔,但目前似乎不支援Big5編碼的網頁;用Unicode編碼則似乎無法取用中文字型,中文字都會變成問號。而且CSS的解譯上也不如所說的那麼漂亮。\n#用OO.o打開網頁,天哪,更是一塌糊塗了;雖然能夠直接匯出成為PDF檔,不過一開始它就看錯我寫的CSS,所以結果自然很可笑。而且,字型也跑掉了。看來用OO.o寫網頁是比較不會像M$ Word或FrontPage一樣垃圾碼、非標準語法一堆,但恐怕還是從頭到尾在裡面寫出來,比較不會失望。[img[wink|http://forum.palmislife.com/images/smilies/icon_rolleyes.gif]]\n#下一種選擇呢?恐怕我得下載PDFCreator之類的自由軟體,直接從Nvu或Firefox列印了[img[苦笑|http://forum.palmislife.com/images/smilies/icon_wink.gif]]--20051215\n----\n*好耶,看看PDFCreator的效果,這樣才像話嘛!字型都內嵌得美美的。\n*不過Prince的方法失敗,還是覺得非常可惜,畢竟它原本提供一個比Firefox更貼近CSS3理想的遠景。--20051215
[[A List Apart: Articles: Printing a Book with CSS: Boom!|http://www.alistapart.com/articles/boom]]\n\n這篇教學真是太棒了!正是我夢寐以求的——用HTML來製作書籍!也許這樣我就可以用HTML來做我的論文,不需要透過辦公室軟體囉!感謝神讓我偶然看[[A List Apart]]的新聞時看到了這篇啊~--20051129\n----\n不過真正的轉檔關鍵是在[[Prince|http://www.princexml.com/]]這個軟體上,我已經去下載了;它的展示版本功能可以完整使用,只是產生的PDF第一頁上好像會有它的logo就是了。\n*但目前轉漢字上都變成「?」--20051208
用資料庫程式輸入及管理書目資料非常方便,我可以帶著Palm上的HanDBase到處抄資料。但是要把\n|日野開三郎|唐韋君靖碑の応管諸鎮寨節級についての一考察|東洋史學論集|第一卷「唐代藩鎮の支配体制」|三一書房|1980|515-536|\n變成{{{日野開三郎,〈唐韋君靖碑の応管諸鎮寨節級についての一考察〉,《東洋史學論集》第一卷「唐代藩鎮の支配体制」(三一書房,1980),頁515-536。}}}這樣的文獻徵引格式(一般來說學術著作比較偏好這樣的格式,沒有看過有人放表格在上面的;當然,也許只是大家沒試過?),又該怎麼辦呢?\n|資料表如何變成文獻徵引格式|c\n|!PDA|←→|>|>|>|>|!PC|\n|HanDBase|~|HanDBase Desktop|→|CSV(欄名在第一行)|→|試算表軟體,如OpenOffice.org Calc或M$ Excel|\n|~|~|~|~|~|→|JSON→TiddlyWiki?|\n|~|~|~|→|XML(欄名成為tag/element)|~|~|\n|~|~|~|~|~|→|直接貼入Nvu,成為XHTML,並可套用CSS|\n#舊方法:匯出CSV(20051222以前)\n##在資料表當中插入一些標點符號及「譯」、「編」等附加文字。\n##匯出之後再用純文字編輯器做處理\n***基本上若沒有像EmEditor這種可以用regExp搜尋、取代的工具,可能會弄到哭。\n#新方法:匯出XML(20051223測試成功)\n**之前以為HanDBase匯出的XML不能用,後來才發現原因是它的文件編碼被設為UTF-8,但內容還是Big5碼的華文;轉回Big5編碼就恢復正常了。\n***感謝神讓我發現這點!不然我還得笨笨地找把CSV轉成XML的工具!不過我還是下載了一個叫作[[Exportizer]]的軟體啦,以備不時之需。\n**不過要讓XML的標籤能正常使用,原本資料庫的欄名勢必要改取英文。\n\n*至於從CSV或XML再轉成JSON格式,則是因為TiddlyWiki前陣子出現了DataTiddlerPlugin,可以用TiddlyWiki處理JSON格式的資料庫\n**對此,有找到一支ParseXML的script,但完全還是不知道要怎麼用XD --20051223
[[A List Apart: Articles: Thinking Outside the Grid|http://www.alistapart.com/articles/outsidethegrid]]\n\n這篇大意也是在討論過去人們習慣用表格來為網頁元件定位,因此深深受到「網格」(grid)思維制約,就像完美的棋盤格都市計劃一樣(哇,唐長安也是啊);但CSS解除了這個綑綁,大家應該試著去學習新的網頁設計方式。引用一句:\n>CSS changes all that, and this is why I theorize, along with many others, that we’ve not yet learned to design for the web.
這兩天剛好接觸到都和Apple有關的資訊,一個是2004年執行長Steve Jobs在研討會上很精采的簡報,另一個則是看到有人居然在做[[2006 Macworld大會的線上現場轉播與翻譯|http://xuite.tw/MWSF]](實在是太拼了啊@_@)。印象最深刻的都是關於蘋果電腦未來將使用Intel CPU的發展,側面的訊息則是再次暗示「Mac OS是世界上最好的作業系統,即使在PC世界中也一樣」,還有,得到蘋果青睞的Intel處理器(而不是AMD),其效能是否再次得到大大的背書?\n\n我個人對前一種暗示還算是歡迎,畢竟用過Mac OS(不管是9還是10)的人都會有比XP更XP的體驗,或許以後在PC上真的可以快樂地用Mac OS了?^^<html><a href="#註">註</a></html>^^但是對於第二種暗示,就覺得「啊,AMD又變成次級選擇了」,總是有點遺憾;不過算了,反正我現在是用AMD K7 Athlon XP的CPU,而且還有超頻到,用得頗穩定,當初只花一萬一就升級完畢,光這點就很感謝神了。AMD該要繼續好好努力的吧。\n\n不過,不管怎樣,兩個暗示都代表著「more money」,因為就算要在PC上合法地用Mac OS的各種軟體,也是通通要用錢堆起來的——意味著你必須要是得到經濟祝福的有薪階級而非苦哈哈的窮學生,才能讓一家老小開心地成為優質作業系統的享用者——另外,假如真的要買原廠的全新蘋果電腦,有Intel處理器在,勢必沒辦法像現在的PC一樣,用AMD處理器壓低成本。所以,要追求蘋果的全套優質服務,可是一點捷徑都沒有的啊~--20060111 9:53\n\n^^<html><a name="註">註</a></html>^^Windows ''XP''的命名由來是希望讓使用者得到全新的「eXPerience」。
*這兩天看CNET的新聞時,有看到類似Java和PHP之爭之類的文章,才知道原來目前的程式語言有分成「描述式語言」和另外一類(叫什麼名字啊?),至於兩者有何差異,我當然是沒什麼概念。而且「描述式語言」包括PHP、JavaScript、Python這些據說比較易學易用的語言,這我是大概知道,但到底是怎麼個「描述」法可又沒有頭緒。光看它的英文名稱「scripting language」,乖乖,「script」不是「腳本」嗎?「scripting」真的可以翻成「描述」嗎?不會是跟「description」搞混了吧?我心中打下了一個大大的問號。\n*所以,我決定要找些資料搞清楚這東西。當然,一切從Google開始,而且直接找英文資料。(待續)--20060112 19:17\n**這是我的第一站:[[Scripting languages|http://www.softpanorama.org/Scripting/index.shtml]],它摘錄了大量網路上的討論,讓人可以逐漸了解scripting language到底是什麼東東。\n###喔,首先,所以scripting language和programming language就是對立的兩個類別嗎!後者才算「真正的程式語言」,是這樣分的嗎?\n###另一種分法我比較能理解:scripting和compiled,後者就是一般需要編譯才能執行的語言;那麼這個角度來看,scripting language就應該是我們所稱的「直譯式語言」。\n###歌頌PHP迅速、易學的就跳過,我只需要知道「scripting language」的概念核心而已。\n***……實在太混亂了,我決定先跳到這篇文章:[[A Slightly Skeptical View on Scripting Languages|http://www.softpanorama.org/Articles/a_slightly_skeptical_view_on_scripting_languages.shtml]]\n####嗯,首先我得到一個印象:它是Open Source運動的最愛。\n****好多喔……下次再看完吧。或許直接問TrueStar哥會更快?--20:46\n**臨走之前,先留下[[Scripting language - Wikipedia, the free encyclopedia|http://en.wikipedia.org/wiki/Scripting_language]]--21:06
從去年年底到現在,一直都還在注意著TiddlyWiki和ZiddlyWiki的發展,只是一直不想花時間去記錄些什麼就是了。但是剛剛看到[[ZiddlyWiki上週五新推出的「CommentPlugin」|http://ziddlywiki.org/forum#CommentPlugin]],覺得實在太驚奇了,值得寫一下——因為有了這個擴充套件,能夠讓線上使用者們直接在ZiddlyWiki的記事下面附加一般blog-like的「迴響」或是「回應」,這個擴充套件目前的功能非常齊全,一則則的迴響會自動被引用在原文下面,而且可以巢狀顯示彼此的關係,另外也會自動加上回應人的id以及原文,作為該則回應的tag。光是目前這樣子已經很不錯用了,而進一步的功能例如限定某些類別的記事才能被回應,則還在建議和改進中,值得期待!
果然和繁體華文狀態下的功能有不少的差別。是翻譯的人手不夠嗎???--20060124 19:45
TiddlyWiki 2.0的beta從去年十一月左右就一直在進行當中,ZiddlyWiki也不斷在預備著。一月初的時候終於迎接到TW/ZW進入2.0的新時代,而今天我也終於鼓起勇氣嘗試新版了。除了[[TiddlyWiki之美2|/TWZW]]是在2.0從頭開始建立的新文件之外,舊的「資訊隨筆」還有「微笑、語言、歷史」,即將在等一下進行reload之後就知道效果囉……咚咚咚……(不過有趣的是,現在還沒有重新載入、還是1.2.39的樣子的時候,透過AJAX技術還是可以修改文件,不受影響呢!)--20060125 0:53\n----\n*重新載入以後,發現最大的影響果然還是模板改變導致CSS套用上的走樣,像{{{header}}}這塊裡面就出現兩個新的div:{{{headerShadow}}}和{{{headerForeground}}},我還不太知道它們的作用分別是什麼(因為裡面都有SiteTitle和SiteSubtitle)。\n*另外,之前的介面翻譯js檔,我已經先停用了,這樣才能夠先徹底使用新版的sidebar,不致於被翻譯檔中的shadow tiddler蓋掉。\n*嗚嗚,有沒有現成的2.0相容樣式表啊~我懶得自己改了~--20060125 0:42\n----\n*更慘的是升級的時候,tiddler最大的屬性改變是增加了一個「created」,結果不知道為什麼會出現「modified」沒有property的問題,而無法儲存編輯,所以現在只好先換回1.2.39了……--20060125 2:13\n*不過這也證明了ZiddlyWiki的另一大優點:把程式和tiddler資料分開存放,不只可以快速升級,還可以順利降回舊的版本!\n----\n*再換2.0.3.2試試。\n**修改已有的記事以後儲存,好像神祕地解決了。\n**但新增的記事還是一樣會有問題的樣子。\n***==用爛IE好像也沒有用。==可惡,居然是可以的。所以新增記事、儲存在Firefox 1.0.6下有問題--20060126 7:12\n*Tim Morgan叫我開個管理員帳號給他看看,所以必須<<slider chkSliderCallTimForHelp CallTimForHelp "請原作者出馬囉!!!">>--20060126 9:03\n*他試了以後是可以的,不知道他是用哪一款瀏覽器?不會是Firefox 1.5吧?\n**結果我裝了Firefox 1.5以後,還真的可以耶~嗚~我還不要那麼快進入麻煩的Firefox升級啦~--20060126 12:38\n*和Tim來來回回八、九封信,還有我也試了一天以後,發現不管用Firefox 1.0.6或1.5,只要是用新的profile,不管是不是安全模式,都能正常運作;反倒是我一直在用的那個profile(傳說中的「八十個套件profile」![img[吐舌|http://messenger.msn.com/MMM2004-08-11_11.52/Resource/emoticons/tongue_smile.gif]]),不管怎麼樣就是會出錯就對了。唉唉,T/ZiddlyWiki一定需要Firefox才能好好運作,想不到T/ZiddlyWiki要升級,竟然也會連帶需要Firefox升級才行,嗚嗚。--20060127 2:40\n----\n找到罪魁禍首了啦!!!不是套件的問題(因為全部停用,或是用安全模式,問題還是在),也不是{{{pref.js}}}裡面有什麼廢渣,而是在舊的profile當中的某個cookie裡面;把cookies排除掉,不要覆蓋到新的profile中,這下終於可以動了,感謝神!!!嗚嗚嗚~真不知道拜託了幾次,不過最後神還是按照期盼的達成了,哈利路亞![img[大哭|http://messenger.msn.com/MMM2004-08-11_11.52/Resource/emoticons/cry_smile.gif]]--20060129 21:57\n*更精細一點的話,其實是{{{chkForceMinorEdit}}}這個cookie,怪不得會在save的時候造成問題!能徹底找到問題所在,真的是神給的靈感耶[img[:o|http://messenger.msn.com/MMM2004-08-11_11.52/Resource/emoticons/omg_smile.gif]]\n!新的問題\n用Firefox 1.5的新profile時,ZW的某些記事內容會無法顯示出來,不論是1.2.39的或是2.0.x的都一樣。\n*Firefox 1.0.6不會有這個問題\n*再開全新的profile給Firefox 1.5用,也沒事\n*所以應該是某個Firefox 1.5的擴充套件惹禍,開始第二次的調查……--20060129 22:56\n*果然又是Linkification的問題!!!一找就找到了!
[[geek ramblings » Firefox Inline Autocomplete|http://dougal.gunters.org/blog/2004/12/15/firefox-inline-autocomplete]]\n"To turn on inline autocomplete in the Firefox web browser...\n\n 1. Enter about:config in the URL field\n 2. Right-click on the page and create a new Boolean value\n 3. Enter browser.urlbar.autoFill as the preference name (note, case-sensitive: 'F', not 'f')\n 4. Set the value to true"
之前想說茲事體大,又想等大部份的擴充套件都支援1.5版以後再動手。但是,現在因為[[ZiddlyWiki 2.0的一些問題|升級ZiddlyWiki到2.0.3.1]],恐怕不得不忍痛拋棄現有的profile;那既然要重建,而且Firefox 1.5也是我既定的目標,那就趁今天除夕,來除舊佈新一下吧!--20060128 18:32\n*先把相容於1.5的套件都下載完畢(好像花了快一個小時XD)(而且有的根本不知道合不合用……)\n*然後切換去1.5開始經營新的profile吧!(目前1.5是安裝在1.0.6之外的)\n----\n*有些套件不再需要使用,有的不想再用,所以最後我帶了62個套件進新的profile中。(78→62[img[天使|http://messenger.msn.com/MMM2004-08-11_11.52/Resource/emoticons/angel_smile.gif]])\n*把舊profile的設定覆蓋到新的當中並沒有預期的恐怖,現在的Firefox似乎不是以前0.9.x到1.0長期過渡那時候那麼不穩定了,覆蓋上去以後,除了有少數設定跑掉、需要重設以外,大致上用起來就像1.0.6的舊profile一樣!而且這些相容於1.5的新版套件功能都華麗、強大更多了,感覺非常舒服!\n*我的電腦跑1.5似乎沒有一般網友抱怨1.5耗資源的問題那麼嚴重。當然啦,下週1.5.0.1出來的時候,一定還是要用一下的啦!也許我就用它徹底取代1.0.6,告別1.0時代也說不定!--20060129 22:24\n*好了,ZiddlyWiki的執行問題大約都解決了(因為後來還跑出第二個問題),現在就差Menu Editor的設定要怎樣弄過來了吧!然後就可以開始換漂漂亮亮的佈景主題囉!!!\n----\n*今天發現會用到右鍵選單的套件,它們在右鍵選單裡都跑不出來,又重建了profile兩次(越來越熟練了:p因為舊的設定蓋上去越來越容易,也越安全了),終於發現是Menu Editor還有CuteMenu 2這兩個套件惹的禍!把它們解決以後,Firefox 1.5的profile才算真正完美,太棒了。--20060130 22:46\n----\n*然後現在確定1.5用得差不多以後,就要把1.0.6移除掉了——那好像是去年八月中開始用的(當然用1.0的歷史更久啦,超過一年)。還是謹慎一點,先做好相關備份。舊的profile大約有十三個月左右的歷史,至今也告功成身退囉!它的設定和精神已經在新的profile中順暢使用了:)\n*剛發現,移除舊版(而不是覆蓋安裝)Firefox的時候{{{searchplugin}}}和{{{plugin}}}兩個目錄是會留下來的,但裝上新版的時候舊的search plugins還是會被全部清空,換上新的(莫非是1.5版硬是要讓Yahoo!搜尋露一下臉就對了?)--20060131 8:48
今天才算正式開始用(前兩天是為了試ZiddlyWiki)--20060128\n!本身\n*不管是啟動或是安裝套件似乎都更快了!\n*新的profile預設用Yahoo!當首頁及搜尋引擎當然是很討厭。\n!擴充套件\n*MR Local Install 4.0變得好強大,好嚇人,它到底要吃進多少個其他套件的功能啊?\n**「重新啟動Firefox」的選項真的很方便,在切換佈景主題之後會詢問要不要立刻重新啟動,平常隨時隨地想快速重新啟動的時候也可以用。不過缺點是重新啟動以後的Firefox在選單上或Sage的圖示上會有一點不正常。\n*Sage確認各個RSS feed有無更新的速度變得非常快了!\n!問題\n*Fusion會造成Livemark的功能失效,因為Livemark的圖示現在移到網址列上去了。只好把Fusion移掉啦!沒有新版,嗚嗚~
{{{\n.split("%分隔字元%")[n]\n}}}\n!說明\n比方說現在有個字串是「Mary has a lamb」,要怎樣提取一個一個單字呢?這時我們就發現每個單字之間都有一個空格隔開,所以我們就這麼寫:\n{{{\nvar maryLamb = "Mary has a lamb";\nvar wordsArray = maryLamb.split(" ");\n}}}\n這樣的話我們就可以得到一個叫作{{{wordsArray}}}的陣列,它是把「Mary has a lamb」這個字串用空格切開來的,所以這個陣列會有四項:{{{wordsArray[0]}}}的值就是「Mary」,{{{wordsArray[1]}}}的值就是「has」,依此類推。\n!參考資料\n[[JavaScript: Strings: Split|http://www.pageresource.com/jscript/jstring2.htm]]
{{{\n.slice(x[, y])\n}}}\n!說明\n有一個字串我們想給它掐頭去尾的時候,就用{{{slice}}}這個method。\n*給定{{{x}}}時,表示切掉第幾個字元以前的部份,像如果有個字串{{{r}}}叫作「JavaScript真好用」的時候,{{{r.slice(3)}}}就會讓我們得到「aScript真好用」,也就是把第3個字元以前(含第3個)的部份切掉。\n*{{{y}}}值不指定的時候,像上項的情形,就會把頭{{{x}}}個字元切掉,然後保留一直到最後的部份;所以{{{y}}}值是選擇性的。但如果指定的話,就可以設定切尾值。\n**{{{y}}}值為正數,如{{{r.slice(3,7)}}},表示前3個不要,4~7是要的,下限就是從前面數來第7個字元,然後8以後不要。於是就得到「aScr」。\n**{{{y}}}值為負數,如{{{r.slice(3,-4)}}},則表示下限要用倒數的方式,從最後面數4個不要,所以就把「Jav」和「t真好用」去掉,剩下「aScrip」。\n!參考資料\n[[DevGuru JavaScript METHOD: String::slice|http://www.devguru.com/Technologies/ecmascript/quickref/string_slice.html]]
*把ZiddlyWiki的CommentPlugin修改成華文的時候,發現改標題的方式不同,所以本來翻譯只是代換字串、頂多調一下語序而已,這下又花了時間研究了兩個處理字串的method,筆記如下:<<slider chkSliderSplit [[split (method)]] split 把字串分節>>、<<slider chkSliderSlice [[slice (method)]] slice 把字串掐頭去尾>>。至於為什麼需要用到這兩個,詳情請見[[華文化CommentPlugin的說明|/TiddlyZiddly#CommentPluginMandarin]]。--20060131 1:36
新的TiddlyWiki/ZiddlyWiki介紹推廣站創設了。可以設定的東西太多、可以說明、可以教導的地方太多、可以利用的資源太多,這麼自由的一樣東西,反而讓人不知該從何下手是好,這是很可怕的魔咒吧。
!找網頁\n!!網址列、搜尋列\n*在網址列輸入,就會自動搜尋瀏覽記錄並完成整行網址。^^//需要:[[加入about:config參數|讓Firefox可以自動完成網址列輸入的東西]]//^^\n*網址列、搜尋列輸入完畢\n**^^//若有安裝[[Tab Mix Plus]]//^^\n***按Enter開到新分頁\n***^^0.3以後^^按Alt+Enter開在本頁
今天推出,之前就聽說它會解決所謂「記憶體漏洩」(memory leak,也就是好像有無底洞一直在吸記憶體一樣;不過可能我電腦夠快,所以之前在用1.5的時候沒有太大的感覺)的問題,所以一出現自動更新的畫面時,就裝啦。\n[img[Firefox 1.5的升級對話窗|http://static.flickr.com/38/94506615_3447ef3e28.jpg?v=0]]經驗如下:\n!升級報告\n#接受自動更新,下載「部份更新檔」(也就是只做小部份的檔案更新,約600多k就可以搞定)\n#重新啟動,想不到這個步驟居然會失敗了,只好下載完整更新檔(等於是重新安裝一次)。\n#重新啟動,檢查套件相容性及更新套件\n#結果有些套件可能是從1.0.x到1.5的時候就已經是不相容的(靠著Local Install整合Nightly Tester's Tools可以在1.5上使用),這次還是被偵測出來不相容,結果被停用\n#用Local Install的「make all compatible」功能,讓它們能夠相容\n#重新啟動,所有套件都回來了。唯一出問題的是Sage變成空白了= =。\n**重新安裝Sage之後恢復正常,但是換成Sage的RSS圖示變成空白了,推測是因為這次套件裝在有支援Sage的佈景主題之後,所以圖示就被重設了XD\n**所以我們勢必得再切換一下佈景主題吧,我想是這樣的orz\n**結果並沒有耶。到底是要怎樣啊!!!\n**後來先「關閉」再重開Firefox,不是用Local Install的「重新啟動」功能以後一切就正常了。看來這個「重新啟動」的功能方便是方便,不過難免忙中有錯,套件一多,重新啟動的時間不夠,還是會出點小紕漏。\n!優點\n總是要說說好處,不然更新過程中小小的不順利就不值得了。\n*有人覺得Firefox啟動的速度變更快了,我似乎也有這種感覺。從我裝1.0.6、82個套件時的20至30秒左右,到1.5、62個套件時的15至20秒,現在進入1.5.0.1,感覺最多10秒就啟動完畢,快的時候6、7秒畫面已經出現,這簡直是過去1.0.x的時代無法想像的!
[[A List Apart: Articles: Home Page Goals|http://www.alistapart.com/articles/homepagegoals]]\n\n主要的幾點原則是:\n#讓人家一目瞭然就知道這個站是幹嘛的\n#如果使用者已經來過,或常常來,就立刻讓他們看到他們所需要的(也就是「不要擋路」)<<br>>以Flickr為例,若是初次來訪或是未登入的用戶,看到的可能是最具特色的鏈結和內容,但若是註冊用戶一連上首頁,馬上就以該用戶自己的內容為主,不需要先連到自己的用戶頁面之類的,就已經可以存取與自己最相關、最需要的內容,達到高度客製化。\n#把最新內容秀出來<<br>>這個相信已經是金科玉律了;也因此,大多數的blog系統都很重視首頁顯示最新文章的安排,連[T/Z]iddlyWiki都有WeblogPlugin或RecentPlugin這樣的東西。\n#要提供可靠而且遍及全站的導覽鏈結<<br>>意思大概是說讓使用者可以從首頁就能掌握全站的資訊,準確地找到自己要去的地方
*[[中時電子報:引用新聞不付費?報業對上搜尋網站|http://news.chinatimes.com/Chinatimes/newslist/newslist-content/0,3546,120501+122006020400294,00.html?source=rss]]\n*[[中時電子報:「打不過他們,就加入他們」部分媒體因應之道|http://news.chinatimes.com/Chinatimes/newslist/newslist-content/0,3546,120501+122006020400295,00.html?source=rss]]\n\n這兩則新聞並不是用Google News看到的,而是因為我有訂閱中時電子報的RSS,今天難得開一次來看而已。不過重點是,站在使用者的立場來說,新式的新聞整理與資訊收集服務本來就比傳統而複雜的媒體網站好使用得多,而且按照主題收集、統整各種新聞來源之後,讀者們反而可以對同一則新聞在比較之後得到更全面的認識,而不致被任何單一媒體牽著走。\n\n媒體們莫因為新興的網路新聞服務看似瓜分了入口網站的流量而想要向網路服務業者「扳回一城」,說實在的,要不是因為Google News的引導,很多媒體我連它們的網站在哪都不知道呢!
Firefox支援的新規格不少,除了引人注目的SVG之外,一些CSS3的版面屬性也在其列,最讓人驚艷的就是分欄式段落了。\n\n在去年底1.5要推出時我雖然很高興地期待這個功能來臨,不過因為都沒有升級,所以也不曾親眼見到效果。直到今天,在看[[這篇|http://weblogs.mozillazine.org/roc/archives/2006/02/post_1.html]]的時候,才發現分欄式段落的效果就出現在我眼前;用IE Tab切過去看,IE 6.0果然還沒有支援。\n\n我很好奇:那IE 7會支援嗎?\n\n以下附上真相圖集:\n這是Firefox 1.5.0.1的效果\n[img[Columns on Firefox 1.5|http://static.flickr.com/36/99922922_8093777756.jpg?v=0]]\n然後是無能的IE 6.0\n[img[Columns on IE 6.0|http://static.flickr.com/31/99922909_d2c04d3a08.jpg?v=0]]
才抱怨一般人(台灣)對wiki幾乎一無所知呢,人家已經有了新花樣:[[wikiCalc Alpha Test Home|http://www.softwaregarden.com/wkcalpha/]]\n\n相關新聞見:[[Taiwan.CNET.com : 新聞專區 : 企業軟體 : 軟體先驅結合wiki與試算表|http://taiwan.cnet.com/news/software/0,2000064574,20104527,00.htm]]
這裡有53張screenshot:[[Windows Vista Build 5308|http://www.pcmag.com/slideshow/0,1206,pg=0&s=26945&a=171997,00.asp]]\n\n說真的,花俏、漂亮到不行,對我這種視覺系的使用者來說有很強的吸引力(不過推出華文版的時候,如果還是沿用「新細明體」的話,那還是算了,免得傷眼睛──拜託!學一下人家Mac OS X的華文字型好不好?如果Vista真的已經在圖形介面的呈現上更下工夫的話,他們也得讓華文字型更細緻才行)。我又想起我之前一直想著「拒絕升級Vista」的念頭(說真的升級也是很麻煩的事,而且我現在的XP經營得也算不錯),到時候Vista出來的時候,我會不會難以抗拒它的誘惑,還是弄了一片來裝呢?那種「哇,看起好漂亮,而且似乎好貼心、好方便」的感覺實在很像鴉片,會主管人的。\n\n誰趕快揭露一下它的漏洞,戳破Vista的光環?其實只要告訴我它在執行程式時當機頻率多高,還有安全性並沒有實質改善啦……等等,我就能繼續死硬地反微軟下去了(天使之音:「有種你就解除安裝你現在用的XP啊……」「是,我也想啦,不過最近非趕論文不可,沒有心思打造Linux平台,okay?」)。[img[天使|http://messenger.msn.com/MMM2004-08-11_11.52/Resource/emoticons/angel_smile.gif]]--20060223 7:57\n----\n補充:聽說Vista系統字型會用黑體,而且預設反鋸齒(也就是不會有毛邊),總算可以脫離新細明體了,感謝 神!
號稱可以自動產生Web 2.0形式網站的程式,也就是說,為新網站取個名字,選個色彩,然後按「Generate」,就會讓你馬上擁有自己的Web 2.0網站!\n\n所以我來試試看……→[[我的Web 2.0服務:Hroedebeohrt|http://www.web20generator.com/generated.aspx?l=FFFFFF&b=CCFF99&g=66CCCC&n=Hroedebeohrt]]\n\n很搞笑吧?聽聽作者說的:\n>Rounded corners, gradients, XHTML and CSS, a color scheme to make your eyes vomit, a trendy 'badge', Google Ads, whitespace galore and a big-ass dorky font. Pop in some AJAX and watch squillions of dollars roll in.\n可說是嘲諷,不過也的確點出了一些時下網站的常見特色,看到「圓角」、「Google Ads」、「加一些AJAX就能讓銀子滾進來」這幾句時不禁讓人捧腹啊[img[大笑|http://messenger.msn.com/MMM2004-08-11_11.52/Resource/emoticons/teeth_smile.gif]]
''GUI'': ''G''raphics ''U''ser ''I''nterface\n*掌管視窗、按鈕、文字等視覺元件\n*Windows是綁在系統核心\n*GNU/Linux的核心則沒有內含圖形介面,是靠[[X Window System]]
!簡介\n*目前正式名稱叫「X11 Release 6」\n*事實上屬於圖形介面的底層基礎建設\n**上面還可以再放GNOME、KDE之類的\n**負責\n***螢幕上字型、線條、圖像的繪製呈現\n***接收處理來自鍵盤及滑鼠的訊號\n***處理網路多使用者以及遠端登入\n*跨平台(Windows版叫作Cygwin)\n!結構\n*每一個X server掌管一個螢幕(輸出)及一個鍵盤(輸入)元件\n**不過這裡剛好是一般人認知中的「終端機」(terminal)範疇\n*而連到該終端機(X server)這組螢幕與鍵盤的每個程式,則都是X client\n**這些程式可能是在本機執行中,也可能位在別的主機上\n!運作\n*可以直接選擇連線到不同的主機\n*只要一台電腦上裝有X Server,就能管理網路上的其他電腦\n!參考閱讀\n*[[Free Software Magazine - What is X?|http://www.freesoftwaremagazine.com/free_issues/issue_10/what_is_x/index_p1.html]]
*[[Red Hat]]\n**[[Fedora Core]]\n*[[Debian]]\n**[[Ubuntu]]\n**[[Knoppix]]\n*[[SuSE]]\n*[[Mandriva]]
為了跟高中部的新生聯絡,原本剛剛決定把一直不太想裝的Yahoo!奇摩即時通裝上電腦,想說應該非常順利,然而短短十分鐘之內居然當了三次:\n#安裝程式要選瀏覽路徑的時候,對話窗就不曉得跑哪去,也沒有反應了\n#裝好了第一次啟動,出現提示問我說要不要預設開啟時進入奇摩服務的頁面,我選否,然後就停住了\n#重新開一次,馬上又當掉\n加上,這軟體實在有夠肥大(18MB),還有它在安裝過程當中不知道為什麼好像對Windows系統動了很多手腳,總讓人覺得毛毛的。算了!跟高中生聯絡又不是只有網路而已,還是可以打電話啊。馬上再把Yahoo!奇摩即時通砍掉。--20060228 22:39
http://linshi.twbbs.org/blog/\n我的blog:http://linshi.twbbs.org/blog/MilchFlasche\n*一個由linshi自己修改pLog而成的blog系統,並提供1500人為上限的免費空間。\n*站長理想性高,很多功能以及對網路標準的支援都比當時的主流大站「無名小站」快\n*近乎完全自由\n*我很幸運地在200411左右很早卡到[[位子|http://linshi.twbbs.org/blog/MilchFlasche]]。\n*(曾經)有頗密切溫馨的社群交流\n*2005春天開始linshi當兵,偶有不穩\n*但如今(2006春)似乎已經復活!\n*^^@@20060511@@^^這兩天又當機了,讓我真的覺得有必要快點把資料移出來,或許要認真考慮在[[ccTiddly]]上落腳了......
*越來越覺得Norton AntiVirus的全系統掃瞄實在慢得令人受不了,太耗資源,而且把全機幾十萬個檔案都掃過也實在很沒效率。在看過教會的電腦裝了AVG Free以後,覺得它應該是比較有效率的病毒偵測軟體,所以就裝了。\n**不過剛安裝好,開始偵測以後,因為同時間Norton AntiVirus還是開著的,似乎就對系統造成了嚴重的負荷和問題,真令人擔心……/汗/--20060303 22:15\n**但是讓它好好把系統掃瞄跑一遍的時候,倒是出現很多過去Norton沒掃出來的特洛伊木馬……嗯……非常好……22:50\n----\n*砍了Norton AntiVirus以後,單單用AVG,問題就通通都沒了,開機速度也變快了,哈利路亞!Norton AntiVirus真是耗資源啊。\n*只是掃瞄電子郵件,可能因為右下角的訊息視窗有顯示每一封掃瞄的狀況,也許就比Norton AntiVirus慢了那麼一瞇瞇。但還是可以接受。--20060305 22:26
我用Firefox的Sage套件訂閱了很多blog——或者說只要提供了RSS feed的網站,我都訂閱起來了,因為這樣比起單單把那網站加進書籤當中,還更能掌握動態和更新。\n\n在這麼多的網站當中,有一個中國熱愛語言學的學生(不知道成功考上研究所了嗎?:))GnuDoyng利用MSN Space服務所建立的「[[Language Utopia|http://spaces.msn.com/gnudoyng/PersonalSpace.aspx]]」(原名「Language Paradise」),探討許多語言多樣性、母語保存及閩東語相關的議題,是個純真、熱情又紮實的好站。我也把它的RSS feed給收錄起來了。\n\n不料,從幾個月之前開始,每次Sage要偵測他的站有沒有更新時,總顯示「XML分析錯誤」,我起初還以為是因為站主在考研究所所以關掉了,及至前一陣子才知道還在運作中。結果最近再連過去,要按Firefox的RSS圖示要收錄feed時,居然發現是feed的問題——它是無效的。如果我們循線瀏覽[[MSN Space所提供的RSS服務頁面|http://spaces.msn.com/gnudoyng/feed.rss]],會發現這時候Firefox根本偵測不出這個頁面有任何合格RSS feed的跡象,所以根本不會出現RSS圖示!\n\n→咦,寫到一半發現又出現了,好像自打嘴巴,先收起來吧。XD --20060307 15:22
為了了解MediaWiki的運作,從20050226開始,透過架站包EasyPHP在自己的機器上把MediaWiki建立起來,取名叫「Robopedia」。因為不打算真的用家裡的電腦架站(要日夜開機),所以完完全全只有自己使用。\n\n但是,現在我有TiddlyWiki和ZiddlyWiki了,不管是作為個人的wiki筆記,或是可供網上發聲的平台,都早已有了解決方案;而Robopedia也在20050620之後就沒有任何更新(差不多三個星期以後,我就發現了TiddlyWiki了)。所以已經沒有必要為了它而多維持一套常駐Apache+MySQL+PHP(我不是LAMP,而是WAMP:P)耗費系統資源。因此今晚來進行資料搬遷工作:\n*IT類的內容搬到這裡。\n*語言類的內容搬到一個名叫Robertionary的TiddlyWiki文件,之後也許會上線。\n*其他搬到[[微笑‧語言‧歷史|/Smile]]。\n\n以後,要更了解MediaWiki的話,就到Moztw Wiki及Wikipedia去吧!
*Zhàng HTML chérngwéi chy̱tài .doc te̊r wérntjèn kérshr̀.\n*Sōushýn jīn·ỳe te̊r sōushýn ji̱nchíng\n*Sōushýn ku̱angpūo tjí tìenshr̀ tjémù nèizhóng te̊r sōushýn ji̱nchíng--20050326
*'''Object Oriented Programming,OOP'''\n*一種程式設計技巧\n*圍繞使用者為中心\n*簡化程式設計的概念\n*三大要素:'''''object'''''、'''''method'''''、'''''properties'''''\n*;object : 存放資訊的黑盒子\n**網頁上任何物件以及文件本身都可以是object\n***e.g. "<code>document.bgcolor</code>"\n***e.g. "<code>document.entryform.password.value</code>"(「文件中名為entryform表單中名為password輸入區的值」)\n*;method : 限制存取資訊的方式\n**每種object可以做的事都不同\n***e.g. 開啟新文件:<code>document.open()</code>→<code>open()</code>即為method\n*;properties : 可直接存取資訊的部份\n**每個object都有properties,即關於其之資訊\n***e.g. "<code>document.bgcolor=red</code>"\n;事件: 觸發函數的機制\n*e.g. 「<code>onClick="run_my_function()"</code>」\n*包括<code>OnClick, OnMouseOver, OnMouseOut, OnFocus, OnBlur, OnLoad, and OnUnload</code>\n*可由表單物件開啟
*以<code><form>……</form></code>為首尾\n;文字輸入區:\n*一定要有<code>name</code>及<code>type</code>\n*;name: 用來指定給javascript\n*;type: 用來決定物件是文字輸入區、按鈕或是勾選框\n**e.g. <code><input name="text1" type=text></code>\n;按鈕: 告訴javascript要執行某個函數\n*一定要有<code>name、type、value、onClick</code>\n*;value: 按鈕上面顯示的文字\n*;onClick: 指定函數的名稱以及資料來源的文字區\n**e.g. <code><input name="submit" type=button value="Show Me" onClick="MsgBox(form.text1.value)"></code>\n***"<code>form.text1.value</code>"指定「form表單中text1文字區的值(value)」
*[[Mozilla Taiwan 討論區: AJAX與瀏覽器的上/下一頁(或者該說RIA vs. URI?)|http://forum.moztw.org/viewtopic.php?p=68433#68433]]<html><iframe src="http://forum.moztw.org/viewtopic.php?p=68433#68433" style="width:80%" /></html>
*CGI無法將介面設計與伺服器端的程式運作分開\n*PHP、JSP、ASP則能夠讓網頁的呈現標記與程式運作分離\n*下一代的新標準:XForms\n!參考資料\n*[[Introduction to XForms: XML Powered Web Forms > Background|http://www.awprofessional.com/articles/article.asp?p=102606&rl=1]]
*用到沒有滾輪的古代滑鼠,可以再次深刻體會滾輪的方便。^^因為昨天教會的滾輪滑鼠壞掉,所以拿家裡舊的Logitech三鍵滑鼠來換。^^\n**沒有滾輪,就得用視窗的捲軸捲頁。\n**沒有滾輪,Firefox All-in-One Gesture超好用的「滾輪導覽」功能也完全消失。
*老實說,AJAX介面、匯入/匯出書籤、同步書籤,都是我非常喜歡甚至需要的功能,為什麼還沒有其他Web 2.0的服務做出來呢?我不想用微軟的東西啊!!!:'(\n*不過它還是建立在Windows笨拙的「我的最愛」URL檔上。--20060422 0:10
!介紹\n<<<\n|!作者|missmomo0911|\n|!原文|http://forum.moztw.org/viewtopic.php?p=73404#73385|\nLinux繪圖成像技術Xgl簡介:\nXgl是針對Linux桌上系統的新核心成像技術,它利用了目前相當普遍的加速3D成像硬體.圖形特效包括調整視窗透明度,類似MaxOS X的Expose等特效,還有可旋轉的3D桌面,果凍效果等.由於所有都是以OpenGL Render的,所以無論是遊戲,影片等都可以顯示出特效.\n\nXgl的中文相關新聞:\nhttp://cpro.com.tw/channel/news/content/index.php?news_id=10266\nXgl的中文維基百科(Wikipedia):\nhttp://zh.wikipedia.org/wiki/Xgl\nXGL在YouTube網站上的一些影片:\nhttp://www.youtube.com/results?search=XGL&search_type=search_videos&search=Search\n\nKororaa Xgl Demo LiveCD(Version 0.2)下載相關連結:\n\niso映像檔FTP下載點(台灣下載點):\nftp://ftp.cs.pu.edu.tw/Linux/Kororaa/kororaa-xgl-livecd-0.2.iso\niso映像檔HTTP下載點(台灣下載點):\nhttp://ftp.cs.pu.edu.tw/Linux/Kororaa/kororaa-xgl-livecd-0.2.iso\nKororaa官方下載頁面:\nhttp://kororaa.org/static.php?page=static060318-181203\nKororaa官方網站:\nhttp://kororaa.org/\n\nKororaa Xgl Demo LiveCD(Version 0.2)安裝及使用方法簡介:\n\n(註1:測試電腦-->PC.註2:此Kororaa Linux作業系統是使用光碟開機執行(也就是LiveCD),所以不會使用到硬碟,請不用擔心硬碟中的作業系統或資料會遺失,請安心使用.)\n\n請至FTP或HTTP下載點下載iso映像檔,下載下來之後請用燒錄軟體將iso映像檔燒錄至光碟內,燒錄完成後請將光碟放入光碟機中,接著重新開機(開機後到BISO設定光碟開機,即可使用.(註:如果電腦本來就可以使用光碟開機的話,可不必到BISO設定.)\n開機後會自動讀取光碟,之後螢幕上會顯示boot:,此時按下enter鍵,等待一段時間後,會自動進入桌面.進入桌面後會看到桌面上有個 "XGL Key Shortcuts.html",這個文件檔案是XGL的操作快捷鍵說明檔,游標移到檔案上點滑鼠左鍵兩下即可開啟查閱.當然也可以開始使用這個 Kororaa Linux作業系統啦!\n\nXgl操作快捷鍵說明(雖然進去之後桌面上有,不過是英文的,這裡翻成中文"大概"說明一下):\n\nCtrl+Alt+按住滑鼠左鍵,移動滑鼠---------->桌面變成3D環境,可任意旋轉六面體,預覽及切換桌面\nAlt+Tab--->桌面上有多個視窗時可進行視窗預覽切換\nF12------->桌面上有多個視窗時視窗會自動排列,游標移到視窗上點滑鼠左鍵會將選取視窗置換到桌面最上層\nCtrl+Shift+Alt+鍵盤上的左或右方向鍵------->選取視窗後,使用此快捷鍵會使得視窗隨著切換桌面移動\n視窗標題欄上按住滑鼠左鍵拖曳+Ctrl--------->視窗具有沾黏性\nSuper-Key(即Windows鍵)+按住滑鼠右鍵,移動滑鼠--->快速拉近近看桌面\nSuper-Key(即Windows鍵)+滑鼠滾輪,移動滑鼠------->快速拉近近看桌面,滾輪可調整遠近\nAlt+滑鼠滾輪------>調整選取視窗透明度\nAlt+滑鼠左鍵------>移動選取視窗\nAlt+滑鼠右鍵------>調整選取視窗大小\n\n(註:此篇文章可自由複製修改及使用,由小弟本人(器奇)所編寫,部分內容取材自網路上的資料,如果有錯誤部份或侵權請告知,謝謝)\n<<<
來用用看另一種符合W3C標準的網頁編輯器吧。之前我一直是用Nvu。\n*官網:[[Amaya Home Page|http://www.w3.org/Amaya/]]\n*哇!可以直接編輯ruby耶!--20060428 18:09\n*喔!顯示華文幾乎完全不行,又找不到地方改預設字型。\n**^^@@20060511@@^^有一個很大的問題:它不像Nvu有「about:config」可以設定預設的字型,所以可能會麻煩一些;也許它顯示華文是可以的,但預設字型的設定太貧乏、太西方本位了。\n*和Nvu對CSS的解析也不同。它也並非使用Gecko成像引擎。
ZiddlyWiki已經解決很多問題,不過目前有幾大缺點:\n*free hosting無法提供獨立Zope server,所以無法像Tim Morgan在ziddlywiki.com做自動註冊,嚴重妨礙多人使用及訪客留言(也要留名啊!)的可能性。\n其實想來想去也只有這點比較嚴重,其他的其實還是可以從ZiddlyWiki本身解決。不過我還是希望讓我的線上TiddlyWiki能成為一個健全完整的blog體系,也就是要讓人們可以方便地回應、留言,所以看了「老貓學出版」用[[ccTiddly|http://cctiddly.sourceforge.net/]]架的新版,覺得非常心動(等一下,「老貓學出版」怎麼暫時上不去了?)。\n\n要用ccTiddly,我勢必要有個免費的PHP hosting,所以我先找了這裡:[[Hosting Toolbox|http://hostingtoolbox.blogspot.com/]],這裡介紹很多免費的各種網路空間,然後找到這個:[[HostBigger|http://free.hostbigger.com/]]。過程中也發現免費的Zope hosting比起一般PHP、CGI的hosting實在少得太多了。\n\n嗯,HostBigger申請好了,Gmail那裡也收到通知了,來啟用看看吧。--20060503 9:34\n----\n什麼?一開始就踢到鐵板。它說:\n>Your hosting could not be created so, we removed your account detail from our database. Now you can try again with new signup page. Please try using a differnet username and/or domain. Thank you.\n既然移除掉我的資料了,又為什麼不能用原來的帳號和domain註冊?不會是想釣我的資料吧?--9:37\n----\n下一個嘗試的是這個空間:[[1FreeHost.net - Free hosting, free support. Budget plans from just $2|http://www.1freehost.net/]]--10:18\n*喔......等了幾個小時還是沒收到認證信,寄信給客服系統還被退信,看來不太妙......--19:03\n----\n再下一個嘗試:[[ByetHost.com ◊ Free web Hosting|http://www.byethost.com/freeplans.php]] --19:13\n*喔!這家的申請表單和說明看來有誠意多了,而且一申請完我的Gmail就接到核准通知了!!!--19:18\n*而且今天早上居然還收到信,他們說要從PHP 4更新到PHP 5耶!我的媽呀,這真是太有誠意了。--20060504 5:35\n*ByetHost感覺真的很棒,是真材實料的免費hosting,所以相關的介紹[[另文介紹|ByetHost]]。--5:42\n----\n摸熟了ByetHost以後,準備安裝[[ccTiddly]],先熟讀一下[[ccTiddly官網|http://cctiddly.sourceforge.net/]]上的說明吧!--6:13
*收到認證信囉~<html><a href="http://static.flickr.com/53/140148980_7aa7f87b03_o.png" title="Photo Sharing"><img src="http://static.flickr.com/53/140148980_7aa7f87b03_m.jpg" width="240" height="182" alt="Byethost05" /></a></html>\n*歷史性的第一刻,初次連到我的空間~<html><a href="http://static.flickr.com/55/140149121_8a6ebcf150_o.png"><img src="http://static.flickr.com/55/140149121_8a6ebcf150_m.jpg"/></a></html>\n*歡迎頁面<html><a href="http://static.flickr.com/51/140149100_d33d6342a2_o.png"><img src="http://static.flickr.com/51/140149100_d33d6342a2_m.jpg"/></a></html>\n*有好多教學影片,都是用Flash做的step-by-step教學喔!<html><a href="http://static.flickr.com/52/140149013_35a3135b17_o.png"><img src="http://static.flickr.com/52/140149013_35a3135b17_m.jpg"/></a></html>而且都以Firefox為例,哈哈哈,真是太對味了!<html><a href="http://static.flickr.com/49/140149080_eb7fe5a2b5_o.png"><img src="http://static.flickr.com/49/140149080_eb7fe5a2b5_m.jpg"/></a></html>\n*登入Cpanel後台管理,哇,原來這麼華麗啊!<html><a href="http://static.flickr.com/48/140148967_a9e4509dd4_o.png"><img src="http://static.flickr.com/48/140148967_a9e4509dd4_m.jpg"/></a></html>\n*介面語言有華文,果然是簡體,那不要:(<html><a href="http://static.flickr.com/47/140148928_356d81755f_o.png"><img src="http://static.flickr.com/47/140148928_356d81755f_m.jpg"/></a></html>\n*登入FTP發生530錯誤,不過這可能是FileZilla的問題,先不管好了。\n**原來是我的帳戶名稱輸入錯誤。沒事了。\n*錯誤頁面還可以自訂。<html><a href="http://static.flickr.com/50/140148902_c58a65ff4f_o.png"><img src="http://static.flickr.com/50/140148902_c58a65ff4f_m.jpg"/></a></html>\n*網路介面的File Manager,還有繁體中文介面,真是太好了。<html><a href="http://static.flickr.com/44/140148883_565011985e_o.png"><img src="http://static.flickr.com/44/140148883_565011985e_m.jpg"/></a></html>\n----\n^^@@20060509@@^^不過今天清晨遇到很大的問題:好像是Bram兄去我那裡善意提醒要設定網頁權限,後來我刪了一些多餘的tiddler以後,結果家中的電腦就此和網頁空間失聯,怎麼樣都是顯示error page;ByetHost的客服非常迅速和親切,但問題還是沒有很大的解決。還好,[[網路空間|網路行動空間大帝國]]的好處就是,如果只是一台電腦的問題的話,換一台電腦就好啦!:D\n*^^@@13:17@@^^早上在教會(用中華電信)開是可以的,回家以後用家裡的亞太Cable還是不行;剛打電話給亞太客服,原來他們那邊也看不見。是不是亞太的網域整個被ByetHost他們擋起來了呢?我昨天到底做了什麼啊XD\n^^@@20060512 11:03@@^^等了三天,剛剛又打給亞太客服,其實他們都有記錄我的問題,但也沒有後續處理再主動跟我聯絡,算了。這次的小姐比較暴力,叫我直接把所有的cookie、所有的cache、所有的瀏覽記錄都砍掉,結果問題就解決了。唉~她跟之前的客服先生不同,先想到cookie,也算是蠻屬靈的了!只是這下我的瀏覽記錄都沒了,沒辦法像之前從網址列直接打,會稍稍不方便。\n*我一直說我用Firefox,她還是繼續把我當IE的使用者,真煩。又說「您可以把常用的網頁收成『我的最愛』啊!」廢話!書籤誰不會用啊,只是網址列可以做個輔助,不然書籤一下就堆積如山了好嗎!\n*不過,感謝神,總算解決了。\n----\n^^@@20060513 18:13@@^^剛剛再寄出了客服傳票(support ticket)。按照站方的政策,只要把文字廣告融入網站的設計,就可以把頂頭醜醜的預設廣告移掉囉!希望可以一次成功:p\n^^@@20060514 2:01@@^^耶~客服的sales回信說已經移掉了~這真的是個很棒的虛擬空間服務啊:D
*以PHP和MySQL為基礎\n**為此我申請了一個[[免費PHP空間|ByetHost]],希望可以長久使用囉!\n*特點\n**有完整的版本保存!\n**提供訪客簽名、登入\n*安裝\n##建立MySQL資料庫\n##下載檔案並上傳至網路空間的目錄中\n##編輯{{{/config}}}目錄下的{{{default.php}}},加上資料庫名稱、登入用戶、密碼等等資料\n***不過[[官網上的說明|self@milchflasche.byethost31.com]]不夠仔細,不太好。看來ccTiddly的作者比ZiddlyWiki的作者Tim Morgan更不會寫文件......XD\n##瀏覽{{{index.php}}},進行安裝\n##瞬間就安裝好囉!Hurray!這裡是我的新ccTiddly主站:http://milchflasche.byethost31.com/index.php [img[ccTiddly01|http://static.flickr.com/47/140148835_cea96fdcc6.jpg?v=0]]\n*匯入既有的TiddlyWiki文件\n**這是當然一定要的,不然又得萬丈高樓平地起。\n**不過使用{{{import.php}}}卻毫無頭緒,作者大人啊,你可以不可以再寫清楚一點......XD\n***有了,到了晚上,收到作者coolcold的回覆,原來那個textarea是用來貼tiddler原始碼的,然後會被解析出標題、作者、內容、修改日期等資料,再予以匯入。不過目前匯入的時候,雙引號{{{"}}}都會被解析錯誤,前面又被多加上Regexp正規表示式的迴避字元{{{\s}}},所以還不太能用。--20060504 23:27\n***好了!經過在SourceForge的論壇上向作者反映以後,作者不到一天就修改好新版的{{{import.php}}},經過測試以後已經可以正確解析tiddler的資料了。萬歲!感謝神!可以開始把ZiddlyWiki的東西移過去,建立個人的新blog囉!--20060505 23:57\n***^^@@20060515 9:47@@^^新問題:{{{import.php}}}還會把{{{<>"}}}之類的字元轉換成{{{< > "e;}}}之類的,這樣會讓plugin大亂。\n**先用ImportTiddlersPlugin試試好了。\n***同樣地,想直接在線上匯入別的網域的文件或是本地端的檔案都失敗,這在ZiddlyWiki的時代也一樣。\n***有一個方法了,就是把TiddlyWiki文件上傳到伺服器上,就有權限可以匯入囉!感謝神!\n***不行,又出問題,因為那個匯入並沒有辦法按照ccTiddly的方式存起來,所以除非去編輯它們,否則一離開頁面它們又會消失:( --20060504 下午\n*下一個問題:''多重ccTiddly以及plugin集中載入''\n**''@@多重ccTiddly@@''\n***首先要在{{{config}}}資料夾中設定不同的config檔({{{xxx.php}}}),指定不同的資料庫\n***存取方法\n***#在URI後面加上{{{?config=xxx}}}\n***#設定不同的網域\n**''@@plugin集中載入@@''\n***一開始想在{{{/include/function.php}}}裡動手腳,以為把查詢資料庫的{{{SELECT}}}指令多加另一個資料庫的名字就好了,後來才發現{{{SELECT}}}是在同一個「資料庫」當中同時查詢不同的「資料表」,而plugin卻是存在另一個不同的「資料庫」,所以需要找更厲害的指令XD\n***^^@@20060515 10:52@@^^經Bram兄的[[指點|http://groups.google.com/group/PrinceTiddlyWiki/browse_thread/thread/48916b53b115b15e/85324fd68c784889?#85324fd68c784889]],才知道原來只要把多重ccTiddly改為「同一資料庫中的不同資料表」,就可以輕鬆運用{{{SELECT}}}指令了。因此只要把{{{/include/function.php}}}裡頭的指令改成{{{SELECT * FROM A資料表 UNION SELECT * FROM B資料表}}}這樣的語法就可以囉!萬歲!\n*^^@@20060514 3:37@@^^訊息翻譯完成!\n!問題回報\n^^@@20060509@@^^\n*修改SiteTitle和SiteSubtitle並無法改變網頁標題→[[反映|https://sourceforge.net/forum/message.php?msg_id=3719927]]\n*儲存RSS無效\n*^^@@20060514@@^^無法隱藏整份文件\n*^^@@20060515 9:47@@^^{{{import.php}}}還會把{{{<>"}}}之類的字元轉換成{{{< > "e;}}}之類的,這樣會讓plugin大亂。\n**真正的癥結在於,它不應該把{{{<>"e;}}}之類東西裡面的{{{&}}}又再轉換一次。
在電腦上看星星!超美的3D星座圖,open source,很棒喔!快去[[Stellarium|http://www.stellarium.org/]]。
@@20060509 2:11@@之前再次用Netvibes當個人首頁的時候發現有提供這個服務,剛好之前發現的那個1GB線上公事包[[Openomy]]又不支援華文,而Netvibes卻把Box.net的服務整合得很好,可以直接在Netvibes的頁面中上傳、管理。及至今天從瀏覽器登入Box.net,才發現它本身這麼好用。\n*介面色澤柔和討喜:p\n*現在的Web 2.0服務不用一下AJAX好像真的活不下去一樣:p\n*提供檔案''公開或私下分享''!\n*容量也是1G!\n*如果電腦有裝JAVA的話,還支援直接檔案拖拉上傳哩。不過就算沒有,也有大量上傳的介面,夠方便啦!\n*@@20060509 10:46@@ 據說不久之後它還會推出與桌面上的資料同步的功能耶!!!真的很貼心!值得期待。\n所以結論是,這真是個好服務啊!
*^^@@20060509 2:15@@^^好久一陣子沒有用它(畢竟是在外面的電腦使用才有意義),今天發現它已經整合了Firefox的Bookmark Synchronizer套件(還出特別版,好棒喔!),可以自動將Firefox中的書籤和SiteBar上面做同步喔!\n*^^@@20060512 15:26@@^^我用SiteBar的免費帳號好像已經爆掉了(它的免費額度是500個書籤,我上傳了一千多個:p),所以就用ByetHost的空間自己架一個線上書籤伺服器吧!而且也試著和家裡的電腦做同步喔!\n**^^@@15:52@@^^不過Bookmark Synchronization SE本身的自動上傳/下載機制好像有點問題,一直沒辦法執行自動同步,還需要調整當中......\n
^^@@20060509 2:44@@^^Web 2.0的時代,免費而大容量的網路服務如雨後春筍林立,一下子,網路資源好像不用錢一樣地供人大筆花用。首先登場的是blog和相簿(在台灣無名小站初期號稱「容量無上限」是濫殤;至於和它同期出山的wiki則比較缺乏大而慷慨的免費服務),接著Gmail重新定義了webmail。然後現在免費的線上書籤、個人首頁、RSS閱讀器,乃至過去沒有人敢想像的檔案儲存/分享、影片分享,也都有人做了起來。這些服務因為跨瀏覽器、跨平台,甚至是跨電腦——不管人在家裡還是在外辦公,都能享用同一套屬於個人的資源——所以整理、串連所有服務的時候到了。到底自己擁有什麼樣的線上空間帝國呢?\n*個人首頁——[[Netvibes]], http://www.netvibes.com/\n**可整合天氣、搜尋、RSS閱讀、讀信、[[Box.net]]檔案儲存等功能\n*資訊發表、整理\n**Blog——[[目光相對Blog]]([[微笑‧語言‧歷史|http://linshi.twbbs.org/blog/MilchFlasche]])、[[天空部落]]([[快來新歷史|http://blog.webs-tv.net/user/milchflasche.html]])\n**Wiki/blog——[[ZiddlyWiki]]([[微笑‧語言‧歷史|http://milchflasche.objectis.net/Smile]]、[[資訊隨筆|http://milchflasche.objectis.net/Info]])、[[ccTiddly]]\n**Podcast——[[天空部落]]([[快來新歷史|http://blog.webs-tv.net/user/milchflasche.html]])\n*圖片、影音分享\n**相簿——[[Flickr]]([[我的收藏|http://www.flickr.com/]])、[[天空部落]]([[快來新歷史|http://blog.webs-tv.net/user/milchflasche.html]])\n**影音——[[Google Video]]、[[YouTube]](不過後者好像快要倒了?)\n*檔案儲存、分享——[[Box.net]]\n*郵件——[[Gmail]]([[我的地址|mailto:Robertus0617@gmail.com]])\n*^^@@20060509 12:34補充@@^^RSS\n**私人閱讀——[[Rojo]]、[[Bloglines]]之類\n**公開聯播?\n*網頁——[[ByetHost]]([[我的網域|http://milchflasche.byethost31.com/]])\n*私人書籤——[[SiteBar]]\n*社會書籤——[[HEMiDEMi]]([[我的收藏|http://www.hemidemi.com/user/milchflasche/bookmark/]])\n*交友社群\n**足球——[[Joga]]([[我的首頁|http://www.joga.com/Home.aspx?xid=17289771092772754997]])\n其實我過去用過的各種同類服務還不少,但這些是現在去蕪存菁以後覺得比較好用的。\n----\n^^@@20060509 11:45@@^^ 但是有一個問題:這麼多個人空間,其中公開示眾的也不少,有相簿、有社會書籤、有wiki/blog......這些頁面是否能發揮分進合擊的效用,彼此讓人潮加乘?(要公開就是為了宣揚、展示自己的東西,所以多少會有目的性)還是備多力分,人們看了A,但你也想要他們看的B、C卻因為不在眼前,而他們也懶得過去看,結果造成瞎子摸象效應?比方說,我覺得把有意思的網頁或文章收到HEMiDEMi去非常有效率,比放在ZiddlyWiki或ccTiddly好,但問題是要怎樣才能更清楚地讓造訪wiki/blog的遊客知道還有HEMiDEMi這個地方也值得一看?所以除了一個私人用的入口之外,一個公用的入口區塊似乎還是必要的。需要研究一下。
Tim Morgan修改TiddlyWiki,搭配Python script,使其可以在Zope伺服器上存取,並且採用AJAX機制。
*<html><a href="http://static.flickr.com/55/143726484_4282a9a60e_o.png"><img alt="Firefox Search Station Translator Sidebar" title="點小圖看大圖" style="float:right" src="http://static.flickr.com/55/143726484_4282a9a60e_m.jpg"/></a></html>^^@@20060509@@^^重點不是這個套件的搜尋功能本身,而是它隨附的「Translator」功能,提供十幾種語言的整段對譯耶!翻一下用rikaichan逐字查之後還是看不懂的日文論文好了:\n|すなわち事態をもっとも単純化して表現すれば、土団兵の出現は、自立した小経営を基礎とし、こうした徴兵の制度にたえうる小農民の一般的存在を前提とするという意味において、近世的事態の一表現であるが、そうした政策をとる主體のあり方が中世的であると想定されるという意味でアナクロニズムであり、それは近世的な郷豪の支配力に打撃を与えるという意味からだけではなく、小農民自體に中世的な支配を強制するという意味において反動的である。|如果即最單純化做表現事態,土團兵的出現,在把向(以)基礎年,這樣的徵兵的制度能忍耐自立了的小經營的小農民的普通的存在作為前提這樣的意義中,是近代的事態的一表現,不過,以取那樣的政策的主體的應有的樣子與中世紀性被估計這樣的意義是不合時代潮流,不僅僅是從那個給(對)近代性的鄉豪的支配力給予打擊這樣的意義,在強迫小農民自體中世紀性的支配這樣的意義中反動性。|\n如何?翻得還不算差,至少比我自己連文法和語助詞都搞不太懂來唸好多了。更好玩的是,連我寫得lòrlòrtńg的華文,它也能翻成看來還算煞有介事的日文,這真是好物啊!!!:D
^^@@20060510 8:57@@^^我想換Windows的系統預設字型已經很久了,是的,打從我國中時用Windows 3.1時吧(唔,洩漏我的年紀了嗎?)當時的預設字型好像是個叫作「System」的點陣字型,它不只華文的部份醜,英文部份的鋸齒也粗糙得可怖。後來Windows 95推出,「細明體」與「新細明體」哥倆好正式行走江湖,但不幸地在那個反鋸齒技術仍然低落的年代,它們還是內嵌了點陣字。所以我一直都在尋找,除了從Windows提供的GUI去修改視窗標題、選單列、圖示等等的字型(我每次一灌好Windows XP之後,一定馬上把這些字型都換成Tahoma)之外,到底哪個地方可以一勞永逸,把系統預設字型改成好看一點的呢?(小時候都會想改成楷體或更花俏的字型,但後來發現字小的時候那種字型實在不堪入目XD現在進入Windows XP以後,若能改成Tahoma之類就很棒了)\n\n於是,今天神終於讓我看到這幾個網頁,找到了一些撇步囉!原來和我一樣討厭新細明體、喜歡Tahoma(俗稱「大河馬」?)的人還真不少呢!\n*從登錄檔變更系統預設字型(@@[[原文|http://ylchang.blogspot.com/2006/02/windows.html#links]]@@)\n>修改{{{HKEY_LOCAL_MACHINE\sSOFTWARE\sMicrosoft\sWindows NT\sCurrentVersion\sGRE_Initialize\sGUIFont.Facename}}}\n*利用Windows Vista的新字型\n**[[Vixual 網路視野: 將網頁的字型換成「微軟正黑體」|http://www.vixual.net/wikka/wikka.php?wakka=Archive2006042301]]有建議大家下載「微軟正黑體」,並將之設為瀏覽器(他還是用IE啦,但Firefox也可比照辦理)的顯示字型。裡面有提供微軟新字型的打包下載點,這個我就自己來就好囉!\n*以上的總結:[[maTT cHEn {dot}* info » 想讓 Windows 的字型更好看嗎?|http://mattchen.info/2006/04/27/231.html]]\n**這篇裡面也有人提供微軟新字型的下載。\n*另外,[[微軟ClearType微調精靈|http://www.microsoft.com/typography/ClearTypePowerToy.mspx]]\n微軟終於也在字型的美感上急起直追了,相信未來能使用到這優惠的人們會越來越多。今年是2006,時代果然在改變囉!回頭就來試試能否奏效吧!\n*^^@@12:04@@^^重新開機以後,實際上好像沒什麼改變耶。有很多地方的GUI Windows還是會用細明體的點陣字。到底有沒有辦法釜底抽薪呢?\n**[[這個地方|http://redhat.ecenter.idv.tw/bbs/showthread.php?threadid=17750]]說<html><pre>\n[HKEY_LOCAL_MACHINE\sSOFTWARE\sMicrosoft\sWindows NT\sCurrentVersion\sFontSubstitutes]\n"MS Shell Dlg 2"="xxx"\n"MS Shell Dlg"="xxx"</pre></html>也要改→結果沒有用\n**[[這個地方|http://redhat.ecenter.idv.tw/bbs/showthread.php?threadid=17750]]又說<html><pre>\n{{{\nHKEY_LOCAL_MACHINE\sSOFTWARE\sMicrosoft\sWindowsNT\sCurrentVersion\sWinlogon\sPreLoadFontFiletf\n}}}</pre></html>也要改→也沒什麼用\n**後來我發現恐怕跟{{{cvgafix.fon}}}、{{{cvgasys.fon}}}、{{{vga950.fon}}}這三個字型有很大的關係。但是把登錄檔中相關的機碼改掉以後,連輸入法的小視窗都走樣了(光是改成{{{tahoma.ttf}}}而已)\n*重要的參考資料,來自微軟本身的資訊庫:[[REG: Fonts Entries|http://support.microsoft.com/?id=102960]]\n^^@@20060511 5:57@@^^但事實上改了{{{GUIFont.facename}}}以後實際會有的影響:\n*MSN視窗中的字型\n*網頁中表單元件的預設字型\n*MSN Plus!的彈出式提示小框\n完全不受影響的部份:\n*幾乎所有程式的對話窗、按鈕介面、說明內容orz\n^^@@20060513@@^^看這個[[討論串|http://forum.moztw.org/viewtopic.php?p=74821#74821]]吧。恐怕是空歡喜一場、無解了。\n----\n^^@@20060515@@^^可堪告慰的是,雖然Windows GUI層面的字型還是頑固死守點陣字,不過微軟的這幾種新字型用在網頁顯示上還是挺不錯的,比起新細明體真的好一萬倍!(當然該網頁字型不能設得太小)而我也就趁便把之前繁體華文sans-serif用的「華康雅藝體」給換掉了。\n----\n<html><a href="http://static.flickr.com/53/143750864_2e0fdfc2fa_o.png"><img src="http://static.flickr.com/53/143750864_2e0fdfc2fa_m.jpg" style="float: right" alt="微軟舊式檔案瀏覽GUI" title="點小圖看大圖"/></a></html>^^@@9:35@@^^順道一提,Windows XP「安裝新字型」的對話窗,還可以看到從Windows 3.1遺留下來的舊式檔案瀏覽介面呢!也就是把磁碟機、樹狀目錄及檔案列表分成三塊,還要先切換磁碟機,再選目錄,然後再列出檔案的那種GUI,真是活化石啊:P
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<themeSelect style 選擇樣式>><<slider chkSliderOptionsPanel OptionsPanel 'options' 'Change advanced options'>><<exportLink>><<importLink>><<login>>
引述''Bram''大前輩(以[[ccTiddly]]為例):\n<<<\n另外,我想也許有人希望在後端的\nMySql資料裡,可以看到*不是亂碼*的中文內容吧?\n\n也可以作一些修改,以phpmyadmin的操作為例:\n\n1.建立資料庫時,*校對*設成 utf8-general-ci\n\n2.修改install.php、includes/function.php及import.php\n\n $link = mysql_connect($tiddlyCfg['db']['host'],\n$tiddlyCfg['db']['login'], $tiddlyCfg['db']['pass'])\n or die("Could not connect to database server");\n\n找到上述指令,在其後增加一行\n\n mysql_query("SET NAMES 'utf8'");\n\n這樣做的好處是,備份或以sql查詢到的資料可以正常的utf-8編碼顯示。\n當然,中文部份不再是一堆*亂碼*。\n\n以下動作最好在空的資料庫先試作,沒問題後再正式來。\n\n1.複製或備份ccT資料庫,刪除ccT裡的兩個資料表\n2.將資料庫編碼校對改為utf8-general-ci\n3.舊有的資料可以先另存statnd alone至本機端,\n4.以編輯器開啟,再將所有<div tiddler ...開頭的資料\n複製到執行import.php畫面中的textarea,\nsumit後選擇要匯入的tiddlers再import即可完成轉碼動作。\n<<<
^^@@8:49@@^^剛剛找到兩個很不錯的小軟體:[[Font Fitting Room]]以及[[Everest (Home Edtion)]]。
天哪,用了一下,馬上讓我聯想到的是——Microsoft OneNote!可以拖放、可以存圖;介面雖然是Google一貫的淡藍白,但卻也省掉了OneNote的囉嗦。這真的非常、非常好用(我也裝了Firefox用的擴充套件,耶~)\n\n我對Google到底會不會出自有OS沒太大研究,但是它許多以網路為基礎的服務(大量的AJAX不用錢XD)卻足以在基本應用的等級上取代M$的桌面軟體。\n\n嗯,說到Google介面一貫的淡藍白風格,Gmail Skin套件(for Fx only)要是也能套用到其他Google服務就好了;或者該是再次放Stylish套件出動的時候了......
//''Shows DefaultTiddlers + most recently modified tiddlers as default when any TiddlyWiki or adaptation is first loaded.''//\n//To use, copy this tiddler's contents to a new tiddler on your site and tag it "systemConfig".//\n\n{{{\nvar num = 7;\nvar ignore_tags = ['systemConfig', 'systemTiddlers', 'DefaultTiddlers', 'excludeLists'];\n\nfunction in_array(item, arr){for(var i=0;i<arr.length;i++)if(item==arr[i])return true};\nfunction get_parent(tiddler){while(tiddler && in_array('comments', tiddler.tags)) tiddler=store.fetchTiddler(tiddler.tags[0]);return tiddler};\nfunction unique_list(list){var l=[];for(i=0;i<list.length;i++)if(!in_array(list[i], l))l.push(list[i]);return l};\nfunction get_recent_tiddlers(){\n var tiddlers = store.getTiddlers('modified');\n var names = store.getTiddlerText("DefaultTiddlers").readBracketedList();\n var ignore_tiddlers = [];\n for(var i=0; i<ignore_tags.length; i++)\n ignore_tiddlers=ignore_tiddlers.concat(store.getTaggedTiddlers(ignore_tags[i]));\n for(var i=tiddlers.length-1; i>=0; i--) {\n if(in_array('comments', tiddlers[i].tags)) {\n var t = get_parent(tiddlers[i]);\n if(t)names.push(t.title)\n }\n else if(!in_array(tiddlers[i], ignore_tiddlers))\n names.push(tiddlers[i].title);\n }\n return unique_list(names).slice(0, num);\n}\nvar names = get_recent_tiddlers();\n_restart = restart\nrestart = function() {\n if(window.location.hash) _restart();\n else story.displayTiddlers(null,names);\n}\n}}}
/***\n''Import Tiddlers Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#ImportTiddlersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nWhen many people share and edit copies of the same TiddlyWiki document, the ability to quickly collect all these changes back into a single, updated document that can then be redistributed to the entire group is very important. This plugin lets you selectively combine tiddlers from any two TiddlyWiki documents. It can also be very useful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)\n\n!!!!!Inline interface (live)\n<<<\n<<importTiddlers inline>>\n<<<\n!!!!!Macro Syntax\n<<<\n{{{<<importTiddlers>>}}}\ncreates "import tiddlers" link. click to show/hide import control panel\n\n{{{<<importTiddlers inline>>}}}\ncreates import control panel directly in tiddler content\n\n{{{<<importTiddlers filter source quiet ask>>}}}\nnon-interactive 'automatic' import.\n''filter'' determines which tiddlers will be automatically selected for importing. Use one of the following keywords:\n>''"new"'' retrieves only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' retrieves only tiddlers that exist in both documents for which the import source tiddler is newer than the existing tiddler\n>''"updates"'' retrieves both ''new'' and ''changed'' tiddlers (this is the default action when none is specified)\n>''"all"'' retrieves ALL tiddlers from the import source document, even if they have not been changed.\n''source'' is the location of the imported document. It can be either a local document or an URL:\n>filename is any local path/file, in whatever format your system requires\n>URL is any remote web location that starts with "http://" or "https://"\n''"quiet"'' (optional)\n>supresses all status message during the import processing (e.g., "opening local file...", "found NN tiddlers..." etc). Note that if ANY tiddlers are actualy imported, a final information message will still be displayed (along with the ImportedTiddlers report), even when 'quiet' is specified. This ensures that changes to your document cannot occur without any visible indication at all.\n''"ask"'' (optional)\n>adds interactive confirmation. A browser message box (OK/Cancel) is displayed for each tiddler that will be imported, so that you can manually bypass any tiddlers that you do not want to import.\n\n''Special tag values: importReplace and importPublic''\n\nBy adding these special tags to an existing tiddler, you can precisely control whether or not to allow updates to that tiddler as well as decide which tiddlers in your document can be automatically imported by others.\n*''For maximum safety, the default action is to prevent existing tiddlers from being unintentionally overwritten by incoming tiddlers.'' To allow an existing tiddler to be overwritten by an imported tiddler, you must tag the existing tiddler with ''<<tag importReplace>>''\n*''For maximum privacy, the default action for //outgoing// tiddlers is to NOT automatically share your tiddlers with others.'' To allow a tiddler in your document to be shared via auto-import actions by others, you must tag it with ''<<tag importPublic>>''\n//Note: these tags are only applied when using the auto-import processing. When using the interactive control panel, all tiddlers in the imported document are available in the listbox, regardless of their tag values.//\n<<<\n!!!!!Interactive Usage\n<<<\nWhen used interactively, a control panel is displayed consisting of an "import source document" filename input (text field plus a ''[Browse...]'' button), a listbox of available tiddlers, a "differences only" checkbox, an "add tags" input field and four push buttons: ''[open]'', ''[select all]'', ''[import]'' and ''[close]''.\n\nPress ''[browse]'' to select a TiddlyWiki document file to import. You can also type in the path/filename or a remote document URL (starting with http://)and press ''[open]''. //Note: There may be some delay to permit the browser time to access and load the document before updating the listbox with the titles of all tiddlers that are available to be imported.//\n\nSelect one or more titles from the listbox (hold CTRL or SHIFT while clicking to add/remove the highlight from individual list items). You can press ''[select all]'' to quickly highlight all tiddler titles in the list. Use the ''[-]'', ''[+]'', or ''[=]'' links to adjust the listbox size so you can view more (or less) tiddler titles at one time. When you have chosen the tiddlers you want to import and entered any extra tags, press ''[import]'' to begin copying them to the current TiddlyWiki document.\n\n''select: all, new, changes, or differences''\n\nYou can click on ''all'', ''new'', ''changes'', or ''differences'' to automatically select a subset of tiddlers from the list. This makes it very quick and easy to find and import just the updated tiddlers you are interested in:\n>''"all"'' selects ALL tiddlers from the import source document, even if they have not been changed.\n>''"new"'' selects only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' selects only tiddlers that exist in both documents but that are newer in the source document\n>''"differences"'' selects all new and existing tiddlers that are different from the destination document (even if destination tiddler is newer)\n\n''Import Tagging:''\n\nTiddlers that have been imported can be automatically tagged, so they will be easier to find later on, after they have been added to your document. New tags are entered into the "add tags" input field, and then //added// to the existing tags for each tiddler as it is imported.\n\n''Skip, Rename, Merge, or Replace:''\n\nWhen importing a tiddler whose title is identical to one that already exists, the import process pauses and the tiddler title is displayed in an input field, along with four push buttons: ''[skip]'', ''[rename]'', ''[merge]'' and ''[replace]''.\n\nTo bypass importing this tiddler, press ''[skip]''. To import the tiddler with a different name (so that both the tiddlers will exist when the import is done), enter a new title in the input field and then press ''[rename]''. Press ''[merge]'' to combine the content from both tiddlers into a single tiddler. Press ''[replace]'' to overwrite the existing tiddler with the imported one, discarding the previous tiddler content.\n\n//Note: if both the title ''and'' modification date/////time match, the imported tiddler is assumed to be identical to the existing one, and will be automatically skipped (i.e., not imported) without asking.//\n\n''Import Report History''\n\nWhen tiddlers are imported, a report is generated into ImportedTiddlers, indicating when the latest import was performed, the number of tiddlers successfully imported, from what location, and by whom. It also includes a list with the title, date and author of each tiddler that was imported.\n\nWhen the import process is completed, the ImportedTiddlers report is automatically displayed for your review. If more tiddlers are subsequently imported, a new report is //added// to ImportedTiddlers, above the previous report (i.e., at the top of the tiddler), so that a reverse-chronological history of imports is maintained.\n\nIf a cumulative record is not desired, the ImportedTiddlers report may be deleted at any time. A new ImportedTiddlers report will be created the next time tiddlers are imported.\n\nNote: You can prevent the ImportedTiddlers report from being generated for any given import activity by clearing the "create a report" checkbox before beginning the import processing.\n\n<<<\n!!!!!Installation\n<<<\ncopy/paste the following tiddlers into your document:\n''ImportTiddlersPlugin'' (tagged with <<tag systemConfig>>)\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add "< < ImportTiddlers > >" macro^^\n\n''Quick Installation Tip #1:''\nIf you are using an unmodified version of TiddlyWiki (core release version <<version>>), you can get a new, empty TiddlyWiki with the Import Tiddlers plugin pre-installed (''[[download from here|TW+ImportExport.html]]''), and then simply import all your content from your old document into this new, empty document.\n<<<\n!!!!!Revision History\n<<<\n''2006.02.21 [2.7.1]''\nClean up layout problems with IE. (Use tables for alignment instead of SPANs styled with float:left and float:right)\n''2006.02.21 [2.7.0]''\nAdded "local file" and "web server" radio buttons for selecting dynamic import source controls in ImportPanel. Default file control is replaced with URL text input field when "web server" is selected. Default remote document URL is defined in SiteURL tiddler. Also, added option for prepending SiteProxy URL as prefix to remote URL to mask cross-domain document access (requires compatible server-side script)\n''2006.02.17 [2.6.0]''\nRemoved "differences only" listbox display mode, replaced with selection filter 'presets': all/new/changes/differences. Also fixed initialization handling for "add new tags" so that checkbox state is correctly tracked when panel is first displayed.\n''2006.02.16 [2.5.4]''\nadded checkbox options to control "import remote tags" and "keep existing tags" behavior, in addition to existing "add new tags" functionality.\n''2006.02.14 [2.5.3]''\nFF1501 corrected unintended global 't' (loop index) in importReport() and autoImportTiddlers()\n''2006.02.10 [2.5.2]''\ncorrected unintended global variable in importReport().\n''2006.02.05 [2.5.1]''\nmoved globals from window.* to config.macros.importTiddlers.* to avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2006.01.18 [2.5.0]''\nadded checkbox for "create a report". Default is to create/update the ImportedTiddlers report. Clear the checkbox to skip this step.\n''2006.01.15 [2.4.1]''\nadded "importPublic" tag and inverted default so that auto sharing is NOT done unless tagged with importPublic\n''2006.01.15 [2.4.0]''\nAdded support for tagging individual tiddlers with importSkip, importReplace, and/or importPrivate to control which tiddlers can be overwritten or shared with others when using auto-import macro syntax. Defaults are to SKIP overwriting existing tiddlers with imported tiddlers, and ALLOW your tiddlers to be auto-imported by others.\n''2006.01.15 [2.3.2]''\nAdded "ask" parameter to confirm each tiddler before importing (for use with auto-importing)\n''2006.01.15 [2.3.1]''\nStrip TW core scripts from import source content and load just the storeArea into the hidden IFRAME. Makes loading more efficient by reducing the document size and by preventing the import document from executing its TW initialization (including plugins). Seems to resolve the "Found 0 tiddlers" problem. Also, when importing local documents, use convertUTF8ToUnicode() to convert the file contents so support international characters sets.\n''2006.01.12 [2.3.0]''\nReorganized code to use callback function for loading import files to support event-driven I/O via an ASYNCHRONOUS XMLHttpRequest. Let's processing continue while waiting for remote hosts to respond to URL requests. Added non-interactive 'batch' macro mode, using parameters to specify which tiddlers to import, and from what document source. Improved error messages and diagnostics, plus an optional 'quiet' switch for batch mode to eliminate //most// feedback.\n''2006.01.11 [2.2.0]''\nAdded "[by tags]" to list of tiddlers, based on code submitted by BradleyMeck\n''2006.01.09 [2.1.1]''\nWhen a URL is typed in, and then the "open" button is pressed, it generates both an onChange event for the file input and a click event for open button. This results in multiple XMLHttpRequest()'s which seem to jam things up quite a bit. I removed the onChange handling for file input field. To open a file (local or URL), you must now explicitly press the "open" button in the control panel.\n''2006.01.08 [2.1.0]''\nIMPORT FROM ANYWHERE!!! re-write getImportedTiddlers() logic to either read a local file (using local I/O), OR... read a remote file, using a combination of XML and an iframe to permit cross-domain reading of DOM elements. Adapted from example code and techniques courtesy of Jonny LeRoy.\n''2006.01.06 [2.0.2]''\nWhen refreshing list contents, fixed check for tiddlerExists() when "show differences only" is selected, so that imported tiddlers that don't exist in the current file will be recognized as differences and included in the list.\n''2006.01.04 [2.0.1]''\nWhen "show differences only" is NOT checked, import all tiddlers that have been selected even when they have a matching title and date.\n''2005.12.27 [2.0.0]''\nUpdate for TW2.0\nDefer initial panel creation and only register a notification function when panel first is created\n''2005.12.22 [1.3.1]''\ntweak formatting in importReport() and add 'discard report' link to output\n''2005.12.03 [1.3.0]''\nDynamically create/remove importPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding. Also, dynamically create/recreate importFrame each time an external TW document is loaded for importation (reduces DOM overhead and ensures a 'fresh' frame for each document)\n''2005.11.29 [1.2.1]''\nfixed formatting of 'detail info' in importReport()\n''2005.11.11 [1.2.0]''\nadded 'inline' param to embed controls in a tiddler\n''2005.11.09 [1.1.0]''\nonly load HTML and CSS the first time the macro handler is called. Allows for redundant placement of the macro without creating multiple instances of controls with the same ID's.\n''2005.10.25 [1.0.5]''\nfixed typo in importReport() that prevented reports from being generated\n''2005.10.09 [1.0.4]''\ncombined documentation with plugin code instead of using separate tiddlers\n''2005.08.05 [1.0.3]''\nmoved CSS and HTML definitions into plugin code instead of using separate tiddlers\n''2005.07.27 [1.0.2]''\ncore update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()\n''2005.07.23 [1.0.1]''\nadded parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n\n// // Version\n//{{{\nversion.extensions.importTiddlers = {major: 2, minor: 7, revision: 1, date: new Date(2006,2,21)};\n//}}}\n\n// // 1.2.x compatibility\n//{{{\nif (!window.story) window.story=window;\nif (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}\nif (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}\nif (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}\n//}}}\n\n// // IE needs explicit global scoping for functions/vars called from browser events\n//{{{\nwindow.onClickImportButton=onClickImportButton;\nwindow.loadImportFile=loadImportFile;\nwindow.refreshImportList=refreshImportList;\n//}}}\n\n// // default cookie/option values\n//{{{\nif (!config.options.chkImportReport) config.options.chkImportReport=true;\n//}}}\n\n\n// // ''MACRO DEFINITION''\n\n//{{{\nconfig.macros.importTiddlers = { };\nconfig.macros.importTiddlers = {\n label: "import tiddlers",\n prompt: "Copy tiddlers from another document",\n countMsg: "%0 tiddlers selected for import",\n src: "", // path/filename or URL of document to import (retrieved from SiteUrl tiddler)\n proxy: "", // URL for remote proxy script (retrieved from SiteProxy tiddler)\n useProxy: false, // use specific proxy script in front of remote URL\n inbound: null, // hash-indexed array of tiddlers from other document\n newTags: "", // text of tags added to imported tiddlers\n addTags: true, // add new tags to imported tiddlers\n listsize: 8, // # of lines to show in imported tiddler list\n importTags: true, // include tags from remote source document when importing a tiddler\n keepTags: true, // retain existing tags when replacing a tiddler\n index: 0, // current processing index in import list\n sort: "" // sort order for imported tiddler listbox\n};\n\nconfig.macros.importTiddlers.handler = function(place,macroName,params) {\n // LINK WITH FLOATING PANEL\n if (!params[0]) {\n createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);\n return;\n }\n // INLINE TIDDLER CONTENT\n if (params[0]=="inline") {\n createImportPanel(place);\n document.getElementById("importPanel").style.position="static";\n document.getElementById("importPanel").style.display="block";\n return;\n }\n // NON-INTERACTIVE BATCH MODE\n switch (params[0]) {\n case 'all':\n case 'new':\n case 'changes':\n case 'updates':\n var filter=params.shift();\n break;\n default:\n var filter="updates";\n break;\n } \n if (!params[0]||!params[0].length) return; // filename is required\n config.macros.importTiddlers.src=params.shift();\n var quiet=(params[0]=="quiet"); if (quiet) params.shift();\n var ask=(params[0]=="ask"); if (ask) params.shift();\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n // load storeArea from a hidden IFRAME, then apply import rules and add/replace tiddlers\n loadImportFile(config.macros.importTiddlers.src,filter,quiet,ask,autoImportTiddlers);\n}\n//}}}\n\n// // ''READ TIDDLERS FROM ANOTHER DOCUMENT''\n\n//{{{\nfunction loadImportFile(src,filter,quiet,ask,callback) {\n if (!quiet) clearMessage();\n // LOCAL FILE\n if ((src.substr(0,7)!="http://")&&(src.substr(0,8)!="https://")) {\n if (!quiet) displayMessage("Opening local document: "+ src);\n var txt=loadFile(src);\n if(!txt) { if (!quiet) displayMessage("Could not open local document: "+src); }\n else {\n var s="<html><body>"+txt.substr(txt.indexOf('<div id="storeArea">'));\n if (!quiet) displayMessage(txt.length+" bytes in document. ("+s.length+" bytes used for tiddler storage)");\n config.macros.importTiddlers.inbound = readImportedTiddlers(convertUTF8ToUnicode(s));\n var count=config.macros.importTiddlers.inbound?config.macros.importTiddlers.inbound.length:0;\n if (!quiet) displayMessage("Found "+count+" tiddlers in "+src);\n if (callback) callback(src,filter,quiet,ask);\n }\n return;\n }\n // REMOTE FILE\n var x; // XML object\n try {x = new XMLHttpRequest()}\n catch(e) {\n try {x = new ActiveXObject("Msxml2.XMLHTTP")}\n catch (e) {\n try {x = new ActiveXObject("Microsoft.XMLHTTP")}\n catch (e) { return }\n }\n }\n x.onreadystatechange = function() {\n if (x.readyState == 4) {\n if (x.status == 200) {\n var sa="<html><body>"+x.responseText.substr(x.responseText.indexOf('<div id="storeArea">'));\n if (!quiet) displayMessage(x.responseText.length+" bytes in document. ("+sa.length+" bytes used for tiddler storage)");\n config.macros.importTiddlers.inbound = readImportedTiddlers(sa);\n var count=config.macros.importTiddlers.inbound?config.macros.importTiddlers.inbound.length:0;\n if (!quiet) displayMessage("Found "+count+" tiddlers in "+src);\n if (callback) callback(src,filter,quiet,ask);\n }\n else\n if (!quiet) displayMessage("Could not open remote document:"+ src+" (error="+x.status+")");\n }\n }\n if (document.location.protocol=="file:") { // UniversalBrowserRead only works from a local file context\n try {netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead')}\n catch (e) { if (!quiet) displayMessage(e.description?e.description:e.toString()); }\n }\n if (config.macros.importTiddlers.useProxy) src=config.macros.importTiddlers.proxy+src;\n if (!quiet) displayMessage("Opening remote document: "+ src);\n try {\n var url=src+(src.indexOf('?')<0?'?':'&')+'nocache='+Math.random();\n x.open("GET",url,true);\n x.overrideMimeType('text/html');\n x.send(null);\n }\n catch (e) {\n if (!quiet) {\n displayMessage("Could not open remote document: "+src);\n displayMessage(e.description?e.description:e.toString());\n }\n }\n}\n\nfunction readImportedTiddlers(txt)\n{\n var importedTiddlers = [];\n // create frame\n var f=document.getElementById("importFrame");\n if (f) document.body.removeChild(f);\n f=document.createElement("iframe");\n f.id="importFrame";\n f.style.width="0px"; f.style.height="0px"; f.style.border="0px";\n document.body.appendChild(f);\n // get document\n var d=f.document;\n if (f.contentDocument) d=f.contentDocument; // For NS6\n else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6\n // load source into document\n d.open(); d.writeln(txt); d.close();\n // read tiddler DIVs from storeArea DOM element \n var importStore = [];\n var importStoreArea = d.getElementById("storeArea");\n if (!importStoreArea || !(importStore=importStoreArea.childNodes) || (importStore.length==0)) { return null; }\n importStoreArea.normalize();\n for(var t = 0; t < importStore.length; t++) {\n var e = importStore[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && (e.id.substr(0,5) == "store"))\n title = e.id.substr(5);\n if(title && title != "") {\n var theImported = new Tiddler();\n theImported.loadFromDiv(e,title);\n importedTiddlers.push(theImported);\n }\n }\n return importedTiddlers;\n}\n//}}}\n\n// // ''NON-INTERACTIVE IMPORT''\n\n// // import all/new/changed tiddlers into store, replacing or adding tiddlers as needed\n//{{{\nfunction autoImportTiddlers(src,filter,quiet,ask)\n{\n var count=0;\n if (config.macros.importTiddlers.inbound) for (var t=0;t<config.macros.importTiddlers.inbound.length;t++) {\n var theImported = config.macros.importTiddlers.inbound[t];\n var theExisting = store.getTiddler(theImported.title);\n\n // only import tiddlers if tagged with "importPublic"\n if (theImported.tags && theImported.tags.find("importPublic")==null)\n { config.macros.importTiddlers.inbound[t].status=""; continue; } // status=="" means don't show in report\n\n // never import the "ImportedTiddlers" history from the other document...\n if (theImported.title=='ImportedTiddlers')\n { config.macros.importTiddlers.inbound[t].status=""; continue; } // status=="" means don't show in report\n\n // check existing tiddler for importReplace, or systemConfig tags\n config.macros.importTiddlers.inbound[t].status="added"; // default - add any tiddlers not filtered out\n if (store.tiddlerExists(theImported.title)) {\n config.macros.importTiddlers.inbound[t].status="replaced";\n if (!theExisting.tags||(theExisting.tags.find("importReplace")==null))\n { config.macros.importTiddlers.inbound[t].status="not imported - tiddler already exists (use importReplace to allow changes)"; continue; }\n if ((theExisting.tags.find("systemConfig")!=null)||(theImported.tags.find("systemConfig")!=null))\n config.macros.importTiddlers.inbound[t].status+=" - WARNING: an active systemConfig plugin has been added or updated";\n }\n\n // apply the all/new/changes/updates filter \n if (filter!="all") {\n if ((filter=="new") && store.tiddlerExists(theImported.title))\n { config.macros.importTiddlers.inbound[t].status="not imported - tiddler already exists"; continue; }\n if ((filter=="changes") && !store.tiddlerExists(theImported.title))\n { config.macros.importTiddlers.inbound[t].status="not imported - new tiddler"; continue; }\n if (store.tiddlerExists(theImported.title) && ((theExisting.modified.getTime()-theImported.modified.getTime())>=0))\n { config.macros.importTiddlers.inbound[t].status="not imported - tiddler is unchanged"; continue; }\n }\n\n // get confirmation if required\n if (ask && !confirm("Import "+(theExisting?"updated":"new")+" tiddler '"+theImported.title+"'\snfrom "+src))\n { config.macros.importTiddlers.inbound[t].status="skipped - cancelled by user"; continue; }\n\n // DO THE IMPORT!!\n store.addTiddler(theImported); count++;\n }\n importReport(quiet); // generate a report (as needed) and display it if not 'quiet'\n if (count) store.setDirty(true); \n // always show final message when tiddlers were actually imported\n if (!quiet||count) displayMessage("Imported "+count+" tiddler"+(count!=1?"s":"")+" from "+src);\n}\n//}}}\n\n// // ''REPORT GENERATOR''\n\n//{{{\nfunction importReport(quiet)\n{\n if (!config.macros.importTiddlers.inbound) return;\n // DEBUG alert('importReport: start');\n\n // if import was not completed, the Ask panel will still be open... close it now.\n var askpanel=document.getElementById('importAskPanel'); if (askpanel) askpanel.style.display='none'; \n // get the alphasorted list of tiddlers\n var tiddlers = config.macros.importTiddlers.inbound;\n tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });\n // gather the statistics\n var count=tiddlers.length;\n var added=0; var replaced=0; var renamed=0; var skipped=0; var merged=0;\n for (var t=0; t<count; t++)\n if (tiddlers[t].status)\n {\n if (tiddlers[t].status=='added') added++;\n if (tiddlers[t].status.substr(0,7)=='skipped') skipped++;\n if (tiddlers[t].status.substr(0,6)=='rename') renamed++;\n if (tiddlers[t].status.substr(0,7)=='replace') replaced++;\n if (tiddlers[t].status.substr(0,6)=='merged') merged++;\n }\n var omitted=count-(added+replaced+renamed+skipped+merged);\n // DEBUG alert('stats done: '+count+' total, '+added+' added, '+skipped+' skipped, '+renamed+' renamed, '+replaced+' replaced, '+merged+' merged');\n // skip the report if nothing was imported\n if (added+replaced+renamed+merged==0) return;\n // skip the report if not desired by user\n if (!config.options.chkImportReport) {\n // reset status flags\n for (var t=0; t<count; t++) config.macros.importTiddlers.inbound[t].status="";\n // refresh display since tiddlers have been imported\n store.notifyAll();\n // quick message area summary report\n var msg=(added+replaced+renamed+merged)+' of '+count+' tiddler'+((count!=1)?'s':"");\n msg+=' imported from '+config.macros.importTiddlers.src.replace(/\s\s/g,'/')\n displayMessage(msg);\n return;\n }\n // create the report tiddler (if not already present)\n var tiddler = store.getTiddler('ImportedTiddlers');\n if (!tiddler) // create new report tiddler if it doesn't exist\n {\n tiddler = new Tiddler();\n tiddler.title = 'ImportedTiddlers';\n tiddler.text = "";\n }\n // format the report header\n var now = new Date();\n var newText = "";\n newText += "On "+now.toLocaleString()+", "+config.options.txtUserName+" imported tiddlers from\sn";\n newText += "[["+config.macros.importTiddlers.src+"|"+config.macros.importTiddlers.src+"]]:\sn";\n newText += "<"+"<"+"<\sn";\n newText += "Out of "+count+" tiddler"+((count!=1)?"s ":" ")+" in {{{"+config.macros.importTiddlers.src.replace(/\s\s/g,'/')+"}}}:\sn";\n if (added+renamed>0)\n newText += (added+renamed)+" new tiddler"+(((added+renamed)!=1)?"s were":" was")+" added to your document.\sn";\n if (merged>0)\n newText += merged+" tiddler"+((merged!=1)?"s were":" was")+" merged with "+((merged!=1)?"":"an ")+"existing tiddler"+((merged!=1)?"s":"")+".\sn"; \n if (replaced>0)\n newText += replaced+" existing tiddler"+((replaced!=1)?"s were":" was")+" replaced.\sn"; \n if (skipped>0)\n newText += skipped+" tiddler"+((skipped!=1)?"s were":" was")+" skipped after asking.\sn"; \n if (omitted>0)\n newText += omitted+" tiddler"+((omitted!=1)?"s":"")+((omitted!=1)?" were":" was")+" not imported.\sn";\n if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)\n newText += "imported tiddlers were tagged with: \s""+config.macros.importTiddlers.newTags+"\s"\sn";\n // output the tiddler detail and reset status flags\n for (var t=0; t<count; t++)\n if (tiddlers[t].status!="")\n {\n newText += "#["+"["+tiddlers[t].title+"]"+"]";\n newText += ((tiddlers[t].status!="added")?("^^\sn"+tiddlers[t].status+"^^"):"")+"\sn";\n config.macros.importTiddlers.inbound[t].status="";\n }\n newText += "<"+"<"+"<\sn";\n // output 'discard report' link\n newText += "<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n newText += "onclick=\s"story.closeTiddler('"+tiddler.title+"'); store.deleteTiddler('"+tiddler.title+"');\s" ";\n newText += "value=\s"discard report\s"></html>";\n // update the ImportedTiddlers content and show the tiddler\n tiddler.text = newText+((tiddler.text!="")?'\sn----\sn':"")+tiddler.text;\n tiddler.modifier = config.options.txtUserName;\n tiddler.modified = new Date();\n store.addTiddler(tiddler);\n if (!quiet) story.displayTiddler(null,"ImportedTiddlers",1,null,null,false);\n story.refreshTiddler("ImportedTiddlers",1,true);\n // refresh the display\n store.notifyAll();\n}\n//}}}\n\n// // ''INTERFACE DEFINITION''\n\n// // Handle link click to create/show/hide control panel\n//{{{\nfunction onClickImportMenu(e)\n{\n if (!e) var e = window.event;\n var parent=resolveTarget(e).parentNode;\n var panel = document.getElementById("importPanel");\n if (panel==undefined || panel.parentNode!=parent)\n panel=createImportPanel(parent);\n var isOpen = panel.style.display=="block";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n panel.style.display = isOpen ? "none" : "block" ;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n// // Create control panel: HTML, CSS, register for notification\n//{{{\nfunction createImportPanel(place) {\n var panel=document.getElementById("importPanel");\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(config.macros.importTiddlers.css,"importTiddlers");\n panel=createTiddlyElement(place,"span","importPanel",null,null)\n panel.innerHTML=config.macros.importTiddlers.html;\n store.addNotification(null,refreshImportList); // refresh listbox after every tiddler change\n refreshImportList();\n var siteURL=store.getTiddlerText("SiteUrl"); if (!siteURL) siteURL="";\n document.getElementById("importSourceURL").value=siteURL;\n config.macros.importTiddlers.src=siteURL;\n var siteProxy=store.getTiddlerText("SiteProxy"); if (!siteProxy) siteProxy="SiteProxy";\n document.getElementById("importSiteProxy").value=siteProxy;\n config.macros.importTiddlers.proxy=siteProxy;\n return panel;\n}\n//}}}\n\n// // CSS\n//{{{\nconfig.macros.importTiddlers.css = '\s\n#importPanel {\s\n display: none; position:absolute; z-index:11; width:35em; right:105%; top:3em;\s\n background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\s\n padding: 0.5em; margin:0em; -moz-border-radius:1em;\s\n}\s\n#importPanel a, #importPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\s\n#importPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\s\n#importPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\s\n#importPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\s\n#importPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\s\n#importPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\s\n#importPanel .box { border:1px solid black; padding:3px; margin-bottom:5px; background:#f8f8f8; -moz-border-radius:5px;}\s\n#importPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\s\n#importPanel .rad { width:auto; }\s\n#importPanel .chk { width:auto; margin:1px; }\s\n#importPanel .btn { width:auto; }\s\n#importPanel .btn1 { width:98%; }\s\n#importPanel .btn2 { width:48%; }\s\n#importPanel .btn3 { width:32%; }\s\n#importPanel .btn4 { width:24%; }\s\n#importPanel .btn5 { width:19%; }\s\n#importPanel .importButton { padding: 0em; margin: 0px; font-size:8pt; }\s\n#importPanel .importListButton { padding:0em 0.25em 0em 0.25em; color: #000000; display:inline }\s\n#importAskPanel { display:none; margin:0.5em 0em 0em 0em; }\s\n';\n//}}}\n\n// // HTML \n//{{{\nconfig.macros.importTiddlers.html = '\s\n<!-- source and report -->\s\n<table><tr><td align=left>\s\n import from\s\n <input type="radio" class="rad" name="importFrom" value="file" CHECKED\s\n onClick="document.getElementById(\s'importLocalPanel\s').style.display=this.checked?\s'block\s':\s'none\s';\s\n document.getElementById(\s'importHTTPPanel\s').style.display=!this.checked?\s'block\s':\s'none\s'"> local file\s\n <input type="radio" class="rad" name="importFrom" value="http"\s\n onClick="document.getElementById(\s'importLocalPanel\s').style.display=!this.checked?\s'block\s':\s'none\s';\s\n document.getElementById(\s'importHTTPPanel\s').style.display=this.checked?\s'block\s':\s'none\s'"> web server\s\n</td><td align=right>\s\n <input type=checkbox class="chk" id="chkImportReport" checked\s\n onClick="config.options[\s'chkImportReport\s']=this.checked;"> create a report\s\n</td></tr></table>\s\n<!-- import from local file -->\s\n<div id="importLocalPanel" style="display:block;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\s\nlocal document path/filename:<br>\s\n<input type="file" id="fileImportSource" size=57 style="width:100%"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n</div><!--panel-->\s\n\s\n<!-- import from http server -->\s\n<div id="importHTTPPanel" style="display:none;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\s\n<table><tr><td align=left>\s\n remote document URL:<br>\s\n</td><td align=right>\s\n <input type="checkbox" class="chk" id="importUseProxy"\s\n onClick="config.macros.importTiddlers.useProxy=this.checked;\s\n document.getElementById(\s'importSiteProxy\s').style.display=this.checked?\s'block\s':\s'none\s'"> use a proxy script\s\n</td></tr></table>\s\n<input type="text" id="importSiteProxy" style="display:none;margin-bottom:1px" onfocus="this.select()" value="SiteProxy"\s\n onKeyUp="config.macros.importTiddlers.proxy=this.value"\s\n onChange="config.macros.importTiddlers.proxy=this.value;">\s\n<input type="text" id="importSourceURL" onfocus="this.select()" value="SiteUrl"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n</div><!--panel-->\s\n\s\n<table><tr><td align=left>\s\n select:\s\n <a href="JavaScript:;" id="importSelectAll"\s\n onclick="onClickImportButton(this)" title="select all tiddlers">\s\n  all </a>\s\n <a href="JavaScript:;" id="importSelectNew"\s\n onclick="onClickImportButton(this)" title="select tiddlers not already in destination document">\s\n  added </a> \s\n <a href="JavaScript:;" id="importSelectChanges"\s\n onclick="onClickImportButton(this)" title="select tiddlers that have been updated in source document">\s\n  changes </a> \s\n <a href="JavaScript:;" id="importSelectDifferences"\s\n onclick="onClickImportButton(this)" title="select tiddlers that have been added or are different from existing tiddlers">\s\n  differences </a> \s\n <a href="JavaScript:;" id="importToggleFilter"\s\n onclick="onClickImportButton(this)" title="show/hide selection filter">\s\n  filter </a> \s\n</td><td align=right>\s\n <a href="JavaScript:;" id="importListSmaller"\s\n onclick="onClickImportButton(this)" title="reduce list size">\s\n  – </a>\s\n <a href="JavaScript:;" id="importListLarger"\s\n onclick="onClickImportButton(this)" title="increase list size">\s\n  + </a>\s\n <a href="JavaScript:;" id="importListMaximize"\s\n onclick="onClickImportButton(this)" title="maximize/restore list size">\s\n  = </a>\s\n</td></tr></table>\s\n<select id="importList" size=8 multiple\s\n onchange="setTimeout(\s'refreshImportList(\s'+this.selectedIndex+\s')\s',1)">\s\n <!-- NOTE: delay refresh so list is updated AFTER onchange event is handled -->\s\n</select>\s\n<input type=checkbox class="chk" id="chkAddTags" checked\s\n onClick="config.macros.importTiddlers.addTags=this.checked;">add new tags  \s\n<input type=checkbox class="chk" id="chkImportTags" checked\s\n onClick="config.macros.importTiddlers.importTags=this.checked;">import source tags  \s\n<input type=checkbox class="chk" id="chkKeepTags" checked\s\n onClick="config.macros.importTiddlers.keepTags=this.checked;">keep existing tags<br>\s\n<input type=text id="txtNewTags" size=15 onKeyUp="config.macros.importTiddlers.newTags=this.value" autocomplete=off>\s\n<div align=center>\s\n <input type=button id="importOpen" class="importButton" style="width:32%" value="open"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importStart" class="importButton" style="width:32%" value="import"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importClose" class="importButton" style="width:32%" value="close"\s\n onclick="onClickImportButton(this)">\s\n</div>\s\n<div id="importAskPanel">\s\n tiddler already exists:\s\n <input type=text id="importNewTitle" size=15 autocomplete=off">\s\n <div align=center>\s\n <input type=button id="importSkip" class="importButton" style="width:23%" value="skip"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importRename" class="importButton" style="width:23%" value="rename"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importMerge" class="importButton" style="width:23%" value="merge"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importReplace" class="importButton" style="width:23%" value="replace"\s\n onclick="onClickImportButton(this)">\s\n </div>\s\n</div>\s\n';\n//}}}\n\n// // refresh listbox\n//{{{\nfunction refreshImportList(selectedIndex)\n{\n var theList = document.getElementById("importList");\n if (!theList) return;\n // if nothing to show, reset list content and size\n if (!config.macros.importTiddlers.inbound) \n {\n while (theList.length > 0) { theList.options[0] = null; }\n theList.options[0]=new Option('please open a document...',"",false,false);\n theList.size=config.macros.importTiddlers.listsize;\n return;\n }\n // get the sort order\n if (!selectedIndex) selectedIndex=0;\n if (selectedIndex==0) config.macros.importTiddlers.sort='title'; // heading\n if (selectedIndex==1) config.macros.importTiddlers.sort='title';\n if (selectedIndex==2) config.macros.importTiddlers.sort='modified';\n if (selectedIndex==3) config.macros.importTiddlers.sort='tags';\n if (selectedIndex>3) {\n // display selected tiddler count\n for (var t=0,count=0; t < theList.options.length; t++) count+=(theList.options[t].selected&&theList.options[t].value!="")?1:0;\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n return; // no refresh needed\n }\n\n // get the alphasorted list of tiddlers (optionally, filter out unchanged tiddlers)\n var tiddlers=config.macros.importTiddlers.inbound;\n tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n // add heading and control items to list\n var i=0;\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n theList.options[i++]=new Option(tiddlers.length+' tiddler'+((tiddlers.length!=1)?'s are':' is')+' in the document',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="title" )?">":indent)+' [by title]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="modified")?">":indent)+' [by date]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="tags")?">":indent)+' [by tags]',"",false,false);\n // output the tiddler list\n switch(config.macros.importTiddlers.sort)\n {\n case "title":\n for(var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case "modified":\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });\n var lastSection = "";\n for(var t = 0; t < tiddlers.length; t++) {\n var tiddler = tiddlers[t];\n var theSection = tiddler.modified.toLocaleDateString();\n if (theSection != lastSection) {\n theList.options[i++] = new Option(theSection,"",false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n break;\n case "tags":\n var theTitles = {}; // all tiddler titles, hash indexed by tag value\n var theTags = new Array();\n for(var t=0; t<tiddlers.length; t++) {\n var title=tiddlers[t].title;\n var tags=tiddlers[t].tags;\n for(var s=0; s<tags.length; s++) {\n if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }\n theTitles[tags[s]].push(title);\n }\n }\n theTags.sort();\n for(var tagindex=0; tagindex<theTags.length; tagindex++) {\n var theTag=theTags[tagindex];\n theList.options[i++]=new Option(theTag,"",false,false);\n for(var t=0; t<theTitles[theTag].length; t++)\n theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);\n }\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n if (theList.size<config.macros.importTiddlers.listsize) theList.size=config.macros.importTiddlers.listsize;\n if (theList.size>theList.options.length) theList.size=theList.options.length;\n}\n//}}}\n\n// // Control interactions\n//{{{\nfunction onClickImportButton(which)\n{\n // DEBUG alert(which.id);\n var theList = document.getElementById('importList');\n if (!theList) return;\n var thePanel = document.getElementById('importPanel');\n var theAskPanel = document.getElementById('importAskPanel');\n var theNewTitle = document.getElementById('importNewTitle');\n var count=0;\n switch (which.id)\n {\n case 'fileImportSource':\n case 'importOpen': // load import source into hidden frame\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n if (config.macros.importTiddlers.src=="") break;\n // Load document into hidden iframe so we can read it's DOM and fill the list\n loadImportFile(config.macros.importTiddlers.src,"all",null,null,function(src,filter,quiet,ask){window.refreshImportList(0);});\n break;\n case 'importSelectAll': // select all tiddler list items (i.e., not headings)\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=true;\n count++;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectNew': // select tiddlers not in current document\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=!store.tiddlerExists(theList.options[t].value);\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectChanges': // select tiddlers that are updated from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value==""||!store.tiddlerExists(theList.options[t].value)) continue;\n for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler\n { var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }\n theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified>0); // updated tiddler\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectDifferences': // select tiddlers that are new or different from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value=="") continue;\n if (!store.tiddlerExists(theList.options[t].value)) { theList.options[t].selected=true; count++; continue; }\n for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler\n { var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }\n theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified!=0); // changed tiddler\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importToggleFilter': // show/hide filter\n case 'importFilter': // apply filter\n alert("coming soon!");\n break;\n case 'importStart': // initiate the import processing\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.index=0;\n config.macros.importTiddlers.index=importTiddlers(0);\n importStopped();\n break;\n case 'importClose': // unload imported tiddlers or hide the import control panel\n // if imported tiddlers not loaded, close the import control panel\n if (!config.macros.importTiddlers.inbound) { thePanel.style.display='none'; break; }\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n break;\n case 'importSkip': // don't import the tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status='skipped after asking'; // mark item as skipped\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index+1); // resume with NEXT item\n importStopped();\n break;\n case 'importRename': // change name of imported tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status = 'renamed from '+theImported.title; // mark item as renamed\n theImported.set(theNewTitle.value,null,null,null,null); // change the tiddler title\n theItem.value = theNewTitle.value; // change the listbox item text\n theItem.text = theNewTitle.value; // change the listbox item text\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importMerge': // join existing and imported tiddler content\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n var theText = theExisting.text+'\sn----\sn^^merged from: [['+config.macros.importTiddlers.src+'#'+theItem.value+'|'+config.macros.importTiddlers.src+'#'+theItem.value+']]^^\sn^^'+theImported.modified.toLocaleString()+' by '+theImported.modifier+'^^\sn'+theImported.text;\n var theDate = new Date();\n var theTags = theExisting.getTags()+' '+theImported.getTags();\n theImported.set(null,theText,null,theDate,theTags);\n theImported.status = 'merged with '+theExisting.title; // mark item as merged\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY hh:mm:ss");\n theImported.status += ' by '+theExisting.modifier;\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with this item\n importStopped();\n break;\n case 'importReplace': // substitute imported tiddler for existing tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n theImported.status = 'replaces '+theExisting.title; // mark item for replace\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY hh:mm:ss");\n theImported.status += ' by '+theExisting.modifier;\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importListSmaller': // decrease current listbox size, minimum=5\n if (theList.options.length==1) break;\n theList.size-=(theList.size>5)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importListLarger': // increase current listbox size, maximum=number of items in list\n if (theList.options.length==1) break;\n theList.size+=(theList.size<theList.options.length)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importListMaximize': // toggle listbox size between current and maximum\n if (theList.options.length==1) break;\n theList.size=(theList.size==theList.options.length)?config.macros.importTiddlers.listsize:theList.options.length;\n break;\n }\n}\n//}}}\n\n// // re-entrant processing for handling import with interactive collision prompting\n//{{{\nfunction importTiddlers(startIndex)\n{\n if (!config.macros.importTiddlers.inbound) return -1;\n\n var theList = document.getElementById('importList');\n if (!theList) return;\n var t;\n // if starting new import, reset import status flags\n if (startIndex==0)\n for (var t=0;t<config.macros.importTiddlers.inbound.length;t++)\n config.macros.importTiddlers.inbound[t].status="";\n for (var i=startIndex; i<theList.options.length; i++)\n {\n // if list item is not selected or is a heading (i.e., has no value), skip it\n if ((!theList.options[i].selected) || ((t=theList.options[i].value)==""))\n continue;\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==t) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theImported.title);\n // avoid redundant import for tiddlers that are listed multiple times (when 'by tags')\n if (theImported.status=="added")\n continue;\n // don't import the "ImportedTiddlers" history from the other document...\n if (theImported.title=='ImportedTiddlers')\n continue;\n // if tiddler exists and import not marked for replace or merge, stop importing\n if (theExisting && (theImported.status.substr(0,7)!="replace") && (theImported.status.substr(0,5)!="merge"))\n return i;\n // assemble tags (remote + existing + added)\n var newTags = "";\n if (config.macros.importTiddlers.importTags)\n newTags+=theImported.getTags() // import remote tags\n if (config.macros.importTiddlers.keepTags && theExisting)\n newTags+=" "+theExisting.getTags(); // keep existing tags\n if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)\n newTags+=" "+config.macros.importTiddlers.newTags; // add new tags\n theImported.set(null,null,null,null,newTags.trim());\n // set the status to 'added' (if not already set by the 'ask the user' UI)\n theImported.status=(theImported.status=="")?'added':theImported.status;\n // do the import!\n store.addTiddler(theImported);\n store.setDirty(true);\n }\n return(-1); // signals that we really finished the entire list\n}\n//}}}\n\n//{{{\nfunction importStopped()\n{\n var theList = document.getElementById('importList');\n var theNewTitle = document.getElementById('importNewTitle');\n if (!theList) return;\n if (config.macros.importTiddlers.index==-1)\n importReport(); // import finished... generate the report\n else\n {\n // DEBUG alert('import stopped at: '+config.macros.importTiddlers.index);\n // import collision... show the ask panel and set the title edit field\n document.getElementById('importAskPanel').style.display='block';\n theNewTitle.value=theList.options[config.macros.importTiddlers.index].value;\n }\n}\n//}}}\n
/***\n|!Author|Tim Morgan, http://ziddlywiki.com/forum|\n|!Compatibility|TiddlyWiki 2.0.x|\n|!Date|20060307|\n|!Translator|Roberto Ciang, mailto:Robertus0617@gmail.com|\n***/\n//''Adds "comments" to any TiddlyWiki or adaptation.''//\n//To use, copy this tiddler's contents to a new tiddler on your site and tag it "systemConfig".//\n//Used in conjunction with the RecentPlugin, one can have a decent forum environment.//\n//{{{\nconfig.CommentPlugin = {\n only_on_tags: [],\n not_on_tags: ['about'],\n // "true" or "false"...\n fold_comments: true,\n default_fold: false\n};\n\nfunction in_array(item, arr){for(var i=0;i<arr.length;i++)if(item==arr[i])return true};\nfunction one_in_array(items, arr){for(var i=0;i<items.length;i++)if(in_array(items[i], arr))return true;return false};\nfunction get_parent(tiddler){while(in_array('迴響', tiddler.tags)) tiddler=store.fetchTiddler(tiddler.tags[0]);return tiddler};\nfunction count_comments(tiddler){var tagged=store.getTaggedTiddlers(tiddler.title);var count=0;for(var i=0;i<tagged.length;i++)if(in_array('迴響', tagged[i].tags)){count++;count+=count_comments(tagged[i])}return count};\nconfig.shadowTiddlers.ViewTemplate += "\sn<div class='comments' macro='comments'></div>";\nconfig.shadowTiddlers.StyleSheetLayout += '\sn.commentTags ul{list-style:none; padding-left:0px;margin: 0 0 3px 0;} .commentTags li{display:inline;color:#999;} .commentTags li a.button{color:#999;} .comment{border-left:1px solid #ccc; margin-top:10px; margin-left:10px; padding:5px;} .newCommentLink{padding-top:10px} .tagging, .selected .tagging, .tiddler .tagging{display:none;} .comment a.button{padding:0px; font-size:smaller;}';\nconfig.macros.newCommentLink = {\n label: '我要回應這則記事↑',\n prompt: '對這則記事提出意見或迴響,形成討論串',\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler && store.tiddlerExists(tiddler.title) && !readOnly && (!window.zw || zw.loggedIn || zw.anonEdit)) {\n if(config.CommentPlugin.only_on_tags.length>0 && !one_in_array(tiddler.tags, config.CommentPlugin.only_on_tags)) return;\n if(config.CommentPlugin.not_on_tags.length>0 && one_in_array(tiddler.tags, config.CommentPlugin.not_on_tags)) return;\n var onclick = function(e) {\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n if(tiddler.title.indexOf('迴響')>-1) var title = tiddler.title.slice(22,-4);\n else var title = tiddler.title;\n var title = '在' + (new Date()).formatString('YYYY/0MM/0DD 0hh:0mm:0ss') + '對「' + title + '」的迴響';\n var comment = store.createTiddler(title);\n comment.text = '';\n comment.tags = [tiddler.title, '迴響', 'excludeLists'];\n story.displayTiddler(theTarget, title, DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(title,"text");\n return false;\n }\n createTiddlyButton(place, this.label, this.prompt, onclick);\n }\n }\n};\nconfig.macros.comments = {\n dateFormat: 'YYYY年MMMDD日 hh:0mm',\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler.title=='迴響') return;\n var comments = store.getTaggedTiddlers(tiddler.title, 'created');\n if(comments.length>0 && !in_array('迴響', tiddler.tags) && config.CommentPlugin.fold_comments) {\n var show = createTiddlyElement(place, 'p');\n show.innerHTML = '<a href="#" onclick="var e=document.getElementById(\s'comments'+tiddler.title+'\s');e.style.display=e.style.display==\s'block\s'?\s'none\s':\s'block\s';return false;">'+count_comments(tiddler)+'篇迴響 »</a>';\n }\n var place = createTiddlyElement(place, 'div', 'comments'+tiddler.title, 'comments');\n if(comments.length>0 && !in_array('迴響', tiddler.tags) && config.CommentPlugin.fold_comments && config.CommentPlugin.default_fold)\n place.style.display = 'none';\n else\n place.style.display = 'block';\n for(var i=0; i<comments.length; i++) {\n if(!in_array('迴響', comments[i].tags))continue;\n var container = createTiddlyElement(place, 'div', null, 'comment');\n var title = createTiddlyElement(container, 'strong');\n var link = createTiddlyLink(title, comments[i].modifier, true);\n createTiddlyElement(title, 'span', null, null, ', '+comments[i].created.formatString(this.dateFormat));\n if(comments[i].modifier == config.options.txtUserName) {\n createTiddlyElement(title, 'span', null, null, ' (');\n var edit = createTiddlyLink(title, comments[i].title);\n edit.innerHTML = '修改';\n createTiddlyElement(title, 'span', null, null, ')');\n }\n createTiddlyElement(container, 'br');\n config.macros.tiddler.handler(container, null, [comments[i].title]);\n createTiddlyElement(container, 'br');\n config.macros.comments.handler(container,null,null,null,null,comments[i]);\n }\n config.macros.newCommentLink.handler(place,null,null,null,null,tiddler);\n }\n};\nvar CPCloseTiddlers = [];\nTiddlyWiki.prototype.CommentPlugin_saveTiddler = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n var t = this.CommentPlugin_saveTiddler(title,newTitle,newBody,modifier,modified,tags);\n var tags = tags.split(/\ss+/g);\n if(in_array('迴響', tags)) {\n var original = config.CommentPlugin.default_fold;\n config.CommentPlugin.default_fold = false;\n story.refreshTiddler(get_parent(t).title, DEFAULT_VIEW_TEMPLATE, true);\n config.CommentPlugin.default_fold = original;\n CPCloseTiddlers.push(newTitle);\n setTimeout("story.closeTiddler(CPCloseTiddlers.pop(), true)", 1000);\n }\n return t;\n};\n//}}}
//''Adds "comments" to any TiddlyWiki or adaptation.''//\n//To use, copy this tiddler's contents to a new tiddler on your site and tag it "systemConfig".//\n//Used in conjunction with the RecentPlugin, one can have a decent forum environment.//\n{{{\nconfig.CommentPlugin = {\n only_on_tags: [],\n not_on_tags: ['about'],\n // "true" or "false"...\n fold_comments: true,\n default_fold: false\n};\n\nfunction in_array(item, arr){for(var i=0;i<arr.length;i++)if(item==arr[i])return true};\nfunction one_in_array(items, arr){for(var i=0;i<items.length;i++)if(in_array(items[i], arr))return true;return false};\nfunction get_parent(tiddler){while(in_array('comments', tiddler.tags)) tiddler=store.fetchTiddler(tiddler.tags[0]);return tiddler};\nfunction count_comments(tiddler){var tagged=store.getTaggedTiddlers(tiddler.title);var count=0;for(var i=0;i<tagged.length;i++)if(in_array('comments', tagged[i].tags)){count++;count+=count_comments(tagged[i])}return count};\nconfig.shadowTiddlers.ViewTemplate += "\sn<div class='comments' macro='comments'></div>";\nconfig.shadowTiddlers.StyleSheetLayout += '\sn.commentTags ul{list-style:none; padding-left:0px;margin: 0 0 3px 0;} .commentTags li{display:inline;color:#999;} .commentTags li a.button{color:#999;} .comment{border-left:1px solid #ccc; margin-top:10px; margin-left:10px; padding:5px;} .newCommentLink{padding-top:10px} .tagging, .selected .tagging, .tiddler .tagging{display:none;} .comment a.button{padding:0px; font-size:smaller;}';\nconfig.macros.newCommentLink = {\n label: 'New Comment Here...',\n prompt: 'Create a new comment tiddler associated with this tiddler',\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler && store.tiddlerExists(tiddler.title) && !readOnly && (!window.zw || zw.loggedIn || zw.anonEdit)) {\n if(config.CommentPlugin.only_on_tags.length>0 && !one_in_array(tiddler.tags, config.CommentPlugin.only_on_tags)) return;\n if(config.CommentPlugin.not_on_tags.length>0 && one_in_array(tiddler.tags, config.CommentPlugin.not_on_tags)) return;\n var onclick = function(e) {\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n if(tiddler.title.indexOf(' Comment ')>-1) var title = tiddler.title.split(' Comment ')[0];\n else var title = tiddler.title;\n var title = title + ' Comment ' + (new Date()).formatString('YYYY-0MM-0DD 0hh:0mm:0ss');\n var comment = store.createTiddler(title);\n comment.text = '';\n comment.tags = [tiddler.title, 'comments', 'excludeLists'];\n story.displayTiddler(theTarget, title, DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(title,"text");\n return false;\n }\n createTiddlyButton(place, this.label, this.prompt, onclick);\n }\n }\n};\nconfig.macros.comments = {\n dateFormat: 'DD MMM YYYY hh:0mm',\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler.title=='comments') return;\n var comments = store.getTaggedTiddlers(tiddler.title, 'created');\n if(comments.length>0 && !in_array('comments', tiddler.tags) && config.CommentPlugin.fold_comments) {\n var show = createTiddlyElement(place, 'p');\n show.innerHTML = '<a href="#" onclick="var e=document.getElementById(\s'comments'+tiddler.title+'\s');e.style.display=e.style.display==\s'block\s'?\s'none\s':\s'block\s';return false;">Comments ('+count_comments(tiddler)+') »</a>';\n }\n var place = createTiddlyElement(place, 'div', 'comments'+tiddler.title, 'comments');\n if(comments.length>0 && !in_array('comments', tiddler.tags) && config.CommentPlugin.fold_comments && config.CommentPlugin.default_fold)\n place.style.display = 'none';\n else\n place.style.display = 'block';\n for(var i=0; i<comments.length; i++) {\n if(!in_array('comments', comments[i].tags))continue;\n var container = createTiddlyElement(place, 'div', null, 'comment');\n var title = createTiddlyElement(container, 'strong');\n var link = createTiddlyLink(title, comments[i].modifier, true);\n createTiddlyElement(title, 'span', null, null, ', '+comments[i].created.formatString(this.dateFormat));\n if(comments[i].modifier == config.options.txtUserName) {\n createTiddlyElement(title, 'span', null, null, ' (');\n var edit = createTiddlyLink(title, comments[i].title);\n edit.innerHTML = 'edit';\n createTiddlyElement(title, 'span', null, null, ')');\n }\n createTiddlyElement(container, 'br');\n config.macros.tiddler.handler(container, null, [comments[i].title]);\n createTiddlyElement(container, 'br');\n config.macros.comments.handler(container,null,null,null,null,comments[i]);\n }\n config.macros.newCommentLink.handler(place,null,null,null,null,tiddler);\n }\n};\nvar CPCloseTiddlers = [];\nTiddlyWiki.prototype.CommentPlugin_saveTiddler = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n var t = this.CommentPlugin_saveTiddler(title,newTitle,newBody,modifier,modified,tags);\n var tags = tags.split(/\ss+/g);\n if(in_array('comments', tags)) {\n var original = config.CommentPlugin.default_fold;\n config.CommentPlugin.default_fold = false;\n story.refreshTiddler(get_parent(t).title, DEFAULT_VIEW_TEMPLATE, true);\n config.CommentPlugin.default_fold = original;\n CPCloseTiddlers.push(newTitle);\n setTimeout("story.closeTiddler(CPCloseTiddlers.pop(), true)", 1000);\n }\n return t;\n};\n}}}
/***\n|''Name:''|CommentPlugin|\n|''Source:''|https://sourceforge.net/projects/ptw/|\n|''Author:''|Tim Morgan (Trad. Chinese translated by Bram Chen|\n|''Desc:''|''Adds "comments" to any TiddlyWiki or adaptation.''|\n| |Used in conjunction with the RecentPlugin, one can have a decent forum environment.|\n''Syntax:'' {{{}}}\n''Revision history:''\n* v0.1.0 (Mar 13, 2006) Initial Translating to Trad. Chinese by Bram Chen.\n***/\n// //''Code section:''\n//{{{\nconfig.CommentPlugin = {\n only_on_tags: [],\n not_on_tags: ['about'],\n // "true" or "false"...\n fold_comments: true,\n default_fold: false\n};\n\nfunction in_array(item, arr){for(var i=0;i<arr.length;i++)if(item==arr[i])return true};\nfunction one_in_array(items, arr){for(var i=0;i<items.length;i++)if(in_array(items[i], arr))return true;return false};\nfunction get_parent(tiddler){while(in_array('意見', tiddler.tags)) tiddler=store.fetchTiddler(tiddler.tags[0]);return tiddler};\nfunction count_comments(tiddler){var tagged=store.getTaggedTiddlers(tiddler.title);var count=0;for(var i=0;i<tagged.length;i++)if(in_array('意見', tagged[i].tags)){count++;count+=count_comments(tagged[i])}return count};\nconfig.shadowTiddlers.ViewTemplate += "\sn<div class='comments' macro='comments'></div>";\nconfig.shadowTiddlers.StyleSheetLayout += '\sn.commentTags ul{list-style:none; padding-left:0px;margin: 0 0 3px 0;} .commentTags li{display:inline;color:#999;} .commentTags li a.button{color:#999;} .comment{border-left:1px solid #ccc; margin-top:10px; margin-left:10px; padding:5px;} .newCommentLink{padding-top:10px} .tagging, .selected .tagging, .tiddler .tagging{display:none;} .comment a.button{padding:0px; font-size:smaller;}';\nconfig.macros.newCommentLink = {\n label: '討論 »',\n prompt: '發表意見',\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler && store.tiddlerExists(tiddler.title) && !readOnly && (!window.zw || zw.loggedIn || zw.anonEdit)) {\n if(config.CommentPlugin.only_on_tags.length>0 && !one_in_array(tiddler.tags, config.CommentPlugin.only_on_tags)) return;\n if(config.CommentPlugin.not_on_tags.length>0 && one_in_array(tiddler.tags, config.CommentPlugin.not_on_tags)) return;\n var onclick = function(e) {\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n if(tiddler.title.indexOf('意見')>-1) var title = tiddler.title.slice(22,-4);\n else var title = tiddler.title;\n var title = '《' + title + '》,' + (new Date()).formatString('YYYY0MM0DD 0hh:0mm:0ss');\n var comment = store.createTiddler(title);\n comment.text = '';\n comment.tags = [tiddler.title, '意見', 'excludeLists'];\n story.displayTiddler(theTarget, title, DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(title,"text");\n return false;\n }\n createTiddlyButton(place, this.label, this.prompt, onclick);\n }\n }\n};\nconfig.macros.comments = {\n dateFormat: 'YYYY0MM0DD 0hh:0mm',\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler.title=='意見') return;\n var comments = store.getTaggedTiddlers(tiddler.title, 'created');\n if(comments.length>0 && !in_array('意見', tiddler.tags) && config.CommentPlugin.fold_comments) {\n var show = createTiddlyElement(place, 'p');\n show.innerHTML = '<a href="#" onclick="var e=document.getElementById(\s'comments'+tiddler.title+'\s');e.style.display=e.style.display==\s'block\s'?\s'none\s':\s'block\s';return false;">意見 ('+count_comments(tiddler)+') »</a>';\n }\n var place = createTiddlyElement(place, 'div', 'comments'+tiddler.title, 'comments');\n if(comments.length>0 && !in_array('意見', tiddler.tags) && config.CommentPlugin.fold_comments && config.CommentPlugin.default_fold)\n place.style.display = 'none';\n else\n place.style.display = 'block';\n for(var i=0; i<comments.length; i++) {\n if(!in_array('意見', comments[i].tags))continue;\n var container = createTiddlyElement(place, 'div', null, 'comment');\n var title = createTiddlyElement(container, 'strong');\n var link = createTiddlyLink(title, comments[i].modifier, true);\n createTiddlyElement(title, 'span', null, null, ', '+comments[i].created.formatString(this.dateFormat));\n if(comments[i].modifier == config.options.txtUserName) {\n createTiddlyElement(title, 'span', null, null, ' (');\n var edit = createTiddlyLink(title, comments[i].title);\n edit.innerHTML = '編輯';\n createTiddlyElement(title, 'span', null, null, ')');\n }\n createTiddlyElement(container, 'br');\n config.macros.tiddler.handler(container, null, [comments[i].title]);\n createTiddlyElement(container, 'br');\n config.macros.comments.handler(container,null,null,null,null,comments[i]);\n }\n config.macros.newCommentLink.handler(place,null,null,null,null,tiddler);\n }\n};\nvar CPCloseTiddlers = [];\nTiddlyWiki.prototype.CommentPlugin_saveTiddler = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n var t = this.CommentPlugin_saveTiddler(title,newTitle,newBody,modifier,modified,tags);\n var tags = tags.split(/\ss+/g);\n if(in_array('意見', tags)) {\n var original = config.CommentPlugin.default_fold;\n config.CommentPlugin.default_fold = false;\n story.refreshTiddler(get_parent(t).title, DEFAULT_VIEW_TEMPLATE, true);\n config.CommentPlugin.default_fold = original;\n CPCloseTiddlers.push(newTitle);\n setTimeout("story.closeTiddler(CPCloseTiddlers.pop(), true)", 1000);\n }\n return t;\n};\n//}}}
//''Shows DefaultTiddlers + most recently modified tiddlers as default when any TiddlyWiki or adaptation is first loaded.''//\n//To use, copy this tiddler's contents to a new tiddler on your site and tag it "systemConfig".//\n\n{{{\nvar num = 7;\nvar ignore_tags = ['systemConfig', 'systemTiddlers', 'DefaultTiddlers', 'excludeLists'];\n\nfunction in_array(item, arr){for(var i=0;i<arr.length;i++)if(item==arr[i])return true};\nfunction get_parent(tiddler){while(tiddler && in_array('迴響', tiddler.tags)) tiddler=store.fetchTiddler(tiddler.tags[0]);return tiddler};\nfunction unique_list(list){var l=[];for(i=0;i<list.length;i++)if(!in_array(list[i], l))l.push(list[i]);return l};\nfunction get_recent_tiddlers(){\n var tiddlers = store.getTiddlers('modified');\n var names = store.getTiddlerText("DefaultTiddlers").readBracketedList();\n var ignore_tiddlers = [];\n for(var i=0; i<ignore_tags.length; i++)\n ignore_tiddlers=ignore_tiddlers.concat(store.getTaggedTiddlers(ignore_tags[i]));\n for(var i=tiddlers.length-1; i>=0; i--) {\n if(in_array('迴響', tiddlers[i].tags)) {\n var t = get_parent(tiddlers[i]);\n if(t)names.push(t.title)\n }\n else if(!in_array(tiddlers[i], ignore_tiddlers))\n names.push(tiddlers[i].title);\n }\n return unique_list(names).slice(0, num);\n}\nvar names = get_recent_tiddlers();\n_restart = restart\nrestart = function() {\n if(window.location.hash) _restart();\n else story.displayTiddlers(null,names);\n}\n}}}
/***\n|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|\n|''Version:''|1.0.5 (2006-03-02)|\n|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''TiddlyWiki:''|2.0|\n|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|\n!Table of Content<html><a name="TOC"/></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>\n!Description<html><a name="Description"/></html>\nWith the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts. \nEach part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features"). E.g. you may create links to the parts, use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.\n\n''Syntax:'' \n|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|\n|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//.|\n|''hidden''|When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|\n|<html><i>any tiddler content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Applications<html><a name="Applications"/></html>\n!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>\nAssume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.\n\nNotice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Citation Index<html><a name="Citation"/></html>\nCreate a tiddler "Citations" that contains your "citations". \nWrap every citation with a part and a proper name. \n\n''Example''\n{{{\n<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.// \nin //Proc. ICSM//, 1998.</part>\n\n<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.// \nThesis, Uni Stuttgart, 2002.</part>\n\n<part DUC99>Ducasse, Stéfane et al: //A Language Independent Approach for Detecting Duplicated Code.// \nin //Proc. ICSM//, 1999.</part>\n}}}\n\nYou may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>\nYou may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list\n{{{\n* Item 1\n* Item 2\n* Item 3\n}}}\ninto a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.\n\nUsing the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.\n\n''Example''\n{{{\n|!Subject|!Items|\n|subject1|<<tiddler ./Cell1>>|\n|subject2|<<tiddler ./Cell2>>|\n\n<part Cell1 hidden>\n* Item 1\n* Item 2\n* Item 3\n</part>\n...\n}}}\n\nNotice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".\n\nBTW: The same approach can be used to create bullet lists with items that contain more than one line.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Creating Tabs<html><a name="Tabs"/></html>\nThe build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.\n\nWith the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.\n\n''Example''\nThe standard tabs at the sidebar are defined by the following eight tiddlers:\n* SideBarTabs\n* TabAll\n* TabMore\n* TabMoreMissing\n* TabMoreOrphans\n* TabMoreShadowed\n* TabTags\n* TabTimeline\n\nInstead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:\n{{{\n<<tabs txtMainTab \n Timeline Timeline SideBarTabs/Timeline \n All 'All tiddlers' SideBarTabs/All \n Tags 'All tags' SideBarTabs/Tags \n More 'More lists' SideBarTabs/More>>\n<part Timeline hidden><<timeline>></part>\n<part All hidden><<list all>></part>\n<part Tags hidden><<allTags>></part>\n<part More hidden><<tabs txtMoreTab \n Missing 'Missing tiddlers' SideBarTabs/Missing \n Orphans 'Orphaned tiddlers' SideBarTabs/Orphans \n Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>\n<part Missing hidden><<list missing>></part>\n<part Orphans hidden><<list orphans>></part>\n<part Shadowed hidden><<list shadowed>></part>\n}}}\n\nNotice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.\n\nE.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler "~SideBarTabs/Timeline" with the following content:\n{{{\n<<forEachTiddler \n sortBy 'tiddler.modified' descending \n write '(index < 100) ? "* [["+tiddler.title+"]]\sn":""'>>\n}}}\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Using Sliders<html><a name="Sliders"/></html>\nVery similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature\n\n''Example''\nIn a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.\n{{{\n...\n<<slider chkAboutDetails About/Details details "Click here to see more details">>\n<part Details hidden>\nTo give you a better overview ...\n</part>\n...\n}}}\n\nNotice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the "old" approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the ''part'' approach results in a much short workflow.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Revision history<html><a name="Revisions"/></html>\n* v1.0.5 (2006-03-02)\n** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.\n* v1.0.4 (2006-02-28)\n** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.\n* v1.0.3 (2006-02-26)\n** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.\n* v1.0.2 (2006-02-05)\n** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)\n* v1.0.1 (2006-01-27)\n** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.\n** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.\n* v1.0.0 (2006-01-25)\n** initial version\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Code<html><a name="Code"/></html>\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n***/\n//{{{\n//============================================================================\n// PartTiddlerPlugin\n\n// Ensure that the PartTiddler Plugin is only installed once.\n//\nif (!version.extensions.PartTiddlerPlugin) {\n\n\n\nversion.extensions.PartTiddlerPlugin = {\n major: 1, minor: 0, revision: 5,\n date: new Date(2006, 3, 2), \n type: 'plugin',\n source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"\n};\n\nif (!window.abego) window.abego = {};\nif (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");\n\n//============================================================================\n// Common Helpers\n\n// Looks for the next newline, starting at the index-th char of text. \n//\n// If there are only whitespaces between index and the newline \n// the index behind the newline is returned, \n// otherwise (or when no newline is found) index is returned.\n//\nvar skipEmptyEndOfLine = function(text, index) {\n var re = /(\sn|[^\ss])/g;\n re.lastIndex = index;\n var result = re.exec(text);\n return (result && text.charAt(result.index) == '\sn') \n ? result.index+1\n : index;\n}\n\n\n//============================================================================\n// Constants\n\nvar partEndOrStartTagRE = /(<\s/part>)|(<part(?:\ss+)((?:[^>])+)>)/mg;\nvar partEndTagREString = "<\s\s/part>";\nvar partEndTagString = "</part>";\n\n//============================================================================\n// Plugin Specific Helpers\n\n// Parse the parameters inside a <part ...> tag and return the result.\n//\n// @return [may be null] {partName: ..., isHidden: ...}\n//\nvar parseStartTagParams = function(paramText) {\n var params = paramText.readMacroParams();\n if (params.length == 0 || params[0].length == 0) return null;\n \n var name = params[0];\n var paramsIndex = 1;\n var hidden = false;\n if (paramsIndex < params.length) {\n hidden = params[paramsIndex] == "hidden";\n paramsIndex++;\n }\n \n return {\n partName: name, \n isHidden: hidden\n };\n}\n\n// Returns the match to the next (end or start) part tag in the text, \n// starting the search at startIndex.\n// \n// When no such tag is found null is returned, otherwise a "Match" is returned:\n// [0]: full match\n// [1]: matched "end" tag (or null when no end tag match)\n// [2]: matched "start" tag (or null when no start tag match)\n// [3]: content of start tag (or null if no start tag match)\n//\nvar findNextPartEndOrStartTagMatch = function(text, startIndex) {\n var re = new RegExp(partEndOrStartTagRE);\n re.lastIndex = startIndex;\n var match = re.exec(text);\n return match;\n}\n\n//============================================================================\n// Formatter\n\n// Process the <part ...> ... </part> starting at (w.source, w.matchStart) for formatting.\n//\n// @return true if a complete part section (including the end tag) could be processed, false otherwise.\n//\nvar handlePartSection = function(w) {\n var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);\n if (!tagMatch) return false;\n if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;\n\n // Parse the start tag parameters\n var arguments = parseStartTagParams(tagMatch[3]);\n if (!arguments) return false;\n \n // Continue processing\n var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);\n var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);\n if (endMatch && endMatch[1]) {\n if (!arguments.isHidden) {\n w.nextMatch = startTagEndIndex;\n w.subWikify(w.output,partEndTagREString);\n }\n w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);\n \n return true;\n }\n return false;\n}\n\nconfig.formatters.push( {\n name: "part",\n match: "<part\s\ss+[^>]+>",\n \n handler: function(w) {\n if (!handlePartSection(w)) {\n w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);\n }\n }\n} )\n\n//============================================================================\n// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers \n// as tiddlers.\n\nvar currentParent = null; // used for the "." parent (e.g. in the "tiddler" macro)\n\n// Return the match to the first <part ...> tag of the text that has the\n// requrest partName.\n//\n// @return [may be null]\n//\nvar findPartStartTagByName = function(text, partName) {\n var i = 0;\n \n while (true) {\n var tagMatch = findNextPartEndOrStartTagMatch(text, i);\n if (!tagMatch) return null;\n\n if (tagMatch[2]) {\n // Is start tag\n \n // Check the name\n var arguments = parseStartTagParams(tagMatch[3]);\n if (arguments && arguments.partName == partName) {\n return tagMatch;\n }\n }\n i += tagMatch[0].length;\n }\n}\n\n// Return the part "partName" of the given parentTiddler as a "readOnly" Tiddler \n// object, using fullName as the Tiddler's title. \n//\n// All remaining properties of the new Tiddler (tags etc.) are inherited from \n// the parentTiddler.\n// \n// @return [may be null]\n//\nvar getPart = function(parentTiddler, partName, fullName) {\n var text = parentTiddler.text;\n var startTag = findPartStartTagByName(text, partName);\n if (!startTag) return null;\n \n var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);\n var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);\n\n if (indexOfEndTag >= 0) {\n var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);\n var partTiddler = new Tiddler();\n partTiddler.set(\n fullName,\n partTiddlerText,\n parentTiddler.modifier,\n parentTiddler.modified,\n parentTiddler.tags,\n parentTiddler.created);\n partTiddler.hasReadOnlyFlag = true;\n return partTiddler;\n }\n \n return null;\n}\n\n// Hijack the store.fetchTiddler to recognize the "part" addresses.\n//\n\nvar oldFetchTiddler = store.fetchTiddler ;\nstore.fetchTiddler = function(title) {\n var result = oldFetchTiddler.apply(this, arguments);\n if (!result && title) {\n var i = title.lastIndexOf('/');\n if (i > 0) {\n var parentName = title.substring(0, i);\n var partName = title.substring(i+1);\n var parent = (parentName == ".") \n ? currentParent \n : oldFetchTiddler.apply(this, [parentName]);\n if (parent) {\n return getPart(parent, partName, parent.title+"/"+partName);\n }\n }\n }\n return result; \n};\n\n\n// The user must not edit a readOnly/partTiddler\n//\n\nconfig.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;\n\nTiddler.prototype.isReadOnly = function() {\n // Tiddler.isReadOnly was introduced with TW 2.0.6.\n // For older version we explicitly check the global readOnly flag\n if (config.commands.editTiddler.oldIsReadOnlyFunction) {\n if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;\n } else {\n if (readOnly) return true;\n }\n\n return this.hasReadOnlyFlag;\n}\n\nconfig.commands.editTiddler.handler = function(event,src,title)\n{\n var t = store.getTiddler(title);\n // Edit the tiddler if it either is not a tiddler (but a shadowTiddler)\n // or the tiddler is not readOnly\n if(!t || !t.isReadOnly())\n {\n clearMessage();\n story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(title,"text");\n return false;\n }\n}\n\n// To allow the "./partName" syntax in macros we need to hijack \n// the invokeMacro to define the "currentParent" while it is running.\n// \nvar oldInvokeMacro = window.invokeMacro;\nfunction myInvokeMacro(place,macro,params,wikifier,tiddler) {\n var oldCurrentParent = currentParent;\n if (tiddler) currentParent = tiddler;\n try {\n oldInvokeMacro.apply(this, arguments);\n } finally {\n currentParent = oldCurrentParent;\n }\n}\nwindow.invokeMacro = myInvokeMacro;\n\n// Scroll the anchor anchorName in the viewer of the given tiddler visible.\n// When no tiddler is defined use the tiddler of the target given event is used.\nwindow.scrollAnchorVisible = function(anchorName, tiddler, evt) {\n var tiddlerElem = null;\n if (tiddler) {\n tiddlerElem = document.getElementById(story.idPrefix + tiddler);\n }\n if (!tiddlerElem && evt) {\n var target = resolveTarget(evt);\n tiddlerElem = story.findContainingTiddler(target);\n }\n if (!tiddlerElem) return;\n\n var children = tiddlerElem.getElementsByTagName("a");\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n var name = child.getAttribute("name");\n if (name == anchorName) {\n var y = findPosY(child);\n window.scrollTo(0,y);\n return;\n }\n }\n}\n\n} // of "install only once"\n//}}}\n\n/***\n<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\n<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n***/\n
/***\n\n''This plugin was previously called StyleChooser.''\n\n|Name|SelectThemePlugin|\n|Created by|SimonBaird and SaqImtiaz|\n|Location|http://lewcid.googlepages.com/lewcid.html#SelectTheme|\n|Version|1.2.2|\n|Requires|~TW2.x|\n!Description\n*An alternative style switcher, can be used to switch just stylesheets and/or pagetemplates, or a combination of both (a theme)\n*you can add your own stylesheets and pagetemplates, or use a ThemePack, like BigThemePack.\n\n!Usage\n* You have to have fetch or create some styleSheets and pageTemplates to use this plugin.\n**You can either get a ThemePack like BigThemePack which automatically adds themes to ThemeSelect.\n**or create tiddlers with styleSheets and pageTemplates and tag them styleSheets and pageTemplates respectively.\n* Put {{{<<themeSelect style 'Select theme'>>}}} in your SideBarOptions. Mmm.. lovely.\n\n!Creating Theme Packs\n*You can create your own theme pack if you like. Instructions can be found [[here.|ThemePack]]\n\n!History\n* 28-Apr-o6, v1.2.2, fixed bug with opening TW after deleting themepacks. (Saq)\n* 26-Apr-06, v1.2.1, more code optimization, dropdowns now updated on the fly. (Saq)\n* 25-Apr-06, v1.2.0, added 3rd party ThemePack support, and made various other improvements.(Simon & Saq)\n* 24-Apr-06, v1.1.0, added: no styles and default styles options,<<br>>support for ThemePack, support for tag variations(Saq)\n* 21-Apr-06, v1.0.0, Reworked dropdowns to include option for pagetemplates (Saq)\n* 21-Apr-06, v0.9.0, Rewrote and added Saq's lovely dropdown select (Simon)\n* 20-Apr-06, v0.0.1, Basic switcher working (Simon)\n\n!Examples\n|!Source|!Output|h\n|{{{<<themeSelect style>>}}} for a dropdown with StyleSheets|<<themeSelect style>>|\n|{{{<<themeSelect pagetemplate>>}}} for a dropdown with PageTemplates|<<themeSelect pagetemplate>>|\n|{{{<<themeSelect style customlabel>>}}} to use a customlabel|<<themeSelect style customlabel>>|\n* When applying a stylesheet or template, it also looks for a template or stylesheet respectively based on naming convention, eg MyFunkyStyleSheet and MyFunkyPageTemplate.\n\n!Notes\n* See also http://www.tiddlytools.com/#SelectStyleSheetPlugin for a more feature rich style sheet switcher\n\n! Ideas\n* do ViewTemplate also?\n* Pretty up the [x] bit\n\n!Code\n***/\n//{{{\n// for compatibility with TW <2.0.9\nif (!Array.prototype.contains)\n Array.prototype.contains = function(item)\n {\n return this.find(item) != null;\n };\n\n// for compatibility with TW <2.0.9\nif (!Array.prototype.containsAny)\n Array.prototype.containsAny = function(items)\n {\n for(var i=0; i<items.length; i++)\n if (this.contains(items[i]))\n return true;\n return false;\n };\n//}}}\n\n//{{{\nversion.extensions.SelectTheme = { major: 1, minor: 2, revision: 2, date: new Date(2006,4,28),\n source: "http://lewcid.googlepages.com/lewcid.html#SelectTheme"\n};\n\nconfig.SelectTheme = {\n things: {\n style: {\n tag: ["StyleSheets","StyleSheet","styleSheet","styleSheets","stylesheet","stylesheets"],\n theDefault: "StyleSheet",\n suffix: "StyleSheet",\n notify: refreshStyles,\n cookie: "txtStyleSheet",\n otherThing: "pagetemplate",\n label: "Choose StyleSheet: ",\n tooltip: "Choose a StyleSheet",\n caseNone: { text:"None", title:"NoStyleSheet"},\n caseDefault: { text:"Default", title:"StyleSheet" }\n\n },\n pagetemplate: {\n tag: ["PageTemplates","PageTemplate","pageTemplates","pageTemplate","pagetemplate","pagetemplates"],\n theDefault: "PageTemplate",\n suffix: "PageTemplate",\n notify: refreshPageTemplate,\n cookie: "txtPageTemplate",\n otherThing: "style",\n label: "Choose PageTemplate: ",\n tooltip: "Choose a PageTemplate",\n caseNone: { text:"None", title:"NoPageTemplate"},\n caseDefault: { text:"Default", title:"PageTemplate" }\n }\n\n },\n\n specialCases: ["caseNone","caseDefault"]\n\n};\n\nTiddlyWiki.prototype.removeNotification = function(title,fn) {\n for (var i=0;i<this.namedNotifications.length;i++)\n if((this.namedNotifications[i].name == title) && (this.namedNotifications[i].notify == fn))\n this.namedNotifications.splice(i,1); // counting on it only being there once\n}\n\n\nvar things = config.SelectTheme.things;\nvar specialCases=config.SelectTheme.specialCases;\n\nfor (var t in things) {\n // make sure we have a value\n if (!config.options[things[t].cookie])\n config.options[things[t].cookie] = things[t].theDefault;\n\n // remove core notify\n store.removeNotification(things[t].theDefault,things[t].notify);\n\n // and add our one\n store.addNotification(config.options[things[t].cookie],things[t].notify);\n\n}\n\n//checks to see if a tiddler exists in store or as a shadow.\nTiddlyWiki.prototype.isTiddler= function (title)\n {return store.tiddlerExists(title) || store.isShadowTiddler(title)}\n\n//hijack core function & make sure template exists\nwindow.applyPageTemplate_themeSelect=window.applyPageTemplate;\nwindow.applyPageTemplate=function(title){\n if(!store.isTiddler(title))\n {title = things.pagetemplate.theDefault;}\n applyPageTemplate_themeSelect(title);\n }\n\nTiddlyWiki.prototype.makeActiveTheme = function(what,title,alsoCheckOtherThing) {\n\n var thing = things[what];\n if (!store.isTiddler(title))\n title = thing.theDefault;\n\n var oldTitle = config.options[thing.cookie];\n\n if (what == "style") {\n // remove old style element from DOM\n var oldStyleElement = document.getElementById(oldTitle);\n oldStyleElement.parentNode.removeChild(oldStyleElement);\n }\n\n store.removeNotification(oldTitle,thing.notify);\n store.addNotification(title,thing.notify);\n store.notify(title);\n\n config.options[thing.cookie] = title;\n saveOptionCookie(thing.cookie);\n if (alsoCheckOtherThing)\n this.makeActiveTheme(thing.otherThing,\n title.replace(new RegExp(thing.suffix+"$"),"") + things[thing.otherThing].suffix,\n false);\n};\n\n\nconfig.shadowTiddlers.NoStyleSheet = "";\nconfig.shadowTiddlers.NoPageTemplate = config.shadowTiddlers.PageTemplate;\n\n\nfunction switchTheme(e){\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theLink = theTarget;\n var switchTo= theLink.getAttribute("switchTo");\n var mode = theLink.getAttribute("mode");\n if ((config.options[things[mode].cookie])!=switchTo)\n {store.makeActiveTheme(mode,switchTo,true);};\n return(false);\n}\n\n\nconfig.macros.themeSelect={};\nconfig.macros.themeSelect.dropdownchar = (document.all?"▼":"▾");\nconfig.macros.themeSelect.handler = function(place,macroName,params,wikifier,paramString,tiddler){\n var arrow = config.macros.themeSelect.dropdownchar;\n var mode = params[0];\n var label = (params[1]?params[1]:things[mode].label) + arrow;\n var cookie = (config.options[things[mode].cookie]);\n\n var onclick = function(e)\n { if (!e) var e = window.event;\n var popup = Popup.create(this);\n\n var tagged=[];\n\n store.forEachTiddler(function(title,tiddler) {\n if ((tiddler.tags).containsAny(things[mode].tag)){\n tagged.push(tiddler.title);}\n });\n\n //integrate ThemePacks\n if (config.themes) {\n // see what themes have been loaded...\n for (var i=0;i<config.themes.length;i++) {\n // see if there is one\n var lookForThis = config.themes[i] + things[mode].suffix;\n if (store.isShadowTiddler(lookForThis)) {\n tagged.pushUnique(lookForThis);\n }\n }\n tagged = tagged.sort();\n }\n\n //this function used later to create buttons\n var createThemeButton = function(switchTo){\n var theButton = createTiddlyButton(createTiddlyElement(popup,"li"),text,null,switchTheme,useClass);\n theButton.setAttribute("switchTo",switchTo);\n theButton.setAttribute("mode",mode);};\n\n //create Buttons for None(shadow styles) & Default (StyleSheet)\n // Default button is not created if StyleSheet doesnt exist.\n for(var t=0; t<specialCases.length; t++){\n var special = specialCases[t];\n var text = things[mode][special].text;\n var useClass = "tiddlyLinkExisting"; //redundant, optimize!\n if ((things[mode][special].title==cookie)||(special=="caseNone"&&!store.isTiddler(cookie)))\n {text+= " [x]";\n useClass = "currentlySelected";}\n if (!((special=="caseDefault")&&(!store.getTiddler(things[mode][special].title))))\n createThemeButton(things[mode][special].title); }\n\n //insert horizontal rule\n createTiddlyElement(createTiddlyElement(popup,"li"),"hr");\n\n //create buttons for all other stylesheet tiddlers\n for(var t=0; t<tagged.length; t++)\n { var useClass = "tiddlyLinkExisting";\n var text = (tagged[t]).replace((things[mode].suffix),"");\n if (tagged[t]==(cookie) )\n {text+=" [x]"; useClass="currentlySelected";}\n if ((tagged[t]!= (things[mode].theDefault))&&tagged[t]!= (things[mode].none))\n {createThemeButton(tagged[t]);}}\n Popup.show(popup,false);\n e.cancelBubble = true;\n if (e.stopPropagation)\n e.stopPropagation();\n return(false);\n };\n\n var createdropperButton = function(place){\n var sp = createTiddlyElement(place,"span",null,"ThemeChooserButton");\n var theDropDownBtn = createTiddlyButton(sp,label,things[mode].tooltip,onclick);\n };\n\n createdropperButton(place);\n};\n\n\nsetStylesheet(".popup li a.currentlySelected {background:#ccc;color:black;font-weight:bold;}","currentlySelectedStyle"); // could do better probably...\n\nconfig.macros.layoutChooser=config.macros.themeSelect;\n\n//shadow tiddler to hold instructions for creating ThemePacks\nconfig.shadowTiddlers.ThemePack='See http://simonbaird.com/mptw/#CreatingAThemePack'; \n\nconfig.macros.applyTheme = {handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n var theme = params[0];\n var label = params[1]?params[1]:'Apply theme "' + theme + '"';\n var tooltip = 'Apply the "'+theme+'" theme to this TiddlyWiki';\n createTiddlyButton(place,label,tooltip,function() {\n store.makeActiveTheme("style",theme+things.style.suffix,true);\n });\n}};\n//}}}\n
/***\n|Name|BigThemePack|\n|Created by|SimonBaird & SaqImtiaz|\n|Location|http://simonbaird.com/mptw/#BigThemePack|\n|Version|0.1.0|\n|Requires|SelectThemePlugin|\n\n!Uninstallation Notes:\n*Make sure that you set your theme as default or none, before deleting the theme pack.\n\n!Code\n***/\n//{{{\nif (!config.themes) config.themes = [];\n//}}}\n/***\n!!~MonkyMind themes\nThe following themes were created by Robert Lindsay from http://www.monkymind.org/\n***/\n//{{{\n\nconfig.shadowTiddlers.Berry2StyleSheet = "<!--- [[Berry 2|StyleSheet]] with ideas shamesslessly taken from (and suggested by) Simon Baird, Clint Checketts and Christine Hodges --->\sn\sn/*{{{*/\sn.headerForeground { display: none;}\sn#sidebar {width: 170px; background: #efefef;border-left: solid 2px #b8b9c7;border-top: solid 2px #d7d8e8;}\sn#sidebarTabs .tabContents {width: 158px; background: #eae9ee;font-weight: bold; color: #333 ;}\sn#sidebarOptions input { border: solid 2px #b8b9c7; }\sn#sidebarOptions .sliderPanel { background: #eee;}\sn#sidebarOptions a {;border: none;}\sn#sidebarOptions .sliderPanel a {border: none;color: #5c4894;}\sn#displayArea {background: #fff;margin: 1em 15.7em 0em 1em;border-left: solid 2px #b8b9c7;}\sn.viewer {line-height: 1.4em;padding-bottom: 1em;border-bottom:solid 1px #b8b9c7;}\sn.viewer th, thead td {background: #5d4b97;border: 1px solid #666;color: #fff;}\sn.title {color: #000}\snh1,h2,h3,h4,h5 {color: #fff;background: #6b69ad;}\sna{ color: #700126;}\sna:hover{ background: #6b69ad; color: #fff;font-weight: bold;}\sn.externalLink { text-decoration: underline; color: #000083;}\snbody { background: #d7d8e8;}\sn.popup { background: #6b69ad; border: 1px solid #04b;}\sn.popup li a:hover {background: #d7d8e8;color: #000;border: none;}\sn.popup li.disabled {color: #000;}\sn.button:hover {color: #fff;background: #6b69ad;\sn border: 1px solid #d7d8e8;}\sn#topMenu { background: transparent; padding: 6px;margin-left: -5px;border-bottom: solid 3px #5c4894;}\sn#topMenu .button, #topMenu .tiddlyLink, tiddlyLinkExisting, #topMenu .externalLink\sn{\sn color: #fff;\sn text-align: center;\sn font-weight: bold;\sn font-size: 1.1em;\sn text-decoration: none;\sn letter-spacing: 1.5px;\sn background: transparent;\sn border-right: solid 1px #fff;\sn padding: 5px 15px 8px 15px;\sn}\sn#topMenu a:hover {\sn color: #700126;\sn background: #d7d8e8;\sn}\sn#topMenu br {display: none; padding-right: 1em;}\sn\sn\sn/*}}}*/";\n\nconfig.shadowTiddlers.Berry2PageTemplate = "<!--- More ideas shamesslessly begged, borrowed or stolen from..... Simon Baird, Clint Checketts and Christine Hodges :)) --->\sn<!--{{{-->\sn<div class='header' macro=\s"gradient vert #5c4894 #6b69ad\s">\sn <div id='topMenu'>\sn <span refresh='content' tiddler='SiteTitle'></span><span refresh='content' tiddler='MainMenu'></span></div>\sn </div>\sn</div> \sn<div id='sidebar'>\sn <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\sn <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\sn</div>\sn<div id='displayArea'>\sn <div id='messageArea'></div>\sn <div id='tiddlerDisplay'></div>\sn</div>\sn<!--}}}-->\sn";\n\nconfig.themes.push("Berry2");\n\n\nconfig.shadowTiddlers.Blueberry2StyleSheet = "<!--- [[Blueberry 2|StyleSheet]] with ideas shamesslessly taken from (and suggested by) Simon Baird, Clint Checketts and Christine Hodges --->\sn\sn/*{{{*/\sn.headerForeground { display: none;}\sn#sidebar {width: 171px; background: #e7ecee;border-left: solid 2px #8895bb;border-top: solid 2px #97a8d2;}\sn#sidebarTabs .tabContents {width: 158px; background: #dce1e3;font-weight: bold; color: #333 ;}\sn#sidebarOptions input { border: solid 2px #8895bb; }\sn#sidebarOptions .sliderPanel { background: #eee;}\sn#sidebarOptions a {;border: none;}\sn#sidebarOptions .sliderPanel a {border: none;color: #00005a;}\sn#displayArea {background: #fff;margin: 1em 15.7em 0em 1em;border-left: solid 2px #8895bb;}\sn.viewer {line-height: 1.4em;padding-bottom: 1em;border-bottom:solid 1px #dedede;}\sn.viewer th, thead td {background: #00009d;border: 1px solid #666;color: #fff;}\sn.title {color: #000}\snh1,h2,h3,h4,h5 {color: #fff;background: #00009d;}\sna{ color: #00005a;}\sna:hover{ background: #00009d; color: #fff;font-weight: bold;}\sn.externalLink { text-decoration: underline; color: #000083;}\snbody { background: #97a8d2;}\sn.popup { background: #04b; border: 1px solid #04b;}\sn.popup li a:hover {background: #dedede;color: #000083;border: none;}\sn.popup li.disabled {color: #000;}\sn.button:hover {color: #fff;background: #00009d;\sn border: 1px solid #dedede;}\sn#topMenu { background: transparent; padding: 6px;margin-left: -5px;border-bottom: solid 3px #00005a}\sn#topMenu .button, #topMenu .tiddlyLink, tiddlyLinkExisting, #topMenu .externalLink\sn{\sn color: #fff;\sn text-align: center;\sn font-weight: bold;\sn font-size: 1.1em;\sn text-decoration: none;\sn letter-spacing: 1.5px;\sn background: transparent;\sn border-right: solid 1px #fff;\sn padding: 5px 15px 6px 15px;\sn}\sn#topMenu a:hover {\sn color: #fff;\sn background: #00009d;\sn border: solid 1px #db4;\sn}\sn#topMenu br {display: none; padding-right: 1em;}\sn\sn\sn/*}}}*/";\n\nconfig.shadowTiddlers.Blueberry2PageTemplate = "<!--- More ideas shamesslessly begged, borrowed or stolen from..... Simon Baird, Clint Checketts and Christine Hodges :)) --->\sn<!--{{{-->\sn<div class='header' macro=\s"gradient vert #00005a #0000ad\s">\sn <div id='topMenu'>\sn <span refresh='content' tiddler='SiteTitle'></span><span refresh='content' tiddler='MainMenu'></span></div>\sn </div>\sn</div> \sn<div id='sidebar'>\sn <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\sn <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\sn</div>\sn<div id='displayArea'>\sn <div id='messageArea'></div>\sn <div id='tiddlerDisplay'></div>\sn</div>\sn<!--}}}-->\sn";\n\nconfig.themes.push("Blueberry2");\n\n\nconfig.shadowTiddlers.iJobsStyleSheet = "<!--- [[iJobs 2|StyleSheet]] with ideas shamesslessly taken from (and suggested by) Simon Baird, Clint Checketts and Christine Hodges. Colours inspired by http://www.solucija.com/templates/demo/Internet_Jobs/ --->\sn/*{{{*/\sn.headerForeground { display: none;}\sn#sidebar {width: 171px; background: #808080;border-bottom: solid 1.5em #3c6491;border-top: solid 2px #fff;}\sn#sidebarTabs .tabContents {width: 158px; background: #eee;font-weight: bold; color: #333 ;}\sn.tabSelected{color: #fff;background: #963112; border: solid 1px #fff;}\sn.tabUnselected {color: #fff;background: #999;}\sn#sidebarOptions .sliderPanel { background: #eee;}\sn#sidebarOptions a {;border: none;}\sn#sidebarOptions .sliderPanel a {border: none;color: #333;background: #eee;}\sn#displayArea {background: #fff;margin: 1em 15.7em 0em 1em;border-top: solid 3px #ddd;border-bottom: solid 1.5em #3c6491;}\sn.viewer {line-height: 1.4em;padding-bottom: 1em;border-bottom:solid 1px #dedede;}\sn.viewer th, thead td {background: #963112;border: 1px solid #666;color: #fff;}\sn.title {color: #000}\snh1,h2,h3,h4,h5 {color: #fff;background: #963112;}\sna{ color:#c01903 ;}\sna:hover{ background: #c01903; color: #fff;font-weight: bold;}\sn.externalLink { text-decoration: underline; color: #c01903;}\snbody { background: #fff;}\sn.popup { background: #3c6491; border: 1px solid #3c6491;}\sn.popup li a:hover {background: #dedede;color: #963112;border: none;}\sn.popup li.disabled {color: #000;}\sn.button {color: #fff;background: #808080;border: 1px solid #fff;}\sn.button:hover {color: #fff;background: #c01903;\sn border: 1px solid #dedede;}\sn#topMenu { background: transparent;border-bottom: solid 3px #bcbcbc; padding: 5px;margin-left: -5px;}\sn#topMenu .button, #topMenu .tiddlyLink, tiddlyLinkExisting, #topMenu .externalLink\sn{\sn color: #333;\sn text-align: center;\sn font-weight: bold;\sn font-size: 1em;\sn text-decoration: none;\sn letter-spacing: 1.5px;\sn background: transparent;\sn border-right: solid 1px #fff;\sn padding: 5px 15px 8px 15px;\sn}\sn#topMenu a:hover {\sn color: #fff;\sn background: #3c6491;\sn}\sn#topMenu br {display: none; padding-right: 1em;}\sn\sn\sn/*}}}*/\sn";\n\nconfig.shadowTiddlers.iJobsPageTemplate = "<!--- More ideas shamesslessly begged, borrowed or stolen from..... Simon Baird, Clint Checketts and Christine Hodges :)) --->\sn<!--{{{-->\sn<div class='header' macro=\s"gradient vert #aaa #ccc\s">\sn <div id='topMenu'>\sn <span refresh='content' tiddler='SiteTitle'></span><span refresh='content' tiddler='MainMenu'></span></div>\sn </div>\sn</div> \sn<div id='sidebar'>\sn <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\sn <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\sn</div>\sn<div id='displayArea'>\sn <div id='messageArea'></div>\sn<div class='viewer' macro=\s"gradient vert #f5f5f5 #fff\s">\sn <div id='tiddlerDisplay'></div>\sn</div>\sn<!--}}}-->\sn";\n\nconfig.themes.push("iJobs");\n\n\nconfig.shadowTiddlers.NoBerry2StyleSheet = "<!--- The default TW colours with modified layout. Ideas shamesslessly taken from (and suggested by) Simon Baird, Clint Checketts and Christine Hodges --->\sn\sn/*{{{*/\sn.headerForeground { display: none;}\sn#sidebar {width: 170px; }\sn#sidebarTabs .tabContents {width: 158px; }\sn#displayArea {background: #fff;margin: 1em 15.7em 0em 1em;}\sn#topMenu { background: transparent; padding: 6px;margin-left: -5px; border-bottom: solid 3px #0457ce;}\sn#topMenu .button, #topMenu .tiddlyLink, tiddlyLinkExisting, #topMenu .externalLink\sn{\sn color: #fff;\sn text-align: center;\sn font-weight: bold;\sn font-size: 1.1em;\sn text-decoration: none;\sn letter-spacing: 1.5px;\sn background: transparent;\sn border-right: solid 1px #fff;\sn padding: 5px 15px 8px 15px;\sn}\sn#topMenu a:hover {\sn color: #fff;\sn background: #18f;\sn}\sn#topMenu br {display: none; padding-right: 1em;}\sn\sn\sn/*}}}*/";\n\nconfig.shadowTiddlers.NoBerry2PageTemplate = "<!--- More ideas shamesslessly begged, borrowed or stolen from..... Simon Baird, Clint Checketts and Christine Hodges :)) --->\sn<!--{{{-->\sn<div class='header' macro=\s"gradient vert #04b #18f\s">\sn <div id='topMenu'>\sn <span refresh='content' tiddler='SiteTitle'></span><span refresh='content' tiddler='MainMenu'></span></div>\sn </div>\sn</div> \sn<div id='sidebar'>\sn <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\sn <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\sn</div>\sn<div id='displayArea'>\sn <div id='messageArea'></div>\sn <div id='tiddlerDisplay'></div>\sn</div>\sn<!--}}}-->\sn";\n\nconfig.themes.push("NoBerry2");\n\n//}}}\n/***\n!!Clint's Themes\nThe themes were created by Clint Checketts from http://www.checkettsweb.com/\nThe original GTD theme was created by Nathan Bowers from http://snapgrid.com/\n***/\n//{{{\n\n\nconfig.shadowTiddlers.GTDStyleSheet = "/***\sn!Calendar CSS\sn***/\sn/*{{{*/\sn.calendar{\sn border-bottom: 1px solid #550000;\sn}\sn\sn.viewer .calendar{\sn width: 220px;\sn}\sn\sn#mainMenu .calendar{\sn font-size: 8px;\sn cursor: pointer;\sn width: 100%;\sn border: 0;\sn border-collapse: collapse;\sn}\sn\sn#mainMenu .calendar .button{\sn border: 0;\sn}\sn\sn#mainMenu .calendar td{\sn font-size: 8pt;\sn padding: 0;\sn background: #fff;\sn border: 0;\sn}\sn\sn#mainMenu .calendar a{\sn margin: 0;\sn color: #000;\sn background: transparent;\sn}\sn\sn#mainMenu .calendar a:hover{\sn color: #000;\sn background: transparent;\sn}\sn\sn#mainMenu .calendarMonthname,\sn#mainMenu .calendar .calendarMonthTitle td a{\sn color: #fff;\sn}\sn\sn#mainMenu .calendarDaysOfWeek td{\sn background: #500;\sn color: #fff;\sn}\sn\sn/*}}}*/\sn\sn/***\sn!GTD Style\sn\sn!Generic rules /%==================================================================== %/\sn***/\sn/*{{{*/\snbody {\sn background: #464646 url('http://shared.snapgrid.com/images/tiddlywiki/bodygradient.png') repeat-x top fixed;\sn color: #000;\sn font: .82em/1.25em 'Bitstream Vera Sans', Verdana, Helvetica, Arial, sans-serif;\sn/*'Lucida Sans Unicode', 'Lucida Grande','Trebuchet MS', */\sn}\sn/*}}}*/\sn/***\sn!Header rules /%====================================================================== %/\sn***/\sn/*{{{*/\sn#contentWrapper\sn{\sn margin: 0 auto;\snwidth: 59em;\snposition: relative;\sn}\sn\sn#header\sn{\sn color: #fff;\sn padding: 1.5em 1em .6em 0;\sn}\sn\sn#siteTitle {\sn\sn font-size: 2.3em;\sn margin: 0;\sn}\sn\sn#siteSubtitle {\sn font-size: 1em;\sn padding-left: .8em;;\sn}\sn\sn#titleLine{\sn background: transparent;\sn padding: 0;\sn}\sn\sn#titleLine a {\sn color: #cf6;\sn background: transparent;\sn}\sn/*}}}*/\sn\sn\sn\sn\sn\sn\sn\sn\sn\sn/***\sn!Sidebar rules /%====================================================================== %/\sn***/\sn/*{{{*/\sn#sidebar{\sn left: 0;\snwidth: 18em;\sn margin: .9em .9em 0 0;\sn color: #000;\sn background: transparent;\sn}\sn/*}}}*/\sn/***\sn!Main menu rules /%=================================================================== %/\sn***/\sn/*{{{*/\sn#mainMenu{\sn position: static;\sn width: auto;\sn\sn background: #600;\sn border-right: 3px solid #500;\snpadding: 0;\sn text-align: left;\sn font-size: 1em;\sn}\sn\sn#mainMenu h1{\sn padding: 0;\sn margin: 0;\sn font-size: 1em;\sn font-weight: normal;\sn}\sn\sn#mainMenu ul{\sn padding: 0;\sn margin: 0;\sn list-style: none;\sn}\sn\sn#mainMenu h1 a,\sn#mainMenu li a,\sn#mainMenu li a.button{\sn display: block;\sn padding: 0 5px 0 10px;\snborder: 0;\sn border-bottom: 1px solid #500;\sn border-top: 1px solid #900;\snmargin: 0;\sn}\sn\sn#mainMenu a,\sn#mainMenu a.button{\sn height: 22px;\snheight: 1.83em;\sn line-height: 22px;\sn color: #fff;\sn background: #700;\snmargin-left: 1em;\sn}\sn\sn#mainMenu a:hover,\sn#mainMenu a.button:hover {\sn background: #b00;\sn color: #fff;\sn}\sn/*}}}*/\sn/***\sn!Sidebar options rules /%============================================================ %/\sn***/\sn/*{{{*/\sn#sidebarOptions {\sn background: #eeb;\sn border-right: 3px solid #bb8;\sn color: #B4C675;\sn padding: .5em 0;\sn}\sn\sn#sidebarOptions a {\sn color: #700;\sn margin: .2em .8em;\sn padding: 0;\sn border: 0;\sn}\sn\sn#sidebarOptions a:hover, #sidebarOptions a:active {\sn color: #fff;\sn background: #700;\sn border: 0;\sn}\sn\sn#sidebarOptions input{\sn margin: 2px 10px;\sn border: 1px inset #333;\snpadding: 0;\sn}\sn\sn#sidebarOptions .sliderPanel {\sn background: #fff;\sn color: #000;\sn padding: 5px 10px;\sn font-size: .9em;\sn}\sn\sn#sidebarOptions .sliderPanel a{\sn font-weight: normal;\sn margin: 0;\sn}\sn\sn#sidebarOptions .sliderPanel a:link,#sidebarOptions .sliderPanel a:visited {\sn color: #700;\sn}\sn\sn#sidebarOptions .sliderPanel a:hover,#sidebarOptions .sliderPanel a:active {\sn color: #fff;\sn background: #700;\sn}\sn/*}}}*/\sn/***\sn!Sidebar tabs rules /%===================================================================== %/\sn***/\sn/*{{{*/\sn#sidebarTabs {\sn background: transparent;\sn border-right: 3px solid #740;\sn border-bottom: 3px solid #520;\sn border: 0;\sn padding: 0;\sn}\sn\sn#contentWrapper #sidebarTabs a,\sn#contentWrapper #displayArea .tabContents a{\sn color: #fff;\sn}\sn\sn#contentWrapper #sidebarTabs a:hover,\sn#contentWrapper #displayArea .tabContents a:hover {\sn background: #000;\sn color: #fff;\sn}\sn\sn#contentWrapper #sidebarTabs a:active,\sn#contentWrapper #displayArea .tabContents a:active{\sn color: #000;\sn}\sn\sn\sn\sn#contentWrapper .tabSelected {\sn background: #960;\sn}\sn\sn#contentWrapper .tabUnselected{\sn background: #660;\sn}\sn\sn#contentWrapper #sidebar .tabset{\sn background: #eeb;\sn border-right: 3px solid #bb8;\sn padding: 0 0 0 .75em;\sn}\sn\sn#contentWrapper .tabContents{\snfont-size: .95em;\snbackground: #960;\snborder:0;\sn border-right: 3px solid #740;\sn border-bottom: 3px solid #520;\sn padding: .75em;\sn}\sn\sn#contentWrapper .tabContents{\sn width: auto;\sn}\sn\sn#contentWrapper #sidebarTabs .tabContents .tabset,\sn#contentWrapper .tabContents .tabset{\sn border: 0;\sn padding: 0;\sn background: transparent;\sn}\sn\sn#contentWrapper .tabContents .tabSelected,\sn#contentWrapper .tabContents .tabContents {\sn background: #700;\sn border: 0;\sn}\sn\sn#contentWrapper .tabContents .tabUnselected {\sn background: #440;\sn}\sn\sn#contentWrapper .tabset a {\sn color: #fff;\sn padding: .2em .7em;\sn margin: 0 .17em 0 0;\sn height: 2em;\snposition: static;\sn}\sn\sn#contentWrapper .tabset a:hover {\sn background: #000;\sn color: #fff;\sn}\sn\sn#contentWrapper .tabset a:active {\sn color: #000;\sn}\sn\sn#contentWrapper .tabContents ul{\sn margin: 0;\sn padding: 0;\sn list-style: none;\sn}\sn\sn#contentWrapper .tabContents .tabContents ul{\sn color: #eeb;\sn}\sn\sn.tabContents ul a,\sn.tabContents ul .button{\sn color: #fff;\sn display: block;\sn padding: .1em 0 .1em .7em;\sn background: transparent;\sn border: 0;\sn}\sn\sn.tabContents ul a:hover {\sn color: #fff;\sn background: #000;\sn}\sn/*}}}*/\sn/***\sn!License panel rules /%==================================================================== %/\sn***/\sn/*{{{*/\sn#licensePanel {\sn padding: 0px 1em;\sn font-size: .9em;\sn}\sn\sn#licensePanel a {\sn color: #960;\sn display: block;\sn margin-top: .9em;\sn}\sn\sn#licensePanel a:hover {\sn color: #fff;\sn background: transparent;\sn}\sn/*}}}*/\sn/***\sn!Popup rules /%================================================================= %/\sn***/\sn/*{{{*/\sn.popup {\sn font-size: .8em;\sn padding: 0em;\sn background: #333;\sn border: 1px solid #000;\sn}\sn\sn.popup hr {\sn margin: 1px 0 0 0;\sn visibility: hidden;\sn}\sn\sn.popup li.disabled {\sn color: #666;\sn}\sn\sn.popup li a,\sn.popup li a:visited{\sn color: #000;\sn border: .1em outset #cf6;\sn background: #cf6;\sn}\sn\sn.popup li a:hover {\snborder: .1em outset #cf6;\sn background: #ef9;\sn color: #000;\sn}\sn/*}}}*/\sn/***\sn!Message area rules /%================================================================= %/\sn***/\sn/*{{{*/\sn#messageArea{\sn font-size: .9em;\sn padding: .4em;\sn background: #FFE72F;\sn border-right: .25em solid #da1;\sn border-bottom: .25em solid #a80;\sn\snposition: fixed;\sn top: 10px;\sn right: 10px;\sn color: #000;\sn}\sn\sn#contentWrapper #messageArea a{\sn color: #00e;\sn text-decoration: none;\sn}\sn\sn#contentWrapper #messageArea a:hover{\sn color: #00e;\sn text-decoration: underline;\sn background: transparent;\sn}\sn\sn#contentWrapper #messageArea .messageToolbar a.button{\sn border: 1px solid #da1;\sn}\sn\sn#contentWrapper #messageArea .messageToolbar a.button:hover{\sn color: #00e;\sn text-decoration: none;\sn border: 1px solid #000;\sn background: #fff;\sn}\sn\sn\sn\sn/*}}}*/\sn/***\sn!Tiddler display rules /%================================================================== %/\sn***/\sn/*{{{*/\sn#displayArea {\sn width: 39.75em;\sn margin: 0 0 0 17em;\sn}\sn\sn.tiddler {\sn margin: 0 0 .9em 0;\sn padding: 0 1em;\sn border-right: .25em solid #aaa;\sn border-bottom: .25em solid #555;\sn background: #fff;\sn}\sn\sn.title {\sn font-size: 1.5em;\sn font-weight: bold;\sn color: #900;\sn}\sn\sn.toolbar {\sn font-size: .8em;\sn padding: .5em 0;\sn}\sn\sn.toolbar .button{\sn padding: .1em .3em;\sn color: #000;\sn\sn border: .1em outset #cf6;\sn background: #cf6;\snmargin: .1em;\sn}\sn\sn.toolbar .button:hover {\sn background: #ef9;\sn color: #000;\sn}\sn\sn.toolbar .button:active {\sn background: #ff0;\sn}\sn\sn/*}}}*/\sn/***\sn!Viewer rules /% ------------------------------------------------------------------------------------------ %/\sn***/\sn/*{{{*/\sn.viewer {\sn line-height: 1.4em;\sn font-size: 1em;\sn}\sn\sn.viewer a:link, .viewer a:visited {\sn color: #15b;\sn}\sn\sn.viewer a:hover {\sn color: #fff;\sn background: #000;\sn}\sn\sn.viewer .button{\sn background: transparent;\sn border-top: 1px solid #eee;\sn border-left: 1px solid #eee;\sn border-bottom: 1px solid #000;\sn border-right: 1px solid #000;\sn}\sn\sn.viewer .button:hover{\sn background: #eee;\sn color: #000;\sn}\sn\sn.viewer .button:active{\sn background: #ccc;\sn border-bottom: 1px solid #eee;\sn border-right: 1px solid #eee;\sn border-top: 1px solid #111;\sn border-left: 1px solid #111;\sn}\sn\sn\sn.viewer blockquote {\sn border-left: 3px solid #777;\sn margin: .3em;\sn padding: .3em;\sn}\sn\sn.viewer pre{\sn background: #fefefe;\sn border: 1px solid #f1f1f1;\sn}\sn\sn.viewer pre, .viewer code{\sn color: #000;\sn}\sn\sn.viewer ul {\sn padding-left: 30px;\sn}\sn\sn.viewer ol {\sn padding-left: 30px;\sn}\snul{\snlist-style-type: asquare;\sn}\snol{ \sn list-style-type: decimal;\sn}\sn\snol ol{ \sn list-style-type: lower-alpha;\sn}\sn\snol ol ol{ \sn list-style-type: lower-roman;\sn}\sn\sn.viewer ul, .viewer ol, .viewer p {\sn margin: .0;\sn}\sn\sn.viewer li {\sn margin: .2em 0;\sn}\sn\snh1,h2,h3,h4,h5,h6 {\sn color: #000;\sn font-weight: bold;\sn background: #eee;\sn padding: 2px 10px;\sn margin: 5px 0;\sn}\sn\sn.viewer h1 {font-size: 1.3em;}\sn.viewer h2 {font-size: 1.2em;}\sn.viewer h3 {font-size: 1.1em;}\sn.viewer h4 {font-size: 1em;}\sn.viewer h5 { font-size: .9em;}\sn.viewer h6 { font-size: .8em;}\sn\sn.viewer table {\sn border: 2px solid #303030;\sn font-size: 11px;\sn margin: 10px 0;\sn}\sn\sn.viewer th, .viewer thead td{\sn color: #000;\sn background: #eee;\sn border: 1px solid #aaa;\sn padding: 0 3px;\sn}\sn\sn.viewer td {\sn border: 1px solid #aaa;\sn padding: 0 3px;\sn}\sn\sn.viewer caption {\sn padding: 3px;\sn}\sn\sn.viewer hr {\sn border: none;\sn border-top: dotted 1px #777;\sn height: 1px;\sn color: #777;\sn margin: 7px 0;\sn}\sn\sn.viewer\sn{\sn margin: .5em 0 0 0;\sn padding: .5em 0;\sn border-top: 1px solid #ccc;\sn}\sn\sn.highlight {\sn color: #000;\sn background: #ffe72f;\sn}\sn/*}}}*/\sn/***\sn!Editor rules /% ----------------------------------------------------------------------------------------- %/\sn***/\sn/*{{{*/\sn.editor {\sn font-size: .8em;\sn color: #402C74;\sn padding: .3em 0;\sn}\sn\sn.editor input, .editor textarea {\sn font: 1.1em/130% 'Andale Mono', 'Monaco', 'Lucida Console', 'Courier New', monospace;\sn margin: 0;\sn border: 1px inset #333;\sn padding: 2px 0;\sn}\sn\sn.editor textarea {\sn height: 42em;\sn width: 100%;\sn}\sn\sninput:focus, textarea:focus\sn{\sn background: #ffe;\sn border: 1px solid #000;\sn}\sn.footer\sn{\sn padding: .5em 0;\sn margin: .5em 0;\sn border-top: 1px solid #ddd;\sn color: #555;\sn text-align: center; \sn}\sn/*}}}*/\sn/***\sn!IE Display hacks /% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%/\sn***/\sn/*{{{*/\snbody{\sn _text-align: center;\sn}\sn\sn#contentWrapper\sn{\sn/* _width: 770px; CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */\sn _text-align: left; /* CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */ \sn}\sn\sn#messageArea{\sn _position: absolute;\sn}\sn/*}}}*/";\n\nconfig.shadowTiddlers.GTDPageTemplate = "<!---\sn| Name:|GTDTWPlusPageTemplate|\sn| Source:|http://www.checkettsweb.com/tw/gtd_tiddlywiki.htm#StyleSheet|\sn| Author:|ClintChecketts|\sn--->\sn<!--{{{-->\sn<div id='header'>\sn<div id='titleLine'>\sn<span id='siteTitle' refresh='content' tiddler='SiteTitle'></span>\sn<span id='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\sn</div>\sn</div>\sn<div id='sidebar'>\sn<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\sn<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\sn<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div><div id=\s"licensePanel\s">\sn<a rel=\s"license\s" href=\s"http://shared.snapgrid.com/gtd_tiddlywiki.html#RevisionHistory\s" target=\s"_new\s">GTDTW Version <span macro=\s"version\s"></span></a>\sn<a rel=\s"license\s" href=\s"http://www.tiddlywiki.com\s" target=\s"_new\s">\snTiddlyWiki is published by Jeremy Ruston at Osmosoft under a BSD open source license</a>\sn<a rel=\s"license\s" href=\s"http://snapgrid.com\s" target=\s"_new\s">GTD TiddlyWiki is a modification by Nathan Bowers at Snapgrid under the same license terms.</a>\sn<a rel=\s"license\s" href=\s"http://davidco.com\s" target=\s"_new\s">\s"Getting Things Done\s" is © David Allen at Davidco. Davidco has no affiliation with TiddlyWiki or GTD TiddlyWiki.</a></div></div>\sn<div id='displayArea'>\sn<div id='messageArea'></div>\sn<div id='tiddlerDisplay'></div>\sn<!--}}}-->";\n\nconfig.themes.push("GTD");\n\n\nconfig.shadowTiddlers.DevFireStyleSheet = "/***\sn!Devfire\snStyle by Clint Checketts (http://www.checkettsweb.com) for TiddlyWiki 2.0\snInspired by the GLP'd Darkfire Wordpress skin.\sn\sn!Sections in this Tiddler:\sn*Generic rules\sn*Links styles\sn*Header\sn*Main menu\sn*Sidebar\sn**Sidebar options\sn**Sidebar tabs\sn*Message area\sn*Popup\sn*Tabs\sn*Tiddler display\sn**Viewer\sn**Editor\sn*Misc. rules\sn!Generic rules /% ============================================================= %/\sn***/\sn/*{{{*/\snbody {\snbackground-color: #000;\sn}\sn/*}}}*/\sn/***\sn!Link styles /% ============================================================= %/\sn***/\sn/*{{{*/\sna,\sna.button,\sn#mainMenu a.button,\sn#sidebarOptions .sliderPanel a{\sn color: #ffbf00;\sn border: 0;\sn}\sn\sna:hover,\sna.button:hover,\sn#mainMenu a.button:hover,\sn#sidebarOptions .sliderPanel a:hover\sn#sidebarOptions .sliderPanel a:active{\sn color: #ff7f00;\sn border: 0;\sn border-bottom: #ff7f00 1px dashed;\sn background: transparent;\sn text-decoration: none;\sn}\sn\sn#displayArea .button.highlight{\sn color: #ffbf00;\sn background: #4c4c4c;\sn}\sn/*}}}*/\sn/***\sn!Header styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn.header{\sn border-bottom: 2px solid #ffbf00;\sn color: #fff;\sn}\sn\sn.headerForeground a {\sn color: #fff;\sn}\sn\sn.header a:hover {\sn border-bottom: 1px dashed #fff;\sn}\sn/*}}}*/\sn/***\sn!Main menu styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn#mainMenu {color: #fff;}\sn#mainMenu h1{\sn font-size: 1.1em;\sn}\sn#mainMenu li,#mainMenu ul{\sn list-style: none;\sn margin: 0;\sn padding: 0;\sn}\sn/*}}}*/\sn/***\sn!Sidebar styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn#sidebar {\sn right: 0;\sn color: #fff;\sn border: 2px solid #ffbf00;\sn border-width: 0 0 2px 2px;\sn}\sn#sidebarOptions {\sn background-color: #4c4c4c;\sn padding: 0;\sn}\sn\sn#sidebarOptions a{\sn margin: 0;\sn color: #ffbf00;\sn border: 0;\sn}\sn#sidebarOptions a:hover {\sn color: #4c4c4c;\sn background-color: #ffbf00;\sn\sn}\sn\sn#sidebarOptions a:active {\sn color: #ffbf00;\sn background-color: transparent;\sn}\sn\sn#sidebarOptions .sliderPanel {\sn background-color: #333;\sn margin: 0;\sn}\sn\sn#sidebarTabs {background-color: #4c4c4c;}\sn#sidebarTabs .tabSelected {\sn padding: 3px 3px;\sn cursor: default;\sn color: #ffbf00;\sn background-color: #666;\sn}\sn#sidebarTabs .tabUnselected {\sn color: #ffbf00;\sn background-color: #5f5f5f;\sn padding: 0 4px;\sn}\sn\sn#sidebarTabs .tabUnselected:hover,\sn#sidebarTabs .tabContents {\sn background-color: #666;\sn}\sn\sn.listTitle{color: #FFF;}\sn#sidebarTabs .tabContents a{\sn color: #ffbf00;\sn}\sn\sn#sidebarTabs .tabContents a:hover{\sn color: #ff7f00;\sn background: transparent;\sn}\sn\sn#sidebarTabs .txtMoreTab .tabSelected,\sn#sidebarTabs .txtMoreTab .tab:hover,\sn#sidebarTabs .txtMoreTab .tabContents{\sn color: #ffbf00;\sn background: #4c4c4c;\sn}\sn\sn#sidebarTabs .txtMoreTab .tabUnselected {\sn color: #ffbf00;\sn background: #5f5f5f;\sn}\sn\sn.tab.tabSelected, .tab.tabSelected:hover{color: #ffbf00; border: 0; background-color: #4c4c4c;cursor:default;}\sn.tab.tabUnselected {background-color: #666;}\sn.tab.tabUnselected:hover{color:#ffbf00; border: 0;background-color: #4c4c4c;}\sn.tabContents {\sn background-color: #4c4c4c;\sn border: 0;\sn}\sn.tabContents .tabContents{background: #666;}\sn.tabContents .tabSelected{background: #666;}\sn.tabContents .tabUnselected{background: #5f5f5f;}\sn.tabContents .tab:hover{background: #666;}\sn/*}}}*/\sn/***\sn!Message area styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn#messageArea {background-color: #666; color: #fff; border: 2px solid #ffbf00;}\sn#messageArea a:link, #messageArea a:visited {color: #ffbf00; text-decoration:none;}\sn#messageArea a:hover {color: #ff7f00;}\sn#messageArea a:active {color: #ff7f00;}\sn#messageArea .messageToolbar a{\sn border: 1px solid #ffbf00;\sn background: #4c4c4c;\sn}\sn/*}}}*/\sn/***\sn!Popup styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn#popup {color: #fff; background-color: #4c4c4c; border: 1px solid #ffbf00;}\sn#popup a {color: #ffbf00; }\sn#popup a:hover { background: transparent; color: #ff7f00; border: 0;}\sn#popup hr {color: #ffbf00; background: #ffbf00;}\sn/*}}}*/\sn/***\sn!Tiddler Display styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn.title{color: #fff;}\snh1, h2, h3, h4, h5 {\sn color: #fff;\sn background-color: transparent;\sn border-bottom: 1px solid #333;\sn}\sn\sn.subtitle{\sn color: #666;\sn}\sn\sn.viewer {color: #fff; }\sn\sn.viewer table{background: #666; color: #fff;}\sn\sn.viewer th {background-color: #996; color: #fff;}\sn\sn.viewer pre, .viewer code {color: #ddd; background-color: #4c4c4c; border: 1px solid #ffbf00;}\sn\sn.viewer hr {color: #666;}\sn\sn.tiddler .button {color: #4c4c4c;}\sn.tiddler .button:hover { color: #ffbf00; background-color: #4c4c4c;}\sn.tiddler .button:active {color: #ffbf00; background-color: #4c4c4c;}\sn\sn.toolbar {\sn color: #4c4c4c;\sn}\sn\sn.toolbar a.button,\sn.editorFooter a{\sn border: 0;\sn}\sn\sn.footer {\sn color: #ddd;\sn}\sn\sn.selectedTiddler .footer {\sn color: #888;\sn}\sn\sn.highlight, .marked {\sn color: #000;\sn background-color: #ffe72f;\sn}\sn.editorFooter {\sn color: #aaa;\sn}\sn\sn.tab{\sn-moz-border-radius-topleft: 3px;\sn-moz-border-radius-topright: 3px;\sn}\sn\sn.tagging,\sn.tagged{\sn background: #4c4c4c;\sn border: 1px solid #4c4c4c; \sn}\sn\sn.selected .tagging,\sn.selected .tagged{\sn background: #000;\sn border: 1px solid #ffbf00;\sn}\sn\sn.tagging .listTitle,\sn.tagged .listTitle{\sn color: #fff;\sn}\sn\sn.tagging .button,\sn.tagged .button{\sn color: #ffbf00;\sn border: 0;\sn padding: 0;\sn}\sn\sn.tagging .button:hover,\sn.tagged .button:hover{\snbackground: transparent;\sn}\sn/*}}}*//***\sn!Devfire\snStyle by Clint Checketts (http://www.checkettsweb.com) for TiddlyWiki 2.0\snInspired by the GLP'd Darkfire Wordpress skin.\sn\sn!Sections in this Tiddler:\sn*Generic rules\sn*Links styles\sn*Header\sn*Main menu\sn*Sidebar\sn**Sidebar options\sn**Sidebar tabs\sn*Message area\sn*Popup\sn*Tabs\sn*Tiddler display\sn**Viewer\sn**Editor\sn*Misc. rules\sn!Generic rules /% ============================================================= %/\sn***/\sn/*{{{*/\snbody {\snbackground-color: #000;\sn}\sn/*}}}*/\sn/***\sn!Link styles /% ============================================================= %/\sn***/\sn/*{{{*/\sna,\sna.button,\sn#mainMenu a.button,\sn#sidebarOptions .sliderPanel a{\sn color: #ffbf00;\sn border: 0;\sn}\sn\sna:hover,\sna.button:hover,\sn#mainMenu a.button:hover,\sn#sidebarOptions .sliderPanel a:hover\sn#sidebarOptions .sliderPanel a:active{\sn color: #ff7f00;\sn border: 0;\sn border-bottom: #ff7f00 1px dashed;\sn background: transparent;\sn text-decoration: none;\sn}\sn\sn#displayArea .button.highlight{\sn color: #ffbf00;\sn background: #4c4c4c;\sn}\sn/*}}}*/\sn/***\sn!Header styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn.header{\sn border-bottom: 2px solid #ffbf00;\sn color: #fff;\sn}\sn\sn.headerForeground a {\sn color: #fff;\sn}\sn\sn.header a:hover {\sn border-bottom: 1px dashed #fff;\sn}\sn/*}}}*/\sn/***\sn!Main menu styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn#mainMenu {color: #fff;}\sn#mainMenu h1{\sn font-size: 1.1em;\sn}\sn#mainMenu li,#mainMenu ul{\sn list-style: none;\sn margin: 0;\sn padding: 0;\sn}\sn/*}}}*/\sn/***\sn!Sidebar styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn#sidebar {\sn right: 0;\sn color: #fff;\sn border: 2px solid #ffbf00;\sn border-width: 0 0 2px 2px;\sn}\sn#sidebarOptions {\sn background-color: #4c4c4c;\sn padding: 0;\sn}\sn\sn#sidebarOptions a{\sn margin: 0;\sn color: #ffbf00;\sn border: 0;\sn}\sn#sidebarOptions a:hover {\sn color: #4c4c4c;\sn background-color: #ffbf00;\sn\sn}\sn\sn#sidebarOptions a:active {\sn color: #ffbf00;\sn background-color: transparent;\sn}\sn\sn#sidebarOptions .sliderPanel {\sn background-color: #333;\sn margin: 0;\sn}\sn\sn#sidebarTabs {background-color: #4c4c4c;}\sn#sidebarTabs .tabSelected {\sn padding: 3px 3px;\sn cursor: default;\sn color: #ffbf00;\sn background-color: #666;\sn}\sn#sidebarTabs .tabUnselected {\sn color: #ffbf00;\sn background-color: #5f5f5f;\sn padding: 0 4px;\sn}\sn\sn#sidebarTabs .tabUnselected:hover,\sn#sidebarTabs .tabContents {\sn background-color: #666;\sn}\sn\sn.listTitle{color: #FFF;}\sn#sidebarTabs .tabContents a{\sn color: #ffbf00;\sn}\sn\sn#sidebarTabs .tabContents a:hover{\sn color: #ff7f00;\sn background: transparent;\sn}\sn\sn#sidebarTabs .txtMoreTab .tabSelected,\sn#sidebarTabs .txtMoreTab .tab:hover,\sn#sidebarTabs .txtMoreTab .tabContents{\sn color: #ffbf00;\sn background: #4c4c4c;\sn}\sn\sn#sidebarTabs .txtMoreTab .tabUnselected {\sn color: #ffbf00;\sn background: #5f5f5f;\sn}\sn\sn.tab.tabSelected, .tab.tabSelected:hover{color: #ffbf00; border: 0; background-color: #4c4c4c;cursor:default;}\sn.tab.tabUnselected {background-color: #666;}\sn.tab.tabUnselected:hover{color:#ffbf00; border: 0;background-color: #4c4c4c;}\sn.tabContents {\sn background-color: #4c4c4c;\sn border: 0;\sn}\sn.tabContents .tabContents{background: #666;}\sn.tabContents .tabSelected{background: #666;}\sn.tabContents .tabUnselected{background: #5f5f5f;}\sn.tabContents .tab:hover{background: #666;}\sn/*}}}*/\sn/***\sn!Message area styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn#messageArea {background-color: #666; color: #fff; border: 2px solid #ffbf00;}\sn#messageArea a:link, #messageArea a:visited {color: #ffbf00; text-decoration:none;}\sn#messageArea a:hover {color: #ff7f00;}\sn#messageArea a:active {color: #ff7f00;}\sn#messageArea .messageToolbar a{\sn border: 1px solid #ffbf00;\sn background: #4c4c4c;\sn}\sn/*}}}*/\sn/***\sn!Popup styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn#popup {color: #fff; background-color: #4c4c4c; border: 1px solid #ffbf00;}\sn#popup li.disabled{color: #ffbf00;}\sn\sn#popup a {color: #ffbf00; }\sn#popup a:hover { background: transparent; color: #ff7f00; border: 0;}\sn#popup hr {color: #ffbf00; background: #ffbf00;}\sn/*}}}*/\sn/***\sn!Tiddler Display styles /% ============================================================= %/\sn***/\sn/*{{{*/\sn.title{color: #fff;}\snh1, h2, h3, h4, h5 {\sn color: #fff;\sn background-color: transparent;\sn border-bottom: 1px solid #333;\sn}\sn\sn.subtitle{\sn color: #666;\sn}\sn\sn.viewer {color: #fff; }\sn\sn.viewer table{background: #666; color: #fff;}\sn\sn.viewer th {background-color: #996; color: #fff;}\sn\sn.viewer pre, .viewer code {color: #ddd; background-color: #4c4c4c; border: 1px solid #ffbf00}\sn\sn.viewer hr {color: #666;}\sn\sn.tiddler .button {color: #4c4c4c;}\sn.tiddler .button:hover { color: #ffbf00; background-color: #4c4c4c;}\sn.tiddler .button:active {color: #ffbf00; background-color: #4c4c4c;}\sn\sn.toolbar {\sn color: #4c4c4c;\sn}\sn\sn.toolbar a.button,\sn.editorFooter a{\sn border: 0;\sn}\sn\sn.footer {\sn color: #ddd;\sn}\sn\sn.selectedTiddler .footer {\sn color: #888;\sn}\sn\sn.highlight, .marked {\sn color: #000;\sn background-color: #ffe72f;\sn}\sn.editorFooter {\sn color: #aaa;\sn}\sn\sn.tab{\sn-moz-border-radius-topleft: 3px;\sn-moz-border-radius-topright: 3px;\sn}\sn\sn.tagging,\sn.tagged{\sn background: #4c4c4c;\sn border: 1px solid #4c4c4c; \sn}\sn\sn.selected .tagging,\sn.selected .tagged{\sn background: #000;\sn border: 1px solid #ffbf00;\sn}\sn\sn.tagging .listTitle,\sn.tagged .listTitle{\sn color: #fff;\sn}\sn\sn.tagging .button,\sn.tagged .button{\sn color: #ffbf00;\sn border: 0;\sn padding: 0;\sn}\sn\sn.tagging .button:hover,\sn.tagged .button:hover{\snbackground: transparent;\sn}\sn\sn.cascade {\sn background: #4c4c4c;\sn color: #ddd;\sn border: 1px solid #ffbf00;\sn}\sn/*}}}*/";\n\nconfig.shadowTiddlers.DevFirePageTemplate = "<div class='header' macro='gradient vert #390108 #900'>\sn<div class='headerShadow'>\sn<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \sn<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\sn</div>\sn<div class='headerForeground'>\sn<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \sn<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\sn</div>\sn</div>\sn<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\sn<div id='sidebar'>\sn<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\sn<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\sn</div>\sn<div id='displayArea'>\sn<div id='messageArea'></div>\sn<div id='tiddlerDisplay'></div>\sn</div>";\n\nconfig.themes.push("DevFire");\n\n\nconfig.shadowTiddlers.ClassicBrownStyleSheet = "[[TagglyTaggingStyles]]\sn\sn/***\sn!TiddlyWiki Classic Color Scheme\snDesigned by Jeremy Ruston\sn\snTo use this color scheme copy the [[ClassicTiddlyWiki]] contents into a tiddler and name it 'StyleSheet' also grab the [[ClassicTemplate]] and copy its contents into a tiddler named 'PageTemplate'.\sn\sn!Colors Used\sn*@@bgcolor(#630):color(#fff): #630@@\sn*@@bgcolor(#930): #930@@\sn*@@bgcolor(#996633): #963@@\sn*@@bgcolor(#c90): #c90@@\sn*@@bgcolor(#cf6): #cf6@@\sn*@@bgcolor(#cc9): #cc9@@\sn*@@bgcolor(#ba9): #ba9@@\sn*@@bgcolor(#996): #996@@\sn*@@bgcolor(#300):color(#fff): #300@@\sn*@@bgcolor(#000000):color(#fff): #000@@\sn*@@bgcolor(#666): #666@@\sn*@@bgcolor(#888): #888@@\sn*@@bgcolor(#aaa): #aaa@@\sn*@@bgcolor(#ddd): #ddd@@\sn*@@bgcolor(#eee): #eee@@\sn*@@bgcolor(#ffffff): #fff@@\sn*@@bgcolor(#f00): #f00@@\sn*@@bgcolor(#ff3): #ff3@@\sn!Generic Rules /%==============================================%/\sn***/\sn/*{{{*/\snbody {\sn background: #fff;\sn color: #000;\sn}\sn\sna{\sn color: #963;\sn}\sn\sna:hover{\sn background: #963;\sn color: #fff;\sn}\sn\sna img{\sn border: 0;\sn}\sn\snh1,h2,h3,h4,h5 {\sn background: #cc9;\sn}\sn/*}}}*/\sn/***\sn!Header /%==================================================%/\sn***/\sn/*{{{*/\sn.header{\sn background: #300;\sn}\sn\sn.titleLine {\sn color: #fff;\sn padding: 5em 0em 1em .5em;\sn}\sn\sn.titleLine a {\sn color: #cf6;\sn}\sn\sn.titleLine a:hover {\sn background: transparent;\sn}\sn/*}}}*/\sn/***\sn!Main Menu /%=================================================%/\sn***/\sn/*{{{*/\sn#mainMenu .button {\sn color: #930;\sn}\sn\sn#mainMenu .button:hover {\sn color: #cf6;\sn background: #930;\sn}\sn\sn#mainMenu li{\sn list-style: none;\sn}\sn/*}}}*/\sn/***\sn!Sidebar options /%=================================================%/\sn~TiddlyLinks and buttons are treated identically in the sidebar and slider panel\sn***/\sn/*{{{*/\sn#sidebar {\sn background: #c90;\sn right: 0;\sn}\sn\sn#sidebarOptions a{\sn color: #930;\sn border: 0;\sn margin: 0;\sn padding: .25em .5em;\sn}\sn\sn#sidebarOptions a:hover {\sn color: #cf6;\sn background: #930;\sn}\sn\sn#sidebarOptions a:active {\sn color: #930;\sn background: #cf6;\sn}\sn\sn#sidebarOptions .sliderPanel {\sn background: #eea;\sn margin: 0;\sn}\sn\sn#sidebarOptions .sliderPanel a {\sn color: #930;\sn}\sn\sn#sidebarOptions .sliderPanel a:hover {\sn color: #cf6;\sn background: #930;\sn}\sn\sn#sidebarOptions .sliderPanel a:active {\sn color: #930;\sn background: #cf6;\sn}\sn/*}}}*/\sn/***\sn!Sidebar tabs /%=================================================%/\sn***/\sn/*{{{*/\sn.tabSelected,.tabContents {\sn background: #eea;\sn border: 0;\sn}\sn\sn.tabUnselected {\sn background: #c90;\sn}\sn\sn#sidebarTabs {\sn background: #c90;\sn}\sn\sn#sidebarTabs .tabSelected{\sn color: #cf6;\sn background: #963;\sn}\sn\sn#sidebarTabs .tabUnselected {\sn color: #cf6;\sn background: #930;\sn}\sn\sn#sidebarTabs .tabContents{\sn background: #963;\sn}\sn\sn#sidebarTabs .txtMoreTab .tabSelected,\sn#sidebarTabs .txtMoreTab .tabSelected:hover{\sn background: #930;\sn color: #cf6;\sn}\sn\sn#sidebarTabs .txtMoreTab .tabUnselected,\sn#sidebarTabs .txtMoreTab .tabUnselected:hover{\sn background: #300;\sn color: #cf6;\sn}\sn\sn#sidebarTabs .txtMoreTab .tabContents {\sn background: #930;\sn}\sn\sn#sidebarTabs .tabContents a {\sn color: #cf6;\sn border: 0;\sn}\sn\sn#sidebarTabs .button.highlight,\sn#sidebarTabs .tabContents a:hover {\sn background: #cf6;\sn color: #300;\sn}\sn/*}}}*/\sn/***\sn!Message Area /%=================================================%/\sn***/\sn/*{{{*/\sn#messageArea {\sn background: #930;\sn color: #fff;\sn}\sn\sn#messageArea a:link, #messageArea a:visited {\sn color: #c90;\sn}\sn\sn#messageArea a:hover {\sn color: #963;\sn background: transparent;\sn}\sn\sn#messageArea a:active {\sn color: #fff;\sn}\sn/*}}}*/\sn/***\sn!Popup /%=================================================%/\sn***/\sn/*{{{*/\sn.popup {\sn background: #eea;\sn border: 1px solid #930;\sn}\sn\sn.popup hr {\sn color: #963;\sn background: #963;\sn border-bottom: 1px;\sn}\sn\sn.popup li.disabled {\sn color: #ba9;\sn}\sn\sn.popup li a, .popup li a:visited {\sn color: #300;\sn}\sn\sn.popup li a:hover {\sn background: #930;\sn color: #eea;\sn}\sn/*}}}*/\sn/***\sn!Tiddler Display /%=================================================%/\sn***/\sn/*{{{*/\sn.tiddler .button {\sn color: #930;\sn}\sn\sn.tiddler .button:hover {\sn color: #cf6;\sn background: #930;\sn}\sn\sn.tiddler .button:active {\sn color: #fff;\sn background: #c90;\sn}\sn\sn.shadow .title {\sn color: #888;\sn}\sn\sn.title {\sn color: #422;\sn}\sn\sn.subtitle {\sn color: #866;\sn}\sn\sn.toolbar {\sn color: #aaa;\sn}\sn\sn.toolbar a,\sn.toolbar a:hover{\sn border: 0;\sn}\sn\sn.tagging, .tagged {\sn border: 1px solid #fff;\sn background-color: #ffc;\sn}\sn\sn.selected .tagging, .selected .tagged {\sn border: 1px solid #aa6;\sn background-color: #ffc;\sn}\sn\sn.tagging .listTitle, .tagged .listTitle {\sncolor: #999999;\sn}\sn\sn.footer {\sn color: #ddd;\sn}\sn\sn.selected .footer {\sn color: #888;\sn}\sn\sn.sparkline {\sn background: #eea;\sn border: 0;\sn}\sn\sn.sparktick {\sn background: #930;\sn}\sn\sn.errorButton {\sn color: #ff0;\sn background: #f00;\sn}\sn\sn.zoomer {\sn color: #963;\sn border: 1px solid #963;\sn}\sn/*}}}*/\sn/***\sn''The viewer is where the tiddler content is displayed'' /%------------------------------------------------%/\sn***/\sn/*{{{*/\sn.viewer .button {\sn background: #c90;\sn color: #300;\sn border-right: 1px solid #300;\sn border-bottom: 1px solid #300;\sn}\sn\sn.viewer .button:hover {\sn background: #eea;\sn color: #c90;\sn}\sn\sn.viewer .imageLink{\sn background: transparent;\sn}\sn\sn.viewer blockquote {\sn border-left: 3px solid #666;\sn}\sn\sn.viewer table {\sn border: 2px solid #303030;\sn}\sn\sn.viewer th, thead td {\sn background: #996;\sn border: 1px solid #606060;\sn color: #fff;\sn}\sn\sn.viewer td, .viewer tr {\sn border: 1px solid #606060;\sn}\sn\sn.viewer pre {\sn border: 1px solid #963;\sn background: #eea;\sn}\sn\sn.viewer code {\sn color: #630;\sn}\sn\sn.viewer hr {\sn border: 0;\sn border-top: dashed 1px #606060;\sn color: #666;\sn}\sn\sn.highlight, .marked {\sn background: #ff3;\sn}\sn/*}}}*/\sn/***\sn''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/\sn***/\sn/*{{{*/\sn.editor input {\sn border: 1px solid #000;\sn}\sn\sn.editor textarea {\sn border: 1px solid #000;\sn width: 100%;\sn}\sn\sn.editorFooter {\sn color: #aaa;\sn}\sn\sn.editorFooter a {\sn color: #930;\sn}\sn\sn.editorFooter a:hover {\sn color: #cf6;\sn background: #930;\sn}\sn\sn.editorFooter a:active {\sn color: #fff;\sn background: #c90;\sn}\sn/*}}}*/";\n\nconfig.shadowTiddlers.ClassicBrownPageTemplate = "<div class='header'>\sn<div class='titleLine'>\sn<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \sn<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\sn</div>\sn</div>\sn<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\sn<div id='sidebar'>\sn<div macro='gradient vert #ffffff #cc9900'>\sn<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\sn</div>\sn<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\sn</div>\sn<div id='displayArea'>\sn<div id='messageArea'></div>\sn<div id='tiddlerDisplay'></div>\sn</div>";\n\nconfig.themes.push("ClassicBrown");\n//}}}\n/***\n!~MonkeyPirateTiddlyWiki Themes\nCreated by Simon Baird from http://simonbaird.com/mptw/\n***/\n//{{{\n\n// couple of extra bits\nconfig.shadowTiddlers.HorizontalMainMenuStyles = "/***\snTo use, add {{{[[HorizontalMainMenuStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also HorizontalMainMenu and PageTemplate.\sn***/\sn/*{{{*/\sn\sn#topMenu br {display:none; }\sn#topMenu { background: #39a; }\sn#topMenu { padding:2px; }\sn#topMenu .button, #topMenu .tiddlyLink {\sn margin-left:0.5em; margin-right:0.5em;\sn padding-left:3px; padding-right:3px;\sn color:white; font-size:115%;\sn}\sn#topMenu .button:hover, #topMenu .tiddlyLink:hover { background:#178;}\sn\sn#displayArea { margin: 1em 15.7em 0em 1em; } /* so we use the freed up space */\sn\sn/* just in case want some QuickOpenTags in your topMenu */\sn#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\sn#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }\sn#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }\sn\sn\sn/*}}}*/";\n\nconfig.shadowTiddlers.SideBarWhiteAndGrey = "/***\snThis CSS by DaveBirss.\sn***/\sn/*{{{*/\sn\sn.tabSelected {\sn background: #fff;\sn}\sn\sn.tabUnselected {\sn background: #eee;\sn}\sn\sn#sidebar {\sn color: #000;\sn background: transparent; \sn}\sn\sn#sidebarOptions {\sn background: #fff;\sn}\sn\sn#sidebarOptions .button {\sn color: #999;\sn}\sn\sn#sidebarOptions .button:hover {\sn color: #000;\sn background: #fff;\sn border-color:white;\sn}\sn\sn#sidebarOptions .button:active {\sn color: #000;\sn background: #fff;\sn}\sn\sn#sidebarOptions .sliderPanel {\sn background: transparent;\sn}\sn\sn#sidebarOptions .sliderPanel A {\sn color: #999;\sn}\sn\sn#sidebarOptions .sliderPanel A:hover {\sn color: #000;\sn background: #fff;\sn}\sn\sn#sidebarOptions .sliderPanel A:active {\sn color: #000;\sn background: #fff;\sn}\sn\sn.sidebarSubHeading {\sn color: #000;\sn}\sn\sn#sidebarTabs {`\sn background: #fff\sn}\sn\sn#sidebarTabs .tabSelected {\sn color: #000;\sn background: #fff;\sn border-top: solid 1px #ccc;\sn border-left: solid 1px #ccc;\sn border-right: solid 1px #ccc;\sn border-bottom: none;\sn}\sn\sn#sidebarTabs .tabUnselected {\sn color: #999;\sn background: #eee;\sn border-top: solid 1px #ccc;\sn border-left: solid 1px #ccc;\sn border-right: solid 1px #ccc;\sn border-bottom: none;\sn}\sn\sn#sidebarTabs .tabContents {\sn background: #fff;\sn}\sn\sn\sn#sidebarTabs .txtMoreTab .tabSelected {\sn background: #fff;\sn}\sn\sn#sidebarTabs .txtMoreTab .tabUnselected {\sn background: #eee;\sn}\sn\sn#sidebarTabs .txtMoreTab .tabContents {\sn background: #fff;\sn}\sn\sn#sidebarTabs .tabContents .tiddlyLink {\sn color: #999;\sn}\sn\sn#sidebarTabs .tabContents .tiddlyLink:hover {\sn background: #fff;\sn color: #000;\sn}\sn\sn#sidebarTabs .tabContents {\sn color: #000;\sn}\sn\sn#sidebarTabs .button {\sn color: #666;\sn}\sn\sn#sidebarTabs .tabContents .button:hover {\sn color: #000;\sn background: #fff;\sn}\sn\sn\sn/*}}}*/";\n\n\nconfig.shadowTiddlers.MPTWStyleSheet = "/***\snCosmetic fixes that probably should be included in a future TW...\sn***/\sn/*{{{*/\sn.viewer .listTitle { list-style-type:none; margin-left:-2em; }\sn.editorFooter .button { padding-top: 0px; padding-bottom:0px; }\sn/*}}}*/\sn/***\snImportant stuff. See TagglyTaggingStyles and HorizontalMainMenuStyles\sn***/\sn/*{{{*/\sn[[TagglyTaggingStyles]]\sn[[HorizontalMainMenuStyles]]\sn/*}}}*/\sn/***\snClint's fix for weird IE behaviours\sn***/\sn/*{{{*/\snbody {position:static;}\sn.tagClear{margin-top:1em;clear:both;}\sn/*}}}*/\sn/***\snJust colours, fonts, tweaks etc. See SideBarWhiteAndGrey\sn***/\sn/*{{{*/\snbody {background:#eee; /* font-size:103%; */}\sna{ color: #069; }\sna:hover{ background: #069; color: #fff; }\sn.popup { background: #178; border: 1px solid #069; }\sn.headerForeground a { color: #6fc;}\sn.headerShadow { left: 2px; top: 2px; }\sn.title { padding:0px; margin:0px; }\sn.siteSubtitle { padding:0px; margin:0px; padding-left:1.5em; }\sn.subtitle { font-size:90%; color:#ccc; padding-left:0.25em; }\snh1,h2,h3,h4,h5 { color: #000; background: transparent; }\sn.title {color:black; font-size:2em;}\sn.shadow .title {color:#999; }\sn.viewer pre { background-color:#f8f8ff; border-color:#ddf; }\sn.viewer { padding-top:0px; }\sn.editor textarea { font-family:monospace; }\sn#sidebarOptions { border:1px #ccc solid; }\sn.tiddler {\sn border-bottom:1px solid #ccc; border-right:1px solid #ccc; padding-bottom:1em; margin-bottom:1em; \sn background:#fff; padding-right:1.5em; }\sn#messageArea { background-color:#bde; border-color:#8ab; border-width:4px; border-style:dotted; font-size:90%; }\sn#messageArea .button { text-decoration:none; font-weight:bold; background:transparent; border:0px; }\sn#messageArea .button:hover {background: #acd; }\sn[[SideBarWhiteAndGrey]]\sn\sn.viewer td {vertical-align:top;}\sn\sn.viewer table.noBorder {border-style:none;}\sn.viewer table.noBorder td {border-style:none;}\sn.viewer table.threeCol td {width:33%;}\sn\sn#adsense {\sn margin: 1em 15.7em 0em 1em; border:1px solid #ddd;\sn background:#f8f8f8; text-align:center;margin-bottom:1em;overflow:hidden;padding:0.5em;} \sn\sn.sliderPanel { margin-left: 2em; }\sn\sn.viewer th { background:#ddd; color:black; }\sn/*}}}*/\sn/*{{{*/\sn/* for testing clint's new formatter. eg {{red{asdfaf}}} */\sn.red { color:white; background:red; display:block; padding:1em; } \sn\sn/* FF doesn't need this. but IE seems to want to make first one white */\sn.txtMainTab .tabset { background:#eee; }\sn.txtMoreTab .tabset { background:transparent; }\sn\sn.faq ol li { padding-top:1em; font-size:120%; }\sn.faq ol ul li { padding-top:0px; font-size:100%; }\sn\sn/*}}}*/\sn";\n\nconfig.shadowTiddlers.MPTWPageTemplate = "<!---\snI've just tweaked my gradient colours and the topMenu bit. See HorizontalMainMenu.\sn--->\sn<!--{{{-->\sn<div class='header' macro='gradient vert #000 #069'>\sn<div class='headerShadow'>\sn<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \sn<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\sn</div>\sn<div class='headerForeground'>\sn<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \sn<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\sn</div>\sn<div id='topMenu' refresh='content' tiddler='MainMenu'></div>\sn</div>\sn<div id='sidebar'>\sn<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\sn<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\sn</div>\sn<div id='displayArea'>\sn<div id='messageArea'></div>\sn<div id='tiddlerDisplay'></div>\sn</div>\sn<!--}}}-->\sn";\n\nconfig.themes.push("MPTW");\n\n\nconfig.shadowTiddlers.MPTWCurvesStyleSheet = "/*{{{*/\sn[[MPTWStyleSheet]]\sn.tiddler { -moz-border-radius: 2em;}\sn.button { -moz-border-radius: 1em;}\sn#sidebarOptions { -moz-border-radius: 0 0 1em 1em;}\sn.tab { -moz-border-radius: 1em 1em 0 0;}\sn.tabContents { -moz-border-radius: 1em 1em 0 0;}\sn/*}}}*/";\n\nconfig.shadowTiddlers.MPTWCurvesPageTemplate = config.shadowTiddlers.MPTWPageTemplate;\n\nconfig.themes.push("MPTWCurves");\n\n//}}}\n/***\n!GTDd3\nCreated by Tomo (Tom Otvos) from http://www.dcubed.ca\n(Based on the original GTD theme by Nathan Bowers at http://snapgrid.com)\n***/\n//{{{\nconfig.shadowTiddlers.GTDd3PageTemplate = "<div class='header'>\sn<div class='headerShadow'>\sn<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \sn<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\sn</div>\sn<div class='headerForeground'>\sn<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \sn<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\sn</div>\sn</div>\sn<div id='mainMenu' refresh='content' tiddler='MainMenu' force='true'></div>\sn<div id='sidebar'>\sn<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\sn<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\sn</div>\sn<div id='displayArea'>\sn<div id='messageArea'></div>\sn<div id='tiddlerDisplay'></div>\sn</div>";\n\nconfig.shadowTiddlers.GTDd3StyleSheet = "/***\sn!GTD specific styles\sn***/\sn\sn/*{{{*/\sn\sn/* the tagging popup really gets in the way so push it off to the side */\sn.tagging { float: right; }\sn\sn/* this unbullets actions in the actionList macro */\snul.gtdActionList { list-style-type: none; }\snli.gtdActionListProject, li.gtdActionListContext { margin-top: 1.0em; }\sn\sn.gtdCompletedActionItem { text-decoration: line-through; }\sn.gtdNextActionItem { border-bottom: 1px solid red; }\sn\sn/*}}}*/\sn\sn/***\sn!Imported 3x5 printing styles\sn//adapted from the work of Clint Checketts, http://www.checkettsweb.com/tw/gtd_tiddlywiki.htm //\sn***/\sn\sn/*{{{*/\sn\sn@media print {\sn#mainMenu, #sidebar, #messageArea {display: none !important;}\sn#displayArea {margin: 1em 1em 0em 1em;}\sn\sn\sn/* LAYOUT ELEMENTS ========================================================== */\sn*\sn{\sn margin: 0;\sn padding: 0;\sn}\sn\sn#contentWrapper\sn{\sn margin: 0;\sn width: 100%;\sn position: static;\sn}\sn\snbody {\sn background: #fff;\sn color: #000;\sn font-size: 6.2pt;\sn font-family: \s"Lucida Grande\s", \s"Bitstream Vera Sans\s", Helvetica, Verdana, Arial, sans-serif;\sn}\sn\snimg {\sn max-width: 2.2in;\sn max-height: 4.3in;\sn}\sn\sn#header, #side_container, #storeArea, #copyright, #floater, #messageArea, .save_accesskey, .site_description, #saveTest, .toolbar, .header, .footer, .tagging, .tagged\sn{\sn display: none;\sn}\sn\sn#tiddlerDisplay, #displayArea\sn{\sn display: inline;\sn}\sn\sn.tiddler {\sn margin: 0 0 2em 0;\sn border-top: 1px solid #000;\sn page-break-before: always;\sn}\sn\sn.tiddler:first-child {\sn page-break-before: ;\sn}\sn\sn.title {\sn font-size: 1.6em;\sn font-weight: bold;\sn margin-bottom: .3em;\sn padding: .2em 0;\sn border-bottom: 1px dotted #000;\sn}\sn\snp, blockquote, ul, li, ol, dt, dd, dl, table\sn{\sn margin: 0 0 .3em 0;\sn}\sn\snh1, h2, h3, h4, h5, h6\sn{\sn margin: .2em 0;\sn} \sn\snh1\sn{\sn font-size: 1.5em;\sn}\sn\snh2\sn{\sn font-size: 1.3em;\sn}\sn\snh3\sn{\sn font-size: 1.25em;\sn}\sn\snh4\sn{\sn font-size: 1.15em;\sn}\sn\snh5\sn{\sn font-size: 1.1em;\sn}\sn\snblockquote\sn{\sn margin: .6em;\sn padding-left: .6em;\sn border-left: 1px solid #ccc;\sn}\sn\snul\sn{\sn list-style-type: circle;\sn}\sn\snli\sn{\sn margin: .1em 0 .1em 2em;\sn line-height: 1.4em; \sn}\sn\sntable\sn{\sn border-collapse: collapse;\sn font-size: 1em;\sn}\sn\sntd, th\sn{\sn border: 1px solid #999;\sn padding: .2em;\sn}\sn\snhr {\sn border: none;\sn border-top: dotted 1px #777;\sn height: 1px;\sn color: #777;\sn margin: .6em 0;\sn}\sn}\sn/*}}}*/\sn\sn/***\sn!Imported styles for calendar plugin\sn***/\sn\sn/*{{{*/\sn.calendar{\sn border-bottom: 1px solid #550000;\sn}\sn\sn.viewer .calendar{\sn width: 220px;\sn}\sn\sn#mainMenu .calendar{\sn font-size: 8px;\sn cursor: pointer;\sn width: 100%;\sn border: 0;\sn border-collapse: collapse;\sn}\sn\sn#mainMenu .calendar .button{\sn border: 0;\sn}\sn\sn#mainMenu .calendar td{\sn font-size: 8pt;\sn padding: 0;\sn background: #fff;\sn border: 0;\sn}\sn\sn#mainMenu .calendar a{\sn margin: 0;\sn color: #000;\sn background: transparent;\sn}\sn\sn#mainMenu .calendar a:hover{\sn color: #000;\sn background: transparent;\sn}\sn\sn#mainMenu .calendarMonthname,\sn#mainMenu .calendar .calendarMonthTitle td a{\sn color: #fff;\sn}\sn\sn#mainMenu .calendarDaysOfWeek td{\sn background: #500;\sn color: #fff;\sn}\sn/*}}}*/\sn\sn\sn/***\sn!Layout Rules /%==============================================%/\sn***/\sn/*{{{*/\sn\snbody { position: static; }\sn\sn.headerForeground, .headerShadow {\sn padding-top: 1em;\sn}\sn\sn.tiddler {\sn margin: 0 0 0.9em 0;\sn padding-bottom: 1em;\sn}\sn\sn#mainMenu {\sn width: 16em;\sn font-size: 1em;\sn text-align: left;\sn}\sn\sn#mainMenu * {\sn font-size: 1em;\sn font-weight: normal;\sn padding: 0; margin: 0; border: 0;\sn}\sn\sn#mainMenu ul {\sn list-style: none;\sn margin-bottom: 10px;\sn}\sn\sn#mainMenu li {\sn text-indent: 1em;\sn}\sn\sn#mainMenu a.button, #mainMenu a.tiddlyLink, #mainMenu a.externalLink {\sn display: block; margin: 0;\sn}\sn\sn#displayArea {\sn margin-left: 19em;\sn}\sn\sn/*}}}*/\sn\sn/***\sn!Colors Used\sn*@@bgcolor(#8cf): #8cf - Background blue@@\sn*@@bgcolor(#18f): #18f - Top blue@@\sn*@@bgcolor(#04b): #04b - Mid blue@@\sn*@@bgcolor(#014):color(#fff): #014 - Bottom blue@@\sn*@@bgcolor(#ffc): #ffc - Bright yellow@@\sn*@@bgcolor(#fe8): #fe8 - Highlight yellow@@\sn*@@bgcolor(#db4): #db4 - Background yellow@@\sn*@@bgcolor(#841): #841 - Border yellow@@\sn*@@bgcolor(#703):color(#fff): #703 - Title red@@\sn*@@bgcolor(#866): #866 - Subtitle grey@@\sn!Generic Rules /%==============================================%/\sn***/\sn/*{{{*/\snbody {\sn background: #464646;\sn color: #000;\sn}\sn\sna{\sn color: #04b;\sn}\sn\sna:hover{\sn background: #04b;\sn color: #fff;\sn}\sn\sna img{\sn border: 0;\sn}\sn\snh1,h2,h3,h4,h5 {\sn color: #000;\sn background: #eee;\sn}\sn\sn.button {\sn color: #014;\sn border: 1px solid #fff;\sn}\sn\sn.button:hover {\sn color: #014;\sn background: #fe8;\sn border-color: #db4;\sn}\sn\sn.button:active {\sn color: #fff;\sn background: #db4;\sn border: 1px solid #841;\sn}\sn\sn/*}}}*/\sn/***\sn!Header /%==================================================%/\sn***/\sn/*{{{*/\sn.header {\sn background: #000;\sn}\sn\sn.headerShadow {\sn color: #000;\sn}\sn\sn.headerShadow a {\sn font-weight: normal;\sn color: #000;\sn}\sn\sn.headerForeground {\sn color: #cf6;\sn}\sn\sn.headerForeground a {\sn font-weight: normal;\sn color: #cf6;\sn}\sn\sn/* ??? what is up when you specify a site title colour in IE ??? */\sn/* .siteTitle { color: red; } */\sn\sn/*}}}*/\sn/***\sn!General tabs /%=================================================%/\sn***/\sn/*{{{*/\sn\sn.tabSelected {\sn color: #fff;\sn background: #960;\sn border: none;\sn}\sn\sn.tabUnselected {\sn color: #fff;\sn background: #660;\sn}\sn\sn.tabContents {\sn color: #004;\sn background: #960;\sn border: none;\sn}\sn\sn.tabContents .button, .tabContents a {\sn border: none;\sn color: #fff;\sn}\sn\sn.tabContents a:hover, .tabset a:hover {\sn background: #000;\sn}\sn\sn/* make nested tab areas look different */\sn.tabContents .tabSelected, .tabContents .tabContents {\sn background: #700;\sn color: #fff;\sn}\sn\sn.tabContents .tabContents {\sn color: #eeb;\sn}\sn\sn/*}}}*/\sn/***\sn!Main Menu /%=================================================%/\sn***/\sn/*{{{*/\sn#mainMenu {\sn background: #700;\sn color: #fff;\sn border-right: 3px solid #500;\sn}\sn\sn#mainMenu * {\sn color: #fff;\sn}\sn\sn#mainMenu a.button, #mainMenu a.tiddlyLink, #mainMenu a.externalLink {\sn border: none;\sn border-bottom: 1px solid #500;\sn border-top: 1px solid #900;\sn}\sn\sn#mainMenu a:hover,\sn#mainMenu a.button:hover {\sn background-color: #b00;\sn color: #fff;\sn}\sn\sn/*}}}*/\sn/***\sn!Sidebar options /%=================================================%/\sn~TiddlyLinks and buttons are treated identically in the sidebar and slider panel\sn***/\sn/*{{{*/\sn#sidebar {\sn color: #000;\sn background: #eeb;\sn border-right: 3px solid #bb8;\sn border-bottom: 3px solid #520;\sn}\sn\sn#sidebarOptions input {\sn border: 1px solid #04b;\sn}\sn\sn#sidebarOptions .sliderPanel {\sn background: #fff;\sn}\sn\sn#sidebarOptions .sliderPanel a {\sn border: none;\sn color: #700;\sn}\sn\sn#sidebarOptions .sliderPanel a:hover {\sn color: #fff;\sn background: #700;\sn}\sn\sn#sidebarOptions .sliderPanel a:active {\sn color: #700;\sn background: #fff;\sn}\sn\sn#sidebarOptions a {\sn color: #700;\sn border: none;\sn}\sn\sn#sidebarOptions a:hover, #sidebarOptions a:active {\sn color: #fff;\sn background: #700;\sn}\sn\sn/*}}}*/\sn/***\sn!Message Area /%=================================================%/\sn***/\sn/*{{{*/\sn#messageArea {\sn border-right: 3px solid #da1;\sn border-bottom: 3px solid #a80;\sn background: #ffe72f;\sn color: #014;\sn}\sn\sn#messageArea .button {\sn padding: 0.2em 0.2em 0.2em 0.2em;\sn color: #014;\sn background: #fff;\sn}\sn\sn/*}}}*/\sn/***\sn!Popup /%=================================================%/\sn***/\sn/*{{{*/\sn.popup {\sn background: #333;\sn border: none;\sn}\sn\sn.popup hr {\sn color: #000;\sn}\sn\sn.popup li.disabled {\sn color: #666;\sn background: #cf6;\sn}\sn\sn.popup li a, .popup li a:visited {\sn color: #000;\sn border: 1px outset #cf6;\sn background: #cf6;\sn}\sn\sn.popup li a:hover {\sn color: #000;\sn border: 1px outset #cf6;\sn background: #ef9;\sn}\sn/*}}}*/\sn/***\sn!Tiddler Display /%=================================================%/\sn***/\sn/*{{{*/\sn.tiddler {\sn background: #fff;\sn border-right: 3px solid #aaa;\sn border-bottom: 3px solid #555;\sn}\sn\sn.tiddler .defaultCommand {\sn font-weight: bold;\sn}\sn\sn.shadow .title {\sn color: #866;\sn}\sn\sn.title {\sn color: #900;\sn}\sn\sn.subtitle {\sn color: #866;\sn}\sn\sn.toolbar {\sn color: #000;\sn}\sn\sn.toolbar .button {\sn background: #cf6;\sn border: 1px outset #cf6;\sn}\sn\sn.toolbar .button:hover {\sn background: #ef9;\sn}\sn\sn.tagging, .tagged {\sn border: 1px solid #eee;\sn background-color: #eee;\sn}\sn\sn.selected .tagging, .selected .tagged {\sn background-color: #ddd;\sn border: 1px solid #bbb;\sn}\sn\sn.tagging .listTitle, .tagged .listTitle {\sn color: #014;\sn}\sn\sn.tagging .button, .tagged .button {\sn border: none;\sn}\sn\sn.footer {\sn color: #ddd;\sn}\sn\sn.selected .footer {\sn color: #888;\sn}\sn\sn.sparkline {\sn background: #8cf;\sn border: 0;\sn}\sn\sn.sparktick {\sn background: #014;\sn}\sn\sn.errorButton {\sn color: #ff0;\sn background: #f00;\sn}\sn\sn.cascade {\sn background: #eef;\sn color: #aac;\sn border: 1px solid #aac;\sn}\sn\sn.imageLink, #displayArea .imageLink {\sn background: transparent;\sn}\sn\sn/*}}}*/\sn/***\sn''The viewer is where the tiddler content is displayed'' /%------------------------------------------------%/\sn***/\sn/*{{{*/\sn\sn.viewer .listTitle {list-style-type: none; margin-left: -2em;}\sn\sn.viewer .button {\sn border: 1px solid #db4;\sn}\sn\sn.viewer blockquote {\sn border-left: 3px solid #666;\sn}\sn\sn.viewer table {\sn border: 2px solid #333;\sn}\sn\sn.viewer th, thead td {\sn background: #db4;\sn border: 1px solid #666;\sn color: #fff;\sn}\sn\sn.viewer td, .viewer tr {\sn border: 1px solid #666;\sn}\sn\sn.viewer pre {\sn border: 1px solid #fe8;\sn background: #ffc;\sn}\sn\sn.viewer code {\sn color: #703;\sn}\sn\sn.viewer hr {\sn border: 0;\sn border-top: dashed 1px #666;\sn color: #666;\sn}\sn\sn.highlight, .marked {\sn background: #fe8;\sn}\sn/*}}}*/\sn/***\sn''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/\sn***/\sn/*{{{*/\sn.editor input {\sn border: 1px solid #04b;\sn}\sn\sn.editor textarea {\sn border: 1px solid #04b;\sn width: 100%;\sn}\sn\sn.editorFooter {\sn color: #aaa;\sn}\sn\sn/*}}}*/\sn/***\sn!Personal preferences\sn***/\sn\sn/*{{{*/\sn/* not required, but the menu looks a whole lot nicer flushed left */\sn#mainMenu { text-align: left; }\sn/* make input fields in viewer (options) show up in correct size */\sn.viewer input { font-size: 0.9em; }\sn/*}}}*/\sn";\n\nconfig.themes.push("GTDd3");\n\n//}}}\n
/***\n''Name:'' LoadExtPlugin\n''Source:'' http://www.sourceforge.net/projects/ptw/\n''Author:'' BramChen\n''Type:'' Plugin\n''Description:'' LoadExtPlugin allows you to load external extensions from the file lists (named .js) within those tiddlers taged with "ExtList". \n''Syntax:'' \n''Revision History:''\n<<<\nv1.5.1 (26 Feb 2006)\n* JSLint checked\nv1.5.0 (02 Feb 2006)\n* add new function config.macros.loadExt.LoadScripts(), keep all variables to be local, thanks Udo.\n* Fixed several missing variable declarations\nv1.4.0 (20 Jan 2006)\n* refreshCode() improved.\nv1.3.0 (14 Jan 2006) \n* strip startup error massage for IE used\nv1.2.0 (13 Jan 2006) \n* TiddlyWiki version 2.0.0 or above required.\n* refreshCode() improved.\nv1.1.0 (10 Jan 2006)\n* To make the extensions list handling more robust, thanks Udo.\n* Fix bugs for multi-tiddlers tagged with ExtList\nv1.0.0 (07 Jan 2006) \n* Combine the RefreshExt code and LoadExtPlugin, and also make TW 1.2 to be backward compatible, thanks Udo.\n* Globle function refreshCode() added, and reserve the refreshExt macro.\n* Fix a minor bug for variable "scriptfile".\nv0.3.0 (29 Dec 2005)\n* macro refreshExt modified to refresh formatter\nv0.2.0 (24 Nov 2005)\n* macro refreshExt modified for TW 1.2.39 beta 2 and above\nv0.1.0 (25 Sep 2005) \n* initial release\n<<<\n***/\n// //''Code section:''\n//{{{\n\nversion.extensions.loadExt = {major: 1, minor: 5, revision: 1,\n date: new Date("Feb 26, 2006"),\n name: "LoadExtPlugin",\n type: "Plugin",\n author: "BramChen",\n source: "http://sourceforge.net/project/showfiles.php?group_id=150646"\n};\nconfig.macros.loadExt = {\n handler: function(place,macroName,params){this.loadScripts();},\n\n loadScripts: function() {\n var extTag = "ExtList";\n var str = ""; var scripts = [];\n var tiddlers = store.getTaggedTiddlers(extTag);\n for(var s=0 ; s<tiddlers.length; s++){\n str += store.getRecursiveTiddlerText(tiddlers[s].title)+"\sn";\n }\n\n //scripts = str.split(";");\n scripts = str.replace(/[;\sr]/mg,"\sn").split("\sn");\n for (var i=0; i<scripts.length-1; i++) {\n var scriptfile = scripts[i].trim();\n if (scriptfile.length < 2 || scriptfile.substr(0,2) == "//"){\n continue;\n }\n // displayMessage("loaded: "+ scriptfile);\n var n = document.createElement("script"); \n n.type = "text/javascript";\n n.src = scriptfile;\n document.getElementsByTagName("head")[0].appendChild(n);\n }\n\n var theCodes = "refreshCode();";\n n = document.createElement("script");\n n.type = "text/javascript";\n try {n.appendChild(document.createTextNode(theCodes));}\n catch (e) {alert("PTW is best viewed with the Firefox web browser!");}\n document.getElementsByTagName("head")[0].appendChild(n); \n }\n};\n\nfunction refreshCode(){\n formatter = new Formatter(config.formatters);\n story.forEachTiddler(function(title){story.refreshTiddler(title,DEFAULT_VIEW_TEMPLATE,true);});\n refreshDisplay();\n return;\n}\nconfig.macros.loadExt.loadScripts();\n//}}}
/Addins/RecentPlugin.js