Handle multiple script tags.
This commit is contained in:
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">
|
||||
: square dup * ;
|
||||
4 square . cr
|
||||
." Starting Tests..." cr
|
||||
</script>
|
||||
<script type="text/forth" src="script_test.fs"></script>
|
||||
<script src="ueforth.js"></script>
|
||||
<script type="text/forth">
|
||||
colors
|
||||
bye
|
||||
." 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>
|
||||
|
||||
@ -233,19 +233,48 @@ function Builtin(name, flags, 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) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
var text = '';
|
||||
var textParts = [];
|
||||
var tags = document.getElementsByTagName('script');
|
||||
for (var i = 0; i < tags.length; ++i) {
|
||||
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();
|
||||
context.scripts = encoder.encode(text);
|
||||
Promise.all(textParts).then(function(values) {
|
||||
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() {
|
||||
@ -623,9 +652,10 @@ function run() {
|
||||
}
|
||||
|
||||
function Start() {
|
||||
LoadScripts();
|
||||
Init();
|
||||
setTimeout(run, 0);
|
||||
LoadScripts(function() {
|
||||
Init();
|
||||
setTimeout(run, 0);
|
||||
});
|
||||
}
|
||||
|
||||
if (globalObj.write) {
|
||||
|
||||
Reference in New Issue
Block a user