commit 1d0fd4a7d8b852e10dfe91cd2920579ea4c30cc3 Author: scottjehl Date: Fri Sep 10 18:23:13 2010 -0400 committing all the mobiley goodness. diff --git a/.htaccess b/.htaccess new file mode 100644 index 00000000..79ac1412 --- /dev/null +++ b/.htaccess @@ -0,0 +1,17 @@ + +ForceType application/x-httpd-php + + +RewriteEngine On +RewriteRule ^css/all combine.php?type=css +RewriteRule ^js/all combine.php?type=javascript + +# Turn on Expires and set default to 0 +ExpiresActive On +ExpiresDefault "access" + + +# cache text, css, and javascript files for one week + +Header set Cache-Control "max-age=1" + \ No newline at end of file diff --git a/_containers-states.html b/_containers-states.html new file mode 100644 index 00000000..64540d9d --- /dev/null +++ b/_containers-states.html @@ -0,0 +1,76 @@ + + + + + jQuery Mobile Framework - Static Containers, States + + + + + +
+ +
+

Containers and states

+ Home +
+ +
+
+

Description

+

This page displays examples of themeable containers that are used throughout the jQuery Mobile framework.

+
+ +
+ Button +

ui-bar-a

+
+
+

ui-body-a ui-link

+ Button +
+ + +
+ Button +

ui-bar-b

+
+
+

ui-body-b ui-link

+ Button +
+ + +
+ Button +

ui-bar-c

+
+
+

ui-body-c ui-link

+ Button +
+ + + +
+ Button +

ui-bar-d

+
+ +
+
+ + + \ No newline at end of file diff --git a/_events.html b/_events.html new file mode 100644 index 00000000..05980527 --- /dev/null +++ b/_events.html @@ -0,0 +1,30 @@ + + + + + jQuery Mobile Framework - Event tests + + + + + + + + + +
+
+

Event tests

+
+
+

The following events will log out below when they fire: scrollstart scrollstop swipe swipeleft swiperight tap taphold turn.

+
+
+ +
+ + + + + + \ No newline at end of file diff --git a/_fixed.html b/_fixed.html new file mode 100644 index 00000000..7dbf044a --- /dev/null +++ b/_fixed.html @@ -0,0 +1,116 @@ + + + + + jQuery Mobile Framework - Toolbars demo + + + + + +
+ +
+

Fixed Header

+ Home +
+ +
+
+

Demo description

+

This is a demo of the "fixed" headers and footers used in the jQuery Mobile framework. The page content flows naturally, allowing us to take advantage of native scrolling instead of a scripting a faux-scrolling workaround. The header and footer divs are right in the flow of the document, but whenever they are out of view, you can tap the screen to make them appear. Tapping again or scrolling the page will cause them to appear back in the flow of the page (at the top and bottom).

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+		#header h1 a { 
+			display: block; 
+			width: 300px; 
+			height: 80px; 
+		}
+		
+ +

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+		#header h1 a { 
+			display: block; 
+			width: 300px; 
+			height: 80px; 
+		}
+		
+ +

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+		#header h1 a { 
+			display: block; 
+			width: 300px; 
+			height: 80px; 
+		}
+		
+ +
+
+ + + + +
+ + + \ No newline at end of file diff --git a/_form-controls.html b/_form-controls.html new file mode 100644 index 00000000..e6f98e08 --- /dev/null +++ b/_form-controls.html @@ -0,0 +1,178 @@ + + + + + jQuery Mobile Framework - Form Controls + + + + + + +
+ +
+

Form controls

+ Home +
+ +
+ + +
+ +
+

Demo description

+

This page contains various progressive-enhancement driven form controls. Native elements are sometimes hidden from view, but their values are maintained so the form can be submitted normally. In theory, browsers that don't support the custom controls will still get a usable experience.

+ +

The collapsible panels are marked up as either heading/content, or legend/fieldset combinations. Helper text on the toggle links allows them to make sense on a screen reader.

+ +

Text inputs and textareas are largely left alone, aside from having some theme classes applied. Textareas auto-grow using Brandon Aaron's expandable plugin, eliminating the need to 2-finger scroll a textarea on a mobile device.

+ +

The radio and checkbox controls below use standard input/label markup, but are styled to be more touch-friendly. The styled control you see is actually the label element, which sits over the real input, so if images fail to load, you'll still have a functional control. In most browsers, clicking the label automatically triggers a click on the input, but we've had to trigger the update manually for a few mobile browsers that don't do this natively. On the desktop, these controls are keyboard and screen-reader accessible. The horizontal toggles for "cache settings" and "font styling" are also just sets of checkboxes and radios with icons disabled.

+ +

The select menus are driven off native select elements, but the native selects are hidden from view and replaced with more style-friendly markup. The replacement buttons and menus are ARIA-enabled and are keyboard accessible on the desktop as well. When clicked, if the menu has room it will appear as an overlay listbox, but if there are too many options to fit in the window without scrolling, the page content is wrapped in a div and hidden, and the menu is appended after that div. This lets us take advantage of native scrolling while the menu is in use. Try the third select menu to see this behavior in action.

+ +

The submit buttons are marked up as both input[type=submit] and button elements in the source, but we're generating anchor-based buttons in their place in order to take advantage of consistent styling across mobile browsers. The original buttons are still on the page, hidden from view, and clicking the replacement button will trigger a click on the original element, so the form can be submitted normally.

+ + + +
+ +
+ Text input controls +
+ + +
+
+ + +
+
+ + +
+
+ + + +
+ +

Radio toggles

+ + +
+ Choose one: + + + + + + + + + + + +
+ +
+ Cache settings: + + + + +
+ +
+ +
+ +

Checkboxes

+ +
+ Choose one or more: + + + + + + + + +
+ +
+ Font styling: + + + + + + + + +
+ +
+ + +
+
+ + + + +
+ Select menus +
+ + +
+ +
+ + +
+
+ + + +
+
+
+
+
+ +
+ +
+ + + + + \ No newline at end of file diff --git a/_globalnav.html b/_globalnav.html new file mode 100644 index 00000000..930144f6 --- /dev/null +++ b/_globalnav.html @@ -0,0 +1,108 @@ + + + + + jQuery Mobile Framework - Tabs Example + + + + + +
+
+

Tabs Example

+ Home +
+ +
+ + + + + +

Demo description

+ +

This page demonstrates the behavior for the tabs control. The tab navigation can either be inline with the content (for tabs within sub-sections of a page), or optionally as a global fixed footer for page-level tabs. This page demonstrates the latter. It uses the fixed toolbars behavior, which allows you to display the tabs when you need them by tapping the screen.

+

Also, the page header is a standard fixed toolbar that can bring you back to the previous page when you toggle its visibility.

+ + +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+						#header h1 a { 
+							display: block; 
+							width: 300px; 
+							height: 80px; 
+						}
+						
+ +

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+						#header h1 a { 
+							display: block; 
+							width: 300px; 
+							height: 80px; 
+						}
+						
+ +

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ + + + +
+ +
+ + + + \ No newline at end of file diff --git a/_tabs.html b/_tabs.html new file mode 100644 index 00000000..139a502b --- /dev/null +++ b/_tabs.html @@ -0,0 +1,302 @@ + + + + + jQuery Mobile Framework - Tabs Example + + + + + +
+
+

Tabs Example

+ Home +
+ +
+ +
+ +
+ +
+

Demo description

+ +

This page demonstrates the behavior for the tabs control. The tab navigation can either be inline with the content (for tabs within sub-sections of a page), or optionally as a global fixed footer for page-level tabs. This page demonstrates the latter. It uses the fixed toolbars behavior, which allows you to display the tabs when you need them by tapping the screen.

+

Also, the page header is a standard fixed toolbar that can bring you back to the previous page when you toggle its visibility.

+ + +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+						#header h1 a { 
+							display: block; 
+							width: 300px; 
+							height: 80px; 
+						}
+						
+ +

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+						#header h1 a { 
+							display: block; 
+							width: 300px; 
+							height: 80px; 
+						}
+						
+ +

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ + +
+ + + + +
+

Content Panel B

+ +

This page demonstrates the behavior for the tabs control. The tab navigation can either be inline with the content (for tabs within sub-sections of a page), or optionally as a global fixed footer for page-level tabs. This page demonstrates the latter. It uses the fixed toolbars behavior, which allows you to display the tabs when you need them by tapping the screen.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+						#header h1 a { 
+							display: block; 
+							width: 300px; 
+							height: 80px; 
+						}
+						
+ +

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+						#header h1 a { 
+							display: block; 
+							width: 300px; 
+							height: 80px; 
+						}
+						
+ +

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+						#header h1 a { 
+							display: block; 
+							width: 300px; 
+							height: 80px; 
+						}
+						
+ +
+ + + + + + + + + + +
+

Content Panel C

+ +

This page demonstrates the behavior for the tabs control. The tab navigation can either be inline with the content (for tabs within sub-sections of a page), or optionally as a global fixed footer for page-level tabs. This page demonstrates the latter. It uses the fixed toolbars behavior, which allows you to display the tabs when you need them by tapping the screen.

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
  5. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  6. +
  7. Aliquam tincidunt mauris eu risus.
  8. +
  9. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  10. +
  11. Aliquam tincidunt mauris eu risus.
  12. +
  13. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  14. +
  15. Aliquam tincidunt mauris eu risus.
  16. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+						#header h1 a { 
+							display: block; 
+							width: 300px; 
+							height: 80px; 
+						}
+						
+ +

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+						#header h1 a { 
+							display: block; 
+							width: 300px; 
+							height: 80px; 
+						}
+						
+ +

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +

+						#header h1 a { 
+							display: block; 
+							width: 300px; 
+							height: 80px; 
+						}
+						
+
+ + +
+
+ +
+
+ + + + \ No newline at end of file diff --git a/_transitions-destination.html b/_transitions-destination.html new file mode 100644 index 00000000..7216583e --- /dev/null +++ b/_transitions-destination.html @@ -0,0 +1,46 @@ + + + + + jQuery Mobile Framework - Transition Completed! + + + + + + +
+
+

Done!

+
+
+
+

HTML Ipsum Presents

+ +

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

+ +

Header Level 2

+ +
    +
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  2. +
  3. Aliquam tincidunt mauris eu risus.
  4. +
+ +

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

+ +

Header Level 3

+ +
    +
  • Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
  • +
  • Aliquam tincidunt mauris eu risus.
  • +
+ +
+
+
+ + + + + + \ No newline at end of file diff --git a/_transitions.html b/_transitions.html new file mode 100644 index 00000000..01dbd149 --- /dev/null +++ b/_transitions.html @@ -0,0 +1,31 @@ + + + + + jQuery Mobile Framework - Static Containers, States + + + + + +
+
+

Transitions

+
+
+
+ +
+
+
+ + + \ No newline at end of file diff --git a/_tree.html b/_tree.html new file mode 100644 index 00000000..d61b6c7e --- /dev/null +++ b/_tree.html @@ -0,0 +1,79 @@ + + + + + jQuery Mobile Framework - Tree Example + + + + + + +
+ +
+

Tree Example

+ Home +
+ + +
+ + + + + +

Testing to make sure content flows inline after tree...

