summaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/javascript/minibar/minibar.css5
-rw-r--r--src/runtime/javascript/minibar/saldotest.js89
-rw-r--r--src/runtime/javascript/minibar/support.js18
3 files changed, 111 insertions, 1 deletions
diff --git a/src/runtime/javascript/minibar/minibar.css b/src/runtime/javascript/minibar/minibar.css
index 17d7350c9..84d02ec1a 100644
--- a/src/runtime/javascript/minibar/minibar.css
+++ b/src/runtime/javascript/minibar/minibar.css
@@ -35,3 +35,8 @@ div.modtime { float: right; }
.modtime { color: #444; white-space: nowrap; }
ul.space>li { margin-top: 0.5ex; }
+
+div#saldospel input[type=button] { font-size: 100%; }
+
+div#saldospel input.correct { color: green; }
+div#saldospel input.incorrect { color: red; } \ No newline at end of file
diff --git a/src/runtime/javascript/minibar/saldotest.js b/src/runtime/javascript/minibar/saldotest.js
index cc2cdd1b1..8103e6e4f 100644
--- a/src/runtime/javascript/minibar/saldotest.js
+++ b/src/runtime/javascript/minibar/saldotest.js
@@ -3,6 +3,14 @@ var Saldo_ws_url = "http://spraakbanken.gu.se/ws/saldo-ws/";
//var Saldo_ff_url = Saldo_ws_url+"ff/json+remember_completions/";
var Saldo_lid_url = Saldo_ws_url+"lid/json";
+function saldo_ws(fn,fmt,arg,cont_name) {
+ jsonp(Saldo_ws_url+fn+"/"+fmt+(cont_name ? "+"+cont_name : "")+"/"+arg,"");
+}
+
+function saldo_json(fn,arg,cont_name) { saldo_ws(fn,"json",arg,cont_name); }
+function saldo_lid(arg,cont_name) { saldo_json("lid",arg,cont_name); }
+function saldo_lid_rnd(cont_name) { saldo_lid("rnd?"+Math.random(),cont_name); }
+
var ordlista=[];
var current="";
@@ -22,7 +30,7 @@ function start_saldotest() {
}
function random_word() {
- jsonp(Saldo_lid_url+"+show_random/rnd?"+Math.random());
+ saldo_lid_rnd("show_random");
}
function show_random(lid) {
@@ -106,6 +114,8 @@ function allowed(c) {
}
}
+// ordklasser: mxc sxc (förekommer bara som prefix),
+// *h (förekommer bara som suffix)
function ignore(msd) {
switch(msd) {
case "c":
@@ -238,3 +248,80 @@ function show_prefixes() {
trans.innerHTML="Prefix av "+current+":";
show_prefixes_of(trans,current);
}
+
+/* -------------------------------------------------------------------------- */
+
+var spel={ antal_ord: 4, // antal närbesläktade ord att visa
+ antal_korrekta_svar: 0,
+ antal_felaktiga_svar: 0
+ };
+
+function start_saldospel() {
+ spel.hylla=div_id("hylla");
+ spel.status=div_id("status");
+ element("saldospel").innerHTML="<h2>Vilket ord ska bort? <span id=score></span></h2>";
+ appendChildren(element("saldospel"),
+ [spel.hylla,spel.status,
+ button("Nya ord","spel0()")]);
+ spel.score=element("score");
+ spel0();
+}
+
+function spel0() { // Välj ord 1
+ saldo_lid_rnd("spel1");
+}
+
+function spel1(lid) { // Slå upp md1 för ord 1
+ spel.lid=lid;
+ saldo_json("md1",lid.lex,"spel2");
+}
+
+function spel2(md1) { // Kontrollera att det finns minst 4 ord i md1 för ord1
+ if(md1.length<spel.antal_ord) spel0();
+ else {
+ spel.md1=md1;
+ spel3();
+ }
+}
+
+function spel3() { // Välj ord 2
+ saldo_lid_rnd("spel4");
+}
+
+function spel4(lid) { // Slå upp md1 för ord 2
+ spel.lid2=lid;
+ saldo_json("md1",lid.lex,"spel5");
+}
+
+function spel5(md1) { // Kontrollera att ord 1 och ord 2 inte har något gemensamt
+ var ordlista1=map(wf,spel.md1);
+ var ord2=wf(spel.lid2.lex);
+ var ordlista2=map(wf,md1).concat(ord2);
+ if(overlaps(ordlista1,ordlista2)) spel3();
+ else spel6(ordlista1,ord2);
+}
+
+function spel6(ordlista1,ord2) {
+ spel.ord2=ord2;
+ var pos=Math.floor(Math.random()*spel.antal_ord);
+ var ordlista=shuffle(shuffle(ordlista1).slice(0,spel.antal_ord).concat(ord2));
+ spel.hylla.innerHTML="";
+ var lista=empty_class("p","space");
+ for(var i=0;i<ordlista.length;i++)
+ lista.appendChild((button(ordlista[i],"spel7(this)")));
+ spel.hylla.appendChild(lista);
+}
+
+function spel7(btn) {
+ btn.disabled=true;
+ var ok=btn.value==spel.ord2;
+ btn.setAttribute("class",ok ? "correct" : "incorrect");
+ if(ok) spel.antal_korrekta_svar++; else spel.antal_felaktiga_svar++;
+ spel.score.innerHTML=""+spel.antal_korrekta_svar+" rätt, "
+ +spel.antal_felaktiga_svar+" fel";
+ if(ok) spel0();
+}
+
+function wf(ord) { // word form, wf("band..1") == "band"
+ return ord.split(".",1)[0].split("_").join(" ");
+}
diff --git a/src/runtime/javascript/minibar/support.js b/src/runtime/javascript/minibar/support.js
index f124d5194..2161ff650 100644
--- a/src/runtime/javascript/minibar/support.js
+++ b/src/runtime/javascript/minibar/support.js
@@ -56,6 +56,7 @@ function div_class(cls,contents) { return wrap_class("div",cls,contents); }
function p(contents) { return wrap("p",contents); }
function dt(contents) { return wrap("dt",contents); }
+function li(contents) { return wrap("li",contents); }
function th(contents) { return wrap("th",contents); }
function td(contents) { return wrap("td",contents); }
@@ -165,3 +166,20 @@ function mapc_from(f,xs,i,ys,cont) {
else
cont(ys);
}
+
+function overlaps(as,bs) {
+ for(var i=0;i<as.length;i++)
+ if(elem(as[i],bs)) return true;
+ return false;
+}
+
+function elem(a,as) {
+ for(var i=0;i<as.length;i++)
+ if(a==as[i]) return true;
+ return false;
+}
+
+function shuffle(a) {
+ for(i=0;i<a.length;i++) swap(a,i,Math.floor(Math.random()*a.length))
+ return a;
+}