fa43a3b884ef21f6335948e61949d299c5270b88

Author: chawbacca

Date: 2009-11-26 13:28:20 -0600

Merge from debug_kit.git

diff --git a/controllers/components/toolbar.php b/controllers/components/toolbar.php index d3c390d..eabd77b 100644 --- a/controllers/components/toolbar.php +++ b/controllers/components/toolbar.php @@ -18,7 +18,10 @@ * @license MIT License (http://www.opensource.org/licenses/mit-license.php) **/ class ToolbarComponent extends Object { +<<<<<<< HEAD:controllers/components/toolbar.php +======= +>>>>>>> d01f37f924e158b1f84c50dccff651cfa180b674:controllers/components/toolbar.php /** * Settings for the Component * @@ -32,7 +35,10 @@ class ToolbarComponent extends Object { 'forceEnable' => false, 'autoRun' => true ); +<<<<<<< HEAD:controllers/components/toolbar.php +======= +>>>>>>> d01f37f924e158b1f84c50dccff651cfa180b674:controllers/components/toolbar.php /** * Controller instance reference * @@ -105,8 +111,16 @@ class ToolbarComponent extends Object { $this->enabled = false; return false; } + if ($this->settings['autoRun'] == false && !isset($controller->params['url']['debug'])) { + $this->enabled = false; + return false; + } App::import('Vendor', 'DebugKit.DebugKitDebugger'); +<<<<<<< HEAD:controllers/components/toolbar.php +======= + +>>>>>>> d01f37f924e158b1f84c50dccff651cfa180b674:controllers/components/toolbar.php DebugKitDebugger::setMemoryPoint(__d('debug_kit', 'Component intitailization', true)); DebugKitDebugger::startTimer('componentInit', __d('debug_kit', 'Component initialization and startup', true)); @@ -748,16 +762,34 @@ class LogPanel extends DebugPanel { * @return array */ function _parseFile($filename) { - $file =& new File($filename); - $contents = $file->read(); - $timePattern = '/(\d{4}-\d{2}\-\d{2}\s\d{1,2}\:\d{1,2}\:\d{1,2})/'; - $chunks = preg_split($timePattern, $contents, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); - for ($i = 0, $len = count($chunks); $i < $len; $i += 2) { - if (strtotime($chunks[$i]) < $this->startTime) { - unset($chunks[$i], $chunks[$i + 1]); + $fh = fopen($filename, 'r'); + $timePattern = '/^(\d{4}-\d{2}\-\d{2}\s\d{1,2}\:\d{1,2}\:\d{1,2})\s(.*)/'; + + $out = array(); + $entry = ''; + $done = false; + + while (!feof($fh)) { + $line = fgets($fh); + if (preg_match($timePattern, $line, $matches)) { + if (strtotime($matches[1]) < $this->startTime) { + continue; + } + $out[] = $matches[1]; + $out[] = $matches[2]; + } elseif (count($out) - 1 > 0) { + $currentIndex = count($out) - 1; + while (!feof($fh)) { + $line = fgets($fh); + if (preg_match($timePattern, $line)) { + break; + } + $out[$currentIndex] .= $line; + } } } - return array_values($chunks); + fclose($fh); + return $out; } } ?> \ No newline at end of file diff --git a/tests/cases/controllers/components/toolbar.test.php b/tests/cases/controllers/components/toolbar.test.php index c533a1f..016f95f 100644 --- a/tests/cases/controllers/components/toolbar.test.php +++ b/tests/cases/controllers/components/toolbar.test.php @@ -419,7 +419,7 @@ class DebugToolbarTestCase extends CakeTestCase { * @return void **/ function testLogPanel() { - usleep(20); + sleep(1); $this->Controller->log('This is a log I made this request'); $this->Controller->log('This is the second log I made this request'); $this->Controller->log('This time in the debug log!', LOG_DEBUG); @@ -442,6 +442,23 @@ class DebugToolbarTestCase extends CakeTestCase { $this->assertEqual(trim($result['content']['debug.log'][1]), 'Debug: This time in the debug log!'); $this->assertEqual(trim($result['content']['error.log'][1]), 'Error: This is a log I made this request'); + + $data = array( + 'Post' => array( + 'id' => 1, + 'title' => 'post!', + 'body' => 'some text here', + 'created' => '2009-11-07 23:23:23' + ), + 'Comment' => array( + 'id' => 23 + ) + ); + $this->Controller->log($data); + $this->Controller->Component->beforeRender($this->Controller); + $result = $this->Controller->viewVars['debugToolbarPanels']['log']; + $this->assertPattern('/\[created\] => 2009-11-07 23:23:23/', $result['content']['error.log'][5]); + $this->assertPattern('/\[Comment\] => Array/', $result['content']['error.log'][5]); } /** * Test that history state urls set prefix = null and admin = null so generated urls do not diff --git a/tests/cases/vendors/debug_kit_debugger.test.php b/tests/cases/vendors/debug_kit_debugger.test.php index 59b4354..5cf3a37 100644 --- a/tests/cases/vendors/debug_kit_debugger.test.php +++ b/tests/cases/vendors/debug_kit_debugger.test.php @@ -58,6 +58,16 @@ class DebugKitDebuggerTest extends CakeTestCase { } /** + * tearDown method + * + * @access public + * @return void + */ + function tearDown() { + Configure::write('log', true); + DebugKitDebugger::clearTimers(); + } +/** * Start Timer test * * @return void diff --git a/tests/fixtures/empty b/tests/fixtures/empty deleted file mode 100644 index e69de29..0000000 diff --git a/tests/groups/empty b/tests/groups/empty deleted file mode 100644 index e69de29..0000000 diff --git a/vendors/css/debug_toolbar.css b/vendors/css/debug_toolbar.css index 15a2e54..6cd2f91 100644 --- a/vendors/css/debug_toolbar.css +++ b/vendors/css/debug_toolbar.css @@ -96,12 +96,18 @@ #debug-kit-toolbar .panel-resize-region { overflow:auto; <<<<<<< HEAD:vendors/css/debug_toolbar.css +<<<<<<< HEAD:vendors/css/debug_toolbar.css box-shadow:0px 5px 6px #ccc; ======= height:99%; max-height: 550px; padding:15px; >>>>>>> 77265eee69c3c64e27be0f696258bf6616dcb6c4:vendors/css/debug_toolbar.css +======= + height:99%; + max-height: 550px; + padding:15px; +>>>>>>> d01f37f924e158b1f84c50dccff651cfa180b674:vendors/css/debug_toolbar.css } #debug-kit-toolbar .panel-resize-handle { @@ -117,9 +123,13 @@ -webkit-text-shadow:1px 1px #eee; -moz-text-shadow:1px 1px #eee; <<<<<<< HEAD:vendors/css/debug_toolbar.css +<<<<<<< HEAD:vendors/css/debug_toolbar.css ======= height:14px; >>>>>>> 77265eee69c3c64e27be0f696258bf6616dcb6c4:vendors/css/debug_toolbar.css +======= + height:14px; +>>>>>>> d01f37f924e158b1f84c50dccff651cfa180b674:vendors/css/debug_toolbar.css } /* Hide panel content by default */ diff --git a/vendors/debug_kit_debugger.php b/vendors/debug_kit_debugger.php index 1d5e62f..5ce04b6 100644 --- a/vendors/debug_kit_debugger.php +++ b/vendors/debug_kit_debugger.php @@ -46,6 +46,12 @@ class DebugKitDebugger extends Debugger { var $__memoryPoints = array(); /** + * Internal memory points array + * + * @var array + **/ + var $__memoryPoints = array(); +/** * destruct method * * Allow timer info to be displayed if the code dies or is being debugged before rendering the view @@ -56,7 +62,11 @@ class DebugKitDebugger extends Debugger { */ function __destruct() { $_this =& DebugKitDebugger::getInstance(); +<<<<<<< HEAD:vendors/debug_kit_debugger.php if (Configure::read('debug') < 2 || empty($_this->__benchmarks)) { +======= + if (Configure::read('debug') < 2 || !$_this->__benchmarks) { +>>>>>>> d01f37f924e158b1f84c50dccff651cfa180b674:vendors/debug_kit_debugger.php return; } $timers = array_values(DebugKitDebugger::getTimers()); @@ -350,6 +360,57 @@ class DebugKitDebugger extends Debugger { } /** + * Stores a memory point in the internal tracker. + * Takes a optional message name which can be used to identify the memory point. + * If no message is supplied a debug_backtrace will be done to identifty the memory point. + * If you don't have memory_get_xx methods this will not work. + * + * @param string $message Message to identify this memory point. + * @return boolean + **/ + function setMemoryPoint($message = null) { + $memoryUse = DebugKitDebugger::getMemoryUse(); + if (!$message) { + $named = false; + $trace = debug_backtrace(); + $message = Debugger::trimpath($trace[0]['file']) . ' line ' . $trace[0]['line']; + } + $self =& DebugKitDebugger::getInstance(); + if (isset($self->__memoryPoints[$message])) { + $originalMessage = $message; + $i = 1; + while (isset($self->__memoryPoints[$message])) { + $i++; + $message = $originalMessage . ' #' . $i; + } + } + $self->__memoryPoints[$message] = $memoryUse; + return true; + } +/** + * Get all the stored memory points + * + * @param boolean $clear Whether you want to clear the memory points as well. Defaults to false. + * @return array Array of memory marks stored so far. + **/ + function getMemoryPoints($clear = false) { + $self =& DebugKitDebugger::getInstance(); + $marks = $self->__memoryPoints; + if ($clear) { + $self->__memoryPoints = array(); + } + return $marks; + } +/** + * Clear out any existing memory points + * + * @return void + **/ + function clearMemoryPoints() { + $self =& DebugKitDebugger::getInstance(); + $self->__memoryPoints = array(); + } +/** * Handles object conversion to debug string. * * @param string $var Object to convert diff --git a/vendors/fire_cake.php b/vendors/fire_cake.php index fd97324..d3faaaa 100644 --- a/vendors/fire_cake.php +++ b/vendors/fire_cake.php @@ -363,7 +363,9 @@ class FireCake extends Object { $_this->_sendHeader('X-Wf-Protocol-1', 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2'); $_this->_sendHeader('X-Wf-1-Plugin-1', 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'. $_this->_version); - + if ($type == $_this->_levels['groupStart']) { + $meta['Collapsed'] = 'true'; + } if ($type == $_this->_levels['dump']) { $dump = $_this->jsonEncode($message); $msg = '{"' . $label .'":' . $dump .'}'; diff --git a/vendors/img/cake.icon.png b/vendors/img/cake.icon.png index f56f321..394fa42 100644 Binary files a/vendors/img/cake.icon.png and b/vendors/img/cake.icon.png differ diff --git a/vendors/js/js_debug_toolbar.js b/vendors/js/js_debug_toolbar.js index 81e7faa..f594567 100755 --- a/vendors/js/js_debug_toolbar.js +++ b/vendors/js/js_debug_toolbar.js @@ -54,6 +54,14 @@ DEBUGKIT.loader = function () { DEBUGKIT.module('Util'); DEBUGKIT.Util.Element = { +<<<<<<< HEAD:vendors/js/js_debug_toolbar.js +======= + //test if an element is a name node. + nodeName: function (element, name) { + return element.nodeName && element.nodeName.toLowerCase() == name.toLowerCase(); + }, + +>>>>>>> d01f37f924e158b1f84c50dccff651cfa180b674:vendors/js/js_debug_toolbar.js //return a boolean if the element has the classname hasClass : function (element, className) { if (!element.className) { @@ -389,11 +397,11 @@ DEBUGKIT.toolbar = function () { // Use event delegation to find original target. function _delegateNeatArray (event) { var clickedEl = event.target; - while (clickedEl.nodeName.toUpperCase() !== 'LI') { + while (!Element.nodeName(clickedEl, 'LI')) { clickedEl = clickedEl.parentNode; } var subUl = clickedEl.lastChild; - if (subUl.nodeName.toUpperCase() != 'UL') { + if (!Element.nodeName(subUl, 'ul')) { return; } var hide = Boolean(subUl.style.display === 'block'); @@ -446,7 +454,7 @@ DEBUGKIT.toolbar = function () { // Add a panel to the toolbar addPanel : function (tab) { - if (!tab.nodeName || tab.nodeName.toUpperCase() !== 'LI') { + if (!Element.nodeName(tab, 'li')) { throw ('Toolbar not found, make sure you loaded it.'); } var panel = { @@ -457,12 +465,11 @@ DEBUGKIT.toolbar = function () { active : false }; for (var i in tab.childNodes) { - var element = tab.childNodes[i], - tag = element.nodeName ? element.nodeName.toUpperCase() : false; - if (tag === 'A') { + var element = tab.childNodes[i]; + if (Element.nodeName(element, 'A')) { panel.id = element.hash.replace(/^#/, ''); panel.button = element; - } else if (tag === 'DIV') { + } else if (Element.nodeName(element, 'DIV')) { panel.content = element; } } @@ -504,9 +511,8 @@ DEBUGKIT.toolbar = function () { } for (var i in panel.content.childNodes) { - var element = panel.content.childNodes[i], - tag = element.nodeName ? element.nodeName.toUpperCase() : false; - if (tag === 'DIV' && Element.hasClass(element, 'panel-resize-handle')) { + var element = panel.content.childNodes[i]; + if (Element.nodeName(element, 'DIV') && Element.hasClass(element, 'panel-resize-handle')) { Event.addEvent(element, 'mousedown', function (event) { event.preventDefault(); diff --git a/views/elements/history_panel.ctp b/views/elements/history_panel.ctp index 4f08eb4..712784b 100644 --- a/views/elements/history_panel.ctp +++ b/views/elements/history_panel.ctp @@ -53,23 +53,45 @@ DEBUGKIT.historyPanel = function () { alert('Could not convert JSON response'); return false; } - - for (var i in historyLinks) { + + var i = historyLinks.length; + while (i--) { Element.removeClass(historyLinks[i], 'loading'); } + for (var id in toolbar.panels) { var panel = toolbar.panels[id]; if (panel.content === undefined || responseJson[id] === undefined) { continue; } - var panelDivs = panel.content.childNodes; - for (var i in panelDivs) { + var panelDivs = panel.content.childNodes, + i = panelDivs.length, + regionDiv; + + while (i--) { + var panelRegion = panelDivs[i]; + if (panelRegion.nodeType != 1) { + continue; + } + if ( + Element.nodeName(panelRegion, 'DIV') && + Element.hasClass(panelRegion, 'panel-resize-region') + ) { + regionDiv = panelRegion; + break; + } + } + if (!regionDiv) continue; + + var regionDivs = regionDiv.childNodes, + i = regionDivs.length; + + while (i--) { //toggle history element, hide current request one. - var panelContent = panelDivs[i], - tag = panelContent.nodeName ? panelContent.nodeName.toUpperCase() : false; - if (tag === 'DIV' && Element.hasClass(panelContent, 'panel-content-history')) { + var panelContent = regionDivs[i]; + if (Element.nodeName(panelContent, 'DIV') && Element.hasClass(panelContent, 'panel-history')) { var panelId = panelContent.id.replace('-history', ''); if (responseJson[panelId]) { panelContent.innerHTML = responseJson[panelId]; @@ -82,7 +104,7 @@ DEBUGKIT.historyPanel = function () { toolbar.makeNeatArray(lists); } Element.show(panelContent); - } else if (tag === 'DIV') { + } else if (Element.nodeName(panelContent, 'DIV')) { Element.hide(panelContent); } } @@ -102,13 +124,34 @@ DEBUGKIT.historyPanel = function () { if (panel.content === undefined) { continue; } - var panelDivs = panel.content.childNodes; - for (i in panelDivs) { - panelContent = panelDivs[i]; - tag = panelContent.nodeName ? panelContent.nodeName.toUpperCase() : false; - if (tag === 'DIV' && Element.hasClass(panelContent, 'panel-content-history')) { + + var panelDivs = panel.content.childNodes, + i = panelDivs.length, + regionDiv; + + while (i--) { + var panelRegion = panelDivs[i]; + if (panelRegion.nodeType != 1) { + continue; + } + if ( + Element.nodeName(panelRegion, 'DIV') && + Element.hasClass(panelRegion, 'panel-resize-region') + ) { + regionDiv = panelRegion; + break; + } + } + if (!regionDiv) continue; + + var regionDivs = regionDiv.childNodes, + i = regionDivs.length; + + while (i--) { + panelContent = regionDivs[i]; + if (Element.nodeName(panelContent, 'DIV') && Element.hasClass(panelContent, 'panel-history')) { Element.hide(panelContent); - } else if (tag === 'DIV') { + } else if (Element.nodeName(panelContent, 'DIV')) { Element.show(panelContent); } } diff --git a/views/elements/sql_log_panel.ctp b/views/elements/sql_log_panel.ctp index 032e3fa..b2c0cd8 100644 --- a/views/elements/sql_log_panel.ctp +++ b/views/elements/sql_log_panel.ctp @@ -25,7 +25,7 @@ <h4><?php echo $dbName ?></h4> <?php $headers = array('Nr', 'Query', 'Error', 'Affected', 'Num. rows', 'Took (ms)'); - echo $toolbar->table($queryLog['queries'], $headers, array('title' => 'SQL Log ' . $dbName)); + echo $toolbar->table(h($queryLog['queries']), $headers, array('title' => 'SQL Log ' . $dbName)); if (!empty($queryLog['explains'])): $name = sprintf(__d('debug_kit', 'toggle (%s) query explains for %s', true), count($queryLog['explains']), $dbName); @@ -35,7 +35,7 @@ foreach ($queryLog['explains'] as $explain): echo $toolbar->message(__d('debug_kit', 'Query:', true), $explain['query']); $headers = array_shift($explain['explain']); - echo $toolbar->table($explain['explain'], $headers); + echo $toolbar->table(h($explain['explain']), $headers); endforeach; echo '</div>'; else: @@ -62,12 +62,11 @@ DEBUGKIT.sqlLog = function () { for (var i in buttons) { var button = buttons[i]; if (Element.hasClass(button, 'show-slow')) { - var nextDiv = button.nextSibling; Event.addEvent(button, 'click', function (event) { event.preventDefault(); - Element.toggle(nextDiv); + Element.toggle(this.nextSibling); }); - Element.hide(nextDiv); + Element.hide(button.nextSibling); } }