├── _source ├── 404.html ├── sitemap.html ├── _layouts │ ├── post.html │ └── default.html ├── page1.html ├── page2.html ├── page3.html ├── _posts │ └── .gitignore ├── _includes │ ├── orbit.html │ ├── footer.html │ └── nav.html ├── robots.txt ├── assets │ ├── images │ │ └── foundation │ │ │ └── orbit │ │ │ ├── bullets.jpg │ │ │ ├── loading.gif │ │ │ ├── left-arrow.png │ │ │ ├── mask-black.png │ │ │ ├── pause-black.png │ │ │ ├── right-arrow.png │ │ │ ├── timer-black.png │ │ │ ├── rotator-black.png │ │ │ ├── left-arrow-small.png │ │ │ └── right-arrow-small.png │ └── js │ │ ├── app.js │ │ ├── modernizr.foundation.js │ │ └── zepto.js ├── humans.txt └── index.html ├── .gitignore ├── _config.yml ├── config.rb ├── sass ├── app.scss ├── _normalize.scss └── _settings.scss └── readme.md /_source/404.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_source/sitemap.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_source/_layouts/post.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .sass-cache -------------------------------------------------------------------------------- /_source/page1.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Page1 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /_source/page2.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Page2 4 | --- 5 | 6 |
To get started, see the readme.md file. View the source for this page to see how to split up the grid and position elements, or view the foundation documents
. 12 | 13 | 14 |Some Stuff
23 |Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugiat obcaecati eaque soluta rerum tempora molestias neque asperiores sit nulla error accusantium eveniet quia omnis impedit enim aspernatur sint ad earum.
28 |Even More Important Stuff
33 |etc...
47 | 48 | 49 | 50 | ### Includes ### 51 | 52 | If you're planning on reusing a few snippets of code on several pages, DRY (Don't Repeat Yourself)! Create an include HTML file and put it in the _includes/ directory. Kind of like a Rails helper. 53 | 54 | To call an include in a page, just write 55 | 56 | {% include yourincludename.html %} 57 | 58 | 59 | For an example of this, see _layouts/default.html -- I include the nav.html snippet on the default layout, meaning it displays on every page that uses that layout. 60 | 61 | 62 | ### Slideshows ### 63 | 64 | Foundation's Orbit code is ready to plug into your website; the javascript to trigger it can be found in _includes/orbit.html -- just include that on the page where you want a slideshow, and then add a div#slideshow with image tags inside: 65 | 66 |
68 |
69 |
70 | tags
207 |
208 | // $code-color: darken($alert-color, 15%);
209 | // $code-font-family: Consolas, 'Liberation Mono', Courier, monospace;
210 | // $code-font-weight: bold;
211 |
212 | // Style anchors
213 |
214 | // $anchor-text-decoration: none;
215 | // $anchor-font-color: $primary-color;
216 | // $anchor-font-color-hover: darken($primary-color, 5%);
217 |
218 | // Style the
element
219 |
220 | // $hr-border-width: 1px;
221 | // $hr-border-style: solid;
222 | // $hr-border-color: #ddd;
223 | // $hr-margin: emCalc(20);
224 |
225 | // Style lists
226 |
227 | // $list-style-position: outside;
228 | // $list-side-margin: 0;
229 | // $list-nested-margin: emCalc(20);
230 | // $definition-list-header-weight: bold;
231 | // $definition-list-header-margin-bottom: .3em;
232 | // $definition-list-margin-bottom: emCalc(12);
233 |
234 | // Style blockquotes
235 |
236 | // $blockquote-font-color: lighten($header-font-color, 30%);
237 | // $blockquote-padding: emCalc(9, 20, 0, 19);
238 | // $blockquote-border: 1px solid #ddd;
239 | // $blockquote-cite-font-size: emCalc(13);
240 | // $blockquote-cite-font-color: lighten($header-font-color, 20%);
241 | // $blockquote-cite-link-color: $blockquote-cite-font-color;
242 |
243 | // Acronym styles
244 |
245 | // $acronym-underline: 1px dotted #ddd;
246 |
247 | // Control padding and margin
248 |
249 | // $microformat-padding: emCalc(10, 12);
250 | // $microformat-margin: emCalc(0, 0, 20, 0);
251 |
252 | // Control the border styles
253 |
254 | // $microformat-border-width: 1px;
255 | // $microformat-border-style: solid;
256 | // $microformat-border-color: #ddd;
257 |
258 | // Control full name font styles
259 |
260 | // $microformat-fullname-font-weight: bold;
261 | // $microformat-fullname-font-size: emCalc(15);
262 |
263 | // Control the summary font styles
264 |
265 | // $microformat-summary-font-weight: bold;
266 |
267 | // Control abbr padding
268 | // $microformat-abbr-padding: emCalc(0, 1);
269 |
270 | // Control abbr font styles
271 |
272 | // $microformat-abbr-font-weight: bold;
273 | // $microformat-abbr-font-decoration: none;
274 |
275 | //
276 | // Form Variables
277 | //
278 |
279 | // We use this to set the base for lots of form spacing and positioning styles
280 |
281 | // $form-spacing: emCalc(16);
282 |
283 | // We use these to style the labels in different ways
284 |
285 | // $form-label-pointer: pointer;
286 | // $form-label-font-size: emCalc(14);
287 | // $form-label-font-weight: 500;
288 | // $form-label-font-color: lighten(#000, 30%);
289 | // $form-label-bottom-margin: emCalc(3);
290 | // $input-font-family: inherit;
291 | // $input-font-color: rgba(0,0,0,0.75);
292 | // $input-font-size: emCalc(14);
293 | // $input-bg-color: #fff;
294 | // $input-focus-bg-color: darken(#fff, 2%);
295 | // $input-border-color: darken(#fff, 20%);
296 | // $input-focus-border-color: darken(#fff, 40%);
297 | // $input-border-style: solid;
298 | // $input-border-width: 1px;
299 | // $input-disabled-bg: #ddd;
300 | // $input-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
301 | // $input-include-glowing-effect: true;
302 |
303 | // We use these to style the fieldset border and spacing.
304 |
305 | // $fieldset-border-style: solid;
306 | // $fieldset-border-width: 1px;
307 | // $fieldset-border-color: #ddd;
308 | // $fieldset-padding: emCalc(20);
309 | // $fieldset-margin: emCalc(18, 0);
310 |
311 | // We use these to style the legends when you use them
312 |
313 | // $legend-bg: #fff;
314 | // $legend-font-weight: bold;
315 | // $legend-padding: emCalc(0, 3);
316 |
317 | // We use these to style the prefix and postfix input elements
318 |
319 | // $input-prefix-bg: darken(#fff, 5%);
320 | // $input-prefix-border-color: darken(#fff, 20%);
321 | // $input-prefix-border-size: 1px;
322 | // $input-prefix-border-type: solid;
323 | // $input-prefix-overflow: hidden;
324 | // $input-prefix-font-color: #333;
325 | // $input-prefix-font-color-alt: #fff;
326 |
327 | // We use these to style the error states for inputs and labels
328 |
329 | // $input-error-message-padding: emCalc(6, 4);
330 | // $input-error-message-top: 0;
331 | // $input-error-message-font-size: emCalc(12);
332 | // $input-error-message-font-weight: bold;
333 | // $input-error-message-font-color: #fff;
334 | // $input-error-message-font-color-alt: #333;
335 |
336 | // We use this to style the glowing effect of inputs when focused
337 |
338 | // $glowing-effect-fade-time: 0.45s;
339 | // $glowing-effect-color: $input-focus-border-color;
340 |
341 | //
342 | // Button Variables
343 | //
344 |
345 | // We use these to build padding for buttons.
346 |
347 | // $button-med: emCalc(12);
348 | // $button-tny: emCalc(7);
349 | // $button-sml: emCalc(9);
350 | // $button-lrg: emCalc(16);
351 |
352 | // We use this to control the display property.
353 |
354 | // $button-display: inline-block;
355 | // $button-margin-bottom: emCalc(20);
356 |
357 | // We use these to control button text styles.
358 |
359 | // $button-font-family: inherit;
360 | // $button-font-color: #fff;
361 | // $button-font-color-alt: #333;
362 | // $button-font-med: emCalc(16);
363 | // $button-font-tny: emCalc(11);
364 | // $button-font-sml: emCalc(13);
365 | // $button-font-lrg: emCalc(20);
366 | // $button-font-weight: bold;
367 | // $button-font-align: center;
368 |
369 | // We use these to control various hover effects.
370 |
371 | // $button-function-factor: 10%;
372 |
373 | // We use these to control button border styles.
374 |
375 | // $button-border-width: 1px;
376 | // $button-border-style: solid;
377 |
378 | // We use this to set the default radius used throughout the core.
379 |
380 | // $button-radius: $global-radius;
381 | // $button-round: $global-rounded;
382 |
383 | // We use this to set default opacity for disabled buttons.
384 |
385 | // $button-disabled-opacity: 0.6;
386 |
387 | //
388 | // Button Groups
389 | //
390 |
391 | // Sets the margin for the right side by default, and the left margin if right-to-left direction is used
392 |
393 | // $button-bar-margin-opposite: emCalc(10);
394 |
395 | //
396 | // Dropdown Button Variables
397 | //
398 |
399 | // We use these to set the color of the pip in dropdown buttons
400 |
401 | // $dropdown-button-pip-color: #fff;
402 | // $dropdown-button-pip-color-alt: #333;
403 |
404 | // We use these to style tiny dropdown buttons
405 |
406 | // $dropdown-button-padding-tny: $button-tny * 5;
407 | // $dropdown-button-pip-size-tny: $button-tny;
408 | // $dropdown-button-pip-opposite-tny: $button-tny * 2;
409 | // $dropdown-button-pip-top-tny: -$button-tny / 2 + emCalc(1);
410 |
411 | // We use these to style small dropdown buttons
412 |
413 | // $dropdown-button-padding-sml: $button-sml * 5;
414 | // $dropdown-button-pip-size-sml: $button-sml;
415 | // $dropdown-button-pip-opposite-sml: $button-sml * 2;
416 | // $dropdown-button-pip-top-sml: -$button-sml / 2 + emCalc(1);
417 |
418 | // We use these to style medium dropdown buttons
419 |
420 | // $dropdown-button-padding-med: $button-med * 4 + emCalc(3);
421 | // $dropdown-button-pip-size-med: $button-med - emCalc(3);
422 | // $dropdown-button-pip-opposite-med: $button-med * 2;
423 | // $dropdown-button-pip-top-med: -$button-med / 2 + emCalc(2);
424 |
425 | // We use these to style large dropdown buttons
426 |
427 | // $dropdown-button-padding-lrg: $button-lrg * 4;
428 | // $dropdown-button-pip-size-lrg: $button-lrg - emCalc(6);
429 | // $dropdown-button-pip-opposite-lrg: $button-lrg + emCalc(12);
430 | // $dropdown-button-pip-top-lrg: -$button-lrg / 2 + emCalc(3);
431 |
432 | //
433 | // Split Button Variables
434 | //
435 |
436 | // We use these to control different shared styles for Split Buttons
437 |
438 | // $split-button-function-factor: 15%;
439 | // $split-button-pip-color: #fff;
440 | // $split-button-pip-color-alt: #333;
441 | // $split-button-active-bg-tint: rgba(0,0,0,0.1);
442 |
443 | // We use these to control tiny split buttons
444 |
445 | // $split-button-padding-tny: $button-tny * 9;
446 | // $split-button-span-width-tny: $button-tny * 6.5;
447 | // $split-button-pip-size-tny: $button-tny;
448 | // $split-button-pip-top-tny: $button-tny * 2;
449 | // $split-button-pip-default-float-tny: emCalc(-5);
450 |
451 | // We use these to control small split buttons
452 |
453 | // $split-button-padding-sml: $button-sml * 7;
454 | // $split-button-span-width-sml: $button-sml * 5;
455 | // $split-button-pip-size-sml: $button-sml;
456 | // $split-button-pip-top-sml: $button-sml * 1.5;
457 | // $split-button-pip-default-float-sml: emCalc(-9);
458 |
459 | // We use these to control medium split buttons
460 |
461 | // $split-button-padding-med: $button-med * 6.4;
462 | // $split-button-span-width-med: $button-med * 4;
463 | // $split-button-pip-size-med: $button-med - emCalc(3);
464 | // $split-button-pip-top-med: $button-med * 1.5;
465 | // $split-button-pip-default-float-med: emCalc(-9);
466 |
467 | // We use these to control large split buttons
468 |
469 | // $split-button-padding-lrg: $button-lrg * 6;
470 | // $split-button-span-width-lrg: $button-lrg * 3.75;
471 | // $split-button-pip-size-lrg: $button-lrg - emCalc(6);
472 | // $split-button-pip-top-lrg: $button-lrg + emCalc(5);
473 | // $split-button-pip-default-float-lrg: emCalc(-9);
474 |
475 | //
476 | // Alert Box Variables
477 | //
478 |
479 | // We use this to control alert padding.
480 |
481 | // $alert-padding-top: emCalc(11);
482 | // $alert-padding-default-float: $alert-padding-top;
483 | // $alert-padding-opposite-direction: $alert-padding-top + emCalc(10);
484 | // $alert-padding-bottom: $alert-padding-top + emCalc(1);
485 |
486 | // We use these to control text style.
487 |
488 | // $alert-font-weight: bold;
489 | // $alert-font-size: emCalc(14);
490 | // $alert-font-color: #fff;
491 | // $alert-font-color-alt: darken($secondary-color, 60%);
492 |
493 | // We use this for close hover effect.
494 |
495 | // $alert-function-factor: 10%;
496 |
497 | // We use these to control border styles.
498 |
499 | // $alert-border-style: solid;
500 | // $alert-border-width: 1px;
501 | // $alert-border-color: darken($primary-color, $alert-function-factor);
502 | // $alert-bottom-margin: emCalc(20);
503 |
504 | // We use these to style the close buttons
505 |
506 | // $alert-close-color: #333;
507 | // $alert-close-position: emCalc(5);
508 | // $alert-close-font-size: emCalc(22);
509 | // $alert-close-opacity: 0.3;
510 | // $alert-close-opacity-hover: 0.5;
511 | // $alert-close-padding: 5px 4px 4px;
512 |
513 | // We use this to control border radius
514 |
515 | // $alert-radius: $global-radius;
516 |
517 |
518 | //
519 | // Breadcrumb Variables
520 | //
521 |
522 | // We use this to set the background color for the breadcrumb container.
523 |
524 | // $crumb-bg: lighten($secondary-color, 5%);
525 |
526 | // We use these to set the padding around the breadcrumbs.
527 |
528 | // $crumb-padding: emCalc(9, 14, 9);
529 | // $crumb-side-padding: emCalc(12);
530 |
531 | // We use these to control border styles.
532 |
533 | // $crumb-function-factor: 10%;
534 | // $crumb-border-size: 1px;
535 | // $crumb-border-style: solid;
536 | // $crumb-border-color: darken($crumb-bg, $crumb-function-factor);
537 | // $crumb-radius: $global-radius;
538 |
539 | // We use these to set various text styles for breadcrumbs.
540 |
541 | // $crumb-font-size: emCalc(11);
542 | // $crumb-font-color: $primary-color;
543 | // $crumb-font-color-current: #333;
544 | // $crumb-font-color-unavailable: #999;
545 | // $crumb-font-transform: uppercase;
546 | // $crumb-link-decor: underline;
547 |
548 | // We use these to control the slash between breadcrumbs
549 |
550 | // $crumb-slash-color: #aaa;
551 | // $crumb-slash: "/";
552 |
553 | //
554 | // Clearing Variables
555 | //
556 |
557 | // We use these to set the background colors for parts of Clearing.
558 |
559 | // $clearing-bg: #111;
560 | // $clearing-caption-bg: $clearing-bg;
561 | // $clearing-carousel-bg: #111;
562 | // $clearing-img-bg: $clearing-bg;
563 |
564 | // We use these to style the close button
565 |
566 | // $clearing-close-color: #fff;
567 | // $clearing-close-size: 40px;
568 |
569 | // We use these to style the arrows
570 |
571 | // $clearing-arrow-size: 16px;
572 | // $clearing-arrow-color: $clearing-close-color;
573 |
574 | // We use these to style captions
575 |
576 | // $clearing-caption-font-color: #fff;
577 | // $clearing-caption-padding: 10px 30px;
578 |
579 | // We use these to make the image and carousel height and style
580 |
581 | // $clearing-active-img-height: 75%;
582 | // $clearing-carousel-height: 150px;
583 | // $clearing-carousel-thumb-width: 175px;
584 | // $clearing-carousel-thumb-active-border: 4px solid rgb(255,255,255);
585 |
586 | //
587 | // Custom Form Variables
588 | //
589 |
590 | // We use these to control the basic form styles input styles
591 |
592 | // $custom-form-border-color: #ccc;
593 | // $custom-form-border-size: 1px;
594 | // $custom-form-bg: #fff;
595 | // $custom-form-bg-disabled: #ddd;
596 | // $custom-form-input-size: 16px;
597 | // $custom-form-check-color: #222;
598 | // $custom-form-check-size: 16px;
599 | // $custom-form-radio-size: 8px;
600 | // $custom-form-checkbox-radius: 0px;
601 |
602 | // We use these to style the custom select form element.
603 |
604 | // $custom-select-bg: #fff;
605 | // $custom-select-fade-to-color: #f3f3f3;
606 | // $custom-select-border-color: #ddd;
607 | // $custom-select-triangle-color: #aaa;
608 | // $custom-select-triangle-color-open: #222;
609 | // $custom-select-height: emCalc(13) + ($form-spacing * 1.5);
610 | // $custom-select-margin-bottom: emCalc(20);
611 | // $custom-select-font-color-selected: #141414;
612 | // $custom-select-disabled-color: #888;
613 |
614 | // We use these to control the style of the custom select dropdown element.
615 |
616 | // $custom-dropdown-height: 200px;
617 | // $custom-dropdown-bg: #fff;
618 | // $custom-dropdown-border-color: darken(#fff, 20%);
619 | // $custom-dropdown-border-width: 1px;
620 | // $custom-dropdown-border-style: solid;
621 | // $custom-dropdown-font-color: #555;
622 | // $custom-dropdown-font-size: emCalc(14);
623 | // $custom-dropdown-color-selected: #eeeeee;
624 | // $custom-dropdown-font-color-selected: #000;
625 | // $custom-dropdown-shadow: 0 2px 2px 0px rgba(0,0,0,0.1);
626 | // $custom-dropdown-offset-top: auto;
627 | // $custom-dropdown-list-padding: emCalc(4);
628 | // $custom-dropdown-default-float-padding: emCalc(6);
629 | // $custom-dropdown-opposite-padding: emCalc(38);
630 | // $custom-dropdown-list-item-min-height: emCalc(24);
631 | // $custom-dropdown-width-small: 134px;
632 | // $custom-dropdown-width-medium: 254px;
633 | // $custom-dropdown-width-large: 434px;
634 |
635 | //
636 | // Dropdown Variables
637 | //
638 |
639 | // We use these to controls height and width styles.
640 |
641 | // $f-dropdown-max-width: 200px;
642 | // $f-dropdown-height: auto;
643 | // $f-dropdown-max-height: none;
644 | // $f-dropdown-margin-top: 2px;
645 |
646 | // We use this to control the background color
647 |
648 | // $f-dropdown-bg: #fff;
649 |
650 | // We use this to set the border styles for dropdowns.
651 |
652 | // $f-dropdown-border-style: solid;
653 | // $f-dropdown-border-width: 1px;
654 | // $f-dropdown-border-color: darken(#fff, 20%);
655 |
656 | // We use these to style the triangle pip.
657 |
658 | // $f-dropdown-triangle-size: 6px;
659 | // $f-dropdown-triangle-color: #fff;
660 | // $f-dropdown-triangle-side-offset: 10px;
661 |
662 | // We use these to control styles for the list elements.
663 |
664 | // $f-dropdown-list-style: none;
665 | // $f-dropdown-font-color: #555;
666 | // $f-dropdown-font-size: emCalc(14);
667 | // $f-dropdown-list-padding: emCalc(5, 10);
668 | // $f-dropdown-line-height: emCalc(18);
669 | // $f-dropdown-list-hover-bg: #eeeeee;
670 | // $dropdown-mobile-default-float: 0;
671 |
672 | // We use this to control the styles for when the dropdown has custom content.
673 |
674 | // $f-dropdown-content-padding: emCalc(20);
675 |
676 | //
677 | // Flex Video Variables
678 | //
679 |
680 | // We use these to control video container padding and margins
681 |
682 | // $flex-video-padding-top: emCalc(25);
683 | // $flex-video-padding-bottom: 67.5%;
684 | // $flex-video-margin-bottom: emCalc(16);
685 |
686 | // We use this to control widescreen bottom padding
687 |
688 | // $flex-video-widescreen-padding-bottom: 57.25%;
689 |
690 | //
691 | // Inline List Variables
692 | //
693 |
694 | // We use this to control the margins and padding of the inline list.
695 |
696 | // $inline-list-top-margin: 0;
697 | // $inline-list-opposite-margin: 0;
698 | // $inline-list-bottom-margin: emCalc(17);
699 | // $inline-list-default-float-margin: emCalc(-22);
700 |
701 | // $inline-list-padding: 0;
702 |
703 | // We use this to control the overflow of the inline list.
704 |
705 | // $inline-list-overflow: hidden;
706 |
707 | // We use this to control the list items
708 |
709 | // $inline-list-display: block;
710 |
711 | // We use this to control any elments within list items
712 |
713 | // $inline-list-children-display: block;
714 |
715 | //
716 | // Joyride Variables
717 | //
718 |
719 | // Controlling default Joyride styles
720 |
721 | // $joyride-tip-bg: rgb(0,0,0);
722 | // $joyride-tip-default-width: 300px;
723 | // $joyride-tip-padding: emCalc(18, 20, 24);
724 | // $joyride-tip-border: solid 1px #555;
725 | // $joyride-tip-radius: 4px;
726 | // $joyride-tip-position-offset: 22px;
727 |
728 | // Here, we're setting the tip dont styles
729 |
730 | // $joyride-tip-font-color: #fff;
731 | // $joyride-tip-font-size: emCalc(14);
732 | // $joyride-tip-header-weight: bold;
733 |
734 | // This changes the nub size
735 |
736 | // $joyride-tip-nub-size: 14px;
737 |
738 | // This adjusts the styles for the timer when its enabled
739 |
740 | // $joyride-tip-timer-width: 50px;
741 | // $joyride-tip-timer-height: 3px;
742 | // $joyride-tip-timer-color: #666;
743 |
744 | // This changes up the styles for the close button
745 |
746 | // $joyride-tip-close-color: #777;
747 | // $joyride-tip-close-size: 30px;
748 | // $joyride-tip-close-weight: normal;
749 |
750 | // When Joyride is filling the screen, we use this style for the bg
751 |
752 | // $joyride-screenfill: rgba(0,0,0,0.5);
753 |
754 | //
755 | // Keystroke Variables
756 | //
757 |
758 | // We use these to control text styles.
759 |
760 | // $keystroke-font: "Consolas", "Menlo", "Courier", monospace;
761 | // $keystroke-font-size: emCalc(14);
762 | // $keystroke-font-color: #222;
763 | // $keystroke-font-color-alt: #fff;
764 | // $keystroke-function-factor: 7%;
765 |
766 | // We use this to control keystroke padding.
767 |
768 | // $keystroke-padding: emCalc(2, 4, 0);
769 |
770 | // We use these to control background and border styles.
771 |
772 | // $keystroke-bg: darken(#fff, $keystroke-function-factor);
773 | // $keystroke-border-style: solid;
774 | // $keystroke-border-width: 1px;
775 | // $keystroke-border-color: darken($keystroke-bg, $keystroke-function-factor);
776 | // $keystroke-radius: $global-radius;
777 |
778 | //
779 | // Label Variables
780 | //
781 |
782 | // We use these to style the labels
783 |
784 | // $label-padding: emCalc(3, 10, 4);
785 | // $label-radius: $global-radius;
786 |
787 | // We use these to style the label text
788 |
789 | // $label-font-sizing: emCalc(14);
790 | // $label-font-weight: bold;
791 | // $label-font-color: #333;
792 | // $label-font-color-alt: #fff;
793 |
794 | //
795 | // Magellan Variables
796 | //
797 |
798 | // $magellan-bg: #fff;
799 | // $magellan-padding: 10px;
800 |
801 | //
802 | // Orbit Settings
803 | //
804 |
805 | // We use these to control the caption styles
806 |
807 | // $orbit-container-bg: #f5f5f5;
808 | // $orbit-caption-bg-old: rgb(0,0,0);
809 | // $orbit-caption-bg: rgba(0,0,0,0.6);
810 | // $orbit-caption-font-color: #fff;
811 |
812 | // We use these to control the left/right nav styles
813 |
814 | // $orbit-nav-bg-old: rgb(0,0,0);
815 | // $orbit-nav-bg: rgba(0,0,0,0.6);
816 |
817 | // We use these to control the timer styles
818 |
819 | // $orbit-timer-bg-old: rgb(0,0,0);
820 | // $orbit-timer-bg: rgba(0,0,0,0.6);
821 |
822 | // We use these to control the bullet nav styles
823 |
824 | // $orbit-bullet-nav-color: #999;
825 | // $orbit-bullet-nav-color-active: #555;
826 |
827 | // We use thes to controls the style of slide numbers
828 |
829 | // $orbit-slide-number-bg: rgba(0,0,0,0);
830 | // $orbit-slide-number-font-color: #fff;
831 | // $orbit-slide-number-padding: emCalc(5px);
832 |
833 | // Graceful Loading Wrapper and preloader
834 |
835 | // $wrapper-class: "slideshow-wrapper";
836 | // $preloader-class: "preloader";
837 |
838 | //
839 | // Pagination Variables
840 | //
841 |
842 | // We use these to control the pagination container
843 |
844 | // $pagination-height: emCalc(24);
845 | // $pagination-margin: emCalc(-5);
846 |
847 | // We use these to set the list-item properties
848 |
849 | // $pagination-li-float: $default-float;
850 | // $pagination-li-height: emCalc(24);
851 | // $pagination-li-font-color: #222;
852 | // $pagination-li-font-size: emCalc(14);
853 | // $pagination-li-margin: emCalc(5);
854 |
855 | // We use these for the pagination anchor links
856 |
857 | // $pagination-link-pad: emCalc(1, 7, 1);
858 | // $pagination-link-font-color: #999;
859 | // $pagination-link-active-bg: darken(#fff, 10%);
860 |
861 | // We use these for disabled anchor links
862 |
863 | // $pagination-link-unavailable-cursor: default;
864 | // $pagination-link-unavailable-font-color: #999;
865 | // $pagination-link-unavailable-bg-active: transparent;
866 |
867 | // We use these for currently selected anchor links
868 |
869 | // $pagination-link-current-background: $primary-color;
870 | // $pagination-link-current-font-color: #fff;
871 | // $pagination-link-current-font-weight: bold;
872 | // $pagination-link-current-cursor: default;
873 | // $pagination-link-current-active-bg: $primary-color;
874 |
875 | //
876 | // Panel Variables
877 | //
878 |
879 | // We use these to control the background and border styles
880 |
881 | // $panel-bg: darken(#fff, 5%);
882 | // $panel-border-style: solid;
883 | // $panel-border-size: 1px;
884 |
885 | // We use this % to control how much we darken things on hover
886 |
887 | // $panel-function-factor: 10%;
888 | // $panel-border-color: darken($panel-bg, $panel-function-factor);
889 |
890 | // We use these to set default inner padding and bottom margin
891 |
892 | // $panel-margin-bottom: emCalc(20);
893 | // $panel-padding: emCalc(20);
894 |
895 | // We use these to set default font colors
896 |
897 | // $panel-font-color: #333;
898 | // $panel-font-color-alt: #fff;
899 |
900 | // $panel-header-adjust: true;
901 |
902 | //
903 | // Pricing Table Variables
904 | //
905 |
906 | // We use this to control the border color
907 |
908 | // $price-table-border: solid 1px #ddd;
909 |
910 | // We use this to control the bottom margin of the pricing table
911 |
912 | // $price-table-margin-bottom: emCalc(20);
913 |
914 | // We use these to control the title styles
915 |
916 | // $price-title-bg: #ddd;
917 | // $price-title-padding: emCalc(15, 20);
918 | // $price-title-align: center;
919 | // $price-title-color: #333;
920 | // $price-title-weight: bold;
921 | // $price-title-size: emCalc(16);
922 |
923 | // We use these to control the price styles
924 |
925 | // $price-money-bg: #eee;
926 | // $price-money-padding: emCalc(15, 20);
927 | // $price-money-align: center;
928 | // $price-money-color: #333;
929 | // $price-money-weight: normal;
930 | // $price-money-size: emCalc(20);
931 |
932 | // We use these to control the description styles
933 |
934 | // $price-bg: #fff;
935 | // $price-desc-color: #777;
936 | // $price-desc-padding: emCalc(15);
937 | // $price-desc-align: center;
938 | // $price-desc-font-size: emCalc(12);
939 | // $price-desc-weight: normal;
940 | // $price-desc-line-height: 1.4;
941 | // $price-desc-bottom-border: dotted 1px #ddd;
942 |
943 | // We use these to control the list item styles
944 |
945 | // $price-item-color: #333;
946 | // $price-item-padding: emCalc(15);
947 | // $price-item-align: center;
948 | // $price-item-font-size: emCalc(14);
949 | // $price-item-weight: normal;
950 | // $price-item-bottom-border: dotted 1px #ddd;
951 |
952 | // We use these to control the CTA area styles
953 |
954 | // $price-cta-bg: #f5f5f5;
955 | // $price-cta-align: center;
956 | // $price-cta-padding: emCalc(20, 20, 0);
957 |
958 | //
959 | // Progress Bar Variables
960 | //
961 |
962 | // We use this to se the prog bar height
963 |
964 | // $progress-bar-height: emCalc(25);
965 | // $progress-bar-color: transparent;
966 |
967 | // We use these to control the border styles
968 |
969 | // $progress-bar-border-color: darken(#fff, 20%);
970 | // $progress-bar-border-size: 1px;
971 | // $progress-bar-border-style: solid;
972 | // $progress-bar-border-radius: $global-radius;
973 |
974 | // We use these to control the margin & padding
975 |
976 | // $progress-bar-pad: emCalc(2);
977 | // $progress-bar-margin-bottom: emCalc(10);
978 |
979 | // We use these to set the meter colors
980 |
981 | // $progress-meter-color: $primary-color;
982 | // $progress-meter-secondary-color: $secondary-color;
983 | // $progress-meter-success-color: $success-color;
984 | // $progress-meter-alert-color: $alert-color;
985 |
986 | //
987 | // Reveal Variables
988 | //
989 |
990 | // We use these to control the style of the reveal overlay.
991 |
992 | // $reveal-overlay-bg: rgba(#000, .45);
993 | // $reveal-overlay-bg-old: #000;
994 |
995 | // We use these to control the style of the modal itself.
996 |
997 | // $reveal-modal-bg: #fff;
998 | // $reveal-position-top: 50px;
999 | // $reveal-default-width: 80%;
1000 | // $reveal-modal-padding: emCalc(20);
1001 | // $reveal-box-shadow: 0 0 10px rgba(#000,.4);
1002 |
1003 | // We use these to style the reveal close button
1004 |
1005 | // $reveal-close-font-size: emCalc(22);
1006 | // $reveal-close-top: emCalc(8);
1007 | // $reveal-close-side: emCalc(11);
1008 | // $reveal-close-color: #aaa;
1009 | // $reveal-close-weight: bold;
1010 |
1011 | // We use these to control the modal border
1012 |
1013 | // $reveal-border-style: solid;
1014 | // $reveal-border-width: 1px;
1015 | // $reveal-border-color: #666;
1016 |
1017 | // $reveal-modal-class: "reveal-modal";
1018 | // $close-reveal-modal-class: "close-reveal-modal";
1019 |
1020 | //
1021 | // Section Variables
1022 | //
1023 |
1024 | // We use these to set padding and hover factor
1025 |
1026 | // $section-title-padding: emCalc(15);
1027 | // $section-content-padding: emCalc(15);
1028 | // $section-function-factor: 10%;
1029 |
1030 | // These style the titles
1031 |
1032 | // $section-title-color: #333;
1033 | // $section-title-color-active: #333;
1034 | // $section-title-bg: #efefef;
1035 | // $section-title-bg-active: darken($section-title-bg, $section-function-factor);
1036 | // $section-title-bg-active-tabs: #fff;
1037 | // $section-title-bg-hover: darken($section-title-bg, $section-function-factor / 2);
1038 |
1039 | // Want to control border size, here ya go!
1040 |
1041 | // $section-border-size: 1px;
1042 | // $section-border-style: solid;
1043 | // $section-border-color: #ccc;
1044 |
1045 | // Font controls
1046 |
1047 | // $section-font-size: emCalc(14);
1048 |
1049 | // Control the color of the background and some size options
1050 |
1051 | // $section-content-bg: #fff;
1052 | // $section-vertical-nav-min-width: emCalc(200);
1053 | // $section-vertical-tabs-title-width: emCalc(200);
1054 | // $section-bottom-margin: emCalc(20);
1055 |
1056 | // $title-selector: ".title";
1057 | // $content-selector: ".content";
1058 | // $active-region-selector: ".active";
1059 |
1060 | //
1061 | // Side Nav Variables
1062 | //
1063 |
1064 | // We use this to control padding.
1065 |
1066 | // $side-nav-padding: emCalc(14, 0);
1067 |
1068 | // We use these to control list styles.
1069 |
1070 | // $side-nav-list-type: none;
1071 | // $side-nav-list-position: inside;
1072 | // $side-nav-list-margin: emCalc(0, 0, 7, 0);
1073 |
1074 | // We use these to control link styles.
1075 |
1076 | // $side-nav-link-color: $primary-color;
1077 | // $side-nav-link-color-active: lighten(#000, 30%);
1078 | // $side-nav-font-size: emCalc(14);
1079 | // $side-nav-font-weight: bold;
1080 |
1081 | // We use these to control border styles
1082 |
1083 | // $side-nav-divider-size: 1px;
1084 | // $side-nav-divider-style: solid;
1085 | // $side-nav-divider-color: darken(#fff, 10%);
1086 |
1087 | //
1088 | // Sub Nav Variables
1089 | //
1090 |
1091 | // We use these to control margin and padding
1092 |
1093 | // $sub-nav-list-margin: emCalc(-4, 0, 18);
1094 | // $sub-nav-list-padding-top: emCalc(4);
1095 |
1096 | // We use this to control the definition
1097 |
1098 | // $sub-nav-font-size: emCalc(14);
1099 | // $sub-nav-font-color: #999;
1100 | // $sub-nav-font-weight: normal;
1101 | // $sub-nav-text-decoration: none;
1102 | // $sub-nav-border-radius: 1000px;
1103 |
1104 | // We use these to control the active item styles
1105 |
1106 | // $sub-nav-active-font-weight: bold;
1107 | // $sub-nav-active-bg: $primary-color;
1108 | // $sub-nav-active-color: #fff;
1109 | // $sub-nav-active-padding: emCalc(3, 9);
1110 | // $sub-nav-active-cursor: default;
1111 |
1112 | //
1113 | // Switch Variables
1114 | //
1115 |
1116 | // Controlling border styles and background colors for the switch container
1117 |
1118 | // $switch-border-color: darken(#fff, 20%);
1119 | // $switch-border-style: solid;
1120 | // $switch-border-width: 1px;
1121 | // $switch-bg: #fff;
1122 |
1123 | // We use these to control the switch heights for our default classes
1124 |
1125 | // $switch-height-tny: 22px;
1126 | // $switch-height-sml: 28px;
1127 | // $switch-height-med: 36px;
1128 | // $switch-height-lrg: 44px;
1129 | // $switch-bottom-margin: emCalc(20);
1130 |
1131 | // We use these to control default font sizes for our classes.
1132 |
1133 | // $switch-font-size-tny: 11px;
1134 | // $switch-font-size-sml: 12px;
1135 | // $switch-font-size-med: 14px;
1136 | // $switch-font-size-lrg: 17px;
1137 | // $switch-label-side-padding: 6px;
1138 |
1139 | // We use these to style the switch-paddle
1140 |
1141 | // $switch-paddle-bg: #fff;
1142 | // $switch-paddle-fade-to-color: darken($switch-paddle-bg, 10%);
1143 | // $switch-paddle-border-color: darken($switch-paddle-bg, 35%);
1144 | // $switch-paddle-border-width: 1px;
1145 | // $switch-paddle-border-style: solid;
1146 | // $switch-paddle-transition-speed: .1s;
1147 | // $switch-paddle-transition-ease: ease-out;
1148 | // $switch-positive-color: lighten($success-color, 50%);
1149 | // $switch-negative-color: #f5f5f5;
1150 |
1151 | // Outline Style for tabbing through switches
1152 |
1153 | // $switch-label-outline: 1px dotted #888;
1154 |
1155 | //
1156 | // Table Variables
1157 | //
1158 |
1159 | // These control the background color for the table and even rows
1160 |
1161 | // $table-bg: #fff;
1162 | // $table-even-row-bg: #f9f9f9;
1163 |
1164 | // These control the table cell border style
1165 |
1166 | // $table-border-style: solid;
1167 | // $table-border-size: 1px;
1168 | // $table-border-color: #ddd;
1169 |
1170 | // These control the table head styles
1171 |
1172 | // $table-head-bg: #f5f5f5;
1173 | // $table-head-font-size: emCalc(14);
1174 | // $table-head-font-color: #222;
1175 | // $table-head-font-weight: bold;
1176 | // $table-head-padding: emCalc(8, 10, 10);
1177 |
1178 | // These control the row padding and font styles
1179 |
1180 | // $table-row-padding: emCalc(9, 10);
1181 | // $table-row-font-size: emCalc(14);
1182 | // $table-row-font-color: #222;
1183 | // $table-line-height: emCalc(18);
1184 |
1185 | // These are for controlling the display and margin of tables
1186 |
1187 | // $table-display: table-cell;
1188 | // $table-margin-bottom: emCalc(20);
1189 |
1190 | //
1191 | // Image Thumbnail Variables
1192 | //
1193 |
1194 | // We use these to control border styles
1195 |
1196 | // $thumb-border-style: solid;
1197 | // $thumb-border-width: 4px;
1198 | // $thumb-border-color: #fff;
1199 | // $thumb-box-shadow: 0 0 0 1px rgba(#000,.2);
1200 | // $thumb-box-shadow-hover: 0 0 6px 1px rgba($primary-color,0.5);
1201 |
1202 | // Radius and transition speed for thumbs
1203 |
1204 | // $thumb-radius: $global-radius;
1205 | // $thumb-transition-speed: 200ms;
1206 |
1207 | //
1208 | // Tooltip Variables
1209 | //
1210 |
1211 | // $has-tip-border-bottom: dotted 1px #ccc;
1212 | // $has-tip-font-weight: bold;
1213 | // $has-tip-font-color: #333;
1214 | // $has-tip-border-bottom-hover: dotted 1px darken($primary-color, 20%);
1215 | // $has-tip-font-color-hover: $primary-color;
1216 | // $has-tip-cursor-type: help;
1217 |
1218 | // $tooltip-padding: emCalc(8);
1219 | // $tooltip-bg: #000;
1220 | // $tooltip-font-size: emCalc(15);
1221 | // $tooltip-font-weight: bold;
1222 | // $tooltip-font-color: #fff;
1223 | // $tooltip-line-height: 1.3;
1224 | // $tooltip-close-font-size: emCalc(10);
1225 | // $tooltip-close-font-weight: normal;
1226 | // $tooltip-close-font-color: #888;
1227 | // $tooltip-font-size-sml: emCalc(14);
1228 | // $tooltip-radius: $global-radius;
1229 | // $tooltip-pip-size: 5px;
1230 |
1231 | //
1232 | // Top Bar Variables
1233 | //
1234 |
1235 | // Background color for the top bar
1236 |
1237 | // $topbar-bg: #111;
1238 |
1239 | // Height and margin
1240 |
1241 | // $topbar-height: 45px;
1242 | // $topbar-margin-bottom: emCalc(30);
1243 |
1244 | // Control Input height for top bar
1245 |
1246 | // $topbar-input-height: 2.45em;
1247 |
1248 | // Controlling the styles for the title in the top bar
1249 |
1250 | // $topbar-title-weight: bold;
1251 | // $topbar-title-font-size: emCalc(17);
1252 |
1253 | // Style the top bar dropdown elements
1254 |
1255 | // $topbar-dropdown-bg: #222;
1256 | // $topbar-dropdown-link-color: #fff;
1257 | // $topbar-dropdown-link-bg: lighten($topbar-bg, 5%);
1258 | // $topbar-dropdown-toggle-size: 5px;
1259 | // $topbar-dropdown-toggle-color: #fff;
1260 | // $topbar-dropdown-toggle-alpha: 0.5;
1261 |
1262 | // Set the link colors and styles for top-level nav
1263 |
1264 | // $topbar-link-color: #fff;
1265 | // $topbar-link-color-hover: #fff;
1266 | // $topbar-link-color-active: #fff;
1267 | // $topbar-link-weight: bold;
1268 | // $topbar-link-font-size: emCalc(13);
1269 | // $topbar-link-hover-lightness: -30%; // Darken by 30%
1270 | // $topbar-link-bg-hover: darken($topbar-bg, 3%);
1271 | // $topbar-link-bg-active: darken($topbar-bg, 3%);
1272 |
1273 | // $topbar-dropdown-label-color: #555;
1274 | // $topbar-dropdown-label-text-transform: uppercase;
1275 | // $topbar-dropdown-label-font-weight: bold;
1276 | // $topbar-dropdown-label-font-size: emCalc(10);
1277 |
1278 | // Top menu icon styles
1279 |
1280 | // $topbar-menu-link-transform: uppercase;
1281 | // $topbar-menu-link-font-size: emCalc(13);
1282 | // $topbar-menu-link-weight: bold;
1283 | // $topbar-menu-link-color: #fff;
1284 | // $topbar-menu-icon-color: #fff;
1285 | // $topbar-menu-link-color-toggled: #888;
1286 | // $topbar-menu-icon-color-toggled: #888;
1287 |
1288 | // Transitions and breakpoint styles
1289 |
1290 | // $topbar-transition-speed: 300ms;
1291 | // $topbar-breakpoint: emCalc(940); // Change to 9999px for always mobile layout
1292 | // $topbar-media-query: "only screen and (min-width: #{$topbar-breakpoint})";
1293 |
1294 | // Divider Styles
1295 |
1296 | // $topbar-divider-border-bottom: solid 1px lighten($topbar-bg, 10%);
1297 | // $topbar-divider-border-top: solid 1px darken($topbar-bg, 10%);
1298 |
1299 | // Sticky Class
1300 |
1301 | // $topbar-sticky-class: ".sticky";
1302 |
--------------------------------------------------------------------------------
/_source/assets/js/zepto.js:
--------------------------------------------------------------------------------
1 | /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */
2 |
3 |
4 | ;(function(undefined){
5 | if (String.prototype.trim === undefined) // fix for iOS 3.2
6 | String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, '') }
7 |
8 | // For iOS 3.x
9 | // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce
10 | if (Array.prototype.reduce === undefined)
11 | Array.prototype.reduce = function(fun){
12 | if(this === void 0 || this === null) throw new TypeError()
13 | var t = Object(this), len = t.length >>> 0, k = 0, accumulator
14 | if(typeof fun != 'function') throw new TypeError()
15 | if(len == 0 && arguments.length == 1) throw new TypeError()
16 |
17 | if(arguments.length >= 2)
18 | accumulator = arguments[1]
19 | else
20 | do{
21 | if(k in t){
22 | accumulator = t[k++]
23 | break
24 | }
25 | if(++k >= len) throw new TypeError()
26 | } while (true)
27 |
28 | while (k < len){
29 | if(k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t)
30 | k++
31 | }
32 | return accumulator
33 | }
34 |
35 | })()
36 |
37 | var Zepto = (function() {
38 | var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter,
39 | document = window.document,
40 | elementDisplay = {}, classCache = {},
41 | getComputedStyle = document.defaultView.getComputedStyle,
42 | cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },
43 | fragmentRE = /^\s*<(\w+|!)[^>]*>/,
44 | tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
45 | rootNodeRE = /^(?:body|html)$/i,
46 |
47 | // special attributes that should be get/set via method calls
48 | methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],
49 |
50 | adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],
51 | table = document.createElement('table'),
52 | tableRow = document.createElement('tr'),
53 | containers = {
54 | 'tr': document.createElement('tbody'),
55 | 'tbody': table, 'thead': table, 'tfoot': table,
56 | 'td': tableRow, 'th': tableRow,
57 | '*': document.createElement('div')
58 | },
59 | readyRE = /complete|loaded|interactive/,
60 | classSelectorRE = /^\.([\w-]+)$/,
61 | idSelectorRE = /^#([\w-]*)$/,
62 | tagSelectorRE = /^[\w-]+$/,
63 | class2type = {},
64 | toString = class2type.toString,
65 | zepto = {},
66 | camelize, uniq,
67 | tempParent = document.createElement('div')
68 |
69 | zepto.matches = function(element, selector) {
70 | if (!element || element.nodeType !== 1) return false
71 | var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
72 | element.oMatchesSelector || element.matchesSelector
73 | if (matchesSelector) return matchesSelector.call(element, selector)
74 | // fall back to performing a selector:
75 | var match, parent = element.parentNode, temp = !parent
76 | if (temp) (parent = tempParent).appendChild(element)
77 | match = ~zepto.qsa(parent, selector).indexOf(element)
78 | temp && tempParent.removeChild(element)
79 | return match
80 | }
81 |
82 | function type(obj) {
83 | return obj == null ? String(obj) :
84 | class2type[toString.call(obj)] || "object"
85 | }
86 |
87 | function isFunction(value) { return type(value) == "function" }
88 | function isWindow(obj) { return obj != null && obj == obj.window }
89 | function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }
90 | function isObject(obj) { return type(obj) == "object" }
91 | function isPlainObject(obj) {
92 | return isObject(obj) && !isWindow(obj) && obj.__proto__ == Object.prototype
93 | }
94 | function isArray(value) { return value instanceof Array }
95 | function likeArray(obj) { return typeof obj.length == 'number' }
96 |
97 | function compact(array) { return filter.call(array, function(item){ return item != null }) }
98 | function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }
99 | camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }
100 | function dasherize(str) {
101 | return str.replace(/::/g, '/')
102 | .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
103 | .replace(/([a-z\d])([A-Z])/g, '$1_$2')
104 | .replace(/_/g, '-')
105 | .toLowerCase()
106 | }
107 | uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }
108 |
109 | function classRE(name) {
110 | return name in classCache ?
111 | classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)'))
112 | }
113 |
114 | function maybeAddPx(name, value) {
115 | return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value
116 | }
117 |
118 | function defaultDisplay(nodeName) {
119 | var element, display
120 | if (!elementDisplay[nodeName]) {
121 | element = document.createElement(nodeName)
122 | document.body.appendChild(element)
123 | display = getComputedStyle(element, '').getPropertyValue("display")
124 | element.parentNode.removeChild(element)
125 | display == "none" && (display = "block")
126 | elementDisplay[nodeName] = display
127 | }
128 | return elementDisplay[nodeName]
129 | }
130 |
131 | function children(element) {
132 | return 'children' in element ?
133 | slice.call(element.children) :
134 | $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })
135 | }
136 |
137 | // `$.zepto.fragment` takes a html string and an optional tag name
138 | // to generate DOM nodes nodes from the given html string.
139 | // The generated DOM nodes are returned as an array.
140 | // This function can be overriden in plugins for example to make
141 | // it compatible with browsers that don't support the DOM fully.
142 | zepto.fragment = function(html, name, properties) {
143 | if (html.replace) html = html.replace(tagExpanderRE, "<$1>$2>")
144 | if (name === undefined) name = fragmentRE.test(html) && RegExp.$1
145 | if (!(name in containers)) name = '*'
146 |
147 | var nodes, dom, container = containers[name]
148 | container.innerHTML = '' + html
149 | dom = $.each(slice.call(container.childNodes), function(){
150 | container.removeChild(this)
151 | })
152 | if (isPlainObject(properties)) {
153 | nodes = $(dom)
154 | $.each(properties, function(key, value) {
155 | if (methodAttributes.indexOf(key) > -1) nodes[key](value)
156 | else nodes.attr(key, value)
157 | })
158 | }
159 | return dom
160 | }
161 |
162 | // `$.zepto.Z` swaps out the prototype of the given `dom` array
163 | // of nodes with `$.fn` and thus supplying all the Zepto functions
164 | // to the array. Note that `__proto__` is not supported on Internet
165 | // Explorer. This method can be overriden in plugins.
166 | zepto.Z = function(dom, selector) {
167 | dom = dom || []
168 | dom.__proto__ = $.fn
169 | dom.selector = selector || ''
170 | return dom
171 | }
172 |
173 | // `$.zepto.isZ` should return `true` if the given object is a Zepto
174 | // collection. This method can be overriden in plugins.
175 | zepto.isZ = function(object) {
176 | return object instanceof zepto.Z
177 | }
178 |
179 | // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and
180 | // takes a CSS selector and an optional context (and handles various
181 | // special cases).
182 | // This method can be overriden in plugins.
183 | zepto.init = function(selector, context) {
184 | // If nothing given, return an empty Zepto collection
185 | if (!selector) return zepto.Z()
186 | // If a function is given, call it when the DOM is ready
187 | else if (isFunction(selector)) return $(document).ready(selector)
188 | // If a Zepto collection is given, juts return it
189 | else if (zepto.isZ(selector)) return selector
190 | else {
191 | var dom
192 | // normalize array if an array of nodes is given
193 | if (isArray(selector)) dom = compact(selector)
194 | // Wrap DOM nodes. If a plain object is given, duplicate it.
195 | else if (isObject(selector))
196 | dom = [isPlainObject(selector) ? $.extend({}, selector) : selector], selector = null
197 | // If it's a html fragment, create nodes from it
198 | else if (fragmentRE.test(selector))
199 | dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null
200 | // If there's a context, create a collection on that context first, and select
201 | // nodes from there
202 | else if (context !== undefined) return $(context).find(selector)
203 | // And last but no least, if it's a CSS selector, use it to select nodes.
204 | else dom = zepto.qsa(document, selector)
205 | // create a new Zepto collection from the nodes found
206 | return zepto.Z(dom, selector)
207 | }
208 | }
209 |
210 | // `$` will be the base `Zepto` object. When calling this
211 | // function just call `$.zepto.init, which makes the implementation
212 | // details of selecting nodes and creating Zepto collections
213 | // patchable in plugins.
214 | $ = function(selector, context){
215 | return zepto.init(selector, context)
216 | }
217 |
218 | function extend(target, source, deep) {
219 | for (key in source)
220 | if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
221 | if (isPlainObject(source[key]) && !isPlainObject(target[key]))
222 | target[key] = {}
223 | if (isArray(source[key]) && !isArray(target[key]))
224 | target[key] = []
225 | extend(target[key], source[key], deep)
226 | }
227 | else if (source[key] !== undefined) target[key] = source[key]
228 | }
229 |
230 | // Copy all but undefined properties from one or more
231 | // objects to the `target` object.
232 | $.extend = function(target){
233 | var deep, args = slice.call(arguments, 1)
234 | if (typeof target == 'boolean') {
235 | deep = target
236 | target = args.shift()
237 | }
238 | args.forEach(function(arg){ extend(target, arg, deep) })
239 | return target
240 | }
241 |
242 | // `$.zepto.qsa` is Zepto's CSS selector implementation which
243 | // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.
244 | // This method can be overriden in plugins.
245 | zepto.qsa = function(element, selector){
246 | var found
247 | return (isDocument(element) && idSelectorRE.test(selector)) ?
248 | ( (found = element.getElementById(RegExp.$1)) ? [found] : [] ) :
249 | (element.nodeType !== 1 && element.nodeType !== 9) ? [] :
250 | slice.call(
251 | classSelectorRE.test(selector) ? element.getElementsByClassName(RegExp.$1) :
252 | tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) :
253 | element.querySelectorAll(selector)
254 | )
255 | }
256 |
257 | function filtered(nodes, selector) {
258 | return selector === undefined ? $(nodes) : $(nodes).filter(selector)
259 | }
260 |
261 | $.contains = function(parent, node) {
262 | return parent !== node && parent.contains(node)
263 | }
264 |
265 | function funcArg(context, arg, idx, payload) {
266 | return isFunction(arg) ? arg.call(context, idx, payload) : arg
267 | }
268 |
269 | function setAttribute(node, name, value) {
270 | value == null ? node.removeAttribute(name) : node.setAttribute(name, value)
271 | }
272 |
273 | // access className property while respecting SVGAnimatedString
274 | function className(node, value){
275 | var klass = node.className,
276 | svg = klass && klass.baseVal !== undefined
277 |
278 | if (value === undefined) return svg ? klass.baseVal : klass
279 | svg ? (klass.baseVal = value) : (node.className = value)
280 | }
281 |
282 | // "true" => true
283 | // "false" => false
284 | // "null" => null
285 | // "42" => 42
286 | // "42.5" => 42.5
287 | // JSON => parse if valid
288 | // String => self
289 | function deserializeValue(value) {
290 | var num
291 | try {
292 | return value ?
293 | value == "true" ||
294 | ( value == "false" ? false :
295 | value == "null" ? null :
296 | !isNaN(num = Number(value)) ? num :
297 | /^[\[\{]/.test(value) ? $.parseJSON(value) :
298 | value )
299 | : value
300 | } catch(e) {
301 | return value
302 | }
303 | }
304 |
305 | $.type = type
306 | $.isFunction = isFunction
307 | $.isWindow = isWindow
308 | $.isArray = isArray
309 | $.isPlainObject = isPlainObject
310 |
311 | $.isEmptyObject = function(obj) {
312 | var name
313 | for (name in obj) return false
314 | return true
315 | }
316 |
317 | $.inArray = function(elem, array, i){
318 | return emptyArray.indexOf.call(array, elem, i)
319 | }
320 |
321 | $.camelCase = camelize
322 | $.trim = function(str) { return str.trim() }
323 |
324 | // plugin compatibility
325 | $.uuid = 0
326 | $.support = { }
327 | $.expr = { }
328 |
329 | $.map = function(elements, callback){
330 | var value, values = [], i, key
331 | if (likeArray(elements))
332 | for (i = 0; i < elements.length; i++) {
333 | value = callback(elements[i], i)
334 | if (value != null) values.push(value)
335 | }
336 | else
337 | for (key in elements) {
338 | value = callback(elements[key], key)
339 | if (value != null) values.push(value)
340 | }
341 | return flatten(values)
342 | }
343 |
344 | $.each = function(elements, callback){
345 | var i, key
346 | if (likeArray(elements)) {
347 | for (i = 0; i < elements.length; i++)
348 | if (callback.call(elements[i], i, elements[i]) === false) return elements
349 | } else {
350 | for (key in elements)
351 | if (callback.call(elements[key], key, elements[key]) === false) return elements
352 | }
353 |
354 | return elements
355 | }
356 |
357 | $.grep = function(elements, callback){
358 | return filter.call(elements, callback)
359 | }
360 |
361 | if (window.JSON) $.parseJSON = JSON.parse
362 |
363 | // Populate the class2type map
364 | $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
365 | class2type[ "[object " + name + "]" ] = name.toLowerCase()
366 | })
367 |
368 | // Define methods that will be available on all
369 | // Zepto collections
370 | $.fn = {
371 | // Because a collection acts like an array
372 | // copy over these useful array functions.
373 | forEach: emptyArray.forEach,
374 | reduce: emptyArray.reduce,
375 | push: emptyArray.push,
376 | sort: emptyArray.sort,
377 | indexOf: emptyArray.indexOf,
378 | concat: emptyArray.concat,
379 |
380 | // `map` and `slice` in the jQuery API work differently
381 | // from their array counterparts
382 | map: function(fn){
383 | return $($.map(this, function(el, i){ return fn.call(el, i, el) }))
384 | },
385 | slice: function(){
386 | return $(slice.apply(this, arguments))
387 | },
388 |
389 | ready: function(callback){
390 | if (readyRE.test(document.readyState)) callback($)
391 | else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
392 | return this
393 | },
394 | get: function(idx){
395 | return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]
396 | },
397 | toArray: function(){ return this.get() },
398 | size: function(){
399 | return this.length
400 | },
401 | remove: function(){
402 | return this.each(function(){
403 | if (this.parentNode != null)
404 | this.parentNode.removeChild(this)
405 | })
406 | },
407 | each: function(callback){
408 | emptyArray.every.call(this, function(el, idx){
409 | return callback.call(el, idx, el) !== false
410 | })
411 | return this
412 | },
413 | filter: function(selector){
414 | if (isFunction(selector)) return this.not(this.not(selector))
415 | return $(filter.call(this, function(element){
416 | return zepto.matches(element, selector)
417 | }))
418 | },
419 | add: function(selector,context){
420 | return $(uniq(this.concat($(selector,context))))
421 | },
422 | is: function(selector){
423 | return this.length > 0 && zepto.matches(this[0], selector)
424 | },
425 | not: function(selector){
426 | var nodes=[]
427 | if (isFunction(selector) && selector.call !== undefined)
428 | this.each(function(idx){
429 | if (!selector.call(this,idx)) nodes.push(this)
430 | })
431 | else {
432 | var excludes = typeof selector == 'string' ? this.filter(selector) :
433 | (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)
434 | this.forEach(function(el){
435 | if (excludes.indexOf(el) < 0) nodes.push(el)
436 | })
437 | }
438 | return $(nodes)
439 | },
440 | has: function(selector){
441 | return this.filter(function(){
442 | return isObject(selector) ?
443 | $.contains(this, selector) :
444 | $(this).find(selector).size()
445 | })
446 | },
447 | eq: function(idx){
448 | return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)
449 | },
450 | first: function(){
451 | var el = this[0]
452 | return el && !isObject(el) ? el : $(el)
453 | },
454 | last: function(){
455 | var el = this[this.length - 1]
456 | return el && !isObject(el) ? el : $(el)
457 | },
458 | find: function(selector){
459 | var result, $this = this
460 | if (typeof selector == 'object')
461 | result = $(selector).filter(function(){
462 | var node = this
463 | return emptyArray.some.call($this, function(parent){
464 | return $.contains(parent, node)
465 | })
466 | })
467 | else if (this.length == 1) result = $(zepto.qsa(this[0], selector))
468 | else result = this.map(function(){ return zepto.qsa(this, selector) })
469 | return result
470 | },
471 | closest: function(selector, context){
472 | var node = this[0], collection = false
473 | if (typeof selector == 'object') collection = $(selector)
474 | while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))
475 | node = node !== context && !isDocument(node) && node.parentNode
476 | return $(node)
477 | },
478 | parents: function(selector){
479 | var ancestors = [], nodes = this
480 | while (nodes.length > 0)
481 | nodes = $.map(nodes, function(node){
482 | if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {
483 | ancestors.push(node)
484 | return node
485 | }
486 | })
487 | return filtered(ancestors, selector)
488 | },
489 | parent: function(selector){
490 | return filtered(uniq(this.pluck('parentNode')), selector)
491 | },
492 | children: function(selector){
493 | return filtered(this.map(function(){ return children(this) }), selector)
494 | },
495 | contents: function() {
496 | return this.map(function() { return slice.call(this.childNodes) })
497 | },
498 | siblings: function(selector){
499 | return filtered(this.map(function(i, el){
500 | return filter.call(children(el.parentNode), function(child){ return child!==el })
501 | }), selector)
502 | },
503 | empty: function(){
504 | return this.each(function(){ this.innerHTML = '' })
505 | },
506 | // `pluck` is borrowed from Prototype.js
507 | pluck: function(property){
508 | return $.map(this, function(el){ return el[property] })
509 | },
510 | show: function(){
511 | return this.each(function(){
512 | this.style.display == "none" && (this.style.display = null)
513 | if (getComputedStyle(this, '').getPropertyValue("display") == "none")
514 | this.style.display = defaultDisplay(this.nodeName)
515 | })
516 | },
517 | replaceWith: function(newContent){
518 | return this.before(newContent).remove()
519 | },
520 | wrap: function(structure){
521 | var func = isFunction(structure)
522 | if (this[0] && !func)
523 | var dom = $(structure).get(0),
524 | clone = dom.parentNode || this.length > 1
525 |
526 | return this.each(function(index){
527 | $(this).wrapAll(
528 | func ? structure.call(this, index) :
529 | clone ? dom.cloneNode(true) : dom
530 | )
531 | })
532 | },
533 | wrapAll: function(structure){
534 | if (this[0]) {
535 | $(this[0]).before(structure = $(structure))
536 | var children
537 | // drill down to the inmost element
538 | while ((children = structure.children()).length) structure = children.first()
539 | $(structure).append(this)
540 | }
541 | return this
542 | },
543 | wrapInner: function(structure){
544 | var func = isFunction(structure)
545 | return this.each(function(index){
546 | var self = $(this), contents = self.contents(),
547 | dom = func ? structure.call(this, index) : structure
548 | contents.length ? contents.wrapAll(dom) : self.append(dom)
549 | })
550 | },
551 | unwrap: function(){
552 | this.parent().each(function(){
553 | $(this).replaceWith($(this).children())
554 | })
555 | return this
556 | },
557 | clone: function(){
558 | return this.map(function(){ return this.cloneNode(true) })
559 | },
560 | hide: function(){
561 | return this.css("display", "none")
562 | },
563 | toggle: function(setting){
564 | return this.each(function(){
565 | var el = $(this)
566 | ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide()
567 | })
568 | },
569 | prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },
570 | next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },
571 | html: function(html){
572 | return html === undefined ?
573 | (this.length > 0 ? this[0].innerHTML : null) :
574 | this.each(function(idx){
575 | var originHtml = this.innerHTML
576 | $(this).empty().append( funcArg(this, html, idx, originHtml) )
577 | })
578 | },
579 | text: function(text){
580 | return text === undefined ?
581 | (this.length > 0 ? this[0].textContent : null) :
582 | this.each(function(){ this.textContent = text })
583 | },
584 | attr: function(name, value){
585 | var result
586 | return (typeof name == 'string' && value === undefined) ?
587 | (this.length == 0 || this[0].nodeType !== 1 ? undefined :
588 | (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() :
589 | (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result
590 | ) :
591 | this.each(function(idx){
592 | if (this.nodeType !== 1) return
593 | if (isObject(name)) for (key in name) setAttribute(this, key, name[key])
594 | else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))
595 | })
596 | },
597 | removeAttr: function(name){
598 | return this.each(function(){ this.nodeType === 1 && setAttribute(this, name) })
599 | },
600 | prop: function(name, value){
601 | return (value === undefined) ?
602 | (this[0] && this[0][name]) :
603 | this.each(function(idx){
604 | this[name] = funcArg(this, value, idx, this[name])
605 | })
606 | },
607 | data: function(name, value){
608 | var data = this.attr('data-' + dasherize(name), value)
609 | return data !== null ? deserializeValue(data) : undefined
610 | },
611 | val: function(value){
612 | return (value === undefined) ?
613 | (this[0] && (this[0].multiple ?
614 | $(this[0]).find('option').filter(function(o){ return this.selected }).pluck('value') :
615 | this[0].value)
616 | ) :
617 | this.each(function(idx){
618 | this.value = funcArg(this, value, idx, this.value)
619 | })
620 | },
621 | offset: function(coordinates){
622 | if (coordinates) return this.each(function(index){
623 | var $this = $(this),
624 | coords = funcArg(this, coordinates, index, $this.offset()),
625 | parentOffset = $this.offsetParent().offset(),
626 | props = {
627 | top: coords.top - parentOffset.top,
628 | left: coords.left - parentOffset.left
629 | }
630 |
631 | if ($this.css('position') == 'static') props['position'] = 'relative'
632 | $this.css(props)
633 | })
634 | if (this.length==0) return null
635 | var obj = this[0].getBoundingClientRect()
636 | return {
637 | left: obj.left + window.pageXOffset,
638 | top: obj.top + window.pageYOffset,
639 | width: Math.round(obj.width),
640 | height: Math.round(obj.height)
641 | }
642 | },
643 | css: function(property, value){
644 | if (arguments.length < 2 && typeof property == 'string')
645 | return this[0] && (this[0].style[camelize(property)] || getComputedStyle(this[0], '').getPropertyValue(property))
646 |
647 | var css = ''
648 | if (type(property) == 'string') {
649 | if (!value && value !== 0)
650 | this.each(function(){ this.style.removeProperty(dasherize(property)) })
651 | else
652 | css = dasherize(property) + ":" + maybeAddPx(property, value)
653 | } else {
654 | for (key in property)
655 | if (!property[key] && property[key] !== 0)
656 | this.each(function(){ this.style.removeProperty(dasherize(key)) })
657 | else
658 | css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'
659 | }
660 |
661 | return this.each(function(){ this.style.cssText += ';' + css })
662 | },
663 | index: function(element){
664 | return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])
665 | },
666 | hasClass: function(name){
667 | return emptyArray.some.call(this, function(el){
668 | return this.test(className(el))
669 | }, classRE(name))
670 | },
671 | addClass: function(name){
672 | return this.each(function(idx){
673 | classList = []
674 | var cls = className(this), newName = funcArg(this, name, idx, cls)
675 | newName.split(/\s+/g).forEach(function(klass){
676 | if (!$(this).hasClass(klass)) classList.push(klass)
677 | }, this)
678 | classList.length && className(this, cls + (cls ? " " : "") + classList.join(" "))
679 | })
680 | },
681 | removeClass: function(name){
682 | return this.each(function(idx){
683 | if (name === undefined) return className(this, '')
684 | classList = className(this)
685 | funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){
686 | classList = classList.replace(classRE(klass), " ")
687 | })
688 | className(this, classList.trim())
689 | })
690 | },
691 | toggleClass: function(name, when){
692 | return this.each(function(idx){
693 | var $this = $(this), names = funcArg(this, name, idx, className(this))
694 | names.split(/\s+/g).forEach(function(klass){
695 | (when === undefined ? !$this.hasClass(klass) : when) ?
696 | $this.addClass(klass) : $this.removeClass(klass)
697 | })
698 | })
699 | },
700 | scrollTop: function(){
701 | if (!this.length) return
702 | return ('scrollTop' in this[0]) ? this[0].scrollTop : this[0].scrollY
703 | },
704 | position: function() {
705 | if (!this.length) return
706 |
707 | var elem = this[0],
708 | // Get *real* offsetParent
709 | offsetParent = this.offsetParent(),
710 | // Get correct offsets
711 | offset = this.offset(),
712 | parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()
713 |
714 | // Subtract element margins
715 | // note: when an element has margin: auto the offsetLeft and marginLeft
716 | // are the same in Safari causing offset.left to incorrectly be 0
717 | offset.top -= parseFloat( $(elem).css('margin-top') ) || 0
718 | offset.left -= parseFloat( $(elem).css('margin-left') ) || 0
719 |
720 | // Add offsetParent borders
721 | parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0
722 | parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0
723 |
724 | // Subtract the two offsets
725 | return {
726 | top: offset.top - parentOffset.top,
727 | left: offset.left - parentOffset.left
728 | }
729 | },
730 | offsetParent: function() {
731 | return this.map(function(){
732 | var parent = this.offsetParent || document.body
733 | while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static")
734 | parent = parent.offsetParent
735 | return parent
736 | })
737 | }
738 | }
739 |
740 | // for now
741 | $.fn.detach = $.fn.remove
742 |
743 | // Generate the `width` and `height` functions
744 | ;['width', 'height'].forEach(function(dimension){
745 | $.fn[dimension] = function(value){
746 | var offset, el = this[0],
747 | Dimension = dimension.replace(/./, function(m){ return m[0].toUpperCase() })
748 | if (value === undefined) return isWindow(el) ? el['inner' + Dimension] :
749 | isDocument(el) ? el.documentElement['offset' + Dimension] :
750 | (offset = this.offset()) && offset[dimension]
751 | else return this.each(function(idx){
752 | el = $(this)
753 | el.css(dimension, funcArg(this, value, idx, el[dimension]()))
754 | })
755 | }
756 | })
757 |
758 | function traverseNode(node, fun) {
759 | fun(node)
760 | for (var key in node.childNodes) traverseNode(node.childNodes[key], fun)
761 | }
762 |
763 | // Generate the `after`, `prepend`, `before`, `append`,
764 | // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.
765 | adjacencyOperators.forEach(function(operator, operatorIndex) {
766 | var inside = operatorIndex % 2 //=> prepend, append
767 |
768 | $.fn[operator] = function(){
769 | // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings
770 | var argType, nodes = $.map(arguments, function(arg) {
771 | argType = type(arg)
772 | return argType == "object" || argType == "array" || arg == null ?
773 | arg : zepto.fragment(arg)
774 | }),
775 | parent, copyByClone = this.length > 1
776 | if (nodes.length < 1) return this
777 |
778 | return this.each(function(_, target){
779 | parent = inside ? target : target.parentNode
780 |
781 | // convert all methods to a "before" operation
782 | target = operatorIndex == 0 ? target.nextSibling :
783 | operatorIndex == 1 ? target.firstChild :
784 | operatorIndex == 2 ? target :
785 | null
786 |
787 | nodes.forEach(function(node){
788 | if (copyByClone) node = node.cloneNode(true)
789 | else if (!parent) return $(node).remove()
790 |
791 | traverseNode(parent.insertBefore(node, target), function(el){
792 | if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&
793 | (!el.type || el.type === 'text/javascript') && !el.src)
794 | window['eval'].call(window, el.innerHTML)
795 | })
796 | })
797 | })
798 | }
799 |
800 | // after => insertAfter
801 | // prepend => prependTo
802 | // before => insertBefore
803 | // append => appendTo
804 | $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){
805 | $(html)[operator](this)
806 | return this
807 | }
808 | })
809 |
810 | zepto.Z.prototype = $.fn
811 |
812 | // Export internal API functions in the `$.zepto` namespace
813 | zepto.uniq = uniq
814 | zepto.deserializeValue = deserializeValue
815 | $.zepto = zepto
816 |
817 | return $
818 | })()
819 |
820 | window.Zepto = Zepto
821 | '$' in window || (window.$ = Zepto)
822 |
823 | ;(function($){
824 | function detect(ua){
825 | var os = this.os = {}, browser = this.browser = {},
826 | webkit = ua.match(/WebKit\/([\d.]+)/),
827 | android = ua.match(/(Android)\s+([\d.]+)/),
828 | ipad = ua.match(/(iPad).*OS\s([\d_]+)/),
829 | iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/),
830 | webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),
831 | touchpad = webos && ua.match(/TouchPad/),
832 | kindle = ua.match(/Kindle\/([\d.]+)/),
833 | silk = ua.match(/Silk\/([\d._]+)/),
834 | blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/),
835 | bb10 = ua.match(/(BB10).*Version\/([\d.]+)/),
836 | rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/),
837 | playbook = ua.match(/PlayBook/),
838 | chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/),
839 | firefox = ua.match(/Firefox\/([\d.]+)/)
840 |
841 | // Todo: clean this up with a better OS/browser seperation:
842 | // - discern (more) between multiple browsers on android
843 | // - decide if kindle fire in silk mode is android or not
844 | // - Firefox on Android doesn't specify the Android version
845 | // - possibly devide in os, device and browser hashes
846 |
847 | if (browser.webkit = !!webkit) browser.version = webkit[1]
848 |
849 | if (android) os.android = true, os.version = android[2]
850 | if (iphone) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.')
851 | if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.')
852 | if (webos) os.webos = true, os.version = webos[2]
853 | if (touchpad) os.touchpad = true
854 | if (blackberry) os.blackberry = true, os.version = blackberry[2]
855 | if (bb10) os.bb10 = true, os.version = bb10[2]
856 | if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2]
857 | if (playbook) browser.playbook = true
858 | if (kindle) os.kindle = true, os.version = kindle[1]
859 | if (silk) browser.silk = true, browser.version = silk[1]
860 | if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true
861 | if (chrome) browser.chrome = true, browser.version = chrome[1]
862 | if (firefox) browser.firefox = true, browser.version = firefox[1]
863 |
864 | os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) || (firefox && ua.match(/Tablet/)))
865 | os.phone = !!(!os.tablet && (android || iphone || webos || blackberry || bb10 ||
866 | (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\/([\d.]+)/)) || (firefox && ua.match(/Mobile/))))
867 | }
868 |
869 | detect.call($, navigator.userAgent)
870 | // make available to unit tests
871 | $.__detect = detect
872 |
873 | })(Zepto)
874 |
875 | ;(function($){
876 | var $$ = $.zepto.qsa, handlers = {}, _zid = 1, specialEvents={},
877 | hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }
878 |
879 | specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'
880 |
881 | function zid(element) {
882 | return element._zid || (element._zid = _zid++)
883 | }
884 | function findHandlers(element, event, fn, selector) {
885 | event = parse(event)
886 | if (event.ns) var matcher = matcherFor(event.ns)
887 | return (handlers[zid(element)] || []).filter(function(handler) {
888 | return handler
889 | && (!event.e || handler.e == event.e)
890 | && (!event.ns || matcher.test(handler.ns))
891 | && (!fn || zid(handler.fn) === zid(fn))
892 | && (!selector || handler.sel == selector)
893 | })
894 | }
895 | function parse(event) {
896 | var parts = ('' + event).split('.')
897 | return {e: parts[0], ns: parts.slice(1).sort().join(' ')}
898 | }
899 | function matcherFor(ns) {
900 | return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')
901 | }
902 |
903 | function eachEvent(events, fn, iterator){
904 | if ($.type(events) != "string") $.each(events, iterator)
905 | else events.split(/\s/).forEach(function(type){ iterator(type, fn) })
906 | }
907 |
908 | function eventCapture(handler, captureSetting) {
909 | return handler.del &&
910 | (handler.e == 'focus' || handler.e == 'blur') ||
911 | !!captureSetting
912 | }
913 |
914 | function realEvent(type) {
915 | return hover[type] || type
916 | }
917 |
918 | function add(element, events, fn, selector, getDelegate, capture){
919 | var id = zid(element), set = (handlers[id] || (handlers[id] = []))
920 | eachEvent(events, fn, function(event, fn){
921 | var handler = parse(event)
922 | handler.fn = fn
923 | handler.sel = selector
924 | // emulate mouseenter, mouseleave
925 | if (handler.e in hover) fn = function(e){
926 | var related = e.relatedTarget
927 | if (!related || (related !== this && !$.contains(this, related)))
928 | return handler.fn.apply(this, arguments)
929 | }
930 | handler.del = getDelegate && getDelegate(fn, event)
931 | var callback = handler.del || fn
932 | handler.proxy = function (e) {
933 | var result = callback.apply(element, [e].concat(e.data))
934 | if (result === false) e.preventDefault(), e.stopPropagation()
935 | return result
936 | }
937 | handler.i = set.length
938 | set.push(handler)
939 | element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
940 | })
941 | }
942 | function remove(element, events, fn, selector, capture){
943 | var id = zid(element)
944 | eachEvent(events || '', fn, function(event, fn){
945 | findHandlers(element, event, fn, selector).forEach(function(handler){
946 | delete handlers[id][handler.i]
947 | element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
948 | })
949 | })
950 | }
951 |
952 | $.event = { add: add, remove: remove }
953 |
954 | $.proxy = function(fn, context) {
955 | if ($.isFunction(fn)) {
956 | var proxyFn = function(){ return fn.apply(context, arguments) }
957 | proxyFn._zid = zid(fn)
958 | return proxyFn
959 | } else if (typeof context == 'string') {
960 | return $.proxy(fn[context], fn)
961 | } else {
962 | throw new TypeError("expected function")
963 | }
964 | }
965 |
966 | $.fn.bind = function(event, callback){
967 | return this.each(function(){
968 | add(this, event, callback)
969 | })
970 | }
971 | $.fn.unbind = function(event, callback){
972 | return this.each(function(){
973 | remove(this, event, callback)
974 | })
975 | }
976 | $.fn.one = function(event, callback){
977 | return this.each(function(i, element){
978 | add(this, event, callback, null, function(fn, type){
979 | return function(){
980 | var result = fn.apply(element, arguments)
981 | remove(element, type, fn)
982 | return result
983 | }
984 | })
985 | })
986 | }
987 |
988 | var returnTrue = function(){return true},
989 | returnFalse = function(){return false},
990 | ignoreProperties = /^([A-Z]|layer[XY]$)/,
991 | eventMethods = {
992 | preventDefault: 'isDefaultPrevented',
993 | stopImmediatePropagation: 'isImmediatePropagationStopped',
994 | stopPropagation: 'isPropagationStopped'
995 | }
996 | function createProxy(event) {
997 | var key, proxy = { originalEvent: event }
998 | for (key in event)
999 | if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]
1000 |
1001 | $.each(eventMethods, function(name, predicate) {
1002 | proxy[name] = function(){
1003 | this[predicate] = returnTrue
1004 | return event[name].apply(event, arguments)
1005 | }
1006 | proxy[predicate] = returnFalse
1007 | })
1008 | return proxy
1009 | }
1010 |
1011 | // emulates the 'defaultPrevented' property for browsers that have none
1012 | function fix(event) {
1013 | if (!('defaultPrevented' in event)) {
1014 | event.defaultPrevented = false
1015 | var prevent = event.preventDefault
1016 | event.preventDefault = function() {
1017 | this.defaultPrevented = true
1018 | prevent.call(this)
1019 | }
1020 | }
1021 | }
1022 |
1023 | $.fn.delegate = function(selector, event, callback){
1024 | return this.each(function(i, element){
1025 | add(element, event, callback, selector, function(fn){
1026 | return function(e){
1027 | var evt, match = $(e.target).closest(selector, element).get(0)
1028 | if (match) {
1029 | evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})
1030 | return fn.apply(match, [evt].concat([].slice.call(arguments, 1)))
1031 | }
1032 | }
1033 | })
1034 | })
1035 | }
1036 | $.fn.undelegate = function(selector, event, callback){
1037 | return this.each(function(){
1038 | remove(this, event, callback, selector)
1039 | })
1040 | }
1041 |
1042 | $.fn.live = function(event, callback){
1043 | $(document.body).delegate(this.selector, event, callback)
1044 | return this
1045 | }
1046 | $.fn.die = function(event, callback){
1047 | $(document.body).undelegate(this.selector, event, callback)
1048 | return this
1049 | }
1050 |
1051 | $.fn.on = function(event, selector, callback){
1052 | return !selector || $.isFunction(selector) ?
1053 | this.bind(event, selector || callback) : this.delegate(selector, event, callback)
1054 | }
1055 | $.fn.off = function(event, selector, callback){
1056 | return !selector || $.isFunction(selector) ?
1057 | this.unbind(event, selector || callback) : this.undelegate(selector, event, callback)
1058 | }
1059 |
1060 | $.fn.trigger = function(event, data){
1061 | if (typeof event == 'string' || $.isPlainObject(event)) event = $.Event(event)
1062 | fix(event)
1063 | event.data = data
1064 | return this.each(function(){
1065 | // items in the collection might not be DOM elements
1066 | // (todo: possibly support events on plain old objects)
1067 | if('dispatchEvent' in this) this.dispatchEvent(event)
1068 | })
1069 | }
1070 |
1071 | // triggers event handlers on current element just as if an event occurred,
1072 | // doesn't trigger an actual event, doesn't bubble
1073 | $.fn.triggerHandler = function(event, data){
1074 | var e, result
1075 | this.each(function(i, element){
1076 | e = createProxy(typeof event == 'string' ? $.Event(event) : event)
1077 | e.data = data
1078 | e.target = element
1079 | $.each(findHandlers(element, event.type || event), function(i, handler){
1080 | result = handler.proxy(e)
1081 | if (e.isImmediatePropagationStopped()) return false
1082 | })
1083 | })
1084 | return result
1085 | }
1086 |
1087 | // shortcut methods for `.bind(event, fn)` for each event type
1088 | ;('focusin focusout load resize scroll unload click dblclick '+
1089 | 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+
1090 | 'change select keydown keypress keyup error').split(' ').forEach(function(event) {
1091 | $.fn[event] = function(callback) {
1092 | return callback ?
1093 | this.bind(event, callback) :
1094 | this.trigger(event)
1095 | }
1096 | })
1097 |
1098 | ;['focus', 'blur'].forEach(function(name) {
1099 | $.fn[name] = function(callback) {
1100 | if (callback) this.bind(name, callback)
1101 | else this.each(function(){
1102 | try { this[name]() }
1103 | catch(e) {}
1104 | })
1105 | return this
1106 | }
1107 | })
1108 |
1109 | $.Event = function(type, props) {
1110 | if (typeof type != 'string') props = type, type = props.type
1111 | var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true
1112 | if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])
1113 | event.initEvent(type, bubbles, true, null, null, null, null, null, null, null, null, null, null, null, null)
1114 | event.isDefaultPrevented = function(){ return this.defaultPrevented }
1115 | return event
1116 | }
1117 |
1118 | })(Zepto)
1119 |
1120 | ;(function($){
1121 | var jsonpID = 0,
1122 | document = window.document,
1123 | key,
1124 | name,
1125 | rscript = /