// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. function moduleDidLoad() { common.hideModule(); } // Called by the common.js module. function domContentLoaded(name, tc, config, width, height) { navigator.webkitPersistentStorage.requestQuota(1024 * 1024, function(bytes) { common.updateStatus( 'Allocated ' + bytes + ' bytes of persistant storage.'); common.attachDefaultListeners(); common.createNaClModule(name, tc, config, width, height); }, function(e) { alert('Failed to allocate space') }); } // Called by the common.js module. function attachListeners() { var radioEls = document.querySelectorAll('input[type="radio"]'); for (var i = 0; i < radioEls.length; ++i) { radioEls[i].addEventListener('click', onRadioClicked); } function addEventListenerToButton(parentId, func) { document.querySelector('#' + parentId + ' button') .addEventListener('click', func); } addEventListenerToButton('saveFile', saveFile); addEventListenerToButton('loadFile', loadFile); addEventListenerToButton('delete', deleteFileOrDirectory); addEventListenerToButton('listDir', listDir); addEventListenerToButton('makeDir', makeDir); } function onRadioClicked(e) { var divId = this.id.slice(6); // skip "radio_" var functionEls = document.querySelectorAll('.function'); for (var i = 0; i < functionEls.length; ++i) { var visible = functionEls[i].id === divId; if (functionEls[i].id === divId) functionEls[i].removeAttribute('hidden'); else functionEls[i].setAttribute('hidden', ''); } } function makeMessage(command, path) { // Package a message using a simple protocol containing: // command var msg = command; msg += ' '; msg += path.length; msg += ' '; msg += path; // Maybe add extra args for (var i = 2; i < arguments.length; ++i) { msg += ' ' + arguments[i]; } return msg; } function saveFile() { if (common.naclModule) { var fileName = document.querySelector('#saveFile input').value; var fileText = document.querySelector('#saveFile textarea').value; common.naclModule.postMessage(makeMessage('sv', fileName, fileText)); // clear the editor. fileText.value = ''; } } function loadFile() { if (common.naclModule) { var fileName = document.querySelector('#loadFile input').value; // clear the editor first (in case there is an error and there is no // output). document.querySelector('#loadFile textarea').value = ''; common.naclModule.postMessage(makeMessage('ld', fileName)); } } function deleteFileOrDirectory() { if (common.naclModule) { var fileName = document.querySelector('#delete input').value; common.naclModule.postMessage(makeMessage('de', fileName)); } } function listDir() { if (common.naclModule) { var dirName = document.querySelector('#listDir input').value; common.naclModule.postMessage(makeMessage('ls', dirName)); } } function makeDir() { if (common.naclModule) { var dirName = document.querySelector('#makeDir input').value; common.naclModule.postMessage(makeMessage('md', dirName)); } } // Called by the common.js module. function handleMessage(message_event) { var msg = message_event.data; var parts = msg.split('|'); var command = parts[0]; var args = parts.slice(1); if (command == 'ERR') { common.logMessage('Error: ' + args[0]); } else if (command == 'STAT') { common.logMessage(args[0]); } else if (command == 'READY') { common.logMessage('Filesystem ready!'); } else if (command == 'DISP') { // Find the file editor that is currently visible. var fileEditorEl = document.querySelector('.function:not([hidden]) > textarea'); // Rejoin args with pipe (|) -- there is only one argument, and it can // contain the pipe character. fileEditorEl.value = args.join('|'); } else if (command == 'LIST') { var listDirOutputEl = document.getElementById('listDirOutput'); // NOTE: files with | in their names will be incorrectly split. Fixing this // is left as an exercise for the reader. // Remove all children of this element... while (listDirOutputEl.firstChild) { listDirOutputEl.removeChild(listDirOutputEl.firstChild); } if (args.length) { // Add new
  • elements for each file. for (var i = 0; i < args.length; ++i) { var itemEl = document.createElement('li'); itemEl.textContent = args[i]; listDirOutputEl.appendChild(itemEl); } } else { var itemEl = document.createElement('li'); itemEl.textContent = ''; listDirOutputEl.appendChild(itemEl); } } }