1 | <?php␊ |
2 | ␊ |
3 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - -␊ |
4 | ␊ |
5 | Title : HTML Output for Php Quick Profiler␊ |
6 | Author : Created by Ryan Campbell␊ |
7 | URL : https://github.com/particletree ( http://www.particletree.com no longer works )␊ |
8 | ␊ |
9 | Last Updated : August 19, 2012 by Peter Schmalfeldt <manifestinteractive@gmail.com>␊ |
10 | ␊ |
11 | Description : This is a horribly ugly function used to output␊ |
12 | the PQP HTML. This is great because it will just work in your project,␊ |
13 | but it is hard to maintain and read. See the README file for how to use␊ |
14 | the Smarty file we provided with PQP.␊ |
15 | ␊ |
16 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */␊ |
17 | ␊ |
18 | function displayPqp($output) {␊ |
19 | ␊ |
20 | ␉$css = preg_replace('/[\n\r]/', '', <<<CSS␊ |
21 | .pQp {width:100%;z-index:9999;text-align:center;position:fixed;bottom:0;}␊ |
22 | * html .pQp {position:absolute;}␊ |
23 | .pQp * {margin:0 ;padding:0;border:none;background:transparent;}␊ |
24 | #pQp {margin:0 auto;width:85%;min-width:960px;background-color:#222;border:12px solid #000;border-bottom:none;font-family:"Lucida Grande",Tahoma,Arial,sans-serif;-webkit-border-top-left-radius:15px;-webkit-border-top-right-radius:15px;-moz-border-radius-topleft:15px;-moz-border-radius-topright:15px;border-top-left-radius:15px;border-top-right-radius:15px;}␊ |
25 | #pQp tbody {background:transparent;}␊ |
26 | #pQp .pqp-box h3 {font-weight:normal;line-height:200px;padding:0 15px;color:#fff;}␊ |
27 | .pQp,.pQp td {color:#444}␊ |
28 | #pqp-metrics {background:#000;width:100%}␊ |
29 | #pqp-console,#pqp-speed,#pqp-queries,#pqp-memory,#pqp-files,#pqp-config,#pqp-session,#pqp-get,#pqp-post {background-color:#000;border-top:1px solid #ccc;height:200px;overflow:auto}␊ |
30 | .pQp .pqp-green {color:#588e13!important}␊ |
31 | .pQp .pqp-blue {color:#3769a0!important}␊ |
32 | .pQp .pqp-purple {color:#953fa1!important}␊ |
33 | .pQp .pqp-orange {color:#d28c00!important}␊ |
34 | .pQp .pqp-red {color:#b72f09!important}␊ |
35 | .pQp .pqp-yellow {color:#CDCF3A!important}␊ |
36 | .pQp .pqp-cyan {color:#3EC4D3!important}␊ |
37 | .pQp .pqp-pink {color:#FF7CAD!important}␊ |
38 | .pQp .pqp-flesh {color:#FFA46E!important}␊ |
39 | .pQp strong {color:#fff}␊ |
40 | #pQp,#pqp-console,#pqp-speed,#pqp-queries,#pqp-memory,#pqp-files,#pqp-config,#pqp-session,#pqp-get,#pqp-post {display:none}␊ |
41 | .pQp .pqp-console,.pQp .pqp-speed,.pQp .pqp-queries,.pQp .pqp-memory,.pQp .pqp-files,.pQp .pqp-config,.pQp .pqp-session,.pQp .pqp-get,.pQp .pqp-post {display:block!important}␊ |
42 | .pQp .pqp-console #pqp-console,.pQp .pqp-speed #pqp-speed,.pQp .pqp-queries #pqp-queries,.pQp .pqp-memory #pqp-memory,.pQp .pqp-files #pqp-files,.pQp .pqp-config #pqp-config,.pQp .pqp-session #pqp-session,.pQp .pqp-get #pqp-get,.pQp .pqp-post #pqp-post {display:block}␊ |
43 | .pqp-console td.pqp-green,.pqp-speed td.pqp-blue,.pqp-queries td.pqp-purple,.pqp-memory td.pqp-orange,.pqp-files td.pqp-red,.pqp-config td.pqp-yellow,.pqp-session td.pqp-cyan,.pqp-get td.pqp-pink,.pqp-post td.pqp-flesh {background:#222!important;border-bottom:6px solid #fff!important;cursor:default!important}␊ |
44 | .pqp-tallDetails #pQp .pqp-box {height:500px}␊ |
45 | .pqp-tallDetails #pQp .pqp-box h3 {line-height:500px}␊ |
46 | .pqp-hideDetails #pQp .pqp-box {display:none!important}␊ |
47 | .pqp-hideDetails #pqp-footer {border-top:1px dotted #444}␊ |
48 | .pqp-hideDetails #pQp #pqp-metrics td {height:50px;background:#000!important;border-bottom:none!important;cursor:default!important}␊ |
49 | #pQp var {font-size:18px;margin:0 0 2px 0}␊ |
50 | #pQp h4 {font-size:10px}␊ |
51 | .pqp-hideDetails .heightToggle {visibility:hidden}␊ |
52 | #pqp-metrics td {height:80px;width:11%;text-align:center;cursor:pointer;border:4px solid #000;border-bottom:6px solid #444;-webkit-border-top-left-radius:15px;-moz-border-radius-topleft:15px;-webkit-border-top-right-radius:15px;-moz-border-radius-topright:15px;border-top-left-radius:15px;border-top-right-radius:15px;background-color:#222;}␊ |
53 | #pqp-metrics td:hover {background:#222;border-bottom:6px solid #777}␊ |
54 | #pqp-metrics .pqp-green {border-left:none}␊ |
55 | #pqp-metrics .pqp-red {border-right:none}␊ |
56 | #pqp-metrics h4 {text-shadow:#000 1px 1px 1px}␊ |
57 | .pqp-side var {text-shadow:#444 1px 1px 1px;background-color:transparent;}␊ |
58 | .pQp var {font-size:23px;font-weight:bold;font-style:normal;margin:0 0 3px 0;display:block; margin-top: 16px !important;}␊ |
59 | .pQp h4 {font-size:12px;color:#fff;margin:0 0 4px 0}␊ |
60 | .pQp .pqp-main {width:80%; float: left;}␊ |
61 | .pQp .pqp-main table {width:100%;}␊ |
62 | *+html .pQp .pqp-main {width:78%}␊ |
63 | * html .pQp .pqp-main {width:77%}␊ |
64 | .pQp .pqp-main td {padding:7px 15px;text-align:left;border-left:1px solid #333;border-right:1px solid #333;border-bottom:1px dotted #323232;color:#FFF;}␊ |
65 | .pQp .pqp-main td,.pQp .pqp-main pre {font-family:Monaco,"Consolas","Lucida Console","Courier New",monospace;font-size:11px; background: #222;}␊ |
66 | .pQp .pqp-main td.pqp-alt {background:#111}␊ |
67 | .pQp .pqp-main tr.pqp-alt td {background:#2e2e2e;border-top:1px dotted #4e4e4e}␊ |
68 | .pQp .pqp-main tr.pqp-alt td.pqp-alt {background:#333}␊ |
69 | .pQp .pqp-main td b {float:right;font-weight:normal;color:#e6f387}␊ |
70 | .pQp .pqp-main td:hover {background:#2e2e2e}␊ |
71 | .pQp .pqp-side {float:left;width:20%;background:#000;color:#fff;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px;text-align:center}␊ |
72 | .pQp .pqp-side tr {background-color: #000;}␊ |
73 | .pQp .pqp-side td {padding:10px 0 5px 0;background-color: #000; text-align: center !important}␊ |
74 | .pQp .pqp-side var {color:#fff;font-size:15px}␊ |
75 | .pQp .pqp-side h4 {font-weight:normal;color:#f4fcca;font-size:11px;background-color:transparent;}␊ |
76 | #pqp-console .pqp-side td {padding:12px 0; text-align: center !important}␊ |
77 | #pqp-console .pqp-side td.pqp-alt1 {background:#588e13;width:51%}␊ |
78 | #pqp-console .pqp-side td.pqp-alt2 {background-color:#b72f09}␊ |
79 | #pqp-console .pqp-side td.pqp-alt3 {background:#d28c00;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}␊ |
80 | #pqp-console .pqp-side td.pqp-alt4 {background-color:#3769a0;border-bottom:1px solid #274b74}␊ |
81 | #pqp-console .pqp-main table {width:100%}␊ |
82 | #pqp-console td div {width:100%;overflow:hidden;background-color:transparent;}␊ |
83 | #pqp-console td.pqp-type {font-family:"Lucida Grande",Tahoma,Arial,sans-serif;text-align:center;text-transform:uppercase;font-size:9px;padding-top:9px;color:#f4fcca;vertical-align:top;width:40px}␊ |
84 | .pQp .pqp-log-log td.pqp-type {background:#47740d!important}␊ |
85 | .pQp .pqp-log-error td.pqp-type {background:#9b2700!important}␊ |
86 | .pQp .pqp-log-memory td.pqp-type {background:#d28c00!important}␊ |
87 | .pQp .pqp-log-speed td.pqp-type {background:#2b5481!important}␊ |
88 | .pQp .pqp-log-log prepqp-{color:#999;background-color:transparent;}␊ |
89 | .pQp .pqp-log-log td:hover pre {color:#fff}␊ |
90 | .pQp .pqp-log-log em,.pqp-log-memory em,.pQp .pqp-log-speed em {float:left;font-style:normal;display:block;color:#fff;background-color:transparent;}␊ |
91 | .pQp .pqp-log-memory pre,.pQp .pqp-log-speed pre {float:right;white-space:normal;display:block;color:#fffd70;background-color:transparent;}␊ |
92 | #pqp-speed .pqp-side td {padding:12px 0;border-left:1px solid #1e3c5c;border-bottom:1px solid #1e3c5c;border-right:1px solid #1e3c5c;}␊ |
93 | #pqp-speed .pqp-side td.pqp-alt {background-color:#2b5481;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}␊ |
94 | #pqp-queries .pqp-side td {border-bottom:1px solid #662a6e;border-left:1px solid #662a6e;border-right:1px solid #662a6e}␊ |
95 | #pqp-queries .pqp-side td.pqp-alt {background-color:#7b3384;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}␊ |
96 | #pqp-queries .pqp-main b {float:none;background-color:transparent;}␊ |
97 | #pqp-queries .pqp-main em {display:block;padding:2px 0 0 0;font-style:normal;color:#aaa;background-color:transparent;}␊ |
98 | #pqp-memory .pqp-side td {padding:12px 0;background-color:#c48200;border-bottom:1px solid #865900;border-left:1px solid #865900;border-right:1px solid #865900}␊ |
99 | #pqp-memory .pqp-side td.pqp-alt {background-color:#ac7200;border-bottom:bone;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}␊ |
100 | #pqp-files .pqp-side td {border-bottom:1px solid #7c1f00;border-left:1px solid #7c1f00;border-right:1px solid #7c1f00}␊ |
101 | #pqp-files .pqp-side td.pqp-alt {background-color:#9b2700;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}␊ |
102 | #pqp-config .pqp-side td {border-bottom:1px solid #CDCF3A;border-left:1px solid #CDCF3A;border-right:1px solid #CDCF3A}␊ |
103 | #pqp-config .pqp-side td.pqp-alt {background-color:#CDCF3A;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}␊ |
104 | #pqp-session .pqp-side td {border-bottom:1px solid #3EC4D3;border-left:1px solid #3EC4D3;border-right:1px solid #3EC4D3}␊ |
105 | #pqp-session .pqp-side td.pqp-alt {background-color:#3EC4D3;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}␊ |
106 | #pqp-get .pqp-side td {border-bottom:1px solid #FF7CAD;border-left:1px solid #FF7CAD;border-right:1px solid #FF7CAD}␊ |
107 | #pqp-get .pqp-side td.pqp-alt {background-color:#FF7CAD;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}␊ |
108 | #pqp-post .pqp-side td {border-bottom:1px solid #FFA46E;border-left:1px solid #FFA46E;border-right:1px solid #FFA46E}␊ |
109 | #pqp-post .pqp-side td.pqp-alt {background-color:#FFA46E;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}␊ |
110 | #pqp-footer {width:100%;background:#000;font-size:11px;border-top:1px solid #ccc}␊ |
111 | #pqp-footer td {padding:0!important;border:none!important}␊ |
112 | #pqp-footer strong {color:#fff}␊ |
113 | #pqp-footer a {color:#999;padding:5px 10px;text-decoration:none}␊ |
114 | #pqp-footer .pqp-credit {width:20%;text-align:left}␊ |
115 | #pqp-footer .pqp-credit a {line-height: 30px}␊ |
116 | #pqp-footer .pqp-actions {width:80%;text-align:right}␊ |
117 | #pqp-footer .pqp-actions a {float:right;width:auto}␊ |
118 | #pqp-footer a:hover,#pqp-footer a:hover strong,#pqp-footer a:hover b {background:#fff;color:black!important;text-decoration:none}␊ |
119 | #pqp-footer a:active,#pqp-footer a:active strong,#pqp-footer a:active b {background:#ecf488;color:green!important}␊ |
120 | #openProfiler { position: fixed; bottom: 0; right: 20px; z-index:999999; }␊ |
121 | #openProfiler a { height:32px;text-align:center;width:100px;background-color:#222;border:2px solid #000;border-bottom:none;font-size:12px;font-family:"Lucida Grande",Tahoma,Arial,sans-serif;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;;border-top-right-radius:4px;color:#999;line-height: 32px;display:block;}␊ |
122 | #openProfiler a:hover {color:white;text-decoration:none}␊ |
123 | CSS␊ |
124 | );␊ |
125 | ␊ |
126 | ␉$return_output = '';␊ |
127 | ␉$return_output .=<<<JAVASCRIPT␊ |
128 | <!-- JavaScript -->␊ |
129 | <script type="text/javascript">␊ |
130 | ␉var PQP_SHOWONLOAD = (typeof PQP_SHOWONLOAD != "undefined" && PQP_SHOWONLOAD) ? "open" : "closed";␊ |
131 | ␉var PQP_HEIGHT = (typeof PQP_HEIGHT != "undefined" && PQP_HEIGHT == "tall") ? "tall" : "short";␊ |
132 | ␉var PQP_DETAILS = (typeof PQP_DETAILS != "undefined" && PQP_DETAILS) ? true : false;␊ |
133 | ␉var PQP_BOTTOM = (typeof PQP_BOTTOM == "undefined" || PQP_BOTTOM == true) ? true : false;␊ |
134 | ␊ |
135 | ␉addEvent(window, 'load', loadCSS);␊ |
136 | ␊ |
137 | ␉function changeTab(tab) {␊ |
138 | ␉␉var pQp = document.getElementById('pQp');␊ |
139 | ␉␉hideAllTabs();␊ |
140 | ␉␉addClassName(pQp, tab, true);␊ |
141 | ␉}␊ |
142 | ␊ |
143 | ␉function hideAllTabs() {␊ |
144 | ␉␉var pQp = document.getElementById('pQp');␊ |
145 | ␉␉removeClassName(pQp, 'pqp-console');␊ |
146 | ␉␉removeClassName(pQp, 'pqp-speed');␊ |
147 | ␉␉removeClassName(pQp, 'pqp-queries');␊ |
148 | ␉␉removeClassName(pQp, 'pqp-memory');␊ |
149 | ␉␉removeClassName(pQp, 'pqp-files');␊ |
150 | ␉␉removeClassName(pQp, 'pqp-config');␊ |
151 | ␉␉removeClassName(pQp, 'pqp-session');␊ |
152 | ␉␉removeClassName(pQp, 'pqp-get');␊ |
153 | ␉␉removeClassName(pQp, 'pqp-post');␊ |
154 | ␉}␊ |
155 | ␊ |
156 | ␉function toggleDetails(){␊ |
157 | ␉␉var container = document.getElementById('pqp-container');␊ |
158 | ␊ |
159 | ␉␉if(PQP_DETAILS){␊ |
160 | ␉␉␉addClassName(container, 'pqp-hideDetails', true);␊ |
161 | ␉␉␉PQP_DETAILS = false;␊ |
162 | ␉␉}␊ |
163 | ␉␉else{␊ |
164 | ␉␉␉removeClassName(container, 'pqp-hideDetails');␊ |
165 | ␉␉␉PQP_DETAILS = true;␊ |
166 | ␉␉}␊ |
167 | ␉}␊ |
168 | ␉function toggleHeight(){␊ |
169 | ␉␉var container = document.getElementById('pqp-container');␊ |
170 | ␊ |
171 | ␉␉if(PQP_HEIGHT == "short"){␊ |
172 | ␉␉␉addClassName(container, 'pqp-tallDetails', true);␊ |
173 | ␉␉␉PQP_HEIGHT = "tall";␊ |
174 | ␉␉}␊ |
175 | ␉␉else{␊ |
176 | ␉␉␉removeClassName(container, 'pqp-tallDetails');␊ |
177 | ␉␉␉PQP_HEIGHT = "short";␊ |
178 | ␉␉}␊ |
179 | ␉}␊ |
180 | ␉function toggleBottom(){␊ |
181 | ␉␉var container = document.getElementById('pqp-container');␊ |
182 | ␉␉if (container.style.position == "inherit")␊ |
183 | ␉␉{␊ |
184 | ␉␉␉container.style.position="";␊ |
185 | ␉␉}␊ |
186 | ␉␉else␊ |
187 | ␉␉{␊ |
188 | ␉␉␉container.style.position="inherit";␊ |
189 | ␉␉}␊ |
190 | ␉}␊ |
191 | ␊ |
192 | ␉function loadCSS() {␊ |
193 | ␉␉var sheet = document.createElement("style");␊ |
194 | ␉␉sheet.setAttribute("type", "text/css");␊ |
195 | ␉␉sheet.innerHTML = '$css';␊ |
196 | ␉␉document.getElementsByTagName("head")[0].appendChild(sheet);␊ |
197 | ␉}␊ |
198 | ␊ |
199 | ␊ |
200 | ␉//http://www.bigbold.com/snippets/posts/show/2630␊ |
201 | ␉function addClassName(objElement, strClass, blnMayAlreadyExist){␊ |
202 | ␉ if ( objElement.className ){␊ |
203 | ␉ var arrList = objElement.className.split(' ');␊ |
204 | ␉ if ( blnMayAlreadyExist ){␊ |
205 | ␉ var strClassUpper = strClass.toUpperCase();␊ |
206 | ␉ for ( var i = 0; i < arrList.length; i++ ){␊ |
207 | ␉ if ( arrList[i].toUpperCase() == strClassUpper ){␊ |
208 | ␉ arrList.splice(i, 1);␊ |
209 | ␉ i--;␊ |
210 | ␉ }␊ |
211 | ␉ }␊ |
212 | ␉ }␊ |
213 | ␉ arrList[arrList.length] = strClass;␊ |
214 | ␉ objElement.className = arrList.join(' ');␊ |
215 | ␉ }␊ |
216 | ␉ else{␊ |
217 | ␉ objElement.className = strClass;␊ |
218 | ␉ }␊ |
219 | ␉}␊ |
220 | ␊ |
221 | ␉//http://www.bigbold.com/snippets/posts/show/2630␊ |
222 | ␉function removeClassName(objElement, strClass){␊ |
223 | ␉ if ( objElement.className ){␊ |
224 | ␉ var arrList = objElement.className.split(' ');␊ |
225 | ␉ var strClassUpper = strClass.toUpperCase();␊ |
226 | ␉ for ( var i = 0; i < arrList.length; i++ ){␊ |
227 | ␉ if ( arrList[i].toUpperCase() == strClassUpper ){␊ |
228 | ␉ arrList.splice(i, 1);␊ |
229 | ␉ i--;␊ |
230 | ␉ }␊ |
231 | ␉ }␊ |
232 | ␉ objElement.className = arrList.join(' ');␊ |
233 | ␉ }␊ |
234 | ␉}␊ |
235 | ␊ |
236 | ␉//http://ejohn.org/projects/flexible-javascript-events/␊ |
237 | ␉function addEvent( obj, type, fn ) {␊ |
238 | ␉ if ( obj.attachEvent ) {␊ |
239 | ␉ obj["e"+type+fn] = fn;␊ |
240 | ␉ obj[type+fn] = function() { obj["e"+type+fn]( window.event ) };␊ |
241 | ␉ obj.attachEvent( "on"+type, obj[type+fn] );␊ |
242 | ␉ }␊ |
243 | ␉ else{␊ |
244 | ␉ obj.addEventListener( type, fn, false );␊ |
245 | ␉ }␊ |
246 | ␉}␊ |
247 | ␊ |
248 | ␉function openProfiler()␊ |
249 | ␉{␊ |
250 | ␉␉document.getElementById("pqp-container").style.display = "block";␊ |
251 | ␉␉document.getElementById("openProfiler").style.display = "none";␊ |
252 | ␉}␊ |
253 | ␊ |
254 | ␉function closeProfiler()␊ |
255 | ␉{␊ |
256 | ␉␉document.getElementById("pqp-container").style.display = "none";␊ |
257 | ␉␉document.getElementById("openProfiler").style.display = "block";␊ |
258 | ␉}␊ |
259 | ␊ |
260 | ␉function preventDefault(e) {␊ |
261 | ␉ e = e || window.event;␊ |
262 | ␉ if (e.preventDefault)␊ |
263 | ␉ e.preventDefault();␊ |
264 | ␉ e.returnValue = false;␊ |
265 | ␉}␊ |
266 | ␊ |
267 | ␉window.onload = function() {␊ |
268 | ␉␉document.getElementById('pqp-console').onmousewheel = function(e){␊ |
269 | ␉␉ document.getElementById('pqp-console').scrollTop -= e.wheelDeltaY;␊ |
270 | ␉␉ preventDefault(e);␊ |
271 | ␉␉}␊ |
272 | ␉␉document.getElementById('pqp-speed').onmousewheel = function(e){␊ |
273 | ␉␉ document.getElementById('pqp-speed').scrollTop -= e.wheelDeltaY;␊ |
274 | ␉␉ preventDefault(e);␊ |
275 | ␉␉}␊ |
276 | ␉␉document.getElementById('pqp-queries').onmousewheel = function(e){␊ |
277 | ␉␉ document.getElementById('pqp-queries').scrollTop -= e.wheelDeltaY;␊ |
278 | ␉␉ preventDefault(e);␊ |
279 | ␉␉}␊ |
280 | ␉␉document.getElementById('pqp-memory').onmousewheel = function(e){␊ |
281 | ␉␉ document.getElementById('pqp-memory').scrollTop -= e.wheelDeltaY;␊ |
282 | ␉␉ preventDefault(e);␊ |
283 | ␉␉}␊ |
284 | ␉␉document.getElementById('pqp-files').onmousewheel = function(e){␊ |
285 | ␉␉ document.getElementById('pqp-files').scrollTop -= e.wheelDeltaY;␊ |
286 | ␉␉ preventDefault(e);␊ |
287 | ␉␉}␊ |
288 | ␉␉document.getElementById('pqp-config').onmousewheel = function(e){␊ |
289 | ␉␉ document.getElementById('pqp-config').scrollTop -= e.wheelDeltaY;␊ |
290 | ␉␉ preventDefault(e);␊ |
291 | ␉␉}␊ |
292 | ␉␉document.getElementById('pqp-session').onmousewheel = function(e){␊ |
293 | ␉␉ document.getElementById('pqp-session').scrollTop -= e.wheelDeltaY;␊ |
294 | ␉␉ preventDefault(e);␊ |
295 | ␉␉}␊ |
296 | ␉␉document.getElementById('pqp-get').onmousewheel = function(e){␊ |
297 | ␉␉ document.getElementById('pqp-get').scrollTop -= e.wheelDeltaY;␊ |
298 | ␉␉ preventDefault(e);␊ |
299 | ␉␉}␊ |
300 | ␉␉document.getElementById('pqp-post').onmousewheel = function(e){␊ |
301 | ␉␉ document.getElementById('pqp-post').scrollTop -= e.wheelDeltaY;␊ |
302 | ␉␉ preventDefault(e);␊ |
303 | ␉␉}␊ |
304 | ␉␉if (PQP_BOTTOM)␊ |
305 | ␉␉{␊ |
306 | ␉␉␉toggleBottom();␊ |
307 | ␉␉}␊ |
308 | ␉␉if (PQP_SHOWONLOAD == 'open')␊ |
309 | ␉␉{␊ |
310 | ␉␉␉setTimeout(function() {␊ |
311 | ␉␉␉␉openProfiler();␊ |
312 | ␉␉␉␉if (PQP_HEIGHT == 'short')␊ |
313 | ␉␉␉␉{␊ |
314 | ␉␉␉␉␉PQP_HEIGHT = 'tall';␊ |
315 | ␉␉␉␉␉toggleHeight();␊ |
316 | ␉␉␉␉}␊ |
317 | ␉␉␉␉if (PQP_DETAILS == false)␊ |
318 | ␉␉␉␉{␊ |
319 | ␉␉␉␉␉PQP_DETAILS = true;␊ |
320 | ␉␉␉␉␉toggleDetails();␊ |
321 | ␉␉␉␉}␊ |
322 | ␉␉␉});␊ |
323 | ␉␉}␊ |
324 | ␉}␊ |
325 | </script>␊ |
326 | JAVASCRIPT;␊ |
327 | ␊ |
328 | $return_output .='<div style="clear:both;"></div><div id="pqp-container" class="pQp pqp-tallDetails" style="display:none;position:inherit;">';␊ |
329 | ␊ |
330 | $logCount = count($output['logs']['console']);␊ |
331 | $fileCount = count($output['files']);␊ |
332 | $memoryUsed = $output['memoryTotals']['used'];␊ |
333 | $queryCount = $output['queryTotals']['count'];␊ |
334 | $speedTotal = $output['speedTotals']['total'];␊ |
335 | ␊ |
336 | $printarray = function($items, $depth, &$class, &$count) use(&$printarray)␊ |
337 | {␊ |
338 | ␉$output = '';␊ |
339 | ␉foreach($items as $item => $value) {␊ |
340 | ␉␉$count++;␊ |
341 | ␉␉$output .='<tr><td class="'.$class.'">';␊ |
342 | ␉␉if (is_bool($value))␊ |
343 | ␉␉{␊ |
344 | ␉␉␉$output .= '<b>'.($value?'true':'false').'</b>';␊ |
345 | ␉␉}␊ |
346 | ␉␉elseif (is_null($value))␊ |
347 | ␉␉{␊ |
348 | ␉␉␉$output .= '<b>null</b>';␊ |
349 | ␉␉}␊ |
350 | ␉␉elseif( ! is_array($value) AND ! is_object($value))␊ |
351 | ␉␉{␊ |
352 | ␉␉␉$output .= '<b>'.\Security::htmlentities($value).'</b>';␊ |
353 | ␉␉}␊ |
354 | ␉␉$output .= str_repeat('› ', $depth).\Security::htmlentities($item).'</td></tr>';␊ |
355 | ␉␉if($class == '') $class = 'pqp-alt'; else $class = '';␊ |
356 | ␉␉is_array($value) and $output .= $printarray($value, $depth + 1, $class, $count);␊ |
357 | ␉␉is_object($value) and $output .= $printarray($value, $depth + 1, $class, $count);␊ |
358 | ␉}␊ |
359 | ␉return $output;␊ |
360 | };␊ |
361 | ␊ |
362 | $class = '';␊ |
363 | $configCount = 0;␊ |
364 | $output['configItems'] = $printarray(\Config::$items, 0, $class, $configCount);␊ |
365 | ␊ |
366 | $class = '';␊ |
367 | $sessionCount = 0;␊ |
368 | $output['sessionItems'] = $printarray(\Session::get(null), 0, $class, $sessionCount);␊ |
369 | ␊ |
370 | $class = '';␊ |
371 | $getCount = 0;␊ |
372 | $output['getItems'] = $printarray(\Input::get(), 0, $class, $getCount);␊ |
373 | ␊ |
374 | $class = '';␊ |
375 | $postCount = 0;␊ |
376 | $output['postItems'] = $printarray(\Input::post(), 0, $class, $postCount);␊ |
377 | ␊ |
378 | ␉$return_output .=<<<PQPTABS␊ |
379 | <div id="pQp" class="pqp-console">␊ |
380 | <table id="pqp-metrics" cellspacing="0">␊ |
381 | <tr>␊ |
382 | ␉<td class="pqp-green" onclick="changeTab('pqp-console');">␊ |
383 | ␉␉<var>$logCount</var>␊ |
384 | ␉␉<h4>Console</h4>␊ |
385 | ␉</td>␊ |
386 | ␉<td class="pqp-blue" onclick="changeTab('pqp-speed');">␊ |
387 | ␉␉<var>$speedTotal</var>␊ |
388 | ␉␉<h4>Load Time</h4>␊ |
389 | ␉</td>␊ |
390 | ␉<td class="pqp-purple" onclick="changeTab('pqp-queries');">␊ |
391 | ␉␉<var>$queryCount Queries</var>␊ |
392 | ␉␉<h4>Database</h4>␊ |
393 | ␉</td>␊ |
394 | ␉<td class="pqp-orange" onclick="changeTab('pqp-memory');">␊ |
395 | ␉␉<var>$memoryUsed</var>␊ |
396 | ␉␉<h4>Memory Used</h4>␊ |
397 | ␉</td>␊ |
398 | ␉<td class="pqp-red" onclick="changeTab('pqp-files');">␊ |
399 | ␉␉<var>{$fileCount} Files</var>␊ |
400 | ␉␉<h4>Included</h4>␊ |
401 | ␉</td>␊ |
402 | ␉<td class="pqp-yellow" onclick="changeTab('pqp-config');">␊ |
403 | ␉␉<var>{$configCount} Config</var>␊ |
404 | ␉␉<h4>items loaded</h4>␊ |
405 | ␉</td>␊ |
406 | ␉<td class="pqp-cyan" onclick="changeTab('pqp-session');">␊ |
407 | ␉␉<var>{$sessionCount} Session</var>␊ |
408 | ␉␉<h4>vars loaded</h4>␊ |
409 | ␉</td>␊ |
410 | ␉<td class="pqp-pink" onclick="changeTab('pqp-get');">␊ |
411 | ␉␉<var>{$getCount} GET</var>␊ |
412 | ␉␉<h4>vars loaded</h4>␊ |
413 | ␉</td>␊ |
414 | ␉<td class="pqp-flesh" onclick="changeTab('pqp-post');">␊ |
415 | ␉␉<var>{$postCount} POST</var>␊ |
416 | ␉␉<h4>vars loaded</h4>␊ |
417 | ␉</td>␊ |
418 | </tr>␊ |
419 | </table>␊ |
420 | PQPTABS;␊ |
421 | ␊ |
422 | ␉$return_output .='<div id="pqp-console" class="pqp-box">';␊ |
423 | ␊ |
424 | if($logCount == 0) {␊ |
425 | ␉$return_output .='<h3>This panel has no log items.</h3>';␊ |
426 | }␊ |
427 | else {␊ |
428 | ␉$return_output .='<table class="pqp-side" cellspacing="0">␊ |
429 | ␉␉<tr>␊ |
430 | ␉␉␉<td class="pqp-alt1"><var>'.$output['logs']['logCount'].'</var><h4>Logs</h4></td>␊ |
431 | ␉␉␉<td class="pqp-alt2"><var>'.$output['logs']['errorCount'].'</var> <h4>Errors</h4></td>␊ |
432 | ␉␉</tr>␊ |
433 | ␉␉<tr>␊ |
434 | ␉␉␉<td class="pqp-alt3"><var>'.$output['logs']['memoryCount'].'</var> <h4>Memory</h4></td>␊ |
435 | ␉␉␉<td class="pqp-alt4"><var>'.$output['logs']['speedCount'].'</var> <h4>Speed</h4></td>␊ |
436 | ␉␉</tr>␊ |
437 | ␉␉</table>␊ |
438 | ␉␉<div class="pqp-main"><table cellspacing="0">';␊ |
439 | ␊ |
440 | ␉␉$class = '';␊ |
441 | ␉␉foreach($output['logs']['console'] as $log) {␊ |
442 | ␉␉␉$log['data'] = \Security::htmlentities($log['data']);␊ |
443 | ␉␉␉$return_output .='<tr class="pqp-log-'.$log['type'].'">␊ |
444 | ␉␉␉␉<td class="pqp-type">'.$log['type'].'</td>␊ |
445 | ␉␉␉␉<td class="'.$class.'">';␊ |
446 | ␉␉␉if($log['type'] == 'log') {␊ |
447 | ␉␉␉␉$return_output .='<div><pre></pre><em>'.$log['data'].'</em></div>';␊ |
448 | ␉␉␉}␊ |
449 | ␉␉␉elseif($log['type'] == 'memory') {␊ |
450 | ␉␉␉␉$return_output .='<div><pre>'.$log['data'].'</pre> <em>'.$log['dataType'].'</em>: '.$log['name'].' </div>';␊ |
451 | ␉␉␉}␊ |
452 | ␉␉␉elseif($log['type'] == 'speed') {␊ |
453 | ␉␉␉␉$return_output .='<div><pre>'.$log['data'].'</pre> <em>'.$log['name'].'</em></div>';␊ |
454 | ␉␉␉}␊ |
455 | ␉␉␉elseif($log['type'] == 'error') {␊ |
456 | ␉␉␉␉$return_output .='<div><em>Line '.$log['line'].'</em> : '.$log['data'].' <pre>'.$log['file'].'</pre></div>';␊ |
457 | ␉␉␉}␊ |
458 | ␊ |
459 | ␉␉␉$return_output .='</td></tr>';␊ |
460 | ␉␉␉if($class == '') $class = 'pqp-alt';␊ |
461 | ␉␉␉else $class = '';␊ |
462 | ␉␉}␊ |
463 | ␊ |
464 | ␉␉$return_output .='</table></div>';␊ |
465 | }␊ |
466 | ␊ |
467 | $return_output .='</div>';␊ |
468 | ␊ |
469 | $return_output .='<div id="pqp-speed" class="pqp-box">';␊ |
470 | ␊ |
471 | if($output['logs']['speedCount'] == 0) {␊ |
472 | ␉$return_output .='<h3>This panel has no log items.</h3>';␊ |
473 | }␊ |
474 | else {␊ |
475 | ␉$return_output .='<table class="pqp-side" cellspacing="0">␊ |
476 | ␉␉ <tr><td><var>'.$output['speedTotals']['total'].'</var><h4>Load Time</h4></td></tr>␊ |
477 | ␉␉ <tr><td class="pqp-alt"><var>'.$output['speedTotals']['allowed'].' s</var> <h4>Max Execution Time</h4></td></tr>␊ |
478 | ␉␉ </table>␊ |
479 | ␉␉<div class="pqp-main"><table cellspacing="0">';␊ |
480 | ␊ |
481 | ␉␉$class = '';␊ |
482 | ␉␉foreach($output['logs']['console'] as $log) {␊ |
483 | ␉␉␉if($log['type'] == 'speed') {␊ |
484 | ␉␉␉␉$return_output .='<tr class="pqp-log-'.$log['type'].'">␊ |
485 | ␉␉␉␉<td class="'.$class.'">';␊ |
486 | ␉␉␉␉$return_output .='<div><pre>'.$log['data'].'</pre> <em>'.$log['name'].'</em></div>';␊ |
487 | ␉␉␉␉$return_output .='</td></tr>';␊ |
488 | ␉␉␉␉if($class == '') $class = 'pqp-alt';␊ |
489 | ␉␉␉␉else $class = '';␊ |
490 | ␉␉␉}␊ |
491 | ␉␉}␊ |
492 | ␊ |
493 | ␉␉$return_output .='</table></div>';␊ |
494 | }␊ |
495 | ␊ |
496 | $return_output .='</div>';␊ |
497 | ␊ |
498 | $return_output .='<div id="pqp-queries" class="pqp-box">';␊ |
499 | ␊ |
500 | if($output['queryTotals']['count'] == 0) {␊ |
501 | ␉$return_output .='<h3>This panel has no log items.</h3>';␊ |
502 | }␊ |
503 | else {␊ |
504 | ␉$return_output .='<table class="pqp-side" cellspacing="0">␊ |
505 | ␉␉ <tr><td><var>'.$output['queryTotals']['count'].'</var><h4>Total Queries</h4></td></tr>␊ |
506 | ␉␉ <tr><td><var>'.$output['queryTotals']['time'].'</var> <h4>Total Time</h4></td></tr>␊ |
507 | ␉␉ <tr><td class="pqp-alt"><var>'.$output['queryTotals']['duplicates'].'</var> <h4>Duplicates</h4></td></tr>␊ |
508 | ␉␉ </table>␊ |
509 | ␉␉<div class="pqp-main"><table cellspacing="0">';␊ |
510 | ␊ |
511 | ␉␉$class = '';␊ |
512 | ␉␉foreach($output['queries'] as $query) {␊ |
513 | ␉␉␉$return_output .='<tr>␊ |
514 | ␉␉␉␉<td class="'.$class.'">'.$query['sql'];␊ |
515 | ␉␉␉$return_output .='<em>';␊ |
516 | ␉␉␉$return_output .='Connection name: <b>'.$query['dbname'].'</b><br />Speed: <b>'.$query['time'].'</b>';␊ |
517 | ␉␉␉$query['duplicate'] and $return_output .=' · <b>DUPLICATE</b>';␊ |
518 | ␉␉␉if(isset($query['explain'])) {␊ |
519 | ␉␉␉␉$return_output .= '<br />Query analysis:';␊ |
520 | ␉␉␉␉foreach($query['explain'] as $qe)␊ |
521 | ␉␉␉␉{␊ |
522 | ␉␉␉␉␉isset($qe['select_type']) and $return_output .='<br /> · Query: <b>'.$qe['select_type'].'</b>';␊ |
523 | ␉␉␉␉␉empty($qe['table']) or $return_output .=' on <b>'.htmlentities($qe['table']).'</b>';␊ |
524 | ␉␉␉␉␉isset($qe['possible_keys']) and $return_output .=' · Possible keys: <b>'.$qe['possible_keys'].'</b>';␊ |
525 | ␉␉␉␉␉isset($qe['key']) and $return_output .=' · Key Used: <b>'.$qe['key'].'</b>';␊ |
526 | ␉␉␉␉␉isset($qe['type']) and $return_output .=' · Type: <b>'.$qe['type'].'</b>';␊ |
527 | ␉␉␉␉␉isset($qe['rows']) and $return_output .=' · Rows: <b>'.$qe['rows'].'</b>';␊ |
528 | ␉␉␉␉␉empty($qe['Extra']) or $return_output .=' ('.$qe['Extra'].')';␊ |
529 | //␉␉␉␉␉$return_output .='<br />';␊ |
530 | ␉␉␉␉}␊ |
531 | ␉␉␉}␊ |
532 | ␉␉␉if ( ! empty($query['stacktrace']))␊ |
533 | ␉␉␉{␊ |
534 | ␉␉␉␉$return_output .='<br />Call trace for this query:</em>';␊ |
535 | ␉␉␉␉foreach ($query['stacktrace'] as $st)␊ |
536 | ␉␉␉␉{␊ |
537 | ␉␉␉␉␉$return_output .='<em>File: <b>'.$st['file'].'</b>, line <b>'.$st['line'].'</b></em>';␊ |
538 | ␉␉␉␉}␊ |
539 | ␉␉␉}␊ |
540 | ␉␉␉else␊ |
541 | ␉␉␉{␊ |
542 | ␉␉␉␉$return_output .='</em>';␊ |
543 | ␉␉␉}␊ |
544 | ␉␉␉$return_output .='</td></tr>';␊ |
545 | ␉␉␉if($class == '') $class = 'pqp-alt';␊ |
546 | ␉␉␉else $class = '';␊ |
547 | ␉␉}␊ |
548 | ␊ |
549 | ␉␉$return_output .='</table></div>';␊ |
550 | }␊ |
551 | ␊ |
552 | $return_output .='</div>';␊ |
553 | ␊ |
554 | $return_output .='<div id="pqp-memory" class="pqp-box">';␊ |
555 | ␊ |
556 | if($output['logs']['memoryCount'] == 0) {␊ |
557 | ␉$return_output .='<h3>This panel has no log items.</h3>';␊ |
558 | }␊ |
559 | else {␊ |
560 | ␉$return_output .='<table class="pqp-side" cellspacing="0">␊ |
561 | ␉␉ <tr><td><var>'.$output['memoryTotals']['used'].'</var><h4>Used Memory</h4></td></tr>␊ |
562 | ␉␉ <tr><td class="pqp-alt"><var>'.$output['memoryTotals']['total'].'</var> <h4>Total Available</h4></td></tr>␊ |
563 | ␉␉ </table>␊ |
564 | ␉␉<div class="pqp-main"><table cellspacing="0">';␊ |
565 | ␊ |
566 | ␉␉$class = '';␊ |
567 | ␉␉foreach($output['logs']['console'] as $log) {␊ |
568 | ␉␉␉if($log['type'] == 'memory') {␊ |
569 | ␉␉␉␉$return_output .='<tr class="pqp-log-'.$log['type'].'">';␊ |
570 | ␉␉␉␉$return_output .='<td class="'.$class.'"><b>'.$log['data'].'</b> <em>'.$log['dataType'].'</em>: '.$log['name'].'</td>';␊ |
571 | ␉␉␉␉$return_output .='</tr>';␊ |
572 | ␉␉␉␉if($class == '') $class = 'pqp-alt';␊ |
573 | ␉␉␉␉else $class = '';␊ |
574 | ␉␉␉}␊ |
575 | ␉␉}␊ |
576 | ␊ |
577 | ␉␉$return_output .='</table></div>';␊ |
578 | }␊ |
579 | ␊ |
580 | $return_output .='</div>';␊ |
581 | ␊ |
582 | $return_output .='<div id="pqp-files" class="pqp-box">';␊ |
583 | ␊ |
584 | if($output['fileTotals']['count'] + $output['pathTotals']['count'] == 0) {␊ |
585 | ␉$return_output .='<h3>This panel has no log items.</h3>';␊ |
586 | }␊ |
587 | else {␊ |
588 | ␉$return_output .='<table class="pqp-side" cellspacing="0">␊ |
589 | ␉␉ ␉<tr><td><var>'.count($output['paths']).'</var><h4>Finder Paths</h4></td></tr>␊ |
590 | ␉␉ ␉<tr><td><var>'.$output['fileTotals']['count'].'</var><h4>Total Files</h4></td></tr>␊ |
591 | ␉␉␉<tr><td><var>'.$output['fileTotals']['size'].'</var> <h4>Total Size</h4></td></tr>␊ |
592 | ␉␉␉<tr><td class="pqp-alt"><var>'.$output['fileTotals']['largest'].'</var> <h4>Largest</h4></td></tr>␊ |
593 | ␉␉ </table>␊ |
594 | ␉␉<div class="pqp-main"><table cellspacing="0">';␊ |
595 | ␊ |
596 | ␉␉$class ='';␊ |
597 | ␉␉$return_output .='<tr><td><strong style="font-size:120%;">Finder paths:</strong></td></tr>';␊ |
598 | ␉␉foreach($output['paths'] as $path) {␊ |
599 | ␉␉␉$return_output .='<tr><td class="'.$class.'">'.$path.'</td></tr>';␊ |
600 | ␉␉␉if($class == '') $class = 'pqp-alt';␊ |
601 | ␉␉␉else $class = '';␊ |
602 | ␉␉}␊ |
603 | ␉␉$return_output .='<tr><td><strong style="font-size:120%;">Loaded files:</strong></td></tr>';␊ |
604 | ␉␉foreach($output['files'] as $file) {␊ |
605 | ␉␉␉$return_output .='<tr><td class="'.$class.'"><b>'.$file['size'].'</b> '.$file['name'].'</td></tr>';␊ |
606 | ␉␉␉if($class == '') $class = 'pqp-alt';␊ |
607 | ␉␉␉else $class = '';␊ |
608 | ␉␉}␊ |
609 | ␊ |
610 | ␉␉$return_output .='</table></div>';␊ |
611 | }␊ |
612 | ␊ |
613 | $return_output .='</div>';␊ |
614 | ␊ |
615 | $return_output .='<div id="pqp-config" class="pqp-box">';␊ |
616 | ␊ |
617 | if($configCount == 0) {␊ |
618 | ␉$return_output .='<h3>This panel has no config items.</h3>';␊ |
619 | }␊ |
620 | else {␊ |
621 | ␉$return_output .='<table class="pqp-side" cellspacing="0">␊ |
622 | ␉␉␉<tr><td class="pqp-alt"><var>'.$configCount.'</var> <h4>Configuration items</h4></td></tr>␊ |
623 | ␉␉ </table>␊ |
624 | ␉␉<div class="pqp-main"><table cellspacing="0">';␊ |
625 | ␊ |
626 | ␉␉$return_output .= $output['configItems'];␊ |
627 | ␊ |
628 | ␉␉$return_output .='</table></div>';␊ |
629 | }␊ |
630 | ␊ |
631 | $return_output .='</div>';␊ |
632 | ␊ |
633 | $return_output .='<div id="pqp-session" class="pqp-box">';␊ |
634 | ␊ |
635 | if($sessionCount == 0) {␊ |
636 | ␉$return_output .='<h3>This panel has no session variables.</h3>';␊ |
637 | }␊ |
638 | else {␊ |
639 | ␉$return_output .='<table class="pqp-side" cellspacing="0">␊ |
640 | ␉␉␉<tr><td class="pqp-alt"><var>'.$sessionCount.'</var> <h4>Session variables</h4></td></tr>␊ |
641 | ␉␉ </table>␊ |
642 | ␉␉<div class="pqp-main"><table cellspacing="0">';␊ |
643 | ␊ |
644 | ␉␉$return_output .= $output['sessionItems'];␊ |
645 | ␊ |
646 | ␉␉$return_output .='</table></div>';␊ |
647 | }␊ |
648 | ␊ |
649 | $return_output .='</div>';␊ |
650 | ␊ |
651 | $return_output .='<div id="pqp-get" class="pqp-box">';␊ |
652 | ␊ |
653 | if($getCount == 0) {␊ |
654 | ␉$return_output .='<h3>This panel has no GET variables.</h3>';␊ |
655 | }␊ |
656 | else {␊ |
657 | ␉$return_output .='<table class="pqp-side" cellspacing="0">␊ |
658 | ␉␉␉<tr><td class="pqp-alt"><var>'.$getCount.'</var> <h4>GET variables</h4></td></tr>␊ |
659 | ␉␉ </table>␊ |
660 | ␉␉<div class="pqp-main"><table cellspacing="0">';␊ |
661 | ␊ |
662 | ␉␉$return_output .= $output['getItems'];␊ |
663 | ␊ |
664 | ␉␉$return_output .='</table></div>';␊ |
665 | }␊ |
666 | ␊ |
667 | $return_output .='</div>';␊ |
668 | ␊ |
669 | $return_output .='<div id="pqp-post" class="pqp-box">';␊ |
670 | ␊ |
671 | if($postCount == 0) {␊ |
672 | ␉$return_output .='<h3>This panel has no POST variables.</h3>';␊ |
673 | }␊ |
674 | else {␊ |
675 | ␉$return_output .='<table class="pqp-side" cellspacing="0">␊ |
676 | ␉␉␉<tr><td class="pqp-alt"><var>'.$postCount.'</var> <h4>POST variables</h4></td></tr>␊ |
677 | ␉␉ </table>␊ |
678 | ␉␉<div class="pqp-main"><table cellspacing="0">';␊ |
679 | ␊ |
680 | ␉␉$return_output .= $output['postItems'];␊ |
681 | ␊ |
682 | ␉␉$return_output .='</table></div>';␊ |
683 | }␊ |
684 | ␊ |
685 | $return_output .='</div>';␊ |
686 | ␊ |
687 | $return_output .=<<<FOOTER␊ |
688 | ␉<table id="pqp-footer" cellspacing="0">␊ |
689 | ␉␉<tr>␊ |
690 | ␉␉␉<td class="pqp-credit">␊ |
691 | ␉␉␉␉<a href="https://github.com/particletree" target="_blank">␊ |
692 | ␉␉␉␉Based on␊ |
693 | ␉␉␉␉<strong>PHP</strong>␊ |
694 | ␉␉␉␉<b class="pqp-green">Q</b><b class="pqp-blue">u</b><b class="pqp-purple">i</b><b class="pqp-orange">c</b><b class="pqp-red">k</b>␊ |
695 | ␉␉␉␉Profiler</a></td>␊ |
696 | ␉␉␉<td class="pqp-actions">␊ |
697 | ␉␉␉␉<a class="pqp-closeProfiler" href="#" onclick="closeProfiler();return false" title="Close Code Profiler">Close</a>␊ |
698 | ␉␉␉␉<a class="pqp-heightToggle" href="#" onclick="toggleHeight();return false" title="Toggle Height">Height</a>␊ |
699 | ␉␉␉␉<a class="pqp-bottomToggle" href="#" onclick="toggleBottom();return false" title="Toggle Bottom">Bottom</a>␊ |
700 | ␉␉␉</td>␊ |
701 | ␉␉</tr>␊ |
702 | ␉</table>␊ |
703 | FOOTER;␊ |
704 | ␊ |
705 | ␉$return_output .='</div></div><div id="openProfiler"><a href="#" onclick="openProfiler();return false" title="Open Code Profiler">Code Profiler</a></div>';␊ |
706 | ␊ |
707 | ␉return $return_output;␊ |
708 | }␊ |