Handle multiple script tags.
This commit is contained in:
8
Makefile
8
Makefile
@ -349,7 +349,9 @@ web: web_target web_tests
|
|||||||
web_target: \
|
web_target: \
|
||||||
$(WEB)/terminal.html \
|
$(WEB)/terminal.html \
|
||||||
$(WEB)/lazy_terminal.html \
|
$(WEB)/lazy_terminal.html \
|
||||||
|
$(WEB)/script_lite_test.html \
|
||||||
$(WEB)/script_test.html \
|
$(WEB)/script_test.html \
|
||||||
|
$(WEB)/script_test.fs \
|
||||||
$(WEB)/ueforth.js
|
$(WEB)/ueforth.js
|
||||||
|
|
||||||
$(WEB):
|
$(WEB):
|
||||||
@ -361,9 +363,15 @@ $(WEB)/terminal.html: web/terminal.html | $(WEB)
|
|||||||
$(WEB)/lazy_terminal.html: web/lazy_terminal.html | $(WEB)
|
$(WEB)/lazy_terminal.html: web/lazy_terminal.html | $(WEB)
|
||||||
cp $< $@
|
cp $< $@
|
||||||
|
|
||||||
|
$(WEB)/script_lite_test.html: web/script_lite_test.html | $(WEB)
|
||||||
|
cp $< $@
|
||||||
|
|
||||||
$(WEB)/script_test.html: web/script_test.html | $(WEB)
|
$(WEB)/script_test.html: web/script_test.html | $(WEB)
|
||||||
cp $< $@
|
cp $< $@
|
||||||
|
|
||||||
|
$(WEB)/script_test.fs: web/script_test.fs | $(WEB)
|
||||||
|
cp $< $@
|
||||||
|
|
||||||
$(WEB)/ueforth.js: \
|
$(WEB)/ueforth.js: \
|
||||||
web/fuse_web.js \
|
web/fuse_web.js \
|
||||||
web/web.template.js \
|
web/web.template.js \
|
||||||
|
|||||||
36
web/script_lite_test.html
Normal file
36
web/script_lite_test.html
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
Copyright 2022 Bradley D. Nelson
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<script type="text/forth">
|
||||||
|
." Starting Tests..." cr
|
||||||
|
</script>
|
||||||
|
<script type="text/forth">
|
||||||
|
: square ( n -- n ) dup * ;
|
||||||
|
: foobar ( n -- n ) square square ;
|
||||||
|
123
|
||||||
|
</script>
|
||||||
|
<script src="ueforth.js"></script>
|
||||||
|
<script type="text/forth">
|
||||||
|
." Checking for 123..." cr
|
||||||
|
123 = assert
|
||||||
|
." Checking for foobar..." cr
|
||||||
|
2 foobar 16 = assert
|
||||||
|
." Script Test Passes" cr
|
||||||
|
2 fg ." SUCCESS" cr
|
||||||
|
: halt begin 100000 ms again ;
|
||||||
|
halt
|
||||||
|
</script>
|
||||||
17
web/script_test.fs
Normal file
17
web/script_test.fs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
\ Copyright 2022 Bradley D. Nelson
|
||||||
|
\
|
||||||
|
\ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
\ you may not use this file except in compliance with the License.
|
||||||
|
\ You may obtain a copy of the License at
|
||||||
|
\
|
||||||
|
\ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
\
|
||||||
|
\ Unless required by applicable law or agreed to in writing, software
|
||||||
|
\ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
\ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
\ See the License for the specific language governing permissions and
|
||||||
|
\ limitations under the License.
|
||||||
|
|
||||||
|
: square ( n -- n ) dup * ;
|
||||||
|
: foobar ( n -- n ) square square ;
|
||||||
|
123
|
||||||
@ -16,11 +16,17 @@ limitations under the License.
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<script type="text/forth">
|
<script type="text/forth">
|
||||||
: square dup * ;
|
." Starting Tests..." cr
|
||||||
4 square . cr
|
|
||||||
</script>
|
</script>
|
||||||
|
<script type="text/forth" src="script_test.fs"></script>
|
||||||
<script src="ueforth.js"></script>
|
<script src="ueforth.js"></script>
|
||||||
<script type="text/forth">
|
<script type="text/forth">
|
||||||
colors
|
." Checking for 123..." cr
|
||||||
bye
|
123 = assert
|
||||||
|
." Checking for foobar..." cr
|
||||||
|
2 foobar 16 = assert
|
||||||
|
." Script Test Passes" cr
|
||||||
|
2 fg ." SUCCESS" cr
|
||||||
|
: halt begin 100000 ms again ;
|
||||||
|
halt
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -233,19 +233,48 @@ function Builtin(name, flags, vocab, opcode) {
|
|||||||
builtins.push([name, flags | BUILTIN_MARK, vocab, opcode]);
|
builtins.push([name, flags | BUILTIN_MARK, vocab, opcode]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function LoadScripts() {
|
function HttpGet(url) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
var request = new XMLHttpRequest();
|
||||||
|
request.open('GET', url);
|
||||||
|
request.send();
|
||||||
|
request.onload = function() {
|
||||||
|
if (request.status != 200) {
|
||||||
|
reject(request);
|
||||||
|
} else {
|
||||||
|
resolve(request.responseText);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
request.onerror = function() {
|
||||||
|
reject(request);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function LoadScripts(callback) {
|
||||||
if (globalObj.write) {
|
if (globalObj.write) {
|
||||||
|
callback();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var text = '';
|
var textParts = [];
|
||||||
var tags = document.getElementsByTagName('script');
|
var tags = document.getElementsByTagName('script');
|
||||||
for (var i = 0; i < tags.length; ++i) {
|
for (var i = 0; i < tags.length; ++i) {
|
||||||
if (tags[i].type == 'text/forth') {
|
if (tags[i].type == 'text/forth') {
|
||||||
text += tags[i].text + '\n';
|
textParts.push(tags[i].text);
|
||||||
|
if (tags[i].src) {
|
||||||
|
textParts.push(HttpGet(tags[i].src));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var encoder = new TextEncoder();
|
Promise.all(textParts).then(function(values) {
|
||||||
context.scripts = encoder.encode(text);
|
var text = '';
|
||||||
|
for (var i = 0; i < values.length; ++i) {
|
||||||
|
text += values[i] + '\n';
|
||||||
|
}
|
||||||
|
var encoder = new TextEncoder();
|
||||||
|
context.scripts = encoder.encode(text);
|
||||||
|
callback();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function SetupBuiltins() {
|
function SetupBuiltins() {
|
||||||
@ -623,9 +652,10 @@ function run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function Start() {
|
function Start() {
|
||||||
LoadScripts();
|
LoadScripts(function() {
|
||||||
Init();
|
Init();
|
||||||
setTimeout(run, 0);
|
setTimeout(run, 0);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (globalObj.write) {
|
if (globalObj.write) {
|
||||||
|
|||||||
Reference in New Issue
Block a user