forked from dotnetwise/jquery-mobile
-
Notifications
You must be signed in to change notification settings - Fork 0
/
log-page-events.js
108 lines (96 loc) · 3 KB
/
log-page-events.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*!
* jQuery Mobile v@VERSION
* http://jquerymobile.com/
*
* Copyright 2011, jQuery Project
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
// This is code that can be used as a simple bookmarklet for debugging
// page loading and navigation in pages that use the jQuery Mobile framework.
// All messages are sent to the browser's console.log so to see the messages,
// you need to make sure you enable the console/log in your browser.
(function($, window, document) {
if ( typeof $ === "undefined" ) {
alert( "log-page-events.js requires jQuery core!" );
return;
}
var pageEvents = "mobileinit pagebeforechange pagechange pagechangefailed pagebeforeload pageload pageloadfailed pagebeforecreate pagecreate pageinit pagebeforeshow pageshow pagebeforehide pagehide pageremove";
function getElementDesc( ele )
{
var result = [];
if ( ele ) {
result.push( ele.nodeName.toLowerCase() );
var c = ele.className;
if ( c ) {
c = c.replace( /^\s+|\s+$/, "" ).replace( /\s+/, " " );
if (c) {
result.push( "." + c.split( " " ).join( "." ) );
}
}
if ( ele.id ){
result.push( "#" + ele.id )
}
}
return result.join( "" );
}
function debugLog( msg )
{
console.log( msg );
}
function getNativeEvent( event ) {
while ( event && typeof event.originalEvent !== "undefined" ) {
event = event.originalEvent;
}
return event;
}
function logEvent( event, data )
{
var result = event.type + " (" + (new Date).getTime() + ")\n";
switch( event.type )
{
case "pagebeforechange":
case "pagechange":
case "pagechangefailed":
result += "\tpage: ";
if ( typeof data.toPage === "string" ) {
result += data.toPage;
} else {
result += getElementDesc( data.toPage[ 0 ] ) + "\n\tdata-url: " + data.toPage.jqmData( "url" );
}
result += "\n\n"
break;
case "pagebeforeload":
case "pageloadfailed":
result += "\turl: " + data.url + "\n\tabsUrl: " + data.absUrl + "\n\n";
break;
case "pageload":
result += "\turl: " + data.url + "\n\tabsUrl: " + data.absUrl + "\n\tpage: " + getElementDesc( data.page[ 0 ] ) + "\n\n";
break;
case "pagebeforeshow":
case "pageshow":
case "pagebeforehide":
case "pagehide":
result += "\tpage: " + getElementDesc( event.target ) + "\n";
result += "\tdata-url: " + $( event.target ).jqmData( "url" ) + "\n\n";
break;
case "pagebeforecreate":
case "pagecreate":
case "pageinit":
result += "\telement: " + getElementDesc( event.target ) + "\n\n";
break;
case "hashchange":
result += "\tlocation: " + location.href + "\n\n";
break;
case "popstate":
var e = getNativeEvent( event );
result += "\tlocation: " + location.href + "\n";
result += "\tstate.hash: " + ( e.state && e.state.hash ? e.state.hash + "\n\n" : "" );
break;
}
debugLog( result );
}
// Now add our logger.
$( document ).bind( pageEvents, logEvent );
$( window ).bind( "hashchange popstate", logEvent );
})( jQuery, window, document );