[>img[Bandit King Costume|banditking-small.JPG][banditking.JPG]]This is one of the first costumes I made. It was for a troupe game set in 1100s Constantinople. The costume consists of black cotton drawstring pants, a grey cotton T-tunic, and a gold and black jacquard robe.\n\nThe pattern for the pants came from a unisex pajama pants pattern. The T-tunic was done without a pattern using Jeff's measurements. It has a circular collar which was piped in black. The robe was made using an altered pattern for a woman's duster. I took out the darts and left off the sleeves. The robe is trimmed in gold braid and is reversible being black on gold on one side and gold on black on the reverse. \n\nThis was a challenging costume for me as I was working without a pattern on the T-tunic, which was a departure for me. Also, Jeff is 6'5" tall which required quite a bit of alteration. The work was totally worth it because of the look on Jeff's face when he got the robe. And when the troupe game reset he was able to reuse the robe for his Changeling character, [[Adrian Layne|http://changeling.cam-wiki.org/index.php/Adrian_Layne]].\n\nClick on the picture for a larger view.\n\n\n\n\n\n\n
[>img[Black T-tunic|blackt-tunic-small.jpg][blackt-tunic.jpg]]This is a black t-tunic I made for a player in a local troupe game. It was made without a pattern from measurements. The fabric is light weight black cotton. The V-neck is laced together and trimmed in gold braid. The sleeves are elasticized at the wrist with a ruffled cuffs. \n\nThe trim on the sleeves covers the seam where I had to lengthen the sleeves.\n\nClick on the picture for a larger view.\n\n\n\n\n\n\n\n\n\n\n\n\n\n
[>img[blackgoldcorset-small|blackgoldcorset-small.jpg][blackgoldcorset.jpg]]This corset was made for Kate for her Changeling character. It was made using the Butterick 4254 pattern, black and gold jacquard brocade and black baby silk for the lining. This is the second honest-to-goodness corset I ever made and I'm super happy with the way it turned out (as is Kate!). Thanks to the canvas interfacing the corset itself was heavier than others I've come across but I think that helped with support.\n\nI used spiral steel boning; a material I will most likely never work with again. I had a hell of a time cutting it to size and I didn't like how the tips went on. I also used lacing bones for the back and I love, love, love them. \n\nDespite all the love, I will never make this pattern again. The curved channels were a pain and the lining gave me no end of trouble. True fact: After delivering the final product I burnt the pattern and danced around the fire cackling gleefully.\n\nClick on the picture for a larger view.\n\n\n\n\n\n\n\n\n
[>img[Blue Brocade Dress|bluefishbrocade-small.jpg][bluefishbrocade.jpg]]Simplicity 4531, made from synthetic brocade material. This was one of the first dresses I ever made. \n\nIt required alteration to the bodice for my, //ahem//, bustier proportions. I made the hem longer in the back than in the front so that it would appear even. \n\nClick on the picture for a larger view.\n\n\n\n\n\n\n\n\n
[<img[Butterfly Corset|butterflycorsetfront-small.png][butterflycorsetfront.jpg]][>img[Butterfly Corset|butterflycorsetback-small.jpg][butterflycorsetback.jpg]]This corset was made for Amanda, player of [[Elizabeth|http://il017d.cam-wiki.org/index.php/Elizabeth_Stanfield]], for USCC. It was made using the Butterick 4254 pattern and pink synthetic brocade. This is the first honest-to-goodness corset I ever made and I ran into all sorts of problems while making it. However, I learned all sorts of cool stuff; stuff like how to cut slippery fabric (place it between two sheets of muslin before pinning the pattern down). And while there are issues with the corset I'm really pleased with how it came out.\n\nThe corset has a canvas interfacing which makes it a little heavier than other corsets I've come across, which helps with support, I feel.\n\nI used spiral steel boning; a material I will most likely never work with again. I had a hell of a time cutting it to size and I didn't like how the tips went on. I also used lacing bones for the back and I love, love, love them. \n\nDespite all the love, I will never make this pattern again. The curved channels were a pain and the lining gave me no end of trouble. True fact: After delivering the final product I burnt the pattern and danced around the fire cackling gleefully.\n\nClick on the picture for a larger view.\n
[>img[Butterfly Kimono|butterflykimono-small.jpg][butterflykimono.jpg]]This kimono was made for the silent auction at [[ChiKalb 2008|http://www.barbcityil017d.com/barbcity_specialevents.htm]]. I used the pattern in //The Folkwear Book of Ethnic Clothing// by Mary S. Parker. I had to draft the pattern from the instructions; a new experience for me.\n\nAnd I know this is a familiar refrain and everyone reading can sing along without referring to the hymnal, but I have to rant a moment. For the love of all that is good and decent in the world publishers have to get it through their thick skulls that proofreading is essential. When a pattern piece that has been referred to as "Pattern piece H" suddenly starts being called "Pattern piece G"; when the lengths given in the figures don't match those given in the sidebar; when the instructions contradict what is shown in the illustrations, those are big signs the book never got the once over it should have. C'mon Lark Books, proofreaders aren't that expensive! Gah!\n\nI probably should have picked an easier fabric to work with for my first try. Pretty as it is, silky polyester is a pain in the rear to sew. It's slippery and it frays. Hurray for lint rollers! They are a seamstress's secret weapon.\n\nClick on the picture for a larger view.\n\n
Background: #F8ECDC\nForeground: #000\nPrimaryPale: #E85848\nPrimaryLight: #C2493C\nPrimaryMid: #9C3C31\nPrimaryDark: #000000\nSecondaryPale: #B5B6D6\nSecondaryLight: #9696B0\nSecondaryMid: #75768A\nSecondaryDark: #000000\nTertiaryPale: #FFFFAA\nTertiaryLight: #D9D991\nTertiaryMid: #B3B378\nTertiaryDark: #000000\nError: #f88
[[Butterfly Corset]]\n[[Black and Gold Corset]]\n[[Red Bustle]]
[<img[CK Dress|CKdress.png]][>img[Green Empire Waist Dress|GreenEmpireWaistDress-small.jpg][GreenEmpireWaistDress.jpg]]This was a custom order made for a friend for a convention. She pointed me to the Calvin Kline dress on the left and wanted something similar. We talked it over and I asked her about which elements of the dress she really liked (the empire waist, the cap sleeves and the neckline) and set about looking for a pattern.\n\nI found lots of patterns that had similar elements but none that were exactly right. What I ended up doing was using McCall 5039 for the top and Simplicity 3785 for the bottom. I tacked a waist tie on top of the finished dress so that it would emphasize the waist. The fabric is a shimmery, silky synthetic. \n\nShe loved the dress and looked very lovely!\n\nClick on the picture for a larger view.\n\n\n\n\n\n\n\n\n
version.extensions.HTMLFormatting = {major: 2, minor: 1, revision: 5, date: new Date(2007,6,14)};\n\n// find the formatter for HTML and replace the handler\ninitHTMLFormatter();\nfunction initHTMLFormatter()\n{\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="html"; i++);\n if (i<config.formatters.length) config.formatters[i].handler=function(w) {\n if (!this.lookaheadRegExp) // fixup for TW2.0.x\n this.lookaheadRegExp = new RegExp(this.lookahead,"mg");\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var html=lookaheadMatch[1];\n // optionally suppress wiki-style literal handling of newlines\n // strip any carriage returns added by Internet Explorer's textarea edit field\n // encode newlines as \sn so Internet Explorer's HTML parser won't eat them\n // encode macro brackets (<< and >>) so HTML parser won't eat them\n if (html.indexOf('<hide linebreaks>')!=-1) html=html.replace(regexpNewLine,' ');\n html=html.replace(regexpCarriageReturn,'');\n html=html.replace(regexpNewLine,'\s\sn');\n html=html.replace(/<</g,'%%(').replace(/>>/g,')%%');\n // create span to hold HTML\n // parse HTML and normalize the results\n // walk node tree and call wikify() on each text node\n var e = createTiddlyElement(w.output,"span");\n e.innerHTML=html;\n // REMOVED: e.normalize(); // THIS CAUSED INFINITE RECURSION IN SAFARI\n wikifyTextNodes(e);\n // advance to next parse position\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n}\n\n// wikify text nodes remaining after HTML content is processed (pre-order recursion)\nfunction wikifyTextNodes(theNode)\n{\n // textarea node doesn't get wikified, just decoded... \n if (theNode.nodeName.toLowerCase()=='textarea')\n theNode.value=theNode.value.replace(/\s%%\s(/g,'<<').replace(/\s)\s%%/g,'>>').replace(regexpBackSlashEn,'\sn');\n else for (var i=0;i<theNode.childNodes.length;i++) {\n var theChild=theNode.childNodes.item(i);\n if (theChild.nodeName.toLowerCase()=='option') continue;\n if (theChild.nodeName.toLowerCase()=='select') continue;\n wikifyTextNodes(theChild);\n if (theChild.nodeName=='#text') {\n var txt=theChild.nodeValue;\n // decode macro brackets and newlines\n txt=txt.replace(/\s%%\s(/g,'<<').replace(/\s)\s%%/g,'>>').replace(regexpBackSlashEn,'\sn');\n // replace text node with wikified() span\n var newNode=createTiddlyElement(null,"span");\n theNode.replaceChild(newNode,theChild);\n wikify(txt,newNode);\n }\n }\n}
Raechel Henderson \n~US2007101200\n~IL-017-D\nADST Costuming\n\n----\nFind roach on [[Live Journal|http://itsroach.livejournal.com/]], [[MySpace|http://myspace.com/idiorhythmic]] or [[Facebook|http://www.facebook.com/profile.php?id=546698062]].\n\nsend all complaints/compliments to:\n[img[edress|e-mail.png][mailto:roach@idiorhythmic.net]]
version.extensions.inlineJavascript= {major: 1, minor: 5, revision: 2, date: new Date(2006,10,16)};\n\n \n\nconfig.formatters.push( {\n\n name: "inlineJavascript",\n\n match: "\s\s<script",\n\n lookahead: "\s\s<script(?: src=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?(?: label=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?( show)?\s\s>((?:.|\s\sn)*?)\s\s</script\s\s>",\n\n \n\n handler: function(w) {\n\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n\n lookaheadRegExp.lastIndex = w.matchStart;\n\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n\n if (lookaheadMatch[1]) { // load a script library\n\n // make script tag, set src, add to body to execute, then remove for cleanup\n\n var script = document.createElement("script"); script.src = lookaheadMatch[1];\n\n document.body.appendChild(script); document.body.removeChild(script);\n\n }\n\n if (lookaheadMatch[4]) { // there is script code\n\n if (lookaheadMatch[3]) // show inline script code in tiddler output\n\n wikify("{{{\sn"+lookaheadMatch[0]+"\sn}}}\sn",w.output);\n\n if (lookaheadMatch[2]) { // create a link to an 'onclick' script\n\n // add a link, define click handler, save code in link (pass 'place'), set link attributes\n\n var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);\n\n link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}\n\n link.code="function _out(place){"+lookaheadMatch[4]+"\sn};_out(this);"\n\n link.setAttribute("href","javascript:;"); link.setAttribute("title",""); link.style.cursor="pointer";\n\n }\n\n else { // run inline script code\n\n var code="function _out(place){"+lookaheadMatch[4]+"\sn};_out(w.output);"\n\n code=code.replace(/document.write\s(/gi,'place.innerHTML+=(');\n\n try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }\n\n if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);\n\n }\n\n }\n\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n\n }\n\n }\n\n} )
// Ensure the Plugin is only installed once.\n//\nif (!version.extensions.IntelliTaggerPlugin) {\n\n// Ensure the global abego namespace is set up.\nif (!window.abego) window.abego = {};\nif (!abego.internal) abego.internal = {};\n\n// Opens an alert with the given string and throws an exception \n// with the same string after the alert is closed.\n//\nabego.alertAndThrow = function(s) {\n alert(s);\n throw s;\n};\n\nif (version.major < 2) {\n abego.alertAndThrow("Use TiddlyWiki 2.0.8 or better to run the IntelliTagger Plugin.");\n}\n\nversion.extensions.IntelliTaggerPlugin = {\n major: 1, minor: 0, revision: 0,\n date: new Date(2006, 3, 26),\n type: 'plugin',\n source: "http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin",\n documentation: "[[IntelliTaggerPlugin Documentation]]",\n sourcecode: "[[IntelliTaggerPlugin SourceCode]]",\n author: "Udo Borkowski (ub [at] abego-software [dot] de)",\n licence: "[[BSD open source license (abego Software)]]",\n tiddlywiki: "Version 2.0.8 or better",\n browser: "Firefox 1.5.0.2 or better"\n};\n\n// ========================================================================\n// Utilities ==============================================================\n// ========================================================================\n\n// ========================================================================\n// Popup \n// \n// A Popup is an HTML element floating on top of the main HTML page. \n// \n// The HTML element (typically a "div" element) is added as a direct child \n// of the document.body.\n//\n// A Popup element should respect the following style conventions:\n//\n// position = "absolute"; // required.\n// left = aDimension; // required. E.g. "10px"\n// // When not defined the Popup is not displayed.\n// top = aDimension; // required. E.g. "10px"\n// // When not defined the Popup is not displayed.\n// background = aColor; // optional. E.g. "white"\n// // When not defined the Popup is transparent.\n// border = aBorderSpec; // optional. E.g. "1px solid DarkGray"\n// width = aDimension; // optional. E.g. "200px"\n// // When not defined the width is calculated \n// // automatically.\n// height = aDimension; // optional. E.g. "200px"\n// // When not defined the height is calculated \n// // automatically.\n// ========================================================================\n\n\n\n// Returns true iff the given element is "opened as a popup", \n// i.e. a direct child of the document.body.\n//\n// @param element [may be null/undefined] \n// an HTML element\n//\nabego.isPopupOpen = function(element) {\n return element && element.parentNode == document.body;\n};\n\n// Opens the given element as a popup.\n// \n// @param element \n// an HTML element\n//\nabego.openAsPopup = function(element) {\n if (element.parentNode != document.body)\n document.body.appendChild(element);\n};\n\n\n// Closes the given popup.\n// Does nothing when the element is not a popup or not open.\n//\n// @param element [may be null/undefined] \n// an HTML element\n//\nabego.closePopup = function(element) {\n if (abego.isPopupOpen(element)) \n document.body.removeChild(element);\n};\n\n// Returns the rectangle of the (browser) window\n//\n// @return {left,top,height,width}\n// \nabego.getWindowRect = function() {\n return {\n left: findScrollX(),\n top: findScrollY(),\n height: findWindowHeight(),\n width: findWindowWidth()\n };\n};\n\n// Moves the given element to the given position (in pixel).\n//\nabego.moveElement = function(element, left, top) {\n element.style.left = left + "px";\n element.style.top = top + "px";\n};\n\n// Centers the given element on the window.\n//\n// The element must have absolute position\n// \nabego.centerOnWindow = function(element) {\n if (element.style.position != "absolute") \n throw "abego.centerOnWindow: element must have absolute position"; \n \n var winRect = abego.getWindowRect();\n\n abego.moveElement(\n element,\n winRect.left + (winRect.width - element.offsetWidth) / 2,\n winRect.top + (winRect.height - element.offsetHeight) / 2);\n};\n\n// Returns true if e is either self or a descendant (child, grandchild,...) of self.\n//\n// @param self DOM:Element\n// @param e DOM:Element [may be null]\n//\nabego.isDescendantOrSelf = function(self, e) {\n while (e) {\n if (self == e) return true;\n e = e.parentNode;\n }\n return false;\n};\n\n// Returns a set containing the items of the array. \n// \n// It is an object that has a property for every item of the array.\n// The name of the property is the "toString" representation of \n// the item. The value of the property is "true".\n//\n// Duplicate items are removed.\n//\nabego.toSet = function(array) {\n var result = {};\n for (var i = 0; i < array.length; i++)\n result[array[i]] = true;\n return result;\n};\n\n// Returns an array with all strings from strings that match the filterRE.\n//\n// @param maxCount [optional] if defined at most maxCount strings are returned.\nabego.filterStrings = function(strings, filterRE, maxCount) {\n var result =[];\n for (var i = 0; i < strings.length && (maxCount === undefined || result.length < maxCount); i++) {\n var s = strings[i];\n if (s.match(filterRE)) \n result.push(s);\n }\n return result;\n};\n\nabego.arraysAreEqual = function(a,b) {\n var n = a.length;\n if (n != b.length) \n return false;\n for (var i = 0; i < n; i++) \n if (a[i] != b[i])\n return false;\n return true;\n};\n\n// Adjusts the element's position to appear below the anchorElement, \n// and ensures the element fits into the window.\n//\nabego.moveBelowAndClip = function(element, anchorElement) {\n if (!anchorElement) \n return;\n \n // Position the result below the anchor and resize it if necessary.\n var anchorLeft = findPosX(anchorElement);\n var anchorTop = findPosY(anchorElement);\n var anchorHeight = anchorElement.offsetHeight;\n var elementLeft = anchorLeft;\n var elementTop = anchorTop + anchorHeight;\n\n // Make sure the result is not wider than the window\n var winWidth = findWindowWidth();\n if (winWidth < element.offsetWidth) {\n element.style.width = (winWidth - 100)+"px";\n }\n\n // Ensure that the left and right of the result are not\n // clipped by the window. Move it to the left or right, if necessary. \n var elementWidth = element.offsetWidth;\n if(elementLeft + elementWidth > winWidth)\n elementLeft = winWidth - elementWidth-30;\n if (elementLeft < 0) \n elementLeft = 0;\n \n // Do the actual moving\n element.style.left = elementLeft + "px";\n element.style.top = elementTop + "px";\n element.style.display = "block";\n};\n\nabego.compareStrings = function(a, b) {\n return (a == b) ? 0 : (a < b) ? -1 : 1;\n};\n\n// Sorts the given array alphabetically, ignoring the case.\n//\nabego.sortIgnoreCase = function(arr) {\n var result =[];\n \n // To avoid toLowerCase to be called twice for every comparison\n // we convert the strings once and sort the lowercase.\n // After sorting we replace them with the cased ones.\n //\n // Benchmarks have shown that this is significantly faster \n // than the ad hoc solution, even for small arrays \n // (like 5 Strings (10 chars each))\n \n var n = arr.length;\n for (var i = 0; i < n; i++) {\n var s = arr[i];\n result.push([s.toString().toLowerCase(),s]);\n }\n result.sort(function(a,b) {\n return (a[0] == b[0]) ? 0 : (a[0] < b[0]) ? -1 : 1;\n });\n \n for (i = 0; i < n; i++) \n arr[i] = result[i][1];\n};\n\n// Returns the specified field (input or textarea element), otherwise the first edit field it finds \n// or null if it found no edit field at all\n//\nabego.getTiddlerField = function(story,title,field) {\n var tiddler = document.getElementById(story.idPrefix + title);\n var e = null;\n if (tiddler != null) {\n var children = tiddler.getElementsByTagName("*");\n for (var t=0; t<children.length; t++) {\n var c = children[t];\n if(c.tagName.toLowerCase() == "input" || c.tagName.toLowerCase() == "textarea") {\n if(!e)\n e = c;\n if(c.getAttribute("edit") == field)\n e = c;\n // break; // adding this break would not be 100% compatible to <= TW 2.0.9. when a \n }\n }\n }\n return e;\n};\n\nabego.setRange = function(element, start, end) {\n// adapted from TaskMacroPlugin by LukeBlanshard. \n// http://labwiki.sourceforge.net/#CopyrightAndLicense.\n if (element.setSelectionRange) { // Mozilla\n element.setSelectionRange(start, end);\n // Damn mozilla doesn't scroll to visible. Approximate.\n var max = 0.0 + element.scrollHeight;\n var len = element.textLength;\n var top = max*start/len, bot = max*end/len;\n element.scrollTop = Math.min(top, (bot+top-element.clientHeight)/2);\n } else if (element.createTextRange != undefined) { // IE\n var range = element.createTextRange();\n range.collapse();\n range.moveEnd("character", end);\n range.moveStart("character", start);\n range.select();\n } else // Other? Too bad, just select the whole thing.\n element.select();\n};\n \n \n// TiddlerSet: an object with one property per tiddler in the set. \n// The name of the property corresponds to the tiddler name, \n// the value is "not false" (e.g. true or a non-zero number).\n//\n// TagMap<X>: an object that maps a tag to an object of type X (access through properties)\n//\nabego.internal.TagManager = function() {\n var tagReferences = null; // TagMap<{count: natural, tiddlers: TiddlerSet}>\n\n var ensureTagsAreLoaded = function() {\n if (tagReferences)\n return;\n \n tagReferences = {};\n store.forEachTiddler(function(title,tiddler) {\n for(var i=0; i<tiddler.tags.length; i++) {\n var tag = tiddler.tags[i];\n var refedBy = tagReferences[tag];\n if (!refedBy) {\n refedBy = tagReferences[tag] = {count:0, tiddlers: {}};\n }\n refedBy.tiddlers[tiddler.title] = true;\n refedBy.count += 1;\n }\n });\n };\n \n // When any tags are changed reset the TagManager.\n // \n var oldTiddlyWikiSaveTiddler = TiddlyWiki.prototype.saveTiddler;\n TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n var tiddler = this.fetchTiddler(title);\n var oldTags = tiddler ? tiddler.tags : [];\n var newTags = (typeof tags == "string") ? tags.readBracketedList() : tags;\n\n oldTiddlyWikiSaveTiddler.apply(this, arguments);\n \n if (!abego.arraysAreEqual(oldTags, newTags))\n abego.internal.getTagManager().reset();\n };\n\n // When a tiddler is removed that had tags reset the TagManager.\n //\n var oldTiddlyWikiRemoveTiddler = TiddlyWiki.prototype.removeTiddler;\n TiddlyWiki.prototype.removeTiddler = function(title) {\n var tiddler = this.fetchTiddler(title);\n var resetTagManager = tiddler && tiddler.tags.length > 0;\n \n oldTiddlyWikiRemoveTiddler.apply(this, arguments);\n \n if (resetTagManager) \n abego.internal.getTagManager().reset();\n };\n\n // Resets the TagManager, thus ensures that cached tagging \n // information is discarded and the most recent tag state is used.\n // \n this.reset = function () {\n tagReferences = null;\n };\n \n \n // Returns a TiddlerSet with all tiddlers that have the given tag, \n // or null when the tag is not used in any tiddler.\n //\n // @return [may be null]\n //\n this.getTiddlersWithTag = function(tag) {\n ensureTagsAreLoaded();\n\n var tagInfo = tagReferences[tag];\n return tagInfo ? tagInfo.tiddlers : null;\n };\n \n // Returns an array with the names of all tags defined \n // plus the (optional) extraTags. \n //\n // The tags are sorted alphabetically (caseinsensitive).\n //\n // @params [optional] an array of tags to be added to the list\n //\n //\n this.getAllTags = function(extraTags) {\n ensureTagsAreLoaded();\n \n var result =[];\n for (var i in tagReferences) \n result.push(i);\n \n for (i = 0; extraTags && i < extraTags.length; i++) \n result.pushUnique(extraTags[i], true);\n \n abego.sortIgnoreCase(result);\n \n return result;\n };\n \n // An array with two items per tag\n // result[i][0] : the tag name\n // result[i][1] : TiddlerSet, with tiddlers that are tagged with that tag\n // \n this.getTagInfos = function() {\n ensureTagsAreLoaded();\n \n var result = [];\n for (var tiddler in tagReferences) {\n result.push([tiddler, tagReferences[tiddler]]);\n }\n return result;\n };\n \n var compareTiddlerCountAndTagName = function(a,b) {\n var a1 = a[1];\n var b1 = b[1];\n var d = b[1].count - a[1].count;\n return d != 0 ? d : abego.compareStrings(a[0].toLowerCase(), b[0].toLowerCase());\n };\n \n this.getSortedTagInfos = function() {\n ensureTagsAreLoaded();\n\n var result = this.getTagInfos();\n \n result.sort(compareTiddlerCountAndTagName);\n \n return result;\n };\n \n // @return an array of the tags that "partner" the activeTags,\n // sorted by the number of conjoint occurances.\n //\n this.getPartnerRankedTags = function(activeTags) {\n var partnerTagCounts = {};\n for (var i = 0; i < activeTags.length; i++) {\n var tiddlersWithTag = this.getTiddlersWithTag(activeTags[i]);\n for (var name in tiddlersWithTag) {\n var tiddler = store.getTiddler(name);\n // It may happen that a tiddler is "gone" in the meantime\n if (!(tiddler instanceof Tiddler)) \n continue;\n \n for(var j=0; j<tiddler.tags.length; j++) {\n var tag = tiddler.tags[j];\n var c = partnerTagCounts[tag];\n partnerTagCounts[tag] = c ? c+1 : 1;\n }\n }\n }\n var currentTagSet = abego.toSet(activeTags);\n var result = [];\n for (var n in partnerTagCounts) {\n if (!currentTagSet[n])\n result.push(n);\n }\n // Sort the tags by their partner tag count, then alphabetically\n result.sort(function (a,b) {\n var d = partnerTagCounts[b] - partnerTagCounts[a];\n return d != 0 ? d : abego.compareStrings(a.toLowerCase(), b.toLowerCase());\n });\n\n return result;\n };\n}; // of abego.internal.TagManager\n\nabego.internal.getTagManager = function() {\n if (!abego.internal.gTagManager) abego.internal.gTagManager = new abego.internal.TagManager();\n return abego.internal.gTagManager;\n};\n\n// ========================================================================\n// IntelliTagger ==========================================================\n// ========================================================================\n\n\n(function(){\n var PADDING = 2;\n var BORDERWIDTH = 1;\n var MAX_FAVORITE_TAGS = 30;\n\n var fSuggestionPopup; // DOM:Element\n var fAnchorElement; // DOM:Element\n var fOnTagSelected; // function(e) {...}\n var fSuggestedTags; // [Tag]\n var fActiveTagSet; // TagSet\n var fFavoriteTags; // array of Tags, [optional]\n \n if (!abego.IntelliTagger) abego.IntelliTagger = {};\n\n var getAnchorElement = function() {\n return fAnchorElement;\n };\n \n var isCurrentTag = function(tag) {\n return fActiveTagSet[tag];\n };\n \n var removeLastWord = function(s) {\n var i = s.lastIndexOf(" ");\n return (i >= 0) ? s.substr(0,i) : "";\n };\n \n var lastWordIsFilter = function(inputField) {\n var s = inputField.value;\n var len = s.length; \n return (len > 0 && s[len-1] != ' ');\n };\n\n var ensureFieldEndsWithSpace = function(field) {\n var s = field.value;\n var len = s.length;\n if (len > 0 && s[len-1] != ' ') {\n field.value += ' ';\n }\n };\n \n var updateTag = function(tag, inputField, tiddler) {\n if (lastWordIsFilter(inputField)) \n inputField.value = removeLastWord(inputField.value);\n \n story.setTiddlerTag (tiddler.title,tag,0);\n ensureFieldEndsWithSpace(inputField);\n \n abego.IntelliTagger.assistTagging(inputField, tiddler);\n };\n \n // returns the n-th suggestion, first counting the favorites, then the normal suggestions\n //\n // @param n zero-based.\n // @return [may be null]\n var getNthSuggestion = function(n) {\n if (fFavoriteTags) {\n if (fFavoriteTags.length > n)\n return fFavoriteTags[n];\n \n n -= fFavoriteTags.length;\n }\n \n return (fSuggestedTags && fSuggestedTags.length > n)\n ? fSuggestedTags[n] \n : null;\n };\n\n var useNthSuggestion = function(n, inputField, tiddler) {\n var suggestion = getNthSuggestion(n);\n if (suggestion)\n updateTag(suggestion, inputField, tiddler);\n };\n\n\n var getFilter = function(inputField) {\n var pos = inputField.value.lastIndexOf(" ");\n var filter = (pos >= 0) ? inputField.value.substr(++pos,inputField.value.length) : inputField.value;\n return new RegExp(filter.escapeRegExp(),"i");\n };\n\n\n var countExpectedTags = function(tags, expectedTagsAsProperties) {\n var result = 0;\n for (var i = 0; i<tags.length;i++) \n if (expectedTagsAsProperties[tags[i]])\n result++;\n return result;\n };\n \n // Returns the number tags that have the same count of tiddlers\n // as the index-th tagInfo. \n // \n // The index-th tag is included in the returned number.\n // \n // @param sortedTagInfo Array of TagInfos, sorted by count of tiddlers.\n //\n var getNumberOfTagsWithSameCount = function(sortedTagInfos, index, filterRE) {\n var result = 1;\n var c = sortedTagInfos[index];\n for (var i = index+1; i < sortedTagInfos.length; i++) \n if (sortedTagInfos[i][1].count == c) {\n if (sortedTagInfos[i][0].match(filterRE))\n result++;\n } else\n break;\n return result;\n };\n \n var getInitialTagSuggestions = function(filterRE, maxCount) {\n var tagInfos = abego.internal.getTagManager().getSortedTagInfos();\n var result =[];\n var lastCount = 0;\n for (var i = 0; i < tagInfos.length; i++) {\n var c = tagInfos[i][1].count;\n \n // Stop adding tags to the result if not all tags with that count of tiddlers would fit into the result.\n if (c != lastCount) {\n if (maxCount && (result.length + getNumberOfTagsWithSameCount(tagInfos, i, filterRE) > maxCount)) \n break;\n lastCount = c;\n }\n // Don't add tags that are only used in one tiddler.\n if (c == 1) \n break;\n var s = tagInfos[i][0];\n if (s.match(filterRE))\n result.push(s);\n }\n return result;\n };\n \n var getAllFilteredTags = function(filterRE, extraTags) {\n return abego.filterStrings(\n abego.internal.getTagManager().getAllTags(extraTags),\n filterRE);\n };\n\n // Refreshes the tagSuggestions window\n //\n var refreshPopup = function() {\n if (!fSuggestionPopup) \n return;\n \n // Load the template for the YourSearchResult\n var html = store.getTiddlerText("IntelliTaggerMainTemplate");\n if (!html) \n html = "<b>Tiddler IntelliTaggerMainTemplate not found</b>";\n fSuggestionPopup.innerHTML = html;\n \n // Expand the template macros etc.\n applyHtmlMacros(fSuggestionPopup,null);\n refreshElements(fSuggestionPopup,null);\n };\n \n var onTagClicked = function(e) { \n if (!e) var e = window.event;\n var tag = this.getAttribute("tag");\n if (fOnTagSelected)\n fOnTagSelected.call(this,tag, e);\n \n return false;\n };\n \n var appendTags = function(place, tags, suggestionIndex, excludeTags) {\n if (!tags)\n return;\n \n var excludeTagSet = excludeTags ? abego.toSet(excludeTags) : {};\n var n = tags.length;\n for (var i = 0; i < n; i++) {\n var tag = tags[i];\n if (excludeTagSet[tag])\n continue;\n \n if (i > 0) \n createTiddlyElement(place,"span",null,"tagSeparator", " | ");\n \n var shortcutText = "";\n var placeForButton = place;\n if (suggestionIndex < 10) {\n // create a wrapping span that ensures the number and the text are not linebreaked.\n placeForButton = createTiddlyElement(place,"span",null,"numberedSuggestion");\n \n suggestionIndex++;\n var key = suggestionIndex < 10 ? ""+(suggestionIndex) : "0";\n createTiddlyElement(placeForButton,"span",null,"suggestionNumber", key+") ");\n var fastKeyText = suggestionIndex == 1 ? "Ctrl-Space or " : "";\n shortcutText = " (Shortcut: %1Alt-%0)".format([key, fastKeyText]);\n }\n\n var shiftClickToolTip = config.views.wikified.tag.tooltip.format([tag]);\n var normalClickToolTip = (isCurrentTag(tag) ? "Remove tag '%0'%1" : "Add tag '%0'%1").format([tag,shortcutText]);\n var tooltip = "%0; Shift-Click: %1".format([normalClickToolTip, shiftClickToolTip]);\n var btn = createTiddlyButton(\n placeForButton,\n tag,\n tooltip, \n onTagClicked, \n isCurrentTag(tag) ? "currentTag" : null);\n btn.setAttribute("tag",tag);\n }\n };\n \n var scrollVisible = function() {\n // Scroll the window to make the fSuggestionPopup page (and the anchorElement) visible.\n if (fSuggestionPopup) window.scrollTo(0,ensureVisible(fSuggestionPopup));\n if (getAnchorElement()) window.scrollTo(0,ensureVisible(getAnchorElement()));\n };\n\n // Close the suggestions window when the user clicks on the document\n // (and not into the getAnchorElement or in the suggestions window)\n //\n var onDocumentClick = function(e) {\n if (!e) var e = window.event;\n if (!fSuggestionPopup) \n return;\n \n var target = resolveTarget(e);\n if (target == getAnchorElement()) return; \n if (abego.isDescendantOrSelf(fSuggestionPopup, target)) return; \n \n abego.IntelliTagger.close();\n };\n addEvent(document,"click",onDocumentClick);\n \n // We added a space to the tags edit field. To avoid that the \n // tiddler is marked as "changed" just because of that we trim\n // the field value\n //\n var oldGatherSaveFields = Story.prototype.gatherSaveFields;\n Story.prototype.gatherSaveFields = function(e,fields) {\n oldGatherSaveFields.apply(this, arguments);\n var tags = fields.tags;\n if (tags) \n fields.tags = tags.trim();\n };\n \n\n var focusTagsField = function(title) {\n story.focusTiddler(title,"tags");\n var tags = abego.getTiddlerField(story, title, "tags");\n if (tags) {\n var len = tags.value.length;\n abego.setRange(tags, len, len);\n window.scrollTo(0,ensureVisible(tags));\n }\n };\n \n\n // Attach the assistTagging to the "tags" edit field.\n //\n var oldEditHandler = config.macros.edit.handler;\n config.macros.edit.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n oldEditHandler.apply(this, arguments);\n var field = params[0];\n if((tiddler instanceof Tiddler) && field == "tags") {\n // Just added the "edit tags" field. \n // Attach it to the "Tag Suggestions" feature.\n var inputField = place.lastChild;\n inputField.onfocus = function(e) {\n abego.IntelliTagger.assistTagging(inputField, tiddler);\n setTimeout(\n function() {\n focusTagsField(tiddler.title);\n }, 100);\n\n };\n inputField.onkeyup = function(e) {\n if (!e) var e = window.event;\n if (e.altKey && !e.ctrlKey && !e.metaKey && (e.keyCode >= 48 && e.keyCode <= 57)) {\n useNthSuggestion(e.keyCode == 48 ? 9 : e.keyCode-49, inputField, tiddler);\n } else if (e.ctrlKey && e.keyCode == 32) {\n useNthSuggestion(0, inputField, tiddler);\n }\n \n setTimeout(\n function() {\n abego.IntelliTagger.assistTagging(inputField, tiddler);\n }, 100);\n return false;\n };\n \n // ensure that the tags text ends with a space \n // (otherwise the last word is used as a filter when the field gets the focus)\n ensureFieldEndsWithSpace(inputField);\n }\n };\n \n var onEditTags = function(e) {\n if (!e) var e = window.event;\n var target = resolveTarget(e);\n \n var title = target.getAttribute("tiddler");\n if (title) {\n story.displayTiddler(target,title,"IntelliTaggerEditTagsTemplate", false);\n focusTagsField(title);\n }\n return false;\n };\n \n // Add an "[edit]" button to the "tags" field that is displayed with the tiddler in the ViewTemplate.\n // Pressing the button allows editing the tags only, with the text still being displayed in wikified form.\n //\n var oldTagsHandler = config.macros.tags.handler;\n config.macros.tags.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n oldTagsHandler.apply(this, arguments);\n\n abego.IntelliTagger.createEditTagsButton(tiddler, createTiddlyElement(place.lastChild,"li"));\n };\n \n // close the Suggestion Window when the tiddler is no longer edited\n // (i.e. the tag edit inputfield is gone.)\n // \n // (Note: we must poll this condition since onblur on the input field \n // cannot be used since every click into the suggestion window results\n // in a lost focus/blur)\n //\n var closeIfAnchorElementIsHidden = function() {\n if (fSuggestionPopup && fAnchorElement && !abego.isDescendantOrSelf(document, fAnchorElement)) \n abego.IntelliTagger.close();\n };\n setInterval(closeIfAnchorElementIsHidden, 100);\n \n//----------------------------------------------------------------------------\n// The public API\n//----------------------------------------------------------------------------\n \n // @param suggestedTags \n // array of strings representing the tags to be suggested.\n //\n // @param activeTags \n // array of strings representing the tags currently "active".\n //\n // @param favoriteTags [optional] \n // a subset of the suggested tags that are "favorites". \n // I.e. They should be presented first etc.\n //\n // @param anchorElement [optional]\n // when defined the suggestions are displayed "close" to the anchorElement. \n // The page is scrolled to make the anchorElement visible.\n // When the anchorElement is not defined the suggestions are displayed in the\n // center of the window.\n //\n // @param onTagSelected [optional]\n // function(tag, e) to be called when a tag is selected.\n //\n abego.IntelliTagger.displayTagSuggestions = function(suggestedTags, activeTags, favoriteTags, anchorElement, onTagSelected) {\n fSuggestedTags = suggestedTags;\n fActiveTagSet = abego.toSet(activeTags);\n fFavoriteTags = favoriteTags;\n fAnchorElement = anchorElement;\n fOnTagSelected = onTagSelected;\n \n if (!fSuggestionPopup) {\n fSuggestionPopup = createTiddlyElement(document.body,"div",null,"intelliTaggerSuggestions");\n fSuggestionPopup.style.position = "absolute";\n }\n \n refreshPopup();\n abego.openAsPopup(fSuggestionPopup);\n \n if (getAnchorElement()) {\n var w = getAnchorElement().offsetWidth;\n if (fSuggestionPopup.offsetWidth < w) {\n fSuggestionPopup.style.width = (w-2*(PADDING+BORDERWIDTH)) + "px";\n }\n abego.moveBelowAndClip(fSuggestionPopup, getAnchorElement());\n } else {\n abego.centerOnWindow(fSuggestionPopup);\n }\n\n scrollVisible();\n };\n \n // Shows the Tag Suggestion Popup for the given tiddler, below the specified inputField.\n //\n abego.IntelliTagger.assistTagging = function(inputField, tiddler) {\n var filterRE = getFilter(inputField);\n var s = inputField.value;\n if (lastWordIsFilter(inputField)) \n s = removeLastWord(s);\n var activeTags = s.readBracketedList();\n var favoriteTags = activeTags.length > 0 \n ? abego.filterStrings(abego.internal.getTagManager().getPartnerRankedTags(activeTags), filterRE, MAX_FAVORITE_TAGS)\n : getInitialTagSuggestions(filterRE, MAX_FAVORITE_TAGS);\n abego.IntelliTagger.displayTagSuggestions(\n getAllFilteredTags(filterRE,activeTags), \n activeTags,\n favoriteTags, \n inputField,\n function(tag, e) {\n if (e.shiftKey) {\n onClickTag.call(this,e);\n } else\n updateTag(tag, inputField, tiddler);\n });\n };\n \n // Closes the Tag Suggestions Popup\n //\n abego.IntelliTagger.close = function() {\n abego.closePopup(fSuggestionPopup);\n fSuggestionPopup = null;\n return false;\n };\n\n // Creates an TiddlyButton at the given place to edit the tags of the given tiddler.\n //\n abego.IntelliTagger.createEditTagsButton = function(tiddler, place, text, tooltip, className, id, accessKey) {\n if (!text) text = "[edit]";\n if (!tooltip) tooltip = "Edit the tags";\n if (!className) className = "editTags";\n \n var editButton = createTiddlyButton(place,text,tooltip, onEditTags, className, id, accessKey);\n editButton.setAttribute("tiddler", (tiddler instanceof Tiddler) ? tiddler.title : String(tiddler));\n \n return editButton;\n };\n\n \n//----------------------------------------------------------------------------\n// Macros\n//----------------------------------------------------------------------------\n\n// ====Macro intelliTagger ================================================\n\n config.macros.intelliTagger = {\n // Standard Properties\n label: "intelliTagger",\n\n handler : function(place,macroName,params,wikifier,paramString,tiddler) {\n var namesAndValues = paramString.parseParams("list",null, true);\n var actions = namesAndValues[0]["action"];\n for (var i = 0; actions && i < actions.length; i++) {\n var actionName = actions[i];\n var action = config.macros.intelliTagger.subhandlers[actionName];\n \n if (!action) \n abego.alertAndThrow("Unsupported action '%0'".format([actionName]));\n \n action(place,macroName,params,wikifier,paramString,tiddler);\n }\n },\n \n subhandlers: {\n \n showTags : function(place,macroName,params,wikifier,paramString,tiddler) {\n appendTags(place, fSuggestedTags, fFavoriteTags ? fFavoriteTags.length : 0, fFavoriteTags);\n },\n \n showFavorites : function(place,macroName,params,wikifier,paramString,tiddler) {\n appendTags(place, fFavoriteTags, 0);\n },\n \n closeButton : function(place,macroName,params,wikifier,paramString,tiddler) {\n var button = createTiddlyButton(place, "close", "Close the suggestions", abego.IntelliTagger.close);\n },\n\n version : function(place) {\n var t = "IntelliTagger %0.%1.%2".format(\n [version.extensions.IntelliTaggerPlugin.major, \n version.extensions.IntelliTaggerPlugin.minor, \n version.extensions.IntelliTaggerPlugin.revision]);\n var e = createTiddlyElement(place, "a");\n e.setAttribute("href", "http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin");\n e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">'+t+'<font>';\n },\n\n copyright : function(place) {\n var e = createTiddlyElement(place, "a");\n e.setAttribute("href", "http://tiddlywiki.abego-software.de");\n e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">&copy; 2006 <b><font color="red">abego</font></b> Software<font>';\n }\n }\n };\n \n})();\n\n\nconfig.shadowTiddlers["IntelliTaggerStyleSheet"] = \n "/***\sn"+\n "!~IntelliTagger Stylesheet\sn"+\n "***/\sn"+\n "/*{{{*/\sn"+\n ".intelliTaggerSuggestions {\sn"+\n "\stposition: absolute;\sn"+\n "\stwidth: 600px;\sn"+\n "\sn"+\n "\stpadding: 2px;\sn"+\n "\stlist-style: none;\sn"+\n "\stmargin: 0;\sn"+\n "\sn"+\n "\stbackground: #eeeeee;\sn"+\n "\stborder: 1px solid DarkGray;\sn"+\n "}\sn"+\n "\sn"+\n ".intelliTaggerSuggestions .currentTag {\sn"+\n "\stfont-weight: bold;\sn"+\n "}\sn"+\n "\sn"+\n ".intelliTaggerSuggestions .suggestionNumber {\sn"+\n "\stcolor: #808080;\sn"+\n "}\sn"+\n "\sn"+\n ".intelliTaggerSuggestions .numberedSuggestion{\sn"+\n "\stwhite-space: nowrap;\sn"+\n "}\sn"+\n "\sn"+\n ".intelliTaggerSuggestions .intelliTaggerFooter {\sn"+\n "\stmargin-top: 4px;\sn"+\n "\stborder-top-width: thin;\sn"+\n "\stborder-top-style: solid;\sn"+\n "\stborder-top-color: #999999;\sn"+\n "}\sn"+\n ".intelliTaggerSuggestions .favorites {\sn"+\n "\stborder-bottom-width: thin;\sn"+\n "\stborder-bottom-style: solid;\sn"+\n "\stborder-bottom-color: #999999;\sn"+\n "\stpadding-bottom: 2px;\sn"+\n "}\sn"+\n "\sn"+\n ".intelliTaggerSuggestions .normalTags {\sn"+\n "\stpadding-top: 2px;\sn"+\n "}\sn"+\n "\sn"+\n ".intelliTaggerSuggestions .intelliTaggerFooter .button {\sn"+\n "\stfont-size: 10px;\sn"+\n "\sn"+\n "\stpadding-left: 0.3em;\sn"+\n "\stpadding-right: 0.3em;\sn"+\n "}\sn"+\n "\sn"+\n "/*}}}*/\sn";\n \nconfig.shadowTiddlers["IntelliTaggerMainTemplate"] = \n "<!--\sn"+\n "{{{\sn"+\n "-->\sn"+\n "<div class=\s"favorites\s" macro=\s"intelliTagger action: showFavorites\s"></div>\sn"+\n "<div class=\s"normalTags\s" macro=\s"intelliTagger action: showTags\s"></div>\sn"+\n "<!-- The Footer (with the Navigation) ============================================ -->\sn"+\n "<table class=\s"intelliTaggerFooter\s" border=\s"0\s" width=\s"100%\s" cellspacing=\s"0\s" cellpadding=\s"0\s"><tbody>\sn"+\n " <tr>\sn"+\n "\st<td align=\s"left\s">\sn"+\n "\st\st<span macro=\s"intelliTagger action: closeButton\s"></span>\sn"+\n "\st</td>\sn"+\n "\st<td align=\s"right\s">\sn"+\n "\st\st<span macro=\s"intelliTagger action: version\s"></span>, <span macro=\s"intelliTagger action: copyright \s"></span>\sn"+\n "\st</td>\sn"+\n " </tr>\sn"+\n "</tbody></table>\sn"+\n "<!--\sn"+\n "}}}\sn"+\n "-->\sn";\n \nconfig.shadowTiddlers["IntelliTaggerEditTagsTemplate"] = \n "<!--\sn"+\n "{{{\sn"+\n "-->\sn"+\n "<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\sn"+\n "<div class='title' macro='view title'></div>\sn"+\n "<div class='tagged' macro='tags'></div>\sn"+\n "<div class='viewer' macro='view text wikified'></div>\sn"+\n "<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\sn"+\n "<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\sn"+\n "<!--\sn"+\n "}}}\sn"+\n "-->\sn"; \n \nconfig.shadowTiddlers["BSD open source license (abego Software)"] = "See [[Licence|http://tiddlywiki.abego-software.de/#%5B%5BBSD%20open%20source%20license%5D%5D]].";\nconfig.shadowTiddlers["IntelliTaggerPlugin Documentation"] = "[[Documentation on abego Software website|http://tiddlywiki.abego-software.de/doc/IntelliTagger.pdf]].";\nconfig.shadowTiddlers["IntelliTaggerPlugin SourceCode"] = "[[Plugin source code on abego Software website|http://tiddlywiki.abego-software.de/src/Plugin-IntelliTagger-src.js]]";\n \nsetStylesheet(store.getTiddlerText("IntelliTaggerStyleSheet"),"intelliTagger");\n\n} // of single install\n\n// Used Globals (for JSLint) ==============\n// ... JavaScript Core\n/*global alert, document, setTimeout, setInterval */\n// ... TiddlyWiki Core\n/*global Story, Tiddler, TiddlyWiki, addEvent, applyHtmlMacros, createTiddlyButton, createTiddlyElement, ensureVisible, findPosX, findPosY, findScrollX, findScrollY, findWindowHeight, findWindowWidth, onClickTag, refreshElements, resolveTarget, story */\n
Welcome to the website of Raechel Henderson. This is a small sampling of the clothing and costumes I've made for myself and others. \n\nClick on the links in the sidebar to the far right to see some of my work.\n\nI will be adding more pictures in the future, so check back often. Interested in having me make your own costume? Drop me an e-mail at [[mailto:roach@idiorhythmic.net|roach@idiorhythmic.net]] for a quote.
<!--{{{-->\n<div class='header'>\n <div class='headerShadow'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\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>\n<div id='ContentWrapper'>\n <div id='MenuWrapper'>\n <div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n <div id='InfoBar' refresh='content' tiddler='InfoBar'></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>\n <div id='siteFooter' refresh='content' tiddler='siteFooter'></div>\n</div>\n<!--}}}-->
<<plugins>>
[>img[Purple Velvet Dress|purplevelvet-small.jpg][purplevelvet.jpg]]This dress was made for GLRE 2008 for my friend's Changeling character. It's from Simplicity pattern number 4940. The material is crushed purple velvet with a purple satin lining for the sleeves. I added the collar to the dress but we decided it didn't really work and removed it. The corset is one of mine.\n\nClick on the picture for a larger view.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
[>img[Sam's Red Bustle|bustleforsam-small.jpg][bustleforsam.jpg]]I made this bustle/skirt tail for Sam, player of [[Alisa Sutherland|http://il017d.cam-wiki.org/index.php/Alisa_Sutherland]] for [[ChiKalb 2008|http://www.barbcityil017d.com/barbcity_specialevents.htm]]. The theme was steampunk. \n\nI used the Butterick 3737 pattern as a base for this bustle. The first layer is a standard diameter flounce, the second layer was a larger sized flounce, the third layer was a rectangular piece pleated and then draped. The final, bottom layer, is just a rectangular piece. I used an old bridesmaid dress for the fabric and trimmed the waistband and hem with embroidered trim. The bustle attaches by ties around the waist. The flounces were edged finished with a five thread overlock stitch in black. \n\n[<img[Butterick 3737 bustle|bustle-small.png][bustle.jpg]] The best part of this piece is that it went together super easy.\n\nClick on the picture for a larger view.\n\n\n\n\n\n\n\n\n\n\n
[>img[Shift|shift-small.jpg][shift.jpg]]A simple shift made for Lisa, player of [[Roselynn Ray|http://www.lanceasanctum.org/Sister_Roselynn_Annette_Ray]], for ICC. This was made from white muslin without a pattern, just measurements. The wrists and neck were elasticized. \n\nClick on the picture for a larger view.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Custom, Vintage & Couture Styles\nfor All Eras, Ages and Tastes
roach @ idiorhythmic.net\n
/*{{{*/\nbody {\n background: [[ColorPalette::Background]]; \n color: [[ColorPalette::Foreground]];\n}\n\na{\n color: [[ColorPalette::SecondaryDark]];\n}\n\na:hover{\n background: [[ColorPalette::PrimaryMid]];\n color: [[ColorPalette::Background]];\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n color: [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::PrimaryPale]];\n}\n\n.button {\n color: [[ColorPalette::PrimaryDark]];\n border: 1px solid [[ColorPalette::Background]];\n}\n\n.button:hover {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::SecondaryLight]];\n border-color: [[ColorPalette::SecondaryMid]];\n}\n\n.button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::SecondaryDark]];\n}\n\n.header {\n background: [[ColorPalette::PrimaryMid]];\n}\n\n.headerShadow {\n color: [[ColorPalette::Foreground]];\n}\n\n.headerShadow a {\n font-weight: normal;\n color: [[ColorPalette::Foreground]];\n}\n\n.headerForeground {\n color: [[ColorPalette::Background]];\n}\n\n.headerForeground a {\n font-weight: normal;\n color: [[ColorPalette::PrimaryPale]];\n}\n\n.tabSelected{\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border-left: 1px solid [[ColorPalette::TertiaryLight]];\n border-top: 1px solid [[ColorPalette::TertiaryLight]];\n border-right: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabUnselected {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryMid]];\n}\n\n.tabContents {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabContents .button {\n border: 0;}\n\n#sidebar {\n}\n\n#sidebarOptions input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel {\n background: [[ColorPalette::PrimaryPale]];\n}\n\n#sidebarOptions .sliderPanel a {\n border: none;\n color: [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: [[ColorPalette::PrimaryMid]];\n background: [[ColorPalette::Background]];\n}\n\n.wizard {\n background: [[ColorPalette::SecondaryLight]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard h1 {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.wizard h2 {\n color: [[ColorPalette::Foreground]];\n}\n\n.wizardStep {\n background: [[ColorPalette::Background]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-bottom: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard .button {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:hover {\n color: [[ColorPalette::PrimaryLight]];\n background: [[ColorPalette::PrimaryDark]];\n border-color: [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n#messageArea {\n border: 1px solid [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::SecondaryLight]];\n color: [[ColorPalette::PrimaryDark]];\n}\n\n#messageArea .button {\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::Background]];\n}\n\n.popup {\n background: [[ColorPalette::PrimaryLight]];\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.popup hr {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::PrimaryDark]];\n border-bottom: 1px;\n}\n\n.popup li.disabled {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.popup li a, .popup li a:visited {\n color: [[ColorPalette::TertiaryPale]];\n border: none;\n}\n\n.popup li a:hover {\n background: [[ColorPalette::PrimaryDark]];\n color: [[ColorPalette::Background]];\n border: none;\n}\n\n.tiddler .defaultCommand {\n font-weight: bold;\n}\n\n.shadow .title {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.title {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.subtitle {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.toolbar {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.tagging, .tagged {\n border: 1px solid [[ColorPalette::TertiaryPale]];\n background-color: [[ColorPalette::TertiaryPale]];\n}\n\n.selected .tagging, .selected .tagged {\n background-color: [[ColorPalette::TertiaryLight]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: [[ColorPalette::PrimaryDark]];\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.footer {\n color: [[ColorPalette::TertiaryLight]];\n}\n\n.selected .footer {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n.sparkline {\n background: [[ColorPalette::PrimaryPale]];\n border: 0;\n}\n\n.sparktick {\n background: [[ColorPalette::PrimaryDark]];\n}\n\n.error, .errorButton {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::Error]];\n}\n\n.warning {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.cascade {\n background: [[ColorPalette::TertiaryPale]];\n color: [[ColorPalette::TertiaryMid]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.imageLink, #displayArea .imageLink {\n background: transparent;\n}\n\n.viewer .listTitle {list-style-type: none; margin-left: -2em;}\n\n.viewer .button {\n border: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.viewer blockquote {\n border-left: 3px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer table {\n border: 2px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer th, thead td {\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::Background]];\n}\n\n.viewer td, .viewer tr {\n border: 1px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer pre {\n border: 1px solid [[ColorPalette::SecondaryLight]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.viewer code {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.highlight, .marked {\n background: [[ColorPalette::SecondaryLight]];\n}\n\n.editor input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.editor textarea {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n width: 100%;\n}\n\n.editorFooter {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n#siteFooter {\n background: [[ColorPalette::PrimaryPale]];\n}\n\n#InfoBar {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n#mainMenu {\n background: [[ColorPalette::SecondaryPale]];\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n\n/*}}}*/\n
/*{{{*/\n* html .tiddler {\n height: 1%;\n}\n\nbody {\n font-size: .75em;\n font-family: verdana;\n margin: 0;\n padding: 0;\n}\n\nh1,h2,h3,h4,h5 {\n font-weight: bold;\n text-decoration: none;\n padding-left: 0.4em;\n}\n\nh1 {font-size: 1.35em;}\nh2 {font-size: 1.25em;}\nh3 {font-size: 1.1em;}\nh4 {font-size: 1em;}\nh5 {font-size: .9em;}\n\nhr {\n height: 1px;\n}\n\na{\n text-decoration: none;\n}\n\n.viewer p {margin-bottom: 0;\n margin-top:0;\n text-indent: 3em;\n font-size: 1em;\n line-height: 2em;\n}\n\ndt {font-weight: bold;}\n\nol { list-style-type: decimal }\nol ol { list-style-type: lower-alpha }\nol ol ol { list-style-type: lower-roman }\nol ol ol ol { list-style-type: decimal }\nol ol ol ol ol { list-style-type: lower-alpha }\nol ol ol ol ol ol { list-style-type: lower-roman }\nol ol ol ol ol ol ol { list-style-type: decimal }\n\n.txtOptionInput {\n width: 11em;\n}\n\n.externalLink {\n text-decoration: underline;\n}\n\n.indent {margin-left:3em;}\n.outdent {margin-left:3em; text-indent:-3em;}\ncode.escaped {white-space:nowrap;}\n\n.tiddlyLinkExisting {\n font-weight: bold;\n}\n\n.tiddlyLinkNonExisting {\n font-style: italic;\n}\n\n/* the 'a' is required for IE, otherwise it renders the whole tiddler a bold */\na.tiddlyLinkNonExisting.shadow {\n font-weight: bold;\n}\n\n.header {\n height: 150px;\n position: relative;\n width: 100%;\n text-align: right;\n}\n\n.header a:hover {\n background: transparent;\n}\n\n.headerShadow {\n position: relative;\n padding: 4.5em 0em 1em 1em;\n left: -1px;\n top: -1px;\n text-align: right;\n width: 90%;\n}\n\n.headerForeground {\n position: absolute;\n padding: 4.5em 0em 1em 1em;\n left: 0px;\n top: 0px;\n text-align: right;\n width: 90%;\n}\n\n.siteTitle {\n font-size: 3em;\n}\n\n.siteSubtitle {\n font-size: 1.2em;\n}\n\n#contentWrapper {\n \n}\n\n#MenuWrapper {\n position:relative;\n float:left;\n display:inline;\n width: 15%;\n}\n\n#mainMenu {\n left: 0;\n text-align: center;\n line-height: 1.6em;\n font-size: 1em;\n padding: 0em 1em 0em 1em;\n}\n\n#mainMenu .tiddlyLinkExisting, \n#mainMenu .tiddlyLinkNonExisting,\n#sidebarTabs .tiddlyLinkNonExisting{\n font-weight: normal;\n font-style: normal;\n}\n\n#InfoBar {\n left: 0;\n padding: 1.5em 0.5em 1.5em 0.5em;\n font-size: .85em;\n text-align: center;\n}\n\n.MenuSub { font-style: italic;\n font-size: .8em;\n color: [[ColorPalette::PrimaryDark]];\n text-align: center;\n}\n\n.MenuHead {\n font-size: 1.25em;\n color: [[ColorPalette::PrimaryDark]];\n text-align: center;\n}\n\n#displayArea {\n margin: 0em 17em 0em 17em;\n}\n\n#messageArea {\n position:absolute; \n top:0; \n right:0; \n margin: 0.5em; \n padding: 0.5em;\n clear: none;\n}\n\n*[id='messageArea'] {\nposition:fixed !important; z-index:99;}\n\n.messageToolbar {\ndisplay: block;\ntext-align: right;\n}\n\n#messageArea a{\n text-decoration: underline;\n}\n\n.popup {\n font-size: .9em;\n padding: 0.2em;\n list-style: none;\n margin: 0;\n}\n\n.popup hr {\n display: block;\n height: 1px;\n width: auto;\n padding: 0;\n margin: 0.2em 0em;\n}\n\n.popup li.disabled {\n padding: 0.2em;\n}\n\n.popup li a{\n display: block;\n padding: 0.2em;\n}\n\n.tabset {\n padding: 1em 0em 0em 0.5em;\n}\n\n.tab {\n margin: 0em 0em 0em 0.25em;\n padding: 2px;\n}\n\n.tabContents {\n padding: 0.5em;\n}\n\n.tabContents ul, .tabContents ol {\n margin: 0;\n padding: 0;\n}\n\n.txtMainTab .tabContents li {\n list-style: none;\n}\n\n.tabContents li.listLink {\n margin-left: .75em;\n}\n\n.toolbar {\n text-align: right;\n font-size: .9em;\n visibility: hidden;\n}\n\n.selected .toolbar {\n visibility: visible;\n}\n\n.tiddler {\n padding: 1em 1em 0em 1em;\n}\n\n.missing .viewer,.missing .title {\n font-style: italic;\n}\n\n.title {\n font-size: 1.6em;\n font-weight: bold;\n}\n\n.missing .subtitle {\n display: none;\n}\n\n.subtitle {\n font-size: 1.1em;\n}\n\n.tiddler .button {\n padding: 0.2em 0.4em;\n}\n\n.tagging {\nmargin: 0.5em 0.5em 0.5em 0.5em;\nfloat: left;\ndisplay: none;\n}\n\n.isTag .tagging {\ndisplay: block;\n}\n\n.tagged {\nmargin: 0.5em;\nfloat: right;\n}\n\n.tagging, .tagged {\nfont-size: 0.9em;\npadding: 0.25em;\n}\n\n.tagging ul, .tagged ul {\nlist-style: none;margin: 0.25em;\npadding: 0;\n}\n\n.tagClear {\nclear: none;\n}\n\n* html .viewer pre {\n width: 99%;\n padding: 0 0 1em 0;\n}\n\n.viewer {\n line-height: 1.4em;\n padding-top: 0.5em;\n padding-bottom: 0em;\n}\n\n.viewer .button {\n margin: 0em 0.25em;\n padding: 0em 0.25em;\n}\n\n.viewer blockquote {\n line-height: 1.5em;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer ul, .viewer ol{\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer table {\n border-collapse: collapse;\n margin: 0.8em 1.0em;\n}\n\n.viewer th, .viewer td, .viewer tr,.viewer caption{\n padding: 3px;\n}\n\n.viewer table.listView {\n font-size: 0.85em;\n margin: 0.8em 1.0em;\n}\n\n.viewer table.listView th, .viewer table.listView td, .viewer table.listView tr {\n padding: 0px 3px 0px 3px;\n}\n\n.viewer pre {\n padding: 0.5em;\n margin-left: 0.5em;\n font-size: 1.2em;\n line-height: 1.4em;\n overflow: auto;\n}\n\n.viewer code {\n font-size: 1.2em;\n line-height: 1.4em;\n}\n\n.editor {\nfont-size: 1.1em;\n}\n\n.editor input, .editor textarea {\n display: block;\n width: 100%;\n font: inherit;\n}\n\n.editorFooter {\n padding: 0.25em 0em;\n font-size: .9em;\n}\n\n.editorFooter .button {\npadding-top: 0px; padding-bottom: 0px;}\n\n.fieldsetFix {border: 0;\npadding: 0;\nmargin: 1px 0px 1px 0px;\n}\n\n.sparkline {\n line-height: 1em;\n}\n\n.sparktick {\n outline: 0;\n}\n\n.zoomer {\n font-size: 1.1em;\n position: absolute;\n padding: 1em;\n}\n\n.cascade {\n font-size: 1.1em;\n position: absolute;\n overflow: hidden;\n}\n.viewer table.listView {\n font-size: 0.85em; margin: 0.8em 1.0em;\n}\n\n.viewer table.listView th, .viewer table.listView td, .viewer table.listView tr {\n padding: 0px 3px 0px 3px;\n}\n\n#sidebar {\n position:relative;\n float:right;\n display:inline;\n font-size: .9em;\n padding-bottom: 0.3em;\n padding-right: 1.7em;\n}\n\n#sidebarOptions {\n padding-top: 0.3em;\n}\n\n#sidebarOptions a {\n margin: 0em 0.2em;\n padding: 0.2em 0.3em;\n display: block;\n}\n\n#sidebarOptions input {\n margin: 0.4em 0.5em;\n}\n\n#sidebarOptions .sliderPanel {\n margin-left: 1em;\n padding: 0.5em;\n font-size: .85em;\n}\n\n#sidebarOptions .sliderPanel a {\n font-weight: bold;\n display: inline;\n padding: 0;\n}\n\n#sidebarOptions .sliderPanel input {\n margin: 0 0 .3em 0;\n}\n\n#sidebarTabs .tabContents {\n width: 16em;\n overflow: hidden;\n}\n\n#sidebarTabs .tiddlyLinkExisting {\n font-weight: bold;\n font-style: normal;\n}\n\n.wizard {\n padding: 0.1em 0em 0em 2em;\n}\n\n.wizard h1 {\n font-size: 2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.4em 0em 0.2em 0em;\n}\n\n.wizard h2 {\n font-size: 1.2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.2em 0em 0.2em 0em;\n}\n\n.wizardStep {\n padding: 1em 1em 1em 1em;\n}\n\n.wizard .button {\n margin: 0.5em 0em 0em 0em;\n font-size: 1.2em;\n}\n\n#siteFooter{\n text-align: center;\n width; 100%;\n padding: 1em 1em 1em 1em;\n clear: both;\n}\n\n#siteFooter p{\n margin: 0;\n} \n/*}}}*/
[>img[vdressfitting|vdressfitting.jpg]]This dress was made for Sarah B, player of [[Mae|http://il017d.cam-wiki.org/index.php/Mae]]. It was made using the Butterick 4212 pattern. I used a pewter colored taffeta and a plum lining. The beading came from a store in downtown Chicago called Rainbow Fabrics. \n\nThis was the most difficult project I had tackled up to that point. I did three fittings before the dress was finished and it took about two months from start to end. \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
[>img[usccbellcloak2-small|usccbellcloak2-small.jpg][usccbellcloak2.jpg]]I made this cloak for my Changeling character [[Alice|http://il017d.cam-wiki.org/index.php/Alice_Sparks]]. I used the pattern for the [[1896 Spring Cloak with Bell Sleeves|http://www.patternsoftime.com/proddetail.asp?prod=AG1251]], the fabric is a printed linen from Rainbow Fabrics in downtown Chicago. The lining is brown taffeta which makes a wonderful swishing sound as I walk. The buttons are Victorian reproductions by La Mode. \n\nSeeing how the pattern came with minimal instructions and I spent two weeks trying to find out what the heck a [[strapped down seam|http://www.vintagesewing.info/1930s/33-pt/pt-02.html#strapseam]] was, I think it turned out fantastically.\n\nI'd like to make another version of this cloak with lacing at the back and with alterations to the front closure. I have two bolts of fabric (a purple stamped moleskin and a blue embroidered moleskin) waiting for their turn at this pattern.\n\nClick the picture for a larger view.\n\n\n\n\n\n\n\n\n\n\n
Content © 2007, 2008 Raechel Henderson. Created using [[TiddlyWiki|http://www.tiddlywiki.com/]] © 2006 [[osmosoft|http://www.osmosoft.com]].