Make your own free website on Tripod.com
" + responseText.substring(posOpeningDiv,posClosingDiv + endSaveArea.length) + ""; // Create the iframe var iframe = document.createElement("iframe"); iframe.style.display = "none"; importer.insertBefore(iframe,importer.firstChild); var doc = iframe.document; if(iframe.contentDocument) doc = iframe.contentDocument; // For NS6 else if(iframe.contentWindow) doc = iframe.contentWindow.document; // For IE5.5 and IE6 // Put the content in the iframe doc.open(); doc.writeln(content); doc.close(); // Load the content into a TiddlyWiki() object var storeArea = doc.getElementById("storeArea"); var importStore = new TiddlyWiki(); importStore.loadFromDiv(storeArea,"store"); // Get rid of the iframe iframe.parentNode.removeChild(iframe); // Extract data for the listview var tiddlers = []; importStore.forEachTiddler(function(title,tiddler) { var t = {}; t.title = title; t.modified = tiddler.modified; t.modifier = tiddler.modifier; t.text = tiddler.text.substr(0,50); t.tags = tiddler.tags; tiddlers.push(t); }); // Display the listview createTiddlyElement(importer,"h2",null,"step3",config.macros.importTiddlers.step3); var step = createTiddlyElement(importer,"div",null,"wizardStep"); ListView.create(step,tiddlers,config.macros.importTiddlers.listViewTemplate,config.macros.importTiddlers.onSelectCommand); // Save the importer importer.store = importStore; } config.macros.importTiddlers.onSelectCommand = function(listView,command,rowNames) { var importer = findRelated(listView,"importTiddler","className","parentNode"); switch(command) { case "import": config.macros.importTiddlers.doImport(importer,rowNames); break; } if(config.options.chkAutoSave) saveChanges(true); } config.macros.importTiddlers.doImport = function(importer,rowNames) { var theStore = importer.store; var overwrite = new Array(); var t; for(t=0; t 0) if(!confirm(this.confirmOverwriteText.format([overwrite.join(", ")]))) return; for(t=0; t"); s.push("" + this.title.htmlEncode() + ""); s.push("" + wikifyStatic(this.text,null,this).htmlEncode() + ""); for(var t=0; t" + this.tags[t] + ""); s.push("" + url + "#" + encodeURIComponent(String.encodeTiddlyLink(this.title)) + ""); s.push("" + this.modified.toGMTString() + ""); s.push(""); return(s.join("\n")); } // Change the text and other attributes of a tiddler Tiddler.prototype.set = function(title,text,modifier,modified,tags,created,fields) { this.assign(title,text,modifier,modified,tags,created,fields); this.changed(); return this; } // Change the text and other attributes of a tiddler without triggered a tiddler.changed() call Tiddler.prototype.assign = function(title,text,modifier,modified,tags,created,fields) { if(title != undefined) this.title = title; if(text != undefined) this.text = text; if(modifier != undefined) this.modifier = modifier; if(modified != undefined) this.modified = modified; if(created != undefined) this.created = created; if(fields != undefined) this.fields = fields; if(tags != undefined) this.tags = (typeof tags == "string") ? tags.readBracketedList() : tags; else if(this.tags == undefined) this.tags = []; return this; } // Get the tags for a tiddler as a string (space delimited, using [[brackets]] for tags containing spaces) Tiddler.prototype.getTags = function() { return String.encodeTiddlyLinkList(this.tags); } // Test if a tiddler carries a tag Tiddler.prototype.isTagged = function(tag) { return this.tags.find(tag) != null; } // Static method to convert "\n" to newlines, "\s" to "\" Tiddler.unescapeLineBreaks = function(text) { return text ? text.unescapeLineBreaks() : ""; } // Convert newlines to "\n", "\" to "\s" Tiddler.prototype.escapeLineBreaks = function() { return this.text.escapeLineBreaks(); } // Updates the secondary information (like links[] array) after a change to a tiddler Tiddler.prototype.changed = function() { this.links = []; var t = this.autoLinkWikiWords() ? 0 : 1; var tiddlerLinkRegExp = t==0 ? config.textPrimitives.tiddlerAnyLinkRegExp : config.textPrimitives.tiddlerForcedLinkRegExp; tiddlerLinkRegExp.lastIndex = 0; var formatMatch = tiddlerLinkRegExp.exec(this.text); while(formatMatch) { if(t==0 && formatMatch[1] && formatMatch[1] != this.title) // wikiWordLink { if(formatMatch.index > 0) { var preRegExp = new RegExp(config.textPrimitives.unWikiLink+"|"+config.textPrimitives.anyLetter,"mg"); preRegExp.lastIndex = formatMatch.index-1; var preMatch = preRegExp.exec(this.text); if(preMatch.index != formatMatch.index-1) this.links.pushUnique(formatMatch[1]); } else this.links.pushUnique(formatMatch[1]); } else if(formatMatch[2-t] && (store.tiddlerExists(formatMatch[3-t]) || store.isShadowTiddler(formatMatch[3-t]))) // titledBrackettedLink this.links.pushUnique(formatMatch[3-t]); else if(formatMatch[4-t] && formatMatch[4-t] != this.title) // brackettedLink this.links.pushUnique(formatMatch[4-t]); // Do not add link if match urlPattern (formatMatch[5-t]) formatMatch = tiddlerLinkRegExp.exec(this.text); } this.linksUpdated = true; return; } Tiddler.prototype.getSubtitle = function() { var theModifier = this.modifier; if(!theModifier) theModifier = config.messages.subtitleUnknown; var theModified = this.modified; if(theModified) theModified = theModified.toLocaleString(); else theModified = config.messages.subtitleUnknown; return(config.messages.tiddlerLinkTooltip.format([this.title,theModifier,theModified])); } Tiddler.prototype.isReadOnly = function() { return readOnly; } Tiddler.prototype.autoLinkWikiWords = function() { return !(this.isTagged("systemConfig") || this.isTagged("excludeMissing")); } Tiddler.prototype.generateFingerprint = function() { return "0x" + Crypto.hexSha1Str(this.text); } // --------------------------------------------------------------------------------- // TiddlyWiki() object contains Tiddler()s // --------------------------------------------------------------------------------- function TiddlyWiki() { var tiddlers = {}; // Hashmap by name of tiddlers this.tiddlersUpdated = false; this.namedNotifications = []; // Array of {name:,notify:} of notification functions this.notificationLevel = 0; this.slices = {}; // map tiddlerName->(map sliceName->sliceValue). Lazy. this.clear = function() { tiddlers = {}; this.setDirty(false); }; this.fetchTiddler = function(title) { return tiddlers[title]; }; this.deleteTiddler = function(title) { delete this.slices[title]; delete tiddlers[title]; }; this.addTiddler = function(tiddler) { delete this.slices[tiddler.title]; tiddlers[tiddler.title] = tiddler; }; this.forEachTiddler = function(callback) { for(var t in tiddlers) { var tiddler = tiddlers[t]; if(tiddler instanceof Tiddler) callback.call(this,t,tiddler); } }; } // Set the dirty flag TiddlyWiki.prototype.setDirty = function(dirty) { this.dirty = dirty; } TiddlyWiki.prototype.isDirty = function() { return this.dirty; } TiddlyWiki.prototype.suspendNotifications = function() { this.notificationLevel--; } TiddlyWiki.prototype.resumeNotifications = function() { this.notificationLevel++; } // Invoke the notification handlers for a particular tiddler TiddlyWiki.prototype.notify = function(title,doBlanket) { if(!this.notificationLevel) for(var t=0; tString value = value instanceof Date ? value.convertToYYYYMMDDHHMMSSMMM() : String(value); if (oldValue == value) return; t.fields[fieldName] = value; } } // When we are here the tiddler/store really was changed. this.notify(t.title,true); if (!fieldName.match(/^temp\./)) this.setDirty(true); } // Returns the value of the given field of the tiddler. // The fieldName is case-insensitive. // Will only return String values (or undefined). TiddlyWiki.prototype.getValue = function(tiddler, fieldName) { var t = this.resolveTiddler(tiddler); if (!t) return undefined; fieldName = fieldName.toLowerCase(); var accessor = TiddlyWiki.standardFieldAccess[fieldName]; if (accessor) { return accessor.get(t); } return t.fields ? t.fields[fieldName] : undefined; } // Calls the callback function for every field in the tiddler. // // When callback function returns a non-false value the iteration stops // and that value is returned. // // The order of the fields is not defined. // // @param callback a function(tiddler, fieldName, value). // TiddlyWiki.prototype.forEachField = function(tiddler, callback, onlyExtendedFields) { var t = this.resolveTiddler(tiddler); if (!t) return undefined; if (t.fields) { for (var n in t.fields) { var result = callback(t, n, t.fields[n]); if (result) return result; } } if (onlyExtendedFields) return undefined; for (var n in TiddlyWiki.standardFieldAccess) { if (n == "tiddler") // even though the "title" field can also be referenced through the name "tiddler" // we only visit this field once. continue; var result = callback(t, n, TiddlyWiki.standardFieldAccess[n].get(t)); if (result) return result; } return undefined; }; // --------------------------------------------------------------------------------- // Story functions // --------------------------------------------------------------------------------- // A story is a HTML div containing a sequence of tiddlers that can be manipulated // container - id of containing element // idPrefix - string prefix prepended to title to make ids for tiddlers in this story function Story(container,idPrefix) { this.container = container; this.idPrefix = idPrefix; this.highlightRegExp = null; } // Iterate through all the tiddlers in a story // fn - callback function to be called for each tiddler. Arguments are: // tiddler - reference to Tiddler object // element - reference to tiddler display element Story.prototype.forEachTiddler = function(fn) { var place = document.getElementById(this.container); if(!place) return; var e = place.firstChild; while(e) { var n = e.nextSibling; var title = e.getAttribute("tiddler"); fn.call(this,title,e); e = n; } } // Display several tiddlers given their titles in an array. Parameters same as displayTiddler(), except: // titles - array of string titles Story.prototype.displayTiddlers = function(srcElement,titles,template,animate,slowly) { for(var t = titles.length-1;t>=0;t--) this.displayTiddler(srcElement,titles[t],template,animate,slowly); } // Display a given tiddler with a given template. If the tiddler is already displayed but with a different // template, it is switched to the specified template // srcElement - reference to element from which this one is being opened -or- // special positions "top", "bottom" // title - title of tiddler to display // template - the name of the tiddler containing the template -or- // one of the constants DEFAULT_VIEW_TEMPLATE and DEFAULT_EDIT_TEMPLATE -or- // null or undefined to indicate the current template if there is one, DEFAULT_VIEW_TEMPLATE if not // animate - whether to perform animations // slowly - whether to perform animations in slomo Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly) { var place = document.getElementById(this.container); var theTiddler = document.getElementById(this.idPrefix + title); if(theTiddler) this.refreshTiddler(title,template); else { var before = this.positionTiddler(srcElement); theTiddler = this.createTiddler(place,before,title,template); } if(srcElement && typeof srcElement !== "string") { if(anim && config.options.chkAnimate && (animate == undefined || animate == true)) anim.startAnimating(new Cascade(title,srcElement,theTiddler,slowly),new Scroller(theTiddler,slowly)); else window.scrollTo(0,ensureVisible(theTiddler)); } } // Figure out the appropriate position for a newly opened tiddler // srcElement - reference to the element containing the link to the tiddler -or- // special positions "top", "bottom" // returns - reference to the tiddler that the new one should appear before (null for the bottom of the story) Story.prototype.positionTiddler = function(srcElement) { var place = document.getElementById(this.container); var before; if(typeof srcElement == "string") { switch(srcElement) { case "top": before = place.firstChild; break; case "bottom": before = null; break; } } else { var after = this.findContainingTiddler(srcElement); if(after == null) before = place.firstChild; else if(after.nextSibling) before = after.nextSibling; else before = null; } return before; } // Create a tiddler frame at the appropriate place in a story column // place - reference to parent element // before - null, or reference to element before which to insert new tiddler // title - title of new tiddler // template - the name of the tiddler containing the template or one of the constants DEFAULT_VIEW_TEMPLATE and DEFAULT_EDIT_TEMPLATE Story.prototype.createTiddler = function(place,before,title,template) { var theTiddler = createTiddlyElement(null,"div",this.idPrefix + title,"tiddler"); theTiddler.setAttribute("refresh","tiddler"); place.insertBefore(theTiddler,before); this.refreshTiddler(title,template); return theTiddler; } // Overridable for choosing the name of the template to apply for a tiddler Story.prototype.chooseTemplateForTiddler = function(title,template) { if(!template) template = DEFAULT_VIEW_TEMPLATE; if(template == DEFAULT_VIEW_TEMPLATE || template == DEFAULT_EDIT_TEMPLATE) template = config.tiddlerTemplates[template]; return template; } // Overridable for extracting the text of a template from a tiddler Story.prototype.getTemplateForTiddler = function(title,template,tiddler) { return store.getRecursiveTiddlerText(template,null,10); } // Apply a template to an existing tiddler if it is not already displayed using that template // title - title of tiddler to update // template - the name of the tiddler containing the template or one of the constants DEFAULT_VIEW_TEMPLATE and DEFAULT_EDIT_TEMPLATE // force - if true, forces the refresh even if the template hasn't changedd Story.prototype.refreshTiddler = function(title,template,force) { var theTiddler = document.getElementById(this.idPrefix + title); if(theTiddler) { if(theTiddler.getAttribute("dirty") == "true" && !force) return theTiddler; template = this.chooseTemplateForTiddler(title,template); var currTemplate = theTiddler.getAttribute("template"); if((template != currTemplate) || force) { var tiddler = store.getTiddler(title); if(!tiddler) { tiddler = new Tiddler(); if(store.isShadowTiddler(title)) tiddler.set(title,store.getTiddlerText(title),config.views.wikified.shadowModifier,version.date,[],version.date); else { var text = template=="EditTemplate" ? config.views.editor.defaultText.format([title]) : config.views.wikified.defaultText.format([title]); tiddler.set(title,text,config.views.wikified.defaultModifier,version.date,[],version.date); } } theTiddler.setAttribute("tags",tiddler.tags.join(" ")); theTiddler.setAttribute("tiddler",title); theTiddler.setAttribute("template",template); var me = this; theTiddler.onmouseover = this.onTiddlerMouseOver; theTiddler.onmouseout = this.onTiddlerMouseOut; theTiddler.ondblclick = this.onTiddlerDblClick; theTiddler[window.event?"onkeydown":"onkeypress"] = this.onTiddlerKeyPress; var html = this.getTemplateForTiddler(title,template,tiddler); theTiddler.innerHTML = html; applyHtmlMacros(theTiddler,tiddler); if(store.getTaggedTiddlers(title).length > 0) addClass(theTiddler,"isTag"); else removeClass(theTiddler,"isTag"); if(!store.tiddlerExists(title)) { if(store.isShadowTiddler(title)) addClass(theTiddler,"shadow"); else addClass(theTiddler,"missing"); } else { removeClass(theTiddler,"shadow"); removeClass(theTiddler,"missing"); } } } return theTiddler; } // Refresh all tiddlers in the Story Story.prototype.refreshAllTiddlers = function() { var place = document.getElementById(this.container); var e = place.firstChild; this.refreshTiddler(e.getAttribute("tiddler"),e.getAttribute("template"),true); while((e = e.nextSibling) != null) this.refreshTiddler(e.getAttribute("tiddler"),e.getAttribute("template"),true); } // Default tiddler onmouseover/out event handlers Story.prototype.onTiddlerMouseOver = function(e) { if(window.addClass instanceof Function) addClass(this,"selected"); } Story.prototype.onTiddlerMouseOut = function(e) { if(window.removeClass instanceof Function) removeClass(this,"selected"); } // Default tiddler ondblclick event handler Story.prototype.onTiddlerDblClick = function(e) { if (!e) var e = window.event; var theTarget = resolveTarget(e); if(theTarget && theTarget.nodeName.toLowerCase() != "input" && theTarget.nodeName.toLowerCase() != "textarea") { if(document.selection && document.selection.empty) document.selection.empty(); config.macros.toolbar.invokeCommand(this,"defaultCommand",e); e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return true; } else return false; } Story.prototype.onTiddlerKeyPress = function(e) { if (!e) var e = window.event; clearMessage(); var consume = false; var title = this.getAttribute("tiddler"); var target = resolveTarget(e); switch(e.keyCode) { case 9: // Tab if(config.options.chkInsertTabs && target.tagName.toLowerCase() == "textarea") { replaceSelection(target,String.fromCharCode(9)); consume = true; } if(config.isOpera) { target.onblur = function() { this.focus(); this.onblur = null; } } break; case 13: // Ctrl-Enter case 10: // Ctrl-Enter on IE PC case 77: // Ctrl-Enter is "M" on some platforms if(e.ctrlKey) { blurElement(this); config.macros.toolbar.invokeCommand(this,"defaultCommand",e); consume = true; } break; case 27: // Escape blurElement(this); config.macros.toolbar.invokeCommand(this,"cancelCommand",e); consume = true; break; } e.cancelBubble = consume; if(consume) { if (e.stopPropagation) e.stopPropagation(); // Stop Propagation e.returnValue = true; // Cancel The Event in IE if (e.preventDefault ) e.preventDefault(); // Cancel The Event in Moz } return(!consume); }; // Returns the specified field (input or textarea element) in a tiddler, otherwise the first edit field it finds // or null if it found no edit field at all Story.prototype.getTiddlerField = function(title,field) { var tiddler = document.getElementById(this.idPrefix + title); var e = null; if(tiddler != null) { var children = tiddler.getElementsByTagName("*"); for (var t=0; t=0; t--) titles.push(matches[t].title); this.displayTiddlers(null,titles); highlightHack = null; var q = useRegExp ? "/" : "'"; if(matches.length > 0) displayMessage(config.macros.search.successMsg.format([titles.length.toString(),q + text + q])); else displayMessage(config.macros.search.failureMsg.format([q + text + q])); } // Determine if the specified element is within a tiddler in this story // e - reference to an element // returns: reference to a tiddler element or null if none Story.prototype.findContainingTiddler = function(e) { while(e && !hasClass(e,"tiddler")) e = e.parentNode; return(e); } // Gather any saveable fields from a tiddler element // e - reference to an element to scan recursively // fields - object to contain gathered field values Story.prototype.gatherSaveFields = function(e,fields) { if(e && e.getAttribute) { var f = e.getAttribute("edit"); if(f) fields[f] = e.value.replace(/\r/mg,"");; if(e.hasChildNodes()) { var c = e.childNodes; for(var t=0; t=0; t--) stash.appendChild(nodes[t]); } var wrapper = document.getElementById("contentWrapper"); if(!title) title = "PageTemplate"; var html = store.getRecursiveTiddlerText(title,null,10); wrapper.innerHTML = html; applyHtmlMacros(wrapper); refreshElements(wrapper); display = document.getElementById("tiddlerDisplay"); removeChildren(display); if(!display) display = createTiddlyElement(wrapper,"div","tiddlerDisplay"); nodes = stash.childNodes; for(t=nodes.length-1; t>=0; t--) display.appendChild(nodes[t]); stash.parentNode.removeChild(stash); } function refreshDisplay(hint) { var e = document.getElementById("contentWrapper"); if(typeof hint == "string") hint = [hint]; refreshElements(e,hint); } function refreshPageTitle() { document.title = wikifyPlain("SiteTitle") + " - " + wikifyPlain("SiteSubtitle"); } function refreshStyles(title) { setStylesheet(title == null ? "" : store.getRecursiveTiddlerText(title,"",10),title); } function refreshColorPalette(title) { if(!startingUp) refreshAll(); } function refreshAll() { refreshPageTemplate(); refreshDisplay(); refreshStyles("StyleSheetLayout"); refreshStyles("StyleSheetColors"); refreshStyles("StyleSheet"); refreshStyles("StyleSheetPrint"); } // --------------------------------------------------------------------------------- // Options cookie stuff // --------------------------------------------------------------------------------- function loadOptionsCookie() { if(safeMode) return; var cookies = document.cookie.split(";"); for(var c=0; c'; // Split up into two so that indexOf() of this source doesn't find it var endSaveArea = ''; // If there are unsaved changes, force the user to confirm before exitting function confirmExit() { hadConfirmExit = true; if(store && store.isDirty && store.isDirty()) return config.messages.confirmExit; } // Give the user a chance to save changes before exitting function checkUnsavedChanges() { if(store && store.isDirty && store.isDirty() && window.hadConfirmExit === false) { if(confirm(config.messages.unsavedChangesWarning)) saveChanges(); } } function updateMarkupBlock(s,blockName,tiddlerName) { return s.replaceChunk( "".format([blockName]), "".format([blockName]), "\n" + store.getRecursiveTiddlerText(tiddlerName,"") + "\n"); } // Save this tiddlywiki with the pending changes function saveChanges(onlyIfDirty) { if(onlyIfDirty && !store.isDirty()) return; clearMessage(); // Get the URL of the document var originalPath = document.location.toString(); // Check we were loaded from a file URL if(originalPath.substr(0,5) != "file:") { alert(config.messages.notFileUrlError); if(store.tiddlerExists(config.messages.saveInstructions)) displayTiddler(null,config.messages.saveInstructions); return; } var localPath = getLocalPath(originalPath); // Load the original file var original = loadFile(localPath); if(original == null) { alert(config.messages.cantSaveError); if(store.tiddlerExists(config.messages.saveInstructions)) displayTiddler(null,config.messages.saveInstructions); return; } // Locate the storeArea div's var posOpeningDiv = original.indexOf(startSaveArea); var limitClosingDiv = original.indexOf(" "x:\path\path\path..." // "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..." // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..." // "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..." var localPath; if(originalPath.charAt(9) == ":") // pc local file localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\"); else if(originalPath.indexOf("file://///") == 0) // FireFox pc network file localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\"); else if(originalPath.indexOf("file:///") == 0) // mac/unix local file localPath = unescape(originalPath.substr(7)); else if(originalPath.indexOf("file:/") == 0) // mac/unix local file localPath = unescape(originalPath.substr(5)); else // pc network file localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\"); return localPath; } function getBackupPath(localPath) { var backSlash = true; var dirPathPos = localPath.lastIndexOf("\\"); if(dirPathPos == -1) { dirPathPos = localPath.lastIndexOf("/"); backSlash = false; } var backupFolder = config.options.txtBackupFolder; if(!backupFolder || backupFolder == "") backupFolder = "."; var backupPath = localPath.substr(0,dirPathPos) + (backSlash ? "\\" : "/") + backupFolder + localPath.substr(dirPathPos); backupPath = backupPath.substr(0,backupPath.lastIndexOf(".")) + "." + (new Date()).convertToYYYYMMDDHHMMSSMMM() + ".html"; return backupPath; } function generateRss() { var s = []; var d = new Date(); var u = store.getTiddlerText("SiteUrl"); // Assemble the header s.push("<" + "?xml version=\"1.0\"?" + ">"); s.push(""); s.push(""); s.push("" + wikifyPlain("SiteTitle").htmlEncode() + ""); if(u) s.push("" + u.htmlEncode() + ""); s.push("" + wikifyPlain("SiteSubtitle").htmlEncode() + ""); s.push("en-us"); s.push("Copyright " + d.getFullYear() + " " + config.options.txtUserName.htmlEncode() + ""); s.push("" + d.toGMTString() + ""); s.push("" + d.toGMTString() + ""); s.push("http://blogs.law.harvard.edu/tech/rss"); s.push("TiddlyWiki " + version.major + "." + version.minor + "." + version.revision + ""); // The body var tiddlers = store.getTiddlers("modified","excludeLists"); var n = config.numRssItems > tiddlers.length ? 0 : tiddlers.length-config.numRssItems; for (var t=tiddlers.length-1; t>=n; t--) s.push(tiddlers[t].saveToRss(u)); // And footer s.push(""); s.push(""); // Save it all return s.join("\n"); } // UTF-8 encoding rules: // 0x0000 - 0x007F: 0xxxxxxx // 0x0080 - 0x07FF: 110xxxxx 10xxxxxx // 0x0800 - 0xFFFF: 1110xxxx 10xxxxxx 10xxxxxx function convertUTF8ToUnicode(u) { if(window.netscape == undefined) return manualConvertUTF8ToUnicode(u); else return mozConvertUTF8ToUnicode(u); } function manualConvertUTF8ToUnicode(utf) { var uni = utf; var src = 0; var dst = 0; var b1, b2, b3; var c; while(src < utf.length) { b1 = utf.charCodeAt(src++); if(b1 < 0x80) dst++; else if(b1 < 0xE0) { b2 = utf.charCodeAt(src++); c = String.fromCharCode(((b1 & 0x1F) << 6) | (b2 & 0x3F)); uni = uni.substring(0,dst++).concat(c,utf.substr(src)); } else { b2 = utf.charCodeAt(src++); b3 = utf.charCodeAt(src++); c = String.fromCharCode(((b1 & 0xF) << 12) | ((b2 & 0x3F) << 6) | (b3 & 0x3F)); uni = uni.substring(0,dst++).concat(c,utf.substr(src)); } } return(uni); } function mozConvertUTF8ToUnicode(u) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter); converter.charset = "UTF-8"; } catch(e) { return manualConvertUTF8ToUnicode(u); } // fallback var s = converter.ConvertToUnicode(u); var fin = converter.Finish(); return (fin.length > 0) ? s+fin : s; } function convertUnicodeToUTF8(s) { if(window.netscape == undefined) return manualConvertUnicodeToUTF8(s); else return mozConvertUnicodeToUTF8(s); } function manualConvertUnicodeToUTF8(s) { var re = /[^\u0000-\u007F]/g ; return s.replace(re, function($0) {return("&#" + $0.charCodeAt(0).toString() + ";");}) } function mozConvertUnicodeToUTF8(s) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter); converter.charset = "UTF-8"; } catch(e) { return manualConvertUnicodeToUTF8(s); } // fallback var u = converter.ConvertFromUnicode(s); var fin = converter.Finish(); if(fin.length > 0) return u + fin; else return u; } function saveFile(fileUrl, content) { var r = null; if((r == null) || (r == false)) r = mozillaSaveFile(fileUrl, content); if((r == null) || (r == false)) r = ieSaveFile(fileUrl, content); if((r == null) || (r == false)) r = javaSaveFile(fileUrl, content); return(r); } function loadFile(fileUrl) { var r = null; if((r == null) || (r == false)) r = mozillaLoadFile(fileUrl); if((r == null) || (r == false)) r = ieLoadFile(fileUrl); if((r == null) || (r == false)) r = javaLoadFile(fileUrl); return(r); } // Returns null if it can't do it, false if there's an error, true if it saved OK function ieSaveFile(filePath, content) { try { var fso = new ActiveXObject("Scripting.FileSystemObject"); } catch(e) { //alert("Exception while attempting to save\n\n" + e.toString()); return(null); } var file = fso.OpenTextFile(filePath,2,-1,0); file.Write(content); file.Close(); return(true); } // Returns null if it can't do it, false if there's an error, or a string of the content if successful function ieLoadFile(filePath) { try { var fso = new ActiveXObject("Scripting.FileSystemObject"); var file = fso.OpenTextFile(filePath,1); var content = file.ReadAll(); file.Close(); } catch(e) { //alert("Exception while attempting to load\n\n" + e.toString()); return(null); } return(content); } // Returns null if it can't do it, false if there's an error, true if it saved OK function mozillaSaveFile(filePath, content) { if(window.Components) try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(filePath); if (!file.exists()) file.create(0, 0664); var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); out.init(file, 0x20 | 0x02, 00004,null); out.write(content, content.length); out.flush(); out.close(); return(true); } catch(e) { //alert("Exception while attempting to save\n\n" + e); return(false); } return(null); } // Returns null if it can't do it, false if there's an error, or a string of the content if successful function mozillaLoadFile(filePath) { if(window.Components) try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(filePath); if (!file.exists()) return(null); var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); inputStream.init(file, 0x01, 00004, null); var sInputStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); sInputStream.init(inputStream); return(sInputStream.read(sInputStream.available())); } catch(e) { //alert("Exception while attempting to load\n\n" + e); return(false); } return(null); } function javaUrlToFilename(url) { var f = "//localhost"; if(url.indexOf(f) == 0) return url.substring(f.length); var i = url.indexOf(":"); if(i > 0) return url.substring(i-1); return url; } function javaSaveFile(filePath, content) { try { if(document.applets["TiddlySaver"]) return document.applets["TiddlySaver"].saveFile(javaUrlToFilename(filePath),"UTF-8",content); } catch(e) { } try { var s = new java.io.PrintStream(new java.io.FileOutputStream(javaUrlToFilename(filePath))); s.print(content); s.close(); } catch(e) { return null; } return true; } function javaLoadFile(filePath) { try { if(document.applets["TiddlySaver"]) return String(document.applets["TiddlySaver"].loadFile(javaUrlToFilename(filePath),"UTF-8")); } catch(e) { } var content = []; try { var r = new java.io.BufferedReader(new java.io.FileReader(javaUrlToFilename(filePath))); var line; while ((line = r.readLine()) != null) content.push(new String(line)); r.close(); } catch(e) { return null; } return content.join("\n"); } // --------------------------------------------------------------------------------- // Remote HTTP requests // --------------------------------------------------------------------------------- // Load a file over http // url - the source url // callback - function to call when there's a response // params - parameter object that gets passed to the callback for storing it's state // Return value is the underlying XMLHttpRequest object, or 'null' if there was an error // Callback function is called like this: // callback(status,params,responseText,xhr) // status - true if OK, false if error // params - the parameter object provided to loadRemoteFile() // responseText - the text of the file // xhr - the underlying XMLHttpRequest object function loadRemoteFile(url,callback,params) { // Get an xhr object var x; try { x = new XMLHttpRequest(); // Modern } catch(e) { try { x = new ActiveXObject("Msxml2.XMLHTTP"); // IE 6 } catch (e) { return null; } } // Install callback x.onreadystatechange = function() { if (x.readyState == 4) { if ((x.status == 0 || x.status == 200) && callback) { callback(true,params,x.responseText,url,x); } else callback(false,params,null,url,x); } } // Send request if(window.netscape && window.netscape.security && document.location.protocol.indexOf("http") == -1) window.netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); try { url = url + (url.indexOf("?") < 0 ? "?" : "&") + "nocache=" + Math.random(); x.open("GET",url,true); if (x.overrideMimeType) x.overrideMimeType("text/html"); x.send(null); } catch (e) { alert("Error in send " + e); return null; } return x; } // --------------------------------------------------------------------------------- // TiddlyWiki-specific utility functions // --------------------------------------------------------------------------------- function createTiddlyButton(theParent,theText,theTooltip,theAction,theClass,theId,theAccessKey) { var theButton = document.createElement("a"); if(theAction) { theButton.onclick = theAction; theButton.setAttribute("href","javascript:;"); } if(theTooltip) theButton.setAttribute("title",theTooltip); if(theText) theButton.appendChild(document.createTextNode(theText)); if(theClass) theButton.className = theClass; else theButton.className = "button"; if(theId) theButton.id = theId; if(theParent) theParent.appendChild(theButton); if(theAccessKey) theButton.setAttribute("accessKey",theAccessKey); return(theButton); } function createTiddlyLink(place,title,includeText,theClass,isStatic) { var text = includeText ? title : null; var i = getTiddlyLinkInfo(title,theClass) var btn; if(isStatic) btn = createExternalLink(place,"#" + title); else btn = createTiddlyButton(place,text,i.subTitle,onClickTiddlerLink,i.classes); btn.setAttribute("refresh","link"); btn.setAttribute("tiddlyLink",title); return(btn); } function refreshTiddlyLink(e,title) { var i = getTiddlyLinkInfo(title,e.className); e.className = i.classes; e.title = i.subTitle; } function getTiddlyLinkInfo(title,currClasses) { var classes = currClasses ? currClasses.split(" ") : []; classes.pushUnique("tiddlyLink"); var tiddler = store.fetchTiddler(title); var subTitle; if(tiddler) { subTitle = tiddler.getSubtitle(); classes.pushUnique("tiddlyLinkExisting"); classes.remove("tiddlyLinkNonExisting"); classes.remove("shadow"); } else { classes.remove("tiddlyLinkExisting"); classes.pushUnique("tiddlyLinkNonExisting"); if(store.isShadowTiddler(title)) { subTitle = config.messages.shadowedTiddlerToolTip.format([title]); classes.pushUnique("shadow"); } else { subTitle = config.messages.undefinedTiddlerToolTip.format([title]); classes.remove("shadow"); } } return {classes: classes.join(" "), subTitle: subTitle}; } function createExternalLink(place,url) { var theLink = document.createElement("a"); theLink.className = "externalLink"; theLink.href = url; theLink.title = config.messages.externalLinkTooltip.format([url]); if(config.options.chkOpenInNewWindow) theLink.target = "_blank"; place.appendChild(theLink); return(theLink); } // Event handler for clicking on a tiddly link function onClickTiddlerLink(e) { if (!e) var e = window.event; var theTarget = resolveTarget(e); var theLink = theTarget; var title = null; do { title = theLink.getAttribute("tiddlyLink"); theLink = theLink.parentNode; } while(title == null && theLink != null); if(title) { var toggling = e.metaKey || e.ctrlKey; if(config.options.chkToggleLinks) toggling = !toggling; var opening; if(toggling && document.getElementById("tiddler" + title)) story.closeTiddler(title,true,e.shiftKey || e.altKey); else story.displayTiddler(theTarget,title,null,true,e.shiftKey || e.altKey); } clearMessage(); return(false); } // Create a button for a tag with a popup listing all the tiddlers that it tags function createTagButton(place,tag,excludeTiddler) { var theTag = createTiddlyButton(place,tag,config.views.wikified.tag.tooltip.format([tag]),onClickTag); theTag.setAttribute("tag",tag); if(excludeTiddler) theTag.setAttribute("tiddler",excludeTiddler); return(theTag); } // Event handler for clicking on a tiddler tag function onClickTag(e) { if (!e) var e = window.event; var theTarget = resolveTarget(e); var popup = Popup.create(this); var tag = this.getAttribute("tag"); var title = this.getAttribute("tiddler"); if(popup && tag) { var tagged = store.getTaggedTiddlers(tag); var titles = []; var li,r; for(r=0;r 0) { var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,onClickTagOpenAll); openAll.setAttribute("tag",tag); createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div"); for(r=0; r= this.steps) { while(this.elements.length > 0) this.removeTail(); this.targetElement.style.position = "static"; this.targetElement.style.zIndex = ""; return false; } else { if(this.elements.length > 0 && this.progress > config.cascadeDepth) this.removeTail(); if(this.progress < (this.steps - config.cascadeDepth)) { var f = Animator.slowInSlowOut(this.progress/(this.steps - config.cascadeDepth - 1)); var e = createTiddlyElement(document.body,"div",null,"cascade",this.text); e.style.zIndex = 1; e.style.left = this.startLeft + (this.targetLeft-this.startLeft) * f + "px"; e.style.top = this.startTop + (this.targetTop-this.startTop) * f + "px"; e.style.width = this.startWidth + (this.targetWidth-this.startWidth) * f + "px"; e.style.height = this.startHeight + (this.targetHeight-this.startHeight) * f + "px"; e.style.display = "block"; this.elements.push(e); } return true; } } Cascade.prototype.removeTail = function() { var e = this.elements[0]; e.parentNode.removeChild(e); this.elements.shift(); } // --------------------------------------------------------------------------------- // Scroller animation // --------------------------------------------------------------------------------- function Scroller(targetElement,slowly) { this.targetElement = targetElement; this.startScroll = findScrollY(); this.targetScroll = ensureVisible(targetElement); this.progress = 0; this.step = slowly ? config.animSlow : config.animFast; return this; } Scroller.prototype.tick = function() { this.progress += this.step; if(this.progress > 1) { window.scrollTo(0,this.targetScroll); return false; } else { var f = Animator.slowInSlowOut(this.progress); window.scrollTo(0,this.startScroll + (this.targetScroll-this.startScroll) * f); return true; } } // --------------------------------------------------------------------------------- // Slider animation // --------------------------------------------------------------------------------- // deleteMode - "none", "all" [delete target element and it's children], [only] "children" [but not the target element] function Slider(element,opening,slowly,deleteMode) { this.element = element; element.style.display = "block"; this.deleteMode = deleteMode; this.element.style.height = "auto"; this.realHeight = element.offsetHeight; this.opening = opening; this.step = slowly ? config.animSlow : config.animFast; if(opening) { this.progress = 0; element.style.height = "0px"; element.style.display = "block"; } else { this.progress = 1; this.step = -this.step; } element.style.overflow = "hidden"; return this; } Slider.prototype.stop = function() { if(this.opening) { this.element.style.height = "auto"; this.element.style.opacity = 1; this.element.style.filter = "alpha(opacity:100)"; } else { switch(this.deleteMode) { case "none": this.element.style.display = "none"; break; case "all": this.element.parentNode.removeChild(this.element); break; case "children": removeChildren(this.element); break; } } } Slider.prototype.tick = function() { this.progress += this.step; if(this.progress < 0 || this.progress > 1) { this.stop(); return false; } else { var f = Animator.slowInSlowOut(this.progress); var h = this.realHeight * f; this.element.style.height = h + "px"; this.element.style.opacity = f; this.element.style.filter = "alpha(opacity:" + f * 100 +")"; return true; } } // --------------------------------------------------------------------------------- // Popup menu // --------------------------------------------------------------------------------- var Popup = { stack: [] // Array of objects with members root: and popup: }; Popup.create = function(root) { Popup.remove(); var popup = createTiddlyElement(document.body,"ol","popup","popup"); Popup.stack.push({root: root, popup: popup}); return popup; } Popup.onDocumentClick = function(e) { if (!e) var e = window.event; var target = resolveTarget(e); if(e.eventPhase == undefined) Popup.remove(); else if(e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET) Popup.remove(); return true; } Popup.show = function(unused,slowly) { var curr = Popup.stack[Popup.stack.length-1]; var rootLeft = findPosX(curr.root); var rootTop = findPosY(curr.root); var rootHeight = curr.root.offsetHeight; var popupLeft = rootLeft; var popupTop = rootTop + rootHeight; var popupWidth = curr.popup.offsetWidth; var winWidth = findWindowWidth(); if(popupLeft + popupWidth > winWidth) popupLeft = winWidth - popupWidth; curr.popup.style.left = popupLeft + "px"; curr.popup.style.top = popupTop + "px"; curr.popup.style.display = "block"; addClass(curr.root,"highlight"); if(anim && config.options.chkAnimate) anim.startAnimating(new Scroller(curr.popup,slowly)); else window.scrollTo(0,ensureVisible(curr.popup)); } Popup.remove = function() { if(Popup.stack.length > 0) { Popup.removeFrom(0); } } Popup.removeFrom = function(from) { for(var t=Popup.stack.length-1; t>=from; t--) { var p = Popup.stack[t]; removeClass(p.root,"highlight"); p.popup.parentNode.removeChild(p.popup); } Popup.stack = Popup.stack.slice(0,from); } // --------------------------------------------------------------------------------- // ListView gadget // --------------------------------------------------------------------------------- var ListView = {}; // Create a listview // place - where in the DOM tree to insert the listview // listObject - array of objects to be included in the listview // listTemplate - template for the listview // callback - callback for a command being selected // className - optional classname for the element ListView.create = function(place,listObject,listTemplate,callback,className) { var table = createTiddlyElement(place,"table",null,className ? className : "listView"); var thead = createTiddlyElement(table,"thead"); var r = createTiddlyElement(thead,"tr"); for(var t=0; t element of listView // callback(checkboxElement,rowName) // where // checkboxElement - DOM element of checkbox // rowName - name of this row as assigned by the column template // result: true if at least one selector was checked ListView.forEachSelector = function(view,callback) { var checkboxes = view.getElementsByTagName("input"); var hadOne = false; for(var t=0; t max) c = max; return c; } // Add indexOf function if browser does not support it if(!Array.indexOf) { Array.prototype.indexOf = function(item,from) { if(!from) from = 0; for(var i=from; i "backgroundColor") String.prototype.unDash = function() { var s = this.split("-"); if(s.length > 1) for(var t=1; t currPos) r.push(this.substring(currPos,match.index)); r.push(substrings[parseInt(match[1])]); currPos = subRegExp.lastIndex; } } while(match); if(currPos < this.length) r.push(this.substring(currPos,this.length)); return r.join(""); } // Escape any special RegExp characters with that character preceded by a backslash String.prototype.escapeRegExp = function() { var s = "\\^$*+?()=!|,{}[]."; var c = this; for(var t=0; t to ">" and " to """ String.prototype.htmlEncode = function() { return(this.replace(/&/mg,"&").replace(//mg,">").replace(/\"/mg,""")); } // Convert "&" to &, "<" to <, ">" to > and """ to " String.prototype.htmlDecode = function() { return(this.replace(/&/mg,"&").replace(/</mg,"<").replace(/>/mg,">").replace(/"/mg,"\"")); } // Parse a space-separated string of name:value parameters where: // - the name or the value can be optional (in which case separate defaults are used instead) // - in case of ambiguity, a lone word is taken to be a value // - if 'cascadeDefaults' is set to true, then the defaults are modified by updated by each specified name or value // - name prefixes are not allowed if the 'noNames' parameter is true // - if both the name and value are present they must be separated by a colon // - the name and the value may both be quoted with single- or double-quotes, double-square brackets // - names or values quoted with {{double-curly braces}} are evaluated as a JavaScript expression // - as long as the 'allowEval' parameter is true // The result is an array of objects: // result[0] = object with a member for each parameter name, value of that member being an array of values // result[1..n] = one object for each parameter, with 'name' and 'value' members String.prototype.parseParams = function(defaultName,defaultValue,allowEval,noNames,cascadeDefaults) { var parseToken = function(match,p) { var n; if(match[p]) // Double quoted n = match[p]; else if(match[p+1]) // Single quoted n = match[p+1]; else if(match[p+2]) // Double-square-bracket quoted n = match[p+2]; else if(match[p+3]) // Double-brace quoted try { n = match[p+3]; if(allowEval) n = window.eval(n); } catch(e) { throw "Unable to evaluate {{" + match[p+3] + "}}: " + exceptionText(e); } else if(match[p+4]) // Unquoted n = match[p+4]; return n; }; var r = [{}]; var dblQuote = "(?:\"((?:(?:\\\\\")|[^\"])*)\")"; var sngQuote = "(?:'((?:(?:\\\\\')|[^'])*)')"; var dblSquare = "(?:\\[\\[((?:\\s|\\S)*?)\\]\\])"; var dblBrace = "(?:\\{\\{((?:\\s|\\S)*?)\\}\\})"; var unQuoted = noNames ? "([^\"'\\s]\\S*)" : "([^\"':\\s][^\\s:]*)"; var skipSpace = "(?:\\s*)"; var token = "(?:" + dblQuote + "|" + sngQuote + "|" + dblSquare + "|" + dblBrace + "|" + unQuoted + ")"; var re = noNames ? new RegExp(token,"mg") : new RegExp(skipSpace + token + skipSpace + "(?:(\\:)" + skipSpace + token + ")?","mg"); var params = []; do { var match = re.exec(this); if(match) { var n = parseToken(match,1); if(noNames) r.push({name: "", value: n}); else { var v = parseToken(match,7); if(v == null && defaultName) { v = n; n = defaultName; } else if(v == null && defaultValue) v = defaultValue; r.push({name: n, value: v}); if(cascadeDefaults) { defaultName = n; defaultValue = v; } } } } while(match); // Summarise parameters into first element for(var t=1; t 12 ? h-12 : ( h > 0 ? h : 12 ); } Date.prototype.getAmPm = function() { return this.getHours() >= 12 ? "pm" : "am"; } Date.prototype.daySuffix = function() { var num = this.getDate(); if (num >= 11 && num <= 13) return "th"; else if (num.toString().substr(-1)=="1") return "st"; else if (num.toString().substr(-1)=="2") return "nd"; else if (num.toString().substr(-1)=="3") return "rd"; return "th"; } // Convert a date to local YYYYMMDDHHMM string format Date.prototype.convertToLocalYYYYMMDDHHMM = function() { return(String.zeroPad(this.getFullYear(),4) + String.zeroPad(this.getMonth()+1,2) + String.zeroPad(this.getDate(),2) + String.zeroPad(this.getHours(),2) + String.zeroPad(this.getMinutes(),2)); } // Convert a date to UTC YYYYMMDDHHMM string format Date.prototype.convertToYYYYMMDDHHMM = function() { return(String.zeroPad(this.getUTCFullYear(),4) + String.zeroPad(this.getUTCMonth()+1,2) + String.zeroPad(this.getUTCDate(),2) + String.zeroPad(this.getUTCHours(),2) + String.zeroPad(this.getUTCMinutes(),2)); } // Convert a date to UTC YYYYMMDD.HHMMSSMMM string format Date.prototype.convertToYYYYMMDDHHMMSSMMM = function() { return(String.zeroPad(this.getUTCFullYear(),4) + String.zeroPad(this.getUTCMonth()+1,2) + String.zeroPad(this.getUTCDate(),2) + "." + String.zeroPad(this.getUTCHours(),2) + String.zeroPad(this.getUTCMinutes(),2) + String.zeroPad(this.getUTCSeconds(),2) + String.zeroPad(this.getUTCMilliseconds(),4)); } // Static method to create a date from a UTC YYYYMMDDHHMM format string Date.convertFromYYYYMMDDHHMM = function(d) { var theDate = new Date(Date.UTC(parseInt(d.substr(0,4),10), parseInt(d.substr(4,2),10)-1, parseInt(d.substr(6,2),10), parseInt(d.substr(8,2),10), parseInt(d.substr(10,2),10),0,0)); return(theDate); } // --------------------------------------------------------------------------------- // Crypto functions and associated conversion routines // --------------------------------------------------------------------------------- // Crypto "namespace" function Crypto() {} // Convert a string to an array of big-endian 32-bit words Crypto.strToBe32s = function(str) { var be = Array(); var len = Math.floor(str.length/4); var i, j; for(i=0, j=0; i>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32); j++; } return be; } // Convert an array of big-endian 32-bit words to a string Crypto.be32sToStr = function(be) { var str = ""; for(var i=0;i>5]>>>(24-i%32)) & 0xff); return str; } // Convert an array of big-endian 32-bit words to a hex string Crypto.be32sToHex = function(be) { var hex = "0123456789ABCDEF"; var str = ""; for(var i=0;i>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF); return str; } // Return, in hex, the SHA-1 hash of a string Crypto.hexSha1Str = function(str) { return Crypto.be32sToHex(Crypto.sha1Str(str)); } // Return the SHA-1 hash of a string Crypto.sha1Str = function(str) { return Crypto.sha1(Crypto.strToBe32s(str),str.length); } // Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words Crypto.sha1 = function(x,blen) { // Add 32-bit integers, wrapping at 32 bits //# Uses 16-bit operations internally to work around bugs in some JavaScript interpreters. add32 = function(a,b) { var lsw = (a&0xFFFF)+(b&0xFFFF); var msw = (a>>16)+(b>>16)+(lsw>>16); return (msw<<16)|(lsw&0xFFFF); }; // Add five 32-bit integers, wrapping at 32 bits //# Uses 16-bit operations internally to work around bugs in some JavaScript interpreters. add32x5 = function(a,b,c,d,e) { var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF); var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16); return (msw<<16)|(lsw&0xFFFF); }; // Bitwise rotate left a 32-bit integer by 1 bit rol32 = function(n) { return (n>>>31)|(n<<1); }; var len = blen*8; // Append padding so length in bits is 448 mod 512 x[len>>5] |= 0x80 << (24-len%32); // Append length x[((len+64>>9)<<4)+15] = len; var w = Array(80); var k1 = 0x5A827999; var k2 = 0x6ED9EBA1; var k3 = 0x8F1BBCDC; var k4 = 0xCA62C1D6; var h0 = 0x67452301; var h1 = 0xEFCDAB89; var h2 = 0x98BADCFE; var h3 = 0x10325476; var h4 = 0xC3D2E1F0; for(var i=0;i>>27)|(a<<5),d^(b&(c^d)),w[j],k1); e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t; } for(j=16;j<20;j++) { w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]); t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1); e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t; } for(j=20;j<40;j++) { w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]); t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2); e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t; } for(j=40;j<60;j++) { w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]); t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3); e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t; } for(j=60;j<80;j++) { w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]); t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4); e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t; } h0 = add32(h0,a); h1 = add32(h1,b); h2 = add32(h2,c); h3 = add32(h3,d); h4 = add32(h4,e); } return Array(h0,h1,h2,h3,h4); } // --------------------------------------------------------------------------------- // RGB colour object // --------------------------------------------------------------------------------- // Construct an RGB colour object from a '#rrggbb', '#rgb' or 'rgb(n,n,n)' string or from separate r,g,b values function RGB(r,g,b) { this.r = 0; this.g = 0; this.b = 0; if(typeof r == "string") { if(r.substr(0,1) == "#") { if(r.length == 7) { this.r = parseInt(r.substr(1,2),16)/255; this.g = parseInt(r.substr(3,2),16)/255; this.b = parseInt(r.substr(5,2),16)/255; } else { this.r = parseInt(r.substr(1,1),16)/15; this.g = parseInt(r.substr(2,1),16)/15; this.b = parseInt(r.substr(3,1),16)/15; } } else { var rgbPattern = /rgb\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)/ ; var c = r.match(rgbPattern); if (c) { this.r = parseInt(c[1],10)/255; this.g = parseInt(c[2],10)/255; this.b = parseInt(c[3],10)/255; } } } else { this.r = r; this.g = g; this.b = b; } return this; } // Mixes this colour with another in a specified proportion // c = other colour to mix // f = 0..1 where 0 is this colour and 1 is the new colour // Returns an RGB object RGB.prototype.mix = function(c,f) { return new RGB(this.r + (c.r-this.r) * f,this.g + (c.g-this.g) * f,this.b + (c.b-this.b) * f); } // Return an rgb colour as a #rrggbb format hex string RGB.prototype.toString = function() { var r = this.r.clamp(0,1); var g = this.g.clamp(0,1); var b = this.b.clamp(0,1); return("#" + ("0" + Math.floor(r * 255).toString(16)).right(2) + ("0" + Math.floor(g * 255).toString(16)).right(2) + ("0" + Math.floor(b * 255).toString(16)).right(2)); } // --------------------------------------------------------------------------------- // DOM utilities - many derived from www.quirksmode.org // --------------------------------------------------------------------------------- function drawGradient(place,horiz,colours) { for(var t=0; t<= 100; t+=2) { var bar = document.createElement("div"); place.appendChild(bar); bar.style.position = "absolute"; bar.style.left = horiz ? t + "%" : 0; bar.style.top = horiz ? 0 : t + "%"; bar.style.width = horiz ? (101-t) + "%" : "100%"; bar.style.height = horiz ? "100%" : (101-t) + "%"; bar.style.zIndex = -1; var f = t/100; var p = f*(colours.length-1); bar.style.backgroundColor = colours[Math.floor(p)].mix(colours[Math.ceil(p)],p-Math.floor(p)).toString(); } } function createTiddlyText(theParent,theText) { return theParent.appendChild(document.createTextNode(theText)); } function createTiddlyCheckbox(theParent,caption,checked,onChange) { var cb = document.createElement("input"); cb.setAttribute("type","checkbox"); cb.onclick = onChange; theParent.appendChild(cb); cb.checked = checked; cb.className = "chkOptionInput"; if(caption) wikify(caption,theParent); return cb; } function createTiddlyElement(theParent,theElement,theID,theClass,theText) { var e = document.createElement(theElement); if(theClass != null) e.className = theClass; if(theID != null) e.setAttribute("id",theID); if(theText != null) e.appendChild(document.createTextNode(theText)); if(theParent != null) theParent.appendChild(e); return(e); } // Add an event handler // Thanks to John Resig, via QuirksMode function addEvent(obj,type,fn) { if(obj.attachEvent) { obj['e'+type+fn] = fn; obj[type+fn] = function(){obj['e'+type+fn](window.event);} obj.attachEvent('on'+type,obj[type+fn]); } else obj.addEventListener(type,fn,false); } // Remove an event handler // Thanks to John Resig, via QuirksMode function removeEvent(obj,type,fn) { if(obj.detachEvent) { obj.detachEvent('on'+type,obj[type+fn]); obj[type+fn] = null; } else obj.removeEventListener(type,fn,false); } function addClass(e,theClass) { var currClass = e.className.split(" "); if(currClass.indexOf(theClass) == -1) e.className += " " + theClass; } function removeClass(e,theClass) { var currClass = e.className.split(" "); var i = currClass.indexOf(theClass); while(i != -1) { currClass.splice(i,1); i = currClass.indexOf(theClass); } e.className = currClass.join(" "); } function hasClass(e,theClass) { if(e.className) { if(e.className.split(" ").indexOf(theClass) != -1) return true; } return false; } // Find the closest relative with a given property value (property defaults to tagName, relative defaults to parentNode) function findRelated(e,value,name,relative) { name = name ? name : "tagName"; relative = relative ? relative : "parentNode"; if(name == "className") { while(e && !hasClass(e,value)) { e = e[relative]; } } else { while(e && e[name] != value) { e = e[relative]; } } return e; } // Resolve the target object of an event function resolveTarget(e) { var obj; if (e.target) obj = e.target; else if (e.srcElement) obj = e.srcElement; if (obj.nodeType == 3) // defeat Safari bug obj = obj.parentNode; return(obj); } // Return the content of an element as plain text with no formatting function getPlainText(e) { var text = ""; if(e.innerText) text = e.innerText; else if(e.textContent) text = e.textContent; return text; } // Get the scroll position for window.scrollTo necessary to scroll a given element into view function ensureVisible(e) { var posTop = findPosY(e); var posBot = posTop + e.offsetHeight; var winTop = findScrollY(); var winHeight = findWindowHeight(); var winBot = winTop + winHeight; if(posTop < winTop) return(posTop); else if(posBot > winBot) { if(e.offsetHeight < winHeight) return(posTop - (winHeight - e.offsetHeight)); else return(posTop); } else return(winTop); } // Get the current width of the display window function findWindowWidth() { return(window.innerWidth ? window.innerWidth : document.documentElement.clientWidth); } // Get the current height of the display window function findWindowHeight() { return(window.innerHeight ? window.innerHeight : document.documentElement.clientHeight); } // Get the current horizontal page scroll position function findScrollX() { return(window.scrollX ? window.scrollX : document.documentElement.scrollLeft); } // Get the current vertical page scroll position function findScrollY() { return(window.scrollY ? window.scrollY : document.documentElement.scrollTop); } function findPosX(obj) { var curleft = 0; while (obj.offsetParent) { curleft += obj.offsetLeft; obj = obj.offsetParent; } return curleft; } function findPosY(obj) { var curtop = 0; while (obj.offsetParent) { curtop += obj.offsetTop; obj = obj.offsetParent; } return curtop; } // Blur a particular element function blurElement(e) { if(e != null && e.focus && e.blur) { e.focus(); e.blur(); } } // Create a non-breaking space function insertSpacer(place) { var e = document.createTextNode(String.fromCharCode(160)); if(place) place.appendChild(e); return e; } // Remove all children of a node function removeChildren(e) { while(e.hasChildNodes()) e.removeChild(e.firstChild); } // Add a stylesheet, replacing any previous custom stylesheet function setStylesheet(s,id) { if(!id) id = "customStyleSheet"; var n = document.getElementById(id); if(document.createStyleSheet) // Test for IE's non-standard createStyleSheet method { if(n) n.parentNode.removeChild(n); // This failed without the   document.getElementsByTagName("head")[0].insertAdjacentHTML("beforeEnd"," "); } else { if(n) n.replaceChild(document.createTextNode(s),n.firstChild); else { var n = document.createElement("style"); n.type = "text/css"; n.id = id; n.appendChild(document.createTextNode(s)); document.getElementsByTagName("head")[0].appendChild(n); } } } // Replace the current selection of a textarea or text input and scroll it into view function replaceSelection(e,text) { if (e.setSelectionRange) { var oldpos = e.selectionStart + 1; e.value = e.value.substr(0,e.selectionStart) + text + e.value.substr(e.selectionStart); e.setSelectionRange( oldpos, oldpos); var linecount = e.value.split('\n').length; var thisline = e.value.substr(0,e.selectionStart).split('\n').length-1; e.scrollTop = Math.floor((thisline-e.rows/2)*e.scrollHeight/linecount); } else if (document.selection) { var range = document.selection.createRange(); if (range.parentElement() == e) { var isCollapsed = range.text == ""; range.text = text; if (!isCollapsed) { range.moveStart('character', -text.length); range.select(); } } } } // Returns the text of the given (text) node, possibly merging subsequent text nodes function getNodeText(e) { var t = ""; while (e && e.nodeName == "#text") { t += e.nodeValue; e = e.nextSibling; } return t; } //# ------------------------- //# LoaderBase: A (abstract) storage loader that loads the tiddlers from a list of HTML elements. //# The format of the elements is defined by subclasses of this loader through the internalizeTiddler implementation. //# Subclasses must implement: //# function getTitle(store, e) //# //# store must implement: //# function createTiddler(title). //# function LoaderBase() { } LoaderBase.prototype.loadTiddler = function(store,e,tiddlers) { var title = this.getTitle(store, e); if (title) { var tiddler = store.createTiddler(title); this.internalizeTiddler(store, tiddler, title, e); tiddlers.push(tiddler); } } LoaderBase.prototype.loadTiddlers = function(store,nodes) { var tiddlers = []; for (var t = 0; t < nodes.length; t++) { try { this.loadTiddler(store, nodes[t], tiddlers); } catch(e) { showException(e, config.messages.tiddlerLoadError.format([this.getTitle(store, nodes[t])])); } } return tiddlers; } //# ------------------------- //# SaverBase: a (abstract) storage saver that externalizes all tiddlers into a string, //# with every tiddler individually externalized (using this.externalizeTiddler) and joined with newlines //# Subclasses must implement: //# function externalizeTiddler(store, tiddler) //# //# store must implement: //# function getTiddlers(sortByFieldName) //# function SaverBase() { } SaverBase.prototype.externalize = function(store) { var results = []; var tiddlers = store.getTiddlers("title"); for (var t = 0; t < tiddlers.length; t++) results.push(this.externalizeTiddler(store, tiddlers[t])); return results.join("\n"); } //-------------------------------- // TW21Loader (inherits from LoaderBase) function TW21Loader() {}; TW21Loader.prototype = new LoaderBase(); TW21Loader.prototype.getTitle = function(store, e) { var title = null; if(e.getAttribute) title = e.getAttribute("tiddler"); if(!title && e.id) { var lenPrefix = store.idPrefix.length; if (e.id.substr(0,lenPrefix) == store.idPrefix) title = e.id.substr(lenPrefix); } return title; } TW21Loader.prototype.internalizeTiddler = function(store, tiddler, title, data) { var text = getNodeText(data.firstChild).unescapeLineBreaks(); var modifier = data.getAttribute("modifier"); var modified = Date.convertFromYYYYMMDDHHMM(data.getAttribute("modified")); var c = data.getAttribute("created"); var created = c ? Date.convertFromYYYYMMDDHHMM(c) : modified; var tags = data.getAttribute("tags"); var fields = {}; var attrs = data.attributes; for(var i = attrs.length-1; i >= 0; i--) { var name = attrs[i].name; if (attrs[i].specified && !TiddlyWiki.isStandardField(name)) { fields[name] = attrs[i].value.unescapeLineBreaks(); } } tiddler.assign(title,text,modifier,modified,tags,created, fields); return tiddler; }; //-------------------------------- // TW21Saver (inherits from SaverBase) function TW21Saver() {}; TW21Saver.prototype = new SaverBase(); TW21Saver.prototype.externalizeTiddler = function(store, tiddler) { try { var extendedFieldAttributes = ""; store.forEachField(tiddler, function(tiddler, fieldName, value) { // don't store stuff from the temp namespace if (!fieldName.match(/^temp\./)) extendedFieldAttributes += ' %0="%1"'.format([fieldName, value.escapeLineBreaks().htmlEncode()]); }, true); return '
%5
'.format([ tiddler.title.htmlEncode(), tiddler.modifier.htmlEncode(), tiddler.modified.convertToYYYYMMDDHHMM(), tiddler.created.convertToYYYYMMDDHHMM(), tiddler.getTags().htmlEncode(), tiddler.escapeLineBreaks().htmlEncode(), extendedFieldAttributes ]); } catch (e) { throw exceptionText(e, config.messages.tiddlerSaveError.format([tiddler.title])); } } // --------------------------------------------------------------------------------- // Deprecated code // --------------------------------------------------------------------------------- // @Deprecated: Use createElementAndWikify and this.termRegExp instead config.formatterHelpers.charFormatHelper = function(w) { w.subWikify(createTiddlyElement(w.output,this.element),this.terminator); } // @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead config.formatterHelpers.monospacedByLineHelper = function(w) { var lookaheadRegExp = new RegExp(this.lookahead,"mg"); lookaheadRegExp.lastIndex = w.matchStart; var lookaheadMatch = lookaheadRegExp.exec(w.source); if(lookaheadMatch && lookaheadMatch.index == w.matchStart) { var text = lookaheadMatch[1]; if(config.browser.isIE) text = text.replace(/\n/g,"\r"); createTiddlyElement(w.output,"pre",null,null,text); w.nextMatch = lookaheadRegExp.lastIndex; } } // @Deprecated: Use
or
instead of <
> config.macros.br.handler = function(place) { createTiddlyElement(place,"br"); } // Find an entry in an array. Returns the array index or null // @Deprecated: Use indexOf instead Array.prototype.find = function(item) { var i = this.indexOf(item); return i == -1 ? null : i; } // Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed() // @Deprecated: Use store.getLoader().internalizeTiddler instead Tiddler.prototype.loadFromDiv = function(divRef,title) { return store.getLoader().internalizeTiddler(store,this,title,divRef); } // Format the text for storage in an HTML DIV // @Deprecated Use store.getSaver().externalizeTiddler instead. Tiddler.prototype.saveToDiv = function() { return store.getSaver().externalizeTiddler(store,this); } // @Deprecated: Use store.allTiddlersAsHtml() instead function allTiddlersAsHtml() { return store.allTiddlersAsHtml(); } // @Deprecated: Use refreshPageTemplate instead function applyPageTemplate(title) { refreshPageTemplate(title); } // @Deprecated: Use story.displayTiddlers instead function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,slowly) { story.displayTiddlers(srcElement,titles,template,animate,slowly); } // @Deprecated: Use story.displayTiddler instead function displayTiddler(srcElement,title,template,unused1,unused2,animate,slowly) { story.displayTiddler(srcElement,title,template,animate,slowly); } // @Deprecated: Use functions on right hand side directly instead var createTiddlerPopup = Popup.create; var scrollToTiddlerPopup = Popup.show; var hideTiddlerPopup = Popup.remove; // @Deprecated: Use right hand side directly instead var regexpBackSlashEn = new RegExp("\\\\n","mg"); var regexpBackSlash = new RegExp("\\\\","mg"); var regexpBackSlashEss = new RegExp("\\\\s","mg"); var regexpNewLine = new RegExp("\n","mg"); var regexpCarriageReturn = new RegExp("\r","mg"); // --------------------------------------------------------------------------------- // End of scripts // --------------------------------------------------------------------------------- //]]>
Paintings finished in the year 2004
Paintings finished in the year 2005
Paintings finished in the year 2006
Paintings finished in the year 2007
Paintings finished before the year 2000
Paola Innocenti Malini is born in [[Genoa (Italy)|http://www.comune.genova.it/]]. Now she lives and [[works]] in [[Almere (Netherlands)|http://english.almere.nl/]] together with eight [[cats|Melissa]], three [[dogs|Romeo]] and a [[husband|Klaas]], the webmaster.
[img[m/AfrtEmiclaer.png]]
[img[m/AdamRoyal.png]]
Animals (specifically pets) as a subject.
\n&nbsp;&nbsp;[<img[Anthurium in Cancun|w/0505s51.jpg]]\n\n&nbsp;&nbsp;&copy; 2004, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s51.jpg]]\n\n&nbsp;&nbsp;Other [[paintings|works]]
\n\nExhibitions in the past\n\n-- Germany --\n\nCollective 20-31 January 2006 \n\n[[Gallery twenty-four (tegenwoordig Galerie Medial)|http://www.galerie-medial.de/]]\nKrossener Strasse 34\n10245 Berlin\n\nThere were 5 paintings of [[me|AboutUs]]: CaribbeanFicus, DreamingInSunset, EnchantingForest, [[Mimosa]] and SunsetWithLizard\n\n-- Netherlands --\n \nCollective 13 May 2006 \n\n[[Wulfshoeve|http://www.detelefoongids.nl/bg-l/14079434-wijkcentrum+wulfshoeve+de/vermelding/]]\nMoorselaar 69\n3862 VA Nijkerk - Paasbos \n\nThere were 4 paintings of [[me|AboutUs]]: LizardInCancun, [[Misty]], SelfPortraitWithCats and TulipFields\n\n-- Netherlands --\nCollective 13 June 2006 8:30 h - 16:00 h\n\n[[Amsterdam - Arena|http://www.amsterdamarena.nl/over_amsterdam_arena/en/]]\n[[We|AboutUs]] were there with DreamingInSunset, [[Misty]], SistersLove and more...\n\n-- United Kingdom --\nCollective 8-10 September 2006 \n\n[[Studio 95|http://www.viewlondon.co.uk/clubs/old-truman-brewery-studio-95-maps-9837.html]]\n91 Brick Lane,\nShoreditch,\nLondon,\nE1 6QL\n\nThere were 6 paintings of [[me|AboutUs]]: [[Parsifal]], [[Misty]], [[Melissa 2]], [[Falling]], [[Mimosa 2]] and DreamingOfCancun\n\n-- Netherlands --\nIndividual October 6 - 29, 2007 \n\n[[Royal Gallery|http://www.amsterdamroyalgallery.com/]] \nKoningsstraat 37\n1011 ET Amsterdam\n\nWe were there with AnthuriumInCancun, CaribbeanFicus, DreamingInSunset, DreamingOfCancun, [[Falling]], LizardInCancun, MauritiusLandscape, [[Melissa 2]], [[Mimosa]], [[Mimosa 2]], [[Misty]], OceanSunset, OnTheBeach, [[Parsifal]], PinkOrchid, SunsetWithLizard, WaitingTheTempest and WildSymmetry.\n\n-- Italy --\n\n[<img[Contemporanea - le cose dell'oggi|w/smallContemporanea.jpg]]\n\n&nbsp;&nbsp;&nbsp;&nbsp;Exhibition of more than 20 contemporary artists\n\n&nbsp;&nbsp;&nbsp;&nbsp;Contemporanea - le cose dell'oggi - [[Big picture|w/invitoContemporanea.jpg]]\n\n&nbsp;&nbsp;&nbsp;&nbsp;Where? \n&nbsp;&nbsp;&nbsp;&nbsp;* [[Castello estense|http://www.castelloestense.it/eng/]], \n&nbsp;&nbsp;&nbsp;&nbsp;* [[Ferrara|http://en.wikipedia.org/wiki/Ferrara]], \n&nbsp;&nbsp;&nbsp;&nbsp;* Emilia-romagna, Italy\n\n&nbsp;&nbsp;&nbsp;&nbsp;When? January 20 - 27, 2010 from 10:30h - 19:00h\n&nbsp;&nbsp;&nbsp;&nbsp;Opening January 19, 18:00h\n\n&nbsp;&nbsp;&nbsp;&nbsp;Free entrance \n\n
[<img[Austrian Memory|w/0505s69.jpg]]\n\n&nbsp;&nbsp;&copy; 2006, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s69.jpg]]\n\n&nbsp;&nbsp;Other [[paintings|works]]
If you check this box in the InterfaceOptions, TiddlyWiki will automatically SaveChanges every time you edit a tiddler. In that way there's a lot less chance of you losing any information. \n\nHowever, if you also have the SaveBackups checkbox ticked, you'll end up with a lot of archived files. You may prefer to select either one or the other.
\n[<img[Beach Palm|w/0505s54.jpg]]\n\n&nbsp;&nbsp;&copy; 2004, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 60x60 cm (24x24 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s54.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Bougainvilea in Dominica|w/0505s67.jpg]]\n&nbsp;&nbsp;&copy;2005, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s67.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Caribbean Ficus|w/0505p55.jpg]]\n\n&nbsp;&nbsp;&copy;2005, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 70x70 cm (28x28 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525p55.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]\n
You have three options:\n\n1. You can ask anything you want about the paintings by sending electronic mail message in Italian, English or Spanish to <<email paola at favolosa dot be>> for technical questions in Dutch or English (eventually German, but answer in English or Dutch) about this website <<email klaas at favolosa dot be>>\n\n\n2. Visit us at [[My Space|http://www.myspace.com/391222600]].\n\nYour data is 100% safe. We treat it as if it was our own and will not be used for any other purpose than to keep you and nobody else informed.
\nInnocentisArt\n[[News]]\n
\n[<img[Dominican Sea|w/0505s50.jpg]]\n\n&nbsp;&nbsp;&copy;2005, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s50.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
Get your own copy of TiddlyWiki\n\nBecause TiddlyWiki is a single HTML file, you've actually already downloaded the entire software just by viewing this site. If you want to be able to SaveChanges, you can save your own blank TiddlyWiki to your local drive by right clicking on [[this link to empty.html|http://www.tiddlywiki.com/empty.html]] and selecting 'Save link as...' or 'Save target as...'. You can choose where to save the file, and what to call it (but make sure that it's saved in HTML format and with an HTML extension).\n\n@@There can be confusing and subtle differences between different browsers. Some points to watch:@@\n* Do ''not'' use the File/Save command in your browser to save TiddlyWiki, because of SaveUnpredictabilities.\n* Make sure that you're saving in HTML (or "page source" format), not one of the new-fangled archive formats\nIf you're already using TiddlyWiki, see HowToUpgrade. If you want to save a complete copy of this site, including all the instructions and other text, you can use this [[this link|http://www.tiddlywiki.com/index.html]].
\n[<img[Dreaming in Sunset|w/0505f56.jpg]]\n&nbsp;&nbsp;&copy; 1996, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 97x97 cm (38x38 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525f56.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Dreaming of Cancun|w/0505s75.jpg]]\n\n&nbsp;&nbsp;&copy;2005, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 50x70 cm (20x28 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s75.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
{{{\n[img[title|filename]]\n[img[filename]]\n[img[title|filename][link]]\n[img[filename][link]]\n}}}\nImages can be included by their filename or full URL. It's good practice to include a title to be shown as a tooltip, and when the image isn't available. An image can also link to another tiddler or or a URL\n[img[Romanesque broccoli|fractalveg.jpg][http://www.flickr.com/photos/jermy/10134618/]]\n{{{\n[img[Fractal vegetable|fractalveg.jpg]]\n[img[This is shown as a tooltip|http://example.com/image.jpg]]\n[img[http://example.com/image.jpg]]\n[img[http://example.com/image.jpg][ExampleDotCom]]\n}}}\nThe tooltip is optional.\n\n[<img[Forest|forest.jpg][http://www.flickr.com/photos/jermy/8749660/]][>img[Field|field.jpg][http://www.flickr.com/photos/jermy/8749285/]]You can also float images to the left or right: the forest is left aligned with {{{[<img[}}}, and the field is right aligned with {{{[>img[}}}.\n@@clear(left):clear(right):display(block):You can use CSS to clear the floats@@\n{{{\n[<img[A woody bit of Hampstead Heath|forest.jpg]]\n[>img[A field near Milton Keynes|field.jpg]]\n}}}
There's now an option under InterfaceOptions to allow TiddlyWiki's animation effects to be turned off.
\n[<img[Enchanting Forest|w/0505o68.jpg]]\n\n&nbsp;&nbsp;&copy;2005, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 120x80 cm (47x31 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525o68.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Falling|w/0505p77.jpg]]\n\n&nbsp;&nbsp;&copy;2006, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 50x70 cm (20x28")\n\n&nbsp;&nbsp;[[Large picture|w/0525p77.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
Portraits of humans, sometimes including pets.
[[Our virtual gallery|gallery.html]]
A new feature for the ThirdVersion of TiddlyWiki is the ability to generate an RssFeed of its content. You can flick it on with a new addition to the InterfaceOptions. If enabled, it automatically saves an RSS 2.0 format file with the last few changed tiddlers in it. It's given the same filename as the TiddlyWiki file but with the ".xml" extension. Like all TiddlyWiki features, it's experimental, and will probably be a bit temperamental in your feedreader until the bugs are ironed out.\n\nNote that you must set the tiddler SiteUrl to be the URL where your TiddlyWiki will be published. (Don't put leading spaces or line breaks before or after the URL).
When TiddlyWiki is updated by Jeremy with bug fixes and minor new features. If you've been using an earlier revision of TiddlyWiki, here's how to upgrade to the latest version:\n* Open a ''local'' version of this TiddlyWiki file in FireFox or InternetExplorer (e.g. ''my_tw.html'')\n* SaveChanges to make sure that you've got a backup of it\n* Without closing that page, right-click on [[this link|http://www.tiddlywiki.com/empty.html]], select 'Save target' or 'Save link' and save it as ''my_tw.html'', replacing your existing file\n* Now go back to the previously opened copy of ''my_tw.html'' in your browser and SaveChanges again. It will inherit the newly saved code\n* Refresh the page in the browser to verify that the upgrade has worked
Meaning of //innocent// according to [[Webster|http://www.m-w.com/dictionary/innocent]]
Innocent is art or Innocenti's art is the art gallery of the Italian artist [[Paola Innocenti|PaolaInnocenti]].\nWebmaster is her husband [[Klaas]].\nRefer to [[Links]] for //the making of innocentisart.html//.
[>img[Self Portrait|w/PaolaFace.jpg]]\n\n[[Paola|PaolaInnocenti]] is born in [[Genoa (Italy)|http://www.comune.genova.it/]]. Lives together with some pets and a [[husband|Klaas]], the webmaster.\n\n* [[Gallery|gallery.html]]\n* Exhibitions\n** [[Present and future|News]]\n** [[Past|Archive]]\n\n&copy; 2005-2010, [[Paola Innocenti Malini|PaolaInnocenti]] and [[Klaas]]\nNon [[OpenSource|http://en.wikipedia.org/wiki/Open_source]] content of this website may not be redistributed without [[permission|Contact]].\n\nYour data is 100% safe. We treat it as if it was our own and will not be used for any other purpose than to keep you and nobody else informed. \n\n
// //''Code section:''\nversion.extensions.smiley = {major: 0, minor: 1, revision: 1, date: new Date("Jul 20, 2005")};\nconfig.macros.smiley = {}\nconfig.macros.smiley.handler = function(place,macroName,params)\n{\n var palette = ["transparent","#000000","#1a1507","#352e18","#464646","#666666","#a3141e","#b06b63","#cc9900","#dd9030","#dddddd","#e89d00","#edc32a","#f3cb3c","#fdf201","#fdf526","#ff3149","#ffac00","#ffbf06","#ffc846","#ffcc66","#ffd758","#ffdd01","#ffea7b","#ffed55","#ffffff"];\n var data = params;\n var imageMap = null;\n if(!data[0] || data[0] == ":-)" || data[0] == ":)")\n imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyffyffuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwboooowwwbllbbwwwboooowbrllbacwwwbbbbbrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";\n else if(data[0] == ":-(" || data[0] == ":(")\n imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyyyyyyuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwoooooowwrllbbwwwwbbbbbsrllbacwwbwwwwsbllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";\n else if(data[0] == ";-)" || data[0] == ";)")\n imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyxxxxxuujbaadyyyxxxeetttdabppphddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwboooowwwbllbbwwwboooowbrllbacwwwbbbbbrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";\n else if(data[0] == ":-|" || data[0] == ":|")\n imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyffyffuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwoooooowwrllbbwwwwbbbbbsrllbacwwwwwwwsrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";\n else if(data[0] == ":-D" || data[0] == ":D")\n imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyeeyeeuujbaadyyyeeyeetttdabppppyyyyypmmlbbwbbbbbbbbbbblbbwbkzzzzzzzkbwbbwbfzzzzzzzfbwbbwbkzzzzzzzkbwbacwbkzzzzzkblcaablsbkzzzkblibaaablsbbbbblibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";\n else\n createTiddlyElement(place,"span",null,"errorNoSuchMacro","unknown smiley");\n if(imageMap)\n {\n var box = createTiddlyElement(place,"span",null,"smiley",String.fromCharCode(160));\n box.style.position = "relative";\n box.style.width = "15px";\n box.style.height = "15px";\n box.style.marginLeft = "1px";\n box.style.marginRight = "1px";\n box.style.paddingRight = "12px";\n box.style.verticalAlign = "top";\n\n //now divide into 15x15 grid and create each pixel\n // rows\n for(r=0; r<15; r++)\n {\n // columns\n for(c=0; c<15; c++)\n {\n //create each pixel with the correct background\n var pix = document.createElement("img");\n pix.className = "smileyPixel";\n pix.style.position = "absolute";\n pix.border = 0;\n pix.style.top = r + "px";\n pix.style.left = c + "px";\n pix.style.width = "1px";\n pix.style.height = "1px";\n pix.style.backgroundColor = palette[imageMap.charCodeAt((r*15)+c)-97];\n pix.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";\n box.appendChild(pix);\n }\n }\n }\n}\n
InterfaceOptions are displayed when you click the 'options' button on the right. They are saved in a cookie on your browser, making them sticky between visits:\n<<<\n<<tiddler OptionsPanel>>\n<<<\n* The user name for edits should be set //before// starting to edit things (ouch. another bug)\n* SaveBackups gives the option of whether to generate backup files \n* AutoSave gives the option of automatically saving every time a change is made\n* RegExpSearch allows more complex search expressions\n* CaseSensitiveSearch does as its name implies\n
\n\nKlaas is born 1956 in [[Utrecht, Netherlands|http://en.wikipedia.org/wiki/Utrecht_(city)]], after [[VWO|http://en.wikipedia.org/wiki/Voorbereidend_wetenschappelijk_onderwijs]] he decided not to go to university, but started to work in \n[[ICT|http://www.linkedin.com/pub/klaas-van-buiten/5/b65/4a3]] and now busy with [[Web 2.0|http://en.wikipedia.org/wiki/Web_2.0]]. Married [[Paola|PaolaInnocenti]] after 4 years living together in 2004.\n\nStarted 9-9-9 his own [[Limited company|http://en.wikipedia.org/wiki/Limited_company]] with the name [[Pikappabi B.V.|http://www.linkedin.com/companies/pikappabi-b.v.]]\n\n\n\nVarious\n\n[[How many people in Netherlands|http://www.cbs.nl/nl-NL/menu/themas/bevolking/cijfers/extra/bevolkingsteller.htm]]\n\n\nThree groups of people\n\n=====================\nPeople who believe there are less than three groups of people\nPeople who believe there are more than three groups of people\nPeople who believe there are exactly three groups of people\n=====================\n
Improved explanation in ReusingThisSite
The format for PrettyLinks allows for links that open local or network folders. Depending on your browser and operating system, the folders are opened in Windows Explorer, the OS X Finder, or the browser itself.\n\nEdit this tiddler to see [[this link to a Windows network share|file://///server/share/folder/path/name]], [[this link to a Windows drive-mapped folder|file:///c:/folder/path/name]] and [[this link to a Unix-style folder|file:///folder/path/name]].
[[Guestbook|http://www.innocentisart.nl/index.html#Links]] and webring
\n[<img[Lizard in Cancun|w/0505s53.jpg]]\n\n&nbsp;&nbsp;&copy;2004, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s53.jpg]]\n\n&nbsp;&nbsp;Other [[paintings|works]]
*[[News]]\n*[[Art Gallery|gallery.html]]\n*[[Exhibitions|Archive]]\n*InnocentisArt\n*[[Biography|PaolaInnocenti]]\n*[[Contact]]\n*[[Media]]\n*[[Sale]]\n\nSoftware [[TiddlyWiki|http://www.tiddlywiki.com]] \nBrowser [[Firefox|http://www.mozilla.org/products/firefox/]]\nHost [[Online|http://www.online.nl]]\n\n\n
<!--{{{-->\n\n<h3>Links</h3>\n\n<font size=2>\n\n<center>\n<a href="http://www.koekjes.net/cgi-bin/gastenboek/schrijven.pl?innocenti"><img src="w/GBinnocenti.png" alt="GuestBook" \ntitle="We appreciate your review" border ="0"/>&nbsp;&nbsp;&nbsp;&nbsp;\n</center>\n\n</font>\n\n<script type="text/javascript"\nsrc="http://ss.webring.com/navbar?f=j;y=darkmind60;u=defurl"></script>\n<noscript><center><table bgcolor=gray cellspacing=0 border=2 bordercolor=red>\n<tr><td><table cellpadding=2 cellspacing=0 border=0><tr><td align=center>\n<font face=arial size=-1>This site is a member of WebRing. \nTo browse visit <a href="http://ss.webring.com/navbar?f=l;y=darkmind60;u=defurl">\nhere</a>.</font></td></tr></table></td></tr></table></center></noscript>\n\n<!--\n\nCOMMENT FIOR LATER USE Hier begint de Koekjes.Net gastenboek-code http://www.koekjes.net\n\n<a href="http://www.koekjes.net/gastenboek" target="_blank">\n<img src="http://www.koekjes.net/images/t1/t1boven1.gif" border="0" width=130></a>\n<br><br>\n\n<a href="http://www.koekjes.net/cgi-bin/gastenboek/schrijven.pl?innocenti">\n&nbsp;&nbsp;If you like to review</a>\n<br><br>\n\n<a href="http://www.koekjes.net/cgi-bin/gastenboek/bekijken.pl?innocenti">\n&nbsp;&nbsp;Enjoy passed reviews</a>\n<br><br>\n\nHier stopt de Koekjes.Net gastenboek-code http://www.koekjes.net\n\n<script language="JavaScript1.2" src="http://www.altavista.com/static/scripts/translate_engl.js"></script>\n&nbsp;&nbsp;&nbsp; \n END COMMENT FOR LATER USE\n -->\n\n<!--}}}-->
\n[<img[Mauritius Landscape|w/0505s57.jpg]]\n\n&nbsp;&nbsp;&copy;2004, PaolaInnocenti \n&nbsp;&nbsp;Oil on canvas - 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s57.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
* Printed media - Books, magazines etcetera\n\n[<img[Who is who in visual art|w/whoswho61.jpg]]\n\nIn the 2009 edition of [[Who's Who In Visual Art|http://www.whoisverlag.art-domain.com/index-en.html]] you can find us on page 61.\n
\n[<img[Melissa|w/0505a52.jpg]]\n\n&nbsp;&nbsp;&copy; 2004, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525a52.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Melissa 2|w/0505a78.jpg]]\n\n&nbsp;&nbsp;&copy;2006, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 50x60 cm (20x24 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525a78.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
[<img[Mimosa|w/0505p58.jpg]]\n\n&nbsp;&nbsp;&copy;2004, PaolaInnocenti \n&nbsp;&nbsp;Oil on canvas - 70x70 cm (28x28 ")\n\n&nbsp;&nbsp;[[Large picture|w/0505p58.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Mimosa2|w/0505p76.jpg]]\n\n&nbsp;&nbsp;&copy;2005, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 50x50 cm (20x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525p76.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Misty|w/0505a73.jpg]]\n\n&nbsp;&nbsp;&copy;2006, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 50x60 cm (20x24 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525a73.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Ocean Sunset|w/0505s70.jpg]]\n\n&nbsp;&nbsp;&copy;2006, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 80x60 cm (31x24 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s70.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[On the Beach|w/0505s80.jpg]]\n\n&nbsp;&nbsp;&copy;2007, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 40x50 cm (16x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s80.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
Subjects that don't fit very well in any of fixed categories:\nAnimals, Figurative, Plants and Flowers, Sea and Landscape
[<img[Palms|w/0505p62.jpg]]\n&nbsp;&nbsp;&copy;2004, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525p62.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\nBiography\nThe artist was born in Genoa (Italy). At the age of 10 she was introduced to oil technique by a family friend, painter Bruno Vignini. From this moment she never stopped to paint even if during her life she had made different choice of work. She graduated at [[liceo scientifico|http://it.wikipedia.org/wiki/Liceo_scientifico]] where she studied history of art and then she entered at [[Università degli studi di Genova|http://en.wikipedia.org/wiki/University of Genoa]] to study medicine for 6 years, but at the end she decided to change career and she started to work in the family restaurant business and later she owned a restaurant in Genoa. In 1994 she moved to Mexico where she owned an Italian restaurant and she found the right atmosphere for her art. In 2000 she moved to Netherlands and here she started to dedicate herself to art only.\n\nRecognition\nAmerican artist Charles Brown says about her work:\nPaola's work is very expressive in nature, yet quietly introspective. She displays a bold use of color that adds to the dynamism to her subjects which, though varied in theme, always seem to remind one of whimsy, childhood playfulness of not entirely a dream, like enchantment, reminiscent of [[Henri Rousseau|http://it.wikipedia.org/wiki/Henri_Rousseau]] or [[Marc Chagall|http://en.wikipedia.org/wiki/Marc_Chagall]], yet with an emotional introspection more aligned with the likes of [[Edvard Munch|http://en.wikipedia.org/wiki/Edvard_Munch]]. Folk art in style, yet universal by nature.\n\nIn 2005 she received a honorable mention from [[Art Interview|http://art-interview.com/Issue_003/index.html]] magazine international on line competition for DreamingInSunset
\n[<img[Parsifal|w/0505a79.jpg]]\n\n&nbsp;&nbsp;&copy;2006, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 50x60 cm (20x24 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525a79.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Pink Orchid|w/0505p63.jpg]]\n\n&nbsp;&nbsp;&copy;2005, Paola Innocenti\n&nbsp;&nbsp;Oil on canvas - 60x60 cm (24x24 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525p63.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
Floral subjects
You can now link to [[external sites|http://www.amsterdamroyalgallery.com]] or [[ordinary tiddlers|TiddlyWiki]] with ordinary words, without the messiness of the full URL appearing. Edit this tiddler to see how.\n\nYou can also LinkToFolders.
RegExpSearch uses JavaScript's [[RegExp syntax|http://www.programmershelp.co.uk/docs/javascript/regexp.html#1193188]] to allow flexible searches.
Get the latest version at [[TiddlyWiki|http://www.tiddlywiki.com]]\nRefer to HowToUpgrade
\n[<img[Romeo|w/0505a59.jpg]]\n\n&nbsp;&nbsp;&copy; 2005, PaolaInnocenti\n&nbsp;&nbsp;oil on canvas - 60 x 60 cm (24 x 24 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525a59.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
NotAvailable
[[Art Wanted|http://www.artwanted.com/artist.cfm?artid=25864]]\n\n[[Anthurium in Cancun|http://www.artwanted.com/imageview.cfm?id=317751]]\n[[Melissa|http://www.artwanted.com/imageview.cfm?ID=317746]]\n[[Pink Orchid|http://www.artwanted.com/imageview.cfm?ID=317750]]\n\n[[Artists de (Germany)|http://www.artists.de/paolainnocenti.html]]\n\n[[CaribbeanFicus]], [[DreamingInSunset]], [[Falling]] [[Misty]], [[OnTheBeach]], [[Parsifal]] [[WaitingTheTempest]], [[WildSymmetry]]
This is one of the InterfaceOptions you can use to customize TiddlyWiki. It determines whether TiddlyWiki creates a backup file each time you SaveChanges. I'd suggest keeping it switched on for safety!
You can SaveChanges if you're using FireFox or InternetExplorer:\n# if you're using Windows XP you might run into ServicePack2Problems\n# right click on [[this link|empty.html]] and select 'Save link as...' or 'Save target as...'\n** do ''not'' try to use the File/Save command in your browser because of SaveUnpredictabilities.\n** choose where to save the file, and what to call it (but keep the .HTML extension)\n# open the newly downloaded file in your browser\n# click the 'options' button on the right to set your username\n# edit, create and delete the tiddlers you want\n** you can change the SpecialTiddlers to change the SiteTitle and MainMenu etc.\n# click the 'save changes' button on the right to save your changes\n# TiddlyWiki will make a backup copy of the existing file, and then replace it with the new version\n
This causes a blank, template TiddlyWiki to be saved alongside your file when you SaveChanges. It's intended to help people who are distributing TiddlyWikiAdaptations, and isn't needed when you're an end-user of TiddlyWiki.\n\nThe template TiddlyWiki is called 'empty.html'.
Mainly outdoor subjects, sometimes includes animals or florals
\n[<img[Self Portait with Cats|w/0505f71.jpg]]\n\n&nbsp;&nbsp;&copy;1996, Paola Innocenti\n&nbsp;&nbsp;Oil on canvas - 120x80 cm (47x31")\n\n&nbsp;&nbsp;[[Large picture|w/0525f71.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
// //''Code section:''\n// // Originally by Alan Hecht - Correction 'var data' by Paulo Soares\nversion.extensions.email = {major: 1, minor: 1, revision: 1, date: new Date("Feb 17, 2006")};\nconfig.macros.email = {}\nconfig.macros.email.handler = function(place,macroName,params)\n{\nvar temp = params.join(" ");\nvar data = temp.split("?");\nvar recipient = data[0];\nrecipient = recipient.replace(" at ","@").replace(" dot ",".");\nrecipient = recipient.replace(/\ss/g,"");\nvar optional = data[1] ? "?" + data[1] : "";\nvar theLink = createExternalLink(place,"ma"+"il"+"to:"+recipient+optional);\ntheLink.appendChild(document.createTextNode(recipient))\n}\n
[<img[Sister's Love|w/0505f72.jpg]]\n\n&nbsp;&nbsp;Dedicated to Mara\n&nbsp;&nbsp;&copy;2006, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas 80x60 cm (31x24 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525f72.jpg]] \n&nbsp;&nbsp;Private property - not for sale\n\n&nbsp;&nbsp;Other [[paintings|works]]
Paola Innocenti Malini's paintings are mirror images of the mind
InNoCent=Art
http://www.innocentisart.nl/
DefaultTiddlers DownloadSoftware HowToUpgrade LatestStuff MainMenu ReusingThisSite SiteSubtitle SiteTitle TiddlyWiki UsingThisSite TestEx\n
\n[<img[Spring in Holland|w/0505s66.jpg]]\n\n&nbsp;&nbsp;&copy;2005, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s66.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Sunset with Lizard|w/0505s60.jpg]]\n\n&nbsp;&nbsp;&copy;2004, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s60.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
Test Base64 with LeetKey
\n[<img[the Gate|w/0505f74.jpg]]\n\n&nbsp;&nbsp;&copy;2006, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 80x120 cm (38x38 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525f74.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
The original software can be found [[here|http://www.tiddlywiki.com]]
Before TiddlyWiki supported [[Plugins]], several independent developers created their own extended adaptations to support new features. These can be considered forks of the original core code, and won't necessarily be based on the latest version. For that reason, the trend more recently has been for developers to release new features as [[Plugins]] that can be readily mixed and matched and upgraded to the latest version.\n\nAdaptations include:\n* TimoBenk's TiddlyTasks at http://m28s01.vlinux.de/tiddlytasks.html\n* KeithHodges' TiddlyPom at http://www.warwick.ac.uk/~tuspam/tiddlypom.html\n* RodneyGomes' RoWiki, based on PyTW, at http://rodney.gotdns.com/\n* LarsEnglund's TiddlyWikiRDF at http://larsenglund.com/TiddlyWikiRDF/\n* BramChen's PrinceTiddlyWiki at http://ptw.sf.net/index-en.html\n* JoshGoebel's ServerSideWiki at http://www.serversidewiki.com\n* MasakiYatsu's LesserWiki at http://lesserwiki.org/\n* MichaelBridgen's StickyWiki at http://www.squaremobius.net/~mikeb/Darcs/sticky-wiki/\n* DavidHarper's BloTid, at http://www.spacecoastweb.net/BloTid/Tiddly/\n* JacquesTurbé's TidliPo, in French at http://avm.free.fr/tidlipo.html\n* JoeRaii's pytw at http://www.cs.utexas.edu/~joeraii/pytw/ and his Siglet at http://www.cs.utexas.edu/~joeraii/siglet/\n* JároliJózsef's MagyarTiddlyWiki at http://innen.hu/MagyarTiddlyWiki in Hungarian\n* Yoshimov's EncryptedTiddlyWiki, at http://wiki.yoshimov.com/?page=EncryptedTiddlyWiki\n* TiagoDionizio's TsWiki using Tcl and SQLite, at http://mega.ist.utl.pt/~tngd/wiki/\n* TimMorgan's ZiddlyWiki based on Zope, at http://ziddlywiki.org/\n* SteveRumsby's YetAnotherTiddlyWikiAdaptation at http://www.rumsby.org/yatwa/\n* PhonoHawk's PerlTiddlyWiki at http://ccm.sherry.jp/tiddly/\n* NathanBower's GTDTiddlyWiki at http://shared.snapgrid.com/gtd_tiddlywiki.html\n* GeetDuggal's PileTiddly at http://www.geetduggal.com/PileTiddly/\n* DanPhiffer's TiddlyWikiRemote at http://phiffer.org/tiddly/\n* JonnyLeRoy's TiddlyTagWiki at http://www.digitaldimsum.co.uk/\n* JodyFoo's TagglyWiki at http://informationality.com/tagglywiki/tagglywiki.html\n* ChristianHauck's at http://www.christianhauck.net/html/14300.html\n* TonyLownds's TiddlyHacks at http://tony.lownds.com/tiddly/dev/cgi/index.cgi\n* AlanHecht's QwikiWeb at http://snipurl.com/qwikiweb\n* TimCuthbertson and MattGiuca's TiddlyWikiCSS at http://codestar.lidonet.net/misc/tiddlywikicss.html\n** PeterLazarev's further improvements at http://petka.webhop.net/#NiceTiddlyWiki\n* PatrickCurry and GabrielJeffrey's PhpTiddlyWiki at http://www.patrickcurry.com/tiddly/\n\n* There's also KevemBuangga's TiddlyWikiClone at http://www.kevembuangga.com/hwk/hailiwiki.htm\n* Also inspired by TiddlyWiki, Dr MichaelRees' [[DotWikIE|http://comet.it.bond.edu.au/dotsoft/Pages/dotwikiehome.aspx]],\n* And AndreNho's StickWiki at http://stickwiki.sourceforge.net/\n\nSee also the earlier FirstVersionAdaptations and SecondVersionAdaptations. There's also some TiddlyWikiTools that extend TiddlyWiki.
SaqImtiaz and KalleAlm have just released a release candidate of [[TiddlySnip|http://tiddlysnip.com/]], a Firefox extension that lets you use your TiddlyWiki as a scrapbook. Simply select text, right click and choose {{{TiddlySnip selection}}}. Next time you open your TiddlyWiki file, your snippets will be there, already tagged and organised.\n\nThe first add-on tool for TiddlyWiki was IsaoSonobe's TiddlyWikiPod that let's you transfer the contents of a TiddlyWiki to an iPod (well, not an iPod shuffle).\n\nMarkusKoch has [[released a script|http://bloggern.de/cms/wiki.php]] that allows Postnuke to publish content in TiddlyWiki format (Postnuke is a popular full-blown open source content management system).\n\nThe 33ad blog features a neat tool by JeremyKelley to create a calendar in TiddlyWiki table format: http://33ad.org/tools/gtdtwcal.php\n\nFor IRC users, ZygmuntKrynicki has started a #tiddlywiki channel on freenode (irc.freenode.net). He's also created an version-controlled archive of the TiddlyWiki source code; find out more at http://www.suxx.pl/wiki/#RepozytoriumTiddlyWiki.
--- Italy ---\n\nWhen?\n 20 June 2006 - 10 October 2006\n\nWhat?\nExhibition\n\nWhere?\nChurch [[Santa Maria a Gradillo|http://www.wagnertours.it/Gradillo/ravello_s.m.gradillo_1.htm]] - Ravello (Costiera Amalfitana)\n\nOrganization?\n[[Capri Art Gallery|http://www.capriartgallery.com/News.asp?NewsID=38]] together with [[Duomo di Ravello|http://www.chiesaravello.com/programmaassociazione/index.asp]]\n
\n[<img[Tulip Fields|w/0505s65.jpg]]\n\n&nbsp;&nbsp;&copy;2005, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 50x70 cm (20x28 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s65.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Tulips|w/0505p61.jpg]]\n\n&nbsp;&nbsp;&copy;2005, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 50x70 cm (20x28 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525p61.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
Thumbnails of all the works are tagged Gallery with a link to our [[virtual|gallery.html]] gallery where you can choose your own path through the collection.
\n[<img[Waiting the Tempest|w/0505s81.jpg]]\n\n&nbsp;&nbsp;&copy;2007, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 50x40 cm (20x16 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525s81.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
This site is a member of [[The Art Cove Ring of Artists|http://ss.webring.com/navbar?f=l;y=darkmind60;u=defurl]]\n\n[img[RingLogo|w/WebRingLogo.gif]]\n\n[[Check|http://ss.webring.com/navbar?f=l;y=darkmind60;u=defurl]] it out, please\n\n
\n[<img[Wild Symmetry|w/0505p82.jpg]]\n\n&nbsp;&nbsp;&copy;2007, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 40x50 cm (16x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525p82.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
\n[<img[Ziggy|w/0505a64.jpg]]\n\n&nbsp;&nbsp;&copy;2005, PaolaInnocenti\n&nbsp;&nbsp;Oil on canvas - 70x50 cm (28x20 ")\n\n&nbsp;&nbsp;[[Large picture|w/0525a64.jpg]] \n\n&nbsp;&nbsp;Other [[paintings|works]]
TiddlyWiki Help
[[Animals|AnimalSub]]\n\n [[Melissa]], [[Melissa 2]], [[Misty]], [[Parsifal]], [[Romeo]], [[Ziggy]].\n\n[[Figurative|FigurativeSub]]\n\nDreamingInSunset, SelfPortraitWithCats, SistersLove, TheGate.\n\n[[Plants and flowers|PlantsAndFlowers]]\n\nCaribbeanFicus [[Falling]], [[Mimosa]], [[Mimosa 2]], [[Palms]], PinkOrchid, [[Tulips]].\n\n[[Sea and landscape|SeaAndLandscape]]\n\nAnthuriumInCancun, AustrianMemory, BeachPalm, BougainvileaInDominica, \nDominicanSea, DreamingOfCancun, LizardInCancun, MauritiusLandscape, \nOceanSunset, SpringInHolland, SunsetWithLizard, TulipFields.\n\n[[Other|OtherSub]]\n\nEnchantingForest.

Links

GuestBook    
This site is a member of WebRing. To browse visit here.