Implement custom asynchronous dialogs
This commit is contained in:
parent
b61dd53f91
commit
05484db40f
7 changed files with 84 additions and 13 deletions
|
@ -27,4 +27,5 @@ function Dom() {
|
||||||
}
|
}
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
21
www/game.js
21
www/game.js
|
@ -40,10 +40,23 @@ function Game(modules) {
|
||||||
deck.removeChild(deck.lastChild);
|
deck.removeChild(deck.lastChild);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(status.playing && status.step == "Scored") {
|
if(status.step == "Scored") {
|
||||||
play({koiKoi: confirm(
|
if(status.playing) {
|
||||||
"You scored ! Do you want to go on ? Press cancel to just get your points and end current month"
|
modules.screen.dialog({
|
||||||
)});
|
text: "You scored ! Do you want to get your points and end the round or KoiKoi ?",
|
||||||
|
answers: {
|
||||||
|
'End the round': function() {play({koiKoi: false})},
|
||||||
|
'KoiKoi !': function() {play({koiKoi: true});}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
modules.screen.dialog({
|
||||||
|
text: modules.room.name(o.game.playing) + " scored",
|
||||||
|
answers: {
|
||||||
|
'Ok': function() {}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,8 @@
|
||||||
<span class="score"></span>
|
<span class="score"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="dialog">
|
||||||
|
</div>
|
||||||
<p id="debug"></p>
|
<p id="debug"></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
13
www/login.js
13
www/login.js
|
@ -41,15 +41,18 @@ function Login(modules) {
|
||||||
|
|
||||||
modules.messaging.addEventListener(["Relay", "Invitation"], function(o) {
|
modules.messaging.addEventListener(["Relay", "Invitation"], function(o) {
|
||||||
var name = modules.room.name(o.from);
|
var name = modules.room.name(o.from);
|
||||||
var accept = false;
|
|
||||||
// invitations should come only from known players, in doubt say «no»
|
// invitations should come only from known players, in doubt say «no»
|
||||||
if(name) {
|
if(name) {
|
||||||
accept = confirm(name + " has invited you to a game");
|
modules.screen.dialog({
|
||||||
if(accept) {
|
text: name + " has invited you to a game",
|
||||||
modules.screen.select("game");
|
answers: {
|
||||||
|
Accept: function() {modules.messaging.send({tag: "Answer", accept: true}); modules.screen.select("game");},
|
||||||
|
Decline: function() {modules.messaging.send({tag: "Answer", accept: false});}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
modules.messaging.send({tag: "Answer", accept: false});
|
||||||
}
|
}
|
||||||
modules.messaging.send({tag: "Answer", accept: accept});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
modules.messaging.addEventListener(["Relay", "Answer"], function(o) {
|
modules.messaging.addEventListener(["Relay", "Answer"], function(o) {
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
window.addEventListener('load', function() {
|
window.addEventListener('load', function() {
|
||||||
var dom = Dom();
|
var dom = Dom();
|
||||||
var fun = Fun();
|
var fun = Fun();
|
||||||
var screen = Screen();
|
var screen = Screen({dom: dom});
|
||||||
var messaging = Messaging();
|
var messaging = Messaging();
|
||||||
var session = Session({messaging: messaging});
|
var session = Session({messaging: messaging});
|
||||||
var room = Room({dom: dom, messaging: messaging, session: session, fun: fun});
|
var room = Room({dom: dom, messaging: messaging, session: session, fun: fun});
|
||||||
var login = Login({dom: dom, messaging: messaging, room: room, screen: screen, session: session});
|
var login = Login({dom: dom, messaging: messaging, room: room, screen: screen, session: session});
|
||||||
var hanafuda = Hanafuda({fun: fun});
|
var hanafuda = Hanafuda({fun: fun});
|
||||||
var game = Game({dom: dom, fun: fun, hanafuda: hanafuda, messaging: messaging, room: room, session: session});
|
var game = Game({dom: dom, fun: fun, hanafuda: hanafuda, messaging: messaging, room: room, screen: screen, session: session});
|
||||||
|
|
||||||
messaging.start();
|
messaging.start();
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,3 +5,31 @@ body > div {
|
||||||
body > div.on {
|
body > div.on {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#dialog {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#dialog > div {
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
background: #fff;
|
||||||
|
padding: 0 1em;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dialog p.answers {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dialog button {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
function Screen() {
|
function Screen(modules) {
|
||||||
var current = document.querySelector("body > div.on");
|
var current = document.querySelector("body > div.on");
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
dialog: dialog,
|
||||||
select: select
|
select: select
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -10,4 +11,27 @@ function Screen() {
|
||||||
current = document.getElementById(name);
|
current = document.getElementById(name);
|
||||||
current.className = "on";
|
current.className = "on";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function closeAndRun(dialog, action) {
|
||||||
|
return function() {
|
||||||
|
dialog.className = '';
|
||||||
|
action();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function dialog(config) {
|
||||||
|
var layer = document.getElementById('dialog');
|
||||||
|
var dialog = modules.dom.make('div', {});
|
||||||
|
dialog.appendChild(modules.dom.make('p', {textContent: config.text}));
|
||||||
|
var answers = modules.dom.make('p', {class: 'answers'});
|
||||||
|
for(var key in config.answers) {
|
||||||
|
answers.appendChild(modules.dom.make('button', {
|
||||||
|
textContent: key,
|
||||||
|
onClick: closeAndRun(layer, config.answers[key])
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
dialog.appendChild(answers);
|
||||||
|
layer.appendChild(dialog);
|
||||||
|
layer.className = "on";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue