1.误会: 早年在美国阿拉斯加地方,有一对年轻人结婚,婚后生育,他的太太因难产而死,遗下一孩子。他忙生活,又忙于看家,因没有人帮忙看孩子,就训练一只狗,那狗聪明听话,能照顾小孩,咬着奶瓶喂奶给孩子喝,抚养孩子。   有一天,主人出门去了,叫它照顾孩子,他到了别的乡村,因遇大雪,当日不能回来。第二天才赶回家,狗立即闻声出来迎接主人。他把房门开一看,到处是血,抬头一望,床上也是血,孩子不见了,狗在身边,满口也是血,主人发现这种情形,以为狗性发作,把孩子吃掉了,大怒之下,拿起刀来向着狗头一劈,把狗杀死了。之后,忽然听到孩子的声音,又见他从床下爬了出来,于是抱起孩子;虽然身上有血,但并未受伤。他很奇怪,不知究竟是怎么一回事,再看看狗身,腿上的肉没有了,旁边有一只狼,口里还咬着狗的肉;狗救了小主人,却被主人误杀了,这真是天下最令人惊奇的误会。   注:误会的事,是人往往在不了解、无理智、无耐心、缺少思考、未能多方体谅对方,反省自己,感情极为冲动的情况之下所发生。误会一开始,即一直只想到对方的千错万错;因此,会使误会越陷越深,弄到不可收拾的地步,人对无知的动物小狗发生误会,尚且会有如此可怕严重的后果,这样人与人之间的误会,则其后果更是难以想象。 \n\n 2.钉子: 有一个男孩有着很坏的脾气,于是他的父亲就给了他一袋钉子;并且告诉他,每当他发脾气的时候就钉一根钉子在后院的围篱上。 第一天,这个男孩钉下了37根钉子。慢慢地每天钉下的数量减少了。他发现控制自己的脾气要比钉下那些钉子来得容易些。 终于有一天这个男孩再也不会失去耐性乱发脾气,他告诉他的父亲这件事,父亲告诉他,现在开始每当他能控制自己的脾气的时候,就拔出一根钉子。 一天天地过去了,最后男孩告诉他的父亲,他终于把所有钉子都拔出来了。 父亲握着他的手来到后院说:你做得很好,我的好孩子。但是看看那些围篱上的洞,这些围篱将永远不能回复成从前。你生气的时候说的话将像这些钉子一样留下疤痕。如果你拿刀子捅别人一刀,不管你说了多少次对不起,那个伤口将永远存在。话语的伤痛就像真实的伤痛一样令人无法承受。   注:人与人之间常常因为一些彼此无法释怀的坚持,而造成永远的伤害。如果我们都能从自己做起,开始宽容地看待他人,相信你(你)一定能收到许多意想不到的结果....帮别人开启一扇窗,也就是让自己看到更完整的天空.... \n\n3.且慢下手:   大多数的同仁都很兴奋,因为单位里调来一位新主管,据说是个能人,专门被派来整顿业务;可是日一天天过去,新主管却毫无作为,每天彬彬有礼进办公室,便躲在里面难得出门,那些本来紧张得要死的坏份子,现在反而更猖獗了。 他那里是个能人嘛!根本是个老好人,比以前的主管更容易唬! 四个月过去,就在真正努力为新主管感到失望时,新主管却发威了--坏份子一律开除,能人则获得晋升。下手之快,断事之准,与四月表现保守的他,简直像是全然换个人。 年终聚餐时,新主管在酒过三巡之后致词:「相信大家对我新到任期间的表现,和后来的大刀阔斧,一定感到不解,现在听我说个故事,各位就明白了:「我有位朋友,买了栋带着大院的房子,他一搬进去,就将那院子全面整顿,杂草树一律清除,改种自己新买的花卉,某日原先的屋主往访,进门大吃一惊的问:『那最名贵的牡丹哪里去了?』我这位朋友才发现,他竟然把牡丹当草给铲了。 后来他又买了一栋房子,虽然院子更是杂乱,他却是按兵不动,果然冬天以为是杂树的植物,春天里开了繁花;春天以为是野草的,夏天里成了锦蔟;半年都没有动静的小树,秋天居然红了叶。直到暮秋,它才真正认清哪些是无用的植物,而大力铲除,并使所有珍贵的草木得以保存。」说到这儿,主管举起杯来:「让我敬在座的每一位,因为如果这办公室是个花园,你们就都是其间的珍木,珍木不可能一年到头开花结果,只有经过长期的观察才认得出啊! \n4.宽大: 这是一个来自越战归来的士兵的故事。他从旧金山打电话给他的父母,告诉他们:「爸妈,我回来了,可是我有个不情之请。我想带一个朋友同我一起回家。」「当然好啊!」他们回答「我们会很高兴见到的。」不过儿子又继续下去「可是有件事我想先告诉你们,他在越战里受了重伤,少了一条胳臂和一只脚,他现在走投无路,我想请他回来和我们一起生活。」 「儿子,我很遗撼,不过或许我们可以帮他找个安身之处。」父亲又接着说「儿子,你不知道自己在说些什么。像他这样残障的人会对我们的生活造成很大的负担。我们还有自己的生活要过,不能就让他这样破坏了。我建议你先回家然后忘了他,他会找到自己的一片天空的。」就在此时儿子挂上了电话,他的父母再也没有他的消息了。 几天后,这对父母接到了来自旧金山警局的电话,告诉他们亲爱的儿子已经坠楼身亡了。警方相信这只是单纯的自杀案件。于是他们伤心欲绝地飞往旧金山,并在警方带领之下到停尸间去辨认儿子的遗体。 那的确是他们的儿子没错,但惊讶的是儿子居然,只有一条胳臂和一条腿。 故事中的父母就和我们大多数人一样。要去喜爱面貌姣好或谈吐风趣的人很容易,但是要喜欢那些造成我们不便和不快的人却太难了。我们总是宁愿和那些不如我们健康,美丽或聪明的人保持距离。 然而感谢上帝,有些人却不会对我们如此残酷。他们会无怨无悔地爱我们,不论我们多么糟总是愿意接纳我们。今晚在你入睡之前,向上帝祷告请他赐给你力量去接纳他人,不论他们是怎么样的人;请他帮助我们了解那些不同于我们的人。 每个人的心里都藏着一种神奇的东西称为「友情」,你不知道它究竟是如何发生何时发生,但你却知道它总会带给我们特殊的礼物。 你也会了解友情是上帝给我们最珍贵的赠与!朋友就像是稀奇的宝物。他们带来欢笑,激励我们成功。他们倾听我们内心的话,与我们分享每一句赞美。他们的心房永远为我们而敞开。现在就告诉你的朋友你有多在乎他们。   \n\n试想:朋友,您一路看下来之后;一定有很深的感触吧。那么,在对别人有所决定与判断之前,首先,请想想这是否是一个「误会」,然后,请考虑您是否一定要钉下这个「钉子」,如果可以的话,请「且慢下手」。因为,当您对别人「宽大」之时,即是对您自己宽大<<tiddler ReplaceTiddlerTitle with: "<span style='white-space:nowrap;font-size:.9em'>终身受用的4个经典故事</span>">>\n\n
/***\n|''Name:''|ArchivedTimeline|\n|''Version:''|0.5.2 (Jun 21, 2006)|\n|''Source:''|https://sourceforge.net/projects/ptw/|\n|''Author:''|BramChen|\n|''Type:''|Macro|\n!Description\nTimeline archived monthly.\n!Syntax/Examples\n>{{{<<timeline [modified | created]>>}}}\n\n!Known issues/Todos\n* \n\n!Instructions\n\n!Notes\n*\n!Revision history\n* v0.5.2 (Jun 21, 2006)\n** Fixed bugs for dateFormat of TW 2.1\n** Change default dateFormat to "0DD mmm, YYYY""\n* v0.5.1 (Jun 04, 2006)\n** Added config.macros.archivedTimeline.orderBy for localization. \n* v0.5.0 (Apr 19, 2006)\n** Fixed bug for twice records of the same date ()\n** Added Date.prototype.convertToLocalYYYYMMDDHHMM for backward compatible with 2.0.6-\n* v0.4.0 (Apr 03, 2006)\n** Added new parameter to <<timeline sortfield maxentries>>\n** Added config.options.txtTimelineMaxentries\n* v0.3.1 (Feb 04, 2006)\n** JSLint checked\n* v0.3.0 (Feb 04, 2006)\n** Fixed several missing variable declarations\n* v0.2.0 (Dec 26, 2005)\n** changed for the new feature of Macro timeline of TW 2.0.0 beta 6\n* v0.1.0 (Nov 3, 2005)\n** Initial release.\n\n!Code\n***/\n//{{{\nversion.extensions.archivedTimeline = {major: 0, minor: 5, revision: 2,\n date: new Date("Jun 21, 2006"),\n name: "ArchivedTimeline",\n type: "Macro",\n author: "BramChen",\n source: "http://sourceforge.net/project/showfiles.php?group_id=150646"\n};\nconfig.options.txtTimelineMaxentries=0;\nconfig.macros.archivedTimeline = {\n tooltips: "Archives sorted by ",\n orderBy:{modified: "modified", created: "created"},\n dateFormat: "0DD mmm YYYY"\n};\nconfig.macros.timeline = config.macros.archivedTimeline;\n\nconfig.macros.timeline.handler = function(place,macroName,params) {\n var field = params[0] ? params[0] : "modified";\n\n place.appendChild(document.createTextNode(this.tooltips + this.orderBy[field]));\n var tiddlers = store.reverseLookup("tags","excludeLists",false,field);\n var lastMonth = ""; var lastDay = ""; var theText = "----\sn"; var i = 0;\n var last = (params[1])?params[1]:config.options.txtTimelineMaxentries;\n last = (isNaN(last)||last<1) ? 0:tiddlers.length-Math.min(tiddlers.length,parseInt(last));\n var cookie; var archives;\n for (var t=tiddlers.length-1; t>=last; t--) {\n var tiddler = tiddlers[t];\n var theMonth = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,6);\n var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);\n if(theMonth != lastMonth) {\n if (lastMonth === "") {\n lastMonth = theMonth;\n }\n else {\n place.appendChild(document.createElement("hr"));\n cookie = 'chktimeline'+(i++);\n archives = this.formatString(this.dateFormat, lastMonth);\n this.slider(place,cookie,theText,archives,this.tooltips + archives);\n lastMonth = theMonth; theText = "----\sn";\n }\n }\n if(theDay != lastDay){\n theText += tiddler[field].formatString(this.dateFormat) + '\sn';\n lastDay = theDay; \n }\n theText += '* [[' + tiddler.title + ']]\sn';\n }\n place.appendChild(document.createElement("hr"));\n cookie = 'chktimeline'+(i++);\n archives = this.formatString(this.dateFormat, lastMonth);\n this.slider(place,cookie,theText,archives,this.tooltips + archives);\n place.appendChild(document.createElement("hr"));\n};\n\nconfig.macros.timeline.onClickSlider = config.macros.slider.onClickSlider;\n\nconfig.macros.timeline.slider = function(place,cookie,text,id,tooltips)\n{\n var btn = createTiddlyButton(place,id,tooltips,this.onClickSlider);\n var panel = createTiddlyElement(place,"div",null,"timelineSliderPanel",null);\n panel.setAttribute("cookie",cookie);\n panel.style.display = config.options[cookie] ? "block" : "none";\n if(text){\n wikify(text,panel);\n }\n};\n\nconfig.macros.timeline.formatString = function(template, yyyymm)\n{\n var dateString = new Date(yyyymm.substr(0,4)+'/'+yyyymm.substr(4,2)+'/01');\n template = template.replace(/DDD|0DD|DD/g,'');\n return dateString.formatString(template);\n};\nif (!Date.prototype.convertToLocalYYYYMMDDHHMM){\n Date.prototype.convertToLocalYYYYMMDDHHMM = function(){\n return(String.zeroPad(this.getFullYear(),4) + String.zeroPad(this.getMonth()+1,2) + String.zeroPad(this.getDate(),2) + String.zeroPad(this.getHours(),2) + String.zeroPad(this.getMinutes(),2));\n }\n}\n//}}}
if (config.macros.timeline.tooltips != undefined){\n config.macros.timeline.tooltips = "按月";\n config.macros.archivedTimeline.orderBy = {modified: "归档",\ncreated: "建立日期"};\n config.macros.archivedTimeline.dateFormat = "YYYY0MM0DD"; \n}
/***\n''AttachFilePluginFormatters for TiddlyWiki version 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#AttachFilePluginFormatters\nsee also: http://www.TiddlyTools.com/#AttachFilePlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nYou can include this small //''run time library''// in your documents to render ''attachment tiddlers'' created by the AttachFilePlugin. Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that can be stored directly as base64 text-encoded data or loaded from external files stored on a local filesystem or remote web server.\n\nThis plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:\n* embedded images: {{{[img[tooltip|image]]}}}\n* linked embedded images: {{{[img[tooltip|image][link]]}}}\n* external/"pretty" links: {{{[[label|link]]}}}\n\n''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''\n!!!!!Revision History\n<<<\n''2006.07.24 [3.4.3.0]'' sync with AttachFilePlugin v3.4.3\n''2006.07.13 [3.4.2.0]'' sync with AttachFilePlugin v3.4.2\n''2006.06.15 [3.4.1.0]'' sync with AttachFilePlugin v3.4.1\n''2006.05.20 [3.4.0.0]'' sync with AttachFilePlugin v3.4.0\n''2006.05.13 [3.2.0.0]'' created from AttachFilePlugin v3.2.0\n<<<\n!!!!!Code\n***/\n//{{{\nif (config.macros.attach==undefined) config.macros.attach= { };\n//}}}\n//{{{\nif (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {\n var tiddler = store.getTiddler(title);\n if (tiddler==undefined || tiddler.tags==undefined) return false;\n return (tiddler.tags.find("attachment")!=null);\n}\n//}}}\n//{{{\nif (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {\n var text = store.getTiddlerText(title);\n var result=""; var pos=0; var endpos=0;\n\n var startmarker="---BEGIN_DATA---\sn";\n var endmarker="\sn---END_DATA---";\n if (!config.browser.isIE && (pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1) {\n var out="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\sn/g,''); // strip embedded newlines\n return out;\n }\n if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1) // fallback to local link\n return text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos)); \n if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1) // fallback to remote URL\n return text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));\n\n // fallback for backward-compatibility:\n // before 3.2.0 encoded datablock was located between ----'s instead of using embedded 'keyword markers' in the tiddler content\n var data=text.split('\sn----\sn');\n if (!config.browser.isIE && data[1] && data[1].length) // NOTE: IE does not support the "data:" URI scheme\n return "data:"+data[1].replace(/\s\sn/g,'');\n\n return "";\n}\n//}}}\n//{{{\nif (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {\n if (this.initialized) return;\n // find the formatter for "image" and replace the handler\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);\n if (i<config.formatters.length) config.formatters[i].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) // Simple bracketted link\n {\n var e = w.output;\n if(lookaheadMatch[5])\n {\n if(store.tiddlerExists(lookaheadMatch[5]))\n // ELS: ADDED\n if (config.macros.attach.isAttachment(lookaheadMatch[5]))\n {\n e = createExternalLink(w.output,lookaheadMatch[5]);\n e.href=config.macros.attach.getAttachment(lookaheadMatch[5]);\n e.title = config.macros.attach.linkTooltip + lookaheadMatch[5];\n }\n else\n // ELS: END\n e = createTiddlyLink(w.output,lookaheadMatch[5],false);\n else\n e = createExternalLink(w.output,lookaheadMatch[5]);\n }\n var img = createTiddlyElement(e,"img");\n if(lookaheadMatch[1])\n img.align = "left";\n else if(lookaheadMatch[2])\n img.align = "right";\n if(lookaheadMatch[3])\n img.title = lookaheadMatch[3];\n img.src = lookaheadMatch[4];\n // ELS: ADDED\n if (config.macros.attach.isAttachment(lookaheadMatch[4]))\n img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);\n // ELS: END\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n//}}}\n//{{{\n // find the formatter for "prettyLink" and replace the handler\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);\n if (i<config.formatters.length) config.formatters[i].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 && lookaheadMatch[2])\n { // Simple bracketted link\n var link = createTiddlyLink(w.output,lookaheadMatch[1],false);\n w.outputText(link,w.nextMatch,w.nextMatch + lookaheadMatch[1].length);\n w.nextMatch += lookaheadMatch[1].length + 2;\n }\n else if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[3])\n { // Pretty bracketted link\n var e;\n if(store.tiddlerExists(lookaheadMatch[4]) || store.isShadowTiddler(lookaheadMatch[4]))\n // ELS: ADDED\n if (config.macros.attach.isAttachment(lookaheadMatch[4]))\n {\n e = createExternalLink(w.output,lookaheadMatch[4]);\n e.href=config.macros.attach.getAttachment(lookaheadMatch[4]);\n e.title = config.macros.attach.linkTooltip + lookaheadMatch[4];\n }\n else\n // ELS: END\n e = createTiddlyLink(w.output,lookaheadMatch[4],false);\n else\n e = createExternalLink(w.output,lookaheadMatch[4]);\n w.outputText(e,w.nextMatch,w.nextMatch + lookaheadMatch[1].length);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n this.initialized=true;\n}\n//}}}\n//{{{\nconfig.macros.attach.init_formatters(); // load time init\n//}}}\n//{{{\nif (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {\n TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;\n TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {\n return config.macros.attach.isAttachment(title)?\n config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText(title,defaultText,depth);\n }\n}\n//}}}
/***\n!Metadata:\n|''Name:''|BreadcrumbsPlugin|\n|''Description:''||\n|''Version:''|1.4.0|\n|''Date:''|Aug 02, 2006|\n|''Source:''|http://sourceforge.net/project/showfiles.php?group_id=150646|\n|''Author:''|Alan Hecht (with 2.0 update from 'jack' and revisions by Bram Chen)|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License]]|\n|''~CoreVersion:''|2.1.0|\n|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|\n\n!Revision History:\n|''Version''|''Date''|''Note''|\n|1.4.0|Aug 02, 2006|Fixed bug, the redefined onClickTiddlerLink_orig_breadCrumbs works incorrectly on IE|\n|1.3.0|Jul 20, 2006|Runs compatibly with TW 2.1.0 (rev #403+)|\n|1.2.0|Feb 07, 2006|change globle array breadCrumbs to config.breadCrumbs by Eric's suggestion|\n|1.1.0|Feb 04, 2006|JSLint checked|\n|1.0.0|Feb 01, 2006|TW2 ready and code Cleaned-up|\n\n!Code section:\n***/\n//{{{\nversion.extensions.breadCrumbs = {major: 1, minor: 2, revision: 0,date: new Date("Aug 02, 2006")};\nconfig.breadCrumbs = [];\n\nwindow.onClickTiddlerLink_orig_breadCrumbs = window.onClickTiddlerLink;\nwindow.onClickTiddlerLink = function(e){\n if (!e) {var e = window.event;} \n window.onClickTiddlerLink_orig_breadCrumbs(e);\n addCrumb(e);\n return false;\n};\n\nfunction addCrumb(e){\n if (!e) {var e = window.event;}\n var thisCrumb = "[[" + resolveTarget(e).getAttribute("tiddlyLink") + "]]";\n var ind = config.breadCrumbs.find(thisCrumb);\n if(ind === null){\n config.breadCrumbs.push(thisCrumb);\n }\n else{\n config.breadCrumbs.length = ind++;\n }\n refreshCrumbs();\n return false;\n}\n\nfunction refreshCrumbs(){\n var crumbArea = document.getElementById("breadCrumbs");\n if (!crumbArea) {\n crumbArea = document.createElement("div");\n crumbArea.id = "breadCrumbs";\n crumbArea.style.display= "none"; \n var targetArea = document.getElementById("tiddlerDisplay");\n targetArea.parentNode.insertBefore(crumbArea,targetArea);\n }\n crumbArea.style.display = "block";\n removeChildren(crumbArea);\n createTiddlyButton(crumbArea,"主页",null,restartHome);\n wikify(" || " + config.breadCrumbs.join(' > '),crumbArea);\n}\n\nfunction restartHome(){\n story.closeAllTiddlers();\n restart();\n config.breadCrumbs = [];\n var crumbArea = document.getElementById("breadCrumbs");\n crumbArea.style.display = "none";\n}\n//}}}
/* background images */\n/* colors and borders */\na { color:#ccf; }\n#breadCrumbs { color:#ccc; }\n#breadCrumbs a { color:#ccf; }\n#titleLine { color: #fff; }\n#titleLine a { color: #009900; }\n.siteMenu { color: #fff; border:0; margin-bottom:.5em }\n.siteMenu a, .siteMenu .button, .siteMenu .tiddlyLink { color: #ccf; }\n.storyMenu { color: #fff; border:0; margin-bottom:.5em }\n.storyMenu a, .storyMenu .button, .storyMenu .tiddlyLink { color: #ccf; }\n/*\n#mainMenu { color: #fff; }\n#mainMenu .tiddlyLink { color: #def; }\n#mainMenu .tiddlyLink:hover { color: #fff; }\n#mainMenu .externalLink { color: #def; }\n#mainMenu .externalLink:hover { color: #fff; }\n#mainMenu .button, #mainMenu A { color: #def; }\n#mainMenu .button:hover, #mainMenu A:hover { color: #fff; }\n*/\n#messageArea { color: #006; }\n#messageArea a:link, #messageArea a:visited { color: #006; }\n#messageArea a:hover { color: #f00; }\n#messageArea a:active { color: #006; }\n#popup { color: #000; }\n#popup a { color: #006; }\n#popup a:hover { color: #006; }\n#popup hr { color: #666; }\n.tabContents { color: #000; }\n.tiddler .button { color: #ccf; }\n.tiddler .button:hover { color: #fff; }\n.tiddler .button:active { color: #fff; }\n.title { color: #def; }\n.toolbar { color: #aaa; }\n.footer { color: #888; }\n.selectedTiddler .footer { color: #ddd; }\n.viewer { color: #fff; }\n.viewer a:link, .viewer a:visited { color: #ccf; }\n.viewer a:hover { color: #fff; }\n.viewer .button { color: #def; }\n.viewer .button:hover { color: #fff; }\n.viewer th { color: #fff; }\n.viewer td { color: #fff; }\n.viewer code { color: #ccc; }\n.viewer pre { color: #000; }\n.viewer hr { color: #666; }\n.viewer .highlight, .viewer .marked { color: #fff; }\n.viewer .tabSelected { background-color: #014; color:#fff; border-color:#999; border-width:2px; padding-bottom:2px !important; }\n.viewer .tabUnselected { background-color: #236; color:#999; border-color:#666}\n.viewer .tabContents { background-color: #014; color:#fff; border-color:#999; border-width:2px }\n.tagging .button, .tagged .button { color: #009; }\n.highlight, .marked { color: #fff; }\n.editor { color: #402C74; }\n.editorFooter { color: #aaa; }\n.editorFooter A { color: #930; }\n.editorFooter A:hover { color: #cf6; }\n.editorFooter A:active { color: #fff; }\n#licensePanel A { color: #66f; }\n#licensePanel A:hover { color: #fff; }\n#licensePanel A:active { color: #fff; }\n.errorNoSuchMacro { color: #ff0; }\n.zoomer { color: #fff; }\n\n.floatingPanel .button,\n.floatingPanel a:link,\n.floatingPanel a:visited,\n.viewer .floatingPanel .button,\n.viewer .floatingPanel a:link,\n.viewer .floatingPanel a:visited {\n color: #009 !important;\n}\n.floatingPanel a:hover,\n.viewer .floatingPanel a:hover {\n color: #fff !important;\n}\n/***\n----\n***/\n/*{{{*/\n.tiddlyCard\n { color:#000 !important; }\n.tiddlyCard a, .tiddlyCard .button, .tiddlyCard .tiddlyLinkExisting, .tiddlyCard .tiddlyLinkNonExisting\n { color:#009 !important; }\n.attachPanel a, #importPanel a, #exportpanel a,\n.attachPanel .button, #importPanel .button, #exportpanel .button,\n.attachPanel .tiddlyLinkExisting, #importPanel .tiddlyLinkExisting, #exportpanel .tiddlyLinkExisting,\n.attachPanel .tiddlyLinkNonExisting, #importPanel .tiddlyLinkNonExisting, #exportpanel .tiddlyLinkNonExisting,\n.tab .button, .tab A,\n.tab .tiddlyLinkExisting, .tab .tiddlyLinkNonExisting\n { color:#009 !important; }\n#sidebarOptions, #sidebarOptions .sliderPanel\n { color: #fff; }\n#sidebarOptions .button, #sidebarOptions A,\n#sidebarOptions .tiddlyLinkExisting, #sidebarOptions .tiddlyLinkNonExisting,\n#sidebarOptions .sliderPanel .button, #sidebarOptions .sliderPanel A,\n#sidebarOptions .sliderPanel .tiddlyLinkExisting, #sidebarOptions .sliderPanel .tiddlyLinkNonExisting\n { color: #def; }\n#sidebarTabs, #sidebarTabs .sliderPanel, #sidebarTabs .tabContents\n { color: #fff; }\n#sidebarTabs .tabContents *[class="TOCList"] /* MOZ ONLY */\n { color:#fff !important; }\n#sidebarTabs .button, /* #sidebarTabs A, */\n#sidebarTabs .tiddlyLinkExisting, #sidebarTabs .tiddlyLinkNonExisting\n { color: #def; }\n.menubox\n { color:#fff; }\n.menubox a, .menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting\n { color:#99f !important; }\n.groupbox\n { color:#000; }\n.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting\n { color:#009 !important; }\n/*}}}*/
/***\n''Name:'' Calendar plugin\n''Author:'' SteveRumsby\n\n// // updated by Jeremy Sheeley to add cacheing for reminders\n// // see http://www.geocities.com/allredfaq/reminderMacros.html\n\n''Configuration:''\n\n|''First day of week:''|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|\n|''First day of weekend:''|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|\n\n''Syntax:'' \n|{{{<<calendar>>}}}|Produce a full-year calendar for the current year|\n|{{{<<calendar year>>}}}|Produce a full-year calendar for the given year|\n|{{{<<calendar year month>>}}}|Produce a one-month calendar for the given month and year|\n|{{{<<calendar thismonth>>}}}|Produce a one-month calendar for the current month|\n|{{{<<calendar lastmonth>>}}}|Produce a one-month calendar for last month|\n|{{{<<calendar nextmonth>>}}}|Produce a one-month calendar for next month|\n\n***/\n// //Modify this section to change the text displayed for the month and day names, to a different language for example. You can also change the format of the tiddler names linked to from each date, and the colours used.\n\n// // ''Changes by ELS 2005.10.30:''\n// // config.macros.calendar.handler()\n// // ^^use "tbody" element for IE compatibility^^\n// // ^^IE returns 2005 for current year, FF returns 105... fix year adjustment accordingly^^\n// // createCalendarDays()\n// // ^^use showDate() function (if defined) to render autostyled date with linked popup^^\n// // calendar stylesheet definition\n// // ^^use .calendar class-specific selectors, add text centering and margin settings^^\n\n//{{{\nconfig.macros.calendar = {};\n\nconfig.macros.calendar.monthnames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];\nconfig.macros.calendar.daynames = ["M", "T", "W", "T", "F", "S", "S"];\n\nconfig.macros.calendar.weekendbg = "#c0c0c0";\nconfig.macros.calendar.monthbg = "#e0e0e0";\nconfig.macros.calendar.holidaybg = "#ffc0c0";\n\n//}}}\n// //''Code section:''\n// (you should not need to alter anything below here)//\n//{{{\nif(config.options.txtCalFirstDay == undefined)\n config.options.txtCalFirstDay = 0;\nif(config.options.txtCalStartOfWeekend == undefined)\n config.options.txtCalStartOfWeekend = 5;\n\nconfig.macros.calendar.tiddlerformat = "0DD/0MM/YYYY"; // This used to be changeable - for now, it isn't// <<smiley :-(>> \n\nversion.extensions.calendar = { major: 0, minor: 6, revision: 0, date: new Date(2006, 1, 22)};\nconfig.macros.calendar.monthdays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nconfig.macros.calendar.holidays = [ ]; // Not sure this is required anymore - use reminders instead\n//}}}\n\n// //Is the given date a holiday?\n//{{{\nfunction calendarIsHoliday(date)\n{\n var longHoliday = date.formatString("0DD/0MM/YYYY");\n var shortHoliday = date.formatString("0DD/0MM");\n\n for(var i = 0; i < config.macros.calendar.holidays.length; i++) {\n if(config.macros.calendar.holidays[i] == longHoliday || config.macros.calendar.holidays[i] == shortHoliday) {\n return true;\n }\n }\n return false;\n}\n//}}}\n\n// //The main entry point - the macro handler.\n// //Decide what sort of calendar we are creating (month or year, and which month or year)\n// // Create the main calendar container and pass that to sub-ordinate functions to create the structure.\n// ELS 2005.10.30: added creation and use of "tbody" for IE compatibility and fixup for year >1900//\n// ELS 2005.10.30: fix year calculation for IE's getYear() function (which returns '2005' instead of '105')//\n// ELS 2006.05.29: add journalDateFmt handling//\n//{{{\nconfig.macros.calendar.handler = function(place,macroName,params)\n{\n var calendar = createTiddlyElement(place, "table", null, "calendar", null);\n var tbody = createTiddlyElement(calendar, "tbody", null, null, null);\n var today = new Date();\n var year = today.getYear();\n if (year<1900) year+=1900;\n \n // get format for journal link by reading from SideBarOptions (ELS 5/29/06 - based on suggestion by Martin Budden)\n var text = store.getTiddlerText("SideBarOptions");\n this.journalDateFmt = "DD-MMM-YYYY";\n var re = new RegExp("<<(?:newJournal)([^>]*)>>","mg"); var fm = re.exec(text);\n if (fm && fm[1]!=null) { var pa=fm[1].readMacroParams(); if (pa[0]) this.journalDateFmt = pa[0]; }\n\n if (params[0] == "thismonth")\n {\n cacheReminders(new Date(year, today.getMonth(), 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, today.getMonth());\n } \n else if (params[0] == "lastmonth") {\n var month = today.getMonth()-1; if (month==-1) { month=11; year--; }\n cacheReminders(new Date(year, month, 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, month);\n }\n else if (params[0] == "nextmonth") {\n var month = today.getMonth()+1; if (month>11) { month=0; year++; }\n cacheReminders(new Date(year, month, 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, month);\n }\n else {\n if (params[0]) year = params[0];\n if(params[1])\n {\n cacheReminders(new Date(year, params[1]-1, 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, params[1]-1);\n }\n else\n {\n cacheReminders(new Date(year, 0, 1, 0, 0), 366);\n createCalendarYear(tbody, year);\n }\n }\n window.reminderCacheForCalendar = null;\n}\n//}}}\n//{{{\n//This global variable is used to store reminders that have been cached\n//while the calendar is being rendered. It will be renulled after the calendar is fully rendered.\nwindow.reminderCacheForCalendar = null;\n//}}}\n//{{{\nfunction cacheReminders(date, leadtime)\n{\n if (window.findTiddlersWithReminders == null)\n return;\n window.reminderCacheForCalendar = {};\n var leadtimeHash = [];\n leadtimeHash [0] = 0;\n leadtimeHash [1] = leadtime;\n var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);\n for(var i = 0; i < t.length; i++) {\n //just tag it in the cache, so that when we're drawing days, we can bold this one.\n window.reminderCacheForCalendar[t[i]["matchedDate"]] = "reminder:" + t[i]["params"]["title"]; \n }\n}\n//}}}\n//{{{\nfunction createCalendarOneMonth(calendar, year, mon)\n{\n var row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, true, year, mon);\n row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarDayHeader(row, 1);\n createCalendarDayRowsSingle(calendar, year, mon);\n}\n//}}}\n\n//{{{\nfunction createCalendarMonth(calendar, year, mon)\n{\n var row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, false, year, mon);\n row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarDayHeader(row, 1);\n createCalendarDayRowsSingle(calendar, year, mon);\n}\n//}}}\n\n//{{{\nfunction createCalendarYear(calendar, year)\n{\n var row;\n row = createTiddlyElement(calendar, "tr", null, null, null);\n var back = createTiddlyElement(row, "td", null, null, null);\n var backHandler = function() {\n removeChildren(calendar);\n createCalendarYear(calendar, year-1);\n };\n createTiddlyButton(back, "<", "Previous year", backHandler);\n back.align = "center";\n\n var yearHeader = createTiddlyElement(row, "td", null, "calendarYear", year);\n yearHeader.align = "center";\n yearHeader.setAttribute("colSpan", 19);\n\n var fwd = createTiddlyElement(row, "td", null, null, null);\n var fwdHandler = function() {\n removeChildren(calendar);\n createCalendarYear(calendar, year+1);\n };\n createTiddlyButton(fwd, ">", "Next year", fwdHandler);\n fwd.align = "center";\n\n createCalendarMonthRow(calendar, year, 0);\n createCalendarMonthRow(calendar, year, 3);\n createCalendarMonthRow(calendar, year, 6);\n createCalendarMonthRow(calendar, year, 9);\n}\n//}}}\n\n//{{{\nfunction createCalendarMonthRow(cal, year, mon)\n{\n var row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);\n createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);\n createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);\n row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarDayHeader(row, 3);\n createCalendarDayRows(cal, year, mon);\n}\n//}}}\n\n//{{{\nfunction createCalendarMonthHeader(cal, row, name, nav, year, mon)\n{\n var month;\n if(nav) {\n var back = createTiddlyElement(row, "td", null, null, null);\n back.align = "center";\n back.style.background = config.macros.calendar.monthbg;\n\n/*\n back.setAttribute("colSpan", 2);\n\n var backYearHandler = function() {\n var newyear = year-1;\n removeChildren(cal);\n cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, mon);\n };\n createTiddlyButton(back, "<<", "Previous year", backYearHandler);\n*/\n var backMonHandler = function() {\n var newyear = year;\n var newmon = mon-1;\n if(newmon == -1) { newmon = 11; newyear = newyear-1;}\n removeChildren(cal);\n cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, newmon);\n };\n createTiddlyButton(back, "<", "Previous month", backMonHandler);\n\n\n month = createTiddlyElement(row, "td", null, "calendarMonthname", name)\n// month.setAttribute("colSpan", 3);\n month.setAttribute("colSpan", 5);\n\n var fwd = createTiddlyElement(row, "td", null, null, null);\n fwd.align = "center";\n fwd.style.background = config.macros.calendar.monthbg; \n\n// fwd.setAttribute("colSpan", 2);\n var fwdMonHandler = function() {\n var newyear = year;\n var newmon = mon+1;\n if(newmon == 12) { newmon = 0; newyear = newyear+1;}\n removeChildren(cal);\n cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, newmon);\n };\n createTiddlyButton(fwd, ">", "Next month", fwdMonHandler);\n/*\n var fwdYear = createTiddlyElement(row, "td", null, null, null);\n var fwdYearHandler = function() {\n var newyear = year+1;\n removeChildren(cal);\n cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, mon);\n };\n createTiddlyButton(fwd, ">>", "Next year", fwdYearHandler);\n*/\n } else {\n month = createTiddlyElement(row, "td", null, "calendarMonthname", name)\n month.setAttribute("colSpan", 7);\n }\n month.align = "center";\n month.style.background = config.macros.calendar.monthbg;\n}\n//}}}\n\n//{{{\nfunction createCalendarDayHeader(row, num)\n{\n var cell;\n for(var i = 0; i < num; i++) {\n for(var j = 0; j < 7; j++) {\n var d = j + (config.options.txtCalFirstDay - 0);\n if(d > 6) d = d - 7;\n cell = createTiddlyElement(row, "td", null, null, config.macros.calendar.daynames[d]);\n\n if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))\n cell.style.background = config.macros.calendar.weekendbg;\n }\n }\n}\n//}}}\n\n//{{{\nfunction createCalendarDays(row, col, first, max, year, mon)\n{\n var i;\n for(i = 0; i < col; i++) {\n createTiddlyElement(row, "td", null, null, null);\n }\n var day = first;\n for(i = col; i < 7; i++) {\n var d = i + (config.options.txtCalFirstDay - 0);\n if(d > 6) d = d - 7;\n var daycell = createTiddlyElement(row, "td", null, null, null);\n var isaWeekend = ((d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))? true:false);\n\n if(day > 0 && day <= max) {\n var celldate = new Date(year, mon, day);\n // ELS 2005.10.30: use <<date>> macro's showDate() function to create popup\n if (window.showDate) {\n showDate(daycell,celldate,"popup","DD",config.macros.calendar.journalDateFmt,true, isaWeekend); // ELS 5/29/06 - use journalDateFmt \n } else {\n if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;\n var title = celldate.formatString(config.macros.calendar.tiddlerformat);\n if(calendarIsHoliday(celldate)) {\n daycell.style.background = config.macros.calendar.holidaybg;\n }\n if(window.findTiddlersWithReminders == null) {\n var link = createTiddlyLink(daycell, title, false);\n link.appendChild(document.createTextNode(day));\n } else {\n var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);\n }\n }\n }\n day++;\n }\n}\n//}}}\n\n// //We've clicked on a day in a calendar - create a suitable pop-up of options.\n// //The pop-up should contain:\n// // * a link to create a new entry for that date\n// // * a link to create a new reminder for that date\n// // * an <hr>\n// // * the list of reminders for that date\n//{{{\nfunction onClickCalendarDate(e)\n{\n var button = this;\n var date = button.getAttribute("title");\n var dat = new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0, 2));\n\n date = dat.formatString(config.macros.calendar.tiddlerformat);\n var popup = createTiddlerPopup(this);\n popup.appendChild(document.createTextNode(date));\n var newReminder = function() {\n var t = store.getTiddlers(date);\n displayTiddler(null, date, 2, null, null, false, false);\n if(t) {\n document.getElementById("editorBody" + date).value += "\sn<<reminder day:" + dat.getDate() +\n " month:" + (dat.getMonth()+1) +\n " year:" + (dat.getYear()+1900) + " title: >>";\n } else {\n document.getElementById("editorBody" + date).value = "<<reminder day:" + dat.getDate() +\n " month:" + (dat.getMonth()+1) +\n " year:" + (dat.getYear()+1900) + " title: >>";\n }\n };\n var link = createTiddlyButton(popup, "New reminder", null, newReminder); \n popup.appendChild(document.createElement("hr"));\n\n var t = findTiddlersWithReminders(dat, [0,14], null, 1);\n for(var i = 0; i < t.length; i++) {\n link = createTiddlyLink(popup, t[i].tiddler, false);\n link.appendChild(document.createTextNode(t[i].tiddler));\n }\n}\n//}}}\n\n//{{{\nfunction calendarMaxDays(year, mon)\n{\n var max = config.macros.calendar.monthdays[mon];\n if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) {\n max++;\n }\n return max;\n}\n//}}}\n\n//{{{\nfunction createCalendarDayRows(cal, year, mon)\n{\n var row = createTiddlyElement(cal, "tr", null, null, null);\n\n var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first1 < 0) first1 = first1 + 7;\n var day1 = -first1 + 1;\n var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first2 < 0) first2 = first2 + 7;\n var day2 = -first2 + 1;\n var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first3 < 0) first3 = first3 + 7;\n var day3 = -first3 + 1;\n\n var max1 = calendarMaxDays(year, mon);\n var max2 = calendarMaxDays(year, mon+1);\n var max3 = calendarMaxDays(year, mon+2);\n\n while(day1 <= max1 || day2 <= max2 || day3 <= max3) {\n row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;\n createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;\n createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;\n }\n}\n//}}}\n\n//{{{\nfunction createCalendarDayRowsSingle(cal, year, mon)\n{\n var row = createTiddlyElement(cal, "tr", null, null, null);\n\n var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first1 < 0) first1 = first1+ 7;\n var day1 = -first1 + 1;\n var max1 = calendarMaxDays(year, mon);\n\n while(day1 <= max1) {\n row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;\n }\n}\n//}}}\n\n// //ELS 2005.10.30: added styles\n//{{{\nsetStylesheet(".calendar, .calendar table, .calendar th, .calendar tr, .calendar td { text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }", "calendarStyles");\n//}}}\n
// // override cookie settings for CalendarPlugin:\n//{{{\nconfig.options.txtCalFirstDay=6;\nconfig.options.txtCalStartOfWeekend=5;\n//}}}
/***\n''CheckboxPlugin for TiddlyWiki version 2.0''\n^^author: Eric Shulman\nsource: http://www.TiddlyTools.com/#CheckboxPlugin \nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nAdd checkboxes to your tiddler content. Checkbox states can be preserved in the document by either automatically modifying the tiddler content or setting/removing tags on specified tiddlers, or they may be saved as local cookies by assigning an optional 'chkID' to the checkbox. Add custom javascript for programmatic initialization and onClick handling for any checkbox. Also provides access to checkbox DOM element data and tracks the checkbox state in TiddlyWiki's config.options[] internal data.\n\n!!!!!Usage\n<<<\nThe checkbox syntax, including all optional parameters, is contained inside a matched set of [ and ] brackets.\n{{{ [x=id(title|tag){init_script}{onclick_script}] }}}\n\nAn alternative syntax lets you place the optional parameters ''outside'' the [ and ] brackets, and is provided for backward-compatibility with existing content that may include checkbox definitions based on earlier releases of this plugin:\n{{{ [x]=id(title|tag){init_script}{onclick_script} }}}\n\n//{{{\n[ ]or[_] and [x]or[X]\n//}}}\nSimple checkboxes. The current unchecked/checked state is indicated by the character between the {{{[}}} and {{{]}}} brackets ("_" means unchecked, "X" means checked). When you click on a checkbox, the current state is retained by directly modifying the tiddler content to place the corresponding "_" or "X" character in between the brackets\n//{{{\n[x=id]\n//}}}\nAssign an optional ID to the checkbox so you can use {{{document.getElementByID("id")}}} to manipulate the checkbox DOM element, as well as tracking the current checkbox state in {{{config.options["id"]}}}. If the ID starts with "chk" the checkbox state will also be saved in a cookie, so it can be automatically restored whenever the checkbox is re-rendered (overrides any default {{{[x]}}} or {{{[_]}}} value). If a cookie value is kept, the "_" or "X" character in the tiddler content remains unchanged, and is only applied as the default when a cookie-based value is not currently defined.\n//{{{\n[x(title|tag)] or [x(title:tag)]\n//}}}\nInitializes and tracks the current checkbox state by setting or removing ("TogglyTagging") a particular tag value from a specified tiddler. If you omit the tiddler title (and the | or : separator), the specified tag is assigned to the current tiddler. If you omit the tag value, as in {{{(title|)}}}, the default tag, {{{checked}}}, is assumed. Omitting both the title and tag, {{{()}}}, tracks the checkbox state by setting the "checked" tag on the current tiddler. When tag tracking is used, the "_" or "X" character in the tiddler content remains unchanged, and is not used to set or track the checkbox state. If a tiddler title named in the tag does not exist, the checkbox state defaults to //unselected//. When the checkbox is subsequently changed to //selected//, it will automatically (and silently) create the missing tiddler and then add the tag to it. //''NOTE: beginning with version 2.1.2 of this plugin, the "|" separator is the preferred separator between the title and tag name, as it avoids syntactic ambiguity when ":" is used within tiddler titles or tag names.''//\n//{{{\n[x{javascript}{javascript}]\n//}}}\nYou can define optional javascript code segments to add custom initialization and/or 'onClick' handling to a checkbox. The current checkbox state (and it's other DOM attributes) can be set or read from within these code segments by reference to the default context-object, 'this'.\n\nThe first code segment will be executed when the checkbox is initially displayed, so that you can programmatically determine it's starting checked/unchecked state. The second code segment (if present) is executed whenever the checkbox is clicked, so that you can perform programmed responses or intercept and override the checkbox state based on complex logic using the TW core API or custom functions defined in plugins (e.g. testing a particular tiddler title to see if certain tags are set or setting some tags when the checkbox is clicked).\n\nNote: if you want to use the default checkbox initialization processing with a custom onclick function, use this syntax: {{{ [x=id{}{javascript}] }}} \n<<<\n!!!!!Configuration\n<<<\nNormally, when a checkbox state is changed, the affected tiddlers are automatically re-rendered, so that any checkbox-dependent dynamic content can be updated. There are three possible tiddlers to be re-rendered, depending upon where the checkbox is placed, and what kind of storage method it is using.\n*''container'': the tiddler in which the checkbox is displayed. (e.g., this tiddler)\n*''tagged'': the tiddler that is being tagged (e.g., "~MyTask" when tagging "~MyTask:done")\n*''tagging'': the "tag tiddler" (e.g., "~done" when tagging "~MyTask:done")\nYou can set the default refresh handling for all checkboxes in your document by using the following javascript syntax either in a systemConfig plugin, or as an inline script. (Substitute true/false values as desired):\n{{{config.checkbox.refresh = { tagged:true, tagging:true, container:true };}}}\n\nYou can also override these defaults for any given checkbox by using an initialization function to set one or more of the refresh options. For example:\n{{{[_{this.refresh.container=false}]}}}\n<<<\n!!!!!Examples\n<<<\n//{{{\n[X] label\n[_] label\n//}}}\n>checked and unchecked static default values\n>[X] label\n>[_] label\n//{{{\n[_=demo] label\n//}}}\n>document-based value (id='demo', no cookie)\n>[_=demo] label\n//{{{\n[_=chkDemo] label\n//}}}\n>cookie-based value (id='chkDemo')\n>[_=chkDemo] label\n//{{{\n[_(CheckboxPlugin|demotag)]\n[_(CheckboxPlugin|demotag){this.refresh.tagged=this.refresh.container=false}]\n//}}}\n>tag-based value (TogglyTagging)\n>[_(CheckboxPlugin|demotag)] toggle 'demotag' (and refresh tiddler display)\n>[_(CheckboxPlugin|demotag){this.refresh.tagged=this.refresh.container=false}] toggle 'demotag' (no refresh)\n>current tags: <script>return store.getTiddler(story.findContainingTiddler(place).id.substr(7)).tags.toString();</script>\n><script label="click to view current tags">alert(store.getTiddler(story.findContainingTiddler(place).id.substr(7)).tags.toString());return false</script>\n//{{{\n[X{this.checked=true}{alert(this.checked?"on":"off")}] message box with checkbox state\n//}}}\n>custom init and onClick functions\n>[X{this.checked=true}{alert(this.checked?"on":"off")}] message box with checkbox state\nRetrieving option values:\nconfig.options['demo']=<script>return config.options['demo']?"true":"false";</script>\nconfig.options['chkDemo']=<script>return config.options['chkDemo']?"true":"false";</script>\n\n!!!!!Installation\nimport (or copy/paste) the following tiddlers into your document:\n''CheckboxPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n2006.05.04 - 2.1.3\nfix use of findContainingTiddler() to check for a non-null return value, so that checkboxes won't crash when used outside of tiddler display context (such as in header, sidebar or mainmenu)\n\n2006.03.11 - 2.1.2\nadded "|" as delimiter to tag-based storage syntax (e.g. "tiddler|tag") to avoid parsing ambiguity when tiddler titles or tag names contain ":". Using ":" as a delimiter is still supported but is deprecated in favor of the new "|" usage. Based on a problem reported by JeffMason.\n\n2006.02.25 - 2.1.0\nadded configuration options to enable/disable forced refresh of tiddlers when toggling tags\n\n2006.02.23 - 2.0.4\nwhen toggling tags, force refresh of the tiddler containing the checkbox.\n\n2006.02.23 - 2.0.3\nwhen toggling tags, force refresh of the 'tagged tiddler' so that tag-related tiddler content (such as "to-do" lists) can be re-rendered.\n\n2006.02.23 - 2.0.2\nwhen using tag-based storage, allow use [[ and ]] to quote tiddler or tag names that contain spaces:\n"""[x([[Tiddler with spaces]]:[[tag with spaces]])]"""\n\n2006.01.10 - 2.0.1\nwhen toggling tags, force refresh of the 'tagging tiddler'. For example, if you toggle the "systemConfig" tag on a plugin, the corresponding "systemConfig" TIDDLER will be automatically refreshed (if currently displayed), so that the 'tagged' list in that tiddler will remain up-to-date.\n\n2006.01.04 - 2.0.0\nupdate for ~TW2.0\n\n2005.12.27 - 1.1.2\nFix lookAhead regExp handling for """[x=id]""", which had been including the "]" in the extracted ID. \nAdded check for "chk" prefix on ID before calling saveOptionCookie()\n\n2005.12.26 - 1.1.2\nCorrected use of toUpperCase() in tiddler re-write code when comparing """[X]""" in tiddler content with checkbox state. Fixes a problem where simple checkboxes could be set, but never cleared.\n\n2005.12.26 - 1.1.0\nRevise syntax so all optional parameters are included INSIDE the [ and ] brackets. Backward compatibility with older syntax is supported, so content changes are not required when upgrading to the current version of this plugin. Based on a suggestion by GeoffSlocock\n\n2005.12.25 - 1.0.0\nadded support for tracking checkbox state using tags ("TogglyTagging")\nRevised version number for official post-beta release.\n\n2005.12.08 - 0.9.3\nsupport separate 'init' and 'onclick' function definitions.\n\n2005.12.08 - 0.9.2\nclean up lookahead pattern\n\n2005.12.07 - 0.9.1\nonly update tiddler source content if checkbox state is actually different. Eliminates unnecessary tiddler changes (and 'unsaved changes' warnings)\n\n2005.12.07 - 0.9.0\ninitial BETA release\n<<<\n!!!!!Credits\n<<<\nThis feature was created by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.CheckboxPlugin = {major: 2, minor: 1, revision:3 , date: new Date(2006,5,4)};\n//}}}\n\n// // 1.2.x compatibility\n//{{{\nif (!window.story) window.story=window;\nif (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}\nif (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}\nif (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}\n//}}}\n\n//{{{\nconfig.checkbox = { refresh: { tagged:true, tagging:true, container:true } };\nconfig.formatters.push( {\n name: "checkbox",\n match: "\s\s[[xX_ ][\s\s]\s\s=\s\s(\s\s{]",\n lookahead: "\s\s[([xX_ ])(\s\s])?(=[^\s\ss\s\s(\s\s]{]+)?(\s\s([^\s\s)]*\s\s))?({[^}]*})?({[^}]*})?(\s\s])?",\n handler: function(w)\n {\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 {\n // get params\n var checked=lookaheadMatch[1];\n var id=lookaheadMatch[3];\n var tag=lookaheadMatch[4];\n var fn_init=lookaheadMatch[5];\n var fn_click=lookaheadMatch[6];\n // create checkbox element\n var c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick=onClickCheckbox;\n c.srcpos=w.matchStart+1; // remember location of "X"\n c.container=story.findContainingTiddler(w.output); if (c.container) c.container=c.container.id.substr(7); // tiddler containing checkbox\n c.refresh = { };\n c.refresh.container=config.checkbox.refresh.container;\n c.refresh.tagged=config.checkbox.refresh.tagged;\n c.refresh.tagging=config.checkbox.refresh.tagging;\n w.output.appendChild(c);\n // set default state\n c.checked=(checked.toUpperCase()=="X");\n // get/set state by ID\n if (id) {\n c.id=id.substr(1); // trim off leading "="\n if (config.options[c.id]!=undefined)\n c.checked=config.options[c.id];\n else\n config.options[c.id]=c.checked;\n }\n // get/set state by tag\n if (tag) {\n c.tiddler=c.container;\n c.tag=tag.substr(1,tag.length-2).trim(); // trim off parentheses\n var pos=c.tag.indexOf("|"); if (pos==-1) var pos=c.tag.indexOf(":");\n if (pos==0) { c.tag=tag.substr(1); }\n if (pos>0) { c.tiddler=c.tag.substr(0,pos).replace(/\s[\s[/g,"").replace(/\s]\s]/g,""); c.tag=c.tag.substr(pos+1); }\n c.tag.replace(/\s[\s[/g,"").replace(/\s]\s]/g,"");\n if (!c.tag.length) c.tag="checked";\n var t=store.getTiddler(c.tiddler);\n c.checked = (t && t.tags)?(t.tags.find(c.tag)!=null):false;\n }\n if (fn_init) c.fn_init=fn_init.trim().substr(1,fn_init.length-2); // trim off surrounding { and } delimiters\n if (fn_click) c.fn_click=fn_click.trim().substr(1,fn_click.length-2);\n c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n }\n)\n//}}}\n\n//{{{\nfunction onClickCheckbox()\n{\n if (this.fn_init)\n // custom function hook to set initial state (run only once)\n { try { eval(this.fn_init); this.fn_init=null; } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }\n else if (this.fn_click)\n // custom function hook to override or react to changes in checkbox state\n { try { eval(this.fn_click) } catch(e) { displayMessage("Checkbox click error: "+e.toString()); } }\n if (this.id)\n // save state in config AND cookie (only when ID starts with 'chk')\n { config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }\n if ((!this.id || this.id.substr(0,3)!="chk") && !this.tag) {\n // save state in tiddler content only if not using cookie or tag tracking\n var t=story.findContainingTiddler(this); if (t) {\n var t=store.getTiddler(t.id.substr(7));\n if (this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed\n t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);\n store.setDirty(true);\n }\n }\n }\n if (this.tag) {\n var t=store.getTiddler(this.tiddler);\n if (!t) { t=(new Tiddler()); t.set(this.tiddler,"",config.options.txtUserName,(new Date()),null); store.addTiddler(t); } \n var tagged=(t.tags && t.tags.find(this.tag)!=null);\n if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }\n if (!this.checked && tagged) { t.tags.splice(t.tags.find(this.tag),1); store.setDirty(true); }\n // if tag state has been changed, force a display update\n if (this.checked!=tagged) {\n if (this.refresh.tagged) story.refreshTiddler(this.tiddler,null,true); // the TAGGED tiddler\n if (this.refresh.tagging) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler\n }\n }\n // refresh containing tiddler (but not during initial rendering, or we get an infinite loop!)\n if (!this.init && this.refresh.container && this.container!=this.tiddler)\n story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox\n return true;\n}\n//}}}
<script label="关闭">\n var panel=place;\n while (panel && panel.className!='sliderPanel' && panel.className!='floatingPanel')\n { panel=panel.parentNode; }\n if (!panel) { alert('not in a slider'); return false; }\n panel.style.display='none';\n var cookie=panel.button.sliderCookie;\n if (cookie && cookie.length) {\n config.options[cookie]=false;\n if (config.options[cookie]!=panel.button.defOpen)\n saveOptionCookie(cookie);\n else { // remove cookie if slider is in default display state\n var ex=new Date(); ex.setTime(ex.getTime()-1000);\n document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();\n }\n }\n return false;\n</script><script>\n place.lastChild.style.fontWeight="normal";\n if (story.findContainingTiddler(place))\n place.lastChild.className="toolbar button";\n else {\n var s=place.lastChild.style\n s.fontSize="90%"; s.float="right";\n }\n</script>
/%comment%/\n+++[add a comment...]>\n <html><textarea id="comment" rows="10" style="width:100%"></textarea>\n <input type="button" value="submit comment" onclick="addTiddlerComment(this.previousSibling.previousSibling);"></html><script>\n place.lastChild.firstChild.value="Enter your comment text here";</script>\n===\n<script>\nwindow.addTiddlerComment = function(place) {\n if (!window.story) window.story=window; if (!store.getTiddler) store.getTiddler=function(title) {return this.tiddlers[title]}\n var title = story.findContainingTiddler(place).id.substr(7);\n var tiddler=store.getTiddler(title);\n var pos=tiddler.text.indexOf("/%"+place.id+"%/");\n if (pos==-1) pos=tiddler.text.length;\n var txt="!!!!!comment from "+config.options.txtUserName+" on "+(new Date()).toLocaleString()+"\sn<<<\sn"+place.value+'\sn<<<\sn';\n tiddler.set(null,tiddler.text.substr(0,pos)+txt+tiddler.text.substr(pos));\n story.refreshTiddler(title,1,true);\n store.setDirty(true);\n}\n</script>
// // add TiddlyTools 'brand' to shadow SiteTitle (default for TiddlyTools starter documents)\n//{{{\nconfig.shadowTiddlers.SiteTitle += " {{medium{with [[叶落尘天 |http://avxavx.googlepages.com]] extensions}}}\sn";\n//}}}\n\n// // add shadows for common TiddlyTools default tiddlers used in starter documents\n//{{{\nconfig.shadowTiddlers.Welcome = "[[欢迎]]";\n//}}}\n\n// // add param handler for "group:tiddlerName"\n//{{{\nif (config.paramifiers)\n config.paramifiers.group = { onstart: function(id) { story.displayTiddlers(null,store.getTiddlerText(id,"").readBracketedList()) } };\n//}}}\n\n// // force no animation\n//{{{\nconfig.options.chkAnimate=true;\nconfig.options.chkShowRightSidebar=false; \nconfig.options.chkToggleLinks=true;\nconfig.options.chkOpenInNewWindow=false;\nconfig.options.chkForceMinorUpdate=true;\nconfig.options.chkShowTopButton=true;\nconfig.options.chkOpenInNewWindow=true\nconfig.options.chkSinglePageMode=true;\nconfig.options.chkTopOfPageMode=true;\n//}}}
// // This tweak adds a check for any tiddlers that are being actively edited, so that accidental page transitions don't discard tiddler content that has been entered but not yet saved to the 'store' (i.e., by pressing 'done').\n//{{{\nfunction confirmExit()\n{\n hadConfirmExit = true;\n if(store && store.isDirty && store.isDirty())\n return config.messages.confirmExit;\n // added by ELS\n var editing=false;\n story.forEachTiddler(function(title,element) { if(element.getAttribute("dirty")=="true") editing=true; });\n if (editing) return config.messages.confirmExit;\n}\n//}}}\n\n// // When a slider is opened/closed with animation enabled, the opacity/alphafilter styles are incrementally adjusted to create a "fade-in/fade-out" effect. However, this effect seems to render incredibly slowly on FireFox, and even slower when the background image is a complex JPG photo image, making animation impractical to use. This tweak disables the opacity/alphafilter handling, while leaving the 'incremental height' animation intact. The resulting increase in performance makes it possible to leave the animation enabled so that you can benefit from the visual cues it provides.\n//{{{\nSlider.prototype.tick = function()\n{\n this.progress += this.step;\n if(this.progress < 0 || this.progress > 1)\n {\n this.stop();\n return false;\n }\n else\n {\n var f = Animator.slowInSlowOut(this.progress);\n var h = this.realHeight * f;\n this.element.style.height = h + "px";\n// REMOVED BY ELS:\n// this.element.style.opacity = f;\n// this.element.style.filter = "alpha(opacity:" + f * 100 +")";\n return true;\n }\n}\n//}}}\n
/***\n''Date Plugin for TiddlyWiki version 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#DatePlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n^^last update: <<date tiddler "DDD, MMM DDth, YYYY hh:0mm:0ss">>^^\n\nThere are quite a few calendar generators, reminders, to-do lists, 'dated tiddlers' journals, blog-makers and GTD-like schedule managers that have been built around TW. While they all have different purposes, and vary in format, interaction, and style, in one way or another each of these plugins displays and/or uses date-based information to make finding, accessing and managing relevant tiddlers easier. This plugin provides a general approach to embedding dates and date-based links/menus within tiddler content.\n\nYou can ''specify a date using a combination of year, month, and day number values or mathematical expressions (such as "Y+1" or "D+30")'', and then just display it as formatted date text, or create a ''link to a 'dated tiddler''' for quick blogging, or create a ''popup menu'' containing the dated tiddler link plus links to ''tiddlers that were changed'' as well as any ''scheduled reminders'' for that date.\n!!!!!Usage\n<<<\nWhen installed, this plugin defines a macro: {{{<<date [mode] [date] [format] [linkformat]>>}}}. All of the macro parameters are optional and, in it's simplest form, {{{<<date>>}}}, it is equivalent to the ~TiddlyWiki core macro, {{{<<today>>}}}.\n\nHowever, where {{{<<today>>}}} simply inserts the current date/time in a predefined format (or custom format, using {{{<<today [format]>>}}}), the {{{<<date>>}}} macro's parameters take it much further than that:\n* [mode] is either ''display'', ''link'' or ''popup''. If omitted, it defaults to ''display''. This param let's you select between simply displaying a formatted date, or creating a link to a specific 'date titled' tiddler or a popup menu containing a dated tiddler link, plus links to changes and reminders.\n* [date] lets you enter ANY date (not just today) as ''year, month, and day values or simple mathematical expressions'' using pre-defined variables, Y, M, and D for the current year, month and day, repectively. You can display the modification date of the current tiddler by using the keyword: ''tiddler'' in place of the year, month and day parameters. Use ''tiddler://name-of-tiddler//'' to display the modification date of a specific tiddler. You can also use keywords ''today'' or ''filedate'' to refer to these //dynamically changing// date/time values. \n* [format] and [linkformat] uses standard ~TiddlyWiki date formatting syntax. The default is "YYYY.0MM.0DD"\n>^^''DDD'' - day of week in full (eg, "Monday"), ''DD'' - day of month, ''0DD'' - adds leading zero^^\n>^^''MMM'' - month in full (eg, "July"), ''MM'' - month number, ''0MM'' - adds leading zero^^\n>^^''YYYY'' - full year, ''YY'' - two digit year, ''hh'' - hours, ''mm'' - minutes, ''ss'' - seconds^^\n>^^//note: use of hh, mm or ss format codes is only supported with ''tiddler'', ''today'' or ''filedate'' values//^^\n* [linkformat] - specify an alternative date format so that the title of a 'dated tiddler' link can have a format that differs from the date's displayed format\n\nIn addition to the macro syntax, DatePlugin also provides a public javascript API so that other plugins that work with dates (such as calendar generators, etc.) can quickly incorporate date formatted links or popups into their output:\n\n''{{{showDate(place, date, mode, format, linkformat, autostyle, weekend)}}}'' \n\nNote that in addition to the parameters provided by the macro interface, the javascript API also supports two optional true/false parameters:\n* [autostyle] - when true, the font/background styles of formatted dates are automatically adjusted to show the date's status: 'today' is boxed, 'changes' are bold, 'reminders' are underlined, while weekends and holidays (as well as changes and reminders) can each have a different background color to make them more visibly distinct from each other.\n* [weekend] - true indicates a weekend, false indicates a weekday. When this parameter is omitted, the plugin uses internal defaults to automatically determine when a given date falls on a weekend.\n<<<\n!!!!!Examples\n<<<\nThe current date: <<date>>\nThe current time: <<date today "0hh:0mm:0ss">>\nToday's blog: <<date link today "DDD, MMM DDth, YYYY">>\nRecent blogs/changes/reminders: <<date popup Y M D-1 "yesterday">> <<date popup today "today">> <<date popup Y M D+1 "tomorrow">>\nThe first day of next month will be a <<date Y M+1 1 "DDD">>\nThis tiddler (DatePlugin) was last updated on: <<date tiddler "DDD, MMM DDth, YYYY">>\nThe SiteUrl was last updated on: <<date tiddler:SiteUrl "DDD, MMM DDth, YYYY">>\nThis document was last saved on <<date filedate "DDD, MMM DDth, YYYY at 0hh:0mm:0ss">>\n<<date 2006 07 24 "MMM DDth, YYYY">> will be a <<date 2006 07 24 "DDD">>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''DatePlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.05.09 [2.2.1]'' added "todaybg" handling to set background color of current date. Also, honor excludeLists tag when getting lists of tiddlers. Based on suggestions by Mark Hulme.\n''2006.05.05 [2.2.0]'' added "linkedbg" handling to set background color when a 'dated tiddler' exists. Based on a suggestion by Mark Hulme.\n''2006.03.08 [2.1.2]'' add 'override leadtime' flag param in call to findTiddlersWithReminders(), and add "Enter a title" default text to new reminder handler. Thanks to Jeremy Sheeley for these additional tweaks.\n''2006.03.06 [2.1.0]'' hasReminders() nows uses window.reminderCacheForCalendar[] when present. If calendar cache is not present, indexReminders() now uses findTiddlersWithReminders() with a 90-day look ahead to check for reminders. Also, switched default background colors for autostyled dates: reminders are now greenish ("c0ffee") and holidays are now reddish ("ffaace").\n''2006.02.14 [2.0.5]'' when readOnly is set (by TW core), omit "new reminders..." popup menu item and, if a "dated tiddler" does not already exist, display the date as simple text instead of a link.\n''2006.02.05 [2.0.4]'' added var to variables that were unintentionally global. Avoids FireFox 1.5.0.1 crash bug when referencing global variables\n''2006.01.18 [2.0.3]'' In 1.2.x the tiddler editor's text area control was given an element ID=("tiddlerBody"+title), so that it was easy to locate this field and programmatically modify its content. With the addition of configuration templates in 2.x, the textarea no longer has an ID assigned. To find this control we now look through all the child nodes of the tiddler editor to locate a "textarea" control where attribute("edit") equals "text", and then append the new reminder to the contents of that control.\n''2006.01.11 [2.0.2]'' correct 'weekend' override detection logic in showDate()\n''2006.01.10 [2.0.1]'' allow custom-defined weekend days (default defined in config.macros.date.weekend[] array)\nadded flag param to showDate() API to override internal weekend[] array\n''2005.12.27 [2.0.0]'' Update for TW2.0\nAdded parameter handling for 'linkformat'\n''2005.12.21 [1.2.2]'' FF's date.getYear() function returns 105 (for the current year, 2005). When calculating a date value from Y M and D expressions, the plugin adds 1900 to the returned year value get the current year number. But IE's date.getYear() already returns 2005. As a result, plugin calculated date values on IE were incorrect (e.g., 3905 instead of 2005). Adding +1900 is now conditional so the values will be correct on both browsers.\n''2005.11.07 [1.2.1]'' added support for "tiddler" dynamic date parameter\n''2005.11.06 [1.2.0]'' added support for "tiddler:title" dynamic date parameter\n''2005.11.03 [1.1.2]'' when a reminder doesn't have a specified title parameter, use the title of the tiddler that contains the reminder as "fallback" text in the popup menu. Based on a suggestion from BenjaminKudria.\n''2005.11.03 [1.1.1]'' Temporarily bypass hasReminders() logic to avoid excessive overhead from generating the indexReminders() cache. While reminders can still appear in the popup menu, they just won't be indicated by auto-styling the date number that is displayed. This single change saves approx. 60% overhead (5 second delay reduced to under 2 seconds).\n''2005.11.01 [1.1.0]'' corrected logic in hasModifieds() and hasReminders() so caching of indexed modifieds and reminders is done just once, as intended. This should hopefully speed up calendar generators and other plugins that render multiple dates...\n''2005.10.31 [1.0.1]'' documentation and code cleanup\n''2005.10.31 [1.0.0]'' initial public release\n''2005.10.30 [0.9.0]'' pre-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.date = {major: 2, minor: 2, revision: 1, date: new Date(2006,5,9)};\n//}}}\n\n//{{{\nconfig.macros.date = {\n format: "YYYY.0MM.0DD", // default date display format\n linkformat: "YYYY.0MM.0DD", // 'dated tiddler' link format\n linkedbg: "#babb1e", // "babble"\n todaybg: "#ffab1e", // "fable"\n weekendbg: "#c0c0c0", // "cocoa"\n holidaybg: "#ffaace", // "face"\n modifiedsbg: "#bbeeff", // "beef"\n remindersbg: "#c0ffee", // "coffee"\n holidays: [ "01/01", "07/04", "07/24", "11/24" ], // NewYearsDay, IndependenceDay(US), Eric's Birthday (hooray!), Thanksgiving(US)\n weekend: [ 1,0,0,0,0,0,1 ] // [ day index values: sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6 ]\n};\n//}}}\n\n//{{{\nconfig.macros.date.handler = function(place,macroName,params)\n{\n // do we want to see a link, a popup, or just a formatted date?\n var mode="display";\n if (params[0]=="display") { mode=params[0]; params.shift(); }\n if (params[0]=="popup") { mode=params[0]; params.shift(); }\n if (params[0]=="link") { mode=params[0]; params.shift(); }\n // get the date\n var now = new Date();\n var date = now;\n if (!params[0] || params[0]=="today")\n { params.shift(); }\n else if (params[0]=="filedate")\n { date=new Date(document.lastModified); params.shift(); }\n else if (params[0]=="tiddler")\n { date=store.getTiddler(story.findContainingTiddler(place).id.substr(7)).modified; params.shift(); }\n else if (params[0].substr(0,8)=="tiddler:")\n { var t; if ((t=store.getTiddler(params[0].substr(8)))) date=t.modified; params.shift(); }\n else {\n var y = eval(params.shift().replace(/Y/ig,(now.getYear()<1900)?now.getYear()+1900:now.getYear()));\n var m = eval(params.shift().replace(/M/ig,now.getMonth()+1));\n var d = eval(params.shift().replace(/D/ig,now.getDate()+0));\n date = new Date(y,m-1,d);\n }\n // date format with optional custom override\n var format=this.format; if (params[0]) format=params.shift();\n var linkformat=this.linkformat; if (params[0]) linkformat=params.shift();\n showDate(place,date,mode,format,linkformat);\n}\n//}}}\n\n//{{{\nwindow.showDate=showDate;\nfunction showDate(place,date,mode,format,linkformat,autostyle,weekend)\n{\n if (!mode) mode="display";\n if (!format) format=config.macros.date.format;\n if (!linkformat) linkformat=config.macros.date.linkformat;\n if (!autostyle) autostyle=false;\n\n // format the date output\n var title = date.formatString(format);\n var linkto = date.formatString(linkformat);\n\n // just show the formatted output\n if (mode=="display") { place.appendChild(document.createTextNode(title)); return; }\n\n // link to a 'dated tiddler'\n var link = createTiddlyLink(place, linkto, false);\n link.appendChild(document.createTextNode(title));\n link.title = linkto;\n link.date = date;\n link.format = format;\n link.linkformat = linkformat;\n\n // if using a popup menu, replace click handler for dated tiddler link\n // with handler for popup and make link text non-italic (i.e., an 'existing link' look)\n if (mode=="popup") {\n link.onclick = onClickDatePopup;\n link.style.fontStyle="normal";\n }\n\n // format the popup link to show what kind of info it contains (for use with calendar generators)\n if (!autostyle) return;\n if (hasModifieds(date))\n { link.style.fontStyle="normal"; link.style.fontWeight="bold"; }\n if (hasReminders(date))\n { link.style.textDecoration="underline"; }\n if(isToday(date))\n { link.style.border="1px solid black"; }\n\n if( (weekend!=undefined?weekend:isWeekend(date)) && (config.macros.date.weekendbg!="") )\n { place.style.background = config.macros.date.weekendbg; }\n if(isHoliday(date)&&(config.macros.date.holidaybg!=""))\n { place.style.background = config.macros.date.holidaybg; }\n if (hasModifieds(date)&&(config.macros.date.modifiedsbg!=""))\n { place.style.background = config.macros.date.modifiedsbg; }\n if (store.tiddlerExists(linkto)&&(config.macros.date.linkedbg!=""))\n { place.style.background = config.macros.date.linkedbg; }\n if (hasReminders(date)&&(config.macros.date.remindersbg!=""))\n { place.style.background = config.macros.date.remindersbg; }\n if(isToday(date)&&(config.macros.date.todaybg!=""))\n { place.style.background = config.macros.date.todaybg; }\n}\n//}}}\n\n//{{{\nfunction isToday(date) // returns true if date is today\n { var now=new Date(); return ((now-date>=0) && (now-date<86400000)); }\n\nfunction isWeekend(date) // returns true if date is a weekend\n { return (config.macros.date.weekend[date.getDay()]); }\n\nfunction isHoliday(date) // returns true if date is a holiday\n{\n var longHoliday = date.formatString("0MM/0DD/YYYY");\n var shortHoliday = date.formatString("0MM/0DD");\n for(var i = 0; i < config.macros.date.holidays.length; i++) {\n var holiday=config.macros.date.holidays[i];\n if (holiday==longHoliday||holiday==shortHoliday) return true;\n }\n return false;\n}\n//}}}\n\n//{{{\n// Event handler for clicking on a day popup\nfunction onClickDatePopup(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var popup = createTiddlerPopup(this);\n if(popup) {\n // always show dated tiddler link (or just date, if readOnly) at the top...\n if (!readOnly || store.tiddlerExists(this.date.formatString(this.linkformat)))\n createTiddlyLink(popup,this.date.formatString(this.linkformat),true);\n else\n createTiddlyText(popup,this.date.formatString(this.linkformat));\n addModifiedsToPopup(popup,this.date,this.format);\n addRemindersToPopup(popup,this.date,this.linkformat);\n }\n scrollToTiddlerPopup(popup,false);\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n//{{{\nfunction indexModifieds() // build list of tiddlers, hash indexed by modification date\n{\n var modifieds= { };\n var tiddlers = store.getTiddlers("title","excludeLists");\n for (var t = 0; t < tiddlers.length; t++) {\n var date = tiddlers[t].modified.formatString("YYYY0MM0DD")\n if (!modifieds[date])\n modifieds[date]=new Array();\n modifieds[date].push(tiddlers[t].title);\n }\n return modifieds;\n}\nfunction hasModifieds(date) // returns true if date has modified tiddlers\n{\n if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();\n return (config.macros.date.modifieds[date.formatString("YYYY0MM0DD")]!=undefined);\n}\n\nfunction addModifiedsToPopup(popup,when,format)\n{\n if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n var mods = config.macros.date.modifieds[when.formatString("YYYY0MM0DD")];\n if (mods) {\n mods.sort();\n var e=createTiddlyElement(popup,"div",null,null,"changes:");\n for(var t=0; t<mods.length; t++) {\n var link=createTiddlyLink(popup,mods[t],false);\n link.appendChild(document.createTextNode(indent+mods[t]));\n createTiddlyElement(popup,"br",null,null,null);\n }\n }\n}\n//}}}\n\n//{{{\nfunction indexReminders(date,leadtime) // build list of tiddlers with reminders, hash indexed by reminder date\n{\n var reminders = { };\n if(window.findTiddlersWithReminders!=undefined) { // reminder plugin is installed\n // DEBUG var starttime=new Date();\n var t = findTiddlersWithReminders(date, [0,leadtime], null, null, 1);\n for(var i=0; i<t.length; i++) reminders[t[i].matchedDate]=true;\n // DEBUG var out="Found "+t.length+" reminders in "+((new Date())-starttime+1)+"ms\sn";\n // DEBUG out+="startdate: "+date.toLocaleDateString()+"\sn"+"leadtime: "+leadtime+" days\sn\sn";\n // DEBUG for(var i=0; i<t.length; i++) { out+=t[i].matchedDate.toLocaleDateString()+" "+t[i].params.title+"\sn"; }\n // DEBUG alert(out);\n }\n return reminders;\n}\n\nfunction hasReminders(date) // returns true if date has reminders\n{\n if (window.reminderCacheForCalendar)\n return window.reminderCacheForCalendar[date]; // use calendar cache\n if (!config.macros.date.reminders)\n config.macros.date.reminders = indexReminders(date,90); // create a 90-day leadtime reminder cache\n return (config.macros.date.reminders[date]);\n}\n\nfunction addRemindersToPopup(popup,when,format)\n{\n if(window.findTiddlersWithReminders==undefined) return; // reminder plugin not installed\n\n var indent = String.fromCharCode(160)+String.fromCharCode(160);\n var reminders=findTiddlersWithReminders(when, [0,31],null,null,1);\n var e=createTiddlyElement(popup,"div",null,null,"reminders:"+(!reminders.length?" none":""));\n for(var t=0; t<reminders.length; t++) {\n link = createTiddlyLink(popup,reminders[t].tiddler,false);\n var diff=reminders[t].diff;\n diff=(diff<1)?"Today":((diff==1)?"Tomorrow":diff+" days");\n var txt=(reminders[t].params["title"])?reminders[t].params["title"]:reminders[t].tiddler;\n link.appendChild(document.createTextNode(indent+diff+" - "+txt));\n createTiddlyElement(popup,"br",null,null,null);\n }\n if (readOnly) return; // omit "new reminder..." link\n var link = createTiddlyLink(popup,indent+"new reminder...",true); createTiddlyElement(popup,"br");\n var title = when.formatString(format);\n link.title="add a reminder to '"+title+"'";\n link.onclick = function() {\n // show tiddler editor\n story.displayTiddler(null, title, 2, null, null, false, false);\n // find body 'textarea'\n var c =document.getElementById("tiddler" + title).getElementsByTagName("*");\n for (var i=0; i<c.length; i++) if ((c[i].tagName.toLowerCase()=="textarea") && (c[i].getAttribute("edit")=="text")) break;\n // append reminder macro to tiddler content\n if (i<c.length) {\n if (store.tiddlerExists(title)) c[i].value+="\sn"; else c[i].value="";\n c[i].value += "<<reminder";\n c[i].value += " day:"+when.getDate();\n c[i].value += " month:"+(when.getMonth()+1);\n c[i].value += " year:"+when.getFullYear();\n c[i].value += ' title:"Enter a title" >>';\n }\n };\n}\n//}}}\n
// // date plugin calendar colors\n//{{{\nconfig.macros.date.holidays=[ "01/01", "07/04", "07/24", "11/24" ]; // NewYearsDay, IndependenceDay(US), Eric's Birthday (hooray!), Thanksgiving(US)\nconfig.macros.date.weekend=[ 1,0,0,0,0,0,1 ]; // day index values: sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6\nconfig.macros.date.format="YYYY.0MM.0DD"; // default date display format\nconfig.macros.date.linkformat="YYYY.0MM.0DD"; // 'dated tiddler' link format\nconfig.macros.date.weekendbg="#c0c0c0";\nconfig.macros.date.holidaybg="#ffaace";\nconfig.macros.date.modifiedsbg="#bbeeff";\nconfig.macros.date.linkedbg="#babb1e";\nconfig.macros.date.remindersbg="#c0ffee";\n//}}}\n
[[欢迎]]\n
/***\n''DeliciousPlayTaggerPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#DeliciousPlayTaggerPlugin\nadapted from original source: http://del.icio.us/js/playtagger\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\n!!!!!Usage\n\nThis plugin defines an object class "Delicious.Mp3", which defines methods for adding the del.icio.us "play tagger" to any mp3 URLs embedded in tiddler content. Simply place """<<deliciousPlayTagger>>""" into the tiddler content ''following any links to mp3 URLs'', and they will be 'del.icio.us'ly tagged to be played with the flash player.\n\n!!!!!Example\nMy favorite [[Friday Night Music|http://www.FridayNightMusic.com]] "Free Jazz" improv compositions:\nhttp://www.elsdesign.com/fnm/audio/030502-5.mp3 ("In The Shadows")\nhttp://www.elsdesign.com/fnm/audio/001103-4.mp3 ("The Sky's The Limit")\nhttp://www.elsdesign.com/fnm/audio/020830-6.mp3 ("Good Morning, Elijah")\n\n<<deliciousPlayTagger>>\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''DeliciousPlayTaggerPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for this plugin^^\n<<<\n!!!!!Revision History\n<<<\n''2006.02.21 [1.0.0]''\ninitial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\nadapted from original source code located at: http://del.icio.us/js/playtagger\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.deliciousPlayTagger= {major: 1, minor: 0, revision: 0, date: new Date(2006,2,21)};\n\nconfig.macros.deliciousPlayTagger = { };\nconfig.macros.deliciousPlayTagger.handler = function(place,macroName,params) { Delicious.Mp3.go(place); }\n\nif(typeof(Delicious) == 'undefined') Delicious = {}\nDelicious.Mp3 = {\n playimg: null,\n player: null,\n go: function(place) { // ELS 2006.02.21: added 'place' param\n if (!place) var place=document;\n var all = place.getElementsByTagName('a')\n for (var i = 0, o; o = all[i]; i++) {\n if(o.href.match(/\s.mp3$/i)) {\n var img = document.createElement('img')\n img.src = 'http://del.icio.us/static/img/mp3/play.gif'; img.title = 'listen'\n img.height = img.width = 12\n img.style.marginRight = '0.5em'\n img.style.cursor = 'pointer'\n img.onclick = Delicious.Mp3.makeToggle(img, o.href)\n o.parentNode.insertBefore(img, o)\n }}},\n toggle: function(img, url) {\n if (Delicious.Mp3.playimg == img) Delicious.Mp3.destroy()\n else {\n if (Delicious.Mp3.playimg) Delicious.Mp3.destroy()\n var a = img.nextSibling, c=''\n if (document.defaultView && document.defaultView.getComputedStyle) c = document.defaultView.getComputedStyle(a,null).getPropertyValue('color')\n else if (a.currentStyle) c = a.currentStyle['color']\n c = c.replace(/^rgb|[ ()]/g, '')\n var hex = c.match(/^#?([a-f0-9]{6})$/), hexSm = c.match(/^#?([a-f0-9]{3})$/), rgb = c.match(/^([0-9]+),([0-9]+),([0-9]+)$/)\n if (rgb) { var c16 = "0123456789abcdef", c=''; for(var i=1,d;d=rgb[i];i++) { var j=d%16; c=c+c16.charAt((d-j)/16)+c16.charAt(j) } }\n else if (hex) c = hex[1]\n else if (hexSm) c = hexSm[1].charAt(0) + hexSm[1].charAt(0) + hexSm[1].charAt(1) + hexSm[1].charAt(1) + hexSm[1].charAt(2) + hexSm[1].charAt(2)\n else c = "000000"\n img.src = 'http://del.icio.us/static/img/mp3/stop.gif'; Delicious.Mp3.playimg = img;\n Delicious.Mp3.player = document.createElement('span')\n Delicious.Mp3.player.innerHTML = '<object style="vertical-align:bottom;margin-right:0.2em" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"' +\n 'codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"' +\n 'width="100" height="14" id="player" align="middle">' +\n '<param name="wmode" value="transparent" />' +\n '<param name="allowScriptAccess" value="sameDomain" />' +\n '<param name="flashVars" value="theLink='+url+'&amp;fontColor='+c+'" />' +\n '<param name="movie" value="http://del.icio.us/static/swf/playtagger.swf" /><param name="quality" value="high" />' +\n '<embed style="vertical-align:bottom;margin-right:0.2em" src="http://del.icio.us/static/swf/playtagger.swf" flashVars="theLink='+url+'&amp;fontColor='+c+'"'+\n 'quality="high" wmode="transparent" width="100" height="14" name="player"' +\n 'align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"' +\n ' pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>'\n img.parentNode.insertBefore(Delicious.Mp3.player, img.nextSibling)\n }},\n destroy: function() {\n Delicious.Mp3.playimg.src = 'http://del.icio.us/static/img/mp3/play.gif'; Delicious.Mp3.playimg = null\n Delicious.Mp3.player.removeChild(Delicious.Mp3.player.firstChild); Delicious.Mp3.player.parentNode.removeChild(Delicious.Mp3.player); Delicious.Mp3.player = null\n },\n makeToggle: function(img, url) { return function(){ Delicious.Mp3.toggle(img, url) }}\n}\n\n//}}}
<script label="display all tiddlers">\n var tiddlers=store.getTiddlers('title');\n var titles=[];\n for (var t=0;t<tiddlers.length; t++)\n titles.push(tiddlers[t].title);\n story.closeAllTiddlers();\n story.displayTiddlers(null,titles);\n return false;\n</script>
<script>\n if (!story.findContainingTiddler(place)) return;\n var t=story.findContainingTiddler(place); // get the tiddler element\n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"viewer")) t.ondblclick=null; // disable double-click\n</script>
<script>\n var t=story.findContainingTiddler(place); // get the tiddler element\n if (!t) return;\n // if CollapseTiddlerPlugin is installed, double-click on title to 'focus' a tiddler\n if (config.commands.collapseOthers.handler!=undefined)\n t.ondblclick=function(){config.commands.collapseOthers.handler(null,place,t.id.substr(7));}\n</script>
[[StyleSheetAdjustments]]\n[[BrightText]]\n/* ==== Edge of Night ==== */\n/*{{{*/\nbody\n { background-image: url('[[Edge of Night Background]]'); background-color:#113; }\n.menubox\n { background-image: none; background-color: #002; }\n#mainMenu .menubox\n { background-image: url('[[Edge of Night Background]]'); }\n.viewer\n { background-image: url('[[EdgeMarbleBlack]]'); background-color:#111; border: 1px solid #999; -moz-border-radius:1em; padding:1em; }\n.header\n { background-image: none; background-color:transparent; color:#ccf; border:0; }\n#siteSubtitle\n { color:#0c0; }\n.floatingPanel, .attachPanel, #importPanel, #exportPanel,\n { background: #eee; background-image: url('[[TexturesParchmentGray]]');}\n.floatingPanel a, .attachPanel a, #importPanel a, #exportPanel a, \n.floatingPanel .button, .attachPanel .button, #importPanel .button, #exportPanel .button,\n.floatingPanel .tiddlyLinkExisting, .attachPanel .tiddlyLinkExisting, #importPanel .tiddlyLinkExisting, #exportPanel .tiddlyLinkExisting,\n { color:#009; }\n.siteMenu .floatingPanel, #messageArea \n { background: #eef; }\n.tiddlyCard { background:#ffd; }\n.groupbox { background:#ddf; }\n\n.viewer h1,.viewer h2,.viewer h3,.viewer h4,.viewer h5 { background: #666; color:#fff; }\n\n#sidebarTabs .tabContents \n { background-image:none; background-color:#113; color:#fff; }\n#sidebarTabs .tabContents a, #sidebarTabs .tabContents .button, #sidebarTabs .tabContents .tiddlyLinkExisting\n { color:#99f; }\n/*}}}*/
| source file|{{{sunset.jpg}}}|\n| attached on|20 May 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[sunset.jpg|sunset.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|Edge of Night Background]] or [img[tooltip|Edge of Night Background][link]]}}}\n[img[tooltip|Edge of Night Background]]\n<<<\n
| source file|{{{Edgemarble_black.jpg}}}|\n| attached on|14 July 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[Edgemarble_black.jpg|Edgemarble_black.jpg]]|\nimage\n<<<\n\n<<<\n
/% usage:\n <<tiddler ExpandSlidersScript with: elementID linkcolorCSS >>\n\n%/<script label="expand all">\n // if 'in a tiddler', expand all sliders... otherwise, expand based on passed in element ID\n var here=story.findContainingTiddler(place);\n if (!here) {\n if ("$1"=="$"+"1") { alert("ExpandSlidersScript: not in a tiddler, please use 'with: elementID' syntax"); return; }\n var here=document.getElementById("$1");\n if (!here) { alert("ExpandSlidersScript: unknown elementID: '$1'"); return; }\n }\n var elems=here.getElementsByTagName("*");\n var state="";\n for (var e=0; e<elems.length; e++) {\n var p=elems[e].sliderPanel;\n if (p && p.className=="sliderPanel") {\n if (!state.length) var state=p.style.display;\n if (p.style.display==state) window.onClickNestedSlider({target:elems[e]});\n }\n }\n place.innerHTML=state=="none"?"collapse all":"expand all"\n return false;\n</script><script>\n place.lastChild.className="button";\n if ("$2"!="$"+"2") place.lastChild.style.color="$2";\n</script>
/%\ndescription: displays URL in an IFRAME within a floating panel\nusage: <<tiddler FramedURL with: URL>>\n%/\n<script>\n var url="$1";\n if (url=="$"+"1") {\n var url=prompt("please enter a URL");\n if (!url || !url.length) return;\n }\n var out="+++^70%^["+url+"]...";\n out+="<<moveablePanel>>"+url+"\sn";\n out+="<html><iframe src='"+url+"' width='100%' height='500'></iframe></html>";\n out+="===";\n return out;\n</script>
欢迎\n----\n好啊\n----\nHI\n----\n嘿\n----\n你好\n----\n呵呵\n----\n好天气\n----\n今天好吗\n----\nHOHO\n----\n好呀\n----\n欢迎光临\n----\n谢谢您的到访\n----\n您来了呀\n----\n欢迎浏览\n----\nHello\n----\n好运气\n----\n开网页费了很长时间吗\n----\n嘻嘻\n----\n辛苦了\n----\n真帅呀\n----\n你今天很阳光阿\n----\n喜欢这里吗\n----\n常来呀\n----\n来关心我吗\n----\n我说你今天买彩票会中奖\n----\n你有一颗善良的心
/***\n''HTML Formatting Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#HTMLFormattingPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nThe shorthand Wiki-style formatting syntax of ~TiddlyWiki is very convenient and enables most content to be reasonably well presented. However, there are times when tried-and-true HTML formatting syntax allows more more precise control of the content display.\n\nWhen HTML formatting syntax is embedded within a tiddler (in between {{{<}}}{{{html>}}} and {{{<}}}{{{/html>}}} markers) TiddlyWiki passes this content to the browser for processing as 'native' HTML. However, TiddlyWiki does not also process the HTML source content for any embedded wiki-formatting syntax it may contain. This means that while you can use HTML formatted content, you cannot mix wiki-formatted content within the HTML formatting.\n!!!!!Usage\n<<<\nThe ~HTMLFormatting plugin allows you to freely ''mix wiki-style formatting syntax within HTML formatted content'' by extending the action of the standard TiddlyWiki formatting handler.\n\nWhen a tiddler is about to be displayed, ~TiddlyWiki looks for tiddler content contained within ''<{{{html}}}>'' and ''<{{{/html}}}>'' HTML tags. This content (if any) is passed directly to the browser's internal "rendering engine" to process as ~HTML-formatted content. Once the HTML formatting has been processed, all the pieces of text occuring in between the HTML formatting are then processed by the ~TiddlyWiki rendering engine, one piece at a time, so that normal wiki-style formatting can be applied to the individual text pieces.\n<<<\n!!!!!Line breaks\n<<<\nOne major difference between Wiki formatting and HTML formatting is how "line breaks" are processed. Wiki formatting treats all line breaks as literal content to be displayed //as-is//. However, because HTML normally ignores line breaks and actually processes them as simple "word separators" instead, many people who write HTML include extra line breaks in their documents, just to make the "source code" easier to read.\n\nEven though you can use HTML tags within your tiddler content, the default treatment for line breaks still follows the Wiki-style rule (i.e., all new lines are displayed as-is). When adding HTML content to a tiddler (especially if you cut-and-paste it from another web page), you should take care to avoid adding extra line breaks to the text.\n\nIf removing all the extra line breaks from your HTML content would be a big hassle, you can quickly //override the default Wiki-style line break rule// so that the line breaks use the standard HTML rules instead. Placing a ''<{{{hide linebreaks}}}>'' tag within the tiddler's HTML content changes all line breaks to spaces before rendering the content, so that the literal line breaks will be processed as simple word-breaks instead.\n\nNote: this does //not// alter the actual tiddler content that is stored in the document, just the manner in which it is displayed. Any line breaks contained in the tiddler will still be there when you edit its content. Also, to include a literal line break when the ''<{{{hide linebreaks}}}>'' tag is present, you will need to use a ''<{{{br}}}>'' or ''<{{{p}}}>'' HTML tag instead of simply typing a line break.\n<<<\n!!!!!How it works\n<<<\nThe TW core support for HTML does not let you put ANY wiki-style syntax (including TW macros) *inside* the <html>...</html> block. Everything\nbetween <html> and </html> is handed to the browser for processing and that is it. Fortunately, this plugin ADDS the ability to let you put wiki-syntax (including macros) inside the html. It does this by first giving the tiddler source content to the browser to process the HTML, and then handling any wiki-based syntax that remains afterward.\n\nHowever, not all wiki syntax can be safely passed through the browser's parser. Specifically, any TW macros inside the HTML will get 'eaten' by the browser since the macro brackets, """<<...>>""" use the "<" and ">" that normally delimit the HTML/XML syntax recognized by the browser's parser.\n\nSimilarly, you can't use InlineJavascript within the HTML because the """<script>...</script>""" syntax will also be consumed by the browser and there will be nothing left to process afterward. Note: unfortunately, even though the browser removes the """<script>...</script>""" sequence, it doesn't actually execute the embedded javascript code that it removes, so any scripts contained inside of <html> blocks in TW are currently being ignored. :-(\n\nAs a work-around to allow TW *macros* (but not inline scripts) to exist inside of <html> formatted blocks of content, the plugin first converts the """<<""" and """>>""" into "%%(" and ")%%", making them "indigestible" so they can pass unchanged through the belly of the beast (the browser's HTML parser).\n\nAfter the browser has done its job, the wiki syntax sequences (including the "undigested" macros) are contained in #text nodes in the browser-generated DOM elements. The plugin then recursively locates and processes each #text node, converts the %%( and )%% back into """<< and >>""", passes the result to wikify() for further rendering of the wiki-formatted syntax into a containing SPAN that replaces the previous #text node. At the end of this process, none of the encoded %%( and )%% sequences remain in the rendered tiddler output.\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''HTMLFormattingPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for HTMLFormatting handling^^\n<<<\n!!!!!Revision History\n<<<\n''2006.05.28 [2.1.3]''\nin wikifyTextNodes(), decode the *value* of TEXTAREA nodes, but don't wikify() its children. (thanks to "ayj" for bug report)\n''2006.02.19 [2.1.2]''\nin wikifyTextNodes(), put SPAN element into tiddler DOM (replacing text node), BEFORE wikifying the text content. This ensures that the 'place' passed to any macros is correctly defined when the macro is evaluated, so that calls to story.findContainingTiddler(place) will work as expected. (Thanks for bug report from GeoffSlocock)\n''2006.02.05 [2.1.1]''\nwrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2005.12.01 [2.1.0]''\ndon't wikify #TEXT nodes inside SELECT and TEXTAREA elements\n''2005.11.06 [2.0.1]''\ncode cleanup\n''2005.10.31 [2.0.0]''\nreplaced hijack wikify() with hijack config.formatters["html"] and simplified recursive WikifyTextNodes() code\n''2005.10.09 [1.0.2]''\ncombined documentation and code into a single tiddler\n''2005.08.05 [1.0.1]''\nmoved HTML and CSS definitions into plugin code instead of using separate tiddlers\n''2005.07.26 [1.0.1]''\nRe-released as a plugin.\nAdded <{{{html}}}>...</{{{nohtml}}}> and <{{{hide newlines}}}> handling\n''2005.07.20 [1.0.0]''\nInitial Release (as code adaptation)\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.HTMLFormatting = {major: 2, minor: 1, revision: 3, date: new Date(2006,5,28)};\n\n// find the formatter for HTML and replace the handler\ninitHTMLFormatter();\nfunction initHTMLFormatter()\n{\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="html"; i++);\n if (i<config.formatters.length) config.formatters[i].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 var html=lookaheadMatch[1];\n // optionally suppress wiki-style literal handling of newlines\n // strip any carriage returns added by Internet Explorer's textarea edit field\n // encode newlines as \sn so Internet Explorer's HTML parser won't eat them\n // encode macro brackets (<< and >>) so HTML parser won't eat them\n if (html.indexOf('<hide linebreaks>')!=-1) html=html.replace(regexpNewLine,' ');\n html=html.replace(regexpCarriageReturn,'');\n html=html.replace(regexpNewLine,'\s\sn');\n html=html.replace(/<</g,'%%(').replace(/>>/g,')%%');\n // create span to hold HTML\n // parse HTML and normalize the results\n // walk node tree and call wikify() on each text node\n var e = createTiddlyElement(w.output,"span");\n e.innerHTML=html;\n e.normalize(); \n wikifyTextNodes(e);\n // advance to next parse position\n w.nextMatch=lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n}\n\n// wikify text nodes remaining after HTML content is processed (pre-order recursion)\nfunction wikifyTextNodes(theNode)\n{\n // textarea node doesn't get wikified, just decoded... \n if (theNode.nodeName.toLowerCase()=='textarea')\n theNode.value=theNode.value.replace(/\s%%\s(/g,'<<').replace(/\s)\s%%/g,'>>').replace(regexpBackSlashEn,'\sn');\n else for (var i=0;i<theNode.childNodes.length;i++) {\n var theChild=theNode.childNodes.item(i);\n if (theChild.nodeName.toLowerCase()=='option') continue;\n if (theChild.nodeName.toLowerCase()=='select') continue;\n wikifyTextNodes(theChild);\n if (theChild.nodeName=='#text') {\n var txt=theChild.nodeValue;\n // decode macro brackets and newlines\n txt=txt.replace(/\s%%\s(/g,'<<').replace(/\s)\s%%/g,'>>').replace(regexpBackSlashEn,'\sn');\n // replace text node with wikified() span\n var newNode=createTiddlyElement(null,"span");\n theNode.replaceChild(newNode,theChild);\n wikify(txt,newNode);\n }\n }\n}\n//}}}\n
/***\n|Name|HaloscanMacro|\n|Created by|JimSpeth (modefyied by Bram Chen)|\n|Location|http://end.com/~speth/HaloscanMacro.html|\n|Version|1.0.3|\n|Requires|~TW2.x|\n\n!Description\nComment and trackback support for TiddlyWiki (via Haloscan).\n\n!History\n* 15-Fex-06, version 1.0.3 Fixed 'URI encode' of id by bram\n* 12-Feb-06, version 1.0.2 Fixed 'var declaration' issus by bram\n* 31-Jan-06, version 1.0.1, fixed display of counts for default tiddlers\n* 30-Jan-06, version 1.0, initial release\n\n!Examples\n|!Source|!Output|h\n|{{{<<haloscan>>}}}|<<haloscan>>|\n|{{{<<haloscan commentCount>>}}}|<<haloscan commentCount>>|\n|{{{<<haloscan trackbackCount>>}}}|<<haloscan trackbackCount>>|\n\n!Installation\nRegister for a [[Haloscan|http://www.haloscan.com]] account. It's free and painless.\nInstall the HaloscanMacro in a new tiddler with a tag of systemConfig (save and reload to activate).\nIn the macro configuration code (below), change //YourName// to your Haloscan account name.\nUse the macro somewhere in a tiddler (see ViewTemplate for an example).\n\n!Notes\nCommunication with their servers is asynchronous, and until it has completed, the counts will be displayed as question marks.\n\n\n!Code\n***/\n//{{{\nversion.extensions.haloscan = {major: 1, minor: 0, revision: 4, date: new Date("Feb 16, 2006")};\n\nvar count, hs = [], hstb = [];\nconfig.macros.haloscan = {\n account: "avx",\n baseURL: "http://www.haloscan.com/load/",\n haloscanLoaded: false,\n load: function (){\n var haloscanLoaded = config.macros.haloscan.haloscanLoaded;\n if (haloscanLoaded){\n return;\n }\n var account = config.macros.haloscan.account;\n if (!account || (account == "YourName")) {\n account = store.getTiddlerText("SiteTitle");\n }\n var el = document.createElement('script');\n el.language = 'JavaScript'; \n el.type = 'text/javascript'; \n el.src = config.macros.haloscan.baseURL + account;\n document.documentElement.childNodes[0].appendChild(el);\n haloscanLoaded = true;\n },\n \n commentCount: function (id){\n try {count = hs[id];}\n catch (e) {count = "?";}\n if (count === undefined) {\n count = 0;\n }\n return String(count);\n },\n\n trackbackCount: function (id){\n try {count = hstb[id];}\n catch (e) {count = "?";}\n if (count === undefined) {\n count = 0;\n }\n return String(count);\n }\n};\n\nconfig.macros.haloscan.handler = function (place,macroName,params,wikifier,paramString,tiddler)\n{\n var id = story.findContainingTiddler(place).id.substr(7);\n id = encodeURIComponent(String.encodeTiddlyLink(id));\n var result = "";\n \n var account = config.macros.haloscan.account;\n if (!account || (account == "YourName")) {\n account = store.getTiddlerText("SiteTitle");\n }\n switch (params.length)\n {\n case 0:\n // JGS - try using HaloScan(id) and HaloScanTB(id)\n var commentURL = "http://www.haloscan.com/comments/" + account + "/" + id + "/";\n var trackbackURL = "http://www.haloscan.com/tb/" + account + "/" + id + "/";\n// result = "[[评论|" + commentURL + "]] (<<haloscan commentCount>>) or [[引用|" + trackbackURL + "]] (<<haloscan trackbackCount>>)";\n result ="+++[评论]: <html><iframe src=" + commentURL + " width= 480 height = 240></iframe></html>===(<<haloscan commentCount>>) ";\n result +="+++[引用]: <html><iframe src=" + trackbackURL + " width= 480 height = 240></iframe></html>===(<<haloscan trackbackCount>>) ";\n break;\n case 1: \n if (params[0] == "commentCount") {\n result = config.macros.haloscan.commentCount(id);\n }\n else if (params[0] == "trackbackCount") {\n result = config.macros.haloscan.trackbackCount(id);\n }\n else {\n result = "Error: unknown argument: " + params[0];\n }\n break;\n default:\n result = "Error: bad argument count";\n break;\n }\n\n if (result == "?") {\n var refreshCount = "story.forEachTiddler(function(title){story.refreshTiddler(title,DEFAULT_VIEW_TEMPLATE,true)});"\n setTimeout(refreshCount, 500);\n }\n\n wikify(result, place);\n // JGS - use createTiddlyElement(place,"span",null,null,result);\n\n};\n\nconfig.macros.haloscan.load();\n\n//}}}\n\n
<script>\n var s=place.parentNode.style;\n s.backgroundImage="none";\n s.backgroundColor="transparent"\n s.borderColor="transparent";\n s.borderWidth=0;\n s.margin=0;\n s.padding=0;\n</script>
<script>\n // get the tiddler element\n var t=story.findContainingTiddler(place);\n if (t && t.id!="tiddlerHideTiddlerSubtitle") \n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"subtitle"))\n t.childNodes[i].style.display="none";\n</script>
<script>\n var t=story.findContainingTiddler(place);\n if (t && t.id!="tiddlerHideTiddlerTags")\n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"tagging")||hasClass(t.childNodes[i],"tagged"))\n t.childNodes[i].style.display="none";\n</script>
<script>\n // get the tiddler element\n var t=story.findContainingTiddler(place);\n if (t && t.id!="tiddlerHideTiddlerTitle") \n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"title")||hasClass(t.childNodes[i],"subtitle"))\n t.childNodes[i].style.display="none";\n</script>
<script>\n var t=story.findContainingTiddler(place);\n if (t && t.id!="tiddlerHideTiddlerToolbar")\n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"toolbar"))\n t.childNodes[i].style.display="none";\n</script>
/***\n''InlineJavascriptPlugin for ~TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#InlineJavascriptPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\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.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: 1, date: new Date(2006,6,1)};\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]+"};_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]+"};_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
{{menubox{{{fine{{{nomal{\n{{nowrap{+++(changes)[相关链接:|LINKS,链接友站]...\n[[叶落尘天博客|http://avxx.blogspot.com/]]\n[[kyle xy中文网|http://kylexycn.googlepages.com]]\n[[Roswell中文网|http://roswellcn.googlepages.com]]\n\n[[鹤影白沙|http://wangchanghe.googlepages.com/]]\n[[GooglePages网导|www.0123456789.googlepages.com/]]\n[[lever'shome|http://cnlever.googlepages.com/]]\n[[纯粹个人页|http://tome227.googlepages.com/]]\n\n===\n}}}/%
<<tiddler SiteMenuLeftSidebar>>\n<<tiddler DoubleClickDisable>>\n<html><script src="http://www.google-analytics.com/urchin.js" type="text/javascript">\n</script>\n<script type="text/javascript">\n_uacct = "UA-348075-3";\nurchinTracker();\n</script></html>\n<<tiddler LINKS>>
<html><form id="playerform_$1" style="margin:0;padding:0"\n onsubmit="config.macros.player.loadURL(null,'player_$1',null,this.url.value,this.w.value,this.h.value,this.ctrls.checked);return false;"><!--\n--><nobr><select size="1" style="font-size:8pt;width:30%"\n onchange="this.form.url.value=this.value; config.macros.player.loadURL(null,'player_$1', null, this.form.url.value, this.form.w.value, this.form.h.value, this.form.ctrls.checked);">\n<option value="">Favorites:</option>\n\n<!-- BEGIN FAVORITES -->\n<option value="http://www.nccbuscc.org/cchd/povertyusa/tour.swf">&nbsp; "PovertyUSA" - WATCH THIS!</option>\n<option value="http://wolfram.org/media/jack_20050310_cleaned.mov">&nbsp; Jack W counts (1yr old)</option>\n<option value="http://www.kulakswoodshed.com/high.asx">&nbsp; Kulak's Woodshed: Live/Recorded acoustic music</option>\n<!-- insertion marker - do not remove this comment -->\n<option value="">webcams...</option>\n<option value="http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx">&nbsp; Times Square</option>\n<option value="http://www.mbayaq.org/media/STRM/mba_mbay.asx">&nbsp; Monterey Bay</option>\n<option value="http://www.mbayaq.org/media/strm/mba_shark.asx">&nbsp; Monterey Aquarium - Sharks</option>\n<option value="http://www.aroundtownnc.com/wvx/beachcam.wvx">&nbsp; Wrightsville Beach, North Carolina</option>\n<option value="http://www.terena.nl/~dick/cam2.asx">&nbsp; Koningsplein, Amsterdam</option>\n<option value="http://195.6.173.164/liensmedias/webcam.asx">&nbsp; Corsica</option>\n<option value="">news...</option>\n<option value="http://www.bloomberg.com/streams/video/LiveBTV200.ram">&nbsp; Bloomberg Business News</option>\n<option value="http://www.bbc.co.uk/london/realmedia/news/tvnews.ram">&nbsp; BBC News - London</option>\n<option value="http://www.bbc.co.uk/newsa/n5ctrl/summaries/entertain/bb_liquid_news.ram">&nbsp; BBC News - Entertainment</option>\n<option value="">movies (AmericaFree.TV)...</option>\n<option value="http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov">&nbsp; Classic Comedy</option>\n<option value="http://www.americafree.tv/unicast_mov/AmericaFreeTVClassics.mov">&nbsp; Classic Movies</option>\n<option value="http://www.americafree.tv/unicast_mov/AmericaFreeTVDimensionB.mov">&nbsp; "B" Movies</option>\n<option value="">science/education...</option>\n<option value="http://www.scctv.net/annenberg_broadband.asx">&nbsp; PBS: Annenberg/CPB</option>\n<option value="http://science.ksc.nasa.gov/video/nasatv/nasatv.asx">&nbsp; NASA TV</option>\n<option value="">government...</option>\n<option value="http://play.rbn.com/play.asx?url=cspan/cspan/wmlive/cspan1v.asf&proto=mms?mswmext=.asx">&nbsp; C-SPAN 1</option>\n<option value="http://play.rbn.com/play.asx?url=cspan/cspan/wmlive/cspan2v.asf&proto=mms?mswmext=.asx">&nbsp; C-SPAN 2</option>\n<option value="http://play.rbn.com/play.asx?url=cspan/cspan/wmlive/cspan3v.asf&proto=mms?mswmext=.asx">&nbsp; C-SPAN 3</option>\n<option value="">games...</option>\n<option value="http://www.planetdan.net/pics/misc/georgerag.swf">&nbsp; Rag Doll</option>\n<option value="http://www.80smusiclyrics.com/games/asteroids/asteroids.swf">&nbsp; Asteroids</option>\n<option value="http://www.80smusiclyrics.com/games/pacman/pacman.swf">&nbsp; PacMan</option>\n<option value="http://www.aftergames.com/games/pp_tetris.swf">&nbsp; Tetris</option>\n<option value="http://www.80smusiclyrics.com/games/simon/simon.swf">&nbsp; Simon</option>\n<option value="http://www.aftergames.com/games/pp_breakout.swf">&nbsp; Breakout</option>\n<!-- END FAVORITES -->\n\n</select><!--\n--><input type="button" value="+" title="ADD - add URL to the Favorites" style="font-size:8pt;width:3%"\n onclick="window.mediaCenterAdd(this.form.url);"><!--\n--><input type="button" value="-" title="DEL - remove URL from the Favorites" style="font-size:8pt;width:3%"\n onclick="window.mediaCenterDelete(this.form.url);"><!--\n--><input type="text" name="url" size="40" value="" style="font-size:8pt;width:54%"\n onfocus="this.select()"><!--\n--><input type="submit" value=">" title="PLAY - view URL" style="font-size:8pt;width:3%"\n ><!--\n--><input type="button" value="x" title="STOP - disconnect from URL" style="font-size:8pt;width:3%"\n onclick="config.macros.player.loadURL(null,'player_$1',null,null,this.form.w.value,this.form.h.value);"><!--\n--><input type="button" value="..." title="OPEN - view URL in a separate player" style="font-size:8pt;width:3%"\n onclick="if(this.form.url.value.length)window.open(this.form.url.value)">\n<center><<player "id=player_$1">></center><div style="float:right;font-size:8pt"><!--\n--> size: <input type="text" name="w" size="3" value="" style="font-size:8pt;"\n onfocus="this.select()"><!--\n-->x<input type="text" name="h" size="3" value="" style="font-size:8pt;"\n onfocus="this.select()"><!--\n--> <input type="submit" value="set" style="font-size:8pt;width:5%"\n onclick="if(!this.form.w.value.trim().length)this.form.w.value=config.options.txtPlayerDefaultWidth; if(!this.form.h.value.trim().length)this.form.h.value=config.options.txtPlayerDefaultHeight;"><!--\n--><input type="submit" value="reset" style="font-size:8pt;width:5%"\n onclick="this.form.w.value=config.options.txtPlayerDefaultWidth; this.form.h.value=config.options.txtPlayerDefaultHeight; this.form.ctrls.checked=true"><!--\n--><input type="button" value="fit" title="resize player to fit containing window" style="font-size:8pt;width:5%"\n onclick="window.mediaCenterFitSize(this)"><!--\n--></div><!--\n--> <input type="checkbox" name="ctrls" CHECKED \n onclick="config.macros.player.loadURL(null,'player_$1', null, this.form.url.value, this.form.w.value, this.form.h.value, this.checked)">show controls<!--\n--></nobr></form></html><script>\n\ndocument.getElementById("playerform_$1").w.value=config.options.txtPlayerDefaultWidth;\ndocument.getElementById("playerform_$1").h.value=config.options.txtPlayerDefaultHeight;\n\nwindow.mediaCenterFitSize = function(place) {\n var trim=89; // fudge factor to account for the other controls + padding + borders. ADJUST THIS VALUE TO FIT LAYOUT\n var t=story.findContainingTiddler(place); if (!t) { t=place; while (t && t.className!='floatingPanel') t=t.parentNode; } if (!t) return;\n var w="100%"; // horizontal stretching via CSS works, but vertical stretching doesn't... so:\n var h=t.offsetHeight-trim; // workaround: get containing panel/tiddler height and subtract "trim" height\n config.macros.player.loadURL(null,'player_$1',null,place.form.url.value,w,h,place.form.ctrls.checked); // reload player with new size\n place.form.w.value=w; place.form.h.value=h; // update width/height input fields\n}\n\nwindow.mediaCenterAdd = function(place) {\n if (!place.value.length) return;\n var tiddler = store.getTiddler("MediaCenter");\n var pos=tiddler.text.indexOf("<!-- insertion marker");\n if (pos==-1) pos=tiddler.text.length;\n var description=prompt("Please enter a description for\sn"+place.value);\n if (!description || !description.length) return;\n var txt='<option value="'+place.value+'">&nbsp; '+description+'</option>\sn';\n tiddler.set(null,tiddler.text.substr(0,pos)+txt+tiddler.text.substr(pos));\n story.refreshTiddler("MediaCenter",1,true);\n store.setDirty(true);\n}\nwindow.mediaCenterDelete = function(place) {\n if (!confirm("Are you sure you want to remove this favorite?\sn\sn"+place.value)) return;\n var tiddler = store.getTiddler("MediaCenter");\n var optRegExp=new RegExp('<option value="'+place.value+'">&nbsp; .*</option>\s\s\sn',"i");\n tiddler.set(null,tiddler.text.replace(optRegExp,""));\n story.refreshTiddler("MediaCenter",1,true);\n store.setDirty(true);\n}\n</script>
<html><form target="browser_$1" style="margin:0;padding:0"\n onsubmit="this.action=this.url.value" style="margin:0;padding:0"><!--\n--><input type="button" value="<" title="back" style="font-size:8pt;width:3%"\n onclick="try{window.frames['browser_$1'].history.go(-1)}catch(e){window.history.go(-1)}" ><!--\n--><input type="button" value=">" title="forward" style="font-size:8pt;width:3%"\n onclick="try{window.frames['browser_$1'].history.go(+1)}catch(e){window.history.go(+1)}"><!--\n--><input type="button" value="+" title="refresh"style="font-size:8pt;width:3%"\n onclick="window.frames['browser_$1'].location.reload()"><!--\n--><input type="button" value="x" title="stop"style="font-size:8pt;width:3%"\n onclick="window.stop()"><!--\n--><select size="1" style="font-size:8pt;width:20%"\n onchange="if (!this.value.length) return false;this.form.url.value=this.value;this.form.action=this.value;this.form.submit()">\n\n<!-- START FAVORITES -->\n<option value="about:blank">Favorites</option>\n<!-- AUTOINSERT NEW URL HERE -->\n<option value="">GoogleGroups...</option>\n<option value="http://groups.google.com/group/TiddlyWiki/">&nbsp; TiddlyWiki</option>\n<option value="http://groups.google.com/group/TiddlyWikiDev/">&nbsp; TiddlyWiki Dev</option>\n<option value="http://groups.google.com/group/GTD-TiddlyWiki/">&nbsp; GTD TiddlyWiki</option>\n<option value="http://groups.google.com/group/TiddlyWikiRequests/">&nbsp; TiddlyWiki Requests</option>\n<option value="">TiddlySites...</option>\n<option value="http://www.TiddlyWiki.com">&nbsp; TiddlyWiki Official Site</option>\n<option value="http://www.TiddlyTools.com">&nbsp; TiddlyTools</option>\n<option value="http://www.TiddlyStyles.com">&nbsp; TiddlyStyles</option>\n<option value="http://www.TiddlyForge.net">&nbsp; TiddlyForge</option>\n<option value="">General...</option>\n<option value="http://www.cnn.com">&nbsp; News - CNN</option>\n<option value="http://news.bbc.co.uk">&nbsp; News - BBC</option>\n<option value="http://my.yahoo.com">&nbsp; News - MyYahoo</option>\n<option value="http://www.unitedmedia.com/comics/">&nbsp; Comics</option>\n<option value="http://tv.yahoo.com/grid?.intl=us&zip=94086&.done=&lineup=us_CA04614">&nbsp; Television</option>\n<option value="http://www.wunderground.com/US/CA/Sunnyvale.html">&nbsp; Weather</option>\n<option value="http://quake.wr.usgs.gov/recenteqs/latest.htm">&nbsp; Earthquakes</option>\n<option value="http://maps.google.com">&nbsp; Maps</option>\n<!-- END FAVORITES -->\n\n</select><!--\n--><input type="text" name="url" size="60" value="" style="font-size:8pt;width:39%"\n onfocus="this.select()"><!--\n--><input type="button" value="go" title="view this URL" style="font-size:8pt;width:7%"\n onclick="this.form.action=this.form.url.value; this.form.submit()"><!--\n--><input type="button" value="add" title="add this URL to the Favorites" style="font-size:8pt;width:7%"\n onclick="window.inlineBrowserAdd(this.form.url);"><!--\n--><input type="button" value="del" title="remove this URL from the Favorites" style="font-size:8pt;width:7%"\n onclick="window.inlineBrowserDelete(this.form.url);"><!--\n--><input type="button" value="open" title="open this URL in a separate window" style="font-size:8pt;width:7%"\n onclick="if(this.form.url.value.length) window.open(this.form.url.value)">\n<iframe name="browser_$1" height="500" width="100%" style="background:#fff"></iframe></form></html><script>\n\nwindow.inlineBrowserAdd = function(place) {\n if (!place.value.length) return;\n var tiddler = store.getTiddler("MiniBrowser");\n var pos=tiddler.text.indexOf("<!-- AUTOINSERT NEW URL HERE -->");\n if (pos==-1) pos=tiddler.text.length;\n var description=prompt("Please enter a description for\sn"+place.value);\n if (!description || !description.length) return;\n var txt='<option value="'+place.value+'">&nbsp; '+description+'</option>\sn';\n tiddler.set(null,tiddler.text.substr(0,pos)+txt+tiddler.text.substr(pos));\n story.refreshTiddler("MiniBrowserFavorites",1,true);\n story.refreshTiddler("MiniBrowser",1,true);\n store.setDirty(true);\n}\n\nwindow.inlineBrowserDelete = function(place) {\n if (!confirm("Are you sure you want to remove this favorite?\sn\sn"+place.value)) return;\n var tiddler = store.getTiddler("MiniBrowser");\n var optRegExp=new RegExp('<option value="'+place.value+'">&nbsp; .*</option>\s\s\sn',"i");\n tiddler.set(null,tiddler.text.replace(optRegExp,""));\n story.refreshTiddler("MiniBrowser",1,true);\n store.setDirty(true);\n}\n</script>
/***\n''MoveablePanelPlugin for TiddlyWiki version 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#MoveablePanelPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nAdd move, size, max/restore mouse event handling and fold/unfold, hover/scroll, and close/dock toolbar command items to any floating panel or tiddler. (see NestedSlidersPlugin for floating panel syntax/usage).\n\n!!!!!Usage\n<<<\nsyntax: {{{<<moveablePanel>>}}}\n\nexample: //using NestedSlidersPlugin 'floating panel' syntax//\n//{{{\n+++^30em^[panel]<<moveablePanel>>this is a headline for the panel\n----\n this is a moveable floating panel\n with a few lines of text\n as an example for you to try...\n //note: this line is really long so you can see what happens to word wrapping when you re-size this panel//\n===\n//}}}\nTry it: +++^30em^[panel]<<moveablePanel>>this is a headline for the panel\n----\n this is a moveable floating panel\n with a few lines of text\n as an example for you to try...\n //note: this line is really long so you can see what happens to word wrapping when you re-size this panel//\n===\n\n\nWhen the mouse is just inside the edges of the tiddler/panel, the cursor will change to a "crossed-arrows" symbol, indicating that the panel is "moveable". Grab (click-hold) the panel anywhere in the edge area and then drag the mouse to reposition the panel.\n\nTo resize the panel, hold the ''shift'' key and then grab the panel: the cursor will change to a "double-arrow" symbol. Drag a side edge of the panel to stretch horizontally or vertically, or drag a corner of the panel to stretch in both dimensions at once.\n\nDouble-clicking anywhere in the edge area of a panel will 'maximize' it to fit the current browser window.\n\nWhen the mouse is anywhere over a panel (not just near the edge), a 'toolbar menu' appears in the ''upper right corner'', with the following command items:\n*合拢/放开: ''合拢'' temporarily reduces the panel height to show just one line of text. ''unfold'' restores the panel height.\n*跟随/不跟随: when you scroll the browser window, the moveable panels scroll with it. ''hover'' lets you keep a panel in view, while the rest of the page content moves in the window. ''scroll'' restores the default scrolling behavior for the panel. //Note: Due to browser limitations, this feature is not currently available when using Internet Explorer (v6 or lower)... sorry.//\n*关闭: ''关闭'' hides a panel from the page display. If you have moved/resized a panel, closing it restores its default position and size.\n*dock: unlike a floating panel, a moveable //tiddler// does not "float" on the page until it has actually been moved from its default position. When moving a tiddler, the ''close'' command is replaced with ''dock'', which restores the tiddler to its default //non-floating// location on the page.\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''MoveablePanelPlugin'' (tagged with <<tag systemConfig>>)\nNote: for compatibility, please also install the current version of ''NestedSlidersPlugin''.\n<<<\n!!!!!Revision History\n<<<\n''2006.05.25 [1.3.3]'' in closePanel(), use p.button.onclick() so that normal processing (updating slider button tooltip, access key, etc.) is performed\n''2006.05.11 [1.3.2]'' doc update\n''2006.05.11 [1.3.1]'' re-define all functions within moveablePanel object (eliminate global window.* function definitions (and some "leaky closures" in IE)\n''2006.05.11 [1.3.0]'' converted from inline javascript to true plugin\n''2006.05.09 [1.2.3]'' in closePanel(), set focus to sliderpanel button (if any)\n''2006.05.02 [1.2.2]'' in MoveOrSizePanel(), calculate adjustments for top and left when inside nested floating panels\n''2006.04.06 [1.2.1]'' in getPanel(), allow redefinition or bypass of "moveable" tag (changed from hard-coded "tearoff")\n''2006.03.29 [1.2.0]'' in getPanel(), require "tearoff" tag to enable floating tiddlers\n''2006.03.13 [1.1.0]'' added handling for floating tiddlers and conditional menu display\n''2006.03.06 [1.0.2]'' set move or resize cursor during mousetracking\n''2006.03.05 [1.0.1]'' use "window" vs "document.body" so mousetracking in FF doesn't drop the panel when moving too quickly\n''2006.03.04 [1.0.0]'' Initial public 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.moveablePanel= {major: 1, minor: 3, revision: 3, date: new Date(2006,5,25)};\n//}}}\n//{{{\nconfig.macros.moveablePanel= { \n handler:\n function(place,macroName,params) {\n var p=this.getPanel(place); if (!p) return;\n\n // remember original panel event handlers, size, location, border\n if (!p.saved) p.saved= {\n mouseover: p.onmouseover,\n mouseout: p.onmouseout,\n dblclick: p.ondblclick,\n top: p.style.top,\n left: p.style.left,\n width: p.style.width,\n height: p.style.height,\n position: p.style.position,\n border: p.style.border\n };\n\n // create control menu items\n var menupos=p.className=="floatingPanel"?"float:right;":"position:absolute;right:2em;top:3em;";\n var menustyle=p.className!="floatingPanel"?'style="border:1px solid #666;background:#ccc;color:#000;padding:0px .5em;"':"";\n var html='<div style="font-size:7pt;display:none;'+menupos+'">&nbsp;';\n if (p.className=="floatingPanel")\n html+='<a href="javascript:;" title="reduce panel size" '+menustyle\n +' onclick="return config.macros.moveablePanel.foldPanel(this,event)">折叠</a>&nbsp; ';\n if (!config.browser.isIE)\n html+='<a href="javascript:;" title="keep panel in view when scrolling"'+menustyle\n +' onclick="return config.macros.moveablePanel.hoverPanel(this,event)">跟随</a>&nbsp; ';\n if (p.className=="floatingPanel")\n html+='<a href="javascript:;" title="close panel and reset to default size and position"'+menustyle\n +' onclick="return config.macros.moveablePanel.closePanel(this,event)">关闭</a>';\n else\n html+='<a href="javascript:;" title="reset panel to default size and position"'+menustyle\n +' onclick="return config.macros.moveablePanel.closePanel(this,event)">dock</a>';\n html+='</div>';\n p.menudiv=createTiddlyElement(place,"span");\n p.menudiv.innerHTML=html;\n\n // init mouse handling and tooltip\n p.title="drag edge to move, shift key=stretch, double-click=max/restore";\n p.onmouseover=function(event) {\n if (this.className=="floatingPanel"||this.style.position=="absolute"||this.style.position=="fixed") {\n if (this.className!="floatingPanel") this.style.border="1px dotted #999"; // border around tiddler\n this.menudiv.firstChild.style.display="inline";\n }\n if (this.saved.mouseover) return this.saved.mouseover(event);\n };\n p.onmouseout=function(event) {\n this.menudiv.firstChild.style.display="none";\n if (this.className!="floatingPanel") this.style.border=this.saved.border;\n if (this.saved.mouseout) return this.saved.mouseout(event);\n };\n p.ondblclick=function(event) {\n if (!config.macros.moveablePanel.maximizePanel(this,event)) return false; // processed\n return this.saved.dblclick?this.saved.dblclick(event):true;\n };\n p.onmousemove=function(event) { return config.macros.moveablePanel.setCursorPanel(this,event); };\n p.onmousedown=function(event) { return config.macros.moveablePanel.moveOrSizePanel(this,event); };\n },\n\n getPanel:\n function(place) {\n var p=place; while (p && p.className!='floatingPanel') p=p.parentNode; if (p) return p; // floatingPanel\n p=story.findContainingTiddler(place); if (!p || !store.getTiddler(p.getAttribute("tiddler"))) return null; // not in a tiddler\n\n // moveable **tiddlers** in IE have LOTS of problems... DISABLED FOR NOW... but floating panels still work in IE\n if (config.browser.isIE) return null;\n\n // tiddlers tagged (e.g. with "moveable") to allow movement? use null or "" to bypass tag check\n var tag="moveable"; if (!tag || !tag.trim().length) return p;\n return (store.getTiddler(p.getAttribute("tiddler")).tags.find(tag)!=null)?p:null; // tiddler is tagged for moving\n },\n\n processed:\n function(event) {\n event.cancelBubble=true; if (event.stopPropagation) event.stopPropagation(); return false;\n },\n\n getClientWidth:\n function() {\n if(document.width!=undefined) return document.width;\n if(document.documentElement && document.documentElement.clientWidth) return document.documentElement.clientWidth;\n if(document.body && document.body.clientWidth) return document.body.clientWidth;\n if(window.innerWidth!=undefined) return window.innerWidth;\n return 100; // should never get here\n },\n\n closePanel:\n function(place,event) {\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n if (p.hover) this.hoverPanel(p.hoverButton,event); \n if (p.folded) this.foldPanel(p.foldButton,event); \n p.maxed=false; \n p.style.top=p.saved.top;\n p.style.left=p.saved.left;\n p.style.width=p.saved.width;\n p.style.height=p.saved.height;\n p.style.position=p.saved.position;\n if (p.button) { p.button.focus(); onClickNestedSlider({target:p.button}); } // click on slider "button" (if any) to close the panel\n return this.processed(event);\n },\n\n foldPanel:\n function(place,event) {\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n if (!p.foldButton) p.foldButton=place;\n if (p.folded) {\n p.style.height=p.folded_savedheight;\n p.style.overflow=p.folded_savedoverflow;\n } else {\n p.folded_savedheight=p.style.height; p.style.height="1em"; \n p.folded_savedoverflow=p.style.overflow; p.style.overflow="hidden";\n }\n p.folded=!p.folded;\n place.innerHTML=p.folded?"放开":"折叠";\n place.title=p.folded?"restore panel size":"reduce panel size";\n return this.processed(event);\n },\n\n hoverPanel:\n function(place,event) {\n if (config.browser.isIE) { return this.processed(event); } // 'fixed' position is not handled properly by IE :-(\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n if (!p.hoverButton) p.hoverButton=place;\n if (p.hover)\n p.style.position=p.hover_savedposition;\n else\n { p.hover_savedposition=p.style.position; p.style.position="fixed"; }\n p.hover=!p.hover;\n place.innerHTML=p.hover?"不跟随":"跟随";\n place.title=p.hover?"make panel move with page when scrolling":"keep panel in view when scrolling page";\n return this.processed(event);\n },\n\n maximizePanel:\n function(place,event) {\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n var left=findPosX(p); var top=findPosY(p);\n var width=p.offsetWidth; var height=p.offsetHeight;\n var x=!config.browser.isIE?event.pageX:event.clientX;\n var y=!config.browser.isIE?event.pageY:event.clientY;\n if (x<left||x>=left+width||y<top||y>=top+height) return true; // not inside panel, let mousedown bubble through\n var edgeWidth=10; var edgeHeight=10;\n var isTop=(y-top<edgeHeight);\n var isLeft=(x-left<edgeWidth);\n var isBottom=(top+height-y<edgeHeight);\n var isRight=(left+width-x<edgeWidth);\n if (!(isTop||isLeft||isBottom||isRight))\n return true; // not near an edge... let double click bubble through\n if (p.folded) this.foldPanel(p.foldButton,event); // unfold panel first (if needed)\n if (p.maxed) {\n p.style.top=p.max_savedtop;\n p.style.left=p.max_savedleft;\n p.style.width=p.max_savedwidth;\n p.style.height=p.max_savedheight;\n p.style.position=p.max_savedposition;\n } else {\n p.max_savedwidth=p.style.width;\n p.max_savedheight=p.style.height;\n p.max_savedtop=p.style.top;\n p.max_savedleft=p.style.left;\n p.max_savedposition=p.style.position;\n // IE gets the percentage stretch wrong if floating panel is inside a table\n p.style.width=config.browser.isIE?(getClientWidth()*0.95+"px"):"95%";\n p.style.height="95%";\n p.style.top=p.style.left='1em';\n p.style.position="absolute";\n }\n p.maxed=!p.maxed;\n return this.processed(event);\n },\n\n setCursorPanel:\n function(place,event) {\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n var left=findPosX(p); var top=findPosY(p);\n var width=p.offsetWidth; var height=p.offsetHeight;\n var x=!config.browser.isIE?event.pageX:event.clientX;\n var y=!config.browser.isIE?event.pageY:event.clientY;\n if (x<left||x>=left+width||y<top||y>=top+height) return true; // not inside panel, let mousedown bubble through\n var edgeWidth=10; var edgeHeight=10;\n var isTop=(y-top<edgeHeight);\n var isLeft=(x-left<edgeWidth);\n var isBottom=(top+height-y<edgeHeight);\n var isRight=(left+width-x<edgeWidth);\n if (!(isTop||isLeft||isBottom||isRight))\n { p.style.cursor="auto"; if (!p.savedtitle) p.savedtitle=p.title; p.title=""; }\n else {\n p.style.cursor=!event.shiftKey?"move":((isTop?'n':(isBottom?'s':''))+(isLeft?'w':(isRight?'e':''))+'-resize');\n if (p.savedtitle) p.title=p.savedtitle;\n }\n return true; // let mouseover event bubble through\n },\n\n moveOrSizePanel:\n function(place,event) {\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n var left=findPosX(p); var top=findPosY(p);\n var width=p.offsetWidth; var height=p.offsetHeight;\n var x=!config.browser.isIE?event.pageX:event.clientX;\n var y=!config.browser.isIE?event.pageY:event.clientY;\n if (x<left||x>=left+width||y<top||y>=top+height) return true; // not inside panel, let mousedown bubble through\n var edgeWidth=10; var edgeHeight=10;\n var isTop=(y-top<edgeHeight);\n var isLeft=(x-left<edgeWidth);\n var isBottom=(top+height-y<edgeHeight);\n var isRight=(left+width-x<edgeWidth);\n if (!(isTop||isLeft||isBottom||isRight)) return true; // not near an edge... let mousedown bubble through\n \n // when resizing, change cursor to show directional (NSEW) "drag arrows"\n var sizing=event.shiftKey; // remember this for use during mousemove tracking\n if (sizing) p.style.cursor=((isTop?'n':(isBottom?'s':''))+(isLeft?'w':(isRight?'e':''))+'-resize');\n \n var adjustLeft=0; var adjustTop=0;\n var pp=p.parentNode; while (pp && pp.className!="floatingPanel") pp=pp.parentNode;\n if (pp) { adjustLeft=findPosX(pp); adjustTop=findPosY(pp); }\n \n // start tracking mousemove events\n config.macros.moveablePanel.activepanel=p;\n var target=p; // if 'capture' handling not supported, track within panel only\n if (document.body.setCapture) { document.body.setCapture(); var target=document.body; } // IE\n if (window.captureEvents) { window.captureEvents(Event.MouseMove|Event.MouseUp,true); var target=window; } // moz\n if (target.onmousemove!=undefined) target.saved_mousemove=target.onmousemove;\n target.onmousemove=function(e){\n if (!e) var e=window.event;\n var p=config.macros.moveablePanel.activepanel;\n \n // PROBLEM: p.offsetWidth and p.offsetHeight do not seem to account for padding or borders\n // WORKAROUND: subtract padding and border (in px) when calculating new panel width and height\n // TBD: get these values from p.style... convert to px as needed.\n var paddingWidth=10.6667; var paddingHeight=10.6667;\n var borderWidth=1; var borderHeight=1;\n var adjustWidth=-(paddingWidth*2+borderWidth*2);\n var adjustHeight=-(paddingHeight*2+borderHeight*2);\n \n if (p.style.position!="absolute") { // convert relative DIV to movable absolute DIV\n p.style.position="absolute";\n p.style.left=left+"px"; p.style.top=top+"px";\n p.style.width=(width+adjustWidth)+"px"; p.style.top=(height+adjustHeight)+"px";\n }\n var newX=!config.browser.isIE?e.pageX:e.clientX;\n var newY=!config.browser.isIE?e.pageY:e.clientY;\n if (sizing) { // resize panel\n // don't let panel get smaller than edge "grab" zones\n var minWidth=edgeWidth*2-adjustWidth;\n var minHeight=edgeHeight*2-adjustHeight;\n p.maxed=false; // make sure panel is not maximized\n if (p.folded) this.foldPanel(p.foldButton,e); // make sure panel is unfolded\n if (isBottom) var newHeight=height+newY-y+1;\n if (isTop) var newHeight=height-newY+y+1;\n if (isLeft) var newWidth=width-newX+x+1;\n if (isRight) var newWidth=width+newX-x+1;\n if (isLeft||isRight) p.style.width=(newWidth>minWidth?newWidth:minWidth)+adjustWidth+"px";\n if (isLeft) p.style.left=left-adjustLeft+newX-x+1+"px";\n if (isTop||isBottom) p.style.height=(newHeight>minHeight?newHeight:minHeight)+adjustHeight+"px";\n if (isTop) p.style.top=top-adjustTop+newY-y+1+"px";\n } else { // move panel\n p.style.top=top-adjustTop+newY-y+1+"px";\n p.style.left=left-adjustLeft+newX-x+1+"px";\n }\n var status=sizing?("size: "+p.style.width+","+p.style.height):("pos: "+p.style.left+","+p.style.top);\n window.status=status.replace(/(\s.[0-9]+)|px/g,""); // remove decimals and "px"\n return config.macros.moveablePanel.processed(e);\n };\n \n // stop tracking mousemove events\n if (target.onmouseup!=undefined) target.saved_mouseup=target.onmouseup;\n target.onmouseup=function(e){\n if (!e) var e=window.event;\n if (this.releaseCapture) this.releaseCapture(); // IE\n if (this.releaseEvents) this.releaseEvents(Event.MouseMove|Event.MouseUp); // moz\n this.onmousemove=this.saved_mousemove?this.saved_mousemove:null;\n this.onmouseup=this.saved_mouseup?this.saved_mouseup:null;\n config.macros.moveablePanel.activepanel=null;\n window.status="";\n return config.macros.moveablePanel.processed(e);\n };\n return this.processed(event); // mousedown handled\n }\n};\n//}}}
/***\n''NestedSlidersPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman\nsource: http://www.TiddlyTools.com/#NestedSlidersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nQuickly make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content. Optional syntax allows ''default to open'', ''custom button label/tooltip'' and ''automatic blockquote formatting.''\n\nYou can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.\n\nFor more details, please click on a section headline below:\n++++!!!!![Configuration]>\nDebugging messages for 'lazy sliders' deferred rendering:\n<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering\n<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered\n===\n++++!!!!![Usage]>\nWhen installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. Additional optional syntax elements let you specify\n*default to open\n*cookiename\n*heading level\n*floater (with optional CSS width value)\n*mouse auto rollover\n*custom label/tooltip/accesskey\n*automatic blockquote\n*deferred rendering\nThe complete syntax, using all options, is:\n//{{{\n++++(cookiename)!!!!!^width^*[label=key|tooltip]>...\ncontent goes here\n===\n//}}}\nwhere:\n* {{{+++}}} (or {{{++++}}}) and {{{===}}}^^\nmarks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.^^\n* {{{(cookiename)}}}^^\nsaves the slider opened/closed state, and restores this state whenever the slider is re-rendered.^^\n* {{{!}}} through {{{!!!!!}}}^^\ndisplays the slider label using a formatted headline (Hn) style instead of a button/link style^^\n* {{{^width^}}} (or just {{{^}}})^^\nmakes the slider 'float' on top of other content rather than shifting that content downward. 'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.). If omitted, the default width is "auto" (i.e., fit to content)^^\n* {{{*}}}^^\nautomatically opens/closes slider on "rollover" as well as when clicked^^\n* {{{[label=key|tooltip]}}}^^\nuses custom label/tooltip/accesskey. {{{=key}}} and {{{|tooltip}}} are optional. 'key' is must be a ''single letter only''. Default labels/tootips are: ">" (more) and "<" (less), with no default access key assignment.^^\n* {{{">"}}} //(without the quotes)//^^\nautomatically adds blockquote formatting to slider content^^\n* {{{"..."}}} //(without the quotes)//^^\ndefers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//^^\n\n//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//\n===\n++++!!!!![Examples]>\nsimple in-line slider: \n{{{\n+++\n content\n===\n}}}\n+++\n content\n===\n----\nuse a custom label and tooltip: \n{{{\n+++[label|tooltip]\n content\n===\n}}}\n+++[label|tooltip]\n content\n===\n----\ncontent automatically blockquoted: \n{{{\n+++>\n content\n===\n}}}\n+++>\n content\n===\n----\nall options combined //(default open, cookie, heading, sized floater, rollover, label/tooltip/key, blockquoted, deferred)//\n{{{\n++++(testcookie)!!!^30em^*[label=Z|click or press Alt-Z to open]>...\n content\n===\n}}}\n++++(testcookie)!!!^30em^*[label=Z|click or press Alt-Z to open]>...\n content\n===\n----\ncomplex nesting example:\n{{{\n+++^[get info...=I|click for information or press Alt-I]\n put some general information here, plus a floating slider with more specific info:\n +++^10em^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===\n ===\n===\n}}}\n+++^[get info...=I|click for information or press Alt-I]\n put some general information here, plus a floating slider with more specific info:\n +++^10em^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===\n ===\n===\n----\nnested floaters\n>menu: <<tiddler NestedSlidersExample>>\n(see [[NestedSlidersExample]] for definition)\n----\n===\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.07.25 - 1.9.3'' when parsing slider, save default open/closed state in button element, then in onClickNestedSlider(), if slider state matches saved default, instead of saving cookie, delete it\n''2006.06.29 - 1.9.2'' in onClickNestedSlider(), when setting focus to first control, skip over type="hidden"\n''2006.06.22 - 1.9.1'' added panel.defaultPanelWidth to save requested panel width, even after resizing has changed the style value\n''2006.05.11 - 1.9.0'' added optional '^width^' syntax for floating sliders and '=key' syntax for setting an access key on a slider label\n''2006.05.09 - 1.8.0'' in onClickNestedSlider(), when showing panel, set focus to first child input/textarea/select element\n''2006.04.24 - 1.7.8'' in adjustSliderPos(), if floating panel is contained inside another floating panel, subtract offset of containing panel to find correct position\n''2006.02.16 - 1.7.7'' corrected deferred rendering to account for use-case where show/hide state is tracked in a cookie\n''2006.02.15 - 1.7.6'' in adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)\n''2006.02.04 - 1.7.5'' add 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n''2006.01.18 - 1.7.4'' only define adjustSliderPos() function if it has not already been provided by another plugin. This lets other plugins 'hijack' the function even when they are loaded first.\n''2006.01.16 - 1.7.3'' added adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels. While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels. Short-term workaround is to only adjust the position for 'top-level' floaters.\n''2006.01.16 - 1.7.2'' added button property to slider panel elements so that slider panel can tell which button it belongs to. Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends\n''2006.01.14 - 1.7.1'' added optional "^" syntax for floating panels. Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.\n''2006.01.14 - 1.7.0'' added optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)\n''2006.01.03 - 1.6.2'' When using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element. (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)\n''2005.12.15 - 1.6.1'' added optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders\nremoved checkbox option for 'global' application of lazy sliders\n''2005.11.25 - 1.6.0'' added optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)\n''2005.11.21 - 1.5.1'' revised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability. Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.\n''2005.11.20 - 1.5.0'' added (cookiename) syntax for optional tracking and restoring of slider open/close state\n''2005.11.11 - 1.4.0'' added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style\n''2005.11.07 - 1.3.0'' removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other\nformatting extensions) and simplified/improved regular expressions to trim multiple excess newlines\n''2005.11.05 - 1.2.1'' changed name to NestedSlidersPlugin\nmore documentation\n''2005.11.04 - 1.2.0'' added alternative character-mode syntax {{{(((}}} and {{{)))}}}\ntweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax\n''2005.11.03 - 1.1.1'' fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used\ncode cleanup, added documentation\n''2005.11.03 - 1.1.0'' changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}\nchanged name to EasySlidersPlugin\n''2005.11.03 - 1.0.0'' initial public release\n<<<\n!!!!!Credits\n<<<\nThis feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.nestedSliders = {major: 1, minor: 9, revision: 3, date: new Date(2006,7,25)};\n//}}}\n\n//{{{\n// options for deferred rendering of sliders that are not initially displayed\nif (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;\nif (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;\n\n// default styles for 'floating' class\nsetStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \s\n background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");\n//}}}\n\n//{{{\nconfig.formatters.push( {\n name: "nestedSliders",\n match: "\s\sn?\s\s+{3}",\n terminator: "\s\ss*\s\s={3}\s\sn?",\n lookahead: "\s\sn?\s\s+{3}(\s\s+)?(\s\s([^\s\s)]*\s\s))?(\s\s!*)?(\s\s^(?:[^\s\s^\s\s*\s\s[\s\s>]*\s\s^)?)?(\s\s*)?(\s\s[[^\s\s]]*\s\s])?(\s\s>)?(\s\s.\s\s.\s\s.)?\s\ss*",\n handler: function(w)\n {\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 {\n // location for rendering button and panel\n var place=w.output;\n\n // default to closed, no cookie, no accesskey\n var show="none"; var title=">"; var tooltip="show"; var cookie=""; var key="";\n\n // extra "+", default to open\n if (lookaheadMatch[1])\n { show="block"; title="<"; tooltip="hide"; }\n\n // cookie, use saved open/closed state\n if (lookaheadMatch[2]) {\n cookie=lookaheadMatch[2].trim().slice(1,-1);\n cookie="chkSlider"+cookie;\n if (config.options[cookie]==undefined)\n { config.options[cookie] = (show=="block") }\n if (config.options[cookie])\n { show="block"; title="<"; tooltip="hide"; }\n else\n { show="none"; title=">"; tooltip="show"; }\n }\n\n // parse custom label/tooltip/accesskey: [label=X|tooltip]\n if (lookaheadMatch[6]) {\n title = lookaheadMatch[6].trim().slice(1,-1);\n var pos=title.indexOf("|");\n if (pos!=-1) { tooltip = title.substr(pos+1,title.length); title=title.substr(0,pos); }\n if (title.substr(title.length-2,1)=="=") { key=title.substr(title.length-1,1); title=title.slice(0,-2); }\n if (pos==-1) tooltip += " "+title; // default tooltip: "show/hide <title>"\n }\n\n // create the button\n if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link\n var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;\n var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,null,title);\n btn.onclick=onClickNestedSlider;\n btn.setAttribute("href","javascript:;");\n btn.setAttribute("title",tooltip);\n }\n else\n var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider);\n\n // set extra button attributes\n btn.sliderCookie = cookie; // save the cookiename (if any) in the button object\n btn.defOpen=lookaheadMatch[1]!=null; // save default open/closed state (boolean)\n btn.keyparam=key; // save the access key letter ("" if none)\n if (key.length) {\n btn.setAttribute("accessKey",key); // init access key\n btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus\n }\n\n // "non-click" MouseOver open/close slider\n if (lookaheadMatch[5]) btn.onmouseover=onClickNestedSlider;\n\n // create slider panel\n var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";\n var panel=createTiddlyElement(place,"div",null,panelClass,null);\n panel.button = btn; // so the slider panel know which button it belongs to\n panel.defaultPanelWidth=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):""; // save requested panel size\n btn.sliderPanel=panel;\n panel.style.display = show;\n panel.style.width=panel.defaultPanelWidth;\n\n // render slider (or defer until shown) \n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n if ((show=="block")||!lookaheadMatch[8]) {\n // render now if panel is supposed to be shown or NOT deferred rendering\n w.subWikify(lookaheadMatch[7]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);\n // align slider/floater position with button\n adjustSliderPos(place,btn,panel,panelClass);\n }\n else {\n var src = w.source.substr(w.nextMatch);\n var endpos=findMatchingDelimiter(src,"+++","===");\n panel.setAttribute("raw",src.substr(0,endpos));\n panel.setAttribute("blockquote",lookaheadMatch[7]?"true":"false");\n panel.setAttribute("rendered","false");\n w.nextMatch += endpos+3;\n if (w.source.substr(w.nextMatch,1)=="\sn") w.nextMatch++;\n if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\sn\sn"+panel.getAttribute("raw"));\n }\n }\n }\n }\n)\n\n// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)\nfunction findMatchingDelimiter(src,starttext,endtext) {\n var startpos = 0;\n var endpos = src.indexOf(endtext);\n // check for nested delimiters\n while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {\n // count number of nested 'starts'\n var startcount=0;\n var temp = src.substring(startpos,endpos-1);\n var pos=temp.indexOf(starttext);\n while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }\n // set up to check for additional 'starts' after adjusting endpos\n startpos=endpos+endtext.length;\n // find endpos for corresponding number of matching 'ends'\n while (startcount && endpos!=-1) {\n endpos = src.indexOf(endtext,endpos+endtext.length);\n startcount--;\n }\n }\n return (endpos==-1)?src.length:endpos;\n}\n//}}}\n\n//{{{\nwindow.onClickNestedSlider=function(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theLabel = theTarget.firstChild.data;\n var theSlider = theTarget.sliderPanel\n var isOpen = theSlider.style.display!="none";\n // if using default button labels, toggle labels\n if (theLabel==">") theTarget.firstChild.data = "<";\n else if (theLabel=="<") theTarget.firstChild.data = ">";\n // if using default tooltips, toggle tooltips\n if (theTarget.getAttribute("title")=="show")\n theTarget.setAttribute("title","hide");\n else if (theTarget.getAttribute("title")=="hide")\n theTarget.setAttribute("title","show");\n if (theTarget.getAttribute("title")=="show "+theLabel)\n theTarget.setAttribute("title","hide "+theLabel);\n else if (theTarget.getAttribute("title")=="hide "+theLabel)\n theTarget.setAttribute("title","show "+theLabel);\n // deferred rendering (if needed)\n if (theSlider.getAttribute("rendered")=="false") {\n if (config.options.chkDebugLazySliderRender)\n alert("rendering '"+theLabel+"':\sn\sn"+theSlider.getAttribute("raw"));\n var place=theSlider;\n if (theSlider.getAttribute("blockquote")=="true")\n place=createTiddlyElement(place,"blockquote");\n wikify(theSlider.getAttribute("raw"),place);\n theSlider.setAttribute("rendered","true");\n }\n // show/hide the slider\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n theSlider.style.display = isOpen ? "none" : "block";\n // reset to default width (might have been changed via plugin code)\n theSlider.style.width=theSlider.defaultPanelWidth;\n // align slider/floater position with target button\n if (!isOpen) adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);\n // if showing panel, set focus to first 'focus-able' element in panel\n if (theSlider.style.display!="none") {\n var ctrls=theSlider.getElementsByTagName("*");\n for (var c=0; c<ctrls.length; c++) {\n var t=ctrls[c].tagName.toLowerCase();\n if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")\n { ctrls[c].focus(); break; }\n }\n }\n if (this.sliderCookie && this.sliderCookie.length) {\n config.options[this.sliderCookie]=!isOpen;\n if (config.options[this.sliderCookie]!=this.defOpen)\n saveOptionCookie(this.sliderCookie);\n else { // remove cookie if slider is in default display state\n var ex=new Date(); ex.setTime(ex.getTime()-1000);\n document.cookie = this.sliderCookie+"=novalue; path=/; expires="+ex.toGMTString();\n }\n }\n return false;\n}\n\n// hijack animation handler 'stop' handler so overflow is visible after animation has completed\nSlider.prototype.coreStop = Slider.prototype.stop;\nSlider.prototype.stop = function() { this.coreStop(); this.element.style.overflow = "visible"; }\n\n// adjust panel position based on button position\nif (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {\n if (panelClass=="floatingPanel") {\n var left=0;\n var top=btn.offsetHeight; \n if (place.style.position!="relative") {\n var left=findPosX(btn);\n var top=findPosY(btn)+btn.offsetHeight;\n var p=place; while (p && p.className!='floatingPanel') p=p.parentNode;\n if (p) { left-=findPosX(p); top-=findPosY(p); }\n }\n if (left+panel.offsetWidth > getWindowWidth()) left=getWindowWidth()-panel.offsetWidth-10;\n panel.style.left=left+"px"; panel.style.top=top+"px";\n }\n}\n\nfunction getWindowWidth() {\n if(document.width!=undefined)\n return document.width; // moz (FF)\n if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )\n return document.documentElement.clientWidth; // IE6\n if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )\n return document.body.clientWidth; // IE4\n if(window.innerWidth!=undefined)\n return window.innerWidth; // IE - general\n return 0; // unknown\n}\n//}}}
这些设置将缓存于浏览器\n请签名<<option txtUserName>>\n (范例:用户名)\n\n<<option chkRegExpSearch>> 正规式搜寻\n<<option chkCaseSensitiveSearch>> 区分大小写搜寻\n<<option chkAnimate>> 使用动画显示\n<<tiddler ToggleTopButton>>\n<<tiddler ToggleSiteTitles>>\n<<tiddler ToggleSiteMenu>>\n<<tiddler ToggleReadOnly>>\n<<option chkSinglePageMode>>一次显示只一个页面\n<<option chkTopOfPageMode>> 页面显示总是置顶\n[[进阶选项]]
/***\n''PlayerPlugin for TiddlyWiki version 1.2.x and 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#PlayerPlugin \nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\nstatus: ''ALPHA / EXPERIMENTAL''\n\nEmbed a media player in a tiddler. \n\n!!!!!Usage\n<<<\n{{{<<player [type] [URL] [width] [height] [hidecontrols]>>}}}\n\nwhere ''type'' is optional, and is one of the following: ''windows'', ''realone'', ''quicktime'', or ''flash''. If the media type is not specified, the plugin automatically renders Windows, Real, QuickTime or Flash player by matching known file extensions and/or specialized streaming-media transfer protocols (such as RTSP:). For unrecognized media types, the plugin assumes WindowsMedia (the player with the most users... *sigh*)\n<<<\n!!!!!Configuration\n<<<\nDefault player size:\nwidth: <<option txtPlayerDefaultWidth>> height: <<option txtPlayerDefaultHeight>>\n<<<\n!!!!!Examples\n<<<\n+++[Windows Media]...\nTimes Square Live Webcam\n{{{<<player id=1 http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx>>}}}\n<<player id=1 http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx>>\n===\n+++[RealOne]...\nBBC London: Live and Recorded news\n{{{<<player id=2 http://www.bbc.co.uk/london/realmedia/news/tvnews.ram>>}}}\n<<player id=2 http://www.bbc.co.uk/london/realmedia/news/tvnews.ram>>\n===\n+++[Quicktime]...\nAmerica Free TV: Classic Comedy\n{{{<<player id=3 http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov>>}}}\n<<player id=3 http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov>>\n===\n+++[Flash]...\nAsteroids arcade game\n{{{<<player id=4 http://www.80smusiclyrics.com/games/asteroids/asteroids.swf 400 300>>}}}\n<<player id=4 http://www.80smusiclyrics.com/games/asteroids/asteroids.swf 400 300>>\nGoogle Video\n{{{<<player id=5 flash http://video.google.com/googleplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DoQAAAIVnUNP6GYRY8YnIRNPe4Uk5-j1q1MVpJIW4uyEFpq5Si0hcSDuig_JZcB9nNpAhbScm9W_8y_vDJQBw1DRdCVbXl-wwm5dyUiiStl_rXt0ATlstVzrUNC4fkgK_j7nmse7kxojRj1M3eo3jXKm2V8pQjWk97GcksMFFwg7BRAXmRSERexR210Amar5LYzlo9_k2AGUWPLyRhMJS4v5KtDSvNK0neL83ZjlHlSECYXyk%26sigh%3Dmpt2EOr86OAUNnPQ3b9Tr0wnDms%26begin%3D0%26len%3D429700%26docid%3D-914679554478687740&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer%3Fcontentid%3De7e77162deb04c42%26second%3D5%26itag%3Dw320%26urlcreated%3D1144620753%26sigh%3DC3fqXPPS1tFiUqLzmkX3pdgYc2Y&playerId=-91467955447868774 400 326>>}}}\n<<player id=5 flash http://video.google.com/googleplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DoQAAAIVnUNP6GYRY8YnIRNPe4Uk5-j1q1MVpJIW4uyEFpq5Si0hcSDuig_JZcB9nNpAhbScm9W_8y_vDJQBw1DRdCVbXl-wwm5dyUiiStl_rXt0ATlstVzrUNC4fkgK_j7nmse7kxojRj1M3eo3jXKm2V8pQjWk97GcksMFFwg7BRAXmRSERexR210Amar5LYzlo9_k2AGUWPLyRhMJS4v5KtDSvNK0neL83ZjlHlSECYXyk%26sigh%3Dmpt2EOr86OAUNnPQ3b9Tr0wnDms%26begin%3D0%26len%3D429700%26docid%3D-914679554478687740&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer%3Fcontentid%3De7e77162deb04c42%26second%3D5%26itag%3Dw320%26urlcreated%3D1144620753%26sigh%3DC3fqXPPS1tFiUqLzmkX3pdgYc2Y&playerId=-91467955447868774 400 326>>\nYouTube Video\n{{{<<player id=6 flash http://www.youtube.com/v/OdT9z-JjtJk 400 300>>}}}\n<<player id=6 flash http://www.youtube.com/v/OdT9z-JjtJk 400 300>>\n===\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''PlayerPlugin '' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for macro handling^^\n<<<\n!!!!!Revision History\n<<<\n''2006.02.26 [0.7.0]''\nmajor re-write. handles default params better. create/recreate player objects via loadURL() API for use with interactive forms and scripts.\n''2006.01.27 [0.6.0]''\nadded support for 'extra' macro params to pass through to object parameters\n''2006.01.19 [0.5.0]''\nInitial ALPHA release\n''2005.12.23 [0.0.0]''\nStarted\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\n<<<\n!!!!!Code\n***/\n\n// // macro definition\n\n//{{{\nversion.extensions.player = {major: 0, minor: 8, revision: 0, date: new Date(2006,3,7)};\n\nconfig.macros.player = {};\nconfig.macros.player.html = {};\nconfig.macros.player.handler= function(place,macroName,params) {\n var id=null;\n if (params[0].substr(0,3)=="id=") id=params.shift().substr(3);\n var type="";\n if ((params[0]=="windows")||(params[0]=="realone")||(params[0]=="quicktime")||(params[0]=="flash")) type=params.shift();\n var url=params.shift(); if (!url || !url.trim().length) url="";\n var width=params.shift();\n var height=params.shift();\n var show=(params.shift()=='hidecontrols')?"0":"1"; \n var extras=""; while (params[0]!=undefined) extras+="<param name='"+params.shift()+"' value='"+params.shift()+"'> ";\n this.loadURL(place,id,type,url,width,height,show,extras);\n}\n\nif (config.options.txtPlayerDefaultWidth==undefined) config.options.txtPlayerDefaultWidth="100%";\nif (config.options.txtPlayerDefaultHeight==undefined) config.options.txtPlayerDefaultHeight="480"; // can't use "100%"... player height doesn't stretch right :-(\n\nconfig.macros.player.loadURL=function(place,id,type,url,width,height,show,extras) {\n\n if (id==undefined) id="tiddlyPlayer";\n if (!width) var width=config.options.txtPlayerDefaultWidth;\n if (!height) var height=config.options.txtPlayerDefaultHeight;\n if (url && (!type || !type.length)) {\n if ((url.indexOf('mms')!=-1)||(url.indexOf('.asx')!=-1)||(url.indexOf('.wvx')!=-1)||(url.indexOf('.wmv')!=-1)||(url.indexOf('.mp3')!=-1))\n var type="windows";\n else if ((url.indexOf('rtsp')!=-1)||(url.indexOf('.ram')!=-1)||(url.indexOf('.rpm')!=-1)||(url.indexOf('.rm' )!=-1)||(url.indexOf('.ra' )!=-1))\n var type="realone";\n else if ((url.indexOf('.mov')!=-1)||(url.indexOf('.qt' )!=-1))\n var type="quicktime";\n else if ((url.indexOf('.swf')!=-1)||(url.indexOf('.flv')!=-1))\n var type="flash";\n }\n if (!type) var type="none";\n if (!url) var url="";\n if (show===undefined) var show=true;\n if (!extras) var extras="";\n if (type=="none" && url.trim().length) url="<br>unrecognized media type:<br>"+url;\n if (type=="realone") height-=show?60:0; // leave room for controls\n if (type=="windows") show=show?"1":"0"; // player-specific param value\n if (type=="realone") show=show?"block":"none";\n if (type=="quicktime") show=show?"true":"false";\n\n // create containing div for player HTML\n // and add or replace player in TW DOM structure\n var newplayer = document.createElement("div");\n newplayer.playerType=type;\n newplayer.setAttribute("id",id+"_div");\n var existing = document.getElementById(id+"_div");\n if (existing && !place) place=existing.parentNode;\n if (!existing)\n place.appendChild(newplayer);\n else {\n if (place==existing.parentNode) place.replaceChild(newplayer,existing)\n else { existing.parentNode.removeChild(existing); place.appendChild(newplayer); }\n }\n\n var html=config.macros.player.html[type];\n html=html.replace(/%i%/mg,id);\n html=html.replace(/%w%/mg,width);\n html=html.replace(/%h%/mg,height);\n html=html.replace(/%u%/mg,url);\n html=html.replace(/%s%/mg,show);\n html=html.replace(/%x%/mg,extras);\n newplayer.innerHTML=html;\n}\n//}}}\n\n// // Player-specific API functions: isReady(id), isPlaying(id), toggleControls(id), showControls(id,flag)\n\n//{{{\n// status values:\n// Windows: 0=Undefined, 1=Stopped, 2=Paused, 3=Playing, 4=ScanForward, 5=ScanReverse\n// 6=Buffering, 7=Waiting, 8=MediaEnded, 9=Transitioning, 10=Ready, 11=Reconnecting\n// RealOne: 0=Stopped, 1=Contacting, 2=Buffering, 3=Playing, 4=Paused, 5=Seeking\n// QuickTime: 'Waiting', 'Loading', 'Playable', 'Complete', 'Error:###'\n// Flash: 0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete\nconfig.macros.player.isReady=function(id)\n{\n var d=document.getElementById(id+"_div"); if (!d) return false;\n var p=document.getElementById(id); if (!p) return false;\n if (d.playerType=='windows') return !((p.playState==0)||(p.playState==7)||(p.playState==9)||(p.playState==11));\n if (d.playerType=='realone') return (p.GetPlayState()>1);\n if (d.playerType=='quicktime') return !((p.getPluginStatus()=='Waiting')||(p.getPluginStatus()=='Loading'));\n if (d.playerType=='flash') return (p.ReadyState>2);\n return true;\n}\nconfig.macros.player.isPlaying=function(id)\n{\n var d=document.getElementById(id+"_div"); if (!d) return false;\n var p=document.getElementById(id); if (!p) return false;\n if (d.playerType=='windows') return (p.playState==3);\n if (d.playerType=='realone') return (p.GetPlayState()==3);\n if (d.playerType=='quicktime') return (p.getPluginStatus()=='Complete');\n if (d.playerType=='flash') return (p.ReadyState<4);\n return false;\n}\nconfig.macros.player.showControls=function(id,flag) {\n var d=document.getElementById(id+"_div"); if (!d) return false;\n var p=document.getElementById(id); if (!p) return false;\n if (d.playerType=='windows') { p.ShowControls=flag; p.ShowStatusBar=flag; }\n if (d.playerType=='realone') { alert('show/hide controls not available'); }\n if (d.playerType=='quicktime') // if player not ready, retry in one second\n { if (this.isReady(id)) p.setControllerVisible(flag); else setTimeout('config.macros.player.showControls("'+id+'",'+flag+')',1000); }\n if (d.playerType=='flash') { alert('show/hide controls not available'); }\n}\nconfig.macros.player.toggleControls=function(id) {\n var d=document.getElementById(id+"_div"); if (!d) return false;\n var p=document.getElementById(id); if (!p) return false;\n if (d.playerType=='windows') var flag=!p.ShowControls;\n if (d.playerType=='realone') var flag=true; // TBD\n if (d.playerType=='quicktime') var flag=!p.getControllerVisible();\n if (d.playerType=='flash') var flag=true; // TBD\n this.showControls(id,flag);\n}\nconfig.macros.player.fullScreen=function(id) {\n var d=document.getElementById(id+"_div"); if (!d) return false;\n var p=document.getElementById(id); if (!p) return false;\n if (d.playerType=='windows') p.DisplaySize=3;\n if (d.playerType=='realone') p.SetFullScreen();\n if (d.playerType=='quicktime') { alert('full screen not available'); }\n if (d.playerType=='flash') { alert('full screen not available'); }\n}\n//}}}\n\n// // Player HTML\n\n//{{{\n// placeholder (no player)\nconfig.macros.player.html.none=' \s\n <table id="%i%" width="%w%" height="%h%" style="background-color:#111;border:0;margin:0;padding:0;"> \s\n <tr style="background-color:#111;border:0;margin:0;padding:0;"> \s\n <td width="%w%" height="%h%" style="background-color:#111;color:#ccc;border:0;margin:0;padding:0;text-align:center;"> \s\n &nbsp; \s\n %u% \s\n &nbsp; \s\n </td></tr></table>';\n//}}}\n\n//{{{\n// Windows Media Player\n// v7.1 ID: classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6\n// v9 ID: classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95\nconfig.macros.player.html.windows=' \s\n <object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \s\n classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" \s\n codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" \s\n align="baseline" border="0" \s\n standby="Loading Microsoft Windows Media Player components..." \s\n type="application/x-oleobject"> \s\n <param name="FileName" value="%u%"> <param name="ShowControls" value="%s%"> \s\n <param name="ShowPositionControls" value="1"> <param name="ShowAudioControls" value="1"> \s\n <param name="ShowTracker" value="1"> <param name="ShowDisplay" value="0"> \s\n <param name="ShowStatusBar" value="1"> <param name="AutoSize" value="1"> \s\n <param name="ShowGotoBar" value="0"> <param name="ShowCaptioning" value="0"> \s\n <param name="AutoStart" value="1"> <param name="AnimationAtStart" value="1"> \s\n <param name="TransparentAtStart" value="0"> <param name="AllowScan" value="1"> \s\n <param name="EnableContextMenu" value="1"> <param name="ClickToPlay" value="1"> \s\n <param name="InvokeURLs" value="1"> <param name="DefaultFrame" value="datawindow"> \s\n %x% \s\n <embed src="%u%" style="margin:0;padding:0;" \s\n align="baseline" border="0" width="%w%" height="%h%" \s\n type="application/x-mplayer2" \s\n pluginspage="http://www.microsoft.com/windows/windowsmedia/download/default.asp" \s\n name="%i%" showcontrols="%s%" showpositioncontrols="1" \s\n showaudiocontrols="1" showtracker="1" showdisplay="0" \s\n showstatusbar="%s%" autosize="1" showgotobar="0" showcaptioning="0" \s\n autostart="1" autorewind="0" animationatstart="1" transparentatstart="0" \s\n allowscan="1" enablecontextmenu="1" clicktoplay="0" invokeurls="1" \s\n defaultframe="datawindow"> \s\n </embed> \s\n </object>';\n//}}}\n\n//{{{\n// RealNetworks' RealOne Player\nconfig.macros.player.html.realone=' \s\n <table width="%w%" style="border:0;margin:0;padding:0;"><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \s\n <object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \s\n CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \s\n <PARAM NAME="CONSOLE" VALUE="player"> \s\n <PARAM NAME="CONTROLS" VALUE="ImageWindow"> \s\n <PARAM NAME="AUTOSTART" Value="true"> \s\n <PARAM NAME="MAINTAINASPECT" Value="true"> \s\n <PARAM NAME="NOLOGO" Value="true"> \s\n <PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \s\n <PARAM NAME="SRC" VALUE="%u%"> \s\n %x% \s\n <EMBED width="%w%" height="%h%" controls="ImageWindow" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;" \s\n name="%i%" \s\n src="%u%" \s\n console=player \s\n maintainaspect=true \s\n nologo=true \s\n backgroundcolor=#333333 \s\n autostart=true> \s\n </OBJECT> \s\n </td></tr><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \s\n <object id="%i%_controls" width="%w%" height="60" style="margin:0;padding:0;display:%s%" \s\n CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \s\n <PARAM NAME="CONSOLE" VALUE="player"> \s\n <PARAM NAME="CONTROLS" VALUE="All"> \s\n <PARAM NAME="NOJAVA" Value="true"> \s\n <PARAM NAME="MAINTAINASPECT" Value="true"> \s\n <PARAM NAME="NOLOGO" Value="true"> \s\n <PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \s\n <PARAM NAME="SRC" VALUE="%u%"> \s\n %x% \s\n <EMBED WIDTH="%w%" HEIGHT="60" NOJAVA="true" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;display:%s%" \s\n controls="All" \s\n name="%i%_controls" \s\n src="%u%" \s\n console=player \s\n maintainaspect=true \s\n nologo=true \s\n backgroundcolor=#333333> \s\n </OBJECT> \s\n </td></tr></table>';\n//}}}\n\n//{{{\n// QuickTime Player\nconfig.macros.player.html.quicktime=' \s\n <OBJECT ID="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \s\n CLASSID="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" \s\n CODEBASE="http://www.apple.com/qtactivex/qtplugin.cab"> \s\n <PARAM name="SRC" VALUE="%u%"> \s\n <PARAM name="AUTOPLAY" VALUE="true"> \s\n <PARAM name="CONTROLLER" VALUE="%s%"> \s\n <PARAM name="BGCOLOR" VALUE="#333333"> \s\n <PARAM name="SCALE" VALUE="aspect"> \s\n <PARAM name="SAVEEMBEDTAGS" VALUE="true"> \s\n %x% \s\n <EMBED name="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \s\n SRC="%u%" \s\n AUTOPLAY="true" \s\n SCALE="aspect" \s\n CONTROLLER="%s%" \s\n BGCOLOR="#333333" \s\n EnableJavaSript="true" \s\n PLUGINSPAGE="http://www.apple.com/quicktime/download/"> \s\n </EMBED> \s\n </OBJECT>';\n//}}}\n\n//{{{\n// Flash Player\nconfig.macros.player.html.flash='\s\n <object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \s\n classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" \s\n codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"> \s\n <param name="movie" value="%u%"> \s\n <param name="quality" value="high"> \s\n <param name="SCALE" value="exactfit"> \s\n <param name="bgcolor" value="333333"> \s\n %x% \s\n <embed name="%i%" src="%u%" style="margin:0;padding:0;" \s\n height="%h%" width="%w%" quality="high" \s\n pluginspage="http://www.macromedia.com/go/getflashplayer" \s\n type="application/x-shockwave-flash" scale="exactfit"> \s\n </embed> \s\n </object>';\n//}}}
鹰击天风壮,鹏飞海浪春。 ——司马光\n----\n希望是生命的源泉,失去它生命就会枯萎。——富兰克林\n----\n我们唯一的悲哀是生活于愿望之中而没有希望。——但丁\n----\n人有了物质才能生存;人有了理想才谈得上生活。你要了解生存与生活的不同吗?动物生存,而人则生活。——雨果\n----\n许多人接受忠告,只有聪明人从中得益。——西拉士\n----\n只要你问的人够多,总会碰到一个人劝你去做你横竖要做的事。——W.S.\n----\n益者三友:友直、友谅、友多闻。 --孔子\n----\n如果你希望成功,就以恒心为良友,以经验为参谋,以谨慎为兄弟吧! --爱迪生\n----\n朋友间有误会应当坦率地交换看法,不可背地诽谤;有过失应当面规劝之,在背后则应赞扬他的优点 。 ——贝原益轩\n----\n以权利合者,权利尽而交疏。 ——《史记》\n----\n友谊和爱情之间的区别在于:友谊意味着两个人和世界,然而爱情意味着两个人就是世界。在友谊中一加一等于二;在爱情中一加一还是一。 ——泰戈尔\n----\n不要靠馈赠去获得朋友。你须贡献你诚挚的爱,学会怎样用正当的方法来赢得一个人的心。 ——苏格拉底\n----\n尘土受到损辱,却以她的花朵来报答。 ——泰戈尔\n----\n很多显得像朋友的人其实不是朋友,而很多是朋友的并不显得像朋友。 ——德谟克里特\n----\n播种一个行动,你会收获一个习惯;播种一个习惯,你会收获一个个性;播种一个个性,你会收获一个命运。 ——菩德吉\n----\n人生有一道难题,那就是如何使一寸光阴等于一寸生命。\n----\n凡是现实的都是合理的 ——黑格尔\n----\n历史是时代的见证,真理的火炬,记忆的生命,生活的老师和古人的使者 ——西塞罗\n----\n……要是一个人,能充满信心地朝他理想的方向去做,下定决心过他所想过的生活,他就一定会得到意外的成功。 \n ——戴尔·卡内基\n----\n弱者坐失良机,强者制造时机,没有时机,这是弱者最好的供词。 \n----\n记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的\n----\n能冲刷一切的除了眼泪,就是时间,以时间来推移感情,时间越长,冲突越淡,仿佛不断稀释的茶。 \n----\n怨言是上天得至人类最大的供物,也是人类祷告中最真诚的部分。 \n----\n智慧的代价是矛盾。这是人生对人生观开的玩笑。\n----\n如果敌人让你生气,那说明你还没有胜他的把握。\n----\n如果朋友让你生气,那说明你仍然在意他的友情。\n----\n鱼对水说你看不到我的眼泪,因为我在水里.水说我能感觉到你的眼泪,因为你在我心里。 \n----\n快乐要有悲伤作陪,雨过应该就有天晴。如果雨后还是雨,如果忧伤之后还是忧伤.请让我们从容面对这离别之后的离别。 微笑地去寻找一个不可能出现的你! \n----\n性格直率是思想深刻的自然结果。\n----\n人生是一场伟大的旅程。旅程本身不正是我们存在的目的吗?\n----\n死亡教会人一切,如同考试之后公布的结果??虽然恍然大悟,但为时晚矣~! \n----\n每个人都有潜在的能量,只是很容易:被习惯所掩盖,被时间所迷离,被惰性所消磨. \n----\n当幻想和现实面对时,总是很痛苦的。要么你被痛苦击倒,要么你把痛苦踩在脚下 \n----\n我不去想是否能够成功,既然选择了远方,便只顾风雨兼程; 我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影. \n----\n后悔是一种耗费精神的情绪.后悔是比损失更大的损失,比错误更大的错误.所以不要后悔 \n----\n生气是拿别人做错的事来惩罚自己\n----\n愚者用肉体监视心灵,智者用心灵监视肉体\n----\n你可以用爱得到全世界,你也可以用恨失去全世界\n----\n人的价值,在遭受诱惑的一瞬间被决定...\n----\n不论你在什么时候开始,重要的是开始之后就不要停止\n----\n不论你在什么时候结束,重要的是结束之后就不要悔恨\n----\n『不可能』只存在于蠢人的字典里\n----\n抱最大的希望,尽最大的努力,做最坏的打算\n----\n所有的胜利,与征服自己的胜利比起来,都是微不足道。\n所有的失败,与失去自己的失败比起来,更是微不足道。\n----\n上帝从不埋怨人们的愚昧,人们却埋怨上帝的不公平\n----\n如果你曾歌颂黎明,那么也请你拥抱黑夜\n----\n自己要先看得起自己,别人才会看得起你\n----\n乐观者在灾祸中看到机会;悲观者在机会中看到灾祸\n----\n所有欺骗中,自欺是最为严重的\n----\n人生最大的错误是不断担心会犯错\n----\n如你想要拥有完美无暇的友谊,可能一辈子找不到朋友\n----\n把自己当傻瓜,不懂就问,你会学的更多\n----\n要纠正别人之前,先反省自己有没有犯错\n----\n你不能左右天气,但你能转变你的心情\n----\n一切伟大的行动和思想,都有一个微不足道的开始\n----\n得意时应善待他人,因为你失意时会需要他们\n----\n一切麻烦都是自己找来的!————卢梭\n----\n世界上最重要的事情,就是懂得如何主宰自己。————孟德斯鸠\n----\n不要烦恼明天的事,明天自有明天的忧虑,一天的劳苦足够一天来承担。————基督教《圣经》\n----\n只要有生存的目标,人能忍受一切痛苦。————尼采\n----\n我势必正直、明慧、自由,只要我有此力量,我势不与自私者和有权势者为伍,共谋祸人之事,而且我必加以抨击,我势必将我整个生命贡献给美的崇拜。 ————雪莱\n----\n过去属于死神,未来属于自己!————雪莱 \n----\n要记住,人之所以走入迷途,并不是他的无知,而是由于他自以为知。 ————卢梭\n----\n一个志在有成就的人,他必须如歌德所说,知道限制自己。————黑格尔\n----\n人们轻易得到的东西往往不珍惜。————契可夫\n----\n君子在下位则多谤,在上位则多誉;小人在下位则多誉,在上位则多谤。——柳宗元 \n----\n你若要喜爱你自己的价值,你就得给世界创造价值。——歌德 \n----\n如果我们想交朋友,就要先为别人做些事——那些需要花时间、体力、体贴、奉献才能做到的事。——卡耐基\n----\n一个人的真正伟大之处就在于他能够认识到自己的渺小。——保罗 \n----\n对别人的意见要表示尊重。千万别说:"你错了。"——卡耐基 \n----\n那些背叛同伴的人,常常不知不觉地把自己也一起毁灭了。——伊索 \n----\n要使别人喜欢你,首先你得改变对人的态度,把精神放得轻松一点,表情自然,笑容可掬,这样别人就会对你产生喜爱的感觉了。——卡耐基\n----\n求人帮助的时候,求穷人比求富人容易。——契诃夫 \n----\n先相信自己,然后别人才会相信你。——罗曼·罗兰 \n----\n夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。——诸葛亮 \n----\n谁要游戏人生,他就一事无成,谁不能主宰自己,永远是一个奴隶。——歌德 \n----\n人生最终的价值在于觉醒和思考的能力,而不只在于生存。——亚里士多德 \n----\n人生犹如一本书,愚蠢者草草翻过,聪明人细细阅读。为何如此.因为他们只能读它一次。——保罗\n----\n好脾气是一个人在社交中所能穿着的最佳服饰。——都德 \n----\n 无论你怎样地表示愤怒,都不要做出任何无法挽回的事来。——培根 \n----\n骐骥一跃,不能十步;驽马十驾,功在不舍;锲而舍之,朽木不折;锲而不舍,金石可镂。——荀况\n----\n多听,少说,接受每一个人的责难,但是保留你的最后裁决。——莎士比亚 \n----\n沉默较之言不由衷的话更有益于社交。——蒙田 \n----\n在你发怒的时候,要紧闭你的嘴,免得增加你的怒气。——苏格拉底 \n----\n 受惠的人,必须把那恩惠常藏心底,但是施恩的人则不可记住它。——西塞罗\n----\n容易发怒,是品格上最为显著的弱点。——但丁 \n----\n应当在朋友正是困难的时候给予帮助,不可在事情无望之后再说闲话。——伊索 \n----\n你有信仰就年轻,疑惑就年老;有自信就年轻,畏惧就年老;有希望就年轻,绝望就年老;岁月使你皮肤起皱,但是失去了热忱,就损伤了灵魂。——卡耐基\n----\n为了争取将来的美好而牺牲了的人,都是一尊石质的雕像。——伏契克 \n----\n把希望建筑在意欲和心愿上面的人们,二十次中有十九次都会失望。——大仲马 \n----\n不鸣则已,一鸣惊人\n----\n伟大高贵人物的最明显标识,就是他有坚韧的意志。不管环境变换到何种地步,他的初衷与希望仍不会有丝毫的改变,直至克服阻碍,达到所期望的目的。 ——爱默生\n----\n与其临渊羡鱼,不如退而结网。\n----\n善于掌握时间的人,才是真正伟大的人。 ——歌德\n----\n人与人之间只有很小的差别,但这很小的差别却造成了巨大的差距,很小的差别在于,心态是积极的还是消极的,巨大的差距是成功与失败。 ——拿破仑•希尔\n----\n长久地迟疑不决的人,常常找不到最好的答案。——歌德\n----\n犹豫不决是以无知为基础的。\n----\n差错发生在细节,成功取决于系统。——比尔马瑞特\n----\n人生就是欲望,欲望得不到满足就痛苦,欲望得到了满足就无聊。人生就是痛苦加无聊。 ——尼采\n----\n尊重人不应该胜于尊重真理。 —— 柏拉图 \n----\n每个人都是自己的命运建筑师 ——沙拉斯特\n----\n生活是锻鍊灵魂的妙方——勃朗宁\n----\n面对光明,阴影就在我们身後——海伦凯勒\n----\n幸运是机会的影子——苏格拉底\n----\n你若对自己诚实,日积月累,就无法对别人不忠了.——莎士比亚\n----\n我们经常感到相当程度的精神混乱,因为我们经常同时想很多事情.\n----\n快乐是你与生俱来的权力,它不应该取决於你完成什麼\n----\n从未遭遇失败的人,对自己或是别人,都是一知半解的.——米尔顿\n----\n思想便是灵魂在对自己说话.——柏拉图\n----\n需要是成功之母\n----\n每一粒厄运的种子,却包孕著未来丰盛的果实.——莎士比亚\n----\n有志者事竟成\n----\n别人为食而生存,我为生存而食。——Socrates苏格拉底 \n----\n易得者亦易失。——Hazlitt赫斯特 \n----\n我们欲望中的东西,我们很快就信以为真。——Chaucer乔叟\n----\nThe longest day has an end.\n最难过的日子也有尽头。——Howell贺韦尔 \n----\nA man may lead a horse to the water, but he cannot make it drink.\n一个人可以把马带到河边,但他不能令它饮水。——Heywood希伍德 \n----\nThere is no rose without a thorn.\n没有玫瑰花是不长刺的。—— Ray雷 \n----\n Victory won’t come to me unless I go to it.\n胜利是不会向我走来的,我必须自己走向胜利。——M. Moore穆尔 \n----\nEarly to bed and early to rise, makes a man healthy, wealthy, and wise.\n早睡早起使人健康、富裕又聪明。——Benjamin Franklin富兰克林 \n----\nLife is just a series of trying to make up your mind.\n生活只是由一系列下决心的努力所构成。——T. Fuller富勒\n----\nGoals determine what you are going to be.\n目标决定你将成为为什么样的人。——Julius Erving欧文 \n----\nAll human wisdom is summed up in two words ? wait and hope.\n人类所有的智慧可以归结为两个词—等待和希望。——Alexandre Dumas Pére大仲马(法国作家) \n----\nIt is not enough to be industrious, so are the ants. What are you industrious for?\n光勤劳是不够的,蚂蚁也是勤劳的。要看你为什么而勤劳。——H. D. Thoreau梭罗 \n----\nI like the dreams of the future better than the history of the past.\n我不缅怀过去的历史,而致力于未来的梦想。——T. Jefferson杰弗逊(美国第3任总统) \n----\nActivity is the only road to knowedge. \n行动是通往知识的唯一道路。--英国剧作家 肖伯纳,G \n----\nA free man obtains knowledge from many sources besides books.  \n一个自由的人除了从书本上获取知识外,还可以从许多别的来源获得知识。——美国总统 杰斐逊 .T. \n----\n上善若水,厚德载物。\n----\n以天下至诚胜天下至伪,以天下至拙胜天下至巧。\n----\n分享的朋友,在精不在多,分享的幸福就在下一秒.——司恩鲁\n----\n百川东到海,何时复西归?少壮不努力,老大徒伤悲。——汉乐府《长歌行》\n----\n察己则可以知人,察今则可以知古。——《吕氏春秋》\n----\n每个意念都是一场祈祷。——詹姆士·雷德非\n----\n恻隐之心,人皆有之,羞恶之心,人皆有之,恭敬之心,人皆有之,是非之心,人皆有之。——孟子\n----\n见贤思齐,见不贤而内自省。——孔子\n----\n奋斗、寻觅、发现,而不屈服。\n----\n所有口述手写的辞句中,最悲哀的就是"本来可以…" ——惠蒂尔\n----\n、当一切毫无希望时,我看着切石工人在他的石头上,敲击了上百次,而不见任何裂痕出现。但在第一百零一次时,石头被劈成两半。我体会到,并非那一击,而是前面的敲打使它裂开。 ——贾柯·瑞斯\n----\n虚荣心很难说是一种恶行,然而一切恶行都围绕虚荣心而生,都不过是满足虚荣心的手段。 ——柏格森\n----\n人生过程的景观一直在变化,向前跨进,就看到与初始不同的景观,再上前去,又是另一番新的气候。 ——叔本华\n----\n人类的悲剧,就是想延长自己的寿命。我们往往只憧憬地平线那端的神奇玫瑰园,而忘了去欣赏今天窗外正在盛开的玫瑰花。——戴尔·卡内基\n----\n每天安静地坐十五分钟·倾听你的气息,感觉它,感觉你自己,并且试着什么都不想。——艾瑞克·佛洛姆\n----\n人生的目的有二:先是获得你想要的;然后是享受你所获得的。只有最明智的人类做到第二点。——罗根·皮沙尔·史密斯\n----\n旅行的精神在于其自由,完全能够随心所欲地去思考、去感觉、去行动的自由。——威廉·海兹利特\n----\n明知不可而为之的干劲可能会加速走向油尽灯枯的境地,努力挑战自己的极限固然是令人激奋的经验,但适度的休息绝不可少,否则迟早会崩溃。 ——迈可·汉默\n----\n有两种人是没有什么价值可言的:一种人无法做被吩咐去做的事,另一种人只能做被吩咐去做的事。——C·H·K·寇蒂斯\n----\n一般的伟人总是让身边的人感到渺小;但真正的伟人却能让身边的人认为自己很伟大。——G.K.Chesteron\n----\n问题不在于:一个人能够轻蔑、藐视或批评什么,而是在于:他能够喜爱、看重以及欣赏什么。——约翰·鲁斯金\n----\n过去,我曾经接触过世界上许多大人物,但我从没见过被人叱责之后,比被人称赞之后,更能把事情做好的人。 \n ——查尔斯·休瓦夫\n----\n忙碌的人只会受到一个恶魔的引诱,而懒惰的人则会受到一群恶魔的引诱。 ——汤玛斯·富勒\n----\n人们经常会信口说什么尚未找到自我,但是事实上,自我并不是被找出来的,它是被创造出来的。——汤玛斯·萨斯\n----\n勇气就是能够超越愤怒、悲惨、恐惧、不平,同时内心明确告诉自己生命是美好的,尽管多磨难,生命是有意义的。 \n ——桃乐丝·汤普森\n----\n人家的窃窃私语与你何干。让人家去说长道短;要像一座卓立的塔,绝不因为暴风而倾斜。 ——但丁\n----\n没有德行的美貌,转眼即逝,可是在你的美貌中,有一颗美好的灵魂,所以你的美常在。——莎士比亚\n----\n人格像一棵树,而名声就像树影,我们往往以为树影就像树的样子,其实唯有树身才是真实的。——林肯\n----\n最近常常觉得疲倦吗?这次不要用咖啡提神。试着问自己,有什么事情让你感到心烦、力不从心、无法释怀?\n ——保罗·皮尔梭\n----\n经验、环境和遗传造就了你的面目,无论是好是坏,你都得耕耘自己的园地;无论是好是坏,你都得弹起生命中的琴弦。 ——卡耐基\n----\n人并不是在有时间时才培养耐心;正确的观念应该是:由于人学会了有耐心,所以才拥有比足够还要多的时间。 \n ——保罗·皮尔梭\n----\n学习就像爬山。爬上这一座头,还有另一座更高的山,永无终点。——永崎一则\n----\n 打开窗户吧!别叫它遮蔽了碧蓝的天空;让花的阵阵幽香,飘进我的屋内;让太阳最初的光芒,洒遍我全身的每个角落。 ——塔果卢\n----\n我向来宁愿去相信每一个人的最好的一面 --- 这会省去很多的困扰。 ——吉普林\n----\n人类的进步既非自发也非必然﹍我们没有时间漠然或踌躇,现在就是振作起来积极行动的时刻。——马丁路得·金\n----\n和同伴格格不入的人,或许只是因为他听到的拍子不一样。何不就让这人随着他听到的乐声走,管他有无节奏,是否离谱呢。——亨利·大卫·梭罗\n----\n在争取正义的奋斗中,我们唯一的报赏只是一个机会。你不必指望你明天即将会有这个机会,而是必须努力不懈。 \n——佛烈德瑞克·道格拉斯\n----\n 无论真实的自我是如何奇怪或令人惊异,我们必须敢于作自己。 ——梅·莎顿\n----\n逃避危险最后并不会比冒险犯难安全,怯懦者失败的机会和胆大的人一样多。 ——海伦·凯勒\n----\n人们最好在运筹帷幄时胆小一点,并想及所有不良后果;但在必须行动的时候,便要大胆敢为。 [西罗多得]\n----\n在研究过那些知名男女后,我发现,他们的成功是因为他们做手边诸事都用尽全力、以极度的热忱努力不懈。 [哈瑞·杜鲁门]\n----\n专家永远没有办法解决富足社会的饥馑问题,必须靠你我同心协力的行动。 [法兰西斯·摩尔·拉蓓]\n----\n你可能犯各种错误,但只要你豁达、坦诚,并且勇敢,你就不会对这世界有害。世界是属于年轻人的。 [温斯顿·丘吉尔]\n----\n有三件事使人生有意义-工作、意志与成功。意志开启通往成功之门,那是件宏伟且令人喜悦的事。经由工作我们通过一扇扇的门,直到最后,终能摘取成功的果实。 [路易斯·伯斯特]\n----\n只有在突破自我关切的瓶颈,进而关切全人类的福祉时,人生才算真正开始。 [马丁·路得·金]\n----\n适合某人穿的鞋,可能会让另一个穿来痛苦不堪;生活没有放诸四海皆准的良方。每个人都有他自成一格的生活模式。 [艾瑞克·强]\n----\n往前走,失败没有关系。但要败得有智能,败得优雅,败得有格调..... [汤姆·鲁宾斯]\n----\n一棵树长到它想长的高度后,它才知道怎样的空气适合它。 [亨利·大卫·梭罗]\n----\n就拥抱失败吧!寻找失败且学习爱上失败,可能是我们唯一的解脱方式。 [汤姆·鲁宾斯] \n----\n我从来没有遇到一个富有的人是快乐的,但是我很少遇到一个贫穷的人不想要变成一个富有的人。[马格瑞吉]\n----\n真正的友情就像良好的健康一样,不到丧失不会明暸它的价值。 [柯尔顿]\n----\n胜利者知道无快捷方式可达到高峰,他们一步一步地爬上山去,直升机对他们毫无用处。 [艾德勒]\n----\n进入一不同的新行业,必须对自己充满信心,在面对无情的打击和不公的命运时,你必须要能自持。 [苏菲亚罗兰]\n----\n当批评减少而增多鼓励和夸奖时,人们所做的好事会增加,而不好的事会受到忽视而萎缩。 [卡内基]\n----\n要从工作中得到乐趣,首先不要让自己变成工作的奴隶,而要让自己变成工作的主人。无止境的日夜工作,正如无止境的追逐玩乐一样不可取。 [摘自乐在工作]\n----\n快乐是一种选择,我们可以在任何时间、任何地点和状况中做这种选择,因为每一项经验都可被建构出一种正面的意义,我们可以由任何人、事、物上汲取快乐。 [摘自 快乐的秘密]\n----\n常胜者,既不过份悲观,也不过份乐观。他的危机意识是用来化除危机;他的希望源自于知道未来永远有好转的可能。 [摘自 天天都成功]\n----\n爱情是一生的功课;宽容是永远的习题。觉悟-屠夫要放下的是刀;恋爱-情人要放下的是心。放心去爱,然后选择放心的携手相伴,或是离开....... [摘自 爱是一生的功课]\n----\n每次大海退潮后,都会留下厚礼。看得见的是贝壳、小鱼、虾或是螃蟹;看不见的是懂得赠予与宽容的心 [摘自 希望之旅]\n----\n 左手拥抱了一堆东西、 右手拥抱了另一堆东西、但是地上还有一堆东西。我想伸手再取一些,结果所有的东西都洒满了一地.. [摘自一首古老的诗]\n----\n如果人生面对的最大苦难只是死亡,那还有什么可以害怕的呢?人生中没有解决不了的事,也没有无法面对的事。 [摘自电影 新不了情]\n----\n人生就像一盒巧克力,你永远不知道你会吃到什么口味,每天都要吃点苦的东西,以免忘记苦味。 [摘自电影 阿甘正传]\n----\n这是一个必须靠新一代领导人应付新问题、把握新机会的时代,因为新世界有待征服。 [约翰·甘乃迪] \n----\n与其猜测别人怎么认为你,不如多花点心思了解自己,人们往往因为追求了解自己而富有。 [蒙特纽]\n----\n你能真心诚意地帮助别人,别人也会来帮助你,这是我们人生中最好的一种报酬。 [爱默生]\n----\n世间的任何事物,追求时候的兴致总比享用时候的兴致浓烈。[莎士比亚]\n----\n喜欢作事的人,能因完成一件事而喜悦,这种人是最幸福的。然而改正缺点,补偿了错误,则是最高的幸福。 [哥德]\n----\n一个好的假期,是与对时间的观念比你更模糊的人一起度过。 [普力斯特里]\n----\n一个人钻研的愈多,他学习到的愈多,一个人学习到的愈多,他愈了解到他所知道的何其浅薄。 [威斯特]\n----\n人生只有一事算得是成功的──能够依照你自己的方式去生活。 [摩尔利]\n----\n世上的成功者愿意付出的远超过规定,同时还以欢喜的心去做。 [山缪.葛雷池]\n----\n决定你幸福或不幸福的,不在于你有什么,或你是谁,或你在什么地方,或你正在做什么,而是你怎么想。 [卡内基]\n----\n一句或两句体贴的话,对他人态度作宽大的了解,这些都可以减少对别人的伤害,保住他的面子。[卡内基]\n----\n人家说最好的好人,都是犯过错误的过来人;一个人往往因为有一点小小的缺点,将来会变得更好。 [莎士比亚]\n----\n学问是我们随身的财产,我们自己在什么地方,我们的学问也跟着我们在一起。 [莎士比亚]\n----\n阳光普照与暴风雨,不过是天空表情的不同而已,而不管命运是甘甜或苦涩,都应该使它成为最好的人生粮食。 [贺尔曼.荷生]\n----\n奉承有如轻吹的北风般令人心情愉快,但是,它却不是使帆张扬起来而触动船开航的一阵风。 [吉尔.鲁纳尔]\n----\n为何老是有人喜欢对他人恶言恶语·我想可能是大部份的人都误以为肯定了他人的优点,便会跟着减损了自己的光荣所成的。 [哥德]\n----\n一种方式只适合一种人,每个人都应该追求属于自己的方式;站在自己外围的人们,请小心,别摔倒了! [哥德]\n----\n名望一闪即逝,钱财振翅而飞,走红是个意外,久长唯有品格。 [无名]\n----\n休息并不是浪费生命,它能够让你在清醒的时候,做更多清醒、有效率的事。 [卡内基]\n----\n若想克服恐惧,不要只想到自己,设法去协助别人,恐惧便会消失。 [卡内基]\n----\n虽住在气候宜人的地方,也免不了受蚊蝇的滋扰,虽然享受着盛大的欢乐,也免不了受烦恼的缠绕。 [莎士比亚]\n----\n笑声有如音乐,在可以耳闻笑声的地方,人生的各种灾祸都遁逃无踪。 [杉达思]\n----\n不是自己出头的时候,就不要插嘴说话,什么事都想要插嘴的人,就是没有自信。 [易卜生] \n----\n每个人都像一本书,用一生的时间也读不完。如果你觉得读完了,那是因为你厌倦了。如果你自己这本书一成不变,那是因为你的书成为了历史,你已经死了...
/***\n''QuoteOfTheDayPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#QuoteOfTheDayPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nDisplay a randomly selected "quote of the day"\n\n!!!!!Usage\n<<<\n{{{<<QOTD //tiddlername//>>}}}\nPut your quotations into a tiddler (called //tiddlername//). Separate each quote by a horizontal rule (use "----" on a line by itself). Each time the macro is rendered it will display a different quotation, selected at random from the specified tiddler.\n<<<\n!!!!!Example\n<<<\n{{{<<QOTD Quotations>>}}}\n<<QOTD Quotations>>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''QuoteOfTheDayPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for QuoteOfTheDay handling^^\n<<<\n!!!!!Revision History\n<<<\n''2005.10.21 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\nBased on a suggestion by M.Russula\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.QOTD = {major: 1, minor: 0, revision: 0, date: new Date(2005,10,21)};\nconfig.macros.QOTD = {};\nconfig.macros.QOTD.handler= function(place,macroName,params) {\n var txt=store.getTiddlerText(params[0]); if (!txt) return;\n var quotes=txt.split("\sn----\sn");\n // then, get a random index number between 0 and N-1 and wikify that text\n wikify(quotes[Math.floor(Math.random()*quotes.length)],place);\n}\n//}}}
<script>\n var field="modified";\n var dir=-1; // +1==ascending, -1==descending\n var tiddlers=store.getTiddlers(field);\n tiddlers.sort(function(a,b){if(a[field]==b[field])return(0);else return(a[field]<b[field])?-dir:dir;});\n var limit=15; // set to tiddlers.length to list *all* tiddlers\n var out="";\n for (var i=0; i<limit; i++)\n if (!tiddlers[i].tags.contains("excludeLists"))\n out+="<<tiddler ShowTiddlerClip with: "+tiddlers[i].title+">>";\n return(out);\n</script>
/%\nusage:\n <<tiddler ReplaceTiddlerTitle with: "new title text">>\n\n%/<script>\n // get the tiddler element\n var t=story.findContainingTiddler(place);\n if (t && t.id!="tiddlerReplaceTiddlerTitle") \n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"title"))\n t.childNodes[i].innerHTML="$1";\n</script>
/%\n\nUsage: <<tiddler ScrollBox with: TiddlerName height>>\n\n%/@@display:block;height:$2;overflow:auto;<<tiddler $1>>@@@@display:block;text-align:right;^^scroll for more...^^@@
/***\n''Select Stylesheet Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#SelectStylesheetPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nSelect alternative TiddlyWiki CSS stylesheet 'themes' from a list of tiddlers tagged with "stylesheets".\n\n!!!!!Usage\n<<<\nThis plugin defines a macro that creates a stylesheet link or selection listbox/droplist that can be added to the content of any tiddler (such as the OptionsPanel or MainMenu tiddlers).\n\nFirst, create (or import) a custom style sheet tiddler (i.e, a tiddler containing CSS definitions) and tag it with <<tag stylesheets>> so it can be included in the selection list. Then, add the {{{<<selectStylesheet>>}}} macro to the desired tiddler to display the stylesheet list. (note: to create a link to apply a specific stylesheet, include the stylesheet tiddlername as a parameter. See below for more details).\n\nSelect your desired stylesheet from the droplist:\n** ''[system]'' uses the built-in CSS definitions\n** ''[default]'' uses "StyleSheet" tiddler (if present)\n** //tiddlername// uses any named stylesheet\nThe currently selected stylesheet is indicated by a '>' symbol.\n\n//Note: If a selected stylesheet tiddler no longer exists (i.e, the tiddler was deleted or renamed after it had been selected for use), the [default] CSS tiddler ("StyleSheet") will be used as a fallback. If this tiddler does not exist either, then the built-in CSS definitions are used.//\n<<<\n!!!!!Parameters\n<<<\nThe selectStylesheet macro accepts parameters to control various features and functions. //Note: while each parameter is optional and may be omitted from the macro, the parameters (when present) must appear in the order shown below.//\n* ''size:nnn''\nDetermines the number of lines to display in the stylesheet list. If this parameter is omitted or "size:1" is specified, a single-line droplist is created. When a size > 1 is provided, a standard, fixed-size scrollable listbox is created. You can use "size:0" or "size:auto" to display a varible-height listbox that automatically adjusts to fit the current list contents without scrolling.\n* ''width:nnn[cm|px|em|%]''\nControls the width of the stylesheet list. Overrides the built-in CSS width declaration (=100%). Use standard CSS width units (cm=centimeters, px=pixels, em=M-space, %=proportional to containing area). You can also use a ".selectStylesheet" custom CSS class definition to override the built-in CSS declarations for the stylesheet list.\n* ''label:text'' and ''prompt:text''\nwhen used in conjunction with a specific named stylesheet to create a stylesheet link (see //tiddlername// param, below), these two parameters define the link text the 'tooltip' text that appears near the mouse pointer when placed over the link, respectively.\n* ''//tiddlername//''\nIf you include a stylesheet //tiddlername// parameter in the macro (e.g., {{{<<selectStylesheet [[Woodshop]]>>}}} then a link will be created instead of a listbox/droplist. Selecting this link applies the specified stylesheet. You may use the special keywords ''[system]'' to use the built-in CSS definitions, or ''[none]'' to bypass all stylesheet tiddlers (sometimes useful during CSS debugging).\n\n<<<\n!!!!!Nested Stylesheets\n<<<\nThe CSS definitions for TiddlyWiki are fairly substantial, and stylesheet tiddlers can include hundreds of lines of CSS statements. Often, these stylesheets will use the exact same CSS for the bulk of their definitions plus several changes or additions to create a difference in appearance. This results in lots of duplicated CSS definitions that can become difficult to keep 'in sync' with each other.\n\nTo make this problem much easier to manage, you can move the common CSS definitions into separate stylesheet tiddlers. Then, embed {{{[[tiddlertitle]]}}} references in the original stylesheet tiddlers to re-combine the CSS definitions into a single stylesheet 'theme' to be applied.\n\nWith some clever division of CSS into separate tiddlers, you can quite easily construct dozens of stylesheet combinations. You can also mark the common CSS tiddlers with tags and use them as overlay stylesheets so you can mix-and-match their styles to create even more 'on-the-fly' stylesheet combinations.\n\nNote: Normally, when rendering tiddler content for display, the {{{[[tiddlertitle]]}}} syntax means "insert a link to this tiddler". However, when applying stylesheets, this syntax means "insert the content of this tiddler"\n<<<\n!!!!!Bypassing default shadow styles (for 'CSS gurus')\n<<<\nNormally, TiddlyWiki documents automatically use CSS definitions contained in ''shadow tiddlers:'' StyleSheetLayout, StyleSheetColors, and StyleSheetPrint. Custom stylesheet definitions are then ''overlayed'' on top of these default styles, allowing you to modify and extend the CSS definitions to suit your desired look-and-feel, by just adding a few lines of CSS, instead of directly modifying the shadow tiddlers (which, while it is allowed, is not recommended).\n\nPrior to version 4.3.0 (2006 August 27), the plugin behavior always bypassed the shadow stylesheets when applying a selected custom stylesheet. As a result, the custom stylesheet definitions had to contain this syntax: {{{[[StyleSheetLayout]] [[StyleSheetColors]] [[StyleSheetPrint]]}}} to make use of the default CSS definitions. Unfortunately, this made it awkward to import and use 'standard' StyleSheet tiddlers defined for use without the SelectStylesheetPlugin, as they didn't necessarily contain the needed references to the shadow defaults.\n\n''As of version 4.3.0, SelectStylesheetPlugin no longer bypasses the default shadow stylesheets, so that the {{{[[...]]}}} references to the shadows are not required to include the default styles.''\n\nHowever, if overriding a CSS definition in a custom StyleSheet is simply not sufficient for your needs, you can still ''completely bypass the built-in shadow styles'' by entering\n{{{\nconfig.options.chkBypassShadowStyles=true\n}}}\ninto a tiddler tagged with<<tag systemConfig>> (e.g., "ConfigTweaks"). This ''internal system value'' causes the plugin to revert to the pre-4.3.0 behavior so that it skips the shadow styles when applying a selected stylesheet. Note that this setting is not a user-level preference, so it is not presented as a checkbox option nor stored in a cookie, as it is intended to only be set by the //author// of the document.\n<<<\n!!!!!Changing templates or invoking custom javascript from a stylesheet\n<<<\nIn addition to CSS definitions, some TiddlyWiki look-and-feel designs also make adjustments to the TiddlyWiki document structure so that certain document features can be moved, hidden, or otherwise redefined. The default set of templates that control the document structure are called PageTemplate, ViewTemplate, and EditTemplate. To select an alternative set of templates, you can include the special psuedo-macro ''{{{<<template prefix>>}}}'' in your stylesheet. This adds the indicated prefix to the standard template names, and automatically switches to using those templates whenever the stylesheet is selected and applied.\n\nWhenever a document is being viewed in read-only mode (i.e., via http: protocol), an implied template prefix of "Web" is also used, and is inserted between any custom template prefix and the standard template name. For example, ''{{{<<template Custom>>}}}'' will use {{{CustomWebViewTemplate}}} when the document is in read-only mode. You can specify an alternative for this implied prefix by including a second prefix parameter in the pseudo-macro. For example, ''{{{<<template Custom ReadOnly>>}}}'' will use {{{CustomReadOnlyViewTemplate}}}. Note: if a template tiddler with the indicated combination of custom and read-only prefixes is not available, a suitable fallback template is chosen, first by omitting the custom prefix, then by omitting the read-only prefix, and finally by omitting both, and reverting to the appropriate default template.\n\nIn addition to selecting alternative templates, a stylesheet can also include the psuedo-macro ''{{{<<init tiddlertitle>>}}}'' to execute custom javascript that can access TiddlyWiki internal data and 'core' functions or perform direct manipulation of the currently-rendered DOM elements of the document. First, place the desired javascript code into one or more tiddlers (note: //although these tiddlers will contain javascript, ''do NOT tag them as 'systemConfig', since this will cause the javascript to be executed every time TW starts'', rather than only when a specific stylesheet has been selected//). Then, add the ''{{{<<init tiddlertitle>>}}}'' pseudo-macro to your stylesheet so the javascript will be executed when that specific stylesheet is selected and applied.\n\nOf course, when another stylesheet is subsequently selected, other custom javascript functions may be needed to reset whatever TW internal data changes or DOM manipulations were performed by any {{{<<init>>}}} scripts. You can define tiddlers containing these ''reset'' scripts by embedding ''{{{<<reset tiddlertitle>>}}}'' in your stylesheet definition. Unlike {{{<<init>>}}} scripts, any tiddlers declared in this way will NOT be executed when the stylesheet is applied, but will be remembered and automatically executed before applying another stylesheet.\n\nNote: These special-purpose psuedo-macros are only executed when the stylesheet containing them is actually in use. When these macros are rendered as part of the tiddler content (such as when //viewing// a stylesheet definition), the macros simply report their values without performing any actions.\n<<<\n!!!!!Examples\n<<<\nsingle auto-sized listbox\n{{{<<selectStylesheet size:auto width:60%>>}}}\n<<selectStylesheet size:auto width:60%>>\n\ndroplist for stylesheets\n{{{<<selectStylesheet size:1 width:30%>>}}}\n<<selectStylesheet size:1 width:30%>>\n\ninline links to set specific stylesheets\n{{{<<selectStylesheet Woodshop>> or <<selectStylesheet [[Edge of Night]]>> or <<selectStylesheet [default]>> or <<selectStylesheet [none]>> or <<selectStylesheet label:TiddlyWiki "prompt:The standard TW stylesheet" [system]>>\n}}}\n<<selectStylesheet Woodshop>> or <<selectStylesheet [[Edge of Night]]>> or <<selectStylesheet [default]>> or <<selectStylesheet [none]>> or <<selectStylesheet label:TiddlyWiki "prompt:The standard TW stylesheet" [system]>>\n\nstylesheet definitions (tagged with "stylesheets"):\n<<tag stylesheets>>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SelectStylesheetPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SelectStylesheethandling^^\n\ncreate/edit ''OptionsPanel'':\nAdd "{{{<<selectStylesheet [size:nnn|auto] [width:nnn[cm|px|em|%]>>}}}" macro.\n<<<\n!!!!!Revision History\n<<<\n''2006.08.27'' [4.3.0] in applyStylesheets(), changed default so that shadow stylesheets are automatically applied ALONG WITH the selected custom stylesheet. Use config.options.chkBypassShadowStyles=true to revert to the prior handling (i.e., skip the shadow stylesheets)\n''2006.08.26'' [4.2.7] in applyStylesheets(), added depth-limiting param to getRecursiveTiddlerText() to avoid inifinite recursion. Note: limits nesting of stylesheets to 10 levels (same as core).\n''2006.06.28 [4.2.6]'' added 'nocookie' param to set(), so "style:xyz" param can **temporarily** override stylesheet (by NOT overwriting the cookie value)\n''2006.05.18 [4.2.5]'' revert to 'onchange' handling, BUT... don't *reload* the list contents each time selection changes (just move the ">" indicator to the current item instead), AND... track onkeydown/up to avoid FF crash due to excess calls to set() when scrolling a listbox by holding down arrow keys.\n''2006.05.15 [4.2.4]'' switch from 'onchange' listbox handling to 'onclick' and 'onkeyup'. Avoids FF **CRASH** due to stylesheets being excessively refreshed *during* onchange due to keyboard event handling.\n''2006.04.21 [4.2.3]'' recognize "stylesheet" tag when building list of available stylesheets (in addition to plural, "stylesheets")\n''2006.04.05 [4.2.2]'' in applyStylesheet(), reverted change from 4.2.0: *don't* apply "StyleSheetColors" and "StyleSheetLayout" along with selected stylesheet, so custom stylesheet can completely bypass the default formatting. To include default formatting in a stylesheet, embed "[[StyleSheetColors]] [[StyleSheetLayout]]" \n''2006.03.30 [4.2.1]'' in applyStylesheet(), change calls from "window.eval()" to just "eval()" to avoid FF1501 'global variable crash' problem \n''2006.03.30 [4.2.0]'' remove [none] choice from listbox. Added handling for <<selectStylesheet sheetname>> to create a link that applies the specified sheet instead of presenting a listbox of available sheets. added "style:" paramifier. Apply "StyleSheetColors" and "StyleSheetLayout" along with selected stylesheet (i.e., overlay selected sheet on top of shadow styles instead of replacing default shadow styles). Based on suggestions from Clint Checketts.\n''2006.03.09 [4.1.4]'' in refreshSelectStylesheet(), make sure that tiddler named in stylesheet cookie value still exists before attempting to select it in the listbox.\n''2006.02.25 [4.1.3]'' Problem: the ">" indicator was not always being refreshed, due to event "timing" issues. refreshSelectStylesheet() deferred for 10msec so it will execute *after* onChangeSelectStylesheet event processing has completed.\n''2006.02.24 [4.1.2]'' Problem: {{{<<template>>}}} macro was not being processed in IE.\nCause: regexp processing creates browser-internal "private globals" used to keep track of the regexp parser's state, including the current 'scan' position within the source string. This lets you use search() and exec() inside loops to scan for successive pattern matches. In applyStyleSheet(), "theCSS.search(templateRegExp)" was called before "theCSS.exec(templateRegExp)". As a result, the regexp parser had already matched the {{{<<template>>}}} macro embedded in the CSS and thus did not actually process the macro and switch the templates.\nFix: use {{{indexOf("<<template")}}} instead of search(templateRegExp) to check for presence of template switching macro in CSS.\n''2006.02.23 [4.1.1]'' performance fixes: in switchTemplates(), added default init of 'altTemplate' value to prevent unneeded triggering of refreshPageTemplate() during TW load-time when using standard templates. Saves LOTS of startup time and avoids the dreaded "script is running slowly" FireFox warnings.\nAlso, the forEachTiddler() call to force a "refresh all tiddlers" (needed when view/edit templates are changed) was moved from applyPageTemplate() and is now called directly from switchTemplates(). This eliminates redundant re-rendering of tiddlers while the page template is being refreshed.\n''2006.02.21 [4.1.0]'' added {{{<<template>>}}} pseudo-macro with new switchTemplate() function. Allows stylsheets to switch page/view/edit templates by adding a prefix to standard template names. Detects readOnly mode and automatically adds "Web" to template name (e.g. "MyWebViewTemplate"). Defines "Web" shadow templates and "viewSource" toolbar command.\n''2006.02.21 [4.0.3]'' added real macro handlers for psuedo-macros "init", "reset" so they will display in the stylesheet tiddler without appearing as an error.\n''2006.01.20 [4.0.2]'' add 'var' to unintended global variable declarations and wrapped notification hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2006.01.20 [4.0.1]'' Added optional "init" keyword for {{{<<init tiddlertitle>>}}} psuedo-macro syntax (note: previous {{{<<tiddlertitle>>}}} syntax still permitted)\nRevised documentation to better describe use of init/reset for custom code invokation.\n''2005.11.05 [4.0.0]'' Entire plugin simplified in response to new "shadow stylesheet" architecture introduced in TW1.2.37. Concept of separate overlays has been removed. Stylesheet themes are assembled using [[tiddler]] 'nesting' syntax, and tagged as 'stylesheet'. A single listbox/droplist is provided to select themes.\n''2005.10.25 [3.1.0]'' added support for embedding {{{<<reset tiddlertitle>>}}} companion code (to declare 'DOM cleanup' routines invoked when a stylesheet is UNloaded)\n//Based on a request from ClintChecketts//\n''2005.10.09 [3.0.1]'' combined documentation and code in a single tiddler\n''2005.08.15 [3.0.0]'' Another major re-write. Replaced separate "selectOverlays" macro definition with 'overlays' parameter on 'selectStylesheet' macro. Added support for embedding {{{<<tiddlertitle>>}}} companion code. applyStylesheets() completely re-designed to address quirks with loading and combining multiple stylesheets using browser-specific native handling, as well as add support for executing companion code. Stylesheets+overlays+code are now handled in a platform-neutral manner that avoids differences between browser implementations and uses much less overhead in the DOM.\n''2005.08.07 [2.0.0]'' Major re-write to not use static ID values for listbox controls, so that multiple macro instances can exist without corrupting each other or the DOM. Moved HTML and CSS definitions into plugin code instead of using separate tiddlers. Added new features: support for multiple groups of overlay stylesheets with collapsible tree display. Added size and width params for listbox display.\n''2005.07.27 [1.0.3]'' core update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()\n''2005.07.25 [1.0.2]'' correct 'fallback' handling in selectStyleSheet()\n''2005.07.23 [1.0.1]'' added parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]. Thanks to David Jaquith for testing and bug reports and SteveRumsby for feature suggestions.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.selectStylesheet = {major: 4, minor: 3, revision: 0, date: new Date(2006,8,27)};\n\n// IE needs explicit global scoping for functions/vars called from browser events\nwindow.refreshSelectStylesheet=refreshSelectStylesheet;\nwindow.applyStylesheets=applyStylesheets;\n\nif (!config.options.txtStyleSheet) config.options.txtStyleSheet="StyleSheet";\n//}}}\n\n//{{{\n// define macro rendering handler\nconfig.macros.selectStylesheet = { };\nconfig.macros.selectStylesheet.reset = [];\nconfig.macros.selectStylesheet.handler = function(place,macroName,params) {\n setStylesheet(".selectStylesheet {width:100%;font-size:8pt;margin:0em}","selectStylesheetPlugin");\n var autosize=1;\n if (params[0] && (params[0]=="size:auto"))\n { autosize=0; params.shift(); }\n if (params[0] && (params[0].substr(0,5)=="size:"))\n autosize=(params.shift()).substr(5);\n if (params[0] && (params[0].substr(0,6)=="width:"))\n var width=(params.shift()).substr(6);\n if (params[0] && (params[0].substr(0,6)=="label:"))\n var label=(params.shift()).substr(6);\n if (params[0] && (params[0].substr(0,7)=="prompt:"))\n var prompt=(params.shift()).substr(7);\n if (params[0] && params[0].trim().length) // create a link that sets a specific stylesheet\n createTiddlyButton(place,label?label:params[0],prompt?prompt:params[0], function(){config.macros.selectStylesheet.set(params[0]); return false;});\n else { // create a select list of available stylesheets\n var theList=createTiddlyElement(place,"select",null,"selectStylesheet",null);\n theList.onkeydown=function() // track keystrokes for listbox only\n { if (this.size>1 && !this.keydown) { this.keydown=true; this.previousIndex=this.selectedIndex; } return true; };\n theList.onkeyup=function()\n { if (this.keydown) { this.keydown=false; if (this.selectedIndex!=this.previousIndex) config.macros.selectStylesheet.set(this.value); } return true; };\n theList.onchange=function()\n { if (!this.keydown) config.macros.selectStylesheet.set(this.value); return true; };\n theList.size=1;\n theList.autosize=autosize;\n if (width) theList.style.width=width;\n store.addNotification(null,refreshSelectStylesheet);\n refreshSelectStylesheet();\n }\n}\nconfig.macros.selectStylesheet.set = function(theSheet,nocookie) {\n if (!theSheet || !theSheet.trim().length) return;\n var allStyleLists=getElementsByClass("selectStylesheet");\n for (var k=0; k<allStyleLists.length; k++) {\n var theList=allStyleLists[k];\n for (var t=0; t<theList.options.length; t++) {\n if (theList.options[t].text.substr(0,1)==">")\n theList.options[t].text=String.fromCharCode(160)+String.fromCharCode(160)+theList.options[t].text.substr(1);\n if ((theList.options[t].value==theSheet) || (theSheet=="[default]" && theList.options[t].value=="StyleSheet"))\n { theList.options[t].text=">"+theList.options[t].text.substr(2); theList.selectedIndex=t; }\n }\n }\n config.options.txtStyleSheet=theSheet;\n if (!nocookie) saveOptionCookie("txtStyleSheet");\n applyStylesheets();\n return;\n}\nif (config.paramifiers) config.paramifiers.style = { onstart: function(theSheet) { config.macros.selectStylesheet.set(theSheet,true); } };\n\n// set to TRUE to enable debugging status messages when stylesheets are applied\nconfig.macros.selectStylesheet.verbose = false;\n\n// hijack existing notifications for refreshStyles() handler\ninitSelectStylesheetNotification();\nfunction initSelectStylesheetNotification() {\n for (var i=0; i<store.namedNotifications.length; i++)\n if (store.namedNotifications[i].notify==window.refreshStyles)\n store.namedNotifications[i].notify=applyStylesheets;\n}\n\n// hijack refreshStyles() handler\nwindow.refreshStyles=applyStylesheets;\n\nfunction getElementsByClass(classname)\n{\n var arr=new Array();\n var count=0;\n var all=document.all? document.all : document.getElementsByTagName("*");\n for (var i=0; i<all.length; i++)\n if (all[i].className==classname)\n arr[count++]=all[i];\n return arr;\n}\n\nfunction refreshSelectStylesheet()\n{\n var indent = String.fromCharCode(160)+String.fromCharCode(160)+String.fromCharCode(160);\n // for all instances of the selectStylesheet control\n var allStyleLists=getElementsByClass("selectStylesheet");\n for (var k=0; k<allStyleLists.length; k++) {\n var theList=allStyleLists[k];\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n theList.selectedIndex=-1;\n // fill the stylesheet list\n var count=0;\n // prompt text\n theList.options[count++] = new Option("select a stylesheet:","",false,false);\n// DISABLED // option: none (built-in hard-coded CSS only)\n// DISABLED theList.options[count++] = new Option(indent+"[none]","[none]",false,false);\n // option: default (built-in plus shadow stylesheets)\n theList.options[count++] = new Option(indent+"[system]","[system]",false,false);\n // option: StyleSheet tiddler, if present\n if (store.getTiddler("StyleSheet")!=undefined)\n theList.options[count++] = new Option(indent+"[default]","StyleSheet",false,false);\n // options: CSS tiddlers tagged with "stylesheets" or "stylesheet"\n var theSheets=store.getTaggedTiddlers("stylesheets").concat(store.getTaggedTiddlers("stylesheet"));\n for (var i=0; i<theSheets.length; i++) {\n var theTitle=theSheets[i].title;\n if (theTitle=="StyleSheet") continue;\n theList.options[count++] = new Option(indent+theTitle,theTitle,false,false);\n }\n // make sure the requested stylesheet exists, fallback if not...\n var theSheet=config.options.txtStyleSheet;\n if (theSheet!="[none]" && theSheet!="[system]" && !store.getTiddler(theSheet)) theSheet="StyleSheet";\n if (!store.getTiddler(theSheet)) theSheet="[system]";\n // set the listbox selection to current stylesheet\n theList.selectedIndex=0; // default to first item\n for (var t=0; t<theList.options.length; t++) \n if (theList.options[t].value==theSheet)\n { theList.selectedIndex=t; break; }\n theList.options[t].text=">"+theList.options[t].text.substr(2);\n // autosize as appropriate\n theList.size=(theList.autosize<1)?theList.options.length:theList.autosize;\n } // end of "for all instances"\n}\n//}}}\n\n//{{{\nconfig.macros.selectStylesheet.templates = { };\nfunction switchTemplates(which,readOnlyPrefix)\n{\n // remember original templates (init only)\n if (!config.macros.selectStylesheet.templates.originalpage)\n config.macros.selectStylesheet.templates.originalpage = "PageTemplate";\n if (!config.macros.selectStylesheet.templates.originalview)\n config.macros.selectStylesheet.templates.originalview = config.tiddlerTemplates[1];\n if (!config.macros.selectStylesheet.templates.originaledit)\n config.macros.selectStylesheet.templates.originaledit = config.tiddlerTemplates[2];\n if (!config.macros.selectStylesheet.altTemplate)\n config.macros.selectStylesheet.altTemplate="";\n\n // define shorthand variables just for code readability \n var page=config.macros.selectStylesheet.templates.originalpage;\n var view=config.macros.selectStylesheet.templates.originalview;\n var edit=config.macros.selectStylesheet.templates.originaledit;\n\n // get 'readOnly' mode... set by TW core, but not until after the plugin is loaded, so we need to do this here as well...\n var loc = document.location.href;\n if (readOnly==undefined)\n var readOnly = (loc.substr(0,4) == "http" || loc.substr(0,3) == "ftp") ? config.options.chkHttpReadOnly : false;\n\n // get prefix defaults\n if (!which) var which="";\n if (!readOnlyPrefix) var readOnlyPrefix = "Web";\n if (!readOnly) readOnlyPrefix="";\n var alt = which+readOnlyPrefix;\n\n var msg="current template prefix: '%0', requested template prefix '%1'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([config.macros.selectStylesheet.altTemplate,alt]));\n\n // only switch if really changing templates\n if (alt == config.macros.selectStylesheet.altTemplate) return;\n\n // remember which templates are being used\n config.macros.selectStylesheet.altTemplate = alt;\n\n // set page template, with fallbacks for missing combinations\n var pageTemplate=alt+page;\n if (!store.getTiddlerText(pageTemplate)) pageTemplate=which+page;\n if (!store.getTiddlerText(pageTemplate)) pageTemplate=readOnlyPrefix+page;\n if (!store.getTiddlerText(pageTemplate)) pageTemplate=page;\n config.macros.selectStylesheet.templates.currentpage = pageTemplate;\n\n // set view template, with fallbacks for missing combinations\n var viewTemplate=alt+view;\n if (!store.getTiddlerText(viewTemplate)) viewTemplate=which+view;\n if (!store.getTiddlerText(viewTemplate)) viewTemplate=readOnlyPrefix+view;\n if (!store.getTiddlerText(viewTemplate)) viewTemplate=view;\n config.tiddlerTemplates[1] = config.macros.selectStylesheet.templates.currentview = viewTemplate;\n\n // set edit template, with fallbacks for missing combinations\n var editTemplate=alt+edit;\n if (!store.getTiddlerText(editTemplate)) editTemplate=which+edit;\n if (!store.getTiddlerText(editTemplate)) editTemplate=readOnlyPrefix+edit;\n if (!store.getTiddlerText(editTemplate)) editTemplate=edit;\n config.tiddlerTemplates[2] = config.macros.selectStylesheet.templates.currentedit = editTemplate;\n\n var msg="switching to templates: %0, %1, %2";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([pageTemplate,viewTemplate,editTemplate]));\n\n // apply page template\n window.applyPageTemplate();\n // apply view/edit templates\n story.forEachTiddler(function(title,element) { this.refreshTiddler(title,null,true);});\n\n}\n// Hijack the applyPageTemplate so the alternate page template (if any) will refresh correctly\nconfig.macros.selectStylesheet.coreApplyPageTemplate = window.applyPageTemplate;\nwindow.applyPageTemplate = function(template)\n{\n var cw=document.getElementById("contentWrapper");\n cw.style.display="none";\n config.macros.selectStylesheet.coreApplyPageTemplate(config.macros.selectStylesheet.templates.currentpage);\n cw.style.display="block";\n}\n//}}}\n\n//{{{\nfunction applyStylesheets()\n{\n // define pattern to match executable <<tiddlername>> references embedded in CSS text\n var setTiddlerRegExp = new RegExp("(?:<<(?:init )([^>]+)>>)","mg");\n var resetTiddlerRegExp = new RegExp("(?:<<reset ([^>]+)>>)","mg");\n var templateRegExp = new RegExp("(?:<<template ([^\ss>]+)( [^>]+)?>>)","mg");\n\n // make sure the requested stylesheet exists, fallback if not...\n var theSheet=config.options.txtStyleSheet;\n switch (theSheet) {\n case "[none]":\n case "[system]":\n break;\n default:\n if (!store.getTiddler(theSheet)) theSheet="StyleSheet";\n if (!store.getTiddler(theSheet)) theSheet="[system]";\n break;\n }\n\n // When store.NotifyAll() is invoked, it can trigger multiple calls to applyStylesheets(),\n // even though only one is needed to set the styles and render things properly. The extra calls\n // add unnecessary processing overhead by performing multiple re-rendering of entire TW display,\n // often resulting in "slow script" warnings. To avoid this, we can track the last stylesheet that\n // was applied and only apply the current requested sheet if it is really a different sheet, OR\n // if the TW contents have actually changed (which might include changes to the current stylesheet)\n if (theSheet==config.macros.selectStylesheet.current && !store.dirty) return;\n config.macros.selectStylesheet.current=theSheet;\n\n // get the primary stylesheet CSS\n var msg="stylesheet: '%0'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([theSheet]));\n var theCSS = (theSheet.substr(0,1)=='[')?"":store.getRecursiveTiddlerText(theSheet,"",10);\n if (theSheet.substr(0,1)!='[') store.addNotification(theSheet,refreshStyles);\n\n // if <<template>> reference is not specified, reset to standard template\n if (theCSS.indexOf("<<template")==-1) switchTemplates();\n\n // execute any embedded <<template>> references\n do {\n var match = templateRegExp.exec(theCSS);\n if(match && match[1]) switchTemplates(match[1],match[2]);\n } while(match);\n // filter out embedded <<template>> references\n theCSS = theCSS.replace(templateRegExp,"");\n\n // execute any saved stylesheet 'reset' code tiddlers\n while (config.macros.selectStylesheet.reset.length) {\n var tiddler=config.macros.selectStylesheet.reset.shift();\n var msg="stylesheet reset macro: '%0'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([tiddler]));\n var msg="error in '%0': %1";\n try { eval(store.getTiddlerText(tiddler)); }\n catch(e) { displayMessage(msg.format([tiddler,e.toString()])); }\n }\n\n // save embedded <<reset tiddlername>> references\n do {\n var match = resetTiddlerRegExp.exec(theCSS);\n if(match && match[1])\n config.macros.selectStylesheet.reset.push(match[1]);\n } while(match);\n // filter out embedded <<reset tiddlername>> references\n theCSS = theCSS.replace(resetTiddlerRegExp,"");\n\n // execute any embedded <<init tiddlername>> references\n do {\n var match = setTiddlerRegExp.exec(theCSS);\n if(match && match[1]) {\n var msg="stylesheet macro: '%0'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([match[1]]));\n var msg="error in '%0': %1";\n try { eval(store.getTiddlerText(match[1])); }\n catch(e) { displayMessage(msg.format([match[1],e.toString()])); }\n }\n } while(match);\n // filter out embedded <<set tiddlername>> references\n theCSS = theCSS.replace(setTiddlerRegExp,"");\n\n // finally, apply the styles\n switch (theSheet) {\n case "[none]": // no styles\n setStylesheet("","StyleSheetColors");\n setStylesheet("","StyleSheetLayout");\n setStylesheet("","StyleSheet");\n break;\n case "[system]": // default styles only\n setStylesheet(store.getTiddlerText("StyleSheetLayout"),"StyleSheetLayout");\n setStylesheet(store.getTiddlerText("StyleSheetColors"),"StyleSheetColors");\n setStylesheet(store.getTiddlerText("StyleSheetLayout"),"StyleSheetPrint");\n setStylesheet("","StyleSheet");\n break;\n default: // alternative stylesheet *replaces* default styles\n if (config.options.chkBypassShadowStyles) { // NOTE: hard-coded value, not saved as cookie, adjust in "ConfigTweaks"\n // stylesheet *replaces* default styles\n setStylesheet("/* overridden by [["+theSheet+"]] */","StyleSheetColors");\n setStylesheet("/* overridden by [["+theSheet+"]] */","StyleSheetLayout");\n setStylesheet("/* overridden by [["+theSheet+"]] */","StyleSheetLayout");\n }\n else {\n // stylesheet *overlays* default styles\n setStylesheet(store.getTiddlerText("StyleSheetLayout"),"StyleSheetLayout");\n setStylesheet(store.getTiddlerText("StyleSheetColors"),"StyleSheetColors");\n setStylesheet(store.getTiddlerText("StyleSheetLayout"),"StyleSheetPrint");\n }\n setStylesheet(theCSS,"StyleSheet");\n break;\n }\n}\n\nconfig.macros.init = { };\nconfig.macros.init.handler = function(place,macroName,params)\n { var out="init: [[%0]]"; wikify(out.format(params),place); }\nconfig.macros.reset = { };\nconfig.macros.reset.handler = function(place,macroName,params)\n { var out="reset: [[%0]]"; wikify(out.format(params),place); }\nconfig.macros.template = { };\nconfig.macros.template.handler = function(place,macroName,params)\n { var out="use template prefix: ''%0 %1''"; wikify(out.format(params),place); }\n\n//}}}
<script label="用户名">\n var msg="请输入您的用户名";\n var who=config.options.txtUserName;\n var who=prompt(msg,who);\n if (!who||!who.trim().length) return;\n config.options.txtUserName=who;\n saveOptionCookie("txtUserName");\n var tid=story.findContainingTiddler(place);\n if (tid) story.refreshTiddler(tid.getAttribute("tiddler"),null,true); // sync containing tiddler\n var nodes = document.getElementsByTagName("input");\n for(var t=0; t<nodes.length; t++) // sync any input fields that show username\n if(nodes[t].getAttribute("option")=="txtUserName") nodes[t].value=who;\n</script><script>\n var who=config.options.txtUserName;\n if (who=="YourName") displayMessage("请在欢迎窗口点击“YourName”处设置您的用户名");\n place.lastChild.innerHTML=who;\n</script>
<script>\n\n var sliderWidth="18em"; // ADJUST AS DESIRED\n\n var here=story.findContainingTiddler(place);\n var field="title";\n var dir=+1; // +1==ascending, -1==descending\n var tiddlers=store.getTiddlers(field,"excludeLists");\n tiddlers.sort(function(a,b){if(a[field]==b[field])return(0);else return(a[field]<b[field])?-dir:dir;});\n var 诗歌=""; var 评论=""; var 随笔=""; var 散文="";\n var others=""; var attachments=""; var 浏览="";var styles="";\n for (var i=0; i<tiddlers.length; i++) {\n\n \n if (tiddlers[i].tags.contains("诗歌")) 诗歌+="[[%0]]\sn".format([tiddlers[i].title])\n if (tiddlers[i].tags.contains("评论")) 评论+="[[%0]]\sn".format([tiddlers[i].title])\n if (tiddlers[i].tags.contains("随笔")) 随笔+="[[%0]]\sn".format([tiddlers[i].title])\n if (tiddlers[i].tags.contains("散文")) 散文+="[[%0]]\sn".format([tiddlers[i].title]) \n if (tiddlers[i].tags.contains("浏览")) 浏览+="[[%0]]\sn".format([tiddlers[i].title])\n if (tiddlers[i].tags.containsAny(["stylesheets","template","css"])) styles+="[[%0]]\sn".format([tiddlers[i].title])\n if (tiddlers[i].tags.contains("attachment")) attachments+="[[%0]]\sn".format([tiddlers[i].title])\n }\n var pre="@@display:block;+++";\n var box="{{groupbox{@@display:block;width:"+sliderWidth+";";\n box+="{{floatright{<<tiddler CloseSlider>>}}}"; // add 'close' link\n var post="@@}}}===@@";\n var out="";\n if (诗歌.length) out+=pre+"[诗歌]"+box+诗歌+post;\n if (评论.length) out+=pre+"[评论]"+box+评论+post;\n if (随笔.length) out+=pre+"[随笔]"+box+随笔+post;\n if (散文.length) out+=pre+"[散文]"+box+散文+post;\n if (others.length) out+=pre+"[other plugins]"+box+others+post;\n if (styles.length) out+=pre+"[themes/templates]"+box+styles+post;\n if (attachments.length) out+=pre+"[attachments]"+box+attachments+post;\n if (浏览) out+=pre+"[e浏览]"+box+浏览+post;\n return out;\n</script>
<script>\n var tid="$1"; // replaced by "TiddlerWithParams" macro\n var clipsize=10; // # of chars to display from each tiddler\n var tiddler=store.getTiddler(tid); if (!tiddler) return "";\n var title=tiddler.title;\n var author=tiddler.modifier\n var size=tiddler.text.length;\n var mod=tiddler.modified.formatString("0MM/0DD 0hh:0mm");\n var clip=tiddler.text.substr(0,clipsize);\n var edit='onclick="story.displayTiddler(null,\s''+title+'\s',2);return false;">'+(readOnly?'view':'edit')+' source...';\n var out="";\n out+='@@display:block;+++['+title+']{{groupbox{@@display:block;overflow:hidden;width:30em;';\n out+='{{floatright{<<tiddler CloseSlider>>}}}[['+title+']] ('+size+' 字节) \sn';\n out+='^^变更在 '+mod+' 由 '+author+'^^\sn';\n out+='//{{fine{'+clipsize+' 个起始字节摘录如下:}}}//\sn----\sn{{{\sn'+clip+'\sn}}}\sn';\n out+='@@}}}===@@';\n return out;\n</script>
''~最近的更新时间 <<date filedate "DDD, MMM DD YYYY 在 hh:0mm:0ss">>''\n<script>\n var field="modified";\n var dir=-1; // +1==ascending, -1==descending\n var tiddlers=store.getTiddlers(field,"excludeLists");\n tiddlers.sort(function(a,b){if(a[field]==b[field])return(0);else return(a[field]<b[field])?-dir:dir;});\n var out="";\n out+="一共有 "+tiddlers.length+" 主题.\sn"\n out+="最近更新: [["+tiddlers[0].title+"]]";\n out+=" {{fine{(updated "+tiddlers[0].modified.formatString("MMM DDth YYYY, hh:0mm:0ss")+")}}}\sn";\n var field="created"; tiddlers.sort(function(a,b){if(a[field]==b[field])return(0);else return(a[field]<b[field])?-dir:dir;});\n out+="最新主题: [["+tiddlers[0].title+"]]";\n out+=" {{fine{(created "+tiddlers[0].created.formatString("MMM DDth YYYY, hh:0mm:0ss")+")}}}\sn";\n out+="最老主题: [["+tiddlers[tiddlers.length-1].title+"]]";\n out+=" {{fine{(created "+tiddlers[tiddlers.length-1].created.formatString("MMM DDth YYYY, hh:0mm:0ss")+")}}}\sn"\n tiddlers.sort(function(a,b){if(a.text.length==b.text.length)return(0);else return(a.text.length<b.text.length)?-dir:dir;});\n out+="最小主题: [["+tiddlers[tiddlers.length-1].title+"]]";\n out+=" {{fine{("+tiddlers[tiddlers.length-1].text.length+" bytes)}}}\sn"\n out+="最大主题: [["+tiddlers[0].title+"]]";\n out+=" {{fine{("+tiddlers[0].text.length+" bytes)}}}\sn"\n return(out);\n</script>
<script label="关闭所有窗口">\n var tiddlers=store.getTiddlers('title');\n var titles=[];\n for (var t=0;t<tiddlers.length; t++)\n titles.push(tiddlers[t].title);\n story.closeAllTiddlers();\n return false;\n</script> <<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal ' YYYY0MM0DD'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel '偏好设置' '变更选项'>>
<<tabs txtMainTab 最近更新 '依更新日期排序' TabTimeline 全部 '所有文章' TabAll>>
/***\n''Single Page Mode Plugin for TiddlyWiki version 2.0 or above''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#SinglePageModePlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nNormally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing.\n\n!!!!!Usage\n<<<\nSinglePageMode allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time. When SinglePageMode is enabled, the title of the current tiddler is automatically displayed in the browser window's titlebar and the browser's location URL is updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.\n\nEven when SinglePageMode is disabled (i.e., displaying multiple tiddlers is permitted), you can reduce the potential for confusion by enable TopOfPageMode, which forces tiddlers to always open at the top of the page instead of being displayed following the tiddler containing the link that was clicked.\n<<<\n!!!!!Configuration\n<<<\nWhen installed, this plugin automatically adds checkboxes in the AdvancedOptions tiddler so you can enable/disable the plugin behavior. For convenience, these checkboxes are also included here:\n\n<<option chkSinglePageMode>> Display one tiddler at a time\n<<option chkTopOfPageMode>> Always open tiddlers at the top of the page\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SinglePageModePlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SinglePageMode handling^^\n\nWhen installed, this plugin automatically adds checkboxes in the ''shadow'' AdvancedOptions tiddler so you can enable/disable this behavior. However, if you have customized your AdvancedOptions, you will need to ''manually add these checkboxes to your customized tiddler.''\n<<<\n!!!!!Revision History\n<<<\n''2006.07.04 [2.2.1]'' in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.\n''2006.06.01 [2.2.0]'' added chkTopOfPageMode (TPM) handling\n''2006.02.04 [2.1.1]'' moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n''2005.12.27 [2.1.0]'' hijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list). Also, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers\n''2005.12.27 [2.0.0]'' Update for TW2.0\n''2005.11.24 [1.1.2]'' When the back and forward buttons are used, the page now changes to match the URL. Based on code added by Clint Checketts\n''2005.10.14 [1.1.1]'' permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them\n''2005.10.14 [1.1.0]'' added automatic setting of window title and location bar ('auto-permalink'). feature suggestion by David Dickens.\n''2005.10.09 [1.0.1]'' combined documentation and code in a single tiddler\n''2005.08.15 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\nSupport for BACK/FORWARD buttons adapted from code developed by Clint Checketts\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.SinglePageMode= {major: 2, minor: 2, revision: 1, date: new Date(2006,7,3)};\n\nif (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSinglePageMode>> Display one tiddler at a time";\n\nif (config.options.chkTopOfPageMode==undefined) config.options.chkTopOfPageMode=false;\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkTopOfPageMode>> Always open tiddlers at the top of the page";\n\nconfig.SPMTimer = 0;\nconfig.lastURL = window.location.hash;\nfunction checkLastURL()\n{\n if (!config.options.chkSinglePageMode)\n { window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }\n if (config.lastURL == window.location.hash)\n return;\n var tiddlerName = convertUTF8ToUnicode(decodeURI(window.location.hash.substr(1)));\n tiddlerName=tiddlerName.replace(/\s[\s[/,"").replace(/\s]\s]/,""); // strip any [[ ]] bracketing\n if (tiddlerName.length) story.displayTiddler(null,tiddlerName,1,null,null);\n}\n\nif (Story.prototype.SPM_coreDisplayTiddler==undefined) Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;\nStory.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)\n{\n if (config.options.chkSinglePageMode) {\n window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));\n config.lastURL = window.location.hash;\n document.title = wikifyPlain("SiteTitle") + " - " + title;\n story.closeAllTiddlers();\n if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);\n }\n if (config.options.chkTopOfPageMode) { story.closeTiddler(title); window.scrollTo(0,0); srcElement=null; }\n this.SPM_coreDisplayTiddler(srcElement,title,template,animate,slowly)\n}\n\nif (Story.prototype.SPM_coreDisplayTiddlers==undefined) Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;\nStory.prototype.displayTiddlers = function(srcElement,titles,template,unused1,unused2,animate,slowly)\n{\n // suspend single-page mode when displaying multiple tiddlers\n var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;\n var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;\n this.SPM_coreDisplayTiddlers(srcElement,titles,template,unused1,unused2,animate,slowly);\n config.options.chkSinglePageMode=saveSPM; config.options.chkTopOfPageMode=saveTPM;\n}\n//}}}
''问题/解答:''\n<script>\n var sliderWidth="auto"; // ADJUST AS DESIRED\n var here=story.findContainingTiddler(place);\n var field="modified";\n var dir=+1; // +1==ascending, -1==descending\n var tiddlers=store.getTiddlers(field,"excludeLists");\n tiddlers.sort(function(a,b){if(a[field]==b[field])return(0);else return(a[field]<b[field])?-dir:dir;});\n var out="";\n for (var i=0; i<tiddlers.length; i++) {\n if (!tiddlers[i].tags.contains("faq")) continue;\n out+=tiddlers[i].text+"\sn";\n }\n return out;\n</script>
{{floatright{{{nowrap{<<tiddler SiteMenuRight>>}}}}}}{{nowrap{<<tiddler SiteMenuLeft>>
<script label="欢迎光临">\n story.closeTiddler('欢迎');\n story.displayTiddler(null,'欢迎',1);\n return false;\n</script> |+++^52em^[阅读文章]...{{wrap{\n <<moveablePanel>>阅读文章:\n----\n <<tiddler ShowComponents>>}}}===\n +++^52em^[更新|最近更新的文章]...{{wrap{\n <<moveablePanel>>最近更新:\n----\n <<tiddler RecentChanges>>}}}===\n | +++^100%^[影视空间|影视视频分享]...{{wrap{\n <<moveablePanel>>影视分享:(打开有些慢,请稍等)\n----\n <<tiddler 影视模块>>}}}===\n | +++^100%^[博客日志|看我的博客]...{{wrap{\n <<moveablePanel>>[[浏览博客,点击这里在新窗口打开|http://avxx.blogspot.com]]\n----\n <<tiddler 叶尘博客浏览>>}}}===\n | +++^100%^[尘天论坛|浏览论坛]...{{wrap{\n <<moveablePanel>>[[浏览论坛,点击这里在新窗口打开|http://groups-beta.google.com/group/avxjl]]\n----\n <<tiddler 尘天论坛浏览>>}}}===
{{menubox{{{fine{{{big{\n<script label="欢迎">story.closeTiddler('欢迎');story.displayTiddler(null,'欢迎',1);return false;</script>\n}}}{{big{@@display:block;/%\n\nRECENT CHANGES: %/\n{{nowrap{+++(changes)[最近更新|看看最近更新的文章]...{{borderleft{\n {{normal{<<tiddler RecentChanges>>}}}}}}===\n}}}/%\n\n[[诗歌]], [[评论]], [[转贴]], TEMPLATES, ATTACHMENTS: %/\n{{nowrap{++++(installed)[文章|所有文章]...{{borderleft{\n {{normal{<<tiddler ShowComponents>>}}}}}}===\n}}}{{normal{@@display:block;/%\n\n工具: %/\n[[聊天室]]\n[[留言本]]\n\n\n{{borderleft\n}}}\n\nEXTRAS: %/\n{{nowrap{++++(installed)[月份更新|按月归类的更新]...{{borderleft{\n {{normal{<<tiddler TabTimeline>>}}}}}}===\n}}}\n\n<<slider chkSlider '皮肤方案' '更换皮肤' '设置浏览时的皮肤方案'>>
[[新版博客|http://avxx.blogspot.com]] | +++^18em^[RSS订阅]...{{wrap{\n <<moveablePanel>>订阅RSS\n----\n [img[http://image2.sina.com.cn/blog/tmpl/v3/images/xmlRSS2.gif][http://avxavx.googlepages.com/avx.xml]]}}}===\n +++^18em^[工具栏滑动]...{{wrap{\n <<moveablePanel>>按按钮决定\n----\n <<tiddler ToggleScrollingSidebars>>}}}===\n | +++^18em^[日历|显示日历]...{{wrap{\n <<moveablePanel>>月历:\n----\n {{small{<<calendar thismonth>><script>place.lastChild.style.width="100%";</script>}}}===\n
''新闻/公告:''<script>\n var sliderWidth="auto"; // ADJUST AS DESIRED\n var here=story.findContainingTiddler(place);\n var field="modified";\n var dir=+1; // +1==ascending, -1==descending\n var tiddlers=store.getTiddlers(field,"excludeLists");\n tiddlers.sort(function(a,b){if(a[field]==b[field])return(0);else return(a[field]<b[field])?-dir:dir;});\n var out="";\n for (var i=0; i<tiddlers.length; i++) {\n if (!tiddlers[i].tags.contains("news")) continue;\n out+="@@display:block;<<tiddler %0>>@@".format([tiddlers[i].title]);\n }\n return out;\n</script>
{{right{{{nowrap{@@font-size:6pt;font-family:"Trebuchet MS"; [[叶尘博客|http://avxx.blogspot.com]] @@\n@@font-size:6pt;font-family:"Trebuchet MS";[[尘天论坛|http://groups.google.com/group/avxjl]] @@\n@@font-size:6pt;font-family:"Trebuchet MS";[[联系本人|mailto:avxavx@gmail.com]] \n@@}}}}}}
{{floatleft{@@font-size:26pt;[[叶落尘天\n|http://avxavx.googlepages.com/]]@@ @@font-size:10pt;本来无一物,何处惹尘埃@@}}}
{{center{{{fine{{{normal{{{floatleft{<<tiddler ToggleLeftSidebar>>}}}{{floatright{<<tiddler ToggleRightSidebar>>}}}/%\n\nREMOVED FOR NOW:\n\n<script label="titles">\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 var show=(h.style.display=="none");\n h.style.display=(h.style.display=="none")?"block":"none";\n place.innerHTML=(show?"hide ":"show ")+"titles";\n</script><script>\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 var show=(h.style.display=="none");\n place.lastChild.innerHTML=(show?"show ":"hide ")+"titles";\n place.lastChild.title=(show?"show":"hide")+" page headers (SiteTitle/SiteSubtitle )";\n</script> | <script label="menubar">\n var m=document.getElementById('siteMenu'); var show=(m.style.display=="none");\n m.style.display=show?"block":"none";\n place.innerHTML=(show?"hide ":"show ")+"menubar";\n</script><script>\n var m=document.getElementById('siteMenu'); var show=(m.style.display=="none");\n place.lastChild.innerHTML=(show?"show ":"hide ")+"menubar";\n place.lastChild.title=(show?"show":"hide")+" low-profile menubar (SiteMenu)";\n</script>%/\n}}}}}}
[[StyleSheetAdjustments]]\n[[Textures]]\n
/***\nThe following CSS declarations extend/enhance the TiddlyWiki default shadowed stylesheets.\n\nThese 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.\n\n/***\n!body /%==================================================%/\nIE needs explicit "position:static" declaration (fixes 'partial background display bug')\n***/\n/*{{{*/\nbody { font-family: Verdana,Arial,Helvetica; position:static; }\n/*}}}*/\n\n/***\n!common colors /%==================================================%/\n***/\n/*{{{*/\n/* these seem to have been omitted from the core defaults for link styles */\na { color:#014; }\na:hover { color:#f00; }\n/*}}}*/\n\n/***\n!header and titles /%==================================================%/\nIE needs explicit "position:static" declaration (fixes 'background display hides text bug')\n***/\n/*{{{*/\n.header\n { background:transparent; padding:.2em; border-bottom:1px solid; position:static }\n.headerShadow, .headerForeground\n { padding:.5em; }\n.header a, .header .button, .header .tiddlyLinkExisting, .header .tiddlyLinkNonExisting\n { font-weight: normal; font-style: normal; }\n.header .externalLink,\n.siteSubtitle a, .siteSubtitle .button, .siteSubtitle .tiddlyLinkExisting, .siteSubtitle .tiddlyLinkNonExisting\n { font-style:italic; text-decoration:none; }\n/*}}}*/\n\n/***\n!siteMenu /%==================================================%/\n***/\n/*{{{*/\n.siteMenu\n { background:transparent; padding:.2em 1em .2em 1em; }\n.siteMenu a, .siteMenu .button, .siteMenu .tiddlyLinkExisting, .siteMenu .tiddlyLinkNonExisting\n { font-weight: normal; font-style: normal; }\n/*}}}*/\n\n/***\n!storyMenu /%==================================================%/\n***/\n/*{{{*/\n.storyMenu\n { display:block; margin:.2em 0em .5em 0em; }\n.storyMenu a, .storyMenu .button, .storyMenu .tiddlyLinkExisting, .storyMenu .tiddlyLinkNonExisting\n { font-weight: normal; font-style: normal; text-decoration:none; }\n/*}}}*/\n\n/***\n!displayArea /%==================================================%/\n***/\n/*{{{*/\n#displayArea\n { margin-top:0em; }\n/*}}}*/\n\n\n/***\n!popups /%==================================================%/\nwhite-space:nowrap prevents items from wrapping if popup is near right edge of window\nz-index:1000 makes sure popup is above EVERYTHING else\n***/\n/*{{{*/\n.popup\n { white-space: nowrap; z-index:1000; color: #000; background: #ffe; border: 1px solid #000;\n -moz-border-radius-topright: 5px; -moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomright: 5px; }\n.popup a, .popup .button, .popup .tiddlyLinkExisting, .popup .tiddlyLinkNonExisting\n { font-weight: normal; font-style: normal; }\n.popup hr\n { color: #000; background: #ddd; border: 0; }\n.popup li.disabled\n { color: #999; }\n.popup li a, .popup li a:visited\n { color: #300; }\n.popup li a:hover\n { background: #006; color: #fff;}\n/*}}}*/\n\n/***\n!messageArea /%==================================================%/\n***/\n/*{{{*/\n#messageArea\n { font-size:90%; -moz-border-radius:1em; background:#eee; }\n/*}}}*/\n\n/***\n!main menu (left sidebar) /%==================================================%/\n***/\n/*{{{*/\n#mainMenu\n { width:9em; text-align:left; margin:0; margin-top:.5em; margin-left:1em; padding:0; }\n*[id="mainMenu"] /* moz browsers only */\n { width:auto !important; } \n/*}}}*/\n\n/***\n!sidebar (right sidebar) /%==================================================%/\n***/\n/*{{{*/\n#sidebar\n { width:18em;}\n#sidebar .attachPanel, #sidebar #importPanel, #sidebar #exportPanel\n { right:115%; top:3em; text-align:left; }\n#sidebarTabs .tab\n { font-size:90%; -moz-border-radius-topleft:.5em; -moz-border-radius-topright:.5em; }\n#sidebarTabs .tabContents\n { background:transparent; border:1px solid #999; padding:.5em; height:auto; overflow:auto; width:92.5%; }\n#sidebarTabs .tabContents .tabContents\n { background:transparent; border:1px solid #999; padding:.5em; height:auto; }\n#sidebarTabs .tabContents *[class="TOCList"] /* MOZ ONLY */\n { background-color: transparent; border-color:transparent !important; }\n#sidebarOptions .sliderPanel\n { margin:0; padding:0; font-size:1em; background:transparent; }\n#sidebarOptions .sliderPanel a\n { font-weight:normal; }\n#sidebarOptions .sliderPanel blockquote\n { margin:0;padding:0;margin-left:1em; border-left:1px dotted; padding-left:1em }\n#sidebarOptions input[type="text"]\n { font-size:8pt; }\n}\n*/\n/*}}}*/\n\n/***\n!tabs /%==================================================%/\n***/\n/*{{{*/\n.tabset\n { padding: 0.2em 0 0 0; }\n.tab\n { padding:0 1px 0 1px; }\n.tabSelected\n { border: 1px solid; border-bottom: 0px !important; margin-bottom:-2px !important; }\n.tabUnselected\n { border: 1px solid #999; }\n.tabContents\n { border: 1px solid; -moz-border-radius:1em; padding: 1em; }\n/*}}}*/\n\n/***\n!tiddler display elements /%==================================================%/\n***/\n/*{{{*/\n.tiddler\n { padding: 0 1em 1em 1em; }\n.button, .button:hover, .button:active,\n.viewer .button, .viewer .button:hover, .viewer .button:active\n { background:transparent; border:0; }\n.toolbar\n { float:right; display:inline; padding-bottom:0; }\n.toolbar .button\n { border:1px solid transparent; background:transparent; margin:1px 1px; padding:0px .5em; -moz-border-radius:.5em; }\n.toolbar .button:hover\n { border:1px solid #69c; background:#006; color:#fff; }\n.tagging, .tagged\n { -moz-border-radius:1em; }\n.subtitle\n { font-size:90%; }\n.editor input, .editor textarea\n { font-size: 8pt;}\n.title\n { font-size: 12pt; }\n.viewer\n { font-size: 9pt; padding: 0.7em; text-align:justify; }\n.viewer pre, .viewer code, .viewer blockquote\n { font-size:8pt; text-align:left; }\n.viewer hr {\n margin: 1px; padding:1px;\n border:0;\n border-top: solid 1px #666;\n color: #666;\n}\n.viewer blockquote {\n line-height: 1.5em;\n padding-left: 1em;\n margin-left: 1em;\n border-left: 1px dotted;\n}\n\ninput[type="Checkbox"] { margin-top:2px;margin-bottom:2px; }\n/*}}}*/\n\n/***\n!floating panels /%==================================================%/\n***/\n/*{{{*/\n.floatingPanel\n { padding:1em; margin:0em; border:1px solid; -moz-border-radius:1em; font-size:8pt; text-align:left; }\n.floatingPanel hr\n { margin:2px 0 1px 0; padding:0; }\n/*}}}*/\n\n/***\n!breadcrumbs /%==================================================%/\n***/\n/*{{{*/\n/* smaller size for bread crumbs (see BreadcrumbsPlugin) */\n#breadCrumbs\n { display:none; margin:0 1em; font-size:7pt; } /* display:block is set by plugin when crumbs are in use */\n/*}}}*/\n\n/***\n!formatting shortcuts /%==================================================%/\n***/\n/*{{{*/\n\n/* text alignments */\n.left\n { display:block;text-align:left; }\n.floatleft\n { float:left; }\n.right \n { display:block;text-align:right; }\n.floatright\n { float:right; }\n.center\n { display:block;text-align:center; }\n.wrap\n { white-space:normal }\n.nowrap\n { white-space:nowrap }\n\n/* font sizes */\n.big\n { font-size:14pt;line-height:120% }\n.medium\n { font-size:12pt;line-height:120% }\n.normal\n { font-size:9pt;line-height:120% }\n.small\n { font-size:8pt;line-height:120% }\n.fine\n { font-size:7pt;line-height:120% }\n.tiny\n { font-size:6pt;line-height:120% }\n.larger\n { font-size:120%; }\n.smaller\n { font-size:80%; }\n\n/* borderless tables */\n.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody\n { border:0 !important; margin:0 !important; padding:0 !important; }\n\n/* grouped content */\n.outline\n { display:block; padding:1em; -moz-border-radius:1em; border:1px solid; }\n.menubox\n { display:block; padding:1em; -moz-border-radius:1em; border:1px solid; background:#fff; color:#000; }\n.menubox a, .menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting\n { color:#009 !important; }\n.groupbox\n { display:block; padding:1em; -moz-border-radius:1em; border:1px solid; background:#ffe; color:#000; }\n.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting\n { color:#009 !important; }\n.indent\n { margin:0;padding:0;border:0;margin-left:.5em; }\n.borderleft\n { margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }\n.borderright\n { margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }\n.borderbottom\n { margin:0;padding:0;border:0;border-bottom:1px dotted; padding-bottom:1px; }\n.bordertop\n { margin:0;padding:0;border:0;border-top:1px dotted; padding-top:1px; }\n\n/* compact form */\n.smallform\n { white-space:nowrap; }\n.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select\n { font-size:8pt; }\n/*}}}*/
/%\nSwitchTiddlers: insert a link that closes the current tiddler and opens another one in its place\nNOTE: 'instant macro' - uses InlineJavascriptPlugin and TiddlerWithParamsPlugin\nsyntax is: <<tiddler SwitchTiddlers with: NewTiddlerTitle linktext>>\n%/<script label="$2">\n var tiddler=story.findContainingTiddler(place);\n story.displayTiddler(tiddler,"$1");\n story.closeTiddler(tiddler.id.substr(7)); // close self\n return false;\n</script>
{{big{<<tiddler CloseSlider>>}}}<<timeline>>
/***\n''Plugin:'' Tag Cloud Macro\n''Author:'' Clint Checketts\n''Source URL:''\n\n!Usage\n<<tagCloud>>\n\n!Code\n***/\n//{{{\nversion.extensions.tagCloud = {major: 1, minor: 0 , revision: 0, date: new Date(2006,2,04)};\n//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman\n\nconfig.macros.tagCloud = {\n noTags: "No tag cloud created because there are no tags.",\n tooltip: "%1 tiddlers tagged with '%0'"\n};\n\nconfig.macros.tagCloud.handler = function(place,macroName,params) {\n \nvar tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);\n\nvar tags = store.getTags();\nfor (var t=0; t<tags.length; t++) {\n for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";\n}\n\n if(tags.length == 0) \n createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);\n //Findout the maximum number of tags\n var mostTags = 0;\n for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n if (tags[t][1] > mostTags) mostTags = tags[t][1];\n }\n //divide the mostTags into 4 segments for the 4 different tagCloud sizes\n var tagSegment = mostTags / 4;\n\n for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);\n tagCloudWrapper.appendChild(document.createTextNode(" "));\n var theTag = createTiddlyButton(tagCloudElement,tags[t][0],this.tooltip.format(tags[t]),onClickTag,"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));\n theTag.setAttribute("tag",tags[t][0]);\n }\n\n};\n\nsetStylesheet(".tagCloud span{height: 1.8em;margin: 3px;}.tagCloud1{font-size: 1.2em;}.tagCloud2{font-size: 1.4em;}.tagCloud3{font-size: 1.6em;}.tagCloud4{font-size: 1.8em;}.tagCloud5{font-size: 1.8em;font-weight: bold;}","tagCloudsStyles");\n//}}}
[[StyleSheetAdjustments]]\n/* ==== Textures ==== */\n/*{{{*/\nbody\n { background-image: url('[[TexturesStucco]]'); background-color:#eee; }\n.tagging, .tagged\n { background-color: transparent; border: 1px solid #ccc; }\n.selected .tagging, .selected .tagged\n { background-image: url('[[TexturesParchment]]'); background-color:#edb; border: 1px solid #999; }\n.menubox\n { background-image: url('[[TexturesParchmentGray]]'); background-color:#fff; }\n.viewer\n { background-image: url('[[TexturesParchmentGray]]'); background-color:#fff; border: 1px solid #999; -moz-border-radius:1em; padding:1em; }\n.groupbox\n { background-image: url('[[TexturesParchment]]'); background-color:#ffe; }\n.header\n { background-image: url('[[TexturesMarbleBlack]]'); background-color:#111; border-bottom:5px solid #090; color:#0c0 !important; }\n.header a\n { color: #6f6; }\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel, #sidebarTabs .tabContents \n { background: #eee; background-image: url('[[TexturesParchmentGray]]');}\n.tiddlyCard { background:#ffd; }\n\n.viewer h1,.viewer h2,.viewer h3,.viewer h4,.viewer h5 { background: #666; color:#fff; }\n#sidebarTabs .tabContents\n { background-image: url('[[TexturesParchmentGray]]'); background-color:#fff; }\n\n/*}}}*/
| source file|{{{marble_black.jpg}}}|\n| attached on|14 July 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[marble_black.jpg|marble_black.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|TexturesMarbleBlack]] or [img[tooltip|TexturesMarbleBlack][link]]}}}\n[img[tooltip|TexturesMarbleBlack]]\n<<<\n
| source file|{{{parchment.jpg}}}|\n| attached on|14 July 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[parchment.jpg|parchment.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|TexturesParchment]] or [img[tooltip|TexturesParchment][link]]}}}\n[img[tooltip|TexturesParchment]]\n<<<\n
| source file|{{{parchment_gray.jpg}}}|\n| attached on|14 July 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[parchment_gray.jpg|parchment_gray.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|TexturesParchmentGray]] or [img[tooltip|TexturesParchmentGray][link]]}}}\n[img[tooltip|TexturesParchmentGray]]\n<<<\n
| source file|{{{stucco.gif}}}|\n| attached on|14 July 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[stucco.gif|stucco.gif]]|\nimage\n<<<\nusage: {{{[img[tooltip|TexturesStucco]] or [img[tooltip|TexturesStucco][link]]}}}\n[img[tooltip|TexturesStucco]]\n<<<
/***\n|''Name:''|TiddlerWithParamsPlugin|\n|''Version:''|1.0.1 (2006-03-22)|\n|''Source:''|http://tiddlywiki.abego-software.de/#TiddlerWithParamsPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n!Description\n\nThe TiddlerWithParamsPlugin extends the build-in {{{<<tiddler...>>}}} macro. It replaces placeholders ($1, $2, ...) in the given tiddler by values passed with the macro. Then it inserts the (replaced) text, just like the original {{{<<tiddler...>>}}} macro.\n\n''Syntax:'' \n|>|{{{<<}}}''tiddler '' //tiddlerName// [//className//] [''asText''] [''with:'' //arguments// ] [''prefix:'' //prefixString//] {{{>>}}}|\n|//tiddlerName//|The name of the tiddler to be included. The tiddler may contain placeholders ($1, $2, ... $9) that will be replaced with the values passed with the macro|\n|//className//|The (CSS) class to be used around the embedded tiddler|\n|''asText''|When defined the (replaced) content of the tiddler is inserted as pure text, i.e. it is not "wikified".|\n|//arguments//|up to 9 arguments may be passed to the macro, used as the values for the placeholders $1, $2, ... $9 in the referenced template|\n|//prefixString//|By default the placeholders $1, $2, $3,..., $9 are used. But you may change the "prefix" before the placeholder number ("$") to some other text through the "prefix:" option. This may be necessary when you are using the $n in the tiddler you are referencing (e.g. when you are using regular expressions).|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. ~~|\n\n!Example\n\nThe following ''//ProjectTemplate//'' tiddler defines an "Overview" page for a project, that gives access to various "sub-tiddlers" used in the project, that follow a static naming schema (e.g. all Notes for any project are stored in a tiddler called "//projectName// Notes"). $1 holds the name of the Project (e.g. "ForEachTiddler"), $2 holds the type of the published component (e.g. "Plugin", "Macro", "Function").\n{{{\n![[$1Project]] Overview\n* [[$1$2]]\n* [[ToDo|$1 ToDos]]\n* [[Notes|$1 Notes]]\n* [[Examples|$1Examples]]\n* [[Tests|$1 Tests]]\n* [[Open Bugs/CRs|$1 Open Bugs and ChangeRequests]]\n}}}\n\nThis template is now used in the ''//ForEachTiddlerProject//'' tiddler:\n{{{\n<<tiddler ProjectTemplate with: ForEachTiddler Plugin>>\n}}}\n\nThis results in the following tiddler text for the ''//ForEachTiddlerProject//'' tiddler:\n{{{\n![[ForEachTiddlerProject]] Overview\n* [[ForEachTiddlerPlugin]]\n* [[ToDo|ForEachTiddler ToDos]]\n* [[Notes|ForEachTiddler Notes]]\n* [[Examples|ForEachTiddlerExamples]]\n* [[Tests|ForEachTiddler Tests]]\n* [[Open Bugs/CRs|ForEachTiddler Open Bugs and ChangeRequests]]\n}}}\n\n!Revision history\n* v1.0.0 (2006-01-20)\n** initial version\n* v1.0.1 (2006-03-22)\n** Added 'asText' option\n** Support Safari (Thanks to Elise Springer for reporting the problem)\n!Code\n***/\n//{{{\n//============================================================================\n// TiddlerWithParamsPlugin\n//============================================================================\n\n// Ensure that the Plugin is only installed once.\n//\nif (!version.extensions.TiddlerWithParamsPlugin) {\n\nversion.extensions.TiddlerWithParamsPlugin = {\n major: 1, minor: 0, revision: 1, \n date: new Date(2006,3,22), \n type: 'plugin',\n source: "http://tiddlywiki.abego-software.de/#TiddlerWithParamsPlugin"\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nvar indexInArray = function(array, item) {\n for (var i = 0; i < array.length; i++) {\n if (array[i] == item) {\n return i;\n }\n }\n return -1;\n}\n\nvar myEscapeRegExp = function(s)\n{\n // The original escapeRegExp function does not work with Safari (2.0.3) \n // since the $& is not implemented.\nvar t = s.replace(/\s\s/g, "\s\s\s\s");\n t = t.replace(/\s^/g, "\s\s^");\n t = t.replace(/\s$/g, "\s\s$");\n t = t.replace(/\s*/g, "\s\s*");\n t = t.replace(/\s+/g, "\s\s+");\n t = t.replace(/\s?/g, "\s\s?");\n t = t.replace(/\s(/g, "\s\s(");\n t = t.replace(/\s)/g, "\s\s)");\n t = t.replace(/\s=/g, "\s\s=");\n t = t.replace(/\s!/g, "\s\s!");\n t = t.replace(/\s|/g, "\s\s|");\n t = t.replace(/\s,/g, "\s\s,");\n t = t.replace(/\s{/g, "\s\s{");\n t = t.replace(/\s}/g, "\s\s}");\n t = t.replace(/\s[/g, "\s\s[");\n t = t.replace(/\s]/g, "\s\s]");\n t = t.replace(/\s./g, "\s\s.");\n\n return t;\n}\n\n// ---------------------------------------------------------------------------\n// The (hijacked) tiddler Macro Handler \n// ---------------------------------------------------------------------------\n\nconfig.macros.tiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n \n var className = null;\n var argsStart = -1;\n var doWikify = true;\n\n var iParams = 1;\n if (params[iParams] != "asText" && params[iParams] != "with:") {\n className = params[iParams++];\n }\n if (params[iParams] == "asText") {\n iParams++;\n doWikify = false;\n }\n if (params[iParams] == "with:") {\n iParams++;\n argsStart = iParams;\n }\n \n var wrapper = createTiddlyElement(place,"span",null,className ? className : null,null);\n var text = store.getTiddlerText(params[0]);\n if(text) {\n // Check for recursion\n var tiddlerName = params[0];\n var stack = config.macros.tiddler.tiddlerStack;\n if (stack.find(tiddlerName) !== null) return;\n\n if (argsStart >= 0) {\n // The params between the "with:" and the "prefix:" (or the end) are the arguments,\n // The param behind the "prefix:" is the prefix before the placeholder numbers.\n var argsEnd = params.length;\n var prefix = "$";\n var prefixIndex = indexInArray(params, "prefix:");\n if (prefixIndex >= argsStart) {\n argsEnd = prefixIndex;\n if (prefixIndex < (params.length-1)) {\n prefix = params[prefixIndex+1];\n }\n }\n // to avoid any "special RE chars" problems with the prefix string escape all chars.\n prefix = myEscapeRegExp(prefix);\n \n var args = params.slice(argsStart, argsEnd);\n var n = Math.min(args.length, 9);\n for (var i = 0; i < n; i++) {\n var value = args[i];\n \n var placeholderRE = new RegExp(prefix+(i+1),"mg");\n text = text.replace(placeholderRE, value);\n }\n }\n stack.push(tiddlerName);\n try {\n if (doWikify) {\n wikify(text,wrapper,null,store.getTiddler(params[0]));\n } else {\n wrapper.appendChild(document.createTextNode(text));\n }\n } finally { \n stack.pop();\n }\n }\n}\nconfig.macros.tiddler.tiddlerStack = [];\n\n// End of "install only once"\n}\n\n//============================================================================\n// End of TiddlerWithParamsPlugin\n//============================================================================\n//}}}\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n***/\n
<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;隐藏工具栏":"&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;隐藏工具栏":"&gt;&gt;显示工具栏"); // SET LINK TEXT\n place.lastChild.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP\n place.lastChild.style.fontWeight="normal";\n</script>
<<option chkHttpReadOnly>><script>\n var chk=place.lastChild;\n chk.style.margin=chk.style.padding="0";\n chk.id="ToggleReadOnly_checkbox";\n chk.title="enable/disable TiddlyWiki editing functions";\n chk.checked=readOnly;\n chk.coreOnChange=chk.onchange;\n chk.onchange=function() {\n if (this.coreOnChange) this.coreOnChange();\n readOnly=!readOnly;\n this.checked=readOnly;\n story.forEachTiddler(function(t,e){story.refreshTiddler(t,null,true)});\n refreshDisplay();\n };\n</script><script label="只能读取">\n place.previousSibling.onchange();\n</script><script>\n var s=place.lastChild.style; s.display="inline"; s.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;隐藏工具栏":"&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;隐藏工具栏":"&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 if (config.options.chkScrollSidebars==undefined)\n config.options.chkScrollSidebars=true;\n if (!config.options.txtOuterTabHeight||!config.options.txtOuterTabHeight.length)\n config.options.txtOuterTabHeight="25em";\n if (!config.options.txtInnerTabHeight||!config.options.txtInnerTabHeight.length)\n config.options.txtInnerTabHeight="21em";\n\n var scroll=config.options.chkScrollSidebars||config.browser.isIE?'':'fixed'; // IE doesn't do 'fixed' position\n document.getElementById('mainMenu').style.position=scroll;\n document.getElementById('sidebar').style.position=scroll;\n\n // "short sheet" the SideBarTabs when sidebars are hovering (to hopefully fit "above the fold")\n var outer=config.options.chkScrollSidebars||config.browser.isIE?"auto":config.options.txtOuterTabHeight;\n var inner=config.options.chkScrollSidebars||config.browser.isIE?"auto":config.options.txtInnerTabHeight;\n var css='#sidebarTabs .tabContents { height:'+outer+'; overflow:auto; width:92.5%; }';\n css+='#sidebarTabs .tabContents .tabContents { height:'+inner+' !important; }';\n setStylesheet(css,'shortSidebarTabs');\n\n window.ToggleScrollingSidebars_setscroll = function() {\n if (config.browser.isIE) return; // IE doesn't support 'fixed' position\n document.getElementById('mainMenu').style.position=!config.options.chkScrollSidebars?'fixed':'';\n document.getElementById('sidebar').style.position=!config.options.chkScrollSidebars?'fixed':'';\n var outerTabHeight=config.options.txtOuterTabHeight;\n if (config.options.chkScrollSidebars) outerTabHeight="auto";\n var innerTabHeight=config.options.txtInnerTabHeight;\n if (config.options.chkScrollSidebars) innerTabHeight="auto";\n var css='#sidebarTabs .tabContents { height:'+outerTabHeight+'; overflow:auto; width:92.5%; }';\n css+='#sidebarTabs .tabContents .tabContents { height:'+innerTabHeight+' !important; }';\n setStylesheet(css,'shortSidebarTabs');\n }\n\n</script><<option chkScrollSidebars>><script>\n place.lastChild.checked=config.options.chkScrollSidebars;\n place.lastChild.onchange=function() {\n config.options.chkScrollSidebars=this.checked;\n saveOptionCookie("chkScrollSidebars");\n window.ToggleScrollingSidebars_setscroll();\n };\n</script> 禁止工具栏随网页滑动
<script>\n window.toggleSiteMenu=function() {\n var m=document.getElementById('siteMenu'); \n if (!m) return true; // no sitemenu element... let event bubble through...\n var show=m.style.display=="none";\n m.style.display=show?"block":"none";\n config.options.chkHideSiteMenu=!show; saveOptionCookie('chkHideSiteMenu');\n var nodes = document.getElementsByTagName("input");\n for(var t=0; t<nodes.length; t++)\n if (nodes[t].getAttribute("option")=="chkHideSiteMenu") nodes[t].checked=show;\n var doDblclick=config.options.chkHideSiteMenu&&!config.options.chkShowRightSidebar;\n document.ondblclick=doDblclick?window.toggleSiteMenu:null;\n window.status=document.body.title=doDblclick?"double-click page background to display menubar":"";\n return false;\n };\n if (config.options.chkHideSiteMenu==undefined) config.options.chkHideSiteMenu=false;\n var m=document.getElementById('siteMenu'); \n m.style.display=config.options.chkHideSiteMenu?"none":"block";\n var doDblclick=config.options.chkHideSiteMenu&&!config.options.chkShowRightSidebar;\n document.ondblclick=doDblclick?window.toggleSiteMenu:null;\n window.status=document.body.title=doDblclick?"double-click page background to display menubar":"";\n</script><<option chkHideSiteMenu>><script>\n place.lastChild.id="ToggleSiteMenu_checkbox"\n place.lastChild.checked=!config.options.chkHideSiteMenu;\n place.lastChild.coreOnChange=place.lastChild.onchange;\n place.lastChild.onchange=function() {\n if (this.coreOnChange) this.coreOnChange();\n window.toggleSiteMenu();\n if (config.options.chkHideSiteMenu&&!config.options.chkShowRightSidebar) { \n clearMessage(); displayMessage("double-click page background to redisplay menubar")\n setTimeout("clearMessage()",3000); // EPHEMERAL "REMINDER" MESSAGE\n }\n };\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> 显示置顶主题页面
<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=false;\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> 增加向上按钮
/***\n''UnformattedTextPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#UnformattedTextPlugin \nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nAdd //extended quotes// around specific tiddler content to prevent any embedded formatting syntax from being processed by TiddlyWiki's rendering engine, so the content will appear exactly as entered into the tiddler (i.e., "raw text"), even when it contains character sequences that would normally be treated as TiddlyWiki formatting instructions.\n!!!!!Usage\n<<<\nWhen installed, this plugin adds new wiki syntax for surrounding tiddler content so that it can be excluded from the TiddlyWiki formatting rules when it is rendered.\n//{{{\n"""content goes here"""\n//}}}\nwhere:\n* {{{"""}}} //(three double-quote characters)//^^\nmarks the start and end of the unformatted content^^\n<<<\n!!!!!Examples\n<<<\nContent containing TiddlyWiki formatting syntax can be shown with the syntax unchanged:\n{{{\n"""this text is //not italic// and <<not a macro>> and [[not a link]]"""\n}}}\n"""this text is //not italic// and <<not a macro>> and [[not a link]]"""\n\nNote that, although formatting syntax contained ''within'' the quoted content does not affect the style of the output, any formatting syntax ''surrounding'' the quoted content will still be applied. For example, the following unformatted output will be underlined:\n{{{\n__"""this text is //not italic// and <<not a macro>> and [[not a link]], but it IS underlined"""__\n}}}\n__"""this text is //not italic// and <<not a macro>> and [[not a link]], but it IS underlined"""__\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''UnformattedTextPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2005.11.07 [1.0.0]''\ninitial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.unformattedText = {major: 0, minor: 5, revision: 0, date: new Date(2005,11,07)};\n\nconfig.formatters.push( {\n name: "rawText",\n match: "\s\s\s"{3}",\n lookahead: "\s\s\s"{3}((?:.|\s\sn)*?)\s\s\s"{3}",\n handler: function(w)\n {\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 {\n var e = createTiddlyElement(w.output,"span",null,null,lookaheadMatch[1]);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n }\n)\n//}}}\n
/***\n!WebTemplatePlugin with ViewSourcePlugin and 404TiddlerPlugin\n''Version'': 0.3 (19 Jan 2006)\n''Author'': Clint Checketts\n\n!Instructions\nWebPageTemplate\nWebViewTemplate\nWebEditTemplate\n\n!Code\n***/\n//{{{\nconfig.options.chkHttpReadOnly = true;\nreadOnly = (document.location.toString().substr(0,4) == "http") ? config.options.chkHttpReadOnly : false;\n\nconfig.shadowTiddlers['WebPageTemplate'] = config.shadowTiddlers['PageTemplate'];\nconfig.shadowTiddlers['WebViewTemplate'] = "<!--{{{-->\sn<div class='toolbar' macro='toolbar closeTiddler permalink'></div>\sn<div class='title' macro='view title'></div>\sn<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date [[DD MMM YYYY]]'></span> (created <span macro='view created date [[DD MMM YYYY]]'></span>)</div>\sn<div class='tagging' macro='tagging'></div>\sn<div class='tagged' macro='tags'></div>\sn<div class='viewer' macro='view text wikified'></div>\sn<div class='tagClear'></div>\sn<!--}}}-->";\nconfig.shadowTiddlers['WebEditTemplate'] = "<!--{{{-->\sn<div class='toolbar' macro='toolbar -cancelTiddler'></div>\sn<div class='title'><span macro='view title'></span> (source code)</div>\sn<div class='editor' macro='edit text'></div>\sn<!--}}}-->\sn";\n\nif(readOnly){ \n showWebView();\n}\n\nwindow.applyPageTemplateWebTemplate = window.applyPageTemplate;\nwindow.applyPageTemplate = function(title){\n if(readOnly && store.tiddlerExists('WebPageTemplate')) title = 'WebPageTemplate';\n applyPageTemplateWebTemplate(title);\n}\n\nfunction showWebView(){\n config.tiddlerTemplates[1] = "WebViewTemplate";\n config.tiddlerTemplates[2] = "WebEditTemplate";\n}\n\nconfig.macros.testWebView = {}\nconfig.macros.testWebView.handler = function(place,macroName,params)\n{\n createTiddlyButton(place,"ToggleWebTemplates","Toggle the web mode",toggleWebView);\n}\n\nvar toggleWebView = function(){\n readOnly = !readOnly;\n if(readOnly){\n showWebView();\n } else {\n config.tiddlerTemplates[1] = "ViewTemplate";\n config.tiddlerTemplates[2] = "EditTemplate";\n }\n store.notifyAll();\n}\n//}}}\n/***\n!View Source Plugin\n***/\n//{{{\nconfig.commands.viewSource = false;\n//}}}\n/***\n!404 Tiddler Plugin\n***/\n//{{{\n//config.shadowTiddlers['404 Error'] = "The tiddler you were looking for doesn't exist.\sn\snTry a <<search>> for the information you were looking for.";\nconfig.shadowTiddlers['404Template'] = "<div class='toolbar' macro='toolbar -closeTiddler closeOthers'></div><div class='title'>404 Error: <span macro='view title'></span></div><div class='viewer'>The page '<span macro='view title'></span>' doesn't exist.<br /><br />Try a <span macro='search'></span> for the information you were looking for.</div>";\n\n\nStory.prototype.displayTiddler404 = Story.prototype.displayTiddler;\nStory.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)\n{\n// if (readOnly && !store.tiddlerExists(title) && !store.isShadowTiddler(title)){title = '404 Error'}\n if (readOnly && !store.tiddlerExists(title) && !store.isShadowTiddler(title)){template = '404Template';}\n this.displayTiddler404(srcElement,title,template,animate,slowly);\n}\n\n//}}}
<!--{{{-->\n<div class='toolbar' macro='toolbar closeTiddler permalink'></div>\n<div class='title' macro='view title'></div>\n<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date [[DD MMM YYYY]]'></span> (created <span macro='view created date [[DD MMM YYYY]]'></span>)</div>\n<div class='tagging' macro='tagging'></div>\n<div class='tagged' macro='tags'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n<div class='commentsHaloscan' macro='haloscan' style='float: right;'></div><br />\n<!--}}}-->
[[StyleSheetAdjustments]]\n/* ==== Woodshop ==== */\n/*{{{*/\nbody\n { background-image: url('[[WoodshopBackgroundMedium]]'); background-color:#db7; }\n.menubox\n { background-image: url('[[WoodshopBackgroundLight]]'); background-color:#edb; }\n.tagging, .tagged\n { background-color: transparent; border: 1px solid #ccc; }\n.selected .tagging, .selected .tagged\n { background-image: url('[[TexturesParchment]]'); background-color:#edb; border: 1px solid #999; }\n.groupbox\n { background-image: url('[[TexturesParchment]]'); background-color:#edb; }\n.viewer\n { background-image: url('[[WoodshopBackgroundLight]]'); background-color:#edb;\n border: 2px solid #999; -moz-border-radius:1em; padding:1em; }\n.header\n { background-image: url('[[WoodshopBackgroundDark]]'); background-color:#611; color:#edb; border-bottom:0px; }\n.header a\n { color: #ec7; }\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel\n { background: #edb; background-image: url('[[WoodshopBackgroundLight]]') !important;}\n#sidebarTabs .tabContents\n { background-image: url('[[WoodshopBackgroundLight]]'); background-color:#edb; }\nh1,h2,h3,h4,h5\n { background-image: url('[[WoodshopBackgroundDark]]'); background-color:#611; color:#fff;}\nh1 a, h2 a, h3 a, h4 a, h5 a\n { color: #ec7; }\n/*}}}*/\n
| source file|{{{wood_dark.jpg}}}|\n| attached on|20 May 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[wood_dark.jpg|wood_dark.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|WoodshopBackgroundDark]] or [img[tooltip|WoodshopBackgroundDark][link]]}}}\n[img[tooltip|WoodshopBackgroundDark]]\n<<<\n
| source file|{{{wood_light.jpg}}}|\n| attached on|20 May 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[wood_light.jpg|wood_light.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|WoodshopBackgroundLight]] or [img[tooltip|WoodshopBackgroundLight][link]]}}}\n[img[tooltip|WoodshopBackgroundLight]]\n<<<\n
| source file|{{{wood.jpg}}}|\n| attached on|20 May 2006 by ELSDesignStudios|\n| embedded data|//none//|javascript:;\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[wood.jpg|wood.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|WoodshopBackgroundMedium]] or [img[tooltip|WoodshopBackgroundMedium][link]]}}}\n[img[tooltip|WoodshopBackgroundMedium]]\n<<<\n
<script>\nconfig.options.chkShowRightSidebar = false; // 隐藏 or true 顯示\nsaveOptionCookie('chkShowRightSidebar');\nconfig.refreshers.content(document.getElementById("storyMenu"));\n</script>
<script>\nconfig.options.chkShowRightSidebar = true; // 隐藏 or true 顯示\nsaveOptionCookie('chkShowRightSidebar');\nconfig.refreshers.content(document.getElementById("storyMenu"));\n</script>
为电视剧《人龙传说》所作:\n人龙疏途事,啾啾关心结。\n天各一方痛,离人可断肠。\n芊芊君子风,龙女好相识。\n姻缘早注定,风化绝代人。\n佳偶千里逢,怎知孽根生。\n鸳鸯永不别,苍雷破青谭。\n啼血唤不归,呕心难悍神。\n佛祖六根净,焉悟伊人誓。\n憾天不开眼,断壁刻血情。\n善有善报说,不觉太迟暮?\n轮回无记忆,凝然散苦愁?\n万般随风逝,遗叶若化尘。
<script label="关闭所有窗口">\n var tiddlers=store.getTiddlers('title');\n var titles=[];\n for (var t=0;t<tiddlers.length; t++)\n titles.push(tiddlers[t].title);\n story.closeAllTiddlers();\n return false;\n</script>
总感觉自己要江郎才尽,什么也写不出,什么也表达不出。莫名的恐惧折磨着想要写点什么的那颗心。\n的确,再也回不到一个人静静的坐在窗前挥洒自如的岁月了;就像再也回不到深深的爱着他的那个时候一样……\n时流阿,流去了,就再也不能返回。\n翻阅从前的那些文卷,零零散散的记载着那时的记忆。开心的,伤心的,拾起一张发黄的稿卷,稚嫩的文笔中漏出来的喜悦,悲哀,都再也不会回来了。\n不能后退,我想向前进,却又似乎停留在原地,未曾踏出一步。\n因为记得从前写作的一气呵成,因为记得从前文章的创意和潇洒。所以现在,我不能动笔!我不能动笔是因为害怕写出来的东西会被自己嘲笑,我不能动笔是因为害怕不能超越从前。\n或许我始终也桎梏在记忆里,不曾超脱。\n可我还是决定,要面对这个事实,面对这些记忆。\n人,要战胜的,最终还是自我。\n \n <<tiddler ReplaceTiddlerTitle with: "<span style='white-space:nowrap;font-size:.9em'>初中写的几首诗歌保存~~</span>">>\n \n决定把以前的东西搬上来,保存是其一,正视自我是其二~\n\n!凤求凰\n凤凰麟毛\n水波银银\n荡荡粼粼\n月霞如玉\n轻拂过水\n宛若流云\n一根麟毛\n流云飘飘\n悠悠滑滑\n如华如棉\n落成水面凝华光\n流云闪电波纹翔\n清风一缕扯心绪\n乘雨三颜拂凤郎\n(97.3)\n \n \n!别\n雨中行\n声声慢\n如令剑挺四方路\n稳坐河山画音符\n雨中行\n声声慢\n爱花花不语\n空费有殷情\n离别意\n自君伤\n竹篮打水空无物\n纸伞护花花更谢\n路长供君使\n天涯惜别意\n风华依旧……\n \n \n \n!凤舞九天\n爱与恨\n麟毛飘飘\n憎与伤\n麟毛悠悠\n仇与逝\n翎毛落雪\n是亲,是爱\n抚育了我的成长\n是仇,是恨\n毁了我的一生!\n凤凰应在天上,\n如今却在雪中,\n奔忙……\n \n \n \n!落在何方\n独坐窗前\n人难寐\n寒……\n风萧瑟吹\n难现愁\n苦……\n释冬水\n流云变\n雨萋萋\n击地惊\n寒苦长滞水云间\n休别汇意赤落霞\n不见来时狂龙电\n独有凄凄落水声\n\n卖破烂的超级老本子上的,时间已无从考证……寒……\n \n!凤凰歌\n \n天帝创物制神球\n九丸升天化神鸟\n凤凰烁火燃恒星\n人间至此又劫难\n \n日落平阳风尽火\n彝射九日侍弯弓\n乱世之中出英雄\n嫦娥明意会彝浓
人做任何事情,必定有其原因。\n没有原因而去做的事情,是因为人没有觉察到其内在原因。\n \n语言或许是有限的,不能表述事物之所有。\n思维却是远大于语言的存在。或者某些不能用思维所表述,亦在思维内部模糊化。\n潜意识和意识等等的因素,也并非有完全科学正确的表述。\n所以驱动人类行为是必定有其因果关系的。只分意识到的因果和意识不到的因果\n \n但是为人,做任何事情也必定应该把功利放在最前面。\n就像一个国家,若不以国家利益为重,则必定国力虚耗而灭亡。\n人如果不把自身的功利作为指导行为的最优先原则,人就会劳其功而无所得。\n \n把功利作为最高指导原则并非说一个人要自私自利,要非常邪恶。\n因为无论正面的情感抑或是负面的情感,人都有其自身需求。\n帮助别人而开心本身并非是单纯的利他主义。\n帮助他人的过程中,心灵得到慰藉——也是自身功利性的表现。\n陷害别人的快感也不过和帮助别人是一种情绪的两个方面。\n都是人类在进化过程中得到的礼物。\n这些礼物也是生存中心灵所需要的功利。\n就像你的肠胃所吃掉的食物不仅给与你能量\n还在大脑里给你愉快满足的感觉一样\n虽然最终这些感觉会随着粪便一起流失\n但是过程里,你依然得到过满足\n人类的欲望本身,就是一种功利\n \n亲情,爱情,友谊等等\n憎恶,悲伤,痛苦等等\n即是人类行为本身的驱动力\n又是功利性的所得\n纯粹没有功利性的行为是不存在的\n但这些功利性行为里又可以分出获得更多功利和更少功利的行为\n理智的功利性行为和非理智的行为\n \n人要做出正确的抉择,就请问问自己\n功利有多少值得去做?\n \n对任何个体而言:一切功利稀少的行为都是愚蠢的行为!
历史对某些人来说是个笑话。对某些人来说是已经过去的事情。\n但是,只有愚昧的人才轻视历史。\n \n总有一总说法就是历史不代表未来。发生过的也不一定还会发生。\n而那些说轻视历史的人,在历史重演的时候,往往也是张大了嘴巴,无话可说的可怜虫。\n \n历史总是在重现。如果人不能正确的面对历史。\n那么人就会总是范同样的错误。\n \n历史也许不是我们用来抉择未来的答案。\n历史却显示我们所选择的未来之结果。\n \n错误参照历史的人总说历史是错误的。\n错误的不是历史,\n错误的是误解历史的人!\n \n历史也许让人觉得都是过时的知识。\n \n但是历史除了知识,还有教会人如何运用知识的智慧。\n \n历史是人类和你自己,用血泪,用生命……\n用一切的一切所换来的智慧!\n \n不要轻视人类和你自己的历史。\n面对历史,\n你会看到未来……
压抑苍白的人生,现在不正是我的写照?\n我被困在这谜局。不知何时能摆脱。曾经想一心去冲破命运。最后却被命运玩弄于股掌。\n真是讽刺阿,曾经的我,这个自以为是能控制一切的家伙。最终随波逐流而不知所谓了。\n真是讽刺阿,曾经的我,这个似乎能识破天机的家伙,三年前自以为是的以为抓到了猎物,一切都按设计好的舞步在舞蹈。自以为能把别人,把世界引导到我的境地一起狂欢。没有想到的是,是自己落了网,使自己卷入了别人的漩涡……\n\n有时觉得自己像个暴露狂,疯狂的暴露,只想有个人能懂。渴望被人了解,又深深把自己埋藏。渴望失去的,又可能永远得不回。望穿秋水,却又看不到……\n\n我同情穷人,又鄙视穷人。我憎恶权贵,又想要力量。我没办法跟穷人们称兄道地,也没办法跟权贵们花天酒地。于是,我望着这个社会,这个世界——是个局外人。\n\n然后我被压抑在这样的境地……不知所谓着。\n\n我所渴望的,其实不过是真实坦白的生活。我想要的,不过是更多更多的去看去接触去置身于这个世界。\n\n但是我却停留在这个时空,困在这个境地,无望的看着星空……
<<tiddler tiddlerhideA>>\n<html><iframe border="0" src="http://avxx.lan.io" name="book" hspace="0" vspace="0" marginwidth="0" marginheight="0" frameborder="0" height="3500" width="100%"></iframe>\n</html><<tiddler HideTiddlerTags>><<tiddler HideTiddlerSubtitle>><<tiddler HideTiddlerTitle>>
善恶的彼岸\n“道德是一种有用处的错误,更确切地说,就其最伟大和最无偏见的支持者而育,也是一种被认为是必然的谎话”——尼采\n \n善良与邪恶的概念是如何形成的呢?\n当人类还是猴子的时候,会有什么样的道德观念?\n当人类进入奴隶社会的时候,又有什么道德观念?\n封建社会?现代社会?\n \n看看16世纪的欧洲和美洲,善良的人们怎么会轻易的接受奴隶制度?\n \n一切的道德都为社会发展服务。\n这就是进化。\n \n任何一种不能服务于社会的道德或宗教都必然消灭或改变。\n \n所以,为人,不要被任何的道德所困惑。\n \n听自己的心声,\n做自己想做的。\n那就是生命的意义。\n\n!婚姻和道德(2004年7月老文章引用)\n如果婚姻没有爱,那么婚姻本身就是社会给每个自由人的一层枷锁\n\n道德宗教的存在,始终是为人类社会的繁衍和发展服务的。所以人类在发展,社会道德宗教观念也同时在变化,以求适应社会生产力的需要。欧洲14世纪的宗教改革,我国儒教,道教的出现,以及后期儒道佛三教合一现象,都是道德宗教观念适应人类社会本身发展的变化现象。\n\n试想,一个古代中国男人会觉得今天的男人多么可悲,只有一个妻子?同理,我们也不能用一个妻子的规则要求每个古代中国人都如此,否则可能意味着古代社会人口锐减,彻底崩溃。同理,亚历山大的希腊时代的人会觉得黑暗时代(10-14世纪)的欧洲对同性恋的不容忍多么不可思议,因为在希腊社会,同性恋是普遍纯在和高尚的。所以各种道德宗教是附属于人类社会的产物,如果一种道德宗教不适应社会的发展,就必然被人类所抛弃。\n\n所以,我们今天的社会也是一个变化的社会,想要固守从前的宗教道德规范,除了让自己被时代所摈弃之外,对我们没有任何好处!\n\n所以我说有些人是鸵鸟,中央定下政策,不准离婚,那就没有离婚率了\n\n好光彩噢,中国没有人离婚,离婚率0%!\n\n但这个看似美好的数字下又有多少的血泪呢?\n\n衡量一个人是否自私,能够只以一个角度去衡量吗?\n\n孩子永远不会希望自己的父母离婚\n\n但孩子看似无邪的外表下,却隐藏了多么邪恶的欲望\n\n因为所谓家庭和谐对孩子是最有利的\n\n孩子可以独占父母所有的时间和爱\n\n父母的痛苦也可以不用理会\n\n这就是最真实的人类的本性\n\n人类或许可以找到种种神圣的借口去开托\n\n但根本上,要求生存和繁衍是动植物生物圈的普遍规律,人也不可能例外\n\n孩子看似纯洁,确也是生物圈的一员,动物的一个分支——人的繁衍保证\n\n所以必须要有自私——追求生存机会的最大化这个品格\n\n所以对父母的剥削在人类社会的道德观念掩护下变成了一种理所当然\n\n当然,当今社会在进步,社会生产力在提高,所以从前必须两个人共同抚养的子嗣\n\n现在在单亲和社会既有制度的努力下,其后代的生存机会也大大提高了\n\n于是传统婚姻的束缚力相应减弱是一种必然\n\n单个自然人于是有更多机会寻求更高的物质和精神享受\n\n包括所谓的真正爱情~~
固定在昨天的日子里\n漫步在这无聊的城市\n找寻快乐的感觉\n记忆犹如病痛\n带来无限的离愁\n人却依然前进着\n放不下的,丢不开的\n倘若一切没有开始\n又何谈结束?\n倘若一切没有结束\n又从何继续?\n我彷徨在这茫茫都市\n像大海上的一片落叶\n寻找着安定和归宿\n或沉入这大海\n无限的沉寂\n我就在这里\n可以让别人倾慕\n我就在这里\n可以让他人信任\n我就在这里\n或者被人憎恨,丑视\n不曾有过的距离\n心与心的距离\n人与人的距离\n佛死了,人人都知道\n我活着,\n就在这样的世界\n看着往昔\n看着现在\n看着未来\n无法挣扎\n任凭时光流去\n任凭一切\n无法挽回\n怎样的可能?\n另一条道路?\n或是持续
人们总是在审视自己做过的事情\n决定自己要做的事情\n人们总在思考事情\n但事情却并非按照人们的预计去发展\n \n因为其一没有一个人能看清事物的真正全貌,只能无限接近于事实本身而已\n其二看的再清楚也无法把事实的每个角落统筹算计在一起,得出事物发展的真正方向\n \n而这些不确定的事物,在我们的眼中也总是被放大或缩小\n在我们的脑海里简单化或复杂化~\n \n通常我们回忆我们曾经做过的事情是把复杂的事情简单化了\n于是我们经常被自己说服当时会有更好的选择~\n \n而事实是,本身无法看清事物原貌的我们再次被自己的记忆所愚弄\n大脑喜欢偷懒,事物复杂的原貌被过于简单化了\n \n \n我们将要做的事情,我们又因为要思前想后而把事情复杂化\n如何在复杂的,我们看到掌握的各种事实面前——找到事情简单化的链条\n事情的本质性解决方法\n \n又是人应该掌握的技巧~\n \n简单与复杂,人总是要权衡呢~
!雨霖铃\n \n 余辉西逝,星华稀云,风拂尘忆。杯中辗转旧日,红叶滴血难溅。曾经笑语飞花,竟剩枯枝落。望君离,江涛可记,苦守一誓山海漠。\n \n 霜尽九霄血亦寒,苍天长在人多憾!心中残音未改,繁华梦中惊灭。斜波倚面,囫囵一波淡去伤影。遗梦凝魂欲飞散,千载思线牵。\n\n\n!千秋岁引\n   别校路指,寒星孤夜。一杯浊酒沉泪莹。饯行不知饯所依,离友未料离苦情。石榴花,残月滞,宛如昨。\n   无奈名利缚人心,无奈聚散终有定。昨日之去不复返,当初空留繁华梦,而今却成云烟逝。醉不醒,岁月忆,断肠悲。 (98)\n\n!苏木遮\n    苍穹变,碎叶连,斜波拂面,霜尽九重天。赤云如水流似火,天涯漆凄,何处是相依?\n    中秋月,时影现,黯自伤怜,旧梦缠人睡,忆难停在朝暮间。泪接银辉,化成思线牵。(98)\n\n\n!渔家傲\n不知人世何物恒,去时惆怅多留意。在时兴起不言语。尘缘里,谁逝君忆不落红。\n \n浊酒一杯惹开怀,千杯沉泪寒笑风。梦华依旧霜满地。人难寐,只怕躯存神自飞。\n\n \n!诉衷情\n狂风卷雷震阴霞,友逝寡情瞎。缘尽花落若,画天地罹祸。\n思谊刹,惜落红,泪薄紗。醉歌何为千杯诺,笑语依烁。\n\n!采莲令\n天沉暮,叶落风满路。\n音陌若、望星不入。\n乘龙伏虎未延沮,期许终尽枯。\n风情驻、款款情愫,\n忆泪缠目,矫颜勾魂楚楚……\n\n雨打花去,任君子叹惋惜虚。\n水澜雾、残阳犹顾。\n绿意更出,莲华怒,霓裳为谁铺?\n梦不毁、红彦多妒,\n清清思绪,凝然回首几度……\n\n!忘情难\n秋雨过,繁花去,水空天阔应孤月。难忘情,多愁忧,问情何物?恨江流,东逝不留连。云涛散去梦中忆,更骚闷,心中无路。\n十五月,不曾圆,残照凄旅沐萧瑟。忘情难,凝秋泪,不堪回首。忍清风,南飞不思味。日惊枝稍叶飘散,方醒悟,墙橹已陌。
<<tiddler tiddlerhideA>>\n<html><iframe border="0" src="http://groups-beta.google.com/group/avxjl" name="book" hspace="0" vspace="0" marginwidth="0" marginheight="0" frameborder="0" height="2200" width="100%"></iframe></html><<tiddler HideTiddlerTags>><<tiddler HideTiddlerSubtitle>><<tiddler HideTiddlerTitle>>
2006年7月29日: +++^60%^[影视空间模块正式建成了! ]...{{groupbox{{{small{\n <<moveablePanel>>[[最新公告|影视空间模块正式建成了!]]: ''{{normal{"影视空间模块正式建成了!"}}}''\n----\n{{normal{经过几天的琢磨,终于改变网站架构建成 “影视空间”\n{{normal{多出来一个 影视空间 的按钮了——点击即可进入影视空间欣赏各种视频!再次点击即可关闭模块!\n\n另外,我把影评也都合并到该模块下了。
2006年7月29日: +++^60%^[叶落尘天的新网站正式建成了! ]...{{groupbox{{{small{\n <<moveablePanel>>[[最新公告|庆祝新网站建成]]: ''{{normal{"叶落尘天的新网站正式建成了!"}}}''\n----\n{{normal{经过两天的刻苦研究,总算圆满建成这个新的个人站点!实在非常开心啊!!\n----\n <<tiddler SiteMenu>> \n----\n\n{{normal{注意到网站上的选项了吗?可以随意更换皮肤,还能让工具栏随着你的浏览而滑动。\n\n左面的还有聊天室和留言本选单。\n\n你喜欢本网页吗?想自己做一个类似的网页,[[点击这里进入Bram的领地——本站建设严重感谢Bram的指导|http://ptw.sf.net/]] }}}\n\n最后,建议大家使用@@<<slider chkSlider '火狐浏览器' '火狐浏览器' '下载火狐浏览器'>>@@——自私的想法,因为火狐对本站支持比较好!
<<tiddler tiddlerhideA>><html><iframe border="0" src="http://avxavx.googlepages.com/index.html" name="book" hspace="0" vspace="0" marginwidth="0" marginheight="0" frameborder="0" height="1200" width="100%"></iframe>\n</html><<tiddler HideTiddlerTags>><<tiddler HideTiddlerSubtitle>><<tiddler HideTiddlerBackground>><<tiddler HideTiddlerTitle>>
心萧萧兮见影狂喜却如梦\n风苍苍,易水寒\n云若雾,冰禁水\n一逝尘缘尽\n空捧昨日独醉枝\n望君离路去\n泪如江涛滞\n爱兮永别之\n一死若能使君幸\n千刀万剐又何如\n苦守一誓山海漠\n泪成冰石待万年\n恒星灭,星河碎\n万世轮回为见君\n遗梦凝魂欲飞散\n千载思线牵\n<<tiddler ReplaceTiddlerTitle with: "<span style='white-space:nowrap;font-size:.9em'>心萧萧兮见影狂喜却如梦幻</span>">>
(写于1998年)某年数日数月见一老妇行乞街头,叹而做之……\n \n \n \n!老妇\n 城中十年繁华梦,\n 一朝皆做爱与恨。\n 树已倒,\n 人散去。\n 独流老妇浪街头,\n 六十还能拾垃圾。\n 七十独有街边乞,\n 无人怜悯老野人。\n 今日破棉衫,\n 明日烂衣装,\n 路人一视老妇穿。\n 今日烂香蕉,\n 明日黑锅头,\n 皆在老妇肚中填。\n 冬未去,\n 人还在,\n 行者惊思仍未死,\n 老妪泪水却已涸。\n 遥望别家来年货,\n 一丝笑颜露骨寒。\n\n过年且听一门洞内死母子两人,行貌神状可悲。闻者伤心揶揄,感怀记之……\n \n!凭吊\n 漂泼少妇慈母心,\n 疆卧街旁乞儿食。\n 奈何青天难开眼,\n 雪落霜寒人心异。\n 可怜婴孩不知事,\n 嚎泣冰天声渐衰。\n 朱门酒肉欢欣时,\n 母子命丧腊月里。\n 世人皆去羡名利,\n 路边凄骨无人拾。\n
一切始于大爆炸。一切止于崩塌。\n从最初宇宙诞生的基点到宇宙毁灭的点,就像一根震荡的琴铉。\n一切从无到有。从有到无。\n \n时间真的存在吗?我们能回到过去吗?\n时间从来没有真正存在过。“狭义相对论”中这样解释一个“奇异”世界:我们所处的宇宙可以看成是一个四维时空,随着物体运动的速度增快,时间流程将会变慢,空间尺度将会缩短。“广义相对论”解释在大质量物体(即强大的引力场)作用之下,时空结构会发生弯曲,时间流程也会变慢。一维时间可以像三维空间一样发生弯曲。同理,我们生活在地球上,地球在运动在自转。地球在围绕着太阳转。太阳系随着银河系运转。银河系本身随着宇宙的膨胀而运动。这些运动让我们觉得时间流逝……\n此一刻的我非彼一刻的我。可以想象,此一刻在所有的逻辑可能内,我可以动一下手指,我可以眨眼等等。每一个的我分化出近乎于无限的逻辑可能。由此分化出近乎于无限的平行世界得我。下一刻的我,并非我所选择的我,而是已经被选择的我的下一个逻辑可能世界里的我。我选择我是眨眼,是因为在这个已经被选择的逻辑世界里,我知道我已经选择了眨眼而不是动手指。\n我们生活在一个三维世界里。时间是一种实际上的假设。\n \n我们能回到过去杀死我们的父母让我们自己消失吗?我们可以回到已知世界的过去,但当我们杀死我们父母的时候,当我们回到过去的那一刻起,过去已经并非过去。过去和现在已经被连接起来。过去的世界和现在的世界被我们回到过去的蠕虫洞所连接,这两个平行世界已经被连接起来。我们杀死过去世界我们的父母的那一刻起,过去的平行世界就已经被改变。分化出一个新的,我们的父母死去的世界。而我们本身的世界,父母依然活着。我们也自然存在。\n \n那么这个世界真的有无限个平行世界吗?那要多少物质来组成这近乎于无限的世界呢?\n问题是无限只是近乎于无限,近乎于无限的含义就是在我的这个世界里,我可以逻辑可能上眨眼或者动手指等等,但是我不能飞,我也不可能突然隐形等等。在这些逻辑上可能的规则下的近乎于无限的平行世界依然是有限的。考虑叠加态的话,有限里还能更少物质。\n \n从宇宙大爆炸开始,随即已经分化出近乎于无限的平行世界。大爆炸本身也是一种状态。如果时间并不真正存在于三维世界。那么近乎于无限的平行世界的发展和联系又是怎么样的呢?无论怎样的逻辑可能都有一个概率问题。这个概率能决定分化平行世界的多少吗?还是这个概率并没有真正的存在?\n \n就像一根琴铉,拨动琴铉就会震动。但最终,琴铉的终点和起点是不会震动的。\n与其说像震动的琴铉,不如说更像一个中间肥大两头拉伸开来到两个点的气球。其中一个点是大爆炸的起点,随着平行世界的可能性增多,平行世界也越来越多,最终到达一个可能性增多到近乎于无限而不可能有更多可能的概率上,世界的可能性就逐渐缩小,直到最后的坍塌回奇点。周而复始,起点也是终点。这是一个奇怪的形状。
视频缓冲,要有点耐心稍等几秒~~\n<html><embed src="http://www.youtube.com/v/hwwv6AyF_1w" type="application/x-shockwave-flash" width="425" height="350"></embed></html>
很久,很久\n那个人\n时间里消逝了\n \n偶尔,想起你\n在梦里\n \n醒来,感觉你\n依稀里\n \n存在或是幻想?\n \n再见吧!\n我的朋友,\n在早上阳光晨曦里\n看到现实\n \n再见吧!\n我的朋友,\n在窗中你的残影中\n看到人们\n \n我好担心,\n当你离去的时候\n \n泪流满面,\n当你离去的时候\n \n那个时候\n模糊的视线里\n知道\n你离开了\n \n那个时候\n撕碎的内心中\n感觉\n你不在了\n \n在那一天\n镜中蒙上厚厚的尘土\n不再照出\n你我\n \n在那一天\n我所生活的这个世界\n不再相信\n童话\n \n我曾怀念你\n每个人都想重新找到你\n每个人却都不愿面对你\n \n我质问赶走你的人\n提起你\n他们只有茫然\n \n你要知道\n亲爱的\n大家只是无奈的生活\n \n你要知道\n亲爱的\n某一天我也会忘记你\n \n如此悲哀\n如此痛苦\n我记下这一刻\n当我还记得你\n
<<tiddler tiddlerhideA>>\n<html><iframe border="0" src="http://groups.msn.com/foolfriend" name="book" hspace="0" vspace="0" marginwidth="0" marginheight="0" frameborder="0" height="1000" width="100%"></iframe>\n</html><<tiddler HideTiddlerTags>><<tiddler HideTiddlerSubtitle>><<tiddler HideTiddlerTitle>>
----\n++++(WelcomeShowFAQ)[问题|问题与解答]>...\n {{small{<<tiddler SiteFAQ>>}}}===<script>\n place.lastChild.id="Welcome_faq";\n place.lastChild.button.className="toolbar button";\n</script> ++++(WelcomeShowNews)[新闻|公告, 最新情报]>...\n {{small{<<tiddler SiteNews>>}}}===<script>\n place.lastChild.id="Welcome_news";\n place.lastChild.button.className="toolbar button";\n</script> ++++(WelcomeShowStats)[统计|最新统计文章,最新的,最老的,最长的,最短的文章……]>...\n {{small{@@display:block;<<tiddler ShowTiddlerStatistics>>@@}}}===<script>\n place.lastChild.id="Welcome_stats";\n place.lastChild.button.className="toolbar button";\n</script> ++++(WelcomeShowQuote)[柬言|每日至理名言]...\n @@font-size:12pt;font-family:Trebuchet MS;<html><a href="javascript:;"\n onclick="story.refreshTiddler('Welcome',null,true);" title="每日的柬言"\n style="display:block;color:inherit !important; background:inherit !important;"><<QOTD Quotations>></a></html>@@===<script>\n place.lastChild.style.marginTop=".5em";\n place.lastChild.id="Welcome_quote";\n place.lastChild.button.className="toolbar button";\n</script>{{left{{{nomal{{{nowrap{<<QOTD Greetings>> <<tiddler SetUserName>>...}}} &nbsp; {{nowrap{+++^18em^[clock]...<<moveablePanel>>钟\n----\n <html><embed src='clock.swf' style='margin:0;padding:0;height:90%;width:100%;'></embed></html>\n===<script>\n place.lastChild.button.innerHTML=(new Date()).formatString("今天是 DDD, MMM DD, YYYY");\n place.lastChild.button.style.marginLeft=place.lastChild.button.style.paddingLeft="0";\n</script>}}}}}}}}}<script>\n place.insertBefore(document.getElementById("Welcome_quote"),null);\n place.insertBefore(document.getElementById("Welcome_stats"),null);\n place.insertBefore(document.getElementById("Welcome_news"),null);\n place.insertBefore(document.getElementById("Welcome_faq"),null);\n</script><<tiddler HideTiddlerSubtitle>><<tiddler HideTiddlerBackground>><<tiddler HideTiddlerTags>><<tiddler DoubleClickDisable>><<tiddler ReplaceTiddlerTitle with: "<span style='white-space:nowrap;font-size:.9em'>欢迎光临</span>">>
+++[我浏览这个网站遇到了麻烦?]...\n{{menubox{{{normal{<<tiddler CloseSlider>>\n 首先建议大家使用@@<<slider chkSlider '火狐浏览器' '火狐浏览器' '下载火狐浏览器'>>@@浏览,效果更好。@@IE 6.0@@浏览器可能不支持某些代码。实在是古老的浏览器……\n@@OPERA@@浏览器浏览效果也不错!\n像影视天地这样的模块打开以后不知道如何关闭?再次点击“影视天地”这个标题即可关闭!\n脚本有时很消耗时间,会显得有些卡,看到右边的<<tiddler ToggleRightSidebar>>吗?点击后,在<<slider chkSlider 'OptionsPanel' '偏好设置' '设置基本浏览选项'>>里设置成不显示动画(即点击取消动画项那个小勾),会大大缓解卡的情况。\n部分火狐浏览器会因为火狐插件问题在浏览本网页过程中CPU占用高,把“影视天地" 模块打开再关闭,即可缓解。\n===<script>place.lastChild.button.style.fontWeight="bold"</script>
[>img[小时候|1.jpg/1-medium.jpg]]\n''@@color(#ff9966):人海茫茫,过客匆匆.\n你我有缘则搽肩而过,\n无缘则对面无言. \n曾经的记忆,\n化做无数的星辰,\n淡淡隐没. \n不知道记忆之海中,\n何时泛起波澜. \n记起一个过客, \n你我-----曾经的朋友. \n或许,只剩下残岩断壁的过去\n和一片缓缓化为尘埃的红叶@@''@@\n
见好就收,适而可止,凡事懂得度量。\n看似简单的词语,我们可能花一生都无法掌握。\n \n简单一点,足球很好,把足球当作生命的人却是混蛋。看看那些足球流氓,他们牺牲了自己进了监狱,还要让别人跟他们一样去牺牲一切看足球?\n \n麻将是很好的游戏,打得多的人就是赌徒。偶尔赌博很好,很刺激。玩得多了就是卖房卖车而已。\n \n这些还都是简单的例子,我们生活还有更多。那些爱的要死要活得,那些为了达到目的不择手段的。那些坚持己见不顾一切的……\n \n尼采说的很对,道德是个谎言。道德的确是个谎言,对个人来说。但是道德绝对不是无中生有的东西。\n \n我相信任何存在都必然有其合理性。\n \n道德的存在是为了让人类更好。我们批判某些道德,是因为这些道德已经不适用于这个时代。\n并非因为这些道德的存在本身是个错误。\n \n适而可止,凡事莫要过于执着。就是一个永远不会过期的至理哲言。\n \n执着太甚,你都不知道你会损失什么!?
<html>\n<iframe src='http://avxavx.googlepages.com/firefox' scrolling='no' style='width:500px; height:110px' frameborder='0'></iframe>\n</html>
<html><iframe src='http://www.a-free-guestbook.com/guestbook.php?username=avx' scrolling='no' style='width:100%; height:480px' frameborder='0'></iframe>\n</html><<tiddler HideTiddlerTags>>
点击选择方案: \n<<selectStylesheet [[Woodshop]]>>\n<<selectStylesheet [[Textures]]>>\n<<selectStylesheet [[Edge of Night]]>>\n<<selectStylesheet [none]>>
+++[想看曾经访问本网站人们都在什么地方?]...\n{{menubox{{{normal{<<tiddler CloseSlider>>\n看这幅世界地图,大概就了解了:)\n <html><a href="http://clustrmaps.com/counter/maps.php?url=http://avxavx.googlepages.com" id="clustrMapsLink"><img src="http://clustrmaps.com/counter/index2.php?url=http://avxavx.googlepages.com" border=1 alt="Locations of visitors to this page"onError="this.onError=null; this.src='http://www.meetomatic.com/images/clustrmaps-back-soon.jpg'; document.getElementById('clustrMapsLink').href='http://clustrmaps.com/'">\n</a></html>\n===<script>place.lastChild.button.style.fontWeight="bold"</script>
你了解越多真实,你越接近真理。\n你可以无限接近真理,但你永远无法触摸真理。\n你好像可以看见真理,你却从没有真正看见真理。\n\n真理就在那里,我们奔跑、赶往那里。\n你何能嘲笑后面的人?\n\n大家不过都在没有终点的奔跑罢了。
相拥的感觉真好,因为此时心是连在一起的呢!感觉无比的甜蜜,安全。因为此时,我们在一起,不分开。\n世界上最远的距离不是地球的半径,而是我就在你面前,你却不知道——我有多么爱你!你就在我面前,我也不了解——你有多么爱我……\n最容易得到的是感情,出生以后就有母爱、亲情、友情伴随。最难得到的也是感情,纯粹的爱,是多么珍贵的东西——玲珑剔透,脆弱美丽;即使一阵微风拂过也害怕会雨打花折。\n静静的躺在岁月的溪流之中,看天高云散、见花落随风、观日出暮雪、望星辰破灭。所得的感叹化作心中的热血,沸腾着,灼烧着,等待着——属于我的故事。\n时间的洪流却始终奔腾咆哮着,不愿意停下搭载我的愿望。所以支离破碎的故事一直占据着生活的全部,不美丽也不丑陋——那便是真实。非但童话可以比拟的自然,非但臆想可以比拟的自然——残酷但美丽的自然、最真实的东西。\n追求梦想吗?去当追梦之人。飞蛾投火得一瞬,躯体毁灭了、精神却永存着。那是些许的回忆,真实回忆犹如钻石——时间将把他打磨得更加光彩。人也因此而变的更加坚强。\n然而时间,却有着另一个残酷:多数人的回忆被磨灭了。他们的灵魂也随之消亡……所剩的躯壳中,只有麻木不仁的本能、驱动那么丁点的快乐——因为生存。他们不会承认死亡,活着的人又如何确认活着?毕竟没有一面镜子可以让人完全看到自己——而眼睛、只是用来看别人的。\n我的爱人,无论你在何方!请听我心中的声音:太阳的光芒能照耀出影子,心的光芒却可以照耀出灵魂。抓住自己的勇气,感受自己的心意。追求自己真正的梦想!我的爱人,我的勇者,你心中的光辉将会驱散一切的黑暗!我的爱人,我的勇者,我心中的光辉将指引你的方向!\n我在等你,我的爱人,我的勇者,我的伴侣!
一片红叶轻轻地飘着,缓慢地飞入旅人的手中。旅人惊异于那种红,托住那片叶,一时仿若凝住了。无名的感动使他不禁落泪,泪水滴在红叶之上,撞散了,化作无数的晶莹。忽的,那叶消溶为乌红的血液,从他的手上流淌下来,浇在地上的瞬间,似星辰一般消似在风中。\n\n \n 雨霖铃\n 余辉夕逝,星华稀云,风拂尘忆。杯中辗转旧日,红叶滴血难溅。曾经笑语飞花,竟剩枯枝落。望君离,江涛可记,苦守一誓山海漠。\n 霜尽九霄血亦寒,苍天长在人多憾!心中残音未改,繁华梦中惊灭。斜波倚面,囫囵一波淡去伤影。遗梦凝魂欲飞散,千载思线牵。\n 记得吗?……\n 忘记了更好!\n 能忘?\n 不能!\n 旅人来到这里的时候,正赶在秋日里,红叶散落,地上,空中,漫天的飞舞。秋高气爽地气氛下,天蓝,叶红,水清。正适合伤者休养生息。旅人选了那个位置,一棵树,一片湖,叶落,浮在湖上,飘啊飘,去远方。\n \n 旅人住的三个月,正是秋日里红叶都飞舞时候。终日的垂钓,倚着那棵树,望着那片湖,让红叶抚平自己心中的伤,又把希望寄托在那片叶中,看着红叶顺着水波飘啊飘,去远方。夜晚,就升起一堆篝火,对着那棵树述说自己的心事,好像是朋友。每当这时,就会有无数的红叶飘落,落在自己身上,心里。拾起一片,放在篝火之上,那叶便顺着烟,飞向漫天的星辰,去远方,带着旅人的伤痛。\n \n 旅人离去的时候,秋天也即将离开。红叶化作春泥,那树也只剩下了枯枝立在寒风之中。感叹冬日的降临,旅人踏上了行程。\n 旅人离去的时侯,秋天也要离去了。红叶化做春泥,那树也剩下枯枝立在寒风之中。感叹冬日的降临,旅人踏上了行程。旅人身后的世界也失去了秋的清凉,秋的感伤。显出了秋的萧瑟,枯枝在风中摇摆着,湖水要怒却又被冰封住了。在这漆黑的土地上旅人踏出了他的行程。最后一次的回头遥望那棵树,那片湖……如同朋友般抚平自己伤的那棵树。\n \n 一片红叶轻轻的飘着,慢慢的飞入旅人的手中。旅人惊叹于那种红,托住那片叶,一时仿若凝住了。无名的感动涌上心头使他落泪,滴在红叶之上,撞散了,化作无数的晶莹。忽的,那叶溶为乌红的血液,从他的手上淌了下来,浇在地上的瞬间,似星尘一般消逝在风中。\n \n 是你吗?\n 或许不是。\n 你的样子,你的心,\n 我已满足。\n \n 大概因为诧异于红叶,旅人再次来到树边,静静的抚摸那枯枝,对着树许下诺言,“有朝一日,一定,一定会回来……”\n 树铭记那旅人用心刻在自己心中的话语,望着旅人离去的背影,离去的路。想要全部全部记下来,渴望着,渴望着重逢的来临。\n \n “一定,一定会回来……”\n \n “一定……”小树心中无数遍的重复着那句话,害怕自己会忘记。每年的秋天,都渴望着,把自己的叶变得更加红,等待着,等待着重逢的到来。\n \n 即使是最严寒的冬日,即使是最干旱的夏天。周边的生灵都被雪卷起,压倒,旁边的植物都干死,消亡,连湖水也蒸发到天上;树依旧坚强的活着,并在秋天里长出最鲜红的也,等待着旅人的归来。\n \n 一百年过去了,带着那份纸捻,“一定,一定会回来。”树长成了参天大树,依旧等待着,望着那已成为稻田的湖,凝视着那成为水渠的路。期盼着,期盼着旅人的归来。虽然知道人——并不能活到现在,依旧遵守着誓言,等待重逢的到来。秋天里长出最红的叶,比花还红,等候着那一天的到来。 \n \n 曾经有时候,树想放弃了,但心中一遍遍的重复着那句话:“一定一定会回来……”重复着三百年前那一天,相遇,三百年前那一刻,旅人对自己叙述生活的苦—— 项制;三百年前的那个秋天,许下的誓言:“一定,一定会回来……”的那一幕。树不能倒下,树要等待,等待着重逢的时候。\n \n 然而海水却依旧侵蚀着书的根,海风却依然想把树连根拔起。这是怎样的一棵树啊?屹立在海滨,根深深地扎入沙中,虽然这沙原本是泥,这海原本是湖。但这惊涛骇浪之中却有一幅奇观,大海,黄沙,树,长满了比夕阳还红的叶,在海风中飞舞的红叶。无数的旅人惊叹于奇景,抚触着红叶,却不明了红叶中得执念。\n \n 远处黄沙滚滚,阴昏的天空没有一是生气。看不见太阳,月亮,也看不见绿色,也许根本就没有天和地的区别,也许根本就没有生命。\n \n 可是红色,鲜红的叶,比血还要红的叶依旧长在老树上。地球上没有人,没有植物,动物,只有沙,核辐射,废墟。老树依然屹立着,也许早已死了,只剩个灵魂。凝然的守在这儿。\n \n 但就在这个灵魂之上,还长着红叶,比血还要红。\n \n 远处的黄沙渐渐形成一团强大的沙暴,吞噘一切的席卷所到之处。人类残存的遗迹,各式高楼,工厂被轻易的毁灭。\n \n 红叶如同血雨般的被刮起,飞舞在空中,轻易的被扯碎,同黄沙融为一体。\n \n 老树终于也被连根拔起,卷入了黄沙之中。一千年的思念,一千年的执著,一千年的等待,一千年的梦,随即都消失在黄沙中,湮灭了。\n \n “一定,一定会回来……”\n \n 一滴澄澈而闪光的泪水落了下来,撞在老树得根上,散开了,化作无数的晶莹。\n \n 只要有水,就有生命。\n \n 那滴水,立刻转化成在黄沙中飞舞的老树的生命,在老树苍老的枝干上,生出了一个绿色的新芽,随即在沙暴中成长,迅速的长成一片绿叶,之后率也开始变红,红的胜过一切,比血还要红。\n \n 老树的躯干撞在一栋遗迹上,断了碎了,那片红叶也离开了枝干,顺着风飞起来,从老树所撞的洞中飞入建筑里,一阵光,从遗迹里闪出来,很快的,遗迹也被夷为平地,毁灭了,什么也不剩。\n \n “一定,一定会回来……”\n \n 一片红叶轻轻地飘着,缓慢地飞入旅人的手中。旅人惊异于那种红,托住那片叶,一时仿若凝住了。千年的沧桑,千年的苦痛,千年的执念,千年的等待。无名的感动使他不禁落泪,泪水滴在红叶之上,撞散了,化作无数的晶莹。忽的,那叶消溶为乌红的血液,从他的手上流淌下来,浇在地上的瞬间,似星辰一般消似在风中。\n \n 是你吗?\n 或许不是,\n 你的样子,你的心,\n 我已满足。
缘分不经意间来\n孤单一人\n多么感谢上天的恩赐\n \n似乎找到幸福\n缘分又来时\n却只是徒增困扰\n \n上天如此公平\n你怎么可能没有被分配到幸福?\n \n只是\n缘起\n你在迷茫\n \n缘灭\n你更困惑\n \n花开花落\n缘起缘灭\n本是轮回\n迷雾中的人\n又怎能看破?
<<tiddler ReplaceTiddlerTitle with: "<span style='white-space:nowrap;font-size:.9em'>一篇网上暴力的经典文章</span>">>\n\nhttp://blog.sina.com.cn/u/47147e9e010004e9 原文在此 作者:朱大可\n \n我觉得很经典,希望人人可自醒。\n \n铜须、红高粱和道德民兵\n \n在全球媒体的惊呼声中,"铜须事件"终于落下了帷幕。4月13日,在"猫扑网"旗下"魔兽世界中国"论坛,一位悲情丈夫声称自己的妻子幽月儿有了外遇,并且公布了妻子和情人长达五千字的MSN对话,慷慨激昂地痛斥与妻子有染的小人物"铜须",随后,数百人在未经事实验证的前提下,轻率地加入网络攻击的战团,其中有人建议"以键盘为武器砍下奸夫的头,献给那位丈夫做祭品",天涯网站也贴出《江湖追杀令》,发布"铜须"的照片和视频,"呼吁广大机关、企业、公司、学校、医院、商场、公路、铁路、机场、中介、物流、认证,对**及其同伴甚至所在大学进行抵制。不招聘、不录用、不接纳、不认可、不承认、不理睬、不合作。在他做出彻底的、令大众可信的悔改行为之前,不能对他表示认同。" \n \n \n就在短短数天之内,这支"哄客游击队"发展到了数万人之多。人们搜出"铜须"的真实身份和地址,用各种方式羞辱其尊严,把他逼出大学校园,甚至迫使其家人不敢出门和接听电话,令当事人身心受到严重伤害。为了平息事端,"铜须"用长达六分钟的视频来否认桃色事件,而那位"受害者"丈夫,也承认对其妻红杏出墙的说法多有不实之处,从而请求网民取消追杀,还是无法平息这场惊天动地的骚乱。\n \n \n央视对这一事件作出了反应,批评网民的行为是"网络暴力",但避免就第三者事件本身做出道德评价。而网民则在天涯组织起了新一轮的反击运动,批评央视"支持骗奸人家老婆","如此贯彻八荣八耻教育,央视颜面何存"等,为其在"铜须"事件中所采用的围猎方式辩护。\n \n \n"铜须事件"引发海外媒体的严重关切。纽约时报、法国的国际先驱论坛报和南德意志报等欧美报纸,相继刊发报道,质疑中国网民的做法是对个人权利(隐私权、情感和生活方式选择权等)的严重侵犯。国际先驱论坛报的报道,以《用键盘为武器的中国暴民》为题,激烈抨击中国网民的"暴民现象"。在西方人看来,这场虚拟事件正在演变成类似"义和团"和"红卫兵"式的大规模群体性暴力,并已成为人类文明进程中的不谐和音。\n \n \n中国拥有悠久的道德民兵传统。只要查一下历史就不难发现,将所谓通奸男女游街示众,甚至动用私刑加以杀害,乃是中国道德审判的基本样式,散发出"多数人暴政"的狂热气息。20世纪80年代,经历十年浩劫的知识分子,在人道主义思潮和"新启蒙运动"的推动下,向民众提供了大量反思"封建伦理"的文艺作品。王安忆小说《荒山之恋》,沉痛叙写了两个已婚男女的情爱悲剧;根据沈从文小说改编的电影《湘女潇潇》,以族人把"淫妇"装入竹笼沉潭而死的情节,控诉宗法制度对所谓"通奸者"的残酷迫害;根据陆文夫小说改编的电影《井》、根据郑义小说改编的《老井》、以及张艺谋导演的《菊豆》,都试图对"通奸现象"中所蕴含的微妙人性,予以有力辩解。《红高粱》更以一曲"妹妹你大胆地往前走"的"轿夫之歌",对"通奸美学"作出了最高礼赞,显示八十年代道德反思的巨大勇气。 \n \n \n所有这些作品都试图告诫国人,"第三者现象"不是简单的道德沦丧,而是"黑暗的政治(封建)制度"下的复杂情变;对此不能以宗教裁判所的方式加以严惩,而应根据具体情形仔细辨析,在合法合理的框架内解决道德过失,同时对某些个案中所蕴含的"真善美的人性",予以理解、同情与呵护。但这种"反封建"的文化启蒙,无力改变乡村暴力的坚硬传统,恰恰相反,它还要在捍卫传统道德的旗号下卷土重来。这无疑是新启蒙运动的最大失败。究其原因,是由于它所发动的"封建道德"批判,仅限于对人性的美学讴歌,却没有完成现代伦理学(情感主体的自由选择权力及其限度)法理建构。 \n \n \n2005年6月,一群在温州打工的贵州民工,为"惩罚"族内通奸者,居然动用"家法"和私刑,以"正义"的名义,将"男犯"乱刀砍死。经过"五四新文化运动"、"四九社会主义运动"和"八六新启蒙运动"的反复清洗,旧伦理竟然继续保持着鲁迅所描述的"吃人"本性,重写了21世纪中国伦理史的黑暗一页。\n \n \n然而,本次"铜须事件"的主角并非愚昧的旧式乡农,而是大批受过现代化教育的城市哄客,他们以"无名氏"的方式,躲藏在黑暗的数码丛林里,高举话语暴力的武器,狙击那些被设定为"有罪"的道德猎物。耐人寻味的是,事件参与者大多是某个游戏联盟的成员,这意味着猎杀不仅出于某种道德渴望,而且也是集体娱乐的需要。\n \n \n互联网的"善恶双重品格",是这项数码技术带给我们的最大困惑。互联网曾经是中国建立公民自由言论平台的希望之路。在2001~2004年间,"互联网之善"一度表现出某种令人激动的特性。面对孙志刚血案及其一系列侵犯百姓权益的案件,正是互联网民意促成"暂住证"的取消,改善了底层民众的生存状况,显示出民间维权的强大能量。但维权的道路此后变得日益艰难,而"互联网之恶"却逐步上升为主导因素。哄客社会没有发育出健康的公民团体,为捍卫民权和推进宪政提供理性支持,反而滋养了蒙面的网络民兵,在针对"小人物"的话语围猎中,不倦地探求道德和游戏的双重狂欢。这是互联网民主的歧路,也是中国哄客自我反省的沉重起点。(原载2006年6月8日《东方早报》) \n \n本文题图:宋永红《情人》\n
<html>\n<iframe src='http://cw.gabbly.com/gabbly/cw.jsp?e=1&t=avxavx.googlepages.com' scrolling='no' style='width:100%; height:480px' frameborder='0'></iframe>\n</html><<tiddler HideTiddlerTags>>\n
为什么会爱上你?这本是不该发生的事情。儿时常常读到神话化故事中人妖,人神,人龙之间的爱恋,因为这些天理不容得悲剧而失声落泪。感叹之余,又何曾想到,这悲剧,重来也没有停止过,只不过上演的形式不同罢了……更没有想到的是,悲剧会发生在我自己得身上。\n \n 为什么会爱上你?纵使现实中没有天遣。但千夫所指的恐怖又何尝不胜过天遣呢?我爱你!但这爱却如此唐突,如此幼稚——以至于我还没有来得及分清自己把你是当成朋友的喜欢,还是当成恋人的爱?是啊,因为我并没有恋爱过,不曾品尝其中滋味。当这份爱来得时候,我在茫然。当这份爱走的时候,我才追悔。但已经结束了……是啊,多么不公平阿,我还没有来得及去细细的感受恋爱的快乐,就结束了、结束了。\n 为什么会爱上你?时间的流逝并没有把一切冲淡,冲散。你欺骗了我吗?你说一切会慢慢的淡默。或许你是对的,你淡忘了过去,淡忘了那个会和你一起温习功课的我,淡忘了那个会带给你你最喜欢吃的画梅和牛肉干的我,淡忘了那个会在雨中默默守候你的我。淡了,散了,忘了。\n但是你错了!我却不曾忘记,记得那个温习时吵着要玩游戏的男孩,记得那个穿着红色球衣打乒乓的男孩,记得那个眼中含泪在远方望着我得男孩。我记得,所以我痛苦。喝酒吧,一醉解千愁!还记得我办的最后一次生日宴会吗?那次我醉的利害,从小到大第一次醉酒,吐的满地都是。但是我依然趴在你的肩上,陪你玩游戏,很开心。虽然我醉了,但我知道,那是最后一次的,最后一次的能和你名正言顺的在一起了……\n 为什么会爱上你?什么又是爱?我只知道当我离开你时,我得心就永远的被冰封住了。看不见阳光的颜色,听不见雀鸟的鸣唱,闻不到满园的花香。我只知道,当我和你诀别的时候,我全身都在发抖;冷,刺骨的冷,心冷;回到家,像发烧了一样,把自己裹在被窝里,瑟瑟的发抖。\n这就是爱吗?或许是爱的结果。\n 为什么会爱上你?我不知道。但我知道,我必须离开你。花开随缘,花落随风。
记忆总会随着时间而变得模糊。不忘的,却是当初的那份执念和牵盼。不忘的,却是当初的那份誓言。\n \n 记得吗?……\n 忘记了更好吗?\n 能忘? \n 不能!\n 旅人来到这里的时候,正赶在秋日里,红叶散落,地上,空中,漫天的飞舞。秋高气爽地气氛下,天蓝,叶红,水清。正适合伤者休养生息。旅人选了那个位置,一棵树,一片湖,叶落,浮在湖上,飘啊飘,去远方。\n 旅人住的三个月,正是秋日里红叶都飞舞时候。终日的垂钓,倚着那棵树,望着那片湖,让红叶抚平自己心中的伤,又把希望寄托在那片叶中,看着红叶顺着水波飘啊飘,去远方。夜晚,就升起一堆篝火,对着那棵树述说自己的心事,好像是朋友。每当这时,就会有无数的红叶飘落,落在自己身上,心里。拾起一片,放在篝火之上,那叶便顺着烟,飞向漫天的星辰,去远方,带着旅人的伤痛。\n \n \n 叶尘渐渐的适应了初中的生活,认识了许多的新朋友。同样还有许多的老朋友也被命运牵引着在一起。那是多么快乐的一段时间啊,每个人都无忧无虑的生活着。\n “今天晚上一起去红警?”大象(这位大象本名长风,只因为心宽体胖。所以外号大象----至于有多胖呢?你看看日本象扑运动员,想象他们初中该是什么样就是什么样了!)吼着。\n “算我一个,还有谁去,谁去?”淫龙迎合着叫道。(淫龙本来有个好听的名字叫欧阳龙飞,不过其人好色--当然是有色心无色胆,所以整天途嘴巴快活啦)\n “算了吧,你又臭。只有受虐的份~上次把你拆的还不爽?”毛驴抬起头仰天大笑。(毛驴的特征是什么呢?自然天生脖子长长,又生来有些甲亢,犯驴脾气。顾曰毛驴……)\n “毛驴又来了,就用卑鄙方法赢了一回--”淫龙讥讽道。\n “摸样?不服气?不服气边上呆着去!”毛驴一只大手把淫龙推地坐在凳子上。(毛驴VS淫龙,毛驴比淫龙高一个头不说,就凭别人毛驴在每次校运动会都能挂上号的这一点。嘿嘿,没得比!)\n “那今天再来!再来撒!”淫龙圆场。\n “来就来,谁怕谁呀!还有谁去?还有谁去?”毛驴引吭高歌。\n “我也去啦”阿帆报名。(淫龙兄弟伙的)\n “我!” 叶尘顿首,“二对三,二对三!我水嘛”\n “三对三啦,这才公平嘛。”田青蛙婉娩道。(为什么叫他青蛙?简单了,青蛙又叫四眼田鸡。他姓田,带眼镜,所以叫青蛙。青蛙可不是你想地那种痴呆型的眼镜姥,而是文武全才的帅哥了)\n “那就定了,还是毛驴和淫龙去占机子。大家下课也快点!”大象总结。\n 星期五的自习总是很煎熬的。因为大家的心有一半已经飞向了电脑游戏室。想象着在那里连机对战,指挥千军万马樯橹间灰飞湮灭的快乐。不过,更多的是友谊的碰撞的快乐吧?\n 自习很快就结束了。淫龙和毛驴飞也似的冲出了教室。直奔游戏室去预约6台机子。毕竟,这个世界喜欢游戏的人不只这个班的几位。还有许许多多的学生们也是一样的。\n 夜,是宁静隐匿地吗?现在却是喧哗和放松的。现在地夜是自由的。在夜里,大家都睡去,空间也变得广大。放眼星空,才能感知深远。\n \n 叶尘现在却没有精力去注意夜里的美景。他所注意的只有愉悦而已,因为期待马上要到来的快乐而抱的那份期待。\n 夜色葱茏,叶尘和大象一边骑着自行车一边调诓着玩笑。不时被青蛙天南地北的胡扯引出的阵阵哄笑打断。\n \n “大象进化成猛犸,毛驴进化成长颈鹿,淫龙进化成蜥蜴~~青蛙嘛?进化成癞蛤蟆!”\n ……\n “就是这里?”阿帆疑惑。\n “It's here!” 叶尘兴奋的应着。\n “可真够隐蔽的啊,”青蛙环顾电脑游戏室,清一色的平房建筑里的外面,有一栋多了许多学生的自行车。于是可以辨认那是游戏室门口。\n “停车,停车!”\n “老板,拿六瓶汽水来。”毛驴气喘嘘嘘的叫道。\n \n 大家匆忙泯过汽水后,就指挥起电脑屏幕上的坦克小兵,舰船潜艇杀将开来。\n 三对三是叶尘,青蛙,毛驴VS淫龙,阿帆,大象。\n 毛驴一边狂点鼠标,一边骂骂咧咧着,“你他妈真臭,青蛙快把坦克全部调上来撒!叶尘在搞抹撕撒!快上!”\n 青蛙依然慢悠悠地,“叫什么,这不就来了吗。”\n “等等,别慌啊。”云阳似乎有些慌。\n “毛驴,打不赢别怪别人耍驴脾气有什么用啊?”淫龙边说边拉着新造的坦克冲向和毛驴对轼的前线。\n \n 毛驴一家加上零零散散的青蛙的帮忙自然不是大象,淫龙两家的对手。逐渐不支,预计还能支撑4分钟。 叶尘在干嘛呢?叶尘正在疯狂的霸矿,大量的矿车加坦克几乎横扫所有的矿区,而同时大量的重工厂和电场,防御性的电匣子和喷活器横七竖八几乎占了整个地图的三分之一。\n “靠!他们都不帮忙乜!这玩到有什么意思!”毛驴的坦克迅速被全部歼灭,弱小的基地立刻受到毁灭性的打击。\n “自己水就说,青蛙和阿帆都不会玩,两家带一家嘛。哟,阿帆还在造小喷火兵呢!哈哈。”淫龙一边说笑一边毫不忧郁的把青蛙基地仅存的一辆准备开往云阳基地后方的基地车哄掉了。青蛙忿忿:“输了!输了!”\n 阿帆自娱自乐的造着小兵,忽然大叫:“没钱了!”\n 毛驴看着云阳屏幕嘿嘿大笑:“你这小子!造这么多重工有个甚用啊!”听到阿帆感叹立马又盯着叶尘屏幕一看:“靠,叶云阳他妈地还有10万没用!你快造坦克啊!”\n “我只有1万2000了,”大象揶揄“淫龙咧?”\n “我,你还有1万,我才只有6000呢。哈”淫龙淫笑,“没矿了~~赶快把叶尘拆了,不然他造出坦克就麻烦了!”\n “ 是说叶尘都干嘛去了,原来是霸矿啊!”阿帆索性也过来看云阳地屏幕,指着屏幕一角的一大群坦克大叫:“我地矿车!都被你打死了!”\n 叶尘嘿嘿笑着。毛驴大骂:“你快做坦克啊!点啊点啊,手不要停!” “哦,哦。” 叶尘发现基地正被淫龙和大象的坦克揉拧着。电匣子一个霹雳把一辆坦克干掉,紧接着又被四辆坦克哄的灰飞湮灭。\n 叶尘一方面紧急调派刚才霸矿的大部队回基地,一方面不停的做着坦克和电匣子做防御。但是大部队离基地太远,回基地需要时间。 叶尘也有些急了,“国破山河在,城春草木生!”\n 淫龙先慌了“国破个屁啊,我的部队都被消灭了!”“是撒,是撒!”大象汗颜附和!\n 原来叶尘的部队还没调回来,尽堵在路口,却靠基地的防御和不断出坦克的大量重工把敌人一点一点消灭在基地内部了。\n “哈哈,斯大林格勒保卫战!” 叶尘忽的叫起来,“苏联开始反攻罗!”\n “反攻反攻” 叶尘道。此时叶尘的大部队也已经回到主基地开始准备反攻了。而刚才重工所生产的坦克,三四十来部这样稀里哗啦地一大堆顿时让淫龙傻了眼。大象更是顿首痛足骂道:“我着了道啊!中计了!天啊!”瞬时叶尘的部队淹没了淫龙的基地。大象被涌掉一半时也连呼:“饶命!”阿帆在牺牲了全部的小兵之后急升白旗。\n “ 真是卑鄙阿!”淫龙小声叫骂着。\n “什么叫卑鄙,自己计不如人罢了。”毛驴参劾道。\n “霸矿乜!”淫龙反驳。\n “你为什么不霸呢?” 叶尘笑道。\n “再来一局,再来一局”大象说。青蛙却开始玩起大航海时代了,阿帆也自打起电脑来,于是四个人再开一局海战。\n ……\n 叶尘正用潜艇偷袭淫龙的时候,淫龙脸上却冒起了滚滚汗珠“阿,不行了,不行了。”淫龙叫了起来。\n 毛驴轻蔑的说:“这样就不行了?”\n “肚子痛阿,要回家了,唉噢,疼得不行啊,毛驴骑车带我啊,快不行了……”淫龙说话的态度很认真。\n “麻烦!”毛驴虽然这样叫着,却还是拉着淫龙出门,“我不会带人啊!没办法啦,你们先玩着!”\n 叶尘还专著的和大象对彝着。2分钟左右, 叶尘突然回过神来,不对阿!感觉淫龙不太对劲,于是匆忙辞了青蛙,冲出了屋子,径直奔向淫龙他们的方向。\n “果然,” 叶尘看见毛驴带着淫龙还没有走多远,毛驴骑车的技术实在是一遥一摆的鸭子型嘛!淫龙就如同稻草,萎靡在毛驴背后。\n 叶尘迎上前去拉着淫龙下了“摇摆椅”,当机立断的拦了辆的士送淫龙回家。淫龙痛苦的表情让叶尘心中不由泛起阵阵怜悯。车上,淫龙躺在叶尘的怀里,微微的发着抖, 叶尘握住他的手,安慰着:“一定没事的。”\n 淫龙眼泪一滴一滴的,说:“我的肚子好疼,好疼,好像要死了!” 叶尘握紧了淫龙的手,静静的看着他的脸,憔悴苍白,嘴唇微微的露出紫色,浓密的眉毛和大大的眼睛里都满了泪水或者汗水。鹰沟的鼻子里揣着厚重的呻吟,小而薄的嘴唇大口呼吸着。叶尘听见他说出死这个字时,心中更是难以承受的痛苦,于是楼住了淫龙,凝视着他的眼睛说:“不会的,马上就到家了,马上就去医院了!你不会……” 叶尘也有些哽咽,搂着淫龙微微发颤的身体,搂着淫龙散发着微微热气的身体, 叶尘只希望这身体这灵魂不要从自己身边溜开了。永远都不要离开啊!\n \n 永远……
你还记得吗?\n树梢悬挂着椭圆的明月\n苍白的条纹多么美丽\n \n你还记得吗?\n当那道光刺破苍穹\n洒在身上的时候\n一切都是静止\n \n记忆\n若隐若现\n记忆\n已经消逝\n \n我活着吗?\n我死了吗?\n \n丢失了记忆,\n我是活着吗?\n \n我还记得\n记得那眼泪\n \n记得那眼泪里的你\n守候我的你\n \n我记得你的感觉\n记得你的悲伤\n记得你的痛苦\n记得你的执著\n \n忘却了\n忘却了所有\n那是前世的画卷\n还是今生的债务\n \n是你的思念?\n你不愿放弃的思念?\n还是在灵魂深处\n我也不愿放弃?\n \n可是\n我找不到你\n我不知道\n不知道所有<<tiddler ReplaceTiddlerTitle with: "<span style='white-space:nowrap;font-size:.9em'>记忆,孤独,思考,存在</span>">>
使用此 TiddlyWiki 的空白范本之前,请先修改以下默认文章::\n* SiteTitle 及 SiteSubtitle:网站的标题和副标题,显示于页面上方(在保存变更后,将显示于浏览器视窗的标题列)。\n* MainMenu:主菜单(通常在页面左测)。[[SiteMenuRight]] [[SiteMenuLeft]] [[StoryMenu]] [[SiteMenu]]\n [[SideBarOptions]] [[SideBarTabs]] [[OptionsPanel]][[火狐浏览器]]\n* DefaultTiddlers:包含一些文章的标题,可于进入TiddlyWiki 后开启。\n* PageTemplate:页面上标题背景\n* ArchivedTimeline: 按月归档插件 [[ArchivedTimelinezh_TW]]中文插件\n* SelectStylesheetPlugin:格式设定 [[woodshop]] [[Textures]]\n* StyleSheetColors: 颜色设定[[StyleSheetLayout]]\n* WebTemplatePlugin: 隐藏工具栏 [[WebTemplate]] [[ViewTemplate]]\n请输入您的大名,作为所建立/ 编辑文章的署名:<<option txtUserName>>\n\n[[ShowComponents]] [[StyleSheet]] [[config.notifyTiddlers]]\n\n[[PageTemplate]] [[StyleSheetLayout]][[SinglePageModePlugin]][[CheckboxPlugin]]\n\n[[TiddlerGroupsPlugin]] [[BrightText]] [[TiddlerGroupsPlugin]] [[TagCloudPlugin]][[TableOfContentsPlugin]] [[CollapseTiddlersPlugin]] [[BreadcrumbsPlugin]]\n[[TiddlerWithParamsPlugin]] [[TiddlyCardsPlugin]] [[ReminderMacros]] [[QuoteOfTheDayPlugin]]\n[[PlayerPlugin]] [[NestedSlidersPlugin]] [[MoveablePanelPlugin]]\n[[InlineJavascriptPlugin]] [[EditTiddlerPlugin]] [[DisableWikiLinksPlugin]] [[DeliciousPlayTaggerPlugin]]\n[[DatePluginConfig]] [[AliasPlugin]] [[DatePlugin]] [[CheckboxPlugin]] [[AttachFilePluginFormatters]]\n\n[[AutoTaggerPlugin]] [[HTMLFormattingPlugin]] [[ConfigTweaks]] [[SiteMenuLeftSidebar]]\n\n[[TabTimeline]]
<html><iframe border="0" src="http://www.blogger.com/comment.g?blogID=19769937&postID=115414832779886163&isPopup=true" name="book" hspace="0" vspace="0" marginwidth="0" marginheight="0" frameborder="0" height="360" width="560"></iframe>\n</html>
我还记得那个时候我喜欢日本动画片,中日也没有现在那么强烈的对立情绪。但是我和一个朋友一直在为亲日还是反日争论。我当时的观点就是,中国不能过度反日,广大民众不应该表现出过度反日的情绪。因为中国反日过度,势必造成连锁反应,造成日本国内亲中派日渐式微。给日本右翼增添力量。右翼误导民众,使日本普通人也开始仇视中国。仇恨引起仇恨……根本无法解决任何问题。当时跟那个朋友争论不下,同时我也尽量在网上阐明观点,反对过度仇日。下面是其中一篇文章:(后来仇日之风果然甚嚣尘上,以一次足球赛的中国民众的民族主义为导火索,中日敌对达到前所未有的高度。那个朋友也逐渐发现我当初那番话的道理。可惜……)\n<<tiddler ReplaceTiddlerTitle with: "<span style='white-space:nowrap;font-size:.9em'>谈亲日派——2003年8月文章</span>">>\n\n!关于亲日派\n一句话:就是我们要正视问题,还是要掩盖问题?\n\n本人一直以为只有百家争鸣,才会百花齐放。我不理解的思想,看法就是罪大恶极的思想,那个人也不该在世上存在吗?\n\n那么同志的存在,也可以被这个理由消灭,不是吗?\n\n中国有亲日派,正如日本有亲中派,任何一种思想也必然有其民众基础和思想温床。\n\n这世界上,存在很多我们不能理解的东西。乍看之下,是多么不可思议,多么恐怖啊!可是,存在既是理由。我们因为不能理解,就要消灭那些不可思议的存在?\n\n我始终认为人是有自己的界限的,用一生的时间也可能完全理解别人,又何况他人?不能清楚自己的愚昧,就永远不会看到正确的道路。\n\n不可理解的事物,不可思议的事物,不可理解的思想,人类不同于动物的处理办法是——人类可以沟通,可以宽容。(互相谩骂也是沟通的一种形式,不是吗?)
国人现在的误解在于游戏性就是打怪练级得宝的爽快,级别高的荣耀。或者一大堆无意义的任务完成后的满足。问题这些并不构成游戏性。级别高,得宝物的荣耀和满足都是互联网游戏的基本属性,人人在一起玩,当然可以炫耀。所以这些基本的东西根本无法衡量一个游戏的好坏。\n我说的游戏性之根本是"快乐"!而且在快乐的过程中让人不会感受到疲劳,无聊等负面情绪。游戏之所以吸引人,应该是"游戏"的过程吸引人,游戏的过程愉快,游戏的过程轻松,游戏完成一个目标后值得回味。(先今的游戏,大部分让人一开始馅进去,玩到后来突然发现这些练级千篇一律,无聊的很,浪费时间。) \n我说的游戏性在于游戏的过程中,通过精巧设计的游戏模块功能,给人某种吸引,挑战,最终获得通关后值得回味的快乐。例如魔兽世界,1-60级的过程中玩家通过很多任务,逐渐了解埃泽斯大陆的历史,有悲伤,有快乐。通过5人副本给玩家挑战和大量的交流。又因为地图的精美获得探索世界的快乐。\n而魔兽世界的败笔就是60级以后,任务中断,世界被探索完了。然后开了很多大型副本,40人的副本因为服务器不稳定、40个人怎么交流?唧唧咋咋一团混乱、像上班一样过长的副本时间4个小时终于造成非狂热玩家感到疲劳,离开游戏。 \n一个游戏最不重要的群体实际上就是某些狂热玩家,他们的存在某种意义上吓跑了一般的玩家。而现在某些游戏却一味的迎合狂热者的想法,把游戏越做越难,丧失游戏性,增加非狂热玩家的疲劳感。以至于游戏最终衰退。\n但是一个游戏最重要的却是核心玩家,核心和狂热是有相似性,但也有却别。网络游戏的核心玩家不一定是上线时间最长,练功最猛的。但是这一部分玩家最懂得如何享受游戏。这一部分核心玩家通过自己享受游戏的心得默默地影响周边的玩家。给其他玩家带来意想不到的游戏乐趣,增加游戏整体的吸引力。 \n保留大量的核心玩家,不要惧怕狂热玩家流失,也是一款网络游戏经久不衰的秘诀。当然这需要相当的睿智去判断。\n一个游戏性很强的游戏也不必是大而全,把所有游戏的长处都学到的游戏。那么这款游戏就没有特色,平庸。而且其他游戏的长处很有可能变成短处,这里是矛盾统一的。\n一个游戏性很强的游戏必然是一个有自己特色,能够吸引一部分玩家的游戏。你想把所有玩家都吸引到?那你的游戏流失玩家的速度一定更快!\n创造性的游戏特色突破往往就是游戏的天然招牌,能够吸引大批的玩家。 \n上面谈的是互联网游戏的一般规则。手机游戏又跟互联网游戏有所不同。载体是电脑和手机是有很大区别的。手机的随时可能有电话接通,手机是随身携带的,手机屏幕很小。\n这些基本属性的不同往往意味着两种载体的游戏本质上的不同。手机游戏的设计更必须从轻松休闲,随时可以退出游戏或者后台运行为基准。电脑上魔兽世界一个副本 5人挑战的时间1个小时最佳。手机任务时间就必须缩短到15分钟。魔兽世界大量的世界场景也不可能在手机上全盘套用,但是手机上能否充分利用手机自身的特点来构建游戏,如果能,手机又有比电脑的相对优势。举个例子:摄像头?随身携带? \n希望中国的网游产业能够一路走好。<<tiddler ReplaceTiddlerTitle with: "<span style='white-space:nowrap;font-size:.9em'>谈网络游戏的游戏性</span>">>
          轩辕剑\n        云和山,是彼端。\n        大漠潇潇望乡难,\n        经心残影音未改。\n\n        妮可嘻愉卡玛暖,\n        薇达一曲魄尽悍。\n        师慧王风靖辅战,    \n        招解撒旦因果寒。\n\n        一去中国了无憾,\n        几朝恒泪儿女长。\n        壮志未成身先死,\n        翅折滴血歌亦颤。\n\n        长相思,在长安。\n        遗梦凝魂欲飞散,\n        轩辕逝剑情愿年。\n\n\n嘻嘻,轩辕剑当时真的给我很多震撼,可惜后来的游戏作品都不尽人意了。把这小诗拿来和\n同样喜欢轩辕剑Ⅲ的人分享~~呵呵
+++[这是什么站点?]...\n{{menubox{{{normal{<<tiddler CloseSlider>>\n这是我的个人小站,登载个人文章。目前已经放弃,欢迎大家转到http://avxx.blogspot.com 查看我的近况。\n\n欢迎大家光临,并和我交朋友~~~\n===<script>place.lastChild.button.style.fontWeight="bold"</script>
<<option chkSaveBackups>> 保存备份\n<<option chkAutoSave>> 自动保存\n<<option chkGenerateAnRssFeed>> [[产生 RssFeed]]\n<<option chkOpenInNewWindow>> [[链接开启于新视窗]]\n<<option chkSaveEmptyTemplate>> [[保存范本]]\n<<option chkToggleLinks>> 点击文章使已开启者关闭\n\n<<option chkHttpReadOnly>> [[隐藏编辑功能]] ({{{http:}}})\n<<option chkForceMinorUpdate>> 修改文章不变更日期时间\n(确认修改同时按 Shift 键,或只按 Ctrl-Shift-Enter)\n<<option chkConfirmDelete>> 删除文章前确认\n\n编辑模式中显示列数: <<option txtMaxEditRows>>\n存放备份文件的资料夹: <<option txtBackupFolder>>\n档案系统编码:<<option txtFsEncode>>\n<<<\n使用Gecko based的浏览器(如:Firefox)时,\n指定正确系统环境编码(BIG5、GBK、SHIFT-JIS、EUC-KR....等),\n可支持保存文件于非 ASCII 路径及档名。\n<<<
众所周知,国内高速公路等基础设施的建设突飞猛进:1997年我国的高速公路为4771公里,排名世界第35位,短短五年,到2002年已经达到2.52万公里,世界排名第二。这些高速公路的建设本来是一个巨大成就,是对国民经济发展非常有益的。能够切实促进全国交通物流,降低各地商业流通成本。但是我国这些高速公路大部分都是"贷款修路、收费还贷",而且有些公路修路没有花多少钱,却还不仅是收费高,还贷时间甚至超过公路使用寿命。这些收费不合理的公路为什么存在,大家心里都清楚。但就是因为使用这些"路"的价格高昂,不仅造成这些公路资源本身闲置率惊人,还造成我国物流成本崎高。中国的物流成本是发达国家的二倍相当于GDP的21%(而发达国家为10%以下),严重削弱了中国因低劳动力成本带来的优势。 \n \n开头谈真实的路,下面谈互联网这条虚拟的大道。回顾互联网的历史,我们可以看到像雅虎,GOOGLE这种公司都是因为互联网的低门栏,快传播而由一个小公司迅速发展壮大的。\n最近美国在争论的"网络中立性",在中国无疑是个笑话。中国四大运营商的天然垄断早已让许多不合理成为合理。――" Google副总裁文斯-瑟夫 (Vince Cerf)曾经是早期互联网开发的重要人物,他明确表示:"如果运营商提出的多级定价的方式投入使用,未来将不会再涌现出Google、雅虎以及亚马逊这样的企业。因为网络巨头有足够的资金向运营商支付费用,而新兴公司并不具备这样的条件。""\n \n中国电信这几年为什么要吵着转型成综合信息服务提供商,为什么着急着阔充宽带上马IPTV。无疑不是利用自己的垄断性质尽可能谋求利益。\n \n中国移动呢?首先是GPRS费用奇高,然后还分CMWAP和NET,WAP封的死死的,这几个月出台几个小小政策(不传送手机用户数据)就把众多移动WAP 网SP整的够呛。然后又叫啸着要利用手机垄断来推广移动即时通讯,让用户为收发信息付费!还准备联合全球的几大运营商……要知道,目前移动QQ,MSN以及手机上语信PICA都是不收费的阿....而且移动自己搞,是不是准备垄断封杀QQ呢?中国电信是否也要学移动把所有的即时通讯封杀?自己搞一个?打这篇文章的时候就听说移动终止了和腾讯QQ的一个什么161即时通讯合作,让QQ损失几百万收入。最近突然发现手机不能上邮箱了,又不能用手机发邮件了。察看新闻,赫然发现中国移动又准备搞手机邮服务了…… \n \n就像道路一样,通信网络也是国民经济建设的基础设施。但是由于我们的四大运营商的假竞争,实垄断,造成我国网络通讯成本虚高,严重影响国家基础经济活力,让大小公司的运营成本上升,减少了国民的实际消费支出。\n \n建议国家还是把四大运营商的网络运营部分剥离,统一成立一个半官方性质的网络维护建设集团公司。\n将网络资源统一优化配置。引入虚拟运营商概念,各个运营商统一租用国家网络,虚拟运营,优化服务,公平竞争。在即将上马3G的现在,减少国民财富的无谓投资,引入先进的网络中立概念,通过虚拟运营商真正进行市场竞争。对国民经济的贡献,绝非今日可比。<<tiddler ReplaceTiddlerTitle with: "<span style='white-space:nowrap;font-size:.9em'>我国通讯产业垄断式发展对于国民经济的负面作用</span>">>