Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
<html><embed src="http://www.metacafe.com/fplayer/961122/diy_motorcycle_camera_mount.swf" width="400" height="345" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed><br/><font size="1">
<a href="http://www.metacafe.com/watch/961122/diy_motorcycle_camera_mount/">DIY Motorcycle Camera Mount - video powered by Metacafe</a></font></html>
[[12 Waterproof Motorcycle Boots compared - Accessories & Gear - Motorcycle Cruiser|http://www.motorcyclecruiser.com/accessoriesandgear/waterproof_motorcycle_boot_comparison/index.html]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/3jlzKWAnQzI&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/3jlzKWAnQzI&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
[[2strokebuzz|http://2strokebuzz.com/index.php]]
[[50 Ways to Save Your Life - Motorcyclist Magazine|http://www.motorcyclistonline.com/howto/122_0608_50_ways/index.html]]
[[ADV Inmate Reviews - Tents/Tarps/and Hammocks - Page 3 - ADVrider|http://www.advrider.com/forums/showthread.php?p=6723177#post6723177]]
Hi there!
This is my scrapbook of links to (hopefully) useful stuff that I've been collecting while starting out as a noob rider. A lot of it is specific to the Greater Toronto Area (GTA) and Ontario, but there's also plenty of general stuff. Naturally it's short on stuff like track information because I know zip about it—maybe later eh?
The idea is to use this TiddlyWiki as a starting template and customize the heck out of your own personal copy.
*Feel free to make copies, mirrors, make your own additions and deletions, whatever. [[Mod it like you stole it!|Copyrights and things]]
*If I list them, it doesn't mean that they're good. If I didn't it doesn't mean that they're bad. [[Caveat emptor!|http://en.wikipedia.org/wiki/Caveat_emptor]]
*"Why didn't you include xxxx?" //Oops!// Add it to your own copy.
*Pet peeve: Bike shops that have their hours and location in an image on their site, so I can't copy/paste. How are the search engines supposed to find you?
!!!Edit your own copy
*Right-click on [[this link|http://home.primus.ca/~ronsharp/BikeWiki.html]] and ''Save Link as...'' (Firefox) or ''Save Target As...'' (IE) to your drive. (You can't save this running copy with File/Save As because it's full of moving parts.)
!!!Feedback
Any suggestions, bouquets or brickbats, let me know - [[Ron Sharp|mailto:androidcat98@hotmail.com?subject=MyBikeWiki Feedback]]
[[ADVrider - Powered by vBulletin|http://www.advrider.com/forums/]]
[[Aerostich/RiderWearHouse Motorcycle Jackets, Suits, Clothing, & Gear|http://www.aerostich.com/home.php]]
[[After an Accident: Understanding the Claims Process - GTA Motorcycle.com|http://www.gtamotorcycle.com/vbforum/showthread.php?t=23849]]
<nowiki>gear</nowiki>
Source: [[All About Motor Oil|http://motorcycleinfo.calsci.com/Oils1.html]]
[[One Goal. One Vision. : Alpinestars Inc.|http://www.alpinestars.com/]]
[[America's Premiere YZF600R Web Source|http://www.yzf600r.com/]]
[img[Mine!|http://i65.photobucket.com/albums/h233/RogerRamdrive/LPIC0126-1.jpg]] Kymco B&W 250 scooter
[[Anti Monkey Butt Powder|http://antimonkeybutt.com/]]
[img[T-shirt|http://antimonkeybutt.com/prodimages/chopper_shirt.jpg]]
[[Aprilia.com|http://canada.aprilia.com/]]
[[Arai Helmets|http://www.araiamericas.com/]]
[[Atelier Motosport|http://www.ateliermotosport.com]]
[[Used BIKES Ontario : Auto Trader Used BIKES|http://www.trader.ca/search/results.asp?region=-1&category=4&CAT=4&subcategory=404&BCAT=4&BOREGION=-1&BFROM=1]]
[[BULA, 25 years of living the good life - Weather Station|http://www.bulabula.com/index.php?option=com_virtuemart&page=shop.browse&category_id=13&Itemid=28]] Neck gators and stuff for cold
[[Ontario stores|http://www.bulabula.com/index.php?option=com_content&task=category§ionid=15&id=70&Itemid=206]]
*[[Wax jackets|http://www.barbour.com/index.cfm?fuseaction=products.list&RangeID=1&PCategoryID=23]]
[[Bass Pro Shops|http://www.basspro.com/webapp/wcs/stores/servlet/CFPageC?storeId=10151&catalogId=10001&langId=-1&appID=94&storeID=11]]
!!!Address
1 Bass Pro Mills Drive
Vaughan, ONT ~L4K 5W4
Phone: 905 761 4000
GPS Coordinates:
43.8249ºN, 79.5437ºW (WGS84/NAD83)
!!!Regular Store Hours
Mon - Sat 9:00 AM - 10:00 PM
Sun 10:00 AM - 7:00 PM
[[Battlescooter - Base|http://battlescooter.com/index.html]]
[[Bayside Performance, Source for 06 Yamaha Honda Suzuki Kawasaki Exhaust Turnsignals Seat Cowl's for YZF R1 R6 CBR600RR CBR 1000RR GSXR 600 750 1000|http://www.baysideperformance.com/index.php?main_page=index&zenid=8f376c750a2e03fa859918c18a2fca23]]
>BANGERS N' MASH PRESENT BEANS ON TOAST
>TORONTO(ish) Scooter Rally 2009 -- Aug 7-8-9, 2009
*http://www.bangersnmash.info/
*http://www.trca.on.ca/Website/TRCA/ParksAndCulture/website.nsf/Webpage/trca__parks_and_culture__locations__albion_hills__visitorinfo__visitorinfo?OpenDocument&Language=EN
[[Bike Friendly Ontario Insurance People [2008 edition!] - GTA Motorcycle.com|http://www.gtamotorcycle.com/vbforum/showthread.php?t=50883]]
[[Bikers Dream - Harley Davidson Specialists|http://www.bikersdream.ca/index2.html]]
[[Blue Streak Racing motorcycle and motorcycle parts|http://www.bluestreakracing.ca/]]
[[Bohn Body Armor - Profound Protection for Motorcyclists|http://www.bohnarmor.com/catalog/products.php?id=18]]
[[Break In Secrets--How To Break In New Motorcycle and Car Engines For More Power|http://www.mototuneusa.com/break_in_secrets.htm]]
>Warning: This is a very controversial topic !!
[[Bridal Veil Falls|http://www.gowaterfalling.com/waterfalls/bridalveilmanitoulin.shtml]]
>Bridal Veil Falls is on Manitoulin Island. It is actually another Niagara Escarpment waterfall. The waterfall is easy to find, and easy to visit. It is in a small park just off of Hwy 540 in Kagawong, about 34 km from the bridge to Manitoulin.
[[britishmotorcyclegear.com - British Motorcycle Gear|http://www.britishmotorcyclegear.com]]
Under construction
Weird, they seem to have switched to black on black only...? WTF?
[img[British Motorcycle Gear|http://www.britishmotorcyclegear.com/images/jackets/disco_silver.jpg]]
[[Discovery Jacket|http://www.britishmotorcyclegear.com/discovery-jacket.asp]] (formerly Belstaff)
*Knox shoulder, elbow and back armor exceeds European Standards for CE
*Hitena twisted nylon and 500 Denier Dupont Cordura. Duratec fabric reinforcement patches.
*Thermolite quilted inner liner with two hand warmer pockets.
!!!Contact
British Motorcycle Gear
1-800-432-9004
sales@BritishMotorcycleGear.com
[[Bruce Trail Conservancy|http://www.brucetrail.org]]
[[Green Extreme - Buff Headwear|http://www.buffcanada.com/]]
>Performance: Original Buff®, made from 100% polyester microfibre, is designed to quickly wick, absorb and evaporate moisture. Microfibre is also breathable, wind resistant, and performs as an insulator that keeps you warm in the winter and cool in the summer.
[[Welcome to Burlington-Cycle.com!|http://www.burlington-cycle.com/]]
[[BusaNation.com|http://www.busanation.com/cmps_index.php]]
>This portal is your go-to-site to share stories, experiences, pics and to seek out technical and support information for the Suzuki Hayabusa GSX1300R GenI and the 2008 GenII Hayabusa.
[[Buying and Selling a Used Vehicle in Ontario|http://www.mto.gov.on.ca/english/dandv/vehicle/used.htm]]
>By Ontario law, private sellers of most motor vehicles, including motorcycles, must provide buyers with a Used Vehicle Information Package. This package guides you through the process of buying or selling and helps you understand your rights and responsibilities.
[[CBR250.com|http://www.cbr250.com/cbr250/]]
>CBR site dedicated to the Japanese Domestic Market 250 & 400cc models
>Welcome to ~CBR250.com, a motorcycling community based around Honda's Japanese domestic market models.
[[CBXManMotorcycles.com - Motorcycle Apparel & Motorcycle Accessories|http://www.cbxmanmotorcycles.com/]]
[[CMG Online - Canada's Online Motorcycle Magazine|http://www.cmgonline.com/index.html]]
Freeway Traffic Management System
Source: [[COMPASS Freeway Traffic Management System|http://www.mto.gov.on.ca/english/traveller/compass/]]
[[COMPASS Traffic Cameras - Highway 401 (Toronto)|http://www.mto.gov.on.ca/english/traveller/compass/camera/camhome.htm]]
(Copy for each trip and check-off)
{{autocolumns{
!!!Scooter
*[_] General inspection
*[_] Gear tail bag and sidebags
*[_] Cargo net and bungee cords (extras)
*[_] Pressure gauge
*[_] Tire pump (longer trips)
*[_] Bike toolkit
*[ ] Disk lock/alarm
*[ ] Battery to cigarette lighter rig
*[ ] Tire gunk
*[ ] CAA Plus 200 km towing
!!!Wear (mainly in backpack)
*[ ] Riding jacket
*[ ] Riding boots
*[ ] Riding pants
*[ ] Jeans
*[ ] Jacket themal liner
*[ ] Shorts 1 pair
*[ ] T-shirts worn + 2
*[ ] Underwear worn + 2
*[ ] Socks worn + 2
*[ ] Bathing suit
*[ ] Towel
*[ ] Emergency rain poncho
*[ ] Pocket watch
!!!Camping
*[ ] Tent
*[ ] Tent footprint
*[ ] Pegs for tent, sheet
*[ ] Sleeping bag
*[ ] Sleeping pad / air mattress
**[ ] Pump for air mattress
*[ ] Pillow
*[ ] Tarp/sheet for rain shelter (bungee between scooter and tent)
*Lighting:
**[_] Flashlight, general
**[_] Head light
**[ ] Spare batteries
**[ ] Tea light candles
**[ ] Light sticks
**[ ] Solar garden light
*[ ] Waterproof matches
*[ ] Lighter and spare
*[ ] Multitool
*[ ] Camp stools x 2
*[ ] Camp table (flip as wash sink with garbage bag)
*[ ] Solar shower bag, warm water heater.
!!!Cooking
*[ ] Cook stove & fuel (1 qt Coleman fuel)
**[ ] Fuel funnel
*[ ] Cookwear (2 pots, pan, covers.)
*[ ] 9" skillet.
*[ ] Plastic cup (with measurements)
*[ ] Bowl, plates
*[ ] Knife, fork, spoon
*[ ] Spatula
*[ ] Larger stir spoon
*[ ] Food prep knife
*[ ] Sauces
*[ ] Spices, salt
*[ ] Cooking oil
*[ ] Coffee, sugar, filters.
*[ ] Can opener
*[ ] Swiss Chalet plastic cutlery guest sets
!!!Kitchen and laundry
*[ ] Clothesline (mainly for towel)
*[ ] Cleaning pads
*[ ] Tea towels
*[ ] J-cloths
*[ ] Detergent/dishwash
*[ ] Cooler bag
**[ ] Freezer pack
*[ ] Grocery bag
*[ ] Collapsible water bag
*[ ] Aluminum foil
*[ ] Twist-ties
*[ ] Plastic bags, for trash.
*[ ] Extra Ziploc bags
*[ ] Garbage bags
!!!Personal
*[ ] Toilet kit bag
**[ ] Razor and spares
**[ ] Shaving soap and balm
**[ ] Toothpaste (don't keep in tent)
**[ ] Toothbrush
**[ ] Deodorant
**[ ] Shampoo, soap
**[ ] Tiger Balm (also for smelly washrooms)
**[ ] Mirror.
*[ ] Spare TP.
!!!Medicine chest
*[ ] First-aid kit (small)
**[ ] Tensor bandages
*[ ] Bug repellant
*[ ] Suncreen
*[ ] Solarcane
*[ ] Tylenol
*[ ] Vitamins (n days)
*[ ] Patches
*[ ] Wet-wipes.
!!!Toys
*[ ] GPS (with route prepped)
*[ ] Palm PDA
*[ ] Camera
*[ ] AM/FM/Weather/Flashlight crank radio
*[ ] Cellphone
*[ ] Cables for charging toys.
!!!Other
*[ ] USB charger for GPS, Palm (car lighter)
*[ ] USB hub solar charger
*[ ] General gloves
*[ ] Duct tape
*[ ] Zip-ties
*[ ] Do not disturb sign
}}}
My rough planning list for the [[Beans on Toast Scooter Rally]].
*[[Route|http://maps.google.ca/maps?f=d&source=s_d&saddr=144+Hillsview+Dr,+Richmond+Hill,+ON,+Canada&daddr=Albion+Hills+Conservation+Area%E2%80%8E&hl=en&geocode=FfNTnQIdgh5E-ylDJSogBysriDF1uZYyS2liOQ%3BFQJCngIdLvw9-yEQWznoPraeMA&mra=ls&dirflg=h&sll=43.904324,-79.429779&sspn=0.381433,0.891953&ie=UTF8&t=h&z=12&lci=org.wikipedia.en]]
*Backpack
*Gears Canada [[Navigator tail bag|http://www.gearscanada.com/products/details/83/7/navigator-tail-bag.html]]
*Cloth bag webbed over tailbag.
*Under the seat storage
+++[Gear]
{{autocolumns{
!!!Bike
*@@Gear tail bag and backpack@@ (spray seams)
*@@Net and cords (extras)@@
*--Reserve fuel (no need on short trips)--
*@@color(red):Bicycle cable lock for jacket@@
*@@Pressure gauge@@
*Tire pump (long trips) plus adapter for air mattress.
*@@Bike toolkit@@
*@@Disk lock/alarm@@
*Battery to cigarette lighter rig
*--Light jumper cables?--
*Tire gunk
*--Socket for oil plugs?--
*@@CAA Plus 200 km towing@@
!!!Wear (mainly in backpack)
*@@Jacket@@
*@@Hiking boots@@ (spray)
*@@Jeans@@ worn
*@@Jacket liner@@ (tail bag)
*@@Shorts@@ 1 pair
*@@T-shirts@@ worn + 2
*@@Underwear@@ worn + 2
*Socks worn + 2
*@@Bathing suit@@
*@@Towel@@
*@@Emergency poncho@@
*Fanny pack (for Palm, spare keys and paperwork)
*@@Pocket watch@@
!!!Camping
*@@Tent@@
*@@Sleeping bag@@
*@@Sleeping pad (self-inflating)@@
*@@Pillow@@
*@@Ground sheet@@
**@@Pegs for sheet@@
*Lighting: @@flashlight, general@@
**@@Spare batteries@@
***@@3 x AAA for small flashlight.@@
***@@3 x C for lantern.@@
***2 x D for large flashlight.
***@@2 x AA for camera.@@
**@@Tea light candles@@
*@@Light sticks@@
*@@Waterproof matches@@
*@@Lighter and spare@@
*@@Multitool@@
*@@Cutting knife@@
*@@Camp chair. (Light, packs small, not fancy$)@@
**@@[[Bass Pro Shops]] [[GCI Xpress Lounger|http://www.gcioutdoor.com/quike.html]]@@
!!!Cooking
*@@Cook stove & fuel (1 qt Coleman fuel)@@
**@@Funnel@@
*@@Cookwear@@
*@@9" skillet.@@
*@@Plastic cup (with measurements)@@
*Bowl, @@plates@@, --or bring scout mess kit--
*@@Cook accessories:@@
**@@knife, fork, spoon@@
**@@spatula@@
**@@larger stir spoon@@
**--@@cutting board@@--
*@@Cleaning pads@@
*@@J-cloths@@
*Sauces
*@@Spices, salt@@
*@@Cooking oil@@
*@@Coffee, sugar, filters.@@
*Food prep knife
*@@Tea towels@@
*Can opener
!!!Personal (backpack)
*@@Toilet kit bag@@
**@@Razor and spares@@
**@@Shaving soap and balm@@
**@@Toothpaste@@
**@@Toothbrush@@
**@@Deodorant@@
**@@Shampoo, soap@@
**@@Tiger Balm@@ (for smelly washrooms)
**Mirror.
!!!Medicine chest
*@@First-aid kit (small)@@
*@@Bug repellant@@
*@@Suncreen@@
*@@Solarcane@@
*@@Tylenol@@
*@@Vitamins (n days)@@
*@@Patches@@
!!!Toys
*@@GPS@@
*@@Palm@@
**Park map ~PDFs
*@@Camera@@
*@@AM/FM radio@@ (Old one?)
!!!Other
*@@USB charger for GPS, Palm (car lighter)@@
*@@Camera@@
*@@Clothesline (mainly for towel)@@
*@@Detergent/dishwash@@
*@@Cooler bag@@
**@@Freezer pack@@
*@@General gloves@@
*@@Garbage bags@@
*@@Twist-ties@@
*@@Extra Ziploc bags (double seal)@@
*@@Duct tape@@
*@@Grocery bag@@
*@@Collapsible water bag@@
*@@Zip-ties@@
*Plastic bags, for trash.
*Do not disturb sign
}}}
===
+++[Camping food (grocery bag)]
{{autocolumns{
!!!!Weekender: 2 breakfasts, 2+ lunches, 2 diners.
!!!!!Friday dinner
*@@''Prepped Ziploc'' Steak (marinading in Ziploc/cooler bag, then freeze Thursday night)@@
*@@Onion@@
*@@Corn on cob@@
!!!!!Saturday breakfast
*@@Coffee@@
*@@''Prepped Ziploc'' Pancakes@@
*@@Bacon (cooler bag)@@ / sausages / pancetta
!!!!!Saturday lunch
*@@''Prepped Ziploc'' Pasta (with sauce packet)@@
*@@Dry sausages@@
*@@Onion@@
!!!!!Saturday dinner
*@@Dry sausages@@
*@@Onion@@
*Celery
*@@Rice & wild rice (in Ziploc)@@
*@@Dried mushrooms@@
*@@Dried tomatoes@@
*@@Onion soup mix@@
!!!!!Sunday breakfast
*@@Coffee@@
*''Prepped Ziploc'' [[Raisin pan bread|http://www.garlicsoftware.com/node/156]]
*@@Bacon (cooler bag)@@ / sausages
!!!!!Sunday lunch
*@@''Prepped Ziploc'' Pasta (with sauce packet)@@
*@@Dry sausages@@
*@@Onion@@
!!!!Other
*Cheese?
*@@color(red):Gatorade and mix@@
*Ramen (or other in-between meal food)
**@@Spam (the dwarven bread of meat products)@@
}}}
===
+++[Ops]
{{autocolumns{
!!!Schedule
!!!!Thursday night
*Spray boots & shoes
*@@Pack tail bag and backpack. (Except for food.)@@
*@@Prep steak in Ziploc.@@
*@@Freeze bacon.@@
*Ziplocs prepped:
**@@Pancake mix x 2@@
**@@Pasta and sauce x 2@@
**@@Rice and sauce x 2@@
**@@Pan raisin bread x 1@@
**@@Pan bread plain x 1@@
!!!!Friday
*Check tires.
*Pack food.
*Leave around 1ish?
*Gas up.
*Get there 3ish. (Set up chair.)
*Check in and set up tent, pad, sleeping bag.
*Haul water.
*Prep for dinner around 7pm.
!!!Items to secure
*Spare keys, wallet, paperwork, cash.
*Palm, GPS and camera.
*Coleman stove.
*Jacket.
*Mark name and license on stuff.
!!!Cooler stuff
*Steak to Friday night
*Butter sticks.
*Bacon
*Cheese?
*Sausages if room.
*Freezer pack
!!!Grocery list
*@@1 large onion.@@
*@@Dry sausages.@@
*@@Steak.@@
*@@Corn on cob.@@
*Garlic. (check fridge)
*Celery. (stick or two, cut)
*@@Raisins.@@
*@@Flour.@@
*@@Baking powder.@@
*@@Powdered milk.@@
*@@Thick bacon.@@
*@@Pasta.@@
*@@Pasta sauces.@@
*@@Butter sticks@@
}}}
===
+++[Results]
{{autocolumns{
!!!Gear
*Too much weight too high/far back on the scooter. Bad for highway speed.
*Need more butt room on the seat. Ditto.
*Backpack between legs really sucks for getting on/off.
*Chair is a bit heavy/awkward and could slide over the topcase.
!!!!Changes
*Add sidebags to lower the weight, move it forward?
*After shifting heavier stuff like tent, ground pad to sidebags (balance!), put backpack on top (with clothing/towels only)?
*Bag for bungee cords.
*Only fluffy stuff in the top case.
!!!Food
*Too much food for < three days.
*Cooler and chill pack was good until mid-Saturday. (Must stay under 40F.)
*Campground raccoons are quick to move in at dusk.
!!!!Changes
*Don't sweat trying to have three big meals a day.
**When you're hungry, eat.
*More quick light/dry stuff like soup, flat bread, or trail-mix.
*Need a weatherproof bag to hang from a tree.
*Keep pots, dishes in topcase rather than helmet?
}}}
===
[[Canada GPS. GPS Solution Centre for Phone, Palm, Pocket PC and Laptop. Bluetooth GPS, CF, SDIO, USB GPS. TomTom, Destinator, iGuidance, Odyssey, fugawi & Wayfinder mapping Software.|http://www.canadagps.com/]]
[[Canada Motor Import|http://www.cmitech.ca/en/]] motorcycles, ATV's, scooters
>RV 250 - THE URBAN SCOOTER WITH A CASUAL AND LEISURE LOOK
[[Cascades and Waterfalls|http://www.conservationhamilton.ca/parks/visit/Waterfall_links.asp]]
>Welcome to the mesmerizing beauty of Hamilton's cascades and waterfalls. Ontario's internationally recognized Niagara Escarpment provides perfect geological conditions for waterfalls to occur, from Tobermory to Niagara Falls. In Hamilton, it's been said that if the Escarpment is the city's crown, then its waterfalls are the sparkling jewels in that tiara. More than 60 waterfalls have been identified within its boundaries, so Hamilton could well be known as the "City of Waterfalls".
[[Catan Kinetic Kinroad - Scooters, ATV's, Dirtbikes - Street Legal & Off Road.|http://catan.ca/]]
>115cc 4-stroke engine coupled to an automatic clutch and variomatic transmission with an electric starter. 20 litre storage trunk under a dual padded seat, hydraulic damped suspension front and rear.
!!!Contact
116 Hillyard Street, Hamilton, Ontario, Canada ~L8L 6B6
ph 905-297-9386 email: info@catan.ca
[[Order Honda Parts,Kawasaki Parts,KTM Parts,Polaris Parts,Suzuki Parts,Yamaha Parts online.|http://www.cheapcycleparts.com/pages/home/default.aspx]]
/***
|Name|CheckboxPlugin|
|Source|http://www.TiddlyTools.com/#CheckboxPlugin|
|Documentation|http://www.TiddlyTools.com/#CheckboxPluginInfo|
|Version|2.4.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Add checkboxes to your tiddler content|
This plugin extends the TiddlyWiki syntax to allow definition of checkboxes that can be embedded directly in tiddler content. Checkbox states are preserved by:
* by setting/removing tags on specified tiddlers,
* or, by setting custom field values on specified tiddlers,
* or, by saving to a locally-stored cookie ID,
* or, automatically modifying the tiddler content (deprecated)
When an ID is assigned to the checkbox, it enables direct programmatic access to the checkbox DOM element, as well as creating an entry in TiddlyWiki's config.options[ID] internal data. In addition to tracking the checkbox state, you can also specify custom javascript for programmatic initialization and onClick event handling for any checkbox, so you can provide specialized side-effects in response to state changes.
!!!!!Documentation
>see [[CheckboxPluginInfo]]
!!!!!Revisions
<<<
2008.01.08 [*.*.*] plugin size reduction: documentation moved to [[CheckboxPluginInfo]]
2008.01.05 [2.4.0] set global "window.place" to current checkbox element when processing checkbox clicks. This allows init/beforeClick/afterClick handlers to reference RELATIVE elements, including using "story.findContainingTiddler(place)". Also, wrap handlers in "function()" so "return" can be used within handler code.
|please see [[CheckboxPluginInfo]] for additional revision details|
2005.12.07 [0.9.0] initial BETA release
<<<
!!!!!Code
***/
//{{{
version.extensions.CheckboxPlugin = {major: 2, minor: 4, revision:0 , date: new Date(2008,1,5)};
//}}}
//{{{
config.checkbox = { refresh: { tagged:true, tagging:true, container:true } };
config.formatters.push( {
name: "checkbox",
match: "\\[[xX_ ][\\]\\=\\(\\{]",
lookahead: "\\[([xX_ ])(=[^\\s\\(\\]{]+)?(\\([^\\)]*\\))?({[^}]*})?({[^}]*})?({[^}]*})?\\]",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
// get params
var checked=(lookaheadMatch[1].toUpperCase()=="X");
var id=lookaheadMatch[2];
var target=lookaheadMatch[3];
if (target) target=target.substr(1,target.length-2).trim(); // trim off parentheses
var fn_init=lookaheadMatch[4];
var fn_clickBefore=lookaheadMatch[5];
var fn_clickAfter=lookaheadMatch[6];
var tid=story.findContainingTiddler(w.output); if (tid) tid=tid.getAttribute("tiddler");
var srctid=w.tiddler?w.tiddler.title:null;
config.macros.checkbox.create(w.output,tid,srctid,w.matchStart+1,checked,id,target,config.checkbox.refresh,fn_init,fn_clickBefore,fn_clickAfter);
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} );
config.macros.checkbox = {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
if(!(tiddler instanceof Tiddler)) { // if no tiddler passed in try to find one
var here=story.findContainingTiddler(place);
if (here) tiddler=store.getTiddler(here.getAttribute("tiddler"))
}
var srcpos=0; // "inline X" not applicable to macro syntax
var target=params.shift(); if (!target) target="";
var defaultState=params[0]=="checked"; if (defaultState) params.shift();
var id=params.shift(); if (id && !id.length) id=null;
var fn_init=params.shift(); if (fn_init && !fn_init.length) fn_init=null;
var fn_clickBefore=params.shift();
if (fn_clickBefore && !fn_clickBefore.length) fn_clickBefore=null;
var fn_clickAfter=params.shift();
if (fn_clickAfter && !fn_clickAfter.length) fn_clickAfter=null;
var refresh={ tagged:true, tagging:true, container:false };
this.create(place,tiddler.title,tiddler.title,0,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter);
},
create: function(place,tid,srctid,srcpos,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter) {
// create checkbox element
var c = document.createElement("input");
c.setAttribute("type","checkbox");
c.onclick=this.onClickCheckbox;
c.srctid=srctid; // remember source tiddler
c.srcpos=srcpos; // remember location of "X"
c.container=tid; // containing tiddler (may be null if not in a tiddler)
c.tiddler=tid; // default target tiddler
c.refresh = {};
c.refresh.container = refresh.container;
c.refresh.tagged = refresh.tagged;
c.refresh.tagging = refresh.tagging;
place.appendChild(c);
// set default state
c.checked=defaultState;
// track state in config.options.ID
if (id) {
c.id=id.substr(1); // trim off leading "="
if (config.options[c.id]!=undefined)
c.checked=config.options[c.id];
else
config.options[c.id]=c.checked;
}
// track state in (tiddlername|tagname) or (fieldname@tiddlername)
if (target) {
var pos=target.indexOf("@");
if (pos!=-1) {
c.field=pos?target.substr(0,pos):"checked"; // get fieldname (or use default "checked")
c.tiddler=target.substr(pos+1); // get specified tiddler name (if any)
if (!c.tiddler || !c.tiddler.length) c.tiddler=tid; // if tiddler not specified, default == container
if (store.getValue(c.tiddler,c.field)!=undefined)
c.checked=(store.getValue(c.tiddler,c.field)=="true"); // set checkbox from saved state
} else {
var pos=target.indexOf("|"); if (pos==-1) var pos=target.indexOf(":");
c.tag=target;
if (pos==0) c.tag=target.substr(1); // trim leading "|" or ":"
if (pos>0) { c.tiddler=target.substr(0,pos); c.tag=target.substr(pos+1); }
if (!c.tag.length) c.tag="checked";
var t=store.getTiddler(c.tiddler);
if (t && t.tags)
c.checked=t.isTagged(c.tag); // set checkbox from saved state
}
}
// trim off surrounding { and } delimiters from init/click handlers
if (fn_init) c.fn_init="(function(){"+fn_init.trim().substr(1,fn_init.length-2)+"})()";
if (fn_clickBefore) c.fn_clickBefore="(function(){"+fn_clickBefore.trim().substr(1,fn_clickBefore.length-2)+"})()";
if (fn_clickAfter) c.fn_clickAfter="(function(){"+fn_clickAfter.trim().substr(1,fn_clickAfter.length-2)+"})()";
c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie
},
onClickCheckbox: function(event) {
window.place=this;
if (this.init && this.fn_init) // custom function hook to set initial state (run only once)
{ try { eval(this.fn_init); } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }
if (!this.init && this.fn_clickBefore) // custom function hook to override changes in checkbox state
{ try { eval(this.fn_clickBefore) } catch(e) { displayMessage("Checkbox onClickBefore error: "+e.toString()); } }
if (this.id)
// save state in config AND cookie (only when ID starts with 'chk')
{ config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }
if (this.srctid && this.srcpos>0 && (!this.id || this.id.substr(0,3)!="chk") && !this.tag && !this.field) {
// save state in tiddler content only if not using cookie, tag or field tracking
var t=store.getTiddler(this.srctid); // put X in original source tiddler (if any)
if (t && this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed
t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);
if (!story.isDirty(t.title)) story.refreshTiddler(t.title,null,true);
store.setDirty(true);
}
}
if (this.field) {
if (this.checked && !store.tiddlerExists(this.tiddler))
store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
// set the field value in the target tiddler
store.setValue(this.tiddler,this.field,this.checked?"true":"false");
// DEBUG: displayMessage(this.field+"@"+this.tiddler+" is "+this.checked);
}
if (this.tag) {
if (this.checked && !store.tiddlerExists(this.tiddler))
store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
var t=store.getTiddler(this.tiddler);
if (t) {
var tagged=(t.tags && t.tags.indexOf(this.tag)!=-1);
if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }
if (!this.checked && tagged) { t.tags.splice(t.tags.indexOf(this.tag),1); store.setDirty(true); }
}
// if tag state has been changed, update display of corresponding tiddlers (unless they are in edit mode...)
if (this.checked!=tagged) {
if (this.refresh.tagged) {
if (!story.isDirty(this.tiddler)) // the TAGGED tiddler in view mode
story.refreshTiddler(this.tiddler,null,true);
else // the TAGGED tiddler in edit mode (with tags field)
config.macros.checkbox.refreshEditorTagField(this.tiddler,this.tag,this.checked);
}
if (this.refresh.tagging)
if (!story.isDirty(this.tag)) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler
}
}
if (!this.init && this.fn_clickAfter) // custom function hook to react to changes in checkbox state
{ try { eval(this.fn_clickAfter) } catch(e) { displayMessage("Checkbox onClickAfter error: "+e.toString()); } }
// refresh containing tiddler (but not during initial rendering, or we get an infinite loop!) (and not when editing container)
if (!this.init && this.refresh.container && this.container!=this.tiddler)
if (!story.isDirty(this.container)) story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox
return true;
},
refreshEditorTagField: function(title,tag,set) {
var tagfield=story.getTiddlerField(title,"tags");
if (!tagfield||tagfield.getAttribute("edit")!="tags") return; // if no tags field in editor (i.e., custom template)
var tags=tagfield.value.readBracketedList();
if (tags.contains(tag)==set) return; // if no change needed
if (set) tags.push(tag); // add tag
else tags.splice(tags.indexOf(tag),1); // remove tag
for (var t=0;t<tags.length;t++) tags[t]=String.encodeTiddlyLink(tags[t]);
tagfield.value=tags.join(" "); // reassemble tag string (with brackets as needed)
return;
}
}
//}}}
[[Chironex Motorsports|http://www.chironex.ca/index.php?p=home&l=e]]
http://cmgonline.com/20080229425/Chironex/Chironex-Scooters
[[Coghlans Camping Gear|http://www.coghlanscampinggear.com/]]
<html><embed src="http://www.metacafe.com/fplayer/529185/cold_weather_riding_olympia_ast_has_you_covered.swf" width="400" height="345" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"> </embed><br><font size = 1><a href="http://www.metacafe.com/watch/529185/cold_weather_riding_olympia_ast_has_you_covered/">Cold Weather Riding? Olympia AST Has You Covered</a> - <a href="http://www.metacafe.com/">More bloopers are a click away</a></font></html>
Background: #f8f8ff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #448
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
[[Comparison test of 7 Modular Flip-up motorcycle Helmets - Accessories & Gear - Motorcycle Cruiser|http://www.motorcyclecruiser.com/accessoriesandgear/flip_face_helmet_comparison/index.html]]
[[Continuing Education->Current Offering->Course List|http://www.conestogac.on.ca/ce/catlg/courselist.jsp?CatalogCode=C12_H7100]]
>The Motorcycle Driver Training (GINT0315) is a Canada Safety Council (CSC) Motorcycle training course that gives 22 hours of instruction. Included in the course is the CSC Workbook ¡§Gearing Up¡¨ which must be completed in its entirety and includes a motorcycle comparison assignment. Full attendance for the 22 hours is mandatory.
PageTemplate
|>|>|SiteTitle - SiteSubtitle|
|MainMenu|DefaultTiddlers<<br>><<br>><<br>><<br>>ViewTemplate<<br>><<br>>EditTemplate|SideBarOptions|
|~|~|OptionsPanel|
|~|~|AdvancedOptions|
|~|~|<<tiddler Configuration.SideBarTabs>>|
''StyleSheet:'' StyleSheetColors - StyleSheetLayout - StyleSheetPrint
SiteUrl
SideBarTabs
|[[Timeline|TabTimeline]]|[[All|TabAll]]|[[Tags|TabTags]]|>|>|[[More|TabMore]] |
|>|>||[[Missing|TabMoreMissing]]|[[Orphans|TabMoreOrphans]]|[[Shadowed|TabMoreShadowed]]|
All content is licensed under [[Creative Commons Attribution-Share Alike|http://creativecommons.org/licenses/by-sa/2.5/]] license. (Basically: give attribution, publish changes under the same agreement.) Some site summaries are Fair Use/Fair Dealing usage of text copyright by and attributed to their respective owners. [[TiddlyWiki|http://www.tiddlywiki.com/]] itself, by Jeremy Ruston, is available under BSD open source license. Some people have trademarks, blah blah blah...
If you find it useful, take it, make your own changes and pass it along to the next person to do the same.
[[Corazzo Design - Jackets, Apparel and Accessories|http://www.corazzo.net/?q=node/112]]
[[Corbin Canada|http://www.bikerider.ca/]]
3147 Underhill Avenue
Burnaby, B.C. V5A 3C8
800-663-1016 Toll Free
604-434-4949
604-434-2948 Fax
sales@bikerider.ca
!!!See also
*[[Corbin Motorcycle Seats & Accessories]]
[[Corbin Motorcycle Seats & Accessories : Cool Motorcycle Stuff since 1968 : 800-538-7035|http://www.corbin.com/]]
!!!See also
*[[Corbin Canada]]
[[toronto motorcycles/scooters classifieds - craigslist|http://toronto.craigslist.ca/mcy/]]
[[crazeeHeads|http://www.crazeeheads.com/ezcart/plushList.cfm]]
*[[Creative Outdoor and Sporting Goods Centre|http://www.creativeonline.ca/engmain.html]]
>If you have any questions or comments, please give us a phone call at: (905)709-1535
>Retail store location: 280 West Beaver Creek Road, Unit 6, Richmond Hill, Ontario, Canada.
[[Credit Valley Conservation - Belfountain Conservation Area|http://www.creditvalleycons.com/recandleisure/belfountain.htm]]
[[Ontario Ministry of Natural Resources|http://www.mnr.gov.on.ca/en/Business/LetsFish/2ColumnSubPage/STEL02_165432.html]]
>Crown Land and Camping
>
>Ontario’s Crown land provides the opportunity for many outdoor recreational activities including camping. Residents of Canada may camp free of charge on Crown land for up to 21 days at any one site, except where posted otherwise.
[[Motorcycle Parts and Motorcycle Accessories for Cruisers: Honda VTX, Yamaha Roadstar, Kawasaki Mean Streak, Suzuki Volusia and more ...|http://cruisercustomizing.com/]]
!!!Location
Cruiser Customizing, Inc.
4671 Las Positas Road, Building C
Livermore, CA 94551-9631
Phone: 925-583-2200
Fax: 925-605-1799
[[Call (905) 681-2155 for Cycle City|http://www.cyclecity.on.ca/]] in Burlington Ontario Canada - authorized yamaha dealer, yamaha atv, yamaha all terrain vehicles, yamaha four wheeler, yamaha 4 wheeler, yamaha boats, yamaha generators, yamaha outboard motors, yamaha outboards, yamaha motorcycles, yamaha dirt bike, yamaha street bike, yamaha bikes, yamaha pumps, yamaha repairs, yamaha sales and service, yamaha snowmobiles, yamaha used machines, yamaha used equipment, yamaha watercraft, yamaha personal watercraft, yamaha warranty, yamaha finance, Power finance, yamaha parts, atv, all terrain vehicles, four wheeler, 4 wheeler, boats, generators, outboard motors, outboards, motorcycles, dirt bike, street bike, yamaha bikes, pumps, repairs, sales and service, snowmobiles, used machines, used equipment, used, watercraft, personal watercraft, warranty, finance, spam lovely spam, parts
!!!Location
Cycle City (905) 681 2155
2396 Queensway Dr Burlington ON CA ~L7R 3T3
Fax (905) 681-2054
[[Welcome to Cycle Source!|http://www.cyclesource.ca/]]
!!!Location
Cycle Source Inc.
22 Strathearn Avenue, Unit 4A
Brampton, Ontario ~L6T 4S9
CANADA
!!!Hours
*Mon., Wed. & Fri. 9am to 9pm
*Tues. & Thurs. 9am to 6pm
*Sat. 10am to 4pm
*Sunday Closed
[[Cycle World Superstore|http://www.cycleworldsuperstore.com/]] (~RiderDeals moved from River to Cycle World East location)
!!!Hours
FALL HOURS 2009
| |SALES |SERVICE |PARTS & ACCESSORIES|h
|MONDAY |10AM - 6PM |10AM - 6PM |10AM - 6PM|
|TUESDAY |10AM - 6PM |10AM - 6PM |10AM - 6PM|
|WEDNESDAY |CLOSED |CLOSED |CLOSED|
|THURSDAY |10AM - 6PM |10AM - 6PM |10AM - 6PM|
|FRIDAY |10AM - 6PM |10AM - 6PM |10AM - 6PM|
|SATURDAY |10AM - 6PM |10AM - 6PM |10AM - 6PM|
|SUNDAY |CLOSED |CLOSED |10AM - 5PM|
!!!Contact
416-364-8889
4545 Sheppard Avenue East, Scarborough/Agincourt (Toronto), Ontario
mcsuperstore@hotmail.com
[[Cyclewerx - Toronto's Most Convenient Motorcycle Mechanic Shop - Sales, Service and Repairs|http://www.cyclewerx.ca/]]
>(416) 913-4965
>1660 Bloor Street West
[[Dan's Motorcycle "Storing Your Motorcycle"|http://www.dansmc.com/winterize.htm]]
[[Motorcycle Repair Course|http://www.dansmc.com/mc_repaircourse.htm]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/IECsdQvB0yA&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/IECsdQvB0yA&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
[[Derbi .::. Home Page|http://www.derbicanada.com/]]
[[Digital Hero Camera Home|http://www.goprocamera.com/]]
[[Riders Choice]]
[[Do It Yourself Helmet-Cam|http://www.motorcycle.com/how-to/do-it-yourself-helmetcam-3436.html]]
[[Draggin Jeans - Manufacturer of motorcycle jeans and clothing, Kevlar lined jeans, jackets and cargo pants.|http://www.dragginjeans.net/]]
!!!Location
Draggin Jeans - 196 Wells Street, South Melbourne, Victoria 3205 Australia
Tel. +61 03 9696 1622 :: Fax. +61 03 9696 1644
[[Draggin Jeans Canada - Kevlar Lined Protective Motorcycle Clothing.|http://www.dragginjeans.ca/]]
Site dead? From 4/14/2008
[[Envy Rides|http://www.envyrides.ca/custompage.asp?pg=testimonials]]
[[Eye catching gear may reduce motorcycle injuries -- 328 (7444): 0 -- BMJ|http://www.bmj.com/cgi/content/full/328/7444/0-b]]
>Fluorescent clothing, white or light coloured helmets, and daytime headlights may reduce motorcycle injuries and death. Wells and colleagues (p 857) analysed 463 motorcycle drivers admitted to hospital following a road traffic incident and 1233 other drivers (control group) to evaluate how wearing conspicuous attire affected the risk of having an accident. They found that with reflective or fluorescent clothing the risk of a crash injury was reduced by 37%, with a white helmet by 24%, and with headlights by 27%.
[[Motorcycle rider conspicuity and crash related injury: case-control study -- Wells et al. 328 (7444): 857 -- BMJ|http://bmj.bmjjournals.com/cgi/content/abstract/328/7444/857]]
[[FAST Riding School|http://www.fastridingschool.com/]]
!!!For Street Riders
We provide personalized instruction for advanced riders, and for those with little riding experience. Our unique teaching methods allow you to learn basic or advanced techniques one by one, at your own speed, while having fun on a racetrack.
* Touring, Custom or Sport, it doesn't matter...you will improve more in ONE day than you would in years of riding on your own.
* You will find, discuss and improve your bad riding habits and weak points.
* You will push your limits further, improve your safety on the road, gain confidence and triple your pleasure of riding.
* You will be able to ride at a high rate of speed in a controlled and safe environment under professional supervision.
!!!For Future Racers
* You will show if you have what is needed to be a racer.
* You will learn the proper techniques and steps towards racing success.
* You can earn the graduation certificate needed to buy a racing license.
[[XT Sportbike Accessories Canadian Distributor|http://www.xtsportbikeaccessories.com/FastRack.html]]
[[FIELDSHEER The Official Site|http://www.fieldsheer.com/2008site/ff/index3.html]]
/***
|''Name''|FirefoxPrivilegesPlugin|
|''Description''|Create a backstage tab to manage Firefox url privileges|
|''Author''|Xavier Vergés (xverges at gmail dot com)|
|''Version''|1.1.1 ($Rev: 4266 $)|
|''Date''|$Date: 2008-04-06 09:04:49 +0200 (dom, 06 abr 2008) $|
|''Status''|@@beta@@|
|''Source''|http://firefoxprivileges.tiddlyspot.com/|
|''CodeRepository''|http://trac.tiddlywiki.org/browser/Trunk/contributors/XavierVerges/plugins/FirefoxPrivilegesPlugin.js|
|''License''|BSD tbd|
|''CoreVersion''|2.2.4 (maybe 2.2+?)|
|''Feedback''|http://groups.google.com/group/TiddlyWiki|
|''BookmarkletReady''|http://icanhaz.com/firefoxprivileges|
|''Browser''|Mozilla. Tested under Firefox 2.0.0.12 and Firefox 3.0b4|
|''Documentation''|http://firefoxprivileges.tiddlyspot.com/#HowTo|
/%
!Description
!Notes
!Usage
!Revision History
!!v1.0 (2008-03-23)
* First public version
%/
!Usage
The wizard can be opened from the backstage or using the macro {{{<<firefoxPrivileges>>}}}
The step to show when opening the wizard can be set with the {{{txtPrivWizardDefaultStep}}} option: <<option txtPrivWizardDefaultStep>>
!Code
***/
//{{{
if(window.Components) {
config.macros.firefoxPrivileges = {};
config.macros.firefoxPrivileges.lingo = {};
/*
//}}}
!!! Strings to translate
//{{{
*/
merge(config.macros.firefoxPrivileges.lingo ,{
wizardTitle: "Manage Firefox Privileges",
learnStepTitle: "1. Learn about the risks of giving privileges to file: urls",
learnStepHtml: "<h3>Local files</h3><p>Firefox can be configured to grant the same security privileges to every html document loaded from disk (those <i>file:</i> urls), or to grant different privileges on a per file basis. Local TiddyWikis need some high security privileges in order to let you save changes to disk, or to import tiddlers from remote servers. Unfortunately, these same privileges can potentially be used by the bad guys to launch programs, get files from your disk and upload them somewhere, access your browsing history...</p><p>While it is more convenient to let Firefox give all your local files the same security privileges, and I'm not aware of any malware attack that tries to take advantage of privileged <i>file:</i> urls, an ounce of prevention is worth a pound of cure.</p><p>You can learn more about this by reading <a href='http://www.mozilla.org/projects/security/components/per-file.html' class='externalLink'>Per-File Permissions</a> and <a href='http://www.mozilla.org/projects/security/components/signed-scripts.html#privs-list' class='externalLink'>JavaScript Security: Signed Script</a> at mozilla.org.</p><h3>Remote files</h3><p>When a remote document (<i>http:</i> urls) requests especial privileges, Firefox <ul><li>checks the value of <code>signed.applets.codebase_principal_support</code>, a preference that can be configured from the page that is loaded when you type <code>about:config</code> in the address bar</li><li>if the previous value is set to false, Firefox denies silently the request</li><li>if the previous value is set to true, Firefox looks for the document's domain in the list of privileges urls that can be configured from this wizard, and, if not there, asks the user to grant the privilege</li></ul><p>Note that, in this case, and unlike when dealing with local files, Firefox will only take into account the document's domain instead of performing an exact match of the url.</p><p>Take a look at <a href='http://messfromabove.tiddlyspot.com' class='externalLink'>http://messfromabove.tiddlyspot.com</a> to learn more about the nice and nasty possibilities that this setting provides.</p><h3>This Wizard</h3><p>This wizard will help you to grant the required privileges to your TiddlyWikis, local or remote, and warn you if you have enabled a dangerous default. To do so, Firefox will probably prompt you to grant it some special privileges in order to list and modify the list of privileged urls.</p><p>Please note that changing the privileges for an url may not have effect until you reload it in the browser.</p><input type='hidden' name='mark'></input>",
learnStepButton: "1. Learn about the risks",
learnStepButtonTooltip: "Learn why 'Remember this' is an unsafe choice in security prompts",
grantStepTitle: "2. Grant privileges to individual local documents or remote domains",
grantStepHtml: "Url: <input type='text' size=80 name='txtUrl'><br/><br/><input type='checkbox' checked='true' name='chkUniversalXPConnect'>Grant rights required to save to disk (Run or install software on your machine - UniversalXPConnect)</input><br/><input type='checkbox' checked='true' name='chkUniversalBrowserRead'>Grant rights required to import tiddlers from servers or access TiddlySpot (Read and upload local files - UniversalBrowserRead)</input><br/><input type='checkbox' name='chkUniversalBrowserWrite'>Modify any open window - UniversalBrowserWrite</input><br/><input type='checkbox' name='chkUniversalFileRead'>Read and upload local files - UniversalFileRead</input><br/><input type='checkbox' name='chkCapabilityPreferencesAccess'>By-pass core security settings - CapabilityPreferencesAccess</input><br/><input type='checkbox' name='chkUniversalPreferencesRead'>Read program settings - UniversalPreferencesRead</input><br/><input type='checkbox' name='chkUniversalPreferencesWrite'>Modify program settings - UniversalPreferencesWrite</input><br/><input type='button' class='button' name='btnGrant' value='Set privileges'/>",
grantStepButton: "2. Set privileges",
grantStepButtonTooltip: "Manage privileges for this or other docs",
viewStepTitle: "3. Granted privileges",
viewStepHtml: "<input type='hidden' name='mark'></input>",
viewStepButton: "3. View privileges",
viewStepButtonTooltip: "List granted privileges, and optionally reset them",
viewStepEmptyMsg: "Asking for temporary privileges to list permanent privileges...",
listViewTemplate: {
columns: [
{name: 'Selected', field: 'Selected', rowName: 'url', type: 'Selector'},
{name: 'Url', field: 'url', title: "Url", type: 'LongLink'},
{name: 'Granted', field: 'granted', title: "Granted", type: 'StringList'},
{name: 'Denied', field: 'denied', title: "Denied", type: 'StringList'},
{name: 'Handle', field: 'handle', title: "Handle", type: 'String'},
{name: 'Notes', field: 'notes', title: "Notes", type: 'String'}
],
rowClasses: [
{className: 'lowlight', field: 'highlight'},
{className: 'error', field: 'warning'}
]
},
listResetButton: "Reset the privileges of the selected urls",
noteDangerous: "This is dangerous",
noteNoEffect: "This has no effect",
noteThisUrl: "This document's url",
noteTheUrlYouUpdated: "The url you just updated",
errNoUrl: "The url is required",
errNotAuthorized: "Not enough privileges. Maybe you are trying this from a tiddlywiki loaded from a server?",
msgUpdating: "Updating privileges for %0",
msgSetting: "Setting privileges for %0",
msgResetting: "Resetting privileges for %0"
});
merge(config.optionsDesc,{
txtPrivWizardDefaultStep: "Step to show when opening the 'Manage Firefox Privileges' wizard"
});
merge(config.tasks,{
firefoxPrivileges: {text: "security", tooltip: "Work with Firefox url privileges", content: '<<firefoxPrivileges>>'}
});
/*
//}}}
!!! Regular code
//{{{
*/
config.backstageTasks.pushUnique("firefoxPrivileges");
if (typeof(config.options.txtPrivWizardDefaultStep) === "undefined"){
config.options.txtPrivWizardDefaultStep = "1";
}
(function(){
var plugin = config.macros.firefoxPrivileges;
var lingo = plugin.lingo;
plugin.privAccessCapabilities = "UniversalXPConnect CapabilityPreferencesAccess";
plugin.stepNames = ["learn", "grant", "view"];
plugin.lastUrl = document.location.toString();
plugin.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
var wizard = new Wizard();
wizard.createWizard(place,lingo.wizardTitle);
var step = parseInt(config.options.txtPrivWizardDefaultStep);
step = (isNaN(step)||(step<=0)||(step>3))? 0 : step-1;
plugin.step(wizard, step);
};
plugin.buttons = (function(){
var onclick = {};
for (var ii=0; ii<plugin.stepNames.length; ii++) {
onclick[plugin.stepNames[ii]] =
(function() {
var index = ii;
var handler = function(e) {
plugin.step(new Wizard(resolveTarget(e)), index);
return false;
};
return handler;})();
}
var getButtons = function(index) {
var buttons = [];
for (var ii= 0; ii<plugin.stepNames.length; ii++) {
if (ii !== index) {
var name = plugin.stepNames[ii];
buttons.push({
onClick: onclick[name],
caption: lingo[name+"StepButton"],
tooltip: lingo[name+"StepButtonTooltip"]
});
}
}
return buttons;
};
return getButtons;
})();
plugin.step = function(wizard, stepIndex, extraParams)
{
var name = plugin.stepNames[stepIndex];
var stepResult = {};
wizard.addStep(lingo[name+"StepTitle"],lingo[name+"StepHtml"]);
wizard.setButtons(plugin.buttons(stepIndex));
if (plugin[name+"StepProcess"]) {
plugin[name+"StepProcess"](wizard, extraParams);
}
};
plugin.getMarkedDiv = function(wizard)
{
var mark = wizard.getElement("mark");
var div = document.createElement("div");
mark.parentNode.insertBefore(div,mark);
return div;
};
plugin.learnStepProcess = function(wizard)
{
var src = config.optionsDesc.txtPrivWizardDefaultStep + ": <<option txtPrivWizardDefaultStep>>";
wikify(src, plugin.getMarkedDiv(wizard));
}
plugin.grantStepProcess = function(wizard)
{
wizard.getElement("btnGrant").onclick = plugin.btnSetPrivileges;
wizard.getElement("txtUrl").value = plugin.lastUrl;
};
plugin.viewStepProcess = function(wizard, extraParams)
{
var listWrapper = plugin.getMarkedDiv(wizard);
listWrapper.innerHTML = lingo.viewStepEmptyMsg;
var html = [];
try {
if (!extraParams || extraParams.reqAcccess) {
netscape.security.PrivilegeManager.enablePrivilege(plugin.privAccessCapabilities);
}
var thisUrl = document.location.toString();
var privs = plugin.getPrivilegedUrls(false);
var listItems = [];
for (var handle in privs) {
if (privs.hasOwnProperty(handle)) {
var priv = privs[handle];
if ((priv.url === "file://") ||
(priv.url.indexOf(" ") !== -1)) {
priv.warning = true;
priv.notes = (priv.url === "file://")? lingo.noteDangerous:lingo.noteNoEffect;
} else if ((priv.url === thisUrl) ||
(priv.url === plugin.lastUrl)) {
priv.highlight = true;
priv.notes = (priv.url === thisUrl)? lingo.noteThisUrl:lingo.noteTheUrlYouUpdated;
}
listItems.push(priv);
}
}
var sortFunc = function(a,b) {
if(a.url > b.url) {return 1;}
if(a.url < b.url) {return -1;}
return 0;
};
listItems.sort(sortFunc);
listWrapper.innerHTML = "";
var listView = ListView.create(listWrapper, listItems, lingo.listViewTemplate);
wizard.setValue("listView",listView);
createTiddlyButton(listWrapper, lingo.listResetButton, "", plugin.btnResetPrivileges);
} catch (ex) {
listWrapper.innerHTML = "Error: " + ex;
}
};
plugin.btnSetPrivileges = function(ev)
{
var wizard = new Wizard(this);
var checkboxes = wizard.bodyElem.getElementsByTagName("input");
var grant = [];
for(var t=0; t<checkboxes.length; t++) {
var cb = checkboxes[t];
if((cb.getAttribute("type") === "checkbox")&&cb.checked) {
grant.push(cb.name.substring(3));
}
}
var url = wizard.getElement("txtUrl").value;
if (!url) {
alert(lingo.errNoUrl);
} else {
plugin.lastUrl = url;
var viewStepExtraParams = {reqAcccess: false};
var gotPrivileges = false;
try {
netscape.security.PrivilegeManager.enablePrivilege(config.macros.firefoxPrivileges.privAccessCapabilities);
gotPrivileges = true;
} catch(ex) {}
if (gotPrivileges) {
plugin.setUrlPrivilege(false, url, grant, false);
plugin.step(wizard, 2, viewStepExtraParams);
} else {
alert(lingo.errNotAuthorized);
}
}
return false;
};
plugin.btnResetPrivileges = function(ev)
{
var wizard = new Wizard(this);
var listView = wizard.getValue("listView");
var urls = ListView.getSelectedRows(listView);
if(urls.length === 0) {
alert(config.messages.nothingSelected);
} else {
netscape.security.PrivilegeManager.enablePrivilege(config.macros.firefoxPrivileges.privAccessCapabilities);
for (var ii=0; ii<urls.length; ii++) {
plugin.setUrlPrivilege(false, urls[ii], [], true);
}
plugin.step(wizard, 2, {reqAcccess: false});
}
return false;
};
plugin.setUrlPrivilege = function(reqAccess, url, rights, reset)
{
function getFreeHandle(dict, prefix) {
var handle = prefix;
var ii = 0;
while("undefined" !== typeof(dict[handle])) {
ii++;
handle = prefix + ii;
}
return handle;
}
if (reqAccess) {
netscape.security.PrivilegeManager.enablePrivilege(plugin.privAccessCapabilities);
}
var isUpdate = true;
var urlHandle = "";
var urls = plugin.getPrivilegedUrls(false);
for (var handle in urls) {
if (urls[handle].url === url) {
urlHandle = handle;
break;
}
}
var denied = [];
var granted = [];
if (urlHandle) {
if (!reset) {
displayMessage(lingo.msgUpdating.format([url]), url);
denied = urls[urlHandle].denied.slice();
granted = urls[urlHandle].granted.slice();
} else {
displayMessage(lingo.msgResetting.format([url]), url);
}
} else {
displayMessage(lingo.msgSetting.format([url]), url);
urlHandle = getFreeHandle(urls, "FirefoxPrivilegesPlugin");
isUpdate = false;
}
for (var ii=0; ii<rights.length; ii++) {
denied.remove(rights[ii]);
granted.pushUnique(rights[ii]);
}
var prefs = plugin.getPrefsBranch();
var idStr = urlHandle + ".id";
var deniedStr = urlHandle + ".denied";
var grantedStr = urlHandle + ".granted";
function clearPref(str) {
if (prefs.prefHasUserValue(str)) {
prefs.clearUserPref(str);
}
}
function setOrClearPref(str, val) {
if (val.length) {
val = ("string" === typeof(val))? val : val.join(" ");
prefs.setCharPref(str, val);
// why oh why?!
if (!prefs.prefHasUserValue(str)) {
prefs.setCharPref(str, val);
}
} else {
clearPref(str);
}
}
if (!denied.length && !granted.length) {
prefs.deleteBranch(urlHandle + ".");
} else {
setOrClearPref(idStr, url);
setOrClearPref(deniedStr, denied);
setOrClearPref(grantedStr , granted);
setOrClearPref(idStr, url);
}
var prefService = plugin.getPrefsService();
prefService.savePrefFile(null);
return !isUpdate;
};
plugin.getPrivilegedUrls = function(reqAccess)
{
function Privileged(url, granted, denied, handle) {
this.url = url;
this.granted = granted;
this.denied = denied;
this.handle = handle;
}
function getPermissions(branch, handle, type) {
var permissions = [];
var pref = handle + "." + type;
if (branch.prefHasUserValue(pref)) {
permissions = branch.getCharPref(pref).split(/\s+/);
permissions.sort();
}
return permissions;
}
var privileged = {};
if (reqAccess) {
netscape.security.PrivilegeManager.enablePrivilege(plugin.privAccessCapabilities);
}
var prefs = plugin.getPrefsBranch();
var capsEntries = prefs.getChildList("", { value: 0 });
for (var ii=0; ii < capsEntries.length; ii++)
{
var matches = capsEntries[ii].match(/([^\.]*)[\.]id/);
if (matches && (2 === matches.length))
{
var handle = matches[1];
var url = prefs.prefHasUserValue(capsEntries[ii])? prefs.getCharPref(capsEntries[ii]) : "Error getting " + capsEntries[ii];
var granted = getPermissions(prefs, handle, "granted");
var denied = getPermissions(prefs, handle, "denied");
privileged[handle] = new Privileged(url, granted, denied, handle);
}
}
return privileged;
};
plugin.getPrefsService = function()
{
return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
};
plugin.getPrefsBranch = function()
{
var prefsService = plugin.getPrefsService();
return prefsService.getBranch("capability.principal.codebase.");
};
/*
//}}}
!!! Bookmarklet interface
//{{{
*/
plugin.onload = function()
{
var b=backstage;
var bt=createTiddlyButton(b.toolbar, "security"+glyph("downTriangle"), "", b.onClickTab,"backstageTab");
var fp="firefoxPrivileges";
bt.setAttribute("task",fp);
b.switchTab(fp);
};
/*
//}}}
!!! ListView tweak for long urls. http://trac.tiddlywiki.org/ticket/570
//{{{
*/
ListView.columnTypes.LongLink = {
createHeader: ListView.columnTypes.String.createHeader,
createItem: function(place,listObject,field,columnTemplate,col,row)
{
var v = listObject[field];
var c = columnTemplate.text;
if(v != undefined) {
var link = createExternalLink(place,v);
if(!c) {
c = v.replace(/#|\.|\/|(\%..)|\?|\&/g, config.browser.isIE? "$&<wbr>": "$&​");
link.innerHTML = c;
} else {
createTiddlyText(link, c);
}
}
}
};
})(); // scope hiding
} // endif(window.Components)
//}}}
[[FIRSTGEAR - Premium Riding Gear and Accessories|http://www.firstgear-usa.com/fgweb2.nsf/home?openform]]
[img[http://www.ridegear.com/images/items/Kilimanjaro4.0Jkt-2.jpg]]
[[FirstGear Kilimanjaro 4.0|http://www.firstgear-usa.com/fgweb2.nsf/Products/200FD23F892366D2862571E8006BE12A?opendocument]]
*~CE-Armor in shoulders and elbows, plus a foam back pad
*Doesn't sell direct, doesn't list their international distributers. F'em.
//~~(Part of the [[ForEachTiddlerPlugin]])~~//
Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.
''Syntax:''
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
''Using JavaScript''
To give you a lot of flexibility the [[ForEachTiddlerMacro]] uses JavaScript in its arguments. Even if you are not that familiar with JavaScript you may find forEachTiddler useful. Just have a look at the various ready-to-use [[ForEachTiddlerExamples]] and adapt them to your needs.
''The Elements of the Macro''
The arguments of the ForEachTiddlerMacro consist of multiple parts, each of them being optional.
<<slider chkFETInClause [[inClause]] "inClause" "inClause">>
<<slider chkFETWhereClause [[whereClause]] "whereClause" "whereClause">>
<<slider chkFETSortClause [[sortClause]] "sortClause" "sortClause">>
<<slider chkFETScriptClause [[scriptClause]] "scriptClause" "scriptClause">>
<<slider chkFETActions [[Action Specification]] "Action Specification" "Action Specification">>
''Using Macros and ">" inside the forEachTiddler Macro''
You may use other macro calls into the expression, especially in the actionParameters. To avoid that the {{{>>}}} of such a macro call is misinterpreted as the end of the {{{<<forEachTiddler...>>}}} macro you must escape the {{{>>}}} of the inner macro with {{{$))}}} E.g. if you want to use {{{<<tiddler ...>>}}} inside the {{{forEachTiddler}}} macro you have to write {{{<<tiddler ...$))}}}.
In addition it is necessary to escape single {{{>}}} with the text {{{$)}}}.
''Using {{{<<tiddler ... with: ...>>}}} to re-use ForEachTiddler definitions''
Sometimes you may want to use a certain ForEachTiddler definition in slight variations. E.g. you may want to list either the tiddlers tagged with "ToDo" and in the other case with "Done". To do so you may use "Tiddler parameters". Here an example:
Replace the variable part of the ForEachTiddler definition with $1 ($2,... $9 are supported). E.g. you may create the tiddler "ListTaggedTiddlers" like this
{{{
<<forEachTiddler
where
'tiddler.tags.contains("$1")'
>>
}}}
Now you can use the ListTaggedTiddlers for various specific tags, using the {{{<<tiddler ...>>}}} macro:
{{{
<<tiddler ListTaggedTiddlers with: "systemConfig">>
}}}
{{{
<<tiddler ListTaggedTiddlers with: "Plugin">>
}}}
See also [[ForEachTiddlerExamples]].
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|© 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description
Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.
''Syntax:''
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].
!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features:
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen)
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features:
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs:
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features:
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version
!Code
***/
//{{{
//============================================================================
//============================================================================
// ForEachTiddlerPlugin
//============================================================================
//============================================================================
// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {
if (!window.abego) window.abego = {};
version.extensions.ForEachTiddlerPlugin = {
major: 1, minor: 0, revision: 8,
date: new Date(2007,3,12),
source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};
// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
TiddlyWiki.prototype.forEachTiddler = function(callback) {
for(var t in this.tiddlers) {
callback.call(this,t,this.tiddlers[t]);
}
};
}
//============================================================================
// forEachTiddler Macro
//============================================================================
version.extensions.forEachTiddler = {
major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};
// ---------------------------------------------------------------------------
// Configurations and constants
// ---------------------------------------------------------------------------
config.macros.forEachTiddler = {
// Standard Properties
label: "forEachTiddler",
prompt: "Perform actions on a (sorted) selection of tiddlers",
// actions
actions: {
addToList: {},
write: {}
}
};
// ---------------------------------------------------------------------------
// The forEachTiddler Macro Handler
// ---------------------------------------------------------------------------
config.macros.forEachTiddler.getContainingTiddler = function(e) {
while(e && !hasClass(e,"tiddler"))
e = e.parentNode;
var title = e ? e.getAttribute("tiddler") : null;
return title ? store.getTiddler(title) : null;
};
config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);
if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
// --- Parsing ------------------------------------------
var i = 0; // index running over the params
// Parse the "in" clause
var tiddlyWikiPath = undefined;
if ((i < params.length) && params[i] == "in") {
i++;
if (i >= params.length) {
this.handleError(place, "TiddlyWiki path expected behind 'in'.");
return;
}
tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the where clause
var whereClause ="true";
if ((i < params.length) && params[i] == "where") {
i++;
whereClause = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the sort stuff
var sortClause = null;
var sortAscending = true;
if ((i < params.length) && params[i] == "sortBy") {
i++;
if (i >= params.length) {
this.handleError(place, "sortClause missing behind 'sortBy'.");
return;
}
sortClause = this.paramEncode(params[i]);
i++;
if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
sortAscending = params[i] == "ascending";
i++;
}
}
// Parse the script
var scriptText = null;
if ((i < params.length) && params[i] == "script") {
i++;
scriptText = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the action.
// When we are already at the end use the default action
var actionName = "addToList";
if (i < params.length) {
if (!config.macros.forEachTiddler.actions[params[i]]) {
this.handleError(place, "Unknown action '"+params[i]+"'.");
return;
} else {
actionName = params[i];
i++;
}
}
// Get the action parameter
// (the parsing is done inside the individual action implementation.)
var actionParameter = params.slice(i);
// --- Processing ------------------------------------------
try {
this.performMacro({
place: place,
inTiddler: tiddler,
whereClause: whereClause,
sortClause: sortClause,
sortAscending: sortAscending,
actionName: actionName,
actionParameter: actionParameter,
scriptText: scriptText,
tiddlyWikiPath: tiddlyWikiPath});
} catch (e) {
this.handleError(place, e);
}
};
// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {
var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);
var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
context["tiddlyWiki"] = tiddlyWiki;
// Get the tiddlers, as defined by the whereClause
var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
context["tiddlers"] = tiddlers;
// Sort the tiddlers, when sorting is required.
if (parameter.sortClause) {
this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
}
return {tiddlers: tiddlers, context: context};
};
// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
return this.getTiddlersAndContext(parameter).tiddlers;
};
// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
// The following properties are supported:
//
// place
// whereClause
// sortClause
// sortAscending
// actionName
// actionParameter
// scriptText
// tiddlyWikiPath
//
// All properties are optional.
// For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
var tiddlersAndContext = this.getTiddlersAndContext(parameter);
// Perform the action
var actionName = parameter.actionName ? parameter.actionName : "addToList";
var action = config.macros.forEachTiddler.actions[actionName];
if (!action) {
this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
return;
}
var actionHandler = action.handler;
actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};
// ---------------------------------------------------------------------------
// The actions
// ---------------------------------------------------------------------------
// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
// Parse the parameter
var p = 0;
// Check for extra parameters
if (parameter.length > p) {
config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
return;
}
// Perform the action.
var list = document.createElement("ul");
place.appendChild(list);
for (var i = 0; i < tiddlers.length; i++) {
var tiddler = tiddlers[i];
var listItem = document.createElement("li");
list.appendChild(listItem);
createTiddlyLink(listItem, tiddler.title, true);
}
};
abego.parseNamedParameter = function(name, parameter, i) {
var beginExpression = null;
if ((i < parameter.length) && parameter[i] == name) {
i++;
if (i >= parameter.length) {
throw "Missing text behind '%0'".format([name]);
}
return config.macros.forEachTiddler.paramEncode(parameter[i]);
}
return null;
}
// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
// Parse the parameter
var p = 0;
if (p >= parameter.length) {
this.handleError(place, "Missing expression behind 'write'.");
return;
}
var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
p++;
// Parse the "begin" option
var beginExpression = abego.parseNamedParameter("begin", parameter, p);
if (beginExpression !== null)
p += 2;
var endExpression = abego.parseNamedParameter("end", parameter, p);
if (endExpression !== null)
p += 2;
var noneExpression = abego.parseNamedParameter("none", parameter, p);
if (noneExpression !== null)
p += 2;
// Parse the "toFile" option
var filename = null;
var lineSeparator = undefined;
if ((p < parameter.length) && parameter[p] == "toFile") {
p++;
if (p >= parameter.length) {
this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
return;
}
filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
p++;
if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
p++;
if (p >= parameter.length) {
this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
return;
}
lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
p++;
}
}
// Check for extra parameters
if (parameter.length > p) {
config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
return;
}
// Perform the action.
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
var count = tiddlers.length;
var text = "";
if (count > 0 && beginExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
for (var i = 0; i < count; i++) {
var tiddler = tiddlers[i];
text += func(tiddler, context, count, i);
}
if (count > 0 && endExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);
if (count == 0 && noneExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
if (filename) {
if (lineSeparator !== undefined) {
lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
text = text.replace(/\n/mg,lineSeparator);
}
saveFile(filename, convertUnicodeToUTF8(text));
} else {
var wrapper = createTiddlyElement(place, "span");
wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
}
};
// ---------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------
// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
return {
place : placeParam,
whereClause : whereClauseParam,
sortClause : sortClauseParam,
sortAscending : sortAscendingParam,
script : scriptText,
actionName : actionNameParam,
actionParameter : actionParameterParam,
tiddlyWikiPath : tiddlyWikiPathParam,
inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
};
};
// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
if (!idPrefix) {
idPrefix = "store";
}
var lenPrefix = idPrefix.length;
// Read the content of the given file
var content = loadFile(this.getLocalPath(path));
if(content === null) {
throw "TiddlyWiki '"+path+"' not found.";
}
var tiddlyWiki = new TiddlyWiki();
// Starting with TW 2.2 there is a helper function to import the tiddlers
if (tiddlyWiki.importTiddlyWiki) {
if (!tiddlyWiki.importTiddlyWiki(content))
throw "File '"+path+"' is not a TiddlyWiki.";
tiddlyWiki.dirty = false;
return tiddlyWiki;
}
// The legacy code, for TW < 2.2
// Locate the storeArea div's
var posOpeningDiv = content.indexOf(startSaveArea);
var posClosingDiv = content.lastIndexOf(endSaveArea);
if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
throw "File '"+path+"' is not a TiddlyWiki.";
}
var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
// Create a "div" element that contains the storage text
var myStorageDiv = document.createElement("div");
myStorageDiv.innerHTML = storageText;
myStorageDiv.normalize();
// Create all tiddlers in a new TiddlyWiki
// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
var store = myStorageDiv.childNodes;
for(var t = 0; t < store.length; t++) {
var e = store[t];
var title = null;
if(e.getAttribute)
title = e.getAttribute("tiddler");
if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
title = e.id.substr(lenPrefix);
if(title && title !== "") {
var tiddler = tiddlyWiki.createTiddler(title);
tiddler.loadFromDiv(e,title);
}
}
tiddlyWiki.dirty = false;
return tiddlyWiki;
};
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
//
// (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
var script = context["script"];
var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
var fullText = (script ? script+";" : "")+functionText+";theFunction;";
return eval(fullText);
};
// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
var result = [];
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
tiddlyWiki.forEachTiddler(function(title,tiddler) {
if (func(tiddler, context, undefined, undefined)) {
result.push(tiddler);
}
});
return result;
};
// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
var message = "Extra parameter behind '"+actionName+"':";
for (var i = firstUnusedIndex; i < parameter.length; i++) {
message += " "+parameter[i];
}
this.handleError(place, message);
};
// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
var result =
(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
? 0
: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
? -1
: +1;
return result;
};
// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
var result =
(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
? 0
: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
? +1
: -1;
return result;
};
// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
// To avoid evaluating the sortClause whenever two items are compared
// we pre-calculate the sortValue for every item in the array and store it in a
// temporary property ("forEachTiddlerSortValue") of the tiddlers.
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
var count = tiddlers.length;
var i;
for (i = 0; i < count; i++) {
var tiddler = tiddlers[i];
tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
}
// Do the sorting
tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);
// Delete the temporary property that holds the sortValue.
for (i = 0; i < tiddlers.length; i++) {
delete tiddlers[i].forEachTiddlerSortValue;
}
};
// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
displayMessage(message);
};
// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
var message ="<<"+macroName;
for (var i = 0; i < params.length; i++) {
message += " "+params[i];
}
message += ">>";
displayMessage(message);
};
// Internal.
//
// Creates an element that holds an error message
//
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
var message = (exception.description) ? exception.description : exception.toString();
return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};
// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
if (place) {
this.createErrorElement(place, exception);
} else {
throw exception;
}
};
// Internal.
//
// Encodes the given string.
//
// Replaces
// "$))" to ">>"
// "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
var reGTGT = new RegExp("\\$\\)\\)","mg");
var reGT = new RegExp("\\$\\)","mg");
return s.replace(reGTGT, ">>").replace(reGT, ">");
};
// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
//
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
// Remove any location part of the URL
var hashPos = originalPath.indexOf("#");
if(hashPos != -1)
originalPath = originalPath.substr(0,hashPos);
// Convert to a native file format assuming
// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
var localPath;
if(originalPath.charAt(9) == ":") // pc local file
localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
localPath = unescape(originalPath.substr(7));
else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
localPath = unescape(originalPath.substr(5));
else // pc network file
localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");
return localPath;
};
// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
"forEachTiddler");
//============================================================================
// End of forEachTiddler Macro
//============================================================================
//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
var n = prefix.length;
return (this.length >= n) && (this.slice(0, n) == prefix);
};
//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
var n = suffix.length;
return (this.length >= n) && (this.right(n) == suffix);
};
//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
return this.indexOf(substring) >= 0;
};
//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
for (var i = 0; i < this.length; i++) {
if (this[i] == item) {
return i;
}
}
return -1;
};
//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false.
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
return (this.indexOf(item) >= 0);
};
//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
for(var i = 0; i < items.length; i++) {
if (this.contains(items[i])) {
return true;
}
}
return false;
};
//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
//
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null]
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
for(var i = 0; i < items.length; i++) {
if (!this.contains(items[i])) {
return false;
}
}
return true;
};
} // of "install only once"
// Used Globals (for JSLint) ==============
// ... DOM
/*global document */
// ... TiddlyWiki Core
/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink,
displayMessage, endSaveArea, hasClass, loadFile, saveFile,
startSaveArea, store, wikify */
//}}}
/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
Type the text for 'ForEachTiddlerProject'
[[Freak~N~Leather : Welcome|http://www.freaknleather.com/new_website/]]
!!!Location
460 Davis Drive
Newmarket, Ontario
!!!Hours
* Tuesday & Wednesday 10:00 am - 7:00 pm
* Thursday & Friday 10:00 am - 8:00 pm
* Saturday 10:00 am - 5:00pm
* Sunday 10:00 am - 3:00pm
[[Free Motorcycle Tour Guide Nova Scotia Travel Guide|http://www.motorcycletourguidens.com/]]
[[GIVI.CA|http://www.givi.ca/en/index.php]]
[[GP Bikes Fine Motorsports :: Motorcycles|http://www.shopgpbikes.com/index.asp]] We Buy, Sell, & Trade all Makes, Models, & Years
!!!Contact
156 Harwood Ave. S.
Ajax, ON ~L1S 2H6
Tel. 905 - 428 - 8983
Service 905 - 686 - 0101
Toll 1 - 866 - 475 - 7111
[[Garmin GPS, Magellan GPS, Lowrance GPS & RAM Mount Factory Authorized Dealer - GPS City Canada|http://www.gpscity.ca/]]
[[GTA Motorcycle.ca :: Index|http://www.gtamotorcycle.ca/]]
[[GTA Motorcycle.com - Powered by vBulletin|http://www.gtamotorcycle.com/vbforum/index.php]] Toronto and Area Motorcycle Enthusiasts Online
[[GTASportriders.com|http://www.gtasportriders.com/forum/]]
[[Gears Canada :: Motorcycle - Tank Bags|http://www.gearscanada.com/]]
>All of the GEARS Motorcycle, Snowmobile, and ATV accessories can be purchased from any power sports dealer across Canada and USA. Selection varies in both Canada and the USA. Check the web site or the distributors catalogue for selection available by country. However all products can be bought online.
[[General Japanese Scooter Maintenance Information|http://www.jacksscootershop.com/maintenance.html]]
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
[[G p s P a s S i o n|http://www.gpspassion.com/fr/default.asp?_SetCurrentVersion=EN]]
[[Great Ontario Bikeroads: Best motorcycle routes in Ontario|http://bikeroads.atspace.com/]]
*[[Halcyon Classic Parts|http://classicpartsltd.com/]]
[[Haugen's Famous Original Barbeque... Cruise Nights!|http://www.haugensbbq.com/motorcycle.htm]]
>Here's what you need to know about our Motorcycle cruise in; All bikes are welcome, its free and it starts at 5pm on Thursday nights.
[[Hein Gericke USA|http://www.heingericke-usa.com/index.shtml]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/bHmRebeHvFo&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/bHmRebeHvFo&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
[[Highway Traffic Act, R.S.O. 1990, c. H.8|http://www.e-laws.gov.on.ca/html/statutes/english/elaws_statutes_90h08_e.htm]]
[[Current Models|http://www.honda.ca/MotorcycleEng/CurrentModels/default.htm?model=sport]]
[[Honda Canada CBR125R Community Forum|http://www.cbr125r.ca/]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/un8bas0Q9CY&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/un8bas0Q9CY&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
Nice [[Mark9 Deluxe Halcyon Goggles|http://www.britishmotorcyclegear.com/mark9-deluxe-halcyon-goggles.asp]]...
[<img[x|http://world.honda.com/news/2005/image/c050902/01_s.jpg]]TOKYO, Japan, September 2, 2005– Honda Motor Co., Ltd. today announced it has completed development of Honda ASV-3 Advanced Safety Vehicles equipped to exchange positional information with other vehicles using Inter-Vehicle Communication technology. This was a central objective of the five-year (April 2001-March 2006) Advanced Safety Vehicle (ASV) Project led by the Ministry of Land, Infrastructure and Transport.
[[Honda Worldwide : September 2, 2005 "Honda Completes Development of ASV-3 Advanced Safety Vehicles"|http://world.honda.com/news/2005/c050902.html]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/KytJa4i96v4&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/KytJa4i96v4&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
[[Howstuffworks "How Motorcycles Work"|http://auto.howstuffworks.com/motorcycle.htm]]
[[Home - Hully Gully|http://www.hullygully.com/en/index.spy]] the Ultimate Toy Store
[[Basic Rider Course : Humber Motorcycle Training Centre|http://www.motorcycle.humber.ca/basic.htm]]
[[Hyosung Bikes - UK media articles|http://www.hyosung.co.uk/media.php]]
[[Ian Chadwick's essay on why we ride motorcycles|http://www.ianchadwick.com/motorcycles/whyride.html]]
[[Ian Chadwick's motorcycle pages|http://www.ianchadwick.com/motorcycles/index.html]]
[[Ride Icon|http://www.rideicon.com/]]
[[Importing a Motor Vehicle To Canada (the be all end all) - GTA Motorcycle.com|http://www.gtamotorcycle.com/vbforum/showthread.php?t=1038]]
[[In-depth Study of Motorcycle Accidents UK 2005|http://www.dft.gov.uk/pgr/roadsafety/research/rsrr/theme5/indepthstudyofmotorcycleacci4784?version=1/]]
Here are some examples that show the usage of the inClause in the ForEachTiddlerMacro.
<<forEachTiddler
where
'tiddler.tags.contains("inClauseExample")'
>>
See also ForEachTiddlerExamples.
[[Welcome To Inside Motorcycles|http://www.insidemotorcycles.com/]]
[[Installing an Ammeter|http://www.motorcycleproject.com/motorcycle/text/ammeter.html]]
[[International Scooterist BBS|http://www.scooterbbs.com/]]
[[AOW Listing|http://www.ironbutt.com/tech/aow.cfm]]
[[Japan's Motorcycle Wars|http://japansmotorcyclewars.com/]]
[img[http://www.newenough.com/image/path/10823/small/red.jpg]]
[[Joe Rocket Ballistic 7.0|http://www.rocketracing.com/productJR.cfm?products_id=2568]]
*C.E. rated protectors in shoulders and elbows. Pad in back. Optional CE spine armor.
*Heavy duty 630 Hitena ® twill nylon.
*Removable insulated full sleeve liner.
*Reviews:
**[[webBikeWorld Joe Rocket Ballistic 7.0|http://www.webbikeworld.com/r4/joe-rocket-jackets/joe-rocket-ballistic-jacket.htm]]
**[[NewEnough|http://www.newenough.com/protective_apparel/textile_jackets_and_pants/joe_rocket/ballistic_7_textile_motorcycle_jacket.html]]
[[JOE ROCKET MOTORCYCLE APPAREL|http://www.joerocket.com/002-G-JR.html]]
[[Just Gotta Scoot Home Page|http://www.justgottascoot.com/]]
[[Toronto, Ontario, Kawasaki, Yamaha, ATV, Motorcycle, Utility Vehicle, Service, Parts|http://kahunapowersports.com/]]
!!!Location
4342 Steeles Avenue West Vaughan ON ~L4L 7H3
Phone: 905-264-3117
Fax: 905-264-6816
[[Google Map|http://maps.google.ca/maps?f=q&hl=en&geocode=&q=4342+Steeles+Avenue+West+Vaughan+Ontario&sll=49.891235,-97.15369&sspn=42.665208,81.5625&ie=UTF8&ll=43.767065,-79.562473&spn=0.046425,0.079651&t=h&z=14&iwloc=addr]]
[[Kawasaki|http://www.kawasaki.ca/flx/?l=en&sh=1]]
[[Kawasaki Ninja 250 : 250R : EX250 : Online Community - Powered by vBulletin|http://www.kawi250.com/]]
[[KawiForums.com Kawasaki Forums: Kawasaki motorcycle forums|http://www.kawiforums.com/]]
[[KneeDraggers.com - Sportbike Parts, Accessories, and Apparel|http://www.kneedraggers.com/]]
[[Kurveygirl|http://www.kurveygirl.com/shop/]]
>We at KurveyGirl.com is dedicated to selling hard to find motorcycle parts. Our specialty is Dzus Fasteners at unbeatable prices, but we also have: Windshield Wellnut Kits, 85deg Angled Valve stems, Kickstand pads, Tank protector pads and Safety wire quick clips (Safety Pins).
[[KymCojones|http://kymcojones.blogspot.com/]]
[[KYMCO Bet and Win 250 Scooter Review|http://www.totalmotorcycle.com/reviews/MotorcycleReview-KYMCOBetandWin250Scooter.htm]]
[[KYMCO Canada :: Scooters :: Motorcycles :: ATVs|http://www.kymco.ca/]]
[[KYMCO Global|http://www.kymco.com/]]
[[Kymco Owners Forum - Index|http://www.kymcoforum.com/index.php]]
[[Kymco People 250—July 2005|http://www.motorbyte.com/mmm/pages/2005/77/review77.htm]]
[[kymcoscooterforum : Kymco Scooter Forum|http://autos.groups.yahoo.com/group/kymcoscooterforum/]] Yahoo
[[KYMCO Venox 250 Cruiser Review|http://www.totalmotorcycle.com/reviews/MotorcycleReview-KYMCOVenox250Cruiser.htm]]
[[Picasa Web Albums - Vlad - LED brake light|http://picasaweb.google.com/vladpic/LEDBrakeLight?authkey=hP5Xmgnyg8s]]
[[An Administrative Lapse or a Suspension of a Driver's Licence - Financial Services Commission of Ontario|http://www.fsco.gov.on.ca/english/pubs/bulletins/autobulletins/2006/a-04_06.asp]]
>With this Bulletin, the Financial Services Commission of Ontario (FSCO) is describing its policy on the use, for underwriting purposes, of an administrative lapse or a suspension of a driver’s licence, where the lapse or suspension is not connected to driving offence convictions.
>
>Insurers may continue to use suspensions as a result of a driving offence conviction as currently filed.
Licensing and course information
[[Licensing Changes for Operators of Motor Scooters and Mopeds|http://www.mto.gov.on.ca/english/dandv/driver/lsm.htm]]
[[The LockItt Company - Motorcycle security, Luggage and Accessories|http://www.lockitt.com/]]
[[M2 exit checklist|http://temp.corvetteforum.net/c4/xtwinturbo//M_exam/m-exam.pdf]]
[[MCN Motorcycle News UK : MCN|http://www.motorcyclenews.com/]]
[[DEMERIT POINT SYSTEM|http://www.canlii.org/on/laws/regu/1994r.339/20070911/whole.html]]
[[DriveTest Locations|http://www.drivetest.ca/en/loc/Dec.aspx]]
[[Frequently Asked Questions: Vehicles|http://www.mto.gov.on.ca/english/faq/vehicle.htm]]
[[Getting a Driving Record|http://www.mto.gov.on.ca/english/dandv/driver/record.htm]]
[[Motorcycle Safety Course Providers|http://www.mto.gov.on.ca/english/dandv/driver/gradu/motocourse.htm]]
[[New and Alternative Vehicles|http://www.mto.gov.on.ca/english/dandv/vehicle/emerging/]]
[[Validation Sticker Renewal|http://www.mto.gov.on.ca/english/dandv/vehicle/stkrenew.htm]]
[[About MyBikeWiki]]
GettingStarted
[[Markham Outdoor Power|http://www.markhamoutdoorpower.com/mopmain.html]]
[[Online Shopping Store|http://www.hondabikeshop.com/]]
>9441 Hwy #48 (Markham Rd)
>Unit 13
>Markham, ON
<!--{{{-->
<link rel="shortcut icon" href="http://home.primus.ca/~ronsharp/favicon.ico" />
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<meta name=Description content="MyBikeWiki indexed list of motorcycle and scooter links">
<meta name="author" content="Ron Sharp">
<meta name=Keywords content="Motorcycle, Scooter, Toronto, Ontario, Ron Sharp">
<!--}}}-->
[[Mologogo: The GPS phone tracking social network & friend finding for Nextel, Boost, Blackberry and Windows Mobile Phones with GPS|http://www.mologogo.com/]]
[[Morally Ambiguous - Motorcycle information Site|http://www.morallyambiguous.net/]]
[[Moteretta|http://www.motoretta.ca/default.aspx]]
[[Moto Guzzi CANADA|http://www.motoguzzicanada.com/]]
[[Moto Liberty // #1 gear Store In Texas|http://www.motoliberty.com/default.asp]]
[[Motor Sports World|http://www.motorsportsworld.com/a1/main.jsp]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/PFXlOKcu2wM&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/PFXlOKcu2wM&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
[[Motorcycle City - Hyosung dealer, Dazon dealer, Tomos dealer|http://www.motorcyclecityinc.ca/]]
!!!Hours
*Mon - Thurs 9:30 am - 4:00 pm
*Friday 9:30 am - 2:00 pm
*Saturday 9:30 am - 1:00 pm
!!!Contact
905-787-0640 John Dailey
!!!Location
460 ELGIN MILLS RD.E.IS SITUATED BETWEEN YONGE ST.AND BAYVIEW AVE.ON THE NORTH SIDE.
[[Motorcycle Dealer and Vendors WebSites; Cycle Salvage Shops - GTA Motorcycle.com|http://www.gtamotorcycle.com/vbforum/showthread.php?t=1045]]
[[Motorcycle Hand Signals|http://www.virginiawind.com/tips/hand_signals.asp]]
[[Motorcycle Helmet Design, Helmet Standards and Head Protection - Gear Box - Motorcyclist Online|http://www.motorcyclistonline.com/gearbox/motorcycle_helmet_review/]]
>Motorcycle Helmet Performance: Blowing the Lid Off
>Searching for the truth behind motorcycle helmet design, helmet standards and actual head protection
[[Motorcycle Seat Cushion by ButtyBuddy - Removable Passenger Motorcycle Seats|http://buttybuddy.com/]]
[[Motorcycle Superstore - Motorcycle Accessories and Motorcycle Gear|http://www.motorcycle-superstore.com/]]
[[Motorcycle Tips and Techniques|http://www.msgroup.org/DISCUSS.asp]] Master Strategy Group, design by James R. Davis
[[Motorcycle Touring For Beginners|http://www.visi.com/~dalebor/index.html#contents]]
[[Motorcycle Training Course - GTA to Ottawa Ontario|http://www.motorcyclecourse.com/]]
[[Motorcycle Training Program|http://www.safety-council.org/training/mtp/mtp.htm]]
>Gearing Up is Canada’s only national motorcycle rider training program. Since 1974 hundreds of thousands of new motorcyclists across Canada have taken the program.
>
>The curriculum is based on the input from rider training and motorcycle safety experts from across Canada and around the World. Gearing Up is highly regarded throughout the World for its quality of training and program management.
[[City of Toronto: Transportation Services - Publications|http://www.toronto.ca/transportation/news/2008-04-30/]]
[[Motorcycles & Street Bikes : Find Road Bike & Sport Bike Motorcycle Reviews – Motorcyclist Magazine|http://www.motorcyclistonline.com/index.html]]
[[MOTORESS:::Connecting Women With Motorcycling|http://www.motoress.com/]]
>MOTORESS connects women with motorcycling, engaging the passion women seek in every aspect of their motorcycling daily life; fuelling knowledge from the start and beyond, supporting goals, illuminating evolution. Awareness, resource, technique, moto-style, all through a means that is proudly, entirely female.
[[Outdoor Gear - Mountain Equipment Co-op (MEC)|http://www.mec.ca/Main/home.jsp]]
[[Mp3 Players and other Hi tech products|http://www.hotmp3gear.com/]]
{{autocolumns{
<<forEachTiddler
where
'!tiddler.tags.containsAny(["excludeLists", "excludeSearch", "ForEachTiddlerMacro", "NoShow", "systemConfig"])'
sortBy
'tiddler.title.toUpperCase()'
script
'
function getGroupCaption(tiddler) {
return tiddler.title.substr(0,1).toUpperCase();
}
function getGroupTitle(tiddler, context) {
if (!context.lastGroup || context.lastGroup != getGroupCaption(tiddler)) {
context.lastGroup = getGroupCaption(tiddler);
return "!"+(context.lastGroup?context.lastGroup:"no tags")+"\n";
} else
return "";
}
'
write
'getGroupTitle(tiddler, context)+"* [[" + tiddler.title+"]]\n"'
>>
}}}
See [[Timeline]] for a chronological list of articles. On the right-hand menu, the Tags tab will provide quick access to topics.
[[mythsofmotor|http://www.novascotiabikers.com/mythsofmotor.html]]
>These are the Deadly Dozen, the motorcycle safety myths and urban legends ones that we hear most frequently.
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/-CLp_iyrfys&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/-CLp_iyrfys&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
<html><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/pPjYweKeiLk&hl=en"></param><embed src="http://www.youtube.com/v/pPjYweKeiLk&hl=en" type="application/x-shockwave-flash" width="425" height="344"></embed></object></html>
[<img[x|http://www.nationalmotorcycleshow.com/nms_08.gif]][[National Motorcycle Show|http://www.nationalmotorcycleshow.com/visitors.htm]] Exhibition Place
[[National Motorsports (Hyosung)|http://nationalmotorsports.ca]]
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.3.4|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
This plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content.
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
Enable animation for slider panels
<<option chkFloatingSlidersAnimate>> allow sliders to animate when opening/closing
>(note: This setting is in //addition// to the general option for enabling/disabling animation effects:
><<option chkAnimate>> enable animations (entire document)
>For slider animation to occur, you must also allow animation in general.
Debugging messages for 'lazy sliders' deferred rendering:
<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering
<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered
<<<
!!!!!Revisions
<<<
2008.01.08 - [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.28 - 2.3.4 added hijack for Animator.prototype.startAnimating(). Previously, the plugin code simply set the overflow to "visible" after animation. This code tweak corrects handling of elements that were styled with overflow=hidden/auto/scroll before animation by saving the overflow style and then restoring it after animation has completed.
|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.nestedSliders = {major: 2, minor: 3, revision: 4, date: new Date(2007,12,28)};
//}}}
//{{{
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;
if (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;
if (config.options.chkFloatingSlidersAnimate==undefined) config.options.chkFloatingSlidersAnimate=false;
// 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");
//}}}
//{{{
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 class=lookaheadMatch[6]
// var label=lookaheadMatch[7]
// var openlabel=lookaheadMatch[8]
// var panelID=lookaheadMatch[9]
// var blockquote=lookaheadMatch[10]
// var deferred=lookaheadMatch[11]
// 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 (lookaheadMatch[1]) show="block";
// cookie, use saved open/closed state
if (lookaheadMatch[2]) {
cookie=lookaheadMatch[2].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 (lookaheadMatch[7]) {
var parts=lookaheadMatch[7].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 (lookaheadMatch[8]) {
var parts=lookaheadMatch[8].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 (lookaheadMatch[3]) { // use "Hn" header format instead of button/link
var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,lookaheadMatch[6],title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,lookaheadMatch[6]);
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=lookaheadMatch[1]!=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.onmouseover=function(event) // mouseover on button aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel); }
// create slider panel
var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";
var panelID=lookaheadMatch[9]; 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=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):"";
panel.setAttribute("transient",lookaheadMatch[5]=="*"?"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")||!lookaheadMatch[11]) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(lookaheadMatch[10]?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",lookaheadMatch[10]?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\n\n"+panel.getAttribute("raw"));
}
}
}
}
)
// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)
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);
var theLabel = theTarget.firstChild.data;
var theSlider = theTarget.sliderPanel
var isOpen = theSlider.style.display!="none";
// 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") {
if (config.options.chkDebugLazySliderRender)
alert("rendering '"+theLabel+"':\n\n"+theSlider.getAttribute("raw"));
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")
{ ctrls[c].focus(); break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen)
saveOptionCookie(cookie);
else { // remove cookie if slider is in default display state
var ex=new Date(); ex.setTime(ex.getTime()-1000);
document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();
}
}
// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
// but allow plain click to bubble up to page background (to dismiss open popup, if any)
if (e.shiftKey) { e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
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);
// call original click handler
if (document.nestedSliders_savedOnClick)
var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
// 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;
else 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})
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
if (hasClass(panel,"floatingPanel")) {
var left=0;
var top=btn.offsetHeight;
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 (findPosX(btn)+panel.offsetWidth > getWindowWidth()) // adjust position to stay inside right window edge
left-=findPosX(btn)+panel.offsetWidth-getWindowWidth()+15; // add extra 15px 'fudge factor'
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
function getWindowWidth() {
if(document.width!=undefined)
return document.width; // moz (FF)
if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
return document.documentElement.clientWidth; // IE6
if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )
return document.body.clientWidth; // IE4
if(window.innerWidth!=undefined)
return window.innerWidth; // IE - general
return 0; // unknown
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider animation handler '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 start/stop handlers so overflow style is saved and restored after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
/**
Animator.prototype.core_startAnimating = Animator.prototype.startAnimating;
Animator.prototype.startAnimating = function() {
for(var t=0; t<arguments.length; t++)
arguments[t].element.save_overflow=arguments[t].element.style.overflow;
return this.core_startAnimating.apply(this,arguments);
};
**/
Morpher.prototype.coreStop = Morpher.prototype.stop;
Morpher.prototype.stop = function() {
this.coreStop.apply(this,arguments);
this.element.style.overflow = this.element.save_overflow||"visible";
};
}
//}}}
/***
|Name|NestedSlidersPluginInfo|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.3.4|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|documentation for NestedSlidersPlugin|
This plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content.
!!!!!Usage
<<<
Use {{{+++}}} and {{{===}}} to delimit the slider content. You can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.
Additional optional syntax elements let you specify
*default to open
*cookiename
*heading level
*floater (with optional CSS width value)
*transient display (clicking elsewhere closes panel)
*custom class/label/tooltip/accesskey
*alternate label/tooltip (displayed when panel is open)
*panelID (for later use with {{{<<DOM>>}}} macro. See [[DOMTweaksPlugin]])
*automatic blockquote style on panel
*deferred rendering of panel content
The complete syntax, using all options, is:
//{{{
++++(cookiename)!!!!!^width^*{{class{[label=key|tooltip][altlabel|alttooltip]}}}#panelID:>...
content goes here
===
//}}}
where:
* {{{+++}}} (or {{{++++}}}) and {{{===}}}<br>marks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.
* {{{(cookiename)}}}<br>saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.
* {{{!}}} through {{{!!!!!}}}<br>displays the slider label using a formatted headline (Hn) style instead of a button/link style
* {{{^width^}}} (or just {{{^}}})<br>makes the slider 'float' on top of other content rather than shifting that content downward. 'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.). If omitted, the default width is "auto" (i.e., fit to content)
* {{{"*"}}} //(without the quotes)//<br>denotes "transient display": when a click occurs elsewhere in the document, the slider/floating panel will be automatically closed. This is useful for creating 'pulldown menus' that automatically go away after they are used. //Note: using SHIFT-click on a slider label will open/close that slider without triggering the automatic closing of any transient slider panels that are currently displayed, permitting ''temporary'' display of several transient panels at once.//
* """{{class{[label=key|tooltip][altlabel|alttooltip]}}}"""<br>uses label/tooltip/accesskey. """{{class{...}}}""", """=key""", """|tooltip""" and """[altlabel|alttooltip]""" are optional. 'class' is any valid CSS class name, used to style the slider label text. 'key' must be a ''single letter only''. altlabel/alttooltip specifiy alternative label/tooltip for use when slider/floating panel is displayed.
* {{{#panelID:}}}<br>defines a unique DOM element ID that is assigned to the panel element used to display the slider content. This ID can then be used later to reposition the panel using the {{{<<DOM move id>>}}} macro (see [[DOMTweaksPlugin]]), or to access/modify the panel element through use of {{{document.getElementById(...)}}}) javascript code in a plugin or inline script.
* {{{">"}}} //(without the quotes)//<br>automatically adds blockquote formatting to slider content
* {{{"..."}}} //(without the quotes)//<br>defers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//
//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//
<<<
!!!!!Examples
<<<
simple in-line slider:
{{{
+++
content
===
}}}
+++
content
===
----
use a custom label and tooltip:
{{{
+++[label|tooltip]
content
===
}}}
+++[label|tooltip]
content
===
----
content automatically blockquoted:
{{{
+++>
content
===
}}}
+++>
content
===
----
all options combined //(default open, cookie, heading, sized floater, transient, class, label/tooltip/key, blockquoted, deferred)//
{{{
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
content
===
}}}
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
content
===
----
complex nesting example:
{{{
+++[get info...=I|click for information or press Alt-I]
put some general information here,
plus a floating panel with more specific info:
+++^10em^[view details...|click for details]
put some detail here, which could in turn contain a transient panel,
perhaps with a +++^25em^*[glossary definition]explaining technical terms===
===
===
}}}
+++[get info...=I|click for information or press Alt-I]
put some general information here,
plus a floating panel with more specific info:
+++^10em^[view details...|click for details]
put some detail here, which could in turn contain a transient panel,
perhaps with a +++^25em^*[glossary definition]explaining technical terms===
===
===
<<<
!!!!!Revisions
<<<
2008.01.08 - [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.28 - 2.3.4 added hijack for Animator.prototype.startAnimating(). Previously, the plugin code simply set the overflow to "visible" after animation. This code tweak corrects handling of elements that were styled with overflow=hidden/auto/scroll before animation by saving the overflow style and then restoring it after animation has completed.
2007.12.17 - 2.3.3 use hasClass() instead of direct comparison to test for "floatingPanel" class. Allows floating panels to have additional classes assigned to them (i.e., by AnimationEffectsPlugin).
2007.11.14 - 2.3.2 in onClickNestedSlider(), prevent SHIFT-click events from opening a new, empty browser window by setting "cancelBubble=true" and calling "stopPropagation()". Note: SHIFT-click is still processed as a normal click (i.e., it toggles the slider panel display). Also, using SHIFT-click will prevent 'transient' sliders from being automatically closed when another slider is opened, allowing you to *temporarily* display several transient sliders at once.
2007.07.26 - 2.3.1 in document.onclick(), propagate return value from hijacked core click handler to consume OR bubble up click as needed. Fixes "IE click disease", whereby nearly every mouse click causes a page transition.
2007.07.20 - 2.3.0 added syntax for setting panel ID (#panelID:). This allows individual slider panels to be repositioned within tiddler content simply by giving them a unique ID and then moving them to the desired location using the {{{<<DOM move id>>}}} macro.
2007.07.19 - 2.2.0 added syntax for alttext and alttip (button label and tooltip to be displayed when panel is open)
2007.07.14 - 2.1.2 corrected use of 'transient' attribute in IE to prevent (non-recursive) infinite loop
2007.07.12 - 2.1.0 replaced use of "*" for 'open/close on rollover' (which didn't work too well). "*" now indicates 'transient' panels that are automatically closed if a click occurs somewhere else in the document. This permits use of nested sliders to create nested "pulldown menus" that automatically disappear after interaction with them has been completed. Also, in onClickNestedSlider(), use "theTarget.sliderCookie", instead of "this.sliderCookie" to correct cookie state tracking when automatically dismissing transient panels.
2007.06.10 - 2.0.5 add check to ensure that window.adjustSliderPanel() is defined before calling it (prevents error on shutdown when mouse event handlers are still defined)
2007.05.31 - 2.0.4 add handling to invoke adjustSliderPanel() for onmouseover events on slider button and panel. This allows the panel position to be re-synced when the button position shifts due to changes in unrelated content above it on the page. (thanks to Harsha for bug report)
2007.03.30 - 2.0.3 added chkFloatingSlidersAnimate (default to FALSE), so that slider animation can be disabled independent of the overall document animation setting (avoids strange rendering and focus problems in floating panels)
2007.03.01 - 2.0.2 for TW2.2+, hijack Morpher.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
2007.03.01 - 2.0.1 in hijack for Slider.prototype.stop, use apply() to pass params to core function
2006.07.28 - 2.0.0 added custom class syntax around label/tip/key syntax: {{{{{classname{[label=key|tip]}}}}}}
2006.07.25 - 1.9.3 when parsing slider, save default open/closed state in button element, then in onClickNestedSlider(), if slider state matches saved default, instead of saving cookie, delete it. Significantly reduces the 'cookie overhead' when default slider states are used.
2006.06.29 - 1.9.2 in onClickNestedSlider(), when setting focus to first control, skip over type="hidden"
2006.06.22 - 1.9.1 added panel.defaultPanelWidth to save requested panel width, even after resizing has changed the style value
2006.05.11 - 1.9.0 added optional '^width^' syntax for floating sliders and '=key' syntax for setting an access key on a slider label
2006.05.09 - 1.8.0 in onClickNestedSlider(), when showing panel, set focus to first child input/textarea/select element
2006.04.24 - 1.7.8 in adjustSliderPos(), if floating panel is contained inside another floating panel, subtract offset of containing panel to find correct position
2006.02.16 - 1.7.7 corrected deferred rendering to account for use-case where show/hide state is tracked in a cookie
2006.02.15 - 1.7.6 in adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)
2006.02.04 - 1.7.5 add 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals
2006.01.18 - 1.7.4 only define adjustSliderPos() function if it has not already been provided by another plugin. This lets other plugins 'hijack' the function even when they are loaded first.
2006.01.16 - 1.7.3 added adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels. While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels. Short-term workaround is to only adjust the position for 'top-level' floaters.
2006.01.16 - 1.7.2 added button property to slider panel elements so that slider panel can tell which button it belongs to. Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
2006.01.14 - 1.7.1 added optional "^" syntax for floating panels. Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.
2006.01.14 - 1.7.0 added optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)
2006.01.03 - 1.6.2 When using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element. (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)
2005.12.15 - 1.6.1 added optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders
removed checkbox option for 'global' application of lazy sliders
2005.11.25 - 1.6.0 added optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)
2005.11.21 - 1.5.1 revised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability. Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.
2005.11.20 - 1.5.0 added (cookiename) syntax for optional tracking and restoring of slider open/close state
2005.11.11 - 1.4.0 added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style
2005.11.07 - 1.3.0 removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other formatting extensions) and simplified/improved regular expressions to trim multiple excess newlines
2005.11.05 - 1.2.1 changed name to NestedSlidersPlugin
2005.11.04 - 1.2.0 added alternative character-mode syntax {{{(((}}} and {{{)))}}}
tweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax
2005.11.03 - 1.1.1 fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used. code cleanup, added documentation
2005.11.03 - 1.1.0 changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}. changed name to EasySlidersPlugin
2005.11.03 - 1.0.0 initial public release
<<<
[[NewbieRiders.com:Motorcycle News and Reviews|http://www.newbieriders.com/]]
[[Newmarket Scooter and Cycle|http://www.newmarketscooter.ca/]]
16700 Bayview Ave, Unit 25
Newmarket, Ontario, ~L3X 1W1
Bus: (905) 898-4165
Fax: (905) 898-6387
|!Winter hours|>|h
|!Sunday|Open by appointment|
|!Monday|Open by appointment|
|!Tuesday|10:00am - 6:00pm|
|!Wednesday|10:00am - 6:00pm|
|!Thursday|10:00am - 6:00pm|
|!Friday|10:00am - 6:00pm|
|!Saturday|10:00am - 5:00pm|
[[Ninja250 Riders Club :: Index|http://forums.ninja250.org/]]
[[Nolan Helmets : Motorcycle Helmets for Street and Off Road|http://www.nolanhelmets.com/]]
[[Nolan N102 NCom Helmet : Nolan N102 Modular Helmet : Nolan Ncom Modular N102 Helmet|http://www.extremesupply.com/nolanhelmets/n102ncomsolids.htm#Parts]]
[[Nolangroup|http://ncom.nolan.it/system/Index_ENG.htm]]
[[Non-leather Motorcycle Gear (Vegan Motorcylist)|http://www.waterjets.org/vegan_motorcyclist.html]]
[[Northern Motorsports|http://www.northernmotorsports.com/]]
!!!Location
Brantford, Ontario
[[OVR - Orangeville Valley Riders|http://www.ovr.ca/mainpage.htm]]
[img[Olympia|http://www.olympiamotosports.com/index_photos/ast1.jpg]]
[[Olympia AST All Seasons Touring Jacket|http://www.olympiamotosports.com/ast_mens/ast_mens.htm]]
*Doesn't sell direct. (866) 473-4327
*~CE-approved armor in the shoulders, elbows and back.
*Outer shell constructed in coated 500 and 1500 denier Dupont Cordura
*Thermolite insulated liner jacket
*Reviews:
**[[webBikeWorld|http://www.webbikeworld.com/r3/olympia-ast/]]
*Men’s Ranger 2 Over Pant:
**Removable and adjustable height CE Motion Flex armor at knees
**Removable EVA compression foam at hips
[[Olympia Moto Sports - Home Page|http://www.olympiamotosports.com/home.htm]]
[[ontario_bikeroads.jpg (JPEG Image, 3880x3166 pixels)|http://www.noinfo.com/ontario_bikeroads.jpg]]
[img[Ontario Bikeroads Map|http://www.noinfo.com/ontario_bikeroads.jpg]]
[[Ontario Cycle Salvage Ltd. Used Motorcycle Parts and Service Repairs Toronto|http://www.ontariocyclesalvage.com/]]
*[[Ontario Parks Map|http://www.ontarioparks.com/english/ont_map.html]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/y0kZKI6hUwE&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/y0kZKI6hUwE&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
These InterfaceOptions for customising TiddlyWiki are saved in your browser
Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)
<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations
----
[[Firefox Privileges Wizard]]
----
Also see AdvancedOptions
[[Oregon Scientific : Digital Cameras|http://www2.oregonscientific.com/shop/browse.asp?cid=8&scid=14]]
[[The Original Motorcycle Cafe|http://www.originalmotorcyclecafe.com/]]
[[Oshawa Cycle|http://www.oshawacycle.com/]]
[[Home - PGO Scooters|http://www.pgoscooters.ca/?lang=en]]
[[Motoplastic - PUIG|http://www.puigusa.com/]]
[[Pannon moto Sports|http://www.pannonsports.com/index.asp]]
!!!Location
We are conveniently located in the heart of Mississauga, in a picturesque village called Streetsville. The exact address is: 169 Crumbie St. unit 4, Streetsville (Mississauga), ON ~L5M 1H7, Canada
!!!Shop hours
Shop hours and rate
Regular
Sunday Closed
Monday Closed
Tuesday 11:00am - 7:00pm
Wednesday 11:00am - 7:00pm
Thursday 11:00am - 7:00pm
Friday 11:00am - 7:00pm
Saturday 10:00am - 5:00pm
>We try to keep our overhead at minimum and pass the savings onto our customers. We hope that you'll find our rate of $60/hour very attractive and affordable.
[[Welcome to Parker Bros. Powersports|http://www.powersports.ca/]]
!!!Location
Parker Bros. Powersports
5324 Dundas St West
Toronto, Ontario
~M9B 1B4
!!!Hours
*Monday to Wednesday: 10am - 7pm
*Thursday and Friday: 10am - 8pm
*Saturday: 10am -5 pm
*Sunday: Gone Ridin'
[[Parks Canada - Banff National Park of Canada - Fees|http://www.pc.gc.ca/pn-np/ab/banff/visit/tarifs-fees_e.asp?park=1]]
[[Parks Canada - Banff National Park of Canada - Visitor Information - Camping|http://www.pc.gc.ca/pn-np/ab/banff/visit/visit9b_E.asp]]
/***
|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|
|''Version:''|1.0.9 (2007-07-14)|
|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.3|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Table of Content<html><a name="TOC"/></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>
!Description<html><a name="Description"/></html>
With the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts.
Each part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features"). E.g. you may create links to the parts (e.g. {{{[[Quotes/BAX95]]}}} or {{{[[Hobbies|AboutMe/Hobbies]]}}}), use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.
''Syntax:''
|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|
|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//. <<br>>If you use a partName containing spaces you need to quote it (e.g. {{{"Major Overview"}}} or {{{[[Shortcut List]]}}}).|
|''hidden''|When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|
|<html><i>any tiddler content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!Applications<html><a name="Applications"/></html>
!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>
Assume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.
Notice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!!Citation Index<html><a name="Citation"/></html>
Create a tiddler "Citations" that contains your "citations".
Wrap every citation with a part and a proper name.
''Example''
{{{
<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.//
in //Proc. ICSM//, 1998.</part>
<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.//
Thesis, Uni Stuttgart, 2002.</part>
<part DUC99>Ducasse, Stéfane et al: //A Language Independent Approach for Detecting Duplicated Code.//
in //Proc. ICSM//, 1999.</part>
}}}
You may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>
You may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list
{{{
* Item 1
* Item 2
* Item 3
}}}
into a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.
Using the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.
''Example''
{{{
|!Subject|!Items|
|subject1|<<tiddler ./Cell1>>|
|subject2|<<tiddler ./Cell2>>|
<part Cell1 hidden>
* Item 1
* Item 2
* Item 3
</part>
...
}}}
Notice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".
BTW: The same approach can be used to create bullet lists with items that contain more than one line.
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!!Creating Tabs<html><a name="Tabs"/></html>
The build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.
With the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.
''Example''
The standard tabs at the sidebar are defined by the following eight tiddlers:
* SideBarTabs
* TabAll
* TabMore
* TabMoreMissing
* TabMoreOrphans
* TabMoreShadowed
* TabTags
* TabTimeline
Instead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:
{{{
<<tabs txtMainTab
Timeline Timeline SideBarTabs/Timeline
All 'All tiddlers' SideBarTabs/All
Tags 'All tags' SideBarTabs/Tags
More 'More lists' SideBarTabs/More>>
<part Timeline hidden><<timeline>></part>
<part All hidden><<list all>></part>
<part Tags hidden><<allTags>></part>
<part More hidden><<tabs txtMoreTab
Missing 'Missing tiddlers' SideBarTabs/Missing
Orphans 'Orphaned tiddlers' SideBarTabs/Orphans
Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>
<part Missing hidden><<list missing>></part>
<part Orphans hidden><<list orphans>></part>
<part Shadowed hidden><<list shadowed>></part>
}}}
Notice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.
E.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler "~SideBarTabs/Timeline" with the following content:
{{{
<<forEachTiddler
sortBy 'tiddler.modified' descending
write '(index < 100) ? "* [["+tiddler.title+"]]\n":""'>>
}}}
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!!Using Sliders<html><a name="Sliders"/></html>
Very similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature
''Example''
In a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.
{{{
...
<<slider chkAboutDetails About/Details details "Click here to see more details">>
<part Details hidden>
To give you a better overview ...
</part>
...
}}}
Notice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the "old" approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the ''part'' approach results in a much short workflow.
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!Revision history<html><a name="Revisions"/></html>
* v1.0.9 (2007-07-14)
** Bugfix: Error when using the SideBarTabs example and switching between "More" and "Shadow". Thanks to cmari for reporting the issue.
* v1.0.8 (2007-06-16)
** Speeding up display of tiddlers containing multiple pard definitions. Thanks to Paco Rivière for reporting the issue.
** Support "./partName" syntax inside <<tabs ...>> macro
* v1.0.7 (2007-03-07)
** Bugfix: <<tiddler "./partName">> does not always render correctly after a refresh (e.g. like it happens when using the "Include" plugin). Thanks to Morris Gray for reporting the bug.
* v1.0.6 (2006-11-07)
** Bugfix: cannot edit tiddler when UploadPlugin by Bidix is installed. Thanks to José Luis González Castro for reporting the bug.
* v1.0.5 (2006-03-02)
** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.
* v1.0.4 (2006-02-28)
** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.
* v1.0.3 (2006-02-26)
** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.
* v1.0.2 (2006-02-05)
** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)
* v1.0.1 (2006-01-27)
** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.
** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.
* v1.0.0 (2006-01-25)
** initial version
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!Code<html><a name="Code"/></html>
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
***/
//{{{
//============================================================================
// PartTiddlerPlugin
// Ensure that the PartTiddler Plugin is only installed once.
//
if (!version.extensions.PartTiddlerPlugin) {
version.extensions.PartTiddlerPlugin = {
major: 1, minor: 0, revision: 9,
date: new Date(2007, 6, 14),
type: 'plugin',
source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"
};
if (!window.abego) window.abego = {};
if (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");
//============================================================================
// Common Helpers
// Looks for the next newline, starting at the index-th char of text.
//
// If there are only whitespaces between index and the newline
// the index behind the newline is returned,
// otherwise (or when no newline is found) index is returned.
//
var skipEmptyEndOfLine = function(text, index) {
var re = /(\n|[^\s])/g;
re.lastIndex = index;
var result = re.exec(text);
return (result && text.charAt(result.index) == '\n')
? result.index+1
: index;
}
//============================================================================
// Constants
var partEndOrStartTagRE = /(<\/part>)|(<part(?:\s+)((?:[^>])+)>)/mg;
var partEndTagREString = "<\\/part>";
var partEndTagString = "</part>";
//============================================================================
// Plugin Specific Helpers
// Parse the parameters inside a <part ...> tag and return the result.
//
// @return [may be null] {partName: ..., isHidden: ...}
//
var parseStartTagParams = function(paramText) {
var params = paramText.readMacroParams();
if (params.length == 0 || params[0].length == 0) return null;
var name = params[0];
var paramsIndex = 1;
var hidden = false;
if (paramsIndex < params.length) {
hidden = params[paramsIndex] == "hidden";
paramsIndex++;
}
return {
partName: name,
isHidden: hidden
};
}
// Returns the match to the next (end or start) part tag in the text,
// starting the search at startIndex.
//
// When no such tag is found null is returned, otherwise a "Match" is returned:
// [0]: full match
// [1]: matched "end" tag (or null when no end tag match)
// [2]: matched "start" tag (or null when no start tag match)
// [3]: content of start tag (or null if no start tag match)
//
var findNextPartEndOrStartTagMatch = function(text, startIndex) {
var re = new RegExp(partEndOrStartTagRE);
re.lastIndex = startIndex;
var match = re.exec(text);
return match;
}
//============================================================================
// Formatter
// Process the <part ...> ... </part> starting at (w.source, w.matchStart) for formatting.
//
// @return true if a complete part section (including the end tag) could be processed, false otherwise.
//
var handlePartSection = function(w) {
var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);
if (!tagMatch) return false;
if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;
// Parse the start tag parameters
var arguments = parseStartTagParams(tagMatch[3]);
if (!arguments) return false;
// Continue processing
var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);
var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);
if (endMatch && endMatch[1]) {
if (!arguments.isHidden) {
w.nextMatch = startTagEndIndex;
w.subWikify(w.output,partEndTagREString);
}
w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);
return true;
}
return false;
}
config.formatters.push( {
name: "part",
match: "<part\\s+[^>]+>",
handler: function(w) {
if (!handlePartSection(w)) {
w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);
}
}
} )
//============================================================================
// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers
// as tiddlers.
var currentParent = null; // used for the "." parent (e.g. in the "tiddler" macro)
// Return the match to the first <part ...> tag of the text that has the
// requrest partName.
//
// @return [may be null]
//
var findPartStartTagByName = function(text, partName) {
var i = 0;
while (true) {
var tagMatch = findNextPartEndOrStartTagMatch(text, i);
if (!tagMatch) return null;
if (tagMatch[2]) {
// Is start tag
// Check the name
var arguments = parseStartTagParams(tagMatch[3]);
if (arguments && arguments.partName == partName) {
return tagMatch;
}
}
i = tagMatch.index+tagMatch[0].length;
}
}
// Return the part "partName" of the given parentTiddler as a "readOnly" Tiddler
// object, using fullName as the Tiddler's title.
//
// All remaining properties of the new Tiddler (tags etc.) are inherited from
// the parentTiddler.
//
// @return [may be null]
//
var getPart = function(parentTiddler, partName, fullName) {
var text = parentTiddler.text;
var startTag = findPartStartTagByName(text, partName);
if (!startTag) return null;
var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);
var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);
if (indexOfEndTag >= 0) {
var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);
var partTiddler = new Tiddler();
partTiddler.set(
fullName,
partTiddlerText,
parentTiddler.modifier,
parentTiddler.modified,
parentTiddler.tags,
parentTiddler.created);
partTiddler.abegoIsPartTiddler = true;
return partTiddler;
}
return null;
}
// Hijack the store.fetchTiddler to recognize the "part" addresses.
//
var hijackFetchTiddler = function() {
var oldFetchTiddler = store.fetchTiddler ;
store.fetchTiddler = function(title) {
var result = oldFetchTiddler.apply(this, arguments);
if (!result && title) {
var i = title.lastIndexOf('/');
if (i > 0) {
var parentName = title.substring(0, i);
var partName = title.substring(i+1);
var parent = (parentName == ".")
? store.resolveTiddler(currentParent)
: oldFetchTiddler.apply(this, [parentName]);
if (parent) {
return getPart(parent, partName, parent.title+"/"+partName);
}
}
}
return result;
};
};
// for debugging the plugin is not loaded through the systemConfig mechanism but via a script tag.
// At that point in the "store" is not yet defined. In that case hijackFetchTiddler through the restart function.
// Otherwise hijack now.
if (!store) {
var oldRestartFunc = restart;
window.restart = function() {
hijackFetchTiddler();
oldRestartFunc.apply(this,arguments);
};
} else
hijackFetchTiddler();
// The user must not edit a readOnly/partTiddler
//
config.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;
Tiddler.prototype.isReadOnly = function() {
// Tiddler.isReadOnly was introduced with TW 2.0.6.
// For older version we explicitly check the global readOnly flag
if (config.commands.editTiddler.oldIsReadOnlyFunction) {
if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;
} else {
if (readOnly) return true;
}
return this.abegoIsPartTiddler;
}
config.commands.editTiddler.handler = function(event,src,title)
{
var t = store.getTiddler(title);
// Edit the tiddler if it either is not a tiddler (but a shadowTiddler)
// or the tiddler is not readOnly
if(!t || !t.abegoIsPartTiddler)
{
clearMessage();
story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);
story.focusTiddler(title,"text");
return false;
}
}
// To allow the "./partName" syntax in macros we need to hijack
// the invokeMacro to define the "currentParent" while it is running.
//
var oldInvokeMacro = window.invokeMacro;
function myInvokeMacro(place,macro,params,wikifier,tiddler) {
var oldCurrentParent = currentParent;
if (tiddler) currentParent = tiddler;
try {
oldInvokeMacro.apply(this, arguments);
} finally {
currentParent = oldCurrentParent;
}
}
window.invokeMacro = myInvokeMacro;
// To correctly support the "./partName" syntax while refreshing we need to hijack
// the config.refreshers.tiddlers to define the "currentParent" while it is running.
//
(function() {
var oldTiddlerRefresher= config.refreshers.tiddler;
config.refreshers.tiddler = function(e,changeList) {
var oldCurrentParent = currentParent;
try {
currentParent = e.getAttribute("tiddler");
return oldTiddlerRefresher.apply(this,arguments);
} finally {
currentParent = oldCurrentParent;
}
};
})();
// Support "./partName" syntax inside <<tabs ...>> macro
(function() {
var extendRelativeNames = function(e, title) {
var nodes = e.getElementsByTagName("a");
for(var i=0; i<nodes.length; i++) {
var node = nodes[i];
var s = node.getAttribute("content");
if (s && s.indexOf("./") == 0)
node.setAttribute("content",title+s.substr(1));
}
};
var oldHandler = config.macros.tabs.handler;
config.macros.tabs.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var result = oldHandler.apply(this,arguments);
if (tiddler)
extendRelativeNames(place, tiddler.title);
return result;
};
})();
// Scroll the anchor anchorName in the viewer of the given tiddler visible.
// When no tiddler is defined use the tiddler of the target given event is used.
window.scrollAnchorVisible = function(anchorName, tiddler, evt) {
var tiddlerElem = null;
if (tiddler) {
tiddlerElem = document.getElementById(story.idPrefix + tiddler);
}
if (!tiddlerElem && evt) {
var target = resolveTarget(evt);
tiddlerElem = story.findContainingTiddler(target);
}
if (!tiddlerElem) return;
var children = tiddlerElem.getElementsByTagName("a");
for (var i = 0; i < children.length; i++) {
var child = children[i];
var name = child.getAttribute("name");
if (name == anchorName) {
var y = findPosY(child);
window.scrollTo(0,y);
return;
}
}
}
} // of "install only once"
//}}}
/***
<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
***/
[[Parts Canada - Motorcycle, ATV, MX, and snowmobile aftermarket parts and accessories|http://www.partscanada.com/]]
[[Personal, Business and Commercial Insurance - Holman Insurance Brokers Ltd., Markham, Canada|http://holmanins.com/]]
Avi Singh
Holman Insurance Brokers Ltd.
400-7050 Woodbine Ave
Markham, ON
~L3R 4G8
416-936-6171 direct
905-886-5630 ext. 1391
avinashs@holmanins.com
[[Piaggio Canada|http://www.piaggiocanada.com/pscooters/bv250.cfm]]
[[Pickering Village Motors|http://pickeringvillagemotors.ca/]]
!!!Contact
599 Kingston Rd. W
Ajax, Ontario ~L1S 6M1
Telephone: 905-686-6928
(Toll Free) 1-888-686-6928
Fax 905-686-0497
!!!Hours
*Monday - Thursday: 8 am - 7 pm
*Friday: 8 am - 5 pm
*Saturday: 9 am - 5 pm
*Sunday: closed
[[Portable DVR & Solid State SD Card Recorder For Extreme Sport Manufacturer exporting direct from Taiwan|http://www.alibaba.com/catalog/100063680/Portable_DVR_Solid_State_SD_Card_Recorder_For_Extreme_Sport.html]]
[[Power-Assisted Bicycle ("e-bike") Pilot Test - FAQ|http://www.mto.gov.on.ca/english/dandv/vehicle/emerging/e-bike-faq.htm#1]]
[[motorcycle Prince Edward Island touring guide for bikers|http://www.motorcyclepei.com/]]
[[Product Listing - HelmetCamera_Kits|http://www.helmetcamera.com/acart/agora.cgi?cart_id=1595950.32028*Kq0Rt8&xm=on&ppinc=HelmetCamera_Kits&product=HelmetCamera_Kits]]
[[Choosing the Right Auto Insurance Coverage - RBC Insurance|http://www.rbcinsurance.com/auto/selecting-auto-insurance.html]]
[[how to import|http://www.riv.ca/english/html/how_to_import.html]]
[[Radioworld Canada : Radioworld Canada Amateur Ham Radio GPS Marine VHF SSB radios Shortwave Wideband Radio Scanners CB FRS Central Toronto Ontario Canada|http://www.radioworld.ca/]]
[[Reporting Collisions|http://www.mto.gov.on.ca/english/safety/topics/reporting.htm]]
[[Ride To Work::|http://www.ridetowork.org/]] July 16th, 2008
[[Ride for Sight ...because you can!|http://www.rideforsight.org]]
>Probable date: Jun 18th-20th, 2010.
[[Motorcycle Helmets, Motorcycle Accessories from RideGear.com|http://www.ridegear.com/]]
[[Rider Training Institute-Basic Course Description|http://www.ridertraining.ca/M1X-description.html]]
[[Welcome To Riders Choice!|http://www.riderschoice.ca]]
!!!Hours
Mon,Tues,Wed, Fri: 10-7
Thurs: 10-8
Sat: 10-5
!!!Contact
Info@riderschoice.ca
Phone/Fax:
Phone: (905) 896-RIDE
Fax: (905) 896-2727
!!!Address
2276 Dixie Rd.
Mississauga, Ontario, Canada
~L4Y 1Z4
[[Riders Plus Insurance - Ontario's Largest Motorcycle Insurance Broker|http://www.ridersplus.com/home.html]]
[[ROAD WATCH.ca :|http://www.roadwatch.ca/citizen_report_form.htm]]
>ROAD WATCH encourages citizens to participate in a program to improve road saftey in their community by reporting unsafe driving behaviours and "hot spots" in the community where unsafe driving habits are common occurrences. Citizen report forms have been designed to give police services the necessary information to appropriately deal with the acts of unsafe driving.
[[Rock the Scooter - Oi! Join the crusade.|http://www.rockthescooter.com/]]
[img[Rock the Scooter|http://www.rockthescooter.com/slices/bg_r2_c1.jpg]]
[[Royal Distributing - Snowmobile Parts and Accessories. ATV, Motorcycle Parts and Accessories.|http://www.royaldistributing.com/07/]]
1.800.265.2970
!!!Hours
RETAIL STORE HOURS
Mon - Wed 9am - 6pm
Thurs 9am - 8pm
Fri 9am - 9pm
Sat 9am - 5pm
Sun 10am - 4pm
Open 7 Days a Week!
!!!Stores
!!!!Guelph Location
519.822.7081
925 Woodlawn Rd. W.
Guelph, ON ~N1K 1B7
!!!!Innisfil Location
705.431.9364
1954 Commerce Pk Dr.
Innisfil, ON ~L9S 4A3
[[Google Map|http://maps.google.ca/maps?f=q&hl=en&geocode=&q=1954+Commerce+Pk+Dr.+Innisfil,+ON+L9S+4A3+&sll=49.891235,-97.15369&sspn=42.665208,81.5625&ie=UTF8&t=h&z=16&iwloc=addr]]
!!!!Sudbury Location
705.566.8111
1737 Lasalle Blvd.,
Sudbury, ON ~P3A 1Z8
[[SHARP - The Helmet Safety Scheme|http://dft-1-sharp.eduserv.org.uk/]]
[[Safety Tips, Tricks & Techniques|http://www.ridemyown.com/articles/safety/BTB-tipstricks.shtml]]
*[[Scooter Events @ Scooterworks|http://www.scooterworks.com/rssfeed.cfm]]
[[Scooter Rider Styling|http://mail.rochester.edu/~msteinwa/scootering.us/]]
[[Scorpio Alarms Home|http://www.scorpioalarms.com/]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/RYYSfkvc75U&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/RYYSfkvc75U&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
Here are some examples that show the usage of the scriptClause in the ForEachTiddlerMacro.
<<forEachTiddler
where
'tiddler.tags.contains("scriptClauseExample")'
>>
See also ForEachTiddlerExamples.
Generally bike and scooter stuff
http://home.primus.ca/~ronsharp/BikeWiki.html
[[Toronto, Ontario, Can-Am, Honda, Yamaha, ATV, motorcycle, watercraft, used, dealer, parts, accessories, apparel|http://www.snowcity.com/]]
1255 Kennedy Rd, Toronto.
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};
//--
//-- Sparklines
//--
config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
var data = [];
var min = 0;
var max = 0;
var v;
for(var t=0; t<params.length; t++) {
v = parseInt(params[t]);
if(v < min)
min = v;
if(v > max)
max = v;
data.push(v);
}
if(data.length < 1)
return;
var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
box.title = data.join(",");
var w = box.offsetWidth;
var h = box.offsetHeight;
box.style.paddingRight = (data.length * 2 - w) + "px";
box.style.position = "relative";
for(var d=0; d<data.length; d++) {
var tick = document.createElement("img");
tick.border = 0;
tick.className = "sparktick";
tick.style.position = "absolute";
tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
tick.style.left = d*2 + "px";
tick.style.width = "2px";
v = Math.floor(((data[d] - min)/(max-min)) * h);
tick.style.top = (h-v) + "px";
tick.style.height = v + "px";
box.appendChild(tick);
}
};
}
//}}}
[[Sport Bike Dude Homepage|http://www.sportbikedude.com/]]
http://www.gtamotorcycle.com/vbforum/showthread.php?t=57101
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/o6J5gR1_NFk&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/o6J5gR1_NFk&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
[[State Farm: Sabrina Paul. THUMBS UP - GTA Motorcycle.com|http://www.gtamotorcycle.com/vbforum/showthread.php?t=55656]]
[[Stolen bike registry - GTA Motorcycle.com|http://www.gtamotorcycle.com/vbforum/showthread.php?t=25704]]
[[Stolen-bike.com|http://www.stolen-bike.com/]]
[[Streetglo Motorcycle Decals Reflective helmet stickers boat lettering and Reflective tape Custom stickers Pinstriping and vehicle graphics. Helmet flame and motorcycle stickers. Reflective tape and motorcycle helmet decals.|http://www.streetglo.net/]]
*[[Studio Cycle Group|http://www.studiocyclegroup.com/]]
[[CANADA'S OLDEST POWERSPORT DEALERSHIP|http://www.sturgessonline.com/]]
!!!Location
West Hamilton, Ontario
/***
Place your custom CSS here
***/
/*{{{*/
[[StyleSheetMB]]
[[Styles HorizontalMainMenu]]
body {font-size:.75em; font-family:tahoma,arial,verdana,helvetica,sans serif; margin:0; padding:0;}
.tiddlyLinkExisting {font-weight:normal;}
.twocolumns { display:block; -moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%;}
.threecolumns { display:block; -moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%}
.fourcolumns { display:block; -moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%}
.autocolumns { display:block; -moz-column-count:auto; -moz-column-gap:1em; -moz-column-width:250px}
h1,h2,h3 {padding-bottom:1px; margin-top:0.5em;margin-bottom:0.2em;}
h4,h5,h6 {padding-bottom:1px; margin-top:0.5em;margin-bottom:0.2em;}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}
body {font-size:.75em; font-family:arial,helvetica; }
h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}
hr {height:1px;}
a {text-decoration:none;}
dt {font-weight:bold;}
ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}
.txtOptionInput {width:11em;}
#contentWrapper .chkOptionInput {border:0;}
.externalLink {text-decoration:underline;}
.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}
/*.tiddlyLinkExisting {font-weight:bold;}*/
.tiddlyLinkNonExisting {font-style:italic;}
/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}
#mainMenu .tiddlyLinkExisting,
#mainMenu .tiddlyLinkNonExisting,
#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}
.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}
.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}
#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}
#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}
#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}
.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}
.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
#displayArea {margin:1em 17em 0em 14em;}
.toolbar {text-align:right; font-size:.9em;}
.tiddler {padding:1em 1em 0em 1em;}
.missing .viewer,.missing .title {font-style:italic;}
.title {font-size:1.6em; font-weight:bold;}
.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}
.tiddler .button {padding:0.2em 0.4em;}
.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}
.footer {font-size:.9em;}
.footer li {display:inline;}
.annotation {padding:0.5em; margin:0.5em;}
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}
.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}
.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}
.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}
.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}
.sparkline {line-height:1em;}
.sparktick {outline:0;}
.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}
* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/*{{{*/
h1 {font-size:1.5em;}
h2 {font-size:1.35em;}
h3 {font-size:1.25em;}
h4 {font-size:1.1em;}
h5 {font-size:1em;}
/*element,padding,border,margin*/
/*h1, h2, h3, h4, h5 {
color:#014;background:transparent;
padding-left:0;padding-bottom:1px;
margin-top:1.2em;margin-bottom:0.3em;margin-left:0em;
}*/
h1 {border-bottom:2px solid #ccc;}
h2, h3 {border-bottom:1px solid #ccc;}
h4, h5 {border-bottom:0px;margin-top:1em;margin-bottom:0em;}
hr {height:0px;border:0;border-top:1px solid silver;}
.headerShadow {padding:1.5em 0em .5em 1em;}
.headerForeground {padding:1.5em 0em .5em 1em;}
.header {background:#005151;}
/*.headerShadow {color:white;}
.headerForeground {color:black;}*/
#displayArea .tiddlyLinkExisting {text-decoration:none;}
/* Tiddler title */
.title {color:black;border-bottom:2px solid #ddd;}
/* Tiddler subtitle */
.subtitle {font-size:0.9em;text-align:right;border-bottom:1px solid #ddd;}
.toolbar {padding-top:0px;padding-bottom:0px;color:#04b;}
/* Tiddler body */
.tiddler {-moz-border-radius:1em;border:1px solid #ccc;margin:0.5em;background:#fff;padding:0.5em;}
.tabContents {white-space:nowrap;}
.viewer pre {padding:0;margin-left:0;}
.viewer hr {border:solid 1px silver;}
/*.toolbar {visibility:visible}*/
.selected .toolbar {visibility:visible;color:#00f;}
.toolbar .button {color:#dee;}
.selected .toolbar .button {color:#014}
.tagging, .tagged, .selected .tagging, .selected .tagged {
font-size:75%;padding:0.3em;background-color:#eee;
border-top:1px solid #ccc;border-left:1px solid #ccc;
border-bottom:3px solid #ccc;border-right:3px solid #ccc;
max-width:45%;-moz-border-radius:1em;
}
/*}}}*/
/***
To use, add {{{[[Styles HorizontalMainMenu]]}}} to your StyleSheet tiddler.
See http://www.w3schools.com/css/css_colors.asp for a color chart.
***/
/*{{{*/
#mainMenu {position:relative;left:auto;width:auto;text-align:left;line-height:normal;padding 0em 1em 0em 1em;font-size:normal;}
#mainMenu br {display:none;}
#mainMenu {background:#336699;}
#mainMenu {padding:2px;}
#mainMenu .button, #mainMenu .tiddlyLink {padding-left:0.5em;padding-right:0.5em;color:white;font-size:115%;}
/*#displayArea {margin:1em 15.7em 0em 1em;}*/
#displayArea {
/* background-color:#eef;*/
margin-top:0;margin-right:15.5em;margin-bottom:0;margin-left:1em;
padding-top:.1em;padding-bottom:.1em;
}
/*}}}*/
[[GPS Motorcycle Rides : Canada : SundayMorningRides.com|http://www.sundaymorningrides.com/canada/]]
[[Suzuki|http://moto.suzuki.ca/Home.aspx?province=ON&culture=en-CA]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/9DD99mtI3Po&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/9DD99mtI3Po&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
[[E-BIKES - TNG Motor Scooters|http://www.tngscooters.ca/default.aspx]]
[[Tango Trikes : The Official Site For the Tango Commuter Car 3 Wheeled Trikes|http://www.tangotrikes.com/index.php]]
General working-on-bike stuff
[[TECHMOUNT - Home|http://www.techmounts.com/]]
[[The Bike Yard - Toronto Area Motorcycle Shop Specializing In Used Motorcycle Parts And Parts Searches|http://www.bikeyard.com/]]
[[The BikePal motorcycle dolly|http://www.thebikepal.com/]]
[[The Cycle Guys Online Store|http://thecycleguys.com/]] ~FastPack tail bag
[[The Lazy Motorbike, for Motorcycle Riders|http://www.lazymotorbike.eu/]]
Welcome on the Lazy Motorbike site.
Motorcycle riding is our passion. On this site, we offer tips and information about motorcycles and motorcycle riding.
!!!Tips for motorcycle riding
In the Tips for motorcycle riding section you will find information and tips about techniques for motorcycle riding. You can reach each individual page through the menu on the left.
!!!Touring in Europe
The Touring section has information about motorcycle riding in Europe, and individiual countries in Europe: traffic rules and traffic culture, how to find good roads, etc.
!!!Motorcycles
The Motorcycle section has information on what is important when you are looking for a beginners' bike. From time to time, ride reports emphasing aspects for the beginner will appear here as well.
!!!Technical
The Technical section explains technical stuff that is important when you want to understand differences in "character" between motorcycles, such as torque, power, and how to break in a new motorcycle.
[[The Lonely Rider : Home|http://www.thelonelyrider.com/]]
>Although fairly new to riding in general, I have fallen in love with country touring and also have an affection for spirited cornering. With that in mind, I have aquired various pieces of gear and equipment that complement both riding styles and make a point to get out and ride as much as possible.
[[The Motorcycle Store - Welcome|http://www.themotorcyclestore.net/]]
!!!Location
1599 Sedlescomb Dr.
Mississauga, Ontario
~L4X 1M4
[[The Motorcyclist - Toronto's newest motorcycle & scooter parts, accessories, sales and repair shop for the motorcyclist! - Homepage|http://www.themotorcyclist.ca/]]
[[The Pace by Nick Ienatsch - Pashnit Motorcycle Tours in California, guided|http://www.pashnittours.com/thepace.html]]
[[The Scooter Scoop|http://thescooterscoop.com/]]
Scooter and microcar news, reviews, commentary and celebration of wheeled oddities
[[The Scooter Scoop!: Words from the readers - What safety gear?|http://thescooterscoop.blogspot.com/2008/04/words-from-readers-what-safety-gear.html]]
[[The Toronto Moto Scooter Club (Toronto, ON) - Meetup.com|http://scooter.meetup.com/197/]]
[[The Tulip : The Original Steak House since 1929|http://www.tulipsteakhouse.com/]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/8o-u0RFtyGY&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/8o-u0RFtyGY&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/T-xK_t-A_8E&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/T-xK_t-A_8E&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
[[TiddlyWiki|http://www.tiddlywiki.com/]] by Jeremy Ruston, is a darned useful tool for organizing information. Use it for anything from a simple set of notes up to your own mini-pedia. The main features:
*Simple to create, edit and organize.
*Can be used for lists of stuff, to do lists, blog-like journals.
*Can be hugely customized and extended with cool add-ons.
*Fairly computer and browser independent. (Some of my customizations work better in Firefox.)
*Plays video and music from places like YT by dropping the embed code in a tiddler.
*Self-contained. A "website in a box" that can be copied and moved easily.
*Makes a nifty platform for hacking ~JavaScript without a development environment.
*The Sync and Import in the Backstage are very powerful.
!!!Useful links
*[[TiddlyWiki User's Guide - an introduction to TiddlyWiki|http://danielbaird.com/tiddlywikiguides/userguide-sample.html#%5B%5BTiddlyWiki%20User's%20Guide%5D%5D]]
*[[TiddlySnip for Firefox|http://tiddlysnip.com]] An add-on for Firefox that lets you directly paste text and links from Firefox to your wiki. (Be careful when editing the wiki and snipping at the same time or you'll lose stuff.)
*[[TiddlyWiki Cheat Sheet (pdf)|http://nothickmanuals.info/doku.php/cheatsheets]]
{{twocolumns{<<timeline>>
}}}
[[Tomos|http://www.tomoscanada.com/Home/index.html]]
[[TopEndz Home|http://topendz.com/]]
[<img[Toronto Supershow|http://www.supershowevents.com/super/supershow2010-logos/SUPERSHOW-2010-new-dates-600.gif]]
[[Toronto Supershow Events|http://www.supershowevents.com]] These are the ones out at the International Centre by the airport
[img[x|http://www.weatheroffice.gc.ca/clf2/images/ecfip_e.gif]] <<rssfeed asHtml http://www.weatheroffice.gc.ca/rss/city/on-143_e.xml>>
[[Google Maps|http://maps.google.com/maps/ms?f=q&hl=en&geocode=&ie=UTF8&msa=0&msid=115784929531581258742.00043bd6be831b6dbb446&ll=43.742329,-79.424286&spn=3.59714,3.6245&source=embed]]
[[Tour Master / Cortech|http://www.tourmaster.com/]]
[img[http://www.motogearoutlet.com/images/product/86-393.jpg]]
[[Tourmaster Transition Series 2|http://www.tourmaster.com/xcart/product.php?productid=240&cat=3]]
[[pants|http://www.newenough.com/protective_apparel/textile_jackets_and_pants/tour_master/caliber_textile_motorcycle_overpants.html]]
*Tall sizes available
*CE Approved armor at the elbow and shoulder with an articulated triple density back protector
*600 Denier Carbolex and 600 Denier Ballistic Polyester
*Liner features warming 100 gram Polyfill insulation.
*Reviews:
**[[NewEnough|http://www.newenough.com/protective_apparel/textile_jackets_and_pants/tour_master/transition_series_2_textile_motorcycle_jacket.html]]
**[[KneeDraggers|http://www.kneedraggers.com/details/Tour_Master_Transition_Series_2_Textile_Jacket--622584.html]]
[[TrackDoD Novice Group Orientation|http://foreven.com/trackdod/NoviceGuide/]]
[[Preclearance List of Recognized Vehicle Importers - Search|http://www.tc.gc.ca/roadsafety/importation/pcl/Search.asp?Search=new]]
[[TucanoUrbano - Home|http://www.tucanourbano.it/main/home.aspx]]
[[Turn 2 Sportbike Rentals: Advanced Riding Course (ARC) Level 1|http://www.turn2.ca/arc1.htm]]
[[TwistedThrottle.com|http://www.twistedthrottle.com/]]
[[Welcome to Two Wheel Motorsport|http://www.twowheelmotorsport.ca/]]
Telephone 519-836-1957
Toll Free 800-700-6856
FAX 519-836-1952
!!!Address
*5473 Hwy 6 North, RR#5 Guelph, Ontario, Canada ~N1H 6J2
*[[Route|http://maps.google.ca/maps?f=d&source=s_d&saddr=144+Hillsview+Dr,+Richmond+Hill,+ON,+Canada&daddr=5473+King%27s+Highway+6,+Guelph%2FEramosa,+ON&hl=en&geocode=FfNTnQIdgh5E-ylDJSogBysriDF1uZYyS2liOQ%3BFSfwmAIdUes2-ykP_tv_j5AriDGNFpoYfLw4qg&mra=ls&dirflg=h&sll=43.865081,-79.421732&sspn=0.005995,0.013937&ie=UTF8&ll=43.79142,-79.569855&spn=0.382156,0.891953&t=h&z=11]]
!!!Hours of Operation
*Monday - Wednesday 9:00 am- 6:00 pm
*Thursday & Friday 9:00 am - 8:00 pm
*Saturday 9:00 am- 4:00 pm
[[Universal Motorcycle Hand Signals - I Ride My Own|http://www.ridemyown.com/articles/safety/handsignals.shtml]]
[[UTILIKILTS : Products|http://www.utilikilts.com/index.php?page_id=33]]
[[Vespa Canada|http://www.vespacanada.com/]]
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
*[[Vonn Cycle|http://www.vonncycle.ca/index.php]]
>181 Woodstream Blvd. Suite #6
>Woodbridge, Ontario ~L4L 8G9
>T: 905.264.7735 - F: 905.264.7726
[[Motorcycle Clothing, Helmet and Product Reviews - webBikeWorld|http://www.webbikeworld.com/Reviewed-motorcycle-products/Products.htm]]
[[What to do After an Auto Accident|http://www.gov.on.ca/GOPSP/en/graphics/stel02_162308.htm]] [[PDF|http://www.fsco.gov.on.ca/english/pubs/consumerbrochures/brochures-1.pdf]]
[[What to do if you're in a road crash|http://www.wheels.ca/article/19997]]
[[Widder Canada: Motorcycle Heating Solutions|http://widderca.com/]]
*[[wilderness cooking - backcountry cooking, recipes and tips for backpackers|http://www.wildernesscooking.com/index.html]]
[[Wildside Motorcycles - About Us|http://www.wildsidemotorcycles.ca/about-us.html]]
>3246 LAKESHORE BLVD. W., TORONTO, ONTARIO. ~M8V 1M1
>416-503-2121 or email info@wildsidechoppers.com
!!!See also
*[[Wildside Scooters]]
[[Wildside Scooters|http://www.wildsidescooters.com/]]
!!!Location
3246 Lake Shore Blvd. West, Toronto, Ontario, ~M8V 1M1
!!!See also
*[[Wildside Motorcycles]]
[[Winter Storage Guide for Motorcycles|http://www.clarity.net/adam/winter-storage.html]]
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/G77BXjI5mcc&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/G77BXjI5mcc&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
[[XENA Intelligent Security|http://www.xenasecurity.com/home/current/lock/]]
[[XM-2000 - GPS Tracking has been enabled : V is for Voltage Community|http://visforvoltage.org/forum/2363-xm2000-gps-tracking-has-been-enabled]]
Cell-phone do-it-yourself lojack system.
/***
!Metadata:
|''Name:''|XMLReader|
|''Description:''|This version hacked to hell by AndroidCat|
|''Version:''|2.2.0|
|''Date:''|May 19, 2007|
|''Source:''|http://sourceforge.net/project/showfiles.php?group_id=150646|
|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License]]|
|''~CoreVersion:''|2.2.0|
|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|
|''Required:''|As the param "asHtml" is used, [[NestedSlidersPlugin|http://www.tiddlytools.com/#NestedSlidersPlugin]] should be installed|
!Syntax:
{{{<<rssfeed withDesc|noDesc|asHtml rssfeed.xml|http://www.example.com/rssfeed.rdf>>}}}
!Revision History:
|''Version''|''Date''|''Note''|
|2.2.0|May 19, 2007|Atom feeds suppported|
|2.1.1|May 15, 2007|Fixed cache bug|
|2.1.0|May 10, 2007|Fixed bugs:<br>1.missing parameter 'responseText' of processResponse<br>2.Caches failed|
|2.0.0|Mar 08, 2007|Required TW 2.2.0+|
|1.5.0|Mar 04, 2007|Codes reworked, more easier reused|
|1.2.0|Jul 20, 2006|Runs compatibly with TW 2.1.0 (rev #403+)|
|1.1.0|Jul 10, 2006)|change xmlhttp.send(null)/send() to xmlhttp.send("") for more compatibility for some browsers|
|1.0.0|Mar 11, 2006|Initial release|
|~|~|This macro is reworked from RssNewsMacro, but it can be easy to extended to support different structure of xml document from rss feeds|
|~|~|You could uninstall the RssNewsMacro, but still use the original syntax,<<br>>{{{<<rssfeed withDesc|noDesc|asHtml "rssfeed.xml"|"http://www.example.com/rssfeed.rdf">>}}}|
!Code section:
***/
//{{{
version.extensions.xmlreader = {major: 2, minor: 1, revision: 0,
date: new Date("May 10, 2007"),
name: "XMLReader",
type: "Macro",
author: "BramChen",
source: "http://sourceforge.net/project/showfiles.php?group_id=150646"
};
config.messages.XmlReader = {
fromCache: "^^(//from cache//)^^",
errorInDataRetriveing: "Problem retrieving XML data: %0",
invalidXML: "Invalid XML retrieved from: %0",
urlNotAccessible: "Access to %0 is not allowed,\nPlease check the setting of your browser:\n1.For Gecko based, you should set the 'signed.applets.codebase_principal_support' to be true, in about:config.\n2.For IE, you should add this web site to your trust list."
};
function XmlReader(place,withDesc,xmlURL) {
this.xmlhttp = null;
this.place = place;
this.xmlURL = xmlURL;
this.withDesc = withDesc;
this.itemStructure = {author:'author',title:'Title',link:'Link',pubDate:'PubDate',description:'Desc'};
this.atomStructure = {email:'author',title:'Title',id:'Link',updated:'Updated',summary:'Desc'};
// this.rsTemplate = function(){var t='';for (var i in itemStructure){t+='_'+itemStructure[i]}};
this.rsTemplate = '_pubDate\n*_time [[_title|_link]] _author_description';
this.items = {Elm: "%0Elm", Text: "_%0"};
this.keyItem = "item";
this.dateFormat = "DDD, DD MMM YYYY";
this.groupBy = null;
return this;
};
XmlReader.prototype.asyncGet = function(xmlURL,callback){
if(window.Components && window.netscape && window.netscape.security && this.isCrossSite(xmlURL)){
try {netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");}
catch (e) {displayMessage(e.description?e.description:e.toString());}
}
return doHttp("GET",xmlURL,null,'text/xml',null,null,callback,null,null)
};
XmlReader.prototype.genLists = function(xml){
var itemStructure;
if (xml.lastChild.nodeName == 'feed'){
this.keyItem = 'entry';
itemStructure = this.atomStructure;
}
else {
itemStructure = this.itemStructure;
}
var itemList = xml.getElementsByTagName(this.keyItem);
var items = this.items;
var rsLists='', rssItem; this.groupBy='';
for (var i=0; i<itemList.length; i++){
var itemElms=[],itemTexts=[];
var rsTemplate=this.rsTemplate;
for (var j in itemStructure){
var itemElm = items.Elm.format([j]);
var itemText = items.Text.format([j]);
itemElms[itemElm] = itemList[i].getElementsByTagName(j).item(0);
if(itemElms[itemElm]){
var theTitle = itemStructure[j];
var theText = (itemElms[itemElm].firstChild)?itemElms[itemElm].firstChild.nodeValue:'';
rsTemplate=this.convertTemplate(rsTemplate,j,theText);
}
else {
rsTemplate = rsTemplate.replace('_'+j, '');
}
}
rsLists += rsTemplate;
}
return rsLists;
};
XmlReader.prototype.convertTemplate = function(rsTemplate,j,theText){
switch (j){
case 'title':
rsTemplate = rsTemplate.replace(/_title/,theText.replace(/\[|\]/g,''));
break;
case 'id':
j = 'link';
case 'link' || 'id':
rsTemplate = rsTemplate.replace('_'+j, theText);
break;
case 'updated':
j = 'pubDate'
case 'pubDate':
var myText = this.dateFormatString(this.dateFormat, theText);
if (this.groupBy == myText){
rsTemplate = rsTemplate.replace('_'+j, '');
}
else{
rsTemplate = rsTemplate.replace('_'+j, '\n!!! '+myText);
this.groupBy = myText;
}
rsTemplate = rsTemplate.replace('_time', this.dateFormatString2('hh12:0mmam', theText));
break;
case 'author':
var sAuthor = theText.replace(/\n/g,' ');
sAuthor = sAuthor.trim();
sAuthor = sAuthor.replace(/\s*\s/g, " ");
if (this.isBanHammered(sAuthor)){
rsTemplate = '\n*@@color(green):~BanHammered@@ @@color(red):'+sAuthor+'@@';
}
else{
rsTemplate = rsTemplate.replace('_'+j, sAuthor);
}
break;
case 'summary':
j = 'description';
case 'description':
var regexpDesc = new RegExp("withDesc|asHtml","g");
if (regexpDesc.exec(this.withDesc) && theText){
var _description = theText.replace(/\n/g,' ');
_description =_description.replace(/<br \/>/ig,'\n');
if (version.extensions.nestedSliders){
_description = ((this.withDesc == "asHtml")?"<html>"+_description+"</html>":_description);
rsTemplate = rsTemplate.replace('_'+j,'+++[...]'+_description+'\n----\n===\n');
}
else {
rsTemplate = rsTemplate.replace('_'+j,_description+'\n');
}
}
else {
rsTemplate = rsTemplate.replace('_'+j,'');
}
break;
}
return (rsTemplate);
};
XmlReader.prototype.dateFormatString = function(template, theDate){
theDate = theDate.replace(/-/g,'/').replace(/T.UT|T.Z/ ,'');
var dateString = new Date(theDate);
template = template.replace(/hh|mm|ss/g,'');
return dateString.formatString(template);
};
XmlReader.prototype.dateFormatString2 = function(template, theDate){
theDate = theDate.replace(/-/g,'/').replace(/T.UT|T.Z/ ,'');
var dateString = new Date(theDate);
return dateString.formatString(template);
};
XmlReader.prototype.isCrossSite = function (url){
var result = false;
var curLoc = document.location;
if (url.indexOf(":") != -1 && curLoc.protocol.indexOf("http") != -1) {
var re=/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
var rsURL=url.match(re);
for (var i=0; i<rsURL.length; i++){
rsURL[i]=(typeof rsURL[i] == 'undefined')?'':rsURL[i];
}
result = (curLoc.protocol == rsURL[1] && curLoc.host == rsURL[2] && curLoc.port == rsURL[3]);
}
return (!result);
};
XmlReader.prototype.isBanHammered = function (theAuthor){
var result = false;
var sText = store.getTiddlerText('BanHammer');
if (sText.indexOf(theAuthor) != -1){
result = true;
}
return (result);
};
//}}}
/***
!Macro rssfeed
***/
//{{{
config.macros.rssfeed = {
cache: {},
dateFormat: "DDD, DD MMM YYYY"
};
config.macros.rssfeed.handler = function(place,macroName,params){
var withDesc = params[0];
var xmlURL = params[1];
var rss = new XmlReader(place,withDesc,xmlURL);
rss.dateFormat = this.dateFormat;
var processResponse = function(status,params,responseText,xmlURL,x){
if (window.netscape){
if (rss.isCrossSite(xmlURL)){
try {netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");}
catch (e) { displayMessage(e.description?e.description:e.toString()); }
}
}
if (x.responseXML){
xmlURL = xmlURL.replace(/[\?|\&]nocache.*/,'');
config.macros.rssfeed.cache[xmlURL] = x;
wikify(rss.genLists(x.responseXML),place);
}
else {
wikify("<html>"+ x.responseText+"</html>", place);
displayMessage(config.messages.XmlReader.invalidXML.format([xmlURL]));
}
};
if (this.cache[xmlURL]) {
wikify(config.messages.XmlReader.fromCache,place);
var status = false;
var x=this.cache[xmlURL];
processResponse(status,null,x.responseText,xmlURL,x);
}
else {
rss.xmlhttp = rss.asyncGet(xmlURL, processResponse);
}
};
//}}}
<html><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/4yffVZpcPiY&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/4yffVZpcPiY&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></html>
[[YAMAHA MOTOR CANADA|http://www.yamaha-motor.ca/products/index.php?group=M]]
[[Zero Gravity Sportbike Windscreens - Double Bubble - SR Series - Sport Touring|http://www.zerogravity-racing.com/]]
[[frogg toggs® Outerwear|http://www.froggtoggs.com/]]
[[scootrak.com - affordable GPS tracking for your vehicle|http://scootrak.com/]]
[[toronto motorcycles/scooters classifieds - craigslist|http://toronto.en.craigslist.ca/mcy/]]
[[w w w . r i d e d o t . c o m|http://www.ridedot.com/]]
>Two Canadian motorcycle nuts
[[www.CHICRIDERS.com|http://www.chicriders.com/]]
[[www.HotRide.ca - Canadian Riders' Online Destination - Powered by vBulletin|http://www.hotride.ca/forums/]]