Compare commits

..

51 Commits
2.0 ... master

Author SHA1 Message Date
b4c444769c fix toString if we get a blob 2023-01-29 17:57:30 +01:00
16bdb4e4f8 Merge branch 'master' of https://github.com/cracker0dks/Familienduell 2022-12-09 13:36:11 +01:00
5d8d4d9eae dont crash on split 2022-12-09 13:36:06 +01:00
80f4d7d152
Update README.md 2022-08-18 17:26:51 +02:00
925d04da85 add an other .toString() 2022-08-11 22:43:46 +02:00
b50c359f70 add to string function to be save 2022-01-09 23:30:27 +01:00
8919fa4f9a fix final score and connected position 2020-09-07 13:45:43 +02:00
raphael
b6d9313c23 update README 2019-08-26 14:14:49 +02:00
Alexander Hüllmandel
74b98ec8f4
Adapt description even more 2019-08-25 20:55:24 +02:00
Alexander Hüllmandel
cbb7a709c1
Remove unnecessary sound options. Reorder intro controls to represent correct order of execution 2019-08-25 15:10:17 +02:00
Alexander Hüllmandel
645c69512b
Adjust description for final mode 2019-08-25 15:02:11 +02:00
Alexander Hüllmandel
005e98345d
Default alternative answers to 0 2019-08-25 15:01:41 +02:00
Alexander Hüllmandel
573aa2e41e
Show questions in final mode for controller 2019-08-25 14:56:46 +02:00
Alexander Hüllmandel
197d35718b
Easier start of final mode 2019-08-25 14:36:49 +02:00
Alexander Hüllmandel
646d5ef89e
Show final scores feature 2019-08-25 12:01:10 +02:00
Alexander Hüllmandel
874367e398
Nicer formatting for sum scores in final. Better animation for 2nd player answers 2019-08-25 03:10:02 +02:00
Alexander Hüllmandel
a9f140a097
Change normal round description (3 instead of 4) in Ablaufplan 2019-08-25 03:09:18 +02:00
Alexander Hüllmandel
f703856b59
Somewhat responsive 2019-08-24 23:52:56 +02:00
Alexander Hüllmandel
c6bbeb2b46
Fix pig not hidden when cancelling animation 2019-08-24 21:11:13 +02:00
Alexander Hüllmandel
9cebb7f6f0
Add blind animations for pigs and questions (more authentic) 2019-08-21 15:13:48 +02:00
Alexander Hüllmandel
2c954b3477
Use high res images for pigs, adapt size to container 2019-08-21 14:25:06 +02:00
Alexander Hüllmandel
ff4287d3cd
Update jQuery UI 2019-08-21 14:24:33 +02:00
cracker
631d8661b8 update README 2019-01-02 03:36:54 +01:00
cracker
c21fa1dced remove obsolete sound file 2019-01-02 03:31:55 +01:00
cracker
9e3bd6ca1c move some files 2019-01-02 03:31:13 +01:00
cracker
bd3e1e8cdd fix disconnect Icon 2019-01-02 03:30:46 +01:00
cracker
2a0fbd941f fix sound 2019-01-02 03:30:18 +01:00
Conval
42f30f460d
Add files via upload 2019-01-02 02:59:44 +01:00
Conval
a4374da58e
Delete Ablaufplan.doc 2019-01-02 02:54:21 +01:00
ConvalAtGit
4c0e89c90e
Add files via upload
Grafische Überarbeitung, Erweiterung Finalmodus um Counter und Hinzufügen von unterstützenden Word- und Excel-Dateien
2019-01-02 02:24:11 +01:00
cracker
9396a3317a Merge branch 'master' of https://github.com/cracker0dks/Familienduell 2018-11-01 16:34:33 +01:00
cracker
81d6867a1c change sounds to .ogg 2018-11-01 16:33:53 +01:00
Cracker
d6a6ab01ec
Update README.md 2018-09-04 13:57:10 +02:00
Cracker
5e97a7b740
Update README.md 2018-09-03 18:20:57 +02:00
cracker
48a43d0fb3 inc type speed 2018-09-03 15:19:35 +02:00
cracker
c58cb8685e dont send points more than once 2018-09-03 15:07:44 +02:00
rofl256
79b3531fc1 fix spelling 2018-08-20 11:59:18 +02:00
rofl256
c2d54fe5ec fix final mode 2018-08-17 13:26:46 +02:00
rofl256
aa8825cb90 update failFinal Sound 2018-08-13 17:58:01 +02:00
rofl256
50b5608da5 add links rechts lable 2018-08-13 17:54:33 +02:00
rofl256
41d499fd2a fix final 6 questions bug 2018-08-13 17:48:47 +02:00
rofl256
37bc34ad20 fix final intro bug 2018-08-06 11:16:50 +02:00
rofl256
bc55e69bac add more questions 2018-07-27 18:39:28 +02:00
rofl256
b40b9c4c8e Merge remote-tracking branch 'origin/master' 2018-07-25 00:42:42 +02:00
rofl256
d1bc8d8ba8 update default questions 2018-07-25 00:40:31 +02:00
Cracker
388fc394d2
Update README.md 2018-06-23 16:22:25 +02:00
rofl256
fec7dd4a2f update README 2018-06-22 13:30:58 +02:00
rofl256
e236c1af5d improve code 2018-06-22 13:24:12 +02:00
Cracker
6003fa0f73
Update README.md 2018-05-06 18:00:09 +02:00
Cracker
a0f2fba006
Update README.md 2018-05-06 17:58:23 +02:00
rofl256
72e25dcff9 update README 2018-05-06 17:51:26 +02:00
41 changed files with 552 additions and 216 deletions

View File

