ソースを参照

Clean up error display a bit more

Nathaniel van Diepen 8 年 前
コミット
c81cec8581
3 ファイル変更96 行追加44 行削除
  1. 21 9
      css/error.css
  2. 19 12
      js/error.js
  3. 56 23
      templates/error.php

+ 21 - 9
css/error.css

@@ -1,26 +1,38 @@
-body>div.error>div{
+div.error{
+	border: solid;
+	border-width: 1px;
+	font-family: monospace;
+	cursor: pointer;
+	margin: 0;
+	padding: 5px;
+}
+div.error>div{
+	margin: 0;
+	padding: 0;
+	border: solid;
+	border-width: 1px;
+}
+div.error>div.collapsable>div{
 	margin: 0;
 	padding: 5px;
 	font-size: 10px;
-	font-family: monospace;
-	cursor: pointer;
 }
-body>div.error>div.odd{
+div.error>div.collapsable>div.odd{
 	background-color: lightgrey;
 }
-body>div.error>div:hover{
+div.error>div.collapsable>div:hover{
 	background-color: lightblue;
 }
-body>div.error>div ul{
+div.error>div ul{
 	margin: 0;
 }
-body>div.error>div>div.collapsed{
+div.collapsed{
 	display: none;
 }
-body>div.error>div>span.collapse-arrow{
+span.collapse-arrow{
 	width: 5px;
 }
-body>div.error>div>span.collapse-arrow:not(.collapsed){
+span.collapse-arrow:not(.collapsed){
 	display: inline-block;
 	transform: rotate(90deg) translateY(-3px);
 }

+ 19 - 12
js/error.js

@@ -1,19 +1,26 @@
 ready(function(){
-	dom.get('body>div.error>div')
-		.on('click',function(){
-			dom.get(this)
-				.get('.collapsable, .collapse-arrow')
-				.each(function(){
-					if(this.classList.indexOf('collapsed') == -1){
-						this.classList.add('collapsed');
-					}else{
-						this.classList.remove('collapsed');
-					}
-				});
-		})
+	var divs = dom.get('div.error,div.error>div.collapsable>div');
+	dom.get('div.error>div.collapsable>div')
 		.each(function(i){
 			if(i%2 == 1){
 				this.classList.add('odd');
 			}
 		});
+	divs.on('click',function(e){
+		var self = this;
+		dom.get(self)
+			.get('div.collapsable, span.collapse-arrow')
+			.each(function(){
+				if(self === this.parentNode){
+					if(this.classList.indexOf('collapsed') == -1){
+						this.classList.add('collapsed');
+					}else{
+						this.classList.remove('collapsed');
+					}
+				}
+			});
+		e.stopPropagation();
+		e.preventDefault();
+		return false;
+	});
 });

+ 56 - 23
templates/error.php

@@ -1,5 +1,23 @@
 <?php
 	global $context;
+	function get_class_name($obj){
+		$name = get_class($obj);
+		if(!$name){
+			if(is_string($obj)){
+				$name = 'String';
+			}elseif(is_numeric($obj)){
+				$name = 'Number';
+			}elseif(is_array($obj)){
+				$name = 'Array';
+			}elseif(is_null($obj)){
+				$name = 'Null';
+			}else{
+				$name = 'Object';
+			}
+
+		}
+		return $name;
+	}
 ?>
 <!doctype html>
 	<head>
@@ -17,32 +35,47 @@
 		<h2>
 			<?=$context->error['message']?>
 		</h2>
+		<div>
+			<strong>
+				File:
+			</strong>
+			<?=$context->error['file']?>:<?=$context->error['line']?>
+		</div>
+		<br/>
 		<div class="error">
-			<?php
-				foreach($context->backtrace as $trace){
-					echo "<div><span class=\"collapse-arrow collapsed\">&#10097;</span>&nbsp;";
-					if(isset($trace['class'])){
-						echo "<span>Function: {$trace['class']}{$trace['type']}{$trace['function']}</span>";
-					}elseif(isset($trace['function'])){
-						echo "<span>Function: {$trace['function']}</span>";
-					}
-					echo "<div class=\"collapsable collapsed\">";
-					if(isset($trace['file'])){
-						echo "<div>Location: {$trace['file']}:{$trace['line']}</div>";
-					}
-					if(isset($trace['args'])){
-						echo "<div>Arguments:<ul>";
-						foreach($trace['args'] as $arg){
-							echo "<li><pre>".json_encode($arg,JSON_PRETTY_PRINT)."</pre></li>";
+			<span class="collapse-arrow collapsed">
+				&#10097;
+			</span>
+			<span>
+				Call Stack
+			</span>
+			<div class="collapsable collapsed">
+				<?php
+					foreach($context->backtrace as $trace){
+						echo "<div><span class=\"collapse-arrow collapsed\">&#10097;</span>&nbsp;";
+						if(isset($trace['class'])){
+							echo "<span>Function: {$trace['class']}{$trace['type']}{$trace['function']}</span>";
+						}elseif(isset($trace['function'])){
+							echo "<span>Function: {$trace['function']}</span>";
 						}
-						echo "</ul></div>";
-					}
-					if(isset($trace['object'])){
-						echo "<div>Object:<pre>".json_encode($trace['object'],JSON_PRETTY_PRINT)."</pre></div>";
+						echo "<div class=\"collapsable collapsed\">";
+						if(isset($trace['file'])){
+							echo "<div>Location: {$trace['file']}:{$trace['line']}</div>";
+						}
+						if(isset($trace['args'])){
+							echo "<div>Arguments:<ul>";
+							foreach($trace['args'] as $arg){
+								echo "<li><pre title=\"".get_class_name($arg)."\">".json_encode($arg,JSON_PRETTY_PRINT)."</pre></li>";
+							}
+							echo "</ul></div>";
+						}
+						if(isset($trace['object'])){
+							echo "<div>Object:<pre title=\"".get_class_name($arg)."\">".json_encode($trace['object'],JSON_PRETTY_PRINT)."</pre></div>";
+						}
+						echo "</div></div>";
 					}
-					echo "</div></div>";
-				}
-			?>
+				?>
+			</div>
 		</div>
 	</body>
 </html>