* 文章標籤顯示在文章標題''上面''(取代右浮動框)。\n* 文章標籤名單顯示在文章內容的''下面''(取代左浮動框)。\n* 當編輯一篇文章時,標籤編輯框位於文章內容的上面(取代下面)。\n透過ViewTemplate(檢視TagglyTaggingViewTempplate)和EditTemplate(檢視 TagglyTaggingEditTemplate)還有TagglyTaggingStyles的一些CSS的小修訂就能轉換版面配置。\n\n
TW標籤巨集指令的預設值稱為"tagging",TagglyTagging提供一個加強版本稱為"TagglyTagging",所以在TagglyTaggingViewTemplate, macro="tagging" 是可以由"macro="tagglyTagging"取代,tagglyTagging巨集指令讓您能完成一些任務,就如:\n* 依據標題以升幕或降幕來排序標籤名單,修訂日期或已建立的日期。\n* 欄位名單格式化。\n* 隱藏標籤名單。\n在每一個文章的基礎下,也可牢記您的優先權。\n\n
"New Here"按紐是一種選項而且非常有用,它使您能迅速建立一個新的文章,在您所看到的文章上自動貼上標籤,例如:如果您看到位址名稱就可點選"New Here"來建立一個位址標籤的新文章。\n\n
這也是一種選項,因為我們經常想要由文章檢視標籤,當您點選這個標籤時就成為預設動作,您可以經由點選標籤右邊的下拉式方塊進入其他標籤功能。\n\n
TagglyTagging (也是以"TagglyWiki Style Tagging"聞名)是套件組合,您可以在您的TiddlyWiki安裝範本和樣式,並且讓您以強大與有用的方法使用標籤。\n\n
因為TiddlyWiki 2.0版的關係,在運用方面確實少上許多,(TagglyTagging所產生的概念是給予文章一個標籤,反之亦然,因此TiddlyWiki 2.0版是讓概念集中成為標籤,請查閱底下的"Where did it come from?"將得到更多的資訊)。\n\n
TagglyTagging讓您在TiddlyWiki的資料標籤能力使用上有更好的表現。\nTagglyTagging能執行的摘要列表有:\n* 動態定義您的資料結構。\n* 避免手動維護您的文章"索引"頁面。\n* 透過標籤階層使所有的資料更容易定位。\n\n還有一些原因必須讓TagglyTagging嘗試看看:\n* 找出您無法大量得到從TiddlyWiki的標籤資料的值。\n* 您有時被彈出式標籤選單所困惱,特別是當他們長時間停留在您的網頁上。\n\n聽起來不錯,但是我還沒有感覺它的好處...\n* 沒有展示很難說清楚,請嘗試TagglyTaggingTutorial。\n\n\n
有一個最簡便的方法就是從[[這裡|Download]]下載空白範例,當然也可在TagglyTaging安裝套件列表。\n\n
請瀏覽[[TagglyTagging History]]。\n\n
即時最先更新,這裡擁有許多新功能,我將設法把它全部列出:\n* TagglyTagging 名單目前考慮 excludeLists (也可以使用 excludeTagging)。\n* 在標籤彈出選單中加入"新增文章"連結。\n* New Here 和 New Journal Here 現在是巨集指令而非命令。\n* 我們現在是由http://trac.tiddlywiki.org/Trunk/contributors/SimonBaird/mptw/trunk 而產生。(按:空網頁)\n* 所有套件都有版本號碼,實際上他們現在都是3.0,很遺憾可能這些因素造成困擾。\n* 有一個沒有MPTW主題的版本(例如:版面配置和顏色的輪廓),請查閱[[無版面配置.html|./empty_nolayout.html]],目前您可以更容易的利用來自於http://tiddlythemes.com/ 的主題設計自己喜愛的MPTW。\n* 新完成/關閉和取消/關閉工具列按鈕。\n* 您可以設定比較喜愛的日期格式和日誌標題格式,細節請查閱MptwLayoutPlugin。\n\n因為包含許多新功能,似乎是會產生許多錯誤,所以假如找到任何錯誤請[[讓我知悉|Contact]]。\n\n!問題認知\n* --每當有排除項目的名單,逗號並非可以適當的處理。--\n* --網站地圖模式也無法考量excludeLists。--\n* --當檢閱excludeLists標籤時,可能某些事項排除困難。--\n* 標籤名單的數量包含隱藏項目。\n\n
請查閱MptwUpgradeTsURL。\n您可以使用它來[[升級|Upgrade]]\n\n
當您每次升級我所貼的excludeLists標籤時,此套件並不會弄亂您的timeline。當您要搜尋您自己的內容時,就是excludeSearch,而非這個套件。\n\n
繁體中文翻譯,發現任何問題及建議請寄 ''mailto:ander1206@gmail.com'' 反應或歡迎蒞臨 ''http://www.ahwii.com''
* 是一場會議,所以給予它一個標籤稱為”會議”,在標籤框輸入”會議”。\n * 讓我們假設此場會議是預算計劃的例子,在標籤框輸入”預算”。\n * 所以您的標籤框裡應該看起來就像:會議 Leo 預算。\n\n# 現在可以點選"完成"按鈕儲
My pre 2.0 TiddlyWiki stuff can be found in in the very first incarnation of MonkeyPirateTiddlyWiki at http://mptw1.tiddlyspot.com/. For archaeological purposes only. If you're still running a pre 1.x TiddlyWiki it's really time to upgrade.
* 是一場會議,所以給予它一個標籤稱為”會議”,在標籤框輸入”會議”。\n * 讓我們假設此場會議是預算計劃的例子,在標籤框輸入”預算”。\n * 所以您的標籤框裡應該看起來就像:會議 Leo 預算。\n\n
/***\n| Name|CloseOnCancelPlugin|\n| Description|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|\n| Version|3.0 ($Rev: 1845 $)|\n| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|\n| Source|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|\n| Author|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\n***/\n//{{{\nmerge(config.commands.cancelTiddler,{\n\n handler_orig_closeUnsaved: config.commands.cancelTiddler.handler,\n\n handler: function(event,src,title) {\n this.handler_orig_closeUnsaved(event,src,title);\n if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))\n story.closeTiddler(title,true);\n return false;\n }\n\n});\n\n//}}}\n\n
Background: #fff\nForeground: #000\nPrimaryPale: #69c\nPrimaryLight: #36a\nPrimaryMid: #025\nPrimaryDark: #012\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #520\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nError: #f88
//{{{\nconfig.options.chkHttpReadOnly = false; // means web visitors can experiment with your site by clicking edit\nconfig.options.chkInsertTabs = true; // tab inserts a tab when editing a tiddler\nconfig.views.wikified.defaultText = ""; // don't need message when a tiddler doesn't exist\nconfig.views.editor.defaultText = ""; // don't need message when creating a new tiddler \n\n\n// custom for mptw.tiddlyspot.com\nconfig.views.wikified.defaultText = "This tiddler does not exist. If you are looking for an older plugin there is some chance you can find it over at http://mptw2.tiddlyspot.com/";\n\n\n//}}}\n
simon.baird/%%/@gmail.com
MonkeyPirateTiddlyWiki [[What's New]]
此軟體是開放原始碼並且會一直免費,但是贊助將鼓勵我繼續加強及維護MonkeyPirateTiddlyWiki (也包含MonkeyGTD),假如您想贊助請使用下面的連結,謝謝您!\n<html><form action="https://www.paypal.com/cgi-bin/webscr" method="post">\n<input type="hidden" name="cmd" value="_s-xclick">\n<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">\n<img alt="" border="0" src="https://www.paypal.com/en_AU/i/scr/pixel.gif" width="1" height="1">\n<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHFgYJKoZIhvcNAQcEoIIHBzCCBwMCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYA96IeZGK/4wdV1/ZUgjXRBCwHd70A5D2EhV7pV+V3+7KDokAlu58UnIFv0pY+9pqpxbLzY4nQD8byTzcai16OkJTl2BjNhJPnjxd5tiixiY2jeV8fq5k38Z72t5mR67snkWNaOnSiZ0sy1i4uLEwdwYmQcRwTFkrE6ZKJAlm8fSDELMAkGBSsOAwIaBQAwgZMGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIoAQafN2/jJqAcPPKNYBflRBAkd5YSbLiAk/mUaGoUfwcobKeBCkpFIrgCBXrnKvllPGhzztP0VE1jjcC+NThWANGLwFvkEAa+GLqXrdmGPOBb6VOyRq+wUabxmLHav3UhWkhBMlsWBBvjJwDNVW3V+gcrO6q/hek1ESgggOHMIIDgzCCAuygAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20wHhcNMDQwMjEzMTAxMzE1WhcNMzUwMjEzMTAxMzE1WjCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFHTt38RMxLXJyO2SmS+Ndl72T7oKJ4u4uw+6awntALWh03PewmIJuzbALScsTS4sZoS1fKciBGoh11gIfHzylvkdNe/hJl66/RGqrj5rFb08sAABNTzDTiqqNpJeBsYs/c2aiGozptX2RlnBktH+SUNpAajW724Nv2Wvhif6sFAgMBAAGjge4wgeswHQYDVR0OBBYEFJaffLvGbxe9WT9S1wob7BDWZJRrMIG7BgNVHSMEgbMwgbCAFJaffLvGbxe9WT9S1wob7BDWZJRroYGUpIGRMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAIFfOlaagFrl71+jq6OKidbWFSE+Q4FqROvdgIONth+8kSK//Y/4ihuE4Ymvzn5ceE3S/iBSQQMjyvb+s2TWbQYDwcp129OPIbD9epdr4tJOUNiSojw7BHwYRiPh58S1xGlFgHFXwrEBb3dgNbMUa+u4qectsMAXpVHnD9wIyfmHMYIBmjCCAZYCAQEwgZQwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tAgEAMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wNjA0MjAxNjA0MTBaMCMGCSqGSIb3DQEJBDEWBBRzSfthO3tPpm82bNvEhK/w7KeCBjANBgkqhkiG9w0BAQEFAASBgHfmjcg4sSFJuM3zOt8JlzFBWKHGpckcb6jGKaTG6ppTe/t/E7XOxVk11v9msOpc27CCC7InqArPTK3LiT4Z7N5c13sJLigj5EsMPznMTGkpvXPlbHWmEQcODm3YlClpGuQacRkS/MpHDXA1eWFoM7D9vgzKwsOUy2kNbp2mezK5-----END PKCS7-----\n">\n</form></html>\n\n
第一件事是您必須取得專屬新的未使用過的MonkeyPirateTiddlyWiki檔案,有兩種版本,一個是有MPTW"佈景主題",另一個沒有,您需要下載並且儲存在桌上型電腦或本機任何地方,要得到這些檔案您必須要:\n*使用右鍵點選[[這裡(MPTW 佈景主題)|http://mptw.tiddlyspot.com/empty.html]] 或者 [[這裡 (標準TiddlyWiki 佈景主題)|http://mptw.tiddlyspot.com/empty_nolayout.html]]並且選擇"連結另存新檔..."或"另存目標..."(端賴您的瀏覽器而定)。\n*為檔案選擇一個名稱(或者假如您願意的話,您可以留下empty.html名稱)。\n*現在搜尋檔案並且雙擊該檔。\n\n
[[MptwEditTemplate]]\n
摘錄是新的標籤名單控制系統,能顯示文章內容的摘錄,展開[[最新消息|What's New]]可以展示其功能。\n\n
/***\n| Name:|ExtentTagButtonPlugin|\n| Description:|Adds a New tiddler button in the tag drop down|\n| Version:|3.0 ($Rev: 1845 $)|\n| Date:|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|\n| Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\n***/\n//{{{\n\n// can't hijack a click handler. must redefine this entirely.\n// would be good to refactor in the core...\n// this version copied from 2.1.3 core\n\n// Event handler for clicking on a tiddler tag\nfunction onClickTag(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var popup = Popup.create(this);\n var tag = this.getAttribute("tag");\n var title = this.getAttribute("tiddler");\n if(popup && tag)\n {\n var tagged = store.getTaggedTiddlers(tag);\n var titles = [];\n var li,r;\n for(r=0;r<tagged.length;r++)\n if(tagged[r].title != title)\n titles.push(tagged[r].title);\n var lingo = config.views.wikified.tag;\n\n wikify("<<newTiddler label:'New tiddler' tag:"+tag+">>",createTiddlyElement(popup,"li")); // <---- the only modification\n\n if(titles.length > 0)\n {\n var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,onClickTagOpenAll);\n openAll.setAttribute("tag",tag);\n createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");\n for(r=0; r<titles.length; r++)\n {\n createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);\n }\n }\n else\n createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),lingo.popupNone.format([tag]));\n createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");\n var h = createTiddlyLink(createTiddlyElement(popup,"li"),tag,false);\n createTiddlyText(h,lingo.openTag.format([tag]));\n }\n Popup.show(popup,false);\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n\n//}}}\n\n
大部分hideWhen的共通使用方式,就如這樣:\n\n{{{<div macro="showWhen tiddler.tags.contains('blah')">...</div>}}}\n\n您現在也可以這樣做:\n\n{{{<div macro="showWhenTagged blah">...</div>}}}\n\n這是有點比較清楚與簡易的寫法。\n\n也可以是showWhenTaggedAny 和 showWhenExists。\n\n細節請查閱HideWhenPlugin。\n\n
檢視[[一大串新功能|A bunch of new stuff]],這是唯一變更的套件,因為昨日是TagglyTaggingPlugin。\n\n
使用此 TiddlyWiki 的空白範本之前,請先修改以下預設文章::\n* SiteTitle 及 SiteSubtitle:網站的標題和副標題,顯示於頁面上方(在儲存變更後,將顯示於瀏覽器視窗的標題列)。\n* MainMenu:主選單(通常在頁面左側)。\n* DefaultTiddlers:內含一些文章的標題,可於載入TiddlyWiki 後的預設開啟。\n請輸入您的大名,作為所建立/ 編輯的文章署名:<<option txtUserName>>\n\n也請瀏覽 MonkeyPirateTiddlyWiki.
/***\n| Name|HideWhenPlugin|\n| Description|Allows conditional inclusion/exclusion in templates|\n| Version|3.0 ($Rev: 1845 $)|\n| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|\n| Source|http://mptw.tiddlyspot.com/#HideWhenPlugin|\n| Author|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\nFor use in ViewTemplate and EditTemplate. Example usage:\n{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}\n{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}\n***/\n//{{{\n\nwindow.removeElementWhen = function(test,place) {\n if (test) {\n removeChildren(place);\n place.parentNode.removeChild(place);\n }\n};\n\nmerge(config.macros,{\n\n hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( eval(paramString), place);\n }},\n\n showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !eval(paramString), place);\n }},\n\n hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAll(params), place);\n }},\n\n showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAll(params), place);\n }},\n\n hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAny(params), place);\n }},\n\n showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAny(params), place);\n }},\n\n hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAll(params), place);\n }},\n\n showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAll(params), place);\n }},\n\n hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);\n }},\n\n showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);\n }}\n\n});\n\n//}}}\n\n
# 使用右鍵點選http://www.tiddlywiki.com/empty.html 並選擇"另存新檔"下載一個新的及乾淨標準空白TiddlyWiki範例。\n# 點選"偏好設定"並選擇ImportTiddlers。\n# 在"在此輸入URL或路徑"貼上{{{http://mptw.tiddlyspot.com/empty.html}}}<br>(從Tiddlyspot網站直接運作這樣事情,需要貼上{{{/proxy/mptw.tiddlyspot.com/empty.html}}})。\n# 點選"匯入"。\n# 在表格的表頭點選複選框來選擇所有文章。\n# 放棄點選PageTemplate文章。\n# 點選"執行選項"並選擇"匯入所選文章"。\n# 點選"完成"以確認您想要改寫的文章。\n# 儲存並重新載入網頁。\n# 重複步驟2,3和4。\n# 點選//只有// PageTemplate。\n# 重複步驟7,8,9。\n\n# Download a fresh clean standard empty TiddlyWiki by right clicking http://www.tiddlywiki.com/empty.html and selecting "Save as...".\n# Click options then click ImportTiddlers.\n# Paste in {{{http://mptw.tiddlyspot.com/empty.html}}} after "Enter URL..."<br>(To do this direct from Tiddlyspot paste in {{{/proxy/mptw.tiddlyspot.com/empty.html}}})\n# Click "fetch"\n# Click the checkbox in the table heading to select all tiddlers\n# Untick the PageTemplate tiddler\n# Click "More actions..." and select "Import these tiddlers"\n# Click "OK" to confirm you want to overwrite the tiddlers\n# Save and reload.\n# Repeat step 2, 3 and 4\n# Tick //only// PageTemplate\n# Repeat steps 7,8,9.\n\n
填上一些內容就像”Leo Runcible, ext 1234. 喜愛小貓”或者無論什麼內容都可以
* 讓我們假設您從會議中返回並想要輸入有關於開會內容的筆記。\n o 點選”新增文章”。\n o 輸入”Leo的會議 10/12”的標題。\n o 在內容框添加一些會議筆記。\n o 還不用點選”完成”…。
這個網站的套件將會一直免費使用並且是開放原始碼,他們是根據TheBSDLicense之下授權,這表示除了改變授權之外,您可以對它們作任何想改變的事情。\n\n
// ---------------------------------------------------------------------------------\n// Translateable strings\n// ---------------------------------------------------------------------------------\nversion.extensions.Lingo_zh_TW = {major: 2, minor: 1, revision: 3,\n date: new Date("Nov 4, 2006"),\n author: "BramChen",\n source: "http://sourceforge.net/project/showfiles.php?group_id=150646"\n};\n\nmerge(config.options,{\n txtUserName: "YourName"});\n\n// Messages\nmerge(config.messages,{\n customConfigError: "套件載入發生錯誤,詳細請參考 PluginManager",\n pluginError: "發生錯誤: %0",\n pluginDisabled: "未執行,因標籤設為 'systemConfigDisable'",\n pluginForced: "已執行,因標籤設為 'systemConfigForce'",\n pluginVersionError: "未執行,套件需較新版本的 TiddlyWiki",\n nothingSelected: "尚未作任何選擇,至少需選擇一項",\n savedSnapshotError: "此 TiddlyWiki 未正確存檔,詳見 http://www.tiddlywiki.com/#DownloadSoftware",\n subtitleUnknown: "(未知)",\n undefinedTiddlerToolTip: "'%0' 尚無內容",\n shadowedTiddlerToolTip: "'%0' 尚無內容, 但已定義隱藏的預設值",\n tiddlerLinkTooltip: "%0 - %1, %2",\n externalLinkTooltip: "外部連結至 %0",\n noTags: "未設定標籤的文章",\n notFileUrlError: "須先將此 TiddlyWiki 存至檔案,才可儲存變更",\n cantSaveError: "此瀏覽器無法儲存變更,建議使用FireFox;也可能是你的 TiddlyWiki 檔名包含不合法的字元所致。",\n invalidFileError: " '%0' 非有效之 TiddlyWiki",\n backupSaved: "已儲存備份",\n backupFailed: "無法儲存備份",\n rssSaved: "RSS feed 已儲存",\n rssFailed: "無法儲存 RSS feed ",\n emptySaved: "已儲存範本",\n emptyFailed: "無法儲存範本",\n mainSaved: "主要的TiddlyWiki已儲存",\n mainFailed: "無法儲存主要 TiddlyWiki. 所作的改變未儲存",\n macroError: "巨集 <<%0>> 執行錯誤",\n macroErrorDetails: "執行巨集 <<%0>> 時,發生錯誤 :\sn%1",\n missingMacro: "無此巨集",\n overwriteWarning: "'%0' 已存在,[確定]覆寫之",\n unsavedChangesWarning: "注意! 尚未儲存變更\sn\sn[確定]存檔,或[取消]放棄存檔?",\n confirmExit: "--------------------------------\sn\snTiddlyWiki 以更改內容尚未儲存,繼續的話將遺失這些更動\sn\sn--------------------------------",\n saveInstructions: "SaveChanges",\n unsupportedTWFormat: "未支援此 TiddlyWiki 格式:'%0'",\n tiddlerSaveError: "儲存文章 '%0' 時,發生錯誤。",\n tiddlerLoadError: "載入文章 '%0' 時,發生錯誤。",\n wrongSaveFormat: "無法使用格式 '%0' 儲存,請使用標準格式存放",\n invalidFieldName: "無效的欄位名稱:%0",\n fieldCannotBeChanged: "無法變更欄位:'%0'"});\n\nmerge(config.messages.messageClose,{\n text: "關閉",\n tooltip: "關閉此訊息"});\n\nconfig.messages.dates.months = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"];\nconfig.messages.dates.days = ["日", "一","二", "三", "四", "五", "六"];\nconfig.messages.dates.shortMonths = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];\nconfig.messages.dates.shortDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];\n\nmerge(config.views.wikified.tag,{\n labelNoTags: "未設標籤",\n labelTags: "標籤: ",\n openTag: "開啟標籤 '%0'",\n tooltip: "顯示標籤為 '%0' 的文章",\n openAllText: "開啟以下所有文章",\n openAllTooltip: "開啟以下所有文章",\n popupNone: "僅此文標籤為 '%0'"});\n\nmerge(config.views.wikified,{\n defaultText: "",\n defaultModifier: "(未完成)",\n shadowModifier: "(預設)",\n createdPrompt: "建立於"});\n\nmerge(config.views.editor,{\n tagPrompt: "設定標籤之間以空白區隔,[[標籤含空白時請使用雙中括弧]],或點選現有之標籤加入",\n defaultText: ""});\n\nmerge(config.views.editor.tagChooser,{\n text: "標籤",\n tooltip: "點選現有之標籤加至本文章",\n popupNone: "未設定標籤",\n tagTooltip: "加入標籤 '%0'"});\n\nmerge(config.macros.search,{\n label: " 尋找",\n prompt: "搜尋本 Wiki",\n accessKey: "F",\n successMsg: " %0 篇符合條件: %1",\n failureMsg: " 無符合條件: %0"});\n\nmerge(config.macros.tagging,{\n label: " ",\n labelNotTag: "無引用標籤",\n tooltip: "列出標籤為 '%0' 的文章"});\n\nmerge(config.macros.timeline,{\n dateFormat: "YYYY0MM0DD"});\n\nmerge(config.macros.allTags,{\n tooltip: "顯示文章- 標籤為'%0'",\n noTags: "沒有標籤"});\n\nconfig.macros.list.all.prompt = "依字母排序";\nconfig.macros.list.missing.prompt = "被引用且內容空白的文章";\nconfig.macros.list.orphans.prompt = "未被引用的文章";\nconfig.macros.list.shadowed.prompt = "這些隱藏的文章已定義預設內容";\n\nmerge(config.macros.closeAll,{\n label: "全部關閉",\n prompt: "關閉所有開啟中的 tiddler (編輯中除外)"});\n\nmerge(config.macros.permaview,{\n label: "引用連結",\n prompt: "可存取現有開啟之文章的連結位址"});\n\nmerge(config.macros.saveChanges,{\n label: "儲存變更",\n prompt: "儲存所有文章,產生新的版本",\n accessKey: "S"});\n\nmerge(config.macros.newTiddler,{\n label: "新增文章",\n prompt: "新增 tiddler",\n title: "新增文章",\n accessKey: "N"});\n\nmerge(config.macros.newJournal,{\n label: "新增日誌",\n prompt: "新增 jounal",\n accessKey: "J"});\n\nmerge(config.macros.plugins,{\n skippedText: "(此套件因剛加入,故尚未執行)",\n noPluginText: "未安裝套件",\n confirmDeleteText: "確認是否刪除此文章:\sn\sn%0",\n listViewTemplate : {\n // Fields needing localisation are: title, trueText, falseText and caption\n columns: [\n {name: "Selected", field: "Selected", rowName: "title", type: "Selector"},\n {name: "Title", field: "title", tiddlerLink: "title", title: "標題", type: "TiddlerLink"},\n {name: "Executed", field: "executed", title: "已載入", type: "Boolean", trueText: "是", falseText: "否"},\n {name: "Error", field: "error", title: "載入狀態", type: "Boolean", trueText: "錯誤", falseText: "正常"},\n {name: "Forced", field: "forced", title: "強制執行", tag: "systemConfigForce", type: "TagCheckbox"},\n {name: "Disabled", field: "disabled", title: "停用", tag: "systemConfigDisable", type: "TagCheckbox"},\n {name: "Log", field: "log", title: "紀錄", type: "StringList"}\n ],\n rowClasses: [\n {className: "error", field: "error"},\n {className: 'warning', field: 'warning'}\n ],\n actions: [\n {caption: "執行選項...", name: ""},\n {caption: "移除 'systemConfig' 標籤", name: "移除"},\n {caption: "永遠刪除", name: "刪除"}\n ]}\n });\n\nmerge(config.macros.refreshDisplay,{\n label: "刷新",\n prompt: "刷新此 TiddlyWiki 顯示"\n });\n \nmerge(config.macros.importTiddlers,{\n readOnlyWarning: "TiddlyWiki 於唯讀模式下,不支援匯入文章。請由本機(file://)開啟 TiddlyWiki 文件",\n defaultPath: "http://www.tiddlywiki.com/index.html",\n fetchLabel: "匯入",\n fetchPrompt: "匯入 TiddlyWiki 檔",\n fetchError: "匯入 TiddlyWiki 檔時發生錯誤",\n confirmOverwriteText: "確定要覆寫這些文章:\sn\sn%0",\n wizardTitle: "自其他 TiddlyWiki 檔匯入文章",\n step1: "步驟一:指定欲匯入之檔案",\n step1prompt: "在此輸入 URL 或路徑:",\n step1promptFile: "...或選擇欲匯入之檔案:",\n step1promptFeeds: "...或選擇指定的 feed:",\n step1feedPrompt: "選擇...",\n step2: "步驟二:TiddlyWiki 檔載入中",\n step2Text: "檔案載入中,請稍後:%0",\n step3: "步驟三:選擇欲匯入之文章",\n step4: "已匯入%0 篇文章",\n step5: "Done",\n listViewTemplate: {\n columns: [\n {name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},\n {name: 'Title', field: 'title', title: "標題", type: 'String'},\n {name: 'Snippet', field: 'text', title: "Snippet", type: 'String'},\n {name: 'Tags', field: 'tags', title: "標籤", type: 'Tags'}\n ],\n rowClasses: [\n ],\n actions: [\n {caption: "執行選項......", name: ''},\n {caption: "匯入所選文章", name: 'import'}\n ]}\n });\n\nmerge(config.commands.closeTiddler,{\n text: "關閉",\n tooltip: "關閉本文"});\n\nmerge(config.commands.closeOthers,{\n text: "關閉其他",\n tooltip: "關閉其他文章"});\n\nmerge(config.commands.editTiddler,{\n text: "編輯",\n tooltip: "編輯本文",\n readOnlyText: "檢視",\n readOnlyTooltip: "檢視本文之原始內容"});\n\nmerge(config.commands.saveTiddler,{\n text: "完成",\n tooltip: "確定修改"});\n\nmerge(config.commands.cancelTiddler,{\n text: "取消",\n tooltip: "取消修改",\n warning: "確定取消對 '%0' 的修改嗎?",\n readOnlyText: "完成",\n readOnlyTooltip: "返回正常顯示模式"});\n\nmerge(config.commands.deleteTiddler,{\n text: "刪除",\n tooltip: "刪除文章",\n warning: "確定刪除 '%0'?"});\n\nmerge(config.commands.permalink,{\n text: "引用連結",\n tooltip: "本文引用連結"});\n\nmerge(config.commands.references,{\n text: "引用",\n tooltip: "引用本文的文章",\n popupNone: "本文未被引用"});\n\nmerge(config.commands.jump,{\n text: "捲頁",\n tooltip: "捲頁至其他已開啟的文章"});\n\nmerge(config.shadowTiddlers,{\n DefaultTiddlers: "GettingStarted",\n MainMenu: "GettingStarted",\n SiteTitle: "My TiddlyWiki",\n SiteSubtitle: "a reusable non-linear personal web notebook",\n SiteUrl: "http://www.tiddlywiki.com/",\n GettingStarted: "使用此 TiddlyWiki 的空白範本之前,請先修改以下預設文章::\sn* SiteTitle 及 SiteSubtitle:網站的標題和副標題,顯示於頁面上方(在儲存變更後,將顯示於瀏覽器視窗的標題列)。\sn* MainMenu:主選單(通常在頁面左測)。\sn* DefaultTiddlers:內含一些文章的標題,可於載入TiddlyWiki 後的預設開啟。\sn請輸入您的大名,作為所建立/ 編輯的文章署名:<<option txtUserName>>",\n SideBarOptions: "<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal ' YYYY0MM0DD'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel '偏好設定 »' '變更 TiddlyWiki 選項'>>",\n OptionsPanel: "這些設定將暫存於瀏覽器\sn請簽名<<option txtUserName>>\sn (範例:WikiWord)\sn\sn<<option chkSaveBackups>> 儲存備份\sn<<option chkAutoSave>> 自動儲存\sn<<option chkRegExpSearch>> 正規式搜尋\sn<<option chkCaseSensitiveSearch>> 區分大小寫搜尋\sn<<option chkAnimate>> 使用動畫顯示\sn\sn[[進階選項|AdvancedOptions]]\sn[[套件管理|PluginManager]]\sn[[匯入文章|ImportTiddlers]]",\n AdvancedOptions: "<<option chkGenerateAnRssFeed>> 產生 RssFeed\sn<<option chkOpenInNewWindow>> 連結開啟於新視窗\sn<<option chkSaveEmptyTemplate>> 儲存範本\sn<<option chkToggleLinks>> 點擊文章使已開啟者關閉\sn\sn<<option chkHttpReadOnly>> 隱藏編輯功能 ({{{http:}}})\sn<<option chkForceMinorUpdate>> 修改文章不變更日期時間\sn(確認修改同時按 Shift 鍵,或只按 Ctrl-Shift-Enter)\sn<<option chkConfirmDelete>> 刪除文章前確認\sn\sn編輯模式中顯示列數: <<option txtMaxEditRows>>\sn存放備份檔案的資料夾: <<option txtBackupFolder>>\sn<<option chkInsertTabs>> 使用 tab 鍵插入定位字元,而非跳至下一個欄位\sn",\n SideBarTabs: "<<tabs txtMainTab 最近更新 '依更新日期排序' TabTimeline 全部 '所有文章' TabAll 分類 '所有標籤' TabTags 更多 '其他' TabMore>>",\n TabTimeline: "<<timeline>>",\n TabAll: "<<list all>>",\n TabTags: "<<allTags>>",\n TabMore: "<<tabs txtMoreTab 未完成 '內容空白的文章' TabMoreMissing 未引用 '未被引用的文章' TabMoreOrphans 預設文章 '預設的影子文章' TabMoreShadowed>>",\n TabMoreMissing: "<<list missing>>",\n TabMoreOrphans: "<<list orphans>>",\n TabMoreShadowed: "<<list shadowed>>",\n PluginManager: "<<plugins>>", \n ImportTiddlers: "<<importTiddlers>>"});\n\nconfig.options.txtFsEncode = "BIG5";\nconfig.shadowTiddlers["AdvancedOptions"]+="\sn檔案系統編碼:<<option txtFsEncode>>\sn<<<\sn使用Gecko based的瀏覽器(如:Firefox)時,\sn指定正確系統環境編碼(BIG5、GBK、SHIFT-JIS、EUC-KR....等),\sn可支援儲存文件於非 ASCII 路徑及檔名。\sn<<<";\nconfig.shadowTiddlers.ViewTemplate = "<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler permalink references jump'></div>\sn<div class='title' macro='view title'></div>\sn<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date YYYY0MM0DD'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date YYYY0MM0DD'></span>)</div>\sn<div class='tagging' macro='tagging'></div>\sn<div class='tagged' macro='tags'></div>\sn<div class='viewer' macro='view text wikified'></div>\sn<div class='tagClear'></div>";
請查閱http://mptw-beta.tiddlyspot.com/\n顯著區是事件展示地(一個正在進行可取代RemindersMacro)和相當整齊的調色板功能。\n\n
請在這裡查閱\nhttp://mitpress.mit.edu/books/0262062585/WebCampaigningDigitalSupplement.html\n\n實際上,他們是使用[[舊MPTW功能|Old Stuff]]\n\n
[[首頁|MonkeyPirateTiddlyWiki]] TiddlyWiki <<tag 套件|systemConfig>> [[更多套件|More Plugins]] [[下載|Download]] [[最新消息|What's New]] MonkeyGTD [[贊助|Donate]] [[聯繫|Contact]] [[授權|License]]
MonkeyGTD是一個Getting Things Done&trade;*(按:台灣翻譯為:搞定)系統由MonkeyPirateTiddlyWiki所建構。\n\n目前穩定的版本是根據TW 2.0.x 版並且可以在http://monkeygtd.tiddlyspot.com/ 找到。\n\n在這裡http://mgtd-alpha.tiddlyspot.com/ 也有相當有用的alpha版,(使用右鍵點選[[這裡|http://mgtd-alpha.tiddlyspot.com/empty.html]]下載),還有在http://monkeygtd.blogspot.com/ 有個MonkeyGTD的部落格。\n\n
<html><img src="http://simonbaird.com/images/mptwlogosml.gif" alt="logo" align="right"></html>歡迎來到MonkeyPirateTiddlyWiki,MonkeyPirateTiddlyWiki是TiddlyWiki的分支,此網站是取得分支服務的地方外加許多TiddlyWiki 的hacks和實驗場所。\n!為何要使用MonkeyPirateTiddlyWiki?\nMonkeyPirateTiddlyWiki是擁有全功能並且是標準TiddlyWiki的便利性軟體,但是它也包含一個新的管理資料方法稱為TagglyTagging。TagglyTagging能維持您的資訊更容易組織與架構,它使用一種加強版本是由標籤巨集指令和許多優秀的工具所建立,就像”new here”的按鈕一樣。可以瀏覽[[TagglyTagging FAQ]]來學習更多的方法,也可檢閱[[TagglyTagging Tutorial]]。\n!還有什麼新功能\n在2.1版之前還有2.1 beta版,一些實驗性的功能可以在[[mptw beta 網站|MPTW Beta Site]]找到,不久後,期待大部分的功能都能在此顯示。\n!我要如何開始使用\n請查閱[[Download]],(或者您可以在http://tiddlyspot.com 快速取得MonkeyPirateTiddlyWiki管理)。\n!升級簡單\n有一個新的和簡單方法可以從這個網站來安裝並且[[升級|Upgrade]]套件,也可以[[安裝一個標準的空白範例|Install to a standard empty TiddlyWiki]]。\n![[舊版本有什麼功能呢?|What happened to the old stuff?]]\n\n\n
我決定嘗試讓此網站保持合理的大小,避免對他們專屬網站給予額外的套件而成為每次鈴聲警告超載的狀況發生。這裡有幾項的套件:\n* [[InstantTimestampPlugin|http://instanttimestamp.tiddlyspot.com]]- 讓您在文章內容插入一個時間印記。\n* [[WordCountMacro|http://wordcountmacro.tiddlyspot.com/]] - 顯示文章字串計算的單行小程式。\n* [[LinkToMeMacro|http://linktomemacro.tiddlyspot.com/]] - 自動產生連結到目前TiddlyWiki檔案的單行小程式。\n\n
/***\n| Name|MptwLayoutPlugin|\n| Description|A package containing templates and css for the MonkeyPirateTiddlyWiki layout|\n| Version|3.0 ($Rev: 1845 $)|\n| Source|http://mptw.tiddlyspot.com/#MptwLayoutPlugin|\n| Author|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\n!Notes\nPresumes you have TagglyTaggingPlugin installed. To enable this you should have a PageTemplate containing {{{[[MptwPageTemplate]]}}} and similar for ViewTemplate and EditTemplate.\n***/\n//{{{\n// used in MptwViewTemplate\nconfig.mptwDateFormat = 'DD/MM/YY';\nconfig.mptwJournalFormat = 'Journal DD/MM/YY';\n//config.mptwDateFormat = 'MM/0DD/YY';\n//config.mptwJournalFormat = 'Journal MM/0DD/YY';\n\nconfig.shadowTiddlers.GettingStarted += "\sn\snSee also MonkeyPirateTiddlyWiki.";\n\n//}}}\n\n//{{{\nmerge(config.shadowTiddlers,{\n\n'MptwEditTemplate':[\n "<!--{{{-->",\n "<!--- http://mptw.tiddlyspot.com/#MptwEditTemplate ($Rev: 1829 $) --->",\n "<div class=\s"toolbar\s" macro=\s"toolbar +saveTiddler saveCloseTiddler closeOthers -cancelTiddler cancelCloseTiddler deleteTiddler\s"></div>",\n "<div class=\s"title\s" macro=\s"view title\s"></div>",\n "<div class=\s"editLabel\s">Title</div><div class=\s"editor\s" macro=\s"edit title\s"></div>",\n "<div class=\s"editLabel\s">Tags</div><div class=\s"editor\s" macro=\s"edit tags\s"></div>",\n "<div class=\s"editorFooter\s"><span macro=\s"message views.editor.tagPrompt\s"></span><span macro=\s"tagChooser\s"></span></div>",\n "<div macro=\s"showWhenExists EditPanelTemplate\s">[[EditPanelTemplate]]</div>",\n "<div class=\s"editor\s" macro=\s"edit text\s"></div>",\n "<!--}}}-->",\n ""\n].join("\sn"),\n\n'MptwPageTemplate':[\n "<!--{{{-->",\n "<!-- http://mptw.tiddlyspot.com/#MptwPageTemplate ($Rev: 1829 $) -->",\n "<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>",\n " <div class='headerShadow'>",\n " <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;",\n " <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>",\n " </div>",\n " <div class='headerForeground'>",\n " <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;",\n " <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>",\n " </div>",\n "</div>",\n "<!-- horizontal MainMenu -->",\n "<div id='topMenu' refresh='content' tiddler='MainMenu'></div>",\n "<!-- original MainMenu menu -->",\n "<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->",\n "<div id='sidebar'>",\n " <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>",\n " <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>",\n "</div>",\n "<div id='displayArea'>",\n " <div id='messageArea'></div>",\n " <div id='tiddlerDisplay'></div>",\n "</div>",\n "<!--}}}-->",\n ""\n].join("\sn"),\n\n'MptwStyleSheet':[\n "/*{{{*/",\n "/* http://mptw.tiddlyspot.com/#MptwStyleSheet ($Rev: 1829 $) */",\n "/* a contrasting background so I can see where one tiddler ends and the other begins */",\n "body {",\n " background: [[ColorPalette::TertiaryLight]];",\n "}",\n "",\n "/* sexy colours and font for the header */",\n ".headerForeground {",\n " color: [[ColorPalette::PrimaryPale]];",\n "}",\n ".headerShadow, .headerShadow a {",\n " color: [[ColorPalette::PrimaryMid]];",\n "}",\n "",\n "/* separate the top menu parts */",\n ".headerForeground, .headerShadow {",\n " padding: 1em 1em 0;",\n "}",\n "",\n ".headerForeground, .headerShadow {",\n " font-family: 'Trebuchet MS' sans-serif;",\n " font-weight:bold;",\n "}",\n ".headerForeground .siteSubtitle {",\n " color: [[ColorPalette::PrimaryLight]];",\n "}",\n ".headerShadow .siteSubtitle {",\n " color: [[ColorPalette::PrimaryMid]];",\n "}",\n "",\n "/* make shadow go and down right instead of up and left */",\n ".headerShadow {",\n " left: 1px;",\n " top: 1px;",\n "}",\n "",\n "/* prefer monospace for editing */",\n ".editor textarea {",\n " font-family: 'Consolas' monospace;",\n "}",\n "",\n "/* sexy tiddler titles */",\n ".title {",\n " font-size: 250%;",\n " color: [[ColorPalette::PrimaryLight]];",\n " font-family: 'Trebuchet MS' sans-serif;",\n "}",\n "",\n "/* more subtle tiddler subtitle */",\n ".subtitle {",\n " padding:0px;",\n " margin:0px;",\n " padding-left:0.5em;",\n " font-size: 90%;",\n " color: [[ColorPalette::TertiaryMid]];",\n "}",\n ".subtitle .tiddlyLink {",\n " color: [[ColorPalette::TertiaryMid]];",\n "}",\n "",\n "/* a little bit of extra whitespace */",\n ".viewer {",\n " padding-bottom:3px;",\n "}",\n "",\n "/* don't want any background color for headings */",\n "h1,h2,h3,h4,h5,h6 {",\n " background: [[ColorPalette::Background]];",\n " color: [[ColorPalette::Foreground]];",\n "}",\n "",\n "/* give tiddlers 3d style border and explicit background */",\n ".tiddler {",\n " background: [[ColorPalette::Background]];",\n " border-right: 2px [[ColorPalette::TertiaryMid]] solid;",\n " border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;",\n " margin-bottom: 1em;",\n " padding-bottom: 2em;",\n "}",\n "",\n "/* make options slider look nicer */",\n "#sidebarOptions .sliderPanel {",\n " border:solid 1px [[ColorPalette::PrimaryLight]];",\n "}",\n "",\n "/* the borders look wrong with the body background */",\n "#sidebar .button {",\n " border-style: none;",\n "}",\n "",\n "/* this means you can put line breaks in SidebarOptions for readability */",\n "#sidebarOptions br {",\n " display:none;",\n "}",\n "/* undo the above in OptionsPanel */",\n "#sidebarOptions .sliderPanel br {",\n " display:inline;",\n "}",\n "",\n "/* horizontal main menu stuff */",\n "#displayArea {",\n " margin: 1em 15.7em 0em 1em; /* use the freed up space */",\n "}",\n "#topMenu br {",\n " display: none;",\n "}",\n "#topMenu {",\n " background: [[ColorPalette::PrimaryMid]];",\n " color:[[ColorPalette::PrimaryPale]];",\n "}",\n "#topMenu {",\n " padding:2px;",\n "}",\n "#topMenu .button, #topMenu .tiddlyLink, #topMenu a {",\n " margin-left: 0.5em;",\n " margin-right: 0.5em;",\n " padding-left: 3px;",\n " padding-right: 3px;",\n " color: [[ColorPalette::PrimaryPale]];",\n " font-size: 115%;",\n "}",\n "#topMenu .button:hover, #topMenu .tiddlyLink:hover {",\n " background: [[ColorPalette::PrimaryDark]];",\n "}",\n "",\n "/* make it print a little cleaner */",\n "@media print {",\n " #topMenu {",\n " display: none ! important;",\n " }",\n " /* not sure if we need all the importants */",\n " .tiddler {",\n " border-style: none ! important;",\n " margin:0px ! important;",\n " padding:0px ! important;",\n " padding-bottom:2em ! important;",\n " }",\n " .tagglyTagging .button, .tagglyTagging .hidebutton {",\n " display: none ! important;",\n " }",\n " .headerShadow {",\n " visibility: hidden ! important;",\n " }",\n " .tagglyTagged .quickopentag, .tagged .quickopentag {",\n " border-style: none ! important;",\n " }",\n " .quickopentag a.button, .miniTag {",\n " display: none ! important;",\n " }",\n "}",\n "/*}}}*/",\n ""\n].join("\sn"),\n\n'MptwViewTemplate':[\n "<!--{{{-->",\n "<!--- http://mptw.tiddlyspot.com/#MptwViewTemplate ($Rev: 1830 $) --->",\n "",\n "<div class='toolbar'>",\n " <span macro=\s"showWhenTagged systemConfig\s">",\n " <span macro=\s"toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'\s"></span>",\n " </span>",\n " <span style=\s"padding:1em;\s"></span>",\n " <span macro='toolbar closeTiddler closeOthers +editTiddler deleteTiddler undoChanges permalink references jump'></span>",\n " <span macro='newHere label:\s"new here\s"'></span>",\n " <span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:\s"MM/0DD/YY\s"}}'></span>",\n "</div>",\n "",\n "<div class=\s"tagglyTagged\s" macro=\s"tags\s"></div>",\n "",\n "<div class='titleContainer'>",\n " <span class='title' macro='view title'></span>",\n " <span macro=\s"miniTag\s"></span>",\n "</div>",\n "",\n "<div class='subtitle'>",\n " <span macro='view modifier link'></span>,",\n " <span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:\s"MM/0DD/YY\s"}}'></span>",\n " (<span macro='message views.wikified.createdPrompt'></span>",\n " <span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:\s"MM/0DD/YY\s"}}'></span>)",\n "</div>",\n "",\n "<div macro=\s"showWhenExists ViewPanelTemplate\s">[[ViewPanelTemplate]]</div>",\n "",\n "<div macro=\s"hideWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')\s">",\n " <div class='viewer' macro='view text wikified'></div>",\n "</div>",\n "<div macro=\s"showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')\s">",\n " <div class='viewer'><pre macro='view text'></pre></div>",\n "</div>",\n "",\n "<div macro=\s"showWhenExists ViewDashboardTemplate\s">[[ViewDashboardTemplate]]</div>",\n "",\n "<div class=\s"tagglyTagging\s" macro=\s"tagglyTagging\s"></div>",\n "",\n "<!--}}}-->",\n ""\n].join("\sn")\n\n});\n//}}}\n
For upgrading directly from tiddlyspot. See [[ImportTiddlers]].\nURL: /proxy/mptw.tiddlyspot.com/upgrade.html\n
For upgrading. See [[ImportTiddlers]].\nURL: http://mptw.tiddlyspot.com/upgrade.html\n
* 首先按”關閉其他”來清理螢幕。\n * 從主選單點選”新增文章”\n * 在標題框輸入並命名新文章為"MyStuff"。\n * 添加內容到內容框裡,例如: 這是我的內容。\n * 點選”完成”按鈕儲存新的文章。(以後我將回到這個)\n * 讓我們假設您從會議中返回並想要輸入有關於開會內容的筆記。\n o 點選”新增文章”。\n o 輸入”10/12 Leo的會議”的標題。\n o 在內容框添加一些會議筆記。\n o 還不用點選”完成”…。
/***\n| Name:|NewHerePlugin|\n| Description:|Creates the new here and new journal macros|\n| Version:|3.0 ($Rev: 1845 $)|\n| Date:|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|\n| Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\n***/\n//{{{\nmerge(config.macros, {\n newHere: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);\n }\n },\n newJournalHere: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);\n }\n }\n});\n\n//}}}\n\n
/***\n|''Name:''|NewHerePlugin.zh-Hant|\n|''Source:''|[[TiddlyWiki-zh|http://tiddlywiki-zh.googlecode.com/svn/trunk/contributors/BramChen/locales/plugins/]]|\n|''Require:''|[[NewHerePlugin|http://mptw.tiddlyspot.com/#NewHerePlugin]]|\n***/\n//{{{\nmerge(config.commands,{\n newHere: {\n text: "新增文章",\n tooltip: "新增以本文章標題為標籤的文章"},\n newJournalHere: {\n text: "新增日誌",\n dataFormat: "YYYY年0MM月0DD日",\n tooltip: "新增以本文章標題為標籤的日誌"}\n});\n//}}}
The old (pre 2.1) stuff is at http://mptw2.tiddlyspot.com/\nNote that most of the plugins there probably work in 2.1 but they have not been tested. Some of the plugins are superceded by the [[Plugins|systemConfig]] here. Hopefully you can figure out which ones.
Tiddlyspot password:\n<<option pasUploadPassword>>\n\nThese InterfaceOptions for customising TiddlyWiki are saved in your browser\n\nYour username for signing your edits. Write it as a WikiWord (eg JoeBloggs)\n\n<<option txtUserName>>\n<<option chkSaveBackups>> SaveBackups\n<<option chkAutoSave>> AutoSave\n<<option chkRegExpSearch>> RegExpSearch\n<<option chkCaseSensitiveSearch>> CaseSensitiveSearch\n<<option chkAnimate>> EnableAnimations\n\n----\nAdvancedOptions\nPluginManager\nImportTiddlers
Powered by [[TiddlyWiki|http://www.tiddlywiki.com]] <<version>> & [[Tiddlyspot|http://tiddlyspot.com]]. 中文翻譯 by [[Ahwii]].
[[MptwPageTemplate]]\n
如果您在一些文章更改名稱時,這個套件能讓運作更快一點。\n\n
/***\n| Name|QuickOpenTagPlugin|\n| Description|Changes tag links to make it easier to open tags as tiddlers|\n| Version|3.0 ($Rev: 1845 $)|\n| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|\n| Source|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|\n| Author|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\n***/\n//{{{\nconfig.quickOpenTag = {\n\n dropdownChar: (document.all ? "\su25bc" : "\su25be"), // the little one doesn't work in IE?\n\n createTagButton: function(place,tag,excludeTiddler) {\n // little hack so we can to <<tag PrettyTagName|RealTagName>>\n var splitTag = tag.split("|");\n var pretty = tag;\n if (splitTag.length == 2) {\n tag = splitTag[1];\n pretty = splitTag[0];\n }\n \n var sp = createTiddlyElement(place,"span",null,"quickopentag");\n createTiddlyText(createTiddlyLink(sp,tag,false),pretty);\n \n var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,\n config.views.wikified.tag.tooltip.format([tag]),onClickTag);\n theTag.setAttribute("tag",tag);\n if (excludeTiddler)\n theTag.setAttribute("tiddler",excludeTiddler);\n return(theTag);\n },\n\n miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var tagged = store.getTaggedTiddlers(tiddler.title);\n if (tagged.length > 0) {\n var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,\n config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);\n theTag.setAttribute("tag",tiddler.title);\n theTag.className = "miniTag";\n }\n },\n\n allTagsHandler: function(place,macroName,params) {\n var tags = store.getTags();\n var theDateList = createTiddlyElement(place,"ul");\n if(tags.length == 0)\n createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);\n for (var t=0; t<tags.length; t++) {\n var theListItem = createTiddlyElement(theDateList,"li");\n var theLink = createTiddlyLink(theListItem,tags[t][0],true);\n var theCount = " (" + tags[t][1] + ")";\n theLink.appendChild(document.createTextNode(theCount));\n var theDropDownBtn = createTiddlyButton(theListItem," " +\n config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);\n theDropDownBtn.setAttribute("tag",tags[t][0]);\n }\n },\n\n // todo fix these up a bit\n styles: [\n"/*{{{*/",\n"/* created by QuickOpenTagPlugin */",\n".tagglyTagged .quickopentag, .tagged .quickopentag ",\n" { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",\n".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",\n".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",\n"/* extra specificity to make it work right */",\n"#displayArea .viewer .quickopentag a.button, ",\n"#displayArea .viewer .quickopentag a.tiddyLink, ",\n"#mainMenu .quickopentag a.tiddyLink, ",\n"#mainMenu .quickopentag a.tiddyLink ",\n" { border:0px solid black; }",\n"#displayArea .viewer .quickopentag a.button, ",\n"#mainMenu .quickopentag a.button ",\n" { margin-left:0px; padding-left:2px; }",\n"#displayArea .viewer .quickopentag a.tiddlyLink, ",\n"#mainMenu .quickopentag a.tiddlyLink ",\n" { margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",\n"a.miniTag {font-size:150%;} ",\n"#mainMenu .quickopentag a.button ",\n" /* looks better in right justified main menus */",\n" { margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }", \n"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",\n"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",\n"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",\n"/*}}}*/",\n ""].join("\sn"),\n\n init: function() {\n // we fully replace these builtins. can't hijack them easily\n window.createTagButton = this.createTagButton;\n config.macros.allTags.handler = this.allTagsHandler;\n config.macros.miniTag = { handler: this.miniTagHandler };\n config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;\n store.addNotification("QuickOpenTagStyles",refreshStyles);\n }\n}\n\nconfig.quickOpenTag.init();\n\n//}}}\n
我將-cancelTiddler回存到EditTemplate,感謝Kosi的建議。\n\n
/***\n| Name:|RenameTagsPlugin|\n| Description:|Allows you to easily rename or delete tags across multiple tiddlers|\n| Version:|3.0 ($Rev: 1845 $)|\n| Date:|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|\n| Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\nRename a tag and you will be prompted to rename it in all its tagged tiddlers.\n***/\n//{{{\nconfig.renameTags = {\n\n prompts: {\n rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",\n remove: "Remove the tag '%0' from %1 tidder%2?"\n },\n\n removeTag: function(tag,tiddlers) {\n store.suspendNotifications();\n for (var i=0;i<tiddlers.length;i++) {\n store.setTiddlerTag(tiddlers[i].title,false,tag);\n }\n store.resumeNotifications();\n store.notifyAll();\n },\n\n renameTag: function(oldTag,newTag,tiddlers) {\n store.suspendNotifications();\n for (var i=0;i<tiddlers.length;i++) {\n store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old\n store.setTiddlerTag(tiddlers[i].title,true,newTag); // add new\n }\n store.resumeNotifications();\n store.notifyAll();\n },\n\n storeMethods: {\n\n saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,\n\n saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields) {\n if (title != newTitle) {\n var tagged = this.getTaggedTiddlers(title);\n if (tagged.length > 0) {\n // then we are renaming a tag\n if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))\n config.renameTags.renameTag(title,newTitle,tagged);\n\n if (!this.tiddlerExists(title) && newBody == "")\n // dont create unwanted tiddler\n return null;\n }\n }\n return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields);\n },\n\n removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,\n\n removeTiddler: function(title) {\n var tagged = this.getTaggedTiddlers(title);\n if (tagged.length > 0)\n if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))\n config.renameTags.removeTag(title,tagged);\n return this.removeTiddler_orig_renameTags(title);\n }\n\n },\n\n init: function() {\n merge(TiddlyWiki.prototype,this.storeMethods);\n }\n}\n\nconfig.renameTags.init();\n\n//}}}\n\n
/***\n| Name|SaveCloseTiddlerPlugin|\n| Description|Provides two extra toolbar commands, saveCloseTiddler and cancelCloseTiddler|\n| Version|3.0 ($Rev: 1845 $)|\n| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|\n| Source|http://mptw.tiddlyspot.com/#SaveCloseTiddlerPlugin|\n| Author|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\nTo use these you must add them to the tool bar in your EditTemplate\n***/\n//{{{\nmerge(config.commands,{\n\n saveCloseTiddler: {\n text: 'done/close',\n tooltip: 'Undo changes to this tiddler and close it',\n handler: function(e,src,title) {\n config.commands.saveTiddler.handler(e,src,title);\n config.commands.closeTiddler.handler(e,src,title);\n return false;\n }\n },\n\n cancelCloseTiddler: {\n text: 'cancel/close',\n tooltip: 'Save changes to this tiddler and close it',\n handler: function(e,src,title) {\n config.commands.cancelTiddler.handler(e,src,title);\n config.commands.closeTiddler.handler(e,src,title);\n return false;\n }\n }\n\n});\n\n//}}}\n\n
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<upload http://tw.monkeypirate.tiddlyspot.com/store.cgi index.html . . tw.monkeypirate>><<slider chkSliderOptionsPanel OptionsPanel '偏好設定' 'Change TiddlyWiki advanced options'>>
a tiddlywiki distribution and plugins
MonkeyPirateTiddlyWiki
* 更改預設SiteTitle顏色。(他們有點難看)\n* 在SidebarOptions添加一些隱藏的css,所以可以使您的SidebarOptions的文章更有可看性。\n* 在ConfigTweaksPlugin之中,"tab key inserts tab"的開啟是預定選項。\n\n
[[MptwStyleSheet]]\n
從[[舊網站|Old Stuff]]導入[[TagglyTagging FAQ]] 和 [[TagglyTagging Tutorial]]。\n\n
!Chapter 1\nEarly versions of TiddlyWiki didn't have tagging. A couple of smart TiddlyWiki hackers realised that being able to tag your data in TiddlyWiki would be really good and (as is often the case with TiddlyWiki) they were inspired to have a go at adding it themselves. The result was two TiddlyWiki adaptations that implemented tagging, one called TagglyWiki created by Jody Foo, and one called TiddlyTagWiki by Johnny ~LeRoy. \n\nTiddlyTagWiki used a 'tags as separate things' philosophy, space separated tags and popup menus when you click on a tag. TagglyWiki (and there was also a GTDTagglyWiki) had a 'tiddler is a tag is a tiddler' philosophy, had comma separated tags and introduced the concept of tiddlers displaying a list of their tagged tiddlers.\n\nWhen Jeremy added tagging to the official TiddlyWiki version he considered both approaches and decided on the TiddlyTagWiki implementation. Jody Foo stopped maintaining TagglyWiki at around that time so TagglyWiki fans like me were forced to stick with their aging [[TagglyWiki]]s, missing out on numerous upgrades and cool new features as each revision of TiddlyWiki came out, until eventually they couldn't take it any more and started wondering what they could do to get hold of an up-to-date TiddlyWiki with TagglyWiki style tagging. (Okay, maybe that last part was just me!)\n\nSo when TiddlyWiki began to support enhancements via systemConfig plugins I decided to try to write a version of TagglyWiki style tagging as a plugin. It turned out to be easier than I thought. I managed to get it working and created MonkeyPirateTiddlyWiki (see [[Ancient Stuff]]) to share it (and my other plugins). Since then there have been a few enhancements like dynamic updating of tagged lists and the new sort controls.\n\nTiddlyTagWiki has continued to be maintained by Johnny and now contains some interesting new plugins.\n\n!Chapter 2\nSeeing the wisdom of the TagglyTagging way, Jeremy incorporated the "tiddler is a tag is a tiddler" concept into TiddlyWiki version 2.0 and introduced the "tagging" list, the other central component of TagglyTagging. Most of the reason for TagglyTagging's existence had vanished! Rather than dissappear entirely TagglyTagging became the set of tools it is now, an enhanced tagging list with sort controls, layout changes and a few other simple tools (NewHerePlugin, QuickOpenTagPlugin and RenameTagsPlugin) that facilitate using the full power of tags in the TagglyTagging way.\n\n!Chapter 3\nAfter the TiddlyWiki 2.1 release I rewrote everything. The code in TagglyTaggingPlugin (previously called TagglyListPlugin) is now actually readable. Once I could read my code I threw in some new features like site map mode and better support for columns. Also it uses the new refresh mechanism in TiddlyWiki 2.1 to be more efficient with dynamically updating the screen.\n
您現在可以在此操作,或許您應該列印出來,如此比較容易在銀幕上執行說明步驟,我假設您對TiddlyWiki的基礎很熟悉,假如您對以下操作有所困難時,先試試這個[[卓越教學網站|http://www.blogjones.com/TiddlyWikiTutorial.html]]。\n\n!開始說明: 建立一些內容\n* 首先按”關閉其他”來清理螢幕。\n* 從主選單點選”新增文章”\n* 在標題框輸入並命名新文章為"~MyStuff"。\n* 添加內容到內容框裡,例如: 這是我的內容。\n* 點選”完成”按鈕儲存新的文章。(以後我將回到這裡)\n* 讓我們假設您從會議中返回並想要輸入有關於開會內容的筆記。\n** 點選”新增文章”。\n** 輸入”Leo的會議 10/12”的標題。\n** 在內容框添加一些會議筆記。\n** 還不用點選”完成”…。\n\n!在您的內容貼標籤\n* 在儲存”Leo的會議…”文章之前,讓我們添加一些標籤。\n** 這是一場會議,所以給予它一個標籤稱為”會議”,在標籤框輸入”會議”。\n** 讓我們假設此場會議是預算計劃的例子,在標籤框輸入”預算”。\n** 所以您的標籤框裡應該看起來就像:{{{會議 Leo 預算}}}。\n* 現在可以點選"完成"按鈕儲存文章。\n\n!標籤使用\n*到目前為止還沒提到主要功能,對嗎?現在我開始進入TagglyTagging的領域。\n*注意標題上頭的標籤顯示,斜體字樣表示他們還未完成(這表示其他文章仍未存在)。\n*點選Leo標籤,將會開啟名稱為Leo的空白文章。\n**填上一些內容就像”Leo Runcible, ext 1234. 喜愛小貓”或者無論什麼內容都可以。\n**Leo’s是一個人,所以給它一個”人”的標籤,在標籤框裡輸入”人”。\n**點選”完成”儲存。\n\n!讓我們加緊腳步\n*回到”Leo的會議…”文章。\n**點選”會議”,給予”會議”一個”~MyStuff”的標籤並儲存。\n**點選”人”, 給予”人”一個”~MyStuff”的標籤並儲存。\n**點選”預算”, 給予”預算”一個”專案”的標籤,假如您想要的話,可以在文章中輸入有關於專案的內容並儲存。\n**現在在”預算”標題上面點選”專案”標籤,給予”專案”一個”~MyStuff”的標籤並儲存。\n*現在搜尋您的”~MyStuff”文章,檢視被標籤的文章列表,顯示在文章底層,應該是包含”會議”,”人”和”專案”。\n*關閉這些文章並設法使用被標籤的文章列表”~MyStuff”來導引到”會議”文章。\n\n迅速檢視TagglyTagging的基礎說明,希望從現在起您擁有一些TagglyTagging到底能做什麼的概念,如果您喜歡它的話就稍微操作它一下。然後繼續下一階段…\n!New Here按鈕\n*點選”人”。\n*您認識其他任何人嗎?\n*如果有的話,在”人”文章點選”new here”。\n**注意標籤框已經包含”人”的標籤,(這就是new here按鈕所要執行的任務,它會新增一個已經填入標籤的文章)。\n**在那”人”輸入某人的名稱和一些記事,點選”完成”並儲存。\n*為了有趣可以添加更多的人\n**注意在”人”的文章底層”tagged tiddler”名單所發生的狀況。\n\n!資料結構的修訂\n讓我們來檢閱修訂結構是多麼容易,假設您決定要有不同的專案型態:持續進行,目前狀態及未來發展。\n*回到”預算”文章,編輯並且修訂”專案”標籤為”持續進行專案”,儲存。\n*點選”持續進行專案”標籤,給予”專案”標籤。\n*這就對了,您成功了,實踐上您並未添加持續進行(按應為目前狀態)和未來發展專案,但是可以看到那並不難操作,或許在”專案”文章點選”new here”,或許只是將專案貼上”未來發展專案”的標籤並且從下而上做起。\n\n!另外案例\n*假設在最初的會議中給予您一個行動項目,在會議筆記輸入一個wiki word或者{{{[[}}}執行任務{{{]]}}}。\n*現在點選它並且給予一個”Todo”標籤,輸入任何額外資訊到內容框裡是有關於當到期之前,您將如何執行任務,假如您有安裝ReminderPlugin就會在那裡存放一個提示。\n*現在確定您可以經由貼上Todo文章的標籤成為MyStuff而得到您的待辦事項。\n*為了方便關係,讓我們連結MyStuff到主選單,將會讓所有新的組織過的資訊總是存放在您的手指之間。\n\n!控制和專欄的排序\n*假如您用滑鼠滑過一個標籤的文章列表,您應該看到一些按鈕,試試他們看看,注意假如您要儲存,需要記住您的選擇。\n\n!總結\n希望TagglyTagging能給予您有力的方法使您的資訊組織化與結構化,不要遺忘您仍然可以使用傳統的維基連結來導引您的文章,TagglyTagging融合TiddlyWiki給予您另外一種方法來執行超棒的功能。\n\n~~這是個教學的草稿,歡迎回饋問題,請[[聯繫|Contact]]我,提供評論與建議。~~\n\n\n\n
See [[TagglyTagging FAQ]].
/***\n| Name|TagglyTaggingPlugin|\n| Description|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|\n| Version|3.0 ($Rev: 1898 $)|\n| Date|$Date: 2007-03-20 14:38:33 +1000 (Tue, 20 Mar 2007) $|\n| Source|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|\n| Author|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\n!Notes\nSee http://mptw.tiddlyspot.com/#TagglyTagging\n***/\n//{{{\nconfig.taggly = {\n\n // for translations\n lingo: {\n labels: {\n asc: "\su2191", // down arrow\n desc: "\su2193", // up arrow\n title: "title",\n modified: "modified",\n created: "created",\n show: "+",\n hide: "-",\n normal: "normal",\n group: "group",\n commas: "commas",\n sitemap: "sitemap",\n numCols: "cols\su00b1", // plus minus sign\n label: "Tagged as '%0':",\n excerpts: "excerpts",\n noexcerpts: "no excerpts"\n },\n\n tooltips: {\n title: "Click to sort by title",\n modified: "Click to sort by modified date",\n created: "Click to sort by created date",\n show: "Click to show tagging list",\n hide: "Click to hide tagging list",\n normal: "Click to show a normal ungrouped list",\n group: "Click to show list grouped by tag",\n sitemap: "Click to show a sitemap style list",\n commas: "Click to show a comma separated list",\n numCols: "Click to change number of columns"\n }\n },\n\n config: {\n showTaggingCounts: true,\n listOpts: {\n // the first one will be the default\n sortBy: ["title","modified","created"],\n sortOrder: ["asc","desc"],\n hideState: ["show","hide"],\n listMode: ["normal","group","sitemap","commas"],\n numCols: ["1","2","3","4","5","6"],\n excerpts: ["noexcerpts","excerpts"]\n },\n valuePrefix: "taggly.",\n excludeTags: ["excludeLists","excludeTagging"],\n excerptSize: 50,\n excerptMarker: "/%"+"%/"\n },\n\n getTagglyOpt: function(title,opt) {\n var val = store.getValue(title,this.config.valuePrefix+opt);\n return val ? val : this.config.listOpts[opt][0];\n },\n\n setTagglyOpt: function(title,opt,value) {\n if (!store.tiddlerExists(title))\n // create it silently\n store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),null);\n // if value is default then remove it to save space\n return store.setValue(title,\n this.config.valuePrefix+opt,\n value == this.config.listOpts[opt][0] ? null : value);\n },\n\n getNextValue: function(title,opt) {\n var current = this.getTagglyOpt(title,opt);\n var pos = this.config.listOpts[opt].indexOf(current);\n // a little usability enhancement. actually it doesn't work right for grouped or sitemap\n var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);\n var newPos = (pos + 1) % limit;\n return this.config.listOpts[opt][newPos];\n },\n\n toggleTagglyOpt: function(title,opt) {\n var newVal = this.getNextValue(title,opt);\n this.setTagglyOpt(title,opt,newVal);\n }, \n\n createListControl: function(place,title,type) {\n var lingo = config.taggly.lingo;\n var label;\n var tooltip;\n var onclick;\n\n if ((type == "title" || type == "modified" || type == "created")) {\n // "special" controls. a little tricky. derived from sortOrder and sortBy\n label = lingo.labels[type];\n tooltip = lingo.tooltips[type];\n\n if (this.getTagglyOpt(title,"sortBy") == type) {\n label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];\n onclick = function() {\n config.taggly.toggleTagglyOpt(title,"sortOrder");\n return false;\n }\n }\n else {\n onclick = function() {\n config.taggly.setTagglyOpt(title,"sortBy",type);\n config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);\n return false;\n }\n }\n }\n else {\n // "regular" controls, nice and simple\n label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];\n tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];\n onclick = function() {\n config.taggly.toggleTagglyOpt(title,type);\n return false;\n }\n }\n\n // hide button because commas don't have columns\n if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))\n createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");\n },\n\n makeColumns: function(orig,numCols) {\n var listSize = orig.length;\n var colSize = listSize/numCols;\n var remainder = listSize % numCols;\n\n var upperColsize = colSize;\n var lowerColsize = colSize;\n\n if (colSize != Math.floor(colSize)) {\n // it's not an exact fit so..\n upperColsize = Math.floor(colSize) + 1;\n lowerColsize = Math.floor(colSize);\n }\n\n var output = [];\n var c = 0;\n for (var j=0;j<numCols;j++) {\n var singleCol = [];\n var thisSize = j < remainder ? upperColsize : lowerColsize;\n for (var i=0;i<thisSize;i++) \n singleCol.push(orig[c++]);\n output.push(singleCol);\n }\n\n return output;\n },\n\n drawTable: function(place,columns,theClass) {\n var newTable = createTiddlyElement(place,"table",null,theClass);\n var newTbody = createTiddlyElement(newTable,"tbody");\n var newTr = createTiddlyElement(newTbody,"tr");\n for (var j=0;j<columns.length;j++) {\n var colOutput = "";\n for (var i=0;i<columns[j].length;i++) \n colOutput += columns[j][i];\n var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class\n wikify(colOutput,newTd);\n }\n return newTable;\n },\n\n createTagglyList: function(place,title) {\n switch(this.getTagglyOpt(title,"listMode")) {\n case "group": return this.createTagglyListGrouped(place,title); break;\n case "normal": return this.createTagglyListNormal(place,title,false); break;\n case "commas": return this.createTagglyListNormal(place,title,true); break;\n case "sitemap":return this.createTagglyListSiteMap(place,title); break;\n }\n },\n\n getTaggingCount: function(title) {\n // thanks to Doug Edmunds\n if (this.config.showTaggingCounts) {\n var tagCount = store.getTaggedTiddlers(title).length;\n if (tagCount > 0)\n return " ("+tagCount+")";\n }\n return "";\n },\n\n getExcerpt: function(inTiddlerTitle,title) {\n if (this.getTagglyOpt(inTiddlerTitle,"excerpts") == "excerpts") {\n var t = store.getTiddler(title);\n if (t) {\n var text = t.text.replace(/\sn/," ");\n var marker = text.indexOf(this.config.excerptMarker);\n if (marker != -1) {\n return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";\n }\n else if (text.length < this.config.excerptSize) {\n return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";\n }\n else {\n return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";\n }\n }\n }\n return "";\n },\n\n notHidden: function(t,inTiddler) {\n if (typeof t == "string") \n t = store.getTiddler(t);\n return (!t || !t.tags.containsAny(this.config.excludeTags) ||\n (inTiddler && this.config.excludeTags.contains(inTiddler)));\n },\n\n // this is for normal and commas mode\n createTagglyListNormal: function(place,title,useCommas) {\n\n var list = store.getTaggedTiddlers(title,this.getTagglyOpt(title,"sortBy"));\n\n if (this.getTagglyOpt(title,"sortOrder") == "desc")\n list = list.reverse();\n\n var output = [];\n var first = true;\n for (var i=0;i<list.length;i++) {\n if (this.notHidden(list[i],title)) {\n var countString = this.getTaggingCount(list[i].title);\n var excerpt = this.getExcerpt(title,list[i].title);\n if (useCommas)\n output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);\n else\n output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\sn");\n\n first = false;\n }\n }\n\n return this.drawTable(place,\n this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),\n useCommas ? "commas" : "normal");\n },\n\n // this is for the "grouped" mode\n createTagglyListGrouped: function(place,title) {\n var sortBy = this.getTagglyOpt(title,"sortBy");\n var sortOrder = this.getTagglyOpt(title,"sortOrder");\n\n var list = store.getTaggedTiddlers(title,sortBy);\n\n if (sortOrder == "desc")\n list = list.reverse();\n\n var leftOvers = []\n for (var i=0;i<list.length;i++)\n leftOvers.push(list[i].title);\n\n var allTagsHolder = {};\n for (var i=0;i<list.length;i++) {\n for (var j=0;j<list[i].tags.length;j++) {\n\n if (list[i].tags[j] != title) { // not this tiddler\n\n if (this.notHidden(list[i].tags[j],title)) {\n\n if (!allTagsHolder[list[i].tags[j]])\n allTagsHolder[list[i].tags[j]] = "";\n\n if (this.notHidden(list[i],title)) {\n allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"\n + this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\sn";\n\n leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers\n\n }\n }\n }\n }\n }\n\n var allTags = [];\n for (var t in allTagsHolder)\n allTags.push(t);\n\n var sortHelper = function(a,b) {\n if (a == b) return 0;\n if (a < b) return -1;\n return 1;\n };\n\n allTags.sort(function(a,b) {\n var tidA = store.getTiddler(a);\n var tidB = store.getTiddler(b);\n if (sortBy == "title") return sortHelper(a,b);\n else if (!tidA && !tidB) return 0;\n else if (!tidA) return -1;\n else if (!tidB) return +1;\n else return sortHelper(tidA[sortBy],tidB[sortBy]);\n });\n\n var leftOverOutput = "";\n for (var i=0;i<leftOvers.length;i++)\n if (this.notHidden(leftOvers[i],title))\n leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\sn";\n\n var output = [];\n\n if (sortOrder == "desc")\n allTags.reverse();\n else if (leftOverOutput != "")\n // leftovers first...\n output.push(leftOverOutput);\n\n for (var i=0;i<allTags.length;i++)\n if (allTagsHolder[allTags[i]] != "")\n output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\sn" + allTagsHolder[allTags[i]]);\n\n if (sortOrder == "desc" && leftOverOutput != "")\n // leftovers last...\n output.push(leftOverOutput);\n\n return this.drawTable(place,\n this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),\n "grouped");\n\n },\n\n // used to build site map\n treeTraverse: function(title,depth,sortBy,sortOrder) {\n\n var list = store.getTaggedTiddlers(title,sortBy);\n if (sortOrder == "desc")\n list.reverse();\n\n var indent = "";\n for (var j=0;j<depth;j++)\n indent += "*"\n\n var childOutput = "";\n for (var i=0;i<list.length;i++)\n if (list[i].title != title)\n if (this.notHidden(list[i].title,this.config.inTiddler))\n childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder);\n\n if (depth == 0)\n return childOutput;\n else\n return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title) + "\sn" + childOutput;\n },\n\n // this if for the site map mode\n createTagglyListSiteMap: function(place,title) {\n this.config.inTiddler = title; // nasty. should pass it in to traverse probably\n var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"));\n return this.drawTable(place,\n this.makeColumns(output.split(/(?=^\s*\s[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic\n "sitemap"\n );\n },\n\n macros: {\n tagglyTagging: {\n handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n var refreshContainer = createTiddlyElement(place,"div");\n // do some refresh magic to make it keep the list fresh - thanks Saq\n refreshContainer.setAttribute("refresh","macro");\n refreshContainer.setAttribute("macroName",macroName);\n refreshContainer.setAttribute("title",tiddler.title);\n this.refresh(refreshContainer);\n },\n\n refresh: function(place) {\n var title = place.getAttribute("title");\n removeChildren(place);\n if (store.getTaggedTiddlers(title).length > 0) {\n var lingo = config.taggly.lingo;\n config.taggly.createListControl(place,title,"hideState");\n if (config.taggly.getTagglyOpt(title,"hideState") == "show") {\n createTiddlyElement(place,"span",null,"tagglyLabel",lingo.labels.label.format([title]));\n config.taggly.createListControl(place,title,"title");\n config.taggly.createListControl(place,title,"modified");\n config.taggly.createListControl(place,title,"created");\n config.taggly.createListControl(place,title,"listMode");\n config.taggly.createListControl(place,title,"excerpts");\n config.taggly.createListControl(place,title,"numCols");\n config.taggly.createTagglyList(place,title);\n }\n }\n }\n }\n },\n\n // todo fix these up a bit\n styles: [\n"/*{{{*/",\n"/* created by TagglyTaggingPlugin */",\n".tagglyTagging { padding-top:0.5em; }",\n".tagglyTagging li.listTitle { display:none; }",\n".tagglyTagging ul {",\n" margin-top:0px; padding-top:0.5em; padding-left:2em;",\n" margin-bottom:0px; padding-bottom:0px;",\n"}",\n".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",\n".tagglyTagging table { margin:0px; padding:0px; }",\n".tagglyTagging .button { display:none; margin-left:3px; margin-right:3px; }",\n".tagglyTagging .button, .tagglyTagging .hidebutton {",\n" color:[[ColorPalette::TertiaryLight]]; font-size:90%;",\n" border:0px; padding-left:0.3em;padding-right:0.3em;",\n"}",\n".tagglyTagging .button:hover, .hidebutton:hover {",\n" background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",\n"}",\n".selected .tagglyTagging .button { display:inline; }",\n".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",\n".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",\n".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",\n".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",\n".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",\n".tagglyTagging ul ul li {margin-left:0.5em; }",\n".editLabel { font-size:90%; padding-top:0.5em; }",\n".tagglyTagging .commas { padding-left:1.8em; }",\n"/* not technically tagglytagging but will put them here anyway */",\n".tagglyTagged li.listTitle { display:none; }",\n".tagglyTagged li { display: inline; font-size:90%; }",\n".tagglyTagged ul { margin:0px; padding:0px; }",\n".excerpt { color:[[ColorPalette::TertiaryMid]]; }",\n"/*}}}*/",\n ""].join("\sn"),\n\n init: function() {\n merge(config.macros,this.macros);\n config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;\n store.addNotification("TagglyTaggingStyles",refreshStyles);\n }\n};\n\nconfig.taggly.init();\n\n//}}}\n\n
/***\n|''Name:''|TagglyTaggingPlugin.zh-Hant|\n|''Source:''|[[TiddlyWiki-zh|http://tiddlywiki-zh.googlecode.com/svn/trunk/contributors/BramChen/locales/plugins/]]|\n|''Require:''|[[TagglyTaggingPlugin|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin]]|\n***/\n//{{{\nmerge(config.taggly,{\n lingo: {\n labels: {\n asc: "\su2191", // 向下箭號\n desc: "\su2193", // 向上箭號\n title: "文章標題",\n modified: "更新日期",\n created: "建立日期",\n show: "+",\n hide: "-",\n normal: "一般",\n group: "分群",\n commas: "逗點",\n sitemap: "導覽",\n numCols: "欄數\su00b1", // 加減號\n label: "標籤 '%0':"\n },\n\n tooltips: {\n title: "依文章標題排序",\n modified: "依文章更新日期排序",\n created: "依文章建立日期排序",\n show: "顯示 tagging 列表",\n hide: "隱藏 tagging 列表",\n normal: "不分群顯示",\n group: "依標籤分群顯示",\n sitemap: "改以站台導覽風格顯示",\n commas: "改以逗點區隔列表",\n numCols: "更改顯示之欄位數"\n }\n }\n});\n//}}}
See [[TagglyTagging Tutorial]].
[img[http://www.ahwii.com-a.googlepages.com/TagglyTagging.jpg]]\n
@@border:solid 1px black;display:block;padding:1em 2em 2em;background:#ffe;margin:1em;\nCopyright (c) 2007, Simon Baird\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n* Neither the name Simon Baird nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n@@
原創性,革命性,棒極了,100%爪哇語言,微內容,完備的維基網頁,是由JeremyRuston所建立與維護。瀏覽http://www.tiddlywiki.com/. /% MonkeyPirateTiddlyWiki is running TiddlyWiki <<version>>. %/\n可以取得更多的資訊。\n\nTiddlyWiki的真正意義是什麼? 簡言之,它是一種維基,是由爪哇語言所建置並且存放在單獨的html檔案。但是您可以考慮它成為一個''來自未來的電子筆記本'',試試這些連結以得到更多的資訊:\n*[[Wikipedia Entry|http://en.wikipedia.org/wiki/Tiddlywiki]]\n*[[TiddlyWikiGuides|http://tiddlywikiguides.org/]]\n\n
See ToggleTagPlugin
/***\n| Name|ToggleTagPlugin|\n| Description|Makes a checkbox which toggles a tag in a tiddler|\n| Version|3.0 ($Rev: 1845 $)|\n| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|\n| Source|http://tiddlyspot.com/mptw/#ToggleTagMacro|\n| Author|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\n!Usage\n{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}\n* TagName - the tag to be toggled, default value "checked"\n* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler\n* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'\n(If a parameter is '.' then the default will be used)\n\nExamples:\n\n|Code|Description|Example|h\n|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|\n|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|\n|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|\n|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|\n|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|\nNotes:\n* If TiddlerName doesn't exist it will be silently created\n* Set label to '-' to specify no label\n* See also http://mgtd-alpha.tiddlyspot.com/#ToggleTag2\n\n!Known issues\n* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing\n\n***/\n//{{{\n\nmerge(config.macros,{\n\n toggleTag: {\n\n doRefreshAll: true,\n createIfRequired: true,\n shortLabel: "[[%0]]",\n longLabel: "[[%0]] [[%1]]",\n\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var tag = (params[0] && params[0] != '.') ? params[0] : "checked";\n var title = (params[1] && params[1] != '.') ? params[1] : tiddler.title;\n var defaultLabel = (title == tiddler.title ? this.shortLabel : this.longLabel);\n var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;\n label = (label == '-' ? '' : label);\n var theTiddler = title == tiddler.title ? tiddler : store.getTiddler(title);\n var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {\n if (!store.tiddlerExists(title)) {\n if (config.macros.toggleTag.createIfRequired) {\n var content = store.getTiddlerText(title); // just in case it's a shadow\n store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);\n }\n else \n return false;\n }\n store.setTiddlerTag(title,this.checked,tag);\n return true;\n });\n }\n }\n});\n\n//}}}\n\n
/***\nRequired by Tiddlyspot\n***/\n//{{{\n\nconfig.options.chkHttpReadOnly = false; // make it so you can by default see edit controls via http\n\nif (window.location.protocol != "file:")\n config.options.chkGTDLazyAutoSave = false; // disable autosave in d3\n\nconfig.tiddlyspotSiteId = 'tw.mptw';\n\n// probably will need to redo this for TW 2.2\nwith (config.shadowTiddlers) {\n SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';\n SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");\n OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");\n DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[Welcome to Tiddlyspot]] ");\n MainMenu = MainMenu.replace(/^/,"[[Welcome to Tiddlyspot]] ");\n}\n\nmerge(config.shadowTiddlers,{\n\n'Welcome to Tiddlyspot':[\n "This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",\n "<<tiddler TspotControls>>",\n "See also GettingStarted.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \s"上傳檔案\s" button in the column on the right.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click \s"upload\s" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."\n].join("\sn"),\n\n'TspotControls':[\n "| tiddlyspot的密碼:|<<option pasUploadPassword>>|",\n "| 網站管理:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">>//(需填入 tiddlyspot的密碼)//<<br>>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",\n "| 連結:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"\n].join("\sn"),\n\n'TspotSidebar':[\n "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"\n].join("\sn"),\n\n'TspotOptions':[\n "tiddlyspot password:",\n "<<option pasUploadPassword>>",\n ""\n].join("\sn")\n\n});\n//}}}\n
<<upload http://tw.monkeypirate.tiddlyspot.com/store.cgi index.html . . tw.monkeypirate>><html><a href='http://tw.monkeypirate.tiddlyspot.com/download' class='button'>下載檔案</a></html>
當您要列印時,應該稍微檢視一下會比較好,請看MptwStyleSheet,感謝thedanizo的建議事項。\n\n
URL:/proxy/mptw.tiddlyspot.com/upgrade.html
可以在[[更多套件|More Plugins]]連結。\n\n
執行下面的程序可以讓您的MonkeyPirateTiddlyWiki保持在最新版本狀態\n* 點選 ImportTiddlers\n* 點選 "選擇..."和選擇"~MptwUpgradeURL"<br>(假如tiddlyspot是在線上,就必須點選向下箭頭,選擇MptwUpgradeTsURL代替或者沒有MptwUpgradeTsURL時,就要在URL貼上{{{/proxy/mptw.tiddlyspot.com/upgrade.html}}}。\n* 點選 "匯入"\n* 在第一欄位點選復選框選擇所有文章\n* 點選"執行選項"並且選擇"匯入所有文章"\n* 點選"完成"確認想要覆寫的文章\n* 儲存並且重新載入\n\n
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 16/3/2007 15:32:6 | YourName | [[/|http://mptw.tiddlyspot.com/#%5B%5BThe%20BSD%20License%5D%5D]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 20/3/2007 15:7:22 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 20/3/2007 15:28:17 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 20/3/2007 15:30:52 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 21/3/2007 7:24:11 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/4/2007 11:30:45 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/4/2007 1:26:10 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/4/2007 10:33:17 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/4/2007 17:46:20 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 11/4/2007 19:38:31 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 11/4/2007 20:43:35 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 11/4/2007 22:49:17 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 12/4/2007 0:2:14 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/4/2007 0:44:51 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 12/4/2007 11:38:24 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html#%E4%BA%BA]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 12/4/2007 11:46:16 | ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html#%E4%BA%BA]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/4/2007 0:7:52 | | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/4/2007 11:39:56 | YourName | [[/|http://tw.monkeypirate.tiddlyspot.com/]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 22/4/2007 11:54:38 | Ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 22/4/2007 13:31:19 | Ahwii | [[tw.monkeypirate.html|file:///D:/Documents%20and%20Settings/And/My%20Documents/tw.monkeypirate.html]] | [[store.cgi|http://tw.monkeypirate.tiddlyspot.com/store.cgi]] | . | index.html | . |
/***\n|''Name:''|UploadPlugin|\n|''Description:''|Save to web a TiddlyWiki|\n|''Version:''|3.4.5|\n|''Date:''|Oct 15, 2006|\n|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|\n|''Documentation:''|http://tiddlywiki.bidix.info/#UploadDoc|\n|''Author:''|BidiX (BidiX (at) bidix (dot) info)|\n|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|\n|''~CoreVersion:''|2.0.0|\n|''Browser:''|Firefox 1.5; InternetExplorer 6.0; Safari|\n|''Include:''|config.lib.file; config.lib.log; config.lib.options; PasswordTweak|\n|''Require:''|[[UploadService|http://tiddlywiki.bidix.info/#UploadService]]|\n***/\n//{{{\nversion.extensions.UploadPlugin = {\n major: 3, minor: 4, revision: 5, \n date: new Date(2006,9,15),\n source: 'http://tiddlywiki.bidix.info/#UploadPlugin',\n documentation: 'http://tiddlywiki.bidix.info/#UploadDoc',\n author: 'BidiX (BidiX (at) bidix (dot) info',\n license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',\n coreVersion: '2.0.0',\n browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'\n};\n//}}}\n\n////+++!![config.lib.file]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.file) config.lib.file= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.file.dirname = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(0, lastpos);\n } else {\n return filePath.substring(0, filePath.lastIndexOf("\s\s"));\n }\n};\nconfig.lib.file.basename = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("#")) != -1) \n filePath = filePath.substring(0, lastpos);\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(lastpos + 1);\n } else\n return filePath.substring(filePath.lastIndexOf("\s\s")+1);\n};\nwindow.basename = function() {return "@@deprecated@@";};\n//}}}\n////===\n\n////+++!![config.lib.log]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.log) config.lib.log= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 1}, \n date: new Date(2006,8,19)\n};\nconfig.lib.Log = function(tiddlerTitle, logHeader) {\n if (version.major < 2)\n this.tiddler = store.tiddlers[tiddlerTitle];\n else\n this.tiddler = store.getTiddler(tiddlerTitle);\n if (!this.tiddler) {\n this.tiddler = new Tiddler();\n this.tiddler.title = tiddlerTitle;\n this.tiddler.text = "| !date | !user | !location |" + logHeader;\n this.tiddler.created = new Date();\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[tiddlerTitle] = this.tiddler;\n else\n store.addTiddler(this.tiddler);\n }\n return this;\n};\n\nconfig.lib.Log.prototype.newLine = function (line) {\n var now = new Date();\n var newText = "| ";\n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += config.options.txtUserName + " | ";\n var location = document.location.toString();\n var filename = config.lib.file.basename(location);\n if (!filename) filename = '/';\n newText += "[["+filename+"|"+location + "]] |";\n this.tiddler.text = this.tiddler.text + "\sn" + newText;\n this.addToLine(line);\n};\n\nconfig.lib.Log.prototype.addToLine = function (text) {\n this.tiddler.text = this.tiddler.text + text;\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[this.tiddler.tittle] = this.tiddler;\n else {\n store.addTiddler(this.tiddler);\n story.refreshTiddler(this.tiddler.title);\n store.notify(this.tiddler.title, true);\n }\n if (version.major < 2)\n store.notifyAll(); \n};\n//}}}\n////===\n\n////+++!![config.lib.options]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.options) config.lib.options = {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\n\nconfig.lib.options.init = function (name, defaultValue) {\n if (!config.options[name]) {\n config.options[name] = defaultValue;\n saveOptionCookie(name);\n }\n};\n//}}}\n////===\n\n////+++!![PasswordTweak]\n\n//{{{\nversion.extensions.PasswordTweak = {\n major: 1, minor: 0, revision: 3, date: new Date(2006,8,30),\n type: 'tweak',\n source: 'http://tiddlywiki.bidix.info/#PasswordTweak'\n};\n//}}}\n/***\n!!config.macros.option\n***/\n//{{{\nconfig.macros.option.passwordCheckboxLabel = "儲存密碼";\nconfig.macros.option.passwordType = "password"; // password | text\n\nconfig.macros.option.onChangeOption = function(e)\n{\n var opt = this.getAttribute("option");\n var elementType,valueField;\n if(opt) {\n switch(opt.substr(0,3)) {\n case "txt":\n elementType = "input";\n valueField = "value";\n break;\n case "pas":\n elementType = "input";\n valueField = "value";\n break;\n case "chk":\n elementType = "input";\n valueField = "checked";\n break;\n }\n config.options[opt] = this[valueField];\n saveOptionCookie(opt);\n var nodes = document.getElementsByTagName(elementType);\n for(var t=0; t<nodes.length; t++) \n {\n var optNode = nodes[t].getAttribute("option");\n if (opt == optNode) \n nodes[t][valueField] = this[valueField];\n }\n }\n return(true);\n};\n\nconfig.macros.option.handler = function(place,macroName,params)\n{\n var opt = params[0];\n if(config.options[opt] === undefined) {\n return;}\n var c;\n switch(opt.substr(0,3)) {\n case "txt":\n c = document.createElement("input");\n c.onkeyup = this.onChangeOption;\n c.setAttribute ("option",opt);\n c.className = "txtOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n break;\n case "pas":\n // input password\n c = document.createElement ("input");\n c.setAttribute("type",config.macros.option.passwordType);\n c.onkeyup = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "pasOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n // checkbox link with this password "save this password on this computer"\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option","chk"+opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options["chk"+opt];\n // text savePasswordCheckboxLabel\n place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));\n break;\n case "chk":\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options[opt];\n break;\n }\n};\n//}}}\n/***\n!! Option cookie stuff\n***/\n//{{{\nwindow.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;\nwindow.loadOptionsCookie = function()\n{\n var cookies = document.cookie.split(";");\n for(var c=0; c<cookies.length; c++) {\n var p = cookies[c].indexOf("=");\n if(p != -1) {\n var name = cookies[c].substr(0,p).trim();\n var value = cookies[c].substr(p+1).trim();\n switch(name.substr(0,3)) {\n case "txt":\n config.options[name] = unescape(value);\n break;\n case "pas":\n config.options[name] = unescape(value);\n break;\n case "chk":\n config.options[name] = value == "true";\n break;\n }\n }\n }\n};\n\nwindow.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;\nwindow.saveOptionCookie = function(name)\n{\n var c = name + "=";\n switch(name.substr(0,3)) {\n case "txt":\n c += escape(config.options[name].toString());\n break;\n case "chk":\n c += config.options[name] ? "true" : "false";\n // is there an option link with this chk ?\n if (config.options[name.substr(3)]) {\n saveOptionCookie(name.substr(3));\n }\n break;\n case "pas":\n if (config.options["chk"+name]) {\n c += escape(config.options[name].toString());\n } else {\n c += "";\n }\n break;\n }\n c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";\n document.cookie = c;\n};\n//}}}\n/***\n!! Initializations\n***/\n//{{{\n// define config.options.pasPassword\nif (!config.options.pasPassword) {\n config.options.pasPassword = 'defaultPassword';\n window.saveOptionCookie('pasPassword');\n}\n// since loadCookies is first called befor password definition\n// we need to reload cookies\nwindow.loadOptionsCookie();\n//}}}\n////===\n\n////+++!![config.macros.upload]\n\n//{{{\nconfig.macros.upload = {\n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this two configs need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n backupFileStored: "Previous file backuped in %0",\n crossDomain: "Certainly a cross-domain isue: access to an other site isn't allowed",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileLocked: "Files is locked: You are not allowed to Upload",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n passwordEmpty: "Unable to upload, your password is empty",\n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0"\n};\n\nconfig.macros.upload.label = {\n promptOption: "Save and Upload this TiddlyWiki with UploadOptions",\n promptParamMacro: "Save and Upload this TiddlyWiki in %0",\n saveLabel: "上傳檔案", \n saveToDisk: "儲存變更",\n uploadLabel: "上傳檔案" \n};\n\nconfig.macros.upload.handler = function(place,macroName,params){\n // parameters initialization\n var storeUrl = params[0];\n var toFilename = params[1];\n var backupDir = params[2];\n var uploadDir = params[3];\n var username = params[4];\n var password; // for security reason no password as macro parameter\n var label;\n if (document.location.toString().substr(0,4) == "http")\n label = this.label.saveLabel;\n else\n label = this.label.uploadLabel;\n var prompt;\n if (storeUrl) {\n prompt = this.label.promptParamMacro.toString().format([this.toDirUrl(storeUrl, uploadDir, username)]);\n }\n else {\n prompt = this.label.promptOption;\n }\n createTiddlyButton(place, label, prompt, \n function () {\n config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); \n return false;}, \n null, null, this.accessKey);\n};\nconfig.macros.upload.UploadLog = function() {\n return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );\n};\nconfig.macros.upload.UploadLog.prototype = config.lib.Log.prototype;\nconfig.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {\n var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";\n line += uploadDir + " | " + toFilename + " | " + backupDir + " |";\n this.newLine(line);\n};\nconfig.macros.upload.UploadLog.prototype.endUpload = function() {\n this.addToLine(" Ok |");\n};\nconfig.macros.upload.basename = config.lib.file.basename;\nconfig.macros.upload.dirname = config.lib.file.dirname;\nconfig.macros.upload.toRootUrl = function (storeUrl, username)\n{\n return root = (this.dirname(storeUrl)?this.dirname(storeUrl):this.dirname(document.location.toString()));\n}\nconfig.macros.upload.toDirUrl = function (storeUrl, uploadDir, username)\n{\n var root = this.toRootUrl(storeUrl, username);\n if (uploadDir && uploadDir != '.')\n root = root + '/' + uploadDir;\n return root;\n}\nconfig.macros.upload.toFileUrl = function (storeUrl, toFilename, uploadDir, username)\n{\n return this.toDirUrl(storeUrl, uploadDir, username) + '/' + toFilename;\n}\nconfig.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)\n{\n // parameters initialization\n storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);\n toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);\n backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);\n uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);\n username = (username ? username : config.options.txtUploadUserName);\n password = config.options.pasUploadPassword; // for security reason no password as macro parameter\n if (!password || password === '') {\n alert(config.macros.upload.messages.passwordEmpty);\n return;\n }\n if (storeUrl === '') {\n storeUrl = config.macros.upload.defaultStoreScript;\n }\n if (config.lib.file.dirname(storeUrl) === '') {\n storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;\n }\n if (toFilename === '') {\n toFilename = config.lib.file.basename(document.location.toString());\n }\n\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (!storeUrl) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n // Check that file is not locked\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n if (BidiX.GroupAuthoring.lock.isLocked() && !BidiX.GroupAuthoring.lock.isMyLock()) {\n alert(config.macros.upload.messages.fileLocked);\n return;\n }\n }\n \n var log = new this.UploadLog();\n log.startUpload(storeUrl, toFilename, uploadDir, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n var toDir = config.macros.upload.toDirUrl(storeUrl, toFilename, uploadDir, username);\n displayMessage(config.macros.upload.messages.aboutToUpload.format([toDir]), toDir);\n this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";\n this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, \n function (responseText) {\n if (responseText.substring(0,1) != '0') {\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, rssPath, uploadDir, username);\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [toFileUrl]), toFileUrl);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n });\n }\n return;\n};\n\nconfig.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var original;\n if (document.location.toString().substr(0,4) == "http") {\n original = this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);\n return;\n }\n else {\n // standard way : Local file\n \n original = loadFile(getLocalPath(document.location.toString()));\n if(window.Components) {\n // it's a mozilla browser\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]\n .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n }\n //DEBUG alert(original);\n this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password);\n};\n\nconfig.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it\n var endSaveArea = '</d' + 'iv>';\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n {\n alert(config.messages.invalidFileError.format([document.location.toString()]));\n return;\n }\n var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n var newSiteTitle;\n if(version.major < 2){\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n\n revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");\n revised = revised.replaceChunk("<!--PRE-HEAD-START--"+">","<!--PRE-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPreHead","") + "\sn");\n revised = revised.replaceChunk("<!--POST-HEAD-START--"+">","<!--POST-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPostHead","") + "\sn");\n revised = revised.replaceChunk("<!--PRE-BODY-START--"+">","<!--PRE-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPreBody","") + "\sn");\n revised = revised.replaceChunk("<!--POST-BODY-START--"+">","<!--POST-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPostBody","") + "\sn");\n\n var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, \n username, password, function (responseText) {\n if (responseText.substring(0,1) != '0') {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));\n }\n else {\n if (uploadDir !== '') {\n toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);\n } else {\n toFilename = config.macros.upload.basename(toFilename);\n }\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n if (responseText.indexOf("destfile:") > 0) {\n var destfile = responseText.substring(responseText.indexOf("destfile:")+9, \n responseText.indexOf("\sn", responseText.indexOf("destfile:")));\n toFileUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + destfile;\n }\n else {\n toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [toFileUrl]), toFileUrl);\n if (backupDir && responseText.indexOf("backupfile:") > 0) {\n var backupFile = responseText.substring(responseText.indexOf("backupfile:")+11, \n responseText.indexOf("\sn", responseText.indexOf("backupfile:")));\n toBackupUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + backupFile;\n displayMessage(config.macros.upload.messages.backupFileStored.format(\n [toBackupUrl]), toBackupUrl);\n }\n var log = new config.macros.upload.UploadLog();\n log.endUpload();\n store.setDirty(false);\n // erase local lock\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n BidiX.GroupAuthoring.lock.eraseLock();\n // change mtime with new mtime after upload\n var mtime = responseText.substr(responseText.indexOf("mtime:")+6);\n BidiX.GroupAuthoring.lock.mtime = mtime;\n }\n \n \n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n};\n\nconfig.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, \n username, password, callbackFn) {\n var boundary = "---------------------------"+"AaB03x"; \n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n if (window.netscape){\n try {\n if (document.location.toString().substr(0,4) != "http") {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}\n }\n catch (e) {}\n } \n //DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");\n // compose headers data\n var sheader = "";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data; name=\s"";\n sheader += config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir\n +";user=" + username \n +";password=" + password\n +";uploaddir=" + uploadDir;\n // add lock attributes to sheader\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n var l = BidiX.GroupAuthoring.lock.myLock;\n sheader += ";lockuser=" + l.user\n + ";mtime=" + l.mtime\n + ";locktime=" + l.locktime;\n }\n sheader += ";;\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data; name=\s"userfile\s"; filename=\s""+toFilename+"\s"\sr\sn";\n sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";\n sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";\n // compose trailer data\n var strailer = new String();\n strailer = "\sr\sn--" + boundary + "--\sr\sn";\n //strailer = "--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n //request.open("POST", storeUrl, true, username, password);\n try {\n request.open("POST", storeUrl, true); \n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if (request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent + "\snStatus: "+request.status.statusText);\n }\n };\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n};\n\n\nconfig.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, \n username, password) {\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n if (uploadUrl.substr(0,4) == "http") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n //request.open("GET", document.location.toString(), true, username, password);\n try {\n request.open("GET", document.location.toString(), true);\n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n \n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, \n uploadToFilename, uploadDir, uploadBackupDir, username, password);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format(\n [document.location.toString()]) + "\snStatus: "+request.status.statusText);\n }\n };\n request.send(null);\n};\n\n//}}}\n////===\n\n////+++!![Initializations]\n\n//{{{\nconfig.lib.options.init('txtUploadStoreUrl','store.php');\nconfig.lib.options.init('txtUploadFilename','');\nconfig.lib.options.init('txtUploadDir','');\nconfig.lib.options.init('txtUploadBackupDir','');\nconfig.lib.options.init('txtUploadUserName',config.options.txtUserName);\nconfig.lib.options.init('pasUploadPassword','');\nsetStylesheet(\n ".pasOptionInput {width: 11em;}\sn"+\n ".txtOptionInput.txtUploadStoreUrl {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadFilename {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadDir {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadBackupDir {width: 25em;}\sn"+\n "",\n "UploadOptionsStyles");\nif (document.location.toString().substr(0,4) == "http") {\n config.options.chkAutoSave = false; \n saveOptionCookie('chkAutoSave');\n}\nconfig.shadowTiddlers.UploadDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadDoc ]]\sn"; \n\n//}}}\n////===\n\n////+++!![Core Hijacking]\n\n//{{{\nconfig.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;\nconfig.macros.saveChanges.label = config.macros.upload.label.saveToDisk;\n\nconfig.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;\n\nconfig.macros.saveChanges.handler = function(place)\n{\n if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))\n createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);\n};\n\n//}}}\n////===\n\n
/***\n|''Name:''|UploadPlugin.zh-Hant|\n|''Source:''|[[TiddlyWiki-zh|http://tiddlywiki-zh.googlecode.com/svn/trunk/contributors/BramChen/locales/plugins/]]|\n|''Require:''|[[UploadPlugin|http://tiddlywiki.bidix.info/#UploadPlugin]]|\n***/\n//{{{\nif (typeof config.macros.upload != "undefined"){\n merge(config.macros.upload.messages, {\n aboutToUpload: "關於上傳 TiddlyWiki 至 %0",\n backupFileStored: "前一版的檔案備份於 %0",\n crossDomain: "發生跨網域問題:不允許存取其他網站",\n errorDownloading: "下載時發生錯誤",\n errorUploadingContent: "傳時發生錯誤",\n fileLocked: "檔案被鎖住:目前不允許上傳",\n fileNotFound: "無此上傳檔案",\n fileNotUploaded: "檔案 %0 未完成上傳",\n mainFileUploaded: "主文件 TiddlyWiki 上傳至 %0",\n passwordEmpty: "請先輸入密碼後再上傳",\n urlParamMissing: "未指定 url 參數",\n rssFileNotUploaded: "Rss 檔案 %0 未上傳",\n rssFileUploaded: "Rss 檔上傳至 %0"\n });\n \n merge(config.macros.upload.label, {\n promptOption: " 依據 UploadOptions 的設定,儲存並上傳此 TiddlyWiki",\n promptParamMacro: "儲存並上傳此 TiddlyWiki 文件於 %0",\n saveLabel: "遠端存檔", \n saveToDisk: "本機存檔",\n uploadLabel: "上傳" \n });\n \n config.macros.saveChanges.label = (document.location.toString().substr(0,4) == "http")?"遠端存檔":"本機存檔";\n config.macros.option.passwordCheckboxLabel = "存放此密碼於本機";\n config.shadowTiddlers['OptionsPanel'] += '\sn[[上傳選項|UploadOptions]]';\n config.shadowTiddlers['UploadOptions'] = "\s\n!UploadPlugin 選項設定\sn\s\n帳號:<<option txtUploadUserName>>\sn\s\n密碼:<<option pasUploadPassword>>\sn\sn\s\n上傳的服務程式的網址^^(1)^^: <<option txtUploadStoreUrl 50>>\sn\s\n存放檔案的相對資料夾^^(2)^^: <<option txtUploadDir 50>>\sn\s\n上傳檔案的檔名^^(3)^^: <<option txtUploadFilename 40>>\sn\s\n存放備份檔於伺服主機上的資料夾^^(4)^^: <<option txtUploadBackupDir>>\sn\sn\s\n^^(1)^^可於[[上傳選項|UploadOptions]] 或使用巨集參數設定\sn\s\n^^(2)^^若為空白,則與服務程式同資料夾\sn\s\n^^(3)^^若為空白,則與使用原文件檔名\sn\s\n^^(4)^^若為空白,於伺服主機之相同檔名的檔案將被覆寫取代\sn\sn\s\n依上述設定 <<upload>>\sn\sn\s\n!Upload 巨集語法範例\sn\s\n{{{\sn\s\n<<upload [storeUrl [toFilename [backupDir [uploadDir [username]]]]]>>\sn\s\n}}}\sn\s\n 選用之參數可以取代[[上傳選項|UploadOptions]] 的設定\sn\s\n ";\n\n}\n//}}}
[[MptwViewTemplate]]\n
此份檔案是從tiddlyspot.com而來的~TiddlyWiki文件,~TiddlyWiki是一種電子筆記本,對待辦事項、個人資訊、以及各種形形色色的任務都可以管理的很完美。\n\n@@font-weight:bold;font-size:1.3em;color:#444; //注意事項?// &nbsp;&nbsp;@@ 在儲存任何改變之前,您必須在下面的表格輸入密碼,然後在您的[[control panel|http://tw.mptw.tiddlyspot.com/controlpanel]] (您的控制面板的使用名稱為://tw.mptw//)配置隱私權和其他的網站設定。\n<<tiddler TspotControls>>\n也可檢視 GettingStarted.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //線上作業// &nbsp;&nbsp;@@ 可以立刻編輯~TiddlyWiki,並且點選右側欄的"上傳檔案"儲存您的修訂。\n\n@@font-weight:bold;font-size:1.3em;color:#444; //離線作業// &nbsp;&nbsp;@@ 複製一個完整功能的~TiddlyWiki並儲存在硬碟或USB隨身碟。在作一修訂之後並不需要連上網路就可儲存在本地電腦,每當您準備再一次同步傳輸資料時,只要點選"上傳檔案"就可將~TiddlyWiki回存到tiddlyspot.com。\n\n@@font-weight:bold;font-size:1.3em;color:#444; //協助!// &nbsp;&nbsp;@@ 有關於~TiddlyWik可以在[[TiddlyWiki.com|http://tiddlywiki.com]]找到更多的資訊,也可以參觀[[TiddlyWiki Guides|http://tiddlywikiguides.org]]得到學習及使用~TiddlyWiki的文件,特別歡迎新使用者來到[[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]],此地是一個可以詢問問題並且得到協助的卓越場所,如果您有tiddlyspot相關的問題email請寄[[tiddlyspot support|mailto:support@tiddlyspot.com]]\n\n@@font-weight:bold;font-size:1.3em;color:#444; //享用 :)// &nbsp;&nbsp;@@ 我們希望您會喜歡您的tiddlyspot.com的網站,有任何評論或建議email請寄 [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] 。\n\n\nThis document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://tw.mptw.tiddlyspot.com/controlpanel]] (your control panel username is //tw.mptw//).\n<<tiddler TspotControls>>\nSee also GettingStarted.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the "上傳檔案" button in the column on the right.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.
Well in case you didn't know TiddlyWiki 2.1 came out. They say a new broom sweeps clean and well it just feels right to be pushing boxes of junk to the kerb, clearing out the cobwebs and dust, and making room for the new. Like a snake shedding its skin MonkeyPirateTiddlyWiki is shiny and ready to move on. Of course it's not all boxes of junk. The good stuff is still [[right here|systemConfig]], spruced and polished for TiddlyWiki 2.1 and, don't panic, the garbage truck isn't coming just yet. [[The old stuff|Old Stuff]] can still be found. (And there is still the //[[ancient|Ancient Stuff]]// stuff for historical analysis.)\n
為了確定您擁有所有的新變更,必須[[升級|Upgrade]]來保持MonkeyPirateTiddlyWiki處於最新的狀態。\n\n
These are the MonkeyPirateTiddlyWiki plugins that are here so far. (Except for UploadPlugin which comes from http://tiddlywiki.bidix.info/). They have all been rewritten to take advantage of the new features of TiddlyWiki 2.1. (Pre 2.1 plugins can be found over at [[the old site|Old Stuff]].)