@ -7,10 +7,9 @@ Familienduell Client / Server (NodeJs Javascript)
### -A- START DES SERVERS! ### -A- START DES SERVERS!
___Windows___ ___Windows___
1. Im Ordner "server" die Datei StartServer.bat doppelklicken. 1. Im Ordner "server" die Datei StartServer.bat doppelklicken.
* Im Fenster das jetzt erscheint sollte: "SERVER IS UP AND RUNNING" stehen. * Im Fenster das jetzt erscheint sollte: "SERVER IS UP AND RUNNING" stehen.
* Falls die Firewall fragt, solltest du die Anfrage zulassen da sonst der client nicht verbinden kann. * Falls die Firewall fragt, solltest du die Anfrage zulassen da sonst der Client nicht verbinden kann.
___Mac___ ___Mac___
@ -34,7 +33,7 @@ ___Mac___
### -C- Start des Displays ### -C- Start des Displays
1. In einem neuen Browserfenster verbinden und auf display klicken. 1. In einem neuen Browserfenster/tab verbinden und auf "Display" klicken.
--------------------------- ---------------------------
@ -44,8 +43,11 @@ Q: Warum ist das Display zu Beginn schwarz, und wie kann ich das ändern?
A: Das Bild ist schwarz damit man die Intromusik starten kann und die Leute (Zuschauer) nicht schon vorher wissen was auf sie zukommt. A: Das Bild ist schwarz damit man die Intromusik starten kann und die Leute (Zuschauer) nicht schon vorher wissen was auf sie zukommt.
Dies kann (Im Controller) über die Checkbox "Blackscreen", im Bereich "Intro" kontrolliert werden. Dies kann (Im Controller) über die Checkbox "Blackscreen", im Bereich "Intro" kontrolliert werden.
Q: Warum bekomm ich die Fehlermeldung "node.exe wurde falsch geschrieben oder konnte nicht gefunden werden"?<br>
A: Die heruntergeladene zip Datei muss zunächst entpack werden. Rechtsklick auf die Datei -> Alles etpacken.
Q: Wie funktioniert das mit 2 oder mehr Geräten? Q: Wie funktioniert das mit 2 oder mehr Geräten?
A: Verwende dazu einfach eine Externe IP des Servers (aus dem Serverfenster) zum Verbinden von einem anderen Gerät aus A: Alle Geräte müssen im gleichen Netzwerk sein. Dann verwende einfach eine Externe IP des Servers (aus dem Serverfenster) zum verbinden von einem anderen Gerät aus.
Q: Läuft der Server mit nodeJs auch unter Linux / Läuft der Python Server auch unter Windows? Q: Läuft der Server mit nodeJs auch unter Linux / Läuft der Python Server auch unter Windows?
A: Ja, dafür müssen jedoch zunächst die etsprechenden Abhänigkeiten installiert werden. A: Ja, dafür müssen jedoch zunächst die etsprechenden Abhänigkeiten installiert werden.
@ -53,19 +55,21 @@ A: Ja, dafür müssen jedoch zunächst die etsprechenden Abhänigkeiten installi
Q: Gibt es eine Funktion um Leuten über einen Link direkt das Zuschauen zu ermöglichen? Q: Gibt es eine Funktion um Leuten über einen Link direkt das Zuschauen zu ermöglichen?
A: Ja. Der Link lautet: http://SERVERURL/PFAD/index.html?viewonly=true (SERVERURL und PFAD anpassen!) A: Ja. Der Link lautet: http://SERVERURL/PFAD/index.html?viewonly=true (SERVERURL und PFAD anpassen!)
Q: Ich erhalten im Serverfenster den Fehler: Error: listen EADDRINUSE
A: Eine andere Anwendung blockiert bereits den Port. Beende diese und starte den Server erneut
Q: Ich habe sonstige Fehler bei (Anzeige, Verbindungsaufbau, Anwendungsverhalten) Q: Ich habe sonstige Fehler bei (Anzeige, Verbindungsaufbau, Anwendungsverhalten)
A: Falls du einen anderen Browser als Google Chrome verwendest, installiere Chrome. A: Falls du einen anderen Browser als Google Chrome verwendest, installiere Chrome.
Q: Ich erhalten im Serverfenster den Fehler: Error: listen EADDRINUSE Sonstige Fragen, Fehlermeldungen, Beschwerden oder auch Spenden (Paypal) per Mail an: raphael.fritsch@gmx.de
A: Eine andere Anwendung blockiert bereits den Port. Beenden diese starte den Server erneut
Q: Ich habe sonstige Probleme oder Fragen...
A: Fragen, Fehlermeldungen, Beschwerden per Mail an: rofl256@googlemail.com
--------------------------- ---------------------------
Programmierung: cracker aka rofl256 Programmierung: cracker
Unterstützt durch: DiggerTigger, Anni & Naseile Unterstützt durch: DiggerTigger, Anni & Naseile
Danke auch an: Danke auch an:
* [flbe](https://github.com/flbe) für den Python Server * [flbe](https://github.com/flbe) für den Python Server
* [susgo](https://github.com/susgo) für den Finalmodus * [susgo](https://github.com/susgo) für den Finalmodus
* [ConvalAtGit](https://github.com/ConvalAtGit) für viele Verbesserungen, Redesign und zusätzliche Word und Excel Dokumente
* [fruitcoder](https://github.com/fruitcoder/) Design verbesserungen

BIN
dokumente/Ablaufplan.doc Normal file

Binary file not shown.

BIN
dokumente/Auswertung.xlsx Normal file

Binary file not shown.

Binary file not shown.

BIN
dokumente/Fragen.doc Normal file

Binary file not shown.

Binary file not shown.

BIN
dokumente/Schilder.doc Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
[InternetShortcut]
URL=http://127.0.0.1:8080/

File diff suppressed because one or more lines are too long

View File

@ -49,7 +49,7 @@ wss.on('connection', function(ws) {
console.log("~~~~~~~~ WELCOME TO SERVER ~~~~~~ s:"+subscribers.length); console.log("~~~~~~~~ WELCOME TO SERVER ~~~~~~ s:"+subscribers.length);
ws.on('message', function(message) { ws.on('message', function(message) {
console.log('msg: ' + message); console.log('msg: ' + message);
var parts = message.split("###"); var parts = message.toString().split("###");
if(parts[0] != "fileOp") { if(parts[0] != "fileOp") {
broadcastMessage(getClientId(), message); broadcastMessage(getClientId(), message);
} else { } else {
@ -89,7 +89,7 @@ wss.on('connection', function(ws) {
}); });
function broadcastMessage(clientId, msg) { function broadcastMessage(clientId, msg) {
console.log("broadcast:"+msg.split("###")[0]+" length:"+subscribers.length); console.log("broadcast:", msg.toString().split("###")[0], "length:", subscribers.length);
for(var i=0;i<subscribers.length;i++) { for(var i=0;i<subscribers.length;i++) {
if(subscribers[i] != null) if(subscribers[i] != null)
subscribers[i].send(msg); subscribers[i].send(msg);

View File

@ -1,11 +1,27 @@
body {
font-family: monospace;
background: url(../img/background.jpg) no-repeat;
background-position: center center;
background-attachment: fixed;
background-size: cover;
display: flex;
align-items: center; /* Vertikale Zentrierung */
justify-content: center; /* Horizontale Zentrierung */
}
#allContent {
position: relative;
}
.textColor { .textColor {
color:#aeb130; color:#ddff06;
font-weight:bold; font-weight:bold;
font-size: 1.5em; font-size: 1.5em;
} }
.bgColor{ .bgColor{
background:#525463; background:#000000;
} }
.antwortInp, .questionIn, .questionKIn { .antwortInp, .questionIn, .questionKIn {
@ -26,28 +42,115 @@
color:gray; color:gray;
} }
.xmarker {
font-family: Verdana, Helvetica, sans-serif;
font-weight: bold;
z-index: 3;
box-shadow: 3px 5px 35px rgba(0, 0, 0, 0.65);
border: 2px #595959 solid;
border-radius: 2px;
text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.15), 1px 1px 1px rgba(255, 255, 255, 0.20);
font-size: 2em;
background: #595959;
height: 56px;
padding-left: 12px;
padding-right: 12px;
color: rgb(66, 66, 66);
/* box-shadow: 5px 5px 5px -1px rgba(0, 0, 0, 0.65), 0 5px 5px -5px rgba(0, 0, 0, 0.65); */
}
.noIntro { .noIntro {
display:none; display:none;
} }
.footer { .footer {
background:#aeb130; background:#ddff06;
color:rgb(100, 100, 100); color: #000000;
} }
.mainHight { #buttonsDownUnder {
height: 530px; background: #ffffff;
padding: 20px;
margin-top: 70px;
box-shadow: 3px 5px 35px rgba(0, 0, 0, 0.65);
}
#buttonsDownUnder td{
padding: 5px;
}
.mainHeight {
position: relative;
width: 80vw;
height: 40vw;
min-height: 520px;
min-width: 1020px;
margin: auto;
margin-bottom: 50px;
z-index: 5;
border: 10px #c0c0c0 ridge;
border-radius: 2px;
box-shadow: 3px 5px 35px rgba(0, 0, 0, 0.65);
}
#timer {
background: #000000;
z-index: 5;
border: 10px #c0c0c0 ridge;
border-radius: 2px;
box-shadow: 3px 5px 35px rgba(0, 0, 0, 0.65);
}
#blackScreen {
z-index: 6;
}
#editQuestionsDiv {
border-radius: 2px;
z-index: 7;
} }
#answers { #answers {
overflow: hidden;
font-family: monospace; font-family: monospace;
padding-top: 55px; font-size: 2.5vw;
padding-left: 18px; white-space: nowrap;
}
.answer {
overflow: hidden;
white-space: nowrap;
}
#displayQuestions {
overflow: hidden;
font-size: 2.5vw;
white-space: unset;
text-overflow: unset;
}
#resultFinal {
font-size: 2.5vw;
}
.questionAnswerContainer {
padding-top: 20px;
padding-left: 20px;
width: calc(100% - 20px);
}
@media (max-width: 1275px) {
#answers {
font-size: 1.5em;
}
#resultFinal {
font-size: 1.5em; font-size: 1.5em;
} }
#displayQuestions { #displayQuestions {
position:absolute; white-space: nowrap;
top:15px; text-overflow: ellipsis;
left:15px; font-size: 1.5em;
}
} }

BIN
web/img/background.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

BIN
web/img/schweinchen1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

BIN
web/img/schweinchen2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
web/img/schweinchen3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

View File

