AJAX (Asynchronous JavaScript and XML) is a term describing a web development technique for creating interactive web applications and is made possible by modern browsers supporting the XMLHTTPRequest API.
//a macro that shows currently-active users (based on current locks)//\n//only works with ZiddlyWiki 2.0.0.9+//\n//To use: {{{<<activeUsers>>}}}//\n\n{{{\nconfig.macros.activeUsers = {\n handler: function(place,macroName,params) {\n createTiddlyElement(place,'div',null,'current-users-list','');\n ajax.get(getZiddlyURL(true)+"?action=get_locks", config.macros.activeUsers.update);\n setInterval('ajax.get(getZiddlyURL(true)+"?action=get_locks", config.macros.activeUsers.update)', 60000);\n },\n update: function(r) {\n var users = r.split('\sn');\n var elms = document.getElementsByTagName('div');\n for(var i=0; i<elms.length; i++) {\n if(elms[i].className=='current-users-list') {\n if(r=='') {\n elms[i].innerHTML = '<em>none</em>';\n } else {\n elms[i].innerHTML = '';\n for(var j=0; j<users.length; j++) {\n createTiddlyLink(createTiddlyElement(elms[i], 'div'), users[j], true);\n }\n }\n }\n }\n }\n};\n}}}
You can set up your ZW to allow random visitors to wreak havoc!\n\nAdd a property to your Zope instance called "zw_anon_edit". Make the property a boolean type and give it a value of "1".\n\nEdits made by not-logged-in people will be marked as edited by "Anonymous User".\n\nGood luck.
Starting with [[Version 2.0.2.1]], ZiddlyWiki now automatically queries the server for updated tiddlers every minute. This allows you to keep the page open without constantly refreshing to see if someone else has made changes. This, combined with TiddlerLocks, should encourage even more collaborative editing.\n\nThis feature actually //saves bandwidth//, because only new tiddler content is being sent back. The query sent every minute is very small, too. Thus, rather than a visitor constantly refreshing a 150KB+ web page, only tiddlers are sent across the wire. And in case someone leaves their browser window open on their always-connected PC at their summer home in Iceland, the feature turns itself off after thirty minutes.
//''Adds "comments" to any TiddlyWiki or adaptation.''//\n//To use, copy this tiddler's contents to a new tiddler on your site and tag it "systemConfig".//\n//Used in conjunction with the RecentPlugin, one can have a decent forum environment.//\n{{{\nconfig.CommentPlugin = {\n only_on_tags: [],\n not_on_tags: ['about'],\n // "true" or "false"...\n fold_comments: true,\n default_fold: false\n};\n\nfunction in_array(item, arr){for(var i=0;i<arr.length;i++)if(item==arr[i])return true};\nfunction one_in_array(items, arr){for(var i=0;i<items.length;i++)if(in_array(items[i], arr))return true;return false};\nfunction get_parent(tiddler){while(in_array('comments', tiddler.tags)) tiddler=store.fetchTiddler(tiddler.tags[0]);return tiddler};\nfunction count_comments(tiddler){var tagged=store.getTaggedTiddlers(tiddler.title);var count=0;for(var i=0;i<tagged.length;i++)if(in_array('comments', tagged[i].tags)){count++;count+=count_comments(tagged[i])}return count};\nconfig.shadowTiddlers.ViewTemplate += "\sn<div class='comments' macro='comments'></div>";\nconfig.shadowTiddlers.StyleSheetLayout += '\sn.commentTags ul{list-style:none; padding-left:0px;margin: 0 0 3px 0;} .commentTags li{display:inline;color:#999;} .commentTags li a.button{color:#999;} .comment{border-left:1px solid #ccc; margin-top:10px; margin-left:10px; padding:5px;} .newCommentLink{padding-top:10px} .tagging, .selected .tagging, .tiddler .tagging{display:none;} .comment a.button{padding:0px; font-size:smaller;}';\nconfig.macros.newCommentLink = {\n label: 'New Comment Here...',\n prompt: 'Create a new comment tiddler associated with this tiddler',\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler && store.tiddlerExists(tiddler.title) && !readOnly && (!window.zw || zw.loggedIn || zw.anonEdit)) {\n if(config.CommentPlugin.only_on_tags.length>0 && !one_in_array(tiddler.tags, config.CommentPlugin.only_on_tags)) return;\n if(config.CommentPlugin.not_on_tags.length>0 && one_in_array(tiddler.tags, config.CommentPlugin.not_on_tags)) return;\n var onclick = function(e) {\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n if(tiddler.title.indexOf(' Comment ')>-1) var title = tiddler.title.split(' Comment ')[0];\n else var title = tiddler.title;\n var title = title + ' Comment ' + (new Date()).formatString('YYYY-0MM-0DD 0hh:0mm:0ss');\n var comment = store.createTiddler(title);\n comment.text = '';\n comment.tags = [tiddler.title, 'comments', 'excludeLists'];\n story.displayTiddler(theTarget, title, DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(title,"text");\n return false;\n }\n createTiddlyButton(place, this.label, this.prompt, onclick);\n }\n }\n};\nconfig.macros.comments = {\n dateFormat: 'DD MMM YYYY hh:0mm',\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler.title=='comments') return;\n var comments = store.getTaggedTiddlers(tiddler.title, 'created');\n if(comments.length>0 && !in_array('comments', tiddler.tags) && config.CommentPlugin.fold_comments) {\n var show = createTiddlyElement(place, 'p');\n show.innerHTML = '<a href="#" onclick="var e=document.getElementById(\s'comments'+tiddler.title+'\s');e.style.display=e.style.display==\s'block\s'?\s'none\s':\s'block\s';return false;">Comments ('+count_comments(tiddler)+') »</a>';\n }\n var place = createTiddlyElement(place, 'div', 'comments'+tiddler.title, 'comments');\n if(comments.length>0 && !in_array('comments', tiddler.tags) && config.CommentPlugin.fold_comments && config.CommentPlugin.default_fold)\n place.style.display = 'none';\n else\n place.style.display = 'block';\n for(var i=0; i<comments.length; i++) {\n if(!in_array('comments', comments[i].tags))continue;\n var container = createTiddlyElement(place, 'div', null, 'comment');\n var title = createTiddlyElement(container, 'strong');\n var link = createTiddlyLink(title, comments[i].modifier, true);\n createTiddlyElement(title, 'span', null, null, ', '+comments[i].created.formatString(this.dateFormat));\n if(comments[i].modifier == config.options.txtUserName) {\n createTiddlyElement(title, 'span', null, null, ' (');\n var edit = createTiddlyLink(title, comments[i].title);\n edit.innerHTML = 'edit';\n createTiddlyElement(title, 'span', null, null, ')');\n }\n createTiddlyElement(container, 'br');\n config.macros.tiddler.handler(container, null, [comments[i].title]);\n createTiddlyElement(container, 'br');\n config.macros.comments.handler(container,null,null,null,null,comments[i]);\n }\n config.macros.newCommentLink.handler(place,null,null,null,null,tiddler);\n }\n};\nvar CPCloseTiddlers = [];\nTiddlyWiki.prototype.CommentPlugin_saveTiddler = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n var t = this.CommentPlugin_saveTiddler(title,newTitle,newBody,modifier,modified,tags);\n var tags = tags.split(/\ss+/g);\n if(in_array('comments', tags)) {\n var original = config.CommentPlugin.default_fold;\n config.CommentPlugin.default_fold = false;\n story.refreshTiddler(get_parent(t).title, DEFAULT_VIEW_TEMPLATE, true);\n config.CommentPlugin.default_fold = original;\n CPCloseTiddlers.push(newTitle);\n setTimeout("story.closeTiddler(CPCloseTiddlers.pop(), true)", 1000);\n }\n return t;\n};\n}}}
//''Breaks the Timeline tab into "Tiddlers" and "Comments".''//\n//Makes sense with the CommentPlugin.//\n\n{{{\nfunction in_array(item, arr){for(var i=0;i<arr.length;i++)if(item==arr[i])return true};\nfunction get_parent(tiddler){while(tiddler && in_array('comments', tiddler.tags)) tiddler=store.fetchTiddler(tiddler.tags[0]);return tiddler};\n\nconfig.options.txtTimelineTab = 'timelineTab'; // huh?\nconfig.shadowTiddlers.TabTimelineTiddlers = config.shadowTiddlers.TabTimeline;\nconfig.shadowTiddlers.TabTimeline = "<<tabs txtTimelineTab Tiddlers Tiddlers TabTimelineTiddlers Comments Comments TabTimelineComments>>";\nconfig.shadowTiddlers.TabTimelineComments = "<<tiddlerComments>>";\n\nconfig.macros.tiddlerComments = {\n dateFormat: 'DD MMM YYYY',\n handler: function(place,macroName,params)\n {\n var field = params[0] ? params[0] : "modified";\n var comments = store.reverseLookup("tags","comments",true,field);\n var lastDay = "";\n for (var c=comments.length-1; c>=0; c--)\n {\n if(comments[c].tags.length == 0) continue;\n var tiddler = get_parent(comments[c]);\n if(!tiddler) continue;\n var theDay = comments[c][field].convertToYYYYMMDDHHMM().substr(0,8);\n if(theDay != lastDay)\n {\n var theDateList = document.createElement("ul");\n place.appendChild(theDateList);\n createTiddlyElement(theDateList,"li",null,"listTitle",comments[c][field].formatString(this.dateFormat));\n lastDay = theDay;\n }\n var theDateListItem = createTiddlyElement(theDateList,"li",null,"listLink",null);\n var link = createTiddlyLink(place,comments[c].title);\n link.innerHTML = comments[c].modifier + ' on ' + tiddler.title;\n link.setAttribute("tiddlyLink",tiddler.title);\n theDateListItem.appendChild(link);\n }\n }\n};\n}}}
To use fancy cookie-based authentication like this site does, download [[this file|/versions/cookie_auth.zexp]] and stick it in your root. You'll need to tweak it a bit to make it look like you want it.
//adds a "copy" option to duplicate a tiddler//\n\n{{{\nconfig.shadowTiddlers.EditTemplate = "<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler copyTiddler deleteTiddler'></div>\sn<div class='title' macro='view title'></div>\sn<div class='editor' macro='edit title'></div>\sn<div class='editor' macro='edit text'></div>\sn<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>";\n\nconfig.commands.copyTiddler = {\n text: 'copy',\n tooltip: 'Make a copy of this tiddler',\n handler: function(event,src,title) {\n story.displayTiddler(null,title,DEFAULT_VIEW_TEMPLATE);\n var tiddler = store.fetchTiddler(title);\n var newTitle = 'Copy of ' + title;\n var newTiddler = store.createTiddler(newTitle);\n newTiddler.text = tiddler.text;\n newTiddler.tags = tiddler.tags;\n story.displayTiddler(null,newTitle,DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(newTitle,"title");\n return false;\n }\n};\n}}}
It's easy to copy/move tiddlers from one ZiddlyWiki instance to another:\n\n# Open up the ZopeManagementInterface.\n# Navigate to the ZiddlyWiki instance with the tiddler you want to copy/move. Open up the ''tiddlers'' folder there.\n# Find the tiddler, select the checkbox next to it, and click ''Copy'' or ''Cut''.\n# Navigate to the destination ''tiddlers'' folder.\n# Click ''Paste''.
''If you just want to play around with ZiddlyWiki, visit the [[Sandbox|/sandbox]].''\n\nYou don't need to create a login to GetYourOwn.\n\nTo edit tiddlers on this site, first create a login by clicking the link below and filling out the form.\n\n''[[Sign Up.|/cookie_auth/signup]]''
You can include your own StyleSheets in your ZiddlyWiki by specifying the location in your {{{index_html}}} script. For example:\n{{{\nreturn container.ZiddlyWiki.ziddly(root=container, css=['mystyles/mystyle1.css', 'mystyles/mystyle2.css'])\n}}}
You can include your own JavaScript in your ZiddlyWiki by specifying the location in your {{{index_html}}} script. For example:\n{{{\nreturn container.ZiddlyWiki.ziddly(root=container, js=['myscripts/myscript1.js', 'myscripts/myscript2.js'])\n}}}
ZiddlyWiki\nNews\nMajorFeatures
Here's a handy bookmarklet that resets a TiddlyWiki or adaptation (ZiddlyWiki) to show its DefaultTiddlers so you don't have to refresh the page.\n\nDrag this to your browser's toolbar: [[DefaultTiddlers|javascript:story.closeAllTiddlers();void(story.displayTiddlers(null,window.get_recent_tiddlers?get_recent_tiddlers():store.getTiddlerText(%22DefaultTiddlers%22).readBracketedList()))]]
Especially when there are multiple authors on a ZW, not everyone has a sense of what can be linked-to. If the ZW or TW is structured around WikiWords, people can just use WikiWords "just in case" there's a link out there, or a link will be made down the road. But not everyone is compulsively habituated to use WikiWords, and some of us don't use them for more aesthetic reasons.\n\nSo: what you can do is to use the [[RedirectMacro|http://checkettsweb.com/styles/themes.htm#%5B%5BRedirect%20Macro%5D%5D]] to make links to important tiddlers appear even in the posts of people who don't think to make a link. Better yet, you can use [[ForEachTiddler|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin]] to set up RedirectMacro calls for the names of *all* tiddlers which have a certain tag. So, if you have tiddlers defining some key terms, and they're all tagged {{{definitions}}}, then you put the following in your MainMenu:\n{{{\n<<forEachTiddler\n where\n 'tiddler.tags.containsAny([["definitions"]])'\n write\n '"<<redirect \s""+tiddler.title+"\s" [["+tiddler.title+"]]$))\sn"'>>\n}}}
http://freezope.org\n\nFreeZope gives away free 5MB hosting accounts. It takes a day or two to be approved (a real person checks new accounts).\n\nCheck out the InstallScript to get ZW on your FZ!
!Free\n\nFor an absolutely free and mostly painless ZiddlyWiki, get an account at FreeZope and use the InstallScript.\n\n!On Your Own Server or Paid Hosting\n\n# GetZope.\n# [[Download ZiddlyWiki|/download]].\n# ImportZiddlyWiki. (Or UpgradeZiddlyWiki)\n# Copy the {{{ZiddlyWiki/index_html}}} script to the location where you want your ZW (probably the root).\n\nThat's it! Now point your web browser to your site and start creating tiddlers.\n----\nOptionally, you can also:\n* Make MultipleZWs (or rename your ZW)\n* HideYourZW
If you don't mind forking over a few bucks each month, paid [[Zope]] hosting by [[Zettai|http://zettai.net]] won't dissapoint. If you have a server and don't mind installing [[Zope]], read on...\n\n''Windows''\nHead over to [[zope.org|http://www.zope.org/Products/Zope]], download the Windows binary (exe) of Zope 2.x, and run it.\n\n''Linux''\nChances are good you can download, install and configure [[Zope]] 2.x with a few clicks using the native packaging software for your distribution. And there's always the install-from-source option; see [[zope.org|http://zope.org]] for that.\n\n''Mac''\n???\n\n----\n''Note:'' ZiddlyWiki is not a Zope 3.x product.
To hide your ZiddlyWiki from web surfers and require visitors to log in to view it, go to the ''Security'' tab of your index_html script, scroll down to the ''View'' permission, uncheck ''Acquire'', and check ''Authenticated''. Then click ''Save Changes''.
http://imageshack.us\n\nA free image host. Great for creating portable TW styles without making people copy images.
ZiddlyWiki can be exported to and imported from a TiddlyWiki file.\n\nTo export a ZW site, click the ''save to file'' link on the sidebar. You will be prompted to save the file locally.\n\nTo import a TiddlyWiki file into your ZW site, you must be logged in. Once logged in, click the ''update from file'' link on the sidebar. Browse for the file on your local computer. If you want ZW to delete tiddlers that exist on the server but not in the TW file, check the box labeled "Delete missing content." Now click the ''Import'' button.
//This tiddler refers to the process of installing ZiddlyWiki; if you want to import a file into your ZW, check out ImportAndExport.//\n\n# Stick the downloaded file in your Zope server's ''import'' directory. On Windows, this might be something like {{{C:\sProgram Files\sZope\sdata\simport}}}.\n# Log into the ZopeManagementInterface, click the ''Import/Export'' button, and at the bottom find the ZiddlyWiki file you downloaded.\n# Click ''Import''.\n\n''Note:'' FreeZope doesn't allow import; you must use the InstallScript.
Before you open up your Gmail account and shoot TimMorgan an email, please consider the benefits of [[CreatingALogin|CreateALogin]] and adding your content to this site or the [[ZiddlyWikiForum|http://ziddlywiki.com/forum]]. Bugs and discussions should go in the forum, while solid tricks and how-tos should go on this site.\n\nIf you're confused, just post your stuff to the forum. Someone will straighten it out.
[[See a video of it in use.|http://ia300105.us.archive.org/3/items/TimMorganZWInstallScript/ZWInstall.wmv]]\n\nTo use the installer:\n# [[Get the code|/ZiddlyWiki/create_installer]] and ''copy'' it.\n# Log into the ZopeManagementInterface.\n# If you have an object called "index_html", rename it or delete it.\n# Create a new "Script (Python)" object (name it "install" or something similar).\n# Delete the default stuff and ''paste''.\n# ''Save.''\n# Click the ''Test'' tab.\n\nThat's it! View your new site's URL and get busy setting up your ZiddlyWiki.\n----\nIf you want to upgrade using the InstallScript, delete the "~ZiddlyWiki" folder and start with step 1 above.
Jeremy Ruston is the genius who created TiddlyWiki, the SelfContained ClientSide wiki system written in ~JavaScript, CSS, and HTML.\n\nhttp://osmosoft.com/
{{{\n// allows one to get a list of tiddlers with <<list tag tagname>>\n// <<list tag tagname ExcludeTiddler>> will exclude named tiddler\n// <<list tag tag1+tag2+tag3>> will list tiddlers with all 3 tags\n// <<list tag tag1-tag2>> will list tag1 tiddlers without tag2\nconfig.macros.list.tag = {\n handler: function(params) {\n var tags=params[1].split(/[\s+\s-]/);\n var t=[];\n for(var i=0;i<tags.length;i++)\n t.push(store.reverseLookup("tags",tags[i],true,"title"));\n while(t.length>1){\n var i=params[1].indexOf('-')>-1 ? subtract(t[0],t[1]) : intersect(t[0],t[1]);\n if(t.length>2)t=[i].concat(t.slice(2));\n else t=[i];\n }\n var list=[];\n var t=t[0];\n for(var i=0;i<t.length;i++)\n if(!params[2]||t[i].title!=params[2]) list.push(t[i]);\n return list;\n }\n}\nfunction intersect(set1,set2) {\n var set=[];\n for(var i=0;i<set1.length;i++)\n for(var j=0;j<set2.length;j++)\n if(set1[i]==set2[j])\n set.push(set1[i]);\n return set;\n};\nfunction subtract(set1,set2) {\n var set=[];\n for(var i=0;i<set1.length;i++) {\n var f=false;\n for(var j=0;j<set2.length;j++)\n if(set1[i]==set2[j])f=true;\n if(!f)set.push(set1[i]);\n }\n return set;\n};\n}}}
Because of limitations of basic HTTP auth, logging out programmatically is very very ugly and would confuse ZW users. To log out, just quit your web browser.\n\nIf you must have a logout link on your ZiddlyWiki, go to http://yourdomain.com/ZiddlyWiki/#SideBarOptions, click ''edit'', add the following code to the end, and click ''done''. But be warned; it's not pretty!\n\n{{{\n<<logout>>\n}}}\n\nDiscussion: http://ziddlywiki.com/forum/#LogoutLink
ZiddlyWiki\n[[News]]\nGetYourOwn\nCreateALogin\n\n[[Forum|/forum]]\n[[Sandbox|/sandbox]]\n\nHosted by [[Zettai|http://zettai.net]]
* [[Zope]] provides the ServerSide architecture for storing tiddler content and constructing the TiddlyWiki frontend for the client. And with FreeZope, even cheapskates can have their own ZiddlyWiki!\n* ZopeAuthentication is used to track and restrict wiki content modifications.\n* ZopeRevisions store old tiddler versions, and ZW makes use of this feature to provide TiddlerRevisions.\n* [[AJAX]] is used for all after-page-load communication with the server.\n* TiddlerLocks prevent several people from editing the same tiddler at the same time.\n* AutoRefresh keeps the page up-to-date without requiring a reload.\n* ImportAndExport allows you to take your ZW offline wherever you go. Even better, you don't have to commit to ZW -- take your data with you when you're done!\n* MultipleZWs allow you to have many sites without the hassle of uploading ZW multiple times and maintaining each one.\n\nRead about the rest of ZW's <<tag features>>.
It's probably not a bad idea to occasionally make a copy of your "tiddlers" folder in case something goes horribly wrong.\n\n<<tiddler TiddlerBackup>>
Tiddlers tagged as "private" (see PrivateTiddlers) won't show up until someone logs on. It turns out that these tiddlers can be hidden within other tiddlers using the [[Tiddler Insertion Technique|http://www.tiddlywiki.com/#Macros]], and the content of the private tiddler will "pop up" on login. This can also be used to add additional info for editors within any other relevant Tiddler, including the MainMenu. The result can be a fairly different interface for edit-role visitors compared to visitors just browsing...\n\nSee how this tiddler behaves differently before and after logging in!\n\n<<tiddler PrivateLoginMessage>>
The "index_html" script is magic. You can put it in any folder and call it whatever you want, and it will be its own ZiddlyWiki. Copy it to a folder called "resume", and you have a separate ZW for your resume!\n\nZW gets its tiddlers from the first "tiddlers" folder it finds. This is easiest to explain with an example... Pretend this is the folder structure of your [[Zope]] instance:\n\n{{{\nmyzw.com:\n/\n ZiddlyWiki/\n tiddlers/\n index_html\n resume/\n tiddlers/\n index_html\n another_zw/\n index_html\n}}}\n\nThis instance has three ZiddlyWiki instances because this user copied the "index_html" script to three different locations. But notice the "tiddlers" folders that are present. In this scenario, {{{myzw.com}}} is a ZW, and so is {{{myzw.com/resume}}}. Each have their own "tiddlers" folder. However, {{{myzw.com/another_zw}}} doesn't have its own "tiddlers" folder, so it uses the first one it sees, which is the one in the root. Both {{{myzw.com}}} and {{{myzw.com/another_zw}}} will have exactly the same tiddlers. Making changes on one ZW will make changes on the other.\n\nThis long-winded example is to illustrate the need to create "tiddlers" folders where you need them. Whew!
[[Version 2.0.10.1]] has been released.\n\nThanks to Jeremy and the other TiddlyWiki folks, ZW has gotten a lot of goodies for free lately. If you haven't tried ZW lately, you're definitely missing out.
Piši briši čćšžđČĆŽĐŠ
http://objectis.org\n\nObjectis used to give away free 10MB [[Zope]] accounts, but have recently discontinued their free service with little or no explanation. Their server(s) have been unreliable in the last few days, so we recommend ZW users stay away until they show signs of improvement. ''If you're already using Objectis, export your data to be on the safe side.''
Now you can mark certain tiddlers as "private", causing them to only appear if you're logged in. To do so, add the "private" tag to your tiddler.\n\nWarning: ''Crafty people who know the name of your private tiddler can get to its content by going to the right URL.'' You probably shouldn't be putting your credit card number in a tiddler anyway.
ZiddlyWiki sports "protected tiddlers", which are tiddlers only the author or an administrators can edit. By default, the following tiddlers are protected:\n\nJust add the "protected" tag to a tiddler you want to keep others from messing with.
//''Shows DefaultTiddlers + most recently modified tiddlers as default when any TiddlyWiki or adaptation is first loaded.''//\n//To use, copy this tiddler's contents to a new tiddler on your site and tag it "systemConfig".//\n\n{{{\nvar num = 15;\nvar ignore_tags = ['systemConfig', 'systemTiddlers'];\n\nfunction in_array(item, arr){for(var i=0;i<arr.length;i++)if(item==arr[i])return true};\nfunction get_parent(tiddler){while(tiddler && in_array('comments', tiddler.tags)) tiddler=store.fetchTiddler(tiddler.tags[0]);return tiddler};\nfunction unique_list(list){var l=[];for(i=0;i<list.length;i++)if(!in_array(list[i], l))l.push(list[i]);return l};\nfunction get_recent_tiddlers(){\n var tiddlers = store.getTiddlers('modified');\n var names = store.getTiddlerText("DefaultTiddlers").readBracketedList();\n var ignore_tiddlers = [];\n for(var i=0; i<ignore_tags.length; i++)\n ignore_tiddlers=ignore_tiddlers.concat(store.getTaggedTiddlers(ignore_tags[i]));\n for(var i=tiddlers.length-1; i>=0; i--) {\n if(in_array('comments', tiddlers[i].tags)) {\n var t = get_parent(tiddlers[i]);\n if(t)names.push(t.title)\n }\n else if(!in_array(tiddlers[i], ignore_tiddlers))\n names.push(tiddlers[i].title);\n }\n return unique_list(names).slice(0, num);\n}\nvar names = get_recent_tiddlers();\n_restart = restart\nrestart = function() {\n if(window.location.hash) _restart();\n else story.displayTiddlers(null,names);\n}\n}}}
To get back a tiddler that's been deleted, link to it and create it as you normally would (give it the same name as before). Now click the ''revisions'' toolbar link and go back one revision.\n\nTiddlers aren't really deleted -- they're only tagged as "deleted". This makes it very easy to recover lost tiddlers.
Rails is an open source Ruby framework for developing database-backed web applications.\n\nhttp://rubyonrails.com
ZiddlyWiki saves its changes in real-time, after each tiddler edit.\n\nIf you want to reuse this site, you can GetYourOwn.
TiddlyWiki + RubyOnRails + Hosting Service\n\nhttp://serversidewiki.com
a TiddlyWiki hack by TimMorgan
ZiddlyWiki
Tags that have special meaning to TiddlyWiki/ZiddlyWiki:\n\n''private''\nOnly allows tiddler to be seen by logged-in users.\n\n''protected''\nOnly editable by its author or an administrator.\n\n''onlyAdmin''\nOnly allows tiddler to be seen by users with the "Manager" role. This is useful for testing out macros/plugins prior to release.\n\n''deleted''\nDeleted tiddlers are tagged with this tag rather than actually being deleted. "Deleted" tiddlers remain in the [[Zope]] object database, but don't get transfered to the client.\n\n''systemConfig''\nExecutes the tiddler body as JavaScript code. This is utilized to create macros and plugins.
web & wiki Geek\nLocation: Hamburg (Germany)\n[[more info|http://www.sven-tissot.de/wiki/SvenTissot]]\nmail: //prename// at //surname// dot de
An administrator can make a quick backup of all a ZW's tiddlers by appending {{{?action=backup}}} to the ZW url.\n\nFor instance, browsing to {{{http://mysite.com/mywiki/?action=backup}}} while logged in as an administrator (manager) will make a copy of the "tiddlers" folder and name it "backup".
An administrator can permanently get rid of "deleted" tiddlers in the "tiddlers" folder by appending {{{?action=cleanup}}} to the ZW url.\n\nFor instance, browsing to {{{http://mysite.com/mywiki/?action=cleanup}}} while logged in as an administrator (manager) will delete tiddlers tagged as "deleted".
Starting with [[Version 2.0.0.5]], tiddlers are "locked" for five minutes when the "edit" button is clicked. This prevents other users (or the same user in another browser) from editing the same tiddler at the same time. When the "cancel" or "done" button is clicked, the lock is released immediately. The lock expiration time can be changed by adding an integer property to your Zope instance called "zw_lock_minutes" with the number of your choice.
To view an older tiddler revision, click the tiddler toolbar item labeled "revisions". You will see a popup menu with a list of the last 30 revisions of the tiddler. Click a revision date to view the content.\n\nTo revert a tiddler to an old revision, choose the revision date from the popup menu, then click ''edit'', then ''done''.
TiddlyWiki is a complete ClientSide [[Wiki]] system contained in a single HTML file created by JeremyRuston. JavaScript is used to store, retrieve, edit, and delete wiki content, and no ServerSide is required.\n\nhttp://tiddlywiki.com
Tim is the hacker behind ZiddlyWiki and some other [[neat projects|http://timmorgan.org/wiki/Projects]] (some are even original). Find out more at http://timmorgan.org.\n\nEmail: [first name]@timmorgan.org\n\nBefore you send me an email, please consider [[ImprovingThisSite|ImproveThisSite]].
//plugin to pretty up the timeline dates//\n\n{{{\nvar today = 'Today';\nvar yesterday = 'Yesterday';\n\nconfig.macros.timeline.dateFormat = '!DD MMM YYYY';\nDate.prototype._formatString = Date.prototype.formatString;\nDate.prototype.formatString = function(template) {\n if(template.match(/^!/)) {\n var repr = this._formatString('YYYYMMDD');\n var day = new Date();\n if(repr == day._formatString('YYYYMMDD'))\n return today;\n day.setDate(day.getDate()-1);\n if(repr == day._formatString('YYYYMMDD'))\n return yesterday;\n for(var i=0; i<3; i++) {\n day.setDate(day.getDate()-1);\n if(repr == day._formatString('YYYYMMDD'))\n return config.messages.dates.days[this.getDay()];\n }\n }\n template = template.replace(/^!/, '');\n return this._formatString(template);\n}\n}}}
# Make sure your "tiddlers" folder is ''not'' inside your "~ZiddlyWiki" folder. If it is, get it out of there!\n# ''Delete'' the "~ZiddlyWiki" folder.\n# ImportZiddlyWiki.
Based on TiddlyWiki 1.2.36; last version with skins.\n\n[[Download here.|http://ziddlywiki.com/old/ZiddlyWiki-1.2.36.zexp]]
Based on TiddlyWiki 1.2.39 (beta 1)\n\n[[Download here.|/versions/1.2.39(b1).3.zexp]]\n\nMajor Changes:\n* Removed all skins (more about that [[here|http://ziddlywiki.com/forum/#NewZWDirection]]).\n* Removed all images.\n* Versions are back.
Based on TiddlyWiki 1.2.39 (beta 1)\n\n[[Download here.|/versions/1.2.39(b1).4.zexp]]\n\nMajor Changes:\n* Fixed bug preventing creation of a tiddler with a title that contained no ASCII characters.
Based on TiddlyWiki 1.2.39 (beta 1)\n\n[[Download here.|/versions/1.2.39(b1).5.zexp]]\n\nMajor Changes:\n* Fixed bug in modified date when ZiddlyWiki was inside a Plone site.
Based on TiddlyWiki 1.2.39 (final)\n\n[[Download here.|/versions/1.2.39.1.zexp]]\n\nMajor Changes:\n//none//
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.1.zexp]]\n\nMajor Changes:\n//none//
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.10.zexp]]\n\nMajor Changes:\n* fixed XML feed by html quoting characters in tiddler titles
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.11.zexp]]\n\nMajor Changes:\n* fixed another _inplacevar_ error experienced with at least one version of Zope (caused by using += in Python scripts)\n* made unlock action fail more gracefully when a tiddler doesn't exist
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.12.zexp]]\n\nMajor Changes:\n* improved automatic addition of "created" date on existing tiddlers
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.2.zexp]]\n\nMajor Changes:\n* Hacked out automatic [[Zope]] <base> tag to fix IE's stylesheet problems.
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.3.zexp]]\n\nMajor Changes:\n* Fixed improperly translated \sn when viewing older revisions.
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.4.zexp]]\n\nMajor Changes:\n* Fixed broken XML and YAML formats.
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.5.zexp]]\n\nMajor Changes:\n* Added TiddlerLocks mechanism to prevent simultaneous edits. May be a bit buggy in certain circumstances, but should be ready for a real ZW release (finally!).\n* When editing a tiddler, the server is queried for the most recent version to prevent edits being done on an old version.
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.6.zexp]]\n\nMajor Changes:\n* Enhanced just-added feature to allow for editing of an older tiddler revision.\n* Cleaned up revisions list by removing half of the junk created by the new TiddlerLocks feature. Will take some thinking to get rid of the other half...
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.7.zexp]]\n\nMajor Changes:\n* Removed the other half of the bogus revisions from the list.\n* Added cleanup code to add "modifed" date to all old-style tiddlers. This should fix quirk whereas an almost-edited tiddler will show up as having a newer "modified" date (happened on the ZiddlyWikiForum).
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.8.zexp]]\n\nMajor Changes:\n* Fixed "global name '_inplacevar_' is not defined" error with newer versions of [[Zope]].
Based on TiddlyWiki 2.0.0\n\n[[Download here.|/versions/2.0.0.9.zexp]]\n\nMajor Changes:\n* added "get_locks" action used by new ~ZW-only ActiveUsersMacro
Based on TiddlyWiki 2.0.10\n\n[[Download here.|/versions/2.0.10.1.zexp]]
Based on TiddlyWiki 2.0.2\n\n[[Download here.|/versions/2.0.2.1.zexp]]\n\nMajor Changes:\n* introduced AutoRefresh\n** needs some improvement for handling renamed and deleted tiddlers\n* fixed login macro to properly link to logged-in user\n* removed brackets from title bar\n** still won't properly wikify text though\n* fixed import on new tiddlers\n** has been broken for awhile now I think\n* changed labels on import and export to more clearly state their purpose\n** can be changed by modifying config.messages.exportLinkLabel and config.messages.importLinkLabel\n* fixed unlocking of renamed tiddlers\n* added status message to show delay when locking a tiddler for edit\n* removed auto-creation of system tiddlers - shadow tiddlers are now used instead
Based on TiddlyWiki 2.0.2\n\n[[Download here.|/versions/2.0.2.2.zexp]]\n\nMajor Changes:\n* made AutoRefresh fail more gracefully on malformed requests (but where are they coming from?)\n* added new actions for administrators:\n** TiddlerCleanup\n** TiddlerBackup
Based on TiddlyWiki 2.0.2\n\n[[Download here.|/versions/2.0.2.3.zexp]]\n\nMajor Changes:\n* made it possible to edit anyway if a tiddler is locked by you (by accident or in another browser)
Based on TiddlyWiki 2.0.2\n\n[[Download here.|/versions/2.0.2.4.zexp]]\n\nMajor Changes:\n* fixed order of tiddler properties when exported
Based on TiddlyWiki 2.0.3\n\n[[Download here.|/versions/2.0.3.1.zexp]]\n\nMajor Changes:\n* moved much of the ZW-specific code into a "zw" object to prevent namespace collisions\n** still a bit more to do, but already much better separated than it was\n* fixed revisions on renamed tiddlers\n* improved appearance of AJAX status message in the corner\n* fixed error occuring while creating a new tiddler to overwrite an existing one\n* improved ProtectedTiddlers by adding "protected" [[SpecialTag|SpecialTags]]\n* made tiddler source available to anonymous users\n* made protected tiddler source available to non-admins\n
Based on TiddlyWiki 2.0.3\n\n[[Download here.|/versions/2.0.3.2.zexp]]\n\nMajor Changes:\n* Fixed bug with MinorChanges (shift-done).\n* Made protected tiddlers protect non-admins, too. Only the creator or an admin can now modify a [[ProtectedTiddler|ProtectedTiddlers]].
Based on TiddlyWiki 2.0.6\n\n[[Download here.|/versions/2.0.6.1.zexp]]\n\nMajor Changes:\n* Fixed tiddler name collisions.\n** Existing tiddlers will be renamed for a seamless upgrade.\n* Fixed bug retrieving, deleting, and saving certain tiddlers (URL wasn't being encoded properly for some tiddler titles).\n* Added CustomJS and CustomCSS feature to ''ziddly'' script.\n* Curly quotes and such are replaced with their simpler counterparts to prevent Safari lockup.
Based on TiddlyWiki 2.0.6\n\n[[Download here.|/versions/2.0.6.2.zexp]]\n\nMajor Changes:\n* Fixed bug in curly quote replacement (only the first instance of each character was being replaced).\n* Fixed bug preventing the use of quotes in tiddler titles.
<<list tag versions>>
A [[Wiki]] is a type of website that allows users to easily add and edit content and is especially suited for collaborative authoring.\n\nhttp://en.wikipedia.org/wiki/Wiki
//Style Sheet for TW 2.0.0+ and adapations.//\n//Images are hosted at ImageShack.//\n//To use, just copy this tiddler and tag it systemConfig in your TW.//\n//''This is a work in progress; expect to see it improve with time.''//\n\n{{{\nimg_bg = 'http://img328.imageshack.us/img328/9691/bg0fu.gif';\nimg_bg2 = 'http://img425.imageshack.us/img425/5238/bg21hi.gif';\nimg_bgs = 'http://img425.imageshack.us/img425/5997/bgs5hf.gif';\nvar img_ref = 'http://img159.imageshack.us/img159/1260/references1ca.gif';\nvar img_copy = 'http://img234.imageshack.us/img234/8866/copy0au.gif';\nvar img_jump = 'http://img234.imageshack.us/img234/7558/jump2sg.gif';\nvar img_del = 'http://img234.imageshack.us/img234/9875/delete0lm.gif';\nvar img_close = 'http://img234.imageshack.us/img234/1415/close7og.gif';\nvar img_edit = 'http://img234.imageshack.us/img234/775/edit8vi.gif';\nvar img_rev = 'http://img234.imageshack.us/img234/9517/history2ed.gif';\nvar img_perm = 'http://img234.imageshack.us/img234/5416/permalink6by.gif';\nvar img_save = 'http://img234.imageshack.us/img234/5746/save7ux.gif';\nvar img_cancel = 'http://img234.imageshack.us/img234/827/cancel2mv.gif';\nvar img_close_others = 'http://img234.imageshack.us/img234/7136/closeothers9lt.gif';\n\n// improved to handle images\n_createTiddlyButton = createTiddlyButton;\ncreateTiddlyButton = function(theParent,theText,theTooltip,theAction,theClass,theId,theAccessKey) {\n var button = _createTiddlyButton(theParent,theText,theTooltip,theAction,theClass,theId,theAccessKey);\n if(theText) button.innerHTML = theText;\n return button;\n};\n\nconfig.shadowTiddlers.StyleSheet = 'body{font-family:"Trebuchet MS",Arial,Helvetica,sans-serif; background:transparent url('+img_bg2+'); color:#fff;} .header{background-image:url('+img_bg+'); height: 22px; padding:5px; font-size:1.1em; font-weight:bold; color:#9f6; overflow:hidden;} .header .tiddlyLink{color:#9f6; text-decoration:none; font-size:1.1em;} #SiteSubtitle{font-weight:normal;font-size:0.9em;color:#9f6;} #SiteSubtitle .tiddlyLink{font-size:0.9em;color:#9f6;} #sitetitlebg{background:transparent url('+img_bgs+') repeat-x; height:15px;} .viewer pre{color:#666;} .button{border:none;color:#ff3;} a:hover{color:#252d93;} .tagged{background-color:transparent;} .listTitle,.tagged .listTitle{color:#fff;} .button:hover{background-color:#ff3;border:none;} .popup .tiddlyLink, #popup .tiddlyLink, #popup *{color:#ff3;} .popup .revisionCurrent, #popup .revisionCurrent{color:#ff3;} .tiddler .title{border-bottom:1px solid #390} #displayArea{margin-top:0px;} .tiddler{margin-top:0px;} #mainMenu{margin-top:20px;} #sidebar{margin-top:20px;} .tiddler .title{font-size:2em; margin-bottom:1px;} .tiddler .toolbar{width:175px; float:right; margin-top:5px;} h1,h2,h3,h4,h5,h6{background-color:transparent; margin-bottom:0px; margin-top:0px;}';\n\nconfig.shadowTiddlers.StyleSheetColors = config.shadowTiddlers.StyleSheetColors.replace(/#703/g, '#9f6').replace(/#04b/g, '#ff3').replace(/#866/g, '#990').replace(/#8cf/g, '#3c49ed').replace(/#(eee)|(ddd)/g, '#3c49ed').replace(/#999/g, 'transparent').replace(/#18f/g, '#3c49ed');\n\nconfig.shadowTiddlers.PageTemplate = "<div class='header'>\sn<span refresh='content' tiddler='SiteTitle'></span> \sn::\sn<span refresh='content' tiddler='SiteSubtitle' id='SiteSubtitle'></span></div>\sn<div id='sitetitlebg'></div>\sn<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\sn<div id='sidebar'>\sn<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\sn<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\sn</div>\sn<div id='displayArea'>\sn<div id='messageArea'></div>\sn<div id='tiddlerDisplay'></div>\sn</div>";\n\nconfig.commands.editTiddler.text = '<img src="' + img_edit + '"/>';\nconfig.commands.editTiddler.readOnlyText = '<img src="' + img_edit + '"/>';\nconfig.commands.closeTiddler.text = '<img src="' + img_close + '"/>';\nconfig.commands.closeOthers.text = '<img src="' + img_close_others + '"/>';\nconfig.commands.saveTiddler.text = '<img src="' + img_save + '"/>';\nconfig.commands.cancelTiddler.text = '<img src="' + img_cancel + '"/>';\nconfig.commands.deleteTiddler.text = '<img src="' + img_del + '"/>';\nconfig.commands.permalink.text = '<img src="' + img_perm + '"/>';\nconfig.commands.references.text = '<img src="' + img_ref + '"/>';\nconfig.commands.jump.text = '<img src="' + img_jump + '"/>';\nif(config.commands.revisions)\n config.commands.revisions.text = '<img src="' + img_rev + '"/>';\nif(config.commands.copyTiddler)\n config.commands.copyTiddler.text = '<img src="' + img_copy + '"/>';\n}}}
ZiddlyWiki bug reports and discussions have been moved to the [[ZiddlyWikiForum|http://ziddlywiki.com/forum]]. Please post bug reports there.
Tricks to utilize both planned and unplanned features of ZiddlyWiki:\n\n<<list tag tricks ZiddlyTricks>>
ZiddlyWiki is a hosted non-linear personal/public/collaborative micro-content wiki/blog based on TiddlyWiki. The "Z" stands for [[Zope]] -- the powerful server-side platform on which ZiddlyWiki runs. \n\nYou can get a feel for ZW in the [[Sandbox|/sandbox]] and talk about it in the [[Forum|/forum]]..\n\nWhen you're ready to join the revolution, you can GetYourOwn.
Discussion tiddlers and bug reports should be posted to the forum. Click the link below to go there now:\n\nhttp://ziddlywiki.org/forum
Play around with a live ZiddlyWiki at this address:\nhttp://ziddlywiki.org/sandbox
ZiddlyWorld is a magical place where one can speak of things like "wiki" and "tiddler" and "ziddly" without getting smirks and laughs. Here it's normal to use such silly-sounding words.\n\nZiddlyWorld also refers to the community, code and content ZiddlyWiki is so graciously built on.
Zope is an open source application server for building content management systems, intranets, portals, and custom applications. Zope is written in Python, a highly-productive, object-oriented scripting language.\n\nhttp://zope.org
[[Zope]] provides built-in basic HTTP authentication, and ZiddlyWiki makes use of this feature to track and restrict tiddler modifications. To edit a ZiddlyWiki tiddler, you must be logged in as a user in Zope. Unless, of course, AnonymousEditing is turned on.
In the [[Zope]] Management Interface, add a "Site Error Log" to the root level of your Zope instance. This will allow you to find the cause of errors.
The [[Zope]] Management Interface is accessed by appending "/manage" to the end of your Zope instance URL.\n\n* http://yourdomain.com/manage\n* http://yourname.freezope.org/manage
[[Zope]] stores old revisions of most types of objects, therefore all old tiddler versions are stored in ZiddlyWiki. ZW makes use of this to provide TiddlerRevisions.
<<tiddler TimMorgan>>
<<tiddler TimMorgan>>