La Perla Garden

An oasis of biodiversity, beauty & peace in Manhattan Valley
A learning environment where the garden, the elements & the seasons are the teachers,

Home of a Rainwater Harvest Beautification Project &
a TiddlyWiki Creative Commons learning environment
in climate change and community diversity


is loading ...

Requires Javascript.

This web site is being developed by Information Habitat: Where Information Lives on a TiddlyWiki platform
in partnership with
Climate Change 3.0 and the NGO Committee on Education
Climate Change 3.0 logo of Conference Of NGOs
TiddlyWiki logo

La Perla Garden - an oasis of biodiversity, beauty & peace in Manhattan Valley - A learning environment where the garden, the elements & the seasons are the teachers; home of a Rainwater Harvest Beautification Project
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
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
/*{{{*/
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]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.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]];}

#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 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.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:0em 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 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

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

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

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 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 0em;}
.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 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 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 0em 14em;}

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

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

.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:0em 0.25em; padding:0em 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:0px 3px 0px 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 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

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

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.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 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 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 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' 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' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' 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>
<!--}}}-->
<!--{{{-->
<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>>
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]]
<<importTiddlers>>
The ''60dpingo'' tag is for tiddlers relating to the [[60th Annual DPI/NGO Conference]].

|<<siteMap "un dpi">> |<<siteMap  ngo-dpi>> |

The ''60th Annual DPI/NGO Conference'', organized by an NGO '''Planning Committee''' in partnership with the United Nations Department of Public Information, will be held from September 5-7, 2007 at UN Headquarters in New York on the theme: ''Climate Change: How It Impacts Us All''.  http://www.undpingoconference.org

The ''60th Annual DPI/NGO Conference'' will be the last to be held at UN Headquarters for several years, and this site is being developed with the vision of building a prototype of an online framework  that would facilitate broad-based NGO participation in future Annual DPI/NGO Conferences.
!! Conference participants
Approximately 2,000 representatives of ~NGOs from around the world are expected to participate in the Conference.
!! Conference Agenda
!!!  Plenary & Roundtable Sessions
<<<
!!!! Opening Session
!!!! Climate Change: The Scientific Evidence
!!!! Climate Change: Indigenous Peoples, Culture & Traditional Knowledge
!!!! Water Security & Climate Change
!!!! [[Coping With Climate Change: Best Land Use Practices]]
!!!! The Economics & Politics of Climate Change
!!!! Climate Change: Streamlining the System
!!!! Sustainable Development & the Responsibility to Protect
!!!! Closing Session
<<<
!!!  ~Mid-Day Workshops
In addition to the roundtable sessions, 33 workshops addressing issues relating to the roundtable themes and organized by ~NGOs, will be held between 1:15 and 2:45 pm each day of the conference.
!! See also
* [[Draft DPI/NGO 2007 Declaration on Climate Change]]
* [[NGO Framework for Action on Climate Change]]
* [[Climate Change Summer]]
!! Climate Change Threats - An NGO Framework for Action
The Preparatory Committee of the [[60th Annual DPI/NGO Conference]] (September 5-7, 2007) invites all participants to concur by consensus on September 7th with the Declaration on the reverse of this sheet.

Substantive suggestions for improvement are also invited; but they must be received by 6pm on September 6th and should foster a consensus. Recommendation forms should be placed into the boxes in Conference Rooms 1 and 4, or given to the Drafting Committee members, Mr. Larry Roeder, Dr. William Gellermann and Ms. Moki Kokoris, who will often be in the UN Cafeteria near the windows overlooking the East River. Recommended suggestions MUST BE 25 words or less.

The Drafting Committee's work is supervised by a Senior Review Committee made up of Sister Joan Kirby (outgoing Chairperson of the NGO/DPI Executive Committee), Jeffery Huffines (incoming Chair of the NGO/DPI Executive Committee), and Richard Jordan (Chair of the 60th NGO/DPI Conference)

Members of the NGO/DPI and ECOSOC NGO communities deal with a spectrum of issues that might not normally involve collaboration; but networking will be crucial to dealing with Climate Change, especially as it challenges all of us. The purpose of the Declaration is to provide a framework for action and collaborative networking, a tool to enable us to work together on the threats of climate change, which is essential to serving all of our particular mandates.

The Declaration envisages that over the next 12 months, we will collaborate and report our efforts to the ~Secretary-General, while continuing our collaboration in coping with the threats. The process by which this is to be done will be facilitated by the NGO/DPI Executive Committee. The recommendations that come out of the process do not need to have full consensus support across the entire NGO community; but they do need to be developed in the spirit of collaboration with and among all ~NGOs.
The ''60th Annual DPI/NGO Conference Planning Committee'' was responsible for planning the [[60th Annual DPI/NGO Conference]] and met on a weekly basis - with occasional exceptions - each Thursday at United Nations from February ? 2007 until the conference took place on September 5-7, 2007.
!! ~Co-Chairs 
<<<
[[Juan Carlos Brandt]], Chief, NGO Section, United Nations Department of Public Information
[[Richard Jordan]], 
''6BC Botanical Garden'' - on 6th Street between Avenues B & C in New York's [[Lower East Side]] is a place to enjoy nature without leaving the city and to relax in a setting that a local garden guide called "colorful, complex, and elegantly designed."
+++[6BC Botanical Garden Web site]
{{iframe{''Note'': This is a "framed" page from the ''6BC Botanical Garden'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.6bc.org/}}}
<html><iframe
	src = "http://www.6bc.org/"
	title = ""
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
===

+++[6BC Botanical Garden Slide Show]
<<tiddler "6BC Botanical Garden Slide Show">>
===

+++[6BC Botanical Garden History Slide Show]
<<tiddler "6BC Botanical Garden History Slide Show">>
===
<html>
<div><embed src="http://widget-66.slide.com/widgets/slideticker.swf" type="application/x-shockwave-flash" quality="high" scale="noscale" salign="l" wmode="transparent" flashvars="cy=lt&il=1&channel=504403158288928870&site=widget-66.slide.com" style="width:426px;height:320px" name="flashticker" align="middle"></embed><div style="width:426px;text-align:left;"><a href="http://www.slide.com/pivot?cy=lt&at=un&id=504403158288928870&map=1" target="_blank"><img src="http://widget-66.slide.com/p1/504403158288928870/lt_t046_v000_s0un_f00/images/xslide1.gif" border="0" ismap="ismap" /></a> <a href="http://www.slide.com/pivot?cy=lt&at=un&id=504403158288928870&map=2" target="_blank"><img src="http://widget-66.slide.com/p2/504403158288928870/lt_t046_v000_s0un_f00/images/xslide2.gif" border="0" ismap="ismap" /></a> <a href="http://www.slide.com/pivot?cy=lt&at=un&id=504403158288928870&map=F" target="_blank"><img src="http://widget-66.slide.com/p4/504403158288928870/lt_t046_v000_s0un_f00/images/xslide42.gif" border="0" ismap="ismap" /></a></div></div></html>
<html>
<div><embed src="http://widget-4b.slide.com/widgets/slideticker.swf" type="application/x-shockwave-flash" quality="high" scale="noscale" salign="l" wmode="transparent" flashvars="cy=lt&il=1&channel=504403158288886603&site=widget-4b.slide.com" style="width:600px;height:475px" name="flashticker" align="middle"></embed><div style="width:600px;text-align:left;"><a href="http://www.slide.com/pivot?cy=lt&at=un&id=504403158288886603&map=1" target="_blank"><img src="http://widget-4b.slide.com/p1/504403158288886603/lt_t001_v000_s0un_f00/images/xslide1.gif" border="0" ismap="ismap" /></a> <a href="http://www.slide.com/pivot?cy=lt&at=un&id=504403158288886603&map=2" target="_blank"><img src="http://widget-4b.slide.com/p2/504403158288886603/lt_t001_v000_s0un_f00/images/xslide2.gif" border="0" ismap="ismap" /></a> <a href="http://www.slide.com/pivot?cy=lt&at=un&id=504403158288886603&map=F" target="_blank"><img src="http://widget-4b.slide.com/p4/504403158288886603/lt_t001_v000_s0un_f00/images/xslide42.gif" border="0" ismap="ismap" /></a></div></div>
</html>
The tag ''6bc'' is used for content relating to the [[6BC Botanical Garden]], on 6th Street between Avenue B & Avenue C in Manhattan's Lower East Side.
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296491502354803601%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
7 photos
A brief and poorly shot 6 1/2 minute flipvideo excerpt from "Conversations with Harold Channer" with Robert Pollard, information ecologist and urban composter, at La Perla Garden. The full, hour-long conversation was broadcast on Manhattan Neighborhood Network]] (MNN}, Channel 34, on Wednesday, April 30 and can also be seen [[here|Conversations with Harold Channer: Robert Pollard]]. [[Joe Friendly]], Executive Producer, [[Truth For A Change]], broadcast daily on MNN from 9:30 to 10:30 am, who videotaped the full conversation has been a major contributor to [[La Perla Garden's compost piles]]. The Flip Video used in this and other brief videos of the garden was made available by [[Dolly Nielsen]], Executive Producer, [[Metro City Media]].
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/KzuK57-3T9g"></param><embed src="http://www.youtube.com/v/KzuK57-3T9g" type="application/x-shockwave-flash" width="425" height="350"></embed></object>
</html>
A brief look around as I prepare to leave La Perla Garden for the day, with a last look at the blossoms on the peach tree and the pink confetti sprinkled over the surrounding bed.
<html>
<object width="425" height="350">
<param name="movie" value="http://www.youtube.com/v/TCJ8BcbvKIo"></param>
<embed src="http://www.youtube.com/v/TCJ8BcbvKIo" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>
</html>
Filmed by [[Robert Pollard]], [[Information Habitat: Where Information Lives]]
Made by Faith Community Participants during the United Nations Climate Change Conference (~COP11 and COP/~MOP1), St. Joseph ’s Oratory, Montreal December 4, 2005
* We hear the call of the Earth.
* We believe that caring for life on Earth is a spiritual commitment.
* People and other species have the right to life unthreatened by human greed and destructiveness.
* Pollution, particularly from the energy-intensive wealthy industrialised countries, is warming the atmosphere. A warmer atmosphere is leading to major climate changes. The poor and vulnerable in the world and future generations will suffer the most.
* We commit ourselves to help reduce the threat of climate change through actions in our own lives, pressure on governments and industries and standing in solidarity with those most affected by climate change.
* We pray for spiritual support in responding to the call of the Earth.
> From [[Protecting Creation: People of faith acting together for climate justice|http://protectingcreation.org/ccdeclaration.htm]]
{{youtube{
|<html><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/NJX7X44NZ8I&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/NJX7X44NZ8I&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></html>| &nbsp; |A walk around La Perla Garden on a grey, misty, warm winter's day, with just a few traces of the recent snow.<br><br>3:10 minutes |
}}}
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296877554882090257%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
8 photos
{{youtube{
|<html><object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/dwiHt-kVF5w&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/dwiHt-kVF5w&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object> </html>|A small bird, whose colour and markings are virtually indistinguishable from the fall leaves flitting on and around a compost pile at La Perla Garden. . <br><br>2:56 minutes |
}}}
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5291710233322880001%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
13 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5295038090557360177%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
6 photos
<html>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/JphGklFcR-k&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/JphGklFcR-k&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</html>
1:55 minutes
{{youtube{
|<html><object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/C80iKLVsAXM&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/C80iKLVsAXM&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object> </html>|A walk in heavy rain through La Perla Garden on old and new brick paths  <br><br>6:41 minutes |
}}}
<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/aLGRr_kYJTg"></param><embed src="http://www.youtube.com/v/aLGRr_kYJTg" type="application/x-shockwave-flash" width="425" height="350"></embed></object>
</html>
<html>
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/6pBxQIfV9J4&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/6pBxQIfV9J4&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>
</html>
<html>
<object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/k90TWRqJJn4"> </param> <embed src="http://www.youtube.com/v/k90TWRqJJn4" type="application/x-shockwave-flash" width="425" height="350"> </embed> </object>
</html>
<html>
<object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/vysSqzlWO1A"> </param> <embed src="http://www.youtube.com/v/vysSqzlWO1A" type="application/x-shockwave-flash" width="425" height="350"> </embed> </object>
</html>
<html>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/wQtADFY_vL0&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/wQtADFY_vL0&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</html>
4:44 minutes
This web site is based on a TiddlyWiki platform - a unique and brilliant design for a self-contained, [[Creative Commons]] "Wiki". Wiki is a Hawaiian word meaning //swift// or //swiftly//, and TiddlyWiki is the wikiest wiki to date., Unlike most web sites that consist of multiple, linked web pages, all of the content in a TiddlyWiki is contained in a single web page, that contains numerous sub-pages, known as "tiddlers".

A TiddlyWiki page uses simple formatting codes for its tiddlers - similar, but not identical to the codes used in <<wikipedia Wikipedia>> and each tiddler can have one or more "tags" or "key words" that are displayed adjacent to the tiddler. This makes TiddlyWiki the easiest and quickest platform for creating and maintaining a web site.

From a design standpoint, what makes TiddlyWiki unique is that not only can tiddlers contain and siplay text, images, links, etc, but the appearance and format of a TiddlyWiki is defined by "style sheets and "styles" that are themselves contained in tiddlers. In addition, a tiddler can include Javascript - the language that powers TiddlyWiki - that can add very useful features over and above those in the standard TiddlyWiki.

!!Expected Climatic Trigger for the Transition
> Increasing temperatures are leading to accelerated melting of mountain glaciers, a higher snowline, and earlier melting of seasonal snowpack. Very limited warming can thus cause significant changes in the amounts of snow and ice. Widespread melting is already occurring and of the order of one-quarter of the global glacier mass (including most glaciers in low latitude mountains) could melt during the 21st century.
!!Expected Environmental Consequences
> Changes in the timing of snowmelt are leading to earlier runoff, changing the temperature and flows of rivers and streams, and, in the summer, causing warmer temperatures and lower flow rates. All of these changes will disrupt aquatic ecosystems, fish, and wildlife.
!!Likely Societal Significance
> Snowmelt is a vital contributor to water resources for many regions around the world, especially for those depending on rivers originating in high mountain regions and for water systems relying on seasonal snowpack to refill reservoirs in spring and summer. Relatively little warming can in some situations cause very large changes in water availability with significant impact on both human health and agricultural productivity.
!!Expected Climatic Trigger for the Transition
> Global warming adds to the rate of sea-level rise by increasing the pace of melting of land ice and thermal expansion of ocean waters. Until the Industrial Revolution, sea level had been roughly constant for a few millennia. During the 20th century, sea level rose almost 0.2 m; over the past decade the rate of rise has been 50% higher. Accelerated deterioration of the Greenland and West Antarctic Ice Sheets could cause a significant further acceleration during the 21st century (see subsequent entries).
!!Expected Environmental Consequences
> An accelerating rate of sea-level rise will inundate important coastal wetlands that are breeding grounds for both aquatic life and birds of many types. The landward push of ocean waters will make coastal estuaries more saline, altering the delicate balances upon which much shell and fish life depends. Higher sea level will make storm surges more damaging and increase coastal erosion rates.
!!Likely Societal Significance
> Many cities, communities, and important urban and transportation infrastructure are built right along the coast, often not far above sea level. Accelerating rates of sea-level rise, especially in areas where coasts are subsiding or are very flat, will pose very serious problems, requiring increasing levels of protection in the near term and very costly retreat and relocation in the long term. Already some communities built on indefensible barrier islands are being forced to move, at great expense.
This web site has been made possible thanks to a set of powerful software tools and languages that serve a wide variety of aspects of the task of gathering, organizing and disseminating information and documents relating to climate change, sustainable development and information and communications technology.

The software that has contributed to site can be separated into several categories the following is a partial list:
!! TiddlyWikiPerfect
* TiddlyWiki
* [[Cascading Style Sheets]]
* [[Plugin Macros]]
* [[HyperText Markup Language]]
!! Database
* [[DataPerfect]] - Brilliant relational database software (companion of the legendary ~WordPerfect for DOS) that has served as the principal database engine - ''Free''. Use
!!Word processing
* ''~WordPerfect 5.1+'' - Still unsurpassed as a word processor in its power and elegance
** ''WP Program Editor 3.1'' - versatile DOS editor for text and for ~WordPerfect macros - ''Free''
** ''Corel ~WordPerfect'' - 
** ''Corel ~WordPerfect X3'' - Converts pdf files to ~WordPerfect format - Free 30 day evaluation
* ''Notepad'' - versatile program, mostly used as a bridge between DOS and Windows documents and for simple text editing
!! Wiki software & sites
* ''TiddlyWiki'' -
** ~TiddlyWiki plugins
* ''Wikipedia''
* ''The Wealth of Networks Wiki notes''
!! Web browsers
* ''~FireFox'' - Recommended web browser - ''Open Source''
** ''~FireFox extensions''
!! Search tools
* ''Google''
** Personalized search
** Cooperative Search Engine
** ''Google News''
** ''Google Groups''
** ''Google Video''
** ''GMail''
** ''~YouTube''
!! PDF Tools
* ''Adobe Acrobat Reader'' - Free reader for pdf files
** ''Adobe Acrobat Professional'' - Free 30 day evaluation
** PrimoPDF'' - Free printer driver for creating pdf files
* ''pdf995 Suite'' - pdf printer driver 
** ''ABBYY Fine Reader'' - Optical Character Recognition with support for pdf files - Free 30 day evaluation
** ''ABBYY PDF Transformer'' - Converts pdf files to Rich Text Format, HTML, etc.
* ''WS_FTP Limited Edition''
!! Graphics software
* ''Graphics Workstation Professional''
** ''Camera Screen Capture''
* ''Adobe Photoshop''
!! Social Bookmarking
* ''Blue Dot''
** ''del.icio.us''
!! Utility software
* ''Total Commander''
* ''Norton Utilities''
* ''System Mechanic''
* ''~SpyBot''
<<tiddler "Search Box">>
<<jump>><<renameButton 'jump to an open tiddler'>>
<<closeAll>><<renameButton 'close all tiddlers'>>
<<permaview>>
<<newDocument ask print>><<renameButton 'print open tiddlers'>>
<<newTiddler "New Tiddler" >>
<<newTiddler text:{{store.getTiddlerText("iframe template","")}}>><<renameButton 'new iframe tiddler'>>
<<saveChanges>>
<<option txtUserName>>
[[User Options]] +++
[[Search Options]] -
<<fontSize "font-size:">> -
[[Editing Options]] -
===

[[Tiddler Administration]] +++
[[Recent Tiddlers]] -
[[Main Menu|MainMenu]] -
[[Setup Menu]] -
[[Administrative Menu]] -
[[Template snippets]] -
[[Basic Tiddler Lists]] -
[[Formatting Tiddlers]] +++
[[Formatting Text]] --
[[iframe template]] --
[[Headers & Outlines]] --
[[Tiddly Links]] --
[[Tables]] --
[[Images]] --
===

[[Tiddler Lists]] +++
[[Basic Tiddler Lists]] -
[[Alphabetical Tiddlers]] -
[[Recent Tiddlers]] -
[[Tiddler Timelines]] +++
[[Tiddler Timeline]] -
[[Reverse Timeline]] -
[[Event Timeline]] -
===

[[Shadow Tiddlers]] -
[[Missing Tiddlers]] -
[[Imported Tiddlers]] -
[[Included TiddlyWikis]] -
===

[[Menus]] +++
[[Main Menu|MainMenu]] -
[[Administrative Menu]] -
[[Hover Menu|HoverMenu]] -
[[Setup Menu]] -
===

[[Default Tiddlers|DefaultTiddlers]] -
[[Import Tiddlers]] -
[[Plugin Macros]] -
[[Templates & Stylesheets]] +++
[[PageTemplate]] -
[[ViewTemplate]] -
[[EditTemplate]] -
[[StyleSheet]] -
[[MainMenuStyles]] -
[[TagglyTaggingStyles]] -
[[Colour Palette]] -
===

===

{{center{
[img[http://www.climatechange3.net/cc3-logo-75x75.png][Climate Change 3.0]]
[img[http://www.ngo-framework.net/congo-74x54.png][Conference Of NGOs]]
[img[http://www.climatechange3.net/udhr60-beacon-64x64.png][udhr@60+]]
| <<tiddler "Menu Widgets">>|
[img[http://www.climatechange3.net/tiddlywiki-logo-100x51.jpg][TiddlyWiki]]
<<version>>
[img[http://i.creativecommons.org/l/by-nc-sa/3.0/us/88x31.png][Creative Commons Attribution Non-Commercial Share-Alike Licence]]
}}}
|>|>|>|<<search>> |
|>|>| look for in |>|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles |  text  | tags | hold |

|[[Site Maps]]|
|@@[[About this web site]]@@ +++ [[TiddlyWikiPerfect]] -<br>[[TiddlyWikiPerfect Sites]] -<br>TiddlyWiki -<br>DataPerfect -<br>[[Tiddlers]] - ===||
|[[User Options]] +++ [[Search Options]] -<br><<fontSize "font-size:">> -<br>[[Editing Options]] - ===|
|<<jump>><<renameButton 'jump to an open tiddler'>>|
|<<closeAll>><<renameButton 'close all tiddlers'>>|
|<<permaview>>|
|<<newTiddler "New Tiddler" >>|
|<<saveChanges>>|
| <<option txtUserName>>|
|[[Tiddler Administration]] +++ [[Main Menu|MainMenu]] -<br>[[Setup Menu]] -<br>[[Template snippets]] -<br>[[Basic Tiddler Lists]] -<br>[[Formatting Tiddlers]] +++ [[Formatting Text]] -<br>[[iframe template]] -<br>[[Headers & Outlines]] -<br>[[Tiddly Links]] - <br>[[Tables]] -<br>[[Images]] - === <br>[[Tiddler Lists]] +++ [[Basic Tiddler Lists]] -<br>[[Alphabetical Tiddlers]] -<br>[[Recent Tiddlers]] -<br>[[Tiddler Timelines]] +++ [[Tiddler Timeline]] -<br>[[Reverse Timeline]] -<br>[[Event Timeline]] - === <br>[[Shadow Tiddlers]] -<br>[[Missing Tiddlers]] -<br>[[Imported Tiddlers]] -<br>[[Included TiddlyWikis]] - === <br>[[Menus]] +++ [[Main Menu|MainMenu]] -<br>[[Administrative Menu]] -<br>[[Hover Menu|HoverMenu]] -<br>[[Setup Menu]] -<br>[[DataPerfect Menus]] -<br>[[Browser Menus]] -<br>[[Building Menus]] -<br>[[Desktop Menus]] - === <br>[[Default Tiddlers|DefaultTiddlers]] -<br>[[Import Tiddlers]] -<br> [[Tagging]] +++ [[Tiddler Tags]] -<br>[[IntelliTagger]] -<br>[[Toggle Tags]] -<br>[[Site Maps]] -<br>[[Tag Adder]] -<br>[[TagglyTagging]] -<br>[[Monkey Tagger]] - === -<br>[[Plugin Macros]] -<br> [[Templates & Stylesheets]] +++ PageTemplate -<br>ViewTemplate -<br>EditTemplate -<br>StyleSheetLayout -<br>StyleSheetColors -<br>[[MainMenuStyles]] -<br>[[TagglyTaggingStyles]] -<br>[[View ColorPalette]] - <br>[[iframe template]] - ===  ===|
|<html><a href="http://bluedot.us/Authoring.aspx" onclick="{var w=window;w.l=w.location;w.SdP='';w.bU=(w.l.protocol=='https:'?'https://'+w.SdP:'http://')+'bluedot.us';w.eUC=encodeURIComponent;function fBkF(){w.l.href=w.bU+'/Authoring.aspx?u='+w.eUC(w.l.href)+'&amp;t='+w.eUC(document.title);}w.gT=w.setTimeout(fBkF,6999);w.d=w.document;w.sT=w.d.body;w.o=w.d.createElement('scri'+'pt');if(typeof w.o!='object')fBkF();w.o.setAttribute('src',w.bU+'/js/Authoring.js');w.o.setAttribute('type','text/javascript');void(w.sT.appendChild(w.o));if(w.event){w.event.returnValue=false;}return false;}" id="BlueDotPartner"><img src="http://bluedot.us/images/partner_79x16_blue.gif" style="border:none"/></a> - <a href="http://del.icio.us/post" onclick="window.open('http://del.icio.us/post?v=4&noui&jump=close&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif"> del.icio.us</a></html> [img[http://www.climate-change-two.net/rss-small.jpg][Site RSS feeds]]&nbsp;[[Site RSS feeds]]|
|[img[http://www.climate-change-two.net/cc2-151x43.jpg][Climate Change 2.0]]|
|[[NGO Committee on Education]]|
|[[Information Habitat: Where Information Lives|Information Habitat: Where Information Lives]]|
|[img[http://www.tiddlywiki.com/favicon.ico]] @@font-size:90%;TiddlyWiki <<version>>@@|
|[img[http://i.creativecommons.org/l/by-nc-sa/3.0/us/88x31.png][Creative Commons Attribution Non-Commercial Share-Alike License]]
[[Creative Commons|Creative Commons Attribution Non-Commercial Share-Alike Licence]]|
|@@ont-size:90%;&copy; [[Copy rights notice]]@@|
|@@color:#ffffff;mmmmmmmmmmmmmmmmm@@|
[[Administrative Menu]] - attached to base of the [[Main Menu|MainMenu]]
<<tiddler "Administrative Menu">>
[[Alice Slater]] is the //New York Director// of the [[Nuclear Age Peace Foundation|http://www.wagingpeace.org/]] and recently joined the [[NGO/DPI Executive Committee]].  She serves on the Global Council of [[Abolition 2000|http://www.abolition2000.org/]], a global network working for a treaty to eliminate nuclear weapons and directs the network’s Sustainable Energy Working Group which produced a model statute for an International Sustainable Energy Agency.  She is a Consultant to the [[Global Policy Forum|http://www.globalpolicy.org]] and serves on the Board of the Lawyer’s Committee for Nuclear Policy and the Executive Committee of the Middle Powers Initiative, working to create pressure on nuclear weapons states for swifter nuclear disarmament.  She is a member of the Advisory Boards of the Nuclear Policy Research Institute and the Global Network Against Weapons and Nuclear Power in Space and serves on the Steering Committee of the Indian Point Safe Energy Coalition.  Ms. Slater has organized numerous conferences, panels, and roundtables at the UN on nuclear and environmental issues and has spoken frequently at meetings and conferences in the US and internationally.  She has written numerous articles and op-eds, and has appeared frequently on local and national media

Email  [[aslater.rcn.com|mailto:aslater.rcn.com]]
<<list all>>
!!Expected Climatic Trigger for the Transition
> Warming and increased evaporation in the tropics enhance the Hadley circulation, which involves upward movement of air at low latitudes and descent over the subtropics, pushing the subtropics and polar jets poleward, tending to warm the mid-latitudes, and shifting fronts and storm tracks.
!!Expected Environmental Consequences
> Ecosystems are generally attuned to the prevailing weather regimes, and shifts in the location of these regimes will lead to shifts in ecosystem locations as the warm edges contract and poleward edges become more conducive to growth. The differing pace of movement will likely cause significant disruption of ecosystems and their important services.
!!Likely Societal Significance
> In regions where weather regimes shift, societal tuning to particular types of conditions will be upset, possibly requiring adjustments to buildings, infrastructure, transportation, health care, and community lifestyle. Globally, the weather and its seasonal pattern in each region will become more like that hundreds of kilometers toward the equator, necessitating a wide range of adjustments.
!!Expected Climatic Trigger for the Transition
> Greater warming of land areas is expected to increase monsoon rains and flooding. By diminishing the amount of solar radiation warming the surface, air pollution could alternatively cause a weakening of the monsoon.
!!Expected Environmental Consequences
> For most subtropical regions, monsoon rainfall provides most of the water and soil moisture needed by agriculture. Significantly heavier rains would make the fields too muddy, whereas significantly less would make the fields too dry.
!!Likely Societal Significance
> Societies in the region are structured based on past experience with the monsoons, so altered conditions would create disruption until adjustments were made. Larger year-to-year fluctuations in intensity would be likely to stress available systems. Worldwide, monsoons provide water for billions of people, and monsoons redirect atmospheric circulation, affecting global weather.
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5079353583314154449%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
/***
|Name|AutoTaggerPlugin|
|Source|http://www.TiddlyTools.com/#AutoTaggerPlugin|
|Documentation|http://www.TiddlyTools.com/#AutoTaggerPluginInfo|
|Version|1.7.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|TiddlyWiki.prototype.saveTiddler|
|Options|##Configuration|
|Description|Tag tiddlers with date, author, etc. and/or scan the tiddler for any tags that are embedded in the content|
~AutoTagger ''automatically generates tag values for all newly created or edited tiddlers''
!!!!!Documentation
> see [[AutoTaggerPluginInfo]]
!!!!!Configuration
<<<
|<<option chkAutoTagAuthor>> add 'created by' author tag //(when a tiddler is first created)//||
|<<option chkAutoTagEditor>> add 'edited by' author tag //(when a tiddler is updated)//||
|<<option chkAutoTagDate>> add 'creation date' tag, using date format:|<<option txtAutoTagFormat>>|
|<<option chkAutoTagModDate>> add 'modification date' tag, using date format:|<<option txtAutoTagModFormat>>|
|<<option chkAutoTagNewTags>> add default tag(s) when creating new tiddlers:|<<option txtAutoTagNewTags>>|
|<<option chkAutoTagDefault>> add default tag(s) when saving tiddlers that are not otherwise tagged:|<<option txtAutoTagDefault>>|
|<<option chkAutoTagTrigger>> scan tiddler content for matching tags when tagged with:|<<option txtAutoTagTrigger>>|
|<<option chkAutoTagAliases>> replace 'aliased' tags using definitions contained in:|<<option txtAutoTagAliases>>|
|borderless|k
<<<
!!!!!Revisions
<<<
2008.03.29 [1.7.1] in displayTiddler(), get title from tiddler object (if needed).<br>Fixes errors caused when calling function passes a tiddler *object* instead of a tiddler *title*
2008.03.27 [1.7.0] added aliasing (using [[AutoTaggerAliases]] definition)
2008.03.11 [*.*.*] plugin size reduction - moved documentation to [[AutoTaggerPluginInfo]]
2007.10.18 [1.6.0] hijack displayTiddler() to add option to use default tags when creating new tiddlers (preloads tag edit field).  Based on requests from RA and DavidWinfield.
| Please see [[AutoTaggerPluginInfo]] for previous revision details |
2005.08.15 [1.0.0] Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.AutoTaggerPlugin= {major: 1, minor: 7, revision: 1, date: new Date(2008,3,29)};

var co=config.options; // shorthand temp variable
if (co.chkAutoTagDate==undefined) co.chkAutoTagDate=false;
if (co.chkAutoTagModDate==undefined) co.chkAutoTagModDate=false;
if (co.chkAutoTagEditor==undefined) co.chkAutoTagEditor=false;
if (co.chkAutoTagAuthor==undefined) co.chkAutoTagAuthor=false;
if (co.chkAutoTagTrigger==undefined) co.chkAutoTagTrigger=false;
if (co.txtAutoTagTrigger==undefined) co.txtAutoTagTrigger="auto";
if (co.chkAutoTagDefault==undefined) co.chkAutoTagDefault=false;
if (co.txtAutoTagDefault==undefined) co.txtAutoTagDefault="untagged";
if (co.txtAutoTagFormat==undefined) co.txtAutoTagFormat="YYYY.0MM.0DD";
if (co.txtAutoTagModFormat==undefined) co.txtAutoTagModFormat="YYYY.0MM.0DD";
if (co.chkAutoTagNewTags==undefined) co.chkAutoTagNewTags=false;
if (co.txtAutoTagNewTags==undefined) co.txtAutoTagNewTags="";
if (co.chkAutoTagAliases==undefined) co.chkAutoTagAliases=true;
if (co.txtAutoTagAliases==undefined) co.txtAutoTagAliases="AutoTaggerAliases";

// hijack displayTiddler()
Story.prototype.autotagger_displayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler=function(srcElement,tiddler,template,animate,unused,customFields,toggle)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
        this.autotagger_displayTiddler.apply(this,arguments);
	if (!config.options.chkAutoTagNewTags) return; // IF add new tags is enabled
	if (!story.isDirty(title)) return; // AND tiddler is being edited
	if (store.tiddlerExists(title)) return; // AND tiddler doesn't exist
	var newtags=config.options.txtAutoTagNewTags.readBracketedList(); // get new tags
	for (var t=0; t<newtags.length; t++)
		story.setTiddlerTag(title,newtags[t],+1); // preload tag edit field
} 

// hijack saveTiddler()
TiddlyWiki.prototype.autotagger_SaveTiddler=TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler=function(title,newTitle,newBody,modifier,modified,tags,fields)
{
	var co=config.options; // shorthand temp variable
	var newTags = [];
	if (tags) newTags = (typeof tags == "string") ? tags.readBracketedList() : tags;
	var txt=store.getTiddlerText(config.options.txtAutoTagAliases,'')
	if (config.options.chkAutoTagAliases && txt.length) {
		// replace tag aliases with one or more other tags
		var list=txt.split('\n');
		var map={};
		for (var i=0; i<list.length; i++)
			map[list[i].split('=')[0]]=list[i].split('=')[1].readBracketedList();
		for (var a in map) if (newTags.contains(a)) {
			newTags.splice(newTags.indexOf(a),1); // remove alias
			for (var i=0; i<map[a].length; i++) // add replacements
				newTags.pushUnique(map[a][i]);
		}
	}
	var now=new Date().formatString(co.txtAutoTagFormat);
	if (co.chkAutoTagDate && (store.getTiddler(title)==undefined))
		if (newTitle!=now) newTags.pushUnique(now); // created date - don't add to journals
	if (co.chkAutoTagAuthor && (store.getTiddler(title)==undefined))
		newTags.pushUnique(co.txtUserName); // creator
	if (co.chkAutoTagEditor && store.getTiddler(title))
		newTags.pushUnique(co.txtUserName); // modifier
	if (co.chkAutoTagModDate && store.getTiddler(title))
		newTags.pushUnique(new Date().formatString(co.txtAutoTagModFormat)); // modified
	var allTags = store.getTags(); // scan content for tags
	if (co.chkAutoTagTrigger && co.txtAutoTagTrigger.length	&& newTags.contains(co.txtAutoTagTrigger))
		for (var t=0; t<allTags.length; t++) {
			if (allTags[t][0]=='systemConfig') continue; // don't add 'systemConfig'
			if ((newBody.indexOf(allTags[t][0])!=-1) || (newTitle.indexOf(allTags[t][0])!=-1))
				newTags.pushUnique(allTags[t][0]); // autotag
		}
	for (var t=0; t<newTags.length; t++)
		newTags[t]=String.encodeTiddlyLink(newTags[t]); // add brackets around tags
	if (!newTags.length && co.chkAutoTagDefault && co.txtAutoTagDefault.length)
		newTags.push(co.txtAutoTagDefault); // untagged - add default tag
	arguments[5]=newTags.join(" ");
	return this.autotagger_SaveTiddler.apply(this,arguments);
}
//}}}
/***
|Name|AutoTaggerPlugin|
|Source|http://www.TiddlyTools.com/#AutoTaggerPlugin|
|Documentation|http://www.TiddlyTools.com/#AutoTaggerPluginInfo|
|Version|1.7.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|documentation for AutoTaggerPlugin|
~AutoTagger ''automatically generates tag values for all newly created or edited tiddlers''
!!!!!Usage
<<<
Whenever you //create a new tiddler//, ~AutoTagger can add various tags for you:
* original author
* creation date
* default tag(s) (pre-loaded into tiddler editor)
* default tag(s) (when saving tiddlers that are not otherwise tagged)
Whenever you //edit an existing tiddler//, ~AutoTagger can add various tags for you:
* most recent author
* modification date
* default tag(s) (when saving tiddlers that are not otherwise tagged)
If you enter ''//auto//'' as a tiddler tag value, ~AutoTagger ''scans the tiddler content'' (including title) for text that matches any existing tags, and ''automatically adds any embedded tags that it finds''.

You can also create a tiddler that defines a set of [[AutoTaggerAliases]] to ''replace a single tag with one or more alternative tags''.  The alias definitions use this format:
{{{
aliastag=tag1 tag2 tag3...
aliastag=tag4 tag5 tag6...
etc.
}}}
Notes:
* After the new tags have been added to the tiddler, they are treated just as if you had entered them by hand and can be edited to make any changes you want.
* As long as the "auto" tag is still present on a tiddler, ~AutoTagger will re-scan that tiddler's content each time it is edited.  If you DO edit the generated tags, you can remove the "auto" tag from the tiddler to prevent it from being re-scanned when you press 'done' to finish editing.  If you have set the "auto" tag on a tiddler, and then add several tags to your document, those tags will ''not'' be automatically added to the tiddler until you actually edit that tiddler and press 'done' to trigger an AutoTagger scan.  The special-purpose ''"systemConfig" tag is never added automatically, even if matched in the tiddler content'', since this tag should be added manually to ensure it is always used appropriately.
*@@display:inline;Normally, aliases are removed and replaced by the indicated alternatives defined in the [[AutoTaggerAliases]] configuration.  To retain an original alias tag (in addition to it's substitutes), include it in it's set of substitutes, like this:
{{{
aliastag=aliasgtag tag1 tag2 tag3...
}}}
@@
*@@display:inline;Alias definitions are processed in the order they occur in [[AutoTaggerAliases]].  If a given alias definition includes another alias that occurs after it in the configuration, the second alias will be replaced when it's definition is processed.
{{{
aliastag=tag1 anotheraliastag tag2...
anotheraliastag=tag3 tag4...
}}}
which results in: {{{tag1 tag2 tag3 tag4}}}
@@
<<<
!!!!!Configuration
<<<
|<<option chkAutoTagAuthor>> add 'created by' author tag //(when a tiddler is first created)//||
|{{{<<option chkAutoTagAuthor>>}}}||
|<<option chkAutoTagEditor>> add 'edited by' author tag //(when a tiddler is updated)//||
|{{{<<option chkAutoTagEditor>>}}}||
|<<option chkAutoTagDate>> add 'creation date' tag, using date format:|<<option txtAutoTagFormat>>|
|{{{<<option chkAutoTagDate>>}}}|{{{<<option txtAutoTagFormat>>}}}|
|<<option chkAutoTagModDate>> add 'modification date' tag, using date format:|<<option txtAutoTagModFormat>>|
|{{{<<option chkAutoTagModDate>>}}}|{{{<<option txtAutoTagModFormat>>}}}|
|<<option chkAutoTagNewTags>> add default tag(s) when creating new tiddlers:|<<option txtAutoTagNewTags>>|
|{{{<<option chkAutoTagNewTags>>}}}|{{{<<option txtAutoTagNewTags>>}}}|
|<<option chkAutoTagDefault>> add default tag(s) when saving tiddlers that are not otherwise tagged:|<<option txtAutoTagDefault>>|
|{{{<<option chkAutoTagDefault>>}}}|{{{<<option txtAutoTagDefault>>}}}|
|<<option chkAutoTagTrigger>> scan tiddler content for matching tags when tagged with:|<<option txtAutoTagTrigger>>|
|{{{<<option chkAutoTagTrigger>>}}}|{{{<<option txtAutoTagTrigger>>}}}|
|<<option chkAutoTagAliases>> replace 'aliased' tags using definitions contained in:|<<option txtAutoTagAliases>>|
|{{{<<option chkAutoTagAliases>>}}}|{{{<<option txtAutoTagAliases>>}}}|
|borderless|k
<<<
!!!!!Revisions
<<<
2008.03.29 [1.7.1] in displayTiddler(), get title from tiddler object (if needed).  Fixes errors caused when calling function passes a tiddler *object* instead of a tiddler *title*
2008.03.27 [1.7.0] added aliasing (using [[AutoTaggerAliases]] definition)
2008.03.11 [*.*.*] plugin size reduction - moved documentation to [[AutoTaggerPluginInfo]]
2007.10.18 [1.6.0] hijack displayTiddler() to add option to use default tags when creating new tiddlers (preloads tag edit field).  Based on requests from RA and DavidWinfield.
2007.06.28 [1.5.1] in hijack of saveChanges(), use apply() to allow additional params (such as "fields") to be correctly passed through to the core
2007.03.14 [1.5.0] added support for tagging tiddlers with modification date
2007.01.20 [1.4.1] don't add create date tag to dated journal tiddlers (based on request from ConalElliot)
2006.12.10 [1.4.0] added option to use default tag value when no tags are specified
2006.08.29 [1.3.3] use newTags.contains() instead of newTags.find() to check for 'auto' tag
2006.06.15 [1.3.2] hijack TiddlyWiki.prototype.saveTiddler instead of store.saveTiddler.  Permits other plugins to also hijack the function (thanks to Simon Baird for finding this!)
2006.05.31 [1.3.1] Re-assemble tags into a space-separated string (use encodeTiddlyLink to add {{{[[...]]}}} as needed) before passing it on to core (or other hijacked function)
2005.10.09 [1.3.0] Added 'edited by' tagging. Combined documentation and code into a single tiddler
2005.08.16 [1.2.0] Added optional scanning for tags in tiddler content (based on suggestion from Jacques Turbé)
2005.08.15 [1.1.0] Added 'created by' tag generation (based on suggestion from Elise Springer). Renamed from DateTag to AutoTagger
2005.08.15 [1.0.0] Initial Release
<<<
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5336232642653868785%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
<<tabs txtMainTab Timeline Timeline TabTimeline Alphabetical 'All tiddlers' TabAll Tags 'All tags' TabTags  Missing 'Missing tiddlers' TabMoreMissing Orphans 'Orphaned tiddlers' TabMoreOrphans Shadowed 'Shadowed tiddlers' TabMoreShadowed>>
{{larger{
''International Composting Awareness Week: Compost to Combat Climate Change! 3-9 May 2009'' +++[*]
> from Australia's International Composting Awareness Week campaign - [[www.compostweek.com.au|http://www.compostweek.com.au]]

===

}}}
* Compost benefits the environment in many ways.
* Composting and the use of compost also have the potential to create significant cost savings for you.
!! Water
* Mulches hold water, reduce leaching loss and improve the drought resistance of plants.
* Compost returns organic matter to the soil which improves soil structure, water infiltration, and water holding capacity of the soil. This has many beneficial implications, including reducing the demand for irrigation water used in intensive agriculture and working towards sustainable yields.
* The application of composted mulches can provide a 30% reduction in irrigation water needs.
* Improved water quality by cost effectively converting liquid and solid wastes (that often pollute waterways) into recycled organic products that reduce the leaching of nutrients into natural water bodies.
* Mulch can reduce water run-off by more than 70%.
!! Global Warming
* Around 90% of greenhouse gas emissions from landfills are a result of decomposing organic material which could be diverted. Composting garden materials and food scraps diverts this organic matter from landfill.
* Composting reduces the quantity of waste going to landfill. Composting can reduce the amount of materials discarded to landfills by up to 50%. If landfilled without treatment, these organic materials will breakdown to release damaging leachates and methane, a potent greenhouse gas.
!! At Home & in the Community
* Approximately half of the waste from an average household can be composted. Starting your own composting system can potentially reduce your household's contribution to landfill by around 50%.
* Compost can be used as a starting mix for your vegetable flowers and seedlings, dug into the soil to prepare your garden for planting, as mulch around your plants or spread over your lawn.
!! Local Sustainability
* Composting reduces the quantity of material being sent to landfill and therefore the impact of that material on local environments.
* Compost can help to make communities suffering from land degradation and water shortages to continue to make a life from the land.
!! Soil
* Compost can contribute to sustainable land management by improving soil quality, assisting plant growth and vegetation establishment, increasing water holding capacity, storing carbon in the soil and reducing the need for chemical fertiliser and pesticide inputs.
* Composting can assist to address the cause of nitrification and salinity.
* Compost can reduce soil erosion by up to 30% through adding structure to the soil and assisting plant growth and vegetation establishment
* Compost slowly releases macro and micro-nutrients for plant growth. This reduces the need for fertiliser, and makes existing fertiliser programs more effective
* Soil enriching composts improve the structure of sandy soils allowing them to retain moisture and nutrients longer; they also provide the nutrients necessary for healthy plant growth and intense colours throughout the growing season.
* Composts encourage nature to work for you. Earthworms and many other beneficial creatures flourish in enriched soils. Their activities help release essential nutrients, which strengthen plants and increase their resistance to disease.

Find out more at [[www.compostweek.com.au|http://www.compostweek.com.au]]
[[Downlood the original pdf file|http://www.compostweek.com.au/benefits_of_compost_2009.pdf]]
/***
|Name|''timeline''|h
|Author|[[Saq Imtiaz]]|
|Version|0.5 bet|
|Description|A replacement for the core timeline macro that offers more features|
|Source|http://lewcid.googlepages.com/lewcid.html#BetterTimelineMacro|
|TW Version|2.x|
***/
/***
!!!Features:
*list tiddlers with only specific tag
*exclude tiddlers with a particular tag
*limit entries to any number of days, for example one week
*specify a start date for the timeline, only tiddlers after that date will be listed.

!!!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.

!!!Syntax:
{{{<<timeline better:true>>}}}
''the param better:true enables the advanced features, without it you will get the old timeline behaviour.''

additonal params:
(use only the ones you want)
{{{<<timeline better:true  onlyTag:Tag1 excludeTag:Tag2 sortBy:modified/created firstDay:YYYYMMDD maxDays:7 maxEntries:30>>}}}

''explanation of syntax:''
onlyTag: only tiddlers with this tag will be listed. Default is to list all tiddlers.
excludeTag: tiddlers with this tag will not be listed.
sortBy: sort tiddlers by date modified or date created. Possible values are modified or created.
firstDay: useful for starting timeline from a specific date. Example: 20060701 for 1st of July, 2006
maxDays: limits timeline to include only tiddlers from the specified number of days. If you use a value of 7 for example, only tiddlers from the last 7 days will be listed.
maxEntries: limit the total number of entries in the timeline.


!!!History:
*28-07-06: ver 0.5 beta, first release

!!!Code
***/
//{{{
// Return the tiddlers as a sorted array
TiddlyWiki.prototype.getTiddlers = function(field,excludeTag,includeTag)
{
          var results = [];
          this.forEachTiddler(function(title,tiddler)
          {
          if(excludeTag == undefined || tiddler.tags.find(excludeTag) == null)
                        if(includeTag == undefined || tiddler.tags.find(includeTag)!=null)
                                      results.push(tiddler);
          });
          if(field)
                   results.sort(function (a,b) {if(a[field] == b[field]) return(0); else return (a[field] < b[field]) ? -1 : +1; });
          return results;
}



//this function by Udo
function getParam(params, name, defaultValue)
{
          if (!params)
          return defaultValue;
          var p = params[0][name];
          return p ? p[0] : defaultValue;
}

window.old_timeline_handler= config.macros.timeline.handler;
config.macros.timeline.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
          var args = paramString.parseParams("list",null,true);
          var betterMode = getParam(args, "better", "false");
          if (betterMode == 'true')
          {
          var sortBy = getParam(args,"sortBy","modified");
          var excludeTag = getParam(args,"excludeTag",undefined);
          var includeTag = getParam(args,"onlyTag",undefined);
          var tiddlers = store.getTiddlers(sortBy,excludeTag,includeTag);
          var firstDayParam = getParam(args,"firstDay",undefined);
          var firstDay = (firstDayParam!=undefined)? firstDayParam: "00010101";
          var lastDay = "";
          var field= sortBy;
          var maxDaysParam = getParam(args,"maxDays",undefined);
          var maxDays = (maxDaysParam!=undefined)? maxDaysParam*24*60*60*1000: (new Date()).getTime() ;
          var maxEntries = getParam(args,"maxEntries",undefined);
          var last = (maxEntries!=undefined) ? tiddlers.length-Math.min(tiddlers.length,parseInt(maxEntries)) : 0;
          for(var t=tiddlers.length-1; t>=last; t--)
                  {
                  var tiddler = tiddlers[t];
                  var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);
                  if ((theDay>=firstDay)&& (tiddler[field].getTime()> (new Date()).getTime() - maxDays))
                     {
                     if(theDay != lastDay)
                               {
                               var theDateList = document.createElement("ul");
                               place.appendChild(theDateList);
                               createTiddlyElement(theDateList,"li",null,"listTitle",tiddler[field].formatString(this.dateFormat));
                               lastDay = theDay;
                               }
                  var theDateListItem = createTiddlyElement(theDateList,"li",null,"listLink",null);
                  theDateListItem.appendChild(createTiddlyLink(place,tiddler.title,true));
                  }
                  }
          }

          else
              {
              window.old_timeline_handler.apply(this,arguments);
              }
}
//}}}
!!Expected Climatic Trigger for the Transition
> An increase in rainfall is projected that, over periods of the order of a century, could cause the transition of 9 million km^^2^^ (3.5 million mi^^2^^) of the Sahara from desert to a green, vegetated landscape
!!Expected Environmental Consequences
> Increased vegetation would decrease the albedo and increase soil moisture and carbon storage. Reduced dust blown out over marine areas would diminish marine biological activity and carbon transfer to the deep ocean.
!!Likely Societal Significance
> In the region, the changes would provide a significantly better opportunity to grow food, although also causing a greater threat of locusts. In the West Indies, an increased likelihood of severe hurricanes.
/***
|Name|BreadcrumbsPlugin|
|Author|Eric Shulman|
|Source|http://www.TiddlyTools.com/#BreadcrumbsPlugin|
|Documentation|http://www.TiddlyTools.com/#BreadcrumbsPluginInfo|
|Version|2.1.0|
|License|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.displayTiddler,TiddlyWiki.prototype.deleteTiddler|
|Options|##Configuration|
|Description|list/jump to tiddlers viewed during this session plus "back" button/macro|
This plugin provides a list of links to all tiddlers opened during the session, creating a "trail of breadcrumbs" from one tiddler to the next, allowing you to quickly navigate to any previously viewed tiddler, or select 'home' to reset the display to the initial set of tiddlers that were open at the start of the session (i.e., when the document was loaded into the browser).
!!!!!Documentation
<<<
see [[BreadcrumbsPluginInfo]]
<<<
!!!!!Configuration
<<<
<<option chkCreateDefaultBreadcrumbs>> automatically create breadcrumbs display (if needed)
<<option chkShowBreadcrumbs>> show/hide breadcrumbs display
<<option chkReorderBreadcrumbs>> re-order breadcrumbs when visiting a previously viewed tiddler
<<option chkBreadcrumbsHideHomeLink>> omit 'Home' link from breadcrumbs display
<<option chkBreadcrumbsSave>> prompt to save breadcrumbs when 'Home' link is pressed
<<option chkShowStartupBreadcrumbs>> show breadcrumbs for 'startup' tiddlers
<<option chkBreadcrumbsReverse>> show breadcrumbs in reverse order (most recent first)
<<option chkBreadcrumbsLimit>> limit breadcrumbs display to {{twochar{<<option txtBreadcrumbsLimit>>}}} items
<<option chkBreadcrumbsLimitOpenTiddlers>> limit open tiddlers to {{twochar{<<option txtBreadcrumbsLimitOpenTiddlers>>}}} items

<<<
!!!!!Revisions
<<<
2009.03.22 [2.1.0] added 'save breadcrumbs to tiddler' feature
| Please see [[BreadcrumbsPluginInfo]] for previous revision details |
2006.02.01 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.BreadcrumbsPlugin= {major: 2, minor: 1, revision: 0, date: new Date("March 2, 2009")};

var co=config.options; // abbreviation

// show/hide display option (default is to SHOW breadcrumbs)
if (co.chkShowBreadcrumbs===undefined) co.chkShowBreadcrumbs=true;

// REORDER breadcrumbs when visiting previously viewed tiddler (default)
if (co.chkReorderBreadcrumbs===undefined) co.chkReorderBreadcrumbs=true;

// create default breadcrumbs display as needed (default is to CREATE)
if (co.chkCreateDefaultBreadcrumbs===undefined) co.chkCreateDefaultBreadcrumbs=true;

// show breadcrumbs for 'startup' tiddlers (default is FALSE = only show crumbs for tiddlers opened after startup)
if (co.chkShowStartupBreadcrumbs===undefined) co.chkShowStartupBreadcrumbs=false;

// show crumbs in reverse order (most recent first)
if (co.chkBreadcrumbsReverse===undefined) co.chkBreadcrumbsReverse=false;

// limit number of crumbs displayed
if (co.chkBreadcrumbsLimit===undefined) co.chkBreadcrumbsLimit=false;
if (co.txtBreadcrumbsLimit===undefined) co.txtBreadcrumbsLimit=5;

// limit number of open tiddlers
if (co.chkBreadcrumbsLimitOpenTiddlers===undefined) co.chkBreadcrumbsLimitOpenTiddlers=false;
if (co.txtBreadcrumbsLimitOpenTiddlers===undefined) co.txtBreadcrumbsLimitOpenTiddlers=3;

// omit home link from breadcrumbs display
if (co.chkBreadcrumbsHideHomeLink===undefined) co.chkBreadcrumbsHideHomeLink=false;

// prompt for 'save crumbs' when 'home' button is pressed
if (co.chkBreadcrumbsSave===undefined) co.chkBreadcrumbsSave=false;

config.macros.breadcrumbs =  {
	crumbs: [], // the list of current breadcrumbs
	askMsg: "Save current breadcrumbs before clearing?\nPress OK to save, or CANCEL to continue without saving.",
	saveMsg: 'Enter the name of a tiddler in which to save the current breadcrumbs',
	saveTitle: 'SavedBreadcrumbs',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var area=createTiddlyElement(place,"span",null,"breadCrumbs",null);
		area.setAttribute("homeSep",params[0]?params[0]:this.homeSeparator); // custom home separator
		area.setAttribute("crumbSep",params[1]?params[1]:this.crumbSeparator); // custom crumb separator
		this.render(area);
	},
	add: function (title) {
		var thisCrumb = title;
		var ind = this.crumbs.indexOf(thisCrumb);
		if(ind === -1)
			this.crumbs.push(thisCrumb);
		else if (config.options.chkReorderBreadcrumbs)
			this.crumbs.push(this.crumbs.splice(ind,1)[0]); // reorder crumbs
		else
			this.crumbs=this.crumbs.slice(0,ind+1); // trim crumbs
		if (config.options.chkBreadcrumbsLimitOpenTiddlers)
			this.limitOpenTiddlers();
		this.refresh();
		return false;
	},
	getAreas: function() {
		var crumbAreas=[];
		// find all DIVs with classname=="breadCrumbs"
		// Note: use try/catch to avoid "Bad NPObject as private data" fatal error  caused when
		// some versions of embedded QuickTime player element is accessed by hasClass() function.
		var all=document.getElementsByTagName("*");
		for (var i=0; i<all.length; i++)
			try{ if (hasClass(all[i],"breadCrumbs")) crumbAreas.push(all[i]); } catch(e) {;}
		// find single DIV w/fixed ID (backward compatibility)
		var byID=document.getElementById("breadCrumbs")
		if (byID && !hasClass(byID,"breadCrumbs")) crumbAreas.push(byID);
		if (!crumbAreas.length && config.options.chkCreateDefaultBreadcrumbs) {
			// no existing crumbs display areas... create one...
			var defaultArea = createTiddlyElement(null,"span",null,"breadCrumbs",null);
		 	defaultArea.style.display= "none";
			var targetArea= document.getElementById("tiddlerDisplay");
		 	targetArea.parentNode.insertBefore(defaultArea,targetArea);
			crumbAreas.push(defaultArea);
		}
		return crumbAreas;
	},
	refresh: function() {
		var crumbAreas=this.getAreas();
		for (var i=0; i<crumbAreas.length; i++) {
			crumbAreas[i].style.display = config.options.chkShowBreadcrumbs?"block":"none";
			removeChildren(crumbAreas[i]);
			this.render(crumbAreas[i]);
		}
	},
	render: function(here) {
		var co=config.options; var out=""
		var homeSep=here.getAttribute("homeSep"); if (!homeSep) homeSep=this.homeSeparator;
		var crumbSep=here.getAttribute("crumbSep"); if (!crumbSep) crumbSep=this.crumbSeparator;
		if (!co.chkBreadcrumbsHideHomeLink) {
			createTiddlyButton(here,"Home",null,this.home,"tiddlyLink tiddlyLinkExisting");
			out+=homeSep;
		}
		for (c=0; c<this.crumbs.length; c++) // remove non-existing tiddlers from crumbs
			if (!store.tiddlerExists(this.crumbs[c]) && !store.isShadowTiddler(this.crumbs[c]))
				this.crumbs.splice(c,1);
		var count=this.crumbs.length;
		if (co.chkBreadcrumbsLimit && co.txtBreadcrumbsLimit<count) count=co.txtBreadcrumbsLimit;
		var list=[];
		for (c=this.crumbs.length-count; c<this.crumbs.length; c++) list.push('[['+this.crumbs[c]+']]');
		if (co.chkBreadcrumbsReverse) list.reverse();
		out+=list.join(crumbSep);
		wikify(out,here);
	},
	home: function() {
		var cmb=config.macros.breadcrumbs;
		if (config.options.chkBreadcrumbsSave && confirm(cmb.askMsg)) cmb.saveCrumbs();
		story.closeAllTiddlers(); restart();
		cmb.crumbs = []; var crumbAreas=cmb.getAreas();
		for (var i=0; i<crumbAreas.length; i++) crumbAreas[i].style.display = "none";
		return false;
	},
	saveCrumbs: function() {
		var tid=prompt(this.saveMsg,this.saveTitle); if (!tid||!tid.length) return; // cancelled by user
		var t=store.getTiddler(tid);
		if(t && !confirm(config.messages.overwriteWarning.format([tid]))) return;
		var who=config.options.txtUserName;
		var when=new Date();
		var text='[['+this.crumbs.join(']]\n[[')+']]';
		var tags=t?t.tags:[]; tags.pushUnique('story');
		var fields=t?t.fields:{};
		store.saveTiddler(tid,tid,text,who,when,tags,fields);
		story.displayTiddler(null,tid);
		story.refreshTiddler(tid,null,true);
		displayMessage(tid+' has been '+(t?'updated':'created'));
	},
	limitOpenTiddlers: function() {
		var limit=config.options.txtBreadcrumbsLimitOpenTiddlers; if (limit<1) limit=1;
		for (c=this.crumbs.length-1; c>=0; c--) {
			var tid=this.crumbs[c];
			var elem=document.getElementById(story.idPrefix+tid);
			if (elem) { // tiddler is displayed
				if (limit <=0) { // display limit has been reached
					if (elem.getAttribute("dirty")=="true") { // tiddler is being edited
						var msg="'"+tid+"' is currently being edited.\n\n";
						msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
						if (confirm(msg)) { story.saveTiddler(tid); story.closeTiddler(tid); }
					}
					else
						story.closeTiddler(this.crumbs[c]);
				}
				limit--;
			}
		}
	}
};
if (config.macros.breadcrumbs.homeSeparator==undefined) // note: not a cookie
	config.macros.breadcrumbs.homeSeparator=" | ";
if (config.macros.breadcrumbs.crumbSeparator==undefined)  // note: not a cookie
	config.macros.breadcrumbs.crumbSeparator=" > ";

config.commands.previousTiddler = {
	text: 'back',
	tooltip: 'view the previous tiddler',
	hideReadOnly: false,
	dateFormat: 'DDD, MMM DDth YYYY hh:0mm:0ss',
	handler: function(event,src,title) {
		var here=story.findContainingTiddler(src); if (!here) return;
		var crumbs=config.macros.breadcrumbs.crumbs;
		if (crumbs.length>1) {
			var crumb=crumbs[crumbs.length-2];
			story.displayTiddler(here,crumb);
		}
		else
			config.macros.breadcrumbs.home();
		return false;
	}
};

config.macros.previousTiddler= {
	label: 'back',
	prompt: 'view the previous tiddler',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var label=params.shift(); if (!label) label=this.label;
		var prompt=params.shift(); if (!prompt) prompt=this.prompt;
		createTiddlyButton(place,label,prompt,function() {
			var crumbs=config.macros.breadcrumbs.crumbs;
			if (crumbs.length>1) {
				var crumb=crumbs[crumbs.length-2];
				story.displayTiddler(place,crumb);
			}
			else
				config.macros.breadcrumbs.home();
		});
	}
}

// hijack story.displayTiddler() so crumbs can be refreshed when a tiddler is displayed
if (Story.prototype.breadCrumbs_coreDisplayTiddler==undefined)
	Story.prototype.breadCrumbs_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	this.breadCrumbs_coreDisplayTiddler.apply(this,arguments);
	// if not displaying tiddler during document startup, then add it to the breadcrumbs
	// note: 'startingUp' flag is a global, set/reset by the core init() function
	if (!startingUp || config.options.chkShowStartupBreadcrumbs) config.macros.breadcrumbs.add(title);
}

// hijack store.removeTiddler() so crumbs can be refreshed when a tiddler is deleted
if (TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler==undefined)
	TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler=TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler= function(title)
{
	this.breadCrumbs_coreRemoveTiddler.apply(this,arguments);
	config.macros.breadcrumbs.refresh();
}
//}}}
A brief narrative tour of the East side of La Perla Garden, starting with the brick path in front of the compost piles and a temporary wall of recently-dug bricks, then on to the rose bushes, the 9/11 memorial, brambles. ends with daffodils. //3:34 minutes//. This admittedly amateur video was recorded on a [[Flip Video]] made available by [[Dolly Nielsen]], Executive Producer, [[Metro City Media]].

<html>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/_DSO5HRn1oQ"></param><embed src="http://www.youtube.com/v/_DSO5HRn1oQ" type="application/x-shockwave-flash" width="425" height="350"></embed></object>
</html>
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5237824169010036593%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
6 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5238461116278688017%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
10 photos
{{youtube{
|<html><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/_DSO5HRn1oQ&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/_DSO5HRn1oQ&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object> </html>| &nbsp; |A tour of the East side of La Perla Garden, starting with the brick path in front of the compost piles and a temporary wall of recently-dug bricks, then on to the rose bushes, the 9/11 memorial, brambles. ends with daffodils. <br><br>3:35 minutes |
}}}
{{iframe{''Note'': This is a "framed" page from the ''The New York Botanical Garden'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.nybg.org/bgu/compost.html}}}
<html><iframe
	src = "http://www.nybg.org/bgu/compost.html"
	title = "Bronx Green-Up: Composting Education"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5337268777282505089%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
12 photos
@@font-size:90%;''Note'': This is a "framed" page from the ''New York City Open Accessible Space Information System (OASIS) '' web site.
You can view this page in a separate browser tab or window at http://www.oasisnyc.net/gardens/cenycmapsearch.asp@@
<html><iframe
	src = "http://www.oasisnyc.net/gardens/cenycmapsearch.asp"
	title = "CENYC Community Garden Locator"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
{{iframe{''Note'': This is a "framed" page from the ''New York Times'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.nytimes.com/2008/06/29/magazine/29weeds-t.html}}}
<html><iframe
	src = "http://www.nytimes.com/2008/06/29/magazine/29weeds-t.html?ref=magazine&pagewanted=all"
	title = ""
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5205165516694435713%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
Photos by Isobel Lowther, ''Kaleidoscope Experience''
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5335317536010769809%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
8 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5283905391361140273%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
35 photos
{{youtube{
|<html><object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/-AW9maYPcu4&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/-AW9maYPcu4&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object> </html>|A Christmas Day walk around La Perla Garden, in New York's Upper West Side, with snow on the ground. <br><br>4:29 minutes |
}}}
{{iframe{''Note'': This is a "framed" page from the ''City Farmer'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window athttp://homepage.mac.com/cityfarmer/comiclife/}}}
<html><iframe
	src = "http://homepage.mac.com/cityfarmer/comiclife/"
	title = "City Farmer Comics"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "400"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
<<<
"No problem can be solved from the same level of consciousness that created it."
//Albert Einstein// (1879 - 1955) Physicist & Nobel Laureate 
<<<
''Climate Change 2.0'' is being developed from a vision of a collaborative application of ''Web 2.0'' methodologies to the global climate change crisis and incorporating a transition to an  Open Source, Creative Commons climate. ''Climate Change 2.0'' is based on the recognition of the vital contribution that the combination of the [[economics of information|Economics of information]] and information and communications technologies (ICT) can contribute - and already are contributing - to addressing what is increasingly recognized as the greatest challenges to a sustainable common future, both through the power of the technologies and through the progressive discovery and realization of the fundamental properties and nature of a digital knowledge-based universe and the accompanying profound freedoms and transformation of human consciousness and the emergence of digitally-connected global civil society that has been growing rapidly since the early stages of preparations for the 1992 Earth Summit - of which the [[United Nations Framework Convention on Climate Change]] was a key component.
<<<
"''The Interlocking Crises''
Until recently, the planet was a large world in which human activities and their effects were neatly compartmentalized within nations, within sectors (energy, agriculture, trade), and within broad areas of concern (environment, economics, social). These compartments have begun to dissolve. This applies in particular to the various global 'crises' that have seized public concern, particularly over the past decade. These are not separate crises: an environmental crisis, a development crisis, an energy crisis. They are all one."
//[[Our Common Future, From One Earth to One World|http://www.un-documents.net/ocf-ov.htm]]//
<<<
!! See also:
* [[Climate Change 2.0 - Elements]]
A number of  elements have been developed under the auspices of [[Climate Change 2.0]]. The initial focus had evolved from the work of the [[NGO Committee on Education]] on the [[United Nations Decade of Education for Sustainable Development]], 2005-2014, and related international decades . was on the development of an online platform in support of the September 2007 [[60th Annual DPI/NGO Conference]] that was held at UN Headquarters on the theme "Climate Change: How It Impacts Us All" and in the broader context of  the 

The DPI/NGO Climate Change Conference offers a unique opportunity for a demonstration project of [[Climate Change 2.0]] as it will be the last to be held at the United Nations Headquarters before major renovations begin, and there is strong interest in developing a prototype interactive online framework that would provide for real-time participation in the Conference, for this Conference, and as a model to be used for future Annual DPI/NGO Conferences.

Among the elements that are under development are the following:
!! ~TiddlyWiki sites
* [[Climate Change 2.0]]<br>[[www.climate-change-two.net/|http://www.climate-change-two.net/]]
** [[Climate Change Impacts, Adaptation and Vulnerability]]<br>[[www.climate-change-two.net/ar4-wg2-spm|http://www.climate-change-two.net/ar4-wg2-spm]]
** [[Peace Caucus: The Wild Cards in Climate Change]]<br>[[www.peacecaucus.net|htt[://www.peacecaucus.net]]
* [[NGO Committee on Education]]<br>[[www.ngo-education.net/|http://www.ngo-education.net/]]
** [[Education, Youth & Technology for Sustainable Development]]<br>[[www.ngo-education.net/workshop/|http://www.ngo-education.net/workshop/]]
!!! ~TiddlyWikiPerfect sites
* [[TiddlyWikiPerfect: An emerging hybrid information species]]<br>[[www.tiddlywikiperfect.net/|http://www.tiddlywikiperfect.net/]]
** [[Rescuing a Planet Under Stress and a Civilization in Trouble: Plan B 2.1 (beta)]]<br>[[www.climate-change-two.net/plan-b/|http://www.climate-change-two.net/plan-b/]]
** [[Economics of Climate Change: The Stern Review]]<br>[[www.climate-change-two.net/stern-review/|http://www.climate-change-two.net/stern-review/]]
** ~TiddlyWikiPerfect sites under development
** Confronting Climate Change
*** Silken Valleys - Digital relief post-Kashmir earthquake
*** ~DataPerfect Manual
*** Information Habitat 2.0
!! "Normal" - HTML - web sites
* [[UN Documents Cooperation Circles: Gathering a Body of Global Agreements]]<br>[[www.un-documents.net/|http://www.un-documents.net/]]
** [[Our Common Future]]<br>[[www.un-documents.net/wced-ocf.htm|http://www.un-documents.net/wced-ocf.htm]]
* [[The Wealth of Networks: How Social Production Transforms Markets and Freedom]]<br>[[www.climate-change-two.net/wealth-of-networks/|http://www.climate-change-two.net/wealth-of-networks/]]
!! Related Google Groups
* [[Climate Change Summer|climate-change-summer@googlegroups.com]]
* [[Climate Change 2.0|climate-change-two@googlegroups.com]]
* [[Networking Sub-Committee, Planning Committee|ngo-networking@googlegroups.com]]
* [[NGO Committee on Education|ngo-education@googlegroups.com]]
* [[TiddlyWiki|tiddlywiki@googlegroups.com]]
!! Other sites
* [[The Wealth of Networks wiki notes]]<br>[[www.benkler.org/wealth_of_networks|http://www.benkler.org/wealth_of_networks/]]
* [[Information Ecologist @ Blue Dot]]<br>[[bluedot.us/users/Information-Ecologist|http://bluedot.us/users/Information-Ecologist]] - social bookmarking
* H2O Playlist
The ''Information Ecology of Climate Change'' is intended to harness the power of the Internet, and particularly of ''Web 2.0'' tools to the challenge of climate change, with a focus on the use of Free and Open Source software and through a focused and systematic expansion of the global [[Creative Commons]].

There is a vast amount of information and documents on the many aspects of climate change freely available online, and while it is relatively easy to find information and specific documents using search engines, it is also very easy to be overwhelmed by the sheer volume - a Google search for "climate change" currently generate approximately 85,000,000 hits, for "global warming" and "sustainable development", the numbers are 70,000,000 and 60,000,000 respectively.

Most of the major documents on climate change are published - and freely available - as pdf files; however, pdf is optimized for printing, not for online accessibility; page breaks make reading a pdf document online a discontinuous process, and the use of hyperlinks in pdf files - when they are included - makes for a very cumbersome navigation process. One of the key initial tasks for ''Climate Change 2.0'' is the translation of these pdf documents into a format optimized for a web-based environment.

When HTML versions of climate change reports are also published, e.g. with copies of the [[Third Assessment Review|IPCC Third Assessment Review]] of the [[Intergovernmental Panel on Climate Change]], the HTML pages are frequently in a fragmented form. The adoption of simple, no-cost, measures such as the creation of dedicated sub-domains for the publication of each  report could provide significant benefits by enabling site-specific searches.

Frequently, lengthy reports, e.g. the 659 page [[Stern Review on the Economics of Climate Change|Economics of Climate Change: The Stern Review]], are published without the inclusion of any bookmarks. Incidentally, the Stern Review, in addressing the economics of climate change gave very scant attention to the role of information technology, and offered no analysis of the economics of information.

Many climate change-related research papers are only available through subscription to professional journals; while individual copies can generally be purchased, typically at the price of $9.00 per article (compared to a zero marginal cost), the number of articles that a serious lay investigator might have a legitimate interest in reading makes for a prohibitive cost for most people; a cooperative initiative among professional societies to waive the charge for papers on climate change, 

Yochai Benkler's acclaimed book, [[The Wealth of Networks: How Social Production Transforms Markets and Freedom]] offers exceptional insight and examples as to the profound transformation that are taking place, through "peer production" and new forms of collaboration  in the accelerating transition to a "networked information economy"; it seems clear that a systematic effort to harness these powerful processes in a broad-based mobilization of creative intelligence to address the global climate change crisis would pay handsome dividends.

The Wealth of Networks also highlights the opportunities for significant contributions to bodies of knowledge that can be made by individuals, often without formal credentials, who are able to develop online centers of excellence through a systematic process of gathering and organizing information from multiple online sources. Given the increasingly narrow specialization in scientific research, the free availability of scientific research on climate change could provide an excellent opportunity for a generalist, with a holistic perspective and a broad general understanding of different scientific fields to make a major contribution to the body of knowledge on climate change.

The example of ''Oscar'' - an open source design for an environmentally-sound automobile - offers another example of how the adoption of open source, creative commons approaches to technology offer the possibility of making significant contributions to addressing climate change. In a different vein, the combination of WalMart's recent commitment to address climate change and its extensive use of RFID technology could serve as a demonstration model for the establishment of full-cost accounting in the traditional economic sphere by making visible, and accountable, previously undocumented external costs, including environmental impacts, of economic activity. The Stern Review correctly recognizes the failure of conventional markets to acknowledge external costs as a fundamental market failure that has been a major economic driver in supporting unsustainable energy use and the corresponding increases in the emission of greenhouse gases.

There would be great value in developing and implementing a comprehensive initiative to gather and organize the available information on climate change - and on a broad range of sustainable development issues, and while the cost would not be trivial, the effort could pay great dividends in the challenge of addressing climate change. There is a clear need for the development and utilizations of a climate change taxonomy, and corresponding enhancements to search engine methodology, that could play a valuable role in targeted search for relevant information.

A web-based campaign to make use of social bookmarking sites - e.g. [[del.icio.us|http://del.icio.us]] and [[Blue Dot|http://bluedot.us]] - as platforms for collaborative gathering and sharing of key online information and resources, together with the progressive development of a structured framework for climate change-related tags offers significant opportunities for rapid and effective dissemination of critical information.

Likewise, the development of a collaborative wiki site, provided it incorporates an accountability and clear commitment to, and monitoring of, guidelines for participation that are unfortunately missing from <<wikipedia Wikipedia>>, could offer an invaluable participatory forum within which a rigorous, comprehensive body of climate change information could be assembled..

TiddlyPerfect offers a very promising platform for managing, organizing and sharing climate change information. TiddlyPerfect is an emerging hybrid information species combining the power of two exceptional software platforms - TiddlyWiki - [[www.tiddlywiki.com|http://www.tiddlywiki.com]] - a brilliant and rapidly-evolving self-contained wiki that serves as a prime example of the "peer production" model described by Yochai Benkler - and DataPerfect, lesser-known companion of the classic WordPerfect for DOS and arguably the most brilliant relational database yet to see the light of day, whose genius was largely obscured by the transition to a Windows platform, but has remained alive, supported by a brilliant and dedicated group of developers - see [[www.dataperfect.nl|http://www.dataperfect.nl]] - and has now been adapted to an online environment where it is now able to function as a web server.

In a broader context, the radical change in an in increasingly networked information economy - touched on but not fully developed in Yochai Benkler's [[The Wealth of Networks|The Wealth of Networks: How Social Production Transforms Markets and Freedom]] is the largely unappreciated reality that in a networked knowledge-based universe, a universe in which knowledge is the central basis for wealth and in which the zero-based properties of information become increasingly self-evident and appreciated - i.e. that information has zero mass, zero physical size and takes virtually zero time and cost to travel - accessibility to wealth is no longer constrained the laws of conservation of mass and energy.
A Creative Commons TiddlyWiki edition of the Summary for Policymakers of the November 2007 Synthesis Report from the Intergovernmental Panel on Climate Change.
+++[Climate Change 2007: IPCC Fourth Assessment Report - TiddlyWiki edition]
{{iframe{''Note'': This is a "framed" page from the ''Climate Change 2.0'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.climate-change-two.net/ar4-spm/}}}
<html><iframe
	src = "http://www.climate-change-two.net/ar4-spm/"
	title = "Climate Change 2007: IPCC Fourth Assessment Report - TiddlyWiki edition"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
===
[>img[http://www.climatechange3.net/cc3-logo-75x75.png]]
<<<
"No problem can be solved from the same level of consciousness that created it."
//Albert Einstein// (1879 - 1955) Physicist & Nobel Laureate 
<<<
''Climate Change 3.0'' - [[www.climatechange3.net/|http:/www.climatechange3.net/]] - is being developed from a vision of a collaborative application of ''Web 2.0'' methodologies to the global climate change crisis and incorporating a transition to an Open Source, Creative Commons climate. ''Climate Change 3.0'' is based on the recognition of the vital contribution that the combination of the [[economics of information|Economics of information]] and information and communications technologies (ICT) can contribute - and already are contributing - to addressing what is increasingly recognized as the greatest challenges to a sustainable common future, both through the power of the technologies and through the progressive discovery and realization of the fundamental properties and nature of a digital knowledge-based universe and the accompanying profound freedoms and transformation of human consciousness and the emergence of digitally-connected global civil society that has been growing rapidly since the early stages of preparations for the 1992 Earth Summit - of which the [[United Nations Framework Convention on Climate Change]] was a key component.
<<<
"''The Interlocking Crises''
Until recently, the planet was a large world in which human activities and their effects were neatly compartmentalized within nations, within sectors (energy, agriculture, trade), and within broad areas of concern (environment, economics, social). These compartments have begun to dissolve. This applies in particular to the various global 'crises' that have seized public concern, particularly over the past decade. These are not separate crises: an environmental crisis, a development crisis, an energy crisis. They are all one."
//[[Our Common Future,   From One Earth to One World]]//
<<<
!! See also:
* [[Climate Change 3.0 - Elements]]
<<<
"''The Interlocking Crises''

Until recently, the planet was a large world in which human activities and their effects were neatly compartmentalized within nations, within sectors (energy, agriculture, trade), and within broad areas of concern (environment, economics, social). These compartments have begun to dissolve. This applies in particular to the various global 'crises' that have seized public concern, particularly over the past decade. These are not separate crises: an environmental crisis, a development crisis, an energy crisis. They are all one."
>> //From [[Our Common Future, From One Earth to One World|http://www.un-documents.net/ocf-ov.htm]]//
<<<
[[Climate Change 3.0]] 
The adoption of holistic approaches, combined with the role of information & communication technologies (ICT) in enabling holistic perspectives, has played a key role in the conception and development of [[Climate Change 230]]. 

ICT has played a central role in almost all aspects of understanding and action relating to climte change: observing, analyzing, modeling, understanding and responding to climate change: the publication and dissemination of climate change information; organizing local, national and international responses to climate change; monitoring and managing energy use - e.g. smart buildings, intelligent transportation systems, industrial ecology, ... - and the design, development and management of low-carbon energy technologies.

Despite this vital role, very little attention has been given either to the role of information technology - either in the reports of the [[IPCC|Intergovernmental Panel on Climate Change]] or in other climate change-related sites, and there appear to be no other initiatives that have adopted a holistic approach to the potential contribution of information technology in addressing the challenge of climate change, or to an analysis and approach that seeks to optimize the overall ''climate change information ecosystem''.

In its initial phase, Climate Change 3.0 has focused on this information ecosystem, and on the development of methodologies designed to optimize the organization, presentation and dissemination of the available information on climate change, and on strategies for mitigation and adaptation. Some key approaches:

''Climate Change Information Ecosystem''

''~TiddlyWiki'': The brilliant TiddlyWiki open source software has been adopted as the principal platform on which Climate Change 3.0 framework based on TiddlyWiki,
''Beyond PDF'': Almost all official publications on climate change are published, often exclusively, as pdf files - a format that is print / paper-oriented, and not optimized for a digital environment.
** The pdf files rarely contain bookmarks - that can be added with very little effort through Adobe Acrobat Professional
rolw of information technology in organizing the available information in a manner that is optimized 



A number of  elements have been developed under the auspices of [[Climate Change 3.0]], with an initial focus on the development of an online platform for the September 2007 [[60th Annual DPI/NGO Conference]] to be held at UN Headquarters on the theme "Climate Change: How It Impacts Us All", and in the broader context of  the [[United Nations Decade of Education for Sustainable Development]], 2005-2014, and related international decades.

The DPI/NGO Climate Change Conference offers a unique opportunity for a demonstration project of [[Climate Change 3.0]] as it will be the last to be held at the United Nations Headquarters before major renovations begin, and there is strong interest in developing a prototype interactive online framework that would provide for real-time participation in the Conference, for this Conference, and as a model to be used for future Annual DPI/NGO Conferences.

Among the elements of the ''Climate Change 3.0 family'' that have been established and/or are under development are the following:
!! Web sites
> <<tiddler "Climate Change 3.0 family of web sites">>
*** ~DataPerfect Manual
*** Information Habitat 2.0
!! "Normal" - HTML - web sites
!! Email Groups
* [[Climate Change 2.0 Google Group|Subscribe to the Climate Change 2.0 Google Group]]
* [[Networking Sub-Committee, Planning Committee|Subscribe to the Networking Sub-Committee Google Group]]
* [[NGO Committee on Education|Subscribe to the NGO Committee on Education Google Group]]
* [[Information Ecology Yahoo! Group|Subscribe to the Information Ecology Yahoo! Group]]
* [[The Peace Caucus Yahoo! Group|Subscribe to the the Peace Caucus Yahoo! Group]]
* [[TiddlyWiki Google Group|Subscribe to the TiddlyWiki Google Group]]
** [[TiddlyWiki Developer Google Group|Subscribe to the TiddlyWikiDev Google Group]]
!! Other sites
* [[The Wealth of Networks wiki notes]]<br>[[www.benkler.org/wealth_of_networks|http://www.benkler.org/wealth_of_networks/]]
* [[Information Ecologist @ Blue Dot]]<br>[[bluedot.us/users/Information-Ecologist|http://bluedot.us/users/Information-Ecologist]] - social bookmarking
* ~H2O Playlist
* [[Climate Change 3.0]]<br>[[www.climatechange3.net/|http://www.climatechange3.net/]]
**[[Climate Change 3.0 on WiserEarth]]<br>[[www.wiserearth.org/group/climatechange2|http://www.wiserearth.org/group/climatechange2]]
** [[Climate Change Impacts, Adaptation and Vulnerability]]<br>[[www.climatechange3.net/ar4-wg2-spm|http://www.climatechange3.net/ar4-wg2-spm]]
** [[Rescuing a Planet Under Stress and a Civilization in Trouble: Plan B 2.1 (beta)]]<br>[[www.climatechange3.net/plan-b/|http://www.climatechange3.net/plan-b/]]
** [[Economics of Climate Change: The Stern Review]]<br>[[www.climatechange3.net/stern-review/|http://www.climatechange3.net/stern-review/]]
** [[Universal Declaration of Human Rights: 60th Anniversary]]<br>[[www.climatechange3.net/udhr60/|http://www.climatechange3.net/udhr60/]]
** [[The Wealth of Networks: How Social Production Transforms Markets and Freedom]]<br>[[www.climatechange3.net/wealth-of-networks/|http://www.climatechange3.net/wealth-of-networks/]]
** [[La Perla Garden: A creative commons learning environment for community biodiversity]]<br>[[www.climatechange3.net/garden/|http://www.climatechange3.net/garden/]]
** [[Information Ecology and Climate Change Action]]<br>[[www.climatechange3.net/information-ecology/|http://www.climatechange3.net/information-ecology/]]
* [[NGO Framework for Climate Change Action]]<br>[[www.ngo-framework.net/|http://www.ngo-framework.net/]]
* [[UN Documents Cooperation Circles: Gathering a Body of Global Agreements]]<br>[[www.un-documents.net/|http://www.un-documents.net/]]
** [[Our Common Future]]<br>[[www.un-documents.net/wced-ocf.htm|http://www.un-documents.net/wced-ocf.htm]]
* [[NGO Committee on Education]]<br>[[www.congo-education.net/|http://www.congo-education.net/]]
** [[Education, Youth & Technology for Sustainable Development]]<br>[[www.congo-education.net/workshop/|http://www.congo-education.net/workshop/]]
!! Culture of Peace
* [[Peace Caucus: The Wild Cards in Climate Change]]<br>[[www.peacecaucus.net|htt[://www.peacecaucus.net]]
* [[Seasons of Peace Cooperation Circles]]<br>[[www.seasons-of-peace.net/|http://www.seasons-of-peace.net/]]
* [[Gandhi-King Season for Nonviolence]]<br>[[www.gandhi-king-season.net/|http://www.gandhi-king-season.net/]]
* [[The Peace Cubes]]<br>[[www.peace-cubes.net/|http://www.peace-cubes.net/]]
* [[Digital Bridges to Peace]]<br>[[www.digital-bridges.net|http://www.digital-bridges.ne]]
!!! ~TiddlyWikiPerfect sites
* [[TiddlyWikiPerfect: An emerging hybrid information species]]<br>[[www.tiddlywikiperfect.net/|http://www.tiddlywikiperfect.net/]]
{{iframe{''Note'': This is a "framed" page from the '' '' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.wiserearth.org/group/climatechange2}}}
<html><iframe
	src = "http://www.wiserearth.org/group/climatechange2"
	title = "Climate Change 3.0 group at WiserEarth"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
In response to the [[NGO/DPI Declaration on Climate Change]], the [[NGO/DPI Executive Committee]] established a ''Climate Change ~Sub-Committee'', charged with the responsibility of implementing the NGO Framework for Action as a tool for the NGO community to participate in an open, practical and transparent collaborative approach based on networking; ...

!! Chair
> [[Richard Jordan]], //~Co-Chair//, [[Planning Committee|60th Annual DPI/NGO Conference Planning Committee]] for the [[60th Annual DPI/NGO Conference]], //UN Representative//, International Council of Caring Communities
!! Editor
> [[Larry Roeder]], //UN Representative//, World Society for Protection of Animals
!! Members
<<<
[[William Gellermann]], //~Co-Chair//, Communications Coordination Committee for the United Nations
[[Moki Kokoris]], //UN Representative//, World Federation of Ukrainian Women's Organizations
<<<
!! ~Ex-Officio
<<<
[[Jeffrey Huffines]]. //Chair//, [[NGO/DPI Executive Committee]], //UN Representative//, National Spiritual Assembly of the Baha'is of the US
[[Joan Kirby]], //Past Chair//, [[NGO/DPI Executive Committee]], //UN Representative//, Temple of Understanding
<<<
!! Invited Members
<<<
[[Renate Bloem]], //President//, [[Conference Of NGOs]]
[[Alice Slater]], //New York Director//, Nuclear Age Peace Foundation

<<<
We, over 1726 participants representing over 500 ~Non-Governmental Organisations from more than 62 countries,
* recognising that we share one planet and its environment, as well as a responsibility to protect future generations,
* recognising the special vulnerabilities of the indigenous, poor, coastal and rural populations,
* having met at the [[60th Annual DPI/NGO Conference]] at UN Headquarters from 5-7 September, 2007, with representatives of Member States, UN agencies and programs, the scientific community, the private sector, media and civil society, and
* having reviewed the latest scientific evidence from a wide variety of experts as well as hearing about the experiences of indigenous peoples to better understand climate change, its threats and how ~NGOs can broaden the base for knowledge and action to reduce those threats; make the following declaration:
# We affirm that climate change is mainly anthropogenic and is one of the most serious threats humanity and our environment have ever faced which if not addressed will cause:
## catastrophic effects to Earth's ecosystems, biodiversity and infrastructure;
## significantly reduced availability of food, water, energy and transport;
## massive migration of populations and the possible destruction of entire cultures and small island nations,
## significant damage to our economic, political, cultural, social and spiritual structures,
## increased local, national and international violence,
## significant psychological and emotional distress to individuals and communities
## irreversible harm to the lifestyles of indigenous peoples,
## increased spread of vector-borne diseases such as malaria and dengue fever, and
## negative impacts on human health and life expectancy.
# We commit ourselves over the next 12 months to a Framework for Action that will propose NGO solutions to these threats before they become irreversible:
## unify behind a common vision of collaboration - even if we disagree on tactics - to develop and implement plans for adaptation and mitigation1 taking into account the full range of consequences;
## act as vocal, active partners for change with the UN, governments at all levels, ~NGOs and other members of our global community;
## develop, implement and publicize individual and collaborative action plans for personal, economic and political change.
# We commend ~Secretary-General Ban Ki-moon's leadership in highlighting climate change as a major priority. We urge government, industry, and UN leaders, in partnership with the NGO community to emphasise proactive climate change priorities for the greater good in preparation for the [[UN Climate Change Conference in Bali]], December, 2007, and subsequent negotiations.
# We strongly recommend, for the sake of future generations, that government and industry leaders, the UN, other international organizations and the whole of civil society partner behind and implement concrete solutions, taking into account recommendations that emerge from the Framework for Action.
# We also strongly recommend that:
## all governments and civil society foster an ethical, moral foundation for ongoing sustainable development in our interdependent world making the well-being of all of humankind our priority.
## all educational institutions and media organizations more effectively educate about the issue of climate change with special emphasis on youth,
## governmental authorities consider penalties for excessive consumption and pollution as a method of financing climate change improvements, as well as financial incentives to foster climate-friendly technologies so that fossil fuel and nuclear based technologies can be phased out.
## governments recognize that war is damaging to the climate.
## all governments ratify UN conventions on climate change, the Kyoto protocol and other relevant climate conventions
# Finally, in order to implement the Framework for Action - recognizing that our views on challenges and opportunities will evolve as this process continues - we request that:
## the [[NGO/DPI Executive Committee]] and the [[Conference of NGOs in Consultative Relationship with the United Nations|Conference Of NGOs]] (CONGO) foster a plan as soon as possible to implement the Framework as a tool for the NGO community to participate in an open, practical and transparent collaborative approach based on networking;
## the Framework discussion culminate in an internet-based progress report to be submitted to the ~Secretary-General in one year and that a long-term dialogue for future action be fostered thereafter;
## the Framework process should network ~NGOs that might not otherwise typically collaborate by bridging the spectrum of NGO concerns interconnected by climate change, such as sustainable development, agriculture, forestry, issues affecting indigenous peoples, biodiversity, livestock and animal welfare, nuclear proliferation, the end of war, justice, ethnic groups, multigenerational issues, youth, gender equality, education, poverty, food and water security, culture of peace, interfaith cooperation, national global security and economic justice, as well as mental, spiritual and physical health.

----
//Note: Adaptation implies making lifestyle adjustments. Mitigation implies alleviating the problem.
/***
| Name:|CloseOnCancelPlugin|
| Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
| Version:|6.9.3|
| Date:|30-Sep-2006|
| Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|
| Author:|Simon Baird <simon.baird@gmail.com>|
| CoreVersion:|2.1.x|
***/
//{{{
merge(config.commands.cancelTiddler,{

	handler_orig_closeUnsaved: config.commands.cancelTiddler.handler,

	handler: function(event,src,title) {
		this.handler_orig_closeUnsaved(event,src,title);
		if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))
			story.closeTiddler(title,true);
	 	return false;
	}

});

//}}}

Foreground: #000
Background: #fff
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
The [[ColorPalette]] tiddler is used in TiddlyWiki to define a set of colours - fifteen by default - whose names are then used in the [[StyleSheetColors]] tiddler. This system allow one to easily change the entire colour scheme of a TiddlyWiki site far more quickly than if one were to have change the colour for each style element.

|Background |#fff |@@bgcolor(#000000):color(#ffffff):Background@@ |@@bgcolor(#ffffff): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|Foreground |#000 |@@color(#000000):Foreground@@ |@@bgcolor(#000000): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|PrimaryPale |#8cf |@@color(#88ccff):~PrimaryPale@@ |@@bgcolor(#88ccff): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|PrimaryLight |#18f |@@color(#1188ff):~PrimaryLight@@ |@@bgcolor(#1188ff): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|PrimaryMid |#04b |@@color(#0044bb):~PrimaryMid@@ |@@bgcolor(#0044bb): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|PrimaryDark |#017 |@@color(#001177):~PrimaryDark@@ |@@bgcolor(#001177): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|SecondaryPale |#ffc |@@color(#ffffcc):~SecondaryPale@@ |@@bgcolor(#ffffcc): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|SecondaryLight |#fe7 |@@color(#ffee77):~SecondaryLight@@ |@@bgcolor(#ffee77): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|SecondaryMid |#db4 |@@color(#ddbb44):~SecondaryMid@@ |@@bgcolor(#ddbb44): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|SecondaryDark  |#841 |@@color(#884411):~SecondaryDark@@ |@@bgcolor(#884411): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|TertiaryPale |#eee |@@color(#eeeeee):~TertiaryPale@@ |@@bgcolor(#eeeeee): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|TertiaryLight  |#ccc |@@color(#cccccc):~TertiaryLight@@ |@@bgcolor(#cccccc): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|TertiaryMid |#999 |@@color(#999999):~TertiaryMid@@ |@@bgcolor(#999999): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|TertiaryDark |#666 |@@color(#666666):~TertiaryDark@@ |@@bgcolor(#666666): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
|Error |#f77 |@@color(#ff7777):Error@@ |@@bgcolor(#ff7777): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @@|
/*{{{*/
.large {
font-size:120%;
font-weight:bold;
}
.larger {
font-size:130%;
font-weight:bold;
}
.medium-large {
font-size:110%;
font-weight:bold;
}
.small {
font-size:85%;
font-weight:normal;
}
.smaller {
font-size:70%;
font-weight:normal;
}
.right {
text-align:right;
align:right;
}
.center {
text-align:center;
align:center;
}
.iframe {
font-size:70%;
}
/* ''Header Levels'' */

h1, h2, h3, h4, h5 {
font-weight: bold;
text-decoration: none;
}

h1 {font-size: 1.35em;}
h2 {font-size: 1.25em;}
h3 {font-size: 1.1em;}
h4 {font-size: 1em;}
h5 {font-size: .9em;}

/*}}}*/
/* ''Borderless Tables'' /*
/*{{{*/
.cleartable table {
border: 0;
}
.cleartable td
padding-right: 10px;
}
.youtube table {
border: 10px solid white;
border-collapse: collapse;
border-style: hidden;
border-spacing: 5px;
padding: 5px;
}
/*}}}*/
You are invited to participate in a workshop& discussion at [[La Perla Garden]] on ''Compost & Water Conservation'' on Saturday, August 2, 2008.
!! Rooftop composting - 949 Amsterdam Avenue
The workshop will begin with a visit to the rooftop composting bins of [[Peter Arndtsen]] - no elevator - where Peter will describe how he composts his kitchen waste, and feeds his rooftop garden.
!! Garden Composting - La Perla Garden
The workshop will then move to La Perla Garden, for a description and demonstration of the three compost piles by [[Robert  Pollard]], who has been managing the compost at La Perla for the last four years.

!! Water Conservation & Climate Change
La Perla Garden has a 1,000 gallon rainwater collection tank, which will be the focus of a planned beautification process, to be completed by September 2008
!!! How a rainwater tank works
!!!! Collecting rainwater
!!!! Using
!!!The garden as a water body





{{iframe{''Note'': This is a "framed" page from the ''Compost Guide'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.compostguide.com/}}}
<html><iframe
	src = "http://www.compostguide.com/"
	title = "Compost Guide: A complete Guide to composting"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
<<forEachTiddler 
 where 
 'tiddler.tags.containsAll(["la perla garden","picasa album","compost"])'
sortBy
 'tiddler.created'
 descending
 write
 '"----\n+++["+tiddler.title+"]\n> <<tiddler [["+tiddler.title+"]]$))\n\n===\n"'
>>
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5184362603745149345%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
5 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5079320499181072289%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
<<forEachTiddler 
 where 
 'tiddler.tags.containsAll(["la perla garden","youtube","compost"])'
sortBy
 'tiddler.created'
 descending
 write
 '"----\n+++["+tiddler.title+"]\n> <<tiddler [["+tiddler.title+"]]$))\n\n===\n"'
>>
Composting - the process by which garden and kitchen waste is transformed into rich humus - has played the central role in [[Rainwater Harvest Beautification Project]] at ''La Perla Garden''.
!!Photos of composting at La Perla Garden
> <<tiddler 'Compost Photos at La Perla Garden'>>
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296929935036283857%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
6 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296492128705671169%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
13 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5079290979870846753%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
24 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5303135390996219649%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
19 photos
{{iframe{''Note'': This is a "framed" page from the ''Cornell Waste Management Institute'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://compost.css.cornell.edu/schools.html}}}
<html><iframe
	src = "http://compost.css.cornell.edu/schools.html"
	title = "Composting in Schools"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
{{iframe{''Note'': This is a "framed" page from the ''Cornell Waste Management Institute'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://compost.css.cornell.edu/CIC.html}}}
<html><iframe
	src = "http://compost.css.cornell.edu/CIC.html"
	title = ""
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
A slideshow of composting kitchen scraps and a handful of lunch leftovers that were featured in a garden and compost workshop organized by [[Border Crossers]] for 3rd graders at [[The Bloomingdale School]] on 29 January, 2009 with classes from [[The Bloomingdale School]] and [[Columbia Grammar & Preparatory School]]
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296876821478134113%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
18 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296539412680098065%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
9 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5303105159997503185%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
11 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5283498668681836609%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
10 photos
{{youtube{
|<html><object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/wxCFWp_8r2k&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/wxCFWp_8r2k&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object> </html>| &nbsp; |A brief video tour of the compost at La Perla Garden including a Christmas tree, the addition kitchen scraps and turning a compost bin.  <br><br>4:33 minutes |
}}}
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296931893866696209%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
10 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296504244527152385%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
7 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5283520260111826801%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
13 photos
"Yard trimmings and food residuals together constitute 24 percent of the U.S. municipal solid waste stream. That's a lot of waste to send to landfills when it could become useful and environmentally beneficial compost instead!

Composting offers the obvious benefits of resource efficiency and creating a useful product from organic waste that would otherwise have been landfilled. ..."

+++[U.S. Environmental Protection Agency Composting web site]
{{iframe{''Note'': This is a "framed" page from the ''U.S. Environmental Protextion Agency'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.epa.gov/compost/}}}
<html><iframe
	src = "http://www.epa.gov/compost/"
	title = "Composting: U.S. Environmental Protection Agency"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
===
''CONGO'' - the ''C''onference ''O''f ''N''on-''G''overnmental ''O''rganizations in Consultative Relationship with the United Nations - is an independent, international, not-for-profit membership association of nongovernmental organizations that facilitates the participation of ~NGOs in United Nations debates and decisions. CONGO is most active in the major UN centers of New York, Geneva, and Vienna, but extends its work to all regions of the world. In 2002. CONGO became accredited in its own right as an NGO in General Consultative Status with the United Nations Economic and Social Council.
* [[www.ngocongo.org/|http://www.ngocongo.org]]
config.options.chkDisableNonExistingWikiLinks=true;
config.options.chkSearchTitles=true;
config.options.chkSearchText=false;
config.options.chkSearchTags=false;
<html><hide linebreaks>
Please use this form to send any messages, comments or questions about this site, or send an email to <a href="mailto:webster@climate-change-two.net">webster@climate-change-two.net</a>:
<p>
<form method=post target=email action="http://cgi.eytv4sfc.net/gdform.cgi" style="display:inline">
<input type=hidden name=to value="seasons-of-peace@earthlink.net.net">
<input type=hidden name=subject value="Climate Change 2.0 feedback">
<input type=hidden name=prefix value="The Economics of Climate Change">
<input type=hidden name=url value="javascript:window.close();">
<input type=text name=from style="width:49%" value="your name" onfocus="this.select()">
<input type=text name=reply style="width:49%" value="your email address" onfocus="this.select()"><br>
<input type=text name=organization style="width:99%" value="your organization (optional)" onfocus="this.select()"><br>
<font size=-2>Your message:</font><br>
<textarea rows=7 cols=50 name=text style="width:98%" onfocus="this.select()"></textarea><br>
<font size=-2>Enter your information, comments or questions, then press </font><input type=submit value="send"></form>
<p>
Please note that your message will probably remain here are you have sent it, and that doesn't mean the message hasn't been sent!
</html>
A 58-minute conversation in [[La PerlaGarden]] that was broadcast on [[Manhattan Neighborhood Network]]on April 30, 2008. Video by [[JoeFriendly]].
<html>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/kF_fBmZt-Ak&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/kF_fBmZt-Ak&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>
</html>
The ''Council on the Environment of NYC'' (CENYC) is a hands-on non-profit that has been improving New York City's environment for over thirty years. CENYCs dedicated staff green our neighborhoods, create the environmental leaders of the future, promote waste prevention and recycling, and run the largest farmers market program in the country.
+++[Council on the Environment of New York City Web site]
{{iframe{''Note'': This is a "framed" page from the ''Council on the Environment of New York City'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.cenyc.org/@@
<html><iframe
	src = "http://www.cenyc.org/"
	title = "Council on the Environment of New York City"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
===
This website is made available under a ''Creative Commons Attribution Non-Commercial Share-Alike Licence 3.0'', and registered as [[Common Content]] at 

@@font-size:90%;''Note'': This is a "framed" page from the [[Creative Commons]] web site.
You can view this page in a separate browser tab or window at http://creativecommons.org/licenses/by-nc-sa/3.0/@@
<html><iframe
	src = "http://creativecommons.org/licenses/by-nc-sa/3.0/"
	title = "Creative Commons Attribution Non-Commercial Share-Alike Licence 3.0"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
[[61st Annual DPI/NGO Conference]]
[[Information Bulletin #2|Information Bulletin #2 - 12 March 2008]]
[[Provisional Conference Agenda|Reaffirming Human Rights: The Universal Declaration at 60 - Provisional Conference Agenda]]
[[Planning Committee Minutes]] +++
[[4 January 2008|61st Annual DPI/NGO Conference Planning Committee Meeting Minutes: 4 January 2008]] -
[[31 January 2008|61st Annual DPI/NGO Conference Planning Committee Meeting Minutes: 31 January 2008]] -
[[12 March 2008|61st Annual DPI/NGO Conference Planning Committee Meeting Minutes: 12 March 2008]] -
===

[[Minutes of Co-Chairs Meetings]] +++
[[14 February 2008 Minutes|Minutes of the 14 February 2008 Meeting of Co-Chairs]] -
[[28 February 2008 Minutes|Minutes of the 28 February 2008 Meeting of Co-Chairs]] -
[[Planning Committee Co-Chairs]] -
===

[[Book Travel & Accommodations]]
[[Universal Declaration|Universal Declaration of Human Rights]]
[[Key Human Rights documents]] +++
[[Universal Declaration of Human Rights]] -
[[International Covenants]] -
[[Geneva Conventions]] -
===

[[UN Human Rights sites]]
[[60th Anniversary Launch Kit|10 December 2007 Launch of a Year-Long Celebration of the 60th Anniversary of the UDHR]]
[[The UDHR@60+ icon]]
[[Link to this site]]
/*{{{*/
p {
text-indent: 25px;
}
#displayArea {
margin-left: 16em;
margin-right: 3em;
}

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: none;
font-weight: bold;
}

.indent {
margin-left: 0.5em;
padding-left: 1.5em;
}

.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 a bold */
a.tiddlyLinkNonExisting.shadow {
font-weight: bold;
}

.wizard {
padding: 0.1em 0em 0em 2em;
}

.wizard h1 {
font-size: 2em;
font-weight: bold;
background: none;
padding: 0em 0em 0em 0em;
margin: 0.4em 0em 0.2em 0em;
}

.wizard h2 {
font-size: 1.2em;
font-weight: bold;
background: none;
padding: 0em 0em 0em 0em;
margin: 0.2em 0em 0.2em 0em;
}

.wizardStep {
padding: 1em 1em 1em 1em;
}

.wizard .button {
margin: 0.5em 0em 0em 0em;
font-size: 1.2em;
}

#messageArea {
position:absolute; top:0; right:0; margin: 0.5em; padding: 0.5em;
}

*[id='messageArea'] {
position:fixed !important; z-index:99;}

.messageToolbar {
display: block;
text-align: right;
}

#messageArea a{
text-decoration: underline;
}

.popup {
font-size: .9em;
padding: 0.2em;
list-style: none;
margin: 0;
}

.popup hr {
display: block;
height: 1px;
width: auto;
padding: 0;
margin: 0.2em 0em;
}

.listBreak {
font-size: 1px;
line-height: 1px;
}

.listBreak div {
margin: 2px 0;
}

.popup li.disabled {
padding: 0.2em;
}

.popup li a{
display: block;
padding: 0.2em;
}

.tabset {
padding: 1em 0em 0em 0.5em;
}

.tab {
margin: 0em 0em 0em 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;
}

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

.selected .toolbar {
visibility: visible;
}

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

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

.title {
font-size: 1.6em;
font-weight: bold;
padding-left: 1px;
}

.missing .subtitle {
display: none;
}

.subtitle {
font-size: 1.1em;
padding-left: 2px;
}

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

.tagging {
margin: 0.5em 0.5em 0.5em 0;
float: right;
display: none;
}

.isTag .tagging {
display: block;
}

.tagged {
margin: 0.5em;
}

.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;
}

* html .viewer pre {
width: 99%;
padding: 0 0 1em 0;
}

.viewer {
line-height: 1.4em;
padding-left: 1em;
}

.viewer .button {
margin: 0em 0.25em;
padding: 0em 0.25em;
}

.viewer blockquote {
margin-left: 0.5em;
padding-left: 1.5em;
}

.viewer ul, .viewer ol{
margin-left: 0.5em;
padding-left: 1.5em;
}

.viewer li {
margin-top: 0.8em;
}

.viewer table {
border-collapse: collapse;
margin: 0.5em 0.5em;
}

.viewer th, .viewer td, .viewer tr,.viewer caption{
vertical-align: top;
padding: 1px;
}

.viewer table.listView {
font-size: 0.85em;
margin: 0.8em 1.0em;
}

.viewer table.listView th, .viewer table.listView td, .viewer table.listView tr {
padding: 0px 2px 0px 2px;
}

.viewer pre {
padding: 0.2em;
font-size: 0.9em;
line-height: 110%;
overflow: auto;
}

.viewer code {
font-size: 90%;
}

.editor {
font-size: 1.1em;
}

.editor input, .editor textarea {
display: block;
width: 100%;
font: inherit;
}

.editorFooter {
padding: 0.25em 0em;
font-size: .9em;
}

.editorFooter .button {
padding-top: 0px; padding-bottom: 0px;}

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

.sparkline {
line-height: 1em;
}

.sparktick {
outline: 0;
}

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

.cascade {
font-size: 1.1em;
position: absolute;
overflow: hidden;
}
/*}}}*/
/*{{{*/
body {
	background: [[ColorPalette::Background]];
	color: [[ColorPalette::Foreground]];
}

[[TiddlerColors]]

.title {
	color: [[ColorPalette::PrimaryDark]];
}

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

.toolbar {
	color: [[ColorPalette::PrimaryMid]];
}
a.externalLink {
 color: #007700;
}
a {
	color: [[ColorPalette::SecondaryDark]];
}

a:hover {
	background: [[ColorPalette::SecondaryDark]];
	color: [[ColorPalette::Background]];
}
a img {
	border: 0;
}
.searchresults th {
	background: [[ColorPalette::SecondaryLight]];
	color: [[ColorPalette::SecondaryDark]];
}

.cleartable table {
border: 1px solid [[ColorPalette::Background]];
width:100%;
}

..viewer table {
	padding: 1px;
}

.viewer th, thead td {
	background: [[ColorPalette::SecondaryLight]];
	color: [[ColorPalette::SecondaryaryDark]];
}
.clear td, .clear tr {
	border:1px solid [[ColorPalette::Background]];
	padding: 0px;
}
.clear th, .clear td, .clear tr,.clear caption{
vertical-align: top;
}

.viewer table.listView {
font-size: 0.85em;
margin: 0.8em 1.0em;
}

.viewer table.listView th, .viewer table.listView td, .viewer table.listView tr {
padding: 0px 2px 0px 2px;
}

h1,h2,h3,h4,h5 {
	color: [[ColorPalette::PrimaryDark]];
}

.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]];
}

.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::SecondaryLight]];
	border-top: 1px solid [[ColorPalette::SecondaryMid]];
	border-left: 1px solid [[ColorPalette::SecondaryMid]];
}

.wizard h1 {
	color: [[ColorPalette::SecondaryDark]];
}

.wizard h2 {
	color: [[ColorPalette::Foreground]];
}

.wizardStep {
	background: [[ColorPalette::Background]];
	border-top: 1px solid [[ColorPalette::SecondaryMid]];
	border-bottom: 1px solid [[ColorPalette::SecondaryMid]];
	border-left: 1px solid [[ColorPalette::SecondaryMid]];
}

.wizard .button {
	color: [[ColorPalette::Background]];
	background: [[ColorPalette::PrimaryMid]];
	border-top: 1px solid [[ColorPalette::PrimaryLight]];
	border-right: 1px solid [[ColorPalette::PrimaryDark]];
	border-bottom: 1px solid [[ColorPalette::PrimaryDark]];
	border-left: 1px solid [[ColorPalette::PrimaryLight]];
}

.wizard .button:hover {
	color: [[ColorPalette::PrimaryLight]];
	background: [[ColorPalette::PrimaryDark]];
	border-color: [[ColorPalette::SecondaryMid]];
}

.wizard .button:active {
	color: [[ColorPalette::Background]];
	background: [[ColorPalette::PrimaryMid]];
	border-top: 1px solid [[ColorPalette::PrimaryLight]];
	border-right: 1px solid [[ColorPalette::PrimaryDark]];
	border-bottom: 1px solid [[ColorPalette::PrimaryDark]];
	border-left: 1px solid [[ColorPalette::PrimaryLight]];
}

#messageArea {
	border: 1px solid [[ColorPalette::SecondaryDark]];
	background: [[ColorPalette::SecondaryMid]];
	color: [[ColorPalette::PrimaryDark]];
}

#messageArea .button {
	padding: 0.2em 0.2em 0.2em 0.2em;
	color: [[ColorPalette::PrimaryDark]];
	background: [[ColorPalette::Background]];
}

.popup {
	color: [[ColorPalette::SecondaryLight]];
	background: [[ColorPalette::SecondaryDark]];
	border: 1px solid [[ColorPalette::SecondaryMid]];
}

.popup hr {
	color: [[ColorPalette::PrimaryDark]];
	background: [[ColorPalette::PrimaryDark]];
	border-bottom: 1px;
}

.listBreak div{
	border-bottom: 1px solid [[ColorPalette::PrimaryDark]];
}

.popup li.disabled {
	color: [[ColorPalette::PrimaryMid]];
}

.popup li a, .popup li a:visited {
	color: [[ColorPalette::TertiaryPale]];
	border: none;
}

.popup li a:hover {
	background: [[ColorPalette::PrimaryDark]];
	color: [[ColorPalette::Background]];
	border: none;
}

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

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

.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]];
}

.sparkline {
	background: [[ColorPalette::PrimaryPale]];
	border: 0;
}

.sparktick {
	background: [[ColorPalette::PrimaryDark]];
}

.error, .errorButton {
	color: [[ColorPalette::Foreground]];
	background: [[ColorPalette::Error]];
}

.warning {
	color: [[ColorPalette::Foreground]];
	background: [[ColorPalette::SecondaryPale]];
}

.cascade {
	background: [[ColorPalette::TertiaryPale]];
	color: [[ColorPalette::TertiaryMid]];
	border: 1px solid [[ColorPalette::TertiaryMid]];
}

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

.box {
	background: #ccecff;
	border; 1px;
}

#mainMenu .highlight, #mainMenu .marked {
	background: [[ColorPalette::PrimaryPale]];
}

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

.editor input {
	border: 1px solid [[ColorPalette::PrimaryMid]];
}

.editor textarea {
	border: 1px solid [[ColorPalette::PrimaryMid]];
	width: 100%;
}

.editorFooter {
	color: [[ColorPalette::TertiaryMid]];
}

/*}}}*/
The ''DPI/NGO Conference Planning Committee'' has the responsibility of planning the Annual DPI/NGO Conference. The Planning Committee for the 60th Conference is chaired by ''Richard Jordan'' and meets on a weekly basis - with occasional exceptions - each Thursday at United Nations Headquarters in New York. To be added to the list for receiving meeting announcements, minutes, etc, please send an email to ''section5 (at) un (dot) org''.

The [[NGO Committee on Education]] was a co-sponsor and organizer - with [[Rotary International]], [[UNESCO|http://www.unesco.org]], [[Information Habitat: Where Information Lives]], [[Earthwatch Institute]] and the [[Armenian Assembly of America]] - of ''Education, Youth & Technology for Sustainable Development'', a workshop at the ''59th Annual DPI/NGO Conference'' in September 2005 that focused on the [[United Nations Decade of Education for Sustainable Development]].  For additional information on the workshop, please visit [[www.ngo-education.net/workshop|http://www.ngo-education.net/workshop]] - a site that was the Information and Communications Sub-Committee's first experiment with the TiddlyWiki software platform.  

Note that an earlier web site has been created for the workshop, using the open source  educational software platform ''Moodle''- an acronym for Modular Object-Oriented Dynamic Learning Environment - see [[www.moodle.org|http://www.moodle.org]]. However. while Moodle offers some exceptional features, it is a much more complex platform, and unlike TiddlyWiki, which is a self-contained web site requiring only a browser to create, edit and/or view a pages, Moodle requires the installation of server-side software - and a web hosting service that permits the installation of the necessary software. You may be able to access the Moodle site for the Workshop - currently hosted sporadically on a home computer running Windows XP - at http://24.215.188.100/index.php

Daphne Cohen received han Ed.D. from Yeshiva University in New York in Administration and Supervision in 2006 , having conducted doctoral research on children’s views on basic concepts in morality.  Building upon the work of Piaget, Kohlberg, Vygotsky, and Gilligan, Daphne was awarded a Schupf Foundation Fellowship that funded her doctoral research - undertaken with students at the United Nations International School.

In addition to pursuing her post-graduate education, Daphne is a Professor at the Graduate School of General and Special Education at Touro College. Professor Cohen teaches a variety of methods courses at Touro integrating technology into various disciplines such as math and science for elementary and middle school teachers. Dr. Cohen also teaches courses for CITE (Center for Integrated Teacher Education) and has taught educational technology and library programs in a variety of day schools. In addition, Professor Cohen has taught online courses for Axia College of the University of Phoenix and Touro College.  Daphne is facilitating online courses in the areas of Educational methods integrating technology, math and science for elementary school teachers and critical thinking.

A strong proponent of ongoing professional development with an overriding belief in the importance of utilizing the latest educational resources and technology to meet students’ needs and maintain a challenging, stimulating academic environment, Daphne spearheaded the development of a broad range of educational technology training workshops for school’s, serving as an invaluable resource to assist educators in integrating leading-edge technologies into the core curriculum. She created a comprehensive resource manual encapsulating educational software for early childhood through high school students.

Since 1996, Daphne has developed educational programming and curriculum, established library media centers for educational organizations, and published educational materials. A key highlight in Daphne’s career was the publication of her coauthored work In Search of the Seven Wonders of Noah, a children’s book exploring moral and character education, and a companion educator’s resource guide. Daphne has developed and continues to deliver both teacher and student workshops delving into these publications.

An enthusiastic and dedicated educator committed to developing responsible, caring, and productive contributors to society, Daphne has a long track record of developing educational curriculum that sparks students’ curiosity, creativity, and critical thinking skills and encourages a life-long love of learning.

Prior to pursuing her doctoral studies, Daphne obtained a Master of Science in Education from Yeshiva University and a Bachelor of Science
in Elementary Education from Touro College in New York. She holds an Elementary and Early Childhood Education Certification through the
State of New York as well as a Principal and Teacher’s License from the National Board of License for Teachers and Principals of Private
Schools in North America. Finally, Dr. Cohen spent a year studying at Jerusalem College in Israel.

Dr. Cohen serves as treasurer of the NGO Committee on Education. Dr. Cohen is also a member of the Ethical Union, CEP {Character Education Partnership), AME {Association for Moral Education}, and the APA {American Psychological Association}.
The contents of this TiddlyWiki web page were generated from a ''~DataPerfect'' database. ~DataPerfect is a little-known, brilliant relational database compantion of the legendary ''~WordPerfect for DOS'', which was used to prepare the text from the pdf files of The Stern Review for input into the ~DataPerfect database. The design of ~DataPerfect makes it an exceptional vehicle for generating content for TiddlyWiki web pages. 

~DataPerfect was written, and is still maintained by, ''Lew Bastian'' - older brother of ~WordPerfect's author; before joinging the ''~WordPerfect Corporation'', Lew had worked for ''IBM'', where he had written some of the early disk-caching patents. The development of ~DataPerfect was discontinued by the ''~WordPerfect Corporation'' after the introduction of Windows, and subsequently, Novell made the program freely available; an active ''~DataPerfect Users Group'' - [[www.dataperfect.nl|http://www.dataperfect.nl]] - of which Lew Bastian is a leading member - provides exceptional support.
/***
|''Name:''|DataTiddlerPlugin|
|''Version:''|1.0.6 (2006-08-26)|
|''Source:''|http://tiddlywiki.abego-software.de/#DataTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Description
Enhance your tiddlers with structured data (such as strings, booleans, numbers, or even arrays and compound objects) that can be easily accessed and modified through named fields (in JavaScript code).

Such tiddler data can be used in various applications. E.g. you may create tables that collect data from various tiddlers. 

''//Example: "Table with all December Expenses"//''
{{{
<<forEachTiddler
    where
        'tiddler.tags.contains("expense") && tiddler.data("month") == "Dec"'
    write
        '"|[["+tiddler.title+"]]|"+tiddler.data("descr")+"| "+tiddler.data("amount")+"|\n"'
>>
}}}
//(This assumes that expenses are stored in tiddlers tagged with "expense".)//
<<forEachTiddler
    where
        'tiddler.tags.contains("expense") && tiddler.data("month") == "Dec"'
    write
        '"|[["+tiddler.title+"]]|"+tiddler.data("descr")+"| "+tiddler.data("amount")+"|\n"'
>>
For other examples see DataTiddlerExamples.




''Access and Modify Tiddler Data''

You can "attach" data to every tiddler by assigning a JavaScript value (such as a string, boolean, number, or even arrays and compound objects) to named fields. 

These values can be accessed and modified through the following Tiddler methods:
|!Method|!Example|!Description|
|{{{data(field)}}}|{{{t.data("age")}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined {{{undefined}}} is returned.|
|{{{data(field,defaultValue)}}}|{{{t.data("isVIP",false)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined the defaultValue is returned.|
|{{{data()}}}|{{{t.data()}}}|Returns the data object of the tiddler, with a property for every field. The properties of the returned data object may only be read and not be modified. To modify the data use DataTiddler.setData(...) or the corresponding Tiddler method.|
|{{{setData(field,value)}}}|{{{t.setData("age",42)}}}|Sets the value of the given data field of the tiddler to the value. When the value is {{{undefined}}} the field is removed.|
|{{{setData(field,value,defaultValue)}}}|{{{t.setData("isVIP",flag,false)}}}|Sets the value of the given data field of the tiddler to the value. When the value is equal to the defaultValue no value is set (and the field is removed).|

Alternatively you may use the following functions to access and modify the data. In this case the tiddler argument is either a tiddler or the name of a tiddler.
|!Method|!Description|
|{{{DataTiddler.getData(tiddler,field)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined {{{undefined}}} is returned.|
|{{{DataTiddler.getData(tiddler,field,defaultValue)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined the defaultValue is returned.|
|{{{DataTiddler.getDataObject(tiddler)}}}|Returns the data object of the tiddler, with a property for every field. The properties of the returned data object may only be read and not be modified. To modify the data use DataTiddler.setData(...) or the corresponding Tiddler method.|
|{{{DataTiddler.setData(tiddler,field,value)}}}|Sets the value of the given data field of the tiddler to the value. When the value is {{{undefined}}} the field is removed.|
|{{{DataTiddler.setData(tiddler,field,value,defaultValue)}}}|Sets the value of the given data field of the tiddler to the value. When the value is equal to the defaultValue no value is set (and the field is removed).|
//(For details on the various functions see the detailed comments in the source code.)//


''Data Representation in a Tiddler''

The data of a tiddler is stored as plain text in the tiddler's content/text, inside a "data" section that is framed by a {{{<data>...</data>}}} block. Inside the data section the information is stored in the [[JSON format|http://www.crockford.com/JSON/index.html]]. 

//''Data Section Example:''//
{{{
<data>{"isVIP":true,"user":"John Brown","age":34}</data>
}}}

The data section is not displayed when viewing the tiddler (see also "The showData Macro").

Beside the data section a tiddler may have all kind of other content.

Typically you will not access the data section text directly but use the methods given above. Nevertheless you may retrieve the text of the data section's content through the {{{DataTiddler.getDataText(tiddler)}}} function.


''Saving Changes''

The "setData" methods respect the "ForceMinorUpdate" and "AutoSave" configuration values. I.e. when "ForceMinorUpdate" is true changing a value using setData will not affect the "modifier" and "modified" attributes. With "AutoSave" set to true every setData will directly save the changes after a setData.


''Notifications''

No notifications are sent when a tiddler's data value is changed through the "setData" methods. 

''Escape Data Section''
In case that you want to use the text {{{<data>}}} or {{{</data>}}} in a tiddler text you must prefix the text with a tilde ('~'). Otherwise it may be wrongly considered as the data section. The tiddler text {{{~<data>}}} is displayed as {{{<data>}}}.


''The showData Macro''

By default the data of a tiddler (that is stored in the {{{<data>...</data>}}} section of the tiddler) is not displayed. If you want to display this data you may used the {{{<<showData ...>>}}} macro:

''Syntax:'' 
|>|{{{<<}}}''showData '' [''JSON''] [//tiddlerName//] {{{>>}}}|
|''JSON''|By default the data is rendered as a table with a "Name" and "Value" column. When defining ''JSON'' the data is rendered in JSON format|
|//tiddlerName//|Defines the tiddler holding the data to be displayed. When no tiddler is given the tiddler containing the showData macro is used. When the tiddler name contains spaces you must quote the name (or use the {{{[[...]]}}} syntax.)|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|


!Revision history
* v1.0.6 (2006-08-26) 
** Removed misleading comment
* v1.0.5 (2006-02-27) (Internal Release Only)
** Internal
*** Make "JSLint" conform
* v1.0.4 (2006-02-05)
** Bugfix: showData fails in TiddlyWiki 2.0
* v1.0.3 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.2 (2005-12-22)
** Enhancements:
*** Handle texts "<data>" or "</data>" more robust when used in a tiddler text or as a field value.
*** Improved (JSON) error messages.
** Bugs fixed: 
*** References are not updated when using the DataTiddler.
*** Changes to compound objects are not always saved.
*** "~</data>" is not rendered correctly (expected "</data>")
* v1.0.1 (2005-12-13)
** Features: 
*** The showData macro supports an optional "tiddlername" argument to specify the tiddler containing the data to be displayed
** Bugs fixed: 
*** A script immediately following a data section is deleted when the data is changed. (Thanks to GeoffS for reporting.)
* v1.0.0 (2005-12-12)
** initial version

!Code
***/
//{{{
//============================================================================
//============================================================================
//                           DataTiddlerPlugin
//============================================================================
//============================================================================

// Ensure that the DataTiddler Plugin is only installed once.
//
if (!version.extensions.DataTiddlerPlugin) {



version.extensions.DataTiddlerPlugin = {
    major: 1, minor: 0, revision: 6,
    date: new Date(2006, 7, 26), 
    type: 'plugin',
    source: "http://tiddlywiki.abego-software.de/#DataTiddlerPlugin"
};

// For backward compatibility with v1.2.x
//
if (!window.story) window.story=window; 
if (!TiddlyWiki.prototype.getTiddler) {
	TiddlyWiki.prototype.getTiddler = function(title) { 
		var t = this.tiddlers[title]; 
		return (t !== undefined && t instanceof Tiddler) ? t : null; 
	};
}

//============================================================================
// DataTiddler Class
//============================================================================

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

function DataTiddler() {
}

DataTiddler = {
    // Function to stringify a JavaScript value, producing the text for the data section content.
    // (Must match the implementation of DataTiddler.parse.)
    //
    stringify : null,
    

    // Function to parse the text for the data section content, producing a JavaScript value.
    // (Must match the implementation of DataTiddler.stringify.)
    //
    parse : null
};

// Ensure access for IE
window.DataTiddler = DataTiddler;

// ---------------------------------------------------------------------------
// Data Accessor and Mutator
// ---------------------------------------------------------------------------


// Returns the value of the given data field of the tiddler.
// When no such field is defined or its value is undefined
// the defaultValue is returned.
// 
// @param tiddler either a tiddler name or a tiddler
//
DataTiddler.getData = function(tiddler, field, defaultValue) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler;
    }

    return DataTiddler.getTiddlerDataValue(t, field, defaultValue);
};


// Sets the value of the given data field of the tiddler to
// the value. When the value is equal to the defaultValue
// no value is set (and the field is removed)
//
// Changing data of a tiddler will not trigger notifications.
// 
// @param tiddler either a tiddler name or a tiddler
//
DataTiddler.setData = function(tiddler, field, value, defaultValue) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler+ "("+t+")";
    }

    DataTiddler.setTiddlerDataValue(t, field, value, defaultValue);
};


// Returns the data object of the tiddler, with a property for every field.
//
// The properties of the returned data object may only be read and
// not be modified. To modify the data use DataTiddler.setData(...) 
// or the corresponding Tiddler method.
//
// If no data section is defined a new (empty) object is returned.
//
// @param tiddler either a tiddler name or a Tiddler
//
DataTiddler.getDataObject = function(tiddler) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler;
    }

    return DataTiddler.getTiddlerDataObject(t);
};

// Returns the text of the content of the data section of the tiddler.
//
// When no data section is defined for the tiddler null is returned 
//
// @param tiddler either a tiddler name or a Tiddler
// @return [may be null]
//
DataTiddler.getDataText = function(tiddler) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler;
    }

    return DataTiddler.readDataSectionText(t);
};


// ---------------------------------------------------------------------------
// Internal helper methods (must not be used by code from outside this plugin)
// ---------------------------------------------------------------------------

// Internal.
//
// The original JSONError is not very user friendly, 
// especially it does not define a toString() method
// Therefore we extend it here.
//
DataTiddler.extendJSONError = function(ex) {
	if (ex.name == 'JSONError') {
        ex.toString = function() {
			return ex.name + ": "+ex.message+" ("+ex.text+")";
		};
	}
	return ex;
};

// Internal.
//
// @param t a Tiddler
//
DataTiddler.getTiddlerDataObject = function(t) {
    if (t.dataObject === undefined) {
        var data = DataTiddler.readData(t);
        t.dataObject = (data) ? data : {};
    }
    
    return t.dataObject;
};


// Internal.
//
// @param tiddler a Tiddler
//
DataTiddler.getTiddlerDataValue = function(tiddler, field, defaultValue) {
    var value = DataTiddler.getTiddlerDataObject(tiddler)[field];
    return (value === undefined) ? defaultValue : value;
};


// Internal.
//
// @param tiddler a Tiddler
//
DataTiddler.setTiddlerDataValue = function(tiddler, field, value, defaultValue) {
    var data = DataTiddler.getTiddlerDataObject(tiddler);
    var oldValue = data[field];
	
    if (value == defaultValue) {
        if (oldValue !== undefined) {
            delete data[field];
            DataTiddler.save(tiddler);
        }
        return;
    }
    data[field] = value;
    DataTiddler.save(tiddler);
};

// Internal.
//
// Reads the data section from the tiddler's content and returns its text
// (as a String).
//
// Returns null when no data is defined.
//
// @param tiddler a Tiddler
// @return [may be null]
//
DataTiddler.readDataSectionText = function(tiddler) {
    var matches = DataTiddler.getDataTiddlerMatches(tiddler);
    if (matches === null || !matches[2]) {
        return null;
    }
    return matches[2];
};

// Internal.
//
// Reads the data section from the tiddler's content and returns it
// (as an internalized object).
//
// Returns null when no data is defined.
//
// @param tiddler a Tiddler
// @return [may be null]
//
DataTiddler.readData = function(tiddler) {
    var text = DataTiddler.readDataSectionText(tiddler);
	try {
	    return text ? DataTiddler.parse(text) : null;
	} catch(ex) {
		throw DataTiddler.extendJSONError(ex);
	}
};

// Internal.
// 
// Returns the serialized text of the data of the given tiddler, as it
// should be stored in the data section.
//
// @param tiddler a Tiddler
//
DataTiddler.getDataTextOfTiddler = function(tiddler) {
    var data = DataTiddler.getTiddlerDataObject(tiddler);
    return DataTiddler.stringify(data);
};


// Internal.
// 
DataTiddler.indexOfNonEscapedText = function(s, subString, startIndex) {
	var index = s.indexOf(subString, startIndex);
	while ((index > 0) && (s[index-1] == '~')) { 
		index = s.indexOf(subString, index+1);
	}
	return index;
};

// Internal.
//
DataTiddler.getDataSectionInfo = function(text) {
	// Special care must be taken to handle "<data>" and "</data>" texts inside
	// a data section. 
	// Also take care not to use an escaped <data> (i.e. "~<data>") as the start 
	// of a data section. (Same for </data>)

    // NOTE: we are explicitly searching for a data section that contains a JSON
    // string, i.e. framed with braces. This way we are little bit more robust in
    // case the tiddler contains unescaped texts "<data>" or "</data>". This must
    // be changed when using a different stringifier.

	var startTagText = "<data>{";
	var endTagText = "}</data>";

	var startPos = 0;

	// Find the first not escaped "<data>".
	var startDataTagIndex = DataTiddler.indexOfNonEscapedText(text, startTagText, 0);
	if (startDataTagIndex < 0) {
		return null;
	}

	// Find the *last* not escaped "</data>".
	var endDataTagIndex = text.indexOf(endTagText, startDataTagIndex);
	if (endDataTagIndex < 0) {
		return null;
	}
	var nextEndDataTagIndex;
	while ((nextEndDataTagIndex = text.indexOf(endTagText, endDataTagIndex+1)) >= 0) {
		endDataTagIndex = nextEndDataTagIndex;
	}

	return {
		prefixEnd: startDataTagIndex, 
		dataStart: startDataTagIndex+(startTagText.length)-1, 
		dataEnd: endDataTagIndex, 
		suffixStart: endDataTagIndex+(endTagText.length)
	};
};

// Internal.
// 
// Returns the "matches" of a content of a DataTiddler on the
// "data" regular expression. Return null when no data is defined
// in the tiddler content.
//
// Group 1: text before data section (prefix)
// Group 2: content of data section
// Group 3: text behind data section (suffix)
//
// @param tiddler a Tiddler
// @return [may be null] null when the tiddler contains no data section, otherwise see above.
//
DataTiddler.getDataTiddlerMatches = function(tiddler) {
	var text = tiddler.text;
	var info = DataTiddler.getDataSectionInfo(text);
	if (!info) {
		return null;
	}

	var prefix = text.substr(0,info.prefixEnd);
	var data = text.substr(info.dataStart, info.dataEnd-info.dataStart+1);
	var suffix = text.substr(info.suffixStart);
	
	return [text, prefix, data, suffix];
};


// Internal.
//
// Saves the data in a <data> block of the given tiddler (as a minor change). 
//
// The "chkAutoSave" and "chkForceMinorUpdate" options are respected. 
// I.e. the TiddlyWiki *file* is only saved when AutoSave is on.
//
// Notifications are not send. 
//
// This method should only be called when the data really has changed. 
//
// @param tiddler
//             the tiddler to be saved.
//
DataTiddler.save = function(tiddler) {

    var matches = DataTiddler.getDataTiddlerMatches(tiddler);

    var prefix;
    var suffix;
    if (matches === null) {
        prefix = tiddler.text;
        suffix = "";
    } else {
        prefix = matches[1];
        suffix = matches[3];
    }

    var dataText = DataTiddler.getDataTextOfTiddler(tiddler);
    var newText = 
            (dataText !== null) 
                ? prefix + "<data>" + dataText + "</data>" + suffix
                : prefix + suffix;
    if (newText != tiddler.text) {
        // make the change in the tiddlers text
        
        // ... see DataTiddler.MyTiddlerChangedFunction
        tiddler.isDataTiddlerChange = true;
        
        // ... do the action change
        tiddler.set(
                tiddler.title,
                newText,
                config.options.txtUserName, 
                config.options.chkForceMinorUpdate? undefined : new Date(),
                tiddler.tags);

        // ... see DataTiddler.MyTiddlerChangedFunction
        delete tiddler.isDataTiddlerChange;

        // Mark the store as dirty.
        store.dirty = true;
 
        // AutoSave if option is selected
        if(config.options.chkAutoSave) {
           saveChanges();
        }
    }
};

// Internal.
//
DataTiddler.MyTiddlerChangedFunction = function() {
    // Remove the data object from the tiddler when the tiddler is changed
    // by code other than DataTiddler code. 
    //
    // This is necessary since the data object is just a "cached version" 
    // of the data defined in the data section of the tiddler and the 
    // "external" change may have changed the content of the data section.
    // Thus we are not sure if the data object reflects the data section 
    // contents. 
    // 
    // By deleting the data object we ensure that the data object is 
    // reconstructed the next time it is needed, with the data defined by
    // the data section in the tiddler's text.
    
    // To indicate that a change is a "DataTiddler change" a temporary
    // property "isDataTiddlerChange" is added to the tiddler.
    if (this.dataObject && !this.isDataTiddlerChange) {
        delete this.dataObject;
    }
    
    // call the original code.
	DataTiddler.originalTiddlerChangedFunction.apply(this, arguments);
};


//============================================================================
// Formatters
//============================================================================

// This formatter ensures that "~<data>" is rendered as "<data>". This is used to 
// escape the "<data>" of a data section, just in case someone really wants to use
// "<data>" as a text in a tiddler and not start a data section.
//
// Same for </data>.
//
config.formatters.push( {
    name: "data-escape",
    match: "~<\\/?data>",

    handler: function(w) {
            w.outputText(w.output,w.matchStart + 1,w.nextMatch);
    }
} );


// This formatter ensures that <data>...</data> sections are not rendered.
//
config.formatters.push( {
    name: "data",
    match: "<data>",

    handler: function(w) {
		var info = DataTiddler.getDataSectionInfo(w.source);
		if (info && info.prefixEnd == w.matchStart) {
            w.nextMatch = info.suffixStart;
		} else {
			w.outputText(w.output,w.matchStart,w.nextMatch);
		}
    }
} );


//============================================================================
// Tiddler Class Extension
//============================================================================

// "Hijack" the changed method ---------------------------------------------------

DataTiddler.originalTiddlerChangedFunction = Tiddler.prototype.changed;
Tiddler.prototype.changed = DataTiddler.MyTiddlerChangedFunction;

// Define accessor methods -------------------------------------------------------

// Returns the value of the given data field of the tiddler. When no such field 
// is defined or its value is undefined the defaultValue is returned.
//
// When field is undefined (or null) the data object is returned. (See 
// DataTiddler.getDataObject.)
//
// @param field [may be null, undefined]
// @param defaultValue [may be null, undefined]
// @return [may be null, undefined]
//
Tiddler.prototype.data = function(field, defaultValue) {
    return (field) 
         ? DataTiddler.getTiddlerDataValue(this, field, defaultValue)
         : DataTiddler.getTiddlerDataObject(this);
};

// Sets the value of the given data field of the tiddler to the value. When the 
// value is equal to the defaultValue no value is set (and the field is removed).
//
// @param value [may be null, undefined]
// @param defaultValue [may be null, undefined]
//
Tiddler.prototype.setData = function(field, value, defaultValue) {
    DataTiddler.setTiddlerDataValue(this, field, value, defaultValue);
};


//============================================================================
// showData Macro
//============================================================================

config.macros.showData = {
     // Standard Properties
     label: "showData",
     prompt: "Display the values stored in the data section of the tiddler"
};

config.macros.showData.handler = function(place,macroName,params) {
    // --- Parsing ------------------------------------------

    var i = 0; // index running over the params
    // Parse the optional "JSON"
    var showInJSONFormat = false;
    if ((i < params.length) && params[i] == "JSON") {
        i++;
        showInJSONFormat = true;
    }
    
    var tiddlerName = story.findContainingTiddler(place).id.substr(7);
    if (i < params.length) {
        tiddlerName = params[i];
        i++;
    }

    // --- Processing ------------------------------------------
    try {
        if (showInJSONFormat) {
            this.renderDataInJSONFormat(place, tiddlerName);
        } else {
            this.renderDataAsTable(place, tiddlerName);
        }
    } catch (e) {
        this.createErrorElement(place, e);
    }
};

config.macros.showData.renderDataInJSONFormat = function(place,tiddlerName) {
    var text = DataTiddler.getDataText(tiddlerName);
    if (text) {
        createTiddlyElement(place,"pre",null,null,text);
    }
};

config.macros.showData.renderDataAsTable = function(place,tiddlerName) {
    var text = "|!Name|!Value|\n";
    var data = DataTiddler.getDataObject(tiddlerName);
    if (data) {
        for (var i in data) {
            var value = data[i];
            text += "|"+i+"|"+DataTiddler.stringify(value)+"|\n";
        }
    }
    
    wikify(text, place);
};


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

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


} // of "install only once"
// Used Globals (for JSLint) ==============

// ... TiddlyWiki Core
/*global 	createTiddlyElement, saveChanges, store, story, wikify */
// ... DataTiddler
/*global 	DataTiddler */
// ... JSON
/*global 	JSON */
			

/***
!JSON Code, used to serialize the data
***/
/*
Copyright (c) 2005 JSON.org

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The Software shall be used for Good, not Evil.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

/*
    The global object JSON contains two methods.

    JSON.stringify(value) takes a JavaScript value and produces a JSON text.
    The value must not be cyclical.

    JSON.parse(text) takes a JSON text and produces a JavaScript value. It will
    throw a 'JSONError' exception if there is an error.
*/
var JSON = {
    copyright: '(c)2005 JSON.org',
    license: 'http://www.crockford.com/JSON/license.html',
/*
    Stringify a JavaScript value, producing a JSON text.
*/
    stringify: function (v) {
        var a = [];

/*
    Emit a string.
*/
        function e(s) {
            a[a.length] = s;
        }

/*
    Convert a value.
*/
        function g(x) {
            var c, i, l, v;

            switch (typeof x) {
            case 'object':
                if (x) {
                    if (x instanceof Array) {
                        e('[');
                        l = a.length;
                        for (i = 0; i < x.length; i += 1) {
                            v = x[i];
                            if (typeof v != 'undefined' &&
                                    typeof v != 'function') {
                                if (l < a.length) {
                                    e(',');
                                }
                                g(v);
                            }
                        }
                        e(']');
                        return;
                    } else if (typeof x.toString != 'undefined') {
                        e('{');
                        l = a.length;
                        for (i in x) {
                            v = x[i];
                            if (x.hasOwnProperty(i) &&
                                    typeof v != 'undefined' &&
                                    typeof v != 'function') {
                                if (l < a.length) {
                                    e(',');
                                }
                                g(i);
                                e(':');
                                g(v);
                            }
                        }
                        return e('}');
                    }
                }
                e('null');
                return;
            case 'number':
                e(isFinite(x) ? +x : 'null');
                return;
            case 'string':
                l = x.length;
                e('"');
                for (i = 0; i < l; i += 1) {
                    c = x.charAt(i);
                    if (c >= ' ') {
                        if (c == '\\' || c == '"') {
                            e('\\');
                        }
                        e(c);
                    } else {
                        switch (c) {
                            case '\b':
                                e('\\b');
                                break;
                            case '\f':
                                e('\\f');
                                break;
                            case '\n':
                                e('\\n');
                                break;
                            case '\r':
                                e('\\r');
                                break;
                            case '\t':
                                e('\\t');
                                break;
                            default:
                                c = c.charCodeAt();
                                e('\\u00' + Math.floor(c / 16).toString(16) +
                                    (c % 16).toString(16));
                        }
                    }
                }
                e('"');
                return;
            case 'boolean':
                e(String(x));
                return;
            default:
                e('null');
                return;
            }
        }
        g(v);
        return a.join('');
    },
/*
    Parse a JSON text, producing a JavaScript value.
*/
    parse: function (text) {
        var p = /^\s*(([,:{}\[\]])|"(\\.|[^\x00-\x1f"\\])*"|-?\d+(\.\d*)?([eE][+-]?\d+)?|true|false|null)\s*/,
            token,
            operator;

        function error(m, t) {
            throw {
                name: 'JSONError',
                message: m,
                text: t || operator || token
            };
        }

        function next(b) {
            if (b && b != operator) {
                error("Expected '" + b + "'");
            }
            if (text) {
                var t = p.exec(text);
                if (t) {
                    if (t[2]) {
                        token = null;
                        operator = t[2];
                    } else {
                        operator = null;
                        try {
                            token = eval(t[1]);
                        } catch (e) {
                            error("Bad token", t[1]);
                        }
                    }
                    text = text.substring(t[0].length);
                } else {
                    error("Unrecognized token", text);
                }
            } else {
                token = operator = undefined;
            }
        }


        function val() {
            var k, o;
            switch (operator) {
            case '{':
                next('{');
                o = {};
                if (operator != '}') {
                    for (;;) {
                        if (operator || typeof token != 'string') {
                            error("Missing key");
                        }
                        k = token;
                        next();
                        next(':');
                        o[k] = val();
                        if (operator != ',') {
                            break;
                        }
                        next(',');
                    }
                }
                next('}');
                return o;
            case '[':
                next('[');
                o = [];
                if (operator != ']') {
                    for (;;) {
                        o.push(val());
                        if (operator != ',') {
                            break;
                        }
                        next(',');
                    }
                }
                next(']');
                return o;
            default:
                if (operator !== null) {
                    error("Missing value");
                }
                k = token;
                next();
                return k;
            }
        }
        next();
        return val();
    }
};

/***
!Setup the data serialization
***/

DataTiddler.format = "JSON";
DataTiddler.stringify = JSON.stringify;
DataTiddler.parse = JSON.parse;

//}}}

<<<
Women's Environment and Development Organization (WEDO)
Council of Women World Leaders (CWWL)
Heinrich B&ouml;ll Foundation
> //The following recommendations in the area of climate change and gender equality were developed on the occasion of the UN Secretary General's [[High-Level Climate Change Event|High-Level Event on Climate Change, September 24, 2007]] and the ~High-Level Roundtable "How a Changing Climate Impacts Women" organized by the partners above.^^/1^^//
>> //September 2007//
<<<
* The UN ~Secretary-General and governments should send a strong message to this year's UNFCCC COP-13 in Bali that gender equality is to be integrated as a crosscutting issue in the negotiations and debates and that women's equal participation must be ensured. Governments should draw on the innumerable global agreements that relate directly or indirectly to gender equality and climate change^^/2^^, as well as gender expertise within the UN system and at the national level.
* Given that women's knowledge and participation has been critical to the survival of entire communities in disaster situations, governments should take advantage of women's specialized skills in various aspects of their livelihood and natural resource management strategies that lend themselves to mitigation and adaptation.
* Since climate change disproportionately affects poor women, governments should analyze and identify gender-specific impacts and protection measures related to floods, droughts, heat waves, diseases, and other environmental changes and disasters. The global community should prioritize reducing the high levels of female mortality rates resulting from climate-induced disasters and livelihood changes.
* Given the vulnerability of the poor, and particularly women, to climate change, adequate funds must be allocated by Annex I countries to help these groups adapt to the impacts.
* Practical tools should be developed that allow governments and institutions to incorporate gender equality in climate change initiatives.
* Governments at national and local levels should develop strategies to enhance women's access to and control over natural resources, in order to reduce poverty, protect environmental resources, and ensure that women and poor communities can better cope with climate change.
* Governments and institutions should enhance opportunities for education and training in climate change mitigation and adaptation. Capacity building and technology transfer measures should draw on priorities put forward by women and poor communities.
* Women's participation in climate change related debates and planning must be enhanced by tools and procedures that augment their capacity and sensitize decision- makers to the advantages of equal participation.
* The UNFCCC should develop a gender strategy, invest in gender-specific climate change research, and establish a system for the use of gender-sensitive indicators and criteria for governments to use in national reporting to the UNFCCC Secretariat, adaptation planning, or projects under the Clean Development Mechanism (CDM).
* Market-based approaches to curbing climate change, such as the Clean Development Mechanism, should be made accessible to both women and men and ensure equitable benefits, considering that women and men do not have equal access to natural resources such as water and energy, land titles, credit, or information. In particular, the CDM should fund projects that make renewable energy technologies more available to women and meet their household needs.
* The gendered impacts of biofuels and nuclear energy as a solution to reducing greenhouse gas emissions should be assessed, in cooperation with gender experts and women's organizations.
* Since the UNFCCC emerged from UNCED, which outlines nine major groups that are essential to sustainable development, women and all major groups should be included as official focal points in the UNFCCC.

1/ These recommendations also draw on policy recommendations developed by the UNFCCC women's caucus and the CSD Women's Major Group.

2/ [[Chapter 24 of Agenda 21|Agenda 21, Chapter 24]] (UNCED 1992); [[Johannesburg Plan of Action|Johannesburg Plan of Implementation]] (WSSD 2002); Paragraph K of the [[Beijing Platform for Action]] (4th World Conference on Women 1995); World Conference on Human Rights (1993); International Conference on Population and Development (1994); World Summit for Social Development (1995); [[Millennium Declaration]] (2000); Convention on the Elimination of All Forms of Discrimination Against Women (1979); [[Convention on Biodiversity|Convention on Biological Diversity]] (1992); Convention to Combat Desertification (1994); Ministerial Declaration of the 3rd World Water Forum (2003); Children's World Summit (1990); [[Second United Nations Conference on Human Settlements|Habitat II]] (1996); World Summit on Food (1996); [[Hyogo Framework for Action]] (UN World Conference on Disaster Reduction 2005)

For more information, contact: Rebecca Pearl, WEDO  -  rebecca@wedo.org or 212-973-0325 More information: www.wedo.org ([[sustainable development section|http://www.wedo.org/programs.aspx?mode=development]])
[[Welcome]]
[[Rainwater Harvest Beautification Project]]
[[Most Recent Tiddlers]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = 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 text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}
Diane Paravazian has had more than twenty years of experience in language and cross-cultural education and training both in academic and business settings.  She has worked for the Port Authority of New York and New Jersey and Pace University as the Director of the World Trade Institute Language Center.  As Director of the Language Center, she has created innovative and customized language and culture programs for major corporations. As Director and Adjunct Professor of French at Pace University, with Pace University's Department of Modern Languages, she designed a new undergraduate major, and a related bridge program at Murry Bergtraum High School. Currently Ms. Paravazian is a Professor of French at St. John's University, is working on her Doctoral Dissertation in at New York University and serves on a number of boards, including the Business Advisory Board of Murry Bergtraum High School, and the American Association of Teachers of French, Metropolitan Chapter. She is Treasurer of the Société des Professeurs Français et Francophones d'Amérique, a foundation which offers grants to students studying French. Ms. Paravazian has received a number of academic fellowships and awards, including the French Government's "Chevalier des Palmes Académiques."

At the United Nations, Ms. Paravazian serves as UN Representative for the [[World Association of Girl Guides and Girl Scouts]]; she had previously represented the [[Armenian Assembly of America]] since 2000. During this time she has been a member of the DPI/NGO Planning Committee, Media Co-Chair for the Conference, member of the NGO Committees on Sustainable Development and Human Rights, Secretary of the NGO Committee on Education . She is currently active as  member at large on the NGO Committee on the Status of Women and Acting Co-Chair of the [[NGO Committee on Education]].
!!Expected Climatic Trigger for the Transition
> A decrease in rainfall is projected that would lead to the gradual death of the forest as fires become more frequent and extensive. Changes could occur over periods of decades once they started.
!!Expected Environmental Consequences
> Forest death would lead to loss of many ecosystems rich in biodiversity and significantly reduce carbon storage, amplifying global warming.
!!Likely Societal Significance
> In the region, loss of a very productive ecosystem and diminution of water storage. Globally, greater warming and significant loss of biodiversity
[[La Perla Garden]] is located at 76-80 West 105th Street, New York, NY, between Columbus and Manhattan Avenues, and is readily accessible by public transportation - just a few blocks from several subway & bus lines.
<<<
{{cleartable{
|''Subway'':<br>[img[http://www.la-perla-garden.net/1-27x26.gif]]  - 103rd and Broadway.<br>[img[http://www.la-perla-garden.net/b-27x26.gif]] [img[http://www.la-perla-garden.net/c-27x26.gif]] - 103rd and Central Park West. <br><br>''Bus''<br>[img[http://www.la-perla-garden.net/bus.gif]]  ''M11'' - 106th and Columbus. <br>[img[http://www.la-perla-garden.net/bus.gif]] ''M7'' - 104th & Amsterdam (uptown); 106th and Columbus (downtown). |The map below is from Google Maps.<br><html><iframe  width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?ie=UTF8&amp;oe=utf-8&amp;msa=0&amp;msid=100732368296564182313.00043ed2b02ff10a38734&amp;ll=40.798442,-73.96312&amp;spn=0.0064,0.01442&amp;om=1&amp;output=embed&amp;s=AARTsJqbhSCa-WREPcSUuUdbU6A9RMuQUg"></iframe></html>|
}}}
<<<
/***
|''Name:''|DisableWikiLinksPlugin|
|''Source:''|http://www.TiddlyTools.com/#DisableWikiLinksPlugin|
|''Author:''|Eric Shulman - ELS Design Studios|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.0.10|

This plugin allows you to disable TiddlyWiki's automatic WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links.  To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[...]]}}}.

You can also block automatic WikiWord linking behavior only for non-existing tiddler titles, while still automatically linking WikiWords that correspond to existing tiddlers titles or shadow tiddler titles.

You can also block specific selected WikiWords from being automatically linked by listing them in [[DisableWikiLinksList]], separated by whitespace.  This tiddler is optional and, when present, causes the listed words to always be excluded, even if automatic linking of other WikiWords is being permitted.  

Note: WikiWords contained in default ''shadow'' tiddlers will be automatically linked unless you select an additional checkbox option lets you disable these automatic links as well, though this is not recommended, since it can make it more difficult to access some TiddlyWiki standard default content (such as AdvancedOptions or SideBarTabs)

!!!!!Configuration
<<<
Self-contained control panel:
<<option chkDisableNonExistingWikiLinks>> Disable automatic WikiWord links for non-existing tiddlers
<<option chkDisableWikiLinks>> Disable ALL automatic WikiWord tiddler links
<<option chkAllowLinksFromShadowTiddlers>> ... except for WikiWords contained in shadow tiddlers
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''DisableWikiLinksPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2006.12.31 [1.4.0]'' in formatter, test for chkDisableNonExistingWikiLinks
''2006.12.09 [1.3.0]'' in formatter, test for excluded wiki words specified in DisableWikiLinksList
''2006.12.09 [1.2.2]'' fix logic in autoLinkWikiWords() (was allowing links TO shadow tiddlers, even when chkDisableWikiLinks is TRUE).  
''2006.12.09 [1.2.1]'' revised logic for handling links in shadow content
''2006.12.08 [1.2.0]'' added hijack of Tiddler.prototype.autoLinkWikiWords so regular (non-bracketed) WikiWords won't be added to the missing list
''2006.05.24 [1.1.0]'' added option to NOT bypass automatic wikiword links when displaying default shadow content (default is to auto-link shadow content)
''2006.02.05 [1.0.1]'' wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
''2005.12.09 [1.0.0]'' initial release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.disableWikiLinks= {major: 1, minor: 4, revision: 0, date: new Date(2006,12,31)};

if (config.options.chkDisableNonExistingWikiLinks==undefined) config.options.chkDisableNonExistingWikiLinks= false;
if (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks= false;
if (config.options.chkAllowLinksFromShadowTiddlers==undefined) config.options.chkAllowLinksFromShadowTiddlers=true;

// find the formatter for wikiLink and replace handler with 'pass-thru' rendering
initDisableWikiLinksFormatter();
function initDisableWikiLinksFormatter() {
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);
	config.formatters[i].coreHandler=config.formatters[i].handler;
	config.formatters[i].handler=function(w) {
		// supress any leading "~" (if present)
		var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
		var title=w.matchText.substr(skip);
		var exists=store.tiddlerExists(title);
		var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title);

		// check for specific excluded wiki words
		var t=store.getTiddlerText("DisableWikiLinksList")
		if (t && t.length && t.indexOf(w.matchText)!=-1)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }

		// if not disabling links from shadows (default setting)
		if (config.options.chkAllowLinksFromShadowTiddlers && inShadow)
			return this.coreHandler(w);

		// check for non-existing non-shadow tiddler
		if (config.options.chkDisableNonExistingWikiLinks && !exists)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }

		// if not enabled, just do standard WikiWord link formatting
		if (!config.options.chkDisableWikiLinks)
			return this.coreHandler(w);

		// just return text without linking
		w.outputText(w.output,w.matchStart+skip,w.nextMatch)
	}
}

Tiddler.prototype.coreAutoLinkWikiWords = Tiddler.prototype.autoLinkWikiWords;
Tiddler.prototype.autoLinkWikiWords = function()
{
	// DEBUG alert("processing: "+this.title);
	// if all automatic links are not disabled, just return results from core function
	if (!config.options.chkDisableWikiLinks)
		return this.coreAutoLinkWikiWords.apply(this,arguments);
	return false;
}
//}}}
Title:  Title
Author: Author
Date: Date
You are welcome to download this TiddlyWiki web site and to customize it for your own purposes. All you need to do is ''save this page'' - as a //Web page, HTML only// onto your local hard drive, or to a USB memory card. 

Once you have downloaded the page, and opened the local copy of the web site, you will be able to explore the wonderful world of TiddlyWiki in far greater depth than is possible if you only navigate the page on a web site. Go to the [[Setup Menu]] that shows you how to take the simple steps to customize this web site and make it into an information habitat that you can then add on to, rebuild, re-organize - and share and exchange with others what we have collected and learned about the scope and dimensions of the climate change crisis - and how we are called to respond.

This site is part of an evolving network of sites and initiatives of [[Climate Change 2.0]] that is  based on appreciation of the transformative characteristics of a knowledge-based universe and the remarkable evolution of software and related resources - from email and email groups/lists, web browsing and Google searches to blogs, wikis & tiddlywikis, streaming media and ~YouTube, increasingly inexpensive devices - from cell phones to Ipods, video cameras, often in a wireless environment - is transforming our ability to gather and organize information, to exchange it freely with friends and colleagues and to collaborate on anything from writing enhanced software to developing and facilitating a global framework for action to come to terms with the [[climate change crisis|Climate change crisis]]

/%Wikis - wiki is a Hawaiian word the means swift or swiftly - have been playing a vital role in the evoling global commons, both by the 
within which there is a progressive emergence of free and open source software that serves as a vital foundation for an Earth community that recognizes knowledge as being at the heart of wealth, and in a networked information economy in which software, free software, playing a role in the digital economy that streeel mills did in the industrial revolution.%/
<html>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/vo9zbJZxTtQ&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/vo9zbJZxTtQ&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</html>
5:53 minutes
{{iframe{''Note'': This is a "framed" page from the '' '' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at }}}
<html><iframe
	src = "http://www.bbg.org/gar2/topics/sustainable/handbooks/easycompost/1.html"
	title = "Easy Compost - Brooklyn Botanic Garden"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
''Economics of Climate Change: The Stern Review'' is a major publication, published in October 2006, that was commissioned by the Treasury Department of the British Government with the mandate of reviewing the issue of the economic dimensions of climate change - a key area that has not previously gained sufficient attention. 

The web-based version of the ''Stern Review'' has been "translated" by the [[NGO Committee on Education]] into the "language" of a TiddlyPerfect platform, with the contents housed in a DataPerfect database from which the tiddlers and tags were generated, and is designed to optimize the accessibility and navigability of the contents of the report for reading in a digital environment, and to begin to raise the vital issue of the economics of information as it relates to climate change. The original, official version of the report was published in a pdf version. - a format that is optimized for print rather than for on-screen reading, and that is relatively cumbersome to navigate through the contents; to improve the online value of the pdf files of the Stern Review, an extensive set of bookmarks have been added to the pdf files - none having been included in the official pdf files - to make it easier for those who prefer to read the online version to find their way around the lengthy review..

The TiddlyPerfect version of the Stern Review also includes a shortened Executive Summary - the original being more than thirty pages long, and highlights the key concepts

http://www.climate-change-two.net/stern-review/
/***
|Name|EditFieldPlugin|
|Source|http://www.TiddlyTools.com/#EditFieldPlugin|
|Version|1.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|extend core edit macro for use in ViewTemplates or direct embedding in tiddler content|

This HIJACK extends the core {{{<<edit fieldname>>}}} macro for use in a ViewTemplate or directly embedded in tiddler content.  Enter single- or multi- line text from 'view mode' tiddler displays and save/discard your input using ENTER, ESC, or automatic 'blur' handling.
!!!!!Usage
<<<
Normally, when you edit a tiddler, any changes you make are only saved (or discarded) when you press the "done" (or "cancel") command in the tiddler editor's toolbar.  However, when in a 'view mode' context, these command items are not available, and so cannot be used to trigger the 'save/discard' handling once you have decided that your input activities are complete.  Instead, you will be automatically prompted to save/discard your changes (if any) as soon as you move away from a text edit field or multi-line text area.  Alternatively, pressing ENTER while in an edit field will save your input, while pressing ESCAPE will abandon your input (after prompting for confirmation).  
<<<
!!!!!Examples
<<<
{{{<<edit foobar>>}}}
<<edit foobar>>
{{{<<edit mumble 5>>}}}
<<edit mumble 5>>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document: [[EditFieldPlugin]]
<<<
!!!!!Revision History
<<<
''2007.08.22 [1.0.0]'' initial release
<<<
!!!!!Credits
<<<
This feature was developed by Eric L Shulman / ELS Design Studios
<<<
!!!!!Code
***/
//{{{
version.extensions.editFieldPlugin= {major: 1, minor: 0, revision: 0, date: new Date(2007,8,22)};

config.macros.edit.editFieldPlugin_savedHandler=config.macros.edit.handler;
config.macros.edit.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	// let core create edit field
	config.macros.edit.editFieldPlugin_savedHandler.apply(this,arguments);
	// get edit field or textarea
	var ins=place.getElementsByTagName(params[0]=="text"||params[1]?'textarea':'input');
	var e=ins[ins.length-1];
	// if viewing tiddler, add autosave handlers
	var here=story.findContainingTiddler(place);
	if (here && here.getAttribute("template").indexOf("ViewTemplate")!=-1) {
		story.setDirty(tiddler.title,false); // clear tiddler ("dirty") flag set by core when field was created
		var field=e.getAttribute("edit");
		var val=store.getValue(tiddler.title,field); if (!val) val="";
		e.setAttribute("currval",val); // remember starting value
		e.setAttribute("tiddler",tiddler.title); // remember target tiddler
		e.onkeydown=function(ev) { // ENTER key=save (for single-line edit fields only)
			var event=ev?ev:window.event;
			this.setAttribute("keyCode",event.keyCode); // save last keyCode for blur() handler
			if (event.keyCode==13 && this.nodeName.toUpperCase()!="TEXTAREA")
				this.saveField(); // save input to tiddler field
		}
		e.onblur=function(ev) { // accept or reject input when focus moves away from field
			var event=ev?ev:window.event;
			var tid=this.getAttribute("tiddler"); if (!tid || !tid.length) return;
			var field=this.getAttribute("edit");
			if (this.value!=this.getAttribute("currval")) { // if value has changed
				if (this.getAttribute("keyCode")=="27") { // if user pressed ESC
					var msg="Abandon changes to %0@%1?".format([field,tid]);
					if (confirm(msg)) this.value=this.getAttribute("currval"); // reset to starting value
					this.id=new Date().getTime(); // set unique ID
					setTimeout("document.getElementById('"+this.id+"').focus()",1); // restore focus (after blur completes)
				} else { // other focus change events
					var msg="Save changes to %0@%1?".format([field,tid]);
					if (confirm(msg)) this.saveField(); // save input to tiddler field, then continue blur
					else this.value=this.getAttribute("currval"); // reset to starting value, then continue blur
				}
			}
		};
		e.saveField=function() { // save input value to tiddler field (create, touch or rename tiddler as needed)
			var tid=this.getAttribute("tiddler"); if (!tid || !tid.length) return;
			var field=this.getAttribute("edit");
			var title=(field=="title")?this.value:tid;
			if (!title.length) { // prevent blank tiddler title from being used
				this.value=this.getAttribute("currval"); // reset to starting value
				this.id=new Date().getTime(); // set unique ID
				setTimeout("displayMessage('Please enter a non-blank value')",1); // notify user
				setTimeout("document.getElementById('"+this.id+"').focus()",2); // set focus to continue editing
				return;
			}
			var t=store.getTiddler(tid);
			store.suspendNotifications();
			var anim=config.options.chkAnimate; config.options.chkAnimate=false; // suspend animation
			store.saveTiddler(t?tid:title,title,t?t.body:"",config.options.txtUserName,new Date(),t?t.tags:[],t?t.fields:null);
			store.setValue(title,field,this.value); // save value in tiddler field
			this.setAttribute("currval",this.value); // remember new starting value
			if (tid!=title) // if title changed, display renamed tiddler in place of current one
				{ story.displayTiddler(story.findContainingTiddler(this),title); story.closeTiddler(tid); }
			if (field=="text") // if tiddler content changed, refresh tiddler display
				{ story.refreshTiddler(title,null,true); }
			config.options.chkAnimate=anim; // resume animation
			store.resumeNotifications();
		};
	}
}
//}}}
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler jump'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></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'></span></div>
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler jump'></div>
<!--}}}-->
<<tiddler "DPI/NGO Workshop">> [[edit contents|DPI/NGO Workshop]]
{{iframe{''Note'': This is a "framed" page from the ''Wildlife Conservation Society'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.wcs.org/sw-high_tech_tools/landscapeecology/mannahatta/downloads?preview=&psid=&ph=class%253DAWC-14877272}}}
<html><iframe
	src = "http://www.wcs.org/sw-high_tech_tools/landscapeecology/mannahatta/downloads?preview=&psid=&ph=class%253DAWC-14877272"
	title = "Educational Resources of the Mannahatta Project!"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
!!!Expected Climatic Trigger for the Transition
Cooling of the stratosphere caused by the increasing concentrations of greenhouse gases will create temperatures conducive to sharper reductions in springtime ozone.
!!!Expected Environmental Consequences
Reduced springtime ozone levels will significantly increase the intensity of ultraviolet (UV) radiation at the surface, adversely affecting both marine and terrestrial ecosystems and food chains
!!!Likely Societal Significance
In high-latitude regions, the heightened levels of UV radiation will adversely affect human health, especially as warming promotes greater outdoor activity without appropriate protection.
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5079318862798532401%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
6 photos
The Executive Committee of the [[NGO Committee on Education]] consists of the Officers, Members-at-Large, and Sub-Committee Chairs (//ex officio//):
!!! Co-Chairs
* [[Diane Paravazian]], [[World Association of Girl Guides and Girl Scouts]]
* [[Faye C. Feller]], [[Information Habitat: Where Information Lives]]
!!! Secretary
* ''Catherine Waters'', [[Catholic International Education Office]]
!!! Treasurer
* [[Daphne Cohen]], [[International Humanist and Ethical Union]]
!!!Members-at-Large
* ''Catherine Moore''. [[International Federation of University Women]]
* ''Doris Sargeant'', [[Rotary International]]
* ''Cora Weiss'', [[The Hague Appeal for Peace]]
!!!Sub-Committee Chairs
* ''Information & Communications Sub-Committee''
** [[Robert Pollard]], [[Information Habitat: Where Information Lives]]
/***
|Name|ExportTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#ExportTiddlersPlugin|
|Version|2.4.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|select and extract tiddlers from your ~TiddlyWiki documents and save them to a local file|

When many people edit copies of the same TiddlyWiki document, the ability to easily copy and share these changes so they can then be redistributed to the entire group is very important.  This ability is also very useful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)

ExportTiddlersPlugin let you ''select and extract tiddlers from your ~TiddlyWiki documents and save them to a local file'' or a remote server (requires installation of compatible server-side scripting, still under development...).  An interactive control panel lets you specify a destination, and then select which tiddlers to export.  A convenient 'selection filter' helps you pick desired tiddlers by specifying a combination of modification dates, tags, or tiddler text to be matched or excluded.  ''Tiddler data can be output as ~TiddlyWiki "storeArea ~DIVs" that can be imported into another ~TiddlyWiki or as ~RSS-compatible XML that can be published for RSS syndication.''

!!!!!Inline interface (live)
<<<
<<exportTiddlers inline>>
<<<
!!!!!Usage
<<<
Optional "special tiddlers" used by this plugin:
* SiteUrl^^
URL for official server-published version of document being viewed (used in XML export)
default: //none//^^
* SiteHost^^
host name/address for remote server (e.g., "www.server.com" or "192.168.1.27")
default: //none//^^
* SitePost^^
remote path/filename for submitting changes (e.g., "/cgi-bin/submit.cgi")
default: //none//^^
* SiteParams^^
arguments (if any) for server-side receiving script
default: //none//^^
* SiteNotify^^
addresses (if any) for sending automatic server-side email notices
default: //none//^^
* SiteID^^
username or other authorization identifier for login-controlled access to remote server
default: current TiddlyWiki username (e.g., "YourName")^^
* SiteDate^^
stored date/time stamp for most recent published version of document
default: current document.modified value (i.e., the 'file date')^^
<<<
!!!!!Example
<<<
<<exportTiddlers>>
<<<
!!!!!Installation
<<<
Import (or copy/paste) the following tiddlers into your document:
''ExportTiddlersPlugin'' (tagged with <<tag systemConfig>>)

create/edit ''SideBarOptions'': (sidebar menu items) 
^^Add {{{<<exportTiddlers>>}}} macro^^
<<<
!!!!!Revision History
<<<
''2007.07.16 [2.4.1]'' in exportTWHeader(), reset HTML source 'markup' so installed markup is NOT copied to new file.
''2007.06.30 [2.4.0]'' added "select related tiddlers" feature.  Recursively scans the tiddler links[] info to find all tiddlers referenced by any of the currently selected tiddler, and then selects them all (including the original tiddlers).  ''//Theoretically//'', selecting all related tiddlers should ensure that the exported file contains all tiddlers needed to properly render all of the originally selected tiddlers.
''2007.04.19 [2.3.0]'' in exportData(), pass SiteURL value as param to saveToRss().  Fixes 'undefined' appearing in tiddler link in XML output.  Also, in refreshExportList(), added 'sort by tags'.  Also, added 'group select'... selecting a heading (date,author,tag) auto-selects all tiddlers in that group.
''2007.03.02 [2.2.6]'' in onClickExportButton(), when selecting open tiddlers for TW2.2, look for "storyDisplay" instead of "tiddlerDisplay" but keep fallback to "tiddlerDisplay" for TW2.1 or earlier
''2007.03.01 [2.2.5]'' removed hijack of store.saveChanges() (was catching save on http:, but there are other solutions that do a much better job of handling save to server.
|please see [[ExportTiddlersPluginHistory]] for additional revision details|
''2005.10.09 [0.0.0]'' development started
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.exportTiddlers = {major: 2, minor: 4, revision: 1, date: new Date(2007,7,16)};
//}}}

// // macro handler
//{{{
config.macros.exportTiddlers = {
	label: "export tiddlers",
	prompt: "Copy selected tiddlers to an export document",
	newdefault: "export.html",
	datetimefmt: "0MM/0DD/YYYY 0hh:0mm:0ss" // for "filter date/time" edit fields
};

config.macros.exportTiddlers.handler = function(place,macroName,params) {
	if (params[0]!="inline")
		{ createTiddlyButton(place,this.label,this.prompt,onClickExportMenu); return; }
	var panel=createExportPanel(place);
	panel.style.position="static";
	panel.style.display="block";
}

function createExportPanel(place) {
	var panel=document.getElementById("exportPanel");
	if (panel) { panel.parentNode.removeChild(panel); }
	setStylesheet(config.macros.exportTiddlers.css,"exportTiddlers");
	panel=createTiddlyElement(place,"span","exportPanel",null,null)
	panel.innerHTML=config.macros.exportTiddlers.html;
	exportShowPanel(document.location.protocol);
	exportInitFilter();
	refreshExportList(0);
	return panel;
}

function onClickExportMenu(e)
{
	if (!e) var e = window.event;
	var parent=resolveTarget(e).parentNode;
	var panel = document.getElementById("exportPanel");
	if (panel==undefined || panel.parentNode!=parent)
		panel=createExportPanel(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") refreshExportList(0); // update list when panel is made visible
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
}
//}}}

// // IE needs explicit scoping for functions called by browser events
//{{{
window.onClickExportMenu=onClickExportMenu;
window.onClickExportButton=onClickExportButton;
window.exportShowPanel=exportShowPanel;
window.exportShowFilterFields=exportShowFilterFields;
window.refreshExportList=refreshExportList;
//}}}

// // CSS for floating export control panel
//{{{
config.macros.exportTiddlers.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;\
}\
#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; }\
#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%; }\
';
//}}}

// // HTML for export control panel interface
//{{{
config.macros.exportTiddlers.html = '\
<!-- output target and format -->\
<table cellpadding="0" cellspacing="0"><tr><td width=50%>\
	export to\
	<select size=1 id="exportTo" onchange="exportShowPanel(this.value);">\
	<option value="file:" SELECTED>this computer</option>\
	<option value="http:">web server (http)</option>\
	<option value="https:">secure web server (https)</option>\
	<option value="ftp:">file server (ftp)</option>\
	</select>\
</td><td width=50%>\
	output format\
	<select id="exportFormat" size=1>\
	<option value="DIV">TiddlyWiki export file</option>\
	<option value="TW">TiddlyWiki document</option>\
	<option value="XML">RSS feed (XML)</option>\
	</select>\
</td></tr></table>\
\
<!-- export to local file  -->\
<div id="exportLocalPanel" style="margin-top:5px;">\
local path/filename<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="this.previousSibling.value=window.promptForExportFilename(this);">\
<!--<input type="file" id="exportFilename" size=57 style="width:100%"><br>-->\
</div><!--panel-->\
\
<!-- export to http server -->\
<div id="exportHTTPPanel" style="display:none;margin-top:5px;">\
<table><tr><td align=left>\
	server location, script, and parameters<br>\
</td><td align=right>\
	<input type="checkbox" class="chk" id="exportNotify"\
		onClick="document.getElementById(\'exportSetNotifyPanel\').style.display=this.checked?\'block\':\'none\'"> notify\
</td></tr></table>\
<input type="text" id="exportHTTPServerURL" onfocus="this.select()"><br>\
<div id="exportSetNotifyPanel" style="display:none">\
	send email notices to<br>\
	<input type="text" id="exportNotifyTo" onfocus="this.select()"><br>\
</div>\
</div><!--panel-->\
\
<!-- export to ftp server -->\
<div id="exportFTPPanel" style="display:none;margin-top:5px;">\
<table cellpadding="0" cellspacing="0" width="32%"><tr valign="top"><td>\
	host server<br>\
	<input type="text" id="exportFTPHost" onfocus="this.select()"><br>\
</td><td width="32%">\
	username<br>\
	<input type="text" id="exportFTPID" onfocus="this.select()"><br>\
</td><td width="32%">\
	password<br>\
	<input type="password" id="exportFTPPW" onfocus="this.select()"><br>\
</td></tr></table>\
FTP path/filename<br>\
<input type="text" id="exportFTPFilename" onfocus="this.select()"><br>\
</div><!--panel-->\
\
<!-- notes -->\
notes<br>\
<textarea id="exportNotes" rows=3 cols=40 style="height:4em;margin-bottom:5px;" onfocus="this.select()"></textarea> \
\
<!-- list of tiddlers -->\
<table><tr align="left"><td>\
	select:\
	<a href="JavaScript:;" id="exportSelectAll"\
		onclick="onClickExportButton(this)" title="select all tiddlers">\
		&nbsp;all&nbsp;</a>\
	<a href="JavaScript:;" id="exportSelectChanges"\
		onclick="onClickExportButton(this)" title="select tiddlers changed since last save">\
		&nbsp;changes&nbsp;</a> \
	<a href="JavaScript:;" id="exportSelectOpened"\
		onclick="onClickExportButton(this)" title="select tiddlers currently being displayed">\
		&nbsp;opened&nbsp;</a> \
	<a href="JavaScript:;" id="exportSelectRelated"\
		onclick="onClickExportButton(this)" title="select all tiddlers related (by link or transclusion) to the currently selected tiddlers">\
		&nbsp;related&nbsp;</a> \
	<a href="JavaScript:;" id="exportToggleFilter"\
		onclick="onClickExportButton(this)" title="show/hide selection filter">\
		&nbsp;filter&nbsp;</a>  \
</td><td align="right">\
	<a href="JavaScript:;" id="exportListSmaller"\
		onclick="onClickExportButton(this)" title="reduce list size">\
		&nbsp;&#150;&nbsp;</a>\
	<a href="JavaScript:;" id="exportListLarger"\
		onclick="onClickExportButton(this)" title="increase list size">\
		&nbsp;+&nbsp;</a>\
</td></tr></table>\
<select id="exportList" multiple size="10" style="margin-bottom:5px;"\
	onchange="refreshExportList(this.selectedIndex)">\
</select><br>\
</div><!--box-->\
\
<!-- 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="onClickExportButton(this)" title="hide selection filter">hide</a>\
</td></tr></table>\
<div class="box">\
<input type="checkbox" class="chk" id="exportFilterStart" value="1"\
	onclick="exportShowFilterFields(this)"> starting date/time<br>\
<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\
	<select size=1 id="exportFilterStartBy" onchange="exportShowFilterFields(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="site">SiteDate</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="document.getElementById(\'exportFilterStartBy\').value=\'other\';">\
</td></tr></table>\
<input type="checkbox" class="chk" id="exportFilterEnd" value="1"\
	onclick="exportShowFilterFields(this)"> ending date/time<br>\
<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\
	<select size=1 id="exportFilterEndBy" onchange="exportShowFilterFields(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="site">SiteDate</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="document.getElementById(\'exportFilterEndBy\').value=\'other\';">\
</td></tr></table>\
<input type="checkbox" class="chk" id=exportFilterTags value="1"\
	onclick="exportShowFilterFields(this)"> match tags<br>\
<input type="text" id="exportTags" onfocus="this.select()">\
<input type="checkbox" class="chk" id=exportFilterText value="1"\
	onclick="exportShowFilterFields(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="btn3" onclick="onClickExportButton(this)"\
	id="exportFilter" value="apply filter">\
<input type=button class="btn3" onclick="onClickExportButton(this)"\
	id="exportStart" value="export tiddlers">\
<input type=button class="btn3" onclick="onClickExportButton(this)"\
	id="exportClose" value="close">\
</div><!--center-->\
';
//}}}

// // initialize interface
// // exportShowPanel(which)
//{{{
function exportShowPanel(which) {
	var index=0; var panel='exportLocalPanel';
	switch (which) {
		case 'file:':
		case undefined:
			index=0; panel='exportLocalPanel'; break;
		case 'http:':
			index=1; panel='exportHTTPPanel'; break;
		case 'https:':
			index=2; panel='exportHTTPPanel'; break;
		case 'ftp:':
			index=3; panel='exportFTPPanel'; break;
		default:
			alert("Sorry, export to "+which+" is not yet available");
			break;
	}
	exportInitPanel(which);
	document.getElementById('exportTo').selectedIndex=index;
	document.getElementById('exportLocalPanel').style.display='none';
	document.getElementById('exportHTTPPanel').style.display='none';
	document.getElementById('exportFTPPanel').style.display='none';
	document.getElementById(panel).style.display='block';
}
//}}}

// // exportInitPanel(which)
//{{{
function exportInitPanel(which) {
	switch (which) {
		case "file:": // LOCAL EXPORT PANEL: file/path:
			// ** no init - security issues in IE **
			break;
		case "http:": // WEB EXPORT PANEL
		case "https:": // SECURE WEB EXPORT PANEL
			// url
			if (store.tiddlerExists("unawiki_download")) {
				var theURL=store.getTiddlerText("unawiki_download");
				theURL=theURL.replace(/\[\[download\|/,'').replace(/\]\]/,'');
				var title=(store.tiddlerExists("unawiki_host"))?"unawiki_host":"SiteHost";
				var theHost=store.getTiddlerText(title);
				if (!theHost || !theHost.length) theHost=document.location.host;
				if (!theHost || !theHost.length) theHost=title;
			}
			// server script/params
			var title=(store.tiddlerExists("unawiki_host"))?"unawiki_host":"SiteHost";
			var theHost=store.getTiddlerText(title);
			if (!theHost || !theHost.length) theHost=document.location.host;
			if (!theHost || !theHost.length) theHost=title;
			// get POST
			var title=(store.tiddlerExists("unawiki_post"))?"unawiki_post":"SitePost";
			var thePost=store.getTiddlerText(title);
			if (!thePost || !thePost.length) thePost="/"+title;
			// get PARAMS
			var title=(store.tiddlerExists("unawiki_params"))?"unawiki_params":"SiteParams";
			var theParams=store.getTiddlerText(title);
			if (!theParams|| !theParams.length) theParams=title;
			var serverURL = which+"//"+theHost+thePost+"?"+theParams;
			document.getElementById("exportHTTPServerURL").value=serverURL;
			// get NOTIFY
			var theAddresses=store.getTiddlerText("SiteNotify");
			if (!theAddresses|| !theAddresses.length) theAddresses="SiteNotify";
			document.getElementById("exportNotifyTo").value=theAddresses;
			break;
		case "ftp:": // FTP EXPORT PANEL
			// host
			var siteHost=store.getTiddlerText("SiteHost");
			if (!siteHost || !siteHost.length) siteHost=document.location.host;
			if (!siteHost || !siteHost.length) siteHost="SiteHost";
			document.getElementById("exportFTPHost").value=siteHost;
			// username
			var siteID=store.getTiddlerText("SiteID");
			if (!siteID || !siteID.length) siteID=config.options.txtUserName;
			document.getElementById("exportFTPID").value=siteID;
			// password
			document.getElementById("exportFTPPW").value="";
			// file/path
			document.getElementById("exportFTPFilename").value="";
			break;
	}
}
//}}}

// // exportInitFilter()
//{{{
function exportInitFilter() {
	// start date
	document.getElementById("exportFilterStart").checked=false;
	document.getElementById("exportStartDate").value="";
	// end date
	document.getElementById("exportFilterEnd").checked=false;
	document.getElementById("exportEndDate").value="";
	// tags
	document.getElementById("exportFilterTags").checked=false;
	document.getElementById("exportTags").value="";
	// text
	document.getElementById("exportFilterText").checked=false;
	document.getElementById("exportText").value="";
	// show/hide filter input fields
	exportShowFilterFields();
}
//}}}

// // exportShowFilterFields(which)
//{{{
function exportShowFilterFields(which) {
	var show;

	show=document.getElementById('exportFilterStart').checked;
	document.getElementById('exportFilterStartBy').style.display=show?"block":"none";
	document.getElementById('exportStartDate').style.display=show?"block":"none";
	var val=document.getElementById('exportFilterStartBy').value;
	document.getElementById('exportStartDate').value
		=getFilterDate(val,'exportStartDate').formatString(config.macros.exportTiddlers.datetimefmt);
	 if (which && (which.id=='exportFilterStartBy') && (val=='other'))
		document.getElementById('exportStartDate').focus();

	show=document.getElementById('exportFilterEnd').checked;
	document.getElementById('exportFilterEndBy').style.display=show?"block":"none";
	document.getElementById('exportEndDate').style.display=show?"block":"none";
	var val=document.getElementById('exportFilterEndBy').value;
	document.getElementById('exportEndDate').value
		=getFilterDate(val,'exportEndDate').formatString(config.macros.exportTiddlers.datetimefmt);
	 if (which && (which.id=='exportFilterEndBy') && (val=='other'))
		document.getElementById('exportEndDate').focus();

	show=document.getElementById('exportFilterTags').checked;
	document.getElementById('exportTags').style.display=show?"block":"none";

	show=document.getElementById('exportFilterText').checked;
	document.getElementById('exportText').style.display=show?"block":"none";
}
//}}}

// // onClickExportButton(which): control interactions
//{{{
function onClickExportButton(which)
{
	// DEBUG alert(which.id);
	var theList=document.getElementById('exportList'); if (!theList) return;
	var count = 0;
	var total = store.getTiddlers('title').length;
	switch (which.id)
		{
		case 'exportFilter':
			count=filterExportList();
			var panel=document.getElementById('exportFilterPanel');
			if (count==-1) { panel.style.display='block'; break; }
			document.getElementById("exportStart").disabled=(count==0);
			clearMessage(); displayMessage("filtered "+formatExportMessage(count,total));
			if (count==0) { alert("No tiddlers were selected"); panel.style.display='block'; }
			break;
		case 'exportStart':
			exportTiddlers();
			break;
		case 'exportHideFilter':
		case 'exportToggleFilter':
			var panel=document.getElementById('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;
			}
			document.getElementById("exportStart").disabled=(count==0);
			clearMessage(); displayMessage(formatExportMessage(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;
			}
			document.getElementById("exportStart").disabled=(count==0);
			clearMessage(); displayMessage(formatExportMessage(count,count));
			break;
		case 'exportSelectOpened':
			for (var t = 0; t < theList.options.length; t++) theList.options[t].selected=false;
			var tiddlerDisplay = document.getElementById("tiddlerDisplay"); // for TW2.1-
			if (!tiddlerDisplay) tiddlerDisplay = document.getElementById("storyDisplay"); // for TW2.2+
			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;
				}
			}
			document.getElementById("exportStart").disabled=(count==0);
			clearMessage(); displayMessage(formatExportMessage(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);
			clearMessage(); displayMessage(formatExportMessage(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':
			document.getElementById('exportPanel').style.display='none';
			break;
		}
}
//}}}

// // list display
//{{{
function formatExportMessage(count,total)
{
	var txt=total+' tiddler'+((total!=1)?'s':'')+" - ";
	txt += (count==0)?"none":(count==total)?"all":count;
	txt += " selected for export";
	return txt;
}

function refreshExportList(selectedIndex)
{
	var theList  = document.getElementById("exportList");
	var sort;
	if (!theList) return;
	// get the sort order
	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
	for (var t=0,count=0; 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" button if no tiddlers selected
	document.getElementById("exportStart").disabled=(count==0);
	// show selection count
	var tiddlers = store.getTiddlers('title');
	if (theList.options.length) { clearMessage(); displayMessage(formatExportMessage(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
}
//}}}

// // list filtering
//{{{
function getFilterDate(val,id)
{
	var result=0;
	switch (val) {
		case 'site':
			var timestamp=store.getTiddlerText("SiteDate");
			if (!timestamp) timestamp=document.lastModified;
			result=new Date(timestamp);
			break;
		case 'file':
			result=new Date(document.lastModified);
			break;
		case 'other':
			result=new Date(document.getElementById(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;
	}
	// DEBUG alert('getFilterDate('+val+','+id+')=='+result+"\nnow="+now);
	return result;
}

function filterExportList()
{
	var theList  = document.getElementById("exportList"); if (!theList) return -1;

	var filterStart=document.getElementById("exportFilterStart").checked;
	var val=document.getElementById("exportFilterStartBy").value;
	var startDate=getFilterDate(val,'exportStartDate');

	var filterEnd=document.getElementById("exportFilterEnd").checked;
	var val=document.getElementById("exportFilterEndBy").value;
	var endDate=getFilterDate(val,'exportEndDate');

	var filterTags=document.getElementById("exportFilterTags").checked;
	var tags=document.getElementById("exportTags").value;

	var filterText=document.getElementById("exportFilterText").checked;
	var text=document.getElementById("exportText").value;

	if (!(filterStart||filterEnd||filterTags||filterText)) {
		alert("Please set the selection filter");
		document.getElementById('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;
	}

	// 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 && !matchTags(tiddler,tags))
		|| (filterText && (tiddler.text.indexOf(text)==-1) && (tiddler.title.indexOf(text)==-1)))
			sel=false;
		opt.selected=sel;
		count+=sel?1:0;
		total++;
	}
	return count;
}
//}}}

//{{{
function matchTags(tiddler,cond)
{
	if (!cond||!cond.trim().length) return false;

	// build a regex of all tags as a big-old regex that 
	// OR's the tags together (tag1|tag2|tag3...) in length order
	var tgs = store.getTags();
	if ( tgs.length == 0 ) return results ;
	var tags = tgs.sort( function(a,b){return (a[0].length<b[0].length)-(a[0].length>b[0].length);});
	var exp = "(" + tags.join("|") + ")" ;
	exp = exp.replace( /(,[\d]+)/g, "" ) ;
	var regex = new RegExp( exp, "ig" );

	// build a string such that an expression that looks like this: tag1 AND tag2 OR NOT tag3
	// turns into : /tag1/.test(...) && /tag2/.test(...) || ! /tag2/.test(...)
	cond = cond.replace( regex, "/$1\\|/.test(tiddlerTags)" );
	cond = cond.replace( /\sand\s/ig, " && " ) ;
	cond = cond.replace( /\sor\s/ig, " || " ) ;
	cond = cond.replace( /\s?not\s/ig, " ! " ) ;

	// if a boolean uses a tag that doesn't exist - it will get left alone 
	// (we only turn existing tags into actual tests).
	// replace anything that wasn't found as a tag, AND, OR, or NOT with the string "false"
	// if the tag doesn't exist then /tag/.test(...) will always return false.
	cond = cond.replace( /(\s|^)+[^\/\|&!][^\s]*/g, "false" ) ;

	// make a string of the tags in the tiddler and eval the 'cond' string against that string 
	// if it's TRUE then the tiddler qualifies!
	var tiddlerTags = (tiddler.tags?tiddler.tags.join("|"):"")+"|" ;
	try { if ( eval( cond ) ) return true; }
	catch( e ) { displayMessage("Error in tag filter '" + e + "'" ); }
	return false;
}
//}}}

// // output data formatting
// // exportHeader(format)
//{{{
function exportHeader(format)
{
	switch (format) {
		case "TW":	return exportTWHeader();
		case "DIV":	return exportDIVHeader();
		case "XML":	return exportXMLHeader();
	}
}
//}}}

// // exportFooter(format)
//{{{
function exportFooter(format)
{
	switch (format) {
		case "TW":	return exportDIVFooter();
		case "DIV":	return exportDIVFooter();
		case "XML":	return exportXMLFooter();
	}
}
//}}}

// // exportTWHeader()
//{{{
function exportTWHeader()
{
	// Get the URL of the document
	var originalPath = document.location.href;
	// Check we were loaded from a file URL
	if(originalPath.substr(0,5) != "file:")
		{ alert(config.messages.notFileUrlError); return; }
	// 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"),"\\");
	// Load the original file
	var original = loadFile(localPath);
	if(original == null)
		{ alert(config.messages.cantSaveError); return; }
	// reset existing HTML source markup
	original=updateMarkupBlock(original,"PRE-HEAD");
	original=updateMarkupBlock(original,"POST-HEAD");
	original=updateMarkupBlock(original,"PRE-BODY");
	original=updateMarkupBlock(original,"POST-BODY");
	// Locate the storeArea div's
	var posOpeningDiv = original.indexOf(startSaveArea);
	var posClosingDiv = original.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1))
		{ alert(config.messages.invalidFileError.format([localPath])); return; }
	return original.substr(0,posOpeningDiv+startSaveArea.length)
}
//}}}

// // exportDIVHeader()
//{{{
function exportDIVHeader()
{
	var out=[];
	var now = new Date();
	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 pver = version.extensions.exportTiddlers.major+"."
		+version.extensions.exportTiddlers.minor+"."+version.extensions.exportTiddlers.revision;
	out.push("<html><body>");
	out.push("<style type=\"text/css\">");
	out.push("#storeArea {display:block;margin:1em;}");
	out.push("#storeArea div");
	out.push("{padding:0.5em;margin:1em;border:2px solid black;height:10em;overflow:auto;}");
	out.push("#javascriptWarning");
	out.push("{width:100%;text-align:left;background-color:#eeeeee;padding:1em;}");
	out.push("</style>");
	out.push("<div id=\"javascriptWarning\">");
	out.push("TiddlyWiki export file<br>");
	out.push("Source"+": <b>"+convertUnicodeToUTF8(document.location.href)+"</b><br>");
	out.push("Title: <b>"+title+"</b><br>");
	out.push("Subtitle: <b>"+subtitle+"</b><br>");
	out.push("Created: <b>"+now.toLocaleString()+"</b> by <b>"+user+"</b><br>");
	out.push("TiddlyWiki "+twver+" / "+"ExportTiddlersPlugin "+pver+"<br>");
	out.push("Notes:<hr><pre>"+document.getElementById("exportNotes").value.replace(regexpNewLine,"<br>")+"</pre>");
	out.push("</div>");
	out.push("<div id=\"storeArea\">");
	return out;
}
//}}}

// // exportDIVFooter()
//{{{
function exportDIVFooter()
{
	var out=[];
	out.push("</div><!--POST-BODY-START-->\n<!--POST-BODY-END--></body></html>");
	return out;
}
//}}}

// // exportXMLHeader()
//{{{
function exportXMLHeader()
{
	var out=[];
	var now = new Date();
	var u = store.getTiddlerText("SiteUrl",null);
	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 pver = version.extensions.exportTiddlers.major+"."
		+version.extensions.exportTiddlers.minor+"."+version.extensions.exportTiddlers.revision;
	out.push("<" + "?xml version=\"1.0\"?" + ">");
	out.push("<rss version=\"2.0\">");
	out.push("<channel>");
	out.push("<title>" + title + "</title>");
	if(u) out.push("<link>" + convertUnicodeToUTF8(u.htmlEncode()) + "</link>");
	out.push("<description>" + subtitle + "</description>");
	out.push("<language>en-us</language>");
	out.push("<copyright>Copyright " + now.getFullYear() + " " + user + "</copyright>");
	out.push("<pubDate>" + now.toGMTString() + "</pubDate>");
	out.push("<lastBuildDate>" + now.toGMTString() + "</lastBuildDate>");
	out.push("<docs>http://blogs.law.harvard.edu/tech/rss</docs>");
	out.push("<generator>TiddlyWiki "+twver+" plus ExportTiddlersPlugin "+pver+"</generator>");
	return out;
}
//}}}

// // exportXMLFooter()
//{{{
function exportXMLFooter()
{
	var out=[];
	out.push("</channel></rss>");
	return out;
}
//}}}

// // exportData()
//{{{
function exportData(theList,theFormat)
{
	// scan export listbox and collect DIVs or XML for selected tiddler content
	var out=[];
	for (var i=0; i<theList.options.length; i++) {
		// get item, skip non-selected items and section headings
		var opt=theList.options[i]; if (!opt.selected||(opt.value=="")) continue;
		// get tiddler, skip missing tiddlers (this should NOT happen)
		var thisTiddler=store.getTiddler(opt.value); if (!thisTiddler) continue; 
		if (theFormat=="TW")	out.push(convertUnicodeToUTF8(thisTiddler.saveToDiv()));
		if (theFormat=="DIV")	out.push(convertUnicodeToUTF8(thisTiddler.title+"\n"+thisTiddler.saveToDiv()));
		if (theFormat=="XML")	out.push(convertUnicodeToUTF8(thisTiddler.saveToRss(store.getTiddlerText("SiteUrl",""))));
	}
	return out;
}
//}}}

// // exportTiddlers(): output selected data to local or server
//{{{
function exportTiddlers()
{
	var theList  = document.getElementById("exportList"); if (!theList) return;

	// get the export settings
	var theProtocol = document.getElementById("exportTo").value;
	var theFormat = document.getElementById("exportFormat").value;

	// assemble output: header + tiddlers + footer
	var theData=exportData(theList,theFormat);
	var count=theData.length;
	var out=[]; var txt=out.concat(exportHeader(theFormat),theData,exportFooter(theFormat)).join("\n");
	var msg="";
	switch (theProtocol) {
		case "file:":
			var theTarget = document.getElementById("exportFilename").value.trim();
			if (!theTarget.length) msg = "A local path/filename is required\n";
			if (!msg && saveFile(theTarget,txt))
				msg=count+" tiddler"+((count!=1)?"s":"")+" exported to local file";
			else if (!msg)
				msg+="An error occurred while saving to "+theTarget;
			break;
		case "http:":
		case "https:":
			var theTarget = document.getElementById("exportHTTPServerURL").value.trim();
			if (!theTarget.length) msg = "A server URL is required\n";
			if (document.getElementById('exportNotify').checked)
				theTarget+="&notify="+encodeURIComponent(document.getElementById('exportNotifyTo').value);
			if (document.getElementById('exportNotes').value.trim().length)
				theTarget+="&notes="+encodeURIComponent(document.getElementById('exportNotes').value);
			if (!msg && exportPost(theTarget+encodeURIComponent(txt)))
				msg=count+" tiddler"+((count!=1)?"s":"")+" exported to "+theProtocol+" server";
			else if (!msg)
				msg+="An error occurred while saving to "+theTarget;
			break;
		case "ftp:":
		default:
			msg="Sorry, export to "+theLocation+" is not yet available";
			break;
	}
	clearMessage(); displayMessage(msg,theTarget);
}
//}}}

// // exportPost(url): cross-domain post uses hidden iframe to submit url and capture responses
//{{{
function exportPost(url)
{
	var f=document.getElementById("exportFrame"); if (f) document.body.removeChild(f);
	f=document.createElement("iframe"); f.id="exportFrame";
	f.style.width="0px"; f.style.height="0px"; f.style.border="0px";
	document.body.appendChild(f);
	var d=f.document;
	if (f.contentDocument) d=f.contentDocument; // For NS6
	else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6
 	d.location.replace(url);
 	return true;
}
//}}}

// // promptForFilename(msg,path,file) uses platform/browser specific functions to get local filespec
//{{{
function promptForExportFilename(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 file=config.macros.exportTiddlers.newdefault;
	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='html';
			picker.defaultString=file;
			picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
			if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;
		}
		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|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
			s.FilterIndex=3; // default to HTML files;
			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;
}
//}}}
//{{{
//  WebSnapr - Preview Bubble Javascript
//  Written by Juan Xavier Larrea
//  Adapted for TW by Saq Imtiaz
// requires [[this image|bg.png]]

function applyStyleString(obj,str) {
	if(document.all && !window.opera) {
		obj.style.setAttribute("cssText",str);
	} else {
		obj.setAttribute("style",str);
	}
}

// Point this variable to the correct location of the bg.png file
var bubbleImagePath = 'bg.png';

function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

function bindBubbles(e){
    lbActions=getElementsByClassName(document,"a","externalLink");
    for(i=0;i<lbActions.length;i++){
        addEvent(lbActions[i],"mouseover",attachBubble,false);
        addEvent(lbActions[i],"mouseout",detachBubble,false);
        lbActions[i].title = '';
        }
}

function attachBubble(_b){
    var _c;
    if(_b["srcElement"]){
        _c=_b["srcElement"];
    }else{
        _c=_b["target"];
    }
    if (_c.href == undefined){
	    _c=_c.parentNode;
     }
    var _d=_c.href;
    var _e=findPosX(_c) +5;
    var _f=findPosY(_c) +17;  
    var _10=document.createElement("div");
    document.getElementsByTagName("body")[0].appendChild(_10);
    _10.className="previewbubble";
    applyStyleString(_10,"text-align: center; z-index: 99999; position: absolute; top: "+_f+"px ; left: "+_e+"px ;  width: 240px; height: 190px; padding: 0; margin: 0;");
    if (config.browser.isIE)
        _10.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + bubbleImagePath + "',sizingMethod='image')";
   else
       _10.style.background= "url("+ bubbleImagePath +") no-repeat";
   var img=document.createElement("img");
   _10.appendChild(img);

    applyStyleString(img,"padding-top: 0; padding-left: 0; padding-right: 0; padding-bottom: 0; margin-top: 27px; margin-left: 12px; margin-bottom: 0; margin-right: 0; border: 0");
    img.setAttribute("src","http://images.websnapr.com/?url="+_d);
    img.setAttribute("width",202);
    img.setAttribute("height",152);
    img.setAttribute("alt","Snapshot");
}

function detachBubble(_12){
    lbActions=getElementsByClassName(document,"div","previewbubble");
    for(i=0;i<lbActions.length;i++){
        lbActions[i].parentNode.removeChild(lbActions[i]);
    }
}

old_websnapr_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force)
{
    var tiddlerElem = old_websnapr_refreshTiddler.apply(this,arguments);
    bindBubbles();
    return tiddlerElem;
}
//}}}
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296508174560373697%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
16 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296505659274636289%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
8 photos
<html>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/jIYvnjAlJTY&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/jIYvnjAlJTY&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</html>
3:15 minutes
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296507530690068737%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
9 photos
Faye C. Feller has had a lifelong involvement with multi-cultural arts and education programs for children and youth. She is currently Executive Director of the National Association of Women for the Arts, and serves as ~Co-Chair of the [[NGO Committee on Education]] at the United Nations and as a U.N. Representative for [[Information Habitat: Where Information Lives]], an NGO in Special Consultative Status with ECOSOC that has focused on the transformative opportunities of the Internet revolution.

Faye’s work with the NGO Committee on Education is focused on a major initiative in support of the UN Decade of Education for Sustainable Development, the International Decade for a Culture of Peace and ~Non-Violence for the Children of the World, the Decade of Action: Water for Life and the Second Decade of the World’s Indigenous People.

Faye developed a prototype Science Seekers program as an after-school program for Middle School students at the Rotary Learning Lab in East Harlem; she has worked with student-led initiatives Peace in Public Places and Pumped up for Peace, which is featured on the U.N.'s Cyberschoolbus web site. Faye has served on the New York City Task Force for the ~Gandhi-King Season of Nonviolence.
''~FeedBlitz'' - [[www.feedblitz.com/|http://www.feedblitz.com/]] - is a powerful two-way broadcasting tool that you can use in conjunction with [[RSS feeds]] to publish a set of newsletters to which readers are able to subscribe,  either - or both - of two ways: via an email subscription - [img[http://www.feedblitz.com/images/email.gif]], or through an [[RSS feed|RSS feeds]] - [img[http://www.feedblitz.com/images/rss.gif]]. ''~FeedBlitz'' offers free publishing services, in which advertisements are included, as well as ad-free premium services.
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5336059689737672353%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
52 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5306481107034275953%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
8 photos
|<html><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5367747229092443617%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></html>|Feeding the compost with twenty quarts of kitchen scraps at La Perla Garden, 1 August 2009 <br><br>16 photos. |
|<html><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5367743335696577601%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></html>|Feeding the compost with fifteen quarts of kitchen scraps at La Perla Garden, 11 June 2009 <br><br>18 photos. |

|<html><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5367746521251462497%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed> </html>|Feeding the compost with fifteen quarts of kitchen scraps plus an anonymous contribution at La Perla Garden, 18 July 2009 <br><br>7 photos. |
|<html><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5367747918655089681%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></html>|Feeding the compost with twenty quarts of kitchen scraps at La Perla Garden, 25 July 2009 <br><br>10 photos. |
<html><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5355019483188373441%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></html>
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5327913207243408737%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5324696330344315297%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
12 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5324682643193963297%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
19 photos
|<html><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5368049860432300417%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></html>|Feeding the compost at La Perla Garden with twenty quarts of kitchen scraps, with an extra contribution from another kitchen, and the remains of the pumpkin plants that had been uprooted a short time earlier. 7 August 2009 <br><br>10 photos. |
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5337265522018108609%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
20 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5336047530686589025%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
7 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5336050938826020625%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
10 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5336048307390863265%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
{{iframe{''Note'': This is a "framed" page from the ''OASIS NYC'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.oasisnyc.net/gardens/cenycmapsearch.asp}}}
<html><iframe
	src = "http://www.oasisnyc.net/gardens/cenycmapsearch.asp"
	title = "Find a Community Garden in New York City"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
| <html><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="800" height="533" flashvars="host=picasaweb.google.com&hl=en_GB&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5348461537847965713%3Falt%3Drss%26kind%3Dphoto%26authkey%3DGv1sRgCKbpkpK7q8CSLw%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></html> |
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5079345079278907809%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
15 photos
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5083412288842052817%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
13 photos
Here are some examples that show the usage of the write action in the ForEachTiddlerMacro.

//''Select and Sort Examples''//
* InClauseExamples
* WhereClauseExamples
* SortClauseExamples
* ScriptClauseExamples
//''Action Examples''//
* AddToListActionExamples
* WriteActionExamples


Of cause you may also combine the examples, e.g. taking the whereClause of one example, the sortClause of a second and the action of a third.
//~~(Part of the [[ForEachTiddlerPlugin]])~~//

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.~~|


''Using JavaScript''

To give you a lot of flexibility the [[ForEachTiddlerMacro]] uses JavaScript in its arguments. Even if you are not that familiar with JavaScript you may find forEachTiddler useful. Just have a look at the various ready-to-use [[ForEachTiddlerExamples]] and adapt them to your needs.

''The Elements of the Macro''

The arguments of the ForEachTiddlerMacro consist of multiple parts, each of them being optional.

<<slider chkFETInClause [[inClause]] "inClause" "inClause">>
<<slider chkFETWhereClause [[whereClause]] "whereClause" "whereClause">>
<<slider chkFETSortClause [[sortClause]] "sortClause" "sortClause">>
<<slider chkFETScriptClause [[scriptClause]] "scriptClause" "scriptClause">>
<<slider chkFETActions [[Action Specification]] "Action Specification" "Action Specification">>

''Using Macros and ">" inside the forEachTiddler Macro''

You may use other macro calls into the expression, especially in the actionParameters. To avoid that the {{{>>}}} of such a macro call is misinterpreted as the end of the {{{<<forEachTiddler...>>}}} macro you must escape the {{{>>}}} of the inner macro with {{{$))}}} E.g. if you want to use {{{<<tiddler ...>>}}} inside the {{{forEachTiddler}}} macro you have to write {{{<<tiddler ...$))}}}.

In addition it is necessary to escape single {{{>}}} with the text {{{$)}}}.

''Using {{{<<tiddler ... with: ...>>}}} to re-use ForEachTiddler definitions''

Sometimes you may want to use a certain ForEachTiddler definition in slight variations. E.g. you may want to list either the tiddlers tagged with "ToDo" and in the other case with "Done". To do so you may use "Tiddler parameters". Here an example:

Replace the variable part of the ForEachTiddler definition with $1 ($2,... $9 are supported). E.g. you may create the tiddler "ListTaggedTiddlers" like this
{{{
<<forEachTiddler 
 where 
 'tiddler.tags.contains("$1")'
>>
}}}

Now you can use the ListTaggedTiddlers for various specific tags, using the {{{<<tiddler ...>>}}} macro:
{{{
<<tiddler ListTaggedTiddlers with: "systemConfig">>
}}}
{{{
<<tiddler ListTaggedTiddlers with: "Plugin">>
}}}


See also [[ForEachTiddlerExamples]].
/***
|''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]
> <<tiddler ForEachTiddlerMacro>>

===
and +++[ForEachTiddlerExamples] 
> <<tiddler 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.
***/

The {{{<<formTiddler ...>>}}} macro defined by the FormTiddlerPlugin. 

When a tiddler T1 references the (FormTemplate) tiddler T2 in the FormTiddlerMacro, the data of T1 can be edited through the INPUT elements defined by T2.
/***
<<checkForDataTiddlerPlugin>>
|''Name:''|FormTiddlerPlugin|
|''Version:''|1.0.6 (2007-06-24)|
|''Source:''|http://tiddlywiki.abego-software.de/#FormTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''Macros:''|formTiddler, checkForDataTiddlerPlugin, newTiddlerWithForm|
|''Requires:''|DataTiddlerPlugin|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Description
Use form-based tiddlers to enter your tiddler data using text fields, listboxes, checkboxes etc. (All standard HTML Form input elements supported).

''Syntax:'' 
|>|{{{<<}}}''formTiddler'' //tiddlerName//{{{>>}}}|
|//tiddlerName//|The name of the FormTemplate tiddler to be used to edit the data of the tiddler containing the macro.|

|>|{{{<<}}}''newTiddlerWithForm'' //formTemplateName// //buttonLabel// [//titleExpression// [''askUser'']] {{{>>}}}|
|//formTemplateName//|The name of the tiddler that defines the form the new tiddler should use.|
|//buttonLabel//|The label of the button|
|//titleExpression//|A (quoted) JavaScript String expression that defines the title (/name) of the new tiddler.|
|''askUser''|Typically the user is not asked for the title when a title is specified (and not yet used). When ''askUser'' is given the user will be asked in any case. This may be used when the calculated title is just a suggestion that must be confirmed by the user|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

For details and how to use the macros see the [[introduction|FormTiddler Introduction]] and the [[examples|FormTiddler Examples]].

!Revision history
* v1.0.6 (2007-06-24)
** Fixed problem when using SELECT component in Internet Explorer (thanks to MaikBoenig for reporting)
* v1.0.5 (2006-02-24)
** Removed "debugger;" instruction
* v1.0.4 (2006-02-07)
** Bug: On IE no data is written to data section when field values changed (thanks to KenGirard for reporting)
* v1.0.3 (2006-02-05)
** Bug: {{{"No form template specified in <<formTiddler>>"}}} when using formTiddler macro on InternetExplorer (thanks to KenGirard for reporting)
* v1.0.2 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.1 (2005-12-22)
** Features: 
*** Support InternetExplorer
*** Added newTiddlerWithForm Macro
* v1.0.0 (2005-12-14)
** initial version

!Code
***/
//{{{

//============================================================================
//============================================================================
//						FormTiddlerPlugin
//============================================================================
//============================================================================

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

abego.getOptionsValue = function(element,i) {
	var v = element.options[i].value;
	if (!v && element.options[i].text)
		v = element.options[i].text;
	return v;
};

version.extensions.FormTiddlerPlugin = {
	major: 1, minor: 0, revision: 5,
	date: new Date(2006, 2, 24), 
	type: 'plugin',
	source: "http://tiddlywiki.abego-software.de/#FormTiddlerPlugin"
};

// For backward compatibility with v1.2.x
//
if (!window.story) window.story=window; 
if (!TiddlyWiki.prototype.getTiddler) TiddlyWiki.prototype.getTiddler = function(title) { return t = this.tiddlers[title]; return (t != undefined && t instanceof Tiddler) ? t : null; } 

//============================================================================
// formTiddler Macro
//============================================================================

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

config.macros.formTiddler = {
	// Standard Properties
	label: "formTiddler",
	version: {major: 1, minor: 0, revision: 4, date: new Date(2006, 2, 7)},
	prompt: "Edit tiddler data using forms",

	// Define the "setters" that set the values of INPUT elements of a given type
	// (must match the corresponding "getter")
	setter: {  
		button:				function(e, value) {/*contains no data */ },
		checkbox:			function(e, value) {e.checked = value;},
		file:				function(e, value) {try {e.value = value;} catch(e) {/* ignore, possibly security error*/}},
		hidden:				function(e, value) {e.value = value;},
		password:			function(e, value) {e.value = value;},
		radio:				function(e, value) {e.checked = (e.value == value);},
		reset:				function(e, value) {/*contains no data */ },
		"select-one":		function(e, value) {config.macros.formTiddler.setSelectOneValue(e,value);},
		"select-multiple":	function(e, value) {config.macros.formTiddler.setSelectMultipleValue(e,value);},
		submit:				function(e, value) {/*contains no data */},
		text:				function(e, value) {e.value = value;},
		textarea:			function(e, value) {e.value = value;}
	},

	// Define the "getters" that return the value of INPUT elements of a given type
	// Return undefined to not store any data.
	getter: {  
		button:				function(e, value) {return undefined;},
		checkbox:			function(e, value) {return e.checked;},
		file:				function(e, value) {return e.value;},
		hidden:				function(e, value) {return e.value;},
		password:			function(e, value) {return e.value;},
		radio:				function(e, value) {return e.checked ? e.value : undefined;},
		reset:				function(e, value) {return undefined;},
		"select-one":		function(e, value) {return config.macros.formTiddler.getSelectOneValue(e);},
		"select-multiple":	function(e, value) {return config.macros.formTiddler.getSelectMultipleValue(e);},
		submit:				function(e, value) {return undefined;},
		text:				function(e, value) {return e.value;},
		textarea:			function(e, value) {return e.value;}
	}
};


// -------------------------------------------------------------------------------
// The formTiddler Macro Handler 
// -------------------------------------------------------------------------------

config.macros.formTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	if (!config.macros.formTiddler.checkForExtensions(place, macroName)) {
		return;
	}
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params

	// get the name of the form template tiddler
	var formTemplateName = undefined;
	if (i < params.length) {
		formTemplateName = params[i];
		i++;
	}

	if (!formTemplateName) {
		config.macros.formTiddler.createErrorElement(place, "No form template specified in <<" + macroName + ">>.");
		return;
	}


	// --- Processing ------------------------------------------

	// Get the form template text. 
	// (This contains the INPUT elements for the form.)
	var formTemplateTiddler = store.getTiddler(formTemplateName);
	if (!formTemplateTiddler) {
		config.macros.formTiddler.createErrorElement(place, "Form template '" + formTemplateName + "' not found.");
		return;
	}
	var templateText = formTemplateTiddler.text;
	if(!templateText) {
		// Shortcut: when template text is empty we do nothing.
		return;
	}

	// Get the name of the tiddler containing this "formTiddler" macro
	// (i.e. the tiddler, that will be edited and that contains the data)
	var tiddlerName = config.macros.formTiddler.getContainingTiddlerName(place);

	// Append a "form" element. 
	var formName = "form"+formTemplateName+"__"+tiddlerName;
	var e = document.createElement("form");
	e.setAttribute("name", formName);
	place.appendChild(e);

	// "Embed" the elements defined by the templateText (i.e. the INPUT elements) 
	// into the "form" element we just created
	wikify(templateText, e);

	// Initialize the INPUT elements.
	config.macros.formTiddler.initValuesAndHandlersInFormElements(formName, DataTiddler.getDataObject(tiddlerName));
}


// -------------------------------------------------------------------------------
// Form Data Access 
// -------------------------------------------------------------------------------

// Internal.
//
// Initialize the INPUT elements of the form with the values of their "matching"
// data fields in the tiddler. Also setup the onChange handler to ensure that
// changes in the INPUT elements are stored in the tiddler's data.
//
config.macros.formTiddler.initValuesAndHandlersInFormElements = function(formName, data) {
	// config.macros.formTiddler.trace("initValuesAndHandlersInFormElements(formName="+formName+", data="+data+")");

	// find the form
	var form = config.macros.formTiddler.findForm(formName);
	if (!form) {
		return;
	}

	try {
		var elems = form.elements;
		for (var i = 0; i < elems.length; i++) {
			var c = elems[i];
		
			var setter = config.macros.formTiddler.setter[c.type];
			if (setter) {
				var value = data[c.name];
				if (value != null) {
					setter(c, value);
				}
				c.onchange = onFormTiddlerChange;
			} else {
				config.macros.formTiddler.displayFormTiddlerError("No setter defined for INPUT element of type '"+c.type+"'. (Element '"+c.name+"' in form '"+formName+"')");
			}
		}
	} catch(e) {
		config.macros.formTiddler.displayFormTiddlerError("Error when updating elements with new formData. "+e);
	}
}


// Internal.
//
// @return [may be null]
//
config.macros.formTiddler.findForm = function(formName) {
	// We must manually iterate through the document's forms, since
	// IE does not support the "document[formName]" approach

	var forms = window.document.forms;
	for (var i = 0; i < forms.length; i++) {
		var form = forms[i];
		if (form.name == formName) {
			return form;
		}
	}

	return null;
}


// Internal.
//
config.macros.formTiddler.setSelectOneValue = function(element,value) {
	var n = element.options.length;
	for (var i = 0; i < n; i++) {
		element.options[i].selected = abego.getOptionsValue(element,i) == value;
	}
}

// Internal.
//
config.macros.formTiddler.setSelectMultipleValue = function(element,value) {
	var values = {};
	for (var i = 0; i < value.length; i++) {
		values[value[i]] = true;
	}
	
	var n = element.length;
	for (var i = 0; i < n; i++) {
		element.options[i].selected = !(!values[abego.getOptionsValue(element,i)]);
	}
}

// Internal.
//
config.macros.formTiddler.getSelectOneValue = function(element) {
	var i = element.selectedIndex;
	return (i >= 0) ? abego.getOptionsValue(element,i) : null;
}

// Internal.
//
config.macros.formTiddler.getSelectMultipleValue = function(element) {
	var values = [];
	var n = element.length;
	for (var i = 0; i < n; i++) {
		if (element.options[i].selected) {
			values.push(abego.getOptionsValue(element,i));
		}
	}
	return values;
}



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

// Internal.
//
config.macros.formTiddler.checkForExtensions = function(place,macroName) {
	if (!version.extensions.DataTiddlerPlugin) {
		config.macros.formTiddler.createErrorElement(place, "<<" + macroName + ">> requires the DataTiddlerPlugin. (You can get it from http://tiddlywiki.abego-software.de/#DataTiddlerPlugin)");
		return false;
	}
	return true;
}

// Internal.
//
// Displays a trace message in the "TiddlyWiki" message pane.
// (used for debugging)
//
config.macros.formTiddler.trace = function(s) {
	displayMessage("Trace: "+s);
}

// Internal.
//
// Display some error message in the "TiddlyWiki" message pane.
//
config.macros.formTiddler.displayFormTiddlerError = function(s) {
	alert("FormTiddlerPlugin Error: "+s);
}

// Internal.
//
// Creates an element that holds an error message
// 
config.macros.formTiddler.createErrorElement = function(place, message) {
	return createTiddlyElement(place,"span",null,"formTiddlerError",message);
}

// Internal.
//
// Returns the name of the tiddler containing the given element.
// 
config.macros.formTiddler.getContainingTiddlerName = function(element) {
	return story.findContainingTiddler(element).id.substr(7);
}

// -------------------------------------------------------------------------------
// Event Handlers 
// -------------------------------------------------------------------------------

// This function must be called by the INPUT elements whenever their
// data changes. Typically this is done through an "onChange" handler.
//
function onFormTiddlerChange (e) {
	// config.macros.formTiddler.trace("onFormTiddlerChange "+e);

	if (!e) var e = window.event;

	var target = resolveTarget(e);
	var tiddlerName = config.macros.formTiddler.getContainingTiddlerName(target);
	var getter = config.macros.formTiddler.getter[target.type];
	if (getter) {
		var value = getter(target);
		DataTiddler.setData(tiddlerName, target.name, value);
	} else {
		config.macros.formTiddler.displayFormTiddlerError("No getter defined for INPUT element of type '"+target.type+"'. (Element '"+target.name+"' used in tiddler '"+tiddlerName+"')");
	}
}

// ensure that the function can be used in HTML event handler
window.onFormTiddlerChange = onFormTiddlerChange;


// -------------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// -------------------------------------------------------------------------------

setStylesheet(
	".formTiddlerError{color: #ffffff;background-color: #880000;}",
	"formTiddler");


//============================================================================
// checkForDataTiddlerPlugin Macro
//============================================================================

config.macros.checkForDataTiddlerPlugin = {
	// Standard Properties
	label: "checkForDataTiddlerPlugin",
	version: {major: 1, minor: 0, revision: 0, date: new Date(2005, 12, 14)},
	prompt: "Check if the DataTiddlerPlugin exists"
}

config.macros.checkForDataTiddlerPlugin.handler = function(place,macroName,params) {
	config.macros.formTiddler.checkForExtensions(place, config.macros.formTiddler.label);
}



//============================================================================
// newTiddlerWithForm Macro
//============================================================================

config.macros.newTiddlerWithForm = {
	// Standard Properties
	label: "newTiddlerWithForm",
	version: {major: 1, minor: 0, revision: 1, date: new Date(2006, 1, 6)},
	prompt: "Creates a new Tiddler with a <<formTiddler ...>> macro"
}

config.macros.newTiddlerWithForm.handler = function(place,macroName,params) {
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params

	// get the name of the form template tiddler
	var formTemplateName = undefined;
	if (i < params.length) {
		formTemplateName = params[i];
		i++;
	}

	if (!formTemplateName) {
		config.macros.formTiddler.createErrorElement(place, "No form template specified in <<" + macroName + ">>.");
		return;
	}

	// get the button label
	var buttonLabel = undefined;
	if (i < params.length) {
		buttonLabel = params[i];
		i++;
	}

	if (!buttonLabel) {
		config.macros.formTiddler.createErrorElement(place, "No button label specified in <<" + macroName + ">>.");
		return;
	}

	// get the (optional) tiddlerName script and "askUser"
	var tiddlerNameScript = undefined;
	var askUser = false;
	if (i < params.length) {
		tiddlerNameScript = params[i];
		i++;

		if (i < params.length && params[i] == "askUser") {
			askUser = true;
			i++;
		}
	}

	// --- Processing ------------------------------------------

	if(!readOnly) {
		var onClick = function() {
			var tiddlerName;
			if (tiddlerNameScript) {
				try {
					tiddlerName = eval(tiddlerNameScript);
				} catch (ex) {
				}
			}
			if (!tiddlerName || askUser) {
				tiddlerName = prompt("Please specify a tiddler name.", askUser ? tiddlerName : "");
			}
			while (tiddlerName && store.getTiddler(tiddlerName)) {
				tiddlerName = prompt("A tiddler named '"+tiddlerName+"' already exists.\n\n"+"Please specify a tiddler name.", tiddlerName);
			}

			// tiddlerName is either null (user canceled) or a name that is not yet in the store.
			if (tiddlerName) {
				var body = "<<formTiddler [["+formTemplateName+"]]>>";
				var tags = [];
				store.saveTiddler(tiddlerName,tiddlerName,body,config.options.txtUserName,new Date(),tags);
				story.displayTiddler(null,tiddlerName,1);
			}
		}

		createTiddlyButton(place,buttonLabel,buttonLabel,onClick);
    }
}

//}}}


/***
!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.
***/
TiddyWiki offers a simple, powerful & versatile markup language for formatting the contents of a site. Here are some of the basic features:

|Effect|To get|Type this|h
|Bold Text|''Bold''|{{{''Bold''}}}|
|Underlined Text|__Underline__|{{{__Underline__}}}|
|Italic Text|//Italic//|{{{//Italic//}}}|
|Superscript|e^^2πi^^ = 1|{{{e^^2πi^^ = 1}}}|
|Subscript|a~~ij~~ = - a~~ji~~|{{{a~~ij~~ = - a~~ji~~}}}|
|Hidden Text|/%hidden comments%/|{{{/%hidden comments%/}}}|
|Highlighted Text|@@highlight@@|{{{@@highlight@@}}}|
|Styled Text|@@font-family:Bookman Old Style;Bookman Old Style@@|{{{@@font-family:Bookman Old Style;Bookman Old Style@@}}}|
|~|@@font-size:120%;font-weight:bold;larger font, in bold@@|{{{@@font-size:120%;font-weight:bold;larger font, in bold@@}}}|
|~|@@color(#ffffff):bgcolor(#ff0000):white text, red background@@|{{{@@color(#ffffff):bgcolor(#ff0000):white text, red background@@}}}}|

See [[Formatting Tiddlers]] for additional formatting features.

In addition, the overall appearance of a TiddlyWiki site - layout, colours, fonts, font sizes, etc. -  can be edited by way of a set of [[Templates & Stylesheets]]
''Double-click'' on this tiddler to see more detail, or follow the links to the specific formatting types.

|!Effect|!To get|!Type this|h
|>|>|[[Formatting Text]]|h
|Bold Text|''Bold''|{{{''Bold''}}}|
|Underlined Text|__Underline__|{{{__Underline__}}}|
|Italic Text|//Italic//|{{{//Italic//}}}|
|Superscript|e^^2πi^^ = 1|{{{e^^2πi^^ = 1}}}|
|Subscript|a~~ij~~ = - a~~ji~~|{{{a~~ij~~ = - a~~ji~~}}}|
|Strikethrough|--Strikethrough--|{{{--Strikethrough--}}}|
|Hidden Text|/%hidden comments%/|{{{/%hidden comments%/}}}|
|Highlighted Text|@@highlight@@|{{{@@highlight@@}}}|
|Styled Text|@@font-family:Bookman Old Style;Bookman Old Style@@|{{{@@font-family:Bookman Old Style;Bookman Old Style@@}}}|
|~|@@font-size:120%;font-weight:bold;larger font, in bold@@|{{{@@font-size:120%;font-weight:bold;larger font, in bold@@}}}|
|~|@@color(#ffffff):bgcolor(#ff0000):white text, red background@@|{{{@@color(#ffffff):bgcolor(#ff0000):white text, red background@@}}}}|
|>|>|[[Plugin Formatting]]|h
|JavaScript code ||<html>//{{{</html> ... <html>//}}}</html> |
|[[HTML templates]] ||<html>&lt;!--{{{--&gt;</html> .... <html>&lt;!--{{{--&gt;</html> |
|[[Cascading Style Sheets]] ||<html>/*{{{*/</html> ... <html>/*}}}*/</html> |
|>|>|''Links''|h
|~CamelCase|CamelCase links|{{{CamelCase links}}}|
|Tiddly Links|[[Simple links]]|{{{[[Simple links]]}}}|
|Alias Tiddly Links|[[Alias to Tiddly links|Tiddly links]]|{{{[[Alias to Tiddly links|Tiddly links]]}}}|
|External Links|http://www.tiddlywiki.com|{{{http://www.tiddlywiki.com}}}|
|Alias External Links|[[Tiddly Wiki|http://www.tiddywiki.com]]|{{{[[Tiddly Wiki|http://www.tiddlywiki.com]]}}}|
|Redirect Links|<<redirect TW TiddlyWiki>>|{{{<<redirect TW TiddlyWiki>>}}} redirects [[TW]] to TiddlyWiki|
|>|>|''Headings & Outlines''|h
|Sub Headings||{{{! !! !!!}}} etc. at beginning of line|
|[[Bullets]]||{{{* ** ***}}} etc. at beginning of line|
|Numbered Bullets||{{{# ## ###}}} etc. at beginning of line|
|Block Quotes||{{{<<< ... <<< }}}|
|[[Multilevel Blockquote]]||{{{> >> >>>}}} etc. at beginning of line|
|>|>|''Tables''|h
|[[Tables]]||{{{|}}} .... {{{|}}} separates cells|
|[[Cell Alignment|left|{{{|left|}}}|
|| center |{{{| center |}}}|
|| right|{{{| right|}}}|
|[[Header Rows||{{{|h}}} at end of row|h
|InlineHTML|<html><p align="right">right-aligned text</p></html>|{{{<html><p align="right">right-aligned text</p></html>}}}|
|InvokeMacro|''importTiddlers'' macro|{{{<<importTiddlers>>}}}|

''Note'' this needs some additional editing / revision - and addressing the question of consistent / clear naming of the specific formatting types (in left column) and ideally a consistent format for each formatting type
[[Manhattan Land Trust]]
[[Trust for Public Land]]
[[GreenThumb, New York City Department of Parks & Recreation]]
[[Council on the Environment of New York City]]
[[Green Map System]]
[[The New York City Compost Project]]
[[New York Botanical Gardens]]
[[Brooklyn Botanical Gardens]]
To get started with this customized TiddlyWiki, you'll need to modify the following tiddlers, or you can use the [[Setup Menu]] for more details:
* 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) that includes here the [[Administrative Menu]]
* 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>>
Here are some examples of one person's [[FeedBlitz]] subscriptions. You can see the feed in this frame by clicking on the link, or in a separate tab or window by right-clicking on the link. You can subscribe either - or both - of two ways: via an email subscription - [img[http://www.feedblitz.com/images/email.gif]], or through an [[RSS feed]] - [img[http://www.feedblitz.com/images/rss.gif]]. 

<html><iframe width=100% height=800 frameborder=0 src="http://www.feedblitz.com/blogroll.asp?bb377e3567fa6ceef680a3466195a54a727679/html">
</iframe></html>
This set of 6 education resources (nicknamed the EEE Modules) is designed to help middle and high school age youth experience and interpret New York City's energy and environment from a sustainability perspective.

+++[Green Map Education Modules Web site]
{{iframe{''Note'': This is a "framed" page from the ''Green Apple Map'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://greenapplemap.org/page/modules}}}
<html><iframe
	src = "http://greenapplemap.org/page/modules"
	title = "Green Map Education Modules"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
===
{{iframe{''Note'': This is a "framed" page from the '' '' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.greenapplemap.org/gui/assets/pdf/gms_module_show9_07.pdf}}}
<html><iframe
	src = "http://www.greenapplemap.org/gui/assets/pdf/gms_module_show9_07.pdf"
	title = "Green Map Energy & Environment Exploration Modules"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
''Green Map System'' energizes a diverse global movement of local mapmaking teams charting their community's natural, cultural and green living resources with our award-winning universal icons and adaptable multi-lingual resources. Explore hundreds of perspective-changing Green Maps created by local Map teams in 50 countries. Take part and support Green Maps us as we chart a sustainable future!

+++[Green Map System Web site]
{{iframe{''Note'': This is a "framed" page from the ''Green Maps'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at  http://www.greenmap.org/}}}
<html><iframe
	src = "http://www.greenmap.org/"
	title = "Green Maps"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
===

+++[Green Map Education Modules]
<<tiddler "Green Map Education Modules">>
===

+++[Green Map Energy & Environment Exploration Modules - Overview]
<<tiddler "Green Map Energy & Environment Exploration Modules - Overview">>
===
The ''GreenThumb'' program of the [[New York City Department of Parks & Recreation]]
+++[GreenThumb Website]
{{iframe{''Note'': This is a "framed" page from the ''GreenThumb'' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.greenthumbnyc.org/
To close this "iframe" site, click on the link above.}}}
<html><iframe
	src = "http://www.greenthumbnyc.org/"
	title = "GreenThumb, New York City Department of Parks & Recreation"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>

===
{{iframe{''Note'': This is a "framed" page from the web site of [[Information Habitat: Where Information Lives]]. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://habitat.igc.org/journey/}}}
<html><iframe
	src = "http://habitat.igc.org/journey/"
	title = "Habitat II Online: Invitation to A Journey"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
This set of tiddlers allows you to edit and manage the title and sub-title of the page, and key information about the page;  Others are easily read by browsers in particular, information that it is valuable to make available to Internet search engines. The first of these two are visible to the viewer - in the browser window, and in the banner at the top of the page.the others are read by search engines and browsers, but are only visible to the reader if she or he looks at the source code af a web page
* [[Site Title|SiteTitle]] - appears at the head of the page banner, and the 
* [[Site Subtitle|SiteSubtitle]] - included in the browser bar and search results and at the bottom right of the site banner
* [[MarkupPreHead]] - this contents of this shadowed tiddler contains the concatenation of information - each of them representing a "meta tag". Ideally, this tiddler would use the syntax- using the syntax {{{<<tiddler "Site Keywords">>}}}, etc.
** [[Site Keywords]] - a list of comma-separated keywords, also a first read for search engines
** [[Site Description]] - a concise description of the site, stored in the HEAD of the HTML page, and is generally one of the first items to be read by intelligent search engines. As a rule, it should not be more that 256 characters, or about 40 words.
>>>Each of these tiddlers contains what is known as a "meta tag", e,.g.
<<<
>> {{{<meta name="description" content="Climate Change 2.0: A convenient TiddlyPerfect response to Truth in a rapidly-changing Creative Commons, Open Source Climate">}}} 
<<<
** [[Site Owner]] - this tiddler records the ownership of the page itself: not to be confused with the various copyrights associated with the page, included in the tiddler that follows
** [[Site Copyrights]] - this tiddler provides attribution to the rights holders 
** [[Site Url|SiteUrl]] - this tiddler conytains the Url of the site, e.g. http:///climate-change-two.net
** [[Site Splash Screen]] - this page contains the HTML tags for the Splash Screen that appears when the page is opened,
>> //Technical note//: In a TiddlyPerfect site, this tiddler would be automatically generated by the DataPerfect engine from its sub-tiddlers - using the syntax:
>>> {{{<<tiddler "Site Keywords">>}}},
>>> {{{<<tiddler "Site Decription">>}}}, etc.
>> under TiddlyWiki, this does not work, as the contents of the tiddler would not be readable by the browser, not having been translated - wikified - until the relevant javascript in TiddlyWiki had been loaded.
/*{{{*/
.header {
position: relative;
}
.header a:hover {
	background: transparent;
}
.headerShadow {
	color: #ffff00;
	position: relative;
	padding: 1.5em 0em 1em 1em;
	left: -1px;
	top: -1px;
}
.headerShadow a {
	font-weight: normal;
	color: [[ColorPalette::Foreground]];
}
.headerShadow .left {
    position: absolute;
    top:0px;
    left:5px;
}
.headerShadow .right {
    display: none;
}
.headerForeground {
	color: [[ColorPalette::Background]];
position: absolute;
padding: 1.5em 0em 1em 1em;
left: 0px;
top: 0px;
}
.headerForeground a {
	font-weight: normal;
}
.headerForeground .left,
.headerForeground .right {
    display: none;
}
.header .siteTitle {
font-size: 2em;
position:absolute;
margin-left:90px;
margin-right:3px;
color: #ffff00;
}

.header .siteSubtitle {
font-size: 1.3em;
position:absolute;
margin-left:90px;
margin-right:3px;
color: #007700;
}
/*}}}*/
There are a number of simple ways you can create headings & sub-headings, create bulleted lists, numbered outlines or block quotes

|Feature |Type this|h
|[[Headings]] |{{{! !! !!!}}} etc. at beginning of line|
|[[Bullets]] |{{{* ** ***}}} etc. at beginning of line|
|[[Numbered Outline]] |{{{# ## ###}}} etc. at beginning of line|
|[[Block Quotes]] |{{{<<< ... <<< }}}|
|[[Multi-level Block Quote]] |{{{> >> >>>}}} etc. at beginning of line|

See also [[Formatting Tiddlers]]
/***
| Name:|HideWhenPlugin|
| Description:|Allows conditional inclusion/exclusion in templates|
| Version:|6.1.2|
| Date:|20-Oct-2006|
| Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
| Author:|Simon Baird <simon.baird@gmail.com>|
For use in ViewTemplate and EditTemplate. Eg
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.removeElementWhen = function(test,place) {
	if (test) {
		removeChildren(place);
		place.parentNode.removeChild(place);
	}
};

merge(config.macros,{

	hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( eval(paramString), place);
	}},

	showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !eval(paramString), place);
	}},

	hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAny(params), place);
	}},

	showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAny(params), place);
	}},

	hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
	}},

	showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
	}}

});

//}}}

<<top>>
@@border:0;padding:0;margin:0;[[?|TWHelp-SearchResults]]@@
<<jump j '' top>>
<<fullscreen>>

<<fontSize>>



<<newTiddler ">><<renameButton n>>
<<newTiddler text:{{store.getTiddlerText("iframe template","")}}>><<renameButton i 'Create a new iframe tiddler'>>
<<newTiddler text:{{store.getTiddlerText("picasa template","")}} title:"New Album" tag:"la perla garden" tag:"picasa album" >><<renameButton a 'Create a new photo album'>>
<<newTiddler text:{{store.getTiddlerText("YouTube template","")}} title:"New YouTube" tag:"la perla garden" tag:youtube>><<renameButton y 'Create a new youtube tiddler'>>
<<saveChanges>><<renameButton s 'Save TiddlyWiki'>>
/***
|Name|HoverMenuPlugin|
|Created by|[[Saq Imtiaz]]|
|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: 18,              // horizontal distance of menu from side of screen, increase to your liking.
               y: 200            //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;
};
//}}}


/*{{{*/
#hoverMenu .imgLink, #hoverMenu .imgLink:hover {border:none; padding:0px; float:right; margin-bottom:2px; margin-top:0px;}
#hoverMenu .button, #hoverMenu .tiddlyLink {border:none; font-weight:bold; background:[[ColorPalette::SecondaryDark]]; color:[[ColorPalette::SecondaryLight]]; padding:0 5px; float:right; margin-bottom:3px;}
#hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover {font-weight:bold; border:none; color:[[ColorPalette::SecondaryDark]]; background:[[ColorPalette::SecondaryMid]]; padding:0 5px; float:right; margin-bottom:4px;}
#hoverMenu .button {width:100%; text-align:center}#hoverMenu { position:absolute; width:7px;}
@media print #hoverMenu .imgLink, #hoverMenu .imgLink:hover, #hoverMenu .button, #hoverMenu .tiddlyLink, #hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover, #hoverMenu .button {display: none;}

/*}}}*/
{{iframe{''Note'': This is a "framed" page from the '' '' web site. You can click on <<fullscreen>> to toggle full-screen mode, or you can view this page in a separate browser tab or window at http://www.howtocompost.org/}}}
<html><iframe
	src = "http://www.howtocompost.org/"
	title = "HowToCompost.org"
	style="
		background-color:#ffffff; 
		border-color:#ffffff;
		border:none;"
	width = "100%"
	height = "1000"
	frameborder = "0"
	scrolling = "yes">
</iframe></html>
<html>
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&noautoplay=1&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fecology2001%2Falbumid%2F5296875513010727265%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</html>
13 photos
{{{
[img[title|filename]]
[img[filename]]
[img[title|filename][link]]
[img[filename][link]]
}}}
Images can be included by their filename or full URL. It's good practice to include a title for the image to be shown as a tooltip, and when the image isn't available. An image can also link to another tiddler or or a URL, e.g.
[img[Twin Light & Colour Cube|http://www.climate-change-two.net/light-cube-0-075.png][Twin Light & Colour Cubes]]
{{{
[img[Twin Light & Colour Cube|http://www.climate-change-two.net/light-cube-0-075.png][Twin Light & Colour Cubes]]
}}}

You can also float images to the right or left: use {{{[<img[}}} for left-floating images and {{{[>img[}}} for right-floated images; you can use CSS to clear the floats.
[<img[Twin Light & Colour Cube - floating left|http://www.climate-change-two.net/light-cube-1-075.png][http://www.digital-bridges.net/]] [>img[Twin Light & Colour Cube - floating right|http://www.climate-change-two.net/light-cube-0-075.png][http://www.digital-bridges.net/]]
@@clear(left):clear(right):display(block):@@
{{{
[<img[Twin Light & Colour Cube - floated left|http://www.climate-change-two.net/light-cube-1-075.png][http://www.digital-bridges.net/]]
[>img[Twin Light & Colour Cube - floated right|http://www.climate-change-two.net/light-cube-0-075.png][http://www.digital-bridges.net/]]
@@clear(left):clear(right):display(block):@@
}}}
The ''Import Tiddlers'' tiddler uses the [[ImportTiddlers|ImportTiddlersPlugin]] plugin macro that allows you to import tiddlers from other TiddlyWiki pages, with the syntax {{{<<importTiddlers inline>>}}}.

<<importTiddlers inline>>
/***
|Name|ImportTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#ImportTiddlersPlugin|
|Documentation|http://www.TiddlyTools.com/#ImportTiddlersPluginInfo|
|Version|4.3.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|config.macros.importTiddlers.handler|
|Description|interactive controls for import/export with filtering.|
This plugin lets you selectively combine tiddlers from any two TiddlyWiki documents.  An interactive control panel lets you pick a document to import from, and then select which tiddlers to import, with prompting for skip, rename, merge or replace actions when importing tiddlers that match existing titles.  Automatically add tags to imported tiddlers so they are easy to find later on.  Generates a detailed report of import 'history' in ImportedTiddlers.
!!!!!Documentation
<<<
see [[ImportTiddlersPluginInfo]] for details
<<<
!!!!!interactive control panel:
<<<
<<tiddler ImportTiddlers>>
{{clear{
^^(see [[ImportTiddlers]] shadow tiddler)^^}}}
<<<
!!!!!Installation Notes
<<<
* As of 6/27/2007, "patch" functions that provide backward-compatibility with TW2.1.x and earlier have been split into a separate [[ImportTiddlersPluginPatch]] tiddler to reduce installation overhead for //this// plugin.  You only need to install the additional plugin tiddler when using ImportTiddlersPlugin in documents using TW2.1.x or earlier.
* As of 3/21/2007, the interactive {{{<<importTiddlers>>}}} and non-interactive {{{<<loadTiddlers>>}}} macro definitions and related code have been split into separate [[ImportTiddlersPlugin]] and [[LoadTiddlersPlugin]] to permit selective installation of either the interactive and/or non-interactive macro functions.
* Quick Installation Tip: If you are using an unmodified version of TiddlyWiki (core release version <<version>>), you can get a new, empty TiddlyWiki with the Import Tiddlers plugin pre-installed (''[[download from here|TW+ImportExport.html]]''), and then simply import all your content from your old document into this new, empty document.
<<<
!!!!!Revisions
<<<
2008.06.29 [4.3.1] More layout/animation work for simpler sequential interaction.  Code reduction/cleanup
|please see [[ImportTiddlersPluginInfo]] for additional revision details|
2005.07.20 [1.0.0] Initial Release
<<<
!!!!!Code
***/
// // ''MACRO DEFINITION''
//{{{
// Version
version.extensions.importTiddlers = {major: 4, minor: 3, revision: 0, date: new Date(2008,6,28)};

// add ImportTiddlerPlugin controls to built-in backstage import task
if (config.tasks) { // TW2.2 or above
	config.tasks.importTask.content="Use ~TiddlyWiki built-in importer (below) or, ";
	config.tasks.importTask.content+="<<importTiddlers link 'Use ImportTiddlersPlugin control panel...'>>\n";
	config.tasks.importTask.content+="<<importTiddlers core>>"
}

// IE needs explicit global scoping for functions/vars called from browser events
window.onClickImportButton=onClickImportButton;
window.refreshImportList=refreshImportList;

// default cookie/option values
if (!config.options.chkImportReport) config.options.chkImportReport=true;

// default shadow definition
config.shadowTiddlers.ImportTiddlers="<<importTiddlers inline>>";

merge(config.macros.importTiddlers,{
	label: "import tiddlers",
	prompt: "Copy tiddlers from another document",
	openMsg: "Opening %0",
	openErrMsg: "Could not open %0 - error=%1",
	readMsg: "Read %0 bytes from %1",
	foundMsg: "Found %0 tiddlers in %1",
	filterMsg: "Filtered %0 tiddlers matching '%1'",
	summaryMsg: "%0 tiddler%1 in the list",
	summaryFilteredMsg: "%0 of %1 tiddler%2 in the list",
	plural: "s are",
	single: " is",
	countMsg: "%0 tiddlers selected for import",
	processedMsg: "Processed %0 tiddlers",
	importedMsg: "Imported %0 of %1 tiddlers from %2",
	loadText: "please load a document...",
	closeText: "close",	// text for close button when file is loaded
	doneText: "done",	// text for close button when file is not loaded
	startText: "import",	// text for import button
	stopText: "stop",	// text for import button while importing
	local: true,		// default to import from local file
	src: "",		// path/filename or URL of document to import (retrieved from SiteUrl tiddler)
	proxy: "",		// URL for remote proxy script (retrieved from SiteProxy tiddler)
	useProxy: false,	// use specific proxy script in front of remote URL
	inbound: null,		// hash-indexed array of tiddlers from other document
	newTags: "",		// text of tags added to imported tiddlers
	addTags: true,		// add new tags to imported tiddlers
	listsize: 20,		// # of lines to show in imported tiddler list
	importTags: true,	// include tags from remote source document when importing a tiddler
	keepTags: true,		// retain existing tags when replacing a tiddler
	sync: false,		// add 'server' fields to imported tiddlers (for sync function)
	lastFilter: "",		// most recent filter (URL hash) applied
	lastAction: null,	// most recent collision button performed
	index: 0,		// current processing index in import list
	sort: ""		// sort order for imported tiddler listbox
});

if (config.macros.importTiddlers.coreHandler==undefined)
	config.macros.importTiddlers.coreHandler=config.macros.importTiddlers.handler; // save built-in handler
config.macros.importTiddlers.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	if (!params[0] || params[0].toLowerCase()=='core') { // default to built in
		if (config.macros.importTiddlers.coreHandler)
			config.macros.importTiddlers.coreHandler.apply(this,arguments);
		else 
			createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);
	} else if (params[0]=='link') { // show link to floating panel
		createTiddlyButton(place,params[1]||this.label,params[2]||this.prompt,onClickImportMenu);
	} else if (params[0]=='inline') {// show panel as INLINE tiddler content
		createImportPanel(place);
		document.getElementById("importPanel").style.position="static";
		document.getElementById("importPanel").style.display="block";
	} else if (config.macros.loadTiddlers)
		config.macros.loadTiddlers.handler(place,macroName,params); // any other params: loadtiddlers
}

// // ''INTERFACE DEFINITION''
// // Handle link click to create/show/hide control panel
//{{{
function onClickImportMenu(e)
{
	if (!e) var e = window.event;
	var parent=resolveTarget(e).parentNode;
	var panel = document.getElementById("importPanel");
	if (panel==undefined || panel.parentNode!=parent)
		panel=createImportPanel(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" ;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
}
//}}}

// // Create control panel: HTML, CSS
//{{{
function createImportPanel(place) {
	var cmi=config.macros.importTiddlers; // abbreviation
	var panel=document.getElementById("importPanel");
	if (panel) { panel.parentNode.removeChild(panel); }
	setStylesheet(cmi.css,"importTiddlers");
	panel=createTiddlyElement(place,"span","importPanel",null,null)
	panel.innerHTML=cmi.html;
	refreshImportList();
	var siteURL=store.getTiddlerText("SiteUrl"); if (!siteURL) siteURL="";
	document.getElementById("importSourceURL").value=siteURL;
	cmi.src=siteURL;
	var siteProxy=store.getTiddlerText("SiteProxy"); if (!siteProxy) siteProxy="SiteProxy";
	document.getElementById("importSiteProxy").value=siteProxy;
	cmi.proxy=siteProxy;
	if (config.browser.isGecko) { // FF3 FIXUP
		document.getElementById("fileImportSource").style.display="none";
		document.getElementById("importLocalPanelFix").style.display="block";
	}
	return panel;
}
//}}}

// // CSS
//{{{
config.macros.importTiddlers.css = '\
#importPanel {\
	display: none; position:absolute; z-index:11; width:35em; right:105%; top:3em;\
	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;\
}\
#importPanel a, #importPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\
#importPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\
#importPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\
#importPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\
#importPanel select { width:100%;margin:0px;font-size:8pt;line-height:110%;}\
#importPanel input  { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
#importPanel .box { border:1px solid #000; background-color:#eee; padding:3px 5px; margin-bottom:5px; -moz-border-radius:5px;}\
#importPanel .topline { border-top:1px solid #999; padding-top:2px; margin-top:2px; }\
#importPanel .rad { width:auto; }\
#importPanel .chk { width:auto; margin:1px;border:0; }\
#importPanel .btn { width:auto; }\
#importPanel .btn1 { width:98%; }\
#importPanel .btn2 { width:48%; }\
#importPanel .btn3 { width:32%; }\
#importPanel .btn4 { width:23%; }\
#importPanel .btn5 { width:19%; }\
#importPanel .importButton { padding: 0em; margin: 0px; font-size:8pt; }\
#importPanel .importListButton { padding:0em 0.25em 0em 0.25em; color: #000000; display:inline }\
#backstagePanel #importPanel { left:10%; right:auto; }\
';
//}}}

// // HTML 
//{{{
config.macros.importTiddlers.html = '\
<!-- source and report -->\
<table><tr><td align=left>\
	import from\
	<input type="radio" class="rad" name="importFrom" id="importFromFile" value="file" CHECKED\
		onclick="onClickImportButton(this,event)" title="show file controls"> local file\
	<input type="radio" class="rad" name="importFrom" id="importFromWeb"  value="http"\
		onclick="onClickImportButton(this,event)" title="show web controls"> web server\
</td><td align=right>\
	<input type=checkbox class="chk" id="chkImportReport" checked\
		onClick="config.options[\'chkImportReport\']=this.checked;"> create report\
</td></tr></table>\
\
<div class="box" id="importSourcePanel" style="margin:.5em">\
<div id="importLocalPanel" style="display:block;margin-bottom:2px;"><!-- import from local file  -->\
enter or browse for source path/filename<br>\
<input type="file" id="fileImportSource" size=57 style="width:100%"\
	onKeyUp="config.macros.importTiddlers.src=this.value"\
	onChange="config.macros.importTiddlers.src=this.value;document.getElementById(\'importLoad\').onclick()">\
<div id="importLocalPanelFix" style="display:none"><!-- FF3 FIXUP -->\
	<input type="text" id="fileImportSourceFix" style="width:90%"\
		title="Enter a path/file to import"\
		onKeyUp="config.macros.importTiddlers.src=this.value"\
		onChange="config.macros.importTiddlers.src=this.value; document.getElementById(\'importLoad\').onclick()">\
	<input type="button" id="fileImportSourceFixButton" style="width:7%" value="..."\
		title="Select a path/file to import"\
		onClick="var r=config.macros.importTiddlers.askForFilename(this); if (!r||!r.length) return;\
			document.getElementById(\'fileImportSourceFix\').value=r;\
			config.macros.importTiddlers.src=r;\
			document.getElementById(\'importLoad\').onclick()">\
</div><!--end FF3 FIXUP-->\
</div><!--end local-->\
<div id="importHTTPPanel" style="display:none;margin-bottom:2px;"><!-- import from http server -->\
<table><tr><td align=left>\
	enter a URL or <a href="javascript:;" id="importSelectFeed"\
		onclick="onClickImportButton(this,event)" title="select a pre-defined \'systemServer\' URL">\
		select a server</a><br>\
</td><td align=right>\
	<input type="checkbox" class="chk" id="importUsePassword"\
		onClick="config.macros.importTiddlers.usePassword=this.checked;\
			config.macros.importTiddlers.showPanel(\'importIDPWPanel\',this.checked,true);">password\
	<input type="checkbox" class="chk" id="importUseProxy"\
		onClick="config.macros.importTiddlers.useProxy=this.checked;\
			config.macros.importTiddlers.showPanel(\'importSiteProxy\',this.checked,true);">proxy\
</td></tr></table>\
<input type="text" id="importSiteProxy" style="display:none;margin-bottom:1px" onfocus="this.select()" value="SiteProxy"\
	onKeyUp="config.macros.importTiddlers.proxy=this.value"\
	onChange="config.macros.importTiddlers.proxy=this.value;">\
<input type="text" id="importSourceURL" onfocus="this.select()" value="SiteUrl"\
	onKeyUp="config.macros.importTiddlers.src=this.value"\
	onChange="config.macros.importTiddlers.src=this.value;">\
<div id="importIDPWPanel" style="text-align:center;margin-top:2px;display:none";>\
username: <input type=text id="txtImportID" style="width:25%" \
	onChange="config.options.txtRemoteUsername=this.value;">\
 password: <input type=password id="txtImportPW" style="width:25%" \
	onChange="config.options.txtRemotePassword=this.value;">\
</div><!--end idpw-->\
</div><!--end http-->\
</div><!--end source-->\
\
<div class="box" id="importSelectPanel" style="display:none;margin:.5em;">\
<table><tr><td align=left>\
select:\
<a href="javascript:;" id="importSelectAll"\
	onclick="onClickImportButton(this);return false;" title="SELECT all tiddlers">\
	all</a>\
&nbsp;<a href="javascript:;" id="importSelectNew"\
	onclick="onClickImportButton(this);return false;" title="SELECT tiddlers not already in destination document">\
	added</a>\
&nbsp;<a href="javascript:;" id="importSelectChanges"\
	onclick="onClickImportButton(this);return false;" title="SELECT tiddlers that have been updated in source document">\
	changes</a>\
&nbsp;<a href="javascript:;" id="importSelectDifferences"\
	onclick="onClickImportButton(this);return false;" title="SELECT tiddlers that have been added or are different from existing tiddlers">\
	differences</a>\
</td><td align=right>\
<a href="javascript:;" id="importListSmaller"\
	onclick="onClickImportButton(this);return false;" title="SHRINK list size">\
	&nbsp;&#150;&nbsp;</a>\
<a href="javascript:;" id="importListLarger"\
	onclick="onClickImportButton(this);return false;" title="GROW list size">\
	&nbsp;+&nbsp;</a>\
<a href="javascript:;" id="importListMaximize"\
	onclick="onClickImportButton(this);return false;" title="MAXIMIZE/RESTORE list size">\
	&nbsp;=&nbsp;</a>\
</td></tr></table>\
<select id="importList" size=8 multiple\
	onchange="setTimeout(\'refreshImportList(\'+this.selectedIndex+\')\',1)">\
	<!-- NOTE: delay refresh so list is updated AFTER onchange event is handled -->\
</select>\
<div style="text-align:center">\
	<a href="javascript:;"\
		title="click for help using filters..."\
		onclick="alert(\'A filter consists of one or more space-separated combinations of:\\n\\ntiddler titles\\ntag:[[tagvalue]]\\ntag:[[tag expression]] (requires MatchTagsPlugin)\\nstory:[[TiddlerName]]\\nsearch:[[searchtext]]\\n\\nUse a blank filter for all tiddlers.\')"\
	>filter</a>\
	<input type="text" id="importLastFilter" style="margin-bottom:1px; width:65%"\
		title="Enter a combination of one or more filters. Use a blank filter for all tiddlers."\
		onfocus="this.select()" value=""\
		onKeyUp="config.macros.importTiddlers.lastFilter=this.value"\
		onChange="config.macros.importTiddlers.lastFilter=this.value;">\
	<input type="button" id="importApplyFilter" style="width:20%" value="apply"\
		title="filter list of tiddlers to include only those that match certain criteria"\
		onclick="onClickImportButton(this)">\
	</div>\
</div><!--end select-->\
\
<div class="box" id="importOptionsPanel" style="text-align:center;margin:.5em;display:none;">\
	apply tags: <input type=checkbox class="chk" id="chkImportTags" checked\
		onClick="config.macros.importTiddlers.importTags=this.checked;">from source&nbsp;\
	<input type=checkbox class="chk" id="chkKeepTags" checked\
		onClick="config.macros.importTiddlers.keepTags=this.checked;">keep existing&nbsp;\
	<input type=checkbox class="chk" id="chkAddTags" \
		onClick="config.macros.importTiddlers.addTags=this.checked;\
			config.macros.importTiddlers.showPanel(\'txtNewTags\',this.checked,true);\
			if (this.checked) document.getElementById(\'txtNewTags\').focus();">add tags<br>\
	<input type=text id="txtNewTags" style="margin-top:4px;display:none;" size=15\ onfocus="this.select()" \
		title="enter tags to be added to imported tiddlers" \
		onKeyUp="config.macros.importTiddlers.newTags=this.value;\
		document.getElementById(\'chkAddTags\').checked=this.value.length>0;" autocomplete=off>\
	<nobr><input type=checkbox class="chk" id="chkSync" \
		onClick="config.macros.importTiddlers.sync=this.checked;">\
		link imported tiddlers to source document (for sync later)</nobr>\
</div><!--end options-->\
\
<div id="importButtonPanel" style="text-align:center">\
	<input type=button id="importLoad"	class="importButton btn3" value="open"\
		title="load listbox with tiddlers from source document"\
		onclick="onClickImportButton(this)">\
	<input type=button id="importOptions"	class="importButton btn3" value="options..."\
		title="set options for tags, sync, etc."\
		onclick="onClickImportButton(this)">\
	<input type=button id="importStart"	class="importButton btn3" value="import"\
		title="start/stop import of selected source tiddlers into current document"\
		onclick="onClickImportButton(this)">\
	<input type=button id="importClose"	class="importButton btn3" value="done"\
		title="clear listbox or hide control panel"\
		onclick="onClickImportButton(this)">\
</div>\
\
<div class="none" id="importCollisionPanel" style="display:none;margin:.5em 0 .5em .5em;">\
	<table><tr><td style="width:65%" align="left">\
		<table><tr><td align=left>\
			tiddler already exists:\
		</td><td align=right>\
			<input type=checkbox class="chk" id="importApplyToAll" \
			onclick="document.getElementById(\'importRename\').disabled=this.checked;"\
			checked>apply to all\
		</td></tr></table>\
		<input type=text id="importNewTitle" size=15 autocomplete=off">\
	</td><td style="width:34%" align="center">\
		<input type=button id="importMerge"\
			class="importButton" style="width:47%" value="merge"\
			title="append the incoming tiddler to the existing tiddler"\
			onclick="onClickImportButton(this)"><!--\
		--><input type=button id="importSkip"\
			class="importButton" style="width:47%" value="skip"\
			title="do not import this tiddler"\
			onclick="onClickImportButton(this)"><!--\
		--><br><input type=button id="importRename"\
			class="importButton" style="width:47%" value="rename"\
			title="rename the incoming tiddler"\
			onclick="onClickImportButton(this)"><!--\
		--><input type=button id="importReplace"\
			class="importButton" style="width:47%" value="replace"\
			title="discard the existing tiddler"\
			onclick="onClickImportButton(this)">\
	</td></tr></table>\
</div><!--end collision-->\
';
//}}}

// // Control interactions
//{{{
function onClickImportButton(which,event)
{
	var cmi=config.macros.importTiddlers; // abbreviation

	var list = document.getElementById('importList');
	if (!list) return;
	var thePanel = document.getElementById('importPanel');
	var theCollisionPanel = document.getElementById('importCollisionPanel');
	var theNewTitle = document.getElementById('importNewTitle');
	var count=0;
	switch (which.id)
		{
		case 'importFromFile':	// show local panel
		case 'importFromWeb':	// show HTTP panel
			cmi.local=(which.id=='importFromFile');
			cmi.showPanel('importLocalPanel',cmi.local);
			cmi.showPanel('importHTTPPanel',!cmi.local);
			break;
		case 'importOptions':	// show/hide options panel
			cmi.showPanel('importOptionsPanel',document.getElementById('importOptionsPanel').style.display=='none');
			break;
		case 'fileImportSource':
		case 'importLoad':		// load import source into hidden frame
			importReport();		// if an import was in progress, generate a report
			cmi.inbound=null;	// clear the imported tiddler buffer
			refreshImportList();	// reset/resize the listbox
			if (cmi.src=="") break;
			// Load document, read it's DOM and fill the list
			cmi.loadRemoteFile(cmi.src,cmi.filterTiddlerList);
			break;
		case 'importSelectFeed':	// select a pre-defined systemServer feed URL
			var p=Popup.create(which); if (!p) return;
			var tids=store.getTaggedTiddlers('systemServer');
			if (!tids.length)
				createTiddlyText(createTiddlyElement(p,'li'),'no pre-defined server feeds');
			for (var t=0; t<tids.length; t++) {
				var u=store.getTiddlerSlice(tids[t].title,"URL");
				var d=store.getTiddlerSlice(tids[t].title,"Description");
				if (!d||!d.length) d=store.getTiddlerSlice(tids[t].title,"description");
				if (!d||!d.length) d=u;
				createTiddlyButton(createTiddlyElement(p,'li'),tids[t].title,d,
					function(){
						var u=this.getAttribute('url');
						document.getElementById('importSourceURL').value=u;
						config.macros.importTiddlers.src=u;
						document.getElementById('importLoad').onclick();
					},
					null,null,null,{url:u});
			}
			Popup.show(p,false);
			event.cancelBubble = true;
			if (event.stopPropagation) event.stopPropagation();
			return(false);
			// create popup with feed list
			// onselect, insert feed URL into input field.
			break;
		case 'importSelectAll':		// select all tiddler list items (i.e., not headings)
			importReport();		// if an import was in progress, generate a report
			for (var t=0,count=0; t < list.options.length; t++) {
				if (list.options[t].value=="") continue;
				list.options[t].selected=true;
				count++;
			}
			clearMessage(); displayMessage(cmi.countMsg.format([count]));
			document.getElementById('importStart').disabled=!count;
			break;
		case 'importSelectNew':		// select tiddlers not in current document
			importReport();		// if an import was in progress, generate a report
			for (var t=0,count=0; t < list.options.length; t++) {
				list.options[t].selected=false;
				if (list.options[t].value=="") continue;
				list.options[t].selected=!store.tiddlerExists(list.options[t].value);
				count+=list.options[t].selected?1:0;
			}
			clearMessage(); displayMessage(cmi.countMsg.format([count]));
			document.getElementById('importStart').disabled=!count;
			break;
		case 'importSelectChanges':		// select tiddlers that are updated from existing tiddlers
			importReport();		// if an import was in progress, generate a report
			for (var t=0,count=0; t < list.options.length; t++) {
				list.options[t].selected=false;
				if (list.options[t].value==""||!store.tiddlerExists(list.options[t].value)) continue;
				for (var i=0; i<cmi.inbound.length; i++) // find matching inbound tiddler
					{ var inbound=cmi.inbound[i]; if (inbound.title==list.options[t].value) break; }
				list.options[t].selected=(inbound.modified-store.getTiddler(list.options[t].value).modified>0); // updated tiddler
				count+=list.options[t].selected?1:0;
			}
			clearMessage(); displayMessage(cmi.countMsg.format([count]));
			document.getElementById('importStart').disabled=!count;
			break;
		case 'importSelectDifferences':		// select tiddlers that are new or different from existing tiddlers
			importReport();		// if an import was in progress, generate a report
			for (var t=0,count=0; t < list.options.length; t++) {
				list.options[t].selected=false;
				if (list.options[t].value=="") continue;
				if (!store.tiddlerExists(list.options[t].value)) { list.options[t].selected=true; count++; continue; }
				for (var i=0; i<cmi.inbound.length; i++) // find matching inbound tiddler
					{ var inbound=cmi.inbound[i]; if (inbound.title==list.options[t].value) break; }
				list.options[t].selected=(inbound.modified-store.getTiddler(list.options[t].value).modified!=0); // changed tiddler
				count+=list.options[t].selected?1:0;
			}
			clearMessage(); displayMessage(cmi.countMsg.format([count]));
			document.getElementById('importStart').disabled=!count;
			break;
		case 'importApplyFilter':	// filter list to include only matching tiddlers
			importReport();		// if an import was in progress, generate a report
			clearMessage();
			if (!cmi.all) // no tiddlers loaded = "0 selected"
				{ displayMessage(cmi.countMsg.format([0])); return false; }
			var hash=document.getElementById('importLastFilter').value;
			cmi.inbound=cmi.filterByHash("#"+hash,cmi.all);
			refreshImportList();	// reset/resize the listbox
			break;
		case 'importStart':		// initiate the import processing
			importReport();		// if an import was in progress, generate a report
			document.getElementById('importApplyToAll').checked=false;
			document.getElementById('importStart').value=cmi.stopText;
			if (cmi.index>0) cmi.index=-1; // stop processing
			else cmi.index=importTiddlers(0); // or begin processing
			importStopped();
			break;
		case 'importClose':		// unload imported tiddlers or hide the import control panel
			// if imported tiddlers not loaded, close the import control panel
			if (!cmi.inbound) { thePanel.style.display='none'; break; }
			importReport();		// if an import was in progress, generate a report
			cmi.inbound=null;	// clear the imported tiddler buffer
			refreshImportList();	// reset/resize the listbox
			break;
		case 'importSkip':	// don't import the tiddler
			cmi.lastAction=which;
			var theItem	= list.options[cmi.index];
			for (var j=0;j<cmi.inbound.length;j++)
			if (cmi.inbound[j].title==theItem.value) break;
			var theImported = cmi.inbound[j];
			theImported.status='skipped after asking';			// mark item as skipped