From 4ebe8d104f9c7907e433e2da3053f99d14e64a98 Mon Sep 17 00:00:00 2001 From: Tony Brix Date: Sun, 13 Dec 2020 02:06:45 -0600 Subject: [PATCH 1/5] add build-docs script --- .gitignore | 3 + build-docs.js | 101 ++++ docs/branding/footer.html.in | 2 + docs/branding/header.html.in | 4 +- docs/branding/media/css/restdown.css | 325 ----------- docs/branding/media/css/style.css | 605 +++++++++------------ docs/branding/media/js/jquery-1.4.2.min.js | 154 ------ docs/client.md | 5 +- docs/dn.md | 4 + docs/errors.md | 4 + docs/examples.md | 4 + docs/filters.md | 5 +- docs/guide.md | 5 +- docs/index.md | 7 +- docs/server.md | 5 +- package.json | 5 +- 16 files changed, 407 insertions(+), 831 deletions(-) create mode 100644 build-docs.js delete mode 100644 docs/branding/media/css/restdown.css delete mode 100644 docs/branding/media/js/jquery-1.4.2.min.js diff --git a/.gitignore b/.gitignore index 7ab3e39..9750810 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,6 @@ xcuserdata *.pem *.env.json *.env + +# built docs +docs/dist diff --git a/build-docs.js b/build-docs.js new file mode 100644 index 0000000..cf05047 --- /dev/null +++ b/build-docs.js @@ -0,0 +1,101 @@ +const fs = require('fs/promises') +const path = require('path') +const marked = require('marked') +const fm = require('front-matter') + +function tocHTML (toc) { + let html = '\n' + + return html +} + +function markdownTOC (markdown) { + const tokens = marked.lexer(markdown) + const slugger = new marked.Slugger() + const toc = [] + let currentHeading + let ignoreFirst = true + for (const token of tokens) { + if (token.type === 'heading') { + if (token.depth === 1) { + if (ignoreFirst) { + ignoreFirst = false + continue + } + currentHeading = { + text: token.text, + slug: slugger.slug(token.text), + children: [] + } + toc.push(currentHeading) + } else if (token.depth === 2) { + if (!currentHeading) { + continue + } + currentHeading.children.push({ + text: token.text, + slug: slugger.slug(token.text) + }) + } + } + } + + return { + toc: tocHTML(toc), + html: marked.parser(tokens) + } +} + +function createHTML (header, footer, text) { + const { attributes, body } = fm(text) + for (const prop in attributes) { + header = header.replace(new RegExp(`%\\(${prop}\\)s`, 'ig'), attributes[prop]) + footer = footer.replace(new RegExp(`%\\(${prop}\\)s`, 'ig'), attributes[prop]) + } + + const { toc, html } = markdownTOC(body) + + header = header.replace(/%\(toc_html\)s/ig, toc) + + return header + html + footer +} + +async function createDocs () { + const docs = path.join(__dirname, 'docs') + const dist = path.join(docs, 'dist') + + await fs.rmdir(dist, { recursive: true }) + await fs.mkdir(dist) + + const header = await fs.readFile(path.join(docs, 'branding', 'header.html.in'), { encoding: 'utf8' }) + const footer = await fs.readFile(path.join(docs, 'branding', 'footer.html.in'), { encoding: 'utf8' }) + const files = await fs.readdir(docs) + for (const file of files) { + if (!file.endsWith('.md')) { + continue + } + const text = await fs.readFile(path.join(docs, file), { encoding: 'utf8' }) + const html = createHTML(header, footer, text) + + await fs.writeFile(path.join(dist, file.replace(/md$/, 'html')), html) + } + + const dest = path.join(dist, 'media') + const src = path.join(docs, 'branding', 'media') + await fs.mkdir(dest) + await fs.mkdir(path.join(dest, 'css')) + await fs.mkdir(path.join(dest, 'img')) + await fs.copyFile(path.join(src, 'css', 'style.css'), path.join(dest, 'css', 'style.css')) + await fs.copyFile(path.join(src, 'img', 'logo.svg'), path.join(dest, 'img', 'logo.svg')) +} + +createDocs() diff --git a/docs/branding/footer.html.in b/docs/branding/footer.html.in index 5e4f33e..a5618f5 100644 --- a/docs/branding/footer.html.in +++ b/docs/branding/footer.html.in @@ -1,3 +1,5 @@ + + @@ -30,3 +30,5 @@ %(toc_html)s + +
diff --git a/docs/branding/media/css/restdown.css b/docs/branding/media/css/restdown.css deleted file mode 100644 index c5477d6..0000000 --- a/docs/branding/media/css/restdown.css +++ /dev/null @@ -1,325 +0,0 @@ - -/* ---- general styles */ - -body { - font: 13px "Lucida Grande", "Lucida Sans Unicode", arial, sans-serif; - line-height: 1.53846; /* 20px */ - color: #4a3f2d; -} - -:focus { - outline: 0; -} - -h1,h2,h3 { - font-weight:normal; -} - -h3{ - margin-bottom:0; -} - -ul, li { - margin:0px; - padding:0px; -} - -ul { - margin-left:40px; -} - -ul > li { - list-style:disc; - list-style-position:inside; - margin:10px 0px; -} - -hr { - border:none; - width:98%; - margin-left:-10px; - border-top:1px solid #CCCCCC; - border-bottom:1px solid #FFFFFF; -} - -code, -pre { - border:1px solid #CCCCCC; - background:#F2F0EE; - -webkit-border-radius:2px; - -moz-border-radius:2px; - border-radius:2px; - white-space:pre-wrap; -} -code { - padding: 0 0.2em; -} -pre { - margin: 1em 0; - padding: .75em; - overflow: auto; - padding:10px 1.2em; - margin-top:0; - margin-bottom:20px; -} -pre code { - border: medium none; - padding: 0; -} -a code { - text-decoration: underline; -} - -a { - color:#FD6512; - text-decoration:none; -} - -h4 { - font-size: 85%; - margin: 0; - padding: 0; - line-height: 1em; - display: inline; -} - - - -/* ---- custom classes */ - -pre.shell, -pre.shell code { - background:#444; - color:#fff; - border-width:0px; -} -pre.shell code::before { - content: '$ '; - display: inline; -} - - -/* ---- header and sidebar */ - -#header { - background:#C3BDB3; - background:#1C313C; - height:66px; - left:0px; - position:absolute; - top:0px; - width:100%; - z-index:1; - font-size:0.7em; -} - -#header h1 { - width: 424px; - height: 35px; - display:block; - background: url(../img/logo.svg) no-repeat; - line-height:2.1em; - padding:0; - padding-left:140px; - margin-top:18px; - margin-left:20px; - color:white; - text-transform: uppercase; -} - -#sidebar { - background-color:#EDEBEA; - bottom:0px; - left:0px; - overflow:auto; - padding:20px 0px 0px 15px; - position:absolute; - top:66px; - width:265px; - z-index:1; -} - -#content { - top:64px; - bottom:0px; - right:0px; - left:290px; - padding:20px 30px 400px; - position:absolute; - overflow:auto; - z-index:0; -} - -#sidebar .vertical_divider { - background-color:#FFFFFF; - bottom:0px; - position:absolute; - top:0px; - right:0px; - width:1px; -} - -#sidebar h1 { - font-size:1.2em; - padding:0px; - margin-top:15px; - margin-bottom:3px; -} - -#sidebar ul { - margin:3px 0 10px 0; -} - -#sidebar ul ul { - margin:3px 0 5px 10px; -} - -#sidebar li { - margin:0; - padding:0; - font-size:0.9em; -} - -#sidebar li, -#sidebar li a { - color:#5C5954; - list-style:none; - padding:1px 0px 1px 2px; -} - -#sidebar li span.verb { - color:#aaa; - padding:2px 3px 0px; - width:30px; - display:block; - float:left; - font-size:9px; - font-family:verdana; - -moz-border-radius:3px; - -webkit-border-radius:3px; - margin-left:0px; - margin-right:5px; -} - -#sidebar li.current { - background-repeat: no-repeat; - background-position:right; -} - - -/* ---- intro */ - -.intro { - color:#29231A; - padding: 22px 25px; - background: #EDEBEA; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - -o-border-radius: 5px; - border-radius: 5px; - margin-bottom:40px; -} -.intro pre.base { - background:#444; - color:#29231A; - color:#fff; - border-color:#fff; - font-size:1.5em; -} -.intro h1 { - color: #1C313C; -} -.intro h3 { - margin: 5px 0px 3px; - font-size: 100%; - font-weight: bold; -} -.intro ul { - list-style-type:disc; - padding-left:20px; - margin-left:0; -} -.intro ul li{ - margin:0; -} -.intro p { - padding-left:20px; - margin: 5px 0px 3px; -} - - - -h2 { - overflow: auto; - margin-top: 60px; - border-top: 2px solid #979592; - z-index: 3; -} -h1 + h2 { - margin-top: 0px; -} - -h2.fixed { - position:fixed; - margin-top: 0; - border-top:none; - right:45px; - top:66px; -} - -h2 span { - background: #979592; - float:right; - color:#fff; - margin:0; - margin-left:3px; - padding:0.3em 0.7em; - font-size: 0.55em; - word-spacing: 0.8em; /* separate verb from path */ - color:#fff; -} - - - - -/*---- print media */ - -@media print { - body { background:white; color:black; margin:0; } - #sidebar { - display: none; - } - #content { - position: relative; - padding: 5px; - left: 0px; - top: 0px; - } - h1, h2, h4 { - page-break-after: avoid; - } - pre { - page-break-inside: avoid; - } -} - -/* tables still need cellspacing="0" in the markup */ -table { - border-collapse:collapse; border-spacing:0; - margin: 20px 0; -} -th, -td { - border: solid #aaa; - border-width: 1px 0; - line-height: 23px; - padding: 0 12px; - text-align: left; - vertical-align: text-bottom; -} -th { - border-collapse: separate; -} -tbody tr:nth-child(odd) { - background-color: #f2f0ee; -} diff --git a/docs/branding/media/css/style.css b/docs/branding/media/css/style.css index dc43357..c5477d6 100644 --- a/docs/branding/media/css/style.css +++ b/docs/branding/media/css/style.css @@ -1,219 +1,66 @@ -/* Trent Mick's blog's CSS. Based heavily (at least initially) on - * and on . - */ -/* ---- reset - * html5doctor.com Reset Stylesheet (Eric Meyer's Reset Reloaded + HTML5 baseline) - * v1.4 2009-07-27 | Authors: Eric Meyer & Richard Clark - * html5doctor.com/html-5-reset-stylesheet/ - */ -html, body, div, span, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -abbr, address, cite, code, -del, dfn, em, img, ins, kbd, q, samp, -small, strong, sub, sup, var, -b, i, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, figure, footer, header, -hgroup, menu, nav, section, -time, mark, audio, video { - margin:0; - padding:0; - border:0; - outline:0; - font-size:100%; - vertical-align:baseline; - background:transparent; -} +/* ---- general styles */ -article, aside, figure, footer, header, -hgroup, nav, section { display:block; } - -nav ul { list-style:none; } - -blockquote, q { quotes:none; } - -blockquote:before, blockquote:after, -q:before, q:after { content:''; content:none; } - -a { margin:0; padding:0; font-size:100%; vertical-align:baseline; background:transparent; } -ins { background-color:#ff9; color:#000; text-decoration:none; } -mark { background-color:#ff9; color:#000; font-style:italic; font-weight:bold; } -del { text-decoration: line-through; } -abbr[title], dfn[title] { border-bottom:1px dotted #000; cursor:help; } -sub { vertical-align: sub; } -sup { vertical-align: super; } - -/* tables still need cellspacing="0" in the markup */ -table { border-collapse:collapse; border-spacing:0; } - -input, select { vertical-align:middle; } - - - -/* ---- 24px vertical rhythm - * - * All tags except 'pre' because 24px line-height is way too much, want 18px. - * Tough. - */ body { - line-height: 24px; - font-family: helvetica, arial, freesans, clean, sans-serif; - font-size: 16px; + font: 13px "Lucida Grande", "Lucida Sans Unicode", arial, sans-serif; + line-height: 1.53846; /* 20px */ + color: #4a3f2d; } -h1,h2,h3,h4,h5,h6 { - font-family: Georgia,serif; - font-weight: bold; - /* http://www.aestheticallyloyal.com/public/optimize-legibility/ */ - text-rendering: optimizeLegibility; + +:focus { + outline: 0; } -h1 { - font-size: 28px; - line-height: 48px; - padding: 24px 0 24px 0; + +h1,h2,h3 { + font-weight:normal; } -h2 { - font-size: 21px; - line-height: 24px; - padding: 24px 0 24px 0; + +h3{ + margin-bottom:0; } -h3 { - font-size: 16px; - line-height: 24px; - padding: 24px 0 0 0; + +ul, li { + margin:0px; + padding:0px; } -h4 { - font-size: 14px; - line-height: 24px; - padding: 24px 0 0 0; + +ul { + margin-left:40px; } -h5 { - color: #666; - font-size: 14px; - line-height: 24px; - padding: 24px 0 0 0; -} -h6 { - color: #666; - font-size: 12px; - line-height: 24px; - padding: 0; + +ul > li { + list-style:disc; + list-style-position:inside; + margin:10px 0px; } + hr { - padding-bottom: 24px; - margin: 24px 0; - height: 0; - border: none; - text-align: center; - color: #333; -} -hr:after { - content: "\2767"; -} -p + p { - padding-top: 24px; -} -dl { - margin: 24px 0; -} -dt { - font-weight: bold; - margin-top: 24px; -} -dd { - margin: 0 0 0 48px; -} - - - -/* ---- layout */ - -body { - margin: 12px; -} -#wrapper { - margin: 0 auto; - max-width: 700px; - position: relative; -} -#main { - min-height: 300px; -} -#fadeout { - z-index: 50; - position: fixed; - left: 0; - top: 0; - right: 0; - height: 210px; - background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 255)), to(rgba(255, 255, 255, 0))); - background: -moz-linear-gradient(top, rgba(255, 255, 255, 255), rgba(255, 255, 255, 0)); -} -#header { - position: fixed; - z-index: 100; - padding: 48px 0 24px 0; - top: 0; - left: auto; - right: auto; - width: 100%; - background: white; -} -#content { - position: relative; - top: 150px; - overflow: auto; - padding-bottom: 200px; -} -#footer { - position: relative; - padding-top: 60px; -} - -/* ---- base styles */ - -blockquote { - font-family: Georgia,serif; - font-size: 18px; - color: #555; - margin: 24px 15% 24px 15%; - margin: 24px 10% 24px 10%; -} -blockquote cite:before { - content: "\2014 "; -} -blockquote p.hangquotes, blockquote.hangquotes { - text-indent: -0.5em; + border:none; + width:98%; + margin-left:-10px; + border-top:1px solid #CCCCCC; + border-bottom:1px solid #FFFFFF; } code, pre { - font-family: Consolas, Monaco, "Lucida Console", "Courier New", monospace; - font-size: 12px; - background-color: #f5f5f5; - border: 1px solid #ccc; + border:1px solid #CCCCCC; + background:#F2F0EE; + -webkit-border-radius:2px; + -moz-border-radius:2px; + border-radius:2px; + white-space:pre-wrap; } code { padding: 0 0.2em; } pre { - font-size: 80%; - line-height: 18px; - padding: 5px; - margin: 18px 0; - - /* "overflow:auto" does NOT yield scrollbars in mobile browsers. iPhone - * *does* support two-finger scrolling inside the pre-block, but that - * is undiscoverable. Let's pre-wrap. - */ - white-space: pre; - white-space: -moz-pre-wrap; - white-space: -hp-pre-wrap; - white-space: -o-pre-wrap; - white-space: pre-wrap; - word-wrap: break-word; + margin: 1em 0; + padding: .75em; + overflow: auto; + padding:10px 1.2em; + margin-top:0; + margin-bottom:20px; } pre code { border: medium none; @@ -222,68 +69,20 @@ pre code { a code { text-decoration: underline; } -h1 + pre, -h2 + pre, -h3 + pre, -h4 + pre, -h5 + pre, -h6 + pre { - margin-top: 0; + +a { + color:#FD6512; + text-decoration:none; } -table { - margin: 24px 0; -} -th, -td { - border: solid #aaa; - border-width: 1px 0; - line-height: 23px; - padding: 0 12px; - text-align: left; -} -th { - border-collapse: separate; -} -tbody tr:nth-child(odd) { - background-color: #f6f6f6; +h4 { + font-size: 85%; + margin: 0; + padding: 0; + line-height: 1em; + display: inline; } -ol, ul { - padding: 12px 0; - margin: 0 0 0 24px; -} -ol ol, ul ul, ul ol, ol ul { - margin-left: 24px; -} -ol { list-style-type: decimal; } -ol ol { list-style-type: lower-alpha; } -ol ol ol { list-style-type: upper-roman; } -ol ol ol ol { list-style-type: lower-roman; } -ul { list-style-type: circle; } -ul ul { list-style-type: disc; } -ul ul ul { list-style-type: circle; } - -:link { color: hsl(206, 100%, 23%); } -:visited { color: hsl(240, 20%, 50%); } -:link:hover, :visited:hover { color: hsl(206, 100%, 38%); } - - -/* ---- larger screens */ - -@media only screen and (min-width: 481px) { - pre { - overflow: auto; - white-space: pre; - word-wrap: normal; - } -} - -@media only screen and (min-width: 700px) { - ol, ul { - margin: 0; - } -} /* ---- custom classes */ @@ -299,108 +98,228 @@ pre.shell code::before { display: inline; } -.copy { - font-size: 90%; - text-align: center; - color: #777; + +/* ---- header and sidebar */ + +#header { + background:#C3BDB3; + background:#1C313C; + height:66px; + left:0px; + position:absolute; + top:0px; + width:100%; + z-index:1; + font-size:0.7em; } -/* ----- top header */ -a#homelink:link { - color: #008000; - text-decoration: none; -} -a#homelink:visited { - color: #008000; - text-decoration: none; -} -a#homelink:active { - color: #008000; - text-decoration: none; -} -a#homelink:hover { - color: #008000; - text-decoration: none; -} -#logo { - font-family: Georgia,serif; - font-weight: bold; - font-size: 60px; - top: 55px; -} -#apibox, -#tocbox { - position: relative; -} -#tocbox { - margin-left: 24px; -} -.navbutton { - border: 1px solid #ccc; - position: relative; - display: inline-block; - width: 120px; - text-align: center; - top: -7px; - font-size: 70%; - font-weight: bold; +#header h1 { + width: 424px; + height: 35px; + display:block; + background: url(../img/logo.svg) no-repeat; + line-height:2.1em; + padding:0; + padding-left:140px; + margin-top:18px; + margin-left:20px; + color:white; text-transform: uppercase; - text-decoration: none; - color: black; } -.navbutton:hover { - cursor: pointer; - background-color: #f3f3f3; + +#sidebar { + background-color:#EDEBEA; + bottom:0px; + left:0px; + overflow:auto; + padding:20px 0px 0px 15px; + position:absolute; + top:66px; + width:265px; + z-index:1; } -.popup { - border: 1px solid #ccc; - padding: 5px 10px; - background-color: white; - font-size: 80%; - line-height: 1.6em; - position: absolute; - top: 16px; - left: 0px; - width: 200px; + +#content { + top:64px; + bottom:0px; + right:0px; + left:290px; + padding:20px 30px 400px; + position:absolute; + overflow:auto; + z-index:0; } -.popup a { - text-decoration: none; + +#sidebar .vertical_divider { + background-color:#FFFFFF; + bottom:0px; + position:absolute; + top:0px; + right:0px; + width:1px; } -.popup a:hover { - text-decoration: underline; + +#sidebar h1 { + font-size:1.2em; + padding:0px; + margin-top:15px; + margin-bottom:3px; } -.popup ul { - margin: 0; - padding: 0px; - list-style-type: none; + +#sidebar ul { + margin:3px 0 10px 0; } -.popup ul ul { - margin-left: 24px; + +#sidebar ul ul { + margin:3px 0 5px 10px; } -#githubfork { - position: fixed; - top: 0; - right: 0px; + +#sidebar li { + margin:0; + padding:0; + font-size:0.9em; } -#indextagline { - font-size: 24px; - font-style: italic; - text-align: center; - color: green; + +#sidebar li, +#sidebar li a { + color:#5C5954; + list-style:none; + padding:1px 0px 1px 2px; } -a#indextaglink:link { - color: #008000; - text-decoration: none; + +#sidebar li span.verb { + color:#aaa; + padding:2px 3px 0px; + width:30px; + display:block; + float:left; + font-size:9px; + font-family:verdana; + -moz-border-radius:3px; + -webkit-border-radius:3px; + margin-left:0px; + margin-right:5px; } -a#indextaglink:visited { - color: #008000; - text-decoration: none; + +#sidebar li.current { + background-repeat: no-repeat; + background-position:right; } -a#indextaglink:active { - color: #008000; - text-decoration: none; + + +/* ---- intro */ + +.intro { + color:#29231A; + padding: 22px 25px; + background: #EDEBEA; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + margin-bottom:40px; } -a#indextaglink:hover { - color: #008000; - text-decoration: none; +.intro pre.base { + background:#444; + color:#29231A; + color:#fff; + border-color:#fff; + font-size:1.5em; +} +.intro h1 { + color: #1C313C; +} +.intro h3 { + margin: 5px 0px 3px; + font-size: 100%; + font-weight: bold; +} +.intro ul { + list-style-type:disc; + padding-left:20px; + margin-left:0; +} +.intro ul li{ + margin:0; +} +.intro p { + padding-left:20px; + margin: 5px 0px 3px; +} + + + +h2 { + overflow: auto; + margin-top: 60px; + border-top: 2px solid #979592; + z-index: 3; +} +h1 + h2 { + margin-top: 0px; +} + +h2.fixed { + position:fixed; + margin-top: 0; + border-top:none; + right:45px; + top:66px; +} + +h2 span { + background: #979592; + float:right; + color:#fff; + margin:0; + margin-left:3px; + padding:0.3em 0.7em; + font-size: 0.55em; + word-spacing: 0.8em; /* separate verb from path */ + color:#fff; +} + + + + +/*---- print media */ + +@media print { + body { background:white; color:black; margin:0; } + #sidebar { + display: none; + } + #content { + position: relative; + padding: 5px; + left: 0px; + top: 0px; + } + h1, h2, h4 { + page-break-after: avoid; + } + pre { + page-break-inside: avoid; + } +} + +/* tables still need cellspacing="0" in the markup */ +table { + border-collapse:collapse; border-spacing:0; + margin: 20px 0; +} +th, +td { + border: solid #aaa; + border-width: 1px 0; + line-height: 23px; + padding: 0 12px; + text-align: left; + vertical-align: text-bottom; +} +th { + border-collapse: separate; +} +tbody tr:nth-child(odd) { + background-color: #f2f0ee; } diff --git a/docs/branding/media/js/jquery-1.4.2.min.js b/docs/branding/media/js/jquery-1.4.2.min.js deleted file mode 100644 index 7c24308..0000000 --- a/docs/branding/media/js/jquery-1.4.2.min.js +++ /dev/null @@ -1,154 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/docs/client.md b/docs/client.md index d9ea72e..69e353b 100644 --- a/docs/client.md +++ b/docs/client.md @@ -1,13 +1,16 @@ --- title: Client API | ldapjs -markdown2extras: tables --- # ldapjs Client API +
+ This document covers the ldapjs client API and assumes that you are familiar with LDAP. If you're not, read the [guide](guide.html) first. +
+ # Create a client The code to create a new client looks like: diff --git a/docs/dn.md b/docs/dn.md index de1463e..66f8dac 100644 --- a/docs/dn.md +++ b/docs/dn.md @@ -4,9 +4,13 @@ title: DN API | ldapjs # ldapjs DN API +
+ This document covers the ldapjs DN API and assumes that you are familiar with LDAP. If you're not, read the [guide](guide.html) first. +
+ DNs are LDAP distinguished names, and are composed of a set of RDNs (relative distinguished names). [RFC2253](http://www.ietf.org/rfc/rfc2253.txt) has the complete specification, but basically an RDN is an attribute value assertion diff --git a/docs/errors.md b/docs/errors.md index 6c6b5ba..48e45bd 100644 --- a/docs/errors.md +++ b/docs/errors.md @@ -4,9 +4,13 @@ title: Errors API | ldapjs # ldapjs Errors API +
+ This document covers the ldapjs errors API and assumes that you are familiar with LDAP. If you're not, read the [guide](guide.html) first. +
+ All errors in the ldapjs framework extend from an abstract error type called `LDAPError`. In addition to the properties listed below, all errors will have a `stack` property correctly set. diff --git a/docs/examples.md b/docs/examples.md index c12f93c..0c8cdad 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -4,9 +4,13 @@ title: Examples | ldapjs # ldapjs Examples +
+ This page contains a (hopefully) growing list of sample code to get you started with ldapjs. +
+ # In-memory server var ldap = require('ldapjs'); diff --git a/docs/filters.md b/docs/filters.md index c810dc2..d83f7cd 100644 --- a/docs/filters.md +++ b/docs/filters.md @@ -4,9 +4,13 @@ title: Filters API | ldapjs # ldapjs Filters API +
+ This document covers the ldapjs filters API and assumes that you are familiar with LDAP. If you're not, read the [guide](guide.html) first. +
+ LDAP search filters are really the backbone of LDAP search operations, and ldapjs tries to get you in "easy" with them if your dataset is small, and also lets you introspect them if you want to write a "query planner". For reference, @@ -277,4 +281,3 @@ key matching `attribute` and a value exactly matching `value`. f.matches({cn: 'foo'}); => true f.matches({cn: 'bar'}); => false - diff --git a/docs/guide.md b/docs/guide.md index 1c56a34..7c844b5 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -1,10 +1,11 @@ --- title: LDAP Guide | ldapjs -markdown2extras: tables --- # LDAP Guide +
+ This guide was written assuming that you (1) don't know anything about ldapjs, and perhaps more importantly (2) know little, if anything about LDAP. If you're already an LDAP whiz, please don't read this and feel it's condescending. Most @@ -14,6 +15,8 @@ password." By the end of this guide, we'll have a simple LDAP server that accomplishes a "real" task. +
+ # What exactly is LDAP? If you haven't already read the diff --git a/docs/index.md b/docs/index.md index 729027b..704483d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,5 @@ --- title: ldapjs -markdown2extras: tables ---
@@ -9,11 +8,15 @@ Reimagining LDAP< # Overview +
+ ldapjs is a pure JavaScript, from-scratch framework for implementing [LDAP](http://tools.ietf.org/html/rfc4510) clients and servers in [Node.js](http://nodejs.org). It is intended for developers used to interacting with HTTP services in node and [restify](http://restify.com). +
+ var ldap = require('ldapjs'); var server = ldap.createServer(); @@ -86,5 +89,3 @@ Specifically: * Extensible matching There are a few others, but those are the "big" ones. - - diff --git a/docs/server.md b/docs/server.md index efaa25a..639ff18 100644 --- a/docs/server.md +++ b/docs/server.md @@ -1,13 +1,16 @@ --- title: Server API | ldapjs -markdown2extras: wiki-tables --- # ldapjs Server API +
+ This document covers the ldapjs server API and assumes that you are familiar with LDAP. If you're not, read the [guide](guide.html) first. +
+ # Create a server The code to create a new server looks like: diff --git a/package.json b/package.json index ca872a2..0493c60 100644 --- a/package.json +++ b/package.json @@ -32,8 +32,10 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^4.2.1", + "front-matter": "^4.0.2", "get-port": "^5.1.1", "husky": "^4.2.5", + "marked": "^1.2.6", "tap": "14.11.0" }, "scripts": { @@ -45,7 +47,8 @@ "test:integration": "tap --no-cov 'test-integration/**/*.test.js'", "test:integration:local": "docker-compose up -d && npm run test:integration && docker-compose down", "lint": "eslint . --fix", - "lint:ci": "eslint ." + "lint:ci": "eslint .", + "docs": "node build-docs.js" }, "husky": { "hooks": { From 761b4df44271bf52b58b9112699197a5349a2736 Mon Sep 17 00:00:00 2001 From: Tony Brix Date: Sun, 13 Dec 2020 02:15:10 -0600 Subject: [PATCH 2/5] add update docs action --- .github/workflows/docs.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..fd77c4a --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,23 @@ +name: 'Update Docs' + +on: + push: + branches: + - master + +jobs: + docs: + name: Update Docs + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + - name: Install Packages + run: npm install + - name: Build Docs + run: npm run docs + - name: Deploy 🚢 + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/dist From 368159499bf2ea2403b66019950a2ad4f00f0320 Mon Sep 17 00:00:00 2001 From: Tony Brix Date: Sun, 13 Dec 2020 02:18:49 -0600 Subject: [PATCH 3/5] move to ./public folder --- .github/workflows/docs.yml | 1 - .gitignore | 2 +- build-docs.js | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index fd77c4a..ff30b6b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -20,4 +20,3 @@ jobs: uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/dist diff --git a/.gitignore b/.gitignore index 9750810..e70d427 100644 --- a/.gitignore +++ b/.gitignore @@ -77,4 +77,4 @@ xcuserdata *.env # built docs -docs/dist +public diff --git a/build-docs.js b/build-docs.js index cf05047..56ee381 100644 --- a/build-docs.js +++ b/build-docs.js @@ -71,7 +71,7 @@ function createHTML (header, footer, text) { async function createDocs () { const docs = path.join(__dirname, 'docs') - const dist = path.join(docs, 'dist') + const dist = path.join(__dirname, 'public') await fs.rmdir(dist, { recursive: true }) await fs.mkdir(dist) From c3a9c216191d712da2b872d3aa65abad03b37b73 Mon Sep 17 00:00:00 2001 From: Tony Brix Date: Sun, 13 Dec 2020 10:58:24 -0600 Subject: [PATCH 4/5] move to script folder --- package.json | 2 +- build-docs.js => scripts/build-docs.js | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) rename build-docs.js => scripts/build-docs.js (93%) diff --git a/package.json b/package.json index 0493c60..c960309 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "test:integration:local": "docker-compose up -d && npm run test:integration && docker-compose down", "lint": "eslint . --fix", "lint:ci": "eslint .", - "docs": "node build-docs.js" + "docs": "node scripts/build-docs.js" }, "husky": { "hooks": { diff --git a/build-docs.js b/scripts/build-docs.js similarity index 93% rename from build-docs.js rename to scripts/build-docs.js index 56ee381..b60a6c3 100644 --- a/build-docs.js +++ b/scripts/build-docs.js @@ -70,8 +70,8 @@ function createHTML (header, footer, text) { } async function createDocs () { - const docs = path.join(__dirname, 'docs') - const dist = path.join(__dirname, 'public') + const docs = path.resolve(__dirname, '..', 'docs') + const dist = path.resolve(__dirname, '..', 'public') await fs.rmdir(dist, { recursive: true }) await fs.mkdir(dist) @@ -98,4 +98,7 @@ async function createDocs () { await fs.copyFile(path.join(src, 'img', 'logo.svg'), path.join(dest, 'img', 'logo.svg')) } -createDocs() +createDocs().catch(ex => { + console.error(ex) + process.exit(1) +}) From 87eed8f240eafd04484322e58eafb461e338bd03 Mon Sep 17 00:00:00 2001 From: Tony Brix Date: Sun, 13 Dec 2020 11:57:55 -0600 Subject: [PATCH 5/5] deploy to ldapjs.github.io --- .github/workflows/docs.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index ff30b6b..ad9cf44 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -17,6 +17,12 @@ jobs: - name: Build Docs run: npm run docs - name: Deploy 🚢 - uses: peaceiris/actions-gh-pages@v3 + uses: cpina/github-action-push-to-another-repository@master + env: + API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} with: - github_token: ${{ secrets.GITHUB_TOKEN }} + source-directory: 'public' + destination-github-username: 'ldapjs' + destination-repository-name: 'ldapjs.github.io' + user-email: 'bot@ldapjs.org' + target-branch: 'gh-pages'