diff --git a/Makefile b/Makefile index a693ac13426..a25e70f825a 100755 --- a/Makefile +++ b/Makefile @@ -66,7 +66,7 @@ mobile: min: mobile @@head -8 js/jquery.mobile.js > ${MIN} - @@java -jar ../jquery/build/google-compiler-20100917.jar --js ${MAX} --warning_level QUIET --js_output_file ${MIN}.tmp + @@java -jar build/google-compiler-20100917.jar --js ${MAX} --warning_level QUIET --js_output_file ${MIN}.tmp @@cat ${MIN}.tmp >> ${MIN} @@rm -f ${MIN}.tmp diff --git a/docs/content/api-content.html b/docs/content/api-content.html index 2db939d78e2..5862826e463 100755 --- a/docs/content/api-content.html +++ b/docs/content/api-content.html @@ -2,7 +2,7 @@ jQuery Mobile Docs - Content formatting - + diff --git a/docs/content/content-collapsible.html b/docs/content/content-collapsible.html index f34e8526017..0a6ad70d18b 100755 --- a/docs/content/content-collapsible.html +++ b/docs/content/content-collapsible.html @@ -2,9 +2,8 @@ jQuery Mobile Docs - Content formatting - + - @@ -102,8 +101,33 @@

Section 4: Collapsed list

+

Nested Collapsibles

+
+

I'm a header

+

I'm the collapsible content. By default I'm open and displayed on the page, but you can click the header to hide me.

+
+

I'm a nested collapsible header

+

I'm the collapsible content. By default I'm open and displayed on the page, but you can click the header to hide me.

+
+
+

Collapsible sets

+

By giving a parent element a data-role of collapsible-set, you can cause other collapsibles within that parent to close whenever a new one is opened, acting like an accordion widget:

+
+
+

I'm a header in a set of collapsibles

+

I'm the collapsible content. I'm hidden by default because I have the "collapsed" state; you need to expand the header to see me.

+
+
+

I'm a header in a set of collapsibles

+

I'm the collapsible content. I'm hidden by default because I have the "collapsed" state; you need to expand the header to see me.

+
+
+

I'm a header in a set of collapsibles

+

I'm the collapsible content. I'm hidden by default because I have the "collapsed" state; you need to expand the header to see me.

+
+
diff --git a/docs/content/content-grids.html b/docs/content/content-grids.html index eece49a657f..5ed433cd39b 100755 --- a/docs/content/content-grids.html +++ b/docs/content/content-grids.html @@ -2,7 +2,7 @@ jQuery Mobile Docs - Content formatting - + diff --git a/docs/content/content-html.html b/docs/content/content-html.html index 6591d80dd3f..82537b2ba42 100755 --- a/docs/content/content-html.html +++ b/docs/content/content-html.html @@ -2,7 +2,7 @@ jQuery Mobile Docs - Content formatting - + diff --git a/docs/content/content-themes.html b/docs/content/content-themes.html index 81d370728d8..d20c3550734 100755 --- a/docs/content/content-themes.html +++ b/docs/content/content-themes.html @@ -2,7 +2,7 @@ jQuery Mobile Docs - Content formatting - + diff --git a/docs/content/index.html b/docs/content/index.html index 2f2c7cf4afe..ad418a0a6b9 100755 --- a/docs/content/index.html +++ b/docs/content/index.html @@ -2,7 +2,7 @@ jQuery Mobile Docs - Content formatting - + diff --git a/docs/forms/forms-all.html b/docs/forms/forms-all.html index cf2bdcef30a..f4880a0667f 100755 --- a/docs/forms/forms-all.html +++ b/docs/forms/forms-all.html @@ -4,7 +4,6 @@ jQuery Mobile Docs - Forms - @@ -30,8 +29,8 @@

Form elements

- - + +
diff --git a/docs/pages/dialog-alt.html b/docs/pages/dialog-alt.html index c4aba3e22b0..9c2539485dd 100644 --- a/docs/pages/dialog-alt.html +++ b/docs/pages/dialog-alt.html @@ -2,7 +2,7 @@ jQuery Mobile Framework - Dialog Example - + diff --git a/docs/pages/dialog-buttons.html b/docs/pages/dialog-buttons.html index 5426ab8f5fc..0422b10619a 100644 --- a/docs/pages/dialog-buttons.html +++ b/docs/pages/dialog-buttons.html @@ -2,7 +2,7 @@ jQuery Mobile Framework - Dialog Example - + diff --git a/docs/pages/dialog-success.html b/docs/pages/dialog-success.html index 98caf9a43fc..2f30788a9c0 100644 --- a/docs/pages/dialog-success.html +++ b/docs/pages/dialog-success.html @@ -2,7 +2,7 @@ jQuery Mobile Framework - Dialog Example - + diff --git a/docs/pages/docs-link-scenarios.html b/docs/pages/docs-link-scenarios.html new file mode 100755 index 00000000000..45e843f7fc3 --- /dev/null +++ b/docs/pages/docs-link-scenarios.html @@ -0,0 +1,40 @@ + + + + jQuery Mobile Docs - Pages + + + + + +
+ +
+

Linking pages

+
+ +
+ +

jQuery Mobile is designed to work with simple page linking conventions. The following list demonstrates how different types of links will be handled, either remotely or through an Ajax Request.

+ + + +
+
+ + + diff --git a/docs/pages/transition-success.html b/docs/pages/transition-success.html index df1136801c3..e7da18a2495 100644 --- a/docs/pages/transition-success.html +++ b/docs/pages/transition-success.html @@ -2,7 +2,7 @@ jQuery Mobile Framework - Dialog Example - + @@ -14,7 +14,7 @@

Ta-da!

-

That was an animated page transition effect that we added with a code> data-transition attribute on the link.

+

That was an animated page transition effect that we added with a data-transition attribute on the link.

Since it uses CSS transforms, this should be hardware accelerated on many mobile devices.

What do you think?

I like it @@ -23,4 +23,4 @@

Ta-da!

- \ No newline at end of file + diff --git a/experiments/photos/_photo2.html b/experiments/photos/_photo2.html index 0828bc0aabe..59fae846bfb 100644 --- a/experiments/photos/_photo2.html +++ b/experiments/photos/_photo2.html @@ -4,29 +4,27 @@ jQuery Mobile Framework - Photo 1 + + -
- - +

A canoe

-
+
- - photo-canoe - + photo-canoe
diff --git a/experiments/photos/_photo3.html b/experiments/photos/_photo3.html index a1d93e77474..bef3fe8fe05 100644 --- a/experiments/photos/_photo3.html +++ b/experiments/photos/_photo3.html @@ -4,29 +4,27 @@ jQuery Mobile Framework - Photo 1 + + -
- - +

