Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
<<importTiddlers>>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<!--{{{-->
<div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
/***
|''Name''|GroupByPlugin|
|''Description''|Mimics allTags macro to provide ways of creating lists grouping tiddlers by any field|
|''Version''|0.6.1|
|''Author''|Jon Robson|
|''Status''|beta|
!Usage
{{{<<groupBy tags>>}}}
mimics allTags macro

{{{<<groupBy server.bag>>}}}
groups by the server.bag field (this version contains TiddlySpace specific code for turning a bag into a space name)

{{{groupBy modified dateFormat:"YYYY"}}}
group tiddlers by year.

{{{<<groupBy tags exclude:excludeLists exclude:systemConfig>>}}}
group tiddlers by tag but exclude the tags with values excludeLists and systemConfig

Within that group you can also exclude things by filter
{{{groupBy modifier filter:[tag[film]]}}}
will group tiddlers tagged with film by modifier.
***/
//{{{
(function($) {
var taglocale = config.views.wikified.tag;
var macro = config.macros.groupBy = {
	locale: {
		tooltip: "all tiddlers in group %0",
		noTiddlers: "no tiddlers",
		openAllText: taglocale.openAllText,
		openAllTooltip: taglocale.openAllTooltip,
		openTiddler: "open tiddler with title %0"
	},
	morpher: {
		// TODO: note currently the following 2 morphers are TiddlySpace specific and probably should be in separate plugin
		"server.workspace": function(value, options) {
			return macro.morpher["server.bag"](value.replace("bags/", "").replace("recipes/", ""));
		},
		"server.bag": function(value, options) {
			if(typeof(value) !== "string") {
				return false;
			} else if(value.indexOf("_public") === -1 && value.indexOf("_private") === -1) {
				value = "*%0".format(value); // add star for non-space bags.
			}
			return value.replace("_public", "").replace("_private", "");
		},
		created: function(value, options) {
			return value.formatString(options.dateFormat || "DD MMM YYYY");
		},
		modified: function(value, options) {
			return macro.morpher.created(value, options);
		}
	},

	handler: function(place, macroName, params, wikifier, paramString) {
		var field = params[0] || "server.workspace";
		var dateFormat = params[1] || "DD MMM YYYY";
		var container = $("<div />").attr("macroName", macroName).addClass("groupBy").
			attr("refresh", "macro").attr("fieldName", field).
			attr("paramString", paramString).
			attr("dateFormat", dateFormat).appendTo(place)[0];
		macro.refresh(container);
	},
	isTypeArray: function(value) {
		var valueType = typeof value;
		if(valueType === "object" && typeof value.length === "number" &&
			!(value.propertyIsEnumerable("length")) &&
			typeof value.splice === "function") { //is Array
			return true;
		} else {
			return false;
		}
	},
	_onClickGroup: function(ev, options) {
		var i, target = ev.target, locale = macro.locale;
		var tiddlers = $(target).closest(".templateContainer").data("tiddlers");
		var popup = $(Popup.create(target)).addClass("taggedTiddlerList")[0];
		var value = $(target).attr("value");
		var openAll = createTiddlyButton($("<li />").appendTo(popup)[0],
			locale.openAllText.format(value), locale.openAllTooltip);
		$(openAll).click(function(ev) {
			story.displayTiddlers(ev.target, tiddlers);
			return false;
		});
		var listBreak = $("<li />").addClass("listBreak").html("<div />").appendTo(popup);
		for(i = 0; i < tiddlers.length; i++) {
			var item = $("<li />").appendTo(popup)[0];
			var template = store.getTiddlerText(options.template) || macro.template;
			wikify(template, item, null, tiddlers[i]);
		}
		listBreak.clone().appendTo(popup);
		$(createTiddlyLink($("<li />").appendTo(popup)[0], value, false)).
			text(locale.openTiddler.format(value));
		Popup.show();
		ev.stopPropagation();
		return false;
	},
	_refresh: function(container, tiddlers, options) {
		var totalGroups = 0, locale = macro.locale, i, j;
		var excludeValues = options.exclude;
		var values = {}, value_ids = [];
		var field = options.field;
		var morpher = macro.morpher[field] || function(value) {
			return value;
		};
		for(i = 0; i < tiddlers.length; i++) {
			var tiddler = tiddlers[i];
			var value = tiddler[field] || tiddler.fields[field];
			value = macro.isTypeArray(value) ? value : [ value ];
			for(j = 0; j < value.length; j++) {
				var v = morpher(value[j], options);
				if(v && $.inArray(v, excludeValues) === -1) {
					totalGroups += 1;
					if(!values[v]) {
						values[v] = [];
					}
					values[v].push(tiddler);
					value_ids.pushUnique(v);
				}
			}
		}
		var ul = $("<ul />").appendTo(container)[0];
		if(totalGroups === 0) {
			$("<li />").addClass("listTitle").text(locale.noTiddlers);
		}
		value_ids = value_ids.sort();
		var groupTemplate = store.getTiddlerText(options.groupTemplate);
		var onClick = function(ev) {
			macro._onClickGroup(ev, options);
		};
		for(i = 0; i < value_ids.length; i++) {
			var title = value_ids[i];
			var info = getTiddlyLinkInfo(title);
			tiddlers = values[title];
			var btn = createTiddlyButton($("<li />").appendTo(ul)[0],
				"%0 (%1)".format(title, tiddlers.length), locale.tooltip.format(title), null, info.classes);
			if(groupTemplate) {
				$(btn).empty();
				wikify(groupTemplate, btn, null, tiddlers[0]);
			}
			$(btn).click(onClick).attr("value", title).attr("refresh", "link").attr("tiddlyLink", title);
			$(btn).addClass("templateContainer").data("tiddlers", tiddlers);
		}
	},
	refresh: function(container) {
		container = $(container).empty();
		var paramString = container.attr("paramString");
		var args = paramString.parseParams("name", null, true, false, true)[0];
		var options = { field: container.attr("fieldName"), dateFormat: container.attr("dateFormat"), exclude: args.exclude || [],
			template: args.template ? args.template[0] : false, groupTemplate: args.groupTemplate ? args.groupTemplate[0] : "" };
		var tiddlers = args.filter ? store.filterTiddlers(args.filter[0]) : store.getTiddlers("title");
		macro._refresh(container, tiddlers, options);
	},
	template: "<<view title link>>"
};

}(jQuery));
//}}}
/***
|''Name''|SimpleSearchPlugin|
|''Description''|displays search results as a simple list of matching tiddlers|
|''Authors''|FND|
|''Version''|0.4.1|
|''Status''|stable|
|''Source''|http://devpad.tiddlyspot.com/#SimpleSearchPlugin|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/SimpleSearchPlugin.js|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Keywords''|search|
!Code
***/
//{{{
if(!version.extensions.SimpleSearchPlugin) { //# ensure that the plugin is only installed once
version.extensions.SimpleSearchPlugin = { installed: true };

if(!config.extensions) { config.extensions = {}; }

config.extensions.SimpleSearchPlugin = {
	heading: "Search Results",
	containerId: "searchResults",
	btnCloseLabel: "close",
	btnCloseTooltip: "dismiss search results",
	btnCloseId: "search_close",
	btnOpenLabel: "open all",
	btnOpenTooltip: "open all search results",
	btnOpenId: "search_open",

	displayResults: function(matches, query) {
		story.refreshAllTiddlers(true); // update highlighting within story tiddlers
		var el = document.getElementById(this.containerId);
		query = '"""' + query + '"""'; // prevent WikiLinks
		if(el) {
			removeChildren(el);
		} else { //# fallback: use displayArea as parent
			var container = document.getElementById("displayArea");
			el = document.createElement("div");
			el.id = this.containerId;
			el = container.insertBefore(el, container.firstChild);
		}
		var msg = "!" + this.heading + "\n";
		if(matches.length > 0) {
			msg += "''" + config.macros.search.successMsg.format([matches.length.toString(), query]) + ":''\n";
			this.results = [];
			for(var i = 0 ; i < matches.length; i++) {
				this.results.push(matches[i].title);
				msg += "* [[" + matches[i].title + "]]\n";
			}
		} else {
			msg += "''" + config.macros.search.failureMsg.format([query]) + "''"; // XXX: do not use bold here!?
		}
		createTiddlyButton(el, this.btnCloseLabel, this.btnCloseTooltip, config.extensions.SimpleSearchPlugin.closeResults, "button", this.btnCloseId);
		if(matches.length > 0) { // XXX: redundant!?
			createTiddlyButton(el, this.btnOpenLabel, this.btnOpenTooltip, config.extensions.SimpleSearchPlugin.openAll, "button", this.btnOpenId);
		}
		wikify(msg, el);
	},

	closeResults: function() {
		var el = document.getElementById(config.extensions.SimpleSearchPlugin.containerId);
		removeNode(el);
		config.extensions.SimpleSearchPlugin.results = null;
		highlightHack = null;
	},

	openAll: function(ev) {
		story.displayTiddlers(null, config.extensions.SimpleSearchPlugin.results);
		return false;
	}
};

// override Story.search()
Story.prototype.search = function(text, useCaseSensitive, useRegExp) {
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(), useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack, null, "excludeSearch");
	var q = useRegExp ? "/" : "'";
	config.extensions.SimpleSearchPlugin.displayResults(matches, q + text + q);
};

// override TiddlyWiki.search() to sort by relevance
TiddlyWiki.prototype.search = function(searchRegExp, sortField, excludeTag, match) {
	var candidates = this.reverseLookup("tags", excludeTag, !!match);
	var primary = [];
	var secondary = [];
	var tertiary = [];
	for(var t = 0; t < candidates.length; t++) {
		if(candidates[t].title.search(searchRegExp) != -1) {
			primary.push(candidates[t]);
		} else if(candidates[t].tags.join(" ").search(searchRegExp) != -1) {
			secondary.push(candidates[t]);
		} else if(candidates[t].text.search(searchRegExp) != -1) {
			tertiary.push(candidates[t]);
		}
	}
	var results = primary.concat(secondary).concat(tertiary);
	if(sortField) {
		results.sort(function(a, b) {
			return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);
		});
	}
	return results;
};

} //# end of "install only once"
//}}}
/***
|''Name:''|zh-HantTranslationPlugin|
|''Description:''|Translation of TiddlyWiki into Traditional Chinese|
|''Source:''|http://tiddlywiki-zh.googlecode.com/svn/trunk/|
|''Subversion:''|http://svn.tiddlywiki.org/Trunk/association/locales/core/zh-Hant/locale.zh-Hant.js|
|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|
|''Version:''|2.6.6|
|''Date:''|Oct 10, 2012|
|''Comments:''|Please make comments at http://groups.google.com/group/TiddlyWiki-zh/|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.4.1|
***/

//{{{
// --
// -- Translateable strings
// --

// Strings in "double quotes" should be translated; strings in 'single quotes' should be left alone

config.locale = 'zh-Hant'; // W3C language tag
config.options.txtFileSystemCharSet = 'BIG5';

if (config.options.txtUserName == 'YourName' || !config.options.txtUserName) // do not translate this line, but do translate the next line
	merge(config.options,{txtUserName: "YourName"});

merge(config.tasks,{
	save: {text: "儲存", tooltip: "儲存變更至此 TiddlyWiki", action: saveChanges},
	importTask: {text: "導入", tooltip: "自其他檔案或伺服器導入文章或套件", content: '<<importTiddlers>>'},
	tweak: {text: "選項", tooltip: "改變此 TiddlyWiki 的顯示與行為的設定", content: '<<options>>'},
	upgrade: {text: "更新", tooltip: "更新 TiddlyWiki 核心程式", content: '<<upgrade>>'},
	plugins: {text: "套件管理", tooltip: "管理已安裝的套件", content: '<<plugins>>'}
});

merge(config.optionsDesc,{
	txtUserName: "編輯文章所使用之作者署名",
	chkRegExpSearch: "啟用正規式搜尋",
	chkCaseSensitiveSearch: "搜尋時,區分大小寫",
	chkIncrementalSearch: "隨打即找搜尋",
	chkAnimate: "使用動畫顯示",
	chkSaveBackups: "儲存變更前,保留備份檔案",
	chkAutoSave: "自動儲存變更",
	chkGenerateAnRssFeed: "儲存變更時,也儲存 RSS feed",
	chkSaveEmptyTemplate: "儲存變更時,也儲存空白範本",
	chkOpenInNewWindow: "於新視窗開啟連結",
	chkToggleLinks: "點擊已開啟文章連結時,將其關閉",
	chkHttpReadOnly: "非本機瀏覽文件時,隱藏編輯功能",
	chkForceMinorUpdate: "修改文章時,不變更作者名稱與日期時間",
	chkConfirmDelete: "刪除文章前須確認",
	chkInsertTabs: "使用 tab 鍵插入定位字元,而非跳至下一個欄位",
	txtBackupFolder: "存放備份檔案的資料夾",
	txtMaxEditRows: "編輯模式中顯示列數",
	txtTheme: "使用的佈景名稱",
	txtFileSystemCharSet: "指定儲存文件所在之檔案系統之字集 (僅適用於 Firefox/Mozilla only)"});

// Messages
merge(config.messages,{
	customConfigError: "套件載入發生錯誤,詳細請參考 PluginManager",
	pluginError: "發生錯誤: %0",
	pluginDisabled: "未執行,因標籤設為 'systemConfigDisable'",
	pluginForced: "已執行,因標籤設為 'systemConfigForce'",
	pluginVersionError: "未執行,套件需較新版本的 TiddlyWiki",
	nothingSelected: "尚未作任何選擇,至少需選擇一項",
	savedSnapshotError: "此 TiddlyWiki 未正確存檔,詳見 http://www.tiddlywiki.com/#Download",
	subtitleUnknown: "(未知)",
	undefinedTiddlerToolTip: "'%0' 尚無內容",
	shadowedTiddlerToolTip: "'%0' 尚無內容, 但已定義隱藏的預設值",
	tiddlerLinkTooltip: "%0 - %1, %2",
	externalLinkTooltip: "外部連結至 %0",
	noTags: "未設定標籤的文章",
	notFileUrlError: "須先將此 TiddlyWiki 存至檔案,才可儲存變更",
	cantSaveError: "無法儲存變更。可能的原因有:\n- 你的瀏覽器不支援此儲存功能(Firefox, Internet Explorer, Safari and Opera 經適當設定後可儲存變更)\n- 也可能是你的 TiddlyWiki 檔名包含不合法的字元所致。\n- 或是 TiddlyWiki 文件被改名或搬移。",
	invalidFileError: " '%0' 非有效之 TiddlyWiki 文件",
	backupSaved: "已儲存備份",
	backupFailed: "無法儲存備份",
	rssSaved: "RSS feed 已儲存",
	rssFailed: "無法儲存 RSS feed ",
	emptySaved: "已儲存範本",
	emptyFailed: "無法儲存範本",
	mainSaved: "主要的TiddlyWiki已儲存",
	mainFailed: "無法儲存主要 TiddlyWiki,所作的改變未儲存",
	macroError: "巨集 <<%0>> 執行錯誤",
	macroErrorDetails: "執行巨集 <<%0>> 時,發生錯誤 :\n%1",
	missingMacro: "無此巨集",
	overwriteWarning: "'%0' 已存在,[確定]覆寫之",
	unsavedChangesWarning: "注意! 尚未儲存變更\n\n[確定]存檔,或[取消]放棄存檔?",
	confirmExit: "--------------------------------\n\nTiddlyWiki 以更改內容尚未儲存,繼續的話將遺失這些更動\n\n--------------------------------",
	saveInstructions: "SaveChanges",
	unsupportedTWFormat: "未支援此 TiddlyWiki 格式:'%0'",
	tiddlerSaveError: "儲存文章 '%0' 時,發生錯誤。",
	tiddlerLoadError: "載入文章 '%0' 時,發生錯誤。",
	wrongSaveFormat: "無法使用格式 '%0' 儲存,請使用標准格式存放",
	invalidFieldName: "無效的欄位名稱:%0",
	fieldCannotBeChanged: "無法變更欄位:'%0'",
	loadingMissingTiddler: "正從伺服器 '%1' 的:\n\n工作區 '%3' 中的 '%2' 擷取文章 '%0'",
	upgradeDone: "已更新至 %0 版\n\n點擊 '確定' 重新載入更新後的 TiddlyWiki",
	invalidCookie: "無效的 cookie '%0'"});

merge(config.messages.messageClose,{
	text: "關閉",
	tooltip: "關閉此訊息"});

merge(config.messages,{
	backstage: {
		open: {text: "控制台", tooltip: "開啟控制台執行編寫工作"},
		close: {text: "關閉", tooltip: "關閉控制台"},
		prompt: "控制台:",
		decal: {
			edit: {text: "編輯", tooltip: "編輯 '%0'"}
		}}});

merge(config.messages,{
	listView: {
		tiddlerTooltip: "檢視全文",
		previewUnavailable: "(無法預覽)"}});

merge(config.messages,{
	dates: {
	months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
	days: ["星期日", "星期一","星期二", "星期三", "星期四", "星期五", "星期六"],
	shortMonths: ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"],
	shortDays: ["日", "一","二", "三", "四", "五", "六"],
	daySuffixes: ["st","nd","rd","th","th","th","th","th","th","th",
		"th","th","th","th","th","th","th","th","th","th",
		"st","nd","rd","th","th","th","th","th","th","th",
		"st"],
	am: "上午",
	pm: "下午"}});

merge(config.messages.tiddlerPopup,{ 
	});

merge(config.views.wikified.tag,{
	labelNoTags: "未設標籤",
	labelTags: "標籤: ",
	openTag: "開啟標籤 '%0'",
	tooltip: "顯示標籤為 '%0' 的文章",
	openAllText: "開啟以下所有文章",
	openAllTooltip: "開啟以下所有文章",
	popupNone: "僅此文標籤為 '%0'"});

merge(config.views.wikified,{
	defaultText: "",
	defaultModifier: "(未完成)",
	shadowModifier: "(預設)",
	dateFormat: "YYYY年0MM月0DD日",
	createdPrompt: "建立於"});

merge(config.views.editor,{
	tagPrompt: "設定標籤之間以空白區隔,[[標籤含空白時請使用雙中括弧]],或點選現有之標籤加入",
	defaultText: ""});

merge(config.views.editor.tagChooser,{
	text: "標籤",
	tooltip: "點選現有之標籤加至本文章",
	popupNone: "未設定標籤",
	tagTooltip: "加入標籤 '%0'"});

merge(config.messages,{
	sizeTemplates:
		[
		{unit: 1024*1024*1024, template: "%0\u00a0GB"},
		{unit: 1024*1024, template: "%0\u00a0MB"},
		{unit: 1024, template: "%0\u00a0KB"},
		{unit: 1, template: "%0\u00a0B"}
		]});

merge(config.macros.search,{
	label: " 尋找",
	prompt: "搜尋本 Wiki",
	placeholder: "",
	accessKey: "F",
	successMsg: " %0 篇符合條件: %1",
	failureMsg: " 無符合條件: %0"});

merge(config.macros.tagging,{
	label: "引用標籤:",
	labelNotTag: "無引用標籤",
	tooltip: "列出標籤為 '%0' 的文章"});

merge(config.macros.timeline,{
	dateFormat: "YYYY年0MM月0DD日"});

merge(config.macros.allTags,{
	tooltip: "顯示文章- 標籤為'%0'",
	noTags: "沒有標籤"});

config.macros.list.all.prompt = "依字母排序";
config.macros.list.missing.prompt = "被引用且內容空白的文章";
config.macros.list.orphans.prompt = "未被引用的文章";
config.macros.list.shadowed.prompt = "這些隱藏的文章已預設內容";
config.macros.list.touched.prompt = "自下載或新增後被修改過的文章"; 

merge(config.macros.closeAll,{
	label: "全部關閉",
	prompt: "關閉所有開啟中的 tiddler (編輯中除外)"});

merge(config.macros.permaview,{
	label: "引用連結",
	prompt: "可存取現有開啟之文章的連結位址"});

merge(config.macros.saveChanges,{
	label: "儲存變更",
	prompt: "儲存所有文章,產生新的版本",
	accessKey: "S"});

merge(config.macros.newTiddler,{
	label: "新增文章",
	prompt: "新增 tiddler",
	title: "新增文章",
	accessKey: "N"});

merge(config.macros.newJournal,{
	label: "新增日誌",
	prompt: "新增 jounal",
	accessKey: "J"});

merge(config.macros.options,{
	wizardTitle: "增訂的進階選項",
	step1Title: "增訂的選項儲存於瀏覽器的 cookies",
	step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>顯示未知選項</input>",
	unknownDescription: "//(未知)//",
	listViewTemplate: {
		columns: [
			{name: 'Option', field: 'option', title: "選項", type: 'String'},
			{name: 'Description', field: 'description', title: "說明", type: 'WikiText'},
			{name: 'Name', field: 'name', title: "名稱", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'}
			]}
	});

merge(config.macros.plugins,{
	wizardTitle: "擴充套件管理",
	step1Title: "- 已載入之套件",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	skippedText: "(此套件因剛加入,故尚未執行)",
	noPluginText: "未安裝套件",
	confirmDeleteText: "確認是否刪除所選套件:\n\n%0",
	removeLabel: "移除 systemConfig 標籤",
	removePrompt: "移除 systemConfig 標籤",
	deleteLabel: "刪除",
	deletePrompt: "永遠刪除所選套件",

	listViewTemplate : {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "套件", type: 'Tiddler'},
			{name: 'Description', field: 'Description', title: "說明", type: 'String'},
			{name: 'Version', field: 'Version', title: "版本", type: 'String'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "大小", type: 'Size'},
			{name: 'Forced', field: 'forced', title: "強制執行", tag: 'systemConfigForce', type: 'TagCheckbox'},
			{name: 'Disabled', field: 'disabled', title: "停用", tag: 'systemConfigDisable', type: 'TagCheckbox'},
			{name: 'Executed', field: 'executed', title: "已載入", type: "Boolean", trueText: "是", falseText: "否"},
			{name: 'Startup Time', field: 'startupTime', title: "載入時間", type: 'String'},
			{name: 'Error', field: 'error', title: "載入狀態", type: 'Boolean', trueText: "錯誤", falseText: "正常"},
			{name: 'Log', field: 'log', title: "紀錄", type: 'StringList'}
			],
		rowClasses: [
			{className: 'error', field: 'error'},
			{className: 'warning', field: 'warning'}
			]},
	listViewTemplateReadOnly: {
		columns: [
			{name: 'Tiddler', field: 'tiddler', title: "套件", type: 'Tiddler'},
			{name: 'Description', field: 'Description', title: "說明", type: 'String'},
			{name: 'Version', field: 'Version', title: "版本", type: 'String'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "大小", type: 'Size'},
			{name: 'Executed', field: 'executed', title: "已載入", type: 'Boolean', trueText: "是", falseText: "否"},
			{name: 'Startup Time', field: 'startupTime', title: "載入時間", type: 'String'},
			{name: 'Error', field: 'error', title: "載入狀態", type: 'Boolean', trueText: "錯誤", falseText: "正常"},
			{name: 'Log', field: 'log', title: "紀錄", type: 'StringList'}
			],
		rowClasses: [
			{className: 'error', field: 'error'},
			{className: 'warning', field: 'warning'}
			]}
	});

merge(config.macros.toolbar,{
	moreLabel: "+",
	morePrompt: "顯示更多工具列命令",
	lessLabel: "-",
	lessPrompt: "隱藏部份工具列命令",
	separator: "|"
	});
	
merge(config.macros.refreshDisplay,{
	label: "刷新",
	prompt: "刷新此 TiddlyWiki 顯示"
	});
	
merge(config.macros.importTiddlers,{
	readOnlyWarning: "TiddlyWiki 於唯讀模式下,不支援導入文章。請由本機(file://)開啟 TiddlyWiki 文件",
	wizardTitle: "自其他檔案或伺服器導入文章",
	step1Title: "步驟一:指定伺服器或來源文件",
	step1Html: "指定伺服器類型:<select name='selTypes'><option value=''>選取...</option></select><br>請輸入網址或路徑:<input type='text' size=50 name='txtPath'><br>...或選擇來源文件:<input type='file' size=50 name='txtBrowse'><br><hr>...或選擇指定的饋入來源:<select name='selFeeds'><option value=''>選取...</option></select>",
	openLabel: "開啟",
	openPrompt: "開啟檔案或",
	statusOpenHost: "正與伺服器建立連線",
	statusGetWorkspaceList: "正在取得可用之文章清單",
	errorGettingTiddlerList: "取得文章清單時發生錯誤,請點選「取消」後重試。",
	step2Title: "步驟二:選擇工作區",
	step2Html: "輸入工作區名稱:<input type='text' size=50 name='txtWorkspace'><br>...或選擇工作區:<select name='selWorkspace'><option value=''>選取...</option></select>",
	cancelLabel: "取消",
	cancelPrompt: "取消本次導入動作",
	statusOpenWorkspace: "正在開啟工作區",
	statusGetTiddlerList: "正在取得可用之文章清單",
	errorGettingTiddlerListHttp404: "讀取 tiddlers 發生錯誤,請確認來源網址。點擊[取消]重試。",
	errorGettingTiddlerListHttp: "讀取 tiddlers 發生錯誤,請確認來源網址且已啟用<a href='http://enable-cors.org/'>CORS</a>",
	errorGettingTiddlerListFile: "從本機檔案讀取 tiddlers 發生錯誤,請確認來源位於此 TiddlyWiki 文件相同的資料夾。點擊[取消]重試。",
	step3Title: "步驟三:選擇欲導入之文章",
	step3Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='true' name='chkSync'>保持這些文章與伺服器的連結,便於同步後續的變更。</input><br><input type='checkbox' name='chkSave'>儲存此伺服器的詳細資訊於標籤為 'systemServer' 的文章名為:</input> <input type='text' size=25 name='txtSaveTiddler'>", 
	importLabel: "導入",
	importPrompt: "導入所選文章",
	confirmOverwriteText: "確定要覆寫這些文章:\n\n%0",
	step4Title: "步驟四:正在導入%0 篇文章",
	step4Html: "<input type='hidden' name='markReport'></input>", // DO NOT TRANSLATE
	doneLabel: "完成",
	donePrompt: "關閉",
	statusDoingImport: "正在導入文章 ...",
	statusDoneImport: "所選文章已導入",
	systemServerNamePattern: "%2 位於 %1",
	systemServerNamePatternNoWorkspace: "%1",
	confirmOverwriteSaveTiddler: "此 tiddler '%0' 已經存在。點擊「確定」以伺服器上料覆寫之,或「取消」不變更後離開",
	serverSaveTemplate: "|''Type:''|%0|\n|''URL:''|%1|\n|''Workspace:''|%2|\n\n此文為自動產生紀錄伺服器之相關資訊。",
	serverSaveModifier: "(系統)",

	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "文章", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "大小", type: 'Size'},
			{name: 'Tags', field: 'tags', title: "標籤", type: 'Tags'}
			],
		rowClasses: [
			]}
	});

merge(config.macros.upgrade,{
	wizardTitle: "更新 TiddlyWiki 核心程式",
	step1Title: "更新或修補此 TiddlyWiki 至最新版本",
	step1Html: "您將更新至最新版本的 TiddlyWiki 核心程式 (自 <a href='%0' class='externalLink' target='_blank'>%1</a>)。 在更新過程中,您的資料將被保留。<br><br>請注意:更新核心可能不相容於其他套件。若對更新的檔案有問題,詳見 <a href='http://www.tiddlywiki.org/wiki/CoreUpgrades' class='externalLink' target='_blank'>http://www.tiddlywiki.org/wiki/CoreUpgrades</a>",
	errorCantUpgrade: "j無法更新此 TiddlyWiki. 您只能自本機端的 TiddlyWiki 檔案執行更新程序",
	errorNotSaved: "執行更新之前,請先儲存變更",
	step2Title: "確認更新步驟",
	step2Html_downgrade: "您的 TiddlyWiki 將自 %1 版降級至 %0版。<br><br>不建議降級至較舊的版本。",
	step2Html_restore: "此 TiddlyWiki 核心已是最新版 (%0)。<br><br>您可以繼續更新作業以確認核心程式未曾毀損。",
	step2Html_upgrade: "您的 TiddlyWiki 将自 %1 版更新至 %0 版",
	upgradeLabel: "更新",
	upgradePrompt: "準備更新作業",
	statusPreparingBackup: "準備備份中",
	statusSavingBackup: "備份檔案",
	errorSavingBackup: "備份檔案時發生問題",
	statusLoadingCore: "核心程式載入中",
	errorLoadingCore: "載入核心程式時,發生錯誤",
	errorCoreFormat: "新版核心程式發生錯誤",
	statusSavingCore: "正在儲存新版核心程式",
	statusReloadingCore: "新版核心程式載入中",
	startLabel: "開始",
	startPrompt: "開始更新作業",
	cancelLabel: "取消",
	cancelPrompt: "取消更新作業",
	step3Title: "已取消更新作業",
	step3Html: "您已取消更新作業"
	});

merge(config.macros.annotations,{
	});

merge(config.commands.closeTiddler,{
	text: "關閉",
	tooltip: "關閉本文"});

merge(config.commands.closeOthers,{
	text: "關閉其他",
	tooltip: "關閉其他文章"});

merge(config.commands.editTiddler,{
	text: "編輯",
	tooltip: "編輯本文",
	readOnlyText: "檢視",
	readOnlyTooltip: "檢視本文之原始內容"});

merge(config.commands.saveTiddler,{
	text: "完成",
	tooltip: "確定修改"});

merge(config.commands.cancelTiddler,{
	text: "取消",
	tooltip: "取消修改",
	warning: "確定取消對 '%0' 的修改嗎?",
	readOnlyText: "完成",
	readOnlyTooltip: "返回正常顯示模式"});

merge(config.commands.deleteTiddler,{
	text: "刪除",
	tooltip: "刪除文章",
	warning: "確定刪除 '%0'?"});

merge(config.commands.permalink,{
	text: "引用連結",
	tooltip: "本文引用連結"});

merge(config.commands.references,{
	text: "引用",
	tooltip: "引用本文的文章",
	popupNone: "本文未被引用"});

merge(config.commands.jump,{
	text: "捲頁",
	tooltip: "捲頁至其他已開啟的文章"});

merge(config.commands.fields,{
	text: "欄位",
	tooltip: "顯示此文章的擴充資訊",
	emptyText: "此文章沒有擴充欄位",
	listViewTemplate: {
		columns: [
			{name: 'Field', field: 'field', title: "擴充欄位", type: 'String'},
			{name: 'Value', field: 'value', title: "內容", type: 'String'}
			],
		rowClasses: [
			],
		buttons: [
			]}});

merge(config.shadowTiddlers,{
	DefaultTiddlers: "[[GettingStarted]]",
	GettingStarted: "使用此 TiddlyWiki 的空白範本之前,請先修改以下預設文章:\n* SiteTitle 及 SiteSubtitle:網站的標題和副標題,顯示於頁面上方<br />(在儲存變更後,將顯示於瀏覽器視窗的標題列)。\n* MainMenu:主選單(通常在頁面左側)。\n* DefaultTiddlers:內含一些文章的標題,可於載入TiddlyWiki 後的預設開啟。\n請輸入您的大名,作為所建立/ 編輯的文章署名:<<option txtUserName>>",
	MainMenu: "[[使用說明|GettingStarted]]\n\n\n版本:<<version>>",
	OptionsPanel: "這些設定將暫存於瀏覽器\n請簽名<<option txtUserName>>\n (範例:WikiWord)\n\n <<option chkSaveBackups>> 儲存備份\n <<option chkAutoSave>> 自動儲存\n <<option chkRegExpSearch>> 正規式搜尋\n <<option chkCaseSensitiveSearch>> 區分大小寫搜尋\n <<option chkAnimate>> 使用動畫顯示\n----\n [[進階選項|AdvancedOptions]]",
	SiteTitle: "我的 TiddlyWiki",
	SiteSubtitle: "一個可重複使用的個人網頁式筆記本",
	SiteUrl: '',
	SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "YYYY年0MM月0DD日" "日誌">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "偏好設定 \u00bb" "變更 TiddlyWiki 選項">>',
	SideBarTabs: '<<tabs txtMainTab "最近更新" "依更新日期排序" TabTimeline "全部" "所有文章" TabAll "分類" "所有標籤" TabTags "更多" "其他" TabMore>>',
	StyleSheet: '[[StyleSheetLocale]]',
	TabMore: '<<tabs txtMoreTab "未完成" "內容空白的文章" TabMoreMissing "未引用" "未被引用的文章" TabMoreOrphans "預設文章" "已預設內容的隱藏文章" TabMoreShadowed>>'
});

merge(config.annotations,{
	AdvancedOptions: "此預設文章可以存取一些進階選項。",
	ColorPalette: "此預設文章裡的設定值,將決定 ~TiddlyWiki 使用者介面的配色。",
	DefaultTiddlers: "當 ~TiddlyWiki 在瀏覽器中開啟時,此預設文章裡列出的文章,將被自動顯示。",
	EditTemplate: "此預設文章裡的 HTML template 將決定文章進入編輯模式時的顯示版面。",
	GettingStarted: "此預設文章提供基本的使用說明。",
	ImportTiddlers: "此預設文章提供存取導入中的文章。",
	MainMenu: "此預設文章的內容,為於螢幕左側主選單的內容",
	MarkupPreHead: "此文章的內容將加至 TiddlyWiki 文件的 <head> 段落的起始",
	MarkupPostHead: "此文章的內容將加至 TiddlyWiki 文件的 <head> 段落的最後",
	MarkupPreBody: "此文章的內容將加至 TiddlyWiki 文件的 <body> 段落的起始",
	MarkupPostBody: "此文章的內容將加至 TiddlyWiki 文件的 <body> 段落的最後,於 script 區塊之後",
	OptionsPanel: "此預設文章的內容,為於螢幕右側副選單中的選項面板裡的內容",
	PageTemplate: "此預設文章裡的 HTML template 決定的 ~TiddlyWiki 主要的版面配置",
	PluginManager: "此預設文章提供存取套件管理員",
	SideBarOptions: "此預設文章的內容,為於螢幕右側副選單中選項面板裡的內容",
	SideBarTabs: "此預設文章的內容,為於螢幕右側副選單中的頁籤面板裡的內容",
	SiteSubtitle: "此預設文章的內容為頁面的副標題",
	SiteTitle: "此預設文章的內容為頁面的主標題",
	SiteUrl: "此預設文章的內容須設定為文件發佈時的完整網址",
	StyleSheetColors: "此預設文章內含的 CSS 規則,為相關的頁面元素的配色。''勿修改此文'',請於 StyleSheet 中作增修",
	StyleSheet: "此預設文章內容可包含 CSS 規則",
	StyleSheetLayout: "此預設文章內含的 CSS 規則,為相關的頁面元素的版面配置。''勿修改此文'',請於 StyleSheet 中作增修",
	StyleSheetLocale: "此預設文章內含的 CSS 規則,可依翻譯語系做適當調整",
	StyleSheetPrint: "此預設文章內含的 CSS 規則,用於列印時的樣式",
	SystemSettings: "此預設文章用於儲存此 TiddlyWiki 文件的選項設定",
	TabAll: "此預設文章的內容,為於螢幕右側副選單中的「全部」頁籤的內容",
	TabMore: "此預設文章的內容,為於螢幕右側副選單中的「更多」頁籤的內容",
	TabMoreMissing: "此預設文章的內容,為於螢幕右側副選單中的「未完成」頁籤的內容",
	TabMoreOrphans: "此預設文章的內容,為於螢幕右側副選單中的「未引用」頁籤的內容",
	TabMoreShadowed: "此預設文章的內容,為於螢幕右側副選單中的「預設文章」頁籤的內容",
	TabTags: "此預設文章的內容,為於螢幕右側副選單中的「分類」頁籤的內容",
	TabTimeline: "此預設文章的內容,為於螢幕右側副選單中的「最近更新」頁籤的內容",
	ToolbarCommands: "此預設文章的內容,為顯示於文章工具列之命令",
	ViewTemplate: "此預設文章裡的 HTML template 決定文章顯示的樣子"
	});
//}}}
*晨禱晨更結束後與主一起去摩斯~~國北師店~~共進早餐!
**薯條好像變更好吃了耶~
**摩斯的早餐變得好好吃的樣子,有好多以前沒見過的漢堡,而且套餐也都不貴,最多只要 65 元。我點了一號餐蘑菇蛋堡,好吃!!!
**不過,不知道是吃太飽的關係,還是因為睡眠不足,吃完以後我就往後靠在小沙發椅後面,睡倒在主懷裡了 <<XD>>
*今晨也把小筆電桌布換成「主與新婦愛的繽紛隧道」了!<<幸福>> <html><a href="http://img832.imageshack.us/i/mydesktoponnetbook20101.png/" target="_blank"><img src="http://img832.imageshack.us/img832/9496/mydesktoponnetbook20101.th.png" border="0"/></a></html>
*連續不上班三天半以後今天終於再到公司。不過,今天的業務因為合作人員拖稿的關係,有可能再次遭遇大敗 <<:s>> 不過,我還是沒有對他惡言相向(畢竟也是因為他之前都很配合,而且還有寄手工香皂送我 <<:p>>)。唉!希望可以早日苦盡甘來……

〔影片請見文末〕

!簡介
*因為自己體力、速度還有球技不比二十幾歲們了,又加上學足球十年,經驗算不少,所以目前在大場比賽中最常踢的是後衛的位置。但其實對這個位置該怎麼防守,也不甚了了,以致於在比賽中常被強隊的幾名前場球員輕鬆傳導就撕裂自己和隊友拼成的防線,眼看球兒破門,委實不甘。所以昨天剛好有弟兄分享影片,我看一下相關播放清單裡有沒有感興趣的主題,就瞥見這支,還挺有趣的
*這支影片是英國(?)網友剪輯某場切爾西(Chelsea)vs. 曼城(Man. City)比賽,取其中一位後衛的表現,來--警惕世人--激勵後衛精益求精(抖)
*苦主:英超曼城隊左後衛 Javier Garrido

!字幕譯析
|!秒數|!字幕大意|
|0:18|努力防止被過,尚稱盡職|
|0:30|沒有守到任何人(這點有爭議,據網友回應,其實他這時是在盯著邊線上敵人的右邊鋒,所以第一球被進不能怪他)|
|0:57|由於站位偏前,放掉身後的敵人,留下一大空間,沒有回位子,所以造成右前鋒有機可乘|
|>|!0:1|
|1:25|跑到 Drogba 的後面(跑錯邊),造成左後又一大片空檔|
|1:51|沒有盡全力回防彌補頹勢|
|>|!0:2|
|2:13|太早放棄,沒有關心後續發展|
|2:49|醒來,為時已晚|
|>|!0:3|
|3:04|與左中衛間空隙太大,且欠缺視野|
|3:26|回防一樣慢吞吞|
|>|!0:4|
|3:49|又來了(左後丟一大片空間)|
|>|!0:4|
|4:22|猜猜看接下來會怎樣?|
|4:44|Garrido 只顧看球,沒注意對方右前鋒 Kalou|
|>|!0:5 了……|
|5:19|再度門戶洞開歡迎光臨|
|5:50|看看空隙有多大|

【最後重點提示】
*當你所盯防的人一把球傳出去,就要趕緊往後撤
*如果球已經到你的身後,就要全速衝回防守位置
*要和最靠近你的中後衛站緊一點
*就算一對一被過,還是要趕快盡力跑去挽救
*盯球也要盯人,不要只注意球而被其他人逮到機會
*在禁區內及禁區周圍的防守一定要「壓上去」

!Robert 補充
*看 YouTube 下面的網友留言,很多人不認為上面每球都該怪 Garrido;據說第 4、5 球比較確定是他的錯,其他則有疑義。我覺得挺有道理的。有機會再把下面比較重要的留言討論摘譯上來
*不太確定這支是否適用於中後衛,但是有踢邊後衛的球員們應該是一定可以參考這支的
*如果有其他想法的話,歡迎 FB 討論,希望拋磚引玉,有人可以多教教我們怎樣踢好後衛這幾個位置

!影片
<html><iframe width="853" height="480" src="//www.youtube.com/embed/xKMkqXCMtnw" frameborder="0" allowfullscreen></iframe></html>
/***
|''Name:''|TagsTreePlugin|
|''Description:''|Displays tags hierachy as a tree of tagged tiddlers.<br>Can be used to create dynamic outline navigation.|
|''Version:''|2.0.0|
|''Date:''|Oct 14,2011|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin - 2.0.0 Amendments - Simon Huggins|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0|
!Demo
On the plugin [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] :
*Try to tag some <<newTiddler>> with a tag displayed in the menu and edit MainMenu.
*Look at some tags like [[Plugins]] or [[menu]].
!Installation
#import the plugin,
#save and reload,
#optionally, edit TagsTreeStyleSheet.
! Usage
{{{<<tagsTree>>}}} macro accepts the following //optional// parameters.
|!#|!parameter|!description|!by default|
|1|{{{root}}}|Uses {{{root}}} tag as tree root|- In a //tiddler// content or template : uses the tiddler as root tag.<br>- In the //page// content or template (by ex MainMenu) : displays all untagged tags.|
|2|{{{excludeTag}}}|Excludes tiddlers with a specified tag (and their children) from the tree - changed 2.0.0|exclude|
|3|{{{level}}}|Expands nodes until level {{{level}}}.<br>Value {{{0}}} hides expand/collapse buttons.|Nodes are collapsed on first level|
|4|{{{depth}}}|Hierachy depth|6 levels depth (H1 to H6 header styles)|
|5|{{{sortField}}}|Alternate sort field. By example : "index".|Sorts tags and tiddlers alphabetically (on their title)|
|6|{{{labelField}}}|Alternate label field. By example : "label".|Displays tiddler's title|
|7|{{{expandedTag}}}|Tag to ensure tiddler is expanded by default - added 2.0.0|expanded|
|8|{{{collapsedTag}}}|Tag to ensure tiddler is collapsed by default - added 2.0.0|collapsed|

!Useful addons
*[[FieldsEditorPlugin]] : //create//, //edit//, //view// and //delete// commands in toolbar <<toolbar fields>>.
*[[TaggerPlugin]] : Provides a drop down listing current tiddler tags, and allowing toggling of tags.
!Advanced Users
You can change the global defaults for TagsTreePlugin, like default {{{level}}} value or level styles, by editing or overriding the first config.macros.tagsTree attributes below.
!Code
***/
//{{{
config.macros.tagsTree = {
	expand : "+",
	collapse : "–",
	depth : 6,
	level : 1,
	sortField : "",	
	labelField : "",
	styles : ["h1","h2","h3","h4","h5","h6"],
	trees : {},
        expandedTag : "expanded",
        collapsedTag : "collapsed",
        excludedTag : "exclude"
}

config.macros.tagsTree.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	var root = params[0] ? params[0] : (tiddler ? tiddler.title : null);
	if(params[1]) config.macros.tagsTree.excludedTag = params[1];
	var level = params[2] ? params[2] : config.macros.tagsTree.level;
	var depth = params[3] ? params[3] : config.macros.tagsTree.depth;
	var sortField = params[4] ? params[4] : config.macros.tagsTree.sortField;
	var labelField = params[5] ? params[5] : config.macros.tagsTree.labelField;
	if(params[6]) config.macros.tagsTree.expandedTag = params[6];
	if(params[7]) config.macros.tagsTree.collapsedTag = params[7];
	var collapsedField = params[5] ? params[5] : config.macros.tagsTree.labelField;
	var showButtons = (level>0);
	var id = config.macros.tagsTree.getId(place);
	if (config.macros.tagsTree.trees[id]==undefined) config.macros.tagsTree.trees[id]={};
	config.macros.tagsTree.createSubTree(place,id,root,[],level>0 ? level : 1,depth, sortField, labelField,showButtons);
}

config.macros.tagsTree.createSubTree = function(place, id, root, ancestors, level, depth, sortField, labelField,showButtons){
	var childNodes = root ? this.getChildNodes(root, ancestors) : new Array();
	var isOpen = (level>0) || (!showButtons);
	if (root && this.trees[id][root]!=undefined) isOpen = this.trees[id][root]; 
	if (root && ancestors.length) {
		var t = store.getTiddler(root);
		if (childNodes.length && depth>0) {
			var wrapper = createTiddlyElement(place , this.styles[Math.min(Math.max(ancestors.length,1),6)-1],null,"branch");
			if (showButtons) {
                                if (t.tags.contains(config.macros.tagsTree.collapsedTag)) isOpen = false;
                                if (t.tags.contains(config.macros.tagsTree.expandedTag)) isOpen = true;
				b = createTiddlyButton(wrapper, isOpen ? config.macros.tagsTree.collapse : config.macros.tagsTree.expand, null, config.macros.tagsTree.onClick);
				b.setAttribute("treeId",id);
				b.setAttribute("tiddler",root);					
			}
			createTiddlyText(createTiddlyLink(wrapper, root),t&&labelField ? t.fields[labelField] ? t.fields[labelField] : root : root);
		}
		else 
			createTiddlyText(createTiddlyLink(place, root,false,"leaf"),t&&labelField ? t.fields[labelField] ? t.fields[labelField] : root : root);
	}
	if (childNodes.length && depth) {
		var d = createTiddlyElement(place,"div",null,"subtree");
		d.style.display= isOpen ? "block" : "none";
		if (sortField)
			childNodes.sort(function(a, b){
				var fa=a.fields[sortField];
				var fb=b.fields[sortField];
				return (fa==undefined && fb==undefined) ? a.title < b.title ? -1 : a.title > b.title ? 1 : 0 : (fa==undefined && fb!=undefined) ? 1 :(fa!=undefined && fb==undefined) ? -1 : fa < fb ? -1 : fa > fb ? 1 : 0;
			})
		for (var cpt=0; cpt<childNodes.length; cpt++)
			this.createSubTree(d, id, childNodes[cpt].title, ancestors.concat(root), level-1, depth-1, sortField, labelField, showButtons);	
	}	
}

config.macros.tagsTree.onClick = function(e){
	var id = this.getAttribute("treeId");
	var tiddler = this.getAttribute("tiddler");	
	var n = this.parentNode.nextSibling;
	var isOpen = n.style.display != "none";
	if(config.options.chkAnimate && anim && typeof Slider == "function")
		anim.startAnimating(new Slider(n,!isOpen,null,"none"));
	else
		n.style.display = isOpen ? "none" : "block";
	this.firstChild.nodeValue = isOpen ? config.macros.tagsTree.expand : config.macros.tagsTree.collapse;
	config.macros.tagsTree.trees[id][tiddler]=!isOpen;
	return false;
}

config.macros.tagsTree.getChildNodes = function(root, ancestors){
	var childs = store.getTaggedTiddlers(root);
	var result = new Array();
	for (var cpt=0; cpt<childs.length; cpt++)
		if (childs[cpt].title!=root && ancestors.indexOf(childs[cpt].title)==-1 &&
                     !childs[cpt].tags.contains(config.macros.tagsTree.excludedTag) ) result.push(childs[cpt]);
	return result;
}

config.macros.tagsTree.getId = function(element){
	while (!element.id && element.parentNode) element=element.parentNode;
	return element.id ? element.id : "<html>";
}

config.shadowTiddlers.TagsTreeStyleSheet = "/*{{{*/\n";
config.shadowTiddlers.TagsTreeStyleSheet +=".leaf, .subtree {display:block; margin-left : 0.5em}\n";
config.shadowTiddlers.TagsTreeStyleSheet +=".subtree {margin-bottom:0.5em}\n";
config.shadowTiddlers.TagsTreeStyleSheet +="#mainMenu {text-align:left}\n";
config.shadowTiddlers.TagsTreeStyleSheet +=".branch .button {border:1px solid #DDD; color:#AAA;font-size:9px;padding:0 2px;margin-right:0.3em;vertical-align:middle;text-align:center;}\n";
config.shadowTiddlers.TagsTreeStyleSheet +="/*}}}*/";

store.addNotification("TagsTreeStyleSheet", refreshStyles); 

config.shadowTiddlers.MainMenu="<<tagsTree>>"

config.shadowTiddlers.PageTemplate = config.shadowTiddlers.PageTemplate.replace(/id='mainMenu' refresh='content' /,"id='mainMenu' refresh='content' force='true' ")

//}}}
〔聽 RGO Radio〕輕快的英式搖滾(Brit pop)節奏~~(這個……專業素養不夠,難以確切描述)~~,尤其開心的爵士鼓點,搭配(應該是)很陽光的歌詞,真是下午趕工的良伴。

韓國人真不錯,學英美的流行音樂學這麼道地(不管 R&B 還是慢搖滾、輕搖滾),然後再配上很正面或甚至是表達對主的愛的歌詞,旋律和編曲又好聽,真是屬靈屬肉兼備。(喔對了我們的話語有教導說,歌曲像是人的肉體,歌詞就像是靈魂)
{{p{
願我們:
*體會該體會的
*感謝該感謝的
*悔改該悔改的
}}}
剛在 FB 上看到分享:
<html><object width="400" height="224" ><param name="allowfullscreen" value="true" /><param name="movie" value="http://www.facebook.com/v/224850377526130" /><embed src="http://www.facebook.com/v/224850377526130" type="application/x-shockwave-flash" allowfullscreen="true" width="400" height="224"></embed></object></html>

太強了……垂直轉的扯鈴、三顆扯鈴……"""@@"""

*一個兒童,能夠克服舞台的緊張、維持四分鐘微笑,同時做好出神入化的零失誤表演,這需要多強的精神訓練和人格訓練。
*好奇他的老師是什麼樣的人
*好奇他本人或父母是什麼樣的人
*這樣的表演過程應該可以說進入一種「神馳」的境界,不知他是否也感受到一種「與 神同在」的奇妙體驗呢?
剛看到大學同學靖雯日前慶祝執業七週年,我呢,下週一則是受洗通過成為基督徒七週年。今年過屬靈生日,應該要留下更多有意義的東西,方不枉主的栽培。
以下是教會學弟新安的分享:
<<<
說到午餐,雖然師大有師大夜市,可是裡面的平價餐點真的不多,連我自己都時常煩惱該吃什麼,因為能吃的真的不多,不是太貴,就是太油不然就是太少,或者太遠,真的很麻煩。

勉強列出能吃的東西
1. 永珍飯館(位於宿舍後門的巷子裡)
特色: 便宜好吃,每日特餐只要60元,加飯不加價,湯也很好喝,老闆娘也很親切,算是便當類的首選,缺點是距離稍遠和有一點點油。

2. 阿英鍋貼(位在師大夜市橘果子旁)
特色: 皮韌料多,鍋貼用料很實在,口味有高麗菜和韭菜兩種,每一個鍋貼都是5元,個人認為口味在四海遊龍和八方雲集之上,但是中午去常常要等很久。(10幾分鐘)

3. 小雞雞肉飯(位於牛魔王攤位的旁邊)
特色: 現在沒有雞肉飯了,但是排骨飯和雞腿飯仍是相當受歡迎的便當,價錢約70元,不論主菜或配菜都很好吃,但是很油(超過永珍)。

4. 學校便當(位於綜合大樓門口)
特色: 為限量製作的便當,口味不差(接近永珍),也不油膩,有多種口味(排骨、日式豬排、雞腿......),但數量有限,且距離也稍遠。

5. 阿強飯糰(位於屈臣氏門口)
特色: 飯糰分量算是中等,當早餐吃還不錯,當午餐吃可能要一點五份才會飽,口味也很多種,距離師大側門非常近,但也因為好吃、位置絕佳,常常都大排長龍(有看過吃飯糰可以排到10個人的嗎?)

6. 粥神致神仙(位於一之軒巷子裡面)
特色: 還不錯的粥品店,口味豐富,有港式和台式,價格也相當平民,大約在50元到70元之間,距離師大側門也很近。缺點是會小小排隊一下(常常去前面都有3、4個人);另外對男生而言,一碗港式的粥的份量通常都無法滿足空虛的肚子,但台式的分量很夠,例如海鮮粥。

7. 紅孩兒(同樣位於一之軒巷子內)
特色: 為師大夜市裡相當有特色的麵店,看店名就大略可以猜到這家店賣的東西和紅色很有關係,這家麵店主打麻辣肉醬麵(但也可選不辣)和麻辣鴨血,是喜歡吃辣的人絕對不可以錯過的一家店,但不擅吃辣的人也不用擔心,因為它的每一項產品都是可以自由選擇辣度的。另外,價錢也還算合理。

8. 韓式拌飯(位在師大夜市裡,在阿二冰茶的斜對面)
特色: 韓式拌飯外帶只要60元,口味很棒,有豬肉和雞肉兩種可以選擇,缺點是對男生而言,可能要吃1.5碗才會吃飽。

9. 地餐(位於男一宿的地下一樓)
特色: 有可以無限添飯的自助餐,但菜色不太能滿足師大的學生,導致許多新生升大二之後就沒有再碰過地餐,價格算是平民(但比不上台大、國北師的自助餐)。除了自助餐,地餐也提供了平價的義大利麵(聽說還不錯)、鍋燒烏龍麵(不難吃,但期待會落空XD)、滷味(忘了還有沒有)、麵店以及學校這學期開始提供的餐盒。
<<<
「[[讚美孩子努力 勝過讚他聰明|http://tw.news.yahoo.com/article/url/d/a/110426/131/2qfxg.html]]」(http://tw.news.yahoo.com/article/url/d/a/110426/131/2qfxg.html)臺灣立報編譯陳玫伶整理報導

節錄:
<<<
這些潛在意思揭示了讚許孩子的新方法,大人們應該表揚他的努力,而非天賦;應該教導孩子面對學習挑戰,而非威脅;而且,大人應該要告訴孩子:能力是會轉變的。
<<<
阿們!
雖然我很欣賞巴塞隆納,但是皇馬還剩下一位我一直都很欣賞的球員,就是守門員 Iker Casillas(卡西亞斯),因此,看到每年一度或兩度皇馬在西班牙德比中被巴薩大屠殺,看到 Casillas 總是很無奈地獨力對抗巴薩的行雲流水進攻、看到一球一球破門,而且又想到那些巴薩的球迷會怎樣嘲笑他,還是非常不悅 <<:(>>
----
這樣再想想,皇馬的沒落與不振,也許是我潛意識中漸漸不想再看足球職業聯賽的一個原因。(當然,不想熬夜以及無心力下載影片仍是主因)
R0lGODlhEwATAPf/AAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDcwKbK8Co/qio//ypfACpfVSpfqipf/yp/ACp/VSp/qip//yqfACqfVSqfqiqf/yq/ACq/VSq/qiq//yrfACrfVSrfqirf/yr/ACr/VSr/qir//1UAAFUAVVUAqlUA/1UfAFUfVVUfqlUf/1U/AFU/VVU/qlU//1VfAFVfVVVfqlVf/1V/AFV/VVV/qlV//1WfAFWfVVWfqlWf/1W/AFW/VVW/qlW//1XfAFXfVVXfqlXf/1X/AFX/VVX/qlX//38AAH8AVX8Aqn8A/38fAH8fVX8fqn8f/38/AH8/VX8/qn8//39fAH9fVX9fqn9f/39/AH9/VX9/qn9//3+fAH+fVX+fqn+f/3+/AH+/VX+/qn+//3/fAH/fVX/fqn/f/3//AH//VX//qn///6oAAKoAVaoAqqoA/6ofAKofVaofqqof/6o/AKo/Vao/qqo//6pfAKpfVapfqqpf/6p/AKp/Vap/qqp//6qfAKqfVaqfqqqf/6q/AKq/Vaq/qqq//6rfAKrfVarfqqrf/6r/AKr/Var/qqr//9QAANQAVdQAqtQA/9QfANQfVdQfqtQf/9Q/ANQ/VdQ/qtQ//9RfANRfVdRfqtRf/9R/ANR/VdR/qtR//9SfANSfVdSfqtSf/9S/ANS/VdS/qtS//9TfANTfVdTfqtTf/9T/ANT/VdT/qtT///8AVf8Aqv8fAP8fVf8fqv8f//8/AP8/Vf8/qv8///9fAP9fVf9fqv9f//9/AP9/Vf9/qv9///+fAP+fVf+fqv+f//+/AP+/Vf+/qv+////fAP/fVf/fqv/f////Vf//qszM///M/zP//2b//5n//8z//wB/AAB/VQB/qgB//wCfAACfVQCfqgCf/wC/AAC/VQC/qgC//wDfAADfVQDfqgDf/wD/VQD/qioAACoAVSoAqioA/yofACofVSofqiof/yo/ACo/Vf/78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH+HUJ1aWx0IHdpdGggR0lGIE1vdmllIEdlYXIgMy4wACH5BAEKAP8ALAAAAAATABMAAAj8AP8JHPgP2rJUy6D9Q8AExQGCA1OhQNEk1bNny1D0EZiFoEEUpaQFQiFN2sVUqSBCe1ayZcmLrQKVUkUwlUlp0Pr0UXVz47+UAi++9BmI5bNAAvsAZXkT6b8+PQX9kwltJc6SfaQWNcmHiaA+qFRdNCqtD4qvJp9lQcGEz7JANpk+69p2bKo+A0opC7RMKMtUfLJYTItx2VurRseORbXM2TJlpGhaHEsYcB9Sj1OVcvWvr+KLqPokeNUHI6pSA1F9ftbnlcBAqJT14SwQmkVnzxzzcf2v1LKZEFVhNqwsC4KngGlCFJiKVCplpfBk4VPq+PKB0FQF2q6KN8GAADs=
/***
|Name|BlockElementsFormatterPlugin|
|Source|TBD|
|Documentation|TBD|
|Version|0.2|
|Author|G.J.Robert Ciang (江瑋平)|
|License|TBD|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Add markups for paragraphs, block elements (inline or plain blocks)|

!Syntax
TBD
!Revision History
*0.2.1 (2013/2/2): adding {{{text-indent: 0}}} to blocks
*0.2 (2012/12/3):
**adding {{{<two spaces>...<two linebreaks>}}} for more readable and easily inputable paragraph markup
**removing the style to hide the first linebreak in <p> elements
*0.1 (2012/11/18): first working edition, with {{{== ... ==}}} (paragraph), {{{={ ... }=}}} (plain block) and {{{-{ ... }-}}} (inline block) syntaxes
!Code
***/
/*{{{*/
config.formatters.push(
{
	name: "paragraph",
	match: "==",
	termRegExp: /(==(\n|$))/mg,
	element: "p",
	handler: config.formatterHelpers.createElementAndWikify
});

config.formatters.push(
{
	name: "paragraphProper",
	match: "^ {2}",
	termRegExp: /(\n{2})/mg,
	element: "p",
	handler: config.formatterHelpers.createElementAndWikify
});

config.formatters.push(
{
	name: "plainBlock",
	match: "=\{",
	termRegExp: /(\}=)/mg,
	element: "pb",
	handler: config.formatterHelpers.createElementAndWikify
});

config.formatters.push(
{
	name: "inlineBlock",
	match: "-\{",
	termRegExp: /(\}-)/mg,
	element: "ib",
	handler: config.formatterHelpers.createElementAndWikify
});

setStylesheet(
"pb {display: block; text-indent: 0}\n"+
"pb > br:first-child {display: none;}\n"+
"ib {display: inline-block; vertical-align: middle; text-indent: 0}\n"+
"ib > br:first-child {display: none;}\n"+
"p {text-indent: 2em; margin: 0.5em 0.5em 0px 0px;}\n"+
/*"p > br:first-child { display: none; }\n"+*/
"p * { text-indent: 0; }\n"+
"p p { text-indent: 2em; }\n"+
"\n","blockElementsStyles");
/*}}}*/
/***
|''Name''|PagrPlugin|
|''Description''|Simple prev / next navigation based on a fixed ToC|
|''Author''|Tobias Beer|
|''Version''|0.1.0|
|''Status''|beta|
|''Readable source''|http://tbSource.tiddlyspace.com/#PagrPlugin|
|''License''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion''|2.5.3|
|''Type''|plugin|
***/
// /%
config.macros.pagr={fmtNext:"%0 »",fmtHome:"\u25B2",fmtPrev:"« %0",handler:function(j,c,g,k,e,q){var l,b,a,o,f,m=this.fmtHome,d=e,r=store.getTiddlerText(d);f=story.findContainingTiddler(j);f=f?f.getAttribute("tiddler"):"";if(!f||!r){return}l=d.indexOf("##");d=d.substr(0,l>0?l:d.length);r=r.replace(/\*/mg,"").replace(/\#/mg,"").replace(/\!/mg,"").replace(/\+/mg,"").replace(/\=/mg,"");r=r.readBracketedList();l=r.indexOf(f);a=l<0||l-1<0?-1:l-1;b=l<0||l+1>=r.length?0:l+1;o=createTiddlyElement(j,"div",null,"pagr");if(a>=0){wikify("[["+this.fmtPrev.format([r[a]])+"|"+r[a]+"]]",o)}if(m&&(b||a>=0)){wikify("[["+m+"|"+d+"]]",o)}if(b){wikify("[["+this.fmtNext.format([r[b]])+"|"+r[b]+"]]",o)}}};config.shadowTiddlers.StyleSheetPagr="/*{{{*/ \n    .pagr {margin-left:72px;margin-bottom:0.5em;} \n    .pagr a{padding:5px;} \n    /*}}}*/";store.addNotification("StyleSheetPagr",refreshStyles);
// %/

/***
|''Name''|PluginMathJax|
|''Description''|Displays TeX math using MathJax|
|''Author''|[[Canada East|http://tiddlywiki.canada-east.ca/]]|
|''Version''|1.3|
|''Date''|2010-10-07|
|''CodeRepository''|[[PluginMathJax|http://tiddlywiki.canada-east.ca/#PluginMathJax]]|
|''CoreVersion''|[[2.6.1|http://www.tiddlywiki.com]]|
|''Requires''|[[MathJax v1.01|http://www.mathjax.org/]]|
|''Feedback''|[[Contact|https://spreadsheets.google.com/viewform?formkey=dGg2RkpxZW5zWTh6QjZxOXgzZUlfakE6MQ]]|
|''Tweaks''|~MathJax location and default HTML-CSS scale changed by Gareth Davies.  I've also added a hook to a ~MathJax extension for managing local definitions written by Richard Lupton and I've set the newcommand extension to load on start-up.|
!Description
This plugin uses [[MathJax|http://www.mathjax.org/]] to typeset ([[AMS|http://www.ams.org/publications/authors/tex/amslatex]]) [[LaTeX|http://www.latex-project.org/]]  math. It can also be configured to use additional MathJax functionality.
>"MathJax is an open source JavaScript display engine for mathematics that works in all modern browsers."
!Notes
Right click any math display for a MathJax menu. The user can select the renderer and zoom settings. It performs best in [[Webkit|http://en.wikipedia.org/wiki/List_of_web_browsers#WebKit-based_browsers]] based browsers. Larger math displays such as the additional examples tiddler below can put quite a load on IE. PluginMathJax is based on: [[Plugin: jsMath|http://bob.mcelrath.org/tiddlyjsmath.html]]
!Installation
#''Backup'' your TiddlyWiki!
#It is required that the MathJax directory is installed in '''js/MathJax/''' in the same location as the TiddlyWiki html file.<br>(Or edit the script source where commented in the plugin code below after installation to match the location of your MathJax install.)
#Install this plugin (and examples tiddler linked below if desired).
!Usage
|!Source|!Output|h
|{{{The variable $x$ is real.}}}|The variable $x$ is real.|
|{{{The variable \(y\) is complex.}}}|The variable \(y\) is complex.|
|{{{This \[\int_a^b x = \frac{1}{2}(b^2-a^2)\] is an easy integral.}}}|This \[\int_a^b x = \frac{1}{2}(b^2-a^2)\] is an easy integral.|
|{{{This $$\int_a^b \sin x = -(\cos b - \cos a)$$ is another easy integral.}}}|This $$\int_a^b \sin x = -(\cos b - \cos a)$$ is another easy integral.|
|{{{Block formatted equations may also use the 'equation' environment \begin{equation}  \int \tan x = -\ln \cos x \end{equation} }}}|Block formatted equations may also use the 'equation' environment \begin{equation}  \int \tan x = -\ln \cos x \end{equation}|
|{{{Equation arrays are also supported \begin{eqnarray} a &=& b \\ c &=& d \end{eqnarray} }}}|Equation arrays are also supported \begin{eqnarray} a &=& b \\ c &=& d \end{eqnarray} |
|{{{I spent \$7.38 on lunch.}}}|I spent \$7.38 on lunch.|
|{{{I had to insert a backslash (\\) into my document}}}|I had to insert a backslash (\\) into my document|
| <br>[[Complete list of supported LaTeX commands|http://www.mathjax.org/resources/docs/?tex.html#supported-latex-commands]] |>|
!Examples
[[Additional MathJax Examples|MathJax Examples]]
!Configuration
MathJax can be manually configured if desired by editing the code below (advanced). See the [[MathJax documentation|http://www.mathjax.org/resources/docs/?configuration.html#configuration-options-by-component]] for details.
!Revision History
*v1.3, 2010-10-07, returned to original formatters design, kept modified wikify and recommended way of loading MathJax dynamically, removed the tex2jax extension and corrected several browser compatibility issues (InnerHTML for Opera and IE9).
*v1.2, 2010-10-05, removed some redundant MathJax config entries, moved modified wikify and MathJax.Hub.Queue call.
*v1.1, 2010-10-03, autoLinkWikiWords disabled in absence of DisableWikiLinksPlugin, modifed wikify.
*v1.0, 2010-09-26, Initial Release
!Code
***/
//{{{

if(!version.extensions.PluginMathJax) { 
    version.extensions.PluginMathJax = { installed: true };

    config.extensions.PluginMathJax = {

        install: function() {

            var script = document.createElement("script");
            script.type = "text/javascript";

            // *** Use the location of your MathJax! *** :
            /*
             * Gareth: The following line assumes you have
             * MathJax installed on your server in a sensible
             * location.  I've commented this out.
             */
            //script.src = "js/MathJax/MathJax.js";

            /*
             * Because this tiddlywiki is currently hosted on
             * tiddlyspace.com I've had to point to the 'MathJax
             * Content Delivery Network' instead.
             */
            script.src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
            // EndGareth

            /*
             * Gareth: Richard's local definition ~MathJax
             * extension (implementation of TeXs \let command)
             * has been added to the list of extensions along
             * with the newcommand extension upon which it
             * depends.  Also, the scale option for HTML-CSS was
             * changed from 115 to 100.
             */
            var mjconfig = 'MathJax.Hub.Config({' +
            'jax: ["input/TeX","output/HTML-CSS"],' +
            'extensions: ["TeX/AMSmath.js", "TeX/AMSsymbols.js", "TeX/newcommand.js", "http://oxkunengroup.tiddlyspace.com/localTeX.js"],' +
            '"HTML-CSS": {' +
                'scale: 100' +
                '}' +
            '});' +

            'MathJax.Hub.Startup.onload();';

            var ie9RegExp = /^9\./;
            var UseInnerHTML = (config.browser.isOpera || config.browser.isIE && ie9RegExp.test(config.browser.ieVersion[1]));

            if (UseInnerHTML) {script.innerHTML = mjconfig;}
                else {script.text = mjconfig;}

            script.text = mjconfig;

            document.getElementsByTagName("head")[0].appendChild(script);

            // Define wikifers for latex
            config.formatterHelpers.mathFormatHelper = function(w) {
                var e = document.createElement(this.element);
                e.type = this.type;
                var endRegExp = new RegExp(this.terminator, "mg");
                endRegExp.lastIndex = w.matchStart+w.matchLength;
                var matched = endRegExp.exec(w.source);
                if(matched) {
                    var txt = w.source.substr(w.matchStart+w.matchLength,
                        matched.index-w.matchStart-w.matchLength);
                    if(this.keepdelim) {
                      txt = w.source.substr(w.matchStart, matched.index+matched[0].length-w.matchStart);
                    }
                    if (UseInnerHTML) {
                        e.innerHTML = txt;
                    } else {
                        e.text = txt;
                    }
                    w.output.appendChild(e);
                    w.nextMatch = endRegExp.lastIndex;
                }
            }

            config.formatters.push({
              name: "displayMath1",
              match: "\\\$\\\$",
              terminator: "\\\$\\\$\\n?",
              termRegExp: "\\\$\\\$\\n?",
              element: "script",
              type: "math/tex; mode=display",
              handler: config.formatterHelpers.mathFormatHelper
            });

            config.formatters.push({
              name: "inlineMath1",
              match: "\\\$", 
              terminator: "\\\$",
              termRegExp: "\\\$",
              element: "script",
              type: "math/tex",
              handler: config.formatterHelpers.mathFormatHelper
            });

            var backslashformatters = new Array(0);

            backslashformatters.push({
              name: "inlineMath2",
              match: "\\\\\\\(",
              terminator: "\\\\\\\)",
              termRegExp: "\\\\\\\)",
              element: "script",
              type: "math/tex",
              handler: config.formatterHelpers.mathFormatHelper
            });

            backslashformatters.push({
              name: "displayMath2",
              match: "\\\\\\\[",
              terminator: "\\\\\\\]\\n?",
              termRegExp: "\\\\\\\]\\n?",
              element: "script",
              type: "math/tex; mode=display",
              handler: config.formatterHelpers.mathFormatHelper
            });

            backslashformatters.push({
              name: "displayMath3",
              match: "\\\\begin\\{equation\\}",
              terminator: "\\\\end\\{equation\\}\\n?",
              termRegExp: "\\\\end\\{equation\\}\\n?",
              element: "script",
              type: "math/tex; mode=display",
              handler: config.formatterHelpers.mathFormatHelper
            });

            // These can be nested.  e.g. \begin{equation} \begin{array}{ccc} \begin{array}{ccc} ...
            backslashformatters.push({
              name: "displayMath4",
              match: "\\\\begin\\{eqnarray\\}",
              terminator: "\\\\end\\{eqnarray\\}\\n?",
              termRegExp: "\\\\end\\{eqnarray\\}\\n?",
              element: "script",
              type: "math/tex; mode=display",
              keepdelim: true,
              handler: config.formatterHelpers.mathFormatHelper
            });

            // The escape must come between backslash formatters and regular ones.
            // So any latex-like \commands must be added to the beginning of
            // backslashformatters here.
            backslashformatters.push({
                name: "escape",
                match: "\\\\.",
                handler: function(w) {
                    w.output.appendChild(document.createTextNode(w.source.substr(w.matchStart+1,1)));
                    w.nextMatch = w.matchStart+2;
                }
            });

          config.formatters=backslashformatters.concat(config.formatters);

          old_wikify = wikify;
          wikify = function(source,output,highlightRegExp,tiddler)
          {
              old_wikify.apply(this,arguments);
              if (window.MathJax) {MathJax.Hub.Queue(["Typeset",MathJax.Hub,output])}
          };

        }
    };

  config.extensions.PluginMathJax.install();

}

//}}}
/***
|Name|[[EditSectionPlugin]]|
|Source|http://www.TiddlyTools.com/#EditSectionPlugin|
|Documentation|http://www.TiddlyTools.com/#EditSectionPlugin|
|Version|1.8.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|invoke popup 'section editor' for specified section of a tiddler|
!!!!!Usage
<<<
{{{
<<editSection TiddlerName##sectionname label tooltip>>
}}}
This macro adds a command link that invokes a popup editor for a specific section, where:
*''~TiddlerName##sectionname'' specifies the tiddler and section you want to edit.
**If you omit the "##sectionname" portion (i.e., only enter "~TiddlerName"), the entire content of the indicated tiddler is edited.
**If you omit the "~TiddlerName" portion (i.e., only enter "##sectionname"), the current containing tiddler (if any) is assumed.
**Changing the section name in the popup editor //renames// that section within the tiddler.
**Changing the tiddler title in the popup editor //copies// that section to another tiddler.
**If the indicated tiddler and/or section does not yet exist, it will be created when you press 'save'.
*''label'' and ''tooltip'' (both //optional//) specify the link label and mouseover help text for the 'edit section' command link.
You can also add the following macro, //at the end of a tiddler//, to automatically add an 'edit section' command link for each section shown in the tiddler.
{{{
<<editSections label tooltip>>
}}}
*''label'' and ''tooltip'' (both //optional//) specify the link label and mouseover help text for the 'edit section' command link.
>//Note: when a document is viewed in 'readOnly' mode, both of these macros are bypassed and no output is produced.//
<<<
!!!!!Sample
<<<
This is an example section for you to try
<<<
!!!!!Example
<<<
{{{
<<editSection ##Sample>>
}}}
<<editSection ##Sample>>
<<<
!!!!!Configuration
<<<
To customize and/or translate the HTML form layout used to render the section editor, edit the [[EditSectionTemplate]] shadow tiddler.
<<<
!!!!!Revisions
<<<
2012.01.29 1.8.1 invoke autoSaveChanges() when tiddlers are modified.
2011.12.22 1.8.0 added {{{<<editSections>>}}} macro for automatic adding of 'edit section...' links to headings
2011.12.20 1.7.0 added drag handling for editor panels
2011.10.28 1.6.8 fixed getMX()/getMY() for Chrome scroll offset handling
2011.09.02 1.6.7 more refactoring and cleanup of default form init/save handlers
2011.08.02 1.6.6 major code refactor to allow customization of form handling for type-specific [[PasteUpHelperPlugin]] extensions
2011.07.30 1.6.5 in removePanel(), call Popup.remove() so 'child' popups are closed when panel is closed
2011.07.24 1.6.4 refactored save() to provide updateTiddler() entry point for use with PasteUpHelperPlugin 'quickmenu' commands. Added getMX() and getMY() for cross-browser mouse coordinates
2011.06.05 1.6.3 added TiddlySpace cloneFields() to delete and save handlers so editing sections automatically copies/owns an included tiddler
2011.05.05 1.6.2 renamed delete() to deleteSection() to avoid javascript keyword errors
2011.05.04 1.6.1 in delete(), use removeTiddler() for proper notification handling
2011.05.01 1.6.0 added delete() functionality
2011.01.09 1.5.1 in handler(), don't render command link if document is readOnly
2010.12.24 1.5.0 replace use of core Popups with custom panel handling (bypass core interactions and errors)
2010.11.07 1.4.0 in popup(), render HTML form from EditSectionTemplate, and then applyHtmlMacros() to render wiki-syntax macro-generated form elements (e.g., {{{<<option>>, <<select>>}}}, etc.).  Also, refactored form init/save handling to add customization 'hooks'
2010.10.25 1.3.0 added support for editing complete tiddlers using "~TiddlerName" syntax (omit "##sectionname")
2010.07.15 1.2.0 added confirmation when section rename will overwrite other section
2010.07.13 1.1.1 added 'dirty flag' confirmation to popup handling to avoid discarding unsaved changes
2010.07.11 1.1.0 fixed handling for creating new sections in existing tiddlers. Copied StickyPopupPlugin to eliminate dependency. Added Popup.showHere()
2010.05.24 1.0.2 in save(), escape regexp chars in section titles (e.g. "!SectionNameWith?InIt")
2009.09.07 1.0.1 documentation/code cleanup
2009.09.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.EditSectionPlugin= {major: 1, minor: 8, revision: 1, date: new Date(2012,1,29)};

config.macros.editSection = {
	label: 'edit section...',
	tip: 'edit %0',
	sectionfmt: '{{hidden{\n!%0\n%1\n!end\n}}}',
	sectionerr: 'Invalid tiddler/section name: %0',
	newtiddlertxt: '',
	discardmsg: 'Discard unsaved changes for %0?',
	deletemsg: 'Are you sure you want to delete %0?',
	overwritemsg: '%0##%2 already exists. Choose OK to overwrite it',
	template: 'EditSectionTemplate', // DEFAULT FORM TEMPLATE
//}}}
// // PLUGIN INITIALIZATION
//{{{
	init: function() {
		// SHADOW PAYLOAD FOR DEFAULT EditSectionTemplate FORM DEFINITION
		config.shadowTiddlers[this.template]
			=store.getTiddlerText('EditSectionPlugin##HTML','');

		// CLOSE PANELS IF CLICK on other than POPUP OR EDITOR PANEL
		addEvent(document,'click',function(ev) {
			var p=resolveTarget(ev||window.event);
			while (p) {
				if (hasClass(p,'editSectionPanel')) break;
				if (hasClass(p,'popup')) break;
				p=p.parentNode;
			}
			if (!p) config.macros.editSection.removeAllPanels();
			return true;
		});

		// HIJACK QuickEditPlugin's getField() to support use with editSectionPanel
		if (config.quickEdit) {
			config.quickEdit.getTiddlerField=config.quickEdit.getField;
			config.quickEdit.getField=function(where) {
				var e=where; while(e) {	if (hasClass(e,'editSectionPanel')) break; e=e.parentNode; }
				return e?e.getElementsByTagName('textarea')[0]:this.getTiddlerField(where);
			}

		}
	},
//}}}
// // GENERAL UTILITIES
//{{{
	ok: function(ev) { var ev=ev||window.event;
		ev.cancelBubble=true;
		if(ev.stopPropagation)ev.stopPropagation();
		return false;
	},
	getMX: function(ev) { var ev=ev||window.event; // GET MOUSE X
		if (config.browser.isIE)	return ev.clientX+findScrollX();// IE
		if (config.userAgent.indexOf('chrome')!=-1) return ev.pageX;	// Chrome
		if (config.browser.isSafari) 	return ev.pageX+findScrollX(); 	// Webkit
		else				return ev.pageX;		// Firefox/other
	},
	getMY: function(ev) { var ev=ev||window.event; // GET MOUSE Y
		if (config.browser.isIE)	return ev.clientY+findScrollY();// IE
		if (config.userAgent.indexOf('chrome')!=-1) return ev.pageY;	// Chrome
		if (config.browser.isSafari) 	return ev.pageY+findScrollY();	// Webkit
		else				return ev.pageY;		// Firefox/other
	},
	cloneFields: function(fields) { // for TIDDLYSPACE compatibility
		var f=merge({},fields); // copy object
		if (f["server.workspace"]!=config.defaultCustomFields["server.workspace"]) {
			f=merge(f,config.defaultCustomFields); // overwrite with defaults
			f["server.permissions"] = "read, write, create, delete";
			delete f["server.page.revision"];
			delete f["server.title"];
			delete f["server.etag"];
		}
		return f;
	},
//}}}
// // MACRO/CLICK HANDLER
//{{{
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if (readOnly) return;
		var here=story.findContainingTiddler(place);
		var tid=params[0];
		var label=params[1]||this.label.format([tid]);
		var tip=params[2]||this.tip.format([tid]);
		var btn=createTiddlyButton(place,label,tip,this.click);
		btn.setAttribute('tid',tid);
	},
	click: function(ev,type) { // note: optional 'type' is passed in from PasteUpPluginHelper
		var parts=this.getAttribute('tid').split('##');
		var title=parts[0]; var section=parts[1];
		var here=story.findContainingTiddler(this);
		if (!title&&here) title=here.getAttribute('tiddler');
		if (!title) return false;
		var tid=title; if (section&&section.length) tid=[title,section].join('##');
		return config.macros.editSection.createPanel(this,ev,tid,title,section,type);
	},
//}}}
// // EDITOR PANEL HANDLER
//{{{
	createPanel: function(here,ev,tid,title,section,type) {
		if (!this.removeAllPanels()) return this.ok(ev);
		var p=createTiddlyElement(document.body,"ol",
			"editSectionPanel","popup smallform editSectionPanel");
		p.root=here; 
		p.setAttribute('dirty',null);
		p.setAttribute('message',this.discardmsg.format([tid]));
		p.onmousedown=this.mousedown; p.style.cursor='move'; // for panel dragging
		p.innerHTML=store.getRecursiveTiddlerText(this.getForm(tid,type),'',10);
		applyHtmlMacros(p,store.getTiddler(title));
		var f=p.getElementsByTagName('form')[0];
		f.panel=p;
		f.title.value=title;
		f.section.value=section||'';
		f.init=this.getInitForm(tid,type);
		f.save=this.getSaveForm(tid,type);
		f.init(here,f,title,section,type);
		this.showPanel(p,here,ev);
		return this.ok(ev);
	},
	showPanel: function(p,here,ev) {
		var x=this.getMX(ev); var y=this.getMY(ev);
		var winw=findWindowWidth();
		var scrollw=winw-document.body.offsetWidth;
		if(p.offsetWidth>winw*0.75) p.style.width=winw*0.75 + "px";
		if(x+p.offsetWidth>winw-scrollw-1) x=winw-p.offsetWidth-scrollw-1;
		var s=p.style; s.left=x+'px'; s.top=y+'px'; s.display='block';
		if(config.options.chkAnimate && anim)	anim.startAnimating(new Scroller(p));
		else					window.scrollTo(0,ensureVisible(p));
	},
	removePanel: function(p) {
		Popup.remove(); // child popup (if any) is closed when panel is closed
		if (!p || p.getAttribute('dirty')!='true' || confirm(p.getAttribute('message')))
			{ if (p) removeNode(p); return true; }
		return false;
	},
	removeAllPanels: function() {
		var ok=true;
		jQuery('.editSectionPanel').each(function(index){
			var f=this.getElementsByTagName('form')[0];
			if (f.content) f.content.blur(); // force onchange (sets 'dirty' flag as needed)
			ok=config.macros.editSection.removePanel(this);
			return true;
		});
		return ok; // FALSE if panels remain
	},
//}}}
// // PANEL DRAG HANDLER
//{{{
	mousedown: function(ev) { ev=ev||window.event; // MOVE PANEL
		var cme=config.macros.editSection; // abbrev

		// ignore clickthrough from form fields, links, and images
		var target=resolveTarget(ev);
		if (['TEXTAREA','SELECT','INPUT','A','IMG'].contains(target.nodeName.toUpperCase()))
			return true;

		// GET TRACKING ELEMENT
		var track=this; // if 'capture' not supported, track in element only
		if (document.body.setCapture) var track=document.body; // IE
		if (window.captureEvents) var track=window; // moz
		if (!track.save_onmousemove) track.save_onmousemove=track.onmousemove;
		if (!track.save_onmouseup)   track.save_onmouseup  =track.onmouseup;
		if (!track.save_onkeyup)     track.save_onkeyup    =track.onkeyup;
		track.onmousemove=cme.dragmove;
		track.onmouseup	 =cme.dragup;
		track.onkeyup	 =cme.dragkeyup;
		// SAVE INITIAL POSITION
		track.elem=this;		// panel element
		track.start={
			X: cme.getMX(ev),  Y: cme.getMY(ev),	// mouse position
			T: this.offsetTop, L: this.offsetLeft,	// panel position
		}
		return cme.ok(ev);
	},
	dragmove: function(ev) { ev=ev||window.event; // MOVE PANEL
		var cme=config.macros.editSection; // abbrev
		// CAPTURE MOUSE EVENTS DURING DRAG
		if (document.body.setCapture) document.body.setCapture(); // IE
		if (window.captureEvents) window.captureEvents(Event.MouseMove|Event.MouseUp,true); // moz
		var e=this.elem; var s=e.style;
		var dX=cme.getMX(ev)-this.start.X;
		var dY=cme.getMY(ev)-this.start.Y;
		e.changed=e.changed||(Math.abs(dX)>1)||(Math.abs(dY)>1); // MINIMUM 2px MOVEMENT
		if (!e.changed) return cme.ok(ev);
		s.top =this.start.T+dY+'px';
		s.left=this.start.L+dX+'px';
		return cme.ok(ev);
	},
	dragkeyup: function(ev) { ev=ev||window.event; // STOP DRAG (ESC key)
		if (ev.keyCode==27) {
			var s=this.elem.style;
			s.top=this.start.T+'px';
			s.left=this.start.L+'px';
			return this.onmouseup(ev);
		}
	},
	dragup: function(ev) { ev=ev||window.event; // RELEASE MOUSE
		var cme=config.macros.editSection; // abbrev
		if (document.body.releaseCapture) document.body.releaseCapture(); // IE
		if (window.releaseEvents) window.releaseEvents(Event.MouseMove|Event.MouseUp); // moz
		this.onmousemove=this.save_onmousemove;
		this.onmouseup  =this.save_onmouseup;
		this.onkeyup    =this.save_onkeyup;
		return cme.ok(ev);
	},
//}}}
// // EDITOR FORM HANDLER
//{{{
	getForm:	function(tid,type) { return this.template; }, // see PasteUpHelperPlugin
	getInitForm:	function(tid,type) { return this.initForm; }, // see PasteUpHelperPlugin
	getSaveForm:	function(tid,type) { return this.saveForm; }, // see PasteUpHelperPlugin
	initForm: function(here,form,title,section,type) { // SET FORM CONTENT FROM TIDDLER SECTION
		var tid=title; if (section) tid=[title,section].join('##');
		form.newsection.value=tid; // target for output
		form.content.value=store.getTiddlerText(tid,'');
		if (version.extensions.TextAreaPlugin) new window.TextAreaResizer(form.content);
	},
	saveForm: function(here,ev) { // GET SECTION CONTENT FROM FORM (DEFAULT=TEXT CONTENT ONLY)
		var f=here.form;

		// GET TARGET TITLE/SECTION
		var tid=f.newsection.value;
		var parts=tid.split('##');
		var title=parts[0];
		var section=parts[1];
		var oldsection=f.section.value;
		var where=f.panel.root;
		if (!title) title=story.findContainingTiddler(where).getAttribute('tiddler');
		if (!title) {
			displayMessage(this.sectionerr.format([f.newsection.value]));
			f.newsection.focus(); f.newsection.select(); return false;
		}
		// CHECK FOR TIDDLER OVERWRITE
		if (!section && title!=f.title.value && store.tiddlerExists(title)) {
			if (!confirm(config.messages.overwriteWarning.format([title])))
				{ f.newsection.focus(); f.newsection.select(); return this.ok(ev); }

		}
		// WRITE TIDDLER CONTENT and CLOSE PANEL
		this.updateTiddler(f.content.value,title,section,oldsection);
		f.panel.setAttribute('dirty',null); this.removePanel(f.panel);
		return this.ok(ev);
	},
	changed: function(here,ev) {
		here.form.panel.setAttribute('dirty','true');
		return this.ok(ev);
	},
	cancel: function(here,ev) {
		this.removePanel(here.form.panel);
		return this.ok(ev);
	},
	remove: function(here,ev) {
		var f=here.form;
		var title=f.title.value;
		var section=f.section.value;
		var tid=title; if (section.length) tid=[title,section].join('##');
		var msg=this.deletemsg.format([tid]);
		if (!confirm(msg)) return this.ok(ev);
		this.deleteSection(title,section);
		f.panel.setAttribute('dirty',null);
		this.removePanel(f.panel);
		return this.ok(ev);
	},
//}}}
// // TIDDLER I/O
//{{{
	updateTiddler: function(txt,title,section,oldsection) {
		// GET (or CREATE) TIDDLER
		var t=store.getTiddler(title);
		var who =t&&config.options.chkForceMinorUpdate?t.modifier:config.options.txtUserName;
		var when=t&&config.options.chkForceMinorUpdate?t.modified:new Date();
		if (!t) {
			t=new Tiddler(); t.text=store.getTiddlerText(title,'');
			if (section&&!t.text.length) t.text=this.newtiddlertxt.format([title,section]);
		}
		// ADD/REVISE/RENAME SECTION CONTENT (if any)
		if (section) {
			// GET SECTION VALUES
			if (!oldsection) var oldsection=section;
			var oldval=store.getTiddlerText(title+'##'+oldsection); // previous section value
			var newval=txt; // revised section value
			var existingval=store.getTiddlerText(title+'##'+section); // existing section value
			// REVISE TIDDLER TEXT
			var txt=t.text; // default tiddler text = unchanged
			var pattern=new RegExp('(.*!{1,6})'+oldsection.escapeRegExp()+'\\n'
				+(oldval||'').escapeRegExp()+'((?:\\n!{1,6}|$).*)');
			var altpattern=this.sectionfmt.format([oldsection,oldval||'']);
			if (section!=oldsection && existingval) { // rename overwrites another section...
				if (!confirm(this.overwritemsg.format([title,section])))
					return this.ok(ev);
				txt=txt.replace(altpattern,''); // REMOVE old section (auto-generated)
				txt=txt.replace(pattern,'$2');  // REMOVE old section (generic format)
				// TARGET new section name and value
				pattern=new RegExp('(.*!{1,6})'+section.escapeRegExp()+'\\n'
					+existingval.escapeRegExp()+'((?:\\n!{1,6}|$).*)');
				oldval=existingval;
			}
			if (typeof oldval=="string") // section exists... update/rename it
				txt=txt.replace(pattern,'$1'+section+'\n'+newval+'$2');
			else // otherwise, append a new section to end of tiddler
				txt=txt+this.sectionfmt.format([section,newval]);
		}
		// SAVE TIDDLER
		var fields=this.cloneFields(t.fields);
		store.saveTiddler(title,title,txt,who,when,t.tags,fields);
		story.refreshTiddler(title,null,true);
		autoSaveChanges();
	},
	deleteSection: function(title,section) {
		// GET TIDDLER
		var t=store.getTiddler(title); if (!t) return;
		var who =t&&config.options.chkForceMinorUpdate?t.modifier:config.options.txtUserName;
		var when=t&&config.options.chkForceMinorUpdate?t.modified:new Date();
		if (!section) { // REMOVE TIDDLER
			store.removeTiddler(title);
		} else { // REMOVE SECTION FROM TIDDLER
			var val=store.getTiddlerText(title+'##'+section); // CURRENT SECTION VALUE
			if (typeof val=="string") { // section exists
				var txt=t.text; // default tiddler text = unchanged
				var pattern=new RegExp('(.*!{1,6})'+section.escapeRegExp()+'\\n'
					+(val||'').escapeRegExp()+'((?:\\n!{1,6}|$).*)');
				var altpattern=this.sectionfmt.format([section,val||'']);
				txt=txt.replace(altpattern,''); // REMOVE old section (auto-generated)
				txt=txt.replace(pattern,'$2');  // REMOVE old section (generic format)
				var fields=this.cloneFields(t.fields);
				store.saveTiddler(title,title,txt,who,when,t.tags,fields);
				story.refreshTiddler(title,null,true);
				autoSaveChanges();
			}
		}
	}
}
//}}}
// // EDIT SECTIONS MACRO
//{{{
config.macros.editSections = {
	label: 'edit...',
	tip: 'edit this section',
	command: '~~<<editSection [[##%0]] "%1" "%2">>~~',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if (readOnly) return;
		var elems=place.parentNode.getElementsByTagName("*");
		for (var i=0; i<elems.length; i++) { var e=elems[i]; // for each heading element
			if (!['H1','H2','H3','H4','H5'].contains(e.nodeName)) continue;
			var section=e.textContent;
			var label=(params[0]||this.label).format([section]);
			var tip  =(params[1]||this.tip  ).format([section]);
			wikify(this.command.format([section,label,tip]),e);
		}		
	}
}
//}}}
/***
//{{{
!HTML
<!--{{{-->
<!--
|Name|EditSectionTemplate|
|Source||
|Version||
|Author||
|License|http://www.TiddlyTools.com/#LegalStatements|
|Type|template|
|Requires|EditSectionPlugin|
|Description|popup editor form template used by EditSectionPlugin|
-->
<form action='javascript:;' style="white-space:nowrap">
<input type="hidden" name="title" value="">
<input type="hidden" name="section" value="">
<input type="text" name="newsection" value="" autocomplete="off" style="width:61%"
	onchange="return config.macros.editSection.changed(this,event);">
<input type=button value="save" style="width:12%"
	onclick="return config.macros.editSection.saveForm(this,event)">
<input type=button value="cancel" style="width:12%"
	onclick="return config.macros.editSection.cancel(this,event)">
<input type=button value="delete" style="width:12%"
	onclick="return config.macros.editSection.remove(this,event)">
<div macro="tiddler QuickEditToolbar"></div>
<textarea name="content" rows="15" cols="80" autocomplete="off"
	onchange="return config.macros.editSection.changed(this,event)"></textarea>
</form>
<!--}}}-->
!end
//}}}
***/
// //<<editSections "edit">> 

/***
|''Name''|RevisionsCommandPlugin|
|''Description''|provides access to tiddler revisions|
|''Author''|FND|
|''Contributors''|Martin Budden|
|''Version''|0.3.3|
|''Status''|@@beta@@|
|''Source''|http://svn.tiddlywiki.org/Trunk/association/plugins/RevisionsCommandPlugin.js|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/association/plugins/|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
|''CoreVersion''|2.6.0|
|''Keywords''|serverSide|
!Usage
Extend [[ToolbarCommands]] with {{{revisions}}}.
!Revision History
!!v0.1 (2009-07-23)
* initial release (renamed from experimental ServerCommandsPlugin)
!!v0.2 (2010-03-04)
* suppressed wikification in diff view
!!v0.3 (2010-04-07)
* restored wikification in diff view
* added link to side-by-side diff view
!To Do
* strip server.* fields from revision tiddlers
* resolve naming conflicts
* i18n, l10n
* code sanitizing
* documentation
!Code
***/
//{{{
(function($) {

jQuery.twStylesheet(".diff { white-space: pre, font-family: monospace }",
	{ id: "diff" });

var cmd = config.commands.revisions = {
	type: "popup",
	hideShadow: true,
	text: "revisions",
	tooltip: "display tiddler revisions",
	revTooltip: "", // TODO: populate dynamically?
	loadLabel: "loading...",
	loadTooltip: "loading revision list",
	selectLabel: "select",
	selectTooltip: "select revision for comparison",
	selectedLabel: "selected",
	compareLabel: "compare",
	linkLabel: "side-by-side view",
	revSuffix: " [rev. #%0]",
	diffSuffix: " [diff: #%0 #%1]",
	dateFormat: "YYYY-0MM-0DD 0hh:0mm",
	listError: "revisions could not be retrieved",

	handlePopup: function(popup, title) {
		title = this.stripSuffix("rev", title);
		title = this.stripSuffix("diff", title);
		var tiddler = store.getTiddler(title);
		var type = _getField("server.type", tiddler);
		var adaptor = new config.adaptors[type]();
		var limit = null; // TODO: customizable
		var context = {
			host: _getField("server.host", tiddler),
			workspace: _getField("server.workspace", tiddler)
		};
		var loading = createTiddlyButton(popup, cmd.loadLabel, cmd.loadTooltip);
		var params = { popup: popup, loading: loading, origin: title };
		adaptor.getTiddlerRevisionList(title, limit, context, params, this.displayRevisions);
	},

	displayRevisions: function(context, userParams) {
		removeNode(userParams.loading);
		if(context.status) {
			var callback = function(ev) {
				var e = ev || window.event;
				var revision = resolveTarget(e).getAttribute("revision");
				context.adaptor.getTiddlerRevision(tiddler.title, revision, context,
					userParams, cmd.displayTiddlerRevision);
			};
			var table = createTiddlyElement(userParams.popup, "table");
			for(var i = 0; i < context.revisions.length; i++) {
				var tiddler = context.revisions[i];
				var row = createTiddlyElement(table, "tr");
				var timestamp = tiddler.modified.formatString(cmd.dateFormat);
				var revision = tiddler.fields["server.page.revision"];
				var cell = createTiddlyElement(row, "td");
				createTiddlyButton(cell, timestamp, cmd.revTooltip, callback, null,
					null, null, { revision: revision });
				cell = createTiddlyElement(row, "td", null, null, tiddler.modifier);
				cell = createTiddlyElement(row, "td");
				createTiddlyButton(cell, cmd.selectLabel, cmd.selectTooltip,
					cmd.revisionSelected, null, null, null,
					{ index:i, revision: revision, col: 2 });
				cmd.context = context; // XXX: unsafe (singleton)!?
			}
		} else {
			$("<li />").text(cmd.listError).appendTo(userParams.popup);
		}
	},

	revisionSelected: function(ev) {
		var e = ev || window.event;
		e.cancelBubble = true;
		if(e.stopPropagation) {
			e.stopPropagation();
		}
		var n = resolveTarget(e);
		var index = n.getAttribute("index");
		var col = n.getAttribute("col");
		while(!index || !col) {
			n = n.parentNode;
			index = n.getAttribute("index");
			col = n.getAttribute("col");
		}
		cmd.revision = n.getAttribute("revision");
		var table = n.parentNode.parentNode.parentNode;
		var rows = table.childNodes;
		for(var i = 0; i < rows.length; i++) {
			var c = rows[i].childNodes[col].firstChild;
			if(i == index) {
				if(c.textContent) {
					c.textContent = cmd.selectedLabel;
				} else {
					c.text = cmd.selectedLabel;
				}
			} else {
				if(c.textContent) {
					c.textContent = cmd.compareLabel;
				} else {
					c.text = cmd.compareLabel;
				}
				c.onclick = cmd.compareSelected;
			}
		}
	},

	compareSelected: function(ev) {
		var e = ev || window.event;
		var n = resolveTarget(e);
		var context = cmd.context;
		context.rev1 = n.getAttribute("revision");
		context.rev2 = cmd.revision;
		context.tiddler = context.revisions[n.getAttribute("index")];
		context.format = "unified";
		context.adaptor.getTiddlerDiff(context.tiddler.title, context,
			context.userParams, cmd.displayTiddlerDiffs);
	},

	displayTiddlerDiffs: function(context, userParams) {
		var tiddler = context.tiddler;
		tiddler.title += cmd.diffSuffix.format([context.rev1, context.rev2]);
		tiddler.text = "{{diff{\n" + context.diff + "\n}}}";
		tiddler.tags = ["diff"];
		tiddler.fields.doNotSave = "true"; // XXX: correct?
		if(!store.getTiddler(tiddler.title)) {
			store.addTiddler(tiddler);
		}
		var src = story.getTiddler(userParams.origin);
		var tiddlerEl = story.displayTiddler(src, tiddler);
		var uri = context.uri.replace("format=unified", "format=horizontal");
		var link = $('<a target="_blank" />').attr("href", uri).text(cmd.linkLabel);
		$(".viewer", tiddlerEl).prepend(link);
	},

	displayTiddlerRevision: function(context, userParams) {
		var tiddler = context.tiddler;
		tiddler.title += cmd.revSuffix.format([tiddler.fields["server.page.revision"]]);
		tiddler.fields.doNotSave = "true"; // XXX: correct?
		if(!store.getTiddler(tiddler.title)) {
			store.addTiddler(tiddler);
		}
		var src = story.getTiddler(userParams.origin);
		story.displayTiddler(src, tiddler);
	},

	stripSuffix: function(type, title) {
		var str = cmd[type + "Suffix"];
		var i = str.indexOf("%0");
		i = title.indexOf(str.substr(0, i));
		if(i != -1) {
			title = title.substr(0, i);
		}
		return title;
	}
};

var _getField = function(name, tiddler) {
	return tiddler.fields[name] || config.defaultCustomFields[name];
};

})(jQuery);
//}}}
//{{{
merge(config.taggly, {

  // for translations
  lingo: {
    labels: {
      asc:        "\u2191", // down arrow
      desc:       "\u2193", // up arrow
      title:      "標題",
      modified:   "修改日期",
      created:    "建立日期",
      show:       "顯示所屬記事",
      hide:       "隱藏清單",
      normal:     "一般",
      group:      "分組",
      commas:     "逗號分隔",
      sitemap:    "體系圖",
      numCols:    "欄數\u00b1", // plus minus sign
      label:      "標為「%0」的記事如下:",
      exprLabel:  "符合標籤表達式「%0」的記事如下:",
      excerpts:   "摘錄",
      descr:      "說明",
      slices:     "片段",
      contents:   "全部內容",
      sliders:    "伸縮面板",
      noexcerpts: "僅顯示標題",
      noneFound:  "(無)"
    },

    tooltips: {
      title:      "按一下可依標題排序",
      modified:   "按一下可依修改日期排序",
      created:    "按一下可依建立日期排序",
      show:       "按一下顯示本標籤所屬記事清單",
      hide:       "按一下隱藏本標籤所屬記事清單",
      normal:     "按一下可顯示一般未分組清單",
      group:      "按一下可顯示進一步依其他標籤分組的清單",
      sitemap:    "按一下可顯示體系圖式清單",
      commas:     "按一下可顯示逗點分隔清單",
      numCols:    "按一下可變更欄數",
      excerpts:   "按一下可顯示摘錄",
      descr:      "按一下可顯示說明片段",
      slices:     "按一下可顯示所有片段",
      contents:   "按一下可顯示各記事的完整內容 (小心記事過多處理耗時)",
      sliders:    "按一下可將記事內容顯示在伸縮面板中 (小心記事過多處理耗時)",
      noexcerpts: "按一下將只顯示標題"
    },

    tooDeepMessage: "* //體系圖層級太多,無法繼續顯示...//"
  },

  config: {
    showTaggingCounts: true,
    listOpts: {
      // the first one will be the default
      sortBy:     ["title","modified","created"],
      sortOrder:  ["asc","desc"],
      hideState:  ["show","hide"],
      listMode:   ["sitemap","group","normal","commas"],
      numCols:    ["2","3","4","5","6","1"],
      excerpts:   ["noexcerpts","sliders","descr","excerpts","slices"]
    },
    valuePrefix: "taggly.",
    excludeTags: ["excludeTagging"],
    excerptSize: 50,
    excerptMarker: "{("+")}",
    siteMapDepthLimit: 25
  }
});
//}}}
R0lGODlhEwATAPf/APvhRfjYPfvoTc69m/3kSfLEMP7kSfXy6/HBLe7kzfPNOfz69f389/bTPfzcQNy9S/zqTvzpTvvmTdSuNOq0JFMeDbWLKPbgqteYJZ8/H+3Kd/nXPu66KO26KNykLuvCVO68Kf7sUv3sUvTdqv7+/NOzO+24J/DOeKqOS61WIvbPN+7Mdv3zWP3vVbuQKM2JJ/fRN/7hRemzItaZMOO4MVonFOK2QPnu0fn38vXIM8N5Jv3rUP7sUP7mSrOVTtimJtqhNv3vU869l9rHnea1KeGzLeSwJvrZPue1LdqqKdSlKPPGMeLRq/7jSP/hQ9XHprKOPfzoTamHN9y9euu/RsujLuq0IsmrbPnv1cOoa/bhrezAMumyJKN/Kd6vLPzbQZl3J+vPR9CiKM+fKfbpzfDkybuhYbqfX9TGwKFDIPfQON/AP/zmSv/jR/3zV/7eQv/iRf/jRvnZP/3mS/zvVqiOhvznTPnVO/79+P3yVv3xVua1Of/fQ/3wV/vbQf3tUfbPONCgJ/znS/XON//kSOGsJ/HRgeDBeuXcx/rw1+u2Jf/fQvfktPTMOdemJ/v69v70WPnaQv347PzeQu/ENO/FRPTPOfn06vv47v38+v3wVPvnS//iRv7zV/3kSuOvJuDVv9iZJuy3JvvbP+G1L/HDMPTMNfTOOuCrJruiaM+gJ/C+K/Tw6N26bPv37Pz37PXjs/viR6OAKsmfOujUd35WSue6RNmfNPr49P757/Xks8uiO9aoLLifaHVLPdW0Zde3aPvuVuTPounHbuzYq/79++TQorigb/fXP/3yV6eGO+nVq+/YprefbrieZ+i6RvzwVvDQd6iHPPTgseGsM/XhsqqEWPzeQdu5ObyiaPr5+OSvJu27Kf3mSvvjS9SSJ9aXK9+nN/XNNtK8Rdm2RvXLNvvcQvz26uLGZObObsOnaPTVd/7jRv/iR7JfJP7eQ9/Vvd3Gk92iMtyjNf7tU/7+/v7lS/3zVu/jx/n498afLM2mMPzwV5l4J////////yH/C05FVFNDQVBFMi4wAwEAAAAh/h1CdWlsdCB3aXRoIEdJRiBNb3ZpZSBHZWFyIDMuMAAh+QQFZAD+ACwAAAAAEwATAAAI/gD9CRwI6wQVJM80TBvIcOCFShUiCoDTgJKNiBUaGrJUoY+mIBUizInji8YhfxkFGmrQCVIePUH+RGDT5s0RUlMcKugDzU2efv1EQKD5BigvYwIreaITzE0/gf0gQCDw1F+/Xf50naJHh47TOhX6RYgQqx/YfmKYnIj0h+vXsIIEATAbNskVKm0g8NjBpmo/ArE2+DUCBYmBTQIESOj7N3AAZEC5Uehiy0+bHnPssCFAKA4fPwEA5VhlopA0DZacxGlDiA0bJ29GbYCRAwEHCqqcVdvi4I2D1hmAsHEg5w41DhxkuHjiz0ajAEcmTbqV4dae6zMycPghRSCzIqZUTIhXkT2D+QwvQlkYMPCQl1IFEBTw4CEUhvsYZBxrOEUJERAdmKAIBdzI8IMFzTQkkDCzjOHIJ1ygEogLUrCn4EBMXAGFLMr0wlxDAQEAIfkEBTIA/wAsAAAAABMAEwAACP4A/wkUyCCRlmgfVow4RyKftnoDBZK4YU0guQgxBNKoUcNfRDyMTtl58KDCg3894NT416qjREb/krlJ9q8kBIGEaLSKV0zgDYGQWEDK0yLEvzns2gj0ge8fg3X2+EGCdC8PPRER5nCKCGxBIgX/Wugp0aVLGG8CCGz15/FfggsDW7SQEKYsG0JO/tWqJXBItK3/RIgIIQJCFANw3nSpUEGgug//7PyLQFmAHcR8HNzRV2XpCnP/CHQ72qMJnH9fBC4ZmGqEQDjt2qSJE2NR6oj/AgnBgvrfu0UZwjmQc2dQDgQgKFD4h4jBsIFH5mWYoabcEgTcRC03g+MfmX/i/k+pASQvhbsX4Dp8y7AclERi/wosKVDqn44UaTJk0OFiQKaBDCwjEDcCifKPFQMNgAtuxZTxi0Db/FOIQGfA8x9uAi2QwBBZ+JCKEIh0F1FAACH5BAUKAP8ALAAAAAATABMAAAj+AP8JFCgJ1gkqSJ5pmObKn8OBAvFcqCSwggA4Am1U2AgxlyFLFfpoClLh35w4vv4dwlTyHx5D/zpByvMvyJ8IAt8cITWFgcALAqG5ydOvn4h/bNq8EcjL2D9JlTzRCeamn8N+ECAQgLjrkq5T/+jQqVqnQr8IEWL9KyuQyYmBY/uV7SdIEIC1La9QaSNwBxur/voRiLUBsEAoSP5t+idAwl/BhAMgKyqwiy0//3rMQUqAUJx/mP/lGChNg8A4bQixYePkzSiIAlU5q/bPQW3VGYCwcSDnDjUOHGT8e/LKxsBJk25luLWn+YwMHP5JYfWP2T9T/1Rof56he4YXof5CDRDI4NC/UgUQFPjnIRSG9xhkHHs0ENMUgSAEKvrHbWCzA7AxIMwsAn3yDyoCSTEAfbAJdAkTV0AhizK9PEEdRAEBADs=
/***
|Name|PlockPlugin|
|Source|http://plockplugin.tiddlyspace.com#PlockPlugin|
|Documentation|http://gjrobert-tw.tiddlyspace.com#PlockPluginDoc|
|Version|0.3.1|
|Author|G.J.Robert Ciang (江瑋平)|
|License|CC BY-SA|
|~CoreVersion|2.1+|
|Type|plugin, formatter|
|Description|Add markups for paragraphs, block elements (inline or plain blocks)|
***/
/*{{{*/
config.formatters.push(
{
	name: "paragraph",
	match: "==",
	termRegExp: /(==(\n|$))/mg,
	element: "p",
	handler: config.formatterHelpers.createElementAndWikify
});

config.formatters.push(
{
	name: "paragraphProper",
	match: "^ {2}",
	termRegExp: /(\n{2})/mg,
	element: "p",
	handler: config.formatterHelpers.createElementAndWikify
});

config.formatters.push(
{
	name: "plainBlock",
	match: "=\{",
	termRegExp: /(\}=)/mg,
	element: "pb",
	handler: config.formatterHelpers.createElementAndWikify
});

config.formatters.push(
{
	name: "inlineBlock",
	match: "-\{",
	termRegExp: /(\}-)/mg,
	element: "ib",
	handler: config.formatterHelpers.createElementAndWikify
});

config.shadowTiddlers['PlockStyles'] =
	"/*{{{*/\n"+
	store.getTiddlerText(tiddler.title +'##CSS') +
	"\n/*}}}*/";

store.addNotification('PlockStyles', refreshStyles);
/*}}}*/
// /%
/* 
!CSS
pb {display: block; text-indent: 0;}
pb > br:first-child {display: none;}
ib {display: inline-block; vertical-align: middle; text-indent: 0;}
ib > br:first-child {display: none;}
!Disabled styles
p {text-indent: 2em; margin: 0.5em 0.5em 0px 0px;}
p * { text-indent: 0; }
p p { text-indent: 2em; }
*/
// %/
/***
|''Name''|BinaryTiddlersPlugin|
|''Description''|renders base64-encoded binary tiddlers as images or links|
|''Author''|FND|
|''Version''|0.3.2|
|''Status''|@@beta@@|
|''Source''|http://svn.tiddlywiki.org/Trunk/association/plugins/BinaryTiddlersPlugin.js|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
|''CoreVersion''|2.5|
!Code
***/
//{{{
(function($) {

"use strict";

var ctfield = "server.content-type";

var plugin = config.extensions.BinaryTiddlersPlugin = {
	isWikiText: function(tiddler) {
		var ctype = tiddler.fields[ctfield];
		if(ctype) {
			if (ctype === 'text/x-tiddlywiki') {
				return true;
			}
			return !this.isBinary(tiddler) && !this.isTextual(ctype);
		} else {
			return true;
		}
	},
	// NB: pseudo-binaries are considered non-binary here
	isBinary: function(tiddler) {
		var ctype = tiddler.fields[ctfield];
		return ctype ? !this.isTextual(ctype) : false;
	},
	isTextual: function(ctype) {
		return ctype.indexOf("text/") === 0
			|| this.endsWith(ctype, "+xml")
			|| ctype === 'application/json'
			|| ctype === 'application/javascript';
	},
	endsWith: function(str, suffix) {
		return str.length >= suffix.length &&
			str.substr(str.length - suffix.length) === suffix;
	},
	isLink: function(tiddler) {
		return this.isBinary(tiddler) && tiddler.text.indexOf("<html>") !== -1;
	}
};

// Disable edit for linked tiddlers (for now)
// This will be changed to a GET then PUT
config.commands.editTiddler.isEnabled = function(tiddler) {
    var existingTest = config.commands.editTiddler.isEnabled;
    if (existingTest) {
        return existingTest && !plugin.isLink(tiddler);
    } else {
        return !plugin.isLink(tiddler);
    }
};

// hijack text viewer to add special handling for binary tiddlers
var _view = config.macros.view.views.wikified;
config.macros.view.views.wikified = function(value, place, params, wikifier,
		paramString, tiddler) {
	var ctype = tiddler.fields["server.content-type"];
	if(params[0] === "text" && ctype && ctype !== 'text/x-tiddlywiki' &&
			!tiddler.tags.contains("systemConfig") && !plugin.isLink(tiddler)) {
		var el;
		if(plugin.isBinary(tiddler)) {
			var uri = "data:%0;base64,%1".format([ctype, tiddler.text]); // TODO: fallback for legacy browsers
			if(ctype.indexOf("image/") === 0) {
				el = $("<img />").attr("alt", tiddler.title).attr("src", uri);
			} else {
				el = $("<a />").attr("href", uri).text(tiddler.title);
			}
		} else {
			el = $("<pre />").text(tiddler.text);
		}
		el.appendTo(place);
	} else {
		_view.apply(this, arguments);
	}
};

// hijack edit macro to disable editing of binary tiddlers' body
var _editHandler = config.macros.edit.handler;
config.macros.edit.handler = function(place, macroName, params, wikifier,
		paramString, tiddler) {
	if(params[0] === "text" && plugin.isBinary(tiddler)) {
		return false;
	} else {
		_editHandler.apply(this, arguments);
	}
};

// hijack autoLinkWikiWords to ignore binary tiddlers
var _autoLink = Tiddler.prototype.autoLinkWikiWords;
Tiddler.prototype.autoLinkWikiWords = function() {
	return plugin.isWikiText(this) ? _autoLink.apply(this, arguments) : false;
};

}(jQuery));
//}}}
//{{{
config.commands.collapseTiddler.text = "摺疊";
config.commands.collapseTiddler.tooltip = "摺疊此記事";
config.commands.expandTiddler.text = "展開";
config.commands.expandTiddler.tooltip = "展開此記事";
config.macros.collapseAll.text = "全部摺疊";
config.macros.collapseAll.tooltip = "摺疊所有記事";
config.macros.expandAll.text = "全部展開";
config.macros.expandAll.tooltip = "展開所有記事";
config.commands.collapseOthers.text = "以此為主";
config.commands.collapseOthers.tooltip = "展開此記事,並摺疊其他記事";
//}}}
Unless you're delighted with the default theme you can make some quick changes by generating a new random color palette, hit this button to cycle through some alternatives.

<<RandomColorPaletteButton saturation_pale:0.67 saturation_light:0.53
saturation_mid:0.43 saturation_dark:0.06 pale:0.99 light:0.85 mid:0.5 dark:0.31>>

You can also change the look and feel completely by installing a new theme. To do this, find one you like in the @themes space, note down the name, and include it in this space by going to the space menu. You can reach the space menu by clicking on the blue and pink circle at the top-right of the page and chooshing "THIS SPACE". Here are a few to check out:
* @pip
* @caspian-ii
* @basalt
* @simplicity
* @cheesecake
* @jelly-doughnut

(//Note that if you are using a custom TiddlySpace install, these themes may not be present.//)
新聞真的可以再無聊一點!
{{p{
有過這樣的經驗吧?明明希望春節、清明陽光普照、中秋天公作美,但還是因雨只能在家排遣,或是看不到月亮而度過沒有味道的中秋節。}}}
{{p{
但是今年中秋,原本預料會直撲臺灣的強颱卻在前兩天轉向~~(呃……おきなわ沖繩的朋友們,你們還好嗎?囧)~~;從週四晚上到週五,其實連隔著中央山脈的臺中雖沒下雨,也能感受到外圍環流的威力,以及陣陣涼意。但這一切竟然都能在教師節這天扭轉。現在,中秋夜能夠在陽台上吹著涼風、看到晴朗的天空及雪亮的月輪,真是讓人由衷讚嘆聖三位的動工。}}}
{{p{
雖然中秋節到底看不看得到月亮,大家可能會說是氣象學上的偶然,不過今年能有這樣的變化,仍是一件很感激的事情。(我本來預料昨天週六回臺北會遇到大雨的!<<:D>>)}}}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   version="1.1"
   width="14pt"
   height="14pt"
   viewBox="918 510 14 14"
   id="svg3070">
  <metadata
     id="metadata3089">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <defs
     id="defs3072">
    <radialGradient
       cx="0"
       cy="0"
       r="1"
       id="Gradient"
       gradientUnits="userSpaceOnUse">
      <stop
         id="stop3075"
         style="stop-color:#ffffff;stop-opacity:1"
         offset="0" />
      <stop
         id="stop3077"
         style="stop-color:#2b2b2b;stop-opacity:1"
         offset="1" />
    </radialGradient>
    <radialGradient
       id="Obj_Gradient"
       xlink:href="#Gradient"
       gradientTransform="matrix(11.473944,0,0,11.473944,922.3752,513.7837)" />
  </defs>
  <g
     id="g3080"
     style="fill:none;stroke:none">
    <g
       id="g3082">
      <path
         d="m 929.6952,512.9018 c -2.5384,-2.53843 -6.654,-2.53843 -9.1924,0 -2.5384,2.5384 -2.5384,6.654 0,9.19238 2.5384,2.53839 6.654,2.53839 9.1924,0 2.5384,-2.53838 2.5384,-6.65398 0,-9.19238 m -4.5962,2.8407 2.07733,-2.07734 1.75547,1.75549 -2.0773,2.07735 2.0773,2.07732 -1.75547,1.75548 -2.07733,-2.07732 -2.07733,2.07732 -1.75547,-1.75548 2.0773,-2.07732 -2.0773,-2.07735 1.75547,-1.75549 z"
         id="path3084"
         style="fill:url(#Obj_Gradient)" />
      <path
         d="m 927.61447,515.38354 a 4.51205,4.2590378 0 1 1 -9.0241,0 4.51205,4.2590378 0 1 1 9.0241,0 z"
         transform="matrix(1.0218069,0,0,1.0462046,-18.063694,-21.648443)"
         id="path2394"
         style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
    </g>
  </g>
</svg>
 神造萬物,各按其時成為美好。享用這地上的資源、物質、環境時就覺得非常感激。然而這麼美麗的世界似乎卻因人類的出現而多了污染、紛爭、浪費、無知、不義。

應該要像某些科幻片、災難片說的,「人類是細菌,應予鏟除」、「為了避免你們人類把地球搞得不適居住,所以我們決定提早滅絕你們」嗎?不,絕不是的,話語說 神我創造這個宇宙、這個地球,就是為了成為人類靈肉成長的搖籃,只是我們在信仰上墮落了、與 神的關係脫離了,才會變得無知、不懂得如何使用這個環境。

 神創造人類的本質並不是如此愚昧、軟弱、自私,我們應該找回良善、勤勉、熱心、體貼吧,並扭轉過去數千年文明當中追求物質、享樂、自利的積習,讓心靈變化更新,相信 神會祝福已經改變的個人、家庭、企業、國家,帶領我們平安度過主再臨之前這個動盪的年代。
<<mif "看你有多色﹣暴走微遊戲" "http://game.ioxapp.com/color/">>

*20150120 清晨在室內全暗下做一次:lv24
html, body {
    height: 100%;
    max-height: 100%;
    background: #F0F4F8;
    font-family: "Helvetica Neue",helvetica,arial,sans-serif;
    line-height: 1.4;
    overflow: auto;
}

button {
    cursor: pointer;
}

.privacyicon {
    float: right;
}

#delete {
    margin-top: 1em;
}

.cleancol > h1 {
    font-size: 150%;
    text-align: center;
}

#message {
    padding: 1em;
    display: none;
}

#container {
    height: 90%;
    margin: 1em auto 0 auto;
    width: 100%;
}

.inputs {
    white-space: pre-wrap;
    font: 90% "Andale Mono", "Lucida Console", "Bitstream Vera Sans Mono", "Courier New", monospace;
    border: none;
    box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.5);
}

#editor textarea {
    height: 85%;
    width: 96%;
    padding: 2%;
    border-radius: .5em .5em 0 0;
    border-top: thin solid lightgrey;
    border-left: thin solid lightgrey;
}

#editor input {
    width: 100%;
    border-radius: 0 0 .5em .5em;
}

.cleancol {
    height: 90%;
    background: #DCE7F1;
    padding: 1em;
    border-radius: .5em;
    border-top: thin solid #ACA7FF;
    border-left: thin solid #ACA7FF;
    box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.5);
    overflow-x: hide;
}

#recents {
    float: right;
    width: 20%;
    overflow: hide;
    margin-right: 1em;
}


#recents span {
    cursor: pointer;
    padding-right: 1em;
}

#editor {
    margin-left: auto;
    margin-right: auto;
    width: 45%;
}

#info {
    position: relative;
    float: left;
    width: 20%;
    margin-left: 1em;
}

#info button {
    width: 100%;
}

#tags {
    position: absolute;
    bottom: 0;
    max-height: 15em;
    overflow: hide;
    width: 90%;
    -moz-column-count: 2;
    -webkit-column-count: 2;
    column-count: 2;
    column-gap: 1em;
    -moz-column-gap: 1em;
    -webkit-column-gap: 1em;
}

.taglink {
    cursor: pointer;
    display: block;
}

a {
    color: #BC4378;
    text-decoration: none;
}

@media all and (max-width: 50em) {
    #recents {
        display: none;
    }
    #editor {
        width: 65%;
        margin-right: 1em;
    }
}
There are a lot of interesting people using ~TiddlySpace that you might like to keep track of and interact with. There are a number of ways of doing this.

If you see a number in the speech bubble in one of your tiddlers, it means that someone is writing about the same thing as you. You can find out what they're saying by clicking on it. Likewise, if you see something interesting in someone else's space, you can respond to it and write up your own thoughts on the subject by clicking "Reply to this tiddler".

Additionally, if you find anyone interesting, or you find an interesting looking space and you'd like to know when it's changed, you can "follow" that space. To do this, simply create a tiddler with the title: {{{@space-name}}} and tag it {{{follow}}}. If you want, you can store some notes about that space in the body of the tiddler.

If you then want to know what happening, simply [[include|How do I include/exclude spaces?]]@docs the @tivity space and then visit your activity stream at [[/activity|/activity]], or just visit the @tapas space directly.

!Not sure who to follow?
Here's a few suggestions:
* @fnd
* @cdent
* @pmario
* @bengillies
* @dickon
//{{{
window.coreWikify = wikify;
window.wikify = function(source,output,highlightRegExp,tiddler) {
	if (source) arguments[0]=source.replace(/\\\\\n/mg,"<br>");
	coreWikify.apply(this,arguments);
}
//}}}
@@Please do not modify this tiddler; it was created automatically upon space creation.@@
R0lGODlhEwATAPf/AAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDcwKbK8Co/qio//ypfACpfVSpfqipf/yp/ACp/VSp/qip//yqfACqfVSqfqiqf/yq/ACq/VSq/qiq//yrfACrfVSrfqirf/yr/ACr/VSr/qir//1UAAFUAVVUAqlUA/1UfAFUfVVUfqlUf/1U/AFU/VVU/qlU//1VfAFVfVVVfqlVf/1V/AFV/VVV/qlV//1WfAFWfVVWfqlWf/1W/AFW/VVW/qlW//1XfAFXfVVXfqlXf/1X/AFX/VVX/qlX//38AAH8AVX8Aqn8A/38fAH8fVX8fqn8f/38/AH8/VX8/qn8//39fAH9fVX9fqn9f/39/AH9/VX9/qn9//3+fAH+fVX+fqn+f/3+/AH+/VX+/qn+//3/fAH/fVX/fqn/f/3//AH//VX//qn///6oAAKoAVaoAqqoA/6ofAKofVaofqqof/6o/AKo/Vao/qqo//6pfAKpfVapfqqpf/6p/AKp/Vap/qqp//6qfAKqfVaqfqqqf/6q/AKq/Vaq/qqq//6rfAKrfVarfqqrf/6r/AKr/Var/qqr//9QAANQAVdQAqtQA/9QfANQfVdQfqtQf/9Q/ANQ/VdQ/qtQ//9RfANRfVdRfqtRf/9R/ANR/VdR/qtR//9SfANSfVdSfqtSf/9S/ANS/VdS/qtS//9TfANTfVdTfqtTf/9T/ANT/VdT/qtT///8AVf8Aqv8fAP8fVf8fqv8f//8/AP8/Vf8/qv8///9fAP9fVf9fqv9f//9/AP9/Vf9/qv9///+fAP+fVf+fqv+f//+/AP+/Vf+/qv+////fAP/fVf/fqv/f////Vf//qszM///M/zP//2b//5n//8z//wB/AAB/VQB/qgB//wCfAACfVQCfqgCf/wC/AAC/VQC/qgC//wDfAADfVQDfqgDf/wD/VQD/qioAACoAVSoAqioA/yofACofVSofqiof/yo/ACo/Vf/78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH+HUJ1aWx0IHdpdGggR0lGIE1vdmllIEdlYXIgMy4wACH5BAEKAP8ALAAAAAATABMAAAjKAP8JHEiwoMGDCAmq6sQwlCqBC+HU6fSQYKdhwzr5ymTK1C5bu3TpyoRgoChkzEL5+sWJDp2RlHZ1ouRnIEVmGX/t2onJli5Mv3zBKfmvEzNkw4J2+rnrFqZbIzMJEhgKpcpOv4AytbU0jyGIRokl5ZR1V8+edQ4Q/ScqVMpfQXdx2hUTTp+vBNsiA/WrE6aQu+AcELTWZKikvkJmouNnKsK2GTfqGlzYYJ6xu/IQTjgQD1w69yojVJUJ0z28nAfm6bQ5NUHRrjkHBAA7

<<binaryUploadPublic edit:tags edit:title tags:"excludeLists emoticon:MSN">>
//{{{
config.commands.revisions.revSuffix = " [版本 %0]";
config.commands.revisions.diffSuffix = " [%0 vs. %1 之差異]";
//}}}
*~~〔FB 網友分享〕~~永和捷運頂溪站附近的中興街,從郵局那邊走過去,整條都是韓國的衣服、食材。晚上10點就幾乎關光了。
大約從這兩年開始(似乎是 2008 退伍後、2009 開始上班後),開始變成常常忘記幾分鐘前原本要做的事 <<:s>>
!Summary
This tiddlyspace is supposed to be a template for creating tiddlyspaces with $\LaTeX$ support.

!Creating you own mathematical tiddlyspace
* Create a tiddlyspace of your choice.
* Import all the tiddlers tagged {{{mathTemplateTiddler}}} from http://math-template.tiddlyspace.com. Strictly speaking, you don't need to import any tiddler tagged {{{doc}}} as these are purely documentation.
* Adjust the PageTemplate tiddler by inserting the line
{{{
<div style='display:none' macro='tiddler LatexNucleus##Init'></div>
}}}
as early as possible (try the very top and see whether it breaks some things - it shouldn't).
* If you want to, adjust the place that localTeX.js is loaded from in the [[PluginMathJax v1.3]] tiddler. If you do this, you need to change the last line in localTeX.js as well to the new location. Note that this is purely optional.
body {
	font-family: sans-serif;
}

header,
footer {
	color: #FFF;
	background-color: #000;
}

header,
header h1,
footer,
footer p {
	width: 100%;
}

header,
footer {
	display: table;
}

header h1,
footer p {
	display: table-cell;
	vertical-align: middle;
	padding-left: 5px;
	padding-right: 5px;
}

nav {
	background-color: #EEE;
}

nav,
nav li a {
	color: #000;
}

nav li a {
	display: block;
	padding: 5px;
	text-decoration: none;
	cursor: pointer;
}

nav li a:link,
nav li a:visited,
nav li a:hover {
}
nav li a:active {
	outline: none;
}
nav li a:focus {
	outline-offset: -1px; /* hack to prevent Firefox from widening the element (despite the spec!) */
}

footer .username {
	display: block;
	float: right;
	font-style: italic;
}

.pane article {
	height: 100%;
	background-color: #FFF;
}

.column {
	width: 20%;
	height: 100%;
	overflow: auto; /* XXX: should be on UL/OL, but full-height is tricky then */
	float: left;
	border-right: 1px solid #AAA;
}

.column h3 {
	display: none;
}

.column input {
	display: block;
	width: 95%; /* XXX: 100% would be more desirable, but leads to excessive width */
	margin: 2px auto;
}
.column ul,
.column ol {
	border-top: 1px solid #CCC;
	list-style-type: none;
}

.column:first-child ul {
	border-top: none;
}

.column li {
	border-bottom: 1px solid #CCC;
	background-color: #F8F8F8;
}

.column li a {
	padding-left: 22px;
	background-repeat: no-repeat;
	background-position: 2px center;
}

.column.index li a,
.column.recipes li a,
.column.bags li a {
	background-image: url(data:image/gif;base64,R0lGODlhEAAQAJEDAP346fDUdNmMNP///yH5BAEAAAMALAAAAAAQABAAAAI2nI+py40BYwC0AiMslfCOGWlVgG1cKJShCKRDpnFtuQHn/Nr2ObkwH/HtgDiI4IhMCkiOZrMAADs=);
}

.column.tiddlers li a,
.column.revisions li a {
	background-image: url(data:image/gif;base64,R0lGODlhEAAQAJECAMzMzPz8/P///wAAACH5BAEAAAIALAAAAAAQABAAAAIvFI4JIW0BYzysLYmpxfzsoFwQ8HES+YDhhYrm+K1s+YLxCqe1ncq5+2rtfjKFoAAAOw==);
}

.button {
	border: 1px solid #CCC;
	padding: 2px 5px;
	text-decoration: none;
	color: #1C94C4;
	background-color: #F6F6F6;
	cursor: pointer;
}

.button:focus {
	outline: none;
}

.selected {
	font-weight: bold;
	color: #FFF;
	background-color: #3D8CFF;
}

.disabled {
	color: #AAA;
	cursor: auto;
}

.info,
.error {
	color: #000;
	cursor: pointer;
}

.info {
	background-color: #FCEFA1;
}

.active {
	background-color: #FFFEEE;
}

.error {
	background-color: #F88 !important;
}

.pane .button {
	display: block;
	float: right;
	margin-bottom: 10px;
	border-top-width: 0;
}

.pane #btnFullscreen {
	border-left-width: 0;
	border-right-width: 0;
}
今天下午四點多上班時遇到近一年來搖得最大的一次地震!嗚~ 神啊~

在這除夕前一天臺灣又遇到有感地震,是不是 神有什麼想對臺灣人說的話呢?
多久沒回去[[興隆|興隆國小]]啦~感謝 神因為有教會的會員姐妹在裡面任教,可以借到室內運動場,明天不怕冷、不怕雨,也可玩大隊接力、躲避球和拔河耶!(一整個全部變回小學生就對 <<XD>>)
  有教會姐姐熱心分享這篇:<<mif "幼兒大腦成長的秘密 : 整理國家地理頻道介紹的重點,爸爸媽媽們一定要看 ! @ 雙胞胎陳寶寶們的老爹記事 :: 痞客邦 PIXNET ::" "http://rulexyyy.pixnet.net/blog/post/28071346-%E5%B9%BC%E5%85%92%E5%A4%A7%E8%85%A6%E6%88%90%E9%95%B7%E7%9A%84%E7%A7%98%E5%AF%86-%3A-%E6%95%B4%E7%90%86%E5%9C%8B%E5%AE%B6%E5%9C%B0%E7%90%86%E9%A0%BB%E9%81%93%E4%BB%8B%E7%B4%B9">> 給我們家,讓我驚覺現階段對小捷成長的重要性!→ 趕快找資料!
*<<mif "動動腦,從玩樂中學習 - 張旭鎧。兒童職能治療師" "http://akai.org.tw/?p=2222">>
*<<mif "0~3歲動出好腦力 跟著小寶貝動一動,GO - 張旭鎧。兒童職能治療師 - Part 5" "http://akai.org.tw/?p=2726&page=5">>(Part 4、5 是 1~3 歲寶寶,至於其他階段則可點其他連結)
*<<mif "1歲發展關鍵期‧語言學習要趁早/寶貝教養/親子生活/懷孕‧育兒‧親子|Mombaby 媽媽寶寶懷孕生活網" "http://www.mombaby.com.tw/article/1%E6%AD%B2%E7%99%BC%E5%B1%95%E9%97%9C%E9%8D%B5%E6%9C%9F%E2%80%A7%E8%AA%9E%E8%A8%80%E5%AD%B8%E7%BF%92%E8%A6%81%E8%B6%81%E6%97%A9-.html#">>
**「0~4 歲建議雙語教育」← 真的呴?不是英語教育業者的「業配文」吧?<<汗>>
/***
G.J.Robert hacking to fix:
#<caption> put in <tbody>
#{{{!}}} for header cell may break {{{<<tiddler>>}}} macro section transclusion
|''Name''|MediaWikiTableFormatterPlugin|
|''Description''|Allows MediaWiki style tables in TiddlyWiki|
|''Author''|Martin Budden (mjbudden (at) gmail (dot) com)|
|''Contributors''|FND|
|''Version''|0.1.2|
|''Status''|stable|
|''Source''|http://devpad.tiddlyspot.com/#MediaWikiTableFormatterPlugin|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/formatters/MediaWikiTableFormatterPlugin.js|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.1.0|
!Description
Enables [[MediaWiki|http://www.mediawiki.org]]'s table markup in TiddlyWiki, allowing for multi-line contents within table cells.
(Note that all TiddlyWiki markup still applies.)
!Usage
Detailed documentation available at [[MediaWiki.org|http://www.mediawiki.org/wiki/Help:Tables]].
!!Examples
{{{
{|
! Heading 1
! Heading 2
! Heading 3
|-
| row 1, column 1
| row 1, column 2
| row 1, column 3
|-
| row 2, column 1
| row 2, column 2
| row 2, column 3
|}
}}}
{|
! Heading 1
! Heading 2
! Heading 3
|-
| row 1, column 1
| row 1, column 2
| row 1, column 3
|-
| row 2, column 1
| row 2, column 2
| row 2, column 3
|}
!Revision History
!!v0.1 (2008-10-31)
* initial release
!!v0.1.2 (2008-11-05)
* removed unnecessary code
!Code
***/
//{{{
if(!version.extensions.MediaWikiTableFormatterPlugin) { //# ensure that the plugin is only installed once
version.extensions.MediaWikiTableFormatterPlugin = {installed:true};

if(version.major < 2 || (version.major == 2 && version.minor < 1)) {
	alertAndThrow('MediaWikiTableFormatterPlugin requires TiddlyWiki 2.1 or later.');
}

config.formatters.push({
	name: 'enhancedTable',
	match: '^\\{\\|',
	handler: function(w) {
		var pair = MediaWikiTemplate.findTableBracePair(w.source,w.matchStart);
		if(pair.start==w.matchStart) {
			w.nextMatch = w.matchStart;
			var table = MediaWikiTemplate.createElement(w.output,'table');
//			var tbody = MediaWikiTemplate.createElement(table,'tbody'); // required for IE // disabled by G.J.Robert
			var mwt = new MediaWikiTemplate();
			mwt.wikifyTable(table,w,pair); // put tbody into table, so just wikify the table -- G.J.Robert
		}
	}
});


MediaWikiTemplate = function()
{
	this.stack = [];
	this.error = false;
	this.tiddler = null;
};

MediaWikiTemplate.createElement = function(parent,element)
{
	return parent.appendChild(document.createElement(element));
}

MediaWikiTemplate.setAttributesFromParams = function(e,p)
{
	var re = /\s*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\w|%|#)*))/mg;
	var match = re.exec(p);
	while(match) {
		var s = match[1].unDash();
		if(s == 'bgcolor') {
			s = 'backgroundColor';
		}
		try {
			if(match[2]) {
				e.setAttribute(s,match[2]);
			} else if(match[3]) {
				e.setAttribute(s,match[3]);
			} else {
				e.setAttribute(s,match[4]);
			}
		}
		catch(ex) {}
		match = re.exec(p);
	}
};

MediaWikiTemplate.findRawDelimiter = function(delimiter,text,start)
//# find a delimiter that is not enclosed by [[..]]
{
	var d = text.indexOf(delimiter,start);
	if(d==-1)
		return -1;
	var b = {start:-1,end:-1};
	var bs = text.indexOf('[[',start);
	if(bs==-1 || bs >d)
		return d;
	var s1 = -1;
	if(bs!=-1 && bs <d) {
		var be = text.indexOf(']]',bs);
		if(be!=-1) {
			b.start = bs;
			b.end = be;
		}
	}
	if(b.start!=-1 && d>b.start)
		s1 = b.end+2;
	return s1==-1 ? d : MediaWikiTemplate.findRawDelimiter(delimiter,text,s1);
};

MediaWikiTemplate.findTableBracePair = function(text,start)
{
	var ret = {start:-1,end:-1};
	var s = text.indexOf('{|',start);
	if(s==-1)
		return ret;
	var e = text.indexOf('\n|}',s+2);
	if(e==-1)
		return ret;
	e++;
	var s2 = text.indexOf('{|',s+2);
	if(s2==-1 || s2 > e)
		return {start:s,end:e};
	var tp = MediaWikiTemplate.findTableBracePair(text,s+2);
	while(tp.end!=-1 && e>tp.start && e<=tp.end) {
		//# intervening table brace pair, so skip over
		e = tp.end+2;
		tp = MediaWikiTemplate.findTableBracePair(text,e);
		e = text.indexOf('\n|}',e);
		if(e==-1)
			return ret;
		e++;
	}
	return {start:s,end:e};
};

MediaWikiTemplate.prototype.wikifyTable = function(table,w,pair)
{
	function lineEnd(w) {
		var r = w.source.indexOf('\n',w.nextMatch);
		while(r!=-1) {
			var n = w.source.substr(r+1,1);
			if(n=='|' || n=='?' || (n=='{' && w.source.substr(r+2,1)=='|'))
				break;
			r = w.source.indexOf('\n',r+1);
		}
		return r;
	}
	function subWikifyText(e,w,text) {
			var oldSource = w.source; var oldMatch = w.nextMatch;
			w.source = text; w.nextMatch = 0;
			w.subWikifyUnterm(e);
			w.source = oldSource; w.nextMatch = oldMatch;
	}
	//# skip over {|
	var tbody = MediaWikiTemplate.createElement(table,'tbody'); // Adding the new tbody wrapper here, which should be in the same level as the caption, holding the tr --G.J.Robert
	w.nextMatch += 2;
	var i = lineEnd(w);
	if(i>w.nextMatch) {
		MediaWikiTemplate.setAttributesFromParams(tbody.parentNode,w.source.substring(w.nextMatch,i)); // "table" -> "tbody" or the attributes will be applied to the parent node of the whole table!
		w.nextMatch = i;
	}
	w.nextMatch++;
	if(w.source.substr(w.nextMatch,2)=='|+') {
		var caption = MediaWikiTemplate.createElement(table,'caption'); // caption should be under the table directly, no need to change -- G.J.Robert
		w.nextMatch += 2;
		i = lineEnd(w);
		var d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
		if(d!=-1 && d<i) {
			MediaWikiTemplate.setAttributesFromParams(caption,w.source.substring(w.nextMatch,d));
			w.nextMatch = d+1;
		}
		w.subWikifyTerm(caption,/(\n)/mg);
	}
	var tr = MediaWikiTemplate.createElement(tbody,'tr'); // change the parent from table to tbody --G.J.Robert
	if(w.source.substr(w.nextMatch,2)=='|-') {
		w.nextMatch += 2;
		i = lineEnd(w);
		if(i>w.nextMatch) {
			MediaWikiTemplate.setAttributesFromParams(tr,w.source.substring(w.nextMatch,i));
			w.nextMatch = i;
		}
		w.nextMatch++;
	}
	var x = w.source.substr(w.nextMatch,2);
	while(x!='|}') {
		if(x=='{|') {
			//# nested table
			var pair2 = MediaWikiTemplate.findTableBracePair(w.source,w.nextMatch);
			if(pair2.start==w.nextMatch) {
				var table2 = MediaWikiTemplate.createElement(cell,'table');
				this.wikifyTable(table2,w,pair2);
			}
		} else if(x=='|-') {
			//# new row
			tr = MediaWikiTemplate.createElement(tbody,'tr'); // change the parent from table to tbody --G.J.Robert
			w.nextMatch += 2;
			i = lineEnd(w);
			if(i==-1)
				break;
			if(i>w.nextMatch) {
				MediaWikiTemplate.setAttributesFromParams(tr,w.source.substring(w.nextMatch,i));
				w.nextMatch = i;
			}
			w.nextMatch++;
		} else if(x.substr(0,1)=='?') {
			//# header cell
			w.nextMatch++;
			i = lineEnd(w);
			if(i==-1)
				break;
			var cell = MediaWikiTemplate.createElement(tr,'th');
			var c = w.source.indexOf('??',w.nextMatch);
			while(c!=-1 && c<i) {
				d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
				if(d!=-1 && d<c) {
					MediaWikiTemplate.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
					w.nextMatch = d+1;
				}
				while(w.source.substr(w.nextMatch,1)==' ') {
					w.nextMatch++;
				}
				w.subWikifyTerm(cell,/(\?\?)/mg);
				cell = MediaWikiTemplate.createElement(tr,'th');
				c = w.source.indexOf('??',w.nextMatch);
			}
			d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
			if(d!=-1 && d<i) {
				MediaWikiTemplate.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
				w.nextMatch = d+1;
			}
			while(w.source.substr(w.nextMatch,1)==' ') {
				w.nextMatch++;
			}
			subWikifyText(cell,w,w.source.substring(w.nextMatch,i));
			w.nextMatch = i+1;
		} else if(x.substr(0,1)=='|') {
			//# cell
			w.nextMatch++;
			i = lineEnd(w);
			if(i==-1)
				break;
			cell = MediaWikiTemplate.createElement(tr,'td');
			c = w.source.indexOf('||',w.nextMatch);
			while(c!=-1 && c<i) {
				d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
				if(d!=-1 && d<c) {
					MediaWikiTemplate.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
					w.nextMatch = d+1;
				}
				while(w.source.substr(w.nextMatch,1)==' ') {
					w.nextMatch++;
				}
				w.subWikifyTerm(cell,/(\|\|)/mg);
				cell = MediaWikiTemplate.createElement(tr,'td');
				c = w.source.indexOf('||',w.nextMatch);
			}
			d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
			if(d!=-1 && d<i) {
				MediaWikiTemplate.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
				w.nextMatch = d+1;
			}
			while(w.source.substr(w.nextMatch,1)==' ') {
				w.nextMatch++;
			}
			subWikifyText(cell,w,w.source.substring(w.nextMatch,i));
			w.nextMatch = i+1;
		}
		x = w.source.substr(w.nextMatch,2);
	}
	w.nextMatch = pair.end + 3;
	return;
};

} //# end of 'install only once'
//}}}
  臺灣加油!要做得更好才能具備大國風範。不是指人口多的大國,是指很有水準的大國。~~-- 2012/3/5 世棒經典賽未能取勝韓國後~~
noscript {
	border: 5px solid red;
	display: block;
	margin: auto;
	padding: 50px;
	text-align: center;
	width: 300px;
}

.syncButton {
	font-size: 2em;
	border: solid 1px #CCC;
	padding: 5px;
	-moz-border-radius: 5px 5px 5px;
	-webkit-border-radius: 5px 5px 5px;
	width: 48px;
	height: 48px;
	background-image: url(/bags/common/tiddlers/icon-sync.png);
	background-repeat: no-repeat;
	background-position: center;
	text-indent: -999px;
	overflow: hidden;
	display: block;
	text-align: center;
	cursor: pointer;
	right: 120px;
	top: 80px;
	position: absolute;
}

#note.active #deletenote {
	display: none;
}

body {
	font: 14px/1.4 "Helvetica Neue", "Lucida Grande", "Arial";
	margin: 0;
	background-image: url(/bags/common/tiddlers/HtmlBackground);
}

#backstage {
	width: 100%;
	padding: 0px;
	background-color: black;
	margin: 0px 0px 0px 0px;
	height: 32px;
	text-align: center;
	background: -moz-linear-gradient(center bottom,#222 0%, #333 50%, #555 100%);
	background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #222),color-stop(0.5, #333),color-stop(1, #555));
	background: -moz-linear-gradient(center bottom,#222 0%, #333 50%, #555 100%);
	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F5555, endColorstr=#F2222);
	-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#F5555, endColorstr=#F2222)";
}

#backstage a {
	color: white;
	padding: 4px;
	display: block;
	text-decoration: none;
}

#backstage li:first-child {
	border-right: solid 1px #777;
}

#backstage li:nth-child(2) {
	border-left: solid 1px #555;
}

#backstage a:hover {
	background-color: #FFA500;
}

#backstage li {
	display: inline-block;
	line-height: 18px;
	margin-top: 2px;
	padding: 0px 10px;
}

#backstage .status {
	color: #CCC;
	float: right;
	font-size: 0.8em;
}

#backstage .status.nonmember {
	color: #666;
	opacity: 0.5;
}

h2,h3,h4,h5 {
	margin-bottom: 0px;
}

a {
	color: royalBlue;
}

a:hover {
	color:#4169C8;
}

.header {
	border-bottom: 7px solid rgba(26, 31, 30, 0.95);
	padding-bottom: 20px;
	position: relative;
}

.siteheading {
	position: relative;
}

.header h1 {
	color: #4C4A54;
	font-size: 4em;
	line-height: 48px;
	text-shadow: 0px 2px 2px white;
	padding-top: 10px;
	margin-top: 0px;
	padding-left: 72px;
}

.toolpanel .info,
.toolpanel input,
.toolpanel h2,
.toolpanel ul {
	margin-left: 120px;
}

.toolpanel h2 {
	text-shadow: 0px 1px 1px white;
}

.toolpanel .section {
	border-bottom: 1px solid #DCE7F1;
	border-top: 1px solid #F8F8F8;
	padding: 24px;
	position: relative;
}

.section.searchSection {
	background-image: url(/bags/common/tiddlers/icon-search.png);
	background-position: 80px 15px;
	background-repeat: no-repeat;
}

.section.recentSection {
	background-image: url(/bags/common/tiddlers/icon-recent.png);
	background-position: 80px 15px;
	background-repeat: no-repeat;
}

.section.incompleteSection {
	background-image: url(/bags/common/tiddlers/icon-incomplete.png);
	background-position: 80px 15px;
	background-repeat: no-repeat;
	min-height: 100px;
}

.toolpanel .section ul {
	list-style: none;
}

.siteicon {
	background-image: url(SiteIcon);
	height: 56px;
	width: 56px;
	background-repeat: no-repeat;
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	-o-border-radius: 10px;
	border-radius: 10px;
	background-size: 56px 56px;
	position: absolute;
	left: 6px;
	top: 8px;
}

.toolbar {
	position: absolute;
	top: -40px;
	width: 100%;
}


.takenotedashboard .footer {
	text-align: center;
	font-style: italic;
	font-size: 0.8em;
	color: gray;
	font-weight: bold;
	border-top: solid 1px #CCC;
}

.takenotedashboard .footer,
#note,
.messageArea {
	width: 500px;
}

.note_title {
	font-family: Georgia;
	line-height: 48px;
	color: #4C4A54;
	width: 468px; /* 500 - 32 padding */
}

.takenotecontainer {
	width: 540px;
	background: rgba(255,255,255, 0.7);
}

.takenotedashboard {
	width: 540px;
	background-color: #F0F4F8;
	padding-bottom: 40px;
}

.note_title_container {
	width: 556px;
	margin-left: -28px;
	-webkit-box-shadow: 0px 1px 1px rgb(96,106,115);
	position:relative;
	background-color: #DCE7F1;
}

@media all and (min-width: 480px) {
	.note_title_container:before {
		content: "";
		position: absolute;
		bottom: -8px;
		left: 0px;
		border-width: 0px 8px 8px 0px;
		border-style: solid;
		border-color: rgba(0,0,0,0) #3A4955 rgba(0,0,0,0) #3A4955;
		background: rgba(0,0,0,0);
		display: block;
		width: 0;
	}

	.note_title_container:after {
		content: "";
		position: absolute;
		bottom: -8px;
		right: 0px;
		border-width: 8px 8px 0px 0px;
		border-style: solid;
		border-color: #3A4955 rgba(0,0,0,0) rgba(0,0,0,0) #3A4955;
		background: rgba(0,0,0,0);
		display: block;
		width: 0;
	}
}

.note_title {
	background: none;
	width: 500px;
	margin-left: 10px;
}

.takenotedashboard,
.takenotecontainer {
	margin: auto;
	margin-top: 20px;
	position: relative;
	display: none;
}

.takenotedashboard,
.takenotecontainer.ready {
	display: block;
}

#note {
	position: relative;
}

.takenotedashboard .footer,
#note,
.messageArea {
	margin: 0 auto;
}

.messageArea {
	position: relative;
	margin-bottom: 20px;
	font-family: monospace;
	border: solid 1px #ccc;
	color: #333;
	padding: 10px 0px 20px 0px;
	text-indent: 4px;
	color: green;
	opacity: 0;
}

.messageArea.warning {
	color: #B38600;
}

.messageArea.error {
	color: red;
}

.messageArea.displayed {
	opacity: 1;
	-webkit-transition: opacity 0.4s ease-in;
}

.takenotecontainer h1 {
	font-size: 3em;
}

#notebody {
	position: relative;
	border: 1px solid gray;
	background: rgba(255,255,255, 0.7);
	margin-top: 18px;
	padding: 16px;
	box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5), -1px -1px 2px rgba(0, 0, 0, 0.5);
}

#newnote {
	height: 24px;
	width: 30px;
	position: absolute;
	top: 6px;
	right: 4px;
	padding: 5px;
	background-repeat: no-repeat;
	background-image: url(/bags/common/tiddlers/saveTiddler.png);
}

.notedate {
	float: right;
	color: rgba(0,0,0, 0.5);
	margin-left: 32px;
}

#notebody .note_text {
	color: #1A1F1E;
	background: transparent;
	width: 100%;
	border: none;
	outline: none;
	clear: both;
	font-family: Georgia;
	font-size: 1.3em;
	line-height: 1.3em;
}

#tips {
	padding: 8px;
	background-color: #DDD;
}

.imageTip img {
	width: 16px;
	height: 16px;
}

.boldTip, .underlineTip, .italicTip {
	margin-left: 2px;
	margin-right: 2px;
}

.boldTip {
	font-weight: bold;
}

.underlineTip {
	text-decoration: underline;
}

.italicTip {
	font-style: italic;
}

#metabutton {
	background: gray;
	width: 32px;
	height: 32px;
	background-repeat: no-repeat;
	background-position: center;
	opacity: 0.3;
	border-radius: 0 0 5px 5px;
	padding: 10px;
	position: absolute;
	bottom: -52px;
	left: 224px;
	-webkit-transition: height 0.2s ease-in-out, bottom 0.2s ease-in-out, opacity 0.2s ease-in-out;
	-moz-transition: height 0.2s ease-in-out, bottom 0.2s ease-in-out, opacity 0.2s ease-in-out;
	-o-transition: height 0.2s ease-in-out, bottom 0.2s ease-in-out, opacity 0.2s ease-in-out;
	-ms-transition: height 0.2s ease-in-out, bottom 0.2s ease-in-out, opacity 0.2s ease-in-out;
	transition: height 0.2s ease-in-out, bottom 0.2s ease-in-out, opacity 0.2s ease-in-out;
}

#metabutton:hover {
	opacity: 0.7;
	height: 35px;
	bottom: -55px;
}

#newnote:hover,
#metabutton:hover {
	cursor: pointer;
}

#notemeta .paddedbox {
	padding: 10px;
}

#notemeta ul {
	list-style: none;
}

.removeTag {
	background-image: url(/bags/common/tiddlers/deleteTiddler.png);
	background-size: 12px 16px;
	background-repeat: no-repeat;
	text-indent: -999px;
	overflow: hidden;
	width: 12px;
	height: 16px;
	display: inline-block;
	margin-left: 8px;
	margin-right: 8px;
	cursor: pointer;
}

.note_title {
	border: none;
	font-size: 3em;
	outline: none;
	padding: 0px 16px;
	text-align: center;
	text-shadow: 0px 1px 1px white;
}

.note_title:focus {
	text-shadow: none;
}

#deletenote {
	position: absolute;
	top: 4px;
	left: 4px;
	background-image: url(/bags/common/tiddlers/deleteTiddler.png);
	background-repeat: no-repeat;
	height: 30px;
	width: 20px;
}

#cancelnote {
	position: absolute;
	top: 4px;
	visibility: hidden;
	right: 235px; /* 500 / 2 - 15px (half width of cancel button) */
	background-image: url(/bags/common/tiddlers/cancelTiddler.png);
	background-repeat: no-repeat;
	height: 30px;
	width: 30px;
}

.validatedNote #cancelnote {
	visibility: visible;
}

#cancelnote,
#deletenote,
#newnote {
	cursor: pointer;
	opacity: 0.3;
	overflow: hidden;
	text-indent: -9999px;
}

#cancelnote:hover,
#newnote:hover,
#deletenote:hover {
	opacity: 1;
}

#backstage a.connectionStatus:hover,
.connectionStatus {
	display: block;
	position: relative;
	-webkit-border-radius: 5px;
	background-color: red;
}

.online #backstage a.connectionStatus:hover,
.online .connectionStatus {
	display: block;
	background-color: green;
}

.connectionStatus:after {
	content: "offline";
	position: absolute;
	top: -6px;
	left: 15px;
	color: #ccc;
}
.online .connectionStatus:after {
	content: "online";
	position: absolute;
	top: -6px;
	left: 15px;
	color: #eee;
}

.requiresConnection {
	display: none;
}

.online .requiresConnection {
	display: block;
}


/* iphone mode */
@media screen and (orientation:portrait) and (max-width: 320px) {
	.note_title {
		padding: 0px;
	}

	#backstage {
		font-size: 0.8em;
	}

	.takenotedashboard,
	.takenotecontainer {
		width: 320px;
		font-size: 0.7em;
	}

	.header h1 {
		font-size: 2em;
	}

	.takenotedashboard .footer,
	#note,
	.messageArea {
		width: 300px;
	}

	#cancelnote {
		right: 145px; /* 320 / 2 - 15px (half width of cancel button) - 16px (padding on note_title) */
	}

	.note_title,
	.note_title_container {
		width: 300px;
		margin: auto;
	}
}

/* portrait mode */
@media screen and (orientation:portrait) and (min-width: 480px) {
	.note_title {
		padding: 0px;
	}

	.takenotedashboard,
	.takenotecontainer {
		width: 480px;
	}

	.takenotedashboard .footer,
	#note,
	.messageArea {
		width: 460px;
	}

	#cancelnote {
		right: 199px; /* 460 / 2 - 15px (half width of cancel button) - 16px (padding on note_title) */
	}

	.note_title,
	.note_title_container {
		width: 460px;
		margin: auto;
	}
}
LyogQSBjb21tYW5kIGxvY2FsaXphdGlvbiBzeXN0ZW0gZm9yIE1hdGhKYXggTGFUZVggKi8KCi8qIFRvIHVzZSwgbWFrZSBzdXJlIFRlWC9uZXdjb21tYW5kLmpzIGlzIGxvYWRlZCBleHBsaWNpdGx5IGFzIGFuIGV4dGVuc2lvbiAqLwoKTWF0aEpheC5IdWIuUmVnaXN0ZXIuU3RhcnR1cEhvb2soIlRlWCBuZXdjb21tYW5kIFJlYWR5IixmdW5jdGlvbiAoKSB7CiAgdmFyIFZFUlNJT04gPSAiMS4wLjEiOwogIAogIHZhciBURVggPSBNYXRoSmF4LklucHV0SmF4LlRlWDsKICB2YXIgVEVYREVGID0gVEVYLkRlZmluaXRpb25zOwogIHZhciBHTE9CQUxTVE9SRSA9IG51bGw7CQkvKiBXZSBpbml0aWFsaXNlIHRoaXMgdG8gbnVsbCBmb3IgdGhlIHB1cnBvc2Ugb2Ygc2FmZXR5IGNoZWNrcyBsYXRlciAtIGl0IHNob3VsZCBiZSBudWxsIGFueXdheSAqLwogIHZhciBTVE9SRURCQVNJQ01BQ1JPUyA9IG51bGw7CgogIC8qCiAgICogTm90IGV2ZXJ5dGhpbmcgaW4gVEVYREVGIGlzIGEgbGlzdCBvZiBjb21tYW5kcy4gIFRoZSBmb2xsb3dpbmcgaXMKICAgKiBhIGxpc3Qgb2YgYWxsIG9mIHRoZSBvYmplY3RzIGluIFRFWERFRiB0aGF0IHdlIHdhbnQgdG8gY29uc2lkZXIKICAgKiB3aGVuIGNvcHlpbmcgY29tbWFuZHMuICBIb3BlZnVsbHkgcmVzdHJpY3Rpbmcgb3Vyc2VsdmVzIHRvIHRoaXMKICAgKiBzdWJzZXQgb2YgVEVYREVGIGlzIGFsbCB3ZSdsbCBuZWVkIHRvIGdldCB1bmV2YWwgd29ya2luZyBpbgogICAqIENocm9taXVtLgogICAqLwogIHZhciBjb21tYW5kTGlzdHMgPSBbIm1hdGhjaGFyMG1pIiwgIm1hdGhjaGFyMG1vIiwgIm1hdGhjaGFyNyIsICJkZWxpbWl0ZXIiLCAibWFjcm9zIiwgImVudmlyb25tZW50Il07CgogIC8qIFdlIG5vdyBtYW5hZ2UgdGhlIHZhcmlhYmxlcyB3ZSBuZWVkIGZvciB0aGUgc3RhY2tzLgkqLwoKICAvKiBtYWNyb1N0YWNrIGlzIGEgdHdvIHBhcnQgYXJyYXkuIFRoZSBmaXJzdCBwYXJ0IHN0b3JlcyB0aGUgY29udHJvbCBzdHJpbmdzIChjcyksIHdoaWxlCSoKICAgKiB0aGUgc2Vjb25kIHBhcnQgc3RvcmVzIHRoZSBkaXNwbGFjZWQgZGVmaW5pdGlvbi4gVGhlc2UgbWlnaHQgYmUgY29tYmluZWQgaW50byBhIHNpbmdsZQkqCiAgICogYXJyYXksIGJ1dCBpdHMgZG9uZSB0aGlzIHdheSBmb3Igbm93IHRvIHN0b3Agb2JqZWN0cyBnZXR0aW5nIG11ZGRsZWQuCQkJKi8KICB2YXIgbWFjcm9TdGFjayA9IG5ldyBBcnJheSgibmFtZSIsICJkZWZpbml0aW9uIik7CgogIC8qIFRoZXNlIGNvbnN0YW50cyBqdXN0IGltcHJvdmUgbGVnaWJpbGl0eSAtIHRoaW5rIG9mIGkgYXMgImluZGV4IgkqCiAgICogc28gaW5kZXggb2YgTkFNRVMsIGluZGV4IG9mIERFRmlOaXRpb25TLgkJCQkqLwogIGNvbnN0IGlOQU1FUyA9IDA7CiAgY29uc3QgaURFRm5TID0gMTsKCiAgLyogSW5pdGlhbGlzZSBtYWNybyBzdGFjayAqLwogIG1hY3JvU3RhY2tbaU5BTUVTXSA9IFtdOwkvKiBbXSBpcyBhbiBlbXB0eSBhcnJheTsgc2FtZSBhcyBzYXlpbmcgbmV3IEFycmF5KCk7ICovCiAgbWFjcm9TdGFja1tpREVGblNdID0gW107CiAgbWFjcm9TdGFja1tpTkFNRVNdWzBdID0gW107CiAgbWFjcm9TdGFja1tpREVGblNdWzBdID0gW107CgogIC8qIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byB0cmFjayB0aGUgc3RhY2sgKi8KICB2YXIgaGVpZ2h0ID0gMDsKICAKICBNYXRoSmF4Lkh1Yi5JbnNlcnQoVEVYREVGLHsKICAgIG1hY3JvczogewoJU2F2ZUdsb2JhbHM6CSdTYXZlR2xvYmFsJywKCUNsZWFuOgkJJ0NsZWFuTG9jYWxzJywKCU1ldGFOZXdDb206CSdNZXRhTmV3Q29tbWFuZCcsCglNZXRhRGVmOgknTWV0YURlZmluZScsCglQdXNoTWFjcm9zOgkncHVzaE1hY3JvcycsCglQb3BNYWNyb3M6CSdwb3BNYWNyb3MnLAoJUG9wQWxsOgkJJ3BvcEFsbCcsCglsZXQ6CQknTGV0JwogICAgfQogIH0pCgogVEVYLlBhcnNlLkF1Z21lbnQoewoKCS8qIF9jaGVja1N0YWNrOiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0IG1ha2VzIHN1cmUgdGhlIHN0YWNrIGF0IGl0cyBjdXJyZW50IGhlaWdodCBpdCBpbml0aWFsaXplZCwgYW5kIGZpeGVzIGl0IGlmIGl0cyBub3QgKi8KCV9jaGVja1N0YWNrOiBmdW5jdGlvbigpewoKCQkvKiBJZiBvdXIgY3VycmVudCBoZWlnaHQgaGFzIG5vdGhpbmcgaW4gaXQsIGluaXRpYWxpc2UgdGhlIGxldmVsLiBOb3RlIHdlIG1heSBoYXZlIGRpc3BsYWNlZCBub3RoaW5nCSoKCQkgKiBzbyBpdHMgbm8gZ29vZCBjaGVja2luZyB0aGUgaURFRm5TIHBhcnQgb2YgbWFjcm9TdG9yZQkJCQkJCSovCgkJaWYobWFjcm9TdGFja1tpTkFNRVNdW2hlaWdodF0gPT0gbnVsbCkJCS8qIEl0IHRoZSBzdGFjayBpcyBub3QgaW5pdGlhbGl6ZWQgKi8KCQkJewoJCQkJbWFjcm9TdGFja1tpTkFNRVNdW2hlaWdodF0gPSBbXTsJLyogRml4IGl0ICovCgkJCQltYWNyb1N0YWNrW2lERUZuU11baGVpZ2h0XSA9IFtdOwoJCQl9Cgl9LAoJCgoJLyogU2F2ZUdsb2JhbDogc3RvcmUgdGhlIGdsb2JhbCBzZXQgb2YgZGVmaW5pdGlvbnMuIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuICovCglTYXZlR2xvYmFsOiBmdW5jdGlvbiAoKSB7CgkJaWYoR0xPQkFMU1RPUkUgPT0gbnVsbCkJLyogV2UgaGF2ZW4ndCBkZWZpbmVkIHRoZSBnbG9iYWwgZGVmaW5pdGlvbiBzZXQgeWV0ICovCgkJewoJCQkvKiBHTE9CQUxTVE9SRSBpcyBnb2luZyB0byBiZSBhIGNvcHkgb2YgVEVYREVGLiBJdCB3aWxsIGJlIGFuIGFzc29jaWF0aXZlIGFycmF5LiBJbml0aWFsaXplIGl0LiAqLwoJCQlHTE9CQUxTVE9SRSA9IFtdOwoKCQkJLyogTm93IHdlIGl0ZXJhdGUgb3ZlciB0aGUgZW50cmllcyBvZiBURVhERUYgYW5kIGNvcHkgdGhlbSBvdmVyIHRvIEdMT0JBTFNUT1JFICovCgkJCWZvciggdmFyIGlMSVNUIGluIGNvbW1hbmRMaXN0cyApewoJCQkJR0xPQkFMU1RPUkVbaUxJU1RdID0gZXZhbCh1bmV2YWwoVEVYREVGW2lMSVNUXSkpOwoJCQl9OwoKCQkJLyogVGhyb3cgYSB3YXJuaW5nIGlmIG1hbnkgbG9jYWwgZW52aXJvbm1lbnRzIGhhdmUgYmVlbiBzdGFja2VkIHVwICovCgkJCWlmKG1hY3JvU3RhY2tbaU5BTUVTXVsxXSAhPSBudWxsKQoJCQl7CgkJCQlhbGVydCgiWW91IGNhbGxlZCBcXFNhdmVHbG9iYWxzLCBidXQgeW91IHBvc3NpYmx5IGhhdmUgbmVzdGVkIGxvY2FsIGVudmlyb25tZW50cy4gXG4gT25seSB0aGUgYmFzZSBsZXZlbCBpcyBndWFyYW50ZWVkIHRvIGJlIHNhdmVkLiIpOwoJCQl9CgoJCQkvKiBOb3cgd2Ugd2FudCBoZWlnaHQgdG8gYmUgc2l0dGluZyBhdCAxIGFmdGVyIGFsbCB0aGlzLCBidXQgaWYgd2UgbmV2ZXIgd2VudCB0aGF0IGhpZ2gJKgoJCQkgKiBiZWZvcmUgc2F2aW5nLCBpdCB3aWxsIGJlIHNpdHRpbmcgYXQgMCBhdCB0aGUgbWludXRlLiBGaXggdGhpcy4JCQkqLwoJCQlpZihoZWlnaHQgPT0gMCl7CgkJCQloZWlnaHQgPSAxOwoJCQkJLyogV2UgaGF2ZSBub3RoaW5nIGF0IHRoaXMgaGVpZ2h0LCBzbyBpbml0aWFsaXplIHRoZSBhcnJheXMgc28gd2UgZG9uJ3QgY2F1c2UgYW55IGNyYXNoZXMgKi8KCQkJCXRoaXMuX2NoZWNrU3RhY2soKTsKCQkJfQoKCQkJLyogQ29weSB0aGUgbG9jYWwgbWFjcm9TdGFjayBmb3IgYmFja3VwIC0gdGhpcyBjb3BpZXMgdGhlIHdob2xlIHRoaW5nLCBhbmQgbm90ZSBiZWNhdXNlIG9mIHRoZSBhYm92ZQkqCgkJCSAqIGl0cyBhbHJlYWR5IHNldCB1cCBhdCBoZWlnaHQgMS4JCQkJCQkJCQkqLwkKCQkJU1RPUkVEQkFTSUNNQUNST1MgPSBldmFsKHVuZXZhbChtYWNyb1N0YWNrKSk7CgoJCX0KCQllbHNlCS8qIFdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhlIGdsb2JhbCBkZWZpbml0aW9uIHNldCwgc28gdGhyb3cgYW4gZXJyb3IgKi8KCQl7CgkJCVRFWC5FcnJvcigiR2xvYmFscyB3ZXJlIGFscmVhZHkgc2F2ZWQuIik7CgkJfQoJICAgIH0sCgoJLyogSW1wbGVtZW50IFxDbGVhbjogdGhpcyByZXN0b3JlcyB0aGUgZ2xvYmFsIG1hY3JvIHN0YXRlIHRvIHRoYXQgc2F2ZWQgYnkgXFNhdmVHbG9iYWxzLgkqCgkgKiBJdCBzaG91bGRuJ3Qgd29yayBpZiBcU2F2ZUdsb2JhbHMgaGFzIG5vdCBiZWVuIGNhbGxlZC4JCQkJCSovCglDbGVhbkxvY2FsczogZnVuY3Rpb24gKCkgewoJCWlmKEdMT0JBTFNUT1JFICE9IG51bGwpCS8qIFdlIHNhdmVkIHNvbWV0aGluZyB0byByZXN0b3JlICovCgkJewoJCQkvKiBDb3B5IGJhY2sgR0xPQkFMU1RPUkUgaW50byBURVhERUYgdG8gcmVzdG9yZSB0aGUgb2xkIGVudmlyb25tZW50LiBURVhERUYgbWF5IGhhdmUgaGFkIHNvbWUgZW50cmllcwkqCgkJCSAqIGFkZGVkLCBvciBwb3NzaWJseSByZW1vdmVkLiBUbyBkZWFsIHdpdGggdGhvc2UgYWRkZWQgd2UgbG9vcCBvdmVyIFRFWERFRidzIGVudHJpZXMgYW5kIGRlbGV0ZQkqCgkJCSAqIGFueXRoaW5nIHRoYXQgaGFzIGJlZW4gYWRkZWQsIHdoaWxlIHJlc3RvcmluZyB0aGUgdmFsdWVzIGZyb20gR0xPQkFMU1RPUkUuIFNlY29uZGx5LCB0byBkZWFsIHdpdGgJKgoJCQkgKiB0aG9zZSBlbnRyaWVzIHRoYXQgbWF5IGhhdmUgYmVlbiByZW1vdmVkLCB3ZSBsb29wIG92ZXIgR0xPQkFMU1RPUkUncyBlbnRyaWVzLCBhbmQgaWYgY29ycmVzcG9uZGluZwkqCgkJCSAqIGVudHJpZXMgZG8gbm90IGV4aXN0IGluIFRFWERFRiwgd2UgY29weSB0aGVtIGFjcm9zcy4JCQkJCQkJKi8KCQkJZm9yKCB2YXIgaUxJU1QgaW4gY29tbWFuZExpc3RzICl7CgkJCQlpZiggR0xPQkFMU1RPUkVbaUxJU1RdICE9IG51bGwpewoJCQkJCVRFWERFRltpTElTVF0gPSBldmFsKHVuZXZhbChHTE9CQUxTVE9SRVtpTElTVF0pKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlkZWxldGUgVEVYREVGW2lMSVNUXTsJLyogRGVhbCB3aXRoIGVudHJpZXMgYWRkZWQgdG8gVEVYREVGICovCgkJCQl9CgkJCX07CgkJCS8qIE5vdyBkZWFsIHdpdGggYW55IGVudHJpZXMgcmVtb3ZlZCBmcm9tIFRFWERFRiAqLwoJCQlmb3IoIHZhciBpTElTVCBpbiBHTE9CQUxTVE9SRSl7CgkJCQlpZihURVhERUZbaUxJU1RdID09IG51bGwpewoJCQkJCVRFWERFRltpTElTVF0gPSBldmFsKHVuZXZhbChHTE9CQUxTVE9SRVtpTElTVF0pKTsKCQkJCX0KCQkJfTsKCgkJCS8qIE5vdyB3ZSBkZWFsIHdpdGggY29uZmlndXJpbmcgbWFjcm9TdGFjayAqLwoKCQkJLyogUmVjb3ZlciB0aGUgc2F2ZWQgbWFjcm8gc3RhY2sgYW5kIHNldCB0aGUgY29ycmVjdCBoZWlnaHQgKi8KCQkJbWFjcm9TdGFjayA9IGV2YWwodW5ldmFsKFNUT1JFREJBU0lDTUFDUk9TKSk7CgkJCWhlaWdodCA9IG1hY3JvU3RhY2tbaU5BTUVTXS5sZW5ndGggLSAxOwoKCQkJLyogQ2hlY2sgdGhlIHN0YWNrIGlzIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGhlaWdodCAtIGl0IHNob3VsZCBiZSwgYnV0IGNoZWNrIGFueXdheSAqLwoJCQlpZihoZWlnaHQgPT0gMCl7CgkJCQloZWlnaHQgPSAxOwoJCQkJLyogV2UgaGF2ZSBub3RoaW5nIGF0IHRoaXMgaGVpZ2h0LCBzbyBpbml0aWFsaXplIHRoZSBhcnJheXMgc28gd2UgZG9uJ3QgY2F1c2UgYW55IGNyYXNoZXMgKi8KCQkJCXRoaXMuX2NoZWNrU3RhY2soKTsKCQkJfQoKCgkJCS8qIENsZWFuIGF3YXkgYW55IG9sZCBsb2NhbCBlbnZpcm9ubWVudHMgKi8KCQkJdGhpcy5wb3BBbGwoKTsKCQkJCgkJfQoJCWVsc2UJLyogV2UgZGlkbid0IGNhbGwgXFNhdmVHbG9iYWxzIGZpcnN0ICovCgkJewoJCQlURVguRXJyb3IoIk5vdGhpbmcgd2FzIHNhdmVkIHRvIHJlc3RvcmUuIikKCQl9CgkgICAgfSwKCgkvKiBfcmVjb3JkTWFjcm86IFRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gd2hpY2ggYWJzdHJhY3RzIG91dCB0aGUgcHJvY2VzcyBvZiBzdG9yaW5nCSoKCSAqIG1hY3JvcyBvbiB0aGUgc3RhY2suIFRoaXMgc2hvdWxkIGhlbHAgcmVkdWNlIGNvZGUgZHVwbGljYXRpb24uCQkJCSovCglfcmVjb3JkTWFjcm86IGZ1bmN0aW9uIChjb21zKXsKCQkvKiBDaGVjayB0aGUgc3RhY2sgYXQgdGhlIGN1cnJlbnQgaGVpZ2h0IGlzIGluaXRpYWxpemVkIHByb3Blcmx5ICovCgkJdGhpcy5fY2hlY2tTdGFjaygpOwoKCQkvKiBOb3cgd2Ugc2F2ZSB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCB3ZSB3YW50IHRvIHJlY29yZCAqLwoJCShtYWNyb1N0YWNrW2lOQU1FU11baGVpZ2h0XSkucHVzaChjb21zKTsKCQkvKiBBbmQgdGhlIChwb3NzaWJseSBOVUxMKSBkaXNwbGFjZWQgZGVmaW5pdGlvbiAqLwoJCShtYWNyb1N0YWNrW2lERUZuU11baGVpZ2h0XSkucHVzaChURVhERUYubWFjcm9zW2NvbXNdKTsKCQkvKiBUaGUgZXZhbCB1bmV2YWwgaXMgZm9yIHNhZmV0eS4gTXkgb3RoZXIgYXJyYXlzIGVuZGVkIHVwIHJlZmVyZW5jaW5nLiBJIHNoYWxsIHRlc3QgdGhpcyBsYXRlciA8PFRFU1Q+PiAgTm90ZSB1c2VkIGluIHBvcCgpLiovCgl9LAoKCS8qIEltcGxlbWVudCBcTWV0YU5ld0NvbSwgb3VyIG5ldyBcbmV3Y29tbWFuZCBmdW5jdGlvbiAqLwoJTWV0YU5ld0NvbW1hbmQ6IGZ1bmN0aW9uIChuYW1lKXsKCQl2YXIgY3MgPSB0aGlzLnRyaW1TcGFjZXModGhpcy5HZXRBcmd1bWVudChuYW1lKSksCgkJbiAgPSB0aGlzLnRyaW1TcGFjZXModGhpcy5HZXRCcmFja2V0cyhuYW1lKSksCgkJZGVmID0gdGhpcy5HZXRBcmd1bWVudChuYW1lKTsKCgkJaWYgKG4gPT09ICcnKSB7biA9IG51bGx9CgkJaWYgKGNzLmNoYXJBdCgwKSA9PT0gIlxcIikge2NzID0gY3Muc3Vic3RyKDEpfQoKCQkvKiBWYXJpb3VzIGVycm9yIGNoZWNrcyAqLwoJCWlmICghY3MubWF0Y2goL14oLnxbYS16XSspJC9pKSkge1RFWC5FcnJvcigiSWxsZWdhbCBjb250cm9sIHNlcXVlbmNlIG5hbWUgZm9yICIrbmFtZSl9CgkJaWYgKG4gIT0gbnVsbCAmJiAhbi5tYXRjaCgvXlswLTldKyQvKSkge1RFWC5FcnJvcigiSWxsZWdhbCBudW1iZXIgb2YgcGFyYW1ldGVycyBzcGVjaWZpZWQgaW4gIituYW1lKX0KCgkJLyogUmVjb3JkIHRoZSBjaGFuZ2UgaW4gbWFjcm8qLwoJCXRoaXMuX3JlY29yZE1hY3JvKGNzKTsKCgkJLyogV3JpdGUgdGhlIG5ldyBtYWNybyAqLwoJCVRFWERFRi5tYWNyb3NbY3NdID0gWydNYWNybycsZGVmLG5dOwoJfSwKCgkvKiBJbXBsZW1lbnQgXE1ldGFEZWYgb3VyIG5ldyBcZGVmIGZ1bmN0aW9uICovCglNZXRhRGVmaW5lOiBmdW5jdGlvbiAobmFtZSl7IAoJCXZhciBjcyA9IHRoaXMuR2V0Q1NuYW1lKG5hbWUpLAoJCXBhcmFtcyA9IHRoaXMuR2V0VGVtcGxhdGUobmFtZSwiXFwiK2NzKSwKCQlkZWYgICAgPSB0aGlzLkdldEFyZ3VtZW50KG5hbWUpOwoKCQkvKiBSZWNvcmQgdGhlIGNoYW5nZSBpbiBtYWNybyAqLwoJCXRoaXMuX3JlY29yZE1hY3JvKGNzKTsKCgkJLyogV3JpdGUgdGhlIG5ldyBvbmUgKi8KCQlpZiAoIShwYXJhbXMgaW5zdGFuY2VvZiBBcnJheSkpCgkJewoJCQlURVhERUYubWFjcm9zW2NzXSA9IFsnTWFjcm8nLGRlZixwYXJhbXNdCgkJfQoJCWVsc2UKCQl7CgkJCVRFWERFRi5tYWNyb3NbY3NdID0gWydNYWNyb1dpdGhUZW1wbGF0ZScsZGVmLHBhcmFtc1swXSxwYXJhbXNbMV1dCgkJfQoJfSwKCgkvKiBwdXNoTWFjcm9zOiBzYXZlIHRoZSBjdXJyZW50IHNldCBvZiBtYWNyb3MgYW5kIGdyYWIgYSBuZXcgZW52aXJvbm1lbnQgdGhhdCBjYW4gYmUgdGhyb3duIGF3YXkgbGF0ZXIgKi8KCXB1c2hNYWNyb3M6IGZ1bmN0aW9uKCl7CgkJLyogV2Ugd2FudCB0byBzdGFydCByZWNvcmRpbmcgc3R1ZmYgb24gYSBuZXcgbGV2ZWwgb2YgbWFjcm9TdGFjayAqLwoJCW1hY3JvU3RhY2tbaU5BTUVTXS5wdXNoKG5ldyBBcnJheSgpKTsKCQltYWNyb1N0YWNrW2lERUZuU10ucHVzaChuZXcgQXJyYXkoKSk7CgoJCS8qIE9mIGNvdXJzZSBub3cgdGhlIGhlaWdodCBpbmNyZWFzZXMgKi8KCQloZWlnaHQrKzsKCX0sCgoJLyogcG9wTWFjcm9zOiBSZXN0b3JlIHRoZSBlbnZpcm9ubWVudCBiZWZvcmUgdGhlIHByZXZpb3VzIHB1c2ggKi8KCXBvcE1hY3JvczogZnVuY3Rpb24oKXsKCQkvKiBXZSBkb24ndCB3YW50IHRvIHRvdWNoIGFueSBzYXZlZCBnbG9iYWwgbWFjcm9zIC0gaWYgd2UncmUgc2FmZSwgY29weSBiYWNrIHRoZSBvbGQgZW52aXJvbm1lbnQgKi8KCQlpZigoR0xPQkFMU1RPUkU9PW51bGwpIHx8IChoZWlnaHQgPiAwKSkKCQl7CgkJCXdoaWxlKG1hY3JvU3RhY2tbaU5BTUVTXVtoZWlnaHRdLmxlbmd0aCA+MCkKCQkJewoJCQkJVEVYREVGLm1hY3Jvc1ttYWNyb1N0YWNrW2lOQU1FU11baGVpZ2h0XS5wb3AoKV0gPSBldmFsKHVuZXZhbChtYWNyb1N0YWNrW2lERUZuU11baGVpZ2h0XS5wb3AoKSkpOwoJCQl9CgoJCQkvKiBOb3cgd2UgZGVjcmVhc2UgaGVpZ2h0IHRvIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSAqLwoJCQlpZigoR0xPQkFMU1RPUkU9PW51bGwpICYmIChoZWlnaHQgPiAwKSkge2hlaWdodCA9IGhlaWdodCAtIDE7fQoJCQllbHNlIGlmKChHTE9CQUxTVE9SRSE9bnVsbCkgJiYgKGhlaWdodCA+IDEpKSB7aGVpZ2h0ID0gaGVpZ2h0IC0gMTt9CgkJfQoJfSwKCgkvKiBwb3BBbGwgcG9wcyBldmVyeXRoaW5nIG9uIHRoZSBzdGFjaywgYW5kIGxlYXZlcyB5b3Ugd2l0aCB0aGUgYmFzZSBnbG9iYWwgZW52aXJvbm1lbnQgKi8KCXBvcEFsbDogZnVuY3Rpb24oKXsKCQkvKiBGaXJzdCBsZXRzIHBvcCBkb3duIHRvIGxldmVsIDEuIE5vdGUgdGhhdCBwb3BNYWNyb3MoKSBtYW5hZ2VzIHRoZSBoZWlnaHQgZm9yIHVzLiAqLwoJCXdoaWxlKGhlaWdodCA+IDEpewoJCQl0aGlzLnBvcE1hY3JvcygpOwoJCX0KCgkJLyogV2UgZG8gb25lIGZ1cnRoZXIgcG9wIHRvIGdldCBiYWNrIHRvIGdsb2JhbHMgLSBub3RlIGlmIHdlIGluY2x1ZGVkIHRoaXMgaW4gdGhlIGxvb3AJKgoJCSAqIHdpdGggZ2xvYmFscyBzYXZlZCB0aGVuIGhlaWdodCB3b3VsZCBzdGF5IGF0IHRoZSB2YWx1ZSAxIGFuZCB3ZSdkIGdldCBhbiBpbmZpbml0ZQkqCgkJICogbG9vcC4gcG9wTWFjcm9zKCkgaGFuZGxlcyBhbGwgdGhlIHNwZWNpYWwgY2FzZXMgZm9yIHVzLgkJCQkqLwoJCXRoaXMucG9wTWFjcm9zKCk7Cgl9LAoKCS8qIEltcGxlbWVudCBcbGV0IGNvbW1hbmQgKi8KCUxldDogZnVuY3Rpb24gKG5hbWUpIHsKCgkJLyoKCQkqIFdlIHVzZSBHZXRDU25hbWUgcmF0aGVyIHRoYW4gR2V0QXJndW1lbnQgYmVjYXVzZQoJCSogd2Ugd2FudCB0byB0aHJvdyBhbiBlcnJvciBpZiBhbiBhcmd1bWVudCBpcwoJCSogZW5jbG9zZWQgaW4gYnJhY2VzLgoJCSovCgkJdmFyIHRhcmdldE5hbWUgPSB0aGlzLkdldENTbmFtZShuYW1lKTsKCgkJLyoKCQkqIFRoZSBmb2xsb3dpbmcgbGluZSBhbGxvd3MgZm9yIGFuIG9wdGlvbmFsICc9JwoJCSogc3ltYm9sIGJldHdlZW4gdGhlIHNvdXJjZSBhbmQgdGFyZ2V0IGNvbW1hbmQKCQkqIG5hbWVzLgoJCSovCgkJaWYgKHRoaXMuR2V0TmV4dCgpID09PSAnPScpIHt0aGlzLmkrK307CgoJCXZhciBzb3VyY2VOYW1lID0gdGhpcy5HZXRDU25hbWUobmFtZSk7CgoJCWlmICghdGFyZ2V0TmFtZS5tYXRjaCgvXigufFthLXpdKykkL2kpKSB7VEVYLkVycm9yKCJJbGxlZ2FsIGNvbnRyb2wgc2VxdWVuY2UgbmFtZSBmb3IgIiArIG5hbWUpfTsKCQlpZiAoIXNvdXJjZU5hbWUubWF0Y2goL14oLnxbYS16XSspJC9pKSkge1RFWC5FcnJvcigiSWxsZWdhbCBjb250cm9sIHNlcXVlbmNlIG5hbWUgZm9yICIgKyBuYW1lKX07CgoKCQkvKiBUaGUgZm9sbG93aW5nIGl0ZXJhdGlvbiBtYWtlcyBzdXJlIHRoYXQgdGhlIGNvbW1hbmQgXHRhcmdldE5hbWUgaXMgbWFkZSB0byBjb2luY2lkZSB3aXRoIFxzb3VyY2VOYW1lLCoKCQkgKiBjb3JyZXNwb25kaW5nIG9mIGNvdXJzZSB0byBcbGV0XHRhcmdldE5hbWVcc291cmNlTmFtZS4JCQkJCQkqLwoJCWZvciAodmFyIGNvbW1hbmRMaXN0IGluIGNvbW1hbmRMaXN0cykgewoKCQkvKgoJCSogTWFrZSBzdXJlIHRoYXQgZm9yIGVhY2ggZGljdGlvbmFyeSB0aGF0IHRoZQoJCSogZW50cnkgZm9yICdzb3VyY2VOYW1lJyBpcyBpZGVudGljYWwgdG8gdGhhdAoJCSogZm9yICd0YXJnZXROYW1lJy4KCQkqLwoJCQlpZiAoVEVYREVGW2NvbW1hbmRMaXN0XVtzb3VyY2VOYW1lXSkgewoJCQkJVEVYREVGW2NvbW1hbmRMaXN0XVt0YXJnZXROYW1lXSA9IFRFWERFRltjb21tYW5kTGlzdF1bc291cmNlTmFtZV07CS8qIE5vdGUsIHRoaXMgaXMgYSByZWZlcmVuY2UgKi8KCQkJfQoJCQllbHNlIGlmIChURVhERUZbY29tbWFuZExpc3RdW3RhcmdldE5hbWVdKSB7CgkJCQlkZWxldGUgVEVYREVGW2NvbW1hbmRMaXN0XVt0YXJnZXROYW1lXQkvKiBpLmUuIGlmIG91ciBmaXJzdCBhcmd1bWVudCB3YXMgbm90aGluZywgcmVtb3ZlIGl0ICovCgkJCX0KCQl9OwogICAgICAgIH0KCgogICAgfSk7CgogIE1hdGhKYXguSHViLlN0YXJ0dXAuc2lnbmFsLlBvc3QoIlRlWCBsb2NhbCBSZWFkeSIpOwoKfSk7CgovKgogKiBBIGZpeCB0aGFua3MgdG8gYW4gZS1tYWlsIGZyb20gRGF2aWRlLgogKgogKiBUaGUgb2xkIGxpbmU6CiAqIE1hdGhKYXguQWpheC5sb2FkQ29tcGxldGUoIkxvY2FsIEV4dGVuc2lvbiIpOwogKgogKiBPbmUgZG9lc24ndCBmZWVkICdsb2FkQ29tcGxldGUnIHNvbWUgYXJiaXRyYXJ5IGZsYWcgbGlrZSB0aGlzLgogKiBJbnN0ZWFkIHlvdSBtdXN0IHBhc3MgYmFjayB0aGUgZmlsZW5hbWUuCiAqLwpNYXRoSmF4LkFqYXgubG9hZENvbXBsZXRlKCJodHRwOi8vb3hrdW5lbmdyb3VwLnRpZGRseXNwYWNlLmNvbS9sb2NhbFRlWC5qcyIpOwo=

/***
|''Name''|TiddlySpaceFollowingSuggestions|
|''Version''|0.2.5dev|
|''Description''|Provides a following macro|
|''Author''|Jon Robson|
|''Requires''|TiddlySpaceFollowingPlugin|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
!Usage

!Code
***/
//{{{
(function($) {

var tweb = config.extensions.tiddlyweb;
var tiddlyspace = config.extensions.tiddlyspace;
var followMacro = config.macros.followTiddlers;

var followSuggestions = config.macros.followSuggestions = {
	cache: {},
	handler: function(place, macroName, params) {
		// to do - limit results
		place = $('<div class="suggestions" />').appendTo(place)[0];
		var currentSpace = tiddlyspace.currentSpace.name;
		var user = params[0] || currentSpace;
		var pleaseWait = $("<div class='loading' />").text("please wait..").appendTo(place);
		tweb.getUserInfo(function(activeUser) {
			if(activeUser.name != tiddlyspace.currentSpace.name) {
				pleaseWait.hide();
				return;
			}
			followMacro.getFollowers(function(users) {
				// suggestions are followers of people that you follow that you don't follow
				var bags = followMacro._getFollowerBags(users);
				var _bags = [];
				for(var i = 0; i < bags.length; i++) {
					_bags.push("bag:%0".format([bags[i]]));
				}
				var bagString = _bags.join(" OR ");
				ajaxReq({
					beforeSend: followMacro.beforeSend,
					url: "/search?q=(%0)&select=title:!%1&select=title:!@%1".format([bagString, activeUser.name]),
					dataType: "json",
					success: function(tiddlers) {
						pleaseWait.hide();
						var suggestions = [];
						for(var i = 0; i < tiddlers.length; i++) {
							var tiddler = tiddlers[i];
							if(tiddler.tags.contains("follow")) {
								var title = tiddler.title;
								if(title.indexOf("@") === 0) {
									title = title.substr(1);
								}
								if(!users.contains(title)) {
									suggestions.pushUnique(title);
								}
							}
						}
						$(place).append("<div>suggestions:</div>");
						var suggestionArea = $("<div class='suggestionArea' />").appendTo(place)[0];
						var id = "more_%0".format([Math.random()]);
						var more = $("<div class='moreButton' />").text("more...").appendTo(place).attr("id", id);
						followSuggestions.cache[id] = suggestions;
						var limit = suggestions.length;
						more.click(function(ev) {
							var suggestions = config.macros.followSuggestions.cache[id];
							var newSuggestions = followSuggestions.suggest(place, suggestions, limit);
							config.macros.followSuggestions.cache[id] = newSuggestions;
						});
						followSuggestions.suggest(place, suggestions, limit);
					
					}
				});
			
			}, user);
		});
	},
	randomize: function(a, b) {
		if(Math.random() < Math.random()) {
			return -1;
		} else {
			return 1;
		}
	},
	suggest: function(place, suggestions, limit) {
		var currentSpace = tiddlyspace.currentSpace.name;
		suggestions = suggestions.sort(followSuggestions.randomize);
		var suggestionsArea = $(".suggestionArea", place)[0];
		if(suggestions.length === 0) {
			$("<span />").text("no suggestions..").appendTo(suggestionsArea);
			return;
		}
		limit = limit < suggestions.length ? limit : suggestions.length;
		for(var j = 0; j < limit; j++) {
			var link = $("<span />").appendTo(suggestionsArea)[0];
			var title = suggestions[j];
			var newTiddler = '@%0 <<newTiddler title:"@%0" fields:"server.workspace:bags/%1_public" tag:follow label:"follow">>\n'.format([title, currentSpace]);
			wikify(newTiddler, link);
		}
		var newSuggestions = suggestions.slice(limit, suggestions.length);
		var more = $(".moreButton", place);
		if(newSuggestions.length == 0) {
			more.remove();
		}
		return newSuggestions;
	}
};
})(jQuery);
//}}}
大家初六開工,我昨天早上已經在教會開工 <<:|>> 看著大家從早到晚出去踢球、打球、聚餐,真是有點難熬。

昨天做了 12 個小時以上,今天晨更後繼續工作後,時間到來公司「繼續」上班。不習慣大螢幕(還要轉頭)、不習慣桌電鍵盤的排列……不過,年假終究是結束了。即使想叫誰還我年假,也不會有結果,只有繼續拼下去了。
----
不過,有個好消息是,至少隨著天氣轉暖,我的積痰與鼻水緩解了…… -- 10:34
!!!!Definitions
{{{
\def\epsilon{\varepsilon}
\def\infinity{\infty}
\def\continuum{\gothic{c}}
}}}

!!!!Notes
The standard $\LaTeX$ {{{\epsilon}}} symbol can be access by {{{\LaTeXepsilon}}}.

!!!!Examples
{{{
\epsilon
\infinity
\continuum
}}}
\[
\epsilon\qquad
\infinity\qquad
\continuum
\]
----

!!!!Definitions
{{{
\def\naturals{\blackBoard{N}}
\def\integers{\blackBoard{Z}}
\def\rationals{\blackBoard{Q}}
\def\reals{\blackBoard{R}}
\def\complexNumbers{\blackBoard{C}}
}}}

!!!!Examples
{{{
\naturals
\integers
\rationals
\reals
\complexNumbers
}}}
\[
\naturals\qquad
\integers\qquad
\rationals\qquad
\reals\qquad
\complexNumbers
\]
----

!!!!Definitions
{{{
\def\half{\frac{1}{2}}
\def\third{\frac{1}{3}}
\def\quarter{\frac{1}{4}}
}}}

!!!!Examples
{{{
\half
\third
\quarter
}}}
\[
\half\qquad
\third\qquad
\quarter
\]
----
*雖然很多人讀到後半部關於 神制定聖所以及祭司服飾樣式的規定覺得很繁瑣很想跳過,不過一邊讀的時候一邊想像那些服飾、帳幕的樣子也挺有趣的,由此可以瞭解 神喜歡什麼樣的美感和聖潔哩。
*摩西真的很愛他的民族呢,當以色列人犯了拜偶像的罪惹動 神的大怒時, 神說寧可只厚待摩西家而不再看顧百姓,摩西趕快請 神看自己的面子上饒恕他們,又盡量求情。果然是舊約時代最大的救援者。
*34:6-7「耶和華在他面前宣告說:耶和華,耶和華,是有憐憫有恩典的神,不輕易發怒,並有豐盛的慈愛和誠實,為千萬人存留慈愛,赦免罪孽、過犯」,對照保羅說過「愛的真諦」是「恆久忍耐又有恩慈,不輕易發怒」,果然真正的愛就是 神的愛, 神果然是愛的根源者!
<!--{{{-->
<div class='toolbar'>
	<span macro='newHere label:"(+子記事"'></span>
	<span macro='tiddler ChildFieldsEditor'></span>
	<span macro='toolbar [[ToolbarCommands::ViewToolbar]] icons:yes height:16 width:16 more:popup'>
</div>
<div class='heading'>
	<span class='spaceSiteIcon'
		macro='tiddlerOrigin label:no spaceLink:yes height:48 width:48 preserveAspectRatio:yes'>
	</span>
	<span class="titleBar">
		<div class='title'>
			<span macro='view title text'></span>
			<span macro='miniTag'></span>
		</div>
		<span class="subtitle" macro='viewRevisions page:5'>
			last modified on
			<span macro="view modified date"></span>
		</span>
		<div macro="view title replyLink"></div>
	</span>
	<span class='followPlaceHolder' macro='followTiddlers'></span>
	<span class='modifierIcon'
		macro='view modifier SiteIcon label:no spaceLink:yes height:48 width:48 preserveAspectRatio:yes'>
	</span>
	<div class='tagClear'></div>
</div>
<div macro='pagr 導覽目錄'></div>
<div class='tagInfo'>
	<div class='tidTags' macro='tags'></div>
	<div class='tagging' macro='tagglyTagging'></div>
	<hr style='border: dashed 1px; height: 1px;' />
	<div class='references' macro='serializerLinks'></div>
</div>
<div class='content'>
	<div class='viewer' macro='view text wikified'></div>
	<span macro="editSections ✐ 編輯本節"></span> 
</div>
<!--}}}-->

/***
|''Name''|MediaWikiTableFormatterPlugin|
|''Description''|Allows MediaWiki style tables in TiddlyWiki|
|''Author''|Martin Budden (mjbudden (at) gmail (dot) com)|
|''Contributors''|FND|
|''Version''|0.1.2|
|''Status''|stable|
|''Source''|http://devpad.tiddlyspot.com/#MediaWikiTableFormatterPlugin|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/formatters/MediaWikiTableFormatterPlugin.js|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.1.0|
!Description
Enables [[MediaWiki|http://www.mediawiki.org]]'s table markup in TiddlyWiki, allowing for multi-line contents within table cells.
(Note that all TiddlyWiki markup still applies.)
!Usage
Detailed documentation available at [[MediaWiki.org|http://www.mediawiki.org/wiki/Help:Tables]].
!!Examples
{{{
{|
! Heading 1
! Heading 2
! Heading 3
|-
| row 1, column 1
| row 1, column 2
| row 1, column 3
|-
| row 2, column 1
| row 2, column 2
| row 2, column 3
|}
}}}
{|
! Heading 1
! Heading 2
! Heading 3
|-
| row 1, column 1
| row 1, column 2
| row 1, column 3
|-
| row 2, column 1
| row 2, column 2
| row 2, column 3
|}
!Revision History
!!v0.1 (2008-10-31)
* initial release
!!v0.1.2 (2008-11-05)
* removed unnecessary code
!Code
***/
//{{{
if(!version.extensions.MediaWikiTableFormatterPlugin) { //# ensure that the plugin is only installed once
version.extensions.MediaWikiTableFormatterPlugin = {installed:true};

if(version.major < 2 || (version.major == 2 && version.minor < 1)) {
	alertAndThrow('MediaWikiTableFormatterPlugin requires TiddlyWiki 2.1 or later.');
}

config.formatters.push({
	name: 'enhancedTable',
	match: '^\\{\\|',
	handler: function(w) {
		var pair = MediaWikiTemplate.findTableBracePair(w.source,w.matchStart);
		if(pair.start==w.matchStart) {
			w.nextMatch = w.matchStart;
			var table = MediaWikiTemplate.createElement(w.output,'table');
			var tbody = MediaWikiTemplate.createElement(table,'tbody'); // required for IE
			var mwt = new MediaWikiTemplate();
			mwt.wikifyTable(tbody,w,pair);
		}
	}
});


MediaWikiTemplate = function()
{
	this.stack = [];
	this.error = false;
	this.tiddler = null;
};

MediaWikiTemplate.createElement = function(parent,element)
{
	return parent.appendChild(document.createElement(element));
}

MediaWikiTemplate.setAttributesFromParams = function(e,p)
{
	var re = /\s*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\w|%|#)*))/mg;
	var match = re.exec(p);
	while(match) {
		var s = match[1].unDash();
		if(s == 'bgcolor') {
			s = 'backgroundColor';
		}
		try {
			if(match[2]) {
				e.setAttribute(s,match[2]);
			} else if(match[3]) {
				e.setAttribute(s,match[3]);
			} else {
				e.setAttribute(s,match[4]);
			}
		}
		catch(ex) {}
		match = re.exec(p);
	}
};

MediaWikiTemplate.findRawDelimiter = function(delimiter,text,start)
//# find a delimiter that is not enclosed by [[..]]
{
	var d = text.indexOf(delimiter,start);
	if(d==-1)
		return -1;
	var b = {start:-1,end:-1};
	var bs = text.indexOf('[[',start);
	if(bs==-1 || bs >d)
		return d;
	var s1 = -1;
	if(bs!=-1 && bs <d) {
		var be = text.indexOf(']]',bs);
		if(be!=-1) {
			b.start = bs;
			b.end = be;
		}
	}
	if(b.start!=-1 && d>b.start)
		s1 = b.end+2;
	return s1==-1 ? d : MediaWikiTemplate.findRawDelimiter(delimiter,text,s1);
};

MediaWikiTemplate.findTableBracePair = function(text,start)
{
	var ret = {start:-1,end:-1};
	var s = text.indexOf('{|',start);
	if(s==-1)
		return ret;
	var e = text.indexOf('\n|}',s+2);
	if(e==-1)
		return ret;
	e++;
	var s2 = text.indexOf('{|',s+2);
	if(s2==-1 || s2 > e)
		return {start:s,end:e};
	var tp = MediaWikiTemplate.findTableBracePair(text,s+2);
	while(tp.end!=-1 && e>tp.start && e<=tp.end) {
		//# intervening table brace pair, so skip over
		e = tp.end+2;
		tp = MediaWikiTemplate.findTableBracePair(text,e);
		e = text.indexOf('\n|}',e);
		if(e==-1)
			return ret;
		e++;
	}
	return {start:s,end:e};
};

MediaWikiTemplate.prototype.wikifyTable = function(table,w,pair)
{
	function lineEnd(w) {
		var r = w.source.indexOf('\n',w.nextMatch);
		while(r!=-1) {
			var n = w.source.substr(r+1,1);
			if(n=='|' || n=='!' || (n=='{' && w.source.substr(r+2,1)=='|'))
				break;
			r = w.source.indexOf('\n',r+1);
		}
		return r;
	}
	function subWikifyText(e,w,text) {
			var oldSource = w.source; var oldMatch = w.nextMatch;
			w.source = text; w.nextMatch = 0;
			w.subWikifyUnterm(e);
			w.source = oldSource; w.nextMatch = oldMatch;
	}
	//# skip over {|
	w.nextMatch += 2;
	var i = lineEnd(w);
	if(i>w.nextMatch) {
		MediaWikiTemplate.setAttributesFromParams(table.parentNode,w.source.substring(w.nextMatch,i));
		w.nextMatch = i;
	}
	w.nextMatch++;
	if(w.source.substr(w.nextMatch,2)=='|+') {
		var caption = MediaWikiTemplate.createElement(table,'caption');
		w.nextMatch += 2;
		i = lineEnd(w);
		var d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
		if(d!=-1 && d<i) {
			MediaWikiTemplate.setAttributesFromParams(caption,w.source.substring(w.nextMatch,d));
			w.nextMatch = d+1;
		}
		w.subWikifyTerm(caption,/(\n)/mg);
	}
	var tr = MediaWikiTemplate.createElement(table,'tr');
	if(w.source.substr(w.nextMatch,2)=='|-') {
		w.nextMatch += 2;
		i = lineEnd(w);
		if(i>w.nextMatch) {
			MediaWikiTemplate.setAttributesFromParams(tr,w.source.substring(w.nextMatch,i));
			w.nextMatch = i;
		}
		w.nextMatch++;
	}
	var x = w.source.substr(w.nextMatch,2);
	while(x!='|}') {
		if(x=='{|') {
			//# nested table
			var pair2 = MediaWikiTemplate.findTableBracePair(w.source,w.nextMatch);
			if(pair2.start==w.nextMatch) {
				var table2 = MediaWikiTemplate.createElement(cell,'table');
				this.wikifyTable(table2,w,pair2);
			}
		} else if(x=='|-') {
			//# new row
			tr = MediaWikiTemplate.createElement(table,'tr');
			w.nextMatch += 2;
			i = lineEnd(w);
			if(i==-1)
				break;
			if(i>w.nextMatch) {
				MediaWikiTemplate.setAttributesFromParams(tr,w.source.substring(w.nextMatch,i));
				w.nextMatch = i;
			}
			w.nextMatch++;
		} else if(x.substr(0,1)=='!') {
			//# header cell
			w.nextMatch++;
			i = lineEnd(w);
			if(i==-1)
				break;
			var cell = MediaWikiTemplate.createElement(tr,'th');
			var c = w.source.indexOf('!!',w.nextMatch);
			while(c!=-1 && c<i) {
				d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
				if(d!=-1 && d<c) {
					MediaWikiTemplate.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
					w.nextMatch = d+1;
				}
				while(w.source.substr(w.nextMatch,1)==' ') {
					w.nextMatch++;
				}
				w.subWikifyTerm(cell,/(\!\!)/mg);
				cell = MediaWikiTemplate.createElement(tr,'th');
				c = w.source.indexOf('!!',w.nextMatch);
			}
			d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
			if(d!=-1 && d<i) {
				MediaWikiTemplate.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
				w.nextMatch = d+1;
			}
			while(w.source.substr(w.nextMatch,1)==' ') {
				w.nextMatch++;
			}
			subWikifyText(cell,w,w.source.substring(w.nextMatch,i));
			w.nextMatch = i+1;
		} else if(x.substr(0,1)=='|') {
			//# cell
			w.nextMatch++;
			i = lineEnd(w);
			if(i==-1)
				break;
			cell = MediaWikiTemplate.createElement(tr,'td');
			c = w.source.indexOf('||',w.nextMatch);
			while(c!=-1 && c<i) {
				d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
				if(d!=-1 && d<c) {
					MediaWikiTemplate.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
					w.nextMatch = d+1;
				}
				while(w.source.substr(w.nextMatch,1)==' ') {
					w.nextMatch++;
				}
				w.subWikifyTerm(cell,/(\|\|)/mg);
				cell = MediaWikiTemplate.createElement(tr,'td');
				c = w.source.indexOf('||',w.nextMatch);
			}
			d = MediaWikiTemplate.findRawDelimiter('|',w.source,w.nextMatch);
			if(d!=-1 && d<i) {
				MediaWikiTemplate.setAttributesFromParams(cell,w.source.substring(w.nextMatch,d));
				w.nextMatch = d+1;
			}
			while(w.source.substr(w.nextMatch,1)==' ') {
				w.nextMatch++;
			}
			subWikifyText(cell,w,w.source.substring(w.nextMatch,i));
			w.nextMatch = i+1;
		}
		x = w.source.substr(w.nextMatch,2);
	}
	w.nextMatch = pair.end + 3;
	return;
};

} //# end of 'install only once'
//}}}
[[本站簡介]]<<tiddler ThisSpaceMainMenu>>@@position:relative;+++^15em^*@[分站一覽]
*@gjrobert:主站——信仰、思考、生活
*@gjrobert-info:資訊與網路
*@gjrobert-linst:歷史、語言、政治、文化議題
*@gjrobert-ko:韓文筆記
===@@
<<tiddler GlobalAlias>><<tiddler ThisSpaceAlias>>
獨立的「Google 字典」網站消失,變得超難用,翻譯工作哀鴻遍野 <<XD>>

只好先用我不喜歡的 Yahoo 奇摩服務。
臺北時間今天 8:04 美國維吉尼亞州發生規模 5.4 的地震耶!那是在美東,並非環太平洋地震帶上的地區喔!美國人應該都嚇到了,我看到來自紐約的教會傳道師也在他 FB 上提到了呢!

這兩年全球地震頻傳,是否會擴及更多地區呢?
----
補充:震的是華府地區!就像海地大地震震央就在首都太子港附近一樣!(參閱「[[大地震撼華府 喚起911記憶-Yahoo!奇摩新聞|http://tw.news.yahoo.com/article/url/d/a/110824/5/2xfpv.html]]」)
上週三、四分別是 Day 02、03,
*Day 02 一樣看影片,講內輪差、視野還有事故處理
*Day 03 終於碰到車了~但只碰到後座 <<XD>> 前半堂在教室裡摸假的駕駛座、學方向盤操作,後半堂是全部學員圍坐後座瞭解儀表板、駕駛座,還有看五油三水的保養……

上週五本來應該是 Day 04,但因週二、五固定要上韓文,所以就先請假,想說今天週一再和教練談怎樣調時間。所以今天才是 Day 04,終於見到教練。

一如預期,教練通常都有點嚴肅,不過我就乖乖地聽從教練指示做。教練先把車開到訓練場深處的一小段車道,說明今天是要上緩慢行駛前進後退。
#踩住剎車
#離合器踩到底~~(一定要踩到底,不然上檔卡出聲音時教練會不爽 <<XD>>)~~
#排上一檔
#放剎車
#輕放離合器;絕不可全放,幾乎一定會導致車子熄火;輕放到引擎轉速變慢,感覺開始把動力送到車輪上後,就要緩放、維持
#車子緩緩前進,如果前進太快就要再踩離合器減速
#前進到目標處就要再把離合器踩到底,同時也踩剎車,讓車停住
**~~這時不熟練的話就會停得很猛,讓人不舒服。不知道考照時做不好的話會不會扣分啊~<<:s>>~~
#排上倒檔
#放剎車
**~~但因為今天那個場地其實有點極緩的上坡,所以全放剎車的話車子馬上就往後滑了,所以得一邊放離合器,一邊輕輕帶點剎車(又不能剎太死不然感覺車子又沒什麼動),真是 tricky……~~
#輕放離合器,拿捏後退速度,必要時要輕踩
#退到目標處再把離合器踩到底,並完全把車剎住
光是這些步驟的循環練習就讓我做得一個頭兩個大……真不知是不是今晨沒有起來禱告的關係 <<:$>>(對了,我學的是手排,嘿嘿嘿很有挑戰心吧)

因為一直出現小錯,所以教練會常出聲甚至出手提醒(比如說把我的手放回方向盤上 <<XD>>)。呼……汽車真是比機車複雜好幾倍的一種機械啊,比起來機車真是超簡單的啊 <<XD>> <<XD>> <<XD>> 開過車以後我在騎車時應該更會體諒汽車駕駛的死角和反應速度了……

然後另外就是因為一直要出力踩兩種踏板,又不熟,所以很難放鬆,四十分鐘練下來也是有點腳軟。

感覺這個項目之後不會再有機會練。嗚!希望明天迎接更新的挑戰時,能夠快點跟上。主唷!果然需要為了各樣的學習禱告,才會順利吧!
教會學長昨日最經典:
<<<
精神腐敗的人們啊!
別老怪自己「以前沒學好」
但是卻依然「當下不做好」
然後騙自己「明天會更好」
Gentlemen! Start Your Engine!!!
<<<
平常我就是個常把機車鑰匙忘在行李箱上的人~~(我不會把車牌號碼告訴你的 <<==>>)~~,但總是有好心的路人或其他騎士幫我把鑰匙拔下來藏回安全帽裡,包括之前有次週末去臺中兩天,過程中發現鑰匙沒在身上,後來回臺北發現果然在安全帽裡沒帶去 <<XD>> <<XD>> <<XD>>

這週也很好笑。先是週一公司員工旅遊晚上回來,要騎車時才發現鑰匙在安全帽裡(玩了一天都沒發現……<<==>>),正當我要拿出來時,旁邊騎樓居然有個年輕男生過來和善地說「先生你的鑰匙早上沒拔,我幫你放進去了」,襪,想不到早上幫我藏好鑰匙的人天使,我晚上回來還能看到他本人,真是太妙了。

然後今天也是,早到了公司,在人行道上搬車要挪空位停車,停好以後看到路過公車上的佈道大會廣告,我想得出神,轉身要走時,回頭就看到一位年輕小姐騎車經過特地停下來說「先生,你鑰匙沒拔!」我趕快帶著既感激又不好意思的表情向她說謝謝。哈哈,這禮拜不只鑰匙都被保守好,甚至還看到這些好心的人們飄然而過,真是讓人覺得好貼心好感謝喔~主唷~<<大心>>
*昨晚回深坑睡,清晨室內溫度一直是 13 度,掙扎禱告到一半去拿棉被裹住下半身,但四點多還是睡著了 <<:$>>
昨晚下班趕去萬芳教會要陪爸媽聽聖經課程,想不到飆到將近大安森林公園天橋時突然催不了油了,瞬間發現機車油門線已拉斷,只好用餘速滑行到路邊~~(感謝 神過程中沒有對交通及安全造成太大干擾)~~,正好看到個車位,停好以後回頭攔了部計程車,跳上車就繼續前進了。

昨晚和今早雖然沒了機車,但交通上倒沒受太大影響:昨晚可以坐弟兄的機車回弟兄之家,今早去文山駕訓班學車,也只要坐一站捷運,都很便捷,沒花太多時間。

學完車就想到要不要趁上班前把機車修好,打電話問了深坑東南技術學院下面平常去的車行,但老闆今天不方便出來臺北幫我修~~(是的,以前如果我車拋錨在臺北市,他有空的話就會帶工具出來幫我修……我都是這樣找他的 <<XD>>)~~,我只好決定做一件幾年都沒做過的事,就是__在臺北市修機車__……~~(說得好像臺北市多可怕一樣……其實我只是習慣、信賴深坑家這邊的店家,而且修久了也會算比較便宜 <<:p>>)~~

搭捷運到科技大樓再轉公車,然後走到溫州街口都還挺方便。找到車後往公司的方向推,想找看來不錯的機車行,想不到和平東路上兩家車行都不像深坑那家那麼早營業,早上八點多還是鐵門深鎖。原本停在第二家「興利車業行」等了十幾分鐘想等到開門,後來想不如就車丟著先去上班趕案子,回頭再打電話--遙控--請老闆幫忙修好,等中午公司員工聚餐(今天真剛好就在師大附近!)完畢,就可去付錢牽車。事就這麼順利進行了,剛才全公司吃完「主廚之家」以後,我出來發現離興利車業行就只有 100m 而已,輕鬆走去,老闆伯伯已依約修好油門線,而且更感謝的是,他還順手幫我把鬆脫一年多的龍頭車殼用螺絲鎖在一起,又順手鎖好昨天鬆掉的後照鏡,總共實收 $500 而已,價格也很公道,也有免費的サビス,那我能怎樣回報他呢!那就在網路上說他好話好了 <<哈>> 感謝 神,讓我今天又順利迅速解決交通問題。
#[[白花]]
#[[呼喊我主的聖名]]
#[[如同我主的內心]]
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAIAAACQKrqGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpiXH7hFQNxgImBaMACoZyUBfAo2nf3A0Lpyy8/K3fdxqpuS5whuQ5QEuJsd1OFi2K1AaqUm41ZV4IHwvZZdB57CEToiwIRkPX119/LL77A1aWaymA3Fahuz913s08/gXCRHYMervfefUdWB3cMulKgvXB/AO0FehF7CCCrA5oHVAf0ImaYgJQiq4Pbu+Lia7iKqy+/o7gVl/uQAUCAAQD1Kj/iAwreLgAAAABJRU5ErkJggg==
/%
|Name|QuickEdit_split|
|Source|http://www.TiddlyTools.com/#QuickEdit_split|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - move selection to new tiddler and insert link, embedded tiddler, or slider|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

Based on ideas originally developed by YannPerrin
(http://yann.perrin.googlepages.com/twkd.html#easySlicer)

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="move selection to new tiddler and insert link, embedded tiddler, or slider"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	p.style.whiteSpace='nowrap';
	var i=createTiddlyElement(p,'input');
	i.defaultValue='Enter a new tiddler title';
	i.onfocus=function(){this.select()};
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select type...','');
	s.options[0].title='select split type';
	s.options[1]=new Option('link','link');
	s.options[1].title='replace with [[TiddlerName]]';
	s.options[2]=new Option('embed','embed');
	s.options[2].title='replace with \<\<tiddler TiddlerName\>\>';
	s.options[3]=new Option('slider','slider');
	s.options[3].title='replace with \<\<slider \u0022\u0022 [[TiddlerName]] [[label]] [[tooltip]]\>\>';
	s.onchange=function(){
		if (s.previousSibling.value==s.previousSibling.defaultValue)
			{ alert('A tiddler title is required'); s.selectedIndex=0; s.previousSibling.focus(); return false; }
		var tid=s.previousSibling.value;
		if (store.tiddlerExists(tid) && !confirm(config.messages.overwriteWarning.format([tid])))
			{ s.previousSibling.focus(); return false; }
		switch(s.value) {
			case 'link':
				var newtxt='[['+tid+']]';
				break;
			case 'embed':
				var newtxt='\<\<tiddler [['+tid+']]\>\>';
				break;
			case 'slider':
				var label=prompt('Enter a slider label',tid);
				if (!label) { Popup.remove(); return false; }
				var tip=prompt('Enter a slider tooltip',label);
				if (!tip) { Popup.remove(); return false; }
				var newtxt='\<\<slider \u0022\u0022 [['+tid+']] [['+label+']] [['+tip+']]\>\>';
				break;
		}
		var txt=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		store.saveTiddler(tid,tid,txt,config.options.txtUserName,new Date(),[],{});
		story.displayTiddler(story.findContainingTiddler(this.button),tid);
		config.quickEdit.setSelection(this.button,newtxt);
		Popup.remove(); return false;
	};
	Popup.show();
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>split</a></html>
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description

Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.

''Syntax:'' 
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]]  is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].

!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features: 
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) 
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features: 
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs: 
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features: 
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version

!Code
***/
//{{{

	
//============================================================================
//============================================================================
//		   ForEachTiddlerPlugin
//============================================================================
//============================================================================

// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {

if (!window.abego) window.abego = {};

version.extensions.ForEachTiddlerPlugin = {
	major: 1, minor: 0, revision: 8, 
	date: new Date(2007,3,12), 
	source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
	licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
	copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};

// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
	TiddlyWiki.prototype.forEachTiddler = function(callback) {
		for(var t in this.tiddlers) {
			callback.call(this,t,this.tiddlers[t]);
		}
	};
}

//============================================================================
// forEachTiddler Macro
//============================================================================

version.extensions.forEachTiddler = {
	major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};

// ---------------------------------------------------------------------------
// Configurations and constants 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler = {
	 // Standard Properties
	 label: "forEachTiddler",
	 prompt: "Perform actions on a (sorted) selection of tiddlers",

	 // actions
	 actions: {
		 addToList: {},
		 write: {}
	 }
};

// ---------------------------------------------------------------------------
//  The forEachTiddler Macro Handler 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler.getContainingTiddler = function(e) {
	while(e && !hasClass(e,"tiddler"))
		e = e.parentNode;
	var title = e ? e.getAttribute("tiddler") : null; 
	return title ? store.getTiddler(title) : null;
};

config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);

	if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params
	// Parse the "in" clause
	var tiddlyWikiPath = undefined;
	if ((i < params.length) && params[i] == "in") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "TiddlyWiki path expected behind 'in'.");
			return;
		}
		tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the where clause
	var whereClause ="true";
	if ((i < params.length) && params[i] == "where") {
		i++;
		whereClause = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the sort stuff
	var sortClause = null;
	var sortAscending = true; 
	if ((i < params.length) && params[i] == "sortBy") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "sortClause missing behind 'sortBy'.");
			return;
		}
		sortClause = this.paramEncode(params[i]);
		i++;

		if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
			 sortAscending = params[i] == "ascending";
			 i++;
		}
	}

	// Parse the script
	var scriptText = null;
	if ((i < params.length) && params[i] == "script") {
		i++;
		scriptText = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the action. 
	// When we are already at the end use the default action
	var actionName = "addToList";
	if (i < params.length) {
	   if (!config.macros.forEachTiddler.actions[params[i]]) {
			this.handleError(place, "Unknown action '"+params[i]+"'.");
			return;
		} else {
			actionName = params[i]; 
			i++;
		}
	} 
	
	// Get the action parameter
	// (the parsing is done inside the individual action implementation.)
	var actionParameter = params.slice(i);


	// --- Processing ------------------------------------------
	try {
		this.performMacro({
				place: place, 
				inTiddler: tiddler,
				whereClause: whereClause, 
				sortClause: sortClause, 
				sortAscending: sortAscending, 
				actionName: actionName, 
				actionParameter: actionParameter, 
				scriptText: scriptText, 
				tiddlyWikiPath: tiddlyWikiPath});

	} catch (e) {
		this.handleError(place, e);
	}
};

// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {

	var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);

	var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
	context["tiddlyWiki"] = tiddlyWiki;
	
	// Get the tiddlers, as defined by the whereClause
	var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
	context["tiddlers"] = tiddlers;

	// Sort the tiddlers, when sorting is required.
	if (parameter.sortClause) {
		this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
	}

	return {tiddlers: tiddlers, context: context};
};

// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
	return this.getTiddlersAndContext(parameter).tiddlers;
};

// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
//				  The following properties are supported:
//
//						place
//						whereClause
//						sortClause
//						sortAscending
//						actionName
//						actionParameter
//						scriptText
//						tiddlyWikiPath
//
//					All properties are optional. 
//					For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
	var tiddlersAndContext = this.getTiddlersAndContext(parameter);

	// Perform the action
	var actionName = parameter.actionName ? parameter.actionName : "addToList";
	var action = config.macros.forEachTiddler.actions[actionName];
	if (!action) {
		this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
		return;
	}

	var actionHandler = action.handler;
	actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};

// ---------------------------------------------------------------------------
//  The actions 
// ---------------------------------------------------------------------------

// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;

	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
		return;
	}

	// Perform the action.
	var list = document.createElement("ul");
	place.appendChild(list);
	for (var i = 0; i < tiddlers.length; i++) {
		var tiddler = tiddlers[i];
		var listItem = document.createElement("li");
		list.appendChild(listItem);
		createTiddlyLink(listItem, tiddler.title, true);
	}
};

abego.parseNamedParameter = function(name, parameter, i) {
	var beginExpression = null;
	if ((i < parameter.length) && parameter[i] == name) {
		i++;
		if (i >= parameter.length) {
			throw "Missing text behind '%0'".format([name]);
		}
		
		return config.macros.forEachTiddler.paramEncode(parameter[i]);
	}
	return null;
}

// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;
	if (p >= parameter.length) {
		this.handleError(place, "Missing expression behind 'write'.");
		return;
	}

	var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
	p++;

	// Parse the "begin" option
	var beginExpression = abego.parseNamedParameter("begin", parameter, p);
	if (beginExpression !== null) 
		p += 2;
	var endExpression = abego.parseNamedParameter("end", parameter, p);
	if (endExpression !== null) 
		p += 2;
	var noneExpression = abego.parseNamedParameter("none", parameter, p);
	if (noneExpression !== null) 
		p += 2;

	// Parse the "toFile" option
	var filename = null;
	var lineSeparator = undefined;
	if ((p < parameter.length) && parameter[p] == "toFile") {
		p++;
		if (p >= parameter.length) {
			this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
			return;
		}
		
		filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
		p++;
		if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
			p++;
			if (p >= parameter.length) {
				this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
				return;
			}
			lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
			p++;
		}
	}
	
	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
		return;
	}

	// Perform the action.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
	var count = tiddlers.length;
	var text = "";
	if (count > 0 && beginExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
	
	for (var i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		text += func(tiddler, context, count, i);
	}
	
	if (count > 0 && endExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);

	if (count == 0 && noneExpression) 
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
		

	if (filename) {
		if (lineSeparator !== undefined) {
			lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
			text = text.replace(/\n/mg,lineSeparator);
		}
		saveFile(filename, convertUnicodeToUTF8(text));
	} else {
		var wrapper = createTiddlyElement(place, "span");
		wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
	}
};


// ---------------------------------------------------------------------------
//  Helpers
// ---------------------------------------------------------------------------

// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
	return {
		place : placeParam, 
		whereClause : whereClauseParam, 
		sortClause : sortClauseParam, 
		sortAscending : sortAscendingParam, 
		script : scriptText,
		actionName : actionNameParam, 
		actionParameter : actionParameterParam,
		tiddlyWikiPath : tiddlyWikiPathParam,
		inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
		viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
	};
};

// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of 
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
	if (!idPrefix) {
		idPrefix = "store";
	}
	var lenPrefix = idPrefix.length;
	
	// Read the content of the given file
	var content = loadFile(this.getLocalPath(path));
	if(content === null) {
		throw "TiddlyWiki '"+path+"' not found.";
	}
	
	var tiddlyWiki = new TiddlyWiki();

	// Starting with TW 2.2 there is a helper function to import the tiddlers
	if (tiddlyWiki.importTiddlyWiki) {
		if (!tiddlyWiki.importTiddlyWiki(content))
			throw "File '"+path+"' is not a TiddlyWiki.";
		tiddlyWiki.dirty = false;
		return tiddlyWiki;
	}
	
	// The legacy code, for TW < 2.2
	
	// Locate the storeArea div's
	var posOpeningDiv = content.indexOf(startSaveArea);
	var posClosingDiv = content.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
		throw "File '"+path+"' is not a TiddlyWiki.";
	}
	var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
	
	// Create a "div" element that contains the storage text
	var myStorageDiv = document.createElement("div");
	myStorageDiv.innerHTML = storageText;
	myStorageDiv.normalize();
	
	// Create all tiddlers in a new TiddlyWiki
	// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
	var store = myStorageDiv.childNodes;
	for(var t = 0; t < store.length; t++) {
		var e = store[t];
		var title = null;
		if(e.getAttribute)
			title = e.getAttribute("tiddler");
		if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
			title = e.id.substr(lenPrefix);
		if(title && title !== "") {
			var tiddler = tiddlyWiki.createTiddler(title);
			tiddler.loadFromDiv(e,title);
		}
	}
	tiddlyWiki.dirty = false;

	return tiddlyWiki;
};


	
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
// 
//	 (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
	var script = context["script"];
	var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
	var fullText = (script ? script+";" : "")+functionText+";theFunction;";
	return eval(fullText);
};

// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
	var result = [];
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
	tiddlyWiki.forEachTiddler(function(title,tiddler) {
		if (func(tiddler, context, undefined, undefined)) {
			result.push(tiddler);
		}
	});
	return result;
};

// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
	var message = "Extra parameter behind '"+actionName+"':";
	for (var i = firstUnusedIndex; i < parameter.length; i++) {
		message += " "+parameter[i];
	}
	this.handleError(place, message);
};

// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? -1 
			   : +1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? +1 
			   : -1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
	// To avoid evaluating the sortClause whenever two items are compared 
	// we pre-calculate the sortValue for every item in the array and store it in a 
	// temporary property ("forEachTiddlerSortValue") of the tiddlers.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
	var count = tiddlers.length;
	var i;
	for (i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
	}

	// Do the sorting
	tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);

	// Delete the temporary property that holds the sortValue.	
	for (i = 0; i < tiddlers.length; i++) {
		delete tiddlers[i].forEachTiddlerSortValue;
	}
};


// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
	displayMessage(message);
};

// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
	var message ="<<"+macroName;
	for (var i = 0; i < params.length; i++) {
		message += " "+params[i];
	}
	message += ">>";
	displayMessage(message);
};


// Internal.
//
// Creates an element that holds an error message
// 
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
	var message = (exception.description) ? exception.description : exception.toString();
	return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};

// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
	if (place) {
		this.createErrorElement(place, exception);
	} else {
		throw exception;
	}
};

// Internal.
//
// Encodes the given string.
//
// Replaces 
//	 "$))" to ">>"
//	 "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
	var reGTGT = new RegExp("\\$\\)\\)","mg");
	var reGT = new RegExp("\\$\\)","mg");
	return s.replace(reGTGT, ">>").replace(reGT, ">");
};

// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
// 
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
	// Remove any location part of the URL
	var hashPos = originalPath.indexOf("#");
	if(hashPos != -1)
		originalPath = originalPath.substr(0,hashPos);
	// Convert to a native file format assuming
	// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
	// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
	// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
	// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
	var localPath;
	if(originalPath.charAt(9) == ":") // pc local file
		localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
		localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(7));
	else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(5));
	else // pc network file
		localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");	
	return localPath;
};

// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
	".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
	"forEachTiddler");

//============================================================================
// End of forEachTiddler Macro
//============================================================================


//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
	var n =  prefix.length;
	return (this.length >= n) && (this.slice(0, n) == prefix);
};



//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
	var n = suffix.length;
	return (this.length >= n) && (this.right(n) == suffix);
};


//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
	return this.indexOf(substring) >= 0;
};

//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or 
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == item) {
			return i;
		}
	}
	return -1;
};

//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false. 
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
	return (this.indexOf(item) >= 0);
};

//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements 
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (this.contains(items[i])) {
			return true;
		}
	}
	return false;
};


//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
// 
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null] 
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (!this.contains(items[i])) {
			return false;
		}
	}
	return true;
};


} // of "install only once"

// Used Globals (for JSLint) ==============
// ... DOM
/*global 	document */
// ... TiddlyWiki Core
/*global 	convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, 
			displayMessage, endSaveArea, hasClass, loadFile, saveFile, 
			startSaveArea, store, wikify */
//}}}


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/

不再兼任 PM 以後,公司不少專案的翻譯或審稿又開始源源不絕而來。要保持不加班的目標,又要滿足業績的要求,我也得多專心了!
很久沒有這樣的經歷了,就是和一位你可能一輩子都不會再見面的人道別。當然,我之前和他也沒見過幾次面,也並不是他來臺灣和來教會中最熟的人,不過因為他還挺可愛的,所以會珍惜這樣的離別吧。嗯,很久沒有和你可能一輩子都不會再見面的人道別,感覺還挺痛的……~~(雖然說還是可以透過即時通訊聯絡……)~~
/***
|Name|SectionLinksPlugin|
|Source|http://www.TiddlyTools.com/#SectionLinksPlugin|
|Documentation|http://www.TiddlyTools.com/#SectionLinksPlugin|
|Version|1.4.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|allow tiddler sections in TiddlyLinks to be used as anchor points|
This plugin enhances tiddler links so that they can include section references that ''auto-scroll to the indicated section heading'' within a tiddler (i.e., similar to the 'anchor' behavior provided in HTML by {{{<a name="foo">}}} and {{{<a href="#foo">...</a>}}}).  The {{{<<tiddler>>}}} macro syntax has also be extended to allow section references without a tiddler name, so that transclusion of //hidden sections from the same tiddler// can be easily accomplished.  The plugin also adds a new macro, <<sectionTOC>> which can auto-generate and embed a 'Table of Contents' outline view into a tiddler to enable quick navigation to sections within that tiddler.
!!!Usage
<<<
!!!!~TiddlyLink syntax
You can link to a section of a tiddler by adding the "##sectionname" syntax to the tiddlername:
{{{
[[SomeTiddler##SomeSection]]
}}}
When clicked, the tiddler is displayed and the specified section heading is automatically scrolled into view. If the tiddler title is omitted or the 'here' keyword is used, e.g.,
{{{
[[##SomeSection]] or [[here##SomeSection]]>>
}}}
then the current containing tiddler is implied by default.
!!!!HTML anchor syntax
You can use HTML syntax to create a scrollable 'anchor' location within a tiddler without use of the standard TW section heading syntax:
{{{
<html><a name="sectionname" /></html>
}}}
You can then link to that section using the enhanced TiddlyLink syntax as above.
!!!!{{{<<tiddler>>}}} macro 
The {{{<<tiddler>>}}} syntax has been extended so that when the tiddler title is omitted or the 'here' keyword is used, e.g.,
{{{
<<tiddler ##SomeSection>> or <<tiddler here##SomeSection>>
}}}
then the current containing tiddler is implied by default.
!!!!"""<<sectionTOC>>""" macro
This macro generates a 'Table of Contents' outline-style bullet list with links to all sections within the current tiddler.  Simply place the following macro at the //end of the tiddler content// (i.e., following all section headings).  Important note: //''The {{{<<sectionTOC>>}}} macro must occur at the end of the tiddler in order to locate the rendered section headings that precede it.''//
{{{
<<sectionTOC>> or <<sectionTOC className>>
}}}
To position the macro's //output// within the tiddler, you must create a special 'target element' that uses a specific classname (default='sectionTOC'), like this:
{{{
{{sectionTOC{}}}
}}}
When the {{{<<sectionTOC>>}}} macro is rendered, it will find the matching 'sectionTOC'-classed element and writes it's output there.  You can also add the macro and/or target elements directly to the [[ViewTemplate]] definition, so that every tiddler can automatically display the table of contents:
{{{
<span class='sectionTOC'></span> <!-- target element -->
...
<span macro='sectionTOC'></span> <!-- must be at end of tiddler -->
}}}
<<<
!!!Configuration
<<<
You can change the {{{<<SectionTOC>>}}} output link format by adding the following statement to a tiddler tagged with <<tag systemConfig>>
{{{
config.macros.sectionTOC.linkFormat='[[%0|##%0]]';
}}}
The default value (shown above) produces a link to each section within the tiddler, using "%0" to insert the section name into the link.  You can add extra formatting to generate additional output to suit your purposes.  For example, if you have EditSectionPlugin installed, you could include a link that invokes that plugin's popup editor directly from each item in the TOC display, like this:
{{{
config.macros.sectionTOC.linkFormat='[[%0|##%0]] <<editSection [[##%0]] [[(edit)]]>>';
}}}
<<<
!!!Examples
<<<
links to sections defined by ''TW heading syntax'' (e.g, {{{!!!sectionname}}}):{{indent{
[[SectionLinksPlugin##onClickTiddlerLink]]
[[##onClickTiddlerLink]] //(current tiddler implied)//}}}
links to anchors defined by ''HTML syntax'' (e.g., {{{<html><a href="anchorname"></html>}}}):{{indent{
[[SectionLinksPlugin##sampleanchorlink]]
[[##sampleanchorlink]] //(current tiddler implied)//}}}
<<<
!!!Revisions
<<<
2011.12.21 1.4.2 refactor sectionTOCformat to permit customization
2011.02.08 1.4.1 in isExternalLink() hijack, strip section references before testing for external link
2010.08.09 1.4.0 in scrollToSection(), added support for using HTML <a name="..."> anchor elements
2009.08.21 1.3.4 added handling to ignore leading/trailing whitespace in section references
2009.08.21 1.3.3 in createTiddlyLink(), add tiddlyLinkNonExistingSection class if matching section is not found
2009.08.14 1.3.2 in createTiddlyLink(), don't override core value for ~TiddlyLink attribute
2009.08.02 1.3.1 in sectionTOC.handler(), trim leading/trailing whitespace from generated section links
2009.08.01 1.3.0 in scrollToSection(), apply 3-tier section matching (exact, startsWith, contains)
2009.07.06 1.2.2 fixed displayTiddler() hijack
2009.07.03 1.2.1 in {{{<<sectionTOC>>}}}, suppress output if target is not found
2009.06.02 1.2.0 added support for 'here' keyword in {{{[[here##section]]}}} links and {{{<<tiddler here##section>>}}} macro
2009.04.09 1.1.1 in sectionTOC macro, make target visible when TOC is rendered.
2009.01.18 1.1.0 added {{{<<sectionTOC>>}}} macro to generate numbered-bullet links to sections of current tiddler
2009.01.06 1.0.0 converted to stand-alone plugin
2008.10.14 0.0.0 initial release (as [[CoreTweaks]] #784 - http://trac.tiddlywiki.org/ticket/784)
<<<
!!!Code
***/
//{{{
version.extensions.SectionLinksPlugin= {major: 1, minor: 4, revision: 2, date: new Date(2011,12,21)};

Story.prototype.scrollToSection = function(title,section) {
	if (!title||!section) return; var t=this.getTiddler(title); if (!t) return null;
	var elems=t.getElementsByTagName('*');
	var heads=[]; var anchors=[];
	for (var i=0; i<elems.length; i++)
		if (['H1','H2','H3','H4','H5'].contains(elems[i].nodeName)) heads.push(elems[i]);
	for (var i=0; i<elems.length; i++)
		if (elems[i].nodeName=='A' && (elems[i].getAttribute('name')||'').length) anchors.push(elems[i]);
	var found=null;
	for (var i=0; i<heads.length; i++)
		if (getPlainText(heads[i]).trim()==section) { found=heads[i]; break; }
	if (!found) for (var i=0; i<heads.length; i++)
		if (getPlainText(heads[i]).trim().startsWith(section)) { found=heads[i]; break; }
	if (!found) for (var i=0; i<heads.length; i++)
		if (getPlainText(heads[i]).trim().indexOf(section)!=-1) { found=heads[i]; break; }
	if (!found) for (var i=0; i<anchors.length; i++)
		if (anchors[i].getAttribute('name')==section) { found=anchors[i]; break; }
	if (!found) for (var i=0; i<anchors.length; i++)
		if (anchors[i].getAttribute('name').startsWith(section)) { found=anchors[i]; break; }
	if (!found) for (var i=0; i<anchors.length; i++)
		if (anchors[i].getAttribute('name').indexOf(section)!=-1) { found=anchors[i]; break; }
	if (found) {
		// if section heading is collapsed, click to expand it - see [[FoldHeadingsPlugin]]
		if (hasClass(found,'foldable') && found.nextSibling.style.display=='none') found.onclick();
		// scroll *after* tiddler animation
		var delay=config.options.chkAnimate?config.animDuration+100:0;
		setTimeout('window.scrollTo('+findPosX(found)+','+findPosY(found)+')',delay);
		return found;
	}
}
//}}}
/***
!!!!core hijacks
***/
/***
!!!!!createTiddlyLink
***/
//{{{
// [[tiddlername##section]] and [[##section]]
if (!window.createTiddlyLink_section)
	window.createTiddlyLink_section=window.createTiddlyLink;
window.createTiddlyLink=function(place,title) {
	var t=story.findContainingTiddler(place); var tid=t?t.getAttribute('tiddler'):'';
	var parts=title.split(config.textPrimitives.sectionSeparator);
	var title=parts[0]; var section=parts[1]; if (section) section=section.trim();
	if (!title.length || title.toLowerCase()=='here') title=tid;  // default=current tiddler
	arguments[1]=title;
	var btn=createTiddlyLink_section.apply(this,arguments);
	if (section) {
		btn.setAttribute('section',section);
		if (store.getTiddlerText(title+config.textPrimitives.sectionSeparator+section)===null)
			addClass(btn,'tiddlyLinkNonExistingSection');
	}
	return btn;
}
//}}}
/***
!!!!!onClickTiddlerLink
***/
//{{{
if (!window.onClickTiddlerLink_section)
	window.onClickTiddlerLink_section=window.onClickTiddlerLink;
window.onClickTiddlerLink=function(ev) {
	var e=ev||window.event;	var target=resolveTarget(e); var title=null;
	while (target!=null && title==null) {
		title=target.getAttribute('tiddlyLink');
		section=target.getAttribute('section');
		target=target.parentNode;
	} 
	var t=story.findContainingTiddler(target); var tid=t?t.getAttribute('tiddler'):'';
	if (title!=tid||!section) // avoid excess scrolling for intra-tiddler links
		onClickTiddlerLink_section.apply(this,arguments);
	story.scrollToSection(title,section);
	return false;
}
//}}}
/***
!!!!! displayTiddler
***/
//{{{
if (!Story.prototype.displayTiddler_section)
	Story.prototype.displayTiddler_section=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var parts=title.split(config.textPrimitives.sectionSeparator);
	var title=parts[0]; var section=parts[1]; if (section) section=section.trim();
	if (!title.length || title.toLowerCase()=='here') {
		var t=story.findContainingTiddler(place);
		title=t?t.getAttribute('tiddler'):'';
	}
	arguments[1]=title;  // default=current tiddler
	this.displayTiddler_section.apply(this,arguments);
	story.scrollToSection(title,section);
}
//}}}
/***
<html><a name="sampleanchorlink" /></html>This is a sample ''anchor link'': {{{<html><a name="sampleanchorlink" /></html>}}}
!!!!!isExternalLink
***/
//{{{
if (!config.formatterHelpers.isExternalLink_section)
	config.formatterHelpers.isExternalLink_section=config.formatterHelpers.isExternalLink;
config.formatterHelpers.isExternalLink=function(link) {  // remove section references before testing
	var l=link.split(config.textPrimitives.sectionSeparator)[0];
	return config.formatterHelpers.isExternalLink_section(l);
}
//}}}
/***
!!!!!tiddler.handler
***/
//{{{
if (!config.macros.tiddler.handler_section)
	config.macros.tiddler.handler_section=config.macros.tiddler.handler;
config.macros.tiddler.handler=function(place,macroName,params,wikifier,paramString,tiddler)
{
	if (!params[0]) return;
	var sep=config.textPrimitives.sectionSeparator;
	var parts=params[0].split(sep); var tid=parts[0]; var sec=parts[1]; if (sec) sec=sec.trim();
	if ((tid.toLowerCase()=='here'||!tid.length) && sec) { // fixup for 'here##section' and '##section'
		var here=story.findContainingTiddler(place)
		var tid=here?here.getAttribute('tiddler'):tiddler?tiddler.title:'';
		arguments[2][0]=tid+sep+sec;
		arguments[4]=paramString.replace(new RegExp('(here)?'+sep+sec),tid+sep+sec);
	}
	config.macros.tiddler.handler_section.apply(this,arguments);
}
//}}}
/***
!!!!sectionTOC macro
***/
//{{{
config.macros.sectionTOC = {
	targetClass: 'sectionTOC',
	linkFormat: '[[%0|##%0]]',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var out=[];
		var targetClass=params[0]||this.targetClass;
		var t=story.findContainingTiddler(place); if (!t) return;
		var elems=t.getElementsByTagName('*');
		var level=5; // topmost heading level
		for (var i=0; i<elems.length; i++) {
			var txt=getPlainText(elems[i]).trim();
			var link=this.linkFormat.format([txt]);
			switch(elems[i].nodeName) {
				case 'H1': out.push('#'+link);		level=1; break;
				case 'H2': out.push('##'+link);		level=level<2?level:2; break;
				case 'H3': out.push('###'+link);	level=level<3?level:3; break;
				case 'H4': out.push('####'+link);	level=level<4?level:4; break;
				case 'H5': out.push('#####'+link);	level=level<5?level:5; break;
				default: if (hasClass(elems[i],targetClass)) var target=elems[i];
			}
		}
		// trim excess bullet levels
		if (level>1) for (var i=0; i<out.length; i++) out[i]=out[i].substr(level-1);
		// show numbered list
		if (out.length && target) {
			if (target.style.display=='none') target.style.display='block';
			wikify(out.join('\n'),target);
		}
	}
}
//}}}
/***
!!!Invoke macro
{{{
<<sectionTOC>>
}}}
***/
// //<<sectionTOC>>
iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADYklEQVQ4jZWUXUybVRjHf28/cJTYQjtoC5ENENpsC7RDkQ+FEHVzuzGaqTFmUW/UeLNkF8YsXhlN9Ga7XzTz82KJzohxc5nawT4y1HWFCAIVBq9NaUtL13a8bXnbHi8q7yadOv/n6jznnF+e55/nORJ3UD6fFyvRELHQHNz0k41eIKvfRqGqi2pbE97uYcxms7T53d8CqqqK6LJMZOoTcsoNet0l9M2N2nlRDnNlRkcun8P98BvYnc0YjUapAqaqqpj4/h12dswAsKXBc6ekNeViAabm3HQ99pYGNGyU5R/7lszCZ/hDFlp7e7ALgSRVVIIQguiSzMKVINn1Xzj1sQFFUYTJZJIMAGs309TfeJ/u518kHl7mh89PotPraHa7uM/dwb11dWSSSf6YmUOemaVULPHoC8+xtdGJ7DvNpR9d5TIVRREzF4/h7dPd8kZVScUTBHyjhOeva/HGthY8w0NYttrQG42ajyO+OAPPHEMKyfPCph5hS4OHTDLJ9OVxEssRDFVGrA4723fuoK6hnmRshcWpaVYjUQrrKjangx39DxEO/E6VukzIcgTp0rmTYnfrKZSig6A/QI3FTHu3l3uqq//R/Hw2S/DqNdZSaWpNNupqFM5fH0C6+OUhMbDHgRCCUqGgpf9fEtkcxZVE2SskRnxxdJIyWw5I0v8CldYUpL8WQDK1iiGr36Zd+ujdD+4KdrsOHtyPmkqzbnBiKFR1UZR/0zrd9cqvdw2aPb4LgKV4BqvNi8HZ6kFNjaOnkaF9jzB6fBcvvzdf2a2bdOLNNtHX3wVAIqVgdbgwtLs9XD1TS68lTMvucvOdANG69yhDw09WQEd9X4uFs4fp6+/i/rYm5HiGybCDp/cMlt2b8F8WjuTbNPQMUZTDyPEMo2cuANC69yid29uZXAyycPYwgAZSU2lGfw5A06s8ceD18vDl83nh++ZDvHUj2BztWhaJSJDT54LafgOyoXF/kFB+gH3PHsJsNt+a5FgsJvxjX9AhfUqz+4F/9UuOZ5gLXCNVc4DHn3oNq61egk3/WTqdFuNj35FZ/AqPc5GaWgvmajtGixk1lWYpniERXWRytZOWth4G97+EyWSq/M9uVywWExM/nWc1MosxN00ytcq6wYnV1obV4aLzwUHsdkfF2z8BFVFrweys/98AAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAACwAAAArCAYAAAADgWq5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAk5SURBVFiF1ZlrbBzVFYC/O7Mz+16/vc47tmM7sZOQB5QGAkqiqhE0VKAqrSgJjfiRqpX4UyFaqCLLotDSIrVCoghKSyqSliYgSgpNVSC4SWlSIIoJBGPjPByIE9sbr1/7mp2d2x9jz67j9dp50Krn1+zcO+d+99xzzzn3rpBS8v8kyv8a4HLFdbUKHtzZWqWr1g1SUeqRsh5ENWCCHBEwIpEREIdMQz/4+H03j1zteOJKXKJl9/5QSrq/IRD3AOuZ2UqZCPEelvyLnhFPN29bN3jZA3OZwC07Wz2Gy/oRiAcB76XtLpeKz+tDCDDNDKZpYqQN8gwxBDxpKdovf/rttdEvBPjhXW9/XcCvgOrxd7qmURWuIFxZQcDvR9e1Sd+ZpslAdJCB6CCRgSixWPxS8O2Pblm/55oBf3PvXrUuVf5rYPv4u1AwQG3NQirKShFCzHQsAPojF+k63c3wcNadpeDJi7HQA89sX52+KuAf7D3s9aZSfwJ5B4CmuairqWbunNlcJuck6e3r50R7J2nTHCMRhzO6edvPNn9l6IqAW559zWf4A28i5RqAgN/HqhXL8Ho8V0eaI4lkkrYPP3asLaHV7Y5sbN682Zjqmyl3t+H3PTUOW1pSzI3Xr7ymsABej4cbV6+gorwMAAHrUqnynQKmXL+8wD/e/fZ9SLENoLgoxOoVy3G5rjpk5wdQFK5b1khxUQgAAXc/tPvAD6fqP8klHtrVukhBHge8uq6x5kur8bjdXwhsrqTTaY68f4x4PAEQN4VoePyedZ9f2m+ShRXkDsZi7PKmJZcHKyVKdATX2V6UodHLAtY0jaVLGsZ/+lQpf56v3wQL7/j9gVpLFR2AGq6sYMWyxhkN5jrbi378JEpkCJE2s/y6i0xFCcaqejJVpTPSdfyjds739tlwyJt/smXDvyaMlftDquIhQAWorV4wrXKRNnEfPoHWcTZ/u2HiOtePqydCYmkJxopGFE8xBfYU9XU19PVHyFgWFuL7wARgx8J22pVRwDMT64q0ie/Ph1AG7aVXXCrBcAmeoA/N68aIJ0kOxxmMnKO34g2S3nP2dy4//tpteObcPqXuHCvH9Hissnn7Jic9OhY2NHkzEg9AVbiiICyA+912B9ZXEqSqcQEuj+60+0qDGJkROgJPk7QGnPfSjDHa8RTC5cMdXpdX96yqynFgv+H33wn8YbzN2XRCsmH8ubS4uCCs2hNB+/gMAN4iP3NX1k2AHZeuwX0O7OxZfpY1laFp9pCxT3+DzCTy6i8vK82GUSlvy21zgKUQ64Epi5hc0T86DYBQFMKNC/O6ZCx9gc9HDwFQUe7lyzeEqastYnmTnSQsY5BE90t59QshCPh942D1eYGFlNWAE8ALidpvV4T+8hC6L3/Y64i+jJQWAMuashFi/rwgRSF7NRKfvYKVupj3e59vrHoV1OYFllAEoE1jXRFLIuIpADxBX94+A8lO+uMfADBvboDiouykhIClY1aWmRTxU7vy6vD7HN1lLTtbHR9VAL777FGNsWShqWpBYGUkW89qvny1haQjuhcAVRE0LSklOpii7XiEtuMRTp4eIlzhJVxpWzB54Q3M0TOTtOS6ZVLPOEukAJR5Bh0/UF2Fga0iv/OcjiUntZ+PvcdwqhuA2poifF4Xf3/rM1au3cPKtXu4/wHbr5c2ltklqpTET/5ukp6MmXGePUIdngA8OmSMAhZAMjVlZQeA9LqR/jHrjMQmTkaafBp9BQBdV2mos1cyGMxaKxi0/bcopLNgXhAA4+JR0gNtE3Q5dTLQMxJ0amQF4Mn7b0shOAtceoTJK5lwCQCxyDDJ4Wz/7uG3SJj2JlpcX+yEsGAgG/JCwexz4+JSVNUOMbGu35J7+EunncNHIvckkhuHOwFi8emBjesWgSKQUnLh4zPIjEXainFqaD8Afr9GzcJstAkGtLzPHo9KXa29CuboKVK9B5y26KBj1E9zx86JErIdIB5PYOYsRz7JlBfZ0IARS9L97id09L2CadmTXbqkFEXJBudADmQoNDHB1C8qwu22903s1AtIy8Aw0oyMOu72Vl5gRbIPsK3W118QGCC1qp5M2N68sXQfPYl/AlBa4mHObP+EvrlWzXUJAJdLobHBdjEr2U/ys1e5GM05+Qv5Rl5g16lDrUAPwPkLfdMCoyjEN63BWFVPtOzfSDE5STjAOZC58OOycEHI2Zjx7j30X+gebzIMyzyYF7i5udmS8CLAQHSQkZEZFOCKQmyRJOY/CcCcWX7KSifHZp/X5bjIpRaGsWSyZCyZmHG0i/vsBsmuX2z96oRQNOHEoUr1OSAD0N7ZNT0wEOt6boxd0NQ4dZEe8NsWzA1xuTKrykdFuR0uy2nDSzSjWPKxS/tNAH5k663twDNg79ILvYV9OdX/DumhdgCqF4QcqHyyYnk5DXXFVFZMuuFyZNnYhAUW89l/7pHvbDhZEBhAdxs7kAwAfNLZRSI5OZsBIE3iXTsB0DSFJQ2FS9J/7L+Ttne+xfUrK6fsU1zsZt7cAAAB8fn8l3ZtvGla4ObNGwekkA8ApAyDo20fkk5PDnOJc38lk+gBoKGuGF2fOqWPxtIsvfFFwrXP8+rrpwtOrCknJCpCeWJaYIDHtmx4XiCeADvzHTv+EWZObpeWQfy0fQjweV3U1hQVhHjnyHlOtA8wPGLw4suF94bP62JRVt+al/94+x3TAgM8umXdgyBfAtufD7971Ikc5uAJZNq+XlrcUIKqFL5ou/Wm2dxy0yzmzPZz39bFBfuCvWJO4snI9bltU17nSJAtprLVcEkv8LV4IsGR94/RsKiGSjW7Gf2+6W+EvF4XB/9217T9xkXTFHRNIZnKIATzZgQM0LxtXVLAHQ/vbn0YKVssy1LbO7s45xbUoQAWxz6IUL0whK5fu79L+vsTJFO2C4qxomxcZnyhveOFAxssIZ4H5gNUi9cp5cQ1g5xCzohM+vq77n3TOUfN2CyPbN1wQHdH6oSU3wPOdsuN9Mi1pAl8EaASOCIVuSkXFq70T5m9e3UjVXEvyDsF1q06Q0Fh1/+FJK2SOuiRA69VqUda3SIyRYAHN+7Iprv3RfK1XRFwrrS0trpSZzM3IJRbBLISIYJIAgipC5QzlrA6sUSn5cm0TXe7PhO5auD/tvwHQhyDgtGxXlsAAAAASUVORK5CYII=
/*{{{*/
/* created by QuickOpenTagPlugin */
.tagglyTagged .quickopentag, .tagged .quickopentag 
	{ margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }
.quickopentag .tiddlyLink { padding:2px; padding-left:3px; }
.quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}
/* extra specificity to make it work right */
#displayArea .viewer .quickopentag a.button, 
#displayArea .viewer .quickopentag a.tiddyLink, 
#mainMenu .quickopentag a.tiddyLink, 
#mainMenu .quickopentag a.tiddyLink 
	{ border:0px solid black; }
#displayArea .viewer .quickopentag a.button, 
#mainMenu .quickopentag a.button 
	{ margin-left:0px; padding-left:2px; }
#displayArea .viewer .quickopentag a.tiddlyLink, 
#mainMenu .quickopentag a.tiddlyLink 
	{ margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }
a.miniTag {font-size:150%;} 
#mainMenu .quickopentag a.button 
	/* looks better in right justified main menus */
	{ margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }
#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }
#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }
#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }

/*Compatibility with default TiddlySpace theme, by GJRobrt*/
#sidebarTabs .tabContents a.button { display:inline; padding: 0 0.1em; margin-left: 0; }
#sidebarTabs .tabContents li a { display:inline; padding: 0 0.1em; margin-left:1em; } 
#sidebarTabs .tabContents li { padding: 0.3em 0; }
/*}}}*/
/***
|''Name''|TiddlySpaceRevisionView|
|''Description''|Show tiddler revisions in a stack of cards view|
|''Author''|BenGillies|
|''Version''|0.2.0|
|''Status''|beta|
|''Source''|http://github.com/TiddlySpace/tiddlyspace|
|''CodeRepository''|http://github.com/TiddlySpace/tiddlyspace|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
|''CoreVersion''|2.6.0|
|''Requires''|TiddlyWebAdaptor|
!Usage
The viewRevisions macro can be attached to any element, which should be passed
in as a parameter.

For example:

&lt;&lt;viewRevisions page:10 link:"<<view modified date>>"&gt;&gt;

would show the revisions "stack of cards" view, 10 at a time, when the modified
date is clicked.
!Code
***/
//{{{
(function($) {

var me = config.macros.viewRevisions = {
	revisionTemplate: "RevisionTemplate",
	revSuffix: " [rev. #%0]", // text to append to each tiddler title
	defaultPageSize: 5, // default number of revisions to show
	defaultLinkText: "View Revisions", // when there's nothing else to use
	offsetTop: 30, // in px
	offsetLeft: 10, // in px
	shiftDownDelay: 50, // in ms
	visibleSlideAmount: 20, // amount of revisions to show on left hand edge after sliding
	zIndex: 100, // default z-index
	handler: function(place, macroName, params, wikifier, paramString, tiddler) {
		params = paramString.parseParams(null, null, true)[0];
		var tiddlerElem = story.findContainingTiddler(place);

		var revButton;
		var pageSize = parseInt(params.page[0], 10) || me.defaultPageSize;
		var linkObj = params.link ? params.link[0] || me.defaultLinkText : false;
		if(linkObj) {
			revButton = $('<span class="button openRevisions" />')
				.appendTo(place);
			wikify(linkObj, revButton[0], null, tiddler);
		} else {
			revButton = place;
		}

		$(revButton).click(function() {
			if (!$(tiddlerElem).hasClass("revisions")) {
				me.showRevisions(tiddlerElem, tiddler, pageSize);
			} else {
				me.closeRevisions(tiddlerElem);
			}
		});
	},

	// initialisation for revision view
	showRevisions: function(tiddlerElem, tiddler, pageSize) {
		var context = {
			host: tiddler.fields["server.host"],
			workspace: tiddler.fields["server.workspace"]
		};
		$(tiddlerElem).addClass("revisions").attr("revName", tiddler.title);
		// ensure toolbar commands deactivate RevisionsView
		$("a", ".toolbar", tiddlerElem).each(function(index, btn) {
			var _onclick = btn.onclick;
			btn.onclick = function(e) {
				me.closeRevisions(tiddlerElem);
				_onclick.apply(this, arguments);
			};
		});
		// ensure default action deactivates RevisionsView
		var _ondblclick = tiddlerElem.ondblclick;
		tiddlerElem.ondblclick = function(e) {
			me.closeRevisions(tiddlerElem);
			_ondblclick.apply(this, arguments);
		};
		var type = tiddler.fields["server.type"];
		var adaptor = new config.adaptors[type]();
		var userParams = {
			tiddlerElem: tiddlerElem,
			pageSize: pageSize,
			title: tiddler.title
		};
		me.createCloak(tiddlerElem);
		adaptor.getTiddlerRevisionList(tiddler.title, null, context, userParams,
				function(context, userParams) {
					// strip the current revision
					context.revisions.shift();
					me.expandStack(context, userParams);
				});
	},

	// fetch the actual revision and put it in the tiddler div
	showRevision: function(place, revision, callback) {
		var context = {
			host: revision.fields["server.host"],
			workspace: revision.fields["server.workspace"]
		};
		var userParams = {
			revElem: place
		};
		var type = revision.fields["server.type"];
		var adaptor = new config.adaptors[type]();
		var revNo = revision.fields["server.page.revision"];
		adaptor.getTiddlerRevision(revision.title, revNo, context, userParams,
			function(context, userParams) {
				var tiddler = context.tiddler;
				tiddler.title += me.revSuffix
					.format([$(place).attr("revision")]);
				tiddler.fields.doNotSave = true;
				if (store.getTiddler(tiddler.title)) {
					store.deleteTiddler(tiddler.title);
				}
				store.addTiddler(tiddler);

				//now, populate the existing div
				var revElem = userParams.revElem;
				$(revElem).attr("id", story.tiddlerId(tiddler.title));
				$(revElem).attr("refresh", "tiddler");
				var getTemplate = function() {
					var themeName = config.options.txtTheme;
					if (themeName) {
						return store.getTiddlerSlice(themeName,
							me.revisionTemplate) || me.revisionTemplate ||
							"ViewTemplate";
					} else {
						return (store.getTiddler(me.revisionTemplate)) ?
							me.revisionTemplate : "ViewTemplate";
					}
				};
				var template = getTemplate();
				story.refreshTiddler(tiddler.title, template, true);
				callback(tiddler);
			});
	},

	createCloak: function(promoteElem) {
		var el = $(promoteElem);
		// cache styles for resetting later
		el.data({
			top: el.css("top"),
			left: el.css("left"),
			zIndex: el.css("z-index")
		});

		$('<div class="revisionCloak" />').css("z-index", me.zIndex)
			.click(function() {
				me.closeRevisions(promoteElem);
			})
			.appendTo(document.body);

		el.css("z-index", me.zIndex + 1);
	},

	// clean up, removing all evidence of revision view
	closeRevisions: function(promoteElem) {
		var el = $(promoteElem);
		// revert the original tiddler back to its previous state
		el.removeAttr("revName").removeClass("revisions").css({
			top: el.data("top"),
			left: el.data("left"),
			zIndex: el.data("zIndex")
		});

		// remove any revisions still in the store
		var revisions = $(".revisions");
		revisions.each(function(index, revision) {
			var revAttributes = revision.attributes;
			if ((revAttributes.revname) &&
					(revAttributes.revision)) {
				var revName = revAttributes.revname.value;
				var revNo = revAttributes.revision.value;
				var title = revName + me.revSuffix.format([revNo]);

				if (store.getTiddler(title)) {
					store.deleteTiddler(title);
				}
			}
		});

		// delete the previous revisions
		revisions.remove();

		// remove the cloak
		$(".revisionCloak").remove();
	},

	// calback from getting list of revisions
	expandStack: function(context, userParams) {
		var pageSize = userParams.pageSize;

		var from = userParams.from || 0;
		var tiddlerElem = userParams.tiddlerElem;

		userParams.defaultHeight = $(tiddlerElem).height();
		userParams.defaultWidth = $(tiddlerElem).width();
		if (from < context.revisions.length) {
			me.displayNextRevision(tiddlerElem, userParams, context, from,
				from + pageSize - 1);
		}
	},

	// place the next div above and behind the previous one
	displayNextRevision: function(tiddlerElem, userParams, context, from, to) {
		var revision = context.revisions[from];
		var callback = function() {
			var revText = revBtn.getRevisionText(tiddlerElem, revision);
			tiddlerElem = me.createRevisionObject(tiddlerElem, context,
				userParams, revText);
			$(tiddlerElem)
				.attr("revision", (context.revisions.length - from));
			if ((from < to) && ((from + 1) < context.revisions.length)){
				me.displayNextRevision(tiddlerElem, userParams, context,
					from + 1, to);
			} else if ((context.revisions.length - 1) > to) {
				me.showMoreButton(tiddlerElem, context, userParams, to + 1);
			}
		};
		me.shiftVisibleDown(userParams.title, callback);
	},

	createRevisionObject: function(tiddlerElem, context, userParams, text) {
		var newPosition = me.calculatePosition(tiddlerElem, context);
		return $('<div class="revisions tiddler" />')
			.css({
				position: "absolute",
				top: newPosition.top,
				left: newPosition.left,
				"z-index": me.zIndex + 1,
				height: userParams.defaultHeight,
				width: userParams.defaultWidth
			})
			.attr("revName", userParams.title)
			.append(text)
			.insertBefore(tiddlerElem);
	},

	// move the already present revisions down by 1 to fit the next one in
	shiftVisibleDown: function(title, callback) {
		var revisions = $("[revName='%0'].revisions".format([title]));
		var revisionCount = revisions.length;

		$(revisions).animate({top: "+=" + me.offsetTop},
				me.shiftDownDelay, function() {
					revisionCount -= 1;
					if ((callback) && (!revisionCount)) {
						callback();
					}
				});
	},

	// where we put the new revision
	calculatePosition: function(elem, context) {
		var offset = $(elem).offset();
		var currentPosition = $(elem).position();
		var newPosition = {
			top: currentPosition.top - me.offsetTop
		};
		if ((context.restrictLeft) ||
				((offset.left - me.offsetLeft) <
				$("#contentWrapper").offset().left)) {
			newPosition.left = $(elem).position().left;
			context.restrictLeft = true;
		} else {
			newPosition.left = currentPosition.left - me.offsetLeft;
		}
		return newPosition;
	},

	// equivalent of displayNextRevision, but for the more button
	showMoreButton: function(tiddlerElem, context, userParams, moreIndex) {
		userParams.from = moreIndex + 1;
		me.shiftVisibleDown(userParams.title, function() {
			var btn = me.createRevisionObject(tiddlerElem, context, userParams,
				"");

			var more = createTiddlyButton(btn[0], "more...", "show more revisions",
				function() {
					if ($(".viewRevision").length) {
						return;
					}
					userParams.tiddlerElem = btn[0];
					$(btn).text("")
						.append(revBtn
							.getRevisionText(btn[0], context.revisions[moreIndex]))
						.attr("revision", context.revisions.length - moreIndex);
					me.expandStack(context, userParams);
				});
			$(more).css("float", "right");
		});
	},

	stripRevFromTitle: function(revisionTitle) {
		return revisionTitle.split(/ ?\[rev\. #[0-9]+\]$/)[0];
	},

	onClickRevision: function(revElem, revision, callback) {
		// don't do anything if we are still loading
		if ($(".revisions").hasClass("loading")) {
			return null;
		}

		var origTitle = me.stripRevFromTitle(revision.title);
		if ($(revElem).hasClass("viewRevision")) {
			$(".revisions").addClass("loading");
			me.slideIn(revElem, revision, origTitle, function() {
				store.deleteTiddler(revision.title);
				revision.title = origTitle;
				$(revElem).text("").append(revBtn.getRevisionText(revElem,
						revision))
					.removeAttr("tags").removeAttr("tiddler")
					.removeAttr("refresh").removeAttr("template")
					.removeAttr("id");
				$(".revisions").removeClass("loading");
				if (callback) {
					callback();
				}
			});
			$(revElem).removeAttr("prevPos").removeClass("viewRevision");
		} else {
			var viewRevision = function() {
				var prevPos = $(revElem).position().left;
				$(revElem).addClass("viewRevision").attr("prevPos", prevPos);
				$(".revisions").addClass("loading");
				me.showRevision(revElem, revision, function(rev) {
					me.slideOut(revElem, rev, origTitle, function() {
						$(".revisions").removeClass("loading");
					});
				});
			};
			// make sure another revision isn't already out
			if ($(".viewRevision").length) {
				var newRevElem = $(".viewRevision")[0];
				var newRevision = store.getTiddler($(newRevElem)
					.attr("tiddler"));
				me.onClickRevision(newRevElem, newRevision, viewRevision);
			} else {
				viewRevision();
			}
		}
	},

	slideOut: function(revElem, revision, title, callback) {
		var leftMostPos = $("[revName='%0'].revisions".format([title]))
			.offset().left;
		var width = $(revElem).width();
		var originalLeftPos = $(story.getTiddler(title))
			.position().left;

		var slideAmount = leftMostPos + width - me.visibleSlideAmount;
		$("[revName='%0'].revisions:not(.viewRevision)".format([title]))
			.animate({left: "-=" + slideAmount}, 1000);
		$(revElem)
			.attr("baseHeight", $(revElem).css("height"))
			.css("height", "auto")
			.animate({left: originalLeftPos}, 1000, callback);
	},

	slideIn: function(revElem, revision, title, callback) {
		var slideAmount = $(revElem).offset().left -
			$(story.getTiddler(title)).offset().left;
		var origRevPos = $(revElem).attr("prevPos");

		$("[revName='%0'].revisions:not(.viewRevision)".format([title]))
			.animate({left: "+=" + slideAmount}, 1000);
		$(revElem).animate({left: origRevPos}, 1000, function() {
			$(revElem)
				.css("height", $(revElem).attr("baseHeight"))
				.removeAttr("baseHeight");
			callback();
		});
	}
};

var revBtn;
config.macros.slideRevision = revBtn = {
	btnText: "created by %0 at %1 on %2",
	handler: function(place, macroName, params, wikifier, paramString, tiddler) {
		var btn = revBtn.getRevisionText(place, tiddler);
		$(place).append(btn);
	},

	getRevisionText: function(place, revision) {
		var text = revBtn.btnText.format([revision.modifier,
			revision.modified.formatString("0hh:0mm"),
			revision.modified.formatString("0DD MMM YYYY")]);
		var btn = $('<a href="javascript:;" class="button revButton" />')
			.text(text)
			.click(function() {
				var revElem = story.findContainingTiddler(this);
				me.onClickRevision(revElem, revision);
			});
		return btn;
	}
};

})(jQuery);
//}}}
為什麼不愛主?當一個人付出全心全意愛了你、栽培、呵護了你,甚至為你犧牲了自己的性命,那麼,身為人的我們,有什麼好不愛這個人的?難道要像一般的男女愛情,即使別人對你告白完全的付出和愛的時候,還要計較對方長相美醜來決定要不要接受對方的愛嗎?還有什麼好挑剔的嗎?還有什麼好叛逆的嗎?

應該要感謝才對,應該要有所回應這樣的愛才是人格,才是善。


[[StyleSheetTiddlySpace]]
[[StyleSheetGJRobert]]
[[HoverMenuStyles]]
[[StyleSheetShortcuts]]
[[StyleSheetThisSpace]]
<html><div align="center"><iframe src="$1" frameborder="0" style="width:100%;height:800px;overflow:scroll;"></iframe></div></html>
/***
|''Name:''|AnnotationsPlugin|
|''Description:''|Inline annotations for tiddler text.|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#AnnotationsPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.0|
|''Date:''||
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|

!!Usage:
*{{{((text to annotate(annotation goes here)}}}
* To include the text being annotated, in the popup as a title, put {{{^}}} as the first letter of the annotation text.
** {{{((text to annotate(^annotation goes here)}}}

!!Examples:
Mouse over, the text below:
* ((banana(the best fruit in the world)))
* ((banana(^ the best fruit in the world)))

***/
// /%
config.formatters.unshift({name:"annotations",match:"\\(\\(",lookaheadRegExp:/\(\((.*?)\((\^?)((?:.|\n)*?)\)\)\)/g,handler:function(w){
this.lookaheadRegExp.lastIndex=w.matchStart;
var _2=this.lookaheadRegExp.exec(w.source);
if(_2&&_2.index==w.matchStart){
var _3=createTiddlyElement(w.output,"span",null,"annosub",_2[1]);
_3.anno=_2[3];
if(_2[2]){
_3.subject=_2[1];
}
_3.onmouseover=this.onmouseover;
_3.onmouseout=this.onmouseout;
_3.ondblclick=this.onmouseout;
w.nextMatch=_2.index+_2[0].length;
}
},onmouseover:function(e){
popup=createTiddlyElement(document.body,"div",null,"anno");
this.popup=popup;
if(this.subject){
wikify("!"+this.subject+"\n",popup);
}
wikify(this.anno,popup);
addClass(this,"annosubover");
Popup.place(this,popup,{x:25,y:7});
},onmouseout:function(e){
removeNode(this.popup);
this.popup=null;
removeClass(this,"annosubover");
}});
setStylesheet(".anno{position:absolute;border:2px solid #000;background-color:#DFDFFF; color:#000;padding:0.5em;max-width:15em;width:expression(document.body.clientWidth > (255/12) *parseInt(document.body.currentStyle.fontSize)?'15em':'auto' );}\n"+".anno h1, .anno h2{margin-top:0;color:#000;}\n"+".annosub{background:#ccc;}\n"+".annosubover{z-index:25; background-color:#DFDFFF;cursor:help;}\n","AnnotationStyles");


// %/
(function($){
	
	$(function(){
		
		$('#app-list li').mouseover(function() {
		  	var me = $(this),
				appname = me.attr("class"),
				descEl = '.' + appname + 'desc';
			$(descEl).addClass("highlightdesc");
		}).mouseout(function() {
		  	var me = $(this),
			appname = me.attr("class"),
			descEl = '.' + appname + 'desc';
			$(descEl).removeClass("highlightdesc");
		});
		
		$(".inactive").click(function() {
			var me = $(this),
				oldtext = me.text();
			me.text("coming soon").animate({'color':'#fff'}, 400, function() {
				setTimeout(function(){
					me.text(oldtext);
				}, 2000);
			});
			return false;
		});
		
		$(".soon").click(function() {
			var me = $(this),
				comingsoon = $('.comingsoon', me);
			comingsoon.addClass("highlight");
			// won't work until jquery ui is included
			comingsoon.animate({'color':'#BC4378'}, 600, function() {
				comingsoon.animate({'color':'#B8B6BD'}, 600);
			});
			return false;
		});
		
	});
	
})(jQuery);
去年底開始因為想買幾個不錯的手機軟體,另外也想好好回饋輸入法的開發商……因此開始有想辦信用卡。(詳見去年某次的 FB 留言)後來有弟兄就推薦我找任職於中信的姐姐,我也就致電洽詢,她也寄了申請書給我。

但是拿到申請書才發現我做的功課真不足,對信用卡毫無認識,對年費、回饋、紅利等制度也很陌生;而且申請書上又寫,某些聯名卡的優惠至年底止,那時都已經十二月了,就讓我有點不敢辦下去。呵,其實多問協助的人就好了,但是又因我的個性疏懶,有時又怕打擾,就一直放著。

不過一直沒辦法買想買的東西也是挺不方便的,前陣子總算下定決心要來把這事辦好。我決定最想辦的是悠遊聯名卡,因為能夠在便利商店及大眾交通工具迅速付款,挺吸引我的,也不用一直掏零錢。上了 PTT 信用卡板查了一下,發現各家優惠不一,中信好像沒什麼優惠,就有點想辦別家的,不想辦中信了 <<(a)>> 剛好有同事的母親是華南銀行的專員,華南的悠遊聯名卡回饋好像也不少,就要了資料。

不過,反反覆覆的我又聽同事說,我們的臺灣銀行活儲帳戶可以直接用「達人金融卡」進行 VISA 簽帳消費,那我就想「那不如直接用金融卡線上買軟體好了,直接扣款,省得還要轉帳繳信用卡費。」上週一就去了臺銀辦了手續,這週一拿卡。想不到,打開信封,裡面竟然有一行紅字說「本行金融卡僅限電子刷卡機,暫不開放網路購物」,驚!上了 Google Checkout 登錄卡號,果然被拒了……<<orz>> 又是一次沒做足功課……

然後,再上了 PTT 信用卡板,又發現原來華南的悠遊聯名卡是 JCB 體系,好像也不屬於 Google Checkout 的接受範圍(再被打擊!)

所以,昨天我終於乖乖打電話給任職中信的姐姐,請她寄給我悠遊聯名卡的申請書……雖然沒什麼優惠,不過有信賴的姐妹在那裡,至少可以得到不錯的服務吧!
----
^^@@4/25@@^^ 上個月底終於把申請書填好寄出,這個月經過姐姐的協辦,還有一些審核手續及製卡、寄送時間,今天終於在公司收到掛號寄來的平生第一張信用卡了。耶!終於可以買軟體、搭捷運、小額付費了!<<:D>>

<!doctype html>
<html>
	<head>
		<title>TiddlyApp Share</title>

		<link rel="stylesheet" href="/bags/common/tiddlers/profile.css" type="text/css"/>
		<script src="/bags/common/tiddlers/jquery.js" type="text/javascript"></script>
		<script src="/bags/tiddlyspace/tiddlers/chrjs" type="text/javascript"></script>
		<script src="/bags/common/tiddlers/chrjs-store.js" type="text/javascript"></script>
		<script src="/bags/tiddlyspace/tiddlers/chrjs.users" type="text/javascript"></script>
		<script type="text/javascript" src="/bags/common/tiddlers/backstage.js"></script>
		<script>
			// The templates of the links to display on the page
			var links = [
				{
					title: "Tiddlers",
					info: "Show a list of all the tiddlers in this space that a visitor currently has access to.",
					href: "{host}/tiddlers"
				}, {
					title: "Public Tiddlers",
					info: "Show a list of all the public tiddlers in this space in alphabetical order.",
					href: "{host}/bags/{subdomain}_public/select=tag:!excludeLists;sort=title"
				}, {
					title: "Atom Feed",
					info: "Get the Atom feed of the most recently changed tiddlers.",
					href: "{host}/tiddlers.atom?select=tag:!excludeLists;sort=-modified;limit=20"
				}, {
					title: "Specific Tiddler",
					info: "Show a specific tiddler in your space (GettingStarted in this example) as HTML, JSON or just plain text.",
					href: ["{host}/GettingStarted", "{host}/GettingStarted.json", "{host}/GettingStarted.txt"],
					more: "http://tiddlyweb.peermore.com/wiki/"
				}, {
					title: "Search for text",
					info: "Search tiddlers for some text contained inside a tiddler.",
					href: "{host}/search?q={subdomain}"
				}, {
					title: "List tiddlers with a tag",
					info: "Display all the tiddlers that have the tag specified (here the tag is systemConfig).",
					href: "{host}/tiddlers?select=tag:systemConfig"
				}
			];

			$(function() {

				var subdomain = document.location.host.split(".")[0];

				// Filter curly braces to display information
				for (var i in links) {
					var href = links[i].href;

					if (typeof href === "string")
						href = [href];

					for (var j in href) {

						href[j] =  href[j].replace("{host}", (document.protocol || "http:") + "//" + document.location.host);
						href[j] =  href[j].replace("{subdomain}", subdomain);
					}

					links[i].href = href;
				}

				// Display links to user
				var insertInto = $('#share_links');

				for (var i in links) {

					var linkBody = $('<div class="share_link"></div>');

					var linkDisplay = $('<div class="link_display"></div>');

					for (var j in links[i].href) {

						var a = $('<a class="link_href" target="_blank"/>');
						a.html(links[i].href[j]);
						a.attr('href', links[i].href[j]);

						linkDisplay.append(a);
						linkDisplay.append("<br/>");
					}
					
					var linkTitle = $('<b class="link_title"/>');
					linkTitle.html(links[i].title);

					var linkInfo = $('<div class="link_info"/>');
					linkInfo.html(links[i].info);

					linkBody.append(linkTitle);
					linkBody.append('<br/>');
					linkBody.append(linkInfo);
					linkBody.append(linkDisplay);

					if (links[i].more) {
						var linkMore = $('<a class="link_more">Learn more</a>');
						linkMore.attr('href', links[i].more);
						linkBody.append(linkMore);
					}

					insertInto.append(linkBody);
				}
			});
		</script>
		<style type="text/css">
			.link_display {
				display: block;
				background: #f2f2f2;
				border: 1px solid #aaa;
				padding: 10px;
				margin-top: 4px;
				word-wrap: break-word;
			}
			.link_more {
				display: block;
				text-align: right;
			}
			.share_link {
				margin-bottom: 10px;
			}
		</style>
	</head>
	<body>
		<div id="container">
			<div id="header">
				<h1>Share Space</h1>
			</div>
			<p>Here are a number of methods that you can use to share this Space and its content in different ways.</p>
			<span id="share_links"></span>
		</div>
	</body>
</html>
前陣子有部講美國職棒經營的電影上映,大家應該都知道是哪部。重點是,當我看到預告片的時候,我漫不經心地以為又是一齣勞勃瑞福演的電影,然後就欣賞了一下預告片中陳述的劇情。

隔了一陣子,我才從別的資訊來源驚覺,原來那位已經看起來顯出成熟態的帥哥,是布萊德彼特……嗯……他也有這天啊……
<<activity show:reply show:notify>>
R0lGODlhEwATAPf/AAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDcwKbK8Co/qio//ypfACpfVSpfqipf/yp/ACp/VSp/qip//yqfACqfVSqfqiqf/yq/ACq/VSq/qiq//yrfACrfVSrfqirf/yr/ACr/VSr/qir//1UAAFUAVVUAqlUA/1UfAFUfVVUfqlUf/1U/AFU/VVU/qlU//1VfAFVfVVVfqlVf/1V/AFV/VVV/qlV//1WfAFWfVVWfqlWf/1W/AFW/VVW/qlW//1XfAFXfVVXfqlXf/1X/AFX/VVX/qlX//38AAH8AVX8Aqn8A/38fAH8fVX8fqn8f/38/AH8/VX8/qn8//39fAH9fVX9fqn9f/39/AH9/VX9/qn9//3+fAH+fVX+fqn+f/3+/AH+/VX+/qn+//3/fAH/fVX/fqn/f/3//AH//VX//qn///6oAAKoAVaoAqqoA/6ofAKofVaofqqof/6o/AKo/Vao/qqo//6pfAKpfVapfqqpf/6p/AKp/Vap/qqp//6qfAKqfVaqfqqqf/6q/AKq/Vaq/qqq//6rfAKrfVarfqqrf/6r/AKr/Var/qqr//9QAANQAVdQAqtQA/9QfANQfVdQfqtQf/9Q/ANQ/VdQ/qtQ//9RfANRfVdRfqtRf/9R/ANR/VdR/qtR//9SfANSfVdSfqtSf/9S/ANS/VdS/qtS//9TfANTfVdTfqtTf/9T/ANT/VdT/qtT///8AVf8Aqv8fAP8fVf8fqv8f//8/AP8/Vf8/qv8///9fAP9fVf9fqv9f//9/AP9/Vf9/qv9///+fAP+fVf+fqv+f//+/AP+/Vf+/qv+////fAP/fVf/fqv/f////Vf//qszM///M/zP//2b//5n//8z//wB/AAB/VQB/qgB//wCfAACfVQCfqgCf/wC/AAC/VQC/qgC//wDfAADfVQDfqgDf/wD/VQD/qioAACoAVSoAqioA/yofACofVSofqiof/yo/ACo/Vf/78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH+HUJ1aWx0IHdpdGggR0lGIE1vdmllIEdlYXIgMy4wACH5BAEKAP8ALAAAAAATABMAAAj6AP8JHPgP2rJUy6ARXDjw2bJn0qQ9c5iKoUBoqSBG1DgxlauF0DhK3CjxWSqFA1P1CQRN4jRVKzNOJNWwj8A+EaUFEhhoIkWBywIJ+tdTYp+hPX2WghZyABNBOCHyeZrU2TJUqib2QcGEj7Rpz7JwxeNzmbJAqaSppJIxosoBMq0uK/Vw5EifeM0GDQlxYsmSz5w9U7aMlKp/qPD6nYiKT5WrywApfDigzzKJy5YNyNMJD+FUpVIeHMCnVB4+nZYJ65RHWSgEAzFaLcUHtbBhw37R6XOYoKtSg+fSqePrmDBfeSz+Q0hYWR48nX7lsanclapA2E2DMkUwIAA7
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="450 366 38 57"
width="30" height="30">
	<g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
		<g>
			<path d="M 452.1094 421.2422 L 450 421.2422 L 450 423 L 487.9688 423 L 487.9688 421.2422 L 485.8595 421.2422 
			L 485.8595 377.29688 L 487.9688 377.29688 L 487.9688 375.53906 L 485.8595 375.53906 
			C 485.8595 375.53906 481.12463 371.59341 473.02023 370.52802 C 472.6824 368.9689 471.72098 366.75 468.9844 366.75 
			C 466.24783 366.75 465.28638 368.9689 464.94864 370.52802 
			C 456.84418 371.59341 452.1094 375.53906 452.1094 375.53906 L 450 375.53906 L 450 377.29688 L 452.1094 377.29688 
			Z M 467.12247 370.32086 L 467.12247 370.32086 C 467.3805 369.42395 467.90762 368.50781 468.9844 368.50781 
			C 470.0612 368.50781 470.5883 369.42395 470.84634 370.32086 
			C 470.24136 370.2848 469.62054 370.26562 468.9844 370.26562 
			C 468.34827 370.26562 467.72748 370.2848 467.12247 370.32086 Z M 454.21875 420.92804 L 454.21875 420.92804 
			C 455.46762 420.42087 456.32816 419.35281 456.32816 418.11716 L 456.32816 377.29688 L 458.4375 377.29688 
			L 458.4375 421.2422 L 454.21875 421.2422 Z M 460.5469 420.92804 L 460.5469 420.92804 
			C 461.79578 420.42087 462.65625 419.35281 462.65625 418.11716 L 462.65625 377.29688 L 464.76566 377.29688 
			L 464.76566 421.2422 L 460.5469 421.2422 Z M 466.87503 420.92804 L 466.87503 420.92804 
			C 468.1239 420.42087 468.9844 419.35281 468.9844 418.11716 L 468.9844 377.29688 L 471.09378 377.29688 
			L 471.09378 421.2422 L 466.87503 421.2422 Z M 473.2032 420.92804 L 473.2032 420.92804 
			C 474.45203 420.42087 475.31256 419.35281 475.31256 418.11716 L 475.31256 377.29688 L 477.4219 377.29688 
			L 477.4219 421.2422 L 473.2032 421.2422 Z M 479.5313 420.92804 L 479.5313 420.92804 
			C 480.78018 420.42087 481.64066 419.35281 481.64066 418.11716 L 481.64066 377.29688 L 483.75006 377.29688 
			L 483.75006 421.2422 L 479.5313 421.2422 Z" fill="black" class="glyph"/>
		</g>
	</g>
</svg>

/***
|''Name''|TiddlyWebConfig|
|''Description''|configuration settings for TiddlyWebWiki|
|''Author''|FND|
|''Version''|1.3.2|
|''Status''|stable|
|''Source''|http://svn.tiddlywiki.org/Trunk/association/plugins/TiddlyWebConfig.js|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
|''Requires''|TiddlyWebAdaptor ServerSideSavingPlugin|
|''Keywords''|serverSide TiddlyWeb|
!Code
***/
//{{{
(function($) {

if(!config.extensions.ServerSideSavingPlugin) {
	throw "Missing dependency: ServerSideSavingPlugin";
}
if(!config.adaptors.tiddlyweb) {
	throw "Missing dependency: TiddlyWebAdaptor";
}

if(window.location.protocol != "file:") {
	config.options.chkAutoSave = true;
}

var adaptor = tiddler.getAdaptor();
var recipe = tiddler.fields["server.recipe"];
var workspace = recipe ? "recipes/" + recipe : "bags/common";

var plugin = config.extensions.tiddlyweb = {
	host: tiddler.fields["server.host"].replace(/\/$/, ""),
	username: null,
	status: {},

	getStatus: null, // assigned later
	getUserInfo: function(callback) {
		this.getStatus(function(status) {
			callback({
				name: plugin.username,
				anon: plugin.username ? plugin.username == "GUEST" : true
			});
		});
	},
	hasPermission: function(type, tiddler) {
		var perms = tiddler.fields["server.permissions"];
		if(perms) {
			return perms.split(", ").contains(type);
		} else {
			return true;
		}
	}
};

config.defaultCustomFields = {
	"server.type": tiddler.getServerType(),
	"server.host": plugin.host,
	"server.workspace": workspace
};

// modify toolbar commands

config.shadowTiddlers.ToolbarCommands = config.shadowTiddlers.ToolbarCommands.
	replace("syncing ", "revisions syncing ");

config.commands.saveTiddler.isEnabled = function(tiddler) {
	return plugin.hasPermission("write", tiddler) && !tiddler.isReadOnly();
};

config.commands.deleteTiddler.isEnabled = function(tiddler) {
	return !readOnly && plugin.hasPermission("delete", tiddler);
};

// hijack option macro to disable username editing
var _optionMacro = config.macros.option.handler;
config.macros.option.handler = function(place, macroName, params, wikifier,
		paramString) {
	if(params[0] == "txtUserName") {
		params[0] = "options." + params[0];
		var self = this;
		var args = arguments;
		args[0] = $("<span />").appendTo(place)[0];
		plugin.getUserInfo(function(user) {
			config.macros.message.handler.apply(self, args);
		});
	} else {
		_optionMacro.apply(this, arguments);
	}
};

// hijack isReadOnly to take into account permissions and content type
var _isReadOnly = Tiddler.prototype.isReadOnly;
Tiddler.prototype.isReadOnly = function() {
	return _isReadOnly.apply(this, arguments) ||
		!plugin.hasPermission("write", this);
};

var getStatus = function(callback) {
	if(plugin.status.version) {
		callback(plugin.status);
	} else {
		var self = getStatus;
		if(self.pending) {
			if(callback) {
				self.queue.push(callback);
			}
		} else {
			self.pending = true;
			self.queue = callback ? [callback] : [];
			var _callback = function(context, userParams) {
				var status = context.serverStatus || {};
				for(var key in status) {
					if(key == "username") {
						plugin.username = status[key];
						config.macros.option.propagateOption("txtUserName",
							"value", plugin.username, "input");
					} else {
						plugin.status[key] = status[key];
					}
				}
				for(var i = 0; i < self.queue.length; i++) {
					self.queue[i](plugin.status);
				}
				delete self.queue;
				delete self.pending;
			};
			adaptor.getStatus({ host: plugin.host }, null, _callback);
		}
	}
};
(plugin.getStatus = getStatus)(); // XXX: hacky (arcane combo of assignment plus execution)

})(jQuery);
//}}}
*{{dateTag{20101220}}} 太便宜了吧!一小碗飯(其實很多了)、荷包蛋、素雞、青江菜,只要 30 元!<<大眼>>
&&六大保障&&
%壽
%意外
%重大疾病
%醫療
%&&癌&&
%%早期
%%晚近:較不需開刀、吃藥,只要打針,但一針就很貴
%失能

!各產品
*遠雄:300 萬還本的話一年 71400,一個月 6000 多
**豁免:1~11 級
**一次金:15~300 萬
**多一個 12% 復健金(1~6 級)36 萬
**每月扶助 3~6 萬(1~6 級),保證 15 年,未領完者一次 2.25% 貼現給付
**∴沒有生前一次貼現
*不還本一年 34800,但一定要掛主約
*新光
**每月扶助金都是 6 萬,不打折
**舊版每年 87,180
**不還本 38640
**新版就只有 1~6 級豁免

!建議附約
*遠雄實支實付醫療險 C/P 值較高

!建議想法
*每月 6 萬、全部 300 萬,是因為一個臺籍看護一個月就 5 萬多;如果現在省小保費,以後獲得的保障會少很多 ∴不如趁現在年輕、保費低時,多繳一點點,以免未來還要花更多保費彌補
*年收入抓 10% 當醫療保險規劃 = 充足

!其他需求
*重大疾病險(7 項)
*重大傷病險(重大傷病卡)
哇!真的好好吃!
*基本款一個 15 元
*核桃/茉莉花一個 33 元
剛剛適逢屆期出清,買到 33 元買一送一,感謝 神!<<;)>>

/***
|Name|StyleSheetShortcuts|
|Source|http://www.TiddlyTools.com/#StyleSheetShortcuts|
|Version||
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|CSS|
|Description|'convenience' classes for common formatting, alignment, boxes, tables, etc.|

These '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'.
***/
/*{{{*/

/* text alignments */
.left
	{ display:block;text-align:left; }
.center
	{ display:block;text-align:center; }
.center table
	{ margin:auto !important; }
.right	
	{ display:block;text-align:right; }
.justify
	{ display:block;text-align:justify; }
.indent
	{ display:block;margin:0;padding:0;border:0;margin-left:2em; }
.floatleft
	{ float:left; }
.floatright
	{ float:right; }
.valignTop, .valignTop table, .valignTop tbody, .valignTop th, .valignTop tr, .valignTop td
	{ vertical-align:top; }
.valignBottom, .valignBottom table, .valignBottom tbody, .valignBottom th, .valignBottom tr, .valignBottom td
	{ vertical-align:bottom; }
.clear
	{ clear:both; }
.wrap
	{ white-space:normal; }
.nowrap
	{ white-space:nowrap; }
.hidden
	{ display:none; }
.show
	{ display:inline !important; }
.span
	{ display:span; }
.block
	{ display:block; }
.relative
	{ position:relative; }
.absolute
	{ position:absolute; }

/* font sizes */
.big
	{ font-size:14pt;line-height:120% }
.medium
	{ font-size:12pt;line-height:120% }
.normal
	{ font-size:9pt;line-height:120% }
.small
	{ font-size:8pt;line-height:120% }
.fine
	{ font-size:7pt;line-height:120% }
.tiny
	{ font-size:6pt;line-height:120% }
.larger
	{ font-size:120%; }
.smaller
	{ font-size:80%; }

/* font styles */
.bold
	{ font-weight:bold; }
.italic
	{ font-style:italic; }
.underline
	{ text-decoration:underline; }

/* plain list items (no bullets or indent) */
.nobullets li { list-style-type: none; margin-left:-2em; }

/* vertical tabsets - courtesy of Tobias Beer */
.vTabs .tabset {float:left;display:block;padding:0px;margin-top:.5em;min-width:20%;}
.vTabs .tabset .tab {display:block;text-align:right;padding:2px 3px 2px 7px; margin:0 1px 1px 0;}
.vTabs .tabContents {margin-left:20%;max-width:80%;padding:5px;}
.vTabs .tabContents .tabContents {border:none; background:transparent;}

/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
	-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
	-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
	column-count:2; column-gap:1em; column-width:50%; /* Opera */
}
.threecolumns { display:block;
	-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
	-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
	column-count:3; column-gap:1em; column-width:33%; /* Opera */
}
.fourcolumns { display:block;
	-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
	-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
	column-count:4; column-gap:1em; column-width:25%; /* Opera */
}

/* page breaks */
.breakbefore { page-break-before:always; }
.breakafter { page-break-before:always; } 

/* show/hide browser-specific content for InternetExplorer vs. non-IE ("moz") browsers */
*[class="ieOnly"]
	{ display:none; } /* hide in moz (uses CSS selector) */
* html .mozOnly, *:first-child+html .mozOnly
	{ display: none; } /* hide in IE (uses IE6/IE7 CSS hacks) */

/* borderless tables */
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
	{ border:0 !important; margin:0 !important; padding:0 !important; }
.widetable, .widetable table
	{ width:100%; }

/* thumbnail images (fixed-sized scaled images) */
.thumbnail img { height:5em !important; }

/* stretchable images (auto-size to fit tiddler) */
.stretch img { width:95%; }

/* grouped content */
.outline
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; }
.menubox
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#fff; color:#000; }
.menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#ffe; color:#000; }
.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox code
	{ color:#333 !important; }
.borderleft
	{ margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }
.borderright
	{ margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }
.borderbottom
	{ margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }
.bordertop
	{ margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }

/* scrolled content */
.scrollbars { overflow:auto; }
.height10em { height:10em; }
.height15em { height:15em; }
.height20em { height:20em; }
.height25em { height:25em; }
.height30em { height:30em; }
.height35em { height:35em; }
.height40em { height:40em; }

/* compact form */
.smallform
	{ white-space:nowrap; }
.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select
	{ font-size:8pt; }

/* stretchable edit fields and textareas (auto-size to fit tiddler) */
.stretch input { width:99%; }
.stretch textarea { width:99%; }

/* compact input fields (limited to a few characters for entering percentages and other small values) */
.onechar input   { width:1em; }
.twochar input   { width:2em; }
.threechar input { width:3em; }
.fourchar input  { width:4em; }
.fivechar input  { width:5em; }

/* text colors */
.white { color:#fff !important }
.gray  { color:#999 !important }
.black { color:#000 !important }
.red   { color:#f66 !important }
.green { color:#0c0 !important }
.blue  { color:#99f !important }

/* rollover highlighting */
.mouseover 
	{color:[[ColorPalette::TertiaryLight]] !important;}
.mouseover a
	{color:[[ColorPalette::TertiaryLight]] !important;}
.selected .mouseover
	{color:[[ColorPalette::Foreground]] !important;}
.selected .mouseover .button, .selected .mouseover a
	{color:[[ColorPalette::PrimaryDark]] !important;}

/* rollover zoom text */
.zoomover
	{ font-size:80% !important; }
.selected .zoomover
	{ font-size:100% !important; }

/* [[ColorPalette]] text colors */
.Background	{ color:[[ColorPalette::Background]];	 }
.Foreground	{ color:[[ColorPalette::Foreground]];	 }
.PrimaryPale	{ color:[[ColorPalette::PrimaryPale]];	 }
.PrimaryLight	{ color:[[ColorPalette::PrimaryLight]];	 }
.PrimaryMid	{ color:[[ColorPalette::PrimaryMid]];	 }
.PrimaryDark	{ color:[[ColorPalette::PrimaryDark]];	 }
.SecondaryPale	{ color:[[ColorPalette::SecondaryPale]]; }
.SecondaryLight	{ color:[[ColorPalette::SecondaryLight]];}
.SecondaryMid	{ color:[[ColorPalette::SecondaryMid]];	 }
.SecondaryDark	{ color:[[ColorPalette::SecondaryDark]]; }
.TertiaryPale	{ color:[[ColorPalette::TertiaryPale]];	 }
.TertiaryLight	{ color:[[ColorPalette::TertiaryLight]]; }
.TertiaryMid	{ color:[[ColorPalette::TertiaryMid]];	 }
.TertiaryDark	{ color:[[ColorPalette::TertiaryDark]];	 }
.Error		{ color:[[ColorPalette::Error]];	 }

/* [[ColorPalette]] background colors */
.BGBackground	  { background-color:[[ColorPalette::Background]];	}
.BGForeground	  { background-color:[[ColorPalette::Foreground]];	}
.BGPrimaryPale	  { background-color:[[ColorPalette::PrimaryPale]];	}
.BGPrimaryLight	  { background-color:[[ColorPalette::PrimaryLight]];	}
.BGPrimaryMid	  { background-color:[[ColorPalette::PrimaryMid]];	}
.BGPrimaryDark	  { background-color:[[ColorPalette::PrimaryDark]];	}
.BGSecondaryPale  { background-color:[[ColorPalette::SecondaryPale]]; 	}
.BGSecondaryLight { background-color:[[ColorPalette::SecondaryLight]];	}
.BGSecondaryMid	  { background-color:[[ColorPalette::SecondaryMid]];	}
.BGSecondaryDark  { background-color:[[ColorPalette::SecondaryDark]]; 	}
.BGTertiaryPale	  { background-color:[[ColorPalette::TertiaryPale]];	}
.BGTertiaryLight  { background-color:[[ColorPalette::TertiaryLight]]; 	}
.BGTertiaryMid	  { background-color:[[ColorPalette::TertiaryMid]];	}
.BGTertiaryDark	  { background-color:[[ColorPalette::TertiaryDark]];	}
.BGError	  { background-color:[[ColorPalette::Error]];	 	}
/*}}}*/
*感謝 神,男啦上台前獲得帥氣的毛毛背心,上台的打扮和預想的有點不同(改成短袖帥氣襯衫,和家銓搭)。跳的時候拼命盡量不跳錯,應該是最熟的一次了 <<XD>> 希望今天的舞蹈、歌唱(包括聖歌隊以及戲劇影片中超 kīn 的聲優獻唱 <<:$>>)有助於讓新生、會員都感到恩惠。<<:)>>
*小鳳組一起吃「一品花雕雞」很開心,一起打掃氣氛也很好,果然彼此的改變可以讓全體變得更完全。
*可惜爸媽昨晚臨時被 Pēpē 通知表哥去世,本來說可以來活動的也不能來了 <<:s>> 唉,再多幫家人禱告吧.....
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wAARCAAgACADASIAAhEBAxEB/8QAGgAAAgIDAAAAAAAAAAAAAAAABQYBBAIDB//EACwQAAEDAwIDBgcAAAAAAAAAAAECAwQABREhMQYTQRRCUWFxoRIVIzJigpH/xAAYAQACAwAAAAAAAAAAAAAAAAABBAACBf/EACkRAAIABAMGBwAAAAAAAAAAAAECAAMEERMhMQUiQdHh8BJRYXGBkaH/2gAMAwEAAhEDEQA/AO40vcQTpr01q02dwtyCnmvupAJbT0GumSfYedFrrPatkB6W/kpbGiRuo9APMmlGczNt1jNwcdW3NlvhyStBwQCDhII6DQUnVOWIkobFuPkO8hDEkBQZrC9tPU9OUHeF7q7OYWxM0mMKKHU/kOvod6OUkykv2wwL6STzG0Jm6eOyz5jrTkw6l9pLiCCCOlWpZxdSrHeXI8/mBPQAh10PZHfCF2a584voZ3hW5eVeDj3h+o9zVfji72y22BxV453Z3lpbAYAKyr7hjOndNao1qv1vb7PFcjqaSokKWySpWTnJOdTWMy13uewWJzFvkskglt6KVpJG2hOKwmkbRaqM0plfgRew0hh8IgKriw9+UGWJUW72pp1sfHElMhSQoYylQyNPQ1T4WkrhSHbNKUSprVhR77Z2/mx9BVZEPiNttLbZhoQkAJSmOoAAbADNQ1abw/co0mYpr6GccpopJB0wSTtUoKfaMmq8brunI5jTpAOFhlSw/dfqP//Z
.policy {
	float: right;
	margin: 10px;
	border-collapse: collapse;
}

.policy,
.policy thead,
.policy th,
.policy td {
	border: 1px solid #AAA;
	padding: 2px 5px;
}

.policy caption,
.policy tr.special {
	font-style: italic;
}

.policy caption {
	text-align: left;
}

.policy thead,
.policy thead th {
	border-color: #000;
}

.policy thead {
	color: #FFF;
	background-color: #000;
}

.policy th {
	padding: 2px 10px;
}

.policy tr:nth-child(even) {
	background-color: #EEE;
}

.policy input[type="checkbox"] {
	display: block;
	margin: 0 auto;
}
!Summary
This tiddler contains some basic $\LaTeX$ macros which are useful for writing Analytic Topology.  Documentation can be found [[here|BasicMacros Documentation]].

!Version
version: 1.0.4

1.0: (2011-04-15) Major release.
1.0.1: (2011-04-16) Bugfix. {{{#1}}} was added to the definition of {{{\closure}}}.
1.0.2: (2011-04-16) Command name change.  The command {{{\blackboard}}} was added (to the supplemental list).  {{{\blackBoard}}} is kept for backwards compatability.
1.0.3: (2011-04-17) Command name added.  The abbreviation {{{\fns}}} for {{{\functions}}} was added (to the supplemental list).
1.0.4: (2011-04-17) Comments changed.  Consistent capitalisation was applied to the section names.

!Code
$
\def\BasicMacros{

% Miscellaneous basics

\def\parentheses#1{{\left( {#1} \right)}}
\def\brackets#1{{\left[ {#1} \right]}}
\def\solidus#1/#2{{\left. {#1} \left/ \vphantom{#1} {#2} \right. \right.}}
\def\of{\parentheses}
\def\operator{\operatorname}

\def\script{\mathcal}
\def\gothic{\mathfrak}
\def\blackBoard{\mathbb}
\def\boldText{\mathbf}
\def\bold{\boldsymbol}


% Symbols

\def\epsilon{\varepsilon}
\def\infinity{\infty}
\def\continuum{\gothic{c}}

\def\naturals{\blackBoard{N}}
\def\integers{\blackBoard{Z}}
\def\rationals{\blackBoard{Q}}
\def\reals{\blackBoard{R}}
\def\complexNumbers{\blackBoard{C}}

\def\half{\frac{1}{2}}
\def\third{\frac{1}{3}}
\def\quarter{\frac{1}{4}}


% Sets and set operations

\def\Set#1{{\left\lbrace {#1} \right\rbrace}}
\def\set#1:#2{\Set{{#1} \colon {#2}}}
\def\singleton{\Set}
\def\emptySet{\emptyset}

\def\Sequence#1{{\left\langle {#1} \right\rangle}}
\def\sequence#1:#2{\Sequence{{#1} \colon {#2}}}
\def\tuple{\parentheses}
\def\emptyTuple{\tuple{}}

\def\family#1:#2{{\parentheses{#1}_{#2}}}

\def\subset{\subseteq}
\def\superset{\supseteq}
\def\union{\cup}
\def\Union{\bigcup}
\def\intersect{\cap}
\def\Intersection{\bigcap}
\def\setMinus{\setminus}
\def\cross{\times}
\def\product{\prod}

\def\powerSet#1{{\script{P}\of{#1}}}
\def\functionSpace#1#2{{{#2}^{#1}}}
\def\cardinality#1{{\left\lvert {#1} \right\rvert}}
\def\isEmpty{= \emptySet}
\def\isNonempty{\not= \emptySet}


% Functions and function operations

\def\function#1:#2->#3{{{#1} \colon {#2} \to {#3}}}
\def\mapsTo{\mapsto}
\def\map#1->#2{\parentheses{{#1} \mapsTo {#2}}}

\def\compose{\circ}
\def\inverse#1{{{#1}^{-1}}}
\def\restriction#1#2{{{\left. {#1} \right\lvert}_{#2}}}

\def\image#1#2{{{#2}\of{#1}}}
\def\preimage#1#2{{{#2}^{-1}\of{#1}}}
\def\fiber#1#2{\preimage{\singleton{#1}}{#2}}

\def\identity#1{{\operator{id}_{#1}}}


% Topology related notation

\def\homeomorphic{\cong}
\def\convergesTo{\to}

\def\closure#1{\overline{#1}}
\def\closureIn#1#2{{\closure{#2}^{#1}}}
\def\interior#1{{\operator{int}\of{#1}}}
\def\interiorIn#1#2{{\operator{int}_{#1}\of{#2}}}

\def\collection{\script}
\def\collections{\gothic}
\def\topology{\collection}
\def\cover{\collection}
\def\filter{\collection}
\def\ideal{\collection}

\def\interval#1#2,#3#4{{\left#1 {#2}, {#3} \right#4}}
\def\unitInterval{\interval[0, 1]}
\def\plane{{\functionSpace{2}{\reals}}}
\def\stoneCechCompactification#1{{\beta{#1}}}


% General notation

\def\modulus#1{{\left\lvert {#1} \right\rvert}}
\def\norm#1{{\left\Vert {#1} \right\Vert}}
\def\equivalent{\sim}
\def\quotient{\solidus}


% Aliases

\def\functions{\function}

}

\def\BasicMacroAbbreviations{

\def\p{\parentheses}
\def\b{\brackets}

\def\N{\naturals}
\def\Z{\integers}
\def\Q{\rationals}
\def\R{\reals}
\def\C{\complexNumbers}

\def\sng{\singleton}
\def\Seq{\Sequence}
\def\seq{\sequence}
\def\pSet{\powerSet}
\def\fnSpace{\functionSpace}
\def\card{\cardinality}

\def\fn{\function}
\def\id{\identity}

\def\homeo{\homeomorphic}
\def\sCC{\stoneCechCompactification}

}

% The following is a supplement to \BasicMacros  and \BasicMacroAbbreviations.  This macroset can be thought of as the list of changes that will be made for the next version.
\def\BasicMacrosSupplement
{

% Because 'blackboard' is one word the second 'b' should not be capitalised in the command name.
\def\blackboard{\blackBoard}

% Given the commands \function, \fn, and \functions, it is only natural that we have a command \fns.
\def\fns{\functions}

}
$
<<image feed.svg 48 48>>
This is your boomarklet. Drag it into your bookmarks and use it whenever you find a site that you want to keep:

<<bookmarklet>>

!My Bookmarks
<<list filter [tag[bookmark]][sort[-modified]]>>
昨晚回家吃飯,同時也預備好今天晨禱時要穿的正裝(帶回家)。

昨晚十點多就在客廳睡下預備,今晨就準時起來。不過,進房間禱告時卻覺得和教會屬靈氣氛差好多,就算放平常禱告時的鋼琴伴奏曲也冷冷的~~(不是天氣因素 = =)~~。還好,有個靈感,或許我需要放的歌是更深刻的,因此就先從[[我的催淚三組曲]]開始放起,果然很快進入那樣懇切的心情中。然後再來是「盲目的愛」,這樣悔改、深愛的心情都到一個程度後,再放「Go Go Jesus」、「邁向盼望」兩首熱情的歌~~(其實「Go Go Jesus」也可以催淚呢!)~~,最後,再放「I Belive」降落跑道,點足七首歌後就可以比較專心禱告了~

接下來要好好度過主日,進行今天要做的事!

主唷~還有布里斯班大洪水~<<:s>>
/*{{{*/
Background: #eef6de
Foreground: #182008
PrimaryPale: #ffffff
PrimaryLight: #d0e6a4
PrimaryMid: #a2ce49
PrimaryDark: #1e280a
SecondaryPale: #ffffff
SecondaryLight: #c6a4e6
SecondaryMid: #8e49ce
SecondaryDark: #190a28
TertiaryPale: #ffffff
TertiaryLight: #aea4e6
TertiaryMid: #5d49ce
TertiaryDark: #0f0a28
Error: #f88
ColorPaletteParameters: HSL([80|11], [0.5795092692785031],[0.1|1])
/*}}}*/
從大學到現在,「門當父不對」這個好萊塢喜劇系列,我怎麼看總是不舒服,雖然種種歧視、矛盾、磨擦、逞強、出糗都用笑料來表達,但是每次看只覺得很有壓力,很難讓我開心。(坐夜車看到第三集有感)
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2011.09.03 [1.2.3] bypass addStretchHandlers() if no '+' suffix is used (i.e., not resizable)
2010.07.24 [1.2.2] moved tip/dragtip text to config.formatterHelpers.imageSize object to enable customization
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 3, date: new Date(2011,9,3)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var width=lookaheadMatch[3];
		var height=lookaheadMatch[4];
		var tooltip=lookaheadMatch[5];
		var src=lookaheadMatch[6];
		var link=lookaheadMatch[7];

		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.href=config.macros.attach.getAttachment(link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);
			addClass(e,"imageLink");
		}

		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
		if(width||height) {
			var x=width.trim(); var y=height.trim();
			var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
			var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
			if (x.substr(0,2)=="{{")
				{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			if (y.substr(0,2)=="{{")
				{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			img.style.width=x.trim(); img.style.height=y.trim();
			if (stretchW||stretchH) config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
		}
		if(tooltip) img.title = tooltip;

		// GET IMAGE SOURCE
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			if (config.browser.isIE || config.browser.isSafari) {
				img.onerror=(function(){
					this.src=config.formatterHelpers.resolvePath(this.src,false);
					return false;
				});
			} else
				src=config.formatterHelpers.resolvePath(src,true);
		}
		img.src=src;
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
}

config.formatterHelpers.imageSize={
	tip: 'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size',
	dragtip: 'DRAG=stretch/shrink, '
}

config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
	e.title=((stretchW||stretchH)?this.imageSize.dragtip:'')+this.imageSize.tip;
	e.statusMsg='width=%0, height=%1';
	e.style.cursor='move';
	e.originalW=e.style.width;
	e.originalH=e.style.height;
	e.minW=Math.max(e.offsetWidth/20,10);
	e.minH=Math.max(e.offsetHeight/20,10);
	e.stretchW=stretchW;
	e.stretchH=stretchH;
	e.onmousedown=function(ev) { var ev=ev||window.event;
		this.sizing=true;
		this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
		this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
		this.startW=this.offsetWidth;
		this.startH=this.offsetHeight;
		return false;
	};
	e.onmousemove=function(ev) { var ev=ev||window.event;
		if (this.sizing) {
			var s=this.style;
			var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
			var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
			if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
			if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
			clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
		}
		return false;
	};
	e.onmouseup=function(ev) { var ev=ev||window.event;
		if (ev.shiftKey) { this.style.width=this.style.height=''; }
		if (ev.ctrlKey)  { this.style.width=this.originalW; this.style.height=this.originalH; }
		this.sizing=false;
		clearMessage();
		return false;
	};
	e.onmouseout=function(ev) { var ev=ev||window.event;
		this.sizing=false;
		clearMessage();
		return false;
	};
}
//}}}
/*
 * jQuery Autocomplete plugin 1.1
 *
 * Copyright (c) 2009 Jörn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
*/
//{{{
(function($){$.fn.extend({autocomplete:function(urlOrData,options){var isUrl=typeof urlOrData=="string";options=$.extend({},$.Autocompleter.defaults,{url:isUrl?urlOrData:null,data:isUrl?null:urlOrData,delay:isUrl?$.Autocompleter.defaults.delay:10,max:options&&!options.scroll?10:150},options);options.highlight=options.highlight||function(value){return value;};options.formatMatch=options.formatMatch||options.formatItem;return this.each(function(){new $.Autocompleter(this,options);});},result:function(handler){return this.bind("result",handler);},search:function(handler){return this.trigger("search",[handler]);},flushCache:function(){return this.trigger("flushCache");},setOptions:function(options){return this.trigger("setOptions",[options]);},unautocomplete:function(){return this.trigger("unautocomplete");}});$.Autocompleter=function(input,options){var KEY={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var $input=$(input).attr("autocomplete","off").addClass(options.inputClass);var timeout;var previousValue="";var cache=$.Autocompleter.Cache(options);var hasFocus=0;var lastKeyPressCode;var config={mouseDownOnSelect:false};var select=$.Autocompleter.Select(options,input,selectCurrent,config);var blockSubmit;$.browser.opera&&$(input.form).bind("submit.autocomplete",function(){if(blockSubmit){blockSubmit=false;return false;}});$input.bind(($.browser.opera?"keypress":"keydown")+".autocomplete",function(event){hasFocus=1;lastKeyPressCode=event.keyCode;switch(event.keyCode){case KEY.UP:event.preventDefault();if(select.visible()){select.prev();}else{onChange(0,true);}break;case KEY.DOWN:event.preventDefault();if(select.visible()){select.next();}else{onChange(0,true);}break;case KEY.PAGEUP:event.preventDefault();if(select.visible()){select.pageUp();}else{onChange(0,true);}break;case KEY.PAGEDOWN:event.preventDefault();if(select.visible()){select.pageDown();}else{onChange(0,true);}break;case options.multiple&&$.trim(options.multipleSeparator)==","&&KEY.COMMA:case KEY.TAB:case KEY.RETURN:if(selectCurrent()){event.preventDefault();blockSubmit=true;return false;}break;case KEY.ESC:select.hide();break;default:clearTimeout(timeout);timeout=setTimeout(onChange,options.delay);break;}}).focus(function(){hasFocus++;}).blur(function(){hasFocus=0;if(!config.mouseDownOnSelect){hideResults();}}).click(function(){if(hasFocus++>1&&!select.visible()){onChange(0,true);}}).bind("search",function(){var fn=(arguments.length>1)?arguments[1]:null;function findValueCallback(q,data){var result;if(data&&data.length){for(var i=0;i<data.length;i++){if(data[i].result.toLowerCase()==q.toLowerCase()){result=data[i];break;}}}if(typeof fn=="function")fn(result);else $input.trigger("result",result&&[result.data,result.value]);}$.each(trimWords($input.val()),function(i,value){request(value,findValueCallback,findValueCallback);});}).bind("flushCache",function(){cache.flush();}).bind("setOptions",function(){$.extend(options,arguments[1]);if("data"in arguments[1])cache.populate();}).bind("unautocomplete",function(){select.unbind();$input.unbind();$(input.form).unbind(".autocomplete");});function selectCurrent(){var selected=select.selected();if(!selected)return false;var v=selected.result;previousValue=v;if(options.multiple){var words=trimWords($input.val());if(words.length>1){var seperator=options.multipleSeparator.length;var cursorAt=$(input).selection().start;var wordAt,progress=0;$.each(words,function(i,word){progress+=word.length;if(cursorAt<=progress){wordAt=i;return false;}progress+=seperator;});words[wordAt]=v;v=words.join(options.multipleSeparator);}v+=options.multipleSeparator;}$input.val(v);hideResultsNow();$input.trigger("result",[selected.data,selected.value]);return true;}function onChange(crap,skipPrevCheck){if(lastKeyPressCode==KEY.DEL){select.hide();return;}var currentValue=$input.val();if(!skipPrevCheck&&currentValue==previousValue)return;previousValue=currentValue;currentValue=lastWord(currentValue);if(currentValue.length>=options.minChars){$input.addClass(options.loadingClass);if(!options.matchCase)currentValue=currentValue.toLowerCase();request(currentValue,receiveData,hideResultsNow);}else{stopLoading();select.hide();}};function trimWords(value){if(!value)return[""];if(!options.multiple)return[$.trim(value)];return $.map(value.split(options.multipleSeparator),function(word){return $.trim(value).length?$.trim(word):null;});}function lastWord(value){if(!options.multiple)return value;var words=trimWords(value);if(words.length==1)return words[0];var cursorAt=$(input).selection().start;if(cursorAt==value.length){words=trimWords(value)}else{words=trimWords(value.replace(value.substring(cursorAt),""));}return words[words.length-1];}function autoFill(q,sValue){if(options.autoFill&&(lastWord($input.val()).toLowerCase()==q.toLowerCase())&&lastKeyPressCode!=KEY.BACKSPACE){$input.val($input.val()+sValue.substring(lastWord(previousValue).length));$(input).selection(previousValue.length,previousValue.length+sValue.length);}};function hideResults(){clearTimeout(timeout);timeout=setTimeout(hideResultsNow,200);};function hideResultsNow(){var wasVisible=select.visible();select.hide();clearTimeout(timeout);stopLoading();if(options.mustMatch){$input.search(function(result){if(!result){if(options.multiple){var words=trimWords($input.val()).slice(0,-1);$input.val(words.join(options.multipleSeparator)+(words.length?options.multipleSeparator:""));}else{$input.val("");$input.trigger("result",null);}}});}};function receiveData(q,data){if(data&&data.length&&hasFocus){stopLoading();select.display(data,q);autoFill(q,data[0].value);select.show();}else{hideResultsNow();}};function request(term,success,failure){if(!options.matchCase)term=term.toLowerCase();var data=cache.load(term);if(data&&data.length){success(term,data);}else if((typeof options.url=="string")&&(options.url.length>0)){var extraParams={timestamp:+new Date()};$.each(options.extraParams,function(key,param){extraParams[key]=typeof param=="function"?param():param;});$.ajax({mode:"abort",port:"autocomplete"+input.name,dataType:options.dataType,url:options.url,data:$.extend({q:lastWord(term),limit:options.max},extraParams),success:function(data){var parsed=options.parse&&options.parse(data)||parse(data);cache.add(term,parsed);success(term,parsed);}});}else{select.emptyList();failure(term);}};function parse(data){var parsed=[];var rows=data.split("\n");for(var i=0;i<rows.length;i++){var row=$.trim(rows[i]);if(row){row=row.split("|");parsed[parsed.length]={data:row,value:row[0],result:options.formatResult&&options.formatResult(row,row[0])||row[0]};}}return parsed;};function stopLoading(){$input.removeClass(options.loadingClass);};};$.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(row){return row[0];},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(value,term){return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>");},scroll:true,scrollHeight:180};$.Autocompleter.Cache=function(options){var data={};var length=0;function matchSubset(s,sub){if(!options.matchCase)s=s.toLowerCase();var i=s.indexOf(sub);if(options.matchContains=="word"){i=s.toLowerCase().search("\\b"+sub.toLowerCase());}if(i==-1)return false;return i==0||options.matchContains;};function add(q,value){if(length>options.cacheLength){flush();}if(!data[q]){length++;}data[q]=value;}function populate(){if(!options.data)return false;var stMatchSets={},nullData=0;if(!options.url)options.cacheLength=1;stMatchSets[""]=[];for(var i=0,ol=options.data.length;i<ol;i++){var rawValue=options.data[i];rawValue=(typeof rawValue=="string")?[rawValue]:rawValue;var value=options.formatMatch(rawValue,i+1,options.data.length);if(value===false)continue;var firstChar=value.charAt(0).toLowerCase();if(!stMatchSets[firstChar])stMatchSets[firstChar]=[];var row={value:value,data:rawValue,result:options.formatResult&&options.formatResult(rawValue)||value};stMatchSets[firstChar].push(row);if(nullData++<options.max){stMatchSets[""].push(row);}};$.each(stMatchSets,function(i,value){options.cacheLength++;add(i,value);});}setTimeout(populate,25);function flush(){data={};length=0;}return{flush:flush,add:add,populate:populate,load:function(q){if(!options.cacheLength||!length)return null;if(!options.url&&options.matchContains){var csub=[];for(var k in data){if(k.length>0){var c=data[k];$.each(c,function(i,x){if(matchSubset(x.value,q)){csub.push(x);}});}}return csub;}else
if(data[q]){return data[q];}else
if(options.matchSubset){for(var i=q.length-1;i>=options.minChars;i--){var c=data[q.substr(0,i)];if(c){var csub=[];$.each(c,function(i,x){if(matchSubset(x.value,q)){csub[csub.length]=x;}});return csub;}}}return null;}};};$.Autocompleter.Select=function(options,input,select,config){var CLASSES={ACTIVE:"ac_over"};var listItems,active=-1,data,term="",needsInit=true,element,list;function init(){if(!needsInit)return;element=$("<div/>").hide().addClass(options.resultsClass).css("position","absolute").appendTo(document.body);list=$("<ul/>").appendTo(element).mouseover(function(event){if(target(event).nodeName&&target(event).nodeName.toUpperCase()=='LI'){active=$("li",list).removeClass(CLASSES.ACTIVE).index(target(event));$(target(event)).addClass(CLASSES.ACTIVE);}}).click(function(event){$(target(event)).addClass(CLASSES.ACTIVE);select();input.focus();return false;}).mousedown(function(){config.mouseDownOnSelect=true;}).mouseup(function(){config.mouseDownOnSelect=false;});if(options.width>0)element.css("width",options.width);needsInit=false;}function target(event){var element=event.target;while(element&&element.tagName!="LI")element=element.parentNode;if(!element)return[];return element;}function moveSelect(step){listItems.slice(active,active+1).removeClass(CLASSES.ACTIVE);movePosition(step);var activeItem=listItems.slice(active,active+1).addClass(CLASSES.ACTIVE);if(options.scroll){var offset=0;listItems.slice(0,active).each(function(){offset+=this.offsetHeight;});if((offset+activeItem[0].offsetHeight-list.scrollTop())>list[0].clientHeight){list.scrollTop(offset+activeItem[0].offsetHeight-list.innerHeight());}else if(offset<list.scrollTop()){list.scrollTop(offset);}}};function movePosition(step){active+=step;if(active<0){active=listItems.size()-1;}else if(active>=listItems.size()){active=0;}}function limitNumberOfItems(available){return options.max&&options.max<available?options.max:available;}function fillList(){list.empty();var max=limitNumberOfItems(data.length);for(var i=0;i<max;i++){if(!data[i])continue;var formatted=options.formatItem(data[i].data,i+1,max,data[i].value,term);if(formatted===false)continue;var li=$("<li/>").html(options.highlight(formatted,term)).addClass(i%2==0?"ac_even":"ac_odd").appendTo(list)[0];$.data(li,"ac_data",data[i]);}listItems=list.find("li");if(options.selectFirst){listItems.slice(0,1).addClass(CLASSES.ACTIVE);active=0;}if($.fn.bgiframe)list.bgiframe();}return{display:function(d,q){init();data=d;term=q;fillList();},next:function(){moveSelect(1);},prev:function(){moveSelect(-1);},pageUp:function(){if(active!=0&&active-8<0){moveSelect(-active);}else{moveSelect(-8);}},pageDown:function(){if(active!=listItems.size()-1&&active+8>listItems.size()){moveSelect(listItems.size()-1-active);}else{moveSelect(8);}},hide:function(){element&&element.hide();listItems&&listItems.removeClass(CLASSES.ACTIVE);active=-1;},visible:function(){return element&&element.is(":visible");},current:function(){return this.visible()&&(listItems.filter("."+CLASSES.ACTIVE)[0]||options.selectFirst&&listItems[0]);},show:function(){var offset=$(input).offset();element.css({width:typeof options.width=="string"||options.width>0?options.width:$(input).width(),top:offset.top+input.offsetHeight,left:offset.left}).show();if(options.scroll){list.scrollTop(0);list.css({maxHeight:options.scrollHeight,overflow:'auto'});if($.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var listHeight=0;listItems.each(function(){listHeight+=this.offsetHeight;});var scrollbarsVisible=listHeight>options.scrollHeight;list.css('height',scrollbarsVisible?options.scrollHeight:listHeight);if(!scrollbarsVisible){listItems.width(list.width()-parseInt(listItems.css("padding-left"))-parseInt(listItems.css("padding-right")));}}}},selected:function(){var selected=listItems&&listItems.filter("."+CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);return selected&&selected.length&&$.data(selected[0],"ac_data");},emptyList:function(){list&&list.empty();},unbind:function(){element&&element.remove();}};};$.fn.selection=function(start,end){if(start!==undefined){return this.each(function(){if(this.createTextRange){var selRange=this.createTextRange();if(end===undefined||start==end){selRange.move("character",start);selRange.select();}else{selRange.collapse(true);selRange.moveStart("character",start);selRange.moveEnd("character",end);selRange.select();}}else if(this.setSelectionRange){this.setSelectionRange(start,end);}else if(this.selectionStart){this.selectionStart=start;this.selectionEnd=end;}});}var field=this[0];if(field.createTextRange){var range=document.selection.createRange(),orig=field.value,teststring="<->",textLength=range.text.length;range.text=teststring;var caretAt=field.value.indexOf(teststring);field.value=orig;this.selection(caretAt,caretAt+textLength);return{start:caretAt,end:caretAt+textLength}}else if(field.selectionStart!==undefined){return{start:field.selectionStart,end:field.selectionEnd}}};})(jQuery);

//}}}
iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAsFJREFUOE+NVEtPGlEUvv4D/4FrF274CWoUmoqFrnRRRVea2Ard2aQurInRnU2IlISKu7owUTGRaKLBGBXLIwpj1FgJwoxPlKdvvt5zKVYUiZN8OXPPOfeb85pTxoo8kiTB5/Oxra0ttr+/z2KxGCsvL2cVFRWssrKSqVQqVlVVVVbs7oNOlmXYbDY0NTVBrVYL1NfXC9TV1aG2thbV1dXQarUwm804ODhAUcLd3V0MDAzgvV4voH8kdTod3nE0NmrR0PAWGv6RmpoafOnpAWVRQHh0dITh4e8wGAxkKECroZXrW/GhpeWZTaN5g97er4hGo/8JHQ4HTEYTTCaCEUYhTQWy22hE96dufOzqQmdnB9rb29Hc3Ay9To/Rn6M5skgk8uyLj6Pr7+8Hoe9bX0m/7e1tMI/HU7yI/wph+WGBxZJDqe5NTU2BLS8vo62t7UVMTEwgj1J+IyMjYGtrblit1hfhWnJhyZVDKb/BwUGwQCCAQCAICvMpgkEJUjCIIG+/JHHJ34v50cwNDQ2ByXIUEd5ahQ+sLCtQFAUygZ/zOlnJvSvcTnry39v7g/X135iZmYF9bAx2ux0sHo8jnogjnUojlUohlSak+TmFdF5yW5r0JDmSyQRoNinyhYUF/Bofx+ysE+zq6grX19fIZrO4u7t7FW5vb3F+fg4ah8XFRdGgjY0NMCJKJpO4ubl5FeH9/T0ymYxI1+/3Y25uDpOTkzg+Ps6NzsXFBShdIibnp1HSOa+7vLzE6ekpdnZ2QGM1PT0tSB9mkFI9PDzEycmJqBudKZU8KGrSUQYUAS0Ft9sNp9MpCBOJROFAk2M4HAbfX6KjRHx2dobP/MfPg2w0HisrK4KIJEVZ9M+gWoRCIVFMAl0kbG5u0rLE6uqq6N78/LzQUQAlFyQZ+Wblc7QHr9cLF598ukwkRMa374vR/AW2DHjCcH+SxQAAAABJRU5ErkJggg==
學車日記中斷多日未寫,轉眼過了三週,今天已經是最後的路考日了。其實最緊張的是昨天的筆試,因為上週才開始唸 <<哈>> 不過感謝 神,在許多次的內心求救以及認真唸了一夜一晨後,筆試順利過關,就到了今天的路考。

路考不外乎路旁停車、倒車入庫、S 形進退、直線加速、上坡起步這幾關,過去三週中其實都一直在練這些,練到教練都不太管我了 <<哈>> 所以昨天考完我就舒了一大口氣。不過,任何事情要是自以為很簡單,往往就會翻船,因此我還是謙虛地從清晨開始把一天交託給 神,希望自己從屬靈開始,內心精神都要保持在最正確的狀態。

今早到了駕訓班,光是上午應試的同學大概就七、八十位。大家坐在等候區就定位,枯候眾位考官到場時,細雨也變得比較大,緊張的其他同學們(感覺女生比男生還多!)也越來越鬧哄哄。雖然我有聖三位可以靠,但是大家這麼慌,也太可憐了,光是和我同台車的美眉就一直顯得非常焦慮,我就突然有感動,何不趁這機會讓大家知道這世上是有 神的。想了幾分鐘盤算大概要怎麼講以後,就鼓起勇氣站起來轉身(我剛好坐第一排)對大家說:「各位同學,我是去教會的,不管大家有沒有這個信仰,我可以為大家禱告,請 神和耶穌去除大家的緊張。願意一起禱告的話,請閉上眼睛,最後說『阿們』就行了。」然後我就開始誠懇禱告了幾分鐘,最後也真的聽到有人大聲喊阿們回應,呵呵。做這番宣示,感覺比考路考還緊張,搞得原本不緊張的我坐下來之後身體都有點激動起來哩!<<:p>>

因為我的號次很前面,所以不久後就和同車的學弟及美眉輪流下去應考,而我也可以藉機大方地奉 神之名鼓勵他們。學弟壓了條線扣 16 分,但沒有大礙;我則從頭到尾按平常表現順利完成,沒有受到場面太大影響,真的要感謝聖三位的保守。

雖然這許多人都沒有認識到,就連比較有機會講到話的同車學弟妹也是沒留聯絡方式,不過很希望今天的經歷會在他們的記憶中留下美好的印記啦。不過我覺得下次我應該要做得更好,至少除了給大家「加油」外也要補一句「當您順利過關,別忘了感謝 神!」<<;)>>
原載:「愛買 - 生活聰明站」<http://www.fe-geant.com.tw/smart/smart_content.aspx?type_no=5&serial_no=28>
<<<
水洗/非水洗式:一般而言非水洗式電鬍刀殘留之油垢鬍渣,較易孳生細菌,需經常使用毛刷、專用清潔劑清潔保養;水洗式使用完後,直接置於水龍頭下以水直接沖洗清潔即可。往覆式/迴轉式刀頭:往覆式刀頭:深度刮鬍,可徹底刮去鬍根,較適合鬍鬚粗或濃密者。迴轉式刀頭:觸及皮膚時感覺佳,適合於鬍鬚少或肌膚纖細者。刀頭數多寡:三刀、雙刀頭:適合鬍子濃密或欲節省時間的人使用。雙刀、單刀頭:適合鬍子稀疏的人使用。電源方式/電壓差異:電源方式:一般可分為充電式、充電/插電兩用、電池式三種 依各人偏好有所不同,電池式一般為外出攜帶/旅遊使用(水洗式電鬍刀皆為充電式)電壓差異:分為國際電壓110~240V及國內電壓100~120V兩種。若經常出國旅遊者,適合使用電池式或國際電壓功能之電鬍刀。產品設計/品質考量:選購時,店家通常無法提供試刮,因此必須親身感覺機器握感,產品設計是否符合人體工學及不易滑落,電源開啟時,振動及聲音是否降至最低程度。品牌/製造國亦是品質考量的重要依據。
<<<
A [[SiteIcon|SiteIcon tiddler]]@glossary helps provide some identity to your space.  Ideally it'd be a square and a minimum of 48*48 pixels size.  You can upload your site icon using the uploader below.

<<binaryUploadPublic title:SiteIcon>>
<<list filter [tag[comment]] emptyMessage:目前沒有任何留言>>
/%
|Name|QuickEdit_sort|
|Source|http://www.TiddlyTools.com/#QuickEdit_sort|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - sort lines of text|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="sort lines of text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select sort order...','');
	s.options[s.length]=new Option('ascending','A');
	s.options[s.length-1].title='ascending';
	s.options[s.length]=new Option('descending','D');
	s.options[s.length-1].title='descending';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		var e=config.quickEdit.getField(this.button); if (!e) return false;
		var lines=config.quickEdit.getSelection(e).split('\n').sort();
		if (this.value=='D') lines=lines.reverse();
		replaceSelection(e,lines.join('\n'));
		e.focus();
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>sort</a></html>
  現在傍晚 17:42 據說臺中氣溫 14 度,但總覺得似乎更冷,不騎車光走在路上手也會冷!也許是因為吹著風,讓我頭次領教中南部的冬!

  還好夫人今天為我買了禦寒口罩,不然還真不舒服!<<:p>> 但我連手套都想戴上啦!
R0lGODlhEwATAPfDAMfd81MfDfzqT/3sUvzqTvzmSv/jRv3tUf38+uDVvv3mS8mhWv3wV////vvbQf7eQvvoTfTHMumzIv789//+/P3kSdK8RPbhrO/jyPbpzfznTPLDL/bPOOvCU+Xcx/PPO9rGm/7+/NemJ9K0O/PPOrOWT7KUTLeQU9W0Zde2Zvn48/3lSbqTVPvnTcOnadi2a/naQvPNOf/vofzpT82jLbqgYOnHbuCrJrOKK/PUdeOvJs+gJ7GOK/zmS9qqKfvoTv38+fr26vj28fj38qiFNO/FQ/3wVPvbP+7Md/zcQfnYPdaoLLSKJ/TMObqhZryiaPTOOsytNvnu1P3rUcanNeqzI//hQ7KRLfvdRe7jzP7sUOO4Mf/iRa6JKP/gRM+fKVooEv7tU869luq0JOnIbv/fQ/bSPf79+/bTPP79+uSwJtO9fvrw1vnu0O27Kf3xVrOTL/rw18Ooaf379uu2Jf7mSu3MdPz59OGzLfzvVvjYPezAMvTMNdvHnfDPd7OWN7WMKNCiKNuwLvvnS/zpTc+7o7uQKPTPOcinMv/jSM6+m7uRKdCgJ+myJPznS/ziRsiaJv75q/zpTu7kzeq0Jf/kSP7kSeXbxs68lvPeqv3uU/3wVfztVP3tU/DQd/z7++GsJ9SyOd3LsOu7L926bP3vU+69Ku24J//jR8CYKtOmKO/ENNPChP3lS1gmEf3kSvHCLt6vLNalJK+VXvnXPfPdqfru0fbPNtSlKPC+K/DALbqQKPnv1dK9RNimJu66KFMfDpl4J////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+HUJ1aWx0IHdpdGggR0lGIE1vdmllIEdlYXIgMy4wACH5BAEAAMMALAAAAAATABMAAAj+AIcJHDjsgqcOSDIRXCjQVo4PWFr94IJmFZkMDEUtIKGBgRFNAggpMGBmC4tCBBcAA/an15tSByQVCIVj5YmBbWIwsLDSwqYBBEaspMFhCQaBRV7lCRaJFTBOQIGtkRHs1qgUAqGECTYMTIBhnabMGBbA1bBgsAJluQDjANcAX4E6Ivs1mC4fIPygEqCF61kBLSr4DRbBlBo5HSwNggAhWLACPSo8ouV4wwY3Y0zYcZCojgINBVZUMlDGgR4OEXKdAvWk1iErBqgEgxPFy4MjiHgES/WL0g5Mw/YkeXAFAADHyI13oSNh16VhNpooCQaAocBgEnzVEJgBDx/qXMM4nz1bBVCCgaRiCaLOMJisRYoWvsClCrl9SExmWceA4osIHY3cwIghRJxnnUCT9OFCCU6I4QFDAQEAOw==
{{p{
我還沒有搭到這條貫通的捷運線,今天仍然是從臺電大樓搭新店ㄧ淡水線到臺北車站一帶,不過經過古亭站時已可聽到廣播改為提醒可在該站換車前往新莊、蘆洲。}}}
{{p{
前兩年起公司已搬到古亭站出口附近,也看著古亭站附近羅斯福路挖路施工了好久。後來才知道這些工程是為了貫通新莊ㄧ中和線,就還蠻期待它趕快完工,讓我哪天可以抄捷徑從公司坐去東區~~(其實我在臺北市活動的時間及範圍已減少,這個願望的實益不大,大概只是一種長期受工程不便影響下的補償心理吧哈!<<哈>>)~~及至這兩天,總算盼到正式通車了,其實我的興奮主要倒還是在於這條路線能讓臺北捷運粗具網狀多線交叉的規模,不再只是淡水新店與板南線十字交叉或加上--詐胡--文湖線的 H 狀格局了,我們已停在這狀態太多年了。多貫通一條線,轉乘點變多、習慣改變好像變複雜,但也意味可以透過大眾交通工具迅速抵達的地方變多了不是嗎?~~(不過借題發揮炒地皮就免了吧!)~~所以當之前有人在 FB 上 po 文加畫圖解釋新轉乘方式的好處、駁斥媒體的危言聳聽、大驚小怪時,我就欣然接受也期待新的發展ㄧㄧ當然,從之前開始有人介紹新路線到這幾天終於通車,也過了好幾個月,搞不好快一年了,而今總算是等到了!}}}
{{p{
為了回應--無知--缺乏資訊民眾的疑慮,後來臺北市政府近幾月也先期不斷在捷運各車站電視上打廣告宣導未來新轉乘方式的方便性,相信也已有效達到目的。不過,今天我從北車附近坐回臺電大樓時,倒是發現一個現象似乎被大家忽略了。本來預期搭的是新店線的車子,車上跑馬燈打的卻是「開往臺電大樓」,一開始讓我有點詫異,因為之前這條線上不會有這種車,就算有非開往新店的,也是寫「開往南勢角」。我隨即意會過來:大概是原本往返北投ㄧ南勢角的列車,因為--河流改道--路線改變、南勢角已歸新莊中和線,所以改成過了古亭站後繼續直行綠線到臺電大樓就立刻折返。我瞭解這點後,還提醒旁邊後來上車的外國人,讓他們瞭解這班車雖然方向正確,但無法直達他們的目的地(看是公館還是景美)。}}}
{{p{
我本來以為臺灣本地人應該都知道這班車是怎麼回事才搭上來,還想說怪不得車上人好像比較少。想不到,車到臺電大樓乘客大多下車,但還是有人不明所以被工作人員鳴哨趕下車;月臺上也有好幾處看到工作人員向民眾說明如果要再往南要等下班車。看來想必這一折騰會有些人心裡不舒服,我自己也經過一位一臉不滿的長輩覺得不能接受,雖然我插嘴跟他解釋似乎也沒有解開他的心情。我繼續走我的路出站,一邊想著這雖然是沒什麼好不滿的(車廂上也寫明了目的地,況且這是正當的改線,也不是多麼不方便的事故),但也發現這會不會是捷運公司和北市府集中火力宣導/行銷/宣傳「東門站通車」、「新轉乘方式」種種好處之餘,卻忘了說明而造成大家感覺被「突襲」的一點差異之處?我印象中幾乎沒聽過有人介紹隨著新莊中和線貫通,原往返北投南勢角間的這條線會改駛北投臺電大樓,然後似乎也沒人預料到,原本習慣於在新店線沿線搭車往南到公館以南的人們,只會習慣避開往南勢角的車(今後不可能有這種車了)、以為其他車就一定會到新店,但想不到現在變成多出一種車是只到臺電大樓,是應該避開的,但很多人卻可能囿於習慣而沒有細查車廂上的標示,造成期待落空時的小小不便哩。這種大家致力於縮短主要貫通路線適應期,但卻遺忘另一條原路線(冷門嗎?<<思>>)受到影響的現象,我覺得還挺妙的。可能這幾天大部分的人才會陸續發現、進而自我調適吧,只是這就不在原預料範圍了。}}}
{{p{
所以,往公館以南的朋友們,搭車時也要小心囉,以前中和人得挑車子搭的狀況,這下該輪到咱們了 <<XD>> 也希望下條捷運路線通車、調整時(會是所謂的信義線通車並且貫通新店線嗎?受影響的可能是中正紀念堂站,綠、紅兩線也會再受衝擊吧!),大家可以把瞻前顧後、加強宣導的精神發揮得更好 <<:p>>}}}
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
	<title>Account</title>
	<link href="/bags/common/tiddlers/profile.css" type='text/css' rel='stylesheet' >
	<link href="/bags/common/tiddlers/admin.css" type='text/css' rel='stylesheet' >
	<link href="/bags/common/tiddlers/jquery-ui.custom.css" type='text/css' rel='stylesheet' >
	<script type="text/javascript" src="/bags/common/tiddlers/backstage.js"></script>
</head>
<body>

<div id="container">
	<div class="main section">
		<a class="app" href="/apps">back to apps</a>
		<div class="left">
		<div id="siteiconArea">
		<h2>User Icon</h2>
		<div>
			<img id="siteicon" class="siteicon">
			<form id="upload" method="POST" enctype="multipart/form-data">
				<input type="hidden" name="title" value="SiteIcon" />
				<input type="hidden" name="tags" value="excludeLists">
				<input type="hidden" name="csrf_token" class="csrf" />
				<input type="file" name="file" />
				<input type="submit" value="upload" />
			</form>
			<div id="dropzone">Drop file here
				<img class="notloading" src="/bags/common/tiddlers/ajax-loader.gif" alt="submitting SiteIcon" />
			</div>
		</div>
		</div>
		<h2>Find Space</h2>
		<form class="spaceSearch">
			<input class="inputBox" type="text" placeholder="find space" />
			<a href="http://docs.tiddlyspace.com/What%20is%20a%20Space%3F" class="help"
				title="What is a space?">What is a space?</a>
			<button>view all</button>
		</form>
		<div class='list-container'>
			You are a member of the following spaces:
			<ul class='ts-space-search'>
			</ul>
		</div>
		<h2>Create New Space</h2>
		<form class="ts-spaces">
			<input class="inputBox" type="text" name="spacename" placeholder="space name"><span class="hostSuffix">.tiddlyspace.com</span>
			<input type="submit" value="Create Space" />
		</form>
		</div>
		<div class="right">
		<h2>Change Password</h2>
		<form class="ts-password">
			<input class="inputBox" placeholder="existing password" type="password" name="password">
			<input class="inputBox" placeholder="new password" type="password" name="new_password">
			<input class="inputBox" placeholder="new password"	type="password" name="new_password_confirm">
			<input type="submit" value="Change password">
		</form>
		<h2>OpenID</h2>
		<h3>Why OpenID?</h3>
		<a href="http://openid.net/"><img src="/bags/common/tiddlers/openid.png" alt="openid" ></a><br />
		Use just one username and password across hundreds of OpenID-enabled sites.<br />
		It's an open standard.<br />
		<a href="http://openid.net/what/">learn more</a>
		<ul class="ts-identities"></ul>
		<form class="ts-openid" target="_top">
			<div>
				Add an openid:
			</div>
			<input class="inputBox" type="text" name="openid" placeholder="your openid" />
			<input type="submit" value="Register" />
			<a href="http://openid.net/get-an-openid/" class="help"
			title="What is an open id?">What is an open id?</a>
		</form>
		</div>
		<div class="clear"></div>
	</div>
</div>
<script type='text/javascript' src='/bags/common/tiddlers/jquery.js'></script>
<script type='text/javascript' src='/bags/tiddlyspace/tiddlers/chrjs'></script>
<script type='text/javascript' src='/bags/common/tiddlers/chrjs.space'></script>
<script type='text/javascript' src='/bags/common/tiddlers/chrjs.users'></script>
<script type='text/javascript' src='/bags/common/tiddlers/chrjs.identities'></script>
<script type='text/javascript' src="/bags/common/tiddlers/jquery-ui.custom.js"></script>
<script type='text/javascript' src='/bags/common/tiddlers/jquery-form.js'></script>
<script type='text/javascript' src="/bags/common/tiddlers/siteiconupload.js"></script>
<script type='text/javascript' src='/bags/common/tiddlers/ts.js'></script>
<script src="/status.js"></script>
<script type="text/javascript">
/*
 * jQuery UI Autocomplete HTML Extension
 *
 * Copyright 2010, Scott González (http://scottgonzalez.com)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * http://github.com/scottgonzalez/jquery-ui-extensions
 */
(function( $ ) {

var proto = $.ui.autocomplete.prototype,
	initSource = proto._initSource;

function filter( array, term ) {
	var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
	return $.grep( array, function(value) {
		return matcher.test( $( "<div>" ).html( value.label || value.value || value ).text() );
	});
}

$.extend( proto, {
	_initSource: function() {
		if ( this.options.html && $.isArray(this.options.source) ) {
			this.source = function( request, response ) {
				response( filter( this.options.source, request.term ) );
			};
		} else {
			initSource.call( this );
		}
	},

	_renderItem: function( ul, item) {
		return $( "<li></li>" )
			.data( "item.autocomplete", item )
			.append( $( "<a></a>" )[ this.options.html ? "html" : "text" ]( item.label ) )
			.appendTo( ul );
	}
});

})( jQuery );

/***
_accounts application specific javascript
***/
var link;
ts.init(function(ts) {
	if(ts.user.anon) { // redirect to homepage when user not logged in
		window.location = ts.getHost();
	} else if(ts.user.name === ts.currentSpace){
		initSiteIconUpload(ts.user.name);
	} else {
		link = $("<a />").attr("href", ts.getHost(ts.user.name) + "/_account").text("Change User Icon");
		$("#siteiconArea div").empty().append(link);
	}
	$(".hostSuffix").text("." + ts.getHost("").split("//")[1]);
	ts.getSpaces(function(spaces) {
		$("<div class='info' />").text("You have " + spaces.length + " spaces.").insertBefore($(".spaceSearch")[0]);
		$("form.spaceSearch input").autocomplete({
			html: true,
			source: function(req, response) {
				ts.getSpaces(function(spaces) {
					var selected = [];
					for(var i = 0; i < spaces.length; i++) {
						var space = spaces[i];
						if(space.name.indexOf(req.term) > -1) {
							var host = ts.getHost(space.name) ;
							var img = host + "/SiteIcon";
							selected.push({
								value: space.name,
								label: '<a href="' + host + '" target="_parent" class="autocompleteLink"><img src="' + img + '" style="height:24px;width:auto;max-height:24px;max-width:24px;"/>' + space.name + '</a>'
							});
						}
					}
					response(selected);
				});
			},
			select: function(event, ui) {
				window.top.location = ts.getHost(ui.item.value);
			}
		});

		var $ul = $('.ts-space-search');
		$.each(spaces, function(i, space) {
			$ul.append($('<li/>').html($('<a/>').attr('href', space.uri)
				.text(space.name)));
		});

		$('form.spaceSearch button').click(function(ev) {
			$('.list-container').slideToggle('fast');
			ev.preventDefault();
			return false;
		});
	});
});

if(window != window.top) {
	$("html").addClass("iframeMode");
	$("a").live("click",function(ev) {
		$(ev.target).attr("target", "_parent");
	});
}
</script>
<!--[if lt IE 8]>
<script type="text/javascript" src="/bags/common/tiddlers/json2.js"></script>
<![endif]-->
</body>
</html>
<html>
<head>
<title>Bulk Deletion Application</title>
<link rel="stylesheet" href="/bags/common/tiddlers/profile.css" type="text/css">
<script src="/bags/common/tiddlers/jquery.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="container">
	<div id="header">
		<h1>Bulk Deletion Application</h1>
	</div>
	<div class="main section">
	Please take care when using this space as it can delete everything in your private and public bags. To use simply select the tiddlers you want to delete and click the delete all button.

	<form id="filter" style="display:none;">
		<p>Note you can filter this list using <a href="http://tweb-filters.tiddlyspace.com/GettingStarted">tiddlyweb filters</a>.</p>
		<h2>Filter this list:</h2>
		<input name="value" type='text' placeholder='select=tag:systemConfig'>
		<button>Apply Filter</button>
	</form>
	<h2>Select tiddlers to delete</h2>
	<table id='bulk'>
	</table>
	</div>
</div>
<script type='text/javascript'>
var space = window.location.host.split(".")[0];
var tableObj = {};
var url = "/recipes/" + space + "_private/tiddlers";
var hash = window.location.hash;
if(hash.indexOf("?") === 1) {
	url += hash.substr(1, hash.length);
}
$("#filter").submit(onSubmit).show();
var onSubmit = function(ev) {
	var filterVal = $("#filter [name=value]").val();
	if(filterVal.indexOf("?") === 0) {
		filterVal = filterVal.substr(1, filterVal.length);
	}
	window.location.hash = "#?" + filterVal;
	window.location.reload();
	ev.preventDefault();
};
if(window.location.hash.indexOf("#?") > -1) {
	$("#filter [name=value]").val(window.location.hash.substr(2));
}
$("#filter button").click(onSubmit);
$.ajax({ url: url,
	dataType: "json", success: function(tiddlers) {
		var table = $("#bulk")[0];
		$("<tr><th>Title</th><th>Status</th><th>Select <input type='checkbox' class='batchSelect' /></th></tr>").appendTo(table);
		$(".batchSelect").click(function(ev) {
			var ch = $(ev.target).attr("checked") ? true : false;
			$("input.tidCheckBox:visible").attr("checked", false).each(function(i, el) {
				$(el).attr("checked", ch);
			});
		});
		$("<button />").text("delete all selected tiddlers").insertBefore(table).click(function(ev) {
			if(!confirm("DELETE all the tiddlers that have been selected before? Be warning that this is irreversable!")) {
				return;
			}
			var tiddlers = [];
			$("input.tidCheckBox:checked:visible").each(function(i, el) {
				var tid = $(el).data("tiddler");
				if(tid) {
					tiddlers.push(tid);
				}
			});
			function deletetid(tid) {
				$.ajax({ url: "/bags/" + tid.bag + "/tiddlers/" + encodeURIComponent(tid.title),
					type: "DELETE",
					success: function(r) {
						var el = tableObj[tid.title];
						$(el).animate({ opacity: 0}, {
							complete: function(el) {
								$(this).remove();
								}
							});
					}
				});
			}
			for(var i = 0; i < tiddlers.length; i++) {
				var tid = tiddlers[i];
				deletetid(tid);
			}
		});
		for(var i = 0; i < tiddlers.length; i++) {
			var tiddler = tiddlers[i];
			if(tiddler.bag.indexOf(space) === 0) {
				var row = $("<tr />").appendTo(table)[0];
				$("<td />").text(tiddler.title).appendTo(row);
				var status = tiddler.bag.split("_")[1];
				$("<td />").text(status).appendTo(row);
				var deletecol = $("<td />").appendTo(row)[0];
				tableObj[tiddler.title] = row;
				$("<input />").addClass("tidCheckBox").attr("type", "checkbox").data("tiddler", tiddler).appendTo(deletecol);
			}
		}
	}
});
</script>
</body>
</html>
[[這10句話,上台簡報時一句也別說出口!-風生活|好文推薦-風傳媒-Inside|http://www.storm.mg/lifestyle/45311]]
你好,我是 G.J.Robert,''G''=''G''od,''J''=''J''esus,所以我是一位很愛 God & Jesus 的 Robert。這裡是我的部落格,也是我的筆記本,歡迎你的光臨,希望我的分享多少讓你感到有所收穫!

因為重新開張不久,這裡還並不美觀,好像新開張的餐廳露出很多管線一樣,而且內容也很簡陋,但是希望能夠慢慢端出可口的菜餚,能夠逛的地方也越來越豐富。

祝福今天的你有主的平安!See you <<;)>>
*本學期師大初次午聚,天氣晴;師大大樓前有盛開的櫻花。和上學期某次一樣,午聚常遇到好天氣,有神祝福和同在的感覺。[img[https://lh6.googleusercontent.com/_yS6INWYqq34/TWNZ40TPzJI/AAAAAAAAAXc/B6ZDLtl2rfA/s400/C360_2011-02-22%2014-01-31.jpg]]
R0lGODlhEwATAPfgAOmzIu26KOqzI//jR/7eQvzqT//kR/389/3sUvzqTvnVO//jRs+9mv/iRfbPN/v47vzeQvHRgeq0Jf3tUeDBeu69Ku29Kf347P3kSf79+O/FRPjTOuu2Jfv69vn06uy3JtimJvbPOP3yVp8+H/bPNv3tU58/H/zmS/3zV/zmSv3mS/vbQfzpT//hQ/3xVv3gQ/3dQPTPOfzcQfzcQOe6RPTKM+G1QPvnTeGsJ/Xy6/PPO8uiO9CgJ6iHPO27KKmGNvznS6N/Kf/fQ8+gJ+OvJrifaNXHpeu7L/LEMPHDMP789+/ENOLRqvTgsfvdRfvbP96vLP757+CrJvXhsvvnS/HCLvDCLfXjs/zeQe66KP/jSOzAMvTw6Oa1Kee1LdSlKO3Kd/XIM/3rUfnZP9aoLOi6RvziRtqqKdCiKPXks8+fKf3uU7efbvv37P3vU/7tU+LRq9emJ9XHpsmfOvvoTqOAKvbTPPTOOvHOeOTPov3lS9y9efzpTumyJPbgquK3QPXgqaeGO//kSLigb7SKJ7uRKf3wV+q0JNy9euu/RvPNOeq0I/TMOf/gRLuQKOzJdvDBLbqQKP7kSey4Juu+RvjXPv3wVLGNPfnYPe/YpvTMNffRN/DOeKmHN+24J/3kSvrZPvTw57ieZ7WMKOa0LfnaQuSwJvz37PDALe27Ke/ZpvztVMmrbP3wVeGzLcirbOTQorKOPfHBLe68KfzpTfzvVvzwXP7zV+jOTPnZPebBPejVVP70V7ycRf3mU/zNN58/IOjVVfzwW/zwVvXNNfnXPfLDL/voTfTHMvznTOG/QPvuVvviR/PPOuO4MffXP/C+K/bSPfvmTNy0Ov7sUN68QN69Qd25PfraP/jYPf3lSf7mSqmNS6qOS14tHf///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/h1CdWlsdCB3aXRoIEdJRiBNb3ZpZSBHZWFyIDMuMAAh+QQFyADfACwAAAAAEwATAAAI/gC/CRR44QqeRKTKgGnSZqDDbxn8aNDhRA+dBnaW/FF14GGUCN5CWlpTgJaKkN4oPBiYAeQtXiK8uZnAx9sAArm87en4DZAiQ8NQiHDRCkGCFDdDhCAD69sFDZ+CdevGbdcqo7imctN1ZIeHNHfedBvIrYQYFmMFdquChgmnUhPSfutmFIjcbqjOvKKkRQy3QXK+cStwQ8/fwN0qmIrlRdINbt7YCD6BwQxkydxSHQpCY8UnW9xCCxOkpZGv0Nx+ecLR41GMFlo+yW7QiMCKZ9E0oMoiYYioKVtkEIAhyMCLGWMUKLdggQOASEZO2WCECRQECFg2bKgBqcKHDwBAXXQK9S2TK00kHDgwYWIEMAHw4Y9iIFAJBShJkFgJEAAAfwAALFLIIB0M9AAiX3QxSwCTcCCBD+ERwkYODx2QxxxqxEFEH1Lw4MgPDBT4kEAewMHKJXUEUoQcXDwUEAAh+QQFFADgACwBAAcADgAGAAAINQDBCfQmsOBAgQMKdPP2zSCGhQ3BUQH3LaLBigK1GBS4QMhGcAsGGBhQ8EmlTWFkGTTwsWBAACH5BAUUAOAALAQABgAKAAMAAAgSAL15A0ewoMBvBRMiRJiQIMKAACH5BAUUAOAALAQABgALAAEAAAgMAL+B8wauYEGB3gICACH5BAUUAOAALAUABgAKAAMAAAgUAL99A0ewoEBw3goqTJhQIUFvAQEAIfkEBRQA4AAsAgAHABAABgAACDoAwQkE922gwYIGwclhk1Ahw4RsvIHzZTAiuCMSJBm0BW5Ao4YCB3zypUWLwWiMthxJKEhQwwoVBgYEADs=
/***
|Name:|ToggleTagPlugin|
|Description:|Makes a checkbox which toggles a tag in a tiddler|
|Version:|3.1.0a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#ToggleTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}
* TagName - the tag to be toggled, default value "checked"
* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler
* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'
(If a parameter is '.' then the default will be used)
* TouchMod flag - if non empty then touch the tiddlers mod date. Note, can set config.toggleTagAlwaysTouchModDate to always touch mod date
!!Examples
|Code|Description|Example|h
|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|
|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|
|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|
|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|
|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|
!!Notes
* If TiddlerName doesn't exist it will be silently created
* Set label to '-' to specify no label
* See also http://mgtd-alpha.tiddlyspot.com/#ToggleTag2
!!Known issues
* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing
* Should convert to use named params
***/
//{{{

if (config.toggleTagAlwaysTouchModDate == undefined) config.toggleTagAlwaysTouchModDate = false;

merge(config.macros,{

  toggleTag: {

    createIfRequired: true,
    shortLabel: "[[%0]]",
    longLabel: "[[%0]] [[%1]]",

    handler: function(place,macroName,params,wikifier,paramString,tiddler) {
      var tiddlerTitle = tiddler ? tiddler.title : '';
      var tag   = (params[0] && params[0] != '.') ? params[0] : "checked";
      var title = (params[1] && params[1] != '.') ? params[1] : tiddlerTitle;
      var defaultLabel = (title == tiddlerTitle ? this.shortLabel : this.longLabel);
      var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;
      var touchMod = (params[3] && params[3] != '.') ? params[3] : "";
      label = (label == '-' ? '' : label); // dash means no label
      var theTiddler = (title == tiddlerTitle ? tiddler : store.getTiddler(title));
      var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {
        if (!store.tiddlerExists(title)) {
          if (config.macros.toggleTag.createIfRequired) {
            var content = store.getTiddlerText(title); // just in case it's a shadow
            store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
          }
          else
            return false;
        }
        if ((touchMod != "" || config.toggleTagAlwaysTouchModDate) && theTiddler)
            theTiddler.modified = new Date();
        store.setTiddlerTag(title,this.checked,tag);
        return true;
      });
    }
  }
});

//}}}

摘自蘇破浪同學今天的 MSN 暱稱,看起來很有詩意,但是如果你會講閩南語的話……= =
/***
|Name:|ExtentTagButtonPlugin|
|Description:|Adds a New tiddler button in the tag drop down|
|Version:|3.2 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{

window.onClickTag_mptw_orig = window.onClickTag;
window.onClickTag = function(e) {
	window.onClickTag_mptw_orig.apply(this,arguments);
	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	// Thanks Saq, you're a genius :)
	var popup = Popup.stack[Popup.stack.length-1].popup;
	createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
	wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li"));
	return false;
}

//}}}

ColorPalette
StyleSheet
SiteSubtitle
GettingStarted
SiteTitle
MainMenu
SiteIcon
DefaultTiddlers
ViewTemplate
PageTemplate
SideBarOptions
EditTemplate
SiteInfo
SideBarTabs
ToolbarCommands
*臺北
**--南港極限運動公園--
***「小米」影片的地點
***20160229 去,發現當有很多年輕人在溜滑板、騎特技單車時,需要勇氣才敢把孩子放上去騎 push bike → 敗興而歸
**大佳河濱公園 ✔ 風景壯闊,小朋友多
**動物園河濱公園 ✔ 但去久了就覺得無聊
**內湖運動公園(還沒去過)
***☞ [[芊芊の雲端女兒紅: 趴趴走*3Y03M19D_北市內湖.運動公園﹙捷安特滑步車Giant PushBike 練騎05回﹚ ~ 20121006 - yam天空部落|http://blog.yam.com/jimmywinnie/article/57420055]]
*臺中
**美術綠園道 ✔ 但規模小
**都會公園:還沒去過,據說不錯
看到這樣的新聞會讓你覺得很唏噓不是嗎?為什麼所愛的人總是被這社會弄得如此不幸呢?
最近,對於業內翻譯的錙銖必較,甚至到了惡性同業相殘的狀況,開始感到非常厭倦。

並不是我沒有努力,而是發現投入了兩、三倍的努力以後,對方還是非置你於死不可的時候,真的覺得很累,也對於每天必須上班這件事感到不悅。
(function($) {

// mock out HTTP requests
jQuery.ajax = function(options, isCallback) {
	if(!isCallback) {
		return setTimeout(function() {
			$.ajax(options, true);
		}, 500);
	}

	if(options.type != "GET") {
		console.log("AJAX", options);
	}

	var xhr = {
		getResponseHeader: function() {}
	};
	var data;

	tiddlyweb.commander.notify("URI: " + options.url);

	var path = $.map(options.url.split("/"), function(item, i) {
		return decodeURIComponent(item);
	});
	var resource = path.pop();
	var bag, recipe;
	switch(resource) {
		case "recipes":
			data = ["Omega"];
			break;
		case "bags":
			data = ["Alpha", "Bravo", "Charlie", "Delta"];
			break;
		case "tiddlers":
			bag = path[1] == "bags" ? path[2] : "Foxtrot";
			recipe = path[1] == "recipes" ? path[2] : undefined;
			data = $.map(["Foo", "Bar", "Baz"], function(item, i) {
				item = {
					title: bag + "::" + item,
					bag: bag
				};
				if(recipe) {
					item.recipe = recipe;
				}
				return item;
			});
			break;
		case "revisions":
			var container = {
				type: path[1] == "bags" ? "bag" : "recipe",
				name: path[2]
			};
			var revs = Math.random().toString().substr(2).split("");
			data = $.map(revs, function(item, i) {
				var rand = Math.random();
				item = {
					title: path[path.length - 1],
					revision: Math.floor(rand * 1000 * item + 1)
				};
				item[container.type] = container.name;
				return item;
			});
			break;
		case "status":
			data = {
				username: "DEV",
				challengers: ["N/A"],
				version: "mock"
			};
			break;
		default:
			var type = path.pop();
			switch(type) {
				case "recipes":
					data = {
						desc: "lorem ipsum dolor sit amet",
						policy: {
							"read": [],
							"manage": ["R:ADMIN"],
							"owner": "administrator"
						},
						recipe: [
							["Alpha", ""],
							["Charlie", "select=tag:foo"],
							["Bravo", ""]
						]
					};
					break;
				case "bags":
					data = {
						desc: "lorem ipsum dolor sit amet",
						policy: {
							"read": [],
							"write": ["fnd", "cdent", "psd"],
							"create": ["ANY"],
							"delete": ["NONE"],
							"manage": ["R:ADMIN"],
							"accept": ["R:ADMIN"],
							"owner": "administrator"
						}
					};
					if(resource == "Bravo") {
						data = null;
						xhr.status = 401;
					}
					break;
				case "tiddlers":
					bag = path[1] == "bags" ? path[2] : "Foxtrot";
					recipe = path[1] == "recipes" ? path[2] : undefined;
					data = {
						title: resource,
						text: "lorem ipsum\ndolor sit amet\n\nconsectetur adipisicing elit\nsed do eiusmod tempor",
						bag: bag,
						created: "20100930160300",
						modified: "20100930160530"
					};
					if(recipe) {
						data.recipe = recipe;
					}
					break;
				case "revisions":
					data = {
						title: path.pop(),
						text: "lorem ipsum\ndolor sit amet",
						created: "20100929110300",
						modified: "20100929110400"
					};
					break;
			}
	}
	if(data) {
		xhr.status = 200;
		options.success(data, "success", xhr);
	} else {
		xhr.statusText = "error";
		xhr.responseText = resource + " failed";
		options.error(xhr, "error", {});
	}
};

})(jQuery);
*「拜託來點會的好嗎。」
*PM 兼審稿的苦情:分析不完、派不完、交不完的案子;教不完的譯者……
The title and subtitle of your space are visible to visitors and are also displayed in your browser's tabs. Click on the SiteTitle and SiteSubtitle tiddler links below to make changes.
* [[SiteTitle]]
* [[SiteSubtitle]]
/%
|Name|QuickEdit_font|
|Source|http://www.TiddlyTools.com/#QuickEdit_font|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - select font family|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="set font-family CSS attribute - @@font-family:facename;...@@"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a font family...','');
	var fonts=store.getTiddlerText('QuickEdit_fontList','').split('\n');
	for (var i=0; i<fonts.length; i++) {
		if (!fonts[i].length) continue;
		s.options[s.length]=new Option(fonts[i],fonts[i]);
		s.options[s.length-1].style.fontFamily=fonts[i];
	}
	s.options[s.length]=new Option('[Edit font list...]','_edit');
	s.options[s.length-1].title='enter fonts, one per line...';
	s.size=Math.min(s.length,15);
	s.onclick=function(){
		if (this.value=='_edit')
			story.displayTiddler(story.findContainingTiddler(this.button),'QuickEdit_fontList',DEFAULT_EDIT_TEMPLATE);			
		else
			config.quickEdit.wrapSelection(this.button,'@@font-family:\x22'+this.value+'\x22;','@@');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>font</a></html>
/%
|Name|QuickEdit_color|
|Source|http://www.TiddlyTools.com/#QuickEdit_color|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - text/background color|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="text/background color - @@color:#RGB;background-color:#RGB;...@@"
onclick="var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
 	p.style.padding='2px';
	function hex(d) { return '0123456789ABCDEF'.substr(d,1); }
	var fg=createTiddlyElement(p,'select'); fg.button=this;
	fg.style.width='12em';
	fg.options[0]=new Option('text color...','');
	fg.options[1]=new Option('\xa0 or enter a value','_ask');
	fg.options[2]=new Option('\xa0 or use default color','');
	for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
		var label=hex(r)+hex(g)+hex(b);
		fg.options[fg.length]=new Option(label,'#'+label);
		fg.options[fg.length-1].style.color='#'+label;
	}
	fg.onchange=function(){ var val=this.value;
		if (val=='_ask') { val=prompt('Enter a CSS color value');
		if (!val||!val.length) return false; }
		this.options[0].value=val; this.options[0].text=val.length?'text: '+val:'text color...';
		var bg=this.nextSibling;
		for (var i=3;i<bg.options.length;i++) bg.options[i].style.color=val;
		var preview=this.nextSibling.nextSibling.nextSibling;
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
		var fg=this.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.nextSibling.value; if (bg.length) bg='background-color:'+bg+';';
		if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
		removeChildren(preview); wikify(t,preview);
		this.selectedIndex=0; return false;
	};
	var bg=createTiddlyElement(p,'select'); bg.button=this;
	bg.style.width='12em';
	bg.options[0]=new Option('background color...','');
	bg.options[1]=new Option('\xa0 or enter a value','_ask');
	bg.options[2]=new Option('\xa0 or use default color','');
	for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
		var label=hex(15-r)+hex(15-g)+hex(15-b);
		bg.options[bg.length]=new Option(label,'#'+label);
		bg.options[bg.length-1].style.backgroundColor='#'+label;
	}
	bg.onchange=function(){ var val=this.value;
		if (val=='_ask') { val=prompt('Enter a CSS color value');
		if (!val||!val.length) return false; }
		this.options[0].value=val;
		this.options[0].text=val.length?'background: '+val:'background color...';
		var fg=this.previousSibling;
		for (var i=3;i<fg.options.length;i++) fg.options[i].style.backgroundColor=val;
		var preview=this.nextSibling.nextSibling;
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
		var fg=this.previousSibling.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.value; if (bg.length) bg='background-color:'+bg+';';
		if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
		removeChildren(preview); wikify(t,preview);
		this.selectedIndex=0; return false;
	};
	var b=createTiddlyElement(p,'input',null,null,null,{type:'button'}); b.button=this;
	b.value='ok'; b.style.width='4em';
	b.onclick=function() {
		var fg=this.previousSibling.previousSibling.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.previousSibling.value; if (bg.length) bg='background-color:'+bg+';';
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (fg.length||bg.length) config.quickEdit.setSelection(this.button,'@@'+fg+bg+t+'@@');
		Popup.remove(); return false;
	};
	var preview=createTiddlyElement(p,'div',null,'viewer'); var s=preview.style;
	s.border='1px solid'; s.margin='2px'; s.width='24em'; s.padding='3px'; s.MozBorderRadius='3px';
	s.overflow='hidden'; s.textAlign='center'; s.whiteSpace='normal';
	var t=config.quickEdit.getSelection(config.quickEdit.getField(this));
	wikify(t.length?t:'~AaBbCcDdEeFfGgHhIiJj 1234567890',preview);
	Popup.show();
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>color</a></html>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="2 724 68 55" 
width="30" height="30">
<g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
	<g>
		<path d="M 2.25 756 L 11.25 747 L 24.75 760.4994 L 60.750004 724.4994 L 69.75 733.49902 
		L 24.749977 778.49976 Z" fill="#101010" class="glyph"/>
	</g>
</g>
</svg>
*冠嘉分享:={
<<<
建議可以多練外側運球  弟兄們大部分運球只靠腳內側 如果左右腳內外都會 那就等於二乘二有四種變化  如果再加個拉球 庭球 踩球 變化就更多

https://www.youtube.com/watch?v=DrhELFFl9Kg
可以看影片1:15 到2:53 他們的運球

我都是看這先影片 然後平時在腦中想像這些動作 隔天晨運時再試著把這些動作實際做出來  久了不知不覺就會了

以弟兄們屬天的智慧 不會太難
<<<
}=
[[本站簡介]]
[[代禱事項]]
剛去樓下吃午餐,麵店裡的電視放的是三立的「家和萬事興」,又看到女演員在爆青筋互罵、潑水這些老套。臺灣連續劇是否反映了我們的民間文化習慣衝突、爭吵取代溝通呢?看政治人物不也可見一斑嗎?一切只為作秀,秀給觀眾和選民看。

可是您捫心自問,這種戲您看得爽嗎?看得下去嗎?您的阿公阿媽、爸爸媽媽成天看這種戲,不覺得家裡的氣氛都很怪嗎?還是說反正這是臺灣人生活文化的一部分所以無所謂呢?如果您根本不愛看這些東西的話,何不關掉電視,或者轉到別台呢?

我們都需要為了本土社會更多關懷、更多溫柔、體貼多努力,目的不是中國那種「河蟹社會」,而是為了讓您我停止彼此叫罵和劍拔弩張,不是更好嗎?
@@position:relative;+++^$1^*@[$2]$3===@@
<!DOCTYPE html>
<html manifest="/manifest.mf">
	<head>
		<title>takenote</title>
		<link rel="stylesheet" href="/notabene.css" />
		<link rel="apple-touch-icon" href="/touchicon_takenote.png"/>
		<link rel="apple-touch-icon-precomposed" href="/touchicon_takenote.png"/>
		<meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=0,initial-scale=1.0">
	</head>
	<body>
		<ul id="backstage">
			<!-- no not add a newline between li elements or you will get a margin with inline blocks -->
			<li><a href="/dashboard">dashboard</a></li><li><a href="/takenote">takenote</a></li>
			<li><a class='connectionStatus'></a></li>
		</ul>
		<div class="takenotecontainer">
			<div class='messageArea'></div>
			<div id="note">
				<div class="toolbar">
					<a id="cancelnote" title="cancel this note">cancel</a>
					<a id="deletenote" title="delete this note">delete</a>
					<a id="newnote" title="complete this note">complete</a>
				</div>
				<div class="note_title_container">
					<textarea class="note_title" placeholder="Note Title"></textarea>
				</div>
				<div id="notebody">
					<span class="notedate"></span> 
					<textarea class="note_text" placeholder="Write here..."></textarea>
				</div>
				<div id="tips">
				<div>Tips for cleverer notes:
				''<span class="boldTip">bold</span>'' //<span class="italicTip">italic</span>// _<span class="underlineTip">underline</span>_ #tag</div>
				<div>[[<a href="http://tiddlyspace.com">Link Name</a>|http://tiddlyspace.com]]
				[[<a href="/Note title">Note title</a>]] <span class="imageTip">[img[/SiteIcon<img src="/SiteIcon" />]]</span></div>
				</div>
				<div id="notemeta"></div>
				<div style="display:none">
				  <a class="syncButton"></a>
				</div>
			</div>
		</div>
		<noscript>
			Takenote requires javascript to work correctly. Sorry!
		</noscript>
		<script src="/bags/common/tiddlers/backstage.js" type="text/javascript" charset="utf-8"></script>
		<script src="/bags/common/tiddlers/bookmark_bubble.js" type="text/javascript" charset="utf-8"></script>
		<script src="/bags/common/tiddlers/jquery.js" type="text/javascript" charset="utf-8"></script>
		<script src="/bags/tiddlyspace/tiddlers/chrjs" type="text/javascript" charset="utf-8"></script>
		<script src="/bags/common/tiddlers/chrjs-store.js" type="text/javascript" charset="utf-8"></script>
		<script src="/bags/common/tiddlers/jquery-json.js" type="text/javascript" charset="utf-8"></script>
		<script src="/notabene.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			var takenote, space = window.location.hostname.split(".")[0];
			takenote = notes($(".takenotecontainer")[0], {
				bag: space + "_public",
				host: "/"
			});
		</script>
	</body>
</html>
This package provides a toolbar of interactive 'power tools' that you can use while editing a tiddler to quickly insert TiddlyWiki tiddler links, images, macros, etc. or common formatting sequences directly into tiddler content, as well as perform other functions (such as find/replace, sort, split, convert, etc.) that can be used to modify the current tiddler's source content in a variety of ways.

<<tiddler QuickEditToolbar with: show>>
!!!!!Installation:
<<<
Individual ~QuickEdit buttons are defined in separate tiddlers (e.g., [[QuickEdit_replace]]) that have also been //transcluded// into a single toolbar definition named [[QuickEditToolbar]].  You can edit this definition to add, remove, or rearrange the toolbar buttons to best suit your needs, and then embed the [[QuickEditToolbar]] tiddler into your document's [[EditTemplate]], like this:
{{{
<div macro='tiddler QuickEditToolbar'></div>
}}}
Next, in order to support some of the formatting 'shortcuts' provided by the toolbar, add a reference to the shortcuts CSS class definitions in your [[StyleSheet]]:
{{{
[[StyleSheetShortcuts]]
}}}
By default, the QuickEdit toolbar is hidden until you enable it by using the ''toggleQuickEdit'' command, which you can add to the ~EditToolbar definition in [[ToolbarCommands]]:
{{{
|EditToolbar|... toggleQuickEdit ...|
}}}
You can also toggle the ~QuickEdit toolbar display via a single checkbox option that can be added to [[SideBarOptions]] (or any other desired location):
{{{
<<option chkShowQuickEdit>> show QuickEdit toolbar
}}}
Note: You can 'hard-code' the ''chkShowQuickEdit'' setting, so that the toolbar will be //initially// displayed, by creating a tiddler (e.g., ConfigTweaks), tagged with <<tag systemConfig>>, containing:
{{{
config.options.chkShowQuickEdit=true;
}}}
Alternatively, if you want the toolbar to //always// be displayed, regardless of the option setting, you can add a special keyword, ''show'', to the [[EditTemplate]] syntax, like this:
{{{
<div macro='tiddler QuickEditToolbar with: show'></div>
}}}
<<<
趁午休去北科大美髮部,找已經幫我理了好幾年頭髮的小姐~~(比我大五歲但看起來比我小 <<:|>>)~~修修頭髮。問到「今天要怎麼剪?」的時候,腦裡浮現這週「邊禱告邊……吧」的主題。「主啊!懇求你賜給我帥一點的髮型、不一樣的髮型!」就跟她我想要「帥一點的髮型」。雖然剪我這顆頭總是 100 塊,但她一如平常認真仔細地把周圍修短、把上面打薄,最後上髮蠟的時候才知道她確實有給我建議了新的抓法和造型,很是感謝。我一直都只在這裡給她剪,主要也是因為覺得自己髮質不好,留長了也很難弄得好看,所以就走低價路線了。也許以後會有人建議我去找更花俏的設計師吧?不過目前先這樣就可以了。

然後去了學校地下街餐廳,找到一家有便宜韓式拌飯的「韓風小舖」,泡菜雞柳飯裡有包括泡菜、青江菜、蕃茄蛋、洋蔥在內好幾樣配菜,拌在一起吃超開心!又買了好喝的蜂蜜檸檬青茶,這一小時的午休北科之旅真是超值啊。

這種滿足就是所謂的「小確幸」對吧 <<:p>>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>edit</title>
    <link rel="stylesheet"
          type="text/css"
          href="/bags/common/tiddlers/reset.css">
    <link rel="stylesheet"
           type="text/css"
           href="/edit.css">
</head>
<body>
    <div id="container">
        <div class="cleancol" id="recents">
            <h1>Changes</h1>
            <ul>
            </ul>
        </div>
        <div class="cleancol" id="info">
            <ul id="actions">
                <li><button id="saver">Save & Return</button></li>
                <li><button id="save">Save</button></li>
                <li><button id="revert">Revert</button></li>
                <li><button id="delete">Delete</button></li>
            </ul>
            <div id="type">
                <ul>
                    <li><label><input name="type" type="radio"
                        value="text/x-tiddlywiki">TiddlyWikiText</label></li>
                    <li><label><input name="type" type="radio"
                        value="text/x-markdown">Markdown</label></li>
                    <li><label><input name="type" type="radio"
                        value="text/css">CSS</label></li>
                    <li><label><input name="type" type="radio"
                        value="text/javascript">JavaScript</label></li>
                    <li><label><input name="type" type="radio"
                        value="text/html">HTML</label></li>
                    <li><label><input name="type" type="radio"
                        value="text/plain">Plain Text</label></li>
                    <li><label><input name="type" type="radio"
                        value="other">Other</label></li>
                </ul>
            </div>
            <div id="message"></div>
            <div id="tags">
            </div>
        </div>
        <div class="cleancol" id="editor">
            <h1></h1>
            <textarea class="inputs" name="text"></textarea><br/>
            <input class="inputs" name="tags" value="">
        </div>
    </div>

    <script src="/bags/common/tiddlers/jquery.js"></script>
    <script src="/bags/edit_public/tiddlers/edit.js"></script>
    <script src="/status.js"></script>
    <script src="/bags/common/tiddlers/backstage.js"></script>
</body>
</html>
/***
|''Name''|TiddlySpaceBackstage|
|''Version''|0.8.0|
|''Description''|Provides a TiddlySpace version of the backstage and a homeLink macro|
|''Status''|@@beta@@|
|''Contributors''|Jon Lister, Jon Robson, Colm Britton|
|''Source''|http://github.com/TiddlySpace/tiddlyspace/raw/master/src/plugins/TiddlySpaceBackstage.js|
|''Requires''|TiddlySpaceConfig ImageMacroPlugin TiddlySpaceViewTypes|
!StyleSheet
.tiddler .error.annotation .button{
	display: inline-block;
}

#backstageArea {
	z-index: 49;
	color: white;
	background-color: black;
	background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #222),color-stop(0.5, #333),color-stop(1, #555));
	background: -moz-linear-gradient(center bottom,#222 0%, #333 50%, #555 100%);
	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff555555, endColorstr=#ff222222);
	-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff555555, endColorstr=#ff222222)";
	height: 25px;
	padding: 0;
}

#backstageButton {
	overflow: hidden;
}

#backstageButton #backstageShow,
#backstageButton #backstageHide {
	margin: 0px;
	padding: 0px;
}

#backstageButton #backstageShow:hover,
#backstageButton #backstageHide:hover {
	background: none;
	color: none;
}

#backstageButton img,
#backstageButton svg {
	width: 24px;
	height: 24px;
}

#messageArea {
	top: 50px;
}

#backstageToolbar {
	position: relative;
}

#backstageArea a {
	padding: 0px;
	margin-left: 0px;
	color: white;
	background: none;
}

#backstageArea a:hover {
	background-color: white;
}

#backstage ol,
#backstage ul {
	padding: auto;
}

#backstageButton a {
	margin: 0;
}

.backstagePanelBody ul {
	padding: 5px;
	margin: 5px;
}

#backstage #backstagePanel {
	margin-left: 5%;
	padding: 0em;
	margin-right: 5%;
}

#backstageToolbar a {
	position: relative;
}

#backstageArea a.backstageSelTab,
#backstageToolbar .backstageTask {
	line-height: 25px;
	color: #767676;
}

.backstageTask .externalImage,
.backstageTask .image {
	display: inline;
}

#backstageToolbar a span {
	z-index: 2;
}

a.backstageTask {
	display: inline;
        margin-left: 1em !important;
}

.backstagePanelBody .button {
	display: inline-block;
	margin-right: 10px;
}

.backstagePanelBody {
	margin: 0 0 0 0.6em;
	padding: 0.4em 0.5em 1px 0.5em;
}

#backstage table {
	margin: auto;
}

#backstage .wizard table {
	border: 0px;
	margin: 0;
}

#backstage div  li.listLink {
	border: 0px;
	width: 78%;
	font-size: 0.7em;
}

#backstage div li.listTitle {
	font-weight: bold;
	text-decoration: underline;
	font-size: 1em;
	background: #ccc;
	width: 100%;
}

#backstage fieldset {
	border: solid 1px [[ColorPalette::Background]];
}

#backstage .viewer table,#backstage table.twtable {
	border: 0px;
}

#backstageToolbar img {
	padding: 0;
}

#backstage .wizard,
#backstage .wizardFooter {
	background: none;
}

.viewer td, .viewer tr, .twtable td, .twtable tr {
	border: 1px solid #eee;
}

#backstage .inlineList ul li {
	background-color: [[ColorPalette::Background]];
	border: solid 1px [[ColorPalette::TertiaryMid]];
	display: block;
	float: left;
	list-style: none;
	margin-right: 1em;
	padding: 0.5em;
}

.backstageClear, .inlineList form {
	clear: both;
	display: block;
	margin-top: 3em;
}

.tiddlyspaceMenu {
	text-align: center;
}

span.chunkyButton {
	display: inline-block;
	padding: 0;
	margin: 0;
	border: solid 2px #000;
	background-color: #04b;
}

span.chunkyButton a.button, span.chunkyButton a:active.button {
	white-space: nowrap;
	font-weight: bold;
	font-size: 1.8em;
	color: #fff;
	text-align: center;
	padding: 0.5em 0.5em;
	margin: 0;
	border-style: none;
	display: block;
}

span.chunkyButton:hover {
	background-color: #014;
}

span.chunkyButton a.button:hover {
	border-style: none;
	background: none;
	color: #fff;
}

#backstage .unpluggedSpaceTab .wizard,
.unpluggedSpaceTab .wizard {
	background: white;
	border: 2px solid #CCC;
	padding: 5px;
}

.syncKey .keyItem {
	border: 1px solid black;
	display: inline-block;
	margin: 0.2em;
	padding: 0.1em 0.1em 0.1em 0.1em;
}

.keyHeading {
	font-size: 2em;
	font-weight: bold;
	margin: 0.4em 0em -0.2em;
}

.unpluggedSpaceTab .putToServer,
.unpluggedSpaceTab .notChanged {
	display: none;
}

.tiddlyspaceMenu ul {
	margin: 0;
	padding: 0;
}

.tiddlyspaceMenu ul li {
	list-style: none;
}

.unsyncedChanges .unsyncedList {
	display: block;
}

.unsyncedList {
	display: none;
}
!Code
***/
//{{{
(function ($) {
    var name = "StyleSheet" + tiddler.title;
    config.shadowTiddlers[name] = "/*{{{*/\n%0\n/*}}}*/".
        format(store.getTiddlerText(tiddler.title + "##StyleSheet")); // this accesses the StyleSheet section of the current tiddler (the plugin that contains it)
    store.addNotification(name, refreshStyles);

    if (!config.extensions.tiddlyweb.status.tiddlyspace_version) { // unplugged
        config.extensions.tiddlyweb.status.tiddlyspace_version = "<unknown>";
        config.extensions.tiddlyweb.status.server_host = {
            url:config.extensions.tiddlyweb.host }; // TiddlySpaceLinkPlugin expects this
    }
    var disabled_tasks_for_nonmembers = ["tiddlers", "plugins", "batch", "sync"];

    var tweb = config.extensions.tiddlyweb;
    var tiddlyspace = config.extensions.tiddlyspace;
    var currentSpace = tiddlyspace.currentSpace.name;
    var imageMacro = config.macros.image;

    if (config.options.chkBackstage === undefined) {
        config.options.chkBackstage = false;
    }

// Set up Backstage
    config.tasks = {};
    config.tasks.status = {
        text:"status",
        tooltip:"TiddlySpace Info",
        content:"<<tiddler Backstage##Menu>>"
    };
    config.tasks.tiddlers = {
        text:"tiddlers",
        tooltip:"tiddlers control panel",
        content:"<<tiddler Backstage##BackstageTiddlers>>"
    };
    config.tasks.plugins = {
        text:"plugins",
        tooltip:"Manage installed plugins",
        content:"<<tiddler Backstage##Plugins>>"
    };
    config.tasks.batch = {
        text:"batch",
        tooltip:"Batch manage public/private tiddlers",
        content:"<<tiddler Backstage##BatchOps>>"
    };
    config.tasks.tweaks = {
        text:"tweaks",
        tooltip:"Tweak TiddlyWiki behaviors",
        content:"<<tiddler Backstage##Tweaks>>"
    };
    config.tasks.exportTiddlers = {
        text:"import/export",
        tooltip:"Import/export tiddlers from/to a TiddlyWiki",
        content:"<<tiddler Backstage##ImportExport>>"
    };
    config.tasks.sync = {
        text:"sync",
        tooltip:"Check Sync status",
        content:"<<tiddler Backstage##SpaceUnplugged>>"
    };

    if (window.location.protocol === "file:") {
        config.unplugged = true;
    }

    config.backstageTasks = ["status", "tiddlers", "plugins",
        "batch", "tweaks", "exportTiddlers", "sync"];

    config.messages.backstage.prompt = "";
// initialize state
    var _show = backstage.show;
    backstage.show = function () {
        // selectively hide backstage tasks and tabs based on user status
        var tasks = $("#backstageToolbar .backstageTask").show();
        var bs = backstage.tiddlyspace;
        if (!config.unplugged) {
            tweb.getUserInfo(function (user) {
                if (user.anon) {
                    jQuery.each(disabled_tasks_for_nonmembers, function (i, task) {
                        var taskIndex = config.backstageTasks.indexOf(task);
                        if (taskIndex !== -1) {
                            config.backstageTasks.splice(taskIndex, 1);
                        }
                    });
                    config.messages.memberStatus = bs.locale.loggedout;
                } else {
                    config.messages.memberStatus = readOnly ?
                        bs.locale.nonmember : bs.locale.member;
                }
            });
        } else {
            config.messages.memberStatus = bs.locale.unplugged;
        }

        // display backstage
        return _show.apply(this, arguments);
    };
    if (readOnly) {
        jQuery.each(disabled_tasks_for_nonmembers, function (i, task) {
            var taskIndex = config.backstageTasks.indexOf(task);
            if (taskIndex !== -1) {
                config.backstageTasks.splice(taskIndex, 1);
            }
        });
    }

    var tasks = config.tasks;
    var commonUrl = "/bags/common/tiddlers/%0";

    backstage.tiddlyspace = {
        locale:{
            member:"You are a member of this space.",
            nonmember:"You are not a member of this space.",
            loggedout:"You are currently logged out of TiddlySpace.",
            unplugged:"You are unplugged."
        },
        showButton:function () {
            var showBtn = $("#backstageShow")[0];
            var altText = $(showBtn).text();
            $(showBtn).empty();
            imageMacro.renderImage(showBtn, "backstage.svg",
                { altImage:commonUrl.format("backstage.png"), alt:altText});
        },
        hideButton:function () {
            var hideBtn = $("#backstageHide")[0];
            var altText = $(hideBtn).text();
            $(hideBtn).empty();
            imageMacro.renderImage(hideBtn, "close.svg",
                { altImage:commonUrl.format("close.png"), alt:altText, width:24, height:24 });
        }
    };

    var _init = backstage.init;
    backstage.init = function () {
        _init.apply(this, arguments);
        var init = function (user) {
            var bs = backstage.tiddlyspace;
            bs.showButton();
            bs.hideButton();
        };
        tweb.getUserInfo(init);
    };

    var home = config.macros.homeLink = {
        locale:{
            linkText:"your home space"
        },
        handler:function (place) {
            var container = $("<span />").appendTo(place)[0];
            tweb.getUserInfo(function (user) {
                if (!user.anon && user.name !== currentSpace) {
                    createSpaceLink(container, user.name, null, home.locale.linkText);
                }
            });
        }
    };

    config.macros.exportSpace = {
        handler:function (place, macroName, params) {
            var filename = params[0] ||
                "/tiddlers.wiki?download=%0.html".format(currentSpace);
            $('<a class="button">download</a>').// XXX: i18n
                attr("href", filename).appendTo(place);
        }
    };

}(jQuery));
//}}}
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAKGmlDQ1BJQ0MgUHJvZmlsZQAAeAHVlmdUFMkWx6t7ciLNkNOQc84gOSfJUVSGAYY4wpAxIbK4AooiIgLKEpao4KoEWQMiigERUEBF3UEWAWVdDIiKyuuBd9w977z99r6826eqfn3r9q3quvXhDwDpIyMpKQEWACCRncrxdbajB4eE0nGTAAIUgAe6wJDBTEmy9fb2AP9oH8aRaMTua/Fy/WPYf58QjIxKYQIAeSPTEZEpzESEzyNsyEzipCI8h/BwRmoSwnA3wjQOskGEB3nMWmcujyPW+f1ajL+vPQAoPAB4MoPBYQFAoiF+ejqTheQhGSKsy46MZSMcibAVM4aBjKR6hDUTE7fxeBhh1Yi/5WH9jRmMiO85GQzWd17/F+RLZGGH2JSkBEbW2sv/sktMSEPOa814p06OYgf4IaMY0qSAA3AEHshDB/rABKmeCQgCTsA7NSoT+W8A7LclZXFiWTGpdFukUlGadFc2U1uTrq+rp8eb/r8x3h1d3+y7e2t3DxLjlf/fvmRtAMwakPr3/uULfw5A510ARPr/8ineAID/AADdTcw0Tvp6PjRvwAAi4Ac0IA5kgAJQBVrIaRoDC2CDnK4b8AL+IARsAUwQAxIBB2SAHWAPyAeF4BA4CipANagDTeA0OAu6wEVwFdwAd8AwGAOTgAtmwCuwCD6AFQiCcBAFokLikCykBGlA+pApZAU5Qh6QLxQChUMsiA2lQTugvVAhVAJVQDVQM/QLdAG6Ct2CRqBH0BQ0D72FPsMomAzTYGlYGdaBTWFb2B32hzfDLDgZzobz4INwOVwLn4I74avwHXgM5sKv4CUUQJFQIig5lBbKFGWP8kKFoqJRHNQuVAGqDFWLakP1oAZQ91Fc1ALqExqLpqLpaC20BdoFHYBmopPRu9BF6Ap0E7oT3Y++j55CL6K/YSgYKYwGxhzjignGsDAZmHxMGaYB04G5jhnDzGA+YLFYEawK1gTrgg3BxmG3Y4uwJ7Dt2F7sCHYau4TD4cRxGjhLnBeOgUvF5eOO407hruBGcTO4j3gSXhavj3fCh+LZ+Fx8Gb4Ffxk/ip/FrxAECEoEc4IXIZKQRSgm1BN6CPcIM4QVoiBRhWhJ9CfGEfcQy4ltxOvEJ8R3JBJJnmRG8iHFknJI5aQzpJukKdInshBZnWxPDiOnkQ+SG8m95EfkdxQKRZliQwmlpFIOUpop1yjPKB/5qHzafK58kXy7+Sr5OvlG+V7zE/iV+G35t/Bn85fxn+O/x78gQBBQFrAXYAjsEqgUuCAwIbAkSBXUE/QSTBQsEmwRvCU4J4QTUhZyFIoUyhOqE7omNE1FURWo9lQmdS+1nnqdOkPD0lRorrQ4WiHtNG2ItigsJGwoHCicKVwpfEmYK4ISURZxFUkQKRY5KzIu8llUWtRWNEp0v2ib6KjospikmI1YlFiBWLvYmNhncbq4o3i8+GHxLvGnEmgJdQkfiQyJkxLXJRYkaZIWkkzJAsmzko+lYCl1KV+p7VJ1UoNSS9Iy0s7SSdLHpa9JL8iIyNjIxMmUylyWmZelylrJxsqWyl6RfUkXptvSE+jl9H76opyUnItcmlyN3JDciryKfIB8rny7/FMFooKpQrRCqUKfwqKirKKn4g7FVsXHSgQlU6UYpWNKA0rLyirKQcr7lLuU51TEVFxVslVaVZ6oUlStVZNVa1UfqGHVTNXi1U6oDavD6kbqMeqV6vc0YA1jjViNExojmhhNM022Zq3mhBZZy1YrXatVa0pbRNtDO1e7S/u1jqJOqM5hnQGdb7pGugm69bqTekJ6bnq5ej16b/XV9Zn6lfoPDCgGTga7DboN3hhqGEYZnjR8aEQ18jTaZ9Rn9NXYxJhj3GY8b6JoEm5SZTJhSjP1Ni0yvWmGMbMz22120eyTubF5qvlZ8z8ttCziLVos5jaobIjaUL9h2lLekmFZY8m1oluFW/1kxbWWs2ZY11o/t1GwibRpsJm1VbONsz1l+9pO145j12G3bG9uv9O+1wHl4OxQ4DDkKOQY4Fjh+MxJ3onl1Oq06GzkvN251wXj4u5y2GXCVdqV6drsuuhm4rbTrd+d7O7nXuH+3EPdg+PR4wl7unke8XyyUWkje2OXF/By9Tri9dRbxTvZ+1cfrI+3T6XPC1893x2+A35Uv61+LX4f/O38i/0nA1QD0gL6AvkDwwKbA5eDHIJKgrjBOsE7g++ESITEhnSH4kIDQxtClzY5bjq6aSbMKCw/bHyzyubMzbe2SGxJ2HJpK/9WxtZz4ZjwoPCW8C8ML0YtYynCNaIqYpFpzzzGfBVpE1kaOR9lGVUSNRttGV0SPceyZB1hzcdYx5TFLMTax1bEvolziauOW473im+MX00ISmhPxCeGJ15gC7Hj2f3bZLZlbhtJ0kjKT+ImmycfTV7kuHMaUqCUzSndqTREDAymqab9kDaVbpVemf4xIzDjXKZgJjtzMEs9a3/WbLZT9s/b0duZ2/t2yO3Ys2Nqp+3Oml3QrohdfbsVduftnslxzmnaQ9wTv+durm5uSe77vUF7e/Kk83Lypn9w/qE1ny+fkz+xz2Jf9Y/oH2N/HNpvsP/4/m8FkQW3C3ULywq/FDGLbh/QO1B+YPVg9MGhYuPik4ewh9iHxg9bH24qESzJLpk+4nmks5ReWlD6/ujWo7fKDMuqjxGPpR3jlnuUdx9XPH7o+JeKmIqxSrvK9iqpqv1VyyciT4yetDnZVi1dXVj9+afYnx7WONd01irXltVh69LrXtQH1g/8bPpzc4NEQ2HD10Z2I7fJt6m/2aS5uUWqpbgVbk1rnT8Vdmr4tMPp7jattpp2kfbCM+BM2pmXv4T/Mn7W/WzfOdNzbeeVzld1UDsKOqHOrM7FrpgubndI98gFtwt9PRY9Hb9q/9p4Ue5i5SXhS8WXiZfzLq9eyb6y1JvUu3CVdXW6b2vf5LXgaw/6ffqHrrtfv3nD6ca1AduBKzctb168ZX7rwm3T2113jO90DhoNdtw1utsxZDzUec/kXvew2XDPyIaRy6PWo1fvO9y/8cD1wZ2xjWMj4wHjDyfCJrgPIx/OPUp49OZx+uOVyZwnmCcFTwWelj2Telb7m9pv7Vxj7qUph6nB537PJ6eZ069+T/n9y0zeC8qLslnZ2eY5/bmL807zwy83vZx5lfRqZSH/D8E/ql6rvj7/p82fg4vBizNvOG9W3xa9E3/X+N7wfd+S99KzD4kfVpYLPop/bPpk+mngc9Dn2ZWML7gv5V/VvvZ8c//2ZDVxdTWJwWGsaQEU0sPR0QC8bQSAEgIAFdGExN51DbkWAa3rXoR5SozXePYfvK4z12aMAajrBcDfBgAPZKzMAUAZYX6k8eSvP7KegcH3hnh4lhJtoL8GEFkCkSa9q6tvVwHAhQPwdWh1daV8dfVrGaJ13gNwZeO6duVFC5xCZDPVUE/Xry/9cA7P83f7FxpgvJtcDRvaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAH+ElEQVRoBdVZa2xcxRWemXv37vq5dvxIbMdvEoNLCJQkJlBofkRR0poFq7hSBYlCBeIVojZ2ALWoriWo1OAEVaEhpKJINJUqWQ3CDgKqBKlNKdhJFCck69he4ziO4/gRr3dt7+69e+9MzxjZLLuz9u7m7g9Gsjz3zMyZ75s558yZWcwYQ9/nQr7P4Dl22WwC+9o77pMwrkMMlRGMixnCpQizPIywByE2DDs+zCgeoIS2+c76P2tq2qTfCgZshgm1fPC/fCzJOwkhv2SIVRGCDauisBSrVVIUC7ZYLEjXdaQFg0jTdMPn9yODUuCJJxmlrRozWl5xbHQlQuSWCRxo66xHEvkLYizTnpnBVuTmkLxlWUiSpKh4KKXI7fGisZtuNOF2AxemM8p+N3POdyDeHUmYQPPfOzIz7PggQnhHZnq6UVVRKqWm2KKCjtbAd8U1OMTGb7ox9DlPg8EtjXX3j0XrHy5PiMDugx9by8tz/o0QWV+6soCUFK5AYA7huuP6nnBPocuuAb4b5w335EON27fMxqIgoShUWp7zLjjnhupVFaS0qGBR8NzHVE0DC1s8XOdmZyHQx+3ubpyV3drc3BwTtrij0IH2jkaMyeMVxUUoF2xdVILgsAND19GU16sHAhoBxyYQhajNZqXgH3JJYQH4SCS+ZVl2tKq8mPQOXN2Wds/Wn4Puf4j0h8riMqE/tp6wW1LsQ7BaGT9YXRmqZ6F+c8qDLvdfgaBjUAB+DMJpL4TRIUbRSrCytUDeoSgyrb6tQrZnpC+Mm6/wnTr7ldOYDajde366bs28PNr/uHZATrE/B4rSS1cWCvX5Ayrq7vvaMBjtQkH2eEPdht7wjvvaOtdhLXj0Ul9/5bo11bICITa0cF8qKSqQul0Dd77RdnrrXsf6T0Lbw+uR+xjeI+Qb3PTXObDN6akpIdJvq7DyAJ7N+H36o3sE4HnPlxwbzugqfTioG2rfwFWhY+Qty+Z+RTFmP/pWu7gWM4E/HDtVACrywU6F4YbHde/MjIQMY89v6zcOi6f7Rrr3ZzV9cIAd4eYGphbRle+CzapQmGhVRGOYIGYCsqzczsdGi/XXR8cZTDwxrV49GjaH8JNhdAbsHQdUVdiearPJkIpUCRtDhDETIJjk8XEWOdJtAqqGbkIchyD+TlN9vRaiP3qVsrm5iSAa8UGUh12MA9EVfNMSMwGm0XN8CD9wwsvw6BgEG0bVgPF2eFu0b8iXfmGxyDrkS8IuAUiaKKNDwsYQYcwEuN0CyqOD10bo8I0xMHUDwamJRsYm0LWRUR793lvK9ufn3X+88ylY3p+UFKyQub2HF76jfn9AgvnmFi28PfQ70h5CW8PqwYBnF5wDaZC71PVD/gIgAPecKXw2HDB2h3UXfrZ8+OVmSZbfyrZn0qIV+cIFHBkbh7GYGUH6vlBJiDCug2x+3BvtX/yYMKkG5rCBKXcuFavnx81lroQcTUuxSWurV0sif/LOzKKuSz2wt/Sfe2o38NN40ZIQgUU1RmlsOX56N0H4zcyMNLRmdSWRBcGAh9QzF526qmp+nWq3v+R44HoUdQviuExoYVSclf3tna9DSPxN7jI7u6OyHMPFJ0IDd6Ker68wAE8YNXbGAp4rSTqB/e2n/wyO+nxBfi5aVVYC1Uin5Rccp2uAQSjGFKFfNTruOxbBMIogqQQOtJ9+E/A+X1ywHFWUrBRC4GZzsa+ferwzEPzRC42O9TGHYq4waT7QcrzjSYLIX4uW56PbyoqF4DUtiC709BmzPj9kFnR7o6NmyfQ5XFFSCOxr+7xQJooL0gHl3jXVEhxa4fMiXyCALnT3GkBC1RGt21tb86+ITjEIkmJChFhehbltVZVl4LAC8P4A6uru4XeGKarTrXsfrTkbA1Zhl8hwIOwWu/CZI0cskDftWJ6bgzPT0yIGcrPpcvYYelB3UxZ8sOEWwHPlphOoKrznIbgAp+XlZEeA54KeK4MUrpwaNeimhtqNl4Wd4hCaTgDieTWfX7T607M+NOn2wJzs1YZHapxx4Iza1XwCc8+IiMmCh62JSTcAgRTH7303KqI4G0wnACcRPEBg4VXRMzML5xTqerl+M7yTmlNMJwDwe8GMiA8iTWjh6beXH1YMnQiV32rddAJMNz6FHfD0DQ5R/mzIC08VIAXnlx5sGDjuw2oxkkk5yPZ/2PEYlsnfMMOKYrVQCJmYv0bD8v8eUuTmxQDF25YUAhxES3tnOWH4CUZYFTxqjWLCPmiorflvvACX6p80AktNbFa76T5gFrBY9SQlF+KTXz58shZesLdD/n8XY9QFT0AftY6dOtLU1MRDqWklKSbkPHziIKTSu2SrRVfSbLIe0AzNp/Kn8/8MBNUt217cJn7NSoCW6TvgPHTyMbgy7soszEFZJfnzzybS7LgHTbiGHyyTFR6FXkkAq3CI6T5AJPy0kmo1ADx/oF2YNC3PjuCPXymfXRCaUDGdAOQRP1QyUvkvkBHwrBmpXGa/cPBj8f0yYsTSAtMJwJTXDE0X5kIG3AWgBOXJmZh/xFuKgukE4AeCT/zuaaRO+78zN5BC0zfcOghPVTfF+AD8HQ3iD9MJ6D79NTCfwVHnFWNqaBz5gIzn+gQaOd9vUB0eC2nwGTGUxKRJCaMX/3RyuaTgw+AGDoDFF4n/dvC5StWn7npua09iUMWjkkJgfirnodZ0gu1Vs17iuvdl8+4A8/r5/6QSCJ0oWfX/A3UKXhQwWVptAAAAAElFTkSuQmCC
If transclusion is the process of including content from somewhere else, by reference, then extraclusion is the process whereby content in a document is removed to another location and a reference to it is left in its place. With tiddlers, this is a good way of breaking a large tiddler down into several smaller tiddlers while maintaining the overview.

To engage extraclusion in @edit you use some special syntax that wraps around the content you wish to move to another tiddler:

{{{
    .extraclude The Name of the New Tiddler

    the content

    .extraclude
}}}

Those {{{.extraclude}}} statements are at the beginning of the line.

You can have multiple extraclusions in an edit. When the tiddlers is saved each one will be replaced with

{{{<<tiddler [[The Name of the New Tiddler]]>>}}}

and the new tiddler will be created in the same bag as the current tiddler. If the tiddler already exists it will be overwritten.

If you are editing a Markdown syntax tiddler, then the created tiddlers will also be Markdown and the markup left behind in the original tiddler will be correct Markdown transclusion syntax

{{{{{The Name of the New Tiddler}}}}}


@@Please do not modify this tiddler; it was created automatically upon space creation.@@
剛在早餐店看到新聞跑馬燈寫說,老虎伍茲因為今年至今一場比賽都還沒有打,所以世界排名已經又滑落一名到第三名了,剛被一位瑞典年輕好手擠下去。

呵呵,耶穌在兩週前的話語就說了,1/9 的時候,有人還沒有出發開始做今年計畫要做的事。見賢思齊,見不賢內自省啊!<<XD>>
摘自 TiddlyTools.com:
<<<
//{{{
++++(cookiename)!!!!!^width^*@{{class{[label=key|tooltip][altlabel|alttooltip]}}}#panelID:>...
content goes here
===
//}}}
* ''"""+++""" (or """++++""") and """==="""''<br>marks the start and end of the slider definition, respectively.  When the extra {{{+}}} is used, the slider will be open when initially displayed.
* ''"""(cookiename)"""''<br>saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.
* ''"""! through !!!!!"""''<br>displays the slider label using a formatted headline (Hn) style instead of a button/link style
* ''"""^width^ (or just ^)"""''<br>makes 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)
* ''"""*"""''<br>denotes "transient display": when a click occurs elsewhere in the document, the slider/floating panel will be automatically closed.  This is useful for creating 'pulldown menus' that automatically go away after they are used.  //Note: using SHIFT-click on a slider label will open/close that slider without triggering the automatic closing of any transient slider panels that are currently displayed, permitting ''temporary'' display of several transient panels at once.//
* ''"""@"""''<br>denotes "open on hover": the slider/floating panel will be automatically opened as soon as the mouse moves over the slider label, without requiring a click.
* ''"""{{class{[label=key|tooltip][altlabel|alttooltip]}}}"""''<br>uses label/tooltip/accesskey.  """{{class{...}}}""", """=key""", """|tooltip""" and """[altlabel|alttooltip]""" are optional.  'class' is any valid CSS class name, used to style the slider label text.  'key' must be a ''single letter only''.  altlabel/alttooltip specify alternative label/tooltip for use when slider/floating panel is displayed.  //Note: you can use HTML syntax within the label text to include HTML entities (e.g., {{{&raquo;}}} (&raquo;) or {{{&#x25ba;}}} (&#x25ba;), or even embedded images (e.g., {{{<img src="images/eric3.gif">}}}).//
* ''"""#panelID:"""''<br>defines a unique DOM element ID that is assigned to the panel element used to display the slider content.  This ID can then be used later to reposition the panel using the {{{<<DOM move id>>}}} macro (see [[DOMTweaksPlugin]]), or to access/modify the panel element through use of {{{document.getElementById(...)}}}) javascript code in a plugin or inline script.
* ''""">"""''<br>automatically adds blockquote formatting to slider content
* ''"""..."""''<br>defers rendering of closed sliders until the first time they are opened.
Notes:
*You can 'nest' sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created.
*Deferred rendering (...) can be used to offset processing overhead until actually needed. However, this may produce unexpected results in some cases.  Use with care.
* To make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the 'start slider' or preceding the 'end slider' sequences are automatically supressed so that excess whitespace is eliminated from the output.
<<<
iVBORw0KGgoAAAANSUhEUgAAAC0AAAAtCAYAAAA6GuKaAAAABGdBTUEAALGPC/xhBQAACkNpQ0NQSUNDIFByb2ZpbGUAAHgBnZZ3VFNZE8Dvey+90BJCkRJ6DU1KAJESepFeRSUkAUIJGBKwV0QFVxQVaYoiiyIuuLoUWSuiWFgUFLAvyCKgrIuriIplX/QcZf/Y/b6z88ec35s7c+/cmbnnPAAovoFCUSasAECGSCIO8/FgxsTGMfHdAAZEgAPWAHB52VlB4d4RABU/Lw4zG3WSsUygz/p1/xe4xfINYTI/m/5/pcjLEkvQnULQkLl8QTYP5TyU03MlWTL7JMr0xDQZwxgZi9EEUVaVcfIXNv/s84XdZMzPEPFRH1nOWfwMvow7UN6SIxWgjASinJ8jFOSifBtl/XRphhDlNyjTMwTcbAAwFJldIuCloGyFMkUcEcZBeR4ABEryLE6cxRLBMjRPADiZWcvFwuQUCdOYZ8K0dnRkM30FuekCiYQVwuWlccV8JiczI4srWg7AlzvLooCSrLZMtMj21o729iwbC7T8X+VfF796/TvIevvF42Xo555BjK5vtm+x32yZ1QCwp9Da7PhmSywDoGUTAKr3vtn0DwAgnwdA841Z92HI5iVFIslysrTMzc21EAp4FrKCfpX/6fDV859h1nkWsvO+1o7pKUjiStMlTFlReZnpmVIxMzuLyxMwWX8bYnTr/xw4K61ZeZiHCZIEYoEIPSoKnTKhKBltt4gvlAgzRUyh6J86/B/DZuUgwy9zjQKt5iOgL7EACjfoAPm9C2BoZIDE70dXoK99CyRGAdnLi9Ye/TL3KKPrn/XfFFyEfsLZwmSmzMwJi2DypOIcGaNvQqawgATkAR2oAS2gB4wBC9gAB+AM3IAX8AfBIALEgsWAB1JABhCDXLAKrAf5oBDsAHtAOagCNaAONIAToAWcBhfAZXAd3AR94D4YBCPgGZgEr8EMBEF4iArRIDVIGzKAzCAbiA3Nh7ygQCgMioUSoGRIBEmhVdBGqBAqhsqhg1Ad9CN0CroAXYV6oLvQEDQO/Qm9gxGYAtNhTdgQtoTZsDscAEfAi+BkeCm8As6Dt8OlcDV8DG6GL8DX4T54EH4GTyEAISMMRAdhIWyEgwQjcUgSIkbWIAVICVKNNCBtSCdyCxlEJpC3GByGhmFiWBhnjC8mEsPDLMWswWzDlGOOYJoxHZhbmCHMJOYjlorVwJphnbB+2BhsMjYXm48twdZim7CXsH3YEexrHA7HwBnhHHC+uFhcKm4lbhtuH64Rdx7XgxvGTeHxeDW8Gd4FH4zn4iX4fHwZ/hj+HL4XP4J/QyATtAk2BG9CHEFE2EAoIRwlnCX0EkYJM0QFogHRiRhM5BOXE4uINcQ24g3iCHGGpEgyIrmQIkippPWkUlID6RLpAeklmUzWJTuSQ8lC8jpyKfk4+Qp5iPyWokQxpXAo8RQpZTvlMOU85S7lJZVKNaS6UeOoEup2ah31IvUR9Y0cTc5Czk+OL7dWrkKuWa5X7rk8Ud5A3l1+sfwK+RL5k/I35CcUiAqGChwFrsIahQqFUwoDClOKNEVrxWDFDMVtikcVryqOKeGVDJW8lPhKeUqHlC4qDdMQmh6NQ+PRNtJqaJdoI3Qc3YjuR0+lF9J/oHfTJ5WVlG2Vo5SXKVcon1EeZCAMQ4YfI51RxDjB6Ge8U9FUcVcRqGxVaVDpVZlWnaPqpipQLVBtVO1TfafGVPNSS1Pbqdai9lAdo26qHqqeq75f/ZL6xBz6HOc5vDkFc07MuacBa5hqhGms1Dik0aUxpaml6aOZpVmmeVFzQouh5aaVqrVb66zWuDZNe762UHu39jntp0xlpjsznVnK7GBO6mjo+OpIdQ7qdOvM6BrpRupu0G3UfahH0mPrJent1mvXm9TX1g/SX6Vfr3/PgGjANkgx2GvQaTBtaGQYbbjZsMVwzEjVyM9ohVG90QNjqrGr8VLjauPbJjgTtkmayT6Tm6awqZ1pimmF6Q0z2MzeTGi2z6zHHGvuaC4yrzYfYFFY7qwcVj1ryIJhEWixwaLF4rmlvmWc5U7LTsuPVnZW6VY1Vvetlaz9rTdYt1n/aWNqw7OpsLk9lzrXe+7aua1zX9ia2Qps99vesaPZBdlttmu3+2DvYC+2b7Afd9B3SHCodBhg09kh7G3sK45YRw/HtY6nHd862TtJnE44/eHMck5zPuo8Ns9onmBezbxhF10XrstBl8H5zPkJ8w/MH3TVceW6Vrs+dtNz47vVuo26m7inuh9zf+5h5SH2aPKY5jhxVnPOeyKePp4Fnt1eSl6RXuVej7x1vZO9670nfex8Vvqc98X6Bvju9B3w0/Tj+dX5Tfo7+K/27wigBIQHlAc8DjQNFAe2BcFB/kG7gh4sMFggWtASDIL9gncFPwwxClka8nMoLjQktCL0SZh12KqwznBa+JLwo+GvIzwiiiLuRxpHSiPbo+Sj4qPqoqajPaOLowdjLGNWx1yPVY8VxrbG4eOi4mrjphZ6LdyzcCTeLj4/vn+R0aJli64uVl+cvvjMEvkl3CUnE7AJ0QlHE95zg7nV3KlEv8TKxEkeh7eX94zvxt/NHxe4CIoFo0kuScVJY8kuybuSx1NcU0pSJoQcYbnwRapvalXqdFpw2uG0T+nR6Y0ZhIyEjFMiJVGaqCNTK3NZZk+WWVZ+1uBSp6V7lk6KA8S12VD2ouxWCR39meqSGks3SYdy5udU5LzJjco9uUxxmWhZ13LT5VuXj67wXvH9SsxK3sr2VTqr1q8aWu2++uAaaE3imva1emvz1o6s81l3ZD1pfdr6XzZYbSje8Gpj9Ma2PM28dXnDm3w21efL5YvzBzY7b67agtki3NK9de7Wsq0fC/gF1wqtCksK32/jbbv2nfV3pd992p60vbvIvmj/DtwO0Y7+na47jxQrFq8oHt4VtKt5N3N3we5Xe5bsuVpiW1K1l7RXunewNLC0tUy/bEfZ+/KU8r4Kj4rGSo3KrZXT+/j7eve77W+o0qwqrHp3QHjgzkGfg83VhtUlh3CHcg49qYmq6fye/X1drXptYe2Hw6LDg0fCjnTUOdTVHdU4WlQP10vrx4/FH7v5g+cPrQ2shoONjMbC4+C49PjTHxN+7D8RcKL9JPtkw08GP1U20ZoKmqHm5c2TLSktg62xrT2n/E+1tzm3Nf1s8fPh0zqnK84onyk6Szqbd/bTuRXnps5nnZ+4kHxhuH1J+/2LMRdvd4R2dF8KuHTlsvfli53uneeuuFw5fdXp6qlr7Gst1+2vN3fZdTX9YvdLU7d9d/MNhxutNx1vtvXM6znb69p74Zbnrcu3/W5f71vQ19Mf2X9nIH5g8A7/ztjd9Lsv7uXcm7m/7gH2QcFDhYcljzQeVf9q8mvjoP3gmSHPoa7H4Y/vD/OGn/2W/dv7kbwn1Cclo9qjdWM2Y6fHvcdvPl34dORZ1rOZifzfFX+vfG78/Kc/3P7omoyZHHkhfvHpz20v1V4efmX7qn0qZOrR64zXM9MFb9TeHHnLftv5Lvrd6Ezue/z70g8mH9o+Bnx88Cnj06e/AAOb8/zszueKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAIeUlEQVRYCe1Zb2xb1RU/9/k9O26TJqVpSByn+UNC3JZuQMukaWirBR9BGtJAIAqlEkgg+ABCsLVFWhAU0DRp8IlNYkIskSYhPvKBDxRvKIwVSin9Q9MmTRziJG7aQtrYcWw/v7tzrn1v3nOe/eIC+cKOZN97zz3n3J/vO+/cc48B/k9rswPs+y5z8B+xXZxZd6GdfuDsZmDQhf06m91L2E9wYMMA1iQ3tfde2xeN2+Zr7l4T6IG3Y01Z3XqUAduLK0bwo9e48jD+wL/7O2BoIBo1a9TFfamBBt6N1edz8HvO+dOoVu9QZYw3bWiAYF2A+f0B0A0f5HJ5sKwCLKQWIZ1ehEKh4FQBSALnLxod2lu1gF816BcGY7stxt8GLh6/WFzXdau1pVlrb2uFhoZ68Pl8DlD2Af5QmJ+/ComZGZi9cBGxcjWNID7IM/bYn/ZEE4pZpbMq0PuHDv+BcfYS2hFuQGB7ezq1jvYQaJpWxbz7VDabg6npGRiPf6PAI5Aks9hDL++Nfuiutcz1BH1gKPYmWn5cqoTbQ1akr0ertqtS1qtdSKXg5Omz6D4pJcoZu/fVPdH3FMOlUxW0HTDTNL5jW4S1Xb/Zxcy1s8hNRs9PwMTklDRiIvB7EPj7klHeVgR9YPDwAAD7IymQO+z8+U1aU1Njuf4PNp6cSsDIufPSXgqjyy9feTh6SjLsrSvoYuzln6Kg7tN81q5bdvyogCWgsfE4nJ+YLA45jPjr2G0D90WXfackuOItorDGgQ8SYJLZvq1/TQDTWr09XaDcj0Ekm4VXiV9OK0Bnc9ZTGL3pwICOcGjZSLnmjzTe2t8HgYBfWGfAn6KnXr6U4ySjXc5l+ZMk5DN03t/b4+o+5UbEuGCBPpkEfWoOtMtXgeHBAj4NrOs2gBneDGZPCLjhWM7VjGEYELmxD746ebo0b9F7dbdd2AHq4NDhpzlnfyGBvt5u6OncYpet2DfOTELgszNFoBWkuN+A7G0RyG/rqiDhZB/54jgeRleIidvBIq89FB2TEg73QMAP0gQGYd4ZbpcylVuLQ/DwF1A3fMIBWNN9YAT9QK0k2vm6T06i/FEBQ/IrtX3dXXLKpzF4Vg6oVTv9/FAsrHM+gTw9HGqF7Vv77XKufQKsj8+IOcYYNIY2QRO6grG+DmhMlF/Mwvz0JZhHt5FHt9nTBpnoTtwdtbyQLf/65MhRSKXSxL7sD7AuGUnUThvc+i1OCqcLtbaW668Yk0vYAYdv6YWWyBbw1wcVYFIy1gVgc187hHfeCKyUm+jjs2CMTK6wWc5obVEH2SY8+XfLeQXa4toNxKTjubGxQc67t+hl5MNEtKPhW/sguLG6TrBxPdAP00q7G/h8xOFSbguFWq9XbI3Db+RAgcbM8nZirgsGPZMgfWJGLdjY3gzBJmeWKo2XtwS8Mdwi2OTj+sRsuYhjHAzW0WkseBZwFfoUaJzpotmG+nXUVCUdfVRSE4KuhezyeuKip2pDw3ohg94flsJ20GL1QCAg5yq2FIeJRJTAl64WIh+XUUX7tminmv463O0SdciOHbTgaXggeJE4OFDIh7cTGSW8dOzzpCcI3w0v8hvF0xHl1G6uQGitwhAdFESFfEGFMcFY5RfpCVrFBrltoh30EhnKYpbiRdamDULEMguQTws1LxU1T3Gb9IjoiPcit01cBs0hTgbSGW8Qpu3lo4OjFrLLU07iRTm8SZdoXnYUaAy3cWIuLKTwBl3d18xuTH5KLnIFQWfmU9Je1TZzJQ1XEnNChvTN7raq8jRJN/kSxWVHgcY3CpMCfGQIOL2oBKWcs0VfzP5iq+DR0Zw4NuoJnAAnvhxD+1zoUfIkf7jT+PKIbFPpgahY7CnOKdCsAP8usgAuzHk/8vzWTpFuCoMl4HNnpyCXdr4T+UwOLo5Ow/Sxc8BLdQ/KPfKRTrlcxfbq1QVbrcRS575KcHULhvMaJHEfWmeTc+IWUdFaaSITvRWCuAeUS9CuzONhQR+KwxTWKErIl07aIsBLv77ZM1ki+SmskUjCi7UqLaidHtgXXeKMf0BCi5kMXLr8nZSv3GIekbljFyz9aofjUYuogjtsB0yuQHKU3a3mMmCaJj7xy3Lt4688GD0uB2qnBYNpb+CWPUL9sYk4NG/aKNheX5TY5/u3YC4xA8bURWDfLRRzE3lzCTWDecPyy+tlj+anZ5NAwIkwL3pHdEpfeKQ7af/gRzFk7ibuz27atuZ3RFqXwH78n88gn8crG8C832Td6AkrQx7NEmmcPYeN+Ilnzo7iYaPipJhfi6/R83EJGLAc91c7YFpf+bQEc+jh6FEs4b5OY/qlI+dG5dSatHOXvhV1vtJiY0YdHCpfeAVoEjDCsB+bU9RPYvijIspaENX0Tpz6WuUzuMv75BXLvr4raFEr5uwBFBQBm6o+tlqbXf8H69PN+/NjJ1RcxuzxZXzqw24LuIImQaqjaZYALs7oc2PjQB95OXUzdq08qlcfPX5S+TGef0NGO7xYyd6K6FEuuH8o9jvG+T+RL8JjQ3097Njejzec+nLRmsf0z8DpM2dFkX1Zmb/lD2tPVPtnwBM0GXvhndidlob/ApSuPJT4d20JAxXV6R5XK9HTmp69gO/KhCM6YTx+5tCeO0QQqGZzVaDJANVFDMt6E2vHdymDuEpbSzMLtbXBdRsbPS/EVMNIzCTx5Z5zghX/vbB7K/mwWq/UWTVoqXhgMPYoBs+D9v9eaI6qUuuDQUYXY7pn0o2DEnjKh9OLS0DJj0vKa2KE+DOFNbcoIdcsb2sGTQYGYjE9Nw33Y0l4L+NwZ7lRrzEumsTDeQjvL3+z1+i89OT8NYGWytQKt8HqFBV70FtuR1YXfsTNHluiJXwqcbpk4I88ooH2L92E/1KCVpz+iXz/D36BLy8VVzwEAAAAAElFTkSuQmCC
/***
|''Name''|ImageMacroPlugin|
|''Version''|0.9.4|
|''Description''|Allows the rendering of svg images in a TiddlyWiki|
|''Author''|Osmosoft|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
|''Notes''|Currently only works in modern browsers (not IE)|
|''Requires''|BinaryTiddlersPlugin|
!Usage
{{{<<image SVG>>}}} will render the text of the tiddler with title SVG as an SVG image (but not in ie where it will fail silently)
!!Parameters
width/height: specify width/height parameters
link: make the image link to a given location
tiddlyLink: link to a tiddler

!Notes
Binary tiddlers in TiddlyWeb when passed through the wikifier will be shown as images.
eg. {{{<<view text wikified>>}}} on a binary tiddler will show the image.
{{{<<view fieldname image>>}}}
will render the value of the tiddler field 'fieldname' as an image. This field can contain a tid
{{{<<image SiteIcon>>}}}
will create an image tag where the tiddler has content type beginning image and not ending +xml
will attempt to create svg object in other scenarios
{{{<<image /photos/x.jpg>>}}}
will create an image tag with src /photos/x.jpg as long as there is not a tiddler called /photos/x.jpg in 
which case it will render that tiddler as an image. Note for the case of svg files it will attempt to render as an svg if possible via the image
tag. It doesn't embed the svg in the dom for security reasons as svg code can contain javascript.
!Code
***/
//{{{
(function($) {

var macro = config.macros.image = {
	shim: "/bags/common/tiddlers/shim",
	ieVersion: config.browser.isIE ? parseInt(config.browser.ieVersion[1], 10) : false,
	svgns: "http://www.w3.org/2000/svg",
	xlinkns: "http://www.w3.org/1999/xlink", 
	svgAvailable: document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"),
	_fixPrefix: 1,
	_external_cache: {},
	_image_tag_cache: {},
	_image_dimensions: {},
	locale: {
		badImage: "This image cannot be displayed."
	},
	handler: function(place, macroName, params, wikifier, paramString, tiddler){
		var imageSource = params[0];
		// collect named arguments
		var args = macro.getArguments(paramString, params);
		this.renderImage(place, imageSource, args);
	},
	init: function() {
		var startupImages = store.getTaggedTiddlers("systemImage");
		var place = $("<div />").attr("id", "systemImageArea").appendTo("body").hide()[0];
		for(var i = 0; i < startupImages.length; i++) {
			var image = startupImages[i];
			macro.renderImage(place, image.title, { idPrefix: "" });
		}
		var data = new Image();
		data.onload = function() {
			// note ie 8 only supports data uris up to 32k so cannot be relied on
			macro.supportsDataUris = this.width != 1 || this.height != 1 ? false : true;
			macro.supportsDataUris = macro.ieVersion && macro.ieVersion < 9 ? false : macro.supportsDataUris;
		};
		data.onerror = data.onload;
		data.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
	},
	refreshImage: function(src) {
		var elements = macro._image_tag_cache[src] ? macro._image_tag_cache[src] : [];
		if(macro._image_dimensions[src]) {
			macro._image_dimensions[src] = false;
		}
		for(var i = 0; i < elements.length; i++) {
			var el = $(elements[i]);
			var newSrc = "%0?nocache=%1".format(src, Math.random());
			el.attr("src", newSrc); // force reload
		}
	},
	isBinaryImageType: function(contentType) {
		return (contentType && contentType.indexOf("image") === 0 &&
			contentType.indexOf("+xml") != contentType.length - 4) ? true : false;
	},
	isImageTiddler: function(tiddler) {
		return macro.isSVGTiddler(tiddler) || macro.isBinaryImageTiddler(tiddler);
	},
	isSVGTiddler: function(tiddler) {
		var type = tiddler ? tiddler.fields['server.content-type'] : false;
		return type == "image/svg+xml";
	},
	isBinaryImageTiddler: function(tiddler) {
		return macro.isBinaryImageType(tiddler.fields['server.content-type']);
	},
	renderImage: function(place, imageSource, options) {
		var imageTiddler = store.getTiddler(imageSource);
		var container;
		var classes = ["image"];
		if(options.link) {
			classes = classes.concat(["imageLink", "externalLink"]);
			container = $("<a />").attr("href", options.link).appendTo(place)[0];
		} else if(options.tiddlyLink) {
			classes.push("imageLink");
			container = createTiddlyLink(place, options.tiddlyLink, false);
		} else {
			container = $("<span />").appendTo(place)[0];
		}
		$(container).addClass(classes.join(" "));

		options = options ? options : {};
		if(imageTiddler && macro.isBinaryImageTiddler(imageTiddler)) { // handle the case where we have an image url
			return macro._renderBinaryImageTiddler(container, imageTiddler, options);
		} else if(imageTiddler){ // handle the case where we have a tiddler
			return macro._renderSVGTiddler(container, imageTiddler, options);
		} else { // we have a string representing a url
			return macro._renderBinaryImageUrl(container, imageSource, options);
		}
	},
	_renderAlternateText: function(container, options) {
		var img;
		var src = options.src || "";
		if(options.width && options.height) {
			img = $("<img />").attr("src", src).addClass("svgImageText").attr("width", options.width).
				attr("height", options.height).appendTo(container);
		}
		var alt = options.alt;
		if(img && alt) {
			img.attr("alt", alt).attr("title", alt);
		} else if(alt) {
			$(container).addClass("svgImageText").text(alt);
		}
		macro._image_tag_cache[src] = img;
	},
	_renderSVGTiddler: function(place, tiddler, options) {
		if(!options) {
			options = {};
		}
		merge(options, { tiddler: tiddler, fix: true});

		if(macro.svgAvailable) {
			this._importSVG(place, options); // display the svg
		} else if(options.altImage) {
			var image = options.altImage;
			delete options.altImage;
			this._renderBinaryImageUrl(place, image, options);
		} else {
			this._renderAlternateText(place, options); // instead of showing the image show the alternate text.
		}
	},
	_renderBinaryImageTiddler: function(place, tiddler, options) {
		var resourceURI;
		var fields = tiddler.fields;
		if(fields["server.type"] == "tiddlyweb") { // construct an accurate url for the resource
			resourceURI = "%0/%1/tiddlers/%2".format(config.defaultCustomFields["server.host"],
				fields["server.workspace"], encodeURI(fields["server.title"]));
		} else { // guess the url for the resource
			resourceURI = tiddler.title;
		}
		var ctype = fields["server.content-type"] || tiddler.type;
		var text = tiddler.text;
		if(macro.supportsDataUris && ctype && text.indexOf("<html") == -1) {
			var uri = "data:%0;base64,%1".format(ctype, text);
			options.src = resourceURI;
			return macro._renderBinaryImageUrl(place, uri, options);
		} else if(options.src) {
			return macro._renderBinaryImageUrl(place, options.src, options);
		} else {
			return macro._renderBinaryImageUrl(place, resourceURI, options);
		}
	},
	_renderImageTag: function(container, src, width, height, options) {
		var img;
		img = $("<img />").appendTo(container);
		if(height) {
			img.attr("height", height);
		}
		if(width) {
			img.attr("width", width);
		}
		if(macro.ieVersion && macro.ieVersion < 7 && macro.shim && options.ie6png) {
			$(img).css({width: userW, height: userH,
					filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%0', sizingMethod='scale')".format(src)
				}).attr("src", macro.shim);
		} else {
			img.attr("src", src);
		}
		if(!macro._image_tag_cache[options.srcUrl]) {
			macro._image_tag_cache[options.srcUrl] = [];
		}
		img = $(img).addClass(options.imageClass)[0];
		macro._image_tag_cache[options.srcUrl].push(img);
		return img;
	},
	_getDimensions: function(realDimensions, reqDimensions, preserve) {
		var w = realDimensions.width;
		var h = realDimensions.height;
		var reqh = reqDimensions.height;
		var reqw = reqDimensions.width;
		var finalw = w, finalh = h;
		var ratiow = reqw / w, ratioh = reqh / h;
		var scaledw = ratioh * w;
		var scaledh = ratiow * h;
		if(!reqw && reqh) {
			finalw = scaledw;
			finalh = reqh;
		} else if(reqw && !reqh) {
			finalw = reqw;
			finalh = scaledh;
		} else if(reqh && reqw) {
			var preserveWidth = w > h ? true : false;
			if(preserve) {
				if(preserveWidth && scaledh < reqh) {
					finalh = scaledh;
					finalw = reqw;
				} else {
					finalh = reqh;
					finalw = scaledw;
				}
			} else {
				finalw = reqw;
				finalh = reqh;
			}
		}
		return { width: parseInt(finalw, 10), height: parseInt(finalh, 10) };
	},
	_renderBinaryImageUrl: function(container, src, options) {
		var srcUrl = options.src ? options.src : src;
		srcUrl = srcUrl.indexOf("/") === -1 ? "/%0".format(srcUrl) : srcUrl; // for IE. 
		var image_dimensions = macro._image_dimensions[srcUrl];
		var image = new Image(); // due to weird scaling issues where you use just a width or just a height
		var createImageTag = function(dimensions, error) {
			if(error) {
				var altImage = options.altImage;
				if(altImage) {
					delete options.altImage;
					macro._renderBinaryImageUrl(container, altImage, options);
				} else {
					options.src = src;
					macro._renderAlternateText(container, options);
				}
			} else {
				var dim = macro._getDimensions(dimensions, { 
					width: options.width, height: options.height }, options.preserveAspectRatio);
				options.srcUrl = srcUrl;
				macro._renderImageTag(container, src, dim.width, dim.height, options);
			}
		};

		if(!image_dimensions) {
			image.onload = function() {
				var dimensions = { width: image.width, height: image.height};
				macro._image_dimensions[srcUrl] = dimensions;
				createImageTag(dimensions);
			};
			image.onerror = function() {
				createImageTag(null, true);
			};
			image.src = src;
		} else {
			createImageTag(image_dimensions);
		}
	},
	_generateIdPrefix: function(){
		return "twsvgfix_" + (this._fixPrefix++).toString() + "_";
	},
	_fixSVG: function(childNodes, idPrefix) {
		var urlPattern = /url\(\#([^\)]*)\)*/ig;
		var fixes = [
		{ attr: "id", pattern: /^(.*)$/ig },
		{ attr: "href", namespace: macro.xlinkns, pattern: /^#(.*)$/ig }
		];
		var url_fixes = ["filter", "fill", "mask", "stroke", "style"];
		for(var i = 0; i < url_fixes.length; i++) {
			fixes.push({ attr: url_fixes[i], pattern: urlPattern });
		}
		for(var t = 0; t < childNodes.length; t++) {
			var node = childNodes[t];
			for(var a = 0; a < fixes.length; a++) {
				var fix = fixes[a];
				var attr = fix.attr;
				var ns = fix.namespace || "";
				if(node.hasAttributeNS && node.hasAttributeNS(ns, attr)) {
					var v = node.getAttributeNS(ns, attr);
					fix.pattern.lastIndex = 0;
					var match = fix.pattern.exec(v);
					if(match) {
						// Make sure replacement string doesn't contain any single dollar signs
						var toReplace = match[1];
						if(toReplace.indexOf(idPrefix) !== 0 && toReplace.indexOf("twglobal_") !== 0) {
							var replacement = (idPrefix + toReplace).replace("$", "$$$$"); 
							v = v.replace(match[1], replacement);
						}
						node.setAttributeNS(ns, attr,v);
					}
				}
			}
			var children = node.childNodes;
			if(children.length > 0) {
				this._fixSVG(children, idPrefix);
			}
		}
	},
	_importSVG: function(place, options){
		options = options ? options : {};
		var svgDoc, tiddlerText = options.tiddler.text;
		if (window.DOMParser) {
			svgDoc = new DOMParser().parseFromString(tiddlerText, "application/xml").documentElement;
			var idPrefix = options.idPrefix || this._generateIdPrefix();
			this._fixSVG([svgDoc], idPrefix);
			var el = document.importNode(svgDoc, true);
			var svgHolder = document.createElementNS(macro.svgns,"svg");
			var width = options.width;
			var height = options.height;
			if(width || height) {
				if(width && height) { // set view box of containing svg element based on the svg viewbox and width and height.
					var viewBox = el.getAttribute("viewBox");
					var topLeft = "0 0";
					if(viewBox) {
						topLeft = viewBox.replace(/([0-9]*) +([0-9]*) +([0-9]*) +([0-9]*) */gi,"$1 $2");
					}
					svgHolder.setAttributeNS(macro.svgns, "viewBox", "0 0 %0 %1".format(width, height));
				} else {
					if(!width) {
						width = el.getAttribute("width");
					}
					if(!height) {
						height = el.getAttribute("height");
					}
				}
				svgHolder.setAttribute("width", width);
				svgHolder.setAttribute("height", height);

				el.setAttribute("width", "100%");
				el.setAttribute("height", "100%");
				svgHolder.setAttribute("class", "svgImage svgIcon %0".format(options.imageClass || ""));
				svgHolder.appendChild(el);
				place.appendChild(svgHolder);
			}
			else {
				var existing = el.className ? el.className.baseVal : "";
				el.setAttribute("class","svgImage %0".format(existing));
				place.appendChild(el);
			}
			// if a tiddler attribute is set this is read as a link
			$("[tiddler], [tiddlyLink]", place).attr("refresh", "link").click(function(ev) {
				var tiddler = $(ev.target).attr("tiddlyLink");
				if(tiddler) {
					story.displayTiddler(ev.target, tiddler);
				}
			});
		}
	},
	getArguments: function(paramString, params) {
		var args = paramString.parseParams("name", null, true, false, true)[0];
		var options = {};
		for(var id in args) {
			if(true) {
				var p = args[id];
				if(id == "def") {
					options[id] = p;
				} else {
					options[id] = p[0];
				}
			}
		}
		var width = isNaN(params[1]) ? false : parseInt(params[1], 10);
		var height = isNaN(params[2]) ? false : parseInt(params[2], 10);

		options.width = macro.lookupArgument(options, "width", width);
		options.height = macro.lookupArgument(options, "height", height);
		options.preserveAspectRatio = args.preserveAspectRatio && 
			args.preserveAspectRatio[0] == "yes" ? true : false;
		options.tiddlyLink = macro.lookupArgument(options, "tiddlyLink", false);
		options.link = macro.lookupArgument(options, "link", false);
		return options;
	},
	lookupArgument: function(args, id, ifEmpty) {
		return args[id] ? args[id] : ifEmpty;
	}
};

// update views
var _oldwikifiedview = config.macros.view.views.wikified;
// update wikifier to check tiddler type before rendering
merge(config.macros.view.views, {
	wikified: function(value, place, params, wikifier, paramString, tiddler) {
		if(macro.isImageTiddler(tiddler) && params[0] == "text") {
			var newplace = $("<div />").addClass("wikifiedImage").appendTo(place)[0];
			macro.renderImage(newplace, tiddler.title, { alt: macro.locale.badImage });
		} else {
			_oldwikifiedview.apply(this, arguments);
		}
	},
	image: function(value, place, params, wikifier, paramString, tiddler) {
		// a field can point to another tiddler whereas text is the current tiddler.
		var title = params[0] == "text" ? tiddler.title : value;
		var args = macro.getArguments(paramString, params);
		macro.renderImage(place, title, args);
	}
});
config.shadowTiddlers.StyleSheetImageMacro = [".wikifiedImage svg, .wikifiedImage .image { width: 80%; }",
	".svgImageText { background-color:[[ColorPalette::Error]]; color:#ddd; display: inline-block; }",
	"span.svgImageText { display: inline-block; overflow: hidden; }"
].join("");
store.addNotification("StyleSheetImageMacro", refreshStyles);

})(jQuery);
//}}}
底圖區塊
<html><div style="position:relative; background-image:url($[[圖片網址:|$1]]), url($[[離線路徑:|$4]]); width:$[[寬(px):|$2]]px; height:$[[高(px):|$3]]px;">

</div></html>
----
透明 div 按鈕
	<div style="position:absolute; top:$[[上距:|$2]]px; left:$[[左距:|$3]]px; border:1px dotted; width:$[[寬度(請附單位):|$4]]; height:$[[高度(請附單位):|$5]];">@@opacity:0;font-size:12px;$1@@</div>
----
floating panel + 透明按鈕
	<div style="position:absolute; top:$[[div 上距:|$4]]px; left:$[[div 左距:|$5]]px; border: 1px dotted; width: $[[div 寬度(請附單位):|$6]]; height:$[[高度(請附單位):|$7]];">@@font-size:12px;position:relative;+++^$[[面板寬度(請附單位):|$3]]^*@{{crystal{[$[[按鈕文字:|$2]]]}}}$[[面板文字:|$1]]===@@</div>
----
不透明 div 按鈕
	<div style="position:absolute; top:$[[上距:|$2]]px; left:$[[左距:|$3]]px; width:$[[寬度(請附單位):|$4]]; height:$[[高度(請附單位):|$5]];">@@font-size:12px;$1@@</div>
----
MediaWiki 儲存格 rowspan
rowspan='$[[橫跨列數|$0]]'|
----
MediaWiki 儲存格 colspan
colspan='$[[橫跨欄數|$0]]'|
----
MediaWiki 表格文字置中
style='text-align:center;'
----
MediaWiki 儲存格文字置中
align='center'
----
MediaWiki 儲存格文字靠左
align='left'
----
MediaWiki 儲存格文字靠右
align='right'
----
PopupMacro
<<popup '$[[按鈕文字:|$1]]' '$[[彈出文字:|$2]]'>>
----
預設浮動面板
@@position:relative;+++^15em^*@[$[[按鈕文字:|$1]]]$[[面板內容:|$2]]===@@
----
自訂寬度浮動面板
@@position:relative;+++^$[[寬度(請附單位):|$3]]^*@[$[[按鈕文字:|$1]]]$[[面板內容:|$2]]===@@
----
wikilink
[[$1]]
----
timestamp
$[[enter a date|{{new Date().formatString('DDD, MMM DDth, YYYY hh12:0mm:0ssam')}}]]
----
scrollbox
@@display:block;height:10em;overflow:auto;$[[enter scrolling content|$1]]@@@@display:block;text-align:right;^^scroll for more...^^@@
----
iframe
<html><div align="center"><iframe src="$1" frameborder="0" style="width:100%;height:800em"></iframe></div></html>
----
popout
<html><A HREF="javascript:void(0)"onclick="window.open('$1','link to $1','height=800, width=1000,scrollbars=no')" accesskey="u">Popout</a></html> 
----
big red
@@font-size:36pt;color:red;$1@@
/*{{{*/
Background: #e7f1e3
Foreground: #111b0d
PrimaryPale: #b9d6af
PrimaryLight: #87b977
PrimaryMid: #5c914a
PrimaryDark: #152111
SecondaryPale: #d6afd0
SecondaryLight: #b977af
SecondaryMid: #914a87
SecondaryDark: #21111f
TertiaryPale: #bcafd6
TertiaryLight: #8e77b9
TertiaryMid: #634a91
TertiaryDark: #171121
Error: #f88
ColorPaletteParameters: HSL([105|24], [0.32390323297750556],[0.1|0.763998669956941])
/*}}}*/
師大夜市的「小飯館兒」去年改裝後,今天第一次來。不知他們的蔘雞湯是否道地,點來吃吃 <<:p>>
----
吃完後的結論:不道地 <<XD>> 有放紅棗,也有一條人蔘,然而紅棗和人蔘的味道都幾乎嚐不出來 <<orz>> 應該說是「蛋花雞湯」,不道地的程度跟成真分會附近崇德街「韓瓦屋」的蔘雞湯有拼 <<XD>> 

所以,去「小飯館兒」的民眾,其他都可試試,但是道地的蔘雞湯……還是去韓國吃好了 <<orz>>
/***
|''Name:''|TiddlerAliasPlugin|
|''Version:''|1.0.0 BETA 4 (2009-03-30)|
|''Source:''|http://tiddlywiki.abego-software.de/Beta.html#TiddlerAliasPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2009 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.5.0.7 or better; InternetExplorer 6.0|
!Description

Reference a tiddler through an alias (or even through many aliases). E.g. a tiddler "William Shakespeare" may also be referenced as {{{[[Shaxper]]}}}.

When editing a tiddler you may enter alternative names for the tiddler in the "Alias" field (below the tags field), similar to the way you enter tags. You may even specify multiple alias names, separated by spaces. Alias names containing spaces must be written as {{{[[...]]}}}

Also this plugin implements the "Auto Non-Space Alias" feature: for tiddlers with titles containing whitespaces an alias is automatically created that has every whitespace replaced by a dash ("-"). E.g. a tiddler called [[Tiddler with no alias defined]] can also be referenced by [[Tiddler-with-no-alias-defined]].

!Revision history
* v1.0.0 Beta 4 (2009-03-30)
** Bugfix: ToggleLinks does not work when TiddlerAliasPlugin is installed (Thanks to Jonnan West for reporting the bug)
* v1.0.0 Beta 3 (2006-09-23)
** Support "Auto Non-Space Alias" feature: For tiddler with titles containing whitespaces an alias is automatically created that has every whitespace replaced by a dash ("-")
* v1.0.0 Beta 2 (2006-09-22)
** Bugfix: Tiddler is displayed more than once when opened both through title and alias (Thanks to KenGirard for reporting)
* v1.0.0 Beta 1 (2006-09-21)
** Beta 1 release
!Code
***/
//{{{
	
//============================================================================
//============================================================================
//		   TiddlerAliasPlugin
//============================================================================
//============================================================================

// Only install once
if (!version.extensions.TiddlerAliasPlugin) {

version.extensions.TiddlerAliasPlugin = {
	major: 1, minor: 0, revision: 0, beta: 4,
	date: new Date(2009,2,30), 
	source: "http://tiddlywiki.abego-software.de/Beta.html#TiddlerAliasPlugin",
	licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
	copyright: "Copyright (c) abego Software GmbH, 2005-2009 (www.abego-software.de)"
};

(function() {

window.abegoTiddlerAlias = {
	lingo:  {
		aliasPrompt: "Type alias names (i.e. alternative names for this tiddler) separated with spaces, [[use double square brackets]] if necessary"
	}, 
	
	editTemplateExtension: "<div class='editor' macro='edit alias'></div><div class='editorFooter'><span macro='message abegoTiddlerAlias.lingo.aliasPrompt'></span></div>"
};

var oldFetchTiddler;
var oldSaveTiddler;
var oldDisplayTiddler;

var fWithAutoNonSpaceAlias = true;

function withAutoNonSpaceAlias() {
	return fWithAutoNonSpaceAlias;
}

function addNonSpaceAlias(map, title) {
	var s = title.replace(/\s/g,"-");
	if (s != title)
		map[s] = title;
}

function calcAliases() {
	var result = {};
	store.forEachTiddler(function(title,tiddler) {
		var s = store.getValue(tiddler,"alias");
		if (s) {
			var p = s.parseParams("list",null,false,true);
			for(var i=1; i<p.length; i++)
				result[p[i].value] = title;
		}
		if (withAutoNonSpaceAlias())
			addNonSpaceAlias(result,title);
	});
	return result;
}

// Returns a map that maps an alias name to the title of the tiddler
abegoTiddlerAlias.getAliases = function() {
	if (!store.aliases)
		store.aliases = calcAliases();
	return store.aliases;
}

// Returns the title of the tiddler for the given alias.
// When no such alias is defined but a tiddler with that name exists the alias is returned.
// Otherwise null is returned.
abegoTiddlerAlias.getAliasTitle = function(alias) {
	var t = abegoTiddlerAlias.getAliases()[alias];
	return t ? t : (store.fetchTiddler(alias) ? alias : null)
}

function hasEditTemplateExtension(s) {
	return s.indexOf(abegoTiddlerAlias.editTemplateExtension) >= 0;
}

function addEditTemplateExtension(s) {
	if (s && !hasEditTemplateExtension(s)) {
		var i = s.lastIndexOf("</div>");
		if (i >= 0)
			return s.slice(0,i+6)+"\n"+abegoTiddlerAlias.editTemplateExtension+s.slice(i+6);
	}
	return null;
}

function hijackFetchTiddler() {
	oldFetchTiddler = store.fetchTiddler;

	store.fetchTiddler = function(title) {
		var result = oldFetchTiddler.apply(this, arguments);
		if (!result && title) {
			title = abegoTiddlerAlias.getAliases()[title];
			if (title)
				result = oldFetchTiddler.apply(this, [title])
		}
		return result;	
	};
}

function hijackSaveTiddler() {
	oldSaveTiddler = TiddlyWiki.prototype.saveTiddler;
	TiddlyWiki.prototype.saveTiddler = function() {
		var result = oldSaveTiddler.apply(this, arguments);
		delete store.aliases;				
		return result;	
	}
}


function hijackDisplayTiddler() {
	oldDisplayTiddler = Story.prototype.displayTiddler;
	Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly,customFields,toggle,animationSrc) {
		// Ensure that a tiddler is always opened with its "original" title (not an alias)
		var tiddler = store.fetchTiddler(title);
		if (tiddler) 
			title = tiddler.title;
		return oldDisplayTiddler.apply(this, [srcElement,title,template,animate,slowly,customFields,toggle,animationSrc]);
	}
}
	

function modifyEditTemplate() {
	// The shadow tiddler
	var s = addEditTemplateExtension(config.shadowTiddlers["EditTemplate"]);
	if (s) 
		config.shadowTiddlers["EditTemplate"] = s;
	
	// The "real" tiddler (if defined)
	var t = store.getTiddler("EditTemplate");
    if (t && !hasEditTemplateExtension(t.text))
          t.set(null,addEditTemplateExtension(t.text));		
}

// Requires store is defined.
function doHijacking() {
	hijackFetchTiddler();
	hijackSaveTiddler();
	hijackDisplayTiddler();
	modifyEditTemplate();
}

// for debugging the plugin is not loaded through the systemConfig mechanism but via a script tag. 
// At that point in the "store" is not yet defined. In that case hijackFetchTiddler through the restart function.
// Otherwise hijack now.
if (!store) {
	var oldRestartFunc = restart;
	window.restart = function() {
		doHijacking();
		oldRestartFunc.apply(this,arguments);
	};
} else
	doHijacking();

// To support the access through the "message" macro
config.abegoTiddlerAlias = abegoTiddlerAlias;
})();
} // of "install only once"


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/

//}}}
/***
''[Hacked by G.J.Robert Ciang, 20130523]'' adding "." as button class fallback for using with AliasPlugin
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};

// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
	config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w\\.]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				var defopen=lookaheadMatch[1];
				var cookiename=lookaheadMatch[2];
				var header=lookaheadMatch[3];
				var panelwidth=lookaheadMatch[4];
				var transient=lookaheadMatch[5];
				var hover=lookaheadMatch[6];
				var buttonClass=lookaheadMatch[7];
				var label=lookaheadMatch[8];
				var openlabel=lookaheadMatch[9];
				var panelID=lookaheadMatch[10];
				var blockquote=lookaheadMatch[11];
				var deferred=lookaheadMatch[12];

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (defopen) show="block";

				// cookie, use saved open/closed state
				if (cookiename) {
					cookie=cookiename.trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (label) {
					var parts=label.trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (openlabel) {
					var parts=openlabel.trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (header) { // use "Hn" header format instead of button/link
					var lvl=(header.length>5)?5:header.length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,(( (buttonClass == ".") || (buttonClass == ". ") )?"button":buttonClass));
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=defopen!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}
				btn.setAttribute("hover",hover?"true":"false");
				btn.onmouseover=function(ev) {
					// optional 'open on hover' handling
					if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
						document.onclick.call(document,ev); // close transients
						onClickNestedSlider(ev); // open this slider
					}
					// mouseover on button aligns floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
				}

				// create slider panel
				var panelClass=panelwidth?"floatingPanel":"sliderPanel";
				if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
				panel.setAttribute("transient",transient=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!deferred) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",blockquote?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
				}
			}
		}
	}
)

function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
	if (!theTarget) return false;
	var theSlider = theTarget.sliderPanel;
	var isOpen = theSlider.style.display!="none";

	// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
	if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}

	// show/hide the slider
	if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";

	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;

	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);

	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ try{ ctrls[c].focus(); } catch(err){;} break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
		else window.removeCookie(cookie); // remove cookie if slider is in default display state
	}

	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// prevent clicks *within* a slider button from being processed by browser
	// but allow plain click to bubble up to page background (to close transients, if any)
	if (e.shiftKey || theTarget!=resolveTarget(e))
		{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	Popup.remove(); // close open popup (if any)
	return false;
}
//}}}
//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);

	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside a popup... leave transient panels alone
	var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
	if (p) return retval;
	// if click was inside transient panel (or something contained by a transient panel), leave it alone
	var p=target; while (p) {
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		p=p.parentNode;
	}
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
		if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
	}
	return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
		// see [[MoveablePanelPlugin]] for use of 'undocked'
		var rightEdge=document.body.offsetWidth-1;
		var panelWidth=panel.offsetWidth;
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
			left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
			if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
		}
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
			if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
			if (left<0) left=0;
		}
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function() {
		this.coreStop.apply(this,arguments);
		var e=this.element;
		if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
			// adjust panel overflow and position after animation
			e.style.overflow = "visible";
			if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
		}
	};
}
//}}}
10/25 考過駕照,過一週拿到駕照,之後到目前為止實際駕車 4 次:
#11 月初去臺中找未婚妻,從她家開到臺中車站,是為生平第一次拿到駕照後開車上路,獻給了夫人 <<:)>>
#從深坑家載爸媽去萬芳教會參加出遊,就短短的一趟,不含窄路。
#從深坑家載爸媽去木柵市場買菜,這次是從車庫出來走窄路,然後到市場停車(共兩處),都在爸的指導下完成。只有最後回家時的高難度倒車上坡入庫還是抓不準,放棄。
第 4 次,就是今天下午雨中載爸媽從深坑、石碇、平溪,再走汐平公路翻山到汐止新臺五路。

距離十月初還在駕訓班時道路駕駛來走深坑平溪線的 106 縣道已有兩個月,都快忘記開手排車的感覺了。所幸爸的休旅車開起來很輕鬆很好操控。今天整個練車過程中除了一開始遇到一個白目的貨車駕駛想靠過來被我按喇叭吼回去之外,山路上都沒什麼車,即使下雨也蠻好開。可惜陰雨綿綿,上到公路山頂過嶺以後也沒有什麼展望,無法讓他們看到整個基隆海岸以及汐止河谷。

下坡到汐止境內的山腳,路反而變窄,休旅車車體較大我較難掌握,所以偶有驚險。最後爸就要我換手讓他開完新臺五路和高速公路回家了,所以今天我還沒開到高速公路,希望下次有機會練到 <<:)>> 不過,最重要的還是趕快習慣汽車的大小還有視線呀!
我記得雖然今早按「貪睡」了好幾次,不過應該是四點初起床的吧……但是想不到,換好衣服騎到教會跪下要禱告,先抬頭一看時鐘(我昨晚手錶忘在浴室),居然剛好五點了……<<汗>> 主啊,我真的動作太慢了嗎……"""@@"""
!!!!Definitions
{{{
\def\functions{\function}
}}}

!!!!Notes
This is simply for enhanced readability in the situation when you want to define two or three functions with the same domain and codomain.

!!!!Examples
{{{
\functions{f, g}:{X}->{Y}
}}}
\[
\functions{f, g}:{X}->{Y}
\]
----

!!!!Definitions
{{{
\def\p{\parentheses}
\def\b{\brackets}
}}}

!!!!Notes
Because "parentheses" and "brackets" are rather long words for such common syntactic objects they are the first candidates for abbreviation.  The fact that parentheses and brackets in mathematical expressions are often verbally conveyed with pauses and syllable stressing adds further weight to this.
----

!!!!Definitions
{{{
\def\N{\naturals}
\def\Z{\integers}
\def\Q{\rationals}
\def\R{\reals}
\def\C{\complexNumbers}
}}}

!!!!Notes
To many people these abbreviations are //more// readable than the original commands.
----

!!!!Definitions
{{{
\def\sng{\singleton}
\def\Seq{\Sequence}
\def\seq{\sequence}
\def\pSet{\powerSet}
\def\fnSpace{\functionSpace}
\def\card{\cardinality}
}}}
----

!!!!Definitions
{{{
\def\fn{\function}
\def\fns{\functions}
\def\id{\identity}
}}}
----

!!!!Definitions
{{{
\def\homeo{\homeomorphic}
\def\sCC{\stoneCechCompactification}
}}}
  昨晚用蚊拍撲殺兩隻以後,真的覺得很痛快;又好奇到底電蚊拍是誰發明的,「他的獎賞是大的」,結果查的時候看到這篇:[[三少四壯集---電蚊拍|http://news.chinatimes.com/Chinatimes/Philology/Philology-Coffee/0,3406,112005061100513+1105130102+20050611+news,00.html]],寫得很好笑而且和我的想法相合;再一看,原來是馮光遠在 2005 年寫的,哈哈 <<XD>>
@@Please do not modify this tiddler; it was created automatically upon space creation.@@
(踢完足球比賽後需要大量水分時)
R0lGODlhEwATAOf/AAkECgwFCg4FCg4GCg4GCxAHCxEHCxEHChIJDBMKDRQMDxYODxcPDxgQDxkRDxoSDxoTDxsTDxsUDxwVDxwVEBwVERwWEhsXExsXFRsZFxsaGRsbGx0eHx8gISAiIiEjIyIjJCMjJCMjIyMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMS8vMCwtLiorLSkpLC0oKDEnJDYnITomHkAnG0UnGEknFVEoElosD2EwDWU0DWw5DHE8DHc/C3xCC4FEC4VGCIpGCY1NCItMColMC4VLDYFNEH9TFH5XGHpZJHNaMHBcOG5dPmpdRWZeTWpfSm1hSHJjR3tpRIdvQJB0O5d5PqCAQayJQbeSQ7+eTM2tVt3DaOvWePXjgvrqiv3ujv3vkP3vjf3wiv7yiP7yhf7xgf7xf/7wff7wff7ve/7uev7td/7sdP7rb/7oav7nZv7kY/7hY/3eYv3bYv3ZYv3XYfzUX/zSXPzQWPvPVfvNUvvNUPvMTvvMTfzPTPzSSv3USP3YR/3cRv3aRf3YQf3TQPzLPfvIPPvFOvvCOPrBN/q/Nfq+NPq8L/q7LPq6Kfq5Jvu5I/y5H/y4GPy2Ff20E/y1Fvy0GPuyHPqwHvqwH/qwIPevI/awJ/GvLumtOt2rTNGoXL+kdbOghKick6Kam56Znp2aoZyapJmbqJmbqpudrp2gsJ+is6OltKepuKywwK+1x7O5zbe+0sjO39ba5+Dk7uns9e7x+PL2+/T3/Pb5/Pf6/fj7/fn8/vr8/vv9/vz9/v3+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7++/7+8v794v791v78zv78yf78xv78w/36w/z4wvr1wfjyvvXuvfDnuefctNzOsNTFrM69qci1o8Otmr2lkrmeirSYga+Seq2Pd6uMdaqKcqmIb6iGbKeDaaWCaKSAZqN/Y6J8X6J8WaR6UqV6TKl7R6x7P657Nq97MLV6JLp5G756FcF4D8d6C////yH5BAEAAP8ALAAAAAATABMAAAj+AP8JHCguXb179dqJG8hwIDkjX8iYMbNmDz8j5RoK3LJvGjVsE8uMWTOnX5SGW7xI+7jNDJkxY/jwmeMvy8BxSKhxy6aN20QyYmQGqtMv479+2JJeSwrSjJo3dOogUoTkn60DWLag+kIvCxQyT57o26cPSZMDq2Iw00ULACtWuHoB2KXrFSsAtXQxoxLDGDRmyKD9zQWAFjNmzw4fjoFvAhVYt2RR6eAkjRYNVGThmkVFwj4vdb5oeaLFSx42e+Yc4odkCRJ/m7ykmxR1jm09fQAJEnRI0SJGjTatE+cvD6A/gJIHGuTokSRJo0Rh8jfunxFFg74cGvTIkaPnlEZPhfq06YhAVf3qeOkx9fmk8OMz+Ws38Ik/RE4A6GtU6dL4T/IN0ZAT/igiShOWjBdKJ5v4I6BG7xyxyYQU+nOEPBoxVA49+vCjjz3m9NJQQAA7
/***
Author: Saq Imitiaz
Taken from: http://svn.tiddlywiki.org/Trunk/contributors/SaqImtiaz/plugins/AnchorsPlugin.js
Note by G.J.Robert Ciang: does not fully function on modern TW, links to anchors do not scroll to them but only to the beginning of the tiddler. Can be used with SectionLinksPlugin.
***/
/*{{{*/
AnchorPlugin = {
	
	isDescendant : function(e,parent){
		while (e != null) {
			if (parent == e) return true;
			e = e.parentNode;
                }
		return false;
	},	
	
	hijackDisplayTiddler : function(){
		Story.prototype.origAnchor_DisplayTiddler = Story.prototype.displayTiddler; 
		Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle) {
			var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;
			var anchorname = '';
			var z = title.indexOf('#');
			if(z!=-1){
				anchorname = title;
				var title = title.split('#')[0];
			}
			story.origAnchor_DisplayTiddler(srcElement,title,template,animate,unused,customFields,toggle);
			var anchor = document.anchors[anchorname];
			var tiddlerElem = document.getElementById(this.idPrefix + title);
			var pos = (anchor && AnchorPlugin.isDescendant(anchor,tiddlerElem))? anchor : tiddlerElem;
			if(srcElement && typeof srcElement !== "string" && z!=-1) {
				if(config.options.chkAnimate && (animate == undefined || animate == true) && anim && typeof Zoomer == "function" && typeof Scroller == "function")
					anim.startAnimating(new Zoomer(title,srcElement,pos),new Scroller(pos));
				else
					window.scrollTo(0,ensureVisible(pos) + (findPosY(pos)> findWindowHeight() -  - findScrollY()?findWindowHeight() - pos.offsetHeight:0));
			}		
		}
	},
	
	hijackGetTiddlyLinkInfo : function(){
		window.origAnchor_GetTiddlyLinkInfo = window.getTiddlyLinkInfo
		window.getTiddlyLinkInfo = function(title, currClasses){
			var i = title.indexOf('#');
			if(i!=-1)
				title = title.substr(0,i);
			return window.origAnchor_GetTiddlyLinkInfo(title,currClasses);
		};
	},
	
	formatter : {
		name: 'anchor',
		match: '\\[\\[#',
		lookaheadRegExp: /\[\[#(.*?)(?:\|(~)?(.*?))?\]\]/mg,
		handler: function(w) {
			this.lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
				var a = createTiddlyElement(w.output,'a',null,null,lookaheadMatch[3]? lookaheadMatch[3]:null);
				var t = w.tiddler ? w.tiddler.title + '#' : '';
				a.setAttribute('name',t+lookaheadMatch[1]);
				w.nextMatch = this.lookaheadRegExp.lastIndex;
			}
		}
	},
	
	init : function() {
		this.hijackDisplayTiddler();
		this.hijackGetTiddlyLinkInfo();
		config.formatters.unshift(this.formatter);
	}
};

AnchorPlugin.init();
/*}}}*/
R0lGODlhEwATAPf/AAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDcwKbK8Co/qio//ypfACpfVSpfqipf/yp/ACp/VSp/qip//yqfACqfVSqfqiqf/yq/ACq/VSq/qiq//yrfACrfVSrfqirf/yr/ACr/VSr/qir//1UAAFUAVVUAqlUA/1UfAFUfVVUfqlUf/1U/AFU/VVU/qlU//1VfAFVfVVVfqlVf/1V/AFV/VVV/qlV//1WfAFWfVVWfqlWf/1W/AFW/VVW/qlW//1XfAFXfVVXfqlXf/1X/AFX/VVX/qlX//38AAH8AVX8Aqn8A/38fAH8fVX8fqn8f/38/AH8/VX8/qn8//39fAH9fVX9fqn9f/39/AH9/VX9/qn9//3+fAH+fVX+fqn+f/3+/AH+/VX+/qn+//3/fAH/fVX/fqn/f/3//AH//VX//qn///6oAAKoAVaoAqqoA/6ofAKofVaofqqof/6o/AKo/Vao/qqo//6pfAKpfVapfqqpf/6p/AKp/Vap/qqp//6qfAKqfVaqfqqqf/6q/AKq/Vaq/qqq//6rfAKrfVarfqqrf/6r/AKr/Var/qqr//9QAANQAVdQAqtQA/9QfANQfVdQfqtQf/9Q/ANQ/VdQ/qtQ//9RfANRfVdRfqtRf/9R/ANR/VdR/qtR//9SfANSfVdSfqtSf/9S/ANS/VdS/qtS//9TfANTfVdTfqtTf/9T/ANT/VdT/qtT///8AVf8Aqv8fAP8fVf8fqv8f//8/AP8/Vf8/qv8///9fAP9fVf9fqv9f//9/AP9/Vf9/qv9///+fAP+fVf+fqv+f//+/AP+/Vf+/qv+////fAP/fVf/fqv/f////Vf//qszM///M/zP//2b//5n//8z//wB/AAB/VQB/qgB//wCfAACfVQCfqgCf/wC/AAC/VQC/qgC//wDfAADfVQDfqgDf/wD/VQD/qioAACoAVSoAqioA/yofACofVSofqiof/yo/ACo/Vf/78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH+HUJ1aWx0IHdpdGggR0lGIE1vdmllIEdlYXIgMy4wACH5BAEKAP8ALAAAAAATABMAAAjlAP8JHPgP2rJUy6ARXDjw2bJn0qQ9c5iKoUBVTFCgKCVRWioUGVUthMYklUcUEKVt9MjEFUGT0qBFlDYt5cRnpRpKWxaoTyCTEFP57LPsoMBl0vq4hNYn4rNALl0FcpYTGsRA/1D8awqxzz8m/wIdVPUwadRATqH+Q9BHmTKxElsNTQXRYc+fRX/W7ehU4s1lynha3XuzsLJngUmJfFh4ot+JgVHl/EfXcWNnRQGnwioQ1U06oEFDofMM1bJQLgVCS4X5b+bEIgmqKhVYWarIB/nEZpiqlOnIpNRaVK0qkHFVrxgGBAA7
(function() {
var getCSRFToken = function(window) {
	// XXX: should not use RegEx - cf.
	// http://www.quirksmode.org/js/cookies.html
	// https://github.com/TiddlySpace/tiddlyspace/commit/5f4adbe009ed4bda3ce39058a3fb07de1420358d
	var regex = /^(?:.*; )?csrf_token=([^(;|$)]*)(?:;|$)/;
	var match = regex.exec(document.cookie);
	var csrf_token = null;
	if (match && (match.length === 2)) {
		csrf_token = match[1];
	}

	return csrf_token;
};

if (typeof config !== 'undefined' && config.extensions &&
		config.extensions.tiddlyspace &&
		config.extensions.tiddlyspace.getCSRFToken === null) {
	config.extensions.tiddlyspace.getCSRFToken = getCSRFToken;
} else {
	window.getCSRFToken = getCSRFToken;
}
})(window);
@@Please do not modify this tiddler; it was created automatically upon space creation.@@
@@Please do not modify this tiddler; it was created automatically upon space creation.@@
4/23(六)下午關渡淡水騎單車道上耍笨小摔車後,今晨有感。
江國慶、蘇建和……還有你所不知道的冤獄何其多。辛普森真的沒殺他老婆嗎?

人類的司法和公義本質上就不是 100% 可靠,舉世皆然。法條都訂得漂漂亮亮,執行、解釋、運作卻還是要靠警察、檢察機關、法院這許多的人。如果人避免不了失誤和故意的扭曲的話,要想讓所有的人都按行為得到報應,根本是不可能的。柯南說「事實永遠只有一個」,是啊,但是現實中有多少個神探?所以才說「神」嘛 <<XD>>

然而(也所幸)永遠都是「人在做,天在看」,好,你活著的時候隻手遮天、叱吒風雲好了,都沒有想過死後下地獄?活著的時候就因為罪惡感而活得像地獄?隨隨便便流人血的、屈打成招的、執法過當的、自以為是 神的人,你們以為可以這樣一直下去嗎?錯了,你越以為斷氣之前沒有得到報應,等你的刑罰卻越大。
/***
!Description
Updates the html serialization in TiddlySpace to provide routes to the takenote tool
***/
$(document).ready(function() {
	var place = $("#container").length > 0 ? $("#container")[0] : document.body;
	var space = window.location.host.split(".")[0]
	var bag = $(".bag").first().text() || space + "_public";
	var title = $("#title").text();
	// add edit link to notabene
	$.ajax({ url: "/spaces/" + space + "/members",
		success: function(r) {
			var isTiddler = $(".tiddler").length > 0;
			if(r) {
				if(bag == space + "_public") {
					if(isTiddler) {
						$("<a id='editLink' />").attr("href", "/takenote#!/quickedit/tiddler/" + title).
							text("edit note").prependTo(place);
					} else { // when viewing a collection add link to create new note in collection
						$("<a id='editLink' />").attr("href", "/takenote").
							text("take note").prependTo(place);
					}
				} else if(bag == space + "_private") {
					if(isTiddler) {
						$("<a id='editLink' />").attr("href", "/takenote#!/quickedit/bags/" + bag + "/tiddler/" + title).
							text("edit note").prependTo(place);
					}
				}
				if($("#backstage").length === 0) {
					$(['<ul id="backstage">',
						'<li><a href="/dashboard">dashboard</a></li><li><a href="/takenote">takenote</a></li>',
						'</ul>'].join("")).prependTo(document.body);
				}
			}
		}
	});
});
!!!!Definitions
{{{
\def\parentheses#1{{\left( {#1} \right)}}
\def\brackets#1{{\left[ {#1} \right]}}
\def\solidus#1/#2{{\left. {#1} \left/ \vphantom{#1} {#2} \right. \right.}}
\def\of{\parentheses}
\def\operator{\operatorname}
}}}

!!!!Notes
$\PopAll$The {{{\parentheses}}} command is for grouping elements of mathematics together wheras {{{\of}}} is for application of functions and operators.  There exist abbreviations {{{\p}}} and {{{\b}}} for {{{\parentheses}}} and {{{\brackets}}} respectively.

!!!!Examples
{{{
\p{\closure{A} \union \closure{B}} \setMinus \p{\closure{A} \intersect \closure{B}}
f\of{\sum_{k = 0}^{\infinity} y_k}
\operator{orb}\of{\Intersection_{k = n}^{\infinity} C_k}
\solidus{\b{\Union_{i \in I} A_i}_{\equivalent_{Y}}}/{\equivalent_{Z}}
}}}
\[
\p{\closure{A} \union \closure{B}} \setMinus \p{\closure{A} \intersect \closure{B}}\qquad
f\of{\sum_{k = 0}^{\infinity} y_k}\qquad
\operator{orb}\of{\Intersection_{k = n}^{\infinity} C_k}\qquad
\solidus{\b{\Union_{i \in I} A_i}_{\equivalent_{Y}}}/{\equivalent_{Z}}
\]
----

!!!!Definitions
{{{
\def\script{\mathcal}
\def\gothic{\mathfrak}
\def\blackboard{\mathbb}
\def\boldText{\mathbf}
\def\bold{\boldsymbol}
}}}

!!!!Notes
{{{\bold}}} is an old $\TeX$ command and {{{\mathbf}}} is its newer replacement.  Here we go back to {{{\bold}}} for readability.  {{{\blackBoard}}} is the command name used in BasicMacros 1.0 but this will probably be replaced in favour of {{{\blackboard}}} in a later version (because blackboard is one word).  Please use {{{\blackboard}}}.

!!!!Examples
{{{
\script{A}
\gothic{A}
\blackboard{N}
\boldText{ZFC}
\bold{v}
}}}
\[
\script{A}\qquad
\gothic{A}\qquad
\blackboard{N}\qquad
\boldText{ZFC}\qquad
\bold{v}
\]
----
R0lGODlhUAAPAIcAAAAAAAQDAAgGAAgHAAwKABANABAOARQRABgUABgVABgWBRwXABwYABwZACAaACAbACAcACQeACghADApADArADAsCjwzAEA1AEg8AEhBAFBCAFRGAFhOAGBVAGBWAGhWAGheAHBdAHRgAHRkAHRnAHhjAHhsAH9xAEVFRYNvAIt2AI98AI9/AJN7AJd+AI+BAJ+EAJ+NAK+RAK+bAKueDL+fAK+hDL+qAMupAM+sAM+7ANOxANu+AOeaAOedAOihAOunAOivAOa0AOq7AOe3FP+7AP+8AP++ANvCAOfAAObFEOvUAPPMAPfOAP/BAP/CAP/DAP3FAP/EAP/HAP3LAP/IAP/JAP/KAP3PAP/MAP/NAP/OAP/PAPPTAPfQAPfTAPfXAPPcAPfbAPvRAP/QAP/RAP/SAP3WAP/UAP/VAP/WAP/XAPvfAP/YAP/ZAP/aAP/bAP/cAP/dAP/eAOjJKOrLOP/gAP/hAP/iAP/jAP/kAP/mAP/nAP/oAP/pAP/qAP/rC//rDP/rD//rEf/sEv/sHP/tH//tIP/tIv/uKf/uLv/uL//uMPvrOf/vOP/vOv/vPOrNRv/xS//xTv/xUP/yVf/yVv/yWP/zYv/zZP/zZv/0dP/1d/zye//1e//1fYSEhOjfvv31hv/3jP/3j//3lf/4mf/4murisOjhtevjt/33p//5pP34sf/6uMbGxv/7wP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAALEALAAAAABQAA8AAAj/AGMJFIiioMGDCBMqXMiwocODAyPGKqhqFamLGA1i3Mixo8ePIENy7FSnoEQUoVyd+pSpZUsUsV6hcEmzZksAAGzq3MmzZ6ZJkBQRgUkwlatSmyw9WvoIpkymTHFKxbmUKtSrV3EqaMS0glWsUK0iEvTHjxCiKGCZ2kSJEaG3hJyieFvwLU64ePPq1QvAAAAab234BbA374ABb/3s0YMHD0wUqFh5qrQoEJ/LfJzKRCHzMk7MoD/rCJABs4kAOkDzAfACQGk+FFoDuLwERAMABDyEwQwBwuU8dubEgROkYKtRmBwN4pOneR7Nr16BQtEcp/Pr1vOQABAjz40AJK5X/xeTAACSGQnEZOcA4AQbFgA6OO/dfA6cNmrSYCnIipMkQ37kMceAToFi4HQDzjGVVAPiNGAXDxzAAwMPdJFgggDMsQIAI0ywgoIZzlEAABaCgVuCDzwwoBtpmEHGFlwUJIomjgCyhx1vvFHgQTnmiFOPQP6YowoAjJgCkD0C8MYXCASAwBdvCLmgkG9YYEGOaZShxRVVRFFQJJckEqAcJkmHwhpopokmTmqmyeYaTDhQwA4LLMBEm2sAgGYLALSwpp5rjOgFnm2akcUUUjzxw2OUHNKHYwKZmcaklFKKU6WWAjCpCADAkEYNAYSAaRqapjEGBmNMemkaGwDgQhM4aHgQQaaTcmEFFEcYgRYdhfBxB0wATIfGsMQWi1OxxB6bQwAXEFtCADkgCwCywx6LRhIfSACAAB/IkOy0aGwxhRNF9EDUREr4ypmBKFDr7rvwxiuvvFtU4YQP5xKEwhBnGDTqvwAHLPDABFMBhEkS6fvQwgw3zLBEAQEAOw==
http://www.facebook.com/home.php?#!/note.php?note_id=148217748566977&id=100000123918049
<<<
花三分鐘,絕不浪費還有保自己的權益。

身份証遺失時→法令修改了

收到此 MAIL 請儘您所能的傳閱出去,因為事關許多人的權益,

也是為不讓不法之徒有機可趁,身份証遺失時,請千萬記得   

 

  (1)向警察局備案遺失  →錯誤示範  

  (2)開立遺失三聯單                 →錯誤示範  

  (3)向金融聯合徵信中心登錄遺失記錄   →錯誤示範   一般民眾身份證遺失或被竊或被搶,直覺會向警察單位報遺失,  

   正確做法應馬上準備: 

  1. 二月內大頭照黑白彩色均可, 二 吋的  

   2.規費 200元  

   3.帶印章及戶口名簿正本或駕照正本  

      [最後領到的畢業證書正本 (役男可帶退伍令正本 ) 也可以 ]

   4.親自前往戶籍所在地戶政事務所辦理身份證領 / 補 /換 發手續

  大約5-10 分鐘金資中心也馬上與戶政機關電腦記錄取得連線

  (< http://www.ris.gov.tw/) ,日後身分文件以最後 一 次「身份證 領 / 補 /換發日」為主可上網查詢 http://www.ris.gov.tw/docs/uping.html 

  這樣 一 來歹徒就無法籍著銀行體系,利用你的身分證辦理新開戶或

  信用卡或貸款之類 ..至於其他的麻煩,則可由戶政事務所的 "身份證

  領/ 補/ 換發申請書 " 來證明舊有 ( 原 ) 身分證已遺失作廢,申請 一 張證明也才十塊錢而已,較之前面所述之法大大省事,況且戶政事務所也很樂意為大家服務!
<<<
/***
|''Name:''|TiddlySpaceIntraSpaceInclusion|
|''Description:''|Provides support for {{{<<tiddler Foo@bar>>}}} and {{{<<tiddler [[Foo]]@bar>>}}}|
|''Author:''|Jon Robson|
|''Source:''|https://github.com/jdlrobson/TiddlyWikiPlugins/raw/master/plugins/TiddlySpaceIntraSpaceInclusion/TiddlySpaceIntraSpaceInclusion.js|
|''Version:''|0.3.8a|
|''License:''|[[BSD License|http://www.opensource.org/licenses/bsd-license.php]] |
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''~CoreVersion:''|2.4|
***/
//{{{
(function() {
	var _tidtext = TiddlyWiki.prototype.getTiddlerText;
	var cache = {};

	// allmost the same regExp as in TiddlySpaceLinkPlugin but .. no "mg" parameter, because it didn't work for this usecase.
	config.textPrimitives.spacenameLinkRegExp = new RegExp(config.textPrimitives.unWikiLink + 
													 "?(" + config.textPrimitives.bareTiddlerLetter + "*)@(" + config.textPrimitives.spaceName + ")", "");
	config.textPrimitives.tiddlyLinkSpacenameLinkRegExp = new RegExp("\\[\\[(.*?)(?:\\|(.*?))?\\]\\]@(" + config.textPrimitives.spaceName + ")", "");
	
	TiddlyWiki.prototype.getTiddlerText = function(title, defaultText) {
		var ct = config.textPrimitives;
		var match = ct.spacenameLinkRegExp.exec(title);	// foo@bar
		var match2 = ct.tiddlyLinkSpacenameLinkRegExp.exec(title); 	// [[foo]]@bar
		
		if(match || match2) {
		//	console.log('inner: ', 'spacename: ', match, 'tiddlyLink: ', match2, 'place: ');
			var tidtitle, space;
			if(match[1] && match.length === 3) {
				tidtitle = match[1];
				space = match[2];
			} else if(match2 && match2.length === 4) {
				tidtitle = match2[1];
				space = match2[3];
			}
			var newtitle = tidtitle + "@" + space;
			if(tidtitle && space) {
				title = newtitle;
			}
			if(tidtitle && space && !store.getTiddler(newtitle)) {
				var tiddler = new Tiddler(title);
				// get the tiddler, where the macro is rendered. //XXX will need more testing
				var el = story.findContainingTiddler(place);
				var refreshTitle = (el) ? el.getAttribute('tiddler') : null;

				tiddler.text = "//retrieving from server//";
				tiddler.fields.doNotSave = "true";
				tiddler.tags = ["excludeLists", "excludeSearch", "excludeMissing"];
				merge(tiddler.fields, config.defaultCustomFields);
				tiddler.fields["server.bag"] = space + "_public";
				tiddler = store.addTiddler(tiddler);
				ajaxReq({ url: "/bags/" + space + "_public/tiddlers/" + tidtitle,
					dataType: "json",
					success: function(tid) {
						var tiddler = store.getTiddler(title);
						tiddler.text = tid.text;
						store.addTiddler(tiddler);
						// store.notify(title,true);
						story.refreshTiddler(refreshTitle,null,true);
						// story.refreshAllTiddlers(); // hacky but above link doesn't always seem to work!
					},
					error: function() {
						var tiddler = store.getTiddler(title);
						tiddler.text = "//error retrieving tiddler {{{" + title + "}}} from space @" + space + "//";
						store.addTiddler(tiddler);
						// store.notify(title,true);
						story.refreshTiddler(refreshTitle,null,true);
						// story.refreshAllTiddlers(); // hacky but above link doesn't always seem to work!
					}
				});
			}
		}
		return _tidtext.apply(this, [title, defaultText]);
	}
})();
//}}}
  捷兒從一歲多到現在快兩歲,幾乎朝夕都在玩小汽車,至於我們很希望他玩的鐵琴、鼓組、足球、積木……etc.,他通常不會玩超過 5 分鐘(樂高積木裡,也只有警車、救護車是他的最愛……)。雖說看過不少男孩都是這樣,不過仍會擔心這樣的習癖會不會影響某些發展?

*<<mif "兒子愛玩小汽車~~真的不好嗎??? - BabyHome親子討論區" "http://www.babyhome.com.tw/mboard/topic.php?bid=11&sID=3813237&page=1">> ← 這篇大多數的看法是正面的;先暫時這樣,有機會再找資料
!加熱秒數
|商店冰箱中 4 度保鮮的盒裝飲料|2 min|
@flicktiddler allows you to flick tiddlers to other spaces.

To use include this space into the space you want to flick into.

Then try flicking this tiddler by clicking on the more menu and clicking flick tiddler (only works on public tiddlers).

It will open up a new window and cause the flicking.
@@position:relative;+++^15em^*@[聯絡我/Contact]
*Mail: Robertus0617 [dot] gmail [dot] com
*Facebook: https://www.facebook.com/GJRobert
===@@
//{{{
config.macros.popup.arrow=document.all?"":"";
//}}}
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : true;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "permalink";
//}}}
//{{{
config.evaluateMacroParameters = "full";
//}}}
/***
!!HoverMenu configuration settings
***/
//{{{
config.hoverMenu.settings={
               align: 'right',    //align menu to right or left side of screen, possible values are 'right' and 'left'               
               x: 1,              // horizontal distance of menu from side of screen, increase to your liking.
               y: 77            //vertical distance of menu from top of screen at start, increase or decrease to your liking
               };
//}}}
/***
!!HoverMenu localization
***/
//{{{
config.macros.top.handler=function(place,macroName)
{
               createTiddlyButton(place,"▴","跳至網頁頂端",this.onclick);
}
config.commands.top =
{
               text:"▴",
               tooltip:"跳至網頁頂端"
};
//}}}
/***
!!FoldHeadingsPlugin localization
***/
//{{{
config.macros.foldHeadings.showtip = "按一下可顯示「%0」的內容";
config.macros.foldHeadings.hidetip = "按一下可隱藏「%0」的內容";
config.macros.foldHeadings.showlabel = "展開...";
config.macros.foldHeadings.hidelabel = "摺疊";
//}}}
FB 好友[[健良哥|https://www.facebook.com/ccya.luck]]:
<<<
扭傷休養中:分享透過這次扭傷學習到正確的扭傷處理。
首先冰敷,之後找一個好的整復師,把位移的經絡歸正,之後繼續冰敷三天,然後改為熱敷。這次的扭傷經驗讓我體會到扭傷狀況必須第一時間喬回去,若有傷到骨頭的話就不能喬回去,不同的扭傷,有不同的現象,有不同的處理方法。
像這次我扭傷處在腳踝,腫脹處是軟的,代表並無骨頭裂傷的跡象,所以醫生就先柔軟腳踝週遭的組織,然後就喀喀二聲,後來腳就可以落地走路了,真的是哈利路亞~感謝主~再來就是醫生提醒要冰敷及之後的熱敷,特別要注意飲食(不能吃海鮮類)加上充分休息,因為目前還是非常的腫脹,走路仍有困難,但是感覺上已經不像昨天剛受傷時,腳一踏地就痛到不行,能被正確的醫治,免去很多的後遺症與不必要的煎熬(我有一個姐妹扭傷後看西醫,三個星期過了,還是無法下床行走,後來還是去喀喀之後才能正常行走),真的真的很感謝神的動工與保守。
<<<
/***
|Name|QuickEditPlugin|
|Source|http://www.TiddlyTools.com/#QuickEditPlugin|
|Documentation|http://www.TiddlyTools.com/#QuickEditPlugin|
|Version|2.4.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Support functions for ~QuickEdit package: styles, utility functions, and 'toggleQuickEdit' command|
!!!!!Revisions
<<<
2009.06.11 [2.4.3] added keyup() function to abbreviate listbox handling for CR and ESC
2009.05.07 [2.4.2] added processed() function to abbreviate event handler code
2008.09.07 [2.4.1] added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.17 [2.4.0] copied code from StickyPopupPlugin to remove dependency
2008.05.12 [2.3.0] added "toggleQuickEdit" command handler (replaces inline script command)
2008.01.11 [2.2.0] converted from inline script
2007.03.29 [1.0.0] initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.QuickEditPlugin= {major: 2, minor: 4, revision: 3, date: new Date(2009,6,11)};

// SET STYLESHEET
setStylesheet("\
.quickEdit a { border:2px outset ButtonFace; padding:0px 3px !important; \
	-moz-border-radius:.5em; -webkit-border-radius:.5em; \
	-moz-appearance:button !important; -webkit-appearance:push-button !important; \
	background-color:ButtonFace; color:ButtonText !important;  \
	line-height:200%; font-weight:normal; } \
.quickEdit a:hover { border: 2px inset ButtonFace; background-color:ButtonFace; }\
", "quickEditStyles");

// REMOVE COOKIE
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

// UTILITY FUNCTIONS
config.quickEdit = {
	processed: function(ev) { ev=ev||window.event;
		ev.cancelBubble=true;
		if(ev.stopPropagation) ev.stopPropagation();
		return false;
	},
	keyup: function(ev){ var k=(ev||window.event).keyCode;
		if (k==13) this.onclick();
		if (k==27) Popup.remove();
	},
	getField: function(where) {
		var here=story.findContainingTiddler(where); if (!here) return null;
		var e=story.getTiddlerField(here.getAttribute("tiddler"),"text");
		if (e&&e.getAttribute("edit")=="text") return e;
		return null;
	},
	setSelection: function(where,newtext) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,newtext);
		return false;
	},
	wrapSelection: function(where,before,after) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,before+config.quickEdit.getSelection(e)+after);
		return false;
	},
	getSelection: function(e) {
		var seltext="";
		if (e&&e.setSelectionRange)
			seltext=e.value.substr(e.selectionStart,e.selectionEnd-e.selectionStart);
		else if (document.selection) {
			var range = document.selection.createRange();
			if (range.parentElement()==e) seltext=range.text
		}
		return seltext;
	},
	promptForFilename: function(msg,path,file) {
		if(window.Components) { // moz
			try {
				netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
				var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
				var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
				picker.init(window, msg, nsIFilePicker.modeOpen);
				var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
				thispath.initWithPath(path);
				picker.displayDirectory=thispath;
				picker.defaultExtension='jpg';
				picker.defaultString=file;
				picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterImages);
				if (picker.show()!=nsIFilePicker.returnCancel)
					var result="file:///"+picker.file.persistentDescriptor.replace(/\\/g,'/');
			}
			catch(e) { alert('error during local file access: '+e.toString()) }
		}
		else { // IE
			try { // XP only
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.Filter='All files|*.*|JPG files|*.jpg|GIF files|*.gif|PNG files|*.png|';
				s.FilterIndex=1; // default to JPG
				s.InitialDir=path;
				s.FileName=file;
				if (s.showOpen()) var result=s.FileName;
			}
			catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
		}
		return result;
	}
}
//}}}

//{{{
if (config.options.chkShowQuickEdit===undefined) config.options.chkShowQuickEdit=false;
config.commands.toggleQuickEdit = {
	hideReadOnly: true,
	getText: function() { return config.options.chkShowQuickEdit?'\u221Aquickedit':'quickedit'; },

	tooltip: 'show QuickEdit toolbar buttons',
	handler: function(event,src,title) {
		var opt='chkShowQuickEdit';
		config.options[opt]=!config.options[opt];
		config.macros.option.propagateOption(opt,"checked", config.options[opt],"input");
		if (config.options[opt]) saveOptionCookie(opt);	else removeCookie(opt);
		src.innerHTML=config.commands.toggleQuickEdit.getText();
		story.forEachTiddler(function(t,e){if (story.isDirty(t)) refreshElements(e);});
		return false;
	}
};
//}}}

// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
	// if click is in a sticky popup, ignore it so popup will remain visible
	var e = ev ? ev : window.event; var target = resolveTarget(e);
	var p=target; while (p) {
		if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
		else p=p.parentNode;
	}
	if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
		Popup.onDocumentClick(ev);
	return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
/*!
|''Name:''|NiceTaggingPlugin|
|''Description:''|Creates a nicer interface for adding and removing TiddlyWiki. Ideal for tiddly novices. |
|''Version:''|0.6.6|
|''Date:''|October 2010|
|''Source:''|http://svn.tiddlywiki.org/Trunk/contributors/JonRobson/plugins/niceTagging/plugins/NiceTaggingPlugin.js|
|''Author:''|Jon Robson|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.3|
|''Dependencies:''||
!Usage
{{{<<niceTagger tags>>}}} or {{{<<niceTagger field>>}}}
!!Additional Parameters
splitOn: <character>
valuesSource: <tiddler title>
textcase: <lower>
!StyleSheet
.tip {font-style:italic;font-weight:bold;}
input.dp-applied {width: 140px; float: left;}
.niceTagger input {width:200px; float:left;}
.deleter {color:red; font-weight:bold; padding:2px; cursor:pointer;}
.ac_results {padding: 0px;border: 1px solid black;background-color: white;overflow: hidden;z-index: 99999;}
.ac_results ul {width: 100%;list-style-position: outside;list-style: none;padding: 0;margin: 0;}
.ac_results li {margin: 0px;padding: 2px 5px;cursor: default;display: block;font: menu;font-size: 12px;line-height: 16px;overflow: hidden;}
.ac_loading {background: white url('indicator.gif') right center no-repeat;}
.niceTaggerAdder input {width:auto; display: inline;}
.ac_odd {background-color: #eee;}
.ac_over {background-color: #0A246A;color: white;}
*/
//{{{
(function($) {

config.shadowTiddlers.NiceTaggingStyle = store.getTiddlerText(tiddler.title + "##StyleSheet");
store.addNotification("NiceTaggingStyle", refreshStyles);

String.prototype.toJSON = function(){
	var namedprms = this.parseParams(null, null, true);
	var options ={};
	for(var i=0; i < namedprms.length;i++){ 
		var nameval = namedprms[i];
		if(nameval.name) {
			options[nameval.name] = nameval.value;
		}
	}
	return options;
};

var macro = config.macros.niceTagger = {
	lingo:{
		add: "add"
	},
	twtags: {},
	initialised:{},
	init: function(field){
		field = !field ? 'tags' : field;
		if(this.initialised[field]){
			if(field == 'tags') {
				var numTags = store.getTags();
				if(numTags.length == this.twtags[field].length) {
					return;
				}
			} else {
				return;
			}
		}
		var tiddlers= store.getTiddlers();
		macro.twtags[field] = [];
		var uniqueSuggestions = [];
		for(var i=0; i < tiddlers.length; i++){
			var tid = tiddlers[i];
			var values;
			if(field=='tags') {
				values = tid.tags;
			} else {
				values= tid.fields[field];
				values = values ? values : "";
				values = values.readBracketedList();
			}
			for(var j=0; j < values.length; j++){
				uniqueSuggestions.pushUnique(values[j]);
			}
			
		}
		macro.twtags[field] = uniqueSuggestions;
		this.initialised[field] =true;
	},
	save: function(title, field, listvalues, place, autosavechanges) {
		var tiddler = store.getTiddler(title);
		var tiddlerEl = story.getTiddler(title);
		var valueToSave;
		valueToSave = String.encodeTiddlyLinkList(listvalues);
		var el = $("[edit=%0]".format([field]), tiddlerEl);
		if(el.length === 0) {
			el = $("<input />").attr("type", "hidden").attr("edit", field).appendTo(place);
		}
		el.val(valueToSave);

		var dummy = new Tiddler(title);
		if(field == "tags") {
			dummy.tags = listvalues;
		} else {
			dummy.fields[field] = valueToSave;
		}
		return dummy;
	},
	refreshFieldDisplay: function(place, tiddler, field) {
		var container = $(".niceTagger", place);
		container.empty();
		var values;
		if(!field || field == 'tags') {
			values = tiddler.tags;
		} else {
			values = tiddler.fields[field] ? tiddler.fields[field].readBracketedList() : [];
		}
		for(var t = 0; t < values.length; t++){
			var tag = values[t];
			$("<span />").addClass("tag").text(tag).appendTo(container);
			$("<span />").addClass("deleter").text("x").attr("deletes", escape(tag)).appendTo(container);
		}

		$(".deleter", place).click(function(ev){
			var todelete = $(ev.target).attr("deletes");
			var newValues = [];
			for(var i = 0; i < values.length; i++){
				var value = values[i];
				if(escape(value) != todelete) {
					newValues.push(value);
				}
			}
			tiddler = macro.save(tiddler.title, field, newValues, place, tiddler.autosavechanges);
			macro.refreshFieldDisplay(place, tiddler, field);
		});
	},
	saveNewValue: function(tiddler, field, value, container, splitChar) {
		var tiddlerEl = story.getTiddler(tiddler.title);
		var editEl = $("[edit=%0]".format([field]), tiddlerEl);
		var adder = $(".niceTaggerAdder input[type=text]", container);
		var saveThis;
		if(editEl.length > 0) {
			saveThis = editEl.val() || "";
			saveThis = saveThis.readBracketedList();
		} else {
			if(field == 'tags') {
				saveThis = tiddler.tags;
			} else {
				var val = tiddler.fields[field];
				val = val ? val : "";
				saveThis = val.readBracketedList();
			}
		}
		value = typeof(value) == 'string' ? value.trim() : value;
		if(value.length === 0) {
			return;
		}
		var newValues;
		if(splitChar && value && value.indexOf(splitChar) != -1){
			newValues = value.split(splitChar);
		} else {
			newValues = [value];
		}
		for(var i = 0; i < newValues.length;i++){
			var svalue = newValues[i];
			saveThis.pushUnique(svalue);
		}
		tiddler = macro.save(tiddler.title, field, saveThis, container, tiddler.autosavechanges);

		macro.refreshFieldDisplay(container, tiddler, field);
		$(adder).val("");
	},
	getSuggestionsFromTiddler: function(srcTiddler, textcase){
		var suggestions = [];
		if(srcTiddler){
			var src = store.getTiddler(srcTiddler);
			var text = src.text;
			var tempdiv = document.createElement("div");
			wikify(text, tempdiv, null, src);
			var html = $(tempdiv).html();
			suggestions = html.split(/<br\/?>/gi);
		}
		var finalSuggestions = [];
		for(var i=0; i < suggestions.length; i++){
			var val = suggestions[i].trim();
			if(textcase && textcase == "lower") {
				val = val.toLowerCase();
			}
			finalSuggestions.pushUnique(val);
		}
		return finalSuggestions;
	},
	removeFromList: function(list,removeList){
		var uniqueSuggestions = [];
		for(var i=0; i < list.length; i++){
			var s =list[i];
			if(s && typeof(s) == 'string'){
				if(uniqueSuggestions.indexOf(s) ==-1 && removeList.indexOf(s) ==-1){
					uniqueSuggestions.push(s);
				}
			}
		}
		return uniqueSuggestions;
	},
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var options = paramString.toJSON();
		var args = paramString.parseParams("anon")[0];
		if(options.autoSaveChanges) {
			tiddler.autosavechanges = true;
		}
		if(!options.field) {
			options.field = args.anon ? args.anon[0] : "tags";
		}
		this.init(options.field);
		var container = $("<div />").addClass("niceTaggerContainer").attr("field", options.field).
			appendTo(place)[0];
		var displayer = $("<div />").addClass("niceTagger").appendTo(container)[0];
		macro.refreshFieldDisplay(container, tiddler, options.field);
		var tagplace = $("<div />").addClass("niceTaggerAdder").appendTo(container)[0];
		var splitChar = options.splitOn;
		var adder;

		if($().autocomplete){
			params = paramString.parseParams("anon", null, true, false, false);
			var textcase = getParam(params, "case");
			var srcTiddler = getParam(params, "valuesSource");
			var suggestions;
			if(srcTiddler) {
				suggestions = macro.getSuggestionsFromTiddler(srcTiddler, textcase);
			} else {
				suggestions = [];
			}
			var tagsoff = getParam(params,"nostoretags");
			if(!tagsoff) {
				suggestions = suggestions.concat(macro.twtags[options.field]);
			}

			var ignoreList = paramString.parseParams("exclude", null, true, false, true);
			if(ignoreList && ignoreList[0] && ignoreList[0].exclude) {
				ignoreList = ignoreList[0].exclude;
			} else {
				ignoreList = ["excludeList"];
			}
			suggestions = macro.removeFromList(suggestions, ignoreList);

			var addtaghandler = function(v) {
				macro.saveNewValue(tiddler, options.field, $(v).val(), container, splitChar);
			};
			$("<input type='text' name=\""+options.field+"\" value=\"\"/>").autocomplete(suggestions,{ matchContains: true, selectFirst:false }).result(addtaghandler).appendTo(tagplace);
			adder = $("input", tagplace)[0];
		} else {
			adder = document.createElement("input");
			tagplace.appendChild(adder);
		}
		$(adder).keypress(function (ev) {
			ev.stopPropagation();
			if(ev.which == 13){
				var results = $(".ac_over",".ac_results"); //is anything highlighted in autocomplete plugin ?
				var value;
				if(results.length === 0) {
					value = $(ev.target).val();
				} else {
					value = $(results[0]).val();
				}
				macro.saveNewValue(tiddler, options.field, value, container, splitChar);
			}
		});
		var addbutton = document.createElement("input");
		addbutton.type = "button";
		addbutton.value = macro.lingo.add;
		addbutton.className = "adder";
		tagplace.appendChild(addbutton);
		$(addbutton).click(function(e){
			var val = $(adder).val() || "";
			macro.saveNewValue(tiddler, options.field, val, container, splitChar);
		});
	}	
};

_setTiddlerField = Story.prototype.setTiddlerField;
Story.prototype.setTiddlerField = function(title, value, mode, field) {
	var tiddler = store.getTiddler(title) || new Tiddler(title);
	var container = $(".niceTaggerContainer[field=%0]".format([field]), 
		story.getTiddler(title));
	if(container.length > 0) {
		macro.saveNewValue(tiddler, field, value, container[0]);
	} else {
		_setTiddlerField.apply(this, arguments);
	}
	
};
})(jQuery); //end alias
//}}}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="301 225 48 52"
width="30" height="30">
<g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
	<g>
		<path d="M 333.00003 234 L 306 258.75003 L 301.5 270 L 312.75 265.50003 L 339.75 240.74998 Z M 337.5 229.50002 
		L 335.24988 231.75008 L 341.99997 238.50003 L 344.24997 236.24995 Z M 342 225.00003 L 339.74988 227.25009 
		L 346.5 234.00005 L 348.75 231.75003 Z M 301.5 273.9719 C 301.5 273.9719 309.59888 277.99927 317.70013 273.97183 
		C 325.80066 269.94437 341.99997 276.65686 341.99997 276.65686 L 341.99997 273.97195 
		C 341.99997 273.97195 325.80014 267.2594 317.70013 271.28687 C 309.6 275.31451 301.5 271.28683 301.5 271.28683 Z" 
		fill="#101010" class="glyph"/>
	</g>
</g>
</svg>
健康知識告訴我們人體不需要攝取太多肉類,環保生態書籍則告訴我們由於生產肉類,人類正在耗竭大量的農漁業資源。

嗯……少吃肉,多吃豆類嗎?
/%
|Name|QuickEdit_replace|
|Source|http://www.TiddlyTools.com/#QuickEdit_replace|
|Version|2.4.4|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - find/replace selected text with replacement text|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="find/replace selected text with replacement text"
onclick="var here=story.findContainingTiddler(this); if (!here) return false;
	var e=config.quickEdit.getField(here);
	var s=config.quickEdit.getSelection(e); 
	var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
	var t=createTiddlyElement(p,'input'); t.onfocus=function(){this.select()};
	t.value=s.length?s:'enter target text';
	var r=createTiddlyElement(p,'input'); r.onfocus=function(){this.select()};
	r.value='enter replacement text';
	var tid=here.getAttribute('tiddler');
	var b=createTiddlyElement(p,'button',null,null,'?',{tid:tid});
	b.style.width='2em';
	b.title='FIND/FIND NEXT target text';
	b.onclick=function(ev) { /* FIND */
		var e=story.getTiddlerField(this.getAttribute('tid'),'text');
		if (!e||e.getAttribute('edit')!='text') return;
		var t=this.previousSibling.previousSibling;
		var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		e.focus();
		if (e.setSelectionRange) { /* MOZ */
			var newstart=e.value.indexOf(tv,e.selectionStart+1);
			if (newstart==-1) newstart=e.value.indexOf(tv); /* wrap around */
			if (newstart==-1) { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); return; }
			e.setSelectionRange(newstart,newstart+tv.length);
			var linecount=e.value.split('\n').length;
			var thisline=e.value.substr(0,e.selectionStart).split('\n').length;
			e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);
		} else if (document.selection) { /* IE */
			var range=document.selection.createRange();
			if(range.parentElement()==e) {
				range.collapse(false);
				var found=false; try{found=range.findText(v,e.value.length,4)}catch(e){}
				if (found) range.select();
				else { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); }
			}
		}
	};
	b=createTiddlyElement(p,'button',null,null,'=',{tid:tid});
	b.style.width='2em';
	b.title='REPLACE selected text';
	b.onclick=function(ev) { /* REPLACE */
		var e=story.getTiddlerField(this.getAttribute('tid'),'text');
		if (!e||e.getAttribute('edit')!='text') return;
		var t=this.previousSibling.previousSibling.previousSibling;
		var r=this.previousSibling.previousSibling;
		var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		if (   (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
		    || (document.selection && document.selection.createRange().text==''))
			this.previousSibling.click(); /* no selection... do FIND first */
		if (   (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
		    || (document.selection && document.selection.createRange().text==''))
			{ t.focus(); return; } /* still no selection... goto target input */
		e.focus(); replaceSelection(e,rv);
	};
	b=createTiddlyElement(p,'button',null,null,'+',{tid:tid});
	b.style.width='2em';
	b.title='REPLACE selected text AND FIND NEXT target text';
	b.onclick=function(ev) { /* REPLACE and FIND NEXT */
		this.previousSibling.click();
		this.previousSibling.previousSibling.click();
	};
	b=createTiddlyElement(p,'button',null,null,'!',{tid:tid});
	b.style.width='2em';
	b.title='REPLACE ALL occurrences of target text';
	b.onclick=function(ev) { /* REPLACE ALL */
		var e=story.getTiddlerField(this.getAttribute('tid'),'text');
		if (!e||e.getAttribute('edit')!='text') return;
		var t=this.previousSibling.previousSibling.previousSibling.previousSibling.previousSibling;
		var r=this.previousSibling.previousSibling.previousSibling.previousSibling;
		var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		if (!tv.length) { alert('Please enter the target text'); t.focus(); return; }
		var m='This will replace all occurrences of:\n\n'+tv+'\n\nwith:\n\n'+rv+'\n\nAre you sure?';
		if (!confirm(m)) { r.focus(); r.select(); return; }
		e.value=e.value.replace(new RegExp(tv.escapeRegExp(),'gm'),rv);
		e.focus(); e.select(); Popup.remove();
	};
	Popup.show();
	if (!s.length) {t.focus();t.select()} else {r.focus();r.select()}
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>replace</a></html>
|''Name''|BookmarkletTheme|
|''Description''|A minimal theme designed to be used with the bookmarklet plugin|
|''PageTemplate''|##PageTemplate|
|''StyleSheet''|##StyleSheet|

!PageTemplate
<!--{{{-->
<div class='topMenu'>
    <ul class='topMenuList'>
    <li class='topMenuItem'><span macro='newTiddler'></span></li>
    <li  id="searchMenuItem" class='topMenuItem'><span macro='search'></span></li>
    </ul>
</div>
<div class='displayHolder'>
    <div id='displayArea'>
        <div id='messageArea'></div>
        <div id='tiddlerDisplay'></div>
    </div>
</div>
<!--}}}-->

!StyleSheet
/*{{{*/
#displayArea {
    margin: 0px 0px 0px 0px;
    display: block;
    max-width: 95%;
    overflow: hidden;
}

.displayHolder {
    position: fixed !important;
    position: absolute;
    overflow-y: auto;
    top: 2.5em;
    bottom: 0em;
    z-index: 1;
    max-width: 100%;
}

#mainMenu {
    padding: 0px;
    margin-bottom: 2px;
    text-align: left;
    width: auto;
}

#sidebarTabs, .tabContent {
    background-color: #B0C2ED;
    left: 0;
}

#sidebar {
    left: -60px;
}

#sidebar ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
}

#sidebar ul li {
    list-style: none outside none;
}

#sidebar ul li.listLink {
    margin-left: 0.75em;
}

.topMenu {
    display: block;
    height: 2em;
    position: fixed !important;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    background-color: #6D94ED;
    padding-bottom: 5px;
    padding-top: 5px;
    padding-left: 2px;
    padding-right: 2px;
    border-bottom: 1px solid black;
    z-index: 10;
}

body {
    position: absolute;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
}

#contentWrapper {
    height: 100%;
    width: 100%;
}

#backstageButton, #backstageArea {
    display: none !important;
}

.topMenu ul.topMenuList {
    list-style-type: none;
    padding-left: 0px;
    width: 100%;
    display: block;
    position: absolute;
    margin-top: 0;
}

.topMenu ul.topMenuList li.topMenuItem {

    position: relative;
    float: left;
    padding: 5px;
    display: inline-block;
}

.topMenu ul.topMenuList li.topMenuItem div {
    visibility: hidden;
    position: absolute;
    padding: 10px 5px 5px 5px;
    border: 1px solid black !important;
}

.topMenu .button {
    cursor: pointer;
    border: 0;
    padding-left: 2px;
    padding-right: 2px;
}

.topMenu .button:hover {
    background-color: #FFCC65;
    border-color: #FFAA00;
}

.topMenu ul.topMenuList li.topMenuItem:hover {
    background-color: #FFCC65;
    border-color: #FFAA00;
}

.topMenu ul.topMenuList li.topMenuItem:hover div {
    visibility: visible;
}

.topMenu ul.topMenuList li.topMenuItem div {
    background-color: #B0C2ED !important;
}

.footerMenu {
    background-color: #6D94ED;
    padding-bottom: 5px;
    padding-top: 5px;
    border-top: 1px solid black;
    height: 2em;
    position: fixed !important;
    position: absolute;
    bottom: 0;
    padding-left: 2px;
    padding-right: 2px;
    width: 100%;
    z-index: 10;
}

.footerHolder {
    width: 98%;
}

#searchMenuItem {
    float: right;
    padding: 0;
    margin: 0 1em 0 0;
}
/*}}}*/
<!--{{{-->
<!--
|Name|EditSectionTemplate|
|Source||
|Version||
|Author||
|License|http://www.TiddlyTools.com/#LegalStatements|
|Type|template|
|Requires|EditSectionPlugin|
|Description|popup editor form template used by EditSectionPlugin|
-->
<form action='javascript:;' style="white-space:nowrap">
<input type="hidden" name="title" value="">
<input type="hidden" name="section" value="">
<input type="text" name="newsection" value="" autocomplete="off" style="width:61%"
	onchange="return config.macros.editSection.changed(this,event);">
<input type=button value="儲存" style="width:12%"
	onclick="return config.macros.editSection.saveForm(this,event)">
<input type=button value="取消" style="width:12%"
	onclick="return config.macros.editSection.cancel(this,event)">
<input type=button value="刪除" style="width:12%"
	onclick="return config.macros.editSection.remove(this,event)">
<div macro="tiddler QuickEditToolbar"></div>
<textarea name="content" rows="15" cols="80" autocomplete="off"
	onchange="return config.macros.editSection.changed(this,event)"></textarea>
</form>
<!--}}}-->
!!!!Definitions
{{{
\def\Set#1{{\left\lbrace {#1} \right\rbrace}}
\def\set#1:#2{\Set{{#1} \colon {#2}}}
\def\singleton{\Set}
\def\emptySet{\emptyset}
}}}

!!!!Notes
{{{\Set}}} is the raw form of set definition and is suitable for defining finite sets and explicit infinite sets.  {{{\set}}} is for the usual conditional way of defining a set.

!!!!Examples
{{{
\Set{a, b, c}
\Set{0, 1, 2, \dots}
\set{a_n}:{n \in \omega}
\set{\sum_{k = r}^{n} k^2}:{r \le n \in \naturals}
\singleton{x}
\emptySet
}}}
\[
\Set{a, b, c}\qquad
\Set{0, 1, 2, \dots}\qquad
\set{a_n}:{n \in \omega}\qquad
\set{\sum_{k = r}^{n} k^2}:{r \le n \in \naturals}\qquad
\singleton{x}\qquad
\emptySet
\]
----

!!!!Definitions
{{{
\def\Sequence#1{{\left\langle {#1} \right\rangle}}
\def\sequence#1:#2{\Sequence{{#1} \colon {#2}}}
\def\tuple{\parentheses}
\def\emptyTuple{\tuple{}}
}}}

!!!!Notes
{{{\Sequence}}} is the raw form of sequence definition and is suitable for defining finite sequences and explicit infinite sequences.  {{{\sequence}}} is for the usual conditional way of defining a sequence.

!!!!Examples
{{{
\Sequence{a_0, a_1, a_2, \dots}
\sequence{{a_n}^\half}:{n \in \omega}
\tuple{x, y}
\emptyTuple
}}}
\[
\Sequence{a_0, a_1, a_2, \dots}\qquad
\sequence{{a_n}^\half}:{n \in \omega}\qquad
\tuple{x, y}\qquad
\emptyTuple
\]
----

!!!!Definitions
{{{
\def\family#1:#2{{\parentheses{#1}_{#2}}}
}}}

!!!!Notes
{{{\family}}} is for an indexed collection of objects.

!!!!Examples
{{{
\family{A_i}:{i \in I}
}}}
\[
\family{A_i}:{i \in I}
\]
----

!!!!Definitions
{{{
\def\subset{\subseteq}
\def\superset{\supseteq}
\def\union{\cup}
\def\Union{\bigcup}
\def\intersect{\cap}
\def\Intersection{\bigcap}
\def\setMinus{\setminus}
\def\cross{\times}
\def\product{\prod}
}}}

!!!!Notes
The standard $\LaTeX$ {{{\subset}}} symbol can be accessed by {{{\LaTeXsubset}}}.

!!!!Examples
{{{
Y \subset X
X \superset Y
A \union B
\Union_{i = 0}^{\infinity} C_i
A \intersect B
\Intersection_{n \in \omega} C_n
A \setMinus B
X \cross Y
\product_{i = 0}^{\infinity} X_i
}}}
\[
Y \subset X\qquad
X \superset Y\qquad
A \union B\qquad
\Union_{i = 0}^{\infinity} C_i\qquad
A \intersect B\qquad
\Intersection_{n \in \omega} C_n\qquad
A \setMinus B\qquad
X \cross Y\qquad
\product_{i = 0}^{\infinity} X_i
\]
----

!!!!Definitions
{{{
\def\powerSet#1{{\script{P}\of{#1}}}
\def\functionSpace#1#2{{{#2}^{#1}}}
\def\cardinality#1{{\left\lvert {#1} \right\rvert}}
\def\isEmpty{= \emptySet}
\def\isNonempty{\not= \emptySet}
}}}

!!!!Notes
{{{\functionSpace{X}{Y} }}} is intended to denote the set of all functions which map $X$ to $Y$.  {{{\isEmpty}}} and {{{\inNonempty}}} are only made available for readability and should only be used for this purpose.

!!!!Examples
{{{
\powerSet{X}
\functionSpace{\omega}{2}
\cardinality{X}
A \isEmpty
B \isNonempty
}}}
\[
\powerSet{X}\qquad
\functionSpace{\omega}{2}\qquad
\cardinality{X}\qquad
A \isEmpty\qquad
B \isNonempty
\]
----
想想,以後用到的機會一定越來越多,如果學起來的話應該可以幫助很多人。

可是,現在每天除了上班、拼基本信仰(禱告、讀經)、拼傳道照顧生命之外,時間好像真的不多了啊……主唷~What should I do?
我目前所屬教會附近,六張犁一帶最健康美味,而且極富人情味的早餐店~
----
{{dateTag{20101216}}} 今晨去早餐時跟店長及店長娘開心寒喧,我一直覺得店長戴螃蟹帽很可愛,一直笑;店長娘拍我戴他們裝可愛帽子的樣子,晚上應該就會出現在他們的 Facebook 粉絲團上了,好開心 <<:D>>

沒錯!所以這家名店及我們的好鄰居竟然有 FB 粉絲團,真是太 high 了,呵呵呵~有空再慢慢介紹這家店有哪些「黏度」讓人會一直想去~
/*{{{*/
.hidden { display: none; }
.crystal { opacity: 0; }

p, .p { text-indent: 2em; margin: 0.5em 0 0.5em 0; }
p+br, .p + br { display: none; }
p *, .p * { text-indent: 0; }
p p, .p .p, p .p, .p p { text-indent: 2em; }
.sliderPanel, .floatingPanel { text-indent: 0; }
.sliderPanel {text-align: left;}

#mainMenu .button { border: none; }

.previewer .viewer { font-style: normal; }

.viewer .popupbutton, .viewer .button {
	border: none;
	border-bottom: 2px solid [[ColorPalette::TertiaryMid]];
	border-right: 2px solid [[ColorPalette::TertiaryMid]];
	background-color: [[ColorPalette::TertiaryLight]];
}
/*20130817-------*/
	.viewer .expopbtn {
		border: none;
		border-bottom: 2px solid [[ColorPalette::SecondaryMid]];
		border-right: 2px solid [[ColorPalette::SecondaryMid]];
		background-color: [[ColorPalette::SecondaryLight]];
		margin: 0px 0.25em;
		padding: 0px 0.25em;
		color: [[ColorPalette::SecondaryDark]];
	}
	.viewer .expopbtn:after {content: ""; display: inline-block; background: url(ExternalLinkIcon), url(圖/ExternalLinkIcon); width: 14px; height: 14px; margin-left: 0.25em;}
	.viewer .pinable:before {content: ""; display: inline-block; background: url(PushPin), url(圖/PushPin); width: 16px; height: 16px;}
/*-------*/

body { font-family: Georgia,DFPLiSong-Lt,Songti TC,DFKai-sb,標楷體,serif; }
.heading, .header {font-family: Lucida Grande,Trebuchet MS,helvetica,arial,Heiti TC,Wenquanyi Microhei,Microsoft JhengHei,sans-serif; }
input {font-family: monospace;}

.floatingPanel, .popup {
	background-color:[[ColorPalette::SecondaryPale]];
	border-top: 0;
	border-left: 0;
	border-bottom: 5px solid [[ColorPalette::TertiaryMid]];
	border-right: 5px solid [[ColorPalette::TertiaryMid]];
	opacity: 0.91;
	border-radius: 10px;
	z-index: 15;
}
.floatingPanel th, .sliderPanel th {text-align: center;}
/*.sliderPanel[style*="block"]+br {display: none;}*//*20131022 拿掉*/

/*tbody caption {width: 300%;}*//* 修改 MediaWikiTableFormatterPlugin 後不再需要這個奇怪的樣式了,感謝 神!*/

.popup li a { display: inline; }

.miniTag {font-size: smaller !important;}

.tiddlerCustomFields {text-align: center;}

important, .imp {font-size: 150%; background: [[ColorPalette::SecondaryPale]]; border: 1px solid [[ColorPalette::SecondaryLight]]; line-height: 150%; text-shadow: 0.05em 0.05em 0.05em;}
th important, th .imp {color: rgb(28, 12, 21);}

h4, h5, h6 {margin-bottom: 0.3em;}

.siteTitle {text-shadow: 0.05em 0.05em 0.5em;}
.title {text-shadow: 0.05em 0.05em 0.05em grey;}
h1, h2, h3, h4, h5, h6 {text-shadow: 0.05em 0.05em 0.02em grey;}

#menuBar {overflow: inherit; min-height: 1.2em;} /*這樣就可以使用 NestedSliders 的 floating panel 了!*/
#menuBar .floatingPanel {
	background: [[ColorPalette::PrimaryLight]];
	border-radius: 0;
	border-color: [[ColorPalette::PrimaryMid]];
	border-style: solid;
	box-shadow: 3px 5px 5px 2px rgba(28, 12, 21, 0.5);
	border-width: 1px;
	opacity: 0.96;
}
#menuBar .floatingPanel a {
	padding: 0;
	margin-right: 0;
}
/*}}}*/
/*{{{*/
/* kbd style courtesy http://inkscape.org/ */
.kbd {
	border: 3px outset #F3F3F3;
	background-color: #F3F3F3;
	padding: 0px 2px;
	cursor: default;
}
.kbd:hover {
	border: 3px inset #F3F3F3;
}
/*}}}*/
*4-3-3
**[[Cruyff|https://www.wikiwand.com/en/Johan_Cruyff]]
*[[tiki-taka|https://www.wikiwand.com/zh-tw/Tiki-taka]]
**與 4-3-3 陣形的關係
***[[利物浦小編:Tiki-taka戰術介紹 | 利物浦 You Will Never Walk Alone | 球迷世界 - FanPiece|http://football.fanpiece.com/ynwaliverpool/%E5%88%A9%E7%89%A9%E6%B5%A6%E5%B0%8F%E7%B7%A8-tiki-taka%E6%88%B0%E8%A1%93%E4%BB%8B%E7%B4%B9-c1089866.html]]
***[[【深度文】那些曾經震懾球壇的陣型 - 新浪足球|http://m.soccer.sina.com.hk/news/article/5237334/86/20151117]]
**未必與陣形有關
***[[利迷:羅渣士與Tiki-Taka(Big 4球迷有Say - 雅虎體育香港)|https://hk.sports.yahoo.com/columns/big-4%E7%90%83%E8%BF%B7%E6%9C%89say/%E5%88%A9%E8%BF%B7-%E7%BE%85%E6%B8%A3%E5%A3%AB%E8%88%87tiki-taka-153057762.html]]
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''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.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2010.12.15 1.9.6 allow (but ignore) type="..." syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 6, date: new Date(2010,12,15)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: type=\\\"[^\\\"]*\\\")?(?: src=\\\"([^\\\"]*)\\\")?(?: label=\\\"([^\\\"]*)\\\")?(?: title=\\\"([^\\\"]*)\\\")?(?: key=\\\"([^\\\"]*)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // external script library
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // inline code
				if (show) // display source in tiddler
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create 'onclick' command link
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run script immediately
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
					try	 { var out=eval(c); }
					catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
{{{
<tabs mytabs>
<tab tab1>
This is my first tab
</tab>
<tab tab2>
This is my second tab
</tab>
<tab tab3>
This is my third tab
with more than one line
</tab>
<tab tab4>
</tab>
</tabs>
}}}

<tabs mytabs>
<tab tab1>
This is my first tab
</tab>
<tab tab2>
This is my second tab
</tab>
<tab tab3>
This is my third tab
with more than one line
</tab>
<tab tab4>
</tab>
</tabs>

Note: you can space out the tabs to make editing easier, the linebreaks between tabs will be ignored:
{{{
<tabs mytabs>

<tab tab1>
This is my first tab
</tab>

<tab tab2>
This is my second tab
</tab>

<tab tab3>
This is my third tab
with more than one line
</tab>

<tab tab4>
</tab>

</tabs>
}}}
剛剛看 PTT 皇馬板,才知道上週西班牙[[德比]],皇馬又 0:5 大敗虧輸給巴塞隆納……(怪不得 MSN 上足球相關朋友的暱稱那麼開心……)

這支曾是我最喜愛,並且充滿榮耀的球隊,還要沈淪到幾時呢?

也是前一陣子才知道 Raul 已經被賣去德甲(默……)爛主席,活該大敗!
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90IEQELNQ4kqbUAAAI6SURBVDjLndBLSNRhFMbh3zeOTuiYjuY4XtAUEVukbSKVolV0gVKKiohoEQRt2kv3oqCgXLQI2rjIVZsyXEgQbaNNYgslS3O8Nc44zozO5X/5vtNKyZiMeldncd4HzlHkSfz8WehuRwZeNWaiqeAKYiUxCwdmvsXe1DeRFuHc/HcAPPmA3MgQ8u5Di7H0qIN8dGHUMYwN1TfdOjE3jY1s7OYFapdzkFzrdLNWuQXkEGUjIVvk9kBtw4uXicWtAQB3LjalKyvIOi6WCJaIshHJiTlzyF/VuiUw37KLdCYzlvwRmVZNDTheL45HiY0oWwQHkbzAcsceAOq+jpP2qMpFrYOzM2FcMWKDsgANl6ec1OR6x/sroPxFvnhnZ5deTu2P2M6xlJiSWceWWGZN+Twcvx6LDgP0h+qAtc1AfN9eryoPvFY+3xHHcUlHVkgZI1kxyjJ68l48PgzwrKaeK4tzeZ5YVrpTFZccVP5SSWtDEmHNaJXRmsrCopqHwVAFsKm8GdAYSSS0JOKqrMiLH1g1LrYxosGf02Yw38M3AFVYHNYpa8yeCJNbSkh5QQEdvhJqfD4lIAaab+6oKvwjEBgZdk2g/OhqKDQeNaJiYtAIxZ4CcUQUSj7fjUWd34GC9WGisZVsd5f1tvfwoJWMn5aVRDTpOjqLJF3F+xtLkVNbntA284W2p/2Y8FzPp5bm+8HF8G4TDHTI9m3tfT8WegHuVFXz1zy41vfowsmesudPHvNfuXrpYvW/7P8EcCsjokWtCuUAAAAASUVORK5CYII=
|~ViewToolbar|+collapseTiddler collapseOthers pinTiddler unpinTiddler fields tagSearch jump editTiddler cloneTiddler > copyTiddler refreshTiddler changeToPublic changeToPrivate revisions syncing permalink references closeOthers < closeTiddler|
|~CollapsedToolbar|+expandTiddler collapseOthers pinTiddler unpinTiddler fields tagSearch jump editTiddler cloneTiddler > copyTiddler refreshTiddler changeToPublic changeToPrivate revisions syncing permalink references closeOthers < closeTiddler|
|~CollapsedTitle|expandTiddler|
|~EditToolbar|collapseOthers pinTiddler unpinTiddler toggleQuickEdit jump +saveTiddler saveDraft -cancelTiddler deleteTiddler|
|~RevisionToolbar|> fields revert|
*[[從孩子3歲到4歲,爸爸請成為這樣的超人!/教養/學前兒/親子天下-教養-學前兒|https://www.parenting.com.tw/article/5068508-%E5%BE%9E%E5%AD%A9%E5%AD%903%E6%AD%B2%E5%88%B04%E6%AD%B2%EF%BC%8C%E7%88%B8%E7%88%B8%E8%AB%8B%E6%88%90%E7%82%BA%E9%80%99%E6%A8%A3%E7%9A%84%E8%B6%85%E4%BA%BA%EF%BC%81/]]
$(document).ready(function() {
    // leave if there's no tiddler to work with
    var wholething = $('#text-html.section');
    if (wholething.length == 0) return;

    var place = $("#container").length > 0 ? $("#container")[0] : document.body;
    var space = window.location.host.split(".")[0]
    var title = $("#title").text();
    var bagInfo = $('.bag').first().text().split(/_/);

    // don't show edit link if tiddler is not in this space
    if (bagInfo[0] !== space) return;

    function addLink() {
        $("<a id='editLink' />").attr('href'
            , '/edit#' + encodeURIComponent(title))
            .text("edit tiddler").prependTo(place);
    }
    
    // add edit link if user is member
    if (window.tiddlyweb && tiddlyweb.status) {
        if (tiddlyweb.status.space.recipe.match(/_private$/)) {
            addLink();
        }
    } else {
        $.ajax({ url: "/spaces/" + space + "/members",
            success: function(r) {
                if(r) {
                    addLink();
                }
            }
        });
    }
});
現在人在往臺中的客運上,明天聯合主日禮拜聖歌隊要代表獻詩的歌曲以及奉獻頌都屬於讚頌歌類,剛好也都重覆三段。旋律是非常熟,偏偏七年來從來沒有背清楚三段詞各有什麼不同,因為實在都很像 <<XD>> 剛都在拼命找線索比較三段詞的異同,另外再配合聯想法及摘要法,想辦法讓自己記得哪一段是要唱什麼,哪一句後面又是接什麼免得亂接。喔主呦~真怕明天還是緊張唱錯。<<:s>>

一定有人平常早就對這兩首歌滾瓜爛熟了,不過忝為教會聖歌隊團員及前歌手的我平常還是比較少唱讚頌歌,只愛唱流行歌類的曲子。我悔啊!今後要好好用功了!

順帶一提,我非常懷疑我現在坐到的客運(暫不透露是哪家)班車和我上上週回臺北時坐到傳動軸壞掉拋錨的是同一台車……因為這台車也是一樣不太敢催油、加速的話就有明顯震動聲的感覺……我想主一定是想告訴我「要是你選擇客運或鐵路前有和我討論就好了」吧……如果真的等一下再度拋錨的話就好笑了 <<XD>>
R0lGODlhEwATAPf/AAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDcwKbK8Co/qio//ypfACpfVSpfqipf/yp/ACp/VSp/qip//yqfACqfVSqfqiqf/yq/ACq/VSq/qiq//yrfACrfVSrfqirf/yr/ACr/VSr/qir//1UAAFUAVVUAqlUA/1UfAFUfVVUfqlUf/1U/AFU/VVU/qlU//1VfAFVfVVVfqlVf/1V/AFV/VVV/qlV//1WfAFWfVVWfqlWf/1W/AFW/VVW/qlW//1XfAFXfVVXfqlXf/1X/AFX/VVX/qlX//38AAH8AVX8Aqn8A/38fAH8fVX8fqn8f/38/AH8/VX8/qn8//39fAH9fVX9fqn9f/39/AH9/VX9/qn9//3+fAH+fVX+fqn+f/3+/AH+/VX+/qn+//3/fAH/fVX/fqn/f/3//AH//VX//qn///6oAAKoAVaoAqqoA/6ofAKofVaofqqof/6o/AKo/Vao/qqo//6pfAKpfVapfqqpf/6p/AKp/Vap/qqp//6qfAKqfVaqfqqqf/6q/AKq/Vaq/qqq//6rfAKrfVarfqqrf/6r/AKr/Var/qqr//9QAANQAVdQAqtQA/9QfANQfVdQfqtQf/9Q/ANQ/VdQ/qtQ//9RfANRfVdRfqtRf/9R/ANR/VdR/qtR//9SfANSfVdSfqtSf/9S/ANS/VdS/qtS//9TfANTfVdTfqtTf/9T/ANT/VdT/qtT///8AVf8Aqv8fAP8fVf8fqv8f//8/AP8/Vf8/qv8///9fAP9fVf9fqv9f//9/AP9/Vf9/qv9///+fAP+fVf+fqv+f//+/AP+/Vf+/qv+////fAP/fVf/fqv/f////Vf//qszM///M/zP//2b//5n//8z//wB/AAB/VQB/qgB//wCfAACfVQCfqgCf/wC/AAC/VQC/qgC//wDfAADfVQDfqgDf/wD/VQD/qioAACoAVSoAqioA/yofACofVSofqiof/yo/ACo/Vf/78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH+HUJ1aWx0IHdpdGggR0lGIE1vdmllIEdlYXIgMy4wACH5BAEKAP8ALAAAAAATABMAAAiQAP8JHEiwoEGCeQQm/FfnYMFQdej8ykMHj0OCzHx1GoapUydVFwUyy7QxE51QCEL+68SpU6iOH1WG+tUJU6ZhdVKqhEMxDxxDOlUiiNEHqEqCEVStOvqvQY1/MYJePFCjRowINaRerBEhaQOtF4caynrgANN/CKx2jWD26IGxMWqAdIuggSGjR3OgBRuS77+AADs=
/***
|''Name''|LineBreakHack|
|''Description''|formatter modifying TiddlyWiki's handling of line breaks, in front and after headings, lists and quots|
|''Author:''|Pietsch Mario|
|''Version''|0.3.1|
|''Status''|stable|
|''Source''|http://line-break-hack.tiddlyspace.com/#LineBreakHack|
|''Documentation''|http://line-break-hack-info.tiddlyspace.com/#LineBreakHackInfo|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|

!!!Description
<<<
This formatter modifies the way line breaks in ~TiddlyWiki markup are rendered;
Linebreaks for headings, list, quotes are changed.
<<<

!!! Revision History
<<<

!!!! V0.3.1 (2012-01-17)
* Removed the "paragraph" lineBreak because it creates quirks with inter TiddlySpace transclusion. 
* Two linebreaks now produce two lines again.

!!!!V0.3 (2010-09-29)
*Two linebreaks now produce one empty line. 
**Have a look at {{{lineBreak.match}}}
<<<

***/
//{{{
(function(formatters) { //# set up alias

	// modify line-break formatter to find more than one \n
//	var lineBreak = formatters[formatters.findByField("name", "lineBreak")];
//	lineBreak.match = "\\n+|<br ?/?>";
//	lineBreak.match = "\\n{1,2}|<br ?/?>";


	//remove one line break before heading.
	var heading = formatters[formatters.findByField("name", "heading")];
		merge( heading, {termRegExp: /(\n+)/mg});

		heading.match = "^\n?!{1,6}";
		heading.handler = function(w) {
			if (w.matchText[0]=='\n') w.matchLength = w.matchLength - 1;
			w.subWikifyTerm(createTiddlyElement(w.output,"h" + w.matchLength), this.termRegExp);
		};
	
	for (var i=0; i<formatters.length; i++) {
		if (formatters[i].name == "list") {
			merge( formatters[i], {termRegExp: /(\n{1,2})/mg});
		}

		if (formatters[i].name == "quoteByBlock") {
			merge( formatters[i], {termRegExp: /(^<<<(\n{1,2}|$))/mg});
		}

		if (formatters[i].name == "quoteByLine") {
			merge( formatters[i], {termRegExp: /(\n{1,2})/mg});
			break;
		} // if ..
	} // for ..


})(config.formatters); //# end of alias
//}}}
{{dateTag{6:53}}} 好香喔!漢奎又在煮早餐還有午餐的便當了,今天是水餃和客家小炒,真是太 over 了 <<XD>>^^(不過另外空氣中還雜有瑋中哥庫存茶葉蛋的味道在鬧場 <<挑眉>>)^^

不過呢~我也有從[[拉亞漢堡]]買回來的早餐~即使這兩天是下著冷冷大雨的天氣,也可以在家做事、聽[[音樂|RGO Radio]],享受晨更後、上班前的美好時光~今晨原本想回家拿了筆電充電器就要再出門去教會的,免得一回家就懶懶不動或補眠。不過後來想想如果能把家裡經營得更有氣氛的話,這個空間應該也要/可以像教會一樣有耶穌同在,而且讓人很有力量~所以或許會這樣做看看囉~畢竟家不只是用來睡覺的旅館嘛~每個空間都是 神賜下的啊~

不過,能夠這麼喜悅,先決條件還是:''要喚醒清晨並與主見面及對話!''<<;)>>
「[[两封信的对比:奥巴马给女儿 中国贪官给儿子|http://511076864.qzone.qq.com/share/1301359861]]」
<<<
我们的社会无论外表怎样变化,其实质都是农民社会。  谁迎合了农民谁就会成功。我们周围的人无论外表是什么,骨子里都是农民。农民的特点是目光短浅,注重眼前利益。  所以你做事的方式方法必须具有农民特点,要搞短期效益,要鼠目寸光。一旦你把眼光放远,你就不属于这个群体了,  后果可想而知。要多学习封建的那一套,比如拜个把兄弟什么的,这都不过分。
<<<
一起來為中國改變成更好的社會而禱告吧!臺灣也是!
*<<mif "chess (西洋棋): 如何下西洋棋: 規則和基本策略" "http://chean0847.blogspot.tw/2011/04/blog-post.html">>
*<<mif "以開局論述象棋、西洋棋、將棋差異(西洋棋篇) @ 天使的遊戲城堡 :: 隨意窩 Xuite日誌" "http://blog.xuite.net/dreamyeh/blog/213897096-%E4%BB%A5%E9%96%8B%E5%B1%80%E8%AB%96%E8%BF%B0%E8%B1%A1%E6%A3%8B%E3%80%81%E8%A5%BF%E6%B4%8B%E6%A3%8B%E3%80%81%E5%B0%87%E6%A3%8B%E5%B7%AE%E7%95%B0%EF%BC%88%E8%A5%BF%E6%B4%8B%E6%A3%8B%E7%AF%87%EF%BC%89">>


/***
|''Name''|TiddlySpaceCloneTiddlerCommand|
|''Version''|0.6.0|
|''Status''|@@experimental@@|
|''Requires''|TiddlySpaceConfig TiddlySpaceTiddlerIconsPlugin TiddlySpacePublishingCommands|
!Code
***/
//{{{
(function($) {

var tiddlyspace = config.extensions.tiddlyspace;
var tweb = config.extensions.tiddlyweb;
var cmd = config.commands.publishTiddler;

merge(config.macros.tiddlerOrigin, {
	prompt: function(ev, msg, callback, options) {
		var popup = Popup.create(ev.target);
		$(popup).addClass("confirmationPopup prompt").click(function(ev) {
			if(ev.target.parentNode != document) {
				ev.stopPropagation();
			}
		});
		var form = $("<form />").appendTo(popup);
		$("<div />").addClass("message").text(msg).appendTo(form);
		var input = $('<input type="text"/>').appendTo(form).focus()[0];
		var submitForm = function(ev) {
			callback(ev, $(input).val());
			return false;
		};
		form.submit(submitForm);
		$("<button />").addClass("button").text(options.okLabel || "ok").appendTo(form).
			click(submitForm);

		Popup.show();
		ev.stopPropagation();
	}
});
var originMacro = config.macros.tiddlerOrigin;

var push = config.commands.pushTiddler = {
	text: "push tiddler",
	tooltip: "Inform the originating tiddler that you have made changes to this tiddler",
	isEnabled: function(tiddler) {
		return tiddler.fields._original_tiddler_source &&
			tiddler.fields._original_tiddler_revision && !tiddler.fields._push;
	},
	handler: function(ev, src, title) {
		var tiddler = store.getTiddler(title);
		tiddler.fields._push = "yes";
		autoSaveChanges(null, [ store.saveTiddler(tiddler) ]);
	}
};

var flick = config.commands.flickTiddler = {
	text: "flick tiddler",
	tooltip: "Flick this tiddler to another public space",
	isEnabled: function(tiddler) {
		return tiddlyspace.getTiddlerStatusType(tiddler) == "public";
	},
	handler: function(ev, src, title) {
		var tiddler = store.getTiddler(title);
		var bag = tiddler.fields["server.bag"];
		var revision = tiddler.fields["server.page.revision"];
		if(tiddler && bag && revision) {
			tweb.getStatus(function(status) {
				originMacro.prompt(ev, flick.tooltip, function(ev, space) {
					var uri = tiddlyspace.getHost(status.server_host, space);
					var fullUri = "%0#clone:[[bags/%1/tiddlers/%2/revisions/%3]]".
						format(uri, bag, title, revision);
					window.open(fullUri);
				}, {});
			});
		}
	}
};

var p = config.paramifiers.clone = {
	onstart: function(url) {
		p.clone(url);
	},
	clone: function(url, morph) {
		ajaxReq({
			dataType: "json",
			url: url,
			success: function(data) {
				var tiddler = config.adaptors.tiddlyweb.toTiddler(data, config.defaultCustomFields['server.host']);
				var space = tiddlyspace.resolveSpaceName(tiddler.fields["server.bag"]);
				if(space != tiddlyspace.currentSpace.name) { // ALLOW SAVING IN SAME SPACE (TODO: what is correct behaviour here)
					delete tiddler.fields["server.bag"];
					delete tiddler.fields["server.permissions"];
					delete tiddler.fields["server.page.revision"];
				}
				tiddler.modified = new Date();
				tiddler.fields["server.workspace"] = config.defaultCustomFields["server.workspace"];
				tiddler.fields["_original_tiddler_title"] = data.title;
				tiddler.fields["_original_tiddler_source"] = data.bag;
				tiddler.fields["_original_tiddler_revision"] = data.revision;
				tiddler = morph ? morph(tiddler) : tiddler;
				store.addTiddler(tiddler);
				story.displayTiddler(null,tiddler, DEFAULT_EDIT_TEMPLATE);
				window.location.hash = "";
			}
		});
	}
};

var toolbar = store.getTiddlerText("ToolbarCommands");
if(toolbar.indexOf("flickTiddler") === -1) {
	var slice = store.getTiddlerText("ToolbarCommands::ViewToolbar");
	var newslice = slice.replace("> ", "> flickTiddler pushTiddler ");
	var tid = store.getTiddler("ToolbarCommands");
	tid.text = toolbar.replace(slice, newslice);
	store.addTiddler(tid);
}

})(jQuery);
//}}}
以前我曾經不喜歡大蕃茄,我還跟我媽說「媽,每天切的水果裡面可不可以不要再給我蕃茄了,我覺得蕃茄好澀好無味喔。」

可是後來我卻愛上小蕃茄了——可能是有一年鎮光哥帶青年部小組去金勇農場吃蕃茄那次吧!買了一整盒幾十種品種的混合禮盒回來吃,冰過以後每一顆都又漂亮又好吃……呼呼,現在,即使是普通品種的小蕃茄,我也超愛的。不太甜的鮮美風味,喔!
  門口貼字條:「營業至 2013/3/10」<<大哭>>

----
  晚上只好怒吃一中夜市 \$100。

----
  ^^@@3/22@@^^ 我要哭三天……想到一次哭一次……
/***
|''Name:''|TagSearchPlugin|
|''Description:''|Provides a drop down listing current tags and others to be set. Based on [[x-tagger|http://tbgtd.tiddlyspot.com/#x-tagger]] which in turn was once based on [[TaggerPlugin|http://tw.lewcid.org/#TaggerPlugin]].|
|''Author:''|[[Tobias Beer]]|
|''Version:''|1.2.0 (2010-10-10)|
|''Documentation:''|http://tagsearch.tiddlyspot.com|
|''Source:''|http://tagsearch.tiddlyspot.com/#TagSearchPlugin|
|''~TiddlyWiki:''|Version 2.5 or better|
/%***/
(function(e){config.macros.tagsearch={cfg:{defaultSource:"",defaultMore:"",defaultMode:1,keepModified:false,sidebarOffset:20,newAtSingle:30,newAt:18,excludeTagged:"",toolbar:"",label:"tags",options:"Options",more:"More...",tooltip:"Manage tiddler tags",notags:"no tags set...",aretags:"Current tags",addTag:"Add tag...",addTags:"Set tag...",txtEdit:"~ edit categories...",txtEditTip:"edit tiddler with GTD tag categories used by x-tagger",txtNew:"~ add another tag",txtRemove:"remove tag %0",txtAdd:"set tag %0",txtFor:"To be tagged... ",txtCtrl:" (hold SHIFT to just add it or CTRL to replace in category)",promptNew:"Enter new tag:",modeAsk:"Do you want to remove existing tags from category '%0'?\nCancel simply adds tag '%1'."},handler:function(k,g,i,l,h,n){var m=this.cfg,j=story.findContainingTiddler(k),f=h.parseParams("tagman",null,true);e(createTiddlyButton(k,getParam(f,"label",m.label),getParam(f,"tooltip",m.tooltip),this.click,"button")).attr({id:this.newId("btntgs"),tid:(j?j.getAttribute("tiddler"):"")}).data({pa:i,p:f})},click:function(O){var k,G,S,R,K=[],w=true,W,V,U,M,A,Y,T,D,N,L,J=[],C,f,H,aa=O||window.event,X=e(this),F=X.attr("popup"),B=window.event?"keydown":"keypress",I=config.macros.tagsearch,ab=I.cfg,u=X.data("pa"),Q=X.data("p"),h=u.contains("toolbar"),v=getParam(Q,"source",ab.defaultSource),q=getParam(Q,"more",ab.defaultMore),Z=!u.contains("nosearch"),z=!u.contains("notags"),E=!u.contains("nomore"),n=getParam(Q,"goto",""),o=parseInt(getParam(Q,"mode")),g=getParam(Q,"tiddler",""),r=g?g:X.attr("tid"),ac=(getParam(Q,"exclude","")+" "+ab.excludeTagged).readBracketedList(),y=nu=v?ab.newAt:ab.newAtSingle,P=store.getTiddler(r);if(!r){return}o=isNaN(o)?ab.defaultMode:o;ac.map(function(i){K.pushUnique(i)});for(W=0;W<ac.length;W++){store.getTaggedTiddlers(ac[W]).map(function(i){K.pushUnique(i.title)})}if(v&&!store.getTiddlerText(v)){return false}if(F){D=e("#"+F)[0];e(D).empty()}if(!D){M=true;F=I.newId("tgspop");D=Popup.create(this);e(D).addClass("tgs").attr({id:F}).data({btn:X,tiddler:r,source:v,mode:o}).click(I.noBubble);X.attr("popup",F)}if(v){C=store.getTiddlerText(v).readBracketedList();for(L=0;L<C.length;L++){if(!K.contains(C[L])){H=store.getTaggedTiddlers(C[L]);J.push("TAG:"+C[L]);for(N=0;N<H.length;N++){if(!K.contains(H[N].title)){J.push(H[N].title)}}}}}else{J=store.getTags()}G=P?P.tags.sort():[];Y=function(j,i){return createTiddlyElement(createTiddlyElement(j,"li",null,null),"ol",null,i?i:null)};A=function(j,x,i,p){var m,l;m=createTiddlyElement(createTiddlyElement(j,"li"),"span",null,null);l=e(createTiddlyButton(m,x,p.format(["'"+i+"'"]),I.setTag,"button toggleButton",null));l.data({tiddler:r,tag:i,source:v,mode:o});insertSpacer(m);createTagButton(m,i)};S=Y(D,"tgside");if(config.macros.gotoTiddler&&Z){R=Y(S);if(g){U=createTiddlyElement(R,"li",null,"addto","");wikify("{{title{"+ab.txtFor+"}}}<<tag [["+r+"]]>>",U);R=Y(S)}createTiddlyElement(R,"li",null,"title",ab.addTag);wikify("<<gotoTiddler "+n+" >>",R);e("input",D).bind(B,I.noBubble).data("notify",config.macros.tagsearch.notify).focus()}R=Y(S);createTiddlyElement(R,"li",null,"title",ab.aretags);if(G.length==0){wikify("{{notags{"+ab.notags+"}}}",R)}else{for(L=0;L<G.length;L++){A(R,"[X]",G[L],ab.txtRemove)}}if(z){for(W=0;W<J.length;W++){nu++;f=v?J[W]:J[W][0];if(f.indexOf("TAG:")==0){f=f.substr(4);if(nu>y){nu=0;S=Y(D)}R=Y(S);nu++;createTiddlyLink(createTiddlyElement(R,"li",null,null),f,f,"title")}else{if(!G.contains(f)&&!K.contains(f)){if(!v&&nu>y||v&&nu>ab.newAtSingle){nu=0;S=Y(D);R=Y(S);if(w){createTiddlyElement(createTiddlyElement(R,"li",null,null),"li",null,"title",ab.addTags);w=false}}A(R,"["+String.fromCharCode(160,160,160)+"]",f,ab.txtAdd+(v?ab.txtCtrl:""))}}}}if(E){S=Y(D,"tgside");R=Y(S);createTiddlyElement(R,"li",null,"title",ab.options,null);createTiddlyButton(createTiddlyElement(R,"li"),ab.txtNew,null,I.setTag,"tsopt",null,null,{tiddler:r});if(v){createTiddlyButton(createTiddlyElement(R,"li"),ab.txtEdit,ab.txtEditTip,onClickTiddlerLink,"tsopt",null,null,{tiddlyLink:v.split("##")[0]})}w=true;if(q){T=store.getTiddlerText(q).readBracketedList();if(T.length>0){for(W=0;W<T.length;W++){f=T[W];if(f.indexOf("TAG:")==0){f=f.substr(4,f.length-4);R=Y(S);createTiddlyLink(createTiddlyElement(R,"li",null,null),f,f,"title");k=store.getTaggedTiddlers(f);for(V=0;V<k.length;V++){f=k[V].title;if(!G.contains(f)&&!K.contains(f)){A(R,"["+String.fromCharCode(160,160)+"]",f,ab.txtAdd)}}}else{if(w){R=Y(S);createTiddlyElement(R,"li",null,"title",ab.more);w=false}if(!G.contains(f)&&!K.contains(f)){A(R,"["+String.fromCharCode(160,160)+"]",f,ab.txtAdd)}}}}}}if(M){Popup.show(D,false);if(h){N=document.getElementById("sidebar");D.style.left="";D.style.right=(ab.sidebarOffset+(N?N.offsetWidth:0))+"px"}}return I.noBubble(aa)},setTag:function(w){var q,j,z,l=true,n,u,s,g,v=w||window.event,k=config.macros.tagsearch,y=k.cfg,f=e(this),o=f.closest(".tgs"),i=o.data("btn"),A=f.data("tag"),B=o.data("tiddler"),h=o.data("source"),r=parseInt(o.data("mode"));if(!A){z=prompt(y.promptNew,"");if(!z){return false}else{A=z}}tid=k.exists(B,A);if(tid){u=tid.tags;if(!u.contains(A)){if(h&&r<2&&!v.shiftKey){j=store.getTiddlerText(h).readBracketedList();findTagged:for(q=0;q<j.length;q++){g=j[q];s=store.getTaggedTiddlers(g).map(function(m){return m.title});if(s.contains(A)){s.splice(s.indexOf(A),1);if(!v.ctrlKey&&r==1&&u.containsAny(s)){l=confirm(y.modeAsk.format([g,A]))}if(l){for(n=0;n<s.length;n++){g=s[n];if(u.contains(g)){store.setTiddlerTag(B,false,g)}}}break findTagged}}}store.setTiddlerTag(B,true,A)}else{if(!z){store.setTiddlerTag(B,false,A)}}n=store.getTiddler(B);store.saveTiddler(B,B,n.text,y.keepModified?n.modifier:config.options.txtUserName,y.keepModified?n.modified:new Date(),n.tags,n.fields)}if(config.options.chkAutoSave){autoSaveChanges()}i.click();o.find("input").focus();return k.noBubble(v)},newId:function(f){return f+Math.random().toString().substr(3)},notify:function(f,h){var j=e(h).closest(".tgs"),g=e("form input",j)[0];t=config.macros.tagsearch.exists(j.data("tiddler"),f);if(t&&!t.tags.contains(f)){store.setTiddlerTag(t.title,t,f)}j.data("btn").click();g.select()},exists:function(i,g){if(!store.getTiddler(i)){var h=merge({},config.defaultCustomFields);store.saveTiddler(i,i,"",config.options.txtUserName,new Date(),g,h);return false}return store.getTiddler(i)},noBubble:function(g){var h=g||window.event,f=resolveTarget(h);if(h.keyCode==27){Popup.remove(0)}else{if(h.type!="click"&&f.nodeName.toUpperCase()=="INPUT"){return true}}if(hasClass(f,"tiddlyLink")){return true}Popup.remove(1);h.cancelBubble=true;try{event.keyCode=0}catch(h){}if(window.event){h.returnValue=false}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false}};config.commands.tagSearch={};var d=config.macros.toolbar;d.createCommandTAGS=d.createCommand;d.createCommand=function(f,h,g,i){if(h=="tagSearch"){wikify("<<tagsearch toolbar "+config.macros.tagsearch.cfg.toolbar+">>",f);e(f.lastChild).attr({commandName:"tagSearch",tiddler:g.title})}else{d.createCommandTAGS.apply(this,arguments)}};var b=config.macros.gotoTiddler;if(b){b.processItem=function(i,g,h,f){if(!i.length){return}h.style.display=f?"block":"none";if(i=="*"){story.search(g.value);return false}if(!f){g.value=i}var j=e(g).data("notify");if(j){j.call(this,i,g)}else{story.displayTiddler(null,i)}return false};b.IEtableFixup="%0"}var c=store.getTiddlerText("ColorPalette::TertiaryMid"),a=store.getTiddlerText("ColorPalette::TertiaryDark");config.shadowTiddlers.StyleSheetTagSearch="/*{{{*/\n.tgs {padding:7px !important;-moz-border-radius:5px; -webkit-border-radius:5px;border-radius:5px;}\n.tgs li a, .tgs .quickopentag .tiddlyLink {display:inline;padding:2px;clear:none;}\n.tgs li a.toggleButton {display:inline;margin-left:5px;}\n.tgs .title {margin:3px 0 0 5px;font-weight:bold;font-size:150%;color:"+c+";padding:0;}\n.tgs form{display:block;float:left;clear:both;padding-left:5px !important;}\n.tgs .addto .quickopentag{display:block;clear:both;padding:5px;font-size:120%;}\n.tgs .notags, .tsopt{display:block;clear:both;margin:5px;}\n.tgs .highlight{background:"+a+";}\n.tgs ol{margin:0;padding:0 0 5px 0;}\n.tgs li{display:block;float:left;padding-bottom:10px !important;}\n.tgs li span{line-height:1em;}\n.tgs li ol li{clear:both;min-width:120px;display:inline;border:1px solid transparent;}\n.tgs li ol li:hover{border:1px solid "+c+";}\n.tgs li ol li ol li{padding:0 !important;}\n.tgs li ol li ol li:hover{border:1px solid transparent;}\n.tgside li ol li {min-width:150px;}.tgs .quickopentag {display:inline;}\n.tgs .quickopentag .tiddlyLink:hover {text-decoration:underline;}\n.tgs .quickopentag .button {border:0;padding:2px;font-size:1.5em;}\n/*}}}*/";store.addNotification("StyleSheetTagSearch",refreshStyles)})(jQuery);
//%/

/%
|Name|QuickEdit_insert|
|Source|http://www.TiddlyTools.com/#QuickEdit_insert|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - insert content from another tiddler or external file|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="insert content from another tiddler or external file"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';

	var s2=createTiddlyElement(p,'select'); s2.title='filter by tag';
	s2.options[0]=new Option('filter by tag...','');
	s2.options[s2.length]=new Option('[all tiddlers]','');
	var tags=store.getTags();
	for (var t=0; t<tags.length; t++) s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);
	s2.onchange=function(){
		var tag=this.value;
		var tids=tag.length?store.reverseLookup('tags',tag,true):store.reverseLookup('tags','excludeLists');
		var list=this.nextSibling.nextSibling;
		while (list.length) list.options[0]=null;
		var prompt='select a tiddler or file...';
		if (tag.length) prompt='select a tagged tiddler ['+tids.length+' matches]...';
		list.options[0]=new Option(prompt,'');
		if (!tag.length) list.options[list.length]=new Option('[browse for file...]','_file');
		for (var t=0; t<tids.length; t++) {
			list.options[list.length]=new Option(tids[t].title,tids[t].title);
			list.options[list.length-1].title=tids[t].getSubtitle();
		}
		list.size=Math.min(list.length,10);
		list.selectedIndex=0; list.focus();
		this.style.width=list.offsetWidth+'px';
		if (!tag.length) this.selectedIndex=0;
	};
	createTiddlyElement(p,'br');

	var s=createTiddlyElement(p,'select'); s.button=this;
	s.title='select a tiddler or file';
	s.options[0]=new Option('select a tiddler or file...','');
	s.options[s.length]=new Option('[browse for file...]','_file');
	var tids=store.reverseLookup('tags','excludeLists');
	for (var t=0; t<tids.length; t++) {
		s.options[s.length]=new Option(tids[t].title,tids[t].title);
		s.options[s.length-1].title=tids[t].getSubtitle();
	}
	s.size=Math.min(s.length,10);
	s.onclick=function(){ if (!this.value.length) return false;
		if (this.value=='_file') {
			var fn=config.quickEdit.promptForFilename(
				'Enter/select a text file',getLocalPath(document.location.href),'');
			if (!fn) return false; /* cancelled by user */
			var txt=loadFile(getLocalPath(fn));
			if (!txt) { alert('Error: unable to read contents from \0027'+fn+'\0027'); return; }
		}
		else var txt=store.getTiddlerText(this.value);
		if (!txt) {
			displayMessage(this.value+' not found');
			this.selectedIndex=0; this.focus();
			return false;
		}
		config.quickEdit.setSelection(this.button,txt);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s2.style.width=s.offsetWidth+'px';
	s.focus();
	return config.quickEdit.processed(event);"
>insert</a></html>
一場鄰國的大震終於震動了臺灣的人心,我們也該更積極起而行動了!
  當然,如果是用電蚊拍掃到一下奄奄一息的,則一樣會抓起來多爆幾次,炸到碎、燒到冒煙,只剩頭為止。
  前兩天去臺南吃老同學的喜酒,帶回了一盒傳統喜餅(六樣餅,每一樣是不是有規定要幾兩重?),結果我一吃幾口就超愛了,馬上開心地謝了花重本招待大家的好同學(真心覺得身為女方親友真的很幸運 <<:p>>)

  千毓跟我上網搜尋這家「舊永瑞珍囍餅」才知道這次真是賺到了 <<:p>> 來呀!趕快搜尋一下還有沒有認識的臺南女性親友,攀一下關係,期待下次的婚禮……
今天去幫瑋中哥「賀寶芙健康大使」參賽加油打氣的留言內容:
<<<
人生很不順利、想放棄?聽聽看 神對你有什麼期待, 神不會放著你不管的!

人生很滿足、該有的都有了?這樣的生活能夠永遠持續嗎?問問 神該怎樣面對必有的挑戰和生老病死!
<<<
*每一個小時重覆播放一樣的東西。
*記者上網就可以跑新聞,超方便。
  上班常不在家,小捷都和瑪麻較熟,通常也最黏瑪麻,所以難得小捷走過來要我抱抱的時候我都挺高興的。

  不過,最近常發生這樣的流程:
「抱抱。」
「好~」
~~〔抱起小捷〕~~
「阿瓦。」~~〔小捷指著冰箱那個方向;註:「阿瓦」是小捷語,通常表示「我要」、「給我」、「幫我」〕~~
~~〔我只好無奈地抱他往那邊走〕~~
「餅乾/腰果/硬硬!」~~〔註:「硬硬」指維他命 C 錠〕~~
~~〔我只好請示巧皇后看他現在可以吃什麼,挑一樣可以給他吃的;給蔓越莓乾還不行!〕~~

  小捷拿到冰箱頂上的食物後,就扭動身體要求下來。我恍然大悟,原來是把我當成電信局的高空作業車(bucket truck)罷了!!!(光火 <<怒>>)<html><a title="By Ibagli (Own work) [Public domain], via Wikimedia Commons" href="http://commons.wikimedia.org/wiki/File%3AOSU_Bucket_Truck.JPG"><img width="512" alt="OSU Bucket Truck" src="//upload.wikimedia.org/wikipedia/commons/thumb/1/10/OSU_Bucket_Truck.JPG/512px-OSU_Bucket_Truck.JPG"/></a></html>
昨天才知道,原來我一直想擁有的香理牧師專輯 kala 檔(純伴奏檔),早在幾個月前教會訊息天使就寄了,但當時我卻只看信件標題想說「這些歌我都有自己燒起來啦!」以為就是同樣 CD 燒出來的歌唱版,卻連附件都沒開來聽一下,就把信件擺著了。

我們想要的東西,或許神早就提供給我們了,只是我們宥於自己的成見而不知,也沒有確認,就這樣把祝福擺著……

Click the "new tiddler" button towards the top right of the screen to write something in your space. You'll need to give it a title, some content and, optionally, some tags that will help you identify it later.

!Stuck for ideas?
Not sure what to write about? Not sure what to keep in your space? Other people use ~TiddlySpace for almost anything. How about some of the following:

* [[Save interesting sites|http://bookmarks.tiddlyspace.com]], images or articles from around the web so that you can refer back to them.
* [[Record your family tree|http://familytree.tiddlyspace.com]], store notes on long lost relatives or ancestors and map their relationship to you.
* [[Make up a pocketbook|http://pocketbook.tiddlyspace.com]] to store some useful information in, then print it out, [[fold it up|http://www.pocketmod.com/]], and take it with you.
* [[Plan your holiday|http://the-web-is-your-oyster.tiddlyspace.com/]], record where you're planning to go, note down places of interest and refer back to it later.
* [[Create a mindmap|http://mindmaps.tiddlyspace.com/]] to visualise your inner thoughts and see how they relate to each other.
* [[Set up a questionnaire|http://questionnaire.tiddlyspace.com/]] and get all your friends to answer it.

If you don't like any of those ideas, you can still use this space directly to keep notes and link them together, make a todo list and keep track of everything you're doing, or any one of a hundred million other things.

Still stuck? Check out the @featured space for more suggestions.

You can also [[socialise with others|How to socialise]].
<html><a href="http://photobucket.com/images/jesus%20rainbow" target="_blank"><img src="http://i961.photobucket.com/albums/ae91/sacredspacefire/Scripture%20Backgrounds/JESUS2Rainbow.png" border="0" alt="Rainbow Ocean Jesus Word Only Pictures, Images and Photos"/></a></html>
《聖經》〈創世記〉9:8-15:
>神曉諭挪亞和他的兒子說:我與你們和你們的後裔立約,並與你們這裡的一切活物─就是飛鳥、牲畜、走獸,凡從方舟裡出來的活物─立約。我與你們立約,凡有血肉的,不再被洪水滅絕,也不再有洪水毀壞地了。神說:我與你們並你們這裡的各樣活物所立的永約是有記號的。我把虹放在雲彩中,這就可作我與地立約的記號了。我使雲彩蓋地的時候,必有虹現在雲彩中,我便記念我與你們和各樣有血肉的活物所立的約,水就再不氾濫、毀壞一切有血肉的物了。

舊約、新約,成約。感謝主我們正走在迎接再臨的((彩虹橋(典出電影「賽德克‧巴萊」)))上。不是血戰之後得到的肥美獵場,也完全不像伊斯蘭戰士夢想充滿美酒美女的天堂,而是永生靈魂的真愛與喜悅,和活著的時候就能享受到的心靈提升。~~(觀電影「賽德克‧巴萊」後[[有感|「賽德克‧巴萊」觀後感]]@gjrobert-linst)~~

(想弄清楚猶太教、基督教的講的「約」是怎麼回事、有啥好處的話,歡迎來聽我們教會的二十堂綜貫科哲的聖經導讀課程 <<:D>>)
/***
|''Name''|TiddlySpaceViewTypes|
|''Version''|0.6.0|
|''Status''|@@beta@@|
|''Description''|Provides TiddlySpace specific view types|
|''Author''|Jon Robson|
|''Source''|http://github.com/TiddlySpace/tiddlyspace/raw/master/src/plugins/TiddlySpaceViewTypes.js|
|''Requires''|TiddlySpaceConfig TiddlySpaceTiddlerIconsPlugin|
!Usage
Provides replyLink, spaceLink and SiteIcon view types.
!!SiteIcon view parameters
* labelPrefix / labelSuffix : prefix or suffix the label with additional text. eg. labelPrefix:'modified by '
* spaceLink: if set to "yes" will make any avatars link to the corresponding space. {{{<<originMacro spaceLink:yes>>}}}

!Code
***/
//{{{
(function($) {

var tiddlyspace = config.extensions.tiddlyspace;
var originMacro = config.macros.tiddlerOrigin;
var tweb = config.extensions.tiddlyweb;

config.macros.view.replyLink = {
	locale: {
		label: "Reply to this tiddler"
	}
};

var _replyButtons = [];
var _replyInitialised, _replyScriptLoaded;
config.macros.view.views.replyLink = function(value, place, params, wikifier,
		paramString, tiddler) {
	var valueField = params[0];
	var imported;
	if(valueField == "title") { // special casing for imported tiddlers
		var localTitle = tiddler.title;
		var serverTitle = tiddler.fields["server.title"];
		if(serverTitle && localTitle != serverTitle) {
			value = serverTitle ? serverTitle : localTitle;
			imported = true;
		}
	} else {
		title = tiddler[valueField] ? tiddler[valueField] : tiddler.fields[valueField];
	}
	var args = paramString.parseParams("anon")[0];
	var label = (args.label) ? args.label : config.macros.view.replyLink.locale.label;
	var space;
	if(tiddler) {
		var bag = tiddler.fields["server.bag"];
		space = tiddlyspace.resolveSpaceName(bag);
	}
	var container = $('<span class="replyLink" />').appendTo(place)[0];

	tweb.getUserInfo(function(user) {
		if ((!user.anon) && ((space && user.name != space &&
				user.name != tiddlyspace.currentSpace.name) || imported)) {
			var link = $("<a />")
				.text(config.macros.view.replyLink.locale.label)
				.appendTo(container)[0];

			if(typeof(createReplyButton) === "undefined") {
				_replyButtons.push(link);
			}
			if(_replyInitialised) {
				createReplyButton(link);
			} else if(!_replyScriptLoaded) {
				_replyScriptLoaded = true;
				$.getScript("/bags/common/tiddlers/_reply-button.js",
					function() {
						_replyInitialised = true;
						for(var i = 0; i < _replyButtons.length; i++) {
							createReplyButton(_replyButtons[i]);
						}
						_replyButtons = [];
					});
			}
		}
	});

};

config.macros.view.views.spaceLink = function(value, place, params, wikifier,
		paramString, tiddler) {
		var spaceName = tiddlyspace.resolveSpaceName(value);
		var isBag = params[0] == "server.bag" && value === spaceName ? true : false;
		var args = paramString.parseParams("anon")[0];
		var titleField = args.anon[2];
		var labelField = args.labelField ? args.labelField[0] : false;
		var label;
		if(labelField) {
			label = tiddler[labelField] ? tiddler[labelField] : tiddler.fields[labelField];
		} else {
			label = args.label ? args.label[0] : false;
		}
		var title = tiddler[titleField] ? tiddler[titleField] : tiddler.fields[titleField];

		var link = createSpaceLink(place, spaceName, title, label, isBag);
		if(args.external && args.external[0] == "no") {
			$(link).click(function(ev) {
				var el = $(ev.target);
				var title = el.attr("tiddler");
				var bag = el.attr("bag");
				var space = el.attr("tiddlyspace");
				bag = space ? space + "_public" : bag;
				if(title && bag) {
					ev.preventDefault();
					tiddlyspace.displayServerTiddler(el[0], title,
						"bags/" + bag);
				}
				return false;
			});
		}
};

config.macros.view.views.SiteIcon = function(value, place, params, wikifier,
		paramString, tiddler) {
	var options = originMacro.getOptions(paramString);
	if(!tiddler || value == "None") { // some core tiddlers lack modifier
		value = false;
	}
	var field = params[0];
	if(field == "server.bag") {
		options.notSpace = !originMacro._isSpace(value);
	}
	tiddlyspace.renderAvatar(place, value, options);
};

})(jQuery);
//}}}
/***
|Name:|NewHerePlugin|
|Description:|Creates the new here and new journal macros|
|Version:|3.0a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.macros, {
  newHere: {
    handler: function(place,macroName,params,wikifier,paramString,tiddler) {
      wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
    }
  },
  newJournalHere: {
    handler: function(place,macroName,params,wikifier,paramString,tiddler) {
      wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
    }
  }
});

//}}}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="78 222 60 60" 
width="30" height="30">
<g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
	<g>
		<path d="M 107.92718 244.14815 L 86.651474 222.89253 L 78.85206 230.69925 L 100.120415 251.9476 L 78.774 273.27396 
		L 86.57342 281.08075 L 107.927216 259.74707 L 129.39981 281.19946 L 137.19922 273.39267 L 115.73397 251.94763 
		L 137.121155 230.58054 L 129.32175 222.77374 Z" fill="black" class="glyph"/>
	</g>
</g>
</svg>
/***
|Name|HoverMenuPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#HoverMenuPlugin|
|Version|1.11|
|Requires|~TW2.x|
!Description:
Provides a hovering menu on the edge of the screen for commonly used commands, that scrolls with the page.

!Demo:
Observe the hovering menu on the right edge of the screen.

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
To customize your HoverMenu, edit the HoverMenu shadow tiddler.

To customize whether the menu sticks to the right or left edge of the screen, and its start position, edit the HoverMenu configuration settings part of the code below. It's well documented, so don't be scared!

The menu has an id of hoverMenu, in case you want to style the buttons in it using css.

!Notes:
Since the default HoverMenu contains buttons for toggling the side bar and jumping to the top of the screen and to open tiddlers, the ToggleSideBarMacro, JumpMacro and the JumpToTopMacro are included in this tiddler, so you dont need to install them separately. Having them installed separately as well could lead to complications.

If you dont intend to use these three macros at all, feel free to remove those sections of code in this tiddler.

!To Do:
* rework code to allow multiple hovering menus in different positions, horizontal etc.
* incorporate code for keyboard shortcuts that correspond to the buttons in the hovermenu

!History:
*03-08-06, ver 1.1.2: compatibility fix with SelectThemePlugin
*03-08-06,  ver 1.11: fixed error with button tooltips
*27-07-06, ver 1.1 : added JumpMacro to hoverMenu
*23-07-06

!Code
***/

/***
start HoverMenu plugin code
***/
//{{{
config.hoverMenu={};
//}}}

/***
HoverMenu configuration settings
***/
//{{{
config.hoverMenu.settings={
               align: 'right',    //align menu to right or left side of screen, possible values are 'right' and 'left'               
               x: 1,              // horizontal distance of menu from side of screen, increase to your liking.
               y: 158            //vertical distance of menu from top of screen at start, increase or decrease to your liking
               };
//}}}

//{{{
//continue HoverMenu plugin code
config.hoverMenu.handler=function()
{              
               if (!document.getElementById("hoverMenu"))
               {
               var theMenu = createTiddlyElement(document.getElementById("contentWrapper"), "div","hoverMenu");
               theMenu.setAttribute("refresh","content");
               theMenu.setAttribute("tiddler","HoverMenu");
               var menuContent = store.getTiddlerText("HoverMenu");
               wikify(menuContent,theMenu);
              }

	       var Xloc = this.settings.x;
	       Yloc =this.settings.y;
	       var ns = (navigator.appName.indexOf("Netscape") != -1);
	       function SetMenu(id)
                        {
		        var GetElements=document.getElementById?document.getElementById(id):document.all?document.all[id]:document.layers[id];
		        if(document.layers)GetElements.style=GetElements;
		        GetElements.sP=function(x,y){this.style[config.hoverMenu.settings.align]=x +"px";this.style.top=y +"px";};
		        GetElements.x = Xloc;
		        GetElements.y = findScrollY();
		        GetElements.y += Yloc;
		        return GetElements;
	                }
               window.LoCate_XY=function()
                        {
		        var pY =  findScrollY();
                        ftlObj.y += (pY + Yloc - ftlObj.y)/15;
		        ftlObj.sP(ftlObj.x, ftlObj.y);
		        setTimeout("LoCate_XY()", 10);
	                }
               ftlObj = SetMenu("hoverMenu");
	       LoCate_XY();
};

window.old_lewcid_hovermenu_restart = restart;
restart = function()
{
               window.old_lewcid_hovermenu_restart();
               config.hoverMenu.handler();
};

setStylesheet(
"#hoverMenu .imgLink, #hoverMenu .imgLink:hover {border:none; padding:0px; float:right; margin-bottom:2px; margin-top:0px;}\n"+
"#hoverMenu  .button, #hoverMenu  .tiddlyLink {border:none; font-weight:bold; background:#18f; color:#FFF; padding:0 5px; float:right; margin-bottom:4px;}\n"+
"#hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover {font-weight:bold; border:none; color:#fff; background:#000; padding:0 5px; float:right; margin-bottom:4px;}\n"+
"#hoverMenu .button {width:100%; text-align:center}"+
"#hoverMenu { position:absolute; width:7px;}\n"+
"\n","hoverMenuStyles");


config.macros.renameButton={};
config.macros.renameButton.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{

               if (place.lastChild.tagName!="BR")
                     {
                      place.lastChild.firstChild.data = params[0];
                      if (params[1]) {place.lastChild.title = params[1];}
                     }
};

config.shadowTiddlers["HoverMenu"]="<<top>>\n<<toggleSideBar>><<renameButton '>' >>\n<<jump j '' top>>\n<<saveChanges>><<renameButton s 'Save TiddlyWiki'>>\n<<newTiddler>><<renameButton n>>\n";
//}}}
//end HoverMenu plugin code

//Start ToggleSideBarMacro code
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
         styleHide :  "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
         styleShow : " ",
         arrow1: "«",
         arrow2: "»"
};

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle sidebar';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
             }
};

config.macros.toggleSideBar.onToggleSideBar = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleSideBar.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleSideBarStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleSideBarStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");
//}}}
//end ToggleSideBarMacro code

//start JumpToTopMacro code
//{{{
config.macros.top={};
config.macros.top.handler=function(place,macroName)
{
               createTiddlyButton(place,"^","jump to top",this.onclick);
}
config.macros.top.onclick=function()
{
               window.scrollTo(0,0);
};

config.commands.top =
{
               text:" ^ ",
               tooltip:"jump to top"
};

config.commands.top.handler = function(event,src,title)
{
               window.scrollTo(0,0);
}
//}}}
//end JumpToStartMacro code

//start JumpMacro code
//{{{
config.macros.jump= {};
config.macros.jump.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
        var label = (params[0] && params[0]!=".")? params[0]: 'jump';
        var tooltip = (params[1] && params[1]!=".")? params[1]: 'jump to an open tiddler';
        var top = (params[2] && params[2]=='top') ? true: false;        

        var btn =createTiddlyButton(place,label,tooltip,this.onclick);
        if (top==true)
              btn.setAttribute("top","true")
}

config.macros.jump.onclick = function(e)
{
        if (!e) var e = window.event;
        var theTarget = resolveTarget(e);
        var top = theTarget.getAttribute("top");
	var popup = Popup.create(this);
	if(popup)
		{
                 if(top=="true")
                                {createTiddlyButton(createTiddlyElement(popup,"li"),'Top ↑','Top of TW',config.macros.jump.top);
                                 createTiddlyElement(popup,"hr");}
		
		story.forEachTiddler(function(title,element) {
			createTiddlyLink(createTiddlyElement(popup,"li"),title,true);
			});
                }
	Popup.show(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return false;
}

config.macros.jump.top = function()
{
       window.scrollTo(0,0);
}
//}}}
//end JumpMacro code

//utility functions
//{{{
Popup.show = function(unused,slowly)
{
	var curr = Popup.stack[Popup.stack.length-1];
	var rootLeft = findPosX(curr.root);
	var rootTop = findPosY(curr.root);
	var rootHeight = curr.root.offsetHeight;
	var popupLeft = rootLeft;
	var popupTop = rootTop + rootHeight;
	var popupWidth = curr.popup.offsetWidth;
	var winWidth = findWindowWidth();
        if (isChild(curr.root,'hoverMenu'))
              var x = config.hoverMenu.settings.x;
        else
              var x = 0;
	if(popupLeft + popupWidth+x > winWidth)
		popupLeft = winWidth - popupWidth -x;
        if (isChild(curr.root,'hoverMenu'))
  	        {curr.popup.style.right = x + "px";}
        else
                curr.popup.style.left = popupLeft + "px";
	curr.popup.style.top = popupTop + "px";
	curr.popup.style.display = "block";
	addClass(curr.root,"highlight");
	if(config.options.chkAnimate)
		anim.startAnimating(new Scroller(curr.popup,slowly));
	else
		window.scrollTo(0,ensureVisible(curr.popup));
}

window.isChild = function(e,parentId) {
        while (e != null) {
                var parent = document.getElementById(parentId);
                if (parent == e) return true;
                e = e.parentNode;
                }
        return false;
};
//}}}


R0lGODlhEwATAPf+AE0vDFooFqA/IJl4KP3zV/379P7eQoWJIu/dm+bNUYiHI97RyouFI/3yVu7ak/7++vr58v/jR93ySY6SJrnFHd3uSePRNuPWOfXrypamIOPSNrG8KebnRuHvSMDCHsPAHOO4Mdi5INTPLPTqwpqjSMe+HdrvR8S/HdTsQsS+HoSLIqG1HvTKM8PqNrLrMNXWtaOeI7vHHtHrP7C+H72vJKujIqSXJKDpKdjevNDDh6HgI67sMKLXIOXCVtfwStPYL/3xVt/uRtzdv6uxILDHHOC4LrbHHbHFGsOoJdnwR4yDJenRN4GhH4XxJca6IfXqw7PJHsrIP9u9TciuKf79+uDSlvzmSuTIVu/mRb3MIsbWK6qkS7bsM/3qVsziM931VLa+f7/BIt7gOY7mIZSNKc7eNPb38HPpGs+5ZdngON/pQZuDJtbqP63gKP389eLyU8KvI8e5IanVIOPCMOfqTqSYQ+bmQ+rsUfvhRcCmJuLqTfT37tjVMcfDN/vmTLzhLs67K+3dPdjtQ/39+tfwRdzxS93rRPfry9jySvz8+vbty+PvSsa4j865Kdy4IYmUIt/vScO6jsvCiObpRZeAIdzjOsGtRvn485boJaTPHJTjIqbpKpfZHMeuSI7wKNu/TfbSPfzmU8SuIuXpROjgvdDqPPz79ZR9J8O5J4yEJP3sWfHlwenixd/wUN7tRty4LeLsR+DmPdryUNnoPdXoOn3nHNXFhPHBLZB2OubdPdrnPLa7H6yPJeLyTrDMHrbKH7bLH/Xty9jsQujkPePQNeLXN9fqQNnxSLzIINnSM+bGV+3lQsDoM9DPK9bxRt/rRbvQJYvuJePCV/z8+aCeSZSQKrS1IKWRMXjvH8ayJd/ESNK6H2vxHOToSuPpRIHmHe3Vk+jlP9ntRN7IMPnZPZfTGtrpQYCOIazIG8/rPaGRfnbwHq+fTaN/J7bjLuvXktvUudPqPtvQlfz789rdNsXlM5qhQLq8gujmQtDAi+PqR8DJIZl4J////////wAAACH+HUJ1aWx0IHdpdGggR0lGIE1vdmllIEdlYXIgMy4wACH5BAEAAP4ALAAAAAATABMAAAj+AP0JHKjIwZVX0t5hGMhw4JMElAAA0Beu2LhP6gA09IdAg8RqScQJMxcLFAhcGgciuADgWgMgzgihiBfBADlAaAaOINYLEYEG/PiZEMSmZtAptgQmsFPIBwF+/fod+CJLFdR+DDr5C2ZhkYRjT6MqeNOqy1UGSHI4yNUBUoWnCwKkmjQKD78ACxRkk6RsGawgrqzcDaDkDp1Qg1U42VIEi7dnhvxoCxpFTzcOfQ6c2+BhQo9A+NQYk5Gu1CxdldLQ49MsC5QZJMAtGUarBZcdLpgN8FLmh4hbTNCtAHNojph6mzw1iXbD3akBAgQ8onAkAw5/UpL9wYSN27oxbVhdCIhao4Q1ewJXNdKi49uZWprkDIAuoF0IGy8GVkEFjQencpkM4MsvH2zjyBqRNCQPDWHsg0wMRhABzAmi8MLIRv6QYkkecMSRwi5DwFAHPBgOxEo+7JBBzT1CbBQQADs=

<<<
如同我為我所禱告的一切
都已達成一般
如果我為弟兄和民族禱告
就可以達成

我要禱告
堅定地站立在信心上
要以深深悲傷
誠心真意禱告吧
<<<
呵,改自「你要禱告」歌曲第一段,把「你」全改「我」了。

所愛的弟兄/姐妹們啊、所愛的朋友、新生們啊,有辛苦困難嗎、內心當中有已死去的哪一小半嗎、有想要達成的事情嗎,我堅信禱告的功效是大的,我會更努力幫你/妳禱告的唷。不只是我,還有許多人也已經是這樣為人們禱告了喔。如果聖三位能夠垂聽的話,我們的救援和祝福一定可以源源而來的。相信嗎?
var user, userbag;
var friends = [];
var host = "http://tiddlyspace.com";

$.ajaxSetup({
	beforeSend: function(xhr) {
		xhr.setRequestHeader("X-ControlView", "false");
	}
});

function printMessage(txt) {
	alert(txt);
}

function printError(txt) {
	alert(txt);
}

var simpleDate = (function() {

	var measures = {
		second: 1,
		minute: 60,
		hour: 3600,
		day: 86400,
		week: 604800,
		month: 2592000,
		year: 31536000
	};

	var chkMultiple = function(amount, type) {
		return (amount > 1) ? amount + " " + type + "s":"a " + type;
	};

	return function(thedate) {

		var dateStr, amount,
			current = new Date().getTime(),
			diff = (current - thedate.getTime()) / 1000; // work with seconds

		if(diff > measures.year) {
			amount = Math.round(diff/measures.year);
			dateStr = "about " + chkMultiple(amount, "year") + " ago";
		} else if(diff > measures.month) {
			amount = Math.round(diff/measures.month);
			//if(typeof amount == "")
			dateStr = "about " + chkMultiple(amount, "month") + " ago";
		} else if(diff > measures.week) {
			amount = Math.round(diff/measures.week);
			dateStr = "about " + chkMultiple(amount, "week") + " ago";
		} else if(diff > measures.day) {
			amount = Math.round(diff/measures.day);
			dateStr = "about " + chkMultiple(amount, "day") + " ago";
		} else if(diff > measures.hour) {
			amount = Math.round(diff/measures.hour);
			dateStr = "about " + chkMultiple(amount, "hour") + " ago";
		} else if(diff > measures.minute) {
			amount = Math.round(diff/measures.minute);
			dateStr = "about " + chkMultiple(amount, "minute") + " ago";
		} else {
			dateStr = "a few seconds ago";
		}

		return dateStr;

	};
})();

function prettyDate(t) {
	var date = new Date(Date.UTC(
		parseInt(t.substr(0, 4), 10),
		parseInt(t.substr(4, 2), 10) - 1,
		parseInt(t.substr(6, 2), 10),
		parseInt(t.substr(8, 2), 10),
		parseInt(t.substr(10, 2), 10),
		parseInt(t.substr(12, 2) || "0", 10),
		parseInt(t.substr(14, 3) || "0", 10)
	));
	return simpleDate(date);
}

function endsWith(str, suffix) {
	return str.indexOf(suffix) == str.length - suffix.length;
}

function isShadow(tid) {
	var shadows = ["MarkupPreHead", "DefaultTiddlers", "PageTemplate", "SideBarTabs",
		"GettingStarted", "MainMenu", "SiteTitle", "SiteSubtitle", "ColorPalette",
		"SiteIcon", "ViewTemplate", "EditTemplate", "ServerSettings", "MarkupPostHead",
		"MarkupPostBody", "MarkupPreBody"];
	return tid.title.indexOf("StyleSheet") === 0 ||
		tid.title.indexOf("SideBar") === 0 ||
		shadows.indexOf(tid.title) > -1 || endsWith(tid.title, "SetupFlag") ? true : false;
}

function isPlugin(tid) {
	return tid.tags.indexOf("systemConfig") > -1 ? true : false;
}

function isArtifact(tid) {
	var follow = tid.tags.indexOf("follow") > -1;
	var type = tid.type;
	if(follow || type) {
		return true;
	} else {
		return false;
	}
}

function chooseTiddlers(tiddlers) {
	var _tiddlers = [];
	for(var i = 0; i < tiddlers.length; i++) {
		var tid = tiddlers[i];
		if(!isPlugin(tid) && !isShadow(tid) && !isArtifact(tid)) {
			_tiddlers.push(tid);
		}
	}
	return _tiddlers;
}

function bubbleDown() {
	var friends = $(".friend");
	friends.css({ position: "relative" });
	var target;
	friends.each(function(i, el) {
		if(!target && $(el).hasClass("silentFriend") &&
			$(el).next(".friend").hasClass("noisyFriend")) {
			target = el;
		}
	});
	if(target) {
		var other = $(target).next(".friend");
		// we want to move target above the prev element
		// target is an element which has the class noisy and the previous node is quiet
		var swapDuration = 50;
		var otherHeight = other.height();
		var thisHeight = $(target).height();
		$(target).animate({ top: + otherHeight }, { duration: swapDuration });
		$(other).animate({ top:  - thisHeight }, { duration: swapDuration,
				complete: function() {
					var newTarget = $(target).clone(true).insertAfter(other)[0];
					$(target).remove();
					$(other).css({ top: 0 });
					$(newTarget).css({ top: 0 });
					bubbleDown();
				}
		});
	}
}

function renderTiddlerList(container,friend) {
	var tidList = $("<ul />").appendTo(container)[0];
	$("<li />").text("loading").appendTo(tidList);
	var oncompletion = function() {
		if($(".errorFriend,.silentFriend,.noisyFriend").length === $(".friend").length) {
			bubbleDown();
		}
	}
	$.ajax({ dataType: "json",
		url: "/search?q=modifier:" + friend + "&select=modified:>3d&sort=-modified",
		error: function() {
			$(container).addClass("errorFriend");
			oncompletion();
		},
		success: function(tiddlers) {
			$(tidList).empty();
			tiddlers = chooseTiddlers(tiddlers);
			if(tiddlers.length === 0) {
				$(container).addClass("silentFriend");
				$("<li />").text("No recent activity.").appendTo(tidList);
				oncompletion();
				return;
			} else {
				$(container).addClass("noisyFriend").removeClass("inactiveFriend");
				oncompletion();
			}
			for(var i=0; i < tiddlers.length; i++) {
				var tiddler = tiddlers[i];
				var item = $("<li />").appendTo(tidList)[0];
				var win;
				var space = tiddler.bag.split("_")[0];
				var spaceUrl = "http://" + space + ".tiddlyspace.com";
				var path = "/bags/" + tiddler.bag + "/tiddlers/" + encodeURIComponent(tiddler.title);
				var link = $("<a />").text(tiddler.title).
					attr("href", spaceUrl + path).
					data("path", path).
					click(function(ev) {
						var win = $(ev.target).data("win");
						if($(ev.target).hasClass("active")) {
							$(win).toggle(1000);
						} else {
							$(ev.target).addClass("active");
							$(".text", win).text("loading...");
							$(win).show();
							$.ajax({
								url: $(ev.target).data("path"),
								data: {
									render: "y"
								},
								dataType: "json",
								success: function(tiddler) {
									$(".text",win).html(tiddler.render);
									$(win).show(1000);
								},
								error: function() {
									$(".text", win).text("error loading that tiddler");
								}
							});
						}
						ev.preventDefault();
					}).
					appendTo(item)[0];
				var space = tiddler.bag.split("_")[0];
				$("<span />").text(" in ").appendTo(item);
				$("<a />").attr("href", spaceUrl).text(space).appendTo(item);
				$("<span />").text(" (" + prettyDate(tiddler.modified) + ")").appendTo(item);
				win = $("<div />").addClass("tiddler").appendTo(item)[0];
				$("<div />").addClass("text").appendTo(win);
				var toolbar = $("<div />").addClass("toolbar").appendTo(win)[0];
				var extra = $("<div />").addClass("extra").appendTo(win)[0];
				$("<button />").data("bag", tiddler.bag).data("title", tiddler.title).text("give feedback").
					data("revision", tiddler.revision).click(function(ev) {
					var title = $(ev.target).data("title");
					var revision = $(ev.target).data("revision");
					var bag = $(ev.target).data("bag");
					var revisionURL = host + "/bags/" + bag + "/tiddlers/" + encodeURIComponent(title) + "/revisions/" + revision;
					var space = bag.split("_")[0];
					var area = $(ev.target).parents(".tiddler").children(".extra")[0];
					$(area).hide();
					$("<textarea />").appendTo(area);
					$("<button />").text("save feedback").click(function(ev) {
						var tid = new tiddlyweb.Tiddler("Feedback for " + title, userbag);
						tid.tags = ["feedback", "@" + space];
						tid.text = ["In reply to [[", title, "]]@", space,
							" (revision [[", revision, "|", revisionURL, "]])\n\n"].join("") + $("textarea", area).val();
						tid.put(function(tiddler) {
							$(area).empty();
							$("<span />").text("your comment: ").appendTo(area);
							$("<a />").attr("href", "/" + encodeURIComponent(tiddler.title)).text(tiddler.title).appendTo(area);
						}, function() {
							printError("error commenting!");
						});
					}).appendTo(area);
					$(area).show(1000);
					ev.preventDefault();
					$(ev.target).remove();
					return false;
				}).appendTo(toolbar);

				$(win).hide();
				$(link).data("win", win);
			}
		}
	})
}

function removeFriend(friend) {
	var tiddler = new tiddlyweb.Tiddler("@" + friend, userbag);
	var success = function() {
		printMessage("User removed from friends");
		var newFriends = [];
		for(var i = 0; i < friends.length; i++) {
			var f = friends[i];
			if(f !== friend) {
				newFriends.push(f);
			}
		}
		friends = newFriends;
		$("#friend-" + friend).hide(2000);
	};
	tiddler["delete"](success, function() {
		var old = new tiddlyweb.Tiddler(friend, userbag);
		old["delete"](success, function() {
			printError("Unable to remove friend " + friend);
		})
	})
}

function renderFriend(list, friend) {
	var bag = friend + "_public";
	var item = $("<li />").addClass("friend").attr("id", "friend-" + friend).addClass("inactiveFriend").appendTo(list)[0];
	$("<img />").attr("alt", friend).attr("title", friend).
		attr("src", host + "/bags/" + bag + "/tiddlers/SiteIcon").css({ width: 48, height: 48 }).appendTo(item);
	var heading = $("<h2>").appendTo(item)[0];
	$("<a />").attr("href", "#friend-" + friend).attr("name", "friend-" + friend).text(friend).appendTo(heading);
	$("<button />").data("who", friend).text("remove from friends").
		click(function(ev) {
			if(confirm("Are you sure you want to remove " + friend + " as a friend?")) {
				removeFriend($(ev.target).data("who"));
			}
		}).appendTo(item)[0];
	renderTiddlerList(item,friend);
}

function renderFriends() {
	var list = $("<ul />").appendTo("#friends")[0];
	$("<li />").text("Activity of your friends will appear below when available").appendTo(list);
	for(var i = 0; i < friends.length; i++) {
		var friend = friends[i];
		renderFriend(list, friend);
	}
}

function followWidget() {
	$("#friends").empty();
	var container = $("<div />").addClass("addfriends").appendTo("#friends")[0];
	$("<input />").attr("name", "friend").appendTo(container);
	$("<button />").text("add friend").click(function(ev) {
		var friend = $(ev.target).parent().children("[name='friend']").val();
		if(friends.indexOf(friend) > -1) {
			return printError("You already follow " + friend + "!");
		}

		var title;
		if(friend.indexOf("@") !== 0) {
			title = "@" + friend;
		} else {
			title = friend;
		}

		$.ajax({ dataType: "text", url: "/users/" + friend,
			success: function() {
				var tid = new tiddlyweb.Tiddler(title, userbag);
				tid.tags = ["follow", "excludeLists"];
				tid.put(function(tiddler) {
					printMessage("Added friend " + friend);
					renderFriend($("#friends ul")[0], friend);
					window.location.hash = "#friend-" + friend;
				}, function() {
					printError("Failed to add friend " + friend);
				})
			},
			error: function() {
				printError("No one with name " + friend + " exists!");
			}
		});
	}).appendTo(container);
	renderFriends();
}
$.ajax({
	url: "/status",
	dataType: "json",
	success: function(status) {
		user = status.username;
		userbag = new tiddlyweb.Bag(user + "_public", "/");
		$.ajax({ url: "/bags/" + user + "_public/tiddlers?select=tag:follow", dataType: "json", success: function(tiddlers) {
				for(var i = 0; i < tiddlers.length; i++) {
					var title = tiddlers[i].title;
					if(title.indexOf("@") === 0) {
						title = title.substr(1, title.length);
					}
					friends.push(title);
				}
				friends.sort();
				followWidget();
			}
		});
	}
})
「[[给李彦宏先生的一封信_韩寒_新浪博客|http://blog.sina.com.cn/s/blog_4701280b01017ijj.html]]」
<<<
您一定知道如果百度开了一个叫百度美国的搜索引擎,然后把全美国所有的作家的书和所有音乐人的音乐都放在百度美国上面免费共享会是什么样的一个结果。您不会这么做,您也不会和美国人去谈什么这只是一个平台,和我没关系,都是网民自己干的,互联网的精神是共享。因为您知道这事儿只有在现在的中国才能成立。
<<<
*穿著溫暖的外套入睡,或把外套擺床頭備用,這樣要鑽出被窩時就不會太掙扎
*起床後趕快做點事(如打掃浴室……<<8-)>>),或做點小暖身操?
好爆笑!喜愛「灌籃高手」的觀眾朋友請別錯過!<<;)>>
〔原內嵌 YouTube 影音已移除〕
----
*囧,YouTube 說影片涉及侵權,已被移除 <<XD>> -- 14:52
*Okay,因為 YouTube 上的影片都是轉載,所以回頭看原作者的 blog 就行了:http://www.wretch.cc/video/v90524&func=single&vid=6324698
iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAAAXNSR0IArs4c6QAAAIdQTFRF+/Pg/////uRK/OhS6rQl/NxD9M441KUprJBMmnQn1ZMn/fFa7bsp+dQ+n0AhaiIX/e1W47Y19MIw8tiZzrmO3q0tuokv+e7R5NjC+ck00L819vHr/fnw/Pju38aR3p0+79GA5tJ96+DGwKt47MM39OvU6Mlv8+/m+fTr9vDf3cJo8rwz7daTugjw1QAAAAF0Uk5TAEDm2GYAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfaDA0PLBRgXFjbAAAA4ElEQVQY032RyZLDIAxEHQESZnEA49jJIZP9MJP//74I7HGlckhfVHrVJVqiab5q7E/9+MF6VCDA3x7vEMFaIQSAj/cVessKAQCUWjHas9ZnNj+0/kVaZoLQm40OohZ0x8VaW7vQVM2jCqHdbtsgoJR9oss8oFKxUCcz0xOAOLTtgRNwoeTktXgVY45aYnlE54biHXmtmTHcs5Wm8tyN++4nKu8H00kpdzXZE70nxjGazkhJeV4jIrKryJh/K2tIicgUMZzW85D8c87xTHqDTXMkGuRAu/xx90u+5un7d70AB5EMoZorGYkAAAAASUVORK5CYII=
中午吃少點避免下午精神不濟,但下午又餓了又買午茶,結果傍晚又想睡覺……怎麼會這麼難搞!
----
^^@@7/4@@^^ 一直想瞭解怎樣吃才可以避免工作時昏昏欲睡,又不至於每次都吃得很少很難過,剛就找到這篇:「[[消除疲勞的飲食法|http://www.chtr.org.tw/np5GaFile/ga006.htm]]」,摘錄如下:
<<<
*或許有人以為糖應該是可以提供熱量的食物,但事實上糖會使人的反應變慢,不僅會提高血清素在大腦中的濃度,還會使人憂鬱,因為他會使你體內其他地方的能量快速轉移來分解它。
*多喝水,就算不覺得口渴也要隨時補充:脫水的情況其實是比你想像的更常見,且會造成任性和疲勞。
*午餐要吃的清淡,並且要攝取富有蛋白質的食物:任何一頓餐,若攝取超過1000卡,就會使人變得緩慢、昏昏欲睡,所以午餐吃太多難以消化的食物是禍因。另外,若攝取太多碳水化合物而沒有攝取一點蛋白質的話(像是只吃麵),會使大腦裡的血清素大量提高,攝取太多的脂肪也會有同樣的效果。因此午餐要吃的滿足,吃的有點點飽。
<<<
看來「糖」和「醣類」是兩回事!怪不得我每次想說吃甜點來提神,買了鳳梨酥或蛋糕之類來當下午茶,結果不一會兒就想睡覺……@#!@#

那所以說午餐應該要吃有蛋白質又有一點碳水化合物囉?所以滷肉飯是 okay 的?<<:o>>
----
另外還有兩篇關於午睡及飲食的文章:
*「[[午睡非懶惰,健康快樂多|http://blueskyelaine.mysinablog.com/index.php?op=ViewArticle&articleId=1447886]]」說到飯後先不要立刻睡,半小時後再睡,睡約半小時到一個半小時即可,且最好躺著。
*「[[蔬果酵素多 健康加分|http://www.newmyhealth.url.tw/health2/health/b5/b3/427.htm]]」說到生鮮蔬果富含可以消化蛋白質的酵素。

所以說,碳水化合物也要、蛋白質也要、生菜水果也要,然後要少吃甜食(包括甜的飲料嗎 <<囧>>)、多喝水。果然均衡才是王道啊!
----
^^@@7/7@@^^ 沒吃早餐、午餐至今,工作起來比較有精神的樣子(當然我今早也睡到十點才起來……)。是不是乾脆以後上班日白天都禁食好了?
/***
|''Name''|ErrorHandlerPlugin|
|''Version''|0.4.3|
|''Author''|Jon Robson|
|''Description''|Localised tiddler save errors including edit conflict resolution.|
|''CoreVersion''|2.6.1|
|''Requires''|TiddlySpaceConfig|
***/
//{{{
(function($) {

var tiddlyspace = config.extensions.tiddlyspace;
var currentSpace = tiddlyspace.currentSpace.name;
tiddlyspace.getLocalTitle = function(title, workspace, suffix) {
	var endsWith = config.extensions.BinaryTiddlersPlugin.endsWith;
	if(!suffix) {
		var isPublic = endsWith(workspace, "_public");
		suffix = tiddlyspace.resolveSpaceName(workspace);
		if(currentSpace == suffix) {
			suffix = isPublic ? "public" : "private";
		} else {
			suffix = "@%0".format(suffix);
		}
	}
	return "%0 *(%1)*".format(title, suffix);
};

var sssp = config.extensions.ServerSideSavingPlugin;

var msgs = config.messages.editConflict = {
	loading: "Loading..",
	resolve: "[[Edit Conflict]]@glossary: this tiddler may have been changed by someone else.",
	reviewDiff: "review (recommended)",
	reviewDiffTooltip: "review changes made to this tiddler",
	reviewDiffError: "error retrieving revision.",
	save: "overwrite",
	saveTooltip: "make this revision the top revision of this tiddler",
	discard: "cancel",
	discardTooltip: "undo changes to this tiddler and get most recent version",
	diffTitle: "%0",
	diffFieldTitle: "%0 - fields",
	diffTextTitle: "%0 - text",
	updating: "updating your version...",
	diffHeader: ["Review the changes that have been made whilst you were editing this tiddler. ",
		"Fold relevant changes back into your version.\n",
		"{{removed{Red}}} highlight shows content removed. ",
		"{{added{Green}}} highlight shows content added.\n"].join(""),
	diffTextHeader: "View changes in text",
	diffFieldsHeader: "View changes in fields"
};

var plugin = config.extensions.errorHandler = {
	diffTags: ["excludeLists", "excludeMissing", "excludeSearch"],
	displayMessage: function(message, tiddler, context) {
		var desc = context && context.httpStatus ? context.statusText :
			sssp.locale.connectionError;
		var reportArea = plugin.reportError(tiddler.title);
		var msg = $("<div />").appendTo(reportArea);
		if(message == "saveConflict") {
			wikify(msgs.resolve, msg[0]);
			var choiceArea = $("<div />").appendTo(reportArea)[0];
			plugin.editConflictHandler(choiceArea, tiddler);
		} else {
			msg.text(sssp.locale[message].format(tiddler.title, desc));
		}
	},
	editConflictHandler: function(container, tiddler) {
		var title = tiddler.title;
		var myrev = tiddler.fields["server.page.revision"];
		// note user now needs to edit, fix problem and save. 
		// TODO: make sure this gets reset in save callback
		store.getTiddler(title).fields["server.page.revision"] = "false";

		var diffBtn = createTiddlyButton(container, msgs.reviewDiff, msgs.reviewDiffTooltip, function(ev) {
			var title = $(ev.target).data("title");
			plugin.displayDiff(ev.target, store.getTiddler(title), myrev);
		});
		var saveBtn = createTiddlyButton(container, msgs.save, msgs.saveTooltip, function(ev) {
				var title = $(ev.target).data("title");
				var tid = store.saveTiddler(store.getTiddler(title));
				autoSaveChanges(null, [tid]);
			});
		var ignoreBtn = createTiddlyButton(container, msgs.discard, msgs.discardTooltip, function(ev) {
			var title = $(ev.target).text(msgs.updating).data("title");
			plugin.resetToServerVersion(store.getTiddler(title));
		});
		$([diffBtn, ignoreBtn, saveBtn]).data("title", title);
	},
	getDiffTiddlerTexts: function(diffText) {
		var chunks = diffText.split("\n  \n");
		if(chunks.length < 2) {
			return [chunks[0], ""];
		} else {
			var diffFieldsText = "{{diff{\n%0\n}}}".format(chunks[0]);
			diffText = '{{diff{\n%0\n}}}'.format(chunks.splice(1, chunks.length).join("\n"));
			return [diffText, diffFieldsText];
		}
	},
	makeDiffTiddler: function(title, diff) {
		var newTiddler = new Tiddler(title);
		var tags = plugin.diffTags;
		newTiddler.text = msgs.loading;
		newTiddler.fields.doNotSave = true;
		newTiddler.tags = diff ? tags.concat(["diff"]) : tags;
		newTiddler = store.saveTiddler(newTiddler);
		$.extend(store.getTiddler(title).fields,
			config.defaultCustomFields); // allow option to save it
		return newTiddler;
	},
	displayDiff: function(src, tiddler, latestRevision) {
		var adaptor = tiddler.getAdaptor();
		var title = tiddler.title;
		var ts = new Date().formatString("0hh:0mm:0ss");
		var suffix = "edit conflict %0".format(ts);
		var diffTitle = tiddlyspace.getLocalTitle(msgs.diffTitle.format(title), "", suffix);
		var diffTextTitle = tiddlyspace.getLocalTitle(msgs.diffTextTitle.format(title), "", suffix);
		var diffFieldsTitle = tiddlyspace.getLocalTitle(msgs.diffFieldTitle.format(title), "", suffix);
		plugin.makeDiffTiddler(diffTextTitle, true);
		plugin.makeDiffTiddler(diffFieldsTitle, true);
		var newTiddler = plugin.makeDiffTiddler(diffTitle, false);
		newTiddler.text = ['%0\n<<slider chkViewDiffText "%1" "%2">>\n',
			'<<slider chkViewDiffField "%3" "%4">>'].join("").
			format(msgs.diffHeader, diffTextTitle, msgs.diffTextHeader,
				diffFieldsTitle, msgs.diffFieldsHeader);
		store.saveTiddler(newTiddler);

		var callback = function(r) {
			var text = plugin.getDiffTiddlerTexts(r);
			store.getTiddler(diffTextTitle).text = text[0];
			store.getTiddler(diffFieldsTitle).text = text[1];
			story.refreshTiddler(diffTitle, null, true);
		};
		var workspace = "bags/%0".format(tiddler.fields["server.bag"]);
		ajaxReq({
			type: "get",
			dataType: "text",
			url: "/diff?format=unified&rev1=%0/%1/%2&rev2=%0/%1".format(workspace, title, latestRevision),
			success: callback,
			error: function() {
				displayMessage(msgs.reviewDiffError);
			}
		});
		story.displayTiddler(src, diffTitle);
	},
	resetToServerVersion: function(tiddler) {
		var adaptor = tiddler.getAdaptor();
		var ctx = { 
			host: tiddler.fields["server.host"],
			workspace: "bags/" + tiddler.fields["server.bag"]
		};
		adaptor.getTiddler(tiddler.title, ctx, null, function(context) {
			store.saveTiddler(context.tiddler);
			story.refreshTiddler(tiddler.title);
			store.setDirty(false);
		});
	},
	reportError: function(title) {
		var el = story.getTiddler(title);
		if(!el) {
			el = story.displayTiddler(null, title);
		}
		return $("<div />").addClass("error annotation").prependTo(el)[0];
	}
};

sssp.reportFailure = function(message, tiddler, context) {
	config.options.chkViewDiffText = config.options.chkViewDiffText === undefined ?
		true : config.options.chkViewDiffText;
	config.options.chkViewDiffFields = config.options.chkViewDiffFields || false;
	plugin.displayMessage(message, tiddler, context);
};

})(jQuery);
//}}}
{{p{
爸轉到 Discovery「美麗中國:熊貓之鄉」節目,剛好在介紹「秦嶺羚牛」這種動物,天啊我真是沒聽過哩 <<:p>>}}}
{{p{
說是羚牛,我看長相還有棲息山坡、雄性相鬥的行為,猜應該是羊亞科的吧!}}}
  原本是教會中區足球聯賽本賽季最後一日,但因為前一晚大雨導致臺體球場積水不堪使用,只好改成去人工草皮踢小比賽囉!

  很感謝 神,雖然我只能踢半小時左右就得先離開,卻在一個開角球的機會中,福至心靈發揮了前一天(週五)晨運練習吊球的成效,開出了夠高的弧線,飛了……20 公尺吧 <<XD>>(小場嘛,而且我目前還開不了多遠),由冠嘉跳高帥氣頂入門框。讚啦!這感覺真是太美妙了!

  很感謝聖三位透過翊銘、凱竣等人天使弟弟分享給我輕鬆把球踢起來的訣竅。<<大心>> 希望很快就能踢出比那顆球更漂亮的吊球囉!
〔持續更新〕
*綠豆糕
*綠豆椪
*蛋黃酥
*鳳梨酥
*義美小羊羹
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.5 (2010-02-16)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2010 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Community:''|[[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]]|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!

For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1. 
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Source Code
***/
/***
This plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.5.js]] to get the readable source code.
***/
///%
if(!version.extensions.YourSearchPlugin){version.extensions.YourSearchPlugin={major:2,minor:1,revision:5,source:"http://tiddlywiki.abego-software.de/#YourSearchPlugin",licence:"[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",copyright:"Copyright (c) abego Software GmbH, 2005-2010 (www.abego-software.de)"};if(!window.abego){window.abego={};}if(!Array.forEach){Array.forEach=function(_1,_2,_3){for(var i=0,_4=_1.length;i<_4;i++){_2.call(_3,_1[i],i,_1);}};Array.prototype.forEach=function(_5,_6){for(var i=0,_7=this.length;i<_7;i++){_5.call(_6,this[i],i,this);}};}abego.toInt=function(s,_8){if(!s){return _8;}var n=parseInt(s);return (n==NaN)?_8:n;};abego.createEllipsis=function(_9){var e=createTiddlyElement(_9,"span");e.innerHTML="&hellip;";};abego.shallowCopy=function(_a){if(!_a){return _a;}var _b={};for(var n in _a){_b[n]=_a[n];}return _b;};abego.copyOptions=function(_c){return !_c?{}:abego.shallowCopy(_c);};abego.countStrings=function(_d,s){if(!s){return 0;}var _e=s.length;var n=0;var _f=0;while(1){var i=_d.indexOf(s,_f);if(i<0){return n;}n++;_f=i+_e;}return n;};abego.getBracedText=function(_10,_11,_12){if(!_11){_11=0;}var re=/\{([^\}]*)\}/gm;re.lastIndex=_11;var m=re.exec(_10);if(m){var s=m[1];var _13=abego.countStrings(s,"{");if(!_13){if(_12){_12.lastIndex=re.lastIndex;}return s;}var len=_10.length;for(var i=re.lastIndex;i<len&&_13;i++){var c=_10.charAt(i);if(c=="{"){_13++;}else{if(c=="}"){_13--;}}}if(!_13){if(_12){_12.lastIndex=i-1;}return _10.substring(m.index+1,i-1);}}};abego.select=function(_14,_15,_16,_17){if(!_17){_17=[];}_14.forEach(function(t){if(_15.call(_16,t)){_17.push(t);}});return _17;};abego.consumeEvent=function(e){if(e.stopPropagation){e.stopPropagation();}if(e.preventDefault){e.preventDefault();}e.cancelBubble=true;e.returnValue=true;};abego.TiddlerFilterTerm=function(_18,_19){if(!_19){_19={};}var _1a=_18;if(!_19.textIsRegExp){_1a=_18.escapeRegExp();if(_19.fullWordMatch){_1a="\\b"+_1a+"\\b";}}var _1b=new RegExp(_1a,"m"+(_19.caseSensitive?"":"i"));this.tester=new abego.MultiFieldRegExpTester(_1b,_19.fields,_19.withExtendedFields);};abego.TiddlerFilterTerm.prototype.test=function(_1c){return this.tester.test(_1c);};abego.parseNewTiddlerCommandLine=function(s){var m=/(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);if(!m){m=/([^#]*)()(#.*)?/.exec(s);}if(m){var r;if(m[3]){var s2=m[3].replace(/#/g,"");r=s2.parseParams("tag");}else{r=[[]];}var _1d=m[2]?m[2].trim():"";r.push({name:"text",value:_1d});r[0].text=[_1d];return {title:m[1].trim(),params:r};}else{return {title:s.trim(),params:[[]]};}};abego.parseTiddlerFilterTerm=function(_1e,_1f,_20){var re=/\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg;var _21={"!":"title","%":"text","#":"tags"};var _22={};var _23;re.lastIndex=_1f;while(1){var i=re.lastIndex;var m=re.exec(_1e);if(!m||m.index!=i){throw "Word or String literal expected";}if(m[1]){var _24={};var _25=abego.getBracedText(_1e,0,_24);if(!_25){throw "Invalid {...} syntax";}var f=Function("tiddler","return ("+_25+");");return {func:f,lastIndex:_24.lastIndex,markRE:null};}if(m[2]){_23=true;}else{if(m[3]){_22[_21[m[3]]]=1;}else{if(m[4]){_22[m[4]]=1;}else{var _26=m[6];var _27=m[5]?window.eval(m[5]):m[6]?m[6]:m[7]?m[7]:m[8];var _20=abego.copyOptions(_20);_20.fullWordMatch=_23;_20.textIsRegExp=_26;var _28=[];for(var n in _22){_28.push(n);}if(_28.length==0){_20.fields=_20.defaultFields;}else{_20.fields=_28;_20.withExtendedFields=false;}var _29=new abego.TiddlerFilterTerm(_27,_20);var _2a=_26?_27:_27.escapeRegExp();if(_2a&&_23){_2a="\\b"+_2a+"\\b";}return {func:function(_2b){return _29.test(_2b);},lastIndex:re.lastIndex,markRE:_2a?"(?:"+_2a+")":null};}}}}};abego.BoolExp=function(s,_2c,_2d){this.s=s;var _2e=_2d&&_2d.defaultOperationIs_OR;var _2f=/\s*(?:(\-|not)|(\())/gi;var _30=/\s*\)/g;var _31=/\s*(?:(and|\&\&)|(or|\|\|))/gi;var _32=/\s*[^\)\s]/g;var _33=/\s*(\-|not)?(\s*\()?/gi;var _34;var _35=function(_36){_33.lastIndex=_36;var m=_33.exec(s);var _37;var _38;if(m&&m.index==_36){_36+=m[0].length;_37=m[1];if(m[2]){var e=_34(_36);_30.lastIndex=e.lastIndex;if(!_30.exec(s)){throw "Missing ')'";}_38={func:e.func,lastIndex:_30.lastIndex,markRE:e.markRE};}}if(!_38){_38=_2c(s,_36,_2d);}if(_37){_38.func=(function(f){return function(_39){return !f(_39);};})(_38.func);_38.markRE=null;}return _38;};_34=function(_3a){var _3b=_35(_3a);while(1){var l=_3b.lastIndex;_31.lastIndex=l;var m=_31.exec(s);var _3c;var _3d;if(m&&m.index==l){_3c=!m[1];_3d=_35(_31.lastIndex);}else{try{_3d=_35(l);}catch(e){return _3b;}_3c=_2e;}_3b.func=(function(_3e,_3f,_40){return _40?function(_41){return _3e(_41)||_3f(_41);}:function(_42){return _3e(_42)&&_3f(_42);};})(_3b.func,_3d.func,_3c);_3b.lastIndex=_3d.lastIndex;if(!_3b.markRE){_3b.markRE=_3d.markRE;}else{if(_3d.markRE){_3b.markRE=_3b.markRE+"|"+_3d.markRE;}}}};var _43=_34(0);this.evalFunc=_43.func;if(_43.markRE){this.markRegExp=new RegExp(_43.markRE,_2d.caseSensitive?"mg":"img");}};abego.BoolExp.prototype.exec=function(){return this.evalFunc.apply(this,arguments);};abego.BoolExp.prototype.getMarkRegExp=function(){return this.markRegExp;};abego.BoolExp.prototype.toString=function(){return this.s;};abego.MultiFieldRegExpTester=function(re,_44,_45){this.re=re;this.fields=_44?_44:["title","text","tags"];this.withExtendedFields=_45;};abego.MultiFieldRegExpTester.prototype.test=function(_46){var re=this.re;for(var i=0;i<this.fields.length;i++){var s=store.getValue(_46,this.fields[i]);if(typeof s=="string"&&re.test(s)){return this.fields[i];}}if(this.withExtendedFields){return store.forEachField(_46,function(_47,_48,_49){return typeof _49=="string"&&re.test(_49)?_48:null;},true);}return null;};abego.TiddlerQuery=function(_4a,_4b,_4c,_4d,_4e){if(_4c){this.regExp=new RegExp(_4a,_4b?"mg":"img");this.tester=new abego.MultiFieldRegExpTester(this.regExp,_4d,_4e);}else{this.expr=new abego.BoolExp(_4a,abego.parseTiddlerFilterTerm,{defaultFields:_4d,caseSensitive:_4b,withExtendedFields:_4e});}this.getQueryText=function(){return _4a;};this.getUseRegExp=function(){return _4c;};this.getCaseSensitive=function(){return _4b;};this.getDefaultFields=function(){return _4d;};this.getWithExtendedFields=function(){return _4e;};};abego.TiddlerQuery.prototype.test=function(_4f){if(!_4f){return false;}if(this.regExp){return this.tester.test(_4f);}return this.expr.exec(_4f);};abego.TiddlerQuery.prototype.filter=function(_50){return abego.select(_50,this.test,this);};abego.TiddlerQuery.prototype.getMarkRegExp=function(){if(this.regExp){return "".search(this.regExp)>=0?null:this.regExp;}return this.expr.getMarkRegExp();};abego.TiddlerQuery.prototype.toString=function(){return (this.regExp?this.regExp:this.expr).toString();};abego.PageWiseRenderer=function(){this.firstIndexOnPage=0;};merge(abego.PageWiseRenderer.prototype,{setItems:function(_51){this.items=_51;this.setFirstIndexOnPage(0);},getMaxPagesInNavigation:function(){return 10;},getItemsCount:function(_52){return this.items?this.items.length:0;},getCurrentPageIndex:function(){return Math.floor(this.firstIndexOnPage/this.getItemsPerPage());},getLastPageIndex:function(){return Math.floor((this.getItemsCount()-1)/this.getItemsPerPage());},setFirstIndexOnPage:function(_53){this.firstIndexOnPage=Math.min(Math.max(0,_53),this.getItemsCount()-1);},getFirstIndexOnPage:function(){this.firstIndexOnPage=Math.floor(this.firstIndexOnPage/this.getItemsPerPage())*this.getItemsPerPage();return this.firstIndexOnPage;},getLastIndexOnPage:function(){return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1,this.getItemsCount()-1);},onPageChanged:function(_54,_55){},renderPage:function(_56){if(_56.beginRendering){_56.beginRendering(this);}try{if(this.getItemsCount()){var _57=this.getLastIndexOnPage();var _58=-1;for(var i=this.getFirstIndexOnPage();i<=_57;i++){_58++;_56.render(this,this.items[i],i,_58);}}}finally{if(_56.endRendering){_56.endRendering(this);}}},addPageNavigation:function(_59){if(!this.getItemsCount()){return;}var _5a=this;var _5b=function(e){if(!e){var e=window.event;}abego.consumeEvent(e);var _5c=abego.toInt(this.getAttribute("page"),0);var _5d=_5a.getCurrentPageIndex();if(_5c==_5d){return;}var _5e=_5c*_5a.getItemsPerPage();_5a.setFirstIndexOnPage(_5e);_5a.onPageChanged(_5c,_5d);};var _5f;var _60=this.getCurrentPageIndex();var _61=this.getLastPageIndex();if(_60>0){_5f=createTiddlyButton(_59,"Previous","Go to previous page (Shortcut: Alt-'<')",_5b,"prev");_5f.setAttribute("page",(_60-1).toString());_5f.setAttribute("accessKey","<");}for(var i=-this.getMaxPagesInNavigation();i<this.getMaxPagesInNavigation();i++){var _62=_60+i;if(_62<0){continue;}if(_62>_61){break;}var _63=(i+_60+1).toString();var _64=_62==_60?"currentPage":"otherPage";_5f=createTiddlyButton(_59,_63,"Go to page %0".format([_63]),_5b,_64);_5f.setAttribute("page",(_62).toString());}if(_60<_61){_5f=createTiddlyButton(_59,"Next","Go to next page (Shortcut: Alt-'>')",_5b,"next");_5f.setAttribute("page",(_60+1).toString());_5f.setAttribute("accessKey",">");}}});abego.LimitedTextRenderer=function(){var _65=40;var _66=4;var _67=function(_68,_69,_6a){var n=_68.length;if(n==0){_68.push({start:_69,end:_6a});return;}var i=0;for(;i<n;i++){var _6b=_68[i];if(_6b.start<=_6a&&_69<=_6b.end){var r;var _6c=i+1;for(;_6c<n;_6c++){r=_68[_6c];if(r.start>_6a||_69>_6b.end){break;}}var _6d=_69;var _6e=_6a;for(var j=i;j<_6c;j++){r=_68[j];_6d=Math.min(_6d,r.start);_6e=Math.max(_6e,r.end);}_68.splice(i,_6c-i,{start:_6d,end:_6e});return;}if(_6b.start>_6a){break;}}_68.splice(i,0,{start:_69,end:_6a});};var _6f=function(_70){var _71=0;for(var i=0;i<_70.length;i++){var _72=_70[i];_71+=_72.end-_72.start;}return _71;};var _73=function(c){return (c>="a"&&c<="z")||(c>="A"&&c<="Z")||c=="_";};var _74=function(s,_75){if(!_73(s[_75])){return null;}for(var i=_75-1;i>=0&&_73(s[i]);i--){}var _76=i+1;var n=s.length;for(i=_75+1;i<n&&_73(s[i]);i++){}return {start:_76,end:i};};var _77=function(s,_78,_79){var _7a;if(_79){_7a=_74(s,_78);}else{if(_78<=0){return _78;}_7a=_74(s,_78-1);}if(!_7a){return _78;}if(_79){if(_7a.start>=_78-_66){return _7a.start;}if(_7a.end<=_78+_66){return _7a.end;}}else{if(_7a.end<=_78+_66){return _7a.end;}if(_7a.start>=_78-_66){return _7a.start;}}return _78;};var _7b=function(s,_7c){var _7d=[];if(_7c){var _7e=0;var n=s.length;var _7f=0;do{_7c.lastIndex=_7e;var _80=_7c.exec(s);if(_80){if(_7e<_80.index){var t=s.substring(_7e,_80.index);_7d.push({text:t});}_7d.push({text:_80[0],isMatch:true});_7e=_80.index+_80[0].length;}else{_7d.push({text:s.substr(_7e)});break;}}while(true);}else{_7d.push({text:s});}return _7d;};var _81=function(_82){var _83=0;for(var i=0;i<_82.length;i++){if(_82[i].isMatch){_83++;}}return _83;};var _84=function(s,_85,_86,_87,_88){var _89=Math.max(Math.floor(_88/(_87+1)),_65);var _8a=Math.max(_89-(_86-_85),0);var _8b=Math.min(Math.floor(_86+_8a/3),s.length);var _8c=Math.max(_8b-_89,0);_8c=_77(s,_8c,true);_8b=_77(s,_8b,false);return {start:_8c,end:_8b};};var _8d=function(_8e,s,_8f){var _90=[];var _91=_81(_8e);var pos=0;for(var i=0;i<_8e.length;i++){var t=_8e[i];var _92=t.text;if(t.isMatch){var _93=_84(s,pos,pos+_92.length,_91,_8f);_67(_90,_93.start,_93.end);}pos+=_92.length;}return _90;};var _94=function(s,_95,_96){var _97=_96-_6f(_95);while(_97>0){if(_95.length==0){_67(_95,0,_77(s,_96,false));return;}else{var _98=_95[0];var _99;var _9a;if(_98.start==0){_99=_98.end;if(_95.length>1){_9a=_95[1].start;}else{_67(_95,_99,_77(s,_99+_97,false));return;}}else{_99=0;_9a=_98.start;}var _9b=Math.min(_9a,_99+_97);_67(_95,_99,_9b);_97-=(_9b-_99);}}};var _9c=function(_9d,s,_9e,_9f,_a0){if(_9f.length==0){return;}var _a1=function(_a2,s,_a3,_a4,_a5){var t;var _a6;var pos=0;var i=0;var _a7=0;for(;i<_a3.length;i++){t=_a3[i];_a6=t.text;if(_a4<pos+_a6.length){_a7=_a4-pos;break;}pos+=_a6.length;}var _a8=_a5-_a4;for(;i<_a3.length&&_a8>0;i++){t=_a3[i];_a6=t.text.substr(_a7);_a7=0;if(_a6.length>_a8){_a6=_a6.substr(0,_a8);}if(t.isMatch){createTiddlyElement(_a2,"span",null,"marked",_a6);}else{createTiddlyText(_a2,_a6);}_a8-=_a6.length;}if(_a5<s.length){abego.createEllipsis(_a2);}};if(_9f[0].start>0){abego.createEllipsis(_9d);}var _a9=_a0;for(var i=0;i<_9f.length&&_a9>0;i++){var _aa=_9f[i];var len=Math.min(_aa.end-_aa.start,_a9);_a1(_9d,s,_9e,_aa.start,_aa.start+len);_a9-=len;}};this.render=function(_ab,s,_ac,_ad){if(s.length<_ac){_ac=s.length;}var _ae=_7b(s,_ad);var _af=_8d(_ae,s,_ac);_94(s,_af,_ac);_9c(_ab,s,_ae,_af,_ac);};};(function(){function _b0(msg){alert(msg);throw msg;};if(version.major<2||(version.major==2&&version.minor<1)){_b0("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");}abego.YourSearch={};var _b1;var _b2;var _b3=function(_b4){_b1=_b4;};var _b5=function(){return _b1?_b1:[];};var _b6=function(){return _b1?_b1.length:0;};var _b7=4;var _b8=10;var _b9=2;var _ba=function(s,re){var m=s.match(re);return m?m.length:0;};var _bb=function(_bc,_bd){var _be=_bd.getMarkRegExp();if(!_be){return 1;}var _bf=_bc.title.match(_be);var _c0=_bf?_bf.length:0;var _c1=_ba(_bc.getTags(),_be);var _c2=_bf?_bf.join("").length:0;var _c3=_bc.title.length>0?_c2/_bc.title.length:0;var _c4=_c0*_b7+_c1*_b9+_c3*_b8+1;return _c4;};var _c5=function(_c6,_c7,_c8,_c9,_ca,_cb){_b2=null;var _cc=_c6.reverseLookup("tags",_cb,false);try{var _cd=[];if(config.options.chkSearchInTitle){_cd.push("title");}if(config.options.chkSearchInText){_cd.push("text");}if(config.options.chkSearchInTags){_cd.push("tags");}_b2=new abego.TiddlerQuery(_c7,_c8,_c9,_cd,config.options.chkSearchExtendedFields);}catch(e){return [];}var _ce=_b2.filter(_cc);var _cf=abego.YourSearch.getRankFunction();for(var i=0;i<_ce.length;i++){var _d0=_ce[i];var _d1=_cf(_d0,_b2);_d0.searchRank=_d1;}if(!_ca){_ca="title";}var _d2=function(a,b){var _d3=a.searchRank-b.searchRank;if(_d3==0){if(a[_ca]==b[_ca]){return (0);}else{return (a[_ca]<b[_ca])?-1:+1;}}else{return (_d3>0)?-1:+1;}};_ce.sort(_d2);return _ce;};var _d4=80;var _d5=50;var _d6=250;var _d7=50;var _d8=25;var _d9=10;var _da="yourSearchResult";var _db="yourSearchResultItems";var _dc;var _dd;var _de;var _df;var _e0;var _e1=function(){if(version.extensions.YourSearchPlugin.styleSheetInited){return;}version.extensions.YourSearchPlugin.styleSheetInited=true;setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");};var _e2=function(){return _dd!=null&&_dd.parentNode==document.body;};var _e3=function(){if(_e2()){document.body.removeChild(_dd);}};var _e4=function(e){_e3();var _e5=this.getAttribute("tiddlyLink");if(_e5){var _e6=this.getAttribute("withHilite");var _e7=highlightHack;if(_e6&&_e6=="true"&&_b2){highlightHack=_b2.getMarkRegExp();}story.displayTiddler(this,_e5);highlightHack=_e7;}return (false);};var _e8=function(){if(!_de){return;}var _e9=_de;var _ea=findPosX(_e9);var _eb=findPosY(_e9);var _ec=_e9.offsetHeight;var _ed=_ea;var _ee=_eb+_ec;var _ef=findWindowWidth();if(_ef<_dd.offsetWidth){_dd.style.width=(_ef-100)+"px";_ef=findWindowWidth();}var _f0=_dd.offsetWidth;if(_ed+_f0>_ef){_ed=_ef-_f0-30;}if(_ed<0){_ed=0;}_dd.style.left=_ed+"px";_dd.style.top=_ee+"px";_dd.style.display="block";};var _f1=function(){if(_dd){window.scrollTo(0,ensureVisible(_dd));}if(_de){window.scrollTo(0,ensureVisible(_de));}};var _f2=function(){_e8();_f1();};var _f3;var _f4;var _f5=new abego.PageWiseRenderer();var _f6=function(_f7){this.itemHtml=store.getTiddlerText("YourSearchItemTemplate");if(!this.itemHtml){_b0("YourSearchItemTemplate not found");}this.place=document.getElementById(_db);if(!this.place){this.place=createTiddlyElement(_f7,"div",_db);}};merge(_f6.prototype,{render:function(_f8,_f9,_fa,_fb){_f3=_fb;_f4=_f9;var _fc=createTiddlyElement(this.place,"div",null,"yourSearchItem");_fc.innerHTML=this.itemHtml;applyHtmlMacros(_fc,null);refreshElements(_fc,null);},endRendering:function(_fd){_f4=null;}});var _fe=function(){if(!_dd||!_de){return;}var _ff=store.getTiddlerText("YourSearchResultTemplate");if(!_ff){_ff="<b>Tiddler YourSearchResultTemplate not found</b>";}_dd.innerHTML=_ff;applyHtmlMacros(_dd,null);refreshElements(_dd,null);var _100=new _f6(_dd);_f5.renderPage(_100);_f2();};_f5.getItemsPerPage=function(){var n=(config.options.chkPreviewText)?abego.toInt(config.options.txtItemsPerPageWithPreview,_d9):abego.toInt(config.options.txtItemsPerPage,_d8);return (n>0)?n:1;};_f5.onPageChanged=function(){_fe();};var _101=function(){if(_de==null||!config.options.chkUseYourSearch){return;}if((_de.value==_dc)&&_dc&&!_e2()){if(_dd&&(_dd.parentNode!=document.body)){document.body.appendChild(_dd);_f2();}else{abego.YourSearch.onShowResult(true);}}};var _102=function(){_e3();_dd=null;_dc=null;};var _103=function(self,e){while(e!=null){if(self==e){return true;}e=e.parentNode;}return false;};var _104=function(e){if(e.target==_de){return;}if(e.target==_df){return;}if(_dd&&_103(_dd,e.target)){return;}_e3();};var _105=function(e){if(e.keyCode==27){_e3();}};addEvent(document,"click",_104);addEvent(document,"keyup",_105);var _106=function(text,_107,_108){_dc=text;_b3(_c5(store,text,_107,_108,"title","excludeSearch"));abego.YourSearch.onShowResult();};var _109=function(_10a,_10b,_10c,_10d,_10e,_10f){_e1();_dc="";var _110=null;var _111=function(txt){if(config.options.chkUseYourSearch){_106(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}else{story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}_dc=txt.value;};var _112=function(e){_111(_de);return false;};var _113=function(e){if(!e){var e=window.event;}_de=this;switch(e.keyCode){case 13:if(e.ctrlKey&&_e0&&_e2()){_e0.onclick.apply(_e0,[e]);}else{_111(this);}break;case 27:if(_e2()){_e3();}else{this.value="";clearMessage();}break;}if(String.fromCharCode(e.keyCode)==this.accessKey||e.altKey){_101();}if(this.value.length<3&&_110){clearTimeout(_110);}if(this.value.length>2){if(this.value!=_dc){if(!config.options.chkUseYourSearch||config.options.chkSearchAsYouType){if(_110){clearTimeout(_110);}var txt=this;_110=setTimeout(function(){_111(txt);},500);}}else{if(_110){clearTimeout(_110);}}}if(this.value.length==0){_e3();}};var _114=function(e){this.select();clearMessage();_101();};var args=_10e.parseParams("list",null,true);var _115=getFlag(args,"buttonAtRight");var _116=getParam(args,"sizeTextbox",this.sizeTextbox);var btn;if(!_115){btn=createTiddlyButton(_10a,this.label,this.prompt,_112);}var txt=createTiddlyElement(null,"input",null,"txtOptionInput searchField",null);if(_10c[0]){txt.value=_10c[0];}txt.onkeyup=_113;txt.onfocus=_114;txt.setAttribute("size",_116);txt.setAttribute("accessKey",this.accessKey);txt.setAttribute("autocomplete","off");if(config.browser.isSafari){txt.setAttribute("type","search");txt.setAttribute("results","5");}else{txt.setAttribute("type","text");}if(_10a){_10a.appendChild(txt);}if(_115){btn=createTiddlyButton(_10a,this.label,this.prompt,_112);}_de=txt;_df=btn;};var _117=function(){_e3();var _118=_b5();var n=_118.length;if(n){var _119=[];for(var i=0;i<n;i++){_119.push(_118[i].title);}story.displayTiddlers(null,_119);}};var _11a=function(_11b,_11c,_11d,_11e){invokeMacro(_11b,"option",_11c,_11d,_11e);var elem=_11b.lastChild;var _11f=elem.onclick;elem.onclick=function(e){var _120=_11f.apply(this,arguments);_fe();return _120;};return elem;};var _121=function(s){var _122=["''","{{{","}}}","//","<<<","/***","***/"];var _123="";for(var i=0;i<_122.length;i++){if(i!=0){_123+="|";}_123+="("+_122[i].escapeRegExp()+")";}return s.replace(new RegExp(_123,"mg"),"").trim();};var _124=function(){var i=_f3;return (i>=0&&i<=9)?(i<9?(i+1):0):-1;};var _125=new abego.LimitedTextRenderer();var _126=function(_127,s,_128){_125.render(_127,s,_128,_b2.getMarkRegExp());};var _129=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_12a,_12b,_12c,_12d,_12e,tags,_12f){_129.apply(this,arguments);_102();};var _130=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_131){_130.apply(this,arguments);_102();};config.macros.yourSearch={label:"yourSearch",prompt:"Gives access to the current/last YourSearch result",handler:function(_132,_133,_134,_135,_136,_137){if(_134.length==0){return;}var name=_134[0];var func=config.macros.yourSearch.funcs[name];if(func){func(_132,_133,_134,_135,_136,_137);}},tests:{"true":function(){return true;},"false":function(){return false;},"found":function(){return _b6()>0;},"previewText":function(){return config.options.chkPreviewText;}},funcs:{itemRange:function(_138){if(_b6()){var _139=_f5.getLastIndexOnPage();var s="%0 - %1".format([_f5.getFirstIndexOnPage()+1,_139+1]);createTiddlyText(_138,s);}},count:function(_13a){createTiddlyText(_13a,_b6().toString());},query:function(_13b){if(_b2){createTiddlyText(_13b,_b2.toString());}},version:function(_13c){var t="YourSearch %0.%1.%2".format([version.extensions.YourSearchPlugin.major,version.extensions.YourSearchPlugin.minor,version.extensions.YourSearchPlugin.revision]);var e=createTiddlyElement(_13c,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#YourSearchPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_13d){var e=createTiddlyElement(_13d,"a");e.setAttribute("href","http://www.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">&copy; 2005-2008 <b><font color=\"red\">abego</font></b> Software<font>";},newTiddlerButton:function(_13e){if(_b2){var r=abego.parseNewTiddlerCommandLine(_b2.getQueryText());var btn=config.macros.newTiddler.createNewTiddlerButton(_13e,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");var _13f=btn.onclick;btn.onclick=function(){_e3();_13f.apply(this,arguments);};_e0=btn;}},linkButton:function(_140,_141,_142,_143,_144,_145){if(_142<2){return;}var _146=_142[1];var text=_142<3?_146:_142[2];var _147=_142<4?text:_142[3];var _148=_142<5?null:_142[4];var btn=createTiddlyButton(_140,text,_147,_e4,null,null,_148);btn.setAttribute("tiddlyLink",_146);},closeButton:function(_149,_14a,_14b,_14c,_14d,_14e){var _14f=createTiddlyButton(_149,"close","Close the Search Results (Shortcut: ESC)",_e3);},openAllButton:function(_150,_151,_152,_153,_154,_155){var n=_b6();if(n==0){return;}var _156=n==1?"open tiddler":"open all %0 tiddlers".format([n]);var _157=createTiddlyButton(_150,_156,"Open all found tiddlers (Shortcut: Alt-O)",_117);_157.setAttribute("accessKey","O");},naviBar:function(_158,_159,_15a,_15b,_15c,_15d){_f5.addPageNavigation(_158);},"if":function(_15e,_15f,_160,_161,_162,_163){if(_160.length<2){return;}var _164=_160[1];var _165=(_164=="not");if(_165){if(_160.length<3){return;}_164=_160[2];}var test=config.macros.yourSearch.tests[_164];var _166=false;try{if(test){_166=test(_15e,_15f,_160,_161,_162,_163)!=_165;}else{_166=(!eval(_164))==_165;}}catch(ex){}if(!_166){_15e.style.display="none";}},chkPreviewText:function(_167,_168,_169,_16a,_16b,_16c){var _16d=_169.slice(1).join(" ");var elem=_11a(_167,"chkPreviewText",_16a,_16c);elem.setAttribute("accessKey","P");elem.title="Show text preview of found tiddlers (Shortcut: Alt-P)";return elem;}}};config.macros.foundTiddler={label:"foundTiddler",prompt:"Provides information on the tiddler currently processed on the YourSearch result page",handler:function(_16e,_16f,_170,_171,_172,_173){var name=_170[0];var func=config.macros.foundTiddler.funcs[name];if(func){func(_16e,_16f,_170,_171,_172,_173);}},funcs:{title:function(_174,_175,_176,_177,_178,_179){if(!_f4){return;}var _17a=_124();var _17b=_17a>=0?"Open tiddler (Shortcut: Alt-%0)".format([_17a.toString()]):"Open tiddler";var btn=createTiddlyButton(_174,null,_17b,_e4,null);btn.setAttribute("tiddlyLink",_f4.title);btn.setAttribute("withHilite","true");_126(btn,_f4.title,_d4);if(_17a>=0){btn.setAttribute("accessKey",_17a.toString());}},tags:function(_17c,_17d,_17e,_17f,_180,_181){if(!_f4){return;}_126(_17c,_f4.getTags(),_d5);},text:function(_182,_183,_184,_185,_186,_187){if(!_f4){return;}_126(_182,_121(_f4.text),_d6);},field:function(_188,_189,_18a,_18b,_18c,_18d){if(!_f4){return;}var name=_18a[1];var len=_18a.length>2?abego.toInt(_18a[2],_d7):_d7;var v=store.getValue(_f4,name);if(v){_126(_188,_121(v),len);}},number:function(_18e,_18f,_190,_191,_192,_193){var _194=_124();if(_194>=0){var text="%0)".format([_194.toString()]);createTiddlyElement(_18e,"span",null,"shortcutNumber",text);}}}};var opts={chkUseYourSearch:true,chkPreviewText:true,chkSearchAsYouType:true,chkSearchInTitle:true,chkSearchInText:true,chkSearchInTags:true,chkSearchExtendedFields:true,txtItemsPerPage:_d8,txtItemsPerPageWithPreview:_d9};for(var n in opts){if(config.options[n]==undefined){config.options[n]=opts[n];}}config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";config.shadowTiddlers["YourSearch Help"]="!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet"+"edTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you"+" need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Tas"+"k', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch"+"\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearc"+"h. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you m"+"ay do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly enterin"+"g the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/"+"}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript E"+"xpression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki interna"+"ls you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression"+" into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and e"+"valuate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tidd"+"ler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Com"+"bined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Res"+"ult|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its tit"+"les, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact wor"+"d). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encour"+"aged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. F"+"or quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|"+"!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search in"+"put field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the pr"+"evious search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. S"+"elect tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Resul"+"t]] is already closed and the cursor is in the search input field the field's content is cleared so "+"you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second e"+"tc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the "+"'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[Your"+"Search Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the "+"{{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of t"+"hese shortcuts don't work for you check your browser if you have other extensions installed that alr"+"eady \"use\" these shortcuts.//";config.shadowTiddlers["YourSearch Options"]="|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText"+">> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required"+" to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!')     <<option chk"+"SearchInText>>Text ('%')     <<option chkSearchInTags>>Tags ('#')    <<option chkSearchExtendedFiel"+"ds>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don"+"'t explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!"+"', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items "+"on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with pre"+"view text: <<option txtItemsPerPageWithPreview>>|\n";config.shadowTiddlers["YourSearchStyleSheet"]="/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800"+"px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGra"+"y;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width:"+" thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSea"+"rchRange, .yourSearchCount, .yourSearchQuery   {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary ."+"button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summa"+"ry .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*"+"/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-to"+"p: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearc"+"hText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFoote"+"r {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;"+"\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/"+"\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: bla"+"ck;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSe"+"archNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #"+"FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold"+";\n\tcolor: blue;\n}\n/*}}}*/\n";config.shadowTiddlers["YourSearchResultTemplate"]="<!--\n{{{\n-->\n<span macro=\"yourSearch if found\">\n<!-- The Summary Header ============================"+"================ -->\n<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">"+"<tbody>\n  <tr>\n\t<td align=\"left\">\n\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearc"+"h itemRange\"></span>\n\t\t&nbsp;of&nbsp;<span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+"\t\tfor&nbsp;<span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n\t</td>\n\t<td class=\"yourSea"+"rchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel"+"\">preview text</span>\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch openAllButton\"></span>\n\t\t<span macro=\"yourSearch lin"+"kButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkB"+"utton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch clo"+"seButton\"></span>\n\t</td>\n  </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ================="+"=========================== -->\n<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPr"+"eview=\"10\"></div>\n\n<!-- The Footer (with the Navigation) ==========================================="+"= -->\n<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody"+">\n  <tr>\n\t<td align=\"left\">\n\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar"+"\"></span>\n\t</td>\n\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearc"+"h copyright\"></span>\n\t</td>\n  </tr>\n</tbody></table>\n<!-- end of the 'tiddlers found' case ========="+"================================== -->\n</span>\n\n\n<!-- The \"No tiddlers found\" case ================="+"========================== -->\n<span macro=\"yourSearch if not found\">\n<table class=\"summary\" border="+"\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n  <tr>\n\t<td align=\"left\">\n\t\tYourSearch Resu"+"lt: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n\t</td>\n\t<t"+"d class=\"yourSearchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Options'"+" options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help"+" 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch closeButton\"></span>\n\t</td>\n  <"+"/tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n";config.shadowTiddlers["YourSearchItemTemplate"]="<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSea"+"rchTitle' macro='foundTiddler title'/></span>&nbsp;-&nbsp;\n<span class='yourSearchTags' macro='found"+"Tiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='fo"+"undTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";config.shadowTiddlers["YourSearch"]="<<tiddler [[YourSearch Help]]>>";config.shadowTiddlers["YourSearch Result"]="The popup-like window displaying the result of a YourSearch query.";config.macros.search.handler=_109;var _195=function(){if(config.macros.search.handler!=_109){alert("Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may "+"disable the other plugin or change the load order of \nthe plugins (by changing the names of the tidd"+"lers)\nto enable the 'Your Search' features.");}};setTimeout(_195,5000);abego.YourSearch.getStandardRankFunction=function(){return _bb;};abego.YourSearch.getRankFunction=function(){return abego.YourSearch.getStandardRankFunction();};abego.YourSearch.getCurrentTiddler=function(){return _f4;};abego.YourSearch.closeResult=function(){_e3();};abego.YourSearch.getFoundTiddlers=function(){return _b1;};abego.YourSearch.getQuery=function(){return _b2;};abego.YourSearch.onShowResult=function(_196){highlightHack=_b2?_b2.getMarkRegExp():null;if(!_196){_f5.setItems(_b5());}if(!_dd){_dd=createTiddlyElement(document.body,"div",_da,"yourSearchResult");}else{if(_dd.parentNode!=document.body){document.body.appendChild(_dd);}}_fe();highlightHack=null;};})();}
//%/
〔韓國會員創作歌曲,中文版歌詞〕
<<<
!第一段
當我看見 美麗的自然聖殿
我的模樣 就在其中浮現
如同那 雄壯的石頭
我的人生 由我主 親自來揀選
  
* 因為對我 滿有旨意
才呼召我到這裡
過去點點滴滴
主的指引 我絕對不會忘記
如今 我獻上感謝的讚美
願能達成 我主對我定下的旨意
!第二段 
當我看見 美麗的自然聖殿
我的模樣 就在其中浮現
如同那 翠綠的樹木
我的人生 由我主 親自來栽培

* 因為對我 滿有旨意
才呼召我到這裡
過去點點滴滴
主的指引 我絕對不會忘記
如今 我獻上感謝的讚美
願能達成 我主對我定下的旨意
!!Bridge
縱然有時不能夠 按主旨意行動
主依然擁抱著我 是因過往點滴深厚

* 因為對我 滿有旨意
才呼召我到這裡
過去點點滴滴
主的指引 我絕對不會忘記
如今 我獻上感謝的讚美
願能達成 我主對我定下的旨意  
!!終曲
懷抱那點點滴滴
我願意 永遠與我主一起
<<<
很好聽的歌,下次我唱一唱錄下來再分享 <<;)>>
----
最感動的幾句詞:
<<<
我的人生 由我主 親自來揀選/栽培
  
* 因為對我 滿有旨意
才呼召我到這裡
過去點點滴滴
主的指引 我絕對不會忘記
<<<
尤其是「由主栽培」的部分真的很感動,在這茫茫的世上,除了父母的栽培也有一定的程度,但是誰能、誰又願意一直栽培你、讓你無止境一直成長下去呢?對於過去總是感覺自己很不足、很渺小的我,這個部分實在太讓人感謝了。

還有
<<<
縱然有時不能夠 按主旨意行動
主依然擁抱著我 是因過往點滴深厚
<<<
感謝主對我的愛、原諒與寬容。

所以
<<<
懷抱那點點滴滴
我願意 永遠與我主一起
<<<
  前陣子想找網路電台來當唸書、工作的背景音樂,就搜尋「web radio」~~(我這回壓根沒把「臺北愛樂」考慮進去!<<哈>>)~~,然後找到了 Live365.com 這個平台,裡面列了好多國外的((音樂電台(與其說「電台」,可能反而比較像「頻道」,因為這些提供頻道的人好像都是「個體戶」的經營者,而非美國那些一大堆縮寫「WWXX」的地方廣播電台)))。那我通常首先是找古典樂分類,結果因為他們列出的熱門電台裡有個叫「all relaxing classics」,我才知道他們還有個分類叫「easy listening」,也包括 lounge music、沙發音樂在內。太好了,「放鬆性」的音樂,應該很適合我的需求~~(當然有的人可能習慣聽重金屬或爵士來唸書,我高三時也曾借同學的重金屬來聽 <<XD>>)~~。

  所以後來我就特地再到「easy listening」分類中,參考各個電台的簡介以後,找到一個叫「beautiful instrumentals」,曲子都是各國電影主題旋律或古典樂的器樂演奏,確實都蠻有味道的,頗「beautiful」。但我又不滿足,又繼續找,就找到一個叫「[[whisperings|http://solopianoradio.com/]]」的,是在低語什麼呢?原來都是鋼琴獨奏曲耶!而且經過比較,發現這個頻道的經營者比其他 solo piano 頻道更用心~~(雖然他中間插入鼓勵大家付費贊助的廣告又長又囉嗦……<<8-)>>)~~,曲子很多所以重覆率低,而且旋律不致於有高度相似性。聽了幾天下來,這個頻道幾乎變成我的最愛,我也就很少聽別的頻道了。也正因如此,我才發現原來我這麼喜歡 solo piano……甚至在考慮一年付個 30 美刀升級付費版去掉廣告後拿來當以後辦公室的音樂哩 <<:p>>
/***
|''Name''|TiddlySpaceTiddlerIconsPlugin|
|''Version''|0.8.10|
|''Status''|@@beta@@|
|''Author''|Jon Robson|
|''Description''|Provides ability to render SiteIcons and icons that correspond to the home location of given tiddlers|
|''Source''|http://github.com/TiddlySpace/tiddlyspace/raw/master/src/plugins/TiddlySpaceTiddlerIconsPlugin.js|
|''Requires''|TiddlySpaceConfig BinaryTiddlersPlugin ImageMacroPlugin TiddlySpacePublishingCommands|
!Notes
{{{<<tiddlerOrigin>>}}} shows the origin of the tiddler it is being run on.
In TiddlySpace terms this means it will determine whether the tiddler is external, public or private.
Where private it will analyse whether a public version exists and distinguish between the different scenarios.
If a tiddler is external, the SiteIcon of that external space will be shown

!Parameters
width / height : define a width or height of the outputted icon
label: if label parameter is set to yes, a label will accompany the icon.
!Code
***/
//{{{
(function($) {

if(!config.macros.image) {
	throw "Missing dependency: ImageMacroPlugin";
}

var imageMacro = config.macros.image;
var tiddlyspace = config.extensions.tiddlyspace;
var tweb = config.extensions.tiddlyweb;
var cmds = config.commands;
var cmd = cmds.publishTiddler;
tiddlyspace.resolveSpaceName = function(value) {
	var endsWith = config.extensions.BinaryTiddlersPlugin.endsWith;
	if(value) {
		value = value.indexOf("bags/") === 0 ? value.substr(5) : value;
		value = value.indexOf("recipes/") === 0 ? value.substr(8) : value;
		if(value.indexOf("@") === 0) {
			value = value.substr(1);
		}
		if(endsWith(value, "_public")) {
			value = value.substr(0, value.length - 7);
		} else if(endsWith(value, "_private")) {
			value = value.substr(0, value.length - 8);
		}
		value = value.toLowerCase();
	}
	return value;
};

tiddlyspace.renderAvatar = function(place, value, options) {
	options = options ? options : {};
	options.labelOptions = options.labelOptions ? options.labelOptions : { include: false, height: 48, width: 48 };
	options.imageOptions = options.imageOptions ? options.imageOptions : {};
	options.imageOptions.altImage = "/bags/common/tiddlers/defaultUserIcon";
	var container = $('<div class="siteIcon" />').appendTo(place);
	value = tiddlyspace.resolveSpaceName(value);

	tweb.getStatus(function(status) {
		var link, noLabel;
		if(!value || value == config.views.wikified.defaultModifier ||
			value == config.views.wikified.shadowModifier) {
			var icon = config.views.wikified.shadowModifier == value ? "shadowIcon" : "missingIcon";
			if(store.tiddlerExists(icon)) {
				imageMacro.renderImage(container, icon, options.imageOptions);
			} else {
				noLabel = true;
			}
		} else {
			var spaceURI;
			if(value != tiddlyspace.currentSpace.name) {
				spaceURI = options.notSpace ? tiddlyspace.getHost(status.server_host) :
					tiddlyspace.getHost(status.server_host, value);
			}
			link = spaceURI ? $("<a />").attr("href", spaceURI) : $("<span />");
			link.text(value);

			var imageOptions = options.imageOptions;
			if(options.spaceLink && !imageOptions.link) {
				imageOptions.link = spaceURI;
			}
			var avatar = options.notSpace ? false : value;
			var uri = tiddlyspace.getAvatar(status.server_host, avatar);
			imageMacro.renderImage(container, uri, options.imageOptions);
			if(!value) {
				value = "tiddlyspace";
			}
		}
		if(!noLabel && options.labelOptions.include) {
			var prefix = $("<span />").text(options.labelOptions.prefix || "")[0];
			var suffix = $("<span />").text(options.labelOptions.suffix || "")[0];
			$('<div class="label" />').append(prefix).append(link).
				append(suffix).appendTo(container);
		}
	});
	if(value) {
		var prefix = options.labelOptions.prefix || "";
		var suffix = options.labelOptions.suffix || "";
		var label = "%0%1%2".format(prefix, value, suffix);
		$(container).attr("title", label);
	}
};

var originMacro = config.macros.tiddlerOrigin = {
	locale: {
		"shadow": "shadow tiddler",
		"missing": "missing tiddler",
		"private": "private",
		"unknown": "unknown state",
		"public": "public",
		"unsyncedPrivate": "unsynced and private",
		"unsyncedPublic": "unsynced and public",
		externalPrefix: "from ",
		externalBagSuffix: " bag",
		externalSuffix: " space",
		publishPrivateDeletePrivate: "Are you sure you want to make this tiddler public?",
		moveToPrivate: "Are you sure you want to make this tiddler private? Only members will be able to see it.",
		pleaseWait: "please wait..",
		keepPublic: "keep public",
		cannotPublishDirtyTiddler: "The current tiddler is unsaved so cannot be published. Please save the tiddler first.",
		keepPrivate: "keep private",
		makePublic: "make public",
		makePrivate: "make private"
	},
	handler: function(place, macroName, params,wikifier, paramString, tiddler){
		var adaptor = tiddler.getAdaptor();
		var btn = $("<div />").addClass("originButton").attr("params", paramString).
			attr("refresh", "macro").attr("macroName", macroName).appendTo(place)[0];
		$(btn).data("tiddler", tiddler);
		originMacro.refresh(btn);
	},
	refresh: function(btn) {
		$(btn).empty();
		var paramString = $(btn).attr("params");
		var tiddler = $(btn).data("tiddler");
		var options = originMacro.getOptions(paramString);
		var type = tiddlyspace.getTiddlerStatusType(tiddler);
		originMacro.renderIcon(tiddler, type, btn, options);
	},
	getOptions: function(paramString) {
		paramString = "%0 label:no width:48 height:48 spaceLink:yes preserveAspectRatio:yes".format(paramString);
		var parsedParams = paramString.parseParams("name");
		var params = parsedParams[0].name;
		var options = {
			labelOptions: originMacro._getLabelOptions(parsedParams),
			imageOptions: imageMacro.getArguments(paramString, []),
			noclick: parsedParams[0].interactive &&
				parsedParams[0].interactive[0] == "no" ? true : false
		};
		if(!options.noclick) {
			var spaceLink = parsedParams[0].spaceLink;
			options.spaceLink = spaceLink && spaceLink[0] == "no" ? false : true;
		} else {
			options.spaceLink = false;
		}
		return options;
	},
	_getLabelOptions: function(parsedParams) {
		parsedParams = parsedParams[0];
		var includeLabel = !parsedParams.label || ( parsedParams.label && parsedParams.label[0] == "yes" );
		var prefix = parsedParams.labelPrefix ? parsedParams.labelPrefix[0] : false;
		var suffix = parsedParams.labelSuffix ? parsedParams.labelSuffix[0] : false;
		return { include: includeLabel, suffix: suffix, prefix: prefix };
	},
	_isSpace: function(value) {
		value = value ? value : "";
		var endsWith = config.extensions.BinaryTiddlersPlugin.endsWith;
		if(endsWith(value, "_private") || endsWith(value, "_public")) {
			return true;
		} else {
			return false;
		}
	},
	renderIcon: function(tiddler, type, button, options) {
		var locale = originMacro.locale;
		originMacro.annotateTiddler(button, type);
		if(type != "external") {
			originMacro.showPrivacyRoundel(tiddler, type, button,
				options);
		} else {
			var prefix = options.labelOptions.prefix, suffix = options.labelOptions.suffix;
			var space = tiddler.fields["server.bag"];
			options.notSpace = !originMacro._isSpace(space);
			options.labelOptions.prefix = prefix ? prefix : locale.externalPrefix;
			options.labelOptions.suffix = suffix ? suffix : (options.notSpace ? locale.externalBagSuffix : locale.externalSuffix);

			tiddlyspace.renderAvatar(button, space, options);
		}
	},
	showPrivacyRoundel: function(thisTiddler, privacyType, button, options) {
		// there is a public tiddler as well as the current tiddler!
		// TODO: not this is not enough.. we also need to check if the public tiddler is the same as..
		// .. the private tiddler to determine whether this is a draft
		// use of hashes would be useful here.
		$(button).empty();
		var icon = "%0Icon".format(privacyType);
		if(privacyType.indexOf("unsynced") === 0 && !store.tiddlerExists(icon)) {
			icon = "unsyncedIcon";
		}
		if(privacyType == "shadow") {
			if(!store.tiddlerExists(icon)) {
				icon = "bags/tiddlyspace/tiddlers/SiteIcon";
			}
		}
		if(privacyType == "missing" && !store.tiddlerExists(icon)) {
			return; // the user is not making use of the missingIcon
		} else {
			imageMacro.renderImage(button, icon, options.imageOptions);
			originMacro.showLabel(button, privacyType, options.labelOptions);
			var cmd = originMacro.iconCommands[privacyType];
			if(cmd && thisTiddler && !options.noclick) {
				$(button).click(function(ev) {
					cmd(ev, thisTiddler);
				});
			}
		}
	},
	annotateTiddler: function(place, type) {
		var tidEl = $(story.findContainingTiddler(place));
		tidEl.
			removeClass("private public external privateAndPublic privateNotPublic shadow").
			addClass(type);
	},
	showLabel: function(button, type, options) {
		var locale = originMacro.locale;
		var label = options.label ? options.label : locale[type];
		label = label ? label : locale.unknown;
		if(options && options.include) {
			$('<div class="roundelLabel" />').html(label).appendTo(button);
		}
		$(button).attr("title", label);
	},
	confirm: function(ev, msg, onYes, options) {
		options = options ? options : {};
		onYes = onYes ? onYes : function(ev) {};
		var btn = $(".originButton", $(ev.target).parents())[0];
		var popup = Popup.create(btn);
		$(popup).addClass("confirmationPopup");
		$("<div />").addClass("message").text(msg).appendTo(popup);
		$("<button />").addClass("button").text(options.yesLabel || "yes").appendTo(popup).click(onYes);
		$("<button />").addClass("button").text(options.noLabel || "no").click(function(ev) {
			Popup.remove();
		}).appendTo(popup);
		Popup.show();
		ev.stopPropagation();
		return false;
	},
	alert: function(ev, msg) {
		var popup = Popup.create(ev.target);
		$(popup).addClass("confirmationPopup alert");
		$("<div />").addClass("message").text(msg).appendTo(popup);
		Popup.show();
		ev.stopPropagation();
	},
	reportDirty: function(el) {
		originMacro.alert(el, originMacro.locale.cannotPublishDirtyTiddler);
	},
	iconCommands: {
		"public": function(ev, tiddler) {
			if(!readOnly) {
				var locale = originMacro.locale;
				var msg = locale.moveToPrivate;
				if(story.isDirty(tiddler.title)) {
					originMacro.reportDirty(ev);
				} else {
					originMacro.confirm(ev, msg, function(ev) {
						var target = $(ev.target);
						var onComplete = function(info) {};
						var privateBag = cmd.toggleBag(tiddler, "private");
						cmd.moveTiddler(tiddler, {
							title: tiddler.title,
							fields: { "server.bag": privateBag }
						}, onComplete);
					}, { yesLabel: locale.makePrivate, noLabel: locale.keepPublic });
				}
			}
		},
		"private": function(ev, tiddler) {
			if(!readOnly) {
				var locale = originMacro.locale;
				var adaptor = tiddler.getAdaptor();
				var publishTo = tiddler.fields["publish.name"] || tiddler.title;
				var workspace = "bags/%0".format(tiddler.fields["server.bag"]);
				tiddler.fields["server.workspace"] = workspace;
				var publicBag = cmd.toggleBag(tiddler, "public");
				var msg;
				msg = locale.publishPrivateDeletePrivate;
				var title = tiddler.title;
				var newTitle = publishTo || tiddler.title;
				tiddler.fields["server.page.revision"] = "false";
				store.addTiddler(tiddler);
				if(story.isDirty(tiddler.title)) {
					originMacro.reportDirty(ev);
				} else {
					originMacro.confirm(ev, msg, function(ev) {
						var onComplete = function(info) {};
						cmd.moveTiddler(tiddler, {
							title: newTitle,
							fields: { "server.bag": publicBag }
						}, onComplete);
					}, { yesLabel: locale.makePublic, noLabel: locale.keepPrivate });
				}
			}
		}
	}
};

})(jQuery);
//}}}
/***
|''Name''|ServerSideSavingPlugin|
|''Description''|server-side saving|
|''Author''|FND|
|''Version''|0.6.5|
|''Status''|stable|
|''Source''|http://svn.tiddlywiki.org/Trunk/association/plugins/ServerSideSavingPlugin.js|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
|''CoreVersion''|2.5.3|
|''Keywords''|serverSide|
!Notes
This plugin relies on a dedicated adaptor to be present.
The specific nature of this plugin depends on the respective server.
!Revision History
!!v0.1 (2008-11-24)
* initial release
!!v0.2 (2008-12-01)
* added support for local saving
!!v0.3 (2008-12-03)
* added Save to Web macro for manual synchronization
!!v0.4 (2009-01-15)
* removed ServerConfig dependency by detecting server type from the respective tiddlers
!!v0.5 (2009-08-25)
* raised CoreVersion to 2.5.3 to take advantage of core fixes
!!v0.6 (2010-04-21)
* added notification about cross-domain restrictions to ImportTiddlers
!To Do
* conflict detection/resolution
* rename to ServerLinkPlugin?
* document deletion/renaming convention
!Code
***/
//{{{
(function($) {

readOnly = false; //# enable editing over HTTP

var plugin = config.extensions.ServerSideSavingPlugin = {};

plugin.locale = {
	saved: "%0 saved successfully",
	saveError: "Error saving %0: %1",
	saveConflict: "Error saving %0: edit conflict",
	deleted: "Removed %0",
	deleteError: "Error removing %0: %1",
	deleteLocalError: "Error removing %0 locally",
	removedNotice: "This tiddler has been deleted.",
	connectionError: "connection could not be established",
	hostError: "Unable to import from this location due to cross-domain restrictions."
};

plugin.sync = function(tiddlers) {
	tiddlers = tiddlers && tiddlers[0] ? tiddlers : store.getTiddlers();
	$.each(tiddlers, function(i, tiddler) {
		var changecount = parseInt(tiddler.fields.changecount, 10);
		if(tiddler.fields.deleted === "true" && changecount === 1) {
			plugin.removeTiddler(tiddler);
		} else if(tiddler.isTouched() && !tiddler.doNotSave() &&
				tiddler.getServerType() && tiddler.fields["server.host"]) { // XXX: server.host could be empty string
			delete tiddler.fields.deleted;
			plugin.saveTiddler(tiddler);
		}
	});
};

plugin.saveTiddler = function(tiddler) {
	try {
		var adaptor = this.getTiddlerServerAdaptor(tiddler);
	} catch(ex) {
		return false;
	}
	var context = {
		tiddler: tiddler,
		changecount: tiddler.fields.changecount,
		workspace: tiddler.fields["server.workspace"]
	};
	var serverTitle = tiddler.fields["server.title"]; // indicates renames
	if(!serverTitle) {
		tiddler.fields["server.title"] = tiddler.title;
	} else if(tiddler.title != serverTitle) {
		return adaptor.moveTiddler({ title: serverTitle },
			{ title: tiddler.title }, context, null, this.saveTiddlerCallback);
	}
	var req = adaptor.putTiddler(tiddler, context, {}, this.saveTiddlerCallback);
	return req ? tiddler : false;
};

plugin.saveTiddlerCallback = function(context, userParams) {
	var tiddler = context.tiddler;
	if(context.status) {
		if(tiddler.fields.changecount == context.changecount) { //# check for changes since save was triggered
			tiddler.clearChangeCount();
		} else if(tiddler.fields.changecount > 0) {
			tiddler.fields.changecount -= context.changecount;
		}
		plugin.reportSuccess("saved", tiddler);
		store.setDirty(false);
	} else {
		if(context.httpStatus == 412) {
			plugin.reportFailure("saveConflict", tiddler);
		} else {
			plugin.reportFailure("saveError", tiddler, context);
		}
	}
};

plugin.removeTiddler = function(tiddler) {
	try {
		var adaptor = this.getTiddlerServerAdaptor(tiddler);
	} catch(ex) {
		return false;
	}
	var context = {
		host: tiddler.fields["server.host"],
		workspace: tiddler.fields["server.workspace"],
		tiddler: tiddler
	};
	var req = adaptor.deleteTiddler(tiddler, context, {}, this.removeTiddlerCallback);
	return req ? tiddler : false;
};

plugin.removeTiddlerCallback = function(context, userParams) {
	var tiddler = context.tiddler;
	if(context.status) {
		if(tiddler.fields.deleted === "true") {
			store.deleteTiddler(tiddler.title);
		} else {
			plugin.reportFailure("deleteLocalError", tiddler);
		}
		plugin.reportSuccess("deleted", tiddler);
		store.setDirty(false);
	} else {
		plugin.reportFailure("deleteError", tiddler, context);
	}
};

plugin.getTiddlerServerAdaptor = function(tiddler) { // XXX: rename?
	var type = tiddler.fields["server.type"] || config.defaultCustomFields["server.type"];
	return new config.adaptors[type]();
};

plugin.reportSuccess = function(msg, tiddler) {
	displayMessage(plugin.locale[msg].format([tiddler.title]));
};

plugin.reportFailure = function(msg, tiddler, context) {
	var desc = (context && context.httpStatus) ? context.statusText :
		plugin.locale.connectionError;
	displayMessage(plugin.locale[msg].format([tiddler.title, desc]));
};

config.macros.saveToWeb = { // XXX: hijack existing sync macro?
	locale: { // TODO: merge with plugin.locale?
		btnLabel: "save to web",
		btnTooltip: "synchronize changes",
		btnAccessKey: null
	},

	handler: function(place, macroName, params, wikifier, paramString, tiddler) {
		createTiddlyButton(place, this.locale.btnLabel, this.locale.btnTooltip,
			plugin.sync, null, null, this.locale.btnAccessKey);
	}
};

// hijack saveChanges to trigger remote saving
var _saveChanges = saveChanges;
saveChanges = function(onlyIfDirty, tiddlers) {
	if(window.location.protocol == "file:") {
		_saveChanges.apply(this, arguments);
	} else {
		plugin.sync(tiddlers);
	}
};

// override removeTiddler to flag tiddler as deleted -- XXX: use hijack to preserve compatibility?
TiddlyWiki.prototype.removeTiddler = function(title) { // XXX: should override deleteTiddler instance method?
	var tiddler = this.fetchTiddler(title);
	if(tiddler) {
		tiddler.tags = ["excludeLists", "excludeSearch", "excludeMissing"];
		tiddler.text = plugin.locale.removedNotice;
		tiddler.fields.deleted = "true"; // XXX: rename to removed/tiddlerRemoved?
		tiddler.fields.changecount = "1";
		this.notify(title, true);
		this.setDirty(true);
	}
};

// hijack ImportTiddlers wizard to handle cross-domain restrictions
var _onOpen = config.macros.importTiddlers.onOpen;
config.macros.importTiddlers.onOpen = function(ev) {
	var btn = $(resolveTarget(ev));
	var url = btn.closest(".wizard").find("input[name=txtPath]").val();
	if(window.location.protocol != "file:" && url.indexOf("://") != -1) {
		var host = url.split("/")[2];
		var macro = config.macros.importTiddlers;
		if(host != window.location.host) {
			btn.text(macro.cancelLabel).attr("title", macro.cancelPrompt);
			btn[0].onclick = macro.onCancel;
			$('<span class="status" />').text(plugin.locale.hostError).insertAfter(btn);
			return false;
		}
	}
	return _onOpen.apply(this, arguments);
};

})(jQuery);
//}}}
/***
|Name|ExportTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#ExportTiddlersPlugin|
|Documentation|http://www.TiddlyTools.com/#ExportTiddlersPluginInfo|
|Version|2.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|interactively select/export tiddlers to a separate file|
!!!!!Documentation
>see [[ExportTiddlersPluginInfo]]
!!!!!Inline control panel (live):
><<exportTiddlers inline>>
!!!!!Revisions
<<<
2011.02.14 2.9.6 fix OSX error: use picker.file.path
2010.02.25 2.9.5 added merge checkbox option and improved 'merge' status message
|please see [[ExportTiddlersPluginInfo]] for additional revision details|
2005.10.09 0.0.0 development started
<<<
!!!!!Code
***/
//{{{
// version
version.extensions.ExportTiddlersPlugin= {major: 2, minor: 9, revision: 6, date: new Date(2011,2,14)};

// default shadow definition
config.shadowTiddlers.ExportTiddlers='<<exportTiddlers inline>>';

// add 'export' backstage task (following built-in import task)
if (config.tasks) { // TW2.2 or above
	config.tasks.exportTask = {
		text:'export',
		tooltip:'Export selected tiddlers to another file',
		content:'<<exportTiddlers inline>>'
	}
	config.backstageTasks.splice(config.backstageTasks.indexOf('importTask')+1,0,'exportTask');
}

config.macros.exportTiddlers = {
	$: function(id) { return document.getElementById(id); }, // abbreviation
	label: 'export tiddlers',
	prompt: 'Copy selected tiddlers to an export document',
	okmsg: '%0 tiddler%1 written to %2',
	failmsg: 'An error occurred while creating %1',
	overwriteprompt: '%0\ncontains %1 tiddler%2 that will be discarded or replaced',
	mergestatus: '%0 tiddler%1 added, %2 tiddler%3 updated, %4 tiddler%5 unchanged',
	statusmsg: '%0 tiddler%1 - %2 selected for export',
	newdefault: 'export.html',
	datetimefmt: '0MM/0DD/YYYY 0hh:0mm:0ss',  // for 'filter date/time' edit fields
	type_TW: "tw", type_PS: "ps", type_TX: "tx", type_CS: "cs", type_NF: "nf", // file type tokens
	type_map: { // maps type param to token values
		tiddlywiki:"tw", tw:"tw", wiki: "tw",
		purestore: "ps", ps:"ps", store:"ps",
		plaintext: "tx", tx:"tx", text: "tx",
		comma:     "cs", cs:"cs", csv:  "cs",
		newsfeed:  "nf", nf:"nf", xml:  "nf", rss:"nf"
	},
	handler: function(place,macroName,params) {
		if (params[0]!='inline')
			{ createTiddlyButton(place,this.label,this.prompt,this.togglePanel); return; }
		var panel=this.createPanel(place);
		panel.style.position='static';
		panel.style.display='block';
	},
	createPanel: function(place) {
		var panel=this.$('exportPanel');
		if (panel) { panel.parentNode.removeChild(panel); }
		setStylesheet(store.getTiddlerText('ExportTiddlersPlugin##css',''),'exportTiddlers');
		panel=createTiddlyElement(place,'span','exportPanel',null,null)
		panel.innerHTML=store.getTiddlerText('ExportTiddlersPlugin##html','');
		this.initFilter();
		this.refreshList(0);
		var fn=this.$('exportFilename');
		if (window.location.protocol=='file:' && !fn.value.length) {
			// get new target path/filename
			var newPath=getLocalPath(window.location.href);
			var slashpos=newPath.lastIndexOf('/'); if (slashpos==-1) slashpos=newPath.lastIndexOf('\\'); 
			if (slashpos!=-1) newPath=newPath.substr(0,slashpos+1); // trim filename
			fn.value=newPath+this.newdefault;
		}
		return panel;
	},
	togglePanel: function(e) { var e=e||window.event;
		var cme=config.macros.exportTiddlers; // abbrev
		var parent=resolveTarget(e).parentNode;
		var panel=cme.$('exportPanel');
		if (panel==undefined || panel.parentNode!=parent)
			panel=cme.createPanel(parent);
		var isOpen=panel.style.display=='block';
		if(config.options.chkAnimate)
			anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,'none'));
		else
			panel.style.display=isOpen?'none':'block' ;
		if (panel.style.display!='none') {
			cme.refreshList(0);
			cme.$('exportFilename').focus(); 
			cme.$('exportFilename').select();
		}
		e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);
	},
	process: function(which) { // process panel control interactions
		var theList=this.$('exportList'); if (!theList) return false;
		var count = 0;
		var total = store.getTiddlers('title').length;
		switch (which.id) {
			case 'exportFilter':
				count=this.filterExportList();
				var panel=this.$('exportFilterPanel');
				if (count==-1) { panel.style.display='block'; break; }
				this.$('exportStart').disabled=(count==0);
				this.$('exportDelete').disabled=(count==0);
				this.displayStatus(count,total);
				if (count==0) { alert('No tiddlers were selected'); panel.style.display='block'; }
				break;
			case 'exportStart':
				this.go();
				break;
			case 'exportDelete':
				this.deleteTiddlers();
				break;
			case 'exportHideFilter':
			case 'exportToggleFilter':
				var panel=this.$('exportFilterPanel')
				panel.style.display=(panel.style.display=='block')?'none':'block';
				break;
			case 'exportSelectChanges':
				var lastmod=new Date(document.lastModified);
				for (var t = 0; t < theList.options.length; t++) {
					if (theList.options[t].value=='') continue;
					var tiddler=store.getTiddler(theList.options[t].value); if (!tiddler) continue;
					theList.options[t].selected=(tiddler.modified>lastmod);
					count += (tiddler.modified>lastmod)?1:0;
				}
				this.$('exportStart').disabled=(count==0);
				this.$('exportDelete').disabled=(count==0);
				this.displayStatus(count,total);
				if (count==0) alert('There are no unsaved changes');
				break;
			case 'exportSelectAll':
				for (var t = 0; t < theList.options.length; t++) {
					if (theList.options[t].value=='') continue;
					theList.options[t].selected=true;
					count += 1;
				}
				this.$('exportStart').disabled=(count==0);
				this.$('exportDelete').disabled=(count==0);
				this.displayStatus(count,count);
				break;
			case 'exportSelectOpened':
				for (var t=0; t<theList.options.length; t++) theList.options[t].selected=false;
				var tiddlerDisplay=this.$('tiddlerDisplay');
				for (var t=0; t<tiddlerDisplay.childNodes.length;t++) {
					var tiddler=tiddlerDisplay.childNodes[t].id.substr(7);
					for (var i=0; i<theList.options.length; i++) {
						if (theList.options[i].value!=tiddler) continue;
						theList.options[i].selected=true; count++; break;
					}
				}
				this.$('exportStart').disabled=(count==0);
				this.$('exportDelete').disabled=(count==0);
				this.displayStatus(count,total);
				if (count==0) alert('There are no tiddlers currently opened');
				break;
			case 'exportSelectRelated':
				// recursively build list of related tiddlers
				function getRelatedTiddlers(tid,tids) {
					var t=store.getTiddler(tid); if (!t || tids.contains(tid)) return tids;
					tids.push(t.title);
					if (!t.linksUpdated) t.changed();
					for (var i=0; i<t.links.length; i++)
						if (t.links[i]!=tid) tids=getRelatedTiddlers(t.links[i],tids);
					return tids;
				}
				// for all currently selected tiddlers, gather up the related tiddlers (including self) and select them as well
				var tids=[];
				for (var i=0; i<theList.options.length; i++)
					if (theList.options[i].selected) tids=getRelatedTiddlers(theList.options[i].value,tids);
				// select related tiddlers (includes original selected tiddlers)
				for (var i=0; i<theList.options.length; i++)
					theList.options[i].selected=tids.contains(theList.options[i].value);
				this.displayStatus(tids.length,total);
				break;
			case 'exportListSmaller':	// decrease current listbox size
				var min=5;
				theList.size-=(theList.size>min)?1:0;
				break;
			case 'exportListLarger':	// increase current listbox size
				var max=(theList.options.length>25)?theList.options.length:25;
				theList.size+=(theList.size<max)?1:0;
				break;
			case 'exportClose':
				this.$('exportPanel').style.display='none';
				break;
		}
		return false;
	},
	displayStatus: function(count,total) {
		var txt=this.statusmsg.format([total,total!=1?'s':'',!count?'none':count==total?'all':count]);
		clearMessage();	displayMessage(txt);
		return txt;
	},
	refreshList: function(selectedIndex) {
		var theList = this.$('exportList'); if (!theList) return;
		// get the sort order
		var sort;
		if (!selectedIndex)   selectedIndex=0;
		if (selectedIndex==0) sort='modified';
		if (selectedIndex==1) sort='title';
		if (selectedIndex==2) sort='modified';
		if (selectedIndex==3) sort='modifier';
		if (selectedIndex==4) sort='tags';

		// unselect headings and count number of tiddlers actually selected
		var count=0;
		for (var t=5; t < theList.options.length; t++) {
			if (!theList.options[t].selected) continue;
			if (theList.options[t].value!='')
				count++;
			else { // if heading is selected, deselect it, and then select and count all in section
				theList.options[t].selected=false;
				for ( t++; t<theList.options.length && theList.options[t].value!=''; t++) {
					theList.options[t].selected=true;
					count++;
				}
			}
		}

		// disable 'export' and 'delete' buttons if no tiddlers selected
		this.$('exportStart').disabled=(count==0);
		this.$('exportDelete').disabled=(count==0);

		// show selection count
		var tiddlers = store.getTiddlers('title');
		if (theList.options.length) this.displayStatus(count,tiddlers.length);

		// if a [command] item, reload list... otherwise, no further refresh needed
		if (selectedIndex>4) return;

		// clear current list contents
		while (theList.length > 0) { theList.options[0] = null; }
		// add heading and control items to list
		var i=0;
		var indent=String.fromCharCode(160)+String.fromCharCode(160);
		theList.options[i++]=
			new Option(tiddlers.length+' tiddlers in document', '',false,false);
		theList.options[i++]=
			new Option(((sort=='title'   )?'>':indent)+' [by title]', '',false,false);
		theList.options[i++]=
			new Option(((sort=='modified')?'>':indent)+' [by date]', '',false,false);
		theList.options[i++]=
			new Option(((sort=='modifier')?'>':indent)+' [by author]', '',false,false);
		theList.options[i++]=
			new Option(((sort=='tags'    )?'>':indent)+' [by tags]', '',false,false);

		// output the tiddler list
		switch(sort) {
			case 'title':
				for(var t = 0; t < tiddlers.length; t++)
					theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);
				break;
			case 'modifier':
			case 'modified':
				var tiddlers = store.getTiddlers(sort);
				// sort descending for newest date first
				tiddlers.sort(function (a,b) {if(a[sort] == b[sort]) return(0); else return (a[sort] > b[sort]) ? -1 : +1; });
				var lastSection = '';
				for(var t = 0; t < tiddlers.length; t++) {
					var tiddler = tiddlers[t];
					var theSection = '';
					if (sort=='modified') theSection=tiddler.modified.toLocaleDateString();
					if (sort=='modifier') theSection=tiddler.modifier;
					if (theSection != lastSection) {
						theList.options[i++] = new Option(theSection,'',false,false);
						lastSection = theSection;
					}
					theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);
				}
				break;
			case 'tags':
				var theTitles = {}; // all tiddler titles, hash indexed by tag value
				var theTags = new Array();
				for(var t=0; t<tiddlers.length; t++) {
					var title=tiddlers[t].title;
					var tags=tiddlers[t].tags;
					if (!tags || !tags.length) {
						if (theTitles['untagged']==undefined) { theTags.push('untagged'); theTitles['untagged']=new Array(); }
						theTitles['untagged'].push(title);
					}
					else for(var s=0; s<tags.length; s++) {
						if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }
						theTitles[tags[s]].push(title);
					}
				}
				theTags.sort();
				for(var tagindex=0; tagindex<theTags.length; tagindex++) {
					var theTag=theTags[tagindex];
					theList.options[i++]=new Option(theTag,'',false,false);
					for(var t=0; t<theTitles[theTag].length; t++)
						theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);
				}
				break;
			}
		theList.selectedIndex=selectedIndex; // select current control item
		this.$('exportStart').disabled=true;
		this.$('exportDelete').disabled=true;
		this.displayStatus(0,tiddlers.length);
	},
	askForFilename: function(here) {
		var msg=here.title; // use tooltip as dialog box message
		var path=getLocalPath(document.location.href);
		var slashpos=path.lastIndexOf('/'); if (slashpos==-1) slashpos=path.lastIndexOf('\\'); 
		if (slashpos!=-1) path = path.substr(0,slashpos+1); // remove filename from path, leave the trailing slash
		var filetype=this.$('exportFormat').value.toLowerCase();
		var defext='html';
		if (filetype==this.type_TX) defext='txt';
		if (filetype==this.type_CS) defext='csv';
		if (filetype==this.type_NF) defext='xml';
		var file=this.newdefault.replace(/html$/,defext);
		var result='';
		if(window.Components) { // moz
			try {
				netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
				var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
				var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
				picker.init(window, msg, nsIFilePicker.modeSave);
				var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
				thispath.initWithPath(path);
				picker.displayDirectory=thispath;
				picker.defaultExtension=defext;
				picker.defaultString=file;
				picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
				if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.path;
			}
			catch(e) { alert('error during local file access: '+e.toString()) }
		}
		else { // IE
			try { // XPSP2 IE only
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|XML files|*.xml|';
				s.FilterIndex=defext=='txt'?2:'html'?3:'xml'?4:1;
				s.InitialDir=path;
				s.FileName=file;
				if (s.showOpen()) var result=s.FileName;
			}
			catch(e) {  // fallback
				var result=prompt(msg,path+file);
			}
		}
		return result;
	},
	initFilter: function() {
		this.$('exportFilterStart').checked=false; this.$('exportStartDate').value='';
		this.$('exportFilterEnd').checked=false;  this.$('exportEndDate').value='';
		this.$('exportFilterTags').checked=false; this.$('exportTags').value='';
		this.$('exportFilterText').checked=false; this.$('exportText').value='';
		this.showFilterFields();
	},
	showFilterFields: function(which) {
		var show=this.$('exportFilterStart').checked;
		this.$('exportFilterStartBy').style.display=show?'block':'none';
		this.$('exportStartDate').style.display=show?'block':'none';
		var val=this.$('exportFilterStartBy').value;
		this.$('exportStartDate').value
			=this.getFilterDate(val,'exportStartDate').formatString(this.datetimefmt);
		if (which && (which.id=='exportFilterStartBy') && (val=='other'))
			this.$('exportStartDate').focus();

		var show=this.$('exportFilterEnd').checked;
		this.$('exportFilterEndBy').style.display=show?'block':'none';
		this.$('exportEndDate').style.display=show?'block':'none';
		var val=this.$('exportFilterEndBy').value;
		this.$('exportEndDate').value
			=this.getFilterDate(val,'exportEndDate').formatString(this.datetimefmt);
		 if (which && (which.id=='exportFilterEndBy') && (val=='other'))
			this.$('exportEndDate').focus();

		var show=this.$('exportFilterTags').checked;
		this.$('exportTags').style.display=show?'block':'none';

		var show=this.$('exportFilterText').checked;
		this.$('exportText').style.display=show?'block':'none';
	},
	getFilterDate: function(val,id) {
		var result=0;
		switch (val) {
			case 'file':
				result=new Date(document.lastModified);
				break;
			case 'other':
				result=new Date(this.$(id).value);
				break;
			default: // today=0, yesterday=1, one week=7, two weeks=14, a month=31
				var now=new Date(); var tz=now.getTimezoneOffset()*60000; now-=tz;
				var oneday=86400000;
				if (id=='exportStartDate')
					result=new Date((Math.floor(now/oneday)-val)*oneday+tz);
				else
					result=new Date((Math.floor(now/oneday)-val+1)*oneday+tz-1);
				break;
		}
		return result;
	},
	filterExportList: function() {
		var theList  = this.$('exportList'); if (!theList) return -1;
		var filterStart=this.$('exportFilterStart').checked;
		var val=this.$('exportFilterStartBy').value;
		var startDate=config.macros.exportTiddlers.getFilterDate(val,'exportStartDate');
		var filterEnd=this.$('exportFilterEnd').checked;
		var val=this.$('exportFilterEndBy').value;
		var endDate=config.macros.exportTiddlers.getFilterDate(val,'exportEndDate');
		var filterTags=this.$('exportFilterTags').checked;
		var tags=this.$('exportTags').value;
		var filterText=this.$('exportFilterText').checked;
		var text=this.$('exportText').value;
		if (!(filterStart||filterEnd||filterTags||filterText)) {
			alert('Please set the selection filter');
			this.$('exportFilterPanel').style.display='block';
			return -1;
		}
		if (filterStart&&filterEnd&&(startDate>endDate)) {
			var msg='starting date/time:\n'
			msg+=startDate.toLocaleString()+'\n';
			msg+='is later than ending date/time:\n'
			msg+=endDate.toLocaleString()
			alert(msg);
			return -1;
		}
		// if filter by tags, get list of matching tiddlers
		// use getMatchingTiddlers() (if MatchTagsPlugin is installed) for full boolean expressions
		// otherwise use getTaggedTiddlers() for simple tag matching
		if (filterTags) {
			var fn=store.getMatchingTiddlers||store.getTaggedTiddlers;
			var t=fn.apply(store,[tags]);
			var tagged=[];
			for (var i=0; i<t.length; i++) tagged.push(t[i].title);
		}
		// scan list and select tiddlers that match all applicable criteria
		var total=0;
		var count=0;
		for (var i=0; i<theList.options.length; i++) {
			// get item, skip non-tiddler list items (section headings)
			var opt=theList.options[i]; if (opt.value=='') continue;
			// get tiddler, skip missing tiddlers (this should NOT happen)
			var tiddler=store.getTiddler(opt.value); if (!tiddler) continue; 
			var sel=true;
			if ( (filterStart && tiddler.modified<startDate)
			|| (filterEnd && tiddler.modified>endDate)
			|| (filterTags && !tagged.contains(tiddler.title))
			|| (filterText && (tiddler.text.indexOf(text)==-1) && (tiddler.title.indexOf(text)==-1)))
				sel=false;
			opt.selected=sel;
			count+=sel?1:0;
			total++;
		}
		return count;
	},
	deleteTiddlers: function() {
		var list=this.$('exportList'); if (!list) return;
		var tids=[];
		for (i=0;i<list.length;i++)
			if (list.options[i].selected && list.options[i].value.length)
				tids.push(list.options[i].value);
		if (!confirm('Are you sure you want to delete these tiddlers:\n\n'+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			var msg="'"+tid.title+"' is tagged with 'systemConfig'.\n\n";
			msg+='Removing this tiddler may cause unexpected results.  Are you sure?'
			if (tid.tags.contains('systemConfig') && !confirm(msg)) continue;
			store.removeTiddler(tid.title);
			story.closeTiddler(tid.title);
		}
		store.resumeNotifications();
		alert(tids.length+' tiddlers deleted');
		this.refreshList(0); // reload listbox
		store.notifyAll(); // update page display
	},
	go: function() {
		if (window.location.protocol!='file:') // make sure we are local
			{ displayMessage(config.messages.notFileUrlError); return; }
		// get selected tidders, target filename, target type, and notes
		var list=this.$('exportList'); if (!list) return;
		var tids=[]; for (var i=0; i<list.options.length; i++) {
			var opt=list.options[i]; if (!opt.selected||!opt.value.length) continue;
			var tid=store.getTiddler(opt.value); if (!tid) continue;
			tids.push(tid);
		}
		if (!tids.length) return; // no tiddlers selected
		var target=this.$('exportFilename').value.trim();
		if (!target.length) {
			displayMessage('A local target path/filename is required',target);
			return;
		}
		var merge=this.$('exportMerge').checked;
		var filetype=this.$('exportFormat').value.toLowerCase();
		var notes=this.$('exportNotes').value.replace(/\n/g,'<br>');
		var total={val:0};
		var out=this.assembleFile(target,filetype,tids,notes,total,merge);
		if (!total.val) return; // cancelled file overwrite
		var link='file:///'+target.replace(/\\/g,'/');
		var samefile=link==decodeURIComponent(window.location.href);
		var p=getLocalPath(document.location.href);
		if (samefile) {
			if (config.options.chkSaveBackups) { var t=loadOriginal(p);if(t)saveBackup(p,t); }
			if (config.options.chkGenerateAnRssFeed && saveRss instanceof Function) saveRss(p);
		}
		var ok=saveFile(target,out);
		displayMessage((ok?this.okmsg:this.failmsg).format([total.val,total.val!=1?'s':'',target]),link);
	},
	plainTextHeader:
		 'Source:\n\t%0\n'
		+'Title:\n\t%1\n'
		+'Subtitle:\n\t%2\n'
		+'Created:\n\t%3 by %4\n'
		+'Application:\n\tTiddlyWiki %5 / %6 %7\n\n',
	plainTextTiddler:
		'- - - - - - - - - - - - - - -\n'
		+'|     title: %0\n'
		+'|   created: %1\n'
		+'|  modified: %2\n'
		+'| edited by: %3\n'
		+'|      tags: %4\n'
		+'- - - - - - - - - - - - - - -\n'
		+'%5\n',
	plainTextFooter:
		'',
	newsFeedHeader:
		 '<'+'?xml version="1.0"?'+'>\n'
		+'<rss version="2.0">\n'
		+'<channel>\n'
		+'<title>%1</title>\n'
		+'<link>%0</link>\n'
		+'<description>%2</description>\n'
		+'<language>en-us</language>\n'
		+'<copyright>Copyright '+(new Date().getFullYear())+' %4</copyright>\n'
		+'<pubDate>%3</pubDate>\n'
		+'<lastBuildDate>%3</lastBuildDate>\n'
		+'<docs>http://blogs.law.harvard.edu/tech/rss</docs>\n'
		+'<generator>TiddlyWiki %5 / %6 %7</generator>\n',
	newsFeedTiddler:
		'\n%0\n',
	newsFeedFooter:
		'</channel></rss>',
	pureStoreHeader:
		 '<html><body>'
		+'<style type="text/css">'
		+'	#storeArea {display:block;margin:1em;}'
		+'	#storeArea div {padding:0.5em;margin:1em;border:2px solid black;height:10em;overflow:auto;}'
		+'	#pureStoreHeading {width:100%;text-align:left;background-color:#eeeeee;padding:1em;}'
		+'</style>'
		+'<div id="pureStoreHeading">'
		+'	TiddlyWiki "PureStore" export file<br>'
		+'	Source'+': <b>%0</b><br>'
		+'	Title: <b>%1</b><br>'
		+'	Subtitle: <b>%2</b><br>'
		+'	Created: <b>%3</b> by <b>%4</b><br>'
		+'	TiddlyWiki %5 / %6 %7<br>'
		+'	Notes:<hr><pre>%8</pre>'
		+'</div>'
		+'<div id="storeArea">',
	pureStoreTiddler:
		'%0\n%1',
	pureStoreFooter:
		'</div><!--POST-BODY-START-->\n<!--POST-BODY-END--></body></html>',
	assembleFile: function(target,filetype,tids,notes,total,merge) {
		var revised='';
		var now = new Date().toLocaleString();
		var src=convertUnicodeToUTF8(document.location.href);
		var title = convertUnicodeToUTF8(wikifyPlain('SiteTitle').htmlEncode());
		var subtitle = convertUnicodeToUTF8(wikifyPlain('SiteSubtitle').htmlEncode());
		var user = convertUnicodeToUTF8(config.options.txtUserName.htmlEncode());
		var twver = version.major+'.'+version.minor+'.'+version.revision;
		var v=version.extensions.ExportTiddlersPlugin; var pver = v.major+'.'+v.minor+'.'+v.revision;
		var headerargs=[src,title,subtitle,now,user,twver,'ExportTiddlersPlugin',pver,notes];
		switch (filetype) {
			case this.type_TX: // plain text
				var header=this.plainTextHeader.format(headerargs);
				var footer=this.plainTextFooter;
				break;
			case this.type_CS: // comma-separated
				var fields={};
				for (var i=0; i<tids.length; i++) for (var f in tids[i].fields) fields[f]=f;
				var names=['title','created','modified','modifier','tags','text'];
				for (var f in fields) names.push(f);
				var header=names.join(',')+'\n';
				var footer='';
				break;
			case this.type_NF: // news feed (XML)
				headerargs[0]=store.getTiddlerText('SiteUrl','');
				var header=this.newsFeedHeader.format(headerargs);
				var footer=this.newsFeedFooter;
				break;
			case this.type_PS: // PureStore (no code)
				var header=this.pureStoreHeader.format(headerargs);
				var footer=this.pureStoreFooter;
				break;
			case this.type_TW: // full TiddlyWiki
			default:
				var currPath=getLocalPath(window.location.href);
				var original=loadFile(currPath);
				if (!original) { displayMessage(config.messages.cantSaveError); return; }
				var posDiv = locateStoreArea(original);
				if (!posDiv) { displayMessage(config.messages.invalidFileError.format([currPath])); return; }
				var header = original.substr(0,posDiv[0]+startSaveArea.length)+'\n';
				var footer = '\n'+original.substr(posDiv[1]);
				break;
		}
		var out=this.getData(target,filetype,tids,fields,merge);
		var revised = header+convertUnicodeToUTF8(out.join('\n'))+footer;
		// if full TW, insert page title and language attr, and reset all MARKUP blocks...
		if (filetype==this.type_TW) {
			var newSiteTitle=convertUnicodeToUTF8(getPageTitle()).htmlEncode();
			revised=revised.replaceChunk('<title'+'>','</title'+'>',' ' + newSiteTitle + ' ');
			revised=updateLanguageAttribute(revised);
			var titles=[]; for (var i=0; i<tids.length; i++) titles.push(tids[i].title);
			revised=updateMarkupBlock(revised,'PRE-HEAD',
				titles.contains('MarkupPreHead')? 'MarkupPreHead' :null);
			revised=updateMarkupBlock(revised,'POST-HEAD',
				titles.contains('MarkupPostHead')?'MarkupPostHead':null);
			revised=updateMarkupBlock(revised,'PRE-BODY',
				titles.contains('MarkupPreBody')? 'MarkupPreBody' :null);
			revised=updateMarkupBlock(revised,'POST-SCRIPT',
				titles.contains('MarkupPostBody')?'MarkupPostBody':null);
		}
		total.val=out.length;
		return revised;
	},
	getData: function(target,filetype,tids,fields,merge) {
		// output selected tiddlers and gather list of titles (for use with merge)
		var out=[]; var titles=[];
		var url=store.getTiddlerText('SiteUrl','');
		for (var i=0; i<tids.length; i++) {
			out.push(this.formatItem(store,filetype,tids[i],url,fields));
			titles.push(tids[i].title);
		}
		// if TW or PureStore format, ask to merge with existing tiddlers (if any)
		if (filetype==this.type_TW || filetype==this.type_PS) {
			var txt=loadFile(target);
			if (txt && txt.length) {
				var remoteStore=new TiddlyWiki();
				if (version.major+version.minor*.1+version.revision*.01<2.52) txt=convertUTF8ToUnicode(txt);
				if (remoteStore.importTiddlyWiki(txt)) {
					var existing=remoteStore.getTiddlers('title');
					var msg=this.overwriteprompt.format([target,existing.length,existing.length!=1?'s':'']);
					if (merge) {
						var added=titles.length; var updated=0; var kept=0;
						for (var i=0; i<existing.length; i++)
							if (titles.contains(existing[i].title)) {
								added--; updated++;
							} else {
								out.push(this.formatItem(remoteStore,filetype,existing[i],url));
								kept++;
							}
						displayMessage(this.mergestatus.format(
							[added,added!=1?'s':'',updated,updated!=1?'s':'',kept,kept!=1?'s':'',]));
					}
					else if (!confirm(msg)) out=[]; // empty the list = don't write file
				}
			}
		}
		return out;
	},
	formatItem: function(s,f,t,u,fields) {
		if (f==this.type_TW)
			var r=s.getSaver().externalizeTiddler(s,t);
		if (f==this.type_PS)
			var r=this.pureStoreTiddler.format([t.title,s.getSaver().externalizeTiddler(s,t)]);
		if (f==this.type_NF)
			var r=this.newsFeedTiddler.format([t.saveToRss(u)]);
		if (f==this.type_TX)
			var r=this.plainTextTiddler.format([t.title, t.created.toLocaleString(), t.modified.toLocaleString(),
				t.modifier, String.encodeTiddlyLinkList(t.tags), t.text]);
		if (f==this.type_CS) {
			function toCSV(t) { return '"'+t.replace(/"/g,'""')+'"'; } // always encode CSV
			var out=[ toCSV(t.title), toCSV(t.created.toLocaleString()), toCSV(t.modified.toLocaleString()),
				toCSV(t.modifier), toCSV(String.encodeTiddlyLinkList(t.tags)), toCSV(t.text) ];
			for (var f in fields) out.push(toCSV(t.fields[f]||''));
			var r=out.join(',');
		}
		return r||"";
	}
}
//}}}
/***
!!!Control panel CSS
//{{{
!css
#exportPanel {
	display: none; position:absolute; z-index:12; width:35em; right:105%; top:6em;
	background-color: #eee; color:#000; font-size: 8pt; line-height:110%;
	border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;
	padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em;
}
#exportPanel a, #exportPanel td a { color:#009; display:inline; margin:0px; padding:1px; }
#exportPanel table {
	width:100%; border:0px; padding:0px; margin:0px;
	font-size:8pt; line-height:110%; background:transparent;
}
#exportPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }
#exportPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }
#exportPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}
#exportPanel input  { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%; }
#exportPanel textarea  { width:98%;padding:0px;margin:0px;overflow:auto;font-size:8pt; }
#exportPanel .box {
	border:1px solid black; padding:3px; margin-bottom:5px;
	background:#f8f8f8; -moz-border-radius:5px;-webkit-border-radius:5px; }
#exportPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }
#exportPanel .rad { width:auto;border:0 }
#exportPanel .chk { width:auto;border:0 }
#exportPanel .btn { width:auto; }
#exportPanel .btn1 { width:98%; }
#exportPanel .btn2 { width:48%; }
#exportPanel .btn3 { width:32%; }
#exportPanel .btn4 { width:24%; }
#exportPanel .btn5 { width:19%; }
!end
//}}}
!!!Control panel HTML
//{{{
!html
<!-- target path/file  -->
<div>
<div style="float:right;padding-right:.5em">
<input type="checkbox" style="width:auto" id="exportMerge" CHECKED
	title="combine selected tiddlers with existing tiddlers (if any) in export file"> merge
</div>
export to:<br>
<input type="text" id="exportFilename" size=40 style="width:93%"><input 
	type="button" id="exportBrowse" value="..." title="select or enter a local folder/file..." style="width:5%" 
	onclick="var fn=config.macros.exportTiddlers.askForFilename(this); if (fn.length) this.previousSibling.value=fn; ">
</div>

<!-- output format -->
<div>
format:
<select id="exportFormat" size=1>
	<option value="TW">TiddlyWiki HTML document (includes core code)</option>
	<option value="PS">TiddlyWiki "PureStore" HTML file (tiddler data only)</option>
	<option value="TX">TiddlyWiki plain text TXT file (tiddler source listing)</option>
	<option value="CS">Comma-Separated Value (CSV) data file</option>
	<option value="NF">RSS NewsFeed XML file</option>
</select>
</div>

<!-- notes -->
<div>
notes:<br>
<textarea id="exportNotes" rows=3 cols=40 style="height:4em;margin-bottom:5px;" onfocus="this.select()"></textarea> 
</div>

<!-- list of tiddlers -->
<table><tr align="left"><td>
	select:
	<a href="JavaScript:;" id="exportSelectAll"
		onclick="return config.macros.exportTiddlers.process(this)" title="select all tiddlers">
		&nbsp;all&nbsp;</a>
	<a href="JavaScript:;" id="exportSelectChanges"
		onclick="return config.macros.exportTiddlers.process(this)" title="select tiddlers changed since last save">
		&nbsp;changes&nbsp;</a>
	<a href="JavaScript:;" id="exportSelectOpened"
		onclick="return config.macros.exportTiddlers.process(this)" title="select tiddlers currently being displayed">
		&nbsp;opened&nbsp;</a>
	<a href="JavaScript:;" id="exportSelectRelated"
		onclick="return config.macros.exportTiddlers.process(this)" title="select tiddlers related to the currently selected tiddlers">
		&nbsp;related&nbsp;</a>
	<a href="JavaScript:;" id="exportToggleFilter"
		onclick="return config.macros.exportTiddlers.process(this)" title="show/hide selection filter">
		&nbsp;filter&nbsp;</a>
</td><td align="right">
	<a href="JavaScript:;" id="exportListSmaller"
		onclick="return config.macros.exportTiddlers.process(this)" title="reduce list size">
		&nbsp;&#150;&nbsp;</a>
	<a href="JavaScript:;" id="exportListLarger"
		onclick="return config.macros.exportTiddlers.process(this)" title="increase list size">
		&nbsp;+&nbsp;</a>
</td></tr></table>
<select id="exportList" multiple size="10" style="margin-bottom:5px;"
	onchange="config.macros.exportTiddlers.refreshList(this.selectedIndex)">
</select><br>

<!-- selection filter -->
<div id="exportFilterPanel" style="display:none">
<table><tr align="left"><td>
	selection filter
</td><td align="right">
	<a href="JavaScript:;" id="exportHideFilter"
		onclick="return config.macros.exportTiddlers.process(this)" title="hide selection filter">hide</a>
</td></tr></table>
<div class="box">

<input type="checkbox" class="chk" id="exportFilterStart" value="1"
	onclick="config.macros.exportTiddlers.showFilterFields(this)"> starting date/time<br>
<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">
	<select size=1 id="exportFilterStartBy"
		onchange="config.macros.exportTiddlers.showFilterFields(this);">
		<option value="0">today</option>
		<option value="1">yesterday</option>
		<option value="7">a week ago</option>
		<option value="30">a month ago</option>
		<option value="file">file date</option>
		<option value="other">other (mm/dd/yyyy hh:mm)</option>
	</select>
</td><td width="50%">
	<input type="text" id="exportStartDate" onfocus="this.select()"
		onchange="config.macros.exportTiddlers.$('exportFilterStartBy').value='other';">
</td></tr></table>

<input type="checkbox" class="chk" id="exportFilterEnd" value="1"
	onclick="config.macros.exportTiddlers.showFilterFields(this)"> ending date/time<br>
<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">
	<select size=1 id="exportFilterEndBy"
		onchange="config.macros.exportTiddlers.showFilterFields(this);">
		<option value="0">today</option>
		<option value="1">yesterday</option>
		<option value="7">a week ago</option>
		<option value="30">a month ago</option>
		<option value="file">file date</option>
		<option value="other">other (mm/dd/yyyy hh:mm)</option>
	</select>
</td><td width="50%">
	<input type="text" id="exportEndDate" onfocus="this.select()"
		onchange="config.macros.exportTiddlers.$('exportFilterEndBy').value='other';">
</td></tr></table>

<input type="checkbox" class="chk" id=exportFilterTags value="1"
	onclick="config.macros.exportTiddlers.showFilterFields(this)"> match tags<br>
<input type="text" id="exportTags" onfocus="this.select()">

<input type="checkbox" class="chk" id=exportFilterText value="1"
	onclick="config.macros.exportTiddlers.showFilterFields(this)"> match titles/tiddler text<br>
<input type="text" id="exportText" onfocus="this.select()">

</div> <!--box-->
</div> <!--panel-->

<!-- action buttons -->
<div style="text-align:center">
<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"
	id="exportFilter" value="apply filter">
<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"
	id="exportStart" value="export tiddlers">
<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"
	id="exportDelete" value="delete tiddlers">
<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"
	id="exportClose" value="close">
</div><!--center-->
!end
//}}}
***/
 
/***
|''Name''|TiddlySpaceFilters|
|''Description''|provide TiddlySpace-specific filter extensions|
|''Author''|Jon Robson|
|''Version''|0.6.1|
|''Status''|@@beta@@|
|''CoreVersion''|2.6.2|
|''Requires''|TiddlySpaceConfig|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
!Usage
{{{
<<tsList Private>>
<<tsList Public>>
<<tsList Draft>>
}}}
!Code
***/
//{{{
(function($) {

var tiddlyspace = config.extensions.tiddlyspace;
var privateBag = tiddlyspace.getCurrentBag("private");
var publicBag = tiddlyspace.getCurrentBag("public");

config.filterHelpers = {
	is: {
		"private": function(tiddler) {
			var bag = tiddler.fields["server.bag"];
			return bag == privateBag;
		},
		"public": function(tiddler) {
			var bag = tiddler.fields["server.bag"];
			return bag == publicBag;
		},
		draft: function(tiddler) {
			var fields = tiddler.fields;
			var bag = fields["server.bag"];
			return (privateBag == bag && fields["publish.name"]) ? true : false;
		},
		local: function(tiddler) {
			return config.filterHelpers.is["public"](tiddler) ||
				config.filterHelpers.is["private"](tiddler);
		},
		unsynced: function(tiddler) {
			return tiddler ? tiddler.isTouched() : false;
		}
	}
};

config.filters.is = function(results, match) {
	var candidates = store.getTiddlers("title");
	var type = match[3];
	for (var i = 0; i < candidates.length; i++) {
		var tiddler = candidates[i];
		var helper = config.filterHelpers.is[type];
		if(helper && helper(tiddler)) {
			results.pushUnique(tiddler);
		}
	}
	return results;
};

})(jQuery);
//}}}
/***
|''Name''|DiffFormatter|
|''Description''|highlighting of text comparisons|
|''Author''|FND|
|''Version''|0.9.0|
|''Status''|beta|
|''Source''|http://svn.tiddlywiki.org/Trunk/contributors/FND/formatters/DiffFormatter.js|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/contributors/FND/|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
|''Keywords''|formatting|
!Description
Highlights changes in a unified [[diff|http://en.wikipedia.org/wiki/Diff#Unified_format]].
!Notes
Based on Martin Budden's [[DiffFormatterPlugin|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/formatters/DiffFormatterPlugin.js]].
!Usage
The formatter is applied to blocks wrapped in <html><code>{{{diff{..}}}</code></html> within tiddlers tagged with "diff".
!Revision History
!!v0.9 (2010-04-07)
* initial release; fork of DiffFormatterPlugin
!StyleSheet
.diff { white-space: pre; font-family: monospace; }
.diff ins, .diff del { display: block; text-decoration: none; }
.diff ins { background-color: #dfd; }
.diff del { background-color: #fdd; }
.diff .highlight { background-color: [[ColorPalette::SecondaryPale]]; }
!Code
***/
//{{{
(function() {

config.shadowTiddlers.StyleSheetDiffFormatter = store.getTiddlerText(tiddler.title + "##StyleSheet");
store.addNotification("StyleSheetDiffFormatter", refreshStyles);

var formatters = [{
		name: "diffWrapper",
		match: "^\\{\\{diff\\{\n", // XXX: suboptimal
		termRegExp: /(.*\}\}\})$/mg,
		handler: function(w) {
			var el = createTiddlyElement(w.output, "div", null, "diff");
			w.subWikifyTerm(el, this.termRegExp);
		}
	}, {
		name: "diffRange",
		match: "^(?:@@|[+\\-]{3}) ",
		lookaheadRegExp: /^(?:@@|[+\-]{3}) .*\n/mg,
		handler: function(w) {
			createTiddlyElement(w.output, "div", null, "highlight").
				innerHTML = "&#8230;";
			this.lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
				w.nextMatch = this.lookaheadRegExp.lastIndex;
			}
		}
	}, {
		name: "diffAdded",
		match: "^\\+",
		termRegExp: /(\n)/mg,
		handler: function(w) {
			var el = createTiddlyElement(w.output, "ins", null, "added");
			w.subWikifyTerm(el, this.termRegExp);
		}
	}, {
		name: "diffRemoved",
		match: "^-",
		termRegExp: /(\n)/mg,
		handler: function(w) {
			var el = createTiddlyElement(w.output, "del", null, "removed");
			w.subWikifyTerm(el, this.termRegExp);
		}
	}
];

config.parsers.diffFormatter = new Formatter(formatters);
config.parsers.diffFormatter.format = "diff";
config.parsers.diffFormatter.formatTag = "diff";

})();
//}}}
@@Please do not modify this tiddler; it was created automatically upon space creation.@@
已經只加三分糖了,還是覺得喝得口乾舌燥,是不是以後都喝不加糖的茶就好了呢?
----
ComeBuy 加的糖比較容易讓人渴的樣子;今天中午買的是「嚮茶」,甜度正常喝起來還好,好像不會太膩。 -- 2011/3/2
/***
|''Name''|EditTemplateFieldsPlugin|
|''Version''|0.4.6|
|''Status''|beta|
|''Author''|Jon Robson|
|''Description''|Provides editing of custom fields|
|''Requires''||
|''Source''||
!Usage
put {{{<div macro="editFields"></div>}}} into your EditTemplate.
or {{{<div macro="viewFields"></div>}}} into your ViewTemplate.
!Todo
Support newlines in input boxes.
!Code
***/
//{{{
(function($) {
var viewFields = config.macros.viewFields = {
	handler: function(place, macroName, params, wikifier, paramString, tiddler) {
		var fields = editFields.getFields(tiddler).concat(params);
		var done = {};
		for(var i = 0; i < fields.length; i++) {
			var name = fields[i];
			var val = tiddler.fields[name];
			if(!done[name] && val) {
				done[name] = true;
				$("<div class='fieldValue' />").text("%0 : %1".format(name, val)).appendTo(place);
			}
		}
	}
};

var editFields = config.macros.editFields = {
	fieldType: {
		images: ["image", "geo.marker"]
	},
	handler: function(place, macroName, params, wikifier, paramString, tiddler) {
		var options = {
			fields: params
		};
		this.createInterface(place, tiddler, options);
	},
	getFields: function(tiddler) {
		var whitelisted = ["changecount"];
		var fields = [];
		for(var i in tiddler.fields) {
			var val = tiddler.fields[i];
			if(i.indexOf("server.") !== 0 && i.indexOf("_") !== 0 && typeof(val) == "string" && !whitelisted.contains(i) && val) {
				fields.push(i);
			}
		}
		return fields;
	},
	createInterface: function(place, tiddler, options) {
		var fieldContainer = $("<div class='tiddlerCustomFields' />").appendTo(place);
		var included = [];
		if(tiddler) {
			var fields = editFields.getFields(tiddler);
			for(var i = 0; i < fields.length; i++) {
				var name = fields[i];
				var val = tiddler.fields[name];
				this.addNewField(fieldContainer, name, val);
				included.push(name);
			}
		}
		for(var j = 0; j < options.fields.length; j++) {
			var field = options.fields[j];
			if(!included.contains(field)) {
				this.addNewField(fieldContainer, field, "");
			}
		}
		$("<button />").text("add new field").click(function() {
			editFields.addNewField(fieldContainer, "", "");
		}).appendTo(place);
	},
	addNewField: function(place, name, value) {
		var container = $("<div />").appendTo(place);
		if(editFields.fieldType.images.contains(name)) {
			valueInput = $("<select />");
			$("<option />").val("").text("").appendTo(valueInput);
			$.each(store.filterTiddlers("[is[image]]"), function(i, tiddler) {
				var opt = $("<option />").val(tiddler.title).text(tiddler.title).appendTo(valueInput)[0];
				if(value === tiddler.title) {
					$(opt).attr("selected", true);
				}
			});
		} else {
			type = value.indexOf("\n") > -1 ? "textarea" : "text";
			var valueInput = type == "text" ? $("<input type='text' />") : $("<textarea />");
		}
		valueInput.attr("edit", name).val(value).appendTo(container);
		$("<button class='delete' />").text("delete").click(function(ev) {
			var answer = confirm("Are you sure you want to remove this field?");
			if(answer) {
				var attr = $(ev.target).attr("field");
				var p = $(ev.target).parent();
				$("[edit]", p).val("");
				$(p).hide();
			}
		}).appendTo(container);
		var nameInput = $("<input class='fieldName' type='text' />").val(name).
			change(function(ev) {
				var el = $(ev.target);
				valueInput.attr("edit", el.val());
			}).prependTo(container);
	}
}
})(jQuery);
//}}}
!Summary
This tiddler is intended to be a central hub for all documentation on the mechanics, configuration, and use of $\LaTeX$ and ~MathJax on this site.  This is a first draft and will flesh out with time but hopefully there is enough here for people to get by for now.  If you have any questions please leave a comment at the bottom.

!Inputting $\LaTeX$ Script
Putting $\LaTeX$ script onto the site is easy.  Simply:
*Create a new tiddler (look for the 'new tiddler' link in the top-right).
*Change the title (highlighted by default) to something meaningful (just like a file name).
*Write some $\LaTeX$ script in the large text box (enclosed with {{{$...$}}} as usual).
*Click the tick (Save changes to this tiddler) which is above the edit-title box and to the right-hand side.
The mathematics you entered should be visible on the screen.  If you have problems then see the section on troubleshooting.

Beyond that things can get complicated.  If you prefer to learn by doing then [[Bare handed axiom checks work (Gareth)]] is probably the most thorough example of how to use $\LaTeX$ on the site.  [[Semantic Latex Example]] is also worth a look.  Be aware that there are some macros defined automatically when the site starts up.  They are in [[BasicMacros]].  Feel free to experiment with your own tiddlers but please don't change [[BasicMacros]].

If you want to know more about what is going on behind the scenes first you need to be aware that you are really using something called ~MathJax, not $\LaTeX$.

!Differences between $\LaTeX$ and ~MathJax
~MathJax tries hard to emulate $\LaTeX$ and bring you the most used functionality but it is NOT $\LaTeX$.  Some key differences are:
*Much of the lower-level $\TeX$ commands are not available.
*Most of the more powerful commands that are available can act quite differently to their $\LaTeX$ counterparts (for example, here, {{{\newcommand}}} allows you to overwrite any existing command).
*Few $\LaTeX$ packages are available, there is not even a version of "amsthm".
*In ~MathJax, //all// commands need to be enclosed in {{{$...$}}}, {{{\(...\)}}}, {{{\[...\]}}}, or {{{$$...$$}}}.  This includes environments like {{{\begin{align*}...\end{align*} }}} and macro definitions such as {{{\def\union{\cup} }}}.
*Basic large scale sectioning is not supported at all.  In particular, {{{\chapter}}}, {{{\section}}}, and {{{\ref}}} are not supported.
*Most text-formatting commands are unavailable, including {{{\emph}}} and {{{\begin{enumerate} }}}.

To see what is available in ~MathJax go [[here|http://www.mathjax.org/docs/1.1/tex.html#supported-latex-commands]].  Commands which are not labelled "non-standard" are $\TeX$ or $\LaTeX$ commands (I would avoid using non-standard commands so that you can easily export work later).

!Rendering
When you click a link to a tiddler it will be displayed in the main area (brought into the "story" and "rendered").  If it contains $\LaTeX$ script than the mathematics will be rendered and displayed automatically.  Right-click a mathematical expression for ~MathJax's context-sensitive menu for quick configuration.
\[
    \PopAll
    \GarethNotation

    \collection{U} = \set{\fiber{p}{\pi_i}}:{i \in I}

    \PopAll
\]

Some browsers don't display expressions on this site correctly (or at all).  It would be great if we could just make everything work but with our resources, it makes the most sense to support one or two browsers.  Firefox is recommended for both tiddlyspace and this site in particular but Chromium should work almost as well and I am interested in any problems you have with this browser.  You can find more [[here|Math Processing Error]].

There are two different rendering methods.  ~HTML-CSS and ~MathML.  You can find much more about these [[here|http://www.mathjax.org/docs/1.1/output.html]] but the important points are:
*~HTML-CSS is much slower (fonts and images are fetched online as they are required) but better quality.
*~MathML displays quite a lot better if you install the [[STIX|http://www.stixfonts.org/]] fonts.  Upgrading your browser can also make quite a big difference too.
*You can choose your favourite rendering method from the ~MathJax context sensitive menu by right-clicking any mathematial expression and selecting ''Settings > Math Renderer''.  You may well need to reload the site after doing this.
*We have configured ~MathJax to use ~MathML by default and ~HTML-CSS as a fallback option.

!Importing and Exporting $\LaTeX$
Because of the differences between $\LaTeX$ and ~MathJax (discussed above) copying work between the two (i.e. importing and exporting) is not a trivial task.

Firstly a note of caution.  If you make heavy use of features of one platform which are not available in another then you will have a tough time moving your work across.

The golden rule for this section is:
://Keep it simple//

It should be possible to import/export you mathematics by use of a small number of simple find/replace operations (0 counts as a small number).

The largescale structures you use on the two platforms is fundamentally different.  In $\LaTeX$ one uses commands like {{{\chapter}}}, {{{\section}}}, and {{{\ref}}} with the aim of creating a paper.  Online one creates tiddlers and links to tiddlers with the aim of building part of a website.  At this point you'll have to experiment with the tools available and see what works best but there's no getting around the fact that this aspect of importing and exporting will have to be done manually (at least for now).

Unfortunately, there are some small scale differences too.  ~MathJax does not support {{{\emph}}} or {{{\begin{enumerate} }}}.  The intension is that online you should use HTML for text markup.  On tiddlyspace.com, you can use basic HTML but it is highly recommended that you use standard [[TiddlyWiki markup syntax|Basic formatting]]@docs.  You can find more about how to drive ~TiddlyWikis in general from [[here|Contents]]@docs.

In short you have to realise that ~MathJax only takes responsibility for the mathematics.  Text and structure would be better handled by a $\LaTeX$ to HTML converter.  Try a web search if you're interested in this; I've not taken the time to do any research on it.

On both platforms you have the power to create your own macros and even keep a small collection of personal macros which you can //import// and use whenever you write $\LaTeX$ script (see the section below).  Of course, when importing and exporting mathematics, the supporting macros will have to be moved across too (note that ~MathJax requires definitions to be enclosed in {{{$...$}}} or similar whereas $\LaTeX$ requires that they are not).  There are globally available lists of macros on the site and if you use any of these commands you'll need to copy the various definitions when you export (again, see the section below).

To help keep things as simple as possible people please try to adopt the authors style of $\LaTeX$ code (within reason) when leaving comments on their work.  It will be much easier for them to understand and apply your suggestions and translation between ~MathJax and $\LaTeX$ will be easier.

I have created a $\LaTeX$ [[skeleton file|Convert site to Latex]] which can be used for working offline and for copying work from the site into $\LaTeX$.

!Macros
Both with $\LaTeX$ and ~MathJax you have the power to create your own macros.  However, because of the collaborative nature of the site, one should be careful/considerate when creating macros.

There are a number of ways of creating a new macro: {{{\newcommand}}}; {{{\renewcommand}}}; {{{\def}}}; and {{{\let}}}.  Given the underlying javascript I would urge you to avoid {{{\let}}} (it is quite powerful).   Currently, neither {{{\newcommand}}} nor {{{\renewcommand}}} check for existing macros so they effectively do the same thing as one another.  {{{\def}}} allows one to build macros with templates (see [[BasicMacros]] for examples like {{{\function}}} and {{{\set}}}).

The golden rule here is:
://Don't overwrite $\TeX$ or $\LaTeX$ commands//

The main reason for this is that other people may rely on these macros when leaving comments.  Richard and I have discussed some sort of automated warning for potentially harmful command name overwrites but for now don't worry too much and have at it.  If you break something due to a rogue definition I'll probably find it and fix it anyway.  If you get in trouble and things are acting weird then reload the site.  If you really want to know more about which command names to avoid then
+++[Read on (techincal information)][Hide]
The problem with {{{\newcommand}}} and {{{\renewcommand}}} here is that they give you into a false sense of security.  Unlike in $\LaTeX$, [[localTeX.js]] doesn't check to see if a definition exists before overwriting it with {{{\newcommand}}}.

The idea in $\LaTeX$ is that {{{\newcommand}}} won't overwrite an existing macro and thereby protects the user from themselves.  If you use {{{\def}}} then you can easily burn yourself.  For example:
{{{
\def\or{\vee}
}}}
This looks innocent enough but after making such a definition you'll find that {{{\begin{align}...\end{align} }}} stops working and $\LaTeX$ throws errors about counters doing weird things.  The reason is that {{{\or}}} is a basic $\TeX$ command for use with {{{\ifcase}}} and the $\LaTeX$ definition of the align environment makes heavy use of this.

I would suggest that when you do create a new macro that you check whether or not it exists in $\LaTeX$ by trying to define a macro with that name using {{{\newcommand}}}.  If $\LaTeX$ doesn't complain that the command already exists then you should be good to go on the site.  Be mindful that there exists a basic set of macros for discussing [[Analytic Topology|Basic Macros]] and another one for discussing [[Kunen|KunenMacros]] in particular; it is good practice to avoid changing the meanings of these macros because people may rely on them to make comments on your work.  Making notational tweaks to these macros is perfectly fine though.  Also, don't overwrite the commands {{{\Clean}}}, {{{\PushMacros}}}, {{{\PopMacros}}}, {{{\PopAll}}}, or any of the macrosets like {{{\BasicMacros}}} and {{{\LocalMacros}}} because you will cause chaos!

There is a short list of exceptions to the golden rule which are made for readability.  At the moment that list (stored in [[LatexNucleus]]) is
{{{
\let\LaTeXepsilon\epsilon
\let\LaTeXsubset\subset
\let\LaTeXrestriction\restriction
}}}
Translating: people are free to overwrite the commands {{{\epsilon}}}, {{{\subset}}}, and {{{\restriction}}}.  Consequently you should not rely on any of these three commands to be their original $\LaTeX$ selves when you are making a definition and you should use the backup commands {{{\LaTeXepsilon}}}, {{{\LaTeXsubset}}}, and {{{\LaTeXrestriction}}} instead.  For example:
{{{
\def\restriction#1#2{{{#1}\mathord{\LaTeXrestriction}\parentheses{#2}}}
}}}
If you think there are other commands which you would like to overwrite then create an appropriate tiddler for discussion.  The aim is, however, to keep the list as short as possible (so that it is easy to move definitions from $\LaTeX$ to ~MathJax.
===
----

If you want to make a new definition, for example:
{{{
\def\ball#1#2{{B_{#2}\of{#1}}}
}}}
in a tiddler then please make sure to tidy up when you are done by adding
{{{
$\PopAll$
}}}
at the end of your tiddler (or at the end of the section in which you write $\LaTeX$ script).  It's a good idea to start your tiddler with {{{\PopAll}}} too incase someone else forgot to tidy up.  Rarely, it may be that {{{\PopAll}}} is simply not powerful enough to do the job.  If you are experiencing macro weirdness even after {{{\PopAll}}} then you can try {{{\Clean}}} (slow but ''powerful'' - "occasionally more effective than reloading the site" powerful!).

There are also sets of macros which you may find useful.  If you wish to use one or more of these then begin your tiddler (or section of mathematics) with:
{{{
$
\PopAll
\<name of macroset 0>
\<name of macroset 1>
\<name of macroset 2>
...
$
}}}
and, as before, make sure to end the corresponding section with
{{{
$\PopAll$
}}}
Check out [[Errata: Chapter 3]] for an example.

The macrosets currently available (linked to in [[LatexNucleus]]) are:
|\BasicMacros|[[BasicMacros]]|Loaded automatically|
|\BasicMacroAbbreviations|~|Loaded automatically|
|\BasicMacrosSupplement|~|Loaded automatically|
|\KunenMacros|[[KunenMacros]]||
|\KunenMacroAbbreviations|~||
|\GarethNotation|[[GarethMacros||
|\GarethMacros|~||

If you want to make your own personal macro set then feel free to make a copy of [[mine|GarethMacros]] and change the relevant parts (don't forget the tags).  Feel free to dip into the other macrosets for ideas.  To make the command list globally accessible you'll have to add a line to [[LatexNucleus]].  If you have any problems then create an appropriate discussion tiddler and leave a comment.

You can get even fancier by use of {{{\LocalMacros}}}.  If you are writing a particularly long tiddler which should generate lots of embedded comments then it might be wise to create a macroset just for the local macros.  A special macroset name is reserved just for this purpose, {{{\LocalMacros}}} and the intended usage is as follows:
{{{
$
\PopAll
\<name of macroset 0>
\<name of macroset 1>
\<name of macroset 2>
...
\def\LocalMacros{
	\def\<name of local macro 0>{<definition of local macro 0}
	\def\<name of local macro 1>{<definition of local macro 1}
	\def\<name of local macro 2>{<definition of local macro 2}
	...
}
\LocalMacros
$
}}}

Now, If, for example, I want to leave a lengthy comment on one aspect of your proof and there are some macros in my personal macro set which would be useful to me then I can write:
{{{
+++[Gareth]
$\PushMacros\GarethMacros\LocalMacros$
<my comment>
$\PopMacros$
===
}}}
This way I'll have access to my macros but, in the event of a name clash, priority will be given to the local macros of the tiddler, followed by my personal macros, followed by the macrosets imported at the beginning, followed by basic macros, followed by plain $\LaTeX$.  (Like I said, fancy, but occasionally appropriate).  {{{\LocalMacros}}} is defined to be trivial by default so there should be no danger in using {{{\LocalMacros}}} for all of your comments.

!Semantic $\LaTeX$
We aim to promote the use of semantic style $\LaTeX$.

The heart of this idea is in the list of definitions in [[BasicMacros]] (these definitions are automatically loaded so you can easily try them out).  The primary goal of these macros is to make the underlying $\LaTeX$ code easier to read and understand.  There are some other benefits like reducing the chance of subtle formatting errors and giving people a way to make basic notational changes with practically no effort.

Of course you are free to only use standard $\LaTeX$ if that's what you prefer but we (Rolf and I) encourage you to give semantic $\LaTeX$ a go.

!Comments
+++[Add Comment][Hide]
<<comment here reverse>>
===


/%comment%/__''Thanks''__
^^posted by gareth on Thursday, April 14th, 2011 at 9:14:46 am^^
<<<
I just looked over this tiddler and I can imagine most people will be thinking "tl,dr".  Ah well, I'm not about to start improving this now.

As for {{{\Tidy}}}, I would be in favour but for the existence of {{{\PushMacros}}} and {{{\PopMacros}}}.  If people are going to know of and possibly use these commands then {{{\PopAll}}} needs no explanation and {{{\Tidy}}} would only serve to confuse.
<<<
__''{{{\PopAll}}} and {{{\Clean}}}''__
^^posted by richard on Wednesday, April 13th, 2011 at 10:58:43 pm^^
<<<
Sorry Gareth, I really should have gotten back to you quicker about {{{\PopAll}}} and {{{\Clean}}}. {{{\Clean}}} was intended as a save-your-tiddler-from-previous-local-macro-and-let-oblivion switch; {{{\PopAll}}} should deal with all things not {{{\let}}} in a far more efficient way, so I suggest this command is used for tidying up. You may want to alias it as {{{\Tidy}}} or something, since people are more likely to remember this for this purpose. I didn't want to make the changes myself in the above, but I shall start writing a local macro user guide [[here|Local macro user guide]].

Thanks for this Gareth, you've done a sterling job of setting this all in place!
<<<

*待研究
*<<mif "概述" "http://thermomix.vorwerk.tw/tw/thermomix/overview/">>
*巧皇后希望這東西能改善全家人,尤其是在下的早餐 <<大眼>>
記於 2012/3/9 巴薩 7:1 痛宰拜仁勒沃庫森之後。
tracker: UA-20407065-1
++++@[+][-]
<<top>>
<<toggleSideBarTB right show>><<renameButton '▸'>>
@@position:relative;+++^auto^*[s|本站全文搜尋]<<search>>===@@
<<jump j '跳到其他已開啟的記事' top>>
<<collapseAll>><<renameButton f>><<expandAll>><<renameButton e>>
<<pinAll>><<renameButton p>><<unpinAll>><<renameButton u>>
<<closeAll>><<renameButton ✕>>
<<saveChanges>><<renameButton ✔>>
<<newTiddler>><<renameButton n>>
@@position:relative;+++^5em^*[t|常用工具箱]{{center{
[[批次編輯|TiddlerTweaker]]
<<exportSpace>>
[[匯出記事|ExportTiddlers]]
[[匯入記事|ImportTiddlers]]
[[上傳檔案|UploadPanel]]
<<tiddler ThisSpaceHoverMenuToolbox>>}}}===@@
===

<<unsavedChanges command u 還有未上傳到伺服器的變更哦!>>
趕在 23:00 前讀完昨天和今天的讀經進度,並且可以按約定準時上床就寢!開心!<<:D>>
----
然而第二天卻睡到快八點才起來,這也睡太久了!<<XD>> -- 1/23 15:17
剛在 RGO Radio 上聽到「我的喜悅我的盼望」抒情版的旋律耶(但是是在手機上聽到的,無法錄下來……),不知道是我們的會員創作的,還是其他教會已有的版本。

很好聽耶,希望有機會在「天國聖靈運動」禱告會,或是其他的機會再聽到或學到這首旋律 <<:)>>
經過一個多月的受寒、咳嗽後,我很高興能夠重新擁有打噴嚏的能力 <<:D>>

之前完全受寒氣攻入時是打不出噴嚏的 <<:s>>
/***
|''Name''|TiddlyFileImporter|
|''Version''|0.3.8|
|''Author''|Ben Gillies|
|''Type''|plugin|
|''Description''|Upload a TiddlyWiki file to TiddlyWeb, and import the tiddlers.|
!Usage
Upload a TiddlyWiki file to TiddlyWeb, and import the tiddlers.
!Requires
tiddlyweb
tiddlywebplugins.reflector
!Code
***/
//{{{
(function($){
if(!version.extensions.TiddlyFileImporter)
{ //# ensure that the plugin is only installed once
	version.extensions.TiddlyFileImporter = { installed: true };
}

config.macros.fileImport = {
	reflectorURI: '/reflector?csrf_token=%0',
	incorrectTypeError: 'Incorrect File Type. You must upload a TiddlyWiki',
	uploadLabel: 'Upload',
	uploadLabelPrompt: 'Import tiddlers from this TiddlyWiki',
	step1FileText: 'File:',
	step1PostText: 'In the next screen you will select the tiddlers to import.',
	step1Title: 'Step 1: Pick a TiddlyWiki to import',
	step1TypeChooser: 'Import From:',
	step3Html: ['<input type="hidden" name="markList" />',
		'<input type="hidden" checked="true" name="chkSync" />',
		'<input type="hidden" name="chkSave" />',
		'<input type="hidden" name="txtSaveTiddler" />'].join(),

	handler: function(place, macroName, params, wikifier, paramString) {
		var wizard = new Wizard();
		wizard.createWizard(place, 'Import a TiddlyWiki');
		this.restart(wizard);
	},

	restart: function(wizard) {
		var me = config.macros.fileImport;
		wizard.addStep(me.step1Title, ['<input type="hidden" ',
			'name="markList" />'].join(""));
		var markList = wizard.getElement('markList');
		var uploadWrapper = document.createElement('div');
		markList.parentNode.insertBefore(uploadWrapper, markList);
		uploadWrapper.setAttribute('refresh', 'macro');
		uploadWrapper.getAttribute('macroName', 'fileImport');
		var iframeName = 'reflectorImporter' + Math.random().toString();
		me.createForm(uploadWrapper, wizard, iframeName);
		$(uploadWrapper).append('<p>' + me.step1PostText + '</p>');
		wizard.setValue('serverType', 'tiddlyweb');
		wizard.setValue('adaptor', new config.adaptors.file());
		wizard.setValue('host', config.defaultCustomFields['server.host']);
		wizard.setValue('context', {});
		var iframe = $(['<iframe name="' + iframeName + '" ',
			'style="display: none" />'].join("")).appendTo(uploadWrapper);
		var onSubmit = function(ev) {
			var uploadType = $('select[name=uploadtype]', wizard.formElem).val();
			if (uploadType == "file") {
				// set an onload ready to hijack the form
				me.setOnLoad(uploadWrapper, wizard, iframe[0]);
				wizard.importType = 'file';
				wizard.formElem.submit();
			} else {
				var csrf_token = config.extensions.tiddlyspace.getCSRFToken();
				$.ajax({
					url: "%0/reflector?csrf_token=%1".format(
						config.defaultCustomFields["server.host"], csrf_token),
					type: "POST",
					dataType: "text",
					data: {
						uri: $("input", ".importFrom", wizard.formElem).val()
					},
					success: function(data, txtStatus, xhr) {
						wizard.POSTResponse = data;
						me.importTiddlers(uploadWrapper, wizard);
					},
					error: function(xhr, txtStatus, error) {
						displayMessage(["There was an error fetching the ",
							'url: ', txtStatus].join(""));
						me.restart(wizard);
					}
				});
				return false;
			}
		};
		wizard.setButtons([{
			caption: me.uploadLabel,
			tooltip: me.uploadLabelPrompt,
			onClick: onSubmit
		}]);
		$(wizard.formElem).submit(function(ev) {
			onSubmit(ev);
			ev.preventDefault();
		});
	},

	createForm: function(place, wizard, iframeName) {
		var form = wizard.formElem;
		var me = config.macros.fileImport;
		form.action = me.reflectorURI.format(
			config.extensions.tiddlyspace.getCSRFToken());
		form.enctype = 'multipart/form-data';
		form.encoding = 'multipart/form-data';
		form.method = 'POST';
		form.target = iframeName;
		onSelectChange = function(e) {
			var changeTo = $(this).val();
			if (changeTo == "file") {
				$(".importFrom").html('%0 <input type="file" name="file" />'.
					format(me.step1FileText));
			} else {
				$(".importFrom").html('URL: <input type="text" name="uri" />'
					+ ' Do you want <a target="_blank" href="http://faq.tiddlyspace.com/How%20do%20I%20include%2Fexclude%20spaces%3F">inclusion</a> instead?');
			}
		};
		$(place).append('<span>%0</span>'.format(me.step1TypeChooser)).
			append($(['<select name="uploadtype"><option value="file" selected="selected">file',
				'<option value="uri">url</select>'].join("")).change(onSelectChange)).
			append('<div class="importFrom">%0<input type="file" name="file" /></div>'.
					format(me.step1FileText));
	},

	setOnLoad: function(place, wizard, iframe) {
		var me = config.macros.fileImport;
		var loadHandler = function() {
			me.importTiddlers.apply(this, [place, wizard, iframe]);
		};
		iframe.onload = loadHandler;
		completeReadyStateChanges = 0;
		iframe.onreadystatechange = function() {
			if (++(completeReadyStateChanges) == 5) {
				loadHandler();
			}
		};
	},

	importTiddlers: function(place, wizard, iframe) {
		var tmpStore = new TiddlyWiki();
		var POSTedWiki = "";
		if (wizard.importType == "file") {
			try {
				POSTedWiki= iframe.contentWindow
					.document.documentElement.innerHTML;
			} catch(e) {
				displayMessage(config.macros.fileImport.incorrectTypeError);
				config.macros.fileImport.restart(wizard);
				return;
			}
			// now we are done, so remove the iframe
			$(iframe).remove();
		} else {
			POSTedWiki = wizard.POSTResponse;
		}

		tmpStore.importTiddlyWiki(POSTedWiki);
		var newTiddlers = tmpStore.getTiddlers();
		var workspace = config.defaultCustomFields['server.workspace'];
		var context = {
			status: true,
			statusText: 'OK',
			httpStatus: 200,
			adaptor: wizard.getValue('adaptor'),
			tiddlers: newTiddlers
		};
		context.adaptor.store = tmpStore;
		wizard.setValue('context', context);
		wizard.setValue('workspace', workspace);
		wizard.setValue('inFileImport', true);
		config.macros.importTiddlers.onGetTiddlerList(context, wizard);
	}
};

var _onGetTiddler = config.macros.importTiddlers.onGetTiddler;
config.macros.importTiddlers.onGetTiddler = function(context, wizard) {
	if (wizard.getValue('inFileImport')) {
		var me = config.macros.importTiddlers;
		if(!context.status)
			displayMessage("Error in importTiddlers.onGetTiddler: " + context.statusText);
		var tiddler = context.tiddler;
		var fields = tiddler.fields;
		merge(fields, config.defaultCustomFields);
		fields["server.workspace"] = wizard.getValue('workspace');
		delete fields['server.permissions'];
		delete fields['server.bag'];
		fields['server.page.revision'] = 'false';
		delete fields['server.recipe'];
		fields.changecount = 1;
		store.suspendNotifications();
		store.saveTiddler(tiddler.title, tiddler.title, tiddler.text,
			tiddler.modifier, tiddler.modified, tiddler.tags, tiddler.fields,
			false, tiddler.created);
		store.resumeNotifications();
		var remainingImports = wizard.getValue("remainingImports")-1;
		wizard.setValue("remainingImports",remainingImports);
		if(remainingImports === 0) {
			if(context.isSynchronous) {
				store.notifyAll();
				refreshDisplay();
			}
			wizard.setButtons([
					{caption: me.doneLabel, tooltip: me.donePrompt, onClick: me.onClose}
				],me.statusDoneImport);
			autoSaveChanges();
		}
	} else {
		_onGetTiddler.apply(this, arguments);
	}
};

var _onCancel = config.macros.importTiddlers.onCancel;
config.macros.importTiddlers.onCancel = function(e)
{
	var wizard = new Wizard(this);
	if (!wizard.getValue('inFileImport')) {
		return _onCancel.apply(this, arguments);
	}
	var place = wizard.clear();
	config.macros.fileImport.restart(wizard);
	return false;
};

var _step3Html = config.macros.importTiddlers.step3Html;
var _onGetTiddlerList = config.macros.importTiddlers.onGetTiddlerList;
config.macros.importTiddlers.onGetTiddlerList = function(context, wizard) {
	var fileImport = config.macros.fileImport;
	var importTiddlers = config.macros.importTiddlers;
	if (wizard.getValue('inFileImport')) {
		importTiddlers.step3Html = fileImport.step3Html;
	} else {
		importTiddlers.step3Html = _step3Html;
	}
	_onGetTiddlerList.apply(this, arguments);
};
})(jQuery);
//}}}
/*{{{*/
body {
	font-size: 1em;
	font-family: helvetica, arial, sans-serif;
	background-color: #fff;
	color: [[ColorPalette::Foreground]];
}

body ul { margin: 0; }

#popup {
	background-color: [[ColorPalette::TertiaryPale]];
}

#popup.confirmationPopup, .followList {
	font-size: 0.8em;
	padding: 1em;
	border: solid 1px [[ColorPalette::SecondaryMid]];
	background-color: [[ColorPalette::SecondaryPale]];
}

.followList .listTitle {
	text-decoration: underline;
}

#popup .followTiddlersList a {
	display: inline;
	padding: 0;
}

#popup li a {
	color: [[ColorPalette::PrimaryMid]];
	font-weight: bold;
}

#popup li a:hover {
	color: [[ColorPalette::PrimaryPale]];
	background: [[ColorPalette::PrimaryMid]];
}

#popup li.listTitle {
	border-bottom: 1px solid #000;
	font-weight: bold;
	margin-bottom: 10px;
}

#popup.followList {
	margin-left: 50px;
	margin-top: -30px;
}

.followTiddlersList .label {
	display: block;
	left: 10px;
	top: 0px;
	line-height: 16px;
	position: relative;
}

#popup .followTiddlersList .siteIcon{
	height: auto;
}

#popup .followTiddlersList li{
	clear: both;
	display: block;
	height: 48px;
	margin-bottom: 8px;
	position: relative;
}

#popup .followTiddlersList a{
	display: inline;
}

#displayArea {
	margin: 0;
	top: 0px;
	left: 0px;
	width: 100%;
	position: relative;
}

.revisionCloak {
	position: absolute;
	position: fixed !important;
	height: 100%;
	width: 100%;
	top: 0;
	left: 0;
	border: 0;
	margin: 0;
	padding: 0;
	opacity: 0.5;
	filter: alpha(opacity=50);
	background-color: #000;
}

/* *** Header *** */
.header {
	position: relative;
	background-color: [[ColorPalette::PrimaryMid]];
	_width: 100%; /* ie 6 demands */
}

.headerForeground {
	background-color: [[ColorPalette::PrimaryMid]];
	float: left;
	margin: 24px 16px 0px 72px;
	padding: 0;
	position: relative;
	top: 0;
	_width: 70%; /*ie6: needed for the background to actually be transparent*/
	_background-color: transparent; /*ie6: needed to show the search box*/
}

.clearFloat {
	clear: both;
}

#contentWrapper {
	position: relative;
	padding-top: 1px;
	top: -1px;
}

#tiddlerDisplay {
	_position: relative; /* ie 6*/
}

.siteTitle {
	clear: both;
	display: block;
	font-size: 32px;
	font-weight: bold;
	line-height: 32px;
}

.siteSubtitle {
	display: block;
	font-size: 14px;
	height: 16px;
	margin-bottom: 8px;
}

#sidebarSearch {
	padding: 0;
	position: absolute;
	right: 80px;
	top: 8px;
	width: 176px;
}

#sidebarSearch .txtOptionInput {
	width: 100%;
	margin-top: 5px;
	_color: #bbb; /* ie6 danger */
}

#sidebarSearch .txtOptionInput:focus {
	color: #000;
}

#sidebarSearch .searchButton {
	display: none;
}

/* *** Menu Bar *** */

#mainMenu {
	position: static;
	text-align: left;
	margin-left: 72px;
	float: left;
	width: auto;
	padding: 0;
	font-size: 1em;
	line-height: normal;
}

#mainMenu a {
	color: #fff;
	padding: 8px;
	font-size: 0.9em;
	margin-right: 16px;
}

#mainMenu a:hover {
	background-color: [[ColorPalette::PrimaryMid]];
	color: [[ColorPalette::Background]]
}

#sidebarOptions {
	margin-right: 72px;
	float: right;
	font-size: 1.1em;
	line-height: 1.6em;
	min-height: 1em;
	padding-top: 0;
}

#sidebarOptions a {
	margin-right: 8px;
}

.confirmationPopup .button,
#sidebarOptions .button {
	cursor: pointer;
	line-height: 1.4em;
	text-align: center;
	margin-right: 8px;
	margin-left:-2px;
}

.confirmationPopup .button {
	font-size: 0.9em;
	padding: 2px;
}

#sidebarOptions .button {
	font-size: 0.7em;
	float: left;
	width: 80px;
	padding: 0px;
        color: #fff;
}

.confirmationPopup a.button,
#sidebarOptions a {
	border: none;
	margin: 0 0.2em;
	padding: 0.6em 0.25em;
	display: inline;
	color: #666;
}

.confirmationPopup a.button:hover,
#sidebarOptions a:hover {
	color: #000;
}

.confirmationPopup a.button:active,
#sidebarOptions a:active {
	border: solid 1px [[ColorPalette::PrimaryMid]];
	background-color: #fff;
	background: -webkit-gradient( linear, left bottom, left top, color-stop(0.1,rgb(200,200,200)), color-stop(1, rgb(100,100,100)));
	background: -moz-linear-gradient(center bottom , rgb(200,200,200) 10%,rgb(100,100,100) 100%) repeat scroll 0 0 transparent;
}
/* *** Sidebar *** */

#sidebar .wizard table {
	margin: 0px;
}

.tabContents .listTitle:first-child {
	margin-top: 0px;
}

#menuBar {
	background: [[ColorPalette::PrimaryLight]];
	left: 0;
	right: 0;
	position: relative;
	margin: 0;
	padding: 0.5em 0 0.5em 0;
	min-height: 1em;
	overflow: hidden;
	_width: 100%; /* for ie 6 */
}

#sidebarOptions a.button:hover {
	color: [[ColorPalette::PrimaryPale]];
    background: [[ColorPalette::PrimaryMid]];
}

#tiddlerDisplay, #searchResults {
	margin: 16px 448px 0 72px;
}

#sidebarTabs {
	position: absolute;
	right: 72px;
	width: 352px;
	top: 0;
}

#sidebarTabs .tabsetWrapper .tabset {
	width: 87px;
	border-top: 1px solid [[ColorPalette::PrimaryPale]];
	border-left: 1px solid [[ColorPalette::PrimaryPale]];
	border-bottom: 1px solid [[ColorPalette::PrimaryPale]];
	height: auto;
	float: left;
	word-wrap: break-word;
	top: 0;
	padding: 0;
}

#sidebarTabs .tabsetWrapper .tabContents {
	background-color: [[ColorPalette::PrimaryPale]];
	border: 3px solid [[ColorPalette::PrimaryMid]];
	width: 242px;
	_width: 238px;
	left: -3px;
	_left: -5px;
	position: relative;
	min-height: 34em;
	padding: 8px;
	font-size: 0.8em;
}

/* ---- Side style --- */

#sidebarTabs .tabsetWrapper .tabset .tab {
	font-size: 0.9em;
	padding: 0.7em 8px 0.5em;
	color: #fff;
	background: [[ColorPalette::PrimaryLight]];
	border: none;
	line-height: 16px;
	position: relative;
	display: block;
	margin: 0;
}

#sidebarTabs .tabsetWrapper .tabset .tabSelected {
	color: [[ColorPalette::PrimaryMid]];
	background: [[ColorPalette::PrimaryPale]];
	border-top: 3px solid [[ColorPalette::PrimaryMid]];
	border-bottom: 3px solid [[ColorPalette::PrimaryMid]];
	border-left: 3px solid [[ColorPalette::PrimaryMid]];
	z-index: 10;
	margin-top: -1px;
	font-weight: bold;
}

#sidebarTabs .tabContents li {
	border: none;
	margin-left: 0;
	word-wrap: break-word;
}

.tabContents .timeline {
	background: [[ColorPalette::PrimaryPale]];
	margin-bottom: 8px;
}

#sidebarTabs .timeline li.listTitle {
	color: #132E43;
	margin-left: 8px 0;
	padding: 0.3em 0.11em;
	font-size: 1em;
	border-bottom: none;
}

#sidebarTabs .tabContents li a {
	display: block;
	text-align: left;
	margin: 0 0 1px 0;
	padding: 0.3em 1em;
	background: [[ColorPalette::PrimaryPale]];
}

#sidebarTabs .tabsetWrapper .tabset a:hover,
#sidebarTabs .tabContents li a:hover {
	color: [[ColorPalette::PrimaryPale]];
	background: [[ColorPalette::PrimaryMid]];
}

/* Activity Stream */
#sidebarTabs .tabContents .activityStream .feedItem a {
	display: inline-block;
	padding: 0;
	background: none;
}

/* ---- Tagging box --- */
.tagInfo {
	border: 1px solid #cccccc;
	padding: 10px 15px;
	-moz-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);
	box-shadow: 0 2px 2px rgba(0,0,0,0.2);
	color: [[ColorPalette::TertiaryMid]];
	background: -moz-linear-gradient(100% 100% 90deg, #f4f4f4, #e5e5e5);
	background: -webkit-gradient(linear, left top, right top, from(#e5e5e5), to(#f4f4f4));
	margin-top: 1em;
	font-size: 13px;
	margin: 0 0 0 56px;
}

.tagInfo ul {
	list-style: none;
	padding-left: 2.2em;
}

.tagInfo ul li {
	display: inline;
}

.tagInfo ul li.listTitle,
.tagInfo .tagging ul li.listTitle {
	color: [[ColorPalette::PrimaryMid]];
	font-size: 13px;
}

.tagInfo ul li a {
	border: none;
}

.tagInfo .tagging ul li {
	float: none;
	display: inline-block;
}

.tagInfo .tagging {
	padding: 0;
}

.viewRevision .toolbar {
	right: 48px;
	top: 8px;
}

.viewRevision .modifierIcon img,
.viewRevision .modifierIcon svg {
	margin-right: 8px;
}

.viewRevision .toolbar svg {
	width: 32px;
	height: 32px;
}

/* --- IE hacks from lattice --- */

/* ie hacks */
* html #menuBar {
	margin-bottom: 8px;
}
.toolbar .svgIconText {
	*display: inline;
}

div.tiddler .toolbar a {
	cursor: pointer;
	float: left\9;
	display: inline\9;
}

* html .toolbar {
	right: 8px;
}
* html .followButton a {
	margin-top: 0px;
	margin-right: 8px;
}
* html #tiddlerDisplay {
	margin-top: 0px;
}

/* for printing purposes */
@media print {
	#mainMenu,
	#sidebar,
	#messageArea,
	.toolbar,
	.followPlaceHolder,
	#backstageButton,
	#backstageArea,
	#sidebarTabs,
	#sidebarSearch .txtOptionInput,
	#sidebarOptions {
		display: none !important;
	}
	#displayArea {
		margin: 1em 1em 0em;
	}
	noscript {
		display:none; /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
	}
	#tiddlerDisplay {
		margin: 16px 16px;
	}
}

@media all and (max-width: 960px){
	#tiddlerDisplay,
	#searchResults {
		margin: 16px 366px 0 16px;
	}

	#mainMenu {
		margin-left: 16px;
	}

	.headerForeground {
		margin-left: 16px;
	}

	#sidebarSearch {
		right: 16px;
	}

	#sidebarOptions {
		margin-right: 16px;
	}

	#sidebarTabs {
		right: 16px;
		width: 326px;
	}

	#sidebarTabs .tabsetWrapper .tabset {
		font-size: 0.9em;
		width: 77px;
	}

	#sidebarTabs .tabsetWrapper .tabContents {
		width: 226px;
		_width: 222px;
	}

	#sidebarTabs .tabContents li a {
		font-size: 0.9em;
	}
}
/*}}}*/
[[StyleSheetTiddler]]
/%
|Name|QuickEdit_custom|
|Source|http://www.TiddlyTools.com/#QuickEdit_custom|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - custom defined formats|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

!help
Reminders:

Custom formats are stored as an "HR-separated list" in [[QuickEdit_customList]], where the first line of each list item is the text 'label' to show in the droplist, followed by one or more lines of wiki content to be inserted into the tiddler source.

Substitution markers can be used to dynamically insert values into the formatted output: $1 inserts the tiddler editor's current selected text. $[[message|default value]] interactively prompts for a value to be inserted. $[[message|$1]] uses the selected text as the default value. $[[message|{{javascript}}]] calculates the default value using javascript code.
!end help

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="custom defined formats"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a custom format...','');
	var items=store.getTiddlerText('QuickEdit_customList','').split('\n----\n');
	for (var i=0; i<items.length; i++) {
		if (!items[i].length) continue; var lines=items[i].split('\n');
		var label=lines.shift(); var val=lines.join('\n');
		s.options[s.length]=new Option(label,val); s.options[s.length-1].title=val;
	}
	s.options[s.length]=new Option('[Edit custom formats...]','_edit');
	s.options[s.length-1].title='add/change custom format definitions...';
	s.size=Math.min(s.length,15);
	s.onclick=function(){ if (!this.value.length) return;
		if (this.value=='_edit') {
			alert(store.getTiddlerText('QuickEdit_custom##help'));
			story.displayTiddler(story.findContainingTiddler(this.button),
				'QuickEdit_customList',DEFAULT_EDIT_TEMPLATE);
		} else {
		        var e=config.quickEdit.getField(this.button); if (!e) return false;
			e.focus(); var txt=config.quickEdit.getSelection(e);
			replaceSelection(e, this.value.replace(/\$\x31/g,txt)
				.replace(/\$\[\[[^\]]+\]\]/g, function(t){
					x=t.substr(3,t.length-5).split('|');
					var msg=x[0]; var def=x[1]||'';
					if (def.startsWith('{{')) {
						try{def=eval(def.substr(2,def.length-4))} catch(ex){showException(ex)}
					}
					return prompt(msg,def)||'';
				})
			);
		}
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>custom</a></html>
之前洗了幾個月的冷水澡當作一種精神力的鍛鍊,而且冬天洗冷水澡感覺比較不怕冷。

上週去翠峰湖發現自己血液循環似乎變很差,昨天決定改回熱水澡。然而,不到兩天,就開始出現鼻水、喉嚨發炎症狀,甚至還有輕微下痢。

這些是屬於排除之前累積寒氣的好現象嗎?還是我應該再洗冷水澡呢?
body {
	font-family: "helvetica neue";
	font-size: 16px;
}

#TSbar {
	background: #000;
	background: -moz-linear-gradient(center bottom,#222 0%, #333 50%, #555 100%);
	background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #222),color-stop(0.5, #333),color-stop(1, #555));
	border-bottom: 1px solid black;
	height: 24px;
}

#main-content {
	margin: 0 auto;
	padding-top: 2em;
	width: 960px;
}

#space-details {
	height: 100px;
	margin: 0 0 5em;
}

#space-details img {
	border-radius: 2px;
	float: left;
	margin-right: 2em;
}

#title-subtitle {
	color: #79757A;
}

.spaceaddress {
	height: 62px;
	line-height: 62px;
}

#title-subtitle p {
	font-size: 1.3em;
	line-height: 38px;
}

.managespaces {
	background: #D0D5D6;
	color: #F0F4F8;
	border-radius: 4px;
	float: right;
	padding: 0 0.7em;
	text-decoration: none;
	-webkit-transition: all 0.4s ease-in-out;
	-moz-transition: all 0.4s ease-in-out;
	-o-transition: all 0.4s ease-in-out;
	-ms-transition: all 0.4s ease-in-out;
	transition: all 0.4s ease-in-out;
}

#space-details:hover .managespaces {
	background: #ADD1DD;
}

#space-details .managespaces:hover {
	background: #0082AF;
}

h1 {
	color: #B8B6BD;
	font-size: 2em;
}

h1 span {
	color: #0059AF;
	color: #0082AF;
	font-size: 1.5em;
}

#holder {
	background: #DCE7F1;
	border-radius: 2px;
	border: 1px solid #ADD1DD;
	box-shadow: 1px 2px 3px 0px rgba(0,0,0,0.25);
}

#appswitcher {
	background: #F0F4F8;
	border-radius: 2px;
	box-shadow: 1px 2px 3px 0px rgba(0,0,0,0.25), -1px 0px 3px 0px rgba(0,0,0,0.25);
	margin-top: -40px;
	margin-right: 10px;
	margin-bottom: -10px;
	float: right;
	width: 60%;
}

#appswitcher h2 {
	color: #4C4A54;
	color: #8C9DA7;
	font-size: 2em;
	font-weight: 500;
	line-height: 1.8em;
	text-shadow: 0 1px 0 #fff;
	margin-left: 1em;
}

#app-list {
	background: #F0F4F8;
}

#app-list li {
	background: url('http://colmjude.tiddlyspace.com/double_angle_lightblue_42x42.png') no-repeat 88% #F0F4F8;
	border-top: 1px solid #fff;
	border-bottom: 1px solid #C3D3DD;
	height: 4.25em;
	line-height: 3.125em;
	-webkit-transition: background 0.4s linear;
	-moz-transition: background 0.4s linear;
	-o-transition: background 0.4s linear;
	-ms-transition: background 0.4s linear;
	transition: background 0.4s linear;
}

#app-list li:hover {
	background: url('http://colmjude.tiddlyspace.com/double_angle_darkpink_bevel_42x42.png') no-repeat 90% #F3F9FF;
	border-top: 1px solid #F0F4F8;
	cursor: pointer;
	line-height: 3.25em;
}

#app-list li:hover:last-child {
	line-height: 3.125em;
}

#app-list li a {
	display: block;
	color: #BC4378;
	font-size: 2.5em;
	text-decoration: none;
	height: 100%;
	width: 100%;
	-webkit-transition: color 0.4s linear;
	-moz-transition: color 0.4s linear;
	-o-transition: color 0.4s linear;
	-ms-transition: color 0.4s linear;
	transition: color 0.4s linear;
}

#app-list li:hover a {
	color: #E56AA0;
}

#app-list li a img {
	position: relative;
	top: 0.2125em;
	margin: 0 1em;
	height: 1.25em;
	width: 1.25em;
}

#app-list li a span.comingsoon {
	color: #B8B6BD;
	font-size: 0.5em;
}

#app-list li a span.comingsoon.highlight {
	color: #BC4378;
}

#app-desc {
	float: left;
	width: 35%;
}

#app-desc ul {
	/* use as faded color ? */
	color: #C3D3DD;
	color: #8C9DA7;
	font-size: 0.9em;
	font-style: italic;
	margin-top: 18px;
	margin-right: -1em;
	text-align: right;
}

#app-desc ul li {
	display: table;
	border-bottom: 1px dashed #F0F4F8;
	height: 70px;
	padding-left: 1em;
	-webkit-transition: color 0.4s linear;
	-moz-transition: color 0.4s linear;
	-o-transition: color 0.4s linear;
	-ms-transition: color 0.4s linear;
	transition: color 0.4s linear;
}

#app-desc ul li.highlightdesc {
	color: #D65C8C;
}

#app-desc ul li:first-of-type {
	border-top: 1px dashed #F0F4F8;
}

#app-desc ul li p {
	display: table-cell;
	vertical-align: middle;
}

#addapp {
	margin: 1.5em 0 1em;
	padding: 10px;
	text-align: center;
}

#addapp button {
	background: #E7DFE3;
	background: rgba(206,199,203, 0.8);
	color: #F0F4F8;
	border: none;
	border-radius: 4px;
	font-size: 2em;
	padding: 16px 24px 12px;
	-webkit-transition: all 0.4s ease-in-out;
	-moz-transition: all 0.4s ease-in-out;
	-o-transition: all 0.4s ease-in-out;
	-ms-transition: all 0.4s ease-in-out;
	transition: all 0.4s ease-in-out;
}

#addapp:hover button {
	background: #BC4378;
}

#addapp button:hover {
	cursor: pointer;
}

#footer {
	background: #1A1F1E;
	margin-top: 3em;
	padding: 0.3em 0;
	clear: both;
}

#footer-content {
	color: #B2AAA4;
	font-size: 0.8em;
	line-height: 1.3em;
	margin: 0 auto;
	width: 960px;
}

#footer .links {
	float: right;
}

#footer .links a {
	margin-left: 10px;
}

#footer-content a {
	color: #B2AAA4;
	text-decoration: none;
}

#footer-content a:hover {
	color: #80a7c1;
	text-decoration: underline;
}
<<binaryUploadPublic title:favicon.ico>>

R0lGODlhEwATAPf/AAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDcwKbK8Co/qio//ypfACpfVSpfqipf/yp/ACp/VSp/qip//yqfACqfVSqfqiqf/yq/ACq/VSq/qiq//yrfACrfVSrfqirf/yr/ACr/VSr/qir//1UAAFUAVVUAqlUA/1UfAFUfVVUfqlUf/1U/AFU/VVU/qlU//1VfAFVfVVVfqlVf/1V/AFV/VVV/qlV//1WfAFWfVVWfqlWf/1W/AFW/VVW/qlW//1XfAFXfVVXfqlXf/1X/AFX/VVX/qlX//38AAH8AVX8Aqn8A/38fAH8fVX8fqn8f/38/AH8/VX8/qn8//39fAH9fVX9fqn9f/39/AH9/VX9/qn9//3+fAH+fVX+fqn+f/3+/AH+/VX+/qn+//3/fAH/fVX/fqn/f/3//AH//VX//qn///6oAAKoAVaoAqqoA/6ofAKofVaofqqof/6o/AKo/Vao/qqo//6pfAKpfVapfqqpf/6p/AKp/Vap/qqp//6qfAKqfVaqfqqqf/6q/AKq/Vaq/qqq//6rfAKrfVarfqqrf/6r/AKr/Var/qqr//9QAANQAVdQAqtQA/9QfANQfVdQfqtQf/9Q/ANQ/VdQ/qtQ//9RfANRfVdRfqtRf/9R/ANR/VdR/qtR//9SfANSfVdSfqtSf/9S/ANS/VdS/qtS//9TfANTfVdTfqtTf/9T/ANT/VdT/qtT///8AVf8Aqv8fAP8fVf8fqv8f//8/AP8/Vf8/qv8///9fAP9fVf9fqv9f//9/AP9/Vf9/qv9///+fAP+fVf+fqv+f//+/AP+/Vf+/qv+////fAP/fVf/fqv/f////Vf//qszM///M/zP//2b//5n//8z//wB/AAB/VQB/qgB//wCfAACfVQCfqgCf/wC/AAC/VQC/qgC//wDfAADfVQDfqgDf/wD/VQD/qioAACoAVSoAqioA/yofACofVSofqiof/yo/ACo/Vf/78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH+HUJ1aWx0IHdpdGggR0lGIE1vdmllIEdlYXIgMy4wACH5BAEKAP8ALAAAAAATABMAAAjcAP8JHChwWaplBBMSfLbsmTRpzximUjgwlcOHDjOmcqXwYsaHECNOXCjtX59A/yBKUxUoUERSAyM+Q2kSI80+Egs+7CMIhcudTAS5fFZKYMZAgpj0sYniHs5lqFRF3ClwqLQ+VZ0tUxbIokNXJ1NhBNuV4bJSU9NilBlR2VaUMlXGbctQWSlV/xpCpCMzFZ46eEptTUWKo9dneUhJK0UHLSg8g2n+QyWyDp08gt3WcRuKo0BmlJW13Vp3GSC8BF2VcutWKyqDfFArTFXqdSq7pAJ5piiQZUtVCBQGBAA7
@@position:relative;+++^15em^*@[$1]$2===@@
@@Please do not modify this tiddler; it was created automatically upon space creation.@@
/***
|Name|PinTiddlersPlugin|
|Source|http://gjrobert.tiddlyspace.com/#PinTiddlersPlugin|
|Version|1.0.0|
|Author|G.J.Robert Ciang|
|License|CC 3.0 Share-Alike|
|~CoreVersion|?|
|Type|plugin|
|Description|Pin tiddlers from being closed by "close all"/"close others" commands. Also with command to unpin tiddler and macros to pin/unpin all open tiddlers.|
!!!Courtesy
*Thanks to [[Eric Shulman|http://www.tiddlytools.com/]] for:
**Hacked "closeAllTiddlers" function which makes the differentiated closing of tiddlers possible.
**All snippets of macros/commands via CollapseTiddlersPlugin

!!!Notice
  This is like a kindergarten cut/paste homework so feel free to take and improve it to what you want.

!!!Usage
*Put @@{{{pinTiddler}}}@@/@@{{{unpinTiddler}}}@@ commands in ToolbarCommands. Should work on View-/Edit- or even Collapsed- toolbars since this affects just an attribute of tiddlers.
*@@{{{<<pinAll>>}}}@@ and @@{{{<<unpinAll>>}}}@@ macros can be used anywhere in the TiddlyWiki to render buttons.

!!!History
;Alpha (2013/05/31)
:Proposed by G.J.Robert Ciang, based on hacked "closeAllTiddlers" function provided by Eric (https://groups.google.com/d/msg/tiddlywiki/MZU2lGF_iv8/QEUiqhGHO9wJ)
**(pin|unpin)(tiddler|all tiddlers) toolbar commands/macros adapted from CollapseTiddlersPlugin (also by Eric), enabled by adding them in [[ToolbarCommands::ViewToolbar|ToolbarCommands]]
**--function to enable/disable toolbar buttons adapted from TiddlySpaceCloneCommand-- ^^@@ABANDONED 06/01@@^^
;1.0.0 (2013/06/01)
:Show/hide pin/unpin toolbar buttons according to tiddler "pinned" status, and give pinned tiddlers a different background color so to easily be recognized. (using CSS selectors "[attribute=value]") Feel free to tweak the styles.

!!!To-do
#[X] Show "pin/unpin" toolbar commands based on the current status of the tiddler
**In the draft of 5/31, "unpin" command is initially disabled (hidden), but the action of "pinning" does not refresh the toolbar to hide the "pin" button and show "unpin" instead. @@Help needed@@.
**''Achieved'' with CSS attribute selector as mentioned above, and this brings this little poor plugin out of alpha. ^^@@06/01@@^^
#[ ] Ability to write titles of pinned tiddlers to a list to save them across sessions, perhaps "PinnedTiddlers", and let the functions read from it.
**[ ] Can this tiddler be remotely saved automatically even on TiddlySpace?
!!!Code
***/
//{{{
config.commands.pinTiddler = {
	text: "pin",
	tooltip: "Pin this tiddler from getting closed",
//	isEnabled: function(tiddler) {
//		return !tiddler.pinned;
//	},
	handler: function(event,src,title) {
		var e = story.findContainingTiddler(src); if (!e) return false;
		e.setAttribute("pinned","true");
		return false;
	},
}

config.commands.unpinTiddler = {
	text: "unpin",
	tooltip: "Unpin this tiddler so that it can be closed",
//	isEnabled: function(tiddler) {
//		return tiddler.pinned;
//	},
	handler: function(event,src,title) {
		var e = story.findContainingTiddler(src); if (!e) return false;
		e.setAttribute("pinned","false");
		return false;
	}
}

config.macros.pinAll = {
	text: "pin all",
	tooltip: "Pin all currently open tiddlers",
	handler: function(place,macroName,params,wikifier,paramString,tiddler){
		createTiddlyButton(place,this.text,this.tooltip,function(){
			story.forEachTiddler(function(title,tiddler){
//				tiddler.pinned=true; //This does not seem to work
				tiddler.setAttribute("pinned","true");
			});
			return false;
		})
	}
}

config.macros.unpinAll = {
	text: "unpin all",
	tooltip: "Unpin all currently open tiddlers",
	handler: function(place,macroName,params,wikifier,paramString,tiddler){
		createTiddlyButton(place,this.text,this.tooltip,function(){
			story.forEachTiddler(function(title,tiddler){
//				tiddler.pinned=false; //This does not seem to work
				tiddler.setAttribute("pinned","false");
			});
			return false;
		})
	}
}

Story.prototype.closeAllTiddlers = function(exclude) {
        clearMessage();
        this.forEachTiddler(function(title,element) {
                var t=store.getTiddler(title);
                var excluded = title == exclude;
                var dirty    = element.getAttribute("dirty") == "true"
                var pinned   = element.getAttribute("pinned") == "true"
                if(!excluded && !dirty && !pinned)
                        this.closeTiddler(title);
        });
        window.scrollTo(0,ensureVisible(this.container));
};
//}}}
//{{{
setStylesheet (
".tiddler[pinned=true] {background: lightgoldenrodyellow !important;}\n"+
".tiddler[pinned=true] .command_pinTiddler {display: none !important;}\n"+
".tiddler[pinned=false] .command_unpinTiddler {display: none !important;}\n"+
"\n","pinnedTiddlerStyles");
//}}}
/***
|''Name''|TiddlySpaceConfig|
|''Version''|0.7.7|
|''Description''|TiddlySpace configuration|
|''Status''|stable|
|''Source''|http://github.com/TiddlySpace/tiddlyspace/raw/master/src/plugins/TiddlySpaceConfig.js|
|''CoreVersion''|2.6.1|
|''Requires''|TiddlyWebConfig ServerSideSavingPlugin TiddlyFileImporter|
!Code
***/
//{{{
(function($) {

var tweb = config.extensions.tiddlyweb;

var recipe = config.defaultCustomFields["server.workspace"].split("recipes/")[1];
var currentSpace; // assigned later

var disabledTabs = [];

var coreBags = ["system", "tiddlyspace"];
var systemSpaces = ["plugins", "info", "images", "theme"];
systemSpaces = $.map(systemSpaces, function(item, i) {
	return "system-%0_public".format(item);
});

// hijack search macro to add custom attributes for mobile devices
var _search = config.macros.search.handler;
config.macros.search.handler = function(place, macroName, params) {
	_search.apply(this, arguments);
	$(".searchField:input", place).
		attr({ autocapitalize: "off", autocorrect: "off" });
};

// arg is either a container name or a tiddler object
// if fuzzy is truthy, space may be inferred from workspace (for new tiddlers)
// returns space object or false
var determineSpace = function(arg, fuzzy) {
	if(typeof arg == "string") { // container name
		var space = split(arg, "_", "r");
		return ["public", "private"].contains(space.type) ? space : false;
	} else if(arg) { // tiddler
		var container = determineContainer(arg, fuzzy);
		return container ? determineSpace(container.name, fuzzy) : false;
	} else {
		return false;
	}
};

// if fuzzy is truthy, container may be inferred from workspace for new tiddlers
// returns container object or false
var determineContainer = function(tiddler, fuzzy) { // TODO: expose?
	var bag = tiddler.fields["server.bag"];
	var recipe = tiddler.fields["server.recipe"]; // XXX: unused/irrelevant/redundant!?
	if(bag) {
		return { type: "bag", name: bag };
	} else if(recipe) {
		return { type: "recipe", name: recipe };
	} else if(fuzzy) { // new tiddler
		var workspace = tiddler.fields["server.workspace"];
		if(workspace) {
			var container = split(workspace, "/", "l");
			return ["bags", "recipes"].contains(container.type) ? container : false;
		} else {
			return false;
		}
	} else {
		return false;
	}
};

// hijack removeTiddlerCallback to restore tiddler from recipe cascade -- TODO: move into TiddlyWebWiki?
var sssp = config.extensions.ServerSideSavingPlugin;
var _removeTiddlerCallback = sssp.removeTiddlerCallback;
sssp.removeTiddlerCallback = function(context, userParams) {
	var title = context.tiddler.title;
	var recipe = context.tiddler.fields["server.recipe"];
	_removeTiddlerCallback.apply(this, arguments);
	if(recipe) {
		context.workspace = "recipes/" + recipe;
		var callback = function(context, userParams) {
			if(context.status) {
				var dirty = store.isDirty();
				store.saveTiddler(context.tiddler).clearChangeCount();
				store.setDirty(dirty);
			} else {
				store.notify(title, true);
			}
		};
		context.adaptor.getTiddler(title, context, null, callback);
	}
};

// splits a string once using delimiter
// mode "l" splits at the first, "r" at the last occurrence
// returns an object with members type and name
var split = function(str, sep, mode) {
	mode = mode == "r" ? "pop" : "shift"; // TODO: use +/-1 instead of "l"/"r"?
	var arr = str.split(sep);
	var type = arr.length > 1 ? arr[mode]() : null;
	return { type: type, name: arr.join(sep) };
};

var plugin = config.extensions.tiddlyspace = {
	currentSpace: determineSpace(recipe),
	coreBags: coreBags.concat(systemSpaces),

	determineSpace: determineSpace,
	isValidSpaceName: function(name) {
		return name.match(/^[a-z][0-9a-z\-]*[0-9a-z]$/) ? true : false;
	},
	getCurrentBag: function(type) {
		return "%0_%1".format(currentSpace, type);
	},
	getCurrentWorkspace: function(type) {
		return "bags/" + this.getCurrentBag(type);
	},
	// returns the URL for a space's avatar (SiteIcon) based on a server_host
	// object and an optional space name
	// optional nocors argument prevents cross-domain URLs from being generated
	getAvatar: function(host, space, nocors) {
		if(space && typeof space != "string") { // backwards compatibility -- XXX: deprecated
			space = space.name;
		}
		var subdomain = nocors ? currentSpace : space;
		host = host ? this.getHost(host, subdomain) : "";
		var bag = space ? "%0_public".format(space) : "tiddlyspace";
		return "%0/bags/%1/tiddlers/SiteIcon".format(host, bag);
	},
	// returns the URL based on a server_host object (scheme, host, port) and an
	// optional subdomain
	getHost: function(host, subdomain) {
		if(host === undefined) { // offline
			tweb.status.server_host = {}; // prevents exceptions further down the stack -- XXX: hacky workaround, breaks encapsulation
			return null;
		}
		subdomain = subdomain ? subdomain + "." : "";
		var url = "%0://%1%2".format(host.scheme, subdomain, host.host);
		var port = host.port;
		if(port && !["80", "443"].contains(port)) {
			url += ":" + port;
		}
		return url;
	},
	disableTab: function(tabTiddler) {
		if(typeof(tabTiddler) == "string") {
			disabledTabs.push(tabTiddler);
		} else {
			for(var i = 0; i < tabTiddler.length; i++) {
				plugin.disableTab(tabTiddler[i]);
			}
		}
	},
    checkSyncStatus: function(tiddler) {
		if(tiddler) {
			var title = typeof(tiddler) === "string" ? tiddler : tiddler.title;
			var el = story.getTiddler(title) || false;
			if(el) {
				refreshElements(el);
			}
		}
	},
	isDisabledTab: function(tabTitle) {
		var match = new RegExp("(?:\\[\\[([^\\]]+)\\]\\])", "mg").exec(tabTitle);
		var tabIdentifier = match ? match[1] : tabTitle;
		return disabledTabs.contains(tabIdentifier);
	},
	getCSRFToken: window.getCSRFToken || null // this may not have been processed yet
};

currentSpace = plugin.currentSpace.name;

tweb.serverPrefix = tweb.host.split("/")[3] || ""; // XXX: assumes root handler
tweb.getStatus(function(status) {
	var url = plugin.getHost(status.server_host);
	tweb.status.server_host.url = url;
	config.messages.tsVersion = status.version;
});

if(window.location.protocol == "file:") {
	// enable AutoSave by default
	config.options.chkAutoSave = config.options.chkAutoSave === undefined ?
		true : config.options.chkAutoSave;
} else {
	// set global read-only mode based on membership heuristics
	var indicator = store.getTiddler("SiteTitle") || tiddler;
	readOnly = !(recipe.split("_").pop() == "private" ||
		tweb.hasPermission("write", indicator));
	// replace TiddlyWiki's ImportTiddlers due to cross-domain restrictions
	if(config.macros.fileImport) {
		$.extend(config.macros.importTiddlers, config.macros.fileImport);
	}
}

// hijack saveChanges to ensure SystemSettings is private by default
var _saveChanges = saveChanges;
saveChanges = function(onlyIfDirty, tiddlers) {
	if(tiddlers && tiddlers.length == 1 &&
			tiddlers[0] && tiddlers[0].title == "SystemSettings") {
		var fields = tiddlers[0].fields;
		delete fields["server.recipe"];
		fields["server.bag"] = plugin.getCurrentBag("private");
		fields["server.workspace"] = plugin.getCurrentWorkspace("private");
	}
	return _saveChanges.apply(this, arguments);
};

// ensure backstage is always initialized
// required to circumvent TiddlyWiki's read-only based handling
config.macros.backstageInit = {
	init: function() {
		showBackstage = true;
	}
};

// disable evaluated macro parameters for security reasons
config.evaluateMacroParameters = "none";
var _parseParams = String.prototype.parseParams;
String.prototype.parseParams = function(defaultName, defaultValue, allowEval,
		noNames, cascadeDefaults) {
	if(config.evaluateMacroParameters == "none") {
		arguments[2] = false;
	}
	return _parseParams.apply(this, arguments);
};

var _tabsMacro = config.macros.tabs.handler;
config.macros.tabs.handler = function(place, macroName, params) {
	var newParams = [params[0]]; // keep cookie name
	for(var i = 1; i < params.length; i += 3) {
		var tabTitle = params[i + 2];
		if(!plugin.isDisabledTab(tabTitle)){
			newParams = newParams.concat(params[i], params[i + 1], tabTitle);
		}
	}
	_tabsMacro.apply(this, [place, macroName, newParams]);
};

// disable ControlView for XHRs by default
$.ajaxSetup({
	beforeSend: function(xhr) {
		xhr.setRequestHeader("X-ControlView", "false");
	}
});
// TiddlyWeb adaptor currently still uses httpReq, which needs extra magic -- XXX: obsolete this!
var _httpReq = httpReq;
httpReq = function(type, url, callback, params, headers, data, contentType,
		username, password, allowCache) {
	headers = headers || {};
	headers["X-ControlView"] = "false";
	_httpReq.apply(this, arguments);
};

// register style sheet for backstage separately (important)
store.addNotification("StyleSheetBackstage", refreshStyles);

// option for default privacy setting
config.optionsDesc.chkPrivateMode = "Set your default privacy mode to private";
config.optionsSource.chkPrivateMode = "setting";
config.options.chkPrivateMode = config.options.chkPrivateMode || false;
saveSystemSetting("chkPrivateMode", true);
config.defaultCustomFields["server.workspace"] = plugin.
	getCurrentWorkspace(config.options.chkPrivateMode ? "private" : "public");

config.paramifiers.follow = {
	onstart: function(v) {
		if(!readOnly) {
			var bag = "%0_public".format(currentSpace);
			story.displayTiddler(null, v, DEFAULT_EDIT_TEMPLATE, null, null,
				"server.bag:%0 server.workspace:bags/%0".format(bag));
			story.setTiddlerTag(v, "follow", 1);
			story.focusTiddler(v, "text");
		}
	}
};

var fImport = config.macros.fileImport;
if(fImport) {
	fImport.uploadTo = "Upload to: ";
	var _createForm = config.macros.fileImport.createForm;
	config.macros.fileImport.createForm = function(place, wizard, iframeName) {
		var container = $("<div />").text(fImport.uploadTo).appendTo(place);
		var select = $('<select name="mode" />').appendTo(container)[0];
		$('<option value="private" selected>private</a>').appendTo(select);
		$('<option value="public">public</a>').appendTo(select);
		wizard.setValue("importmode", select);
		_createForm.apply(this, [place, wizard, iframeName]);
	};

	var _onGet = config.macros.importTiddlers.onGetTiddler;
	config.macros.importTiddlers.onGetTiddler = function(context, wizard) {
		var type = $(wizard.getValue("importmode")).val();
		var ws =  plugin.getCurrentWorkspace(type);
		wizard.setValue("workspace", ws);
		_onGet.apply(this, [context, wizard]);
	};
}

config.extensions.ServerSideSavingPlugin.reportSuccess = function(msg, tiddler) {
	plugin.checkSyncStatus(tiddler);
	msg = config.extensions.ServerSideSavingPlugin.locale[msg];
	var link = "/" + encodeURIComponent(tiddler.title);
	displayMessage(msg.format([tiddler.title]), link);
};


})(jQuery);
//}}}
為了明早 11 點要交,但還有三、四千字未審完的案子,已準備今天要加班到很晚,甚至可能得在公司趴、躺一下再繼續趕。想不到,晚餐後專心衝了一下,九點多遇到一個難句停下來,看一下進度如何時,發現我已經從原本還有一半,趕到剩 1/5 不到了。很感謝 神,我現在要回家睡覺,明早要晨禱,然後再早點來把剩下的做完,這樣就不用熬夜了,可以恢復新鮮的肝。

Thank you my Lord! <<;)>><<大心>>
iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAACRUlEQVR4nK2STUhUYRSGn+8bnYulBBGEkZFSJE1pgVILzUU/G0UGok3tokXNop0EY6PIYCCBlMHUwhZtooWLmqKFZKESBtHfIokCayFWKJFOznRnrve0GL/xjk5m0QsXDh/3POc9P/Afpf4lafrTS5n48IapL19BXJAF/MX672CT70ZkaPgJlmVRVbGV8o2l4MxBOkE6Nbt22OjDmzIzO8/hpiOUri8BBJQGFGS+Q+rz2mCP7l2XTZu3UxPYmwXoYnAzi18aJAPiUGQSwkFLAC7dtfMKvB65IwlbqNm1Izsf7QcnnQMJGcABnKwzAzIyQO97NDZMc6Ah98+D8WcosRGVRuGAz+Os4/xRVMkxunra8pxGQq1EY3GaAw1EejtBF4Fr07L7IPef3wKdBp9Dy75zS7BCioRal+LuEHXVG8AHqngdF7tPIcn3qCIHsaCj7/jqMABd1gjEqa8tZ2F+EqXmEJ9NXe0CZCZAa3Bd6pv06rAsKCv35wy4s6ATIEmUTxAFyseiWwrDli8EAOcbqB+gUygL8IO2AAuUBcpP/jYjoVZ0WSNdPW10XrgMkFtIVWDLnyaydLThoCUGZuQFjVcM0nt2pwK4/cqWk/utFbH2OovG4riJ0RUVJ95OUXdgG4dOP17ZvteZdz7mFAq5A9jTOceNa09/TwsHLUkNnpBw0BIT22N9Yo/15d5M3N9eKaY1k++Nc9s0lx6NxYF4rphZhGm3v71SkgPVBY3lnYYBLod4dab7o3oxdEX6uSoAyYFqjONf8VABYmx9BvkAAAAASUVORK5CYII=
/*{{{*/
#hoverMenu>.button, #hoverMenu>.tiddlyLink { background:[[ColorPalette::PrimaryLight]]; color:#FFF; border: 1px solid [[ColorPalette::PrimaryMid]]; }
#hoverMenu>.button:hover, #hoverMenu>.tiddlyLink:hover {color:#fff; background:[[ColorPalette::PrimaryMid]]; border: 1px solid [[ColorPalette::PrimaryDark]];}

#hoverMenu>span>.button, #hoverMenu>span>.tiddlyLink { background:[[ColorPalette::PrimaryLight]]; color:#FFF; border: 1px solid [[ColorPalette::PrimaryMid]]; }
#hoverMenu>span>.button:hover, #hoverMenu>span>.tiddlyLink:hover {color:#fff; background:[[ColorPalette::PrimaryMid]]; border: 1px solid [[ColorPalette::PrimaryDark]];}

#hoverMenu>.sliderPanel>.button, #hoverMenu>.sliderPanel>.tiddlyLink { background:[[ColorPalette::PrimaryLight]]; color:#FFF; border: 1px solid [[ColorPalette::PrimaryMid]]; }
#hoverMenu>.sliderPanel>.button:hover, #hoverMenu>.sliderPanel>.tiddlyLink:hover {color:#fff; background:[[ColorPalette::PrimaryMid]]; border: 1px solid [[ColorPalette::PrimaryDark]];}

#hoverMenu { width: 14px; }
/*}}}*/
剛老闆和同事在問說公文要用什麼格式,因為勞保局打來要求我們的行政/總務提出內部公文,證明我們 5/2 那天確實有按政府規定(?)/勸導(?)/命令(?),補假一天。

放是確實有放,因為那天我在家真的有補了幾個小時的眠,度過了一天悠閒的日子~~(還敢講……<<瞇眼>>)~~;但是問題是,我們是十幾人的小而美高科技資訊翻譯公司,平常頂多用新世代的 Google Apps Mail 發發內部通告就算了,還不曾有固定格式了,哪有什麼內部文令那些花樣……

所以剛剛就拿在部隊裡鎮日和公文打交道,加上之前承辦過人資業務時拿到過的公文當範本給同事參考了。免不了要掰些東西,大概會出現什麼「ㄨㄨ字第100001號」之類從來不曾出現在我們公司的東西吧。喔對了,公文流水號可不能編 0001,當然要編個 0351 之類的,表示之前就有其他公文,之後當然也有。

喂,等一下,不要以後還來什麼稽查到時候又「抓」我們平常沒有內部行文,臨時又偽造文書……是說中華民國〈公司法〉或哪個法令有規定公司一定要建立公文系統不可嗎?<<:o>> 從這種公文文化觀之,我更加感受到不想在公家機關那種地方工作的一種心情了……(預算制度是另一項我很無法理解的東西)

教會的訪韓交流一批批去了又回來,才想起讚美歌新專輯的季節又來到了。雖然還沒在臺灣發售,但已經可以在我們的網路廣播電臺(www.rgoradio.com)上聽到了,又有好多動聽又深情的歌曲,超開心!
R0lGODlhEwATAPf/AAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDcwKbK8Co/qio//ypfACpfVSpfqipf/yp/ACp/VSp/qip//yqfACqfVSqfqiqf/yq/ACq/VSq/qiq//yrfACrfVSrfqirf/yr/ACr/VSr/qir//1UAAFUAVVUAqlUA/1UfAFUfVVUfqlUf/1U/AFU/VVU/qlU//1VfAFVfVVVfqlVf/1V/AFV/VVV/qlV//1WfAFWfVVWfqlWf/1W/AFW/VVW/qlW//1XfAFXfVVXfqlXf/1X/AFX/VVX/qlX//38AAH8AVX8Aqn8A/38fAH8fVX8fqn8f/38/AH8/VX8/qn8//39fAH9fVX9fqn9f/39/AH9/VX9/qn9//3+fAH+fVX+fqn+f/3+/AH+/VX+/qn+//3/fAH/fVX/fqn/f/3//AH//VX//qn///6oAAKoAVaoAqqoA/6ofAKofVaofqqof/6o/AKo/Vao/qqo//6pfAKpfVapfqqpf/6p/AKp/Vap/qqp//6qfAKqfVaqfqqqf/6q/AKq/Vaq/qqq//6rfAKrfVarfqqrf/6r/AKr/Var/qqr//9QAANQAVdQAqtQA/9QfANQfVdQfqtQf/9Q/ANQ/VdQ/qtQ//9RfANRfVdRfqtRf/9R/ANR/VdR/qtR//9SfANSfVdSfqtSf/9S/ANS/VdS/qtS//9TfANTfVdTfqtTf/9T/ANT/VdT/qtT///8AVf8Aqv8fAP8fVf8fqv8f//8/AP8/Vf8/qv8///9fAP9fVf9fqv9f//9/AP9/Vf9/qv9///+fAP+fVf+fqv+f//+/AP+/Vf+/qv+////fAP/fVf/fqv/f////Vf//qszM///M/zP//2b//5n//8z//wB/AAB/VQB/qgB//wCfAACfVQCfqgCf/wC/AAC/VQC/qgC//wDfAADfVQDfqgDf/wD/VQD/qioAACoAVSoAqioA/yofACofVSofqiof/yo/ACo/Vf/78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH+HUJ1aWx0IHdpdGggR0lGIE1vdmllIEdlYXIgMy4wACH5BAEKAP8ALAAAAAATABMAAAj+AP8JHEisky5KuzoRG8iQIKZfwyKGwoSCyUKGTFB06iRxWCcmKX51wtSp4a+KnY6p1Bhx2K9MJQUW9IiiJc1OoYb5wiRK4EONKo+FCsXkH4pfoX79gvOP2EmjHJENQ/HKqEtOv+iIwsmkapNSEZnISMBkWNJfCXWdHFtTaIp68o76+sXJVxxKw5goiFd22LFOKD3OHVnHI8iUOVtCFPkLU5xOEBPbTJoUqy+YxDC1zJm0IoqHv3x10vrvYSg4HAFTeyWICdZOdqH9E2VrWKaMVAcexUpaYKdMc19mzAj81+OGI2FDhhy6E+qGAkXBqaMLK6ZMcDL1hD5wq2M6nbYDMwwIADs=
看到蠻欣賞的人~~(不要誤會 <<瞇眼>>)~~居然也抽煙,挺 shock 的。
A space managed by [[GJRobert|@@gjrobert]]
/%
|Name|QuickEdit_align|
|Source|http://www.TiddlyTools.com/#QuickEdit_align|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - text alignment|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="align text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select text alignment...','');
	s.options[s.length]=new Option('left','left');
	s.options[s.length-1].title='{{left{...}}}';
	s.options[s.length]=new Option('center','center');
	s.options[s.length-1].title='{{center{...}}}';
	s.options[s.length]=new Option('right','right');
	s.options[s.length-1].title='{{right{...}}}';
	s.options[s.length]=new Option('justify','justify');
	s.options[s.length-1].title='{{justify{...}}}';
	s.options[s.length]=new Option('float left','floatleft');
	s.options[s.length-1].title='{{floatleft{...}}}';
	s.options[s.length]=new Option('float right','floatright');
	s.options[s.length-1].title='{{floatright{...}}}';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		config.quickEdit.wrapSelection(this.button,'{{'+this.value+'{','}}}');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>align</a></html>
iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAHTklEQVR4Ae2dT0gVXRTAx0+pBLEwTEGolQZRCoJLo1wZLnQTRK5UQg0SIVy5kDbuahWWWrkRC3Ih4kIEaaEl4soWtamFJVKChRjk3/x+MnK7zbz5997MvDvz3iweZ+7cue+cn3fuPfecN9ecw8NDzfo4ODhYWFiYnJxcXFz8/v37t2/fdnZ2zp07V1JSUlFR0dDQcOPGjTNnzlg3EK8rwEp4bG5u9vX1nT171t7cvLy8xsbG5eXlhI3ErFAz2/Pnz5+HDx86YpIh5uTk3Lp1a3V11dxanEqMsLa2tugpMgj3cmlp6bt37+JEx2DLP7C+fPly5coV93TMNU+ePDkxMWH4jtic/oVFn0qRFOxoYX19PTZ0DIYcw2KcSvrpE/0r3qQAdwyLEV3YnJwQe1LHsPASPM19ZpqZQApY/2H5o0ePNjY2zAhclkBqdna2uLjYZf0IV9vf30+lW2VIn9JHem1ubi7pP7UbUkwdd+/eHRgY0L8v0p9aT09PcrBckurs7KR9XPwnT55EmhTKa1evXk0ClidSevsx4KVdvHjRK6wkSMWDl3b69GlPsJImFQNe2qlTp9zDSpFU1Hlp58+fdwnLF1KR5qXV1NS4geUjqejy0pqbmx1h+U5K8Hr69GmE/AltbGzMHlZApKLIS/v58ydxdCtegZKKHK+jEI1VJCsEUtHidQSL3AzutaFzhUYqQryOg3/kZmRYIZOKCq9jWGSxyM3oSqeFVCR4HcPiYSSLRW4mjaQEr8HBQTX9ib+w0I8slmNuhviUHnXRbQvikwFUTV7/wHL8e4ZASuX+5QFWaKSU5eUWVsik1OTlClZaSCnIyxlWGkmpxssZFrkZXek0fjI/Dg0NOc4/QVc4SrLaH5cvXzYvhuxv8f0qFNrb24eHh31v2VuDbv4aZLHSzgur0t6/nB9DnWaWFxzcwqJqlpcHWFle3mBlOC/PsJTixfyIPqEdycBCOXXGrzB5JQkLXmSxFPEnQuOVPKwM5JUSrEzjlSqsjOLlA6zM4eUPLKV4PXv2DH2COHyDhXLqzI8B8fITFrzIyijiTwTBy2dY8eblP6wY8woEVlx5BQUrlrwChKUUr+fPn6NPikewsFBOnfkxdV6Bw4IXWSxF/IkUeYUBKza8QoIVD17hwYoBr1BhKcXrxYsX6OPpCBsWyiky3ufn5//48UN1WOrw4k36CMBCRbIMYfoTbA5w+/ZtnD46lPgxSHl5OT+ocs8rDY+hUC4cXtXV1byftLu7q39vS0uLgIUwMzMj9HEU0gkL5QLlxTtJDx48YC8GmcLS0pIMq6mpSb5qL6cZVqC8rPZHkF+xzM3NZW8ne0biavphBcQLIuzBJ+yUhZGREblz9fb2yldtZCVgoZ/vzyNbEVmZ/fv376KiIsGL/QvFiGZ1i16uCizfeU1NTdlYfv/+fQEL4eXLlzaVxSWFYKETWQa//Inp6WlhpFn49OmT/EW1tbXmOuYStWChn1+8HN/+qa+vlzvX+/fvzXQMJZYv/MoNhSm3tbXxdXfu3EFRT9/LiM5bk2yAgsewsrLy9etX+9v5yTq9T9Rh6uR3VOI0sWCAp8ipp/4FHUy1mvusLKL+hQsXBJSCggI2XbOqrJcr9xgKdd3zwvMUd3kS+vv7BSyEx48f29+uLiz0dsOL1YzBR7c3WL7KBsgnTpwQvC5duiRfNctKw0JdR16jo6Nmq9yXsLoWsBDevHljc6/qsFCdLIM8zcu2sQEfG2PbmOd4aX5+Xm7w5s2bNrdEAJYNL6Y/G9tcXqqsrBS8mCvW1tasbnR+0Uk0lEahtbU14fN47dq11LWSX3tj+GPhZdmmFUUFy83PI5E84lNEXVLR9tevX4WFhQJQWVnZ3t5ewgaj8RgK1c28dCPxSIklsEIWNT0J9+7dE7AQxsfHE94eMVjYYMULI4klsEJm3ZfQVJvCDx8+yLDq6uoSVo4eLMwgiyWH0mU7kZk6WffxryQ8+fTXr1+X2/n48aOZVyRhYQZZLHIzZBxkCw0yqxl8dDxPs9nmktevX8u3d3V1metEFZZuCbkZMg7E0YkOy6bKMj46nif+lNl4uYT4n7yxJjIDv1wBOdqwhDHE0YkOE/OUMRlk/Cl+T21GoDfS3d1tqG8O8sQElm4wvYOYJ5E8g9nyKV4Ccx8jugCNYCbFLVVVVXId5FjBErYRyevo6CDqImMyyIzojFPwTUhKr/z27VvRZmxh6RYSnyLqQizBgEk+lccpuVyX2WozU2AJO4klsEJm3WfGYV/C5CDvkRXPx1BgkgVWyIQJWc3YAzJcxfkQjWQQLN1m1n2sZvDRDVCsTnHWhHObcbBEN8FHx/O0H7N0giwG9LsyF5ZuP24X/hReglXPopzFUxaW6GRHAl4Cc58ckhf4WGzqi/NM71n/ADs8ZO5jRJdTZDoyghnUzMIy4Do6ZURnnOLpE7F/gj8Ey3KOgGUPCwKfP38mTU1YkSAHn1lYFpyk4u3t7VevXhG8/h/x+YTd3b0e1AAAAABJRU5ErkJggg==
/***
|''Name:''|~PopupMacro|
|''Description:''|create (nested) popups with custom content|
|''Documentation:''|http://tobibeer.tiddlyspace.com/#Popup|
|''Author:''|Tobias Beer (original author: Saq Imtiaz)|
|''Version:''|1.5.0 (2013-10-13)|
|''CoreVersion:''|2.5.3 or better|
|''Source''|https://raw.github.com/tobibeer/TiddlyWikiPlugins/master/plugins/PopupMacro.min.js|
/%***/
(function(e){var t=config.macros.popup={hover:true,toggle:false,sticky:false,arrow:document.all?" ▼":" ▾",hoverables:"#mainMenu",showAfter:400,showStandardAfter:800,enableHover:".button[tag], .tiddlyLink[tag]",disableHover:".slidr_button",err1:"missing macro parameters",err2:"missing label or content parameter",handler:function(n,r,i,s,o,u){var a,f,l,c,h,p=o.parseParams("anon",null,true),d={content:(i[1]||"").replace(/(\$\)\)|\>\+\>)/g,">>"),arrow:getParam(p,"arrow",t.arrow)},v=getParam(p,"class","");f=i[0];if(!f||!d.content){createTiddlyError(n,t.err1,t.err2);return false}["sticky","toggle","hover"].map(function(e){var n=getParam(p,e,t[e]);d[e]=i.contains("no"+e)?false:n||i.contains(e);if(n=="true")d[e]=1;if(n=="false")d[e]=0});if(i.contains("noarrow"))d.arrow="";a=e(createTiddlyButton(n,f+d.arrow,f,d.toggle?t.toggleButton:t.show,"button popupbutton"+(v?" "+v:""),null,null));d.popclass="popup popupmacro"+(t.inPopup(a)?" nested":"")+(v?" "+v:"");d.show=!d.hover;a.data(d);if(d.hover){a.on("mouseover",t.showAfter?t.delay:t.show);a.on("mouseout",t.abort)}},delay:function(n){var r=e(this.innerHTML?this:n);r.data("show",true);setTimeout(function(){if(r.data("show")){if(r.is(".popupbutton"))t.show(r[0]);else r.click()}},r.is(".popupbutton")?t.showAfter:t.showStandardAfter)},abort:function(t){e(this).data("show",false)},toggleButton:function(n){var r=e(this),i=r.data("popup");if(i)Popup.removeFrom(e(i).data("level"));else t.show.apply(this,arguments)},show:function(n){n=n||window.event;var r,i=Popup.stack.length,s=e(this.innerHTML?this:n),o=t.inPopup(s),u=o?s.closest(".popup").data("level"):0;if(!s.data("popup")){if(!o&&i)Popup.removeFrom(0);else if(o&&i>1){i=u+1;Popup.removeFrom(i)}r=createTiddlyElement(document.body,"ol",null,s.data("popclass")+(i?" nested"+i:""),null);s.data("popup",r).addClass("popupopen");e(r).data({button:s,level:i,sticky:s.data("sticky")}).click(t.popupClick);Popup.stack.push({root:s[0],popup:r});wikify(s.data("content"),r);Popup.show(r,true)}if(n){n.cancelBubble=true;if(n.stopPropagation)n.stopPropagation()}return false},popupClick:function(t){var t=t||window.event,n=e(this).closest(".popup"),r=resolveTarget(t),i=e(r).closest("a").length;Popup.removeFrom(n.data("level")+1);if(i&&!n.data("sticky")){Popup.remove()}else{t.cancelBubble=true;if(t.stopPropagation)t.stopPropagation()}return false},inPopup:function(t){return e(t).closest(".popup").length},linkOver:function(n){var r=e(this),i=r.closest(".popup").data("level")||0;Popup.removeFrom(i);if((r.is(t.enableHover)||r.data("tiddlers"))&&!r.is(t.disableHover))t.delay(r)},makeHoverable:function(n){var r=e(n);if(r.is("a")&&r.closest(t.hoverables).length&&!r.is(".popupbutton")){r.off("mouseover",t.linkOver);r.on("mouseover",t.linkOver);r.off("mouseout",t.abort);r.on("mouseout",t.abort)}}};window.refreshElementsPOPUP=window.refreshElements,window.refreshElements=function(n,r){window.refreshElementsPOPUP.apply(this,arguments);var i=e(n);e("a",i).add(i).each(function(){t.makeHoverable(this)})};window.invokeMacroPOPUP=window.invokeMacro;window.invokeMacro=function(r,i,s,o,u){window.invokeMacroPOPUP.apply(this,arguments);var a=e(r.lastChild);e("a",a).add(a).each(function(){t.makeHoverable(this)})};Popup.removeFromPOPUP=Popup.removeFrom;Popup.removeFrom=function(t){var n,r,i;for(i=Popup.stack.length-1;i>=t;i--){r=Popup.stack[i],e(r.root).removeData("popup").removeClass("popupopen")}Popup.removeFromPOPUP.apply(this,arguments)};setStylesheet(".nested {padding:3px;margin:-0.5em 0 0 2em !important;}"+".popupbutton {cursor:pointer};","PopupMacroStyles")})(jQuery)
//}%/
/***
|''Name''|ActivityStreamPlugin|
|''Version''|0.5.4|
|''Description''|Provides a following macro|
|''Author''|Jon Robson|
|''Requires''|TiddlySpaceFollowingPlugin|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
|''Source''|https://github.com/jdlrobson/TiddlyWiki/raw/master/plugins/TiddlySpaceInstaller/ActivityStreamPlugin.js|
!Usage
{{{<<activity>>}}}
!!Supressing activity
You can supress notifications by  id:
"plugin", "shadow", "standard", "follow", "followYou", "siteInfo", "siteIcon", "ownSiteIcon", "notify", "reply"
e.g. {{{ <<activity supress:siteIcon>> }}} will hide siteIcon activity from you.

!!Supressing people
{{{<<activity ignore:person}}} will ignore all activity where person is the subject of the activity. eg. person followed other-person will not appear in the feed.
!!Controlling displayed dates.
{{{<<activity timestampFormat:"<0hh o' clock>" headingFormat:"0DD/0MM" >>}}} will display date headings as date/month eg.
3rd of January would be displayed as 03/01. This particular timestamp example gives you the hour of the activity.

!!Even more content
{{{<<activity limit:no>>}}} will show you all possible activity in the last X days where X is set at a macro level (advanced developers should see config.macros.activity.RECENTNESS).
!StyleSheet

.activityStream .externalImage, .activityStream .image {
	display: inline;
}

.feedItem .siteIcon {
	display: inline;
}

.activityStream .error {
	background-color: red;
	color: white;
	font-weight: bold;
}

.activityStream .feedItem {
list-style: none;
}

.activityStream .notification {
	background-color: yellow;
	color: black;
}

.activityStream .activityGroupTitle {
	font-weight: bold;
	margin-top: 8px;
}
.activityStream .feedItem {
	margin-left: 8px;
}
!Code
***/
//{{{
(function($) {
var name = "StyleSheetActivityStream";
config.shadowTiddlers[name] = store.getTiddlerText(tiddler.title +
     "##StyleSheet");
store.addNotification(name, refreshStyles);

var followMacro = config.macros.followTiddlers;
var tweb = config.extensions.tiddlyweb;
var tiddlyspace = config.extensions.tiddlyspace;
var scanMacro = config.macros.tsScan;

var modifierSpaceLink = "<<view modifier spaceLink>>";
var spaceTiddlyLink = "<<view server.bag spaceLink server.title>>";
var bagSpaceLink = "<<view server.bag spaceLink>>";
var bagSiteIcon = "<<view server.bag SiteIcon width:24 height:24 label:no preserveAspectRatio:yes>>";
var modifierSiteIcon = "<<view modifier SiteIcon width:24 height:24 label:no preserveAspectRatio:yes>>";
var timestamp = "[<<view modified date '0hh:0mm'>>]";
var replyLink = "<<view server.title replyLink>>";
config.shadowTiddlers.ActivityStreamTemplates = [
	"!notify\n%3 {{notification{%0 %1 has modified %2 in %0 %1 and flagged it for your attention!}}} %8\n",
	"!reply\n%3 {{notification{%0 %1 replied with %2 to your %4 %5 post.}}} %8\n",
	"!userSiteIcon\n%3 %6 %7 has a new ~SiteIcon.\n",
	"!spaceSiteIcon\n%3 %6 %7 updated the SiteIcon for the %0 %1 space.\n",
	"!image\n%3 %6 %7 drew the image %2 in the %1 space.\n",
	"!plugin\n%3 %6 %7 modified a plugin called %2 in the %0 %1 space.\n",
	"!shadow\n%3 %6 %7 modified a shadow tiddler %2 in the %0 %1 space.\n",
	"!geo\n%3 %6 %7 modified a geo tiddler called %2 in the %0 %1 space <<view title maplink 'view on map'>>. %8\n",
	"!followYou\n%3 %0 %1 is now following you.\n",
	"!follow\n%3 %0 %1 is now following %4 %5 <<view server.title link follow>>\n",
	"!siteInfo\n%3 %6 %7 <<view server.bag spaceLink server.title label:described>> the %0 %1 space.\n",
	"!video\n%3 %6 %7 modified a video entitled %2 in the %0 %1 space. %8\n",
	"!standard\n%3 %6 %7 modified %2 in the %0 %1 space. %8\n"
	].join("").format(bagSiteIcon, bagSpaceLink, spaceTiddlyLink, timestamp,
		"<<view server.title SiteIcon width:24 height:24 label:no preserveAspectRatio:yes>>", "<<view server.title spaceLink>>",
		modifierSiteIcon, modifierSpaceLink, replyLink);
story.refreshTiddler("ActivityStreamTemplates", null, true);
config.annotations.ActivityStreamTemplates = "This is a special tiddler used by the ActivityStreamPlugin. It is used for templating notifications. Templates at the top have preference over templates at the bottom.";

var macro = config.macros.activity = {
	default_limit: 50,
	templates: [],
	init: function() {
		var templates = [];
		var regex = new RegExp(/^!(.*)\n/gm);
		var text = store.getTiddlerText("ActivityStreamTemplates");
		var match = regex.exec(text);
		while(match) {
			templates.push(match[1]);
			match = regex.exec(text);
		}
		macro.templates = templates;
	},
	// order matters - earlier templates override older ones
	RECENTNESS: 2, // in days
	TIMESTAMP_FORMAT: "<0hh:0mm>",
	info: {},
	locale: {
		pleaseWait: "please wait while we load your stream...",
		errorLoading: "The activity stream failed to load. Please make sure you have an internet connection and try again.",
		userHeading: "Below is the activity stream for spaces that this space follows with the follow tag. (%0/%1 spaces have been loaded)",
		emptyStream: "Activity stream currently empty. (%0/%1 loaded)"
	},
	getTimeStamp: function() {
		var today = new Date();
		macro._lastRun = today.getTime();
		var previous = new Date(today.setDate(today.getDate() - macro.RECENTNESS));
		return previous.convertToYYYYMMDDHHMM();
	},
	handler: function(place, macroName, params, wikifier, paramString, tiddler) {
		var container = $("<div />").text(macro.locale.pleaseWait).appendTo(place).
			attr("refresh", "macro").attr("macroName", macroName).attr("paramString", paramString);
		var space = tiddlyspace.currentSpace.name;
		var options = macro.getOptions(paramString);
		$(container).attr("activity-limit", options.limit);
		macro._session = Math.random();
		var activityType;
		var sourceActivity = function(user) {
			macro.CURRENT_USER = user.name;
			macro.USER_AT_TAG = "@%0".format(user.name);
			followMacro.getFollowers(function(users) {
				macro.getActivity(container, users, activityType, options);
			}, macro.CURRENT_USER);
			container.attr("activity-type", activityType);
			macro._renderStream(container, activityType, options);
		};

		if(options.user) {
			sourceActivity({name: options.user});
		} else {
			sourceActivity({ name: tiddlyspace.currentSpace.name });
		}
	},
	getOptions: function(paramString) {
		var options = {};
		var args = paramString.parseParams("name")[0];
		var toMap = ["timestampFormat", "headingFormat", "limit", "user"];
		var i;
		for(i = 0; i < toMap.length; i++) {
			var map = toMap[i];
			options[map] = args[map] ? args[map][0] : false;
		}
		var supress = args.supress || [];
		var templates = [];
		var show = args.show ? args.show : macro.templates;
		for(i = 0; i < show.length; i++) {
			var template = show[i];
			if(supress.indexOf(template) === -1) {
				templates.push(template);
			}
		}
		options.ignore = args.ignore || [];
		options.templates = templates;
		return options;
	},
	_getActivityQuery: function(user, timestamp) {
		timestamp = timestamp || macro.getTimeStamp();
		if(user) {
			return "/bags/%0_public/tiddlers?select=modified:>%1".format(user, timestamp);
		} else {
			return false;
		}
	},
	refresh: function(container) {
		var type = $(container).attr("activity-type");
		var limit = $(container).attr("activity-limit");
		var options = macro.getOptions($(container).attr("paramString"));
		options.limit = parseInt(limit, 10);
		macro.renderStream(container, type, options);
	},
	getActivity: function(place, users, type, options) {
		var i;
		var timestamp = macro.activityTimestamp;
		var firstRun =  timestamp ? false : true;
		macro.info.loaded = firstRun ? 0 : macro.info.loaded;
		var afterAjax = function(tiddlers) {
			if(firstRun) {
				macro.info.loaded += 1;
			}
			macro.updateStream(tiddlers, type, options);
			macro.renderStream(place, type, options);
		};
		var success = function(tiddlers) {
			afterAjax(tiddlers);
		};
		var error = function() {
			afterAjax([]);
		};
		if(macro._lastRun > new Date().getTime() - 300000) { // leave 5 minutes between calls
			afterAjax([]);
			return;
		}
		macro.info.queries = users.length;
		for(i = 0; i < users.length; i++) {
			var user = users[i];
			ajaxReq({
				url: macro._getActivityQuery(user, timestamp),
				dataType: "json", success: success, error: error
			});
		}
		macro.activityTimestamp = new Date().convertToYYYYMMDDHHMM();
	},
	reportError: function(place) {
		var error = $("<div />").addClass("error").text(locale.errorLoading);
		$(place).empty().append(error);
	},
	createFeedEntry: function(container, tiddler, options) {
		var item = $("<li />").addClass("feedItem");
		var content = $("<div />").appendTo(item);
		var wikifyPlace = $("<span />").appendTo(content)[0];
		var author = tiddler.modifier;
		if(author && !options.ignore.contains(author)) {
			$(container).append(item);
			config.macros.view.views.activityItem(null, wikifyPlace, null, null, null, tiddler);
			return item;
		}
		return false;
	},
	renderStream: function(place, type, options) {
		window.clearTimeout(macro._renderTimeout);
		macro._renderTimeout = window.setTimeout(function() {
			macro._renderStream(place, type, options);
		}, 100);
	},
	_renderStream: function(place, type, options) {
		$(place).empty();
		var limit = options.limit;
		var container = $("<ul />").addClass("activityStream").appendTo(place);
		var textHeading = macro.locale.userHeading.format(macro.info.loaded, macro.info.queries);
		$("<li />").addClass("listTitle").text(textHeading).appendTo(container);
		var tiddlers = store.sortTiddlers(store.filterTiddlers("[server.activity[true]]"), "-modified"); // TODO: sort headings instead if possible (conflicts with limit)
		var headings = [];
		var groups = {};
		var processed = 0, i, j;
		var atEndOfActivityFeed = true;
		for(i = 0; i < tiddlers.length; i++) {
			var tiddler = tiddlers[i];
			if(options.templates.contains(tiddler.fields["server.activity.type"])) {
				if(!limit || processed < limit) {
					var modified = tiddler.modified;
					if(modified) {
						// format date.
						var modifiedString = modified.formatString(options.headingFormat || config.macros.timeline.dateFormat);
						if(headings.contains(modifiedString)) {
							groups[modifiedString].push(tiddler);
						} else {
							headings.push(modifiedString);
							groups[modifiedString] = [ tiddler ];
						}
					}
					processed += 1;
				} else {
					atEndOfActivityFeed = false;
				}
			}
		}
		var somethingRendered;
		for(i = 0; i < headings.length; i++) {
			var heading = headings[i];
			var _tiddlers = store.sortTiddlers(groups[heading], "-modified");
			var headingEl;
			if(_tiddlers.length > 0) {
				headingEl = $("<li />").addClass("listTitle activityGroupTitle").text(heading).appendTo(container);
			}
			var rendered = [];
			for(j = 0; j < _tiddlers.length; j++) {
				var item = macro.createFeedEntry(container, _tiddlers[j], options);
				if(item) {
					rendered.push(item);
				}
			}
			if(rendered.length === 0) {
				headingEl.remove();
			} else {
				somethingRendered = true;
			}
		}
		if(!somethingRendered) {
			var msg;
			if(macro.gotActivity) { // it has been run before
				msg = macro.locale.emptyStream.format(macro.info.loaded, macro.info.queries);
			} else {
				msg = macro.locale.pleaseWait;
			}
			$(container).text(msg);
		}
		if(!atEndOfActivityFeed) { // show more button
			$("<input />").attr("type", "button").val("more").click(function(ev) {
				var currentLimit = $(place).attr("activity-limit");
				var newLimit = parseInt(currentLimit, 10) + 50;
				macro.default_limit = newLimit;
				$(place).attr("activity-limit", newLimit);
				macro.refresh(place);
			}).appendTo(place);
		}
		this.gotActivity = true;
	},
	updateStream: function(jstiddlers, type, options) {
		// assume already sorted.
		var tiddlers = scanMacro._tiddlerfy(jstiddlers, options);
		var _dirty = store.isDirty();
		$.each(tiddlers, function(i, tid) {
			var info = config.macros.view.activity.getActivityInfo(tid, options);
			tid.fields["server.activity.type"] = info.type;
			tid.fields["server.activity"] = "true";
			if(!tid.tags.contains("excludeLists")) {
				tid.title = tiddlyspace.getLocalTitle(tid.title, tid.fields["server.workspace"]);
				tid.tags = tid.tags.concat(["excludeLists", "excludeMissing", "excludeSearch"]);
				tid.fields.doNotSave = "true";
				store.addTiddler(tid); // save caused unsaved changes alert and slowdown
			}
		});
		store.setDirty(_dirty);
	}
};

config.macros.view.views.activityItem = function(value, place, params, wikifier,
	paramString, tiddler) {
	var info = config.macros.view.activity.getActivityInfo(tiddler, {});
	wikify(info.template, place, null, tiddler);
};

var helper = config.macros.view.activity = {
	_isNotification: function(tiddler) {
		return tiddler.tags.contains(macro.USER_AT_TAG) || tiddler.tags.contains("@all");
	},
	_repliesOn: function() {
		return tiddlyspace.currentSpace.name === macro.CURRENT_USER;
	},
	types: {
		video: function(tiddler) {
			return tiddler.tags.contains("video");
		},
		geo: function(tiddler) {
			return tiddler.fields["geo.lat"] && tiddler.fields["geo.long"];
		},
		siteInfo: function(tiddler) {
			var title = tiddler.fields["server.title"];
			return title === "SiteInfo";
		},
		userSiteIcon: function(tiddler) {
			var modifierBag = "%0_public".format(tiddler.modifier);
			var title = tiddler.fields["server.title"];
			return title === "SiteIcon" && modifierBag === tiddler.fields["server.bag"];
		},
		spaceSiteIcon: function(tiddler) {
			var title = tiddler.fields["server.title"];
			return title === "SiteIcon"; // note userSiteIcon above does the bag check
		},
		shadow: function(tiddler) {
			var title = tiddler.fields["server.title"];
			return title in config.shadowTiddlers;
		},
		plugin: function(tiddler) {
			return tiddler.tags.contains("systemConfig");
		},
		followYou: function(tiddler) {
			var title = tiddler.fields["server.title"];
			title = title.indexOf("@") === 0 ? title.substr(1) : title;
			return tiddler.tags.contains("follow") && title === macro.USER_AT_TAG;
		},
		follow: function(tiddler) {
			return tiddler.tags.contains("follow");
		},
		reply: function(tiddler) {
			var title = tiddler.fields["server.title"];
			var myTiddler = store.getTiddler(tiddler.title);
			var myTiddlerIsOlder = myTiddler && myTiddler.modified < tiddler.modified;
			return store.tiddlerExists(title) && myTiddlerIsOlder && helper._repliesOn(tiddler);
		},
		notify: function(tiddler) {
			var title = tiddler.fields["server.title"];
			var myTiddler = store.getTiddler(title);
			var myTiddlerIsNewer = myTiddler && myTiddler.modified > tiddler.modified;
			return helper._isNotification(tiddler) && helper._repliesOn(tiddler) && !myTiddlerIsNewer;
		},
		standard: function(tiddler) {
			return true;
		},
		image: function(tiddler) {
			return config.macros.image.isImageTiddler(tiddler);
		}
	},
	// each type should point to a slice in ActivityStreamTemplates tiddler
	getActivityInfo: function(tiddler, options) {
		var repliesOn = tiddlyspace.currentSpace.name === macro.CURRENT_USER;
		var activityType, i;
		if(tiddler) {
			for(i = 0; i < macro.templates.length; i++) {
				var type = macro.templates[i];
				if(!activityType && helper.types[type]) {
					if(helper.types[type](tiddler)) {
						activityType = type;
					}
				}
			}
		}
		template = store.getTiddlerText("ActivityStreamTemplates##" + activityType) || locale.standardTemplate;
		return activityType ? { template: template, type: activityType } : false;
	}
};

config.macros.view.views.link = function(value, place, params, wikifier,
		paramString, tiddler) {
		var el = createTiddlyLink(place,value,true);
		if(params[2]) {
			$(el).text(params[2]);
		}
};

config.macros.view.views.maplink = function(value, place, params, wikifier,
		paramString, tiddler) {
		var lat = tiddler.fields["geo.lat"];
		var lng = tiddler.fields["geo.long"];
		var label  = params[2] || value;
		if(lat && lng) {
			$("<a />").attr("href", "http://maps.google.com/maps?saddr=%0,%1".format(lat, lng)).text(label).appendTo(place);
		}
};

var _displayS = tiddlyspace.displayServerTiddler;
tiddlyspace.displayServerTiddler = function(src, title, workspace, callback) {
	var localTitle = tiddlyspace.getLocalTitle(title, workspace);
	var localTiddler = store.getTiddler(localTitle);

	var _callback = function(src, tiddler) {
		if(callback) {
			callback(src, tiddler);
		}
		if(localTiddler) {
			tiddler.fields["server.activity"] = "true";
			tiddler.fields["server.activity.type"] = localTiddler.fields["server.activity.type"];
		}
	};
	return _displayS.apply(this, [ src, title, workspace, _callback ]);
};
}(jQuery));
//}}}
@@Please do not modify this tiddler; it was created automatically upon space creation.@@
/***
|Name|HashTagsPlugin|
|Author|[[Tobias Beer|http://tobibeer.tiddlyspace.com]]; hacked and configured for own usage by ''G.J.Robert Ciang''|
|Source|http://tbsource.tiddlyspace.com#HashTagsPlugin|
|Requires||
|~CoreVersion|2.5|
|Version|0.3.3 alpha //''with unofficial hacks, configurations and zh-TW localization! Please go to the Source if you want the original version.''//|
[[HashTagsTest]]
*Unofficial hacks by G.J.Robert
**{{{preview}}} macro globally replaced with {{{previewh}}} so to avoid conflict with PreviewPlugin
**Add support to use Hanzi characters as hashtags (only to "#" tags because the category syntax does not seem to be functioning yet)
**Renaming the tiddler to add the prefix "zz-" so not to break TreeDiagramFormatterPlugin
**Making the tags case-sensitive so to use uppercase with Hanzi characters
*G.J.Robert configuration
**customized hash characters used
*zh-TW localization (hard-coded) by G.J.Robert included (2013/2/12)


***/
//{{{
(function ($) {

config.textPrimitives.anyLetterPlus = "[A-Za-z0-9_\\-\u00c0-\u00de\u00df-\u00ff\u0150\u0170\u0151\u0171\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FCC\uF900-\uFA6D\uFA70-\uFAD9]";
config.textPrimitives.anyLetterStrictPlus = "[A-Za-z0-9\u00c0-\u00de\u00df-\u00ff\u0150\u0170\u0151\u0171\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FCC\uF900-\uFA6D\uFA70-\uFAD9]";
config.textPrimitives.hashtag = "(?:"+config.textPrimitives.anyLetterPlus+"|\\-)+";
config.textPrimitives.hashes = "[\\#\\!\\%\\&\\*\\?\\★\\※]";

config.macros.hashtag = {
	css: 'hashtag',
	exclude: 'HashTagsConfig##Exclude',
	hashtag: new RegExp("(?: |\t)+?("+config.textPrimitives.hashes.replace(/\\\\/mg,"\\") + ")(" + config.textPrimitives.hashtag + ")", "mg"),
	previewh: function(){
		
	},
	handler: function(place, macroName, params, wikifier, paramString, tiddler) {
		var ex=[],hash,hashResults,hx={},hxlist=[],i,l,li,link,ls,next,previewh,s,section,singular,t,thetag,out='',
		tids=store.getTiddlers('modified'),
		cmt=config.macros.hashtag,
		exp=(store.getTiddlerText(cmt.exclude)||'').readBracketedList(),
		h=/^(!{1,6})(.*)/,
		tag=params[0],
		getCookie=function(){
			return new Date().formatString('YYYY0MM0DD') + Math.random();
		};
		if(params.contains('categorySearch')){
//			createHashTag(place,tag,'','Search for all ' + tag + '-tags...');
			createHashTag(place,tag,'','搜尋所有以 ' + tag + ' 開頭的標記...');
			return;
		}
		
		exp.map(function(e){ex.pushUnique(e);});
		for(i=0;i<exp.length;i++){
			store.getTaggedTiddlers(exp[i]).map(function(t){ex.pushUnique(t.title)});
		}
		
		for(i=0;i<tids.length;i++){
			section='';
			tid=tids[i].title;
			if(ex.contains(tid))continue;
			ls=store.getTiddlerText(tid);
			if(ls){
				ls=ls.split('\n');
				for(l=0;l<ls.length;l++){
					li=ls[l];
					hd=h.exec(li);
					if(hd){
						section=hd[2];
					}else{
						hash=cmt.hashtag.exec(li);
						while(hash){
							next=hash[2].length+hash.index+1;
//							hash=hash[1] + hash[2].toLowerCase();
							hash=hash[1] + hash[2];
							if(hxlist.contains(hash+'s'))hash=hash+'s';
							if(!tag||tag&&(tag.length==1&&hash.substr(0,1)==tag||tag==hash||tag+'s'==hash||tag==hash+'s')){
								if(!hxlist.contains(hash)){
									hxlist.push(hash);
									singular=hash.substr(0,hash.length-1);
									if(hash.substr(hash.length-1,1)=='s'&&hxlist.contains(singular)){
										hx[hash]=hx[singular];
										delete hxlist[singular];
										delete hx[singular];
									}else {
										hx[hash]={};
									}
								}
								if(!hx[hash][tid])hx[hash][tid]=[];
								if(section)hx[hash][tid].pushUnique(section);
							}
							li=li.substr(next,li.length-next);
							cmt.hashtag.lastIndex=0;
							hash=cmt.hashtag.exec(li);
						}
					}
				}
			}
		};

		hxlist.sort();
		if(tag&&tag.length>1)out+='<<hashtag ' + tag.substr(0,1) + ' categorySearch>>\n';
		out+='{{hashtagSearch{'
		for(h=0;h<hxlist.length;h++){
			thetag=hxlist[h];
			previewh='{{previewh{%0 <<previewh [[%1]] [[' + thetag + ']]>>}}}';
			if(!tag||tag.length==1)out+='\n!! '+thetag;
			i=0;
			hashResults=hx[thetag];
			for(t in hashResults){
				i++;
				if(typeof(hashResults[t])=='object'){
//					out+='\n#' + previewh.format(['Tiddler [['+t+']]' , t]);
					out+='\n#' + previewh.format(['「[['+t+']]」記事' , t]);
					for(s=0;s<hashResults[t].length;s++){
						section=hashResults[t][s];
						if(version.extensions.SectionLinksPlugin)
							out+='\n#*' + previewh.format(['[[' + section + '|'+t+'##'+section+']]' , t+'##'+section]);
						else
//							out+='\n#*' + previewh.format(['Section ' + section , t+'##'+section]);
							out+='\n#*' + previewh.format(['「' + section + '」小節', t+'##'+section]);
					}
				}
			}
		}
		wikify(out,place);
		$('.hashtagSearch a',place).each(noClickThrough);
	}
}


//the previewh macro
config.macros.previewh ={
	
	fullTiddler:true,
	
	//macro handler
	handler: function(place,macroName,params) {

		//needs tiddler or section
		if(!params[0])return;

		//previewh level
		var level = params[0].indexOf('##') < 0 ? 'Tiddler' : 'Section';

		//create previewhPanel, hide and store params
		$(
			createTiddlyElement(place, "div", null, "previewhPanel")
		).css(
			'display' , 'none'
		).attr({
				'refresh' : 'content',
				'tiddler' : params[0],
				'hashtag' : params[1]
		});

		//click handler for previewh box
		$(place).last().click( function(ev){
			//vars...
			//are we on section level?
			var section = level == 'Section',
			//when section previewh(s) are clicked, close parent tiddler previewh ...and vice versa
			close = section ? 'Tiddler' : 'Section',
			//the container in which to close previewhPanels
			closeIn,
			//the event
			e = ev || window.event,
			//the clicked previewh box
			el = $(this),
			//the previewhPanel inside
			panel = el.find('.previewhPanel'),
			//whether alt key was pressed
			alt = e.altKey,
			//whether to open and close previewhs in the whole tiddler ad not just the .hashtagSearch wrapper
			full = config.macros.previewh.fullTiddler
			//the tiddler or section to be previewhed
			tid = el.attr('tiddler'),
			//the hashtag to be highlighted
			hashtag = panel.attr('hashtag'),
			//whether the clicked previewhPanel is open 
 			isOpen = panel.css('display') != "none";

			//select panel(s) depending on alt-key
			panel = alt ? $('.previewh' + level, (full ? $(el).parentsUntil(".tiddler"):el.parent().parent())).find('.previewhPanel') : panel;
			//empty and hide panel(s) and remove open marker from outer previewh
			panel.empty().hide().parent().removeClass('previewh' + level + 'Open');

			//container in which previewhPanels are to be closed depending on alt key and whether this is a section or tiddler previewh
			closeIn = alt ? el.parentsUntil(full ? '.tiddler' : '.hashtagSearch') : (section ? el.parent().parent().parent() : el.next());
			//remove class for open previewhPanel at previewh box and close previewhPanels
			$('.previewhPanel', $('.previewh' + close + 'Open', closeIn).removeClass('previewh' + close + 'Open')).css('display', 'none');

			//when previewh was closed and now is to be shown
			if(!isOpen){
				//all panels
				panel.each(function(i){
					//vars...
					//get previewhPanel
					var pp = $(this),
					//pass down hashtag
					ht = hashtag,
					//get tiddler
					tid = pp.attr('tiddler'),
					//get tiddler text
					text = store.getTiddlerText(tid);
					//mark previewh as open
					pp.parent().addClass('previewh' + level + 'Open');
					//if text found -> wikify into previewhPanel
					if (text) wikify(text,pp[0],null,store.getTiddler(tid));
					//for all links -> prevent firing the click event at the outer previewh when clicked
					$('a',pp).each(noClickThrough);
					//for all hashtags inside the previewhPanel
					$('.hashtag',pp).each(function(i){
						//vars...
						//get element
						var el = $(this),
						//get hashtag
						h = el.attr('hashtag');
						//if hashtag is the one to be highlighted (singular or plural) -> highlight otherwise 'dimlight'
						el.addClass(h == ht || h + 's' == ht ? 'highlight' : 'dimlight');
					});
					//toggle panel
					pp.css('display', (isOpen? 'none' : 'block' ));
				});
			}
			//if single panel openend or closed -> scroll to the previewh box
			if(panel.length < 2) ensureVisible(panel.parent()[0]);
			
		//add classes to previewh
		}).addClass('previewh previewh' + level);
	}
}

//prevent firing event attached to outer wrappers
function noClickThrough(i,el){
	//wrap the element and give it a click function
	$(this).wrap('<span />').click(function(ev){
		//prevent the event from bubbling
		var e=ev||window.event;
		e.cancelBubble;
		if(e.stopPropagation)e.stopPropagation();
	})
}

//global function to render hashtag
function createHashTag(place, tag, hashtag, title) {
	//the tag is one of a prefix plus a name.... indexed lowercase
//	var t=(tag+hashtag).toLowerCase(),
	var t=(tag+hashtag),
	ti=title?title:t;
	
	h=createTiddlyButton(
		place,
		ti,
		'display search results for: '+ti,
		function(e){
//			var title="Search results for %0...".format([ti]);
			var title="「%0」的搜尋結果".format([ti]);
			if(store.getTiddler(t))
				story.displayTiddler(this,t);
			else {
				config.shadowTiddlers[title] ='<<hashtag [['+ t+']]>>';
				story.displayTiddler(this,title);
			}
			return false;
		},
		config.macros.hashtag.css
	);
	h.setAttribute('hashtag',t);
	return h;
}

//formatter for #tag
config.formatters.push(
{
	name: 'hashTag',
	match: config.textPrimitives.unWikiLink + '?(?:' + config.textPrimitives.hashes + ')' + config.textPrimitives.anyLetterStrictPlus + '+.?',
	lookaheadRegExp: new RegExp(config.textPrimitives.unWikiLink + "?(" + config.textPrimitives.hashes + ")(" + config.textPrimitives.hashtag + ")", "mg"),
	handler: function(w){
		if (w.matchText.substr(0, 1) === config.textPrimitives.unWikiLink) {
			w.outputText(w.output, w.matchStart + 1, w.nextMatch);
			return;
		}
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if (lookaheadMatch && lookaheadMatch.index === w.matchStart) {
			createHashTag(w.output, lookaheadMatch[1],lookaheadMatch[2]);
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
}
,
//formatter for ::category:tag::
{
	name: 'itag',
	match: '\\:\\:(?:' + config.textPrimitives.anyLetter + '+?):{1,1}(?:' + config.textPrimitives.anyLetter + '+?)\\:\\:',
	lookaheadRegExp: new RegExp('\\:\\:(' + config.textPrimitives.anyLetter + '+?):{1,1}(' + config.textPrimitives.anyLetter + '+?)\\:\\:','mg'),
	handler: function(w){
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var cat = lookaheadMatch[1],
			symbol = lookaheadMatch[2];
			e = createHashTag(w.output, cat, symbol, cat + ' ' + symbol); 
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
}
);

config.shadowTiddlers.StyleSheetHashTags ='/*{{{*/\n'+
	'.hashtag{font-size:1.2em;color:#339;padding:0 2px;}\n'+
	'.hashtag:hover{color:#22A;background:transparent;text-decoration:underline;}\n'+
	'.previewh{display:block;padding:5px;cursor:pointer;}\n'+
	'.previewh:hover{background-color:#cdf;}\n'+
	'.previewhTiddlerOpen, .previewhSectionOpen{background-color:#cdf;}\n'+
	'.previewhPanel{display:block;background:#eef;padding:10px;}\n'+
	'dt .previewhPanel{font-weight:normal;}\n'+
	'.dimlight {background-color:#f6f6f6;}\n'+
	'/*}}}*/';
store.addNotification("StyleSheetHashTags", refreshStyles);
}(jQuery));
//}}}
去過福隆玩或搭過火車經過那邊的人,多少都知道那邊有家有名的「福隆鄉野便當」。經典的 50 元便當~~(當然現在隨物價漲了)~~,紙盒中裝滿永遠如一的高麗菜、酸菜、菜脯、滷蛋、瘦肉、五花肉、香腸、豆乾還有滿滿熱熱的白米飯。很多人可能會覺得普通、不怎麼樣,但這些菜色卻非常非常合我的胃口:簡單、道地、鮮甜、多樣、和諧。沒有油膩的大魚大肉以及重口味的臺式便當菜,但卻營養豐富、新鮮美味。

不過,其實我並不是先去吃過福隆的便當才愛上它的,其實我卻是在幾年前宅在深坑家裡為論文奮鬥時,有一天中午出外覓食時開始發現深坑草地尾有著這家又便宜又簡單美味的便當店,然後才知道福隆有這家店的。有趣的是,後來去平溪、石碇還是瑞芳之類的地方記得也有看到分店時,當時我心裡還打趣說「該不會是沿著 106 縣道發展過來吧。」這家便當店我當時甚至常覺得是天天吃也不膩呢!

想不到,這樣子一、兩年後,有天中午再出去,卻驚覺便當店收了,變成一家玻璃工廠;既成事實留也留不住,連他們哪天走的都不曉得,我只好再去遷就那些不是那麼喜歡吃的快餐,甚至是便利商店的食物,令人好生鬱悶。是生意不夠好嗎?價廉物美的便當,之前客人也不算少啊。還是因為備料太麻煩,或是人力不足、成本上升呢?但深坑的店租應該很不高了吧。這一切的納悶,都只能逐漸埋入心底成為遺憾。

福隆那邊的便當店後來我也去吃過,都是一模一樣的好味道。開始上班後,對公司附近古亭站週邊的午餐也是很不滿意,不死心之下就好奇大臺北地區哪邊還有鄉野便當的分店,於是上網搜尋,發現除了福隆、汐止,就剩下中和了。「明明就這麼好賣的便當,為什麼不多開幾家分店呀~中和雖然是在臺北盆地中,但也不在我的生活圈內,不是常常會想騎十幾分鐘去的地方,為什麼不開家近一點的分店我才好常去吃啊~」我也只能搥胸頓足了。

不過,昨天正常時間下班,晚上教會沒事,想著晚餐要吃哪時,終於還是決定騎去中和一次。下班時間下中正橋後的永和路當然都是塞的,好不容易穿過重圍,到了中和路上的店家。到的時候看到親切年輕的老闆剛好在煮新的白飯,坐下等幾分鐘後,就終於拿到便當了~~~(漲成 60 塊一個了)~~底部是會燙手的呢!
[img[https://lh5.googleusercontent.com/-Dv1YbJp42FA/Ts4sTY6pHjI/AAAAAAAABsw/C1yM7WtYtTs/s288/IMG_20111124_193451.jpg]]

打開:
[img[https://lh6.googleusercontent.com/-pVxOoRDs3w8/Ts4sfbwe5lI/AAAAAAAABs4/-b76DQONZq4/s288/IMG_20111124_193513.jpg]]
哦哦哦哦哦~<<大眼>> 懷念的瘦肉和五花肉還有豆干,我來了!

啊~好鮮甜的高麗菜啊;酸菜也是他們家自製的,口味甜、鹹、酸皆適中。
[img[https://lh3.googleusercontent.com/-f1W40DYyN_8/Ts4tRFAsvsI/AAAAAAAABtA/ZY_Q1lwGbgs/s288/IMG_20111124_194006.jpg]]

嗯~其實這麼一個飯盒的份量對男生來說是剛剛好而已,食量大的男生吃兩個也不為過(怪不得小高會不喜歡它……呵呵呵)。太久沒吃到了,當我確認這家的風味一直沒有改變以後,馬上就決定等下臨走前要再外帶一個,當作今天的午餐!

臨走時也和老闆聊到以前是很喜歡深坑那家店,可惜收了;這才解開了多年的疑惑,原來他們的分店都是家族兄弟姐妹開的,所以怪不得「分店有限」啊 <<XD>> 誰要搬家了或去哪了,哪邊的店就收了,改去別處開,所以現在大臺北除貢寮福隆外仍是中和、石牌、板橋、汐止四家的格局。不過,就沒有別人想要加盟或拜師開店嗎?真的很好吃啊 <<XD>> 會不好賺嗎?

呵,下次再吃到,又不知道是何時了。(上次是 2009 年成真教會福隆蘭陽火車鐵馬行才有吃到哩)
*臺北文山駕訓班(辛亥路),第一天全電化教學。
*之前每天都很滿,沒有時間去做體檢,拖到今天才能去,也因此今天第一天基礎教學的部分就選了晚上下班的時段。下班後衝去體檢(興隆路的心悅診所動作真快啊,讚!),然後就可以從容去駕訓班報到。
!心得感想
*路權、禮讓,還有不要輕易打遠光燈妨害對向來車視線的觀念,在這第一課就教了,但這麼多人輕易就當作馬耳東風,變成路上最讓我詬病的事情。
*這家駕訓班不錯,除了交通部的制式影片外,還會由自己的教練~~(這年頭流行「素人」<<:p>>)~~錄「五油三水」的基本保養和說明。
*離開時看著夜深人靜的停車場,期待後天開始碰車啊!
今天學路旁停車,可說是前兩天「慢速前進/後退」和「倒車入庫」的延伸,今天教練更早就看我 okay、自己先去休息了,放心地放我一個人反覆練習,最後是我自己看下課時間到自己下車的!<<XD>>

反正核心都是「慢速前進/後退」以及「抓住關鍵點」,規規矩矩照教練教的每個細節做,做得精準的話就可以停得好,今天也 okay 啦!<<;)>> 所以不需要記太多了!步驟簡記為
#慢速倒退,往右打一圈半→回正→往左打一圈半,就會進車位
#慢速前進,回正→往右打一圈半→往右打一圈半,就會回到原出發點
今天的課目是環繞考場,內容包括:
*直線加速
*變換車道、打方向燈
*熟悉考試流程
*轉彎
*遇平交道、人行道、交通號誌時的停止與起動
*上、下坡
反正有學過車、考過照的人都知道就是全套。不過還蠻感謝 神的,雖然都是第一次做,不過在教練的引導下大概都能順利完成。

明天應該也會繼續吧!明天大概就要學加速換到三檔了,希望也能順利。
<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<title>TiddlyWeb Commander</title>
	<link rel="stylesheet" href="layout.css">
	<link rel="stylesheet" href="main.css">
	<link rel="stylesheet" href="widgets.css">
	<!--[if lte IE 8]>
	<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
</head>

<body>
	<header class="pane">
		<h1>TiddlyWeb Commander</h1>
	</header>

	<nav class="pane"></nav>

	<section class="pane">
		<a href="javascript:;" id="btnFullscreen" class="button">fullscreen</a>
		<a href="javascript:;" id="btnSave" class="button">save</a>
		<article></article>
	</section>

	<footer class="pane">
		<p class="status">
			<span class="host"></span>
			<span class="username"></span>
		</p>
		<p class="notification"></p>
	</footer>

	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
	<script>
		// use local jQuery if CDN is not available
		if(!window.jQuery) {
			document.write('<script src="jquery.js"><\/script>');
		}
		// request enhanced privileges on file URIs
		if(window.location.protocol == "file:") {
			document.write('<script src="sudo.js"><\/script>');
		}
		// optionally activate dev mode
		if(document.location.hash.indexOf("devmode:true") != -1) {
			document.write('<script src="dev.js"><\/script>');
		}
	</script>
	<script src="jquery-json.js"></script>
	<script src="chrjs.js"></script>
	<script src="chrjs.ui.js"></script>
	<script src="main.js"></script>
</body>

</html>
今天是九點多韓文班下課後再趕去學車的,這四週二、五都會這樣。

今天練右後轉彎倒車入庫,把昨天練的慢速前進後退拿來加上方向盤轉向、回正唷!
#排倒檔,放手剎、腳剎,輕輕緩放離合器讓車慢慢後退
#''退到右車窗後緣與標桿對齊時剎車''
#方向盤向右打一圈半
#繼續輕放離合器控制慢慢後退,一邊觀察右後照鏡避免壓線
#右邊差不多了就看左後照鏡,避免壓線,並且當車身與車庫左邊線平行時剎車
#方向盤回正一圈半
#繼續慢慢後退,直到左邊的角椎筒和左手對齊時剎車
這樣就入庫成功了,順利的話左邊右邊都不會壓線,而且車子也進得來。但是,我被教練唸最多次的就是第 2 步開始準備轉向的點,常常太晚完全剎停,導致入庫時左邊最後多半會壓線。教練就一直唸「知道問題的話要去修正啊」,我知道啊,只是離合器的操縱還不熟,要踩的時候已經來不及了嘛 <<XD>>

後半部原路前進出庫:
#緩緩往前行駛
#到方向盤與右車門把手及窗外標桿對齊時剎停
#方向盤向右打一圈半
#繼續緩緩前進,到擋風玻璃左邊三分之一左雨刷片盡頭與車道末端的白箭頭對齊時,剎停
#方向盤回正一圈半
#繼續緩緩前進,直到車身遮住白箭頭為止
前進真的比後退容易多了,後退如果錯過該轉的點,就會進得很醜 <<:s>>

感覺今天在掌握前進、後退的操控上,比昨天順暢多了,也不像昨天熄火或磨齒輪那麼多次了 <<XD>> 後來教練也放我自己練,他先休息去了(哇哩咧)。也好!多練了十分鐘才去公司,雖然有時還是會錯過時機以致倒得不理想,不過離合器和剎車的踩放已經熟練多了,車子的動作也比較俐落,不會走走頓頓或突然剎停了。短短幾十分鐘練起來也蠻開心的,騎車離開的路上催油門起步時左腳還會不自覺要往下踩(離合器?!),哈哈哈。

有晨禱果然比較安心一點,感謝 神!
/%
|Name|QuickEdit_convert|
|Source|http://www.TiddlyTools.com/#QuickEdit_convert|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - convert between comma/tab-separated and TW table format|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="convert between comma/tab-separated and TW table format"
onclick="var e=config.quickEdit.getField(this);
	if (e) e.focus(); var txt=config.quickEdit.getSelection(e);
	if (txt.indexOf(',')+txt.indexOf('\t')+txt.indexOf('|')==-3) {
		alert('Please select text containing tabs, commas, or TiddlyWiki table syntax.');
		return false;
	}
	var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a converter...','');
	if (txt.indexOf(',')!=-1) {
		s.options[s.length]=new Option('commas -> table','commasToTable');
		s.options[s.length]=new Option('commas -> tabs','commasToTabs');
	}
	if (txt.indexOf('\t')!=-1) {
		s.options[s.length]=new Option('tabs -> table','tabsToTable');
		s.options[s.length]=new Option('tabs -> commas','tabsToCommas');
	}
	if (txt.indexOf('|')!=-1) {
		s.options[s.length]=new Option('table -> tabs','tableToTabs');
		s.options[s.length]=new Option('table -> commas','tableToCommas');
	}
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
	        var e=config.quickEdit.getField(this.button); if (!e) return false;
		e.focus(); var txt=config.quickEdit.getSelection(e);
		switch(this.value) {
			case 'tabsToTable':
				txt=txt.replace(/\t/g,'|').replace(/^|$/g,'|');
				txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,'');
				break;
			case 'tableToTabs':
				txt=txt.replace(/\t/g,' ').replace(/\|/g,'\t');
				txt=txt.replace(/^\t/g,'').replace(/\t$/g,'');
				txt=txt.replace(/\n\t/g,'\n').replace(/\t\n/g,'\n');
				break;
			case 'commasToTable':
				txt=txt.replace(/,/g,'|').replace(/^|$/g,'|');
				txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,''); 
				break;
			case 'tableToCommas':
				txt=txt.replace(/,/g,' ').replace(/\|/g,',');
				txt=txt.replace(/^,/g,'').replace(/,$/g,''); 
				txt=txt.replace(/\n,/g,'\n').replace(/,\n/g,'\n'); 
				break;
			case 'tabsToCommas':
				txt=txt.replace(/\t/g,',');
				break;
			case 'commasToTabs':
				txt=txt.replace(/,/g,'\t');
				break;
		}
		replaceSelection(e,txt);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>convert</a></html>

<!--{{{-->
<div class='toolbar'>
	<span macro='newHere label:"(+子記事"'></span>
	<span macro='tiddler ChildFieldsEditor'></span>
	<span macro='toolbar [[ToolbarCommands::CollapsedToolbar]] icons:yes height:16 width:16 more:popup'></span>
</div>
<div class='heading'>
	<span class='spaceSiteIcon'
		macro='tiddlerOrigin label:no spaceLink:yes height:48 width:48 preserveAspectRatio:yes'>
	</span>
	<span class="titleBar">
		<div class='title' style='font-size: 24px;'>
			<span macro='view title text'></span>
			<span macro='miniTag'></span>
			<span macro='toolbar [[ToolbarCommands::CollapsedTitle]]' style='font-size: 16px;'></span>
		</div>
	</span>
	<span class='followPlaceHolder' macro='followTiddlers'></span>
	<span class='modifierIcon'
		macro='view modifier SiteIcon label:no spaceLink:yes height:48 width:48 preserveAspectRatio:yes'>
	</span>
	<div class='tagClear'></div>
</div>
<!--}}}-->
*好多家譜人名,看得好頭昏 <<XD>> -- 20110219
就是最近的「季節限定」百匯勁辣/勁脆雞腿堡。

反正,麥當勞的牛肉漢堡排根本不可能合格(絕對被 Burger King 打趴)、炸雞比不上肯德雞,米堡也輸摩斯。好在,這個百匯雞腿堡的雞肉炸得還蠻好吃的,然後重點是仿效漢堡王的漢堡,加上了蕃茄、生菜、洋蔥,然後大幅減少了美乃滋,加了還蠻可口的清淡醬料。恭喜啊,麥當勞叔叔。你終於辦到了。
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 40 40"><metadata><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><defs><linearGradient id="lG3826" x1="7.0996" gradientUnits="userSpaceOnUse" y1="18.829" gradientTransform="matrix(1.5858347,0,0,1.8078238,1098.1851,351.13716)" x2="1.5461" y2="-0.95166"><stop stop-color="#000" offset="0"/><stop stop-color="#9c9b99" offset="1"/></linearGradient><linearGradient id="lG3828" y2="372.44" gradientUnits="userSpaceOnUse" y1="375.7" x2="1111.7" x1="1097.7"><stop style="stop-color:#ac9393;" offset="0"/><stop style="stop-color:#c8b7b7;" offset="1"/></linearGradient></defs><g transform="translate(-1080.9375,-357.3329)"><path style="stroke-width:0;stroke-miterlimit:4;fill:url(#lG3826);" d="m1080.9,357.32,39.996-0.0426-0.01,40.008c-15.507-25.519-15.36-25.95-39.988-39.965z"/><path style="stroke-dashoffset:0;stroke:#7aa3be;stroke-linecap:round;stroke-miterlimit:4;stroke-width:1.49999988;fill:#c1e6fd;" d="m1091.9,363.55c6.5716-6.4925,16.576-7.3925,23.147-0.90003,6.5717,6.4925,6.5717,17.019,0,23.511-4.4424-8.6113-12.288-15.713-23.147-22.611z"/><path style="stroke-dashoffset:0;stroke:#ce81b0;stroke-linecap:round;stroke-miterlimit:4;stroke-width:1.5;fill:#f4c4e2;" d="m1110.2,367.62c3.217,3.2168,3.217,8.4323,0,11.649-3.8194-4.2357-8.3307-8.1824-11.649-11.649,3.217-3.2168,8.4325-3.2168,11.649-0.00002z"/><path style="stroke-linejoin:bevel;stroke:#000000;stroke-linecap:round;stroke-dasharray:none;stroke-miterlimit:4;stroke-width:0.80000001;fill:url(#lG3828);" d="m1081,357.34c18.79,6.4752,32.53,16.56,39.894,39.892-11.19-17.028-14.878-19.19-27.352-14.96,6.2984-12.098,3.9371-13.19-12.542-24.932z"/></g></svg>

/%
|Name|QuickEdit_macro|
|Source|http://www.TiddlyTools.com/#QuickEdit_macro|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - embed a macro with 'guide text'|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

Note:
Optional 'guideText' can be used to add suggested defaults/placeholders for specific macro parameters.
Add guideText to your own plugin-defined macros using:
	config.macros.macroName.guideText='guide text goes here';

%/<<tiddler {{
	/* define guide text for a few common TW core macros */
	config.macros.edit.guideText='fieldname #rows';
	config.macros.view.guideText='fieldname (link,wikified,date) format';
	config.macros.slider.guideText='cookie TiddlerName label tooltip';
	config.macros.option.guideText='(txtCookieName,chkCookieName)';
	config.macros.tiddler.guideText='TiddlerName with: params...';
	''; /* must return blank to suppress output */ }}>>/%

%/<html><hide linebreaks><a href='javascript:;' class='tiddlyLink' tabindex='-1' 
title='add a macro - \<\<macroName ...\>\>'
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a macro...','');
	var macros=[]; for (var m in config.macros) if (config.macros[m].handler) macros.push(m); macros.sort();
	for (var i=0; i<macros.length; i++) { var m=macros[i];
		var help=config.macros[m].guideText; if (!help) help=''; else help=' '+help;
		s.options[s.length]=new Option(m,m+help);
		s.options[s.length-1].title='\<\<'+m+help+'\>\>';
	}
	s.size=Math.min(s.length,15);
	s.onclick=function(){ if (!this.value.length) return;
		config.quickEdit.setSelection(this.button,'\<\<'+this.value+'\>\>');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>macro</a></html>
/%
|Name|QuickEdit_link|
|Source|http://www.TiddlyTools.com/#QuickEdit_link|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - link to tiddler or external file|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="add a link to a tiddler or external file - [[link text|TiddlerName]]"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';

	var s2=createTiddlyElement(p,'select'); s2.title='filter by tag';
	s2.options[0]=new Option('filter by tag...','');
	s2.options[s2.length]=new Option('[all tiddlers]','');
	var tags=store.getTags();
	for (var t=0; t<tags.length; t++) s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);
	s2.onchange=function(){
		var tag=this.value;
		var tids=tag.length?store.reverseLookup('tags',tag,true):store.reverseLookup('tags','excludeLists');
		var list=this.nextSibling.nextSibling;
		while (list.length) list.options[0]=null;
		var prompt='select a tiddler or file...';
		if (tag.length) prompt='select a tagged tiddler ['+tids.length+' matches]...';
		list.options[0]=new Option(prompt,'');
		if (!tag.length) list.options[list.length]=new Option('[browse for file...]','_file');
		for (var t=0; t<tids.length; t++) {
			list.options[list.length]=new Option(tids[t].title,tids[t].title);
			list.options[list.length-1].title=tids[t].getSubtitle();
		}
		list.size=Math.min(list.length,10);
		list.selectedIndex=0; list.focus();
		this.style.width=list.offsetWidth+'px';
		if (!tag.length) this.selectedIndex=0;
	};
	createTiddlyElement(p,'br');

	var s=createTiddlyElement(p,'select'); s.button=this;
	s.title='select a tiddler or file';
	s.options[0]=new Option('select a tiddler or file...','');
	s.options[s.length]=new Option('[browse for file...]','_file');
	var tids=store.reverseLookup('tags','excludeLists');
	for (var t=0; t<tids.length; t++) {
		s.options[s.length]=new Option(tids[t].title,tids[t].title);
		s.options[s.length-1].title=tids[t].getSubtitle();
	}
	s.size=Math.min(s.length,10);
	s.onclick=function(){ if (!this.value.length) return false;
		var title=this.value; var txt=title;
		if (title=='_file') {
			title=config.quickEdit.promptForFilename('Select a file',
				getLocalPath(document.location.href),'');
			if (!title) { this.selectedIndex=0; this.focus(); return false; }
			var txt=title.substr(title.lastIndexOf('/')+1);
		}
		var txt=prompt('Enter the text to display for this link',txt);
		if (!txt) { this.selectedIndex=0; this.focus(); return false; }
		config.quickEdit.setSelection(this.button,'[['+txt+'|'+title+']]');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s2.style.width=s.offsetWidth+'px';
	s.focus();
	return config.quickEdit.processed(event);"
>link</a></html>

*紐西蘭又淺層地層了!而且這次有死傷!>_<
*比起埃及的從善如流、突尼西亞的和平,利比亞的「示威」原來比想像中嚴重得多,很可能是蘊釀已久的內戰!(不然怎麼雙方這麼快都已各據城市)
你所居住的世界,正在經歷這些變化,臺灣該怎樣趨吉避凶?
!!!!Definitions
{{{
\def\function#1:#2->#3{{{#1} \colon {#2} \to {#3}}}
\def\mapsTo{\mapsto}
\def\map#1->#2{\parentheses{{#1} \mapsTo {#2}}}
}}}

!!!!Notes
{{{\function{f}:{X}->{Y} }}} is intended to denote a function $f$ mapping $X$ into $Y$.  {{{\map{x}->{x^2} }}} denotes a function with the rule {{{x \mapsTo x^2}}}.  One might define a function by:
{{{
Let $\function{f}:{\reals}->{\reals}$ be the map $\map{x}->{x^2}$.
}}}
:Let $\function{f}:{\reals}->{\reals}$ be the map $\map{x}->{x^2}$.
or
{{{
Let $\function{f}:{\reals}->{\reals}$ be such that $x \mapsTo x^2$.
}}}
:Let $\function{f}:{\reals}->{\reals}$ be such that $x \mapsTo x^2$.

!!!!Examples
{{{
\function{f}:{X}->{Y}
\function{h}:{X \cross X}->{X \cross Y}
x \mapsTo x^2
\map{x}->{x^2}
}}}
\[
\function{f}:{X}->{Y}\qquad
\function{h}:{X \cross X}->{X \cross Y}\qquad
x \mapsTo x^2\qquad
\map{x}->{x^2}
\]
----

!!!!Definitions
{{{
\def\compose{\circ}
\def\inverse#1{{{#1}^{-1}}}
\def\restriction#1#2{{{\left. {#1} \right\lvert}_{#2}}}
}}}

!!!!Notes
The standard $\LaTeX$ {{{\restriction}}} symbol can be accessed by {{{\LaTeXrestriction}}}.  The second argument to {{{\restriction}}} is essentially automatically delimited by virtue of being a subscript.

!!!!Examples
{{{
f \compose g
\inverse{f}
\restriction{f}{A}
\restriction{(f \compose g)}{C \intersect D}
}}}
\[
f \compose g\qquad
\inverse{f}\qquad
\restriction{f}{A}\qquad
\restriction{(f \compose g)}{C \intersect D}
\]
----

!!!!Definitions
{{{
\def\image#1#2{{{#2}\of{#1}}}
\def\preimage#1#2{{{#2}^{-1}\of{#1}}}
\def\fiber#1#2{\preimage{\singleton{#1}}{#2}}
}}}

!!!!Notes
{{{\image{A}{f} }}} is intended to read //the image of $A$ under $f$// or //the image of $A$ along $f$//; the others are read similarly.  The first arguments to these macros are all automatically delimited.

!!!!Examples
{{{
\image{A}{f}
\preimage{B}{f}
\fiber{y}{f}
}}}
\[
\image{A}{f}\quad
\preimage{B}{f}\quad
\fiber{y}{f}
\]
----

!!!!Definitions
{{{
\def\identity#1{{\operator{id}_{#1}}}
}}}

!!!!Notes
{{{\id}}} denotes the identity map and the intended usage is, for example, {{{\identity{X} }}}, denoting the identity on $X$.

!!!!Examples
{{{
\identity{X}
}}}
\[
\identity{X}
\]
----
於是,在中斷了一、兩週後,我再次有感動在上班的時候開 RGO Radio 或是讚美專輯來聽……
----
有沒有聽音樂心情差別真大啊!聽到動聽的讚美(嘿嘿我們 RGO Radio 的歌曲可不是一般的讚美詩歌可比唷)心情都飛揚起來了。現在在播的是錄音室現場吉他+沙鈴版的「真愛的果實」!<<:D>> -- 12:22
/***
|''Name''|TiddlySpaceFollowingPlugin|
|''Version''|0.7.1|
|''Description''|Provides a following macro|
|''Author''|Jon Robson|
|''Requires''|TiddlySpaceConfig TiddlySpaceTiddlerIconsPlugin ErrorHandler|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
!Usage
Tag a tiddler with "follow" to express a list of followers.
Using the {{{<<followTiddlers X>>}}}
will reveal the number of tiddlers with name X in the set