WebAdventure/web/index.html

292 lines
102 KiB
HTML
Raw Normal View History

2019-06-05 22:18:59 +02:00
<!DOCTYPE html>
<html>
2019-07-23 08:27:24 +02:00
<head>
<meta charset="utf-8"/>
<title>KIDNAPPD JSON</title>
<link rel="stylesheet" type="text/css" href="deps/opt/bootstrap.css"/>
</head>
<body>
2019-08-05 21:26:57 +02:00
<img style="margin: auto; width: 350px; display: block" width="350" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAFBBB4DASIAAhEBAxEB/8QAHQABAAIDAQEBAQAAAAAAAAAAAAgJBQYHBAMCAf/EAFkQAAEDBAEDAgMFBQQFBwYKCwECAwQABQYRBwgSIRMxIkFRCRQyYXEVI0KBkRZSYqEkM3KCkxcYQ3OSorE0U2ODo9ElJjhXhaW0wdPw8Rk3VnWUlbLC0tT/xAAdAQEAAgMBAQEBAAAAAAAAAAAABQYEBwgDAgEJ/8QARhEAAQMDAQUGAwUGBQMDBAMAAQACEQMEBSEGEjFBUQcTImFxgZGhsRQywdHwFSMzQlLhYnKCkvEWJKJDssIlNERTc9Lj/9oADAMBAAIRAxEAPwCz2lKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUryXd19i0zX4syNEebjuLbkSU9zLKgkkLWARtIPkjY8A+R71+EwJX0xu+4N6r10qpXmflzJOXs2k5NeZ7pZSQiFES4r0YiAACloH2BI33aBV7nXsJJ9LHWBabPYH8L5oyZxlNuQFWu6PtOvqca9iw4UJUolPulRHkbG/CQYO3z1CtXNJw3RyJPH8ltrMdj+WxeKbkKLu9qaF9NrTvNn+kgnfjnoOokBTXpUdL3158D2l304C8hvKe7XqQbcEJ19f362zr+W67Vx9ndg5Mw+25vjDjqrddGytsPICXEKSopWhYBICkqSoHRI8eCRo1KUbyhXcWUngkdFr7I7NZfEUG3N/bPpscYBcCNeMa6gwDx6LYaUpWSoRKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKrz61+X8qvebS+LTemv2VYpCi63BKkNSSsJcbDw7j3LbCuwj27klQ0VdqcG/vm2FLvXCeQHmrXsfspX2wyIsKLwwAbznETDRpMaTqQIkcfVWGUqtfpW6k53EOSNY9ld0fcwy4KKZCFhTv3Bw+z7aRsgb8LSkeQd6JAqVuQdb/AE/WQKEO/wByvS0jZRb7c57/AEBe9NJ/rr868LXMW1xS7x7g08wT+pUxn+zPO4fIfY7ai6u0iWvYwwR58Q0jmCehnVd7pXNuFufsG51h3OTh7VzjOWlxtEmNcWUNuhLgJQsdi1pKT2rHvvaTsDxvpNSNKqyswPpmQVSL+wusXcOtLxhZUbxaeIkSPkZSlKV6LDSlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREr8uNtvNrZebSttaSlSVDYUD7gj5iv1SicFT1yPjCsLz/I8SUkhNoukmI3v+JtDighXn5FOiP1rXK711uY6mw9QF2lNtlDd6hxLika8bLfpKI/VTKj+pNcFrWN3S7iu+n0JXemzuQ/auItr0nV9NpPqQJ+cpVm3RVGfj9OuOKebKA+9OdRv5p+9ODf+RqubBcRn57mVmwy2Ooak3mY1DQ44CUt9ytFagPOkjZOvpVumH4vbMJxW04jZkFMK0Q2obPdruUlCQO5WvdROyT8yTU9s3Qcar63ICPcwVqPtyytGnj7fFj+I5+/6NaHN+Zdp6FZelKVcFzOlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKVAPqr6pM0f5IlYlxrlk60WrHiqG+9Be9NUuUD+9JUnyUpI7APqlR+dYV9fU7Cn3lTXoFaNk9k73a+9NnZkNgbznGYA9uZOgH4AqflK5V0xWzKoPDNiuGaZDdbxd72g3V164y3JDjaHtFptJcJKUhsIPb7BRV48muq1k0ahq02vIiRMKFyVm3H3lW0a8PDHFu8OBgxI8uiUpSvRYKUpSiJSlKIlVxdd2KJx/nBd5YZCGcitsecSlOgXUbZWP100hR/2vrVjtQ7+0Xx1Ltgw7LUNkGLMk25xQHgh1CXEA/p6K9fqah87S7yycf6YP4fitm9keQNjtRSpzAqtcw/DeHzaFBulKVQl2ApmfZxxnzcM7mBs+ilm3tFXy7ip86/oD/l9am5XG+k/ilviviO3tSFJcul/CLvOWB+FTiE+m0N+dIR2g/wCIrI8GuyVsXFUHW9oxjuPH4mVxL2g5WjmtpLq7t9WSGg9dxobPuRI8kpSlSCpiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoixmQ5RjeI29V2ym/2+0Qknt9ebJQygnW9AqI2fHsPJqCnVb1M3e75lDh8N8sT02Fq3pEgWpbsXtl+o53fvQlKlgo9PWlFPv8APddS6keqfDcVuU7BJ3D6r7ebeXEMryKC19yT3DQeaCu5TqFAD27O4fOoDyXzJkOyVNttl1allLaAhCdnekpHgD6Ae1VTN5T/APHou9YmRC6J7KtgWtjMZSiZjwB245rg7nEE6CIJjjpotzRzjzS2tLieXczJSQR3X6UoePqCvR/Q1I7gfrrnwF/2e5ueXMi9pLF7Yj7ebIHhDzaB8YPsFJHcD7hW9ph1SoG3yFzbP32OPodQVtzNbGYTPWxtrq3aOjmgNc3zBA+RkHmCrGunjnPkXnXlDJryxCRA48tkX7vEjOMp9UyVLQW1KcA2pZQlwqSD2pC0jROlGR1ce6ScHTg3BGOx3GeyXeWzeZX5qf0pG/oQ0Gh/Kuw1fbAVBbtdVMuOp9+XsuQNsKlk7MVqWOphlGmdxoHMM8O8TzLiCZOp5pSlKzFWUpSlESlKURKUqNvPXWhjfFd4m4VitkXfchhfu5Ljq/SiRHCnYST5U6obG0p0POu7YIHhcXNK0Z3lYwFL4TA5DaK6+yY2mXv4ngAB1JMAD1+qklSq/uBOtjKsYva7Ty5cZN8sdxkKcM5Y7pMBa1bJGvxMgn8AG0j8Hgdhnzbblb7xb491tU1mXDltJeYfZWFtutqG0qSoeCCK8bK/o37N6nxHEcwpParY7JbIXAo3zZa77r2/dd1joRzB19tV6KUpWaqqlKUoiUpSiJSlKIq/ftDVsHlqwNpT++TjjSlnXukyZHaN/qFf1qLNdo6wMtRlvPuRrYX3R7Qpu0tefYsp04P+KXK4vWt8lUFS7qOHU/LRdx7DWj7HZyyo1OPdtP8Au8Ue0wu19GtvYuHUXiokFPbHEyQEn+JSYrvbr9Do/wAqs9qrvo+TLPUZh6oaVFSXJZWQAdN
<div style="float: left; position: absolute; top: 5px"><h1 style="display: block">Level Editor</h1>
2019-07-23 08:27:24 +02:00
<button onclick="resetServer()">Reset</button>
2019-08-05 21:26:57 +02:00
<button onclick="generateForm()">LOS</button>
<input type="text" id="oldJSON">
<a href="https://developer.amazon.com/de/docs/custom-skills/ask-soundlibrary.html" target="_blank"><button type="button">Sound Library</button></a>
</div>
<button id="addBreakBtn" onclick="insertAtCursor(1)">Pause einfügen</button>
<button id="addEmphBtn" onclick="insertAtCursor(2)">Betonung einfügen</button>
<button id="addSoundBtn" onclick="insertAtCursor(3)">Ton einfügen</button>
2019-07-23 08:27:24 +02:00
<form></form>
<div id="res" class="alert"></div>
<script type="text/javascript" src="deps/jquery.min.js"></script>
<script type="text/javascript" src="deps/underscore.js"></script>
<script type="text/javascript" src="deps/opt/jsv.js"></script>
<script type="text/javascript" src="lib/jsonform.js"></script>
<script type="text/javascript">
2019-08-05 21:26:57 +02:00
var oldJSON = {};
function generateForm() {
if ($("#oldJSON").val() != "") {
oldJSON = JSON.parse($("#oldJSON").val());
}
console.log(oldJSON);
$('form').jsonForm({
schema: {
"room": {
"type": "tabarray",
"items": {
"type": "object",
"title": "Room",
"properties": {
"id": {
2019-07-23 08:27:24 +02:00
"type": "integer",
2019-08-05 21:26:57 +02:00
"title": "ID",
"required": true
},
"name": {
"type": "string",
"title": "Name",
"required": true
},
"description": {
"type": "string",
"title": "Description",
"required": true
},
"gameoverFlag": {
"type": "boolean",
"title": "GameoverFlag"
},
2019-07-23 08:27:24 +02:00
"items": {
2019-08-05 21:26:57 +02:00
"type": "tabarray",
"items": {
"type": "integer",
"title": "Item"
}
},
"puzzles": {
"type": "tabarray",
"items": {
"type": "integer",
"title": "Puzzle"
}
2019-07-23 08:27:24 +02:00
}
2019-08-05 21:26:57 +02:00
}
2019-07-23 08:27:24 +02:00
}
2019-08-05 21:26:57 +02:00
},
"puzzle": {
"type": "tabarray",
"items": {
"type": "object",
"title": "Puzzle",
"properties": {
"id": {
"type": "integer",
"title": "ID",
"required": true
},
"name": {
"type": "string",
"title": "Name",
"required": true
},
2019-07-23 08:27:24 +02:00
"items": {
2019-08-05 21:26:57 +02:00
"type": "tabarray",
"items": {
"type": "integer",
"title": "Item"
}
},
"description": {
"type": "string",
"title": "Description",
"required": true
},
"solved": {
"type": "boolean",
"title": "solved"
},
"solvedText": {
"type": "string",
"title": "SolvedText",
"required": true
},
"gameOverFlag": {
"type": "boolean",
"title": "GameOverFlag"
},
"dependencyText": {
"type": "string",
"title": "DependencyText"
}, "dependency": {
"type": "integer",
"title": "Dependency",
}, "nextRoom": {
2019-07-23 08:27:24 +02:00
"type": "integer",
2019-08-05 21:26:57 +02:00
"title": "NextRoom",
2019-07-23 08:27:24 +02:00
}
}
}
2019-08-05 21:26:57 +02:00
},
"item": {
"type": "tabarray",
"items": {
"type": "object",
"title": "Item",
"properties": {
"id": {
"type": "integer",
"title": "ID",
"required": true
},
"name": {
"type": "string",
"title": "Name",
"required": true
},
"portableFlag": {
"type": "boolean",
"title": "PortableFlag"
},
"hiddenFlag": {
"type": "boolean",
"title": "HiddenFlag"
},
"description": {
"type": "string",
"title": "Description",
"required": true
}
2019-07-23 08:27:24 +02:00
}
2019-06-05 22:18:59 +02:00
}
2019-08-05 21:26:57 +02:00
},
"story": {
"type": "tabarray",
"items": {
"type": "string",
"title": "Story"
}
2019-07-23 08:27:24 +02:00
}
2019-08-05 21:26:57 +02:00
2019-07-23 08:27:24 +02:00
},
2019-08-05 21:26:57 +02:00
"value": oldJSON
,
onSubmit: function (errors, values) {
if (errors) {
$('#res').html('<p>Something went wrong, please try again.</p>');
} else {
2019-07-23 08:27:24 +02:00
2019-08-05 21:26:57 +02:00
var divToPrint = magic(JSON.stringify(values, null, 4));
2019-07-23 08:27:24 +02:00
2019-08-05 21:26:57 +02:00
var newWin = window.open('', 'Print-Window');
2019-07-23 08:27:24 +02:00
2019-08-05 21:26:57 +02:00
newWin.document.open();
2019-07-23 08:27:24 +02:00
2019-08-05 21:26:57 +02:00
newWin.document.write('<html><body><pre>' + divToPrint + '</pre></body><style>html{word-break: break-all;background-color: #0b0e07; color: white; width: 100%; height: 100%}</style></html>');
2019-07-23 08:27:24 +02:00
2019-08-05 21:26:57 +02:00
newWin.document.close();
console.log("hier: " + JSON.stringify(values));
$.post("https://medinf.efi.th-nuernberg.de/tomcat/WebAdventure/IO?levelsubmit", values);
2019-07-23 08:27:24 +02:00
2019-08-05 21:26:57 +02:00
$.post("https://medinf.efi.th-nuernberg.de/tomcat/WebAdventure/IO?levelsubmit="+JSON.stringify(values));
}
2019-06-05 22:18:59 +02:00
}
2019-08-05 21:26:57 +02:00
});
}
function magic(input) {
input = input.replace(/&/g, '&amp;');
input = input.replace(/</g, '&lt;');
input = input.replace(/>/g, '&gt;');
return input;
}
2019-07-23 08:27:24 +02:00
function resetServer() {
2019-08-05 21:26:57 +02:00
$.post("https://medinf.efi.th-nuernberg.de/tomcat/WebAdventure/IO?levelreset=true", {"reset": true});
}
$('button').on('mousedown',
/** @param {!jQuery.Event} event */
function (event) {
event.preventDefault();
}
);
function insertAtCursor(n) {
var textToInsert;
//get text to insert
switch (n) {
case 1:
textToInsert = "<break time=\"1s\"/> "
break;
case 2:
textToInsert = "<emphasis level=\"strong\">X</emphasis>"
break;
case 3:
textToInsert = "<audio src=\"URL\"/>"
break;
default:
// code block
}
// get current text of the input
var input = document.activeElement;
var value = input.value;
// save selection start and end position
var start = input.selectionStart;
var end = input.selectionEnd;
// update the value with our text inserted
input.value = value.slice(0, start) + textToInsert + value.slice(end);
// update cursor to be at the end of insertion
input.selectionStart = input.selectionEnd = start + textToInsert.length;
2019-07-23 08:27:24 +02:00
}
2019-08-05 21:26:57 +02:00
2019-07-23 08:27:24 +02:00
</script>
2019-08-05 21:26:57 +02:00
<style>html {
padding: 10px
}
#addBreakBtn {
position: fixed;
top: 10px;
right: 10px
}
#addEmphBtn {
position: fixed;
top: 10px;
right: 125px
}
2019-07-23 08:27:24 +02:00
2019-08-05 21:26:57 +02:00
#addSoundBtn {
position: fixed;
top: 10px;
right: 261px
}
</style>
2019-07-23 08:27:24 +02:00
</body>
2019-06-05 22:18:59 +02:00
</html>