From 542786e87c7d50a729f13d42009a11f4b470f927 Mon Sep 17 00:00:00 2001 From: Will Scullin Date: Sun, 31 Mar 2019 20:52:45 -0700 Subject: [PATCH] Export instead of attach to window, and make webpack like it. --- .eslintrc.json | 5 +++ apple2js.html | 74 ++++++++++++++++----------------- apple2jse.html | 74 ++++++++++++++++----------------- js/copyright.js | 11 ----- js/entry2.js | 3 ++ js/entry2e.js | 3 ++ js/main2.js | 101 ++++++++++++++++++++++----------------------- js/main2e.js | 96 +++++++++++++++++++++--------------------- js/prefs.js | 12 +++--- js/ui/copyright.js | 11 ----- webpack.config.js | 10 +++-- 11 files changed, 197 insertions(+), 203 deletions(-) delete mode 100644 js/copyright.js create mode 100644 js/entry2.js create mode 100644 js/entry2e.js delete mode 100644 js/ui/copyright.js diff --git a/.eslintrc.json b/.eslintrc.json index d6ee344..7d888b8 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -43,6 +43,11 @@ "env": { "jest": true } + }, { + "files": [ "js/entry2.js", "js/entry2e.js"], + "env": { + "commonjs": true + } } ] } diff --git a/apple2js.html b/apple2js.html index 8bf39c7..410a874 100644 --- a/apple2js.html +++ b/apple2js.html @@ -34,9 +34,9 @@ + ondragover="Apple2.handleDragOver(0, event)" + ondrop="Apple2.handleDrop(0, event)" + ondragend="Apple2.handleDragEnd(0, event)">
+ ondragover="Apple2.handleDragOver(1, event)" + ondrop="Apple2.handleDrop(1, event)" + ondragend="Apple2.handleDragEnd(1, event)">
 
Disk 1
+ ondragover="Apple2.handleDragOver(2, event)" + ondrop="Apple2.handleDrop(2, event)" + ondragend="Apple2.handleDragEnd(2, event)">
 
@@ -83,21 +83,21 @@
-
0KHz
- - -
-
@@ -106,22 +106,22 @@
- +
@@ -334,13 +334,13 @@ @@ -351,7 +351,7 @@
- +
diff --git a/apple2jse.html b/apple2jse.html index fa877c3..cfa0f91 100644 --- a/apple2jse.html +++ b/apple2jse.html @@ -34,9 +34,9 @@ + ondragover="Apple2.handleDragOver(0, event)" + ondrop="Apple2.handleDrop(0, event)" + ondragend="Apple2.handleDragEnd(0, event)">
+ onkeydown="Apple2._keydown(event);" + onkeyup="Apple2._keyup(event);">
+ ondragover="Apple2.handleDragOver(1, event)" + ondrop="Apple2.handleDrop(1, event)" + ondragend="Apple2.handleDragEnd(1, event)">
 
Disk 1
+ ondragover="Apple2.handleDragOver(2, event)" + ondrop="Apple2.handleDrop(2, event)" + ondragend="Apple2.handleDragEnd(2, event)">
 
@@ -86,28 +86,28 @@
-
0KHz
- - -
- -
+ onclick="Apple2.reset(event)" + oncontextmenu="Apple2.reset(event)" />
@@ -140,7 +140,7 @@

Type

  • - @@ -153,7 +153,7 @@

    CPU

    • - + @@ -163,28 +163,28 @@
      • + onclick="Apple2.updateJoystick()" />
      • + onclick="Apple2.updateJoystick()" />
      • + onclick="Apple2.updateJoystick()" />
      • + onclick="Apple2.updateJoystick()" /> @@ -194,14 +194,14 @@
        • + onclick="Apple2.updateScreen()" />
        • + onclick="Apple2.updateScreen()" /> @@ -211,7 +211,7 @@
          • + onclick="Apple2.updateSound()" checked="checked" /> @@ -248,7 +248,7 @@
