word: language includes for general use
authorMischa POSLAWSKY <perl@shiar.org>
Thu, 30 Dec 2021 02:31:41 +0000 (03:31 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Fri, 31 Dec 2021 04:29:05 +0000 (05:29 +0100)
Reorder translation columns and add (possibly foreign) category references
as stable interface for quizzes.  Exceptional category index format for .en
English moved to extensionless include.

Makefile
tools/mkwordlist
word.plp
word/multichoice.js
word/wijzer.js

index aaf92839dbb4a64a251dc9f031b934a1dd2b272f..738864709f5a106280dd60190fc4e30461c9d24f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -23,7 +23,7 @@ plan.plp: TODO
 UPDATE: $(download)
        $(call cmdsave,git log -1 --date=short --pretty="%ad    %s")
 
-word: word/put.min.js data/wordlist.en.json data/wordlist.nl.json data/wordlist.ru.json data/wordpairs.json
+word: word/put.min.js data/wordlist.inc.pl data/wordlist.en.json data/wordlist.nl.json data/wordlist.ru.json data/wordpairs.json
 
 word/put.js: $(download)
        tools/wget-ifmodified https://github.com/kriszyp/put-selector/raw/master/put.js $@
@@ -81,7 +81,7 @@ data/wordlist.version.txt: force
        @[ -e $@ ] || date -Is >$@
        @perl -ni -I. -MShiar_Sheet::DB -E 'say (Shiar_Sheet::DB->connect->select(word => "max(updated)", \["updated>?", $$_])->list or exit 1)' $@ || true
 
-data/wordlist.en.inc.pl: tools/mkwordlist data/wordlist.version.txt
+data/wordlist.inc.pl: tools/mkwordlist data/wordlist.version.txt
        $(call cmdsave,$<)
 data/wordlist.%.inc.pl: tools/mkwordlist data/wordlist.version.txt
        $(call cmdsave,$< $*)
index 78859b4a09cb2a0cb48dd39c5f7a1edddd90a5ca..2e38a8d45ad34f1078db74b93ba5175d5b35121f 100755 (executable)
@@ -13,7 +13,7 @@ use Data::Dump 'pp';
 my %rows;
 if (my $lang = shift @ARGV) {
        my %filter = (lang => $lang);
-       my $cols = "ref, id, prio, array_to_string(form || alt, '/')";
+       my $cols = "ref, array_to_string(form || alt, '/'), prio, id, cat";
        %rows = $db->select(_word_ref => $cols, \%filter)->map_arrays;
        say pp \%rows
                =~ s/\\x\{([0-9A-F]+)\}/chr hex $1/ger;
index aed42fd57b997f08f6b1904c587df1f91de3b5d3..f47c4f48ed167d63d4608d2d71c5e80e96dbae13 100644 (file)
--- a/word.plp
+++ b/word.plp
@@ -1,12 +1,13 @@
 <(common.inc.plp)><:
 
 our $lang = $get{lang} || 'en';
-our $wordlistbase = "data/wordlist.$lang";
+our $wordlistbase = "data/wordlist";
 
 if ($Request and $Request =~ m{\A([^/]+)}) {
        my $page = "word/$1.plp";
        utf8::downgrade($page); # unicode filename breaks contents encoding
        if (-e $page) {
+               $wordlistbase .= ".$lang";
                Include $page;
                exit;
        }
index 649d19a5d9460e0ae549f15576870b18ea1c97bb..761b966dd3cc3976e9affc468e3c661bfc611824 100644 (file)
@@ -2,15 +2,15 @@ class WordMultiChoice extends WordQuiz {
        next() {
                let word = this.words.shift();
                let form = put(this.form,
-                       '+img[src=$]+ul', `/data/word/en/${word[0]}.jpg`,
+                       '+img[src=$]+ul', `/data/word/en/${word[2]}.jpg`,
                );
 
-               let answers = [word[2], this.words[0][2], this.words[1][2], this.words[2][2]]
+               let answers = [word[0], this.words[0][0], this.words[1][0], this.words[2][0]]
                        .shuffle()
                answers.forEach(suggest => {
                        let label = suggest.replace(/\/.*/, '');
                        let option = put(form, 'li', label, {onclick: () => {
-                               if (suggest != word[2]) {
+                               if (suggest != word[0]) {
                                        // incorrect
                                        put(option, '.wrong');
                                        return;
index b4dab8f308e5042b1ce90a1ccc880b31a09a2e2d..b199be4ef28d42249cd86a3a568024bfc2d33de0 100644 (file)
@@ -11,8 +11,8 @@ class WordWijzer extends WordQuiz {
 
                this.question.innerHTML = '';
                put(this.question,
-                       '[data-id=$] img[src=$]', word[0],
-                       `/data/word/en/${word[0]}.jpg`
+                       '[data-id=$] img[src=$]', word[2],
+                       `/data/word/en/${word[2]}.jpg`
                );
        }
 
@@ -33,9 +33,9 @@ class WordWijzer extends WordQuiz {
                let answers = put(this.form, 'ul');
                this.words
                        .forEach(answer => {
-                               let label = answer[2].replace(/\/.*/, ''); // primary form
+                               let label = answer[0].replace(/\/.*/, ''); // primary form
                                put(answers, 'li[data-id=$][onclick=""]',
-                                       answer[0], label, {onclick: e => this.verify(e)}
+                                       answer[2], label, {onclick: e => this.verify(e)}
                                )
                        });
                this.words.shuffle();