+ +
+
+ + + + \ No newline at end of file diff --git a/combine.php b/combine.php new file mode 100644 index 00000000..aef9c4f2 --- /dev/null +++ b/combine.php @@ -0,0 +1,162 @@ + \ No newline at end of file diff --git a/css/structure.css b/css/structure.css new file mode 100644 index 00000000..091f3708 --- /dev/null +++ b/css/structure.css @@ -0,0 +1,534 @@ +/* +* jQuery Mobile Framework +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ + +/* some unsets - more probably needed */ +.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; } +.ui-mobile a img, .ui-mobile fieldset { border: 0; } + +/* responsive page widths */ +.ui-mobile body { margin: 0; overflow-x: hidden; -webkit-user-select: none; -webkit-text-size-adjust: none; } +/*tablets - more work needed here*/ +@media screen and (min-width: 480px){ + .ui-mobile body { width: auto; min-height: 100%; } +} +/*tablets - mobile landscape-ish */ +@media screen and (max-width: 480px){ + .ui-mobile body { width: 480px; min-height: 300px; } +} +/*tablets - mobile portrait-ish */ +@media screen and (max-width: 320px){ + .ui-mobile body { width: 320px; min-height: 460px; } +} +/*orientations from js are available - necessary? media q's work well enough? */ +.portrait body { } +.landscape body { } + +/* "page" containers - full-screen views, one should always be in view post-pageload */ +.ui-page { top: 0; left: 0; width: 100%; height: 100%; position: absolute; z-index: 10; visibility: hidden; height: 0; overflow: hidden; } /* display is temporary*/ +.ui-page-active { visibility: visible; height: auto; overflow: visible; } + +/* loading screen */ +.ui-loading, .ui-loading body { overflow: hidden !important; } +.ui-loading .ui-content { visibility: hidden; } +.ui-loading .ui-loader { display: block; } +.ui-loader { display: none; position: absolute; z-index: 0; top: 60px; left: 50%; width: 100px; margin-left: -80px; padding: 20px 30px; border: 0; } +.ui-loader h1 { font-size: 15px; text-align: center; opacity: .8; } +.ui-loader .ui-icon { position: static; display: block; opacity: .7; margin: 0 auto; width: 35px; height: 35px; background-color: transparent; } + +/*headers, content panels*/ +.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; } +.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; } /* not sure if this rule's necessary...*/ + +/* page header configuration */ +.ui-header { position: relative; padding: .8em 90px 1em; } +.ui-header .ui-back { position: absolute; left: 10px; top: .5em; } +.ui-header h1, .ui-title, .ui-footer h1 { text-align: center; font-size: 16px; display: block; margin: 0; padding: 0; white-space: nowrap; overflow: hidden; } +.ui-footer h1 { margin: .8em 0 1em; } +.ui-header .ui-aux { position: absolute; right: 10px; top: .2em; } +/*generated wrappers for toggling fixed/flow positions*/ +.ui-headfoot-placehold { } +.ui-headfoot-hidden { overflow: hidden; } +.ui-headfoot-wrap, .ui-headfoot-wrap { position: static; width: 100%; display: block; } +.ui-fixpos { position: absolute; z-index: 1000; width: 100%; } + +/* content configurations. More semantix class names plz. */ +.ui-config-a, .ui-config-b, .ui-config-c { overflow: hidden; } +.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d { margin: 0; padding: 0; border: 0; float: left; } +/* config a: 50/50 */ +.ui-config-a .ui-block-a { width: 48%; float: left; } +.ui-config-a .ui-block-b { width: 48%; float: right; text-align: right; } +/* config b: 33/33/33 */ +.ui-config-b .ui-block-a { width: 31%; margin-right: 2%; float: left; } +.ui-config-b .ui-block-b { width: 31%; margin-right: 2%; float: left; } +.ui-config-b .ui-block-c { width: 31%; float: right; text-align: right; } + +/* icons sizing */ +.ui-icon { width: 18px; height: 18px; } + +/* btn-like elements*/ +.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 5px; padding: 0; } +.ui-headfoot-wrap .ui-btn, .ui-bar .ui-btn { display: inline-block; font-size: 13px; margin: 0; } +.ui-btn-inner { padding: .6em 25px; display: block; } +.ui-btn-text { } +.ui-headfoot-wrap .ui-btn-inner, .ui-header .ui-btn-inner { padding: .4em 8px .5em; } +.ui-btn-icon-notext { width: 20px; height: 20px; } +.ui-btn-icon-notext .ui-btn-inner { padding: 0; } +.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -999px; } +.ui-btn-icon-left .ui-btn-inner { padding-left: 30px; } +.ui-headfoot-wrap .ui-btn-icon-left .ui-btn-inner { padding-left: 27px; } +.ui-btn-icon-right .ui-btn-inner { padding-right: 30px; } +.ui-headfoot-wrap .ui-btn-icon-right .ui-btn-inner { padding-right: 27px; } +.ui-btn-icon-top .ui-btn-inner { padding-top: 30px; } +.ui-headfoot-wrap .ui-btn-icon-top .ui-btn-inner { padding-top: 27px; } +.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; } +.ui-headfoot-wrap .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 27px; } + +/*btn icon positioning*/ +.ui-btn-icon-notext .ui-icon { display: block; } +.ui-btn-icon-left .ui-icon, .ui-btn-icon-right .ui-icon { position: absolute; top: 50%; margin-top: -9px; } +.ui-btn-icon-top .ui-icon, .ui-btn-icon-bottom .ui-icon { position: absolute; left: 50%; margin-left: -9px; } +.ui-btn-icon-left .ui-icon { left: 10px; } +.ui-btn-icon-right .ui-icon {right: 10px; } +.ui-headfoot-wrap .ui-btn-icon-left .ui-icon { left: 4px; } +.ui-headfoot-wrap .ui-btn-icon-right .ui-icon { right: 4px; } +.ui-btn-icon-top .ui-icon { top: 5px; } +.ui-btn-icon-bottom .ui-icon { bottom: 5px; } +/*hiding native button,inputs - should probably use a11y hidden class!*/ +.ui-btn-hidden { position: absolute; left: -9999px; } + +/*form elements*/ + +/*checkbox/radio sets*/ +.ui-controlgroup { padding: 0; margin: .5em 0 1em; } +.ui-bar .ui-controlgroup { margin: 0 .3em; } +.ui-controlgroup li { list-style: none; } +.ui-controlgroup-vertical .ui-btn, +.ui-controlgroup-vertical div.ui-checkbox, .ui-controlgroup-vertical div.ui-radio { margin: 0; border-bottom-width: 0; } +.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; } +.ui-controlgroup-horizontal { display: inline-block; padding: 0; } +.ui-controlgroup-horizontal .ui-btn, +.ui-controlgroup-horizontal div.ui-checkbox, .ui-controlgroup-horizontal div.ui-radio { margin: 0 -5px 0 0; display: inline-block; } +.ui-controlgroup-horizontal div.ui-checkbox .ui-btn, .ui-controlgroup-horizontal div.ui-radio .ui-btn, +.ui-controlgroup-horizontal div.ui-checkbox:last-child, .ui-controlgroup-horizontal div.ui-radio:last-child { margin-right: 0; } + +.ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; } +.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; } + +/*textareas,labels,inputs*/ +label.ui-input-text, label.ui-select, .ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; } +input.ui-input-text, textarea.ui-input-text { padding: .4em; line-height: 1.4; font-size: 16px; display: block; width: 95%; } +textarea.ui-input-text { height: 50px; } +/* orientation adjustments - incomplete!*/ +@media screen and (min-width: 480px){ + label.ui-input-text, .ui-controlgroup-label { vertical-align: top; } + label.ui-input-text, label.ui-select, .ui-ui-controlgroup-label { display: inline-block; width: 20%; margin: 0 2% 0 0; } + input.ui-input-text, textarea.ui-input-text, a.ui-select { width: 60%; display: inline-block !important; } +} + +/* Custom checkboxes, radios */ +div.ui-checkbox, div.ui-radio { position:relative; margin: .2em 0 .5em; } +.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: 0; text-align: left; } +.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; } +.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } +.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon {left: 15px; } +.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon {right: 15px; } + +/* input, label positioning */ +.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; } + +/*custom select*/ +.ui-select select { position: absolute; left: -99999px; } +.ui-select .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } +.ui-select .ui-btn-icon-right .ui-icon { right: 15px; } + +/*listbox*/ +.ui-listbox { position: relative; margin: 8px; padding: 0; z-index: 100; } +.ui-page-content-hidden, .ui-listbox-hidden { display: none; } +.ui-listbox-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } +.ui-listbox-overlay { position: absolute; z-index: 999; width: 300px; margin-left: -150px; } +.ui-listbox-header { background: none; border: 0; } +.ui-listbox-overlay .ui-listbox-header { display: none; } +.ui-listbox-list { list-style: none; margin: 5px; padding: 0; } +.ui-listbox .ui-listbox-option { margin: 0; text-align: left; } + +/*used in listbox - to be removed/replaced with page-style hiding*/ +.ui-helper-hidden,.ui-mobile .ui-content-hidden { display: none; } +.ui-content { min-height: 480px; } + +.ui-fullscreen { width: 100%; height: 100%; position: relative; overflow: hidden; } +.ui-fullscreen img { width: 100%; } + +/*collapsible panels*/ +.ui-collapsible-contain { margin: 0 0 -1px; border-left-width: 0; border-right-width: 0; overflow: hidden; } +.ui-collapsible-heading { font-size: 16px; display: block; margin: 0; padding: 0; border-width: 0 0 1px 0; position: relative; } +.ui-collapsible-heading a { padding: .7em 15px; text-align: left; margin: 0; text-decoration: none; outline: 0; border: 0; display: block; } +.ui-collapsible-heading .ui-icon { position: absolute; right: 5px; top: 50%; margin-top: -9px; } +.ui-collapsible-heading-status { position:absolute; left:-99999px; } +.ui-collapsible-content { padding: 15px; overflow:hidden; display: block; } +.ui-collapsible-content-collapsed { display: none; } + +/*field separators*/ +.ui-field-contain { background: none; padding: .5em 0; margin: 0; border-left-width: 0; border-right-width: 0; border-bottom-width: 0; } +.ui-field-contain:first-child { border-top-width: 0; } +@media screen and (max-width: 480px){ + .ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; } +} + +/*tree*/ +.ui-tree-contain { border-width: 0; } +.ui-tree { position: relative; } +.ui-tree,.ui-tree ul.ui-tree-group,.ui-tree ol.ui-tree-group, .ui-tree li.ui-treeitem { list-style:none; margin:0; padding:0; zoom: 1; } +.ui-tree, .ui-tree .ui-tree-group { -webkit-transition: left .3s linear; width: 100%; margin: 0; } +.ui-tree .ui-tree-group { position: absolute; top:0; left: 100%; border-width: 0; } +.ui-tree-expanded, .ui-tree .ui-tree-expanded { -webkit-transition: left .3s linear; left: -100%; } +.ui-tree .ui-tree-expanded { left: 0; } +.ui-tree a.ui-treeitem-link { text-align: left; margin: 0 0 -1px 0; } +.ui-tree a.ui-treeitem-link:focus { outline: none; } +.ui-tree .ui-tree-group-collapsed { display: none; } +.ui-tree .ui-tree-content-loading { padding: 20px; text-align: center; } +.ui-tree .ui-tree-content-loading .ui-icon { width: 32px; height: 32px; margin: 0 auto; display: block; } +.ui-tree-loading-text { margin: 15px auto; display: block; } + +/* new tree layout stuff - tbd */ +.ui-treeitem-label { cursor: pointer; text-decoration: none; position: relative; display: block; margin: 0 0 -1px 0; text-align: left; overflow: hidden; padding: 0 40px 0 0; font-size: 16px; } +.ui-treeitem-label .ui-btn-inner { padding: 0; } +.ui-treeitem-label a { text-decoration: none; } +.ui-treeitem-thumb, .ui-treeitem-content { float: left; margin-right: 10px; } +.ui-treeitem-content { width: 60%; } +.ui-treeitem-aside { float: right; margin: 0 10px; width: 25%; text-align: right; } +.ui-treeitem-aside, .ui-treeitem-aside * { font-size: 12px; } +.ui-treeitem-thumb { border: 0; } +.ui-treeitem-title { font-size: 16px; font-weight: bold; display: block; margin: .6em 15px; } +.ui-treeitem-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 15px .6em; } +.ui-treeitem-label .ui-icon { position: absolute; right: 5px; top: 50%; margin-top: -11px; } +.ui-treeitem-count { float: right; position: relative; margin: 1em 5px; font-size: 11px; font-weight: bold; border-width: 0; padding: .2em .4em; background-image: none; } +.ui-treeitem-next { position: absolute; width: 30px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; padding: 0 5px; } +.ui-treeitem-next .ui-btn { overflow: hidden; position: absolute; right: 5px; top: 50%; margin-top: -11px; width: 20px; height: 20px; } +.ui-treeitem-next .ui-btn .ui-icon { right: 0; top: 0; margin: 0; } + +/*tree btn bar*/ +.ui-tree-header { overflow: hidden; } +.ui-tree-header-hidden { display: none; } +.ui-tree-section-title { text-align: center; font-size: 16px; } + +/*tabs*/ +.ui-tabs-nav { list-style:none; padding: 0; margin: 0; position: relative; display: block; border: 0; overflow: hidden; } +.ui-tabs-nav li { float: left; margin:0; padding:0; width: 33%; } +.ui-tabs-nav li .ui-btn { display: block; float: none; font-size: 12px; text-align: center; margin: 0 -1px 0 0; outline: none; border-top-width: 0; border-bottom-width: 0; } +.ui-tabs-body div.ui-tabs-panel { display:none; } +.ui-tabs-body div.ui-tabs-panel-selected { display:block; } + +/*globalnav*/ +.ui-globalnav { overflow: hidden; width: 100%; } +.ui-globalnav ul { list-style:none; padding: 0; margin: 0; position: relative; display: block; border: 0; float: left; width: 2000px; } +.ui-globalnav li { float: left; margin:0; padding:0; } +.ui-globalnav li .ui-btn { font-size: 12px; text-align: center; margin: 0 -1px 0 0; outline: none; border-top-width: 0; border-bottom-width: 0; } +.ui-globalnav li .ui-btn-inner { padding-left: 15px; padding-right: 15px; } + + +/* transitions, animations*/ + +/*spin +keyframes from jordandobson.com/webkit_loading_animation/resize/ + - note: can't this be shortened?? +*/ +.spin { +-webkit-animation-name: spin; +-webkit-animation-duration: 1s; +-webkit-animation-iteration-count: infinite; +} +@-webkit-keyframes spin { + 0%{ -webkit-transform: rotate(0deg); } + 8.32%{ -webkit-transform: rotate(0deg); } + 8.33%{ -webkit-transform: rotate(30deg); } + 16.65%{ -webkit-transform: rotate(30deg); } + 16.66%{ -webkit-transform: rotate(60deg); } + 24.99%{ -webkit-transform: rotate(60deg); } + 25%{ -webkit-transform: rotate(90deg); } + 33.32%{ -webkit-transform: rotate(90deg); } + 33.33%{ -webkit-transform: rotate(120deg); } + 41.65%{ -webkit-transform: rotate(120deg); } + 41.66%{ -webkit-transform: rotate(150deg); } + 49.99%{ -webkit-transform: rotate(150deg); } + 50%{ -webkit-transform: rotate(180deg); } + 58.32%{ -webkit-transform: rotate(180deg); } + 58.33%{ -webkit-transform: rotate(210deg); } + 66.65%{ -webkit-transform: rotate(210deg); } + 66.66%{ -webkit-transform: rotate(240deg); } + 74.99%{ -webkit-transform: rotate(240deg); } + 75%{ -webkit-transform: rotate(270deg); } + 83.32%{ -webkit-transform: rotate(270deg); } + 83.33%{ -webkit-transform: rotate(300deg); } + 91.65%{ -webkit-transform: rotate(300deg); } + 91.66%{ -webkit-transform: rotate(330deg); } + 100%{ -webkit-transform: rotate(330deg); } +} + +/* +-- transitions straight-up lifted from jQtouch - to be modified, renamed, removed, etc where needed +*/ +.in, .out { + -webkit-animation-timing-function: ease-in-out; + -webkit-animation-duration: 350ms; +} + +.slide.in { + -webkit-animation-name: slideinfromright; +} + +.slide.out { + -webkit-animation-name: slideouttoleft; +} + +.slide.in.reverse { + -webkit-animation-name: slideinfromleft; +} + +.slide.out.reverse { + -webkit-animation-name: slideouttoright; +} + +@-webkit-keyframes slideinfromright { + from { -webkit-transform: translateX(100%); } + to { -webkit-transform: translateX(0); } +} + +@-webkit-keyframes slideinfromleft { + from { -webkit-transform: translateX(-100%); } + to { -webkit-transform: translateX(0); } +} + +@-webkit-keyframes slideouttoleft { + from { -webkit-transform: translateX(0); } + to { -webkit-transform: translateX(-100%); } +} + +@-webkit-keyframes slideouttoright { + from { -webkit-transform: translateX(0); } + to { -webkit-transform: translateX(100%); } +} + +@-webkit-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} + +@-webkit-keyframes fadeout { + from { opacity: 1; } + to { opacity: 0; } +} + +.fade.in { + z-index: 10; + -webkit-animation-name: fadein; +} +.fade.out { + z-index: 0; +} + +.dissolve.in { + -webkit-animation-name: fadein; +} + +.dissolve.out { + -webkit-animation-name: fadeout; +} + + +.flip { + -webkit-animation-duration: .65s; +} + +.flip.in { + -webkit-animation-name: flipinfromleft; +} + +.flip.out { + -webkit-animation-name: flipouttoleft; +} + +/* Shake it all about */ + +.flip.in.reverse { + -webkit-animation-name: flipinfromright; +} + +.flip.out.reverse { + -webkit-animation-name: flipouttoright; +} + +@-webkit-keyframes flipinfromright { + from { -webkit-transform: rotateY(-180deg) scale(.8); } + to { -webkit-transform: rotateY(0) scale(1); } +} + +@-webkit-keyframes flipinfromleft { + from { -webkit-transform: rotateY(180deg) scale(.8); } + to { -webkit-transform: rotateY(0) scale(1); } +} + +@-webkit-keyframes flipouttoleft { + from { -webkit-transform: rotateY(0) scale(1); } + to { -webkit-transform: rotateY(-180deg) scale(.8); } +} + +@-webkit-keyframes flipouttoright { + from { -webkit-transform: rotateY(0) scale(1); } + to { -webkit-transform: rotateY(180deg) scale(.8); } +} + +.slideup.in { + -webkit-animation-name: slideup; + z-index: 10; +} + +.slideup.out { + -webkit-animation-name: dontmove; + z-index: 0; +} + +.slideup.out.reverse { + z-index: 10; + -webkit-animation-name: slidedown; +} + +.slideup.in.reverse { + z-index: 0; + -webkit-animation-name: dontmove; +} + + +@-webkit-keyframes slideup { + from { -webkit-transform: translateY(100%); } + to { -webkit-transform: translateY(0); } +} + +@-webkit-keyframes slidedown { + from { -webkit-transform: translateY(0); } + to { -webkit-transform: translateY(100%); } +} + +/* Hackish, but reliable. */ +@-webkit-keyframes dontmove { + from { opacity: 1; } + to { opacity: 1; } +} + +.swap { + -webkit-transform: perspective(800); + -webkit-animation-duration: .7s; +} +.swap.out { + -webkit-animation-name: swapouttoleft; +} +.swap.in { + -webkit-animation-name: swapinfromright; +} +.swap.out.reverse { + -webkit-animation-name: swapouttoright; +} +.swap.in.reverse { + -webkit-animation-name: swapinfromleft; +} +@-webkit-keyframes swapouttoright { + 0% { + -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg); + -webkit-animation-timing-function: ease-in-out; + } + 50% { + -webkit-transform: translate3d(-180px, 0px, -400px) rotateY(20deg); + -webkit-animation-timing-function: ease-in; + } + 100% { + -webkit-transform: translate3d(0px, 0px, -800px) rotateY(70deg); + } +} +@-webkit-keyframes swapouttoleft { + 0% { + -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg); + -webkit-animation-timing-function: ease-in-out; + } + 50% { + -webkit-transform: translate3d(180px, 0px, -400px) rotateY(-20deg); + -webkit-animation-timing-function: ease-in; + } + 100% { + -webkit-transform: translate3d(0px, 0px, -800px) rotateY(-70deg); + } +} +@-webkit-keyframes swapinfromright { + 0% { + -webkit-transform: translate3d(0px, 0px, -800px) rotateY(70deg); + -webkit-animation-timing-function: ease-out; + } + 50% { + -webkit-transform: translate3d(-180px, 0px, -400px) rotateY(20deg); + -webkit-animation-timing-function: ease-in-out; + } + 100% { + -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg); + } +} +@-webkit-keyframes swapinfromleft { + 0% { + -webkit-transform: translate3d(0px, 0px, -800px) rotateY(-70deg); + -webkit-animation-timing-function: ease-out; + } + 50% { + -webkit-transform: translate3d(180px, 0px, -400px) rotateY(-20deg); + -webkit-animation-timing-function: ease-in-out; + } + 100% { + -webkit-transform: translate3d(0px, 0px, 0px) rotateY(0deg); + } +} + + + + + + +.pop { + -webkit-transform-origin: 50% 50%; +} + +.pop.in { + -webkit-animation-name: popin; + z-index: 10; +} + +.pop.out.reverse { + -webkit-animation-name: popout; + z-index: 10; +} + +.pop.in.reverse { + z-index: 0; + -webkit-animation-name: dontmove; +} + +@-webkit-keyframes popin { + from { + -webkit-transform: scale(.2); + opacity: 0; + } + to { + -webkit-transform: scale(1); + opacity: 1; + } +} + +@-webkit-keyframes popout { + from { + -webkit-transform: scale(1); + opacity: 1; + } + to { + -webkit-transform: scale(.2); + opacity: 0; + } +} \ No newline at end of file diff --git a/css/theme.css b/css/theme.css new file mode 100644 index 00000000..901abe31 --- /dev/null +++ b/css/theme.css @@ -0,0 +1,153 @@ +/* +* jQuery Mobile Framework +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ + + + +/* themed containers +----------------------------------*/ +.ui-bar-a { border: 1px solid #2A2A2A; background: #111111; color: #fff; font-weight: bold; text-shadow: 0 -1px 1px #000; background-image: -moz-linear-gradient(top, #3c3c3c, #111111); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #3c3c3c),color-stop(1, #111111)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#3c3c3c', EndColorStr='#111111')"; } +.ui-bar-a, .ui-bar-a input, .ui-bar-a select, .ui-bar-a textarea, .ui-bar-a button { font-family: Helvetica, Arial, sans-serif; } +.ui-bar-a .ui-link-inherit { color: #fff; } +.ui-bar-a .ui-link { color: #7cc4e7; font-weight: bold; } + +.ui-body-a { border: 1px solid #2A2A2A; background: #333; color: #fff; text-shadow: 0 1px 0 #000; font-weight: normal; background-image: -moz-linear-gradient(top, #666666, #333333); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #333333),color-stop(1, #(top, #666666, #333333))); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#666666', EndColorStr='#333333)')"; } +.ui-body-a, .ui-body-a input, .ui-body-a select, .ui-body-a textarea, .ui-body-a button { font-family: Helvetica, Arial, sans-serif; } +.ui-body-a .ui-link-inherit { color: #fff; } +.ui-body-a .ui-link { color: #2489CE; font-weight: bold; } + + +.ui-bar-b { border: 1px solid #052331; background: #1a4068; color: #fff; font-weight: bold; text-shadow: 0 -1px 1px #000; background-image: -moz-linear-gradient(top, #274b71, #21466c); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #274b71),color-stop(1, #21466c)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#274b71', EndColorStr='#21466c')"; } +.ui-bar-b, .ui-bar-b input, .ui-bar-b select, .ui-bar-b textarea, .ui-bar-b button { font-family: Helvetica, Arial, sans-serif; } +.ui-bar-b .ui-link-inherit { color: #fff; } +.ui-bar-b .ui-link { color: #7cc4e7; font-weight: bold; } + +.ui-body-b { border: 1px solid #C6C6C6; background: #e6e7e8; color: #333333; text-shadow: 0 1px 0 #fff; font-weight: normal; background-image: -moz-linear-gradient(top, #d4d5d5, #c6c7c8); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #d4d5d5),color-stop(1, #c6c7c8)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#d4d5d5', EndColorStr='#c6c7c8')"; } +.ui-body-b, .ui-body-b input, .ui-body-b select, .ui-body-b textarea, .ui-body-b button { font-family: Helvetica, Arial, sans-serif; } +.ui-body-b .ui-link-inherit { color: #333333; } +.ui-body-b .ui-link { color: #2489CE; font-weight: bold; } + + +.ui-bar-c { border: 1px solid #B3B3B3; background: #dfe0e1; color: #3E3E3E; font-weight: bold; text-shadow: 0 1px 1px #fff; background-image: -moz-linear-gradient(top, #f2f2f2, #e9eaeb); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #f2f2f2),color-stop(1, #e9eaeb)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#f2f2f2', EndColorStr='#e9eaeb')"; } +.ui-bar-c, .ui-bar-c input, .ui-bar-c select, .ui-bar-c textarea, .ui-bar-c button { font-family: Helvetica, Arial, sans-serif; } + +.ui-body-c { border: 1px solid #B3B3B3; background: #fff; color: #333333; text-shadow: 0 1px 0 #fff; } +.ui-body-c, .ui-body-c input, .ui-body-c select, .ui-body-c textarea, .ui-body-c button { font-family: Helvetica, Arial, sans-serif; } +.ui-body-c .ui-link-inherit { color: #333333; } +.ui-body-c .ui-link { color: #2489CE; font-weight: bold; } + + +.ui-bar-d { border: 1px solid #F7C942; background: #fadb4e; color: #333; text-shadow: 0 1px 0 #fff; background-image: -moz-linear-gradient(top, #fceda7, #fadb4e); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fceda7),color-stop(1, #fadb4e)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fceda7', EndColorStr='#fadb4e')"; } +.ui-bar-d, .ui-bar-d input, .ui-bar-d select, .ui-bar-d textarea, .ui-bar-d button { font-family: Helvetica, Arial, sans-serif; } +.ui-bar-d .ui-link-inherit { color: #333; } +.ui-bar-d .ui-link { color: #2489CE; font-weight: bold; } + + +/* interaction states */ + +.ui-btn-up-a { border: 1px solid #000; background: #333333; font-weight: bold; color: #fff; cursor: pointer; text-shadow: 0 1px 1px #000; text-decoration: none; background-image: -moz-linear-gradient(top, #555555, #333333); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #555555),color-stop(1, #333333)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#555555', EndColorStr='#333333')"; } +.ui-btn-hover-a { border: 1px solid #000; background: #646464; font-weight: bold; color: #fff; text-shadow: 0 -1px 1px #000; text-decoration: none; background-image: -moz-linear-gradient(top, #848484, #646464); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #848484),color-stop(1, #646464)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#848484', EndColorStr='#646464')"; } +.ui-btn-down-a { border: 1px solid #000; background: #3d3d3d; font-weight: bold; color: #fff; text-shadow: 0 -1px 1px #000; background-image: -moz-linear-gradient(top, #333333, #5a5a5a); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #333333),color-stop(1, #5a5a5a)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#333333', EndColorStr='#5a5a5a')"; } + +.ui-btn-up-b { border: 1px solid #145072; background: #387bbe; font-weight: bold; color: #fff; cursor: pointer; text-shadow: 0 -1px 1px #145072; text-decoration: none; background-image: -moz-linear-gradient(top, #4e89c5, #2567ab); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #4e89c5),color-stop(1, #2567ab)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#4e89c5', EndColorStr='#2567ab')"; } +.ui-btn-hover-b { border: 1px solid #014D68; background: #5397d5; font-weight: bold; color: #fff; text-shadow: 0 -1px 1px #014D68; background-image: -moz-linear-gradient(top, #81b2e0, #397cbe); text-decoration: none; background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #81b2e0),color-stop(1, #397cbe)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#81b2e0', EndColorStr='#397cbe')"; } +.ui-btn-down-b { border: 1px solid #225377; background: #3577bb; font-weight: bold; color: #fff; text-shadow: 0 -1px 1px #225377; background-image: -moz-linear-gradient(top, #3577db, #6b9bcd); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #3577db),color-stop(1, #6b9bcd)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#3577db', EndColorStr='#6b9bcd')"; } + +.ui-btn-up-c { border: 1px solid #B3B3B3; background: #d0d4d2; font-weight: bold; color: #2F3E46; cursor: pointer; text-shadow: 0 -1px 1px #fff; text-decoration: none; background-image: -moz-linear-gradient(top, #e9ebea, #d0d4d2); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e9ebea),color-stop(1, #d0d4d2)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#e9ebea', EndColorStr='#d0d4d2')"; } +.ui-btn-hover-c { border: 1px solid #808080; background: #fff; font-weight: bold; color: #2F3E46; text-decoration: none; text-shadow: 0 -1px 1px #fff; background-image: -moz-linear-gradient(top, #fdfdfd, #f0f0f0); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fdfdfd),color-stop(1, #f0f0f0)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fdfdfd', EndColorStr='#f0f0f0')"; } +.ui-btn-down-c { border: 1px solid #808080; background: #ced0d2; font-weight: bold; color: #2F3E46; text-shadow: none; background-image: -moz-linear-gradient(top, #ced0d2, #e5e6e7); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #ced0d2),color-stop(1, #e5e6e7)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ced0d2', EndColorStr='#e5e6e7')"; } + +.ui-btn-up-d { border: 1px solid #F7C942; background: #fadb4e; font-weight: bold; color: #333; cursor: pointer; text-shadow: 0 -1px 1px #fff; text-decoration: none; text-shadow: 0 1px 0 #fff; background-image: -moz-linear-gradient(top, #fceda7, #fadb4e); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fceda7),color-stop(1, #fadb4e)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fceda7', EndColorStr='#fadb4e')"; } +.ui-btn-hover-d { border: 1px solid #F7C942; background: #fadb4e; font-weight: bold; color: #333; text-decoration: none; text-shadow: 0 -1px 1px #fff; background-image: -moz-linear-gradient(top, #fcfdb7, #fafb5e); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fcfdb7),color-stop(1, #fafb5e)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fcfdb7', EndColorStr='#fafb5e')"; } +.ui-btn-down-d { border: 1px solid #F7C942; background: #fadb4e; font-weight: bold; color: #333; text-shadow: none; background-image: -moz-linear-gradient(top, #fadb4e, #fceda7); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fadb4e),color-stop(1, #fceda7)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fadb4e', EndColorStr='#fceda7')"; } + + +/*lists*/ +.ui-btn-up-e { border: 1px solid #000; background: #333333; font-weight: bold; color: #fff; cursor: pointer; text-shadow: 0 1px 1px #000; text-decoration: none; background-image: -moz-linear-gradient(top, #555555, #333333); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #555555),color-stop(1, #333333)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#555555', EndColorStr='#333333')"; } +.ui-btn-hover-e { border: 1px solid #000; background: #646464; font-weight: bold; color: #fff; text-shadow: 0 -1px 1px #000; text-decoration: none; background-image: -moz-linear-gradient(top, #848484, #646464); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #848484),color-stop(1, #646464)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#848484', EndColorStr='#646464')"; } +.ui-btn-down-e { border: 1px solid #000; background: #3d3d3d; font-weight: bold; color: #fff; text-shadow: 0 -1px 1px #000; background-image: -moz-linear-gradient(top, #333333, #5a5a5a); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #333333),color-stop(1, #5a5a5a)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#333333', EndColorStr='#5a5a5a')"; } +.ui-btn-up-e, .ui-btn-hover-e, .ui-btn-down-e { font-family: Helvetica, Arial, sans-serif; } + +.ui-btn-up-f { border: 1px solid #B3B3B3; background: #d0d4d2; font-weight: bold; color: #2F3E46; cursor: pointer; text-shadow: 0 -1px 1px #fff; text-decoration: none; background-image: -moz-linear-gradient(top, #e9ebea, #d0d4d2); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e9ebea),color-stop(1, #d0d4d2)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#e9ebea', EndColorStr='#d0d4d2')"; } +.ui-btn-hover-f { border: 1px solid #808080; background: #fff; font-weight: bold; color: #2F3E46; text-decoration: none; text-shadow: 0 -1px 1px #fff; background-image: -moz-linear-gradient(top, #fdfdfd, #f0f0f0); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fdfdfd),color-stop(1, #f0f0f0)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fdfdfd', EndColorStr='#f0f0f0')"; } +.ui-btn-down-f { border: 1px solid #808080; background: #ced0d2; font-weight: bold; color: #2F3E46; text-shadow: none; background-image: -moz-linear-gradient(top, #ced0d2, #e5e6e7); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #ced0d2),color-stop(1, #e5e6e7)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ced0d2', EndColorStr='#e5e6e7')"; } +.ui-btn-up-f, .ui-btn-hover-f, .ui-btn-down-f { font-family: Helvetica, Arial, sans-serif; } + + +.ui-btn-active { border: 1px solid #145072; background: #387bbe; font-weight: bold; color: #fff; cursor: pointer; text-shadow: 0 -1px 1px #145072; text-decoration: none; background-image: -moz-linear-gradient(top, #4e89c5, #2567ab); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #4e89c5),color-stop(1, #2567ab)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#4e89c5', EndColorStr='#2567ab')"; /*-webkit-tap-highlight-color: #387bbe;*/ } + +.ui-focus { outline: none; -moz-box-shadow: 0px 0px 12px #387bbe; -webkit-box-shadow: 0px 0px 12px #387bbe; box-shadow: 0px 0px 12px #387bbe; } + +.ui-btn-inner { border-top: 1px solid #fff; border-color: rgba(255,255,255,.3); } + + + + +/* Container Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: .6em; -webkit-border-top-left-radius: .6em; border-top-left-radius: .6em; } +.ui-corner-tr { -moz-border-radius-topright: .6em; -webkit-border-top-right-radius: .6em; border-top-right-radius: .6em; } +.ui-corner-bl { -moz-border-radius-bottomleft: .6em; -webkit-border-bottom-left-radius: .6em; border-bottom-left-radius: .6em; } +.ui-corner-br { -moz-border-radius-bottomright: .6em; -webkit-border-bottom-right-radius: .6em; border-bottom-right-radius: .6em; } +.ui-corner-top { -moz-border-radius-topleft: .6em; -webkit-border-top-left-radius: .6em; border-top-left-radius: .6em; -moz-border-radius-topright: .6em; -webkit-border-top-right-radius: .6em; border-top-right-radius: .6em; } +.ui-corner-bottom { -moz-border-radius-bottomleft: .6em; -webkit-border-bottom-left-radius: .6em; border-bottom-left-radius: .6em; -moz-border-radius-bottomright: .6em; -webkit-border-bottom-right-radius: .6em; border-bottom-right-radius: .6em; } +.ui-corner-right { -moz-border-radius-topright: .6em; -webkit-border-top-right-radius: .6em; border-top-right-radius: .6em; -moz-border-radius-bottomright: .6em; -webkit-border-bottom-right-radius: .6em; border-bottom-right-radius: .6em; } +.ui-corner-left { -moz-border-radius-topleft: .6em; -webkit-border-top-left-radius: .6em; border-top-left-radius: .6em; -moz-border-radius-bottomleft: .6em; -webkit-border-bottom-left-radius: .6em; border-bottom-left-radius: .6em; } +.ui-corner-all { -moz-border-radius: .6em; -webkit-border-radius: .6em; border-radius: .6em; } + + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; opacity: .3; } + +/* Icons +----------------------------------*/ +.ui-icon { background-position: 50% 50%; background-repeat: no-repeat; background-color: #fff; background-color: rgba(0,0,0,.4); -moz-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px; } +/*icons with no bg needed*/ +.ui-icon-checkbox-off, +.ui-icon-checkbox-on, +.ui-icon-radio-off, +.ui-icon-radio-on { background-color: transparent; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } + +/*arrows*/ +.ui-icon-arrow-u { background-image: url(../images/icon-arrow-white-up.png); } +.ui-icon-arrow-r { background-image: url(../images/icon-arrow-white-right.png); } +.ui-icon-arrow-d { background-image: url(../images/icon-arrow-white-down.png); } +.ui-icon-arrow-l { background-image: url(../images/icon-arrow-white-left.png); } + +/*plus minus*/ +.ui-icon-plus { background-image: url(../images/icon-plus-white.png); } +.ui-icon-minus { background-image: url(../images/icon-minus-white.png); } + +/*checks,radios*/ +.ui-icon-checkbox-off { background-image: url(../images/form-check-off.png); } +.ui-icon-checkbox-on { background-image: url(../images/form-check-on.png); } +.ui-icon-radio-off { background-image: url(../images/form-radio-off.png); } +.ui-icon-radio-on { background-image: url(../images/form-radio-on.png); } + +/* loading icon */ +.ui-icon-loading { background-image: url(../images/ajax-loader.png); width: 40px; height: 40px; -moz-border-radius: 20px; -webkit-border-radius: 20px; border-radius: 20px; } +.ui-icon-loading-sml { background-image: url(../images/ajax-loader-sml.png); } + + +/* btn Corner radius */ +.ui-btn-corner-tl { -moz-border-radius-topleft: 1em; -webkit-border-top-left-radius: 1em; border-top-left-radius: 1em; } +.ui-btn-corner-tr { -moz-border-radius-topright: 1em; -webkit-border-top-right-radius: 1em; border-top-right-radius: 1em; } +.ui-btn-corner-bl { -moz-border-radius-bottomleft: 1em; -webkit-border-bottom-left-radius: 1em; border-bottom-left-radius: 1em; } +.ui-btn-corner-br { -moz-border-radius-bottomright: 1em; -webkit-border-bottom-right-radius: 1em; border-bottom-right-radius: 1em; } +.ui-btn-corner-top { -moz-border-radius-topleft: 1em; -webkit-border-top-left-radius: 1em; border-top-left-radius: 1em; -moz-border-radius-topright: 1em; -webkit-border-top-right-radius: 1em; border-top-right-radius: 1em; } +.ui-btn-corner-bottom { -moz-border-radius-bottomleft: 1em; -webkit-border-bottom-left-radius: 1em; border-bottom-left-radius: 1em; -moz-border-radius-bottomright: 1em; -webkit-border-bottom-right-radius: 1em; border-bottom-right-radius: 1em; } +.ui-btn-corner-right { -moz-border-radius-topright: 1em; -webkit-border-top-right-radius: 1em; border-top-right-radius: 1em; -moz-border-radius-bottomright: 1em; -webkit-border-bottom-right-radius: 1em; border-bottom-right-radius: 1em; } +.ui-btn-corner-left { -moz-border-radius-topleft: 1em; -webkit-border-top-left-radius: 1em; border-top-left-radius: 1em; -moz-border-radius-bottomleft: 1em; -webkit-border-bottom-left-radius: 1em; border-bottom-left-radius: 1em; } +.ui-btn-corner-all { -moz-border-radius: 1em; -webkit-border-radius: 1em; border-radius: 1em; -webkit-background-clip: padding-box;} + +/* Overlays */ +.ui-overlay { background: #666; opacity: .5; filter:Alpha(Opacity=50); position: absolute; width: 100%; height: 100%; } +.ui-overlay-shadow { -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6); -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6); box-shadow: 0px 0px 12px rgba(0,0,0,.6); } + +.ui-shadow { -moz-box-shadow: 0px 1px 4px rgba(0,0,0,.3); -webkit-box-shadow: 0px 1px 4px rgba(0,0,0,.3); box-shadow: 0px 1px 4px rgba(0,0,0,.3); } +.ui-bar-a .ui-shadow, .ui-bar-b .ui-shadow , .ui-bar-c .ui-shadow { -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3); -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3); box-shadow: 0px 1px 0 rgba(255,255,255,.3); } +.ui-icon-shadow { -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4); -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4); box-shadow: 0px 1px 0 rgba(255,255,255,.4); } diff --git a/experiments/photos/_photo1.html b/experiments/photos/_photo1.html new file mode 100644 index 00000000..6c1f1de9 --- /dev/null +++ b/experiments/photos/_photo1.html @@ -0,0 +1,34 @@ + + + + + jQuery Mobile Framework - Photo 1 + + + + + +
+ +
+

A bridge

+ Home +
+ +
+ + + photo-bridge + + +
+ + + + +
+ + + \ No newline at end of file diff --git a/experiments/photos/_photo2.html b/experiments/photos/_photo2.html new file mode 100644 index 00000000..67bdb736 --- /dev/null +++ b/experiments/photos/_photo2.html @@ -0,0 +1,35 @@ + + + + + jQuery Mobile Framework - Photo 1 + + + + + +
+ +
+

A canoe

+ Home +
+ +
+ + + photo-canoe + + +
+ + + + +
+ + + \ No newline at end of file diff --git a/experiments/photos/_photo3.html b/experiments/photos/_photo3.html new file mode 100644 index 00000000..a9be057c --- /dev/null +++ b/experiments/photos/_photo3.html @@ -0,0 +1,35 @@ + + + + + jQuery Mobile Framework - Photo 1 + + + + + +
+ +
+

A dock

+ Home +
+ +
+ + + photo-dock + + +
+ + + + +
+ + + \ No newline at end of file diff --git a/experiments/photos/_photo4.html b/experiments/photos/_photo4.html new file mode 100644 index 00000000..0a5242cc --- /dev/null +++ b/experiments/photos/_photo4.html @@ -0,0 +1,35 @@ + + + + + jQuery Mobile Framework - Photo 1 + + + + + +
+ +
+

A kayak

+ Home +
+ +
+ + + photo-kayak + + +
+ + + + +
+ + + \ No newline at end of file diff --git a/experiments/photos/_photo5.html b/experiments/photos/_photo5.html new file mode 100644 index 00000000..359bcc1c --- /dev/null +++ b/experiments/photos/_photo5.html @@ -0,0 +1,34 @@ + + + + + jQuery Mobile Framework - Photo 1 + + + + +
+ +
+

Nathan running

+ Home +
+ +
+ + + photo-run + + +
+ + + + +
+ + + \ No newline at end of file diff --git a/experiments/photos/_photo6.html b/experiments/photos/_photo6.html new file mode 100644 index 00000000..23b5480f --- /dev/null +++ b/experiments/photos/_photo6.html @@ -0,0 +1,34 @@ + + + + + jQuery Mobile Framework - Photo 1 + + + + + +
+ +
+

Sandy beach

+ Home +
+ +
+ + + photo-sand + + +
+ + + + +
+ + + \ No newline at end of file diff --git a/experiments/photos/images/photo-bridge.jpeg b/experiments/photos/images/photo-bridge.jpeg new file mode 100644 index 00000000..38615ef8 Binary files /dev/null and b/experiments/photos/images/photo-bridge.jpeg differ diff --git a/experiments/photos/images/photo-canoe.jpeg b/experiments/photos/images/photo-canoe.jpeg new file mode 100644 index 00000000..99502240 Binary files /dev/null and b/experiments/photos/images/photo-canoe.jpeg differ diff --git a/experiments/photos/images/photo-dock.jpeg b/experiments/photos/images/photo-dock.jpeg new file mode 100644 index 00000000..983256e3 Binary files /dev/null and b/experiments/photos/images/photo-dock.jpeg differ diff --git a/experiments/photos/images/photo-kayak.jpeg b/experiments/photos/images/photo-kayak.jpeg new file mode 100644 index 00000000..7be6a9e0 Binary files /dev/null and b/experiments/photos/images/photo-kayak.jpeg differ diff --git a/experiments/photos/images/photo-run.jpeg b/experiments/photos/images/photo-run.jpeg new file mode 100644 index 00000000..32f08742 Binary files /dev/null and b/experiments/photos/images/photo-run.jpeg differ diff --git a/experiments/photos/images/photo-sand.jpeg b/experiments/photos/images/photo-sand.jpeg new file mode 100644 index 00000000..161b77a4 Binary files /dev/null and b/experiments/photos/images/photo-sand.jpeg differ diff --git a/experiments/static-list-variations/_tree_static.html b/experiments/static-list-variations/_tree_static.html new file mode 100644 index 00000000..087a5dcd --- /dev/null +++ b/experiments/static-list-variations/_tree_static.html @@ -0,0 +1,263 @@ + + + + + jQuery Mobile Framework - ui-tree Example + + + + + + + +
+
My Documents
+ + +
+ + + +
+
    + + + + + + + + + + + + +
+
+ + + + +
+ +
+ + +
+ +
+ + + + +
+
    + + + + + + + + +
+
+ + + + + \ No newline at end of file diff --git a/experiments/static-list-variations/images/jb.jpg b/experiments/static-list-variations/images/jb.jpg new file mode 100644 index 00000000..1d4e5be2 Binary files /dev/null and b/experiments/static-list-variations/images/jb.jpg differ diff --git a/images/ajax-loader.gif b/images/ajax-loader.gif new file mode 100644 index 00000000..98969ca6 Binary files /dev/null and b/images/ajax-loader.gif differ diff --git a/images/ajax-loader.png b/images/ajax-loader.png new file mode 100644 index 00000000..677f51c9 Binary files /dev/null and b/images/ajax-loader.png differ diff --git a/images/form-check-off.png b/images/form-check-off.png new file mode 100644 index 00000000..54e2fe0f Binary files /dev/null and b/images/form-check-off.png differ diff --git a/images/form-check-on.png b/images/form-check-on.png new file mode 100644 index 00000000..e6daaaf8 Binary files /dev/null and b/images/form-check-on.png differ diff --git a/images/form-radio-off.png b/images/form-radio-off.png new file mode 100644 index 00000000..32bd4339 Binary files /dev/null and b/images/form-radio-off.png differ diff --git a/images/form-radio-on.png b/images/form-radio-on.png new file mode 100644 index 00000000..ddc40497 Binary files /dev/null and b/images/form-radio-on.png differ diff --git a/images/icon-arrow-white-down.png b/images/icon-arrow-white-down.png new file mode 100644 index 00000000..23408358 Binary files /dev/null and b/images/icon-arrow-white-down.png differ diff --git a/images/icon-arrow-white-left.png b/images/icon-arrow-white-left.png new file mode 100644 index 00000000..8f336748 Binary files /dev/null and b/images/icon-arrow-white-left.png differ diff --git a/images/icon-arrow-white-right.png b/images/icon-arrow-white-right.png new file mode 100644 index 00000000..86459d34 Binary files /dev/null and b/images/icon-arrow-white-right.png differ diff --git a/images/icon-arrow-white-up.png b/images/icon-arrow-white-up.png new file mode 100644 index 00000000..67f55245 Binary files /dev/null and b/images/icon-arrow-white-up.png differ diff --git a/images/icon-minus-white.png b/images/icon-minus-white.png new file mode 100644 index 00000000..52430bf1 Binary files /dev/null and b/images/icon-minus-white.png differ diff --git a/images/icon-plus-white.png b/images/icon-plus-white.png new file mode 100644 index 00000000..a6791dc9 Binary files /dev/null and b/images/icon-plus-white.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..3cd0b80f --- /dev/null +++ b/index.html @@ -0,0 +1,38 @@ + + + + + + jQuery UI Mobile Framework - Static Containers, States + + + + + + +
+ +
+
+

jQuery Mobile Theme Tests

+
+
+ + +
+ + + + \ No newline at end of file diff --git a/js/jQuery.bbq.js b/js/jQuery.bbq.js new file mode 100644 index 00000000..bcbf2483 --- /dev/null +++ b/js/jQuery.bbq.js @@ -0,0 +1,18 @@ +/* + * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010 + * http://benalman.com/projects/jquery-bbq-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this); \ No newline at end of file diff --git a/js/jQuery.buttonMarkup.js b/js/jQuery.buttonMarkup.js new file mode 100644 index 00000000..9b34b4c8 --- /dev/null +++ b/js/jQuery.buttonMarkup.js @@ -0,0 +1,49 @@ +/* +* jQuery Mobile Framework : sample plugin for making button-like links +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.buttonMarkup = function(options){ + return $(this).each(function(){ + var el = $(this); + var o = $.extend({ + theme: (function(){ + //if data-theme attr is present + if(el.is('[data-theme]')){ + return el.attr('data-theme'); + } + //if not, find closest theme container + if(el.parents('body').length){ + var themedParent = el.closest('[class*=ui-bar-]'); //this still catches ui-bar-blah... + return themedParent.length ? themedParent.attr('class').match(/ui-bar-([a-z])/)[1] : 'c'; + } + else { + return 'c'; + } + })(), + corners: true, + shadow: true, + iconshadow: true, + iconPos: el.attr('data-iconPos'), + icon: el.attr('data-icon') + },options); + + if(o.icon){ + o.icon = 'ui-icon-'+o.icon; + if(!o.iconPos){ o.iconPos = 'left'; } + } + + el + .attr('data-theme', o.theme) + .addClass('ui-btn ui-btn-up-'+ o.theme + (o.corners?' ui-btn-corner-all':'') + (o.iconPos? ' ui-btn-icon-'+o.iconPos : '')+ (o.shadow? ' ui-shadow' : '')) + .wrapInner('') + .prepend(o.iconPos ? '': '') + .wrapInner('') + .clickable(); + }); + +}; +})(jQuery); + diff --git a/js/jQuery.clickable.js b/js/jQuery.clickable.js new file mode 100644 index 00000000..74c56963 --- /dev/null +++ b/js/jQuery.clickable.js @@ -0,0 +1,34 @@ +/* +* jQuery Mobile Framework : sample scripting for manipulating themed interaction states +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.clickable = function(){ + return $(this).each(function(){ + var theme = $(this).attr('data-theme'); + $(this) + .mousedown(function(){ + $(this).removeClass('ui-btn-up-'+theme).addClass('ui-btn-down-'+theme); + }) + .mouseup(function(){ + $(this).removeClass('ui-btn-down-'+theme).addClass('ui-btn-up-'+theme); + }) + .bind('mouseover',function(){ + $(this).removeClass('ui-btn-up-'+theme).addClass('ui-btn-hover-'+theme); + }) + .bind('mouseout',function(){ + $(this).removeClass('ui-btn-hover-'+theme).addClass('ui-btn-up-'+theme); + }) + .bind('focus',function(){ + $(this).addClass('ui-focus'); + }) + .bind('blur',function(){ + $(this).removeClass('ui-focus'); + }); + }); +}; +})(jQuery); + + diff --git a/js/jQuery.collapsible.js b/js/jQuery.collapsible.js new file mode 100644 index 00000000..8fb76adb --- /dev/null +++ b/js/jQuery.collapsible.js @@ -0,0 +1,73 @@ +/* +* jQuery Mobile Framework : "collapsible" plugin (based on code from Filament Group,Inc) +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.collapsible = function(options){ + return $(this).each(function(){ + var o = $.extend({ + containerTheme: 'ui-body-c', + expandCueText: ' click to expand contents', + collapseCueText: ' click to collapse contents', + collapsed: $(this).is('[data-state="collapsed"]'), + heading: '>h1,>h2,>h3,>h4,>h5,>h6,>legend' + },options); + + //define + var collapsibleContain = $(this).addClass('ui-collapsible-contain '+o.containerTheme), + collapsibleHeading = $(this).find(o.heading).eq(0), + collapsibleContent = collapsibleContain.wrapInner('
').find('.ui-collapsible-content'); + + //replace collapsibleHeading if it's a legend + if(collapsibleHeading.is('legend')){ + collapsibleHeading = $('
'+ collapsibleHeading.html() +'
').insertBefore(collapsibleHeading); + collapsibleHeading.next().remove(); + } + + //drop heading in before content + collapsibleHeading.insertBefore(collapsibleContent); + + //modify markup & attributes + collapsibleHeading.addClass('ui-collapsible-heading ui-bar-c') //NOTE - THIS SHOULD USE A BODY CLASS + .append('') + .wrapInner(''); + + collapsibleHeading.find('a:eq(0)').prepend('').addClass('ui-link'); + + //events + collapsibleContain + .bind('collapse', function(){ + collapsibleHeading + .addClass('ui-collapsible-heading-collapsed') + .find('.ui-collapsible-heading-status').text(o.expandCueText); + + collapsibleHeading.find('.ui-icon').removeClass('ui-icon-minus').addClass('ui-icon-plus'); + collapsibleContent.addClass('ui-collapsible-content-collapsed').attr('aria-hidden',true); + + }) + .bind('expand', function(){ + collapsibleHeading + .removeClass('ui-collapsible-heading-collapsed') + .find('.ui-collapsible-heading-status').text(o.collapseCueText); + + collapsibleHeading.find('.ui-icon').removeClass('ui-icon-plus').addClass('ui-icon-minus'); + collapsibleContent.removeClass('ui-collapsible-content-collapsed').attr('aria-hidden',false); + + }) + .trigger(o.collapsed ? 'collapse' : 'expand'); + + collapsibleHeading.click(function(){ + if( collapsibleHeading.is('.ui-collapsible-heading-collapsed') ){ + collapsibleContain.trigger('expand'); + } + else { + collapsibleContain.trigger('collapse'); + } + return false; + }); + + }); +}; +})(jQuery); \ No newline at end of file diff --git a/js/jQuery.controlGroup.js b/js/jQuery.controlGroup.js new file mode 100644 index 00000000..955eab87 --- /dev/null +++ b/js/jQuery.controlGroup.js @@ -0,0 +1,35 @@ +/* +* jQuery Mobile Framework : prototype for "controlgroup" plugin - corner-rounding for groups of buttons, checks, radios, etc +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.controlgroup = function(options){ + var o = $.extend({ + direction: 'vertical' + },options); + + return $(this).each(function(){ + var groupheading = $(this).find('>legend'), + flCorners = o.direction == 'horizontal' ? ['ui-corner-left', 'ui-corner-right'] : ['ui-corner-top', 'ui-corner-bottom'], + type = $(this).find('input:eq(0)').attr('type'); + + //replace legend with more stylable replacement div + $('
'+ groupheading.html() +'
').insertBefore(groupheading); + groupheading.remove(); + + $(this).addClass('ui-controlgroup ui-controlgroup-'+o.direction); + + function flipClasses(els){ + els + .removeClass('ui-btn-corner-all ui-shadow') + .eq(0).addClass(flCorners[0]) + .end() + .filter(':last').addClass(flCorners[1]).addClass('ui-controlgroup-last'); + } + flipClasses($(this).find('.ui-btn')); + flipClasses($(this).find('.ui-btn-inner')); + }); +}; +})(jQuery); \ No newline at end of file diff --git a/js/jQuery.expandable.js b/js/jQuery.expandable.js new file mode 100644 index 00000000..545a79ab --- /dev/null +++ b/js/jQuery.expandable.js @@ -0,0 +1,85 @@ +/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) + * Licensed under the MIT License (LICENSE.txt). + * + * Version 1.0 + * + * Contributions by: + * - Karl Swedberg + */ + /*Note: options modified for jQuery mobile*/ + +(function($) { +$.fn.extend({ + expandable: function(givenOptions) { + var options = $.extend({ + duration: 'normal', + interval: 750, + within: 0, + by: 1, + init: false + }, givenOptions); + + return this.filter('textarea').each(function() { + var $this = $(this).css({ display: 'block', overflow: 'hidden' }), + minHeight = $this.height(), + heightDiff = this.offsetHeight - minHeight, + rowSize = ( parseInt($this.css('lineHeight'), 10) || parseInt($this.css('fontSize'), 10) ), + // $mirror is used for determining the height of the text within the textarea + // it isn't perfect but is pretty close + // white-space rules from: http://petesbloggerama.blogspot.com/2007/02/firefox-ie-word-wrap-word-break-tables.html + $mirror = $('
').appendTo('body'), + interval; + + // copy styles from textarea to mirror to mirror the textarea as best possible + $.each('borderTopWidth borderRightWidth borderBottomWidth borderLeftWidth paddingTop paddingRight paddingBottom paddingLeft fontSize fontFamily fontWeight fontStyle fontStretch fontVariant wordSpacing lineHeight width'.split(' '), function(i,prop) { + $mirror.css(prop, $this.css(prop)); + }); + + // setup events + $this + .bind('keypress', function(event) { if ( event.keyCode == '13' ) check(); }) + .bind('focus blur', function(event) { + if ( event.type == 'blur' ) clearInterval( interval ); + if ( event.type == 'focus' ) interval = setInterval(check, options.interval); + }); + + function check() { + var text = $this.val(), newHeight, height, usedHeight, usedRows, availableRows; + // copy textarea value to the $mirror + // encode any html passed in and replace new lines with a
+ // the   is to try and normalize browser behavior + $mirror.html( encodeHTML(text).replace(/\n/g, ' 
') ); + + height = $this[0].offsetHeight - heightDiff; + usedHeight = $mirror[0].offsetHeight - heightDiff; + usedRows = Math.floor(usedHeight / rowSize); + availableRows = Math.floor((height / rowSize) - usedRows); + + // adjust height if needed by either growing or shrinking the text area to within the specified bounds + if ( availableRows <= options.within ) { + newHeight = rowSize * (usedRows + Math.max(availableRows, 0) + options.by); + $this.stop().animate({ height: newHeight }, options.duration); + } else if ( availableRows > options.by + options.within ) { + newHeight = Math.max( height - (rowSize * (availableRows - (options.by + options.within))), minHeight ); + $this.stop().animate({ height: newHeight }, options.duration); + } + }; + if ( options.init ) check(); + }).end(); + } +}); + +function encodeHTML(text) { + var characters = { + '<' : '<', + '>' : '>', + '&' : '&', + '"' : '"', + '\'': ''', + '/' : '/' + }; + return (text + '').replace(/[<>&"'\/]/g, function(c) { + return characters[c]; + }); +} +})(jQuery); diff --git a/js/jQuery.fieldContain.js b/js/jQuery.fieldContain.js new file mode 100644 index 00000000..9f5001ac --- /dev/null +++ b/js/jQuery.fieldContain.js @@ -0,0 +1,14 @@ +/* +* jQuery Mobile Framework : prototype for "fieldcontain" plugin - simple class additions to make form row separators +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.fieldcontain = function(options){ + var o = $.extend({ + theme: 'c' + },options); + return $(this).addClass('ui-field-contain ui-body ui-body-'+o.theme); +}; +})(jQuery); \ No newline at end of file diff --git a/js/jQuery.fixHeaderFooter.js b/js/jQuery.fixHeaderFooter.js new file mode 100644 index 00000000..faecbb50 --- /dev/null +++ b/js/jQuery.fixHeaderFooter.js @@ -0,0 +1,94 @@ +/* +* jQuery Mobile Framework : prototype for "fixHeaderFooter" plugin - on-demand positioning for headers,footers +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.fixHeaderFooter = function(options){ + return $(this).each(function(){ + var el = $(this); + var o = $.extend({ + ignoreTargets: 'a,input,textarea,select,button,label,.ui-headfoot-placehold', + overlayOnly: el.find('.ui-fullscreen').length //if this is true, we should set the parent div to height 0 to force overlays...? + },options); + + var els = el.find('.ui-header,.ui-footer').wrap('
'), + posLoop = setInterval(function(){ els.trigger('setTop'); }, 20); + + //set placeholder heights, then bind custom events + els + .each(function(){ + var placehold = $(this).parents('.ui-headfoot-placehold:eq(0)'); + if(o.overlayOnly){ + $(this).parent().parent().height(0); + } + else{ + $(this).parent().parent().height($(this).parent().height()); + } + }) + .bind('setTop',function(){ + var fromTop = $.scrollY(), + screenHeight = window.innerHeight, + thisHeight = $(this).parent().outerHeight(); + return $(this).parent().css('top', ($(this).is('.ui-header')) ? fromTop : fromTop + screenHeight - thisHeight); + }) + .bind('overlayIn',function(){ + $(this).parent().addClass('ui-fixpos'); + if(o.overlayOnly){ + $(this).parent().parent().removeClass('ui-headfoot-hidden'); + } + return $(this).trigger('setTop'); + }) + .bind('overlayOut',function(){ + $(this).parent().removeClass('ui-fixpos'); + if(o.overlayOnly){ + $(this).parent().parent().addClass('ui-headfoot-hidden'); + } + return $(this); + }) + .bind('overlayToggle',function(){ + return $(this).parent().is('.ui-fixpos') ? $(this).trigger('overlayOut') : $(this).trigger('overlayIn'); + }) + .bind('mousedown',function(e){ + return false; + }) + .bind('click tap',function(e){ + e.stopImmediatePropagation(); + }); + + $(document) + .bind('tap',function(e){ + if( !$(e.target).closest(o.ignoreTargets).length ){ + els.trigger('overlayToggle'); + } + }) + .bind('scrollstart',function(){ + if(els.parent().is('.ui-fixpos')){ + els.data('visiblebeforescroll',true); + } + els.trigger('overlayOut'); + }) + .bind('scrollstop',function(){ + if(els.data('visiblebeforescroll')){ + els.removeData('visiblebeforescroll').trigger('overlayIn'); + } + }); + + $(window) + .bind('load',function(){ + els.trigger('overlayIn'); + setTimeout(function(){ + els.trigger('overlayOut'); + if(posLoop){ clearInterval(posLoop); } + }, 2000); + + if(o.overlayOnly){ + //to-do...for a photo-viewer or something full-screen + els.parents('.ui-headfoot-placehold:eq(0)').addClass('ui-headfoot-overlayonly'); + } + }) + .resize(function(){ els.trigger('overlayOut'); }); + }); +}; +})(jQuery); \ No newline at end of file diff --git a/js/jQuery.forms.button.js b/js/jQuery.forms.button.js new file mode 100644 index 00000000..7ab55e72 --- /dev/null +++ b/js/jQuery.forms.button.js @@ -0,0 +1,21 @@ +/* +* jQuery Mobile Framework : sample plugin for making button links that proxy to native input/buttons +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.customButton = function(){ + return $(this).each(function(){ + var button = $(this).addClass('ui-btn-hidden').attr('tabindex','-1'); + + $(''+ (button.text() || button.val()) +'') + .buttonMarkup({theme: button.attr('data-theme'), icon: button.attr('data-icon')}) + .click(function(){ + button.click(); + return false; + }) + .insertBefore(button); + }); +}; +})(jQuery); \ No newline at end of file diff --git a/js/jQuery.forms.checkboxradio.js b/js/jQuery.forms.checkboxradio.js new file mode 100644 index 00000000..d07b7bbf --- /dev/null +++ b/js/jQuery.forms.checkboxradio.js @@ -0,0 +1,70 @@ +/* +* jQuery Mobile Framework : "customCheckboxRadio" plugin (based on code from Filament Group,Inc) +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.customCheckboxRadio = function(options){ + return $(this).each(function(){ + if($(this).is('[type=checkbox],[type=radio]')){ + var input = $(this); + + var o = $.extend({ + theme: 'b', + icon: !input.parents('[data-type="horizontal"]').length, + checkedicon: 'ui-icon-'+input.attr('type')+'-on', + uncheckedicon: 'ui-icon-'+input.attr('type')+'-off' + },options); + + // get the associated label using the input's id + var label = $('label[for='+input.attr('id')+']').buttonMarkup({iconPos: o.icon ? 'left' : '', shadow: false}); + + var icon = label.find('.ui-icon'); + + // wrap the input + label in a div + input + .add(label) + .wrapAll('
'); + + // necessary for browsers that don't support the :hover pseudo class on labels + label + .mousedown(function(){ + $(this).data('state', input.attr('checked')); + }) + .click(function(){ + setTimeout(function(){ + if(input.attr('checked') == $(this).data('state')){ + input.trigger('click'); + } + }, 1); + }) + .clickable(); + + //bind custom event, trigger it, bind click,focus,blur events + input.bind('updateState', function(){ + if(input.is(':checked')){ + label.addClass('ui-btn-active'); + icon.addClass(o.checkedicon); + icon.removeClass(o.uncheckedicon); + } + else { + label.removeClass('ui-btn-active'); + icon.removeClass(o.checkedicon); + icon.addClass(o.uncheckedicon); + } + if(!input.is(':checked')){ label.removeClass('ui-focus'); } + }) + .trigger('updateState') + .click(function(){ + $('input[name='+ $(this).attr('name') +']').trigger('updateState'); + }) + .focus(function(){ + label.addClass('ui-focus'); + if(input.is(':checked')){ label.addClass('ui-focus'); } + }) + .blur(function(){ label.removeClass('ui-focus'); }); + } + }); +}; +})(jQuery); \ No newline at end of file diff --git a/js/jQuery.forms.select.js b/js/jQuery.forms.select.js new file mode 100644 index 00000000..0a2be371 --- /dev/null +++ b/js/jQuery.forms.select.js @@ -0,0 +1,204 @@ +/* +* jQuery Mobile Framework : "customSelect" plugin (based on code from Filament Group,Inc) +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.customSelect = function(options){ + return $(this).each(function(){ + //extendable options + var o = $.extend({ + backText: 'Back', + chooseText: 'Choose one:', + inline: false + }, options); + + var select = $(this), + label = $('label[for='+ select.attr('id') +']').addClass('ui-select'), + buttonId = select.attr('id')+'-button', + menuId = select.attr('id')+'-menu', + thisPage = $(this).closest('.ui-page'); + + //select properties,events + select + .change(function(){ + button.find('.ui-btn-text').text(select.val()); + }) + .focus(function(){ + $(this).blur(); + button.focus(); + }) + .wrap('
') + .attr('tabindex','-1') + .bind('showmenu',function(){ + $(document).data('currScroll', [$(window).scrollLeft(), $(window).scrollTop()]); + if(menuHeight > window.innerHeight - 80){ + menuType = "page"; + thisPage.find('.ui-content').addClass('ui-content-hidden'); + listbox.removeClass('ui-listbox-overlay'); + } + else { + menuType = "overlay"; + listbox.addClass('ui-listbox-overlay').css({ + top: $(window).scrollTop() + (window.innerHeight/2), + 'margin-top': -menuHeight/2, + left: window.innerWidth/2 + }); + } + + screen.css({width: $(window).width(), height: $(document).height()}).removeClass('ui-helper-hidden out').addClass('in'); + listbox.removeClass('ui-listbox-hidden'); + var selectedLI = list.find('.ui-btn-active').focus(); + + if(menuType == "page"){ + $(window)[0].scrollTo(0, 0); + listbox.addClass('slideup in'); + } + else{ + listbox.addClass('pop in'); + } + + }) + .bind('hidemenu',function(){ + screen.addClass('ui-helper-hidden out'); + listbox.removeAttr('style').removeClass('in').addClass('ui-listbox-hidden out'); + thisPage.find('.ui-content').removeClass('ui-content-hidden'); + setTimeout(function(){ + button.focus(); + if(menuType == "page"){ + $(window)[0].scrollTo($(document).data('currScroll')[0], $(document).data('currScroll')[1]); + if(button.offset().top > window.innerHeight){ + $(window)[0].scrollTo(0, button.offset().top); + } + } + }, 50); + }); + + //create menu button + var button = $(''+ select.val() +'') + .buttonMarkup({ + iconPos: 'right', + icon: 'arrow-d' + }) + .attr({ + 'role': 'button', + 'title': 'select menu', + 'id': buttonId, + 'aria-haspopup': 'true', + 'aria-owns': menuId + }) + .mousedown(function(){ + select.trigger('showmenu'); + return false; + }) + .insertBefore(select); + + //create menu + var listbox = $(''); + + //menu header + $('
'+ o.chooseText +'
') + .prepend( $(''+ o.backText +'').buttonMarkup({icon: 'arrow-l'}) ) + .appendTo(listbox); + + var list = $('
    ').appendTo(listbox); + + //populate menu + select.find('option').each(function(i){ + var thisclass = select[0].selectedIndex == i ? 'ui-btn-active' : ''; + var thisselected = select[0].selectedIndex == i ? ' aria-selected="true"' : ''; + $('
  • ') + .append( $(''+ $(this).text() +'').buttonMarkup().addClass(thisclass) ) + .appendTo(list); + }); + + //group items in a vertical listbox style (corners pilled) + list.controlgroup(); + + //apply click events for items + list.find('a') + .click(function(){ + list.find('[aria-selected=true]').removeClass('ui-btn-active').attr('aria-selected',false); + $(this).addClass('ui-btn-active').attr('aria-selected', true); + var newIndex = list.find('a').index(this), + prevIndex = select[0].selectedIndex; + select[0].selectedIndex = list.find('a').index(this); + if(newIndex != prevIndex){ + select.trigger('change'); + } + select.trigger('hidemenu'); + return false; + }); + + //back button + listbox.find('.ui-listbox-header a').click(function(){ + select.trigger('hidemenu'); + }); + + + //keyboard events for menu items + list.keydown(function(event){ + if( !$(this).is('.ui-btn') ){ + //switch logic based on which key was pressed + switch(event.keyCode){ + //up or left arrow keys + case 37: + case 38: + //if there's a previous option, focus it + if( $(event.target).parent().prev().length ){ + $(event.target).blur().parent().prev().find('a').eq(0).focus(); + } + //prevent native scroll + return false; + break; + //down or right arrow keys + case 39: + case 40: + //if there's a next option, focus it + if( $(event.target).parent().next().length ){ + $(event.target).blur().parent().next().find('a').eq(0).focus(); + } + //prevent native scroll + return false; + break; + //if enter or space is pressed in menu, trigger click + case 13: + case 32: + $(event.target).trigger('click'); //should trigger select + return false; + break; + //tab returns focus to the menu button, and then automatically shifts focus to the next focusable element on the page + case 9: + select.trigger('hidemenu'); + break; + event.preventDefault(); + } + } + }); + + + //add list to page + listbox.insertAfter(thisPage.find('.ui-content:eq(0)')); + var screen = $('
    ').insertBefore(listbox); + + //get height for figuring out overlay vs. paged + var menuHeight = list.outerHeight(); + + //menu type + var menuType = "page"; + + //hide it + listbox.addClass('ui-listbox-hidden'); + + //hide on outside click + screen.click(function(){ + listbox.addClass('ui-listbox-hidden out'); + screen.addClass('ui-helper-hidden out'); + $('.ui-page').find('.ui-content').removeClass('ui-content-hidden'); + }); + }); +}; + +})(jQuery); + diff --git a/js/jQuery.forms.textinput.js b/js/jQuery.forms.textinput.js new file mode 100644 index 00000000..3dd74677 --- /dev/null +++ b/js/jQuery.forms.textinput.js @@ -0,0 +1,33 @@ +/* +* jQuery Mobile Framework : "customTextInput" plugin for text inputs, textareas (based on code from Filament Group,Inc) +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +jQuery.fn.customTextInput = function(options){ + return $(this).each(function(){ + var input = $(this); + + var o = $.extend({ + //defaultTheme: "a" + }, options); + + $('label[for='+input.attr('id')+']').addClass('ui-input-text'); + + input + .addClass('ui-corner-all ui-body-c ui-input-text') + .focus(function(){ + $(this).addClass('ui-focus'); + }) + .blur(function(){ + $(this).removeClass('ui-focus'); + }); + + //autogrow + if(input.is('textarea')){ + input.expandable(); + } + }); +}; +})(jQuery); diff --git a/js/jQuery.globalnav.js b/js/jQuery.globalnav.js new file mode 100755 index 00000000..bcb937a8 --- /dev/null +++ b/js/jQuery.globalnav.js @@ -0,0 +1,26 @@ +/* +* jQuery Mobile Framework : prototype for "tabs" plugin (based on code from Filament Group,Inc) +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.globalnav = function(settings){ + return $(this).each(function(){ + //configurable options + var o = $.extend({},settings); + + var globalnav = $(this).wrap('
    '); + + globalnav.find('a').buttonMarkup({corners: false, iconPos: 'top', icon: 'arrow-u'}); + + var pageFooter = globalnav.parents('.ui-page:eq(0)').find('.ui-footer'); + if( !pageFooter.length ){ + pageFooter = $('').appendTo(globalnav.parents('.ui-page:eq(0)')); + } + + //add to footer + globalnav.prependTo(pageFooter); + }); +}; +})(jQuery); \ No newline at end of file diff --git a/js/jQuery.mobile.js b/js/jQuery.mobile.js new file mode 100644 index 00000000..f4607b5a --- /dev/null +++ b/js/jQuery.mobile.js @@ -0,0 +1,469 @@ +/* +* jQuery Mobile Framework +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change!! + - This file adds properties to $.support, +*/ + +(function($,window,undefined){ + + var $window = $(window), + $html = $('html'), + $head = $('head'), + $body, + $loader = $('

    loading.

    '), + startPage, + startPageId = 'ui-page-start', + activePageClass = 'ui-page-active', + transitions = 'slide slideup pop flip fade dissolve swap', + transitionSpecified = false, + currentTransition = 'slide', + transitionDuration = 350, + orientation, + backBtnText = "Back", + prevUrl = location.hash, + //vars for custom event tracking + scrolling = false, + touching = false, + touchstartdata, + touchstopdata, + tapNotMoveTime = 50, + tapHoldTime = 700, + maxSwipeTime = 1000, + minSwipeXDistance = 180, + maxSwipeYtolerance = 80; + + /* + add some properties to $.support + - Notes: + - add $.support.scrollTop ? + - CSS matrix support needed? + */ + $.support.orientation = !!window.orientation; + + //ajax support: to use bbq-style navigation with external pages, we will need to first test for ajax support (and fall back to normal urls) + //note: maybe core should be updated with this support property? + $.support.ajax = (function(){ + //factory test borrowed from quirksmode.org + var xmlhttp = false, index = -1, factory, + XMLHttpFactories = [ + function() { return new XMLHttpRequest() }, + function() { return new ActiveXObject("Msxml2.XMLHTTP") }, + function() { return new ActiveXObject("Msxml3.XMLHTTP") }, + function() { return new ActiveXObject("Microsoft.XMLHTTP") } + ]; + while ((factory = XMLHttpFactories[++index])) { + try { xmlhttp = factory(); } + catch (e) { continue; } + break; + } + return !!xmlhttp; + })(); + + /* Some CSS capability tests from EnhanceJS -- in the vein of $.support.boxmodel -- almost certainly needed for widgets to work + * note: assuming they work in Firefox 4, these can run without domready (currently FF4 beta won't report these offset dimensions before body is present) + */ + //test CSS display none + $.support.display = (function(){ + var fakeBody = $('').prependTo($html), + testDiv = $('
    ').prependTo(fakeBody), + divHeight = testDiv[0].offsetHeight; //note: jQuery .height() returned "5" + fakeBody.remove(); + return divHeight === 0; + })(); + + //test CSS absolute positioning + $.support.position = (function(){ + var fakeBody = $('').prependTo($html), + testDiv = $('
    ').prependTo(fakeBody), + divLeft = testDiv[0].offsetLeft; + fakeBody.remove(); + return divLeft === 10; + })(); + + //test CSS overflow (used in widgets for clearfix, hiding, etc) + $.support.overflow = (function(){ + var fakeBody = $('').prependTo($html), + testDiv = $('
    ').prependTo(fakeBody), + divHeight = testDiv[0].offsetHeight; + fakeBody.remove(); + return divHeight === 0; + })(); + + //test CSS float,clear + $.support.floatclear = (function(){ + var fakeBody = $('').prependTo($html), + pass = false, + innerStyle = 'style="width: 5px; height: 5px; float: left;"', + testDiv = $('
    ').prependTo(fakeBody), + kids = testDiv[0].childNodes, + topA = kids[0].offsetTop, + divB = kids[1], + topB = divB.offsetTop; + if (topA === topB) { + divB.style.clear = 'left'; + topB = divB.offsetTop; + if (topA !== topB) { + pass = true; + } + } + fakeBody.remove(); + return pass; + })(); + + //right about here, we *could* make sure all of the above css support props are true, if not, return and leave the page usable fercryin'outloud + if(!$.support.display || !$.support.position || !$.support.overflow || !$.support.floatclear ) { return; } + + //support properties from jQtouch + $.support.touch = (typeof Touch == "object"); + $.support.WebKitAnimationEvent = (typeof WebKitTransitionEvent == "object"); + + /* + add some core behavior,events + */ + + //test whether a CSS media type or query applies (adapted from work by Scott Jehl & Paul Irish: http://gist.github.com/557891) + $.media = (function(){ + if ( (window.media && media.matchMedium) ){ + //use native support if available + return media.matchMedium; + } + var cache = {}, + testDiv = $('
    '), + fakeBody = $('').append(testDiv); + return function(q){ + if (cache[q] === undefined) { + var styleBlock = $(''); + var cssrule = '@media '+q+' { #jq-mediatest { position: absolute; } }'; + if (styleBlock[0].styleSheet){ + styleBlock[0].styleSheet.cssText = cssrule; + } + else { + styleBlock.text(cssrule); + } + $html.prepend(fakeBody).prepend(styleBlock); + cache[q] = ((window.getComputedStyle ? window.getComputedStyle(testDiv[0],null) : testDiv[0].currentStyle)['position'] == 'absolute'); + fakeBody.add(styleBlock).remove(); + } + return cache[q]; + }; + })(); + + //hide Address bar + function hideBrowserChrome(){ + //kill addr bar + window.scrollTo(0,0); + } + + //get vert scroll dist + $.scrollY = function(){ + return $(window).scrollTop(); //always returns 0 WebOS!! HELP! http://jsbin.com/unufu3/5/edit + }; + + //add new event shortcuts + $.each( ("touchstart touchmove touchend orientationchange tap swipe swipeleft swiperight scrollstart scrollstop").split(" "), function( i, name ) { + // Handle event binding + $.fn[ name ] = function( fn ) { + return fn ? this.live( name, fn ) : this.trigger( name ); + }; + if ( $.attrFn ) { + $.attrFn[ name ] = true; + } + }); + + + + + //detect and trigger some custom events (scrollstart,scrollstop,tap,taphold,swipe,swipeleft,swiperight) + $(document) + .scroll(function(e){ + var prevscroll = $.scrollY(); + function checkscrollstop(){ + if(prevscroll === $.scrollY()){ + $body.trigger('scrollstop'); + scrolling = false; + } + } + setTimeout(checkscrollstop,50); + }) + .bind( ($.support.touch ? 'touchmove' : 'scroll'), function(e){ + //iPhone triggers scroll a tad late - touchmoved preferred + if(!scrolling){ + scrolling = true; + $body.trigger('scrollstart'); //good place to trigger? + } + }) + .bind( ($.support.touch ? 'touchstart' : 'mousedown'), function(e){ + touching = true; + //make sure it's not a touchmove and still touching + function checktap(eType){ + if(!scrolling && touching){ + $(e.target).trigger(eType); + } + } + //tap / taphold detection timeouts (make sure it's not a touchmove & before firing) + setTimeout(checktap, tapNotMoveTime, ['tap']); + setTimeout(checktap, tapHoldTime, ['taphold']); + + //cache data from touch start - for later use in swipe testing + var eScope = e.originalEvent.touches ? e.originalEvent.touches[0] : e; + touchstartdata = { + 'time': (new Date).getTime(), + 'coords': [eScope.pageX, eScope.pageY], + 'origin': $(e.target) + }; + }) + .bind(($.support.touch ? 'touchmove' : 'mousemove'), function(e){ + if(touchstartdata){ + var eScope = e.originalEvent.touches ? e.originalEvent.touches[0] : e; + touchstopdata = { + 'time': (new Date).getTime(), + 'coords': [eScope.pageX, eScope.pageY] + }; + //trying not to interfere with scrolling here... + //this may need to be expanded to any non-y movement... + if(Math.abs(touchstartdata.coords[0] - touchstopdata.coords[0]) > 10){ + e.preventDefault(); + } + } + }) + .bind(($.support.touch ? 'touchend' : 'mouseup'), function(e){ + touching = false; + if(touchstartdata && touchstopdata){ + //detect whether a swipe occurred, trigger it + if( touchstopdata.time - touchstartdata.time < maxSwipeTime && + Math.abs(touchstartdata.coords[0] - touchstopdata.coords[0]) > minSwipeXDistance && + Math.abs(touchstartdata.coords[1] - touchstopdata.coords[1]) < maxSwipeYtolerance ){ + touchstartdata.origin.trigger('swipe'); + touchstartdata.origin.trigger( (touchstartdata.coords[0] > touchstopdata.coords[0] ? 'swipeleft' : 'swiperight')); + } + } + touchstartdata = touchstopdata = null; + }); + + //add orientation class on flip/resize. This should probably use special events. Also, any drawbacks to just using resize? + $window.bind( ($.support.orientation ? 'orientationchange' : 'resize'), updateOrientation); + + //orientation change classname logic - logic borrowed/modified from jQtouch + function updateOrientation() { + var neworientation = window.innerWidth < window.innerHeight ? 'portrait' : 'landscape'; + if(orientation !== neworientation){ + $body.trigger('turn', {orientation: orientation}); //temp event name + } + orientation = neworientation; + $html.removeClass('portrait landscape').addClass(orientation); + } + + //add mobile, loading classes to doc + $html.addClass('ui-mobile'); + + //insert mobile meta (any other metas needed? webapp? iPhone icon? etc) + $head.append(''); + + //send a link through hash tracking + $.fn.ajaxClick = function(){ + var href = $(this).attr( "href" ), + transitionAttr = $(this).attr('data-transition'); + + if(transitionAttr){ + currentTransition = transitionAttr; + transitionSpecified = true; + } + else{ + transitionSpecified = false; + } + prevUrl = $.bbq.getState('url'); + $.bbq.pushState({ url: href }); + //note: if it's a non-local-anchor and Ajax is not supported, go to page + if(href.match(/^[^#]/) && !$.support.ajax){ + window.location = href; + } + else { + return false; + } + }; + + //ajaxify all navigable links + $('a:not([href="#"])').live('click',function(e){ + if ($(this).is('[target=_blank]') || $(this).is('[rel=external]')){ return true; } + $(this).ajaxClick(); + return false; + }); + + //turn on/off page loading message.. also hides the ui-content div + function pageLoading(done){ + if(done){ + //remove loading msg + $html.removeClass('ui-loading'); + //fade in page content, remove loading msg + $('.ui-page-active .ui-content')//.addClass('dissolve in'); + } + else{ + $html.addClass('ui-loading'); + $loader.appendTo($body).addClass('dissolve in'); + } + }; + + //transition between pages - based on transitions from jQtouch + function changePage(from,to,back){ + hideBrowserChrome(); + + if(!back && !transitionSpecified){ currentTransition = 'slide'; } + + //kill keyboard (thx jQtouch :) ) + $(':focus').blur(); + + //animate in / out + from.addClass(currentTransition + ' out ' + (back ? 'reverse':'')); + to.appendTo('body').addClass(activePageClass + ' ' + currentTransition + ' in ' + (back ? 'reverse':'')); + + //callback - remove classes, etc + to.animationComplete(function(){ + from.add(to).removeClass(' out in reverse '+ transitions); + from.removeClass(activePageClass); + pageLoading(true); + }); + if(back){ currentTransition = 'slide'; } + }; + + //potential (probably incomplete) fallback to workaround lack of animation callbacks. + //should this be extended into a full special event? + // note: Expects CSS animations use transitionDuration (350ms) + $.fn.animationComplete = function(callback){ + if($.support.WebKitAnimationEvent){ + $(this).one('webkitAnimationEnd', callback); + } + else{ + setTimeout(callback, transitionDuration); + } + }; + + //markup-driven enhancements, to be called on any ui-page upon loading + function mobilize($el){ + return $el.each(function(){ + //checkboxes, radios + $el.find('input[type=radio],input[type=checkbox]').customCheckboxRadio(); + //custom buttons + $el.find('button, input[type=submit]').customButton(); + //custom text inputs + $el.find('input[type=text],input[type=password],textarea').customTextInput(); + //collapsible groupings + $el.find('[data-role="collapsible"]').collapsible(); + //single-field separators + $el.find('.field').fieldcontain(); + //selects + $el.find('select').customSelect(); + //tabs + $('[data-role="tabs"]').tabs({fixedAsFooter:true}); + //global nav + $('[data-role="globalnav"]').globalnav(); + //fix toolbars + $el.fixHeaderFooter(); + //buttons from links in headers,footers,bars, or with data-role + $('.ui-header a, .ui-footer a, .ui-bar a, [data-role="button"]').not('.ui-btn').buttonMarkup(); + //vertical controlgroups + $el.find('[data-role="controlgroup"]:not([data-type="horizontal"])').controlgroup(); + //horizontal controlgroups + $el.find('[data-role="controlgroup"][data-type="horizontal"]').controlgroup({direction: 'horizontal'}); + //tree from data role + $el.find('[data-role="tree"]').tree(); + //links within content areas + $el.find('.ui-body a:not(.ui-btn):not(.ui-link-inherit)').addClass('ui-link'); + //rewrite "home" links to mimic the back button (pre-js, these links are usually "home" links) + var backBtn = $el.find('.ui-header a.ui-back'); + if(!backBtn.length){ + backBtn = $('').appendTo($el.find('.ui-header')).buttonMarkup(); + } + backBtn + .click(function(){ + history.go(-1); + return false; + }) + .find('.ui-btn-text').text(backBtnText); + }); + }; + + //swipe left always triggers a back + $(document).swipeleft(function(){ + history.go(-1); + return false; + }); + + //dom-ready + $(function(){ + //set the page loader up + pageLoading(); + + //define body + $body = $('body'); + + //hashchange for page state tracking - uses bbq. - needs to be bound at domready (for IE6 Ben?) + //When document.location.hash changes, find or load content, make it active + $window.bind( "hashchange", function(e){ + var url = e.getState('url'), + back = (url === prevUrl); + + if(url){ + //see if content is present - NOTE: local urls aren't working right now - need logic to kill # + var localDiv = $('[id="'+url+'"]'); + if(localDiv.length){ + changePage($('.ui-page-active'), localDiv, back); + pageLoading(true); + } + else { //ajax it in + pageLoading(); + var newPage = $('
    ') + .appendTo($body) + .load(url + ' .ui-page',function(){ + //dumping in HTML() from ui-page div - cleaner way? + $(this).html( $(this).find('.ui-page:eq(0)').html() ); + mobilize($(this)); + changePage($('.ui-page-active'), $(this), back); + pageLoading(true); + }); + } + } + else{ + //either... + // we've backed up to the root page url, + // it's a plugin state + //or it's the first page load with no hash present + var currentPage = $('.ui-page-active'); + if( currentPage.length && !startPage.is('.ui-page-active')){ + changePage(currentPage, startPage, back); + } + else{ + startPage.addClass(activePageClass); + } + pageLoading(true); + } + }); + + //mobilize all pages present + mobilize($('.ui-page')); + + //set up active page - mobilize it! + startPage = $('body > .ui-page:first'); + + //make sure it has an ID - for finding it later + if(!startPage.attr('id')){ + startPage.attr('id', startPageId); + } + + //trigger a new hashchange, hash or not + $window.trigger( "hashchange" ); + + //... this shouldn't be needed, but chrome isn't getting it sometimes + setTimeout(function(){ pageLoading(true); }, 3000); + + //update orientation + updateOrientation(); + + //some debug stuff for the events pages + $('body').bind('scrollstart scrollstop swipe swipeleft swiperight tap taphold turn',function(e){ + $('#eventlogger').prepend('
    Event fired: '+ e.type +'
    '); + }); + + }); +})(jQuery, this); \ No newline at end of file diff --git a/js/jQuery.tabs.js b/js/jQuery.tabs.js new file mode 100755 index 00000000..4a7320ab --- /dev/null +++ b/js/jQuery.tabs.js @@ -0,0 +1,181 @@ +/* +* jQuery Mobile Framework : prototype for "tabs" plugin (based on code from Filament Group,Inc) +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.tabs = function(settings){ + //configurable options + var o = $.extend({ + trackState: true, + alwaysScrollToTop: true, + fixedAsFooter: false + },settings); + + return $(this).each(function(){ + //reference to tabs container + var tabs = $(this); + + //set app mode + $(this).attr('role','application'); + + //nav is first ul + var tabsNav = tabs.find('ul:first'); + + //body is nav's next sibling + var tabsBody = $(tabsNav.find('a:eq(0)').attr('href')).parent(); + + var tabIDprefix = 'ui-tab-'; + + var tabIDsuffix = '-enhanced'; + + //add class to nav, tab body + tabsNav + .addClass('ui-tabs-nav '+(o.fixedAsFooter?'ui-bar-a':'ui-bar-c')) + .attr('role','tablist'); + + tabsBody + .addClass('ui-tabs-body ui-body ui-body-c'); + + //find tab panels, add class and aria + tabsBody.find('>div').each(function(){ + $(this) + .addClass('ui-tabs-panel') + .attr('role','tabpanel') + .attr('aria-hidden', true) + .attr('aria-labelledby', tabIDprefix + $(this).attr('id')) + .attr('id', $(this).attr('id') + tabIDsuffix); + }); + + //set role of each tab + tabsNav.find('li').each(function(){ + $(this) + .attr('role','tab') + .attr('id', tabIDprefix+$(this).find('a').attr('href').split('#')[1]); + }) + .width(100/tabsNav.find('li').length+'%'); + + + //switch selected on click + tabsNav + .find('a') + .attr('tabindex','-1') + .buttonMarkup({corners: false, iconPos: (o.fixedAsFooter?'top':'bottom'), icon: (o.fixedAsFooter?'arrow-u':'arrow-d')}); + + //generic select tab function + function selectTab(tab,fromHashChange){ + if(o.trackState && !fromHashChange){ + $.bbq.pushState({'tab': tab.attr('href')}); + } + else{ + //unselect tabs + tabsNav.find('li.ui-tabs-selected') + .removeClass('ui-tabs-selected') + .find('a') + .removeClass('ui-btn-active') + .attr('tabindex','-1'); + //set selected tab item + tab + .attr('tabindex','0') + .addClass('ui-btn-active') + .parent() + .addClass('ui-tabs-selected'); + //unselect panels + tabsBody.find('div.ui-tabs-panel-selected').attr('aria-hidden',true).removeClass('ui-tabs-panel-selected'); + //select active panel + $( tab.attr('href') + tabIDsuffix ).addClass('ui-tabs-panel-selected').attr('aria-hidden',false); + + if(o.fixedAsFooter){ + //window.scrollTo(0,0); + $('.ui-fixed-top,.ui-fixed-bottom').trigger('overlayIn'); + setTimeout(function(){ $('.ui-fixed-top,.ui-fixed-bottom').trigger('setTop'); },100); + } + + } + }; + + + tabsNav.find('a') + .click(function(e){ + selectTab($(this)); + $(this).focus(); + return false; + }) + .keydown(function(event){ + var currentTab = $(this).parent(); + var ret = true; + switch(event.keyCode){ + case 37://left + case 38://up + if(currentTab.prev().size() > 0){ + selectTab(currentTab.prev().find('a')); + currentTab.prev().find('a').eq(0).focus(); + ret = false; + } + break; + case 39: //right + case 40://down + if(currentTab.next().size() > 0){ + selectTab(currentTab.next().find('a')); + currentTab.next().find('a').eq(0).focus(); + ret = false; + } + break; + case 36: //home key + selectTab(tabsNav.find('li:first a')); + tabsNav.find('li:first a').eq(0).focus(); + ret = false; + break; + case 35://end key + selectTab(tabsNav.find('li:last a')); + tabsNav.find('li:last a').eq(0).focus(); + ret = false; + break; + } + return ret; + }); + + //if tabs are rotating, stop them upon user events + tabs.bind('click keydown focus',function(){ + if(o.autoRotate){ clearInterval(tabRotator); } + }); + + //function to select a tab from the url hash + function selectTabFromHash(hash){ + var currHash = hash || $.bbq.getState('tab'); + if(!currHash){ currHash = '';} + var hashedTab = tabsNav.find('a[href=#'+ currHash.replace('#','') +']'); + if( hashedTab.size() > 0){ + selectTab(hashedTab,true); + } + else { + selectTab( tabsNav.find('a:first'),true); + } + //return true/false + return !!hashedTab.size(); + } + + $(window).bind('hashchange',function(){ + var tab = $.bbq.getState('tab'); + if(tab){ + selectTabFromHash(tab,true); + } + else{ + selectTab( tabsNav.find('a:first'),true); + } + }); + + //set tab from hash at page load, if no tab hash, select first tab + selectTabFromHash(null,true); + + if(o.fixedAsFooter){ + var footer = $('.ui-footer', $(this).parents('.ui-page')); + if(!footer.length){ + footer = $('').appendTo($(this).parents('.ui-page')); + } + tabsNav.prependTo(footer); + } + }); +}; +})(jQuery); \ No newline at end of file diff --git a/js/jQuery.tree.js b/js/jQuery.tree.js new file mode 100644 index 00000000..0a631e81 --- /dev/null +++ b/js/jQuery.tree.js @@ -0,0 +1,255 @@ +/* +* jQuery Mobile Framework : prototype for "tree" plugin (based on code from Filament Group,Inc) +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($){ +$.fn.tree = function(settings){ + + return $(this).each(function(){ + var o = $.extend({ + expanded: '', + theme: 'e', + backBtnText: 'Back', + liveBackText: false, + loadingText: 'loading...', + ajaxCallback: function(){ + $('.ui-body a:not(.ui-btn):not(.ui-link-inherit)').addClass('ui-link'); + tree.height($(this).outerHeight()); + } + },settings); + + if( !$(this).parents('.tree').length ){ + + //save references + var tree = $(this), + treeContain = tree.wrap('
    ').parent(), + treeheader = $('.ui-header'), + prevHTML = treeheader.html(); + + //add the role and default state attributes + tree.attr({'role': 'tree'}).addClass('ui-tree'); + + + tree.find('li').each(function(){ + if($(this).contents()[0].nodeType == 3){ + $(this).wrapInner('
    '); + } + }); + + + //ajax placeholders + tree.find('li.hijax>a').after('
    '); + //add classes to panel content so it'll be excluded + tree.find('li>:not(ul,a)').addClass('ui-tree-panel'); + //add treeitem role to all li children + tree.find('li').not('.ui-tree-panel *').attr('role','treeitem').addClass('ui-treeitem'); + //buttons from anchors + tree.find('li.ui-treeitem>a').addClass('ui-treeitem-link').buttonMarkup({theme: o.theme, iconPos: 'right',icon: 'arrow-r',corners: false}); + //set first node's tabindex to 0 + tree.find('li.ui-treeitem>a:eq(0)').attr('tabindex','0'); + //set all others to -1 + tree.find('li.ui-treeitem>a:gt(0)').attr('tabindex','-1'); + //add group role and tree-group-collapsed class to all ul children + tree.find('li.ui-treeitem>a').next().attr('role','group').addClass('ui-tree-group ui-tree-group-collapsed'); + + //find tree group parents + tree.find('li.ui-treeitem:has(.ui-tree-group)').not('.ui-tree-panel *') + .attr('aria-expanded', 'false') + .find('>a') + .addClass('ui-tree-parent ui-tree-parent-collapsed'); + + //expanded at load + tree + .find(o.expanded).not('.ui-tree-panel *') + .attr('aria-expanded', 'true') + .addClass('ui-tree-expanded') + .find('>a') + .removeClass('ui-tree-parent-collapsed') + .next() + .removeClass('ui-tree-group-collapsed'); + + //for setting up the back button header + function setNavigation(targetLi){ + treeheader.find('.ui-back').remove(); + if(targetLi.length){ + targetA = targetLi.find('>a:eq(0)'); + var backText = o.liveBackText ? (targetLi.parents('li:eq(0)').find('>a:eq(0)').text() || o.backBtnText) : o.backBtnText; + var bbutton = $(''+ backText +'') + .appendTo(treeheader) + .buttonMarkup({icon:'arrow-l'}) + .click(function(){ + targetLi.trigger('collapse'); + return false; + }); + treeheader.find('h1').text(targetA.text()); + } + else{ + treeheader.html(prevHTML); + } + } + + //quick function for seeing if an event is tree-related and if so, getting all the elements related to event target + function targetElements(event){ + if($(event.target).parents('.ui-tree-panel').length){ + return false; + } + else{ + var targetLi = $(event.target).closest('li'), + targetA = targetLi.find('>a:eq(0)'), + targetContent = targetA.next(), + targetParent = targetLi.closest('ul'), + targetParentLi = targetParent.closest('li'); + + return { + targetLi: targetLi, + targetA: targetA, + targetContent: targetContent, + targetParent: targetParent, + targetParentLi: targetParentLi + }; + } + } + + //bind the custom events + tree + //expand a tree node + .bind('expand.tree',function(event){ + var et = targetElements(event); + if(!et){ return; } + var et = targetElements(event); + + //ajax content in if necessary + et.targetContent.filter(':empty').append('

    '+ o.loadingText +'

    ').load(et.targetA.attr('href'), o.ajaxCallback); + + et.targetA.removeClass('ui-tree-parent-collapsed'); + et.targetLi.attr('aria-expanded', 'true'); + et.targetContent.removeClass('ui-tree-group-collapsed'); + et.targetParent.addClass('ui-tree-expanded'); + setNavigation(et.targetLi); + et.targetLi.find('li>a:eq(0)').focus(); //note - this should be tighter in scope + tree.height(''); + tree.height(et.targetContent.outerHeight()); + event.stopPropagation(); + }) + //collapse a tree node + .bind('collapse.tree',function(event){ + var et = targetElements(event); + if(!et){ return; } + et.targetA.addClass('ui-tree-parent-collapsed'); + et.targetLi.attr('aria-expanded', 'false'); + setTimeout(function(){ et.targetContent.addClass('ui-tree-group-collapsed'); },300); + et.targetParent.removeClass('ui-tree-expanded'); + setNavigation(et.targetParentLi); + et.targetA.focus(); + tree.height(''); + tree.height(et.targetParent.outerHeight() || tree.outerHeight()); + event.stopPropagation(); + }) + .bind('toggle.tree',function(event){ + var et = targetElements(event); + if(!et){ return; } + et.targetLi.trigger(et.targetLi.is('[aria-expanded=false]') ? 'expand' : 'collapse'); + event.stopPropagation(); + }) + //shift focus down one item + .bind('traverseDown.tree',function(event){ + var et = targetElements(event); + if(!et){ return; } + if(et.targetLi.is('[aria-expanded=true]')){ + et.targetContent.find('a').eq(0).focus(); + } + else if(et.targetLi.next().length) { + et.targetLi.next().find('a').eq(0).focus(); + } + else { + et.targetParentLi.next().find('a').eq(0).focus(); + } + event.stopPropagation(); + }) + //shift focus up one item + .bind('traverseUp.tree',function(event){ + var et = targetElements(event); + if(!et){ return; } + if(et.targetLi.prev().length){ + if( et.targetLi.prev().is('[aria-expanded=true]') ){ + et.targetLi.prev().find('li:visible:last a').eq(0).focus(); + } + else{ + et.targetLi.prev().find('>a:eq(0)').focus(); + } + } + else { + et.targetParentLi.find('>a:eq(0)').trigger('collapse'); + } + event.stopPropagation(); + }) + //native events + .bind('focus.tree',function(event){ + var et = targetElements(event); + if(!et){ return; } + //deactivate previously active tree node, if one exists + tree.find('[tabindex=0]').blur().attr('tabindex','-1').removeClass('ui-treeitem-active'); + //assign 0 tabindex to focused item + et.targetA.attr('tabindex','0').addClass('ui-treeitem-active'); + }) + .bind('click.tree',function(event){ + var et = targetElements(event); + if(!et){ return; } + //check if target is a tree node + if( et.targetLi.is('[aria-expanded]') ){ + et.targetLi.trigger('toggle.tree'); + et.targetA.focus(); + return false; + } + }) + .bind('keydown.tree',function(event){ + var et = targetElements(event); + if(!et){ return; } + //check for arrow keys + if(event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40){ + //if key is left arrow + if(event.keyCode == 37){ + //if list is expanded + if(et.targetLi.is('[aria-expanded=true]')){ + et.targetLi.trigger('collapse'); + } + //try traversing to parent + else { + et.targetParentLi.find('>a:eq(0)').trigger('collapse'); + } + } + //if key is right arrow + if(event.keyCode == 39){ + //if list is collapsed + if(et.targetLi.is('[aria-expanded=false]')){ + et.targetLi.trigger('expand'); + } + //try traversing to child + else { + et.targetLi.find('li.ui-treeitem>a:eq(0)').focus(); + } + } + //if key is up arrow + if(event.keyCode == 38){ + et.targetLi.trigger('traverseUp'); + } + //if key is down arrow + if(event.keyCode == 40){ + et.targetLi.trigger('traverseDown'); + } + //return any of these keycodes false + return false; + } + //check if enter or space was pressed on a tree node + else if((event.keyCode == 13 || event.keyCode == 32) && target.is('a.ui-tree-parent')){ + et.targetLi.trigger('toggle'); + //return click event false because it's a tree node (folder) + return false; + } + }); + } + }); +}; +})(jQuery); \ No newline at end of file diff --git a/js/jquery-1.4.2.min.js b/js/jquery-1.4.2.min.js new file mode 100755 index 00000000..7c243080 --- /dev/null +++ b/js/jquery-1.4.2.min.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
    a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

    ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
    ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
    ","
    "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
    ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
    "; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/js/manifest.php b/js/manifest.php new file mode 100644 index 00000000..d8d7e25a --- /dev/null +++ b/js/manifest.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/sample-content/lebowski.html b/sample-content/lebowski.html new file mode 100644 index 00000000..53e5b5a0 --- /dev/null +++ b/sample-content/lebowski.html @@ -0,0 +1,10 @@ +
    +

    The Big Lebowskipsum

    + +

    Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

    + +

    Header Level 2

    + +

    Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

    + +
    \ No newline at end of file diff --git a/sample-content/license.html b/sample-content/license.html new file mode 100644 index 00000000..c709444f --- /dev/null +++ b/sample-content/license.html @@ -0,0 +1,10 @@ +
    +

    License Ipsum

    + +

    Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

    + +

    Header Level 2

    + +

    Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

    + +
    \ No newline at end of file diff --git a/sample-content/planetearth.html b/sample-content/planetearth.html new file mode 100644 index 00000000..a851951c --- /dev/null +++ b/sample-content/planetearth.html @@ -0,0 +1,10 @@ +
    +

    Planet ipsum

    + +

    Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

    + +

    Header Level 2

    + +

    Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

    + +
    \ No newline at end of file diff --git a/sample-content/terms.html b/sample-content/terms.html new file mode 100644 index 00000000..d45c22a3 --- /dev/null +++ b/sample-content/terms.html @@ -0,0 +1,10 @@ +
    +

    Terms Ipsum

    + +

    Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

    + +

    Header Level 2

    + +

    Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

    + +
    \ No newline at end of file diff --git a/sample-content/travel.html b/sample-content/travel.html new file mode 100644 index 00000000..6ee67c54 --- /dev/null +++ b/sample-content/travel.html @@ -0,0 +1,10 @@ +
    +

    Travel Ipsum

    + +

    Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

    + +

    Header Level 2

    + +

    Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis.

    + +
    \ No newline at end of file