| Index: nacl/debugger/index.html | 
| =================================================================== | 
| --- nacl/debugger/index.html	(revision 7983) | 
| +++ nacl/debugger/index.html	(working copy) | 
| @@ -9,14 +9,136 @@ | 
| <head> | 
| <title>Skia Debugger</title> | 
| <link rel="stylesheet" type="text/css" href="debugger.css"/> | 
| +  <script type="text/javascript"> | 
| +    "use strict"; | 
| + | 
| +    var skia_module = null;  // Global application object. | 
| +    var display_right_panel = null; | 
| +    var display_bottom_row = null; | 
| + | 
| +    function openFileDialog() { | 
| +      var event = document.createEvent("MouseEvents"); | 
| +      event.initEvent("click", true, false); | 
| +      document.getElementById("file_open").dispatchEvent(event); | 
| +    } | 
| + | 
| +    function openFile(event) { | 
| +      var files = event.target.files; | 
| +      if (files.length != 1) { | 
| +        alert("Please select one SKP file."); | 
| +      } | 
| +      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)); | 
| +        }; | 
| +      })(file); | 
| +      reader.readAsDataURL(file); | 
| +    } | 
| + | 
| +    function toggleInspector() { | 
| +      var right_panel = document.getElementById("right_panel"); | 
| +      var bottom_row = document.getElementById("bottom_row"); | 
| +      if (right_panel.style.display == display_right_panel) { | 
| +        right_panel.style.display = "none"; | 
| +        bottom_row.style.display = "none"; | 
| +      } else { | 
| +        right_panel.style.display = display_right_panel; | 
| +        bottom_row.style.display = display_bottom_row; | 
| +      } | 
| +    } | 
| + | 
| +    function onLoad() { | 
| +      document.getElementById("file_open").addEventListener("change", openFile, false); | 
| +      var right_panel = document.getElementById("right_panel"); | 
| +      var bottom_row = document.getElementById("bottom_row"); | 
| +      display_right_panel = right_panel.style.display; | 
| +      display_bottom_row = bottom_row.style.display; | 
| +    } | 
| + | 
| +    // When the module loads, begin running the application. | 
| +    function moduleDidLoad() { | 
| +      skia_module = document.getElementById("skia_nacl"); | 
| +      sendMsg("init"); | 
| +    } | 
| + | 
| +    function handleMessage(message_event) { | 
| +      var cmd_skdebugf = "SkDebugf:"; | 
| +      var cmd_clearcommands = "ClearCommands"; | 
| +      var cmd_addcommand = "AddCommand:"; | 
| +      if (message_event.data.indexOf(cmd_skdebugf) == 0) { | 
| +        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 { | 
| +        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) { | 
| +        //console.log("Sending msg:" + msg); | 
| +        skia_module.postMessage(msg); | 
| +      } else { | 
| +        alert("The Skia module has not properly loaded..."); | 
| +      } | 
| +    } | 
| + | 
| +    function rewind() { | 
| +      command_list.selectedIndex = 0; | 
| +      sendMsg("Rewind"); | 
| +    } | 
| + | 
| +    function stepBack() { | 
| +      if (command_list.selectedIndex > 0) { | 
| +        command_list.selectedIndex = command_list.selectedIndex - 1; | 
| +      } | 
| +      sendMsg("StepBack"); | 
| +    } | 
| + | 
| +    function pause() { | 
| +      sendMsg("Pause"); | 
| +    } | 
| + | 
| +    function stepForward() { | 
| +      if (command_list.selectedIndex < command_list.length - 1) { | 
| +        command_list.selectedIndex = command_list.selectedIndex + 1; | 
| +      } | 
| +      sendMsg("StepForward"); | 
| +    } | 
| + | 
| +    function play() { | 
| +      command_list.selectedIndex = command_list.length - 1; | 
| +      sendMsg("Play"); | 
| +    } | 
| +  </script> | 
| </head> | 
| -<body> | 
| +<body onLoad="javascript:onLoad()"> | 
| <div id="content" class="row-set"> | 
| <div id="menu" class="row"> | 
| <ul id="menu-bar" class="dropdown-menu"> | 
| <li><a href="#">File</a> | 
| <ul> | 
| -          <li><a href="#">Open</a></li> | 
| +          <li><a href="#" onClick="javascript:openFileDialog()">Open</a></li> | 
| <li><a href="#">Save</a></li> | 
| <li><a href="#">Save As</a></li> | 
| <li><a href="#">Exit</a></li> | 
| @@ -40,11 +162,11 @@ | 
| </li> | 
| <li><a href="#">Navigate</a> | 
| <ul> | 
| -          <li><a href="#">Rewind</a></li> | 
| -          <li><a href="#">Step Back</a></li> | 
| -          <li><a href="#">Step Forward</a></li> | 
| -          <li><a href="#">Play</a></li> | 
| -          <li><a href="#">Pause</a></li> | 
| +          <li><a href="#" onClick="javascript:rewind()">Rewind</a></li> | 
| +          <li><a href="#" onClick="javascript:stepBack()">Step Back</a></li> | 
| +          <li><a href="#" onClick="javascript:stepForward()">Step Forward</a></li> | 
| +          <li><a href="#" onClick="javascript:play()">Play</a></li> | 
| +          <li><a href="#" onClick="javascript:pause()">Pause</a></li> | 
| <li><a href="#">Go to Line...</a></li> | 
| </ul> | 
| </li> | 
| @@ -59,14 +181,14 @@ | 
| <div id="buttons" class="row"> | 
| <div class="column-set"> | 
| <div class="column"> | 
| -        <button><img src="icons/rewind.png"/><br/>Rewind</button> | 
| -        <button><img src="icons/previous.png"/><br/>Step Back</button> | 
| -        <button><img src="icons/pause.png"/><br/>Pause</button> | 
| -        <button><img src="icons/next.png"/><br/>Step Forward</button> | 
| -        <button><img src="icons/play.png"/><br/>Play</button> | 
| +        <button onClick="javascript:rewind()"><img src="icons/rewind.png"/><br/>Rewind</button> | 
| +        <button onClick="javascript:stepBack()"><img src="icons/previous.png"/><br/>Step Back</button> | 
| +        <button onClick="javascript:pause()"><img src="icons/pause.png"/><br/>Pause</button> | 
| +        <button onClick="javascript:stepForward()"><img src="icons/next.png"/><br/>Step Forward</button> | 
| +        <button onClick="javascript:play()"><img src="icons/play.png"/><br/>Play</button> | 
| </div> | 
| <div class="column"> | 
| -        <button><img src="icons/inspector.png"/><br/>Inspector</button> | 
| +        <button onClick="javascript:toggleInspector()"><img src="icons/inspector.png"/><br/>Inspector</button> | 
| </div> | 
| <div class="column"> | 
| <button><img src="icons/profile.png"/><br/>Profile</button> | 
| @@ -85,28 +207,30 @@ | 
| <div class="row-set"> | 
| <div id="command_list_div" class="row"> | 
| <form id="command_list_form"> | 
| -              <select id="command_list" size="2"> | 
| -                <option>Commands go here...</option> | 
| +              <select id="command_list" size="2" onChange="javascript:commandSelected()"> | 
| +                <option value="-1">Commands go here...</option> | 
| </select> | 
| </form> | 
| </div> | 
| -          <div id="skp_list_div" class="row"> | 
| -            <form id="skp_list_form"> | 
| -              <select id="skp_list" size="2"> | 
| -                <option>List of SKPs here...</option> | 
| -              </select> | 
| -            </form> | 
| -          </div> | 
| </div> | 
| </div> | 
| <div id="right_column" class="row-set"> | 
| <div id="top_row" class="row"> | 
| <div id="display_pane" class="column"> | 
| -            <embed name="nacl_module" | 
| -                id="skia_nacl" | 
| -                src="debugger.nmf" | 
| -                style="width:100%; height:100%;" | 
| -                type="application/x-nacl" /> | 
| +            <div id="listener" style="width:100%; height:100%;"> | 
| +              <script type="text/javascript"> | 
| +                var listener = document.getElementById('listener'); | 
| +                listener.addEventListener('load', moduleDidLoad, true); | 
| +                listener.addEventListener('message', handleMessage, true); | 
| +              </script> | 
| +              <embed name="nacl_module" | 
| +                 id="skia_nacl" | 
| +                 src="debugger.nmf" | 
| +                 type="application/x-nacl" | 
| +                 width="100%" | 
| +                 height="100%" | 
| +                 style="width:100%, height:100%;"/> | 
| +            </div> | 
| </div> | 
| <div id="right_panel" class="column"> | 
| <div class="thin_outline"> | 
| @@ -254,6 +378,6 @@ | 
| </div> | 
| </div> | 
| </div> | 
| - | 
| +<input type="file" id="file_open" style="display:none;"/> | 
| </body> | 
| </html> | 
|  |