From ced6231bb694e82249dc84cb9637dc88edea9f5e Mon Sep 17 00:00:00 2001 From: Michael Bleigh Date: Sun, 24 Mar 2013 22:47:01 -0700 Subject: [PATCH] Adds Ratchet mobile prototyping framework. --- ajax/libs/ratchet/1.0.1/ratchet.css | 1286 +++++++++++++++++ ajax/libs/ratchet/1.0.1/ratchet.js | 765 ++++++++++ ajax/libs/ratchet/1.0.1/ratchet.min.css | 1 + ajax/libs/ratchet/1.0.1/ratchet.min.js | 1 + .../touch-icons/apple-touch-icon-114x114.png | Bin 0 -> 15538 bytes .../touch-icons/apple-touch-icon-57x57.png | Bin 0 -> 5276 bytes .../touch-icons/apple-touch-icon-72x72.png | Bin 0 -> 7362 bytes ajax/libs/ratchet/package.json | 28 + 8 files changed, 2081 insertions(+) create mode 100644 ajax/libs/ratchet/1.0.1/ratchet.css create mode 100644 ajax/libs/ratchet/1.0.1/ratchet.js create mode 100644 ajax/libs/ratchet/1.0.1/ratchet.min.css create mode 100644 ajax/libs/ratchet/1.0.1/ratchet.min.js create mode 100644 ajax/libs/ratchet/1.0.1/touch-icons/apple-touch-icon-114x114.png create mode 100644 ajax/libs/ratchet/1.0.1/touch-icons/apple-touch-icon-57x57.png create mode 100644 ajax/libs/ratchet/1.0.1/touch-icons/apple-touch-icon-72x72.png create mode 100644 ajax/libs/ratchet/package.json diff --git a/ajax/libs/ratchet/1.0.1/ratchet.css b/ajax/libs/ratchet/1.0.1/ratchet.css new file mode 100644 index 000000000..a9f439834 --- /dev/null +++ b/ajax/libs/ratchet/1.0.1/ratchet.css @@ -0,0 +1,1286 @@ +/** + * ================================== + * Ratchet v1.0.0 + * Licensed under The MIT License + * http://opensource.org/licenses/MIT + * ================================== + */ + +/* Hard reset +-------------------------------------------------- */ + +html, +body, +div, +span, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +section, +summary, +time, +audio, +video { + padding: 0; + margin: 0; + border: 0; +} + +/* Prevents iOS text size adjust after orientation change, without disabling (Thanks to @necolas) */ +html { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +/* Base styles +-------------------------------------------------- */ + +body { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + font: 14px/1.25 "Helvetica Neue", sans-serif; + color: #222; + background-color: #fff; +} + +/* Universal link styling */ +a { + color: #0882f0; + text-decoration: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); /* Removes the dark touch outlines on links */ +} + +/* Wrapper to be used around all content not in .bar-title and .bar-tab */ +.content { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: auto; + background-color: #fff; + -webkit-transition-property: top, bottom; + transition-property: top, bottom; + -webkit-transition-duration: .2s, .2s; + transition-duration: .2s, .2s; + -webkit-transition-timing-function: linear, linear; + transition-timing-function: linear, linear; + -webkit-overflow-scrolling: touch; +} + +/* Hack to force all relatively and absolutely positioned elements still render while scrolling + Note: This is a bug for "-webkit-overflow-scrolling: touch" */ +.content > * { + -webkit-transform: translateZ(0px); + transform: translateZ(0px); +} + +/* Utility wrapper to pad in components like forms, block buttons and segmented-controllers so they're not full-bleed */ +.content-padded { + padding: 10px; +} + +/* Pad top/bottom of content so it doesn't hide behind .bar-title and .bar-tab. + Note: For these to work, content must come after both bars in the markup */ +.bar-title ~ .content { + top: 44px; +} +.bar-tab ~ .content { + bottom: 51px; +} +.bar-header-secondary ~ .content { + top: 88px; +}/* General bar styles +-------------------------------------------------- */ + +[class*="bar-"] { + position: fixed; + right: 0; + left: 0; + z-index: 10; + height: 44px; + padding: 5px; + box-sizing: border-box; +} + +/* Modifier class to dock any bar below .bar-title */ +.bar-header-secondary { + top: 45px; +} + +/* Modifier class to dock any bar to bottom of viewport */ +.bar-footer { + bottom: 0; +} + +/* Generic bar for wrapping buttons, segmented controllers, etc. */ +.bar-standard { + background-color: #f2f2f2; + background-image: -webkit-linear-gradient(top, #f2f2f2 0, #e5e5e5 100%); + background-image: linear-gradient(to bottom, #f2f2f2 0, #e5e5e5 100%); + border-bottom: 1px solid #aaa; + box-shadow: inset 0 1px 1px -1px #fff; +} + +/* Flip border position to top for footer bars */ +.bar-footer.bar-standard, +.bar-footer-secondary.bar-standard { + border-top: 1px solid #aaa; + border-bottom-width: 0; +} + +/* Title bar +-------------------------------------------------- */ + +/* Bar docked to top of viewport for showing page title and actions */ +.bar-title { + top: 0; + display: -webkit-box; + display: box; + background-color: #1eb0e9; + background-image: -webkit-linear-gradient(top, #1eb0e9 0, #109adc 100%); + background-image: linear-gradient(to bottom, #1eb0e9 0, #109adc 100%); + border-bottom: 1px solid #0e5895; + box-shadow: inset 0 1px 1px -1px rgba(255, 255, 255, .8); + -webkit-box-orient: horizontal; + box-orient: horizontal; +} + +/* Centered text in the .bar-title */ +.bar-title .title { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + font-size: 20px; + font-weight: bold; + line-height: 44px; + color: #fff; + text-align: center; + text-shadow: 0 -1px rgba(0, 0, 0, .5); + white-space: nowrap; +} + +.bar-title > a:not([class*="button"]) { + display: block; + width: 100%; + height: 100%; +} + +/* Retain specified title color */ +.bar-title .title a { + color: inherit; +} + +/* Tab bar +-------------------------------------------------- */ + +/* Bar docked to bottom used for primary app navigation */ +.bar-tab { + bottom: 0; + height: 50px; + padding: 0; + background-color: #393939; + background-image: -webkit-linear-gradient(top, #393939 0, #2b2b2b 100%); + background-image: linear-gradient(to bottom, #393939 0, #2b2b2b 100%); + border-top: 1px solid #000; + border-bottom-width: 0; + box-shadow: inset 0 1px 1px -1px rgba(255, 255, 255, .6); +} + +/* Wrapper for individual tab */ +.tab-inner { + display: -webkit-box; + display: box; + height: 100%; + list-style: none; + -webkit-box-orient: horizontal; + box-orient: horizontal; +} + +/* Navigational tab */ +.tab-item { + height: 100%; + padding-top: 9px; + text-align: center; + box-sizing: border-box; + -webkit-box-flex: 1; + box-flex: 1; +} + +/* Active state for tab */ +.tab-item.active { + box-shadow: inset 0 0 20px rgba(0, 0, 0, .5); +} + +/* Icon for tab */ +.tab-icon { + display: block; + height: 18px; + margin: 0 auto; +} + +/* Label for tab */ +.tab-label { + margin-top: 1px; + font-size: 10px; + font-weight: bold; + color: #fff; + text-shadow: 0 1px rgba(0, 0, 0, .3); +} + +/* Buttons in title bars +-------------------------------------------------- */ + +/* Generic style for all buttons in .bar-title */ +.bar-title [class*="button"] { + position: relative; + z-index: 10; /* Places buttons over full width title */ + font-size: 12px; + line-height: 23px; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, .3); + background-color: #1eb0e9; + background-image: -webkit-linear-gradient(top, #1eb0e9 0, #0984c6 100%); + background-image: linear-gradient(to bottom, #1eb0e9 0, #0984c6 100%); + border: 1px solid #0e5895; + box-shadow: 0 1px rgba(255, 255, 255, .25); + -webkit-box-flex: 0; + box-flex: 0; +} + + +/* Hacky way to right align buttons outside of flex-box system + Note: is only absolutely positioned button, would be better if flex-box had an "align right" option */ +.bar-title .title + [class*="button"]:last-child, +.bar-title .button + [class*="button"]:last-child, +.bar-title [class*="button"].pull-right { + position: absolute; + top: 5px; + right: 5px; +} + +/* Override standard button active states */ +.bar-title .button:active { + color: #fff; + background-color: #0876b1; +} + +/* Directional buttons in title bars (thanks to @GregorAdams for solution - http://cssnerd.com/2011/11/30/the-best-pure-css3-ios-style-arrow-back-button/) +-------------------------------------------------- */ + +/* Add relative positioning so :before content is positioned properly */ +.bar-title .button-prev, +.bar-title .button-next { + position: relative; +} + +/* Prev/next button base styles */ +.bar-title .button-prev { + margin-left: 7px; /* Push over to make room for :before content */ + border-left: 0; + border-bottom-left-radius: 10px 15px; + border-top-left-radius: 10px 15px; +} +.bar-title .button-next { + margin-right: 7px; /* Push over to make room for :before content */ + border-right: 0; + border-top-right-radius: 10px 15px; + border-bottom-right-radius: 10px 15px; +} + +/* Pointed part of directional button */ +.bar-title .button-prev:before, +.bar-title .button-next:before { + position: absolute; + top: 2px; + width: 27px; + height: 27px; + border-radius: 30px 100px 2px 40px / 2px 40px 30px 100px; + content: ''; + box-shadow: inset 1px 0 #0e5895, inset 0 1px #0e5895; + -webkit-mask-image: -webkit-gradient(linear, left top, right bottom, from(#000), color-stop(.33, #000), color-stop(.5, transparent), to(transparent)); + mask-image: gradient(linear, left top, right bottom, from(#000), color-stop(.33, #000), color-stop(.5, transparent), to(transparent)); +} +.bar-title .button-prev:before { + left: -5px; + background-image: -webkit-gradient(linear, left bottom, right top, from(#0984c6), to(#1eb0e9)); + background-image: gradient(linear, left bottom, right top, from(#0984c6), to(#1eb0e9)); + border-left: 1.5px solid rgba(255, 255, 255, .25); + -webkit-transform: rotate(-45deg) skew(-10deg, -10deg); + transform: rotate(-45deg) skew(-10deg, -10deg); +} +.bar-title .button-next:before { + right: -5px; + background-image: -webkit-gradient(linear, left bottom, right top, from(#1eb0e9), to(#0984c6)); + background-image: gradient(linear, left bottom, right top, from(#1eb0e9), to(#0984c6)); + border-top: 1.5px solid rgba(255, 255, 255, .25); + -webkit-transform: rotate(135deg) skew(-10deg, -10deg); + transform: rotate(135deg) skew(-10deg, -10deg); +} + +/* Active states for the directional buttons */ +.bar-title .button-prev:active, +.bar-title .button-next:active, +.bar-title .button-prev:active:before, +.bar-title .button-next:active:before { + color: #fff; + background-color: #0876b1; + background-image: none; +} +.bar-title .button-prev:active:before, +.bar-title .button-next:active:before { + content: ''; +} +.bar-title .button-prev:active:before { + box-shadow: inset 0 3px 3px rgba(0, 0, 0, .2); +} +.bar-title .button-next:active:before { + box-shadow: inset 0 -3px 3px rgba(0, 0, 0, .2); +} + +/* Block buttons in any bar +-------------------------------------------------- */ + +/* Add proper padding and replace buttons normal dropshadow with a shine from bar */ +[class*="bar"] .button-block { + padding: 7px 0; + margin-bottom: 0; + box-shadow: inset 0 1px 1px rgba(255, 255, 255, .4), 0 1px rgba(255, 255, 255, .8); +} + +/* Override standard padding changes for .button-blocks */ +[class*="bar"] .button-block:active { + padding: 7px 0; +} + +/* Segmented controller in any bar +-------------------------------------------------- */ + +/* Remove standard segmented bottom margin */ +[class*="bar-"] .segmented-controller { + margin-bottom: 0; +} + +/* Add margins between segmented controllers and buttons */ +[class*="bar-"] .segmented-controller + [class*="button"], +[class*="bar-"] [class*="button"] + .segmented-controller { + margin-left: 5px; +} + +/* Segmented controller in a title bar +-------------------------------------------------- */ + +.bar-title .segmented-controller { + line-height: 18px; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background-color: #1eb0e9; + background-image: -webkit-linear-gradient(top, #1eb0e9 0, #0984c6 100%); + background-image: linear-gradient(to bottom, #1eb0e9 0, #0984c6 100%); + border: 1px solid #0e5895; + border-radius: 3px; + box-shadow: 0 1px rgba(255, 255, 255, .25); + -webkit-box-flex: 1; + box-flex: 1; +} + +/* Set color for tab border and highlight */ +.bar-title .segmented-controller li { + border-left: 1px solid #0e5895; + box-shadow: inset 1px 0 rgba(255, 255, 255, .25); +} + +/* Remove inset shadow from first tab or one to the right of the active tab */ +.bar-title .segmented-controller .active + li, +.bar-title .segmented-controller li:first-child { + box-shadow: none; +} + +/* Remove left-hand border from first tab */ +.bar-title .segmented-controller li:first-child { + border-left-width: 0; +} + +/* Depressed state (active) */ +.bar-title .segmented-controller li.active { + background-color: #0082c4; + box-shadow: inset 0 1px 6px rgba(0, 0, 0, .3); +} + +/* Set color of links to white */ +.bar-title .segmented-controller li > a { + color: #fff; +} + + +/* Search forms in standard bar +-------------------------------------------------- */ + +/* Position/size search bar within the bar */ +.bar-standard input[type=search] { + height: 32px; + margin: 0; +}/* Lists +-------------------------------------------------- */ + +/* Remove usual bullet styles from list */ +.list { + margin-bottom: 10px; + list-style: none; + background-color: #fff; +} + +/* Pad each list item and add dividers */ +.list li { + position: relative; + padding: 20px 60px 20px 10px; /* Given extra right padding to accomodate counts, chevrons or buttons */ + border-bottom: 1px solid rgba(0, 0, 0, .1); +} + +/* Give top border to first list items */ +.list li:first-child { + border-top: 1px solid rgba(0, 0, 0, .1); +} + +/* If a list of links, make sure the child takes up full list item tap area (want to avoid selecting child buttons though) */ +.list li > a:not([class*="button"]) { + position: relative; + display: block; + padding: inherit; + margin: -20px -60px -20px -10px; + color: inherit; +} + +/* Inset list +-------------------------------------------------- */ + +.list.inset { + width: auto; + margin-right: 10px; + margin-left: 10px; + border: 1px solid rgba(0, 0, 0, .1); + border-radius: 6px; + box-sizing: border-box; +} + +/* Remove border from first/last standard list items to avoid double border at top/bottom of lists */ +.list.inset li:first-child { + border-top-width: 0; +} +.list.inset li:last-child { + border-bottom-width: 0; +} + + +/* List dividers +-------------------------------------------------- */ + +.list .list-divider { + position: relative; + top: -1px; + padding-top: 6px; + padding-bottom: 6px; + font-size: 12px; + font-weight: bold; + line-height: 18px; + text-shadow: 0 1px 0 rgba(255, 255, 255, .5); + background-color: #f8f8f8; + background-image: -webkit-linear-gradient(top, #f8f8f8 0, #eee 100%); + background-image: linear-gradient(to bottom, #f8f8f8 0, #eee 100%); + border-top: 1px solid rgba(0, 0, 0, .1); + border-bottom: 1px solid rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 1px rgba(255, 255, 255, .4); +} + +/* Rounding first divider on inset lists and remove border on the top */ +.list.inset .list-divider:first-child { + top: 0; + border-top-width: 0; + border-radius: 6px 6px 0 0; +} + +/* Rounding last divider on inset lists */ +.list.inset .list-divider:last-child { + border-radius: 0 0 6px 6px; +} + +/* Right-aligned subcontent in lists (chevrons, buttons, counts and toggles) +-------------------------------------------------- */ +.list .chevron, +.list [class*="button"], +.list [class*="count"], +.list .toggle { + position: absolute; + top: 50%; + right: 10px; +} + + /* Position chevrons/counts vertically centered on the right in list items */ +.list .chevron, +.list [class*="count"] { + margin-top: -10px; /* Half height of chevron */ +} + +/* Push count over if there's a sibling chevron */ +.list .chevron + [class*="count"] { + right: 30px; +} + +/* Position buttons vertically centered on the right in list items */ +.list [class*="button"] { + left: auto; + margin-top: -14px; /* Half height of button */ +} + +.list .toggle { + margin-top: -15px; /* Half height of toggle */ +}/* Forms +-------------------------------------------------- */ + +/* Force form elements to inherit font styles */ +input, +textarea, +button, +select { + font-family: inherit; + font-size: inherit; +} + +/* Stretch inputs/textareas to full width and add height to maintain a consistent baseline */ +select, +textarea, +input[type="text"], +input[type=search], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="tel"], +input[type="color"], +.input-group { + width: 100%; + height: 40px; + padding: 10px; + margin-bottom: 10px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 3px; + box-shadow: 0 1px 1px rgba(255, 255, 255, .2), inset 0 1px 1px rgba(0, 0, 0, .1); + -webkit-appearance: none; + box-sizing: border-box; +} + +/* Fully round search input */ +input[type=search] { + height: 34px; + font-size: 14px; + border-radius: 30px; +} + +/* Allow text area's height to grow larger than a normal input */ +textarea { + height: auto; +} + +/* Style select button to look like part of the Ratchet's style */ +select { + height: auto; + font-size: 14px; + background-color: #f8f8f8; + background-image: -webkit-linear-gradient(top, #f8f8f8 0%, #d4d4d4 100%); + background-image: linear-gradient(to bottom, #f8f8f8 0%, #d4d4d4 100%); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .1); +} + + +/* Input groups (cluster multiple inputs together into a single group) +-------------------------------------------------- */ + +/* Reset from initial form setup styles */ +.input-group { + width: auto; + height: auto; + padding: 0; +} + +/* Remove spacing, borders, shadows and rounding since it all belongs on the .input-group not the input */ +.input-group input { + margin-bottom: 0; + background-color: transparent; + border: 0; + border-bottom: 1px solid rgba(0, 0, 0, .2); + border-radius: 0; + box-shadow: none; +} + +/* Remove bottom border on last input to avoid double bottom border */ +.input-group input:last-child { + border-bottom-width: 0; +} + +/* Input groups with labels +-------------------------------------------------- */ + +/* To use labels with input groups, wrap a label and an input in an .input-row */ +.input-row { + overflow: hidden; + border-bottom: 1px solid rgba(0, 0, 0, .2); +} + +/* Remove bottom border on last input-row to avoid double bottom border */ +.input-row:last-child { + border-bottom-width: 0; +} + +/* Labels get floated left with a set percentage width */ +.input-row label { + float: left; + width: 25%; + padding: 11px 10px 9px 13px; /* Optimizing the baseline for mobile. */ + font-weight: bold; +} + +/* Actual inputs float to right of labels and also have a set percentage */ +.input-row label + input { + float: right; + width: 65%; + padding-left: 0; + margin-bottom: 0; + border-bottom: 0; +}/* General button styles +-------------------------------------------------- */ + +[class*="button"] { + position: relative; + display: inline-block; + padding: 4px 12px; + margin: 0; + font-weight: bold; + line-height: 18px; + color: #333; + text-align: center; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + vertical-align: top; + cursor: pointer; + background-color: #f8f8f8; + background-image: -webkit-linear-gradient(top, #f8f8f8 0, #d4d4d4 100%); + background-image: linear-gradient(to bottom, #f8f8f8 0, #d4d4d4 100%); + border: 1px solid rgba(0, 0, 0, .3); + border-radius: 3px; + box-shadow: inset 0 1px 1px rgba(255, 255, 255, .4), 0 1px 2px rgba(0, 0, 0, .05); +} + +/* Active */ +[class*="button"]:active { + padding-top: 5px; + padding-bottom: 3px; + color: #333; + background-color: #ccc; + background-image: none; + box-shadow: inset 0 3px 3px rgba(0, 0, 0, .2); +} + +/* Button modifiers +-------------------------------------------------- */ + +/* Overriding styles for buttons with modifiers */ +.button-main, +.button-positive, +.button-negative { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, .3); +} + +/* Main button */ +.button-main { + background-color: #1eafe7; + background-image: -webkit-linear-gradient(top, #1eafe7 0, #1a97c8 100%); + background-image: linear-gradient(to bottom, #1eafe7 0, #1a97c8 100%); + border: 1px solid #117aaa; +} + +/* Positive button */ +.button-positive { + background-color: #34ba15; + background-image: -webkit-linear-gradient(top, #34ba15 0, #2da012 100%); + background-image: linear-gradient(to bottom, #34ba15 0, #2da012 100%); + border: 1px solid #278f0f; +} + +/* Negative button */ +.button-negative { + background-color: #e71e1e; + background-image: -webkit-linear-gradient(top, #e71e1e 0,#c71a1a 100%); + background-image: linear-gradient(to bottom, #e71e1e 0, #c71a1a 100%); + border: 1px solid #b51a1a; +} + +/* Active state for buttons with modifiers */ +.button-main:active, +.button-positive:active, +.button-negative:active { + color: #fff; +} +.button-main:active { + background-color: #0876b1; +} +.button-positive:active { + background-color: #298f11; +} +.button-negative:active { + background-color: #b21a1a; +} + +/* Block level buttons (full width buttons) */ +.button-block { + display: block; + padding: 11px 0 13px; + margin-bottom: 10px; + font-size: 16px; +} + +/* Active state for block level buttons */ +.button-block:active { + padding: 12px 0; +} + +/* Counts in buttons +-------------------------------------------------- */ + +/* Generic styles for all counts within buttons */ +[class*="button"] [class*="count"] { + padding-top: 2px; + padding-bottom: 2px; + margin-right: -4px; + margin-left: 4px; + text-shadow: none; + background-color: rgba(0, 0, 0, .2); + box-shadow: inset 0 1px 1px -1px #000000, 0 1px 1px -1px #fff; +} + +/* Position counts within block level buttons + Note: These are absolutely positioned so that text of button isn't "pushed" by count and always + stays at true center of button */ +.button-block [class*="count"] { + position: absolute; + right: 0; + padding-top: 4px; + padding-bottom: 4px; + margin-right: 10px; +}/* Chevrons +-------------------------------------------------- */ + +.chevron { + display: block; + height: 20px; +} + +/* Base styles for both 1/2's of the chevron */ +.chevron:before, +.chevron:after { + position: relative; + display: block; + width: 12px; + height: 4px; + background-color: #999; + content: ''; +} + +/* Position and rotate respective 1/2's of the chevron */ +.chevron:before { + top: 5px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} +.chevron:after { + top: 7px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +}/* General count styles +-------------------------------------------------- */ + +[class*="count"] { + display: inline-block; + padding: 4px 9px; + font-size: 12px; + font-weight: bold; + line-height: 13px; + color: #fff; + background-color: rgba(0, 0, 0, .3); + border-radius: 100px; +} + +/* Count modifiers +-------------------------------------------------- */ + +/* Overriding styles for counts with modifiers */ +.count-main, +.count-positive, +.count-negative { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, .3); +} + +/* Main count */ +.count-main { + background-color: #1eafe7; + background-image: -webkit-linear-gradient(top, #1eafe7 0, #1a97c8 100%); + background-image: linear-gradient(to bottom, #1eafe7 0, #1a97c8 100%); +} + +/* Positive count */ +.count-positive { + background-color: #34ba15; + background-image: -webkit-linear-gradient(top, #34ba15 0, #2da012 100%); + background-image: linear-gradient(to bottom, #34ba15 0, #2da012 100%); +} + +/* Negative count */ +.count-negative { + background-color: #e71e1e; + background-image: -webkit-linear-gradient(top, #e71e1e 0,#c71a1a 100%); + background-image: linear-gradient(to bottom, #e71e1e 0, #c71a1a 100%); +}/* Segmented controllers +-------------------------------------------------- */ + +.segmented-controller { + display: -webkit-box; + display: box; + margin-bottom: 10px; + overflow: hidden; + font-size: 12px; + font-weight: bold; + text-shadow: 0 1px rgba(255, 255, 255, .5); + list-style: none; + background-color: #f8f8f8; + background-image: -webkit-linear-gradient(top, #f8f8f8 0, #d4d4d4 100%); + background-image: linear-gradient(to bottom, #f8f8f8 0, #d4d4d4 100%); + border: 1px solid #aaa; + border-radius: 3px; + box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 1px rgba(255, 255, 255, .8); + -webkit-box-orient: horizontal; + box-orient: horizontal; +} + +/* Section within controller */ +.segmented-controller li { + overflow: hidden; + text-align: center; + white-space: nowrap; + border-left: 1px solid #aaa; + box-shadow: inset 1px 0 rgba(255, 255, 255, .5); + -webkit-box-flex: 1; + box-flex: 1; +} + +/* Link that fills each section */ +.segmented-controller li > a { + display: block; + padding: 8px 16px; + overflow: hidden; + line-height: 15px; + color: #333; + text-overflow: ellipsis; +} + +/* Remove border-left and shadow from first section */ +.segmented-controller li:first-child { + border-left-width: 0; + box-shadow: none; +} + +/* Active segment of controller */ +.segmented-controller li.active { + background-color: #ccc; + box-shadow: inset 0 1px 5px rgba(0, 0, 0, .3); +} + +.segmented-controller-item { + display: none; +} + +.segmented-controller-item.active { + display: block; +}/* Popovers (to be used with popovers.js) +-------------------------------------------------- */ + +.popover { + position: fixed; + top: 55px; + left: 50%; + z-index: 20; + display: none; + width: 280px; + padding: 5px; + margin-left: -146px; + background-color: #555; + background-image: -webkit-linear-gradient(top, #555 5%, #555 6%, #111 30%); + background-image: linear-gradient(to bottom, #555 5%, #555 6%,#111 30%); + border: 1px solid #111; + border-radius: 6px; + opacity: 0; + box-shadow: inset 0 1px 1px -1px #fff, 0 3px 10px rgba(0, 0, 0, .3); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in-out; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out; +} + +/* Caret on top of popover using CSS triangles (thanks to @chriscoyier for solution) */ +.popover:before, +.popover:after { + position: absolute; + left: 50%; + width: 0; + height: 0; + content: ''; +} +.popover:before { + top: -20px; + margin-left: -21px; + border-right: 21px solid transparent; + border-bottom: 21px solid #111; + border-left: 21px solid transparent; +} +.popover:after { + top: -19px; + margin-left: -20px; + border-right: 20px solid transparent; + border-bottom: 20px solid #555; + border-left: 20px solid transparent; +} + +/* Wrapper for a title and buttons */ +.popover-header { + display: -webkit-box; + display: box; + height: 34px; + margin-bottom: 5px; +} + +/* Centered title for popover */ +.popover-header .title { + position: absolute; + top: 0; + left: 0; + width: 100%; + margin: 15px 0; + font-size: 16px; + font-weight: bold; + line-height: 12px; + color: #fff; + text-align: center; + text-shadow: 0 -1px rgba(0, 0, 0, .5); +} + +/* Generic style for all buttons in .popover-header */ +.popover-header [class*="button"] { + z-index: 25; + font-size: 12px; + line-height: 22px; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, .3); + background-color: #454545; + background-image: -webkit-linear-gradient(top, #454545 0, #353535 100%); + background-image: linear-gradient(to bottom, #454545 0, #353535 100%); + border: 1px solid #111; + -webkit-box-flex: 0; + box-flex: 0; +} + +/* Hacky way to right align buttons outside of flex-box system + Note: is only absolutely positioned button, would be better if flex-box had an "align right" option */ +.popover-header .title + [class*="button"]:last-child, +.popover-header .button + [class*="button"]:last-child, +.popover-header [class*="button"].pull-right { + position: absolute; + top: 5px; + right: 5px; +} + +/* Active state for popover header buttons */ +.popover-header .button:active { + color: #fff; + background-color: #0876b1; +} + +/* Popover animation +-------------------------------------------------- */ + +.popover.visible { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +/* Backdrop (used as invisible touch escape) +-------------------------------------------------- */ + +.backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 10; +} + +/* Block level buttons in popovers +-------------------------------------------------- */ + +/* Positioning and giving darker border to look sharp against dark popover */ +.popover .button-block { + margin-bottom: 5px; + border: 1px solid #111; +} + +/* Remove extra margin on bottom of last button */ +.popover .button-block:last-child { + margin-bottom: 0; +} + +/* Lists in popovers +-------------------------------------------------- */ + +.popover .list { + width: auto; + max-height: 250px; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + overflow: auto; + background-color: #fff; + border: 1px solid #000; + border-radius: 3px; + -webkit-overflow-scrolling: touch; +}/* Modals +-------------------------------------------------- */ +.modal { + position: fixed; + top: 0; + opacity: 0; + z-index: 11; + width: 100%; + min-height: 100%; + overflow: hidden; + background-color: #fff; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + -webkit-transition: -webkit-transform .25s ease-in-out, opacity 1ms .25s; + transition: transform .25s ease-in-out, opacity 1ms .25s; +} + +/* Modal - When active +-------------------------------------------------- */ +.modal.active { + opacity: 1; + height: 100%; + -webkit-transition: -webkit-transform .25s ease-in-out; + transition: transform .25 ease-in-out; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +}/* Slider styles (to be used with sliders.js) +-------------------------------------------------- */ + +/* Width/height of slider */ +.slider, +.slider > li { + width: 100%; + height: 200px; +} + +/* Outer wrapper for slider */ +.slider { + overflow: hidden; + background-color: #000; +} + +/* Inner wrapper for slider (width of all slides together) */ +.slider > ul { + position: relative; + font-size: 0; /* Remove spaces from inline-block children */ + white-space: nowrap; + -webkit-transition: all 0 linear; + transition: all 0 linear; +} + +/* Individual slide */ +.slider > ul > li { + display: inline-block; + vertical-align: top; /* Ensure that li always aligns to top */ + width: 100%; + height: 100%; +} + +/* Required reset of font-size to same as standard body */ +.slider > ul > li > * { + font-size: 14px; +}/* Toggle styles (to be used with toggles.js) +-------------------------------------------------- */ + +.toggle { + position: relative; + width: 75px; + height: 28px; + background-color: #eee; + border: 1px solid #bbb; + border-radius: 20px; + box-shadow: inset 0 0 4px rgba(0, 0, 0, .1); +} + +/* Text indicating "on" or "off". Default is "off" */ +.toggle:before { + position: absolute; + right: 13px; + font-weight: bold; + line-height: 28px; + color: #777; + text-shadow: 0 1px #fff; + text-transform: uppercase; + content: "Off"; +} + +/* Sliding handle */ +.toggle-handle { + position: absolute; + top: -1px; + left: -1px; + z-index: 2; + width: 28px; + height: 28px; + background-color: #fff; + background-image: -webkit-linear-gradient(top, #fff 0, #f2f2f2 100%); + background-image: linear-gradient(to bottom, #fff 0, #f2f2f2 100%); + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 100px; + -webkit-transition: -webkit-transform 0.1s ease-in-out, border 0.1s ease-in-out; + transition: transform 0.1s ease-in-out, border 0.1s ease-in-out; +} + +/* Active state for toggle */ +.toggle.active { + background-color: #19a8e4; + background-image: -webkit-linear-gradient(top, #088cd4 0, #19a8e4 100%); + background-image: linear-gradient(to bottom, #088cd4 0, #19a8e4 100%); + border: 1px solid #096c9d; + box-shadow: inset 0 0 15px rgba(255, 255, 255, .25); +} + +/* Active state for toggle handle */ +.toggle.active .toggle-handle { + border-color: #0a76ad; + -webkit-transform: translate3d(48px,0,0); + transform: translate3d(48px,0,0); +} + +/* Change "off" to "on" for active state */ +.toggle.active:before { + right: auto; + left: 15px; + color: #fff; + text-shadow: 0 -1px rgba(0, 0, 0, 0.25); + content: "On"; +}/* Push styles (to be used with push.js) +-------------------------------------------------- */ + +/* Fade animation */ +.content.fade { + left: 0; + opacity: 0; + -webkit-transition: opacity .2s ease-in-out; + transition: opacity .2s ease-in-out; +} +.content.fade.in { + opacity: 1; +} + +/* Slide animation */ +.content.slide { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-transition: -webkit-transform .25s ease-in-out; + transition: transform .25s ease-in-out; +} +.content.slide.left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); +} +.content.slide.right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); +} \ No newline at end of file diff --git a/ajax/libs/ratchet/1.0.1/ratchet.js b/ajax/libs/ratchet/1.0.1/ratchet.js new file mode 100644 index 000000000..c8a767da0 --- /dev/null +++ b/ajax/libs/ratchet/1.0.1/ratchet.js @@ -0,0 +1,765 @@ +/** + * ================================== + * Ratchet v1.0.0 + * Licensed under The MIT License + * http://opensource.org/licenses/MIT + * ================================== + */ + +/* ---------------------------------- + * MODAL v1.0.0 + * Licensed under The MIT License + * http://opensource.org/licenses/MIT + * ---------------------------------- */ + +!function () { + var findModals = function (target) { + var i; + var modals = document.querySelectorAll('a'); + for (; target && target !== document; target = target.parentNode) { + for (i = modals.length; i--;) { if (modals[i] === target) return target; } + } + }; + + var getModal = function (event) { + var modalToggle = findModals(event.target); + if (modalToggle && modalToggle.hash) return document.querySelector(modalToggle.hash); + }; + + window.addEventListener('touchend', function (event) { + var modal = getModal(event); + if (modal) modal.classList.toggle('active'); + }); +}();/* ---------------------------------- + * POPOVER v1.0.0 + * Licensed under The MIT License + * http://opensource.org/licenses/MIT + * ---------------------------------- */ + +!function () { + + var popover; + + var findPopovers = function (target) { + var i, popovers = document.querySelectorAll('a'); + for (; target && target !== document; target = target.parentNode) { + for (i = popovers.length; i--;) { if (popovers[i] === target) return target; } + } + }; + + var onPopoverHidden = function () { + document.body.removeChild(backdrop); + popover.style.display = 'none'; + popover.removeEventListener('webkitTransitionEnd', onPopoverHidden); + } + + var backdrop = function () { + var element = document.createElement('div'); + + element.classList.add('backdrop'); + + element.addEventListener('touchend', function () { + popover.addEventListener('webkitTransitionEnd', onPopoverHidden); + popover.classList.remove('visible'); + }); + + return element; + }(); + + var getPopover = function (e) { + var anchor = findPopovers(e.target); + + if (!anchor || !anchor.hash) return; + + popover = document.querySelector(anchor.hash); + + if (!popover || !popover.classList.contains('popover')) return; + + return popover; + } + + window.addEventListener('touchend', function (e) { + var popover = getPopover(e); + + if (!popover) return; + + popover.style.display = 'block'; + popover.offsetHeight; + popover.classList.add('visible'); + + popover.parentNode.appendChild(backdrop); + }); + + window.addEventListener('click', function (e) { if (getPopover(e)) e.preventDefault(); }); + +}(); +/* ---------------------------------- + * PUSH v1.0.0 + * Licensed under The MIT License + * inspired by chris's jquery.pjax.js + * http://opensource.org/licenses/MIT + * ---------------------------------- */ + +!function () { + + var noop = function () {}; + + + // Pushstate cacheing + // ================== + + var isScrolling; + var maxCacheLength = 20; + var cacheMapping = sessionStorage; + var domCache = {}; + var transitionMap = { + 'slide-in' : 'slide-out', + 'slide-out' : 'slide-in', + 'fade' : 'fade' + }; + var bars = { + bartab : '.bar-tab', + bartitle : '.bar-title', + barfooter : '.bar-footer', + barheadersecondary : '.bar-header-secondary' + } + + var cacheReplace = function (data, updates) { + PUSH.id = data.id; + if (updates) data = getCached(data.id); + cacheMapping[data.id] = JSON.stringify(data); + window.history.replaceState(data.id, data.title, data.url); + domCache[data.id] = document.body.cloneNode(true); + }; + + var cachePush = function () { + var id = PUSH.id; + + var cacheForwardStack = JSON.parse(cacheMapping.cacheForwardStack || '[]'); + var cacheBackStack = JSON.parse(cacheMapping.cacheBackStack || '[]'); + + cacheBackStack.push(id); + + while (cacheForwardStack.length) delete cacheMapping[cacheForwardStack.shift()]; + while (cacheBackStack.length > maxCacheLength) delete cacheMapping[cacheBackStack.shift()]; + + window.history.pushState(null, '', cacheMapping[PUSH.id].url); + + cacheMapping.cacheForwardStack = JSON.stringify(cacheForwardStack); + cacheMapping.cacheBackStack = JSON.stringify(cacheBackStack); + }; + + var cachePop = function (id, direction) { + var forward = direction == 'forward'; + var cacheForwardStack = JSON.parse(cacheMapping.cacheForwardStack || '[]'); + var cacheBackStack = JSON.parse(cacheMapping.cacheBackStack || '[]'); + var pushStack = forward ? cacheBackStack : cacheForwardStack; + var popStack = forward ? cacheForwardStack : cacheBackStack; + + if (PUSH.id) pushStack.push(PUSH.id); + popStack.pop(); + + cacheMapping.cacheForwardStack = JSON.stringify(cacheForwardStack); + cacheMapping.cacheBackStack = JSON.stringify(cacheBackStack); + }; + + var getCached = function (id) { + return JSON.parse(cacheMapping[id] || null) || {}; + }; + + var getTarget = function (e) { + var target = findTarget(e.target); + + if ( + ! target + || e.which > 1 + || e.metaKey + || e.ctrlKey + || isScrolling + || location.protocol !== target.protocol + || location.host !== target.host + || !target.hash && /#/.test(target.href) + || target.hash && target.href.replace(target.hash, '') === location.href.replace(location.hash, '') + || target.getAttribute('data-ignore') == 'push' + ) return; + + return target; + }; + + + // Main event handlers (touchend, popstate) + // ========================================== + + var touchend = function (e) { + var target = getTarget(e); + + if (!target) return; + + e.preventDefault(); + + PUSH({ + url : target.href, + hash : target.hash, + timeout : target.getAttribute('data-timeout'), + transition : target.getAttribute('data-transition') + }); + }; + + var popstate = function (e) { + var key; + var barElement; + var activeObj; + var activeDom; + var direction; + var transition; + var transitionFrom; + var transitionFromObj; + var id = e.state; + + if (!id || !cacheMapping[id]) return; + + direction = PUSH.id < id ? 'forward' : 'back'; + + cachePop(id, direction); + + activeObj = getCached(id); + activeDom = domCache[id]; + + if (activeObj.title) document.title = activeObj.title; + + if (direction == 'back') { + transitionFrom = JSON.parse(direction == 'back' ? cacheMapping.cacheForwardStack : cacheMapping.cacheBackStack); + transitionFromObj = getCached(transitionFrom[transitionFrom.length - 1]); + } else { + transitionFromObj = activeObj; + } + + if (direction == 'back' && !transitionFromObj.id) return PUSH.id = id; + + transition = direction == 'back' ? transitionMap[transitionFromObj.transition] : transitionFromObj.transition; + + if (!activeDom) { + return PUSH({ + id : activeObj.id, + url : activeObj.url, + title : activeObj.title, + timeout : activeObj.timeout, + transition : transition, + ignorePush : true + }); + } + + if (transitionFromObj.transition) { + activeObj = extendWithDom(activeObj, '.content', activeDom.cloneNode(true)); + for (key in bars) { + barElement = document.querySelector(bars[key]) + if (activeObj[key]) swapContent(activeObj[key], barElement); + else if (barElement) barElement.parentNode.removeChild(barElement); + } + } + + swapContent( + (activeObj.contents || activeDom).cloneNode(true), + document.querySelector('.content'), + transition + ); + + PUSH.id = id; + + document.body.offsetHeight; // force reflow to prevent scroll + }; + + + // Core PUSH functionality + // ======================= + + var PUSH = function (options) { + var key; + var data = {}; + var xhr = PUSH.xhr; + + options.container = options.container || options.transition ? document.querySelector('.content') : document.body; + + for (key in bars) { + options[key] = options[key] || document.querySelector(bars[key]); + } + + if (xhr && xhr.readyState < 4) { + xhr.onreadystatechange = noop; + xhr.abort() + } + + xhr = new XMLHttpRequest(); + xhr.open('GET', options.url, true); + xhr.setRequestHeader('X-PUSH', 'true'); + + xhr.onreadystatechange = function () { + if (options._timeout) clearTimeout(options._timeout); + if (xhr.readyState == 4) xhr.status == 200 ? success(xhr, options) : failure(options.url); + }; + + if (!PUSH.id) { + cacheReplace({ + id : +new Date, + url : window.location.href, + title : document.title, + timeout : options.timeout, + transition : null + }); + } + + if (options.timeout) { + options._timeout = setTimeout(function () { xhr.abort('timeout'); }, options.timeout); + } + + xhr.send(); + + if (xhr.readyState && !options.ignorePush) cachePush(); + }; + + + // Main XHR handlers + // ================= + + var success = function (xhr, options) { + var key; + var barElement; + var data = parseXHR(xhr, options); + + if (!data.contents) return locationReplace(options.url); + + if (data.title) document.title = data.title; + + if (options.transition) { + for (key in bars) { + barElement = document.querySelector(bars[key]) + if (data[key]) swapContent(data[key], barElement); + else if (barElement) barElement.parentNode.removeChild(barElement); + } + } + + swapContent(data.contents, options.container, options.transition, function () { + cacheReplace({ + id : options.id || +new Date, + url : data.url, + title : data.title, + timeout : options.timeout, + transition : options.transition + }, options.id); + triggerStateChange(); + }); + + if (!options.ignorePush && window._gaq) _gaq.push(['_trackPageview']) // google analytics + if (!options.hash) return; + }; + + var failure = function (url) { + throw new Error('Could not get: ' + url) + }; + + + // PUSH helpers + // ============ + + var swapContent = function (swap, container, transition, complete) { + var enter; + var containerDirection; + var swapDirection; + + if (!transition) { + if (container) container.innerHTML = swap.innerHTML; + else if (swap.classList.contains('content')) document.body.appendChild(swap); + else document.body.insertBefore(swap, document.querySelector('.content')); + } else { + enter = /in$/.test(transition); + + if (transition == 'fade') { + container.classList.add('in'); + container.classList.add('fade'); + swap.classList.add('fade'); + } + + if (/slide/.test(transition)) { + swap.classList.add(enter ? 'right' : 'left'); + swap.classList.add('slide'); + container.classList.add('slide'); + } + + container.parentNode.insertBefore(swap, container); + } + + if (!transition) complete && complete(); + + if (transition == 'fade') { + container.offsetWidth; // force reflow + container.classList.remove('in'); + container.addEventListener('webkitTransitionEnd', fadeContainerEnd); + + function fadeContainerEnd() { + container.removeEventListener('webkitTransitionEnd', fadeContainerEnd); + swap.classList.add('in'); + swap.addEventListener('webkitTransitionEnd', fadeSwapEnd); + } + function fadeSwapEnd () { + swap.removeEventListener('webkitTransitionEnd', fadeSwapEnd); + container.parentNode.removeChild(container); + swap.classList.remove('fade'); + swap.classList.remove('in'); + complete && complete(); + } + } + + if (/slide/.test(transition)) { + container.offsetWidth; // force reflow + swapDirection = enter ? 'right' : 'left' + containerDirection = enter ? 'left' : 'right' + container.classList.add(containerDirection); + swap.classList.remove(swapDirection); + swap.addEventListener('webkitTransitionEnd', slideEnd); + + function slideEnd() { + swap.removeEventListener('webkitTransitionEnd', slideEnd); + swap.classList.remove('slide'); + swap.classList.remove(swapDirection); + container.parentNode.removeChild(container); + complete && complete(); + } + } + }; + + var triggerStateChange = function () { + var e = new CustomEvent('push', { + detail: { state: getCached(PUSH.id) }, + bubbles: true, + cancelable: true + }); + + window.dispatchEvent(e); + }; + + var findTarget = function (target) { + var i, toggles = document.querySelectorAll('a'); + for (; target && target !== document; target = target.parentNode) { + for (i = toggles.length; i--;) { if (toggles[i] === target) return target; } + } + }; + + var locationReplace = function (url) { + window.history.replaceState(null, '', '#'); + window.location.replace(url); + }; + + var parseURL = function (url) { + var a = document.createElement('a'); a.href = url; return a; + }; + + var extendWithDom = function (obj, fragment, dom) { + var i; + var result = {}; + + for (i in obj) result[i] = obj[i]; + + Object.keys(bars).forEach(function (key) { + var el = dom.querySelector(bars[key]); + if (el) el.parentNode.removeChild(el); + result[key] = el; + }); + + result.contents = dom.querySelector(fragment); + + return result; + }; + + var parseXHR = function (xhr, options) { + var head; + var body; + var data = {}; + var responseText = xhr.responseText; + + data.url = options.url; + + if (!responseText) return data; + + if (/]*>([\s\S.]*)<\/head>/i)[0] + body.innerHTML = responseText.match(/]*>([\s\S.]*)<\/body>/i)[0] + } else { + head = body = document.createElement('div'); + head.innerHTML = responseText; + } + + data.title = head.querySelector('title'); + data.title = data.title && data.title.innerText.trim(); + + if (options.transition) data = extendWithDom(data, '.content', body); + else data.contents = body; + + return data; + }; + + + // Attach PUSH event handlers + // ========================== + + window.addEventListener('touchstart', function () { isScrolling = false; }); + window.addEventListener('touchmove', function () { isScrolling = true; }) + window.addEventListener('touchend', touchend); + window.addEventListener('click', function (e) { if (getTarget(e)) e.preventDefault(); }); + window.addEventListener('popstate', popstate); + +}();/* ---------------------------------- + * TABS v1.0.0 + * Licensed under The MIT License + * http://opensource.org/licenses/MIT + * ---------------------------------- */ + +!function () { + var getTarget = function (target) { + var i, popovers = document.querySelectorAll('.segmented-controller li a'); + for (; target && target !== document; target = target.parentNode) { + for (i = popovers.length; i--;) { if (popovers[i] === target) return target; } + } + }; + + window.addEventListener("touchend", function (e) { + var activeTab; + var activeBody; + var targetBody; + var targetTab; + var className = 'active'; + var classSelector = '.' + className; + var targetAnchor = getTarget(e.target); + + if (!targetAnchor) return; + + targetTab = targetAnchor.parentNode; + activeTab = targetTab.parentNode.querySelector(classSelector); + + if (activeTab) activeTab.classList.remove(className); + + targetTab.classList.add(className); + + if (!targetAnchor.hash) return; + + targetBody = document.querySelector(targetAnchor.hash); + + if (!targetBody) return; + + activeBody = targetBody.parentNode.querySelector(classSelector); + + if (activeBody) activeBody.classList.remove(className); + + targetBody.classList.add(className) + }); + + window.addEventListener('click', function (e) { if (getTarget(e.target)) e.preventDefault(); }); +}();/* ---------------------------------- + * SLIDER v1.0.0 + * Licensed under The MIT License + * Adapted from Brad Birdsall's swipe + * http://opensource.org/licenses/MIT + * ---------------------------------- */ + +!function () { + + var pageX; + var pageY; + var slider; + var deltaX; + var deltaY; + var offsetX; + var lastSlide; + var startTime; + var resistance; + var sliderWidth; + var slideNumber; + var isScrolling; + var scrollableArea; + + var getSlider = function (target) { + var i, sliders = document.querySelectorAll('.slider ul'); + for (; target && target !== document; target = target.parentNode) { + for (i = sliders.length; i--;) { if (sliders[i] === target) return target; } + } + } + + var getScroll = function () { + var translate3d = slider.style.webkitTransform.match(/translate3d\(([^,]*)/); + return parseInt(translate3d ? translate3d[1] : 0) + }; + + var setSlideNumber = function (offset) { + var round = offset ? (deltaX < 0 ? 'ceil' : 'floor') : 'round'; + slideNumber = Math[round](getScroll() / ( scrollableArea / slider.children.length) ); + slideNumber += offset; + slideNumber = Math.min(slideNumber, 0); + slideNumber = Math.max(-(slider.children.length - 1), slideNumber); + } + + var onTouchStart = function (e) { + slider = getSlider(e.target); + + if (!slider) return; + + var firstItem = slider.querySelector('li'); + + scrollableArea = firstItem.offsetWidth * slider.children.length; + isScrolling = undefined; + sliderWidth = slider.offsetWidth; + resistance = 1; + lastSlide = -(slider.children.length - 1); + startTime = +new Date; + pageX = e.touches[0].pageX; + pageY = e.touches[0].pageY; + + setSlideNumber(0); + + slider.style['-webkit-transition-duration'] = 0; + }; + + var onTouchMove = function (e) { + if (e.touches.length > 1 || !slider) return; // Exit if a pinch || no slider + + deltaX = e.touches[0].pageX - pageX; + deltaY = e.touches[0].pageY - pageY; + pageX = e.touches[0].pageX; + pageY = e.touches[0].pageY; + + if (typeof isScrolling == 'undefined') { + isScrolling = Math.abs(deltaY) > Math.abs(deltaX); + } + + if (isScrolling) return; + + offsetX = (deltaX / resistance) + getScroll(); + + e.preventDefault(); + + resistance = slideNumber == 0 && deltaX > 0 ? (pageX / sliderWidth) + 1.25 : + slideNumber == lastSlide && deltaX < 0 ? (Math.abs(pageX) / sliderWidth) + 1.25 : 1; + + slider.style.webkitTransform = 'translate3d(' + offsetX + 'px,0,0)'; + }; + + var onTouchEnd = function (e) { + if (!slider || isScrolling) return; + + setSlideNumber( + (+new Date) - startTime < 1000 && Math.abs(deltaX) > 15 ? (deltaX < 0 ? -1 : 1) : 0 + ); + + offsetX = slideNumber * sliderWidth; + + slider.style['-webkit-transition-duration'] = '.2s'; + slider.style.webkitTransform = 'translate3d(' + offsetX + 'px,0,0)'; + + e = new CustomEvent('slide', { + detail: { slideNumber: Math.abs(slideNumber) }, + bubbles: true, + cancelable: true + }); + + slider.parentNode.dispatchEvent(e); + }; + + window.addEventListener('touchstart', onTouchStart); + window.addEventListener('touchmove', onTouchMove); + window.addEventListener('touchend', onTouchEnd); + +}(); +/* ---------------------------------- + * TOGGLE v1.0.0 + * Licensed under The MIT License + * http://opensource.org/licenses/MIT + * ---------------------------------- */ + +!function () { + + var start = {}; + var touchMove = false; + var distanceX = false; + var toggle = false; + + var findToggle = function (target) { + var i, toggles = document.querySelectorAll('.toggle'); + for (; target && target !== document; target = target.parentNode) { + for (i = toggles.length; i--;) { if (toggles[i] === target) return target; } + } + } + + window.addEventListener('touchstart', function (e) { + e = e.originalEvent || e; + + toggle = findToggle(e.target); + + if (!toggle) return; + + var handle = toggle.querySelector('.toggle-handle'); + var toggleWidth = toggle.offsetWidth; + var handleWidth = handle.offsetWidth; + var offset = toggle.classList.contains('active') ? toggleWidth - handleWidth : 0; + + start = { pageX : e.touches[0].pageX - offset, pageY : e.touches[0].pageY }; + touchMove = false; + + // todo: probably should be moved to the css + toggle.style['-webkit-transition-duration'] = 0; + }); + + window.addEventListener('touchmove', function (e) { + e = e.originalEvent || e; + + if (e.touches.length > 1) return; // Exit if a pinch + + if (!toggle) return; + + var handle = toggle.querySelector('.toggle-handle'); + var current = e.touches[0]; + var toggleWidth = toggle.offsetWidth; + var handleWidth = handle.offsetWidth; + var offset = toggleWidth - handleWidth; + + touchMove = true; + distanceX = current.pageX - start.pageX; + + if (Math.abs(distanceX) < Math.abs(current.pageY - start.pageY)) return; + + e.preventDefault(); + + if (distanceX < 0) return handle.style.webkitTransform = 'translate3d(0,0,0)'; + if (distanceX > offset) return handle.style.webkitTransform = 'translate3d(' + offset + 'px,0,0)'; + + handle.style.webkitTransform = 'translate3d(' + distanceX + 'px,0,0)'; + + toggle.classList[(distanceX > (toggleWidth/2 - handleWidth/2)) ? 'add' : 'remove']('active'); + }); + + window.addEventListener('touchend', function (e) { + if (!toggle) return; + + var handle = toggle.querySelector('.toggle-handle'); + var toggleWidth = toggle.offsetWidth; + var handleWidth = handle.offsetWidth; + var offset = toggleWidth - handleWidth; + var slideOn = (!touchMove && !toggle.classList.contains('active')) || (touchMove && (distanceX > (toggleWidth/2 - handleWidth/2))); + + if (slideOn) handle.style.webkitTransform = 'translate3d(' + offset + 'px,0,0)'; + else handle.style.webkitTransform = 'translate3d(0,0,0)'; + + toggle.classList[slideOn ? 'add' : 'remove']('active'); + + e = new CustomEvent('toggle', { + detail: { isActive: slideOn }, + bubbles: true, + cancelable: true + }); + + toggle.dispatchEvent(e); + + touchMove = false; + toggle = false; + }); + +}(); \ No newline at end of file diff --git a/ajax/libs/ratchet/1.0.1/ratchet.min.css b/ajax/libs/ratchet/1.0.1/ratchet.min.css new file mode 100644 index 000000000..583e84a5b --- /dev/null +++ b/ajax/libs/ratchet/1.0.1/ratchet.min.css @@ -0,0 +1 @@ +html,body,div,span,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,section,summary,time,audio,video{padding:0;margin:0;border:0}html{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{position:fixed;top:0;right:0;bottom:0;left:0;font:14px/1.25 "Helvetica Neue",sans-serif;color:#222;background-color:#fff}a{color:#0882f0;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.content{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;background-color:#fff;-webkit-transition-property:top,bottom;transition-property:top,bottom;-webkit-transition-duration:.2s,.2s;transition-duration:.2s,.2s;-webkit-transition-timing-function:linear,linear;transition-timing-function:linear,linear;-webkit-overflow-scrolling:touch}.content>*{-webkit-transform:translateZ(0px);transform:translateZ(0px)}.content-padded{padding:10px}.bar-title ~ .content{top:44px}.bar-tab ~ .content{bottom:51px}.bar-header-secondary ~ .content{top:88px}[class*="bar-"]{position:fixed;right:0;left:0;z-index:10;height:44px;padding:5px;box-sizing:border-box}.bar-header-secondary{top:45px}.bar-footer{bottom:0}.bar-standard{background-color:#f2f2f2;background-image:-webkit-linear-gradient(top,#f2f2f2 0,#e5e5e5 100%);background-image:linear-gradient(to bottom,#f2f2f2 0,#e5e5e5 100%);border-bottom:1px solid #aaa;box-shadow:inset 0 1px 1px -1px #fff}.bar-footer.bar-standard,.bar-footer-secondary.bar-standard{border-top:1px solid #aaa;border-bottom-width:0}.bar-title{top:0;display:-webkit-box;display:box;background-color:#1eb0e9;background-image:-webkit-linear-gradient(top,#1eb0e9 0,#109adc 100%);background-image:linear-gradient(to bottom,#1eb0e9 0,#109adc 100%);border-bottom:1px solid #0e5895;box-shadow:inset 0 1px 1px -1px rgba(255,255,255,.8);-webkit-box-orient:horizontal;box-orient:horizontal}.bar-title .title{position:absolute;top:0;left:0;display:block;width:100%;font-size:20px;font-weight:bold;line-height:44px;color:#fff;text-align:center;text-shadow:0 -1px rgba(0,0,0,.5);white-space:nowrap}.bar-title>a:not([class*="button"]){display:block;width:100%;height:100%}.bar-title .title a{color:inherit}.bar-tab{bottom:0;height:50px;padding:0;background-color:#393939;background-image:-webkit-linear-gradient(top,#393939 0,#2b2b2b 100%);background-image:linear-gradient(to bottom,#393939 0,#2b2b2b 100%);border-top:1px solid #000;border-bottom-width:0;box-shadow:inset 0 1px 1px -1px rgba(255,255,255,.6)}.tab-inner{display:-webkit-box;display:box;height:100%;list-style:none;-webkit-box-orient:horizontal;box-orient:horizontal}.tab-item{height:100%;padding-top:9px;text-align:center;box-sizing:border-box;-webkit-box-flex:1;box-flex:1}.tab-item.active{box-shadow:inset 0 0 20px rgba(0,0,0,.5)}.tab-icon{display:block;height:18px;margin:0 auto}.tab-label{margin-top:1px;font-size:10px;font-weight:bold;color:#fff;text-shadow:0 1px rgba(0,0,0,.3)}.bar-title [class*="button"]{position:relative;z-index:10;font-size:12px;line-height:23px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3);background-color:#1eb0e9;background-image:-webkit-linear-gradient(top,#1eb0e9 0,#0984c6 100%);background-image:linear-gradient(to bottom,#1eb0e9 0,#0984c6 100%);border:1px solid #0e5895;box-shadow:0 1px rgba(255,255,255,.25);-webkit-box-flex:0;box-flex:0}.bar-title .title+[class*="button"]:last-child,.bar-title .button+[class*="button"]:last-child,.bar-title [class*="button"].pull-right{position:absolute;top:5px;right:5px}.bar-title .button:active{color:#fff;background-color:#0876b1}.bar-title .button-prev,.bar-title .button-next{position:relative}.bar-title .button-prev{margin-left:7px;border-left:0;border-bottom-left-radius:10px 15px;border-top-left-radius:10px 15px}.bar-title .button-next{margin-right:7px;border-right:0;border-top-right-radius:10px 15px;border-bottom-right-radius:10px 15px}.bar-title .button-prev:before,.bar-title .button-next:before{position:absolute;top:2px;width:27px;height:27px;border-radius:30px 100px 2px 40px / 2px 40px 30px 100px;content:'';box-shadow:inset 1px 0 #0e5895,inset 0 1px #0e5895;-webkit-mask-image:-webkit-gradient(linear,left top,right bottom,from(#000),color-stop(.33,#000),color-stop(.5,transparent),to(transparent));mask-image:gradient(linear,left top,right bottom,from(#000),color-stop(.33,#000),color-stop(.5,transparent),to(transparent))}.bar-title .button-prev:before{left:-5px;background-image:-webkit-gradient(linear,left bottom,right top,from(#0984c6),to(#1eb0e9));background-image:gradient(linear,left bottom,right top,from(#0984c6),to(#1eb0e9));border-left:1.5px solid rgba(255,255,255,.25);-webkit-transform:rotate(-45deg) skew(-10deg,-10deg);transform:rotate(-45deg) skew(-10deg,-10deg)}.bar-title .button-next:before{right:-5px;background-image:-webkit-gradient(linear,left bottom,right top,from(#1eb0e9),to(#0984c6));background-image:gradient(linear,left bottom,right top,from(#1eb0e9),to(#0984c6));border-top:1.5px solid rgba(255,255,255,.25);-webkit-transform:rotate(135deg) skew(-10deg,-10deg);transform:rotate(135deg) skew(-10deg,-10deg)}.bar-title .button-prev:active,.bar-title .button-next:active,.bar-title .button-prev:active:before,.bar-title .button-next:active:before{color:#fff;background-color:#0876b1;background-image:none}.bar-title .button-prev:active:before,.bar-title .button-next:active:before{content:''}.bar-title .button-prev:active:before{box-shadow:inset 0 3px 3px rgba(0,0,0,.2)}.bar-title .button-next:active:before{box-shadow:inset 0 -3px 3px rgba(0,0,0,.2)}[class*="bar"] .button-block{padding:7px 0;margin-bottom:0;box-shadow:inset 0 1px 1px rgba(255,255,255,.4),0 1px rgba(255,255,255,.8)}[class*="bar"] .button-block:active{padding:7px 0}[class*="bar-"] .segmented-controller{margin-bottom:0}[class*="bar-"] .segmented-controller+[class*="button"],[class*="bar-"] [class*="button"]+.segmented-controller{margin-left:5px}.bar-title .segmented-controller{line-height:18px;text-shadow:0 -1px 0 rgba(0,0,0,0.3);background-color:#1eb0e9;background-image:-webkit-linear-gradient(top,#1eb0e9 0,#0984c6 100%);background-image:linear-gradient(to bottom,#1eb0e9 0,#0984c6 100%);border:1px solid #0e5895;border-radius:3px;box-shadow:0 1px rgba(255,255,255,.25);-webkit-box-flex:1;box-flex:1}.bar-title .segmented-controller li{border-left:1px solid #0e5895;box-shadow:inset 1px 0 rgba(255,255,255,.25)}.bar-title .segmented-controller .active+li,.bar-title .segmented-controller li:first-child{box-shadow:none}.bar-title .segmented-controller li:first-child{border-left-width:0}.bar-title .segmented-controller li.active{background-color:#0082c4;box-shadow:inset 0 1px 6px rgba(0,0,0,.3)}.bar-title .segmented-controller li>a{color:#fff}.bar-standard input[type=search]{height:32px;margin:0}.list{margin-bottom:10px;list-style:none;background-color:#fff}.list li{position:relative;padding:20px 60px 20px 10px;border-bottom:1px solid rgba(0,0,0,.1)}.list li:first-child{border-top:1px solid rgba(0,0,0,.1)}.list li>a:not([class*="button"]){position:relative;display:block;padding:inherit;margin:-20px -60px -20px -10px;color:inherit}.list.inset{width:auto;margin-right:10px;margin-left:10px;border:1px solid rgba(0,0,0,.1);border-radius:6px;box-sizing:border-box}.list.inset li:first-child{border-top-width:0}.list.inset li:last-child{border-bottom-width:0}.list .list-divider{position:relative;top:-1px;padding-top:6px;padding-bottom:6px;font-size:12px;font-weight:bold;line-height:18px;text-shadow:0 1px 0 rgba(255,255,255,.5);background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8 0,#eee 100%);background-image:linear-gradient(to bottom,#f8f8f8 0,#eee 100%);border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(255,255,255,.4)}.list.inset .list-divider:first-child{top:0;border-top-width:0;border-radius:6px 6px 0 0}.list.inset .list-divider:last-child{border-radius:0 0 6px 6px}.list .chevron,.list [class*="button"],.list [class*="count"],.list .toggle{position:absolute;top:50%;right:10px}.list .chevron,.list [class*="count"]{margin-top:-10px}.list .chevron+[class*="count"]{right:30px}.list [class*="button"]{left:auto;margin-top:-14px}.list .toggle{margin-top:-15px}input,textarea,button,select{font-family:inherit;font-size:inherit}select,textarea,input[type="text"],input[type=search],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="tel"],input[type="color"],.input-group{width:100%;height:40px;padding:10px;margin-bottom:10px;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:3px;box-shadow:0 1px 1px rgba(255,255,255,.2),inset 0 1px 1px rgba(0,0,0,.1);-webkit-appearance:none;box-sizing:border-box}input[type=search]{height:34px;font-size:14px;border-radius:30px}textarea{height:auto}select{height:auto;font-size:14px;background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8 0,#d4d4d4 100%);background-image:linear-gradient(to bottom,#f8f8f8 0,#d4d4d4 100%);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.input-group{width:auto;height:auto;padding:0}.input-group input{margin-bottom:0;background-color:transparent;border:0;border-bottom:1px solid rgba(0,0,0,.2);border-radius:0;box-shadow:none}.input-group input:last-child{border-bottom-width:0}.input-row{overflow:hidden;border-bottom:1px solid rgba(0,0,0,.2)}.input-row:last-child{border-bottom-width:0}.input-row label{float:left;width:25%;padding:11px 10px 9px 13px;font-weight:bold}.input-row label+input{float:right;width:65%;padding-left:0;margin-bottom:0;border-bottom:0}[class*="button"]{position:relative;display:inline-block;padding:4px 12px;margin:0;font-weight:bold;line-height:18px;color:#333;text-align:center;text-shadow:0 1px 0 rgba(255,255,255,0.5);vertical-align:top;cursor:pointer;background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8 0,#d4d4d4 100%);background-image:linear-gradient(to bottom,#f8f8f8 0,#d4d4d4 100%);border:1px solid rgba(0,0,0,.3);border-radius:3px;box-shadow:inset 0 1px 1px rgba(255,255,255,.4),0 1px 2px rgba(0,0,0,.05)}[class*="button"]:active{padding-top:5px;padding-bottom:3px;color:#333;background-color:#ccc;background-image:none;box-shadow:inset 0 3px 3px rgba(0,0,0,.2)}.button-main,.button-positive,.button-negative{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.button-main{background-color:#1eafe7;background-image:-webkit-linear-gradient(top,#1eafe7 0,#1a97c8 100%);background-image:linear-gradient(to bottom,#1eafe7 0,#1a97c8 100%);border:1px solid #117aaa}.button-positive{background-color:#34ba15;background-image:-webkit-linear-gradient(top,#34ba15 0,#2da012 100%);background-image:linear-gradient(to bottom,#34ba15 0,#2da012 100%);border:1px solid #278f0f}.button-negative{background-color:#e71e1e;background-image:-webkit-linear-gradient(top,#e71e1e 0,#c71a1a 100%);background-image:linear-gradient(to bottom,#e71e1e 0,#c71a1a 100%);border:1px solid #b51a1a}.button-main:active,.button-positive:active,.button-negative:active{color:#fff}.button-main:active{background-color:#0876b1}.button-positive:active{background-color:#298f11}.button-negative:active{background-color:#b21a1a}.button-block{display:block;padding:11px 0 13px;margin-bottom:10px;font-size:16px}.button-block:active{padding:12px 0}[class*="button"] [class*="count"]{padding-top:2px;padding-bottom:2px;margin-right:-4px;margin-left:4px;text-shadow:none;background-color:rgba(0,0,0,.2);box-shadow:inset 0 1px 1px -1px #000,0 1px 1px -1px #fff}.button-block [class*="count"]{position:absolute;right:0;padding-top:4px;padding-bottom:4px;margin-right:10px}.chevron{display:block;height:20px}.chevron:before,.chevron:after{position:relative;display:block;width:12px;height:4px;background-color:#999;content:''}.chevron:before{top:5px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.chevron:after{top:7px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}[class*="count"]{display:inline-block;padding:4px 9px;font-size:12px;font-weight:bold;line-height:13px;color:#fff;background-color:rgba(0,0,0,.3);border-radius:100px}.count-main,.count-positive,.count-negative{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.count-main{background-color:#1eafe7;background-image:-webkit-linear-gradient(top,#1eafe7 0,#1a97c8 100%);background-image:linear-gradient(to bottom,#1eafe7 0,#1a97c8 100%)}.count-positive{background-color:#34ba15;background-image:-webkit-linear-gradient(top,#34ba15 0,#2da012 100%);background-image:linear-gradient(to bottom,#34ba15 0,#2da012 100%)}.count-negative{background-color:#e71e1e;background-image:-webkit-linear-gradient(top,#e71e1e 0,#c71a1a 100%);background-image:linear-gradient(to bottom,#e71e1e 0,#c71a1a 100%)}.segmented-controller{display:-webkit-box;display:box;margin-bottom:10px;overflow:hidden;font-size:12px;font-weight:bold;text-shadow:0 1px rgba(255,255,255,.5);list-style:none;background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8 0,#d4d4d4 100%);background-image:linear-gradient(to bottom,#f8f8f8 0,#d4d4d4 100%);border:1px solid #aaa;border-radius:3px;box-shadow:inset 0 1px rgba(255,255,255,0.5),0 1px rgba(255,255,255,.8);-webkit-box-orient:horizontal;box-orient:horizontal}.segmented-controller li{overflow:hidden;text-align:center;white-space:nowrap;border-left:1px solid #aaa;box-shadow:inset 1px 0 rgba(255,255,255,.5);-webkit-box-flex:1;box-flex:1}.segmented-controller li>a{display:block;padding:8px 16px;overflow:hidden;line-height:15px;color:#333;text-overflow:ellipsis}.segmented-controller li:first-child{border-left-width:0;box-shadow:none}.segmented-controller li.active{background-color:#ccc;box-shadow:inset 0 1px 5px rgba(0,0,0,.3)}.segmented-controller-item{display:none}.segmented-controller-item.active{display:block}.popover{position:fixed;top:55px;left:50%;z-index:20;display:none;width:280px;padding:5px;margin-left:-146px;background-color:#555;background-image:-webkit-linear-gradient(top,#555 5%,#555 6%,#111 30%);background-image:linear-gradient(to bottom,#555 5%,#555 6%,#111 30%);border:1px solid #111;border-radius:6px;opacity:0;box-shadow:inset 0 1px 1px -1px #fff,0 3px 10px rgba(0,0,0,.3);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:-webkit-transform .2s ease-in-out,opacity .2s ease-in-out;transition:transform .2s ease-in-out,opacity .2s ease-in-out}.popover:before,.popover:after{position:absolute;left:50%;width:0;height:0;content:''}.popover:before{top:-20px;margin-left:-21px;border-right:21px solid transparent;border-bottom:21px solid #111;border-left:21px solid transparent}.popover:after{top:-19px;margin-left:-20px;border-right:20px solid transparent;border-bottom:20px solid #555;border-left:20px solid transparent}.popover-header{display:-webkit-box;display:box;height:34px;margin-bottom:5px}.popover-header .title{position:absolute;top:0;left:0;width:100%;margin:15px 0;font-size:16px;font-weight:bold;line-height:12px;color:#fff;text-align:center;text-shadow:0 -1px rgba(0,0,0,.5)}.popover-header [class*="button"]{z-index:25;font-size:12px;line-height:22px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3);background-color:#454545;background-image:-webkit-linear-gradient(top,#454545 0,#353535 100%);background-image:linear-gradient(to bottom,#454545 0,#353535 100%);border:1px solid #111;-webkit-box-flex:0;box-flex:0}.popover-header .title+[class*="button"]:last-child,.popover-header .button+[class*="button"]:last-child,.popover-header [class*="button"].pull-right{position:absolute;top:5px;right:5px}.popover-header .button:active{color:#fff;background-color:#0876b1}.popover.visible{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10}.popover .button-block{margin-bottom:5px;border:1px solid #111}.popover .button-block:last-child{margin-bottom:0}.popover .list{width:auto;max-height:250px;margin-right:0;margin-bottom:0;margin-left:0;overflow:auto;background-color:#fff;border:1px solid #000;border-radius:3px;-webkit-overflow-scrolling:touch}.modal{position:fixed;top:0;opacity:0;z-index:11;width:100%;min-height:100%;overflow:hidden;background-color:#fff;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .25s ease-in-out,opacity 1ms .25s;transition:transform .25s ease-in-out,opacity 1ms .25s}.modal.active{opacity:1;height:100%;-webkit-transition:-webkit-transform .25s ease-in-out;transition:transform .25 ease-in-out;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slider,.slider>li{width:100%;height:200px}.slider{overflow:hidden;background-color:#000}.slider>ul{position:relative;font-size:0;white-space:nowrap;-webkit-transition:all 0 linear;transition:all 0 linear}.slider>ul>li{display:inline-block;vertical-align:top;width:100%;height:100%}.slider>ul>li>*{font-size:14px}.toggle{position:relative;width:75px;height:28px;background-color:#eee;border:1px solid #bbb;border-radius:20px;box-shadow:inset 0 0 4px rgba(0,0,0,.1)}.toggle:before{position:absolute;right:13px;font-weight:bold;line-height:28px;color:#777;text-shadow:0 1px #fff;text-transform:uppercase;content:"Off"}.toggle-handle{position:absolute;top:-1px;left:-1px;z-index:2;width:28px;height:28px;background-color:#fff;background-image:-webkit-linear-gradient(top,#fff 0,#f2f2f2 100%);background-image:linear-gradient(to bottom,#fff 0,#f2f2f2 100%);border:1px solid rgba(0,0,0,.2);border-radius:100px;-webkit-transition:-webkit-transform .1s ease-in-out,border .1s ease-in-out;transition:transform .1s ease-in-out,border .1s ease-in-out}.toggle.active{background-color:#19a8e4;background-image:-webkit-linear-gradient(top,#088cd4 0,#19a8e4 100%);background-image:linear-gradient(to bottom,#088cd4 0,#19a8e4 100%);border:1px solid #096c9d;box-shadow:inset 0 0 15px rgba(255,255,255,.25)}.toggle.active .toggle-handle{border-color:#0a76ad;-webkit-transform:translate3d(48px,0,0);transform:translate3d(48px,0,0)}.toggle.active:before{right:auto;left:15px;color:#fff;text-shadow:0 -1px rgba(0,0,0,0.25);content:"On"}.content.fade{left:0;opacity:0;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.content.fade.in{opacity:1}.content.slide{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out}.content.slide.left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.content.slide.right{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)} \ No newline at end of file diff --git a/ajax/libs/ratchet/1.0.1/ratchet.min.js b/ajax/libs/ratchet/1.0.1/ratchet.min.js new file mode 100644 index 000000000..be8dcdcb7 --- /dev/null +++ b/ajax/libs/ratchet/1.0.1/ratchet.min.js @@ -0,0 +1 @@ +!function(){var findModals=function(target){var i;var modals=document.querySelectorAll("a");for(;target&&target!==document;target=target.parentNode){for(i=modals.length;i--;){if(modals[i]===target)return target}}};var getModal=function(event){var modalToggle=findModals(event.target);if(modalToggle&&modalToggle.hash)return document.querySelector(modalToggle.hash)};window.addEventListener("touchend",function(event){var modal=getModal(event);if(modal)modal.classList.toggle("active")})}();!function(){var popover;var findPopovers=function(target){var i,popovers=document.querySelectorAll("a");for(;target&&target!==document;target=target.parentNode){for(i=popovers.length;i--;){if(popovers[i]===target)return target}}};var onPopoverHidden=function(){document.body.removeChild(backdrop);popover.style.display="none";popover.removeEventListener("webkitTransitionEnd",onPopoverHidden)};var backdrop=function(){var element=document.createElement("div");element.classList.add("backdrop");element.addEventListener("touchend",function(){popover.addEventListener("webkitTransitionEnd",onPopoverHidden);popover.classList.remove("visible")});return element}();var getPopover=function(e){var anchor=findPopovers(e.target);if(!anchor||!anchor.hash)return;popover=document.querySelector(anchor.hash);if(!popover||!popover.classList.contains("popover"))return;return popover};window.addEventListener("touchend",function(e){var popover=getPopover(e);if(!popover)return;popover.style.display="block";popover.offsetHeight;popover.classList.add("visible");popover.parentNode.appendChild(backdrop)});window.addEventListener("click",function(e){if(getPopover(e))e.preventDefault()})}();!function(){var noop=function(){};var isScrolling;var maxCacheLength=20;var cacheMapping=sessionStorage;var domCache={};var transitionMap={"slide-in":"slide-out","slide-out":"slide-in",fade:"fade"};var bars={bartab:".bar-tab",bartitle:".bar-title",barfooter:".bar-footer",barheadersecondary:".bar-header-secondary"};var cacheReplace=function(data,updates){PUSH.id=data.id;if(updates)data=getCached(data.id);cacheMapping[data.id]=JSON.stringify(data);window.history.replaceState(data.id,data.title,data.url);domCache[data.id]=document.body.cloneNode(true)};var cachePush=function(){var id=PUSH.id;var cacheForwardStack=JSON.parse(cacheMapping.cacheForwardStack||"[]");var cacheBackStack=JSON.parse(cacheMapping.cacheBackStack||"[]");cacheBackStack.push(id);while(cacheForwardStack.length)delete cacheMapping[cacheForwardStack.shift()];while(cacheBackStack.length>maxCacheLength)delete cacheMapping[cacheBackStack.shift()];window.history.pushState(null,"",cacheMapping[PUSH.id].url);cacheMapping.cacheForwardStack=JSON.stringify(cacheForwardStack);cacheMapping.cacheBackStack=JSON.stringify(cacheBackStack)};var cachePop=function(id,direction){var forward=direction=="forward";var cacheForwardStack=JSON.parse(cacheMapping.cacheForwardStack||"[]");var cacheBackStack=JSON.parse(cacheMapping.cacheBackStack||"[]");var pushStack=forward?cacheBackStack:cacheForwardStack;var popStack=forward?cacheForwardStack:cacheBackStack;if(PUSH.id)pushStack.push(PUSH.id);popStack.pop();cacheMapping.cacheForwardStack=JSON.stringify(cacheForwardStack);cacheMapping.cacheBackStack=JSON.stringify(cacheBackStack)};var getCached=function(id){return JSON.parse(cacheMapping[id]||null)||{}};var getTarget=function(e){var target=findTarget(e.target);if(!target||e.which>1||e.metaKey||e.ctrlKey||isScrolling||location.protocol!==target.protocol||location.host!==target.host||!target.hash&&/#/.test(target.href)||target.hash&&target.href.replace(target.hash,"")===location.href.replace(location.hash,"")||target.getAttribute("data-ignore")=="push")return;return target};var touchend=function(e){var target=getTarget(e);if(!target)return;e.preventDefault();PUSH({url:target.href,hash:target.hash,timeout:target.getAttribute("data-timeout"),transition:target.getAttribute("data-transition")})};var popstate=function(e){var key;var barElement;var activeObj;var activeDom;var direction;var transition;var transitionFrom;var transitionFromObj;var id=e.state;if(!id||!cacheMapping[id])return;direction=PUSH.id]*>([\s\S.]*)<\/head>/i)[0];body.innerHTML=responseText.match(/]*>([\s\S.]*)<\/body>/i)[0]}else{head=body=document.createElement("div");head.innerHTML=responseText}data.title=head.querySelector("title");data.title=data.title&&data.title.innerText.trim();if(options.transition)data=extendWithDom(data,".content",body);else data.contents=body;return data};window.addEventListener("touchstart",function(){isScrolling=false});window.addEventListener("touchmove",function(){isScrolling=true});window.addEventListener("touchend",touchend);window.addEventListener("click",function(e){if(getTarget(e))e.preventDefault()});window.addEventListener("popstate",popstate)}();!function(){var getTarget=function(target){var i,popovers=document.querySelectorAll(".segmented-controller li a");for(;target&&target!==document;target=target.parentNode){for(i=popovers.length;i--;){if(popovers[i]===target)return target}}};window.addEventListener("touchend",function(e){var activeTab;var activeBody;var targetBody;var targetTab;var className="active";var classSelector="."+className;var targetAnchor=getTarget(e.target);if(!targetAnchor)return;targetTab=targetAnchor.parentNode;activeTab=targetTab.parentNode.querySelector(classSelector);if(activeTab)activeTab.classList.remove(className);targetTab.classList.add(className);if(!targetAnchor.hash)return;targetBody=document.querySelector(targetAnchor.hash);if(!targetBody)return;activeBody=targetBody.parentNode.querySelector(classSelector);if(activeBody)activeBody.classList.remove(className);targetBody.classList.add(className)});window.addEventListener("click",function(e){if(getTarget(e.target))e.preventDefault()})}();!function(){var pageX;var pageY;var slider;var deltaX;var deltaY;var offsetX;var lastSlide;var startTime;var resistance;var sliderWidth;var slideNumber;var isScrolling;var scrollableArea;var getSlider=function(target){var i,sliders=document.querySelectorAll(".slider ul");for(;target&&target!==document;target=target.parentNode){for(i=sliders.length;i--;){if(sliders[i]===target)return target}}};var getScroll=function(){var translate3d=slider.style.webkitTransform.match(/translate3d\(([^,]*)/);return parseInt(translate3d?translate3d[1]:0)};var setSlideNumber=function(offset){var round=offset?deltaX<0?"ceil":"floor":"round";slideNumber=Math[round](getScroll()/(scrollableArea/slider.children.length));slideNumber+=offset;slideNumber=Math.min(slideNumber,0);slideNumber=Math.max(-(slider.children.length-1),slideNumber)};var onTouchStart=function(e){slider=getSlider(e.target);if(!slider)return;var firstItem=slider.querySelector("li");scrollableArea=firstItem.offsetWidth*slider.children.length;isScrolling=undefined;sliderWidth=slider.offsetWidth;resistance=1;lastSlide=-(slider.children.length-1);startTime=+new Date;pageX=e.touches[0].pageX;pageY=e.touches[0].pageY;setSlideNumber(0);slider.style["-webkit-transition-duration"]=0};var onTouchMove=function(e){if(e.touches.length>1||!slider)return;deltaX=e.touches[0].pageX-pageX;deltaY=e.touches[0].pageY-pageY;pageX=e.touches[0].pageX;pageY=e.touches[0].pageY;if(typeof isScrolling=="undefined"){isScrolling=Math.abs(deltaY)>Math.abs(deltaX)}if(isScrolling)return;offsetX=deltaX/resistance+getScroll();e.preventDefault();resistance=slideNumber==0&&deltaX>0?pageX/sliderWidth+1.25:slideNumber==lastSlide&&deltaX<0?Math.abs(pageX)/sliderWidth+1.25:1;slider.style.webkitTransform="translate3d("+offsetX+"px,0,0)"};var onTouchEnd=function(e){if(!slider||isScrolling)return;setSlideNumber(+new Date-startTime<1e3&&Math.abs(deltaX)>15?deltaX<0?-1:1:0);offsetX=slideNumber*sliderWidth;slider.style["-webkit-transition-duration"]=".2s";slider.style.webkitTransform="translate3d("+offsetX+"px,0,0)";e=new CustomEvent("slide",{detail:{slideNumber:Math.abs(slideNumber)},bubbles:true,cancelable:true});slider.parentNode.dispatchEvent(e)};window.addEventListener("touchstart",onTouchStart);window.addEventListener("touchmove",onTouchMove);window.addEventListener("touchend",onTouchEnd)}();!function(){var start={};var touchMove=false;var distanceX=false;var toggle=false;var findToggle=function(target){var i,toggles=document.querySelectorAll(".toggle");for(;target&&target!==document;target=target.parentNode){for(i=toggles.length;i--;){if(toggles[i]===target)return target}}};window.addEventListener("touchstart",function(e){e=e.originalEvent||e;toggle=findToggle(e.target);if(!toggle)return;var handle=toggle.querySelector(".toggle-handle");var toggleWidth=toggle.offsetWidth;var handleWidth=handle.offsetWidth;var offset=toggle.classList.contains("active")?toggleWidth-handleWidth:0;start={pageX:e.touches[0].pageX-offset,pageY:e.touches[0].pageY};touchMove=false;toggle.style["-webkit-transition-duration"]=0});window.addEventListener("touchmove",function(e){e=e.originalEvent||e;if(e.touches.length>1)return;if(!toggle)return;var handle=toggle.querySelector(".toggle-handle");var current=e.touches[0];var toggleWidth=toggle.offsetWidth;var handleWidth=handle.offsetWidth;var offset=toggleWidth-handleWidth;touchMove=true;distanceX=current.pageX-start.pageX;if(Math.abs(distanceX)offset)return handle.style.webkitTransform="translate3d("+offset+"px,0,0)";handle.style.webkitTransform="translate3d("+distanceX+"px,0,0)";toggle.classList[distanceX>toggleWidth/2-handleWidth/2?"add":"remove"]("active")});window.addEventListener("touchend",function(e){if(!toggle)return;var handle=toggle.querySelector(".toggle-handle");var toggleWidth=toggle.offsetWidth;var handleWidth=handle.offsetWidth;var offset=toggleWidth-handleWidth;var slideOn=!touchMove&&!toggle.classList.contains("active")||touchMove&&distanceX>toggleWidth/2-handleWidth/2;if(slideOn)handle.style.webkitTransform="translate3d("+offset+"px,0,0)";else handle.style.webkitTransform="translate3d(0,0,0)";toggle.classList[slideOn?"add":"remove"]("active");e=new CustomEvent("toggle",{detail:{isActive:slideOn},bubbles:true,cancelable:true});toggle.dispatchEvent(e);touchMove=false;toggle=false})}(); \ No newline at end of file diff --git a/ajax/libs/ratchet/1.0.1/touch-icons/apple-touch-icon-114x114.png b/ajax/libs/ratchet/1.0.1/touch-icons/apple-touch-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..de146614ae8fd34e3dd9c9e81c34470841cac76e GIT binary patch literal 15538 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 YikCN)`0!V%f1MYqDQO`K6)gh(2YLI5nE(I) literal 0 HcmV?d00001 diff --git a/ajax/libs/ratchet/1.0.1/touch-icons/apple-touch-icon-72x72.png b/ajax/libs/ratchet/1.0.1/touch-icons/apple-touch-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..a214d69f05d4f22ebc1f0a524859739858f0e840 GIT binary patch literal 7362 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