config.options.chkHttpReadOnly = false;\n
TiddlyWiki [[關於本站]] [[Welcome to your tiddlyspot.com site!]] GettingStarted
{{floatleft{<<tiddler ToggleLeftSidebar>>}}}{{floatright{<<tiddler ToggleRightSidebar>>}}}
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:\n* 標題 SiteTitle & 副標題 SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)\n* MainMenu: 主選單 ( 通常在左側 )\n* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened\nYou'll also need to enter your username for signing your edits: <<option txtUserName>>\n\n希望,新建立一個 TiddlyWiki 時,所有客製化動作都可以在此 tiddler 完成。
/***\n|''Name:''|InlineJavascriptPlugin|\n|''Source:''|http://www.TiddlyTools.com/#InlineJavascriptPlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nInsert Javascript executable code directly into your tiddler content. Lets you ''call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.\n!!!!!Usage\n<<<\nWhen installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.\n\n''Deferred execution from an 'onClick' link''\nBy including a label="..." parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.\n\n''External script source files:''\nYou can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.\n\n''Display script source in tiddler output''\nBy including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.\n\n''Defining javascript functions and libraries:''\nAlthough the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).\n\nTo ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.\n\nSince the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.\n\n''Creating dynamic tiddler content''\nAn important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:\n* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.\n* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.\n* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.\n\nIf your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display. For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.\n\n//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//\n\n''Accessing the ~TiddlyWiki DOM''\nThe plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.\n\nAccess to this DOM element allows you to create scripts that can:\n* vary their actions based upon the specific location in which they are embedded\n* access 'tiddler-relative' information (use findContainingTiddler(place))\n* perform direct DOM manipulations (when returning wikified text is not enough)\n<<<\n!!!!!Examples\n<<<\nan "alert" message box:\n><script show>\n alert('InlineJavascriptPlugin: this is a demonstration message');\n</script>\ndynamic output:\n><script show>\n return (new Date()).toString();\n</script>\nwikified dynamic output:\n><script show>\n return "link to current user: [["+config.options.txtUserName+"]]";\n</script>\ndynamic output using 'place' to get size information for current tiddler:\n><script show>\n if (!window.story) window.story=window;\n var title=story.findContainingTiddler(place).id.substr(7);\n return title+" is using "+store.getTiddlerText(title).length+" bytes";\n</script>\ncreating an 'onclick' button/link that runs a script:\n><script label="click here" show>\n if (!window.story) window.story=window;\n alert("Hello World!\snlinktext='"+place.firstChild.data+"'\sntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");\n</script>\nloading a script from a source url:\n>http://www.TiddlyTools.com/demo.js contains:\n>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}\n>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}\n><script src="demo.js" show>\n return "loading demo.js..."\n</script>\n><script label="click to execute demo() function" show>\n demo()\n</script>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.10.16 [1.5.2]'' add newline before closing '}' in 'function out_' wrapper. Fixes error caused when last line of script is a comment.\n''2006.06.01 [1.5.1]'' when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly\n''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output\n''2006.01.05 [1.4.0]'' added support 'onclick' scripts. When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.\n''2005.12.13 [1.3.1]'' when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski\n''2005.11.09 [1.3.0]'' for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content. Based on a suggestion by BradleyMeck\n''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax\n''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access \n''2005.11.08 [1.0.0]'' initial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.inlineJavascript= {major: 1, minor: 5, revision: 2, date: new Date(2006,10,16)};\n\nconfig.formatters.push( {\n name: "inlineJavascript",\n match: "\s\s<script",\n lookahead: "\s\s<script(?: src=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?(?: label=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?( show)?\s\s>((?:.|\s\sn)*?)\s\s</script\s\s>",\n\n handler: function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n if (lookaheadMatch[1]) { // load a script library\n // make script tag, set src, add to body to execute, then remove for cleanup\n var script = document.createElement("script"); script.src = lookaheadMatch[1];\n document.body.appendChild(script); document.body.removeChild(script);\n }\n if (lookaheadMatch[4]) { // there is script code\n if (lookaheadMatch[3]) // show inline script code in tiddler output\n wikify("{{{\sn"+lookaheadMatch[0]+"\sn}}}\sn",w.output);\n if (lookaheadMatch[2]) { // create a link to an 'onclick' script\n // add a link, define click handler, save code in link (pass 'place'), set link attributes\n var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);\n link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}\n link.code="function _out(place){"+lookaheadMatch[4]+"\sn};_out(this);"\n link.setAttribute("href","javascript:;"); link.setAttribute("title",""); link.style.cursor="pointer";\n }\n else { // run inline script code\n var code="function _out(place){"+lookaheadMatch[4]+"\sn};_out(w.output);"\n code=code.replace(/document.write\s(/gi,'place.innerHTML+=(');\n try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }\n if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);\n }\n }\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n} )\n//}}}\n
http://lesserwiki.org/
/***\n!Metadata:\n|''Name:''|ListNoTaggedPlugin|\n|''Description:''|To list tiddlers that are orphans without tag.|\n|''Version:''|1.0.1|\n|''Source:''|http://jeultw.tiddlyspot.com/#ListNoTaggedOrphansPlugin|\n|''Author:''|JeulTW (yclee2006 (at) gmail (dot) com)|\n|''References:''|Mainbody from BramChen's [[ListNoTaggedPlugin|http://prdownloads.sourceforge.net/ptw/ListNoTagged-1.0.1.js?download]], getOrphans of TiddlyWiki v.2.1.3|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License]]|\n|''~CoreVersion:''|2.1.0|\n|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|\n!Revision History:\n|''Version''|''Date''|''Note''|\n|1.0.0|Nov 9, 2006|Initial release|\n|1.0.1|Nov 10, 2006|Revise description and add references|\n!Code section:\n***/\n//{{{\nconfig.macros.list.notaggedorphans = {\n prompt: "Tiddlers that are neither linked to from any other tiddlers nor tagged:"\n};\nconfig.macros.list.notaggedorphans.handler = function(params)\n{\n return store.getNoTaggedOrphans();\n\n}\nTiddlyWiki.prototype.getNoTaggedOrphans = function()\n{\n var results = [];\n this.forEachTiddler(function (title,tiddler) {\n if(tiddler.tags.length==0 && this.getReferringTiddlers(title).length == 0 && !tiddler.isTagged("excludeLists"))\n results.push(title);\n });\n results.sort();\n return results;\n}\n//}}}
TiddlyWiki\nGettingStarted\n\n^^[[edit menu|MainMenu]]^^\n^^Powered by [[TiddlyWiki|http://www.tiddlywiki.com]] v<<version>>^^\n^^~TiddlyWiki [[tutorial|http://www.blogjones.com/TiddlyWikiTutorial.html]]^^\n\n[img[Get Firefox!|http://www.inxtyle.com/kakeru/temp/012.png][http://www.spreadfirefox.com/?q=affiliates&id=0&t=82]]\n<html><a href="http://www.spreadfirefox.com/?q=affiliates&id=0&t=82" target=_blank><img border="0" alt="Get Firefox!" title="Get Firefox!" src="http://sfx-images.mozilla.org/affiliates/Buttons/80x15/white_1.gif"/></a></html>\n\n
<!--{{{-->\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<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='storyMenu' class='storyMenu' refresh='content' force='true' tiddler='DisplayBar'></div>\n<div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->
http://ccm.sherry.jp/tiddly/
http://www.patrickcurry.com/tiddly/
http://ptw.sourceforge.net/\n[[繁體中文版|http://ptw.sourceforge.net/index-zh_TW.html]]
官方討論:http://trac.tiddlywiki.org/tiddlywiki/wiki/ServerSide\nTim Morgan's ZiddlyWiki -- 搭配Python script,使其可以在[[Zope伺服器|http://zh.wikipedia.org/wiki/Zope]]上存取,並且採用[[AJAX|http://zh.wikipedia.org/wiki/AJAX]]機制。\n[[ccTiddly|http://cctiddly.sourceforge.net/]] -- php, server-side, now for single user\npytw -- python, http://www.cs.utexas.edu/~joeraii/pytw/\nLesserWiki -- Ruby on Rails\nServerSideWiki -- RubyonRails\nPerlTiddlyWiki\nPhpTiddlyWiki\n\n
http://www.serversidewiki.com/
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<upload http://jeultw.tiddlyspot.com/store.cgi index.html . . jeultw>><html><a href='http://jeultw.tiddlyspot.com/download' class='button'>download</a></html><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
This tiddler is included in the PageTemplate as a ''hidden SPAN''. You can use it include macros or inline scripts that are automatically invoked whenever the document is loaded.\n\n!!!!!initialize left/right sidebar displays\n<<<\nThe ToggleLeftSidebar and ToggleRightSidebar inline scripts set the visibility (//display:none// or //display:block//) of the MainMenu ('left sidebar', DOM ID=//mainMenu//) and SideBarOptions ('right sidebar', DOM ID=//sidebar//) displays. They also adjust the margins of the center column ('story', DOM ID=//displayArea//) accordingly, so that it uses the available space without overlapping the sidebars. The ToggleScrollingSidebars inline script sets 'position:fixed' for the sidebars, so that they remain fixed in place (aka, "hover") when the rest of the page content is scrolled.\n\ndisplayArea margins:\n<script>\n config.options.txtDisplayAreaRightMargin="18em";\n config.options.txtDisplayAreaLeftMargin="13em";\n</script>\nleft: <<option txtDisplayAreaLeftMargin>> right: <<option txtDisplayAreaRightMargin>>\n|{{{<<tiddler ToggleLeftSidebar>>}}} |<<tiddler ToggleLeftSidebar>> |\n|{{{<<tiddler ToggleRightSidebar>>}}} |<<tiddler ToggleRightSidebar>> |\n|{{{<<tiddler ToggleScrollingSidebars>>}}} |<<tiddler ToggleScrollingSidebars>> |\n<<<\n!!!!!initialize header display\n<<<\nThe ToggleSiteTitles inline script sets the visibility (//display:none// or //display:block//) of the SiteTitle/SiteSubtitle display area ('page titles', DOM ID=//header//)\n|{{{<<tiddler ToggleSiteTitles>>}}} |<<tiddler ToggleSiteTitles>> |\n<<<\n!!!!!"scroll to top" button\n<<<\nThe ToggleTopButton script creates a link that 'hovers' in the lower right corner of your browser window and, when clicked, causes the page to return to the top (assuming it has been scrolled down...). The script also provides an interface so you can enable/disable this feature:\n|{{{<<tiddler ToggleTopButton>>}}} |<<tiddler ToggleTopButton>> |\n<<<\n!!!!!toggle low-profile SiteMenu\n<<<\nThe ToggleSiteMenu inline script sets the visibility (//display:none// or //display:block//) of the SiteMenu display area ('menubar', DOM ID=//siteMenu//).\n|{{{<<tiddler ToggleSiteMenu>>}}} |<<tiddler ToggleSiteMenu>> |\n<<<\n
使用筆記
jeul's TiddlyWiki
/*{{{*/\n.floatleft {\n float:left;\n}\n\n.floatright {\n float:right;\n}\n/*}}}*/
*Opera Mini + TiddlyWiki 2.1。\n**[[已有先賢烈士在Palm Zire72試跑過(2006/01)| http://groups.google.com/group/TiddlyWikiDev/browse_thread/thread/529515dca4186605/28a03034edf35b7f?lnk=gst&q=opera+mini&rnum=1#28a03034edf35b7f]]\n** 參考:[[Installing Opera Mini on a Palm|http://my.opera.com/Words/blog/show.dml/57982]]
#內嵌<html>語法。[[參考|http://groups-beta.google.com/group/PrinceTiddlyWiki/browse_thread/thread/3fb504c430d59674/a665cf805874f6ba?lnk=gst&q=flash&rnum=2#a665cf805874f6ba]]\n#安裝Eric的 http://www.tiddlytools.com/#PlayerPlugin\n#*使用簡例:{{{<<player flash URLofYourflash>>}}}
http://www.tiddlytools.com/
[[TiddlyWiki|http://www.tiddlywiki.com/]] 是一個單一HTML檔案,內含文件內容,以及提供閱讀及編輯功能的CSS和Javascript。只需要有Javascript功能的網頁瀏覽程式,不需要另外架設網站。很想試用吧!你可以在這個連結 -- [[空白的 TiddlyWiki|http://www.tiddlywiki.com/empty.html]]([[中文|http://milchflasche.byethost31.com/index.php?config=TiddlyZiddly#TW%E7%A9%BA%E7%99%BD%E6%96%87%E4%BB%B6_2.0.11_%E5%85%A7%E5%B5%8C%E8%8F%AF%E8%AA%9E%E7%B9%81%E9%AB%94%E6%BC%A2%E5%AD%97]] v2.0.11) -- [[按滑鼠右鍵另存新檔|下載]]後開始使用,或者到[[免費的TiddlyWiki主機|http://tiddlyspot.com/]]註冊一個帳號。\n\nTiddlyWiki 可以做什麼?\n* 簡報\n** BramChen 的 PrinceTiddlyWiki [[簡報版|http://ptw.sourceforge.net/ptwslide.html]]\n* 課堂速記\n** BramChen 的 PrinceTiddlyWiki [[學生課堂速記版 |http://ptw.sourceforge.net/ptwse.html]]\n\n''名詞解釋''\n*WikiWord -- 由兩個以上首字大寫的字組成的短語。\n*tiddler --\n*<<slider TabMoreShadowed TabMoreShadowed "shadow tiddler" "列出shadwo tiddlers">>\n*tag\n*special tag\n\nhttp://www.tiddlywiki.com/#MainFeatures\n\n[[語法]]\n[[外掛]] (plugin)\n[[儲存變更]]\n[[更新]]\n[[相關連結]]\nServerSideTiddlyWiki\n
* http://www.tiddlytools.com/#BreadcrumbsPlugin\n* 自訂樣式 StyleSheet http://doc.tiddlywiki.org/#CustomCssClass 及樣式修改:StyleSheetColors與StyleSheetPrint \n* TiddlyWiki + Google Pages 架站 -- http://groups.google.com.tw/group/PrinceTiddlyWiki/msg/410ee9d06c46a9df http://groups.google.com.tw/group/PrinceTiddlyWiki/msg/b41e6c34f8f7dde8\n* 樣式修改 -- http://groups.google.com.tw/group/PrinceTiddlyWiki/msg/8d21b6cbffd5f436\n* 版面修改:PageTemplate、ViewTemplate、EditTemplate與StyleSheetLayout\n\n*如何分家? 隨著內容增加,檔案也越來越大,如何''很方便地''把部分主題分成另一個檔案?(或者想把部分內容給其他人看)\n* 備份檔案夾是否可以設到別的目錄?
<script label="show/hide left sidebar">\n var show=document.getElementById('mainMenu').style.display=='none';\n if (!show) {\n document.getElementById('mainMenu').style.display='none';\n var margin='1em';\n }\n else {\n document.getElementById('mainMenu').style.display='block';\n var margin=config.options.txtDisplayAreaLeftMargin?config.options.txtDisplayAreaLeftMargin:"";\n }\n place.innerHTML=(show?"&lt;&lt;&lt;":"&gt;&gt;&gt;"); // SET LINK TEXT\n place.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP\n document.getElementById('displayArea').style.marginLeft=margin;\n config.options.chkShowLeftSidebar=show;\n saveOptionCookie('chkShowLeftSidebar');\n var sm=document.getElementById("storyMenu"); if (sm) config.refreshers.content(sm);\n return false;\n</script><script>\n if (config.options.chkShowLeftSidebar==undefined)\n config.options.chkShowLeftSidebar=true;\n if (!config.options.txtDisplayAreaLeftMargin||!config.options.txtDisplayAreaLeftMargin.length)\n config.options.txtDisplayAreaLeftMargin="12em";\n var show=config.options.chkShowLeftSidebar;\n document.getElementById('mainMenu').style.display=show?"block":"none";\n document.getElementById('displayArea').style.marginLeft=show?config.options.txtDisplayAreaLeftMargin:"1em";\n place.lastChild.innerHTML=(show?"&lt;&lt;&lt;":"&gt;&gt;&gt;"); // SET LINK TEXT\n place.lastChild.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP\n place.lastChild.style.fontWeight="normal";\n</script>
<script label="show/hide right sidebar">\n var show=document.getElementById('sidebar').style.display=='none';\n if (!show) {\n document.getElementById('sidebar').style.display='none';\n var margin='1em';\n }\n else {\n document.getElementById('sidebar').style.display='block';\n var margin=config.options.txtDisplayAreaRightMargin?config.options.txtDisplayAreaRightMargin:"";\n }\n place.innerHTML=(show?"&gt;&gt;&gt;":"&lt;&lt;&lt;"); // SET LINK TEXT\n place.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP\n document.getElementById('displayArea').style.marginRight=margin;\n config.options.chkShowRightSidebar=show;\n saveOptionCookie('chkShowRightSidebar');\n var sm=document.getElementById("storyMenu"); if (sm) config.refreshers.content(sm);\n return false;\n</script><script>\n if (config.options.chkShowRightSidebar==undefined)\n config.options.chkShowRightSidebar=true;\n if (!config.options.txtDisplayAreaRightMargin||!config.options.txtDisplayAreaRightMargin.length)\n config.options.txtDisplayAreaRightMargin="17em";\n var show=config.options.chkShowRightSidebar;\n document.getElementById('sidebar').style.display=show?"block":"none";\n document.getElementById('displayArea').style.marginRight=show?config.options.txtDisplayAreaRightMargin:"1em";\n place.lastChild.innerHTML=(show?"&gt;&gt;&gt;":"&lt;&lt;&lt;"); // SET LINK TEXT\n place.lastChild.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP\n place.lastChild.style.fontWeight="normal";\n</script>
<script>\n var c=document.getElementById('contentWrapper'); \n if (config.options.chkHideSiteTitles==undefined) config.options.chkHideSiteTitles=false;\n for (var i=0; i<c.childNodes.length; i++) if (hasClass(c.childNodes[i],"header")) var h=c.childNodes[i];\n h.style.display=config.options.chkHideSiteTitles?"none":"block";\n</script><<option chkHideSiteTitles>><script>\n place.lastChild.checked=!config.options.chkHideSiteTitles;\n place.lastChild.onchange=function() {\n var c=document.getElementById('contentWrapper'); \n for (var i=0; i<c.childNodes.length; i++) if (hasClass(c.childNodes[i],"header")) var h=c.childNodes[i];\n config.options.chkHideSiteTitles=!this.checked;\n h.style.display=config.options.chkHideSiteTitles?"none":"block";\n saveOptionCookie("chkHideSiteTitles");\n };\n</script> show site titles
<script> \n window.showTopButton=function(show) {\n // remove existing "top" button (if any)\n var e=document.getElementById("scrollToTopButton"); if (e) e.parentNode.removeChild(e);\n if (config.browser.isIE) return; // IE doesn't do FIXED... do nothing.\n if (!show) return; // hiding button... we're done.\n // create a link that scrolls to the top of page\n e=createTiddlyElement(null,"A",null,null,"top");\n e.id="scrollToTopButton";\n e.title="scroll to top of page";\n e.onclick=function(){window.scrollTo(0,0)};\n // make it hover in the bottom right corner of the window\n var s=e.style;\n s.position="fixed";\n s.zIndex="1001"; // hopefully, this will be on top of ALL other elements!\n s.bottom=".5em";\n s.right=".5em";\n s.cursor="pointer";\n s.backgroundColor="#eee";\n s.color="#009";\n s.border="1px solid";\n s.padding="0 1em";\n s.MozBorderRadius="1em";\n s.fontSize="7pt";\n document.body.insertBefore(e,null);\n }\n if (config.options.chkShowTopButton==undefined) config.options.chkShowTopButton=true;\n window.showTopButton(config.options.chkShowTopButton);\n</script><<option chkShowTopButton>><script>\n place.lastChild.onchange=function() {\n window.showTopButton(this.checked);\n config.options.chkShowTopButton=this.checked;\n saveOptionCookie("chkShowTopButton");\n };\n</script> "scroll-to-top" button
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 8/11/2006 13:23:29 | YcLee | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 8/11/2006 13:41:39 | YcLee | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 8/11/2006 14:38:6 | YcLee | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 8/11/2006 15:57:35 | YcLee | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 8/11/2006 16:41:24 | YcLee | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 8/11/2006 17:5:12 | YcLee | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/11/2006 11:2:35 | YcLee | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 9/11/2006 12:16:56 | YcLee | [[/|http://jeultw.tiddlyspot.com/#TWMacros]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 9/11/2006 16:29:56 | JeulTW | [[/|http://jeultw.tiddlyspot.com/#TWMacros]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 9/11/2006 16:35:13 | JeulTW | [[/|http://jeultw.tiddlyspot.com/#TWMacros]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/11/2006 16:53:25 | JeulTW | [[/|http://jeultw.tiddlyspot.com/#ListNoTaggedOrphansPlugin]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/11/2006 11:6:58 | JeulTW | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/11/2006 17:59:57 | JeulTW | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/11/2006 18:1:15 | JeulTW | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 14/11/2006 14:53:48 | JeulTW | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 14/11/2006 15:7:47 | JeulTW | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 14/11/2006 17:40:13 | JeulTW | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 14/11/2006 17:40:32 | JeulTW | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/11/2006 8:56:35 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/11/2006 8:59:28 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/11/2006 9:51:30 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/11/2006 10:17:27 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/11/2006 12:8:43 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/11/2006 13:22:3 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/11/2006 14:16:17 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/11/2006 15:9:12 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/11/2006 15:15:39 | yclee | [[jeultw.html|file:///d:/tiddlywiki/jeultw.html]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/11/2006 15:56:33 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 22/11/2006 9:38:2 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 24/11/2006 21:49:3 | YourName | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 30/11/2006 10:59:4 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 30/11/2006 11:33:45 | yclee | [[jeultw.html|file:///D:/doc/tiddlywiki/jeultw.html]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 30/11/2006 15:38:3 | yclee | [[jeultw.html|file:///D:/doc/tiddlywiki/jeultw.html]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 30/11/2006 15:52:4 | yclee | [[jeultw.html|file:///D:/doc/tiddlywiki/jeultw.html]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 30/11/2006 17:49:23 | jeul | [[/|http://jeultw.tiddlyspot.com/#SytleSheet]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 30/11/2006 18:1:28 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 1/12/2006 10:27:37 | jeul | [[/|http://jeultw.tiddlyspot.com/]] | [[store.cgi|http://jeultw.tiddlyspot.com/store.cgi]] | . | index.html | . |
/***\n|''Name:''|UploadPlugin|\n|''Description:''|Save to web a TiddlyWiki|\n|''Version:''|3.4.4|\n|''Date:''|Sep 30, 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: 4, \n date: new Date(2006,8,30),\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 = "Save this password on this computer";\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: "save to web", \n saveToDisk: "save to disk",\n uploadLabel: "upload" \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");\nconfig.shadowTiddlers.UploadDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadDoc ]]\sn"; \nconfig.options.chkAutoSave = false; saveOptionCookie('chkAutoSave');\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
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://jeultw.tiddlyspot.com/controlpanel]] (your control panel username is //jeultw//).\n<<tiddler tiddlyspotControls>>\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 "save to web" 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.
http://www.ziddlywiki.com/
聯絡方式:請發表文章到[[中文版TiddlyWiki論壇|http://groups.google.com/group/PrinceTiddlyWiki]] 或 yclee2006 AT gmail DOT com\n|Nov 6, 2006|發現 TiddlyWiki 並開始使用。|\n|Nov 9, 2006|ListNoTaggedOrphansPlugin v1.0.0|
| tiddlyspot password:|<<option pasUploadPassword>>|\n| site management:|<<upload http://jeultw.tiddlyspot.com/store.cgi index.html . . jeultw>>//(requires tiddlyspot password)//<<br>>[[control panel|http://jeultw.tiddlyspot.com/controlpanel]], [[download (go offline)|http://jeultw.tiddlyspot.com/download]]|\n| links:|[[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]]|
^^參考: http://www.tiddlywiki.com/#DownloadSoftware 及 http://www.tiddlywiki.com/#SaveUnpredictabilities^^\n\n有些瀏覽器 (特別是 FireFox) 的''檔案''/''另存新檔''不是直接存完整的 HTML 檔案,而是存目前網頁顯示的結果,存像 TiddlyWiki 這類高度動態的網頁會有問題,改用''按滑鼠右鍵另存新檔''才會正常。開啟儲存不完整的 TiddlyWiki 會顯示警告。\n\n空白的 TiddlyWiki\n* http://www.tiddlywiki.com/empty.html\n* [[中文|http://milchflasche.byethost31.com/index.php?config=TiddlyZiddly#TW%E7%A9%BA%E7%99%BD%E6%96%87%E4%BB%B6_2.0.11_%E5%85%A7%E5%B5%8C%E8%8F%AF%E8%AA%9E%E7%B9%81%E9%AB%94%E6%BC%A2%E5%AD%97]] v2.0.11
包含 JavaScript 程式集的 tiddler ,並且設標籤為 <<tag systemConfig>> ,讓它在 TiddlyWiki 開啟時被執行。它加強或改變 TiddlyWiki 的功能或外觀,或提供[[巨集]]功能。可以用內建巨集{{{<<plugins>>}}}來管理外掛程式的使用。\n\n| 外掛名稱 | 說明 |h\n|[[UploadPlugin]]|配合伺服端程式,提供上載功能(巨集{{{<<upload>>}}})。相關 tiddler : UploadLog UploadDoc SiteUrl|\n|[[SinglePageModePlugin|http://www.tiddlytools.com/#SinglePageModePlugin]]|維持頁面上只有一個 tiddler|\n|[[WikiBar|http://aiddlywiki.sourceforge.net/]]|編輯Tiddler 的語法工具列|\n|[[WikiEditPlugin|http://groups.google.com/group/PrinceTiddlyWiki/msg/5b06347ddbefff81]]|~|\n|[[PartTiddlerPlugin|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin]]|把一個Tiddler分出數個部份,每個部份可以像一般Tiddler來參照。|\n|[[TableOfContentsPlugin|http://www.tiddlytools.com/#TableOfContentsPlugin]]|用single listbox/droplist control取代標準的tabbed list,尤其是tiddler很多的時候|\n|InlineJavascriptPlugin||\n|中文翻譯|PrinceTiddlyWiki 的介面[[中文化步驟|http://ptw.sourceforge.net/ptwe.html#%5B%5BTiddlyWiki%20%E6%93%8D%E4%BD%9C%E4%BB%8B%E9%9D%A2%E4%B8%AD%E6%96%87%E5%8C%96%E6%AD%A5%E9%A9%9F%5D%5D]]|
* 個人工作管理套件:[[TOT(TaskOrganizerTW)|http://groups.google.com.tw/group/PrinceTiddlyWiki/msg/530330d16a76eb61]] [[壓縮檔|http://groups.google.com/group/oldcat/browse_thread/thread/b38f259ebdbc1d4d/#]]\n* [[中文PrinceTiddlyWiki|https://sourceforge.net/project/showfiles.php?group_id=150646]] -- 分成html 、 js 、 css\n* [[ccTiddlyWiki|http://cctiddly.sourceforge.net/]] -- 使用 PHP 及 MySQL 儲存 tiddlers 的 Server-side TiddlyWiki
!合成TiddlyWiki\n使用工具程式 Cook 及 設定檔(RecipeFiles)\n\n!拆開TiddlyWiki\n使用工具程式 Ginsu, 每個systemConfig的tiddler會變成*.js及*.meta, 其他tiddler變成*.tiddler. 另外也會產生設定檔(RecipeFiles), 要合成回來可以使用.
* [[內建巨集|http://www.tiddlywiki.com/#Macros]]\n** 插入目前時間\n*** {{{<<today>>}}}\n*** {{{<<today "DD MMM YYYY, hh:mm">>}}} ,請參照[[日期格式字串]]。\n** 有某 tag 的 tiddler 下拉式選單\n*** {{{<<tag tag_name>>}}}\n** 有某 tag 的 tiddler 列表 ([[參考|http://www.tiddlywiki.com/#TaggingMacro]])\n*** {{{<<tagging>>}}}\n*** {{{<<tagging TiddlerTitle>>}}}\n*** {{{<<tagging sep:[[, ]]>>}}}\n** 插入另一個tiddler\n*** {{{<<tiddler tiddler_title>>}}}\n** 可以收或開的 tiddler\n*** {{{<<slider cookie tiddler tittle tooltip>>}}}\n** 複製其他 TiddlyWiki 檔案的 tiddler(s)\n*** {{{<<importTiddlers>>}}}\n** 建立新的 tiddler\n*** {{{<<newTiddler>>}}}\n*** {{{<<newTiddler title:預設標題 tag:預設tag label:'顯示文字' text:'預設內容'>>}}}\n** 建立新的日誌\n*** {{{<<newJournal "DD MMM YYYY, hh:mm">>}}} ,請參照[[日期格式字串]]。\n*** {{{<<newJournal title:"預設標題DD MMM YYYY, hh:mm" tag:預設tag label:'顯示文字' text:'預設內容'>>}}} ,請參照[[日期格式字串]]。\n** 管理外掛程式\n*** {{{<<plugins>>}}}\n*自訂巨集\n*自己寫巨集 -- [[Getting started with custom macros|http://tiddlywikiguides.org/index.php?title=Getting_started_with_custom_macros]]\n\n
可以用「引述」的方式插入一段文章,用法就是在該行最前面加上 > 那麼就會在該行前面加上一條引述線了,此外也可重疊使用。\n>>>路人甲:今天天氣真不好...\n>>路人乙:對啊,又濕又冷\n>>    真不想上班…:@\n>路人丙:唉~心有戚戚焉...\n原始寫法如下:\n{{{\n>>>路人甲:今天天氣真不好...\n>>路人乙:對啊,又濕又冷\n>>    真不想上班…:@\n>路人丙:唉~心有戚戚焉...\n}}}\n\n<<<\n另外也可以用引述區段的方式\n<<<\n原始寫法如下:\n{{{\n<<<\n另外也可以用引述區段的方式\n<<<\n}}}
^^額外參考 http://bbs.ilc.edu.tw/dokuwiki/doku.php^^\n支援以下基本語法,當然可以同時 //''組合''// 各種效果。\n| 說明 | 原始寫法 | 輸出效果 |h\n|粗體 |{{{''粗體''}}} |''粗體'' |\n|斜體 |{{{//斜體//}}} |//斜體// |\n|底線 |{{{__底線__}}} |__底線__ |\n|定距字體,或稱「等寬」字體 |{{{{{{定距}}}}}} |{{{定距}}} |\n|下標字 |{{{H~~2~~O}}} |H~~2~~O |\n|上標字 |{{{y = x^^2^^ + 1}}} |y = x^^2^^ + 1 |\n|刪除線 |{{{--刪除線--}}} |--刪除線-- |\n|突顯|{{{@@突顯@@}}} |@@突顯@@ |\n|CSS語法|{{{@@color:green;綠色@@}}} |@@color:green;綠色@@|\n|~|{{{@@background-color:#ff0000;color:#ffffff;紅背景@@}}}|@@background-color:#ff0000;color:#ffffff;紅背景@@|\n|~|{{{@@text-shadow:black 3px 3px 8px;font-size:18pt;display:block;margin:1em 1em 1em 1em;border:1px solid black;任何CSS樣式@@}}}|@@text-shadow:black 3px 3px 8px;font-size:18pt;display:block;margin:1em 1em 1em 1em;border:1px solid black;任何CSS樣式@@|\n\n{{{\n另外也支援定距區段,可用來放source code。請編輯或檢視這個tiddler來觀看語法。\n}}}
有些[[巨集]]可以用日期格式字串當作參數。這個字串包含一般字外,有些特殊字元組合會以日期取代:\n* DDD -- 星期\n* DD 或 0DD -- 日\n* MMM 或 MM -- 月 (文字)\n* MM 或 0MM -- 月 (數字)\n* YYYY 或 YY -- 西元年\n* hh -- 時\n* mm -- 分\n* ss -- 秒
^^參考:http://www.tiddlywiki.com/#HowToUpgrade ^^\n\n更新 TiddlyWiki 版本的步驟:\n# 在 FireFox 開啟 TiddlyWiki 檔案,例如 "mystuff.html" 。\n# 確認有勾選儲存備份,萬一更新失敗可以還原。現在''儲存變更''。\n# 不要關閉 "mystuff.html" ,[[按滑鼠右鍵另存|下載]] http://www.tiddlywiki.com/empty.html ,覆蓋 "mystuff.html" 。\n# 再到剛剛在瀏覽器開啟的 "mystuff.html" 再次''儲存變更''。 It will inherit the newly saved code\n# 在瀏覽器重新載入來確認更新是否無誤。\n最有可能造成更新失敗的原因是您使用的[[外掛]]不相容,可以使用 [[TiddlyTools|http://www.tiddlytools.com/]] 的 [[ImportTiddlersPlugin|http://www.tiddlytools.com/#ImportTiddlersPlugin]] 來選擇性地輸入您的內容及 [[外掛]] 到新的空白 TiddlyWiki 。\n\n更新原理:引用 http://web.nlhs.tyc.edu.tw/~lss/wiki/TiddlyWikiTutorialTW.html#%E6%9B%B4%E6%96%B0%E7%9A%84%E5%8E%9F%E7%90%86\n\n<<<\nTiddlyWiki 在執行時,是把整個網頁檔案載入記憶體中執行。所以,當我們下載新版的 TiddlyWiki 並覆蓋舊版檔案時, TiddlyWiki 檔變成新版的程式而沒有任何的 Tiddler 。但是所有的 Tiddler 內容都還保留在記憶體中。此時,只要再做儲存變更便可以把記憶體裡的所有 Tiddler 內容再次寫回新版的 TiddlyWiki 檔案裡。\n<<<\n''儲存變更''只存tiddler部分???\n\n! 更新 tiddlyspot.com 的 TiddlyWiki 版本\n參考 tiddlyspot 的 FAQ [[Can I upload an existing TiddlyWiki to a tiddlyspot.com site?|http://faq.tiddlyspot.com/#%5B%5BCan%20I%20upload%20an%20existing%20TiddlyWiki%20to%20a%20tiddlyspot.com%20site%3F%5D%5D]]\n\n下載您在 tiddlyspot 的 TiddlyWiki ,經過上面所述的更新步驟,然後把 SideBarOptions 恢復成原先的 (或者說新增 upload 及 download 這兩項),在 [[tiddlyspotControls]] 或 [[Welcome to your tiddlyspot.com site!]] 填上您的密碼,最後 upload,就可以了。
次標頭的層次結構,此行以{{{!}}}為開頭,每多加一個{{{!}}}多一級:\n! 標頭層次第一級\n!! 標頭層次第二級\n!!! 標頭層次第三級\n!!!! 標頭層次第四級\n!!!!! 標頭層次第五級\n原始寫法如下:\n{{{\n! 標頭層次第一級\n!! 標頭層次第二級\n!!! 標頭層次第三級\n!!!! 標頭層次第四級\n!!!!! 標頭層次第五級\n}}}
#入門 -- [[TiddlyWiki使用教學中文版|http://web.nlhs.tyc.edu.tw/~lss/wiki/TiddlyWikiTutorialTW.html]] (v1.2.37),翻譯自 [[TiddlyWikiTutorial|http://www.blogjones.com/TiddlyWikiTutorial.html]]\n#官方網站 -- http://www.tiddlywiki.com/, [[doc|http://doc.tiddlywiki.org/]] 、 [[trac|http://trac.tiddlywiki.org/]]\n#語法 -- http://www.tiddlywiki.com/#formatting\n#~MilchFlasche's [["cc[T/Z]iddlyWiki"|http://milchflasche.byethost31.com/index.php?config=TiddlyZiddly]] (繁中)\n#~BramChen's [[PrinceTiddlyWiki|http://ptw.sourceforge.net/]] ([[繁中版|http://ptw.sourceforge.net/index-zh_TW.html]])\n#Tips 網站:[[TiddlyWikiTips|http://tiddlywikitips.com/]],[[zRenard's personal web notebook|http://www.zrenard.com/tiddlywiki/tiddlywiki.html]]\n#TiddlyWiki論壇 -- [[中文版|http://groups.google.com/group/PrinceTiddlyWiki]],[[英文版|http://groups.google.com/group/TiddlyWiki]] 、 [[TiddlyWikiDev|http://groups.google.com/group/TiddlyWikiDev]]。\n# 使用指南 -- [[TiddlyWiki Guides|http://tiddlywikiguides.org]]\n#http://mptw.tiddlyspot.com/\n#http://tiddlywiki.bidix.info/
^^修改自http://www.tiddlywiki.com/#Tables^^\n\n''例子:''\n|!標頭欄一二三四五|!標頭欄六七八九十|\n|>| 左右欄合併 |\n| 上下欄合併 |靠左|\n|~| 靠右|\n|bgcolor(#a0ffa0):加顏色| 置中 |\n|標題|c\n\n其原始寫法如下:\n{{{\n|!標頭欄一二三四五|!標頭欄六七八九十|\n|>| 左右欄合併 |\n| 上下欄合併 |靠左|\n|~| 靠右|\n|bgcolor(#a0ffa0):加顏色| 置中 |\n|標題|c\n}}}\n一行代表表格的一行,欄位以{{{|}}}分隔,標頭欄的文字前面加{{{!}}}。如要合併左右欄,左邊的欄位填{{{>}}}緊接前後的{{{|}}};要合併上下欄,則下面的欄位填{{{~}}}也是緊接前後的{{{|}}}。文字只要接著前面的{{{|}}}就會靠左,只接著後面的{{{|}}}會靠右,其它則置中。標題是以{{{|}}}圍起來,最後面加{{{c}}}。\n\n欄位可以加CSS描述。\n\n''另一個例子'' -- 請見 [[PeriodicTable|http://www.tiddlywiki.com/#PeriodicTable]] 。\nFor advanced effects, you can control the CSS style of a table by adding a row like this:\n{{{\n|cssClass|k\n}}}\n
*版面安排 -- 可以修改 PageTemplate 來改變,但考慮維護頁面的方便性,可以複製 PageTemplate 或新建一 tiddler 修改,並設標籤為"systemConfig"。預設版面主要分成四個部份:\n**標題區:包含主標題SiteTitle與副標題SiteSubtitle。\n**左側主選單MainMenu:這裡可以讓我們設定導覽整個網站的超連結。\n**中央內容區:所有的 Tiddler 都會出現在這一區。\n**右側 ~SideBar 區:包含SideBarOptions及SideBarTabs。
* [[文字格式]]\n* [[連結]] (Link)\n* [[貼圖]]\n* [[次標頭]] 的層次結構 (Subheading)\n* [[項目表]] (List)\n* [[表格]] (Table)\n* [[引述]] (Quote)\n* 水平線\n----\n原始寫法如下:\n{{{\n----\n}}}\n* 讓 WIKI 語法不解析的區段\nPlainText(v2.1.3以後) -- <nowiki></nowiki> 或 """ """\n* 語法的高亮度顯示\n* 在內容中嵌入 HTML 或 PHP 語法\n* <<slider TWVideo TWVideo 插入影片 "如何插入影片">>\n* [[巨集]] (Macro)
* 貼圖語法 -- {{{[img[說明文字|圖片][連結]]}}} ,其中 {{{說明文字|}}} 和 {{{[連結]}}}可有可無。當連結用時,目標可以是內部Tiddler、外部網站等等。\n* 圖檔位置變化 -- 靠左: {{{[<img[}}} ,靠右: {{{[>img[}}} 。\n*問題 -- 可以把圖片放進 TiddlyWiki 檔案裡面帶著走嗎?
基本格式是 {{{[[顯示文字|連結]]}}},其中 {{{顯示文字|}}} 可無,會直接顯示{{{連結}}}。連結的目標可以是:\n* 內部Tiddler -- 如果Tiddler名稱是WikiWord,{{{[[WikiWord]]}}} 可以直接以 {{{WikiWord}}} 取代。如要跳脫WikiWord,不讓它變成是連結,則用{{{~WikiWord}}}。\n* 外部網站 -- 通常以{{{http://}}}開頭,{{{[[http://外部網站]]}}} 可以直接以 {{{http://外部網站}}} 取代。\n* Interwiki (透過 Wiki 建立的資源連結)\n* Windows Shares 網路芳鄰分享的連結\n* 檔案夾\n** [[this link to a Windows network share|file://///server/share/folder/path/name]]\n** [[this link to a Windows drive-mapped folder|file:///c:/folder/path/name]]\n** [[this link to a Unix-style folder|file:///folder/path/name]].\n* 外部連結(v2.1.3以後) -- 如"skype:"、"outlook:"....等。
此站有關 TiddlyWiki 的資料主要參考 [[TiddlyWiki官方網站|http://www.tiddlywiki.com/]],還整理了一些中文網站的部份內容 -- [[中文版TiddlyWiki論壇|http://groups.google.com/group/PrinceTiddlyWiki]]、[[TiddlyWiki使用教學中文版|http://web.nlhs.tyc.edu.tw/~lss/wiki/TiddlyWikiTutorialTW.html]]、MilchFlasche's [[cc[T/Z]iddlyWiki|http://milchflasche.byethost31.com/index.php?config=TiddlyZiddly]]、BramChen's PrinceTiddlyWiki繁體中文版。有些剪輯資料理應附上原始連結或文字,此後改進。如仍有不妥之處,先說聲抱歉,還煩請告知,定速移除。 \n\n!本站歷史\n|''日期''|''記事''|h\n|Nov 16, 2006|更新至 TiddlyWiki v2.1.3|\n|Nov 8, 2006|開站|
隱藏頁面的標題區、左方主選單區、和右方側欄區。在 TiddlyTools 這些功能寫在inline JavaScript,需引入 InlineJavascriptPlugin 來自動執行 inline JavaScript。\n# 從 TiddlyTools 引入 InlineJavascriptPlugin,以及ToggleSiteTitles、ToggleLeftSidebar和ToggleRightSidebar。\n# 開啟ToggleSiteTitles、ToggleLeftSidebar或ToggleRightSidebar就可以做相關控制。\n#(optional) 引入 TiddlyTools的SiteStartup、或 SiteMenuOptions、或SiteMenuOptionsFull、或SitMenuOptionsLite,在裡面做控制。\n#(optional) 新增一個menu bar (如中央內容區上方) 顯示ToggleLeftSidebar和ToggleRightSidebar的控制 -- 參考 TiddlyTools的StoryMenu + StyleSheetShortcuts + StyleSheetAdjustments的作法,新增 DisplayBar,並放進PageTemplate中的messageArea與tiddlerDisplay之間。另外StyleSheet加上floatleft與floatright定義。\n#(optional) 其它相關\n| tiddler | 說明 |h\n|ToggleScrollingSidebars||\n|ToggleTopButton|新增固定在右下角的scroll-to-top按鍵|\n|ToggleSiteMenu|TiddlyTools新增在標題區下方的橫式選單(TiddlyTools的[[PageTemplate|http://www.tiddlytools.com/#PageTemplate]]及SiteMenu)|
* 這是項目表\n* 然而\n** 也可以用不同層次的項目表來表達\n* 另一種項目表\n*# 編號項目表\n*# 第二項\n*## 只要前面多加 "#-" 或 "*" ,就會內縮為更深(細微)的層次了。\n*# 其它\n原始寫法如下:\n{{{\n* 這是項目表\n* 然而\n** 也可以用不同層次的項目表來表達\n* 另一種項目表\n*# 編號項目表\n*# 第二項\n*## 只要前面多加 "#-" 或 "*" ,就會內縮為更深(細微)的層次了。\n*# 其它\n}}}