Dump
This commit is contained in:
parent
1ef93799d1
commit
2df9b96765
98 changed files with 30423 additions and 0 deletions
216
buildtools/love-js/love-js.sh
Executable file
216
buildtools/love-js/love-js.sh
Executable file
|
@ -0,0 +1,216 @@
|
|||
#!/bin/bash
|
||||
|
||||
help="love-js.sh: \n
|
||||
A tool for assembling love.js projects without relying on npm / node. \n\
|
||||
For the full project please see https://github.com/Davidobot/love.js \n\
|
||||
\n\
|
||||
usage: \n\
|
||||
./love-js.sh [love-file] [project-name] [opts]\n\
|
||||
\n
|
||||
opts:\n
|
||||
-v= (--version=) Version of the Game. Will be included in file name.\n
|
||||
-o= (--output-directory=) Target directory. Defaults to PWD\n
|
||||
-t= (--text-colour=) Text Colour. Defaults to \"240,234,214\"\n
|
||||
-c= (--canvas-colour=) Canvas Colour. Defaults to \"54,69,79\"\n
|
||||
-a= (--author=) Author (Shows up on loading page).\n
|
||||
-w= (--width=) Canvas Width (game width in conf). Defaults to 800\n
|
||||
-h= (--height=) Canvas Height (game height in conf). Defaults to 600\n
|
||||
-r (--run) Set flag if you want to run a local copy on port 8000\n
|
||||
-d (--debug) Set flag for debug info\n
|
||||
-h (--help) Display this text\n
|
||||
\n
|
||||
eg: \n\
|
||||
|
||||
Pack up sample.love\n
|
||||
\t./love-js.sh sample.love sample\n
|
||||
\t> sample-web.zip\n
|
||||
\n
|
||||
Pack up sample.love version 0.1.0\n
|
||||
\t./love-js.sh sample-0.1.0.love sample -v=0.1.0\n
|
||||
\t> sample-0.1.0-web.zip\n
|
||||
\n
|
||||
Pack up sample.love and set the background colour to black\n
|
||||
\t./love-js.sh sample-0.1.0.love sample -v=0.1.0 -c=\"0,0,0\"\n
|
||||
\t> sample-0.1.0-web.zip\n
|
||||
\n
|
||||
Pack up sample.love and set the author to \"Sample Name\"\n
|
||||
\t./love-js.sh sample-0.1.0.love sample -a=\"Sample Name\"\n
|
||||
\t> sample-web.zip"
|
||||
|
||||
if [ "$#" -lt "2" ]
|
||||
then
|
||||
echo "ERROR! love-js.sh expects at least two arguments."
|
||||
echo -e $help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# use gdu on macOS, fixes 'invalid option -b' error
|
||||
if [ "$(uname -s)" = "Darwin" ]; then
|
||||
DU_CMD=gdu
|
||||
else
|
||||
DU_CMD=du
|
||||
fi
|
||||
|
||||
love_file=$1
|
||||
name=$2
|
||||
## confirm that $release_dir/$name-$version.love exists
|
||||
if [ ! -f $love_file ]; then
|
||||
echo "love file not found!"
|
||||
echo $love_file
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f /proc/sys/kernel/random/uuid ]; then
|
||||
uuid=$(cat /proc/sys/kernel/random/uuid)
|
||||
else
|
||||
uuid="2fd99e56-5455-45dd-86dd-7af724874d65"
|
||||
fi
|
||||
|
||||
author="";
|
||||
run=false;
|
||||
debug=false;
|
||||
gethelp=false;
|
||||
width=800
|
||||
height=600
|
||||
release="compat"
|
||||
love_version="11.5"
|
||||
canvas_colour="54,69,79"
|
||||
text_colour="240,234,214"
|
||||
initial_memory=0
|
||||
module_size=$($DU_CMD -b $love_file | awk '{print $1}')
|
||||
title=$(echo $name | sed -r 's/\<./\U&/g' | sed -r 's/-/\ /g')
|
||||
version=""
|
||||
dash_version=""
|
||||
output_dir=$(pwd)
|
||||
cachemodule="true"
|
||||
|
||||
for i in "$@"
|
||||
do
|
||||
case $i in
|
||||
-v=*|--version=*)
|
||||
version="${i#*=}"
|
||||
dash_version="-${i#*=}"
|
||||
;;
|
||||
-o=*|--output-directory=*)
|
||||
output_dir="${i#*=}"
|
||||
;;
|
||||
-w=*|--width=*)
|
||||
width="${i#*=}"
|
||||
;;
|
||||
-h=*|--height=*)
|
||||
height="${i#*=}"
|
||||
;;
|
||||
-t=*|--text-colour=*)
|
||||
text_colour="${i#*=}"
|
||||
;;
|
||||
-c=*|--canvas-colour=*)
|
||||
canvas_colour="${i#*=}"
|
||||
;;
|
||||
-a=*|--author=*)
|
||||
author="${i#*=}"
|
||||
;;
|
||||
-r|--run)
|
||||
run=true
|
||||
;;
|
||||
-d|--debug)
|
||||
debug=true
|
||||
;;
|
||||
-h|--help)
|
||||
gethelp=true
|
||||
;;
|
||||
-n|--no-cache)
|
||||
cachemodule="false"
|
||||
;;
|
||||
*)
|
||||
# unknown option
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
page_colour=$canvas_colour
|
||||
|
||||
file_name=$output_dir/$name$dash_version-web
|
||||
|
||||
debug (){
|
||||
if [ $debug = true ]
|
||||
then
|
||||
echo ""
|
||||
echo "Debug: love-js.sh"
|
||||
echo "love file: ${love_file}"
|
||||
echo "output file: $file_name"
|
||||
echo "author: $author"
|
||||
echo "version: $version"
|
||||
echo "text colour: $text_colour"
|
||||
echo "canvas colour: $canvas_colour"
|
||||
echo "canvas size: ${height}, ${width}"
|
||||
echo "run: ${run}"
|
||||
echo "use cache: $cachemodule"
|
||||
fi
|
||||
}
|
||||
|
||||
call_dir=$(pwd)
|
||||
root="$(dirname "$0")"
|
||||
|
||||
build(){
|
||||
rm -fr $file_name
|
||||
mkdir -p $file_name && mkdir -p $file_name/theme
|
||||
|
||||
cat $root/src/index.html | \
|
||||
sed "s/{{title}}/${title}/g" | \
|
||||
sed "s/{{version}}/${version}/g" | \
|
||||
sed "s/{{author}}/${author}/g" | \
|
||||
sed "s/{{width}}/${width}/g" | \
|
||||
sed "s/{{height}}/${height}/g" | \
|
||||
sed "s/{{initial-memory}}/${initial_memory}/g" | \
|
||||
sed "s/{{canvas-colour}}/${canvas_colour}/g" | \
|
||||
sed "s/{{text-colour}}/${text_colour}/g" > \
|
||||
$file_name/index.html
|
||||
|
||||
cat $root/src/love.css | \
|
||||
sed "s/{{page-colour}}/${page_colour}/g" > \
|
||||
$file_name/theme/love.css
|
||||
|
||||
cat $root/src/game.js | \
|
||||
sed "s/{{{cachemodule}}}/${cachemodule}/g" | \
|
||||
sed "s/{{{metadata}}}/{\"package_uuid\":\"${uuid}\",\"remote_package_size\":$module_size,\"files\":[{\"filename\":\"\/game.love\",\"crunched\":0,\"start\":0,\"end\":$module_size,\"audio\":false}]}/" > \
|
||||
$file_name/game.js
|
||||
cp $root/src/serve.py $file_name
|
||||
cp $root/src/consolewrapper.js $file_name
|
||||
cp $love_file $file_name/game.love
|
||||
cp $root/src/love-$love_version/$release/love.js $file_name
|
||||
cp $root/src/love-$love_version/$release/love.wasm $file_name
|
||||
if [ $release == "release" ]; then
|
||||
cp $root/src/release/love.worker.js $file_name
|
||||
fi
|
||||
}
|
||||
|
||||
clean(){
|
||||
rm -rf $file_name
|
||||
}
|
||||
|
||||
release (){
|
||||
rm -fr $file_name
|
||||
build
|
||||
debug
|
||||
zip -r -q tmp $file_name
|
||||
rm -f $file_name.zip
|
||||
mv tmp.zip $file_name.zip
|
||||
clean
|
||||
}
|
||||
|
||||
run (){
|
||||
debug
|
||||
build
|
||||
cd $file_name
|
||||
python3 serve.py
|
||||
}
|
||||
|
||||
if [ $gethelp = true ]
|
||||
then
|
||||
echo -e $help
|
||||
elif [ $run = false ]
|
||||
then
|
||||
release
|
||||
else
|
||||
run
|
||||
fi
|
99
buildtools/love-js/src/consolewrapper.js
Normal file
99
buildtools/love-js/src/consolewrapper.js
Normal file
|
@ -0,0 +1,99 @@
|
|||
var newConsole = (function(oldConsole)
|
||||
{
|
||||
return {
|
||||
log : function()
|
||||
{
|
||||
var data = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
data[_i] = arguments[_i];
|
||||
}
|
||||
if(data.length == 1) //Start looking for api's (And dont show anything)
|
||||
{
|
||||
if(typeof(data[0]) == "string" && data[0].indexOf("callJavascriptFunction") != -1) //Contains function
|
||||
{
|
||||
// oldConsole.log(data[0]);
|
||||
try
|
||||
{
|
||||
return eval(data[0].split("callJavascriptFunction ")[1]);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
oldConsole.error("Something went wrong with your callJS: \nCode: " + data[0].split("callJavascriptFunction ")[1] + "\nError: '" + e.message + "'");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
oldConsole.log(data[0]);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else
|
||||
oldConsole.log(data[0], data.splice(1));
|
||||
return null;
|
||||
},
|
||||
warn : function()
|
||||
{
|
||||
var data = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
data[_i] = arguments[_i];
|
||||
}
|
||||
if(data.length == 1)
|
||||
oldConsole.warn(data[0]);
|
||||
else
|
||||
oldConsole.warn(data[0], data.splice(1));
|
||||
},
|
||||
error : function()
|
||||
{
|
||||
var data = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
data[_i] = arguments[_i];
|
||||
}
|
||||
if(data.length == 1)
|
||||
oldConsole.error(data[0]);
|
||||
else
|
||||
oldConsole.error(data[0], data.splice(1));
|
||||
},
|
||||
info : function()
|
||||
{
|
||||
var data = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
data[_i] = arguments[_i];
|
||||
}
|
||||
if(data.length == 1)
|
||||
oldConsole.info(data[0]);
|
||||
else
|
||||
oldConsole.info(data[0], data.splice(1));
|
||||
},
|
||||
clear : function()
|
||||
{
|
||||
oldConsole.clear()
|
||||
},
|
||||
assert : function()
|
||||
{
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
data[_i] = arguments[_i];
|
||||
}
|
||||
oldConsole.assert(data[0], data[1], data.splice(2));
|
||||
},
|
||||
group : function()
|
||||
{
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
data[_i] = arguments[_i];
|
||||
}
|
||||
oldConsole.group(data[0], data.splice(1));
|
||||
},
|
||||
groupCollapsed : function()
|
||||
{
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
data[_i] = arguments[_i];
|
||||
}
|
||||
oldConsole.groupCollapsed(data[0], data.splice(1));
|
||||
},
|
||||
groupEnd : function()
|
||||
{
|
||||
oldConsole.groupEnd()
|
||||
}
|
||||
}
|
||||
}(window.console));
|
||||
window.console = newConsole;
|
295
buildtools/love-js/src/game.js
Normal file
295
buildtools/love-js/src/game.js
Normal file
|
@ -0,0 +1,295 @@
|
|||
var Module;
|
||||
|
||||
var CACHEMODULE = {{{cachemodule}}};
|
||||
|
||||
if (typeof Module === 'undefined') Module = eval('(function() { try { return Module || {} } catch(e) { return {} } })()');
|
||||
|
||||
if (!Module.expectedDataFileDownloads) {
|
||||
Module.expectedDataFileDownloads = 0;
|
||||
Module.finishedDataFileDownloads = 0;
|
||||
}
|
||||
Module.expectedDataFileDownloads++;
|
||||
(function() {
|
||||
var loadPackage = function(metadata) {
|
||||
|
||||
var PACKAGE_PATH;
|
||||
if (typeof window === 'object') {
|
||||
PACKAGE_PATH = window['encodeURIComponent'](window.location.pathname.toString().substring(0, window.location.pathname.toString().lastIndexOf('/')) + '/');
|
||||
} else if (typeof location !== 'undefined') {
|
||||
// worker
|
||||
PACKAGE_PATH = encodeURIComponent(location.pathname.toString().substring(0, location.pathname.toString().lastIndexOf('/')) + '/');
|
||||
} else {
|
||||
throw 'using preloaded data can only be done on a web page or in a web worker';
|
||||
}
|
||||
var PACKAGE_NAME = 'game.love';
|
||||
var REMOTE_PACKAGE_BASE = 'game.love';
|
||||
if (typeof Module['locateFilePackage'] === 'function' && !Module['locateFile']) {
|
||||
Module['locateFile'] = Module['locateFilePackage'];
|
||||
Module.printErr('warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)');
|
||||
}
|
||||
var REMOTE_PACKAGE_NAME = typeof Module['locateFile'] === 'function' ?
|
||||
Module['locateFile'](REMOTE_PACKAGE_BASE) :
|
||||
((Module['filePackagePrefixURL'] || '') + REMOTE_PACKAGE_BASE);
|
||||
|
||||
var REMOTE_PACKAGE_SIZE = metadata.remote_package_size;
|
||||
var PACKAGE_UUID = metadata.package_uuid;
|
||||
|
||||
function fetchRemotePackage(packageName, packageSize, callback, errback) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', packageName, true);
|
||||
xhr.responseType = 'arraybuffer';
|
||||
xhr.onprogress = function(event) {
|
||||
var url = packageName;
|
||||
var size = packageSize;
|
||||
if (event.total) size = event.total;
|
||||
if (event.loaded) {
|
||||
if (!xhr.addedTotal) {
|
||||
xhr.addedTotal = true;
|
||||
if (!Module.dataFileDownloads) Module.dataFileDownloads = {};
|
||||
Module.dataFileDownloads[url] = {
|
||||
loaded: event.loaded,
|
||||
total: size
|
||||
};
|
||||
} else {
|
||||
Module.dataFileDownloads[url].loaded = event.loaded;
|
||||
}
|
||||
var total = 0;
|
||||
var loaded = 0;
|
||||
var num = 0;
|
||||
for (var download in Module.dataFileDownloads) {
|
||||
var data = Module.dataFileDownloads[download];
|
||||
total += data.total;
|
||||
loaded += data.loaded;
|
||||
num++;
|
||||
}
|
||||
total = Math.ceil(total * Module.expectedDataFileDownloads/num);
|
||||
if (Module['setStatus']) Module['setStatus']('Downloading data... (' + loaded + '/' + total + ')');
|
||||
} else if (!Module.dataFileDownloads) {
|
||||
if (Module['setStatus']) Module['setStatus']('Downloading data...');
|
||||
}
|
||||
};
|
||||
xhr.onerror = function(event) {
|
||||
throw new Error("NetworkError for: " + packageName);
|
||||
}
|
||||
xhr.onload = function(event) {
|
||||
if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
|
||||
var packageData = xhr.response;
|
||||
callback(packageData);
|
||||
} else {
|
||||
throw new Error(xhr.statusText + " : " + xhr.responseURL);
|
||||
}
|
||||
};
|
||||
xhr.send(null);
|
||||
};
|
||||
|
||||
function handleError(error) {
|
||||
console.error('package error:', error);
|
||||
};
|
||||
|
||||
function runWithFS() {
|
||||
|
||||
function assert(check, msg) {
|
||||
if (!check) throw msg + new Error().stack;
|
||||
}
|
||||
// {{{create_file_paths}}}
|
||||
|
||||
function DataRequest(start, end, crunched, audio) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
this.crunched = crunched;
|
||||
this.audio = audio;
|
||||
}
|
||||
DataRequest.prototype = {
|
||||
requests: {},
|
||||
open: function(mode, name) {
|
||||
this.name = name;
|
||||
this.requests[name] = this;
|
||||
Module['addRunDependency']('fp ' + this.name);
|
||||
},
|
||||
send: function() {},
|
||||
onload: function() {
|
||||
var byteArray = this.byteArray.subarray(this.start, this.end);
|
||||
|
||||
this.finish(byteArray);
|
||||
|
||||
},
|
||||
finish: function(byteArray) {
|
||||
var that = this;
|
||||
|
||||
Module['FS_createDataFile'](this.name, null, byteArray, true, true, true); // canOwn this data in the filesystem, it is a slide into the heap that will never change
|
||||
Module['removeRunDependency']('fp ' + that.name);
|
||||
|
||||
this.requests[this.name] = null;
|
||||
}
|
||||
};
|
||||
|
||||
var files = metadata.files;
|
||||
for (i = 0; i < files.length; ++i) {
|
||||
new DataRequest(files[i].start, files[i].end, files[i].crunched, files[i].audio).open('GET', files[i].filename);
|
||||
}
|
||||
|
||||
|
||||
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
|
||||
var IDB_RO = "readonly";
|
||||
var IDB_RW = "readwrite";
|
||||
var DB_NAME = "EM_PRELOAD_CACHE";
|
||||
var DB_VERSION = 1;
|
||||
var METADATA_STORE_NAME = 'METADATA';
|
||||
var PACKAGE_STORE_NAME = 'PACKAGES';
|
||||
function openDatabase(callback, errback) {
|
||||
try {
|
||||
var openRequest = indexedDB.open(DB_NAME, DB_VERSION);
|
||||
} catch (e) {
|
||||
return errback(e);
|
||||
}
|
||||
openRequest.onupgradeneeded = function(event) {
|
||||
var db = event.target.result;
|
||||
|
||||
if(db.objectStoreNames.contains(PACKAGE_STORE_NAME)) {
|
||||
db.deleteObjectStore(PACKAGE_STORE_NAME);
|
||||
}
|
||||
var packages = db.createObjectStore(PACKAGE_STORE_NAME);
|
||||
|
||||
if(db.objectStoreNames.contains(METADATA_STORE_NAME)) {
|
||||
db.deleteObjectStore(METADATA_STORE_NAME);
|
||||
}
|
||||
var metadata = db.createObjectStore(METADATA_STORE_NAME);
|
||||
};
|
||||
openRequest.onsuccess = function(event) {
|
||||
var db = event.target.result;
|
||||
callback(db);
|
||||
};
|
||||
openRequest.onerror = function(error) {
|
||||
errback(error);
|
||||
};
|
||||
};
|
||||
|
||||
/* Check if there's a cached package, and if so whether it's the latest available */
|
||||
function checkCachedPackage(db, packageName, callback, errback) {
|
||||
var transaction = db.transaction([METADATA_STORE_NAME], IDB_RO);
|
||||
var metadata = transaction.objectStore(METADATA_STORE_NAME);
|
||||
|
||||
var getRequest = metadata.get("metadata/" + packageName);
|
||||
getRequest.onsuccess = function(event) {
|
||||
var result = event.target.result;
|
||||
if (!result) {
|
||||
return callback(false);
|
||||
} else {
|
||||
return callback(PACKAGE_UUID === result.uuid);
|
||||
}
|
||||
};
|
||||
getRequest.onerror = function(error) {
|
||||
errback(error);
|
||||
};
|
||||
};
|
||||
|
||||
function fetchCachedPackage(db, packageName, callback, errback) {
|
||||
var transaction = db.transaction([PACKAGE_STORE_NAME], IDB_RO);
|
||||
var packages = transaction.objectStore(PACKAGE_STORE_NAME);
|
||||
|
||||
var getRequest = packages.get("package/" + packageName);
|
||||
getRequest.onsuccess = function(event) {
|
||||
var result = event.target.result;
|
||||
callback(result);
|
||||
};
|
||||
getRequest.onerror = function(error) {
|
||||
errback(error);
|
||||
};
|
||||
};
|
||||
|
||||
function cacheRemotePackage(db, packageName, packageData, packageMeta, callback, errback) {
|
||||
var transaction_packages = db.transaction([PACKAGE_STORE_NAME], IDB_RW);
|
||||
var packages = transaction_packages.objectStore(PACKAGE_STORE_NAME);
|
||||
|
||||
var putPackageRequest = packages.put(packageData, "package/" + packageName);
|
||||
putPackageRequest.onsuccess = function(event) {
|
||||
var transaction_metadata = db.transaction([METADATA_STORE_NAME], IDB_RW);
|
||||
var metadata = transaction_metadata.objectStore(METADATA_STORE_NAME);
|
||||
var putMetadataRequest = metadata.put(packageMeta, "metadata/" + packageName);
|
||||
putMetadataRequest.onsuccess = function(event) {
|
||||
callback(packageData);
|
||||
};
|
||||
putMetadataRequest.onerror = function(error) {
|
||||
errback(error);
|
||||
};
|
||||
};
|
||||
putPackageRequest.onerror = function(error) {
|
||||
errback(error);
|
||||
};
|
||||
};
|
||||
|
||||
function processPackageData(arrayBuffer) {
|
||||
Module.finishedDataFileDownloads++;
|
||||
assert(arrayBuffer, 'Loading data file failed.');
|
||||
assert(arrayBuffer instanceof ArrayBuffer, 'bad input to processPackageData');
|
||||
var byteArray = new Uint8Array(arrayBuffer);
|
||||
var curr;
|
||||
|
||||
// copy the entire loaded file into a spot in the heap. Files will refer to slices in that. They cannot be freed though
|
||||
// (we may be allocating before malloc is ready, during startup).
|
||||
if (Module['SPLIT_MEMORY']) Module.printErr('warning: you should run the file packager with --no-heap-copy when SPLIT_MEMORY is used, otherwise copying into the heap may fail due to the splitting');
|
||||
var ptr = Module['getMemory'](byteArray.length);
|
||||
Module['HEAPU8'].set(byteArray, ptr);
|
||||
DataRequest.prototype.byteArray = Module['HEAPU8'].subarray(ptr, ptr+byteArray.length);
|
||||
|
||||
var files = metadata.files;
|
||||
for (i = 0; i < files.length; ++i) {
|
||||
DataRequest.prototype.requests[files[i].filename].onload();
|
||||
}
|
||||
Module['removeRunDependency']('datafile_game.data');
|
||||
|
||||
};
|
||||
Module['addRunDependency']('datafile_game.data');
|
||||
|
||||
if (!Module.preloadResults) Module.preloadResults = {};
|
||||
|
||||
function preloadFallback(error) {
|
||||
console.error(error);
|
||||
console.error('falling back to default preload behavior');
|
||||
fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE, processPackageData, handleError);
|
||||
};
|
||||
|
||||
openDatabase(
|
||||
function(db) {
|
||||
checkCachedPackage(db, PACKAGE_PATH + PACKAGE_NAME,
|
||||
function(useCached) {
|
||||
Module.preloadResults[PACKAGE_NAME] = {fromCache: useCached};
|
||||
if (useCached && CACHEMODULE) {
|
||||
console.info('loading ' + PACKAGE_NAME + ' from cache');
|
||||
fetchCachedPackage(db, PACKAGE_PATH + PACKAGE_NAME, processPackageData, preloadFallback);
|
||||
} else {
|
||||
console.info('loading ' + PACKAGE_NAME + ' from remote');
|
||||
fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE,
|
||||
function(packageData) {
|
||||
if(CACHEMODULE){
|
||||
cacheRemotePackage(db, PACKAGE_PATH + PACKAGE_NAME, packageData, {uuid:PACKAGE_UUID}, processPackageData,
|
||||
function(error) {
|
||||
console.error(error);
|
||||
processPackageData(packageData);
|
||||
});}
|
||||
else {
|
||||
processPackageData(packageData);
|
||||
}
|
||||
|
||||
}
|
||||
, preloadFallback);
|
||||
}
|
||||
}
|
||||
, preloadFallback);
|
||||
}
|
||||
, preloadFallback);
|
||||
|
||||
if (Module['setStatus']) Module['setStatus']('Downloading...');
|
||||
|
||||
}
|
||||
if (Module['calledRun']) {
|
||||
runWithFS();
|
||||
} else {
|
||||
if (!Module['preRun']) Module['preRun'] = [];
|
||||
Module["preRun"].push(runWithFS); // FS is not initialized yet, wait for it
|
||||
}
|
||||
|
||||
}
|
||||
loadPackage({{{metadata}}});
|
||||
|
||||
})();
|
162
buildtools/love-js/src/index.html
Normal file
162
buildtools/love-js/src/index.html
Normal file
|
@ -0,0 +1,162 @@
|
|||
<!doctype html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>{{title}}</title>
|
||||
<script src = "consolewrapper.js"></script>
|
||||
<!-- Load custom style sheet -->
|
||||
<link rel="stylesheet" type="text/css" href="theme/love.css">
|
||||
</head>
|
||||
<body>
|
||||
<center>
|
||||
<div>
|
||||
<canvas id="canvas" oncontextmenu="event.preventDefault()"></canvas>
|
||||
<canvas id="loadingCanvas" oncontextmenu="event.preventDefault()"
|
||||
width="{{width}}" height="{{height}}"></canvas>
|
||||
</div>
|
||||
</center>
|
||||
|
||||
<script type='text/javascript'>
|
||||
function goFullScreen(){
|
||||
var canvas = document.getElementById("canvas");
|
||||
if(canvas.requestFullScreen)
|
||||
canvas.requestFullScreen();
|
||||
else if(canvas.webkitRequestFullScreen)
|
||||
canvas.webkitRequestFullScreen();
|
||||
else if(canvas.mozRequestFullScreen)
|
||||
canvas.mozRequestFullScreen();
|
||||
}
|
||||
|
||||
function closeFullScreen() {
|
||||
if (document.exitFullscreen) {
|
||||
document.exitFullscreen();
|
||||
} else if (document.webkitExitFullscreen) { /* Safari */
|
||||
document.webkitExitFullscreen();
|
||||
} else if (document.msExitFullscreen) { /* IE11 */
|
||||
document.msExitFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
function toggleFullScreen(){
|
||||
if((window.fullScreen) || /* firefox */
|
||||
(window.innerWidth == screen.width && /* everything else */
|
||||
window.innerHeight == screen.height)) {
|
||||
closeFullScreen();
|
||||
} else {
|
||||
goFullScreen();
|
||||
}
|
||||
}
|
||||
var loadingContext = document.getElementById('loadingCanvas').getContext('2d');
|
||||
var complete = false;
|
||||
function drawLoadingText(text, soFar, total) {
|
||||
var canvas = loadingContext.canvas;
|
||||
var ratio = complete ? 1 : 0;
|
||||
if (soFar && total){
|
||||
ratio = soFar / total
|
||||
}
|
||||
if (ratio == 1){
|
||||
complete = true
|
||||
}
|
||||
//
|
||||
loadingContext.fillStyle = "rgb({{canvas-colour}})";
|
||||
loadingContext.fillRect(0, 0, canvas.scrollWidth, canvas.scrollHeight);
|
||||
|
||||
loadingContext.font = '2em arial';
|
||||
loadingContext.textAlign = 'center'
|
||||
//
|
||||
loadingContext.fillStyle = "rgb({{text-colour}})";
|
||||
loadingContext.fillText(text, canvas.scrollWidth / 2, (canvas.scrollHeight / 2) - 40);
|
||||
//
|
||||
loadingContext.beginPath();
|
||||
loadingContext.strokeStyle = "rgb({{text-colour}})";
|
||||
loadingContext.rect((canvas.scrollWidth / 2) - 200,
|
||||
( canvas.scrollHeight / 2) - 20,
|
||||
400,
|
||||
40
|
||||
|
||||
|
||||
);
|
||||
loadingContext.stroke();
|
||||
loadingContext.beginPath();
|
||||
loadingContext.rect((canvas.scrollWidth / 2) - 200,
|
||||
( canvas.scrollHeight / 2) - 20,
|
||||
400 * ratio,
|
||||
40
|
||||
|
||||
|
||||
);
|
||||
loadingContext.fill();
|
||||
loadingContext.font = '4em arial';
|
||||
loadingContext.fillText("{{title}}", canvas.scrollWidth / 2, canvas.scrollHeight / 4);
|
||||
loadingContext.font = '2em arial';
|
||||
loadingContext.fillText("{{version}}", canvas.scrollWidth / 2, (canvas.scrollHeight / 4 + 45));
|
||||
loadingContext.font = '1em arial';
|
||||
loadingContext.textAlign = 'left'
|
||||
loadingContext.fillText("Powered By LÖVE", canvas.scrollWidth / 2 - 300, canvas.scrollHeight / 4 * 3);
|
||||
loadingContext.textAlign = 'right'
|
||||
loadingContext.fillText("Game By: {{author}}", canvas.scrollWidth / 2 + 300, canvas.scrollHeight / 4 * 3);
|
||||
}
|
||||
|
||||
window.onload = function () { window.focus(); };
|
||||
window.onclick = function () { window.focus(); };
|
||||
|
||||
window.addEventListener("keydown", function(e) {
|
||||
// space and arrow keys
|
||||
if([32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) {
|
||||
e.preventDefault();
|
||||
}
|
||||
}, false);
|
||||
|
||||
var Module = {
|
||||
arguments: ["game.love","web"],
|
||||
INITIAL_MEMORY: {{initial-memory}},
|
||||
printErr: console.error.bind(console),
|
||||
canvas: (function() {
|
||||
var canvas = document.getElementById('canvas');
|
||||
|
||||
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
|
||||
// application robust, you may want to override this behavior before shipping!
|
||||
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
|
||||
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
|
||||
|
||||
return canvas;
|
||||
})(),
|
||||
setStatus: function(text, soFar, total) {
|
||||
if (text) {
|
||||
drawLoadingText(text, soFar, total);
|
||||
} else if (Module.remainingDependencies === 0) {
|
||||
document.getElementById('loadingCanvas').style.display = 'none';
|
||||
document.getElementById('canvas').style.display = 'block';
|
||||
}
|
||||
},
|
||||
totalDependencies: 0,
|
||||
remainingDependencies: 0,
|
||||
monitorRunDependencies: function(left) {
|
||||
this.remainingDependencies = left;
|
||||
this.totalDependencies = Math.max(this.totalDependencies, left);
|
||||
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.',
|
||||
this.totalDependencies-left,
|
||||
this.totalDependencies);
|
||||
}
|
||||
};
|
||||
Module.setStatus('Downloading...');
|
||||
window.onerror = function(event) {
|
||||
// TODO: do not warn on ok events like simulating an infinite loop or exitStatus
|
||||
Module.setStatus('Exception thrown, see JavaScript console');
|
||||
Module.setStatus = function(text) {
|
||||
if (text) Module.printErr('[post-exception status] ' + text);
|
||||
};
|
||||
};
|
||||
|
||||
var applicationLoad = function(e) {
|
||||
Love(Module);
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript" src="game.js"></script>
|
||||
<script async type="text/javascript" src="love.js" onload="applicationLoad(this)"></script>
|
||||
<!-- <footer> -->
|
||||
<!-- <button onclick="goFullScreen();">Go Fullscreen</button> -->
|
||||
<!-- </footer> -->
|
||||
</body>
|
||||
</html>
|
22
buildtools/love-js/src/love-11.3/compat/love.js
Normal file
22
buildtools/love-js/src/love-11.3/compat/love.js
Normal file
File diff suppressed because one or more lines are too long
BIN
buildtools/love-js/src/love-11.3/compat/love.wasm
Normal file
BIN
buildtools/love-js/src/love-11.3/compat/love.wasm
Normal file
Binary file not shown.
22
buildtools/love-js/src/love-11.3/release/love.js
Normal file
22
buildtools/love-js/src/love-11.3/release/love.js
Normal file
File diff suppressed because one or more lines are too long
BIN
buildtools/love-js/src/love-11.3/release/love.wasm
Normal file
BIN
buildtools/love-js/src/love-11.3/release/love.wasm
Normal file
Binary file not shown.
1
buildtools/love-js/src/love-11.3/release/love.worker.js
Normal file
1
buildtools/love-js/src/love-11.3/release/love.worker.js
Normal file
|
@ -0,0 +1 @@
|
|||
var threadInfoStruct=0;var selfThreadId=0;var parentThreadId=0;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:selfThreadId})}var err=threadPrintErr;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["DYNAMIC_BASE"]=e.data.DYNAMIC_BASE;Module["DYNAMICTOP_PTR"]=e.data.DYNAMICTOP_PTR;Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}Love(Module).then(function(instance){Module=instance;postMessage({"cmd":"loaded"})})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;threadInfoStruct=e.data.threadInfoStruct;Module["registerPthreadPtr"](threadInfoStruct,0,0);selfThreadId=e.data.selfThreadId;parentThreadId=e.data.parentThreadId;var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);try{var result=Module["dynCall"]("ii",e.data.start_routine,[e.data.arg]);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){Atomics.store(Module["HEAPU32"],threadInfoStruct+4>>2,ex instanceof Module["ExitStatus"]?ex.status:-2);Atomics.store(Module["HEAPU32"],threadInfoStruct+0>>2,1);Module["_emscripten_futex_wake"](threadInfoStruct+0,2147483647);if(!(ex instanceof Module["ExitStatus"]))throw ex}}}else if(e.data.cmd==="cancel"){if(threadInfoStruct){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(threadInfoStruct){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex.stack)err(ex.stack);throw ex}};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require("worker_threads");global.Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");var nodeRead=function(filename){return nodeFS.readFileSync(filename,"utf8")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance==="undefined"){performance={now:function(){return Date.now()}}}}
|
22
buildtools/love-js/src/love-11.4/compat/love.js
Normal file
22
buildtools/love-js/src/love-11.4/compat/love.js
Normal file
File diff suppressed because one or more lines are too long
BIN
buildtools/love-js/src/love-11.4/compat/love.wasm
Normal file
BIN
buildtools/love-js/src/love-11.4/compat/love.wasm
Normal file
Binary file not shown.
22
buildtools/love-js/src/love-11.4/release/love.js
Normal file
22
buildtools/love-js/src/love-11.4/release/love.js
Normal file
File diff suppressed because one or more lines are too long
BIN
buildtools/love-js/src/love-11.4/release/love.wasm
Normal file
BIN
buildtools/love-js/src/love-11.4/release/love.wasm
Normal file
Binary file not shown.
1
buildtools/love-js/src/love-11.4/release/love.worker.js
Normal file
1
buildtools/love-js/src/love-11.4/release/love.worker.js
Normal file
|
@ -0,0 +1 @@
|
|||
var threadInfoStruct=0;var selfThreadId=0;var parentThreadId=0;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:selfThreadId})}var err=threadPrintErr;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["DYNAMIC_BASE"]=e.data.DYNAMIC_BASE;Module["DYNAMICTOP_PTR"]=e.data.DYNAMICTOP_PTR;Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}Love(Module).then(function(instance){Module=instance;postMessage({"cmd":"loaded"})})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;threadInfoStruct=e.data.threadInfoStruct;Module["registerPthreadPtr"](threadInfoStruct,0,0);selfThreadId=e.data.selfThreadId;parentThreadId=e.data.parentThreadId;var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);try{var result=Module["dynCall_ii"](e.data.start_routine,e.data.arg);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){Atomics.store(Module["HEAPU32"],threadInfoStruct+4>>2,ex instanceof Module["ExitStatus"]?ex.status:-2);Atomics.store(Module["HEAPU32"],threadInfoStruct+0>>2,1);Module["_emscripten_futex_wake"](threadInfoStruct+0,2147483647);if(!(ex instanceof Module["ExitStatus"]))throw ex}}}else if(e.data.cmd==="cancel"){if(threadInfoStruct){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(threadInfoStruct){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex.stack)err(ex.stack);throw ex}};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require("worker_threads");global.Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");var nodeRead=function(filename){return nodeFS.readFileSync(filename,"utf8")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance==="undefined"){performance={now:function(){return Date.now()}}}}
|
18
buildtools/love-js/src/love-11.5/compat/love.js
Normal file
18
buildtools/love-js/src/love-11.5/compat/love.js
Normal file
File diff suppressed because one or more lines are too long
BIN
buildtools/love-js/src/love-11.5/compat/love.wasm
Normal file
BIN
buildtools/love-js/src/love-11.5/compat/love.wasm
Normal file
Binary file not shown.
18
buildtools/love-js/src/love-11.5/release/love.js
Normal file
18
buildtools/love-js/src/love-11.5/release/love.js
Normal file
File diff suppressed because one or more lines are too long
BIN
buildtools/love-js/src/love-11.5/release/love.wasm
Normal file
BIN
buildtools/love-js/src/love-11.5/release/love.wasm
Normal file
Binary file not shown.
1
buildtools/love-js/src/love-11.5/release/love.worker.js
Normal file
1
buildtools/love-js/src/love-11.5/release/love.worker.js
Normal file
|
@ -0,0 +1 @@
|
|||
"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");var vm=require("vm");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>vm.runInThisContext(fs.readFileSync(f,"utf8"),{filename:f}),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(...args){var text=args.join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(...args){var text=args.join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance,module)};self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}Love(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err(`worker.js received unknown command ${e.data.cmd}`);err(e.data)}}catch(ex){Module["__emscripten_thread_crashed"]?.();throw ex}}self.onmessage=handleMessage;
|
48
buildtools/love-js/src/love.css
Normal file
48
buildtools/love-js/src/love.css
Normal file
|
@ -0,0 +1,48 @@
|
|||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-family: arial;
|
||||
color: rgb( 11, 86, 117 );
|
||||
}
|
||||
|
||||
body {
|
||||
background-repeat: no-repeat;
|
||||
font-family: arial;
|
||||
margin: 0;
|
||||
padding: none;
|
||||
background-color: rgb({{page-colour}});
|
||||
color: rgb( 28, 78, 104 );
|
||||
}
|
||||
|
||||
footer {
|
||||
font-family: arial;
|
||||
font-size: 12px;
|
||||
padding-left: 10px;
|
||||
padding-bottom: 10px;
|
||||
position:absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Links */
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
a:link {
|
||||
color: rgb( 233, 73, 154 );
|
||||
}
|
||||
a:visited {
|
||||
color: rgb( 110, 30, 71 );
|
||||
}
|
||||
a:hover {
|
||||
color: rgb( 252, 207, 230 );
|
||||
}
|
||||
|
||||
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
|
||||
#canvas {
|
||||
padding-right: 0;
|
||||
display: none;
|
||||
border: 0px none;
|
||||
}
|
22
buildtools/love-js/src/serve.py
Normal file
22
buildtools/love-js/src/serve.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# Attribution: https://stackoverflow.com/questions/21956683/enable-access-control-on-simple-http-server
|
||||
|
||||
try:
|
||||
# Python 3
|
||||
from http.server import HTTPServer, SimpleHTTPRequestHandler, test as test_orig
|
||||
import sys
|
||||
def test (*args):
|
||||
test_orig(*args, port=int(sys.argv[1]) if len(sys.argv) > 1 else 8000)
|
||||
except ImportError: # Python 2
|
||||
from BaseHTTPServer import HTTPServer, test
|
||||
from SimpleHTTPServer import SimpleHTTPRequestHandler
|
||||
|
||||
class CORSRequestHandler (SimpleHTTPRequestHandler):
|
||||
def end_headers (self):
|
||||
self.send_header('Cross-Origin-Opener-Policy', 'same-origin')
|
||||
self.send_header('Cross-Origin-Embedder-Policy', 'require-corp')
|
||||
SimpleHTTPRequestHandler.end_headers(self)
|
||||
|
||||
if __name__ == '__main__':
|
||||
test(CORSRequestHandler, HTTPServer)
|
Loading…
Add table
Add a link
Reference in a new issue