GIF89a;
Direktori : /home/serb/www/m/themes/ |
Current File : /home/serb/www/m/themes/jquery.mobile.pagination.js |
/*! * jQuery Mobile Framework : drag pagination plugin * Copyright (c) Filament Group, Inc * Authored by Scott Jehl, scott@filamentgroup.com * Dual licensed under the MIT or GPL Version 2 licenses. */ (function( $, undefined ){ //auto-init on pagecreate $( document ).bind( "pagecreate", function( e ){ $( ":jqmData(role='pagination')", e.target ).pagination(); }); var pageTitle=""; //create widget $.widget( "mobile.pagination", $.mobile.widget, { _create: function() { var $el = this.element, $page = $el.closest( ".ui-page" ), $links = $el.find( "a" ), $origin = $.mobile.pageContainer, classNS = "ui-pagination", prevLIClass = classNS + "-prev", nextLIClass = classNS + "-next", prevPClass = "ui-page-prev", nextPClass = "ui-page-next", snapClass = classNS + "-snapping", dragClass = classNS + "-dragging", dragClassOn = false, $nextPage, $prevPage; $el.addClass( classNS ); //prefetch next and prev pages when page is first shown $page.one( "pageshow", function(){ $links.each(function(){ var next = $( this ).closest( "." + nextLIClass ).length, url = $( this ).attr( "href" ), setNP = function( newPage ){ if( next ){ $nextPage = newPage; } else{ $prevPage = newPage; } }; if( !$page ){ return; } //if it's a local div reference, make sure it's initialized if( url.indexOf( "#") === 0 ){ setNP( $( ":jqmData(url='" + url.split("#")[1] + "')").page() ); return; } if( $( ":jqmData(url='" + url + "')" ).length ){ return; } //NOTE: this must handle local # urls as well in jQM $.mobile .loadPage( url ) .done(function( url, options, newPage ) { setNP( newPage ); }); }); }); //set up next and prev buttons $links.each(function(){ var reverse = $( this ).closest( "." + prevLIClass ).length; $(this) .buttonMarkup({ "role" : "button", "theme" : "d", "iconpos" : "notext", "icon" : "arrow-" + ( reverse ? "l" : "r") }) .bind( "vclick", function(){ $.mobile.changePage( $(this).attr( "href" ), { reverse: reverse } ); return false; }); }); // Keyboard handling $( document ) .unbind( "keyup.pagination" ) .bind( "keyup.pagination", function( e ){ if( !$( e.target ).is( "input, textarea, select, button" ) ){ var targetA, reverse; // Left arrow if( e.keyCode === $.mobile.keyCode.LEFT ){ targetA = $( ".ui-page-active .ui-pagination-prev a" ); reverse = true; } // Right arrow else if( e.keyCode === $.mobile.keyCode.RIGHT ){ targetA = $( ".ui-page-active .ui-pagination-next a" ); } if( targetA && targetA.length ){ $.mobile.changePage( targetA.attr( "href" ), { reverse: reverse, transition: targetA.jqmData( "transition" ) } ); e.preventDefault(); } } }); //page drag handling $page .bind("touchstart", function(e) { var data = e.originalEvent.touches ? e.originalEvent.touches[0] : e, start = [ data.pageX, data.pageY ], $pages = $page.add( $nextPage ).add( $prevPage ), dragStart = false, setTransform = function( pxVal ){ var val = "translateX(" + ( pxVal / $origin.width() * 100 ) + "%)"; $pages.css({ "-webkit-transform" : val, "-moz-transform" : val, "-ms-transform" : val, "-o-transform" : val, "transform" : val }); }, moveHandler = function( e ) { var data = e.originalEvent.touches ? e.originalEvent.touches[0] : e, stop = [ data.pageX, data.pageY ], xdist = Math.abs(start[0] - stop[0]); if( !dragStart ){ dragStart = true; $page.trigger( "dragstart.pagination" ); } // prevent scrolling if ( xdist > 8 ) { e.preventDefault(); } if( !dragClassOn ){ dragClassOn = true; $origin.addClass( dragClass ); } $page.trigger( "dragging.pagination" ); setTransform( stop[0] - start[0] ); }, snapTo = function( newOffset, immediate ){ var $newActive = newOffset === 0 ? $page : newOffset > 0 ? $prevPage : $nextPage, samePage = !$newActive || $newActive.is( $page ), newUrl = samePage && $page.jqmData( "url" ) || $newActive.jqmData( "url" ), doneCB = function(){ //if it's a new page, change history! if( !samePage ){ //remove active state on old active $page.removeClass( $.mobile.activePageClass ); //disable hash listening $.mobile.urlHistory.ignoreNextHashChange = true; $.mobile.path.set( newUrl ); //if title element wasn't found, try the page div data attr too var newPageTitle = $newActive.jqmData( "title" ) || $newActive.children( ":jqmData(role='header')" ).find( ".ui-title" ).text(); if( !!newPageTitle ) { pageTitle = newPageTitle; } //add page to history stack if it's not back or forward $.mobile.urlHistory.addNew( newUrl, undefined, pageTitle, $newActive ); //set page title document.title = $.mobile.urlHistory.getActive().title; //set "toPage" as activePage $.mobile.activePage = $newActive; $page.jqmData( "page" )._trigger( "hide", null, { nextPage: $newActive } ); $newActive.jqmData( "page" )._trigger( "show", null, { prevPage: $page } ); } $origin.removeClass( snapClass + " " + dragClass ); dragClassOn = dragStart = false; $page.trigger( "snapstop.pagination" ); $pages .removeClass( prevPClass + " " + nextPClass ) .removeAttr( "style" ); }; if( !samePage ){ $page.jqmData( "page" )._trigger( "beforehide", null, { nextPage: $newActive } ); //switch active page $newActive .addClass( $.mobile.activePageClass ) .jqmData( "page" )._trigger( "beforeshow", null, { prevPage: $page } ); } if( immediate ){ $page.trigger( "snapping.pagination" ); setTransform( newOffset ); doneCB(); } else{ $page.trigger( "snapping.pagination" ); $origin.addClass( snapClass ); //switch to animation complete handler $page.one( "webkitTransitionEnd oTransitionEnd transitionend", doneCB ); setTransform( newOffset ); } }, stop; //line up the pages if( $nextPage ){ $nextPage.addClass( nextPClass ); } if( $prevPage ){ $prevPage.addClass( prevPClass ); } //bind touch handlers $page .bind( "gesturestart.pagination touchend.pagination", function(){ $page.unbind( ".pagination" ); }) .bind( "touchmove.pagination", moveHandler ) .one( "touchend", function( e ){ var pOffset = $page.offset().left, absOS = Math.abs( pOffset ), toGo = $page.width() - absOS; snapTo( absOS > 150 ? pOffset + ( pOffset > 0 ? toGo : -toGo ) : 0, absOS < 10 ); }); }); } }); }( jQuery ));