|
12 | 12 | */ -}} |
13 | 13 | {{- define "artifactjsdos" -}} |
14 | 14 | {{- if eq (index . "jsdos6") true}} |
| 15 | +{{- $unlocked := index . "editor"}} |
15 | 16 | {{- $download := index . "download"}} |
16 | 17 | {{- $filename := index . "filename"}} |
17 | 18 | {{- $lead := index . "lead"}} |
|
34 | 35 | {{- if eq true (index . "modEmulateBroken")}}<span class="badge bg-danger ms-2">⚠️ Incompatible</span>{{end}} |
35 | 36 | <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button> |
36 | 37 | </div> |
37 | | - <div class="modal-body"> |
| 38 | + <div class="modal-body"> |
38 | 39 | {{- if eq "covox" (index . "modEmulateAudio")}}<p class="text-info-emphasis">If asked for a sound device option, choose "LPT1" for Covox, Disney, Soundplayer or Soundthing</p>{{end}} |
39 | 40 | {{- if eq "gus" (index . "modEmulateAudio")}}<p class="text-info-emphasis">If asked for the Gravis Ultrasound config, choose IRQ <var>5</var>, DMA <var>1</var>, Base address <var>240h</var> or Port <var>240</var></p>{{end}} |
40 | 41 | {{- if eq "sb1" (index . "modEmulateAudio")}}<p class="text-info-emphasis">If asked for the Sound Blaster config, choose IRQ <var>7</var>, DMA <var>1</var>, Base address <var>220h</var> or Port <var>220</var></p>{{end}} |
41 | 42 | {{- if eq "sb16" (index . "modEmulateAudio")}}<p class="text-info-emphasis">If asked for the Sound Blaster 16 config, choose IRQ <var>7</var>, DMA <var>1</var>, HDMA <var>5</var>, Base address <var>220h</var> or Port <var>220</var></p>{{end}} |
42 | | - <canvas id="jsdos6"></canvas> |
| 43 | + <canvas id="jsdos6"></canvas> |
43 | 44 | </div> |
44 | 45 | <div class="modal-footer"> |
45 | 46 | <button id="jsdosFullscreen" class="btn btn-outline-info">⤢ Full Screen</button> |
46 | 47 | <button id="jsdosScreenshot" class="btn btn-outline-info">⛶ Screenshot</button> |
| 48 | + {{- if $unlocked }} |
| 49 | + <button id="jsdosReplaceImage" class="btn btn-outline-warning">⛭ Replace Image</button> |
| 50 | + {{- end }} |
47 | 51 | <button id="jsdosStop" class="btn btn-danger">■ Stop</button> |
48 | 52 | <button type="button" id="jsdosCloser" class="btn btn-secondary" data-bs-dismiss="modal">✕ Close</button> |
49 | 53 | </div> |
|
88 | 92 | document |
89 | 93 | .getElementById(`jsdosScreenshot`) |
90 | 94 | .addEventListener("click", screenshot); |
| 95 | +{{- if $unlocked }} |
| 96 | + const replaceImageButton = document.getElementById('jsdosReplaceImage'); |
| 97 | + replaceImageButton.addEventListener('click', function() { |
| 98 | + try { |
| 99 | + replaceImageButton.disabled = true; |
| 100 | + console.log("replacement image: for canvas of {{$filename}}"); |
| 101 | + let dataURL = canvas.toDataURL("image/png"); |
| 102 | + let a = document.createElement('a'); |
| 103 | + a.href = dataURL; |
| 104 | + a.download = "{{$filename}}-replace-image.png"; |
| 105 | + document.body.appendChild(a); |
| 106 | + a.click(); |
| 107 | + document.body.removeChild(a); |
| 108 | + // stop JS-DOS emulation |
| 109 | + if (window.ci) { |
| 110 | + ci.exit(); |
| 111 | + stopButton.disabled = true; |
| 112 | + const runAppButton = document.getElementById('js-dos-run-app'); |
| 113 | + if (runAppButton) { |
| 114 | + runAppButton.textContent = 'Refresh page to rerun'; |
| 115 | + runAppButton.style.pointerEvents = 'none'; |
| 116 | + } |
| 117 | + } |
| 118 | + const jsdosModal = bootstrap.Modal.getInstance(document.getElementById('js-dos-modal')); |
| 119 | + jsdosModal.hide(); |
| 120 | + // store screenshot for potential use |
| 121 | + window.lastJSDOSScreenshot = dataURL; |
| 122 | + // open asset editor modal |
| 123 | + const assetModal = new bootstrap.Modal(document.getElementById('asset-editor-modal')); |
| 124 | + assetModal.show(); |
| 125 | + // open replacement image file dialog |
| 126 | + document.getElementById('asset-editor-modal').addEventListener('shown.bs.modal', function() { |
| 127 | + const replacementInput = document.querySelector('input[name="artifact-editor-replace-preview"]'); |
| 128 | + if (replacementInput) { |
| 129 | + replacementInput.click(); |
| 130 | + } |
| 131 | + }); |
| 132 | + } catch (error) { |
| 133 | + console.log("Replace image error: ", error); |
| 134 | + } |
| 135 | + }); |
| 136 | +{{- end }} |
91 | 137 | function screenshot() { |
92 | 138 | console.log("screenshot: for canvas of {{$filename}}"); |
93 | 139 | let dataURL = canvas.toDataURL("image/png"); |
|
149 | 195 | const jsQuit = document.getElementById("jsdosCloser"); |
150 | 196 | jsQuit.addEventListener("click", () => { |
151 | 197 | location.reload(); |
152 | | - }); |
| 198 | + }); |
153 | 199 | </script> |
154 | 200 | {{- end}}{{ end }} |
0 commit comments