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, '&');
|
|
|
|
input = input.replace(/</g, '<');
|
|
|
|
input = input.replace(/>/g, '>');
|
|
|
|
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>
|