summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Franke <nobody@nowhere.ws>2013-04-09 14:31:22 +0200
committerChristian Franke <nobody@nowhere.ws>2013-04-09 14:31:22 +0200
commit5a774ef6f3b38b19b26913a34b1388530c72334e (patch)
tree543127427771d75f652fc9e726cc39aa1a72571c
Initial Commit
-rw-r--r--README.txt25
-rw-r--r--deck.js/core/deck.core.css407
-rw-r--r--deck.js/core/deck.core.js498
-rwxr-xr-xdeck.js/core/deck.core.scss450
-rw-r--r--deck.js/extensions/anim/deck.anim.js176
-rw-r--r--deck.js/extensions/bundle-maker/README.txt24
-rwxr-xr-xdeck.js/extensions/bundle-maker/make-bundle.sh26
-rw-r--r--deck.js/extensions/bundle-maker/presentation.html140
-rw-r--r--deck.js/extensions/clone/deck.clone.js127
-rw-r--r--deck.js/extensions/events/README.md64
-rw-r--r--deck.js/extensions/events/deck.events.js23
-rw-r--r--deck.js/extensions/fit/deck.fit-fs.css14
-rw-r--r--deck.js/extensions/fit/deck.fit.js171
-rw-r--r--deck.js/extensions/goto/deck.goto.css41
-rw-r--r--deck.js/extensions/goto/deck.goto.html7
-rw-r--r--deck.js/extensions/goto/deck.goto.js170
-rwxr-xr-xdeck.js/extensions/goto/deck.goto.scss46
-rw-r--r--deck.js/extensions/hash/deck.hash.css13
-rw-r--r--deck.js/extensions/hash/deck.hash.html2
-rw-r--r--deck.js/extensions/hash/deck.hash.js142
-rw-r--r--deck.js/extensions/hash/deck.hash.scss15
-rw-r--r--deck.js/extensions/menu/deck.menu.css47
-rw-r--r--deck.js/extensions/menu/deck.menu.js187
-rwxr-xr-xdeck.js/extensions/menu/deck.menu.scss58
-rw-r--r--deck.js/extensions/navigation/deck.navigation.css43
-rw-r--r--deck.js/extensions/navigation/deck.navigation.html3
-rw-r--r--deck.js/extensions/navigation/deck.navigation.js92
-rwxr-xr-xdeck.js/extensions/navigation/deck.navigation.scss56
-rw-r--r--deck.js/extensions/scale/deck.scale.css28
-rw-r--r--deck.js/extensions/scale/deck.scale.js170
-rw-r--r--deck.js/extensions/scale/deck.scale.scss31
-rw-r--r--deck.js/extensions/simplemath/deck.simplemath.js25
-rw-r--r--deck.js/extensions/smartsyntax/deck.smartsyntax.js226
-rw-r--r--deck.js/extensions/status/deck.status.css25
-rw-r--r--deck.js/extensions/status/deck.status.html6
-rw-r--r--deck.js/extensions/status/deck.status.js120
-rwxr-xr-xdeck.js/extensions/status/deck.status.scss22
-rw-r--r--deck.js/extensions/step/deck.step.js119
-rw-r--r--deck.js/extensions/svg/deck.svg.js115
-rw-r--r--deck.js/jquery-1.7.2.min.js4
-rw-r--r--deck.js/libs/display-latex2.user.js2056
-rw-r--r--deck.js/libs/jquerysvg/blank.svg3
-rw-r--r--deck.js/libs/jquerysvg/jquery.svg.css15
-rw-r--r--deck.js/libs/jquerysvg/jquery.svg.min.js20
-rw-r--r--deck.js/libs/jquerysvg/jquery.svganim.min.js7
-rw-r--r--deck.js/libs/jquerysvg/jquery.svgdom.min.js7
-rw-r--r--deck.js/libs/jquerysvg/jquery.svgfilter.min.js7
-rw-r--r--deck.js/libs/jquerysvg/jquery.svggraph.min.js7
-rw-r--r--deck.js/libs/jquerysvg/jquery.svgplot.min.js7
-rw-r--r--deck.js/modernizr.custom.js4
-rwxr-xr-xdeck.js/samples/circle.svg167
-rw-r--r--deck.js/samples/deck-anim.html182
-rw-r--r--deck.js/samples/deck-clone.html195
-rw-r--r--deck.js/samples/deck-fit.html229
-rw-r--r--deck.js/samples/deck-simplemath.html151
-rw-r--r--deck.js/samples/deck-smartsyntax.html191
-rw-r--r--deck.js/samples/deck-step.html174
-rw-r--r--deck.js/samples/deck-svg.html368
-rw-r--r--deck.js/samples/rectangle.pngbin0 -> 216 bytes
-rw-r--r--deck.js/samples/simple.ogvbin0 -> 237046 bytes
-rwxr-xr-xdeck.js/samples/smiley.svg272
-rw-r--r--deck.js/themes/style/neon.css123
-rw-r--r--deck.js/themes/style/neon.scss155
-rw-r--r--deck.js/themes/style/swiss.css84
-rw-r--r--deck.js/themes/style/swiss.scss107
-rw-r--r--deck.js/themes/style/web-2.0.css192
-rw-r--r--deck.js/themes/style/web-2.0.scss250
-rw-r--r--deck.js/themes/transition/fade.css43
-rw-r--r--deck.js/themes/transition/fade.scss69
-rw-r--r--deck.js/themes/transition/horizontal-slide.css76
-rw-r--r--deck.js/themes/transition/horizontal-slide.scss90
-rw-r--r--deck.js/themes/transition/vertical-slide.css94
-rw-r--r--deck.js/themes/transition/vertical-slide.scss112
-rw-r--r--logo.pngbin0 -> 425671 bytes
-rw-r--r--presentation.html356
-rw-r--r--qrcode.pngbin0 -> 6463 bytes
76 files changed, 9771 insertions, 0 deletions
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..c09a67a
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,25 @@
+
+PRESENTATION FILE
+=================
+An bare example file including most used extensions is given in the current folder as "presentation.html".
+This files references and uses the files from the "deck.js" folder.
+If you want to reduce the overall size of the "deck.js" folder, you can safely remove the "deck.js/samples" directory (if you don't need the samples obviously).
+
+
+
+RESOURCES
+=========
+Example presentations can be found in the the deck.js/samples folder.
+You can also consult online examples, see http://home.heeere.com/tech-deckjs-ext.html
+
+
+
+NOTE FOR USE WITH CHROME/CHROMIUM
+=================================
+To allow the presentation page to load all the resources when stored locally, you must start chrome/chromium with a special command line option.
+Use "chromium-browser --disable-web-security " to do so.
+
+
+
+
+04c1b457865731e05d153f7c0f70b585f9bdf2fb
diff --git a/deck.js/core/deck.core.css b/deck.js/core/deck.core.css
new file mode 100644
index 0000000..277192f
--- /dev/null
+++ b/deck.js/core/deck.core.css
@@ -0,0 +1,407 @@
+html, body {
+ height: 100%;
+ padding: 0;
+ margin: 0;
+}
+
+body.deck-container {
+ overflow-y: auto;
+ position: static;
+}
+
+.deck-container {
+ position: relative;
+ min-height: 100%;
+ margin: 0 auto;
+ padding: 0 48px;
+ font-size: 16px;
+ line-height: 1.25;
+ overflow: hidden;
+ /* Resets and base styles from HTML5 Boilerplate */
+ /* End HTML5 Boilerplate adaptations */
+}
+.js .deck-container {
+ visibility: hidden;
+}
+.ready .deck-container {
+ visibility: visible;
+}
+.touch .deck-container {
+ -webkit-text-size-adjust: none;
+ -moz-text-size-adjust: none;
+}
+.deck-container div, .deck-container span, .deck-container object, .deck-container iframe,
+.deck-container h1, .deck-container h2, .deck-container h3, .deck-container h4, .deck-container h5, .deck-container h6, .deck-container p, .deck-container blockquote, .deck-container pre,
+.deck-container abbr, .deck-container address, .deck-container cite, .deck-container code, .deck-container del, .deck-container dfn, .deck-container em, .deck-container img, .deck-container ins, .deck-container kbd, .deck-container q, .deck-container samp,
+.deck-container small, .deck-container strong, .deck-container sub, .deck-container sup, .deck-container var, .deck-container b, .deck-container i, .deck-container dl, .deck-container dt, .deck-container dd, .deck-container ol, .deck-container ul, .deck-container li,
+.deck-container fieldset, .deck-container form, .deck-container label, .deck-container legend,
+.deck-container table, .deck-container caption, .deck-container tbody, .deck-container tfoot, .deck-container thead, .deck-container tr, .deck-container th, .deck-container td,
+.deck-container article, .deck-container aside, .deck-container canvas, .deck-container details, .deck-container figcaption, .deck-container figure,
+.deck-container footer, .deck-container header, .deck-container hgroup, .deck-container menu, .deck-container nav, .deck-container section, .deck-container summary,
+.deck-container time, .deck-container mark, .deck-container audio, .deck-container video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+.deck-container article, .deck-container aside, .deck-container details, .deck-container figcaption, .deck-container figure,
+.deck-container footer, .deck-container header, .deck-container hgroup, .deck-container menu, .deck-container nav, .deck-container section {
+ display: block;
+}
+.deck-container blockquote, .deck-container q {
+ quotes: none;
+}
+.deck-container blockquote:before, .deck-container blockquote:after, .deck-container q:before, .deck-container q:after {
+ content: "";
+ content: none;
+}
+.deck-container ins {
+ background-color: #ff9;
+ color: #000;
+ text-decoration: none;
+}
+.deck-container mark {
+ background-color: #ff9;
+ color: #000;
+ font-style: italic;
+ font-weight: bold;
+}
+.deck-container del {
+ text-decoration: line-through;
+}
+.deck-container abbr[title], .deck-container dfn[title] {
+ border-bottom: 1px dotted;
+ cursor: help;
+}
+.deck-container table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+.deck-container hr {
+ display: block;
+ height: 1px;
+ border: 0;
+ border-top: 1px solid #ccc;
+ margin: 1em 0;
+ padding: 0;
+}
+.deck-container input, .deck-container select {
+ vertical-align: middle;
+}
+.deck-container select, .deck-container input, .deck-container textarea, .deck-container button {
+ font: 99% sans-serif;
+}
+.deck-container pre, .deck-container code, .deck-container kbd, .deck-container samp {
+ font-family: monospace, sans-serif;
+}
+.deck-container a {
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+.deck-container a:hover, .deck-container a:active {
+ outline: none;
+}
+.deck-container ul, .deck-container ol {
+ margin-left: 2em;
+ vertical-align: top;
+}
+.deck-container ol {
+ list-style-type: decimal;
+}
+.deck-container nav ul, .deck-container nav li {
+ margin: 0;
+ list-style: none;
+ list-style-image: none;
+}
+.deck-container small {
+ font-size: 85%;
+}
+.deck-container strong, .deck-container th {
+ font-weight: bold;
+}
+.deck-container td {
+ vertical-align: top;
+}
+.deck-container sub, .deck-container sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+}
+.deck-container sup {
+ top: -0.5em;
+}
+.deck-container sub {
+ bottom: -0.25em;
+}
+.deck-container textarea {
+ overflow: auto;
+}
+.ie6 .deck-container legend, .ie7 .deck-container legend {
+ margin-left: -7px;
+}
+.deck-container input[type="radio"] {
+ vertical-align: text-bottom;
+}
+.deck-container input[type="checkbox"] {
+ vertical-align: bottom;
+}
+.ie7 .deck-container input[type="checkbox"] {
+ vertical-align: baseline;
+}
+.ie6 .deck-container input {
+ vertical-align: text-bottom;
+}
+.deck-container label, .deck-container input[type="button"], .deck-container input[type="submit"], .deck-container input[type="image"], .deck-container button {
+ cursor: pointer;
+}
+.deck-container button, .deck-container input, .deck-container select, .deck-container textarea {
+ margin: 0;
+}
+.deck-container input:invalid, .deck-container textarea:invalid {
+ border-radius: 1px;
+ -moz-box-shadow: 0px 0px 5px red;
+ -webkit-box-shadow: 0px 0px 5px red;
+ box-shadow: 0px 0px 5px red;
+}
+.deck-container input:invalid .no-boxshadow, .deck-container textarea:invalid .no-boxshadow {
+ background-color: #f0dddd;
+}
+.deck-container button {
+ width: auto;
+ overflow: visible;
+}
+.ie7 .deck-container img {
+ -ms-interpolation-mode: bicubic;
+}
+.deck-container, .deck-container select, .deck-container input, .deck-container textarea {
+ color: #eee;
+}
+.deck-container a {
+ color: #607890;
+}
+.deck-container a:hover, .deck-container a:focus {
+ color: #036;
+}
+.deck-container a:link {
+ -webkit-tap-highlight-color: #fff;
+}
+.deck-container.deck-loading {
+ display: none;
+}
+
+.slide {
+ width: auto;
+ min-height: 100%;
+ position: relative;
+}
+.slide h1 {
+ font-size: 4.5em;
+}
+.slide h1, .slide .vcenter {
+ font-weight: bold;
+ text-align: center;
+ padding-top: 1em;
+ max-height: 100%;
+}
+.csstransforms .slide h1, .csstransforms .slide .vcenter {
+ padding: 0 48px;
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 50%;
+ -webkit-transform: translate(0, -50%);
+ -moz-transform: translate(0, -50%);
+ -ms-transform: translate(0, -50%);
+ -o-transform: translate(0, -50%);
+ transform: translate(0, -50%);
+}
+.slide .vcenter h1 {
+ position: relative;
+ top: auto;
+ padding: 0;
+ -webkit-transform: none;
+ -moz-transform: none;
+ -ms-transform: none;
+ -o-transform: none;
+ transform: none;
+}
+.slide h2 {
+ font-size: 2.25em;
+ font-weight: bold;
+ padding-top: .5em;
+ margin: 0 0 .66666em 0;
+ border-bottom: 3px solid #888;
+}
+.slide h3 {
+ font-size: 1.4375em;
+ font-weight: bold;
+ margin-bottom: .30435em;
+}
+.slide h4 {
+ font-size: 1.25em;
+ font-weight: bold;
+ margin-bottom: .25em;
+}
+.slide h5 {
+ font-size: 1.125em;
+ font-weight: bold;
+ margin-bottom: .2222em;
+}
+.slide h6 {
+ font-size: 1em;
+ font-weight: bold;
+}
+.slide img, .slide iframe, .slide video {
+ display: block;
+ max-width: 100%;
+}
+.slide video, .slide iframe, .slide img {
+ display: block;
+ margin: 0 auto;
+}
+.slide p, .slide blockquote, .slide iframe, .slide img, .slide ul, .slide ol, .slide pre, .slide video {
+ margin-bottom: 1em;
+}
+.slide pre {
+ white-space: pre;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+ padding: 1em;
+ border: 1px solid #888;
+}
+.slide em {
+ font-style: italic;
+}
+.slide li {
+ padding: .25em 0;
+ vertical-align: middle;
+}
+
+.deck-before, .deck-previous, .deck-next, .deck-after {
+ position: absolute;
+ left: -999em;
+ top: -999em;
+}
+
+.deck-current {
+ z-index: 2;
+}
+
+.slide .slide {
+ visibility: hidden;
+ position: static;
+ min-height: 0;
+}
+
+.deck-child-current {
+ position: static;
+ z-index: 2;
+}
+.deck-child-current .slide {
+ visibility: hidden;
+}
+.deck-child-current .deck-previous, .deck-child-current .deck-before, .deck-child-current .deck-current {
+ visibility: visible;
+}
+
+@media screen and (max-device-width: 480px) {
+ /* html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
+}
+@media print {
+ * {
+ background: transparent !important;
+ color: black !important;
+ text-shadow: none !important;
+ filter: none !important;
+ -ms-filter: none !important;
+ -webkit-box-reflect: none !important;
+ -moz-box-reflect: none !important;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+ }
+ * :before, * :after {
+ display: none !important;
+ }
+
+ a, a:visited {
+ color: #444 !important;
+ text-decoration: underline;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after {
+ content: "";
+ }
+
+ pre, blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid;
+ }
+
+ thead {
+ display: table-header-group;
+ }
+
+ tr, img {
+ page-break-inside: avoid;
+ }
+
+ @page {
+ margin: 0.5cm;
+}
+
+ p, h2, h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2, h3 {
+ page-break-after: avoid;
+ }
+
+ .slide {
+ position: static !important;
+ visibility: visible !important;
+ display: block !important;
+ -webkit-transform: none !important;
+ -moz-transform: none !important;
+ -o-transform: none !important;
+ -ms-transform: none !important;
+ transform: none !important;
+ opacity: 1 !important;
+ }
+
+ h1, .vcenter {
+ -webkit-transform: none !important;
+ -moz-transform: none !important;
+ -o-transform: none !important;
+ -ms-transform: none !important;
+ transform: none !important;
+ padding: 0 !important;
+ position: static !important;
+ }
+
+ .deck-container > .slide {
+ page-break-after: always;
+ }
+
+ .deck-container {
+ width: 100% !important;
+ height: auto !important;
+ padding: 0 !important;
+ display: block !important;
+ }
+
+ script {
+ display: none;
+ }
+}
diff --git a/deck.js/core/deck.core.js b/deck.js/core/deck.core.js
new file mode 100644
index 0000000..997942c
--- /dev/null
+++ b/deck.js/core/deck.core.js
@@ -0,0 +1,498 @@
+/*!
+Deck JS - deck.core
+Copyright (c) 2011 Caleb Troughton
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+The deck.core module provides all the basic functionality for creating and
+moving through a deck. It does so by applying classes to indicate the state of
+the deck and its slides, allowing CSS to take care of the visual representation
+of each state. It also provides methods for navigating the deck and inspecting
+its state, as well as basic key bindings for going to the next and previous
+slides. More functionality is provided by wholly separate extension modules
+that use the API provided by core.
+*/
+(function($, deck, document, undefined) {
+ var slides, // Array of all the uh, slides...
+ current, // Array index of the current slide
+ $container, // Keeping this cached
+
+ events = {
+ /*
+ This event fires whenever the current slide changes, whether by way of
+ next, prev, or go. The callback function is passed two parameters, from
+ and to, equal to the indices of the old slide and the new slide
+ respectively. If preventDefault is called on the event within this handler
+ the slide change does not occur.
+
+ $(document).bind('deck.change', function(event, from, to) {
+ alert('Moving from slide ' + from + ' to ' + to);
+ });
+ */
+ change: 'deck.change',
+
+ /*
+ This event fires at the beginning of deck initialization, after the options
+ are set but before the slides array is created. This event makes a good hook
+ for preprocessing extensions looking to modify the deck.
+ */
+ beforeInitialize: 'deck.beforeInit',
+
+ /*
+ This event fires at the end of deck initialization. Extensions should
+ implement any code that relies on user extensible options (key bindings,
+ element selectors, classes) within a handler for this event. Native
+ events associated with Deck JS should be scoped under a .deck event
+ namespace, as with the example below:
+
+ var $d = $(document);
+ $.deck.defaults.keys.myExtensionKeycode = 70; // 'h'
+ $d.bind('deck.init', function() {
+ $d.bind('keydown.deck', function(event) {
+ if (event.which === $.deck.getOptions().keys.myExtensionKeycode) {
+ // Rock out
+ }
+ });
+ });
+ */
+ initialize: 'deck.init'
+ },
+
+ options = {},
+ $d = $(document),
+
+ /*
+ Internal function. Updates slide and container classes based on which
+ slide is the current slide.
+ */
+ updateStates = function() {
+ var oc = options.classes,
+ osc = options.selectors.container,
+ old = $container.data('onSlide'),
+ $all = $();
+
+ // Container state
+ $container.removeClass(oc.onPrefix + old)
+ .addClass(oc.onPrefix + current)
+ .data('onSlide', current);
+
+ // Remove and re-add child-current classes for nesting
+ $('.' + oc.current).parentsUntil(osc).removeClass(oc.childCurrent);
+ slides[current].parentsUntil(osc).addClass(oc.childCurrent);
+
+ // Remove previous states
+ $.each(slides, function(i, el) {
+ $all = $all.add(el);
+ });
+ $all.removeClass([
+ oc.before,
+ oc.previous,
+ oc.current,
+ oc.next,
+ oc.after
+ ].join(" "));
+
+ // Add new states back in
+ slides[current].addClass(oc.current);
+ if (current > 0) {
+ slides[current-1].addClass(oc.previous);
+ }
+ if (current + 1 < slides.length) {
+ slides[current+1].addClass(oc.next);
+ }
+ if (current > 1) {
+ $.each(slides.slice(0, current - 1), function(i, el) {
+ el.addClass(oc.before);
+ });
+ }
+ if (current + 2 < slides.length) {
+ $.each(slides.slice(current+2), function(i, el) {
+ el.addClass(oc.after);
+ });
+ }
+ },
+
+ /* Methods exposed in the jQuery.deck namespace */
+ methods = {
+
+ /*
+ jQuery.deck(selector, options)
+
+ selector: string | jQuery | array
+ options: object, optional
+
+ Initializes the deck, using each element matched by selector as a slide.
+ May also be passed an array of string selectors or jQuery objects, in
+ which case each selector in the array is considered a slide. The second
+ parameter is an optional options object which will extend the default
+ values.
+
+ $.deck('.slide');
+
+ or
+
+ $.deck([
+ '#first-slide',
+ '#second-slide',
+ '#etc'
+ ]);
+ */
+ init: function(elements, opts) {
+ var startTouch,
+ tolerance,
+ esp = function(e) {
+ e.stopPropagation();
+ };
+
+ options = $.extend(true, {}, $[deck].defaults, opts);
+ slides = [];
+ current = 0;
+ $container = $(options.selectors.container);
+ tolerance = options.touch.swipeTolerance;
+
+ // Pre init event for preprocessing hooks
+ $d.trigger(events.beforeInitialize);
+
+ // Hide the deck while states are being applied to kill transitions
+ $container.addClass(options.classes.loading);
+
+ // Fill slides array depending on parameter type
+ if ($.isArray(elements)) {
+ $.each(elements, function(i, e) {
+ slides.push($(e));
+ });
+ }
+ else {
+ $(elements).each(function(i, e) {
+ slides.push($(e));
+ });
+ }
+
+ /* Remove any previous bindings, and rebind key events */
+ $d.unbind('keydown.deck').bind('keydown.deck', function(e) {
+ if (e.which === options.keys.next || $.inArray(e.which, options.keys.next) > -1) {
+ methods.next();
+ e.preventDefault();
+ }
+ else if (e.which === options.keys.previous || $.inArray(e.which, options.keys.previous) > -1) {
+ methods.prev();
+ e.preventDefault();
+ }
+ })
+ /* Stop propagation of key events within editable elements */
+ .undelegate('input, textarea, select, button, meter, progress, [contentEditable]', 'keydown', esp)
+ .delegate('input, textarea, select, button, meter, progress, [contentEditable]', 'keydown', esp);
+
+ /* Bind touch events for swiping between slides on touch devices */
+ $container.unbind('touchstart.deck').bind('touchstart.deck', function(e) {
+ if (!startTouch) {
+ startTouch = $.extend({}, e.originalEvent.targetTouches[0]);
+ }
+ })
+ .unbind('touchmove.deck').bind('touchmove.deck', function(e) {
+ $.each(e.originalEvent.changedTouches, function(i, t) {
+ if (startTouch && t.identifier === startTouch.identifier) {
+ if (t.screenX - startTouch.screenX > tolerance || t.screenY - startTouch.screenY > tolerance) {
+ $[deck]('prev');
+ startTouch = undefined;
+ }
+ else if (t.screenX - startTouch.screenX < -1 * tolerance || t.screenY - startTouch.screenY < -1 * tolerance) {
+ $[deck]('next');
+ startTouch = undefined;
+ }
+ return false;
+ }
+ });
+ e.preventDefault();
+ })
+ .unbind('touchend.deck').bind('touchend.deck', function(t) {
+ $.each(t.originalEvent.changedTouches, function(i, t) {
+ if (startTouch && t.identifier === startTouch.identifier) {
+ startTouch = undefined;
+ }
+ });
+ })
+ .scrollLeft(0).scrollTop(0);
+
+ /*
+ Kick iframe videos, which dont like to redraw w/ transforms.
+ Remove this if Webkit ever fixes it.
+ */
+ $.each(slides, function(i, $el) {
+ $el.unbind('webkitTransitionEnd.deck').bind('webkitTransitionEnd.deck',
+ function(event) {
+ if ($el.hasClass($[deck]('getOptions').classes.current)) {
+ var embeds = $(this).find('iframe').css('opacity', 0);
+ window.setTimeout(function() {
+ embeds.css('opacity', 1);
+ }, 100);
+ }
+ });
+ });
+
+ if (slides.length) {
+ updateStates();
+ }
+
+ // Show deck again now that slides are in place
+ $container.removeClass(options.classes.loading);
+ $d.trigger(events.initialize);
+ },
+
+ /*
+ jQuery.deck('go', index)
+
+ index: integer | string
+
+ Moves to the slide at the specified index if index is a number. Index is
+ 0-based, so $.deck('go', 0); will move to the first slide. If index is a
+ string this will move to the slide with the specified id. If index is out
+ of bounds or doesn't match a slide id the call is ignored.
+ */
+ go: function(index) {
+ var e = $.Event(events.change),
+ ndx;
+
+ /* Number index, easy. */
+ if (typeof index === 'number' && index >= 0 && index < slides.length) {
+ ndx = index;
+ }
+ /* Id string index, search for it and set integer index */
+ else if (typeof index === 'string') {
+ $.each(slides, function(i, $slide) {
+ if ($slide.attr('id') === index) {
+ ndx = i;
+ return false;
+ }
+ });
+ };
+
+ /* Out of bounds, id doesn't exist, illegal input, eject */
+ if (typeof ndx === 'undefined') return;
+
+ $d.trigger(e, [current, ndx]);
+ if (e.isDefaultPrevented()) {
+ /* Trigger the event again and undo the damage done by extensions. */
+ $d.trigger(events.change, [ndx, current]);
+ }
+ else {
+ current = ndx;
+ updateStates();
+ }
+ },
+
+ /*
+ jQuery.deck('next')
+
+ Moves to the next slide. If the last slide is already active, the call
+ is ignored.
+ */
+ next: function() {
+ methods.go(current+1);
+ },
+
+ /*
+ jQuery.deck('prev')
+
+ Moves to the previous slide. If the first slide is already active, the
+ call is ignored.
+ */
+ prev: function() {
+ methods.go(current-1);
+ },
+
+ /*
+ jQuery.deck('getSlide', index)
+
+ index: integer, optional
+
+ Returns a jQuery object containing the slide at index. If index is not
+ specified, the current slide is returned.
+ */
+ getSlide: function(index) {
+ var i = typeof index !== 'undefined' ? index : current;
+ if (typeof i != 'number' || i < 0 || i >= slides.length) return null;
+ return slides[i];
+ },
+
+ /*
+ jQuery.deck('getSlides')
+
+ Returns all slides as an array of jQuery objects.
+ */
+ getSlides: function() {
+ return slides;
+ },
+
+ /*
+ jQuery.deck('getContainer')
+
+ Returns a jQuery object containing the deck container as defined by the
+ container option.
+ */
+ getContainer: function() {
+ return $container;
+ },
+
+ /*
+ jQuery.deck('getOptions')
+
+ Returns the options object for the deck, including any overrides that
+ were defined at initialization.
+ */
+ getOptions: function() {
+ return options;
+ },
+
+ /*
+ jQuery.deck('extend', name, method)
+
+ name: string
+ method: function
+
+ Adds method to the deck namespace with the key of name. This doesn’t
+ give access to any private member data — public methods must still be
+ used within method — but lets extension authors piggyback on the deck
+ namespace rather than pollute jQuery.
+
+ $.deck('extend', 'alert', function(msg) {
+ alert(msg);
+ });
+
+ // Alerts 'boom'
+ $.deck('alert', 'boom');
+ */
+ extend: function(name, method) {
+ methods[name] = method;
+ }
+ };
+
+ /* jQuery extension */
+ $[deck] = function(method, arg) {
+ if (methods[method]) {
+ return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+ }
+ else {
+ return methods.init(method, arg);
+ }
+ };
+
+ /*
+ The default settings object for a deck. All deck extensions should extend
+ this object to add defaults for any of their options.
+
+ options.classes.after
+ This class is added to all slides that appear after the 'next' slide.
+
+ options.classes.before
+ This class is added to all slides that appear before the 'previous'
+ slide.
+
+ options.classes.childCurrent
+ This class is added to all elements in the DOM tree between the
+ 'current' slide and the deck container. For standard slides, this is
+ mostly seen and used for nested slides.
+
+ options.classes.current
+ This class is added to the current slide.
+
+ options.classes.loading
+ This class is applied to the deck container during loading phases and is
+ primarily used as a way to short circuit transitions between states
+ where such transitions are distracting or unwanted. For example, this
+ class is applied during deck initialization and then removed to prevent
+ all the slides from appearing stacked and transitioning into place
+ on load.
+
+ options.classes.next
+ This class is added to the slide immediately following the 'current'
+ slide.
+
+ options.classes.onPrefix
+ This prefix, concatenated with the current slide index, is added to the
+ deck container as you change slides.
+
+ options.classes.previous
+ This class is added to the slide immediately preceding the 'current'
+ slide.
+
+ options.selectors.container
+ Elements matched by this CSS selector will be considered the deck
+ container. The deck container is used to scope certain states of the
+ deck, as with the onPrefix option, or with extensions such as deck.goto
+ and deck.menu.
+
+ options.keys.next
+ The numeric keycode used to go to the next slide.
+
+ options.keys.previous
+ The numeric keycode used to go to the previous slide.
+
+ options.touch.swipeTolerance
+ The number of pixels the users finger must travel to produce a swipe
+ gesture.
+ */
+ $[deck].defaults = {
+ classes: {
+ after: 'deck-after',
+ before: 'deck-before',
+ childCurrent: 'deck-child-current',
+ current: 'deck-current',
+ loading: 'deck-loading',
+ next: 'deck-next',
+ onPrefix: 'on-slide-',
+ previous: 'deck-previous'
+ },
+
+ selectors: {
+ container: '.deck-container'
+ },
+
+ keys: {
+ // enter, space, page down, right arrow, down arrow,
+ next: [13, 32, 34, 39, 40],
+ // backspace, page up, left arrow, up arrow
+ previous: [8, 33, 37, 38]
+ },
+
+ touch: {
+ swipeTolerance: 60
+ }
+ };
+
+ $d.ready(function() {
+ $('html').addClass('ready');
+ });
+
+ /*
+ FF + Transforms + Flash video don't get along...
+ Firefox will reload and start playing certain videos after a
+ transform. Blanking the src when a previously shown slide goes out
+ of view prevents this.
+ */
+ $d.bind('deck.change', function(e, from, to) {
+ var oldFrames = $[deck]('getSlide', from).find('iframe'),
+ newFrames = $[deck]('getSlide', to).find('iframe');
+
+ oldFrames.each(function() {
+ var $this = $(this),
+ curSrc = $this.attr('src');
+
+ if(curSrc) {
+ $this.data('deck-src', curSrc).attr('src', '');
+ }
+ });
+
+ newFrames.each(function() {
+ var $this = $(this),
+ originalSrc = $this.data('deck-src');
+
+ if (originalSrc) {
+ $this.attr('src', originalSrc);
+ }
+ });
+ });
+})(jQuery, 'deck', document);
diff --git a/deck.js/core/deck.core.scss b/deck.js/core/deck.core.scss
new file mode 100755
index 0000000..6721050
--- /dev/null
+++ b/deck.js/core/deck.core.scss
@@ -0,0 +1,450 @@
+html, body {
+ height:100%;
+ padding:0;
+ margin:0;
+}
+
+body.deck-container {
+ overflow-y:auto;
+ position:static;
+}
+
+.deck-container {
+ position:relative;
+ min-height:100%;
+ margin:0 auto;
+ padding:0 48px;
+ font-size:16px;
+ line-height:1.25;
+ overflow:hidden;
+
+ .js & {
+ visibility:hidden;
+ }
+
+ .ready & {
+ visibility:visible;
+ }
+
+ .touch & {
+ -webkit-text-size-adjust:none;
+ -moz-text-size-adjust:none;
+ }
+
+ /* Resets and base styles from HTML5 Boilerplate */
+ 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, canvas, details, figcaption, figure,
+ footer, header, hgroup, menu, nav, section, summary,
+ time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+ }
+
+ article, aside, details, figcaption, figure,
+ footer, header, hgroup, menu, nav, section {
+ display: block;
+ }
+
+ blockquote, q {
+ quotes:none;
+
+ &:before, &:after {
+ content:"";
+ content:none;
+ }
+ }
+
+ 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;
+ cursor:help;
+ }
+
+ table {
+ border-collapse:collapse;
+ border-spacing:0;
+ }
+
+ hr {
+ display:block;
+ height:1px;
+ border:0;
+ border-top:1px solid #ccc;
+ margin:1em 0;
+ padding:0;
+ }
+
+ input, select {
+ vertical-align:middle;
+ }
+
+ select, input, textarea, button {
+ font:99% sans-serif;
+ }
+
+ pre, code, kbd, samp {
+ font-family:monospace, sans-serif;
+ }
+
+ a {
+ -webkit-tap-highlight-color:rgba(0,0,0,0);
+
+ &:hover, &:active {
+ outline:none;
+ }
+ }
+
+ ul, ol {
+ margin-left:2em;
+ vertical-align:top;
+ }
+
+ ol {
+ list-style-type:decimal;
+ }
+
+ nav {
+ ul, li {
+ margin:0;
+ list-style:none;
+ list-style-image:none;
+ }
+ }
+
+ small {
+ font-size:85%;
+ }
+
+ strong, th {
+ font-weight:bold;
+ }
+
+ td {
+ vertical-align:top;
+ }
+
+ sub, sup {
+ font-size:75%;
+ line-height:0;
+ position:relative;
+ }
+
+ sup {
+ top:-0.5em;
+ }
+
+ sub { bottom: -0.25em; }
+
+ textarea {
+ overflow:auto;
+ }
+
+ legend {
+ .ie6 &, .ie7 & {
+ margin-left:-7px;
+ }
+ }
+
+ input[type="radio"] {
+ vertical-align:text-bottom;
+ }
+
+ input[type="checkbox"] {
+ vertical-align:bottom;
+ }
+
+ .ie7 & input[type="checkbox"] {
+ vertical-align:baseline;
+ }
+
+ .ie6 & input {
+ vertical-align:text-bottom;
+ }
+
+ label, input[type="button"], input[type="submit"], input[type="image"], button {
+ cursor:pointer;
+ }
+
+ button, input, select, textarea {
+ margin: 0;
+ }
+
+ input, textarea {
+ &:invalid {
+ border-radius:1px;
+ -moz-box-shadow:0px 0px 5px red;
+ -webkit-box-shadow:0px 0px 5px red;
+ box-shadow: 0px 0px 5px red;
+
+ .no-boxshadow {
+ background-color: #f0dddd;
+ }
+ }
+ }
+
+ button {
+ width:auto;
+ overflow:visible;
+ }
+
+ .ie7 & img {
+ -ms-interpolation-mode: bicubic; }
+
+ &, select, input, textarea {
+ color:#444;
+ }
+
+ a {
+ color:#607890;
+
+ &:hover, &:focus {
+ color:#036;
+ }
+
+ &:link {
+ -webkit-tap-highlight-color: #fff;
+ }
+ }
+ /* End HTML5 Boilerplate adaptations */
+
+ &.deck-loading {
+ display:none;
+ }
+}
+
+.slide {
+ width:auto;
+ min-height:100%;
+ position:relative;
+
+ h1 {
+ font-size:4.5em;
+ }
+
+ h1, .vcenter {
+ font-weight:bold;
+ text-align:center;
+ padding-top:1em;
+ max-height:100%;
+
+ .csstransforms & {
+ padding:0 48px;
+ position:absolute;
+ left:0;
+ right:0;
+ top:50%;
+ -webkit-transform:translate(0, -50%);
+ -moz-transform:translate(0, -50%);
+ -ms-transform:translate(0, -50%);
+ -o-transform:translate(0, -50%);
+ transform:translate(0, -50%);
+ }
+ }
+
+ .vcenter h1 {
+ position:relative;
+ top:auto;
+ padding:0;
+ -webkit-transform:none;
+ -moz-transform:none;
+ -ms-transform:none;
+ -o-transform:none;
+ transform:none;
+ }
+
+ h2 {
+ font-size:2.25em;
+ font-weight:bold;
+ padding-top:.5em;
+ margin:0 0 .66666em 0;
+ border-bottom:3px solid #888;
+ }
+
+ h3 {
+ font-size:1.4375em;
+ font-weight:bold;
+ margin-bottom:.30435em;
+ }
+
+ h4 {
+ font-size:1.25em;
+ font-weight:bold;
+ margin-bottom:.25em;
+ }
+
+ h5 {
+ font-size:1.125em;
+ font-weight:bold;
+ margin-bottom:.2222em;
+ }
+
+ h6 {
+ font-size:1em;
+ font-weight:bold;
+ }
+
+ img, iframe, video {
+ display:block;
+ max-width:100%;
+ }
+
+ video, iframe, img {
+ display:block;
+ margin:0 auto;
+ }
+
+ p, blockquote, iframe, img, ul, ol, pre, video {
+ margin-bottom:1em;
+ }
+
+ pre {
+ white-space:pre;
+ white-space:pre-wrap;
+ word-wrap:break-word;
+ padding: 1em;
+ border:1px solid #888;
+ }
+
+ em {
+ font-style:italic;
+ }
+
+ li {
+ padding:.25em 0;
+ vertical-align:middle;
+ }
+}
+
+.deck-before, .deck-previous, .deck-next, .deck-after {
+ position:absolute;
+ left:-999em;
+ top:-999em;
+}
+
+.deck-current {
+ z-index:2;
+}
+
+.slide .slide {
+ visibility:hidden;
+ position:static;
+ min-height:0;
+}
+
+.deck-child-current {
+ position:static;
+ z-index:2;
+
+ .slide {
+ visibility:hidden;
+ }
+
+ .deck-previous, .deck-before, .deck-current {
+ visibility:visible;
+ }
+}
+
+@media all and (orientation:portrait) {
+
+}
+
+@media all and (orientation:landscape) {
+
+}
+
+@media screen and (max-device-width: 480px) {
+
+ /* html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
+}
+
+
+@media print {
+ * {
+ background: transparent !important;
+ color: black !important;
+ text-shadow: none !important;
+ filter:none !important;
+ -ms-filter: none !important;
+ -webkit-box-reflect:none !important;
+ -moz-box-reflect:none !important;
+ -webkit-box-shadow:none !important;
+ -moz-box-shadow:none !important;
+ box-shadow:none !important;
+
+ :before, :after {
+ display:none !important;
+ }
+}
+ a, a:visited { color: #444 !important; text-decoration: underline; }
+ a[href]:after { content: " (" attr(href) ")"; }
+ abbr[title]:after { content: " (" attr(title) ")"; }
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
+ pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
+ thead { display: table-header-group; }
+ tr, img { page-break-inside: avoid; }
+ @page { margin: 0.5cm; }
+ p, h2, h3 { orphans: 3; widows: 3; }
+ h2, h3{ page-break-after: avoid; }
+
+ .slide {
+ position:static !important;
+ visibility:visible !important;
+ display:block !important;
+ -webkit-transform:none !important;
+ -moz-transform:none !important;
+ -o-transform:none !important;
+ -ms-transform:none !important;
+ transform:none !important;
+ opacity:1 !important;
+ }
+
+ h1, .vcenter {
+ -webkit-transform:none !important;
+ -moz-transform:none !important;
+ -o-transform:none !important;
+ -ms-transform:none !important;
+ transform:none !important;
+ padding:0 !important;
+ position:static !important;
+ }
+
+ .deck-container > .slide {
+ page-break-after: always;
+ }
+
+ .deck-container {
+ width:100% !important;
+ height:auto !important;
+ padding:0 !important;
+ display:block !important;
+ }
+
+ script {
+ display:none;
+ }
+}
diff --git a/deck.js/extensions/anim/deck.anim.js b/deck.js/extensions/anim/deck.anim.js
new file mode 100644
index 0000000..8cf9e08
--- /dev/null
+++ b/deck.js/extensions/anim/deck.anim.js
@@ -0,0 +1,176 @@
+
+(function($, deck, undefined) {
+ // This next line is the color plugin from jquery
+ (function(d){d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(f,e){d.fx.step[e]=function(g){if(!g.colorInit){g.start=c(g.elem,e);g.end=b(g.end);g.colorInit=true}g.elem.style[e]="rgb("+[Math.max(Math.min(parseInt((g.pos*(g.end[0]-g.start[0]))+g.start[0]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[1]-g.start[1]))+g.start[1]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[2]-g.start[2]))+g.start[2]),255),0)].join(",")+")"}});function b(f){var e;if(f&&f.constructor==Array&&f.length==3){return f}if(e=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(f)){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}if(e=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(f)){return[parseFloat(e[1])*2.55,parseFloat(e[2])*2.55,parseFloat(e[3])*2.55]}if(e=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(f)){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}if(e=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(f)){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}if(e=/rgba\(0, 0, 0, 0\)/.exec(f)){return a.transparent}return a[d.trim(f).toLowerCase()]}function c(g,e){var f;do{f=d.curCSS(g,e);if(f!=""&&f!="transparent"||d.nodeName(g,"body")){break}e="backgroundColor"}while(g=g.parentNode);return b(f)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]}})(jQuery);
+
+ var $d = $(document);
+ var may = function(o,f) {return f ? f.bind(o) : function() {}};
+
+ $.extend(true, $[deck].defaults, {
+ selectors: {
+ animShow: ".anim-show",
+ animHide: ".anim-hide",
+ animAddClass: ".anim-addclass",
+ animRemoveClass: ".anim-removeclass",
+ animAttribute: ".anim-attribute",
+ // specific ones
+ animPlay: ".anim-play",
+ animPause: ".anim-pause",
+ animViewboxAs: ".anim-viewboxas",
+ //
+ animContinue: ".anim-continue"
+ },
+ anim: {
+ duration: 400
+ }
+ });
+
+ var waitFor = 0
+ $[deck]('extend', 'animWaitMore', function(){ waitFor++ });
+ $[deck]('extend', 'animWaitLess', function(){ waitFor-- });
+
+ var doInitIfReady = function hoho() {
+ if (waitFor>0) {
+ setTimeout(doInitIfReady, 10) // retry until all is loaded
+ return;
+ }
+ // first we define some tools and grab some info from deck.js
+ var o = $[deck]('getOptions');
+ var context = function(el) {
+ return {
+ what: function() {return $(el).attr("data-what")},
+ dur: function() {return $(el).attr("data-dur")*1 || o.anim.duration},
+ classs: function() {return $(el).attr("data-class")},
+ attribute: function() {return $(el).attr("data-attr").split(':')[0]},
+ as: function() {return $(el).attr("data-as")},
+ value: function() {return $(el).attr("data-attr").split(':')[1]},
+ toplevel: function() {return $[deck]('getToplevelSlideOf', el).node},
+ all: function() {return $(this.what(),this.toplevel())}
+ }
+ };
+ var classical = function(selector, methods) {
+ $(selector).each(function(i, el) {
+ var c = context(el);
+ may(methods, methods.create)(c);
+ $(el).bind('deck.toplevelBecameCurrent', function(_, direction) {
+ may(methods, methods.init)(c);
+ }).bind('deck.afterToplevelBecameCurrent', function(_, direction) {
+ may(methods, methods.fast)(c);
+ }).bind('deck.lostCurrent', function(_, direction, from, to) {
+ if (direction == 'forward' || Math.abs(from - to)>1 ) return; // if a big step, let the "step" extension do its job
+ may(methods, methods.undo)(c);
+ }).bind('deck.becameCurrent', function(_, direction, from, to) {
+ if (direction == 'reverse' || Math.abs(from - to)>1 ) return; // if a big step, let the "step" extension do its job
+ may(methods, methods.doit)(c);
+ });
+ });
+ };
+
+ // here come the real animations
+ classical(o.selectors.animShow, {
+ init: function(c) {c.all().animate({'opacity': 0.}, 0)},
+ undo: function(c) {c.all().animate({'opacity': 0.}, c.dur()/100)},
+ doit: function(c) {c.all().animate({'opacity': 1.}, c.dur())},
+ fast: function(c) {c.all().animate({'opacity': 1.}, 0)}
+ });
+ classical(o.selectors.animHide, {
+ init: function(c) {c.all().animate({'opacity': 1.}, 0)},
+ undo: function(c) {c.all().animate({'opacity': 1.}, c.dur()/100)},
+ doit: function(c) {c.all().animate({'opacity': 0.}, c.dur())},
+ fast: function(c) {c.all().animate({'opacity': 0.}, 0)}
+ });
+ classical(o.selectors.animAddClass, {
+ init: function(c) {c.all().removeClass(c.classs())},
+ undo: function(c) {c.all().removeClass(c.classs())},
+ doit: function(c) {c.all().addClass(c.classs())},
+ fast: function(c) {c.all().addClass(c.classs())}
+ });
+ classical(o.selectors.animRemoveClass, {
+ init: function(c) {c.all().addClass(c.classs())},
+ undo: function(c) {c.all().addClass(c.classs())},
+ doit: function(c) {c.all().removeClass(c.classs())},
+ fast: function(c) {c.all().removeClass(c.classs())}
+ });
+ classical(o.selectors.animAttribute, {
+ init: function(c) {
+ c.previousElement = [];
+ c.all().css(c.attribute(), '') // for the jquery anim to work the css attribute should not be defined in the element (in the html) so we suppose it is empty by default (and thus, if it is not empty, it means it has been set by jquery)
+ },
+ undo: function(c) {
+ var k = c.attribute()
+ for (i in c.previousElement) { // use the saved list of elements and values
+ var whatTo = {}
+ whatTo[k] = c.previousCss[i]
+ $(c.previousElement[i]).animate(whatTo, 0)
+ }
+ },
+ doit: function(c, factor) {
+ if (factor === undefined) factor = 1
+ var k = c.attribute()
+ c.previousCss = []
+ c.previousElement = []
+ c.all().each( function(){c.previousElement.push(this); c.previousCss.push($(this).css(k))}) // save a list of elements and values
+ var whatTo = {}
+ whatTo[c.attribute()] = c.value()
+ c.all().animate(whatTo, c.dur()*factor)
+ },
+ fast: function(c) {this.doit(c,0)}
+ });
+ classical(o.selectors.animPlay, {
+ init: function(c) {c.all().each(function(){this.pause(); try{this.currentTime=0}catch(e){} })},
+ undo: function(c) {c.all().each(function(){this.pause()})},
+ doit: function(c) {c.all().each(function(){this.play()})},
+ fast: function(c) {c.all().each(function(){this.play()})}
+ });
+ classical(o.selectors.animPause, {
+ undo: function(c) {c.all().each(function(){this.play()})},
+ doit: function(c) {c.all().each(function(){this.pause()})},
+ fast: function(c) {c.all().each(function(){this.pause()})}
+ });
+ classical(o.selectors.animViewboxAs, {
+ create: function(c) {c.whatFrom = {}},
+ init: function(c) {this.undo(c)},
+ undo: function(c) {c.all().animate(c.whatFrom, 0)},
+ doit: function(c, factor) {
+ if (factor === undefined) factor = 1
+ var attr = "svgViewBox";
+ var whatTo = {};
+ var asWhat = $(c.as());
+ var a = function (i) {return asWhat.attr(i)}
+ // todo should do as with the generic attribute above (maintain a list)
+ c.whatFrom[attr] = c.all().first().get(0).attributes.getNamedItem('viewBox').nodeValue // custom access to the svg viewbox attribute
+ var toViewBox = a('x')+" "+a('y')+" "+a('width')+" "+a('height');
+ whatTo[attr] = toViewBox;
+ c.all().animate(whatTo, c.dur()*factor)
+ },
+ fast: function(c) {this.doit(c, 0)}
+ });
+ classical(o.selectors.animContinue, {
+ doit: function(c) {setTimeout(function(){$[deck]('next')}, 1)}
+ // do not do it in fast mode
+ });
+ // handle the chained undo for "anim-continue"
+ $(o.selectors.animContinue).each(function(i, curSlide) {
+ $(curSlide).bind('deck.becameCurrent', function(_, direction) {
+ if (direction == 'forward') return;
+ setTimeout(function(){$[deck]('prev')}, 1)
+ });
+
+ });
+
+ // finally force "refresh" (notification of slide change)
+ var current = $[deck]('getSlide')
+ var icur = 0
+ for (; icur < $[deck]('getSlides').length; icur++) {
+ if ($[deck]('getSlides')[icur] == current) break;
+ }
+ $d.trigger("deck.change", [icur, 0]);
+ $d.trigger("deck.change", [0, icur]);
+
+ }
+ $(document).bind('deck.init', function() {
+ setTimeout(doInitIfReady, 10) // try the first time after init
+ });
+
+})(jQuery, 'deck');
+
diff --git a/deck.js/extensions/bundle-maker/README.txt b/deck.js/extensions/bundle-maker/README.txt
new file mode 100644
index 0000000..f58232f
--- /dev/null
+++ b/deck.js/extensions/bundle-maker/README.txt
@@ -0,0 +1,24 @@
+
+PRESENTATION FILE
+=================
+An bare example file including most used extensions is given in the current folder as "presentation.html".
+This files references and uses the files from the "deck.js" folder.
+If you want to reduce the overall size of the "deck.js" folder, you can safely remove the "deck.js/samples" directory (if you don't need the samples obviously).
+
+
+
+RESOURCES
+=========
+Example presentations can be found in the the deck.js/samples folder.
+You can also consult online examples, see http://home.heeere.com/tech-deckjs-ext.html
+
+
+
+NOTE FOR USE WITH CHROME/CHROMIUM
+=================================
+To allow the presentation page to load all the resources when stored locally, you must start chrome/chromium with a special command line option.
+Use "chromium-browser --disable-web-security " to do so.
+
+
+
+
diff --git a/deck.js/extensions/bundle-maker/make-bundle.sh b/deck.js/extensions/bundle-maker/make-bundle.sh
new file mode 100755
index 0000000..30f740b
--- /dev/null
+++ b/deck.js/extensions/bundle-maker/make-bundle.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+N=deckjs-bundle
+W=$(basename $(dirname $(readlink -f $0)))
+
+SCRATCH=/tmp
+test -d /media/ramdisk && SCRATCH=/media/ramdisk
+
+if test -d .git
+then
+ pwd=$(pwd)
+ cd $SCRATCH
+ tmp=,,for-$N
+ rm -rf $tmp
+ git clone $pwd $tmp
+ tmp=$(pwd)/$tmp
+ cd -
+ rm -rf $N $N.zip
+ mkdir -p $N/deck.js
+ cp -t $N/deck.js -r $tmp/core/ $tmp/extensions/ $tmp/libs/ $tmp/samples/ $tmp/themes/ $tmp/modernizr.custom.js $tmp/jquery-1.7.2.min.js
+ cp -t $N $tmp/extensions/$W/README.txt $tmp/extensions/$W/presentation.html
+ cat $tmp/.git/refs/heads/master >> $N/README.txt
+ zip -r $N.zip $N
+else
+ echo "This script is designed to be run from the root of the git repository"
+fi
diff --git a/deck.js/extensions/bundle-maker/presentation.html b/deck.js/extensions/bundle-maker/presentation.html
new file mode 100644
index 0000000..1561c35
--- /dev/null
+++ b/deck.js/extensions/bundle-maker/presentation.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
+
+ <!-- PROVIDE METADATA -->
+ <!-- ================ -->
+ <title>ZZZZ A Deck.js Presentation</title>
+ <meta name="author" content="ZZZZ Author">
+
+ <!-- Required stylesheet -->
+ <link rel="stylesheet" href="deck.js/core/deck.core.css">
+
+ <!-- Style theme. More available in deck.js/themes/style/ or create your own. -->
+ <link rel="stylesheet" href="deck.js/themes/style/web-2.0.css">
+
+ <!-- Transition, for your audience, use it only for short presentations, see deck.js/themes/transition -->
+ <!--link rel="stylesheet" href="deck.js/themes/transition/****.css"-->
+
+ <!-- Required Modernizr file -->
+ <script src="deck.js/modernizr.custom.js"></script>
+ <!-- Required JS files. -->
+ <script src="deck.js/jquery-1.7.2.min.js"></script>
+ <script src="deck.js/core/deck.core.js"></script>
+
+ <!-- PROVIDE EXTENSIONS: JS and CSS files -->
+ <!-- ============================ -->
+ <!-- proper slide scaling (type 's' to disable) -->
+ <script src="deck.js/extensions/fit/deck.fit.js"></script>
+ <link rel="stylesheet" href="deck.js/extensions/fit/deck.fit-fs.css"> <!-- fit to window -->
+ <!-- animations, svg etc (better to include it after the 'status' extension... so see below) -->
+ <!-- math equations -->
+ <script src="deck.js/libs/display-latex2.user.js"></script>
+ <script src="deck.js/extensions/simplemath/deck.simplemath.js"></script>
+ <!-- smart syntax -->
+ <script src="deck.js/extensions/smartsyntax/deck.smartsyntax.js"></script>
+ <!-- clone by typing 'c' (popups a slave presentation) (uses "clone snippet" at the end of the page) -->
+ <script src="deck.js/extensions/clone/deck.clone.js"></script>
+ <!-- goto by typing 'g' (uses "goto snippet" at the end of the page) -->
+ <link rel="stylesheet" href="deck.js/extensions/goto/deck.goto.css">
+ <script src="deck.js/extensions/goto/deck.goto.js"></script>
+ <!-- slide number indicator (uses "status snippet" at the end of the page) -->
+ <link rel="stylesheet" href="deck.js/extensions/status/deck.status.css">
+ <script src="deck.js/extensions/status/deck.status.js"></script>
+ <!-- navigation buttons (uses "navigation snippet" at the end of the page) -->
+ <link rel="stylesheet" href="deck.js/extensions/navigation/deck.navigation.css">
+ <script src="deck.js/extensions/navigation/deck.navigation.js"></script>
+ <!-- slide selector by typing 'm' -->
+ <script src="deck.js/extensions/menu/deck.menu.js"></script>
+ <link rel="stylesheet" href="deck.js/extensions/menu/deck.menu.css">
+ <!-- permalink (uses "hash snippet" at the end of the page) -->
+ <link rel="stylesheet" href="deck.js/extensions/hash/deck.hash.css">
+ <script src="deck.js/extensions/hash/deck.hash.js"></script>
+ <!-- animations, svg etc (better to include it after the 'status' extension (to avoid huge fake slide numbers) -->
+ <script src="deck.js/extensions/step/deck.step.js"></script>
+ <script src="deck.js/extensions/events/deck.events.js"></script>
+ <script src="deck.js/extensions/anim/deck.anim.js"></script>
+ <script src="deck.js/libs/jquerysvg/jquery.svg.min.js"></script>
+ <script src="deck.js/libs/jquerysvg/jquery.svganim.min.js"></script>
+ <script src="deck.js/extensions/svg/deck.svg.js"></script>
+
+
+ <!-- Deck.js options (advanced) -->
+ <script>$(function() {$.deck('.slide', {
+ // fitMarginX:100, fitMarginY:100, // uncomment to tune margin
+ // fitMode: "stretched", // uncomment to strech
+ dummy:""
+ });});
+ </script>
+
+ <!-- override some style here if needed (or in an external file) -->
+ <style type="text/css">
+ /* example */ .slide b {color: blue;}
+ /* example */ .deck-container > .slide {border: 1px solid green;}
+ /* example */ body.has-clones .deck-container {background: lightslategrey;}
+ /* example */ .deck-container .title-slide {border: 1px solid red; font-size: 70%}
+ </style>
+ </head>
+
+
+<body>
+This text should not be displayed if everything goes well: use left/right arrow keys to browse the presentation.<br/>
+
+<div class="deck-container">
+
+ <!-- this presentation uses smart syntax -->
+<section class="smart">
+ ==New Presentation With deck.js and Extensions==[title-slide]
+
+ =Hello=
+ * Hi, .....
+ * Todo
+ ** Write you presentation
+ ** <b>Rehearse a little</b>
+ * See also
+ ** <a href="http://home.heeere.com/tech-deckjs-ext.html">online samples</a>
+ ** <a href="deck.js/samples">local samples</a>
+
+ ==Thank you for your attention==[end-slide]
+
+</section>
+
+<!-- end of the presentation -->
+
+
+
+
+<!-- deck.hash snippet -->
+<a href="." title="Permalink to this slide" class="deck-permalink">#</a>
+<!-- deck.status snippet -->
+<p class="deck-status">
+ footer −
+ <span class="deck-status-current"></span>
+ /
+ <span class="deck-status-total"></span>
+</p>
+<!-- deck.goto snippet -->
+<form action="." method="get" class="goto-form">
+ <label for="goto-slide">Go to slide:</label>
+ <input type="text" name="slidenum" id="goto-slide" list="goto-datalist">
+ <datalist id="goto-datalist"></datalist>
+ <input type="submit" value="Go">
+</form>
+<!-- deck.navigation snippet -->
+<a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
+<a href="#" class="deck-next-link" title="Next">&#8594;</a>
+<!-- deck.clone snippet: simple red box with top-left corner as cursor position -->
+<div class="clonepointer" style="position:absolute; width:20px; height:20px; background:red; z-index:10"></div>
+<!-- deck.clone snippet: simple green box with center as cursor position -->
+<div class="clonepointer" style="position:absolute; z-index:11"><div style="margin: -13px 0 0 -13px; width:18px; height:18px; border:4px solid green;"></div></div>
+
+
+
+
+</div> <!-- end of deck container -->
+
+</body>
+</html>
diff --git a/deck.js/extensions/clone/deck.clone.js b/deck.js/extensions/clone/deck.clone.js
new file mode 100644
index 0000000..847d8f8
--- /dev/null
+++ b/deck.js/extensions/clone/deck.clone.js
@@ -0,0 +1,127 @@
+/*!
+Deck JS - deck.clone
+Copyright (c) 2011 Remi BARRAQUAND
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+This module provides a support for cloning the deck.
+*/
+
+(function($, deck, undefined) {
+ var $d = $(document);
+ var clones = new Array();
+
+ $.extend(true, $[deck].defaults, {
+ selectors: {
+ clonepointer: ".clonepointer"
+ },
+ classes: {
+ hasClones: 'has-clones'
+ },
+ keys: {
+ clone: 67 // c
+ }
+ });
+
+ var cleanClones = function() {
+ var opts = $[deck]('getOptions');
+ // remove closed windows
+ $.each(clones, function(index, clone) {
+ if (clone.closed()) {
+ clones.splice(index, 1); // remove element "index"
+ }
+ });
+ // tag/untag the current container depending on the presence of clones
+ if (clones.length > 0) {
+ $("body").addClass(opts.classes.hasClones);
+ } else {
+ $("body").removeClass(opts.classes.hasClones);
+ }
+ };
+ /*
+ jQuery.deck('addClone')
+
+ Create a clone of this window and add it to the clones list.
+ */
+ $[deck]('extend', 'addClone', function() {
+ clone = new DeckClone();
+ clones.push(clone);
+ cleanClones();
+ return clone;
+ });
+ $[deck]('extend', 'pointerAt', function(rx, ry) {
+ var opts = $[deck]('getOptions');
+ var r = $(".deck-current").get(0).getBoundingClientRect();
+ var x = r.left + r.width * rx;
+ var y = r.top + r.height * ry;
+ var pos = {left: x, top: y};
+ var current = $(".deck-current").get(0);
+ var pointers = $(opts.selectors.clonepointer);
+ if (pointers.get(0).parentNode != current) { // move them within the new slide if it changed
+ pointers.show().appendTo(".deck-current");
+ }
+ pointers.offset(pos);
+ });
+
+ /*
+ jQuery.deck('Init')
+ */
+ $d.bind('deck.init', function() {
+ var opts = $[deck]('getOptions');
+ var container = $[deck]('getContainer');
+
+ $(opts.selectors.clonepointer).hide();
+
+ /* Bind key events */
+ $d.unbind('keydown.deckclone').bind('keydown.deckclone', function(e) {
+ if (e.which === opts.keys.clone || $.inArray(e.which, opts.keys.clone) > -1) {
+ $[deck]('addClone');
+ e.preventDefault();
+ }
+ });
+ })
+ /* Update current slide number with each change event */
+ .bind('deck.change', function(e, from, to) {
+ var opts = $[deck]('getOptions');
+ var slideTo = $[deck]('getSlide', to);
+ var container = $[deck]('getContainer');
+ cleanClones();
+ $.each(clones, function(index, clone) {
+ clone.deck('go', to);
+ });
+ })
+ /* Do the animations locally */
+ .bind('deck.step', function(e, delta) {
+ cleanClones();
+ $.each(clones, function(index, clone) {
+ if (delta == -1) clone.deck('stepPrev');
+ else if (delta == 1) clone.deck('stepNext');
+ });
+ })
+ /* Replicate mouse cursor */
+ .bind('mousemove', function(e) {
+ var r = $(".deck-current").get(0).getBoundingClientRect();
+ var x = (e.clientX - r.left) / r.width;
+ var y = (e.clientY - r.top) / r.height;
+ cleanClones();
+ $.each(clones, function(index, clone) {
+ clone.deck('pointerAt', x, y);
+ });
+ });
+
+ /*
+ Simple Clone manager (must be improved, by for instance adding cloning
+ option e.g. propagate change, etc.)
+ */
+ var DeckClone = function() {
+ var clone = window.open(window.location);
+ this.closed = function() {return clone.closed;}
+ this.deck = function() {
+ if (clone.closed) return;
+ if (clone['$']) clone['$'].deck.apply(clone['$'], arguments)
+ }
+ }
+})(jQuery, 'deck'); \ No newline at end of file
diff --git a/deck.js/extensions/events/README.md b/deck.js/extensions/events/README.md
new file mode 100644
index 0000000..22d003e
--- /dev/null
+++ b/deck.js/extensions/events/README.md
@@ -0,0 +1,64 @@
+# deck.events.js
+
+An extension for [deck.js][] allowing you to execute Javascript when a
+ slide becomes/leaves the current, next, or previous slide.
+
+## Requirements
+
+[deck.js][]
+
+## Events
+
+Each event is triggered "on" the slide on which the event occurs (see _Example_)
+ and given a single argument -- the direction (see _Direction_)
+
+* **deck.becameCurrent**: Triggered when a slide becomes the current one
+ (`to` in `deck.change`).
+* **deck.lostCurrent**: The slide is no longer "current"
+ (`from` in `deck.change`).
+* **deck.becamePrevious**: The slide (by order) just before the current slide.
+ (`to - 1` in `deck.change`).
+* **deck.becameNext**: The slide (by order) just after the current slide.
+ (`to + 1` in `deck.change`).
+* **deck.lostPrevious**: The slide (by order) just before the last current slide.
+ (`from - 1` in `deck.change`).
+* **deck.lostNext**: The slide (by order) just after the last current slide.
+ (`from + 1` in `deck.change`).
+
+
+## Direction
+
+Each event is given a direction that helps determine whether the user is
+ moving forward or backward in the slide stack. It is provided as an argument
+ for the event and can be either `forward` or `reverse`. Essentially:
+
+```
+ if(from < to){
+ direction = "forward";
+ }
+ else{
+ direction = "reverse";
+ }
+```
+
+
+## Example
+
+If you put a placeholder slide `<div id="showGraph" class="slide"></div>` into
+ your source, this event will display a Javascript graph when you visit the
+ slide (forward) and remove it if you hit the back arrow and return to
+ the slide.
+
+```
+$("#showGraph").bind('deck.becameCurrent', function(ev, direction) {
+ if(direction == "forward"){
+ animateGraphIn();
+ }
+ else{
+ animateGraphOut();
+ }
+});
+```
+
+
+[deck.js]: https://github.com/imakewebthings/deck.js
diff --git a/deck.js/extensions/events/deck.events.js b/deck.js/extensions/events/deck.events.js
new file mode 100644
index 0000000..e00d28d
--- /dev/null
+++ b/deck.js/extensions/events/deck.events.js
@@ -0,0 +1,23 @@
+(function($, deck, undefined) {
+ $(document).bind('deck.change', function(e, from, to) {
+ var $prev = $[deck]('getSlide', to-1),
+ $next = $[deck]('getSlide', to+1),
+ $oldprev = $[deck]('getSlide', from-1),
+ $oldnext = $[deck]('getSlide', from+1);
+
+ var direction = "forward";
+ if(from > to){
+ direction = "reverse";
+ }
+
+ $[deck]('getSlide', to).trigger('deck.becameCurrent', [direction, from, to]);
+ $[deck]('getSlide', from).trigger('deck.lostCurrent', [direction, from, to]);
+
+ $prev && $prev.trigger('deck.becamePrevious', [direction, from, to]);
+ $next && $next.trigger('deck.becameNext', [direction, from, to]);
+
+ $oldprev && $oldprev.trigger('deck.lostPrevious', [direction, from, to]);
+ $oldnext && $oldnext.trigger('deck.lostNext', [direction, from, to]);
+ });
+})(jQuery, 'deck');
+
diff --git a/deck.js/extensions/fit/deck.fit-fs.css b/deck.js/extensions/fit/deck.fit-fs.css
new file mode 100644
index 0000000..fd58665
--- /dev/null
+++ b/deck.js/extensions/fit/deck.fit-fs.css
@@ -0,0 +1,14 @@
+
+.deck-container {
+ width: 100%; height: 100%; /* to get a proper filling of the parent */
+ margin: 0; padding: 0; /* any margin is handled by the parent or the fit extension */
+ position: absolute;
+ left:0; top:0; width:100%; height:100%;
+ border: 0;
+}
+.deck-container>.slide {
+ width: 100%; height: 100%; /* to get a proper filling of the parent */
+ min-width:0; min-height:0; /* undoing some hurting style in the defaults of deck.js */
+ overflow: hidden; /* don't show slides outside of their box */
+ /* margin:0; padding:0; /* remove possible margins */
+}
diff --git a/deck.js/extensions/fit/deck.fit.js b/deck.js/extensions/fit/deck.fit.js
new file mode 100644
index 0000000..ea71ef9
--- /dev/null
+++ b/deck.js/extensions/fit/deck.fit.js
@@ -0,0 +1,171 @@
+/*!
+ Deck JS - deck.fit
+ Copyright (c) 2012 Rémi Emonet
+ Dual licensed under the MIT license and GPL license.
+ https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+ https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+ This extension provides a way of scaling the slides to fit the slide container.
+ A "design size" is used to do global scaling of all slides in the same way.
+ The default design size is 800x600.
+*/
+(function($, deck, window, undefined) {
+ var $d = $(document),
+ $w = $(window),
+ timer, // Timeout id for debouncing
+ rootSlides,
+
+ /*
+ Internal function to do all the dirty work of scaling the slides.
+ */
+ scaleDeck = function() {
+ var opts = $[deck]('getOptions');
+ var addMarginX = opts.fitMarginX * 2;
+ var addMarginY = opts.fitMarginY * 2;
+ var fitMode = opts.fitMode;
+ var sdw = opts.designWidth;
+ var sdh = opts.designHeight;
+ var $container = $[deck]('getContainer');
+ var scaleX = $container.hasClass(opts.classes.globalscale) ? $container.innerWidth() / (sdw+addMarginX) : 1;
+ var scaleY = $container.hasClass(opts.classes.globalscale) ? $container.innerHeight() / (sdh+addMarginY) : 1;
+ var truescaleX = $container.hasClass(opts.classes.globalscale) ? $container.innerWidth() / (sdw) : 1;
+ var truescaleY = $container.hasClass(opts.classes.globalscale) ? $container.innerHeight() / (sdh) : 1;
+ var scale = scaleX < scaleY ? scaleX : scaleY;
+ var rootSlides = [];
+ var slideTest = $.map([opts.classes.before, opts.classes.previous, opts.classes.current, opts.classes.next, opts.classes.after],
+ function(el, i) {return '.' + el;}).join(', ');
+
+ $.each($[deck]('getSlides'), function(i, $el) {
+ if (!$el.parentsUntil(opts.selectors.container).length) {
+ rootSlides.push($el);
+ }
+ });
+ $.each(rootSlides, function(i, $slide) {
+ $slide.width(sdw);
+ $slide.height(sdh);
+ $.each('Webkit Moz O ms Khtml'.split(' '), function(i, prefix) {
+ if (scale == 1) {
+ $slide.css(prefix + 'Transform', '');
+ } else {
+ if (fitMode == "left top" || fitMode == "top left") {
+ // ok align left/top (ok with the percents)
+ $slide.css(prefix + 'Transform', 'translate(-50%,-50%) scale(' + scale + ' , ' + scale + ') translate(50%,50%) translate('+(addMarginX/2)+'px,'+(addMarginY/2)+'px)');
+ } else if (fitMode == "center middle") {
+ // ok align center/middle
+ $slide.css(prefix + 'Transform', 'translate(-50%,-50%) scale(' + scale + ' , ' + scale + ') translate(50%, 50%) translate('+($container.innerWidth()/2/scale - sdw/2)+'px,'+($container.innerHeight()/2/scale - sdh/2)+'px)');
+ } else if (fitMode == "right bottom" || fitMode == "bottom right") {
+ // ok align right/bottom
+ $slide.css(prefix + 'Transform', 'translate(-50%,-50%) scale(' + scale + ' , ' + scale + ') translate(50%, 50%) translate('+($container.innerWidth()/scale - sdw - addMarginX/2)+'px,'+($container.innerHeight()/scale - sdh - addMarginY/2)+'px)');
+ } else if (fitMode == "stretched") {
+ // ok stretched (with respect of the margin, i.e., it is center/middle)
+ $slide.css(prefix + 'Transform', 'scale(' + scaleX + ' , ' + scaleY + ') translate('+(($container.innerWidth()-sdw)/2/scaleX)+'px,'+(($container.innerHeight()-sdh)/2/scaleY)+'px)');
+ }
+ }
+ });
+ });
+
+ }
+
+ /*
+ Extends defaults/options.
+
+ options.designWidth
+ Defaults to 800. You may instead specify a width as a number
+ of px and all slides will be scaled in the same way, considering their
+ size is the provided one.
+
+ options.designHeight
+ Defaults to 600. You may instead specify a height as a number
+ of px and all slides will be scaled in the same way, considering their
+ size is the provided one.
+
+ options.fitMode
+ How to adapt the slide to the container.
+ Only the following combinations are available for now:
+ "center middle", "top left", "bottom right", "stretched"
+
+ options.fitMarginX
+ options.fitMarginY
+ Defaults to 5. Adds some margin in design space units.
+ E.g., if the designe width is 800 and the margin is 5, the slide will be
+ 810 pixel wide before rescaling.
+
+ options.scaleDebounce
+ Scaling on the browser resize event is debounced. This number is the
+ threshold in milliseconds. You can learn more about debouncing here:
+ http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
+
+ */
+ $.extend(true, $[deck].defaults, {
+ classes: {
+ globalscale: 'deck-globalscale'
+ },
+ keys: {
+ scale: 83 // s
+ },
+
+ designWidth: 800,
+ designHeight: 600,
+ fitMode: "center middle",
+ fitMarginX: 5,
+ fitMarginY: 5,
+ scaleDebounce: 200
+ });
+
+ /*
+ jQuery.deck('disableScale')
+
+ Disables scaling and removes the scale class from the deck container.
+ */
+ $[deck]('extend', 'disableScale', function() {
+ $[deck]('getContainer').removeClass($[deck]('getOptions').classes.globalscale);
+ scaleDeck();
+ });
+
+ /*
+ jQuery.deck('enableScale')
+
+ Enables scaling and adds the scale class to the deck container.
+ */
+ $[deck]('extend', 'enableScale', function() {
+ $[deck]('getContainer').addClass($[deck]('getOptions').classes.globalscale);
+ scaleDeck();
+ });
+
+ /*
+ jQuery.deck('toggleScale')
+
+ Toggles between enabling and disabling scaling.
+ */
+ $[deck]('extend', 'toggleScale', function() {
+ var $c = $[deck]('getContainer');
+ $[deck]($c.hasClass($[deck]('getOptions').classes.globalscale) ?
+ 'disableScale' : 'enableScale');
+ });
+
+ $d.bind('deck.init', function() {
+ var opts = $[deck]('getOptions');
+
+ // Debounce the resize scaling
+ $w.unbind('resize.deckscale').bind('resize.deckscale', function() {
+ window.clearTimeout(timer);
+ timer = window.setTimeout(scaleDeck, opts.scaleDebounce);
+ })
+ // Scale once on load, in case images or something change layout
+ .unbind('load.deckscale').bind('load.deckscale', scaleDeck);
+
+ // Bind key events
+ $d.unbind('keydown.deckscale').bind('keydown.deckscale', function(e) {
+ if (e.which === opts.keys.scale || $.inArray(e.which, opts.keys.scale) > -1) {
+ $[deck]('toggleScale');
+ e.preventDefault();
+ }
+ });
+
+ // Enable scale on init
+ $[deck]('enableScale');
+ });
+})(jQuery, 'deck', this);
+
diff --git a/deck.js/extensions/goto/deck.goto.css b/deck.js/extensions/goto/deck.goto.css
new file mode 100644
index 0000000..108e4f9
--- /dev/null
+++ b/deck.js/extensions/goto/deck.goto.css
@@ -0,0 +1,41 @@
+.deck-container .goto-form {
+ position: absolute;
+ z-index: 3;
+ bottom: 10px;
+ left: 50%;
+ height: 1.75em;
+ margin: 0 0 0 -9.125em;
+ line-height: 1.75em;
+ padding: 0.625em;
+ display: none;
+ background: #ccc;
+ overflow: hidden;
+}
+.borderradius .deck-container .goto-form {
+ -webkit-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
+}
+.deck-container .goto-form label {
+ font-weight: bold;
+}
+.deck-container .goto-form label, .deck-container .goto-form input {
+ display: inline-block;
+ font-family: inherit;
+}
+
+.deck-goto .goto-form {
+ display: block;
+}
+
+#goto-slide {
+ width: 8.375em;
+ margin: 0 0.625em;
+ height: 1.4375em;
+}
+
+@media print {
+ .goto-form, #goto-slide {
+ display: none !important;
+ }
+}
diff --git a/deck.js/extensions/goto/deck.goto.html b/deck.js/extensions/goto/deck.goto.html
new file mode 100644
index 0000000..e3b6a18
--- /dev/null
+++ b/deck.js/extensions/goto/deck.goto.html
@@ -0,0 +1,7 @@
+<!-- Place the following snippet at the bottom of the deck container. -->
+<form action="." method="get" class="goto-form">
+ <label for="goto-slide">Go to slide:</label>
+ <input type="text" name="slidenum" id="goto-slide" list="goto-datalist">
+ <datalist id="goto-datalist"></datalist>
+ <input type="submit" value="Go">
+</form> \ No newline at end of file
diff --git a/deck.js/extensions/goto/deck.goto.js b/deck.js/extensions/goto/deck.goto.js
new file mode 100644
index 0000000..eedba10
--- /dev/null
+++ b/deck.js/extensions/goto/deck.goto.js
@@ -0,0 +1,170 @@
+/*!
+Deck JS - deck.goto
+Copyright (c) 2011 Caleb Troughton
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+This module adds the necessary methods and key bindings to show and hide a form
+for jumping to any slide number/id in the deck (and processes that form
+accordingly). The form-showing state is indicated by the presence of a class on
+the deck container.
+*/
+(function($, deck, undefined) {
+ var $d = $(document);
+
+ /*
+ Extends defaults/options.
+
+ options.classes.goto
+ This class is added to the deck container when showing the Go To Slide
+ form.
+
+ options.selectors.gotoDatalist
+ The element that matches this selector is the datalist element that will
+ be populated with options for each of the slide ids. In browsers that
+ support the datalist element, this provides a drop list of slide ids to
+ aid the user in selecting a slide.
+
+ options.selectors.gotoForm
+ The element that matches this selector is the form that is submitted
+ when a user hits enter after typing a slide number/id in the gotoInput
+ element.
+
+ options.selectors.gotoInput
+ The element that matches this selector is the text input field for
+ entering a slide number/id in the Go To Slide form.
+
+ options.keys.goto
+ The numeric keycode used to show the Go To Slide form.
+
+ options.countNested
+ If false, only top level slides will be counted when entering a
+ slide number.
+ */
+ $.extend(true, $[deck].defaults, {
+ classes: {
+ goto: 'deck-goto'
+ },
+
+ selectors: {
+ gotoDatalist: '#goto-datalist',
+ gotoForm: '.goto-form',
+ gotoInput: '#goto-slide'
+ },
+
+ keys: {
+ goto: 71 // g
+ },
+
+ countNested: true
+ });
+
+ /*
+ jQuery.deck('showGoTo')
+
+ Shows the Go To Slide form by adding the class specified by the goto class
+ option to the deck container.
+ */
+ $[deck]('extend', 'showGoTo', function() {
+ $[deck]('getContainer').addClass($[deck]('getOptions').classes.goto);
+ $($[deck]('getOptions').selectors.gotoInput).focus();
+ });
+
+ /*
+ jQuery.deck('hideGoTo')
+
+ Hides the Go To Slide form by removing the class specified by the goto class
+ option from the deck container.
+ */
+ $[deck]('extend', 'hideGoTo', function() {
+ $($[deck]('getOptions').selectors.gotoInput).blur();
+ $[deck]('getContainer').removeClass($[deck]('getOptions').classes.goto);
+ });
+
+ /*
+ jQuery.deck('toggleGoTo')
+
+ Toggles between showing and hiding the Go To Slide form.
+ */
+ $[deck]('extend', 'toggleGoTo', function() {
+ $[deck]($[deck]('getContainer').hasClass($[deck]('getOptions').classes.goto) ? 'hideGoTo' : 'showGoTo');
+ });
+
+ $d.bind('deck.init', function() {
+ var opts = $[deck]('getOptions'),
+ $datalist = $(opts.selectors.gotoDatalist),
+ slideTest = $.map([
+ opts.classes.before,
+ opts.classes.previous,
+ opts.classes.current,
+ opts.classes.next,
+ opts.classes.after
+ ], function(el, i) {
+ return '.' + el;
+ }).join(', '),
+ rootCounter = 1;
+
+ // Bind key events
+ $d.unbind('keydown.deckgoto').bind('keydown.deckgoto', function(e) {
+ var key = $[deck]('getOptions').keys.goto;
+
+ if (e.which === key || $.inArray(e.which, key) > -1) {
+ e.preventDefault();
+ $[deck]('toggleGoTo');
+ }
+ });
+
+ /* Populate datalist and work out countNested*/
+ $.each($[deck]('getSlides'), function(i, $slide) {
+ var id = $slide.attr('id'),
+ $parentSlides = $slide.parentsUntil(opts.selectors.container, slideTest);
+
+ if (id) {
+ $datalist.append('<option value="' + id + '">');
+ }
+
+ if ($parentSlides.length) {
+ $slide.removeData('rootIndex');
+ }
+ else if (!opts.countNested) {
+ $slide.data('rootIndex', rootCounter);
+ ++rootCounter;
+ }
+ });
+
+ // Process form submittal, go to the slide entered
+ $(opts.selectors.gotoForm)
+ .unbind('submit.deckgoto')
+ .bind('submit.deckgoto', function(e) {
+ var $field = $($[deck]('getOptions').selectors.gotoInput),
+ ndx = parseInt($field.val(), 10);
+
+ if (!$[deck]('getOptions').countNested) {
+ if (ndx >= rootCounter) return false;
+ $.each($[deck]('getSlides'), function(i, $slide) {
+ if ($slide.data('rootIndex') === ndx) {
+ ndx = i + 1;
+ return false;
+ }
+ });
+ }
+
+ $[deck]('go', isNaN(ndx) ? $field.val() : ndx - 1);
+ $[deck]('hideGoTo');
+ $field.val('');
+
+ e.preventDefault();
+ });
+
+ // Dont let keys in the input trigger deck actions
+ $(opts.selectors.gotoInput)
+ .unbind('keydown.deckgoto')
+ .bind('keydown.deckgoto', function(e) {
+ e.stopPropagation();
+ });
+ });
+})(jQuery, 'deck');
+
diff --git a/deck.js/extensions/goto/deck.goto.scss b/deck.js/extensions/goto/deck.goto.scss
new file mode 100755
index 0000000..9170d5d
--- /dev/null
+++ b/deck.js/extensions/goto/deck.goto.scss
@@ -0,0 +1,46 @@
+.deck-container {
+ .goto-form {
+ position:absolute;
+ z-index:3;
+ bottom:10px;
+ left:50%;
+ height:1.75em;
+ margin:0 0 0 -9.125em;
+ line-height:1.75em;
+ padding:0.625em;
+ display:none;
+ background:#ccc;
+ overflow:hidden;
+
+ .borderradius & {
+ -webkit-border-radius:10px;
+ -moz-border-radius:10px;
+ border-radius:10px;
+ }
+
+ label {
+ font-weight:bold;
+ }
+
+ label, input {
+ display:inline-block;
+ font-family:inherit;
+ }
+ }
+}
+
+.deck-goto .goto-form {
+ display:block;
+}
+
+#goto-slide {
+ width:8.375em;
+ margin:0 0.625em;
+ height:1.4375em;
+}
+
+@media print {
+ .goto-form, #goto-slide {
+ display:none !important;
+ }
+} \ No newline at end of file
diff --git a/deck.js/extensions/hash/deck.hash.css b/deck.js/extensions/hash/deck.hash.css
new file mode 100644
index 0000000..28f0732
--- /dev/null
+++ b/deck.js/extensions/hash/deck.hash.css
@@ -0,0 +1,13 @@
+.deck-container .deck-permalink {
+ display: none;
+ position: absolute;
+ z-index: 4;
+ bottom: 30px;
+ right: 0;
+ width: 48px;
+ text-align: center;
+}
+
+.no-history .deck-container:hover .deck-permalink {
+ display: block;
+}
diff --git a/deck.js/extensions/hash/deck.hash.html b/deck.js/extensions/hash/deck.hash.html
new file mode 100644
index 0000000..102579c
--- /dev/null
+++ b/deck.js/extensions/hash/deck.hash.html
@@ -0,0 +1,2 @@
+<!-- Place the following snippet at the bottom of the deck container. -->
+<a href="." title="Permalink to this slide" class="deck-permalink">#</a> \ No newline at end of file
diff --git a/deck.js/extensions/hash/deck.hash.js b/deck.js/extensions/hash/deck.hash.js
new file mode 100644
index 0000000..879bc62
--- /dev/null
+++ b/deck.js/extensions/hash/deck.hash.js
@@ -0,0 +1,142 @@
+/*!
+Deck JS - deck.hash
+Copyright (c) 2011 Caleb Troughton
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+This module adds deep linking to individual slides, enables internal links
+to slides within decks, and updates the address bar with the hash as the user
+moves through the deck. A permalink anchor is also updated. Standard themes
+hide this link in browsers that support the History API, and show it for
+those that do not. Slides that do not have an id are assigned one according to
+the hashPrefix option. In addition to the on-slide container state class
+kept by core, this module adds an on-slide state class that uses the id of each
+slide.
+*/
+(function ($, deck, window, undefined) {
+ var $d = $(document),
+ $window = $(window),
+
+ /* Collection of internal fragment links in the deck */
+ $internals,
+
+ /*
+ Internal only function. Given a string, extracts the id from the hash,
+ matches it to the appropriate slide, and navigates there.
+ */
+ goByHash = function(str) {
+ var id = str.substr(str.indexOf("#") + 1),
+ slides = $[deck]('getSlides');
+
+ $.each(slides, function(i, $el) {
+ if ($el.attr('id') === id) {
+ $[deck]('go', i);
+ return false;
+ }
+ });
+
+ // If we don't set these to 0 the container scrolls due to hashchange
+ $[deck]('getContainer').scrollLeft(0).scrollTop(0);
+ };
+
+ /*
+ Extends defaults/options.
+
+ options.selectors.hashLink
+ The element matching this selector has its href attribute updated to
+ the hash of the current slide as the user navigates through the deck.
+
+ options.hashPrefix
+ Every slide that does not have an id is assigned one at initialization.
+ Assigned ids take the form of hashPrefix + slideIndex, e.g., slide-0,
+ slide-12, etc.
+
+ options.preventFragmentScroll
+ When deep linking to a hash of a nested slide, this scrolls the deck
+ container to the top, undoing the natural browser behavior of scrolling
+ to the document fragment on load.
+ */
+ $.extend(true, $[deck].defaults, {
+ selectors: {
+ hashLink: '.deck-permalink'
+ },
+
+ hashPrefix: 'slide-',
+ preventFragmentScroll: true
+ });
+
+
+ $d.bind('deck.init', function() {
+ var opts = $[deck]('getOptions');
+ $internals = $(),
+ slides = $[deck]('getSlides');
+
+ $.each(slides, function(i, $el) {
+ var hash;
+
+ /* Hand out ids to the unfortunate slides born without them */
+ if (!$el.attr('id') || $el.data('deckAssignedId') === $el.attr('id')) {
+ $el.attr('id', opts.hashPrefix + i);
+ $el.data('deckAssignedId', opts.hashPrefix + i);
+ }
+
+ hash ='#' + $el.attr('id');
+
+ /* Deep link to slides on init */
+ if (hash === window.location.hash) {
+ setTimeout(function() {$[deck]('go', i)}, 1);
+ }
+
+ /* Add internal links to this slide */
+ $internals = $internals.add('a[href="' + hash + '"]');
+ });
+
+ if (!Modernizr.hashchange) {
+ /* Set up internal links using click for the poor browsers
+ without a hashchange event. */
+ $internals.unbind('click.deckhash').bind('click.deckhash', function(e) {
+ goByHash($(this).attr('href'));
+ });
+ }
+
+ /* Set up first id container state class */
+ if (slides.length) {
+ $[deck]('getContainer').addClass(opts.classes.onPrefix + $[deck]('getSlide').attr('id'));
+ };
+ })
+ /* Update permalink, address bar, and state class on a slide change */
+ .bind('deck.change', function(e, from, to) {
+ var hash = '#' + $[deck]('getSlide', to).attr('id'),
+ hashPath = window.location.href.replace(/#.*/, '') + hash,
+ opts = $[deck]('getOptions'),
+ osp = opts.classes.onPrefix,
+ $c = $[deck]('getContainer');
+
+ $c.removeClass(osp + $[deck]('getSlide', from).attr('id'));
+ $c.addClass(osp + $[deck]('getSlide', to).attr('id'));
+
+ $(opts.selectors.hashLink).attr('href', hashPath);
+ if (Modernizr.history) {
+ window.history.replaceState({}, "", hashPath);
+ }
+ });
+
+ /* Deals with internal links in modern browsers */
+ $window.bind('hashchange.deckhash', function(e) {
+ if (e.originalEvent && e.originalEvent.newURL) {
+ goByHash(e.originalEvent.newURL);
+ }
+ else {
+ goByHash(window.location.hash);
+ }
+ })
+ /* Prevent scrolling on deep links */
+ .bind('load', function() {
+ if ($[deck]('getOptions').preventFragmentScroll) {
+ $[deck]('getContainer').scrollLeft(0).scrollTop(0);
+ }
+ });
+})(jQuery, 'deck', this); \ No newline at end of file
diff --git a/deck.js/extensions/hash/deck.hash.scss b/deck.js/extensions/hash/deck.hash.scss
new file mode 100644
index 0000000..03b412d
--- /dev/null
+++ b/deck.js/extensions/hash/deck.hash.scss
@@ -0,0 +1,15 @@
+.deck-container {
+ .deck-permalink {
+ display:none;
+ position:absolute;
+ z-index:4;
+ bottom:30px;
+ right:0;
+ width:48px;
+ text-align:center;
+ }
+}
+
+.no-history .deck-container:hover .deck-permalink {
+ display:block;
+} \ No newline at end of file
diff --git a/deck.js/extensions/menu/deck.menu.css b/deck.js/extensions/menu/deck.menu.css
new file mode 100644
index 0000000..c664a3f
--- /dev/null
+++ b/deck.js/extensions/menu/deck.menu.css
@@ -0,0 +1,47 @@
+.deck-menu .slide {
+ background: #eee;
+ position: relative;
+ left: 0;
+ top: 0;
+ visibility: visible;
+ cursor: pointer;
+}
+.no-csstransforms .deck-menu > .slide {
+ float: left;
+ width: 22%;
+ height: 22%;
+ min-height: 0;
+ margin: 1%;
+ font-size: 0.22em;
+ overflow: hidden;
+ padding: 0 0.5%;
+}
+.csstransforms .deck-menu > .slide {
+ -webkit-transform: scale(0.22) !important;
+ -moz-transform: scale(0.22) !important;
+ -o-transform: scale(0.22) !important;
+ -ms-transform: scale(0.22) !important;
+ transform: scale(0.22) !important;
+ -webkit-transform-origin: 0 0;
+ -moz-transform-origin: 0 0;
+ -o-transform-origin: 0 0;
+ -ms-transform-origin: 0 0;
+ transform-origin: 0 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ padding: 0 48px;
+ margin: 12px;
+}
+.deck-menu iframe, .deck-menu img, .deck-menu video {
+ max-width: 100%;
+}
+.deck-menu .deck-current, .no-touch .deck-menu .slide:hover {
+ background: #ddf;
+}
+.deck-menu.deck-container:hover .deck-prev-link, .deck-menu.deck-container:hover .deck-next-link {
+ display: none;
+}
diff --git a/deck.js/extensions/menu/deck.menu.js b/deck.js/extensions/menu/deck.menu.js
new file mode 100644
index 0000000..743cf77
--- /dev/null
+++ b/deck.js/extensions/menu/deck.menu.js
@@ -0,0 +1,187 @@
+/*!
+Deck JS - deck.menu
+Copyright (c) 2011 Caleb Troughton
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+This module adds the methods and key binding to show and hide a menu of all
+slides in the deck. The deck menu state is indicated by the presence of a class
+on the deck container.
+*/
+(function($, deck, undefined) {
+ var $d = $(document),
+ rootSlides; // Array of top level slides
+
+ /*
+ Extends defaults/options.
+
+ options.classes.menu
+ This class is added to the deck container when showing the slide menu.
+
+ options.keys.menu
+ The numeric keycode used to toggle between showing and hiding the slide
+ menu.
+
+ options.touch.doubletapWindow
+ Two consecutive touch events within this number of milliseconds will
+ be considered a double tap, and will toggle the menu on touch devices.
+ */
+ $.extend(true, $[deck].defaults, {
+ classes: {
+ menu: 'deck-menu'
+ },
+
+ keys: {
+ menu: 77 // m
+ },
+
+ touch: {
+ doubletapWindow: 400
+ }
+ });
+
+ /*
+ jQuery.deck('showMenu')
+
+ Shows the slide menu by adding the class specified by the menu class option
+ to the deck container.
+ */
+ $[deck]('extend', 'showMenu', function() {
+ var $c = $[deck]('getContainer'),
+ opts = $[deck]('getOptions');
+
+ if ($c.hasClass(opts.classes.menu)) return;
+
+ // Hide through loading class to short-circuit transitions (perf)
+ $c.addClass([opts.classes.loading, opts.classes.menu].join(' '));
+
+ /* Forced to do this in JS until CSS learns second-grade math. Save old
+ style value for restoration when menu is hidden. */
+ if (Modernizr.csstransforms) {
+ $.each(rootSlides, function(i, $slide) {
+ $slide.data('oldStyle', $slide.attr('style'));
+ $slide.css({
+ 'position': 'absolute',
+ 'left': ((i % 4) * 25) + '%',
+ 'top': (Math.floor(i / 4) * 25) + '%'
+ });
+ });
+ }
+
+ // Need to ensure the loading class renders first, then remove
+ window.setTimeout(function() {
+ $c.removeClass(opts.classes.loading)
+ .scrollTop($[deck]('getSlide').offset().top);
+ }, 0);
+ });
+
+ /*
+ jQuery.deck('hideMenu')
+
+ Hides the slide menu by removing the class specified by the menu class
+ option from the deck container.
+ */
+ $[deck]('extend', 'hideMenu', function() {
+ var $c = $[deck]('getContainer'),
+ opts = $[deck]('getOptions');
+
+ if (!$c.hasClass(opts.classes.menu)) return;
+
+ $c.removeClass(opts.classes.menu);
+ $c.addClass(opts.classes.loading);
+
+ /* Restore old style value */
+ if (Modernizr.csstransforms) {
+ $.each(rootSlides, function(i, $slide) {
+ var oldStyle = $slide.data('oldStyle');
+
+ $slide.attr('style', oldStyle ? oldStyle : '');
+ });
+ }
+
+ window.setTimeout(function() {
+ $c.removeClass(opts.classes.loading).scrollTop(0);
+ }, 0);
+ });
+
+ /*
+ jQuery.deck('toggleMenu')
+
+ Toggles between showing and hiding the slide menu.
+ */
+ $[deck]('extend', 'toggleMenu', function() {
+ $[deck]('getContainer').hasClass($[deck]('getOptions').classes.menu) ?
+ $[deck]('hideMenu') : $[deck]('showMenu');
+ });
+
+ $d.bind('deck.init', function() {
+ var opts = $[deck]('getOptions'),
+ touchEndTime = 0,
+ currentSlide,
+ slideTest = $.map([
+ opts.classes.before,
+ opts.classes.previous,
+ opts.classes.current,
+ opts.classes.next,
+ opts.classes.after
+ ], function(el, i) {
+ return '.' + el;
+ }).join(', ');
+
+ // Build top level slides array
+ rootSlides = [];
+ $.each($[deck]('getSlides'), function(i, $el) {
+ if (!$el.parentsUntil(opts.selectors.container, slideTest).length) {
+ rootSlides.push($el);
+ }
+ });
+
+ // Bind key events
+ $d.unbind('keydown.deckmenu').bind('keydown.deckmenu', function(e) {
+ if (e.which === opts.keys.menu || $.inArray(e.which, opts.keys.menu) > -1) {
+ $[deck]('toggleMenu');
+ e.preventDefault();
+ }
+ });
+
+ // Double tap to toggle slide menu for touch devices
+ $[deck]('getContainer').unbind('touchstart.deckmenu').bind('touchstart.deckmenu', function(e) {
+ currentSlide = $[deck]('getSlide');
+ })
+ .unbind('touchend.deckmenu').bind('touchend.deckmenu', function(e) {
+ var now = Date.now();
+
+ // Ignore this touch event if it caused a nav change (swipe)
+ if (currentSlide !== $[deck]('getSlide')) return;
+
+ if (now - touchEndTime < opts.touch.doubletapWindow) {
+ $[deck]('toggleMenu');
+ e.preventDefault();
+ }
+ touchEndTime = now;
+ });
+
+ // Selecting slides from the menu
+ $.each($[deck]('getSlides'), function(i, $s) {
+ $s.unbind('click.deckmenu').bind('click.deckmenu', function(e) {
+ if (!$[deck]('getContainer').hasClass(opts.classes.menu)) return;
+
+ $[deck]('go', i);
+ $[deck]('hideMenu');
+ e.stopPropagation();
+ e.preventDefault();
+ });
+ });
+ })
+ .bind('deck.change', function(e, from, to) {
+ var container = $[deck]('getContainer');
+
+ if (container.hasClass($[deck]('getOptions').classes.menu)) {
+ container.scrollTop($[deck]('getSlide', to).offset().top);
+ }
+ });
+})(jQuery, 'deck');
+
diff --git a/deck.js/extensions/menu/deck.menu.scss b/deck.js/extensions/menu/deck.menu.scss
new file mode 100755
index 0000000..0bd576d
--- /dev/null
+++ b/deck.js/extensions/menu/deck.menu.scss
@@ -0,0 +1,58 @@
+.deck-menu {
+ .slide {
+ background:#eee;
+ position:relative;
+ left:0;
+ top:0;
+ visibility:visible;
+ cursor:pointer;
+ }
+
+ > .slide {
+ .no-csstransforms & {
+ float:left;
+ width:22%;
+ height:22%;
+ min-height:0;
+ margin:1%;
+ font-size:0.22em;
+ overflow:hidden;
+ padding:0 0.5%;
+ }
+
+ .csstransforms & {
+ -webkit-transform:scale(.22) !important;
+ -moz-transform:scale(.22) !important;
+ -o-transform:scale(.22) !important;
+ -ms-transform:scale(.22) !important;
+ transform:scale(.22) !important;
+ -webkit-transform-origin:0 0;
+ -moz-transform-origin:0 0;
+ -o-transform-origin:0 0;
+ -ms-transform-origin:0 0;
+ transform-origin:0 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width:100%;
+ height:100%;
+ overflow:hidden;
+ padding:0 48px;
+ margin:12px;
+ }
+ }
+
+ iframe, img, video {
+ max-width:100%;
+ }
+
+ .deck-current, .no-touch & .slide:hover {
+ background:#ddf;
+ }
+
+ &.deck-container:hover {
+ .deck-prev-link, .deck-next-link {
+ display:none;
+ }
+ }
+} \ No newline at end of file
diff --git a/deck.js/extensions/navigation/deck.navigation.css b/deck.js/extensions/navigation/deck.navigation.css
new file mode 100644
index 0000000..e1ebad8
--- /dev/null
+++ b/deck.js/extensions/navigation/deck.navigation.css
@@ -0,0 +1,43 @@
+.deck-container .deck-prev-link, .deck-container .deck-next-link {
+ display: none;
+ position: absolute;
+ z-index: 3;
+ top: 50%;
+ width: 32px;
+ height: 32px;
+ margin-top: -16px;
+ font-size: 20px;
+ font-weight: bold;
+ line-height: 32px;
+ vertical-align: middle;
+ text-align: center;
+ text-decoration: none;
+ color: #fff;
+ background: #888;
+}
+.borderradius .deck-container .deck-prev-link, .borderradius .deck-container .deck-next-link {
+ -webkit-border-radius: 16px;
+ -moz-border-radius: 16px;
+ border-radius: 16px;
+}
+.deck-container .deck-prev-link:hover, .deck-container .deck-prev-link:focus, .deck-container .deck-prev-link:active, .deck-container .deck-prev-link:visited, .deck-container .deck-next-link:hover, .deck-container .deck-next-link:focus, .deck-container .deck-next-link:active, .deck-container .deck-next-link:visited {
+ color: #fff;
+}
+.deck-container .deck-prev-link {
+ left: 8px;
+}
+.deck-container .deck-next-link {
+ right: 8px;
+}
+.deck-container:hover .deck-prev-link, .deck-container:hover .deck-next-link {
+ display: block;
+}
+.deck-container:hover .deck-prev-link.deck-nav-disabled, .touch .deck-container:hover .deck-prev-link, .deck-container:hover .deck-next-link.deck-nav-disabled, .touch .deck-container:hover .deck-next-link {
+ display: none;
+}
+
+@media print {
+ .deck-prev-link, .deck-next-link {
+ display: none !important;
+ }
+}
diff --git a/deck.js/extensions/navigation/deck.navigation.html b/deck.js/extensions/navigation/deck.navigation.html
new file mode 100644
index 0000000..c756624
--- /dev/null
+++ b/deck.js/extensions/navigation/deck.navigation.html
@@ -0,0 +1,3 @@
+<!-- Place the following snippet at the bottom of the deck container. -->
+<a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
+<a href="#" class="deck-next-link" title="Next">&#8594;</a> \ No newline at end of file
diff --git a/deck.js/extensions/navigation/deck.navigation.js b/deck.js/extensions/navigation/deck.navigation.js
new file mode 100644
index 0000000..a07f7ea
--- /dev/null
+++ b/deck.js/extensions/navigation/deck.navigation.js
@@ -0,0 +1,92 @@
+/*!
+Deck JS - deck.navigation
+Copyright (c) 2011 Caleb Troughton
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+This module adds clickable previous and next links to the deck.
+*/
+(function($, deck, undefined) {
+ var $d = $(document),
+
+ /* Updates link hrefs, and disabled states if last/first slide */
+ updateButtons = function(e, from, to) {
+ var opts = $[deck]('getOptions'),
+ last = $[deck]('getSlides').length - 1,
+ prevSlide = $[deck]('getSlide', to - 1),
+ nextSlide = $[deck]('getSlide', to + 1),
+ hrefBase = window.location.href.replace(/#.*/, ''),
+ prevId = prevSlide ? prevSlide.attr('id') : undefined,
+ nextId = nextSlide ? nextSlide.attr('id') : undefined;
+
+ $(opts.selectors.previousLink)
+ .toggleClass(opts.classes.navDisabled, !to)
+ .attr('href', hrefBase + '#' + (prevId ? prevId : ''));
+ $(opts.selectors.nextLink)
+ .toggleClass(opts.classes.navDisabled, to === last)
+ .attr('href', hrefBase + '#' + (nextId ? nextId : ''));
+ };
+
+ /*
+ Extends defaults/options.
+
+ options.classes.navDisabled
+ This class is added to a navigation link when that action is disabled.
+ It is added to the previous link when on the first slide, and to the
+ next link when on the last slide.
+
+ options.selectors.nextLink
+ The elements that match this selector will move the deck to the next
+ slide when clicked.
+
+ options.selectors.previousLink
+ The elements that match this selector will move to deck to the previous
+ slide when clicked.
+ */
+ $.extend(true, $[deck].defaults, {
+ classes: {
+ navDisabled: 'deck-nav-disabled'
+ },
+
+ selectors: {
+ nextLink: '.deck-next-link',
+ previousLink: '.deck-prev-link'
+ }
+ });
+
+ $d.bind('deck.init', function() {
+ var opts = $[deck]('getOptions'),
+ slides = $[deck]('getSlides'),
+ $current = $[deck]('getSlide'),
+ ndx;
+
+ // Setup prev/next link events
+ $(opts.selectors.previousLink)
+ .unbind('click.decknavigation')
+ .bind('click.decknavigation', function(e) {
+ $[deck]('prev');
+ e.preventDefault();
+ });
+
+ $(opts.selectors.nextLink)
+ .unbind('click.decknavigation')
+ .bind('click.decknavigation', function(e) {
+ $[deck]('next');
+ e.preventDefault();
+ });
+
+ // Find where we started in the deck and set initial states
+ $.each(slides, function(i, $slide) {
+ if ($slide === $current) {
+ ndx = i;
+ return false;
+ }
+ });
+ updateButtons(null, ndx, ndx);
+ })
+ .bind('deck.change', updateButtons);
+})(jQuery, 'deck');
+
diff --git a/deck.js/extensions/navigation/deck.navigation.scss b/deck.js/extensions/navigation/deck.navigation.scss
new file mode 100755
index 0000000..815602f
--- /dev/null
+++ b/deck.js/extensions/navigation/deck.navigation.scss
@@ -0,0 +1,56 @@
+@mixin border-radius($r) {
+ -webkit-border-radius:$r;
+ -moz-border-radius:$r;
+ border-radius:$r;
+}
+
+.deck-container {
+ .deck-prev-link, .deck-next-link {
+ display:none;
+ position:absolute;
+ z-index:3;
+ top:50%;
+ width:32px;
+ height:32px;
+ margin-top:-16px;
+ font-size:20px;
+ font-weight:bold;
+ line-height:32px;
+ vertical-align:middle;
+ text-align:center;
+ text-decoration:none;
+ color:#fff;
+ background:#888;
+
+ .borderradius & {
+ @include border-radius(16px);
+ }
+
+ &:hover, &:focus, &:active, &:visited {
+ color:#fff;
+ }
+ }
+
+ .deck-prev-link {
+ left:8px;
+ }
+
+ .deck-next-link {
+ right:8px;
+ }
+
+ &:hover .deck-prev-link, &:hover .deck-next-link {
+ display:block;
+
+ &.deck-nav-disabled, .touch & {
+ display:none;
+ }
+ }
+}
+
+
+@media print {
+ .deck-prev-link, .deck-next-link {
+ display:none !important;
+ }
+}
diff --git a/deck.js/extensions/scale/deck.scale.css b/deck.js/extensions/scale/deck.scale.css
new file mode 100644
index 0000000..d6a4eb0
--- /dev/null
+++ b/deck.js/extensions/scale/deck.scale.css
@@ -0,0 +1,28 @@
+/* Remove this line if you are embedding deck.js in a page and
+using the scale extension. */
+.csstransforms {
+ overflow: hidden;
+}
+
+.csstransforms .deck-container.deck-scale:not(.deck-menu) > .slide {
+ -webkit-box-sizing: padding-box;
+ -moz-box-sizing: padding-box;
+ box-sizing: padding-box;
+ width: 100%;
+ padding-bottom: 20px;
+}
+.csstransforms .deck-container.deck-scale:not(.deck-menu) > .slide > .deck-slide-scaler {
+ -webkit-transform-origin: 50% 0;
+ -moz-transform-origin: 50% 0;
+ -o-transform-origin: 50% 0;
+ -ms-transform-origin: 50% 0;
+ transform-origin: 50% 0;
+}
+
+.csstransforms .deck-container.deck-menu .deck-slide-scaler {
+ -webkit-transform: none !important;
+ -moz-transform: none !important;
+ -o-transform: none !important;
+ -ms-transform: none !important;
+ transform: none !important;
+}
diff --git a/deck.js/extensions/scale/deck.scale.js b/deck.js/extensions/scale/deck.scale.js
new file mode 100644
index 0000000..14feb1a
--- /dev/null
+++ b/deck.js/extensions/scale/deck.scale.js
@@ -0,0 +1,170 @@
+/*!
+Deck JS - deck.scale
+Copyright (c) 2011-2012 Caleb Troughton
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+This module adds automatic scaling to the deck. Slides are scaled down
+using CSS transforms to fit within the deck container. If the container is
+big enough to hold the slides without scaling, no scaling occurs. The user
+can disable and enable scaling with a keyboard shortcut.
+
+Note: CSS transforms may make Flash videos render incorrectly. Presenters
+that need to use video may want to disable scaling to play them. HTML5 video
+works fine.
+*/
+(function($, deck, window, undefined) {
+ var $d = $(document),
+ $w = $(window),
+ baseHeight, // Value to scale against
+ timer, // Timeout id for debouncing
+ rootSlides,
+
+ /*
+ Internal function to do all the dirty work of scaling the slides.
+ */
+ scaleDeck = function() {
+ var opts = $[deck]('getOptions'),
+ obh = opts.baseHeight,
+ $container = $[deck]('getContainer'),
+ baseHeight = obh ? obh : $container.height();
+
+ // Scale each slide down if necessary (but don't scale up)
+ $.each(rootSlides, function(i, $slide) {
+ var slideHeight = $slide.innerHeight(),
+ $scaler = $slide.find('.' + opts.classes.scaleSlideWrapper),
+ scale = $container.hasClass(opts.classes.scale) ?
+ baseHeight / slideHeight :
+ 1;
+
+ $.each('Webkit Moz O ms Khtml'.split(' '), function(i, prefix) {
+ if (scale === 1) {
+ $scaler.css(prefix + 'Transform', '');
+ }
+ else {
+ $scaler.css(prefix + 'Transform', 'scale(' + scale + ')');
+ }
+ });
+ });
+ }
+
+ /*
+ Extends defaults/options.
+
+ options.classes.scale
+ This class is added to the deck container when scaling is enabled.
+ It is enabled by default when the module is included.
+
+ options.classes.scaleSlideWrapper
+ Scaling is done using a wrapper around the contents of each slide. This
+ class is applied to that wrapper.
+
+ options.keys.scale
+ The numeric keycode used to toggle enabling and disabling scaling.
+
+ options.baseHeight
+ When baseHeight is falsy, as it is by default, the deck is scaled in
+ proportion to the height of the deck container. You may instead specify
+ a height as a number of px, and slides will be scaled against this
+ height regardless of the container size.
+
+ options.scaleDebounce
+ Scaling on the browser resize event is debounced. This number is the
+ threshold in milliseconds. You can learn more about debouncing here:
+ http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
+
+ */
+ $.extend(true, $[deck].defaults, {
+ classes: {
+ scale: 'deck-scale',
+ scaleSlideWrapper: 'deck-slide-scaler'
+ },
+
+ keys: {
+ scale: 83 // s
+ },
+
+ baseHeight: null,
+ scaleDebounce: 200
+ });
+
+ /*
+ jQuery.deck('disableScale')
+
+ Disables scaling and removes the scale class from the deck container.
+ */
+ $[deck]('extend', 'disableScale', function() {
+ $[deck]('getContainer').removeClass($[deck]('getOptions').classes.scale);
+ scaleDeck();
+ });
+
+ /*
+ jQuery.deck('enableScale')
+
+ Enables scaling and adds the scale class to the deck container.
+ */
+ $[deck]('extend', 'enableScale', function() {
+ $[deck]('getContainer').addClass($[deck]('getOptions').classes.scale);
+ scaleDeck();
+ });
+
+ /*
+ jQuery.deck('toggleScale')
+
+ Toggles between enabling and disabling scaling.
+ */
+ $[deck]('extend', 'toggleScale', function() {
+ var $c = $[deck]('getContainer');
+ $[deck]($c.hasClass($[deck]('getOptions').classes.scale) ?
+ 'disableScale' : 'enableScale');
+ });
+
+ $d.bind('deck.init', function() {
+ var opts = $[deck]('getOptions'),
+ slideTest = $.map([
+ opts.classes.before,
+ opts.classes.previous,
+ opts.classes.current,
+ opts.classes.next,
+ opts.classes.after
+ ], function(el, i) {
+ return '.' + el;
+ }).join(', ');
+
+ // Build top level slides array
+ rootSlides = [];
+ $.each($[deck]('getSlides'), function(i, $el) {
+ if (!$el.parentsUntil(opts.selectors.container, slideTest).length) {
+ rootSlides.push($el);
+ }
+ });
+
+ // Use a wrapper on each slide to handle content scaling
+ $.each(rootSlides, function(i, $slide) {
+ $slide.children().wrapAll('<div class="' + opts.classes.scaleSlideWrapper + '"/>');
+ });
+
+ // Debounce the resize scaling
+ $w.unbind('resize.deckscale').bind('resize.deckscale', function() {
+ window.clearTimeout(timer);
+ timer = window.setTimeout(scaleDeck, opts.scaleDebounce);
+ })
+ // Scale once on load, in case images or something change layout
+ .unbind('load.deckscale').bind('load.deckscale', scaleDeck);
+
+ // Bind key events
+ $d.unbind('keydown.deckscale').bind('keydown.deckscale', function(e) {
+ if (e.which === opts.keys.scale || $.inArray(e.which, opts.keys.scale) > -1) {
+ $[deck]('toggleScale');
+ e.preventDefault();
+ }
+ });
+
+ // Enable scale on init
+ $[deck]('enableScale');
+ });
+})(jQuery, 'deck', this);
+
diff --git a/deck.js/extensions/scale/deck.scale.scss b/deck.js/extensions/scale/deck.scale.scss
new file mode 100644
index 0000000..2fa0851
--- /dev/null
+++ b/deck.js/extensions/scale/deck.scale.scss
@@ -0,0 +1,31 @@
+/* Remove this line if you are embedding deck.js in a page and
+using the scale extension. */
+.csstransforms {
+ overflow:hidden;
+}
+
+.csstransforms .deck-container.deck-scale:not(.deck-menu) {
+ > .slide {
+ -webkit-box-sizing: padding-box;
+ -moz-box-sizing: padding-box;
+ box-sizing: padding-box;
+ width:100%;
+ padding-bottom:20px;
+
+ > .deck-slide-scaler {
+ -webkit-transform-origin: 50% 0;
+ -moz-transform-origin: 50% 0;
+ -o-transform-origin: 50% 0;
+ -ms-transform-origin: 50% 0;
+ transform-origin: 50% 0;
+ }
+ }
+}
+
+.csstransforms .deck-container.deck-menu .deck-slide-scaler {
+ -webkit-transform:none !important;
+ -moz-transform:none !important;
+ -o-transform:none !important;
+ -ms-transform:none !important;
+ transform:none !important;
+} \ No newline at end of file
diff --git a/deck.js/extensions/simplemath/deck.simplemath.js b/deck.js/extensions/simplemath/deck.simplemath.js
new file mode 100644
index 0000000..c09d6f3
--- /dev/null
+++ b/deck.js/extensions/simplemath/deck.simplemath.js
@@ -0,0 +1,25 @@
+/*!
+Deck JS - deck.simplemath
+Copyright (c) 2012 Rémi Emonet,
+using a modified version of the script from http://gold-saucer.afraid.org/mathml/greasemonkey/ by Steve Cheng
+*/
+
+/*
+This module provides a support for latex equation syntax.
+*/
+
+(function($, deck, undefined) {
+ var $d = $(document);
+ var may = function(f) {return f ? f : function() {}};
+
+ $d.bind('deck.init', function() {
+ var container = $[deck]('getContainer');
+ $('.latex', container).each(function() {
+ var it = this;
+ var v = $(it).text();
+ it.innerHTML = "$\\displaystyle "+v+"$";
+ new latex2mml().patch_element(it);
+ });
+ });
+
+})(jQuery, 'deck'); \ No newline at end of file
diff --git a/deck.js/extensions/smartsyntax/deck.smartsyntax.js b/deck.js/extensions/smartsyntax/deck.smartsyntax.js
new file mode 100644
index 0000000..581f9e1
--- /dev/null
+++ b/deck.js/extensions/smartsyntax/deck.smartsyntax.js
@@ -0,0 +1,226 @@
+/*!
+Deck JS - deck.smartsyntax
+Copyright (c) 2012 Rémi Emonet
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+This module provides a support for a shorter syntax for slides.
+*/
+
+(function($, deck, undefined) {
+ var $d = $(document);
+ var may = function(f) {return f ? f : function() {}};
+ var startsWith = function(longStr, part) {return longStr.substr(0, part.length) == part;}
+ var startsWithIgnoreCase = function(longStr, part) {return longStr.substr(0, part.length).toUpperCase() == part.toUpperCase();}
+ var maybeAddClasses = function(toWhat, spaceSeparatedClasses, uniqueId) {
+ if (uniqueId != "") $(toWhat).attr("id", uniqueId);
+ if (spaceSeparatedClasses == "") return;
+ var parts = spaceSeparatedClasses.split(/ +/);
+ for (i in parts) {
+ $(toWhat).addClass(parts[i]);
+ }
+ }
+
+ var interpretationOfSmartLanguage = function(smart, doc) {
+ var res = new Array();
+ var inSlide = null;
+ var indent = "";
+ var deepestList = null;
+ var remain = smart;
+
+ var processMath = function(content) {
+ return content.replace(/\$([^$][^$]*)\$/g, '<span class="latex">\\displaystyle $1</span>').replace(/\$\$/, '$');
+ }
+
+ var setEnrichedContent = function(what, content) {
+ content = processMath(content);
+ return what.innerHTML = content;
+ }
+ var endSlide = function() {
+ inSlide = null;
+ indent = new Array();
+ indent = "";
+ deepestList = null;
+ }
+
+ while (true) {
+ var nl = remain.indexOf("\n");
+ var line = remain.substring(0, nl).replace(/^ */, "");
+ // we iterate over the lines
+ // treat trailing unique-id and classes before anything
+ var uniqueId = "";
+ while (line.match(/^(.*)#([^\]\| >]*)$/)) {
+ uniqueId = RegExp.$2;
+ line = RegExp.$1;
+ }
+ var addClasses = "";
+ {
+ while (line.match(/^(.*)\[([^\] >]*)\]$/)) {
+ addClasses = RegExp.$2 + " " + addClasses;
+ line = RegExp.$1;
+ }
+ }
+ if (line == "") {
+ } else if (line.match(/^==(.*)==$/)) {
+ var title = RegExp.$1;
+ if (inSlide) endSlide();
+ inSlide = doc.createElement("section");
+ $(inSlide).addClass("slide");
+ maybeAddClasses(inSlide, addClasses, uniqueId);
+ var h = doc.createElement("h1");
+ setEnrichedContent(h, title);
+ inSlide.appendChild(h);
+ deepestList = inSlide;
+ res[res.length] = inSlide;
+ } else if (line.match(/^=(.*)=$/)) {
+ var title = RegExp.$1;
+ if (inSlide) endSlide();
+ inSlide = doc.createElement("section");
+ $(inSlide).addClass("slide");
+ maybeAddClasses(inSlide, addClasses, uniqueId);
+ var h = doc.createElement("h2");
+ setEnrichedContent(h, title);
+ inSlide.appendChild(h);
+ deepestList = inSlide;
+ res[res.length] = inSlide;
+ } else if (line.match(/^([-*#]+)(.*)$/)) {
+ var pref = RegExp.$1;
+ var content = RegExp.$2;
+ if (indent == "" && pref == "") {
+ // do not create the li
+ } else if (pref == indent) {
+ var li = doc.createElement("li");
+ maybeAddClasses(li, addClasses, uniqueId);
+ setEnrichedContent(li, content);
+ deepestList.appendChild(li);
+ } else {
+ // un-push as needed
+ while (! startsWith(pref, indent)) {
+ deepestList = deepestList.parentNode;
+ if (deepestList.tagName == "LI") deepestList = deepestList.parentNode;
+ indent = indent.substr(0, indent.length - 1);
+ }
+ // clean the special '-' that we can use for magic unpush
+ pref = pref.replace(/^-*/, "");
+ // re-push as needed
+ while (pref.length > indent.length) {
+ var asso = {"*": "ul", "#": "ol"};
+ var toPush = pref.substr(indent.length, 1);
+ indent = indent.concat(toPush);
+ var list = doc.createElement(asso[toPush]);
+ if ((deepestList.tagName == "UL" || deepestList.tagName == "OL") && deepestList.childNodes.length > 0) {
+ deepestList.lastChild.appendChild(list);
+ } else {
+ deepestList.appendChild(list);
+ }
+ deepestList = list;
+ }
+ if (indent == "" && pref == "") {
+ // do not create the li
+ } else {
+ var li = doc.createElement("li");
+ maybeAddClasses(li, addClasses, uniqueId);
+ setEnrichedContent(li, content);
+ deepestList.appendChild(li);
+ }
+ }
+ } else if (startsWithIgnoreCase(line, "@SVG:")) {
+ var parts = line.replace(/@SVG\: */i, "").split(/ +/);
+ var obj = $("<object type='deckjs/svg'/>");
+ $.each(parts[0].split(/,/), function(i,c){obj.addClass(c);});
+ obj.append($("<param name='src'/>").attr("value", parts[1]))
+ .append($("<param name='width'/>").attr("value", parts[2]))
+ .append($("<param name='height'/>").attr("value", parts[3]))
+ .appendTo(inSlide);
+ } else if (startsWithIgnoreCase(line, "@ANIM-PLAY:")) {
+ line = line.replace(/@ANIM-PLAY\: */i, "");
+ $("<div/>").addClass("anim-play slide").attr("data-what", line).appendTo(deepestList);
+ } else if (startsWithIgnoreCase(line, "@ANIM-PAUSE:")) {
+ line = line.replace(/@ANIM-PAUSE\: */i, "");
+ $("<div/>").addClass("anim-pause slide").attr("data-what", line).appendTo(deepestList);
+ } else if (startsWithIgnoreCase(line, "@ANIM-ATTRIBUTE:")) {
+ line = line.replace(/@ANIM-ATTRIBUTE\: */i, "");
+ var main = line.split(/ *: */);
+ $("<div/>").addClass("anim-attribute slide").attr("data-dur", main[0]).attr("data-what", main[1]).attr("data-attr", main[2]+":"+main[3]).appendTo(deepestList);
+ } else if (startsWithIgnoreCase(line, "@ANIM-APPEAR:")) {
+ line = line.replace(/@ANIM-APPEAR\: */i, "");
+ if (uniqueId != "") line += "#"+uniqueId; // restore possibly removed id
+ var main = line.split(/ *: */);
+ var dur = main[0];
+ var parts = main[1].split(/ *\| */);
+ for (i in parts) {
+ // process each group of simultaneous animations
+ var subparts = parts[i].split(/ *\+ */);
+ for (ii in subparts) {
+ var what = subparts[ii];
+ var continuating = ii != subparts.length-1;
+ var add = $("<div/>");
+ add.attr("data-dur", dur);
+ if (what[0] == '-') {
+ add.addClass("anim-hide");
+ what = what.substring(1);
+ } else if (what[0] == '@') {
+ // TODO if it looks like @....@ then the target is specified, else it is just all SVGs root elements
+ add.addClass("anim-viewboxas");
+ what = what.substring(1);
+ add.attr("data-as", what);
+ what = "svg";
+ } else {
+ add.addClass("anim-show");
+ }
+ add.addClass("slide").attr("data-what", what);
+ if (continuating) add.addClass("anim-continue");
+ add.appendTo(deepestList);
+ }
+ }
+ } else if (startsWith(line, "@<")) {
+ line = line.replace(/^@/, "");
+ var contentToAdd = "";
+ // test on remain to avoid infinite loop
+ while (line != null && remain.length != 0) {
+ if (line.match(/^@<\//)) {
+ // normal stopping condition
+ line = line.replace(/^@/, "");
+ contentToAdd += " " + line + "\n";
+ break;
+ }
+ if (nl != -1) remain = remain.substring(nl + 1);
+ contentToAdd += " " + line + "\n";
+ nl = remain.indexOf("\n");
+ line = remain.substring(0, nl).replace(/^ */, "");
+ }
+ deepestList.innerHTML = deepestList.innerHTML + processMath(contentToAdd) + " ";
+ } else {
+ while (true) {
+ try {
+ deepestList.innerHTML = deepestList.innerHTML + processMath(line) + " ";
+ break;
+ } catch (e) {
+ // TODO was ok with xhtml not really now
+ remain = remain.substring(nl + 1);
+ nl = remain.indexOf("\n");
+ var line2 = remain.substring(0, nl).replace(/^ */, "");
+ line = line + "\n" + line2;
+ }
+ }
+ }
+ if (nl != -1) remain = remain.substring(nl + 1);
+ else break;
+ }
+ return res;
+ }
+
+ // this have to be executed before the deck init
+ $d.bind('deck.beforeInit', function() {
+ $('.smart').each(function() {
+ var it = this;
+ var slides = interpretationOfSmartLanguage(it.innerHTML, document);
+ it.innerHTML = ""; // clear the smart node
+ $(it).after(slides);
+ });
+ });
+
+})(jQuery, 'deck'); \ No newline at end of file
diff --git a/deck.js/extensions/status/deck.status.css b/deck.js/extensions/status/deck.status.css
new file mode 100644
index 0000000..1188905
--- /dev/null
+++ b/deck.js/extensions/status/deck.status.css
@@ -0,0 +1,25 @@
+.deck-container .deck-status {
+ position: absolute;
+ bottom: 0px;
+ left: 0px;
+ right: 0px;
+ color: #f0f;
+ z-index: 3;
+ margin: 0;
+ padding: 4px;
+ padding-top: 8px;
+ border-top: 1px solid #eee;
+ background-color: #000;
+ font-weight: 700;
+ font-size: 1.0em;
+}
+
+body.deck-container .deck-status {
+ position: fixed;
+}
+
+@media print {
+ .deck-status {
+ display: none;
+ }
+}
diff --git a/deck.js/extensions/status/deck.status.html b/deck.js/extensions/status/deck.status.html
new file mode 100644
index 0000000..310a025
--- /dev/null
+++ b/deck.js/extensions/status/deck.status.html
@@ -0,0 +1,6 @@
+<!-- Place the following snippet at the bottom of the deck container. -->
+<p class="deck-status">
+ <span class="deck-status-current"></span>
+ /
+ <span class="deck-status-total"></span>
+</p> \ No newline at end of file
diff --git a/deck.js/extensions/status/deck.status.js b/deck.js/extensions/status/deck.status.js
new file mode 100644
index 0000000..9513c67
--- /dev/null
+++ b/deck.js/extensions/status/deck.status.js
@@ -0,0 +1,120 @@
+/*!
+Deck JS - deck.status
+Copyright (c) 2011 Caleb Troughton
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+This module adds a (current)/(total) style status indicator to the deck.
+*/
+(function($, deck, undefined) {
+ var $d = $(document),
+
+ updateCurrent = function(e, from, to) {
+ var opts = $[deck]('getOptions');
+
+ $(opts.selectors.statusCurrent).text(opts.countNested ?
+ to + 1 :
+ $[deck]('getSlide', to).data('rootSlide')
+ );
+ };
+
+ /*
+ Extends defaults/options.
+
+ options.selectors.statusCurrent
+ The element matching this selector displays the current slide number.
+
+ options.selectors.statusTotal
+ The element matching this selector displays the total number of slides.
+
+ options.countNested
+ If false, only top level slides will be counted in the current and
+ total numbers.
+ */
+ $.extend(true, $[deck].defaults, {
+ selectors: {
+ statusCurrent: '.deck-status-current',
+ statusTotal: '.deck-status-total',
+ statusFakeEnd: '.deck-status-fake-end',
+ statusFullTotal: '.deck-status-full-total'
+ },
+
+ countNested: true
+ });
+
+ $d.bind('deck.init', function() {
+ var opts = $[deck]('getOptions'),
+ slides = $[deck]('getSlides'),
+ $current = $[deck]('getSlide'),
+ ndx;
+
+ // Set total slides once
+ if (opts.countNested) {
+ var notfound = 1000000;
+ var fakeEnd = notfound;
+ $.each(slides, function(i, $el) {
+ if (fakeEnd > i) {
+ if ($el.filter(opts.selectors.statusFakeEnd).length) {
+ fakeEnd = i;
+ }
+ }
+ });
+ $(opts.selectors.statusTotal).text(fakeEnd == notfound ? slides.length : fakeEnd+1);
+ $(opts.selectors.statusFullTotal).text(slides.length);
+ }
+ else {
+ /* Determine root slides by checking each slide's ancestor tree for
+ any of the slide classes. */
+ var rootIndex = 1,
+ slideTest = $.map([
+ opts.classes.before,
+ opts.classes.previous,
+ opts.classes.current,
+ opts.classes.next,
+ opts.classes.after
+ ], function(el, i) {
+ return '.' + el;
+ }).join(', ');
+
+ /* Store the 'real' root slide number for use during slide changes. */
+ $.each(slides, function(i, $el) {
+ var $parentSlides = $el.parentsUntil(opts.selectors.container, slideTest);
+
+ $el.data('rootSlide', $parentSlides.length ?
+ $parentSlides.last().data('rootSlide') :
+ rootIndex++
+ );
+ });
+
+ var notfound = 1000000;
+ var fakeEnd = notfound;
+ var rootOfFakeEnd = null;
+ $.each(slides, function(i, $el) {
+ if (fakeEnd > i) {
+ if ($el.filter(opts.selectors.statusFakeEnd).length) {
+ fakeEnd = i;
+ rootOfFakeEnd = $el.data('rootSlide');
+ }
+ }
+ });
+
+ $(opts.selectors.statusTotal).text(fakeEnd == notfound ? rootIndex - 1 : rootOfFakeEnd);
+ $(opts.selectors.statusFullTotal).text(rootIndex - 1);
+ }
+
+ // Find where we started in the deck and set initial state
+ $.each(slides, function(i, $el) {
+ if ($el === $current) {
+ ndx = i;
+ return false;
+ }
+ });
+ updateCurrent(null, ndx, ndx);
+ })
+ /* Update current slide number with each change event */
+ .bind('deck.change', updateCurrent);
+})(jQuery, 'deck');
+
diff --git a/deck.js/extensions/status/deck.status.scss b/deck.js/extensions/status/deck.status.scss
new file mode 100755
index 0000000..d57af24
--- /dev/null
+++ b/deck.js/extensions/status/deck.status.scss
@@ -0,0 +1,22 @@
+.deck-container {
+ .deck-status {
+ position:absolute;
+ bottom:10px;
+ right:5px;
+ color:#888;
+ z-index:3;
+ margin:0;
+ }
+}
+
+body.deck-container {
+ .deck-status {
+ position:fixed;
+ }
+}
+
+@media print {
+ .deck-status {
+ display:none;
+ }
+}
diff --git a/deck.js/extensions/step/deck.step.js b/deck.js/extensions/step/deck.step.js
new file mode 100644
index 0000000..1b1ac70
--- /dev/null
+++ b/deck.js/extensions/step/deck.step.js
@@ -0,0 +1,119 @@
+/*!
+Deck JS - deck.step
+Copyright (c) 2011 Rémi Emonet
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+This module provides new methods for stepping without considering sub-slides, together with tools for finding toplevel slides etc.
+It also overrides the defaults keybinding and countNested value (so it is better to include it after "goto" and "status" extensions).
+*/
+
+(function($, deck, undefined) {
+ var $d = $(document);
+ // undo the defaults (to be sure jquery behaves properly when overriding it)
+ $.extend(true, $[deck].defaults, { keys: {next:null, previous:null}});
+ // and go on
+ $.extend(true, $[deck].defaults, {
+ selectors: {
+ subslidesToNotify: ".slide,.onshowtoplevel"
+ },
+ // Here we redefined the defaults:
+ // - we avoid counting nested slides
+ // - we keep up/down for top-level slides
+ // - we still use pgup/pgdown for inner slides as they are sent by some pluggable remote controls
+ keys: {
+ // backspace, left arrow, page down
+ previous: [8, 37, 34],
+ // enter, space, right arrow, page up
+ next: [13, 32, 39, 33],
+ // up arrow
+ previousTopLevel: [38],
+ // down arrow,
+ nextTopLevel: [40]
+ },
+ countNested: false
+ });
+ var myInArray = function(el, arr) {
+ for (i in arr) if (arr[i].is(el)) return i*1; // cast to int
+ return -1;
+ };
+ $[deck]('extend', 'getToplevelSlideOf', function(node) {
+ var opts = $[deck]('getOptions');
+ var slides = $[deck]('getSlides');
+ var last = {node: $(node), index: myInArray(node, slides)};
+ $(node).parentsUntil(opts.selectors.container).each( function(ii, v) {
+ var ind = myInArray(v, slides);
+ if (ind != -1) {
+ last = {node: $(v), index: ind};
+ }
+ });
+ return last;
+ });
+ $[deck]('extend', 'getToplevelSlideOfIndex', function(ind) {
+ return $[deck]('getToplevelSlideOf', $[deck]('getSlide', ind));
+ });
+ $[deck]('extend', 'previousTopLevelSlide', function() {
+ /* Find the real previous parent */
+ var current = $[deck]('getSlide');
+ var currentParent = $[deck]('getToplevelSlideOf', current);
+ var toGo = currentParent.index;
+ if (current.is(currentParent.node) && toGo > 0) {
+ // This is already toplevel slide, just go to the previous toplevel one (parent of the previous one)
+ toGo = $[deck]('getToplevelSlideOfIndex', toGo-1).index;
+ }
+ $[deck]('go', toGo);
+
+ });
+ $[deck]('extend', 'nextTopLevelSlide', function() {
+ /* Find the real next parent */
+ var current = $[deck]('getSlide');
+ var currentParent = $[deck]('getToplevelSlideOf', current);
+ var icur = currentParent.index;
+ for (; icur < $[deck]('getSlides').length; icur++) {
+ var cursorParent = $[deck]('getToplevelSlideOfIndex', icur).node;
+ if (!cursorParent.is(currentParent.node)) {
+ $[deck]('go', icur);
+ break;
+ }
+ }
+ });
+ $d.bind('deck.init', function() {
+ $d.unbind('keydown.decknexttoplevel').bind('keydown.decknexttoplevel', function(e) {
+ var $opts = $[deck]('getOptions');
+ var key = $opts.keys.nextTopLevel;
+ if (e.which === key || $.inArray(e.which, key) > -1) {
+ e.preventDefault();
+ $[deck]('nextTopLevelSlide');
+ }
+ });
+ $d.unbind('keydown.deckprevioustoplevel').bind('keydown.deckprevioustoplevel', function(e) {
+ var $opts = $[deck]('getOptions');
+ var key = $opts.keys.previousTopLevel;
+ if (e.which === key || $.inArray(e.which, key) > -1) {
+ e.preventDefault();
+ $[deck]('previousTopLevelSlide');
+ }
+ });
+ });
+ // When jumping (not steping), we will init the subslides (in case they are animations), in a backward order, and then fast forward necessary animations
+ var bigJump = function(from, to) {
+ var direction = "forward";
+ if (from > to){
+ direction = "reverse";
+ }
+ var opts = $[deck]('getOptions');
+ $($[deck]('getToplevelSlideOfIndex', to).node.find(opts.selectors.subslidesToNotify).get().reverse()).trigger('deck.toplevelBecameCurrent', direction);
+ for (icur = $[deck]('getToplevelSlideOfIndex', to).index + 1; icur < to+1; icur++) {
+ $[deck]('getSlides')[icur].trigger('deck.afterToplevelBecameCurrent', 'forward');
+ }
+ }
+ $d.bind('deck.change', function(e, from, to) {
+ if ( Math.abs(from - to) > 1 || ! $[deck]('getToplevelSlideOfIndex', to).node.is($[deck]('getToplevelSlideOfIndex', from).node)) {
+ // consider natural jumps and the case where we actually changed (top level) slide (even with a step)
+ bigJump(from, to);
+ }
+ });
+})(jQuery, 'deck');
diff --git a/deck.js/extensions/svg/deck.svg.js b/deck.js/extensions/svg/deck.svg.js
new file mode 100644
index 0000000..cd65c87
--- /dev/null
+++ b/deck.js/extensions/svg/deck.svg.js
@@ -0,0 +1,115 @@
+/*!
+Deck JS - deck.svg
+Copyright (c) 2012 Rémi Emonet, as a major refactor from an early version from Rémi Barraquand.
+*/
+
+/*
+This module provides a support for managed svg inclusion (allowing proper DOM access subsequently for animations, etc.).
+*/
+
+(function($, deck, undefined) {
+ var $d = $(document);
+ var may = function(f) {return f ? f : function() {}};
+
+ $.extend(true, $[deck].defaults, {
+ classes: {
+ svgPlaceholder: 'deck-svg'
+ }
+ });
+
+ /*
+ jQuery.deck('Init')
+ */
+ $d.bind('deck.init', function() {
+ var opts = $[deck]('getOptions');
+ var container = $[deck]('getContainer');
+
+ /*
+ Load parameters from an Object element
+ */
+ var loadObjectParams = function(objectElement) {
+ var attributes = {};
+ $(objectElement).children("param").each(function(index){
+ attributes[$(this).attr("name")] = $(this).attr("value");
+ });
+ return attributes;
+ }
+
+ /*
+ Return true if default params are set.
+ */
+ var validateParams = function(params) {
+ return params['src'];// && params['width'] && params['height'];// && params['animator'];
+ }
+
+ /*
+ Create SVG placeholder
+ */
+ var createSVG = function(object, attributes) {
+ var $canvas, $control, $next, $reload, $placeholder;
+
+ /* Create svg canvas */
+ $canvas = $("<div />").attr({
+ 'id': $(object).attr('id'),
+ 'class': opts.classes.svgPlaceholder + " " + $(object).attr('class')
+ }).css({
+ 'height': attributes['height'],
+ 'width': attributes['width']
+ });
+ return $canvas;
+ }
+
+
+ /* Go through all toplevel slides */
+ $($[deck]('getSlides')).each( function(i, $el) {
+ var $slide = $[deck]('getSlide', i);
+
+ /*
+ if ($slide.has("object[type='deckjs/svg']").length>0) {
+ $slide.data('animators', new Array());
+ }*/
+
+ /* Find all the object of type deckjs/svg */
+ if ($slide == null) return true;
+ $slide.find("object[type='deckjs/svg']").each(function(index, obj) {
+ //var id = $(this);
+ /* Load attributes and validate them */
+ var attributes = loadObjectParams(obj);
+ if (!validateParams(attributes) ) {
+ throw "Error while initializing "+$(obj).attr('id')+", please ensure you have setup the required parameters."
+ return false;
+ }
+
+ /* Add this animator to the list of animators of the current slide. */
+ //$slide.data('animators').push(attributes['animator']);
+
+ /* Create SVG placeholder */
+ var SVG = createSVG(obj, attributes);
+ $(obj).replaceWith(SVG);
+
+ // Finaly load the SVG data
+ //$[deck]('addLoading');
+ $[deck]("animWaitMore");
+ SVG.svg({
+ loadURL: attributes['src'],
+ onLoad: function($svg, w, h) {
+ var aa = $($svg.root());
+ if (aa.attr('viewBox') == undefined) {
+ var to = "0 0 " + w + " " + h;
+ $svg.root().setAttribute("viewBox", to);
+ aa.attr("svgViewBox", to);
+ if (attributes['stretch'] == 'true') $svg.root().setAttribute('preserveAspectRatio', "none");
+ }
+ $[deck]("animWaitLess");
+ /*
+ $[deck]('removeLoading')
+ */
+ }
+ });
+ });
+ });
+ })
+
+
+})(jQuery, 'deck');
+
diff --git a/deck.js/jquery-1.7.2.min.js b/deck.js/jquery-1.7.2.min.js
new file mode 100644
index 0000000..93adea1
--- /dev/null
+++ b/deck.js/jquery-1.7.2.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.2 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+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(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise(c)}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(
+a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9||d===11){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")[\\s/>]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f
+.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),(e===""&&f.css(d,"display")==="none"||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,"olddisplay",cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(ct("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&"expand"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),q?(f._data(this,"toggle"+i,q==="show"?"hide":"show"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?"":"px"),p!=="px"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]==="-="?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct("show",1),slideUp:ct("hide",1),slideToggle:ct("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,"fxshow"+e.prop)===b&&(e.options.hide?f._data(e.elem,"fxshow"+e.prop,e.start):e.options.show&&f._data(e.elem,"fxshow"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf("margin")&&(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position==="fixed")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position==="relative"||j.position==="static")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position==="fixed"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file
diff --git a/deck.js/libs/display-latex2.user.js b/deck.js/libs/display-latex2.user.js
new file mode 100644
index 0000000..f0bf5ab
--- /dev/null
+++ b/deck.js/libs/display-latex2.user.js
@@ -0,0 +1,2056 @@
+// This script was automatically generated from a literate source.
+// Do not edit this file; look at the literate source instead!
+//
+// Greasemonkey user script to
+// Display LaTeX in Web pages by transforming to MathML
+// --------------------------------------------------------------------
+
+// Original script by
+// Copyright (C) 2006 Steve Cheng <stevecheng@users.sourceforge.net>
+// Home page: http://gold-saucer.afraid.org/mathml/greasemonkey/
+//
+// Modified by
+// Copyright (C) 2010 Valery Alexeev <va.email.tex@gmail.com>
+// Version 1.15, May 7, 2010
+// as follows:
+//
+// Added arxiv.org, front.math.ucdavis.edu, *mathscinet*, mail.google.com
+// Changed char_map to fix the display for \mathcal, \mathbb, \mathfrak
+// Fixed the displayed formulas with $$...$$ and \[...\]
+// Added \scr, \germ, \roman, etc used by Mathscinet.
+// Added miscellaneous symbols and arrows
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALNGS IN THE SOFTWARE.
+
+
+function latex2mml() {
+
+
+ function GM_log() {}
+
+
+// First, find out where we are
+var va_loc = window.location.href;
+var va_view = 'web';
+
+//alert( 'va_view=' + va_view );
+
+// The script itself begins
+
+const mmlns = 'http://www.w3.org/1998/Math/MathML';
+
+/*
+// VA: Fix displayed equations first.
+if( va_view == 'web' ){
+ document.body.innerHTML=
+ document.body.innerHTML.replace(/\n/g," "); // remove end-of-lines
+ document.body.innerHTML=
+ document.body.innerHTML.replace(/(\$\$|\\\[)([^$]+)(\$\$|\\\])/g,
+ "<p style=\"text-indent: 20px;\"> \$ $2 \$ </p>");
+// VA: Experimental: may lead to slow down. \spcheck is used on MathSciNet
+// document.body.innerHTML=
+// document.body.innerHTML.replace(/\\spcheck/g,"^{\\vee}");
+}
+*/
+
+
+function result_element(tag, num_attrs)
+{
+ var node = document.createElementNS(mmlns, tag);
+
+ var k = 2;
+ while(--num_attrs >= 0) {
+ if(arguments[k+1] != null) {
+ node.setAttribute(arguments[k], arguments[k+1]);
+ }
+ k += 2;
+ }
+
+ for(; k < arguments.length; k++) {
+ if(arguments[k] != null) {
+ if(typeof(arguments[k]) == 'string')
+ node.appendChild(document.createTextNode(arguments[k]));
+ else
+ node.appendChild(arguments[k]);
+ }
+ }
+
+ return node;
+}
+
+
+function result_element_append(parent, child)
+{
+ if(parent != null && child != null) {
+ if(typeof(child) == 'string')
+ parent.appendChild(document.createTextNode(child));
+ else
+ parent.appendChild(child);
+ }
+}
+
+
+function result_element_prepend(parent, child, next)
+{
+ if(next == null)
+ result_element_append(parent, child);
+ else if (parent != null && child != null)
+ parent.insertBefore(child, next);
+}
+
+
+function result_set_attr(elem, attr, value)
+{
+ if(elem != null && attr != null) {
+ if(value != null)
+ elem.setAttribute(attr, value);
+ else
+ elem.removeAttribute(attr);
+ }
+}
+
+
+function result_append_attr(elem, attr, value)
+{
+ if(elem != null && attr != null) {
+ var old_value = elem.getAttribute(elem, attr);
+ if(old_value == null)
+ elem.setAttribute(attr, value);
+ else
+ elem.setAttribute(attr, old_value + value);
+ }
+}
+
+/*
+if( va_view == 'web' ){
+ if(!this.GM_getValue) {
+ this.GM_getValue = function(key, value) { return value; }
+ this.GM_log = function() {}
+ }
+
+
+ if(this.GM_registerMenuCommand) {
+ GM_registerMenuCommand("Enable native display of math images",
+ function() {
+ GM_setValue("patch-images", true);
+ do_patch_images = true;
+ patch_element(document.documentElement);
+ });
+ GM_registerMenuCommand("Disable native display of math images",
+ function() {
+ GM_setValue("patch-images", false);
+ });
+ }
+}
+*/
+
+// VA: changed char_map
+const char_map = {
+ 'script': [
+ '\uD835\uDC9C', '\u212C', '\uD835\uDC9E', //abc
+ '\uD835\uDC9F', '\u2130', '\u2131', //def
+ '\uD835\uDCA2', '\u210B', '\u2110', //ghi
+ '\uD835\uDCA5', '\uD835\uDCA6', '\u2112', //jkl
+ '\u2133', '\uD835\uDCA9', '\uD835\uDCAA', //mno
+ '\uD835\uDCAB', '\uD835\uDCAC', '\u211B', //pqr
+ '\uD835\uDCAE', '\uD835\uDCAF', '\uD835\uDCB0', //stu
+ '\uD835\uDCB1', '\uD835\uDCB2', '\uD835\uDCB3', //vwx
+ '\uD835\uDCB4', '\uD835\uDCB5' ], //yz
+
+ 'fraktur': [
+ '\uD835\uDD04', '\uD835\uDD05', '\u212D', //abc
+ '\uD835\uDD07', '\uD835\uDD08', '\uD835\uDD09', //def
+ '\uD835\uDD0A', '\u210C', '\u2111', //ghi
+ '\uD835\uDD0D', '\uD835\uDD0E', '\uD835\uDD0F', //jkl
+ '\uD835\uDD10', '\uD835\uDD11', '\uD835\uDD12', //mno
+ '\uD835\uDD13', '\uD835\uDD14', '\u211C', //pqr
+ '\uD835\uDD16', '\uD835\uDD17', '\uD835\uDD18', //stu
+ '\uD835\uDD19', '\uD835\uDD1A', '\uD835\uDD1B', //vwx
+ '\uD835\uDD1C', '\u2128' ], //yz
+
+ 'double-struck': [
+ '\uD835\uDD38', '\uD835\uDD39', '\u2102', //abc
+ '\uD835\uDD3B', '\uD835\uDD3C', '\uD835\uDD3D', //def
+ '\uD835\uDD3E', '\u210D', '\uD835\uDD40', //ghi
+ '\uD835\uDD41', '\uD835\uDD42', '\uD835\uDD43', //jkl
+ '\uD835\uDD44', '\u2115', '\uD835\uDD46', //mno
+ '\u2119', '\u211A', '\u211D', //pqr
+ '\uD835\uDD4A', '\uD835\uDD4B', '\uD835\uDD4C', //stu
+ '\uD835\uDD4D', '\uD835\uDD4E', '\uD835\uDD4F', //vwx
+ '\uD835\uDD50', '\u2124', ], //yz
+};
+
+const uppercase_re = /[A-Z]/;
+
+function fix_mathvariant(node, style)
+{
+ if(node.nodeType == node.TEXT_NODE) {
+ if(style != null && style != '' && style in char_map) {
+ node.data = node.data.replace(uppercase_re,
+ function(s) {return char_map[style][s.charCodeAt(0)-65]});
+ }
+ } else if(node.nodeType == node.ELEMENT_NODE) {
+ var new_style = node.getAttribute('mathvariant');
+ if(new_style != null && new_style != '')
+ style = new_style;
+
+ for(var i=0; i < node.childNodes.length; i++)
+ fix_mathvariant(node.childNodes.item(i), style);
+ }
+}
+
+var g_punct_and_space
+= {"\\quad" : "\u2003" ,
+"\\qquad" : "\u2003\u2003" ,
+"\\thickspace" : "\u2002" ,
+"\\;" : "\u2002" ,
+"\\medspace" : "\u2005" ,
+"\\:" : "\u2005" ,
+"\\thinspace" : "\u2004" ,
+"\\," : "\u2004" ,
+"\\!" : "\u200b" ,
+"." : "." ,
+";" : ";" ,
+"?" : "?" ,
+"\\qedsymbol" : "\u25a0" ,
+}
+;
+var g_left_delimiters
+= {"(" : "(" ,
+"[" : "[" ,
+"\\{" : "{" ,
+"\\lgroup" : "(" ,
+"\\lbrace" : "{" ,
+"\\lvert" : "|" ,
+"\\lVert" : "\u2016" ,
+"\\lceil" : "\u2308" ,
+"\\lfloor" : "\u230a" ,
+"\\lmoustache" : "\u23b0" ,
+"\\langle" : "\u2329" ,
+}
+;
+var g_right_delimiters
+= {")" : ")" ,
+"]" : "]" ,
+"\\}" : "}" ,
+"\\rbrace" : "}" ,
+"\\rgroup" : ")" ,
+"\\rvert" : "|" ,
+"\\rVert" : "\u2016" ,
+"\\rceil" : "\u2309" ,
+"\\rfloor" : "\u230b" ,
+"\\rmoustache" : "\u23b1" ,
+"\\rangle" : "\u232a" ,
+}
+;
+var g_operator_symbols
+= {"\\amalg" : "\u2a3f" ,
+"\\ast" : "*" ,
+"\\ast" : "\u2217" ,
+"\\barwedge" : "\u22bc" ,
+"\\barwedge" : "\u2305" ,
+"\\bigcirc" : "\u25cb" ,
+"\\bigtriangledown" : "\u25bd" ,
+"\\bigtriangleup" : "\u25b3" ,
+"\\boxdot" : "\u22a1" ,
+"\\boxminus" : "\u229f" ,
+"\\boxplus" : "\u229e" ,
+"\\boxtimes" : "\u22a0" ,
+"\\bullet" : "\u2022" ,
+"\\bullet" : "\u2219" ,
+"\\cap" : "\u2229" ,
+"\\Cap" : "\u22d2" ,
+"\\cdot" : "\u22c5" ,
+"\\centerdot" : "\u00b7" ,
+"\\circ" : "\u2218" ,
+"\\circledast" : "\u229b" ,
+"\\circledcirc" : "\u229a" ,
+"\\circleddash" : "\u229d" ,
+"\\cup" : "\u222a" ,
+"\\Cup" : "\u22d3" ,
+"\\curlyvee" : "\u22ce" ,
+"\\curlywedge" : "\u22cf" ,
+"\\dagger" : "\u2020" ,
+"\\ddagger" : "\u2021" ,
+"\\diamond" : "\u22c4" ,
+"\\div" : "\u00f7" ,
+"\\divideontimes" : "\u22c7" ,
+"\\dotplus" : "\u2214" ,
+"\\doublebarwedge" : "\u2306" ,
+"\\doublecap" : "\u22d2" ,
+"\\doublecup" : "\u22d3" ,
+"\\gtrdot" : "\u22d7" ,
+"\\intercal" : "\u22ba" ,
+"\\land" : "\u2227" ,
+"\\leftthreetimes" : "\u22cb" ,
+"\\lessdot" : "\u22d6" ,
+"\\lor" : "\u2228" ,
+"\\ltimes" : "\u22c9" ,
+"\\mp" : "\u2213" ,
+"\\odot" : "\u2299" ,
+"\\ominus" : "\u2296" ,
+"\\oplus" : "\u2295" ,
+"\\oslash" : "\u2298" ,
+"\\otimes" : "\u2297" ,
+"\\pm" : "\u00b1" ,
+"\\rightthreetimes" : "\u22cc" ,
+"\\rtimes" : "\u22ca" ,
+"\\setminus" : "\u2216" ,
+"\\smallsetminus" : "\u2216" ,
+"\\sqcap" : "\u2293" ,
+"\\sqcup" : "\u2294" ,
+"\\star" : "\u22c6" ,
+"\\times" : "\u00d7" ,
+"\\triangleleft" : "\u25c1" ,
+"\\triangleright" : "\u25b7" ,
+"\\uplus" : "\u228e" ,
+"\\vee" : "\u2228" ,
+"\\spcheck" : "\u207a" , // has to be ^{\vee} instead but that's hard
+ // to code
+ //"\\spcheck" : "\u002a" ,
+"\\veebar" : "\u22bb" ,
+"\\veebar" : "\u2a61" ,
+"\\wedge" : "\u2227" ,
+"\\wr" : "\u2240" ,
+"+" : "+" ,
+"-" : "\u2212" ,
+"*" : "*" ,
+"," : "," ,
+"/" : "\u2215" ,
+":" : ":" ,
+"\\colon" : ":" ,
+"|" : "|" ,
+"\\vert" : "|" ,
+"\\Vert" : "\u2016" ,
+"\\|" : "\u2016" ,
+"\\backslash" : "\\" ,
+"'" : "\u2032" ,
+"\\#" : "#" ,
+"\\bmod" : "mod" ,
+"\\mod" : "mod" ,
+"\\downarrow" : "\u2193" ,
+"\\Downarrow" : "\u21d3" ,
+"\\uparrow" : "\u2191" ,
+"\\Uparrow" : "\u21d1" ,
+"\\updownarrow" : "\u2195" ,
+"\\Updownarrow" : "\u21d5" ,
+"\\bigcap" : "\u22c2" ,
+"\\bigcup" : "\u22c3" ,
+"\\bigodot" : "\u2a00" ,
+"\\bigoplus" : "\u2a01" ,
+"\\bigotimes" : "\u2a02" ,
+"\\bigsqcup" : "\u2a06" ,
+"\\biguplus" : "\u2a04" ,
+"\\bigvee" : "\u22c1" ,
+"\\bigwedge" : "\u22c0" ,
+"\\coprod" : "\u2210" ,
+"\\prod" : "\u220f" ,
+"\\sum" : "\u2211" ,
+"\\int" : "\u222b" ,
+"\\smallint" : "\u222b" ,
+"\\oint" : "\u222e" ,
+"\\angle" : "\u2220" ,
+"\\backprime" : "\u2035" ,
+"\\bigstar" : "\u2605" ,
+"\\blacklozenge" : "\u29eb" ,
+"\\blacksquare" : "\u25a0" ,
+"\\blacktriangle" : "\u25b4" ,
+"\\blacktriangledown" : "\u25be" ,
+"\\bot" : "\u22a5" ,
+"\\clubsuit" : "\u2663" ,
+"\\diagdown" : "\u2572" ,
+"\\diagup" : "\u2571" ,
+"\\diamondsuit" : "\u2662" ,
+"\\emptyset" : "\u2205" ,
+"\\exists" : "\u2203" ,
+"\\flat" : "\u266d" ,
+"\\forall" : "\u2200" ,
+"\\heartsuit" : "\u2661" ,
+"\\infty" : "\u221e" ,
+"\\lnot" : "\u00ac" ,
+"\\lozenge" : "\u25ca" ,
+"\\measuredangle" : "\u2221" ,
+"\\nabla" : "\u2207" ,
+"\\natural" : "\u266e" ,
+"\\neg" : "\u00ac" ,
+"\\nexists" : "\u2204" ,
+"\\prime" : "\u2032" ,
+"\\sharp" : "\u266f" ,
+"\\spadesuit" : "\u2660" ,
+"\\sphericalangle" : "\u2222" ,
+"\\square" : "\u25a1" ,
+"\\surd" : "\u221a" ,
+"\\top" : "\u22a4" ,
+"\\triangle" : "\u25b5" ,
+"\\triangledown" : "\u25bf" ,
+"\\varnothing" : "\u2205" ,
+"\\aleph" : "\u2135" ,
+"\\Bbbk" : "\u1d55C" ,
+"\\beth" : "\u2136" ,
+"\\circledS" : "\u24c8" ,
+"\\complement" : "\u2201" ,
+"\\daleth" : "\u2138" ,
+"\\ell" : "\u2113" ,
+"\\eth" : "\u00f0" ,
+"\\Finv" : "\u2132" ,
+"\\Game" : "\u2141" ,
+"\\gimel" : "\u2137" ,
+"\\hbar" : "\u210f" ,
+"\\hslash" : "\u210f" ,
+"\\Im" : "\u2111" ,
+"\\mho" : "\u2127" ,
+"\\partial" : "\u2202" ,
+"\\Re" : "\u211c" ,
+"\\wp" : "\u2118" ,
+}
+;
+var g_relation_symbols
+= {"=" : "=" ,
+"<" : "<" ,
+">" : ">" ,
+"\\approx" : "\u2248" ,
+"\\approxeq" : "\u224a" ,
+"\\asymp" : "\u2248" ,
+"\\backsim" : "\u223d" ,
+"\\backsimeq" : "\u22cd" ,
+"\\bumpeq" : "\u224f" ,
+"\\Bumpeq" : "\u224e" ,
+"\\circeq" : "\u2257" ,
+"\\cong" : "\u2245" ,
+"\\curlyeqprec" : "\u22de" ,
+"\\curlyeqsucc" : "\u22df" ,
+"\\doteq" : "\u2250" ,
+"\\doteqdot" : "\u2251" ,
+"\\eqcirc" : "\u2256" ,
+"\\eqsim" : "\u2242" ,
+"\\eqslantgtr" : "\u2a96" ,
+"\\eqslantless" : "\u2a95" ,
+"\\equiv" : "\u2261" ,
+"\\fallingdotseq" : "\u2252" ,
+"\\ge" : "\u2265" ,
+"\\geq" : "\u2265" ,
+"\\geqq" : "\u2267" ,
+"\\geqslant" : "\u2a7e" ,
+"\\gg" : "\u226b" ,
+"\\gg" : "\u2aa2" ,
+"\\ggg" : "\u22d9" ,
+"\\gggtr" : "\u22d9" ,
+"\\gnapprox" : "\u2a8a" ,
+"\\gneq" : "\u2a88" ,
+"\\gneqq" : "\u2269" ,
+"\\gnsim" : "\u22e7" ,
+"\\gtrapprox" : "\u2a86" ,
+"\\gtreqless" : "\u22db" ,
+"\\gtreqqless" : "\u2a8c" ,
+"\\gtrless" : "\u2277" ,
+"\\gtrsim" : "\u2273" ,
+"\\gvertneqq" : "\u2269" ,
+"\\le" : "\u2264" ,
+"\\leq" : "\u2264" ,
+"\\leqq" : "\u2266" ,
+"\\leqslant" : "\u2a7d" ,
+"\\lessapprox" : "\u2a85" ,
+"\\lesseqgtr" : "\u22da" ,
+"\\lesseqqgtr" : "\u2a8b" ,
+"\\lessgtr" : "\u2276" ,
+"\\lesssim" : "\u2272" ,
+"\\ll" : "\u226a" ,
+"\\llless" : "\u22d8" ,
+"\\lnapprox" : "\u2a89" ,
+"\\lneq" : "\u2a87" ,
+"\\lneqq" : "\u2268" ,
+"\\lnsim" : "\u22e6" ,
+"\\lvertneqq" : "\u2268" ,
+"\\ncong" : "\u2247" ,
+"\\ne" : "\u2260" ,
+"\\neq" : "\u2260" ,
+"\\ngeq" : "\u2271" ,
+"\\ngeqq" : "\u2267" ,
+"\\ngeqslant" : "\u2a7e" ,
+"\\ngtr" : "\u226f" ,
+"\\nleq" : "\u2270" ,
+"\\nleqq" : "\u2266" ,
+"\\nleqslant" : "\u2a7d" ,
+"\\nless" : "\u226e" ,
+"\\nprec" : "\u2280" ,
+"\\npreceq" : "\u2aaf" ,
+"\\nsim" : "\u2241" ,
+"\\nsucc" : "\u2281" ,
+"\\nsucceq" : "\u2ab0" ,
+"\\prec" : "\u227a" ,
+"\\precapprox" : "\u2ab7" ,
+"\\preccurlyeq" : "\u227c" ,
+"\\preceq" : "\u2aaf" ,
+"\\precnapprox" : "\u2ab9" ,
+"\\precneqq" : "\u2ab5" ,
+"\\precnsim" : "\u22e8" ,
+"\\precsim" : "\u227e" ,
+"\\risingdotseq" : "\u2253" ,
+"\\sim" : "\u223c" ,
+"\\simeq" : "\u2243" ,
+"\\succ" : "\u227b" ,
+"\\succapprox" : "\u2ab8" ,
+"\\succcurlyeq" : "\u227d" ,
+"\\succeq" : "\u2ab0" ,
+"\\succnapprox" : "\u2aba" ,
+"\\succneqq" : "\u2ab6" ,
+"\\succnsim" : "\u22e9" ,
+"\\succsim" : "\u227f" ,
+"\\thickapprox" : "\u2248" ,
+"\\thicksim" : "\u223c" ,
+"\\triangleq" : "\u225c" ,
+"\\longrightarrow" : "\u27F6" ,
+"\\curvearrowleft" : "\u21b6" ,
+"\\curvearrowright" : "\u21b7" ,
+"\\downdownarrows" : "\u21ca" ,
+"\\downharpoonleft" : "\u21c3" ,
+"\\downharpoonright" : "\u21c2" ,
+"\\gets" : "\u2190" ,
+"\\hookleftarrow" : "\u21a9" ,
+"\\hookrightarrow" : "\u21aa" ,
+"\\leftarrow" : "\u2190" ,
+"\\Leftarrow" : "\u21d0" ,
+"\\leftarrowtail" : "\u21a2" ,
+"\\leftharpoondown" : "\u21bd" ,
+"\\leftharpoonup" : "\u21bc" ,
+"\\leftleftarrows" : "\u21c7" ,
+"\\leftrightarrow" : "\u2194" ,
+"\\leftrightarrows" : "\u21c6" ,
+"\\leftrightharpoons" : "\u21cb" ,
+"\\leftrightsquigarrow" : "\u21ad" ,
+"\\Lleftarrow" : "\u21da" ,
+"\\longleftarrow" : "\u27f5" ,
+"\\Longleftarrow" : "\u27f8" ,
+"\\longleftrightarrow" : "\u27f7" ,
+"\\Longleftrightarrow" : "\u27fa" ,
+"\\looparrowleft" : "\u21ab" ,
+"\\looparrowright" : "\u21ac" ,
+"\\Lsh" : "\u21b0" ,
+"\\mapsto" : "\u21a6" ,
+"\\multimap" : "\u22b8" ,
+"\\nearrow" : "\u2197" ,
+"\\nleftarrow" : "\u219a" ,
+"\\nLeftarrow" : "\u21cd" ,
+"\\nleftrightarrow" : "\u21ae" ,
+"\\nLeftrightarrow" : "\u21ce" ,
+"\\nrightarrow" : "\u219b" ,
+"\\nRightarrow" : "\u21cf" ,
+"\\nwarrow" : "\u2196" ,
+"\\restriction" : "\u21be" ,
+"\\rightarrow" : "\u2192" ,
+"\\Rightarrow" : "\u21d2" ,
+"\\rightarrowtail" : "\u21a3" ,
+"\\rightharpoondown" : "\u21c1" ,
+"\\rightharpoonup" : "\u21c0" ,
+"\\rightleftarrows" : "\u21c4" ,
+"\\rightleftharpoons" : "\u21cc" ,
+"\\rightrightarrows" : "\u21c9" ,
+"\\rightsquigarrow" : "\u219d" ,
+"\\Rrightarrow" : "\u21db" ,
+"\\Rsh" : "\u21b1" ,
+"\\searrow" : "\u2198" ,
+"\\swarrow" : "\u2199" ,
+"\\to" : "\u2192" ,
+"\\twoheadleftarrow" : "\u219e" ,
+"\\twoheadrightarrow" : "\u21a0" ,
+"\\upharpoonleft" : "\u21bf" ,
+"\\upharpoonright" : "\u21be" ,
+"\\upuparrows" : "\u21c8" ,
+"\\backepsilon" : "\u03f6" ,
+"\\because" : "\u2235" ,
+"\\between" : "\u226c" ,
+"\\blacktriangleleft" : "\u25c0" ,
+"\\blacktriangleright" : "\u25b6" ,
+"\\bowtie" : "\u22c8" ,
+"\\dashv" : "\u22a3" ,
+"\\frown" : "\u2323" ,
+"\\in" : "\u220a" ,
+"\\mid" : "\u2223" ,
+"\\models" : "\u22a7" ,
+"\\ni" : "\u220b" ,
+"\\ni" : "\u220d" ,
+"\\nmid" : "\u2224" ,
+"\\notin" : "\u2209" ,
+"\\nparallel" : "\u2226" ,
+"\\nshortmid" : "\u2224" ,
+"\\nshortparallel" : "\u2226" ,
+"\\nsubseteq" : "\u2286" ,
+"\\nsubseteq" : "\u2288" ,
+"\\nsubseteqq" : "\u2ac5" ,
+"\\nsupseteq" : "\u2287" ,
+"\\nsupseteq" : "\u2289" ,
+"\\nsupseteqq" : "\u2ac6" ,
+"\\ntriangleleft" : "\u22ea" ,
+"\\ntrianglelefteq" : "\u22ec" ,
+"\\ntriangleright" : "\u22eb" ,
+"\\ntrianglerighteq" : "\u22ed" ,
+"\\nvdash" : "\u22ac" ,
+"\\nvDash" : "\u22ad" ,
+"\\nVdash" : "\u22ae" ,
+"\\nVDash" : "\u22af" ,
+"\\owns" : "\u220d" ,
+"\\parallel" : "\u2225" ,
+"\\perp" : "\u22a5" ,
+"\\pitchfork" : "\u22d4" ,
+"\\propto" : "\u221d" ,
+"\\shortmid" : "\u2223" ,
+"\\shortparallel" : "\u2225" ,
+"\\smallfrown" : "\u2322" ,
+"\\smallsmile" : "\u2323" ,
+"\\smile" : "\u2323" ,
+"\\sqsubset" : "\u228f" ,
+"\\sqsubseteq" : "\u2291" ,
+"\\sqsupset" : "\u2290" ,
+"\\sqsupseteq" : "\u2292" ,
+"\\subset" : "\u2282" ,
+"\\Subset" : "\u22d0" ,
+"\\subseteq" : "\u2286" ,
+"\\subseteqq" : "\u2ac5" ,
+"\\subsetneq" : "\u228a" ,
+"\\subsetneqq" : "\u2acb" ,
+"\\supset" : "\u2283" ,
+"\\Supset" : "\u22d1" ,
+"\\supseteq" : "\u2287" ,
+"\\supseteqq" : "\u2ac6" ,
+"\\supsetneq" : "\u228b" ,
+"\\supsetneqq" : "\u2acc" ,
+"\\therefore" : "\u2234" ,
+"\\trianglelefteq" : "\u22b4" ,
+"\\trianglerighteq" : "\u22b5" ,
+"\\varpropto" : "\u221d" ,
+"\\varsubsetneq" : "\u228a" ,
+"\\varsubsetneqq" : "\u2acb" ,
+"\\varsupsetneq" : "\u228b" ,
+"\\varsupsetneqq" : "\u2acc" ,
+"\\vartriangle" : "\u25b5" ,
+"\\vartriangleleft" : "\u22b2" ,
+"\\vartriangleright" : "\u22b3" ,
+"\\vdash" : "\u22a2" ,
+"\\vDash" : "\u22a8" ,
+"\\Vdash" : "\u22a9" ,
+"\\Vvdash" : "\u22aa" ,
+// AMS Arrows
+"\\dashleftarrow" : "\u21e0" ,
+"\\dashrightarrow" : "\u21e2" ,
+}
+;
+var g_named_identifiers
+= {"\\arccos" : "arccos" ,
+"\\arcsin" : "arcsin" ,
+"\\arctan" : "arctan" ,
+"\\arg" : "arg" ,
+"\\cos" : "cos" ,
+"\\cosh" : "cosh" ,
+"\\cot" : "cot" ,
+"\\coth" : "coth" ,
+"\\csc" : "csc" ,
+"\\deg" : "deg" ,
+"\\det" : "det" ,
+"\\dim" : "dim" ,
+"\\exp" : "exp" ,
+"\\gcd" : "gcd" ,
+"\\hom" : "hom" ,
+"\\ker" : "ker" ,
+"\\lg" : "lg" ,
+"\\ln" : "ln" ,
+"\\log" : "log" ,
+"\\Pr" : "Pr" ,
+"\\sec" : "sec" ,
+"\\sin" : "sin" ,
+"\\sinh" : "sinh" ,
+"\\tan" : "tan" ,
+"\\tanh" : "tanh" ,
+"\\inf" : "inf" ,
+"\\injlim" : "inj lim" ,
+"\\lim" : "lim" ,
+"\\liminf" : "lim inf" ,
+"\\limsup" : "lum sup" ,
+"\\max" : "max" ,
+"\\min" : "min" ,
+"\\projlim" : "proj lim" ,
+"\\sup" : "sup" ,
+"\\alpha" : "\u03b1" ,
+"\\beta" : "\u03b2" ,
+"\\chi" : "\u03c7" ,
+"\\delta" : "\u03b4" ,
+"\\Delta" : "\u0394" ,
+"\\digamma" : "\u03dd" ,
+"\\epsilon" : "\u03f5" ,
+"\\eta" : "\u03b7" ,
+"\\gamma" : "\u03b3" ,
+"\\Gamma" : "\u0393" ,
+"\\iota" : "\u03b9" ,
+"\\kappa" : "\u03ba" ,
+"\\lambda" : "\u03bb" ,
+"\\Lambda" : "\u039b" ,
+"\\mu" : "\u03bc" ,
+"\\nu" : "\u03bd" ,
+"\\omega" : "\u03c9" ,
+"\\Omega" : "\u03a9" ,
+"\\phi" : "\u03c6" ,
+"\\Phi" : "\u03a6" ,
+"\\pi" : "\u03c0" ,
+"\\Pi" : "\u03a0" ,
+"\\psi" : "\u03c8" ,
+"\\Psi" : "\u03a8" ,
+"\\rho" : "\u03c1" ,
+"\\sigma" : "\u03c3" ,
+"\\Sigma" : "\u03a3" ,
+"\\tau" : "\u03c4" ,
+"\\theta" : "\u03b8" ,
+"\\Theta" : "\u0398" ,
+"\\upsilon" : "\u03c5" ,
+"\\Upsilon" : "\u03d2" ,
+"\\varepsilon" : "\u03b5" ,
+"\\varkappa" : "\u03f0" ,
+"\\varphi" : "\u03d5" ,
+"\\varpi" : "\u03d6" ,
+"\\varrho" : "\u03f1" ,
+"\\varsigma" : "\u03c2" ,
+"\\vartheta" : "\u03d1" ,
+"\\xi" : "\u03be" ,
+"\\Xi" : "\u039e" ,
+"\\zeta" : "\u03b6" ,
+"a" : "a" ,
+"b" : "b" ,
+"c" : "c" ,
+"d" : "d" ,
+"e" : "e" ,
+"f" : "f" ,
+"g" : "g" ,
+"h" : "h" ,
+"i" : "i" ,
+"j" : "j" ,
+"k" : "k" ,
+"l" : "l" ,
+"m" : "m" ,
+"n" : "n" ,
+"o" : "o" ,
+"p" : "p" ,
+"q" : "q" ,
+"r" : "r" ,
+"s" : "s" ,
+"t" : "t" ,
+"u" : "u" ,
+"v" : "v" ,
+"w" : "w" ,
+"x" : "x" ,
+"y" : "y" ,
+"z" : "z" ,
+"A" : "A" ,
+"B" : "B" ,
+"C" : "C" ,
+"D" : "D" ,
+"E" : "E" ,
+"F" : "F" ,
+"G" : "G" ,
+"H" : "H" ,
+"I" : "I" ,
+"J" : "J" ,
+"K" : "K" ,
+"L" : "L" ,
+"M" : "M" ,
+"N" : "N" ,
+"O" : "O" ,
+"P" : "P" ,
+"Q" : "Q" ,
+"R" : "R" ,
+"S" : "S" ,
+"T" : "T" ,
+"U" : "U" ,
+"V" : "V" ,
+"W" : "W" ,
+"X" : "X" ,
+"Y" : "Y" ,
+"Z" : "Z" ,
+"\\vdots" : "\u22ee" ,
+"\\hdots" : "\u2026" ,
+"\\ldots" : "\u2026" ,
+"\\dots" : "\u2026" ,
+"\\cdots" : "\u00b7\u00b7\u00b7" ,
+"\\dotsb" : "\u00b7\u00b7\u00b7" ,
+"\\dotsc" : "\u2026" ,
+"\\dotsi" : "\u22c5\u22c5\u22c5" ,
+"\\dotsm" : "\u22c5\u22c5\u22c5" ,
+"\\dotso" : "\u2026" ,
+"\\ddots" : "\u22f1" ,
+ // Common abbreviation for \mathbb letters
+"\\A" : "\uD835\uDD38" ,
+"\\bA" : "\uD835\uDD38" ,
+"\\B" : "\uD835\uDD39" ,
+"\\bB" : "\uD835\uDD39" ,
+"\\C" : "\u2102" ,
+"\\bC" : "\u2102" ,
+"\\D" : "\uD835\uDD3B" ,
+"\\bD" : "\uD835\uDD3B" ,
+"\\E" : "\uD835\uDD3C" ,
+"\\bE" : "\uD835\uDD3C" ,
+"\\F" : "\uD835\uDD3D" ,
+"\\bF" : "\uD835\uDD3D" ,
+"\\G" : "\uD835\uDD3E" ,
+"\\bG" : "\uD835\uDD3E" ,
+"\\H" : "\u210D" ,
+"\\bH" : "\u210D" ,
+"\\I" : "\uD835\uDD40" ,
+"\\bI" : "\uD835\uDD40" ,
+"\\J" : "\uD835\uDD41" ,
+"\\bJ" : "\uD835\uDD41" ,
+"\\K" : "\uD835\uDD42" ,
+"\\bK" : "\uD835\uDD42" ,
+"\\L" : "\uD835\uDD43" ,
+"\\bL" : "\uD835\uDD43" ,
+"\\M" : "\uD835\uDD44" ,
+"\\bM" : "\uD835\uDD44" ,
+"\\N" : "\u2115" ,
+"\\bN" : "\u2115" ,
+"\\O" : "\uD835\uDD46" ,
+"\\bO" : "\uD835\uDD46" ,
+"\\P" : "\u2119" ,
+"\\bP" : "\u2119" ,
+"\\Q" : "\u211A" ,
+"\\bQ" : "\u211A" ,
+"\\R" : "\u211D" ,
+"\\bR" : "\u211D" ,
+"\\S" : "\uD835\uDD4A" ,
+"\\bS" : "\uD835\uDD4A" ,
+"\\T" : "\uD835\uDD4B" ,
+"\\bT" : "\uD835\uDD4B" ,
+"\\U" : "\uD835\uDD4C" ,
+"\\bU" : "\uD835\uDD4C" ,
+"\\V" : "\uD835\uDD4D" ,
+"\\bV" : "\uD835\uDD4D" ,
+"\\W" : "\uD835\uDD4E" ,
+"\\bW" : "\uD835\uDD4E" ,
+"\\X" : "\uD835\uDD4F" ,
+"\\bX" : "\uD835\uDD4F" ,
+"\\Y" : "\uD835\uDD50" ,
+"\\bY" : "\uD835\uDD50" ,
+"\\Z" : "\u2124" ,
+"\\bZ" : "\u2124" ,
+ // Common abbreviations for \mathcal letters
+"\\cA" : "\uD835\uDC9C" ,
+"\\cB" : "\u212C" ,
+"\\cC" : "\uD835\uDC9E" ,
+"\\cD" : "\uD835\uDC9F" ,
+"\\cE" : "\u2130" ,
+"\\cF" : "\u2131" ,
+"\\cG" : "\uD835\uDCA2" ,
+"\\cH" : "\u210B" ,
+"\\cI" : "\u2110" ,
+"\\cJ" : "\uD835\uDCA5" ,
+"\\cK" : "\uD835\uDCA6" ,
+"\\cL" : "\u2112" ,
+"\\cM" : "\u2133" ,
+"\\cN" : "\uD835\uDCA9" ,
+"\\cO" : "\uD835\uDCAA" ,
+"\\OO" : "\uD835\uDCAA" ,
+"\\cP" : "\uD835\uDCAB" ,
+"\\cQ" : "\uD835\uDCAC" ,
+"\\cR" : "\u211B" ,
+"\\cS" : "\uD835\uDCAE" ,
+"\\cT" : "\uD835\uDCAF" ,
+"\\cU" : "\uD835\uDCB0" ,
+"\\cV" : "\uD835\uDCB1" ,
+"\\cW" : "\uD835\uDCB2" ,
+"\\cX" : "\uD835\uDCB3" ,
+"\\cY" : "\uD835\uDCB4" ,
+"\\cZ" : "\uD835\uDCB5" ,
+ // Common operators
+ "\\Pic" : "Pic" ,
+ "\\Spec" : "Spec" ,
+ "\\Proj" : "Proj" ,
+ // Misc
+"\\eps" : "\u03f5" ,
+}
+;
+var g_word_operators
+= {"\\arccos" : "arccos" ,
+"\\arcsin" : "arcsin" ,
+"\\arctan" : "arctan" ,
+"\\arg" : "arg" ,
+"\\cos" : "cos" ,
+"\\cosh" : "cosh" ,
+"\\cot" : "cot" ,
+"\\coth" : "coth" ,
+"\\csc" : "csc" ,
+"\\deg" : "deg" ,
+"\\det" : "det" ,
+"\\dim" : "dim" ,
+"\\exp" : "exp" ,
+"\\gcd" : "gcd" ,
+"\\hom" : "hom" ,
+"\\ker" : "ker" ,
+"\\lg" : "lg" ,
+"\\ln" : "ln" ,
+"\\log" : "log" ,
+"\\Pr" : "Pr" ,
+"\\sec" : "sec" ,
+"\\sin" : "sin" ,
+"\\sinh" : "sinh" ,
+"\\tan" : "tan" ,
+"\\tanh" : "tanh" ,
+}
+;
+var g_big_word_operators
+= {"\\inf" : "inf" ,
+"\\injlim" : "inj lim" ,
+"\\lim" : "lim" ,
+"\\liminf" : "lim inf" ,
+"\\limsup" : "lum sup" ,
+"\\max" : "max" ,
+"\\min" : "min" ,
+"\\projlim" : "proj lim" ,
+"\\sup" : "sup" ,
+}
+;
+var g_greek_letters
+= {"\\alpha" : "\u03b1" ,
+"\\beta" : "\u03b2" ,
+"\\chi" : "\u03c7" ,
+"\\delta" : "\u03b4" ,
+"\\Delta" : "\u0394" ,
+"\\digamma" : "\u03dd" ,
+"\\epsilon" : "\u03f5" ,
+"\\eta" : "\u03b7" ,
+"\\gamma" : "\u03b3" ,
+"\\Gamma" : "\u0393" ,
+"\\iota" : "\u03b9" ,
+"\\kappa" : "\u03ba" ,
+"\\lambda" : "\u03bb" ,
+"\\Lambda" : "\u039b" ,
+"\\mu" : "\u03bc" ,
+"\\nu" : "\u03bd" ,
+"\\omega" : "\u03c9" ,
+"\\Omega" : "\u03a9" ,
+"\\phi" : "\u03c6" ,
+"\\Phi" : "\u03a6" ,
+"\\pi" : "\u03c0" ,
+"\\Pi" : "\u03a0" ,
+"\\psi" : "\u03c8" ,
+"\\Psi" : "\u03a8" ,
+"\\rho" : "\u03c1" ,
+"\\sigma" : "\u03c3" ,
+"\\Sigma" : "\u03a3" ,
+"\\tau" : "\u03c4" ,
+"\\theta" : "\u03b8" ,
+"\\Theta" : "\u0398" ,
+"\\upsilon" : "\u03c5" ,
+"\\Upsilon" : "\u03d2" ,
+"\\varepsilon" : "\u03b5" ,
+"\\varkappa" : "\u03f0" ,
+"\\varphi" : "\u03d5" ,
+"\\varpi" : "\u03d6" ,
+"\\varrho" : "\u03f1" ,
+"\\varsigma" : "\u03c2" ,
+"\\vartheta" : "\u03d1" ,
+"\\xi" : "\u03be" ,
+"\\Xi" : "\u039e" ,
+"\\zeta" : "\u03b6" ,
+}
+;
+function v_fraction_to_mathml (tokens ) {
+ var v_numerator = v_piece_to_mathml (tokens ) ;
+ var v_denominator = v_piece_to_mathml (tokens ) ;
+ return result_element( "mfrac" ,0 , v_numerator , v_denominator ) ;
+}
+function v_binom_to_mathml (tokens ) {
+ var v_top = v_piece_to_mathml (tokens ) ;
+ var v_bottom = v_piece_to_mathml (tokens ) ;
+ return result_element( "mrow" ,0 , result_element( "mo" ,0 , "(" ) , result_element( "mfrac" , 1
+, "linethickness" , "0" , v_top , v_bottom ) , result_element( "mo" ,0 , ")" ) ) ;
+}
+function v_sqrt_to_mathml (tokens ) {
+ var v_index = v_optional_arg_to_mathml (tokens ) ;
+ var v_object = v_piece_to_mathml (tokens ) ;
+ if( ( v_index != null ) ) {
+ return result_element( "mroot" ,0 , v_object , v_index ) ;
+ }
+ else {
+ return result_element( "msqrt" ,0 , v_object ) ;
+ }
+}
+function v_parenthesized_operator (tokens , v_word ) {
+ var v_object = v_piece_to_mathml (tokens ) ;
+ if( ( v_word != null ) ) {
+ return result_element( "mrow" ,0 , result_element( "mo" ,0 , "(" ) , result_element( "mo" ,0 , v_word ) , v_object , result_element( "mo" ,0 , ")" ) ) ;
+ }
+ else {
+ return result_element( "mrow" ,0 , result_element( "mo" ,0 , "(" ) , v_object , result_element( "mo" ,0 , ")" ) ) ;
+ }
+}
+function v_operatorname_to_mathml (tokens ) {
+ var v_result = result_element( "mo" ,0 , tokens.list[tokens.index] ) ;
+ tokens.index++;
+ return v_result ;
+}
+function v_displaystyle_to_mathml (tokens ) {
+ var v_result = v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
+) ;
+ return result_element( "mstyle" , 2
+, "displaystyle" , "true" , "scriptlevel" , "0" , v_result ) ;
+}
+function v_displaymath_to_mathml (tokens ) {
+ var v_result = v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
+) ;
+ v_finish_latex_block (tokens );
+ return result_element( "mstyle" , 2
+, "displaystyle" , "true" , "scriptlevel" , "0" , v_result ) ;
+}
+function v_font_to_mathml (tokens , v_font_name ) {
+ if( ( tokens.list[tokens.index] != "{" ) ) {
+ var v_result = result_element( "mi" , 1
+, "mathvariant" , v_font_name , tokens.list[tokens.index] ) ;
+ if( ( v_font_name == "normal" ) ) {
+ result_set_attr(
+v_result , "fontstyle" , "normal" );
+ }
+ tokens.index++;
+ return v_result ;
+ }
+ else {
+ var v_result = v_piece_to_mathml (tokens ) ;
+ result_set_attr(
+v_result , "mathvariant" , v_font_name );
+ if( ( v_font_name == "normal" ) ) {
+ result_set_attr(
+v_result , "fontstyle" , "normal" );
+ }
+ return v_result ;
+ }
+}
+function v_old_font_to_mathml (tokens , v_font_name ) {
+ return result_element( "mstyle" , 2
+, "mathvariant" , v_font_name , "fontstyle" , ( ( v_font_name == "normal" ) ? "normal" : null ) , v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
+) ) ;
+}
+function v_size_to_mathml (tokens , v_min_size , v_max_size ) {
+ var v_result = v_piece_to_mathml (tokens ) ;
+ result_set_attr(
+v_result , "minsize" , v_min_size );
+ result_set_attr(
+v_result , "maxsize" , v_max_size );
+ return v_result ;
+}
+function v_accent_to_mathml (tokens , v_char ) {
+ return result_element( "mover" , 1
+, "accent" , "true" , v_piece_to_mathml (tokens ) , result_element( "mo" ,0 , v_char ) ) ;
+}
+function v_matrix_to_mathml (tokens , v_open_delim , v_close_delim ) {
+ var v_mtable = v_matrix_to_mtable (tokens , result_element( "mtable" ,0) ) ;
+ if( ( ( v_open_delim != null ) || ( v_close_delim != null ) ) ) {
+ var v_mrow = result_element( "mrow" ,0) ;
+ if( ( v_open_delim != null ) ) {
+ result_element_append( v_mrow , result_element( "mo" ,0 , v_open_delim ) );
+ }
+ result_element_append( v_mrow , v_mtable );
+ if( ( v_close_delim != null ) ) {
+ result_element_append( v_mrow , result_element( "mo" ,0 , v_close_delim ) );
+ }
+ return v_mrow ;
+ }
+ else {
+ return v_mtable ;
+ }
+}
+function v_array_to_mathml (tokens ) {
+ var v_mtable = result_element( "mtable" ,0) ;
+ if( ( tokens.list[tokens.index] == "{" ) ) {
+ tokens.index++;
+ while( ( ( tokens.list[tokens.index] != null ) && ( tokens.list[tokens.index] != "}" ) ) ) {
+ if( ( tokens.list[tokens.index] == "c" ) ) {
+ result_append_attr(
+v_mtable , "columnalign" , "center " );
+ }
+ else if( ( tokens.list[tokens.index] == "l" ) ) {
+ result_append_attr(
+v_mtable , "columnalign" , "left " );
+ }
+ else if( ( tokens.list[tokens.index] == "r" ) ) {
+ result_append_attr(
+v_mtable , "columnalign" , "right " );
+ }
+ tokens.index++;
+ }
+ if( ( tokens.list[tokens.index] != null ) ) {
+ tokens.index++;
+ }
+ }
+ return v_matrix_to_mtable (tokens , v_mtable ) ;
+}
+function v_matrix_to_mtable (tokens , v_mtable ) {
+ var v_mtr = result_element( "mtr" ,0) ;
+ var v_mtd = result_element( "mtd" ,0) ;
+ var v_token = tokens.list[tokens.index] ;
+ result_element_append( v_mtable , v_mtr );
+ result_element_append( v_mtr , v_mtd );
+ while( ( ( v_token != null ) && ( v_token != "\\end" ) ) ) {
+ if( ( v_token == "\\\\" ) ) {
+ v_mtr = result_element( "mtr" ,0) ;
+ v_mtd = result_element( "mtd" ,0) ;
+ result_element_append( v_mtable , v_mtr );
+ result_element_append( v_mtr , v_mtd );
+ tokens.index++;
+ }
+ else if( ( v_token == "&" ) ) {
+ v_mtd = result_element( "mtd" ,0) ;
+ result_element_append( v_mtr , v_mtd );
+ tokens.index++;
+ }
+ else {
+ result_element_append( v_mtd , v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
+) );
+ }
+ v_token = tokens.list[tokens.index] ;
+ }
+ v_finish_latex_block (tokens );
+ return v_mtable ;
+}
+function v_over_to_mathml (tokens , v_char ) {
+ return result_element( "mover" ,0 , v_piece_to_mathml (tokens ) , result_element( "mo" ,0 , v_char ) ) ;
+}
+function v_under_to_mathml (tokens , v_char ) {
+ return result_element( "munder" ,0 , v_piece_to_mathml (tokens ) , result_element( "mo" ,0 , v_char ) ) ;
+}
+function v_delimiter_to_mathml (tokens , v_end_command , v_min_size , v_max_size ) {
+ var v_mrow = result_element( "mrow" ,0) ;
+ result_element_append( v_mrow , result_element( "mo" , 2
+, "minsize" , v_min_size , "maxsize" , v_max_size , v_read_delimiter (tokens ) ) );
+ result_element_append( v_mrow , v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
+) );
+ if( ( tokens.list[tokens.index] != v_end_command ) ) {
+ return v_mrow ;
+ }
+ tokens.index++;
+ result_element_append( v_mrow , result_element( "mo" , 2
+, "minsize" , v_min_size , "maxsize" , v_max_size , v_read_delimiter (tokens ) ) );
+ return v_mrow ;
+}
+function v_read_delimiter (tokens ) {
+ var v_token = tokens.list[tokens.index] ;
+ if( ( v_token == null ) ) {
+ throw "unexpected eof" ;
+ }
+ else if( ( v_token == "." ) ) {
+ tokens.index++;
+ return "" ;
+ }
+ else if( ( v_token == "<" ) ) {
+ tokens.index++;
+ return "\u2329" ;
+ }
+ else if( ( v_token == ">" ) ) {
+ tokens.index++;
+ return "\u232a" ;
+ }
+ else if( ( v_token in g_punct_and_space
+) ) {
+ tokens.index++;
+ return g_punct_and_space
+[ v_token ] ;
+ }
+ else if( ( v_token in g_left_delimiters
+) ) {
+ tokens.index++;
+ return g_left_delimiters
+[ v_token ] ;
+ }
+ else if( ( v_token in g_right_delimiters
+) ) {
+ tokens.index++;
+ return g_right_delimiters
+[ v_token ] ;
+ }
+ else if( ( v_token in g_operator_symbols
+) ) {
+ tokens.index++;
+ return g_operator_symbols
+[ v_token ] ;
+ }
+ else {
+ throw "invalid delimiter" ;
+ }
+}
+function v_latex_block_to_mathml (tokens ) {
+ v_cmd = tokens.list[tokens.index] ;
+ if( ( v_cmd in g_tex_environments
+) ) {
+ tokens.index++;
+ return g_tex_environments
+[ v_cmd ] (tokens ) ;
+ }
+ else {
+ throw "unknown command" ;
+ }
+}
+function v_finish_latex_block (tokens ) {
+ if( ( tokens.list[tokens.index] == null ) ) {
+ throw "unexpected eof" ;
+ }
+ tokens.index++;
+ tokens.index++;
+}
+function v_combining_to_mathml (tokens , v_char ) {
+ var v_base = tokens.list[tokens.index] ;
+ tokens.index++;
+ return result_element( "mo" ,0 , v_base , v_char ) ;
+}
+var g_char_escape_codes
+= {"93" : "#" ,
+}
+;
+function v_char_escape_to_mathml (tokens ) {
+ var v_result = null ;
+ if( ( tokens.list[tokens.index] in g_char_escape_codes
+) ) {
+ v_result = result_element( "mtext" ,0 , g_char_escape_codes
+[ tokens.list[tokens.index] ] ) ;
+ }
+ else {
+ v_result = result_element( "merror" ,0 , "\\char" , tokens.list[tokens.index] ) ;
+ }
+ tokens.index++;
+ return v_result ;
+}
+function v_text_to_mathml (tokens ) {
+ if( ( tokens.list[tokens.index] != "{" ) ) {
+ var v_result = result_element( "mtext" ,0 , tokens.list[tokens.index] ) ;
+ tokens.index++;
+ return v_result ;
+ }
+ tokens.index++;
+ var v_result = null ;
+ var v_mrow = null ;
+ var v_node = null ;
+ while( ( tokens.list[tokens.index] != null ) ) {
+ if( ( tokens.list[tokens.index] == "}" ) ) {
+ tokens.index++;
+ return v_result ;
+ }
+ else if( ( tokens.list[tokens.index] == "$" ) ) {
+ tokens.index++;
+ v_node = v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
+) ;
+ tokens.index++;
+ }
+ else {
+ v_node = result_element( "mtext" ,0 , tokens.list[tokens.index] ) ;
+ tokens.index++;
+ }
+ if( ( v_mrow != null ) ) {
+ result_element_append( v_mrow , v_node );
+ }
+ else if( ( v_result != null ) ) {
+ v_mrow = result_element( "mrow" ,0 , v_result , v_node ) ;
+ v_result = v_mrow ;
+ }
+ else {
+ v_result = v_node ;
+ }
+ }
+ return v_result ;
+}
+var g_tex_commands
+= {
+"\\frac" : v_fraction_to_mathml ,
+"\\dfrac" : v_fraction_to_mathml ,
+"\\tfrac" : v_fraction_to_mathml ,
+"\\binom" : v_binom_to_mathml ,
+"\\sqrt" : v_sqrt_to_mathml ,
+"\\operatorname" : v_operatorname_to_mathml ,
+"\\displaystyle" : v_displaystyle_to_mathml ,
+"\\pod" : function(tokens ) {return v_parenthesized_operator (tokens , null ) ;} ,
+"\\pmod" : function(tokens ) {return v_parenthesized_operator (tokens , "mod" ) ;} ,
+"\\boldsymbol" : function(tokens ) {return v_font_to_mathml (tokens , "bold" ) ;} ,
+"\\bold" : function(tokens ) {return v_font_to_mathml (tokens , "bold" ) ;} ,
+"\\Bbb" : function(tokens ) {return v_font_to_mathml (tokens , "double-struck" ) ;} ,
+"\\mathbb" : function(tokens ) {return v_font_to_mathml (tokens , "double-struck" ) ;} ,
+"\\mathbbmss" : function(tokens ) {return v_font_to_mathml (tokens , "double-struck" ) ;} ,
+"\\mathbf" : function(tokens ) {return v_font_to_mathml (tokens , "bold" ) ;} ,
+"\\mathop" : function(tokens ) {return v_font_to_mathml (tokens , "normal" ) ;} ,
+"\\mathopen" : function(tokens ) {return v_font_to_mathml (tokens , "normal" ) ;} ,
+"\\mathclose" : function(tokens ) {return v_font_to_mathml (tokens , "normal" ) ;} ,
+"\\mathrm" : function(tokens ) {return v_font_to_mathml (tokens , "normal" ) ;} ,
+"\\mathfrak" : function(tokens ) {return v_font_to_mathml (tokens , "fraktur" ) ;} ,
+"\\germ" : function(tokens ) {return v_font_to_mathml (tokens , "fraktur" ) ;} ,
+"\\mathit" : function(tokens ) {return v_font_to_mathml (tokens , "italic" ) ;} ,
+"\\mathscr" : function(tokens ) {return v_font_to_mathml (tokens , "script" ) ;} ,
+"\\scr" : function(tokens ) {return v_font_to_mathml (tokens , "script" ) ;} ,
+"\\mathcal" : function(tokens ) {return v_font_to_mathml (tokens , "script" ) ;} ,
+"\\mathsf" : function(tokens ) {return v_font_to_mathml (tokens , "sans-serif" ) ;} ,
+"\\mathtt" : function(tokens ) {return v_font_to_mathml (tokens , "monospace" ) ;} ,
+"\\EuScript" : function(tokens ) {return v_font_to_mathml (tokens , "script" ) ;} ,
+"\\bf" : function(tokens ) {return v_old_font_to_mathml (tokens , "bold" ) ;} ,
+"\\rm" : function(tokens ) {return v_old_font_to_mathml (tokens , "normal" ) ;} ,
+"\\roman" : function(tokens ) {return v_old_font_to_mathml (tokens , "normal" ) ;} ,
+"\\tag" : function(tokens ) {return v_old_font_to_mathml (tokens , "bold" ) ;} ,
+"\\big" : function(tokens ) {return v_size_to_mathml (tokens , "2" , "2" ) ;} ,
+"\\Big" : function(tokens ) {return v_size_to_mathml (tokens , "3" , "3" ) ;} ,
+"\\bigg" : function(tokens ) {return v_size_to_mathml (tokens , "4" , "4" ) ;} ,
+"\\Bigg" : function(tokens ) {return v_size_to_mathml (tokens , "5" , "5" ) ;} ,
+"\\acute" : function(tokens ) {return v_accent_to_mathml (tokens , "\u0301" ) ;} ,
+"\\grave" : function(tokens ) {return v_accent_to_mathml (tokens , "\u0300" ) ;} ,
+"\\tilde" : function(tokens ) {return v_accent_to_mathml (tokens , "\u0303" ) ;} ,
+"\\bar" : function(tokens ) {return v_accent_to_mathml (tokens , "\u0304" ) ;} ,
+"\\breve" : function(tokens ) {return v_accent_to_mathml (tokens , "\u0306" ) ;} ,
+"\\check" : function(tokens ) {return v_accent_to_mathml (tokens , "\u030c" ) ;} ,
+"\\hat" : function(tokens ) {return v_accent_to_mathml (tokens , "\u0302" ) ;} ,
+"\\vec" : function(tokens ) {return v_accent_to_mathml (tokens , "\u20d7" ) ;} ,
+"\\dot" : function(tokens ) {return v_accent_to_mathml (tokens , "\u0307" ) ;} ,
+"\\ddot" : function(tokens ) {return v_accent_to_mathml (tokens , "\u0308" ) ;} ,
+"\\dddot" : function(tokens ) {return v_accent_to_mathml (tokens , "\u20db" ) ;} ,
+"\\underbrace" : function(tokens ) {return v_under_to_mathml (tokens , "\ufe38" ) ;} ,
+"\\overbrace" : function(tokens ) {return v_over_to_mathml (tokens , "\ufe37" ) ;} ,
+"\\underline" : function(tokens ) {return v_under_to_mathml (tokens , "\u0332" ) ;} ,
+"\\overline" : function(tokens ) {return v_over_to_mathml (tokens , "\u00af" ) ;} ,
+"\\widetilde" : function(tokens ) {return v_over_to_mathml (tokens , "\u0303" ) ;} ,
+"\\widehat" : function(tokens ) {return v_over_to_mathml (tokens , "\u0302" ) ;} ,
+"\\not" : function(tokens ) {return v_combining_to_mathml (tokens , "\u0338" ) ;} ,
+"\\left" : function(tokens ) {return v_delimiter_to_mathml (tokens , "\\right" , "1" , null ) ;} ,
+"\\bigl" : function(tokens ) {return v_delimiter_to_mathml (tokens , "\\bigr" , "2" , "2" ) ;} ,
+"\\Bigl" : function(tokens ) {return v_delimiter_to_mathml (tokens , "\\Bigr" , "3" , "3" ) ;} ,
+"\\biggl" : function(tokens ) {return v_delimiter_to_mathml (tokens , "\\biggr" , "4" , "4" ) ;} ,
+"\\Biggl" : function(tokens ) {return v_delimiter_to_mathml (tokens , "\\Biggr" , "5" , "5" ) ;} ,
+"\\char" : v_char_escape_to_mathml ,
+"\\!" : function(tokens ) {return null ;} ,
+"\\text" : v_text_to_mathml ,
+"\\textnormal" : v_text_to_mathml ,
+"\\textrm" : v_text_to_mathml ,
+"\\textsl" : v_text_to_mathml ,
+"\\textit" : v_text_to_mathml ,
+"\\texttt" : v_text_to_mathml ,
+"\\textbf" : v_text_to_mathml ,
+"\\hbox" : v_text_to_mathml ,
+"\\mbox" : v_text_to_mathml ,
+"\\begin" : v_latex_block_to_mathml ,
+}
+;
+var g_tex_environments
+= {"smallmatrix" : function(tokens ) {return v_matrix_to_mathml (tokens , "(" , ")" ) ;} ,
+"pmatrix" : function(tokens ) {return v_matrix_to_mathml (tokens , "(" , ")" ) ;} ,
+"bmatrix" : function(tokens ) {return v_matrix_to_mathml (tokens , "[" , "]" ) ;} ,
+"Bmatrix" : function(tokens ) {return v_matrix_to_mathml (tokens , "{" , "}" ) ;} ,
+"vmatrix" : function(tokens ) {return v_matrix_to_mathml (tokens , "|" , "|" ) ;} ,
+"Vmatrix" : function(tokens ) {return v_matrix_to_mathml (tokens , "\u2016" , "\u2016" ) ;} ,
+"cases" : function(tokens ) {return v_matrix_to_mathml (tokens , "{" , null ) ;} ,
+"array" : v_array_to_mathml ,
+"displaymath" : v_displaymath_to_mathml ,
+}
+;
+var g_limit_commands
+= {"\\bigcap" : "\u22c2" ,
+"\\bigcup" : "\u22c3" ,
+"\\bigodot" : "\u2a00" ,
+"\\bigoplus" : "\u2a01" ,
+"\\bigotimes" : "\u2a02" ,
+"\\bigsqcup" : "\u2a06" ,
+"\\biguplus" : "\u2a04" ,
+"\\bigvee" : "\u22c1" ,
+"\\bigwedge" : "\u22c0" ,
+"\\coprod" : "\u2210" ,
+"\\prod" : "\u220f" ,
+"\\sum" : "\u2211" ,
+"\\inf" : "inf" ,
+"\\injlim" : "inj lim" ,
+"\\lim" : "lim" ,
+"\\liminf" : "lim inf" ,
+"\\limsup" : "lum sup" ,
+"\\max" : "max" ,
+"\\min" : "min" ,
+"\\projlim" : "proj lim" ,
+"\\sup" : "sup" ,
+"\\underbrace" : null ,
+"\\overbrace" : null ,
+"\\underline" : null ,
+"\\overline" : null ,
+}
+;
+function v_piece_to_mathml (tokens ) {
+ var v_token = tokens.list[tokens.index] ;
+ var v_result = null ;
+ if( ( v_token == "{" ) ) {
+ tokens.index++;
+ v_result = v_subexpr_chain_to_mathml (tokens , g_hard_stop_tokens
+) ;
+ if( ( tokens.list[tokens.index] == "}" ) ) {
+ tokens.index++;
+ }
+ }
+ else if( ( v_token in g_relation_symbols
+) ) {
+ v_result = result_element( "mo" ,0 , g_relation_symbols
+[ v_token ] ) ;
+ tokens.index++;
+ }
+ else if( ( v_token in g_operator_symbols
+) ) {
+ v_result = result_element( "mo" ,0 , g_operator_symbols
+[ v_token ] ) ;
+ tokens.index++;
+ }
+ else if( ( v_token in g_left_delimiters
+) ) {
+ v_result = result_element( "mo" ,0 , g_left_delimiters
+[ v_token ] ) ;
+ tokens.index++;
+ }
+ else if( ( v_token in g_right_delimiters
+) ) {
+ v_result = result_element( "mo" ,0 , g_right_delimiters
+[ v_token ] ) ;
+ tokens.index++;
+ }
+ else if( ( v_token in g_word_operators
+) ) {
+ v_result = result_element( "mi" , 1
+, "mathvariant" , "normal" , g_word_operators
+[ v_token ] ) ;
+ tokens.index++;
+ }
+ else if( ( v_token in g_greek_letters
+) ) {
+ v_result = result_element( "mi" , 1
+, "fontstyle" , "normal" , g_greek_letters
+[ v_token ] ) ;
+ tokens.index++;
+ }
+ else if( ( v_token in g_named_identifiers
+) ) {
+ v_result = result_element( "mi" ,0 , g_named_identifiers
+[ v_token ] ) ;
+ tokens.index++;
+ }
+ else if( ( v_token in g_punct_and_space
+) ) {
+ v_result = result_element( "mtext" ,0 , g_punct_and_space
+[ v_token ] ) ;
+ tokens.index++;
+ }
+ else if( ( v_token in g_tex_commands
+) ) {
+ tokens.index++;
+ v_result = g_tex_commands
+[ v_token ] (tokens ) ;
+ }
+ else {
+ v_result = result_element( "mn" ,0 , v_token ) ;
+ tokens.index++;
+ }
+ return v_result ;
+}
+function v_subexpr_to_mathml (tokens ) {
+ var v_result = null ;
+ var v_mmultiscripts = null ;
+ var v_mprescripts = null ;
+ if( ( ( tokens.list[tokens.length<=tokens.index+ 0 ? tokens.length-1 : tokens.index+ 0 ]
+== "{" ) && ( tokens.list[tokens.length<=tokens.index+ 1 ? tokens.length-1 : tokens.index+ 1 ]
+== "}" ) && ( ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
+== "_" ) || ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
+== "^" ) ) ) ) {
+ v_mmultiscripts = result_element( "mmultiscripts" ,0) ;
+ v_mprescripts = result_element( "mprescripts" ,0) ;
+ result_element_append( v_mmultiscripts , v_mprescripts );
+ while( ( ( tokens.list[tokens.length<=tokens.index+ 0 ? tokens.length-1 : tokens.index+ 0 ]
+== "{" ) && ( tokens.list[tokens.length<=tokens.index+ 1 ? tokens.length-1 : tokens.index+ 1 ]
+== "}" ) && ( ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
+== "_" ) || ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
+== "^" ) ) ) ) {
+ var v_subscript = null ;
+ var v_superscript = null ;
+ tokens.index++;
+ tokens.index++;
+ if( ( tokens.list[tokens.index] == "_" ) ) {
+ tokens.index++;
+ v_subscript = v_piece_to_mathml (tokens ) ;
+ }
+ else if( ( tokens.list[tokens.index] == "^" ) ) {
+ tokens.index++;
+ v_superscript = v_piece_to_mathml (tokens ) ;
+ }
+ if( ( tokens.list[tokens.index] == "_" ) ) {
+ tokens.index++;
+ v_subscript = v_piece_to_mathml (tokens ) ;
+ }
+ else if( ( tokens.list[tokens.index] == "^" ) ) {
+ tokens.index++;
+ v_superscript = v_piece_to_mathml (tokens ) ;
+ }
+ result_element_append( v_mmultiscripts , ( ( v_subscript != null ) ? v_subscript : result_element( "none" ,0) ) );
+ result_element_append( v_mmultiscripts , ( ( v_superscript != null ) ? v_superscript : result_element( "none" ,0) ) );
+ }
+ }
+ var v_limit_style = ( tokens.list[tokens.index] in g_limit_commands
+) ;
+ if( ( tokens.list[tokens.index] == null ) ) {
+ if( ( v_mmultiscripts != null ) ) {
+ result_element_prepend( v_mmultiscripts , result_element( "mrow" ,0) , v_mprescripts );
+ return v_mmultiscripts ;
+ }
+ else {
+ return result_element( "mrow" ,0) ;
+ }
+ }
+ else if( ( tokens.list[tokens.index] in g_left_delimiters
+) ) {
+ v_result = v_heuristic_subexpression (tokens ) ;
+ }
+ else {
+ v_result = v_piece_to_mathml (tokens ) ;
+ }
+ var v_base = v_result ;
+ var v_subscript = null ;
+ var v_superscript = null ;
+ if( ( tokens.list[tokens.index] == "_" ) ) {
+ tokens.index++;
+ v_subscript = v_piece_to_mathml (tokens ) ;
+ }
+ else if( ( tokens.list[tokens.index] == "^" ) ) {
+ tokens.index++;
+ v_superscript = v_piece_to_mathml (tokens ) ;
+ }
+ if( ( tokens.list[tokens.index] == "_" ) ) {
+ tokens.index++;
+ v_subscript = v_piece_to_mathml (tokens ) ;
+ }
+ else if( ( tokens.list[tokens.index] == "^" ) ) {
+ tokens.index++;
+ v_superscript = v_piece_to_mathml (tokens ) ;
+ }
+ if( ( v_mmultiscripts != null ) ) {
+ result_element_prepend( v_mmultiscripts , v_base , v_mprescripts );
+ result_element_prepend( v_mmultiscripts , ( ( v_subscript != null ) ? v_subscript : result_element( "none" ,0) ) , v_mprescripts );
+ result_element_prepend( v_mmultiscripts , ( ( v_superscript != null ) ? v_superscript : result_element( "none" ,0) ) , v_mprescripts );
+ }
+ while( ( ( tokens.list[tokens.length<=tokens.index+ 0 ? tokens.length-1 : tokens.index+ 0 ]
+== "{" ) && ( tokens.list[tokens.length<=tokens.index+ 1 ? tokens.length-1 : tokens.index+ 1 ]
+== "}" ) && ( ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
+== "_" ) || ( tokens.list[tokens.length<=tokens.index+ 2 ? tokens.length-1 : tokens.index+ 2 ]
+== "^" ) ) ) ) {
+ if( ( v_mmultiscripts == null ) ) {
+ v_mmultiscripts = result_element( "mmultiscripts" ,0 , v_base ) ;
+ v_mprescripts = null ;
+ if( ( ( v_superscript != null ) || ( v_subscript != null ) ) ) {
+ result_element_append( v_mmultiscripts , ( ( v_subscript != null ) ? v_subscript : result_element( "none" ,0) ) );
+ result_element_append( v_mmultiscripts , ( ( v_superscript != null ) ? v_superscript : result_element( "none" ,0) ) );
+ }
+ }
+ var v_subscript = null ;
+ var v_superscript = null ;
+ tokens.index++;
+ tokens.index++;
+ if( ( tokens.list[tokens.index] == "_" ) ) {
+ tokens.index++;
+ v_subscript = v_piece_to_mathml (tokens ) ;
+ }
+ else if( ( tokens.list[tokens.index] == "^" ) ) {
+ tokens.index++;
+ v_superscript = v_piece_to_mathml (tokens ) ;
+ }
+ if( ( tokens.list[tokens.index] == "_" ) ) {
+ tokens.index++;
+ v_subscript = v_piece_to_mathml (tokens ) ;
+ }
+ else if( ( tokens.list[tokens.index] == "^" ) ) {
+ tokens.index++;
+ v_superscript = v_piece_to_mathml (tokens ) ;
+ }
+ result_element_prepend( v_mmultiscripts , ( ( v_subscript != null ) ? v_subscript : result_element( "none" ,0) ) , v_mprescripts );
+ result_element_prepend( v_mmultiscripts , ( ( v_superscript != null ) ? v_superscript : result_element( "none" ,0) ) , v_mprescripts );
+ }
+ if( ( v_mmultiscripts != null ) ) {
+ v_result = v_mmultiscripts ;
+ }
+ else if( ( ( v_subscript != null ) && ( v_superscript != null ) ) ) {
+ v_result = result_element( ( v_limit_style ? "munderover" : "msubsup" ) ,0 , v_base , v_subscript , v_superscript ) ;
+ }
+ else if( ( v_subscript != null ) ) {
+ v_result = result_element( ( v_limit_style ? "munder" : "msub" ) ,0 , v_base , v_subscript ) ;
+ }
+ else if( ( v_superscript != null ) ) {
+ v_result = result_element( ( v_limit_style ? "mover" : "msup" ) ,0 , v_base , v_superscript ) ;
+ }
+ return v_result ;
+}
+function v_subexpr_chain_to_mathml (tokens , v_stop_tokens ) {
+ var v_result = null ;
+ var v_mrow = null ;
+ var v_mfrac = null ;
+ var v_wrapped_result = null ;
+ while( ( ( tokens.list[tokens.index] != null ) && !( ( tokens.list[tokens.index] in v_stop_tokens ) ) ) ) {
+ if( ( tokens.list[tokens.index] == "\\over" ) ) {
+ tokens.index++;
+ v_mfrac = result_element( "mfrac" ,0 , v_result ) ;
+ v_wrapped_result = v_mfrac ;
+ v_mrow = null ;
+ v_result = null ;
+ }
+ else if( ( tokens.list[tokens.index] == "\\choose" ) ) {
+ tokens.index++;
+ v_mfrac = result_element( "mfrac" , 1
+, "linethickness" , "0" , v_result ) ;
+ v_wrapped_result = result_element( "mrow" ,0 , result_element( "mo" ,0 , "(" ) , v_mfrac , result_element( "mo" ,0 , ")" ) ) ;
+ v_mrow = null ;
+ v_result = null ;
+ }
+ else {
+ var v_node = v_collect_precedence_group (tokens , g_relations_precedence_group
+, v_stop_tokens , function(tokens , v_stop_tokens ) {return v_collect_precedence_group (tokens , g_addition_precedence_group
+, v_stop_tokens , function(tokens , v_stop_tokens ) {return v_collect_precedence_group (tokens , g_multiplication_precedence_group
+, v_stop_tokens , v_collect_invisible_group ) ;} ) ;} ) ;
+ if( ( v_mrow != null ) ) {
+ result_element_append( v_mrow , v_node );
+ }
+ else if( ( v_result != null ) ) {
+ v_mrow = result_element( "mrow" ,0 , v_result , v_node ) ;
+ v_result = v_mrow ;
+ }
+ else {
+ v_result = v_node ;
+ }
+ }
+ }
+ if( ( v_mfrac != null ) ) {
+ result_element_append( v_mfrac , v_result );
+ return v_wrapped_result ;
+ }
+ else {
+ return v_result ;
+ }
+}
+var g_optional_arg_stop_tokens
+= {"&" : null ,
+"\\\\" : null ,
+"}" : null ,
+"$" : null ,
+"\\end" : null ,
+"\\right" : null ,
+"\\bigr" : null ,
+"\\Bigr" : null ,
+"\\biggr" : null ,
+"\\Biggr" : null ,
+"\\choose" : null ,
+"\\over" : null ,
+"]" : null ,
+}
+;
+function v_optional_arg_to_mathml (tokens ) {
+ if( ( tokens.list[tokens.index] != "[" ) ) {
+ return null ;
+ }
+ tokens.index++;
+ var v_result = v_subexpr_chain_to_mathml (tokens , g_optional_arg_stop_tokens
+) ;
+ if( ( tokens.list[tokens.index] == "]" ) ) {
+ tokens.index++;
+ }
+ return v_result ;
+}
+var g_hard_stop_tokens
+= {"&" : null ,
+"\\\\" : null ,
+"}" : null ,
+"$" : null ,
+"\\end" : null ,
+"\\right" : null ,
+"\\bigr" : null ,
+"\\Bigr" : null ,
+"\\biggr" : null ,
+"\\Biggr" : null ,
+"\\choose" : null ,
+"\\over" : null ,
+}
+;
+var g_right_delimiter_stop_tokens
+= {"&" : null ,
+"\\\\" : null ,
+"}" : null ,
+"$" : null ,
+"\\end" : null ,
+"\\right" : null ,
+"\\bigr" : null ,
+"\\Bigr" : null ,
+"\\biggr" : null ,
+"\\Biggr" : null ,
+"\\choose" : null ,
+"\\over" : null ,
+")" : ")" ,
+"]" : "]" ,
+"\\}" : "}" ,
+"\\rbrace" : "}" ,
+"\\rgroup" : ")" ,
+"\\rvert" : "|" ,
+"\\rVert" : "\u2016" ,
+"\\rceil" : "\u2309" ,
+"\\rfloor" : "\u230b" ,
+"\\rmoustache" : "\u23b1" ,
+"\\rangle" : "\u232a" ,
+}
+;
+function v_heuristic_subexpression (tokens ) {
+ var v_result = result_element( "mrow" ,0) ;
+ result_element_append( v_result , v_piece_to_mathml (tokens ) );
+ result_element_append( v_result , v_subexpr_chain_to_mathml (tokens , g_right_delimiter_stop_tokens
+) );
+ if( ( ( tokens.list[tokens.index] != null ) && !( ( tokens.list[tokens.index] in g_hard_stop_tokens
+) ) ) ) {
+ result_element_append( v_result , v_piece_to_mathml (tokens ) );
+ }
+ return v_result ;
+}
+var g_relations_precedence_group
+= g_relation_symbols
+;
+var g_addition_precedence_group
+= {"+" : null ,
+"-" : null ,
+"\\oplus" : null ,
+}
+;
+var g_multiplication_precedence_group
+= {"*" : null ,
+"\\times" : null ,
+"\\cdot" : null ,
+"/" : null ,
+}
+;
+function v_collect_precedence_group (tokens , v_operators , v_stop_tokens , v_reader ) {
+ var v_result = v_reader (tokens , v_stop_tokens ) ;
+ var v_mrow = null ;
+ while( ( ( tokens.list[tokens.index] != null ) && !( ( tokens.list[tokens.index] in v_stop_tokens ) ) && ( tokens.list[tokens.index] in v_operators ) ) ) {
+ if( ( v_mrow == null ) ) {
+ v_mrow = result_element( "mrow" ,0 , v_result ) ;
+ v_result = v_mrow ;
+ }
+ result_element_append( v_mrow , v_piece_to_mathml (tokens ) );
+ if( ( ( tokens.list[tokens.index] != null ) && ( tokens.list[tokens.index] in v_stop_tokens ) ) ) {
+ return v_result ;
+ }
+ else {
+ result_element_append( v_mrow , v_reader (tokens , v_stop_tokens ) );
+ }
+ }
+ return v_result ;
+}
+function v_collect_invisible_group (tokens , v_stop_tokens ) {
+ var v_result = v_subexpr_to_mathml (tokens ) ;
+ var v_mrow = null ;
+ while( ( ( tokens.list[tokens.index] != null ) && !( ( tokens.list[tokens.index] in v_stop_tokens ) ) && ( ( tokens.list[tokens.index] in g_named_identifiers
+) || ( tokens.list[tokens.index] in g_left_delimiters
+) ) ) ) {
+ if( ( v_mrow == null ) ) {
+ v_mrow = result_element( "mrow" ,0 , v_result ) ;
+ v_result = v_mrow ;
+ }
+ result_element_append( v_mrow , result_element( "mo" ,0 , "\u2062" ) );
+ if( ( ( tokens.list[tokens.index] != null ) && ( tokens.list[tokens.index] in v_stop_tokens ) ) ) {
+ return v_result ;
+ }
+ else {
+ result_element_append( v_mrow , v_subexpr_to_mathml (tokens ) );
+ }
+ }
+ return v_result ;
+}
+
+
+const tokenize_re = /(\\begin|\\operatorname|\\mathrm|\\mathop|\\end)\s*\{\s*([A-Z a-z]+)\s*\}|(\\[a-zA-Z]+|\\[\\#\{\},:;!])|(\s+)|([0-9\.]+)|([\$!"#%&'()*+,-.\/:;<=>?\[\]^_`\{\|\}~])|([a-zA-Z])/g;
+
+const tokenize_text_re = /[\${}\\]|\\[a-zA-Z]+|[^{}\$]+/g;
+
+const tokenize_text_commands = {
+ '\\textrm': 1,
+ '\\textsl': 1,
+ '\\textit': 1,
+ '\\texttt': 1,
+ '\\textbf': 1,
+ '\\textnormal': 1,
+ '\\text': 1,
+ '\\hbox': 1,
+ '\\mbox': 1
+};
+
+function tokenize_latex_math(input)
+{
+ var result = new Array();
+ var in_text_mode = 0;
+ var brace_level = [];
+ var pos = 0;
+
+ if(input.charAt(0) == '$' &&
+ input.charAt(input.length-1) == '$')
+ input = input.slice(1, input.length-1);
+
+ while(1) {
+ if(!in_text_mode) {
+ tokenize_re.lastIndex = pos;
+ var m = tokenize_re.exec(input);
+ pos = tokenize_re.lastIndex;
+
+ if(m == null) {
+ return result;
+ } else if(m[1] != null) {
+ result.push(m[1], m[2]);
+ } else if(m[3] == '\\sp') {
+ result.push('^');
+ } else if(m[3] == '\\sb') {
+ result.push('_');
+ } else {
+ if(m[0] == '$') {
+ in_text_mode = 1;
+ } else if(m[4] != null) {
+ continue;
+ } else if(m[3] != null && m[3] in tokenize_text_commands) {
+ in_text_mode = 2;
+ brace_level.push(0);
+ }
+
+ result.push(m[0]);
+ }
+ } else {
+ tokenize_text_re.lastIndex = pos;
+ var m = tokenize_text_re.exec(input);
+ pos = tokenize_text_re.lastIndex;
+
+ if(m == null) {
+ return result;
+ } else if(m[0] == '$') {
+ in_text_mode = 0;
+ } else if(m[0] == '{') {
+ brace_level[brace_level.length-1]++;
+ } else if(m[0] == '}') {
+ if(--brace_level[brace_level.length-1] <= 0) {
+ in_text_mode = 0;
+ brace_level.pop();
+ }
+ }
+ result.push(m[0]);
+ }
+ }
+}
+
+/*
+function post_process_mathml(event)
+{
+ var url = GM_getValue('click-post-url', null);
+ if(url == null)
+ return;
+
+ var ser = new XMLSerializer();
+ var xhr = GM_xmlhttpRequest({
+ method: 'POST',
+ url: url,
+ headers: { 'Content-Type': 'text/xml; charset=utf-8',
+ 'Content-Location': document.location },
+ data: ser.serializeToString(event.currentTarget),
+ onerror: function(details) {
+ alert("There was an error processing the request. " +
+ "HTTP status code " + details.status + ' ' + details.statusText);
+ },
+ onload: function(details) {
+ window.status = "Successfully posted MathML. Status: "
+ + details.status + ' ' + details.statusText;
+ }});
+
+ window.status = "Posting MathML to " + url + "...";
+}
+*/
+
+function patch_img(node)
+{
+
+ if(node.currentTarget)
+ node = node.currentTarget;
+
+ var alt = node.getAttribute('alt');
+
+ if(alt == null ||
+ /^\\includegraphics|^\$\\displaystyle \\xymatrix/.test(alt))
+ return;
+
+ var latex_string = null;
+
+
+
+
+ if((node.parentNode.tagName == 'DIV' &&
+ node.parentNode.getAttribute('CLASS') == 'mathdisplay')
+ || (node.parentNode.tagName == 'SPAN' &&
+ node.parentNode.getAttribute('CLASS') == 'MATH'))
+ {
+ var parent = node.parentNode;
+ var previous = parent.previousSibling;
+ const non_whitespace = /[^\s]/;
+
+ if(previous &&
+ previous.nodeType == node.TEXT_NODE &&
+ !non_whitespace.test(previous.data))
+ previous = previous.previousSibling;
+
+ if(previous &&
+ previous.nodeType == node.ELEMENT_NODE &&
+ previous.tagName == 'P' &&
+ previous.lastChild)
+ {
+ previous = previous.lastChild;
+ if(previous &&
+ previous.nodeType == node.TEXT_NODE &&
+ !non_whitespace.test(previous.data))
+ previous = previous.previousSibling;
+ }
+
+ if(previous &&
+ previous.nodeType == node.COMMENT_NODE) {
+ latex_string = previous.data.replace(/^\s*MATH\s*/, '')
+ .replace(/\s+$/, '');
+ }
+ }
+
+
+ if(!latex_string && /^\$.+\$$/.test(alt)
+ && !(/\.{3} \.{3}/.test(alt)))
+ {
+ latex_string = alt;
+ }
+
+ if(latex_string == null)
+ return;
+
+
+ tokens = new Object();
+ tokens.list = tokenize_latex_math(latex_string);
+ tokens.list.push(null);
+ tokens.index = 0;
+
+ var mathml = null;
+ try {
+ var mrow = v_subexpr_chain_to_mathml(tokens, {});
+ fix_mathvariant(mrow, null);
+
+ mathml = document.createElementNS(mmlns, 'math');
+ mathml.setAttribute("latex", latex_string);
+ mathml.setAttribute("mathvariant", "normal");
+ mathml.appendChild(mrow);
+
+ mathml.addEventListener("click", post_process_mathml, false);
+
+ } catch(e) {
+ GM_log("Display LaTeX failed with error " + e + " on " + latex_string);
+ }
+
+
+ if(mathml == null)
+ return;
+
+ node.parentNode.replaceChild(mathml, node);
+}
+
+
+function patch_text(node0)
+{
+ var text = node0.nodeValue;
+ var results = /\$[^$]+\$|\[tex\](.+?)\[\/tex\]/.exec(text);
+
+ if(results) {
+ var latex_string = (results[1] == null ? results[0] : '$'+results[1]+'$');
+
+
+ tokens = new Object();
+ tokens.list = tokenize_latex_math(latex_string);
+ tokens.list.push(null);
+ tokens.index = 0;
+
+ var mathml = null;
+ try {
+ var mrow = v_subexpr_chain_to_mathml(tokens, {});
+ fix_mathvariant(mrow, null);
+
+ mathml = document.createElementNS(mmlns, 'math');
+ mathml.setAttribute("latex", latex_string);
+ mathml.setAttribute("mathvariant", "normal");
+ mathml.appendChild(mrow);
+
+ mathml.addEventListener("click", post_process_mathml, false);
+
+ } catch(e) {
+ GM_log("Display LaTeX failed with error " + e + " on " + latex_string);
+ }
+
+
+ if(mathml == null)
+ return;
+
+ var node2 = node0.splitText(results.index);
+ node2.deleteData(0, results[0].length);
+
+ node2.parentNode.insertBefore(mathml, node2);
+
+
+ patch_text(node2);
+ }
+}
+
+
+
+function patch_element(node)
+{
+ if(node.nodeType == node.TEXT_NODE)
+ patch_text(node);
+ else if(node.nodeType == node.ELEMENT_NODE) {if(node.tagName == 'TEXTAREA' || node.tagName == 'textarea' ||
+ node.tagName == 'INPUT' || node.tagName == 'input' ||
+ node.tagName == 'SCRIPT' || node.tagName == 'script')
+ return;
+
+
+ if(do_patch_images && (node.tagName == 'IMG' || node.tagName == 'img')) {
+ if(!delayed_patch)
+ patch_img(node);
+ else
+ node.addEventListener("click", patch_img, false);
+
+ return;
+ }
+
+ var child = node.firstChild;
+ while(child) {
+ var next = child.nextSibling;
+ if (child.className == 'stopLatex2mml') {
+ break;
+ }
+ patch_element(child);
+ child = next;
+ }
+ }
+}
+this.patch_element = patch_element;
+
+/*
+var do_patch_images = GM_getValue("patch-images", false);
+var delayed_patch = GM_getValue("delayed-patch", false);
+*/
+var do_patch_images = true;
+var delayed_patch = false;
+
+/*
+if( va_view == 'web' ){
+ patch_element(document.documentElement);
+}
+*/
+};
+
+
diff --git a/deck.js/libs/jquerysvg/blank.svg b/deck.js/libs/jquerysvg/blank.svg
new file mode 100644
index 0000000..e0a263a
--- /dev/null
+++ b/deck.js/libs/jquerysvg/blank.svg
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg onload="(window.parent || window).jQuery.svg._registerSVG();" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+</svg> \ No newline at end of file
diff --git a/deck.js/libs/jquerysvg/jquery.svg.css b/deck.js/libs/jquerysvg/jquery.svg.css
new file mode 100644
index 0000000..1ff48b1
--- /dev/null
+++ b/deck.js/libs/jquerysvg/jquery.svg.css
@@ -0,0 +1,15 @@
+/* http://keith-wood.name/svg.html
+ SVG for jQuery v1.4.5.
+ Written by Keith Wood (kbwood{at}iinet.com.au) August 2007.
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
+ Please attribute the author if you use it. */
+
+svg\:svg {
+ display: none;
+}
+
+.svg_error {
+ color: red;
+ font-weight: bold;
+}
diff --git a/deck.js/libs/jquerysvg/jquery.svg.min.js b/deck.js/libs/jquerysvg/jquery.svg.min.js
new file mode 100644
index 0000000..2d36c39
--- /dev/null
+++ b/deck.js/libs/jquerysvg/jquery.svg.min.js
@@ -0,0 +1,20 @@
+/* http://keith-wood.name/svg.html
+ SVG for jQuery v1.4.5.
+ Written by Keith Wood (kbwood{at}iinet.com.au) August 2007.
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
+ Please attribute the author if you use it. */
+(function($){function SVGManager(){this._settings=[];this._extensions=[];this.regional=[];this.regional['']={errorLoadingText:'Error loading',notSupportedText:'This browser does not support SVG'};this.local=this.regional[''];this._uuid=new Date().getTime();this._renesis=detectActiveX('RenesisX.RenesisCtrl')}function detectActiveX(a){try{return!!(window.ActiveXObject&&new ActiveXObject(a))}catch(e){return false}}var q='svgwrapper';$.extend(SVGManager.prototype,{markerClassName:'hasSVG',svgNS:'http://www.w3.org/2000/svg',xlinkNS:'http://www.w3.org/1999/xlink',_wrapperClass:SVGWrapper,_attrNames:{class_:'class',in_:'in',alignmentBaseline:'alignment-baseline',baselineShift:'baseline-shift',clipPath:'clip-path',clipRule:'clip-rule',colorInterpolation:'color-interpolation',colorInterpolationFilters:'color-interpolation-filters',colorRendering:'color-rendering',dominantBaseline:'dominant-baseline',enableBackground:'enable-background',fillOpacity:'fill-opacity',fillRule:'fill-rule',floodColor:'flood-color',floodOpacity:'flood-opacity',fontFamily:'font-family',fontSize:'font-size',fontSizeAdjust:'font-size-adjust',fontStretch:'font-stretch',fontStyle:'font-style',fontVariant:'font-variant',fontWeight:'font-weight',glyphOrientationHorizontal:'glyph-orientation-horizontal',glyphOrientationVertical:'glyph-orientation-vertical',horizAdvX:'horiz-adv-x',horizOriginX:'horiz-origin-x',imageRendering:'image-rendering',letterSpacing:'letter-spacing',lightingColor:'lighting-color',markerEnd:'marker-end',markerMid:'marker-mid',markerStart:'marker-start',stopColor:'stop-color',stopOpacity:'stop-opacity',strikethroughPosition:'strikethrough-position',strikethroughThickness:'strikethrough-thickness',strokeDashArray:'stroke-dasharray',strokeDashOffset:'stroke-dashoffset',strokeLineCap:'stroke-linecap',strokeLineJoin:'stroke-linejoin',strokeMiterLimit:'stroke-miterlimit',strokeOpacity:'stroke-opacity',strokeWidth:'stroke-width',textAnchor:'text-anchor',textDecoration:'text-decoration',textRendering:'text-rendering',underlinePosition:'underline-position',underlineThickness:'underline-thickness',vertAdvY:'vert-adv-y',vertOriginY:'vert-origin-y',wordSpacing:'word-spacing',writingMode:'writing-mode'},_attachSVG:function(a,b){var c=(a.namespaceURI==this.svgNS?a:null);var a=(c?null:a);if($(a||c).hasClass(this.markerClassName)){return}if(typeof b=='string'){b={loadURL:b}}else if(typeof b=='function'){b={onLoad:b}}$(a||c).addClass(this.markerClassName);try{if(!c){c=document.createElementNS(this.svgNS,'svg');c.setAttribute('version','1.1');if(a.clientWidth>0){c.setAttribute('width',a.clientWidth)}if(a.clientHeight>0){c.setAttribute('height',a.clientHeight)}a.appendChild(c)}this._afterLoad(a,c,b||{})}catch(e){if($.browser.msie){if(!a.id){a.id='svg'+(this._uuid++)}this._settings[a.id]=b;a.innerHTML='<embed type="image/svg+xml" width="100%" '+'height="100%" src="'+(b.initPath||'')+'blank.svg" '+'pluginspage="http://www.adobe.com/svg/viewer/install/main.html"/>'}else{a.innerHTML='<p class="svg_error">'+this.local.notSupportedText+'</p>'}}},_registerSVG:function(){for(var i=0;i<document.embeds.length;i++){var a=document.embeds[i].parentNode;if(!$(a).hasClass($.svg.markerClassName)||$.data(a,q)){continue}var b=null;try{b=document.embeds[i].getSVGDocument()}catch(e){setTimeout($.svg._registerSVG,250);return}b=(b?b.documentElement:null);if(b){$.svg._afterLoad(a,b)}}},_afterLoad:function(a,b,c){var c=c||this._settings[a.id];this._settings[a?a.id:'']=null;var d=new this._wrapperClass(b,a);$.data(a||b,q,d);try{if(c.loadURL){d.load(c.loadURL,c)}if(c.settings){d.configure(c.settings)}if(c.onLoad&&!c.loadURL){c.onLoad.apply(a||b,[d])}}catch(e){alert(e)}},_getSVG:function(a){a=(typeof a=='string'?$(a)[0]:(a.jquery?a[0]:a));return $.data(a,q)},_destroySVG:function(a){var b=$(a);if(!b.hasClass(this.markerClassName)){return}b.removeClass(this.markerClassName);if(a.namespaceURI!=this.svgNS){b.empty()}$.removeData(a,q)},addExtension:function(a,b){this._extensions.push([a,b])},isSVGElem:function(a){return(a.nodeType==1&&a.namespaceURI==$.svg.svgNS)}});function SVGWrapper(a,b){this._svg=a;this._container=b;for(var i=0;i<$.svg._extensions.length;i++){var c=$.svg._extensions[i];this[c[0]]=new c[1](this)}}$.extend(SVGWrapper.prototype,{_width:function(){return(this._container?this._container.clientWidth:this._svg.width)},_height:function(){return(this._container?this._container.clientHeight:this._svg.height)},root:function(){return this._svg},configure:function(a,b,c){if(!a.nodeName){c=b;b=a;a=this._svg}if(c){for(var i=a.attributes.length-1;i>=0;i--){var d=a.attributes.item(i);if(!(d.nodeName=='onload'||d.nodeName=='version'||d.nodeName.substring(0,5)=='xmlns')){a.attributes.removeNamedItem(d.nodeName)}}}for(var e in b){a.setAttribute($.svg._attrNames[e]||e,b[e])}return this},getElementById:function(a){return this._svg.ownerDocument.getElementById(a)},change:function(a,b){if(a){for(var c in b){if(b[c]==null){a.removeAttribute($.svg._attrNames[c]||c)}else{a.setAttribute($.svg._attrNames[c]||c,b[c])}}}return this},_args:function(b,c,d){c.splice(0,0,'parent');c.splice(c.length,0,'settings');var e={};var f=0;if(b[0]!=null&&b[0].jquery){b[0]=b[0][0]}if(b[0]!=null&&!(typeof b[0]=='object'&&b[0].nodeName)){e['parent']=null;f=1}for(var i=0;i<b.length;i++){e[c[i+f]]=b[i]}if(d){$.each(d,function(i,a){if(typeof e[a]=='object'){e.settings=e[a];e[a]=null}})}return e},title:function(a,b,c){var d=this._args(arguments,['text']);var e=this._makeNode(d.parent,'title',d.settings||{});e.appendChild(this._svg.ownerDocument.createTextNode(d.text));return e},describe:function(a,b,c){var d=this._args(arguments,['text']);var e=this._makeNode(d.parent,'desc',d.settings||{});e.appendChild(this._svg.ownerDocument.createTextNode(d.text));return e},defs:function(a,b,c){var d=this._args(arguments,['id'],['id']);return this._makeNode(d.parent,'defs',$.extend((d.id?{id:d.id}:{}),d.settings||{}))},symbol:function(a,b,c,d,e,f,g){var h=this._args(arguments,['id','x1','y1','width','height']);return this._makeNode(h.parent,'symbol',$.extend({id:h.id,viewBox:h.x1+' '+h.y1+' '+h.width+' '+h.height},h.settings||{}))},marker:function(a,b,c,d,e,f,g,h){var i=this._args(arguments,['id','refX','refY','mWidth','mHeight','orient'],['orient']);return this._makeNode(i.parent,'marker',$.extend({id:i.id,refX:i.refX,refY:i.refY,markerWidth:i.mWidth,markerHeight:i.mHeight,orient:i.orient||'auto'},i.settings||{}))},style:function(a,b,c){var d=this._args(arguments,['styles']);var e=this._makeNode(d.parent,'style',$.extend({type:'text/css'},d.settings||{}));e.appendChild(this._svg.ownerDocument.createTextNode(d.styles));if($.browser.opera){$('head').append('<style type="text/css">'+d.styles+'</style>')}return e},script:function(a,b,c,d){var e=this._args(arguments,['script','type'],['type']);var f=this._makeNode(e.parent,'script',$.extend({type:e.type||'text/javascript'},e.settings||{}));f.appendChild(this._svg.ownerDocument.createTextNode(e.script));if(!$.browser.mozilla){$.globalEval(e.script)}return f},linearGradient:function(a,b,c,d,e,f,g,h){var i=this._args(arguments,['id','stops','x1','y1','x2','y2'],['x1']);var j=$.extend({id:i.id},(i.x1!=null?{x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2}:{}));return this._gradient(i.parent,'linearGradient',$.extend(j,i.settings||{}),i.stops)},radialGradient:function(a,b,c,d,e,r,f,g,h){var i=this._args(arguments,['id','stops','cx','cy','r','fx','fy'],['cx']);var j=$.extend({id:i.id},(i.cx!=null?{cx:i.cx,cy:i.cy,r:i.r,fx:i.fx,fy:i.fy}:{}));return this._gradient(i.parent,'radialGradient',$.extend(j,i.settings||{}),i.stops)},_gradient:function(a,b,c,d){var e=this._makeNode(a,b,c);for(var i=0;i<d.length;i++){var f=d[i];this._makeNode(e,'stop',$.extend({offset:f[0],stopColor:f[1]},(f[2]!=null?{stopOpacity:f[2]}:{})))}return e},pattern:function(a,b,x,y,c,d,e,f,g,h,i){var j=this._args(arguments,['id','x','y','width','height','vx','vy','vwidth','vheight'],['vx']);var k=$.extend({id:j.id,x:j.x,y:j.y,width:j.width,height:j.height},(j.vx!=null?{viewBox:j.vx+' '+j.vy+' '+j.vwidth+' '+j.vheight}:{}));return this._makeNode(j.parent,'pattern',$.extend(k,j.settings||{}))},clipPath:function(a,b,c,d){var e=this._args(arguments,['id','units']);e.units=e.units||'userSpaceOnUse';return this._makeNode(e.parent,'clipPath',$.extend({id:e.id,clipPathUnits:e.units},e.settings||{}))},mask:function(a,b,x,y,c,d,e){var f=this._args(arguments,['id','x','y','width','height']);return this._makeNode(f.parent,'mask',$.extend({id:f.id,x:f.x,y:f.y,width:f.width,height:f.height},f.settings||{}))},createPath:function(){return new SVGPath()},createText:function(){return new SVGText()},svg:function(a,x,y,b,c,d,e,f,g,h){var i=this._args(arguments,['x','y','width','height','vx','vy','vwidth','vheight'],['vx']);var j=$.extend({x:i.x,y:i.y,width:i.width,height:i.height},(i.vx!=null?{viewBox:i.vx+' '+i.vy+' '+i.vwidth+' '+i.vheight}:{}));return this._makeNode(i.parent,'svg',$.extend(j,i.settings||{}))},group:function(a,b,c){var d=this._args(arguments,['id'],['id']);return this._makeNode(d.parent,'g',$.extend({id:d.id},d.settings||{}))},use:function(a,x,y,b,c,d,e){var f=this._args(arguments,['x','y','width','height','ref']);if(typeof f.x=='string'){f.ref=f.x;f.settings=f.y;f.x=f.y=f.width=f.height=null}var g=this._makeNode(f.parent,'use',$.extend({x:f.x,y:f.y,width:f.width,height:f.height},f.settings||{}));g.setAttributeNS($.svg.xlinkNS,'href',f.ref);return g},link:function(a,b,c){var d=this._args(arguments,['ref']);var e=this._makeNode(d.parent,'a',d.settings);e.setAttributeNS($.svg.xlinkNS,'href',d.ref);return e},image:function(a,x,y,b,c,d,e){var f=this._args(arguments,['x','y','width','height','ref']);var g=this._makeNode(f.parent,'image',$.extend({x:f.x,y:f.y,width:f.width,height:f.height},f.settings||{}));g.setAttributeNS($.svg.xlinkNS,'href',f.ref);return g},path:function(a,b,c){var d=this._args(arguments,['path']);return this._makeNode(d.parent,'path',$.extend({d:(d.path.path?d.path.path():d.path)},d.settings||{}))},rect:function(a,x,y,b,c,d,e,f){var g=this._args(arguments,['x','y','width','height','rx','ry'],['rx']);return this._makeNode(g.parent,'rect',$.extend({x:g.x,y:g.y,width:g.width,height:g.height},(g.rx?{rx:g.rx,ry:g.ry}:{}),g.settings||{}))},circle:function(a,b,c,r,d){var e=this._args(arguments,['cx','cy','r']);return this._makeNode(e.parent,'circle',$.extend({cx:e.cx,cy:e.cy,r:e.r},e.settings||{}))},ellipse:function(a,b,c,d,e,f){var g=this._args(arguments,['cx','cy','rx','ry']);return this._makeNode(g.parent,'ellipse',$.extend({cx:g.cx,cy:g.cy,rx:g.rx,ry:g.ry},g.settings||{}))},line:function(a,b,c,d,e,f){var g=this._args(arguments,['x1','y1','x2','y2']);return this._makeNode(g.parent,'line',$.extend({x1:g.x1,y1:g.y1,x2:g.x2,y2:g.y2},g.settings||{}))},polyline:function(a,b,c){var d=this._args(arguments,['points']);return this._poly(d.parent,'polyline',d.points,d.settings)},polygon:function(a,b,c){var d=this._args(arguments,['points']);return this._poly(d.parent,'polygon',d.points,d.settings)},_poly:function(a,b,c,d){var e='';for(var i=0;i<c.length;i++){e+=c[i].join()+' '}return this._makeNode(a,b,$.extend({points:$.trim(e)},d||{}))},text:function(a,x,y,b,c){var d=this._args(arguments,['x','y','value']);if(typeof d.x=='string'&&arguments.length<4){d.value=d.x;d.settings=d.y;d.x=d.y=null}return this._text(d.parent,'text',d.value,$.extend({x:(d.x&&isArray(d.x)?d.x.join(' '):d.x),y:(d.y&&isArray(d.y)?d.y.join(' '):d.y)},d.settings||{}))},textpath:function(a,b,c,d){var e=this._args(arguments,['path','value']);var f=this._text(e.parent,'textPath',e.value,e.settings||{});f.setAttributeNS($.svg.xlinkNS,'href',e.path);return f},_text:function(a,b,c,d){var e=this._makeNode(a,b,d);if(typeof c=='string'){e.appendChild(e.ownerDocument.createTextNode(c))}else{for(var i=0;i<c._parts.length;i++){var f=c._parts[i];if(f[0]=='tspan'){var g=this._makeNode(e,f[0],f[2]);g.appendChild(e.ownerDocument.createTextNode(f[1]));e.appendChild(g)}else if(f[0]=='tref'){var g=this._makeNode(e,f[0],f[2]);g.setAttributeNS($.svg.xlinkNS,'href',f[1]);e.appendChild(g)}else if(f[0]=='textpath'){var h=$.extend({},f[2]);h.href=null;var g=this._makeNode(e,f[0],h);g.setAttributeNS($.svg.xlinkNS,'href',f[2].href);g.appendChild(e.ownerDocument.createTextNode(f[1]));e.appendChild(g)}else{e.appendChild(e.ownerDocument.createTextNode(f[1]))}}}return e},other:function(a,b,c){var d=this._args(arguments,['name']);return this._makeNode(d.parent,d.name,d.settings||{})},_makeNode:function(a,b,c){a=a||this._svg;var d=this._svg.ownerDocument.createElementNS($.svg.svgNS,b);for(var b in c){var e=c[b];if(e!=null&&e!=null&&(typeof e!='string'||e!='')){d.setAttribute($.svg._attrNames[b]||b,e)}}a.appendChild(d);return d},add:function(b,c){var d=this._args((arguments.length==1?[null,b]:arguments),['node']);var f=this;d.parent=d.parent||this._svg;d.node=(d.node.jquery?d.node:$(d.node));try{if($.svg._renesis){throw'Force traversal';}d.parent.appendChild(d.node.cloneNode(true))}catch(e){d.node.each(function(){var a=f._cloneAsSVG(this);if(a){d.parent.appendChild(a)}})}return this},clone:function(b,c){var d=this;var e=this._args((arguments.length==1?[null,b]:arguments),['node']);e.parent=e.parent||this._svg;e.node=(e.node.jquery?e.node:$(e.node));var f=[];e.node.each(function(){var a=d._cloneAsSVG(this);if(a){a.id='';e.parent.appendChild(a);f.push(a)}});return f},_cloneAsSVG:function(a){var b=null;if(a.nodeType==1){b=this._svg.ownerDocument.createElementNS($.svg.svgNS,this._checkName(a.nodeName));for(var i=0;i<a.attributes.length;i++){var c=a.attributes.item(i);if(c.nodeName!='xmlns'&&c.nodeValue){if(c.prefix=='xlink'){b.setAttributeNS($.svg.xlinkNS,c.localName||c.baseName,c.nodeValue)}else{b.setAttribute(this._checkName(c.nodeName),c.nodeValue)}}}for(var i=0;i<a.childNodes.length;i++){var d=this._cloneAsSVG(a.childNodes[i]);if(d){b.appendChild(d)}}}else if(a.nodeType==3){if($.trim(a.nodeValue)){b=this._svg.ownerDocument.createTextNode(a.nodeValue)}}else if(a.nodeType==4){if($.trim(a.nodeValue)){try{b=this._svg.ownerDocument.createCDATASection(a.nodeValue)}catch(e){b=this._svg.ownerDocument.createTextNode(a.nodeValue.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'))}}}return b},_checkName:function(a){a=(a.substring(0,1)>='A'&&a.substring(0,1)<='Z'?a.toLowerCase():a);return(a.substring(0,4)=='svg:'?a.substring(4):a)},load:function(j,k){k=(typeof k=='boolean'?{addTo:k}:(typeof k=='function'?{onLoad:k}:(typeof k=='string'?{parent:k}:(typeof k=='object'&&k.nodeName?{parent:k}:(typeof k=='object'&&k.jquery?{parent:k}:k||{})))));if(!k.parent&&!k.addTo){this.clear(false)}var l=[this._svg.getAttribute('width'),this._svg.getAttribute('height')];var m=this;var n=function(a){a=$.svg.local.errorLoadingText+': '+a;if(k.onLoad){k.onLoad.apply(m._container||m._svg,[m,a])}else{m.text(null,10,20,a)}};var o=function(a){var b=new ActiveXObject('Microsoft.XMLDOM');b.validateOnParse=false;b.resolveExternals=false;b.async=false;b.loadXML(a);if(b.parseError.errorCode!=0){n(b.parseError.reason);return null}return b};var p=function(a){if(!a){return}if(a.documentElement.nodeName!='svg'){var b=a.getElementsByTagName('parsererror');var c=(b.length?b[0].getElementsByTagName('div'):[]);n(!b.length?'???':(c.length?c[0]:b[0]).firstChild.nodeValue);return}
+ if (!k.forceKeepRelativePath && j.search(/\//) != -1) {
+ var base = j.replace(/\/[^\/]*$/, '/');
+ $("*[xlink\\:href]", a.documentElement).each( function(i,el) {
+ var href = $(el).attr('xlink:href')+"";
+ if (!href.match(/(^[a-z]([-a-z0-9+.])*:.*$)|(^\/.*$)/i) && href[0] != '#') {
+ // only consider relative href
+ $(el).attr('xlink:href', base + $(el).attr('xlink:href'));
+ }
+ });
+ }
+var d=(k.parent?$(k.parent)[0]:m._svg);var f={};for(var i=0;i<a.documentElement.attributes.length;i++){var g=a.documentElement.attributes.item(i);if(!(g.nodeName=='version'||g.nodeName.substring(0,5)=='xmlns')){f[g.nodeName]=g.nodeValue}}m.configure(d,f,!k.parent);var h=a.documentElement.childNodes;for(var i=0;i<h.length;i++){try{if($.svg._renesis){throw'Force traversal';}d.appendChild(m._svg.ownerDocument.importNode(h[i],true));if(h[i].nodeName=='script'){$.globalEval(h[i].textContent)}}catch(e){m.add(d,h[i])}}if(!k.changeSize){m.configure(d,{width:l[0],height:l[1]})}if(k.onLoad){k.onLoad.apply(m._container||m._svg,[m
+,a.documentElement.getAttribute('width'),a.documentElement.getAttribute('height') // <--- added parameters
+])}};if(j.match('<svg')){p($.browser.msie?o(j):new DOMParser().parseFromString(j,'text/xml'))}else{$.ajax({url:j,dataType:($.browser.msie?'text':'xml'),success:function(a){p($.browser.msie?o(a):a)},error:function(a,b,c){n(b+(c?' '+c.message:''))}})}return this},remove:function(a){a=(a.jquery?a[0]:a);a.parentNode.removeChild(a);return this},clear:function(a){if(a){this.configure({},true)}while(this._svg.firstChild){this._svg.removeChild(this._svg.firstChild)}return this},toSVG:function(a){a=a||this._svg;return(typeof XMLSerializer=='undefined'?this._toSVG(a):new XMLSerializer().serializeToString(a))},_toSVG:function(a){var b='';if(!a){return b}if(a.nodeType==3){b=a.nodeValue}else if(a.nodeType==4){b='<![CDATA['+a.nodeValue+']]>'}else{b='<'+a.nodeName;if(a.attributes){for(var i=0;i<a.attributes.length;i++){var c=a.attributes.item(i);if(!($.trim(c.nodeValue)==''||c.nodeValue.match(/^\[object/)||c.nodeValue.match(/^function/))){b+=' '+(c.namespaceURI==$.svg.xlinkNS?'xlink:':'')+c.nodeName+'="'+c.nodeValue+'"'}}}if(a.firstChild){b+='>';var d=a.firstChild;while(d){b+=this._toSVG(d);d=d.nextSibling}b+='</'+a.nodeName+'>'}else{b+='/>'}}return b}});function SVGPath(){this._path=''}$.extend(SVGPath.prototype,{reset:function(){this._path='';return this},move:function(x,y,a){a=(isArray(x)?y:a);return this._coords((a?'m':'M'),x,y)},line:function(x,y,a){a=(isArray(x)?y:a);return this._coords((a?'l':'L'),x,y)},horiz:function(x,a){this._path+=(a?'h':'H')+(isArray(x)?x.join(' '):x);return this},vert:function(y,a){this._path+=(a?'v':'V')+(isArray(y)?y.join(' '):y);return this},curveC:function(a,b,c,d,x,y,e){e=(isArray(a)?b:e);return this._coords((e?'c':'C'),a,b,c,d,x,y)},smoothC:function(a,b,x,y,c){c=(isArray(a)?b:c);return this._coords((c?'s':'S'),a,b,x,y)},curveQ:function(a,b,x,y,c){c=(isArray(a)?b:c);return this._coords((c?'q':'Q'),a,b,x,y)},smoothQ:function(x,y,a){a=(isArray(x)?y:a);return this._coords((a?'t':'T'),x,y)},_coords:function(a,b,c,d,e,f,g){if(isArray(b)){for(var i=0;i<b.length;i++){var h=b[i];this._path+=(i==0?a:' ')+h[0]+','+h[1]+(h.length<4?'':' '+h[2]+','+h[3]+(h.length<6?'':' '+h[4]+','+h[5]))}}else{this._path+=a+b+','+c+(d==null?'':' '+d+','+e+(f==null?'':' '+f+','+g))}return this},arc:function(a,b,c,d,e,x,y,f){f=(isArray(a)?b:f);this._path+=(f?'a':'A');if(isArray(a)){for(var i=0;i<a.length;i++){var g=a[i];this._path+=(i==0?'':' ')+g[0]+','+g[1]+' '+g[2]+' '+(g[3]?'1':'0')+','+(g[4]?'1':'0')+' '+g[5]+','+g[6]}}else{this._path+=a+','+b+' '+c+' '+(d?'1':'0')+','+(e?'1':'0')+' '+x+','+y}return this},close:function(){this._path+='z';return this},path:function(){return this._path}});SVGPath.prototype.moveTo=SVGPath.prototype.move;SVGPath.prototype.lineTo=SVGPath.prototype.line;SVGPath.prototype.horizTo=SVGPath.prototype.horiz;SVGPath.prototype.vertTo=SVGPath.prototype.vert;SVGPath.prototype.curveCTo=SVGPath.prototype.curveC;SVGPath.prototype.smoothCTo=SVGPath.prototype.smoothC;SVGPath.prototype.curveQTo=SVGPath.prototype.curveQ;SVGPath.prototype.smoothQTo=SVGPath.prototype.smoothQ;SVGPath.prototype.arcTo=SVGPath.prototype.arc;function SVGText(){this._parts=[]}$.extend(SVGText.prototype,{reset:function(){this._parts=[];return this},string:function(a){this._parts[this._parts.length]=['text',a];return this},span:function(a,b){this._parts[this._parts.length]=['tspan',a,b];return this},ref:function(a,b){this._parts[this._parts.length]=['tref',a,b];return this},path:function(a,b,c){this._parts[this._parts.length]=['textpath',b,$.extend({href:a},c||{})];return this}});$.fn.svg=function(a){var b=Array.prototype.slice.call(arguments,1);if(typeof a=='string'&&a=='get'){return $.svg['_'+a+'SVG'].apply($.svg,[this[0]].concat(b))}return this.each(function(){if(typeof a=='string'){$.svg['_'+a+'SVG'].apply($.svg,[this].concat(b))}else{$.svg._attachSVG(this,a||{})}})};function isArray(a){return(a&&a.constructor==Array)}$.svg=new SVGManager()})(jQuery); \ No newline at end of file
diff --git a/deck.js/libs/jquerysvg/jquery.svganim.min.js b/deck.js/libs/jquerysvg/jquery.svganim.min.js
new file mode 100644
index 0000000..3cc4020
--- /dev/null
+++ b/deck.js/libs/jquerysvg/jquery.svganim.min.js
@@ -0,0 +1,7 @@
+/* http://keith-wood.name/svg.html
+ SVG attribute animations for jQuery v1.4.5.
+ Written by Keith Wood (kbwood{at}iinet.com.au) June 2008.
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
+ Please attribute the author if you use it. */
+(function($){$.each(['x','y','width','height','rx','ry','cx','cy','r','x1','y1','x2','y2','stroke-width','strokeWidth','opacity','fill-opacity','fillOpacity','stroke-opacity','strokeOpacity','stroke-dashoffset','strokeDashOffset','font-size','fontSize','font-weight','fontWeight','letter-spacing','letterSpacing','word-spacing','wordSpacing'],function(i,f){var g=f.charAt(0).toUpperCase()+f.substr(1);if($.cssProps){$.cssProps['svg'+g]=$.cssProps['svg-'+f]=f}$.fx.step['svg'+g]=$.fx.step['svg-'+f]=function(a){var b=$.svg._attrNames[f]||f;var c=a.elem.attributes.getNamedItem(b);if(!a.set){a.start=(c?parseFloat(c.nodeValue):0);var d=($.fn.jquery>='1.6'?'':a.options.curAnim['svg'+g]||a.options.curAnim['svg-'+f]);if(/^[+-]=/.exec(d)){a.end=a.start+parseFloat(d.replace(/=/,''))}$(a.elem).css(b,'');a.set=true}var e=(a.pos*(a.end-a.start)+a.start)+(a.unit=='%'?'%':'');(c?c.nodeValue=e:a.elem.setAttribute(b,e))}});$.fx.step['svgStrokeDashArray']=$.fx.step['svg-strokeDashArray']=$.fx.step['svgStroke-dasharray']=$.fx.step['svg-stroke-dasharray']=function(a){var b=a.elem.attributes.getNamedItem('stroke-dasharray');if(!a.set){a.start=parseDashArray(b?b.nodeValue:'');var c=($.fn.jquery>='1.6'?a.end:a.options.curAnim['svgStrokeDashArray']||a.options.curAnim['svg-strokeDashArray']||a.options.curAnim['svgStroke-dasharray']||a.options.curAnim['svg-stroke-dasharray']);a.end=parseDashArray(c);if(/^[+-]=/.exec(c)){c=c.split(/[, ]+/);if(c.length%2==1){var d=c.length;for(var i=0;i<d;i++){c.push(c[i])}}for(var i=0;i<c.length;i++){if(/^[+-]=/.exec(c[i])){a.end[i]=a.start[i]+parseFloat(c[i].replace(/=/,''))}}}a.set=true}var e=$.map(a.start,function(n,i){return(a.pos*(a.end[i]-n)+n)}).join(',');(b?b.nodeValue=e:a.elem.setAttribute('stroke-dasharray',e))};function parseDashArray(a){var b=a.split(/[, ]+/);for(var i=0;i<b.length;i++){b[i]=parseFloat(b[i]);if(isNaN(b[i])){b[i]=0}}if(b.length%2==1){var c=b.length;for(var i=0;i<c;i++){b.push(b[i])}}return b}$.fx.step['svgViewBox']=$.fx.step['svg-viewBox']=function(a){var b=a.elem.attributes.getNamedItem('viewBox');if(!a.set){a.start=parseViewBox(b?b.nodeValue:'');var c=($.fn.jquery>='1.6'?a.end:a.options.curAnim['svgViewBox']||a.options.curAnim['svg-viewBox']);a.end=parseViewBox(c);if(/^[+-]=/.exec(c)){c=c.split(/[, ]+/);while(c.length<4){c.push('0')}for(var i=0;i<4;i++){if(/^[+-]=/.exec(c[i])){a.end[i]=a.start[i]+parseFloat(c[i].replace(/=/,''))}}}a.set=true}var d=$.map(a.start,function(n,i){return(a.pos*(a.end[i]-n)+n)}).join(' ');(b?b.nodeValue=d:a.elem.setAttribute('viewBox',d))};function parseViewBox(a){var b=a.split(/[, ]+/);for(var i=0;i<b.length;i++){b[i]=parseFloat(b[i]);if(isNaN(b[i])){b[i]=0}}while(b.length<4){b.push(0)}return b}$.fx.step['svgTransform']=$.fx.step['svg-transform']=function(a){var b=a.elem.attributes.getNamedItem('transform');if(!a.set){a.start=parseTransform(b?b.nodeValue:'');a.end=parseTransform(a.end,a.start);a.set=true}var c='';for(var i=0;i<a.end.order.length;i++){switch(a.end.order.charAt(i)){case't':c+=' translate('+(a.pos*(a.end.translateX-a.start.translateX)+a.start.translateX)+','+(a.pos*(a.end.translateY-a.start.translateY)+a.start.translateY)+')';break;case's':c+=' scale('+(a.pos*(a.end.scaleX-a.start.scaleX)+a.start.scaleX)+','+(a.pos*(a.end.scaleY-a.start.scaleY)+a.start.scaleY)+')';break;case'r':c+=' rotate('+(a.pos*(a.end.rotateA-a.start.rotateA)+a.start.rotateA)+','+(a.pos*(a.end.rotateX-a.start.rotateX)+a.start.rotateX)+','+(a.pos*(a.end.rotateY-a.start.rotateY)+a.start.rotateY)+')';break;case'x':c+=' skewX('+(a.pos*(a.end.skewX-a.start.skewX)+a.start.skewX)+')';case'y':c+=' skewY('+(a.pos*(a.end.skewY-a.start.skewY)+a.start.skewY)+')';break;case'm':var d='';for(var j=0;j<6;j++){d+=','+(a.pos*(a.end.matrix[j]-a.start.matrix[j])+a.start.matrix[j])}c+=' matrix('+d.substr(1)+')';break}}(b?b.nodeValue=c:a.elem.setAttribute('transform',c))};function parseTransform(a,b){a=a||'';if(typeof a=='object'){a=a.nodeValue}var c=$.extend({translateX:0,translateY:0,scaleX:0,scaleY:0,rotateA:0,rotateX:0,rotateY:0,skewX:0,skewY:0,matrix:[0,0,0,0,0,0]},b||{});c.order='';var d=/([a-zA-Z]+)\(\s*([+-]?[\d\.]+)\s*(?:[\s,]\s*([+-]?[\d\.]+)\s*(?:[\s,]\s*([+-]?[\d\.]+)\s*(?:[\s,]\s*([+-]?[\d\.]+)\s*[\s,]\s*([+-]?[\d\.]+)\s*[\s,]\s*([+-]?[\d\.]+)\s*)?)?)?\)/g;var e=d.exec(a);while(e){switch(e[1]){case'translate':c.order+='t';c.translateX=parseFloat(e[2]);c.translateY=(e[3]?parseFloat(e[3]):0);break;case'scale':c.order+='s';c.scaleX=parseFloat(e[2]);c.scaleY=(e[3]?parseFloat(e[3]):c.scaleX);break;case'rotate':c.order+='r';c.rotateA=parseFloat(e[2]);c.rotateX=(e[3]?parseFloat(e[3]):0);c.rotateY=(e[4]?parseFloat(e[4]):0);break;case'skewX':c.order+='x';c.skewX=parseFloat(e[2]);break;case'skewY':c.order+='y';c.skewY=parseFloat(e[2]);break;case'matrix':c.order+='m';c.matrix=[parseFloat(e[2]),parseFloat(e[3]),parseFloat(e[4]),parseFloat(e[5]),parseFloat(e[6]),parseFloat(e[7])];break}e=d.exec(a)}if(c.order=='m'&&Math.abs(c.matrix[0])==Math.abs(c.matrix[3])&&c.matrix[1]!=0&&Math.abs(c.matrix[1])==Math.abs(c.matrix[2])){var f=Math.acos(c.matrix[0])*180/Math.PI;f=(c.matrix[1]<0?360-f:f);c.order='rt';c.rotateA=f;c.rotateX=c.rotateY=0;c.translateX=c.matrix[4];c.translateY=c.matrix[5]}return c}$.each(['fill','stroke'],function(i,e){var f=e.charAt(0).toUpperCase()+e.substr(1);$.fx.step['svg'+f]=$.fx.step['svg-'+e]=function(a){if(!a.set){a.start=$.svg._getColour(a.elem,e);var b=(a.end=='none');a.end=(b?$.svg._getColour(a.elem.parentNode,e):$.svg._getRGB(a.end));a.end[3]=b;$(a.elem).css(e,'');a.set=true}var c=a.elem.attributes.getNamedItem(e);var d='rgb('+[Math.min(Math.max(parseInt((a.pos*(a.end[0]-a.start[0]))+a.start[0],10),0),255),Math.min(Math.max(parseInt((a.pos*(a.end[1]-a.start[1]))+a.start[1],10),0),255),Math.min(Math.max(parseInt((a.pos*(a.end[2]-a.start[2]))+a.start[2],10),0),255)].join(',')+')';d=(a.end[3]&&a.state==1?'none':d);(c?c.nodeValue=d:a.elem.setAttribute(e,d))}});$.svg._getColour=function(a,b){a=$(a);var c;do{c=a.attr(b)||a.css(b);if((c!=''&&c!='none')||a.hasClass($.svg.markerClassName)){break}}while(a=a.parent());return $.svg._getRGB(c)};$.svg._getRGB=function(a){var b;if(a&&a.constructor==Array){return(a.length==3||a.length==4?a:h['none'])}if(b=/^rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)$/.exec(a)){return[parseInt(b[1],10),parseInt(b[2],10),parseInt(b[3],10)]}if(b=/^rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)$/.exec(a)){return[parseFloat(b[1])*2.55,parseFloat(b[2])*2.55,parseFloat(b[3])*2.55]}if(b=/^#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/.exec(a)){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}if(b=/^#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/.exec(a)){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}return h[$.trim(a).toLowerCase()]||h['none']};var h={'':[255,255,255,1],none:[255,255,255,1],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}})(jQuery); \ No newline at end of file
diff --git a/deck.js/libs/jquerysvg/jquery.svgdom.min.js b/deck.js/libs/jquerysvg/jquery.svgdom.min.js
new file mode 100644
index 0000000..3c280a5
--- /dev/null
+++ b/deck.js/libs/jquerysvg/jquery.svgdom.min.js
@@ -0,0 +1,7 @@
+/* http://keith-wood.name/svg.html
+ jQuery DOM compatibility for jQuery SVG v1.4.5.
+ Written by Keith Wood (kbwood{at}iinet.com.au) April 2009.
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
+ Please attribute the author if you use it. */
+(function($){$.fn.addClass=function(e){return function(d){d=d||'';return this.each(function(){if($.svg.isSVGElem(this)){var c=this;$.each(d.split(/\s+/),function(i,a){var b=(c.className?c.className.baseVal:c.getAttribute('class'));if($.inArray(a,b.split(/\s+/))==-1){b+=(b?' ':'')+a;(c.className?c.className.baseVal=b:c.setAttribute('class',b))}})}else{e.apply($(this),[d])}})}}($.fn.addClass);$.fn.removeClass=function(e){return function(d){d=d||'';return this.each(function(){if($.svg.isSVGElem(this)){var c=this;$.each(d.split(/\s+/),function(i,a){var b=(c.className?c.className.baseVal:c.getAttribute('class'));b=$.grep(b.split(/\s+/),function(n,i){return n!=a}).join(' ');(c.className?c.className.baseVal=b:c.setAttribute('class',b))})}else{e.apply($(this),[d])}})}}($.fn.removeClass);$.fn.toggleClass=function(c){return function(a,b){return this.each(function(){if($.svg.isSVGElem(this)){if(typeof b!=='boolean'){b=!$(this).hasClass(a)}$(this)[(b?'add':'remove')+'Class'](a)}else{c.apply($(this),[a,b])}})}}($.fn.toggleClass);$.fn.hasClass=function(d){return function(b){b=b||'';var c=false;this.each(function(){if($.svg.isSVGElem(this)){var a=(this.className?this.className.baseVal:this.getAttribute('class')).split(/\s+/);c=($.inArray(b,a)>-1)}else{c=(d.apply($(this),[b]))}return!c});return c}}($.fn.hasClass);$.fn.attr=function(h){return function(b,c,d){if(typeof b==='string'&&c===undefined){var e=h.apply(this,[b]);if(e&&e.baseVal&&e.baseVal.numberOfItems!=null){c='';e=e.baseVal;if(b=='transform'){for(var i=0;i<e.numberOfItems;i++){var f=e.getItem(i);switch(f.type){case 1:c+=' matrix('+f.matrix.a+','+f.matrix.b+','+f.matrix.c+','+f.matrix.d+','+f.matrix.e+','+f.matrix.f+')';break;case 2:c+=' translate('+f.matrix.e+','+f.matrix.f+')';break;case 3:c+=' scale('+f.matrix.a+','+f.matrix.d+')';break;case 4:c+=' rotate('+f.angle+')';break;case 5:c+=' skewX('+f.angle+')';break;case 6:c+=' skewY('+f.angle+')';break}}e=c.substring(1)}else{e=e.getItem(0).valueAsString}}return(e&&e.baseVal?e.baseVal.valueAsString:e)}var g=b;if(typeof b==='string'){g={};g[b]=c}return this.each(function(){if($.svg.isSVGElem(this)){for(var n in g){var a=($.isFunction(g[n])?g[n]():g[n]);(d?this.style[n]=a:this.setAttribute(n,a))}}else{h.apply($(this),[b,c,d])}})}}($.fn.attr);$.fn.removeAttr=function(b){return function(a){return this.each(function(){if($.svg.isSVGElem(this)){(this[a]&&this[a].baseVal?this[a].baseVal.value='':this.setAttribute(a,''))}else{b.apply($(this),[a])}})}}($.fn.removeAttr);$.extend($.cssNumber,{'stopOpacity':true,'strokeMitrelimit':true,'strokeOpacity':true});if($.cssProps){$.css=function(e){return function(a,b,c){var d=(b.match(/^svg.*/)?$(a).attr($.cssProps[b]||b):'');return d||e(a,b,c)}}($.css)}function anySVG(a){for(var i=0;i<a.length;i++){if(a[i].nodeType==1&&a[i].namespaceURI==$.svg.svgNS){return true}}return false}$.expr.relative['+']=function(d){return function(a,b,c){d(a,b,c||anySVG(a))}}($.expr.relative['+']);$.expr.relative['>']=function(d){return function(a,b,c){d(a,b,c||anySVG(a))}}($.expr.relative['>']);$.expr.relative['']=function(d){return function(a,b,c){d(a,b,c||anySVG(a))}}($.expr.relative['']);$.expr.relative['~']=function(d){return function(a,b,c){d(a,b,c||anySVG(a))}}($.expr.relative['~']);$.expr.find.ID=function(d){return function(a,b,c){return($.svg.isSVGElem(b)?[b.ownerDocument.getElementById(a[1])]:d(a,b,c))}}($.expr.find.ID);var j=document.createElement('div');j.appendChild(document.createComment(''));if(j.getElementsByTagName('*').length>0){$.expr.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==='*'){var d=[];for(var i=0;c[i]||c.item(i);i++){if((c[i]||c.item(i)).nodeType===1){d.push(c[i]||c.item(i))}}c=d}return c}}$.expr.preFilter.CLASS=function(a,b,c,d,f,g){a=' '+a[1].replace(/\\/g,'')+' ';if(g){return a}for(var i=0,elem={};elem!=null;i++){elem=b[i];if(!elem){try{elem=b.item(i)}catch(e){}}if(elem){var h=(!$.svg.isSVGElem(elem)?elem.className:(elem.className?elem.className.baseVal:'')||elem.getAttribute('class'));if(f^(h&&(' '+h+' ').indexOf(a)>-1)){if(!c)d.push(elem)}else if(c){b[i]=false}}}return false};$.expr.filter.CLASS=function(a,b){var c=(!$.svg.isSVGElem(a)?a.className:(a.className?a.className.baseVal:a.getAttribute('class')));return(' '+c+' ').indexOf(b)>-1};$.expr.filter.ATTR=function(g){return function(c,d){var e=null;if($.svg.isSVGElem(c)){e=d[1];$.expr.attrHandle[e]=function(a){var b=a.getAttribute(e);return b&&b.baseVal||b}}var f=g(c,d);if(e){$.expr.attrHandle[e]=null}return f}}($.expr.filter.ATTR)})(jQuery); \ No newline at end of file
diff --git a/deck.js/libs/jquerysvg/jquery.svgfilter.min.js b/deck.js/libs/jquerysvg/jquery.svgfilter.min.js
new file mode 100644
index 0000000..551bdc9
--- /dev/null
+++ b/deck.js/libs/jquerysvg/jquery.svgfilter.min.js
@@ -0,0 +1,7 @@
+/* http://keith-wood.name/svg.html
+ SVG filters for jQuery v1.4.5.
+ Written by Keith Wood (kbwood{at}iinet.com.au) August 2007.
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
+ Please attribute the author if you use it. */
+(function($){$.svg.addExtension('filters',SVGFilter);$.extend($.svg._wrapperClass.prototype,{filter:function(a,b,x,y,c,d,e){var f=this._args(arguments,['id','x','y','width','height']);return this._makeNode(f.parent,'filter',$.extend({id:f.id,x:f.x,y:f.y,width:f.width,height:f.height},f.settings||{}))}});function SVGFilter(a){this._wrapper=a}$.extend(SVGFilter.prototype,{distantLight:function(a,b,c,d,e){var f=this._wrapper._args(arguments,['result','azimuth','elevation']);return this._wrapper._makeNode(f.parent,'feDistantLight',$.extend({result:f.result,azimuth:f.azimuth,elevation:f.elevation},f.settings||{}))},pointLight:function(a,b,x,y,z,c){var d=this._wrapper._args(arguments,['result','x','y','z']);return this._wrapper._makeNode(d.parent,'fePointLight',$.extend({result:d.result,x:d.x,y:d.y,z:d.z},d.settings||{}))},spotLight:function(a,b,x,y,z,c,d,e,f){var g=this._wrapper._args(arguments,['result','x','y','z','toX','toY','toZ'],['toX']);var h=$.extend({result:g.result,x:g.x,y:g.y,z:g.z},(g.toX!=null?{pointsAtX:g.toX,pointsAtY:g.toY,pointsAtZ:g.toZ}:{}));return this._wrapper._makeNode(g.parent,'feSpotLight',$.extend(h,g.settings||{}))},blend:function(a,b,c,d,e,f){var g=this._wrapper._args(arguments,['result','mode','in1','in2']);return this._wrapper._makeNode(g.parent,'feBlend',$.extend({result:g.result,mode:g.mode,in_:g.in1,in2:g.in2},g.settings||{}))},colorMatrix:function(a,b,c,d,e,f){var g=this._wrapper._args(arguments,['result','in1','type','values']);if(isArray(g.values)){var h='';for(var i=0;i<g.values.length;i++){h+=(i==0?'':' ')+g.values[i].join(' ')}g.values=h}else if(typeof g.values=='object'){g.settings=g.values;g.values=null}var j=$.extend({result:g.result,in_:g.in1,type:g.type},(g.values!=null?{values:g.values}:{}));return this._wrapper._makeNode(g.parent,'feColorMatrix',$.extend(j,g.settings||{}))},componentTransfer:function(a,b,c,d){var e=this._wrapper._args(arguments,['result','functions']);var f=this._wrapper._makeNode(e.parent,'feComponentTransfer',$.extend({result:e.result},e.settings||{}));var g=['R','G','B','A'];for(var i=0;i<Math.min(4,e.functions.length);i++){var h=e.functions[i];var j=$.extend({type:h[0]},(h[0]=='table'||h[0]=='discrete'?{tableValues:h[1].join(' ')}:(h[0]=='linear'?{slope:h[1],intercept:h[2]}:(h[0]=='gamma'?{amplitude:h[1],exponent:h[2],offset:h[3]}:{}))));this._wrapper._makeNode(f,'feFunc'+g[i],j)}return f},composite:function(a,b,c,d,e,f,g,h,i,j){var k=this._wrapper._args(arguments,['result','operator','in1','in2','k1','k2','k3','k4'],['k1']);var l=$.extend({result:k.result,operator:k.operator,'in':k.in1,in2:k.in2},(k.k1!=null?{k1:k.k1,k2:k.k2,k3:k.k3,k4:k.k4}:{}));return this._wrapper._makeNode(k.parent,'feComposite',$.extend(l,k.settings||{}))},convolveMatrix:function(a,b,c,d,e){var f=this._wrapper._args(arguments,['result','order','matrix']);var g='';for(var i=0;i<f.matrix.length;i++){g+=(i==0?'':' ')+f.matrix[i].join(' ')}f.matrix=g;return this._wrapper._makeNode(f.parent,'feConvolveMatrix',$.extend({result:f.result,order:f.order,kernelMatrix:f.matrix},f.settings||{}))},diffuseLighting:function(a,b,c,d){var e=this._wrapper._args(arguments,['result','colour'],['colour']);return this._wrapper._makeNode(e.parent,'feDiffuseLighting',$.extend($.extend({result:e.result},(e.colour?{lightingColor:e.colour}:{})),e.settings||{}))},displacementMap:function(a,b,c,d,e){var f=this._wrapper._args(arguments,['result','in1','in2']);return this._wrapper._makeNode(f.parent,'feDisplacementMap',$.extend({result:f.result,in_:f.in1,in2:f.in2},f.settings||{}))},flood:function(a,b,x,y,c,d,e,f,g){var h=this._wrapper._args(arguments,['result','x','y','width','height','colour','opacity']);if(arguments.length<6){h.colour=h.x;h.opacity=h.y;h.settings=h.width;h.x=null}var i=$.extend({result:h.result,floodColor:h.colour,floodOpacity:h.opacity},(h.x!=null?{x:h.x,y:h.y,width:h.width,height:h.height}:{}));return this._wrapper._makeNode(h.parent,'feFlood',$.extend(i,h.settings||{}))},gaussianBlur:function(a,b,c,d,e,f){var g=this._wrapper._args(arguments,['result','in1','stdDevX','stdDevY'],['stdDevY']);return this._wrapper._makeNode(g.parent,'feGaussianBlur',$.extend({result:g.result,in_:g.in1,stdDeviation:g.stdDevX+(g.stdDevY?' '+g.stdDevY:'')},g.settings||{}))},image:function(a,b,c,d){var e=this._wrapper._args(arguments,['result','href']);var f=this._wrapper._makeNode(e.parent,'feImage',$.extend({result:e.result},e.settings||{}));f.setAttributeNS($.svg.xlinkNS,'href',e.href);return f},merge:function(a,b,c,d){var e=this._wrapper._args(arguments,['result','refs']);var f=this._wrapper._makeNode(e.parent,'feMerge',$.extend({result:e.result},e.settings||{}));for(var i=0;i<e.refs.length;i++){this._wrapper._makeNode(f,'feMergeNode',{in_:e.refs[i]})}return f},morphology:function(a,b,c,d,e,f,g){var h=this._wrapper._args(arguments,['result','in1','operator','radiusX','radiusY'],['radiusY']);return this._wrapper._makeNode(h.parent,'feMorphology',$.extend({result:h.result,in_:h.in1,operator:h.operator,radius:h.radiusX+(h.radiusY?' '+h.radiusY:'')},h.settings||{}))},offset:function(a,b,c,d,e,f){var g=this._wrapper._args(arguments,['result','in1','dx','dy']);return this._wrapper._makeNode(g.parent,'feOffset',$.extend({result:g.result,in_:g.in1,dx:g.dx,dy:g.dy},g.settings||{}))},specularLighting:function(a,b,c,d,e,f,g){var h=this._wrapper._args(arguments,['result','in1','surfaceScale','specularConstant','specularExponent'],['surfaceScale','specularConstant','specularExponent']);return this._wrapper._makeNode(h.parent,'feSpecularLighting',$.extend({result:h.result,in_:h.in1,surfaceScale:h.surfaceScale,specularConstant:h.specularConstant,specularExponent:h.specularExponent},h.settings||{}))},tile:function(a,b,c,x,y,d,e,f){var g=this._wrapper._args(arguments,['result','in1','x','y','width','height']);return this._wrapper._makeNode(g.parent,'feTile',$.extend({result:g.result,in_:g.in1,x:g.x,y:g.y,width:g.width,height:g.height},g.settings||{}))},turbulence:function(a,b,c,d,e,f){var g=this._wrapper._args(arguments,['result','type','baseFreq','octaves'],['octaves']);return this._wrapper._makeNode(g.parent,'feTurbulence',$.extend({result:g.result,type:g.type,baseFrequency:g.baseFreq,numOctaves:g.octaves},g.settings||{}))}});function isArray(a){return(a&&a.constructor==Array)}})(jQuery) \ No newline at end of file
diff --git a/deck.js/libs/jquerysvg/jquery.svggraph.min.js b/deck.js/libs/jquerysvg/jquery.svggraph.min.js
new file mode 100644
index 0000000..1cecc0e
--- /dev/null
+++ b/deck.js/libs/jquerysvg/jquery.svggraph.min.js
@@ -0,0 +1,7 @@
+/* http://keith-wood.name/svg.html
+ SVG graphing extension for jQuery v1.4.5.
+ Written by Keith Wood (kbwood{at}iinet.com.au) August 2007.
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
+ Please attribute the author if you use it. */
+(function($){$.svg.addExtension('graph',SVGGraph);$.svg.graphing=new SVGGraphing();function SVGGraphing(){this.regional=[];this.regional['']={percentageText:'Percentage'};this.region=this.regional['']}$.extend(SVGGraphing.prototype,{_chartTypes:[],addChartType:function(a,b){this._chartTypes[a]=b},chartTypes:function(){return this._chartTypes}});function SVGGraph(a){this._wrapper=a;this._drawNow=false;for(var b in $.svg.graphing._chartTypes){this._chartType=$.svg.graphing._chartTypes[b];break}this._chartOptions={};this._title={value:'',offset:25,settings:{textAnchor:'middle'}};this._area=[0.1,0.1,0.8,0.9];this._chartFormat={fill:'none',stroke:'black'};this._gridlines=[];this._series=[];this._onstatus=null;this._chartCont=this._wrapper.svg(0,0,0,0,{class_:'svg-graph'});this.xAxis=new SVGGraphAxis(this);this.xAxis.title('',40);this.yAxis=new SVGGraphAxis(this);this.yAxis.title('',40);this.x2Axis=null;this.y2Axis=null;this.legend=new SVGGraphLegend(this);this._drawNow=true}$.extend(SVGGraph.prototype,{X:0,Y:1,W:2,H:3,L:0,T:1,R:2,B:3,_percentageAxis:new SVGGraphAxis(this,$.svg.graphing.region.percentageText,0,100,10,0),container:function(a){if(arguments.length==0){return this._chartCont}this._chartCont=a;return this},chartType:function(a,b){return(arguments.length==0?this.type():this.type(a,b))},type:function(a,b){if(arguments.length==0){return this._chartType}var c=$.svg.graphing._chartTypes[a];if(c){this._chartType=c;this._chartOptions=$.extend({},b||{})}this._drawGraph();return this},chartOptions:function(a){return(arguments.length==0?this.options():this.options(a))},options:function(a){if(arguments.length==0){return this._chartOptions}this._chartOptions=$.extend({},a);this._drawGraph();return this},chartFormat:function(a,b,c){return(arguments.length==0?this.format():this.format(a,b,c))},format:function(a,b,c){if(arguments.length==0){return this._chartFormat}if(typeof b=='object'){c=b;b=null}this._chartFormat=$.extend({fill:a},(b?{stroke:b}:{}),c||{});this._drawGraph();return this},chartArea:function(a,b,c,d){return(arguments.length==0?this.area():this.area(a,b,c,d))},area:function(a,b,c,d){if(arguments.length==0){return this._area}this._area=(isArray(a)?a:[a,b,c,d]);this._drawGraph();return this},gridlines:function(a,b){if(arguments.length==0){return this._gridlines}this._gridlines=[(typeof a=='string'?{stroke:a}:a),(typeof b=='string'?{stroke:b}:b)];if(this._gridlines[0]==null&&this._gridlines[1]==null){this._gridlines=[]}this._drawGraph();return this},title:function(a,b,c,d){if(arguments.length==0){return this._title}if(typeof b!='number'){d=c;c=b;b=null}if(typeof c!='string'){d=c;c=null}this._title={value:a,offset:b||this._title.offset,settings:$.extend({textAnchor:'middle'},(c?{fill:c}:{}),d||{})};this._drawGraph();return this},addSeries:function(a,b,c,d,e,f){this._series.push(new SVGGraphSeries(this,a,b,c,d,e,f));this._drawGraph();return this},series:function(i){return(arguments.length>0?this._series[i]:null)||this._series},noDraw:function(){this._drawNow=false;return this},redraw:function(){this._drawNow=true;this._drawGraph();return this},status:function(a){this._onstatus=a;return this},_drawGraph:function(){if(!this._drawNow){return}while(this._chartCont.firstChild){this._chartCont.removeChild(this._chartCont.firstChild)}if(!this._chartCont.parent){this._wrapper._svg.appendChild(this._chartCont)}if(!this._chartCont.width){this._chartCont.setAttribute('width',parseInt(this._chartCont.getAttribute('width'),10)||this._wrapper._width())}else if(this._chartCont.width.baseVal){this._chartCont.width.baseVal.value=this._chartCont.width.baseVal.value||this._wrapper._width()}else{this._chartCont.width=this._chartCont.width||this._wrapper._width()}if(!this._chartCont.height){this._chartCont.setAttribute('height',parseInt(this._chartCont.getAttribute('height'),10)||this._wrapper._height())}else if(this._chartCont.height.baseVal){this._chartCont.height.baseVal.value=this._chartCont.height.baseVal.value||this._wrapper._height()}else{this._chartCont.height=this._chartCont.height||this._wrapper._height()}this._chartType.drawGraph(this)},_getValue:function(a,b){return(!a[b]?parseInt(a.getAttribute(b),10):(a[b].baseVal?a[b].baseVal.value:a[b]))},_drawTitle:function(){this._wrapper.text(this._chartCont,this._getValue(this._chartCont,'width')/2,this._title.offset,this._title.value,this._title.settings)},_getDims:function(a){a=a||this._area;var b=this._getValue(this._chartCont,'width');var c=this._getValue(this._chartCont,'height');var d=(a[this.L]>1?a[this.L]:b*a[this.L]);var e=(a[this.T]>1?a[this.T]:c*a[this.T]);var f=(a[this.R]>1?a[this.R]:b*a[this.R])-d;var g=(a[this.B]>1?a[this.B]:c*a[this.B])-e;return[d,e,f,g]},_drawChartBackground:function(a,b){var c=this._wrapper.group(this._chartCont,{class_:'background'});var d=this._getDims();this._wrapper.rect(c,d[this.X],d[this.Y],d[this.W],d[this.H],this._chartFormat);if(this._gridlines[0]&&this.yAxis._ticks.major&&!b){this._drawGridlines(c,this.yAxis,true,d,this._gridlines[0])}if(this._gridlines[1]&&this.xAxis._ticks.major&&!a){this._drawGridlines(c,this.xAxis,false,d,this._gridlines[1])}return c},_drawGridlines:function(a,b,c,d,e){var g=this._wrapper.group(a,e);var f=(c?d[this.H]:d[this.W])/(b._scale.max-b._scale.min);var h=Math.floor(b._scale.min/b._ticks.major)*b._ticks.major;h=(h<b._scale.min?h+b._ticks.major:h);while(h<=b._scale.max){var v=(c?b._scale.max-h:h-b._scale.min)*f+(c?d[this.Y]:d[this.X]);this._wrapper.line(g,(c?d[this.X]:v),(c?v:d[this.Y]),(c?d[this.X]+d[this.W]:v),(c?v:d[this.Y]+d[this.H]));h+=b._ticks.major}},_drawAxes:function(a){var b=this._getDims();if(this.xAxis&&!a){if(this.xAxis._title){this._wrapper.text(this._chartCont,b[this.X]+b[this.W]/2,b[this.Y]+b[this.H]+this.xAxis._titleOffset,this.xAxis._title,this.xAxis._titleFormat)}this._drawAxis(this.xAxis,'xAxis',b[this.X],b[this.Y]+b[this.H],b[this.X]+b[this.W],b[this.Y]+b[this.H])}if(this.yAxis){if(this.yAxis._title){this._wrapper.text(this._chartCont,0,0,this.yAxis._title,$.extend({textAnchor:'middle',transform:'translate('+(b[this.X]-this.yAxis._titleOffset)+','+(b[this.Y]+b[this.H]/2)+') rotate(-90)'},this.yAxis._titleFormat||{}))}this._drawAxis(this.yAxis,'yAxis',b[this.X],b[this.Y],b[this.X],b[this.Y]+b[this.H])}if(this.x2Axis&&!a){if(this.x2Axis._title){this._wrapper.text(this._chartCont,b[this.X]+b[this.W]/2,b[this.X]-this.x2Axis._titleOffset,this.x2Axis._title,this.x2Axis._titleFormat)}this._drawAxis(this.x2Axis,'x2Axis',b[this.X],b[this.Y],b[this.X]+b[this.W],b[this.Y])}if(this.y2Axis){if(this.y2Axis._title){this._wrapper.text(this._chartCont,0,0,this.y2Axis._title,$.extend({textAnchor:'middle',transform:'translate('+(b[this.X]+b[this.W]+this.y2Axis._titleOffset)+','+(b[this.Y]+b[this.H]/2)+') rotate(-90)'},this.y2Axis._titleFormat||{}))}this._drawAxis(this.y2Axis,'y2Axis',b[this.X]+b[this.W],b[this.Y],b[this.X]+b[this.W],b[this.Y]+b[this.H])}},_drawAxis:function(a,b,c,d,e,f){var g=(d==f);var h=this._wrapper.group(this._chartCont,$.extend({class_:b},a._lineFormat));var i=this._wrapper.group(this._chartCont,$.extend({class_:b+'Labels',textAnchor:(g?'middle':'end')},a._labelFormat));this._wrapper.line(h,c,d,e,f);if(a._ticks.major){var j=(e>(this._getValue(this._chartCont,'width')/2)&&f>(this._getValue(this._chartCont,'height')/2));var k=(g?e-c:f-d)/(a._scale.max-a._scale.min);var l=a._ticks.size;var m=Math.floor(a._scale.min/a._ticks.major)*a._ticks.major;m=(m<a._scale.min?m+a._ticks.major:m);var n=(!a._ticks.minor?a._scale.max+1:Math.floor(a._scale.min/a._ticks.minor)*a._ticks.minor);n=(n<a._scale.min?n+a._ticks.minor:n);var o=this._getTickOffsets(a,j);var p=0;while(m<=a._scale.max||n<=a._scale.max){var q=Math.min(m,n);var r=(q==m?l:l/2);var v=(g?c:d)+(g?q-a._scale.min:a._scale.max-q)*k;this._wrapper.line(h,(g?v:c+r*o[0]),(g?d+r*o[0]:v),(g?v:c+r*o[1]),(g?d+r*o[1]:v));if(q==m){this._wrapper.text(i,(g?v:c-l),(g?d+2*l:v),(a._labels?a._labels[p++]:''+q))}m+=(q==m?a._ticks.major:0);n+=(q==n?a._ticks.minor:0)}}},_getTickOffsets:function(a,b){return[(a._ticks.position==(b?'in':'out')||a._ticks.position=='both'?-1:0),(a._ticks.position==(b?'out':'in')||a._ticks.position=='both'?+1:0),]},_getPercentageAxis:function(){this._percentageAxis._title=$.svg.graphing.region.percentageText;return this._percentageAxis},_getTotals:function(){var a=[];var b=(this._series.length?this._series[0]._values.length:0);for(var i=0;i<b;i++){a[i]=0;for(var j=0;j<this._series.length;j++){a[i]+=this._series[j]._values[i]}}return a},_drawLegend:function(){if(!this.legend._show){return}var g=this._wrapper.group(this._chartCont,{class_:'legend'});var a=this._getDims(this.legend._area);this._wrapper.rect(g,a[this.X],a[this.Y],a[this.W],a[this.H],this.legend._bgSettings);var b=a[this.W]>a[this.H];var c=this._series.length;var d=(b?a[this.W]:a[this.H])/c;var e=a[this.X]+5;var f=a[this.Y]+((b?a[this.H]:d)+this.legend._sampleSize)/2;for(var i=0;i<c;i++){var h=this._series[i];this._wrapper.rect(g,e+(b?i*d:0),f+(b?0:i*d)-this.legend._sampleSize,this.legend._sampleSize,this.legend._sampleSize,{fill:h._fill,stroke:h._stroke,strokeWidth:1});this._wrapper.text(g,e+(b?i*d:0)+this.legend._sampleSize+5,f+(b?0:i*d),h._name,this.legend._textSettings)}},_showStatus:function(a,b,c){var d=this._onstatus;if(this._onstatus){$(a).hover(function(){d.apply(this,[b,c])},function(){d.apply(this,['',0])})}}});function SVGGraphSeries(a,b,c,d,e,f,g){if(typeof b!='string'){g=f;f=e;e=d;d=c;c=b;b=null}if(typeof e!='string'){g=f;f=e;e=null}if(typeof f!='number'){g=f;f=null}this._graph=a;this._name=b||'';this._values=c||[];this._axis=1;this._fill=d||'green';this._stroke=e||'black';this._strokeWidth=f||1;this._settings=g||{}}$.extend(SVGGraphSeries.prototype,{name:function(a){if(arguments.length==0){return this._name}this._name=a;this._graph._drawGraph();return this},values:function(a,b){if(arguments.length==0){return this._values}if(isArray(a)){b=a;a=null}this._name=a||this._name;this._values=b;this._graph._drawGraph();return this},format:function(a,b,c,d){if(arguments.length==0){return $.extend({fill:this._fill,stroke:this._stroke,strokeWidth:this._strokeWidth},this._settings)}if(typeof b!='string'){d=c;c=b;b=null}if(typeof c!='number'){d=c;c=null}this._fill=a||this._fill;this._stroke=b||this._stroke;this._strokeWidth=c||this._strokeWidth;$.extend(this._settings,d||{});this._graph._drawGraph();return this},end:function(){return this._graph}});function SVGGraphAxis(a,b,c,d,e,f){this._graph=a;this._title=b||'';this._titleFormat={};this._titleOffset=0;this._labels=null;this._labelFormat={};this._lineFormat={stroke:'black',strokeWidth:1};this._ticks={major:e||10,minor:f||0,size:10,position:'out'};this._scale={min:c||0,max:d||100};this._crossAt=0}$.extend(SVGGraphAxis.prototype,{scale:function(a,b){if(arguments.length==0){return this._scale}this._scale.min=a;this._scale.max=b;this._graph._drawGraph();return this},ticks:function(a,b,c,d){if(arguments.length==0){return this._ticks}if(typeof c=='string'){d=c;c=null}this._ticks.major=a;this._ticks.minor=b;this._ticks.size=c||this._ticks.size;this._ticks.position=d||this._ticks.position;this._graph._drawGraph();return this},title:function(a,b,c,d){if(arguments.length==0){return{title:this._title,offset:this._titleOffset,format:this._titleFormat}}if(typeof b!='number'){d=c;c=b;b=null}if(typeof c!='string'){d=c;c=null}this._title=a;this._titleOffset=(b!=null?b:this._titleOffset);if(c||d){this._titleFormat=$.extend(d||{},(c?{fill:c}:{}))}this._graph._drawGraph();return this},labels:function(a,b,c){if(arguments.length==0){return{labels:this._labels,format:this._labelFormat}}if(typeof b!='string'){c=b;b=null}this._labels=a;if(b||c){this._labelFormat=$.extend(c||{},(b?{fill:b}:{}))}this._graph._drawGraph();return this},line:function(a,b,c){if(arguments.length==0){return this._lineFormat}if(typeof b=='object'){c=b;b=null}$.extend(this._lineFormat,{stroke:a},(b?{strokeWidth:b}:{}),c||{});this._graph._drawGraph();return this},end:function(){return this._graph}});function SVGGraphLegend(a,b,c){this._graph=a;this._show=true;this._area=[0.9,0.1,1.0,0.9];this._sampleSize=15;this._bgSettings=b||{stroke:'gray'};this._textSettings=c||{}}$.extend(SVGGraphLegend.prototype,{show:function(a){if(arguments.length==0){return this._show}this._show=a;this._graph._drawGraph();return this},area:function(a,b,c,d){if(arguments.length==0){return this._area}this._area=(isArray(a)?a:[a,b,c,d]);this._graph._drawGraph();return this},settings:function(a,b,c){if(arguments.length==0){return{sampleSize:this._sampleSize,bgSettings:this._bgSettings,textSettings:this._textSettings}}if(typeof a!='number'){c=b;b=a;a=null}this._sampleSize=a||this._sampleSize;this._bgSettings=b;this._textSettings=c||this._textSettings;this._graph._drawGraph();return this},end:function(){return this._graph}});function roundNumber(a,b){return Math.round(a*Math.pow(10,b))/Math.pow(10,b)}var B=['barWidth (number) - the width of each bar','barGap (number) - the gap between sets of bars'];function SVGColumnChart(){}$.extend(SVGColumnChart.prototype,{title:function(){return'Basic column chart'},description:function(){return'Compare sets of values as vertical bars with grouped categories.'},options:function(){return B},drawGraph:function(a){a._drawChartBackground(true);var b=a._chartOptions.barWidth||10;var c=a._chartOptions.barGap||10;var d=a._series.length;var e=(d?(a._series[0])._values.length:0);var f=a._getDims();var g=f[a.W]/((d*b+c)*e+c);var h=f[a.H]/(a.yAxis._scale.max-a.yAxis._scale.min);this._chart=a._wrapper.group(a._chartCont,{class_:'chart'});for(var i=0;i<d;i++){this._drawSeries(a,i,d,b,c,f,g,h)}a._drawTitle();a._drawAxes(true);this._drawXAxis(a,d,e,b,c,f,g);a._drawLegend()},_drawSeries:function(a,b,c,d,e,f,h,j){var k=a._series[b];var g=a._wrapper.group(this._chart,$.extend({class_:'series'+b,fill:k._fill,stroke:k._stroke,strokeWidth:k._strokeWidth},k._settings||{}));for(var i=0;i<k._values.length;i++){var r=a._wrapper.rect(g,f[a.X]+h*(e+i*(c*d+e)+(b*d)),f[a.Y]+j*(a.yAxis._scale.max-k._values[i]),h*d,j*k._values[i]);a._showStatus(r,k._name,k._values[i])}},_drawXAxis:function(a,b,c,d,e,f,g){var h=a.xAxis;if(h._title){a._wrapper.text(a._chartCont,f[a.X]+f[a.W]/2,f[a.Y]+f[a.H]+h._titleOffset,h._title,$.extend({textAnchor:'middle'},h._titleFormat||{}))}var j=a._wrapper.group(a._chartCont,$.extend({class_:'xAxis'},h._lineFormat));var k=a._wrapper.group(a._chartCont,$.extend({class_:'xAxisLabels',textAnchor:'middle'},h._labelFormat));a._wrapper.line(j,f[a.X],f[a.Y]+f[a.H],f[a.X]+f[a.W],f[a.Y]+f[a.H]);if(h._ticks.major){var l=a._getTickOffsets(h,true);for(var i=1;i<c;i++){var x=f[a.X]+g*(e/2+i*(b*d+e));a._wrapper.line(j,x,f[a.Y]+f[a.H]+l[0]*h._ticks.size,x,f[a.Y]+f[a.H]+l[1]*h._ticks.size)}for(var i=0;i<c;i++){var x=f[a.X]+g*(e/2+(i+0.5)*(b*d+e));a._wrapper.text(k,x,f[a.Y]+f[a.H]+2*h._ticks.size,(h._labels?h._labels[i]:''+i))}}}});function SVGStackedColumnChart(){}$.extend(SVGStackedColumnChart.prototype,{title:function(){return'Stacked column chart'},description:function(){return'Compare sets of values as vertical bars showing '+'relative contributions to the whole for each category.'},options:function(){return B},drawGraph:function(a){var b=a._drawChartBackground(true,true);var c=a._getDims();if(a._gridlines[0]&&a.xAxis._ticks.major){a._drawGridlines(b,a._getPercentageAxis(),true,c,a._gridlines[0])}var d=a._chartOptions.barWidth||10;var e=a._chartOptions.barGap||10;var f=a._series.length;var g=(f?(a._series[0])._values.length:0);var h=c[a.W]/((d+e)*g+e);var i=c[a.H];this._chart=a._wrapper.group(a._chartCont,{class_:'chart'});this._drawColumns(a,f,g,d,e,c,h,i);a._drawTitle();a._wrapper.text(a._chartCont,0,0,$.svg.graphing.region.percentageText,$.extend({textAnchor:'middle',transform:'translate('+(c[a.X]-a.yAxis._titleOffset)+','+(c[a.Y]+c[a.H]/2)+') rotate(-90)'},a.yAxis._titleFormat||{}));var j=$.extend({},a._getPercentageAxis());$.extend(j._labelFormat,a.yAxis._labelFormat||{});a._drawAxis(j,'yAxis',c[a.X],c[a.Y],c[a.X],c[a.Y]+c[a.H]);this._drawXAxis(a,g,d,e,c,h);a._drawLegend()},_drawColumns:function(a,b,c,d,e,f,h,j){var k=a._getTotals();var l=[];for(var i=0;i<c;i++){l[i]=0}for(var s=0;s<b;s++){var m=a._series[s];var g=a._wrapper.group(this._chart,$.extend({class_:'series'+s,fill:m._fill,stroke:m._stroke,strokeWidth:m._strokeWidth},m._settings||{}));for(var i=0;i<m._values.length;i++){l[i]+=m._values[i];var r=a._wrapper.rect(g,f[a.X]+h*(e+i*(d+e)),f[a.Y]+j*(k[i]-l[i])/k[i],h*d,j*m._values[i]/k[i]);a._showStatus(r,m._name,roundNumber(m._values[i]/k[i]*100,2))}}},_drawXAxis:function(a,b,c,d,e,f){var g=a.xAxis;if(g._title){a._wrapper.text(a._chartCont,e[a.X]+e[a.W]/2,e[a.Y]+e[a.H]+g._titleOffset,g._title,$.extend({textAnchor:'middle'},g._titleFormat||{}))}var h=a._wrapper.group(a._chartCont,$.extend({class_:'xAxis'},g._lineFormat));var j=a._wrapper.group(a._chartCont,$.extend({class_:'xAxisLabels',textAnchor:'middle'},g._labelFormat));a._wrapper.line(h,e[a.X],e[a.Y]+e[a.H],e[a.X]+e[a.W],e[a.Y]+e[a.H]);if(g._ticks.major){var k=a._getTickOffsets(g,true);for(var i=1;i<b;i++){var x=e[a.X]+f*(d/2+i*(c+d));a._wrapper.line(h,x,e[a.Y]+e[a.H]+k[0]*g._ticks.size,x,e[a.Y]+e[a.H]+k[1]*g._ticks.size)}for(var i=0;i<b;i++){var x=e[a.X]+f*(d/2+(i+0.5)*(c+d));a._wrapper.text(j,x,e[a.Y]+e[a.H]+2*g._ticks.size,(g._labels?g._labels[i]:''+i))}}}});function SVGRowChart(){}$.extend(SVGRowChart.prototype,{title:function(){return'Basic row chart'},description:function(){return'Compare sets of values as horizontal rows with grouped categories.'},options:function(){return B},drawGraph:function(a){var b=a._drawChartBackground(true,true);var c=a._getDims();a._drawGridlines(b,a.yAxis,false,c,a._gridlines[0]);var d=a._chartOptions.barWidth||10;var e=a._chartOptions.barGap||10;var f=a._series.length;var g=(f?(a._series[0])._values.length:0);var h=c[a.W]/(a.yAxis._scale.max-a.yAxis._scale.min);var j=c[a.H]/((f*d+e)*g+e);this._chart=a._wrapper.group(a._chartCont,{class_:'chart'});for(var i=0;i<f;i++){this._drawSeries(a,i,f,d,e,c,h,j)}a._drawTitle();this._drawAxes(a,f,g,d,e,c,j);a._drawLegend()},_drawSeries:function(a,b,c,d,e,f,h,j){var k=a._series[b];var g=a._wrapper.group(this._chart,$.extend({class_:'series'+b,fill:k._fill,stroke:k._stroke,strokeWidth:k._strokeWidth},k._settings||{}));for(var i=0;i<k._values.length;i++){var r=a._wrapper.rect(g,f[a.X]+h*(0-a.yAxis._scale.min),f[a.Y]+j*(e+i*(c*d+e)+(b*d)),h*k._values[i],j*d);a._showStatus(r,k._name,k._values[i])}},_drawAxes:function(a,b,c,d,e,f,g){var h=a.yAxis;if(h){if(h._title){a._wrapper.text(a._chartCont,f[a.X]+f[a.W]/2,f[a.Y]+f[a.H]+h._titleOffset,h._title,h._titleFormat)}a._drawAxis(h,'xAxis',f[a.X],f[a.Y]+f[a.H],f[a.X]+f[a.W],f[a.Y]+f[a.H])}var h=a.xAxis;if(h._title){a._wrapper.text(a._chartCont,0,0,h._title,$.extend({textAnchor:'middle',transform:'translate('+(f[a.X]-h._titleOffset)+','+(f[a.Y]+f[a.H]/2)+') rotate(-90)'},h._titleFormat||{}))}var j=a._wrapper.group(a._chartCont,$.extend({class_:'yAxis'},h._lineFormat));var k=a._wrapper.group(a._chartCont,$.extend({class_:'yAxisLabels',textAnchor:'end'},h._labelFormat));a._wrapper.line(j,f[a.X],f[a.Y],f[a.X],f[a.Y]+f[a.H]);if(h._ticks.major){var l=a._getTickOffsets(h,false);for(var i=1;i<c;i++){var y=f[a.Y]+g*(e/2+i*(b*d+e));a._wrapper.line(j,f[a.X]+l[0]*h._ticks.size,y,f[a.X]+l[1]*h._ticks.size,y)}for(var i=0;i<c;i++){var y=f[a.Y]+g*(e/2+(i+0.5)*(b*d+e));a._wrapper.text(k,f[a.X]-h._ticks.size,y,(h._labels?h._labels[i]:''+i))}}}});function SVGStackedRowChart(){}$.extend(SVGStackedRowChart.prototype,{title:function(){return'Stacked row chart'},description:function(){return'Compare sets of values as horizontal bars showing '+'relative contributions to the whole for each category.'},options:function(){return B},drawGraph:function(a){var b=a._drawChartBackground(true,true);var c=a._getDims();if(a._gridlines[0]&&a.xAxis._ticks.major){a._drawGridlines(b,a._getPercentageAxis(),false,c,a._gridlines[0])}var d=a._chartOptions.barWidth||10;var e=a._chartOptions.barGap||10;var f=a._series.length;var g=(f?(a._series[0])._values.length:0);var h=c[a.W];var i=c[a.H]/((d+e)*g+e);this._chart=a._wrapper.group(a._chartCont,{class_:'chart'});this._drawRows(a,f,g,d,e,c,h,i);a._drawTitle();a._wrapper.text(a._chartCont,c[a.X]+c[a.W]/2,c[a.Y]+c[a.H]+a.xAxis._titleOffset,$.svg.graphing.region.percentageText,$.extend({textAnchor:'middle'},a.yAxis._titleFormat||{}));var j=$.extend({},a._getPercentageAxis());$.extend(j._labelFormat,a.yAxis._labelFormat||{});a._drawAxis(j,'xAxis',c[a.X],c[a.Y]+c[a.H],c[a.X]+c[a.W],c[a.Y]+c[a.H]);this._drawYAxis(a,g,d,e,c,i);a._drawLegend()},_drawRows:function(a,b,c,d,e,f,h,j){var k=a._getTotals();var l=[];for(var i=0;i<c;i++){l[i]=0}for(var s=0;s<b;s++){var m=a._series[s];var g=a._wrapper.group(this._chart,$.extend({class_:'series'+s,fill:m._fill,stroke:m._stroke,strokeWidth:m._strokeWidth},m._settings||{}));for(var i=0;i<m._values.length;i++){var r=a._wrapper.rect(g,f[a.X]+h*l[i]/k[i],f[a.Y]+j*(e+i*(d+e)),h*m._values[i]/k[i],j*d);a._showStatus(r,m._name,roundNumber(m._values[i]/k[i]*100,2));l[i]+=m._values[i]}}},_drawYAxis:function(a,b,c,d,e,f){var g=a.xAxis;if(g._title){a._wrapper.text(a._chartCont,0,0,g._title,$.extend({textAnchor:'middle',transform:'translate('+(e[a.X]-g._titleOffset)+','+(e[a.Y]+e[a.H]/2)+') rotate(-90)'},g._titleFormat||{}))}var h=a._wrapper.group(a._chartCont,$.extend({class_:'yAxis'},g._lineFormat));var j=a._wrapper.group(a._chartCont,$.extend({class_:'yAxisLabels',textAnchor:'end'},g._labelFormat));a._wrapper.line(h,e[a.X],e[a.Y],e[a.X],e[a.Y]+e[a.H]);if(g._ticks.major){var k=a._getTickOffsets(g,false);for(var i=1;i<b;i++){var y=e[a.Y]+f*(d/2+i*(c+d));a._wrapper.line(h,e[a.X]+k[0]*g._ticks.size,y,e[a.X]+k[1]*g._ticks.size,y)}for(var i=0;i<b;i++){var y=e[a.Y]+f*(d/2+(i+0.5)*(c+d));a._wrapper.text(j,e[a.X]-g._ticks.size,y,(g._labels?g._labels[i]:''+i))}}}});function SVGLineChart(){}$.extend(SVGLineChart.prototype,{title:function(){return'Basic line chart'},description:function(){return'Compare sets of values as continuous lines.'},options:function(){return[]},drawGraph:function(a){a._drawChartBackground();var b=a._getDims();var c=b[a.W]/(a.xAxis._scale.max-a.xAxis._scale.min);var d=b[a.H]/(a.yAxis._scale.max-a.yAxis._scale.min);this._chart=a._wrapper.group(a._chartCont,{class_:'chart'});for(var i=0;i<a._series.length;i++){this._drawSeries(a,i,b,c,d)}a._drawTitle();a._drawAxes();a._drawLegend()},_drawSeries:function(a,b,c,d,e){var f=a._series[b];var g=a._wrapper.createPath();for(var i=0;i<f._values.length;i++){var x=c[a.X]+i*d;var y=c[a.Y]+(a.yAxis._scale.max-f._values[i])*e;if(i==0){g.move(x,y)}else{g.line(x,y)}}var p=a._wrapper.path(this._chart,g,$.extend({id:'series'+b,fill:'none',stroke:f._stroke,strokeWidth:f._strokeWidth},f._settings||{}));a._showStatus(p,f._name,0)}});function SVGPieChart(){}$.extend(SVGPieChart.prototype,{_options:['explode (number or number[]) - indexes of sections to explode out of the pie','explodeDist (number) - the distance to move an exploded section','pieGap (number) - the distance between pies for multiple values'],title:function(){return'Pie chart'},description:function(){return'Compare relative sizes of values as contributions to the whole.'},options:function(){return this._options},drawGraph:function(a){a._drawChartBackground(true,true);this._chart=a._wrapper.group(a._chartCont,{class_:'chart'});var b=a._getDims();this._drawSeries(a,b);a._drawTitle();a._drawLegend()},_drawSeries:function(a,b){var c=a._getTotals();var d=a._series.length;var e=(d?(a._series[0])._values.length:0);var f=a._wrapper.createPath();var g=a._chartOptions.explode||[];g=(isArray(g)?g:[g]);var h=a._chartOptions.explodeDist||10;var l=(e<=1?0:a._chartOptions.pieGap||10);var m=(b[a.W]-(e*l)-l)/e/2;var n=b[a.H]/2;var o=Math.min(m,n)-(g.length>0?h:0);var q=a._wrapper.group(a._chartCont,$.extend({class_:'xAxisLabels',textAnchor:'middle'},a.xAxis._labelFormat));var r=[];for(var i=0;i<e;i++){var s=b[a.X]+m+(i*(2*Math.min(m,n)+l))+l;var t=b[a.Y]+n;var u=0;for(var j=0;j<d;j++){var v=a._series[j];if(i==0){r[j]=a._wrapper.group(this._chart,$.extend({class_:'series'+j,fill:v._fill,stroke:v._stroke,strokeWidth:v._strokeWidth},v._settings||{}))}if(v._values[i]==0){continue}var w=(u/c[i])*2*Math.PI;u+=v._values[i];var z=(u/c[i])*2*Math.PI;var A=false;for(var k=0;k<g.length;k++){if(g[k]==j){A=true;break}}var x=s+(A?h*Math.cos((w+z)/2):0);var y=t+(A?h*Math.sin((w+z)/2):0);var p=a._wrapper.path(r[j],f.reset().move(x,y).line(x+o*Math.cos(w),y+o*Math.sin(w)).arc(o,o,0,(z-w<Math.PI?0:1),1,x+o*Math.cos(z),y+o*Math.sin(z)).close());a._showStatus(p,v._name,roundNumber((z-w)/2/Math.PI*100,2))}if(a.xAxis){a._wrapper.text(q,s,b[a.Y]+b[a.H]+a.xAxis._titleOffset,a.xAxis._labels[i])}}}});function isArray(a){return(a&&a.constructor==Array)}$.svg.graphing.addChartType('column',new SVGColumnChart());$.svg.graphing.addChartType('stackedColumn',new SVGStackedColumnChart());$.svg.graphing.addChartType('row',new SVGRowChart());$.svg.graphing.addChartType('stackedRow',new SVGStackedRowChart());$.svg.graphing.addChartType('line',new SVGLineChart());$.svg.graphing.addChartType('pie',new SVGPieChart())})(jQuery) \ No newline at end of file
diff --git a/deck.js/libs/jquerysvg/jquery.svgplot.min.js b/deck.js/libs/jquerysvg/jquery.svgplot.min.js
new file mode 100644
index 0000000..939862e
--- /dev/null
+++ b/deck.js/libs/jquerysvg/jquery.svgplot.min.js
@@ -0,0 +1,7 @@
+/* http://keith-wood.name/svg.html
+ SVG plotting extension for jQuery v1.4.5.
+ Written by Keith Wood (kbwood{at}iinet.com.au) December 2008.
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
+ Please attribute the author if you use it. */
+(function($){$.svg.addExtension('plot',SVGPlot);function SVGPlot(a){this._wrapper=a;this._drawNow=false;this._title={value:'',offset:25,settings:{textAnchor:'middle'}};this._area=[0.1,0.1,0.8,0.9];this._areaFormat={fill:'none',stroke:'black'};this._gridlines=[];this._equalXY=true;this._functions=[];this._onstatus=null;this._uuid=new Date().getTime();this._plotCont=this._wrapper.svg(0,0,0,0,{class_:'svg-plot'});this.xAxis=new SVGPlotAxis(this);this.xAxis.title('X',20);this.yAxis=new SVGPlotAxis(this);this.yAxis.title('Y',20);this.legend=new SVGPlotLegend(this);this._drawNow=true}$.extend(SVGPlot.prototype,{X:0,Y:1,W:2,H:3,L:0,T:1,R:2,B:3,container:function(a){if(arguments.length==0){return this._plotCont}this._plotCont=a;return this},area:function(a,b,c,d){if(arguments.length==0){return this._area}this._area=(isArray(a)?a:[a,b,c,d]);this._drawPlot();return this},format:function(a,b,c){if(arguments.length==0){return this._areaFormat}if(typeof b=='object'){c=b;b=null}this._areaFormat=$.extend({fill:a},(b?{stroke:b}:{}),c||{});this._drawPlot();return this},gridlines:function(a,b){if(arguments.length==0){return this._gridlines}this._gridlines=[(typeof a=='string'?{stroke:a}:a),(typeof b=='string'?{stroke:b}:b)];if(this._gridlines[0]==null&&this._gridlines[1]==null){this._gridlines=[]}this._drawPlot();return this},equalXY:function(a){if(arguments.length==0){return this._equalXY}this._equalXY=a;return this},title:function(a,b,c,d){if(arguments.length==0){return this._title}if(typeof b!='number'){d=c;c=b;b=null}if(typeof c!='string'){d=c;c=null}this._title={value:a,offset:b||this._title.offset,settings:$.extend({textAnchor:'middle'},(c?{fill:c}:{}),d||{})};this._drawPlot();return this},addFunction:function(a,b,c,d,e,f,g){this._functions.push(new SVGPlotFunction(this,a,b,c,d,e,f,g));this._drawPlot();return this},functions:function(i){return(arguments.length>0?this._functions[i]:null)||this._functions},noDraw:function(){this._drawNow=false;return this},redraw:function(){this._drawNow=true;this._drawPlot();return this},status:function(a){this._onstatus=a;return this},_drawPlot:function(){if(!this._drawNow){return}while(this._plotCont.firstChild){this._plotCont.removeChild(this._plotCont.firstChild)}if(!this._plotCont.parent){this._wrapper._svg.appendChild(this._plotCont)}if(!this._plotCont.width){this._plotCont.setAttribute('width',parseInt(this._plotCont.getAttribute('width'),10)||this._wrapper._width())}else if(this._plotCont.width.baseVal){this._plotCont.width.baseVal.value=this._plotCont.width.baseVal.value||this._wrapper._width()}else{this._plotCont.width=this._plotCont.width||this._wrapper._width()}if(!this._plotCont.height){this._plotCont.setAttribute('height',parseInt(this._plotCont.getAttribute('height'),10)||this._wrapper._height())}else if(this._plotCont.height.baseVal){this._plotCont.height.baseVal.value=this._plotCont.height.baseVal.value||this._wrapper._height()}else{this._plotCont.height=this._plotCont.height||this._wrapper._height()}this._drawChartBackground();var a=this._getDims();var b=this._wrapper.other(this._plotCont,'clipPath',{id:'clip'+this._uuid});this._wrapper.rect(b,a[this.X],a[this.Y],a[this.W],a[this.H]);this._plot=this._wrapper.group(this._plotCont,{class_:'foreground',clipPath:'url(#clip'+this._uuid+')'});this._drawAxis(true);this._drawAxis(false);for(var i=0;i<this._functions.length;i++){this._plotFunction(this._functions[i],i)}this._drawTitle();this._drawLegend()},_getValue:function(a,b){return(!a[b]?parseInt(a.getAttribute(b),10):(a[b].baseVal?a[b].baseVal.value:a[b]))},_getDims:function(a){var b=(a!=null);a=a||this._area;var c=this._getValue(this._plotCont,'width');var d=this._getValue(this._plotCont,'height');var e=(a[this.L]>1?a[this.L]:c*a[this.L]);var f=(a[this.T]>1?a[this.T]:d*a[this.T]);var g=(a[this.R]>1?a[this.R]:c*a[this.R])-e;var h=(a[this.B]>1?a[this.B]:d*a[this.B])-f;if(this._equalXY&&!b){var i=Math.min(g/(this.xAxis._scale.max-this.xAxis._scale.min),h/(this.yAxis._scale.max-this.yAxis._scale.min));g=i*(this.xAxis._scale.max-this.xAxis._scale.min);h=i*(this.yAxis._scale.max-this.yAxis._scale.min)}return[e,f,g,h]},_getScales:function(){var a=this._getDims();return[a[this.W]/(this.xAxis._scale.max-this.xAxis._scale.min),a[this.H]/(this.yAxis._scale.max-this.yAxis._scale.min)]},_drawChartBackground:function(a,b){var c=this._wrapper.group(this._plotCont,{class_:'background'});var d=this._getDims();this._wrapper.rect(c,d[this.X],d[this.Y],d[this.W],d[this.H],this._areaFormat);if(this._gridlines[0]&&this.yAxis._ticks.major&&!b){this._drawGridlines(c,true,this._gridlines[0],d)}if(this._gridlines[1]&&this.xAxis._ticks.major&&!a){this._drawGridlines(c,false,this._gridlines[1],d)}return c},_drawGridlines:function(a,b,c,d){var g=this._wrapper.group(a,c);var e=(b?this.yAxis:this.xAxis);var f=this._getScales();var h=Math.floor(e._scale.min/e._ticks.major)*e._ticks.major;h+=(h<=e._scale.min?e._ticks.major:0);while(h<e._scale.max){var v=(b?e._scale.max-h:h-e._scale.min)*f[b?1:0]+(b?d[this.Y]:d[this.X]);this._wrapper.line(g,(b?d[this.X]:v),(b?v:d[this.Y]),(b?d[this.X]+d[this.W]:v),(b?v:d[this.Y]+d[this.H]));h+=e._ticks.major}},_drawAxis:function(a){var b=(a?'x':'y')+'Axis';var c=(a?this.xAxis:this.yAxis);var d=(a?this.yAxis:this.xAxis);var e=this._getDims();var f=this._getScales();var g=this._wrapper.group(this._plot,$.extend({class_:b},c._lineFormat));var h=this._wrapper.group(this._plot,$.extend({class_:b+'Labels',textAnchor:(a?'middle':'end')},c._labelFormat));var i=(a?d._scale.max:-d._scale.min)*f[a?1:0]+(a?e[this.Y]:e[this.X]);this._wrapper.line(g,(a?e[this.X]:i),(a?i:e[this.Y]),(a?e[this.X]+e[this.W]:i),(a?i:e[this.Y]+e[this.H]));if(c._ticks.major){var j=c._ticks.size;var k=Math.floor(c._scale.min/c._ticks.major)*c._ticks.major;k=(k<c._scale.min?k+c._ticks.major:k);var l=(!c._ticks.minor?c._scale.max+1:Math.floor(c._scale.min/c._ticks.minor)*c._ticks.minor);l=(l<c._scale.min?l+c._ticks.minor:l);var m=[(c._ticks.position=='nw'||c._ticks.position=='both'?-1:0),(c._ticks.position=='se'||c._ticks.position=='both'?+1:0)];while(k<=c._scale.max||l<=c._scale.max){var n=Math.min(k,l);var o=(n==k?j:j/2);var p=(a?n-c._scale.min:c._scale.max-n)*f[a?0:1]+(a?e[this.X]:e[this.Y]);this._wrapper.line(g,(a?p:i+o*m[0]),(a?i+o*m[0]:p),(a?p:i+o*m[1]),(a?i+o*m[1]:p));if(n==k&&n!=0){this._wrapper.text(h,(a?p:i-j),(a?i-j:p),''+n)}k+=(n==k?c._ticks.major:0);l+=(n==l?c._ticks.minor:0)}}if(c._title){if(a){this._wrapper.text(this._plotCont,e[this.X]-c._titleOffset,i,c._title,$.extend({textAnchor:'end'},c._titleFormat||{}))}else{this._wrapper.text(this._plotCont,i,e[this.Y]+e[this.H]+c._titleOffset,c._title,$.extend({textAnchor:'middle'},c._titleFormat||{}))}}},_plotFunction:function(a,b){var c=this._getDims();var d=this._getScales();var e=this._wrapper.createPath();var f=a._range||[this.xAxis._scale.min,this.xAxis._scale.max];var g=(f[1]-f[0])/a._points;var h=true;for(var i=0;i<=a._points;i++){var x=f[0]+i*g;if(x>this.xAxis._scale.max+g){break}if(x<this.xAxis._scale.min-g){continue}var j=(x-this.xAxis._scale.min)*d[0]+c[this.X];var k=c[this.H]-((a._fn(x)-this.yAxis._scale.min)*d[1])+c[this.Y];e[(h?'move':'line')+'To'](j,k);h=false}var p=this._wrapper.path(this._plot,e,$.extend({class_:'fn'+b,fill:'none',stroke:a._stroke,strokeWidth:a._strokeWidth},a._settings||{}));this._showStatus(p,a._name)},_drawTitle:function(){this._wrapper.text(this._plotCont,this._getValue(this._plotCont,'width')/2,this._title.offset,this._title.value,this._title.settings)},_drawLegend:function(){if(!this.legend._show){return}var g=this._wrapper.group(this._plotCont,{class_:'legend'});var a=this._getDims(this.legend._area);this._wrapper.rect(g,a[this.X],a[this.Y],a[this.W],a[this.H],this.legend._bgSettings);var b=a[this.W]>a[this.H];var c=this._functions.length;var d=(b?a[this.W]:a[this.H])/c;var e=a[this.X]+5;var f=a[this.Y]+((b?a[this.H]:d)+this.legend._sampleSize)/2;for(var i=0;i<c;i++){var h=this._functions[i];this._wrapper.rect(g,e+(b?i*d:0),f+(b?0:i*d)-this.legend._sampleSize,this.legend._sampleSize,this.legend._sampleSize,{fill:h._stroke});this._wrapper.text(g,e+(b?i*d:0)+this.legend._sampleSize+5,f+(b?0:i*d),h._name,this.legend._textSettings)}},_showStatus:function(b,c){var d=this._onstatus;if(this._onstatus){$(b).hover(function(a){d.apply(this,[c])},function(){d.apply(this,[''])})}}});function SVGPlotFunction(a,b,c,d,e,f,g,h){if(typeof b!='string'){h=g;g=f;f=e;e=d;d=c;c=b;b=null}if(!isArray(d)){h=g;g=f;f=e;e=d;d=null}if(typeof e!='number'){h=g;g=f;f=e;e=null}if(typeof f!='string'){h=g;g=f;f=null}if(typeof g!='number'){h=g;g=null}this._plot=a;this._name=b||'';this._fn=c||identity;this._range=d;this._points=e||100;this._stroke=f||'black';this._strokeWidth=g||1;this._settings=h||{}}$.extend(SVGPlotFunction.prototype,{name:function(a){if(arguments.length==0){return this._name}this._name=a;this._plot._drawPlot();return this},fn:function(a,b){if(arguments.length==0){return this._fn}if(typeof a=='function'){b=a;a=null}this._name=a||this._name;this._fn=b;this._plot._drawPlot();return this},range:function(a,b){if(arguments.length==0){return this._range}this._range=(a==null?null:[a,b]);this._plot._drawPlot();return this},points:function(a){if(arguments.length==0){return this._points}this._points=a;this._plot._drawPlot();return this},format:function(a,b,c){if(arguments.length==0){return $.extend({stroke:this._stroke,strokeWidth:this._strokeWidth},this._settings)}if(typeof b!='number'){c=b;b=null}this._stroke=a||this._stroke;this._strokeWidth=b||this._strokeWidth;$.extend(this._settings,c||{});this._plot._drawPlot();return this},end:function(){return this._plot}});function identity(x){return x}function SVGPlotAxis(a,b,c,d,e,f){this._plot=a;this._title=b||'';this._titleFormat={};this._titleOffset=0;this._labelFormat={};this._lineFormat={stroke:'black',strokeWidth:1};this._ticks={major:e||10,minor:f||0,size:10,position:'both'};this._scale={min:c||0,max:d||100};this._crossAt=0}$.extend(SVGPlotAxis.prototype,{scale:function(a,b){if(arguments.length==0){return this._scale}this._scale.min=a;this._scale.max=b;this._plot._drawPlot();return this},ticks:function(a,b,c,d){if(arguments.length==0){return this._ticks}if(typeof c=='string'){d=c;c=null}this._ticks.major=a;this._ticks.minor=b;this._ticks.size=c||this._ticks.size;this._ticks.position=d||this._ticks.position;this._plot._drawPlot();return this},title:function(a,b,c,d){if(arguments.length==0){return{title:this._title,offset:this._titleOffset,format:this._titleFormat}}if(typeof b!='number'){d=c;c=b;b=null}if(typeof c!='string'){d=c;c=null}this._title=a;this._titleOffset=(b!=null?b:this._titleOffset);if(c||d){this._titleFormat=$.extend(d||{},(c?{fill:c}:{}))}this._plot._drawPlot();return this},format:function(a,b){if(arguments.length==0){return this._labelFormat}if(typeof a!='string'){b=a;a=null}this._labelFormat=$.extend(b||{},(a?{fill:a}:{}));this._plot._drawPlot();return this},line:function(a,b,c){if(arguments.length==0){return this._lineFormat}if(typeof b!='number'){c=b;b=null}$.extend(this._lineFormat,{stroke:a,strokeWidth:b||this._lineFormat.strokeWidth},c||{});this._plot._drawPlot();return this},end:function(){return this._plot}});function SVGPlotLegend(a,b,c){this._plot=a;this._show=true;this._area=[0.9,0.1,1.0,0.9];this._sampleSize=15;this._bgSettings=b||{stroke:'gray'};this._textSettings=c||{}}$.extend(SVGPlotLegend.prototype,{show:function(a){if(arguments.length==0){return this._show}this._show=a;this._plot._drawPlot();return this},area:function(a,b,c,d){if(arguments.length==0){return this._area}this._area=(isArray(a)?a:[a,b,c,d]);this._plot._drawPlot();return this},settings:function(a,b,c){if(arguments.length==0){return{sampleSize:this._sampleSize,bgSettings:this._bgSettings,textSettings:this._textSettings}}if(typeof a=='object'){c=b;b=a;a=null}this._sampleSize=a||this._sampleSize;this._bgSettings=b;this._textSettings=c||this._textSettings;this._plot._drawPlot();return this},end:function(){return this._plot}});function isArray(a){return(a&&a.constructor==Array)}})(jQuery) \ No newline at end of file
diff --git a/deck.js/modernizr.custom.js b/deck.js/modernizr.custom.js
new file mode 100644
index 0000000..964fb40
--- /dev/null
+++ b/deck.js/modernizr.custom.js
@@ -0,0 +1,4 @@
+/* Modernizr 2.0.6 (Custom Build) | MIT & BSD
+ * Contains: fontface | backgroundsize | borderimage | borderradius | boxshadow | flexbox | hsla | multiplebgs | opacity | rgba | textshadow | cssanimations | csscolumns | generatedcontent | cssgradients | cssreflections | csstransforms | csstransforms3d | csstransitions | applicationcache | canvas | canvastext | draganddrop | hashchange | history | audio | video | indexeddb | input | inputtypes | localstorage | postmessage | sessionstorage | websockets | websqldatabase | webworkers | geolocation | inlinesvg | smil | svg | svgclippaths | touch | webgl | iepp | cssclasses | addtest | teststyles | testprop | testallprops | hasevent | prefixes | domprefixes | load
+ */
+;window.Modernizr=function(a,b,c){function H(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=a[b]in l;return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function F(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return E(d,b)}function E(a,b){for(var d in a)if(k[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function D(a,b){return!!~(""+a).indexOf(b)}function C(a,b){return typeof a===b}function B(a,b){return A(o.join(a+";")+(b||""))}function A(a){k.cssText=a}var d="2.0.6",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["&shy;","<style>",a,"</style>"].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},w=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),x,y={}.hasOwnProperty,z;!C(y,c)&&!C(y.call,c)?z=function(a,b){return y.call(a,b)}:z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)};var G=function(c,d){var f=c.join(""),g=d.length;v(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||j.touch.offsetTop===9,e.csstransforms3d=j.csstransforms3d.offsetLeft===9,e.generatedcontent=j.generatedcontent.offsetHeight>=1,e.fontface=/src/i.test(h)&&h.indexOf(d.split(" ")[0])===0},g,d)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",o.join("touch-enabled),("),i,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",o.join("transform-3d),("),i,")","{#csstransforms3d{left:9px;position:absolute}}"].join(""),['#generatedcontent:after{content:"',m,'";visibility:hidden}'].join("")],["fontface","touch","csstransforms3d","generatedcontent"]);r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},r.canvastext=function(){return!!e.canvas&&!!C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return e.touch},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;)if(a[p[b].toLowerCase()+"IndexedDB"])return!0;return!!a.indexedDB},r.hashchange=function(){return w("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return!!a.history&&!!history.pushState},r.draganddrop=function(){return w("dragstart")&&w("drop")},r.websockets=function(){for(var b=-1,c=p.length;++b<c;)if(a[p[b]+"WebSocket"])return!0;return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(https://),url(https://),red url(https://)");return/(url\s*\(.*?){3}/.test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius")},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=e.csstransforms3d);return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){return e.fontface},r.generatedcontent=function(){return e.generatedcontent},r.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}}catch(e){}return c},r.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")}catch(d){}return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webworkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var I in r)z(r,I)&&(x=I.toLowerCase(),e[x]=r[I](),u.push((e[x]?"":"no-")+x));e.input||H(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)z(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return;b=typeof b=="boolean"?b:!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b}return e},A(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b<g)a.createElement(f[b])}a.iepp=a.iepp||{};var d=a.iepp,e=d.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",f=e.split("|"),g=f.length,h=new RegExp("(^|\\s)("+e+")","gi"),i=new RegExp("<(/*)("+e+")","gi"),j=/^\s*[\{\}]\s*$/,k=new RegExp("(^|[^\\n]*?\\s)("+e+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),l=b.createDocumentFragment(),m=b.documentElement,n=m.firstChild,o=b.createElement("body"),p=b.createElement("style"),q=/print|all/,r;d.getCSS=function(a,b){if(a+""===c)return"";var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,q.test(b)&&h.push(d.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},d.parseCSS=function(a){var b=[],c;while((c=k.exec(a))!=null)b.push(((j.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(h,"$1.iepp_$2")+c[4]);return b.join("\n")},d.writeHTML=function(){var a=-1;r=r||b.body;while(++a<g){var c=b.getElementsByTagName(f[a]),d=c.length,e=-1;while(++e<d)c[e].className.indexOf("iepp_")<0&&(c[e].className+=" iepp_"+f[a])}l.appendChild(r),m.appendChild(o),o.className=r.className,o.id=r.id,o.innerHTML=r.innerHTML.replace(i,"<$1font")},d._beforePrint=function(){p.styleSheet.cssText=d.parseCSS(d.getCSS(b.styleSheets,"all")),d.writeHTML()},d.restoreHTML=function(){o.innerHTML="",m.removeChild(o),m.appendChild(r)},d._afterPrint=function(){d.restoreHTML(),p.styleSheet.cssText=""},s(b),s(l);d.disablePP||(n.insertBefore(p,n.firstChild),p.media="print",p.className="iepp-printshim",a.attachEvent("onbeforeprint",d._beforePrint),a.attachEvent("onafterprint",d._afterPrint))}(a,b),e._version=d,e._prefixes=o,e._domPrefixes=p,e.hasEvent=w,e.testProp=function(a){return E([a])},e.testAllProps=F,e.testStyles=v,g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+u.join(" "):"");return e}(this,this.document),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css";if(!a.e&&(w||r)){var e=function(a){m(function(){if(!d)try{a.sheet.cssRules.length?(d=1,j()):e(a)}catch(b){b.code==1e3||b.message=="security"||b.message=="denied"?(d=1,m(function(){j()},0)):e(a)}},0)};e(c)}else c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload();m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return Object(a)===a},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h<e;h++)g=F[b[h]],g&&(f=g(f));for(h=0;h<c;h++)f=E[h](f);return f}function e(a,b,e,g,h){var i=f(a),j=i.autoCallback;if(!i.bypass){b&&(b=D(b)?b:b[a]||b[g]||b[a.split("/").pop().split("?")[0]]);if(i.instead)return i.instead(a,b,e,g,h);e.load(i.url,i.forceCSS||!i.forceJS&&/css$/.test(i.url)?"c":c,i.noexec),(D(b)||D(j))&&e.load(function(){d(),b&&b(i.origUrl,h,g),j&&j(i.origUrl,h,g)})}}function b(a,b){function c(a){if(C(a))e(a,h,b,0,d);else if(B(a))for(i in a)a.hasOwnProperty(i)&&e(a[i],h,b,i,d)}var d=!!a.test,f=d?a.yep:a.nope,g=a.load||a.both,h=a.callback,i;c(f),c(g),a.complete&&b.load(a.complete)}var g,h,i=this.yepnope.loader;if(C(a))e(a,0,i,0);else if(A(a))for(g=0;g<a.length;g++)h=a[g],C(h)?e(h,0,i,0):A(h)?H(h):B(h)&&b(h,i);else B(a)&&b(a,i)},H.addPrefix=function(a,b){F[a]=b},H.addFilter=function(a){E.push(a)},H.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",G=function(){b.removeEventListener("DOMContentLoaded",G,0),b.readyState="complete"},0)),a.yepnope=d()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))}; \ No newline at end of file
diff --git a/deck.js/samples/circle.svg b/deck.js/samples/circle.svg
new file mode 100755
index 0000000..b003203
--- /dev/null
+++ b/deck.js/samples/circle.svg
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="500.95898"
+ height="485.79654"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="circle.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.1137321"
+ inkscape:cx="-177.36038"
+ inkscape:cy="320.05246"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer2"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1150"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ borderlayer="false"
+ width="0px"
+ height="0px" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-3.99267,14.222693)">
+ <g
+ id="circleRed"
+ transform="translate(12,-2)">
+ <path
+ inkscape:label="#red"
+ transform="translate(-131.31983,-224.25387)"
+ d="m 303.04577,311.92038 c 0,46.30502 -37.53764,83.84266 -83.84266,83.84266 -46.30502,0 -83.84266,-37.53764 -83.84266,-83.84266 0,-46.30502 37.53764,-83.84266 83.84266,-83.84266 46.30502,0 83.84266,37.53764 83.84266,83.84266 z"
+ sodipodi:ry="83.842659"
+ sodipodi:rx="83.842659"
+ sodipodi:cy="311.92038"
+ sodipodi:cx="219.20311"
+ id="circleRedCircle"
+ sodipodi:type="arc" />
+ <!--style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"-->
+ <path
+ inkscape:transform-center-y="0.10919907"
+ inkscape:transform-center-x="0.16050916"
+ d="m 109.81573,116.87269 -3.18712,-2.41404 -3.94033,1.11831 1.03709,-3.63743 -2.46543,-3.50916 4.44844,0.37725 1.86148,-3.17699 1.65601,3.67662 3.71619,1.10711 -3.2616,2.15748 z"
+ inkscape:randomized="0.05"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.7354672"
+ sodipodi:arg1="1.1071487"
+ sodipodi:r2="3.0115879"
+ sodipodi:r1="6.0231757"
+ sodipodi:cy="111.33737"
+ sodipodi:cx="106.84796"
+ sodipodi:sides="5"
+ id="path3480"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#0000ff;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="star"
+ transform="translate(3.9926654,3.777383)" />
+ <text
+ sodipodi:linespacing="125%"
+ id="coolText"
+ y="115.65632"
+ x="108.87571"
+ style="font-size:2px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"
+ inkscape:label="#text4285"><tspan
+ y="115.65632"
+ x="108.87571"
+ id="tspan4287"
+ sodipodi:role="line">cool</tspan></text>
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#00fe00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="circleGreen"
+ sodipodi:cx="219.20311"
+ sodipodi:cy="311.92038"
+ sodipodi:rx="83.842659"
+ sodipodi:ry="83.842659"
+ d="m 303.04577,311.92038 c 0,46.30502 -37.53764,83.84266 -83.84266,83.84266 -46.30502,0 -83.84266,-37.53764 -83.84266,-83.84266 0,-46.30502 37.53764,-83.84266 83.84266,-83.84266 46.30502,0 83.84266,37.53764 83.84266,83.84266 z"
+ transform="matrix(1.3373494,0,0,1.3373494,-66.998809,-211.27187)"
+ inkscape:label="#green" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#0017ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="circleBlue"
+ sodipodi:cx="219.20311"
+ sodipodi:cy="311.92038"
+ sodipodi:rx="83.842659"
+ sodipodi:ry="83.842659"
+ d="m 303.04577,311.92038 c 0,46.30502 -37.53764,83.84266 -83.84266,83.84266 -46.30502,0 -83.84266,-37.53764 -83.84266,-83.84266 0,-46.30502 37.53764,-83.84266 83.84266,-83.84266 46.30502,0 83.84266,37.53764 83.84266,83.84266 z"
+ transform="matrix(1.6024097,0,0,1.6024097,14.300214,-164.65004)"
+ inkscape:label="#blue" />
+ <text
+ xml:space="preserve"
+ style="font-size:13.80142117px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="60.66827"
+ y="-82.57074"
+ id="text2989"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2991"
+ x="60.66827"
+ y="-82.57074">NB: for convenience we</tspan><tspan
+ sodipodi:role="line"
+ x="60.66827"
+ y="-65.318962"
+ id="tspan2993">use a layer (hidden) for boxes</tspan><tspan
+ sodipodi:role="line"
+ x="60.66827"
+ y="-48.067188"
+ id="tspan2995">that we will be using for zoom</tspan><tspan
+ sodipodi:role="line"
+ x="60.66827"
+ y="-30.815411"
+ id="tspan2997">Hit ctrl+shift+L for layer control (in inkscape)</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="zoomboxes"
+ style="display:none">
+ <rect
+ style="opacity:0.7;color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="zoomBox1"
+ width="12.289753"
+ height="12.682584"
+ x="112.90867"
+ y="121.1442"
+ inkscape:label="#rect3001" />
+ </g>
+</svg>
diff --git a/deck.js/samples/deck-anim.html b/deck.js/samples/deck-anim.html
new file mode 100644
index 0000000..8a87db0
--- /dev/null
+++ b/deck.js/samples/deck-anim.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]> <html class="no-js ie6" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+ <title>deck.anim.js test/demo</title>
+
+ <meta name="description" content="deck.*.js">
+ <meta name="author" content="Rémi Emonet">
+ <!--meta name="viewport" content="width=1024, user-scalable=no"/-->
+
+ <!-- Core and extension CSS files -->
+ <link rel="stylesheet" href="../core/deck.core.css">
+ <link rel="stylesheet" href="../extensions/status/deck.status.css">
+ <link rel="stylesheet" href="../extensions/hash/deck.hash.css">
+
+ <!-- Style theme. More available in /themes/style/ or create your own. -->
+ <link rel="stylesheet" href="../themes/style/neon.css">
+
+ <!-- Transition theme. More available in /themes/transition/ or create your own. -->
+ <!--link rel="stylesheet" href="../themes/transition/horizontal-slide.css"-->
+
+ <script src="../modernizr.custom.js"></script>
+
+ <!-- Grab CDN jQuery, with a protocol relative URL; fall back to local if offline -->
+ <script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
+ <script>window.jQuery || document.write('<script src="../jquery-1.7.2.min.js"><\/script>')</script>
+
+ <!-- Deck Core and extensions -->
+ <script src="../core/deck.core.js"></script>
+ <script src="../extensions/hash/deck.hash.js"></script>
+ <script src="../extensions/status/deck.status.js"></script>
+ <script src="../extensions/fit/deck.fit.js"></script>
+ <link rel="stylesheet" href="../extensions/fit/deck.fit-fs.css">
+
+ <script src="../extensions/step/deck.step.js"></script>
+ <script src="../extensions/events/deck.events.js"></script>
+ <script src="../extensions/anim/deck.anim.js"></script>
+
+
+ <style type="text/css">
+ .deck-container>.slide {border: 1px dashed #333;} /* for the demo */
+ .slide h1 {font-size: 3em;}
+ .slide h1 b {color: #0F0;}
+ .slide h1 em {color: #445; text-shadow: none; font-size: .3em;}
+ .slide span.highlight {border: 1px solid red;}
+ .deck-container > .slide .deck-before, .deck-container > .slide .deck-previous {opacity: 0.6;} /* <-- override darkish neon theme --> */
+
+ </style>
+ </head>
+
+<!-- for the demo, the body is not the container so it can be resized by the user -->
+<body>
+
+This page surely has a purpose.<br/>
+Use left/right arrow keys to browse the presentation.<br/>
+
+<!-- for the demo, a resizeable wrapper around the container -->
+<div class="deck-container">
+
+<!-- Begin slides -->
+<section class="slide" id="title-slide">
+ <h1 title="use arrow keys to navigate">Getting started with deck.js:<br/><b>anim</b> extension
+ <br/><em>use right arrow to move on</em>
+ </h1>
+</section>
+
+<section class="slide">
+ <h2>Nested deck.js slides</h2>
+ <ul>
+ <li>Not an extension (in core deck.js)</li>
+ <li>Just have an element with the “slide” class…</li>
+ <li>… and it will appear (hit the right arrow now)</li>
+ <li class="slide">Hey! I appeared! (go on)</li>
+ <li class="slide">The gray-ish style is part of the theme</li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Show/Hide Elements</h2>
+ <ul>
+ <li>Go beyond sequential appearance <span class="demo1">… like this!</span></li>
+ <li class="slide">… for example</li>
+ <div class="anim-show slide" data-what=".demo1"></div>
+ <li class="slide">Or hide stuff</li>
+ <div class="anim-hide slide" data-what="h2"></div>
+ <li class="anim-show slide" data-what="h2" data-dur="1500">Let's get the title back, slowly :)</li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Add/Remove Classes</h2>
+ <ul>
+ <li class="slide">We can also <span class="demo1">add</span>/remove classes: like the “highlight”</li>
+ <li class="slide"><span class="demo2 highlight">This is highlight by default</span> (styled with css)</li>
+ <li class="slide">We can add a class</li>
+ <div class="anim-addclass slide" data-what=".demo1" data-class="highlight"></div>
+ <li class="slide">And remove it</li>
+ <div class="anim-removeclass slide" data-what=".demo1,.demo2" data-class="highlight"></div>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Attribute Animations</h2>
+ <ul>
+ <li class="slide">We can animate any <span class="demo1">attribute</span>, like the <span class="demo1">color</span></li>
+ <li class="slide">Let's try</li>
+ <div class="anim-attribute slide" data-what=".demo1" data-attr="color:#FF0000"></div>
+ <div class="anim-attribute slide" data-what=".demo1:first" data-attr="color:#00FF00"></div>
+ <div class="anim-attribute slide" data-what=".demo1" data-attr="color:#0000FF"></div>
+ <li class="slide">Or the <span class="demo2">size</span></li>
+ <div class="anim-attribute slide" data-what=".demo2" data-attr="font-size:8em"></div>
+ <li class="slide">Or play multiple animations</li>
+ <div class="anim-attribute slide anim-continue" data-what=".demo2" data-attr="font-size:.5em"></div>
+ <div class="anim-attribute slide anim-continue" data-what=".demo2" data-attr="color:#FF0000"></div>
+ <div class="anim-attribute slide" data-what=".demo2,.demo1" data-attr="font-size:3em"></div>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Video Control</h2>
+ <video style="float:right" src="simple.ogv" height="400" width="400" onclick="this.paused ? this.play() : this.pause()" controls="true"></video>
+ <ul>
+ <li>Starts paused</li>
+ <li>Plays on "next"</li>
+ <li>Then pauses on "next"</li>
+ <li>Then next slide</li>
+ </ul>
+ <div class="anim-play slide" data-what="video"></div>
+ <div class="anim-pause slide" data-what="video"></div>
+</section>
+<section class="slide">
+ <h2>The “anim” extension</h2>
+ <ul>
+ <li>Works in conjunction with</li>
+ <ul>
+ <li>“events”: extension that triggers events<br/>   (notify the slide when it becomes current)</li>
+ <li>“step”: extension that also trigger init events<br/>   (knowing about toplevel vs nested slides)</li>
+ </ul>
+ <li>Uses open attributes "data-*" (see source)</li>
+ <li>Adds animation classes</li>
+ <ul>
+ <li>anim-show/hide, anim-addclass/removeclass,</li>
+ <li>anim-attribute, anim-play, anim-pause, …</li>
+ </ul>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Browser support</h2>
+ <ul>
+ <li>Should be ok</li>
+ </ul>
+</section>
+
+<!-- DEMO: anim -->
+
+<!-- deck.navigation snippet -->
+<!--a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
+<a href="#" class="deck-next-link" title="Next">&#8594;</a-->
+
+<!-- deck.status snippet -->
+<!--p class="deck-status">
+ <span class="deck-status-current"></span>
+ /
+ <span class="deck-status-total"></span>
+</p-->
+
+<!-- deck.hash snippet -->
+<a href="." title="Permalink to this slide" class="deck-permalink">#</a>
+
+<!-- Initialize the deck -->
+<script>
+$(function() {
+ $.deck('.slide', {
+ // fitMarginX:100, fitMarginY:100,
+ // fitMode: "stretched" //"center middle" //"bottom right" //"top left"
+ });
+});
+</script>
+</div>
+</body>
+</html>
diff --git a/deck.js/samples/deck-clone.html b/deck.js/samples/deck-clone.html
new file mode 100644
index 0000000..e4b77a2
--- /dev/null
+++ b/deck.js/samples/deck-clone.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]> <html class="no-js ie6" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+ <title>deck.clone.js test/demo</title>
+
+ <meta name="description" content="deck.*.js">
+ <meta name="author" content="Rémi Emonet">
+ <!--meta name="viewport" content="width=1024, user-scalable=no"/-->
+
+ <!-- Core and extension CSS files -->
+ <link rel="stylesheet" href="../core/deck.core.css">
+ <link rel="stylesheet" href="../extensions/status/deck.status.css">
+ <link rel="stylesheet" href="../extensions/hash/deck.hash.css">
+
+ <!-- Style theme. More available in /themes/style/ or create your own. -->
+ <link rel="stylesheet" href="../themes/style/neon.css">
+
+ <!-- Transition theme. More available in /themes/transition/ or create your own. -->
+ <!--link rel="stylesheet" href="../themes/transition/horizontal-slide.css"-->
+
+ <script src="../modernizr.custom.js"></script>
+
+ <!-- Grab CDN jQuery, with a protocol relative URL; fall back to local if offline -->
+ <script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
+ <script>window.jQuery || document.write('<script src="../jquery-1.7.2.min.js"><\/script>')</script>
+
+ <!-- Deck Core and extensions -->
+ <script src="../core/deck.core.js"></script>
+ <script src="../extensions/hash/deck.hash.js"></script>
+ <script src="../extensions/status/deck.status.js"></script>
+ <script src="../extensions/fit/deck.fit.js"></script>
+ <link rel="stylesheet" href="../extensions/fit/deck.fit-fs.css">
+ <script src="../extensions/step/deck.step.js"></script>
+
+ <script src="../extensions/clone/deck.clone.js"></script>
+
+
+ <style type="text/css">
+ body.has-clones .deck-container {background: grey;}
+ .deck-container>.slide {border: 1px dashed #333;} /* for the demo */
+ .slide h1 {font-size: 3em;}
+ .slide h1 b {color: #0F0;}
+ .slide h1 em, .slide .smallcomment {color: #445; text-shadow: none; font-size: .3em;}
+ .slide .smallcomment {font-size: .6em;}
+ </style>
+ </head>
+
+<!-- for the demo, the body is not the container so it can be resized by the user -->
+<body>
+
+This page surely has a purpose.<br/>
+Use left/right arrow keys to browse the presentation.<br/>
+
+<!-- for the demo, a resizeable wrapper around the container -->
+<div class="deck-container">
+
+<!-- Begin slides -->
+<section class="slide" id="title-slide">
+ <h1 title="use arrow keys to navigate">Getting started with deck.js:<br/><b>clone</b> extension
+ <br/><em>use right arrow to move on</em>
+ </h1>
+</section>
+
+<section class="slide">
+ <h2>“clone”: What?</h2>
+ <ul>
+ <li>Duplicate your window</li>
+ <li>Forwards events to all clones</li>
+ <li>Replicates mouse pointer</li>
+ <li>Usage
+ <ul>
+ <li>put a second view on a second screen</li>
+ <li>view next slide on your view (theme)</li>
+ <li>view notes on your view (extension)</li>
+ </ul>
+ </li>
+ </ul>
+</section>
+
+<section class="slide">
+ <h2>“clone”: let's get cloned</h2>
+ <div class="firefox-message" style="position: absolute; border: 2px solid red; background: #181818; padding: 1em; margin: 1em; font-size: .8em; margin-top: 0;">
+ With firefox and "file://..." URLs (local files), the popup might be blocked, refusing to be shown.
+ To fix that:
+ <ul>
+ <li>on the bar that pops up, click on Preferences&gt;Edit Pop-Up Blocker Preferences…</li>
+ <li>type “&lt;file&gt;” (without the quotes, with the brackets)</li>
+ <li>click allow</li>
+ <li>click close</li>
+ <li>close the poped-up bar and hit 'c' again</li>
+ </ul>
+ </div>
+ <ul>
+ <li>Clone your view!
+ <ul>
+ <li>NB: the browser will probably open a new tab</li>
+ <li>clone your view by typing 'c'
+ <br/><span class="smallcomment">(in local, show how to <a class="show-firefox-message">tell firefox to not block the popup</a>)</span>
+ </li>
+ <li>detach your tab (drag it out of the browser)</li>
+ <li>go to the main view and hit the right arrow</li>
+ </ul>
+ </li>
+ </ul>
+</section>
+<script>
+$(function() {
+ $('.firefox-message').hide();
+ $('.firefox-message').click(function(){
+ $('.firefox-message').hide(300);
+ });
+ $('.show-firefox-message').click(function(){
+ $('.firefox-message').fadeIn(500);
+ });
+});
+</script>
+
+<section class="slide">
+ <h2>“clone”: Propagation</h2>
+ <ul>
+ <li class="slide">Slide events are propagated to clone(s)
+ <ul>
+ <li class="slide">from master to clone(s)</li>
+ <li class="slide">try left/right arrows</li>
+ <li class="slide">try up arrow (with the “<a href="deck-step.html">step</a>” extension)</li>
+ </ul>
+ </li>
+ <li class="slide">Mouse pointer is replicated
+ <ul>
+ <li class="slide">try to move your mouse (on the master)</li>
+ <li class="slide">custom style using HTML+CSS</li>
+ <li class="slide">examples: red box, centered green box, …</li>
+ </ul>
+ </li>
+ </ul>
+</section>
+
+<section class="slide">
+ <h2>“clone”: Styling</h2>
+ <ul>
+ <li class="slide">Master view styling
+ <ul>
+ <li>adds the “has-clones” class when cloned</li>
+ <li>in this deck: gray background</li>
+ <li>allow for a presenter view (next slide, notes, …)</li>
+ </ul>
+ </li>
+ </ul>
+</section>
+
+<section class="slide">
+ <h2>Browser support</h2>
+ <ul>
+ <li>Should be ok</li>
+ </ul>
+</section>
+<!-- DEMO: clone -->
+
+<!-- deck.navigation snippet -->
+<!--a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
+<a href="#" class="deck-next-link" title="Next">&#8594;</a-->
+
+<!-- deck.status snippet -->
+<!--p class="deck-status">
+ <span class="deck-status-current"></span>
+ /
+ <span class="deck-status-total"></span>
+</p-->
+
+<!-- deck.clone snippet: simple red box with top-left corner as cursor position -->
+<div class="clonepointer" style="position:absolute; width:20px; height:20px; background-color:red; z-index:10"></div>
+<!-- deck.clone snippet: simple green box with center as cursor position -->
+<div class="clonepointer" style="position:absolute; z-index:11"><div style="margin: -13px 0 0 -13px; width:18px; height:18px; border:4px solid green;"></div></div>
+
+<!-- deck.hash snippet -->
+<a href="." title="Permalink to this slide" class="deck-permalink">#</a>
+
+<!-- Initialize the deck -->
+<script>
+$(function() {
+ $.deck('.slide', {
+ // fitMarginX:100, fitMarginY:100,
+ // fitMode: "stretched" //"center middle" //"bottom right" //"top left"
+ });
+});
+</script>
+</div>
+</body>
+</html>
diff --git a/deck.js/samples/deck-fit.html b/deck.js/samples/deck-fit.html
new file mode 100644
index 0000000..b69bff4
--- /dev/null
+++ b/deck.js/samples/deck-fit.html
@@ -0,0 +1,229 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]> <html class="no-js ie6" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+ <title>deck.fit.js test/demo</title>
+
+ <meta name="description" content="deck.fit.js">
+ <meta name="author" content="Rémi Emonet">
+ <!--meta name="viewport" content="width=1024, user-scalable=no"/-->
+
+ <!-- Core and extension CSS files -->
+ <link rel="stylesheet" href="../core/deck.core.css">
+ <link rel="stylesheet" href="../extensions/status/deck.status.css">
+ <link rel="stylesheet" href="../extensions/hash/deck.hash.css">
+
+ <!-- Style theme. More available in /themes/style/ or create your own. -->
+ <link rel="stylesheet" href="../themes/style/neon.css">
+
+ <!-- Transition theme. More available in /themes/transition/ or create your own. -->
+ <!--link rel="stylesheet" href="../themes/transition/horizontal-slide.css"-->
+
+ <script src="../modernizr.custom.js"></script>
+
+ <!-- Grab CDN jQuery, with a protocol relative URL; fall back to local if offline -->
+ <script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
+ <script>window.jQuery || document.write('<script src="../jquery-1.7.2.min.js"><\/script>')</script>
+
+ <!-- Deck Core and extensions -->
+ <script src="../core/deck.core.js"></script>
+ <script src="../extensions/hash/deck.hash.js"></script>
+ <script src="../extensions/status/deck.status.js"></script>
+ <script src="../extensions/fit/deck.fit.js"></script> <!-- WE ADD THE deck.fit.js extension -->
+
+ <style type="text/css">
+/* style override */
+html, body {margin:0;padding:0}
+.deck-container {
+}
+/* for the demo */
+.slide h1 {font-size: 3em;}
+.slide h1 b {color: #0F0;}
+.slide h1 em {color: #445; text-shadow: none; font-size: .3em;}
+
+.resizeable { /* for the demo */
+ background: #900;
+ margin: 0; padding: 20px;
+ width: 600px; height: 450px; /* just the initial size for the resizeable demo */
+ resize: both;
+ overflow: hidden; /* needed for the resize handle to be really shown in ffox */
+ border: 1px solid blue;
+}
+.deck-container {
+ width: 100%; height: 100%; /* to get a proper filling of the parent */
+ margin: 0; padding: 0; /* any margin is handled by the parent or the fit extension */
+ border: 1px solid red; /* for the demo */
+}
+.deck-container .slide {
+ width: 100%; height: 100%; /* to get a proper filling of the parent */
+ min-width:0; min-height:0; /* undoing some hurting style */
+ overflow: hidden; /* don't show slides outside of their box */
+ /* margin:0; padding:0; /* remove possible margins */
+ border: 2px solid white; /* for the demo */
+}
+.deck-container .slide {background:
+ url(rectangle.png) bottom left no-repeat,
+ url(rectangle.png) top left no-repeat,
+ url(rectangle.png) bottom right no-repeat,
+ url(rectangle.png) right no-repeat,
+ url(rectangle.png) left no-repeat,
+ url(rectangle.png) top no-repeat,
+ url(rectangle.png) bottom no-repeat,
+ url(rectangle.png) top right no-repeat
+}
+.deck-container.fullscreen { /* for the demo but could be reused */
+ position: absolute;
+ left:0; top:0; width:100%; height:100%;
+ border: 0;
+}
+ </style>
+ </head>
+
+<!-- for the demo, the body is not the container so it can be resized by the user -->
+<body>
+
+<!-- for the demo, a select changes the fitMode -->
+<select class="fitModeSelect" style="float:right">
+ <option value="center middle" selected="true">(default) fitMode: "center middle"</option>
+ <option value="top left">fitMode: "top left"</option>
+ <option value="bottom right">fitMode: "bottom right"</option>
+ <option value="stretched">fitMode: "stretched"</option>
+</select>
+This page demonstrates the use of the "fit" extension for deck.js.<br/>
+Use left/right arrow keys to browse the presentation.<br/>
+
+<!-- for the demo, a resizeable wrapper around the container -->
+<div class="resizeable">
+<div class="deck-container">
+
+<!-- Begin slides -->
+<section class="slide" id="title-slide">
+ <h1>Getting started with deck.js:<br/><b>fit</b> extension
+ <br/><em>use right arrow to move on</em>
+ </h1>
+</section>
+
+<section class="slide">
+ <h2>“fit”: What It Does</h2>
+ <ul>
+ <li>
+ <h3>Before anything</h3> please resize the slides by dragging <em>the bottom right corner of the dark-red frame</em>
+ </li>
+ <li>
+ More on the next slide
+ </li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Designing for “fit”</h2>
+ <ul>
+ <li>You decide on a design dimension<br/> (default: 800x600)</li>
+ <li>You write all your slides<br/> as if they were exactly of this size</li>
+ <br/>
+ <li>You put your slides in a container of any size</li>
+ <li>You decide how they should adapt (e.g., center)</li>
+ <br/>
+ <li>And “fit” handles it!</li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Playing with “fit” demo</h2>
+ <ul>
+ <li>Resize the red box</li>
+ <li>Change the “fitMode”<br/> with the select on the top-right of this page</li>
+ <li>Press the 's' key to make the slides fit to the window</li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Browser support</h2>
+ <ul>
+ <li>Did it work for you? :)</li>
+ <li>Should be ok on good browsers</li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Notes about the demo</h2>
+ <ul>
+ <li>The 8 yellow boxes are to test background elements. You may use them into your slides, e.g., for footer, logos, …</li>
+ <li>The red border just helps understanding where the “deck-container” is</li>
+ <li>The white border just helps understanding where each “slide” is</li>
+ <li>The white border also illustrates the “fitMarginX” and “fitMarginY” options that can be used for adding a margin around the slides</li>
+ </ul>
+</section>
+
+<!-- DEMO: fit -->
+
+<!-- deck.navigation snippet -->
+<!--a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
+<a href="#" class="deck-next-link" title="Next">&#8594;</a-->
+
+<!-- deck.status snippet -->
+<!--p class="deck-status">
+ <span class="deck-status-current"></span>
+ /
+ <span class="deck-status-total"></span>
+</p-->
+
+<!-- deck.hash snippet -->
+<a href="." title="Permalink to this slide" class="deck-permalink">#</a>
+
+
+
+<!-- Initialize the deck -->
+<script>
+$(function() {
+ $.deck('.slide', {
+ // fitMarginX:100, fitMarginY:100,
+ // fitMode: "stretched" //"center middle" //"bottom right" //"top left"
+ });
+});
+</script>
+ <script> /* This script is just for the demo with live resizing */
+ $(function(){
+ var $c = $(".deck-container");
+ var xy = $c.width()+"x"+$c.height();
+ var update = function() {
+ var nxy = $c.width()+"x"+$c.height();
+ if (nxy != xy) {
+ xy = nxy;
+ $["deck"]('enableScale');
+ }
+ window.setTimeout(update, 200);
+ }
+ window.setTimeout(update, 200);
+ });
+ </script>
+ <script> /* This script is just for the demo: change fitMode using a select */
+ $(function(){
+ $(".fitModeSelect").change(function() {
+ $(".fitModeSelect option:selected").each(function () {
+ $['deck']('getOptions').fitMode = $(this).attr('value');
+ $["deck"]('enableScale');
+ });
+ $(".fitModeSelect").blur(); // to avoid the key strokes doing both nextSlide and changing the selected value in the select
+ });
+ $(".fitModeSelect").change();
+ });
+ </script>
+ <script> /* This script is just for the demo: unbinds the 's' key and use it to switch to fullscreen */
+ $(function(){
+ var deck = 'deck';
+ var $d = $(document);
+ var opts = $[deck]('getOptions');
+ $d.unbind('keydown.deckscale').bind('keydown.deckscale', function(e) {
+ if (e.which === opts.keys.scale || $.inArray(e.which, opts.keys.scale) > -1) {
+ $(".deck-container").toggleClass("fullscreen");
+ e.preventDefault();
+ }
+ })
+ });
+ </script>
+</div>
+</div>
+</body>
+</html>
diff --git a/deck.js/samples/deck-simplemath.html b/deck.js/samples/deck-simplemath.html
new file mode 100644
index 0000000..9e7693a
--- /dev/null
+++ b/deck.js/samples/deck-simplemath.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]> <html class="no-js ie6" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+ <title>deck.simplemath.js test/demo</title>
+
+ <meta name="description" content="deck.*.js">
+ <meta name="author" content="Rémi Emonet">
+ <!--meta name="viewport" content="width=1024, user-scalable=no"/-->
+
+ <!-- Core and extension CSS files -->
+ <link rel="stylesheet" href="../core/deck.core.css">
+ <link rel="stylesheet" href="../extensions/status/deck.status.css">
+ <link rel="stylesheet" href="../extensions/hash/deck.hash.css">
+
+ <!-- Style theme. More available in /themes/style/ or create your own. -->
+ <link rel="stylesheet" href="../themes/style/neon.css">
+
+ <!-- Transition theme. More available in /themes/transition/ or create your own. -->
+ <!--link rel="stylesheet" href="../themes/transition/horizontal-slide.css"-->
+
+ <script src="../modernizr.custom.js"></script>
+
+ <!-- Grab CDN jQuery, with a protocol relative URL; fall back to local if offline -->
+ <script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
+ <script>window.jQuery || document.write('<script src="../jquery-1.7.2.min.js"><\/script>')</script>
+
+ <!-- Deck Core and extensions -->
+ <script src="../core/deck.core.js"></script>
+ <script src="../extensions/hash/deck.hash.js"></script>
+ <script src="../extensions/status/deck.status.js"></script>
+ <script src="../extensions/fit/deck.fit.js"></script>
+ <link rel="stylesheet" href="../extensions/fit/deck.fit-fs.css">
+
+ <script src="../libs/display-latex2.user.js"></script>
+ <script src="../extensions/simplemath/deck.simplemath.js"></script>
+
+
+ <style type="text/css">
+ .deck-container .slide {border: 1px dashed #333;} /* for the demo */
+ .slide h1 {font-size: 3em;}
+ .slide h1 b {color: #0F0;}
+ .slide h1 em {color: #445; text-shadow: none; font-size: .3em;}
+ </style>
+ </head>
+
+<!-- for the demo, the body is not the container so it can be resized by the user -->
+<body>
+
+This page surely has a purpose.<br/>
+Use left/right arrow keys to browse the presentation.<br/>
+
+<!-- for the demo, a resizeable wrapper around the container -->
+<div class="deck-container">
+
+<!-- Begin slides -->
+<section class="slide" id="title-slide">
+ <h1 title="use arrow keys to navigate">Getting started with deck.js:<br/><b>simplemath</b> extension
+ <br/><em>use right arrow to move on</em>
+ </h1>
+</section>
+
+<section class="slide">
+ <h2>“simplemath”: What?</h2>
+ <ul>
+ <li>Add math equations in your slides</li>
+ <li>Use latex syntax</li>
+ <li>Just wrap your maths in a "span" element</li>
+ <li>Wants to learn latex syntax?</li>
+ <ul>
+ <li>view the source of this page</li>
+ <li>view <a href="http://www.andy-roberts.net/writing/latex/mathematics_1">online resources</a> (there are a lot)</li>
+ </ul>
+ <li>… examples on the next slide</li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>“simplemath” in action</h2>
+ <ul>
+ <li>
+ <span class="latex">e=mc^2</span>
+           <span class="latex">(\frac{x^2}{y^3})</span>
+           <span class="latex">[\begin{array}{cc} \sqrt{x} & 2 \\ 3 & x^4 \end{array}]</span>
+ </li>
+ <li><span class="latex">
+ f(n) = \left\{
+ \begin{array}{l l}
+ n/2 & \mbox{if } n \mbox{ is even}\\
+ -(n+1)/2 & \mbox{if } n \mbox{ is odd}
+ \end{array}
+ </span></li>
+ <li><span class="latex">a^2 + \frac{1}{\sqrt{a^2 + \frac{1}{\sqrt{a^2 + \frac{1}{\sqrt{a^2 + b^{\infty}}}}}}}</span></li>
+ <br/>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Principle</h2>
+ <ul>
+ <li>Written in Javascript</li>
+ <li>Interprets latex syntax</li>
+ <li>Generates MathML (web standard for maths)</li>
+ <li>Lets your browser render the MathML</li>
+ <br/>
+ <li>Works fully offline</li>
+ <ul style="list-style-type:none">
+ <li>− depends on browser support for MathML</li>
+ <li>+ works offline :)</li>
+
+ </ul>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Browser support</h2>
+ <ul>
+ <li>Did it work for you? :)</li>
+ <li>See <a href="https://en.wikipedia.org/wiki/MathML#Web_browsers">the wikipedia page on MathML</a></li>
+ </ul>
+</section>
+<!-- DEMO: simplemath -->
+
+<!-- deck.navigation snippet -->
+<!--a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
+<a href="#" class="deck-next-link" title="Next">&#8594;</a-->
+
+<!-- deck.status snippet -->
+<!--p class="deck-status">
+ <span class="deck-status-current"></span>
+ /
+ <span class="deck-status-total"></span>
+</p-->
+
+<!-- deck.hash snippet -->
+<a href="." title="Permalink to this slide" class="deck-permalink">#</a>
+
+<!-- Initialize the deck -->
+<script>
+$(function() {
+ $.deck('.slide', {
+ // fitMarginX:100, fitMarginY:100,
+ // fitMode: "stretched" //"center middle" //"bottom right" //"top left"
+ });
+});
+</script>
+</div>
+</body>
+</html>
diff --git a/deck.js/samples/deck-smartsyntax.html b/deck.js/samples/deck-smartsyntax.html
new file mode 100644
index 0000000..0fab88d
--- /dev/null
+++ b/deck.js/samples/deck-smartsyntax.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]> <html class="no-js ie6" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+ <title>deck.smartsyntax.js test/demo</title>
+
+ <meta name="description" content="deck.*.js">
+ <meta name="author" content="Rémi Emonet">
+ <!--meta name="viewport" content="width=1024, user-scalable=no"/-->
+
+ <!-- Core and extension CSS files -->
+ <link rel="stylesheet" href="../core/deck.core.css">
+ <link rel="stylesheet" href="../extensions/status/deck.status.css">
+ <link rel="stylesheet" href="../extensions/hash/deck.hash.css">
+
+ <!-- Style theme. More available in /themes/style/ or create your own. -->
+ <link rel="stylesheet" href="../themes/style/neon.css">
+
+ <!-- Transition theme. More available in /themes/transition/ or create your own. -->
+ <!--link rel="stylesheet" href="../themes/transition/horizontal-slide.css"-->
+
+ <script src="../modernizr.custom.js"></script>
+
+ <!-- Grab CDN jQuery, with a protocol relative URL; fall back to local if offline -->
+ <script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
+ <script>window.jQuery || document.write('<script src="../jquery-1.7.2.min.js"><\/script>')</script>
+
+ <!-- Deck Core and extensions -->
+ <script src="../core/deck.core.js"></script>
+ <script src="../extensions/hash/deck.hash.js"></script>
+ <!--script src="../extensions/status/deck.status.js"></script--->
+ <script src="../extensions/fit/deck.fit.js"></script>
+ <link rel="stylesheet" href="../extensions/fit/deck.fit-fs.css">
+
+ <script src="../extensions/step/deck.step.js"></script>
+ <script src="../extensions/events/deck.events.js"></script>
+ <script src="../extensions/anim/deck.anim.js"></script>
+ <script src="../libs/jquerysvg/jquery.svg.min.js"></script>
+ <script src="../libs/jquerysvg/jquery.svganim.min.js"></script>
+ <script src="../extensions/svg/deck.svg.js"></script>
+ <script src="../libs/display-latex2.user.js"></script>
+ <script src="../extensions/simplemath/deck.simplemath.js"></script>
+
+ <script src="../extensions/smartsyntax/deck.smartsyntax.js"></script>
+
+
+ <style type="text/css">
+ .deck-container>.slide {border: 1px dashed #333;} /* for the demo */
+ .slide ul ul {margin-bottom: 0.25em;} /* remove some big spacing with neon nested lists */
+ .deck-container > .slide .deck-before, .deck-container > .slide .deck-previous {opacity: 0.6;} /* <-- override darkish neon theme --> */
+ .slide h1 {font-size: 3em;}
+ .slide h1 b {color: #0F0;}
+ .slide h1 em {color: #445; text-shadow: none; font-size: .3em;}
+ .slide h1 em {color: #445; text-shadow: none; font-size: .3em; display: inline-block;}
+ .slide .smaller {text-shadow: none; font-size: .8em;}
+
+ .slide b {color: blue;}
+ .slide .highlight {color: red;}
+ .funny b {color: chartreuse}
+ .svgThatFloatsRight {float: right}
+
+ .slide .floatright {float:right;}
+ .slide div.svgitem {display: inline-block; vertical-align: middle;}
+ </style>
+ </head>
+
+<!-- for the demo, the body is not the container so it can be resized by the user -->
+<body>
+<svg id="svg-image-blur">
+ <filter id="blur-effect-1">
+ <feGaussianBlur stdDeviation="5" />
+ </filter>
+</svg>
+
+This page surely has a purpose.<br/>
+Use left/right arrow keys to browse the presentation.<br/>
+
+<!-- for the demo, a resizeable wrapper around the container -->
+<div class="deck-container">
+
+<section class="smart">
+ ==Getting started with deck.js:<br/><b>smartsyntax</b> extension<br/><em>use right arrow to move on</em>==#title-slide
+
+ =SmartSynt. ≃ Wiki Synt.=
+ * Easy bullet points (numbered or not)
+ * To learn smart syntax
+ ** Go through the current presentation<br/>to get an idea of what is possible
+ ** View the source of this page (Ctrl+U)
+
+ =SmartSynt. ≃ Wiki++=
+ * Easy class additions
+ *# on the slide itself (see next one)
+ *# on a bullet point (like this one who has a 'highlight' class)[highlight]
+ * Allow tags e.g. <b>this is inside a &lt;b> tag</b>
+ * NB
+ ** &lt;b> (bold) is styled in blue
+ ** 'highlight' class is styled in red
+
+ =Styled Slide=[funny]
+ * In the "smart syntax" source
+ ** this slide has the custom 'funny' class
+ * In the css of this page
+ ** &lt;b> tags within a 'funny' are styled in chartreuse (green)
+ ** (with <tt>.funny b {color: chartreuse}</tt>)
+ * and an example: <b>chartreuse is great!</b>, (<a href="http://duckduckgo.com/?q=chartreuse">learn more on chartreuse</a>)
+
+ =Deck.js Friendly=
+ * Friend with deck.js
+ ** creation of slides (<tt>&lt;section></tt> with a <tt>slide</tt> class)
+ * Friend with the theme conventions
+ ** title slides with a <tt>&lt;h1></tt> (using "<tt>==....==</tt>")
+ ** normal slides with a <tt>&lt;h2></tt> (using "<tt>=....=</tt>")
+
+ =Deck.*.js Friendly=
+ @svg: svgThatFloatsRight smiley.svg 150px 150px
+ * Friend with some deck.js extensions
+ ** SVG inclusion <br/>(smiley from <a href="http://openclipart.org/detail/77641/smiley-face-by-inky2010">inky2010</a>)
+ ** Latex maths using a pair of $$ signs
+ *** $E = mc^2$
+ *** $c = \sqrt{a^2+b^2}$
+ *** (use two consecutive dollar signs to output a dollar)[smaller]
+ ** more on next slide
+
+ =Animations Friendly=
+ * Progressive display: use the <tt>slide</tt> class
+ * This has both <tt>slide</tt> and <tt>highlight</tt> classes[slide][highlight]
+ * Next: more things[slide]
+ @svg: svg,floatright smiley.svg 150px 300px
+ <video class="myvid" style="float:left" src="simple.ogv" height="200" width="200" onclick="this.paused ? this.play() : this.pause()" controls="true"></video>
+
+ @anim-appear:800: #bottom | #left + #right | .svg #reflect + -#bottom | @#zoom | @#far | #bottom
+ @anim-play: .myvid
+ @anim-pause: video
+ @anim-attribute:400: h2: font-size: .75em
+ @anim-attribute:400: h2: font-size: 2.5em
+</section>
+
+<!-- we can make stop the smartsyntax section and start another afterwards -->
+<section class="slide">
+ <h2>Browser support</h2>
+ <ul>
+ <li>Should be ok</li>
+ </ul>
+</section>
+
+<section class="smart">
+ =Additional Notes=
+ * Case insensitive… <tt><span class="s1">@ANIM-…</span> ≡ <span class="s2">@aNiM-…</span> ≡ <span class="s3">@anim-…</span></tt>
+ @ANIM-APPEAR:600: .s1
+ @aNiM-aPPear:600: .s2
+ @anim-appear:600: .s3
+ * No compilation phase[slide]
+ ** interpreted at loading time
+ ** faster development
+ * Backward compatible with old version[slide]
+
+</section>
+
+<!-- DEMO: smartsyntax -->
+
+<!-- deck.navigation snippet -->
+<!--a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
+<a href="#" class="deck-next-link" title="Next">&#8594;</a-->
+
+<!-- deck.status snippet -->
+<!--p class="deck-status">
+ <span class="deck-status-current"></span>
+ /
+ <span class="deck-status-total"></span>
+</p-->
+
+<!-- deck.hash snippet -->
+<a href="." title="Permalink to this slide" class="deck-permalink">#</a>
+
+<!-- Initialize the deck -->
+<script>
+$(function() {
+ $.deck('.slide', {
+ // fitMarginX:100, fitMarginY:100,
+ // fitMode: "stretched" //"center middle" //"bottom right" //"top left"
+ });
+});
+</script>
+</div>
+</body>
+</html>
diff --git a/deck.js/samples/deck-step.html b/deck.js/samples/deck-step.html
new file mode 100644
index 0000000..36a84d0
--- /dev/null
+++ b/deck.js/samples/deck-step.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]> <html class="no-js ie6" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+ <title>deck.step.js test/demo</title>
+
+ <meta name="description" content="deck.*.js">
+ <meta name="author" content="Rémi Emonet">
+ <!--meta name="viewport" content="width=1024, user-scalable=no"/-->
+
+ <!-- Core and extension CSS files -->
+ <link rel="stylesheet" href="../core/deck.core.css">
+ <link rel="stylesheet" href="../extensions/status/deck.status.css">
+ <link rel="stylesheet" href="../extensions/hash/deck.hash.css">
+
+ <!-- Style theme. More available in /themes/style/ or create your own. -->
+ <link rel="stylesheet" href="../themes/style/neon.css">
+
+ <!-- Transition theme. More available in /themes/transition/ or create your own. -->
+ <!--link rel="stylesheet" href="../themes/transition/horizontal-slide.css"-->
+
+ <script src="../modernizr.custom.js"></script>
+
+ <!-- Grab CDN jQuery, with a protocol relative URL; fall back to local if offline -->
+ <script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
+ <script>window.jQuery || document.write('<script src="../jquery-1.7.2.min.js"><\/script>')</script>
+
+ <!-- Deck Core and extensions -->
+ <script src="../core/deck.core.js"></script>
+ <script src="../extensions/hash/deck.hash.js"></script>
+ <script src="../extensions/status/deck.status.js"></script>
+ <script src="../extensions/fit/deck.fit.js"></script>
+ <link rel="stylesheet" href="../extensions/fit/deck.fit-fs.css">
+
+ <script src="../extensions/step/deck.step.js"></script>
+
+
+ <style type="text/css">
+ .deck-container>.slide {border: 1px dashed #333;} /* for the demo */
+ .slide h1 {font-size: 3em;}
+ .slide h1 b {color: #0F0;}
+ .slide h1 em {color: #445; text-shadow: none; font-size: .3em;}
+ .slide .demo {font-size: .3em;}
+ </style>
+ </head>
+
+<!-- for the demo, the body is not the container so it can be resized by the user -->
+<body>
+
+This page surely has a purpose.<br/>
+Use left/right arrow keys to browse the presentation.<br/>
+
+<!-- for the demo, a resizeable wrapper around the container -->
+<div class="deck-container">
+
+<!-- Begin slides -->
+<section class="slide" id="title-slide">
+ <h1 title="use arrow keys to navigate">Getting started with deck.js:<br/><b>step</b> extension
+ <br/><em>use right arrow to move on</em>
+ </h1>
+</section>
+
+<section class="slide">
+ <h2>Nested deck.js slides</h2>
+ <ul>
+ <li>Not an extension (in core deck.js)</li>
+ <li>Just have an element with the “slide” class…</li>
+ <li>… and it will appear (hit the right arrow now)</li>
+ <li class="slide">Hey! I appeared! (go on)</li>
+ <li class="slide">The gray-ish style is part of the theme</li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Why the step extension?</h2>
+ <ul>
+ <li class="slide">
+ <span class="slide">Nested slides</span>
+ <span class="slide">are cool</span>
+ <span class="slide">and useful</span>
+ </li>
+ <li class="slide">But there is a problem</li>
+ <li class="slide">
+ <span class="slide">Navigating</span>
+ <span class="slide">is</span>
+ <span class="slide">annoying</span>
+ <span class="slide">with</span>
+ <span class="slide">nesting</span>
+ <span class="slide">!!!</span>
+ </li>
+ <li class="slide">Example:<br/> Try using the left arrow to go back to previous slide</li>
+ <li class="slide">Probably annoying!?</li>
+ <li class="slide">Now try hitting the up arrow</li>
+ <li class="slide">More on the next slide…</li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>The “step” extension</h2>
+ <br/>
+ <ul>
+ <li>Adds new key shortcuts</li>
+ <ul>
+ <li>up arrow: previous top level slide</li>
+ <li>down arrow: next top level slide</li>
+ </ul>
+ </ul>
+</section>
+</section>
+<section class="slide">
+ <h2>More “step”<span class="demo"> </span></h2>
+ <br/>
+ <ul>
+ <li class="slide">Other stuff… not visible
+ <ul>
+ <li>Defaults to not counting nested slides<br/>   (if you use the status extension)</li>
+ <li>Add notifications events to nested slides when the parent gets activated (for animations)</li>
+ <li>(The title ends in "21", see why in the source)</li>
+ </ul>
+ </li>
+ <!-- demotoshow shows a message (specific to this page) -->
+ <div class="demotoshow1 slide"></div> <!-- any "slide" receives a notification when the toplevel gets shown -->
+ <div class="demotoshow2 onshowtoplevel"></div> <!-- "onshowtoplevel" is a second default class that gets inited -->
+ <!-- the first of these two is a "slide", so it will get activated when "right arrow" is pressed, and the previous part will get gray -->
+ <!-- the second one is not a "slide", so it won't influence the navigation at all -->
+ </ul>
+</section>
+<section class="slide">
+ <h2>Browser support</h2>
+ <ul>
+ <li>Should be ok</li>
+ </ul>
+</section>
+
+<!-- DEMO: step -->
+
+<!-- deck.navigation snippet -->
+<!--a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
+<a href="#" class="deck-next-link" title="Next">&#8594;</a-->
+
+<!-- deck.status snippet -->
+<!--p class="deck-status">
+ <span class="deck-status-current"></span>
+ /
+ <span class="deck-status-total"></span>
+</p-->
+
+<!-- deck.hash snippet -->
+<a href="." title="Permalink to this slide" class="deck-permalink">#</a>
+
+<!-- Initialize the deck -->
+<script>
+$(function() {
+
+ // we register the listeners before call the deck init
+ $('.demotoshow1').bind('deck.toplevelBecameCurrent', function() {
+ $(".demo").html($(".demo").html()+"1");
+ });
+ $('.demotoshow2').bind('deck.toplevelBecameCurrent', function() {
+ $(".demo").html($(".demo").html()+"2");
+ });
+
+ $.deck('.slide', {
+ // fitMarginX:100, fitMarginY:100,
+ // fitMode: "stretched" //"center middle" //"bottom right" //"top left"
+ });
+});
+</script>
+</div>
+</body>
+</html>
diff --git a/deck.js/samples/deck-svg.html b/deck.js/samples/deck-svg.html
new file mode 100644
index 0000000..ee98779
--- /dev/null
+++ b/deck.js/samples/deck-svg.html
@@ -0,0 +1,368 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]> <html class="no-js ie6" lang="en"> <![endif]-->
+<!--[if IE 7]> <html class="no-js ie7" lang="en"> <![endif]-->
+<!--[if IE 8]> <html class="no-js ie8" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+ <title>deck.svg.js test/demo</title>
+
+ <meta name="description" content="deck.*.js">
+ <meta name="author" content="Rémi Emonet">
+ <!--meta name="viewport" content="width=1024, user-scalable=no"/-->
+
+ <!-- Core and extension CSS files -->
+ <link rel="stylesheet" href="../core/deck.core.css">
+ <link rel="stylesheet" href="../extensions/status/deck.status.css">
+ <link rel="stylesheet" href="../extensions/hash/deck.hash.css">
+
+ <!-- Style theme. More available in /themes/style/ or create your own. -->
+ <link rel="stylesheet" href="../themes/style/neon.css">
+
+ <!-- Transition theme. More available in /themes/transition/ or create your own. -->
+ <!--link rel="stylesheet" href="../themes/transition/horizontal-slide.css"-->
+
+ <script src="../modernizr.custom.js"></script>
+
+ <!-- Grab CDN jQuery, with a protocol relative URL; fall back to local if offline -->
+ <script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
+ <script>window.jQuery || document.write('<script src="../jquery-1.7.2.min.js"><\/script>')</script>
+
+ <!-- Deck Core and extensions -->
+ <script src="../core/deck.core.js"></script>
+ <script src="../extensions/hash/deck.hash.js"></script>
+ <!--script src="../extensions/status/deck.status.js"></script--->
+ <script src="../extensions/fit/deck.fit.js"></script>
+ <link rel="stylesheet" href="../extensions/fit/deck.fit-fs.css">
+
+ <script src="../extensions/step/deck.step.js"></script>
+ <script src="../extensions/events/deck.events.js"></script>
+ <script src="../extensions/anim/deck.anim.js"></script>
+ <script src="../libs/jquerysvg/jquery.svg.min.js"></script>
+ <script src="../libs/jquerysvg/jquery.svganim.min.js"></script>
+ <script src="../extensions/svg/deck.svg.js"></script>
+
+
+ <style type="text/css">
+ .deck-container>.slide {border: 1px dashed #333;} /* for the demo */
+ .slide ul ul {margin-bottom: 0.25em;} /* remove some big spacing with neon nested lists */
+ .slide h1 {font-size: 3em;}
+ .slide h1 b {color: #0F0;}
+ .slide h1 em {color: #445; text-shadow: none; font-size: .3em;}
+ .slide h1 em {color: #445; text-shadow: none; font-size: .3em; display: inline-block;}
+ .slide span.highlight {border: 1px solid red;}
+ .deck-container > .slide .deck-before, .deck-container > .slide .deck-previous {opacity: 0.6;} /* <-- override darkish neon theme --> */
+ div.floatright {float:right;}
+ div.svgitem {display: inline-block; vertical-align: middle;}
+
+ .svgitem #circleRedCircle {fill: #D00; stroke-width: 20px; stroke: white;}
+ .style1 #circleRedCircle {fill: #D00; stroke-width: 20px; stroke: white;}
+ .style2 #circleRedCircle {fill: #999; stroke-width: 5px; stroke: green;}
+ .style3 #circleRedCircle {fill: yellow; stroke-width: 5px; stroke: red;}
+ .style3 #circleRedCircle:hover {stroke-width: 25px; filter: blur(10px)}
+ .style3 #circleBlue:hover {fill: #F00;}
+
+ /* playing with blur: http://css-plus.com/2012/03/gaussian-blur/ */
+ .style3 #circleRedCircle:hover, .style3 #circleGreen:hover {
+ -webkit-transition: all 0.5s ease-out;
+ -moz-transition: all 0.5s ease-out;
+ -ms-transition: all 0.5s ease-out;
+ -o-transition: all 0.5s ease-out;
+ transition: all 0.5s ease-out;
+ }
+ .style3 #circleRedCircle:hover, .style3 #circleGreen:hover { -webkit-filter: blur(5px); filter: url(#blur-effect-1); }
+ </style>
+ </head>
+
+<!-- for the demo, the body is not the container so it can be resized by the user -->
+<body>
+<svg id="svg-image-blur">
+ <filter id="blur-effect-1">
+ <feGaussianBlur stdDeviation="5" />
+ </filter>
+</svg>
+
+This page surely has a purpose.<br/>
+Use left/right arrow keys to browse the presentation.<br/>
+
+<!-- for the demo, a resizeable wrapper around the container -->
+<div class="deck-container">
+
+<!-- Begin slides -->
+<section class="slide" id="title-slide">
+ <h1 title="use arrow keys to navigate">Getting started with deck.js:<br/><b>svg</b> extension
+ <br/><em>use right arrow to move on</em>
+ <br/><em class="ffox">(Firefox may ask for a plugin: just close the message and click on the page to give the focus back)</em>
+ </h1>
+</section>
+
+<section class="slide">
+ <h2>SVG Introduction</h2>
+ <ul>
+ <li>Scalable Vector Graphics (SVG)
+ <ul>
+ <li>Standard format for the web (and more)</li>
+ <li>Vector graphics: arbitrary stretching, no pixels</li>
+ <li>Cool editors (e.g., <a href="http://inkscape.org/">Inkscape</a>)</li>
+ <li>Lot of existing SVG (smiley by <a href="http://openclipart.org/detail/77641/smiley-face-by-inky2010">inky2010</a>)</li>
+ </ul>
+ </li>
+ <a href="http://openclipart.org/detail/77641/smiley-face-by-inky2010">
+ <object type="deckjs/svg" class="svgitem floatright">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="200px" />
+ <param name="height" value="200px" />
+ </object>
+ </a>
+ </ul>
+</section>
+<section class="slide">
+ <h2>The “svg” extension</h2>
+ <ul>
+ <li><a href="http://tavmjong.free.fr/SVG/SVG_IN_HTML/svg_in_html.html">Existing ways</a> of integrating SVG in HTML
+ <ul>
+ <li>Inline: the SVG content must be in the HTML file</li>
+ <li><tt>img</tt> tag: no interactivity support</li>
+ <li><tt>iframe/object/embed</tt> tags: separate DOM tree (styling and manipulation made harder)</li>
+ </ul>
+ </li>
+ <li>Deck.svg.js extension
+ <ul>
+ <li>does “inline” inclusion of external SVG files</li>
+ <li>uses a custom "object" tag and <a href="http://keith-wood.name/svg.html">jquery-svg</a></li>
+ </ul>
+ </li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>Deck.svg.js: size</h2>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="10px" />
+ <param name="height" value="10px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="21px" />
+ <param name="height" value="21px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="42px" />
+ <param name="height" value="42px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="85px" />
+ <param name="height" value="85px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="175px" />
+ <param name="height" value="175px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="350px" />
+ <param name="height" value="350px" />
+ </object>
+</section>
+<section class="slide">
+ <h2>Deck.svg.js: autosize</h2>
+ <ul><li>Does not work in chrome?<br/>(should see two smileys below)</li></ul>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="350px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="height" value="350px" />
+ </object>
+</section>
+<section class="slide">
+ <h2>Deck.svg.js: stretching</h2>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="100px" />
+ <param name="height" value="150px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="100px" />
+ <param name="height" value="150px" />
+ <param name="stretch" value="true" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="100px" />
+ <param name="height" value="200px" />
+ <param name="stretch" value="true" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="100px" />
+ <param name="height" value="250px" />
+ <param name="stretch" value="true" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="100px" />
+ <param name="height" value="300px" />
+ <param name="stretch" value="true" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="100px" />
+ <param name="height" value="350px" />
+ <param name="stretch" value="true" />
+ </object>
+ <object type="deckjs/svg" class="svgitem">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="100px" />
+ <param name="height" value="450px" />
+ <param name="stretch" value="true" />
+ </object>
+</section>
+<section class="slide">
+ <h2>Deck.svg.js: CSS styling</h2>
+ <object type="deckjs/svg" class="svgitem style1">
+ <param name="src" value="circle.svg" />
+ <param name="width" value="200px" />
+ <param name="height" value="200px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem style2">
+ <param name="src" value="circle.svg" />
+ <param name="width" value="200px" />
+ <param name="height" value="200px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem style3">
+ <param name="src" value="circle.svg" />
+ <param name="width" value="200px" />
+ <param name="height" value="200px" />
+ </object>
+ <ul>
+ <li>The same file is included three times using different styles (move your mouse on the yellow circle)</li>
+ <li>Needs for the SVG file to not contain the css attribute of interest<br/>(removed manually for the example)</li>
+ </ul>
+</section>
+<section class="slide">
+ <h2>svg+anim: show/hide</h2>
+ <object type="deckjs/svg" class="svgitem svg1">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="200px" />
+ <param name="height" value="200px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem svg2">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="200px" />
+ <param name="height" value="200px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem svg3">
+ <param name="src" value="smiley.svg" />
+ <param name="width" value="200px" />
+ <param name="height" value="200px" />
+ </object>
+ <ul>
+ <li>Use normal “anim” extension</li>
+ <li>Smooth operation thanks to <a href="http://keith-wood.name/svg.html">jquery-svg</a></li>
+ <li>Make stuff appear/disappear, …</li>
+ </ul>
+ <div class="anim-show slide" data-what=".svg2 svg"></div>
+ <div class="anim-show slide" data-what=".svg2 #left"></div>
+ <div class="anim-show slide" data-what=".svg2 #bottom"></div>
+ <div class="anim-show slide" data-what=".svg2 #right"></div>
+ <div class="anim-show slide" data-what=".svg2 #reflect"></div>
+ <div class="anim-hide slide" data-what="#left, #right, .svg2 #bottom"></div>
+ <div class="anim-show slide anim-continue" data-what="#left, #right, .svg2 #bottom"></div>
+ <div class="anim-hide slide" data-what=".svg3"></div>
+</section>
+<section class="slide">
+ <h2>svg+anim: svg attributes</h2>
+ <object type="deckjs/svg" class="svgitem svg1">
+ <param name="src" value="circle.svg" />
+ <param name="width" value="200px" />
+ <param name="height" value="200px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem svg2">
+ <param name="src" value="circle.svg" />
+ <param name="width" value="200px" />
+ <param name="height" value="200px" />
+ </object>
+ <object type="deckjs/svg" class="svgitem svg3">
+ <param name="src" value="circle.svg" />
+ <param name="width" value="200px" />
+ <param name="height" value="200px" />
+ </object>
+ <div class="anim-hide slide" data-what=".svg1 #circleRed, .svg1 #circleBlue"></div>
+ <div class="anim-hide slide anim-continue" data-what=".svg2 #circleBlue, .svg1 #circleGreen"></div>
+ <div class="anim-show slide" data-what=".svg1 #circleRed, .svg2 #circleRed"></div>
+ <ul class="slide"><li>The "view box" can be animate, and that's awesome</li></ul>
+ <!--div class="anim-attribute slide" data-what=".svg1 svg, .svg2 svg" data-attr="svgViewBox:110 120.5 17 17"></div not fully working (jquerysvg pb?) -->
+ <div class="anim-viewboxas slide" data-what=".svg1 svg, .svg2 svg" data-as="#zoomBox1"></div>
+ <!--div class="anim-attribute slide" data-what=".svg1 #coolText" data-attr="svg-transform: rotate(90)"></div-->
+</section>
+<!--section class="slide">
+ <h2>Add/Remove Classes</h2>
+ <ul>
+ <li class="slide">We can also <span class="demo1">add</span>/remove classes: like the “highlight”</li>
+ <li class="slide"><span class="demo2 highlight">This is highlight by default</span> (styled with css)</li>
+ <li class="slide">We can add a class</li>
+ <div class="anim-addclass slide" data-what=".demo1" data-class="highlight"></div>
+ <li class="slide">And remove it</li>
+ <div class="anim-removeclass slide" data-what=".demo1,.demo2" data-class="highlight"></div>
+ </ul>
+</section-->
+<!--section class="slide">
+ <h2>The “svg” extension</h2>
+ <ul>
+ <li>Works in conjunction with</li>
+ <ul>
+ <li>“events”: extension that triggers events<br/>   (notify the slide when it becomes current)</li>
+ <li>“step”: extension that also trigger init events<br/>   (knowing about toplevel vs nested slides)</li>
+ </ul>
+ <li>Uses open attributes "data-*" (see source)</li>
+ <li>Adds animation classes</li>
+ <ul>
+ <li>anim-show/hide, anim-addclass/removeclass,</li>
+ <li>anim-attribute, anim-play, anim-pause, …</li>
+ </ul>
+ </ul>
+</section-->
+<section class="slide">
+ <h2>Browser support</h2>
+ <ul>
+ <li>Should be ok with a decent browser</li>
+ <li>Chrome problem when only width or height is specified</li>
+ </ul>
+</section>
+
+<!-- DEMO: svg -->
+
+<!-- deck.navigation snippet -->
+<!--a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
+<a href="#" class="deck-next-link" title="Next">&#8594;</a-->
+
+<!-- deck.status snippet -->
+<!--p class="deck-status">
+ <span class="deck-status-current"></span>
+ /
+ <span class="deck-status-total"></span>
+</p-->
+
+<!-- deck.hash snippet -->
+<a href="." title="Permalink to this slide" class="deck-permalink">#</a>
+
+<!-- Initialize the deck -->
+<script>
+$(function() {
+ $.deck('.slide', {
+ // fitMarginX:100, fitMarginY:100,
+ // fitMode: "stretched" //"center middle" //"bottom right" //"top left"
+ });
+});
+</script>
+</div>
+</body>
+</html>
diff --git a/deck.js/samples/rectangle.png b/deck.js/samples/rectangle.png
new file mode 100644
index 0000000..bea0b6a
--- /dev/null
+++ b/deck.js/samples/rectangle.png
Binary files differ
diff --git a/deck.js/samples/simple.ogv b/deck.js/samples/simple.ogv
new file mode 100644
index 0000000..70fc871
--- /dev/null
+++ b/deck.js/samples/simple.ogv
Binary files differ
diff --git a/deck.js/samples/smiley.svg b/deck.js/samples/smiley.svg
new file mode 100755
index 0000000..aeecf69
--- /dev/null
+++ b/deck.js/samples/smiley.svg
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="200"
+ height="200"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="smiley.svg">
+ <defs
+ id="defs4">
+ <filter
+ x="-0.1171589"
+ y="-0.13548033"
+ width="1.2343178"
+ height="1.2709607"
+ color-interpolation-filters="sRGB"
+ id="filter4112">
+ <feGaussianBlur
+ id="feGaussianBlur4114"
+ stdDeviation="9.7319538" />
+ </filter>
+ <radialGradient
+ cx="200.99496"
+ cy="183.04042"
+ r="86.833374"
+ fx="200.99496"
+ fy="183.04042"
+ id="radialGradient5213"
+ xlink:href="#linearGradient3959"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.01247785,-0.77362204,0.9051095,-0.01459876,14.306029,334.58889)" />
+ <linearGradient
+ id="linearGradient3959">
+ <stop
+ id="stop3961"
+ style="stop-color:#00ffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3963"
+ style="stop-color:#00ffff;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="240.8517"
+ y1="-35.273369"
+ x2="178.73732"
+ y2="205.57832"
+ id="linearGradient5215"
+ xlink:href="#linearGradient3973"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(455.60801,222.60417)" />
+ <linearGradient
+ id="linearGradient3973">
+ <stop
+ id="stop3975"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3977"
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="157.18742"
+ y1="100.99799"
+ x2="151.48305"
+ y2="128.88608"
+ id="linearGradient5217"
+ xlink:href="#linearGradient4153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.54256638,0.14634927,-0.29910372,-0.26547378,718.04314,141.22157)" />
+ <linearGradient
+ id="linearGradient4153">
+ <stop
+ id="stop4155"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop4157"
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="157.18742"
+ y1="100.99799"
+ x2="151.48305"
+ y2="128.88608"
+ id="linearGradient5219"
+ xlink:href="#linearGradient4153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.54256638,0.14634927,-0.29910372,-0.26547378,765.61377,139.50575)" />
+ <linearGradient
+ id="linearGradient3799">
+ <stop
+ id="stop3801"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3803"
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.8101934"
+ inkscape:cx="-23.134185"
+ inkscape:cy="108.14566"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer2"
+ showgrid="false"
+ inkscape:window-width="1600"
+ inkscape:window-height="850"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ borderlayer="false"
+ inkscape:snap-page="true" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-5.908984,9.0723069)">
+ <g
+ transform="translate(-520.99785,-282.60186)"
+ id="g5196">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 259.8663,144.73158 c 0,47.6067 -38.87662,86.19956 -86.83337,86.19956 -47.95675,0 -86.833376,-38.59286 -86.833376,-86.19956 0,-47.606697 38.876626,-86.199552 86.833376,-86.199552 47.95675,0 86.83337,38.592855 86.83337,86.199552 z"
+ transform="matrix(0.82542448,0,-0.16994034,0.18041549,514.68602,419.72807)"
+ id="path4650"
+ style="opacity:0.76999996;fill:#434343;fill-opacity:1;stroke:none;filter:url(#filter4112)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 259.8663,144.73158 c 0,47.6067 -38.87662,86.19956 -86.83337,86.19956 -47.95675,0 -86.833376,-38.59286 -86.833376,-86.19956 0,-47.606697 38.876626,-86.199552 86.833376,-86.199552 47.95675,0 86.83337,38.592855 86.83337,86.199552 z"
+ transform="translate(453.07273,226.40709)"
+ id="path4652"
+ style="fill:#0000ff;fill-opacity:1;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 259.8663,144.73158 c 0,47.6067 -38.87662,86.19956 -86.83337,86.19956 -47.95675,0 -86.833376,-38.59286 -86.833376,-86.19956 0,-47.606697 38.876626,-86.199552 86.833376,-86.199552 47.95675,0 86.83337,38.592855 86.83337,86.199552 z"
+ transform="translate(453.07273,226.40709)"
+ id="path4654"
+ style="fill:url(#radialGradient5213);fill-opacity:1;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 628.60801,293.91667 c -16.97304,0.16673 -35.78645,5.21304 -47.21875,18.1875 11.41222,42.17165 65.8215,66.53703 104.4375,44.96875 4.8731,-2.76624 11.39862,-5.548 14.15625,-10.03125 -8.59889,-30.8005 -39.23863,-54.03831 -71.375,-53.125 z"
+ id="reflect"
+ style="fill:url(#linearGradient5215);fill-opacity:1;stroke:none"
+ inkscape:label="#path4656" />
+ <g
+ id="left"
+ inkscape:label="#g48">
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ id="path4658"
+ d="m 562.46601,329.28391 c 1.94927,-1.52526 3.94632,-3.00495 5.85078,-4.5957 1.74064,-1.66573 3.86664,-2.69411 5.64985,-4.24913 1.65402,-1.32519 3.15997,-2.79316 4.72926,-4.20758 0.74214,-0.79082 1.55726,-1.51793 2.37956,-2.24447 2.69652,-2.36166 4.50859,-0.4418 1.81209,1.9199 l 0,0 c -0.80062,0.69109 -1.55127,1.41263 -2.28547,2.16097 -1.66086,1.48812 -3.25284,3.04194 -4.99897,4.44125 -1.86049,1.52021 -3.85564,2.6856 -5.67838,4.27284 -2.21368,1.82262 -4.49175,3.58084 -6.78253,5.27742 -2.94692,1.88915 -3.6231,-0.88634 -0.67619,-2.7755 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#f9f9f9;fill-opacity:1;stroke:none"
+ id="path4662"
+ transform="matrix(1.2318841,0,0,1.6041667,401.07798,151.85202)"
+ d="m 171.13147,119.37877 c 0,8.40118 -6.52673,15.21169 -14.57787,15.21169 -8.05113,0 -14.57786,-6.81051 -14.57786,-15.21169 0,-8.40118 6.52673,-15.21169 14.57786,-15.21169 8.05114,0 14.57787,6.81051 14.57787,15.21169 z"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g4664"
+ transform="matrix(0.6645897,0,0,1,187.82755,211.29642)">
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ id="path4666"
+ transform="matrix(0.84257609,0,0,0.84257609,471.14016,23.754892)"
+ d="m 171.13147,119.37877 c 0,8.40118 -6.52673,15.21169 -14.57787,15.21169 -8.05113,0 -14.57786,-6.81051 -14.57786,-15.21169 0,-8.40118 6.52673,-15.21169 14.57786,-15.21169 8.05114,0 14.57787,6.81051 14.57787,15.21169 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#linearGradient5217);fill-opacity:1;stroke:none"
+ id="path4668"
+ d="m 605.66314,134.60426 c 2.58606,-0.78514 3.89522,-2.41527 3.26391,-3.8335 -5.04318,-0.3142 -10.23043,0.56622 -14.88229,1.11525 0.76566,2.46016 7.25062,4.17951 11.61838,2.71825 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ id="right"
+ inkscape:label="#g41">
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ id="path4660"
+ d="m 671.82503,330.672 c -2.16108,-1.20659 -4.36233,-2.36077 -6.48922,-3.63897 -1.97659,-1.37753 -4.2357,-2.06594 -6.23728,-3.3275 -1.83852,-1.05442 -3.55274,-2.27273 -5.32129,-3.42836 -0.85517,-0.66694 -1.77261,-1.25976 -2.69707,-1.85087 -3.02831,-1.91781 -4.52281,0.25841 -1.49451,2.17626 l 0,0 c 0.89757,0.55943 1.75046,1.15665 2.59124,1.78287 1.87039,1.21434 3.68285,2.50421 5.6238,3.61767 2.07257,1.21527 4.2235,2.0592 6.2691,3.34653 2.46817,1.45964 4.99001,2.84571 7.51492,4.16893 3.20289,1.41234 3.44319,-1.4342 0.24031,-2.84656 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#f9f9f9;fill-opacity:1;stroke:none"
+ id="path4670"
+ d="m 662.69008,348.51611 c 0,13.47689 -7.33075,24.40208 -16.37369,24.40208 -9.04294,0 -16.37369,-10.92519 -16.37369,-24.40208 0,-13.4769 7.33075,-24.40209 16.37369,-24.40209 9.04294,0 16.37369,10.92519 16.37369,24.40209 z"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g4672"
+ transform="matrix(0.6645897,0,0,1,208.30119,219.8887)">
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ id="path4674"
+ transform="matrix(0.84257609,0,0,0.84257609,517.44315,22.039072)"
+ d="m 171.13147,119.37877 c 0,8.40118 -6.52673,15.21169 -14.57787,15.21169 -8.05113,0 -14.57786,-6.81051 -14.57786,-15.21169 0,-8.40118 6.52673,-15.21169 14.57786,-15.21169 8.05114,0 14.57787,6.81051 14.57787,15.21169 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#linearGradient5219);fill-opacity:1;stroke:none"
+ id="path4676"
+ d="m 653.23377,132.88844 c 2.58606,-0.78514 3.89522,-2.41527 3.26391,-3.8335 -5.04318,-0.3142 -10.23043,0.56622 -14.88229,1.11525 0.76566,2.46016 7.25062,4.17951 11.61838,2.71825 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ d="m 171.13147,119.37877 c 0,8.40118 -6.52673,15.21169 -14.57787,15.21169 -8.05113,0 -14.57786,-6.81051 -14.57786,-15.21169 0,-8.40118 6.52673,-15.21169 14.57786,-15.21169 8.05114,0 14.57787,6.81051 14.57787,15.21169 z"
+ transform="matrix(0.66459167,0,0,0.92590939,500.32602,305.20869)"
+ id="bottom"
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ inkscape:label="#path4604" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Invisible Rects"
+ style="display:none">
+ <rect
+ style="opacity:0.7;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="zoom"
+ width="53.515625"
+ height="65.234375"
+ x="101.61211"
+ y="30.771442"
+ inkscape:label="#rect3021" />
+ <rect
+ style="opacity:0.7;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="far"
+ width="374.4758"
+ height="330.95184"
+ x="-88.975266"
+ y="-79.713989"
+ inkscape:label="#rect3021" />
+ </g>
+ </g>
+</svg>
diff --git a/deck.js/themes/style/neon.css b/deck.js/themes/style/neon.css
new file mode 100644
index 0000000..aaaeb93
--- /dev/null
+++ b/deck.js/themes/style/neon.css
@@ -0,0 +1,123 @@
+.deck-container {
+ font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
+ font-size: 1.75em;
+ color: #aaa;
+ background: #000;
+}
+.deck-container .slide {
+ background: #000;
+}
+.deck-container .slide h1 {
+ color: #0af;
+ font-weight: normal;
+ font-weight: 100;
+ text-shadow: 0 0 50px #0af, 0 0 3px #fff;
+}
+.deck-container .slide h2 {
+ color: #af0;
+ border-bottom-color: #ccc;
+ font-weight: normal;
+ font-weight: 100;
+ text-shadow: 0 0 15px #af0, 0 0 2px #fff;
+ border-bottom: 1px solid #333;
+}
+.deck-container .slide h3 {
+ color: #fff;
+ font-weight: normal;
+ font-weight: 100;
+ text-shadow: 0 0 10px #fff, 0 0 2px #fff;
+}
+.deck-container .slide pre {
+ border-color: #333;
+}
+.deck-container .slide pre code {
+ color: #fff;
+}
+.deck-container .slide code {
+ color: #f0a;
+}
+.deck-container .slide blockquote {
+ font-size: 2em;
+ padding: 1em 2em;
+ color: #fff;
+ border-left: 5px solid #fff;
+}
+.deck-container .slide blockquote p {
+ margin: 0;
+}
+.deck-container .slide blockquote cite {
+ font-size: .5em;
+ font-style: normal;
+ font-weight: normal;
+ font-weight: 100;
+ color: #aaa;
+ text-shadow: 0 0 15px #fff, 0 0 2px #fff;
+}
+.deck-container .slide ::-moz-selection {
+ background: #a0f;
+}
+.deck-container .slide ::selection {
+ background: #a0f;
+}
+.deck-container .slide a, .deck-container .slide a:hover, .deck-container .slide a:focus, .deck-container .slide a:active, .deck-container .slide a:visited {
+ color: #f0a;
+ text-decoration: none;
+}
+.deck-container .slide a:hover, .deck-container .slide a:focus {
+ text-decoration: underline;
+}
+.deck-container .deck-prev-link, .deck-container .deck-next-link {
+ background: #f0a;
+ text-shadow: 0 0 3px #fff;
+}
+.deck-container .deck-prev-link, .deck-container .deck-prev-link:hover, .deck-container .deck-prev-link:focus, .deck-container .deck-prev-link:active, .deck-container .deck-prev-link:visited, .deck-container .deck-next-link, .deck-container .deck-next-link:hover, .deck-container .deck-next-link:focus, .deck-container .deck-next-link:active, .deck-container .deck-next-link:visited {
+ color: #fff;
+}
+.deck-container .deck-prev-link:hover, .deck-container .deck-prev-link:focus, .deck-container .deck-next-link:hover, .deck-container .deck-next-link:focus {
+ text-decoration: none;
+}
+.boxshadow .deck-container .deck-prev-link:hover, .boxshadow .deck-container .deck-prev-link:focus, .boxshadow .deck-container .deck-next-link:hover, .boxshadow .deck-container .deck-next-link:focus {
+ -webkit-box-shadow: 0 0 20px #f0a, 0 0 5px #fff;
+ -moz-box-shadow: 0 0 20px #f0a, 0 0 5px #fff;
+ box-shadow: 0 0 20px #f0a, 0 0 5px #fff;
+}
+.deck-container > .slide .deck-before, .deck-container > .slide .deck-previous {
+ opacity: 0.4;
+}
+.deck-container > .slide .deck-before:not(.deck-child-current) .deck-before, .deck-container > .slide .deck-before:not(.deck-child-current) .deck-previous, .deck-container > .slide .deck-previous:not(.deck-child-current) .deck-before, .deck-container > .slide .deck-previous:not(.deck-child-current) .deck-previous {
+ opacity: 1;
+}
+.deck-container > .slide .deck-child-current {
+ opacity: 1;
+}
+.deck-container .deck-status {
+ font-size: 0.6666em;
+}
+.deck-container .goto-form {
+ background: #000;
+ border: 1px solid #f0a;
+}
+.deck-container .goto-form label {
+ color: #fff;
+}
+.deck-container.deck-menu .slide {
+ background: #333;
+}
+.deck-container.deck-menu .deck-current {
+ background: #444;
+}
+.boxshadow .deck-container.deck-menu .deck-current {
+ background: #000;
+ -webkit-box-shadow: 0 0 20px #f0a, 0 0 5px #fff;
+ -moz-box-shadow: 0 0 20px #f0a, 0 0 5px #fff;
+ box-shadow: 0 0 20px #f0a, 0 0 5px #fff;
+}
+.no-touch .deck-container.deck-menu .slide:hover {
+ background: #444;
+}
+.no-touch.boxshadow .deck-container.deck-menu .slide:hover {
+ background: #000;
+ -webkit-box-shadow: 0 0 20px #f0a, 0 0 5px #fff;
+ -moz-box-shadow: 0 0 20px #f0a, 0 0 5px #fff;
+ box-shadow: 0 0 20px #f0a, 0 0 5px #fff;
+}
diff --git a/deck.js/themes/style/neon.scss b/deck.js/themes/style/neon.scss
new file mode 100644
index 0000000..d44babf
--- /dev/null
+++ b/deck.js/themes/style/neon.scss
@@ -0,0 +1,155 @@
+.deck-container {
+ font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
+ font-size:1.75em;
+ color:#aaa;
+ background:#000;
+
+ .slide {
+ background:#000;
+
+ h1 {
+ color:#0af;
+ font-weight:normal;
+ font-weight:100;
+ text-shadow:0 0 50px #0af, 0 0 3px #fff;
+ }
+
+ h2 {
+ color:#af0;
+ border-bottom-color:#ccc;
+ font-weight:normal;
+ font-weight:100;
+ text-shadow:0 0 15px #af0, 0 0 2px #fff;
+ border-bottom:1px solid #333;
+ }
+
+ h3 {
+ color:#fff;
+ font-weight:normal;
+ font-weight:100;
+ text-shadow:0 0 10px #fff, 0 0 2px #fff;
+ }
+
+ pre {
+ border-color:#333;
+
+ code {
+ color:#fff;
+ }
+ }
+
+ code {
+ color:#f0a;
+ }
+
+ blockquote {
+ font-size:2em;
+ padding:1em 2em;
+ color:#fff;
+ border-left:5px solid #fff;
+
+ p {
+ margin:0;
+ }
+
+ cite {
+ font-size:.5em;
+ font-style:normal;
+ font-weight:normal;
+ font-weight:100;
+ color:#aaa;
+ text-shadow:0 0 15px #fff, 0 0 2px #fff;
+ }
+ }
+
+ ::-moz-selection{ background:#a0f; }
+ ::selection { background:#a0f; }
+
+ a {
+ &, &:hover, &:focus, &:active, &:visited {
+ color:#f0a;
+ text-decoration:none;
+ }
+
+ &:hover, &:focus {
+ text-decoration:underline;
+ }
+ }
+ }
+
+ .deck-prev-link, .deck-next-link {
+ background:#f0a;
+ text-shadow:0 0 3px #fff;
+
+ &, &:hover, &:focus, &:active, &:visited {
+ color:#fff;
+ }
+
+ &:hover, &:focus {
+ text-decoration:none;
+
+ .boxshadow & {
+ -webkit-box-shadow:0 0 20px #f0a, 0 0 5px #fff;
+ -moz-box-shadow:0 0 20px #f0a, 0 0 5px #fff;
+ box-shadow:0 0 20px #f0a, 0 0 5px #fff;
+ }
+ }
+ }
+
+ > .slide {
+ .deck-before, .deck-previous {
+ opacity:0.4;
+
+ &:not(.deck-child-current) {
+ .deck-before, .deck-previous {
+ opacity:1;
+ }
+ }
+ }
+
+ .deck-child-current {
+ opacity:1;
+ }
+ }
+
+ .deck-status {
+ font-size:0.6666em;
+ }
+
+ .goto-form {
+ background:#000;
+ border:1px solid #f0a;
+
+ label {
+ color:#fff;
+ }
+ }
+
+ &.deck-menu {
+ .slide {
+ background:#333;
+ }
+
+ .deck-current {
+ background:#444;
+
+ .boxshadow & {
+ background:#000;
+ -webkit-box-shadow:0 0 20px #f0a, 0 0 5px #fff;
+ -moz-box-shadow:0 0 20px #f0a, 0 0 5px #fff;
+ box-shadow:0 0 20px #f0a, 0 0 5px #fff;
+ }
+ }
+
+ .no-touch & .slide:hover {
+ background:#444;
+ }
+
+ .no-touch.boxshadow & .slide:hover {
+ background:#000;
+ -webkit-box-shadow:0 0 20px #f0a, 0 0 5px #fff;
+ -moz-box-shadow:0 0 20px #f0a, 0 0 5px #fff;
+ box-shadow:0 0 20px #f0a, 0 0 5px #fff;
+ }
+ }
+}
diff --git a/deck.js/themes/style/swiss.css b/deck.js/themes/style/swiss.css
new file mode 100644
index 0000000..64f76ac
--- /dev/null
+++ b/deck.js/themes/style/swiss.css
@@ -0,0 +1,84 @@
+.deck-container {
+ font-family: "Helvetica Neue", sans-serif;
+ font-size: 1.75em;
+ background: #fff;
+}
+.deck-container .slide {
+ background: #fff;
+}
+.deck-container .slide h1 {
+ color: #000;
+}
+.deck-container .slide h2 {
+ color: #c00;
+ border-bottom-color: #ccc;
+}
+.deck-container .slide h3 {
+ color: #888;
+}
+.deck-container .slide pre {
+ border-color: #ccc;
+}
+.deck-container .slide code {
+ color: #888;
+}
+.deck-container .slide blockquote {
+ font-size: 2em;
+ font-style: italic;
+ padding: 1em 2em;
+ color: #000;
+ border-left: 5px solid #ccc;
+}
+.deck-container .slide blockquote p {
+ margin: 0;
+}
+.deck-container .slide blockquote cite {
+ font-size: .5em;
+ font-style: normal;
+ font-weight: bold;
+ color: #888;
+}
+.deck-container .slide ::-moz-selection {
+ background: #c00;
+ color: #fff;
+}
+.deck-container .slide ::selection {
+ background: #c00;
+ color: #fff;
+}
+.deck-container .slide a, .deck-container .slide a:hover, .deck-container .slide a:focus, .deck-container .slide a:active, .deck-container .slide a:visited {
+ color: #c00;
+ text-decoration: none;
+}
+.deck-container .slide a:hover, .deck-container .slide a:focus {
+ text-decoration: underline;
+}
+.deck-container > .slide .deck-before, .deck-container > .slide .deck-previous {
+ opacity: 0.4;
+}
+.deck-container > .slide .deck-before:not(.deck-child-current) .deck-before, .deck-container > .slide .deck-before:not(.deck-child-current) .deck-previous, .deck-container > .slide .deck-previous:not(.deck-child-current) .deck-before, .deck-container > .slide .deck-previous:not(.deck-child-current) .deck-previous {
+ opacity: 1;
+}
+.deck-container > .slide .deck-child-current {
+ opacity: 1;
+}
+.deck-container .deck-prev-link, .deck-container .deck-next-link {
+ background: #ccc;
+ font-family: serif;
+}
+.deck-container .deck-prev-link, .deck-container .deck-prev-link:hover, .deck-container .deck-prev-link:focus, .deck-container .deck-prev-link:active, .deck-container .deck-prev-link:visited, .deck-container .deck-next-link, .deck-container .deck-next-link:hover, .deck-container .deck-next-link:focus, .deck-container .deck-next-link:active, .deck-container .deck-next-link:visited {
+ color: #fff;
+}
+.deck-container .deck-prev-link:hover, .deck-container .deck-prev-link:focus, .deck-container .deck-next-link:hover, .deck-container .deck-next-link:focus {
+ background: #c00;
+ text-decoration: none;
+}
+.deck-container .deck-status {
+ font-size: 0.6666em;
+}
+.deck-container.deck-menu .slide {
+ background: #eee;
+}
+.deck-container.deck-menu .deck-current, .no-touch .deck-container.deck-menu .slide:hover {
+ background: #ddf;
+}
diff --git a/deck.js/themes/style/swiss.scss b/deck.js/themes/style/swiss.scss
new file mode 100644
index 0000000..f9b0e76
--- /dev/null
+++ b/deck.js/themes/style/swiss.scss
@@ -0,0 +1,107 @@
+.deck-container {
+ font-family: "Helvetica Neue", sans-serif;
+ font-size:1.75em;
+ background:#fff;
+
+ .slide {
+ background:#fff;
+
+ h1 {
+ color:#000;
+ }
+
+ h2 {
+ color:#c00;
+ border-bottom-color:#ccc;
+ }
+
+ h3 {
+ color:#888;
+ }
+
+ pre {
+ border-color:#ccc;
+ }
+
+ code {
+ color:#888;
+ }
+
+ blockquote {
+ font-size:2em;
+ font-style:italic;
+ padding:1em 2em;
+ color:#000;
+ border-left:5px solid #ccc;
+
+ p {
+ margin:0;
+ }
+
+ cite {
+ font-size:.5em;
+ font-style:normal;
+ font-weight:bold;
+ color:#888;
+ }
+ }
+
+ ::-moz-selection{ background:#c00; color:#fff; }
+ ::selection { background:#c00; color:#fff; }
+
+ a {
+ &, &:hover, &:focus, &:active, &:visited {
+ color:#c00;
+ text-decoration:none;
+ }
+
+ &:hover, &:focus {
+ text-decoration:underline;
+ }
+ }
+ }
+
+ > .slide {
+ .deck-before, .deck-previous {
+ opacity:0.4;
+
+ &:not(.deck-child-current) {
+ .deck-before, .deck-previous {
+ opacity:1;
+ }
+ }
+ }
+
+ .deck-child-current {
+ opacity:1;
+ }
+ }
+
+ .deck-prev-link, .deck-next-link {
+ background:#ccc;
+ font-family:serif; // sans-serif arrows x-browser fail
+
+ &, &:hover, &:focus, &:active, &:visited {
+ color:#fff;
+ }
+
+ &:hover, &:focus {
+ background:#c00;
+ text-decoration:none;
+ }
+ }
+
+ .deck-status {
+ font-size:0.6666em;
+ }
+
+ &.deck-menu {
+ .slide {
+ background:#eee;
+ }
+
+ .deck-current, .no-touch & .slide:hover {
+ background:#ddf;
+ }
+ }
+}
diff --git a/deck.js/themes/style/web-2.0.css b/deck.js/themes/style/web-2.0.css
new file mode 100644
index 0000000..7b30894
--- /dev/null
+++ b/deck.js/themes/style/web-2.0.css
@@ -0,0 +1,192 @@
+@charset "UTF-8";
+.deck-container {
+ font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
+ font-size: 1.5em;
+ background-color: #000;
+}
+.deck-container > .slide .deck-before, .deck-container > .slide .deck-previous {
+ opacity: 0.4;
+}
+.deck-container > .slide .deck-before:not(.deck-child-current) .deck-before, .deck-container > .slide .deck-before:not(.deck-child-current) .deck-previous, .deck-container > .slide .deck-previous:not(.deck-child-current) .deck-before, .deck-container > .slide .deck-previous:not(.deck-child-current) .deck-previous {
+ opacity: 1;
+}
+.deck-container > .slide .deck-child-current {
+ opacity: 1;
+}
+.deck-container .slide h1, .deck-container .slide h2, .deck-container .slide h3, .deck-container .slide h4, .deck-container .slide h5, .deck-container .slide h6 {
+/* font-family: "Hoefler Text", Constantia, Palatino, "Palatino Linotype", "Book Antiqua", Georgia, serif; */
+}
+.deck-container .slide h1 {
+ color: #ff00ff;
+}
+.deck-container .slide h2 {
+ color: #ff00ff;
+ border-bottom: 0;
+}
+.deck-container .slide h3 {
+ color: #ff00ff;
+}
+.deck-container .slide pre {
+ border-color: #cde;
+ background: #fff;
+ position: relative;
+ z-index: auto;
+ /* http://nicolasgallagher.com/css-drop-shadows-without-images/ */
+}
+.borderradius .deck-container .slide pre {
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.csstransforms.boxshadow .deck-container .slide pre > :first-child:before {
+ content: "";
+ position: absolute;
+ z-index: -1;
+ background: #fff;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+}
+.csstransforms.boxshadow .deck-container .slide pre:before, .csstransforms.boxshadow .deck-container .slide pre:after {
+ content: "";
+ position: absolute;
+ z-index: -2;
+ bottom: 15px;
+ width: 50%;
+ height: 20%;
+ max-width: 300px;
+ -webkit-box-shadow: 0 15px 10px rgba(0, 0, 0, 0.7);
+ -moz-box-shadow: 0 15px 10px rgba(0, 0, 0, 0.7);
+ box-shadow: 0 15px 10px rgba(0, 0, 0, 0.7);
+}
+.csstransforms.boxshadow .deck-container .slide pre:before {
+ left: 10px;
+ -webkit-transform: rotate(-3deg);
+ -moz-transform: rotate(-3deg);
+ -ms-transform: rotate(-3deg);
+ -o-transform: rotate(-3deg);
+ transform: rotate(-3deg);
+}
+.csstransforms.boxshadow .deck-container .slide pre:after {
+ right: 10px;
+ -webkit-transform: rotate(3deg);
+ -moz-transform: rotate(3deg);
+ -ms-transform: rotate(3deg);
+ -o-transform: rotate(3deg);
+ transform: rotate(3deg);
+}
+.deck-container .slide code {
+ color: #789;
+}
+.deck-container .slide blockquote {
+ font-family: "Hoefler Text", Constantia, Palatino, "Palatino Linotype", "Book Antiqua", Georgia, serif;
+ font-size: 2em;
+ padding: 1em 2em .5em 2em;
+ color: #000;
+ background: #fff;
+ position: relative;
+ border: 1px solid #cde;
+ z-index: auto;
+}
+.borderradius .deck-container .slide blockquote {
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.boxshadow .deck-container .slide blockquote > :first-child:before {
+ content: "";
+ position: absolute;
+ z-index: -1;
+ background: #fff;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+}
+.boxshadow .deck-container .slide blockquote:after {
+ content: "";
+ position: absolute;
+ z-index: -2;
+ top: 10px;
+ bottom: 10px;
+ left: 0;
+ right: 50%;
+ -moz-border-radius: 10px/100px;
+ border-radius: 10px/100px;
+ -webkit-box-shadow: 0 0 15px rgba(0, 0, 0, 0.6);
+ -moz-box-shadow: 0 0 15px rgba(0, 0, 0, 0.6);
+ box-shadow: 0 0 15px rgba(0, 0, 0, 0.6);
+}
+.deck-container .slide blockquote p {
+ margin: 0;
+}
+.deck-container .slide blockquote cite {
+ font-size: .5em;
+ font-style: normal;
+ font-weight: bold;
+ color: #888;
+}
+.deck-container .slide blockquote:before {
+ content: "“";
+ position: absolute;
+ top: 0;
+ left: 0;
+ font-size: 5em;
+ line-height: 1;
+ color: #ccf0f0;
+ z-index: 1;
+}
+.deck-container .slide ::-moz-selection {
+ background: #08455f;
+ color: #fff;
+}
+.deck-container .slide ::selection {
+ background: #08455f;
+ color: #fff;
+}
+.deck-container .slide a, .deck-container .slide a:hover, .deck-container .slide a:focus, .deck-container .slide a:active, .deck-container .slide a:visited {
+ color: #599;
+ text-decoration: none;
+}
+.deck-container .slide a:hover, .deck-container .slide a:focus {
+ text-decoration: underline;
+}
+.deck-container .deck-prev-link, .deck-container .deck-next-link {
+ background: #fff;
+ opacity: 0.5;
+}
+.deck-container .deck-prev-link, .deck-container .deck-prev-link:hover, .deck-container .deck-prev-link:focus, .deck-container .deck-prev-link:active, .deck-container .deck-prev-link:visited, .deck-container .deck-next-link, .deck-container .deck-next-link:hover, .deck-container .deck-next-link:focus, .deck-container .deck-next-link:active, .deck-container .deck-next-link:visited {
+ color: #599;
+}
+.deck-container .deck-prev-link:hover, .deck-container .deck-prev-link:focus, .deck-container .deck-next-link:hover, .deck-container .deck-next-link:focus {
+ opacity: 1;
+ text-decoration: none;
+}
+.deck-container .deck-status {
+ font-size: 0.6666em;
+}
+.deck-container.deck-menu .slide {
+ background: transparent;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.rgba .deck-container.deck-menu .slide {
+ background: rgba(0, 0, 0, 0.1);
+}
+.deck-container.deck-menu .slide.deck-current, .rgba .deck-container.deck-menu .slide.deck-current, .no-touch .deck-container.deck-menu .slide:hover {
+ background: #fff;
+}
+.deck-container .goto-form {
+ background: #fff;
+ border: 1px solid #cde;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.boxshadow .deck-container .goto-form {
+ -webkit-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
+ -moz-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
+ box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
+}
diff --git a/deck.js/themes/style/web-2.0.scss b/deck.js/themes/style/web-2.0.scss
new file mode 100644
index 0000000..2b36fae
--- /dev/null
+++ b/deck.js/themes/style/web-2.0.scss
@@ -0,0 +1,250 @@
+@mixin border-radius($r) {
+ -webkit-border-radius:$r;
+ -moz-border-radius:$r;
+ border-radius:$r;
+}
+
+@mixin rotate($deg) {
+ -webkit-transform:rotate($deg);
+ -moz-transform:rotate($deg);
+ -ms-transform:rotate($deg);
+ -o-transform:rotate($deg);
+ transform:rotate($deg);
+}
+
+@mixin box-shadow($x, $y, $blur, $color) {
+ -webkit-box-shadow:$x $y $blur $color;
+ -moz-box-shadow:$x $y $blur $color;
+ box-shadow:$x $y $blur $color;
+}
+
+
+.deck-container {
+ font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
+ font-size:1.75em;
+ background: rgb(244,250,254); /* Old browsers */
+ background: -moz-linear-gradient(top, rgba(244,250,254,1) 0%, rgba(204,240,240,1) 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(244,250,254,1)), color-stop(100%,rgba(204,240,240,1))); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, rgba(244,250,254,1) 0%,rgba(204,240,240,1) 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, rgba(244,250,254,1) 0%,rgba(204,240,240,1) 100%); /* Opera11.10+ */
+ background: -ms-linear-gradient(top, rgba(244,250,254,1) 0%,rgba(204,240,240,1) 100%); /* IE10+ */
+ background: linear-gradient(top, rgba(244,250,254,1) 0%,rgba(204,240,240,1) 100%); /* W3C */
+ background-attachment: fixed;
+
+ > .slide {
+ text-shadow:1px 1px 1px rgba(255,255,255,.5);
+
+ .deck-before, .deck-previous {
+ opacity:0.4;
+
+ &:not(.deck-child-current) {
+ .deck-before, .deck-previous {
+ opacity:1;
+ }
+ }
+ }
+
+ .deck-child-current {
+ opacity:1;
+ }
+ }
+
+ .slide {
+ h1, h2, h3, h4, h5, h6 {
+ font-family: "Hoefler Text", Constantia, Palatino, "Palatino Linotype", "Book Antiqua", Georgia, serif;
+ }
+
+ h1 {
+ color:#08455f;
+ }
+
+ h2 {
+ color:#0b7495;
+ border-bottom:0;
+
+ .cssreflections & {
+ line-height:1;
+ -webkit-box-reflect:below -0.5555em -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(0.3, transparent), color-stop(0.7, rgba(255,255,255,.1)), to(transparent));
+ -moz-box-reflect:below -0.5555em -moz-linear-gradient(top, transparent 0%, transparent 30%, rgba(255,255,255,.3) 100%);
+ }
+ }
+
+ h3 {
+ color:#000;
+ }
+
+ pre {
+ border-color:#cde;
+ background:#fff;
+ position:relative;
+ z-index:auto;
+
+ .borderradius & {
+ @include border-radius(5px);
+ }
+
+ /* http://nicolasgallagher.com/css-drop-shadows-without-images/ */
+ .csstransforms.boxshadow & {
+ > :first-child:before {
+ content:"";
+ position:absolute;
+ z-index:-1;
+ background:#fff;
+ top:0;
+ bottom:0;
+ left:0;
+ right:0;
+ }
+
+ &:before, &:after {
+ content:"";
+ position:absolute;
+ z-index:-2;
+ bottom:15px;
+ width:50%;
+ height:20%;
+ max-width:300px;
+ @include box-shadow(0, 15px, 10px, rgba(0, 0, 0, 0.7));
+ }
+
+ &:before {
+ left:10px;
+ @include rotate(-3deg);
+ }
+
+ &:after {
+ right:10px;
+ @include rotate(3deg);
+ }
+ }
+ }
+
+ code {
+ color:#789;
+ }
+
+ blockquote {
+ font-family: "Hoefler Text", Constantia, Palatino, "Palatino Linotype", "Book Antiqua", Georgia, serif;
+ font-size:2em;
+ padding:1em 2em .5em 2em;
+ color:#000;
+ background:#fff;
+ position:relative;
+ border:1px solid #cde;
+ z-index:auto;
+
+ .borderradius & {
+ @include border-radius(5px);
+ }
+
+ .boxshadow & {
+ > :first-child:before {
+ content:"";
+ position:absolute;
+ z-index:-1;
+ background:#fff;
+ top:0;
+ bottom:0;
+ left:0;
+ right:0;
+ }
+
+ &:after {
+ content:"";
+ position:absolute;
+ z-index:-2;
+ top: 10px;
+ bottom: 10px;
+ left: 0;
+ right: 50%;
+ -moz-border-radius: 10px / 100px;
+ border-radius: 10px / 100px;
+ @include box-shadow(0, 0, 15px, rgba(0,0,0,0.6));
+ }
+ }
+
+ p {
+ margin:0;
+ }
+
+ cite {
+ font-size:.5em;
+ font-style:normal;
+ font-weight:bold;
+ color:#888;
+ }
+
+ &:before {
+ content:"“";
+ position:absolute;
+ top:0;
+ left:0;
+ font-size:5em;
+ line-height:1;
+ color:#ccf0f0;
+ z-index:1;
+ }
+ }
+
+ ::-moz-selection{ background:#08455f; color:#fff; }
+ ::selection { background:#08455f; color:#fff; }
+
+ a {
+ &, &:hover, &:focus, &:active, &:visited {
+ color:#599;
+ text-decoration:none;
+ }
+
+ &:hover, &:focus {
+ text-decoration:underline;
+ }
+ }
+ }
+
+ .deck-prev-link, .deck-next-link {
+ background:#fff;
+ opacity:0.5;
+
+ &, &:hover, &:focus, &:active, &:visited {
+ color:#599;
+ }
+
+ &:hover, &:focus {
+ opacity:1;
+ text-decoration:none;
+ }
+ }
+
+ .deck-status {
+ font-size:0.6666em;
+ }
+
+ &.deck-menu {
+ .slide {
+ background:transparent;
+ @include border-radius(5px);
+
+ .rgba & {
+ background:rgba(0,0,0,.1);
+ }
+
+ &.deck-current, .rgba &.deck-current, .no-touch &:hover {
+ background:#fff;
+ }
+ }
+ }
+
+ .goto-form {
+ background:#fff;
+ border:1px solid #cde;
+ @include border-radius(5px);
+
+ .boxshadow & {
+ -webkit-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
+ -moz-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
+ box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
+ }
+ }
+}
+
+
diff --git a/deck.js/themes/transition/fade.css b/deck.js/themes/transition/fade.css
new file mode 100644
index 0000000..3c3fa2d
--- /dev/null
+++ b/deck.js/themes/transition/fade.css
@@ -0,0 +1,43 @@
+.csstransitions.csstransforms .deck-container .slide {
+ -webkit-transition: opacity 500ms ease-in-out 0ms;
+ -moz-transition: opacity 500ms ease-in-out 0ms;
+ -ms-transition: opacity 500ms ease-in-out 0ms;
+ -o-transition: opacity 500ms ease-in-out 0ms;
+ transition: opacity 500ms ease-in-out 0ms;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide {
+ position: absolute;
+ top: 0;
+ left: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ padding: 0 48px;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide .slide {
+ position: relative;
+ left: 0;
+ top: 0;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide .deck-next, .csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide .deck-after {
+ opacity: 0;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide .deck-current {
+ opacity: 1;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-previous, .csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-before, .csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-next, .csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-after {
+ opacity: 0;
+ pointer-events: none;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-before .slide, .csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-previous .slide {
+ visibility: visible;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-child-current {
+ opacity: 1;
+ visibility: visible;
+ pointer-events: auto;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-child-current .deck-next, .csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-child-current .deck-after {
+ visibility: hidden;
+}
diff --git a/deck.js/themes/transition/fade.scss b/deck.js/themes/transition/fade.scss
new file mode 100644
index 0000000..7612629
--- /dev/null
+++ b/deck.js/themes/transition/fade.scss
@@ -0,0 +1,69 @@
+@mixin translate($x: 0, $y: 0, $z: 0) {
+ -webkit-transform:translate3d($x, $y, $z);
+ -moz-transform:translate($x, $y);
+ -ms-transform:translate($x, $y);
+ -o-transform:translate($x, $y);
+ transform:translate3d($x, $y, $z);
+}
+
+@mixin transition($prop, $duration, $easing: ease-in-out, $delay: 0ms) {
+ -webkit-transition:$prop $duration $easing $delay;
+ -moz-transition:$prop $duration $easing $delay;
+ -ms-transition:$prop $duration $easing $delay;
+ -o-transition:$prop $duration $easing $delay;
+ transition:$prop $duration $easing $delay;
+}
+
+.csstransitions.csstransforms {
+ .deck-container .slide {
+ @include transition(opacity, 500ms);
+ }
+
+ .deck-container:not(.deck-menu) {
+ > .slide {
+ position:absolute;
+ top:0;
+ left:0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width:100%;
+ padding:0 48px;
+
+ .slide {
+ position:relative;
+ left:0;
+ top:0;
+ }
+
+ .deck-next, .deck-after {
+ opacity:0;
+ }
+
+ .deck-current {
+ opacity:1;
+ }
+ }
+
+ > .deck-previous, > .deck-before, > .deck-next, > .deck-after {
+ opacity:0;
+ pointer-events:none;
+ }
+
+ > .deck-before, > .deck-previous {
+ .slide {
+ visibility:visible;
+ }
+ }
+
+ > .deck-child-current {
+ opacity:1;
+ visibility:visible;
+ pointer-events:auto;
+
+ .deck-next, .deck-after {
+ visibility:hidden;
+ }
+ }
+ }
+}
diff --git a/deck.js/themes/transition/horizontal-slide.css b/deck.js/themes/transition/horizontal-slide.css
new file mode 100644
index 0000000..4a4c6ad
--- /dev/null
+++ b/deck.js/themes/transition/horizontal-slide.css
@@ -0,0 +1,76 @@
+.csstransitions.csstransforms {
+ overflow-x: hidden;
+}
+.csstransitions.csstransforms .deck-container > .slide {
+ -webkit-transition: -webkit-transform 500ms ease-in-out;
+ -moz-transition: -moz-transform 500ms ease-in-out;
+ -ms-transition: -ms-transform 500ms ease-in-out;
+ -o-transition: -o-transform 500ms ease-in-out;
+ transition: transform 500ms ease-in-out;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide {
+ position: absolute;
+ top: 0;
+ left: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ padding: 0 48px;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide .slide {
+ position: relative;
+ left: 0;
+ top: 0;
+ -webkit-transition: -webkit-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -moz-transition: -moz-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -ms-transition: -ms-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -o-transition: -o-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ transition: -webkit-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide .deck-next, .csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide .deck-after {
+ visibility: visible;
+ -webkit-transform: translate3d(200%, 0, 0);
+ -moz-transform: translate(200%, 0);
+ -ms-transform: translate(200%, 0);
+ -o-transform: translate(200%, 0);
+ transform: translate3d(200%, 0, 0);
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-previous {
+ -webkit-transform: translate3d(-200%, 0, 0);
+ -moz-transform: translate(-200%, 0);
+ -ms-transform: translate(-200%, 0);
+ -o-transform: translate(-200%, 0);
+ transform: translate3d(-200%, 0, 0);
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-before {
+ -webkit-transform: translate3d(-400%, 0, 0);
+ -moz-transform: translate(-400%, 0);
+ -ms-transform: translate(-400%, 0);
+ -o-transform: translate(-400%, 0);
+ transform: translate3d(-400%, 0, 0);
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-next {
+ -webkit-transform: translate3d(200%, 0, 0);
+ -moz-transform: translate(200%, 0);
+ -ms-transform: translate(200%, 0);
+ -o-transform: translate(200%, 0);
+ transform: translate3d(200%, 0, 0);
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-after {
+ -webkit-transform: translate3d(400%, 0, 0);
+ -moz-transform: translate(400%, 0);
+ -ms-transform: translate(400%, 0);
+ -o-transform: translate(400%, 0);
+ transform: translate3d(400%, 0, 0);
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-before .slide, .csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-previous .slide {
+ visibility: visible;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-child-current {
+ -webkit-transform: none;
+ -moz-transform: none;
+ -ms-transform: none;
+ -o-transform: none;
+ transform: none;
+}
diff --git a/deck.js/themes/transition/horizontal-slide.scss b/deck.js/themes/transition/horizontal-slide.scss
new file mode 100644
index 0000000..c260bbc
--- /dev/null
+++ b/deck.js/themes/transition/horizontal-slide.scss
@@ -0,0 +1,90 @@
+@mixin translate($x: 0, $y: 0, $z: 0) {
+ -webkit-transform:translate3d($x, $y, $z);
+ -moz-transform:translate($x, $y);
+ -ms-transform:translate($x, $y);
+ -o-transform:translate($x, $y);
+ transform:translate3d($x, $y, $z);
+}
+
+@mixin transition($prop, $duration, $easing: ease-in-out, $delay: 0ms) {
+ -webkit-transition:$prop $duration $easing $delay;
+ -moz-transition:$prop $duration $easing $delay;
+ -ms-transition:$prop $duration $easing $delay;
+ -o-transition:$prop $duration $easing $delay;
+ transition:$prop $duration $easing $delay;
+}
+
+@mixin transform($val) {
+ -webkit-transform:$val;
+ -moz-transform:$val;
+ -ms-transform:$val;
+ -o-transform:$val;
+ transform:$val;
+}
+
+.csstransitions.csstransforms {
+ overflow-x:hidden;
+
+ .deck-container > .slide {
+ -webkit-transition:-webkit-transform 500ms ease-in-out;
+ -moz-transition:-moz-transform 500ms ease-in-out;
+ -ms-transition:-ms-transform 500ms ease-in-out;
+ -o-transition:-o-transform 500ms ease-in-out;
+ transition:transform 500ms ease-in-out;
+ }
+
+ .deck-container:not(.deck-menu) {
+ > .slide {
+ position:absolute;
+ top:0;
+ left:0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width:100%;
+ padding:0 48px;
+
+ .slide {
+ position:relative;
+ left:0;
+ top:0;
+ -webkit-transition:-webkit-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -moz-transition:-moz-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -ms-transition:-ms-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -o-transition:-o-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ transition:-webkit-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ }
+
+ .deck-next, .deck-after {
+ visibility:visible;
+ @include translate(200%);
+ }
+ }
+
+ > .deck-previous {
+ @include translate(-200%);
+ }
+
+ > .deck-before {
+ @include translate(-400%);
+ }
+
+ > .deck-next {
+ @include translate(200%);
+ }
+
+ > .deck-after {
+ @include translate(400%);
+ }
+
+ > .deck-before, > .deck-previous {
+ .slide {
+ visibility:visible;
+ }
+ }
+
+ > .deck-child-current {
+ @include transform(none);
+ }
+ }
+} \ No newline at end of file
diff --git a/deck.js/themes/transition/vertical-slide.css b/deck.js/themes/transition/vertical-slide.css
new file mode 100644
index 0000000..7f87092
--- /dev/null
+++ b/deck.js/themes/transition/vertical-slide.css
@@ -0,0 +1,94 @@
+.csstransitions.csstransforms .deck-container {
+ overflow-y: hidden;
+}
+.csstransitions.csstransforms .deck-container > .slide {
+ -webkit-transition: -webkit-transform 500ms ease-in-out;
+ -moz-transition: -moz-transform 500ms ease-in-out;
+ -ms-transition: -ms-transform 500ms ease-in-out;
+ -o-transition: -o-transform 500ms ease-in-out;
+ transition: transform 500ms ease-in-out;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide {
+ position: absolute;
+ top: 0;
+ left: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ padding: 0 48px;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide .slide {
+ position: relative;
+ left: 0;
+ top: 0;
+ -webkit-transition: -webkit-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -moz-transition: -moz-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -ms-transition: -ms-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -o-transition: -o-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ transition: -webkit-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide .deck-next, .csstransitions.csstransforms .deck-container:not(.deck-menu) > .slide .deck-after {
+ visibility: visible;
+ -webkit-transform: translate3d(0, 1600px, 0);
+ -moz-transform: translate(0, 1600px);
+ -ms-transform: translate(0, 1600px);
+ -o-transform: translate(0, 1600px);
+ transform: translate3d(0, 1600px, 0);
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-previous {
+ -webkit-transform: translate3d(0, -200%, 0);
+ -moz-transform: translate(0, -200%);
+ -ms-transform: translate(0, -200%);
+ -o-transform: translate(0, -200%);
+ transform: translate3d(0, -200%, 0);
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-before {
+ -webkit-transform: translate3d(0, -400%, 0);
+ -moz-transform: translate(0, -400%);
+ -ms-transform: translate(0, -400%);
+ -o-transform: translate(0, -400%);
+ transform: translate3d(0, -400%, 0);
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-next {
+ -webkit-transform: translate3d(0, 200%, 0);
+ -moz-transform: translate(0, 200%);
+ -ms-transform: translate(0, 200%);
+ -o-transform: translate(0, 200%);
+ transform: translate3d(0, 200%, 0);
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-after {
+ -webkit-transform: translate3d(0, 400%, 0);
+ -moz-transform: translate(0, 400%);
+ -ms-transform: translate(0, 400%);
+ -o-transform: translate(0, 400%);
+ transform: translate3d(0, 400%, 0);
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-before .slide, .csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-previous .slide {
+ visibility: visible;
+}
+.csstransitions.csstransforms .deck-container:not(.deck-menu) > .deck-child-current {
+ -webkit-transform: none;
+ -moz-transform: none;
+ -ms-transform: none;
+ -o-transform: none;
+ transform: none;
+}
+.csstransitions.csstransforms .deck-prev-link {
+ left: auto;
+ right: 8px;
+ top: 59px;
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ -o-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+.csstransitions.csstransforms .deck-next-link {
+ top: 99px;
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ -o-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
diff --git a/deck.js/themes/transition/vertical-slide.scss b/deck.js/themes/transition/vertical-slide.scss
new file mode 100644
index 0000000..c6892c3
--- /dev/null
+++ b/deck.js/themes/transition/vertical-slide.scss
@@ -0,0 +1,112 @@
+@mixin translate($x: 0, $y: 0, $z: 0) {
+ -webkit-transform:translate3d($x, $y, $z);
+ -moz-transform:translate($x, $y);
+ -ms-transform:translate($x, $y);
+ -o-transform:translate($x, $y);
+ transform:translate3d($x, $y, $z);
+}
+
+@mixin rotate($deg) {
+ -webkit-transform:rotate($deg);
+ -moz-transform:rotate($deg);
+ -ms-transform:rotate($deg);
+ -o-transform:rotate($deg);
+ transform:rotate($deg);
+}
+
+@mixin transition($prop, $duration, $easing: ease-in-out, $delay: 0ms) {
+ -webkit-transition:$prop $duration $easing $delay;
+ -moz-transition:$prop $duration $easing $delay;
+ -ms-transition:$prop $duration $easing $delay;
+ -o-transition:$prop $duration $easing $delay;
+ transition:$prop $duration $easing $delay;
+}
+
+@mixin transform($val) {
+ -webkit-transform:$val;
+ -moz-transform:$val;
+ -ms-transform:$val;
+ -o-transform:$val;
+ transform:$val;
+}
+
+.csstransitions.csstransforms {
+ .deck-container {
+ overflow-y:hidden;
+
+ > .slide {
+ -webkit-transition:-webkit-transform 500ms ease-in-out;
+ -moz-transition:-moz-transform 500ms ease-in-out;
+ -ms-transition:-ms-transform 500ms ease-in-out;
+ -o-transition:-o-transform 500ms ease-in-out;
+ transition:transform 500ms ease-in-out;
+ }
+ }
+
+ .deck-container:not(.deck-menu) {
+ > .slide {
+ position:absolute;
+ top:0;
+ left:0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width:100%;
+ padding:0 48px;
+
+ .slide {
+ position:relative;
+ left:0;
+ top:0;
+ -webkit-transition:-webkit-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -moz-transition:-moz-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -ms-transition:-ms-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ -o-transition:-o-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ transition:-webkit-transform 500ms ease-in-out, opacity 500ms ease-in-out;
+ }
+
+ .deck-next, .deck-after {
+ visibility:visible;
+ @include translate(0, 1600px);
+ }
+ }
+
+ > .deck-previous {
+ @include translate(0, -200%);
+ }
+
+ > .deck-before {
+ @include translate(0, -400%);
+ }
+
+ > .deck-next {
+ @include translate(0, 200%);
+ }
+
+ > .deck-after {
+ @include translate(0, 400%);
+ }
+
+ > .deck-before, > .deck-previous {
+ .slide {
+ visibility:visible;
+ }
+ }
+
+ > .deck-child-current {
+ @include transform(none);
+ }
+ }
+
+ .deck-prev-link {
+ left:auto;
+ right:8px;
+ top:59px;
+ @include rotate(90deg);
+ }
+
+ .deck-next-link {
+ top:99px;
+ @include rotate(90deg);
+ }
+} \ No newline at end of file
diff --git a/logo.png b/logo.png
new file mode 100644
index 0000000..adeb217
--- /dev/null
+++ b/logo.png
Binary files differ
diff --git a/presentation.html b/presentation.html
new file mode 100644
index 0000000..a670be2
--- /dev/null
+++ b/presentation.html
@@ -0,0 +1,356 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
+
+ <!-- PROVIDE METADATA -->
+ <!-- ================ -->
+ <title>Cyrptocon Infoscreen Slides</title>
+ <meta name="author" content="Christian Franke">
+
+ <!-- Required stylesheet -->
+ <link rel="stylesheet" href="deck.js/core/deck.core.css">
+
+ <!-- Style theme. More available in deck.js/themes/style/ or create your own. -->
+ <link rel="stylesheet" href="deck.js/themes/style/web-2.0.css">
+
+ <!-- Transition, for your audience, use it only for short presentations, see deck.js/themes/transition -->
+ <!--link rel="stylesheet" href="deck.js/themes/transition/****.css"-->
+
+ <!-- Required Modernizr file -->
+ <script src="deck.js/modernizr.custom.js"></script>
+ <!-- Required JS files. -->
+ <script src="deck.js/jquery-1.7.2.min.js"></script>
+ <script src="deck.js/core/deck.core.js"></script>
+
+ <!-- PROVIDE EXTENSIONS: JS and CSS files -->
+ <!-- ============================ -->
+ <!-- proper slide scaling (type 's' to disable) -->
+ <script src="deck.js/extensions/fit/deck.fit.js"></script>
+ <link rel="stylesheet" href="deck.js/extensions/fit/deck.fit-fs.css"> <!-- fit to window -->
+ <!-- animations, svg etc (better to include it after the 'status' extension... so see below) -->
+ <!-- math equations -->
+ <script src="deck.js/libs/display-latex2.user.js"></script>
+ <script src="deck.js/extensions/simplemath/deck.simplemath.js"></script>
+ <!-- smart syntax -->
+ <script src="deck.js/extensions/smartsyntax/deck.smartsyntax.js"></script>
+ <!-- clone by typing 'c' (popups a slave presentation) (uses "clone snippet" at the end of the page) -->
+ <script src="deck.js/extensions/clone/deck.clone.js"></script>
+ <!-- goto by typing 'g' (uses "goto snippet" at the end of the page) -->
+ <link rel="stylesheet" href="deck.js/extensions/goto/deck.goto.css">
+ <script src="deck.js/extensions/goto/deck.goto.js"></script>
+ <!-- slide number indicator (uses "status snippet" at the end of the page) -->
+ <link rel="stylesheet" href="deck.js/extensions/status/deck.status.css">
+ <script src="deck.js/extensions/status/deck.status.js"></script>
+ <!-- navigation buttons (uses "navigation snippet" at the end of the page) -->
+ <link rel="stylesheet" href="deck.js/extensions/navigation/deck.navigation.css">
+ <script src="deck.js/extensions/navigation/deck.navigation.js"></script>
+ <!-- slide selector by typing 'm' -->
+ <script src="deck.js/extensions/menu/deck.menu.js"></script>
+ <link rel="stylesheet" href="deck.js/extensions/menu/deck.menu.css">
+ <!-- permalink (uses "hash snippet" at the end of the page) -->
+ <link rel="stylesheet" href="deck.js/extensions/hash/deck.hash.css">
+ <script src="deck.js/extensions/hash/deck.hash.js"></script>
+ <!-- animations, svg etc (better to include it after the 'status' extension (to avoid huge fake slide numbers) -->
+ <script src="deck.js/extensions/step/deck.step.js"></script>
+ <script src="deck.js/extensions/events/deck.events.js"></script>
+ <script src="deck.js/extensions/anim/deck.anim.js"></script>
+ <script src="deck.js/libs/jquerysvg/jquery.svg.min.js"></script>
+ <script src="deck.js/libs/jquerysvg/jquery.svganim.min.js"></script>
+ <script src="deck.js/extensions/svg/deck.svg.js"></script>
+
+
+ <!-- Deck.js options (advanced) -->
+ <script>$(function() {$.deck('.slide', {
+ // fitMarginX:100, fitMarginY:100, // uncomment to tune margin
+ // fitMode: "stretched", // uncomment to strech
+ dummy:""
+ });});
+ </script>
+
+ <!-- override some style here if needed (or in an external file) -->
+ <style type="text/css">
+ .slide b {color: #f0f;}
+ /* example */ body.has-clones .deck-container {background: lightslategrey;}
+ /* example */ .deck-container .title-slide {border: 1px solid red; font-size: 70%}
+ .deck-status .deck-status-field { float: right; }
+ .cc13, .cc13 td, .cc13 th {
+ border: 3px
+ solid #404040;
+ padding: 4px;
+ vertical-align: middle;
+ padding-top: 8px; /* I have no clue why this is needed :( */
+ }
+ .cc13 .description {
+ font-size: 0.8em;
+ }
+ p.location {
+ float: right;
+ font-size: 1.5em;
+ position: relative;
+ top: 1.15em;
+ }
+/* p.location:before {
+ content: "Ort: ";
+ } */
+ </style>
+ </head>
+
+
+<body>
+This text should not be displayed if everything goes well: use left/right arrow keys to browse the presentation.<br/>
+
+<div class="deck-container">
+
+ <!-- this presentation uses smart syntax -->
+ <section class="slide" id="logo">
+ <img width="100%" src="logo.png" alt="Cryptocon 13"/>
+ </section>
+ <section class="slide" id="friday">
+ <p class="location">Lounge</p>
+ <h2>Vortr&auml;ge Freitag</h2>
+<table class="cc13">
+<tr>
+ <th>18oo</th>
+ <td>Podiumsdikussion</td>
+ <td>
+ Lasst euch überraschen!
+ </td>
+</tr>
+<tr>
+ <th>20oo</th>
+ <td>Sicher Surfen</td>
+ <td>
+ Wie surfe ich sicher? Was ist SSL, VPN, TOR, ... und brauch ich das?<br>
+ Diese und weitere Fragen werden in diesem Vortrag beantwortet.
+ </td>
+</tr>
+<tr>
+ <th>21oo</th>
+ <td>ENIGMA</td>
+ <td>
+ Wohl eine der bekanntesten Cryptomaschinen der Geschichte.
+ </td>
+</tr>
+<tr>
+ <th>22oo</th>
+ <td>Social Engineering</td>
+ <td>
+ Die Kunst andere zu beeinflussen.
+ </td>
+</tr>
+</table>
+ </section>
+ <section class="slide" id="saturday-lounge">
+ <p class="location">Lounge</p>
+ <h2>Vortr&auml;ge Samstag (1/2)</h2>
+<table class="cc13">
+<tr>
+ <th>12oo</th>
+ <td>Sichere Passwörter</td>
+ <td>
+ Wie finde ich ein sicheres Passwort, welches ich mir merken kann?<br>
+ Diese Frage und ein sicherer Umgang mit Passwörter aller Art sind Thema dieses Vortrages.
+ </td>
+</tr>
+<tr>
+ <th>13oo</th>
+ <td>Sozial Verantwortung</td>
+ <td>
+ Unter anderem mit: Soziale Netzwerke und Co. sicher benutzen.
+ </td>
+</tr>
+<tr>
+ <th>14oo</th>
+ <td>Emailverschlüsselung mit PGP</td>
+ <td>
+ Ein einführender Vortrag rund um die Emailverschlüsselung.
+ </td>
+</tr>
+<tr>
+ <th>15oo</th>
+ <td>Jabber mit OTR</td>
+ <td>
+ Verschlüsselt und sicher chatten.
+ </td>
+</tr>
+</table>
+</section>
+<section class="slide" id="saturday-lounge2">
+<p class="location">Lounge</p>
+<h2>Vortr&auml;ge Samstag (2/2)</h2>
+<table class="cc13">
+<tr>
+ <th>17oo</th>
+ <td>Rechtliches rund um Crypto</td>
+ <td>
+ Ein Vortrag der Roten Hilfe zu Fragen rund um TOR-Exit-Nodes und Passwort-Beugehaft.
+ </td>
+</tr>
+<tr>
+ <th>18oo</th>
+ <td>Festplattenverschlüsselung</td>
+ <td>
+ Wie, warum, womit? Truecrypt, LUKS, und so weiter.
+ </td>
+</tr>
+<tr>
+ <th>19oo</th>
+ <td>DMA-Attacken</td>
+ <td>
+ Praktische Vorführung und Erläuterungen rund um DMA-Attacken.<br>
+ Dieser Vortrag richtet sich an fortgeschrittenes Publikum.
+ </td>
+</tr>
+<tr>
+ <th>20oo</th>
+ <td>Essen</td>
+ <td>
+ vegane Vokü der Phantomspeisung
+ </td>
+</tr>
+</table>
+</section>
+<section class="slide" id="saturday-workshops">
+ <p class="location">Hacklab</p>
+ <h2>Workshops Samstag</h2>
+ <table class="cc13">
+ <tr>
+ <th>t.b.a.</th>
+ <td>Workshop: Festplattenverschlüsselung</td>
+ <td class="description">
+ Ein praktischer Workshop.<br>
+ Für die Teilnahme an diesem Workshop ist es notwendig, das ein Computer mitgebracht wird, sowie ein externes
+ Speichermedium (z.B. Externe Festplatte) welche zur Datensicherung benutzt werden kann.<br>
+ Es empfiehlt sich bereits <b>vor</b> der Teilnahme alle wichtigen Daten zu Hause zu sichern!
+ </td>
+ </tr>
+ <tr>
+ <th>t.b.a.</th>
+ <td>TOR-Workshop</td>
+ <td class="description">
+ Wie surfe ich anonym mit The Onion Router (TOR).
+ Für die Teilnahme an diesem Workshop ist es notwendig, das ein Computer mitgebracht wird.
+ </td>
+ </tr>
+ <tr>
+ <th>t.b.a</th>
+ <td>Workshop: E-Mail Verschlüsselung</td>
+ <td class="description">
+ Für die Teilnahme an diesem Workshop ist es notwendig, das ein Computer mitgebracht wird.
+ </td>
+ </tr>
+ </table>
+</section>
+<section class="slide" id="sunday-lounge">
+<p class="location">Lounge</p>
+<h2>Vortr&auml;ge Sonntag</h2>
+<table class="cc13">
+<tr>
+ <th>14oo</th>
+ <td>Das Darknet</td>
+ <td class="description">
+ Bitcoins, Darkmarkets, Silkroad und andere verborgene Plätze im World Wide Web.
+ </td>
+</tr>
+<tr>
+ <th>15oo</th>
+ <td>Metadaten und Wasserzeichen</td>
+ <td class="description">
+ Ein Vortrag rund um Metadaten und Digitale Wasserzeichen.
+ </td>
+</tr>
+<tr>
+ <th>16oo</th>
+ <td>"HowTo build and cryptanalyse a simple block cipher"</td>
+ <td class="description">
+ Dieser Vortrag richtet sich an fortgeschrittenes Publikum.
+ </td>
+</tr>
+<tr>
+ <th>17oo</th>
+ <td>Visuelle Verschlüsselung</td>
+ <td class="description">
+ Eine etwas andere Art, Informationen zu kodieren.
+ Dieser Vortrag richtet sich an fortgeschrittenes Publikum.
+ </td>
+</tr>
+<tr>
+ <th>18oo</th>
+ <td>El Gamal Spielereien</td>
+ <td class="description">
+ Dieser Vortrag richtet sich an fortgeschrittenes Publikum.
+ </td>
+</tr>
+</table>
+</section>
+<section class="slide" id="sunday-workshops">
+ <p class="location">Hacklab</p>
+ <h2>Workshops Sonntag</h2>
+ <table class="cc13">
+ <tr>
+ <th>t.b.a.</th>
+ <td>Workshop: Festplattenverschlüsselung</td>
+ <td class="description">
+ Ein praktischer Workshop.<br>
+ Für die Teilnahme an diesem Workshop ist es notwendig, das ein Computer mitgebracht wird, sowie ein externes
+ Speichermedium (z.B. Externe Festplatte) welche zur Datensicherung benutzt werden kann.<br>
+ Es empfiehlt sich bereits <b>vor</b> der Teilnahme alle wichtigen Daten zu Hause zu sichern!
+ </td>
+ </tr>
+ <tr>
+ <th>t.b.a.</th>
+ <td>TOR-Workshop</td>
+ <td class="description">
+ Wie surfe ich anonym mit The Onion Router (TOR).
+ Für die Teilnahme an diesem Workshop ist es notwendig, das ein Computer mitgebracht wird.
+ </td>
+ </tr>
+ <tr>
+ <th>t.b.a</th>
+ <td>Workshop: E-Mail Verschlüsselung</td>
+ <td class="description">
+ Für die Teilnahme an diesem Workshop ist es notwendig, das ein Computer mitgebracht wird.
+ </td>
+ </tr>
+ </table>
+</section>
+<section class="slide" id="epilog">
+ <img width="40%" src="qrcode.png" alt="http://sublab.org/cryptocon13" style="margin-top: 10%;"/>
+ <p style="text-align: center">http://sublab.org/cryptocon13</p>
+</section>
+<!-- end of the presentation -->
+
+<!-- deck.hash snippet -->
+<a href="." title="Permalink to this slide" class="deck-permalink">#</a>
+<!-- deck.status snippet -->
+<p class="deck-status">
+Infodesk an der Bar − Programm unter http://sublab.org/cryptocon13
+<span class="deck-status-field">
+ <span class="deck-status-current"></span>/<span class="deck-status-total"></span>
+</span>
+</p>
+<!-- deck.goto snippet -->
+<form action="." method="get" class="goto-form">
+ <label for="goto-slide">Go to slide:</label>
+ <input type="text" name="slidenum" id="goto-slide" list="goto-datalist">
+ <datalist id="goto-datalist"></datalist>
+ <input type="submit" value="Go">
+</form>
+<!-- deck.navigation snippet -->
+<a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
+<a href="#" class="deck-next-link" title="Next">&#8594;</a>
+<!-- deck.clone snippet: simple red box with top-left corner as cursor position -->
+<div class="clonepointer" style="position:absolute; width:20px; height:20px; background:red; z-index:10"></div>
+<!-- deck.clone snippet: simple green box with center as cursor position -->
+<div class="clonepointer" style="position:absolute; z-index:11"><div style="margin: -13px 0 0 -13px; width:18px; height:18px; border:4px solid green;"></div></div>
+
+
+
+
+</div> <!-- end of deck container -->
+
+</body>
+</html>
diff --git a/qrcode.png b/qrcode.png
new file mode 100644
index 0000000..1c96687
--- /dev/null
+++ b/qrcode.png
Binary files differ