- +
@@ -310,13 +310,13 @@ @@ -327,7 +327,7 @@
- +
diff --git a/js/copyright.js b/js/copyright.js deleted file mode 100644 index dd5eb3d..0000000 --- a/js/copyright.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * Copyright 2010-2019 Will Scullin - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation. No representations are made about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - */ diff --git a/js/entry2.js b/js/entry2.js new file mode 100644 index 0000000..5adb7b4 --- /dev/null +++ b/js/entry2.js @@ -0,0 +1,3 @@ +const Apple2 = require('./main2'); + +module.exports = { Apple2 }; diff --git a/js/entry2e.js b/js/entry2e.js new file mode 100644 index 0000000..dcdb025 --- /dev/null +++ b/js/entry2e.js @@ -0,0 +1,3 @@ +const Apple2 = require('./main2e'); + +module.exports = { Apple2 }; diff --git a/js/main2.js b/js/main2.js index 41c831f..e1edb3a 100644 --- a/js/main2.js +++ b/js/main2.js @@ -56,7 +56,7 @@ var disk_cur_cat = []; var _currentDrive = 1; -window.openLoad = function(drive, event) +export function openLoad(drive, event) { _currentDrive = parseInt(drive, 10); if (event.metaKey) { @@ -64,13 +64,13 @@ window.openLoad = function(drive, event) } else { if (disk_cur_cat[drive]) { document.querySelector('#category_select').value = disk_cur_cat[drive]; - window.selectCategory(); + selectCategory(); } MicroModal.show('load-modal'); } -}; +} -window.openSave = function(drive, event) +export function openSave(drive, event) { _currentDrive = parseInt(drive, 10); @@ -88,14 +88,14 @@ window.openSave = function(drive, event) document.querySelector('#save_name').value = drivelights.label(drive); MicroModal.show('save-modal'); } -}; +} -window.handleDragOver = function(drive, event) { +export function handleDragOver(drive, event) { event.preventDefault(); event.dataTransfer.dropEffect = 'copy'; -}; +} -window.handleDragEnd = function(drive, event) { +export function handleDragEnd(drive, event) { var dt = event.dataTransfer; if (dt.items) { for (var i = 0; i < dt.items.length; i++) { @@ -104,9 +104,9 @@ window.handleDragEnd = function(drive, event) { } else { event.dataTransfer.clearData(); } -}; +} -window.handleDrop = function(drive, event) { +export function handleDrop(drive, event) { event.preventDefault(); event.stopPropagation(); @@ -136,7 +136,7 @@ window.handleDrop = function(drive, event) { } } } -}; +} var loading = false; @@ -162,7 +162,7 @@ function loadAjax(drive, url) { }); } -window.doLoad = function doLoad() { +export function doLoad() { MicroModal.close('load-modal'); var urls = document.querySelector('#disk_select').value, url; if (urls && urls.length) { @@ -198,19 +198,19 @@ window.doLoad = function doLoad() { document.location.hash = parts.join('|'); } } -}; +} -window.doSave = function doSave() { +export function doSave() { var name = document.querySelector('#save_name').value; saveLocalStorage(_currentDrive, name); MicroModal.close('save-modal'); -}; +} -window.doDelete = function(name) { +export function doDelete(name) { if (window.confirm('Delete ' + name + '?')) { deleteLocalStorage(name); } -}; +} function doLoadLocal(drive, file) { var parts = file.name.split('.'); @@ -374,7 +374,7 @@ io.setSlot(3, videoterm); io.setSlot(6, disk2); io.setSlot(7, clock); -window.showFPS = false; +var showFPS = false; function updateKHz() { var now = Date.now(); @@ -382,7 +382,7 @@ function updateKHz() { var cycles = cpu.cycles(); var delta; - if (window.showFPS) { + if (showFPS) { delta = renderedFrames - lastFrames; var fps = parseInt(delta/(ms/1000), 10); document.querySelector('#khz').innerText = fps + 'fps'; @@ -397,7 +397,11 @@ function updateKHz() { lastFrames = renderedFrames; } -window.updateSound = function updateSound() { +export function toggleShowFPS() { + showFPS = !showFPS; +} + +export function updateSound() { var on = document.querySelector('#enable_sound').checked; var label = document.querySelector('#toggle-sound i'); audio.enable(on); @@ -419,16 +423,16 @@ function dumpDisk(drive) { wind.document.close(); } -window.dumpProgram = function() { +export function dumpProgram() { var wind = window.open('', '_blank'); wind.document.title = 'Program Listing'; wind.document.write('
');
     wind.document.write(dumper.toString());
     wind.document.write('
'); wind.document.close(); -}; +} -window.step = function() +export function step() { if (runTimer) { clearInterval(runTimer); @@ -439,11 +443,11 @@ window.step = function() debug(cpu.dumpRegisters()); debug(cpu.dumpPC()); }); -}; +} var accelerated = false; -window.updateCPU = function updateCPU() +export function updateCPU() { accelerated = document.querySelector('#accelerator_toggle').checked; kHz = accelerated ? 4092 : 1023; @@ -539,11 +543,6 @@ function stop() { runTimer = null; } -function reset() -{ - cpu.reset(); -} - var state = null; function storeStateLocal() { @@ -612,7 +611,7 @@ function loadBinary(bin) { run(bin.start); } -window.selectCategory = function() { +export function selectCategory() { document.querySelector('#disk_select').innerHTML = ''; var cat = disk_categories[document.querySelector('#category_select').value]; if (cat) { @@ -630,15 +629,15 @@ window.selectCategory = function() { } } } -}; +} -window.selectDisk = function() { +export function selectDisk() { document.querySelector('#local_file').value = ''; -}; +} -window.clickDisk = function() { - window.doLoad(); -}; +export function clickDisk() { + doLoad(); +} function loadDisk(drive, disk) { var name = disk.name; @@ -811,7 +810,7 @@ function _keyup(evt) { } } -window.updateScreen = function updateScreen() { +export function updateScreen() { var green = document.querySelector('#green_screen').checked; var scanlines = document.querySelector('#show_scanlines').checked; @@ -824,7 +823,7 @@ var flipX = false; var flipY = false; var swapXY = false; -window.updateJoystick = function() { +export function updateJoystick() { disableMouseJoystick = document.querySelector('#disable_mouse').checked; flipX = document.querySelector('#flip_x').checked; flipY = document.querySelector('#flip_y').checked; @@ -836,7 +835,7 @@ window.updateJoystick = function() { io.paddle(1, 0.5); return; } -}; +} function _mousemove(evt) { if (gamepad || disableMouseJoystick) { @@ -858,7 +857,7 @@ function _mousemove(evt) { io.paddle(1, flipY ? 1 - y : y); } -window.pauseRun = function() { +export function pauseRun() { var label = document.querySelector('#pause-run i'); if (paused) { run(); @@ -870,19 +869,19 @@ window.pauseRun = function() { label.classList.add('fa-play'); } paused = !paused; -}; +} -window.toggleSound = function() { +export function toggleSound() { var enableSound = document.querySelector('#enable_sound'); enableSound.checked = !enableSound.checked; - window.updateSound(); -}; + updateSound(); +} -window.openOptions = function () { +export function openOptions() { MicroModal.show('options-modal'); }; -window.openPrinterModal = function () { +export function openPrinterModal() { MicroModal.show('printer-modal'); }; @@ -943,11 +942,11 @@ document.addEventListener('DOMContentLoaded', function() { }); } - reset(); + cpu.reset(); setInterval(updateKHz, 1000); - window.updateSound(); - window.updateScreen(); - window.updateCPU(); + updateSound(); + updateScreen(); + updateCPU(); if (window.localStorage !== undefined) { document.querySelectorAll('.disksave').forEach(function (el) { el.style.display = 'inline-block';}); diff --git a/js/main2e.js b/js/main2e.js index 53f49ef..556acdf 100644 --- a/js/main2e.js +++ b/js/main2e.js @@ -51,7 +51,7 @@ var disk_cur_cat = []; var _currentDrive = 1; -window.openLoad = function(drive, event) +export function openLoad(drive, event) { _currentDrive = parseInt(drive, 10); if (event.metaKey) { @@ -59,13 +59,13 @@ window.openLoad = function(drive, event) } else { if (disk_cur_cat[drive]) { document.querySelector('#category_select').value = disk_cur_cat[drive]; - window.selectCategory(); + selectCategory(); } MicroModal.show('load-modal'); } -}; +} -window.openSave = function(drive, event) +export function openSave(drive, event) { _currentDrive = parseInt(drive, 10); @@ -83,14 +83,14 @@ window.openSave = function(drive, event) document.querySelector('#save_name').value = drivelights.label(drive); MicroModal.show('save-modal'); } -}; +} -window.handleDragOver = function(drive, event) { +export function handleDragOver(drive, event) { event.preventDefault(); event.dataTransfer.dropEffect = 'copy'; -}; +} -window.handleDragEnd = function(drive, event) { +export function handleDragEnd(drive, event) { var dt = event.dataTransfer; if (dt.items) { for (var i = 0; i < dt.items.length; i++) { @@ -99,9 +99,9 @@ window.handleDragEnd = function(drive, event) { } else { event.dataTransfer.clearData(); } -}; +} -window.handleDrop = function(drive, event) { +export function handleDrop(drive, event) { event.preventDefault(); event.stopPropagation(); @@ -131,7 +131,7 @@ window.handleDrop = function(drive, event) { } } } -}; +} var loading = false; @@ -157,7 +157,7 @@ function loadAjax(drive, url) { }); } -window.doLoad = function doLoad() { +export function doLoad() { MicroModal.close('load-modal'); var urls = document.querySelector('#disk_select').value, url; if (urls && urls.length) { @@ -195,17 +195,17 @@ window.doLoad = function doLoad() { } }; -window.doSave = function doSave() { +export function doSave() { var name = document.querySelector('#save_name').value; saveLocalStorage(_currentDrive, name); MicroModal.close('save-modal'); }; -window.doDelete = function(name) { +export function doDelete(name) { if (window.confirm('Delete ' + name + '?')) { deleteLocalStorage(name); } -}; +} function doLoadLocal(drive, file) { var parts = file.name.split('.'); @@ -348,7 +348,7 @@ io.setSlot(2, slinky); io.setSlot(6, disk2); io.setSlot(7, clock); -window.showFPS = false; +var showFPS = false; function updateKHz() { var now = Date.now(); @@ -356,7 +356,7 @@ function updateKHz() { var cycles = cpu.cycles(); var delta; - if (window.showFPS) { + if (showFPS) { delta = renderedFrames - lastFrames; var fps = parseInt(delta/(ms/1000), 10); document.querySelector('#khz').innerText = fps + 'fps'; @@ -371,7 +371,11 @@ function updateKHz() { lastFrames = renderedFrames; } -window.updateSound = function updateSound() { +export function toggleShowFPS() { + showFPS = !showFPS; +} + +export function updateSound() { var on = document.querySelector('#enable_sound').checked; var label = document.querySelector('#toggle-sound i'); audio.enable(on); @@ -393,16 +397,16 @@ function dumpDisk(drive) { wind.document.close(); } -window.dumpProgram = function() { +export function dumpProgram() { var wind = window.open('', '_blank'); wind.document.title = 'Program Listing'; wind.document.write('
');
     wind.document.write(dumper.toString());
     wind.document.write('
'); wind.document.close(); -}; +} -window.step = function() +export function step() { if (runTimer) { clearInterval(runTimer); @@ -413,11 +417,11 @@ window.step = function() debug(cpu.dumpRegisters()); debug(cpu.dumpPC()); }); -}; +} var accelerated = false; -window.updateCPU = function updateCPU() +export function updateCPU() { accelerated = document.querySelector('#accelerator_toggle').checked; kHz = accelerated ? 4092 : 1023; @@ -505,7 +509,7 @@ function stop() { runTimer = null; } -function reset() +export function reset() { cpu.reset(); } @@ -572,7 +576,7 @@ function loadBinary(bin) { run(bin.start); } -window.selectCategory = function() { +export function selectCategory() { document.querySelector('#disk_select').innerHTML = ''; var cat = disk_categories[document.querySelector('#category_select').value]; if (cat) { @@ -590,15 +594,15 @@ window.selectCategory = function() { } } } -}; +} -window.selectDisk = function() { +export function selectDisk() { document.querySelector('#local_file').value = ''; -}; +} -window.clickDisk = function() { - window.doLoad(); -}; +export function clickDisk() { + doLoad(); +} function loadDisk(drive, disk) { var name = disk.name; @@ -709,8 +713,6 @@ function processHash(hash) { * Keyboard/Gamepad routines */ -window.reset = keyboard.reset; - function _keydown(evt) { if (!focused && (!evt.metaKey || evt.ctrlKey)) { evt.preventDefault(); @@ -790,7 +792,7 @@ function _keyup(evt) { } } -window.updateScreen = function updateScreen() { +export function updateScreen() { var green = document.querySelector('#green_screen').checked; var scanlines = document.querySelector('#show_scanlines').checked; @@ -803,7 +805,7 @@ var flipX = false; var flipY = false; var swapXY = false; -window.updateJoystick = function() { +export function updateJoystick() { disableMouseJoystick = document.querySelector('#disable_mouse').checked; flipX = document.querySelector('#flip_x').checked; flipY = document.querySelector('#flip_y').checked; @@ -815,7 +817,7 @@ window.updateJoystick = function() { io.paddle(1, 0.5); return; } -}; +} function _mousemove(evt) { if (gamepad || disableMouseJoystick) { @@ -837,7 +839,7 @@ function _mousemove(evt) { io.paddle(1, flipY ? 1 - y : y); } -window.pauseRun = function() { +export function pauseRun() { var label = document.querySelector('#pause-run i'); if (paused) { run(); @@ -849,19 +851,19 @@ window.pauseRun = function() { label.classList.add('fa-play'); } paused = !paused; -}; +} -window.toggleSound = function() { +export function toggleSound() { var enableSound = document.querySelector('#enable_sound'); enableSound.checked = !enableSound.checked; - window.updateSound(); -}; + updateSound(); +} -window.openOptions = function () { +export function openOptions() { MicroModal.show('options-modal'); }; -window.openPrinterModal = function () { +export function openPrinterModal() { MicroModal.show('printer-modal'); }; @@ -922,11 +924,11 @@ document.addEventListener('DOMContentLoaded', function() { }); } - reset(); + cpu.reset(); setInterval(updateKHz, 1000); - window.updateSound(); - window.updateScreen(); - window.updateCPU(); + updateSound(); + updateScreen(); + updateCPU(); if (window.localStorage !== undefined) { document.querySelectorAll('.disksave').forEach(function (el) { el.style.display = 'inline-block';}); diff --git a/js/prefs.js b/js/prefs.js index b2e51a3..e981221 100644 --- a/js/prefs.js +++ b/js/prefs.js @@ -11,18 +11,20 @@ export default function Prefs() { + var havePrefs = typeof window.localStorage !== 'undefined'; + return { havePrefs: function() { - return typeof(localStorage) != 'undefined'; + return havePrefs; }, readPref: function(name) { - if (localStorage) - return localStorage.getItem(name); + if (havePrefs) + return window.localStorage.getItem(name); return null; }, writePref: function(name, value) { - if (localStorage) - localStorage.setItem(name, value); + if (havePrefs) + window.localStorage.setItem(name, value); } }; } diff --git a/js/ui/copyright.js b/js/ui/copyright.js deleted file mode 100644 index dd5eb3d..0000000 --- a/js/ui/copyright.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * Copyright 2010-2019 Will Scullin - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation. No representations are made about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - */ diff --git a/webpack.config.js b/webpack.config.js index 6733481..442af81 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,15 +1,17 @@ -/*globals require module */ const path = require('path'); module.exports = { devtool: 'source-map', entry: { - main2: path.resolve('js/main2.js'), - main2e: path.resolve('js/main2e.js') + main2: path.resolve('js/entry2.js'), + main2e: path.resolve('js/entry2e.js') }, output: { - path: path.resolve('dist/') + path: path.resolve('dist/'), + library: 'Apple2', + libraryExport: 'Apple2', + libraryTarget: 'var' }, devServer: { compress: true,