A dock

-
+
- - photo-dock - + photo-dock
diff --git a/experiments/photos/_photo4.html b/experiments/photos/_photo4.html index 33cc0c4d8a3..759e1d8f7d1 100644 --- a/experiments/photos/_photo4.html +++ b/experiments/photos/_photo4.html @@ -4,29 +4,27 @@ jQuery Mobile Framework - Photo 1 + + -
- - +

A kayak

-
+
- - photo-kayak - + photo-kayak
diff --git a/experiments/photos/_photo5.html b/experiments/photos/_photo5.html index dd0899a964d..4730b902c22 100644 --- a/experiments/photos/_photo5.html +++ b/experiments/photos/_photo5.html @@ -4,28 +4,26 @@ jQuery Mobile Framework - Photo 1 + + -
- - +

Nathan running

-
+
- - photo-run - + photo-run
diff --git a/experiments/photos/_photo6.html b/experiments/photos/_photo6.html index 9c03d5069a3..a158f743eb5 100644 --- a/experiments/photos/_photo6.html +++ b/experiments/photos/_photo6.html @@ -4,27 +4,26 @@ jQuery Mobile Framework - Photo 1 + + -
- - +

Sandy beach

-
+
- - photo-sand - + photo-sand
diff --git a/experiments/photos/_photo1.html b/experiments/photos/index.html similarity index 67% rename from experiments/photos/_photo1.html rename to experiments/photos/index.html index 7f3f65f21e6..93c1a1d4b7d 100644 --- a/experiments/photos/_photo1.html +++ b/experiments/photos/index.html @@ -4,28 +4,26 @@ jQuery Mobile Framework - Photo 1 + + -
- - +

A bridge

