| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- (function( $, undefined ) {
- //special click handling to make widget work remove after nav changes in 1.4
- var href,
- ele = "";
- $( document ).on( "click", "a", function( e ) {
- href = $( this ).attr( "href" );
- var hash = $.mobile.path.parseUrl( href );
- if( typeof href !== "undefined" && hash !== "" && href !== href.replace( hash,"" ) && hash.search( "/" ) !== -1 ){
- //remove the hash from the link to allow normal loading of the page.
- var newHref = href.replace( hash,"" );
- $( this ).attr( "href", newHref );
- }
- ele = $( this );
- });
- $( document ).on( "pagebeforechange", function( e, f ){
- f.originalHref = href;
- });
- $( document ).on("pagebeforechange", function( e,f ){
- var hash = $.mobile.path.parseUrl(f.toPage).hash,
- hashEl, hashElInPage;
-
- try {
- hashEl = $( hash );
- } catch( e ) {
- hashEl = $();
- }
-
- try {
- hashElInPage = $( ".ui-page-active " + hash );
- } catch( e ) {
- hashElInPage = $();
- }
-
- if( typeof hash !== "undefined" &&
- hash.search( "/" ) === -1 &&
- hash !== "" &&
- hashEl.length > 0 &&
- !hashEl.hasClass( "ui-page" ) &&
- !hashEl.hasClass( "ui-popup" ) &&
- hashEl.data('role') !== "page" &&
- !hashElInPage.hasClass( "ui-panel" ) &&
- !hashElInPage.hasClass( "ui-popup" ) ) {
- //scroll to the id
- var pos = hashEl.offset().top;
- $.mobile.silentScroll( pos );
- $.mobile.navigate( hash, '', true );
- } else if( typeof f.toPage !== "object" &&
- hash !== "" &&
- $.mobile.path.parseUrl( href ).hash !== "" &&
- !hashEl.hasClass( "ui-page" ) && hashEl.attr('data-role') !== "page" &&
- !hashElInPage.hasClass( "ui-panel" ) &&
- !hashElInPage.hasClass( "ui-popup" ) ) {
- $( ele ).attr( "href", href );
- $.mobile.document.one( "pagechange", function() {
- if( typeof hash !== "undefined" &&
- hash.search( "/" ) === -1 &&
- hash !== "" &&
- hashEl.length > 0 &&
- hashElInPage.length > 0 &&
- !hashEl.hasClass( "ui-page" ) &&
- hashEl.data('role') !== "page" &&
- !hashElInPage.hasClass( "ui-panel" ) &&
- !hashElInPage.hasClass( "ui-popup" ) ) {
- hash = $.mobile.path.parseUrl( href ).hash;
- var pos = hashElInPage.offset().top;
- $.mobile.silentScroll( pos );
- }
- } );
- }
- });
- $( document ).on( "mobileinit", function(){
- hash = window.location.hash;
- $.mobile.document.one( "pageshow", function(){
- var hashEl, hashElInPage;
-
- try {
- hashEl = $( hash );
- } catch( e ) {
- hashEl = $();
- }
-
- try {
- hashElInPage = $( ".ui-page-active " + hash );
- } catch( e ) {
- hashElInPage = $();
- }
-
- if( hash !== "" &&
- hashEl.length > 0 &&
- hashElInPage.length > 0 &&
- hashEl.attr('data-role') !== "page" &&
- !hashEl.hasClass( "ui-page" ) &&
- !hashElInPage.hasClass( "ui-panel" ) &&
- !hashElInPage.hasClass( "ui-popup" ) &&
- !hashEl.is( "body" ) ){
- var pos = hashElInPage.offset().top;
- setTimeout( function(){
- $.mobile.silentScroll( pos );
- }, 100 );
- }
- });
- });
- //h2 widget
- $( document ).on( "mobileinit", function(){
- $.widget( "mobile.h2linker", {
- options:{
- initSelector: ":jqmData(quicklinks='true')"
- },
-
- _create:function(){
- var self = this,
- bodyid = "ui-page-top",
- panel = "<div data-role='panel' class='jqm-nav-panel jqm-quicklink-panel' data-position='right' data-display='overlay' data-theme='a'><ul data-role='listview' data-inset='false' data-theme='a' data-divider-theme='a' data-icon='false' class='jqm-list'><li data-role='list-divider'>Quick Links</li></ul></div>",
- first = true,
- h2dictionary = new Object();
- if(typeof $("body").attr("id") === "undefined"){
- $("body").attr("id",bodyid);
- } else {
- bodyid = $("body").attr("id");
- }
- this.element.find("div.jqm-content>h2").each(function(){
- var id, text = $(this).text();
-
- if(typeof $(this).attr("id") === "undefined"){
- id = text.replace(/[^\.a-z0-9:_-]+/gi,"");
- $(this).attr( "id", id );
- } else {
- id = $(this).attr("id");
- }
-
- h2dictionary[id] = text;
- if(!first){
- $(this).before( "<a href='#" + bodyid + "' class='jqm-deeplink ui-icon-carat-u ui-alt-icon'>Top</a>");
- } else {
- $(this).before("<a href='#' data-ajax='false' class='jqm-deeplink jqm-open-quicklink-panel ui-icon-carat-l ui-alt-icon'>Quick Links</a>");
- }
- first = false;
- });
- this._on(".jqm-open-quicklink-panel", {
- "click": function(){
- $(".ui-page-active .jqm-quicklink-panel").panel("open");
- return false;
- }
- });
- this._on( document, {
- "pagebeforechange": function(){
- this.element.find(".jqm-quicklink-panel").panel("close");
- this.element.find(".jqm-quicklink-panel .ui-btn-active").removeClass("ui-btn-active");
- }
- });
- if( $(h2dictionary).length > 0 ){
- this.element.prepend(panel)
- this.element.find(".jqm-quicklink-panel").panel().find("ul").listview();
- }
- $.each(h2dictionary,function(id,text){
- self.element.find(".jqm-quicklink-panel ul").append("<li><a href='#"+id+"'>"+text+"</a></li>");
- });
- self.element.find(".jqm-quicklink-panel ul").listview("refresh");
-
- }
- });
- });
- $( document ).bind( "pagecreate create", function( e ) {
- var initselector = $.mobile.h2linker.prototype.options.initSelector;
- if($(e.target).data("quicklinks")){
- $(e.target).h2linker();
- }
- });
- })( jQuery );
|