├── .gitignore ├── LICENSE ├── README.md ├── assets ├── debugbar.css ├── debugbar.js ├── index.css ├── openhandler.css ├── openhandler.js ├── vendor │ ├── font-awesome │ │ ├── css │ │ │ └── font-awesome.min.css │ │ └── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ ├── highlightjs │ │ ├── highlight.pack.js │ │ └── styles │ │ │ └── github.css │ └── jquery │ │ └── dist │ │ └── jquery.min.js ├── widgets.css ├── widgets.js └── widgets │ ├── mails │ ├── widget.css │ └── widget.js │ ├── sqlqueries │ ├── widget.css │ └── widget.js │ └── templates │ ├── widget.css │ └── widget.js ├── composer.json ├── composer.lock ├── index.php ├── snippets └── debugbar.php └── src ├── DataCollector ├── EventCollector.php ├── FileCollector.php └── VariableCollector.php ├── Debugbar.php ├── Logger.php └── LoggerInterface.php /.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | node_modules/ 3 | !assets/vendor/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Vincent Laurent Riva 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PHP Debug Bar for KirbyCMS 2 | 3 | ![Demonstration](https://user-images.githubusercontent.com/3629578/235644730-5c40eed9-048f-4bbb-b72a-5d5441e50549.gif) 4 | 5 | ## ✨ Features 6 | 7 | - Integration of [PHP Debug Bar](https://github.com/maximebf/php-debugbar) 8 | - Easy log messages 9 | - Preview configuration, hooks called, files, page variables, requests & exceptions 10 | - More soon 👀 ... 11 | 12 | ## 🔌 Installation 13 | 14 | ⚠️ This plugin uses the Symfony VarDumper package, which conflicts with the KirbyCMS dump function. To use this plugin, you must imperatively change the `index.php` file at the root by this content: 15 | 16 | ```php 17 | render(); 24 | ``` 25 | 26 | ### Composer (highly recommended) 27 | 28 | composer require treast/kirby-debugbar 29 | 30 | ### Git submodule 31 | 32 | git submodule add https://github.com/Treast/kirby-debugbar.git site/plugins/debugbar 33 | 34 | ### Manual 35 | 36 | Download this [zip](https://github.com/Treast/kirby-debugbar/archive/refs/heads/main.zip) and unzip it in `site/plugins/debugbar`. 37 | 38 | ## 💻 Usage 39 | 40 | Add this snippet at the bottom of your footer & enjoy ! 41 | 42 | 43 | 44 | ### How to log ? 45 | 46 | ```php 47 | $site->logger()->debug('This is a debug'); 48 | $site->logger()->emergency('This is an emergency'); 49 | $site->logger()->error('This is an error'); 50 | $site->logger()->critical('This is a critical'); 51 | $site->logger()->info('This is an info'); 52 | $site->logger()->warning('This is a warning'); 53 | $site->logger()->alert('This is an alert'); 54 | $site->logger()->notice('This is a notice'); 55 | $site->logger()->log('debug', 'This is also a debug'); 56 | // Or you can chain with the ->log() function 57 | $site->log()->title()->log(); 58 | $page->children()->log()->first()->log(); 59 | ``` 60 | 61 | ### Options 62 | 63 | #### Explanations 64 | 65 | | Option name | Default | Type | Description | 66 | | -------------------------------- | ------- | --------- | ------------------------------------------------------------------ | 67 | | `treast.debugbar.force` | `false` | `boolean` | If enabled, will display the debug bar even with `debug === false` | 68 | | `treast.debugbar.tabs.logs` | `true` | `boolean` | Show logs tab | 69 | | `treast.debugbar.tabs.config` | `true` | `boolean` | Show config tab | 70 | | `treast.debugbar.tabs.events` | `true` | `boolean` | Show events tab | 71 | | `treast.debugbar.tabs.files` | `true` | `boolean` | Show files tab | 72 | | `treast.debugbar.tabs.variables` | `true` | `boolean` | Show variables tab | 73 | | `treast.debugbar.tabs.request` | `true` | `boolean` | Show request tab | 74 | | `treast.debugbar.tabs.exception` | `true` | `boolean` | Show exceptions tab | 75 | 76 | #### config.php 77 | 78 | ```php 79 | [ 83 | 'force' => false, 84 | 'tabs' => [ 85 | 'logs' => true, 86 | 'config' => true, 87 | 'events' => true, 88 | 'files' => true, 89 | 'variables' => true, 90 | 'request' => true, 91 | 'exceptions' => true 92 | ] 93 | ] 94 | ]; 95 | ``` 96 | 97 | ## To Do 98 | 99 | - ~~Only activate plugin when `debug === true`~~ 100 | - Refactoring 😮‍💨 101 | 102 | ## 💡 I would like XXX but it's not yet available? 103 | 104 | [Go to the issues](https://github.com/Treast/kirby-debugbar/issues) and submit your idea. If it's relevant, I might add it 🫶. 105 | 106 | ## ❤️Special Thanks 107 | 108 | - To [@maximebf](https://www.github.com/maximebf) for the base package [php-debugbar](https://github.com/maximebf/php-debugbar). 109 | - To [@barryvdh](https://www.github.com/barryvdh) for his [implementation on Laravel](https://github.com/barryvdh/laravel-debugbar). 110 | - To [@genxbe](https://www.github.com/genxbe) for his chaining methods [on his plugin](https://github.com/genxbe/kirby3-ray). 111 | 112 | ## ⚠️Warning 113 | 114 | Please note that this plugin is provided as is, without any express or implied warranty of operation. By using this plugin, you agree to do so at your own risk. I am not responsible for any direct or indirect damage resulting from the use of this plugin, including loss of data, operating errors, service interruptions, or any other consequence related to the use of this plugin. 115 | -------------------------------------------------------------------------------- /assets/debugbar.css: -------------------------------------------------------------------------------- 1 | /* Hide debugbar when printing a page */ 2 | @media print { 3 | div.phpdebugbar { 4 | display: none; 5 | } 6 | } 7 | 8 | div.phpdebugbar { 9 | position: fixed; 10 | bottom: 0; 11 | left: 0; 12 | width: 100%; 13 | border-top: 0; 14 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, sans-serif; 15 | background: #fff; 16 | z-index: 10000; 17 | font-size: 14px; 18 | color: #000; 19 | text-align: left; 20 | line-height: 1; 21 | letter-spacing: normal; 22 | direction: ltr; 23 | } 24 | 25 | div.phpdebugbar a, 26 | div.phpdebugbar-openhandler { 27 | cursor: pointer; 28 | } 29 | 30 | div.phpdebugbar-drag-capture { 31 | position: fixed; 32 | top: 0; 33 | bottom: 0; 34 | left: 0; 35 | right: 0; 36 | z-index: 10001; 37 | background: none; 38 | display: none; 39 | cursor: ns-resize; 40 | } 41 | 42 | div.phpdebugbar-closed { 43 | width: auto; 44 | } 45 | 46 | div.phpdebugbar * { 47 | margin: 0; 48 | padding: 0; 49 | border: 0; 50 | font-weight: normal; 51 | text-decoration: none; 52 | clear: initial; 53 | width: auto; 54 | -moz-box-sizing: content-box; 55 | box-sizing: content-box; 56 | } 57 | 58 | div.phpdebugbar ol, div.phpdebugbar ul { 59 | list-style: none; 60 | } 61 | 62 | div.phpdebugbar table { 63 | border-collapse: collapse; 64 | border-spacing: 0; 65 | } 66 | 67 | div.phpdebugbar input[type='text'], div.phpdebugbar input[type='password'] { 68 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, sans-serif; 69 | background: #fff; 70 | font-size: 14px; 71 | color: #000; 72 | border: 0; 73 | padding: 0; 74 | margin: 0; 75 | } 76 | 77 | div.phpdebugbar code, div.phpdebugbar pre, div.phpdebugbar samp { 78 | background: none; 79 | font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; 80 | font-size: 1em; 81 | border: 0; 82 | padding: 0; 83 | margin: 0; 84 | } 85 | 86 | div.phpdebugbar code, div.phpdebugbar pre { 87 | color: #000; 88 | } 89 | 90 | div.phpdebugbar pre.sf-dump { 91 | color: #a0a000; 92 | outline: 0; 93 | } 94 | 95 | a.phpdebugbar-restore-btn { 96 | float: left; 97 | padding: 5px 8px; 98 | font-size: 14px; 99 | color: #555; 100 | text-decoration: none; 101 | border-right: 1px solid #ddd; 102 | } 103 | 104 | div.phpdebugbar-resize-handle { 105 | display: none; 106 | height: 4px; 107 | margin-top: -4px; 108 | width: 100%; 109 | background: none; 110 | border-bottom: 1px solid #ccc; 111 | cursor: ns-resize; 112 | } 113 | 114 | div.phpdebugbar-closed, div.phpdebugbar-minimized{ 115 | border-top: 1px solid #ccc; 116 | } 117 | /* -------------------------------------- */ 118 | 119 | a.phpdebugbar-restore-btn { 120 | background: #efefef url(data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20fill%3D%22%23000%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%229%22%2F%3E%3Cpath%20d%3D%22M6.039%208.342c.463%200%20.772.084.927.251.154.168.191.455.11.862-.084.424-.247.727-.487.908-.241.182-.608.272-1.1.272h-.743l.456-2.293h.837zm-2.975%204.615h1.22l.29-1.457H5.62c.461%200%20.84-.047%201.139-.142.298-.095.569-.254.812-.477.205-.184.37-.387.497-.608.127-.222.217-.466.27-.734.13-.65.032-1.155-.292-1.518-.324-.362-.84-.543-1.545-.543H4.153l-1.089%205.479zM9.235%206.02h1.21l-.289%201.458h1.079c.679%200%201.147.115%201.405.347.258.231.335.607.232%201.125l-.507%202.55h-1.23l.481-2.424c.055-.276.035-.464-.06-.565-.095-.1-.298-.15-.608-.15H9.98L9.356%2011.5h-1.21l1.089-5.48M15.566%208.342c.464%200%20.773.084.928.251.154.168.19.455.11.862-.084.424-.247.727-.488.908-.24.182-.607.272-1.1.272h-.742l.456-2.293h.836zm-2.974%204.615h1.22l.29-1.457h1.046c.461%200%20.84-.047%201.139-.142.298-.095.569-.254.812-.477.205-.184.37-.387.497-.608.127-.222.217-.466.27-.734.129-.65.032-1.155-.292-1.518-.324-.362-.84-.543-1.545-.543H13.68l-1.089%205.479z%22%20fill%3D%22%23FFF%22%2F%3E%3C%2Fsvg%3E) no-repeat 5px 4px / 20px 20px; 121 | } 122 | div.phpdebugbar-header { 123 | min-height: 26px; 124 | line-height: 16px; 125 | } 126 | div.phpdebugbar-header:before, div.phpdebugbar-header:after { 127 | display: table; 128 | line-height: 0; 129 | content: ""; 130 | } 131 | div.phpdebugbar-header:after { 132 | clear: both; 133 | } 134 | div.phpdebugbar-header-left { 135 | float: left; 136 | } 137 | div.phpdebugbar-header-right { 138 | float: right; 139 | } 140 | div.phpdebugbar-header > div > * { 141 | padding: 5px 5px; 142 | font-size: 14px; 143 | color: #555; 144 | text-decoration: none; 145 | } 146 | div.phpdebugbar-header-left > * { 147 | float: left; 148 | } 149 | div.phpdebugbar-header-right > * { 150 | float: right; 151 | } 152 | div.phpdebugbar-header-right > select { 153 | padding: 0; 154 | } 155 | 156 | /* -------------------------------------- */ 157 | 158 | span.phpdebugbar-indicator, 159 | a.phpdebugbar-indicator, 160 | a.phpdebugbar-close-btn { 161 | border-right: 1px solid #ddd; 162 | } 163 | 164 | a.phpdebugbar-tab.phpdebugbar-active { 165 | background: #ccc; 166 | color: #444; 167 | background-image: linear-gradient(bottom, rgb(173,173,173) 41%, rgb(209,209,209) 71%); 168 | background-image: -o-linear-gradient(bottom, rgb(173,173,173) 41%, rgb(209,209,209) 71%); 169 | background-image: -moz-linear-gradient(bottom, rgb(173,173,173) 41%, rgb(209,209,209) 71%); 170 | background-image: -webkit-linear-gradient(bottom, rgb(173,173,173) 41%, rgb(209,209,209) 71%); 171 | background-image: -ms-linear-gradient(bottom, rgb(173,173,173) 41%, rgb(209,209,209) 71%); 172 | background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.41, rgb(173,173,173)), color-stop(0.71, rgb(209,209,209))); 173 | } 174 | a.phpdebugbar-tab span.phpdebugbar-badge { 175 | display: none; 176 | margin-left: 5px; 177 | font-size: 11px; 178 | line-height: 14px; 179 | padding: 0 6px; 180 | background: #ccc; 181 | border-radius: 4px; 182 | color: #555; 183 | font-weight: normal; 184 | text-shadow: none; 185 | vertical-align: middle; 186 | } 187 | a.phpdebugbar-tab i { 188 | display: none; 189 | vertical-align: middle; 190 | } 191 | a.phpdebugbar-tab span.phpdebugbar-badge.phpdebugbar-visible { 192 | display: inline; 193 | } 194 | a.phpdebugbar-tab span.phpdebugbar-badge.phpdebugbar-important { 195 | background: #ed6868; 196 | color: white; 197 | } 198 | 199 | a.phpdebugbar-close-btn, a.phpdebugbar-open-btn, a.phpdebugbar-restore-btn, a.phpdebugbar-minimize-btn , a.phpdebugbar-maximize-btn { 200 | width: 16px; 201 | height: 16px; 202 | } 203 | 204 | a.phpdebugbar-minimize-btn , a.phpdebugbar-maximize-btn { 205 | padding-right: 0 !important; 206 | } 207 | 208 | a.phpdebugbar-maximize-btn { display: none} 209 | 210 | a.phpdebugbar-minimize-btn { display: block} 211 | 212 | div.phpdebugbar-minimized a.phpdebugbar-maximize-btn { display: block} 213 | 214 | div.phpdebugbar-minimized a.phpdebugbar-minimize-btn { display: none} 215 | 216 | a.phpdebugbar-minimize-btn { 217 | background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201792%201792%22%20id%3D%22chevron-down%22%3E%3Cpath%20d%3D%22M1683%20808l-742%20741q-19%2019-45%2019t-45-19l-742-741q-19-19-19-45.5t19-45.5l166-165q19-19%2045-19t45%2019l531%20531%20531-531q19-19%2045-19t45%2019l166%20165q19%2019%2019%2045.5t-19%2045.5z%22%2F%3E%3C%2Fsvg%3E) no-repeat 6px 6px / 14px 14px; 218 | } 219 | 220 | a.phpdebugbar-maximize-btn { 221 | background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201792%201792%22%20id%3D%22chevron-up%22%3E%3Cpath%20d%3D%22M1683%201331l-166%20165q-19%2019-45%2019t-45-19l-531-531-531%20531q-19%2019-45%2019t-45-19l-166-165q-19-19-19-45.5t19-45.5l742-741q19-19%2045-19t45%2019l742%20741q19%2019%2019%2045.5t-19%2045.5z%22%2F%3E%3C%2Fsvg%3E) no-repeat 6px 6px / 14px 14px; 222 | } 223 | 224 | a.phpdebugbar-close-btn { 225 | background: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201792%201792%22%20id%3D%22close%22%3E%3Cpath%20d%3D%22M1490%201322q0%2040-28%2068l-136%20136q-28%2028-68%2028t-68-28l-294-294-294%20294q-28%2028-68%2028t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28%2068-28t68%2028l294%20294%20294-294q28-28%2068-28t68%2028l136%20136q28%2028%2028%2068t-28%2068l-294%20294%20294%20294q28%2028%2028%2068z%22%2F%3E%3C%2Fsvg%3E) no-repeat 9px 6px / 14px 14px; 226 | } 227 | 228 | a.phpdebugbar-open-btn { 229 | background: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201792%201792%22%20id%3D%22folder-open%22%3E%3Cpath%20d%3D%22M1815%20952q0%2031-31%2066l-336%20396q-43%2051-120.5%2086.5t-143.5%2035.5h-1088q-34%200-60.5-13t-26.5-43q0-31%2031-66l336-396q43-51%20120.5-86.5t143.5-35.5h1088q34%200%2060.5%2013t26.5%2043zm-343-344v160h-832q-94%200-197%2047.5t-164%20119.5l-337%20396-5%206q0-4-.5-12.5t-.5-12.5v-960q0-92%2066-158t158-66h320q92%200%20158%2066t66%20158v32h544q92%200%20158%2066t66%20158z%22%2F%3E%3C%2Fsvg%3E) no-repeat 8px 6px / 14px 14px; 230 | } 231 | 232 | .phpdebugbar-indicator { 233 | position: relative; 234 | cursor: pointer; 235 | } 236 | .phpdebugbar-indicator span.phpdebugbar-text { 237 | margin-left: 5px; 238 | } 239 | .phpdebugbar-indicator span.phpdebugbar-tooltip { 240 | display: none; 241 | position: absolute; 242 | top: -30px; 243 | background: #efefef; 244 | opacity: .7; 245 | border: 1px solid #ccc; 246 | color: #555; 247 | font-size: 11px; 248 | padding: 2px 3px; 249 | z-index: 1000; 250 | text-align: center; 251 | width: 200%; 252 | right: 0; 253 | } 254 | .phpdebugbar-indicator:hover span.phpdebugbar-tooltip:not(.phpdebugbar-disabled) { 255 | display: block; 256 | } 257 | 258 | select.phpdebugbar-datasets-switcher { 259 | float: right; 260 | display: none; 261 | margin: 2px 0 0 7px; 262 | max-width: 200px; 263 | max-height: 23px; 264 | padding: 0; 265 | } 266 | 267 | /* -------------------------------------- */ 268 | 269 | div.phpdebugbar-body { 270 | border-top: 1px solid #ccc; 271 | display: none; 272 | position: relative; 273 | height: 300px; 274 | } 275 | 276 | /* -------------------------------------- */ 277 | 278 | div.phpdebugbar-panel { 279 | display: none; 280 | height: 100%; 281 | overflow: auto; 282 | width: 100%; 283 | } 284 | div.phpdebugbar-panel.phpdebugbar-active { 285 | display: block; 286 | } 287 | 288 | /* -------------------------------------- */ 289 | 290 | div.phpdebugbar-mini-design a.phpdebugbar-tab { 291 | position: relative; 292 | border-right: 1px solid #ddd; 293 | } 294 | div.phpdebugbar-mini-design a.phpdebugbar-tab span.phpdebugbar-text { 295 | display: none; 296 | } 297 | div.phpdebugbar-mini-design a.phpdebugbar-tab:hover span.phpdebugbar-text { 298 | display: block; 299 | position: absolute; 300 | top: -30px; 301 | background: #efefef; 302 | opacity: .7; 303 | border: 1px solid #ccc; 304 | color: #555; 305 | font-size: 11px; 306 | padding: 2px 3px; 307 | z-index: 1000; 308 | text-align: center; 309 | right: 0; 310 | } 311 | div.phpdebugbar-mini-design a.phpdebugbar-tab i { 312 | display:inline-block; 313 | } 314 | -------------------------------------------------------------------------------- /assets/debugbar.js: -------------------------------------------------------------------------------- 1 | if (typeof(PhpDebugBar) == 'undefined') { 2 | // namespace 3 | var PhpDebugBar = {}; 4 | PhpDebugBar.$ = jQuery; 5 | } 6 | 7 | (function($) { 8 | 9 | if (typeof(localStorage) == 'undefined') { 10 | // provide mock localStorage object for dumb browsers 11 | localStorage = { 12 | setItem: function(key, value) {}, 13 | getItem: function(key) { return null; } 14 | }; 15 | } 16 | 17 | if (typeof(PhpDebugBar.utils) == 'undefined') { 18 | PhpDebugBar.utils = {}; 19 | } 20 | 21 | /** 22 | * Returns the value from an object property. 23 | * Using dots in the key, it is possible to retrieve nested property values 24 | * 25 | * @param {Object} dict 26 | * @param {String} key 27 | * @param {Object} default_value 28 | * @return {Object} 29 | */ 30 | var getDictValue = PhpDebugBar.utils.getDictValue = function(dict, key, default_value) { 31 | var d = dict, parts = key.split('.'); 32 | for (var i = 0; i < parts.length; i++) { 33 | if (!d[parts[i]]) { 34 | return default_value; 35 | } 36 | d = d[parts[i]]; 37 | } 38 | return d; 39 | } 40 | 41 | /** 42 | * Counts the number of properties in an object 43 | * 44 | * @param {Object} obj 45 | * @return {Integer} 46 | */ 47 | var getObjectSize = PhpDebugBar.utils.getObjectSize = function(obj) { 48 | if (Object.keys) { 49 | return Object.keys(obj).length; 50 | } 51 | var count = 0; 52 | for (var k in obj) { 53 | if (obj.hasOwnProperty(k)) { 54 | count++; 55 | } 56 | } 57 | return count; 58 | } 59 | 60 | /** 61 | * Returns a prefixed css class name 62 | * 63 | * @param {String} cls 64 | * @return {String} 65 | */ 66 | PhpDebugBar.utils.csscls = function(cls, prefix) { 67 | if (cls.indexOf(' ') > -1) { 68 | var clss = cls.split(' '), out = []; 69 | for (var i = 0, c = clss.length; i < c; i++) { 70 | out.push(PhpDebugBar.utils.csscls(clss[i], prefix)); 71 | } 72 | return out.join(' '); 73 | } 74 | if (cls.indexOf('.') === 0) { 75 | return '.' + prefix + cls.substr(1); 76 | } 77 | return prefix + cls; 78 | }; 79 | 80 | /** 81 | * Creates a partial function of csscls where the second 82 | * argument is already defined 83 | * 84 | * @param {string} prefix 85 | * @return {Function} 86 | */ 87 | PhpDebugBar.utils.makecsscls = function(prefix) { 88 | var f = function(cls) { 89 | return PhpDebugBar.utils.csscls(cls, prefix); 90 | }; 91 | return f; 92 | } 93 | 94 | var csscls = PhpDebugBar.utils.makecsscls('phpdebugbar-'); 95 | 96 | 97 | // ------------------------------------------------------------------ 98 | 99 | /** 100 | * Base class for all elements with a visual component 101 | * 102 | * @param {Object} options 103 | * @constructor 104 | */ 105 | var Widget = PhpDebugBar.Widget = function(options) { 106 | this._attributes = $.extend({}, this.defaults); 107 | this._boundAttributes = {}; 108 | this.$el = $('<' + this.tagName + ' />'); 109 | if (this.className) { 110 | this.$el.addClass(this.className); 111 | } 112 | this.initialize.apply(this, [options || {}]); 113 | this.render.apply(this); 114 | }; 115 | 116 | $.extend(Widget.prototype, { 117 | 118 | tagName: 'div', 119 | 120 | className: null, 121 | 122 | defaults: {}, 123 | 124 | /** 125 | * Called after the constructor 126 | * 127 | * @param {Object} options 128 | */ 129 | initialize: function(options) { 130 | this.set(options); 131 | }, 132 | 133 | /** 134 | * Called after the constructor to render the element 135 | */ 136 | render: function() {}, 137 | 138 | /** 139 | * Sets the value of an attribute 140 | * 141 | * @param {String} attr Can also be an object to set multiple attributes at once 142 | * @param {Object} value 143 | */ 144 | set: function(attr, value) { 145 | if (typeof(attr) != 'string') { 146 | for (var k in attr) { 147 | this.set(k, attr[k]); 148 | } 149 | return; 150 | } 151 | 152 | this._attributes[attr] = value; 153 | if (typeof(this._boundAttributes[attr]) !== 'undefined') { 154 | for (var i = 0, c = this._boundAttributes[attr].length; i < c; i++) { 155 | this._boundAttributes[attr][i].apply(this, [value]); 156 | } 157 | } 158 | }, 159 | 160 | /** 161 | * Checks if an attribute exists and is not null 162 | * 163 | * @param {String} attr 164 | * @return {[type]} [description] 165 | */ 166 | has: function(attr) { 167 | return typeof(this._attributes[attr]) !== 'undefined' && this._attributes[attr] !== null; 168 | }, 169 | 170 | /** 171 | * Returns the value of an attribute 172 | * 173 | * @param {String} attr 174 | * @return {Object} 175 | */ 176 | get: function(attr) { 177 | return this._attributes[attr]; 178 | }, 179 | 180 | /** 181 | * Registers a callback function that will be called whenever the value of the attribute changes 182 | * 183 | * If cb is a jQuery element, text() will be used to fill the element 184 | * 185 | * @param {String} attr 186 | * @param {Function} cb 187 | */ 188 | bindAttr: function(attr, cb) { 189 | if ($.isArray(attr)) { 190 | for (var i = 0, c = attr.length; i < c; i++) { 191 | this.bindAttr(attr[i], cb); 192 | } 193 | return; 194 | } 195 | 196 | if (typeof(this._boundAttributes[attr]) == 'undefined') { 197 | this._boundAttributes[attr] = []; 198 | } 199 | if (typeof(cb) == 'object') { 200 | var el = cb; 201 | cb = function(value) { el.text(value || ''); }; 202 | } 203 | this._boundAttributes[attr].push(cb); 204 | if (this.has(attr)) { 205 | cb.apply(this, [this._attributes[attr]]); 206 | } 207 | } 208 | 209 | }); 210 | 211 | 212 | /** 213 | * Creates a subclass 214 | * 215 | * Code from Backbone.js 216 | * 217 | * @param {Array} props Prototype properties 218 | * @return {Function} 219 | */ 220 | Widget.extend = function(props) { 221 | var parent = this; 222 | 223 | var child = function() { return parent.apply(this, arguments); }; 224 | $.extend(child, parent); 225 | 226 | var Surrogate = function() { this.constructor = child; }; 227 | Surrogate.prototype = parent.prototype; 228 | child.prototype = new Surrogate; 229 | $.extend(child.prototype, props); 230 | 231 | child.__super__ = parent.prototype; 232 | 233 | return child; 234 | }; 235 | 236 | // ------------------------------------------------------------------ 237 | 238 | /** 239 | * Tab 240 | * 241 | * A tab is composed of a tab label which is always visible and 242 | * a tab panel which is visible only when the tab is active. 243 | * 244 | * The panel must contain a widget. A widget is an object which has 245 | * an element property containing something appendable to a jQuery object. 246 | * 247 | * Options: 248 | * - title 249 | * - badge 250 | * - widget 251 | * - data: forward data to widget data 252 | */ 253 | var Tab = Widget.extend({ 254 | 255 | className: csscls('panel'), 256 | 257 | render: function() { 258 | this.$tab = $('').addClass(csscls('tab')); 259 | 260 | this.$icon = $('').appendTo(this.$tab); 261 | this.bindAttr('icon', function(icon) { 262 | if (icon) { 263 | this.$icon.attr('class', 'phpdebugbar-fa phpdebugbar-fa-' + icon); 264 | } else { 265 | this.$icon.attr('class', ''); 266 | } 267 | }); 268 | 269 | this.bindAttr('title', $('').addClass(csscls('text')).appendTo(this.$tab)); 270 | 271 | this.$badge = $('').addClass(csscls('badge')).appendTo(this.$tab); 272 | this.bindAttr('badge', function(value) { 273 | if (value !== null) { 274 | this.$badge.text(value); 275 | this.$badge.addClass(csscls('visible')); 276 | } else { 277 | this.$badge.removeClass(csscls('visible')); 278 | } 279 | }); 280 | 281 | this.bindAttr('widget', function(widget) { 282 | this.$el.empty().append(widget.$el); 283 | }); 284 | 285 | this.bindAttr('data', function(data) { 286 | if (this.has('widget')) { 287 | this.get('widget').set('data', data); 288 | } 289 | }) 290 | } 291 | 292 | }); 293 | 294 | // ------------------------------------------------------------------ 295 | 296 | /** 297 | * Indicator 298 | * 299 | * An indicator is a text and an icon to display single value information 300 | * right inside the always visible part of the debug bar 301 | * 302 | * Options: 303 | * - icon 304 | * - title 305 | * - tooltip 306 | * - data: alias of title 307 | */ 308 | var Indicator = Widget.extend({ 309 | 310 | tagName: 'span', 311 | 312 | className: csscls('indicator'), 313 | 314 | render: function() { 315 | this.$icon = $('').appendTo(this.$el); 316 | this.bindAttr('icon', function(icon) { 317 | if (icon) { 318 | this.$icon.attr('class', 'phpdebugbar-fa phpdebugbar-fa-' + icon); 319 | } else { 320 | this.$icon.attr('class', ''); 321 | } 322 | }); 323 | 324 | this.bindAttr(['title', 'data'], $('').addClass(csscls('text')).appendTo(this.$el)); 325 | 326 | this.$tooltip = $('').addClass(csscls('tooltip disabled')).appendTo(this.$el); 327 | this.bindAttr('tooltip', function(tooltip) { 328 | if (tooltip) { 329 | this.$tooltip.text(tooltip).removeClass(csscls('disabled')); 330 | } else { 331 | this.$tooltip.addClass(csscls('disabled')); 332 | } 333 | }); 334 | } 335 | 336 | }); 337 | 338 | // ------------------------------------------------------------------ 339 | 340 | /** 341 | * Dataset title formater 342 | * 343 | * Formats the title of a dataset for the select box 344 | */ 345 | var DatasetTitleFormater = PhpDebugBar.DatasetTitleFormater = function(debugbar) { 346 | this.debugbar = debugbar; 347 | }; 348 | 349 | $.extend(DatasetTitleFormater.prototype, { 350 | 351 | /** 352 | * Formats the title of a dataset 353 | * 354 | * @this {DatasetTitleFormater} 355 | * @param {String} id 356 | * @param {Object} data 357 | * @param {String} suffix 358 | * @return {String} 359 | */ 360 | format: function(id, data, suffix) { 361 | if (suffix) { 362 | suffix = ' ' + suffix; 363 | } else { 364 | suffix = ''; 365 | } 366 | 367 | var nb = getObjectSize(this.debugbar.datasets) + 1; 368 | 369 | if (typeof(data['__meta']) === 'undefined') { 370 | return "#" + nb + suffix; 371 | } 372 | 373 | var uri = data['__meta']['uri'], filename; 374 | if (uri.length && uri.charAt(uri.length - 1) === '/') { 375 | // URI ends in a trailing /: get the portion before then to avoid returning an empty string 376 | filename = uri.substr(0, uri.length - 1); // strip trailing '/' 377 | filename = filename.substr(filename.lastIndexOf('/') + 1); // get last path segment 378 | filename += '/'; // add the trailing '/' back 379 | } else { 380 | filename = uri.substr(uri.lastIndexOf('/') + 1); 381 | } 382 | 383 | // truncate the filename in the label, if it's too long 384 | var maxLength = 150; 385 | if (filename.length > maxLength) { 386 | filename = filename.substr(0, maxLength) + '...'; 387 | } 388 | 389 | var label = "#" + nb + " " + filename + suffix + ' (' + data['__meta']['datetime'].split(' ')[1] + ')'; 390 | return label; 391 | } 392 | 393 | }); 394 | 395 | // ------------------------------------------------------------------ 396 | 397 | 398 | /** 399 | * DebugBar 400 | * 401 | * Creates a bar that appends itself to the body of your page 402 | * and sticks to the bottom. 403 | * 404 | * The bar can be customized by adding tabs and indicators. 405 | * A data map is used to fill those controls with data provided 406 | * from datasets. 407 | */ 408 | var DebugBar = PhpDebugBar.DebugBar = Widget.extend({ 409 | 410 | className: "phpdebugbar " + csscls('minimized'), 411 | 412 | options: { 413 | bodyMarginBottom: true, 414 | bodyMarginBottomHeight: 0 415 | }, 416 | 417 | initialize: function() { 418 | this.controls = {}; 419 | this.dataMap = {}; 420 | this.datasets = {}; 421 | this.firstTabName = null; 422 | this.activePanelName = null; 423 | this.datesetTitleFormater = new DatasetTitleFormater(this); 424 | this.options.bodyMarginBottomHeight = parseInt($('body').css('margin-bottom')); 425 | this.registerResizeHandler(); 426 | }, 427 | 428 | /** 429 | * Register resize event, for resize debugbar with reponsive css. 430 | * 431 | * @this {DebugBar} 432 | */ 433 | registerResizeHandler: function() { 434 | if (typeof this.resize.bind == 'undefined') return; 435 | 436 | var f = this.resize.bind(this); 437 | this.respCSSSize = 0; 438 | $(window).resize(f); 439 | setTimeout(f, 20); 440 | }, 441 | 442 | /** 443 | * Resizes the debugbar to fit the current browser window 444 | */ 445 | resize: function() { 446 | var contentSize = this.respCSSSize; 447 | if (this.respCSSSize == 0) { 448 | this.$header.find("> div > *:visible").each(function () { 449 | contentSize += $(this).outerWidth(); 450 | }); 451 | } 452 | 453 | var currentSize = this.$header.width(); 454 | var cssClass = "phpdebugbar-mini-design"; 455 | var bool = this.$header.hasClass(cssClass); 456 | 457 | if (currentSize <= contentSize && !bool) { 458 | this.respCSSSize = contentSize; 459 | this.$header.addClass(cssClass); 460 | } else if (contentSize < currentSize && bool) { 461 | this.respCSSSize = 0; 462 | this.$header.removeClass(cssClass); 463 | } 464 | 465 | // Reset height to ensure bar is still visible 466 | this.setHeight(this.$body.height()); 467 | }, 468 | 469 | /** 470 | * Initialiazes the UI 471 | * 472 | * @this {DebugBar} 473 | */ 474 | render: function() { 475 | var self = this; 476 | this.$el.appendTo('body'); 477 | this.$dragCapture = $('
').addClass(csscls('drag-capture')).appendTo(this.$el); 478 | this.$resizehdle = $('
').addClass(csscls('resize-handle')).appendTo(this.$el); 479 | this.$header = $('
').addClass(csscls('header')).appendTo(this.$el); 480 | this.$headerBtn = $('').addClass(csscls('restore-btn')).appendTo(this.$header); 481 | this.$headerBtn.click(function() { 482 | self.close(); 483 | }); 484 | this.$headerLeft = $('
').addClass(csscls('header-left')).appendTo(this.$header); 485 | this.$headerRight = $('
').addClass(csscls('header-right')).appendTo(this.$header); 486 | var $body = this.$body = $('
').addClass(csscls('body')).appendTo(this.$el); 487 | this.recomputeBottomOffset(); 488 | 489 | // dragging of resize handle 490 | var pos_y, orig_h; 491 | this.$resizehdle.on('mousedown', function(e) { 492 | orig_h = $body.height(), pos_y = e.pageY; 493 | $body.parents().on('mousemove', mousemove).on('mouseup', mouseup); 494 | self.$dragCapture.show(); 495 | e.preventDefault(); 496 | }); 497 | var mousemove = function(e) { 498 | var h = orig_h + (pos_y - e.pageY); 499 | self.setHeight(h); 500 | }; 501 | var mouseup = function() { 502 | $body.parents().off('mousemove', mousemove).off('mouseup', mouseup); 503 | self.$dragCapture.hide(); 504 | }; 505 | 506 | // close button 507 | this.$closebtn = $('').addClass(csscls('close-btn')).appendTo(this.$headerRight); 508 | this.$closebtn.click(function() { 509 | self.close(); 510 | }); 511 | 512 | // minimize button 513 | this.$minimizebtn = $('').addClass(csscls('minimize-btn') ).appendTo(this.$headerRight); 514 | this.$minimizebtn.click(function() { 515 | self.minimize(); 516 | }); 517 | 518 | // maximize button 519 | this.$maximizebtn = $('').addClass(csscls('maximize-btn') ).appendTo(this.$headerRight); 520 | this.$maximizebtn.click(function() { 521 | self.restore(); 522 | }); 523 | 524 | // restore button 525 | this.$restorebtn = $('').addClass(csscls('restore-btn')).hide().appendTo(this.$el); 526 | this.$restorebtn.click(function() { 527 | self.restore(); 528 | }); 529 | 530 | // open button 531 | this.$openbtn = $('').addClass(csscls('open-btn')).appendTo(this.$headerRight).hide(); 532 | this.$openbtn.click(function() { 533 | self.openHandler.show(function(id, dataset) { 534 | self.addDataSet(dataset, id, "(opened)"); 535 | self.showTab(); 536 | }); 537 | }); 538 | 539 | // select box for data sets 540 | this.$datasets = $('
') 98 | .append('Uri:
') 99 | .append('IP:
') 100 | .append(searchBtn) 101 | .appendTo(this.$actions); 102 | }, 103 | 104 | handleFind: function(data) { 105 | var self = this; 106 | $.each(data, function(i, meta) { 107 | var a = $('
') 108 | .text('Load dataset') 109 | .on('click', function(e) { 110 | self.hide(); 111 | self.load(meta['id'], function(data) { 112 | self.callback(meta['id'], data); 113 | }); 114 | e.preventDefault(); 115 | }); 116 | 117 | var method = $('') 118 | .text(meta['method']) 119 | .on('click', function(e) { 120 | self.$table.empty(); 121 | self.find({method: meta['method']}, 0, self.handleFind.bind(self)); 122 | e.preventDefault(); 123 | }); 124 | 125 | var uri = $('') 126 | .text(meta['uri']) 127 | .on('click', function(e) { 128 | self.hide(); 129 | self.load(meta['id'], function(data) { 130 | self.callback(meta['id'], data); 131 | }); 132 | e.preventDefault(); 133 | }); 134 | 135 | var ip = $('') 136 | .text(meta['ip']) 137 | .on('click', function(e) { 138 | self.$table.empty(); 139 | self.find({ip: meta['ip']}, 0, self.handleFind.bind(self)); 140 | e.preventDefault(); 141 | }); 142 | 143 | var search = $('') 144 | .text('Show URL') 145 | .on('click', function(e) { 146 | self.$table.empty(); 147 | self.find({uri: meta['uri']}, 0, self.handleFind.bind(self)); 148 | e.preventDefault(); 149 | }); 150 | 151 | $('') 152 | .append('' + meta['datetime'] + '') 153 | .append('' + meta['method'] + '') 154 | .append($('').append(uri)) 155 | .append($('').append(ip)) 156 | .append($('').append(search)) 157 | .appendTo(self.$table); 158 | }); 159 | if (data.length < this.get('items_per_page')) { 160 | this.$loadmorebtn.hide(); 161 | } 162 | }, 163 | 164 | show: function(callback) { 165 | this.callback = callback; 166 | this.$el.show(); 167 | this.$overlay.show(); 168 | this.refresh(); 169 | }, 170 | 171 | hide: function() { 172 | this.$el.hide(); 173 | this.$overlay.hide(); 174 | }, 175 | 176 | find: function(filters, offset, callback) { 177 | var data = $.extend({}, filters, {max: this.get('items_per_page'), offset: offset || 0}); 178 | this.last_find_request = data; 179 | this.ajax(data, callback); 180 | }, 181 | 182 | load: function(id, callback) { 183 | this.ajax({op: "get", id: id}, callback); 184 | }, 185 | 186 | clear: function(callback) { 187 | this.ajax({op: "clear"}, callback); 188 | }, 189 | 190 | ajax: function(data, callback) { 191 | $.ajax({ 192 | dataType: 'json', 193 | url: this.get('url'), 194 | data: data, 195 | success: callback, 196 | ignoreDebugBarAjaxHandler: true 197 | }); 198 | } 199 | 200 | }); 201 | 202 | })(PhpDebugBar.$); 203 | -------------------------------------------------------------------------------- /assets/vendor/font-awesome/css/font-awesome.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */@font-face{font-family:'PhpDebugbarFontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.phpdebugbar-fa{display:inline-block;font:normal normal normal 14px/1 PhpDebugbarFontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.phpdebugbar-fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.phpdebugbar-fa-2x{font-size:2em}.phpdebugbar-fa-3x{font-size:3em}.phpdebugbar-fa-4x{font-size:4em}.phpdebugbar-fa-5x{font-size:5em}.phpdebugbar-fa-fw{width:1.28571429em;text-align:center}.phpdebugbar-fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.phpdebugbar-fa-ul>li{position:relative}.phpdebugbar-fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.phpdebugbar-fa-li.phpdebugbar-fa-lg{left:-1.85714286em}.phpdebugbar-fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.phpdebugbar-fa-pull-left{float:left}.phpdebugbar-fa-pull-right{float:right}.phpdebugbar-fa.phpdebugbar-fa-pull-left{margin-right:.3em}.phpdebugbar-fa.phpdebugbar-fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.phpdebugbar-fa.pull-left{margin-right:.3em}.phpdebugbar-fa.pull-right{margin-left:.3em}.phpdebugbar-fa-spin{-webkit-animation:phpdebugbar-fa-spin 2s infinite linear;animation:phpdebugbar-fa-spin 2s infinite linear}.phpdebugbar-fa-pulse{-webkit-animation:phpdebugbar-fa-spin 1s infinite steps(8);animation:phpdebugbar-fa-spin 1s infinite steps(8)}@-webkit-keyframes phpdebugbar-fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes phpdebugbar-fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.phpdebugbar-fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.phpdebugbar-fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.phpdebugbar-fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.phpdebugbar-fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.phpdebugbar-fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .phpdebugbar-fa-rotate-90,:root .phpdebugbar-fa-rotate-180,:root .phpdebugbar-fa-rotate-270,:root .phpdebugbar-fa-flip-horizontal,:root .phpdebugbar-fa-flip-vertical{filter:none}.phpdebugbar-fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.phpdebugbar-fa-stack-1x,.phpdebugbar-fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.phpdebugbar-fa-stack-1x{line-height:inherit}.phpdebugbar-fa-stack-2x{font-size:2em}.phpdebugbar-fa-inverse{color:#fff}.phpdebugbar-fa-glass:before{content:"\f000"}.phpdebugbar-fa-music:before{content:"\f001"}.phpdebugbar-fa-search:before{content:"\f002"}.phpdebugbar-fa-envelope-o:before{content:"\f003"}.phpdebugbar-fa-heart:before{content:"\f004"}.phpdebugbar-fa-star:before{content:"\f005"}.phpdebugbar-fa-star-o:before{content:"\f006"}.phpdebugbar-fa-user:before{content:"\f007"}.phpdebugbar-fa-film:before{content:"\f008"}.phpdebugbar-fa-th-large:before{content:"\f009"}.phpdebugbar-fa-th:before{content:"\f00a"}.phpdebugbar-fa-th-list:before{content:"\f00b"}.phpdebugbar-fa-check:before{content:"\f00c"}.phpdebugbar-fa-remove:before,.phpdebugbar-fa-close:before,.phpdebugbar-fa-times:before{content:"\f00d"}.phpdebugbar-fa-search-plus:before{content:"\f00e"}.phpdebugbar-fa-search-minus:before{content:"\f010"}.phpdebugbar-fa-power-off:before{content:"\f011"}.phpdebugbar-fa-signal:before{content:"\f012"}.phpdebugbar-fa-gear:before,.phpdebugbar-fa-cog:before{content:"\f013"}.phpdebugbar-fa-trash-o:before{content:"\f014"}.phpdebugbar-fa-home:before{content:"\f015"}.phpdebugbar-fa-file-o:before{content:"\f016"}.phpdebugbar-fa-clock-o:before{content:"\f017"}.phpdebugbar-fa-road:before{content:"\f018"}.phpdebugbar-fa-download:before{content:"\f019"}.phpdebugbar-fa-arrow-circle-o-down:before{content:"\f01a"}.phpdebugbar-fa-arrow-circle-o-up:before{content:"\f01b"}.phpdebugbar-fa-inbox:before{content:"\f01c"}.phpdebugbar-fa-play-circle-o:before{content:"\f01d"}.phpdebugbar-fa-rotate-right:before,.phpdebugbar-fa-repeat:before{content:"\f01e"}.phpdebugbar-fa-refresh:before{content:"\f021"}.phpdebugbar-fa-list-alt:before{content:"\f022"}.phpdebugbar-fa-lock:before{content:"\f023"}.phpdebugbar-fa-flag:before{content:"\f024"}.phpdebugbar-fa-headphones:before{content:"\f025"}.phpdebugbar-fa-volume-off:before{content:"\f026"}.phpdebugbar-fa-volume-down:before{content:"\f027"}.phpdebugbar-fa-volume-up:before{content:"\f028"}.phpdebugbar-fa-qrcode:before{content:"\f029"}.phpdebugbar-fa-barcode:before{content:"\f02a"}.phpdebugbar-fa-tag:before{content:"\f02b"}.phpdebugbar-fa-tags:before{content:"\f02c"}.phpdebugbar-fa-book:before{content:"\f02d"}.phpdebugbar-fa-bookmark:before{content:"\f02e"}.phpdebugbar-fa-print:before{content:"\f02f"}.phpdebugbar-fa-camera:before{content:"\f030"}.phpdebugbar-fa-font:before{content:"\f031"}.phpdebugbar-fa-bold:before{content:"\f032"}.phpdebugbar-fa-italic:before{content:"\f033"}.phpdebugbar-fa-text-height:before{content:"\f034"}.phpdebugbar-fa-text-width:before{content:"\f035"}.phpdebugbar-fa-align-left:before{content:"\f036"}.phpdebugbar-fa-align-center:before{content:"\f037"}.phpdebugbar-fa-align-right:before{content:"\f038"}.phpdebugbar-fa-align-justify:before{content:"\f039"}.phpdebugbar-fa-list:before{content:"\f03a"}.phpdebugbar-fa-dedent:before,.phpdebugbar-fa-outdent:before{content:"\f03b"}.phpdebugbar-fa-indent:before{content:"\f03c"}.phpdebugbar-fa-video-camera:before{content:"\f03d"}.phpdebugbar-fa-photo:before,.phpdebugbar-fa-image:before,.phpdebugbar-fa-picture-o:before{content:"\f03e"}.phpdebugbar-fa-pencil:before{content:"\f040"}.phpdebugbar-fa-map-marker:before{content:"\f041"}.phpdebugbar-fa-adjust:before{content:"\f042"}.phpdebugbar-fa-tint:before{content:"\f043"}.phpdebugbar-fa-edit:before,.phpdebugbar-fa-pencil-square-o:before{content:"\f044"}.phpdebugbar-fa-share-square-o:before{content:"\f045"}.phpdebugbar-fa-check-square-o:before{content:"\f046"}.phpdebugbar-fa-arrows:before{content:"\f047"}.phpdebugbar-fa-step-backward:before{content:"\f048"}.phpdebugbar-fa-fast-backward:before{content:"\f049"}.phpdebugbar-fa-backward:before{content:"\f04a"}.phpdebugbar-fa-play:before{content:"\f04b"}.phpdebugbar-fa-pause:before{content:"\f04c"}.phpdebugbar-fa-stop:before{content:"\f04d"}.phpdebugbar-fa-forward:before{content:"\f04e"}.phpdebugbar-fa-fast-forward:before{content:"\f050"}.phpdebugbar-fa-step-forward:before{content:"\f051"}.phpdebugbar-fa-eject:before{content:"\f052"}.phpdebugbar-fa-chevron-left:before{content:"\f053"}.phpdebugbar-fa-chevron-right:before{content:"\f054"}.phpdebugbar-fa-plus-circle:before{content:"\f055"}.phpdebugbar-fa-minus-circle:before{content:"\f056"}.phpdebugbar-fa-times-circle:before{content:"\f057"}.phpdebugbar-fa-check-circle:before{content:"\f058"}.phpdebugbar-fa-question-circle:before{content:"\f059"}.phpdebugbar-fa-info-circle:before{content:"\f05a"}.phpdebugbar-fa-crosshairs:before{content:"\f05b"}.phpdebugbar-fa-times-circle-o:before{content:"\f05c"}.phpdebugbar-fa-check-circle-o:before{content:"\f05d"}.phpdebugbar-fa-ban:before{content:"\f05e"}.phpdebugbar-fa-arrow-left:before{content:"\f060"}.phpdebugbar-fa-arrow-right:before{content:"\f061"}.phpdebugbar-fa-arrow-up:before{content:"\f062"}.phpdebugbar-fa-arrow-down:before{content:"\f063"}.phpdebugbar-fa-mail-forward:before,.phpdebugbar-fa-share:before{content:"\f064"}.phpdebugbar-fa-expand:before{content:"\f065"}.phpdebugbar-fa-compress:before{content:"\f066"}.phpdebugbar-fa-plus:before{content:"\f067"}.phpdebugbar-fa-minus:before{content:"\f068"}.phpdebugbar-fa-asterisk:before{content:"\f069"}.phpdebugbar-fa-exclamation-circle:before{content:"\f06a"}.phpdebugbar-fa-gift:before{content:"\f06b"}.phpdebugbar-fa-leaf:before{content:"\f06c"}.phpdebugbar-fa-fire:before{content:"\f06d"}.phpdebugbar-fa-eye:before{content:"\f06e"}.phpdebugbar-fa-eye-slash:before{content:"\f070"}.phpdebugbar-fa-warning:before,.phpdebugbar-fa-exclamation-triangle:before{content:"\f071"}.phpdebugbar-fa-plane:before{content:"\f072"}.phpdebugbar-fa-calendar:before{content:"\f073"}.phpdebugbar-fa-random:before{content:"\f074"}.phpdebugbar-fa-comment:before{content:"\f075"}.phpdebugbar-fa-magnet:before{content:"\f076"}.phpdebugbar-fa-chevron-up:before{content:"\f077"}.phpdebugbar-fa-chevron-down:before{content:"\f078"}.phpdebugbar-fa-retweet:before{content:"\f079"}.phpdebugbar-fa-shopping-cart:before{content:"\f07a"}.phpdebugbar-fa-folder:before{content:"\f07b"}.phpdebugbar-fa-folder-open:before{content:"\f07c"}.phpdebugbar-fa-arrows-v:before{content:"\f07d"}.phpdebugbar-fa-arrows-h:before{content:"\f07e"}.phpdebugbar-fa-bar-chart-o:before,.phpdebugbar-fa-bar-chart:before{content:"\f080"}.phpdebugbar-fa-twitter-square:before{content:"\f081"}.phpdebugbar-fa-facebook-square:before{content:"\f082"}.phpdebugbar-fa-camera-retro:before{content:"\f083"}.phpdebugbar-fa-key:before{content:"\f084"}.phpdebugbar-fa-gears:before,.phpdebugbar-fa-cogs:before{content:"\f085"}.phpdebugbar-fa-comments:before{content:"\f086"}.phpdebugbar-fa-thumbs-o-up:before{content:"\f087"}.phpdebugbar-fa-thumbs-o-down:before{content:"\f088"}.phpdebugbar-fa-star-half:before{content:"\f089"}.phpdebugbar-fa-heart-o:before{content:"\f08a"}.phpdebugbar-fa-sign-out:before{content:"\f08b"}.phpdebugbar-fa-linkedin-square:before{content:"\f08c"}.phpdebugbar-fa-thumb-tack:before{content:"\f08d"}.phpdebugbar-fa-external-link:before{content:"\f08e"}.phpdebugbar-fa-sign-in:before{content:"\f090"}.phpdebugbar-fa-trophy:before{content:"\f091"}.phpdebugbar-fa-github-square:before{content:"\f092"}.phpdebugbar-fa-upload:before{content:"\f093"}.phpdebugbar-fa-lemon-o:before{content:"\f094"}.phpdebugbar-fa-phone:before{content:"\f095"}.phpdebugbar-fa-square-o:before{content:"\f096"}.phpdebugbar-fa-bookmark-o:before{content:"\f097"}.phpdebugbar-fa-phone-square:before{content:"\f098"}.phpdebugbar-fa-twitter:before{content:"\f099"}.phpdebugbar-fa-facebook-f:before,.phpdebugbar-fa-facebook:before{content:"\f09a"}.phpdebugbar-fa-github:before{content:"\f09b"}.phpdebugbar-fa-unlock:before{content:"\f09c"}.phpdebugbar-fa-credit-card:before{content:"\f09d"}.phpdebugbar-fa-feed:before,.phpdebugbar-fa-rss:before{content:"\f09e"}.phpdebugbar-fa-hdd-o:before{content:"\f0a0"}.phpdebugbar-fa-bullhorn:before{content:"\f0a1"}.phpdebugbar-fa-bell:before{content:"\f0f3"}.phpdebugbar-fa-certificate:before{content:"\f0a3"}.phpdebugbar-fa-hand-o-right:before{content:"\f0a4"}.phpdebugbar-fa-hand-o-left:before{content:"\f0a5"}.phpdebugbar-fa-hand-o-up:before{content:"\f0a6"}.phpdebugbar-fa-hand-o-down:before{content:"\f0a7"}.phpdebugbar-fa-arrow-circle-left:before{content:"\f0a8"}.phpdebugbar-fa-arrow-circle-right:before{content:"\f0a9"}.phpdebugbar-fa-arrow-circle-up:before{content:"\f0aa"}.phpdebugbar-fa-arrow-circle-down:before{content:"\f0ab"}.phpdebugbar-fa-globe:before{content:"\f0ac"}.phpdebugbar-fa-wrench:before{content:"\f0ad"}.phpdebugbar-fa-tasks:before{content:"\f0ae"}.phpdebugbar-fa-filter:before{content:"\f0b0"}.phpdebugbar-fa-briefcase:before{content:"\f0b1"}.phpdebugbar-fa-arrows-alt:before{content:"\f0b2"}.phpdebugbar-fa-group:before,.phpdebugbar-fa-users:before{content:"\f0c0"}.phpdebugbar-fa-chain:before,.phpdebugbar-fa-link:before{content:"\f0c1"}.phpdebugbar-fa-cloud:before{content:"\f0c2"}.phpdebugbar-fa-flask:before{content:"\f0c3"}.phpdebugbar-fa-cut:before,.phpdebugbar-fa-scissors:before{content:"\f0c4"}.phpdebugbar-fa-copy:before,.phpdebugbar-fa-files-o:before{content:"\f0c5"}.phpdebugbar-fa-paperclip:before{content:"\f0c6"}.phpdebugbar-fa-save:before,.phpdebugbar-fa-floppy-o:before{content:"\f0c7"}.phpdebugbar-fa-square:before{content:"\f0c8"}.phpdebugbar-fa-navicon:before,.phpdebugbar-fa-reorder:before,.phpdebugbar-fa-bars:before{content:"\f0c9"}.phpdebugbar-fa-list-ul:before{content:"\f0ca"}.phpdebugbar-fa-list-ol:before{content:"\f0cb"}.phpdebugbar-fa-strikethrough:before{content:"\f0cc"}.phpdebugbar-fa-underline:before{content:"\f0cd"}.phpdebugbar-fa-table:before{content:"\f0ce"}.phpdebugbar-fa-magic:before{content:"\f0d0"}.phpdebugbar-fa-truck:before{content:"\f0d1"}.phpdebugbar-fa-pinterest:before{content:"\f0d2"}.phpdebugbar-fa-pinterest-square:before{content:"\f0d3"}.phpdebugbar-fa-google-plus-square:before{content:"\f0d4"}.phpdebugbar-fa-google-plus:before{content:"\f0d5"}.phpdebugbar-fa-money:before{content:"\f0d6"}.phpdebugbar-fa-caret-down:before{content:"\f0d7"}.phpdebugbar-fa-caret-up:before{content:"\f0d8"}.phpdebugbar-fa-caret-left:before{content:"\f0d9"}.phpdebugbar-fa-caret-right:before{content:"\f0da"}.phpdebugbar-fa-columns:before{content:"\f0db"}.phpdebugbar-fa-unsorted:before,.phpdebugbar-fa-sort:before{content:"\f0dc"}.phpdebugbar-fa-sort-down:before,.phpdebugbar-fa-sort-desc:before{content:"\f0dd"}.phpdebugbar-fa-sort-up:before,.phpdebugbar-fa-sort-asc:before{content:"\f0de"}.phpdebugbar-fa-envelope:before{content:"\f0e0"}.phpdebugbar-fa-linkedin:before{content:"\f0e1"}.phpdebugbar-fa-rotate-left:before,.phpdebugbar-fa-undo:before{content:"\f0e2"}.phpdebugbar-fa-legal:before,.phpdebugbar-fa-gavel:before{content:"\f0e3"}.phpdebugbar-fa-dashboard:before,.phpdebugbar-fa-tachometer:before{content:"\f0e4"}.phpdebugbar-fa-comment-o:before{content:"\f0e5"}.phpdebugbar-fa-comments-o:before{content:"\f0e6"}.phpdebugbar-fa-flash:before,.phpdebugbar-fa-bolt:before{content:"\f0e7"}.phpdebugbar-fa-sitemap:before{content:"\f0e8"}.phpdebugbar-fa-umbrella:before{content:"\f0e9"}.phpdebugbar-fa-paste:before,.phpdebugbar-fa-clipboard:before{content:"\f0ea"}.phpdebugbar-fa-lightbulb-o:before{content:"\f0eb"}.phpdebugbar-fa-exchange:before{content:"\f0ec"}.phpdebugbar-fa-cloud-download:before{content:"\f0ed"}.phpdebugbar-fa-cloud-upload:before{content:"\f0ee"}.phpdebugbar-fa-user-md:before{content:"\f0f0"}.phpdebugbar-fa-stethoscope:before{content:"\f0f1"}.phpdebugbar-fa-suitcase:before{content:"\f0f2"}.phpdebugbar-fa-bell-o:before{content:"\f0a2"}.phpdebugbar-fa-coffee:before{content:"\f0f4"}.phpdebugbar-fa-cutlery:before{content:"\f0f5"}.phpdebugbar-fa-file-text-o:before{content:"\f0f6"}.phpdebugbar-fa-building-o:before{content:"\f0f7"}.phpdebugbar-fa-hospital-o:before{content:"\f0f8"}.phpdebugbar-fa-ambulance:before{content:"\f0f9"}.phpdebugbar-fa-medkit:before{content:"\f0fa"}.phpdebugbar-fa-fighter-jet:before{content:"\f0fb"}.phpdebugbar-fa-beer:before{content:"\f0fc"}.phpdebugbar-fa-h-square:before{content:"\f0fd"}.phpdebugbar-fa-plus-square:before{content:"\f0fe"}.phpdebugbar-fa-angle-double-left:before{content:"\f100"}.phpdebugbar-fa-angle-double-right:before{content:"\f101"}.phpdebugbar-fa-angle-double-up:before{content:"\f102"}.phpdebugbar-fa-angle-double-down:before{content:"\f103"}.phpdebugbar-fa-angle-left:before{content:"\f104"}.phpdebugbar-fa-angle-right:before{content:"\f105"}.phpdebugbar-fa-angle-up:before{content:"\f106"}.phpdebugbar-fa-angle-down:before{content:"\f107"}.phpdebugbar-fa-desktop:before{content:"\f108"}.phpdebugbar-fa-laptop:before{content:"\f109"}.phpdebugbar-fa-tablet:before{content:"\f10a"}.phpdebugbar-fa-mobile-phone:before,.phpdebugbar-fa-mobile:before{content:"\f10b"}.phpdebugbar-fa-circle-o:before{content:"\f10c"}.phpdebugbar-fa-quote-left:before{content:"\f10d"}.phpdebugbar-fa-quote-right:before{content:"\f10e"}.phpdebugbar-fa-spinner:before{content:"\f110"}.phpdebugbar-fa-circle:before{content:"\f111"}.phpdebugbar-fa-mail-reply:before,.phpdebugbar-fa-reply:before{content:"\f112"}.phpdebugbar-fa-github-alt:before{content:"\f113"}.phpdebugbar-fa-folder-o:before{content:"\f114"}.phpdebugbar-fa-folder-open-o:before{content:"\f115"}.phpdebugbar-fa-smile-o:before{content:"\f118"}.phpdebugbar-fa-frown-o:before{content:"\f119"}.phpdebugbar-fa-meh-o:before{content:"\f11a"}.phpdebugbar-fa-gamepad:before{content:"\f11b"}.phpdebugbar-fa-keyboard-o:before{content:"\f11c"}.phpdebugbar-fa-flag-o:before{content:"\f11d"}.phpdebugbar-fa-flag-checkered:before{content:"\f11e"}.phpdebugbar-fa-terminal:before{content:"\f120"}.phpdebugbar-fa-code:before{content:"\f121"}.phpdebugbar-fa-mail-reply-all:before,.phpdebugbar-fa-reply-all:before{content:"\f122"}.phpdebugbar-fa-star-half-empty:before,.phpdebugbar-fa-star-half-full:before,.phpdebugbar-fa-star-half-o:before{content:"\f123"}.phpdebugbar-fa-location-arrow:before{content:"\f124"}.phpdebugbar-fa-crop:before{content:"\f125"}.phpdebugbar-fa-code-fork:before{content:"\f126"}.phpdebugbar-fa-unlink:before,.phpdebugbar-fa-chain-broken:before{content:"\f127"}.phpdebugbar-fa-question:before{content:"\f128"}.phpdebugbar-fa-info:before{content:"\f129"}.phpdebugbar-fa-exclamation:before{content:"\f12a"}.phpdebugbar-fa-superscript:before{content:"\f12b"}.phpdebugbar-fa-subscript:before{content:"\f12c"}.phpdebugbar-fa-eraser:before{content:"\f12d"}.phpdebugbar-fa-puzzle-piece:before{content:"\f12e"}.phpdebugbar-fa-microphone:before{content:"\f130"}.phpdebugbar-fa-microphone-slash:before{content:"\f131"}.phpdebugbar-fa-shield:before{content:"\f132"}.phpdebugbar-fa-calendar-o:before{content:"\f133"}.phpdebugbar-fa-fire-extinguisher:before{content:"\f134"}.phpdebugbar-fa-rocket:before{content:"\f135"}.phpdebugbar-fa-maxcdn:before{content:"\f136"}.phpdebugbar-fa-chevron-circle-left:before{content:"\f137"}.phpdebugbar-fa-chevron-circle-right:before{content:"\f138"}.phpdebugbar-fa-chevron-circle-up:before{content:"\f139"}.phpdebugbar-fa-chevron-circle-down:before{content:"\f13a"}.phpdebugbar-fa-html5:before{content:"\f13b"}.phpdebugbar-fa-css3:before{content:"\f13c"}.phpdebugbar-fa-anchor:before{content:"\f13d"}.phpdebugbar-fa-unlock-alt:before{content:"\f13e"}.phpdebugbar-fa-bullseye:before{content:"\f140"}.phpdebugbar-fa-ellipsis-h:before{content:"\f141"}.phpdebugbar-fa-ellipsis-v:before{content:"\f142"}.phpdebugbar-fa-rss-square:before{content:"\f143"}.phpdebugbar-fa-play-circle:before{content:"\f144"}.phpdebugbar-fa-ticket:before{content:"\f145"}.phpdebugbar-fa-minus-square:before{content:"\f146"}.phpdebugbar-fa-minus-square-o:before{content:"\f147"}.phpdebugbar-fa-level-up:before{content:"\f148"}.phpdebugbar-fa-level-down:before{content:"\f149"}.phpdebugbar-fa-check-square:before{content:"\f14a"}.phpdebugbar-fa-pencil-square:before{content:"\f14b"}.phpdebugbar-fa-external-link-square:before{content:"\f14c"}.phpdebugbar-fa-share-square:before{content:"\f14d"}.phpdebugbar-fa-compass:before{content:"\f14e"}.phpdebugbar-fa-toggle-down:before,.phpdebugbar-fa-caret-square-o-down:before{content:"\f150"}.phpdebugbar-fa-toggle-up:before,.phpdebugbar-fa-caret-square-o-up:before{content:"\f151"}.phpdebugbar-fa-toggle-right:before,.phpdebugbar-fa-caret-square-o-right:before{content:"\f152"}.phpdebugbar-fa-euro:before,.phpdebugbar-fa-eur:before{content:"\f153"}.phpdebugbar-fa-gbp:before{content:"\f154"}.phpdebugbar-fa-dollar:before,.phpdebugbar-fa-usd:before{content:"\f155"}.phpdebugbar-fa-rupee:before,.phpdebugbar-fa-inr:before{content:"\f156"}.phpdebugbar-fa-cny:before,.phpdebugbar-fa-rmb:before,.phpdebugbar-fa-yen:before,.phpdebugbar-fa-jpy:before{content:"\f157"}.phpdebugbar-fa-ruble:before,.phpdebugbar-fa-rouble:before,.phpdebugbar-fa-rub:before{content:"\f158"}.phpdebugbar-fa-won:before,.phpdebugbar-fa-krw:before{content:"\f159"}.phpdebugbar-fa-bitcoin:before,.phpdebugbar-fa-btc:before{content:"\f15a"}.phpdebugbar-fa-file:before{content:"\f15b"}.phpdebugbar-fa-file-text:before{content:"\f15c"}.phpdebugbar-fa-sort-alpha-asc:before{content:"\f15d"}.phpdebugbar-fa-sort-alpha-desc:before{content:"\f15e"}.phpdebugbar-fa-sort-amount-asc:before{content:"\f160"}.phpdebugbar-fa-sort-amount-desc:before{content:"\f161"}.phpdebugbar-fa-sort-numeric-asc:before{content:"\f162"}.phpdebugbar-fa-sort-numeric-desc:before{content:"\f163"}.phpdebugbar-fa-thumbs-up:before{content:"\f164"}.phpdebugbar-fa-thumbs-down:before{content:"\f165"}.phpdebugbar-fa-youtube-square:before{content:"\f166"}.phpdebugbar-fa-youtube:before{content:"\f167"}.phpdebugbar-fa-xing:before{content:"\f168"}.phpdebugbar-fa-xing-square:before{content:"\f169"}.phpdebugbar-fa-youtube-play:before{content:"\f16a"}.phpdebugbar-fa-dropbox:before{content:"\f16b"}.phpdebugbar-fa-stack-overflow:before{content:"\f16c"}.phpdebugbar-fa-instagram:before{content:"\f16d"}.phpdebugbar-fa-flickr:before{content:"\f16e"}.phpdebugbar-fa-adn:before{content:"\f170"}.phpdebugbar-fa-bitbucket:before{content:"\f171"}.phpdebugbar-fa-bitbucket-square:before{content:"\f172"}.phpdebugbar-fa-tumblr:before{content:"\f173"}.phpdebugbar-fa-tumblr-square:before{content:"\f174"}.phpdebugbar-fa-long-arrow-down:before{content:"\f175"}.phpdebugbar-fa-long-arrow-up:before{content:"\f176"}.phpdebugbar-fa-long-arrow-left:before{content:"\f177"}.phpdebugbar-fa-long-arrow-right:before{content:"\f178"}.phpdebugbar-fa-apple:before{content:"\f179"}.phpdebugbar-fa-windows:before{content:"\f17a"}.phpdebugbar-fa-android:before{content:"\f17b"}.phpdebugbar-fa-linux:before{content:"\f17c"}.phpdebugbar-fa-dribbble:before{content:"\f17d"}.phpdebugbar-fa-skype:before{content:"\f17e"}.phpdebugbar-fa-foursquare:before{content:"\f180"}.phpdebugbar-fa-trello:before{content:"\f181"}.phpdebugbar-fa-female:before{content:"\f182"}.phpdebugbar-fa-male:before{content:"\f183"}.phpdebugbar-fa-gittip:before,.phpdebugbar-fa-gratipay:before{content:"\f184"}.phpdebugbar-fa-sun-o:before{content:"\f185"}.phpdebugbar-fa-moon-o:before{content:"\f186"}.phpdebugbar-fa-archive:before{content:"\f187"}.phpdebugbar-fa-bug:before{content:"\f188"}.phpdebugbar-fa-vk:before{content:"\f189"}.phpdebugbar-fa-weibo:before{content:"\f18a"}.phpdebugbar-fa-renren:before{content:"\f18b"}.phpdebugbar-fa-pagelines:before{content:"\f18c"}.phpdebugbar-fa-stack-exchange:before{content:"\f18d"}.phpdebugbar-fa-arrow-circle-o-right:before{content:"\f18e"}.phpdebugbar-fa-arrow-circle-o-left:before{content:"\f190"}.phpdebugbar-fa-toggle-left:before,.phpdebugbar-fa-caret-square-o-left:before{content:"\f191"}.phpdebugbar-fa-dot-circle-o:before{content:"\f192"}.phpdebugbar-fa-wheelchair:before{content:"\f193"}.phpdebugbar-fa-vimeo-square:before{content:"\f194"}.phpdebugbar-fa-turkish-lira:before,.phpdebugbar-fa-try:before{content:"\f195"}.phpdebugbar-fa-plus-square-o:before{content:"\f196"}.phpdebugbar-fa-space-shuttle:before{content:"\f197"}.phpdebugbar-fa-slack:before{content:"\f198"}.phpdebugbar-fa-envelope-square:before{content:"\f199"}.phpdebugbar-fa-wordpress:before{content:"\f19a"}.phpdebugbar-fa-openid:before{content:"\f19b"}.phpdebugbar-fa-institution:before,.phpdebugbar-fa-bank:before,.phpdebugbar-fa-university:before{content:"\f19c"}.phpdebugbar-fa-mortar-board:before,.phpdebugbar-fa-graduation-cap:before{content:"\f19d"}.phpdebugbar-fa-yahoo:before{content:"\f19e"}.phpdebugbar-fa-google:before{content:"\f1a0"}.phpdebugbar-fa-reddit:before{content:"\f1a1"}.phpdebugbar-fa-reddit-square:before{content:"\f1a2"}.phpdebugbar-fa-stumbleupon-circle:before{content:"\f1a3"}.phpdebugbar-fa-stumbleupon:before{content:"\f1a4"}.phpdebugbar-fa-delicious:before{content:"\f1a5"}.phpdebugbar-fa-digg:before{content:"\f1a6"}.phpdebugbar-fa-pied-piper-pp:before{content:"\f1a7"}.phpdebugbar-fa-pied-piper-alt:before{content:"\f1a8"}.phpdebugbar-fa-drupal:before{content:"\f1a9"}.phpdebugbar-fa-joomla:before{content:"\f1aa"}.phpdebugbar-fa-language:before{content:"\f1ab"}.phpdebugbar-fa-fax:before{content:"\f1ac"}.phpdebugbar-fa-building:before{content:"\f1ad"}.phpdebugbar-fa-child:before{content:"\f1ae"}.phpdebugbar-fa-paw:before{content:"\f1b0"}.phpdebugbar-fa-spoon:before{content:"\f1b1"}.phpdebugbar-fa-cube:before{content:"\f1b2"}.phpdebugbar-fa-cubes:before{content:"\f1b3"}.phpdebugbar-fa-behance:before{content:"\f1b4"}.phpdebugbar-fa-behance-square:before{content:"\f1b5"}.phpdebugbar-fa-steam:before{content:"\f1b6"}.phpdebugbar-fa-steam-square:before{content:"\f1b7"}.phpdebugbar-fa-recycle:before{content:"\f1b8"}.phpdebugbar-fa-automobile:before,.phpdebugbar-fa-car:before{content:"\f1b9"}.phpdebugbar-fa-cab:before,.phpdebugbar-fa-taxi:before{content:"\f1ba"}.phpdebugbar-fa-tree:before{content:"\f1bb"}.phpdebugbar-fa-spotify:before{content:"\f1bc"}.phpdebugbar-fa-deviantart:before{content:"\f1bd"}.phpdebugbar-fa-soundcloud:before{content:"\f1be"}.phpdebugbar-fa-database:before{content:"\f1c0"}.phpdebugbar-fa-file-pdf-o:before{content:"\f1c1"}.phpdebugbar-fa-file-word-o:before{content:"\f1c2"}.phpdebugbar-fa-file-excel-o:before{content:"\f1c3"}.phpdebugbar-fa-file-powerpoint-o:before{content:"\f1c4"}.phpdebugbar-fa-file-photo-o:before,.phpdebugbar-fa-file-picture-o:before,.phpdebugbar-fa-file-image-o:before{content:"\f1c5"}.phpdebugbar-fa-file-zip-o:before,.phpdebugbar-fa-file-archive-o:before{content:"\f1c6"}.phpdebugbar-fa-file-sound-o:before,.phpdebugbar-fa-file-audio-o:before{content:"\f1c7"}.phpdebugbar-fa-file-movie-o:before,.phpdebugbar-fa-file-video-o:before{content:"\f1c8"}.phpdebugbar-fa-file-code-o:before{content:"\f1c9"}.phpdebugbar-fa-vine:before{content:"\f1ca"}.phpdebugbar-fa-codepen:before{content:"\f1cb"}.phpdebugbar-fa-jsfiddle:before{content:"\f1cc"}.phpdebugbar-fa-life-bouy:before,.phpdebugbar-fa-life-buoy:before,.phpdebugbar-fa-life-saver:before,.phpdebugbar-fa-support:before,.phpdebugbar-fa-life-ring:before{content:"\f1cd"}.phpdebugbar-fa-circle-o-notch:before{content:"\f1ce"}.phpdebugbar-fa-ra:before,.phpdebugbar-fa-resistance:before,.phpdebugbar-fa-rebel:before{content:"\f1d0"}.phpdebugbar-fa-ge:before,.phpdebugbar-fa-empire:before{content:"\f1d1"}.phpdebugbar-fa-git-square:before{content:"\f1d2"}.phpdebugbar-fa-git:before{content:"\f1d3"}.phpdebugbar-fa-y-combinator-square:before,.phpdebugbar-fa-yc-square:before,.phpdebugbar-fa-hacker-news:before{content:"\f1d4"}.phpdebugbar-fa-tencent-weibo:before{content:"\f1d5"}.phpdebugbar-fa-qq:before{content:"\f1d6"}.phpdebugbar-fa-wechat:before,.phpdebugbar-fa-weixin:before{content:"\f1d7"}.phpdebugbar-fa-send:before,.phpdebugbar-fa-paper-plane:before{content:"\f1d8"}.phpdebugbar-fa-send-o:before,.phpdebugbar-fa-paper-plane-o:before{content:"\f1d9"}.phpdebugbar-fa-history:before{content:"\f1da"}.phpdebugbar-fa-circle-thin:before{content:"\f1db"}.phpdebugbar-fa-header:before{content:"\f1dc"}.phpdebugbar-fa-paragraph:before{content:"\f1dd"}.phpdebugbar-fa-sliders:before{content:"\f1de"}.phpdebugbar-fa-share-alt:before{content:"\f1e0"}.phpdebugbar-fa-share-alt-square:before{content:"\f1e1"}.phpdebugbar-fa-bomb:before{content:"\f1e2"}.phpdebugbar-fa-soccer-ball-o:before,.phpdebugbar-fa-futbol-o:before{content:"\f1e3"}.phpdebugbar-fa-tty:before{content:"\f1e4"}.phpdebugbar-fa-binoculars:before{content:"\f1e5"}.phpdebugbar-fa-plug:before{content:"\f1e6"}.phpdebugbar-fa-slideshare:before{content:"\f1e7"}.phpdebugbar-fa-twitch:before{content:"\f1e8"}.phpdebugbar-fa-yelp:before{content:"\f1e9"}.phpdebugbar-fa-newspaper-o:before{content:"\f1ea"}.phpdebugbar-fa-wifi:before{content:"\f1eb"}.phpdebugbar-fa-calculator:before{content:"\f1ec"}.phpdebugbar-fa-paypal:before{content:"\f1ed"}.phpdebugbar-fa-google-wallet:before{content:"\f1ee"}.phpdebugbar-fa-cc-visa:before{content:"\f1f0"}.phpdebugbar-fa-cc-mastercard:before{content:"\f1f1"}.phpdebugbar-fa-cc-discover:before{content:"\f1f2"}.phpdebugbar-fa-cc-amex:before{content:"\f1f3"}.phpdebugbar-fa-cc-paypal:before{content:"\f1f4"}.phpdebugbar-fa-cc-stripe:before{content:"\f1f5"}.phpdebugbar-fa-bell-slash:before{content:"\f1f6"}.phpdebugbar-fa-bell-slash-o:before{content:"\f1f7"}.phpdebugbar-fa-trash:before{content:"\f1f8"}.phpdebugbar-fa-copyright:before{content:"\f1f9"}.phpdebugbar-fa-at:before{content:"\f1fa"}.phpdebugbar-fa-eyedropper:before{content:"\f1fb"}.phpdebugbar-fa-paint-brush:before{content:"\f1fc"}.phpdebugbar-fa-birthday-cake:before{content:"\f1fd"}.phpdebugbar-fa-area-chart:before{content:"\f1fe"}.phpdebugbar-fa-pie-chart:before{content:"\f200"}.phpdebugbar-fa-line-chart:before{content:"\f201"}.phpdebugbar-fa-lastfm:before{content:"\f202"}.phpdebugbar-fa-lastfm-square:before{content:"\f203"}.phpdebugbar-fa-toggle-off:before{content:"\f204"}.phpdebugbar-fa-toggle-on:before{content:"\f205"}.phpdebugbar-fa-bicycle:before{content:"\f206"}.phpdebugbar-fa-bus:before{content:"\f207"}.phpdebugbar-fa-ioxhost:before{content:"\f208"}.phpdebugbar-fa-angellist:before{content:"\f209"}.phpdebugbar-fa-cc:before{content:"\f20a"}.phpdebugbar-fa-shekel:before,.phpdebugbar-fa-sheqel:before,.phpdebugbar-fa-ils:before{content:"\f20b"}.phpdebugbar-fa-meanpath:before{content:"\f20c"}.phpdebugbar-fa-buysellads:before{content:"\f20d"}.phpdebugbar-fa-connectdevelop:before{content:"\f20e"}.phpdebugbar-fa-dashcube:before{content:"\f210"}.phpdebugbar-fa-forumbee:before{content:"\f211"}.phpdebugbar-fa-leanpub:before{content:"\f212"}.phpdebugbar-fa-sellsy:before{content:"\f213"}.phpdebugbar-fa-shirtsinbulk:before{content:"\f214"}.phpdebugbar-fa-simplybuilt:before{content:"\f215"}.phpdebugbar-fa-skyatlas:before{content:"\f216"}.phpdebugbar-fa-cart-plus:before{content:"\f217"}.phpdebugbar-fa-cart-arrow-down:before{content:"\f218"}.phpdebugbar-fa-diamond:before{content:"\f219"}.phpdebugbar-fa-ship:before{content:"\f21a"}.phpdebugbar-fa-user-secret:before{content:"\f21b"}.phpdebugbar-fa-motorcycle:before{content:"\f21c"}.phpdebugbar-fa-street-view:before{content:"\f21d"}.phpdebugbar-fa-heartbeat:before{content:"\f21e"}.phpdebugbar-fa-venus:before{content:"\f221"}.phpdebugbar-fa-mars:before{content:"\f222"}.phpdebugbar-fa-mercury:before{content:"\f223"}.phpdebugbar-fa-intersex:before,.phpdebugbar-fa-transgender:before{content:"\f224"}.phpdebugbar-fa-transgender-alt:before{content:"\f225"}.phpdebugbar-fa-venus-double:before{content:"\f226"}.phpdebugbar-fa-mars-double:before{content:"\f227"}.phpdebugbar-fa-venus-mars:before{content:"\f228"}.phpdebugbar-fa-mars-stroke:before{content:"\f229"}.phpdebugbar-fa-mars-stroke-v:before{content:"\f22a"}.phpdebugbar-fa-mars-stroke-h:before{content:"\f22b"}.phpdebugbar-fa-neuter:before{content:"\f22c"}.phpdebugbar-fa-genderless:before{content:"\f22d"}.phpdebugbar-fa-facebook-official:before{content:"\f230"}.phpdebugbar-fa-pinterest-p:before{content:"\f231"}.phpdebugbar-fa-whatsapp:before{content:"\f232"}.phpdebugbar-fa-server:before{content:"\f233"}.phpdebugbar-fa-user-plus:before{content:"\f234"}.phpdebugbar-fa-user-times:before{content:"\f235"}.phpdebugbar-fa-hotel:before,.phpdebugbar-fa-bed:before{content:"\f236"}.phpdebugbar-fa-viacoin:before{content:"\f237"}.phpdebugbar-fa-train:before{content:"\f238"}.phpdebugbar-fa-subway:before{content:"\f239"}.phpdebugbar-fa-medium:before{content:"\f23a"}.phpdebugbar-fa-yc:before,.phpdebugbar-fa-y-combinator:before{content:"\f23b"}.phpdebugbar-fa-optin-monster:before{content:"\f23c"}.phpdebugbar-fa-opencart:before{content:"\f23d"}.phpdebugbar-fa-expeditedssl:before{content:"\f23e"}.phpdebugbar-fa-battery-4:before,.phpdebugbar-fa-battery:before,.phpdebugbar-fa-battery-full:before{content:"\f240"}.phpdebugbar-fa-battery-3:before,.phpdebugbar-fa-battery-three-quarters:before{content:"\f241"}.phpdebugbar-fa-battery-2:before,.phpdebugbar-fa-battery-half:before{content:"\f242"}.phpdebugbar-fa-battery-1:before,.phpdebugbar-fa-battery-quarter:before{content:"\f243"}.phpdebugbar-fa-battery-0:before,.phpdebugbar-fa-battery-empty:before{content:"\f244"}.phpdebugbar-fa-mouse-pointer:before{content:"\f245"}.phpdebugbar-fa-i-cursor:before{content:"\f246"}.phpdebugbar-fa-object-group:before{content:"\f247"}.phpdebugbar-fa-object-ungroup:before{content:"\f248"}.phpdebugbar-fa-sticky-note:before{content:"\f249"}.phpdebugbar-fa-sticky-note-o:before{content:"\f24a"}.phpdebugbar-fa-cc-jcb:before{content:"\f24b"}.phpdebugbar-fa-cc-diners-club:before{content:"\f24c"}.phpdebugbar-fa-clone:before{content:"\f24d"}.phpdebugbar-fa-balance-scale:before{content:"\f24e"}.phpdebugbar-fa-hourglass-o:before{content:"\f250"}.phpdebugbar-fa-hourglass-1:before,.phpdebugbar-fa-hourglass-start:before{content:"\f251"}.phpdebugbar-fa-hourglass-2:before,.phpdebugbar-fa-hourglass-half:before{content:"\f252"}.phpdebugbar-fa-hourglass-3:before,.phpdebugbar-fa-hourglass-end:before{content:"\f253"}.phpdebugbar-fa-hourglass:before{content:"\f254"}.phpdebugbar-fa-hand-grab-o:before,.phpdebugbar-fa-hand-rock-o:before{content:"\f255"}.phpdebugbar-fa-hand-stop-o:before,.phpdebugbar-fa-hand-paper-o:before{content:"\f256"}.phpdebugbar-fa-hand-scissors-o:before{content:"\f257"}.phpdebugbar-fa-hand-lizard-o:before{content:"\f258"}.phpdebugbar-fa-hand-spock-o:before{content:"\f259"}.phpdebugbar-fa-hand-pointer-o:before{content:"\f25a"}.phpdebugbar-fa-hand-peace-o:before{content:"\f25b"}.phpdebugbar-fa-trademark:before{content:"\f25c"}.phpdebugbar-fa-registered:before{content:"\f25d"}.phpdebugbar-fa-creative-commons:before{content:"\f25e"}.phpdebugbar-fa-gg:before{content:"\f260"}.phpdebugbar-fa-gg-circle:before{content:"\f261"}.phpdebugbar-fa-tripadvisor:before{content:"\f262"}.phpdebugbar-fa-odnoklassniki:before{content:"\f263"}.phpdebugbar-fa-odnoklassniki-square:before{content:"\f264"}.phpdebugbar-fa-get-pocket:before{content:"\f265"}.phpdebugbar-fa-wikipedia-w:before{content:"\f266"}.phpdebugbar-fa-safari:before{content:"\f267"}.phpdebugbar-fa-chrome:before{content:"\f268"}.phpdebugbar-fa-firefox:before{content:"\f269"}.phpdebugbar-fa-opera:before{content:"\f26a"}.phpdebugbar-fa-internet-explorer:before{content:"\f26b"}.phpdebugbar-fa-tv:before,.phpdebugbar-fa-television:before{content:"\f26c"}.phpdebugbar-fa-contao:before{content:"\f26d"}.phpdebugbar-fa-500px:before{content:"\f26e"}.phpdebugbar-fa-amazon:before{content:"\f270"}.phpdebugbar-fa-calendar-plus-o:before{content:"\f271"}.phpdebugbar-fa-calendar-minus-o:before{content:"\f272"}.phpdebugbar-fa-calendar-times-o:before{content:"\f273"}.phpdebugbar-fa-calendar-check-o:before{content:"\f274"}.phpdebugbar-fa-industry:before{content:"\f275"}.phpdebugbar-fa-map-pin:before{content:"\f276"}.phpdebugbar-fa-map-signs:before{content:"\f277"}.phpdebugbar-fa-map-o:before{content:"\f278"}.phpdebugbar-fa-map:before{content:"\f279"}.phpdebugbar-fa-commenting:before{content:"\f27a"}.phpdebugbar-fa-commenting-o:before{content:"\f27b"}.phpdebugbar-fa-houzz:before{content:"\f27c"}.phpdebugbar-fa-vimeo:before{content:"\f27d"}.phpdebugbar-fa-black-tie:before{content:"\f27e"}.phpdebugbar-fa-fonticons:before{content:"\f280"}.phpdebugbar-fa-reddit-alien:before{content:"\f281"}.phpdebugbar-fa-edge:before{content:"\f282"}.phpdebugbar-fa-credit-card-alt:before{content:"\f283"}.phpdebugbar-fa-codiepie:before{content:"\f284"}.phpdebugbar-fa-modx:before{content:"\f285"}.phpdebugbar-fa-fort-awesome:before{content:"\f286"}.phpdebugbar-fa-usb:before{content:"\f287"}.phpdebugbar-fa-product-hunt:before{content:"\f288"}.phpdebugbar-fa-mixcloud:before{content:"\f289"}.phpdebugbar-fa-scribd:before{content:"\f28a"}.phpdebugbar-fa-pause-circle:before{content:"\f28b"}.phpdebugbar-fa-pause-circle-o:before{content:"\f28c"}.phpdebugbar-fa-stop-circle:before{content:"\f28d"}.phpdebugbar-fa-stop-circle-o:before{content:"\f28e"}.phpdebugbar-fa-shopping-bag:before{content:"\f290"}.phpdebugbar-fa-shopping-basket:before{content:"\f291"}.phpdebugbar-fa-hashtag:before{content:"\f292"}.phpdebugbar-fa-bluetooth:before{content:"\f293"}.phpdebugbar-fa-bluetooth-b:before{content:"\f294"}.phpdebugbar-fa-percent:before{content:"\f295"}.phpdebugbar-fa-gitlab:before{content:"\f296"}.phpdebugbar-fa-wpbeginner:before{content:"\f297"}.phpdebugbar-fa-wpforms:before{content:"\f298"}.phpdebugbar-fa-envira:before{content:"\f299"}.phpdebugbar-fa-universal-access:before{content:"\f29a"}.phpdebugbar-fa-wheelchair-alt:before{content:"\f29b"}.phpdebugbar-fa-question-circle-o:before{content:"\f29c"}.phpdebugbar-fa-blind:before{content:"\f29d"}.phpdebugbar-fa-audio-description:before{content:"\f29e"}.phpdebugbar-fa-volume-control-phone:before{content:"\f2a0"}.phpdebugbar-fa-braille:before{content:"\f2a1"}.phpdebugbar-fa-assistive-listening-systems:before{content:"\f2a2"}.phpdebugbar-fa-asl-interpreting:before,.phpdebugbar-fa-american-sign-language-interpreting:before{content:"\f2a3"}.phpdebugbar-fa-deafness:before,.phpdebugbar-fa-hard-of-hearing:before,.phpdebugbar-fa-deaf:before{content:"\f2a4"}.phpdebugbar-fa-glide:before{content:"\f2a5"}.phpdebugbar-fa-glide-g:before{content:"\f2a6"}.phpdebugbar-fa-signing:before,.phpdebugbar-fa-sign-language:before{content:"\f2a7"}.phpdebugbar-fa-low-vision:before{content:"\f2a8"}.phpdebugbar-fa-viadeo:before{content:"\f2a9"}.phpdebugbar-fa-viadeo-square:before{content:"\f2aa"}.phpdebugbar-fa-snapchat:before{content:"\f2ab"}.phpdebugbar-fa-snapchat-ghost:before{content:"\f2ac"}.phpdebugbar-fa-snapchat-square:before{content:"\f2ad"}.phpdebugbar-fa-pied-piper:before{content:"\f2ae"}.phpdebugbar-fa-first-order:before{content:"\f2b0"}.phpdebugbar-fa-yoast:before{content:"\f2b1"}.phpdebugbar-fa-themeisle:before{content:"\f2b2"}.phpdebugbar-fa-google-plus-circle:before,.phpdebugbar-fa-google-plus-official:before{content:"\f2b3"}.phpdebugbar-fa-fa:before,.phpdebugbar-fa-font-awesome:before{content:"\f2b4"}.phpdebugbar-fa-handshake-o:before{content:"\f2b5"}.phpdebugbar-fa-envelope-open:before{content:"\f2b6"}.phpdebugbar-fa-envelope-open-o:before{content:"\f2b7"}.phpdebugbar-fa-linode:before{content:"\f2b8"}.phpdebugbar-fa-address-book:before{content:"\f2b9"}.phpdebugbar-fa-address-book-o:before{content:"\f2ba"}.phpdebugbar-fa-vcard:before,.phpdebugbar-fa-address-card:before{content:"\f2bb"}.phpdebugbar-fa-vcard-o:before,.phpdebugbar-fa-address-card-o:before{content:"\f2bc"}.phpdebugbar-fa-user-circle:before{content:"\f2bd"}.phpdebugbar-fa-user-circle-o:before{content:"\f2be"}.phpdebugbar-fa-user-o:before{content:"\f2c0"}.phpdebugbar-fa-id-badge:before{content:"\f2c1"}.phpdebugbar-fa-drivers-license:before,.phpdebugbar-fa-id-card:before{content:"\f2c2"}.phpdebugbar-fa-drivers-license-o:before,.phpdebugbar-fa-id-card-o:before{content:"\f2c3"}.phpdebugbar-fa-quora:before{content:"\f2c4"}.phpdebugbar-fa-free-code-camp:before{content:"\f2c5"}.phpdebugbar-fa-telegram:before{content:"\f2c6"}.phpdebugbar-fa-thermometer-4:before,.phpdebugbar-fa-thermometer:before,.phpdebugbar-fa-thermometer-full:before{content:"\f2c7"}.phpdebugbar-fa-thermometer-3:before,.phpdebugbar-fa-thermometer-three-quarters:before{content:"\f2c8"}.phpdebugbar-fa-thermometer-2:before,.phpdebugbar-fa-thermometer-half:before{content:"\f2c9"}.phpdebugbar-fa-thermometer-1:before,.phpdebugbar-fa-thermometer-quarter:before{content:"\f2ca"}.phpdebugbar-fa-thermometer-0:before,.phpdebugbar-fa-thermometer-empty:before{content:"\f2cb"}.phpdebugbar-fa-shower:before{content:"\f2cc"}.phpdebugbar-fa-bathtub:before,.phpdebugbar-fa-s15:before,.phpdebugbar-fa-bath:before{content:"\f2cd"}.phpdebugbar-fa-podcast:before{content:"\f2ce"}.phpdebugbar-fa-window-maximize:before{content:"\f2d0"}.phpdebugbar-fa-window-minimize:before{content:"\f2d1"}.phpdebugbar-fa-window-restore:before{content:"\f2d2"}.phpdebugbar-fa-times-rectangle:before,.phpdebugbar-fa-window-close:before{content:"\f2d3"}.phpdebugbar-fa-times-rectangle-o:before,.phpdebugbar-fa-window-close-o:before{content:"\f2d4"}.phpdebugbar-fa-bandcamp:before{content:"\f2d5"}.phpdebugbar-fa-grav:before{content:"\f2d6"}.phpdebugbar-fa-etsy:before{content:"\f2d7"}.phpdebugbar-fa-imdb:before{content:"\f2d8"}.phpdebugbar-fa-ravelry:before{content:"\f2d9"}.phpdebugbar-fa-eercast:before{content:"\f2da"}.phpdebugbar-fa-microchip:before{content:"\f2db"}.phpdebugbar-fa-snowflake-o:before{content:"\f2dc"}.phpdebugbar-fa-superpowers:before{content:"\f2dd"}.phpdebugbar-fa-wpexplorer:before{content:"\f2de"}.phpdebugbar-fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} 5 | -------------------------------------------------------------------------------- /assets/vendor/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Treast/kirby-debugbar/851de280fbedcce6cea958186388c14047264995/assets/vendor/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /assets/vendor/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Treast/kirby-debugbar/851de280fbedcce6cea958186388c14047264995/assets/vendor/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /assets/vendor/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Treast/kirby-debugbar/851de280fbedcce6cea958186388c14047264995/assets/vendor/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /assets/vendor/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Treast/kirby-debugbar/851de280fbedcce6cea958186388c14047264995/assets/vendor/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /assets/vendor/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Treast/kirby-debugbar/851de280fbedcce6cea958186388c14047264995/assets/vendor/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /assets/vendor/highlightjs/styles/github.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | github.com style (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | div.phpdebugbar .hljs { 8 | display: block; padding: 0.5em; 9 | color: #333; 10 | background: #f8f8f8 11 | } 12 | 13 | div.phpdebugbar .hljs-comment, 14 | div.phpdebugbar .hljs-template_comment, 15 | div.phpdebugbar .diff .hljs-header, 16 | div.phpdebugbar .hljs-javadoc { 17 | color: #998; 18 | font-style: italic 19 | } 20 | 21 | div.phpdebugbar .hljs-keyword, 22 | div.phpdebugbar .css .rule .hljs-keyword, 23 | div.phpdebugbar .hljs-winutils, 24 | div.phpdebugbar .javascript .hljs-title, 25 | div.phpdebugbar .nginx .hljs-title, 26 | div.phpdebugbar .hljs-subst, 27 | div.phpdebugbar .hljs-request, 28 | div.phpdebugbar .hljs-status { 29 | color: #333; 30 | font-weight: bold 31 | } 32 | 33 | div.phpdebugbar .hljs-number, 34 | div.phpdebugbar .hljs-hexcolor, 35 | div.phpdebugbar .ruby .hljs-constant { 36 | color: #099; 37 | } 38 | 39 | div.phpdebugbar .hljs-string, 40 | div.phpdebugbar .hljs-tag .hljs-value, 41 | div.phpdebugbar .hljs-phpdoc, 42 | div.phpdebugbar .tex .hljs-formula { 43 | color: #d14 44 | } 45 | 46 | div.phpdebugbar .hljs-title, 47 | div.phpdebugbar .hljs-id, 48 | div.phpdebugbar .coffeescript .hljs-params, 49 | div.phpdebugbar .scss .hljs-preprocessor { 50 | color: #900; 51 | font-weight: bold 52 | } 53 | 54 | div.phpdebugbar .javascript .hljs-title, 55 | div.phpdebugbar .lisp .hljs-title, 56 | div.phpdebugbar .clojure .hljs-title, 57 | div.phpdebugbar .hljs-subst { 58 | font-weight: normal 59 | } 60 | 61 | div.phpdebugbar .hljs-class .hljs-title, 62 | div.phpdebugbar .haskell .hljs-type, 63 | div.phpdebugbar .vhdl .hljs-literal, 64 | div.phpdebugbar .tex .hljs-command { 65 | color: #458; 66 | font-weight: bold 67 | } 68 | 69 | div.phpdebugbar .hljs-tag, 70 | div.phpdebugbar .hljs-tag .hljs-title, 71 | div.phpdebugbar .hljs-rules .hljs-property, 72 | div.phpdebugbar .django .hljs-tag .hljs-keyword { 73 | color: #000080; 74 | font-weight: normal 75 | } 76 | 77 | div.phpdebugbar .hljs-attribute, 78 | div.phpdebugbar .hljs-variable, 79 | div.phpdebugbar .lisp .hljs-body { 80 | color: #008080 81 | } 82 | 83 | div.phpdebugbar .hljs-regexp { 84 | color: #009926 85 | } 86 | 87 | div.phpdebugbar .hljs-symbol, 88 | div.phpdebugbar .ruby .hljs-symbol .hljs-string, 89 | div.phpdebugbar .lisp .hljs-keyword, 90 | div.phpdebugbar .tex .hljs-special, 91 | div.phpdebugbar .hljs-prompt { 92 | color: #990073 93 | } 94 | 95 | div.phpdebugbar .hljs-built_in, 96 | div.phpdebugbar .lisp .hljs-title, 97 | div.phpdebugbar .clojure .hljs-built_in { 98 | color: #0086b3 99 | } 100 | 101 | div.phpdebugbar .hljs-preprocessor, 102 | div.phpdebugbar .hljs-pragma, 103 | div.phpdebugbar .hljs-pi, 104 | div.phpdebugbar .hljs-doctype, 105 | div.phpdebugbar .hljs-shebang, 106 | div.phpdebugbar .hljs-cdata { 107 | color: #999; 108 | font-weight: bold 109 | } 110 | 111 | div.phpdebugbar .hljs-deletion { 112 | background: #fdd 113 | } 114 | 115 | div.phpdebugbar .hljs-addition { 116 | background: #dfd 117 | } 118 | 119 | div.phpdebugbar .diff .hljs-change { 120 | background: #0086b3 121 | } 122 | 123 | div.phpdebugbar .hljs-chunk { 124 | color: #aaa 125 | } 126 | -------------------------------------------------------------------------------- /assets/widgets.css: -------------------------------------------------------------------------------- 1 | pre.phpdebugbar-widgets-code-block { 2 | white-space: pre; 3 | word-wrap: normal; 4 | overflow: hidden; 5 | } 6 | pre.phpdebugbar-widgets-code-block code { 7 | display: block; 8 | overflow-x: auto; 9 | overflow-y: hidden; 10 | } 11 | pre.phpdebugbar-widgets-code-block code.phpdebugbar-widgets-numbered-code { 12 | padding: 5px; 13 | } 14 | pre.phpdebugbar-widgets-code-block code span.phpdebugbar-widgets-highlighted-line { 15 | background: #800000; 16 | color: #fff; 17 | display: inline-block; 18 | min-width: 100%; 19 | } 20 | pre.phpdebugbar-widgets-code-block code span.phpdebugbar-widgets-highlighted-line span { 21 | background: none !important; 22 | color: inherit !important; 23 | } 24 | pre.phpdebugbar-widgets-code-block ul { 25 | float: left; 26 | padding: 5px; 27 | background: #cacaca; 28 | border-right: 1px solid #aaa; 29 | text-align: right; 30 | } 31 | 32 | /* -------------------------------------- */ 33 | 34 | ul.phpdebugbar-widgets-list { 35 | margin: 0; 36 | padding: 0; 37 | list-style: none; 38 | font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; 39 | } 40 | ul.phpdebugbar-widgets-list li.phpdebugbar-widgets-list-item { 41 | padding: 3px 6px; 42 | border-bottom: 1px solid #eee; 43 | position: relative; 44 | overflow: hidden; 45 | } 46 | ul.phpdebugbar-widgets-list li.phpdebugbar-widgets-list-item:hover { 47 | background: #fafafa; 48 | } 49 | 50 | /* -------------------------------------- */ 51 | 52 | div.phpdebugbar-widgets-messages { 53 | position: relative; 54 | height: 100%; 55 | } 56 | div.phpdebugbar-widgets-messages ul.phpdebugbar-widgets-list { 57 | padding-bottom: 20px; 58 | } 59 | div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-warning:before { 60 | font-family: PhpDebugbarFontAwesome; 61 | content: "\f071"; 62 | margin-right: 8px; 63 | font-size: 11px; 64 | color: #ecb03d; 65 | } 66 | div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-error { 67 | color: red; 68 | } 69 | div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-error:before { 70 | font-family: PhpDebugbarFontAwesome; 71 | content: "\f057"; 72 | margin-right: 8px; 73 | font-size: 11px; 74 | color: red; 75 | } 76 | div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item pre.sf-dump { 77 | display: inline; 78 | } 79 | div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-collector, 80 | div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-label { 81 | float: right; 82 | font-size: 12px; 83 | padding: 2px 4px; 84 | color: #888; 85 | margin: 0 2px; 86 | text-decoration: none; 87 | text-shadow: none; 88 | background: none; 89 | font-weight: normal; 90 | } 91 | div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-collector { 92 | color: #555; 93 | font-style: italic; 94 | } 95 | div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar { 96 | position: fixed; 97 | bottom: 0; 98 | width: 100%; 99 | background: #fff; 100 | } 101 | div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar input { 102 | border: 0; 103 | margin: 0; 104 | margin-left: 7px; 105 | width: 50%; 106 | box-shadow: none; 107 | } 108 | div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar input:focus { 109 | outline: none; 110 | } 111 | div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter { 112 | float: right; 113 | font-size: 12px; 114 | padding: 2px 4px; 115 | background: #7cacd5; 116 | margin: 0 2px; 117 | border-radius: 4px; 118 | color: #fff; 119 | text-decoration: none; 120 | } 121 | div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter.phpdebugbar-widgets-excluded { 122 | background: #eee; 123 | color: #888; 124 | } 125 | 126 | /* -------------------------------------- */ 127 | 128 | dl.phpdebugbar-widgets-kvlist { 129 | margin: 0; 130 | } 131 | dl.phpdebugbar-widgets-kvlist dt { 132 | float: left; 133 | width: 150px; 134 | padding: 5px; 135 | border-top: 1px solid #eee; 136 | font-weight: bold; 137 | clear: both; 138 | overflow: hidden; 139 | text-overflow: ellipsis; 140 | white-space: nowrap; 141 | } 142 | dl.phpdebugbar-widgets-kvlist dd { 143 | margin-left: 160px; 144 | padding: 5px; 145 | border-top: 1px solid #eee; 146 | cursor: pointer; 147 | min-height: 17px; 148 | } 149 | 150 | /* -------------------------------------- */ 151 | 152 | dl.phpdebugbar-widgets-varlist, 153 | dl.phpdebugbar-widgets-htmlvarlist { 154 | font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; 155 | } 156 | dl.phpdebugbar-widgets-htmlvarlist dd { 157 | cursor: initial; 158 | } 159 | 160 | /* -------------------------------------- */ 161 | 162 | ul.phpdebugbar-widgets-timeline { 163 | margin: 0; 164 | padding: 0; 165 | list-style: none; 166 | } 167 | ul.phpdebugbar-widgets-timeline .phpdebugbar-widgets-measure { 168 | height: 20px; 169 | position: relative; 170 | border-bottom: 1px solid #eee; 171 | display: block; 172 | } 173 | ul.phpdebugbar-widgets-timeline li:hover { 174 | background: #fafafa; 175 | } 176 | ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-label, 177 | ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-collector { 178 | position: absolute; 179 | font-size: 12px; 180 | font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; 181 | color: #555; 182 | top: 4px; 183 | left: 5px; 184 | background: none; 185 | text-shadow: none; 186 | font-weight: normal; 187 | white-space: pre; 188 | } 189 | ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-collector { 190 | left: initial; 191 | right: 5px; 192 | } 193 | ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-value { 194 | display: block; 195 | position: absolute; 196 | height: 10px; 197 | background: #3db9ec; 198 | top: 5px; 199 | border-radius: 2px; 200 | min-width: 1px; 201 | } 202 | ul.phpdebugbar-widgets-timeline table.phpdebugbar-widgets-params { 203 | display: none; 204 | width: 70%; 205 | margin: 10px; 206 | border: 1px solid #ddd; 207 | font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; 208 | border-collapse: collapse; 209 | } 210 | ul.phpdebugbar-widgets-timeline table.phpdebugbar-widgets-params td { 211 | border: 1px solid #ddd; 212 | padding: 0 5px; 213 | } 214 | ul.phpdebugbar-widgets-timeline table.phpdebugbar-widgets-params .phpdebugbar-widgets-name { 215 | width: 20%; 216 | font-weight: bold; 217 | } 218 | 219 | /* -------------------------------------- */ 220 | 221 | div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item { 222 | cursor: pointer; 223 | } 224 | div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-message { 225 | display: block; 226 | color: red; 227 | } 228 | 229 | div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-filename { 230 | display: block; 231 | font-style: italic; 232 | color: #555; 233 | } 234 | 235 | div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-type { 236 | display: block; 237 | position: absolute; 238 | right: 4px; 239 | top: 4px; 240 | font-weight: bold; 241 | } 242 | 243 | div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item pre.phpdebugbar-widgets-file { 244 | display: none; 245 | margin: 10px; 246 | padding: 5px; 247 | border: 1px solid #ddd; 248 | font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; 249 | } 250 | 251 | div.phpdebugbar-widgets-exceptions a.phpdebugbar-widgets-editor-link:before { 252 | font-family: PhpDebugbarFontAwesome; 253 | margin-right: 4px; 254 | font-size: 12px; 255 | font-style: normal; 256 | } 257 | 258 | div.phpdebugbar-widgets-exceptions a.phpdebugbar-widgets-editor-link:before { 259 | content: "\f08e"; 260 | margin-left: 4px; 261 | } 262 | -------------------------------------------------------------------------------- /assets/widgets.js: -------------------------------------------------------------------------------- 1 | if (typeof(PhpDebugBar) == 'undefined') { 2 | // namespace 3 | var PhpDebugBar = {}; 4 | PhpDebugBar.$ = jQuery; 5 | } 6 | 7 | (function($) { 8 | 9 | /** 10 | * @namespace 11 | */ 12 | PhpDebugBar.Widgets = {}; 13 | 14 | var csscls = PhpDebugBar.utils.makecsscls('phpdebugbar-widgets-'); 15 | 16 | /** 17 | * Replaces spaces with   and line breaks with
18 | * 19 | * @param {String} text 20 | * @return {String} 21 | */ 22 | var htmlize = PhpDebugBar.Widgets.htmlize = function(text) { 23 | return text.replace(/\n/g, '
').replace(/\s/g, " ") 24 | }; 25 | 26 | /** 27 | * Returns a string representation of value, using JSON.stringify 28 | * if it's an object. 29 | * 30 | * @param {Object} value 31 | * @param {Boolean} prettify Uses htmlize() if true 32 | * @return {String} 33 | */ 34 | var renderValue = PhpDebugBar.Widgets.renderValue = function(value, prettify) { 35 | if (typeof(value) !== 'string') { 36 | if (prettify) { 37 | return htmlize(JSON.stringify(value, undefined, 2)); 38 | } 39 | return JSON.stringify(value); 40 | } 41 | return value; 42 | }; 43 | 44 | /** 45 | * Highlights a block of code 46 | * 47 | * @param {String} code 48 | * @param {String} lang 49 | * @return {String} 50 | */ 51 | var highlight = PhpDebugBar.Widgets.highlight = function(code, lang) { 52 | if (typeof(code) === 'string') { 53 | if (typeof(hljs) === 'undefined') { 54 | return htmlize(code); 55 | } 56 | if (lang) { 57 | return hljs.highlight(lang, code).value; 58 | } 59 | return hljs.highlightAuto(code).value; 60 | } 61 | 62 | if (typeof(hljs) === 'object') { 63 | code.each(function(i, e) { hljs.highlightBlock(e); }); 64 | } 65 | return code; 66 | }; 67 | 68 | /** 69 | * Creates a
 element with a block of code
 70 |      *
 71 |      * @param  {String} code
 72 |      * @param  {String} lang
 73 |      * @param  {Number} [firstLineNumber] If provided, shows line numbers beginning with the given value.
 74 |      * @param  {Number} [highlightedLine] If provided, the given line number will be highlighted.
 75 |      * @return {String}
 76 |      */
 77 |     var createCodeBlock = PhpDebugBar.Widgets.createCodeBlock = function(code, lang, firstLineNumber, highlightedLine) {
 78 |         var pre = $('
').addClass(csscls('code-block'));
 79 |         // Add a newline to prevent  element from vertically collapsing too far if the last
 80 |         // code line was empty: that creates problems with the horizontal scrollbar being
 81 |         // incorrectly positioned - most noticeable when line numbers are shown.
 82 |         var codeElement = $('').text(code + '\n').appendTo(pre);
 83 | 
 84 |         // Add a span with a special class if we are supposed to highlight a line.  highlight.js will
 85 |         // still correctly format code even with existing markup in it.
 86 |         if ($.isNumeric(highlightedLine)) {
 87 |             if ($.isNumeric(firstLineNumber)) {
 88 |                 highlightedLine = highlightedLine - firstLineNumber + 1;
 89 |             }
 90 |             codeElement.html(function (index, html) {
 91 |                 var currentLine = 1;
 92 |                 return html.replace(/^.*$/gm, function(line) {
 93 |                     if (currentLine++ == highlightedLine) {
 94 |                         return '' + line + '';
 95 |                     } else {
 96 |                         return line;
 97 |                     }
 98 |                 });
 99 |             });
100 |         }
101 | 
102 |         // Format the code
103 |         if (lang) {
104 |             pre.addClass("language-" + lang);
105 |         }
106 |         highlight(pre);
107 | 
108 |         // Show line numbers in a list
109 |         if ($.isNumeric(firstLineNumber)) {
110 |             var lineCount = code.split('\n').length;
111 |             var $lineNumbers = $('