|
- <DOCTYPE html>
- <html>
-
- <!--
- Copyright (c) 2012 The Native Client Authors. All rights reserved.
- Use of this source code is governed by a BSD-style license that can be
- found in the LICENSE file.
- -->
-
- <head>
-
- <style type="text/css">
- body
- {
- font:12px Consolas;
- }
- #status_field
- {
- font:12px Consolas;
- }
- button
- {
- font:14px Consolas;
- }
- textarea
- {
- font:14px Consolas;
- }
- progress
- {
- background-color: #f3f3f3;
- border: 0;
- height: 18px;
- width: 200px;
- border-radius: 9px;
- }
- progress::-webkit-progress-bar
- {
- background-color: #f3f3f3;
- border: 1px solid #000000;
- padding: 2px 2px;
- height: 20px;
- border-radius: 0px;
- }
- progress::-webkit-progress-value
- {
- background-color: #22BB22;
- border: 0px;
- height: 14px;
- border-radius: 0px;
- }
- #listener
- {
- position: relative;
- }
- #progress_bar
- {
- position: absolute;
- top: 40%;
- left: 40%;
- z-index: 3;
- }
- #DIV_nacl_div
- {
- position: absolute;
- top: 2px;
- left: 2px;
- z-index: -1;
- }
- #BGCanvas
- {
- border:1px solid #000000;
- }
- #DIV_command0
- {
- margin-left: 5px;
- }
- </style>
-
- <title>Mesh Viewer NaCl</title>
-
- <script src="./TypeDictionnary.js"></script>
- <script type="text/javascript">
- var EasyMeshDict = new TypeDictionnary("EasyMesh");
- function GetCmdDictionnary() { return EasyMeshDict; }
- </script>
- <script src="./EasyMeshDictionnary.js"></script>
-
- <script type="text/javascript">
- nacl_div = null; // Global application object.
- nacl_module = null; // Global application object.
- mesh_code_module = null;
- code_helper_cmd = [null, null];
- code_helper_arg = null;
- code_helper_cmt = null;
- code_helper_var = null;
- code_helper_alpha = null;
-
- status_text = 'NO-STATUS';
- window.setTimeout("Tick()", 100);
- window.setTimeout("Init()", 100);
-
- function Init()
- {
- nacl_div = document.getElementById('DIV_nacl_div');
- mesh_code_module = document.getElementById('DIV_MeshCode');
- code_helper_cmd[0] = document.getElementById('DIV_command0');
- code_helper_cmd[1] = document.getElementById('DIV_command1');
- code_helper_arg = document.getElementById('DIV_args');
- code_helper_cmt = document.getElementById('DIV_comment');
- code_helper_var = document.getElementById('DIV_var_usage');
- code_helper_alpha = document.getElementById('DIV_alphabet');
-
- code_helper_alpha.innerHTML = ' Table of content [';
- for (var a = 'a'.charCodeAt(0); a <= 'z'.charCodeAt(0); a++)
- {
- var stop = false;
- for (var i = 0; !stop && i < EasyMeshDict.m_cmds.length; i++)
- {
- for (var j = 0; j < EasyMeshDict.m_cmds[i].m_name.length; j++)
- {
- if (EasyMeshDict.m_cmds[i].m_name[j][0] == String.fromCharCode(a))
- {
- code_helper_alpha.innerHTML += '<b>' + String.fromCharCode(a) + '</b>';
- stop = true;
- break;
- }
- }
- }
- if (!stop)
- code_helper_alpha.innerHTML += '.';
- }
- code_helper_alpha.innerHTML += '] <br> ';
- }
-
- function Tick()
- {
- window.setTimeout("Tick()", 100);
-
- /* -- cmd lookup code. */
- if (mesh_code_module != undefined)
- {
- var cmd_size = 8;
- var found = FindMatchingCommand(mesh_code_module);
- if (found.match_list.length > 0)
- {
- var type_list = new Array();
- code_helper_cmd[0].innerHTML = "";
- code_helper_cmd[1].innerHTML = "";
- code_helper_arg.innerHTML = "";
- code_helper_cmt.innerHTML = "";
- //Go through the found matches and show them.
- for (var i = 0; i < found.match_list.length; i++)
- {
- var cur_match = EasyMeshDict.m_cmds[found.match_list[i]];
- code_helper_cmd[0].innerHTML += '[';
- var max = cur_match.m_name.length;
- var word = 0;
- for (var j = 0; j < max; j++)
- {
- var mth = found.match;
- var cmd = cur_match.m_name[j];
- //Matching start caracters should be bold
- if (mth == cmd.slice(0, mth.length))
- {
- code_helper_cmd[word].innerHTML += ' ';
- code_helper_cmd[word].innerHTML += '<b>' + mth + '</b>';
- code_helper_cmd[word].innerHTML += cmd.slice(mth.length, cmd.length);
- word++;
- }
- }
- //Complete empty command by <br> so commands in the two columns are on the same line
- word = (word > 0)?(2):(0);
- while (word-- > 0)
- code_helper_cmd[word].innerHTML += "<br>";
- //Go through the arguments and show them
- if (found.match_list.length < 4 && i == 0)
- {
- code_helper_arg.innerHTML += " > ";
- if (cur_match.m_arg != undefined)
- {
- max = cur_match.m_arg.length;
- var found_optional = false;
- for (var j = 0; j < max; j++)
- {
- if (cur_match.m_arg[j].m_optional != undefined && found_optional == false)
- {
- var tab = '<br>'; for (var l = 0; l < 5; l++) tab += ' ';
- code_helper_arg.innerHTML += tab + 'Opt: [';
- found_optional = true;
- }
- else if (j > 0)
- code_helper_arg.innerHTML += ', ';
-
- //Types are bold
- code_helper_arg.innerHTML += '<b>' + cur_match.m_arg[j].m_type + '</b> ';
- type_list[type_list.length] = cur_match.m_arg[j].m_type;
- //Names are not
- code_helper_arg.innerHTML += cur_match.m_arg[j].m_name;
- if (cur_match.m_arg[j].m_optional != undefined)
- code_helper_arg.innerHTML += ' = <b>' + cur_match.m_arg[j].m_optional + '</b>';
- }
- if (found_optional == true)
- code_helper_arg.innerHTML += '] ';
- code_helper_arg.innerHTML += ' <br>';
- }
- //Add the comment
- if (cur_match.m_comment != undefined)
- {
- var tb_i = 16; var in_i = 8;
- var tab = '<br>';
- if (cur_match.m_arg == undefined) { tb_i -= 8; in_i -= 8; }
- for (var l = 0; l < in_i; l++) code_helper_arg.innerHTML += ' ';
- for (var l = 0; l < tb_i; l++) tab += ' ';
- code_helper_arg.innerHTML += cur_match.m_comment + ' ';
- while (code_helper_arg.innerHTML.indexOf('\n') > -1)
- code_helper_arg.innerHTML = code_helper_arg.innerHTML.replace('\n', tab);
- }
- }
- }
- //Go through the type list and bold the used ones.
- if (EasyMeshDict.m_vars != undefined)
- {
- code_helper_var.innerHTML = "";
- var max = EasyMeshDict.m_vars.length;
- for (var j = 0; j < max; j++)
- {
- var cur_var = EasyMeshDict.m_vars[j];
- code_helper_var.innerHTML += " > ";
- var k = 0;
- for (; k < type_list.length; k++)
- if (cur_var.m_type == type_list[k])
- break;
-
- //Bold the used variables
- if (k < type_list.length)
- code_helper_var.innerHTML += "<b>" + cur_var.m_type + "</b>";
- else
- code_helper_var.innerHTML += cur_var.m_type;
-
- if (cur_var.m_syntax != undefined)
- {
- var align_size = 9;
- var cmd_size = cur_var.m_type.length + 3;
- for (var m = 0; m < cur_var.m_syntax.length; m++)
- {
- for (var l = 0; l < align_size - cmd_size; l++)
- code_helper_var.innerHTML += " ";
- code_helper_var.innerHTML += cur_var.m_syntax[m] + "<br>";
- cmd_size = 0;
- }
- }
- }
- }
- }
- else
- {
- code_helper_cmd[0].innerHTML = "[ ... ";
- code_helper_cmd[1].innerHTML = "";
- code_helper_arg.innerHTML = "";
- code_helper_cmt.innerHTML = "";
- }
- }
- /* -- */
- }
-
-
- // Indicate load success.
- function moduleDidLoad() {
- nacl_module = document.getElementById('ID_NaClModule');
- mesh_code_module = document.getElementById('DIV_MeshCode');
- updateStatus('Rock n\' Roll !!');
- var progress_bar = document.getElementById('progress_bar');
- progress_bar.style.visibility = "hidden";
- }
-
- // The 'message' event handler. This handler is fired when the NaCl module
- // posts a message to the browser by calling PPB_Messaging.PostMessage()
- // (in C) or pp::Instance.PostMessage() (in C++). This implementation
- // simply displays the content of the message in an alert panel.
- function handleMessage(message_event) {
- alert(message_event.data);
- }
-
- // If the page loads before the Native Client module loads, then set the
- // status message indicating that the module is still loading. Otherwise,
- // do not change the status message.
- function pageDidLoad() {
- if (nacl_module == null) {
- updateStatus('Please wait, loading ...');
- } else {
- // It's possible that the Native Client module onload event fired
- // before the page's onload event. In this case, the status message
- // will reflect 'SUCCESS', but won't be displayed. This call will
- // display the current message.
- updateStatus();
- }
- }
-
- // Set the global status message. If the element with id 'statusField'
- // exists, then set its HTML to the status message as well.
- // opt_message The message test. If this is null or undefined, then
- // attempt to set the element with id 'statusField' to the value of
- // |status_text|.
- function updateStatus(opt_message) {
- if (opt_message)
- status_text = opt_message;
- var statusField = document.getElementById('status_field');
- if (statusField) {
- statusField.innerHTML = status_text;
- }
- }
-
- function moduleCrash(event)
- {
- alert("Module has crashed !");
- //nacl_module.src = null;
- }
-
- function moduleLoadProgress(event)
- {
- var progressBar = document.getElementById("p");
- var statusField = document.getElementById('status_field');
- if (event.lengthComputable)
- {
- progressBar.max = event.total;
- progressBar.value = event.loaded;
- var load_progress = ((event.loaded / event.total) * 100.0);
- status_field.innerHTML = 'Please wait, loading [' + load_progress.toFixed(0) + '%]';
-
- }
- else
- {
- progressBar.value = -1;
- status_field.innerHTML = 'Computing progress ...'
- }
- }
-
- //Called by the "Send Mesh Command !" button
- function SendMeshData()
- {
- if (nacl_module)
- nacl_module.postMessage(mesh_code_module.value);
- else
- alert("Module not loaded");
- }
- </script>
- </head>
-
- <body onload="pageDidLoad()">
-
- <h1>Mesh Viewer : Native Client version.</h1>
- <p>
- <div id="final_div">
- <div id="listener" align="center" style="width:770px;height:200px">
- <canvas id="BGCanvas" width="772" height="202"></canvas>
- <div id="progress_bar">
- <div id="status_field">NO-STATUS</div>
- <progress id="p" align="left" width="200"></progress>
- </div>
- <div id="DIV_nacl_div">
- <param name="wmode" value="opaque"/>
- <embed name="nacl_module"
- id="ID_NaClModule"
- width=770 height=200
- src="meshviewer_nacl.nmf"
- type="application/x-nacl" />
- </div>
- <script type="text/javascript">
- var listener = document.getElementById('listener');
- listener.addEventListener('load', moduleDidLoad, true);
- listener.addEventListener('progress', moduleLoadProgress, true);
- listener.addEventListener('message', handleMessage, true);
- listener.addEventListener('crash', moduleCrash, true);
- </script>
- </div>
- </div>
- </p>
- <div><button onclick="SendMeshData()">Send Mesh Command !</button></div>
- <table border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
- <div id="bouton">
- <textarea autofocus id="DIV_MeshCode" rows="6" cols="94" style="font: 14px Consolas; resize: none;">//This is a comment
- sc#f8f afcb 1 1 1 0</textarea>
- </div>
- </td>
- <td valign="top" rowspan="3"> </td>
- <td valign="top" rowspan="3">
- <div><b><u>Variable Types usage :</u></b></div>
- <div id="DIV_var_usage"></div>
- </td>
- </tr>
- <tr>
- <td>
- <div id="DIV_alphabet"></div>
- </td>
- </tr>
- <tr>
- <td valign="top">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td valign="top"><div id="DIV_command0"></div></td>
- <td valign="top"><div id="DIV_command1"></div></td>
- <td valign="top"><div id="DIV_args" ></div></td>
- <td valign="top"><div id="DIV_comment" ></div></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-
- </body>
- </html>
|