Welcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association
Last Day of the Firemaker Gathering...
Expected schedule of events:
//Pack-up and Clean-Up of Site// 9:00 - 12:00
//Closing Ceremonies// 1:00
//All items in italics are subject to change.//
The 2011 Firemaker Gathering starts today and lasts all week!
Expected schedule of events:
- Registration Starts 12:00 noon
- Tent & Campsite ~Set-Up all afternoon and evening
- Evening Potluck Dinner and Welcome 6:00-6:30
- Opening Ceremonies 7:00
- //Women's Tent is put up// (all women are invited to help)
//Items in italics are subject to change.//
Day Two of the Firemaker Gathering!
Expected schedule of events:
-''Breakfast'' 8:00 - 8:30
- Community Building Games 9:00-12:00
''Lunch & [[Circle]]'' 12:15 - 1:15
''Afternoon Workshop'' 1:30 - 4:30
''Dinner'' 6:00 - 6:30
- //Activities at the Fire-pit// 7:00
//Items in italics are subject to change.//
Day Three of the Firemaker Gathering!
Expected schedule of events:
''Morning Activities'' 7:00 - 8:00
''Breakfast'' 8:00 - 8:30
''Morning Workshop'' 9:00 - 12:00
''Lunch & [[Circle]]'' 12:15 - 1:15
''Afternoon Workshop'' 1:30 - 4:30
''Dinner'' 6:00 - 6:30
[[Women's Circle|Women's and Men's Circles]] //in the Women's Tent// 7:00 (We invite all men in our community to support the women by consciously contributing to childcare during the Women's Circle.)
//Items in italics are subject to change.//
Day Four of the Firemaker Gathering!
Expected schedule of events:
''Morning Activities'' 7:00 - 8:00
''Breakfast'' 8:00 - 8:30
''Morning Workshop'' 9:00 - 12:00
''Lunch & [[Circle]]'' 12:15 - 1:15
''Free Time / Integration'' 1:30 - 6:00 no workshops to be held
''Trader's Blankets'' 1:30 - 4:30
''Dinner'' 6:00 - 6:30
[[Men's Circle|Women's and Men's Circles]] 7:00 (We invite all women in our community to support the men by consciously contributing to childcare during the Men's Circle.)
''Maiden's Night'' in the Women's Tent 7:00
//Items in italics are subject to change.//
Day Five of the Firemaker Gathering!
Expected schedule of events:
''Morning Activities'' 7:00 - 8:00
''Breakfast'' 8:00 - 8:30
''Morning Workshop'' 9:00 - 12:00
''Lunch & [[Circle]]'' 12:15 - 1:15
''Afternoon Workshop'' 1:30 - 4:30
''Trader's Blankets'' 1:30 - 4:30
''Pit Cook Dinner'' 6:00
//Talent Show 7:30//
//Items in italics are subject to change.//
Day Six of the Firemaker Gathering!
Expected schedule of events:
//Women's Tent becomes open to all members of the community//
''Morning Activities'' 7:00 - 8:00
''Breakfast'' 8:00 - 8:30
''Morning Workshop'' 9:00 - 12:00
''Lunch & [[Circle]]'' 12:15 - 1:15
''Afternoon Workshop'' 1:30 - 4:30
''Dinner'' 6:00 - 6:30
[[Giveaway]] 7:00
//Items in italics are subject to change.//
!How to Use This Wiki
For many folks, all you need to know is that this wiki can be used as any normal website would be. The main difference is that site content is viewed via small chunks known as "tiddlers," which can be viewed all from the same website page. In fact, this entire website is only one HTML file. You may have already figured out that you can close a tiddler that is currently open by clicking the "close" link/button at the top center of the tiddler in question. You may also want some [[navigation help|Navigation Help]].
!Adding Content
If you want to add photos, links, or other content to this wiki, please see [[Adding Content Help]] for more information.
!~TiddlyWiki
This wiki is a proud child of [[TiddlyWiki|http://www.tiddlywiki.com]], which was created by Jeremy Ruston under an Open Source License. ~TiddlyWiki is not only © 2009 [[unamesa|http://www.unamesa.org]], it is also a super (free! open source!) program well-worth checking out if you have any unmet computing needs. A ~TiddlyWiki might just solve them for you. Seriously.
^^~TiddlyWiki <<version>>^^
[[Welcome & News]]
[[Firemaker PSS]]
[[Nature-Based Living]]
[[Constitution]]
[[??? Wiki Help]]
Some of the morning activities from previous years include yoga, trail running, morning swims, meditation, and a Bird Language workshop.
Late afternoon activities that were announced in past year's mid-week include a Contact Dancing workshop, a hosted discussion on Intentional Community, a two-part discussion on Community-Supported Healing, and the annual five-minute workshop (now in its fourth year).
Some of the evening activities we have had in previous years include music (and dancing!) around the fire-pit, the [[Firestalk]], storytelling, and the super-awesome [[Talent Show]].
There are many moments throughout Firemaker where someone may offer an early-morning activity, a five-minute workshop before the afternoon circle, or a between-afternoon-workshops-and-dinner discussion or wrestling match. Please consult with the council prior to offering an activity, so we can make sure you have time at the [[circle|Circle]] to announce it, and so we can schedule it with the least amount of conflict with other activity times.
This portion of the Firemaker website is still under construction. We plan to provide information about how you can add your own content to this wiki.
Dates in //italics// have no event posted. Dates in ''bold'' have an event posted. Today's date is shaded olive green.
<<calendar thismonth>>
!Add an Event !
To add a Firemaker- or primitive-skills-related event to the calendar, simply click on the appropriate date. A new "tiddler" will pop up, so you can double-click on its text and fill in the text field to describe your event. Click "done" at the upper right of your tiddler when you are done!
If you would prefer, you could also [[contact us|Contact Us]] and we will be happy to post your event for you.
''Please Note:'' For your own safety, if you are hosting an event for Firemaker folks, please do not post any information you would not want the general public to know (i.e. any personal contact information you wouldn't feel comfortable sharing with a random stranger at the bus stop). This site is accessible to anyone, and we want you to stay safe! If you want help getting sensitive information (like where you live, if you are wanting to host an event at your place) to the whole Firemaker community, please [[contact us|Contact Us]] so we can send an email to the entire Firemaker List.
/***
|Name|CalendarPlugin|
|Source|http://www.TiddlyTools.com/#CalendarPlugin|
|Version|1.5.0|
|Author|Eric Shulman|
|Original Author|SteveRumsby|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Description|display monthly and yearly calendars|
NOTE: For //enhanced// date popup display, optionally install [[DatePlugin]] and [[ReminderMacros]]
!!!Usage:
<<<
|{{{<<calendar>>}}}|full-year calendar for the current year|
|{{{<<calendar year>>}}}|full-year calendar for the specified year|
|{{{<<calendar year month>>}}}|one month calendar for the specified month and year|
|{{{<<calendar thismonth>>}}}|one month calendar for the current month|
|{{{<<calendar lastmonth>>}}}|one month calendar for last month|
|{{{<<calendar nextmonth>>}}}|one month calendar for next month|
|{{{<<calendar +n>>}}}<br>{{{<<calendar -n>>}}}|one month calendar for a month +/- 'n' months from now|
<<<
!!!Configuration:
<<<
|''First day of week:''<br>{{{config.options.txtCalFirstDay}}}|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|
|''First day of weekend:''<br>{{{config.options.txtCalStartOfWeekend}}}|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|
<<option chkDisplayWeekNumbers>> Display week numbers //(note: Monday will be used as the start of the week)//
|''Week number display format:''<br>{{{config.options.txtWeekNumberDisplayFormat }}}|<<option txtWeekNumberDisplayFormat >>|
|''Week number link format:''<br>{{{config.options.txtWeekNumberLinkFormat }}}|<<option txtWeekNumberLinkFormat >>|
<<<
!!!Revisions
<<<
2009.04.31 [1.5.0] rewrote onClickCalendarDate() (popup handler) and added config.options.txtCalendarReminderTags. Partial code reduction/cleanup. Assigned true version number (1.5.0)
2008.09.10 added '+n' (and '-n') param to permit display of relative months (e.g., '+6' means 'six months from now', '-3' means 'three months ago'. Based on suggestion from Jean.
2008.06.17 added support for config.macros.calendar.todaybg
2008.02.27 in handler(), DON'T set hard-coded default date format, so that *customized* value (pre-defined in config.macros.calendar.journalDateFmt is used.
2008.02.17 in createCalendarYear(), fix next/previous year calculation (use parseInt() to convert to numeric value). Also, use journalDateFmt for date linking when NOT using [[DatePlugin]].
2008.02.16 in createCalendarDay(), week numbers now created as TiddlyLinks, allowing quick creation/navigation to 'weekly' journals (based on request from Kashgarinn)
2008.01.08 in createCalendarMonthHeader(), 'month year' heading is now created as TiddlyLink, allowing quick creation/navigation to 'month-at-a-time' journals
2007.11.30 added 'return false' to onclick handlers (prevent IE from opening blank pages)
2006.08.23 added handling for weeknumbers (code supplied by Martin Budden (see 'wn**' comment marks). Also, incorporated updated by Jeremy Sheeley to add caching for reminders (see [[ReminderMacros]], if installed)
2005.10.30 in config.macros.calendar.handler(), use 'tbody' element for IE compatibility. Also, fix year calculation for IE's getYear() function (which returns '2005' instead of '105'). Also, in createCalendarDays(), use showDate() function (see [[DatePlugin]], if installed) to render autostyled date with linked popup. Updated calendar stylesheet definition: use .calendar class-specific selectors, add text centering and margin settings
2006.05.29 added journalDateFmt handling
<<<
!!!Code
***/
//{{{
version.extensions.CalendarPlugin= { major: 1, minor: 5, revision: 0, date: new Date(2009,5,31)};
//}}}
//{{{
if(config.options.txtCalFirstDay == undefined)
config.options.txtCalFirstDay = 0;
if(config.options.txtCalStartOfWeekend == undefined)
config.options.txtCalStartOfWeekend = 5;
if(config.options.chkDisplayWeekNumbers == undefined)
config.options.chkDisplayWeekNumbers = false;
if(config.options.chkDisplayWeekNumbers)
config.options.txtCalFirstDay = 0;
if(config.options.txtWeekNumberDisplayFormat == undefined)
config.options.txtWeekNumberDisplayFormat = 'w0WW';
if(config.options.txtWeekNumberLinkFormat == undefined)
config.options.txtWeekNumberLinkFormat = 'YYYY-w0WW';
if(config.options.txtCalendarReminderTags == undefined)
config.options.txtCalendarReminderTags = 'reminder';
config.macros.calendar = {
monthnames:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
daynames:['M','T','W','T','F','S','S'],
todaybg:'#665511',
weekendbg:'#663311',
monthbg:'#663311',
holidaybg:'#663311',
journalDateFmt:'DD MMM YYYY',
monthdays:[31,28,31,30,31,30,31,31,30,31,30,31],
holidays:[ ] // for customization see [[CalendarPluginConfig]]
};
//}}}
//{{{
function calendarIsHoliday(date)
{
var longHoliday = date.formatString('0DD/0MM/YYYY');
var shortHoliday = date.formatString('0DD/0MM');
for(var i = 0; i < config.macros.calendar.holidays.length; i++) {
if( config.macros.calendar.holidays[i]==longHoliday
|| config.macros.calendar.holidays[i]==shortHoliday)
return true;
}
return false;
}
//}}}
//{{{
config.macros.calendar.handler = function(place,macroName,params) {
var calendar = createTiddlyElement(place, 'table', null, 'calendar', null);
var tbody = createTiddlyElement(calendar, 'tbody');
var today = new Date();
var year = today.getYear();
if (year<1900) year+=1900;
// get journal format from SideBarOptions (ELS 5/29/06 - suggested by MartinBudden)
var text = store.getTiddlerText('SideBarOptions');
var re = new RegExp('<<(?:newJournal)([^>]*)>>','mg'); var fm = re.exec(text);
if (fm && fm[1]!=null) { var pa=fm[1].readMacroParams(); if (pa[0]) this.journalDateFmt = pa[0]; }
var month=-1;
if (params[0] == 'thismonth') {
var month=today.getMonth();
} else if (params[0] == 'lastmonth') {
var month = today.getMonth()-1; if (month==-1) { month=11; year--; }
} else if (params[0] == 'nextmonth') {
var month = today.getMonth()+1; if (month>11) { month=0; year++; }
} else if (params[0]&&'+-'.indexOf(params[0].substr(0,1))!=-1) {
var month = today.getMonth()+parseInt(params[0]);
if (month>11) { year+=Math.floor(month/12); month%=12; };
if (month<0) { year+=Math.floor(month/12); month=12+month%12; }
} else if (params[0]) {
year = params[0];
if(params[1]) month=parseInt(params[1])-1;
if (month>11) month=11; if (month<0) month=0;
}
if (month!=-1) {
cacheReminders(new Date(year, month, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, month);
} else {
cacheReminders(new Date(year, 0, 1, 0, 0), 366);
createCalendarYear(tbody, year);
}
window.reminderCacheForCalendar = null;
}
//}}}
//{{{
// cache used to store reminders while the calendar is being rendered
// it will be renulled after the calendar is fully rendered.
window.reminderCacheForCalendar = null;
//}}}
//{{{
function cacheReminders(date, leadtime)
{
if (window.findTiddlersWithReminders == null) return;
window.reminderCacheForCalendar = {};
var leadtimeHash = [];
leadtimeHash [0] = 0;
leadtimeHash [1] = leadtime;
var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);
for(var i = 0; i < t.length; i++) {
//just tag it in the cache, so that when we're drawing days, we can bold this one.
window.reminderCacheForCalendar[t[i]['matchedDate']] = 'reminder:' + t[i]['params']['title'];
}
}
//}}}
//{{{
function createCalendarOneMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, 'tr');
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon]+' '+year, true, year, mon);
row = createTiddlyElement(calendar, 'tr');
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, 'tr');
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon]+' '+ year, false, year, mon);
row = createTiddlyElement(calendar, 'tr');
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarYear(calendar, year)
{
var row;
row = createTiddlyElement(calendar, 'tr');
var back = createTiddlyElement(row, 'td');
var backHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, parseInt(year)-1);
return false; // consume click
};
createTiddlyButton(back, '<', 'Previous year', backHandler);
back.align = 'center';
var yearHeader = createTiddlyElement(row, 'td', null, 'calendarYear', year);
yearHeader.align = 'center';
yearHeader.setAttribute('colSpan',config.options.chkDisplayWeekNumbers?22:19);//wn**
var fwd = createTiddlyElement(row, 'td');
var fwdHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, parseInt(year)+1);
return false; // consume click
};
createTiddlyButton(fwd, '>', 'Next year', fwdHandler);
fwd.align = 'center';
createCalendarMonthRow(calendar, year, 0);
createCalendarMonthRow(calendar, year, 3);
createCalendarMonthRow(calendar, year, 6);
createCalendarMonthRow(calendar, year, 9);
}
//}}}
//{{{
function createCalendarMonthRow(cal, year, mon)
{
var row = createTiddlyElement(cal, 'tr');
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);
row = createTiddlyElement(cal, 'tr');
createCalendarDayHeader(row, 3);
createCalendarDayRows(cal, year, mon);
}
//}}}
//{{{
function createCalendarMonthHeader(cal, row, name, nav, year, mon)
{
var month;
if (nav) {
var back = createTiddlyElement(row, 'td');
back.align = 'center';
back.style.background = config.macros.calendar.monthbg;
var backMonHandler = function() {
var newyear = year;
var newmon = mon-1;
if(newmon == -1) { newmon = 11; newyear = newyear-1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
return false; // consume click
};
createTiddlyButton(back, '<', 'Previous month', backMonHandler);
month = createTiddlyElement(row, 'td', null, 'calendarMonthname')
createTiddlyLink(month,name,true);
month.setAttribute('colSpan', config.options.chkDisplayWeekNumbers?6:5);//wn**
var fwd = createTiddlyElement(row, 'td');
fwd.align = 'center';
fwd.style.background = config.macros.calendar.monthbg;
var fwdMonHandler = function() {
var newyear = year;
var newmon = mon+1;
if(newmon == 12) { newmon = 0; newyear = newyear+1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
return false; // consume click
};
createTiddlyButton(fwd, '>', 'Next month', fwdMonHandler);
} else {
month = createTiddlyElement(row, 'td', null, 'calendarMonthname', name)
month.setAttribute('colSpan',config.options.chkDisplayWeekNumbers?8:7);//wn**
}
month.align = 'center';
month.style.background = config.macros.calendar.monthbg;
}
//}}}
//{{{
function createCalendarDayHeader(row, num)
{
var cell;
for(var i = 0; i < num; i++) {
if (config.options.chkDisplayWeekNumbers) createTiddlyElement(row, 'td');//wn**
for(var j = 0; j < 7; j++) {
var d = j + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
cell = createTiddlyElement(row, 'td', null, null, config.macros.calendar.daynames[d]);
if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))
cell.style.background = config.macros.calendar.weekendbg;
}
}
}
//}}}
//{{{
function createCalendarDays(row, col, first, max, year, mon) {
var i;
if (config.options.chkDisplayWeekNumbers){
if (first<=max) {
var ww = new Date(year,mon,first);
var td=createTiddlyElement(row, 'td');//wn**
var link=createTiddlyLink(td,ww.formatString(config.options.txtWeekNumberLinkFormat),false);
link.appendChild(document.createTextNode(
ww.formatString(config.options.txtWeekNumberDisplayFormat)));
}
else createTiddlyElement(row, 'td');//wn**
}
for(i = 0; i < col; i++)
createTiddlyElement(row, 'td');
var day = first;
for(i = col; i < 7; i++) {
var d = i + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
var daycell = createTiddlyElement(row, 'td');
var isaWeekend=((d==(config.options.txtCalStartOfWeekend-0)
|| d==(config.options.txtCalStartOfWeekend-0+1))?true:false);
if(day > 0 && day <= max) {
var celldate = new Date(year, mon, day);
// ELS 10/30/05 - use <<date>> macro's showDate() function to create popup
// ELS 05/29/06 - use journalDateFmt
if (window.showDate) showDate(daycell,celldate,'popup','DD',
config.macros.calendar.journalDateFmt,true, isaWeekend);
else {
if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;
var title = celldate.formatString(config.macros.calendar.journalDateFmt);
if(calendarIsHoliday(celldate))
daycell.style.background = config.macros.calendar.holidaybg;
var now=new Date();
if ((now-celldate>=0) && (now-celldate<86400000)) // is today?
daycell.style.background = config.macros.calendar.todaybg;
if(window.findTiddlersWithReminders == null) {
var link = createTiddlyLink(daycell, title, false);
link.appendChild(document.createTextNode(day));
} else
var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);
}
}
day++;
}
}
//}}}
//{{{
// Create a pop-up containing:
// * a link to a tiddler for this date
// * a 'new tiddler' link to add a reminder for this date
// * links to current reminders for this date
// NOTE: this code is only used if [[ReminderMacros]] is installed AND [[DatePlugin]] is //not// installed.
function onClickCalendarDate(ev) { ev=ev||window.event;
var d=new Date(this.getAttribute('title')); var date=d.formatString(config.macros.calendar.journalDateFmt);
var p=Popup.create(this); if (!p) return;
createTiddlyLink(createTiddlyElement(p,'li'),date,true);
var rem='\\n\\<\\<reminder day:%0 month:%1 year:%2 title: \\>\\>';
rem=rem.format([d.getDate(),d.getMonth()+1,d.getYear()+1900]);
var cmd="<<newTiddler label:[[new reminder...]] prompt:[[add a new reminder to '%0']]"
+" title:[[%0]] text:{{store.getTiddlerText('%0','')+'%1'}} tag:%2>>";
wikify(cmd.format([date,rem,config.options.txtCalendarReminderTags]),p);
createTiddlyElement(p,'hr');
var t=findTiddlersWithReminders(d,[0,31],null,1);
for(var i=0; i<t.length; i++) {
var link=createTiddlyLink(createTiddlyElement(p,'li'), t[i].tiddler, false);
link.appendChild(document.createTextNode(t[i]['params']['title']));
}
Popup.show(); ev.cancelBubble=true; if (ev.stopPropagation) ev.stopPropagation(); return false;
}
//}}}
//{{{
function calendarMaxDays(year, mon)
{
var max = config.macros.calendar.monthdays[mon];
if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) max++;
return max;
}
//}}}
//{{{
function createCalendarDayRows(cal, year, mon)
{
var row = createTiddlyElement(cal, 'tr');
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1 + 7;
var day1 = -first1 + 1;
var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first2 < 0) first2 = first2 + 7;
var day2 = -first2 + 1;
var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first3 < 0) first3 = first3 + 7;
var day3 = -first3 + 1;
var max1 = calendarMaxDays(year, mon);
var max2 = calendarMaxDays(year, mon+1);
var max3 = calendarMaxDays(year, mon+2);
while(day1 <= max1 || day2 <= max2 || day3 <= max3) {
row = createTiddlyElement(cal, 'tr');
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;
createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;
}
}
//}}}
//{{{
function createCalendarDayRowsSingle(cal, year, mon)
{
var row = createTiddlyElement(cal, 'tr');
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1+ 7;
var day1 = -first1 + 1;
var max1 = calendarMaxDays(year, mon);
while(day1 <= max1) {
row = createTiddlyElement(cal, 'tr');
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
}
}
//}}}
//{{{
setStylesheet('.calendar, .calendar table, .calendar th, .calendar tr, .calendar td { text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }', 'calendarStyles');
//}}}
Please take a look at this [[Scouts Canada Camp Gilwell|http://campgilwell.ca/#home]] site for more information, including a map of where to tent, where the bathrooms are, and so on. Please note that this land is unceded territory of the K'ómoks First Nation.
Please take the time to read the [[campsite rules|Campsite Rules]].
If you have mobility issues or concerns and have questions about site access, please [[contact us|Contact Us]].
<html><img src="images/Gilwell tenting2.jpg" /> <img src="images/Gilwell amphitheatre.jpg" /><br><br>
<img src="images/Gilwell swimhole1.jpg" /> <img src="images/Gilwell entrance & tenting.jpg" /><br><br></html>
Camp Gilwell has informed us that they do not have an official list of rules, and instead rely on a positive outdoor ethic. Please read our section on [[Site Stewardship]] for more information.
Children are a vital and vibrant part of the Firemaker community. At our gatherings, children are seen, heard, and respected as being the individuals they are. Each instructor is asked to offer [[children's workshops|Past Workshops]] in addition to the adult workshops, so in every block of workshops there are children's workshops offered and available. Instructors often ask for an adult volunteer to accompany their offered workshop.
Firemaker is a very child-friendly gathering, and some years we have had almost half of our attendance made up by the awesome kids in the Firemaker community. Some of the younger children have even hosted their own workshops. We are also grateful to some teens from the community who have offered workshops for kids.
In past years at Firemaker we have tried different answers to the question of how best to support families with young children. Some years a parent or two have organized a children's shelter, with a bunch of games, art supplies, and an adult nearby to help and care for whichever kids might not want to go to a workshop right then. Other years we have tried a buddy system to help parents feel supported to have some help with childcare. It is an ongoing process of trial and error, and the council is very committed to making the gathering be a place and time of exploration, learning, and fun for children and their families.
We have really tried to embrace the concept of "It takes a village to raise a child." Every adult at Firemaker is expected to help, support, and respect the children at the gathering. There are many ways this manifests: helping a child find their parent, helping a child who might be upset, reminding a child of knife safety, taking the time to make friends with a kid you don't know yet, offering to take a child to a workshop so their parent(s) can have a break, etc.
We hope you will bring your young ones along to Firemaker!
Each day at the Firemaker gatherings we have anywhere from one to three Circles. This just means that the Timekeeper calls everyone to gather together, and the council shares information you'll need to know, and the instructors have a chance to describe the workshops they are about to offer.
The timekeeper generally calls/shouts a five or a ten minute warning, and anyone in earshot repeats the call, spreading the call-out to all corners of the camp. At the time the Circle is to start, the timekeeper will shout "COME ON IN!" and everyone helps to spread that message, too.
The morning and afternoon Circles are for information dissemination. The council might share important news or make announcements, and then the instructors introduce themselves and their workshops. If anyone has an item they wish to share at the Circle, //please// talk to a council member prior to the start of the Cirlcle so that time can be made for that item.
The evening Circle happens right before dinner, and we try to avoid having to make announcements then, though sometimes it is necessary. The evening Circle is mainly for thanksgiving before eating together. If you have a song or poem or saying of thanks that you would like to share, talk to a council member so they can schedule you to lead an evening Circle.
This page is still under construction. Thanks for your patience!
HeaderBG: #336633
HeaderShdw: #336633
HeaderShdwLink: #336633
HeaderFgrd: #FFEEAA
HeaderFgrdLink: #FFEEAA
Background: #8B5A2B
Foreground: #FFFFCC
MainLinks: #FFCC55
MainLinkHover: #FF8800
TiddlerTitles: #FCD116
TiddlerButtons: #FF8800
TiddlerButtonHover: #664422
ButtonHilight: #8B5A2B
ButtonActive: #FFFF00
ButtonActiveBG: #994411
Border: #99AA77
HeadingLines: #997799
Tabs: #FF8800
TabBG: #FFCC55
TabUnS: #996611
TabContent: #FFFFCC
TabContentBG: #8B5A2B
Sidebar: #991188
Error: #f88
PrimaryPale: #333333
PrimaryLight: #666699
PrimaryMid: #669999
PrimaryDark: #FFCCCC
SecondaryPale: #999966
SecondaryLight: #663333
SecondaryMid: #993366
SecondaryDark: #FFCCCC
TertiaryPale: #333333
TertiaryLight: #666699
TertiaryMid: #999999
TertiaryDark: #666666
/***
|Name|CommentPlugin|
|Source|http://www.TiddlyTools.com/#CommentPlugin|
|Documentation|http://www.TiddlyTools.com/#CommentPluginInfo|
|Version|2.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|automatically insert formatted comments into tiddler content|
!!!!!Documentation
>see [[CommentPluginInfo]]
!!!!!Configuration
>see [[CommentPluginInfo]]
!!!!!Revisions
<<<
2011.04.27 2.9.5 merge/clone defaultCustomFields for saving on TiddlySpace
| please see [[CommentPluginInfo]] for previous revision details |
2006.04.20 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.CommentPlugin= {major: 2, minor: 9, revision: 5, date: new Date(2011,4,27)};
config.macros.comment= {
marker: '/%'+'comment'+'%/',
fmt: "__''%subject%''__\n^^posted by %who% on %when%^^\n<<<\n%message%\n<<<\n",
datefmt: 'DD MMM YYYY at hh12:0mm am',
tags: '',
reverse: false,
handler: function(place,macroName,params,wikifier,paramstring,tiddler) {
var span=createTiddlyElement(place,'span');
var here=story.findContainingTiddler(place);
if (here) var tid=here.getAttribute('tiddler'); // containing tiddler title
span.setAttribute('here',tid);
var target=(params[0]&¶ms[0].length&¶ms[0]!='here')?params[0]:tid; // target title
span.setAttribute('target',target);
var overwrite=(params[1]&¶ms[1].toLowerCase()=='overwrite'); if (overwrite) params.shift();
span.setAttribute('overwrite',overwrite?'true':'false');
var reverse=(params[1]&¶ms[1].toLowerCase()=='reverse'); if (reverse) params.shift();
span.setAttribute('reverse',(reverse||this.reverse)?'true':'false');
var marker=this.marker;
if (params[1]&¶ms[1].substr(0,7)=='marker:') {
var marker='/%'+params[1].substr(7)+'%/';
params.shift();
}
span.setAttribute('marker',marker);
var tags=(params[1]&¶ms[1].length)?params[1]:this.tags; // target tags
span.setAttribute('tags',tags);
var fmt=(params[2]&¶ms[2].length)?params[2]:this.fmt; // output format
span.setAttribute('fmt',fmt.unescapeLineBreaks());
var datefmt=(params[3]&¶ms[3].length)?params[3]:this.datefmt; // date format
span.setAttribute('datefmt',datefmt.unescapeLineBreaks());
var html=this.html;
html=html.replace(/%nosubject%/g,(fmt.indexOf('%subject%')==-1)?'none':'block');
html=html.replace(/%nomessage%/g,(fmt.indexOf('%message%')==-1)?'none':'block');
var subjtxt=''; var msgtxt='';
html=html.replace(/%subjtxt%/g,subjtxt);
html=html.replace(/%msgtxt%/g,msgtxt);
span.innerHTML=html;
},
html: "<form style='display:inline;margin:0;padding:0;'>\
<div style='display:%nosubject%'>\
subject:<br>\
<input type='text' name='subject' title='enter subject text' style='width:100%' value='%subjtxt%'>\
</div>\
<div style='display:%nomessage%'>\
message:<br>\
<textarea name='message' rows='7' title='enter message text' \
style='width:100%'>%msgtxt%</textarea>\
</div>\
<center>\
<i></i>\
<input type='button' value='post' onclick='\
var s=this.form.subject; var m=this.form.message;\
if (\"%nosubject%\"!=\"none\" && !s.value.length)\
{ alert(\"Please enter a subject\"); s.focus(); return false; }\
if (\"%nomessage%\"!=\"none\" && !m.value.length)\
{ alert(\"Please enter a message\"); m.focus(); return false; }\
var here=this.form.parentNode.getAttribute(\"here\");\
var reverse=this.form.parentNode.getAttribute(\"reverse\")==\"true\";\
var target=this.form.parentNode.getAttribute(\"target\");\
var marker=this.form.parentNode.getAttribute(\"marker\");\
var tags=this.form.parentNode.getAttribute(\"tags\").readBracketedList();\
var fmt=this.form.parentNode.getAttribute(\"fmt\");\
var datefmt=this.form.parentNode.getAttribute(\"datefmt\");\
var overwrite=this.form.parentNode.getAttribute(\"overwrite\")==\"true\";\
config.macros.comment.addComment(here,reverse,target,tags,fmt,datefmt,\
s.value,m.value,overwrite,marker);'>\
</center>\
</form>",
addComment: function(here,reverse,target,newtags,fmt,datefmt,subject,message,overwrite,marker) {
var UTC=new Date().convertToYYYYMMDDHHMMSSMMM();
var rand=Math.random().toString();
var who=config.options.txtUserName;
var when=new Date().formatString(datefmt);
target=target.replace(/%tiddler%/g,here);
target=target.replace(/%UTC%/g,UTC);
target=target.replace(/%random%/g,rand);
target=target.replace(/%who%/g,who);
target=target.replace(/%when%/g,when);
target=target.replace(/%subject%/g,subject);
var t=store.getTiddler(target);
var text=t?t.text:'';
var modifier=t?t.modifier:config.options.txtUserName;
var modified=t?t.modified:new Date();
var tags=t?t.tags:[];
for(var i=0; i<newtags.length; i++) tags.pushUnique(newtags[i]);
var fields=merge(t?t.fields:{},config.defaultCustomFields,true)
var out=fmt;
out=out.replace(/%tiddler%/g,here);
out=out.replace(/%UTC%/g,UTC);
out=out.replace(/%when%/g,when);
out=out.replace(/%who%/g,who);
out=out.replace(/%subject%/g,subject);
out=out.replace(/%message%/g,message);
var pos=text.indexOf(marker);
if (pos==-1) pos=text.length; // no marker - insert at end
else if (reverse) pos+=marker.length; // reverse order by inserting AFTER marker
var newtxt=overwrite?out:(text.substr(0,pos)+out+text.substr(pos));
store.saveTiddler(target,target,newtxt,modifier,modified,tags,fields);
autoSaveChanges();
if (story.getTiddler(target))
story.refreshTiddler(target,DEFAULT_VIEW_TEMPLATE,true);
if (here!=target && story.getTiddler(here))
story.refreshTiddler(here,DEFAULT_VIEW_TEMPLATE,true);
}
};
//}}}
/***
|Name|CommentPluginInfo|
|Source|http://www.TiddlyTools.com/#CommentPlugin|
|Documentation|http://www.TiddlyTools.com/#CommentPluginInfo|
|Version|2.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|Documentation|
|Description|Documentation for CommentPlugin|
!!!!!Usage
<<<
syntax:
{{{
<<comment TiddlerName overwrite reverse marker:... tags format dateformat>>
}}}
where:
*''~TiddlerName'' //(optional)//<br>specifies the 'target' tiddler into which comments will be written. If you use the keyword, //{{{"here"}}}// (or omit all parameters), the current tiddler is used by default. The ~TiddlerName can also include special //substitution markers// to construct a unique target title by dynamically inserting values, where:
**%tiddler%=containing tiddler title,
**%UTC%=UTC timestamp (YYYYMMMDD.HHMMSSMMM),
**%random%=random decimal number (.123456789),
**%who%=current TiddlyWiki username,
**%subject%=comment subject text.
*''overwrite'' //(optional)//<br>Normally, comments are //added// to a target tiddler if it already exists. However, if you use the ''overwrite'' keyword, the new comment text //''completely replaces the previous contents of an existing tiddler''//.
*''reverse'' //(optional)//<br>By default, new comments are added to the target tiddler //following// any existing comments. When ''reverse'' is used, new comments are inserted //before// existing comments, resulting in a reverse-chronological display (i.e, newest comments shown first).
*''marker:...'' //(optional)//<br>specifies an alternative //substitution marker// within the target tiddler (see below).
*''tags'' //(optional)//<br>adds specified space-separated tags to the target tiddler whenever a comment is written. Note that the list of tags should be enclosed in "..." so that it is processed as a single parameter.
*''format'' //(optional)//<br>specifies a custom output format that overrides the default format defined in {{{config.macros.comment.fmt}}} (see Configuration, below), using the following //substitution markers//:
**%tiddler%=containing tiddler title,
**%UTC%=UTC timestamp (YYYYMMMDD.HHMMSSMMM),
**%when%=formatted date/time,
**%who%=username,
**%subject%=subject,
**%message%=comment body text.
*''dateformat'' //(optional)//<br>specifies a custom date/timestamp output to be inserted in place of {{{%when%}} in the comment output format above. Overrides the default format defined in {{{config.macros.comment.datefmt}}} (see Configuration, below).
To indicate the location within the target tiddler where new comments are to be inserted, embed {{{/%comment%/}}} as a //substitution marker// //within that target tiddler's source//. Each new comment is inserted immediately preceding the marker, resulting in a time-ordered sequence of comments. If no marker is present, new comments are appended to the end of the tiddler. To insert comments from different forms into separate locations in the //same target tiddler//, you can use the ''marker:...'' parameter to specify alternative marker text (e.g., use "marker:note" or "marker:memo" to specify {{{/%note%/}}} or {{{/%memo%/}}} instead of {{{/%comment%/}}})
<<<
!!!!!Configuration
<<<
To configure the behavior and formats used by [[CommentPlugin]], //''place one or more of the following javascript statements in a tiddler tagged with<<tag systemConfig>>''//: //(note: the default values for each setting are shown)//
{{{
config.macros.comment.reverse=false;
}}}
>when set to {{{true}}}, all new comments are inserted //following// the comment marker instead of preceding it, resulting in a reverse chronological display order. If no comment marker is present in the target tiddler source, the 'reverse' option is ignored and new comments are always appended to the end of the tiddler.
{{{
config.macros.comment.fmt="__''%subject%''__\n^^posted by %who% on %when%^^\n<<<\n%message%\n<<<\n";
}}}
>defines the comment output format to be inserted into the tiddler, where: %when%=date/time, %who%=username, %subject%=subject, and %message% is the body of the comment. //Note: if you omit %subject% from the output format, the subject input field on the comment form will be automatically suppressed. Similarly, omitting %message% from the output format suppresses the message input field. This can be useful when using the {{{<<comment>>}}} macro to create simple activity logs that only require a short, one-line subject rather than entering extended message content.//
{{{
config.macros.comment.datefmt="DDD, MMM DDth, YYYY at hh12:0mm:0ss am";
}}}
>defines the date/timestamp output used within the comment format above.
{{{
config.macros.comment.tags="";
}}}
>defines an optional space-separated, list of tags to be added to the target tiddler whenever a comment is written. This is most useful when the target tiddler is different from the tiddler containing the {{{<<comment>>}}} macro, to make it easy to locate that tiddler later on.
Note: as of revision 2.0.0, direct dependency on [[NestedSlidersPlugin]], [[MoveablePanelPlugin]], [[InlineJavascriptPlugin]] and [[ToggleSliders]] has been eliminated. As a result, the comment form and generated comment output are no longer automatically contained within sliders and the "view all/close all" command is not automatically included. To recreate the previous output format and comment interface, use the following syntax in the tiddler in which you want to place your comments:
{{{
+++^40em^[add a note]...
<<moveablePanel>>add a note
----
<<comment here "" "+++!!!!![%when% (%who%): %subject%]>...\n%message%\n===\n">>===
| <<tiddler ToggleSliders with: here "view all" "close all">>
}}}
<<<
!!!!!Revisions
<<<
2011.04.27 2.9.5 merge/clone defaultCustomFields for saving on TiddlySpace
2010.11.30 2.9.4 use story.getTiddler()
2009.04.10 2.9.3 invoke autoSaveChanges() after adding a comment
2009.03.09 2.9.2 added marker:... macro parameter
2009.03.08 2.9.1 fix handling of nosubject/nomessage when macro param specifies output format
2008.05.17 2.9.0 optional 'overwrite' param replaces existing comment when stored as separate tiddler
2008.04.21 2.8.0 replaced use of %n markers with special 'named' markers: %tiddler%, %UTC%, %random%, %who%, %when%, %subject% and %message% to avoid conflict with TW core processing of tiddler content. Also, added support for 'reverse' macro param.
2008.04.17 2.7.0 added support for constructing target by inserting UTC timestamp, random number, username and/or subject text into target tiddler title
2008.04.15 2.6.0 added support for custom format and dateformat parameters to override global default formats
2008.04.15 2.5.1 make sure tiddlers are displayed before attempting to refresh them
2008.04.15 2.5.0 refresh tiddler containing comment macro after adding new comment to target tiddler (if different)
2008.04.14 2.4.0 added optional tag list parameter for tagging the target tiddler when comments are written
2008.04.14 2.3.0 if %2 (subject) or %3 (message) are omitted from format string, suppress display and validation of corresponding form elements.
2008.04.13 2.2.0 added optional ~TiddlerName param to specify target tiddler for writing comments
2008.04.10 2.1.0 converted from inline script to plugin
2008.04.05 2.0.0 removed dependencies on NestedSlidersPlugin, MoveablePanelPlugin, ToggleSliders
2007.10.24 1.2.0 added config.options.txtCommentDateFormat
2007.07.05 1.1.0 added 'view all/close all' toolbar item plus code cleanup
2007.06.28 1.0.2 added tiddler.fields to saveTiddler() call (preserves custom fields)
2007.05.26 1.0.1 added support for optional 'reverse' keyword.
2006.04.20 1.0.0 initial release
<<<
<html>
<img src="images/Fmhandstand.jpg" align="left" style="padding-right:10px; padding-bottom:10px" /></html>The Firemaker gatherings are inclusive and fun! The [[council|Joining the Council]] strives to host each gathering with an emphasis on creating and nourishing community. Despite only having a week in the summers together, Firemaker folks tend to create friendships that last well beyond those seven days. The gatherings have a relaxed and joyful atmosphere, and we are always learning new things about what it takes to be part of a community.
Workshops and all other events at the gathering are conducted in a manner supportive of and expecting that people attending will take care of themselves and others. Everyone attending is expected to be responsible to the temporary community that forms, and because of that responsibility, the feeling of community lasts throughout the year.
See also:
[[Elders]]
[[Children]]
[[Activities and Impromptu Happenings]]
[[Talent Show]]
[[Firestalk]]
[[Site Stewardship]]
[[Women's and Men's Circles]]
[[Pit Cook]]
[[Safety Culture]]
config.macros.search.label = "";
The Firemaker Primitive Skills Society Constitution lays out the following as the purposes of the society:
(a) To learn, practice, and share primitive skills, and to bring together people who have in common an interest in these skills.
(b) To provide related programs and services as determined by the Society.
You may download a PDF of the Constitution here:
<html><a href="constitution.pdf" target="dog">Firemaker PSS Constitution</a></html> - version from March 25, 2000
PLEASE take the time to look through the information on this wiki, especially the [[FAQ|Firemaker FAQ]], prior to contacting us with your questions. We have taken the time to make a thorough accounting of the information we think you might need and want, and we appreciate your reading it with the same care.
Email your questions or comments to:
''firemakerpss@gmail.com''
If you are having an issue regarding the wiki and how to use it, you can get some [[wiki help here|??? Wiki Help]], or email our sitewrangler at the above address.
<!--{{{-->
<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>
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<!--}}}-->
Our ancestors knew not only how to live amongst the natural world, but also how to live in harmony with each other. They knew their place in community. At the Firemaker gathering we are working towards regaining this understanding.
Elders are an important part of our community. They carry the joy, grief, and memories of our past. We need our elders for the guidance and wisdom they hold. We are learning how elders can serve the community and how the community can serve and support the elders. As we walk this path, we are remembering these ways and doing our best on the journey.
Firemaker gatherings are about more than just primitive skills; they're also about friendship, fun, and [[community|Community Culture]]. The days are [[packed|Program Schedule]] with an abundance of [[workshops|Past Workshops]] to choose from. Each evening there are various activities going on: singing, drumming, story telling around the campfire, games, the Firestalk, the Talent Show. Group camping, shared meals and time to chat with instructors or to share the day's experiences with new or old friends add to the feeling of community. Despite all the learning and bustle of activity, there is a glow of relaxation that permeates Firemaker. No activities are required (except [[registration|General Registration]]), so there is plenty of room for solitude.
Firemaker is an excellent opportunity to...
** Learn to be more aware of and connected to the land and its beings
** Make useful and beautiful objects with your hands
** Know what, when, and how to gather and use what we gather
** Develop competence for survival and wilderness living
** Connect with each other and our children in a beautiful natural setting
** Make music and have fun together
** Understand the unity of physical and spiritual
** Be in generosity
** Find a new friend (or twelve!)
** Bring a sense of play back into your life
** Rediscover your own depth of reverence
To hear it from the Firemaker Folks' mouths, read some [[quotes|Quotes]] from our participants and instructors.
The Frequently Asked Questions page is still under construction. If you have questions and can't find the answer elsewhere on this site, please [[contact us|Contact Us]].
Firemaker Primitive Skills Society is a non-profit organization run entirely by [[volunteers|Volunteering]]. Our purpose is to create community-based opportunities for learning, practicing and sharing ancient skills, technology, and the philosophy of honouring and respecting all existence, acknowledging our place in the circle of life. Based out of southern Vancouver Island, Firemaker PSS has a volunteer [[council|Joining the Council]], whose members help to organize [[events|Other FM Events]], guide the organization, and keep the flame alive throughout the year.
Every summer, Firemaker PSS hosts [[Firemaker]], an annual week-long gathering for those interested in [[nature-based living|Nature-Based Living]] and primitive skills. At the gathering, knowledgeable [[instructors|Instructors]] share their various skills in a [[workshop format|Past Workshops]]. A love for low-tech or no-tech ways of living and enjoying the outdoors imbues Firemaker. If this sounds like fun, we encourage you and your family to [[join us|General Registration]] for Firemaker 2012. All skill levels are welcome, all ages are part of our [[community|Community Culture]], and Firemaker is always a space of inclusion, cooperation, and learning by doing. Check out our [[Community Culture]] page for more information.
The Firestalk is a game played each year at Firemaker.
''Essential Items'': a bonfire and some willing participants!
''Potential Items'': dark, mottled clothing; charcoal or face paint; anything else that will help you hide at night
We build a bonfire (unless there is a fire ban!), we wait until dark, and sing songs and tell stories while we wait. We choose to be a watcher or a stalker. The stalkers don their charcoal and maybe even put twigs in their hair... and the watchers sit comfortably near the fire. The stalkers disperse and take a few minutes to hide themselves, before starting to creep, stalk, roll, sneak, and otherwise try to get as close as they can to the bonfire, without being spotted by a watcher. Fun ensues!
This portion of the website is coming soon...
Thanks for your patience!
/***
|Name|FontSizePlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#FontSizePlugin|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Resize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.
You can customize the maximum and minimum allowed sizes.
(only affects tiddler content text, not any other text)
Also, you can load a TW file with a font-size specified in the url.
Eg: http://tw.lewcid.org/#font:110
!Demo:
Try using the font-size buttons in the sidebar, or in the MainMenu above.
!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Then put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.
!Usage
{{{<<fontSize>>}}} results in <<fontSize>>
{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>
!Customizing:
The buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.
To change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.
!Notes:
This plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.
!History:
*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.
*25-07-06, version 0.9
!Code
***/
//{{{
config.fontSize={};
//configuration settings
config.fontSize.settings =
{
defaultSize : 100, // all sizes in %
maxSize : 200,
minSize : 40,
stepSize : 10
};
//startup code
var fontSettings = config.fontSize.settings;
if (!config.options.txtFontSize)
{config.options.txtFontSize = fontSettings.defaultSize;
saveOptionCookie("txtFontSize");}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
setStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\n .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");
//macro
config.macros.fontSize={};
config.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
var sp = createTiddlyElement(place,"span",null,"fontResizer");
sp.ondblclick=this.onDblClick;
if (params[0])
createTiddlyText(sp,params[0]);
createTiddlyButton(sp,"+","increase font-size",this.incFont);
createTiddlyButton(sp,"=","reset font-size",this.resetFont);
createTiddlyButton(sp,"–","decrease font-size",this.decFont);
}
config.macros.fontSize.onDblClick = function (e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return false;
}
config.macros.fontSize.setFont = function ()
{
saveOptionCookie("txtFontSize");
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
}
config.macros.fontSize.incFont=function()
{
if (config.options.txtFontSize < fontSettings.maxSize)
config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;
config.macros.fontSize.setFont();
}
config.macros.fontSize.decFont=function()
{
if (config.options.txtFontSize > fontSettings.minSize)
config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;
config.macros.fontSize.setFont();
}
config.macros.fontSize.resetFont=function()
{
config.options.txtFontSize=fontSettings.defaultSize;
config.macros.fontSize.setFont();
}
config.paramifiers.font =
{
onstart: function(v)
{
config.options.txtFontSize = v;
config.macros.fontSize.setFont();
}
};
//}}}
! General Considerations
<html><img src="images/food.png" align="left" style="padding-right:10px" /></html>We offer food for participants who prefer to pay for meals rather than prepare them. In recognition of the instructors and their contribution to Firemaker, we provide food for them, prepared by us. We will also be asking for volunteers to help prepare food for the instructors and their assistants to honour them for what they bring.
You may choose to bring your own food, but most participants choose the prepared meals as the price is very reasonable, the food is delicious, and without food prep time you'll have more time for workshops. While we try to make our meals as inclusive as we can, __please understand__ that we cannot accommodate every single participant’s dietary preferences and food sensitivities for every meal. We ask that if you have serious allergies/sensitivities or strict food preferences that you please bring supplementary food with you and __let us know what your allergies are__.
Bring your own cooking equipment unless you wish to buy your meals (this must be arranged and paid for in advance - see [[pricing|Pricing]] and [[registration|General Registration]]).
Whether you choose to pay for the prepared meals or would like to bring your own food, PLEASE bring your own personal plate, bowl, mug, and cutlery. There is plenty of good drinking water available, so bring your own personal water bottles.
!Sample Menu
//Here is a sample menu from 2010, with accompanying notes. The food for the 2011 gathering was largely based on this menu. Our chef this year will try to hold to similar guidelines, but there will be differences.//
Gluten - Every meal will offer gluten free options but we cannot provide a 100% GF kitchen and some cross contamination may occur.
With all breakfasts: There will be homemade granola, plain yogurt, dairy and non-dairy milks, fresh fruit, raisins, seeds, & almonds. Bread (wheat, non-wheat, & some gluten free), almond butter, jam, honey, butter, Earth Balance, apple cider, tea & coffee.
With all lunches: There will be raw cut vegetables, sauerkraut, two soup options, bread (wheat, non-wheat, & gluten free), sandwich fixings, honey, tea, coffee, fruit.
With all Dinners: There will be green salad, homemade salad dressing, sauerkraut, honey, tea & coffee.
Note: Menu may vary slightly based on produce availability, cost, and chef inspiration/whim.
''MONDAY''
*//Dinner// (POTLUCK)
''TUESDAY''
*//Breakfast//
**sweet baked beans - gluten free & vegan
**hashbrowns - gluten free & vegan
**scrambled eggs
*//Lunch//
**lentil soup - gluten free & vegan
**borscht soup - gluten free & vegetarian
*//Dinner//
**beef chili - gluten free
**vegetarian chili - gluten free & vegan
**cornbread - wheat free, gluten free, some vegan
''WEDNESDAY''
*//Breakfast//
**brown rice raisin pudding - gluten free & vegan
**fruit salad
**scrambled eggs
*//Lunch//
**split pea soup - gluten free & vegan
**coconut curry seafood soup - gluten free
*//Dinner//
**beef stew - gluten free
**vegetable stew or curry - gluten free & vegan
**rice
**corn on the cob
''THURSDAY''
*//Breakfast//
**meat sausages - gluten free
**vegetarian sausages (st. yves)
**scrambled eggs
**oat porridge
*//Lunch//
**chicken & rice soup - gluten free
**vegetable rice soup - gluten free & vegan
*//Dinner//
**falafels - gluten free & vegan
**tahini sauce - gluten free & vegan
**hummus - gluten free & vegan
**greek salad - gluten free & vegetarian
**quinoa tabouleh - gluten free & vegan
**tortilla wraps - wheat free, gluten free
''FRIDAY''
*//Breakfast//
**baked apples with raisin and cinnamon - gluten free & vegan
**millet porridge - gluten free
**boiled eggs
*//Lunch//
**beef minestrone soup - gluten free
**yam coconut soup - gluten free & vegan
*//Dinner// [[Pit Cook]]
**wild fish
**potatoes
**yams
**sweet potatoes
**carrots
**onions
**squash
**garlic
''SATURDAY''
*//Breakfast//
**pancakes - wheat free, gluten free
**scrambled eggs
**oatmeal or fruit salad
*//Lunch//
**black bean soup - gluten free & vegan
**potato leek soup - gluten free
*//Dinner//
**shephard's pies (meat/veg/vegan options) - gluten free
**steamed green beans
**beet salad
''SUNDAY''
*//Breakfast//
**A delicious breakfast made from whatever's left!
*//Lunch//
**A delicious lunch made from whatever's left!
[[Firemaker]]
[[Program Schedule]]
[[Workshop Information]]
[[Past Workshops]]
[[Pricing]]
[[Map & Directions]]
[[Food]]
[[Community Culture]]
[[Giveaway]]
[[Things to Bring]]
[[Campsite Information]]
[[Other Information]]
[[Instructors]]
[[General Registration]]
[[Instructor Registration]]
Registration for the 2012 gathering will open sometime closer to the gathering. More information will be posted as available.
''Please Note:''
**Early bird prices are only in effect until June 1st. Registration and payment must both be received/post-marked by this date.
At each Firemaker gathering there is a Giveaway, usually on the Saturday evening. We invite all participants, including instructors, to bring things you value and let them go to someone who needs them.
The attitude of the Giveaway is thankfulness—saying we are thankful for our blessings, thankful for our relations. We are known for what we give, not what we keep, as our bodies are our only real belongings. Giving without expectation or hope of return—learning to let go—nurtures a caring and generous spirit. The acknowledgment that the Giveaway represents, of an event or a person, is far more important than the material value of the gift. We give all that we can, knowing it will come back many-fold. We also accept with gratitude and humility the things that come to us in the Giveaway.
Traditionally, the ritual Giveaway was used to celebrate spiritual, social, and other events such as a first hunt, the birth of a child, the passing of an elder to join the ancestors in Next World, or any significant event in one's life. To the Sioux, this is //wacantognaka//—“to be able to give without a pounding heart.” To the Kwakwaka'wakw of the northwest coast, this is the "potlatch" ceremony.
!How to Prepare
As you get ready for the Gathering, consider what things you have that someone else might need. These should be things you value, not just things that you might put in a garage sale. Be ready to release them and to take whatever might come to you. This is a time to experience and appreciate the giving and receiving that keep all things in balance. Everyone is encouraged to participate in the Giveaway with a sense of gratitude for being able to give and for being able to receive.
!Process
On Saturday we will bring our giveaways to the gathering spot and put them on the ground or on blankets. A few words will be spoken about the Giveaway, and then we simply allow everyone present to be guided to whatever items they will take.
!Guidelines
Here are some of the protocols that guide our Giveaway:
**Give what you wish, take what you wish. There is no keeping score.
**You may wish to give something to a specific person. If so, it is appropriate to bring it to the Giveaway and present it to them quietly during the Giveaway.
**Younger children may need guidance about what they take and how they take it. It may be necessary to remind them of the need to be respectful of what they take and of other people. We often ask that the younger children be accompanied by an adult.
**Most items will be given and taken anonymously. However, if you give away something that needs explanation or has a story, it is appropriate to go to the person who takes it and speak to them.
/***
|Name|GotoPlugin|
|Source|http://www.TiddlyTools.com/#GotoPlugin|
|Documentation|http://www.TiddlyTools.com/#GotoPluginInfo|
|Version|1.9.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|view any tiddler by entering it's title - displays list of possible matches|
''View a tiddler by typing its title and pressing //enter//.'' As you type, a list of possible matches is displayed. You can scroll-and-click (or use arrows+enter) to select/view a tiddler, or press escape to close the listbox to resume typing. When the listbox is not displayed, pressing //escape// clears the current input.
!!!Documentation
>see [[GotoPluginInfo]]
!!!Configuration
<<<
*Match titles only after {{twochar{<<option txtIncrementalSearchMin>>}}} or more characters are entered.<br>Use down-arrow to start matching with shorter input. //Note: This option value is also set/used by [[SearchOptionsPlugin]]//.
*To set the maximum height of the listbox, you can create a tiddler tagged with <<tag systemConfig>>, containing:
//{{{
config.macros.gotoTiddler.listMaxSize=10; // change this number
//}}}
<<<
!!!Revisions
<<<
2009.05.22 [1.9.2] use reverseLookup() for IncludePlugin
|please see [[GotoPluginInfo]] for additional revision details|
2006.05.05 [0.0.0] started
<<<
!!!Code
***/
//{{{
version.extensions.GotoPlugin= {major: 1, minor: 9, revision: 2, date: new Date(2009,5,22)};
// automatically tweak shadow SideBarOptions to add <<gotoTiddler>> macro above <<search>>
config.shadowTiddlers.SideBarOptions=config.shadowTiddlers.SideBarOptions.replace(/<<search>>/,"{{button{goto}}}\n<<gotoTiddler>><<search>>");
if (config.options.txtIncrementalSearchMin===undefined) config.options.txtIncrementalSearchMin=3;
config.macros.gotoTiddler= {
listMaxSize: 10,
listHeading: 'Found %0 matching title%1...',
searchItem: "Search for '%0'...",
handler:
function(place,macroName,params,wikifier,paramString,tiddler) {
var quiet =params.contains("quiet");
var showlist =params.contains("showlist");
var search =params.contains("search");
params = paramString.parseParams("anon",null,true,false,false);
var instyle =getParam(params,"inputstyle","");
var liststyle =getParam(params,"liststyle","");
var filter =getParam(params,"filter","");
var html=this.html;
var keyevent=window.event?"onkeydown":"onkeypress"; // IE event fixup for ESC handling
html=html.replace(/%keyevent%/g,keyevent);
html=html.replace(/%search%/g,search);
html=html.replace(/%quiet%/g,quiet);
html=html.replace(/%showlist%/g,showlist);
html=html.replace(/%display%/g,showlist?'block':'none');
html=html.replace(/%position%/g,showlist?'static':'absolute');
html=html.replace(/%instyle%/g,instyle);
html=html.replace(/%liststyle%/g,liststyle);
html=html.replace(/%filter%/g,filter);
if (config.browser.isIE) html=this.IEtableFixup.format([html]);
var span=createTiddlyElement(place,'span');
span.innerHTML=html; var form=span.getElementsByTagName("form")[0];
if (showlist) this.fillList(form.list,'',filter,search,0);
},
html:
'<form onsubmit="return false" style="display:inline;margin:0;padding:0">\
<input name=gotoTiddler type=text autocomplete="off" accesskey="G" style="%instyle%"\
title="Enter title text... ENTER=goto, SHIFT-ENTER=search for text, DOWN=select from list"\
onfocus="this.select(); this.setAttribute(\'accesskey\',\'G\');"\
%keyevent%="return config.macros.gotoTiddler.inputEscKeyHandler(event,this,this.form.list,%search%,%showlist%);"\
onkeyup="return config.macros.gotoTiddler.inputKeyHandler(event,this,%quiet%,%search%,%showlist%);">\
<select name=list style="display:%display%;position:%position%;%liststyle%"\
onchange="if (!this.selectedIndex) this.selectedIndex=1;"\
onblur="this.style.display=%showlist%?\'block\':\'none\';"\
%keyevent%="return config.macros.gotoTiddler.selectKeyHandler(event,this,this.form.gotoTiddler,%showlist%);"\
onclick="return config.macros.gotoTiddler.processItem(this.value,this.form.gotoTiddler,this,%showlist%);">\
</select><input name="filter" type="hidden" value="%filter%">\
</form>',
IEtableFixup:
"<table style='width:100%;display:inline;padding:0;margin:0;border:0;'>\
<tr style='padding:0;margin:0;border:0;'><td style='padding:0;margin:0;border:0;'>\
%0</td></tr></table>",
getItems:
function(list,val,filter) {
if (!list.cache || !list.cache.length || val.length<=config.options.txtIncrementalSearchMin) {
// starting new search, fetch and cache list of tiddlers/shadows/tags
list.cache=new Array();
if (filter.length) {
var fn=store.getMatchingTiddlers||store.getTaggedTiddlers;
var tiddlers=store.sortTiddlers(fn.apply(store,[filter]),'title');
} else
var tiddlers=store.reverseLookup('tags','excludeLists');
for(var t=0; t<tiddlers.length; t++) list.cache.push(tiddlers[t].title);
if (!filter.length) {
for (var t in config.shadowTiddlers) list.cache.pushUnique(t);
var tags=store.getTags();
for(var t=0; t<tags.length; t++) list.cache.pushUnique(tags[t][0]);
}
}
var found = [];
var match=val.toLowerCase();
for(var i=0; i<list.cache.length; i++)
if (list.cache[i].toLowerCase().indexOf(match)!=-1) found.push(list.cache[i]);
return found;
},
getItemSuffix:
function(t) {
if (store.tiddlerExists(t)) return ""; // tiddler
if (store.isShadowTiddler(t)) return " (shadow)"; // shadow
return " (tag)"; // tag
},
fillList:
function(list,val,filter,search,key) {
if (list.style.display=="none") return; // not visible... do nothing!
var indent='\xa0\xa0\xa0';
var found = this.getItems(list,val,filter); // find matching items...
found.sort(); // alpha by title
while (list.length > 0) list.options[0]=null; // clear list
var hdr=this.listHeading.format([found.length,found.length==1?"":"s"]);
list.options[0]=new Option(hdr,"",false,false);
for (var t=0; t<found.length; t++) list.options[list.length]=
new Option(indent+found[t]+this.getItemSuffix(found[t]),found[t],false,false);
if (search)
list.options[list.length]=new Option(this.searchItem.format([val]),"*",false,false);
list.size=(list.length<this.listMaxSize?list.length:this.listMaxSize); // resize list...
list.selectedIndex=key==38?list.length-1:key==40?1:0;
},
keyProcessed:
function(ev) { // utility function
ev.cancelBubble=true; // IE4+
try{event.keyCode=0;}catch(e){}; // IE5
if (window.event) ev.returnValue=false; // IE6
if (ev.preventDefault) ev.preventDefault(); // moz/opera/konqueror
if (ev.stopPropagation) ev.stopPropagation(); // all
return false;
},
inputEscKeyHandler:
function(event,here,list,search,showlist) {
if (event.keyCode==27) {
if (showlist) { // clear input, reset list
here.value=here.defaultValue;
this.fillList(list,'',here.form.filter.value,search,0);
}
else if (list.style.display=="none") // clear input
here.value=here.defaultValue;
else list.style.display="none"; // hide list
return this.keyProcessed(event);
}
return true; // key bubbles up
},
inputKeyHandler:
function(event,here,quiet,search,showlist) {
var key=event.keyCode;
var list=here.form.list;
var filter=here.form.filter;
// non-printing chars bubble up, except for a few:
if (key<48) switch(key) {
// backspace=8, enter=13, space=32, up=38, down=40, delete=46
case 8: case 13: case 32: case 38: case 40: case 46: break; default: return true;
}
// blank input... if down/enter... fall through (list all)... else, and hide or reset list
if (!here.value.length && !(key==40 || key==13)) {
if (showlist) this.fillList(here.form.list,'',here.form.filter.value,search,0);
else list.style.display="none";
return this.keyProcessed(event);
}
// hide list if quiet, or below input minimum (and not showlist)
list.style.display=(!showlist&&(quiet||here.value.length<config.options.txtIncrementalSearchMin))?'none':'block';
// non-blank input... enter=show/create tiddler, SHIFT-enter=search for text
if (key==13 && here.value.length) return this.processItem(event.shiftKey?'*':here.value,here,list,showlist);
// up or down key, or enter with blank input... shows and moves to list...
if (key==38 || key==40 || key==13) { list.style.display="block"; list.focus(); }
this.fillList(list,here.value,filter.value,search,key);
return true; // key bubbles up
},
selectKeyHandler:
function(event,list,editfield,showlist) {
if (event.keyCode==27) // escape... hide list, move to edit field
{ editfield.focus(); list.style.display=showlist?'block':'none'; return this.keyProcessed(event); }
if (event.keyCode==13 && list.value.length) // enter... view selected item
{ this.processItem(list.value,editfield,list,showlist); return this.keyProcessed(event); }
return true; // key bubbles up
},
processItem:
function(title,here,list,showlist) {
if (!title.length) return;
list.style.display=showlist?'block':'none';
if (title=="*") { story.search(here.value); return false; } // do full-text search
if (!showlist) here.value=title;
story.displayTiddler(null,title); // show selected tiddler
return false;
}
}
//}}}
<<top>>
<<toggleSideBar SideBar SideBar hide>><<renameButton '>' >>
<<saveChanges>><<renameButton s 'Save TiddlyWiki'>>
<<newTiddler>><<renameButton +>>
/***
|Name|HoverMenuPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#HoverMenuPlugin|
|Version|1.11|
|Requires|~TW2.x|
!Description:
Provides a hovering menu on the edge of the screen for commonly used commands, that scrolls with the page.
!Demo:
Observe the hovering menu on the right edge of the screen.
!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
To customize your HoverMenu, edit the HoverMenu shadow tiddler.
To customize whether the menu sticks to the right or left edge of the screen, and its start position, edit the HoverMenu configuration settings part of the code below. It's well documented, so don't be scared!
The menu has an id of hoverMenu, in case you want to style the buttons in it using css.
!Notes:
Since the default HoverMenu contains buttons for toggling the side bar and jumping to the top of the screen and to open tiddlers, the ToggleSideBarMacro, JumpMacro and the JumpToTopMacro are included in this tiddler, so you dont need to install them separately. Having them installed separately as well could lead to complications.
If you dont intend to use these three macros at all, feel free to remove those sections of code in this tiddler.
!To Do:
* rework code to allow multiple hovering menus in different positions, horizontal etc.
* incorporate code for keyboard shortcuts that correspond to the buttons in the hovermenu
!History:
*03-08-06, ver 1.1.2: compatibility fix with SelectThemePlugin
*03-08-06, ver 1.11: fixed error with button tooltips
*27-07-06, ver 1.1 : added JumpMacro to hoverMenu
*23-07-06
!Code
***/
/***
start HoverMenu plugin code
***/
//{{{
config.hoverMenu={};
//}}}
/***
HoverMenu configuration settings
***/
//{{{
config.hoverMenu.settings={
align: 'right', //align menu to right or left side of screen, possible values are 'right' and 'left'
x: 1, // horizontal distance of menu from side of screen, increase to your liking.
y: 158 //vertical distance of menu from top of screen at start, increase or decrease to your liking
};
//}}}
//{{{
//continue HoverMenu plugin code
config.hoverMenu.handler=function()
{
if (!document.getElementById("hoverMenu"))
{
var theMenu = createTiddlyElement(document.getElementById("contentWrapper"), "div","hoverMenu");
theMenu.setAttribute("refresh","content");
theMenu.setAttribute("tiddler","HoverMenu");
var menuContent = store.getTiddlerText("HoverMenu");
wikify(menuContent,theMenu);
}
var Xloc = this.settings.x;
Yloc =this.settings.y;
var ns = (navigator.appName.indexOf("Netscape") != -1);
function SetMenu(id)
{
var GetElements=document.getElementById?document.getElementById(id):document.all?document.all[id]:document.layers[id];
if(document.layers)GetElements.style=GetElements;
GetElements.sP=function(x,y){this.style[config.hoverMenu.settings.align]=x +"px";this.style.top=y +"px";};
GetElements.x = Xloc;
GetElements.y = findScrollY();
GetElements.y += Yloc;
return GetElements;
}
window.LoCate_XY=function()
{
var pY = findScrollY();
ftlObj.y += (pY + Yloc - ftlObj.y)/15;
ftlObj.sP(ftlObj.x, ftlObj.y);
setTimeout("LoCate_XY()", 10);
}
ftlObj = SetMenu("hoverMenu");
LoCate_XY();
};
window.old_lewcid_hovermenu_restart = restart;
restart = function()
{
window.old_lewcid_hovermenu_restart();
config.hoverMenu.handler();
};
setStylesheet(
"#hoverMenu .imgLink, #hoverMenu .imgLink:hover {border:none; padding:0px; float:right; margin-bottom:2px; margin-top:0px;}\n"+
"#hoverMenu .button, #hoverMenu .tiddlyLink {border:none; font-weight:bold; background:#66AABB; color:#FFF; padding:0 5px; float:right; margin-bottom:4px;}\n"+
"#hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover {font-weight:bold; border:none; color:#663311; background:#66AABB; 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]&¶ms[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;
};
//}}}
If you are interested in being an Instructor at the 2012 Firemaker gathering, please [[contact us|Contact Us]] to get on the Instructor email list.
Instructor Registration for the 2012 gathering will open sometime closer to the gathering. More information will be posted as available.
''Please Note:''
**If you cannot attend for the full week, or would like to instruct for only half the week so you can take more workshops, please [[contact us|Contact Us]] or let us know on your Instructor Registration form, so we can work out the details with you.
**If you would not like to register as a full or part-time instructor, but would still like to teach one workshop, that is also possible. In that case, please fill out a [[General Registration form|General Registration]] and email the relevant information about the one workshop to ''firemakerpss@gmail.com'' so we can be in touch.
!What We Offer to Instructors
**All meals at no charge, including supper on Monday and lunch on Sunday.
**Tenting or bunkhouse accommodation at no charge.
**Reimbursement for travel expenses at 20 cents/km, to a maximum of $200 including ferry fares. Mileage expenses will be paid only for instructors coming from south of Nanaimo, but ferry fares will be reimbursed wherever applicable.
**Free admission to any workshops of your choice, subject to workshop scheduling of your own offered workshops.
**An opportunity for one assistant to register for free including food and one companion to register for free not including food. PLEASE NOTE: In order to take advantage of this your assistant and/or companion MUST be pre-registered before the gathering (both on your Instructor registration form and with a separate [[participant registration form|General Registration]] of their own.
**The opportunity to sell or trade primitive goods on Thursday afternoon.
!What We Ask of Instructors
**At least five half-days of workshop time (there are eight half-day workshop slots, not including evenings). Young children’s workshops can be 1.5 hrs.
**That you supply any materials required for your workshops. Material costs can be collected at the time of the workshops. If you plan on charging a materials fee, please include that information on your registration form, so we can let interested participants know the additional cost.
**Offer at least two of your workshops intended for children and/or youth (ages 6-15). It would be great to have some workshops for younger than age 6 as well.
**Bring shelter for your workshop, if needed.
//The following are brief biographies of __some__ of the Instructors for the 2011 Firemaker gathering. Only Instructors who have chosen to submit an introduction are included below.//
''BRUCE CARRON''
<html><img src="images/bruce.png" align="left" style="padding-right:10px; padding-bottom:10px" /></html>Bruce Carron is a co-founder of Firemaker (1999) and the Oak and Orca Bioregional School (1999). He has been to every Firemaker gathering since it started. He currently runs ~WildSpirit (since 2005) in the Comox Valley, mentoring children and adults towards a deeper connection to Nature. He is a student of Tom Brown’s Tracker school, the Wilderness Awareness School and the Earth. He is a “Coyote Mentor”. He has 2 wonderful children – Delfina and Kestrel.
The vision of ~WildSpirit is to shift human consciousness to be in harmony with the wildness of the Natural world. We recognize that there is still "wildness" in every being, that there is a hunger for connectedness and thirst for understanding of one's place in the web of life. At ~WildSpirit we offer connections. We reawaken wildness.
Bruce walks the edge of wildness and domestication.
''GARLIQ''
Garliq is the founder of the [[Urban Herb School|http://www.urbanherbschool.ca]], which taught more than 140 city folk about wild food and medicine in its first year; and the Living Medicine Project, a non-profit, community healing practice bringing plant medicines to people, families and community through treatment, education and social justice work. He is a Clinical Herbalist offering 1-on-1 treatment, a Popular Educator offering a variety of hands-on workshops, and a Community Organizer offering free clinical support at many social/environmental justice events. A great source of Garliq’s passion, in his practice and in his teaching, stems from the empowerment and joy that fills his heart every time he gives his own remedies to his 5-year-old son. His passion blossoms outward from this point with deep desires for healthy community and connection to the Living World for everyone.
''~JEAN-CLAUDE CATRY and AYDEN ~CATRY-BAUER''
<html><img src="images/jeanclaude.jpg" align="left" style="padding-right:10px; padding-bottom:10px" /></html>~Jean-Claude Catry (52) has been teaching at numerous primitive skills gatherings on the west coast over the past 16 years and at Firemaker most years since it began. He has been studying and sharing these skills with youth and adults for over 30 years. Six years ago, he founded Wisdom of the Earth to help others develop a sense of wonder, appreciation, and partnership with the natural world. For the past year, his son Ayden ~Catry-Bauer (14), has joined him as an assistant. ~Jean-Claude and Ayden offer unique and exciting survival, wilderness and nature immersion programs to help children, teens, adults, and families connect with wild nature, self, and community. They combine adventures, exploration, active games, experiential activities, story telling, and ancient skills and crafts to create meaning out of our observations of humans, animals, plants, minerals, elements and their interactions.
<html><img src="images/ayden.jpg" align="right" style="padding-right:10px; padding-left:10px; padding-bottom:10px" /></html>~Jean-Claude and Ayden are inspired by the survival skills of ancient scouts of many cultures who were intimately connected to the interdependence of all beings. Both have spent extended time in the wilderness alone and in groups, relying on their skills. Ayden is graduating this year after 6 years in the WOLF wilderness program (http://www.wolfkids.org). Before moving to Canada 20 years ago, ~Jean-Claude spent 10 years as a mountain wilderness guide, on horse, ski, and foot in the French Pyrenees. He is a homeschooling parent of three and a mentor at WOLF. He also has training in Compassionate Nonviolent Communication, and brings this aspect into his work. ~Jean-Claude and Ayden live and teach through the art of mentoring and "coyote teaching," developed by naturalist and tracker Jon Young. Experiential practice and connection to the natural cycles of learning is integral to this approach, and evoke passions, hunger to discover, and true understanding.
This year, 2011, ~Jean-Claude is offering to mentor and be a guardian for teens age 13-17 who would like to attend Firemaker and whose parents are not able to come. If this interests you, please contact Wisdom of the Earth for more details at 250-653-9122 or email instinct@saltspring.com
''MILES OLSON''
<html><img src="images/miles.jpg" align="left" style="padding-right:10px; padding-bottom:10px" /></html>Miles has lived in the same watershed most all of his life. He has spent the past 10 years deeply immersed in learning old/new ways of living, much of which has been in the backwoods of Vancouver Island, off the grid, with friends. An avid forager, gardener, hunter, hide-tanner, primitive technologist and writer, Miles is dedicated to learning, sharing and moving towards a healthy, sustainable culture. You can visit http://www.re-wild.org/ to learn about workshops Miles teaches when not at a Firemaker gathering.
''PAUL WEINWURM''
Paul is an Intuitive Spiritual Guide and has been part of spiritual and drumming community in Ontario for over 10 years. Paul is knowledgeable and experienced in mystical, spiritual and philosophical studies, like Yoga, Reiki, and Devotional dancing and singing. He studied and practiced with different spiritual masters for more then 25 years. His passion is to inspire and guide others in applying spirituality in everyday life through awareness and self-discovery. His intuitive approach creates opportunity for groups to fully participate, experience and practice the presented topic.
''WES GIETZ''
<html>
<img src="images/wesgeitz.jpg" align="left" style="padding-right:10px; padding-bottom:10px" /></html>
Wes Gietz has studied and practised natural skills and beliefs for over forty years, with pauses as required by the necessities of love and life. He has been taught by Tom Brown Jr. and Native teachers the skills of survival and living, awareness, and philosophy, the ceremonies of daily life, and the ceremonies and responsibilities of the sweat lodge. He has studied Coyote Mentoring with Jon Young and Wilderness Awareness School, and is regarded as an elder by many. He honours these ways by keeping them for the generations yet to be born, and has taught them in workshops and at gatherings since 1993. Please visit [[Windwalker's website|http://www.windwalker.ca]] for more information.
!Who We Are and What We Do
The Firemaker PSS Council is made up entirely of volunteers. Our main focus in the past few years has been hosting the annual Firemaker gathering. As more people join the council, we would love to be able to support other events related to ancestral skills and living with the land.
Time commitments depend on how much time you feel you can devote to being on the council, as well as which tasks you are interested in helping with. There are usually some folks who take on core Council positions, working on multiple tasks, and making sure the gathering occurs, and they are often supported by folks taking on aide Council positions, helping to do particular tasks in support of the core Council.
Some of the jobs that the Council members take on to make sure the Firemaker gathering happens each year include:
**finding willing [[Volunteers|Volunteering]]
**looking at the [[Constitution]] and re-defining purpose
**preregistration
**registration paperwork
**notetaking during meetings
**food planning and menus
**chef finding and support
**food shopping
**local food sourcing
**website upkeep
**finances
**camp liason work
**Volunteer planning and coordination
**Instructor liason work
**workshop schedule planning
**first aid coordination
**fire & fire ban awareness work
**firemaker culture building
**fire pit coordination
**any advertising work decided on
**archive documentation
!Interested in Joining?
The council will be taking some time in the late Summer and Autumn of 2011 to create some clearer process around joining the council. If you are interested in joining the council, we will have more information for how to go about doing so by sometime in September 2011.
You need not be located in the southern Vancouver Island area in order to join the council. We have had council members be quite helpful from as far afield as California. If you have an internet connection and/or a phone, you can help us!
If you would like to join the council or have any questions about what it entails, please [[contact us|Contact Us]].
**''Cusi'' http://homepage.mac.com/ecusi/ Furniture for Natural Living; Herbal Medicine; Yoga
**''Eagle Awareness School'' http://www.eagleawareness.onwildearth.com A Vancouver-based wilderness education organization for children and adults. Offering weekend workshops for adults, summer camps for kids, as well as weekly and monthly nature mentoring throughout the year. Birding, tracking, plant ID and medicine making, survival skills and naturalist training!
**''Earthwalk Northwest'' http://www.earthwalknorthwest.com/ Earthwalk Northwest offers programs focusing on earth awareness and primitive living skills, including primitive bow making, fire by friction, wild edibles, and much more. The unique courses provide in-depth, hands-on experience, allowing participants to deepen their understanding of traditional skills while learning how to wisely use and honor the many gifts the earth has to offer.
**''Oak and Orca Bioregional School'' http://oakandorca.ca/ With programs for home learners, a small 3 room school house, summer programs, and daily Out of School Care, Oak and Orca is a place that is always full of life. Committed to providing quality programs with an environmental perspective and choices for children.
**''Primitive Ways'' http://www.primitiveways.com/
**''Ravenbeak Natureworks'' http://www.ravenbeak.com Jamie's bows and workshops (with other stuff coming - drums, buckskin, etc.)
**''relearn, rewild'' http://www.re-wild.org/ A group Mile's founded, dedicated to rediscovering and sharing endangered skills, fostering sane, sustainable ways of living, and connecting people to their landbases. ''relearn, rewild'' offers workshops to adults, youth and children, ranging from full wilderness survival to making dolls from cattail fronds.
**''Saskatoon Circle'' http://www.saskatooncircle.com/ Saskatoon Circle Primitive and Traditional Living Skills Gathering takes place in the North Cascades Wildlands of Central Washington in late September. Saskatoon Circle’s emphasis is on basic living skills, with a focus on ancient crafts, community connection, and co-existence with the land.
**''Thomas J. Elpel's Web World Portal'' http://www.hollowtop.com/ Primitive Living Skills; Sustainable Living Skills; HOPS Press, LLC; Dirt Cheap Builder; Green University, LLC; Society of Primitive Technology; Wildflowers and Weeds; Jefferson River Canoe Trail; Braintain Buckskin.
**''Urban Herb School'' http://www.urbanherbschool.ca Taught more than 140 city folk about wild food and medicine in its first year!
**''Where Are Your Keys?'' http://www.whereareyourkeys.org/ “Where Are Your Keys?” (WAYK) is an accelerated learning system designed to develop fluent speakers of all ages in a collaborative and supportive environment. Developed to save endangered languages, the WAYK framework enables native community members to quickly learn a traditional language from their elders and keep it alive for a new generation of native speakers.
**''Wilderness Awareness School'' http://www.wildernessawareness.org/
**''Wild Food Adventures'' http://www.wildfoodadventures.com/ Provides expertise in wild edible plants and foraging through workshops, expeditions, teaching events, presentations, outdoor guiding, and outfitting anywhere in North America. Technical advising, curriculum development, and custom research services are also available.
**''Wild Spirit Nature Awareness School'' http://www.members.shaw.ca/wildspirit/ Providing educational opportunities that guide children, youth and adults to love, care and respect the Earth and all her children through Nature-based Mentoring.
**''Windwalker'' http://www.windwalker.ca/
!~TiddlyWiki
//This website is a ~TiddlyWiki file. Here are some sites that were useful in helping to build this site. Check them out if you want to try creating your own ~TiddlyWiki personal notebook or website. //
**''~TiddlyWiki'' http://tiddlywiki.com/ ~TiddlyWiki is a reusable non-linear personal web notebook. It's a unique wiki that people around the world love using to keep ideas and information organised. With a nearly endless feature list thanks to an extensible plugin architecture, the possibilities for ~TiddlyWiki are boundless. Getting started, though, is simple. You can download it for free and install it on your computer, even when offline.
**''~TiddlyVault'' http://tiddlyvault.tiddlyspot.com/ ~TiddlyVault is a comprehensive collection of plugins, macros, and other extensions available to enhance your ~TiddlyWiki experience.
**''Tiddler Toddler'' http://tiddlertoddler.tiddlyspot.com/ Tiddler Toddler is a resource for absolute beginners put together by Julie Starr. It is a work in progress.
**''~TiddlyTools'' http://www.tiddlytools.com/ ~TiddlyTools presents Technologies, Techniques, Tricks, Tips, Tweaks and Tutorials for ~TiddlyWiki readers, authors and developers, using a combination of plugins, macros, scripts, templates, and stylesheets created by Eric L Shulman to customize the default features and functions provided by the ~TiddlyWiki standard distribution.
**''abegoExtensions'' http://tiddlywiki.abego-software.de/ This page serves as a platform to share ~TiddlyWiki macros, plugins and other extensions, written by Udo Borkowski from abego Software.
**''~TiddlyWiki Google Group'' http://groups.google.com/group/tiddlywiki A mailing list for users of ~TiddlyWiki.
<<slider chkSliderAbout About 'About'>>
<<slider chkSliderGathering Gathering 'Gathering'>>
<<slider chkSliderMore More 'More'>>
The 2012 Firemaker gathering will happen at Camp Gilwell, 5200 Duncan Bay Main, Courtenay, BC. This land is unceded territory of the K'ómoks First Nation.
''From Victoria:''
Get onto the Inland Highway 19. Turn Right on Exit 127 (Piercy Road). Turn Right on Forbidden Plateau Rd and then Right on Comox Logging Road. Turn Right into Camp Gilwell.
''From Courtenay:''
Get onto Condensory Road. Turn Left on Piercy Road. Turn Left on Forbidden Plateau Road and then Right on Comox Logging Road. Turn Right into Camp Gilwell.
''From Campbell River:''
Get onto the Inland Highway 19. Turn Left on Exit 127 (Piercy Road). Turn Right on Forbidden Plateau Road and then Right on Comox Logging Road. Turn Right into Camp Gilwell.
<html><img src="images/Gilwell Map.jpg" /></html>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon">
<!--}}}-->
[[Volunteering]]
[[Joining the Council]]
[[Photos]]
[[Quotes]]
[[Links]]
[[Firemaker FAQ]]
[[Calendar]]
[[Twitter Feed|TwitterTabs]]
[[Other FM Events]]
[[Contact Us]]
/***
|Name|[[MoveablePanelPlugin]]|
|Source|http://www.TiddlyTools.com/#MoveablePanelPlugin|
|Documentation|http://www.TiddlyTools.com/#MoveablePanelPluginInfo|
|Version|3.0.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|move/size any tiddler or page element|
Use the mouse to move/resize any specific tiddler content, page element, or [[floating slider panel|NestedSlidersPlugin]].
!!!!!Documentation
>see [[MoveablePanelPluginInfo]]
!!!!!Configuration
<<<
<<option chkMoveablePanelShowStatus>> show position/size while moving/resizing a panel
<<option chkMoveablePanelShowManager>> automatically add Panel Manager button to undocked panels (see [[PanelManagerPlugin]])
<<<
!!!!!Revisions
<<<
2010.12.24 3.0.4 fixed findMouseX/findMouseY for webkit browsers
|please see [[MoveablePanelPluginInfo]] for additional revision details|
2006.03.04 1.0.0 Initial public release
<<<
!!!!!Code
***/
//{{{
version.extensions.MoveablePanelPlugin= {major: 3, minor: 0, revision: 4, date: new Date(2010,12,24)};
if (config.macros.moveablePanel===undefined) config.macros.moveablePanel={};
//}}}
// // translate
//{{{
// TRANSLATORS: copy this section to MoveablePanelPluginLingoXX (where 'XX' is a language/country code)
if (config.macros.moveablePanel===undefined) config.macros.moveablePanel={};
merge(config.macros.moveablePanel,{
foldLabel: '\u2212', // minus
foldTip: 'FOLD=reduce panel size',
unfoldLabel: '+',
unfoldTip: 'UNFOLD=restore panel size',
hoverLabel: '^',
hoverTip: 'HOVER=keep panel in view when scrolling',
scrollLabel: '\u2248', // asymp
scrollTip: 'SCROLL=allow panel to move with page',
closeLabel: 'X',
closeTip: 'CLOSE=hide this panel',
dockLabel: '\u221A', // radic
dockTip: 'DOCK=reset size/position',
noPid: 'unnamed panel',
statusMsg: '%0: pos=(%1,%2)%3 size=(%4,%5) z=%6',
hoveredMsg: '[hovering]',
dockedTip: '%0: docked',
scrollMsg: '%0: pos=(%1,%2)',
msgDuration: 3000,
moveTip: '%0DRAG EDGE=move',
sizeTip: '(SHIFT=resize)',
sizeWidthTip: '(SHIFT=resize width)',
sizeHeightTip: '(SHIFT=resize height)',
clickTip: 'CLICK=bring to front, SHIFT-CLICK=send to back',
dblclickdockTip: 'DOUBLE-CLICK=dock',
dblclickunfoldTip:'DOUBLE-CLICK=unfold',
foldParam: 'fold',
hoverParam: 'hover',
nocloseParam: 'noclose',
nodockParam: 'nodock',
undockedParam: 'undocked',
jumpParam: 'jump',
dockParam: 'dock',
moveParam: 'move',
labelParam: 'label',
promptParam: 'prompt',
allParam: 'all',
nameParam: 'name',
topParam: 'top',
leftParam: 'left',
widthParam: 'width',
heightParam: 'height',
managerParam: 'manager'
});
//}}}
// // global functions (general utilities)
//{{{
// if removeCookie() function is not defined by TW core, define it here (for <TW2.5)
if (window.removeCookie===undefined) {
window.removeCookie=function(name) {
document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;';
}
}
if (window.copyObject===undefined) {
window.copyObject=function(src) {
for (var i in src) this[i]=typeof src[i]!='object'?src[i]:new copyObject(src[i]);
}
}
if (window.compareObjects===undefined) {
window.compareObjects=function(a,b) {
if (a===b) return true;
if (a==undefined||b==undefined) return false;
for (var i in a) if (typeof a[i]!='object'?a[i]!==b[i]:!compareObjects(a[i],b[i])) return false;
return true;
}
}
if (window.isEmptyObject===undefined) {
window.isEmptyObject=function(src) { for (var i in src) return false; return true; }
}
// cross-browser metrics
window.findMouseX=function(ev) { if (!ev) return 0; var x=0;
if (config.browser.isIE) return ev.clientX+findScrollX();// IE
if (config.browser.isSafari) return ev.pageX+findScrollX(); // Webkit
else return ev.pageX; // Firefox/other
}
window.findMouseY=function(ev){ if (!ev) return 0; var y=0;
if (config.browser.isIE) return ev.clientY+findScrollY();// IE
if (config.browser.isSafari) return ev.pageY+findScrollY(); // Webkit
else return ev.pageY; // Firefox/other
}
//}}}
// // macro
//{{{
merge(config.macros.moveablePanel,{
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
// ALTERNATIVE OUTPUT: Panel Manager macro extensions...
if (this.manager && this.manager.handler(place,macroName,params,wikifier,paramString,tiddler))
return; // processed by PanelManager
// UNPACK KEYWORD PARAMS
var showfold =params.contains(this.foldParam);
var showhover =params.contains(this.hoverParam);
var showclose =!params.contains(this.nocloseParam);
var showdock =!params.contains(this.nodockParam);
var showmanager =params.contains(this.managerParam);
var startundocked=params.contains(this.undockedParam);
var jump =params.contains(this.jumpParam);
var dock =params.contains(this.dockParam);
var move =params.contains(this.moveParam);
var all =params.contains(this.allParam);
// UNPACK VALUE PARAMS
params=paramString.parseParams('anon',null,true,false,false);
var label =getParam(params,this.labelParam,null);
var prompt=getParam(params,this.promptParam,null);
var name =getParam(params,this.nameParam,null);
var top =getParam(params,this.topParam,null);
var left =getParam(params,this.leftParam,null);
var width =getParam(params,this.widthParam,null);
var height=getParam(params,this.heightParam,null);
// COMMANDS: JUMP, MOVE, DOCK
if (jump||move||dock) {
if (!label||!label.length) {
var p=this.findPanel(name);
if (jump) { if (p) this.scrollToPanel(p,true); else window.scrollTo(left,top); }
if (move) { this.movePanel(p,left,top,true,true); }
if (dock) { if (all) this.forAllPanels(this.dockPanel); else if (p) this.dockPanel(p); }
return;
}
var tip=(jump?this.jumpParam:move?this.moveParam:dock?this.dockParam:'')+': '+name;
var b=createTiddlyButton(place,label,prompt||tip, function(ev) {
var cmm=config.macros.moveablePanel; var p=cmm.findPanel(this.name);
if (this.jump) { if (p) cmm.scrollToPanel(p,true); else window.scrollTo(this.left,this.top); }
if (this.move) { if (p) cmm.movePanel(p,this.left,this.top,true,true); }
if (this.dock) { if (p) cmm.dockPanel(p); else if (this.all) cmm.forAllPanels(cmm.dockPanel); }
return cmm.processed(ev)
},'button');
b.jump=jump; b.move=move; b.dock=dock;
b.name=name; b.all=all; b.left=left; b.top=top;
return;
}
// PANEL SETUP
var p=this.getPanel(place);
this.cachePanel(p);
addClass(p,'moveablePanel');
p.pid=name;
p.showmanager=showmanager;
p.fixedheight=height||undefined;
p.fixedwidth=width||undefined;
this.addPanelButtons(p,showfold,showhover,showclose,showdock,showmanager);
this.addMouseHandlers(p);
if (startundocked) {
this.undockPanel(p);
if (!startingUp) { this.bringPanelToFront(p); this.scrollToPanel(p); }
}
if (this.manager) { this.manager.applyMap(p); this.manager.trackMap(p); }
this.notify(p);
},
//}}}
// // notifications
//{{{
quiet: 0, // flag to suspend/resume notifications
notify: function(p) { // notify others of panel changes
if (this.quiet) return;
if (this.manager) this.manager.notify(p); // pass notices to manager (updates viewers)
},
//}}}
// // general panel utilities
//{{{
getPanel: function(place) { // find containing panel or floating slider (use current element as fallback)
var p=place;
while (p && !(hasClass(p,'moveablePanel')||hasClass(p,'floatingPanel'))) p=p.parentNode;
return p||place;
},
getAllPanels: function(zSort) { // find 'moveablePanel' elements (optionally sort by zIndex)
var panels=[];
var sortByZindex=function(a,b){
var v1=parseInt(a.style.zIndex); if (isNaN(v1)) v1=0;
var v2=parseInt(b.style.zIndex); if (isNaN(v2)) v2=0;
return(v1==v2)?0:(v1>v2?1:-1);
}
// if native browser fn is defined, use it (*much* more efficient!)
if (document.getElementsByClassName) {
var elems=document.getElementsByClassName('moveablePanel');
for (var i=0; i<elems.length; i++) panels.push(elems[i]);
return zSort?panels.sort(sortByZindex):panels;
}
// otherwise, find all DIVs and SPANs with the right class
// NOTE: IE requires use of Enumerator() to iterate over elements, or it FREEZES UP COMPLETELY!!
var isIE=config.browser.isIE;
var elems=document.getElementsByTagName('DIV');
for (var i=isIE?new Enumerator(elems):0; isIE?!i.atEnd():(i<elems.length); isIE?i.moveNext():i++) {
var panel=isIE?i.item():elems[i];
if (hasClass(panel,'moveablePanel')) panels.push(panel);
}
var elems=document.getElementsByTagName('SPAN');
for (var i=isIE?new Enumerator(elems):0; isIE?!i.atEnd():(i<elems.length); isIE?i.moveNext():i++) {
var panel=isIE?i.item():elems[i];
if (hasClass(panel,'moveablePanel')) panels.push(panel);
}
return zSort?panels.sort(sortByZindex):panels;
},
findPanel: function(pid) { // find a named panel
var p=this.getAllPanels();
for (var i=0; i<p.length; i++) { if (pid && p[i].pid==pid) return p[i]; }
return undefined;
},
forAllPanels: function(callback) { // invoke a function on each panel
var panels=this.getAllPanels();
this.quiet++;
for (var i=0; i<panels.length; i++) callback.apply(this,[panels[i]]);
this.quiet--;
this.notify('all');
},
cachePanel: function(p) { // save original styles and handlers
if (!p.saved) p.saved={
x:p.style.left||'', y:p.style.top||'', w:p.style.width||'', h:p.style.height||'',
z:p.style.zIndex||'', pos:p.style.position||'', title: p.title,
mouseover:p.onmouseover, mouseout:p.onmouseout,
mousedown:p.onmousedown, mousemove:p.onmousemove, dblclick:p.ondblclick
};
},
restorePanel: function(p) { // restore original styles
if (!p.saved) return;
p.style.left=p.saved.x; p.style.top=p.saved.y; p.style.width=p.saved.w; p.style.height=p.saved.h;
p.style.zIndex=p.saved.z; p.style.position=p.saved.pos; p.title=p.saved.title;
removeClass(p,'folded'); removeClass(p,'hover'); removeClass(p,'undocked');
},
//}}}
// // panel metrics
//{{{
getPanelOffset: function(p) { // adjustment for child elements inside relative/floatingPanel containers
var r=new Object(); r.x=0; r.y=0; if (!p) return r;
var pp=p.parentNode; while (pp && !(pp.style&&pp.style.position=='relative')) pp=pp.parentNode;
if (pp) { r.x+=findPosX(pp); r.y+=findPosY(pp); }
var pp=p.parentNode; while (pp && !hasClass(pp,'floatingPanel')) pp=pp.parentNode;
if (pp) { r.x+=findPosX(pp); r.y+=findPosY(pp); }
return r;
},
// PROBLEM: the offsetWidth/offsetHeight do not seem to account for padding or borders
// WORKAROUND: subtract padding and border (in px) from width and height
// ISSUE: I still don't understand why this is needed...
// TBD: get padding/border values from p.style and convert to px
// NOTE: 10.6667 seems to be about 1em...
getPanelEdgeWidth:
function(p) { return 10.6667; },
getPanelEdgeHeight:
function(p) { return 10.6667; },
getPanelHeight:
function(p) { var pad=10.6667; var border=1; return p.offsetHeight-(pad*2+border*2); },
getPanelWidth:
function(p) { var pad=10.6667; var border=1; return p.offsetWidth -(pad*2+border*2); },
//}}}
// // panel stacking (zIndex)
//{{{
isStackable: function(p) { // zIndex is only effective with absolute or fixed elements
return (['absolute','fixed'].contains(p.style.position)&&!hasClass(p,'popup'));
},
normalizeStack: function(panels) { // set zIndex to correspond to stack order
for (var i=0; i<panels.length; i++) {var z=panels[i].style.zIndex;
if (z==0||z=='auto') continue; // if not stacking (e.g., 'auto', '', or null)
if (z<10000 || z>10000) continue; // use large values for "always in front/back"
if (z!=i+2) panels[i].style.zIndex=i+2;
if (this.manager) this.manager.trackMap(panels[i]);
}
return panels;
},
bringPanelToFront: function(p) { if (!p) return;
if (!this.isStackable(p)) return; // can't be stacked
var panels=this.getAllPanels(true);
// WFFL - normalizing every time works, but takes too long
// if (p.style.zIndex>panels.length+2) return; // stay in front
// this.normalizeStack(panels);
// p.style.zIndex=panels.length+2;
// WFFL - for now, just bump up the max (ignore z>10000) and normalize much less often
if (p.style.zIndex>1000) this.normalizeStack(panels);
var zMax=0; if (panels.length) {
var i=panels.length-1; zMax=parseInt(panels[i].style.zIndex);
while (zMax>10000 && i>0) zMax=parseInt(panels[--i].style.zIndex);
if (p==panels[i]) return; // already in front
if (isNaN(zMax)) zMax=0;
}
p.style.zIndex=zMax+1;
this.notify(p);
},
sendPanelToBack: function(p) { if (!p) return;
if (!this.isStackable(p)) return; // can't be stacked
var panels=this.getAllPanels(true);
// WFFL - normalizing every time works, but takes too long
// if (p.style.zIndex<2) return; // stay in back
// this.normalizeStack(panels);
// p.style.zIndex=1;
// WFFL - for now, just bump down the min (ignore z<10000) and normalize much less often
if (p.style.zIndex<1000) this.normalizeStack(panels);
var zMin=0; if (panels.length) {
var i=0; zMin=parseInt(panels[i].style.zIndex);
while (zMin<10000 && i<panels.length-1) zMin=parseInt(panels[++i].style.zIndex);
if (p==panels[i]) return; // already in back
if (isNaN(zMin)) zMin=0;
}
p.style.zIndex=zMin-1;
this.notify(p);
},
returnPanelToStack: function(p) { if (!p) return;
p.style.zIndex=p.saved?p.saved.zIndex:'';
this.notify(p);
},
//}}}
// // panel scrolling
//{{{
noScrollX: 0, // flags to disable TW built-in scrolling behavior
noScrollY: 0, // set by hijacks, cleared by ensurePanelVisible(), below
// scroll view to show panel along nearest edge of window or centered (optional)
scrollToPanel: function(p,center) { if (!p) return;
if (hasClass(p,'popup')) return; // popup=let core scrolling handle it
if (hasClass(p,'hover')) return; // hover=always in view=don't scroll
var scrollSize=findWindowWidth()-document.body.offsetWidth; // width of scrollbar
var sx=findScrollX(); var ww=findWindowWidth()-scrollSize;
var sy=findScrollY(); var wh=findWindowHeight()-scrollSize;
var px=findPosX(p); var pw=p.offsetWidth;
var py=findPosY(p); var ph=p.offsetHeight;
var nx=sx; var ny=sy; // assume no scrolling is needed
// if BR is not in view, scroll to show BR
if (px+pw>sx+ww) nx=px+pw-ww;
if (py+ph>sy+wh) ny=py+ph-wh;
// if TL not in view or too big... scroll to show TL
if (px<nx || px>nx+ww || px+pw>nx+ww) nx=px;
if (py<ny || py>ny+wh || py+ph>ny+wh) ny=py;
// optionally, center in view (if panel fits)
if (center && pw<ww) nx-=(ww-pw)/2;
if (center && ph<wh) ny-=(wh-ph)/2;
if (nx!=sx||ny!=sy) { // if we need to scroll...
window.scrollTo(nx,ny);
if (config.options.chkMoveablePanelShowStatus && !startingUp) {
var id=hasClass(p,'tiddler')?p.getAttribute('tiddler'):p.pid;
this.timedMessage(this.scrollMsg.format([id||this.noPid,px,py]),this.msgDuration);
}
this.notify(p);
}
},
// bring to front and scroll into view (with optional ASYNC)
ensurePanelVisible: function(p,delay) { if (!p) return;
if (delay && !startingUp) { // wait for core animation to complete...
if (hasClass(p,'tiddler'))
p=config.macros.moveablePanel.findPanel(p.getAttribute('tiddler'))||p;
if (!p.id) p.id=new Date().getTime()+Math.random(); // unique ID
var code='config.macros.moveablePanel.ensurePanelVisible(document.getElementById("%0"));';
setTimeout(code.format([p.id]),delay);
return;
}
// unblock scrolling and bring the panel into view
if (this.noScrollX>0) this.noScrollX--; if (this.noScrollY>0) this.noScrollY--;
if (hasClass(p,'popup')) return; // leave popups alone!
this.bringPanelToFront(p);
if (this.noScrollX+this.noScrollY==0 && !startingUp) // no scroll during document startup
this.scrollToPanel(p);
},
//}}}
// // panel status
//{{{
formatPanelStatus: function(p) {
var s=p.style; var msg=this.statusMsg.format([p.pid||this.noPid,
s.left,s.top,hasClass(p,'hover')?this.hoveredMsg:'',s.width,s.height,s.zIndex]);
return msg.replace(/(\.[0-9]+)|px/g,''); // remove decimals and 'px'
},
showPanelStatus: function(p,show) { // display panel info in titlebar while moving/sizing
if (!config.options.chkMoveablePanelShowStatus) return;
if (show) document.title=this.formatPanelStatus(p)
else refreshPageTitle();
},
timedMessage: function(msg,duration) {
document.title=msg; setTimeout('refreshPageTitle()',duration);
},
getPanelTooltip: function(p) {
return hasClass(p,'undocked')?this.formatPanelStatus(p):this.dockedTip.format([p.pid||this.noPid]);
},
//}}}
// // panel actions
//{{{
undockPanel: function(p,front) { // undocked with default pos/size
if (hasClass(p,'undocked')) return; // already undocked
// get size BEFORE undocking
p.style.width=p.fixedwidth ||(this.getPanelWidth(p)+'px');
p.style.height=p.fixedheight||(this.getPanelHeight(p)+'px');
addClass(p,'undocked'); if (!this.isStackable(p)) p.style.position='absolute'; // UNDOCK it
// set position AFTER undocking
var offset=this.getPanelOffset(p);
p.style.left=findPosX(p)-offset.x+'px'; p.style.top=findPosY(p)-offset.y+'px';
if (front) this.bringPanelToFront(p);
this.notify(p);
},
dockPanel: function(p) { // reset to docked pos/size
if (!hasClass(p,'undocked')) return; // already docked
this.restorePanel(p); // reset panel
// FOR FLOATING SLIDERS: trigger slider adjustment handler (if any)
if (hasClass(p,'floatingPanel') && window.adjustSliderPos)
window.adjustSliderPos(p.parentNode,p.button,p);
this.quiet++; if (this.manager) this.manager.trackMap(p); this.quiet--;
this.notify(p)
},
closePanel: function(p) { // dock panel, then close (for tiddlers and floating sliders)
var t=story.findContainingTiddler(p);
var isTiddler=t&&this.findPanel(t.getAttribute('tiddler'));
var isFloating=hasClass(p,'floatingPanel');
if (!isTiddler) // when closing TIDDLERS, leave them undocked (keeps size/pos)
this.dockPanel(p);
// FOR FLOATING SLIDERS: set focus and do a fake click on slider button
if (isFloating) { p.button.focus(); onClickNestedSlider({target:p.button}); }
// FOR TIDDLERS: call story.closeTiddler()
if (isTiddler) { story.closeTiddler(t.getAttribute('tiddler')); }
},
movePanel: function(p,x,y,show,centered) { if (!p) return;
this.quiet++;
this.undockPanel(p);
// adjust for child elements inside relative/floatingPanel containers
var offset=this.getPanelOffset(p);
p.style.left=x-offset.x+'px'; p.style.top=y-offset.y+'px';
if (show) { this.bringPanelToFront(p); this.scrollToPanel(p,centered); }
this.quiet--;
this.showPanelStatus(p,true);
if (this.manager) this.manager.trackMap(p);
},
foldPanel: function(p) { // toggle panel height
if (hasClass(p,'folded')) removeClass(p,'folded'); else addClass(p,'folded');
if (this.manager) this.manager.trackMap(p);
this.notify(p);
},
hoverPanel: function(p) { // toggle fixed position
if (hasClass(p,'hover')) {
removeClass(p,'hover');
var offset=this.getPanelOffset(p);
p.style.left=p.offsetLeft+findScrollX()-offset.x+'px';
p.style.top=p.offsetTop+findScrollY()-offset.y+'px';
} else {
var offset=this.getPanelOffset(p);
var ww=findWindowWidth(); var wh=findWindowHeight();
p.style.left=(p.offsetLeft-findScrollX()+offset.x)%ww+'px';
p.style.top =(p.offsetTop -findScrollY()+offset.y)%wh+'px';
addClass(p,'hover');
}
if (this.manager) this.manager.trackMap(p);
this.notify(p);
},
resetPanel: function(p) { // reset to session starting pos/size
if (this.manager) this.manager.resetPanel(p); else this.dockPanel(p);
},
//}}}
// // menu buttons
//{{{
processed: function(ev) { var ev=ev||window.event; // use to end event handling for menus and mouse actions
if (ev) { ev.cancelBubble=true; if (ev.stopPropagation) ev.stopPropagation(); } return false;
},
addPanelButtons: function(p,showfold,showhover,showclose,showdock,showmanager) {
if (p.menu) return; // only once per panel
function cmd(menu,label,tip,callback,show,arg) {
var fn=function(ev){return this.callback.apply(config.macros.moveablePanel,[this,ev,this.arg]);}
var b=createTiddlyButton(menu,label,tip,fn,'moveablePanelButton');
b.style.display=show?'inline':'none'; b.callback=callback; b.arg=arg;
return b;
}
var m=createTiddlyElement(p,'div',null,'moveablePanelMenu');
p.showfold=showfold;
p.foldbutton= cmd(m,this.foldLabel,this.foldTip,this.foldHandler,showfold);
p.unfoldbutton= cmd(m,this.unfoldLabel,this.unfoldTip,this.foldHandler,false);
p.showhover=showhover;
p.hoverbutton=cmd(m,this.hoverLabel,this.hoverTip,this.hoverHandler,showhover);
p.scrollbutton=cmd(m,this.scrollLabel,this.scrollTip,this.hoverHandler,false);
p.showdock=showdock;
p.dockbutton= cmd(m,this.dockLabel,this.dockTip,this.dockHandler,showdock);
p.showclose=showclose;
p.closebutton=cmd(m,this.closeLabel,this.closeTip,this.closeHandler,showclose);
p.showmanager=showmanager;
if (this.manager) p.managerbutton=cmd(m,this.manager.buttonLabel,this.manager.buttonTip,
this.manager.popup,showmanager,p.pid);
p.menu=m;
},
togglePanelButtons: function(p,show) { if (!p||!p.menu) return;
var undocked=hasClass(p,'undocked');
var floating=hasClass(p,'floatingPanel');
var hover=hasClass(p,'hover');
var folded=hasClass(p,'folded');
var t=story.findContainingTiddler(p);
var tiddler=t&&this.findPanel(t.getAttribute('tiddler'));
var show=show&&(undocked||floating);
p.menu.style.display=show?'inline':'none';
if (p.showfold) p.foldbutton.style.display =!folded?'inline':'none';
if (p.showfold) p.unfoldbutton.style.display= folded?'inline':'none';
if (p.showhover) p.hoverbutton.style.display =!hover?'inline':'none';
if (p.showhover) p.scrollbutton.style.display= hover?'inline':'none';
if (p.showdock) p.dockbutton.style.display =undocked?'inline':'none';
if (p.showclose) p.closebutton.style.display=floating||(tiddler&&undocked)?'inline':'none';
if (p.managerbutton) { // see [[PanelManagerPlugin]]
var show=p.showmanager||config.options.chkMoveablePanelShowManager;
p.managerbutton.style.display=show?'inline':'none';
}
},
foldHandler: function(place,ev){ var p=this.getPanel(place);
this.foldPanel(p); this.togglePanelButtons(p,true); return this.processed(ev); },
hoverHandler: function(place,ev){ var p=this.getPanel(place);
this.hoverPanel(p); this.togglePanelButtons(p,true); return this.processed(ev); },
dockHandler: function(place,ev){ var p=this.getPanel(place);
this.dockPanel(p); this.togglePanelButtons(p,true); return this.processed(ev); },
closeHandler: function(place,ev){ var p=this.getPanel(place);
this.closePanel(p); this.togglePanelButtons(p,true); return this.processed(ev); },
//}}}
// // mouse handlers
//{{{
addMouseHandlers: function(p) {
if (p.handlers) return true; // only add handlers ONCE
p.onmouseover=function(ev) { var ev=ev||window.event;
var r=config.macros.moveablePanel.mouseover(this,ev);
return r&&this.saved.mouseover?this.saved.mouseover.apply(this,arguments):true;
};
p.onmouseout=function(ev) { var ev=ev||window.event;
var r=config.macros.moveablePanel.mouseout(this,ev);
return r&&this.saved.mouseout?this.saved.mouseout.apply(this,arguments):true;
};
p.onmousemove=function(ev) { var ev=ev||window.event;
var r=config.macros.moveablePanel.mousemove(this,ev);
return r&&this.saved.mousemove?this.saved.mousemove.apply(this,arguments):true;
};
p.ondblclick=function(ev) { var ev=ev||window.event;
var r=config.macros.moveablePanel.dblclick(this,ev);
return r&&this.saved.dblclick?this.saved.dblclick.apply(this,arguments):r;
};
p.onmousedown=function(ev) { var ev=ev||window.event;
var r=config.macros.moveablePanel.mousedown(this,ev);
return r&&this.saved.mousedown?this.saved.mousedown.apply(this,arguments):r;
};
p.handlers=true;
},
isEdge: function(p,ev) { // near 'edge' of panel (or child element)?
var ev=ev||window.event; var target=resolveTarget(ev);
if (!p) return false;
// ignore form input fields
if (['input','select','option','textarea'].contains(target.nodeName.toLowerCase())) return false;
var left=findPosX(p); var top=findPosY(p);
var width=p.offsetWidth; var height=p.offsetHeight;
var x=findMouseX(ev); var y=findMouseY(ev);
if (hasClass(p,'hover')) { x-=findScrollX(); y-=findScrollY(); } // window-relative panel
if (x<left||y<top||x>=left+width||y>=top+height) { // outside of panel
if (p==target || p!=this.getPanel(target)) return false;
return this.isEdge(target,ev); // check target child element
}
var edgeW=this.getPanelEdgeWidth(p); var edgeH=this.getPanelEdgeHeight(p);
var isT=(y-top<edgeH); var isL=(x-left<edgeW);
var isB=(top+height-y<edgeH); var isR=(left+width-x<edgeW);
return isT||isL||isB||isR;
},
// temporary element during move/size keeps document from shrinking
addGhost: function(p) {
var g=document.getElementById('moveablePanelGhost');
if (!g) g=createTiddlyElement(document.body,'div','moveablePanelGhost','moveablePanelGhost');
var border=1; // note: must match CSS for 'moveablePanelGhost' WFFL-HACK
g.style.left=findPosX(p)+'px';
g.style.top=findPosY(p)+'px';
g.style.width=((p.offsetWidth-border*2)||0)+'px';
g.style.height=((p.offsetHeight-border*2)||0)+'px';
},
clearGhost: function() {
var e=document.getElementById('moveablePanelGhost');
if (e) e.parentNode.removeChild(e);
},
// MOUSEOVER=SHOW MENU
mouseover: function(place,ev) { var ev=ev||window.event;
var p=this.getPanel(place);
addClass(p,'selected'); // shows toolbar-classed items
this.togglePanelButtons(p,true);
return true;
},
// MOUSEOUT=HIDE MENU
mouseout: function(place,ev) { var ev=ev||window.event;
var p=this.getPanel(place);
removeClass(p,'selected'); // hides toolbar-classed items
this.togglePanelButtons(p,false);
return true;
},
// MOUSEMOVE=SHOW MENU AND SET CURSOR/TIP
mousemove: function(place,ev) { var ev=ev||window.event;
var p=this.getPanel(place);
p.style.cursor='auto'; p.title=p.saved?p.saved.title:'';
if (!this.isEdge(p,ev)) return true;
var fw=p.fixedwidth; if (fw==null) fw=undefined;
var fh=p.fixedheight; if (fh==null) fh=undefined;
p.title=this.moveTip.format([p.pid?p.pid+': ':'']);
if (fw===undefined&&fh===undefined) p.title+=' '+this.sizeTip;
else if (fw===undefined) p.title+=' '+this.sizeWidthTip;
else if (fh===undefined) p.title+=' '+this.sizeHeightTip;
if (hasClass(p,'undocked')) {
p.title+=', '+this.clickTip+', ';
p.title+=hasClass(p,'folded')?this.dblclickunfoldTip:this.dblclickdockTip;
}
p.style.cursor='move';
if (ev.shiftKey&&!(fw&&fh)) { // set resizing cursor (if not fixed width/height)
var left=findPosX(p); var top=findPosY(p);
var width=p.offsetWidth; var height=p.offsetHeight;
var x=findMouseX(ev); var y=findMouseY(ev);
if (hasClass(p,'hover')) { x-=findScrollX(); y-=findScrollY(); } // window-relative panel
var edgeW=this.getPanelEdgeWidth(p); var edgeH=this.getPanelEdgeHeight(p);
var isT=(y-top<edgeH); var isL=(x-left<edgeW);
var isB=(top+height-y<edgeH); var isR=(left+width-x<edgeW);
p.style.cursor=(fh===undefined?(isT?'n':(isB?'s':'')):'')
+(fw===undefined?(isL?'w':(isR?'e':'')):'')+'-resize';
}
return true;
},
// DOUBLE-CLICK=DOCK OR UNFOLD
dblclick: function(place,ev) { var ev=ev||window.event;
var p=this.getPanel(place);
if (!this.isEdge(p,ev)) return true;
// if folded... unfold, otherwise... undock
if (hasClass(p,'folded')) this.foldPanel(p); else this.dockPanel(p);
this.togglePanelButtons(p,false);
return this.processed(ev);
},
// MOUSEDOWN=START MOVE/SIZE, CLICK=BRING TO FRONT, SHIFT-CLICK=SEND TO BACK
mousedown: function(place,ev) { var ev=ev||window.event;
var p=this.getPanel(place);
// CLICK ALWAYS BRINGS TO FRONT
this.quiet++;
this.bringPanelToFront(p);
if (this.manager) this.manager.trackMap(p);
this.quiet--;
if (!this.isEdge(p,ev)) return true;
// start capturing mouse events and set mouse/key handlers
var target=p; // if 'capture' not supported, track in panel only
if (document.body.setCapture) // IE
{ document.body.setCapture(); var target=document.body; }
if (window.captureEvents) // moz
{ window.captureEvents(Event.MouseMove|Event.MouseUp,true); var target=window; }
if (target.onmousemove!=undefined) target.saved_mousemove=target.onmousemove;
target.onmousemove=this.dragmove;
if (target.onmouseup!=undefined) target.saved_mouseup=target.onmouseup;
target.onmouseup=this.dragstop;
if (target.onkeydown!=undefined) target.saved_keydown=target.onkeydown;
target.onkeydown=this.dragkey;
// calculate and save drag data in target element
var x=findMouseX(ev); var left=findPosX(p); var width =p.offsetWidth;
var y=findMouseY(ev); var top =findPosY(p); var height=p.offsetHeight;
var sizing=ev.shiftKey;
var edgeW=this.getPanelEdgeWidth(p); var edgeH=this.getPanelEdgeHeight(p);
var isT=(y-top<edgeH); var isL=(x-left<edgeW);
var isB=(top+height-y<edgeH); var isR=(left+width-x<edgeW);
var d=new Object();
d.panel=p; d.left=left; d.top=top;
d.width=this.getPanelWidth(p); d.height=this.getPanelHeight(p);
d.sizing=sizing; d.edgeW=edgeW; d.edgeH=edgeH;
d.isT=isT; d.isL=isL; d.isB=isB; d.isR=isR; d.offset=this.getPanelOffset(p);
d.saved={ x:p.style.left, y:p.style.top, w:p.style.width, h:p.style.height,
z:p.style.zIndex, pos:p.style.position, classname:p.className };
target.data=d;
this.addGhost(p); // keep document from shrinking during move/size
return this.processed(ev);
},
// MOUSEMOVE (during drag)=move/size panel
dragmove: function(ev){ var ev=ev||window.event; var cmm=config.macros.moveablePanel;
var d=this.data; var p=d.panel;
if (!p) { this.onmousemove=this.saved_mousemove?this.saved_mousemove:null; return; }
cmm.quiet++; // save all notifications until the end...
// ensure panel is undocked and scrolled into view, THEN get starting mouse and scroll positions
if (!hasClass(p,'undocked'))
{ cmm.undockPanel(p,true); if (this.manager) this.manager.trackMap(p); }
if (d.x===undefined) // first move event only
{ cmm.scrollToPanel(p); d.x=findMouseX(ev); d.y=findMouseY(ev); }
// get current mouse pos
var newX=findMouseX(ev); var newY=findMouseY(ev);
// calculate new TLWH (start with current panel pos/size)
var startX=d.x; var startY=d.y; var offsetX=d.offset.x; var offsetY=d.offset.y;
var L=d.left; var T=d.top; var W=d.width; var H=d.height;
var newL=L; var newT=T; var newW=p.fixedwidth||W; var newH=p.fixedheight||H;
if (d.sizing) { // resize panel
var minW=d.edgeW*2; var minH=d.edgeH*2; // stay bigger than edge areas
if (hasClass(p,'folded')) this.fold(p.foldButton,ev); // un-fold first!
if (d.isT) newH=H-newY+startY+1;
if (d.isB) newH=H+newY-startY+1;
if (d.isL) newW=W-newX+startX+1;
if (d.isR) newW=W+newX-startX+1;
if (d.isT) newT=T-offsetY+newY-startY+1; else newT=T-offsetY;
if (d.isL) newL=L-offsetX+newX-startX+1; else newL=L-offsetX;
if ((d.isL||d.isR)&&!p.fixedwidth) newW=(newW>minW?newW:minW);
if ((d.isT||d.isB)&&!p.fixedheight) newH=(newH>minH?newH:minH);
} else { // move panel
newL=L-offsetX+newX-startX+1;
newT=T-offsetY+newY-startY+1;
}
if (hasClass(p,'hover')) { // hover=stay on first screen
var ww=findWindowWidth(); var wh=findWindowHeight();
newL+=offsetX; newT+=offsetY; // hover=no relative offset (window-relative)
// WFFL lower right is off... a bit too far (perhaps scrollwidth?)
if (newL+newW>ww) newL=ww-newW; if (newT+newH>wh) newT=wh-newH; // limit lower right
if (newL<0) newL=0; if (newT<0) newT=0; // limit upper left
} else { // normal floating panel=limit upper left (stay on page)
if (newL+offsetX<0) newL=0-offsetX; if (newT+offsetY<0) newT=0-offsetY;
}
// move the panel and scroll into view as needed
p.style.left=newL.toString()+'px';
p.style.top=newT.toString()+'px';
if (d.sizing) p.style.width=newW.toString()+'px';
if (d.sizing) p.style.height=newH.toString()+'px';
cmm.scrollToPanel(p);
// report new position and notify panel manager... done!
cmm.quiet--; cmm.showPanelStatus(p,true); cmm.notify(p);
return cmm.processed(ev);
},
dragkey: function(ev){ var ev=ev||window.event;
var d=this.data; var p=d.panel;
if (ev.keyCode==27) { // ESC=CANCEL... restore panel to previous pos/size
p.style.left =d.saved.x; p.style.top =d.saved.y;
p.style.width=d.saved.w; p.style.height=d.saved.h;
p.style.zIndex=d.saved.z;
p.style.position=d.saved.pos;
p.className=d.saved.classname;
return this.onmouseup(ev);
}
if (this.saved_keydown) return this.saved_keydown(ev);
},
// MOUSEUP: END MOVE/SIZE, SHIFT-CLICK=SEND TO BACK
dragstop: function(ev){ var ev=ev||window.event; var cmm=config.macros.moveablePanel;
var newX=findMouseX(ev); var newY=findMouseY(ev);
if (this.releaseCapture) this.releaseCapture(); // IE
if (this.releaseEvents) this.releaseEvents(Event.MouseMove|Event.MouseUp); // moz
this.onmousemove=this.saved_mousemove?this.saved_mousemove:null;
this.onmouseup=this.saved_mouseup?this.saved_mouseup:null;
this.onkeydown=this.saved_keydown?this.saved_keydown:null;
var d=this.data; var p=d.panel;
if (ev.shiftKey && d.x==newX && d.y==newY && cmm.isEdge(p,ev))
cmm.sendPanelToBack(p); // SHIFT-CLICK *EDGE*
cmm.togglePanelButtons(p,true);
cmm.quiet++; if (cmm.manager) cmm.manager.trackMap(p); cmm.quiet--;
cmm.clearGhost(); // allow document to adjust extents (if needed)
cmm.showPanelStatus(p,false); cmm.timedMessage(cmm.formatPanelStatus(p),cmm.msgDuration);
return cmm.processed(ev);
},
//}}}
// // CSS definitions
//{{{
css: '/*{{{*/\n'
+'.moveablePanelMenu\n'
+'\t{ display:none; position:absolute; right:.5em; top:-1em; }\n'
+'.undocked .selected.moveablePanelMenu\n'
+'\t{ display:inline; }\n'
+'.floatingPanel .selected .moveablePanelMenu\n'
+'\t{ display:inline; }\n'
+'.hover\n'
+'\t{ position:fixed !important; }\n'
+'.folded\n'
+'\t{ height:1.5em !important; overflow:hidden !important; }\n'
+'.tiddler .folded\n'
+'\t{ height:2em !important; }\n'
+'.folded .moveablePanelMenu\n'
+'\t{ top:.5em; } /* buttons fit in folded panel */\n'
+'.tiddler .moveablePanelMenu\n'
+'\t{ top:.2em; } /* buttons fit in tiddler title */\n'
+'.undocked .toolbar\n'
+'\t{ padding-right:7.5em; } /* make room for buttons next to toolbar */\n'
+'.floatingPanel .moveablePanelMenu\n'
+'\t{ right:1em;top:1em; } /* buttons fit in floating panel */\n'
+'.moveablePanelButton\n {'
+'\tbackground:#ccc !important; color:#000 !important;\n'
+'\tborder:1px solid #666; padding:0 .25em; margin:0px 1px;\n'
+'}\n'
+'.moveablePanelButton:hover\n'
+'\t{ background:#fff !important; color:#000 !important; }\n'
+'.popup\n'
+'\t{ z-index:9999999 !important; } /* popups MUST always be on top! */\n'
+'.moveablePanelGhost\n'
+'\t{ position:absolute; border:1px dotted #999; }\n'
+'/*}}}*/'
});
//}}}
// // load time initialization
//{{{
// defaults for options
if (config.options.txtMoveablePanelMapName===undefined)
config.options.txtMoveablePanelMapName='DefaultMap';
if (config.options.chkMoveablePanelShowStatus===undefined)
config.options.chkMoveablePanelShowStatus=true;
if (config.options.chkMoveablePanelShowManager===undefined)
config.options.chkMoveablePanelShowManager=true;
// set up shadow stylesheet, then load styles (might be customized)
config.shadowTiddlers.MoveablePanelStyles=config.macros.moveablePanel.css;
var css=store.getRecursiveTiddlerText('MoveablePanelStyles',config.macros.moveablePanel.css,10);
setStylesheet(css,'moveablePanelStyles');
//}}}
// // hijacks
//{{{
// adjust popup placement to account for the current horizontal scrollbar
// offset (if any), so that popups will appear in the correct location, even
// when their 'root' element is scrolled far from the page origin.
var fn=Popup.place; fn=fn.toString(); if (fn.indexOf('findScrollX')==-1) { // only once
fn=fn.replace(/winWidth\s*-\s*scrollWidth\s*-\s*1/,
'findScrollX() + winWidth - scrollWidth - 1');
fn=fn.replace(/winWidth\s*-\s*popupWidth\s*-\s*scrollWidth\s*-\s*1/,
'findScrollX() + winWidth - popupWidth - scrollWidth - 1');
eval('Popup.place='+fn);
}
//}}}
//{{{
// window.scrollTo() is used throughout the core (and plugins) to scroll to a *vertical*
// position as computed by ensureVisible(), in order to bring a tiddler into view.
// Unfortunately, the *horizontal* scroll position is almost always hard-coded to 0
// (i.e. a return to the left edge of the page). Normally, this is not a problem,
// since a page is rarely scrolled horizontally. However, when there are moveable
// panels, they can appear far from the left edge, so always scrolling to the left
// edge is very disruptive. In addition, unwanted scrolling can occur as a side
// effect when displaying or refreshing a tiddler (e.g., switching between
// view/edit templates). These hijacks adds control flags ('noScrollX' and 'noscrollY')
// that can be used to temporarily disable scrolling within the document.
if (window.scrollTo_moveablePanel==undefined) { // only once
window.scrollTo_moveablePanel=window.scrollTo;
window.scrollTo=function(x,y) {
var cmm=config.macros.moveablePanel;
if (cmm.noScrollX&&cmm.noScrollY) return;
x=cmm.noScrollX?findScrollX():x;
y=cmm.noScrollY?findScrollY():y;
window.scrollTo_moveablePanel(x,y);
}
}
// ensureVisible() is used to calculate the y-offset of a tiddler, just before scrolling
// This tweak sets up an ASYNC timer to invoke the 'bring to front/scroll into view'
// function for 'tiddler' and 'popup' classes. This allows the function
// to be triggered *after* core scrolling occurs, so the fixups are not
// stomped on by the core's normal scroll handling
if (window.ensureVisible_moveablePanel==undefined) { // only once
window.ensureVisible_moveablePanel=window.ensureVisible;
window.ensureVisible=function(e) {
var ny=ensureVisible_moveablePanel.apply(this,arguments); // get core value
// fixup height to account for horizontal scrollbar (if present)
var atBottom=findPosY(e)+e.offsetHeight>=findScrollY()+findWindowHeight();
var hasHScroll=document.documentElement.scrollWidth>findWindowWidth();
var hScrollSize=findWindowWidth()-document.body.offsetWidth;
if (atBottom && hasHScroll) ny+=hScrollSize;
// defer scrolling for tiddlers and popups (except during startup)
if (!startingUp && (hasClass(e,'tiddler')||hasClass(e,'popup'))) {
var cmm=config.macros.moveablePanel;
cmm.noScrollX++; if (hasClass(e,'tiddler')) cmm.noScrollY++;
var delay=config.options.chkAnimate?config.animDuration+50:50;
cmm.ensurePanelVisible(e,delay); // ASYNC SCROLL
}
return ny;
}
}
// story.refreshTiddler()
if (Story.prototype.refreshTiddler_moveablePanel==undefined) { // only once
Story.prototype.refreshTiddler_moveablePanel=Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler=function() {
var cmm=config.macros.moveablePanel;
cmm.noScrollX++; cmm.noScrollY++; // DON'T SCROLL AT ALL
var r=this.refreshTiddler_moveablePanel.apply(this,arguments);
cmm.noScrollX--; cmm.noScrollY--;
return r;
}
}
// story.displayTiddler()
if (Story.prototype.displayTiddler_moveablePanel==undefined) { // only once
Story.prototype.displayTiddler_moveablePanel=Story.prototype.displayTiddler;
Story.prototype.displayTiddler=function(srcElement,tiddler) {
var cmm=config.macros.moveablePanel;
//WFFL cmm.noScrollX++; cmm.noScrollY++;
var r=this.displayTiddler_moveablePanel.apply(this,arguments);
var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
var panel=cmm.findPanel(title); // if moveable... unfold panel (but not during startup)
if (panel&&hasClass(panel,'folded')&&!startingUp) cmm.foldPanel(panel);
var delay=config.options.chkAnimate?config.animDuration+50:50;
cmm.ensurePanelVisible(this.getTiddler(title),delay); // ASYNC SCROLL
return r;
}
}
//}}}
//{{{
// Zoomer() displays an animated bounding box when showing a tiddler. But this box 'zooms' to the tiddler's 'anchor point', not the current panel position, which can cause a 'scroll blink'. This hijack redirects the zoomer's target directly to the undocked panel (if any)
if (window.Zoomer_moveablePanel==undefined) { // only once
window.Zoomer_moveablePanel=window.Zoomer;
window.Zoomer=function(text,startElement,targetElement,unused) {
if (hasClass(targetElement,'tiddler')) {
var tid=targetElement.getAttribute('tiddler');
arguments[2]=config.macros.moveablePanel.findPanel(tid)||targetElement;
}
return window.Zoomer_moveablePanel.apply(this,arguments);
}
}
//}}}
<html><img src="images/tree.jpg" align="left" style="padding-right:10px; padding-bottom:10px" /></html>We think of nature-based living as well-developed ways of surviving in, thriving with, learning from, and giving back to Nature. Living with the land is different for each person. Taking part in a [[Firemaker]] gathering gives folks an invitation to examine ways they might want to deepen their relationship with what surrounds them: life in every direction!
All of our ancestors knew how to live well without modern tools and materials. Indeed, many nonindustrial technologies are so advanced that when colonizing people came into contact with the indigenous people who practiced them, the technologies were often considered so awesome and amazing as to be magical. The nature-based technologies are still that advanced, and these ways are not lost. [[Firemaker]] is a wonderful opportunity to bring some awesome, amazing nature-based magic into your life (while surrounded with awesome, amazing, and magical people you'll want to bring home with you).
!Left Navigation Menu
To your left you should see three orange words that say About, Gathering, and More. You may click on any of those three words to expand/collapse the left Navigation Menu. You may have already tried that, but if you haven't, try it now! Once you have expanded the menu, you can click on any of the yellow links for more information about that topic.
!Top Navigation Bar
This website is made up of little information chunks, known as "tiddlers." This "Navigation Help" page is a tiddler, for example. You can open multiple tiddlers at the same time. Each yellow link in the left Navigation Menu will open a new tiddler. If you have multiple tiddlers open, a top Navigation Bar will appear, with the name of each tiddler that you have open, each with a little yellow X just to the right of the name. If you are done looking at a tiddler and want to close it, you can click the X next to its name in the top Navigation Bar, or you can click the "close" link at the top center of the tiddler that you are currently viewing. If you have multiple tiddlers open and you want to close a tiddler that you aren't looking at right then, you can simply click on the X next to its name in the top Navigation Bar. If you want to close all the other open tiddlers except for the one you are looking at right then, click on the "close others" link at the top center of the tiddler you are currently viewing.
/***
|Name|NavigationMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#NavigationMacro|
|Version|0.3 |
|Requires|~TW2.08+|
!Description:
*Creates Next and Prev buttons on tiddlers, to cycle through tiddlers in order.
**you can create next and previous buttons to navigate through your journals, or the tiddlers of a tutorial.
*You can exclude certain tiddlers, or navigate through tiddlers with a specific tag only.
*The tiddlers can be sorted by modified or created.
*Custom ordering will be available after the release of TW 2.1
*Needs to be added to the ViewTemplate
*Buttons are updated dynamically and are hidden if there is no next or previous tiddler.
!Usage
{{{<<navigation>>}}}
or for more options:
{{{<<navigation sort exclude tag labelPrevious labelNext >>}}}
where sort is ''created'' (default) or ''modified''
exlcude is the tag to exclude.
tag is the tag to navigate through.
labelPrevious is the label for the previous button.
labelNext is the label for the next button.
I recommend adding it to the ViewTemplate in the viewer div:
{{{<div class='viewer'>
<span macro='view text wikified'></span>
<span macro='navigation "" "" plugin'></span></div>}}}
!Example:
The next and previous buttons at the bottom of this tiddler will cycle through all of my extensions for TW.
!History
* 25-06-06 : version 0.3, first release
!Code
***/
//{{{
window.refreshNavLink = function (e) {
var title = e.getAttribute("here");
var sort = e.getAttribute("sort");
var exclude = e.getAttribute("exclude");
if (e.getAttribute("tag")!=undefined) var tag = e.getAttribute("tag");
var navtype = e.getAttribute("navtype");
if (tag) {var tiddlers = store.getTaggedTiddlers(tag,sort);}
else {var tiddlers = store.getTiddlers(sort,exclude);}
for (var g=0; g<tiddlers.length; g++)
{if (title==tiddlers[g].title)
{if(navtype=="next" && !tiddlers[g+1])
e.className += " navNonExisting"
else if (navtype=="prev" && !tiddlers[g-1])
e.className += " navNonExisting"
else e.className = "button";}
}
}
config.refreshers.navLink = function(e,changeList){
refreshNavLink(e);
}
config.macros.navigation={};
config.macros.navigation.handler = function(place,macroName,params,wikifier,paramString,tiddler){
var sort = (params[0] && params[0]!=".")? params[0]: "created";
var exclude =(params[1] && params[1]!=".")? params[1]: undefined;
if (params[2])
{var tag= params[2];
if(tiddler.tags.contains(tag)==false)
return false;
}
var labelPrev = params[3] ? params[3] : "Previous";
var labelNext = params[4] ? params[4] : "Next";
var next = function(e){
if (!e) var e=window.event;
var theTarget = resolveTarget(e);
var navtype = theTarget.getAttribute("navtype");
if (tag) {var tiddlers = store.getTaggedTiddlers(tag,sort);}
else {var tiddlers = store.getTiddlers(sort,exclude);}
for (var g=0; g<tiddlers.length; g++)
{if (tiddler.title==tiddlers[g].title)
{if (navtype == "next")
story.displayTiddler(theTarget,tiddlers[g+1].title)
else if (navtype == "prev")
story.displayTiddler(theTarget,tiddlers[g-1].title)}
}
}
var createNavBtn = function(text,theId,mode){
var nextBtn = createTiddlyButton(place,text,text,next,null,theId);
nextBtn.setAttribute("refresh","navLink");
nextBtn.setAttribute("here",tiddler.title);
nextBtn.setAttribute("sort",sort);
nextBtn.setAttribute("exclude",exclude);
nextBtn.setAttribute("navtype",mode);
if (tag) nextBtn.setAttribute("tag",tag);
refreshNavLink(nextBtn);
}
createNavBtn(labelNext+" ►","NavNext","next");
createNavBtn("◄ "+labelPrev,"NavPrevious","prev");
}
setStylesheet(
"#NavNext {float:right;}\n"+
"#NavPrevious {float:left;}\n"+
".navNonExisting {display:none;}\n"+
"",
"NavMacroStyles");
//}}}
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class). In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release. Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE
// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
window.removeCookie=function(name) {
document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;';
}
}
config.formatters.push( {
name: "nestedSliders",
match: "\\n?\\+{3}",
terminator: "\\s*\\={3}\\n?",
lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
handler: function(w)
{
lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
{
var defopen=lookaheadMatch[1];
var cookiename=lookaheadMatch[2];
var header=lookaheadMatch[3];
var panelwidth=lookaheadMatch[4];
var transient=lookaheadMatch[5];
var hover=lookaheadMatch[6];
var buttonClass=lookaheadMatch[7];
var label=lookaheadMatch[8];
var openlabel=lookaheadMatch[9];
var panelID=lookaheadMatch[10];
var blockquote=lookaheadMatch[11];
var deferred=lookaheadMatch[12];
// location for rendering button and panel
var place=w.output;
// default to closed, no cookie, no accesskey, no alternate text/tip
var show="none"; var cookie=""; var key="";
var closedtext=">"; var closedtip="";
var openedtext="<"; var openedtip="";
// extra "+", default to open
if (defopen) show="block";
// cookie, use saved open/closed state
if (cookiename) {
cookie=cookiename.trim().slice(1,-1);
cookie="chkSlider"+cookie;
if (config.options[cookie]==undefined)
{ config.options[cookie] = (show=="block") }
show=config.options[cookie]?"block":"none";
}
// parse label/tooltip/accesskey: [label=X|tooltip]
if (label) {
var parts=label.trim().slice(1,-1).split("|");
closedtext=parts.shift();
if (closedtext.substr(closedtext.length-2,1)=="=")
{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
openedtext=closedtext;
if (parts.length) closedtip=openedtip=parts.join("|");
else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
}
// parse alternate label/tooltip: [label|tooltip]
if (openlabel) {
var parts=openlabel.trim().slice(1,-1).split("|");
openedtext=parts.shift();
if (parts.length) openedtip=parts.join("|");
else openedtip="hide "+openedtext;
}
var title=show=='block'?openedtext:closedtext;
var tooltip=show=='block'?openedtip:closedtip;
// create the button
if (header) { // use "Hn" header format instead of button/link
var lvl=(header.length>5)?5:header.length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
btn.innerHTML=title; // enables use of HTML entities in label
// set extra button attributes
btn.setAttribute("closedtext",closedtext);
btn.setAttribute("closedtip",closedtip);
btn.setAttribute("openedtext",openedtext);
btn.setAttribute("openedtip",openedtip);
btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
btn.defOpen=defopen!=null; // save default open/closed state (boolean)
btn.keyparam=key; // save the access key letter ("" if none)
if (key.length) {
btn.setAttribute("accessKey",key); // init access key
btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
}
btn.setAttribute("hover",hover?"true":"false");
btn.onmouseover=function(ev) {
// optional 'open on hover' handling
if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
document.onclick.call(document,ev); // close transients
onClickNestedSlider(ev); // open this slider
}
// mouseover on button aligns floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
}
// create slider panel
var panelClass=panelwidth?"floatingPanel":"sliderPanel";
if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
panel.button = btn; // so the slider panel know which button it belongs to
btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
panel.setAttribute("transient",transient=="*"?"true":"false");
panel.style.display = show;
panel.style.width=panel.defaultPanelWidth;
panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }
// render slider (or defer until shown)
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
if ((show=="block")||!deferred) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
// align floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
}
else {
var src = w.source.substr(w.nextMatch);
var endpos=findMatchingDelimiter(src,"+++","===");
panel.setAttribute("raw",src.substr(0,endpos));
panel.setAttribute("blockquote",blockquote?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
}
}
}
}
)
function findMatchingDelimiter(src,starttext,endtext) {
var startpos = 0;
var endpos = src.indexOf(endtext);
// check for nested delimiters
while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
// count number of nested 'starts'
var startcount=0;
var temp = src.substring(startpos,endpos-1);
var pos=temp.indexOf(starttext);
while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
// set up to check for additional 'starts' after adjusting endpos
startpos=endpos+endtext.length;
// find endpos for corresponding number of matching 'ends'
while (startcount && endpos!=-1) {
endpos = src.indexOf(endtext,endpos+endtext.length);
startcount--;
}
}
return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
if (!theTarget) return false;
var theSlider = theTarget.sliderPanel;
var isOpen = theSlider.style.display!="none";
// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);
// toggle label
theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
// toggle tooltip
theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));
// deferred rendering (if needed)
if (theSlider.getAttribute("rendered")=="false") {
var place=theSlider;
if (theSlider.getAttribute("blockquote")=="true")
place=createTiddlyElement(place,"blockquote");
wikify(theSlider.getAttribute("raw"),place);
theSlider.setAttribute("rendered","true");
}
// show/hide the slider
if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
else
theSlider.style.display = isOpen ? "none" : "block";
// reset to default width (might have been changed via plugin code)
theSlider.style.width=theSlider.defaultPanelWidth;
// align floater panel position with target button
if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);
// if showing panel, set focus to first 'focus-able' element in panel
if (theSlider.style.display!="none") {
var ctrls=theSlider.getElementsByTagName("*");
for (var c=0; c<ctrls.length; c++) {
var t=ctrls[c].tagName.toLowerCase();
if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
{ try{ ctrls[c].focus(); } catch(err){;} break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
else window.removeCookie(cookie); // remove cookie if slider is in default display state
}
// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
// prevent clicks *within* a slider button from being processed by browser
// but allow plain click to bubble up to page background (to close transients, if any)
if (e.shiftKey || theTarget!=resolveTarget(e))
{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
Popup.remove(); // close open popup (if any)
return false;
}
//}}}
//{{{
// click in document background closes transient panels
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);
if (document.nestedSliders_savedOnClick)
var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
// if click was inside a popup... leave transient panels alone
var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
if (p) return retval;
// if click was inside transient panel (or something contained by a transient panel), leave it alone
var p=target; while (p) {
if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
p=p.parentNode;
}
if (p) return retval;
// otherwise, find and close all transient panels...
var all=document.all?document.all:document.getElementsByTagName("DIV");
for (var i=0; i<all.length; i++) {
// if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
// otherwise, if the panel is currently visible, close it by clicking it's button
if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
// see [[MoveablePanelPlugin]] for use of 'undocked'
var rightEdge=document.body.offsetWidth-1;
var panelWidth=panel.offsetWidth;
var left=0;
var top=btn.offsetHeight;
if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
}
if (place.style.position!="relative") {
var left=findPosX(btn);
var top=findPosY(btn)+btn.offsetHeight;
var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
if (p) { left-=findPosX(p); top-=findPosY(p); }
if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
if (left<0) left=0;
}
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
Morpher.prototype.coreStop = Morpher.prototype.stop;
Morpher.prototype.stop = function() {
this.coreStop.apply(this,arguments);
var e=this.element;
if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
// adjust panel overflow and position after animation
e.style.overflow = "visible";
if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
}
};
}
//}}}
The [[Firemaker]] annual week-long gathering is the main event hosted by [[Firemaker PSS]]. We encourage anyone from the Firemaker community to host their own workshop, camping trip, hike or plant walk, or other similar event outside of Firemaker Primitive Skills Society's formal scope. Please feel free to post about such events on our [[calendar|Calendar]] here. If you want help from the council, please [[contact us|Contact Us]] so we can see what we can do for you.
!Need or Offer a Ride
If you have space in a vehicle to give someone a ride to the gathering, or if you need a ride to the gathering, please [[contact us|Contact Us]] and let us know, so we can help coordinate rideshares.
!Volunteer Spirit
Firemaker is a non-profit organization, and the gatherings make just enough money to allow the next year's gathering to be funded. We try to keep our prices as low as possible, and offer worktrade options, so that income-level will not be a limiting factor as to who can attend the gathering. As such, a volunteer spirit is essential to the gathering. Everyone attending a Firemaker gathering should expect to volunteer in some capacity. Volunteer duties will be announced and signed-up for at the event. Please also see [[Volunteering]] for more information.
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<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='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
!Please Note
All workshops and any ceremonies offered at Firemaker are on an opt-in only basis. All workshop Instructors are asked to share their background and experience in what they are offering (who they learned it from, where they learned it, self-taught, etc.) so that all potential participants can feel comfortable choosing for themselves if an Instructor's workshop is right for them.
Each year, the [[Firemaker]] gathering has hosted different [[workshops|Workshop Information]]. While we cannot guarantee which workshops or Instructors will be at the next gathering, here is a sampling of workshops from previous years:
!Children's Workshops
//For all-ages workshops, see the asterisked items in the Adult Workshops list below. There are some duplicates on the two lists, as some workshops have been offered specifically for children, as well as being offered for all-ages.//
Animal Ecology
Awareness Games
Berry Blast
Bow Making
Cedar Bark Weaving
Clay for Kids
Cordage Making
Dreamcatcher Making
Folktale Theater
Kids' Crafts
Leaf Rubbings
Making a Puppet Show
Making Herbal Tea
Medicine Bag Making
Nature Games / Learning Plants
Nature Hunt
Paper Making from Natural Materials
Plant Walk
Quiet Walk, Still Hunting
Shelter Building
Soapstone Carving
Storytelling & Activities
Swamp Adventure
Wild Food Feast
Wild Games
Wild Sensitivity, Awareness
Wild Treasure Hunt
Willow Basketry
Wolf Pups
Yoga ABC
!Adult and ~All-Ages Workshops
//Workshops with an asterisk after them indicate all-ages or children were invited if accompanied by an adult. //
Abobabies: Natural Child Birth and Care of Infants
Animal Processing*
Awareness: Paying Attention
Awareness and Sensory Games
Balancing
Bark Baskets*
Basic Needle Felting
Bird Language*
Bow Drill Fire*
Bow Making (5 part series)*
Brain Tanning*
Carving Westcoast Native Plaques*
~Child-Directed Learning for Real Life*
Circle Song
Coil Baskets*
Coming Home to the Wild: Survival Intro
Communion Through Communication
Cordage Making*
Coyote Mentoring, Drum Dancing
Dance*
~Diaper-Free Babies
Didgeridoo
Direct Communication with Plants*
Discovering Wild Plants
Discussion about Birth and Birthing Support
Discussion about Cultural Appropriation
Discussion about Postpartum Mothers' needs & Experience
Drum Stalk
Earth Awareness*
Ecology of Eating: Instinctive Eating*
Edible Ecosystems: Forest Gardening and Wild Nurturing*
Edible Insects*
Emergency Survival
Expanding Physical Awareness: Sensing, Moving and Being in the Woods
Exploring Special Places in the Woods*
Fermented Foods
Fertility Awareness
Fire from Sticks*
Fish Spear Making*
Flute Making
Flute Playing
Folded Bark Baskets*
Food: Ancient Ways of Relating to Food
Food Preservation Discussion*
Four Gifts of a Man
Four Gifts of a Woman
Freedom: Following your Rhythm
Gifts of Gender Fluidity
Healing Circle*
Herbal Medicine Making
Hide Tanning
Honouring our Elders*
Hunting & Food Ethics*
Improvisation as a Tool for ~Community-Building
Joy of Living
Knitting
Leather Sling Making*
Looking at West Coast Native Art
Mantracking
Mapping
Medicine Wheel
Mindfulness Meditation
Miniature Cob: Creating your own Miniature Cob Structure*
Mocassins*
Moon Time Awareness with Moon Staff Making
Natural Farming/Gardening*
Natural Navigation*
~Non-Violent Communication: Introduction
~Non-Violent Communication / Empathy & the Tree of Life Model
~Non-Violent Communication / Parenting
Paleo/Ancestral Diet and Food Ethics*
Pit Cooking*
Plant Walk*
Plaque Carving
Pottery
Preparing a Wild Plant Meal*
Primitive Cooking*
Rendering Fat & Making a Salve with it
Salves & Tinctures*
Sauerkraut Making
~Save-Your-Endangered-Language Games
Seeds / Seed Bombs
Sharpening
Simplicity, Silence, and Prayer
Survival Trapping
Tool Making: Crooked Knives
Tracking
Trail Running
Yoga for Singles or Partners
Yoga to Greet the Day
Way of the Caretaker: Indigenous and Natural Way of Tending the Wild
Way of the Shadow
Wild Gathering & Medicine Making*
Wild Wander: Living Like a Creature*
Wildlife Signs & Tracking
Willow Basketry (5 part series)
Wisdom of Conscious Relationship
Wool Felting
Yogurt
24-hour Solo Quest: Introduction to Solo Quest; Solo Preparation & Going Out; Solo Return
The photo gallery is still under construction. Thanks for your patience!
This portion of the site is still under construction... In the meantime, you can enjoy this pretty picture of a past Pit Cook!
<html><img src="images/pitcook.jpg" align="left" style="padding-right:10px; padding-bottom:10px" /></html>
<html>
<img src="images/firemaker fees.jpg" align="left" style="padding-right:30px; padding-bottom:20px" />
</html>
!Please Note:
**Food fees for the week include meals for Tuesday breakfast through Sunday lunch.
**Early bird prices are only in effect until June 1st. Registration and payment must both be received/post-marked by this date.
**--If you can’t make it for the full week, please contact us regarding fees for shorter periods.-- Day rates will be posted as part of the pricing schedule for 2012.
**Reduced fees are available for parents with children age 3 and under. This is to compensate for the likelihood of reduced workshop time because of the extra caretaking that young children need. Please contact us for details.
**Participants registering as limited income are expected to do a work trade if possible. Please contact us for details as there are a limited number of worktrade spots available.
**Worktrade is used to reduce the cost of registration. It does not effect the price of food if you choose to eat with us. All General Registration participants must pay full price for food.
**Bunk houses for Camp Gilwell are shared accommodations. If you do not have enough people in your party to take up a whole bunk house, you may be bunked with people who are not in your party.
!General Daily Schedule
(//Subject to Time Adjustment//)
''Morning Activities'' 7:00 - 8:00
''Breakfast'' 8:00 - 8:30
''[[Circle]] & Morning Workshop'' 9:00 - 12:00 - //The council is considering starting the morning Circle at 8:45 this year, to allow more time for workshops.//
''Lunch & [[Circle]]'' 12:15 - 1:15
''Afternoon Workshop'' 1:30 - 4:30
''Dinner'' 6:00 - 6:30
''Evening Activities'' 7:00
[[Morning and Evening Activities|Activities and Impromptu Happenings]] are equally instructor and participant driven. If you have a suggestion or wish to host an Activity, //please// coordinate with a council member to ensure that it does not conflict with something else, and that it is announced to the entire gathering.
!General Schedule for the Week
(//Items in Italics are Subject to Change//)
''Monday''
- Registration Starts 12:00 noon
- Tent & [[Campsite Set-Up|Campsite Information]]
- Evening Potluck Dinner and Welcome 6:00-6:30
- Opening Ceremonies 7:00
- //Women's Tent is put up// (all women are invited to help)
''Tuesday''
- Community Building Games, no workshops to be held 9:00-12:00
- //Activities at the Fire-pit// 7:00
''Wednesday''
- [[Women's Circle|Women's and Men's Circles]] //in the Women's Tent// 7:00 (We invite all men in our community to support the women by consciously contributing to childcare during the Women's Circle.)
''Thursday''
- Free Time / Integration, no workshops to be held 1:30 - 6:00
- Trader's Blankets 1:30 - 4:30
- [[Men's Circle|Women's and Men's Circles]] 7:00 (We invite all women in our community to support the men by consciously contributing to childcare during the Men's Circle.)
- Maiden's Night in the Women's Tent 7:00
''Friday''
- [[Pit Cook]] Dinner 6:00
''Saturday''
- //Women's Tent becomes open to all members of the community//
- [[Giveaway]] 7:00
''Sunday''
- //Pack-up and ~Clean-Up of Site// 9:00 - 12:00
- //Closing Ceremonies// 1:00
At Firemaker, as in life, we strive to care for our environment and to respect others. With that in mind, please ensure that you spend some time during the week being a [[site steward|Site Stewardship]], and please plan your departure with enough time to assist with site cleanup.
Here is what some of the Firemaker folk have had to say about previous gatherings:
**"Essentially I LOVED the week and I appreciate all of the work you and the committee put into it."
**"The food was awesome, [the cook] is awesome. ... I also REALLY appreciated the dedication to [providing] ethical meat."
**"It was really cool that we got to take home our own creations."
**"THANK YOU! Firemaker rocks and I really appreciate all of the work of the committee who run it!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
**"The food was excellent. I appreciated that the menu was simple but high in quality, and not too demanding for the workers."
**"Just been at a week-long primitive skills gathering called Firemaker - amazing. We created a community for a week - ate, camped, shared skills, cooked, cleaned together, shared our hearts, wove baskets (I made an amazing basket!!), some skinned a deer, others created wood carvings, made knives, created bowls out of tree bark. Beautiful, amazing. I sobbed my eyes out at the end, which I realise is such a welcome and necessary release for me. I knelt on the river bank and my tears joined the river's flow, releasing old stories to make space for the now. I slept to the sound of rushing water all night, bathed in the river each morning and wove baskets by the fire by day, chatting with lovely folk. This is real life."
If you would like to leave your own comment about your experience at Firemaker, please do so below!
☆☆☆
//If you wish to leave a comment and have yet to set your username, you will be prompted to do so. No password or account is necessary. Your username will be stored in a cookie, for the purposes of leaving comments only. //
+++^40em^[Describe your experience at Firemaker]...
<<moveablePanel>>Describe your experience at Firemaker ✉
----
<<setUserName force>>
<<comment here "" "+++!!!!![%when% (%who%): %subject%]>...\n%message%\n===\n">>===
| <<tiddler ToggleSliders with: here "view all" "close all">>
!Knife and Tool Safety
At Firemaker gatherings there are usually some [[workshops|Past Workshops]] offered where knives or other hand tools may be used, and many people choose to bring their own knives and other tools. It is important to be careful and intentional in how you use these tools. Do not leave them lying around unattended. Unattended knives, axes, awls, or other dangerous tools left unattended will be confiscated until the item is picked up from a council member. If this happens more than once, the tool may be kept by the council until the end of the event.
Many parents in the Firemaker community are teaching their children about using a knife, and it is not unusual to see a young child working on a project with their first knife. It is the responsibility of every adult at Firemaker to help with knife and tool safety. If you see an unsupervised child using a knife or other dangerous tool, please step in and supervise or remind them of the need for safety and unite them with an adult willing to supervise.
Everyone at Firemaker, adults and children alike, need to respect each other when using or when near someone who is using a knife or other sharp tool. Do not sit within arms-reach of someone using a knife or sharp tool (at Firemaker we call this respecting someone's "Blood Bubble"). When you are using a knife or sharp tool, make sure you have your own Blood Bubble of space around you that no one is sitting in. Always point your knife or tool with the pointed end and/or the sharp side of the blade away from you and anyone else nearby. If you are making stabbing motions (i.e. punching a hide with an awl), do not do so on your lap. If you need help, always ask someone who is experienced with the tool. Tool safety is everyone's responsibility.
!Social Safety
At Firemaker gatherings there are a number of moments where what someone says in a circle, a workshop, or a conversation around the campfire might be sensitive or personal information that they are sharing with present company and would like it to remain within the group they shared it. It is always okay to ask at the beginning of a workshop or circle if the conversations therein will be considered private. If you are not sure whether what someone said is considered by them to be personal and not for sharing with others, feel free to ask them. In building and maintaining community, it is important to respect the privacy of others.
Firemaker events are always inclusive of everyone attending, no matter their age, gender, sex, orientation, physical ability, skill level, lifestyle, etc. We do our best to make our gatherings available to anyone, despite their income level. If you would very much like to attend and are worried you cannot afford to, please [[contact us|Contact Us]]. If you ever feel uncomfortable or excluded at a Firemaker event, please consider contacting a council member you feel comfortable with and telling them about it. The council reserves the right, at their discretion, to, without a monetary refund, expel anyone who is violent or abusive towards others at a Firemaker event. Happily, we have never had a problem with such behaviour, and we look forward to it not becoming a problem in the future.
If you have mobility issues or concerns and have questions about site access, please [[contact us|Contact Us]].
While Firemaker gatherings are about sharing knowledge of primitive skills and not about activism, some workshops and hosted discussions in the past have had themes that have touched on issues of activism. If you or anyone you know is involved in any direct action or activism, it is always best to practice Security Culture guidelines. If you are unfamiliar with what that means, you can get a quick overview by watching this short two-part [[Earth First! puppet show|http://earthfirstnews.wordpress.com/video/puppet-show/]] or you can read a more in-depth [[introduction to security culture|http://security.resist.ca/personal/culture.shtml]].
Because there is no one answer to what "cultural appropriation" means, the Firemaker council members have done their best to navigate this issue in a way that will be, at best, beneficial and, at worst, tolerable to anyone attending a gathering. We have made all offerings (workshops, ceremonies, activities, etc.) available on an opt-in basis only. We ask every instructor or person leading a group at Firemaker to be clear about their experience and background, whether they are self-taught or from whom they learned what they are sharing, and why they want to share it. In this way, we hope that each participant at Firemaker will feel comfortable choosing for themselves what feels appropriate to attend, given their own beliefs and cultural awareness.
/***
|Name|SetUserNamePlugin|
|Source|http://www.TiddlyTools.com/#SetUserNamePlugin|
|Version|1.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|prompt for TiddlyWiki username|
!!!!!Usage
<<<
{{{
<<setUserName force>>
}}}
This macro prompts for a new username if the default username ("YourName") is currently set. Use optional 'force' keyword to trigger a prompt even if username has already been set.
If you are using the default (shadow) EditTemplate definition, it will be updated to invoke this macro, via the following template syntax:
{{{
<span macro='setUserName'></span>
}}}
so that whenever a user attempts to edit/create a tiddler AND have not yet entered a username, they will be automatically prompted to enter a new username. If you are using a customized EditTemplate, you will need to edit it yourself to add the above.
<<<
!!!!!Revisions
<<<
2006.12.01 [1.0.0] initial release - converted from SetUserName inline script
<<<
!!!!!Code
***/
//{{{
version.extensions.SetUserNamePlugin= {major: 1, minor: 0, revision: 0, date: new Date(2006,12,1)};
config.macros.setUserName = {
msg: "what would you like your username to be?",
handler: function(place,macroName,params) {
// only prompt when needed or forced
var force=params[0]&¶ms[0].toLowerCase()=="force";
if (!force && (readOnly || config.options.txtUserName!="YourName")) return;
var opt="txtUserName";
var who=prompt(this.msg,config.options[opt]);
if (!who||!who.trim().length) return; // cancelled by user
config.options[opt]=who;
saveOptionCookie(opt);
config.macros.option.propagateOption(opt,"value",config.options[opt],"input");
}
}
// add trigger to default shadow EditTemplate (custom templates: add this by hand)
config.shadowTiddlers.EditTemplate+="<span macro='setUserName'></span>";
//}}}
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
Everyone who attends the Firemaker gathering is expected to be a site steward. This means that we respect the land we are camping on, we follow the [[campsite rules|Campsite Rules]], and we put in the effort to pack our trash and leave the site and the land in better condition than when we arrived. Being a site steward also means that any plant harvesting you partake in needs to be done in an ethical manner. If you don't know what that means, please ask a council member at the gathering to help you.
Respecting the land means, in part, that you need to pay attention to your surroundings, be courteous and respectful of all flora and fauna, and take the time to learn from what the land has to teach you.
Depending on the camp and year, there may be a request made by the camp Caretaker for Firemaker folks to help with a specific task (one year, we were asked to each help spread a little mulch in specific areas; another year, to help with the upkeep of a particular trail). Any such tasks will be announced at the gathering.
The entire Firemaker community is also expected to help with [[site cleanup|Clean-Up]] prior to leaving the gathering.
<<fontSize "font-size:">> <<search>>
<html><img src="images/FMheadertext.png" /> <img src="images/FMheadercarving.jpg" /> <img src="images/FMheader.jpg" /></html>
/*{{{*/
#displayArea {margin-left: 200px;}
.headerShadow a.button {margin-left: 12px; border: none; color:[[ColorPalette::TiddlerTitles]]}
.headerShadow {text-align: right; img-align="left"}
.siteSubtitle {font-size:1em; color:[[ColorPalette::Foreground]]}
#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 1em 1em 1em; font-size:1.1em;}
.toolbar {text-align:center; font-size:.9em;}
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]]; font-size:1em; font-family:arial,helvetica; margin:0; padding:0;}
a {color:[[ColorPalette::MainLinks]];}
a:hover {background-color:[[ColorPalette::Background]]; color:[[ColorPalette::MainLinkHover]];}
a img {border:0;}
.tuduSlider .button{ display: block; color: #eeeeff; text-align: left;
font-weight: bold;
border-top: solid 1px #bbb;
border-left: solid 1px #bbb;
border-right: solid 1px #888;
border-bottom: solid 1px #888;
background: #550099;
margin-left: -0.3em;
padding: 0 1px 1px 20px;
}
.tuduSlider .button:hover{
border-top: solid 1px #777;
border-left: solid 1px #777;
border-right: solid 1px #bbb;
border-bottom: solid 1px #bbb;
background: #888;
padding: 1px 0 0 21px;
}
h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::TiddlerTitles]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::HeadingLines]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::HeadingLines]];}
.button {color:[[ColorPalette::TiddlerButtons]]; border:0px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::TiddlerTitles]]; background:[[ColorPalette::Background]]; border-color:[[ColorPalette::Border]];}
.button:active {color:[[ColorPalette::TiddlerTitles]]; background:[[ColorPalette::Background]]; border:0px solid [[ColorPalette::Border]];}
.header {background:[[ColorPalette::HeaderBG]];}
.headerShadow {color:[[ColorPalette::HeaderShdw]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::]];}
.headerForeground {display: none; position:absolute; padding:2em 0 1em
1em; left:0px; top:0px;}
.headerForeground a {font-weight:normal; color:[[ColorPalette::HeaderFgrdLink]];}
.tabSelected{color:[[ColorPalette::Tabs]];
background:[[ColorPalette::Background]];
border-left:1px solid [[ColorPalette::Border]];
border-top:0px solid [[ColorPalette::Border]];
border-right:1px solid [[ColorPalette::Border]];
}
.tabUnselected {color:[[ColorPalette::TiddlerTitles]]; background:[[ColorPalette::Background]];}
.tabContents {color:[[ColorPalette::TabContent]]; background:[[ColorPalette::TabContentBG]]; border:1px solid [[ColorPalette::Border]];}
.tabContents .button {border:0;}
#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::Border]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::Background]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::MainLinks]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::MainLinkHover]]; background:[[ColorPalette::Background]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
.wizard {background:[[ColorPalette::Background]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::SecondaryDark]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::SecondaryDark]];
border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::Background]];}
.wizardFooter {background:[[ColorPalette::Background]];}
.wizardFooter .status {background:[[ColorPalette::Background]]; color:[[ColorPalette::PrimaryDark]];}
.wizard .button {color:[[ColorPalette::SecondaryDark]]; background:[[ColorPalette::Background]]; 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::Foreground]]; background:[[ColorPalette::Background]; border: 1px solid;
border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
.wizard .notChanged {background:[[ColorPalette::Background]];}
.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::SecondaryDark]];}
#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::TertiaryPale]];}
.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::Background]]; background-color:[[ColorPalette::Background]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::Background]]; border:1px solid [[ColorPalette::Border]];}
.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::Error]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}
.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
.imageLink, #displayArea .imageLink {background:transparent;}
.annotation {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]]; border:1px solid [[ColorPalette::Border]];}
.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:5px solid [[ColorPalette::SecondaryDark]]; 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::Background]];}
.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}
#backstageArea {background:[[ColorPalette::HeaderBG]]; color:[[ColorPalette::HeaderFgrd]];}
#backstageArea a {background:[[ColorPalette::HeaderBG]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::HeaderBG]]; 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)';}
/*}}}*/
/*{{{*/
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::SecondaryMid]]; border:0px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryPale]]; background:[[ColorPalette::Background]]; border-color:[[ColorPalette::Background]];}
.button:active {color:[[ColorPalette::PrimaryPale]]; background:[[ColorPalette::Background]]; border:0px 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:0px 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::Background]]; 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::Background]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::Background]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]]; 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::Background]]; 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::Background]; 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:5px solid [[ColorPalette::TertiaryLight]]; background:[[ColorPalette::Background]];}
.viewer code {color:[[ColorPalette::Background]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}
#backstageArea {background:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}
body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}
h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}
hr {height:1px;}
a {text-decoration:none;}
dt {font-weight:bold;}
ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}
.txtOptionInput {width:11em;}
#contentWrapper .chkOptionInput {border:0;}
.externalLink {text-decoration:underline;}
.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}
.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}
/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}
#mainMenu .tiddlyLinkExisting,
#mainMenu .tiddlyLinkNonExisting,
#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}
.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left: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:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}
#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}
.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}
.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
#displayArea {margin:1em 17em 0 14em;}
.toolbar {text-align:right; font-size:.9em;}
.tiddler {padding:1em 1em 0;}
.missing .viewer,.missing .title {font-style:italic;}
.title {font-size:1.6em; font-weight:bold;}
.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}
.tiddler .button {padding:0.2em 0.4em;}
.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}
.footer {font-size:.9em;}
.footer li {display:inline;}
.annotation {padding:0.5em; margin:0.5em;}
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}
.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding: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 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}
.fieldsetFix {border:0; padding:0; margin: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;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/*{{{*/
#tiddlersBar .button {border:0}
#tiddlersBar .tab {white-space:nowrap}
#tiddlersBar {padding : 1em 0.5em 2px 0.5em}
.tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}
.tiddler, .tabContents {border:0px [[ColorPalette::TertiaryPale]] solid;}
/*}}}*/
/***
|Name|SuppressEmptyTagsPlugin|
|Source|[[FND's DevPad|http://devpad.tiddlyspot.com/#SuppressEmptyTagsPlugin]]|
|Version|1.1|
|Author|FND|
|Contributors|[[Saq Imtiaz|http://tw.lewcid.org]], [[Eric Shulman|http://www.tiddlytools.com]]|
|License|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|N/A|
|Overrides|config.macros.tags.handler|
|Description|suppress tagged box when tiddler is untagged|
!Changelog
!!v0.5 (2007-06-11)
* initial release
!!v1.0 (2007-06-11)
* proper overriding of core function (thanks Saq)
* changed ~CoreVersion to 2.1 (from 2.2)
!!v1.1 (2007-06-11)
* further improved hijacking method (thanks Eric)
!Code
***/
//{{{
config.macros.tags.oldHandler = config.macros.tags.handler;
config.macros.tags.handler = function(place, macroName, params, wikifier, paramString, tiddler) {
if(tiddler.tags && tiddler.tags.length > 0)
this.oldHandler.apply(this, arguments);
else
place.style.display = 'none';
};
//}}}
/***
''Plugin:'' Tag Cloud Macro
''Author:'' Clint Checketts
''Source URL:''
!Usage
<<tagCloud>>
!Code
***/
//{{{
version.extensions.tagCloud = {major: 1, minor: 0 , revision: 0, date: new Date(2006,2,04)};
//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman
config.macros.tagCloud = {
noTags: "No tag cloud created because there are no tags.",
tooltip: "%1 tiddlers tagged with '%0'"
};
config.macros.tagCloud.handler = function(place,macroName,params) {
var tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);
var tags = store.getTags();
for (var t=0; t<tags.length; t++) {
for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";
}
if(tags.length == 0)
createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);
//Findout the maximum number of tags
var mostTags = 0;
for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
if (tags[t][1] > mostTags) mostTags = tags[t][1];
}
//divide the mostTags into 4 segments for the 4 different tagCloud sizes
var tagSegment = mostTags / 4;
for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);
tagCloudWrapper.appendChild(document.createTextNode(" "));
var theTag = createTiddlyButton(tagCloudElement,tags[t][0],this.tooltip.format(tags[t]),onClickTag,"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));
theTag.setAttribute("tag",tags[t][0]);
}
};
setStylesheet(".tagCloud span{height: 1.8em;margin: 3px;}.tagCloud1{font-size: 1.2em;}.tagCloud2{font-size: 1.4em;}.tagCloud3{font-size: 1.6em;}.tagCloud4{font-size: 1.8em;}.tagCloud5{font-size: 1.8em;font-weight: bold;}","tagCloudsStyles");
//}}}
<html><img src="images/talentshow.jpg" align="left" style="padding-right:10px; padding-bottom:10px" /></html>Firemaker's talent show happens towards the end of the gathering, and is a unique way to celebrate our time together and the individual gifts that we bring. It is also a way for everyone to share a part of themselves that may not have been revealed throughout the week! Past performances have included juggling, syncronised dancing, improv theatre, singing, music, clowning, bursting out of a vest with the sheer strength of gut force, etc. Come on out, enjoy the show, and bring your talent!
!Personal Items
''For each person attending, please bring:''
**a plate, cup, mug, bowl, and personal cutlery
**camping gear
**toiletries
**any necessary medications and other health necessities
**other personal items
**a [[volunteer spirit|Other Information]]
!Recommended Items
**flashlight
**anything you want to offer in the Giveaway
**swimwear
**sunscreen
**hat
**water bottle
**your own snacks (especially if you have any strict food preferences or food allergies/sensitivities!) -- Please see the [[Food]] section for more information on why we recommend this.
**hand tools for yourself and/or that you would be willing to share, for use in any wood-based workshops
**any herbal first aid items you would be willing to share with or donate to the [[First Aid Station]]
**a shovel or pick axe for helping dig out the pit for the [[Pit Cook]]
**mottled dark clothes, charcoal, etc. for the [[Firestalk]]
!Do NOT bring
**alcohol
**illegal drugs
**pets (except guide dogs)
!Please Note
As our instructors essentially volunteer their time and the cost of workshops is included in Firemaker, some workshops may require cash to pay for material components provided. If an instructor has a workshop that will have a fee, it will be posted here so you will know how much cash to bring if you want to take part in it.
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed.
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab = config.options.chkHideTabsBarWhenSingleTab ? config.options.chkHideTabsBarWhenSingleTab : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
config.macros.tiddlersBar = {
tooltip : "see ",
tooltipClose : "click here to close this tab",
tooltipSave : "click here to save this tab",
promptRename : "Enter tiddler new name",
currentTiddler : "",
previousState : false,
previousKey : config.options.txtPreviousTabKey,
nextKey : config.options.txtNextTabKey,
tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
handler: function(place,macroName,params) {
var previous = null;
if (config.macros.tiddlersBar.isShown())
story.forEachTiddler(function(title,e){
if (title==config.macros.tiddlersBar.currentTiddler){
var d = createTiddlyElement(null,"span",null,"tab tabSelected");
config.macros.tiddlersBar.createActiveTabButton(d,title);
if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
previous = "active";
}
else {
var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
btn.setAttribute("tiddler", title);
if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
previous=btn;
}
var isDirty =story.isDirty(title);
var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
c.setAttribute("tiddler", title);
if (place.childNodes) {
place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
place.insertBefore(d,place.firstChild);
}
else place.appendChild(d);
})
},
refresh: function(place,params){
removeChildren(place);
config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
story.refreshAllTiddlers();
if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
}
},
isShown : function(){
if (config.options.chkDisableTabsBar) return false;
if (!config.options.chkHideTabsBarWhenSingleTab) return true;
var cpt=0;
story.forEachTiddler(function(){cpt++});
return (cpt>1);
},
selectNextTab : function(){ //used when the current tab is closed (to select another tab)
var previous="";
story.forEachTiddler(function(title){
if (!config.macros.tiddlersBar.currentTiddler) {
story.displayTiddler(null,title);
return;
}
if (title==config.macros.tiddlersBar.currentTiddler) {
if (previous) {
story.displayTiddler(null,previous);
return;
}
else config.macros.tiddlersBar.currentTiddler=""; // so next tab will be selected
}
else previous=title;
});
},
onSelectTab : function(e){
var t = this.getAttribute("tiddler");
if (t) story.displayTiddler(null,t);
return false;
},
onTabClose : function(e){
var t = this.getAttribute("tiddler");
if (t) {
if(story.hasChanges(t) && !readOnly) {
if(!confirm(config.commands.cancelTiddler.warning.format([t])))
return false;
}
story.closeTiddler(t);
}
return false;
},
onTabSave : function(e) {
var t = this.getAttribute("tiddler");
if (!e) e=window.event;
if (t) config.commands.saveTiddler.handler(e,null,t);
return false;
},
onSelectedTabButtonClick : function(event,src,title) {
var t = this.getAttribute("tiddler");
if (!event) event=window.event;
if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
return false;
},
onTiddlersBarAction: function(event) {
var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
},
createActiveTabButton : function(place,title) {
if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
btn.setAttribute("tiddler", title);
}
else
createTiddlyText(place,title);
}
}
story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;
story.closeTiddler = function(title,animate,unused) {
if (title==config.macros.tiddlersBar.currentTiddler)
config.macros.tiddlersBar.selectNextTab();
story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
var e=document.getElementById("tiddlersBar");
if (e) config.macros.tiddlersBar.refresh(e,null);
}
story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
story.coreDisplayTiddler(config.macros.tiddlersBar.tabsAnimationSource,tiddler,template,animate,unused,customFields,toggle);
var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;
if (config.macros.tiddlersBar.isShown()) {
story.forEachTiddler(function(t,e){
if (t!=title) e.style.display="none";
else e.style.display="";
})
config.macros.tiddlersBar.currentTiddler=title;
}
var e=document.getElementById("tiddlersBar");
if (e) config.macros.tiddlersBar.refresh(e,null);
}
var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
refreshPageTemplate = function(title) {
coreRefreshPageTemplate(title);
if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
}
ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)
config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border:1px [[ColorPalette::TertiaryPale]] solid;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles);
config.refreshers.none = function(){return true;}
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");
//}}}
/***
|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.
!Demo
<<toggleSideBar "Toggle Sidebar">>
!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)
You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}
!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour.
*20-07-06: version 0.11
*27-04-06: version 0.1: working.
!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]&¶ms[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");
//}}}
/%
!info
|Name|ToggleSliders|
|Source|http://www.TiddlyTools.com/#ToggleSliders|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|toggle (expand/collapse) all sliders in a tiddler (or ID'd DOM element)|
Usage
<<<
{{{
<<tiddler ToggleSliders with: elementID expandlabel collapselabel>>
}}}
*''elementID'' is one of:
**"" (empty quotes) = the current tiddler
**''here'' = the current container
**''ID'' = specific DOM element ID (e.g., "mainMenu")
*''expandlabel/collapselabel'' (optional)<br>are alternative link text to display when sliders are closed (expandlabel) or opened (collapselabel)
<<<
Example
<<<
{{{
<<tiddler ToggleSliders with: "" "open all" "close all">>
}}}
with sample sliders:
{{{
<<slider chkExample ToggleSliders::slider1 Example1 Example1>>
<<slider chkExample ToggleSliders::slider2 Example2 Example2>>
Example1: |This is example slider 1|
Example2: |This is example slider 2|
}}}
<<tiddler ToggleSliders##show with: "" "open all" "close all">>
<<slider chkExample1 ToggleSliders::Example1 Example1 Example1>>
<<slider chkExample2 ToggleSliders::Example2 Example2 Example2>>
<<<
!end
!show
<html><a href="javascript:;" class="TiddlyLink" title="toggle sliders"
onclick="
if ('$1'=='here') var here=this.parentNode.parentNode.parentNode.parentNode; // container
else if ('$1'!='$'+'1' && '$1'.length) here=document.getElementById('$1'); // ID
else var here=story.findContainingTiddler(this); // tiddler
if (!here) return false;
var elems=here.getElementsByTagName('*');
var state=(this.innerHTML.toLowerCase()=='$2')?'none':'block';
for (var e=0; e<elems.length; e++) { var p=elems[e];
if (p.className!='sliderPanel' || p.style.display!=state) continue;
if (p.button) window.onClickNestedSlider({target:p.button}); // see NestedSlidersPlugin
else p.previousSibling.onclick();
}
this.innerHTML=state=='none'?'$3':'$2';
return false;
">$2</a><nowiki></html>
!end
%/<<tiddler {{ var src='ToggleSliders'; src+(tiddler&&tiddler.title==src?'##info':'##show')}}
with: [[$1]]
{{'$2'!='$'+'2'?'$2':'expand'}}
{{'$3'!='$'+'3'?'$3':'collapse'}}
{{'$4'!='$'+'4'?'$4':'toggle sliders'}}
>>
/%
!legal
|Name|TwitterTabs|
|Source|http://www.TiddlyTools.com/#TwitterTabs|
|Version|2.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|Find recent tweets by keyword or username and show results in tabs|
!end
- - - - - DO NOT EDIT ABOVE THIS LINE - - - - -
- - - - - TABSET SECTION - - - - -
!tabset
<<tabs txtTwitterTabs
'firemakerpss' 'show tweets from @firemakerpss' [[TwitterTabs##firemakerpss]]
>>
!firemakerpss
<<tiddler [[TwitterTabs##showUserResults]] with: firemakerpss>>
!end
- - - - - TWEETFORMAT SECTION - - - - -
reminder: %0=image, %1=name, %2=text, %3=timestamp
!tweetformat
@@font-size:12pt;display:block;line-height:150%;
~~[<img[%0]] ''[[%1|http://twitter.com/%1]] //%3//:''~~
%2 {{tagClear{
}}}@@
!end
- - - - - DO NOT EDIT BELOW THIS LINE - - - - -
!info
<<tiddler TwitterTabs##legal>>Usage
<<<
{{{
<<tiddler TwitterTabs>>
}}}
<<<
Configuration
<<<
Copy TwitterTabs into your document. Then, ''edit the tiddler to suit your preferences'' by adding/removing definitions from the ''tabset'' and related sections:<<tiddler TwitterTabs##showcode with: tabset>><<tiddler TwitterTabs##showcode with: tiddlytools>><<tiddler TwitterTabs##showcode with: jermolene>>You can also customize the appearance of the individual tweets by editing the ''tweetformat'' section, which uses //replacement markers// to insert values extracted from each tweet returned by Twitter's search results, where ''%0=user image, %1=user name, %2=tweet content,'' and ''%3=tweet timestamp''<<tiddler TwitterTabs##showcode with: tweetformat>>The most recently entered 'find... and 'from... search terms are automatically saved as TiddlyWiki cookie-based option values. You can override these values by placing the following statements into a tiddler tagged with 'systemConfig'. Each time you reload your document, the default inputs will be reset to these hard-coded values, rather than using the last value entered.
{{{
config.options["txtTweetSearch"]="search text";
config.options["txtTweetUser"]="username";
}}}
!showcode
<<tiddler TwitterTabs##out with: {{'!$1\n'+store.getTiddlerText('TwitterTabs##$1').replace(/\n\}\}\}/g,'\n}\}\}')}}>>
!out
{{{
$1
}}}
!end
!search
<<tiddler [[TwitterTabs##showSearchForm]] with: {{config.options.txtTweetSearch||'TiddlyWiki'}}>>
!user
<<tiddler [[TwitterTabs##showUserForm]] with: {{config.options.txtTweetUser||'TiddlyWiki'}}>>
!end
!showSearchForm
{{small smallform{
search for tweets containing: <<option {{config.options.txtTweetSearch='$1';'txtTweetSearch'}}>><html>
<nowiki><input type='button' value='search' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='\<\<tiddler [[TwitterTabs##showSearchForm]] with: {{config.options.txtTweetSearch}}\>\>';
removeChildren(target); wikify(out,target); return false;
"></html>@@display:block;white-space:normal;<<tiddler [[TwitterTabs##showSearchResults]]
with: {{config.options.txtTweetSearch}}>>@@}}}
!end
!showUserForm
{{small smallform{
show tweets from: <<option {{config.options.txtTweetUser='$1';'txtTweetUser'}}>><html>
<nowiki><input type='button' value='search' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='\<\<tiddler [[TwitterTabs##showUserForm]] with: {{config.options.txtTweetUser}}\>\>';
removeChildren(target); wikify(out,target); return false;
"></html>@@display:block;white-space:normal;<<tiddler [[TwitterTabs##showUserResults]]
with: {{config.options.txtTweetUser}}>>@@}}}
!end
!showSearchResults
<<tiddler TwitterTabs##callback>>{{toolbar{<html><a href='javascript:;' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='<<tiddler [[TwitterTabs##showSearchResults]] with: [[$1]]>>';
removeChildren(target); wikify(out,target); return false;
">refresh</a><nowiki></html>}}}~~__[[Recent tweets about: "$1"|http://search.twitter.com/search?q=$1]]__~~
<hr>@@display:block;height:20em;overflow:auto;<<tiddler {{
window.twitterPlace=null;
'';}}>><<tiddler {{
if (!window.twitterPlace) { window.twitterPlace=place;
place.innerHTML='connecting to twitter.com...';
var s=document.createElement("script");
s.src="http://search.twitter.com/search.json?q=$1&rpp=25&callback=twitterCallback";
document.body.appendChild(s);
document.body.removeChild(s);
}
'';}}>>@@@@display:block;text-align:right;^^scroll for more...^^@@
!end
!showUserResults
<<tiddler TwitterTabs##callback>>{{toolbar{<html><a href='javascript:;' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='<<tiddler [[TwitterTabs##showUserResults]] with: [[$1]]>>';
removeChildren(target); wikify(out,target); return false;
">refresh</a><nowiki></html>}}}~~__[[Recent tweets from $1|http://twitter.com/$1]]__~~
<hr>@@display:block;height:20em;overflow:auto;<<tiddler {{
window.twitterPlace=null;
'';}}>><<tiddler {{
if (!window.twitterPlace) { window.twitterPlace=place;
place.innerHTML='connecting to twitter.com...';
var s=document.createElement("script");
s.src="http://twitter.com/statuses/user_timeline/$1.json?callback=twitterCallback";
document.body.appendChild(s);
document.body.removeChild(s);
}
'';}}>>@@@@display:block;text-align:right;^^scroll for more...^^@@
!end
!callback
<<tiddler {{
window.twitterCallback=function(data){ // data object returned from twitter.com
var fmt=store.getTiddlerText('TwitterTabs##tweetformat');
if (data.results) data=data.results; // for SEARCH results
removeChildren(window.twitterPlace);
for (var i=0; i<data.length; i++) { var item=data[i];
var img=item.user? item.user.profile_image_url : item.profile_image_url;
var who=item.user? item.user.screen_name : item.from_user;
wikify(fmt.format([img,who,item.text,item.created_at]),window.twitterPlace);
}
}
'';}}>>
!end
%/<<tiddler {{tiddler&&tiddler.title=='TwitterTabs'?'HideTiddlerBackground':''}}>>/%
%/<<tiddler {{tiddler&&tiddler.title=='TwitterTabs'?'HideTiddlerTags':''}}>>/%
%/<<tiddler TwitterTabs##tabset>>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></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='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>
<!--}}}-->
There are many tasks that you can help with to support the Firemaker gathering and the efforts of the council. If you can help with any of them, please let us know at the gathering, or prior to the gathering by [[emailing us|Contact Us]]. If you email us prior to September 2011, please note that we may not be ready to get back to you about volunteering until some time in September. Most volunteer tasks that occur during the gathering will be announced at the gathering.
!Before the Firemaker Gathering
**donating food and/or supplies
**finding food donations/deals (especially if you have any connection to a grocery store or food co-op)
**helping to cook in advance at Community Kitchen events
**making signs, setting them up
**assembling/organizing the Info Binder, feedback forms, and community message notebook
**preparing the site before the event
**website upkeep
**fundraising
**archiving (scanning documents into Dropbox)
**catching fish for the [[Pit Cook]]
!During the Firemaker Gathering
**welcoming arrivals, helping with registration
**updating whiteboards with new workshop information
**site walkthroughs to pick up litter & forgotten items
**cooking
**kitchen clean-up
**bathroom clean-up
**watching over the children's tent (if there is one in a given year)
**being the Timekeeper (see below)
**being the First Aid Coordinator (see below)
**collecting firewood, fire-pit maintenance
**leading songs
**storytelling
**leading games & other activities
**cleaning up the site after Firemaker
**catching fish for the [[Pit Cook]]
!Being the Timekeeper
We need a person who always has a watch (rare among us, we know) and is willing to do call outs for all the meals and circle-up throughout the week. There is a 10 minute call out, a two-minute "come on in" call out, and a "circle up" call out for 3 meals and 2 circles per day. This is a very important job as it makes sure everything runs on time and we get to spend as much time as possible with our wise instructors and that we get to the food as soon as possible!! If you are interested in being the Timekeeper, please [[contact us|Contact Us]]. Thank you!
!Being the First Aid Coordinator
We need a person with First Aid training who is willing to be the contact person for all first aid matters. This would involve finding out who has First Aid training at the gathering, asking a few people each day to be the First Aid "go-to people" for the day, and pointing them out in [[Circle]] every morning. This job does not mean you are the designated First Aid person every day for the whole gathering. We just need someone who can coordinate first aid people each day. You will also know where all the first aid equipment is and let the other first aiders know where it is. If you are interested in being the First Aid Coordinator, please [[contact us|Contact Us]]. Thank you!
!Firemaker Gathering
We will continue to update the website with new information about the 2012 Firemaker gathering as it is available.
''Last Website Update:'' October 28, 2011
!Website Information
Please take the time to explore our website for plenty of information on most of the questions you might have! If you still have a question you can't find the answer to, feel free to [[contact us|Contact Us]].
This website is actually a [[TiddlyWiki|http://www.tiddlywiki.com]], and is a bit different than most websites (or even other wikis) you have visited. You might end up wanting some [[wiki help|??? Wiki Help]] or some [[navigation help|Navigation Help]]. The site was built and meant to be viewed in [[Firefox|http://www.mozilla.com/en-US/firefox/fx/]], but should be fully viewable and workable in any browser. If you have any trouble with the website or notice any errors or issues, please [[contact us|Contact Us]].
!Latest News
''Twitter Feed:'' [[FiremakerPSS|TwitterTabs]]
''October 28th:'' Leave some feedback about your [[experience at Firemaker|Quotes]] or let our Instructors know [[what workshop you'd like to take in 2012!|Workshop Information]]
''July 13th:'' The 2011 gathering was super awesome! Thanks so much to everyone who helped in any way! We love you!
''June 9th:'' Keep checking out the [[Workshop Information]] for what is being offered this year. We're updating regularly!
''May 18th:'' The new website has gone live! Here you are!
This portion of the website is still under construction. Thanks for your patience!
!Please Note
All workshops and any ceremonies offered at Firemaker are on an opt-in only basis. All workshop Instructors are asked to share their background and experience in what they are offering (who they learned it from, where they learned it, self-taught, etc.) so that all potential participants can feel comfortable choosing for themselves if an Instructor's workshop is right for them.
!Workshops for Children 2012
//Workshops will be posted here as they are confirmed. All workshops are subject to change.//
!Workshops for Adults 2012
//Workshops will be posted here as they are confirmed. Underlined workshops are All Ages. All workshops are subject to change.//
!Requested Workshops 2012
//Leave a comment here for the Instructors, letting them know which workshops you'd like to take! Please be aware that your request does not guarantee that the workshop requested will be available.//
☆☆☆
//If you wish to leave a comment and have yet to set your username, you will be prompted to do so. No password or account is necessary. Your username will be stored in a cookie, for the purposes of leaving comments only. //
+++^40em^[Request a Workshop]...
<<moveablePanel>>Request a Workshop ✉
----
<<setUserName force>>
<<comment here "" "+++!!!!![%when% (%who%): %subject%]>...\n%message%\n===\n">>===
| <<tiddler ToggleSliders with: here "view all" "close all">>
!Please Note
All workshops and any ceremonies offered at Firemaker are on an opt-in only basis. All workshop Instructors are asked to share their background and experience in what they are offering (who they learned it from, where they learned it, self-taught, etc.) so that all potential participants can feel comfortable choosing for themselves if an Instructor's workshop is right for them.
!Workshops for Children 2012
//Workshops will be posted here as they are confirmed. All workshops are subject to change.//
!Workshops for Adults 2012
//Workshops will be posted here as they are confirmed. Underlined workshops are All Ages. All workshops are subject to change.//
!Past Workshops From Previous Gatherings
Each year, the [[Firemaker]] gathering has hosted different [[workshops|Workshop Information]]. While we cannot guarantee which workshops or Instructors will be at the next gathering, here is a sampling of workshops from previous years:
!!!Children's Workshops
//For all-ages workshops, see the asterisked items in the Adult Workshops list below. There are some duplicates on the two lists, as some workshops have been offered specifically for children, as well as being offered for all-ages.//
Animal Ecology
Awareness Games
Berry Blast
Bow Making
Cedar Bark Weaving
Clay for Kids
Cordage Making
Dreamcatcher Making
Folktale Theater
Kids' Crafts
Leaf Rubbings
Making a Puppet Show
Making Herbal Tea
Medicine Bag Making
Nature Games / Learning Plants
Nature Hunt
Paper Making from Natural Materials
Plant Walk
Quiet Walk, Still Hunting
Shelter Building
Soapstone Carving
Storytelling & Activities
Swamp Adventure
Wild Food Feast
Wild Games
Wild Sensitivity, Awareness
Wild Treasure Hunt
Willow Basketry
Wolf Pups
Yoga ABC
!!!Adult and ~All-Ages Workshops
//Workshops with an asterisk after them indicate all-ages or children were invited if accompanied by an adult. //
Abobabies: Natural Child Birth and Care of Infants
Animal Processing*
Awareness: Paying Attention
Awareness and Sensory Games
Balancing
Bark Baskets*
Basic Needle Felting
Bird Language*
Bow Drill Fire*
Bow Making (5 part series)*
Brain Tanning*
Carving Westcoast Native Plaques*
~Child-Directed Learning for Real Life*
Circle Song
Coil Baskets*
Coming Home to the Wild: Survival Intro
Communion Through Communication
Cordage Making*
Coyote Mentoring, Drum Dancing
Dance*
~Diaper-Free Babies
Didgeridoo
Direct Communication with Plants*
Discovering Wild Plants
Discussion about Birth and Birthing Support
Discussion about Cultural Appropriation
Discussion about Postpartum Mothers' needs & Experience
Drum Stalk
Earth Awareness*
Ecology of Eating: Instinctive Eating*
Edible Ecosystems: Forest Gardening and Wild Nurturing*
Edible Insects*
Emergency Survival
Expanding Physical Awareness: Sensing, Moving and Being in the Woods
Exploring Special Places in the Woods*
Fermented Foods
Fertility Awareness
Fire from Sticks*
Fish Spear Making*
Flute Making
Flute Playing
Folded Bark Baskets*
Food: Ancient Ways of Relating to Food
Food Preservation Discussion*
Four Gifts of a Man
Four Gifts of a Woman
Freedom: Following your Rhythm
Gifts of Gender Fluidity
Healing Circle*
Herbal Medicine Making
Hide Tanning
Honouring our Elders*
Hunting & Food Ethics*
Improvisation as a Tool for ~Community-Building
Joy of Living
Knitting
Leather Sling Making*
Looking at West Coast Native Art
Mantracking
Mapping
Medicine Wheel
Mindfulness Meditation
Miniature Cob: Creating your own Miniature Cob Structure*
Mocassins*
Moon Time Awareness with Moon Staff Making
Natural Farming/Gardening*
Natural Navigation*
~Non-Violent Communication: Introduction
~Non-Violent Communication / Empathy & the Tree of Life Model
~Non-Violent Communication / Parenting
Paleo/Ancestral Diet and Food Ethics*
Pit Cooking*
Plant Walk*
Plaque Carving
Pottery
Preparing a Wild Plant Meal*
Primitive Cooking*
Rendering Fat & Making a Salve with it
Salves & Tinctures*
Sauerkraut Making
~Save-Your-Endangered-Language Games
Seeds / Seed Bombs
Sharpening
Simplicity, Silence, and Prayer
Survival Trapping
Tool Making: Crooked Knives
Tracking
Trail Running
Yoga for Singles or Partners
Yoga to Greet the Day
Way of the Caretaker: Indigenous and Natural Way of Tending the Wild
Way of the Shadow
Wild Gathering & Medicine Making*
Wild Wander: Living Like a Creature*
Wildlife Signs & Tracking
Willow Basketry (5 part series)
Wisdom of Conscious Relationship
Wool Felting
Yogurt
24-hour Solo Quest: Introduction to Solo Quest; Solo Preparation & Going Out; Solo Return
Please see:
[[Things to Bring]]
[[Safety Culture]]