@ -7,82 +7,76 @@
<script type="text/javascript" src="./js/typed.js"></script> <script type="text/javascript" src="./js/typed.js"></script>
<script type="text/javascript" src="./js/main.js"></script> <script type="text/javascript" src="./js/main.js"></script>
<script type="text/javascript" src="./js/components.js"></script> <script type="text/javascript" src="./js/components.js"></script>
<link rel="stylesheet" type="text/css" href="./css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="./css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="./css/jquery.dataTables.css"> <link rel="stylesheet" type="text/css" href="./css/jquery.dataTables.css">
<link rel="stylesheet" type="text/css" href="./css/font-awesome.min.css"> <link rel="stylesheet" type="text/css" href="./css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="./css/main.css"> <link rel="stylesheet" type="text/css" href="./css/main.css">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head> </head>
<body style="padding:10px;"> <body style="padding:10px;">
<div id="allContent"> <div id="allContent">
<!-- Select between display and controller -->
<div id="startDiv" style="width: 500px; margin: auto;"> <div id="startDiv" style="width: 500px; margin: auto;">
<h1 style="font-size: 5em;">Familien Duell</h1> <h1 style="font-size: 5em;">Familienduell</h1>
<button id="displayBtn" style="font-size: 2em; width:500px;"><i class="fa fa-desktop"></i> DISPLAY</button><br> <button id="displayBtn" style="font-size: 2em; width:500px;"><i class="fa fa-desktop"></i> DISPLAY</button><br>
<button id="controllerBtn" style="font-size: 2em; width:500px; margin-top:2px;"><i class="fa fa-keyboard-o"></i> CONTROLLER</button> <button id="controllerBtn" style="font-size: 2em; width:500px; margin-top:2px;"><i class="fa fa-keyboard-o"></i> CONTROLLER</button>
<hr id="DHR" style="margin:0px; width:100%; position:relative; top:3px; border-top:1px solid black;">
</div> </div>
<div class="bgColor textColor mainHight" style="display:none; position:relative; width: 1000px; margin: auto;" id="display"> <!-- container with all questions, answers, pigs, countdown, intro image, points-->
<img id="schweinchenImg" style="margin-left: 200px; margin-top: 70px; display: none;" src="./img/schweinchen.jpg"> <div class="topContainer bgColor textColor mainHeight" style="display:none" id="display">
<img id="schweinchen1Img" style="margin-left: 200px; margin-top: 70px; display: none;" src="./img/schweinchen1.jpg"> <img id="schweinchen1Img" style="height: 75%; top: 12.5%; position: absolute; left:0; right:0; margin-left: auto; margin-right: auto; display: none; overflow: hidden;" src="./img/schweinchen1.png">
<img id="schweinchen2Img" style="margin-left: 200px; margin-top: 70px; display: none;" src="./img/schweinchen2.jpg"> <img id="schweinchen2Img" style="height: 75%; top: 12.5%; position: absolute; left:0; right:0; margin-left: auto; margin-right: auto; display: none;" src="./img/schweinchen2.png">
<div id="displayQuestions" class="textColor"> <img id="schweinchen3Img" style="height: 75%; top: 12.5%; position: absolute; left:0; right:0; margin-left: auto; margin-right: auto; display: none;" src="./img/schweinchen3.png">
<!-- question text is injected in `loadQuestionToGui(index:)` (server.js) -->
<div id="displayQuestions" class="textColor questionAnswerContainer">
</div> </div>
<div id="answers"> <!-- answer divs are injected in `loadQuestionToGui(index:)` (server.js) -->
<div id="answers" class="questionAnswerContainer">
</div> </div>
<div class="noIntro" id="result" style="position:absolute; bottom:115px; right:38px; font-size: 1.5em;"> <div id="result" style="position:absolute; bottom:65px; right:38px; font-size: 1.5em;">
<div style="float:left; padding-right: 20px;" class="header_summe">SUMME</div> <div style="float:left; padding-right: 20px;" class="header_summe">SUMME</div>
<div style="float:left; font-size: 0.8em; position: relative; top: 12; left:14px; color: red; cursor:pointer;" class="controller" id="pointsToTheLeft"><i class="fa fa-chevron-left"></i></div> <div style="float:left; font-size: 0.8em; position: relative; top: 12; left:14px; color: red; cursor:pointer;" class="controller" id="pointsToTheLeft"><i class="fa fa-chevron-left"></i></div>
<div class="noIntro" style="width:50px; float: left; text-align:right;" id="SumRes">0</div> <div class="noIntro" style="width:50px; float: left; text-align:right;" id="SumRes">0</div>
<div style="float:left; font-size: 0.8em; position: relative; top: 12; color: red; cursor:pointer;" class="controller" id="pointsToTheRight"><i class="fa fa-chevron-right"></i></div> <div style="float:left; font-size: 0.8em; position: relative; top: 12; color: red; cursor:pointer;" class="controller" id="pointsToTheRight"><i class="fa fa-chevron-right"></i></div>
</div> </div>
<div class="noIntro" id="resultFinal" style="position:absolute; bottom:115px; right:465px; font-size: 1.5em; display: none;"> <div id="resultFinal" style="position:absolute; bottom:95px; width:100%; font-size: 1.5em; display: none;">
<div class="noIntro" style="width:50px; float: left; text-align:right;" id="SumRes_player1"></div> <div style="display: flex;justify-content: center;">
<div class="noIntro" style="width:50px; float: left; text-align:right;" id="SumRes_player2"></div> <div class="noIntro" style="width:6%; float: left; text-align:center;" id="SumRes_player1">0</div>
<div class="noIntro" style="width:6%; float: right; text-align:center;" id="SumRes_player2">0</div>
</div> </div>
<div class="noIntro footer" id="footer1" style="position:absolute; bottom:50px; width:100%; height:50px; font-size: 2em;">
<div style="position:absolute; left:5px; top: -5px;" class="pointsLeft">0</div>
<div style="position:absolute; right:5px; top: -5px;" class="pointsRight">0</div>
</div> </div>
<div class="noIntro footer" id="footer2" style="position:absolute; bottom:108px; width:100%; height:5px;"></div> <div id="timer" style="position:absolute; top: 50%; left: 50%; width: 400px; margin-left: -200px; margin-top: -143px; text-align: center; padding: 0px 30px 10px 30px; font-size: 200px; display: none;">
<div class="xmarker noIntro" style="position: absolute; bottom: 0px; left: 34; font-size: 2em; background: #525463; height: 50px; padding-left: 12px; padding-right: 12px; color: rgb(127, 115, 115);" ></div> 20
<div class="xmarker noIntro" style="position: absolute; bottom: 0px; right: 34; font-size: 2em; background: #525463; height: 50px; padding-left: 12px; padding-right: 12px; color: rgb(127, 115, 115);" ></div>
<img style="position: absolute; top: 0px;" class="intro mainHight" src="./img/logo.png">
</div> </div>
<div class="noIntro footer" id="footer1" style="position:absolute; bottom:0px; width:100%; height:50px; font-size: 2em;">
<div style="position:absolute; left:35px; top: -5px;" class="pointsLeft">0</div>
<div style="position:absolute; left:50%; width: 80px; margin-left: -40px; top: -5px; text-align: center" id="pointsCenter">0</div>
<div style="position:absolute; right:35px; top: -5px;" class="pointsRight">0</div>
</div>
<!--<div class="noIntro footer" id="footer2" style="position:absolute; bottom:108px; width:100%; height:5px;"></div>-->
<div class="xmarker noIntro" style="position: absolute; bottom: -64px; left: 34px" ></div>
<div class="xmarker noIntro" style="position: absolute; bottom: -64px; right: 34px" ></div>
<img style="position: absolute; top: 0px; width: 100%; height: 100%;" class="intro" src="./img/logo.png">
</div>
<!-- controller container -->
<div style="display:none;" class="controller"> <div style="display:none;" class="controller">
<div id="editQuestionsDiv" style="display:none; background: rgba(214, 205, 205, 0.95); padding-left:20px; position: absolute; top: 0px; width: 99%; min-height: 100%;">
<i id="closeFragenEditorIcon" style="position: fixed; right: 30px; top: 10px; font-size: 1.2em; cursor:pointer;" class="fa fa-caret-square-o-down"></i>
<h1 style="margin-left:50px;">Frageneditor</h1>
<div>
<ul id="fragenListe">
</ul>
</div>
<div >
<button style="margin-left:50px;" id="addNewQuestionBtn">Neue Frage hinzufügen!</button>
<button style="margin-left:50px; position:fixed; top: 10px; right: 100; font-size: 2em;" id="saveNewQuestions">Speichern!</button>
</div>
</div><br><br><br>
<div id="buttonsDownUnder"> <div id="buttonsDownUnder">
<table border="1"> <table border="1">
<tr> <tr>
<td><b>Global</b></td> <!-- <td><b>Global</b></td>
<td><b>Server</b></td> <td><b>Server</b></td> -->
<td><b>Intro</b></td> <td><b>Intro</b></td>
<td><b>Schweinchen</b></td> <td><b>Schweinchen</b></td>
<td><b>Optionen</b></td> <td><b>Optionen</b></td>
<td><b>Finalmodus</b> <input id="modeFinal" type="checkbox"> <button style="float:right;" id="finalmodusInfoBtn">Info</button></td> <td><b><label for="modeFinal">Finalmodus</b> </label><input id="modeFinal" type="checkbox" style="vertical-align: text-bottom" /> <button style="float:right;" id="finalmodusInfoBtn">Info</button></td>
<td><b>Spielende</b></td>
</tr> </tr>
<tr> <tr>
<td><img id="toggleSoundImg" style="cursor:pointer;" width="35px;" src="./img/soundOn.png"></td> <!-- <td><img id="toggleSoundImg" style="cursor:pointer;" width="35px;" src="./img/soundOn.png"></td>
<td><img id="serverSoundImg" style="cursor:pointer;" width="35px;" src="./img/noSound.png"></td> <td><img id="serverSoundImg" style="cursor:pointer;" width="35px;" src="./img/soundOn.png"></td> -->
<td> <td>
<button id="startIntroBtn"><i class="fa fa-play"></i> Intro!</button><br> <button style=" display: block" id="startIntroBtn"><i class="fa fa-play"></i> Intro!</button><br>
<button id="stopIntroBtn"><i class="fa fa-stop"></i> Intro!</button><br> <label for="blackScreenCheck">Blackscreen:</label> <input id="blackScreenCheck" checked="checked" type="checkbox" style="vertical-align: text-bottom" />
<img width="20px;" src="./img/noSound.png"> <button style="margin-top: 12px; display: block" id="stopIntroBtn"><i class="fa fa-stop"></i> Intro!</button><br>
<input id="introVolume" style="width: 50px;" type="range" value="10" name="points" min="0" max="10">
<img width="20px;" src="./img/soundOn.png"><br>
Blackscreen: <input id="blackScreenCheck" checked="checked" type="checkbox">
</td> </td>
<td> <td>
Multiplikator: <input id="pointMultiplicator" type="number" name="" value="1" style="width: 50px;"><br> Multiplikator: <input id="pointMultiplicator" type="number" name="" value="1" style="width: 50px;"><br>
@ -90,9 +84,6 @@
<button id="startScheinchenbtn2" value="2"><i class="fa fa-play"></i> Schweinchen (2x)</button><br> <button id="startScheinchenbtn2" value="2"><i class="fa fa-play"></i> Schweinchen (2x)</button><br>
<button id="startScheinchenbtn3" value="3"><i class="fa fa-play"></i> Schweinchen (3x)</button><br> <button id="startScheinchenbtn3" value="3"><i class="fa fa-play"></i> Schweinchen (3x)</button><br>
<button id="stopScheinchenbtn"><i class="fa fa-stop"></i> Schweinchen</button><br> <button id="stopScheinchenbtn"><i class="fa fa-stop"></i> Schweinchen</button><br>
<img width="20px;" src="./img/noSound.png">
<input id="schweinchenVolume" style="width: 50px;" type="range" value="10" name="points" min="0" max="10">
<img width="20px;" src="./img/soundOn.png">
</td> </td>
<td> <td>
<button id="clearAllFailsBtn">Clear all Fails!</button><br><br> <button id="clearAllFailsBtn">Clear all Fails!</button><br><br>
@ -103,33 +94,38 @@
<tr> <tr>
<td>Punkte Rechts: </td> <td><input style="width:50px;" id="mPunkteRight" type="number" value="0"></td><td><button id="newRightPoints">ok</button></td> <td>Punkte Rechts: </td> <td><input style="width:50px;" id="mPunkteRight" type="number" value="0"></td><td><button id="newRightPoints">ok</button></td>
</tr> </tr>
<tr>
<td>Punkte Summe: </td> <td><input style="width:50px;" id="mPunkteSum" type="number" value="0"></td><td><button id="newSumRes">ok</button></td>
</tr>
</table> </table>
</td> </td>
<td> <td>
<button id="startAnswerFailBtn"><i class="fa fa-play"></i> Antwort falsch</button><br> <!-- <button id="startAnswerDuplicateBtn"><i class="fa fa-play"></i> Antwort doppelt</button><br>
<img width="20px;" src="./img/noSound.png"> <img width="20px;" src="./img/noSound.png">
<input id="answerFailVolume" style="width: 50px;" type="range" value="10" name="points" min="0" max="10"> <input id="answerFailVolume" style="width: 50px;" type="range" value="10" name="points" min="0" max="10">
<img width="20px;" src="./img/soundOn.png"> <img width="20px;" src="./img/soundOn.png"> -->
<div> <div>
<lable>Spieler 1: <input class="playerTgl finalElement" disabled="true" checked="true" type="radio" value="1" name="fmod"></lable><br> <label for="spieler1">Spieler 1:</label> <input class="playerTgl finalElement" disabled="true" checked="true" type="radio" value="1" name="fmod" id="spieler1" style="vertical-align: text-bottom" /> <button id="showTimerBtn" disabled="true" class="finalElement">Timer anzeigen</button><br>
<lable>Spieler 2: <input class="playerTgl finalElement" disabled="true" type="radio" value="2" name="fmod"></lable><br> <label for="spieler2">Spieler 2:</label> <input class="playerTgl finalElement" disabled="true" type="radio" value="2" name="fmod" id="spieler2" style="vertical-align: text-bottom" /> <button id="startTimerBtn" disabled="true" class="finalElement"><i class="fa fa-play"></i> Timer starten</button><br>
Frage: <select class="finalElement" disabled="true" id="finalFragenSelect"> <label for="finalFragenSelect">Frage:</label> <select class="finalElement" disabled="true" id="finalFragenSelect">
<option value="0"> 1</option> <option value="0"> 1</option>
<option value="1"> 2</option> <option value="1"> 2</option>
<option value="2"> 3</option> <option value="2"> 3</option>
<option value="3"> 4</option> <option value="3"> 4</option>
<option value="4"> 5</option> <option value="4"> 5</option>
</select><br> </select> <button id="stopTimerBtn" disabled="true" class="finalElement"><i class="fa fa-stop"></i> Timer stoppen</button><br>
Alternative Antwort:<br> <input class="finalElement" id="alternateAnswer" maxlength="20" disabled="true" type="text" name=""><button class="finalElement" id="alternateAnswerBtn" disabled="true">setzen</button><br><input type="number" class="finalElement" id="altPointsFinal" disabled="true" placeholder="Alt. Punkte" value=""><button class="finalElement" id="alternateAnswerPBtn" disabled="true">setzen</button> Alternative Antwort:<br> <input class="finalElement" id="alternateAnswer" maxlength="20" disabled="true" type="text" name=""><button class="finalElement" id="alternateAnswerBtn" disabled="true">setzen</button><br><input type="number" class="finalElement" id="altPointsFinal" disabled="true" placeholder="Alt. Punkte" value="0"><button class="finalElement" id="alternateAnswerPBtn" disabled="true">setzen</button>
</div> </div>
</td> </td>
<td>
<button id="showFinalScores">Show Final Scores</button><br><br>
</td>
</tr> </tr>
</table> </table>
<br>
<table> <table>
<tr> <tr>
<td><b>Fragenliste:</b><br> <td><b>Fragenliste:</b><br>
<select style="min-width: 400px;" size="5" id="questionsSelcet"> <select style="min-width: 400px;" size="5" id="questionsSelect">
</select> </select>
</td> </td>
@ -144,12 +140,26 @@
</div> </div>
</div> </div>
<div id="notConnected" style="position:absolute; left:0px; top:0px; padding:5px;"><img width="50px" src="./img/notConnected.png"></div> <div id="editQuestionsDiv" style="display:none; background: rgba(205, 205, 205, 0.95); padding-left:20px; position: absolute; top: 0px; width: 100%; min-height: 100%;">
<div id="connected" style="position:absolute; left:0px; top:0px; padding:5px; display:none;"></div> <h1 style="margin-left:50px;">Frageneditor</h1>
<div id="blackScreen" style="display:none; position:absolute; left:0px; top:0px; width:100%; height:100%; background:black;"></div> <div>
<ul id="fragenListe">
</ul>
</div>
<div >
<button style="margin-left:50px; margin-bottom: 50px;" id="addNewQuestionBtn">Neue Frage hinzufügen!</button>
<button style="margin-left:50px; position:fixed; top: 20px; right: 200px; font-size: 2em;" id="saveNewQuestions">Speichern!</button>
<button id="closeFragenEditorIcon" style="margin-left:50px; position:fixed; top: 20px; right: 30px; font-size: 2em;" id="saveNewQuestions">Schließen</button>
<!-- <i id="closeFragenEditorIcon" style="position: fixed; right: 30px; top: 10px; font-size: 1.2em; cursor:pointer;" class="fa fa-caret-square-o-down"></i> -->
</div>
</div>
<div id="connected" style="position:fixed; left:0px; top:0px; padding:5px; display:none;"></div>
</div> </div>
<div id="printScreen" style="display:none; position:absolute; left:0px; top:0px; width:100%; height:100%; background:white;"> <div id="printScreen" style="display:none; position:absolute; left:0px; top:0px; width:100%; height:100%; background:white;">
<div id="printDiv"></div> <div id="printDiv"></div>
</div> </div>
<div id="blackScreen" style="display:none; position:absolute; left:0px; top:0px; width:100%; height:100%; background:black;"></div>
<div id="notConnected" style="position:absolute; left:0px; top:0px; padding:5px;"><img width="50px" src="./img/notConnected.png"></div>
</body> </body>
</html> </html>

