OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <!-- | 3 <!-- |
4 Copyright 2013 Google Inc. | 4 Copyright 2013 Google Inc. |
5 | 5 |
6 Use of this source code is governed by a BSD-style license that can be | 6 Use of this source code is governed by a BSD-style license that can be |
7 found in the LICENSE file. | 7 found in the LICENSE file. |
8 --> | 8 --> |
9 <head> | 9 <head> |
10 <title>Skia Debugger</title> | 10 <title>Skia Debugger</title> |
11 <link rel="stylesheet" type="text/css" href="debugger.css"/> | 11 <link rel="stylesheet" type="text/css" href="debugger.css"/> |
| 12 <script type="text/javascript"> |
| 13 "use strict"; |
| 14 |
| 15 var skia_module = null; // Global application object. |
| 16 var display_right_panel = null; |
| 17 var display_bottom_row = null; |
| 18 |
| 19 function openFileDialog() { |
| 20 var event = document.createEvent("MouseEvents"); |
| 21 event.initEvent("click", true, false); |
| 22 document.getElementById("file_open").dispatchEvent(event); |
| 23 } |
| 24 |
| 25 function openFile(event) { |
| 26 var files = event.target.files; |
| 27 if (files.length != 1) { |
| 28 alert("Please select one SKP file."); |
| 29 } |
| 30 var file = files[0]; |
| 31 var reader = new FileReader(); |
| 32 reader.onload = (function(theFile) { |
| 33 return function(e) { |
| 34 //alert(e.target.result); |
| 35 var data_prefix = "data:;base64,"; |
| 36 skia_module.postMessage("LoadSKP" + e.target.result.slice(data_prefix.
length)); |
| 37 }; |
| 38 })(file); |
| 39 reader.readAsDataURL(file); |
| 40 } |
| 41 |
| 42 function toggleInspector() { |
| 43 var right_panel = document.getElementById("right_panel"); |
| 44 var bottom_row = document.getElementById("bottom_row"); |
| 45 if (right_panel.style.display == display_right_panel) { |
| 46 right_panel.style.display = "none"; |
| 47 bottom_row.style.display = "none"; |
| 48 } else { |
| 49 right_panel.style.display = display_right_panel; |
| 50 bottom_row.style.display = display_bottom_row; |
| 51 } |
| 52 } |
| 53 |
| 54 function onLoad() { |
| 55 document.getElementById("file_open").addEventListener("change", openFile,
false); |
| 56 var right_panel = document.getElementById("right_panel"); |
| 57 var bottom_row = document.getElementById("bottom_row"); |
| 58 display_right_panel = right_panel.style.display; |
| 59 display_bottom_row = bottom_row.style.display; |
| 60 } |
| 61 |
| 62 // When the module loads, begin running the application. |
| 63 function moduleDidLoad() { |
| 64 skia_module = document.getElementById("skia_nacl"); |
| 65 sendMsg("init"); |
| 66 } |
| 67 |
| 68 function handleMessage(message_event) { |
| 69 var cmd_skdebugf = "SkDebugf:"; |
| 70 var cmd_clearcommands = "ClearCommands"; |
| 71 var cmd_addcommand = "AddCommand:"; |
| 72 if (message_event.data.indexOf(cmd_skdebugf) == 0) { |
| 73 var msg_contents = message_event.data.slice(cmd_skdebugf.length) |
| 74 console.log("Skia: " + msg_contents); |
| 75 } else if (message_event.data.indexOf(cmd_clearcommands) == 0) { |
| 76 document.getElementById("command_list").options.length = 0; |
| 77 } else if (message_event.data.indexOf(cmd_addcommand) == 0) { |
| 78 var command_list = document.getElementById("command_list"); |
| 79 var command = message_event.data.slice(cmd_addcommand.length); |
| 80 var index = command_list.options.length |
| 81 command_list.options[index] = new Option(command, index); |
| 82 command_list.selectedIndex = command_list.length - 1; |
| 83 } else { |
| 84 alert(message_event.data); |
| 85 } |
| 86 } |
| 87 |
| 88 function commandSelected() { |
| 89 var command_list = document.getElementById("command_list"); |
| 90 var selected_index = command_list.options[command_list.selectedIndex].valu
e; |
| 91 if (selected_index >= 0) { |
| 92 sendMsg("CommandSelected:" + selected_index); |
| 93 } |
| 94 } |
| 95 |
| 96 // Send a message to the plugin. |
| 97 function sendMsg(msg) { |
| 98 if (skia_module) { |
| 99 //console.log("Sending msg:" + msg); |
| 100 skia_module.postMessage(msg); |
| 101 } else { |
| 102 alert("The Skia module has not properly loaded..."); |
| 103 } |
| 104 } |
| 105 |
| 106 function rewind() { |
| 107 command_list.selectedIndex = 0; |
| 108 sendMsg("Rewind"); |
| 109 } |
| 110 |
| 111 function stepBack() { |
| 112 if (command_list.selectedIndex > 0) { |
| 113 command_list.selectedIndex = command_list.selectedIndex - 1; |
| 114 } |
| 115 sendMsg("StepBack"); |
| 116 } |
| 117 |
| 118 function pause() { |
| 119 sendMsg("Pause"); |
| 120 } |
| 121 |
| 122 function stepForward() { |
| 123 if (command_list.selectedIndex < command_list.length - 1) { |
| 124 command_list.selectedIndex = command_list.selectedIndex + 1; |
| 125 } |
| 126 sendMsg("StepForward"); |
| 127 } |
| 128 |
| 129 function play() { |
| 130 command_list.selectedIndex = command_list.length - 1; |
| 131 sendMsg("Play"); |
| 132 } |
| 133 </script> |
12 </head> | 134 </head> |
13 <body> | 135 <body onLoad="javascript:onLoad()"> |
14 <div id="content" class="row-set"> | 136 <div id="content" class="row-set"> |
15 <div id="menu" class="row"> | 137 <div id="menu" class="row"> |
16 <ul id="menu-bar" class="dropdown-menu"> | 138 <ul id="menu-bar" class="dropdown-menu"> |
17 <li><a href="#">File</a> | 139 <li><a href="#">File</a> |
18 <ul> | 140 <ul> |
19 <li><a href="#">Open</a></li> | 141 <li><a href="#" onClick="javascript:openFileDialog()">Open</a></li> |
20 <li><a href="#">Save</a></li> | 142 <li><a href="#">Save</a></li> |
21 <li><a href="#">Save As</a></li> | 143 <li><a href="#">Save As</a></li> |
22 <li><a href="#">Exit</a></li> | 144 <li><a href="#">Exit</a></li> |
23 </ul> | 145 </ul> |
24 </li> | 146 </li> |
25 <li><a href="#">Edit</a> | 147 <li><a href="#">Edit</a> |
26 <ul> | 148 <ul> |
27 <li><a href="#">Delete Command</a></li> | 149 <li><a href="#">Delete Command</a></li> |
28 <li><a href="#">Clear Deletes</a></li> | 150 <li><a href="#">Clear Deletes</a></li> |
29 <li><a href="#">Set Breakpoint</a></li> | 151 <li><a href="#">Set Breakpoint</a></li> |
30 <li><a href="#">Clear Breakpoints</a></li> | 152 <li><a href="#">Clear Breakpoints</a></li> |
31 </ul> | 153 </ul> |
32 </li> | 154 </li> |
33 <li><a href="#">View</a> | 155 <li><a href="#">View</a> |
34 <ul> | 156 <ul> |
35 <li><a href="#">Breakpoints</a></li> | 157 <li><a href="#">Breakpoints</a></li> |
36 <li><a href="#">Deleted Commands</a></li> | 158 <li><a href="#">Deleted Commands</a></li> |
37 <li><a href="#">Zoom In</a></li> | 159 <li><a href="#">Zoom In</a></li> |
38 <li><a href="#">Zoom Out</a></li> | 160 <li><a href="#">Zoom Out</a></li> |
39 </ul> | 161 </ul> |
40 </li> | 162 </li> |
41 <li><a href="#">Navigate</a> | 163 <li><a href="#">Navigate</a> |
42 <ul> | 164 <ul> |
43 <li><a href="#">Rewind</a></li> | 165 <li><a href="#" onClick="javascript:rewind()">Rewind</a></li> |
44 <li><a href="#">Step Back</a></li> | 166 <li><a href="#" onClick="javascript:stepBack()">Step Back</a></li> |
45 <li><a href="#">Step Forward</a></li> | 167 <li><a href="#" onClick="javascript:stepForward()">Step Forward</a></l
i> |
46 <li><a href="#">Play</a></li> | 168 <li><a href="#" onClick="javascript:play()">Play</a></li> |
47 <li><a href="#">Pause</a></li> | 169 <li><a href="#" onClick="javascript:pause()">Pause</a></li> |
48 <li><a href="#">Go to Line...</a></li> | 170 <li><a href="#">Go to Line...</a></li> |
49 </ul> | 171 </ul> |
50 </li> | 172 </li> |
51 <li><a href="#">Window</a> | 173 <li><a href="#">Window</a> |
52 <ul> | 174 <ul> |
53 <li><a href="#">Inspector</a></li> | 175 <li><a href="#">Inspector</a></li> |
54 <li><a href="#">Directory</a></li> | 176 <li><a href="#">Directory</a></li> |
55 </ul> | 177 </ul> |
56 </li> | 178 </li> |
57 </ul> | 179 </ul> |
58 </div> | 180 </div> |
59 <div id="buttons" class="row"> | 181 <div id="buttons" class="row"> |
60 <div class="column-set"> | 182 <div class="column-set"> |
61 <div class="column"> | 183 <div class="column"> |
62 <button><img src="icons/rewind.png"/><br/>Rewind</button> | 184 <button onClick="javascript:rewind()"><img src="icons/rewind.png"/><br/>
Rewind</button> |
63 <button><img src="icons/previous.png"/><br/>Step Back</button> | 185 <button onClick="javascript:stepBack()"><img src="icons/previous.png"/><
br/>Step Back</button> |
64 <button><img src="icons/pause.png"/><br/>Pause</button> | 186 <button onClick="javascript:pause()"><img src="icons/pause.png"/><br/>Pa
use</button> |
65 <button><img src="icons/next.png"/><br/>Step Forward</button> | 187 <button onClick="javascript:stepForward()"><img src="icons/next.png"/><b
r/>Step Forward</button> |
66 <button><img src="icons/play.png"/><br/>Play</button> | 188 <button onClick="javascript:play()"><img src="icons/play.png"/><br/>Play
</button> |
67 </div> | 189 </div> |
68 <div class="column"> | 190 <div class="column"> |
69 <button><img src="icons/inspector.png"/><br/>Inspector</button> | 191 <button onClick="javascript:toggleInspector()"><img src="icons/inspector
.png"/><br/>Inspector</button> |
70 </div> | 192 </div> |
71 <div class="column"> | 193 <div class="column"> |
72 <button><img src="icons/profile.png"/><br/>Profile</button> | 194 <button><img src="icons/profile.png"/><br/>Profile</button> |
73 </div> | 195 </div> |
74 <div class="column" style="text-align:right; vertical-align:middle;"> | 196 <div class="column" style="text-align:right; vertical-align:middle;"> |
75 <select> | 197 <select> |
76 <option selected>--Filter By Available Commands--</option> | 198 <option selected>--Filter By Available Commands--</option> |
77 </select> | 199 </select> |
78 <button><img src="icons/reload.png"/><br/>Clear Filter</button> | 200 <button><img src="icons/reload.png"/><br/>Clear Filter</button> |
79 </div> | 201 </div> |
80 </div> | 202 </div> |
81 </div> | 203 </div> |
82 <div class="row"> | 204 <div class="row"> |
83 <div class="column-set"> | 205 <div class="column-set"> |
84 <div id="left_column" class="column"> | 206 <div id="left_column" class="column"> |
85 <div class="row-set"> | 207 <div class="row-set"> |
86 <div id="command_list_div" class="row"> | 208 <div id="command_list_div" class="row"> |
87 <form id="command_list_form"> | 209 <form id="command_list_form"> |
88 <select id="command_list" size="2"> | 210 <select id="command_list" size="2" onChange="javascript:commandSel
ected()"> |
89 <option>Commands go here...</option> | 211 <option value="-1">Commands go here...</option> |
90 </select> | |
91 </form> | |
92 </div> | |
93 <div id="skp_list_div" class="row"> | |
94 <form id="skp_list_form"> | |
95 <select id="skp_list" size="2"> | |
96 <option>List of SKPs here...</option> | |
97 </select> | 212 </select> |
98 </form> | 213 </form> |
99 </div> | 214 </div> |
100 </div> | 215 </div> |
101 </div> | 216 </div> |
102 <div id="right_column" class="row-set"> | 217 <div id="right_column" class="row-set"> |
103 <div id="top_row" class="row"> | 218 <div id="top_row" class="row"> |
104 <div id="display_pane" class="column"> | 219 <div id="display_pane" class="column"> |
105 <embed name="nacl_module" | 220 <div id="listener" style="width:100%; height:100%;"> |
106 id="skia_nacl" | 221 <script type="text/javascript"> |
107 src="debugger.nmf" | 222 var listener = document.getElementById('listener'); |
108 style="width:100%; height:100%;" | 223 listener.addEventListener('load', moduleDidLoad, true); |
109 type="application/x-nacl" /> | 224 listener.addEventListener('message', handleMessage, true); |
| 225 </script> |
| 226 <embed name="nacl_module" |
| 227 id="skia_nacl" |
| 228 src="debugger.nmf" |
| 229 type="application/x-nacl" |
| 230 width="100%" |
| 231 height="100%" |
| 232 style="width:100%, height:100%;"/> |
| 233 </div> |
110 </div> | 234 </div> |
111 <div id="right_panel" class="column"> | 235 <div id="right_panel" class="column"> |
112 <div class="thin_outline"> | 236 <div class="thin_outline"> |
113 <div id="visibility_filter" class="settings_block"> | 237 <div id="visibility_filter" class="settings_block"> |
114 Visibility Filter<br/> | 238 Visibility Filter<br/> |
115 <div class="thin_outline"> | 239 <div class="thin_outline"> |
116 <form id="visibility_filter_form"> | 240 <form id="visibility_filter_form"> |
117 <input type="radio" name="visibility_filter_radio" value="on
">On<br/> | 241 <input type="radio" name="visibility_filter_radio" value="on
">On<br/> |
118 <input type="radio" name="visibility_filter_radio" value="of
f" checked>Off | 242 <input type="radio" name="visibility_filter_radio" value="of
f" checked>Off |
119 </form> | 243 </form> |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 <td><input type="text" id="clip10" class="matrix" /></td> | 371 <td><input type="text" id="clip10" class="matrix" /></td> |
248 <td><input type="text" id="clip11" class="matrix" /></td> | 372 <td><input type="text" id="clip11" class="matrix" /></td> |
249 </tr> | 373 </tr> |
250 </table> | 374 </table> |
251 </div> | 375 </div> |
252 </div> | 376 </div> |
253 </div> | 377 </div> |
254 </div> | 378 </div> |
255 </div> | 379 </div> |
256 </div> | 380 </div> |
257 | 381 <input type="file" id="file_open" style="display:none;"/> |
258 </body> | 382 </body> |
259 </html> | 383 </html> |
OLD | NEW |