No. Well, maybe. I do have a lot of dirty clothes and should wash them, but that's not the point. I'm not wearing the kilt because other clothes are dirty. This isn't a last resort thing. I'm wearing it because of comfort. I wear a kilt because I want to (be comfortable), not because of some silly idea such as "laundry day."
Well, that's irrelevant. I wear my kilt because of comfort.
[<img[101reykjavikdvdsm.png]]\n\n101 Reykjavik is a novel and movie about [[Hlynur Bjorn]], a 30-year-old Icelandic slacker. He is unemployed at still lives with his moth, with no ambition to change this status. \n\n\n\n\n\n!Fan Site\n*Differences between the movie and novel\n*Quotes\n**Novel\n**Movie\n*Movie images\n*Reviews\n*Synopsis\n*Hlynur Bjorn examined
Fine. I'm Irish.. well, I think... eh, my heritage really isn't that important. I'm mostly wearing the kilt because of comfort. It's really comfortable... and it's just a coincidence I might have some Irish (maybe even Scottish) in me.
No. My first kilt [the one I wore on Thursday] is called "All Ireland Green." I wanted to wear a generic tartan for a reason. The other kilt is a tartan called "Wolverine" because it's based off some school colors- not NMSU. I mostly bought that kilt because it was on sale.
Please use the tabs to find information on [[me|About Me]], [[this website|StrangeGravity]], or [[TiddlyWiki]] (the software used to create this website)... or simply click one of the above links to open that in a new tiddler.\n\n<<tabs txtFavourite\n"About Me" "Me" [[About Me]]\n"Strange Gravity" "StrangeGravity" [[StrangeGravity]]\n"TiddlyWiki" "TiddlyWiki" [[TiddlyWiki]]\n>>
If you really want to learn about me, try reading through every one of the tiddlers on this site! Ha! Right. I guess if you want to know about me, you're probably looking for some sort of brief description- involving my location, job, contact info, hobbies, interests- just so you can figure out what kind of person you're dealing with. That's fair.\n\n!Brief Description\nI'm a short guy who is different. I'm not weird, just different. Actually, I guess it would depend on who you ask. Those kind of labels also are very difficult for me to accurately describe myself- just as it would be difficult, or perhaps impossible, to accurately say how intelligent, creative, hard working, etc. I am. Therefore, I cannot tell you or anyone about those traits. Those are traits assigned by others in order to compare me with everyone else. I can't compare myself with everyone else because of the perspective issue- I can only see myself (not literally in this case) from an internal perspective.\n\nI can tell you my self-identified labels, however. I'm a [[loner|Loner]].\n\n!Stats\nHobbies: [[Geocaching]], [[hiking]]\n[[Favorite TV Shows]]: Wonderfalls, X-Files, Farscape\n[[Favorite movies]]: 101 Reykjavik, \n\n
Animism is the notion that all (or most) things have a spirit and/or are alive in some sense (including objects that are //traditionally//, in western thought, thought of as "inanimate").
This is a term that I hear a lot. Although in popular language it refers to being non-social, it has a very different meaning for psychologists (as defined by the American Psychiatric Association's DSM-IV). Anti-Social Personality Disorder is generally defined by....
Asperger's Syndrome (AS) is a form of autism (often referred to as a "high-functioning" form of autism).
Cache In, Trash Out (CITO) is a...\nThis is something I do not do yet. I think I might start doing it. I've seen lots of trash when I go geocaching. It seems that even in what appears to be a remote area, people have been there. If you can get there, so can others. Other people might not care as much about preserving the beautiful outdoor area. They might be there for drinking, as an example. By picking up trash, you'll help make that area more beautiful for future geocachers. It also makes it look less suspcious if you're looking for a caceh, but have a trash bag (in case stealth is an issue). You'll probably get many compliments. Think of it as community service.
Cache types:\n1 ( 0.4%) Cache In Trash Out Event\n1 ( 0.4%) Earthcache\n2 ( 0.9%) Event Cache\n6 ( 2.6%) Letterbox Hybrid\n1 ( 0.4%) Locationless (Reverse) Cache\n14 ( 6.0%) Multi-cache\n''197 (83.8%) Traditional Cache''\n12 ( 5.1%) Unknown Cache\n1 ( 0.4%) Virtual Cache
![[Traditional Caches]]\n[[The Cache Exchange]]\n[[On the Road to Aden]]\n[[First Geobank of Las Cruces]]\n[[Plaza de Dona Ana]]\n[[Second Geobank of Las Cruces]]\n[[Tres Cruces: Revisited]]\n\n![[Multi-Caches]]\n[[The Write Path]]\n\n![[Event Caches]]\n[[Pillage the Village... Inn]]\n\n![[Puzzle Caches]]\n[[¿Dónde está? Where are you?]]\n[[Exploring the World]]
Okay, that might not sound like a big deal, but geocaching can get you trouble with the law. No, geocaching is not illegal (in most places). It is a fun, family sport... if you know what it is. For those who aren't familiar with the game, it can look suspicious to have an individual (or group) searching around one spot and leaving behind a mysterious container (usually hidden so non-geocachers don't find it). By having a pamphlet or some other information in your car, pocket, or wallet, you can show a person if they start asking questions (especially if that person is a police officer).
Civilization is one of my favorite games. It involves building an empire... err... nation (empire if you make it one) from the very beginning. You start out with only a settler (sometimes a scout or warrior, as well). You need to build cities in order to have an empire/nation/civilization. Of course, you need a military to protect your civilization. You'll also need to keep your people happy (by building temples and theaters), keep your people advanced (by building libraries and keeping up with science), and maintaining diplomacy with rival civilization. Oh, it's a fun game.\n\nThere are actually quite a few civilization games out there:\n\nSid Meier's Civilizations series:\n*Civilization, 1991\n*Civilization II, 1996\n*Civilization III, 2001\n*Civilization IV, 2005\n\nAfter Civilization II, there was a big legal battle as to who owned the trademark "Civilization," and the rights to produce a sequel. As a result, many off-shoot civilization games were created:\n\n*Civilization: Call to Power, 1999 [Activision]\n**Call to Power II, 2000 \n*Civilization II: Test of TIme, 1999 [Microprose]\n*Sid Meier's Alpha Centauri, 1999\n\nFinally, there are some other civilization-related games that have very similar concepts:\n*FreeCiv\n*Galactic Civilizations\n**Galactic Civilizations II
/***\nJust some bits and pieces\n***/\n//{{{\nconfig.messages.messageClose.text = "X"; // default is "close"\nconfig.views.wikified.defaultText = ""; // default is "The tiddler '%0' doesn't yet exist. Double-click to create it"\n//}}}
Containers:\n3 ( 1.3%) Large\n55 (23.4%) Micro\n11 ( 4.7%) Not chosen\n6 ( 2.6%) Other\n''125 (53.2%) Regular''\n34 (14.5%) Small\n1 ( 0.4%) Virtual
[[Welcome / Paġlagivsi]] [[Table of Contents]]
Difficulty:\n1.0: 60 (25.5%)\n''1.5: 71 (30.2%)''\n2.0: 62 (26.4%)\n2.5: 13 ( 5.5%)\n3.0: 15 ( 6.4%)\n3.5: 3 ( 1.3%)\n4.0: 8 ( 3.4%)\n4.5: 1 ( 0.4%)\n5.0: 2 ( 0.9%)
If you would like to download an "empty" TiddlyWiki file that contains all of the formatting and Plugins necessary to provide the same look and function of this site, right-click on the following link:\n\nhttp://tiddlywikitips.com/tiddlywikitips_empty.html\n\nand select "Save link as..." in Firefox or "Save target as..." in Internet Explorer\n\nNote: Do not just click on the link to load it and save it from your browser, because the resulting file will not work properly!
Esperanto is a language created to be a second language that everyone in the world would learn, in order to act as a neutral lingua franca. Often, Certain languages (such as English or French) are sited as being the lingua franca. These languages all originate and are dominate in a certain part of the world (English is dominate in England and the United States, French in France). This carries with it the bias of that language group's culture. Esperanto, having no one singular country of origin, and no country dominate its usage, acts as a neutral language in that respect.
An event cache is a time and place when geocachers get together. They're usually a lot of fun. Sometimes they can just be a dinner or lunch at a restaurant so cachers can meet one another. Othertimes they can including hiding caches, having competitions, and/or trading [[travel bugs|Travel bugs]] and [[geocoins|Geocoins]].
One thing I've learned in life is that people are very similar in many ways, such as the questions they ask in response to something I do or say. For example, there are a few questions that always seem to come up whenever I'm seen wearing a kilt or when I tell people I'm a geography major.\n\nThese FAQs aren't actually meant to be taken seriously. In fact, very little in my life is serious. Why should it be? That's besides the point, though.
Face blindness (clinical name "Prosopagnosia") is a condition in which a person has a poor sense of facial recognition, meaning they often can't identity a person's face. A person with face blindness, instead, would use other cues as to identifying another person. \n\nCommon alternatives to face as identifying people include clothing (either remember the clothes a person wears a particular day... or learning what their clothing style is), hairstyle, location probability (the probability of running into someone at a specific place and time), and so forth.\n\nDifficulties can occur if a person decides to change their hairstyle, wear a different clothing style, or is seen "out of place" (seeing a teacher in a bookstore or coffee shop, when you'd only really //expect// to see in a classroom).\n\n!Links\n*[[http://www.prosopagnosia.com/|http://www.prosopagnosia.com/]]
Seeing as how I watch far too much tv in my life, this just reflects a small portion of the shows I actually watch (please see also: [[Favorite movies]]).\n\n| ''Rank'' |>| ''Show'' | ''Description'' |\n| 1 | [img[wonderfallspostcard.png]] | [[Wonderfalls]] | Something Something Something Something Something Something Something Something Something Something Something Something |\n| 2 | [img[futuramalogo.png]] | [[Futurama]] ||\n| 2 | [img[farscapelogo.png]] | [[Farscape]] | Description of Farscape goes here |\n| 3 | [img[xfiles.png]] | [[X-Files]] | Fox "Spooky" Mulder and Dana Scully |\n| 4 || [[The Daily Show]] & <br> [[The Colbert Report]] | With Jon Stewart |\n| 5 | [img[lonegunmen.png]] | [[The Lone Gunmen]] ||\n| 6 || [[Battlestar Galactica]] ||\n| 7 || [[Seinfeld]] ||\n| 9 || Heroes ||\n| ''Rank'' | ''Image'' | ''Name'' | ''Description'' |\n|>|>|>|Test|\n\nOther shows:\n*The Tick (both cartoon and live action)\n*The Daily Show\n*The Colbert Report\n*The Critic\n*Mystery Science Theater 3000\n*Stargate SG-1\n*Stargate Atlantis\n*Firefly\n*Animaniacs\n*Doctor Who
Please also see [[Favorite TV Shows]]\n\n| ''Rank'' |>| ''Show'' | ''Description'' |\n| 1 | [img[101reykjavikdvdsm.png]] | [[101 Reykjavik]] | [[Hlynur Bjorn]] is a yadda yadda yadda... sleeps with his mom's girlfriend |\n| 2 | [img[topsecretvhssm.png]] | Top Secret! | [[Hlynur Bjorn]] is a yadda yadda yadda... sleeps with his mom's girlfriend |\n| 3 | [img[Ameliecover.png]] | Amelie | [[Hlynur Bjorn]] is a yadda yadda yadda... sleeps with his mom's girlfriend |\n\n101 Reykjavik\nTop Secret!\nAmelie\nAirplane!\nEvolution\nDogma\nArmy of Darkness\nYoung Frankenstein\nRavenous\nJarhead\n\n
Friendship is a weird concept to me. I do have friends, of course (perhaps I should omit the "of course," as it implies "//everyone//" has friends). I just don't interact with them very often. I don't hang out with them on the weekends. I don't call my friends. Aside from my co-workers, I only really chat with a few (circa 1-3) people on a daily basis (this isn't including a "hi" from someone I pass in the hall- I'm talking about actual conversations lasting at least several minutes). This is usually done online.
Geocaching is basically like a high tech treasure hunt. That's the simple explanation, anyway. More accurately, Geocaching uses Global Positioning Systems (GPS) technology to mark a location where a "cache" his hidden. A cache is merely a container that has at least a log book to sign your name. Other, larger caches will often include trade items (toys are very popular, so kids can be encouraged to geocache, too) or even a camera (so the cache owner can develop later to see who's all been there).\n\n!Links\n[[Geocaching.com|http://www.geocaching.com/]]\n[[Handicaching|http://www.handicaching.com/]]\n[[Deep Southwest Geocaching|http://deepsouthwest.com/geocaching/]]\n[[Cacher Stats|http://www.cacherstats.com/index.html]]\n[[Users with the most hides|http://zinnware.com/HighAdv/Geocaching/most_caches_found.php?OrderBy=hides&Ordering=DESC]]
[[Overall Statistics]]\n[[Difficulty]]\n[[Terrain]]\n[[Cache Types]]\n[[Containers]]\n[[Log Types]]\n\nAnalysis of file C:\sDocuments and Settings\sScott\sDesktop\s737659\s737659.gpx\n\n235 unique caches.\n312 total logs.\n235 finds.\nAvg. Difficulty = 1.81\nAvg. Terrain = 1.76\nAvg. Challenge = 2.10\n47 hard caches (20%)\n12 (5.1%) archived\n\n''Difficulty:''\n1.0: 60 (25.5%)\n//1.5: 71 (30.2%)//\n2.0: 62 (26.4%)\n2.5: 13 ( 5.5%)\n3.0: 15 ( 6.4%)\n3.5: 3 ( 1.3%)\n4.0: 8 ( 3.4%)\n4.5: 1 ( 0.4%)\n5.0: 2 ( 0.9%)\n\n''Terrain:''\n1.0: 47 (20.0%)\n//1.5: 96 (40.9%)//\n2.0: 52 (22.1%)\n2.5: 16 ( 6.8%)\n3.0: 16 ( 6.8%)\n3.5: 2 ( 0.9%)\n4.0: 6 ( 2.6%)\n\n''Cache types: ''\n 1 ( 0.4%) Cache In Trash Out Event\n 1 ( 0.4%) Earthcache\n 2 ( 0.9%) Event Cache\n 6 ( 2.6%) Letterbox Hybrid\n 1 ( 0.4%) Locationless (Reverse) Cache\n 14 ( 6.0%) Multi-cache\n// 197 (83.8%) Traditional Cache//\n 12 ( 5.1%) Unknown Cache\n 1 ( 0.4%) Virtual Cache\n\n''Containers: ''\n 3 ( 1.3%) Large\n 55 (23.4%) Micro\n 11 ( 4.7%) Not chosen\n 6 ( 2.6%) Other\n// 125 (53.2%) Regular//\n 34 (14.5%) Small\n 1 ( 0.4%) Virtual\n\n''Log Types: ''\n 3 ( 1.0%) Attended\n 38 (12.2%) Didn't find it\n// 232 (74.4%) Found it//\n 3 ( 1.0%) Needs Maintenance\n 4 ( 1.3%) Will Attend\n 32 (10.3%) Write note
[[Overall Statistics]]\n[[Difficulty]]\n[[Terrain]]\n[[Cache Types]]\n[[Containers]]\n[[Log Types]]
Check out the menu on the left to see some things I've found helpful while caching.
Geocoins are coins especially designed to fit with [[geocaching|Geocaching]]. They're a lot like [[travel bugs|Travel bugs]] in that they can travel around from cache to cache. Many people also collect geocoins as they would other coins.\n\n!Links\n[[HogWildStuff|http://www.hogwildstuff.org/]]\n[[Geoswag|http://www.geoswag.com/]]\n[[Coins and Pins|http://www.coinsandpins.com/]]
I am a geography major. What does this mean? Use the menu on the left (the tags) to find out. I highly suggest reading the Geography FAQ. It's full of important questions and their respective answers that will help you get a better understanding of geography.\n\nOr not. I apologize for that inconvenience. That wasn't very helpful at all, was it? Try using the link below it, "Geography- what it's really about."
I just graduated college with a bachelor of science in geography. Whenever I mention I'm studying geography, I get a lot of interesting reactions. Please read this FAQ.\n\n''1) Geology's an interesting subject.''\nNot a question. It's also not relevant. I'm a geographer. I don't study geology. Geology deals with the physical properties of the earth- its structure, composition, etc. Geography, while it can involve some of that, is more about spatial components and the life on the earth. Geology = rocks. Geography = spatial stuff and life of the earth.\n\n''2) So... what does a geographer do?''\nGood question. As one of my professors says far too often, "It depends." Geographers can study the economic patterns of a city, the environmental impact of a tropical storm (or the pattern that storm took in its travels)... a geographer might play a role in planning a city, observing migration paths of a particular species of bird... oh, and of course, making maps.\n\n''3) So, geographers only make maps, right?''\nNo. Maps are tools of geography. Maps convey information. They are a way to communicate information. Geography is a spatial subject, however. It needs something spatial to present information on- ie, maps. Think about the purpose of a map. Maps can convey... well, anything in question number 2. The path of a storm. Planning a city. Migration paths. Economic patterns of a city. All ways to convey research that a geographer does.\n\n''4) What's the capital of Mongolia? What's the world's largest river by volume?''\nTwo questions in one. Oh my. I hope I can handle it. They don't have much to do with geography. Well, technically, they do... but... most geographers don't care. A more important question might be "Why is Ulanbataar the capital of Mongolia?" or "What is the impact the Amazon River has on the surrounding area?" Knowing the name of a city or river is pointless... geographers ask questions beyond that.\n\n''5) Why do you still map things if the whole Earth has been mapped?''\nDo you people not read my answers? While, yes, I guess in a technical definition, the Earth has been mapped. We have satellites that travel around the earth. We have a good idea of where every land mass is... but it changes. Earthquakes. Floods. Sea level. The city of a city. Political boundaries. It all changes. It's important to map these changes to have current information. Plus, like I said above, geographers don't just map. Maps are a way to present information and research that geographers do.\n\n''6) I once heard a fascinating thing about sedimentary rocks. Do you know much about them?''\nNo. I'm horrible with rocks. I don't find that kind of stuff very exciting. It can be, I guess, but I'm more interested in cultural stuff.\n\n''7) Then why did you become a geographer?''\nI already explained this above. Geography and geology are very different things. I don't know much about geology. Rocks aren't my thing. I'm sure its fascinating in its own right, but... I prefer dealing with understanding how the Inuit have adapted to living in the Arctic environment.\n\n''8) So what are you going to do when you graduate? Teach?''\nWell, maybe. Teaching might be okay, but then I'd have to explain to do a lot of explaining about what geography is. Maybe some day I'll have that kind of patience. In the meantime, I'm happy to work with GIS.\n\n''9) GIS? Oh, I have a GIS system. It helps me find my way back to my car in a crowded parking lot.''\nNo. GIS is highly advanced computerized software that allows for mapping. GPS, however, does help locate positions on the earth- it stands for Global Positioning System. GIS, however, stands for Geographic Information Systems (or Science).\n\n''10) How come this map isn't accurate? Should I find another?''\nOh! VERY good question! Maps aren't accurate. I mean... no map is. Maps are models of the Earth... representations only. Because the Earth is a sphere-ish object, trying to fit something on a piece of paper doesn't work too well. There will be distortions. It doesn't matter what map you're looking at. You can preserve one of four things: area, shape, distance, and direction. By preserving one thing, you make the others inaccurate. There are lots of other inaccuracies in mapping, but that gets complicated. Just note that maps are representations and are no where near exact.
I sort of attempted this in my [[Geography FAQ]]. Although that might give you an idea of what geography is about, it's generally not to be taken seriously. Come to think of it, most of what I write isn't to be taken seriously. Or maybe it is. [[I'm not sure.|I don't know]]\nGeography is a subject about spatial relationships. It describes
This "empty" TiddlyWiki file contains the latest <<version>> version of TiddlyWiki as well as all [[Plugins]] and [[Styles]] that give http://TiddlyWikiTips.com its look and feel.\n\nTo get started with this blank TiddlyWiki, you'll want to modify the following tiddlers:\n* SiteTitle & SiteSubtitle: This is the title and subtitle of the site, as shown above. (After saving, they will also appear in the browser title bar.)\n* MainMenu: The menu at the top, below the Title.\n* DefaultTiddlers: Contains the names of all tiddlers that you want to appear when the TiddlyWiki is opened.\n* SideBarOptions: This contains the definitions for the sidebar buttons and sliders on the right.
I don't mean the tv shows (although I do enjoy that). Who are my heroes? This is a hard one. I don't know if I really look "up" to people. There are people I identify with, though- most of them are either fictional or crazy (I guess in some cases, both).\n\n*Jaye Tyler- the main character in [[Wonderfalls]]. She's been described as "overeducated and unemployable."\n\n*Hlynur Bjorn Hafsteinson- the main character in [[101 Reykjavik]]. He's 30 years old and lives with his mom. He's done nothing with his life. He's unemployed. I guess I can relate to him in that I have no idea what I want to do, either.\n\n*Andrew Martinez, aka "The Naked Guy" -
I really enjoy hiking, at least when I can. It's good exercise and I get to see a lot of neat things. Mostly, it just gives me something to do. Why do I hike up [[mountains|Mountains]]? Not because I can (although that is a reason- if I couldn't do it, I wouldn't... or at least wouldn't be able to). It's mostly just something to do.\n\nI usually end up [[hiking alone|Hiking alone]].
I hike alone most of the time. Whenever I'm having a conversation with someone and this comes up, I hear a lot of the same reaction- I shouldn't do it. I understand the risks of hiking alone. I understand it'd be safer hiking with someone else (especially given ''//where//'' I hike). If I were to fall and had someone else with me, that person could go and get help. If I was alone, I'd have to depend on myself to get help... otherwise just hope someone comes to find me. Even if I was with someone, it'd still take time for help to arrive. It'd be better than waiting on the "chance" that someone might walk by, but it's still pretty chancy.\n\nThere are risks when hiking. Period. It doesn't matter if I'm with someone or not. The big thing is finding others to go with. I personally am a very independent person- perhaps a bit too much. I don't like having to rely on other people. If I did wait to go hiking until I could find someone, I'd do a lot less of it. What would I do instead? Also, the bad thing about hiking with another person is that you are limited by their ability and comfort level. I'm sure most of my friends would not be comfortable hiking up the mountains I do.
The main star of [[101 Reykjavik]].\n\n[>img[hlynursnow2.png]]\nI can relate to him in many ways. He's a slacker. I'm not saying I am, especially not in the ways he is. He's unemployed with no desire to get a job.\n\nIn many ways, Hlynur represents the average man.\n\nWhen I first watched //101 Reykjavik// in 2004, this movie was just entertainment for me. I watched it. I thought it was funny and thought-provoking. I just enjoyed it. A few years later, I graduated from college. At that point, I began to relate strongly with Hlynur. My last year of getting my bachelor's degree, I was living with my parents. I had no idea what I wanted to do with my life. I was essentially just bumming around. I didn't really even have a job until a month before I graduated. It reminded me a lot of Hlynur's situation. He wasn't doing anything with his life. No ambitions. No job. He was just... existing. \n\nThat's why Hlynur's become an important part of my life.
I've somehow managed to make it through college. I continue on a struggling graduate student. I'll admit I'm not the top of the class, but I make it. I do enough to get by- and that's good enough for me.
This is a phrase I often say. As Dr. McKay on Stargate Atlantis once said, "Despite what you all may think, I'm not Superman." Seriously. There's a lot I don't know. I also have a [[bad memory]], but that's another tiddler. I usually don't like pretending I know something, so I'll come right out and say it: I don't know. In my German class in high school, I got ''//very//'' good at saying, "[[Ich weiss nicht]]."\n\nI tend to get lost very easily, so this is a very useful phrase for me.
A very useful phrase if you're me in Germany. It means "[[I don't know]]."
Iñupiaq (or Inupiaq if you can't type the special characters) is a language spoken by the Inuit Eskimo of northern Alaska.
I'm Jim! I manage the http://TuddlyWikiTips.com site as well as several other "tips" sites including;\n*http://JimsTips.com\n*http://GmailTips.com\n*http://MoxiTips.com\n\nand my personal site:\n*http://jim.barr.net\n\nI can be contacted via email at: jim@barr.net
Okay, so I wear a kilt. A kilt is a men's garment, traditionally worn by those of Scottish (or even Irish or Welsh) ancestry. It's usually defined by several characteristics:\n\n*Wrapped garment, with the left going over the right\n*Pleated\n*Knee-length\n*Traditionally, tartan (plaid) design made from wool\n\nOh, right. //Why// do I wear a kilt?\n*Comfort\n*A kilt is anatomically correct clothing for men
''0) Is it laundary day?''\nNo. Well, maybe. I do have a lot of dirty clothes and should wash them, but that's not the point. I'm not wearing the kilt because other clothes are dirty. This isn't a last resort thing. I'm wearing it because of comfort. I wear a kilt because I want to (be comfortable), not because of some silly idea such as "laundry day."\n\n''1) Are you Scottish or Irish?''\nWell, that's irrelevant. I wear my kilt because of comfort.\n\n''2) So, does that mean you're Irish or Scottish?''\nFine. I'm Irish.. well, I think... eh, my heritage really isn't that important. I'm mostly wearing the kilt because of comfort. It's really comfortable... and it's just a coincidence I might have some Irish (maybe even Scottish) in me.\n\n''3) Is that your family tartan?''\nNo. My first kilt [the one I wore on Thursday] is called "All Ireland Green." I wanted to wear a generic tartan for a reason. The other kilt is a tartan called "Wolverine" because it's based off some school colors- not NMSU. I mostly bought that kilt because it was on sale.\n\n''4) Nice kilt, man!''\nThanks. That's not a question.\n\n''5) Are you sure that's not a question?''\nYes.\n\n''6) I like the kilt. Where can I get one?''\nBoth of my kilts are from Sport Kilt. I am relatively happy with the kilts so far. I'm sure the quality of the kilts aren't as great as they can be- especially compared to customized kilts. These kilts aren't customized. You get to pick a size (S,M,L,XL, etc.)... and possibly a few options (belt loops, sewn down pleats). Because of this, the price of the kilts are very affordable. One kilt was $75- my nicer, green kilt... and the other I bought for $35 (it was on sale... it regularly goes for $50). If you don't like them, I would also recommend Utilikilts, which speciailizes in "modern" kilts (ie, non-tartan).\n\n''7) So... what's under your kilt?''\nMy socks and shoes.\n\n''8) Seriously- do you wear underwear?''\nA true kiltwearer doesn't reveal this. It's one of the mysteries of the universe.\n\n''9) Summary:''\nI wear a kilt because of comfort. I will emphasize that kilts are very comfortable. It has nothing to do with my heritage. That's just a coincidence. What I wear (or no) is something I won't tell people. Although if a gust of wind comes along unexpectedly, anyone in the vicinity might find out.
[[0) Is it laundary day?]]\n[[1) Are you Scottish or Irish?]]\n[[2) So, does that mean you're Irish or Scottish?]]\n[[3) Is that your family tartan?]]
<html>\n<center>\n<iframe name="livejournal"\nsrc="http://www.livejournal.com/users/strange_gravity/"\nframeborder="0"\nscrolling="auto" height="500" width="400">\n<a href="http://www.livejournal.com/users/strange_gravity">View my LiveJournal</a>\n</iframe>\n</center>\n</html>\n
I am a linguistics geek. I have studied [[American Sign Language]], [[Esperanto]], [[Iñupiaq]] (Eskimo), and have even created my language which I call [[Silyon]]. Despite my best efforts, I'm not //fluent// in any of the above mentioned languages, but merely have a good understanding of them. In that sense, I'm what many people would consider a comparative linguist. I like to learn the basics of multiple languages for comparison.
I'd like to use my site sort of as a bookmarking tool. I could just have a link to my copied bookmarks, but I thought I'd actually use quality links.\n\n[[Mapping links]]\n[[Friends' Pages]]\n[[Futurama links]]\n\n[[GLCF|http://glcf.umiacs.umd.edu/index.shtml]] - satellite imagary data
!Episodes\n|>|>| List of Episodes |\n|1|[img[waxlion.png]]| [[Wax Lion]] |\n|2|| Karma Chameleon |\n|3|| PinkFlamingo |\n|4|[img[wounduppenguin.png]]| Wound-upPenguin |\n|5|| Crime Dog |\n|6|| Muffin Buffalo |\n|7|| Barrel Bear |\n|8|| Lovesick Ass |\n|9|| Safety Canary |\n|10|| Lying Pig |\n|11|| Cocktail Bunny |\n|12|| Totem Mole |\n|13|| Caged Bird |
Log Types:\n3 ( 1.0%) Attended\n38 (12.2%) Didn't find it\n''232 (74.4%) Found it''\n3 ( 1.0%) Needs Maintenance\n4 ( 1.3%) Will Attend\n32 (10.3%) Write note
A loner is an individual who spends most of [[eir]] time by eirself. Although I suppose there could be many reasons for this, including [[social anxiety]], [[Schizoid Personality Disorder]], autism, etc., I also think some people are just highly introverted. These individuals, as a result, often do //better// by themselves.\n\n!Myths\nLoners don't //always// like being alone, just like others. Correction: Some might desire to always be alone. I can't speak for other loners. Loners still, under most circumstances, interact with other humans. It might not be much interaction, but it still exists. Loners might even have friends. I imagine friendship is that is seen very differently from a loner than from a non-loner. I'm sure my idea of [[friendship|Friendship]] is very different from non-loners.\n\n!References\n* //[[Party of One: The Loner's Manifesto|http://www.amazon.com/Party-One-Manifesto-Anneli-Rufus/dp/1569245134/ref=pd_bbs_sr_1/002-6029657-7737648?ie=UTF8&s=books&qid=1174966606&sr=8-1]]// by Anneli Rufus - a very well-written guide to learn about what it means to be a loner that focuses on a lot of the positive aspects. It's basically a "how-to" guide for living happily as a loner. Topics include relationships, friendships, the media, history, etc. This would be great for anyone who wants to understand the loner psyche.
<<defaultHome>> [[Welcome / Paġlagivsi]] [[Table of Contents]] [[Download]] [[Help]] [[About]]
// Ensure that the MediaWikiFormatter Plugin is only installed once.\nif(!version.extensions.MediaWikiFormatterPlugin) {\nversion.extensions.MediaWikiFormatterPlugin = {installed:true};\n\nif(version.major < 2 || (version.major == 2 && version.minor < 1))\n {alertAndThrow("MediaWikiFormatterPlugin requires TiddlyWiki 2.1 or later.");}\n\nif(config.options.chkDisplayInstrumentation == undefined)\n {config.options.chkDisplayInstrumentation = false;}\n\nif(config.options.chkMediaWikiDisplayEmptyTemplateLinks == undefined)\n {config.options.chkMediaWikiDisplayEmptyTemplateLinks = false;}\nif(config.options.chkMediaWikiDisplayEnableThumbZoom == undefined)\n {config.options.chkMediaWikiDisplayEnableThumbZoom = false;}\nif(config.options.chkMediaWikiListReferences == undefined)\n {config.options.chkMediaWikiListReferences = false;}\n\nMediaWikiFormatter = {}; // "namespace" for local functions\n\nmwDebug = function(out,str)\n{\n createTiddlyText(out,str.replace(/\sn/mg,"\s\sn").replace(/\sr/mg,"RR"));\n createTiddlyElement(out,"br");\n};\n\nwikify = function(source,output,highlightRegExp,tiddler)\n{\n if(source && source != "") {\n var w = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);\n w.linkCount = 0;\n w.tableDepth = 0;\n w.output = tiddler==null ? output : createTiddlyElement(output,"p");\n var time1,time0 = new Date();\n w.subWikifyUnterm(w.output);\n if(tiddler && config.options.chkDisplayInstrumentation) {\n time1 = new Date();\n var t = tiddler ? tiddler.title : source.substr(0,10);\n displayMessage("Wikify '"+t+"' in " + (time1-time0) + " ms");\n }\n }\n//#at point of usage can use:\n//#var output = w.output.nodeType==1 && w.output.nodeName=="P" ? w.output.parentNode : w.output;\n};\n\nMediaWikiFormatter.getTemplateParams = function(w)\n{\n//#{{test|a|b}}\n//#{{test|n=a|m=b}}\n var params = {};\n\n var i = 1;\n var text = w.source + "|";\n var pRegExp = /(?:([^\s|]*)=)?([^\s|]*)\s|/mg;\n var match = pRegExp.exec(text);\n if(match) {\n // skip template name\n match = pRegExp.exec(text);\n }\n while(match) {\n //params[match[1] ? match[1] : i++] = match[2];\n if(match[1]) {\n params[match[1]] = match[2];\n } else {\n params[i] = match[2];\n i++;\n }\n match = pRegExp.exec(text);\n }\n return params;\n};\n\nMediaWikiFormatter.expandTemplate = function(w,tiddler,params)\n// see http://meta.wikimedia.org/wiki/Help:Template\n{\n var text = tiddler.text;\n text = text.replace(/<noinclude>((?:.|\sn)*?)<\s/noinclude>/mg,"");// remove text between noinclude tags\n var ioRegExp = /<includeonly>((?:.|\sn)*?)<\s/includeonly>/mg;\n var t = "";\n var match = ioRegExp.exec(text);\n while(match) {\n t += match[1];\n match = ioRegExp.exec(text);\n }\n text = t == "" ? text : t;\n\n var paramsRegExp = /\s{\s{\s{(.*?)(?:\s|(.*?))?\s}\s}\s}/mg;\n t = "";\n var pi = 0;\n match = paramsRegExp.exec(text);\n while(match) {\n var name = match[1];\n var def = match[2];\n var val = params[name];\n if(!val) {\n val = def;\n }\n if(!val) {\n val = match[0];\n }\n t += text.substring(pi,match.index) + val;\n pi = paramsRegExp.lastIndex;\n match = paramsRegExp.exec(text);\n }\n return t == "" ? text : t;\n};\n\nMediaWikiFormatter.endOfParams = function(w,text)\n{\n var p = 0;\n var i = text.indexOf("|");\n if(i==-1) {return -1;}\n var n = text.indexOf("\sn");\n if(n!=-1 && n<i) {return -1;}\n var b = text.indexOf("[[");\n if(b!=-1 && b<i) {return -1;}// can't have [[ in parameters\n \n b = text.indexOf("{{");\n while(b!=-1 && b<i) {\n // have {{ before |, so need to find first "|" after "{{..}}" pairs\n //cut off the ..{{, find the }} cut off and repeat\n p += b;\n text = text.substr(b);\n var c = text.indexOf("}}");\n p += c;\n text = text.substr(c);\n i = text.indexOf("|");\n if(i==-1) {return -1;}\n n = text.indexOf("\sn");\n if(n!=-1 && n<i) {return -1;}\n b = text.indexOf("{{");\n i = -1;\n }\n return i;\n};\n\nMediaWikiFormatter.readToDelim = function(w)\n//!!! this is a bit rubish, needs doing properly.\n{\n//#delimiter, startBracket terminatorBracket\n var dRegExp = /\s|/mg;\n var sRegExp = /\s[\s[/mg;\n var tRegExp = /\s]\s]/mg;\n\n dRegExp.lastIndex = w.startMatch;\n var dMatch = dRegExp.exec(w.source);\n sRegExp.lastIndex = w.startMatch;\n var sMatch = sRegExp.exec(w.source);\n tRegExp.lastIndex = w.startMatch;\n var tMatch = tRegExp.exec(w.source);\n if(!tMatch) {\n //mwDebug(w.output,"ERROR1");\n return false;\n }\n\n while(sMatch && sMatch.index<tMatch.index) {\n if(dMatch && dMatch.index<sMatch.index) {\n //# delim is before startBracket, so return it\n//mwDebug(w.output,"di:"+dMatch.index+" dl:"+sRegExp.lastIndex);\n w.nextMatch = dRegExp.lastIndex;\n w.matchLength = dMatch.index - w.startMatch;\n return true;\n }\n//mwDebug(w.output,"si:"+sMatch.index+" sl:"+sRegExp.lastIndex);\n//mwDebug(w.output,"ti:"+tMatch.index+" tl:"+tRegExp.lastIndex);\n //# startBracket before termBracket, so skip over bracket pairs\n // found eg [[, so look for ]]\n tRegExp.lastIndex = sRegExp.lastIndex;\n tMatch = tRegExp.exec(w.source);\n//mwDebug(w.output,"xti:"+tMatch.index+" tl:"+tRegExp.lastIndex);\n \n // and look for another [[\n w.nextMatch = tRegExp.lastIndex;\n dRegExp.lastIndex = w.nextMatch;\n dMatch = dRegExp.exec(w.source);\n sRegExp.lastIndex = w.nextMatch;\n sMatch = sRegExp.exec(w.source);\n tRegExp.lastIndex = w.nextMatch;\n tMatch = tRegExp.exec(w.source);\n }\n \n if(dMatch && dMatch.index<tMatch.index) {\n //# delim is before term, so return it\n//mwDebug(w.output,"2di:"+dMatch.index+" dl:"+sRegExp.lastIndex);\n w.nextMatch = dRegExp.lastIndex;\n w.matchLength = dMatch.index - w.startMatch;\n return true;\n }\n if(tMatch) {\n //# delim is before term, so return it\n//mwDebug(w.output,"2ti:"+tMatch.index+" tl:"+tRegExp.lastIndex);\n w.nextMatch = tRegExp.lastIndex;\n w.matchLength = tMatch.index - w.startMatch;\n return false;\n }\n //mwDebug(w.output,"ERROR2");\n //# return term\n w.nextMatch = tRegExp.lastIndex;\n w.matchLength = -1;\n return false;\n};\n\nMediaWikiFormatter.getParams = function(w)\n{\n var params = [];\n var i = 1;\n w.startMatch = w.nextMatch;\n var read = MediaWikiFormatter.readToDelim(w);\n if(w.matchLength!=-1) {\n params[i] = w.source.substr(w.startMatch,w.matchLength);\n }\n while(read) {\n i++;\n w.startMatch = w.nextMatch;\n read = MediaWikiFormatter.readToDelim(w);\n if(w.matchLength!=-1) {\n params[i] = w.source.substr(w.startMatch,w.matchLength);\n }\n }\n return params;\n};\n\nMediaWikiFormatter.setFromParams = function(w,p)\n{\n var r = {};\n var re = /\ss*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\sw|%|#)*))/mg;\n var match = re.exec(p);\n while(match)\n {\n var s = match[1].unDash();\n if(match[2]) {\n r[s] = match[2];\n } else if(match[3]) {\n r[s] = match[3];\n } else {\n r[s] = match[4];\n }\n match = re.exec(p);\n }\n return r;\n};\n\nMediaWikiFormatter.setAttributesFromParams = function(e,p)\n{\n var re = /\ss*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\sw|%|#)*))/mg;\n var match = re.exec(p);\n while(match) {\n var s = match[1].unDash();\n if(s == "bgcolor") {\n s = "backgroundColor";\n }\n try {\n if(match[2]) {\n e.setAttribute(s,match[2]);\n } else if(match[3]) {\n e.setAttribute(s,match[3]);\n } else {\n e.setAttribute(s,match[4]);\n }\n }\n catch(ex) {}\n match = re.exec(p);\n }\n};\n\nconfig.mediaWikiFormatters = [\n{\n name: "mediaWikiHeading",\n match: "^={2,6}(?!=)\s\sn?",\n termRegExp: /(={2,6}\sn?)/mg,\n handler: function(w)\n {\n var output = w.output.nodeType==1 && w.output.nodeName=="P" ? w.output.parentNode : w.output;\n var e = createTiddlyElement(output,"h" + w.matchLength);\n var a = createTiddlyElement(e,"a");// drop anchor\n var t = w.tiddler ? w.tiddler.title + ":" : "";\n var len = w.source.substr(w.nextMatch).indexOf("=");\n a.setAttribute("name",t+w.source.substr(w.nextMatch,len));\n w.subWikifyTerm(e,this.termRegExp);\n w.output = createTiddlyElement(output,"p");\n }\n},\n\n{\n name: "mediaWikiTable",\n match: "^\s\s{\s\s|", // ^{|\n tableTerm: "\s\sn\s\s|\s\s}", // |}\n rowStart: "\s\sn\s\s|\s\s-", // \sn|-\n cellStart: "\s\sn!|!!|\s\s|\s\s||\s\sn\s\s|", //\sn! or !! or || or \sn|\n caption: "\s\sn\s\s|\s\s+",\n rowTerm: null,\n cellTerm: null,\n inCellTerm: null,\n tt: 0,\n debug: null,\n rowTermRegExp: null,\n handler: function(w)\n {\n if(!this.rowTermRegExp) {\n this.rowTerm = "(" + this.tableTerm +")|(" + this.rowStart + ")";\n this.cellTerm = this.rowTerm + "|(" + this.cellStart + ")";\n this.inCellTerm = "(" + this.match + ")|" + this.rowTerm + "|(" + this.cellStart + ")";\n this.caption = "(" + this.caption + ")|" + this.cellTerm;\n\n this.rowTermRegExp = new RegExp(this.rowTerm,"mg");\n this.cellTermRegExp = new RegExp(this.cellTerm,"mg");\n this.inCellTermRegExp = new RegExp(this.inCellTerm,"mg");\n this.captionRegExp = new RegExp(this.caption,"mg");\n }\n//this.debug = createTiddlyElement(w.output,"p");\n//mwDebug(this.debug,"start table");\n this.captionRegExp.lastIndex = w.nextMatch;\n var match = this.captionRegExp.exec(w.source);\n if(!match) {return;}\n //var inPara = w.output.nodeType==1 && w.output.nodeName=="P" ? true : false;\n //var output = inPara ? w.output.parentNode : w.output;\n var output = w.output;\n var table = createTiddlyElement(output,"table");\n var rowContainer = table;\n\n var i = w.source.indexOf("\sn",w.nextMatch);\n if(i>w.nextMatch) {\n MediaWikiFormatter.setAttributesFromParams(table,w.source.substring(w.nextMatch,i));\n w.nextMatch = i;\n }\n\n var rowCount = 0;\n var eot = false;\n if(match[1]) {\n // caption\n var caption = createTiddlyElement(table,"caption");\n w.nextMatch = this.captionRegExp.lastIndex;\n var captionText = w.source.substring(w.nextMatch);\n var n = captionText.indexOf("\sn");\n captionText = captionText.substr(0,n);\n i = MediaWikiFormatter.endOfParams(w,captionText);\n if(i!=-1) {\n captionText = w.source.substr(w.nextMatch,i);\n //captionText = captionText.replace(/^\s+/mg,"")//!!hack until I fix this properly\n //MediaWikiFormatter.setAttributesFromParams(caption,captionText);\n w.nextMatch += i+1;\n }\n if(caption != table.firstChild) {\n table.insertBefore(caption,table.firstChild);\n }\n w.subWikify(caption,this.cellTerm);\n w.nextMatch -= w.matchLength;// rewind to before the match\n this.cellTermRegExp.lastIndex = w.nextMatch;\n var match2 = this.cellTermRegExp.exec(w.source);\n if(match2) {\n if(match2[3]) {\n // no first row marker\n eot = this.rowHandler(w,createTiddlyElement(rowContainer,"tr"));\n rowCount++;\n }\n }\n } else if(match[3]) {\n // row\n w.nextMatch = this.captionRegExp.lastIndex-match[3].length;// rewind to before the match\n } else if(match[4]) {\n // cell, no first row marker in table\n w.nextMatch = this.captionRegExp.lastIndex-match[4].length;// rewind to before the match\n eot = this.rowHandler(w,createTiddlyElement(rowContainer,"tr"));\n rowCount++;\n }\n\n this.rowTermRegExp.lastIndex = w.nextMatch;\n match = this.rowTermRegExp.exec(w.source);\n while(match && eot==false) {\n if(match[1]) {\n // end table\n w.nextMatch = this.rowTermRegExp.lastIndex;\n if(w.tableDepth==0) {\n return;\n }\n } else if(match[2]) {\n // row\n var rowElement = createTiddlyElement(rowContainer,"tr");\n w.nextMatch += match[2].length;// skip over the match\n i = w.source.indexOf("\sn",w.nextMatch);\n if(i>w.nextMatch) {\n MediaWikiFormatter.setAttributesFromParams(rowElement,w.source.substring(w.nextMatch,i));\n w.nextMatch = i;\n }\n eot = this.rowHandler(w,rowElement);\n }\n rowCount++;\n this.rowTermRegExp.lastIndex = w.nextMatch;\n match = this.rowTermRegExp.exec(w.source);\n }//# end while\n if(w.tableDepth==0) {\n w.nextMatch +=3;// skip over tableterm, \sn|}\n }\n //if(inPara)\n // w.output = createTiddlyElement(output,"p");\n },//# end handler\n\n rowHandler: function(w,e)\n {// assumes w.nextMatch points to first cell terminator, returns false if any improperly terminated element\n var cell;\n this.inCellTermRegExp.lastIndex = w.nextMatch;\n var match = this.inCellTermRegExp.exec(w.source);\n while(match) {\n if(match[1])\n {// nested table\n w.tableDepth++;\n w.subWikify(cell,this.tableTerm);\n w.nextMatch = this.tt;\n w.tableDepth--;\n return false;\n } else if(match[2]) {\n //# end table\n this.tt = this.inCellTermRegExp.lastIndex;\n return true;\n } else if(match[3]) {\n //# end row\n return false;\n } else if(match[4]) {\n //# cell\n var len = match[4].length;\n cell = createTiddlyElement(e,match[4].substr(len-1)=="!"?"th":"td");\n w.nextMatch += len;//skip over the match\n\n this.inCellTermRegExp.lastIndex = w.nextMatch;\n var lookahead = this.inCellTermRegExp.exec(w.source);\n if(!lookahead) {\n return false;// improperly terminated table\n }\n var cellText = w.source.substr(w.nextMatch,lookahead.index-w.nextMatch);\n var oldSource = w.source;\n var i = MediaWikiFormatter.endOfParams(w,cellText);//cellText.indexOf("|");\n if(i!=-1) {\n cellText = cellText.replace(/^\s+/mg,""); //!!hack until I fix this properly\n MediaWikiFormatter.setAttributesFromParams(cell,cellText.substr(0,i-1));\n cellText = cellText.substring(i+1);\n }\n cellText = cellText.replace(/^\ss*/mg,""); //# remove leading spaces so not treated as preformatted\n w.source = cellText;\n w.nextMatch = 0;\n w.subWikifyUnterm(cell);\n w.source = oldSource;\n w.nextMatch = lookahead.index;\n }\n this.inCellTermRegExp.lastIndex = w.nextMatch;\n match = this.inCellTermRegExp.exec(w.source);\n }//# end while\n return false;\n }//# end rowHandler\n},\n\n{\n name: "mediaWikiList",\n match: "^[\s\s*#;:]+ ",\n lookaheadRegExp: /^([\s*#;:])+ /mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var output = w.output.parentNode;\n var stack = [output];\n var currLevel = 0, currType = null;\n var listType, itemType;\n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n switch(lookaheadMatch[1]) {\n case "*":\n listType = "ul";\n itemType = "li";\n break;\n case "#":\n listType = "ol";\n itemType = "li";\n break;\n case ";":\n listType = "dl";\n itemType = "dt";\n break;\n case ":":\n listType = "dl";\n itemType = "dd";\n break;\n default:\n break;\n }\n var listLevel = lookaheadMatch[0].length;\n w.nextMatch += listLevel;\n if(listLevel > currLevel) {\n for(var i=currLevel; i<listLevel; i++) {\n stack.push(createTiddlyElement(stack[stack.length-1],listType));\n }\n } else if(listLevel < currLevel) {\n for(i=currLevel; i>listLevel; i--) {\n stack.pop();\n }\n } else if(listLevel == currLevel && listType != currType) {\n stack.pop();\n stack.push(createTiddlyElement(stack[stack.length-1],listType));\n }\n currLevel = listLevel;\n currType = listType;\n var e = createTiddlyElement(stack[stack.length-1],itemType);\n w.subWikifyTerm(e,this.termRegExp);\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n w.output = createTiddlyElement(output,"p");\n }\n},\n\n{\n name: "mediaWikiRule",\n match: "^----+$\s\sn?",\n handler: function(w)\n {\n var output = w.output.parentNode;\n createTiddlyElement(output,"hr");\n w.output = createTiddlyElement(output,"p");\n }\n},\n\n{\n name: "mediaWikiLeadingSpaces",\n match: "^ ",\n lookaheadRegExp: /^ /mg,\n termRegExp: /(\sn)/mg,\n handler: function(w)\n {\n var e = createTiddlyElement(w.output,"pre");\n while(true) {\n w.subWikifyTerm(e,this.termRegExp);\n createTiddlyElement(e,"br");\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n w.nextMatch += lookaheadMatch[0].length;\n } else {\n break;\n }\n }\n }\n},\n\n/*\n[[Image:Westminstpalace.jpg|frame|none|caption text]]\n//http://en.wikipedia.org/wiki/Image:Westminstpalace.jpg\n<a href="/wiki/Image:Westminstpalace.jpg" class="internal" title="caption text">\n<img src="http://upload.wikimedia.org/wikipedia/commons/3/39/Westminstpalace.jpg"\n alt="caption text" width="400" height="300" longdesc="/wiki/Image:Westminstpalace.jpg" />\n</a>\n\n[[image:Stockholm.jpg|right|350px|thumb|Stockholm panorama from the City Hall]]\n<div class="thumb tright">\n <div style="width:352px;">\n <a href="/wiki/Image:Stockholm.jpg" class="internal" title="Stockholm panorama from the City Hall">\n <img src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Stockholm.jpg/350px-Stockholm.jpg" alt="Stockholm panorama from the City Hall" width="350" height="84" longdesc="/wiki/Image:Stockholm.jpg" />\n </a>\n <div class="thumbcaption">\n <div class="magnify" style="float:right">\n <a href="/wiki/Image:Stockholm.jpg" class="internal" title="Enlarge">\n <img src="/skins-1.5/common/images/magnify-clip.png" width="15" height="11" alt="Enlarge" />\n </a>\n </div>\n Stockholm panorama from the City Hall\n </div>\n </div>\n</div>\n*/\n\n{\n name: "mediaWikiImage",\n match: "\s\s[\s\s[(?:[Ii]mage|Bild):",\n lookaheadRegExp: /\s[\s[(?:[Ii]mage|Bild):/mg,\n defaultPx: 180,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var params = MediaWikiFormatter.getParams(w);\n var src = params[1];\n src = src.trim().replace(/ /mg,"_");\n src = src.substr(0,1).toUpperCase() + src.substring(1);\n var palign = null;\n var ptitle = null;\n var psrc = false;\n var px = null;\n var pthumb = false;\n var pframed = false;\n for(var i=2;i<params.length;i++) {\n //# right, left, center, none, sizepx, thumbnail (thumb), frame, and alternate (caption) text.\n var p = params[i];\n if(p=="right"||p=="left"||p=="center"||p=="none") {\n palign = p;\n } else if(p=="thumbnail"||p=="thumb") {\n pthumb = true;\n } else if(p=="framed") {\n pframed = true;\n } else if(/\sd{1,4} ?px/.exec(p)) {\n px = p.substr(0,p.length-2).trim();\n } else {\n ptitle = p;\n }\n }//#end for\n if(pthumb) {\n var output = w.output.nodeType==1 && w.output.nodeName=="P" ? w.output.parentNode : w.output;\n if(!palign) {\n palign = "right";\n }\n if(!px) {\n px = 180;\n }\n psrc = px + "px-" + src;\n var t = createTiddlyElement(output,"div",null,"thumb"+(palign?" t"+palign:""));\n var s = createTiddlyElement(t,"div");\n s.style["width"] = Number(px) + 2 + "px";\n var a = createTiddlyElement(s,"a",null,"internal");\n if(config.options.chkMediaWikiDisplayEnableThumbZoom) {\n a.href = src;\n }\n a.title = ptitle;\n var img = createTiddlyElement(a,"img");\n img.src = psrc;\n img.width = px;\n img.longdesc = "Image:" + src;\n img.alt = ptitle;\n\n var tc = createTiddlyElement(s,"div",null,"thumbcaption");\n var oldSource = w.source; var oldMatch = w.nextMatch;\n w.source = ptitle; w.nextMatch = 0;\n w.subWikifyUnterm(tc);\n w.source = oldSource; w.nextMatch = oldMatch;\n\n if(config.options.chkMediaWikiDisplayEnableThumbZoom) {\n var tm = createTiddlyElement(tc,"div",null,"magnify");\n tm.style["float"] = "right";\n var ta = createTiddlyElement(tm,"a",null,"internal");\n ta.title = "Enlarge";\n timg = createTiddlyElement(ta,"img"); timg.src = "magnify-clip.png"; timg.alt = "Enlarge"; timg.width = "15"; timg.height = "11";\n ta.href = src;\n }\n } else {\n // not pthumb\n a = createTiddlyElement(w.output,"a",null,"image");\n a.title = ptitle;\n img = createTiddlyElement(a,"img");\n if(palign) {img.align = palign;}\n img.src = px ? px + "px-" + src : src;\n if(px) {img.width = px;}\n img.longdesc = "Image:" + src;\n img.alt = ptitle;\n }\n }\n }//#end image handler\n},\n\n{\n name: "mediaWikiExplicitLink",\n match: "\s\s[\s\s[",\n lookaheadRegExp: /\s[\s[(?:([a-z]{2,3}:)?)(#?)([^\s|\s]]*?)(?:(\s]\s](\sw)*)|(\s|(.*?)\s]\s]))/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n if(!lookaheadMatch[1]) {\n // not (eg) [[en:...]]\n var e;\n var link = lookaheadMatch[3];\n var text = link;\n link = link.substr(0,1).toUpperCase() + link.substring(1);\n if(lookaheadMatch[4]) {\n // Simple bracketted link\n if(lookaheadMatch[2]) {\n var a = createTiddlyElement(e,"a");// drop anchor\n a.setAttribute("name",link);\n } else {\n e = createTiddlyLink(w.output,link,false,null,w.isStatic);\n if(lookaheadMatch[5]) {\n text += lookaheadMatch[5];//add any non-space after the ]]\n }\n createTiddlyText(e,text);\n }\n } else if(lookaheadMatch[6]) {\n // Piped link\n if(config.formatterHelpers.isExternalLink(link)) {\n e = createExternalLink(w.output,link);\n } else {\n e = createTiddlyLink(w.output,link,false,null,w.isStatic);\n }\n var oldSource = w.source; var oldMatch = w.nextMatch;\n w.source = lookaheadMatch[7].trim(); w.nextMatch = 0;\n w.subWikifyUnterm(e);\n w.source = oldSource; w.nextMatch = oldMatch;\n }\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n//#{{Audio|sv-Stockholm.ogg|Stockholm}}\n//**tem//\n{\n name: "mediaWikiTemplate",\n match: "\s\s{\s\s{[^\s\s{]",\n lookaheadRegExp: /\s{\s{((?:.|\sn)*?)\s}\s}/mg,\n handler: function(w)\n {\n//mwDebug(w.output,"wt:"+w.matchText+" ws:"+w.matchStart+" wn:"+w.nextMatch+" wl:"+w.matchLength);\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n//mwDebug(w.output,"lm:"+lookaheadMatch);\n//mwDebug(w.output,"lmi:"+lookaheadMatch.index+" lI:"+this.lookaheadRegExp.lastIndex);\n//mwDebug(w.output,"lm1:"+lookaheadMatch[1]);\n//mwDebug(w.output,"lm2:"+lookaheadMatch[2]);\n var lastIndex = this.lookaheadRegExp.lastIndex;\n var contents = lookaheadMatch[1];\n // see http://meta.wikimedia.org/wiki/Help:Variable\n if(contents=="PAGENAME") {\n createTiddlyText(w.output,w.tiddler.title);\n w.nextMatch = lastIndex;\n return;\n }\n var i = contents.indexOf("|");\n var title = i==-1 ? contents : contents.substr(0,i);\n title = title.trim().replace(/_/mg," ");// Underscore in template name is equivalent to space\n title = "Template:" + title.substr(0,1).toUpperCase() + title.substring(1);\n var tiddler = store.fetchTiddler(title);\n var oldSource = w.source;\n if(tiddler) {\n params = {};\n w.source = lookaheadMatch[1];\n if(i!=-1) {\n w.nextMatch = 0;\n params = MediaWikiFormatter.getTemplateParams(w);\n }\n w.source = MediaWikiFormatter.expandTemplate(w,tiddler,params);\n w.nextMatch = 0;\n w.subWikifyUnterm(w.output);\n } else {\n if(config.options.chkMediaWikiDisplayEmptyTemplateLinks) {\n // for conveniece, output the name of the template so can click on it and create tiddler\n w.source = "[["+title+"]]";\n w.nextMatch = 0;\n w.subWikifyUnterm(w.output);\n }\n }\n w.source = oldSource;\n w.nextMatch = lastIndex;\n }\n }\n},\n\n{\n name: "mediaWikiParagraph",\n match: "\s\sn{2,}",\n handler: function(w)\n {\n var output = w.output.nodeType==1 && w.output.nodeName=="P" ? w.output.parentNode : w.output;\n w.output = createTiddlyElement(output,"p");\n }\n},\n\n{\n name: "mediaWikiExplicitLineBreak",\n match: "<br ?/?>",\n handler: function(w)\n {\n createTiddlyElement(w.output,"br");\n }\n},\n\n{\n name: "mediaWikiExplicitLineBreakWithParams",\n match: "<br(?:\s\ss*(?:(?:.*?)=[\s"']?(?:.*?)[\s"']?))*?\s\ss*/?>",\n lookaheadRegExp: /<br((?:\ss+(?:.*?)=["']?(?:.*?)["']?)*?)?\ss*\s/?>/mg,\n handler: function(w)\n {\n //# copes with erroneous <br clear="right">\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var e =createTiddlyElement(w.output,"br");\n if(lookaheadMatch[1]) {\n MediaWikiFormatter.setAttributesFromParams(e,lookaheadMatch[1]);\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;// empty tag\n }\n }\n},\n\n{\n name: "mediaWikiTitledUrlLink",\n match: "\s\s[" + config.textPrimitives.urlPattern + "(?:\s\ss+[^\s\s]]+)?" + "\s\s]",\n //# eg [http://www.nupedia.com] or [http://www.nupedia.com Nupedia]\n //# <sup id="_ref-1" class="reference"><a href="#_note-1" title="">[2]</a>\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp("\s\s[(" + config.textPrimitives.urlPattern + ")(?:\s\ss+([^\s[]+))?" + "\s\s]","mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index==w.matchStart) {\n var link = lookaheadMatch[1];\n var s = createTiddlyElement(w.output,"sup");\n var e = createExternalLink(s,link);\n if(lookaheadMatch[2]) {\n var oldSource = w.source; var oldMatch = w.nextMatch;\n w.source = lookaheadMatch[2].trim(); w.nextMatch = 0;\n w.subWikifyUnterm(e);\n w.source = oldSource; w.nextMatch = oldMatch;\n } else {\n w.linkCount++;\n createTiddlyText(e,"["+w.linkCount+"]");\n }\n w.nextMatch = lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "mediaWikiUrlLink",\n match: config.textPrimitives.urlPattern,\n handler: function(w)\n {\n w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);\n }\n},\n\n{\n name: "mediaWikiBold",\n match: "'''",\n termRegExp: /('''|\sn)/mg,\n element: "strong",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "mediaWikiItalic",\n match: "''(?!')",\n termRegExp: /(''(?!')|\sn)/mg,\n element: "em",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "mediaWikiUnderline",\n match: "<u>",\n termRegExp: /(<\s/u>|\sn)/mg,\n element: "u",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "mediaWikiStrike",\n match: "<s>",\n termRegExp: /(<\s/s>|\sn)/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "mediaWikiBoldTag",\n match: "<b>",\n termRegExp: /(<\s/b>|\sn)/mg,\n element: "b",\n handler: config.formatterHelpers.createElementAndWikify\n},\n\n{\n name: "mediaWikiTemplateParam",// note, this only gets invoked when viewing the template\n match: "\s\s{\s\s{\s\s{",\n lookaheadRegExp: /(\s{\s{\s{(?:.|\sn)*?\s}\s}\s})/mg,\n element: "span",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n//# See http://en.wikipedia.org/wiki/Wikipedia:Footnotes\n//# for an explanation of how to generate footnotes using the <ref(erences/)> tags\n{\n name: "mediaWikiInsertReference",\n match: "<ref[^/]*>",\n lookaheadRegExp: /<ref(\ss+(?:.*?)=["']?(?:.*?)["']?)?>([^<]*?)<\s/ref>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var x = {id:"",value:""};\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n if(!w.referenceCount) {\n w.referenceCount = 0;\n w.references = {};\n }\n var s = createTiddlyElement(w.output,"sup",null,"reference");\n var a = createTiddlyElement(s,"a");\n var prefix = w.tiddler ? w.tiddler.title + ":" : "";\n if(lookaheadMatch[1]) {\n var r = {};\n r = MediaWikiFormatter.setFromParams(w,lookaheadMatch[1]);\n var name = r.name ? r.name.trim() : "";\n name = name.replace(/ /g,"_");\n s.id = prefix + "_ref-" + name;// + "_" + nameCount;(w.referenceCount+1);\n if(!w.references[name]) {\n w.references[name] = x;\n w.references[name].id = w.referenceCount;\n w.references[name].value = lookaheadMatch[2].trim();\n }\n } else {\n w.references[w.referenceCount] = x;\n w.references[w.referenceCount].id = w.referenceCount;\n w.references[w.referenceCount].value = lookaheadMatch[2].trim();\n name = w.referenceCount;\n s.id = prefix + "_ref-" + w.referenceCount;\n }\n w.referenceCount++;\n a.title = lookaheadMatch[2].trim();//mb, extra to wikipedia\n a.href = "#" + prefix + "_note-" + name;\n a.innerHTML = "["+w.referenceCount+"]";\n//#<sup id="_ref-0" class="reference"><a href="#_note-0" title="">[1]</a></sup>\n//#<sup id="_ref-foreign_ministry_0" class="reference"><a href="#_note-foreign_ministry" title="">[2]</a></sup>\n }\n }\n},\n\n{\n name: "mediaWikiListReferences",\n match: "<references ?/>",\n lookaheadRegExp: /<references ?\s/>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(config.options.chkMediaWikiListReferences && w.referenceCount) {\n var ol = createTiddlyElement(w.output,"ol",null,"references");\n var oldSource = w.source;\n if(w.referenceCount>0) {\n for(var i in w.references) {\n var li = createTiddlyElement(ol,"li");\n var prefix = w.tiddler ? w.tiddler.title + ":" : "";\n var b = createTiddlyElement(li,"b");\n var a = createTiddlyElement(b,"a");\n li.id = prefix + "_note-" + i;\n a.href = "#" + prefix + "_ref-" + i;\n a.innerHTML = "^";\n w.source = w.references[i].value;\n w.nextMatch = 0;\n w.subWikifyUnterm(li);\n }\n }\n w.source = oldSource;\n }\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n},\n\n{\n name: "mediaWikiRepeatReference",\n match: "<ref[^/]*/>",\n lookaheadRegExp: /<ref(\ss+(?:.*?)="(?:.*?)")?\ss*\s/>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var x = {id:"",value:""};\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n//#<ref name="foreign ministry">\n//#<sup id="_ref-foreign_ministry_1" class="reference"><a href="#_note-foreign_ministry" title="">[2]</a></sup>\n var s = createTiddlyElement(w.output,"sup",null,"reference");\n var a = createTiddlyElement(s,"a");\n var prefix = w.tiddler ? w.tiddler.title : "";\n if(lookaheadMatch[1]) {\n var r = {};\n r = MediaWikiFormatter.setFromParams(w,lookaheadMatch[1]);\n var name = r.name ? r.name.trim() : "";\n name = name.replace(/ /g,"_");\n s.id = prefix + "_ref-" + name +"_" + (w.referenceCount+1);\n var count = w.references && w.references[name] ? (w.references[name].id+1) : "?";\n }\n a.href = "#" + prefix + "_note-" + name;\n a.innerHTML = "["+count+"]";\n a.title = name;\n }\n }//# end handler\n},\n\n{\n name: "mediaWikiHtmlEntitiesEncoding",\n match: "&#?[a-zA-Z0-9]{2,8};",\n handler: function(w)\n {\n createTiddlyElement(w.output,"span").innerHTML = w.matchText;\n }\n},\n\n{\n name: "mediaWikiComment",\n match: "<!\s\s-\s\s-",\n lookaheadRegExp: /<!\s-\s-((?:.|\sn)*?)\s-\s->/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "mediaWikiIncludeOnly",\n match: "<includeonly>",\n lookaheadRegExp: /<includeonly>((?:.|\sn)*?)<\s/includeonly>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n},\n\n{\n name: "mediaWikiNoWiki",\n match: "<nowiki>",\n lookaheadRegExp: /<nowiki>((?:.|\sn)*?)<\s/nowiki>/mg,\n element: "span",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "mediaWikiPreNoWiki",\n match: "<pre>\ss*<nowiki>",\n lookaheadRegExp: /<pre>\ss*<nowiki>((?:.|\sn)*?)<\s/nowiki>\ss*<\s/pre>/mg,\n element: "pre",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "mediaWikiPre",\n match: "<pre>",\n lookaheadRegExp: /<pre>((?:.|\sn)*?)<\s/pre>/mg,\n element: "pre",\n handler: config.formatterHelpers.enclosedTextHelper\n},\n\n{\n name: "mediaWikiGallery",\n match: "<gallery>",\n lookaheadRegExp: /[Ii]mage:(.*?)\sn/mg,\n handler: function(w)\n {\n//#basic syntax is:\n//#<gallery>\n//#Image:Wiki.png\n//#Image:Wiki.png|Captioned\n//#Image:Wiki.png|[[Help:Contents/Links|Links]] can be put in captions.\n//#Image:Wiki.png|Full [[MediaWiki]]<br />[[syntax]] may now be used…\n//#</gallery>\n//#<table class="gallery" cellspacing="0" cellpadding="0">\n//#<tr>\n//#...\n//#</tr>\n//#</table>\n var table = createTiddlyElement(w.output,"table",null,"gallery");\n table.cellspacing = "0";\n table.cellpadding = "0";\n var rowElem = createTiddlyElement(table,"tr");\n var col = 0;\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var nM = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n var oldSource = w.source;\n while(lookaheadMatch) {\n nM += lookaheadMatch[1].length;\n w.source = lookaheadMatch[1] +"]]";//!! ]] is hack until getParams is working\n w.nextMatch = 0;\n var params = MediaWikiFormatter.getParams(w);\n var src = params[1];\n src = src.trim().replace(/ /mg,"_");\n src = src.substr(0,1).toUpperCase() + src.substring(1);\n var palign = "right"; \n var psrc = "120px-"+src;\n var px = 120;\n var pframed = false;\n ptitle = null;\n for(var i=2;i<params.length;i++) {\n //right, left, center, none, sizepx, thumbnail (thumb), frame, and alternate (caption) text.\n var p = params[i];\n if(p=="right"||p=="left"||p=="center"||p=="none") {\n palign = p;\n } else if(p=="framed") {\n pframed = true;\n } else if(/\sd{1,4}px/.exec(p)) {\n px = p.substr(0,p.length-2).trim();\n psrc = px + "px-" + src;\n } else {\n ptitle = p;\n }\n }//#end for\n//#<td>\n//#<div class="gallerybox">\n//# <div class="thumb" style="padding: 26px 0;">\n//# <a href="/wiki/Image:Paul_C%C3%A9zanne_184.jpg" title="Image:Paul Cézanne 184.jpg">\n//# <img src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Paul_C%C3%A9zanne_184.jpg/120px-Paul_C%C3%A9zanne_184.jpg" width="120" height="94" alt="" />\n//# </a>\n//# </div>\n//# <div class="gallerytext">\n//# <p><i>La Pain et les Oeufs</i> (Bread and Eggs), thought to present austerity, 1865. Signed and dated. Possibly in Spanish style.</p>\n//# </div>\n//#</div>\n//#</td>\n var td = createTiddlyElement(rowElem,"td");\n var gb = createTiddlyElement(td,"div",null,"gallerybox");\n var t = createTiddlyElement(gb,"div",null,"thumb");\n t.style["padding"] = "26px 0";\n\n var a = createTiddlyElement(t,"a");\n if(config.options.chkMediaWikiDisplayEnableThumbZoom) {\n a.href = src;\n }\n a.title = ptitle;\n var img = createTiddlyElement(a,"img");\n img.src = psrc;\n img.width = px;\n img.alt = "";//ptitle;\n\n var gt = createTiddlyElement(gb,"div",null,"gallerytext");\n p = createTiddlyElement(gt,"p");\n var oldSource2 = w.source; var oldMatch = w.nextMatch;\n w.source = ptitle; w.nextMatch = 0;\n w.subWikifyUnterm(p);\n w.source = oldSource2; w.nextMatch = oldMatch;\n\n col++;\n if(col>3) {\n rowElem = createTiddlyElement(table,"tr");\n col = 0;\n }\n w.source = oldSource;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n w.nextMatch = nM + "<gallery>".length*2+1+"Image:".length;//!! hack\n }\n},\n\n{\n name: "mediaWikiHtmlTag",\n match: "<[a-zA-Z]{2,}(?:\s\ss*(?:(?:.*?)=[\s"']?(?:.*?)[\s"']?))*?>",\n lookaheadRegExp: /<([a-zA-Z]{2,})((?:\ss+(?:.*?)=["']?(?:.*?)["']?)*?)?\ss*(\s/)?>/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var e =createTiddlyElement(w.output,lookaheadMatch[1]);\n if(lookaheadMatch[2]) {\n MediaWikiFormatter.setAttributesFromParams(e,lookaheadMatch[2]);\n }\n if(lookaheadMatch[3]) {\n w.nextMatch = this.lookaheadRegExp.lastIndex;// empty tag\n } else {\n w.subWikify(e,"</"+lookaheadMatch[1]+">");\n }\n }\n }\n}\n];\n\nconfig.parsers.mediaWikiFormatter = new Formatter(config.mediaWikiFormatters);\nconfig.parsers.mediaWikiFormatter.formatTag = "MediaWikiFormat";\n} // end of "install only once"
There are many mountains in the area that I have, for some reason, decided to climb up. Call it insanity. Call it boredom. Call it adventure. Call it whatever you want, but I enjoy it. These are the mountains in the area I've hiked up:
<html>\n\nHave an idea for a micro cache, but have no container? Have no fear! This is a quick and easy off-the-road cache put here for one reason: the exchange of micro caches. Feel free to take a micro container without leaving anything behind. I give it a 2 terrain rating simply because there is no real trail to get here, but it's relatively flat and easy to get to.\n<br><br>\nThere's a nice parking spot immediately after the first cattle guard after the pavement ends. From there, the cache is 400 feet away through desert. This cache is an ammo can. Original contents include 4 empty pill bottles and a geocoin.<br><br>\n\n<TABLE BORDER="1">\n<TR>\n<TD>Cell Data</TD>\n<TD>Cell Data</TD>\n</TR><TR>\n<TD>Cell Data</TD>\n<TD>Cell Data</TD>\n</TR>\n</TABLE>\n\n</html>
235 unique caches.\n312 total logs.\n235 finds.\nAvg. Difficulty = 1.81\nAvg. Terrain = 1.76\nAvg. Challenge = 2.10\n47 hard caches (20%)\n12 (5.1%) archived
<div class='header' macro='gradient vert #000 #000'>\n <div class='headerShadow'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n <div class='headerForeground'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n <div id='topMenu' refresh='content' tiddler='MainMenu'></div>\n</div>\n<div id='sidebar'>\n <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n <div id='messageArea'></div>\n <div id='tiddlerDisplay'></div>\n</div>
I suppose I should have just titled this "Philosophy and religion," since I'm throwing in religious stuff here. I understand I have to be careful on a web page about what I put out about religion. I mostly want to use this page to inform people of various misunderstood religions. I do not necessarily agree with what I display here- they aren't my own held views (necessarily). I do like to learn about different beliefs, however.\n\n*[[Animism]]
This was a [[geocaching event|Event Caches]] that I put on/sponsored at the Village Inn. There were about 30 people there.\n\n[img[Everyone at the event|pillagethevillagesmall.png][pillagethevillagecrew.jpg]] \n* [[Cache Page|http://www.geocaching.com/seek/cache_details.aspx?guid=87781575-1f8d-4804-89bf-9903d2a3b3ca]]
function onClickDefaultHome(e) {\nstory.closeAllTiddlers();\nconfig.options.txtDefaultTiddlers = "";\nsaveOptionCookie('txtDefaultTiddlers');\nvar start = store.getTiddlerText("DefaultTiddlers");\nif(start)\nstory.displayTiddlers(null,start.readBracketedList());\n}\n\nconfig.macros["defaultHome"] = {label: "Home", prompt: "Show the default tiddlers", title: "Home"};\nconfig.macros.defaultHome.handler = function(place) {\ncreateTiddlyButton(place,this.label,this.prompt,onClickDefaultHome);\n\n}
/***\n|''Name:''|ForEachTiddlerPlugin|\n|''Version:''|1.0.5 (2006-02-05)|\n|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''Macros:''|[[ForEachTiddlerMacro]] v1.0.5|\n|''TiddlyWiki:''|1.2.38+, 2.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n!Description\n\nCreate customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.\n\n''Syntax:'' \n|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|\n|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|\n|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|\n|//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.|\n|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n\nSee details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].\n\n!Revision history\n* v1.0.5\n** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.\n** Support Firefox 1.5.0.1\n** Internal\n*** Make "JSLint" conform\n*** "Only install once"\n* v1.0.4 (2006-01-06)\n** Support TiddlyWiki 2.0\n* v1.0.3 (2005-12-22)\n** Features: \n*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) \n*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)\n** Enhancements:\n*** Improved error messages on InternetExplorer.\n* v1.0.2 (2005-12-10)\n** Features: \n*** context object also holds reference to store (TiddlyWiki)\n** Fixed Bugs: \n*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)\n* v1.0.1 (2005-12-08)\n** Features: \n*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".\n*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.\n*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).\n*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .\n*** Improved script evaluation (for where/sort clause and write scripts).\n* v1.0.0 (2005-11-20)\n** initial version\n\n!Code\n***/\n//{{{\n\n \n//============================================================================\n//============================================================================\n// ForEachTiddlerPlugin\n//============================================================================\n//============================================================================\n\n// Only install once\nif (!version.extensions.ForEachTiddlerPlugin) {\n\nversion.extensions.ForEachTiddlerPlugin = {major: 1, minor: 0, revision: 5, date: new Date(2006,2,5), source: "http://tiddlywiki.abego-software.de/#ForEachTiddlergPlugin"};\n\n// For backward compatibility with TW 1.2.x\n//\nif (!TiddlyWiki.prototype.forEachTiddler) {\n TiddlyWiki.prototype.forEachTiddler = function(callback) {\n for(var t in this.tiddlers) {\n callback.call(this,t,this.tiddlers[t]);\n }\n };\n}\n\n//============================================================================\n// forEachTiddler Macro\n//============================================================================\n\nversion.extensions.forEachTiddler = {major: 1, minor: 0, revision: 5, date: new Date(2006,2,5), provider: "http://tiddlywiki.abego-software.de"};\n\n// ---------------------------------------------------------------------------\n// Configurations and constants \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler = {\n // Standard Properties\n label: "forEachTiddler",\n prompt: "Perform actions on a (sorted) selection of tiddlers",\n\n // actions\n actions: {\n addToList: {},\n write: {}\n }\n};\n\n// ---------------------------------------------------------------------------\n// The forEachTiddler Macro Handler \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler.getContainingTiddler = function(e) {\n while(e && !hasClass(e,"tiddler"))\n e = e.parentNode;\n var title = e ? e.getAttribute("tiddler") : null; \n return title ? store.getTiddler(title) : null;\n};\n\nconfig.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n // config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);\n\n if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n // Parse the "in" clause\n var tiddlyWikiPath = undefined;\n if ((i < params.length) && params[i] == "in") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "TiddlyWiki path expected behind 'in'.");\n return;\n }\n tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the where clause\n var whereClause ="true";\n if ((i < params.length) && params[i] == "where") {\n i++;\n whereClause = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the sort stuff\n var sortClause = null;\n var sortAscending = true; \n if ((i < params.length) && params[i] == "sortBy") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "sortClause missing behind 'sortBy'.");\n return;\n }\n sortClause = this.paramEncode(params[i]);\n i++;\n\n if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {\n sortAscending = params[i] == "ascending";\n i++;\n }\n }\n\n // Parse the script\n var scriptText = null;\n if ((i < params.length) && params[i] == "script") {\n i++;\n scriptText = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the action. \n // When we are already at the end use the default action\n var actionName = "addToList";\n if (i < params.length) {\n if (!config.macros.forEachTiddler.actions[params[i]]) {\n this.handleError(place, "Unknown action '"+params[i]+"'.");\n return;\n } else {\n actionName = params[i]; \n i++;\n }\n } \n \n // Get the action parameter\n // (the parsing is done inside the individual action implementation.)\n var actionParameter = params.slice(i);\n\n\n // --- Processing ------------------------------------------\n try {\n this.performMacro({\n place: place, \n inTiddler: tiddler,\n whereClause: whereClause, \n sortClause: sortClause, \n sortAscending: sortAscending, \n actionName: actionName, \n actionParameter: actionParameter, \n scriptText: scriptText, \n tiddlyWikiPath: tiddlyWikiPath});\n\n } catch (e) {\n this.handleError(place, e);\n }\n};\n\n// Returns an object with properties "tiddlers" and "context".\n// tiddlers holds the (sorted) tiddlers selected by the parameter,\n// context the context of the execution of the macro.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {\n\n var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);\n\n var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;\n context["tiddlyWiki"] = tiddlyWiki;\n \n // Get the tiddlers, as defined by the whereClause\n var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);\n context["tiddlers"] = tiddlers;\n\n // Sort the tiddlers, when sorting is required.\n if (parameter.sortClause) {\n this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);\n }\n\n return {tiddlers: tiddlers, context: context};\n};\n\n// Returns the (sorted) tiddlers selected by the parameter.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlers = function(parameter) {\n return this.getTiddlersAndContext(parameter).tiddlers;\n};\n\n// Performs the macros with the given parameter.\n//\n// @param parameter holds the parameter of the macro as separate properties.\n// The following properties are supported:\n//\n// place\n// whereClause\n// sortClause\n// sortAscending\n// actionName\n// actionParameter\n// scriptText\n// tiddlyWikiPath\n//\n// All properties are optional. \n// For most actions the place property must be defined.\n//\nconfig.macros.forEachTiddler.performMacro = function(parameter) {\n var tiddlersAndContext = this.getTiddlersAndContext(parameter);\n\n // Perform the action\n var actionName = parameter.actionName ? parameter.actionName : "addToList";\n var action = config.macros.forEachTiddler.actions[actionName];\n if (!action) {\n this.handleError(parameter.place, "Unknown action '"+actionName+"'.");\n return;\n }\n\n var actionHandler = action.handler;\n actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);\n};\n\n// ---------------------------------------------------------------------------\n// The actions \n// ---------------------------------------------------------------------------\n\n// Internal.\n//\n// --- The addToList Action -----------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n\n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);\n return;\n }\n\n // Perform the action.\n var list = document.createElement("ul");\n place.appendChild(list);\n for (var i = 0; i < tiddlers.length; i++) {\n var tiddler = tiddlers[i];\n var listItem = document.createElement("li");\n list.appendChild(listItem);\n createTiddlyLink(listItem, tiddler.title, true);\n }\n};\n\n// Internal.\n//\n// --- The write Action ---------------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n if (p >= parameter.length) {\n this.handleError(place, "Missing expression behind 'write'.");\n return;\n }\n\n var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n\n // Parse the "toFile" option\n var filename = null;\n var lineSeparator = undefined;\n if ((p < parameter.length) && parameter[p] == "toFile") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");\n return;\n }\n \n filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));\n p++;\n if ((p < parameter.length) && parameter[p] == "withLineSeparator") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");\n return;\n }\n lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n }\n }\n \n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);\n return;\n }\n\n // Perform the action.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);\n var count = tiddlers.length;\n var text = "";\n for (var i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n text += func(tiddler, context, count, i);\n }\n \n if (filename) {\n if (lineSeparator !== undefined) {\n lineSeparator = lineSeparator.replace(/\s\sn/mg, "\sn").replace(/\s\sr/mg, "\sr");\n text = text.replace(/\sn/mg,lineSeparator);\n }\n saveFile(filename, convertUnicodeToUTF8(text));\n } else {\n var wrapper = createTiddlyElement(place, "span");\n wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);\n }\n};\n\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {\n return {\n place : placeParam, \n whereClause : whereClauseParam, \n sortClause : sortClauseParam, \n sortAscending : sortAscendingParam, \n script : scriptText,\n actionName : actionNameParam, \n actionParameter : actionParameterParam,\n tiddlyWikiPath : tiddlyWikiPathParam,\n inTiddler : inTiddlerParam\n };\n};\n\n// Internal.\n//\n// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of \n// the given path.\n//\nconfig.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {\n if (!idPrefix) {\n idPrefix = "store";\n }\n var lenPrefix = idPrefix.length;\n \n // Read the content of the given file\n var content = loadFile(this.getLocalPath(path));\n if(content === null) {\n throw "TiddlyWiki '"+path+"' not found.";\n }\n \n // Locate the storeArea div's\n var posOpeningDiv = content.indexOf(startSaveArea);\n var posClosingDiv = content.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1)) {\n throw "File '"+path+"' is not a TiddlyWiki.";\n }\n var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);\n \n // Create a "div" element that contains the storage text\n var myStorageDiv = document.createElement("div");\n myStorageDiv.innerHTML = storageText;\n myStorageDiv.normalize();\n \n // Create all tiddlers in a new TiddlyWiki\n // (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)\n var tiddlyWiki = new TiddlyWiki();\n var store = myStorageDiv.childNodes;\n for(var t = 0; t < store.length; t++) {\n var e = store[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)\n title = e.id.substr(lenPrefix);\n if(title && title !== "") {\n var tiddler = tiddlyWiki.createTiddler(title);\n tiddler.loadFromDiv(e,title);\n }\n }\n tiddlyWiki.dirty = false;\n\n return tiddlyWiki;\n};\n\n\n \n// Internal.\n//\n// Returns a function that has a function body returning the given javaScriptExpression.\n// The function has the parameters:\n// \n// (tiddler, context, count, index)\n//\nconfig.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {\n var script = context["script"];\n var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";\n var fullText = (script ? script+";" : "")+functionText+";theFunction;";\n return eval(fullText);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {\n var result = [];\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);\n tiddlyWiki.forEachTiddler(function(title,tiddler) {\n if (func(tiddler, context, undefined, undefined)) {\n result.push(tiddler);\n }\n });\n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {\n var message = "Extra parameter behind '"+actionName+"':";\n for (var i = firstUnusedIndex; i < parameter.length; i++) {\n message += " "+parameter[i];\n }\n this.handleError(place, message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? -1 \n : +1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? +1 \n : -1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {\n // To avoid evaluating the sortClause whenever two items are compared \n // we pre-calculate the sortValue for every item in the array and store it in a \n // temporary property ("forEachTiddlerSortValue") of the tiddlers.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);\n var count = tiddlers.length;\n var i;\n for (i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);\n }\n\n // Do the sorting\n tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);\n\n // Delete the temporary property that holds the sortValue. \n for (i = 0; i < tiddlers.length; i++) {\n delete tiddlers[i].forEachTiddlerSortValue;\n }\n};\n\n\n// Internal.\n//\nconfig.macros.forEachTiddler.trace = function(message) {\n displayMessage(message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {\n var message ="<<"+macroName;\n for (var i = 0; i < params.length; i++) {\n message += " "+params[i];\n }\n message += ">>";\n displayMessage(message);\n};\n\n\n// Internal.\n//\n// Creates an element that holds an error message\n// \nconfig.macros.forEachTiddler.createErrorElement = function(place, exception) {\n var message = (exception.description) ? exception.description : exception.toString();\n return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);\n};\n\n// Internal.\n//\n// @param place [may be null]\n//\nconfig.macros.forEachTiddler.handleError = function(place, exception) {\n if (place) {\n this.createErrorElement(place, exception);\n } else {\n throw exception;\n }\n};\n\n// Internal.\n//\n// Encodes the given string.\n//\n// Replaces \n// "$))" to ">>"\n// "$)" to ">"\n//\nconfig.macros.forEachTiddler.paramEncode = function(s) {\n var reGTGT = new RegExp("\s\s$\s\s)\s\s)","mg");\n var reGT = new RegExp("\s\s$\s\s)","mg");\n return s.replace(reGTGT, ">>").replace(reGT, ">");\n};\n\n// Internal.\n//\n// Returns the given original path (that is a file path, starting with "file:")\n// as a path to a local file, in the systems native file format.\n//\n// Location information in the originalPath (i.e. the "#" and stuff following)\n// is stripped.\n// \nconfig.macros.forEachTiddler.getLocalPath = function(originalPath) {\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#");\n if(hashPos != -1)\n originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s"); \n return localPath;\n};\n\n// ---------------------------------------------------------------------------\n// Stylesheet Extensions (may be overridden by local StyleSheet)\n// ---------------------------------------------------------------------------\n//\nsetStylesheet(\n ".forEachTiddlerError{color: #ffffff;background-color: #880000;}",\n "forEachTiddler");\n\n//============================================================================\n// End of forEachTiddler Macro\n//============================================================================\n\n\n//============================================================================\n// String.startsWith Function\n//============================================================================\n//\n// Returns true if the string starts with the given prefix, false otherwise.\n//\nversion.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.startsWith = function(prefix) {\n var n = prefix.length;\n return (this.length >= n) && (this.slice(0, n) == prefix);\n};\n\n\n\n//============================================================================\n// String.endsWith Function\n//============================================================================\n//\n// Returns true if the string ends with the given suffix, false otherwise.\n//\nversion.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.endsWith = function(suffix) {\n var n = suffix.length;\n return (this.length >= n) && (this.right(n) == suffix);\n};\n\n\n//============================================================================\n// String.contains Function\n//============================================================================\n//\n// Returns true when the string contains the given substring, false otherwise.\n//\nversion.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.contains = function(substring) {\n return this.indexOf(substring) >= 0;\n};\n\n//============================================================================\n// Array.indexOf Function\n//============================================================================\n//\n// Returns the index of the first occurance of the given item in the array or \n// -1 when no such item exists.\n//\n// @param item [may be null]\n//\nversion.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.indexOf = function(item) {\n for (var i = 0; i < this.length; i++) {\n if (this[i] == item) {\n return i;\n }\n }\n return -1;\n};\n\n//============================================================================\n// Array.contains Function\n//============================================================================\n//\n// Returns true when the array contains the given item, otherwise false. \n//\n// @param item [may be null]\n//\nversion.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n};\n\n//============================================================================\n// Array.containsAny Function\n//============================================================================\n//\n// Returns true when the array contains at least one of the elements \n// of the item. Otherwise (or when items contains no elements) false is returned.\n//\nversion.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAny = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (this.contains(items[i])) {\n return true;\n }\n }\n return false;\n};\n\n\n//============================================================================\n// Array.containsAll Function\n//============================================================================\n//\n// Returns true when the array contains all the items, otherwise false.\n// \n// When items is null false is returned (even if the array contains a null).\n//\n// @param items [may be null] \n//\nversion.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAll = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (!this.contains(items[i])) {\n return false;\n }\n }\n return true;\n};\n\n\n} // of "install only once"\n\n// Used Globals (for JSLint) ==============\n// ... DOM\n/*global document */\n// ... TiddlyWiki Core\n/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, \n displayMessage, endSaveArea, hasClass, loadFile, saveFile, \n startSaveArea, store, wikify */\n//}}}\n\n\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n***/\n\n
/***\n''Import Tiddlers Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#ImportTiddlersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nWhen many people share and edit copies of the same TiddlyWiki document, the ability to quickly collect all these changes back into a single, updated document that can then be redistributed to the entire group is very important. This plugin lets you selectively combine tiddlers from any two TiddlyWiki documents. It can also be very useful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)\n\n!!!!!Inline interface (live)\n<<<\n<<importTiddlers inline>>\n<<<\n!!!!!Macro Syntax\n<<<\n{{{<<importTiddlers>>}}}\ncreates "import tiddlers" link. click to show/hide import control panel\n\n{{{<<importTiddlers inline>>}}}\ncreates import control panel directly in tiddler content\n\n{{{<<importTiddlers filter source quiet ask>>}}}\nnon-interactive 'automatic' import.\n''filter'' determines which tiddlers will be automatically selected for importing. Use one of the following keywords:\n>''"new"'' retrieves only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' retrieves only tiddlers that exist in both documents for which the import source tiddler is newer than the existing tiddler\n>''"updates"'' retrieves both ''new'' and ''changed'' tiddlers (this is the default action when none is specified)\n>''"all"'' retrieves ALL tiddlers from the import source document, even if they have not been changed.\n''source'' is the location of the imported document. It can be either a local document or an URL:\n>filename is any local path/file, in whatever format your system requires\n>URL is any remote web location that starts with "http://" or "https://"\n''"quiet"'' (optional)\n>supresses all status message during the import processing (e.g., "opening local file...", "found NN tiddlers..." etc). Note that if ANY tiddlers are actualy imported, a final information message will still be displayed (along with the ImportedTiddlers report), even when 'quiet' is specified. This ensures that changes to your document cannot occur without any visible indication at all.\n''"ask"'' (optional)\n>adds interactive confirmation. A browser message box (OK/Cancel) is displayed for each tiddler that will be imported, so that you can manually bypass any tiddlers that you do not want to import.\n\n''Special tag values: importReplace and importPublic''\n\nBy adding these special tags to an existing tiddler, you can precisely control whether or not to allow updates to that tiddler as well as decide which tiddlers in your document can be automatically imported by others.\n*''For maximum safety, the default action is to prevent existing tiddlers from being unintentionally overwritten by incoming tiddlers.'' To allow an existing tiddler to be overwritten by an imported tiddler, you must tag the existing tiddler with ''<<tag importReplace>>''\n*''For maximum privacy, the default action for //outgoing// tiddlers is to NOT automatically share your tiddlers with others.'' To allow a tiddler in your document to be shared via auto-import actions by others, you must tag it with ''<<tag importPublic>>''\n//Note: these tags are only applied when using the auto-import processing. When using the interactive control panel, all tiddlers in the imported document are available in the listbox, regardless of their tag values.//\n<<<\n!!!!!Interactive Usage\n<<<\nWhen used interactively, a control panel is displayed consisting of an "import source document" filename input (text field plus a ''[Browse...]'' button), a listbox of available tiddlers, a "differences only" checkbox, an "add tags" input field and four push buttons: ''[open]'', ''[select all]'', ''[import]'' and ''[close]''.\n\nPress ''[browse]'' to select a TiddlyWiki document file to import. You can also type in the path/filename or a remote document URL (starting with http://)and press ''[open]''. //Note: There may be some delay to permit the browser time to access and load the document before updating the listbox with the titles of all tiddlers that are available to be imported.//\n\nSelect one or more titles from the listbox (hold CTRL or SHIFT while clicking to add/remove the highlight from individual list items). You can press ''[select all]'' to quickly highlight all tiddler titles in the list. Use the ''[-]'', ''[+]'', or ''[=]'' links to adjust the listbox size so you can view more (or less) tiddler titles at one time. When you have chosen the tiddlers you want to import and entered any extra tags, press ''[import]'' to begin copying them to the current TiddlyWiki document.\n\n''select: all, new, changes, or differences''\n\nYou can click on ''all'', ''new'', ''changes'', or ''differences'' to automatically select a subset of tiddlers from the list. This makes it very quick and easy to find and import just the updated tiddlers you are interested in:\n>''"all"'' selects ALL tiddlers from the import source document, even if they have not been changed.\n>''"new"'' selects only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' selects only tiddlers that exist in both documents but that are newer in the source document\n>''"differences"'' selects all new and existing tiddlers that are different from the destination document (even if destination tiddler is newer)\n\n''Import Tagging:''\n\nTiddlers that have been imported can be automatically tagged, so they will be easier to find later on, after they have been added to your document. New tags are entered into the "add tags" input field, and then //added// to the existing tags for each tiddler as it is imported.\n\n''Skip, Rename, Merge, or Replace:''\n\nWhen importing a tiddler whose title is identical to one that already exists, the import process pauses and the tiddler title is displayed in an input field, along with four push buttons: ''[skip]'', ''[rename]'', ''[merge]'' and ''[replace]''.\n\nTo bypass importing this tiddler, press ''[skip]''. To import the tiddler with a different name (so that both the tiddlers will exist when the import is done), enter a new title in the input field and then press ''[rename]''. Press ''[merge]'' to combine the content from both tiddlers into a single tiddler. Press ''[replace]'' to overwrite the existing tiddler with the imported one, discarding the previous tiddler content.\n\n//Note: if both the title ''and'' modification date/////time match, the imported tiddler is assumed to be identical to the existing one, and will be automatically skipped (i.e., not imported) without asking.//\n\n''Import Report History''\n\nWhen tiddlers are imported, a report is generated into ImportedTiddlers, indicating when the latest import was performed, the number of tiddlers successfully imported, from what location, and by whom. It also includes a list with the title, date and author of each tiddler that was imported.\n\nWhen the import process is completed, the ImportedTiddlers report is automatically displayed for your review. If more tiddlers are subsequently imported, a new report is //added// to ImportedTiddlers, above the previous report (i.e., at the top of the tiddler), so that a reverse-chronological history of imports is maintained.\n\nIf a cumulative record is not desired, the ImportedTiddlers report may be deleted at any time. A new ImportedTiddlers report will be created the next time tiddlers are imported.\n\nNote: You can prevent the ImportedTiddlers report from being generated for any given import activity by clearing the "create a report" checkbox before beginning the import processing.\n\n<<<\n!!!!!Installation\n<<<\ncopy/paste the following tiddlers into your document:\n''ImportTiddlersPlugin'' (tagged with <<tag systemConfig>>)\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add "< < ImportTiddlers > >" macro^^\n\n''Quick Installation Tip #1:''\nIf you are using an unmodified version of TiddlyWiki (core release version <<version>>), you can get a new, empty TiddlyWiki with the Import Tiddlers plugin pre-installed (''[[download from here|TW+ImportExport.html]]''), and then simply import all your content from your old document into this new, empty document.\n<<<\n!!!!!Revision History\n<<<\n''2006.02.17 [2.6.0]''\nRemoved "differences only" listbox display mode, replaced with selection filter 'presets': all/new/changes/differences. Also fixed initialization handling for "add new tags" so that checkbox state is correctly tracked when panel is first displayed.\n''2006.02.16 [2.5.4]''\nadded checkbox options to control "import remote tags" and "keep existing tags" behavior, in addition to existing "add new tags" functionality.\n''2006.02.14 [2.5.3]''\nFF1501 corrected unintended global 't' (loop index) in importReport() and autoImportTiddlers()\n''2006.02.10 [2.5.2]''\ncorrected unintended global variable in importReport().\n''2006.02.05 [2.5.1]''\nmoved globals from window.* to config.macros.importTiddlers.* to avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2006.01.18 [2.5.0]''\nadded checkbox for "create a report". Default is to create/update the ImportedTiddlers report. Clear the checkbox to skip this step.\n''2006.01.15 [2.4.1]''\nadded "importPublic" tag and inverted default so that auto sharing is NOT done unless tagged with importPublic\n''2006.01.15 [2.4.0]''\nAdded support for tagging individual tiddlers with importSkip, importReplace, and/or importPrivate to control which tiddlers can be overwritten or shared with others when using auto-import macro syntax. Defaults are to SKIP overwriting existing tiddlers with imported tiddlers, and ALLOW your tiddlers to be auto-imported by others.\n''2006.01.15 [2.3.2]''\nAdded "ask" parameter to confirm each tiddler before importing (for use with auto-importing)\n''2006.01.15 [2.3.1]''\nStrip TW core scripts from import source content and load just the storeArea into the hidden IFRAME. Makes loading more efficient by reducing the document size and by preventing the import document from executing its TW initialization (including plugins). Seems to resolve the "Found 0 tiddlers" problem. Also, when importing local documents, use convertUTF8ToUnicode() to convert the file contents so support international characters sets.\n''2006.01.12 [2.3.0]''\nReorganized code to use callback function for loading import files to support event-driven I/O via an ASYNCHRONOUS XMLHttpRequest. Let's processing continue while waiting for remote hosts to respond to URL requests. Added non-interactive 'batch' macro mode, using parameters to specify which tiddlers to import, and from what document source. Improved error messages and diagnostics, plus an optional 'quiet' switch for batch mode to eliminate //most// feedback.\n''2006.01.11 [2.2.0]''\nAdded "[by tags]" to list of tiddlers, based on code submitted by BradleyMeck\n''2006.01.09 [2.1.1]''\nWhen a URL is typed in, and then the "open" button is pressed, it generates both an onChange event for the file input and a click event for open button. This results in multiple XMLHttpRequest()'s which seem to jam things up quite a bit. I removed the onChange handling for file input field. To open a file (local or URL), you must now explicitly press the "open" button in the control panel.\n''2006.01.08 [2.1.0]''\nIMPORT FROM ANYWHERE!!! re-write getImportedTiddlers() logic to either read a local file (using local I/O), OR... read a remote file, using a combination of XML and an iframe to permit cross-domain reading of DOM elements. Adapted from example code and techniques courtesy of Jonny LeRoy.\n''2006.01.06 [2.0.2]''\nWhen refreshing list contents, fixed check for tiddlerExists() when "show differences only" is selected, so that imported tiddlers that don't exist in the current file will be recognized as differences and included in the list.\n''2006.01.04 [2.0.1]''\nWhen "show differences only" is NOT checked, import all tiddlers that have been selected even when they have a matching title and date.\n''2005.12.27 [2.0.0]''\nUpdate for TW2.0\nDefer initial panel creation and only register a notification function when panel first is created\n''2005.12.22 [1.3.1]''\ntweak formatting in importReport() and add 'discard report' link to output\n''2005.12.03 [1.3.0]''\nDynamically create/remove importPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding. Also, dynamically create/recreate importFrame each time an external TW document is loaded for importation (reduces DOM overhead and ensures a 'fresh' frame for each document)\n''2005.11.29 [1.2.1]''\nfixed formatting of 'detail info' in importReport()\n''2005.11.11 [1.2.0]''\nadded 'inline' param to embed controls in a tiddler\n''2005.11.09 [1.1.0]''\nonly load HTML and CSS the first time the macro handler is called. Allows for redundant placement of the macro without creating multiple instances of controls with the same ID's.\n''2005.10.25 [1.0.5]''\nfixed typo in importReport() that prevented reports from being generated\n''2005.10.09 [1.0.4]''\ncombined documentation with plugin code instead of using separate tiddlers\n''2005.08.05 [1.0.3]''\nmoved CSS and HTML definitions into plugin code instead of using separate tiddlers\n''2005.07.27 [1.0.2]''\ncore update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()\n''2005.07.23 [1.0.1]''\nadded parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n\n// // Version\n//{{{\nversion.extensions.importTiddlers = {major: 2, minor: 6, revision: 0, date: new Date(2006,2,17)};\n//}}}\n\n// // 1.2.x compatibility\n//{{{\nif (!window.story) window.story=window;\nif (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}\nif (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}\nif (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}\n//}}}\n\n// // IE needs explicit global scoping for functions/vars called from browser events\n//{{{\nwindow.onClickImportButton=onClickImportButton;\nwindow.loadImportFile=loadImportFile;\nwindow.refreshImportList=refreshImportList;\n//}}}\n\n// // default cookie/option values\n//{{{\nif (!config.options.chkImportReport) config.options.chkImportReport=true;\n//}}}\n\n\n// // ''MACRO DEFINITION''\n\n//{{{\nconfig.macros.importTiddlers = { };\nconfig.macros.importTiddlers = {\n label: "import tiddlers",\n prompt: "Copy tiddlers from another document",\n countMsg: "%0 tiddlers selected for import",\n src: "", // path/filename or URL of document to import\n inbound: null, // hash-indexed array of tiddlers from other document\n newTags: "", // text of tags added to imported tiddlers\n addTags: true, // add new tags to imported tiddlers\n listsize: 8, // # of lines to show in imported tiddler list\n importTags: true, // include tags from remote source document when importing a tiddler\n keepTags: true, // retain existing tags when replacing a tiddler\n index: 0, // current processing index in import list\n sort: "" // sort order for imported tiddler listbox\n};\n\nconfig.macros.importTiddlers.handler = function(place,macroName,params) {\n // LINK WITH FLOATING PANEL\n if (!params[0]) {\n createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);\n return;\n }\n // INLINE TIDDLER CONTENT\n if (params[0]=="inline") {\n createImportPanel(place);\n document.getElementById("importPanel").style.position="static";\n document.getElementById("importPanel").style.display="block";\n return;\n }\n // NON-INTERACTIVE BATCH MODE\n switch (params[0]) {\n case 'all':\n case 'new':\n case 'changes':\n case 'updates':\n var filter=params.shift();\n break;\n default:\n var filter="updates";\n break;\n } \n if (!params[0]||!params[0].length) return; // filename is required\n config.macros.importTiddlers.src=params.shift();\n var quiet=(params[0]=="quiet"); if (quiet) params.shift();\n var ask=(params[0]=="ask"); if (ask) params.shift();\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n // load storeArea from a hidden IFRAME, then apply import rules and add/replace tiddlers\n loadImportFile(config.macros.importTiddlers.src,filter,quiet,ask,autoImportTiddlers);\n}\n//}}}\n\n// // ''READ TIDDLERS FROM ANOTHER DOCUMENT''\n\n//{{{\nfunction loadImportFile(src,filter,quiet,ask,callback) {\n if (!quiet) clearMessage();\n // LOCAL FILE\n if ((src.substr(0,7)!="http://")&&(src.substr(0,8)!="https://")) {\n if (!quiet) displayMessage("Opening local document: "+ src);\n var txt=loadFile(src);\n if(!txt) { if (!quiet) displayMessage("Could not open local document: "+src); }\n else {\n var s="<html><body>"+txt.substr(txt.indexOf('<div id="storeArea">'));\n if (!quiet) displayMessage(txt.length+" bytes in document. ("+s.length+" bytes used for tiddler storage)");\n config.macros.importTiddlers.inbound = readImportedTiddlers(convertUTF8ToUnicode(s));\n var count=config.macros.importTiddlers.inbound?config.macros.importTiddlers.inbound.length:0;\n if (!quiet) displayMessage("Found "+count+" tiddlers in "+src);\n if (callback) callback(src,filter,quiet,ask);\n }\n return;\n }\n // REMOTE FILE\n var x; // XML object\n try {x = new XMLHttpRequest()}\n catch(e) {\n try {x = new ActiveXObject("Msxml2.XMLHTTP")}\n catch (e) {\n try {x = new ActiveXObject("Microsoft.XMLHTTP")}\n catch (e) { return }\n }\n }\n x.onreadystatechange = function() {\n if (x.readyState == 4) {\n if (x.status == 200) {\n var sa="<html><body>"+x.responseText.substr(x.responseText.indexOf('<div id="storeArea">'));\n if (!quiet) displayMessage(x.responseText.length+" bytes in document. ("+sa.length+" bytes used for tiddler storage)");\n config.macros.importTiddlers.inbound = readImportedTiddlers(sa);\n var count=config.macros.importTiddlers.inbound?config.macros.importTiddlers.inbound.length:0;\n if (!quiet) displayMessage("Found "+count+" tiddlers in "+src);\n if (callback) callback(src,filter,quiet,ask);\n }\n else\n if (!quiet) displayMessage("Could not open remote document:"+ src+" (error="+x.status+")");\n }\n }\n if (document.location.protocol=="file:") { // UniversalBrowserRead only works from a local file context\n try {netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead')}\n catch (e) { if (!quiet) displayMessage(e.description?e.description:e.toString()); }\n }\n if (!quiet) displayMessage("Opening remote document: "+ src);\n try {\n var url=src+(src.indexOf('?')<0?'?':'&')+'nocache='+Math.random();\n x.open("GET",url,true);\n x.overrideMimeType('text/html');\n x.send(null);\n }\n catch (e) {\n if (!quiet) {\n displayMessage("Could not open remote document: "+src);\n displayMessage(e.description?e.description:e.toString());\n }\n }\n}\n\nfunction readImportedTiddlers(txt)\n{\n var importedTiddlers = [];\n // create frame\n var f=document.getElementById("importFrame");\n if (f) document.body.removeChild(f);\n f=document.createElement("iframe");\n f.id="importFrame";\n f.style.width="0px"; f.style.height="0px"; f.style.border="0px";\n document.body.appendChild(f);\n // get document\n var d=f.document;\n if (f.contentDocument) d=f.contentDocument; // For NS6\n else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6\n // load source into document\n d.open(); d.writeln(txt); d.close();\n // read tiddler DIVs from storeArea DOM element \n var importStore = [];\n var importStoreArea = d.getElementById("storeArea");\n if (!importStoreArea || !(importStore=importStoreArea.childNodes) || (importStore.length==0)) { return null; }\n importStoreArea.normalize();\n for(var t = 0; t < importStore.length; t++) {\n var e = importStore[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && (e.id.substr(0,5) == "store"))\n title = e.id.substr(5);\n if(title && title != "") {\n var theImported = new Tiddler();\n theImported.loadFromDiv(e,title);\n importedTiddlers.push(theImported);\n }\n }\n return importedTiddlers;\n}\n//}}}\n\n// // ''NON-INTERACTIVE IMPORT''\n\n// // import all/new/changed tiddlers into store, replacing or adding tiddlers as needed\n//{{{\nfunction autoImportTiddlers(src,filter,quiet,ask)\n{\n var count=0;\n if (config.macros.importTiddlers.inbound) for (var t=0;t<config.macros.importTiddlers.inbound.length;t++) {\n var theImported = config.macros.importTiddlers.inbound[t];\n var theExisting = store.getTiddler(theImported.title);\n\n // only import tiddlers if tagged with "importPublic"\n if (theImported.tags && theImported.tags.find("importPublic")==null)\n { config.macros.importTiddlers.inbound[t].status=""; continue; } // status=="" means don't show in report\n\n // never import the "ImportedTiddlers" history from the other document...\n if (theImported.title=='ImportedTiddlers')\n { config.macros.importTiddlers.inbound[t].status=""; continue; } // status=="" means don't show in report\n\n // check existing tiddler for importReplace, or systemConfig tags\n config.macros.importTiddlers.inbound[t].status="added"; // default - add any tiddlers not filtered out\n if (store.tiddlerExists(theImported.title)) {\n config.macros.importTiddlers.inbound[t].status="replaced";\n if (!theExisting.tags||(theExisting.tags.find("importReplace")==null))\n { config.macros.importTiddlers.inbound[t].status="not imported - tiddler already exists (use importReplace to allow changes)"; continue; }\n if ((theExisting.tags.find("systemConfig")!=null)||(theImported.tags.find("systemConfig")!=null))\n config.macros.importTiddlers.inbound[t].status+=" - WARNING: an active systemConfig plugin has been added or updated";\n }\n\n // apply the all/new/changes/updates filter \n if (filter!="all") {\n if ((filter=="new") && store.tiddlerExists(theImported.title))\n { config.macros.importTiddlers.inbound[t].status="not imported - tiddler already exists"; continue; }\n if ((filter=="changes") && !store.tiddlerExists(theImported.title))\n { config.macros.importTiddlers.inbound[t].status="not imported - new tiddler"; continue; }\n if (store.tiddlerExists(theImported.title) && ((theExisting.modified.getTime()-theImported.modified.getTime())>=0))\n { config.macros.importTiddlers.inbound[t].status="not imported - tiddler is unchanged"; continue; }\n }\n\n // get confirmation if required\n if (ask && !confirm("Import "+(theExisting?"updated":"new")+" tiddler '"+theImported.title+"'\snfrom "+src))\n { config.macros.importTiddlers.inbound[t].status="skipped - cancelled by user"; continue; }\n\n // DO THE IMPORT!!\n store.addTiddler(theImported); count++;\n }\n importReport(quiet); // generate a report (as needed) and display it if not 'quiet'\n if (count) store.setDirty(true); \n // always show final message when tiddlers were actually imported\n if (!quiet||count) displayMessage("Imported "+count+" tiddler"+(count!=1?"s":"")+" from "+src);\n}\n//}}}\n\n// // ''REPORT GENERATOR''\n\n//{{{\nfunction importReport(quiet)\n{\n if (!config.macros.importTiddlers.inbound) return;\n // DEBUG alert('importReport: start');\n\n // if import was not completed, the Ask panel will still be open... close it now.\n var askpanel=document.getElementById('importAskPanel'); if (askpanel) askpanel.style.display='none'; \n // get the alphasorted list of tiddlers\n var tiddlers = config.macros.importTiddlers.inbound;\n tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });\n // gather the statistics\n var count=tiddlers.length;\n var added=0; var replaced=0; var renamed=0; var skipped=0; var merged=0;\n for (var t=0; t<count; t++)\n if (tiddlers[t].status)\n {\n if (tiddlers[t].status=='added') added++;\n if (tiddlers[t].status.substr(0,7)=='skipped') skipped++;\n if (tiddlers[t].status.substr(0,6)=='rename') renamed++;\n if (tiddlers[t].status.substr(0,7)=='replace') replaced++;\n if (tiddlers[t].status.substr(0,6)=='merged') merged++;\n }\n var omitted=count-(added+replaced+renamed+skipped+merged);\n // DEBUG alert('stats done: '+count+' total, '+added+' added, '+skipped+' skipped, '+renamed+' renamed, '+replaced+' replaced, '+merged+' merged');\n // skip the report if nothing was imported\n if (added+replaced+renamed+merged==0) return;\n // skip the report if not desired by user\n if (!config.options.chkImportReport) {\n // reset status flags\n for (var t=0; t<count; t++) config.macros.importTiddlers.inbound[t].status="";\n // refresh display since tiddlers have been imported\n store.notifyAll();\n // quick message area summary report\n var msg=(added+replaced+renamed+merged)+' of '+count+' tiddler'+((count!=1)?'s':"");\n msg+=' imported from '+config.macros.importTiddlers.src.replace(/\s\s/g,'/')\n displayMessage(msg);\n return;\n }\n // create the report tiddler (if not already present)\n var tiddler = store.getTiddler('ImportedTiddlers');\n if (!tiddler) // create new report tiddler if it doesn't exist\n {\n tiddler = new Tiddler();\n tiddler.title = 'ImportedTiddlers';\n tiddler.text = "";\n }\n // format the report header\n var now = new Date();\n var newText = "";\n newText += "On "+now.toLocaleString()+", "+config.options.txtUserName+" imported tiddlers from\sn";\n newText += "[["+config.macros.importTiddlers.src+"|"+config.macros.importTiddlers.src+"]]:\sn";\n newText += "<"+"<"+"<\sn";\n newText += "Out of "+count+" tiddler"+((count!=1)?"s ":" ")+" in {{{"+config.macros.importTiddlers.src.replace(/\s\s/g,'/')+"}}}:\sn";\n if (added+renamed>0)\n newText += (added+renamed)+" new tiddler"+(((added+renamed)!=1)?"s were":" was")+" added to your document.\sn";\n if (merged>0)\n newText += merged+" tiddler"+((merged!=1)?"s were":" was")+" merged with "+((merged!=1)?"":"an ")+"existing tiddler"+((merged!=1)?"s":"")+".\sn"; \n if (replaced>0)\n newText += replaced+" existing tiddler"+((replaced!=1)?"s were":" was")+" replaced.\sn"; \n if (skipped>0)\n newText += skipped+" tiddler"+((skipped!=1)?"s were":" was")+" skipped after asking.\sn"; \n if (omitted>0)\n newText += omitted+" tiddler"+((omitted!=1)?"s":"")+((omitted!=1)?" were":" was")+" not imported.\sn";\n if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)\n newText += "imported tiddlers were tagged with: \s""+config.macros.importTiddlers.newTags+"\s"\sn";\n // output the tiddler detail and reset status flags\n for (var t=0; t<count; t++)\n if (tiddlers[t].status!="")\n {\n newText += "#["+"["+tiddlers[t].title+"]"+"]";\n newText += ((tiddlers[t].status!="added")?("^^\sn"+tiddlers[t].status+"^^"):"")+"\sn";\n config.macros.importTiddlers.inbound[t].status="";\n }\n newText += "<"+"<"+"<\sn";\n // output 'discard report' link\n newText += "<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n newText += "onclick=\s"story.closeTiddler('"+tiddler.title+"'); store.deleteTiddler('"+tiddler.title+"');\s" ";\n newText += "value=\s"discard report\s"></html>";\n // update the ImportedTiddlers content and show the tiddler\n tiddler.text = newText+((tiddler.text!="")?'\sn----\sn':"")+tiddler.text;\n tiddler.modifier = config.options.txtUserName;\n tiddler.modified = new Date();\n store.addTiddler(tiddler);\n if (!quiet) story.displayTiddler(null,"ImportedTiddlers",1,null,null,false);\n story.refreshTiddler("ImportedTiddlers",1,true);\n // refresh the display\n store.notifyAll();\n}\n//}}}\n\n// // ''INTERFACE DEFINITION''\n\n// // Handle link click to create/show/hide control panel\n//{{{\nfunction onClickImportMenu(e)\n{\n if (!e) var e = window.event;\n var parent=resolveTarget(e).parentNode;\n var panel = document.getElementById("importPanel");\n if (panel==undefined || panel.parentNode!=parent)\n panel=createImportPanel(parent);\n var isOpen = panel.style.display=="block";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n panel.style.display = isOpen ? "none" : "block" ;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n// // Create control panel: HTML, CSS, register for notification\n//{{{\nfunction createImportPanel(place) {\n var panel=document.getElementById("importPanel");\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(config.macros.importTiddlers.css,"importTiddlers");\n panel=createTiddlyElement(place,"span","importPanel",null,null)\n panel.innerHTML=config.macros.importTiddlers.html;\n store.addNotification(null,refreshImportList); // refresh listbox after every tiddler change\n refreshImportList();\n return panel;\n}\n//}}}\n\n// // CSS\n//{{{\nconfig.macros.importTiddlers.css = '\s\n#importPanel {\s\n display: none; position:absolute; z-index:11; width:35em; right:105%; top:3em;\s\n padding: 0.5em; margin:0em; text-align:left; font-size: 8pt;\s\n background-color: #eee; color:#000000; \s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px; -moz-border-radius:1em;\s\n}\s\n#importPanel a { color:#009; }\s\n#importPanel input { width: 98%; margin: 1px; font-size:8pt; }\s\n#importPanel select { width: 98%; margin: 1px; font-size:8pt; }\s\n#importPanel .importButton { padding: 0em; margin: 0px; font-size:8pt; }\s\n#importPanel .importListButton { padding:0em 0.25em 0em 0.25em; color: #000000; display:inline }\s\n#importAskPanel { display:none; margin:0.5em 0em 0em 0em; }\s\n';\n//}}}\n\n// // HTML\n//{{{\nconfig.macros.importTiddlers.html = '\s\n<span style="float:left; padding:1px; white-space:nowrap">\s\n import from source document\s\n</span>\s\n<span style="float:right; padding:1px; white-space:nowrap">\s\n <input type=checkbox id="chkImportReport" checked style="height:1em; width:auto"\s\n onClick="config.options[\s'chkImportReport\s']=this.checked;">create a report\s\n</span>\s\n<input type="file" id="fileImportSource" size=56\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n<span style="float:left; padding:1px; white-space:nowrap">\s\n select:\s\n <a href="JavaScript:;" id="importSelectAll"\s\n onclick="onClickImportButton(this)" title="select all tiddlers">\s\n &nbsp;all&nbsp;</a>\s\n <a href="JavaScript:;" id="importSelectNew"\s\n onclick="onClickImportButton(this)" title="select tiddlers not already in destination document">\s\n &nbsp;added&nbsp;</a> \s\n <a href="JavaScript:;" id="importSelectChanges"\s\n onclick="onClickImportButton(this)" title="select tiddlers that have been updated in source document">\s\n &nbsp;changes&nbsp;</a> \s\n <a href="JavaScript:;" id="importSelectDifferences"\s\n onclick="onClickImportButton(this)" title="select tiddlers that have been added or are different from existing tiddlers">\s\n &nbsp;differences&nbsp;</a> \s\n <a href="JavaScript:;" id="importToggleFilter"\s\n onclick="onClickImportButton(this)" title="show/hide selection filter">\s\n &nbsp;filter&nbsp;</a> \s\n</span>\s\n<span style="float:right; padding:1px; white-space:nowrap">\s\n <a href="JavaScript:;" id="importListSmaller"\s\n onclick="onClickImportButton(this)" title="reduce list size">\s\n &nbsp;&#150;&nbsp;</a>\s\n <a href="JavaScript:;" id="importListLarger"\s\n onclick="onClickImportButton(this)" title="increase list size">\s\n &nbsp;+&nbsp;</a>\s\n <a href="JavaScript:;" id="importListMaximize"\s\n onclick="onClickImportButton(this)" title="maximize/restore list size">\s\n &nbsp;=&nbsp;</a>\s\n</span>\s\n<select id="importList" size=8 multiple\s\n onchange="setTimeout(\s'refreshImportList(\s'+this.selectedIndex+\s')\s',1)">\s\n <!-- NOTE: delay refresh so list is updated AFTER onchange event is handled -->\s\n</select>\s\n<input type=checkbox id="chkAddTags" checked style="height:1em; width:auto"\s\n onClick="config.macros.importTiddlers.addTags=this.checked;">add new tags &nbsp;\s\n<input type=checkbox id="chkImportTags" checked style="height:1em; width:auto"\s\n onClick="config.macros.importTiddlers.importTags=this.checked;">import source tags &nbsp;\s\n<input type=checkbox id="chkKeepTags" checked style="height:1em; width:auto"\s\n onClick="config.macros.importTiddlers.keepTags=this.checked;">keep existing tags\s\n<input type=text id="txtNewTags" size=15 onKeyUp="config.macros.importTiddlers.newTags=this.value" autocomplete=off>\s\n<div align=center>\s\n <input type=button id="importOpen" class="importButton" style="width:32%" value="open"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importStart" class="importButton" style="width:32%" value="import"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importClose" class="importButton" style="width:32%" value="close"\s\n onclick="onClickImportButton(this)">\s\n</div>\s\n<div id="importAskPanel">\s\n tiddler already exists:\s\n <input type=text id="importNewTitle" size=15 autocomplete=off">\s\n <div align=center>\s\n <input type=button id="importSkip" class="importButton" style="width:23%" value="skip"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importRename" class="importButton" style="width:23%" value="rename"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importMerge" class="importButton" style="width:23%" value="merge"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importReplace" class="importButton" style="width:23%" value="replace"\s\n onclick="onClickImportButton(this)">\s\n </div>\s\n</div>\s\n';\n//}}}\n\n// // refresh listbox\n//{{{\nfunction refreshImportList(selectedIndex)\n{\n var theList = document.getElementById("importList");\n if (!theList) return;\n // if nothing to show, reset list content and size\n if (!config.macros.importTiddlers.inbound) \n {\n while (theList.length > 0) { theList.options[0] = null; }\n theList.options[0]=new Option('please open a document...',"",false,false);\n theList.size=config.macros.importTiddlers.listsize;\n return;\n }\n // get the sort order\n if (!selectedIndex) selectedIndex=0;\n if (selectedIndex==0) config.macros.importTiddlers.sort='title'; // heading\n if (selectedIndex==1) config.macros.importTiddlers.sort='title';\n if (selectedIndex==2) config.macros.importTiddlers.sort='modified';\n if (selectedIndex==3) config.macros.importTiddlers.sort='tags';\n if (selectedIndex>3) {\n // display selected tiddler count\n for (var t=0,count=0; t < theList.options.length; t++) count+=(theList.options[t].selected&&theList.options[t].value!="")?1:0;\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n return; // no refresh needed\n }\n\n // get the alphasorted list of tiddlers (optionally, filter out unchanged tiddlers)\n var tiddlers=config.macros.importTiddlers.inbound;\n tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n // add heading and control items to list\n var i=0;\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n theList.options[i++]=new Option(tiddlers.length+' tiddler'+((tiddlers.length!=1)?'s are':' is')+' in the document',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="title" )?">":indent)+' [by title]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="modified")?">":indent)+' [by date]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="tags")?">":indent)+' [by tags]',"",false,false);\n // output the tiddler list\n switch(config.macros.importTiddlers.sort)\n {\n case "title":\n for(var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case "modified":\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });\n var lastSection = "";\n for(var t = 0; t < tiddlers.length; t++) {\n var tiddler = tiddlers[t];\n var theSection = tiddler.modified.toLocaleDateString();\n if (theSection != lastSection) {\n theList.options[i++] = new Option(theSection,"",false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n break;\n case "tags":\n var theTitles = {}; // all tiddler titles, hash indexed by tag value\n var theTags = new Array();\n for(var t=0; t<tiddlers.length; t++) {\n var title=tiddlers[t].title;\n var tags=tiddlers[t].tags;\n for(var s=0; s<tags.length; s++) {\n if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }\n theTitles[tags[s]].push(title);\n }\n }\n theTags.sort();\n for(var tagindex=0; tagindex<theTags.length; tagindex++) {\n var theTag=theTags[tagindex];\n theList.options[i++]=new Option(theTag,"",false,false);\n for(var t=0; t<theTitles[theTag].length; t++)\n theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);\n }\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n if (theList.size<config.macros.importTiddlers.listsize) theList.size=config.macros.importTiddlers.listsize;\n if (theList.size>theList.options.length) theList.size=theList.options.length;\n}\n//}}}\n\n// // Control interactions\n//{{{\nfunction onClickImportButton(which)\n{\n // DEBUG alert(which.id);\n var theList = document.getElementById('importList');\n if (!theList) return;\n var thePanel = document.getElementById('importPanel');\n var theAskPanel = document.getElementById('importAskPanel');\n var theNewTitle = document.getElementById('importNewTitle');\n var count=0;\n switch (which.id)\n {\n case 'fileImportSource':\n case 'importOpen': // load import source into hidden frame\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n if (config.macros.importTiddlers.src=="") break;\n // Load document into hidden iframe so we can read it's DOM and fill the list\n loadImportFile(config.macros.importTiddlers.src,"all",null,null,function(src,filter,quiet,ask){window.refreshImportList(0);});\n break;\n case 'importSelectAll': // select all tiddler list items (i.e., not headings)\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=true;\n count++;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectNew': // select tiddlers not in current document\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=!store.tiddlerExists(theList.options[t].value);\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectChanges': // select tiddlers that are updated from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value==""||!store.tiddlerExists(theList.options[t].value)) continue;\n for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler\n { var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }\n theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified>0); // updated tiddler\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectDifferences': // select tiddlers that are new or different from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value=="") continue;\n if (!store.tiddlerExists(theList.options[t].value)) { theList.options[t].selected=true; count++; continue; }\n for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler\n { var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }\n theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified!=0); // changed tiddler\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importToggleFilter': // show/hide filter\n case 'importFilter': // apply filter\n alert("coming soon!");\n break;\n case 'importStart': // initiate the import processing\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.index=0;\n config.macros.importTiddlers.index=importTiddlers(0);\n importStopped();\n break;\n case 'importClose': // unload imported tiddlers or hide the import control panel\n // if imported tiddlers not loaded, close the import control panel\n if (!config.macros.importTiddlers.inbound) { thePanel.style.display='none'; break; }\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n break;\n case 'importSkip': // don't import the tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status='skipped after asking'; // mark item as skipped\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index+1); // resume with NEXT item\n importStopped();\n break;\n case 'importRename': // change name of imported tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status = 'renamed from '+theImported.title; // mark item as renamed\n theImported.set(theNewTitle.value,null,null,null,null); // change the tiddler title\n theItem.value = theNewTitle.value; // change the listbox item text\n theItem.text = theNewTitle.value; // change the listbox item text\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importMerge': // join existing and imported tiddler content\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n var theText = theExisting.text+'\sn----\sn^^merged from: [['+config.macros.importTiddlers.src+'#'+theItem.value+'|'+config.macros.importTiddlers.src+'#'+theItem.value+']]^^\sn^^'+theImported.modified.toLocaleString()+' by '+theImported.modifier+'^^\sn'+theImported.text;\n var theDate = new Date();\n var theTags = theExisting.getTags()+' '+theImported.getTags();\n theImported.set(null,theText,null,theDate,theTags);\n theImported.status = 'merged with '+theExisting.title; // mark item as merged\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY hh:mm:ss");\n theImported.status += ' by '+theExisting.modifier;\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with this item\n importStopped();\n break;\n case 'importReplace': // substitute imported tiddler for existing tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n theImported.status = 'replaces '+theExisting.title; // mark item for replace\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY hh:mm:ss");\n theImported.status += ' by '+theExisting.modifier;\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importListSmaller': // decrease current listbox size, minimum=5\n if (theList.options.length==1) break;\n theList.size-=(theList.size>5)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importListLarger': // increase current listbox size, maximum=number of items in list\n if (theList.options.length==1) break;\n theList.size+=(theList.size<theList.options.length)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importListMaximize': // toggle listbox size between current and maximum\n if (theList.options.length==1) break;\n theList.size=(theList.size==theList.options.length)?config.macros.importTiddlers.listsize:theList.options.length;\n break;\n }\n}\n//}}}\n\n// // re-entrant processing for handling import with interactive collision prompting\n//{{{\nfunction importTiddlers(startIndex)\n{\n if (!config.macros.importTiddlers.inbound) return -1;\n\n var theList = document.getElementById('importList');\n if (!theList) return;\n var t;\n // if starting new import, reset import status flags\n if (startIndex==0)\n for (var t=0;t<config.macros.importTiddlers.inbound.length;t++)\n config.macros.importTiddlers.inbound[t].status="";\n for (var i=startIndex; i<theList.options.length; i++)\n {\n // if list item is not selected or is a heading (i.e., has no value), skip it\n if ((!theList.options[i].selected) || ((t=theList.options[i].value)==""))\n continue;\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==t) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theImported.title);\n // avoid redundant import for tiddlers that are listed multiple times (when 'by tags')\n if (theImported.status=="added")\n continue;\n // don't import the "ImportedTiddlers" history from the other document...\n if (theImported.title=='ImportedTiddlers')\n continue;\n // if tiddler exists and import not marked for replace or merge, stop importing\n if (theExisting && (theImported.status.substr(0,7)!="replace") && (theImported.status.substr(0,5)!="merge"))\n return i;\n // assemble tags (remote + existing + added)\n var newTags = "";\n if (config.macros.importTiddlers.importTags)\n newTags+=theImported.getTags() // import remote tags\n if (config.macros.importTiddlers.keepTags && theExisting)\n newTags+=" "+theExisting.getTags(); // keep existing tags\n if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)\n newTags+=" "+config.macros.importTiddlers.newTags; // add new tags\n theImported.set(null,null,null,null,newTags.trim());\n // set the status to 'added' (if not already set by the 'ask the user' UI)\n theImported.status=(theImported.status=="")?'added':theImported.status;\n // do the import!\n store.addTiddler(theImported);\n store.setDirty(true);\n }\n return(-1); // signals that we really finished the entire list\n}\n//}}}\n\n//{{{\nfunction importStopped()\n{\n var theList = document.getElementById('importList');\n var theNewTitle = document.getElementById('importNewTitle');\n if (!theList) return;\n if (config.macros.importTiddlers.index==-1)\n importReport(); // import finished... generate the report\n else\n {\n // DEBUG alert('import stopped at: '+config.macros.importTiddlers.index);\n // import collision... show the ask panel and set the title edit field\n document.getElementById('importAskPanel').style.display='block';\n theNewTitle.value=theList.options[config.macros.importTiddlers.index].value;\n }\n}\n//}}}\n
/***\n| Name:|QuickOpenTagPlugin|\n| Purpose:|Makes tag links into a Taggly style open tag plus a normal style drop down menu|\n| Creator:|SimonBaird|\n| Source:|http://simonbaird.com/mptw/#QuickOpenTagPlugin|\n| Requires:|TW 2.x|\n| Version|1.1 (7-Feb-06)|\n\n!History\n* Version 1.1 (07/02/2006)\n** Fix Firefox 1.5.0.1 crashes\n** Updated by ~BidiX[at]~BidiX.info\n* Version 1.0 (?/01/2006)\n** First release\n\n***/\n//{{{\n\n//⊻ ⊽ ⋁ ▼ \n\nwindow.createTagButton_orig_mptw = createTagButton;\nwindow.createTagButton = function(place,tag,excludeTiddler) {\n var sp = createTiddlyElement(place,"span",null,"quickopentag");\n createTiddlyLink(sp,tag,true,"button");\n var theTag = createTiddlyButton(sp,config.macros.miniTag.dropdownchar,config.views.wikified.tag.tooltip.format([tag]),onClickTag);\n theTag.setAttribute("tag",tag);\n if(excludeTiddler)\n theTag.setAttribute("tiddler",excludeTiddler);\n return(theTag);\n};\n\nconfig.macros.miniTag = {handler:function(place,macroName,params,wikifier,paramString,tiddler) {\n var tagged = store.getTaggedTiddlers(tiddler.title);\n if (tagged.length > 0) {\n var theTag = createTiddlyButton(place,config.macros.miniTag.dropdownchar,config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);\n theTag.setAttribute("tag",tiddler.title);\n theTag.className = "miniTag";\n }\n}};\n\nconfig.macros.miniTag.dropdownchar = (document.all?"▼":"▾"); // the fat one is the only one that works in IE\n\nconfig.macros.allTags.handler = function(place,macroName,params)\n{\n var tags = store.getTags();\n var theDateList = createTiddlyElement(place,"ul",null,null,null);\n if(tags.length === 0)\n createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);\n for (var t=0; t<tags.length; t++)\n {\n var theListItem =createTiddlyElement(theDateList,"li",null,null,null);\n var theLink = createTiddlyLink(theListItem,tags[t][0],true);\n var theCount = " (" + tags[t][1] + ")";\n theLink.appendChild(document.createTextNode(theCount));\n\n var theDropDownBtn = createTiddlyButton(theListItem," "+config.macros.miniTag.dropdownchar,this.tooltip.format([tags[t][0]]),onClickTag);\n theDropDownBtn.setAttribute("tag",tags[t][0]);\n }\n};\n\n\nsetStylesheet(\n ".quickopentag { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }\sn"+\n ".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }\sn"+\n ".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}\sn"+\n "a.miniTag {font-size:150%;}\sn"+\n "",\n"QuickOpenTagStyles");\n\n//}}}\n\n/***\n<html>&#x22bb; &#x22bd; &#x22c1; &#x25bc; &#x25be;</html>\n***/\n
/***\n''SearchOptionsPlugin for TiddlyWiki version 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#SearchOptionsPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nThe TiddlyWiki search function normally looks in both tiddler titles and tiddler body content ('text'). However, narrowing the search so that it examines only titles or only text, or expanding the search to include text contained in tiddler tags can be very helpful, especially when searching on common words or phrases. In addition, it is often useful for the search results to show tiddlers with matching titles before tiddlers that contain matching text or tags.\n\n!!!!!Usage\n<<<\nThis plugin adds checkboxes (see below and in AdvancedOptions) to let you selectively configure the TiddlyWiki search function to just examine any combination of tiddler titles, text, or tags. It also provides an option to switch the search results order between 'titles mixed in' (default) and 'titles shown first', as well as an option display the search results as a list of links (in an auto-generated "SearchResults" tiddler), rather than actually displaying all matching tiddlers. You can also enable/disable the "incremental search" (key-by-key searching), so that a search is only initiated when you press the ENTER key or click on the "search:" prompt text.\n<<<\n!!!!!Configuration\n<<<\nIn additional to the checkboxes in AdvancedOptions, a self-contained control panel is included here for your convenience:\n<<option chkSearchTitles>> Search tiddler titles\n<<option chkSearchText>> Search tiddler text\n<<option chkSearchTags>> Search in tiddler tags\n<<option chkSearchTitlesFirst>> Show title matches first\n<<option chkSearchList>> Show list of matching tiddlers\n<<option chkSearchIncremental>> Incremental searching\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SearchOptionsPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SearchOptionsPlugin handling^^\n\nWhen installed, this plugin automatically adds checkboxes in the AdvancedOptions shadow tiddler so you can enable/disable the extended search behavior. However, if you have customized your AdvancedOptions, you will need to manually add {{{<<option chkSearchTitles>>}}}, {{{<<option chkSearchText>>}}} and {{{<<option chkSearchTitlesFirst>>}}} (with suitable prompt text) to your customized tiddler.\n<<<\n!!!!!Revision History\n<<<\n''2006.02.03 [2.2.1]''\nrewrite timeout clearing code and blank search text handling to match 2.0.4 core release changes. note that core no longer permits "blank=all" searches, so neither does this plugin. To search for all, use "." with text patterns enabled.\n''2006.02.02 [2.2.0]''\nin search.handler(), KeyHandler() function clears 'left over' timeout when search input is < 3 chars. Prevents searching on shorter text when shortened by rapid backspaces (<500msec)\n''2006.02.01 [2.1.9]''\nin Story.prototype.search(), correct inverted logic for using/not using regular expressions when searching\nalso, blank search text now presents "No search text. Continue anyway?" confirm() message box, so search on blank can still be processed if desired by user.\n''2006.02.01 [2.1.8]''\nin doSearch(), added alert/return if search text is blank\n''2006.01.20 [2.1.7]''\nfixed setting of config.macros.search.reportTitle so that Tweaks can override it.\n''2006.01.19 [2.1.6]''\nimproved SearchResults formatting, added a "search again" form to the report (based on a suggestion from MorrisGray)\ndefine results report title using config.macros.search.reportTitle instead of hard-coding the tiddler title\n''2006.01.18 [2.1.5]''\nCreated separate functions for reportSearchResults(text,matches) and discardSearchResults(), so that other developers can create alternative report generators.\n''2006.01.17 [2.1.4]''\nUse regExp.search() instead of regExp.test() to scan for matches. Correctd the problem where only half the matching tiddlers (the odd-numbered ones) were being reported.\n''2006.01.15 [2.1.3]''\nAdded information (date/time, username, search options used) to SearchResults output\n''2006.01.10 [2.1.2]''\nuse displayTiddlers() to render matched tiddlers. This lets you display multiple matching tiddlers, even if SinglePageModePlugin is enabled.\n''2006.01.08 [2.1.1]''\ncorrected invalid variable reference, "txt.value" to "text" in story.search()\n''2006.01.08 [2.1.0]''\nre-write to match new store.search(), store.search.handler() and story.search() functions.\n''2005.12.30 [2.0.0]''\nUpgraded to TW2.0\nwhen rendering SearchResults tiddler, closeTiddler() first to ensure display is refreshed.\n''2005.12.26 [1.4.0]''\nadded option to search for matching text in tiddler tags\n''2005.12.21 [1.3.7]''\nuse \s\s to 'escape' single quotes in tiddler titles when generating "Open all matching tiddlers" link. Also, added access key: "O", to trigger "open all" link.\nBased on a suggestion by UdoBorkowski.\n''2005.12.18 [1.3.6]''\ncall displayMessage() AFTER showing matching tiddlers so message is not cleared too soon\n''2005.12.17 [1.3.5]''\nif no matches found, just display message and delete any existing SearchResults tiddler.\n''2005.12.17 [1.3.4]''\nuse """{{{""" and """}}}""" to 'escape' display text in SearchResults tiddler to ensure that formatting contained in search string is not rendered \nBased on a suggestion by UdoBorkowski.\n''2005.12.14 [1.3.3]''\ntag SearchResults tiddler with 'excludeSearch' so it won't list itself in subsequent searches\nBased on a suggestion by UdoBorkowski.\n''2005.12.14 [1.3.2]''\nadded "open all matching tiddlers..." link to search results output.\nBased on a suggestion by UdoBorkowski.\n''2005.12.10 [1.3.1]''\nadded "discard search results" link to end of search list tiddler output for quick self-removal of 'SearchResults' tiddler.\n''2005.12.01 [1.3.0]''\nadded chkSearchIncremental to enable/disable 'incremental' searching (i.e., search after each keystroke) (default is ENABLED).\nadded handling for Enter key so it can be used to start a search.\nBased on a suggestion by LyallPearce\n''2005.11.25 [1.2.1]''\nrenamed from SearchTitleOrTextPlugin to SearchOptionsPlugin\n''2005.11.25 [1.2.0]''\nadded chkSearchList option\nBased on a suggestion by RodneyGomes\n''2005.10.19 [1.1.0]''\nadded chkSearchTitlesFirst option.\nBased on a suggestion by ChristianHauck\n''2005.10.18 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\nBased on a suggestion by LyallPearce.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.SearchTitleOrText = {major: 2, minor: 2, revision: 1, date: new Date(2006,2,3)};\n//}}}\n\n//{{{\nif (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=true;\nif (config.options.chkSearchText==undefined) config.options.chkSearchText=true;\nif (config.options.chkSearchTags==undefined) config.options.chkSearchTags=true;\nif (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=false;\nif (config.options.chkSearchList==undefined) config.options.chkSearchList=false;\nif (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=true;\n\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTitles>> Search in tiddler titles";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchText>> Search in tiddler text";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTags>> Search in tiddler tags";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTitlesFirst>> Search results show title matches first";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchList>> Search results show list of matching tiddlers";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchIncremental>> Incremental searching";\n//}}}\n\n//{{{\nif (config.macros.search.reportTitle==undefined)\n config.macros.search.reportTitle="SearchResults";\n//}}}\n\n//{{{\nconfig.macros.search.handler = function(place,macroName,params)\n{\n var lastSearchText = "";\n var searchTimeout = null;\n var doSearch = function(txt)\n {\n if (txt.value.length>0)\n {\n story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);\n lastSearchText = txt.value;\n }\n };\n var clickHandler = function(e)\n {\n doSearch(this.nextSibling);\n return false;\n };\n var keyHandler = function(e)\n {\n if (!e) var e = window.event;\n switch(e.keyCode)\n {\n case 13: // ELS: handle enter key\n doSearch(this);\n break;\n case 27:\n this.value = "";\n clearMessage();\n break;\n }\n if (config.options.chkSearchIncremental)\n {\n if(this.value.length > 2)\n {\n if(this.value != lastSearchText)\n {\n if(searchTimeout) clearTimeout(searchTimeout);\n var txt = this;\n searchTimeout = setTimeout(function() {doSearch(txt);},500);\n }\n }\n else\n if(searchTimeout) clearTimeout(searchTimeout);\n }\n };\n var focusHandler = function(e)\n {\n this.select();\n };\n var btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);\n var txt = createTiddlyElement(place,"input",null,null,null);\n if(params[0])\n txt.value = params[0];\n txt.onkeyup = keyHandler;\n txt.onfocus = focusHandler;\n txt.setAttribute("size",this.sizeTextbox);\n txt.setAttribute("accessKey",this.accessKey);\n txt.setAttribute("autocomplete","off");\n if(config.browser.isSafari)\n {\n txt.setAttribute("type","search");\n txt.setAttribute("results","5");\n }\n else\n txt.setAttribute("type","text");\n}\n//}}}\n\n//{{{\nStory.prototype.search = function(text,useCaseSensitive,useRegExp)\n{\n highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");\n var matches = store.search(highlightHack,"title","excludeSearch");\n var q = useRegExp ? "/" : "'";\n clearMessage();\n if (!matches.length) {\n if (config.options.chkSearchList) discardSearchResults();\n displayMessage(config.macros.search.failureMsg.format([q+text+q]));\n } else {\n if (config.options.chkSearchList) \n reportSearchResults(text,matches);\n else {\n var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);\n this.closeAllTiddlers(); story.displayTiddlers(null,titles);\n displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));\n }\n }\n highlightHack = null;\n}\n//}}}\n\n//{{{\nTiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag)\n{\n var candidates = this.reverseLookup("tags",excludeTag,false,sortField);\n\n // scan for matching titles\n var title_results = [];\n if (config.options.chkSearchTitles)\n for(var t=0; t<candidates.length; t++)\n if(candidates[t].title.search(searchRegExp)!=-1)\n title_results.push(candidates[t]);\n\n // scan for matching text\n var text_results = [];\n if (config.options.chkSearchText)\n for(var t=0; t<candidates.length; t++)\n if(candidates[t].text.search(searchRegExp)!=-1)\n text_results.push(candidates[t]);\n\n // scan for matching tags\n var tag_results = [];\n if (config.options.chkSearchTags)\n for(var t=0; t<candidates.length; t++)\n if(candidates[t].tags.join(" ").search(searchRegExp)!=-1)\n tag_results.push(candidates[t]);\n\n // merge the results, eliminating redundant matches\n var results = [];\n for(var t=0; t<title_results.length; t++) results.pushUnique(title_results[t]);\n for(var t=0; t<text_results.length; t++) results.pushUnique(text_results[t]);\n for(var t=0; t<tag_results.length; t++) results.pushUnique(tag_results[t]);\n\n // if not 'titles first', re-sort results to so titles, text and tag matches are mixed together\n if(!sortField) sortField = "title";\n var bySortField=function (a,b) {if(a[sortField] == b[sortField]) return(0); else return (a[sortField] < b[sortField]) ? -1 : +1; }\n if (!config.options.chkSearchTitlesFirst) results.sort(bySortField);\n return results;\n}\n//}}}\n\n// // ''REPORT GENERATOR''\n//{{{\nif (!window.reportSearchResults) window.reportSearchResults=function(text,matches)\n{\n var title=config.macros.search.reportTitle\n var q = config.options.chkRegExpSearch ? "/" : "'";\n var body="";\n\n // summary: nn tiddlers found matching '...', options used\n body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\sn";\n body+="^^//searched in:// ";\n body+=(config.options.chkSearchTitles?"''titles'' ":"");\n body+=(config.options.chkSearchText?"''text'' ":"");\n body+=(config.options.chkSearchTags?"''tags'' ":"");\n if (config.options.chkCaseSensitiveSearch||config.options.chkRegExpSearch) {\n body+=" //with options:// ";\n body+=(config.options.chkCaseSensitiveSearch?"''case sensitive'' ":"");\n body+=(config.options.chkRegExpSearch?"''text patterns'' ":"");\n }\n body+="^^";\n\n // numbered list of links to matching tiddlers\n body+="\sn<<<";\n for(var t=0;t<matches.length;t++) body+="\sn# [["+matches[t].title+"]]";\n body+="\sn<<<\sn";\n\n // open all matches button\n body+="<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n body+="onclick=\s"story.displayTiddlers(null,["\n for(var t=0;t<matches.length;t++)\n body+="'"+matches[t].title.replace(/\s'/mg,"\s\s'")+"'"+((t<matches.length-1)?", ":"");\n body+="],1);\s" ";\n body+="accesskey=\s"O\s" ";\n body+="value=\s"open all matching tiddlers\s"></html> ";\n\n // discard search results button\n body+="<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n body+="onclick=\s"story.closeTiddler('"+title+"'); store.deleteTiddler('"+title+"');\s" ";\n body+="value=\s"discard "+title+"\s"></html>";\n\n // search again\n body+="\sn\sn----\sn";\n body+="<<search \s""+text+"\s">> ";\n body+="<<option chkSearchTitles>>titles ";\n body+="<<option chkSearchText>>text ";\n body+="<<option chkSearchTags>>tags";\n body+="<<option chkCaseSensitiveSearch>>case-sensitive ";\n body+="<<option chkRegExpSearch>>text patterns";\n\n // create/update the tiddler\n var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();\n tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch");\n store.addTiddler(tiddler); story.closeTiddler(title);\n\n // use alternate "search again" label in <<search>> macro\n var oldprompt=config.macros.search.label;\n config.macros.search.label="search again";\n\n // render tiddler\n story.displayTiddler(null,title,1); // force refresh\n\n // restore standard search label\n config.macros.search.label=oldprompt;\n\n}\n\nif (!window.discardSearchResults) window.discardSearchResults=function()\n{\n // remove the tiddler\n story.closeTiddler(config.macros.search.reportTitle);\n store.deleteTiddler(config.macros.search.reportTitle);\n}\n//}}}\n\n\n
config.macros.listTags = { text: "Hello" };\nconfig.macros.listTags.handler = function(place,macroName,params)\n{\n var tagged = store.getTaggedTiddlers(params[0]);\n var ul = createTiddlyElement(place,"ul",null,null,"");\n for(var r=0;r<tagged.length;r++)\n {\n var li = createTiddlyElement(ul,"li",null,null,"");\n createTiddlyLink(li,tagged[r].title,true);\n }\n}
/***\nPre-check AutoSave\n***/\n//{{{\nconfig.options.chkAutoSave = true;\n//}}}\n/***\nPre-check SinglePageMode\n***/\n//{{{\nconfig.options.chkSinglePageMode=false;\n//}}}\n\n/***\nPre-check SearchList\n***/\n//{{{\nconfig.options.chkSearchList=true;\n//}}}\n/***\nChange "close" message to "X"\n***/\n//{{{\nconfig.messages.messageClose.text = "X";\n//}}}\n/***\nRemove default "The tiddler '%0' doesn't yet exist. Double-click to create it" Tiddler body message\n***/\n//{{{\nconfig.views.wikified.defaultText = ""; \n//}}}
This is a list of Plugins that are currently installed and in use at [[TiddlyWikiTips.com]].\n\nClicking a Plugin on the left will open it for you to view. \n\nIf you want to use any of these Plugins on //your// TiddlyWiki, just edit the Plugin, Copy and Paste the text into a new Tiddler in your TiddlyWiki file, and Tag it as "systemConfig". The next time you reload your TiddlyWiki file, the Plugin will be active...simple as that!
I have always been fascinated with how people work, even though I might not necessarily enjoy //interacting// with people much of the time. Part of my reasoning is that I have felt abnormal in many ways for much of my life. Although I will admit to being "different," I no longer think of myself as being //weird// (which probably makes me weird in itself- but that's just too complicated to think about, now isn't it?).
So why are you so interested in these psychological conditions? Do you have [[Schizoid Personality Disorder]] or [[Face blindness]]?\n\nIn a short answer: No.\nIn a confusing answer: Eh, maybe. I'm not a psychologist.\n\nI study psychology for many reasons. It's interesting learning about people- not just "normal" people. I like crazy people... at least conceptually, I do. They're interesting. Correction: "crazy" is probably the wrong term. A person who has Asperger's Syndrome or Face blindness is not crazy... they're just different... just as I (sometimes) think I am. I'm not weird. I'm just... different.\n\nThe conditions I list here I have spent more time studying than other things mostly because I find I relate in some way to each condition. Over my life, I have realized I am very non-social compared to my peers, for example. I wanted to find out why. Reading into psychology has helped me learn about myself indirectly. I do not believe I really have any of these "conditions," but if I did, I would not consider myself to have a "severe" case of any of them.
Click on any of the resources listed at the left to discover lots of links to more information, more uses, and more resoruces to broaden your TiddlyWiki experience!
Schizoid Personality Disorder (SPD) is a "disorder" that is often thought to be non-treatable. Much of the problem is that those who psychologists would claim have SPD do not see themselves as having a disorder. This raises, in my opinion, serious doubts as to the status of this disorder. Is it a personality disorder or just a //personality//?\n\n''Traits''\n*Preference to be alone\n*Few interests or activities\n*Apathy, pays little attention to criticism\n*Little sexual desire (See also [[asexuality]])\n\nTraits of SPD are characterized by lack of emotions, lack of any interest in social interaction, and generally few interests altogether. It should be noted that SPD is very different from social anxiety disorder (SAD) because unlike those with SAD, schizoid individuals do not have an interest in social interaction. They choose not to participate socially. Individuals with Social Anxiety, however, would like to be socially active, but have fears and stress that prevents them from doing so.\n\n!Links
I'm currently a master's student...\n\n!Links\n[[Piled Higher and Deeper comics|http://www.phdcomics.com/]]
A Scottism is a word or phrase that I use in my personal idiolect.\n\n*''Crove'' - A mix between a crush and love.\n*''Snew'' - the past tense of "snow." It //snew// yesterday afternoon.
''1 tiddlers found matching '{{{geocoins}}}'''\n^^//searched in:// ''titles'' ''text'' ''tags'' ^^\n<<<\n# [[Event Caches]]\n<<<\n<html><input type="button" href="javascript:;" onclick="story.displayTiddlers(null,['Event Caches'],1);" accesskey="O" value="open all matching tiddlers"></html> <html><input type="button" href="javascript:;" onclick="story.closeTiddler('SearchResults'); store.deleteTiddler('SearchResults');" value="discard SearchResults"></html>\n\n----\n<<search "geocoins">> <<option chkSearchTitles>>titles <<option chkSearchText>>text <<option chkSearchTags>>tags<<option chkCaseSensitiveSearch>>case-sensitive <<option chkRegExpSearch>>text patterns
* Asexuality\n* Gender/Sex\n* Sexual orientation
[img[mt2.jpg]] \n\n<<search>><<closeAll>><<permaview>><<newTiddler>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>><<slider chkSliderContents [[TabContents]] 'contents »' 'contents'>>
Silyon is a [[conlang]] that I created in 2005-2006. Most of the work done so far in the language was through an independent study during my senior year as an undergrad. It is completely original- not directly based off any existing language (like French and Italian are based off Latin). I did take influence off a few languages in adapting its syntax, however. The most notable is Iñupiaq Eskimo.\n\nThe [[word order]] of Silyon is Verb- Subject- Object (VSO). This means if the English sentence "I read books," it would be written as "Read I books."
An online, searchable Scottopedia
[[StrangeGravity]]
http://tiddlywikitips.com/
While eating in the cafeteria one day, I developed my "Famous Scott" burrito. It has four fillings inside the tortilla:\n\n*Refried beans\n*Cheese (mozzarella)\n*Rice\n*Green chile\n\nThis is the usual burrito I have while at the cafeteria, mostly because I'm trying to cut down on the amount of meat I'm eating (note: I'm not a vegetarian by any means- just trying to eat less meat). At home, when I have burritos at my parents' house, I usually have beans, meat (hamburger or turkey), cheese, salsa (which may or may not have green chile in it), and lettuce.
StrangeGravity.com is my personal domain. I'm not really sure why I picked it- it just sounded cool at the time.\n\n<<tag Resources>> something\n\nStrangeGravity is my personal website. It's more than that, though. Its primary mission is to serve as a reference. To who? Well, me for starters... but anyone who can find this stuff useful.
/***\nIncluded Styles\n***/\n/*{{{*/\n[[Styles TagglyTagging]]\n[[Styles HorizontalMainMenu]]\n[[Styles MessageArea]]\n[[Styles SideBarOptions]]\n[[Styles Calendar]]\n[[Styles Editor]]\n[[Styles Breadcrumbs]]\n/*}}}*/\n\n/***\nCosmetic fixes\n***/\n/*{{{*/\nh1,h2,h3,h4,h5 { color: #000; background: transparent; }\n\nbody { \n background: #68754d; }\n\n.headerShadow {\n padding: 1.0em; }\n\n.headerForeground {\n padding: 1.0em; }\n\n.selected .tagging, .selected .tagged {\n padding: 0.5em;\n background-color: #eee;\n border-top: 1px solid #ccc; \n border-left: 1px solid #ccc; \n border-bottom: 3px solid #ccc; \n border-right: 3px solid #ccc; \n -moz-border-radius: 1em; }\n\n.shadow .title {\n color: #fff; }\n\n.siteTitle {\n color: #9f9;\n font-size: 2.5em; }\n\n.siteSubtitle {\n font-size: 1.0em; }\n\n.tabSelected{\n padding-top: 0.0em;\n padding-left: 1em;\n padding-right: 1em;\n -moz-border-radius-topleft: 0.5em; \n -moz-border-radius-topright: 0.5em;}\n\n.tabUnselected {\n padding-top: 0.0em;\n padding-left: 1em;\n padding-right: 1em;\n -moz-border-radius-topleft: 0.5em; \n -moz-border-radius-topright: 0.5em;}\n\n.tabContents {\n margin: 0px;\n padding-top: 0px;\n padding-bottom: 0px;\n padding-left: 2px;\n padding-right: 2px;\n -moz-border-radius: 1em; }\n\n.tagging, .tagged {\n padding: 0.5em;\n background-color: #eee;\n border-top: 1px solid #ccc; \n border-left: 1px solid #ccc; \n border-bottom: 3px solid #ccc; \n border-right: 3px solid #ccc; \n -moz-border-radius: 1em; }\n\n.tiddler {\n border-top: 1px solid #ccc; \n border-left: 1px solid #ccc; \n border-bottom: 3px solid #ccc; \n border-right: 3px solid #ccc; \n margin: 0.5em; \n background:#fff; \n padding: 0.5em; \n -moz-border-radius: 1em; }\n\n.title {\n color:black; \n font-size: 2em; }\n\n.viewer .listTitle { \n list-style-type: none; \n margin-left: -2em; }\n\n.viewer pre { \n background-color: #f8f8ff; \n border-color: #ddf }\n\n/*}}}*/\n
@media print {\n#mainMenu, #sidebar, #messageArea, #breadCrumbs, #topMenu, .siteTitle, .siteSubtitle {display: none ! important;}\n#displayArea {margin: 0.5em 0.5em 0em 0.5em;}\n}\n
These Styles represent all of the CSS Style data that control the look and feel of this site.\n\nNote that I recently "modularized" the StyleSheet Tiddler so that "Styles xxxx" Tiddlers are "called" by StyleSheet. This makes for better troubleshooting.\n\nIf you wish to use these Styles, please be sure to copy them all, because they are all called from within StyleSheet.
/***\nCalendar\n***/\n/*{{{*/\n.calendar a { margin:0px !important; padding:0px !important; } \n/*}}}*/\n
/***\nStyles Editor\n***/\n/*{{{*/\n.editor textarea {height:200px;background-color:#F2F2F2;}\n\n.editorFooter .button { \n padding-top: 0px; \n padding-bottom:0px; \n background: #fff;\n color: #000; \n border-top: 1px solid #ccc; \n border-left: 1px solid #ccc; \n border-bottom: 2px solid #ccc; \n border-right: 2px solid #ccc; \n margin-left: 3px;\n padding-top: 1px;\n padding-bottom: 1px;\n padding-left: 5px;\n padding-right: 5px; }\n \n.editorFooter .button:hover { \n border-top: 2px solid #ccc; \n border-left: 2px solid #ccc; \n border-bottom: 1px solid #ccc; \n border-right: 1px solid #ccc; \n margin-left: 3px;\n padding-top: 1px;\n padding-bottom: 1px;\n padding-left: 5px;\n padding-right: 5px; }\n/*}}}*/\n
/***\nTo use, add {{{[[Styles HorizontalMainMenu]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also HorizontalMainMenu and PageTemplate.\n***/\n/*{{{*/\n\n#topMenu br {display:none; }\n#topMenu { background: #f93; }\n#topMenu { padding:2px; }\n#topMenu .button, #topMenu .tiddlyLink { padding-left:1em; padding-right:1em; color:black; font-size:115%;}\n#displayArea { margin: 1em 15.7em 0em 1em; }\n\n/* just in case want some QuickOpenTags in your topMenu */\n#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\n#topMenu .quickopentag .tiddlyLink { padding-right:1px; }\n#topMenu .quickopentag .button { padding-left:1px; border:0px; }\n\n\n/*}}}*/
/***\nStyle Message Area\n***/\n/*{{{*/\n#messageArea { \n background-color: #eee; \n border-color: #8ab; \n border-width: 4px; \n border-style: dotted; \n font-size: 90%; \n padding: 0.5em; \n -moz-border-radius: 1em; }\n#messageArea .button { text-decoration:none; font-weight:bold; background:transparent; border:0px; }\n#messageArea .button:hover {background: #acd; }\n/*}}}*/\n
/***\nStyles SideBarOptions\n***/\n/*{{{*/\n#sidebarOptions .sliderPanel {\n border: 0px solid #000; \n background-color: #eee;\n margin: 0px;\n margin-left: 0.5em;\n padding: 0px;\n -moz-border-radius: 1em; }\n\n#sidebarOptions .sliderPanel .tabSelected{\n border: 1px solid #ccc; \n background-color: #fff;\n margin: 0px;\n padding-top: 5px;\n padding-bottom: 0px;\n padding-left: 2px;\n padding-right: 2px;\n -moz-border-radius-topleft: 1em; \n -moz-border-radius-topright: 1em;}\n\n#sidebarOptions .sliderPanel .tabUnselected{\n border: 1px solid #ccc; \n background-color: #eee;\n margin: 0px;\n padding-top: 5px;\n padding-bottom: 0px;\n padding-left: 2px;\n padding-right: 2px;\n -moz-border-radius-topleft: 1em; \n -moz-border-radius-topright: 1em;}\n\n#sidebarOptions { \n border-top: 1px solid #ccc; \n border-left: 1px solid #ccc; \n border-bottom: 3px solid #ccc; \n border-right: 3px solid #ccc; \n padding: 0.5em; \n margin: 0.5em; \n -moz-border-radius: 1em; }\n\n#sidebarOptions .button {\n margin: 1px;\n border-color:orange;\n border-top: 1px solid #ccc; \n border-left: 1px solid #ccc; \n border-bottom: 2px solid #ccc; \n border-right: 2px solid #ccc; \n}\n\n#sidebarOptions .button:hover {\n color: #000;\n background: #fff;\n border-top: 2px solid #ccc; \n border-left: 2px solid #ccc; \n border-bottom: 1px solid #ccc; \n border-right: 1px solid #ccc; \n}\n\n#sidebarOptions .button:active {\n color: #000;\n background: #fff;\n}\n/*}}}*/\n
/***\nTo use, add {{{[[Styles TagglyTagging]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also ViewTemplate, EditTemplate and TagglyTagging.\n***/\n/*{{{*/\n.tagglyTagged li.listTitle { display:none;}\n.tagglyTagged li { display: inline; font-size:90%; }\n.tagglyTagged ul { margin:0px; padding:0px; }\n.tagglyTagging { padding-top:0.5em; }\n.tagglyTagging li.listTitle { display:none;}\n.tagglyTagging ul { margin-top:0px; padding-top:0.5em; padding-left:2em; margin-bottom:0px; padding-bottom:0px; }\n\n/* .tagglyTagging .tghide { display:inline; } */\n\n.tagglyTagging .button { display:none; margin-left:3px; margin-right:3px; }\n.tagglyTagging .button, .hidebutton { color:#aaa; font-size:90%; border:0px; padding-left:0.3em;padding-right:0.3em;}\n.tagglyTagging .button:hover, .hidebutton:hover { background:#eee; color:#888; }\n.selected .tagglyTagging .button { display:inline; }\n\n.tagglyLabel { color:#aaa; font-size:90%; }\n\n\n.editLabel { font-size:90%; padding-top:0.5em; }\n/*}}}*/\n
Based on my experiences as a geography major, here are some things you can say during a class discussion that will increase the chances of your professors liking you:\n\n* "It depends"\nThis little gem is a great answer. Like many (most?) things in life, a simple answer is not always possible. There might not be a //single// answer, but many. Answering "it depends" indicates conditions ("Yes, but...") This answer is therefore complex. It's also vague. As said often in //The Fairly Odd Parents//, "That's just vague enough to work."
<<tabs txtMainTab Timeline Timeline TabTimeline All 'All tiddlers' TabAll Tags 'All tags' TabTags More 'More lists' TabMore>>
!Main Links\n<<tag FAQ>>\n\n<<tag Geocaching>> \n\n<<tag Linguistics>> \n\n<<tag Philosophy>> (also includes religion)\n\n<<tag Psychology>> \n\n<<tag Sexuality>> \n\n[[About]]
Terrain:\n1.0: 47 (20.0%)\n''1.5: 96 (40.9%)''\n2.0: 52 (22.1%)\n2.5: 16 ( 6.8%)\n3.0: 16 ( 6.8%)\n3.5: 2 ( 0.9%)\n4.0: 6 ( 2.6%)
One of the best ways to find a cache is to think, "Where would a good place to hide be?" By thinking ahead and planning out where you look, you might save a lot of time. Yes, caches are supposed to be hidden... but there are usually areas that are better for hiding than others. For example, if there's an area that might get flooded easily (such as by a river), it might not be a place for a cache. Certain types of bushes or plants can be great hiding places... but others might not be. Be aware of camoflage.
I'm a bit lazy to write my own description, and I think this description is probably the best available- especially since it was written by the Jeremy Ruston (the creator of TiddlyWiki):\n\n<<<\nA TiddlyWiki is like a blog because it's divided up into neat little chunks, but it encourages you to read it by hyperlinking rather than sequentially: if you like, a non-linear blog analogue that binds the individual microcontent items into a cohesive whole. I think that TiddlyWiki represents a novel medium for writing, and will promote it's own distinctive WritingStyle. \n<<<\n\nThis particular "theme" or "skin" of TiddlyWiki is a modified version taken from [[TiddlyWikiTips.com|http://www.tiddlywikitips.com/]], where I mostly just modified the colors. I also am adding in some features taken from [[the TiddlyPedia skin|http://15black.bluedepot.com/styles/tiddlypedia.htm]], as well as several other plugins.\n\nFinally, this tiddlywiki uses version <<version>>.\n\nIf you'd like to download TiddlyWiki, head to [[TiddlyWiki.com|http://www.tiddlywiki.com/]].\n\n!Links\n*[[TiddlyWiki.com|http://www.tiddlywiki.com/]]\n*[[TiddlyWikiTips.com|http://www.tiddlywikitips.com/]]\n*"[["TiddlyWiki for the Rest of Us|http://www.giffmex.org/twfortherestofus.html]]"\n*[[TWHelp|http://tiddlyspot.com/twhelp/]]\n*[[TiddlySpot|http://www.tiddlyspot.com/]] - free tiddlywiki space\n
[[TiddlyWikiTips.com]] is a tips site developed by [[Jim Barr]] to provide Tips for TiddlyWiki users. [[TiddlyWikiTips.com]] is hosted on [[Flexihostings.net|http://flexihostings.net]] and uses TiddlyWiki.
Here are The TiddlyWiki Tips! \n\nClick on a Tip title at the left to open it. \n\nTips marked with a ({{{*}}} were either submitted or inspired by [[TiddlyWikiTips.com]] visitors!
The interesting thing about [[TiddlyWiki]] is that it doesn't have to be linear, like most web pages. It's very easy to create a link to other [[tiddlers]], so there are multiple ways of getting to a particular section (as opposed to the traditional web page which follows a certain path "Main page >> Secondary Page >> Third page." Despite that, I think a table of contents provides a useful place to get started.\n\n__''Linguistics''__\n*My Language\n\n\n----\n<<tag Geography>>\n''Geography''\n*test\n\n*Shot Glasses
Travel bugs are items in [[geocaching|Geocaching]] that travel from one cache to another. It's simple the way they work: A cacher will go to a cache, find a travel bug, and pick it up. After logging it online (to keep track of where it's been), they'll put it in the next cache they find. Some travel bugs have certain missions, such as traveling to Florida, meeting a certain person, attending a certain event (Oktoberfest, for example). Others just want to travel around without any big goal. A new variation of travel bugs are [[geocoins|Geocoins]]
<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump newHere'></div>\n<div class='title' macro='view title'></div>\n<div class='subtitle'>modified <span macro='view modified date [[DD MMM YYYY]]'></span>, created <span macro='view created date [[DD MMM YYYY]]'></span></div>\n<div class='tagging' macro='tagging'></div>\n<div class='tagged' macro='tags'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>
The first episode of Wonderfalls
[img[welcome.jpg]]\n\nPaġlagivsigin StrangeGravity-mun. Welcome to StrangeGravity. This is my personal website, where I discuss things that interest me. That's not the most exciting description, I know... but how can you describe your own site without being either boring or egotistical?
Let me try something.
The following is a '''list of episodes''' for the television show ''[[Wonderfalls]]''. The episodes are presented in the order as seen on the DVD.\n\n==Season One (2004)==\n{| class="wikitable"\n! Screenshot !! Title !! Writer(s) !! Director !! Original airdate !! width="75"|Production code !! width="20"|#\n{{Episode list\n |Image = Wonderfalls_1x01.jpg\n |Title = [[Wax Lion]]\n |Aux1 = [[Todd Holland]] (story) & [[Bryan Fuller]] (story & teleplay)\n |Aux2 = [[Todd Holland]]\n |ProdCode = 1AHM79\n |OriginalAirDate = [[March 12]], [[2004]]\n |EpisodeNumber = 1\n |ShortSummary = After being passed over for a promotion at her dead-end retail job, Jaye begins hearing voices from a defective wax lion and a brass monkey. Trips to her mother's therapist and the local bar, where she meets the cute new bartender whose wife cheated on him on their honeymoon, do nothing to assure Jaye that she is not going crazy. After a night of verbal harassment from the Wax Lion, Jaye grudgingly agrees to do what the voices tell her. She arranges a horrible blind date between her sister and Thomas, a lovesick EPS worker. Sharon has no interest in Thomas because, as she reveals to him and Jaye, she is a lesbian, and the date ends in a trip to the hospital when Thomas has an allergic reaction to peanuts. Thomas' ex-wife visits him at the hospital and she and Sharon are immediately attracted to each other. Thomas also finds a new romantic interest in his nurse. Despite the good effects of her actions, Jaye remains unconvinced that she isn't crazy or that the voices aren't evil.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x02.jpg\n |Title = [[Pink Flamingos (Wonderfalls)|Pink Flamingos]]\n |Aux1 = [[Gretchen J. Berg]] & [[Aaron Harberts]]\n |Aux2 = [[Todd Holland]]\n |ProdCode = 1AHM01\n |OriginalAirDate = [[April 1]], [[2004]]\n |EpisodeNumber = 2\n |ShortSummary = Still trying to ignore the talking inanimate animals, Jaye accidentally runs over her father with his car, breaking his leg. Feeling guilty about her father, Jaye listens to the stuffed fish that tells her to help an annoying high school classmate, Gretchen, plan her high-school reunion. In helping Gretchen with the reunion, Jaye becomes aware of her struggles with her distant husband. When a rooster hair clip tells her to "destroy Gretchen," Jaye defies the chicken and tries to help her, inadvertently causing her husband to have a car accident. Giving into the voice, Jaye "destroys Gretchen" by pouring a drink on her in front of everyone at the reunion, which leads to her having a talk with an admirer from high school in the bathroom. That conversation leads to her realizing that she doesn't love her husband and Gretchen leaves the reunion intending to divorce him and feeling more empowered. Gretchen's husband finds a romantic interest in the woman from the towing company. Meanwhile, Sharon gets stuck taking care of Darrin and his leg, and she slips him some sleeping pills so that she can have a date with Beth. Much to Sharon's surprise, Beth reveals that she isn't a lesbian -- she's bisexual. Sharon isn't quite sure how she feels how that fact. Darrin returns to the hospital for a follow-up visit where he learns that they found a blood clot in his leg that might have killed him.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x03.jpg\n |Title = [[Karma Chameleon (Wonderfalls)|Karma Chameleon]]\n |Aux1 = [[Tim Minear]]\n |Aux2 = [[Marita Grabiak]]\n |ProdCode = 1AHM10\n |OriginalAirDate = [[March 19]], [[2004]]\n |EpisodeNumber = 3\n |ShortSummary = Jaye helps a young woman who is down on her luck until she begins assuming Jaye's identity.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls-104.jpg\n |Title = [[Wound-Up Penguin]]\n |Aux1 = [[Liz W. Garcia]]\n |Aux2 = [[Todd Holland]]\n |ProdCode = 1AHM12\n |OriginalAirDate = [[March 26]], [[2004]]\n |EpisodeNumber = 4\n |ShortSummary = When Jaye encounters a nun who has lost her faith, she shares her experiences with the talking animals with the nun who tries to perform an exorcism on her.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x05.jpg\n |Title = [[Crime Dog]]\n |Aux1 = [[Krista Vernoff]]\n |Aux2 = [[Allan Kroeker]]\n |ProdCode = 1AHM02\n |OriginalAirDate = [[July 23]], [[2004]]\n |EpisodeNumber = 5\n |ShortSummary = When their illegal housekeeper is deported, a cow creamer's urging sends Jaye and Aaron to Canada to bring her back.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x06.jpg\n |Title = [[Muffin Buffalo]]\n |Aux1 = [[Gretchen J. Berg]] & [[Aaron Harberts]] \n |Aux2 = [[Craig Zisk]]\n |ProdCode = 1AHM05\n |OriginalAirDate = [[July 23]], [[2004]]\n |EpisodeNumber = 6\n |ShortSummary = Jaye is finally listening to the voices and hates that her actions are causing people to see her as a hero. Without any prodding from the animals, Jaye befriends a shut-in from the trailer park after she inadvertently hurts his feelings.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x07.jpg\n |Title = [[Barrel Bear]]\n |Aux1 = [[Tim Minear]] & [[Bryan Fuller]]\n |Aux2 = [[Jamie Babbit]]\n |ProdCode = 1AHM03\n |OriginalAirDate = [[October 27]], [[2004]]\n |EpisodeNumber = 7\n |ShortSummary = Jaye helps the first woman to go over Niagara Falls in a barrel to regain some of her celebrity, until another woman shows up saying that she actually went over the Falls in that barrel.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x08.jpg\n |Title = [[Lovesick Ass]]\n |Aux1 = [[Dan Fesman|Dan E. Fesman]] & [[Harry Victor]]\n |Aux2 = [[Todd Holland]]\n |ProdCode = 1AHM04\n |OriginalAirDate = [[November 3]], [[2004]]\n |EpisodeNumber = 8\n |ShortSummary = Worried that she isn't sane enough to enter a relationship, Jaye deflects Eric's advances while they work together to help a Russian mail-order bride whose perspective husband turns out to be a 13-year-old boy.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x09.jpg\n |Title = [[Safety Canary]]\n |Aux1 = [[Liz W. Garcia]] & [[Alexander Woo]]\n |Aux2 = [[Peter Lauer]]\n |ProdCode = 1AHM06\n |OriginalAirDate = [[November 17]], [[2004]]\n |EpisodeNumber = 9\n |ShortSummary = Jaye is determined to turn her and Eric's first date into their last when she begins to realize that she is a maneater like her family and friends say.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x10.jpg\n |Title = [[Lying Pig]]\n |Aux1 = [[Krista Vernoff]] & [[Abby Gewanter]]\n |Aux2 = [[Peter O'Fallon]]\n |ProdCode = 1AHM07\n |OriginalAirDate = [[July 25]], [[2004]]\n |EpisodeNumber = 10\n |ShortSummary = While Eric's wife Heidi tries to win him back, Jaye tries to listen to the voice and stay out the situation, even though it is difficult for her.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x11.jpg\n |Title = [[Cocktail Bunny]]\n |Aux1 = [[Bryan Fuller]]\n |Aux2 = [[Todd Holland]]\n |ProdCode = 1AHM08\n |OriginalAirDate = [[July 25]], [[2004]]\n |EpisodeNumber = 11\n |ShortSummary = Upset that the voices told her to let Eric go back to Heidi, Jaye is looking for a reason to suspect Heidi of wrongdoing. She misreads the signs that the voices give her, which lead to her alienating Eric.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x12.jpg\n |Title = [[Totem Mole]]\n |Aux1 = [[Harry Victor]] & [[Dan Fesman|Dan E. Fesman]]\n |Aux2 = [[Jeremy Podsewa]]\n |ProdCode = 1AHM09\n |OriginalAirDate = [[December 8]], [[2004]]\n |EpisodeNumber = 12\n |ShortSummary = While visiting an Indian reservation, Jaye encounters the spirit of a holy woman, who she thinks can help silence the animal voices forever.\n |LineColor = FFCC66\n}}\n{{Episode list\n |Image = Wonderfalls_1x13.jpg\n |Title = [[Caged Bird]]\n |Aux1 = [[Krista Vernoff]]\n |Aux2 = [[Michael Lehmann]]\n |ProdCode = 1AHM11\n |OriginalAirDate = [[December 15]], [[2004]]\n |EpisodeNumber = 13\n |ShortSummary = A bank robber takes Jaye, Sharon, and some of the gift shop employees hostage just as Jaye and Eric are supposed to meet to say a final goodbye.\n |LineColor = FFCC66\n}}\n|}\n\n==Unaired episode==\nAn alternate version of the first episode "Wax Lion" exists, featuring different actors playing Mahandra and Aaron Tyler. Mahandra is played by [[Kerry Washington]] and Aaron is played by [[Adam Scott]]. This version has yet to be aired but has circulated unofficially on the Internet.\n\n[http://www.youtube.com/watch?v=y8_bmzRhfag Watch it here.]\n\n[[Category:Lists of dramedy television series episodes|Wonderfalls episodes]]\n\n<html>\n<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/y8_bmzRhfag"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/y8_bmzRhfag" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>\n</html>\n
Wonderfalls is a show that aired in 2004 on Fox. It only aired 4 episodes before being cut. Despite this, critics loved it. It also produced a strong cult following. Of course, given that one of the episodes deals with an exorcism, I use the term cult loosely.\n\n!Synopsis\n[>img[wonderfalls2.png]] Jaye Tyler lives in a trailer park in Niagara Falls. She graduated from Brown University with a degree in philosophy, but works in a souvenir shop ("At least you're manager, right?" The answer is no). Her life is pretty mundane, but at least she is independent of her parents- kind of. One day, however, inanimate objects start talking to her. They begin telling her to do things. Generally, the end result is doing something good for someone... but lots of weird and interesting things happen while Jaye's trying to help. Most of the time it's not clear what's supposed to happen or why she should do these things. That adds in to the mystery of whether it's god's work or not.\n\n!My thoughts\nTo me, this show is an excellent example of a "dramedy" (drama + comedy). It's also one of the best written shows that I've ever seen. It blends together the right amount of humor with seriousness, which surprisingly results in a perfect mixture of feeling good (aww), laughter, action, and thoughtfulness.\n\nIt also makes me think about [[animism|Animism]]- the idea that supposedly inanimate objects (at least inanimate in the traditional mindset) actually do possess spirits. \n\n!Links\n[[SaveWonderfalls.com|http://www.savewonderfalls.com/]]\n
I have a bad memory. Sometimes people don't believe me when I say it's bad. Sometimes they think I just have a "selective" memory.
"Conlang" is short for "Constructed language." A constructed language is a language that is purposely created for a reason. It could be that the author has created a language for artistic purposes, for fun, to use with friends, or even as an attempt to create a neutral language for everyone in the world to speak (Esperanto in particular).
Geocaching is...
Another test
In this chart, V = Verb; S = Subject; O = Object. A verb is an action. A subject is the person or thing that is performing the action. The object is the person or thing that the action is being performed on. As an example, look at the English sentence, "Paul read books." //Read// is the verb because it's an action. //Paul// is the subject because he is the one doing the reading. //Books// is the object because that is what Paul is reading- the action is being performed on the books.\n\n|bgcolor(#68754d;):! Word Order|bgcolor(#68754d;):!Example Sentence |\n| SVO | Paul reads books |\n| SOV | Paul books reads |\n| VSO | Reads Paul books |\n| VOS | Reads books Paul |\n| OVS | Books reads Paul |\n| OSV | Books Paul reads |