Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
<<tabs Background
"Education" "Education" [[Education]]
"Experience" "Experience" [[Experience]]
"Service & Memberships" "Service & Memberships" [[Service & Memberships]]>>
Presenter __underlined__:
<html>
<p>
<b>Main, J.A.</b>, Sadek, F., and <u>Lew, H.S.</u> (2009). “<a href="pubs/Main-Sadek-Lew-PROTECT2009.pdf">Assessment of robustness and disproportionate collapse vulnerability of steel moment-frame buildings</a>.” <i>Proc., Second International Workshop on Performance, Protection & Strengthening of Structures under Extreme Loading (PROTECT2009)</i>, August 19-21, 2009, Hayama, Japan.
<p>
<b><u>Main, J.A.</u></b> and Sadek, F. (2009). “<a href="pubs/Main-Sadek-Structures09.pdf">Development of 3D models of steel moment-frame buildings for assessment of robustness and progressive collapse vulnerability</a>.” <i>Proc., ASCE Structures Congress</i>, April 30 – May 2, 2009, Austin, TX.
<p>
<u>Sadek, F.</u>, <b>Main, J.A.</b>, Lew, H.S., Robert, S.D., and Chiarito, V.P. (2009). “<a href="pubs/Sadek-Main-Lew-Robert-Chiarito-Structures09.pdf">Testing and analysis of steel beam-column assemblies under column removal scenarios</a>.” <i>Proc., ASCE Structures Congress</i>, April 30 – May 2, 2009, Austin, TX.
<p>
<u>Sadek, F.</u>, Lew, H. S., <b>Main, J. A.</b>, and Gross, J. L., (2008), "Performance of seismic moment resisting connections under column removal scenario," <i>Proc., International Workshop on Connections in Steel Structures 2008 (Connections VI), AISC</i>, June 23-25, 2008, Chicago, IL.
<p>
<u>Duthinh, D.</u>, <b>Main, J.A.</b>, Wright, A., and Simiu, E. (2007). "Mean recurrence intervals of failure wind loads," <i>Proc., 12th Int. Conf. on Wind Engineering</i>, July 1-6, 2007, Cairns, Australia, 1647-1654.
<p>
<b>Main, J.A.</b> (2007). "<a href="pubs/JAMain-ICWE12.pdf">Interpolation procedures for database-assisted design</a>." <i>Proc., 12th Int. Conf. on Wind Engineering</i>, July 1-6, 2007, Cairns, Australia, 1087-1094. (<a href="pres/JAMain-ICWE12.pdf">presentation</a> delivered by <u>Dat Duthinh</u>)
<p>
<u>Gazonas, G.A.</u> and <b>Main, J.A.</b> (2007). "Air blast loading of cellular media." <i>Experimental Analysis of Nano and Engineered Materials and Structures, Proc., 13th International Conference on Experimental Mechanics</i>, July 1-6, 2007, Alexandroupolis, Greece. (<a href="http://www.springerlink.com/content/k85v421206207m24/">http://www.springerlink.com/content/k85v421206207m24/</a>)
<p>
Duthinh, D., <b>Main, J.A.</b>, Wright, A., and Simiu, E. (2007). "Mean Recurrence Intervals of Failure Wind Loads," <i>Proc., ESREL 2007 Safety and Reliability Conference</i>, June 25-27, Stavanger, Norway. (presented by <u>Jean-Paul Pinelli</u>)
<p>
<b><u>Main, J.A.</b></u> (2007). "<a href="pubs/JAMain-Structures2007.pdf">Database-assisted design of low-rise buildings for wind loads: recent developments and comparisons with ASCE/SEI 7-05</a>." <i>Proc., ASCE Structures Congress</i>, May 16-19, 2007, Long Beach, California, CD-ROM. (<a href="pres/JAMain-Structures2007.pdf">presentation</a>)
<p>
Bienkiewicz, B., Endo, M., <b><u>Main, J.A.</b></u>, and Fritz, W.P. (2007). "<a href="pubs/Bienkiewicz-Endo-Main-Fritz-UJNR2007.pdf">Comparative inter-laboratory study of wind loading on low industrial buildings</a>." <i>Proc., 39th Joint Meeting of the US-Japan Joint Panel on Wind and Seismic Effects, UJNR</i>, May 14-16, 2007, Tsukuba, Japan, 409-417. (<a href="pres/Bienkiewicz-Endo-Main-Fritz-UJNR2007.pdf">presentation</a>)
<p>
<u>Lombardo, F.T.</u> and <b>Main, J.A.</b> (2006). "<a href="pubs/Lombardo-Main-Structures2006.pdf">Automated extraction of wind data from archived ASOS (Automated Surface Observing System) weather reports</a>." <i>Proc., ASCE Structures Congress</i>, May 18-20, 2006, St. Louis, Missouri, CD-ROM.
<p>
<b><u>Main, J.A.</b></u> (2005). "Combining wind pressure databases with structural analysis to predict peak responses for rigid buildings." <i>Proc., 5th ~Asia-Pacific Conf. on Wind Eng.</i>, CD-ROM.
<p>
<b><u>Main, J.A.</b></u> (2005). "Interpolation issues in the estimation of peak internal forces using wind pressure databases." <i>Proc., 5th ~Asia-Pacific Conf. on Wind Eng.</i>, CD-ROM.
<p>
<b><u>Main, J.A.</b></u> and Gazonas, G.A. (2005). "<a href="pubs/Main-Gazonas-SCCM2005.pdf">Impulsive loading of cellular media in sandwich construction</a>." <i>Proc., 14th APS Topical Conference on Shock Compression of Condensed Matter</i>, 1539-1542. [Reprinted in the following report: Gazonas, G.A. (2006) <i>Topics in Computational Modeling of Shock and Wave Propagation</i>, ARL-SR-145; US Army Research Laboratory: Aberdeen Proving Ground, MD, September 2006.]
<p>
<b><u>Main, J.A.</b></u> and Jones, N.P. (2004). "<a href="pubs/Main-Jones-EM2004.pdf">Combined effects of flexural stiffness and axial tension on damper effectiveness in slender structures</a>." <i>Proc., 17th ASCE Eng. Mech. Conf.</i>, University of Delaware, Newark, DE, CD-ROM.
<p>
<u>Zuo, D.</u>, Jones, N.P., and <b>Main, J.A.</b> (2004). "Vortex- and rain-wind-induced stay cable vibrations in a three-dimensional environment." <i>Proc., 5th International Colloquium on Bluff Body Aerodynamics and Applications</i>, Ottawa, Canada.
<p>
<b><u>Main, J.A.</b></u> and Jones, N.P. (2003). "<a href="pubs/Main-Jones-CableDyn2003.pdf">Influence of rubber bushings on stay-cable damper effectiveness</a>." <i>Proc., 5th Int. Symp. On Cable Dynamics</i>, 445-452.
<p>
<b><u>Main, J.A.</b></u> and Jones, N.P. (2002). "<a href="pubs/Main-Jones-EM2002.pdf">Analytical investigation of the performance of a damper with a friction threshold for stay-cable vibration suppression</a>." <i>Proc., 15th ASCE Eng. Mech. Conf.</i>, Columbia University, New York, NY, CD-ROM.
<p>
<b><u>Main, J.A.</b></u> and Jones, N.P. (2001). "<a href="pubs/Main-Jones-CableDyn2001.pdf">Analysis and design of linear and nonlinear dampers for stay cables</a>." <i>Proc., 4th Int. Symp. on Cable Dynamics</i>, 309-316.
<p>
<b><u>Main, J.A.</b></u>, Jones, N.P., and Yamaguchi, H. (2001). "<a href="pubs/Main-Jones-Yamaguchi-CableDyn2001.pdf">Characterization of rain-wind-induced stay-cable vibrations from full-scale measurements</a>." <i>Proc., 4th Int. Symp. on Cable Dynamics</i>, 235-242.
<p>
<u>Ozkan, E.</u>, <b>Main, J.A.</b>, and Jones, N.P. (2001). "Long-term measurements on a cable-stayed bridge.", <i>Proc., IMAC-XIX Conf.</i>, Kissimmee, FL, CD-ROM.
<p>
Ozkan, E., <b>Main, J.A.</b>, and <u>Jones, N.P.</u> (2001). "<a href="pubs/Ozkan-Main-Jones-APCWE-V.pdf">Full-scale measurements on a cable-stayed bridge</a>." <i>Proc. 5th Asia-Pacific Conf. on Wind Eng., Japan Assoc. for Wind Eng.</i>, JWE No. 89, Kyoto, Japan, 553-556.
<p>
<b>Main, J.A.</b> and <u>Jones, N.P.</u> (2001). "<a href="pubs/Main-Jones-APCWE-V.pdf">Measurement and mitigation of stay-cable vibration</a>." <i>Proc. 5th Asia-Pacific Conf. on Wind Eng., Japan Assoc. for Wind Eng.</i>, JWE No. 89, Kyoto, Japan, 557-560.
<p>
Ozkan, E., <b>Main, J.A.</b>, and Jones, N.P. (2001) "<a href="pubs/Ozkan-Main-Jones-ACWE-1.pdf">Investigation of cable-deck interaction using full-scale measurements on a cable-stayed bridge</a>." <i>Proc., 1st Americas Conf. on Wind Eng.</i>, Clemson SC, CD-ROM.
<p>
<b>Main, J.A.</b> and <u>Jones, N.P.</u> (2000). "<a href="pubs/Main-Jones-Structures2000.pdf">A comparison of full-scale measurements of stay cable vibration</a>." <i>Proc. 15th Structures Congress</i>, ASCE, New York, CD-ROM.
<p>
<b>Main, J.A.</b> and <u>Jones, N.P.</u> (1999). "<a href="pubs/Main-Jones-ICWE10.pdf">Full-scale measurements of stay cable vibration</a>." <i>Proc. 10th Int. Conf. on Wind Eng.</i>, Balkema, Rotterdam, The Netherlands, 963-970.
<p>
<b>Main, J.A.</b> and <u>Jones, N.P.</u> (1998). "<a href="pubs/Main-Jones-EM1998.pdf">Stay cable vibration measurements, mechanisms and mitigation</a>." <i>Proc. 12th ASCE Eng. Mech. Conf.</i>, La Jolla, CA, May, 1998.
<p>
Jones, N.P., Porterfield, M.L., and <b>Main, J.A.</b> (1997). "Measurements for mitigation of stay-cable vibration." <i>Proc. 8th US National Conference on Wind Engineering</i>, Baltimore, MD, June, 1997, CD-ROM.
</html>
[>img[photo|joemain.jpg]]''Joseph A. Main'' ([[NIST profile|http://www2.bfrl.nist.gov/profiles/profiles.asp?lastname=main]])
[[Structures Group|http://www.bfrl.nist.gov/861/structures.html]], [[Materials and Construction Research Division|http://www.bfrl.nist.gov/861/]]
[[Building and Fire Research Laboratory|http://bfrl.nist.gov]]
[[National Institute of Standards and Technology|http://www.nist.gov]]
100 Bureau Drive, Stop 8611 (Building 226, Room B160)
Gaithersburg, MD 20899-8611 ([[directions to NIST|http://www.nist.gov/public_affairs/maps/nistmaps.html]])
Tel: (301)975-5286; Fax: (301)869-6275
[<img[no spam, please! :)|no-spam-please.png]]
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};
//--
//-- 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<len; i++, j+=4) {
be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
}
while (j<str.length) {
be[j>>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<be.length*32;i+=8)
str += String.fromCharCode((be[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<be.length*4;i++)
str += hex.charAt((be[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
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
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<x.length;i+=16) {
var j,t;
var a = h0;
var b = h1;
var c = h2;
var d = h3;
var e = h4;
for(j = 0;j<16;j++) {
w[j] = x[i+j];
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=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);
};
}
//}}}
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};
//--
//-- 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 <br> or <br /> instead of <<br>>
config.macros.br = {};
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,unused3)
{
story.displayTiddlers(srcElement,titles,template,animate);
}
// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
story.displayTiddler(srcElement,title,template,animate);
}
// @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");
}
//}}}
![[The Johns Hopkins University | http://www.jhu.edu]], Baltimore, Maryland
* Ph.D. in [[Civil Engineering | http://www.ce.jhu.edu]], awarded May 2002;
** Advisor: [[Nicholas P. Jones|http://webapps.jhu.edu/jhuniverse/information_about_hopkins/about_jhu/principal_administrative_officers_and_deans/nicholas_p_jones/index.cfm]]
** Dissertation: [[Modeling the vibrations of a stay cable with attached damper|http://www.jmain.sent.com/pubs/JAMain-Dissertation.pdf]] ([[abstract|PhD Dissertation]])
* M.S.E. in [[Civil Engineering | http://www.ce.jhu.edu]], awarded May 2001
* B.S. in [[Civil Engineering | http://www.ce.jhu.edu]], awarded May 1998, with honors
![[National Institute of Standards and Technology | http://www.nist.gov]]
* Research Structural Engineer, [[Building and Fire Research Laboratory | http://bfrl.nist.gov]], January 2007 - Present
* [[NRC Postdoctoral Research Associate | http://www7.nationalacademies.org/rap/]], January 2005 - January 2007 (Advisor: [[Emil Simiu | http://www2.bfrl.nist.gov/profiles/profiles.asp?lastname=simiu ]] )
![[US Army Research Laboratory | http://www.arl.army.mil]]
* [[ORISE Postdoctoral Fellow | http://see.orau.org/AcademicStatus.aspx?type=PostDoc]], Weapons and Materials Research Directorate, November 2003 - November 2004 (Mentor: George A. Gazonas)
![[Technical University of Denmark | http://www.dtu.dk/English.aspx]]
* Visiting Researcher, [[Department of Mechanical Engineering | http://www.mek.dtu.dk/English.aspx]], September - October 2003 (Supervisor: [[Steen Krenk|http://www.mek.dtu.dk/English/Staff/MEK_SKK.aspx?lg=showcommon&id=3090]])
![[University of Illinois at Urbana-Champaign | http://www.uiuc.edu]]
* Postdoctoral Research Associate, [[Department of Civil and Environmental Engineering | http://www.cee.uiuc.edu]], January 2003 - September 2003 (Advisor: [[Nicholas P. Jones|http://webapps.jhu.edu/jhuniverse/information_about_hopkins/about_jhu/principal_administrative_officers_and_deans/nicholas_p_jones/index.cfm]])
![[The Johns Hopkins University | http://www.jhu.edu]]
* Postdoctoral Fellow, [[Department of Civil Engineering | http://www.ce.jhu.edu]], May 2002 - December 2002 (Advisor: [[Nicholas P. Jones|http://webapps.jhu.edu/jhuniverse/information_about_hopkins/about_jhu/principal_administrative_officers_and_deans/nicholas_p_jones/index.cfm]])
* Instructor, [[Department of Civil Engineering | http://www.ce.jhu.edu]]
** Structural Dynamics (graduate-level), Fall 2002
** Dynamics (undergraduate-level), co-taught with [[R.A. Dalrymple | http://www.ce.jhu.edu/dalrymple/]], Spring 2003
/***
|''Name''|FirefoxPrivilegesPlugin|
|''Description''|Create a backstage tab to manage Firefox url privileges|
|''Author''|Xavier Vergés (xverges at gmail dot com)|
|''Version''|1.1.1 ($Rev: 4266 $)|
|''Date''|$Date: 2008-04-06 09:04:49 +0200 (dom, 06 abr 2008) $|
|''Status''|@@beta@@|
|''Source''|http://firefoxprivileges.tiddlyspot.com/|
|''CodeRepository''|http://trac.tiddlywiki.org/browser/Trunk/contributors/XavierVerges/plugins/FirefoxPrivilegesPlugin.js|
|''License''|BSD tbd|
|''CoreVersion''|2.2.4 (maybe 2.2+?)|
|''Feedback''|http://groups.google.com/group/TiddlyWiki|
|''BookmarkletReady''|http://icanhaz.com/firefoxprivileges|
|''Browser''|Mozilla. Tested under Firefox 2.0.0.12 and Firefox 3.0b4|
|''Documentation''|http://firefoxprivileges.tiddlyspot.com/#HowTo|
/%
!Description
!Notes
!Usage
!Revision History
!!v1.0 (2008-03-23)
* First public version
%/
!Usage
The wizard can be opened from the backstage or using the macro {{{<<firefoxPrivileges>>}}}
The step to show when opening the wizard can be set with the {{{txtPrivWizardDefaultStep}}} option: <<option txtPrivWizardDefaultStep>>
!Code
***/
//{{{
if(window.Components) {
config.macros.firefoxPrivileges = {};
config.macros.firefoxPrivileges.lingo = {};
/*
//}}}
!!! Strings to translate
//{{{
*/
merge(config.macros.firefoxPrivileges.lingo ,{
wizardTitle: "Manage Firefox Privileges",
learnStepTitle: "1. Learn about the risks of giving privileges to file: urls",
learnStepHtml: "<h3>Local files</h3><p>Firefox can be configured to grant the same security privileges to every html document loaded from disk (those <i>file:</i> urls), or to grant different privileges on a per file basis. Local TiddyWikis need some high security privileges in order to let you save changes to disk, or to import tiddlers from remote servers. Unfortunately, these same privileges can potentially be used by the bad guys to launch programs, get files from your disk and upload them somewhere, access your browsing history...</p><p>While it is more convenient to let Firefox give all your local files the same security privileges, and I'm not aware of any malware attack that tries to take advantage of privileged <i>file:</i> urls, an ounce of prevention is worth a pound of cure.</p><p>You can learn more about this by reading <a href='http://www.mozilla.org/projects/security/components/per-file.html' class='externalLink'>Per-File Permissions</a> and <a href='http://www.mozilla.org/projects/security/components/signed-scripts.html#privs-list' class='externalLink'>JavaScript Security: Signed Script</a> at mozilla.org.</p><h3>Remote files</h3><p>When a remote document (<i>http:</i> urls) requests especial privileges, Firefox <ul><li>checks the value of <code>signed.applets.codebase_principal_support</code>, a preference that can be configured from the page that is loaded when you type <code>about:config</code> in the address bar</li><li>if the previous value is set to false, Firefox denies silently the request</li><li>if the previous value is set to true, Firefox looks for the document's domain in the list of privileges urls that can be configured from this wizard, and, if not there, asks the user to grant the privilege</li></ul><p>Note that, in this case, and unlike when dealing with local files, Firefox will only take into account the document's domain instead of performing an exact match of the url.</p><p>Take a look at <a href='http://messfromabove.tiddlyspot.com' class='externalLink'>http://messfromabove.tiddlyspot.com</a> to learn more about the nice and nasty possibilities that this setting provides.</p><h3>This Wizard</h3><p>This wizard will help you to grant the required privileges to your TiddlyWikis, local or remote, and warn you if you have enabled a dangerous default. To do so, Firefox will probably prompt you to grant it some special privileges in order to list and modify the list of privileged urls.</p><p>Please note that changing the privileges for an url may not have effect until you reload it in the browser.</p><input type='hidden' name='mark'></input>",
learnStepButton: "1. Learn about the risks",
learnStepButtonTooltip: "Learn why 'Remember this' is an unsafe choice in security prompts",
grantStepTitle: "2. Grant privileges to individual local documents or remote domains",
grantStepHtml: "Url: <input type='text' size=80 name='txtUrl'><br/><br/><input type='checkbox' checked='true' name='chkUniversalXPConnect'>Grant rights required to save to disk (Run or install software on your machine - UniversalXPConnect)</input><br/><input type='checkbox' checked='true' name='chkUniversalBrowserRead'>Grant rights required to import tiddlers from servers or access TiddlySpot (Read and upload local files - UniversalBrowserRead)</input><br/><input type='checkbox' name='chkUniversalBrowserWrite'>Modify any open window - UniversalBrowserWrite</input><br/><input type='checkbox' name='chkUniversalFileRead'>Read and upload local files - UniversalFileRead</input><br/><input type='checkbox' name='chkCapabilityPreferencesAccess'>By-pass core security settings - CapabilityPreferencesAccess</input><br/><input type='checkbox' name='chkUniversalPreferencesRead'>Read program settings - UniversalPreferencesRead</input><br/><input type='checkbox' name='chkUniversalPreferencesWrite'>Modify program settings - UniversalPreferencesWrite</input><br/><input type='button' class='button' name='btnGrant' value='Set privileges'/>",
grantStepButton: "2. Set privileges",
grantStepButtonTooltip: "Manage privileges for this or other docs",
viewStepTitle: "3. Granted privileges",
viewStepHtml: "<input type='hidden' name='mark'></input>",
viewStepButton: "3. View privileges",
viewStepButtonTooltip: "List granted privileges, and optionally reset them",
viewStepEmptyMsg: "Asking for temporary privileges to list permanent privileges...",
listViewTemplate: {
columns: [
{name: 'Selected', field: 'Selected', rowName: 'url', type: 'Selector'},
{name: 'Url', field: 'url', title: "Url", type: 'LongLink'},
{name: 'Granted', field: 'granted', title: "Granted", type: 'StringList'},
{name: 'Denied', field: 'denied', title: "Denied", type: 'StringList'},
{name: 'Handle', field: 'handle', title: "Handle", type: 'String'},
{name: 'Notes', field: 'notes', title: "Notes", type: 'String'}
],
rowClasses: [
{className: 'lowlight', field: 'highlight'},
{className: 'error', field: 'warning'}
]
},
listResetButton: "Reset the privileges of the selected urls",
noteDangerous: "This is dangerous",
noteNoEffect: "This has no effect",
noteThisUrl: "This document's url",
noteTheUrlYouUpdated: "The url you just updated",
errNoUrl: "The url is required",
errNotAuthorized: "Not enough privileges. Maybe you are trying this from a tiddlywiki loaded from a server?",
msgUpdating: "Updating privileges for %0",
msgSetting: "Setting privileges for %0",
msgResetting: "Resetting privileges for %0"
});
merge(config.optionsDesc,{
txtPrivWizardDefaultStep: "Step to show when opening the 'Manage Firefox Privileges' wizard"
});
merge(config.tasks,{
firefoxPrivileges: {text: "security", tooltip: "Work with Firefox url privileges", content: '<<firefoxPrivileges>>'}
});
/*
//}}}
!!! Regular code
//{{{
*/
config.backstageTasks.pushUnique("firefoxPrivileges");
if (typeof(config.options.txtPrivWizardDefaultStep) === "undefined"){
config.options.txtPrivWizardDefaultStep = "1";
}
(function(){
var plugin = config.macros.firefoxPrivileges;
var lingo = plugin.lingo;
plugin.privAccessCapabilities = "UniversalXPConnect CapabilityPreferencesAccess";
plugin.stepNames = ["learn", "grant", "view"];
plugin.lastUrl = document.location.toString();
plugin.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
var wizard = new Wizard();
wizard.createWizard(place,lingo.wizardTitle);
var step = parseInt(config.options.txtPrivWizardDefaultStep);
step = (isNaN(step)||(step<=0)||(step>3))? 0 : step-1;
plugin.step(wizard, step);
};
plugin.buttons = (function(){
var onclick = {};
for (var ii=0; ii<plugin.stepNames.length; ii++) {
onclick[plugin.stepNames[ii]] =
(function() {
var index = ii;
var handler = function(e) {
plugin.step(new Wizard(resolveTarget(e)), index);
return false;
};
return handler;})();
}
var getButtons = function(index) {
var buttons = [];
for (var ii= 0; ii<plugin.stepNames.length; ii++) {
if (ii !== index) {
var name = plugin.stepNames[ii];
buttons.push({
onClick: onclick[name],
caption: lingo[name+"StepButton"],
tooltip: lingo[name+"StepButtonTooltip"]
});
}
}
return buttons;
};
return getButtons;
})();
plugin.step = function(wizard, stepIndex, extraParams)
{
var name = plugin.stepNames[stepIndex];
var stepResult = {};
wizard.addStep(lingo[name+"StepTitle"],lingo[name+"StepHtml"]);
wizard.setButtons(plugin.buttons(stepIndex));
if (plugin[name+"StepProcess"]) {
plugin[name+"StepProcess"](wizard, extraParams);
}
};
plugin.getMarkedDiv = function(wizard)
{
var mark = wizard.getElement("mark");
var div = document.createElement("div");
mark.parentNode.insertBefore(div,mark);
return div;
};
plugin.learnStepProcess = function(wizard)
{
var src = config.optionsDesc.txtPrivWizardDefaultStep + ": <<option txtPrivWizardDefaultStep>>";
wikify(src, plugin.getMarkedDiv(wizard));
}
plugin.grantStepProcess = function(wizard)
{
wizard.getElement("btnGrant").onclick = plugin.btnSetPrivileges;
wizard.getElement("txtUrl").value = plugin.lastUrl;
};
plugin.viewStepProcess = function(wizard, extraParams)
{
var listWrapper = plugin.getMarkedDiv(wizard);
listWrapper.innerHTML = lingo.viewStepEmptyMsg;
var html = [];
try {
if (!extraParams || extraParams.reqAcccess) {
netscape.security.PrivilegeManager.enablePrivilege(plugin.privAccessCapabilities);
}
var thisUrl = document.location.toString();
var privs = plugin.getPrivilegedUrls(false);
var listItems = [];
for (var handle in privs) {
if (privs.hasOwnProperty(handle)) {
var priv = privs[handle];
if ((priv.url === "file://") ||
(priv.url.indexOf(" ") !== -1)) {
priv.warning = true;
priv.notes = (priv.url === "file://")? lingo.noteDangerous:lingo.noteNoEffect;
} else if ((priv.url === thisUrl) ||
(priv.url === plugin.lastUrl)) {
priv.highlight = true;
priv.notes = (priv.url === thisUrl)? lingo.noteThisUrl:lingo.noteTheUrlYouUpdated;
}
listItems.push(priv);
}
}
var sortFunc = function(a,b) {
if(a.url > b.url) {return 1;}
if(a.url < b.url) {return -1;}
return 0;
};
listItems.sort(sortFunc);
listWrapper.innerHTML = "";
var listView = ListView.create(listWrapper, listItems, lingo.listViewTemplate);
wizard.setValue("listView",listView);
createTiddlyButton(listWrapper, lingo.listResetButton, "", plugin.btnResetPrivileges);
} catch (ex) {
listWrapper.innerHTML = "Error: " + ex;
}
};
plugin.btnSetPrivileges = function(ev)
{
var wizard = new Wizard(this);
var checkboxes = wizard.bodyElem.getElementsByTagName("input");
var grant = [];
for(var t=0; t<checkboxes.length; t++) {
var cb = checkboxes[t];
if((cb.getAttribute("type") === "checkbox")&&cb.checked) {
grant.push(cb.name.substring(3));
}
}
var url = wizard.getElement("txtUrl").value;
if (!url) {
alert(lingo.errNoUrl);
} else {
plugin.lastUrl = url;
var viewStepExtraParams = {reqAcccess: false};
var gotPrivileges = false;
try {
netscape.security.PrivilegeManager.enablePrivilege(config.macros.firefoxPrivileges.privAccessCapabilities);
gotPrivileges = true;
} catch(ex) {}
if (gotPrivileges) {
plugin.setUrlPrivilege(false, url, grant, false);
plugin.step(wizard, 2, viewStepExtraParams);
} else {
alert(lingo.errNotAuthorized);
}
}
return false;
};
plugin.btnResetPrivileges = function(ev)
{
var wizard = new Wizard(this);
var listView = wizard.getValue("listView");
var urls = ListView.getSelectedRows(listView);
if(urls.length === 0) {
alert(config.messages.nothingSelected);
} else {
netscape.security.PrivilegeManager.enablePrivilege(config.macros.firefoxPrivileges.privAccessCapabilities);
for (var ii=0; ii<urls.length; ii++) {
plugin.setUrlPrivilege(false, urls[ii], [], true);
}
plugin.step(wizard, 2, {reqAcccess: false});
}
return false;
};
plugin.setUrlPrivilege = function(reqAccess, url, rights, reset)
{
function getFreeHandle(dict, prefix) {
var handle = prefix;
var ii = 0;
while("undefined" !== typeof(dict[handle])) {
ii++;
handle = prefix + ii;
}
return handle;
}
if (reqAccess) {
netscape.security.PrivilegeManager.enablePrivilege(plugin.privAccessCapabilities);
}
var isUpdate = true;
var urlHandle = "";
var urls = plugin.getPrivilegedUrls(false);
for (var handle in urls) {
if (urls[handle].url === url) {
urlHandle = handle;
break;
}
}
var denied = [];
var granted = [];
if (urlHandle) {
if (!reset) {
displayMessage(lingo.msgUpdating.format([url]), url);
denied = urls[urlHandle].denied.slice();
granted = urls[urlHandle].granted.slice();
} else {
displayMessage(lingo.msgResetting.format([url]), url);
}
} else {
displayMessage(lingo.msgSetting.format([url]), url);
urlHandle = getFreeHandle(urls, "FirefoxPrivilegesPlugin");
isUpdate = false;
}
for (var ii=0; ii<rights.length; ii++) {
denied.remove(rights[ii]);
granted.pushUnique(rights[ii]);
}
var prefs = plugin.getPrefsBranch();
var idStr = urlHandle + ".id";
var deniedStr = urlHandle + ".denied";
var grantedStr = urlHandle + ".granted";
function clearPref(str) {
if (prefs.prefHasUserValue(str)) {
prefs.clearUserPref(str);
}
}
function setOrClearPref(str, val) {
if (val.length) {
val = ("string" === typeof(val))? val : val.join(" ");
prefs.setCharPref(str, val);
// why oh why?!
if (!prefs.prefHasUserValue(str)) {
prefs.setCharPref(str, val);
}
} else {
clearPref(str);
}
}
if (!denied.length && !granted.length) {
prefs.deleteBranch(urlHandle + ".");
} else {
setOrClearPref(idStr, url);
setOrClearPref(deniedStr, denied);
setOrClearPref(grantedStr , granted);
setOrClearPref(idStr, url);
}
var prefService = plugin.getPrefsService();
prefService.savePrefFile(null);
return !isUpdate;
};
plugin.getPrivilegedUrls = function(reqAccess)
{
function Privileged(url, granted, denied, handle) {
this.url = url;
this.granted = granted;
this.denied = denied;
this.handle = handle;
}
function getPermissions(branch, handle, type) {
var permissions = [];
var pref = handle + "." + type;
if (branch.prefHasUserValue(pref)) {
permissions = branch.getCharPref(pref).split(/\s+/);
permissions.sort();
}
return permissions;
}
var privileged = {};
if (reqAccess) {
netscape.security.PrivilegeManager.enablePrivilege(plugin.privAccessCapabilities);
}
var prefs = plugin.getPrefsBranch();
var capsEntries = prefs.getChildList("", { value: 0 });
for (var ii=0; ii < capsEntries.length; ii++)
{
var matches = capsEntries[ii].match(/([^\.]*)[\.]id/);
if (matches && (2 === matches.length))
{
var handle = matches[1];
var url = prefs.prefHasUserValue(capsEntries[ii])? prefs.getCharPref(capsEntries[ii]) : "Error getting " + capsEntries[ii];
var granted = getPermissions(prefs, handle, "granted");
var denied = getPermissions(prefs, handle, "denied");
privileged[handle] = new Privileged(url, granted, denied, handle);
}
}
return privileged;
};
plugin.getPrefsService = function()
{
return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
};
plugin.getPrefsBranch = function()
{
var prefsService = plugin.getPrefsService();
return prefsService.getBranch("capability.principal.codebase.");
};
/*
//}}}
!!! Bookmarklet interface
//{{{
*/
plugin.onload = function()
{
var b=backstage;
var bt=createTiddlyButton(b.toolbar, "security"+glyph("downTriangle"), "", b.onClickTab,"backstageTab");
var fp="firefoxPrivileges";
bt.setAttribute("task",fp);
b.switchTab(fp);
};
/*
//}}}
!!! ListView tweak for long urls. http://trac.tiddlywiki.org/ticket/570
//{{{
*/
ListView.columnTypes.LongLink = {
createHeader: ListView.columnTypes.String.createHeader,
createItem: function(place,listObject,field,columnTemplate,col,row)
{
var v = listObject[field];
var c = columnTemplate.text;
if(v != undefined) {
var link = createExternalLink(place,v);
if(!c) {
c = v.replace(/#|\.|\/|(\%..)|\?|\&/g, config.browser.isIE? "$&<wbr>": "$&​");
link.innerHTML = c;
} else {
createTiddlyText(link, c);
}
}
}
};
})(); // scope hiding
} // endif(window.Components)
//}}}
<html>
Coffman, B.F., <b>Main, J.A.</b>, Duthinh, D., and Simiu, E. "<a href="pubs/Coffman-Main-Duthinh-Simiu-DADvsASCE7.pdf">Wind effects on low-rise buildings: Database-assisted design vs. ASCE 7-05 Standard estimates</a>." <i>Journal of Structural Engineering</i> (accepted).
<p>
Lombardo, F.T., <b>Main, J.A.</b>, and Simiu, E. "<a href="pubs/Lombardo-Main-Simiu-JWEIA-2009.pdf">Automated extraction and classification of thunderstorm and non-thunderstorm wind data for extreme-value analysis</a>," <i>Journal of Wind Engineering and Industrial Aerodynamics</i>, 97(3-4), 120-131. <a href="http://dx.doi.org/doi:10.1016/j.jweia.2009.03.001">doi:10.1016/j.jweia.2009.03.001</a>
<p>
Duthinh, D., <b>Main, J.A.</b>, Wright, A. and Simiu, E. (2008), "Low-rise steel structures under directional winds: Mean recurrence intervals of failure." <i>Journal of Structural Engineering</i>. 134(8), 1383-1388.
<a href="http://dx.doi.org/doi:10.1061/(ASCE)0733-9445(2008)134:8(1383)">doi:10.1061/(ASCE)0733-9445(2008)134:8(1383)</a>
<p>
Zuo, D., Jones, N.P., and <b>Main, J.A.</b> (2008). "Field observation of vortex- and rain-wind-induced stay-cable vibrations in a three-dimensional environment." <i>Journal of Wind Engineering and Industrial Aerodynamics</i>, 96(6-7), 1124-1133. <a href="http://dx.doi.org/doi:10.1016/j.jweia.2007.06.046">doi:10.1016/j.jweia.2007.06.046</a>
<p>
<b>Main, J.A.</b> and Gazonas, G.A. (2008). "<a href="pubs/Main-Gazonas-IJSS-2007.pdf">Uniaxial crushing of sandwich plates under air blast: influence of mass distribution</a>." <i>International Journal of Solids and Structures</i>, 45, 2297-2321. <a href="http://dx.doi.org/doi:10.1016/j.ijsolstr.2007.11.019">doi:10.1016/j.ijsolstr.2007.11.019</a>
<p>
<b>Main, J.A.</b> and Jones, N.P. (2007). "<a href="pubs/Main-Jones-JEM-2007a.pdf">Vibration of tensioned beams with intermediate viscous damper. I: Formulation, influence of damper location</a>." <i>Journal of Engineering Mechanics</i>, 133(4), 369-378. <a href="http://dx.doi.org/doi:10.1061/(ASCE)0733-9399(2007)133:4(369)">doi:10.1061/(ASCE)0733-9399(2007)133:4(369)</a>
<p>
<b>Main, J.A.</b> and Jones, N.P. (2007). "<a href="pubs/Main-Jones-JEM-2007b.pdf">Vibration of tensioned beams with intermediate viscous damper. II: Damper near a support</a>." <i>Journal of Engineering Mechanics</i>, 133(4), 379-388. <a href="http://dx.doi.org/doi:10.1061/(ASCE)0733-9399(2007)133:4(379)">doi:10.1061/(ASCE)0733-9399(2007)133:4(379)</a>
<p>
<b>Main, J.A.</b> and Krenk, S. (2005). "<a href="pubs/Main-Krenk-JSV-2005.pdf">Efficiency and tuning of viscous dampers on discrete systems</a>." <i>Journal of Sound and Vibration</i>, 286(1-2), 97-122. <a href="http://dx.doi.org/10.1016/j.jsv.2004.09.022">doi:10.1016/j.jsv.2004.09.022</a>
<p>
<b>Main, J.A.</b> and Jones, N.P. (2002). "<a href="pubs/Main-Jones-JEM-2002a.pdf">Free vibrations of taut cable with attached damper. I: Linear viscous damper</a>." <i>Journal of Engineering Mechanics</i>, 128(10), 1062-1071. <a href="http://dx.doi.org/doi:10.1061/(ASCE)0733-9399(2002)128:10(1062)">doi:10.1061/(ASCE)0733-9399(2002)128:10(1062)</a>
<p>
<b>Main, J.A.</b> and Jones, N.P. (2002). "<a href="pubs/Main-Jones-JEM-2002b.pdf">Free vibrations of taut cable with attached damper. II: Nonlinear damper</a>." <i>Journal of Engineering Mechanics</i>, 128(10), 1072-1081. <a href="http://dx.doi.org/doi:10.1061/(ASCE)0733-9399(2002)128:10(1072)">doi:10.1061/(ASCE)0733-9399(2002)128:10(1072)</a>
<p>
<b>Main, J.A.</b> and Jones, N.P. (2001). "<a href="pubs/Main-Jones-JBridgeEng-2001.pdf">Evaluation of viscous dampers for stay-cable vibration mitigation</a>." Journal of Bridge Engineering, 6(6), 385-397. <a href="http://dx.doi.org/doi:10.1061/(ASCE)1084-0702(2001)6:6(385)">doi:10.1061/(ASCE)1084-0702(2001)6:6(385)</a>
</html>
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/
//{{{
// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin) {
version.extensions.LegacyStrikeThroughPlugin = {installed:true};
config.formatters.push(
{
name: "legacyStrikeByChar",
match: "==",
termRegExp: /(==)/mg,
element: "strike",
handler: config.formatterHelpers.createElementAndWikify
});
} //# end of "install only once"
//}}}
/***
|Name:|LessBackupsPlugin|
|Description:|Intelligently limit the number of backup files you create|
|Version:|3.0.1 ($Rev: 2320 $)|
|Date:|$Date: 2007-06-18 22:37:46 +1000 (Mon, 18 Jun 2007) $|
|Source:|http://mptw.tiddlyspot.com/#LessBackupsPlugin|
|Author:|Simon Baird|
|Email:|simon.baird@gmail.com|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Description
You end up with just backup one per year, per month, per weekday, per hour, minute, and second. So total number won't exceed about 200 or so. Can be reduced by commenting out the seconds/minutes/hours line from modes array
!!Notes
Works in IE and Firefox only. Algorithm by Daniel Baird. IE specific code by by Saq Imtiaz.
***/
//{{{
var MINS = 60 * 1000;
var HOURS = 60 * MINS;
var DAYS = 24 * HOURS;
if (!config.lessBackups) {
config.lessBackups = {
// comment out the ones you don't want or set config.lessBackups.modes in your 'tweaks' plugin
modes: [
["YYYY", 365*DAYS], // one per year for ever
["MMM", 31*DAYS], // one per month
["ddd", 7*DAYS], // one per weekday
//["d0DD", 1*DAYS], // one per day of month
["h0hh", 24*HOURS], // one per hour
//["m0mm", 1*HOURS], // one per minute
//["s0ss", 1*MINS], // one per second
["latest",0] // always keep last version. (leave this).
]
};
}
window.getSpecialBackupPath = function(backupPath) {
var now = new Date();
var modes = config.lessBackups.modes;
for (var i=0;i<modes.length;i++) {
// the filename we will try
var specialBackupPath = backupPath.replace(/(\.)([0-9]+\.[0-9]+)(\.html)$/,
'$1'+now.formatString(modes[i][0]).toLowerCase()+'$3')
// open the file
try {
if (config.browser.isIE) {
var fsobject = new ActiveXObject("Scripting.FileSystemObject")
var fileExists = fsobject.FileExists(specialBackupPath);
if (fileExists) {
var fileObject = fsobject.GetFile(specialBackupPath);
var modDate = new Date(fileObject.DateLastModified).valueOf();
}
}
else {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(specialBackupPath);
var fileExists = file.exists();
if (fileExists) {
var modDate = file.lastModifiedTime;
}
}
}
catch(e) {
// give up
return backupPath;
}
// expiry is used to tell if it's an 'old' one. Eg, if the month is June and there is a
// June file on disk that's more than an month old then it must be stale so overwrite
// note that "latest" should be always written because the expiration period is zero (see above)
var expiry = new Date(modDate + modes[i][1]);
if (!fileExists || now > expiry)
return specialBackupPath;
}
}
// hijack the core function
window.getBackupPath_mptw_orig = window.getBackupPath;
window.getBackupPath = function(localPath) {
return getSpecialBackupPath(getBackupPath_mptw_orig(localPath));
}
//}}}
![[windPRESSURE|http://www.itl.nist.gov/div898/winds/wind_pressure/wind_pressure.htm]]
~MATLAB-based database-assisted design software for rigid, gable-roofed buildings.
![[NIST Aerodynamic Database|http://fris2.nist.gov/winddata/]]
A public repository of aerodynamic data from boundary layer wind tunnel tests on scale building models. The initial posting of the database contains 95 data sets contributed by [[The Boundary Layer Wind Tunnel Laboratory|http://www.blwtl.uwo.ca/]] at The University of Western Ontario (UWO) for gable-roofed building models with various dimensions and terrain conditions.
![[ASOS-WX|http://www.itl.nist.gov/div898/winds/asos-wx/asos-wx.htm]]
A ~MATLAB-based software tool for the extraction of wind and thunderstorm data from ~ASCII-format Automated Surface Observing System (ASOS) data files, for use in extreme value analysis.
[[Contact|Contact Information]]
[[Background]]
[[Publications]]
[[Presentations]]
[[Research Opportunities]]
[[Links]]
<<toggleSideBar "" "show/hide SideBar" hide>>
![[Computational Modeling of Progressive Structural Failure and Collapse|http://nrc58.nas.edu/pgasurvey/data/aobooks/rapbooks.asp?mode=rodetail&roid=53528&pcd=508611]]
Research focuses on modeling the dynamic collapse of multistory steel and reinforced concrete buildings under initiating events such as column failure as a result of blast loading. In progressive collapse scenarios, structural members typically undergo large displacements and rotations, and connections are subjected to large tensile forces not anticipated in traditional designs. Accurate characterizations of the failure modes and the resulting nonlinear load-deformation behavior of connections in such scenarios are critical for determining whether or not a collapse can be arrested. Opportunities exist for (1) the development of simple yet accurate modeling approaches that enable rapid collapse analysis of large structural systems, (2) comparison and quantification of the progressive collapse resistance of different types of structural systems, and (3) development of performance criteria and methods to mitigate progressive structural collapse for both new and existing structures. Emphasis is placed on model validation against both high-fidelity finite element simulations and experimental tests of structural subassemblies.
''This Research Opportunity is available through the [[National Research Council Postdoctoral Associateship Programs|http://www7.nationalacademies.org/rap/]] only to US citizens who have held their doctorate for less than five years at the time of application. See information on [[how to apply|http://www7.nationalacademies.org/rap/Cover_Page_Application_Information_links.html]] and [[contact me|Contact Information]] if you're interested.''
Presenter listed in ''bold'':
* ''J.A. Main'': "Ongoing NIST Research on Prevention of Progressive Collapse.” Workshop on Assessing Vulnerability of Buildings to Disproportionate Collapse, January 29, 2009, National Institute of Building Sciences (NIBS), Washington, DC.
* ''J.A. Main'': "Computational modeling of collapse propagation in structures." University of Massachusetts Amherst, Department of Civil and Environmental Engineering, October 17, 2008 (Invited).
* D. Duthinh, K.B. ~McGrattan, and A.B. Khaskia (presented by ''J.A. Main''): "Recent advances in fire-structure analysis." //39th ~US-Japan Joint Panel on Wind and Seismic Effects//, Tsukuba, Japan, May 15, 2007.
* ''J.A. Main'' and G.A. Gazonas: "Uniaxial crushing of cellular sandwich plates under air blast." //17th US Army Symposium on Solid Mechanics//, Baltimore, MD, April 3, 2007.
* ''J.A. Main'': "[[Recent advances in database-assisted design for wind|http://www.jmain.sent.com/pres/JAMain-Cornell-27Nov2006.pdf]]." Cornell University, School of Civil and Environmental Engineering, November 27, 2006 (invited).
* ''J.A. Main'': "Synthesizing aerodynamic and climatological data in structural design for wind loads." NIST Brown Bag Postdoc Lunch, NIST, Gaithersburg, MD, November 14, 2006.
* ''J.A. Main'' and G.A. Gazonas: "Uniaxial crushing of sandwich panels with cellular cores under blast loading: modeling and optimization." //15th U.S. National Congress on Theoretical and Applied Mechanics//, University of Colorado at Boulder, June 26, 2006.
* ''J.A. Main'': "Interpolation issues in database-assisted design: Using wind tunnel measurements to predict wind effects on low-rise buildings." Materials and Construction Research Division Seminar, National Institute of Standards and Technology, Gaithersburg, MD, June 8, 2006.
* J.A. Main and ''N.P. Jones'': "[[Damping of stay-cable vibrations: modeling overview and design implications|http://www.jmain.sent.com/pres/Main-Jones-FHWA2006.pdf]]." //Wind Induced Vibration of Cable Stay Bridges Workshop//, St. Louis, MO, April 26, 2006.
* ''J.A. Main'': "Wind loads on structures and optimization of supplemental dampers." The George Washington University, Dept. of Civil and Environmental Engineering, March 7, 2006 (Invited).
* ''J.A. Main'': "Wind loads on structures and optimization of supplemental dampers." The Johns Hopkins University, Dept. of Civil Engineering, February 27, 2006 (Invited).
* ''J.A. Main'': "Wind loads on structures and optimization of supplemental damping devices." Vanderbilt University, Dept. of Civil and Environmental Engineering, February 16, 2006 (Invited).
* ''J.A. Main'': "Virtual Wind Tunnel." //Researcher Symposium, Metal Building Manufacturers Association//, Nashville, Tennessee, February 15, 2006 (Invited).
* ''J.A. Main'': "Prediction of structural response to wind loads using aerodynamic databases" and "Optimization of supplemental dampers in structures to mitigate dynamic response." University of Central Florida, Civil and Environmental Engineering Department, February 13, 2006 (Invited).
* ''J.A. Main'': "Complex modes and frequencies of structures with concentrated damping." University of Oklahoma, School of Civil Engineering and Environmental Science, December 15, 2005 (Invited).
* ''J.A. Main'': "Database-assisted design of low-rise buildings for wind loads" and "Complex modes and frequencies of structures with concentrated damping." University of Tokyo, Dept. of Civil Eng., September 16, 2005.
* ''J.A. Main'': "Tuning of dampers in structural systems: Theory and application to stay-cable vibration." Univ. of Delaware, Dept. of Civil and Environmental Engineering, April 6, 2004. (Invited)
* ''J.A. Main'': "Discrete dampers in continuous systems: Theory and application to stay-cable vibration." National Institute of Standards and Technology, Building and Fire Research Laboratory, August 5, 2003. (Invited)
* ''J.A. Main'': "Discrete dampers in continuous systems: Theory and application to stay-cable vibration." Univ. of California, Davis, Dept. of Civil & Environmental Eng., April 23, 2003. (Invited)
* ''J.A. Main'': "Modeling the vibrations of a stay cable with attached damper." U.S. Army Research Laboratory, Weapons and Materials Research Directorate, Composites and Lightweight Structures Branch, January 31, 2003. (Invited)
* ''J.A. Main'': "Characterization of rain-wind induced stay-cable vibrations from full-scale measurements." Closing Symposium, NSF Structural Engineering Experiences in Japan, Waseda University, August 2000.
* ''J.A. Main'': "Measurements and mitigation of stay cable vibrations." Young Researchers’ Symposium, University of Tokyo, June 2000.
<div class='header' macro='gradient vert #FFF #FFF '>
<div class='gradient'>
<div class='titleLine' >
<span class='searchBar' macro='search'></span>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
</div>
</div>
<div id='bodywrapper'>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<div id='displayFooter'></div>
</div>
<html>
<h1><a href="pubs/JAMain-Dissertation.pdf">Modeling the vibrations of a stay cable with attached damper</a></h1>
<i>The Johns Hopkins University, May 2002</i>
<h2>Abstract</h2>
<p>
Many cable-stayed bridges around the world have exhibited excessive windinduced
vibrations of the main stays, inducing undue stresses and fatigue in the cables.
To suppress these vibrations, fluid dampers are often attached to stays near the
anchorages. To enable effective and economical design of such dampers, it is important
to develop a thorough understanding of the dynamics of a stay cable with attached
damper.
<p>
To investigate the dynamics of the cable-damper system, a fairly simple model is
first considered: a taut string with linear viscous damper. An analytical formulation of
the free vibration problem is used to explore the solution characteristics, revealing that
damper-induced frequency shifts play an important role in characterizing the response of
the system due to the concentrated nature of the damping force. A critical value of the
damper coefficient is identified, and for a supercritical damper, certain modes of
vibration are completely suppressed, while others emerge, including a non-oscillatory
decaying mode.
<p>
The influence of bending stiffness is considered using a dynamic stiffness
formulation of the free-vibration problem for a tensioned beam with attached damper.
Many of the solution characteristics observed in this case are reminiscent of those for the
taut string, and damper-induced frequency shifts are again important. The nature of the
boundary conditions has a significant effect when bending stiffness is appreciable, and
for a damper located near the end of a tensioned beam, significantly higher damping
ratios can be achieved if the supports are not fixed against rotation.
<p>
Dampers can also have nonlinear characteristics, either unintentionally or by
design, and equivalent linear solutions are developed for the vibrations of a taut string
with two different types of nonlinear dampers: a power-law damper and a viscous damper
with a friction threshold. Relevant nondimensional parameter groupings are identified,
and asymptotic approximations are obtained relating these nondimensional parameters to
the modal damping ratios for cases when the damper-induced frequency shifts are small.
The nature of the dependence of nonlinear damper performance on the amplitude and
mode of vibration is investigated, revealing some potential advantages that may be
offered by a nonlinear damper over a linear damper.
</html>
<<tabs Presentations
"Conference Presentations" "Conference Presentations" [[Conference Papers]]
"Other Presentations" "Other Presentations" [[Other Presentations]]>>
<<tabs Publications
"Journal Papers" "Journal Papers" [[Journal Papers]]
"Conference Papers" "Conference Papers" [[Conference Papers]]
"Technical Reports" "Technical Reports" [[Technical Reports]]
"PhD Dissertation" "PhD Dissertation" [[PhD Dissertation]]>>
/***
|Name|RearrangeTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#RearrangeTiddlersPlugin|
|Version|0.0.0|
|Author|Joe Raii|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.refreshTiddler|
|Description|drag tiddlers by title to re-order story column display|
adapted from: http://www.cs.utexas.edu/~joeraii/dragn/#Draggable
changes by ELS:
* hijack refreshTiddler() instead of overridding createTiddler()
* find title element by className instead of elementID
* set cursor style via code instead of stylesheet
* set tooltip help text
* set tiddler "position:relative" when starting drag event, restore saved value when drag ends
* update 2006.08.07: use getElementsByTagName("*") to find title element, even when it is 'buried' deep in tiddler DOM elements (due to custom template usage)
* update 2007.03.01: use apply() to invoke hijacked core function
* update 2008.01.13: only hijack core function once. (allows for dynamic loading of plugin via bookmarklet)
***/
//{{{
if (Story.prototype.rearrangeTiddlersHijack_refreshTiddler===undefined) {
Story.prototype.rearrangeTiddlersHijack_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template)
{
this.rearrangeTiddlersHijack_refreshTiddler.apply(this,arguments);
var theTiddler = document.getElementById(this.idPrefix + title); if (!theTiddler) return;
var theHandle;
var children=theTiddler.getElementsByTagName("*");
for (var i=0; i<children.length; i++) if (hasClass(children[i],"title")) { theHandle=children[i]; break; }
if (!theHandle) return theTiddler;
Drag.init(theHandle, theTiddler, 0, 0, null, null);
theHandle.style.cursor="move";
theHandle.title="drag title to re-arrange tiddlers"
theTiddler.onDrag = function(x,y,myElem) {
if (this.style.position!="relative")
{ this.savedstyle=this.style.position; this.style.position="relative"; }
y = myElem.offsetTop;
var next = myElem.nextSibling;
var prev = myElem.previousSibling;
if (next && y + myElem.offsetHeight > next.offsetTop + next.offsetHeight/2) {
myElem.parentNode.removeChild(myElem);
next.parentNode.insertBefore(myElem, next.nextSibling);//elems[pos+1]);
myElem.style["top"] = -next.offsetHeight/2+"px";
}
if (prev && y < prev.offsetTop + prev.offsetHeight/2) {
myElem.parentNode.removeChild(myElem);
prev.parentNode.insertBefore(myElem, prev);
myElem.style["top"] = prev.offsetHeight/2+"px";
}
};
theTiddler.onDragEnd = function(x,y,myElem) {
myElem.style["top"] = "0px";
if (this.savedstyle!=undefined)
this.style.position=this.savedstyle;
}
return theTiddler;
}
}
/**************************************************
* dom-drag.js
* 09.25.2001
* www.youngpup.net
**************************************************
* 10.28.2001 - fixed minor bug where events
* sometimes fired off the handle, not the root.
**************************************************/
var Drag = {
obj:null,
init:
function(o, oRoot, minX, maxX, minY, maxY) {
o.onmousedown = Drag.start;
o.root = oRoot && oRoot != null ? oRoot : o ;
if (isNaN(parseInt(o.root.style.left))) o.root.style.left="0px";
if (isNaN(parseInt(o.root.style.top))) o.root.style.top="0px";
o.minX = typeof minX != 'undefined' ? minX : null;
o.minY = typeof minY != 'undefined' ? minY : null;
o.maxX = typeof maxX != 'undefined' ? maxX : null;
o.maxY = typeof maxY != 'undefined' ? maxY : null;
o.root.onDragStart = new Function();
o.root.onDragEnd = new Function();
o.root.onDrag = new Function();
},
start:
function(e) {
var o = Drag.obj = this;
e = Drag.fixE(e);
var y = parseInt(o.root.style.top);
var x = parseInt(o.root.style.left);
o.root.onDragStart(x, y, Drag.obj.root);
o.lastMouseX = e.clientX;
o.lastMouseY = e.clientY;
if (o.minX != null) o.minMouseX = e.clientX - x + o.minX;
if (o.maxX != null) o.maxMouseX = o.minMouseX + o.maxX - o.minX;
if (o.minY != null) o.minMouseY = e.clientY - y + o.minY;
if (o.maxY != null) o.maxMouseY = o.minMouseY + o.maxY - o.minY;
document.onmousemove = Drag.drag;
document.onmouseup = Drag.end;
Drag.obj.root.style["z-index"] = "10";
return false;
},
drag:
function(e) {
e = Drag.fixE(e);
var o = Drag.obj;
var ey = e.clientY;
var ex = e.clientX;
var y = parseInt(o.root.style.top);
var x = parseInt(o.root.style.left);
var nx, ny;
if (o.minX != null) ex = Math.max(ex, o.minMouseX);
if (o.maxX != null) ex = Math.min(ex, o.maxMouseX);
if (o.minY != null) ey = Math.max(ey, o.minMouseY);
if (o.maxY != null) ey = Math.min(ey, o.maxMouseY);
nx = x + (ex - o.lastMouseX);
ny = y + (ey - o.lastMouseY);
Drag.obj.root.style["left"] = nx + "px";
Drag.obj.root.style["top"] = ny + "px";
Drag.obj.lastMouseX = ex;
Drag.obj.lastMouseY = ey;
Drag.obj.root.onDrag(nx, ny, Drag.obj.root);
return false;
},
end:
function() {
document.onmousemove = null;
document.onmouseup = null;
Drag.obj.root.style["z-index"] = "0";
Drag.obj.root.onDragEnd(parseInt(Drag.obj.root.style["left"]), parseInt(Drag.obj.root.style["top"]), Drag.obj.root);
Drag.obj = null;
},
fixE:
function(e) {
if (typeof e == 'undefined') e = window.event;
if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
return e;
}
};
//}}}
My research interests include structural dynamics, computational mechanics, structural response to wind and blast loading, and computational analysis of progressive collapse vulnerability. If you're interested in these topics, the following research opportunities are available at NIST; please [[contact me|Contact Information]] if you're interested:
* [[NRC/NIST Postdoctoral Research Opportunity]] (US citizens only)
* [[Summer Undergraduate Research Fellowship program at NIST|http://www.surf.nist.gov/welcome.htm]] (US citizens and permanent residents)
* Associate Member, [[American Society of Civil Engineers|http://www.asce.org]]
* Member, [[Structural Wind Engineering Committee|http://www.seiwec.net/]] of the [[Structural Engineering Institute|http://content.seinstitute.org/]], ASCE (May 2007 – Present)
* Member, [[Dynamics Committee|http://www.engmechinstitute.org/Dynamics.html]] of the [[Engineering Mechanics Institute|http://www.engmechinstitute.org/]], ASCE (July 2003 – Present)
* Member, Task Committee D (Wind Engineering), [[UJNR Panel on Wind and Seismic Effects|http://www.pwri.go.jp/eng/ujnr/ujnr.htm]]
* Technical Reviewer:
** [[AIAA Journal|http://www.aiaa.org/content.cfm?pageid=322&lupubid=2]]
** [[Engineering Structures|http://www.sciencedirect.com/science/journal/01410296]]
** [[Journal of ASTM International|http://journalsip.astm.org/JOURNALS/JAI/jai_home.html]]
** [[Journal of Engineering Mechanics|http://scitation.aip.org/emo/]]
** [[Journal of Sound and Vibration|http://www.sciencedirect.com/science/journal/0022460X]]
** [[Journal of Wind Engineering and Industrial Aerodynamics|http://www.sciencedirect.com/science/journal/01676105]]
** [[Nuclear Engineering and Design|http://www.sciencedirect.com/science/journal/00295493]]
<<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
Research Structural Engineer
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};
//--
//-- Sparklines
//--
config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
var data = [];
var min = 0;
var max = 0;
var v;
for(var t=0; t<params.length; t++) {
v = parseInt(params[t]);
if(v < min)
min = v;
if(v > max)
max = v;
data.push(v);
}
if(data.length < 1)
return;
var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
box.title = data.join(",");
var w = box.offsetWidth;
var h = box.offsetHeight;
box.style.paddingRight = (data.length * 2 - w) + "px";
box.style.position = "relative";
for(var d=0; d<data.length; d++) {
var tick = document.createElement("img");
tick.border = 0;
tick.className = "sparktick";
tick.style.position = "absolute";
tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
tick.style.left = d*2 + "px";
tick.style.width = "2px";
v = Math.floor(((data[d] - min)/(max-min)) * h);
tick.style.top = (h-v) + "px";
tick.style.height = v + "px";
box.appendChild(tick);
}
};
}
//}}}
/***
Inspired by k2
!General
***/
/*{{{*/
body {
background: #EDEDED;
}
#contentWrapper{
background: #fff;
border:1px solid #DDD;
margin: 0 16em;
padding:0;
height:1%;}
/*}}}*/
/***
!Links
***/
/*{{{*/
a,
a.tiddlyLink,
a.button,
a.externalLink,
#sidebarOptions .sliderPanel a{
color: #1D65BC;
text-decoration: none;
background: transparent;
border: 0;
}
a:hover,
a.tiddlyLink:hover,
a.button:hover,
a.externalLink:hover,
#sidebarOptions .sliderPanel a:hover
{
border: 0;
color: #1D65BC;
text-decoration: underline;
background:transparent;
}
.button:active {background:#1d65bc; border:0;}
.viewer .button:active, .viewer .marked, .viewer .highlight {
color: #fff !important;
background: #3371a3;
border: 0;
}
/*}}}*/
/***
!Header
***/
/*{{{*/
.gradient {margin-top:20px; background:#3371A3;}
.titleLine{padding: 80px 40px 32px 40px;}
.titleLine a:hover{color:#fff; border-bottom:1px dotted #eee; text-decoration:none;}
.titleLine a{color:#fff; border-bottom:1px dotted #ccc;}
.siteTitle {
font-size: 2.2em;
font-weight: bold;
color:#fff;
}
.siteSubtitle {
font-size: 1.0em;
display: block;
margin: .3em auto 1em;
color:#fff;
}
/*}}}*/
/***
!TopMenu
***/
/*{{{*/
#topMenu br {display:none; }
#topMenu { background: #3371A3; font-size:1em; }
#topMenu { padding:5px 32px; }
#topMenu .button, #topMenu .tiddlyLink {
margin-left:0.1em; margin-right:0.1em;
padding:0.5em;
color:white; font-weight:normal;
}
#topMenu a.button:hover, #topMenu a.tiddlyLink:hover { background:#fff; color:#333; text-decoration:none;}
.searchBar {float:right; font-size:0.9em;}
.searchBar .button {display:block; border:none; color:#ccc;}
.searchBar .button:hover{border:none; color:#eee;}
.searchBar input{
border: 1px inset #1d65bc; background:#dbdee3;
}
.searchBar input:focus {
border: 1px inset #3371a3; background:#fff;
}
/*}}}*/
/***
!Display
***/
/***
!!!Display General
***/
/*{{{*/
#displayArea { margin: 0em 15.7em 0em 1em; }
#displayFooter {
clear: both;
}
#displayFooter {
clear: both;
}
#tiddlerDisplay{padding-top:1em;}
/*}}}*/
/***
!!!Tiddler
***/
/*{{{*/
.tiddler {margin-bottom:1em; padding-bottom:1em;}
.tiddler {padding-left:2em;}
.title {color:#333; font-size:1.8em; border-bottom:1px solid #333; padding-bottom:0.3px;}
.subtitle { display:none; }
.shadow .title {
color: #aaa;
}
h1,h2,h3,h4,h5 { color: #333; background: transparent; padding-bottom:2px; border-bottom: 1px dotted #666; }
* html .viewer pre {
margin-left: 0em;
}
.viewer hr {
border: 0;
border-top: solid 1px #333;
margin: 0 8em;
color: #333;
}
.viewer a.button {color:#000; border:1px solid #1D65BC; font-weight:bold;}
.viewer a.button:hover{color:#fff; background:#3371a3; text-decoration:none;}
.tagClear {clear:none;}
.toolbar .button {color:#bbb; border:none;}
.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active {background:transparent; color:#111; border:none; text-decoration:underline;}
.tiddler {border-bottom:3px solid #EEF1F3; padding-bottom:2em; padding-top:0em;}
.title {border-bottom:none; margin-right:8em;}
h1,h2,h3,h4,h5 { color: #333; background: transparent; padding-bottom:2px; border-bottom: none; }
.viewer pre, .viewer code {
border: 1px solid #B2B6BE;
background: #EBEEF1;}
.tagging, .tagged {
border: 1px solid #dbdee3;
background-color: #ebeef1;
}
.selected .tagging, .selected .tagged {
background-color: #dbdee3;
border: 1px solid #B2B6BE;
}
.tagging .listTitle, .tagged .listTitle {
color: #bbb;
}
.selected .tagging .listTitle, .selected .tagged .listTitle {
color: #014;
}
.tagging .button:hover, .tagged .button:hover {
border: none; background:transparent; text-decoration:underline; color:#014;
}
.tagged .highlight, .tagged .marked, .tagged a.button:active {text-decoration:underline; background:transparent; color:#014;}
.tagging .button, .tagged .button {
color:#bbb;
}
.selected .tagging .button, .selected .tagged .button {
color:#014;
}
.viewer blockquote {
border-left:7px solid #ebeef1;
}
.viewer table {
border: 1px solid #3371a3;
}
.viewer th, thead td {
background: #3371a3;
border: 1px solid #3371a3;
color: #fff;
}
.viewer td, .viewer tr {
border: 1px solid #3371a3;
}
/*}}}*/
/***
!!!Editor
***/
/*{{{*/
* html .editor textarea, * html .editor input {
width: 98%;
}
.editor input, .editor textarea {
border: 1px solid #1d65bc; background:#ebeef1;
}
.editor {padding-top:0.3em;}
.editor textarea:focus, .editor input:focus {
border: 1px inset #3371a3; background:#fff;
}
/*}}}*/
/***
!Sidebar
***/
/*{{{*/
#sidebar{
position:relative;
float:right;
margin-bottom:1em;
display:inline;
width: 16em;
}
#sidebar .tabSelected, #sidebar .tabSected:hover {
color: #000;
background: #dbdee3;
border-top: solid 1px #B2B6BE;
border-left: solid 1px #B2B6BE;
border-right: solid 1px #B2B6BE;
border-bottom:solid 1px #dbdee3 !important;
padding-bottom:1px;
text-decoration:none;
}
#sidebarOptions, #sidebarTabs {border-left: 1px solid #B2B6BE;}
#sidebarTabs {border-bottom: 1px solid #B2B6BE;}
#sidebar .tabUnselected, #sidebar .tabUnselected:hover {
color: #F0F3F5;
background: #B2B6BE ;
border: solid 1px #B2B6BE ;
padding-bottom:1px;
}
#sidebarTabs .tabContents {border:none; background:#DBDEE3; }
#sidebarTabs .tabContents {border-top:1px solid #B2B6BE;}
#sidebarTabs .tabContents .tabContents {border-left:1px solid #b2b6be;}
#sidebarOptions .sliderPanel {
background: #EBEEF1; border:none;
}
#sidebarOptions input {
border: 1px solid #1d65bc;
}
#sidebarOptions input:hover, #sidebarOptions input:active, #sidebarOptions input:focus {
border: 1px inset #3371a3;
}
#sidebar {background: #EBEEF1 ; right:0;}
#sidebar .button:active, #sidebar .marked, #sidebar .highlight {color:#014; background:transparent;text-decoration:none}
/*}}}*/
/***
!!Popups
***/
/*{{{*/
.popup {
background: #3371a3;
border: 1px solid #333;
}
.popup hr {
color: #333;
background: #333;
border-bottom: 1px;
}
.popup li.disabled {
color: #333;
}
.popup li a, .popup li a:visited {
color: #eee;
border: none;
}
.popup li a:hover {
background: #3371a3;
color: #fff;
border: none;
text-decoration:underline;
}
/*}}}*/
/***
!!Message Area
***/
/*{{{*/
#messageArea {
border: 2px dashed #3371a3;
background: #dbdee3;
color: #fff;
font-size:90%;
}
#messageArea .button {
color: #1d65bc;
background: #ebeef1;
text-decoration:none;
font-weight:bold;
border:none;
}
#messageArea a.button {color:#1d65bc;}
#messageArea .button:hover {text-decoration:underline;}
/*}}}*/
/***
!!Tabs
***/
/*{{{*/
.viewer .tabSelected, .viewer .tabSelected:hover{
color: #014;
background: #eee;
border-left: 1px solid #B2B6BE;
border-top: 1px solid #B2B6BE;
border-right: 1px solid #B2B6BE;
}
.viewer .tabUnselected, .viewer .tabUnselected:hover {
color: #fff;
background: #B2B6BE;
}
. viewer .tabContents {
color: #014;
background: #ebeef1;
border: 1px solid #B2B6BE;
}
/*}}}*/
.blog h2, .blog h3, .blog h4{
margin:0;
padding:0;
border-bottom:none;
}
.blog {margin-left:1.5em;}
.blog .excerpt {
margin:0;
margin-top:0.3em;
padding: 0;
margin-left:1em;
padding-left:1em;
font-size:90%;
border-left:1px solid #ddd;
}
#tiddlerWhatsNew h1, #tiddlerWhatsNew h2 {border-bottom:none;}
div[tags~="RecentUpdates"], div[tags~="lewcidExtension"] {margin-bottom: 2em;}
#topMenu .fontResizer {float:right;}
#topMenu .fontResizer .button{border:1px solid #3371A3;}
#topMenu .fontResizer .button:hover {border:1px solid #fff; color:#3371A3;}
#sidebarTabs .txtMainTab .tiddlyLinkExisting {
font-weight: normal;
font-style: normal;
}
#sidebarTabs .txtMoreTab .tiddlyLinkExisting {
font-weight: bold;
font-style: normal;
}
/***
|Name|TabEditPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#TabEditPlugin|
|Version|0.32|
|Requires|~TW2.x|
!Description
Makes editing of tabs easier.
!Usage
*Double click a tab to edit the source tiddler
*Double click outside the tabset to edit the containing tiddler.
!Demo
TestTabs
!History
*28-04-06, v0.32 - fixed previous bug fix!
*27-04-06, v0.31 - fixed conflicts with tabs created using PartTiddler.
*26-04-06, v0.30 - first public release
***/
//{{{
//tab on double click event handler
Story.prototype.onTabDblClick = function(e){
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
var title= this.getAttribute("source");
if ((version.extensions.PartTiddlerPlugin)&&(title.indexOf("/")!=-1))
{if (!oldFetchTiddler.call(this, [title]))
{return false;}}
story.displayTiddler(theTarget,title,2,false,null)
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return false;
}
config.macros.tabs.switchTab = function(tabset,tab)
{
var cookie = tabset.getAttribute("cookie");
var theTab = null
var nodes = tabset.childNodes;
for(var t=0; t<nodes.length; t++)
if(nodes[t].getAttribute && nodes[t].getAttribute("tab") == tab)
{
theTab = nodes[t];
theTab.className = "tab tabSelected";
}
else
nodes[t].className = "tab tabUnselected"
if(theTab)
{
if(tabset.nextSibling && tabset.nextSibling.className == "tabContents")
tabset.parentNode.removeChild(tabset.nextSibling);
var tabContent = createTiddlyElement(null,"div",null,"tabContents",null);
tabset.parentNode.insertBefore(tabContent,tabset.nextSibling);
var contentTitle = theTab.getAttribute("content");
//set source attribute equal to title of tiddler displayed in tab
tabContent.setAttribute("source",contentTitle);
//add dbl click event
tabContent.ondblclick = story.onTabDblClick;
wikify(store.getTiddlerText(contentTitle),tabContent,null,store.getTiddler(contentTitle));
if(cookie)
{
config.options[cookie] = tab;
saveOptionCookie(cookie);
}
}
}
//}}}
<html>
<p>
Gross, J.L., <b>Main, J.A.</b>, Phan, L.T., Sadek, F.H., Cauffman, S.A., Jorgensen, D.P. (2009). <a href="http://www.bfrl.nist.gov/investigations/pubs/NISTIR7636_Oct2009.pdf">Draft Report on the Collapse of the Dallas Cowboys Indoor Practice Facility, May 2, 2009</a>, NISTIR 7636, October 2009. (<a href="http://www.nist.gov/public_affairs/releases/cowboys_100609.html">press release</a> and <a href="http://www.bfrl.nist.gov/investigations/pubs/PublicReleaseCollapseoftheDallasCowboysIndoorPracticeFacility_Oct2009.pdf">slide presentation</a>)
<p>
National Institute of Standards and Technology (2008). <a href="http://wtc.nist.gov/NCSTAR1/NCSTAR1-9index.htm">Structural Fire Response and Probable Collapse Sequence of World Trade Center Building 7</a>, NIST NCSTAR 1-9. November 2008, 796 pages. (co-author of Chapter 8 in <a href="http://wtc.nist.gov/NCSTAR1/PDF/NCSTAR%201-9%20Vol%201.pdf">Volume I</a>, contributor to Chapter 12 in <a href="http://wtc.nist.gov/NCSTAR1/PDF/NCSTAR%201-9%20Vol%202.pdf">Volume 2</a>)
<p>
<b>Main, J.A.</b> and Fritz, W.P. (2006). <a href="http://www.itl.nist.gov/div898/winds/pdf_files/Main-Fritz_DAD_BSS180.pdf">Database-assisted design for wind: concepts, software, and examples for rigid and flexible buildings</a>. NIST Building Science Series 180, March 2006.
<p>
<b>Main, J.A.</b> and Gazonas, G.A. (2005). <i>Air blast loading on composite panels: computational modeling and comparison with experiments</i>. ARL-TR-3502; U.S. Army Research Laboratory: Aberdeen Proving Ground, MD, May 2005, 64 pp. (distribution limited)
<p>
<b>Main, J.A.</b> and Krenk, S. (2004). <i>Efficiency and tuning of viscous dampers on discrete systems</i>. Danish Center for Applied Mathematics & Mechanics, Report No. 698, Oct. 2004. (<a href="http://www.fam.web.mek.dtu.dk/dcamm/abs%20698.htm">Abstract</a>)
</html>
/***
|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.
!Demo
<<toggleSideBar "Toggle Sidebar">>
!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)
You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}
!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour.
*20-07-06: version 0.11
*27-04-06: version 0.1: working.
!Code
***/
//{{{
config.macros.toggleSideBar={};
config.macros.toggleSideBar.settings={
styleHide : "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
styleShow : " ",
arrow1: "«",
arrow2: "»"
};
config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
var tooltip= params[1]||'toggle sidebar';
var mode = (params[2] && params[2]=="hide")? "hide":"show";
var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
var label= (params[0]&¶ms[0]!='.')?params[0]+" "+arrow:arrow;
var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
if (mode == "hide")
{
(document.getElementById("sidebar")).setAttribute("toggle","hide");
setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
}
};
config.macros.toggleSideBar.onToggleSideBar = function(){
var sidebar = document.getElementById("sidebar");
var settings = config.macros.toggleSideBar.settings;
if (sidebar.getAttribute("toggle")=='hide')
{
setStylesheet(settings.styleShow,"ToggleSideBarStyles");
sidebar.setAttribute("toggle","show");
this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
}
else
{
setStylesheet(settings.styleHide,"ToggleSideBarStyles");
sidebar.setAttribute("toggle","hide");
this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
}
return false;
}
setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");
//}}}
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.3 (2008-04-16)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|© 2005-2008 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Community:''|[[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]]|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!
For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1.
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Source Code
***/
/***
This plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.3.js]] to get the readable source code.
***/
///%
if(!version.extensions.YourSearchPlugin){version.extensions.YourSearchPlugin={major:2,minor:1,revision:3,source:"http://tiddlywiki.abego-software.de/#YourSearchPlugin",licence:"[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",copyright:"Copyright (c) abego Software GmbH, 2005-2008 (www.abego-software.de)"};if(!window.abego){window.abego={};}
if(!Array.forEach){Array.forEach=function(_1,_2,_3){for(var i=0,len=_1.length;i<len;i++){_2.call(_3,_1[i],i,_1);}};Array.prototype.forEach=function(_5,_6){for(var i=0,len=this.length;i<len;i++){_5.call(_6,this[i],i,this);}};}
abego.toInt=function(s,_9){if(!s){return _9;}
var n=parseInt(s);return(n==NaN)?_9:n;};abego.createEllipsis=function(_b){var e=createTiddlyElement(_b,"span");e.innerHTML="…";};abego.shallowCopy=function(_d){if(!_d){return _d;}
var _e={};for(var n in _d){_e[n]=_d[n];}
return _e;};abego.copyOptions=function(_10){return!_10?{}:abego.shallowCopy(_10);};abego.countStrings=function(_11,s){if(!s){return 0;}
var len=s.length;var n=0;var _15=0;while(1){var i=_11.indexOf(s,_15);if(i<0){return n;}
n++;_15=i+len;}
return n;};abego.getBracedText=function(_17,_18,_19){if(!_18){_18=0;}
var re=/\{([^\}]*)\}/gm;re.lastIndex=_18;var m=re.exec(_17);if(m){var s=m[1];var _1d=abego.countStrings(s,"{");if(!_1d){if(_19){_19.lastIndex=re.lastIndex;}
return s;}
var len=_17.length;for(var i=re.lastIndex;i<len&&_1d;i++){var c=_17.charAt(i);if(c=="{"){_1d++;}else{if(c=="}"){_1d--;}}}
if(!_1d){if(_19){_19.lastIndex=i-1;}
return _17.substring(m.index+1,i-1);}}};abego.select=function(_21,_22,_23,_24){if(!_24){_24=[];}
_21.forEach(function(t){if(_22.call(_23,t)){_24.push(t);}});return _24;};abego.consumeEvent=function(e){if(e.stopPropagation){e.stopPropagation();}
if(e.preventDefault){e.preventDefault();}
e.cancelBubble=true;e.returnValue=true;};abego.TiddlerFilterTerm=function(_27,_28){if(!_28){_28={};}
var _29=_27;if(!_28.textIsRegExp){_29=_27.escapeRegExp();if(_28.fullWordMatch){_29="\\b"+_29+"\\b";}}
var _2a=new RegExp(_29,"m"+(_28.caseSensitive?"":"i"));this.tester=new abego.MultiFieldRegExpTester(_2a,_28.fields,_28.withExtendedFields);};abego.TiddlerFilterTerm.prototype.test=function(_2b){return this.tester.test(_2b);};abego.parseNewTiddlerCommandLine=function(s){var m=/(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);if(!m){m=/([^#]*)()(#.*)?/.exec(s);}
if(m){var r;if(m[3]){var s2=m[3].replace(/#/g,"");r=s2.parseParams("tag");}else{r=[[]];}
var _30=m[2]?m[2].trim():"";r.push({name:"text",value:_30});r[0].text=[_30];return{title:m[1].trim(),params:r};}else{return{title:s.trim(),params:[[]]};}};abego.parseTiddlerFilterTerm=function(_31,_32,_33){var re=/\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg;var _35={"!":"title","%":"text","#":"tags"};var _36={};var _37;re.lastIndex=_32;while(1){var i=re.lastIndex;var m=re.exec(_31);if(!m||m.index!=i){throw"Word or String literal expected";}
if(m[1]){var _3a={};var _3b=abego.getBracedText(_31,0,_3a);if(!_3b){throw"Invalid {...} syntax";}
var f=Function("tiddler","return ("+_3b+");");return{func:f,lastIndex:_3a.lastIndex,markRE:null};}
if(m[2]){_37=true;}else{if(m[3]){_36[_35[m[3]]]=1;}else{if(m[4]){_36[m[4]]=1;}else{var _3d=m[6];var _3e=m[5]?window.eval(m[5]):m[6]?m[6]:m[7]?m[7]:m[8];var _33=abego.copyOptions(_33);_33.fullWordMatch=_37;_33.textIsRegExp=_3d;var _3f=[];for(var n in _36){_3f.push(n);}
if(_3f.length==0){_33.fields=_33.defaultFields;}else{_33.fields=_3f;_33.withExtendedFields=false;}
var _41=new abego.TiddlerFilterTerm(_3e,_33);var _42=_3d?_3e:_3e.escapeRegExp();if(_42&&_37){_42="\\b"+_42+"\\b";}
return{func:function(_43){return _41.test(_43);},lastIndex:re.lastIndex,markRE:_42?"(?:"+_42+")":null};}}}}};abego.BoolExp=function(s,_45,_46){this.s=s;var _47=_46&&_46.defaultOperationIs_OR;var _48=/\s*(?:(\-|not)|(\())/gi;var _49=/\s*\)/g;var _4a=/\s*(?:(and|\&\&)|(or|\|\|))/gi;var _4b=/\s*[^\)\s]/g;var _4c=/\s*(\-|not)?(\s*\()?/gi;var _4d;var _4e=function(_4f){_4c.lastIndex=_4f;var m=_4c.exec(s);var _51;var _52;if(m&&m.index==_4f){_4f+=m[0].length;_51=m[1];if(m[2]){var e=_4d(_4f);_49.lastIndex=e.lastIndex;if(!_49.exec(s)){throw"Missing ')'";}
_52={func:e.func,lastIndex:_49.lastIndex,markRE:e.markRE};}}
if(!_52){_52=_45(s,_4f,_46);}
if(_51){_52.func=(function(f){return function(_55){return!f(_55);};})(_52.func);_52.markRE=null;}
return _52;};_4d=function(_56){var _57=_4e(_56);while(1){var l=_57.lastIndex;_4a.lastIndex=l;var m=_4a.exec(s);var _5a;var _5b;if(m&&m.index==l){_5a=!m[1];_5b=_4e(_4a.lastIndex);}else{try{_5b=_4e(l);}
catch(e){return _57;}
_5a=_47;}
_57.func=(function(_5c,_5d,_5e){return _5e?function(_5f){return _5c(_5f)||_5d(_5f);}:function(_60){return _5c(_60)&&_5d(_60);};})(_57.func,_5b.func,_5a);_57.lastIndex=_5b.lastIndex;if(!_57.markRE){_57.markRE=_5b.markRE;}else{if(_5b.markRE){_57.markRE=_57.markRE+"|"+_5b.markRE;}}}};var _61=_4d(0);this.evalFunc=_61.func;if(_61.markRE){this.markRegExp=new RegExp(_61.markRE,_46.caseSensitive?"mg":"img");}};abego.BoolExp.prototype.exec=function(){return this.evalFunc.apply(this,arguments);};abego.BoolExp.prototype.getMarkRegExp=function(){return this.markRegExp;};abego.BoolExp.prototype.toString=function(){return this.s;};abego.MultiFieldRegExpTester=function(re,_63,_64){this.re=re;this.fields=_63?_63:["title","text","tags"];this.withExtendedFields=_64;};abego.MultiFieldRegExpTester.prototype.test=function(_65){var re=this.re;for(var i=0;i<this.fields.length;i++){var s=store.getValue(_65,this.fields[i]);if(typeof s=="string"&&re.test(s)){return this.fields[i];}}
if(this.withExtendedFields){return store.forEachField(_65,function(_69,_6a,_6b){return typeof _6b=="string"&&re.test(_6b)?_6a:null;},true);}
return null;};abego.TiddlerQuery=function(_6c,_6d,_6e,_6f,_70){if(_6e){this.regExp=new RegExp(_6c,_6d?"mg":"img");this.tester=new abego.MultiFieldRegExpTester(this.regExp,_6f,_70);}else{this.expr=new abego.BoolExp(_6c,abego.parseTiddlerFilterTerm,{defaultFields:_6f,caseSensitive:_6d,withExtendedFields:_70});}
this.getQueryText=function(){return _6c;};this.getUseRegExp=function(){return _6e;};this.getCaseSensitive=function(){return _6d;};this.getDefaultFields=function(){return _6f;};this.getWithExtendedFields=function(){return _70;};};abego.TiddlerQuery.prototype.test=function(_71){if(!_71){return false;}
if(this.regExp){return this.tester.test(_71);}
return this.expr.exec(_71);};abego.TiddlerQuery.prototype.filter=function(_72){return abego.select(_72,this.test,this);};abego.TiddlerQuery.prototype.getMarkRegExp=function(){if(this.regExp){return"".search(this.regExp)>=0?null:this.regExp;}
return this.expr.getMarkRegExp();};abego.TiddlerQuery.prototype.toString=function(){return(this.regExp?this.regExp:this.expr).toString();};abego.PageWiseRenderer=function(){this.firstIndexOnPage=0;};merge(abego.PageWiseRenderer.prototype,{setItems:function(_73){this.items=_73;this.setFirstIndexOnPage(0);},getMaxPagesInNavigation:function(){return 10;},getItemsCount:function(_74){return this.items?this.items.length:0;},getCurrentPageIndex:function(){return Math.floor(this.firstIndexOnPage/this.getItemsPerPage());},getLastPageIndex:function(){return Math.floor((this.getItemsCount()-1)/this.getItemsPerPage());},setFirstIndexOnPage:function(_75){this.firstIndexOnPage=Math.min(Math.max(0,_75),this.getItemsCount()-1);},getFirstIndexOnPage:function(){this.firstIndexOnPage=Math.floor(this.firstIndexOnPage/this.getItemsPerPage())*this.getItemsPerPage();return this.firstIndexOnPage;},getLastIndexOnPage:function(){return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1,this.getItemsCount()-1);},onPageChanged:function(_76,_77){},renderPage:function(_78){if(_78.beginRendering){_78.beginRendering(this);}
try{if(this.getItemsCount()){var _79=this.getLastIndexOnPage();var _7a=-1;for(var i=this.getFirstIndexOnPage();i<=_79;i++){_7a++;_78.render(this,this.items[i],i,_7a);}}}
finally{if(_78.endRendering){_78.endRendering(this);}}},addPageNavigation:function(_7c){if(!this.getItemsCount()){return;}
var _7d=this;var _7e=function(e){if(!e){var e=window.event;}
abego.consumeEvent(e);var _80=abego.toInt(this.getAttribute("page"),0);var _81=_7d.getCurrentPageIndex();if(_80==_81){return;}
var _82=_80*_7d.getItemsPerPage();_7d.setFirstIndexOnPage(_82);_7d.onPageChanged(_80,_81);};var _83;var _84=this.getCurrentPageIndex();var _85=this.getLastPageIndex();if(_84>0){_83=createTiddlyButton(_7c,"Previous","Go to previous page (Shortcut: Alt-'<')",_7e,"prev");_83.setAttribute("page",(_84-1).toString());_83.setAttribute("accessKey","<");}
for(var i=-this.getMaxPagesInNavigation();i<this.getMaxPagesInNavigation();i++){var _87=_84+i;if(_87<0){continue;}
if(_87>_85){break;}
var _88=(i+_84+1).toString();var _89=_87==_84?"currentPage":"otherPage";_83=createTiddlyButton(_7c,_88,"Go to page %0".format([_88]),_7e,_89);_83.setAttribute("page",(_87).toString());}
if(_84<_85){_83=createTiddlyButton(_7c,"Next","Go to next page (Shortcut: Alt-'>')",_7e,"next");_83.setAttribute("page",(_84+1).toString());_83.setAttribute("accessKey",">");}}});abego.LimitedTextRenderer=function(){var _8a=40;var _8b=4;var _8c=function(_8d,_8e,_8f){var n=_8d.length;if(n==0){_8d.push({start:_8e,end:_8f});return;}
var i=0;for(;i<n;i++){var _92=_8d[i];if(_92.start<=_8f&&_8e<=_92.end){var r;var _94=i+1;for(;_94<n;_94++){r=_8d[_94];if(r.start>_8f||_8e>_92.end){break;}}
var _95=_8e;var _96=_8f;for(var j=i;j<_94;j++){r=_8d[j];_95=Math.min(_95,r.start);_96=Math.max(_96,r.end);}
_8d.splice(i,_94-i,{start:_95,end:_96});return;}
if(_92.start>_8f){break;}}
_8d.splice(i,0,{start:_8e,end:_8f});};var _98=function(_99){var _9a=0;for(var i=0;i<_99.length;i++){var _9c=_99[i];_9a+=_9c.end-_9c.start;}
return _9a;};var _9d=function(c){return(c>="a"&&c<="z")||(c>="A"&&c<="Z")||c=="_";};var _9f=function(s,_a1){if(!_9d(s[_a1])){return null;}
for(var i=_a1-1;i>=0&&_9d(s[i]);i--){}
var _a3=i+1;var n=s.length;for(i=_a1+1;i<n&&_9d(s[i]);i++){}
return{start:_a3,end:i};};var _a5=function(s,_a7,_a8){var _a9;if(_a8){_a9=_9f(s,_a7);}else{if(_a7<=0){return _a7;}
_a9=_9f(s,_a7-1);}
if(!_a9){return _a7;}
if(_a8){if(_a9.start>=_a7-_8b){return _a9.start;}
if(_a9.end<=_a7+_8b){return _a9.end;}}else{if(_a9.end<=_a7+_8b){return _a9.end;}
if(_a9.start>=_a7-_8b){return _a9.start;}}
return _a7;};var _aa=function(s,_ac){var _ad=[];if(_ac){var _ae=0;var n=s.length;var _b0=0;do{_ac.lastIndex=_ae;var _b1=_ac.exec(s);if(_b1){if(_ae<_b1.index){var t=s.substring(_ae,_b1.index);_ad.push({text:t});}
_ad.push({text:_b1[0],isMatch:true});_ae=_b1.index+_b1[0].length;}else{_ad.push({text:s.substr(_ae)});break;}}while(true);}else{_ad.push({text:s});}
return _ad;};var _b3=function(_b4){var _b5=0;for(var i=0;i<_b4.length;i++){if(_b4[i].isMatch){_b5++;}}
return _b5;};var _b7=function(s,_b9,_ba,_bb,_bc){var _bd=Math.max(Math.floor(_bc/(_bb+1)),_8a);var _be=Math.max(_bd-(_ba-_b9),0);var _bf=Math.min(Math.floor(_ba+_be/3),s.length);var _c0=Math.max(_bf-_bd,0);_c0=_a5(s,_c0,true);_bf=_a5(s,_bf,false);return{start:_c0,end:_bf};};var _c1=function(_c2,s,_c4){var _c5=[];var _c6=_b3(_c2);var pos=0;for(var i=0;i<_c2.length;i++){var t=_c2[i];var _ca=t.text;if(t.isMatch){var _cb=_b7(s,pos,pos+_ca.length,_c6,_c4);_8c(_c5,_cb.start,_cb.end);}
pos+=_ca.length;}
return _c5;};var _cc=function(s,_ce,_cf){var _d0=_cf-_98(_ce);while(_d0>0){if(_ce.length==0){_8c(_ce,0,_a5(s,_cf,false));return;}else{var _d1=_ce[0];var _d2;var _d3;if(_d1.start==0){_d2=_d1.end;if(_ce.length>1){_d3=_ce[1].start;}else{_8c(_ce,_d2,_a5(s,_d2+_d0,false));return;}}else{_d2=0;_d3=_d1.start;}
var _d4=Math.min(_d3,_d2+_d0);_8c(_ce,_d2,_d4);_d0-=(_d4-_d2);}}};var _d5=function(_d6,s,_d8,_d9,_da){if(_d9.length==0){return;}
var _db=function(_dc,s,_de,_df,_e0){var t;var _e2;var pos=0;var i=0;var _e5=0;for(;i<_de.length;i++){t=_de[i];_e2=t.text;if(_df<pos+_e2.length){_e5=_df-pos;break;}
pos+=_e2.length;}
var _e6=_e0-_df;for(;i<_de.length&&_e6>0;i++){t=_de[i];_e2=t.text.substr(_e5);_e5=0;if(_e2.length>_e6){_e2=_e2.substr(0,_e6);}
if(t.isMatch){createTiddlyElement(_dc,"span",null,"marked",_e2);}else{createTiddlyText(_dc,_e2);}
_e6-=_e2.length;}
if(_e0<s.length){abego.createEllipsis(_dc);}};if(_d9[0].start>0){abego.createEllipsis(_d6);}
var _e7=_da;for(var i=0;i<_d9.length&&_e7>0;i++){var _e9=_d9[i];var len=Math.min(_e9.end-_e9.start,_e7);_db(_d6,s,_d8,_e9.start,_e9.start+len);_e7-=len;}};this.render=function(_eb,s,_ed,_ee){if(s.length<_ed){_ed=s.length;}
var _ef=_aa(s,_ee);var _f0=_c1(_ef,s,_ed);_cc(s,_f0,_ed);_d5(_eb,s,_ef,_f0,_ed);};};(function(){function alertAndThrow(msg){alert(msg);throw msg;}
if(version.major<2||(version.major==2&&version.minor<1)){alertAndThrow("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");}
abego.YourSearch={};var _f2;var _f3;var _f4=function(_f5){_f2=_f5;};var _f6=function(){return _f2?_f2:[];};var _f7=function(){return _f2?_f2.length:0;};var _f8=4;var _f9=10;var _fa=2;var _fb=function(s,re){var m=s.match(re);return m?m.length:0;};var _ff=function(_100,_101){var _102=_101.getMarkRegExp();if(!_102){return 1;}
var _103=_100.title.match(_102);var _104=_103?_103.length:0;var _105=_fb(_100.getTags(),_102);var _106=_103?_103.join("").length:0;var _107=_100.title.length>0?_106/_100.title.length:0;var rank=_104*_f8+_105*_fa+_107*_f9+1;return rank;};var _109=function(_10a,_10b,_10c,_10d,_10e,_10f){_f3=null;var _110=_10a.reverseLookup("tags",_10f,false);try{var _111=[];if(config.options.chkSearchInTitle){_111.push("title");}
if(config.options.chkSearchInText){_111.push("text");}
if(config.options.chkSearchInTags){_111.push("tags");}
_f3=new abego.TiddlerQuery(_10b,_10c,_10d,_111,config.options.chkSearchExtendedFields);}
catch(e){return[];}
var _112=_f3.filter(_110);var _113=abego.YourSearch.getRankFunction();for(var i=0;i<_112.length;i++){var _115=_112[i];var rank=_113(_115,_f3);_115.searchRank=rank;}
if(!_10e){_10e="title";}
var _117=function(a,b){var _11a=a.searchRank-b.searchRank;if(_11a==0){if(a[_10e]==b[_10e]){return(0);}else{return(a[_10e]<b[_10e])?-1:+1;}}else{return(_11a>0)?-1:+1;}};_112.sort(_117);return _112;};var _11b=80;var _11c=50;var _11d=250;var _11e=50;var _11f=25;var _120=10;var _121="yourSearchResult";var _122="yourSearchResultItems";var _123;var _124;var _125;var _126;var _127;var _128=function(){if(version.extensions.YourSearchPlugin.styleSheetInited){return;}
version.extensions.YourSearchPlugin.styleSheetInited=true;setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");};var _129=function(){return _124!=null&&_124.parentNode==document.body;};var _12a=function(){if(_129()){document.body.removeChild(_124);}};var _12b=function(e){_12a();var _12d=this.getAttribute("tiddlyLink");if(_12d){var _12e=this.getAttribute("withHilite");var _12f=highlightHack;if(_12e&&_12e=="true"&&_f3){highlightHack=_f3.getMarkRegExp();}
story.displayTiddler(this,_12d);highlightHack=_12f;}
return(false);};var _130=function(){if(!_125){return;}
var root=_125;var _132=findPosX(root);var _133=findPosY(root);var _134=root.offsetHeight;var _135=_132;var _136=_133+_134;var _137=findWindowWidth();if(_137<_124.offsetWidth){_124.style.width=(_137-100)+"px";_137=findWindowWidth();}
var _138=_124.offsetWidth;if(_135+_138>_137){_135=_137-_138-30;}
if(_135<0){_135=0;}
_124.style.left=_135+"px";_124.style.top=_136+"px";_124.style.display="block";};var _139=function(){if(_124){window.scrollTo(0,ensureVisible(_124));}
if(_125){window.scrollTo(0,ensureVisible(_125));}};var _13a=function(){_130();_139();};var _13b;var _13c;var _13d=new abego.PageWiseRenderer();var _13e=function(_13f){this.itemHtml=store.getTiddlerText("YourSearchItemTemplate");if(!this.itemHtml){alertAndThrow("YourSearchItemTemplate not found");}
this.place=document.getElementById(_122);if(!this.place){this.place=createTiddlyElement(_13f,"div",_122);}};merge(_13e.prototype,{render:function(_140,_141,_142,_143){_13b=_143;_13c=_141;var item=createTiddlyElement(this.place,"div",null,"yourSearchItem");item.innerHTML=this.itemHtml;applyHtmlMacros(item,null);refreshElements(item,null);},endRendering:function(_145){_13c=null;}});var _146=function(){if(!_124||!_125){return;}
var html=store.getTiddlerText("YourSearchResultTemplate");if(!html){html="<b>Tiddler YourSearchResultTemplate not found</b>";}
_124.innerHTML=html;applyHtmlMacros(_124,null);refreshElements(_124,null);var _148=new _13e(_124);_13d.renderPage(_148);_13a();};_13d.getItemsPerPage=function(){var n=(config.options.chkPreviewText)?abego.toInt(config.options.txtItemsPerPageWithPreview,_120):abego.toInt(config.options.txtItemsPerPage,_11f);return(n>0)?n:1;};_13d.onPageChanged=function(){_146();};var _14a=function(){if(_125==null||!config.options.chkUseYourSearch){return;}
if((_125.value==_123)&&_123&&!_129()){if(_124&&(_124.parentNode!=document.body)){document.body.appendChild(_124);_13a();}else{abego.YourSearch.onShowResult(true);}}};var _14b=function(){_12a();_124=null;_123=null;};var _14c=function(self,e){while(e!=null){if(self==e){return true;}
e=e.parentNode;}
return false;};var _14f=function(e){if(e.target==_125){return;}
if(e.target==_126){return;}
if(_124&&_14c(_124,e.target)){return;}
_12a();};var _151=function(e){if(e.keyCode==27){_12a();}};addEvent(document,"click",_14f);addEvent(document,"keyup",_151);var _153=function(text,_155,_156){_123=text;_f4(_109(store,text,_155,_156,"title","excludeSearch"));abego.YourSearch.onShowResult();};var _157=function(_158,_159,_15a,_15b,_15c,_15d){_128();_123="";var _15e=null;var _15f=function(txt){if(config.options.chkUseYourSearch){_153(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}else{story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}
_123=txt.value;};var _161=function(e){_15f(_125);return false;};var _163=function(e){if(!e){var e=window.event;}
_125=this;switch(e.keyCode){case 13:if(e.ctrlKey&&_127&&_129()){_127.onclick.apply(_127,[e]);}else{_15f(this);}
break;case 27:if(_129()){_12a();}else{this.value="";clearMessage();}
break;}
if(String.fromCharCode(e.keyCode)==this.accessKey||e.altKey){_14a();}
if(this.value.length<3&&_15e){clearTimeout(_15e);}
if(this.value.length>2){if(this.value!=_123){if(!config.options.chkUseYourSearch||config.options.chkSearchAsYouType){if(_15e){clearTimeout(_15e);}
var txt=this;_15e=setTimeout(function(){_15f(txt);},500);}}else{if(_15e){clearTimeout(_15e);}}}
if(this.value.length==0){_12a();}};var _166=function(e){this.select();clearMessage();_14a();};var args=_15c.parseParams("list",null,true);var _169=getFlag(args,"buttonAtRight");var _16a=getParam(args,"sizeTextbox",this.sizeTextbox);var btn;if(!_169){btn=createTiddlyButton(_158,this.label,this.prompt,_161);}
var txt=createTiddlyElement(_158,"input",null,null,null);if(_15a[0]){txt.value=_15a[0];}
txt.onkeyup=_163;txt.onfocus=_166;txt.setAttribute("size",_16a);txt.setAttribute("accessKey",this.accessKey);txt.setAttribute("autocomplete","off");if(config.browser.isSafari){txt.setAttribute("type","search");txt.setAttribute("results","5");}else{txt.setAttribute("type","text");}
if(_169){btn=createTiddlyButton(_158,this.label,this.prompt,_161);}
_125=txt;_126=btn;};var _16d=function(){_12a();var _16e=_f6();var n=_16e.length;if(n){var _170=[];for(var i=0;i<n;i++){_170.push(_16e[i].title);}
story.displayTiddlers(null,_170);}};var _172=function(_173,_174,_175,_176){invokeMacro(_173,"option",_174,_175,_176);var elem=_173.lastChild;var _178=elem.onclick;elem.onclick=function(e){var _17a=_178.apply(this,arguments);_146();return _17a;};return elem;};var _17b=function(s){var _17d=["''","{{{","}}}","//","<<<","/***","***/"];var _17e="";for(var i=0;i<_17d.length;i++){if(i!=0){_17e+="|";}
_17e+="("+_17d[i].escapeRegExp()+")";}
return s.replace(new RegExp(_17e,"mg"),"").trim();};var _180=function(){var i=_13b;return(i>=0&&i<=9)?(i<9?(i+1):0):-1;};var _182=new abego.LimitedTextRenderer();var _183=function(_184,s,_186){_182.render(_184,s,_186,_f3.getMarkRegExp());};var _187=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_188,_189,_18a,_18b,_18c,tags,_18e){_187.apply(this,arguments);_14b();};var _18f=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_190){_18f.apply(this,arguments);_14b();};config.macros.yourSearch={label:"yourSearch",prompt:"Gives access to the current/last YourSearch result",handler:function(_191,_192,_193,_194,_195,_196){if(_193.length==0){return;}
var name=_193[0];var func=config.macros.yourSearch.funcs[name];if(func){func(_191,_192,_193,_194,_195,_196);}},tests:{"true":function(){return true;},"false":function(){return false;},"found":function(){return _f7()>0;},"previewText":function(){return config.options.chkPreviewText;}},funcs:{itemRange:function(_199){if(_f7()){var _19a=_13d.getLastIndexOnPage();var s="%0 - %1".format([_13d.getFirstIndexOnPage()+1,_19a+1]);createTiddlyText(_199,s);}},count:function(_19c){createTiddlyText(_19c,_f7().toString());},query:function(_19d){if(_f3){createTiddlyText(_19d,_f3.toString());}},version:function(_19e){var t="YourSearch %0.%1.%2".format([version.extensions.YourSearchPlugin.major,version.extensions.YourSearchPlugin.minor,version.extensions.YourSearchPlugin.revision]);var e=createTiddlyElement(_19e,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#YourSearchPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_1a1){var e=createTiddlyElement(_1a1,"a");e.setAttribute("href","http://www.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">© 2005-2008 <b><font color=\"red\">abego</font></b> Software<font>";},newTiddlerButton:function(_1a3){if(_f3){var r=abego.parseNewTiddlerCommandLine(_f3.getQueryText());var btn=config.macros.newTiddler.createNewTiddlerButton(_1a3,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");var _1a6=btn.onclick;btn.onclick=function(){_12a();_1a6.apply(this,arguments);};_127=btn;}},linkButton:function(_1a7,_1a8,_1a9,_1aa,_1ab,_1ac){if(_1a9<2){return;}
var _1ad=_1a9[1];var text=_1a9<3?_1ad:_1a9[2];var _1af=_1a9<4?text:_1a9[3];var _1b0=_1a9<5?null:_1a9[4];var btn=createTiddlyButton(_1a7,text,_1af,_12b,null,null,_1b0);btn.setAttribute("tiddlyLink",_1ad);},closeButton:function(_1b2,_1b3,_1b4,_1b5,_1b6,_1b7){var _1b8=createTiddlyButton(_1b2,"close","Close the Search Results (Shortcut: ESC)",_12a);},openAllButton:function(_1b9,_1ba,_1bb,_1bc,_1bd,_1be){var n=_f7();if(n==0){return;}
var _1c0=n==1?"open tiddler":"open all %0 tiddlers".format([n]);var _1c1=createTiddlyButton(_1b9,_1c0,"Open all found tiddlers (Shortcut: Alt-O)",_16d);_1c1.setAttribute("accessKey","O");},naviBar:function(_1c2,_1c3,_1c4,_1c5,_1c6,_1c7){_13d.addPageNavigation(_1c2);},"if":function(_1c8,_1c9,_1ca,_1cb,_1cc,_1cd){if(_1ca.length<2){return;}
var _1ce=_1ca[1];var _1cf=(_1ce=="not");if(_1cf){if(_1ca.length<3){return;}
_1ce=_1ca[2];}
var test=config.macros.yourSearch.tests[_1ce];var _1d1=false;try{if(test){_1d1=test(_1c8,_1c9,_1ca,_1cb,_1cc,_1cd)!=_1cf;}else{_1d1=(!eval(_1ce))==_1cf;}}
catch(ex){}
if(!_1d1){_1c8.style.display="none";}},chkPreviewText:function(_1d2,_1d3,_1d4,_1d5,_1d6,_1d7){var _1d8=_1d4.slice(1).join(" ");var elem=_172(_1d2,"chkPreviewText",_1d5,_1d7);elem.setAttribute("accessKey","P");elem.title="Show text preview of found tiddlers (Shortcut: Alt-P)";return elem;}}};config.macros.foundTiddler={label:"foundTiddler",prompt:"Provides information on the tiddler currently processed on the YourSearch result page",handler:function(_1da,_1db,_1dc,_1dd,_1de,_1df){var name=_1dc[0];var func=config.macros.foundTiddler.funcs[name];if(func){func(_1da,_1db,_1dc,_1dd,_1de,_1df);}},funcs:{title:function(_1e2,_1e3,_1e4,_1e5,_1e6,_1e7){if(!_13c){return;}
var _1e8=_180();var _1e9=_1e8>=0?"Open tiddler (Shortcut: Alt-%0)".format([_1e8.toString()]):"Open tiddler";var btn=createTiddlyButton(_1e2,null,_1e9,_12b,null);btn.setAttribute("tiddlyLink",_13c.title);btn.setAttribute("withHilite","true");_183(btn,_13c.title,_11b);if(_1e8>=0){btn.setAttribute("accessKey",_1e8.toString());}},tags:function(_1eb,_1ec,_1ed,_1ee,_1ef,_1f0){if(!_13c){return;}
_183(_1eb,_13c.getTags(),_11c);},text:function(_1f1,_1f2,_1f3,_1f4,_1f5,_1f6){if(!_13c){return;}
_183(_1f1,_17b(_13c.text),_11d);},field:function(_1f7,_1f8,_1f9,_1fa,_1fb,_1fc){if(!_13c){return;}
var name=_1f9[1];var len=_1f9.length>2?abego.toInt(_1f9[2],_11e):_11e;var v=store.getValue(_13c,name);if(v){_183(_1f7,_17b(v),len);}},number:function(_200,_201,_202,_203,_204,_205){var _206=_180();if(_206>=0){var text="%0)".format([_206.toString()]);createTiddlyElement(_200,"span",null,"shortcutNumber",text);}}}};var opts={chkUseYourSearch:true,chkPreviewText:true,chkSearchAsYouType:true,chkSearchInTitle:true,chkSearchInText:true,chkSearchInTags:true,chkSearchExtendedFields:true,txtItemsPerPage:_11f,txtItemsPerPageWithPreview:_120};for(var n in opts){if(config.options[n]==undefined){config.options[n]=opts[n];}}
config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";config.shadowTiddlers["YourSearch Help"]="!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet"+"edTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you"+" need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Tas"+"k', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch"+"\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearc"+"h. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you m"+"ay do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly enterin"+"g the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/"+"}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript E"+"xpression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki interna"+"ls you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression"+" into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and e"+"valuate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tidd"+"ler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Com"+"bined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Res"+"ult|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its tit"+"les, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact wor"+"d). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encour"+"aged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. F"+"or quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|"+"!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search in"+"put field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the pr"+"evious search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. S"+"elect tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Resul"+"t]] is already closed and the cursor is in the search input field the field's content is cleared so "+"you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second e"+"tc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the "+"'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[Your"+"Search Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the "+"{{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of t"+"hese shortcuts don't work for you check your browser if you have other extensions installed that alr"+"eady \"use\" these shortcuts.//";config.shadowTiddlers["YourSearch Options"]="|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText"+">> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required"+" to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!') <<option chk"+"SearchInText>>Text ('%') <<option chkSearchInTags>>Tags ('#') <<option chkSearchExtendedFiel"+"ds>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don"+"'t explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!"+"', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items "+"on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with pre"+"view text: <<option txtItemsPerPageWithPreview>>|\n";config.shadowTiddlers["YourSearchStyleSheet"]="/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800"+"px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGra"+"y;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width:"+" thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSea"+"rchRange, .yourSearchCount, .yourSearchQuery {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary ."+"button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summa"+"ry .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*"+"/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-to"+"p: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearc"+"hText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFoote"+"r {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;"+"\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/"+"\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: bla"+"ck;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSe"+"archNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #"+"FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold"+";\n\tcolor: blue;\n}\n/*}}}*/\n";config.shadowTiddlers["YourSearchResultTemplate"]="<!--\n{{{\n-->\n<span macro=\"yourSearch if found\">\n<!-- The Summary Header ============================"+"================ -->\n<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">"+"<tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearc"+"h itemRange\"></span>\n\t\t of <span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+"\t\tfor <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n\t</td>\n\t<td class=\"yourSea"+"rchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel"+"\">preview text</span>\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch openAllButton\"></span>\n\t\t<span macro=\"yourSearch lin"+"kButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkB"+"utton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch clo"+"seButton\"></span>\n\t</td>\n </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ================="+"=========================== -->\n<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPr"+"eview=\"10\"></div>\n\n<!-- The Footer (with the Navigation) ==========================================="+"= -->\n<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody"+">\n <tr>\n\t<td align=\"left\">\n\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar"+"\"></span>\n\t</td>\n\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearc"+"h copyright\"></span>\n\t</td>\n </tr>\n</tbody></table>\n<!-- end of the 'tiddlers found' case ========="+"================================== -->\n</span>\n\n\n<!-- The \"No tiddlers found\" case ================="+"========================== -->\n<span macro=\"yourSearch if not found\">\n<table class=\"summary\" border="+"\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Resu"+"lt: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n\t</td>\n\t<t"+"d class=\"yourSearchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Options'"+" options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help"+" 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch closeButton\"></span>\n\t</td>\n <"+"/tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n";config.shadowTiddlers["YourSearchItemTemplate"]="<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSea"+"rchTitle' macro='foundTiddler title'/></span> - \n<span class='yourSearchTags' macro='found"+"Tiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='fo"+"undTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";config.shadowTiddlers["YourSearch"]="<<tiddler [[YourSearch Help]]>>";config.shadowTiddlers["YourSearch Result"]="The popup-like window displaying the result of a YourSearch query.";config.macros.search.handler=_157;var _20a=function(){if(config.macros.search.handler!=_157){alert("Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may "+"disable the other plugin or change the load order of \nthe plugins (by changing the names of the tidd"+"lers)\nto enable the 'Your Search' features.");}};setTimeout(_20a,5000);abego.YourSearch.getStandardRankFunction=function(){return _ff;};abego.YourSearch.getRankFunction=function(){return abego.YourSearch.getStandardRankFunction();};abego.YourSearch.getCurrentTiddler=function(){return _13c;};abego.YourSearch.closeResult=function(){_12a();};abego.YourSearch.getFoundTiddlers=function(){return _f2;};abego.YourSearch.getQuery=function(){return _f3;};abego.YourSearch.onShowResult=function(_20b){highlightHack=_f3?_f3.getMarkRegExp():null;if(!_20b){_13d.setItems(_f6());}
if(!_124){_124=createTiddlyElement(document.body,"div",_121,"yourSearchResult");}else{if(_124.parentNode!=document.body){document.body.appendChild(_124);}}
_146();highlightHack=null;};})();}
//%/