Merge branch 'develop' into timer
|
@ -164,8 +164,8 @@ msgstr "Son ar c'hemennadenoù"
|
|||
msgid "Number of tiles in the bag:"
|
||||
msgstr "Niver a bezhioù er sac'h:"
|
||||
|
||||
msgid "Click on it to take one."
|
||||
msgstr "Klikit warnañ evit kemer unan"
|
||||
msgid "Click on the bag to take onei tile."
|
||||
msgstr ""
|
||||
|
||||
msgid "Put back all the tiles in the bag"
|
||||
msgstr "Adlakaat an holl pezhioù er sac'h"
|
||||
|
|
|
@ -1,121 +1,121 @@
|
|||
#TranslationFunction trivabble
|
||||
|
||||
msgid "Afrikaans"
|
||||
msgstr "afrikaans"
|
||||
msgstr "Afrikaans"
|
||||
|
||||
msgid "Arabic"
|
||||
msgstr "arabe"
|
||||
msgstr "Arabe"
|
||||
|
||||
msgid "Bulgarian"
|
||||
msgstr "bulgare"
|
||||
msgstr "Bulgare"
|
||||
|
||||
msgid "Breton"
|
||||
msgstr "breton"
|
||||
msgstr "Breton"
|
||||
|
||||
msgid "Catalan"
|
||||
msgstr "catalan"
|
||||
msgstr "Catalan"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr "tchèque"
|
||||
msgstr "Tchèque"
|
||||
|
||||
msgid "Welsh"
|
||||
msgstr "gallois"
|
||||
msgstr "Gallois"
|
||||
|
||||
msgid "Danish"
|
||||
msgstr "danois"
|
||||
msgstr "Danois"
|
||||
|
||||
msgid "German"
|
||||
msgstr "allemand"
|
||||
msgstr "Allemand"
|
||||
|
||||
msgid "Greek"
|
||||
msgstr "grec"
|
||||
msgstr "Grec"
|
||||
|
||||
msgid "English"
|
||||
msgstr "anglais"
|
||||
msgstr "Anglais"
|
||||
|
||||
msgid "Esperanto"
|
||||
msgstr "espéranto"
|
||||
msgstr "Espéranto"
|
||||
|
||||
msgid "Spanish"
|
||||
msgstr "espagnol"
|
||||
msgstr "Espagnol"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr "estonien"
|
||||
msgstr "Estonien"
|
||||
|
||||
msgid "Basque"
|
||||
msgstr "basque"
|
||||
msgstr "Basque"
|
||||
|
||||
msgid "Finnish"
|
||||
msgstr "finlandais"
|
||||
msgstr "Finlandais"
|
||||
|
||||
msgid "French"
|
||||
msgstr "français"
|
||||
msgstr "Français"
|
||||
|
||||
msgid "Irish"
|
||||
msgstr "irlandais"
|
||||
msgstr "Irlandais"
|
||||
|
||||
msgid "Hebrew"
|
||||
msgstr "hébreu"
|
||||
msgstr "Hébreu"
|
||||
|
||||
msgid "Croatian"
|
||||
msgstr "croate"
|
||||
msgstr "Croate"
|
||||
|
||||
msgid "Hungarian"
|
||||
msgstr "hongrois"
|
||||
msgstr "Hongrois"
|
||||
|
||||
msgid "Armenian"
|
||||
msgstr "arménien"
|
||||
msgstr "Arménien"
|
||||
|
||||
msgid "Icelandic"
|
||||
msgstr "islandais"
|
||||
msgstr "Islandais"
|
||||
|
||||
msgid "Italian"
|
||||
msgstr "italien"
|
||||
msgstr "Italien"
|
||||
|
||||
msgid "Latin"
|
||||
msgstr "latin"
|
||||
msgstr "Latin"
|
||||
|
||||
msgid "Lithuanian"
|
||||
msgstr "lituanien"
|
||||
msgstr "Lituanien"
|
||||
|
||||
msgid "Latvian"
|
||||
msgstr "letton"
|
||||
msgstr "Letton"
|
||||
|
||||
msgid "Malay"
|
||||
msgstr "malais"
|
||||
msgstr "Malais"
|
||||
|
||||
msgid "Dutch"
|
||||
msgstr "néerlandais"
|
||||
msgstr "Néerlandais"
|
||||
|
||||
msgid "Norwegian"
|
||||
msgstr "norvégien"
|
||||
msgstr "Norvégien"
|
||||
|
||||
msgid "Polish"
|
||||
msgstr "polonais"
|
||||
msgstr "Polonais"
|
||||
|
||||
msgid "Portuguese"
|
||||
msgstr "portugais"
|
||||
msgstr "Portugais"
|
||||
|
||||
msgid "Romanian"
|
||||
msgstr "roumain"
|
||||
msgstr "Roumain"
|
||||
|
||||
msgid "Russian"
|
||||
msgstr "russe"
|
||||
msgstr "Russe"
|
||||
|
||||
msgid "Slovak"
|
||||
msgstr "slovaque"
|
||||
msgstr "Slovaque"
|
||||
|
||||
msgid "Slovenian"
|
||||
msgstr "slovène"
|
||||
msgstr "Slovène"
|
||||
|
||||
msgid "Swedish"
|
||||
msgstr "suédois"
|
||||
msgstr "Suédois"
|
||||
|
||||
msgid "Turkish"
|
||||
msgstr "turc"
|
||||
msgstr "Turc"
|
||||
|
||||
msgid "Ukrainian"
|
||||
msgstr "ukrainien"
|
||||
msgstr "Ukrainien"
|
||||
|
||||
msgid "Klingon"
|
||||
msgstr "klingon"
|
||||
msgstr "Klingon"
|
||||
|
|
|
@ -85,8 +85,8 @@ msgstr "Bruit des messages"
|
|||
msgid "Number of tiles in the bag:"
|
||||
msgstr "Nombre de pièces dans le sac :"
|
||||
|
||||
msgid "Click on it to take one."
|
||||
msgstr "Cliquez dessus pour en prendre une."
|
||||
msgid "Click on the bag to take one tile."
|
||||
msgstr "Cliquez sur le sac pour prendre une pièce."
|
||||
|
||||
msgid "Put back all the tiles in the bag"
|
||||
msgstr "Ranger toutes les pièces dans le sac"
|
||||
|
@ -136,6 +136,12 @@ msgstr "Tour"
|
|||
msgid "Who's turn? Click on the Turn button!"
|
||||
msgstr "À qui le tour ? Cliquez sur le bouton Tour !"
|
||||
|
||||
msgid "Click on (+) to increase someone's score."
|
||||
msgstr "Cliquez sur (+) pour augmenter le score de quelqu’un."
|
||||
|
||||
msgid "Show a cell to everyone by double-clicking on it."
|
||||
msgstr "Montrez une case à tout le monde en double-cliquant dessus."
|
||||
|
||||
msgid "Show my rack to other players"
|
||||
msgstr "Montrer mon jeu aux autres"
|
||||
|
||||
|
@ -187,9 +193,6 @@ msgstr "Dictionnaire incorrect."
|
|||
msgid "Can't load dictionary file."
|
||||
msgstr "Impossible de charger le dictionnaire"
|
||||
|
||||
msgid "Enable spell checker"
|
||||
msgstr "Activer le vérificateur orthographique"
|
||||
|
||||
msgid "Spell checking requires Trivabble to download a dictionary. Do you confirm?"
|
||||
msgstr "La vérification orthographique nécessite que Trivabble télécharge un dictionnaire. Confirmez-vous ?"
|
||||
|
||||
|
@ -205,8 +208,8 @@ msgstr "Fenêtre de configuration"
|
|||
msgid "Look at:"
|
||||
msgstr "Regardez ici :"
|
||||
|
||||
msgid "Double tap duration"
|
||||
msgstr "Durée de la double tape"
|
||||
msgid "Double tap duration:"
|
||||
msgstr "Durée de la double tape :"
|
||||
|
||||
msgid "(slow)"
|
||||
msgstr "(lent)"
|
||||
|
@ -214,12 +217,18 @@ msgstr "(lent)"
|
|||
msgid "(fast)"
|
||||
msgstr "(rapide)"
|
||||
|
||||
msgid "Flash light duration"
|
||||
msgstr "Durée du flash laser"
|
||||
msgid "Flash light duration:"
|
||||
msgstr "Durée du flash laser :"
|
||||
|
||||
msgid "Flash light color"
|
||||
msgstr "Couleur du flash laser"
|
||||
|
||||
msgid "Tip!"
|
||||
msgstr "Astuce !"
|
||||
|
||||
msgid "Next tip"
|
||||
msgstr "Astuce suivante"
|
||||
|
||||
msgid "Turn timer:"
|
||||
msgstr "Temps du tour :"
|
||||
|
||||
|
|
|
@ -156,8 +156,8 @@ msgstr "Sunet de la mesaje"
|
|||
msgid "Number of tiles in the bag:"
|
||||
msgstr "Număr de jetoane în sac:"
|
||||
|
||||
msgid "Click on it to take one."
|
||||
msgstr "Apasă pe el ca să iei unul."
|
||||
msgid "Click on the bag to take one tile."
|
||||
msgstr ""
|
||||
|
||||
msgid "Put back all the tiles in the bag"
|
||||
msgstr "Pune toate jetoanele înapoi în sac"
|
||||
|
|
|
@ -87,7 +87,7 @@ msgstr ""
|
|||
msgid "Number of tiles in the bag:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click on it to take one."
|
||||
msgid "Click on the bag to take one tile."
|
||||
msgstr ""
|
||||
|
||||
msgid "Put back all the tiles in the bag"
|
||||
|
@ -193,9 +193,6 @@ msgstr ""
|
|||
msgid "Can't load dictionary file."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable spell checker"
|
||||
msgstr ""
|
||||
|
||||
msgid "Spell checking requires Trivabble to download a dictionary. Do you confirm?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -210,7 +207,7 @@ msgid "Configuration window"
|
|||
msgid "Look at:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Double tap duration"
|
||||
msgid "Double tap duration:"
|
||||
msgstr ""
|
||||
|
||||
msgid "(slow)"
|
||||
|
@ -219,12 +216,24 @@ msgstr ""
|
|||
msgid "(fast)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Flash light duration"
|
||||
msgid "Flash light duration:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Flash light color"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click on (+) to increase someone's score."
|
||||
msgstr ""
|
||||
|
||||
msgid "Show a cell to everyone by double-clicking on it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Tip!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Next tip"
|
||||
msgstr ""
|
||||
|
||||
msgid "Turn timer:"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
divAlert.style.display = "none";
|
||||
if (divAlertCallback) {
|
||||
divAlertCallback(alertInput.value);
|
||||
divAlertCallback = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,6 +30,7 @@
|
|||
divAlert.style.display = "none";
|
||||
if (divAlertCallback) {
|
||||
divAlertCallback(null);
|
||||
divAlertCallback = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,12 +38,15 @@
|
|||
divAlert.style.display = "none";
|
||||
if (divAlertCallbackYes) {
|
||||
divAlertCallbackYes();
|
||||
divAlertCallbackYes = null;
|
||||
}
|
||||
}
|
||||
|
||||
function confirmNo() {
|
||||
divAlert.style.display = "none";
|
||||
if (divAlertCallbackNo) {
|
||||
divAlertCallbackNo();
|
||||
divAlertCallbackNo = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,6 +117,12 @@
|
|||
divAlertOuter.appendChild(divAlertButton);
|
||||
divAlert.appendChild(divAlertOuter);
|
||||
document.body.appendChild(divAlert);
|
||||
document.body.addEventListener("keydown", function (e) {
|
||||
if (e.key === "Escape") {
|
||||
promptCancel();
|
||||
confirmNo();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
global.myAlert = function (msg, callback) {
|
||||
|
|
221
public/bag.svg
|
@ -1,23 +1,202 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg id="svg2" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" height="319mm" width="331mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1172.8346 1130.315" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs id="defs4">
|
||||
<linearGradient id="linearGradient5620" y2="482.82" gradientUnits="userSpaceOnUse" x2="1120.7" gradientTransform="matrix(1.21 0 0 1.21 -122.4 -73.147)" y1="482.82" x1="56.525">
|
||||
<stop id="stop5616" offset="0"/>
|
||||
<stop id="stop5618" stop-color="#33333f" stop-opacity=".94118" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer1" transform="translate(0 77.953)">
|
||||
<path id="path3348" d="m510.26 107.75-273.12 245.46-127.91 449.43 490.91 207.46 456.36-183.26-159.04-487.46-221.26-224.71 190.18-148.75c-88.433-9.4796-177.32-14.756-266.25-15.804-96.89-1.1424-193.84 2.7337-290.33 11.607l200.46 146.03z" fill-rule="evenodd" stroke="#000" stroke-width="1.21px" fill="url(#linearGradient5620)"/>
|
||||
<path id="path4164" stroke-linejoin="round" d="m684.88 431.89c-6.34-58.38-23.22-115.59-49.58-168.06-29.85-59.42-71.88-112.69-122.72-155.55 22.722 2.9086 45.556 4.9435 68.435 6.0986 34.007 1.717 68.112 1.489 102.09-0.68242" stroke="#b47f58" stroke-linecap="round" stroke-width="12.1" fill="none"/>
|
||||
</g>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg2"
|
||||
height="319mm"
|
||||
width="331mm"
|
||||
version="1.1"
|
||||
viewBox="0 0 1172.8346 1130.315"
|
||||
sodipodi:docname="bag.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1355"
|
||||
id="namedview11"
|
||||
showgrid="false"
|
||||
inkscape:zoom="3.3994373"
|
||||
inkscape:cx="132.01055"
|
||||
inkscape:cy="886.12477"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g1005" />
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient990">
|
||||
<stop
|
||||
style="stop-color:#e6e6e6;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop986" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop988" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5620"
|
||||
y2="482.82"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="1120.7"
|
||||
gradientTransform="matrix(1.21 0 0 1.21 -122.4 -73.147)"
|
||||
y1="482.82"
|
||||
x1="56.525">
|
||||
<stop
|
||||
id="stop5616"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop5618"
|
||||
stop-color="#33333f"
|
||||
stop-opacity=".94118"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient953"
|
||||
id="linearGradient955"
|
||||
x1="-135.19894"
|
||||
y1="53.679901"
|
||||
x2="-135.27045"
|
||||
y2="97.79319"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.6041101,0,0,1.6040558,56.429896,-19.958597)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient953">
|
||||
<stop
|
||||
style="stop-color:#dcdcdc;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop949" />
|
||||
<stop
|
||||
style="stop-color:#f0f0f0;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop951" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient990"
|
||||
id="linearGradient984"
|
||||
x1="19.518953"
|
||||
y1="456.18195"
|
||||
x2="75.192528"
|
||||
y2="456.18195"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="g1005"
|
||||
transform="matrix(1.4450193,-0.42637031,0.42637031,1.4450193,-580.17097,642.33303)">
|
||||
<rect
|
||||
style="fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:#b4b4b4;stroke-width:1.87486361;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="rect30310-3"
|
||||
width="53.798576"
|
||||
height="107.53391"
|
||||
x="20.456453"
|
||||
y="402.41501"
|
||||
transform="matrix(0.56850715,-0.82267832,0.82284526,0.5682655,0,0)"
|
||||
ry="0" />
|
||||
<rect
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f5f5c8;fill-opacity:1;fill-rule:nonzero;stroke:#646400;stroke-width:1.68281;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="rect30310"
|
||||
width="47.172165"
|
||||
height="47.172165"
|
||||
x="404.79202"
|
||||
y="-73.046112"
|
||||
transform="rotate(34.895179)" />
|
||||
<path
|
||||
d="m 375.58291,176.93724 6.67114,4.65302 -0.62629,0.89793 -2.79945,-1.95258 -4.87407,6.98807 -1.07223,-0.74788 4.87405,-6.98806 -2.79944,-1.95257 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04247;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="path865" />
|
||||
<path
|
||||
d="m 388.64898,192.98983 q 0.26228,0.35567 0.31922,0.9607 0.0623,0.60872 -0.0745,1.50267 l -0.42031,2.91028 -1.14619,-0.79945 0.40216,-2.72666 q 0.16175,-1.06492 -0.0274,-1.58162 -0.18393,-0.51303 -0.81777,-0.95512 l -1.16204,-0.81049 -2.32466,3.33292 -1.06696,-0.74418 5.50035,-7.886 2.40859,1.67995 q 1.35219,0.94313 1.62352,1.97249 0.27132,1.02938 -0.52444,2.17029 -0.51945,0.74475 -1.21069,0.99283 -0.68594,0.25175 -1.47882,-0.0186 z m -0.36275,-5.17596 -1.95257,2.79945 1.34162,0.93577 q 0.77117,0.53788 1.40887,0.45661 0.64667,-0.0828 1.12928,-0.77481 0.48263,-0.69194 0.32963,-1.31685 -0.14403,-0.62652 -0.9152,-1.16441 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04247;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="path862" />
|
||||
<path
|
||||
d="m 401.80985,195.77451 1.06696,0.74418 -5.50036,7.886 -1.06697,-0.74418 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04247;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="path859" />
|
||||
<path
|
||||
d="m 364.54235,199.2558 2.48963,-9.98593 1.11449,0.77735 -2.13253,8.38202 7.13456,-4.89318 1.10922,0.77366 -8.5058,5.78975 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04247;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="path868" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.1889px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04247;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="423.34247"
|
||||
y="-44.575214"
|
||||
id="text30292"
|
||||
transform="rotate(34.895179)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30290"
|
||||
x="423.34247"
|
||||
y="-44.575214"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.1889px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:1.04247;stroke-miterlimit:4;stroke-dasharray:none">A</tspan></text>
|
||||
<path
|
||||
d="m 389.87343,211.89098 -2.0152,2.88924 1.71136,1.19366 q 0.86096,0.6005 1.51979,0.53397 0.6678,-0.0681 1.17988,-0.80233 0.51578,-0.73948 0.34165,-1.37913 -0.16516,-0.64125 -1.02611,-1.24176 z m 2.26204,-3.24314 -1.65784,2.37689 1.5793,1.10155 q 0.78174,0.54524 1.36467,0.52 0.59189,-0.0268 1.01187,-0.62901 0.41632,-0.59686 0.23704,-1.16158 -0.174,-0.56105 -0.95574,-1.1063 z m -0.4554,-1.62099 2.72549,1.90099 q 1.22014,0.85103 1.52671,1.8186 0.30658,0.96759 -0.34551,1.90251 -0.50472,0.72362 -1.14117,0.91568 -0.63646,0.19206 -1.36511,-0.15912 0.66912,0.71795 0.72647,1.5588 0.0662,0.83926 -0.49368,1.64213 -0.73681,1.0564 -1.85673,1.13109 -1.11991,0.0747 -2.4457,-0.85001 l -2.83113,-1.97467 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04247;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="path856" />
|
||||
<path
|
||||
d="m 356.50627,207.03039 -2.0152,2.88924 1.71137,1.19366 q 0.86096,0.6005 1.51979,0.53397 0.66779,-0.0681 1.17988,-0.80233 0.51578,-0.73948 0.34165,-1.37913 -0.16516,-0.64125 -1.02612,-1.24176 z m 2.26204,-3.24314 -1.65784,2.37689 1.57931,1.10155 q 0.78173,0.54525 1.36466,0.52 0.5919,-0.0268 1.01188,-0.62901 0.4163,-0.59686 0.23703,-1.16158 -0.17399,-0.56105 -0.95573,-1.1063 z m -0.45539,-1.62099 2.72549,1.901 q 1.22014,0.85102 1.52671,1.81861 0.30658,0.96758 -0.34551,1.90249 -0.50472,0.72362 -1.14118,0.91568 -0.63645,0.19206 -1.3651,-0.15912 0.66912,0.71795 0.72647,1.55881 0.0662,0.83925 -0.49368,1.64212 -0.73682,1.05639 -1.85673,1.13109 -1.11992,0.0747 -2.4457,-0.85001 l -2.83114,-1.97467 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04247;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="path871" />
|
||||
<path
|
||||
d="m 370.41237,210.97107 1.06695,0.74419 -4.87405,6.98805 3.83999,2.67834 -0.62629,0.89795 -4.90697,-3.42253 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04247;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="path874" />
|
||||
<path
|
||||
d="m 383.47589,219.82112 4.98619,3.47779 -0.6263,0.89795 -3.91922,-2.73361 -1.62837,2.33464 3.75549,2.61939 -0.6263,0.89793 -3.75549,-2.61938 -1.9931,2.85754 4.01431,2.79992 -0.62631,0.89793 -5.08125,-3.5441 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04247;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="path877" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.0182944px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 389.96115,186.00939 -0.007,0.34731"
|
||||
id="path30411"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(0 77.953)">
|
||||
<path
|
||||
id="path3348"
|
||||
d="m510.26 107.75-273.12 245.46-127.91 449.43 490.91 207.46 456.36-183.26-159.04-487.46-221.26-224.71 190.18-148.75c-88.433-9.4796-177.32-14.756-266.25-15.804-96.89-1.1424-193.84 2.7337-290.33 11.607l200.46 146.03z"
|
||||
fill-rule="evenodd"
|
||||
stroke="#000"
|
||||
stroke-width="1.21px"
|
||||
fill="url(#linearGradient5620)" />
|
||||
<path
|
||||
id="path4164"
|
||||
stroke-linejoin="round"
|
||||
d="m684.88 431.89c-6.34-58.38-23.22-115.59-49.58-168.06-29.85-59.42-71.88-112.69-122.72-155.55 22.722 2.9086 45.556 4.9435 68.435 6.0986 34.007 1.717 68.112 1.489 102.09-0.68242"
|
||||
stroke="#b47f58"
|
||||
stroke-linecap="round"
|
||||
stroke-width="12.1"
|
||||
fill="none" />
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 14 KiB |
|
@ -14,12 +14,28 @@ window.TrivabbleConf = {
|
|||
// Max consecutive tries before blacklisting WebSockets for the current session
|
||||
MAX_WEBSOCKET_ERRORS: 1,
|
||||
|
||||
// to tweak only if your webserver is shared with other conflicting resources at / ( ex: yunohost integration )
|
||||
// To tweak only if your webserver is shared with other conflicting resources at / (e.g. Yunohost integration)
|
||||
APP_PATH: "",
|
||||
|
||||
// Whether the spell checker is enabled (dictionaries must be downloaded on the server before enabling this option)
|
||||
ENABLE_SPELL_CHECKER: false,
|
||||
|
||||
// The color of the flash light when double clicking on a cell
|
||||
FLASH_LIGHT_COLOR: "#EE6633",
|
||||
|
||||
// The list of durations of the flash light available in the settings box
|
||||
FLASH_LIGHT_DURATIONS: [800, 1600, 3200],
|
||||
|
||||
// The defaut flash light duration. If not set, the value at the middle of the previous array is used.
|
||||
FLASH_LIGHT_DURATION: 1600,
|
||||
|
||||
// The list of durations used to detect a double tap available in the settings box
|
||||
DOUBLE_TAP_DURATIONS: [650, 1100, 1800, 3000, 5000],
|
||||
|
||||
// The defaut double tap duration. If not set, the value at the middle of the previous array is used.
|
||||
DOUBLE_TAP_DURATION: 1800,
|
||||
|
||||
|
||||
// I don't like trailing commas, here is a nice message for you reading this file :-)
|
||||
HAVE_FUN: true
|
||||
};
|
||||
|
|
|
@ -13,9 +13,15 @@
|
|||
<script src="alert.js"></script>
|
||||
<script src="touch2click.js"></script>
|
||||
<script src="trivabble.js"></script>
|
||||
<link rel="icon" type="image/svg+xml" href="logo/path.svg" />
|
||||
<link rel="icon" type="image/png" href="logo/16.png" sizes="16x16" />
|
||||
<link rel="icon" type="image/png" href="logo/32.png" sizes="32x32" />
|
||||
<link rel="icon" type="image/png" href="logo/86.png" sizes="86x86" />
|
||||
<link rel="icon" type="image/png" href="logo/180.png" sizes="180x180" />
|
||||
<link rel="icon" type="image/png" href="logo/192.png" sizes="192x192" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="menu">
|
||||
<div id="menu" class="panel">
|
||||
<button data-l10n="text-content" id="join-game">Join adversaries</button>
|
||||
<p id="p-name"> <span data-l10n="text-content">You are:</span> <span id="name" data-l10n="text-content">(name to give)</span><br /><button class="minibutton" id="change-name" data-l10n="text-content">Change</button></p>
|
||||
<button id="clear-game" data-l10n="text-content">Put back all the tiles in the bag</button>
|
||||
|
@ -24,49 +30,67 @@
|
|||
<textarea id="chat-ta" placeholder="Write a message to your adversaries here" data-l10n="placeholder"></textarea>
|
||||
<button id="chat-btn" class="minibutton" data-l10n="text-content">Send message</button>
|
||||
<div id="lang-selection">
|
||||
<label>
|
||||
<span data-l10n="text-content">Interface language: </span>
|
||||
<p>
|
||||
<label for="select-lang" data-l10n="text-content">Interface language: </label>
|
||||
<select id="select-lang">
|
||||
<option value="en">English</option>
|
||||
<option value="fr">Français</option>
|
||||
<option value="br">Brezhoneg</option>
|
||||
<option value="ro">Română</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<div id="board-lang-selection" style="display:none">
|
||||
<label>
|
||||
<span data-l10n="text-content">Board language: </span>
|
||||
</p>
|
||||
<p id="board-lang-selection" hidden="true">
|
||||
<label for="board-lang" data-l10n="text-content">Board language: </label>
|
||||
<select id="board-lang">
|
||||
<option value="fr">French</option>
|
||||
</select>
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal" id="modal-settings-dialog">
|
||||
<section class="modal" id="modal-settings-dialog">
|
||||
<div class="modal-content">
|
||||
<h2>
|
||||
<span data-l10n="text-content">Settings</span>
|
||||
<span class="modal-button" id="btn-settings-close">×</span>
|
||||
</h2>
|
||||
<div id="prefs">
|
||||
<div class="modal-header">
|
||||
<h1 data-l10n="text-content">Settings</h1>
|
||||
<button class="modal-button" id="btn-settings-close">×</button>
|
||||
</div>
|
||||
<div>
|
||||
<p><label><input type="checkbox" id="tiles-sound" /><span data-l10n="text-content">Sound of the tiles</span></label></p>
|
||||
<p><label><input type="checkbox" id="msg-sound" /><span data-l10n="text-content">Sound of messages</span></label></p>
|
||||
</div>
|
||||
<div id="prefs">
|
||||
<p id="enable-spell-checker-outer" style="display:none"><label><input type="checkbox" id="enable-spell-checker" /> <span data-l10n="text-content">Enable spell checker</span></label></p>
|
||||
<div>
|
||||
<p>
|
||||
<label for="double-tap-duration" data-l10n="text-content">Double tap duration:</label>
|
||||
<span class="span-range">
|
||||
<span data-l10n="text-content">(fast)</span>
|
||||
<input type="range" min="0" max="0" id="double-tap-duration" />
|
||||
<span data-l10n="text-content">(slow)</span><br/>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div id="prefs">
|
||||
<p><label><span data-l10n="text-content">(fast)</span><input type="range" min="0" max="0" id="double-tap-duration"/><span data-l10n="text-content">(slow)</span><br/><span data-l10n="text-content">Double tap duration</span></label></p>
|
||||
<p><label><span data-l10n="text-content">(fast)</span><input type="range" min="0" max="0" id="flash-light-duration"/><span data-l10n="text-content">(slow)</span><br/><span data-l10n="text-content">Flash light duration</span></label></p>
|
||||
<p><label><input type="text" size="6" id="flash-light-color"/> <span data-l10n="text-content">Flash light color</span></label></p>
|
||||
<div>
|
||||
<p>
|
||||
<label for="flash-light-duration" data-l10n="text-content">Flash light duration:</label>
|
||||
<span class="span-range">
|
||||
<span data-l10n="text-content">(fast)</span>
|
||||
<input type="range" min="0" max="0" id="flash-light-duration" />
|
||||
<span data-l10n="text-content">(slow)</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div id="prefs">
|
||||
<div>
|
||||
<p id="flash-light-color-p">
|
||||
<label>
|
||||
<input type="color" size="6" id="flash-light-color" />
|
||||
<span data-l10n="text-content">Flash light color</span>
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<p><label><input type="checkbox" id="enable-timer" /> <span data-l10n="text-content">Enable timer</span></label></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div id="content">
|
||||
<table id="board">
|
||||
|
@ -77,8 +101,10 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="panel">
|
||||
<button id="btn-settings" data-l10n="text-content">Settings</button>
|
||||
<div id="panel" class="panel">
|
||||
<div id="btn-settings-wrapper">
|
||||
<button id="btn-settings" data-l10n="text-content">Settings</button>
|
||||
</div>
|
||||
<p id="timer" style="display:none">
|
||||
<span data-l10n="text-content">Turn timer:</span>
|
||||
<span id="timer-turn">0</span>
|
||||
|
@ -87,17 +113,30 @@
|
|||
<span id="timer-global">0</span>
|
||||
</p>
|
||||
<div id="bag"></div>
|
||||
<p><span data-l10n="text-content">Number of tiles in the bag:</span><br /><span id="remaining-letters">102</span><br /><span id="help-bag" data-l10n="text-content">Click on it to take one.</span><a href="#" id="help-clear" style="display:none"></a></p>
|
||||
<p><span data-l10n="text-content">Number of tiles in the bag:</span><br /><span id="remaining-letters">102</span></p>
|
||||
<table id="participants">
|
||||
<tr><th data-l10n="text-content">Participant</th><th data-l10n="text-content">Rack</th><th data-l10n="text-content">Score</th><th data-l10n="text-content">Turn</th></tr>
|
||||
<tr id="participants-placeholder"><td colspan="4" data-l10n="text-content">Waiting for other participants…</td></tr>
|
||||
</table>
|
||||
<p id="help-scores" data-l10n="text-content">Click on someone's score to change it.</p>
|
||||
<p id="help-turn" data-l10n="text-content">Who's turn? Click on the Turn button!</p>
|
||||
<button id="clear-rack" class="minibutton" data-l10n="text-content">Put back all the tiles of your rack in the bag</button>
|
||||
<button id="show-rack" class="minibutton" data-l10n="text-content">Show my rack to other players</button>
|
||||
<button id="check-spelling" class="minibutton" data-l10n="text-content" style="display:none">Check spelling for new words</button>
|
||||
<p id="info-spell-checking" style="display:none;"><span data-l0n="text-content">Spell checking is based on:</span> <a rel="noopener noreferrer" target="_blank" href="http://aspell.net">Aspell</a></p>
|
||||
<div id="panel-buttons">
|
||||
<button id="clear-rack" class="minibutton" data-l10n="text-content">Put back all the tiles of your rack in the bag</button>
|
||||
<button id="show-rack" class="minibutton" data-l10n="text-content">Show my rack to other players</button>
|
||||
<button id="check-spelling" class="minibutton" data-l10n="text-content" hidden="true">Check spelling for new words</button>
|
||||
</div>
|
||||
<div id="help-box">
|
||||
<p id="help-box-title" data-l10n="text-content">Tip!</p>
|
||||
<div id="help-box-inner">
|
||||
<div id="help-messages">
|
||||
<p data-l10n="text-content" hidden="true">Click on the bag to take one tile.</p>
|
||||
<p data-l10n="text-content" hidden="true">Click on someone's score to change it.</p>
|
||||
<p data-l10n="text-content" hidden="true">Who's turn? Click on the Turn button!</p>
|
||||
<p data-l10n="text-content" hidden="true">Click on (+) to increase someone's score.</p>
|
||||
<p data-l10n="text-content" hidden="true">Show a cell to everyone by double-clicking on it.</p>
|
||||
</div>
|
||||
<button id="next-help-msg" class="minibutton" data-l10n="title" title="Next tip">→</button>
|
||||
</div>
|
||||
</div>
|
||||
<p id="info-spell-checking" hidden="true"><span data-l10n="text-content">Spell checking is based on:</span> <a rel="noopener noreferrer" target="_blank" href="http://aspell.net">Aspell</a></p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
After Width: | Height: | Size: 772 B |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 4.5 KiB |
|
@ -0,0 +1,212 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="66.145836mm"
|
||||
height="66.078644mm"
|
||||
viewBox="0 0 66.145836 66.078644"
|
||||
version="1.1"
|
||||
id="svg33266"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
sodipodi:docname="logo.svg">
|
||||
<defs
|
||||
id="defs33260" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4826594"
|
||||
inkscape:cx="216.83666"
|
||||
inkscape:cy="216.09552"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1355"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1">
|
||||
<sodipodi:guide
|
||||
position="64.454693,27.711101"
|
||||
orientation="0,1"
|
||||
id="guide33349"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata33263">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-27.05171,-93.927608)">
|
||||
<g
|
||||
id="g30409"
|
||||
transform="matrix(1.4391919,0.00245906,-0.00245906,1.4391919,308.75047,-7.1664876)">
|
||||
<g
|
||||
transform="matrix(0.87918095,0,0,0.87918095,-40.911317,12.434453)"
|
||||
id="g30385">
|
||||
<rect
|
||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ccccaa;stroke-width:3.89294624;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="rect30310-1"
|
||||
width="48.301006"
|
||||
height="48.242859"
|
||||
x="-173.92935"
|
||||
y="68.081581" />
|
||||
<rect
|
||||
style="opacity:1;fill:#eeee88;fill-opacity:1;fill-rule:nonzero;stroke:#aaaa55;stroke-width:1.75621903;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="rect30310"
|
||||
width="49.229862"
|
||||
height="49.229862"
|
||||
x="-174.99074"
|
||||
y="67.010086" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-98.735177,20.673278)"
|
||||
style="fill:#000000"
|
||||
id="g30330" />
|
||||
</g>
|
||||
<g
|
||||
id="g892"
|
||||
transform="translate(-3.8920143,1.8276076)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.31716;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="-91.001099"
|
||||
y="63.331829"
|
||||
id="text30272"
|
||||
transform="matrix(1.4391919,0.00245906,-0.00245906,1.4391919,166.60077,22.343531)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30270"
|
||||
x="-91.001099"
|
||||
y="63.331829"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:1.31716">T</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.31716;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="-77.750885"
|
||||
y="63.331829"
|
||||
id="text30276"
|
||||
transform="matrix(1.4391919,0.00245906,-0.00245906,1.4391919,166.60077,22.343531)"><tspan
|
||||
sodipodi:role="line"
|
||||
x="-77.750885"
|
||||
y="63.331829"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:1.31716"
|
||||
id="tspan30278">R</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.31716;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="-61.445587"
|
||||
y="63.331829"
|
||||
id="text30284"
|
||||
transform="matrix(1.4391919,0.00245906,-0.00245906,1.4391919,166.60077,22.343531)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30282"
|
||||
x="-61.445587"
|
||||
y="63.331829"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:1.31716">I</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.31716;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="-91.318954"
|
||||
y="77.142586"
|
||||
id="text30288"
|
||||
transform="matrix(1.4391919,0.00245906,-0.00245906,1.4391919,166.60077,22.343531)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30286"
|
||||
x="-91.318954"
|
||||
y="77.142586"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:1.31716">V</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.31716;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="-77.862938"
|
||||
y="77.188324"
|
||||
id="text30292"
|
||||
transform="matrix(1.4391919,0.00245906,-0.00245906,1.4391919,166.60077,22.343531)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30290"
|
||||
x="-77.862938"
|
||||
y="77.188324"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:1.31716">A</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.31716;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="-63.890118"
|
||||
y="77.188324"
|
||||
id="text30296"
|
||||
transform="matrix(1.4391919,0.00245906,-0.00245906,1.4391919,166.60077,22.343531)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30294"
|
||||
x="-63.890118"
|
||||
y="77.188324"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:1.31716">B</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.31716;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="-91.5522"
|
||||
y="91.044815"
|
||||
id="text30300"
|
||||
transform="matrix(1.4391919,0.00245906,-0.00245906,1.4391919,166.60077,22.343531)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30298"
|
||||
x="-91.5522"
|
||||
y="91.044815"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:1.31716">B</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.31716;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="-77.39415"
|
||||
y="91.044815"
|
||||
id="text30304"
|
||||
transform="matrix(1.4391919,0.00245906,-0.00245906,1.4391919,166.60077,22.343531)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30302"
|
||||
x="-77.39415"
|
||||
y="91.044815"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:1.31716"
|
||||
rotate="0 0">L</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;line-height:1;font-family:LilyUPC;-inkscape-font-specification:'LilyUPC, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.31716;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="-63.451061"
|
||||
y="91.044815"
|
||||
id="text30308"
|
||||
transform="matrix(1.4391919,0.00245906,-0.00245906,1.4391919,166.60077,22.343531)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30306"
|
||||
x="-63.451061"
|
||||
y="91.044815"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.6683px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:1.31716">E</tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.0366029px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 91.191608,121.7174 -0.580184,0.38267"
|
||||
id="path30411"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 6.3 KiB |
|
@ -1,3 +1,7 @@
|
|||
:root {
|
||||
--flash-light-color: #ee6633;
|
||||
}
|
||||
|
||||
#board {
|
||||
border-collapse:collapse;
|
||||
}
|
||||
|
@ -47,7 +51,7 @@ html, #board, [draggable], .tile {
|
|||
color: green;
|
||||
}
|
||||
|
||||
#clear-game, #help-scores, #clear-rack, #help-turn {
|
||||
#clear-game, #clear-rack {
|
||||
white-space:pre-wrap;
|
||||
}
|
||||
|
||||
|
@ -57,7 +61,7 @@ html, #board, [draggable], .tile {
|
|||
-webkit-user-drag: element;
|
||||
}
|
||||
|
||||
#help-clear, #help-bag, #help-scores, #help-turn {
|
||||
#help-message {
|
||||
font-size:small
|
||||
}
|
||||
|
||||
|
@ -75,6 +79,9 @@ html, #board, [draggable], .tile {
|
|||
width: 100%;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
display: -webkit-flex;
|
||||
-webkit-justify-content: center;
|
||||
-webkit-flex-direction: column;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
|
@ -141,22 +148,29 @@ body {
|
|||
display:-webkit-flex;
|
||||
display:flex;
|
||||
-webkit-flex-direction:column;
|
||||
flex-direction:column
|
||||
flex-direction:column;
|
||||
}
|
||||
|
||||
|
||||
button {
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.panel button {
|
||||
margin: 0.25em 0;
|
||||
min-height:3em;
|
||||
background:#AFA;
|
||||
border:1px solid gray;
|
||||
background: #CFC;
|
||||
border: 1px solid #8C8;
|
||||
cursor: pointer;
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background:#FD7;
|
||||
cursor:pointer
|
||||
.panel button:hover {
|
||||
background: #FD7;
|
||||
border: 1px solid #CA5;
|
||||
}
|
||||
|
||||
button[disabled=disabled], button:disabled {
|
||||
.panel button[disabled=disabled], .panel button:disabled {
|
||||
background:#AFA;
|
||||
cursor:not-allowed;
|
||||
}
|
||||
|
@ -223,15 +237,16 @@ button[disabled=disabled], button:disabled {
|
|||
}
|
||||
}
|
||||
|
||||
.laser-highlighting .tile {
|
||||
.flash-light-highlighting .tile {
|
||||
transition:none;
|
||||
}
|
||||
|
||||
.laser-highlight {
|
||||
background-color: #E3E;
|
||||
.flash-light-highlight {
|
||||
background-color: #ee6633;
|
||||
background-color: var(--flash-light-color);
|
||||
}
|
||||
|
||||
.laser-highlight .tile:not(.tile-highlight) {
|
||||
.flash-light-highlight .tile:not(.tile-highlight) {
|
||||
background-color: inherit;
|
||||
}
|
||||
|
||||
|
@ -334,9 +349,9 @@ td.blink {
|
|||
}
|
||||
|
||||
#panel {
|
||||
-webkit-justify-content:center;
|
||||
justify-content:center;
|
||||
text-align:center
|
||||
/* -webkit-justify-content:center; does not look good */
|
||||
justify-content:space-between;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
#bag, #rack-outer {
|
||||
|
@ -350,8 +365,8 @@ td.blink {
|
|||
font-size:small
|
||||
}
|
||||
|
||||
.minibutton {
|
||||
padding:0;
|
||||
.panel .minibutton {
|
||||
padding:0.25ex 0.5ex;
|
||||
min-height:0;
|
||||
font-size:small
|
||||
}
|
||||
|
@ -369,7 +384,6 @@ td.blink {
|
|||
height:160px;
|
||||
background:url(bag.svg) no-repeat;
|
||||
background-size:100% 100%;
|
||||
flex:1;
|
||||
}
|
||||
|
||||
#bag:hover {
|
||||
|
@ -407,12 +421,13 @@ td.blink {
|
|||
min-width:2.5em;
|
||||
}
|
||||
|
||||
#participants .score-cell > span:hover, .turn-cell button:hover {
|
||||
#participants .score-cell > span:hover, #participants .turn-cell button:hover {
|
||||
cursor:pointer;
|
||||
background:#FFA
|
||||
}
|
||||
|
||||
#participants .score-cell button {
|
||||
min-height:4ex; /* for old webkit */
|
||||
min-height: auto;
|
||||
font-size:x-small;
|
||||
padding:0 1ex;
|
||||
|
@ -436,7 +451,7 @@ td.blink {
|
|||
font-style:italic;
|
||||
}
|
||||
|
||||
.turn-cell button {
|
||||
#participants .turn-cell button {
|
||||
padding:0 2px;
|
||||
background:white;
|
||||
min-height:1em;
|
||||
|
@ -445,7 +460,7 @@ td.blink {
|
|||
display:flex;
|
||||
}
|
||||
|
||||
.turn-cell img {
|
||||
#participants .turn-cell img {
|
||||
width:1em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
@ -469,22 +484,41 @@ td.blink {
|
|||
}
|
||||
}
|
||||
|
||||
#prefs {
|
||||
margin:1ex 0 0 0;
|
||||
}
|
||||
|
||||
#prefs p {
|
||||
#modal-settings-dialog p {
|
||||
margin:0;
|
||||
padding:0;
|
||||
font-size:small
|
||||
}
|
||||
|
||||
#lang-selection, #board-lang-selection {
|
||||
font-size:small;
|
||||
}
|
||||
|
||||
#prefs input, #prefs label {
|
||||
vertical-align:middle
|
||||
#modal-settings-dialog label span, #modal-settings-dialog label input {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#lang-selection {
|
||||
display:table;
|
||||
}
|
||||
|
||||
#lang-selection p {
|
||||
display:table-row;
|
||||
}
|
||||
|
||||
#lang-selection p:first-child select {
|
||||
margin-bottom:0.5ex;
|
||||
}
|
||||
|
||||
#lang-selection select, #lang-selection label {
|
||||
display:table-cell;
|
||||
vertical-align:middle;
|
||||
font-size:small;
|
||||
}
|
||||
|
||||
#lang-selection select {
|
||||
width:100%;
|
||||
}
|
||||
|
||||
#lang-selection label {
|
||||
padding-right:0.5ex;
|
||||
}
|
||||
|
||||
.modal {
|
||||
|
@ -496,10 +530,21 @@ td.blink {
|
|||
background-color: rgba(0, 0, 0, 0.5);
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
-webkit-transition: visibility 0s linear 0.25s, opacity 0.25s 0s;
|
||||
transform: scale(1.1);
|
||||
transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
display:flex;
|
||||
flex-direction:row;
|
||||
}
|
||||
|
||||
.modal-header h1 {
|
||||
flex:1;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
|
@ -510,11 +555,19 @@ td.blink {
|
|||
width: 24rem;
|
||||
border-radius: 0.3rem;
|
||||
}
|
||||
.modal-content h2 {
|
||||
|
||||
#btn-settings-close {
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.modal-content h1 {
|
||||
margin: 0px;
|
||||
font-weight: bold;
|
||||
font-size: large;
|
||||
}
|
||||
|
||||
.modal-button {
|
||||
float: right;
|
||||
width: 1.5rem;
|
||||
|
@ -532,24 +585,48 @@ td.blink {
|
|||
.show-modal {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
-webkit-transition: visibility 0s linear 0s, opacity 0.25s 0s;
|
||||
transform: scale(1.0);
|
||||
transition: visibility 0s linear 0s, opacity 0.25s 0s, transform 0.25s;
|
||||
}
|
||||
|
||||
.modal-content > div:not(:last-child) {
|
||||
margin-bottom: 1ex;
|
||||
}
|
||||
|
||||
.span-range {
|
||||
display:block;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.span-range > span {
|
||||
font-size:smaller;
|
||||
}
|
||||
|
||||
.span-range > span, .span-range > input {
|
||||
display:inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.alert {
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#btn-settings {
|
||||
#panel #btn-settings {
|
||||
background:lightgray;
|
||||
color:black;
|
||||
font-size:small;
|
||||
border-radius:3px;
|
||||
border:none;
|
||||
margin:0 0 0 auto;
|
||||
margin:0;
|
||||
min-height: 2em;
|
||||
}
|
||||
|
||||
#panel #btn-settings-wrapper {
|
||||
text-align:right;
|
||||
}
|
||||
|
||||
|
||||
#btn-settings:before {
|
||||
content: "⚙️ "
|
||||
}
|
||||
|
@ -563,6 +640,95 @@ td.blink {
|
|||
color:black;
|
||||
}
|
||||
|
||||
#help-messages {
|
||||
box-sizing:border-box;
|
||||
overflow:auto;
|
||||
width: auto;
|
||||
margin-bottom:1px;
|
||||
}
|
||||
|
||||
#help-box {
|
||||
margin-left:1ex;
|
||||
margin-top:1ex;
|
||||
display:-webkit-flex;
|
||||
-webkit-flex-direction:column;
|
||||
-webkit-justify-content:center;
|
||||
-webkit-align-items:center;
|
||||
align-items:center;
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
justify-content:center;
|
||||
}
|
||||
|
||||
#help-box-inner {
|
||||
display:-webkit-flex;
|
||||
-webkit-flex-direction:row;
|
||||
display:flex;
|
||||
flex-direction:row;
|
||||
min-height:2em;
|
||||
border-top:1px solid gray;
|
||||
border-bottom:1px solid gray;
|
||||
-webkit-align-items:center;
|
||||
align-items:center;
|
||||
}
|
||||
|
||||
button#next-help-msg {
|
||||
border:0;
|
||||
background:none;
|
||||
color:#333;
|
||||
font-size:1.5rem;
|
||||
margin-right:0.5ex;
|
||||
background:#F1F1F1;
|
||||
border-radius:100rem;
|
||||
height:1.5em;
|
||||
width:1.5em;
|
||||
font-weight:bold;
|
||||
transition:500ms;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
button#next-help-msg:hover {
|
||||
background:#CCC;
|
||||
}
|
||||
|
||||
#help-box-title {
|
||||
margin:0;
|
||||
padding:0 0 0.25ex 0;
|
||||
text-align:right;
|
||||
width:100%;
|
||||
color:gray;
|
||||
font-size:small;
|
||||
font-style:italic;
|
||||
}
|
||||
|
||||
#help-messages p {
|
||||
margin:0;
|
||||
font-size:0.9;
|
||||
color:#222;
|
||||
padding:0 0.5ex;
|
||||
max-width:17em;
|
||||
}
|
||||
|
||||
#help-box-inner:before {
|
||||
content:"i";
|
||||
display:inline-block;
|
||||
height:1.2em;
|
||||
width:1.2em;
|
||||
font-style:italic;
|
||||
font-weight:bold;
|
||||
font-family:serif;
|
||||
color:#AAA;
|
||||
border:2px solid;
|
||||
border-radius:100rem;
|
||||
}
|
||||
|
||||
#panel-buttons {
|
||||
display:-webkit-flex;
|
||||
-webkit-flex-direction: column;
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
}
|
||||
|
||||
#timer {
|
||||
text-align: center;
|
||||
}
|
||||
|
|
|
@ -36,10 +36,15 @@
|
|||
Conf[parameterName] = defaultValue;
|
||||
} else if (typeof Conf[parameterName] !== typeof defaultValue) {
|
||||
myAlert("Head's up - configuration " + parameterName + " does not have the right type. It should be a " + (typeof defaultValue) + ", it is a " + (typeof Conf[parameterName]));
|
||||
throw new Error("Wrong type for configuration " + parameterName + ", expected " + (typeof defaultValue) + ", got " + (typeof Conf[parameterName]));
|
||||
throw new Error("Wrong type for configuration " + parameterName + ", expected " + (typeof defaultValue) + ", got " + (typeof Conf[parameterName]));
|
||||
}
|
||||
}
|
||||
|
||||
function middle(key) {
|
||||
const setting = getSetting(key);
|
||||
return setting[Math.floor(setting.length / 2)];
|
||||
}
|
||||
|
||||
setConf("POLLING_DELAY", 2000);
|
||||
setConf("ENABLE_WEBSOCKETS", true);
|
||||
setConf("ENABLE_EVENT_SOURCE", true);
|
||||
|
@ -49,8 +54,10 @@
|
|||
setConf("ENABLE_TILE_SOUND", true);
|
||||
setConf("ENABLE_SPELL_CHECKER", false);
|
||||
setConf("DOUBLE_TAP_DURATIONS", [650, 1100, 1800, 3000, 5000]);
|
||||
setConf("DOUBLE_TAP_DURATION", middle("DOUBLE_TAP_DURATIONS"));
|
||||
setConf("FLASH_LIGHT_DURATIONS", [800, 1600, 3200]);
|
||||
setConf("FLASH_LIGHT_COLOR", "#E3E");
|
||||
setConf("FLASH_LIGHT_DURATION", middle("FLASH_LIGHT_DURATIONS"));
|
||||
setConf("FLASH_LIGHT_COLOR", "#ee6633");
|
||||
setConf("ENABLE_TIMER", true);
|
||||
|
||||
function isSetting(key) {
|
||||
|
@ -99,6 +106,10 @@
|
|||
}
|
||||
|
||||
function setSetting(key, value) {
|
||||
if (getSetting(key) === value) {
|
||||
return;
|
||||
}
|
||||
|
||||
let type;
|
||||
|
||||
/* try to retrieve type from configuration */
|
||||
|
@ -146,8 +157,7 @@
|
|||
localStorage.setItem(key + "_type", type);
|
||||
}
|
||||
}
|
||||
migrateSetting("doubleTapDuration", "number");
|
||||
migrateSetting("flashLightDuration", "number");
|
||||
|
||||
migrateSetting("spellCheckerEnabled", "boolean");
|
||||
migrateSetting("trivabbleGameNumber", "number");
|
||||
migrateSetting("trivabbleBoardLang", "string");
|
||||
|
@ -180,8 +190,6 @@
|
|||
let audioChat;
|
||||
let chatMessages;
|
||||
let chatTextarea;
|
||||
let helpBag;
|
||||
let helpClear;
|
||||
|
||||
let tablePlayers = {};
|
||||
let participantPlaceholder;
|
||||
|
@ -312,11 +320,6 @@
|
|||
file.send();
|
||||
}
|
||||
|
||||
function spellCheckerSettingChecked() {
|
||||
setSetting("spellCheckerEnabled", document.getElementById("enable-spell-checker").checked);
|
||||
initSpellChecker();
|
||||
}
|
||||
|
||||
function removeElem(elem) {
|
||||
elem.parentNode.removeChild(elem);
|
||||
}
|
||||
|
@ -689,7 +692,7 @@
|
|||
}
|
||||
|
||||
function touchStartTilePreventDefault(e) {
|
||||
laserTouch(e);
|
||||
flashLightTouch(e);
|
||||
return preventDefault(e);
|
||||
}
|
||||
|
||||
|
@ -824,6 +827,7 @@
|
|||
}
|
||||
|
||||
function chatMessage(sender, content) {
|
||||
chatMessages.style.width = chatTextarea.offsetWidth + "px"; // HACK to prevent the chat box from getting too big
|
||||
const msgDom = document.createElement("div");
|
||||
|
||||
msgDom.className = "msg";
|
||||
|
@ -861,7 +865,7 @@
|
|||
const content = document.createElement("div");
|
||||
content.appendChild(document.createElement("span"));
|
||||
content.lastChild.className = "info";
|
||||
content.lastChild.textContent = info;
|
||||
content.lastChild.textContent = info || "";
|
||||
chatMessage("", content);
|
||||
return content;
|
||||
}
|
||||
|
@ -1165,13 +1169,6 @@
|
|||
if (typeof data.remainingLetters === "number") {
|
||||
remainingLetters = data.remainingLetters;
|
||||
document.getElementById("remaining-letters").textContent = data.remainingLetters;
|
||||
if (data.remainingLetters === 0) {
|
||||
helpBag.style.display = "none";
|
||||
helpClear.style.display = "";
|
||||
} else {
|
||||
helpBag.style.display = "";
|
||||
helpClear.style.display = "none";
|
||||
}
|
||||
}
|
||||
|
||||
if (data.rack) {
|
||||
|
@ -1603,15 +1600,21 @@
|
|||
myConfirm(
|
||||
_("Are you sure you want to put all your tiles back in the bag?"),
|
||||
function () {
|
||||
sendCmds([
|
||||
{cmd: "moveLetter", from: "rack", indexFrom: 0, to: "bag", indexTo: -1},
|
||||
{cmd: "moveLetter", from: "rack", indexFrom: 1, to: "bag", indexTo: -1},
|
||||
{cmd: "moveLetter", from: "rack", indexFrom: 2, to: "bag", indexTo: -1},
|
||||
{cmd: "moveLetter", from: "rack", indexFrom: 3, to: "bag", indexTo: -1},
|
||||
{cmd: "moveLetter", from: "rack", indexFrom: 4, to: "bag", indexTo: -1},
|
||||
{cmd: "moveLetter", from: "rack", indexFrom: 5, to: "bag", indexTo: -1},
|
||||
{cmd: "moveLetter", from: "rack", indexFrom: 6, to: "bag", indexTo: -1}
|
||||
]);
|
||||
const cmds = [];
|
||||
|
||||
for (let i = 0; i < playerLetters.length; i++) {
|
||||
if (playerLetters[i].getElementsByClassName("tile")[0]) {
|
||||
cmds.push({
|
||||
cmd: "moveLetter",
|
||||
from: "rack",
|
||||
indexFrom: i,
|
||||
to: "bag",
|
||||
indexTo: -1
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
sendCmds(cmds);
|
||||
setRack("");
|
||||
}
|
||||
);
|
||||
|
@ -1829,14 +1832,19 @@
|
|||
}
|
||||
}
|
||||
|
||||
function triggerLaser(cell) {
|
||||
function getRowIndex(tr) {
|
||||
// tr.rowIndex is -1 on WebKit-based browsers in Debian Jessie, hence this function
|
||||
return [].indexOf.call(tr.parentNode.rows, tr);
|
||||
}
|
||||
|
||||
function triggerFlashLight(cell) {
|
||||
if (!cell) {
|
||||
return;
|
||||
}
|
||||
|
||||
const letters = "ABCDEFGHIJKLMNO";
|
||||
const col = cell.cellIndex - 1;
|
||||
const row = cell.parentNode.rowIndex - 1;
|
||||
const row = getRowIndex(cell.parentNode) - 1;
|
||||
|
||||
sendCmds([{
|
||||
cmd: "msg",
|
||||
|
@ -1852,7 +1860,7 @@
|
|||
const tilePlaceholder = getParentWithClass(e.target, "tile-placeholder");
|
||||
if (tilePlaceholder) {
|
||||
const cell = tilePlaceholder.parentNode;
|
||||
if (cell.cellIndex && cell.parentNode.rowIndex) {
|
||||
if (cell.cellIndex && getRowIndex(cell.parentNode)) {
|
||||
return cell;
|
||||
}
|
||||
}
|
||||
|
@ -1860,39 +1868,39 @@
|
|||
return null;
|
||||
}
|
||||
|
||||
function laserDblClick(e) {
|
||||
triggerLaser(getCellFromEvent(e));
|
||||
function flashLightDblClick(e) {
|
||||
triggerFlashLight(getCellFromEvent(e));
|
||||
}
|
||||
|
||||
function laserTouch(e) {
|
||||
function flashLightTouch(e) {
|
||||
const cell = getCellFromEvent(e);
|
||||
|
||||
if (!cell) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((laserTouch.last !== cell) || (Date.now() - laserTouch.date > getSetting("doubleTapDuration"))) {
|
||||
laserTouch.last = cell;
|
||||
laserTouch.date = Date.now();
|
||||
if ((flashLightTouch.last !== cell) || (Date.now() - flashLightTouch.date > getSetting("DOUBLE_TAP_DURATION"))) {
|
||||
flashLightTouch.last = cell;
|
||||
flashLightTouch.date = Date.now();
|
||||
return;
|
||||
}
|
||||
|
||||
triggerLaser(cell);
|
||||
triggerFlashLight(cell);
|
||||
}
|
||||
|
||||
function localHighlightCell(id) {
|
||||
const placeholder = boardCells[id].getElementsByClassName("tile-placeholder")[0];
|
||||
placeholder.classList.add("laser-highlighting");
|
||||
placeholder.classList.add("laser-highlight");
|
||||
placeholder.classList.add("flash-light-highlighting");
|
||||
placeholder.classList.add("flash-light-highlight");
|
||||
|
||||
const sixthFlashLightDuration = getSetting("flashLightDuration") / 6;
|
||||
const sixthFlashLightDuration = getSetting("FLASH_LIGHT_DURATION") / 6;
|
||||
|
||||
function on() {
|
||||
placeholder.classList.add("laser-highlight");
|
||||
placeholder.classList.add("flash-light-highlight");
|
||||
}
|
||||
|
||||
function off() {
|
||||
placeholder.classList.remove("laser-highlight");
|
||||
placeholder.classList.remove("flash-light-highlight");
|
||||
}
|
||||
|
||||
setTimeout(off, sixthFlashLightDuration);
|
||||
|
@ -1903,7 +1911,7 @@
|
|||
|
||||
setTimeout(
|
||||
function () {
|
||||
placeholder.classList.remove("laser-highlighting");
|
||||
placeholder.classList.remove("flash-light-highlighting");
|
||||
},
|
||||
sixthFlashLightDuration * 6
|
||||
);
|
||||
|
@ -1999,19 +2007,11 @@
|
|||
|
||||
function initSpellChecker() {
|
||||
if (getSetting("ENABLE_SPELL_CHECKER")) {
|
||||
document.getElementById("enable-spell-checker-outer").style.display = "";
|
||||
}
|
||||
|
||||
document.getElementById("enable-spell-checker").onclick = spellCheckerSettingChecked;
|
||||
|
||||
if (!getSetting("ENABLE_SPELL_CHECKER") || !getSetting("spellCheckerEnabled")) {
|
||||
document.getElementById("check-spelling").style.display = "none";
|
||||
document.getElementById("enable-spell-checker").checked = false;
|
||||
document.getElementById("info-spell-checking").style.display = "none";
|
||||
document.getElementById("check-spelling").hidden = false;
|
||||
document.getElementById("info-spell-checking").hidden = false;
|
||||
} else {
|
||||
document.getElementById("check-spelling").style.display = "";
|
||||
document.getElementById("info-spell-checking").style.display = "";
|
||||
document.getElementById("enable-spell-checker").checked = true;
|
||||
document.getElementById("check-spelling").hidden = true;
|
||||
document.getElementById("info-spell-checking").hidden = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2019,11 +2019,11 @@
|
|||
if (x < 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
if (x < values.length) {
|
||||
return values[Math.floor(x)];
|
||||
}
|
||||
|
||||
|
||||
for (let i = 0; i < values.length; i++) {
|
||||
if (x <= values[i]) {
|
||||
return i;
|
||||
|
@ -2032,61 +2032,71 @@
|
|||
return values.length - 1;
|
||||
}
|
||||
|
||||
function initLaserPointer() {
|
||||
document.body.addEventListener("dblclick", laserDblClick);
|
||||
document.body.addEventListener("touchstart", laserTouch);
|
||||
function initFlashLight() {
|
||||
document.body.addEventListener("dblclick", flashLightDblClick);
|
||||
document.body.addEventListener("touchstart", flashLightTouch);
|
||||
|
||||
if (!isSetting("doubleTapDuration")) {
|
||||
setSetting("doubleTapDuration", getSetting("DOUBLE_TAP_DURATIONS")[Math.floor(getSetting("DOUBLE_TAP_DURATIONS").length / 2)]);
|
||||
}
|
||||
const doubleTapDuration = document.getElementById("double-tap-duration");
|
||||
if (doubleTapDuration) {
|
||||
doubleTapDuration.max = getSetting("DOUBLE_TAP_DURATIONS").length - 1;
|
||||
doubleTapDuration.value = translateDuration(getSetting("doubleTapDuration"), getSetting("DOUBLE_TAP_DURATIONS"));
|
||||
doubleTapDuration.value = translateDuration(getSetting("DOUBLE_TAP_DURATION"), getSetting("DOUBLE_TAP_DURATIONS"));
|
||||
doubleTapDuration.onchange = function () {
|
||||
setSetting("doubleTapDuration", translateDuration(
|
||||
setSetting("DOUBLE_TAP_DURATION", translateDuration(
|
||||
document.getElementById("double-tap-duration").value,
|
||||
getSetting("DOUBLE_TAP_DURATIONS")
|
||||
));
|
||||
};
|
||||
}
|
||||
|
||||
if (!isSetting("flashLightDuration")) {
|
||||
setSetting("flashLightDuration", getSetting("FLASH_LIGHT_DURATIONS")[Math.floor(getSetting("FLASH_LIGHT_DURATIONS").length / 2)]);
|
||||
}
|
||||
const flashLightDuration = document.getElementById("flash-light-duration");
|
||||
if (flashLightDuration) {
|
||||
flashLightDuration.max = getSetting("FLASH_LIGHT_DURATIONS").length - 1;
|
||||
flashLightDuration.value = translateDuration(getSetting("flashLightDuration"), getSetting("FLASH_LIGHT_DURATIONS"));
|
||||
flashLightDuration.value = translateDuration(getSetting("FLASH_LIGHT_DURATION"), getSetting("FLASH_LIGHT_DURATIONS"));
|
||||
flashLightDuration.onchange = function () {
|
||||
setSetting("flashLightDuration", translateDuration(
|
||||
setSetting("FLASH_LIGHT_DURATION", translateDuration(
|
||||
document.getElementById("flash-light-duration").value,
|
||||
getSetting("FLASH_LIGHT_DURATIONS")
|
||||
));
|
||||
};
|
||||
}
|
||||
|
||||
// thx https://stackoverflow.com/a/26633844
|
||||
if (!(window.CSS && CSS.supports && CSS.supports("color", "var(--v)")) && document.getElementById("flash-light-color-p")) {
|
||||
document.getElementById("flash-light-color-p").hidden = true;
|
||||
return;
|
||||
}
|
||||
|
||||
const flashLightColor = document.getElementById("flash-light-color");
|
||||
if (flashLightColor) {
|
||||
|
||||
/* migration of old settings for flash light color */
|
||||
const oldSetting = getSetting("flashLightColor");
|
||||
if (oldSetting) {
|
||||
setSetting("FLASH_LIGHT_COLOR", oldSetting);
|
||||
delete localStorage.flashLightColor;
|
||||
}
|
||||
|
||||
flashLightColor.value = getSetting("FLASH_LIGHT_COLOR");
|
||||
flashLightColor.onchange = function () {
|
||||
setSetting("FLASH_LIGHT_COLOR", document.getElementById("flash-light-color").value);
|
||||
const style = document.createElement("style");
|
||||
style.textContent = ".laser-highlight {background-color: " + getSetting("FLASH_LIGHT_COLOR") + ";}";
|
||||
document.body.appendChild(style);
|
||||
const color = document.getElementById("flash-light-color").value;
|
||||
setSetting("FLASH_LIGHT_COLOR", color);
|
||||
document.documentElement.style.setProperty("--flash-light-color", color);
|
||||
};
|
||||
flashLightColor.onchange();
|
||||
}
|
||||
}
|
||||
|
||||
function nextHelpMessage() {
|
||||
if (typeof nextHelpMessage.index === "undefined") {
|
||||
nextHelpMessage.index = -1;
|
||||
}
|
||||
|
||||
const helpMessages = document.getElementById("help-messages");
|
||||
if (helpMessages) {
|
||||
const listOfMessages = helpMessages.getElementsByTagName("p");
|
||||
if ((nextHelpMessage.index >= 0) && (nextHelpMessage.index < listOfMessages.length)) {
|
||||
listOfMessages[nextHelpMessage.index].hidden = true;
|
||||
}
|
||||
nextHelpMessage.index++;
|
||||
if (nextHelpMessage.index === listOfMessages.length) {
|
||||
nextHelpMessage.index = 0;
|
||||
}
|
||||
listOfMessages[nextHelpMessage.index].hidden = false;
|
||||
}
|
||||
}
|
||||
|
||||
function timerString(delta) {
|
||||
const d = Math.floor(delta / (60 * 60 * 24));
|
||||
const h = Math.floor((delta % (60 * 60 * 24)) / (60 * 60));
|
||||
|
@ -2172,7 +2182,7 @@
|
|||
if (!boardLangSelect) {
|
||||
const boardLangSelection = document.getElementById("board-lang-selection");
|
||||
boardLangSelect = boardLangSelection.querySelector("select");
|
||||
boardLangSelection.style.display = "";
|
||||
boardLangSelection.hidden = false;
|
||||
}
|
||||
|
||||
boardLangSelect.textContent = "";
|
||||
|
@ -2203,7 +2213,12 @@
|
|||
|
||||
function showSettings() {
|
||||
const modal = document.querySelector(".modal");
|
||||
modal.classList.toggle("show-modal");
|
||||
modal.classList.add("show-modal");
|
||||
modal.querySelector("button").focus();
|
||||
}
|
||||
|
||||
function hideSettings() {
|
||||
document.querySelector(".modal").classList.remove("show-modal");
|
||||
}
|
||||
|
||||
function initGlobals() {
|
||||
|
@ -2214,8 +2229,6 @@
|
|||
bag = document.getElementById("bag");
|
||||
chatMessages = document.getElementById("chat-messages");
|
||||
chatTextarea = document.getElementById("chat-ta");
|
||||
helpBag = document.getElementById("help-bag");
|
||||
helpClear = document.getElementById("help-clear");
|
||||
participantPlaceholder = document.getElementById("participants-placeholder");
|
||||
}
|
||||
|
||||
|
@ -2229,10 +2242,14 @@
|
|||
document.getElementById("clear-rack").onclick = clearRack;
|
||||
document.getElementById("show-rack").onclick = showRack;
|
||||
document.getElementById("check-spelling").onclick = checkSpellingClicked;
|
||||
helpClear.onclick = clearGame;
|
||||
|
||||
document.getElementById("btn-settings").onclick = showSettings;
|
||||
document.getElementById("btn-settings-close").onclick = showSettings;
|
||||
document.getElementById("btn-settings-close").onclick = hideSettings;
|
||||
document.getElementById("next-help-msg").onclick = nextHelpMessage;
|
||||
window.addEventListener("keydown", function (e) {
|
||||
if (e.key === "Escape") {
|
||||
document.querySelector(".modal").classList.remove("show-modal");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function initGame() {
|
||||
|
@ -2281,14 +2298,14 @@
|
|||
board.rows[0].appendChild(document.createElement("th"));
|
||||
board.rows[0].lastChild.textContent = i + 1;
|
||||
|
||||
board.appendChild(document.createElement("tr"));
|
||||
board.lastChild.appendChild(document.createElement("th"));
|
||||
board.lastChild.lastChild.textContent = letters[i];
|
||||
const row = board.insertRow(-1);
|
||||
row.appendChild(document.createElement("th"));
|
||||
row.lastChild.textContent = letters[i];
|
||||
|
||||
for (let j = 0; j < 15; j++) {
|
||||
cell = document.createElement("td");
|
||||
boardCells.push(cell);
|
||||
board.lastChild.appendChild(cell);
|
||||
row.appendChild(cell);
|
||||
|
||||
cell.appendChild(document.createElement("div"));
|
||||
cell.lastChild.className = "tile-placeholder";
|
||||
|
@ -2297,7 +2314,7 @@
|
|||
specialCell("doubleWord", board.lastChild.lastChild);
|
||||
cell = board.lastChild.lastChild.getElementsByClassName("special-cell-label")[0];
|
||||
cell.textContent = "★";
|
||||
board.lastChild.lastChild.id = "center-cell";
|
||||
row.lastChild.id = "center-cell";
|
||||
} else if (i % 7 === 0 && j % 7 === 0) {
|
||||
specialCell("tripleWord", board.lastChild.lastChild);
|
||||
} else if ((i === j || i + j === 14) && (i < 5 || i > 9)) {
|
||||
|
@ -2309,21 +2326,21 @@
|
|||
}
|
||||
}
|
||||
|
||||
board.lastChild.appendChild(document.createElement("th"));
|
||||
board.lastChild.lastChild.textContent = letters[i];
|
||||
row.appendChild(document.createElement("th"));
|
||||
row.lastChild.textContent = letters[i];
|
||||
}
|
||||
|
||||
board.rows[0].appendChild(board.rows[0].cells[0].cloneNode(false));
|
||||
|
||||
board.appendChild(document.createElement("tr"));
|
||||
board.lastChild.appendChild(board.rows[0].cells[0].cloneNode(false));
|
||||
const row = board.insertRow(-1);
|
||||
row.appendChild(board.rows[0].cells[0].cloneNode(false));
|
||||
|
||||
for (let i = 0; i < 15; i++) {
|
||||
board.lastChild.appendChild(document.createElement("th"));
|
||||
board.lastChild.lastChild.textContent = i + 1;
|
||||
row.appendChild(document.createElement("th"));
|
||||
row.lastChild.textContent = i + 1;
|
||||
}
|
||||
|
||||
board.lastChild.appendChild(board.rows[0].cells[0].cloneNode(false));
|
||||
row.appendChild(board.rows[0].cells[0].cloneNode(false));
|
||||
|
||||
if (getSetting("trivabbleGameNumber")) {
|
||||
document.getElementById("number").textContent = getSetting("trivabbleGameNumber");
|
||||
|
@ -2356,7 +2373,8 @@
|
|||
initGame();
|
||||
initSound();
|
||||
initSpellChecker();
|
||||
initLaserPointer();
|
||||
initFlashLight();
|
||||
nextHelpMessage();
|
||||
initTimer();
|
||||
};
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
const port = parseInt(process.env.TRIVABBLE_PORT || "3000");
|
||||
const host = process.env.TRIVABBLE_HOST || "localhost";
|
||||
const disableCSP = process.env.DISABLE_CSP || false;
|
||||
|
||||
const SAVE_TIMEOUT = 5000;
|
||||
const KEEP_ALIVE = 30000;
|
||||
|
@ -998,6 +999,24 @@ function handleRequest(request, response) {
|
|||
}
|
||||
|
||||
response.setHeader("Content-Type", mime);
|
||||
|
||||
response.setHeader(
|
||||
"Content-Security-Policy",
|
||||
"default-src 'none'; " +
|
||||
"script-src 'self'; " +
|
||||
"style-src 'self'; " +
|
||||
"img-src 'self'; " +
|
||||
(disableCSP ? "" : "connect-src 'self' " + (
|
||||
// uzbl (like Safari 9 / iPad 2) does not like unsecure websockets on the
|
||||
// same port with connect-src 'self'
|
||||
// See https://github.com/w3c/webappsec-csp/issues/7
|
||||
"ws://" + host + ":" + port + " " +
|
||||
"ws://127.0.0.1:" + port + " " +
|
||||
"ws://localhost:" + port + "; "
|
||||
)) +
|
||||
"media-src 'self'"
|
||||
);
|
||||
|
||||
response.end(contents);
|
||||
});
|
||||
} else {
|
||||
|
|