View File

@ -2,7 +2,8 @@ function init_xmarker() {
var c =0; var c =0;
$.each($(".xmarker"), function() { $.each($(".xmarker"), function() {
for(var i=0; i<3;i++) { for(var i=0; i<3;i++) {
var span = $('<span class="marker'+(c)+'" style="cursor:pointer; position:relative; top:-5px; padding-right: 5px;">X</span>'); var span = $('<span class="marker'+(c)+'" style="cursor:pointer; position:relative; top:-5px; padding-left: 4px; padding-right: 4px">X</span>');
var span = $('<span class="marker'+(c)+'" style="cursor:pointer; position:relative; top:-5px; padding-left: 4px; padding-right: 4px">X</span>');
console.log("sow"+i); console.log("sow"+i);
(function() { (function() {

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,9 @@ var answerFail = null;
var schweinchenVolume = 1; var schweinchenVolume = 1;
var answerFailVolume = 1; var answerFailVolume = 1;
var schweinchen = null; var schweinchen = null;
// when the points for a round are assigned, we still want to show the other answers but no points should be calculated by that time
// reset when changing a question
var currentRoundPointsResolved = false;
$(document).ready(function() { $(document).ready(function() {
$( "#fragenListe" ).sortable(); $( "#fragenListe" ).sortable();
@ -37,6 +40,22 @@ $(document).ready(function() {
wsSend("startAnswerFail", ""); wsSend("startAnswerFail", "");
}); });
$("#startAnswerDuplicateBtn").click(function() {
wsSend("startAnswerDuplicate", "");
});
$("#showTimerBtn").click(function() {
wsSend("showTimer", "");
});
$("#startTimerBtn").click(function() {
wsSend("startTimer", "");
});
$("#stopTimerBtn").click(function() {
wsSend("stopTimer", "");
});
$("#answerFailVolume").on("input", function() { $("#answerFailVolume").on("input", function() {
var v = parseFloat($(this).val()) / 10; var v = parseFloat($(this).val()) / 10;
wsSend("setAnswerFailVolume", v); wsSend("setAnswerFailVolume", v);
@ -83,18 +102,42 @@ $(document).ready(function() {
}); });
$("#upQicon").click(function() { $("#upQicon").click(function() {
var index = $("#questionsSelcet>option:selected").index(); var index = $("#questionsSelect>option:selected").index();
index--; index--;
if (isFinalMode) {
var questionSelected = $("#finalFragenSelect").val();
questionSelected--;
if (questionSelected < 0) {
// $("#finalFragenSelect").val(0);
} else {
$("#finalFragenSelect").val(questionSelected)
}
}
if (index > 0) {
setFrageIndex(index); setFrageIndex(index);
}
}); });
$("#downQicon").click(function() { $("#downQicon").click(function() {
var index = $("#questionsSelcet>option:selected").index(); var index = $("#questionsSelect>option:selected").index();
index++; index++;
if (isFinalMode) {
var questionSelected = $("#finalFragenSelect").val();
questionSelected++;
if (questionSelected > 4) {
// $("#finalFragenSelect").val(0);
} else {
$("#finalFragenSelect").val(questionSelected)
}
}
if (index < 8) {
setFrageIndex(index); setFrageIndex(index);
}
}); });
$("#questionsSelcet").on("change", function() { $("#questionsSelect").on("change", function() {
changeFrage(); changeFrage();
}); });
@ -123,6 +166,7 @@ $(document).ready(function() {
var points = parseFloat($(".pointsRight").text()) + parseFloat($("#SumRes").text())*$("#pointMultiplicator").val(); var points = parseFloat($(".pointsRight").text()) + parseFloat($("#SumRes").text())*$("#pointMultiplicator").val();
wsSend("setRightPoints", points); wsSend("setRightPoints", points);
$("#SumRes").text("0"); $("#SumRes").text("0");
$("#pointsCenter").text("0");
}); });
$("#newLeftPoints").click(function() { $("#newLeftPoints").click(function() {
@ -133,6 +177,10 @@ $(document).ready(function() {
wsSend("setRightPoints", $("#mPunkteRight").val()); wsSend("setRightPoints", $("#mPunkteRight").val());
}); });
$("#newSumRes").click(function() {
wsSend("setSumRes", $("#mPunkteSum").val());
});
$("#alternateAnswerBtn").click(function(){ $("#alternateAnswerBtn").click(function(){
var is = $("#finalFragenSelect").val(); var is = $("#finalFragenSelect").val();
var answer = $("#alternateAnswer").val(); var answer = $("#alternateAnswer").val();
@ -153,10 +201,27 @@ $(document).ready(function() {
function setFinalMode(status){ function setFinalMode(status){
isFinalMode = status == "true" ? true : false; isFinalMode = status == "true" ? true : false;
$(".finalElement").attr("disabled", !isFinalMode); $(".finalElement").attr("disabled", !isFinalMode);
var index = $("#questionsSelcet>option:selected").index(); var index = $("#questionsSelect>option:selected").index();
index = index > 0 ? index : 0; index = index > 0 ? index : 0;
$("#answers").empty(); $("#answers").empty();
// automatically select first of the final questions (index 3)
if (isFinalMode < 3) {
index = 3;
}
loadQuestionToGui(index); loadQuestionToGui(index);
// manually select option once final mode starts
if (isFinalMode) {
if (index >= 0 && index < $("#questionsSelect").find("option").length) {
$("#questionsSelect").find("option").removeAttr("selected");
$($("#questionsSelect").find("option")[index]).prop("selected", "true");
}
if ($("#questionsSelect>option:selected").index() == -1 && $("#questionsSelect").find("option")[0]) {
$($("#questionsSelect").find("option")[0]).prop("selected", "true");
}
}
} }
function setPlayer2(value){ function setPlayer2(value){
@ -180,8 +245,10 @@ function showQuestionsAsPrint() {
function setLeftPoints(newPoints) { function setLeftPoints(newPoints) {
$(".pointsLeft").text(newPoints); $(".pointsLeft").text(newPoints);
$("#mPunkteLeft").val(newPoints); $("#mPunkteLeft").val(newPoints);
$("#sumRes").text("0");
$("#pointsCenter").text("0");
if(sounds && (display || serverSound)) { if(sounds && (display || serverSound)) {
audio = new Audio('./sounds/zahlRichtig.mp3'); audio = new Audio('./sounds/zahlRichtig.ogg');
audio.play(); audio.play();
} }
} }
@ -189,49 +256,115 @@ function setLeftPoints(newPoints) {
function setRightPoints(newPoints) { function setRightPoints(newPoints) {
$(".pointsRight").text(newPoints); $(".pointsRight").text(newPoints);
$("#mPunkteRight").val(newPoints); $("#mPunkteRight").val(newPoints);
$("#sumRes").text("0");
$("#pointsCenter").text("0");
if(sounds && (display || serverSound)) { if(sounds && (display || serverSound)) {
audio = new Audio('./sounds/zahlRichtig.mp3'); audio = new Audio('./sounds/zahlRichtig.ogg');
audio.play(); audio.play();
} }
} }
function setSumRes(newSumRes) {
$('#SumRes').text(newSumRes);
$("#mPunkteSum").val(newSumRes);
recalcSum(0);
}
function startAnswerFail() { function startAnswerFail() {
if (sounds && (display || serverSound)) { if (sounds && (display || serverSound)) {
answerFail = new Audio('./sounds/failFinal.mp3'); answerFail = new Audio('./sounds/failOriginal.ogg');
answerFail.volume = answerFailVolume; answerFail.volume = answerFailVolume;
answerFail.play(); answerFail.play();
} }
} }
function startAnswerDuplicate() {
if (sounds && (display || serverSound)) {
answerDuplicate = new Audio('./sounds/failFinal.ogg');
answerDuplicate.volume = answerFailVolume;
answerDuplicate.play();
}
}
function showTimer() {
if (display) {
if (player2) {
$("#timer").text("25");
} else {
$("#timer").text("20");
}
$("#timer").fadeIn();
}
}
function startTimer() {
if (display) {
var timer = parseInt($("#timer").text());
if ((timer == 20 && !player2) || (player2 && timer == 25)) {
if (sounds && (display || serverSound)) {
// window.document.timerTick = new Audio('./sounds/tick.ogg');
// window.document.timerTick.volume = answerFailVolume;
// window.document.timerTick.play();
}
window.document.timerId = setInterval(function() { startTimer(); }, 1000);
}
timer--;
if (timer > 0) {
$("#timer").text(timer);
} else {
clearInterval(window.document.timerId);
// window.document.timerTick.pause();
// window.document.timerTick.currentTime = 0;
$("#timer").fadeOut();
if (sounds && (display || serverSound)) {
timerEnd = new Audio('./sounds/failOriginal.ogg');
timerEnd.volume = answerFailVolume;
timerEnd.play();
}
}
}
}
function stopTimer() {
if (display) {
clearInterval(window.document.timerId);
// window.document.timerTick.pause();
// window.document.timerTick.currentTime = 0;
$("#timer").fadeOut();
}
}
function startSchweinchen() { function startSchweinchen() {
if (runde == 2){ if (runde == 2){
$("#schweinchen2Img").show(); $("#schweinchen2Img").show("blind", { direction: "left" }, 1500);
} else if (runde == 3){ } else if (runde == 3){
$("#schweinchenImg").show(); $("#schweinchen3Img").show("blind", { direction: "left" }, 1500);
} else { } else {
$("#schweinchen1Img").show(); $("#schweinchen1Img").show("blind", { direction: "left" }, 1500);
} }
$("#answers").hide(); $("#answers").hide();
$("#displayQuestions").hide(); $("#displayQuestions").hide();
$("#result").hide();
$(".footer").hide();
if(sounds && (display || serverSound)) { if(sounds && (display || serverSound)) {
schweinchen = new Audio('./sounds/schweinchen.wav'); schweinchen = new Audio('./sounds/schweinchen.ogg');
schweinchen.volume = schweinchenVolume; schweinchen.volume = schweinchenVolume;
schweinchen.play(); schweinchen.play();
} }
} }
function stopSchweinchen() { function stopSchweinchen() {
var index = $("#questionsSelcet>option:selected").index(); var index = $("#questionsSelect>option:selected").index();
$("#questionsSelcet").val(index+1); $("#questionsSelect").val(index+1);
changeFrage(); changeFrage();
$("#schweinchenImg").hide(); $("#schweinchen3Img").stop(true, true).hide();
$("#schweinchen1Img").hide(); $("#schweinchen1Img").stop(true, true).hide();
$("#schweinchen2Img").hide(); $("#schweinchen2Img").stop(true, true).hide();
$("#answers").show(); $("#result").show();
$("#displayQuestions").show(); $(".footer").show("blind", { direction: "left" }, 1500);
if(schweinchen) { if(schweinchen) {
schweinchen.pause(); schweinchen.pause();
} }
@ -239,7 +372,7 @@ function stopSchweinchen() {
function hideIntro() { function hideIntro() {
$(".noIntro").show(); $(".noIntro").show();
$(".intro").hide(); $(".intro").fadeOut();
if(intro) { if(intro) {
intro.pause(); intro.pause();
} }
@ -247,88 +380,93 @@ function hideIntro() {
function showIntro() { function showIntro() {
$(".noIntro").hide(); $(".noIntro").hide();
$(".intro").show(); $(".intro").fadeIn();
if(sounds && (display || serverSound)) { if(sounds && (display || serverSound)) {
intro = new Audio('./sounds/intro.mp3'); intro = new Audio('./sounds/intro.ogg');
intro.volume = introVolume; intro.volume = introVolume;
intro.play(); intro.play();
} }
} }
function fillFragenSelect() { function fillFragenSelect() {
$("#questionsSelcet").empty(); $("#questionsSelect").empty();
for(var i=0;i<fragen.length;i++) { for(var i=0;i<fragen.length;i++) {
$("#questionsSelcet").append('<option value="'+i+'">'+fragen[i]["kuerzel"]+'</option>'); $("#questionsSelect").append('<option value="'+i+'">'+fragen[i]["kuerzel"]+'</option>');
} }
} }
function setFrageIndex(index) { function setFrageIndex(index) {
if(index >= 0 && index < $("#questionsSelcet").find("option").length) { if (index >= 0 && index < $("#questionsSelect").find("option").length) {
$("#questionsSelcet").find("option").removeAttr("selected"); $("#questionsSelect").find("option").removeAttr("selected");
$($("#questionsSelcet").find("option")[index]).prop("selected", "true"); $($("#questionsSelect").find("option")[index]).prop("selected", "true");
}
if ($("#questionsSelect>option:selected").index() == -1 && $("#questionsSelect").find("option")[0]) {
$($("#questionsSelect").find("option")[0]).prop("selected", "true");
} }
if($("#questionsSelcet>option:selected").index() == -1 && $("#questionsSelcet").find("option")[0] )
$($("#questionsSelcet").find("option")[0]).prop("selected", "true");
changeFrage(); changeFrage();
} }
function changeFrage() { function changeFrage() {
var index = $("#questionsSelcet>option:selected").index(); var index = $("#questionsSelect>option:selected").index();
wsSend("loadQuestion", index); wsSend("loadQuestion", index);
wsSend("clearAllFailsBtn", ""); wsSend("clearAllFailsBtn", "");
wsSend("resetPointsResolvedFlag", "false");
} }
function loadQuestionToGui(index) { function loadQuestionToGui(index) {
$("#schweinchenImg").hide(); $("#schweinchen3Img").hide();
$("#schweinchen1Img").hide(); $("#schweinchen1Img").hide();
$("#schweinchen2Img").hide(); $("#schweinchen2Img").hide();
$("#answers").empty(); $("#answers").empty();
$('.footer').toggle(!isFinalMode); $(".pointsLeft").toggle(!isFinalMode);
$('.xmarker').toggle(!isFinalMode); $(".pointsRight").toggle(!isFinalMode);
$(".xmarker").toggle(!isFinalMode);
$("#ResSum_player1").toggle(isFinalMode); $("#ResSum_player1").toggle(isFinalMode);
$("#ResSum_player2").toggle(isFinalMode); $("#ResSum_player2").toggle(isFinalMode);
if (!isFinalMode){ if (isFinalMode){
$("#resultFinal").hide();
} else {
$("#resultFinal").show(); $("#resultFinal").show();
$(".footer").hide();
} else {
$("#resultFinal").hide();
} }
$("#result").toggle(!isFinalMode); $("#result").toggle(!isFinalMode);
if(index > -1) { if(index > -1) {
$("#displayQuestions").html(fragen[index]["frage"]); $("#displayQuestions").html(fragen[index]["frage"]);
if (isFinalMode){ if (isFinalMode && display){
$("#displayQuestions").hide(); $("#displayQuestions").hide();
} else { } else {
$("#displayQuestions").show(); $("#displayQuestions").show("blind", { direction: "left" }, 1500);
} }
for(var i=0;i<fragen[index]["antworten"].length;i++) { var anzahlFragen = fragen[index]["antworten"].length;
if(fragen[index]["antworten"][i]["antwort"] != "") { if (isFinalMode) {
if (!isFinalMode) { anzahlFragen = 5;
var oneLine = $('<div style="height:55px">' + }
'<div style="width: 52px; float: left;" class="nr">' + (i + 1) + '.</div>' + for (var i = 0; i < anzahlFragen; i++) {
'<div style="width: 860px; float: left;" class="answer"></div>' + if(isFinalMode || fragen[index]["antworten"][i]["antwort"] != "") {
'<div style="width: 52px; float: left;" class="points"></div>' + if (isFinalMode) {
var oneLine = $('<div>' +
'<div style="width: 44%; float: left; text-align: center" class="answer"></div>' +
'<div style="width: 6%; float: left; text-align: center" class="points"></div>' +
'<div style="width: 6%; float: left; text-align: center" class="points_player2"></div>' +
'<div style="width: 44%; float: left; text-align: center" class="answer_player2"></div>' +
'</div>'); '</div>');
} else { } else {
var oneLine = $('<div style="margin-left: 20px; height:55px">' + var oneLine = $('<div>' +
'<div style="margin-left: 15px; width: 400px; float: left;" class="answer"></div>' + '<div style="width: 5%; text-align: center; float: left;" class="nr">' + (i + 1) + '.</div>' +
'<div style="width: 52px; float: left;" class="points"></div>' + '<div style="width: 89%; text-align: center; float: left" class="answer"></div>' +
'<div style="width: 65px; float: left;" class="points_player2"></div>' + '<div style="width: 6%; float: left; text-align: right" class="points"></div>' +
'<div style="width: 400px; float: left;" class="answer_player2"></div>' +
'</div>'); '</div>');
} }
if(display && !player2) { if(display && !player2) {
if (isFinalMode) { oneLine.find(".answer").text("..............................................................................................................");
oneLine.find(".answer").text("_ _ _ _ _ _ _ _ _ _ _");
} else {
oneLine.find(".answer").text("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _");
}
oneLine.find(".points").text("--"); oneLine.find(".points").text("--");
if (isFinalMode){ if (isFinalMode){
oneLine.find(".points_player2").text("--"); oneLine.find(".points_player2").text("--");
oneLine.find(".answer_player2").text("_ _ _ _ _ _ _ _ _ _ _"); oneLine.find(".answer_player2").text("..............................................................................................................");
// oneLine.find(".answer_player2").text("_ _ _ _ _ _ _ _ _ _ _");
} }
} else if (!display) { } else if (!display) {
oneLine.find(".answer").html('<span class="markOnHover">'+getAnswerString(fragen[index]["antworten"][i]["antwort"])+'</span>'); oneLine.find(".answer").html('<span class="markOnHover">'+getAnswerString(fragen[index]["antworten"][i]["antwort"])+'</span>');
@ -357,6 +495,7 @@ function loadQuestionToGui(index) {
} }
if (!isFinalMode) { if (!isFinalMode) {
$("#SumRes").text("0"); $("#SumRes").text("0");
$("#answers").show("blind", { direction: "left" }, 1500);
} }
if(!display) if(!display)
$("#resultFinal").hide(); $("#resultFinal").hide();
@ -380,17 +519,18 @@ function setAnswer(index, answer) {
} }
answer = getAnswerString(answer); answer = getAnswerString(answer);
var el = $($("#answers").find(answer_select)[index]); var el = $($("#answers").find(answer_select)[index]);
el.empty(); //el.empty();
if(sounds && (display || serverSound)) { if(sounds && (display || serverSound)) {
audio = new Audio('./sounds/textRichtig.mp3'); audio = new Audio('./sounds/textRichtig.ogg');
audio.play(); audio.play();
} }
el.typed({ el.typed({
strings: [answer], strings: [answer],
typeSpeed: 10, typeSpeed: 10,
overwrite: true,
showCursor: false, showCursor: false,
cursorChar: "", cursorChar: "",
fadeOut: true, fadeOut: false,
fadeOutDelay: 0, fadeOutDelay: 0,
}); });
} }
@ -405,7 +545,7 @@ function setAnz(index, nr) {
var el = $($("#answers").find(points_select)[index]); var el = $($("#answers").find(points_select)[index]);
el.text(nr); el.text(nr);
if(sounds && (display || serverSound)) { if(sounds && (display || serverSound)) {
audio = new Audio('./sounds/zahlRichtig.mp3'); audio = new Audio('./sounds/zahlRichtig.ogg');
audio.play(); audio.play();
} }
recalcSum(nr); recalcSum(nr);
@ -431,23 +571,47 @@ function recalcSum(s) {
}); });
$("#SumRes_player1").text(p1p); $("#SumRes_player1").text(p1p);
$("#SumRes_player2").text(p2p); $("#SumRes_player2").text(p2p);
if (display) {
$("#pointsCenter").text(p1p + p2p);
} else {
$("#pointsCenter").text("");
}
} else { } else {
$(sum_selector).text(parseFloat($(sum_selector).text())+parseFloat(s)); $(sum_selector).text(parseFloat($(sum_selector).text())+parseFloat(s));
$("#pointsCenter").text(parseFloat($(sum_selector).text())*runde);
} }
} }
// Add the scores from the final rounds to the current scores from previous rounds
function showFinalScores() {
$("#answers").hide();
$("#displayQuestions").hide();
$("#result").hide();
$("#resultFinal").hide();
$("#pointsCenter").hide();
$(".pointsLeft").show();
$(".pointsRight").show();
const leftFinalScore = parseFloat($("#SumRes_player1").text());
const rightFinalScore = parseFloat($("#SumRes_player2").text());
$(".pointsLeft").text(parseFloat($(".pointsLeft").text()) + leftFinalScore);
$(".pointsRight").text(parseFloat($(".pointsRight").text()) + rightFinalScore);
// show final scores with blinds
$(".footer").show("blind", { direction: "left" }, 1500);
}
function getAnswerString(str) { function getAnswerString(str) {
var anz = str.length;
if(anz%2==0) {
str+="_";
}
anz = str.length;
var maxLength = 40;
if (isFinalMode){ if (isFinalMode){
maxLength = 20; while(str.length < 24) {
str = " " + str;
}
} else {
str += " ";
while(str.length < 47) {
str += ".";
} }
while(str.length < maxLength) {
str+= " _";
} }
return str; return str;
} }
@ -490,20 +654,11 @@ function addNewQuestion(frage) {
'<td>Frage:</td><td><input class="questionIn" type="text"></td>'+ '<td>Frage:</td><td><input class="questionIn" type="text"></td>'+
'</tr><tr>'+ '</tr><tr>'+
'<td>Kürzel:</td><td><input class="questionKIn" type="text"></td>'+ '<td>Kürzel:</td><td><input class="questionKIn" type="text"></td>'+
'</tr><tr class="antTr">'+ '</tr>'+
'<td>Antwort 1:</td><td><input class="antwortInp" type="text"><input class="anz" type="number" min="1" max="100"></td>'+
'</tr><tr class="antTr">'+
'<td>Antwort 2:</td><td><input class="antwortInp" type="text"><input class="anz" type="number" min="1" max="100"></td>'+
'</tr><tr class="antTr">'+
'<td>Antwort 3:</td><td><input class="antwortInp" type="text"><input class="anz" type="number" min="1" max="100"></td>'+
'</tr><tr class="antTr">'+
'<td>Antwort 4:</td><td><input class="antwortInp" type="text"><input class="anz" type="number" min="1" max="100"></td>'+
'</tr><tr class="antTr">'+
'<td>Antwort 5:</td><td><input class="antwortInp" type="text"><input class="anz" type="number" min="1" max="100"></td>'+
'</tr><tr class="antTr">'+
'<td>Antwort 6:</td><td><input class="antwortInp" type="text"><input class="anz" type="number" min="1" max="100"></td>'+
'</tr><tr>'+
'</table></li>'); '</table></li>');
for(var i=1;i<7;i++) {
newQHtml.find("table").append('<tr class="antTr"><td>Antwort '+i+':</td><td><input class="antwortInp" type="text"><input class="anz" type="number" min="1" max="100"></td></tr>');
}
if(frage != null) { if(frage != null) {
newQHtml.find(".questionIn").val(frage["frage"]); newQHtml.find(".questionIn").val(frage["frage"]);
newQHtml.find(".questionKIn").val(frage["kuerzel"]); newQHtml.find(".questionKIn").val(frage["kuerzel"]);

View File

@ -139,6 +139,8 @@
// Check if there is some text in the element, if yes start by backspacing the default message // Check if there is some text in the element, if yes start by backspacing the default message
if (elContent.length == 0) { if (elContent.length == 0) {
self.typewrite(self.strings[self.sequence[self.arrayPos]], self.strPos); self.typewrite(self.strings[self.sequence[self.arrayPos]], self.strPos);
} else if (self.options && self.options.overwrite) {
self.typewrite(self.strings[self.sequence[self.arrayPos]], self.strPos);
} else { } else {
self.backspace(elContent, elContent.length); self.backspace(elContent, elContent.length);
} }
@ -165,13 +167,17 @@
this.init(); this.init();
}, },
// pass current string state to each function, types 1 char per call // pass current string state to each function, types 1 char per call, if overwrite is true the existing string will be replaced char by char
typewrite: function(curString, curStrPos) { typewrite: function(curString, curStrPos, curOverwritePos) {
// exit when stopped // exit when stopped
if (this.stop === true) { if (this.stop === true) {
return; return;
} }
if (!curOverwritePos) {
curOverwritePos = curStrPos;
}
if (this.fadeOut && this.el.classList.contains(this.fadeOutClass)) { if (this.fadeOut && this.el.classList.contains(this.fadeOutClass)) {
this.el.classList.remove(this.fadeOutClass); this.el.classList.remove(this.fadeOutClass);
this.cursor.classList.remove(this.fadeOutClass); this.cursor.classList.remove(this.fadeOutClass);
@ -263,6 +269,9 @@
// start typing each new char into existing string // start typing each new char into existing string
// curString: arg, self.el.html: original text inside element // curString: arg, self.el.html: original text inside element
var nextString = curString.substr(0, curStrPos + 1); var nextString = curString.substr(0, curStrPos + 1);
if (self.options && self.options.overwrite) {
nextString += self.el.textContent.substr(curOverwritePos + 1);
}
if (self.attr) { if (self.attr) {
self.el.setAttribute(self.attr, nextString); self.el.setAttribute(self.attr, nextString);
} else { } else {
@ -277,8 +286,9 @@
// add characters one by one // add characters one by one
curStrPos++; curStrPos++;
curOverwritePos++;
// loop the function // loop the function
self.typewrite(curString, curStrPos); self.typewrite(curString, curStrPos, curOverwritePos);
} }
// end of character pause // end of character pause
}, charPause); }, charPause);
@ -436,7 +446,9 @@
var self = this; var self = this;
clearInterval(self.timeout); clearInterval(self.timeout);
var id = this.el.getAttribute('id'); var id = this.el.getAttribute('id');
if (!self.options || !self.options.overwrite) {
this.el.textContent = ''; this.el.textContent = '';
}
if (typeof this.cursor !== 'undefined' && typeof this.cursor.parentNode !== 'undefined') { if (typeof this.cursor !== 'undefined' && typeof this.cursor.parentNode !== 'undefined') {
this.cursor.parentNode.removeChild(this.cursor); this.cursor.parentNode.removeChild(this.cursor);
} }
@ -486,6 +498,8 @@
backSpeed: 0, backSpeed: 0,
// shuffle the strings // shuffle the strings
shuffle: false, shuffle: false,
// existing text will be overwritten instead of removing it first
overwrite: false,
// time before backspacing // time before backspacing
backDelay: 500, backDelay: 500,
// Fade out instead of backspace // Fade out instead of backspace

View File

@ -8,7 +8,7 @@ var sounds = true;
var ws; var ws;
var display = true; var display = true;
var audio = null; var audio = null;
var serverSound = false; var serverSound = true;
var isFinalMode = false; var isFinalMode = false;
var player2 = false; var player2 = false;
var runde = 1; var runde = 1;
@ -21,6 +21,13 @@ if(window.location.href.indexOf("viewonly")!==-1) {
$(document).ready(function() { $(document).ready(function() {
$("#displayBtn").click(function() { $("#displayBtn").click(function() {
if (this.requestFullScreen) {
this.requestFullScreen();
} else if (this.mozRequestFullScreen) {
this.mozRequestFullScreen();
} else if (this.webkitRequestFullScreen) {
this.webkitRequestFullScreen();
}
$("#startDiv").hide(); $("#startDiv").hide();
$("#display").show(); $("#display").show();
$(".controller").hide(); $(".controller").hide();
@ -33,12 +40,23 @@ $(document).ready(function() {
$("#display").show(); $("#display").show();
$(".controller").show(); $(".controller").show();
display = false; display = false;
// nice css manipulation 🤢#hack
$(".mainHeight").css("width", 1020);
$(".mainHeight").css("height", 520);
$(".mainHeight").css("padding-top", "");
$("#answers").css("font-size", "1.5em");
$("#displayQuestions").css("font-size", "1.5em");
}); });
$("#clearAllFailsBtn").click(function() { $("#clearAllFailsBtn").click(function() {
wsSend("clearAllFailsBtn", ""); wsSend("clearAllFailsBtn", "");
}); });
$("#showFinalScores").click(function() {
wsSend("showFinalScores", "");
});
$("#toggleSoundImg").click(function() { $("#toggleSoundImg").click(function() {
wsSend("toggleSound", ""); wsSend("toggleSound", "");
}); });
@ -86,24 +104,29 @@ var connectWs = function() {
return null; return null;
} }
ws.onmessage = function (event) { ws.onmessage = async function (event) {
console.log("msg: "+event.data) console.log("msg: "+event.data.toString())
messageParts_a = event.data.split("###"); let tempSt = event.data.toString();
if(typeof(tempSt) != "string") {
tempSt = await new Response(tempSt).text()
}
messageParts_a = tempSt.split("###");
var key = messageParts_a[0]; var key = messageParts_a[0];
var value = messageParts_a[1]; var value = messageParts_a[1];
if(key =="setFail") { if(key =="setFail") {
if($(".marker"+value).css("color") == "rgb(127, 115, 115)") { if($(".marker"+value).css("color") == "rgb(66, 66, 66)") {
$(".marker"+value).css("color","rgb(211, 16, 16)"); $(".marker"+value).css("color","rgb(211, 16, 16)");
if(sounds && (display || serverSound)) { if(sounds && (display || serverSound)) {
audio = new Audio('./sounds/fail.mp3'); audio = new Audio('./sounds/fail.ogg');
audio.play(); audio.play();
} }
} else { } else {
$(".marker"+value).css("color","rgb(127, 115, 115)"); $(".marker"+value).css("color","rgb(66, 66, 66)");
} }
} else if(key == "clearAllFailsBtn") { } else if(key == "clearAllFailsBtn") {
$.each($(".xmarker").find("span"), function() { $.each($(".xmarker").find("span"), function() {
$(this).css("color","rgb(127, 115, 115)"); $(this).css("color","rgb(66, 66, 66)");
}); });
} else if(key == "toggleSound") { } else if(key == "toggleSound") {
if(sounds) { if(sounds) {
@ -115,6 +138,8 @@ var connectWs = function() {
$("#toggleSoundImg").attr("src", "./img/soundOn.png"); $("#toggleSoundImg").attr("src", "./img/soundOn.png");
sounds = true; sounds = true;
} }
} else if(key == "showFinalScores") {
showFinalScores()
} else if(key == "file") { } else if(key == "file") {
if(value == "fragen.txt") { if(value == "fragen.txt") {
try { try {
@ -145,8 +170,18 @@ var connectWs = function() {
setLeftPoints(value); setLeftPoints(value);
} else if(key == "setRightPoints") { } else if(key == "setRightPoints") {
setRightPoints(value); setRightPoints(value);
} else if(key == "setSumRes") {
setSumRes(value);
} else if(key == "startAnswerFail") { } else if(key == "startAnswerFail") {
startAnswerFail(); startAnswerFail();
} else if(key == "startAnswerDuplicate") {
startAnswerDuplicate();
} else if(key == "showTimer") {
showTimer();
} else if(key == "startTimer") {
startTimer();
} else if(key == "stopTimer") {
stopTimer();
} else if(key == "setAnswerFailVolume") { } else if(key == "setAnswerFailVolume") {
answerFailVolume = value; answerFailVolume = value;
if(answerFail != null) if(answerFail != null)
@ -161,7 +196,12 @@ var connectWs = function() {
schweinchen.volume = schweinchenVolume; schweinchen.volume = schweinchenVolume;
} else if(key == "toggleBlackScreen") { } else if(key == "toggleBlackScreen") {
if (display) { if (display) {
$("#blackScreen").toggle(); if ($("#blackScreen").css("display") === "none") {
$("#blackScreen").fadeIn(500);
} else {
$("#blackScreen").fadeOut(6000);
}
// $("#blackScreen").toggle();
} }
} else if (key == "toggleFinalMode"){ } else if (key == "toggleFinalMode"){
setFinalMode(value); setFinalMode(value);

Binary file not shown.

BIN
web/sounds/fail.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
web/sounds/failOrginal.ogg Normal file

Binary file not shown.

BIN
web/sounds/failOriginal.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
web/sounds/failfinal.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
web/sounds/intro.ogg Normal file

Binary file not shown.

BIN
web/sounds/schweinchen.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
web/sounds/textRichtig.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
web/sounds/zahlRichtig.ogg Normal file

Binary file not shown.