From c2108dd4411afdc0080561f6588ff1087ffd46e3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Jakse?= Date: Sat, 29 Aug 2020 10:54:52 +0200 Subject: [PATCH] document and optimise the dictionary build process a bit --- README.md | 13 + dict-dists-extractor/Makefile | 773 ++++++++++++++++------------------ l10n/po/fr/trivabble.po | 2 +- public/config.js.sample | 3 + public/index.html | 2 +- public/trivabble.js | 48 +-- 6 files changed, 414 insertions(+), 427 deletions(-) diff --git a/README.md b/README.md index 51253d5..8e898ed 100644 --- a/README.md +++ b/README.md @@ -157,3 +157,16 @@ A full example is available in (doc/trivabble-apache-host.conf.sample)[doc/triva :warning: Be careful to allow enough concurrent processes / threads / workers on your web server. Each player requires one long-standing connection (XHR, SSE or WebSocket), plus small requests when not using WebSockets. + +## Enable the spell checker + +This is an experimental feature. The process of building the dictionaries takes a lot of disk space. + +Install `aspell` (to have the `word-list-compress` command) and run: + +```sh +cd dict-dists-extractor +make +``` + +Then, set `ENABLE_CHECK_SPELLING` to `true` in `public/config.js`. diff --git a/dict-dists-extractor/Makefile b/dict-dists-extractor/Makefile index b83322d..938ffbb 100644 --- a/dict-dists-extractor/Makefile +++ b/dict-dists-extractor/Makefile @@ -1,8 +1,7 @@ # -*- Makefile -*- ROOT_DICT = ../public/dict -#OBJ_DIR = . -OBJ_DIR = /tmp/trivabble +OBJ_DIR = obj # 0MB < dictionary size < 10MB SMALL = br ca cy da de en es fr ga hr hy is lv nl no pt sv @@ -12,6 +11,10 @@ LARGE = bg el eo it pl ro ru sk sl uk VERY_LARGE = ar cs et fi LANGS = $(SMALL) $(LARGE) + +DICT_RULE_PRELUDE = sortuniq() { cat > "$$1"; sort -u -o "$$1" "$$1"; }; \ +echo Building $@ from $< + # he and hu: can not be generated # af eu la ms tr xk: no aspell dictionary @@ -22,7 +25,9 @@ LOWS = $(addsuffix .low,$(LANGS)) DICTS = $(addsuffix .dict,$(LANGS)) DEPEND = Makefile -MAKEFLAGS = -s +#MAKEFLAGS = -s + +.PHONY: all required count clean low all: required make $(addprefix check-,$(LANGS)) @@ -38,40 +43,38 @@ count: low: $(LOWS) -required: $(OBJ_DIR) $(OBJ_DIR)/src.mk $(ROOT_DICT) +required: ${OBJ_DIR} ${OBJ_DIR}/src.mk ${ROOT_DICT} $(OBJ_DIR)/src.mk: echo Creation language table wget $(ASPDICT) -q -O - | \ awk 'BEGIN { base="'`dirname $(ASPDICT)`'" } \ // { exit }' > $@ -include $(wildcard $(OBJ_DIR)/src.mk) - -INSTALL_ASPELL_DICT = cd $(OBJ_DIR) && \ - tar xjf $(1) && \ - cd $(2) && \ - ./configure && \ - make - -ASPELL_DUMP_MASTER = aspell --dict-dir=$(2) -d $(1) dump master $(1) | \ - aspell --dict-dir=$(2) -l $(1) expand | \ - tr -s '[:space:]' '\n' | \ - LC_ALL=C sort -S28G -u > $(3) +include $(wildcard ${OBJ_DIR}/src.mk) %.dir: echo Installing $@ dictionary - $(call INSTALL_ASPELL_DICT,$<,$(<:.tar.bz2=)) - mv $(<:.tar.bz2=) $@ + cd "$$(dirname "$@")" && \ + tar -xjf "$$(basename "$<")" && \ + cd "$$(basename "$(<:.tar.bz2=)")" && \ + ./configure && \ + make && \ + cd .. && \ + mv "$$(basename "$<" .tar.bz2)" "$$(basename "$@")" %.low: %.dir - echo Building list of word $@ - $(call ASPELL_DUMP_MASTER,$(patsubst $(OBJ_DIR)/%.dir,%,$<),$<,$@) + @echo "Building list of word $@" + export DICT_NAME="$$(basename "$<" ".dir")"; \ + aspell --dict-dir="$$(realpath $<)" -d "$$DICT_NAME" dump master "$$DICT_NAME" | \ + aspell --dict-dir="$$(realpath $<)" -l "$$DICT_NAME" expand | \ + tr -s '[:space:]' '\n' > "$@" && \ + LC_ALL=C sort -S28G -u -o "$@" "$@" $(OBJ_DIR)/no.low: make $(OBJ_DIR)/nb.low @@ -82,460 +85,425 @@ $(OBJ_DIR)/pt.low: mv $(OBJ_DIR)/pt_PT.low $@ $(ROOT_DICT)/ar.dict: $(OBJ_DIR)/ar.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - sed -e 's/[ﺏِ ]/ب/g' \ - -e 's/[ﻍُ]/غ/g' \ - -e 's/[ﻙ ]/ل/g' \ - -e 's/[ﻡَ]/م/g' \ - -e 's/[ﻥَ]/ن/g' \ - -e 's/[ﻱَﻳّ]/ي/g' | \ - sort | \ - uniq > $@ -# ا ل ن ش ا ش ي بِ ي ي ب ا ل ن ش ا ش ي بِ ي ي ب ن ش ا ش ي بِ ي ي ف ا ل ن ش ا ش ي بِ ي ي ف ب ا ل ن ش ا ش ي بِ ي ي ف ب ن ش ا ش ي بِ ي ي ف ك ا ل ن ش ا ش ي بِ ي ي ف ك ن ش ا ش ي بِ ي ي ف ل ل ن ش ا ش ي بِ ي ي ف ل ن ش ا ش ي بِ ي ي ف ن ش ا ش ي بِ ي ي ك ا ل ن ش ا ش ي بِ ي ي ك ن ش ا ش ي بِ ي ي ل ل ن ش ا ش ي بِ ي ي ل ن ش ا ش ي بِ ي ي ن ش ا ش ي بِ ي ي و ا ل ن ش ا ش ي بِ ي ي و ب ا ل ن ش ا ش ي بِ ي ي و ب ن ش ا ش ي بِ ي ي و ك ا ل ن ش ا ش ي بِ ي ي و ك ن ش ا ش ي بِ ي ي و ل ل ن ش ا ش ي بِ ي ي و ل ن ش ا ش ي بِ ي ي و ن ش ا ش ي بِ ي ي + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + sed -e 's/[ﺏِ ]/ب/g' \ + -e 's/[ﻍُ]/غ/g' \ + -e 's/[ﻙ ]/ل/g' \ + -e 's/[ﻡَ]/م/g' \ + -e 's/[ﻥَ]/ن/g' \ + -e 's/[ﻱَﻳّ]/ي/g' | \ + sortuniq "$@" +# ا ل ن ش ا ش ي بِ ي ي ب ا ل ن ش ا ش ي بِ ي ي ب ن ش ا ش ي بِ ي ي ف ا ل ن ش ا ش ي بِ ي ي ف ب ا ل ن ش ا ش ي بِ ي ي ف ب ن ش ا ش ي بِ ي ي ف ك ا ل ن ش ا ش ي بِ ي ي ف ك ن ش ا ش ي بِ ي ي ف ل ل ن ش ا ش ي بِ ي ي ف ل ن ش ا ش ي بِ ي ي ف ن ش ا ش ي بِ ي ي ك ا ل ن ش ا ش ي بِ ي ي ك ن ش ا ش ي بِ ي ي ل ل ن ش ا ش ي بِ ي ي ل ن ش ا ش ي بِ ي ي ن ش ا ش ي بِ ي ي و ا ل ن ش ا ش ي بِ ي ي و ب ا ل ن ش ا ش ي بِ ي ي و ب ن ش ا ش ي بِ ي ي و ك ا ل ن ش ا ش ي بِ ي ي و ك ن ش ا ش ي بِ ي ي و ل ل ن ش ا ش ي بِ ي ي و ل ن ش ا ش ي بِ ي ي و ن ش ا ش ي بِ ي ي $(ROOT_DICT)/bg.dict: $(OBJ_DIR)/bg.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - grep -v "^[a-zA-Z]" | \ - tr '[абвгдежзийклмнопрстуфхцчшщъьюя]' '[АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + grep -v "^[a-zA-Z]" | \ + tr '[абвгдежзийклмнопрстуфхцчшщъьюя]' '[АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯ]' | \ + sortuniq "$@" $(ROOT_DICT)/br.dict: $(OBJ_DIR)/br.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[-]" | \ - grep -v "[^c]'" | \ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[-]" | \ + grep -v "[^c]'" | \ grep -v "'[^h]" | \ - sed -e 's/[àâ]/a/g' \ - -e 's/[éêè]/e/g' \ + sed -e 's/[àâ]/a/g' \ + -e 's/[éêè]/e/g' \ -e 's/[î]/i/g' \ - -e 's/[ñ]/n/g' \ - -e 's/[ô]/o/g' \ - -e 's/[ûüù]/u/g' | \ - tr '[abcdefghijklmnopqrstuvwxyz]' '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]' | \ - sort | \ - uniq > $@ + -e 's/[ñ]/n/g' \ + -e 's/[ô]/o/g' \ + -e 's/[ûüù]/u/g' | \ + tr '[abcdefghijklmnopqrstuvwxyz]' '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]' | \ + sortuniq "$@" $(ROOT_DICT)/ca.dict: $(OBJ_DIR)/ca.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[.'-]" | \ - sed -e 's/[áàãÁÀ]/a/g' \ - -e 's/[éèÉÈ]/e/g' \ - -e 's/[çÇ]/c/g' \ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[.'-]" | \ + sed -e 's/[áàãÁÀ]/a/g' \ + -e 's/[éèÉÈ]/e/g' \ + -e 's/[çÇ]/c/g' \ -e 's/[íïÍ]/i/g' \ - -e 's/[ñ]/n/g' \ - -e 's/[óöòÓÒ]/o/g' \ - -e 's/[úüùÚ]/u/g' | \ - tr '[a-z]' '[A-Z]' | \ - sort | \ - uniq > $@ + -e 's/[ñ]/n/g' \ + -e 's/[óöòÓÒ]/o/g' \ + -e 's/[úüùÚ]/u/g' | \ + tr '[a-z]' '[A-Z]' | \ + sortuniq "$@" $(ROOT_DICT)/cs.dict: $(OBJ_DIR)/cs.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - sed -e 's/[äâ]/a/g' \ - -e 's/[çćĆ]/c/g' \ - -e 's/[ęë]/e/g' \ - -e 's/[î]/i/g' \ - -e 's/[ľĽłĺ]/l/g' \ - -e 's/[ń]/n/g' \ - -e 's/[őöŐÖô]/o/g' \ - -e 's/[śŚ]/s/g' \ - -e 's/[űüŰÜ]/u/g' \ - -e 's/[ź]/z/g' | \ - sed -e 's/á/Á/g' -e 's/č/Č/g' -e 's/ď/Ď/g' -e 's/é/É/g' -e 's/ě/Ě/g' \ - -e 's/í/Í/g' -e 's/ň/Ň/g' -e 's/ó/Ó/g' -e 's/ř/Ř/g' -e 's/š/Š/g' \ - -e 's/ť/Ť/g' -e 's/ú/Ú/g' -e 's/ů/Ů/g' -e 's/ý/Ý/g' -e 's/ž/Ž/g' | \ - tr '[a-z]' '[A-Z]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + sed -e 's/[äâ]/a/g' \ + -e 's/[çćĆ]/c/g' \ + -e 's/[ęë]/e/g' \ + -e 's/[î]/i/g' \ + -e 's/[ľĽłĺ]/l/g' \ + -e 's/[ń]/n/g' \ + -e 's/[őöŐÖô]/o/g' \ + -e 's/[śŚ]/s/g' \ + -e 's/[űüŰÜ]/u/g' \ + -e 's/[ź]/z/g' | \ + sed -e 's/á/Á/g' -e 's/č/Č/g' -e 's/ď/Ď/g' -e 's/é/É/g' -e 's/ě/Ě/g' \ + -e 's/í/Í/g' -e 's/ň/Ň/g' -e 's/ó/Ó/g' -e 's/ř/Ř/g' -e 's/š/Š/g' \ + -e 's/ť/Ť/g' -e 's/ú/Ú/g' -e 's/ů/Ů/g' -e 's/ý/Ý/g' -e 's/ž/Ž/g' | \ + tr '[a-z]' '[A-Z]' | \ + sortuniq "$@" $(ROOT_DICT)/cy.dict: $(OBJ_DIR)/cy.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - grep -vi "ph" | \ - sed -e 's/[âä]/a/g' \ - -e 's/[êë]/e/g' \ - -e 's/[îï]/i/g' \ - -e 's/[ôöò]/o/g' \ - -e 's/[ûüù]/u/g' \ - -e 's/[ŵ]/w/g' \ - -e 's/[ŷ]/y/g' | \ - tr '[a-z]' '[A-Z]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + grep -vi "ph" | \ + sed -e 's/[âä]/a/g' \ + -e 's/[êë]/e/g' \ + -e 's/[îï]/i/g' \ + -e 's/[ôöò]/o/g' \ + -e 's/[ûüù]/u/g' \ + -e 's/[ŵ]/w/g' \ + -e 's/[ŷ]/y/g' | \ + tr '[a-z]' '[A-Z]' | \ + sortuniq "$@" $(ROOT_DICT)/da.dict: $(OBJ_DIR)/da.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[.'-]" | \ - sed -e 's/[áä]/a/g' \ - -e 's/[ð]/d/g' \ - -e 's/[éëè]/e/g' \ - -e 's/[íì]/i/g' \ - -e 's/[óöô]/o/g' \ - -e 's/[ü]/u/g' | \ - tr '[a-zæøå]' '[A-ZÆØÅ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[.'-]" | \ + sed -e 's/[áä]/a/g' \ + -e 's/[ð]/d/g' \ + -e 's/[éëè]/e/g' \ + -e 's/[íì]/i/g' \ + -e 's/[óöô]/o/g' \ + -e 's/[ü]/u/g' | \ + tr '[a-zæøå]' '[A-ZÆØÅ]' | \ + sortuniq "$@" $(ROOT_DICT)/de.dict: $(OBJ_DIR)/de.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[.'-]" | \ - sed -e 's/[âà]/a/g' \ - -e 's/[éê]/e/g' \ - -e 's/[ñ]/n/g' \ - -e 's/[œ]/oe/g' \ - -e 's/[ß]/ss/g' | \ - tr '[a-zäöü]' '[A-ZÄÖÜ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[.'-]" | \ + sed -e 's/[âà]/a/g' \ + -e 's/[éê]/e/g' \ + -e 's/[ñ]/n/g' \ + -e 's/[œ]/oe/g' \ + -e 's/[ß]/ss/g' | \ + tr '[a-zäöü]' '[A-ZÄÖÜ]' | \ + sortuniq "$@" $(ROOT_DICT)/el.dict: $(OBJ_DIR)/el.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - sed -e 's/[άΆ]/α/g' \ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + sed -e 's/[άΆ]/α/g' \ -e 's/[ϐ]/β/g' \ - -e 's/[έΈ]/ε/g' \ - -e 's/[ήΉ]/η/g' \ - -e 's/[ίϊΐΊ]/ι/g' \ - -e 's/[όΌ]/ο/g' \ - -e 's/[ς]/σ/g' \ - -e 's/[ΰϋύΎ]/υ/g' \ - -e 's/[ϕ]/φ/g' \ - -e 's/[ώΏ]/ω/g' | \ - tr '[αβγδεζηθικλμνξοπρστυφχψω]' '[ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ]' | \ - sort | \ - uniq > $@ + -e 's/[έΈ]/ε/g' \ + -e 's/[ήΉ]/η/g' \ + -e 's/[ίϊΐΊ]/ι/g' \ + -e 's/[όΌ]/ο/g' \ + -e 's/[ς]/σ/g' \ + -e 's/[ΰϋύΎ]/υ/g' \ + -e 's/[ϕ]/φ/g' \ + -e 's/[ώΏ]/ω/g' | \ + tr '[αβγδεζηθικλμνξοπρστυφχψω]' '[ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ]' | \ + sortuniq "$@" $(ROOT_DICT)/en.dict: $(OBJ_DIR)/en.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[.'-]" | \ - sed -e 's/[áâàäåÅ]/a/g' \ - -e 's/[ç]/c/g' \ - -e 's/[éêèë]/e/g' \ - -e 's/[íîï]/i/g' \ - -e 's/[ñ]/n/g' \ - -e 's/[óôöøiÖ]/o/g' \ - -e 's/[úûüùiÜ]/u/g' | \ - tr '[a-z]' '[A-Z]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[.'-]" | \ + sed -e 's/[áâàäåÅ]/a/g' \ + -e 's/[ç]/c/g' \ + -e 's/[éêèë]/e/g' \ + -e 's/[íîï]/i/g' \ + -e 's/[ñ]/n/g' \ + -e 's/[óôöøiÖ]/o/g' \ + -e 's/[úûüùiÜ]/u/g' | \ + tr '[a-z]' '[A-Z]' | \ + sortuniq "$@" $(ROOT_DICT)/eo.dict: $(OBJ_DIR)/eo.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[.'qQwWxXyY-]" | \ - tr '[a-zĉĝĥĵŝŭ]' '[A-ZĈĜĤĴŜŬ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[.'qQwWxXyY-]" | \ + tr '[a-zĉĝĥĵŝŭ]' '[A-ZĈĜĤĴŜŬ]' | \ + sortuniq "$@" $(ROOT_DICT)/es.dict: $(OBJ_DIR)/es.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[.'-]" | \ - sed -e 's/[áÁ]/a/g' \ - -e 's/[é]/e/g' \ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[.'-]" | \ + sed -e 's/[áÁ]/a/g' \ + -e 's/[é]/e/g' \ -e 's/[í]/i/g' \ - -e 's/[ó]/o/g' \ - -e 's/[úü]/u/g' | \ - tr '[a-zñ]' '[A-ZÑ]' | \ - sort | \ - uniq > $@ + -e 's/[ó]/o/g' \ + -e 's/[úü]/u/g' | \ + tr '[a-zñ]' '[A-ZÑ]' | \ + sortuniq "$@" $(ROOT_DICT)/et.dict: $(OBJ_DIR)/et.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[.'qwxQWX-]" | \ - tr '[a-zäöõüšž]' '[A-ZÄÖÕÜŠŽ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[.'qwxQWX-]" | \ + tr '[a-zäöõüšž]' '[A-ZÄÖÕÜŠŽ]' | \ + sortuniq "$@" $(ROOT_DICT)/fi.dict: $(OBJ_DIR)/fi.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ grep -v "[.':-]" | \ - tr '[a-zäåöšž]' '[A-ZÄÅÖŠŽ]' | \ - sort | \ - uniq > $@ + tr '[a-zäåöšž]' '[A-ZÄÅÖŠŽ]' | \ + sortuniq "$@" $(ROOT_DICT)/fr.dict: $(OBJ_DIR)/fr.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[.'-]" | \ - sed -e 's/[àâä]/a/g' \ - -e 's/[ç]/c/g' \ - -e 's/[Ééèêë]/e/g' \ - -e 's/[ïî]/i/g' \ - -e 's/[ôö]/o/g' \ - -e 's/[úùûü]/u/g' | \ - tr '[a-z]' '[A-Z]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[.'-]" | \ + sed -e 's/[àâä]/a/g' \ + -e 's/[ç]/c/g' \ + -e 's/[Ééèêë]/e/g' \ + -e 's/[ïî]/i/g' \ + -e 's/[ôö]/o/g' \ + -e 's/[úùûü]/u/g' | \ + tr '[a-z]' '[A-Z]' | \ + sortuniq "$@" $(ROOT_DICT)/ga.dict: $(OBJ_DIR)/ga.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ grep -v "[.':-]" | \ - sed -e 's/[áâãÁ]/a/g' \ - -e 's/[ç]/c/g' \ - -e 's/[éèÉ]/e/g' \ - -e 's/[íÍ]/i/g' \ - -e 's/[óöòÓ]/o/g' \ - -e 's/[úüÚ]/u/g' | \ - tr '[a-zñ]' '[A-ZÑ]' | \ - sort | \ - uniq > $@ + sed -e 's/[áâãÁ]/a/g' \ + -e 's/[ç]/c/g' \ + -e 's/[éèÉ]/e/g' \ + -e 's/[íÍ]/i/g' \ + -e 's/[óöòÓ]/o/g' \ + -e 's/[úüÚ]/u/g' | \ + tr '[a-zñ]' '[A-ZÑ]' | \ + sortuniq "$@" $(ROOT_DICT)/he.dict: $(OBJ_DIR)/he.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + sortuniq "$@" $(ROOT_DICT)/hr.dict: $(OBJ_DIR)/hr.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - tr '[a-zćčšž]' '[A-ZĆČŠŽ]' | \ - sed 's/đ/Đ/g' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + tr '[a-zćčšž]' '[A-ZĆČŠŽ]' | \ + sed 's/đ/Đ/g' | \ + sortuniq "$@" $(ROOT_DICT)/hu.dict: $(OBJ_DIR)/hu.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - tr '[a-záéóöőúüű]' '[A-ZÁÉÓÖŐÚÜŰ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + tr '[a-záéóöőúüű]' '[A-ZÁÉÓÖŐÚÜŰ]' | \ + sortuniq "$@" #grep -v "['ԁԃԂԃ-]" $(ROOT_DICT)/hy.dict: $(OBJ_DIR)/hy.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - sed -e 's/ա/Ա/g' -e 's/բ/Բ/g' -e 's/գ/Գ/g' -e 's/դ/Դ/g' -e 's/ե/Ե/g' \ - -e 's/զ/Զ/g' -e 's/է/Է/g' -e 's/ը/Ը/g' -e 's/թ/Թ/g' -e 's/ժ/Ժ/g' \ - -e 's/ի/Ի/g' -e 's/լ/Լ/g' -e 's/խ/Խ/g' -e 's/ծ/Ծ/g' -e 's/կ/Կ/g' \ - -e 's/հ/Հ/g' -e 's/ձ/Ձ/g' -e 's/ղ/Ղ/g' -e 's/ճ/Ճ/g' -e 's/մ/Մ/g' \ - -e 's/յ/Յ/g' -e 's/ն/Ն/g' -e 's/շ/Շ/g' -e 's/ո/Ո/g' -e 's/չ/Չ/g' \ - -e 's/պ/Պ/g' -e 's/ջ/Ջ/g' -e 's/ռ/Ռ/g' -e 's/ս/Ս/g' -e 's/վ/Վ/g' \ - -e 's/տ/Տ/g' -e 's/ր/Ր/g' -e 's/ց/Ց/g' -e 's/ւ/Ւ/g' -e 's/փ/Փ/g' \ - -e 's/ք/Ք/g' -e 's/օ/Օ/g' -e 's/ֆ/Ֆ/g' -e 's/ու/ՈՒ/g' \ - -e "s/'//g" | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + sed -e 's/ա/Ա/g' -e 's/բ/Բ/g' -e 's/գ/Գ/g' -e 's/դ/Դ/g' -e 's/ե/Ե/g' \ + -e 's/զ/Զ/g' -e 's/է/Է/g' -e 's/ը/Ը/g' -e 's/թ/Թ/g' -e 's/ժ/Ժ/g' \ + -e 's/ի/Ի/g' -e 's/լ/Լ/g' -e 's/խ/Խ/g' -e 's/ծ/Ծ/g' -e 's/կ/Կ/g' \ + -e 's/հ/Հ/g' -e 's/ձ/Ձ/g' -e 's/ղ/Ղ/g' -e 's/ճ/Ճ/g' -e 's/մ/Մ/g' \ + -e 's/յ/Յ/g' -e 's/ն/Ն/g' -e 's/շ/Շ/g' -e 's/ո/Ո/g' -e 's/չ/Չ/g' \ + -e 's/պ/Պ/g' -e 's/ջ/Ջ/g' -e 's/ռ/Ռ/g' -e 's/ս/Ս/g' -e 's/վ/Վ/g' \ + -e 's/տ/Տ/g' -e 's/ր/Ր/g' -e 's/ց/Ց/g' -e 's/ւ/Ւ/g' -e 's/փ/Փ/g' \ + -e 's/ք/Ք/g' -e 's/օ/Օ/g' -e 's/ֆ/Ֆ/g' -e 's/ու/ՈՒ/g' \ + -e "s/'//g" | \ + sortuniq "$@" $(ROOT_DICT)/it.dict: $(OBJ_DIR)/it.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[.'-]" | \ - sed -e 's/[àâ]/a/g' \ - -e 's/[ç]/c/g' \ - -e 's/[éè]/e/g' \ - -e 's/[ì]/i/g' \ - -e 's/[òiô]/o/g' \ - -e 's/[ù]/u/g' | \ - tr '[a-z]' '[A-Z]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[.'-]" | \ + sed -e 's/[àâ]/a/g' \ + -e 's/[ç]/c/g' \ + -e 's/[éè]/e/g' \ + -e 's/[ì]/i/g' \ + -e 's/[òiô]/o/g' \ + -e 's/[ù]/u/g' | \ + tr '[a-z]' '[A-Z]' | \ + sortuniq "$@" $(ROOT_DICT)/is.dict: $(OBJ_DIR)/is.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ grep -v "[.'-]" | \ - tr '[a-záæðéíóöúýþ]' '[A-ZÁÆÐÉÍÓÖÚÝÞ]' | \ - sort | \ - uniq > $@ + tr '[a-záæðéíóöúýþ]' '[A-ZÁÆÐÉÍÓÖÚÝÞ]' | sortuniq "$@" $(ROOT_DICT)/lv.dict: $(OBJ_DIR)/lv.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ grep -v "[.'-]" | \ - tr '[a-zāčēģīķļņšūž]' '[A-ZĀČĒĢĪĶĻŅŠŪŽ]' | \ - sort | \ - uniq > $@ + tr '[a-zāčēģīķļņšūž]' '[A-ZĀČĒĢĪĶĻŅŠŪŽ]' | sortuniq "$@" $(ROOT_DICT)/nl.dict: $(OBJ_DIR)/nl.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[1-9+/' .-]" | \ - sed -e 's/[áäâàÅ]/a/g' \ - -e 's/[ç]/c/g' \ - -e 's/[éëèê]/e/g' \ - -e 's/[íïî]/i/g' \ - -e 's/[ñ]/n/g' \ - -e 's/[óöô]/o/g' \ - -e 's/[úüûùÜ]/u/g' | \ - tr '[a-z]' '[A-Z]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[1-9+/' .-]" | \ + sed -e 's/[áäâàÅ]/a/g' \ + -e 's/[ç]/c/g' \ + -e 's/[éëèê]/e/g' \ + -e 's/[íïî]/i/g' \ + -e 's/[ñ]/n/g' \ + -e 's/[óöô]/o/g' \ + -e 's/[úüûùÜ]/u/g' | \ + tr '[a-z]' '[A-Z]' | \ + sortuniq "$@" $(ROOT_DICT)/no.dict: $(OBJ_DIR)/no.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[.'\"-]" | \ - sed -e 's/[áäÄ]/a/g' \ - -e 's/[ç]/c/g' \ - -e 's/[ð]/d/g' \ - -e 's/[éëèêÉ]/e/g' \ - -e 's/[íì]/i/g' \ - -e 's/[óöôò]/o/g' \ - -e 's/[ü]/u/g' | \ - tr '[a-zæøå]' '[A-ZÆØÅ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[.'\"-]" | \ + sed -e 's/[áäÄ]/a/g' \ + -e 's/[ç]/c/g' \ + -e 's/[ð]/d/g' \ + -e 's/[éëèêÉ]/e/g' \ + -e 's/[íì]/i/g' \ + -e 's/[óöôò]/o/g' \ + -e 's/[ü]/u/g' | \ + tr '[a-zæøå]' '[A-ZÆØÅ]' | \ + sortuniq "$@" $(ROOT_DICT)/pl.dict: $(OBJ_DIR)/pl.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - sed -e 's/[ä]/a/g' \ - -e 's/[ç]/c/g' \ - -e 's/[é]/e/g' \ - -e 's/[i]/i/g' \ - -e 's/[ö]/o/g' \ - -e 's/[šŠ]/s/g' \ - -e 's/[û]/u/g' | \ - tr '[a-złąęóśżćńź]' '[A-ZŁĄĘÓŚŻĆŃŹ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + sed -e 's/[ä]/a/g' \ + -e 's/[ç]/c/g' \ + -e 's/[é]/e/g' \ + -e 's/[i]/i/g' \ + -e 's/[ö]/o/g' \ + -e 's/[šŠ]/s/g' \ + -e 's/[û]/u/g' | \ + tr '[a-złąęóśżćńź]' '[A-ZŁĄĘÓŚŻĆŃŹ]' | \ + sortuniq "$@" $(ROOT_DICT)/pt.dict: $(OBJ_DIR)/pt.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - sed -e 's/[áãâàÁÂ]/a/g' \ - -e 's/[éêèÉ]/e/g' \ - -e 's/[íîÍ]/i/g' \ - -e 's/[óôõÓ]/o/g' \ - -e 's/[úüÚ]/u/g' | \ - tr '[a-zç]' '[A-ZÇ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + sed -e 's/[áãâàÁÂ]/a/g' \ + -e 's/[éêèÉ]/e/g' \ + -e 's/[íîÍ]/i/g' \ + -e 's/[óôõÓ]/o/g' \ + -e 's/[úüÚ]/u/g' | \ + tr '[a-zç]' '[A-ZÇ]' | \ + sortuniq "$@" $(ROOT_DICT)/ro.dict: $(OBJ_DIR)/ro.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ sed -e 's/[áâăÂĂ]/a/g' \ - -e 's/[éè]/e/g' \ - -e 's/[íîÎ]/i/g' \ - -e 's/[șȘ]/s/g' \ - -e 's/[țȚ]/t/g' \ - -e 's/[ü]/u/g' | \ - tr '[a-z]' '[A-Z]' | \ - sort | \ - uniq > $@ + -e 's/[éè]/e/g' \ + -e 's/[íîÎ]/i/g' \ + -e 's/[șȘ]/s/g' \ + -e 's/[țȚ]/t/g' \ + -e 's/[ü]/u/g' | \ + tr '[a-z]' '[A-Z]' | \ + sortuniq "$@" $(ROOT_DICT)/ru.dict: $(OBJ_DIR)/ru.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - sed -e 's/а/А/g' -e 's/б/Б/g' -e 's/в/В/g' -e 's/г/Г/g' -e 's/д/Д/g' \ - -e 's/е/Е/g' -e 's/ё/Ё/g' -e 's/ж/Ж/g' -e 's/з/З/g' -e 's/и/И/g' \ - -e 's/й/Й/g' -e 's/к/К/g' -e 's/л/Л/g' -e 's/м/М/g' -e 's/н/Н/g' \ - -e 's/о/О/g' -e 's/п/П/g' -e 's/р/Р/g' -e 's/с/С/g' -e 's/т/Т/g' \ - -e 's/у/У/g' -e 's/ф/Ф/g' -e 's/х/Х/g' -e 's/ц/Ц/g' -e 's/ч/Ч/g' \ - -e 's/ш/Ш/g' -e 's/щ/Щ/g' -e 's/ъ/Ъ/g' -e 's/ы/Ы/g' -e 's/ь/Ь/g' \ - -e 's/э/Э/g' -e 's/ю/Ю/g' -e 's/я/Я/g' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + sed -e 's/а/А/g' -e 's/б/Б/g' -e 's/в/В/g' -e 's/г/Г/g' -e 's/д/Д/g' \ + -e 's/е/Е/g' -e 's/ё/Ё/g' -e 's/ж/Ж/g' -e 's/з/З/g' -e 's/и/И/g' \ + -e 's/й/Й/g' -e 's/к/К/g' -e 's/л/Л/g' -e 's/м/М/g' -e 's/н/Н/g' \ + -e 's/о/О/g' -e 's/п/П/g' -e 's/р/Р/g' -e 's/с/С/g' -e 's/т/Т/g' \ + -e 's/у/У/g' -e 's/ф/Ф/g' -e 's/х/Х/g' -e 's/ц/Ц/g' -e 's/ч/Ч/g' \ + -e 's/ш/Ш/g' -e 's/щ/Щ/g' -e 's/ъ/Ъ/g' -e 's/ы/Ы/g' -e 's/ь/Ь/g' \ + -e 's/э/Э/g' -e 's/ю/Ю/g' -e 's/я/Я/g' | \ + sortuniq "$@" $(ROOT_DICT)/sk.dict: $(OBJ_DIR)/sk.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - sed -e 's/[ë]/e/g' | \ - sed -e 's/á/Á/g' -e 's/ä/Ä/g' -e 's/č/Č/g' -e 's/ď/Ď/g' -e 's/é/É/g' \ - -e 's/ě/Ě/g' -e 's/í/Í/g' -e 's/ľ/Ľ/g' -e 's/ĺ/Ĺ/g' -e 's/ň/Ň/g' \ - -e 's/ô/Ô/g' -e 's/ó/Ó/g' -e 's/ö/Ö/g' -e 's/ŕ/Ŕ/g' -e 's/ř/Ř/g' \ - -e 's/š/Š/g' -e 's/ť/Ť/g' -e 's/ú/Ú/g' -e 's/ü/Ü/g' -e 's/ý/Ý/g' \ - -e 's/ž/Ž/g' | \ - tr '[a-z]' '[A-Z]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + sed -e 's/[ë]/e/g' | \ + sed -e 's/á/Á/g' -e 's/ä/Ä/g' -e 's/č/Č/g' -e 's/ď/Ď/g' -e 's/é/É/g' \ + -e 's/ě/Ě/g' -e 's/í/Í/g' -e 's/ľ/Ľ/g' -e 's/ĺ/Ĺ/g' -e 's/ň/Ň/g' \ + -e 's/ô/Ô/g' -e 's/ó/Ó/g' -e 's/ö/Ö/g' -e 's/ŕ/Ŕ/g' -e 's/ř/Ř/g' \ + -e 's/š/Š/g' -e 's/ť/Ť/g' -e 's/ú/Ú/g' -e 's/ü/Ü/g' -e 's/ý/Ý/g' \ + -e 's/ž/Ž/g' | \ + tr '[a-z]' '[A-Z]' | \ + sortuniq "$@" $(ROOT_DICT)/sl.dict: $(OBJ_DIR)/sl.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - sed -e 's/[áâȁ]/a/g' \ - -e 's/[ćĆ]/c/g' \ - -e 's/[éȇȅ]/e/g' \ - -e 's/[đĐ]/d/g' \ - -e 's/[íȋȉ]/i/g' \ - -e 's/[óȏȍö]/o/g' \ - -e 's/[ŕȓ]/r/g' \ - -e 's/[úȗȕü]/u/g' | \ - sed -e 's/č/Č/g' -e 's/š/Š/g' -e 's/ž/Ž/g' | \ - tr '[a-z]' '[A-Z]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + sed -e 's/[áâȁ]/a/g' \ + -e 's/[ćĆ]/c/g' \ + -e 's/[éȇȅ]/e/g' \ + -e 's/[đĐ]/d/g' \ + -e 's/[íȋȉ]/i/g' \ + -e 's/[óȏȍö]/o/g' \ + -e 's/[ŕȓ]/r/g' \ + -e 's/[úȗȕü]/u/g' | \ + sed -e 's/č/Č/g' -e 's/š/Š/g' -e 's/ž/Ž/g' | \ + tr '[a-z]' '[A-Z]' | \ + sortuniq "$@" $(ROOT_DICT)/sv.dict: $(OBJ_DIR)/sv.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "['-]" | \ - sed -e 's/[æ]/ae/g' \ - -e 's/[ç]/c/g' \ - -e 's/[é]/e/g' \ - -e 's/[ü]/u/g' | \ - tr '[a-zåäö]' '[A-ZÅÄÖ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "['-]" | \ + sed -e 's/[æ]/ae/g' \ + -e 's/[ç]/c/g' \ + -e 's/[é]/e/g' \ + -e 's/[ü]/u/g' | \ + tr '[a-zåäö]' '[A-ZÅÄÖ]' | \ + sortuniq "$@" $(ROOT_DICT)/uk.dict: $(OBJ_DIR)/uk.low $(DEPEND) - echo Building $@ from $< - cat $< | \ - grep -v '^.$$' | \ - grep -v "[-]" | \ - tr '[абвгґдеєжзиіїйклмнопрстуфхцчшщьюя]' '[АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ]' | \ - sort | \ - uniq > $@ + @$(DICT_RULE_PRELUDE); \ + cat "$<" | \ + grep -v '^.$$' | \ + grep -v "[-]" | \ + tr '[абвгґдеєжзиіїйклмнопрстуфхцчшщьюя]' '[АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ]' | \ + sortuniq "$@" CHECKER = cat $(1) | \ grep -v "^[$(2)]*$$" | egrep -v "$(3)" && exit 1 || echo "$< is correct" @@ -624,3 +592,6 @@ check-uk:$(ROOT_DICT)/uk.dict check-%:$(ROOT_DICT)/%.dict $(call CHECKER,$<,ABCDEFGHIJKLMNOPQRSTUVWXYZ,~) + +clean: + rm -rf "$(OBJ_DIR)" diff --git a/l10n/po/fr/trivabble.po b/l10n/po/fr/trivabble.po index 8d3ee32..8e4292f 100644 --- a/l10n/po/fr/trivabble.po +++ b/l10n/po/fr/trivabble.po @@ -182,7 +182,7 @@ msgid "Incorrect dictionary file." msgstr "Dictionnaire incorrect." msgid "Can't load dictionary file." -msgstr "Impossible de charger de dictionnaire" +msgstr "Impossible de charger le dictionnaire" msgid "Enable spell checker" msgstr "Activer le vérificateur orthographique" diff --git a/public/config.js.sample b/public/config.js.sample index beba4ee..2a69af5 100644 --- a/public/config.js.sample +++ b/public/config.js.sample @@ -17,6 +17,9 @@ window.TrivabbleConf = { // to tweak only if your webserver is shared with other conflicting resources at / ( ex: yunohost integration ) APP_PATH: "", + // Whether Check spelling is enabled (dictionaries must be downloaded on the server before enabling this option + ENABLE_CHECK_SPELLING: false, + // I don't like trailing commas, here is a nice message for you reading this file :-) HAVE_FUN: true }; diff --git a/public/index.html b/public/index.html index 22d6993..be8dd23 100644 --- a/public/index.html +++ b/public/index.html @@ -53,7 +53,7 @@

-

+

diff --git a/public/trivabble.js b/public/trivabble.js index a684d01..bb50e36 100644 --- a/public/trivabble.js +++ b/public/trivabble.js @@ -42,7 +42,7 @@ setConf("ENABLE_EVENT_SOURCE", true); setConf("MAX_WEBSOCKET_ERRORS", 1); setConf("APP_PATH", ""); - setConf("SPELL_CHECKER", "false"); + setConf("ENABLE_SPELL_CHECKER", false); const _ = (window.libD && libD.l10n) ? libD.l10n() : function (s) { return s; @@ -151,21 +151,22 @@ } } - function checkSpellCheckerState(code) { - if (code !== null) { - localStorage.spellChecker = code; + function setSpellCheckerState(enabled) { + if (enabled !== null) { + localStorage.spellCheckerEnabled = enabled.toString(); } - if (localStorage.spellChecker === "false") { + + if (localStorage.spellCheckerEnabled === "false") { document.getElementById("enable-spell-checker").checked = false; document.getElementById("check-spelling").style.display = "none"; } else { document.getElementById("enable-spell-checker").checked = true; - document.getElementById("check-spelling").style.display = "block"; + document.getElementById("check-spelling").style.display = ""; } } function downloadDictionary(code) { - if (localStorage.spellChecker === code) { + if (localStorage.spellCheckerEnabled === code) { return; } @@ -174,17 +175,17 @@ file.open("GET", "dict/" + code + ".dict", true); file.onreadystatechange = function () { if (file.readyState === 4) { - if (Number(file.status) === 200) { + if (file.status === 200) { try { dictionary = file.responseText.split("\n"); - checkSpellCheckerState(code); + setSpellCheckerState(code); } catch (e) { myAlert(_("Incorrect dictionary file.")); - checkSpellCheckerState("false"); + setSpellCheckerState(false); } } else { myAlert(_("Can't load dictionary file.")); - checkSpellCheckerState("false"); + setSpellCheckerState(false); } } }; @@ -199,10 +200,10 @@ downloadDictionary(localStorage.trivabbleBoardLang); }, function () { - checkSpellCheckerState("false"); + setSpellCheckerState(false); }); } else { - checkSpellCheckerState("false"); + setSpellCheckerState(false); } } @@ -611,7 +612,7 @@ case "boardLang": localStorage.trivabbleBoardLang = value; document.getElementById("board-lang").value = value; - if (localStorage.spellChecker !== "false") { + if (localStorage.spellCheckerEnabled !== "false") { downloadDictionary(value); } break; @@ -1525,7 +1526,6 @@ } function searchWordInLine(row, col, incRow, incCol) { - const initLetter = getLetterFromBoard(row, col); /* Look for first letter in line */ @@ -1544,7 +1544,7 @@ } return (word.letters === initLetter) ? null : word; } - + function isNewWord(newWord, words) { if (newWord === null) { return false; @@ -1635,7 +1635,7 @@ } function checkSpelling() { - if (localStorage.spellChecker === false) { + if (localStorage.spellCheckerEnabled === "false") { return; } @@ -1763,17 +1763,17 @@ } function initSpellChecker() { - if (!Object.prototype.hasOwnProperty.call(localStorage, "spellChecker")) { - localStorage.spellChecker = Conf.SPELL_CHECKER; + if (!localStorage.spellCheckerEnabled) { + localStorage.spellCheckerEnabled = Conf.ENABLE_SPELL_CHECKER.toString(); } document.getElementById("enable-spell-checker").onclick = enableSpellChecker; - if (localStorage.spellChecker === "false") { - checkSpellCheckerState("false"); + if (localStorage.spellCheckerEnabled === "false") { + setSpellCheckerState(false); } else { - const spellChecker = localStorage.spellChecker; - localStorage.spellChecker = "false"; + const spellChecker = localStorage.spellCheckerEnabled; + localStorage.spellCheckerEnabled = "false"; downloadDictionary(spellChecker); } } @@ -1973,7 +1973,7 @@ document.getElementById("board-lang").value = localStorage.trivabbleBoardLang; } - startGame(localStorage.trivabbleGameNumber, localStorage.trivabbleBoardLang); + startGame(localStorage.trivabbleGameNumber); } function initLang() { -- 2.30.2