Chromium Code Reviews| Index: nacl/debugger/index.html |
| =================================================================== |
| --- nacl/debugger/index.html (revision 8014) |
| +++ nacl/debugger/index.html (working copy) |
| @@ -15,6 +15,11 @@ |
| var skia_module = null; // Global application object. |
| var display_right_panel = null; |
| var display_bottom_row = null; |
| + var overview_text = ""; |
| + var details_text = "Default details text."; |
| + var command_list = []; |
| + var command_types = {}; |
| + var no_filter_text = "--Filter By Available Commands--"; |
| function openFileDialog() { |
| var event = document.createEvent("MouseEvents"); |
| @@ -22,16 +27,81 @@ |
| document.getElementById("file_open").dispatchEvent(event); |
| } |
| + function updateOverviewDetails() { |
| + var radio_buttons = document.getElementsByName("overviewdetails_radio"); |
| + for (var i = 0; i < radio_buttons.length; ++i) { |
| + if (radio_buttons[i].checked) { |
| + if (radio_buttons[i].value == "details") { |
| + document.getElementById("overviewdetails").innerHTML = details_text; |
| + } else { |
| + document.getElementById("overviewdetails").innerHTML = overview_text; |
| + } |
| + return; |
| + } |
| + } |
| + // If no radio button is checked, check the "overview" button. |
| + for (var i = 0; i < radio_buttons.length; ++i) { |
| + if (radio_buttons[i].value == "overview") { |
| + radio_buttons[i].checked = true; |
| + document.getElementById("overviewdetails").innerHTML = overview_text; |
| + return; |
| + } |
| + } |
| + } |
| + |
| + function makeIndentString(indent_amt) { |
| + var indent_str = ""; |
| + for (var i = 0; i < indent_amt; ++i) { |
| + indent_str += "--"; |
| + } |
| + return indent_str; |
| + } |
| + |
| + function updateCommandList(filter) { |
| + var command_list_display = document.getElementById("command_list"); |
| + command_list_display.options.length = 0; |
| + var indent = 0; |
| + var indent_str = ""; |
| + for (var i = 0; i < command_list.length; ++i) { |
| + if (command_list[i] == "Restore") { |
| + indent--; |
| + indent_str = makeIndentString(indent); |
| + } |
| + if (!filter || filter == no_filter_text || command_list[i] == filter) { |
| + command_list_display.options.add(new Option(indent_str + command_list[i], i)); |
| + } |
| + if (command_list[i] == "Save" || command_list[i] == "Save Layer") { |
| + indent++; |
| + indent_str = makeIndentString(indent); |
| + } |
| + } |
| + command_list_display.selectedIndex = command_list_display.length - 1; |
| + |
| + // TODO(borenet): Should the SKP re-draw when the command list is updated? |
| + //commandSelected(); |
| + } |
| + |
| + function updateFilterList() { |
| + var filter_list_display = document.getElementById("command_filter"); |
| + filter_list_display.options.length = 0; |
| + filter_list_display.options.add(new Option(no_filter_text, no_filter_text)); |
| + for (var command_type in command_types) { |
| + if (command_types.hasOwnProperty(command_type)) { |
| + filter_list_display.options.add(new Option(command_type, command_type)); |
| + } |
| + } |
| + } |
| + |
| function openFile(event) { |
| + document.getElementById("overviewdetails").innerHTML = ""; |
| var files = event.target.files; |
| if (files.length != 1) { |
| - alert("Please select one SKP file."); |
| + return; |
| } |
| var file = files[0]; |
| var reader = new FileReader(); |
| reader.onload = (function(theFile) { |
| return function(e) { |
| - //alert(e.target.result); |
| var data_prefix = "data:;base64,"; |
| skia_module.postMessage("LoadSKP" + e.target.result.slice(data_prefix.length)); |
| }; |
| @@ -57,6 +127,8 @@ |
| var bottom_row = document.getElementById("bottom_row"); |
| display_right_panel = right_panel.style.display; |
| display_bottom_row = bottom_row.style.display; |
| + updateOverviewDetails(); |
| + updateFilterList(); |
| } |
| // When the module loads, begin running the application. |
| @@ -67,32 +139,39 @@ |
| function handleMessage(message_event) { |
| var cmd_skdebugf = "SkDebugf:"; |
| - var cmd_clearcommands = "ClearCommands"; |
| - var cmd_addcommand = "AddCommand:"; |
| + var cmd_clear_commands = "ClearCommands"; |
| + var cmd_add_command = "AddCommand:"; |
| + var cmd_update_commands = "UpdateCommands"; |
| + var cmd_set_overview = "SetOverview:"; |
| + var cmd_add_filter_option = "AddFilterOption"; |
| if (message_event.data.indexOf(cmd_skdebugf) == 0) { |
|
borenet
2013/03/07 21:38:08
This if/else chain should be modified to call othe
|
| var msg_contents = message_event.data.slice(cmd_skdebugf.length) |
| console.log("Skia: " + msg_contents); |
| - } else if (message_event.data.indexOf(cmd_clearcommands) == 0) { |
| - document.getElementById("command_list").options.length = 0; |
| - } else if (message_event.data.indexOf(cmd_addcommand) == 0) { |
| - var command_list = document.getElementById("command_list"); |
| - var command = message_event.data.slice(cmd_addcommand.length); |
| - var index = command_list.options.length |
| - command_list.options[index] = new Option(command, index); |
| - command_list.selectedIndex = command_list.length - 1; |
| + } else if (message_event.data.indexOf(cmd_clear_commands) == 0) { |
| + command_list = []; |
| + command_types = {}; |
| + updateCommandList(); |
| + updateFilterList(); |
| + } else if (message_event.data.indexOf(cmd_add_command) == 0) { |
| + var command = message_event.data.slice(cmd_add_command.length); |
| + command_list.push(command); |
| + if (command_types[command] == undefined) { |
| + command_types[command] = 1; |
| + } else { |
| + command_types[command]++; |
| + } |
| + } else if (message_event.data.indexOf(cmd_update_commands) == 0) { |
| + updateCommandList(); |
| + updateFilterList(); |
| + } else if (message_event.data.indexOf(cmd_set_overview) == 0) { |
| + overview_text = message_event.data.slice(cmd_set_overview.length); |
| + document.getElementById("overview_radio").checked = true; |
| + updateOverviewDetails(); |
| } else { |
| alert(message_event.data); |
| } |
| } |
| - function commandSelected() { |
| - var command_list = document.getElementById("command_list"); |
| - var selected_index = command_list.options[command_list.selectedIndex].value; |
| - if (selected_index >= 0) { |
| - sendMsg("CommandSelected:" + selected_index); |
| - } |
| - } |
| - |
| // Send a message to the plugin. |
| function sendMsg(msg) { |
| if (skia_module) { |
| @@ -103,6 +182,14 @@ |
| } |
| } |
| + function commandSelected() { |
| + var command_list = document.getElementById("command_list"); |
| + var selected_index = command_list.options[command_list.selectedIndex].value; |
| + if (selected_index >= 0) { |
| + sendMsg("CommandSelected:" + selected_index); |
| + } |
| + } |
| + |
| function rewind() { |
| command_list.selectedIndex = 0; |
| sendMsg("Rewind"); |
| @@ -194,10 +281,8 @@ |
| <button><img src="icons/profile.png"/><br/>Profile</button> |
| </div> |
| <div class="column" style="text-align:right; vertical-align:middle;"> |
| - <select> |
| - <option selected>--Filter By Available Commands--</option> |
| - </select> |
| - <button><img src="icons/reload.png"/><br/>Clear Filter</button> |
| + <select id="command_filter" onChange="javascript:updateCommandList(this.options[this.selectedIndex].value)"></select> |
| + <button onClick="javascript:updateCommandList()"><img src="icons/reload.png" /><br/>Clear Filter</button> |
| </div> |
| </div> |
| </div> |
| @@ -333,12 +418,12 @@ |
| <div class="row-set"> |
| <div class="row" style="height:5px; overflow:auto;"> |
| <form id="overviewdetails_form"> |
| - <input type="radio" name="overviewdetails_radio" value="overview" checked>Overview |
| - <input type="radio" name="overviewdetails_radio" value="details">Details |
| + <input type="radio" name="overviewdetails_radio" onChange="javascript:updateOverviewDetails()" id="overview_radio" value="overview" checked>Overview |
| + <input type="radio" name="overviewdetails_radio" onChange="javascript:updateOverviewDetails()" id="details_radio" value="details">Details |
| </form> |
| </div> |
| <div class="row"> |
| - <textarea readonly id="overviewdetails"></textarea> |
| + <div id="overviewdetails"></div> |
| </div> |
| </div> |
| </div> |