-
+
- - photo-bridge - + photo-bridge
- Next +
diff --git a/experiments/photos/photos.css b/experiments/photos/photos.css index 824e5915d5e..08047a4164d 100644 --- a/experiments/photos/photos.css +++ b/experiments/photos/photos.css @@ -1 +1,2 @@ -#photoview img { width: 100%; } \ No newline at end of file +.photoview .ui-content { padding: 0; } +.photoview img { width: 100%; } \ No newline at end of file diff --git a/experiments/photos/photos.js b/experiments/photos/photos.js index f7d8dab908a..0cfcf013586 100644 --- a/experiments/photos/photos.js +++ b/experiments/photos/photos.js @@ -1,23 +1,21 @@ -$(function(){ - $('.photoview') - .live('swipeleft',function(){ - $(this).find('a').ajaxClick(); - }) - .live('swiperight',function(){ - $(this).next().find('a:contains(Prev)').ajaxClick(); - }); - $('.photoview a').click(function(){ - event.stopImmediatePropagation(); - }) - .tap(function(event){ - $(this).ajaxClick(); - event.stopImmediatePropagation(); - }) - .taphold(function(event){ - $.fixedToolbars.toggle(); - event.stopImmediatePropagation(); - }) - - } -}); + +$('.photoview') + .live('pagebeforehide',function(){ + $.fixedToolbars.hide(true); + }) + .live('pageshow',function(){ + $.fixedToolbars.show(); + }) + .live('swipeleft',function(){ + $(this).find('a.next').click(); + }) + .live('swiperight',function(){ + $(this).next().find('a.prev').click(); + }); + +$('.photoview img').live('mousedown touchstart',function(event){ + event.preventDefault(); +}) + + diff --git a/experiments/ui-datepicker/jquery.ui.datepicker.css b/experiments/ui-datepicker/jquery.ui.datepicker.css index fd07f3eb1d3..91b2e9a9f40 100755 --- a/experiments/ui-datepicker/jquery.ui.datepicker.css +++ b/experiments/ui-datepicker/jquery.ui.datepicker.css @@ -23,6 +23,6 @@ div.hasDatepicker{ display: block; padding: 0; overflow: visible; margin: 8px 0 .ui-datepicker td { border-width: 1px; padding: 0; text-align: center; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em 0; font-weight: bold; margin: 0; border-width: 0; text-align: center; text-decoration: none; } -.min-width-480 { +.min-width-480px { div.hasDatepicker { width: 63%; display: inline-block; margin: 0; } } \ No newline at end of file diff --git a/js/jquery.mobile.collapsible.js b/js/jquery.mobile.collapsible.js index 0d7eb20a416..5b486eea230 100644 --- a/js/jquery.mobile.collapsible.js +++ b/js/jquery.mobile.collapsible.js @@ -19,7 +19,8 @@ $.fn.collapsible = function(options){ //define var collapsibleContain = $(this).addClass('ui-collapsible-contain'), collapsibleHeading = $(this).find(o.heading).eq(0), - collapsibleContent = collapsibleContain.wrapInner('
').find('.ui-collapsible-content'); + collapsibleContent = collapsibleContain.wrapInner('
').find('.ui-collapsible-content'), + collapsibleParent = $(this).closest('[data-role=collapsible-set]').addClass('ui-collapsible-set'); //replace collapsibleHeading if it's a legend if(collapsibleHeading.is('legend')){ @@ -36,17 +37,12 @@ $.fn.collapsible = function(options){ .wrapInner('') .find('a:eq(0)') .buttonMarkup({ - shadow: true, + shadow: !!!collapsibleParent.length, corners:false, iconPos: 'left', icon: 'plus', theme: o.theme }) - .removeClass('ui-btn-corner-all') - .addClass('ui-corner-all') - .find('.ui-btn-inner') - .removeClass('ui-btn-corner-all') - .addClass('ui-corner-all') .find('.ui-icon') .removeAttr('class') .buttonMarkup({ @@ -56,29 +52,85 @@ $.fn.collapsible = function(options){ icon: 'plus', theme: o.iconTheme }); + + if( !collapsibleParent.length ){ + collapsibleHeading + .find('a:eq(0)') + .addClass('ui-corner-all') + .find('.ui-btn-inner') + .addClass('ui-corner-all'); + } + else { + if( collapsibleContain.data('collapsible-last') ){ + collapsibleHeading + .find('a:eq(0), .ui-btn-inner') + .addClass('ui-corner-bottom'); + } + } + //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('collapse', function(event){ + if( !event.isDefaultPrevented() ){ + event.preventDefault(); + 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); + + if( collapsibleContain.data('collapsible-last') ){ + collapsibleHeading + .find('a:eq(0), .ui-btn-inner') + .addClass('ui-corner-bottom'); + } + } }) - .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); - + .bind('expand', function(event){ + if( !event.isDefaultPrevented() ){ + event.preventDefault(); + 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); + + if( collapsibleContain.data('collapsible-last') ){ + collapsibleHeading + .find('a:eq(0), .ui-btn-inner') + .removeClass('ui-corner-bottom'); + } + + } }) .trigger(o.collapsed ? 'collapse' : 'expand'); + + //close others in a set + if( collapsibleParent.length && !collapsibleParent.data("collapsiblebound") ){ + collapsibleParent + .data("collapsiblebound", true) + .bind("expand", function( event ){ + $(this).find( ".ui-collapsible-contain" ) + .not( $(event.target).closest( ".ui-collapsible-contain" ) ) + .not( "> .ui-collapsible-contain .ui-collapsible-contain" ) + .trigger( "collapse" ); + }) + var set = collapsibleParent.find('[data-role=collapsible]') + + set.first() + .find('a:eq(0)') + .addClass('ui-corner-top') + .find('.ui-btn-inner') + .addClass('ui-corner-top'); + + set.last().data('collapsible-last', true) + } + collapsibleHeading.click(function(){ if( collapsibleHeading.is('.ui-collapsible-heading-collapsed') ){ collapsibleContain.trigger('expand'); diff --git a/js/jquery.mobile.event.js b/js/jquery.mobile.event.js index 8d13c7b014f..1dd9e628d4d 100644 --- a/js/jquery.mobile.event.js +++ b/js/jquery.mobile.event.js @@ -140,7 +140,7 @@ $.event.special.swipe = { if ( start && stop ) { if ( stop.time - start.time < 1000 && Math.abs( start.coords[0] - stop.coords[0]) > 30 && - Math.abs( start.coords[1] - stop.coords[1]) < 20 ) { + Math.abs( start.coords[1] - stop.coords[1]) < 75 ) { start.origin .trigger( "swipe" ) .trigger( start.coords[0] > stop.coords[0] ? "swipeleft" : "swiperight" ); diff --git a/js/jquery.mobile.forms.button.js b/js/jquery.mobile.forms.button.js index 3d30493a0c3..94e81dfefeb 100644 --- a/js/jquery.mobile.forms.button.js +++ b/js/jquery.mobile.forms.button.js @@ -4,23 +4,36 @@ * 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'); +(function ( $ ) { +$.widget( "mobile.button", $.mobile.widget, { + options: {}, + _create: function(){ + var $el = this.element; + $el + .addClass('ui-btn-hidden') + .attr('tabindex','-1'); + //add ARIA role - $(''+ (button.text() || button.val()) +'') - .buttonMarkup({ - theme: button.data('theme'), - icon: button.data('icon'), - iconpos: button.data('iconpos'), - inline: button.data('inline') - }) + $( "", { + "href": "#", + "role": "button", + "aria-label": $el.attr( "type" ) + } ) + .text( $el.text() || $el.val() ) + .insertBefore( $el ) .click(function(){ - button.click(); + $el.click(); return false; }) - .insertBefore(button); - }); -}; -})(jQuery); \ No newline at end of file + .buttonMarkup({ + theme: $el.data("theme"), + icon: $el.data("icon"), + iconpos: $el.data("iconpos"), + inline: $el.data("inline"), + corners: $el.data("corners"), + shadow: $el.data("shadow"), + iconshadow: $el.data("icon-shadow") + }); + } +}); +})( jQuery ); \ No newline at end of file diff --git a/js/jquery.mobile.forms.checkboxradio.js b/js/jquery.mobile.forms.checkboxradio.js index 31355f68460..1879ee86939 100644 --- a/js/jquery.mobile.forms.checkboxradio.js +++ b/js/jquery.mobile.forms.checkboxradio.js @@ -4,82 +4,106 @@ * 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){ +(function ( $ ) { +$.widget( "mobile.checkboxradio", $.mobile.widget, { + options: { + theme: undefined, + icon: undefined + }, + _create: function(){ + var input = this.element, + label = jQuery("label[for='" + input.attr( "id" ) + "']"), + inputtype = input.attr( "type" ), + checkedicon = "ui-icon-" + inputtype + "-on", + uncheckedicon = "ui-icon-" + inputtype + "-off"; -jQuery.fn.customCheckboxRadio = function( options ) { - return this.each(function() { - var input = jQuery( this ), - type = input.attr( "type" ); - - if ( type === "checkbox" || type === "radio" ) { - var o = jQuery.extend({ - theme: input.data( "theme" ), - icon: input.data( "icon" ) || !input.parents( "[data-type='horizontal']" ).length, - checkedicon: "ui-icon-" + type + "-on", - uncheckedicon: "ui-icon-" + type + "-off" - }, options ); - - // get the associated label using the input's id - var label = jQuery("label[for='" + input.attr( "id" ) + "']") - .buttonMarkup({ - iconpos: o.icon ? "left" : "", - theme: o.theme, - icon: o.icon ? o.uncheckedicon : null, - shadow: false - }); + if ( inputtype != "checkbox" && inputtype != "radio" ) { return; } - var icon = label.find( ".ui-icon" ); + label + .buttonMarkup({ + iconpos: this.options.icon, + theme: this.options.theme, + icon: this.options.icon ? uncheckedicon : ( this.element.parents( "[data-type='horizontal']" ).length ? undefined : uncheckedicon ), + shadow: false + }); + + // wrap the input + label in a div + input + .add( label ) + .wrapAll( "
" ); + + label.bind({ + mouseover: function() { + if( $(this).parent().is('.ui-disabled') ){ return false; } + }, - // wrap the input + label in a div - input - .add( label ) - .wrapAll( "
" ); + mousedown: function() { + if( $(this).parent().is('.ui-disabled') ){ return false; } + label.data( "state", input.attr( "checked" ) ); + }, - // necessary for browsers that don't support the :hover pseudo class on labels - label.bind({ - mousedown: function() { - label.data( "state", input.attr( "checked" ) ); - }, + click: function() { + setTimeout(function() { + if ( input.attr( "checked" ) === label.data( "state" ) ) { + input.trigger( "click" ); + } + }, 1); + } + }); + + input + .bind({ + click: function() { - setTimeout(function() { - if ( input.attr( "checked" ) === label.data( "state" ) ) { - input.trigger( "click" ); - } - }, 1); + jQuery( "input[name='" + input.attr( "name" ) + "']" ).checkboxradio( "refresh" ); + }, + + focus: function() { + label.addClass( "ui-focus" ); + }, + + blur: function() { + label.removeClass( "ui-focus" ); } }); - //bind custom event, trigger it, bind click,focus,blur events - input - .bind({ - updateState: function() { - if ( this.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 ); - } - }, - - click: function() { - jQuery( "input[name='" + input.attr( "name" ) + "']" ).trigger( "updateState" ); - }, - - focus: function() { - label.addClass( "ui-focus" ); - }, + this.refresh(); + + }, + + refresh: function( ){ + var input = this.element, + label = jQuery("label[for='" + input.attr( "id" ) + "']"), + inputtype = input.attr( "type" ), + icon = label.find( ".ui-icon" ), + checkedicon = "ui-icon-" + inputtype + "-on", + uncheckedicon = "ui-icon-" + inputtype + "-off"; + + if ( input[0].checked ) { + label.addClass( "ui-btn-active" ); + icon.addClass( checkedicon ); + icon.removeClass( uncheckedicon ); - blur: function() { - label.removeClass( "ui-focus" ); - } - }) - .trigger( "updateState" ); + } else { + label.removeClass( "ui-btn-active" ); + icon.removeClass( checkedicon ); + icon.addClass( uncheckedicon ); } - }); -}; - -})(jQuery); + + if( input.is( ":disabled" ) ){ + this.disable(); + } + else { + this.enable(); + } + }, + + disable: function(){ + this.element.attr("disabled",true).parent().addClass("ui-disabled"); + }, + + enable: function(){ + this.element.attr("disabled",false).parent().removeClass("ui-disabled"); + } +}); +})( jQuery ); diff --git a/js/jquery.mobile.forms.select.js b/js/jquery.mobile.forms.select.js index 10249d061a4..28eb927d36d 100644 --- a/js/jquery.mobile.forms.select.js +++ b/js/jquery.mobile.forms.select.js @@ -28,7 +28,6 @@ $.fn.customSelect = function(options){ button = $( "
", { "href": "#", "role": "button", - "title": "select menu", "id": buttonId, "aria-haspopup": "true", "aria-owns": menuId diff --git a/js/jquery.mobile.forms.textinput.js b/js/jquery.mobile.forms.textinput.js index 984ad402b42..e7745ca31b2 100644 --- a/js/jquery.mobile.forms.textinput.js +++ b/js/jquery.mobile.forms.textinput.js @@ -24,14 +24,14 @@ jQuery.fn.customTextInput = function(options){ if(o.search){ focusedEl = input.wrap('').parent(); var clearbtn = $('clear text') - .buttonMarkup({icon: 'delete', iconpos: 'notext', corners:true, shadow:true}) .click(function(){ input.val('').focus(); input.trigger('change'); clearbtn.addClass('ui-input-clear-hidden'); return false; }) - .appendTo(focusedEl); + .appendTo(focusedEl) + .buttonMarkup({icon: 'delete', iconpos: 'notext', corners:true, shadow:true}); function toggleClear(){ if(input.val() == ''){ diff --git a/js/jquery.mobile.js b/js/jquery.mobile.js index fc8351279d7..44367e5ecd7 100644 --- a/js/jquery.mobile.js +++ b/js/jquery.mobile.js @@ -46,6 +46,8 @@ $pageContainer, startPageId = 'ui-page-start', activePageClass = 'ui-page-active', + activeBtnClass = 'ui-btn-active', + activeClickedLink = null, pageTransition, forceBack, transitions = 'slide slideup slidedown pop flip fade', @@ -59,7 +61,8 @@ nextPageRole = null, hashListener = true, unHashedSelectors = '[data-rel=dialog]', - baseUrl = location.protocol + '//' + location.host + location.pathname; + baseUrl = location.protocol + '//' + location.host + location.pathname, + resolutionBreakpoints = [320,480,768,1024]; // TODO: don't expose (temporary during code reorg) $.mobile.urlStack = urlStack; @@ -104,47 +107,43 @@ $('#ui-base').attr('href', baseUrl); } - - // send a link through hash tracking - jQuery.fn.ajaxClick = function() { - var href = jQuery( this ).attr( "href" ); - pageTransition = jQuery( this ).data( "transition" ) || "slide"; - forceBack = jQuery( this ).data( "back" ) || undefined; - nextPageRole = jQuery( this ).attr( "data-rel" ); - - //find new base for url building - var newBaseURL = getBaseURL(); - - //if href is absolute but local, or a local ID, no base needed - if( /^\//.test(href) || (/https?:\/\//.test(href) && !!(href).match(location.hostname)) || /^#/.test(href) ){ - newBaseURL = ''; + //click routing - direct to HTTP or Ajax, accordingly + jQuery( "a" ).live( "click", function(event) { + var $this = $(this), + //get href, remove same-domain protocol and host + href = $this.attr( "href" ).replace( location.protocol + "//" + location.host, ""), + //if it still starts with a protocol, it's external, or could be :mailto, etc + external = /^(:?\w+:)/.test( href ) || $this.is( "[target],[rel=external]" ); + + if( href === '#' ){ + //for links created purely for interaction - ignore + return false; } - // set href to relative path using baseURL and - if( !/https?:\/\//.test(href) ){ - href = newBaseURL + href; - } - - //if it's a non-local-anchor and Ajax is not supported, or if it's an external link, go to page without ajax - if ( ( /^[^#]/.test(href) && !jQuery.support.ajax ) || ( /https?:\/\//.test(href) && !!!href.match(location.hostname) ) ) { - location = href + activeClickedLink = $this.closest( ".ui-btn" ).addClass( activeBtnClass ); + + if( external ){ + //deliberately redirect, in case click was triggered + location.href = href; } - else{ - if( $(this).is(unHashedSelectors) ){ - changePage(href, pageTransition, undefined); - } - else{ - changePage(href, pageTransition, undefined, true); + else { + //use ajax + var pageTransition = $this.data( "transition" ) || "slide", + forceBack = $this.data( "back" ) || undefined, + changeHashOnSuccess = !$this.is(unHashedSelectors); + + nextPageRole = $this.attr( "data-rel" ); + + //if it's a relative href, prefix href with base url + if( href.indexOf('/') && href.indexOf('#') !== 0 ){ + href = getBaseURL() + href; } + href.replace(/^#/,''); + + changePage(href, pageTransition, forceBack, changeHashOnSuccess); } - return this; - }; - - // ajaxify all navigable links - jQuery( "a:not([href='#']):not([target]):not([rel='external']):not([href^='mailto:'])" ).live( "click", function(event) { - jQuery( this ).ajaxClick(); - return false; + event.preventDefault(); }); // turn on/off page loading message. @@ -190,6 +189,14 @@ return wrapper; } + //remove active classes after page transition or error + function removeActiveLinkClass(){ + if(activeClickedLink && !activeClickedLink.closest( '.ui-page-active' ).length ){ + activeClickedLink.removeClass( activeBtnClass ); + } + activeClickedLink = null; + } + //for getting or creating a new page function changePage( to, transition, back, changeHash){ @@ -199,7 +206,7 @@ from = toIsArray ? to[0] : $.activePage, to = toIsArray ? to[1] : to, url = fileUrl = $.type(to) === "string" ? to.replace( /^#/, "" ) : null, - back = (back !== undefined) ? back : (forceBack || ( urlStack.length > 1 && urlStack[ urlStack.length - 2 ].url === url )), + back = (back !== undefined) ? back : ( urlStack.length > 1 && urlStack[ urlStack.length - 2 ].url === url ), transition = (transition !== undefined) ? transition : ( pageTransition || "slide" ); //unset pageTransition, forceBack @@ -240,6 +247,7 @@ hashListener = true; }, 500); } + removeActiveLinkClass(); } if(transition){ @@ -311,10 +319,8 @@ if( !$.support.dynamicBaseTag ){ var baseUrl = getBaseURL(fileUrl); to.find('[src],[href]').each(function(){ - var thisHref = $(this).attr('href'), - thisSrc = $(this).attr('src'), - thisAttr = thisHref ? 'href' : 'src', - thisUrl = thisHref || thisSrc; + var thisAttr = $(this).is('[href]') ? 'href' : 'src', + thisUrl = $(this).attr(thisAttr); //if full path exists and is same, chop it - helps IE out thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' ); @@ -339,7 +345,7 @@ }, error: function() { pageLoading( true ); - + removeActiveLinkClass(); jQuery("

Error Loading Page

") .css({ "display": "block", "opacity": 0.96, "top": $(window).scrollTop() + 100 }) .appendTo( $pageContainer ) @@ -400,32 +406,48 @@ }); //add breakpoint classes for faux media-q support - function resolutionBreakpoints(){ + function detectResolutionBreakpoints(){ var currWidth = $window.width(), minPrefix = "min-width-", maxPrefix = "max-width-", minBreakpoints = [], - maxBreakpoints = []; + maxBreakpoints = [], + unit = "px", + breakpointClasses; - $html.removeClass( minPrefix + $.mobile.resolutionBreakpoints.join(" " + minPrefix) + maxPrefix + " " + $.mobile.resolutionBreakpoints.join(" " + maxPrefix) ); + $html.removeClass( minPrefix + resolutionBreakpoints.join(unit + " " + minPrefix) + unit + " " + + maxPrefix + resolutionBreakpoints.join( unit + " " + maxPrefix) + unit ); - $.each($.mobile.resolutionBreakpoints,function( i ){ - if( currWidth >= $.mobile.resolutionBreakpoints[ i ] ){ - minBreakpoints.push( $.mobile.resolutionBreakpoints[ i ] ); + $.each(resolutionBreakpoints,function( i ){ + if( currWidth >= resolutionBreakpoints[ i ] ){ + minBreakpoints.push( minPrefix + resolutionBreakpoints[ i ] + unit ); } - if( currWidth <= $.mobile.resolutionBreakpoints[ i ] ){ - maxBreakpoints.push( $.mobile.resolutionBreakpoints[ i ] ); + if( currWidth <= resolutionBreakpoints[ i ] ){ + maxBreakpoints.push( maxPrefix + resolutionBreakpoints[ i ] + unit ); } }); - $html.addClass( minPrefix + minBreakpoints.join(" " + minPrefix) + " " + maxPrefix + maxBreakpoints.join(" " + maxPrefix) ); + if( minBreakpoints.length ){ breakpointClasses = minBreakpoints.join(" "); } + if( maxBreakpoints.length ){ breakpointClasses += " " + maxBreakpoints.join(" "); } + + $html.addClass( breakpointClasses ); }; - //common breakpoints, overrideable, changeable - $.mobile.resolutionBreakpoints = [320,480,768,1024]; - $window.bind( "orientationchange resize", resolutionBreakpoints); - resolutionBreakpoints(); + //add breakpoints now and on oc/resize events + $window.bind( "orientationchange resize", detectResolutionBreakpoints); + detectResolutionBreakpoints(); + //common breakpoints, overrideable, changeable + $.mobile.addResolutionBreakpoints = function( newbps ){ + if( $.type( newbps ) === "array" ){ + resolutionBreakpoints = resolutionBreakpoints.concat( newbps ); + } + else { + resolutionBreakpoints.push( newbps ); + } + detectResolutionBreakpoints(); + } + //insert mobile meta - these will need to be configurable somehow. var headPrepends = $head.prepend( @@ -456,9 +478,9 @@ //dom-ready jQuery(function(){ - + var $pages = jQuery("[data-role='page']"); //set up active page - $startPage = $.activePage = jQuery("[data-role='page']").first(); + $startPage = $.activePage = $pages.first(); //set page container $pageContainer = $startPage.parent(); @@ -473,7 +495,7 @@ } //initialize all pages present - jQuery("[data-role='page']").page(); + $pages.page(); //trigger a new hashchange, hash or not $window.trigger( "hashchange", { manuallyTriggered: true } ); diff --git a/js/jquery.mobile.listview.filter.js b/js/jquery.mobile.listview.filter.js index dfc8bf205f3..377583a3533 100644 --- a/js/jquery.mobile.listview.filter.js +++ b/js/jquery.mobile.listview.filter.js @@ -24,7 +24,7 @@ $( "[data-role='listview']" ).live( "listviewcreate", function() { }).hide(); } - listview._numberItems(); + //listview._numberItems(); }) .appendTo( wrapper ) .customTextInput(); diff --git a/js/jquery.mobile.listview.js b/js/jquery.mobile.listview.js index f88d600f79a..13a84abcf1c 100644 --- a/js/jquery.mobile.listview.js +++ b/js/jquery.mobile.listview.js @@ -109,9 +109,9 @@ jQuery.widget( "mobile.listview", jQuery.mobile.widget, { } }); - // tapping the whole LI triggers ajaxClick on the first link - $list.delegate( "li", "tap", function(event) { - if ( !jQuery( e.target ).closest( "a" ).length ) { + // tapping the whole LI triggers click on the first link + $list.delegate( "li", "click", function(event) { + if ( !jQuery( event.target ).closest( "a" ).length ) { jQuery( this ).find( "a" ).first().trigger( "click" ); return false; } @@ -129,13 +129,15 @@ jQuery.widget( "mobile.listview", jQuery.mobile.widget, { item.find( "img" ).addClass( "ui-li-thumb" ).each(function() { jQuery( this ).closest( "li" ) - .addClass( jQuery(this).is( "ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" ); + .addClass( jQuery(this).is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" ); }); var aside = item.find( ".ui-li-aside" ); if ( aside.length ) { - aside.prependTo( aside.parent() ); //shift aside to front for css float + aside.each(function(i, el) { + $(el).prependTo( $(el).parent() ); //shift aside to front for css float + }); } if ( jQuery.support.cssPseudoElement || !jQuery.nodeName( item[0], "ol" ) ) { @@ -148,6 +150,7 @@ jQuery.widget( "mobile.listview", jQuery.mobile.widget, { var o = this.options, $list = this.element, + self = this, dividertheme = $list.data( "dividertheme" ) || o.dividerTheme, li = $list.children( "li" ), counter = jQuery.support.cssPseudoElement || !jQuery.nodeName( $list[0], "ol" ) ? 0 : 1; @@ -264,7 +267,7 @@ jQuery.widget( "mobile.listview", jQuery.mobile.widget, { item.addClass( itemClass ); if ( !create ) { - this._itemApply( $list, item ); + self._itemApply( $list, item ); } }); }, diff --git a/js/jquery.mobile.navbar.js b/js/jquery.mobile.navbar.js index 6c07fc432d7..947394092db 100755 --- a/js/jquery.mobile.navbar.js +++ b/js/jquery.mobile.navbar.js @@ -4,40 +4,36 @@ * 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.navbar = function(settings){ - return $(this).each(function(){ - - var o = $.extend({ - iconpos: $(this).data('iconpos') || 'top', - transition: $(this).data('transition') || 'slideup' - },settings); - - //wrap it with footer classes - var $navbar = $(this).addClass('ui-navbar'), - numTabs = $navbar.find('li').length, - moreIcon = $navbar.find('a[data-icon]').length ? 'arrow-r' : null; - - if( moreIcon == null ){ - o.iconpos = null; - $navbar.add( $navbar.children(0) ).addClass('ui-navbar-noicons'); - } - - $navbar - //add ARIA role - .attr("role","navigation") - .find('ul') - .grid({grid: numTabs > 2 ? 'b' : 'a'}); +(function ( $ ) { +$.widget( "mobile.navbar", $.mobile.widget, { + options: { + iconpos: 'top' + }, + _create: function(){ + var $navbar = this.element, + $navbtns = $navbar.find("a"), + iconpos = $navbtns.filter('icon').length ? this.options.iconpos : undefined; $navbar - .find('ul a') - .buttonMarkup({corners: false, shadow:false, iconpos: o.iconpos}) - .bind('tap',function(){ - //NOTE: we'll need to find a way to highlight an active tab at load as well - $navbar.find('.ui-btn-active').removeClass('ui-btn-active'); - $(this).addClass('ui-btn-active'); + .addClass('ui-navbar') + .attr("role","navigation") + .find("ul") + .grid({grid: $navbtns.length > 2 ? "b" : "a"}); + + if( !iconpos ){ + $navbar.addClass("ui-navbar-noicons"); + } + + $navbtns + .buttonMarkup({ + corners: false, + shadow: false, + iconpos: iconpos }); - - }); -}; -})(jQuery); \ No newline at end of file + + $navbar.delegate("a", "click",function(event){ + $navbtns.removeClass("ui-btn-active"); + }); + } +}); +})( jQuery ); \ No newline at end of file diff --git a/js/jquery.mobile.page.js b/js/jquery.mobile.page.js index bc3a2f8653d..3b1b53e7fd0 100644 --- a/js/jquery.mobile.page.js +++ b/js/jquery.mobile.page.js @@ -127,12 +127,12 @@ jQuery.widget( "mobile.page", jQuery.mobile.widget, { // enchance form controls this.element .find( "[type='radio'], [type='checkbox']" ) - .customCheckboxRadio(); + .checkboxradio(); this.element .find( "button, [type='button'], [type='submit'], [type='reset'], [type='image']" ) .not( ".ui-nojs" ) - .customButton(); + .button(); this.element .find( "input, textarea" ) diff --git a/js/jquery.mobile.support.js b/js/jquery.mobile.support.js index a489be1f8c9..73102d7ee51 100644 --- a/js/jquery.mobile.support.js +++ b/js/jquery.mobile.support.js @@ -46,13 +46,12 @@ function propExists( prop ){ function baseTagTest(){ var fauxBase = location.protocol + '//' + location.host + location.pathname + "ui-dir/", base = $("", {"href": fauxBase}).appendTo("head"), - link = $( "" ).prependTo( fakeBody ); - $.support.dynamicBaseTag = !!link[0].href.match(fauxBase); + link = $( "" ).prependTo( fakeBody ), + rebase = link[0].href; base.remove(); + return rebase.indexOf(fauxBase) === 0; }; -baseTagTest(); - $.extend( $.support, { orientation: "orientation" in window, touch: "ontouchend" in document, @@ -61,7 +60,8 @@ $.extend( $.support, { mediaquery: $.media('only all'), cssPseudoElement: !!propExists('content'), boxShadow: !!propExists('boxShadow') && !bb, - scrollTop: ("pageXOffset" in window || "scrollTop" in document.documentElement || "scrollTop" in fakeBody[0]) && !webos + scrollTop: ("pageXOffset" in window || "scrollTop" in document.documentElement || "scrollTop" in fakeBody[0]) && !webos, + dynamicBaseTag: baseTagTest() }); fakeBody.remove(); diff --git a/themes/default/jquery.mobile.button.css b/themes/default/jquery.mobile.button.css index 8aff729f764..a4c197b937d 100644 --- a/themes/default/jquery.mobile.button.css +++ b/themes/default/jquery.mobile.button.css @@ -19,10 +19,10 @@ .ui-bar .ui-btn-icon-left .ui-btn-inner { padding-left: 27px; } .ui-btn-icon-right .ui-btn-inner { padding-right: 33px; } .ui-header .ui-btn-icon-right .ui-btn-inner, -.ui-footer .ui-btn-icon-right .ui-btn-inner +.ui-footer .ui-btn-icon-right .ui-btn-inner, .ui-bar .ui-btn-icon-right .ui-btn-inner { padding-right: 27px; } .ui-btn-icon-top .ui-btn-inner { padding-top: 33px; } -.ui-header .ui-btn-icon-top .ui-btn-inner +.ui-header .ui-btn-icon-top .ui-btn-inner, .ui-footer .ui-btn-icon-top .ui-btn-inner, .ui-bar .ui-btn-icon-top .ui-btn-inner { padding-top: 27px; } .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 33px; } diff --git a/themes/default/jquery.mobile.collapsible.css b/themes/default/jquery.mobile.collapsible.css index 011d8c7469b..5d89e050ca1 100644 --- a/themes/default/jquery.mobile.collapsible.css +++ b/themes/default/jquery.mobile.collapsible.css @@ -9,7 +9,10 @@ .ui-collapsible-heading a .ui-btn-inner { padding-left: 40px; } .ui-collapsible-heading a span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; } .ui-collapsible-heading a span.ui-btn .ui-btn-inner { padding: 0; } -.ui-collapsible-heading a span.ui-btn .ui-icon { left: 2px; } +.ui-collapsible-heading a span.ui-btn .ui-icon { left: 0; margin-top: -10px; } .ui-collapsible-heading-status { position:absolute; left:-99999px; } .ui-collapsible-content { display: block; padding: 10px 0 10px 8px; } -.ui-collapsible-content-collapsed { display: none; } \ No newline at end of file +.ui-collapsible-content-collapsed { display: none; } + +.ui-collapsible-set { margin: .5em 0; } +.ui-collapsible-set .ui-collapsible-contain { margin: -1px 0 0; } \ No newline at end of file diff --git a/themes/default/jquery.mobile.controlgroup.css b/themes/default/jquery.mobile.controlgroup.css index bbe54ae244f..abeffef57a2 100644 --- a/themes/default/jquery.mobile.controlgroup.css +++ b/themes/default/jquery.mobile.controlgroup.css @@ -9,13 +9,13 @@ .ui-controlgroup-controls { display: block; width: 95%;} .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-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; } .ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; } .ui-controlgroup-horizontal { 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-checkbox, .ui-controlgroup-horizontal .ui-radio { margin: 0 -5px 0 0; display: inline-block; } +.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn, +.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .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; } /* conflicts with listview.. @@ -23,5 +23,5 @@ .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { padding: 5px 6px 5px 5px; } */ -.min-width-480 .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } -.min-width-480 .ui-controlgroup-controls { width: 60%; display: inline-block; } \ No newline at end of file +.min-width-480px .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } +.min-width-480px .ui-controlgroup-controls { width: 60%; display: inline-block; } \ No newline at end of file diff --git a/themes/default/jquery.mobile.core.css b/themes/default/jquery.mobile.core.css index c82b9854bc8..fd70f1a031d 100644 --- a/themes/default/jquery.mobile.core.css +++ b/themes/default/jquery.mobile.core.css @@ -21,7 +21,7 @@ .ui-page-active { display: block; overflow: visible; } /* loading screen */ -.ui-loading, .ui-loading body { overflow: hidden !important; } +.ui-loading body { overflow: hidden !important; } .ui-loading .ui-loader { display: block; } .ui-loading .ui-page { overflow: hidden; } .ui-loader { display: none; position: absolute; opacity: .85; z-index: 10; top: 75px; left: 50%; width: 200px; margin-left: -130px; padding: 20px 30px; } diff --git a/themes/default/jquery.mobile.forms.checkboxradio.css b/themes/default/jquery.mobile.forms.checkboxradio.css index ee64768c059..87225b44099 100644 --- a/themes/default/jquery.mobile.forms.checkboxradio.css +++ b/themes/default/jquery.mobile.forms.checkboxradio.css @@ -3,7 +3,7 @@ * Copyright (c) jQuery Project * Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses. */ -div.ui-checkbox, div.ui-radio { position:relative; margin: .2em 0 .5em; } +.ui-checkbox, .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; } diff --git a/themes/default/jquery.mobile.forms.select.css b/themes/default/jquery.mobile.forms.select.css index 427c5598b39..5120e1ea7bb 100644 --- a/themes/default/jquery.mobile.forms.select.css +++ b/themes/default/jquery.mobile.forms.select.css @@ -23,5 +23,5 @@ label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margi /*used in listbox - to be removed/replaced with page-style hiding*/ .ui-helper-hidden,.ui-mobile .ui-content-hidden { display: none; } -.min-width-480 label.ui-select { display: inline-block; width: 20%; margin: 0 2% 0 0; } -.min-width-480 .ui-select { width: 60%; display: inline-block; } \ No newline at end of file +.min-width-480px label.ui-select { display: inline-block; width: 20%; margin: 0 2% 0 0; } +.min-width-480px .ui-select { width: 60%; display: inline-block; } \ No newline at end of file diff --git a/themes/default/jquery.mobile.forms.slider.css b/themes/default/jquery.mobile.forms.slider.css index 9ae108f53fe..457e3a1e817 100644 --- a/themes/default/jquery.mobile.forms.slider.css +++ b/themes/default/jquery.mobile.forms.slider.css @@ -9,8 +9,8 @@ select.ui-slider-switch { display: none; } div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 15px; top: 4px; width: 66%; } a.ui-slider-handle { position: absolute; z-index: 10; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; } a.ui-slider-handle .ui-btn-inner { padding-left: 0; padding-right: 0; } -.min-width-480 label.ui-slider { display: inline-block; width: 20%; margin: 0 2% 0 0; } -.min-width-480 div.ui-slider { width: 45%; } +.min-width-480px label.ui-slider { display: inline-block; width: 20%; margin: 0 2% 0 0; } +.min-width-480px div.ui-slider { width: 45%; } div.ui-slider-switch { height: 32px; overflow: hidden; margin-left: 0; } div.ui-slider-inneroffset { margin-left: 50%; position: absolute; top: 1px; height: 100%; width: 50%; } diff --git a/themes/default/jquery.mobile.forms.textinput.css b/themes/default/jquery.mobile.forms.textinput.css index 8fb38b7d4f1..279ab944998 100644 --- a/themes/default/jquery.mobile.forms.textinput.css +++ b/themes/default/jquery.mobile.forms.textinput.css @@ -12,7 +12,7 @@ textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; .ui-input-search .ui-input-clear-hidden { display: none; } /* orientation adjustments - incomplete!*/ -.min-width-480 label.ui-input-text { vertical-align: top; } -.min-width-480 label.ui-input-text, label.ui-select { display: inline-block; width: 20%; margin: 0 2% 0 0; } -.min-width-480 input.ui-input-text, textarea.ui-input-text, .ui-input-search { width: 60%; display: inline-block; } -.min-width-480 .ui-input-search { width: 50%; } \ No newline at end of file +.min-width-480px label.ui-input-text { vertical-align: top; } +.min-width-480px label.ui-input-text, label.ui-select { display: inline-block; width: 20%; margin: 0 2% 0 0; } +.min-width-480px input.ui-input-text, textarea.ui-input-text, .ui-input-search { width: 60%; display: inline-block; } +.min-width-480px .ui-input-search { width: 50%; } \ No newline at end of file diff --git a/themes/default/jquery.mobile.theme.css b/themes/default/jquery.mobile.theme.css index 1a132e796ab..f5d69ef28df 100755 --- a/themes/default/jquery.mobile.theme.css +++ b/themes/default/jquery.mobile.theme.css @@ -55,7 +55,7 @@ .ui-bar-c { border: 1px solid #B3B3B3; background: #e9eaeb; color: #3E3E3E; font-weight: bold; text-shadow: 0 1px 1px #fff; background-image: -moz-linear-gradient(top, #f0f0f0, #e9eaeb); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #f0f0f0),color-stop(1, #e9eaeb)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#f0f0f0', 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; color: #333333; text-shadow: 0 1px 0 #fff; background: #f0f0f0; background-image: -moz-linear-gradient(top, #fff, #f0f0f0); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fff),color-stop(1, #f0f0f0)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fff', EndColorStr='#f0f0f0')"; } +.ui-body-c { border: 1px solid #B3B3B3; color: #333333; text-shadow: 0 1px 0 #fff; background: #f0f0f0; background-image: -moz-linear-gradient(top, #fff, #f0f0f0); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fff),color-stop(1, #f0f0f0)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#f0f0f0')"; } .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; } @@ -96,7 +96,7 @@ .ui-bar-e .ui-link-inherit { color: #333; } .ui-bar-e .ui-link { color: #2489CE; font-weight: bold; } -.ui-body-e { border: 1px solid #F7C942; color: #333333; text-shadow: 0 1px 0 #fff; background: #faeb9e; background-image: -moz-linear-gradient(top, #fff, #faeb9e); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fff),color-stop(1, #faeb9e)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fff', EndColorStr='#faeb9e')"; } +.ui-body-e { border: 1px solid #F7C942; color: #333333; text-shadow: 0 1px 0 #fff; background: #faeb9e; background-image: -moz-linear-gradient(top, #fff, #faeb9e); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fff),color-stop(1, #faeb9e)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#faeb9e')"; } .ui-body-e, .ui-body-e input, .ui-body-e select, .ui-body-e textarea, .ui-body-e button { font-family: Helvetica, Arial, sans-serif; } .ui-body-e .ui-link-inherit { color: #333333; } .ui-body-e .ui-link { color: #2489CE; font-weight: bold; } @@ -139,7 +139,7 @@ a.ui-link-inherit { text-decoration: none !important; } /* Interaction Cues ----------------------------------*/ -.ui-state-disabled { cursor: default !important; opacity: .3; } +.ui-disabled { cursor: default !important; opacity: .3; } /* Icons ----------------------------------*/ diff --git a/themes/default/jquery.mobile.transitions.css b/themes/default/jquery.mobile.transitions.css index 46423829f2d..0ea9f54a709 100644 --- a/themes/default/jquery.mobile.transitions.css +++ b/themes/default/jquery.mobile.transitions.css @@ -4,9 +4,10 @@ * Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) licenses. */ .spin { --webkit-animation-name: spin; --webkit-animation-duration: 1s; --webkit-animation-iteration-count: infinite; + -webkit-transform: rotate(360deg); + -webkit-animation-name: spin; + -webkit-animation-duration: 1s; + -webkit-animation-iteration-count: infinite; } @-webkit-keyframes spin { from {-webkit-transform: rotate(0deg);} @@ -22,22 +23,27 @@ Built by David Kaneda and maintained by Jonathan Stark. } .slide.in { + -webkit-transform: translateX(0); -webkit-animation-name: slideinfromright; } .slide.out { + -webkit-transform: translateX(-100%); -webkit-animation-name: slideouttoleft; } .slide.in.reverse { + -webkit-transform: translateX(0); -webkit-animation-name: slideinfromleft; } .slide.out.reverse { + -webkit-transform: translateX(100%); -webkit-animation-name: slideouttoright; } .slideup.in { + -webkit-transform: translateY(0); -webkit-animation-name: slideinfrombottom; z-index: 10; } @@ -48,6 +54,7 @@ Built by David Kaneda and maintained by Jonathan Stark. } .slideup.out.reverse { + -webkit-transform: translateY(100%); z-index: 10; -webkit-animation-name: slideouttobottom; } @@ -57,6 +64,7 @@ Built by David Kaneda and maintained by Jonathan Stark. -webkit-animation-name: dontmove; } .slidedown.in { + -webkit-transform: translateY(0); -webkit-animation-name: slideinfromtop; z-index: 10; } @@ -67,6 +75,7 @@ Built by David Kaneda and maintained by Jonathan Stark. } .slidedown.out.reverse { + -webkit-transform: translateY(-100%); z-index: 10; -webkit-animation-name: slideouttotop; } @@ -127,6 +136,7 @@ Built by David Kaneda and maintained by Jonathan Stark. } .fade.in { + opacity: 1; z-index: 10; -webkit-animation-name: fadein; } @@ -134,25 +144,39 @@ Built by David Kaneda and maintained by Jonathan Stark. z-index: 0; } +/* The properties in this body rule are only necessary for the 'flip' transition. + * We need specify the perspective to create a projection matrix. This will add + * some depth as the element flips. The depth number represents the distance of + * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate + * value. + */ +body { + -webkit-perspective: 1000; +} + .flip { -webkit-animation-duration: .65s; } .flip.in { + -webkit-transform: rotateY(0) scale(1); -webkit-animation-name: flipinfromleft; } .flip.out { + -webkit-transform: rotateY(-180deg) scale(.8); -webkit-animation-name: flipouttoleft; } /* Shake it all about */ .flip.in.reverse { + -webkit-transform: rotateY(0) scale(1); -webkit-animation-name: flipinfromright; } .flip.out.reverse { + -webkit-transform: rotateY(180deg) scale(.8); -webkit-animation-name: flipouttoright; } @@ -189,11 +213,15 @@ Built by David Kaneda and maintained by Jonathan Stark. } .pop.in { + -webkit-transform: scale(1); + opacity: 1; -webkit-animation-name: popin; z-index: 10; } .pop.out.reverse { + -webkit-transform: scale(.2); + opacity: 0; -webkit-animation-name: popout; z-index: 10; } diff --git a/themes/valencia/jquery.mobile.theme.css b/themes/valencia/jquery.mobile.theme.css index b8c5745fb80..6f7e4223e8d 100644 --- a/themes/valencia/jquery.mobile.theme.css +++ b/themes/valencia/jquery.mobile.theme.css @@ -700,7 +700,7 @@ a.ui-link-inherit { /* Interaction Cues ----------------------------------*/ -.ui-state-disabled { +.ui-disabled { cursor: default !important; opacity: .3; }