Grammalecte  Hex Artifact Content

Artifact eccf91a37623d208722670d415fb7e61b595f03512b57ed07dca0c6a3dd5661b:


0000: 2f 2a 0a 20 20 20 20 47 52 41 4d 4d 41 4c 45 43  /*.    GRAMMALEC
0010: 54 45 20 5b 66 72 5d 20 46 4f 52 20 46 49 52 45  TE [fr] FOR FIRE
0020: 46 4f 58 0a 20 20 20 20 41 75 74 68 6f 72 3a 20  FOX.    Author: 
0030: 4f 6c 69 76 69 65 72 20 52 2e 0a 20 20 20 20 4c  Olivier R..    L
0040: 69 63 65 6e 73 65 3a 20 47 50 4c c2 a0 33 0a 20  icense: GPL..3. 
0050: 20 20 20 57 65 62 73 69 74 65 3a 20 68 74 74 70     Website: http
0060: 3a 2f 2f 77 77 77 2e 64 69 63 6f 6c 6c 65 63 74  ://www.dicollect
0070: 65 2e 6f 72 67 2f 67 72 61 6d 6d 61 6c 65 63 74  e.org/grammalect
0080: 65 0a 2a 2f 0a 0a 2f 2f 2f 2f 20 46 49 52 45 46  e.*/..//// FIREF
0090: 4f 58 20 55 49 0a 0a 22 75 73 65 20 73 74 72 69  OX UI.."use stri
00a0: 63 74 22 3b 0a 0a 0a 63 6f 6e 73 74 20 74 61 62  ct";...const tab
00b0: 73 20 3d 20 72 65 71 75 69 72 65 28 22 73 64 6b  s = require("sdk
00c0: 2f 74 61 62 73 22 29 3b 0a 63 6f 6e 73 74 20 74  /tabs");.const t
00d0: 6f 67 67 6c 65 20 3d 20 72 65 71 75 69 72 65 28  oggle = require(
00e0: 22 73 64 6b 2f 75 69 2f 62 75 74 74 6f 6e 2f 74  "sdk/ui/button/t
00f0: 6f 67 67 6c 65 22 29 3b 0a 63 6f 6e 73 74 20 70  oggle");.const p
0100: 61 6e 65 6c 20 3d 20 72 65 71 75 69 72 65 28 22  anel = require("
0110: 73 64 6b 2f 70 61 6e 65 6c 22 29 3b 0a 63 6f 6e  sdk/panel");.con
0120: 73 74 20 73 65 6c 66 20 3d 20 72 65 71 75 69 72  st self = requir
0130: 65 28 22 73 64 6b 2f 73 65 6c 66 22 29 3b 0a 63  e("sdk/self");.c
0140: 6f 6e 73 74 20 63 6f 72 65 20 3d 20 72 65 71 75  onst core = requ
0150: 69 72 65 28 22 73 64 6b 2f 76 69 65 77 2f 63 6f  ire("sdk/view/co
0160: 72 65 22 29 3b 0a 63 6f 6e 73 74 20 63 6f 6e 74  re");.const cont
0170: 65 78 74 6d 65 6e 75 20 3d 20 72 65 71 75 69 72  extmenu = requir
0180: 65 28 22 73 64 6b 2f 63 6f 6e 74 65 78 74 2d 6d  e("sdk/context-m
0190: 65 6e 75 22 29 3b 0a 63 6f 6e 73 74 20 5f 20 3d  enu");.const _ =
01a0: 20 72 65 71 75 69 72 65 28 22 73 64 6b 2f 6c 31   require("sdk/l1
01b0: 30 6e 22 29 2e 67 65 74 3b 0a 63 6f 6e 73 74 20  0n").get;.const 
01c0: 68 6f 74 6b 65 79 73 20 3d 20 72 65 71 75 69 72  hotkeys = requir
01d0: 65 28 22 73 64 6b 2f 68 6f 74 6b 65 79 73 22 29  e("sdk/hotkeys")
01e0: 3b 0a 63 6f 6e 73 74 20 73 70 20 3d 20 72 65 71  ;.const sp = req
01f0: 75 69 72 65 28 22 73 64 6b 2f 73 69 6d 70 6c 65  uire("sdk/simple
0200: 2d 70 72 65 66 73 22 29 3b 0a 63 6f 6e 73 74 20  -prefs");.const 
0210: 63 6c 69 70 62 6f 61 72 64 20 3d 20 72 65 71 75  clipboard = requ
0220: 69 72 65 28 22 73 64 6b 2f 63 6c 69 70 62 6f 61  ire("sdk/clipboa
0230: 72 64 22 29 3b 0a 2f 2f 63 6f 6e 73 74 20 73 65  rd");.//const se
0240: 6c 65 63 74 69 6f 6e 20 3d 20 72 65 71 75 69 72  lection = requir
0250: 65 28 22 73 64 6b 2f 73 65 6c 65 63 74 69 6f 6e  e("sdk/selection
0260: 22 29 3b 0a 0a 63 6f 6e 73 74 20 7b 20 43 75 20  ");..const { Cu 
0270: 7d 20 3d 20 72 65 71 75 69 72 65 28 22 63 68 72  } = require("chr
0280: 6f 6d 65 22 29 3b 0a 63 6f 6e 73 74 20 7b 20 42  ome");.const { B
0290: 61 73 65 50 72 6f 6d 69 73 65 57 6f 72 6b 65 72  asePromiseWorker
02a0: 20 7d 20 3d 20 43 75 2e 69 6d 70 6f 72 74 28 27   } = Cu.import('
02b0: 72 65 73 6f 75 72 63 65 3a 2f 2f 67 72 65 2f 6d  resource://gre/m
02c0: 6f 64 75 6c 65 73 2f 50 72 6f 6d 69 73 65 57 6f  odules/PromiseWo
02d0: 72 6b 65 72 2e 6a 73 6d 27 2c 20 7b 7d 29 3b 0a  rker.jsm', {});.
02e0: 0a 2f 2f 20 47 72 61 6d 6d 61 6c 65 63 74 65 0a  .// Grammalecte.
02f0: 63 6f 6e 73 74 20 73 63 65 20 3d 20 72 65 71 75  const sce = requ
0300: 69 72 65 28 22 2e 2f 73 70 65 6c 6c 63 68 65 63  ire("./spellchec
0310: 6b 65 72 2e 6a 73 22 29 3b 0a 63 6f 6e 73 74 20  ker.js");.const 
0320: 74 65 78 74 20 3d 20 72 65 71 75 69 72 65 28 22  text = require("
0330: 2e 2f 67 72 61 6d 6d 61 6c 65 63 74 65 2f 74 65  ./grammalecte/te
0340: 78 74 2e 6a 73 22 29 3b 0a 63 6f 6e 73 74 20 68  xt.js");.const h
0350: 65 6c 70 65 72 73 20 3d 20 72 65 71 75 69 72 65  elpers = require
0360: 28 22 2e 2f 67 72 61 6d 6d 61 6c 65 63 74 65 2f  ("./grammalecte/
0370: 68 65 6c 70 65 72 73 2e 6a 73 22 29 3b 0a 63 6f  helpers.js");.co
0380: 6e 73 74 20 74 65 73 74 73 20 3d 20 72 65 71 75  nst tests = requ
0390: 69 72 65 28 22 2e 2f 67 72 61 6d 6d 61 6c 65 63  ire("./grammalec
03a0: 74 65 2f 74 65 73 74 73 2e 6a 73 22 29 3b 0a 0a  te/tests.js");..
03b0: 0a 2f 2a 0a 20 20 20 20 41 64 64 20 64 69 63 74  ./*.    Add dict
03c0: 69 6f 6e 61 72 69 65 73 0a 2a 2f 0a 73 63 65 2e  ionaries.*/.sce.
03d0: 69 6e 69 74 53 70 65 6c 6c 43 68 65 63 6b 65 72  initSpellChecker
03e0: 28 29 3b 0a 69 66 20 28 73 70 2e 70 72 65 66 73  ();.if (sp.prefs
03f0: 5b 27 62 44 69 63 74 43 6c 61 73 73 69 63 27 5d  ['bDictClassic']
0400: 29 20 73 63 65 2e 73 65 74 45 78 74 65 6e 73 69  ) sce.setExtensi
0410: 6f 6e 44 69 63 74 46 6f 6c 64 65 72 28 22 66 72  onDictFolder("fr
0420: 2d 46 52 2d 63 6c 61 73 73 69 63 22 2c 20 74 72  -FR-classic", tr
0430: 75 65 29 3b 0a 69 66 20 28 73 70 2e 70 72 65 66  ue);.if (sp.pref
0440: 73 5b 27 62 44 69 63 74 4d 6f 64 65 72 6e 27 5d  s['bDictModern']
0450: 29 20 73 63 65 2e 73 65 74 45 78 74 65 6e 73 69  ) sce.setExtensi
0460: 6f 6e 44 69 63 74 46 6f 6c 64 65 72 28 22 66 72  onDictFolder("fr
0470: 2d 46 52 2d 6d 6f 64 65 72 6e 22 2c 20 74 72 75  -FR-modern", tru
0480: 65 29 3b 0a 69 66 20 28 73 70 2e 70 72 65 66 73  e);.if (sp.prefs
0490: 5b 27 62 44 69 63 74 52 65 66 6f 72 6d 27 5d 29  ['bDictReform'])
04a0: 20 73 63 65 2e 73 65 74 45 78 74 65 6e 73 69 6f   sce.setExtensio
04b0: 6e 44 69 63 74 46 6f 6c 64 65 72 28 22 66 72 2d  nDictFolder("fr-
04c0: 46 52 2d 72 65 66 6f 72 6d 22 2c 20 74 72 75 65  FR-reform", true
04d0: 29 3b 0a 69 66 20 28 73 70 2e 70 72 65 66 73 5b  );.if (sp.prefs[
04e0: 27 62 44 69 63 74 43 6c 61 73 73 69 63 52 65 66  'bDictClassicRef
04f0: 6f 72 6d 27 5d 29 20 73 63 65 2e 73 65 74 45 78  orm']) sce.setEx
0500: 74 65 6e 73 69 6f 6e 44 69 63 74 46 6f 6c 64 65  tensionDictFolde
0510: 72 28 22 66 72 2d 46 52 2d 63 6c 61 73 73 69 63  r("fr-FR-classic
0520: 2d 72 65 66 6f 72 6d 22 2c 20 74 72 75 65 29 3b  -reform", true);
0530: 0a 0a 66 75 6e 63 74 69 6f 6e 20 73 65 74 45 78  ..function setEx
0540: 74 65 6e 73 69 6f 6e 44 69 63 74 46 6f 6c 64 65  tensionDictFolde
0550: 72 20 28 73 44 69 63 74 4f 70 74 69 6f 6e 2c 20  r (sDictOption, 
0560: 62 56 61 6c 75 65 29 20 7b 0a 20 20 20 20 73 63  bValue) {.    sc
0570: 65 2e 73 65 74 45 78 74 65 6e 73 69 6f 6e 44 69  e.setExtensionDi
0580: 63 74 46 6f 6c 64 65 72 28 73 44 69 63 74 4f 70  ctFolder(sDictOp
0590: 74 69 6f 6e 2c 20 62 56 61 6c 75 65 29 3b 0a 20  tion, bValue);. 
05a0: 20 20 20 73 77 69 74 63 68 20 28 73 44 69 63 74     switch (sDict
05b0: 4f 70 74 69 6f 6e 29 20 7b 0a 20 20 20 20 20 20  Option) {.      
05c0: 20 20 63 61 73 65 20 22 66 72 2d 46 52 2d 63 6c    case "fr-FR-cl
05d0: 61 73 73 69 63 22 3a 20 73 70 2e 70 72 65 66 73  assic": sp.prefs
05e0: 5b 22 62 44 69 63 74 43 6c 61 73 73 69 63 22 5d  ["bDictClassic"]
05f0: 20 3d 20 62 56 61 6c 75 65 3b 20 62 72 65 61 6b   = bValue; break
0600: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22  ;.        case "
0610: 66 72 2d 46 52 2d 6d 6f 64 65 72 6e 22 3a 20 73  fr-FR-modern": s
0620: 70 2e 70 72 65 66 73 5b 22 62 44 69 63 74 4d 6f  p.prefs["bDictMo
0630: 64 65 72 6e 22 5d 20 3d 20 62 56 61 6c 75 65 3b  dern"] = bValue;
0640: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
0650: 63 61 73 65 20 22 66 72 2d 46 52 2d 72 65 66 6f  case "fr-FR-refo
0660: 72 6d 22 3a 20 73 70 2e 70 72 65 66 73 5b 22 62  rm": sp.prefs["b
0670: 44 69 63 74 52 65 66 6f 72 6d 22 5d 20 3d 20 62  DictReform"] = b
0680: 56 61 6c 75 65 3b 20 62 72 65 61 6b 3b 0a 20 20  Value; break;.  
0690: 20 20 20 20 20 20 63 61 73 65 20 22 66 72 2d 46        case "fr-F
06a0: 52 2d 63 6c 61 73 73 69 63 2d 72 65 66 6f 72 6d  R-classic-reform
06b0: 22 3a 20 73 70 2e 70 72 65 66 73 5b 22 62 44 69  ": sp.prefs["bDi
06c0: 63 74 43 6c 61 73 73 69 63 52 65 66 6f 72 6d 22  ctClassicReform"
06d0: 5d 20 3d 20 62 56 61 6c 75 65 3b 20 62 72 65 61  ] = bValue; brea
06e0: 6b 3b 0a 20 20 20 20 20 20 20 20 64 65 66 61 75  k;.        defau
06f0: 6c 74 3a 20 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f  lt: console.erro
0700: 72 28 22 23 20 55 6e 6b 6e 6f 77 6e 20 64 69 63  r("# Unknown dic
0710: 74 69 6f 6e 61 72 79 3a 20 22 20 2b 20 73 44 69  tionary: " + sDi
0720: 63 74 4f 70 74 69 6f 6e 29 3b 0a 20 20 20 20 7d  ctOption);.    }
0730: 0a 20 20 20 20 69 66 20 28 73 70 2e 70 72 65 66  .    if (sp.pref
0740: 73 5b 22 62 44 69 63 74 43 6c 61 73 73 69 63 22  s["bDictClassic"
0750: 5d 29 20 7b 0a 20 20 20 20 20 20 20 20 73 70 2e  ]) {.        sp.
0760: 70 72 65 66 73 5b 22 73 44 69 63 74 53 75 67 67  prefs["sDictSugg
0770: 65 73 74 4c 6f 63 61 6c 65 22 5d 20 3d 20 22 66  estLocale"] = "f
0780: 72 2d 46 52 2d 63 6c 61 73 73 69 63 22 3b 0a 20  r-FR-classic";. 
0790: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 73 70     } else if (sp
07a0: 2e 70 72 65 66 73 5b 22 62 44 69 63 74 43 6c 61  .prefs["bDictCla
07b0: 73 73 69 63 52 65 66 6f 72 6d 22 5d 29 20 7b 0a  ssicReform"]) {.
07c0: 20 20 20 20 20 20 20 20 73 70 2e 70 72 65 66 73          sp.prefs
07d0: 5b 22 73 44 69 63 74 53 75 67 67 65 73 74 4c 6f  ["sDictSuggestLo
07e0: 63 61 6c 65 22 5d 20 3d 20 22 66 72 2d 46 52 2d  cale"] = "fr-FR-
07f0: 63 6c 61 73 73 69 63 2d 72 65 66 6f 72 6d 22 3b  classic-reform";
0800: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
0810: 73 70 2e 70 72 65 66 73 5b 22 62 44 69 63 74 52  sp.prefs["bDictR
0820: 65 66 6f 72 6d 22 5d 29 20 7b 0a 20 20 20 20 20  eform"]) {.     
0830: 20 20 20 73 70 2e 70 72 65 66 73 5b 22 73 44 69     sp.prefs["sDi
0840: 63 74 53 75 67 67 65 73 74 4c 6f 63 61 6c 65 22  ctSuggestLocale"
0850: 5d 20 3d 20 22 66 72 2d 46 52 2d 72 65 66 6f 72  ] = "fr-FR-refor
0860: 6d 22 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 69  m";.    } else i
0870: 66 20 28 73 70 2e 70 72 65 66 73 5b 22 62 44 69  f (sp.prefs["bDi
0880: 63 74 4d 6f 64 65 72 6e 22 5d 29 20 7b 0a 20 20  ctModern"]) {.  
0890: 20 20 20 20 20 20 73 70 2e 70 72 65 66 73 5b 22        sp.prefs["
08a0: 73 44 69 63 74 53 75 67 67 65 73 74 4c 6f 63 61  sDictSuggestLoca
08b0: 6c 65 22 5d 20 3d 20 22 66 72 2d 46 52 2d 6d 6f  le"] = "fr-FR-mo
08c0: 64 65 72 6e 22 3b 0a 20 20 20 20 7d 20 65 6c 73  dern";.    } els
08d0: 65 20 7b 0a 20 20 20 20 20 20 20 20 73 70 2e 70  e {.        sp.p
08e0: 72 65 66 73 5b 22 73 44 69 63 74 53 75 67 67 65  refs["sDictSugge
08f0: 73 74 4c 6f 63 61 6c 65 22 5d 20 3d 20 22 22 3b  stLocale"] = "";
0900: 0a 20 20 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 20 20  .    }.}.../*.  
0910: 20 20 6c 61 7a 79 20 6c 6f 61 64 69 6e 67 0a 2a    lazy loading.*
0920: 2f 0a 6c 65 74 20 69 62 64 61 77 67 20 3d 20 6e  /.let ibdawg = n
0930: 75 6c 6c 20 20 20 2f 2f 20 6d 6f 64 75 6c 65 3a  ull   // module:
0940: 20 69 6e 64 65 78 61 62 6c 65 20 62 69 6e 61 72   indexable binar
0950: 79 20 64 69 72 65 63 74 20 61 63 79 63 6c 69 63  y direct acyclic
0960: 20 77 6f 72 64 20 67 72 61 70 68 0a 6c 65 74 20   word graph.let 
0970: 6c 78 67 20 3d 20 6e 75 6c 6c 3b 20 20 20 20 20  lxg = null;     
0980: 2f 2f 20 6d 6f 64 75 6c 65 3a 20 6c 65 78 69 63  // module: lexic
0990: 6f 67 72 61 70 68 65 72 0a 6c 65 74 20 74 66 20  ographer.let tf 
09a0: 3d 20 6e 75 6c 6c 3b 20 20 20 20 20 20 2f 2f 20  = null;      // 
09b0: 6d 6f 64 75 6c 65 3a 20 74 65 78 74 20 66 6f 72  module: text for
09c0: 6d 61 74 74 65 72 0a 0a 6c 65 74 20 78 47 43 45  matter..let xGCE
09d0: 57 6f 72 6b 65 72 20 3d 20 6e 75 6c 6c 3b 20 20  Worker = null;  
09e0: 2f 2f 20 50 72 6f 6d 69 73 65 57 6f 72 6b 65 72  // PromiseWorker
09f0: 20 74 6f 20 67 65 74 20 6a 6f 62 73 20 64 6f 6e   to get jobs don
0a00: 65 20 69 6e 20 61 20 73 65 70 61 72 61 74 65 20  e in a separate 
0a10: 74 68 72 65 61 64 20 28 69 74 e2 80 99 73 20 32  thread (it...s 2
0a20: 30 20 74 69 6d 65 73 20 66 61 73 74 65 72 20 74  0 times faster t
0a30: 6f 6f 21 21 21 29 0a 6c 65 74 20 6f 44 69 63 74  oo!!!).let oDict
0a40: 20 3d 20 6e 75 6c 6c 3b 0a 6c 65 74 20 6f 4c 78   = null;.let oLx
0a50: 67 20 3d 20 6e 75 6c 6c 3b 0a 6c 65 74 20 6f 54  g = null;.let oT
0a60: 46 20 3d 20 6e 75 6c 6c 3b 0a 0a 0a 66 75 6e 63  F = null;...func
0a70: 74 69 6f 6e 20 6c 6f 61 64 47 72 61 6d 6d 61 72  tion loadGrammar
0a80: 43 68 65 63 6b 65 72 20 28 62 53 65 74 50 61 6e  Checker (bSetPan
0a90: 65 6c 4f 70 74 69 6f 6e 73 3d 66 61 6c 73 65 29  elOptions=false)
0aa0: 20 7b 0a 20 20 20 20 69 66 20 28 78 47 43 45 57   {.    if (xGCEW
0ab0: 6f 72 6b 65 72 20 3d 3d 3d 20 6e 75 6c 6c 29 20  orker === null) 
0ac0: 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 47 72 61  {.        // Gra
0ad0: 6d 6d 61 72 20 63 68 65 63 6b 65 72 0a 20 20 20  mmar checker.   
0ae0: 20 20 20 20 20 78 47 43 45 57 6f 72 6b 65 72 20       xGCEWorker 
0af0: 3d 20 6e 65 77 20 42 61 73 65 50 72 6f 6d 69 73  = new BasePromis
0b00: 65 57 6f 72 6b 65 72 28 27 63 68 72 6f 6d 65 3a  eWorker('chrome:
0b10: 2f 2f 70 72 6f 6d 69 73 65 77 6f 72 6b 65 72 2f  //promiseworker/
0b20: 63 6f 6e 74 65 6e 74 2f 67 63 65 5f 77 6f 72 6b  content/gce_work
0b30: 65 72 2e 6a 73 27 29 3b 0a 20 20 20 20 20 20 20  er.js');.       
0b40: 20 6c 65 74 20 78 50 72 6f 6d 69 73 65 20 3d 20   let xPromise = 
0b50: 78 47 43 45 57 6f 72 6b 65 72 2e 70 6f 73 74 28  xGCEWorker.post(
0b60: 27 6c 6f 61 64 47 72 61 6d 6d 61 72 43 68 65 63  'loadGrammarChec
0b70: 6b 65 72 27 2c 20 5b 73 70 2e 70 72 65 66 73 5b  ker', [sp.prefs[
0b80: 22 73 47 43 4f 70 74 69 6f 6e 73 22 5d 2c 20 22  "sGCOptions"], "
0b90: 46 69 72 65 66 6f 78 22 5d 29 3b 0a 20 20 20 20  Firefox"]);.    
0ba0: 20 20 20 20 78 50 72 6f 6d 69 73 65 2e 74 68 65      xPromise.the
0bb0: 6e 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  n(.            f
0bc0: 75 6e 63 74 69 6f 6e 20 28 61 56 61 6c 29 20 7b  unction (aVal) {
0bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0be0: 20 73 70 2e 70 72 65 66 73 5b 22 73 47 43 4f 70   sp.prefs["sGCOp
0bf0: 74 69 6f 6e 73 22 5d 20 3d 20 61 56 61 6c 3b 0a  tions"] = aVal;.
0c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c10: 69 66 20 28 62 53 65 74 50 61 6e 65 6c 4f 70 74  if (bSetPanelOpt
0c20: 69 6f 6e 73 29 20 7b 0a 20 20 20 20 20 20 20 20  ions) {.        
0c30: 20 20 20 20 20 20 20 20 20 20 20 20 78 41 62 6f              xAbo
0c40: 75 74 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69  utPanel.port.emi
0c50: 74 28 22 73 65 6e 64 47 72 61 6d 6d 61 72 4f 70  t("sendGrammarOp
0c60: 74 69 6f 6e 73 54 6f 50 61 6e 65 6c 22 2c 20 61  tionsToPanel", a
0c70: 56 61 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Val);.          
0c80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0c90: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 20      },.         
0ca0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 28 61 52 65     function (aRe
0cb0: 61 73 6f 6e 29 20 7b 0a 20 20 20 20 20 20 20 20  ason) {.        
0cc0: 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e          console.
0cd0: 65 72 72 6f 72 28 27 50 72 6f 6d 69 73 65 20 72  error('Promise r
0ce0: 65 6a 65 63 74 65 64 20 2d 20 27 2c 20 61 52 65  ejected - ', aRe
0cf0: 61 73 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  ason);.         
0d00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 29 2e 63     }.        ).c
0d10: 61 74 63 68 28 0a 20 20 20 20 20 20 20 20 20 20  atch(.          
0d20: 20 20 66 75 6e 63 74 69 6f 6e 20 28 61 43 61 75    function (aCau
0d30: 67 68 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ght) {.         
0d40: 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 65         console.e
0d50: 72 72 6f 72 28 27 50 72 6f 6d 69 73 65 20 45 72  rror('Promise Er
0d60: 72 6f 72 20 2d 20 27 2c 20 61 43 61 75 67 68 74  ror - ', aCaught
0d70: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
0d80: 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20  .        );.    
0d90: 7d 20 65 6c 73 65 20 69 66 20 28 62 53 65 74 50  } else if (bSetP
0da0: 61 6e 65 6c 4f 70 74 69 6f 6e 73 29 20 7b 0a 20  anelOptions) {. 
0db0: 20 20 20 20 20 20 20 78 41 62 6f 75 74 50 61 6e         xAboutPan
0dc0: 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 73 65  el.port.emit("se
0dd0: 6e 64 47 72 61 6d 6d 61 72 4f 70 74 69 6f 6e 73  ndGrammarOptions
0de0: 54 6f 50 61 6e 65 6c 22 2c 20 73 70 2e 70 72 65  ToPanel", sp.pre
0df0: 66 73 5b 22 73 47 43 4f 70 74 69 6f 6e 73 22 5d  fs["sGCOptions"]
0e00: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
0e10: 75 72 6e 20 74 72 75 65 3b 0a 7d 0a 0a 66 75 6e  urn true;.}..fun
0e20: 63 74 69 6f 6e 20 6c 6f 61 64 4c 65 78 69 63 6f  ction loadLexico
0e30: 67 72 61 70 68 65 20 28 29 20 7b 0a 20 20 20 20  graphe () {.    
0e40: 69 66 20 28 69 62 64 61 77 67 20 3d 3d 3d 20 6e  if (ibdawg === n
0e50: 75 6c 6c 20 7c 7c 20 6c 78 67 20 3d 3d 3d 20 6e  ull || lxg === n
0e60: 75 6c 6c 20 7c 7c 20 6f 44 69 63 74 20 3d 3d 3d  ull || oDict ===
0e70: 20 6e 75 6c 6c 20 7c 7c 20 6f 4c 78 67 20 3d 3d   null || oLxg ==
0e80: 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20  = null) {.      
0e90: 20 20 6c 78 67 20 3d 20 72 65 71 75 69 72 65 28    lxg = require(
0ea0: 22 2e 2f 67 72 61 6d 6d 61 6c 65 63 74 65 2f 66  "./grammalecte/f
0eb0: 72 2f 6c 65 78 69 63 6f 67 72 61 70 68 65 2e 6a  r/lexicographe.j
0ec0: 73 22 29 3b 0a 20 20 20 20 20 20 20 20 69 62 64  s");.        ibd
0ed0: 61 77 67 20 3d 20 72 65 71 75 69 72 65 28 22 72  awg = require("r
0ee0: 65 73 6f 75 72 63 65 3a 2f 2f 67 72 61 6d 6d 61  esource://gramma
0ef0: 6c 65 63 74 65 2f 69 62 64 61 77 67 2e 6a 73 22  lecte/ibdawg.js"
0f00: 29 3b 0a 20 20 20 20 20 20 20 20 6f 44 69 63 74  );.        oDict
0f10: 20 3d 20 6e 65 77 20 69 62 64 61 77 67 2e 49 42   = new ibdawg.IB
0f20: 44 41 57 47 28 22 66 72 22 29 3b 0a 20 20 20 20  DAWG("fr");.    
0f30: 20 20 20 20 6f 4c 78 67 20 3d 20 6e 65 77 20 6c      oLxg = new l
0f40: 78 67 2e 4c 65 78 69 63 6f 67 72 61 70 68 65 28  xg.Lexicographe(
0f50: 6f 44 69 63 74 29 3b 0a 20 20 20 20 7d 0a 7d 0a  oDict);.    }.}.
0f60: 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 54 65  .function loadTe
0f70: 78 74 46 6f 72 6d 61 74 74 65 72 20 28 29 20 7b  xtFormatter () {
0f80: 0a 20 20 20 20 69 66 20 28 74 66 20 3d 3d 3d 20  .    if (tf === 
0f90: 6e 75 6c 6c 20 7c 7c 20 6f 54 46 20 3d 3d 3d 20  null || oTF === 
0fa0: 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20  null) {.        
0fb0: 74 66 20 3d 20 72 65 71 75 69 72 65 28 22 2e 2f  tf = require("./
0fc0: 67 72 61 6d 6d 61 6c 65 63 74 65 2f 66 72 2f 74  grammalecte/fr/t
0fd0: 65 78 74 66 6f 72 6d 61 74 74 65 72 2e 6a 73 22  extformatter.js"
0fe0: 29 3b 0a 20 20 20 20 20 20 20 20 6f 54 46 20 3d  );.        oTF =
0ff0: 20 6e 65 77 20 74 66 2e 54 65 78 74 46 6f 72 6d   new tf.TextForm
1000: 61 74 74 65 72 28 29 3b 0a 20 20 20 20 7d 0a 7d  atter();.    }.}
1010: 0a 0a 0a 2f 2a 0a 20 20 20 20 43 75 72 72 65 6e  .../*.    Curren
1020: 74 20 73 74 61 74 65 0a 2a 2f 0a 6c 65 74 20 78  t state.*/.let x
1030: 41 63 74 69 76 65 57 6f 72 6b 65 72 20 3d 20 6e  ActiveWorker = n
1040: 75 6c 6c 3b 0a 6c 65 74 20 62 44 69 63 74 41 63  ull;.let bDictAc
1050: 74 69 76 65 20 3d 20 66 61 6c 73 65 3b 0a 0a 0a  tive = false;...
1060: 2f 2a 0a 20 20 20 20 4d 61 69 6e 20 42 75 74 74  /*.    Main Butt
1070: 6f 6e 0a 2a 2f 0a 63 6f 6e 73 74 20 78 4d 61 69  on.*/.const xMai
1080: 6e 42 75 74 74 6f 6e 20 3d 20 74 6f 67 67 6c 65  nButton = toggle
1090: 2e 54 6f 67 67 6c 65 42 75 74 74 6f 6e 28 7b 0a  .ToggleButton({.
10a0: 20 20 20 20 69 64 3a 20 22 67 72 61 6d 6d 61 6c      id: "grammal
10b0: 65 63 74 65 2d 6d 61 69 6e 62 75 74 74 6f 6e 22  ecte-mainbutton"
10c0: 2c 0a 20 20 20 20 6c 61 62 65 6c 3a 20 5f 28 22  ,.    label: _("
10d0: 6d 61 69 6e 54 69 74 6c 65 22 29 2c 0a 20 20 20  mainTitle"),.   
10e0: 20 74 6f 6f 6c 74 69 70 3a 20 5f 28 22 62 75 74   tooltip: _("but
10f0: 74 6f 6e 54 6f 6f 6c 74 69 70 22 29 2c 0a 20 20  tonTooltip"),.  
1100: 20 20 69 63 6f 6e 3a 20 7b 0a 20 20 20 20 20 20    icon: {.      
1110: 20 20 22 31 36 22 3a 20 22 2e 2f 69 6d 67 2f 69    "16": "./img/i
1120: 63 6f 6e 2d 31 36 2e 70 6e 67 22 2c 0a 20 20 20  con-16.png",.   
1130: 20 20 20 20 20 22 33 32 22 3a 20 22 2e 2f 69 6d       "32": "./im
1140: 67 2f 69 63 6f 6e 2d 33 32 2e 70 6e 67 22 2c 0a  g/icon-32.png",.
1150: 20 20 20 20 20 20 20 20 22 36 34 22 3a 20 22 2e          "64": ".
1160: 2f 69 6d 67 2f 69 63 6f 6e 2d 36 34 2e 70 6e 67  /img/icon-64.png
1170: 22 0a 20 20 20 20 7d 2c 0a 20 20 20 20 2f 2f 20  ".    },.    // 
1180: 4e 6f 74 65 3a 20 69 74 20 69 73 20 6e 6f 74 20  Note: it is not 
1190: 70 6f 73 73 69 62 6c 65 20 74 6f 20 64 69 73 74  possible to dist
11a0: 69 6e 67 75 69 73 68 20 62 65 74 77 65 65 6e 20  inguish between 
11b0: 6c 65 66 74 2f 72 69 67 68 74 20 63 6c 69 63 6b  left/right click
11c0: 0a 20 20 20 20 2f 2f 20 68 74 74 70 73 3a 2f 2f  .    // https://
11d0: 62 6c 6f 67 2e 6d 6f 7a 69 6c 6c 61 2e 6f 72 67  blog.mozilla.org
11e0: 2f 61 64 64 6f 6e 73 2f 32 30 31 34 2f 30 33 2f  /addons/2014/03/
11f0: 31 33 2f 6e 65 77 2d 61 64 64 2d 6f 6e 2d 73 64  13/new-add-on-sd
1200: 6b 2d 61 75 73 74 72 61 6c 69 73 2d 75 69 2d 66  k-australis-ui-f
1210: 65 61 74 75 72 65 73 2d 69 6e 2d 66 69 72 65 66  eatures-in-firef
1220: 6f 78 2d 32 39 2f 63 6f 6d 6d 65 6e 74 2d 70 61  ox-29/comment-pa
1230: 67 65 2d 31 2f 23 63 6f 6d 6d 65 6e 74 2d 31 37  ge-1/#comment-17
1240: 38 36 32 31 2c 0a 20 20 20 20 6f 6e 43 6c 69 63  8621,.    onClic
1250: 6b 3a 20 66 75 6e 63 74 69 6f 6e 20 28 73 74 61  k: function (sta
1260: 74 65 29 20 7b 0a 20 20 20 20 20 20 20 20 63 72  te) {.        cr
1270: 65 61 74 65 41 62 6f 75 74 50 61 6e 65 6c 28 29  eateAboutPanel()
1280: 3b 0a 20 20 20 20 20 20 20 20 78 41 62 6f 75 74  ;.        xAbout
1290: 50 61 6e 65 6c 2e 73 68 6f 77 28 7b 70 6f 73 69  Panel.show({posi
12a0: 74 69 6f 6e 3a 20 78 4d 61 69 6e 42 75 74 74 6f  tion: xMainButto
12b0: 6e 7d 29 3b 0a 20 20 20 20 7d 0a 7d 29 3b 0a 0a  n});.    }.});..
12c0: 0a 2f 2a 0a 20 20 20 20 41 62 6f 75 74 0a 2a 2f  ./*.    About.*/
12d0: 0a 0a 6c 65 74 20 78 41 62 6f 75 74 50 61 6e 65  ..let xAboutPane
12e0: 6c 20 3d 20 6e 75 6c 6c 3b 0a 0a 66 75 6e 63 74  l = null;..funct
12f0: 69 6f 6e 20 63 72 65 61 74 65 41 62 6f 75 74 50  ion createAboutP
1300: 61 6e 65 6c 20 28 29 20 7b 0a 20 20 20 20 69 66  anel () {.    if
1310: 20 28 78 41 62 6f 75 74 50 61 6e 65 6c 20 3d 3d   (xAboutPanel ==
1320: 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20  = null) {.      
1330: 20 20 78 41 62 6f 75 74 50 61 6e 65 6c 20 3d 20    xAboutPanel = 
1340: 70 61 6e 65 6c 2e 50 61 6e 65 6c 28 7b 0a 20 20  panel.Panel({.  
1350: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 65 6e            conten
1360: 74 55 52 4c 3a 20 73 65 6c 66 2e 64 61 74 61 2e  tURL: self.data.
1370: 75 72 6c 28 22 61 62 6f 75 74 5f 70 61 6e 65 6c  url("about_panel
1380: 2e 68 74 6d 6c 22 29 2c 0a 20 20 20 20 20 20 20  .html"),.       
1390: 20 20 20 20 20 63 6f 6e 74 65 6e 74 53 63 72 69       contentScri
13a0: 70 74 46 69 6c 65 3a 20 73 65 6c 66 2e 64 61 74  ptFile: self.dat
13b0: 61 2e 75 72 6c 28 22 61 62 6f 75 74 5f 70 61 6e  a.url("about_pan
13c0: 65 6c 2e 6a 73 22 29 2c 0a 20 20 20 20 20 20 20  el.js"),.       
13d0: 20 20 20 20 20 6f 6e 48 69 64 65 3a 20 66 75 6e       onHide: fun
13e0: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20  ction () {.     
13f0: 20 20 20 20 20 20 20 20 20 20 20 78 4d 61 69 6e             xMain
1400: 42 75 74 74 6f 6e 2e 73 74 61 74 65 28 22 77 69  Button.state("wi
1410: 6e 64 6f 77 22 2c 20 7b 63 68 65 63 6b 65 64 3a  ndow", {checked:
1420: 20 66 61 6c 73 65 7d 29 3b 0a 20 20 20 20 20 20   false});.      
1430: 20 20 20 20 20 20 20 20 20 20 78 41 62 6f 75 74            xAbout
1440: 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28  Panel.port.emit(
1450: 22 73 68 6f 77 48 65 6c 70 22 29 3b 0a 20 20 20  "showHelp");.   
1460: 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
1470: 20 20 20 20 20 20 20 20 70 6f 73 69 74 69 6f 6e          position
1480: 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  : {.            
1490: 20 20 20 20 72 69 67 68 74 3a 20 30 2c 0a 20 20      right: 0,.  
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
14b0: 74 74 6f 6d 3a 20 30 0a 20 20 20 20 20 20 20 20  ttom: 0.        
14c0: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 20      },.         
14d0: 20 20 20 77 69 64 74 68 3a 20 33 34 30 2c 0a 20     width: 340,. 
14e0: 20 20 20 20 20 20 20 20 20 20 20 68 65 69 67 68             heigh
14f0: 74 3a 20 36 37 30 0a 20 20 20 20 20 20 20 20 7d  t: 670.        }
1500: 29 3b 0a 0a 20 20 20 20 20 20 20 20 78 41 62 6f  );..        xAbo
1510: 75 74 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69  utPanel.port.emi
1520: 74 28 22 63 61 6c 63 44 65 66 61 75 6c 74 50 61  t("calcDefaultPa
1530: 6e 65 6c 48 65 69 67 68 74 22 29 3b 0a 0a 20 20  nelHeight");..  
1540: 20 20 20 20 20 20 78 41 62 6f 75 74 50 61 6e 65        xAboutPane
1550: 6c 2e 70 6f 72 74 2e 6f 6e 28 22 73 65 74 48 65  l.port.on("setHe
1560: 69 67 68 74 22 2c 20 66 75 6e 63 74 69 6f 6e 20  ight", function 
1570: 28 6e 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  (n) {.          
1580: 20 20 78 41 62 6f 75 74 50 61 6e 65 6c 2e 72 65    xAboutPanel.re
1590: 73 69 7a 65 28 33 32 30 2c 20 6e 29 3b 0a 20 20  size(320, n);.  
15a0: 20 20 20 20 20 20 7d 29 3b 0a 0a 20 20 20 20 20        });..     
15b0: 20 20 20 78 41 62 6f 75 74 50 61 6e 65 6c 2e 70     xAboutPanel.p
15c0: 6f 72 74 2e 6f 6e 28 22 6f 70 65 6e 43 6f 6e 6a  ort.on("openConj
15d0: 75 67 75 65 75 72 22 2c 20 66 75 6e 63 74 69 6f  ugueur", functio
15e0: 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20  n () {.         
15f0: 20 20 20 63 72 65 61 74 65 43 6f 6e 6a 50 61 6e     createConjPan
1600: 65 6c 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  el();.          
1610: 20 20 78 43 6f 6e 6a 50 61 6e 65 6c 2e 73 68 6f    xConjPanel.sho
1620: 77 28 7b 70 6f 73 69 74 69 6f 6e 3a 20 78 4d 61  w({position: xMa
1630: 69 6e 42 75 74 74 6f 6e 7d 29 3b 0a 20 20 20 20  inButton});.    
1640: 20 20 20 20 20 20 20 20 78 43 6f 6e 6a 50 61 6e          xConjPan
1650: 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 63 6f  el.port.emit("co
1660: 6e 6a 75 67 61 74 65 22 2c 20 22 c3 aa 74 72 65  njugate", "..tre
1670: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a  ");.        });.
1680: 0a 20 20 20 20 20 20 20 20 78 41 62 6f 75 74 50  .        xAboutP
1690: 61 6e 65 6c 2e 70 6f 72 74 2e 6f 6e 28 22 6f 70  anel.port.on("op
16a0: 65 6e 55 52 4c 22 2c 20 66 75 6e 63 74 69 6f 6e  enURL", function
16b0: 20 28 73 55 52 4c 29 20 7b 0a 20 20 20 20 20 20   (sURL) {.      
16c0: 20 20 20 20 20 20 74 61 62 73 2e 6f 70 65 6e 28        tabs.open(
16d0: 73 55 52 4c 29 3b 0a 20 20 20 20 20 20 20 20 7d  sURL);.        }
16e0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 78 41 62 6f  );..        xAbo
16f0: 75 74 50 61 6e 65 6c 2e 70 6f 72 74 2e 6f 6e 28  utPanel.port.on(
1700: 22 6c 6f 61 64 47 72 61 6d 6d 61 72 4f 70 74 69  "loadGrammarOpti
1710: 6f 6e 73 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28  ons", function (
1720: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
1730: 6c 6f 61 64 47 72 61 6d 6d 61 72 43 68 65 63 6b  loadGrammarCheck
1740: 65 72 28 74 72 75 65 29 3b 0a 20 20 20 20 20 20  er(true);.      
1750: 20 20 7d 29 3b 0a 0a 20 20 20 20 20 20 20 20 78    });..        x
1760: 41 62 6f 75 74 50 61 6e 65 6c 2e 70 6f 72 74 2e  AboutPanel.port.
1770: 6f 6e 28 22 6c 6f 61 64 53 70 65 6c 6c 69 6e 67  on("loadSpelling
1780: 4f 70 74 69 6f 6e 73 22 2c 20 66 75 6e 63 74 69  Options", functi
1790: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20  on () {.        
17a0: 20 20 20 20 78 41 62 6f 75 74 50 61 6e 65 6c 2e      xAboutPanel.
17b0: 70 6f 72 74 2e 65 6d 69 74 28 22 73 65 6e 64 53  port.emit("sendS
17c0: 70 65 6c 6c 69 6e 67 4f 70 74 69 6f 6e 73 54 6f  pellingOptionsTo
17d0: 50 61 6e 65 6c 22 2c 0a 20 20 20 20 20 20 20 20  Panel",.        
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 20 20 20 20 20 20 20 20 73 70 2e 70 72 65            sp.pre
1800: 66 73 5b 22 62 44 69 63 74 4d 6f 64 65 72 6e 22  fs["bDictModern"
1810: 5d 2c 20 73 70 2e 70 72 65 66 73 5b 22 62 44 69  ], sp.prefs["bDi
1820: 63 74 43 6c 61 73 73 69 63 22 5d 2c 0a 20 20 20  ctClassic"],.   
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1850: 70 2e 70 72 65 66 73 5b 22 62 44 69 63 74 52 65  p.prefs["bDictRe
1860: 66 6f 72 6d 22 5d 2c 20 73 70 2e 70 72 65 66 73  form"], sp.prefs
1870: 5b 22 62 44 69 63 74 43 6c 61 73 73 69 63 52 65  ["bDictClassicRe
1880: 66 6f 72 6d 22 5d 29 3b 0a 20 20 20 20 20 20 20  form"]);.       
1890: 20 7d 29 3b 0a 0a 20 20 20 20 20 20 20 20 78 41   });..        xA
18a0: 62 6f 75 74 50 61 6e 65 6c 2e 70 6f 72 74 2e 6f  boutPanel.port.o
18b0: 6e 28 22 63 68 61 6e 67 65 44 69 63 74 53 65 74  n("changeDictSet
18c0: 74 69 6e 67 22 2c 20 66 75 6e 63 74 69 6f 6e 20  ting", function 
18d0: 28 73 44 69 63 74 4f 70 74 69 6f 6e 2c 20 62 56  (sDictOption, bV
18e0: 61 6c 75 65 29 20 7b 0a 20 20 20 20 20 20 20 20  alue) {.        
18f0: 20 20 20 20 73 65 74 45 78 74 65 6e 73 69 6f 6e      setExtension
1900: 44 69 63 74 46 6f 6c 64 65 72 28 73 44 69 63 74  DictFolder(sDict
1910: 4f 70 74 69 6f 6e 2c 20 62 56 61 6c 75 65 29 3b  Option, bValue);
1920: 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 0a 20 20  .        });..  
1930: 20 20 20 20 20 20 78 41 62 6f 75 74 50 61 6e 65        xAboutPane
1940: 6c 2e 70 6f 72 74 2e 6f 6e 28 22 73 65 74 4f 70  l.port.on("setOp
1950: 74 69 6f 6e 22 2c 20 66 75 6e 63 74 69 6f 6e 20  tion", function 
1960: 28 73 4f 70 74 69 6f 6e 49 64 2c 20 62 56 61 6c  (sOptionId, bVal
1970: 75 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ue) {.          
1980: 20 20 6c 65 74 20 78 50 72 6f 6d 69 73 65 20 3d    let xPromise =
1990: 20 78 47 43 45 57 6f 72 6b 65 72 2e 70 6f 73 74   xGCEWorker.post
19a0: 28 27 73 65 74 4f 70 74 69 6f 6e 27 2c 20 5b 73  ('setOption', [s
19b0: 4f 70 74 69 6f 6e 49 64 2c 20 62 56 61 6c 75 65  OptionId, bValue
19c0: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
19d0: 78 50 72 6f 6d 69 73 65 2e 74 68 65 6e 28 0a 20  xPromise.then(. 
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
19f0: 75 6e 63 74 69 6f 6e 20 28 61 56 61 6c 29 20 7b  unction (aVal) {
1a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a10: 20 20 20 20 20 73 70 2e 70 72 65 66 73 5b 22 73       sp.prefs["s
1a20: 47 43 4f 70 74 69 6f 6e 73 22 5d 20 3d 20 61 56  GCOptions"] = aV
1a30: 61 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  al;.            
1a40: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 20      },.         
1a50: 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20         function 
1a60: 28 61 52 65 61 73 6f 6e 29 20 7b 0a 20 20 20 20  (aReason) {.    
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a80: 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 27 50  console.error('P
1a90: 72 6f 6d 69 73 65 20 72 65 6a 65 63 74 65 64 20  romise rejected 
1aa0: 2d 20 27 2c 20 61 52 65 61 73 6f 6e 29 3b 0a 20  - ', aReason);. 
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 2e 63  .            ).c
1ad0: 61 74 63 68 28 0a 20 20 20 20 20 20 20 20 20 20  atch(.          
1ae0: 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 28        function (
1af0: 61 43 61 75 67 68 74 29 20 7b 0a 20 20 20 20 20  aCaught) {.     
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b10: 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 27 50 72  onsole.error('Pr
1b20: 6f 6d 69 73 65 20 45 72 72 6f 72 20 2d 20 27 2c  omise Error - ',
1b30: 20 61 43 61 75 67 68 74 29 3b 0a 20 20 20 20 20   aCaught);.     
1b40: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1b50: 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20           );.    
1b60: 20 20 20 20 7d 29 3b 0a 0a 20 20 20 20 20 20 20      });..       
1b70: 20 78 41 62 6f 75 74 50 61 6e 65 6c 2e 70 6f 72   xAboutPanel.por
1b80: 74 2e 6f 6e 28 22 72 65 73 65 74 4f 70 74 69 6f  t.on("resetOptio
1b90: 6e 73 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 29  ns", function ()
1ba0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c   {.            l
1bb0: 65 74 20 78 50 72 6f 6d 69 73 65 20 3d 20 78 47  et xPromise = xG
1bc0: 43 45 57 6f 72 6b 65 72 2e 70 6f 73 74 28 27 72  CEWorker.post('r
1bd0: 65 73 65 74 4f 70 74 69 6f 6e 73 27 29 3b 0a 20  esetOptions');. 
1be0: 20 20 20 20 20 20 20 20 20 20 20 78 50 72 6f 6d             xProm
1bf0: 69 73 65 2e 74 68 65 6e 28 0a 20 20 20 20 20 20  ise.then(.      
1c00: 20 20 20 20 20 20 20 20 20 20 66 75 6e 63 74 69            functi
1c10: 6f 6e 20 28 61 56 61 6c 29 20 7b 0a 20 20 20 20  on (aVal) {.    
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 73 70 2e 70 72 65 66 73 5b 22 73 47 43 4f 70 74  sp.prefs["sGCOpt
1c40: 69 6f 6e 73 22 5d 20 3d 20 61 56 61 6c 3b 0a 20  ions"] = aVal;. 
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 78 41 62 6f 75 74 50 61 6e 65 6c 2e 70     xAboutPanel.p
1c70: 6f 72 74 2e 65 6d 69 74 28 22 73 65 6e 64 47 72  ort.emit("sendGr
1c80: 61 6d 6d 61 72 4f 70 74 69 6f 6e 73 54 6f 50 61  ammarOptionsToPa
1c90: 6e 65 6c 22 2c 20 73 70 2e 70 72 65 66 73 5b 22  nel", sp.prefs["
1ca0: 73 47 43 4f 70 74 69 6f 6e 73 22 5d 29 3b 0a 20  sGCOptions"]);. 
1cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1cc0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1cd0: 20 20 66 75 6e 63 74 69 6f 6e 20 28 61 52 65 61    function (aRea
1ce0: 73 6f 6e 29 20 7b 0a 20 20 20 20 20 20 20 20 20  son) {.         
1cf0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f             conso
1d00: 6c 65 2e 65 72 72 6f 72 28 27 50 72 6f 6d 69 73  le.error('Promis
1d10: 65 20 72 65 6a 65 63 74 65 64 20 2d 20 27 2c 20  e rejected - ', 
1d20: 61 52 65 61 73 6f 6e 29 3b 0a 20 20 20 20 20 20  aReason);.      
1d30: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1d40: 20 20 20 20 20 20 20 20 29 2e 63 61 74 63 68 28          ).catch(
1d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d60: 20 66 75 6e 63 74 69 6f 6e 20 28 61 43 61 75 67   function (aCaug
1d70: 68 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ht) {.          
1d80: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c            consol
1d90: 65 2e 65 72 72 6f 72 28 27 50 72 6f 6d 69 73 65  e.error('Promise
1da0: 20 45 72 72 6f 72 20 2d 20 27 2c 20 61 43 61 75   Error - ', aCau
1db0: 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ght);.          
1dc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1dd0: 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 7d      );.        }
1de0: 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a  );.    }.}.../*.
1df0: 20 20 20 20 47 72 61 6d 6d 61 72 20 43 68 65 63      Grammar Chec
1e00: 6b 65 72 0a 2a 2f 0a 0a 6c 65 74 20 78 47 43 50  ker.*/..let xGCP
1e10: 61 6e 65 6c 20 3d 20 6e 75 6c 6c 3b 0a 0a 66 75  anel = null;..fu
1e20: 6e 63 74 69 6f 6e 20 63 72 65 61 74 65 47 43 50  nction createGCP
1e30: 61 6e 65 6c 20 28 29 20 7b 0a 20 20 20 20 69 66  anel () {.    if
1e40: 20 28 78 47 43 50 61 6e 65 6c 20 3d 3d 3d 20 6e   (xGCPanel === n
1e50: 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 78  ull) {.        x
1e60: 47 43 50 61 6e 65 6c 20 3d 20 70 61 6e 65 6c 2e  GCPanel = panel.
1e70: 50 61 6e 65 6c 28 7b 0a 20 20 20 20 20 20 20 20  Panel({.        
1e80: 20 20 20 20 63 6f 6e 74 65 6e 74 55 52 4c 3a 20      contentURL: 
1e90: 73 65 6c 66 2e 64 61 74 61 2e 75 72 6c 28 22 67  self.data.url("g
1ea0: 63 5f 70 61 6e 65 6c 2e 68 74 6d 6c 22 29 2c 0a  c_panel.html"),.
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1ec0: 65 6e 74 53 63 72 69 70 74 46 69 6c 65 3a 20 73  entScriptFile: s
1ed0: 65 6c 66 2e 64 61 74 61 2e 75 72 6c 28 22 67 63  elf.data.url("gc
1ee0: 5f 70 61 6e 65 6c 2e 6a 73 22 29 2c 0a 20 20 20  _panel.js"),.   
1ef0: 20 20 20 20 20 20 20 20 20 6f 6e 53 68 6f 77 3a           onShow:
1f00: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
1f20: 47 43 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69  GCPanel.port.emi
1f30: 74 28 22 73 65 74 50 61 6e 65 6c 57 69 64 74 68  t("setPanelWidth
1f40: 22 2c 20 73 70 2e 70 72 65 66 73 5b 22 6e 47 43  ", sp.prefs["nGC
1f50: 50 61 6e 65 6c 57 69 64 74 68 22 5d 29 3b 0a 20  PanelWidth"]);. 
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f70: 66 20 28 73 70 2e 70 72 65 66 73 5b 22 73 44 69  f (sp.prefs["sDi
1f80: 63 74 53 75 67 67 65 73 74 4c 6f 63 61 6c 65 22  ctSuggestLocale"
1f90: 5d 20 21 3d 3d 20 22 22 29 20 7b 0a 20 20 20 20  ] !== "") {.    
1fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb0: 62 44 69 63 74 41 63 74 69 76 65 20 3d 20 73 63  bDictActive = sc
1fc0: 65 2e 73 65 74 44 69 63 74 69 6f 6e 61 72 79 28  e.setDictionary(
1fd0: 73 70 2e 70 72 65 66 73 5b 22 73 44 69 63 74 53  sp.prefs["sDictS
1fe0: 75 67 67 65 73 74 4c 6f 63 61 6c 65 22 5d 29 3b  uggestLocale"]);
1ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2000: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
2010: 20 20 20 69 66 20 28 21 62 44 69 63 74 41 63 74     if (!bDictAct
2020: 69 76 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ive) {.         
2030: 20 20 20 20 20 20 20 20 20 20 20 62 44 69 63 74             bDict
2040: 41 63 74 69 76 65 20 3d 20 73 63 65 2e 73 65 74  Active = sce.set
2050: 44 69 63 74 69 6f 6e 61 72 79 28 22 66 72 22 29  Dictionary("fr")
2060: 3b 20 2f 2f 20 64 65 66 61 75 6c 74 20 64 69 63  ; // default dic
2070: 74 69 6f 6e 61 72 79 20 69 6e 20 46 72 65 6e 63  tionary in Frenc
2080: 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 46 69 72  h version of Fir
2090: 65 66 6f 78 0a 20 20 20 20 20 20 20 20 20 20 20  efox.           
20a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
20b0: 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20     },.          
20c0: 20 20 6f 6e 48 69 64 65 3a 20 66 75 6e 63 74 69    onHide: functi
20d0: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20  on () {.        
20e0: 20 20 20 20 20 20 20 20 78 47 43 50 61 6e 65 6c          xGCPanel
20f0: 2e 70 6f 72 74 2e 65 6d 69 74 28 22 63 6c 65 61  .port.emit("clea
2100: 72 45 72 72 6f 72 73 22 29 3b 0a 20 20 20 20 20  rErrors");.     
2110: 20 20 20 20 20 20 20 20 20 20 20 78 47 43 50 61             xGCPa
2120: 6e 65 6c 2e 72 65 73 69 7a 65 28 73 70 2e 70 72  nel.resize(sp.pr
2130: 65 66 73 5b 22 6e 47 43 50 61 6e 65 6c 57 69 64  efs["nGCPanelWid
2140: 74 68 22 5d 2c 20 73 70 2e 70 72 65 66 73 5b 22  th"], sp.prefs["
2150: 6e 47 43 50 61 6e 65 6c 48 65 69 67 68 74 22 5d  nGCPanelHeight"]
2160: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
2170: 20 20 20 78 4d 61 69 6e 42 75 74 74 6f 6e 2e 73     xMainButton.s
2180: 74 61 74 65 28 22 77 69 6e 64 6f 77 22 2c 20 7b  tate("window", {
2190: 63 68 65 63 6b 65 64 3a 20 66 61 6c 73 65 7d 29  checked: false})
21a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  ;.            },
21b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 63  .            //c
21c0: 6f 6e 74 65 78 74 4d 65 6e 75 3a 20 74 72 75 65  ontextMenu: true
21d0: 2c 20 2f 2a 20 75 67 6c 79 2c 20 6c 6f 6f 6b 20  , /* ugly, look 
21e0: 66 6f 72 20 63 6f 6e 74 65 78 74 4d 65 6e 75 43  for contextMenuC
21f0: 6f 6e 74 65 6e 74 44 61 74 61 20 2a 2f 0a 20 20  ontentData */.  
2200: 20 20 20 20 20 20 20 20 20 20 70 6f 73 69 74 69            positi
2210: 6f 6e 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20  on: {.          
2220: 20 20 20 20 20 20 72 69 67 68 74 3a 20 30 2c 0a        right: 0,.
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2240: 62 6f 74 74 6f 6d 3a 20 30 0a 20 20 20 20 20 20  bottom: 0.      
2250: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20        },.       
2260: 20 20 20 20 20 77 69 64 74 68 3a 20 73 70 2e 70       width: sp.p
2270: 72 65 66 73 5b 22 6e 47 43 50 61 6e 65 6c 57 69  refs["nGCPanelWi
2280: 64 74 68 22 5d 2c 0a 20 20 20 20 20 20 20 20 20  dth"],.         
2290: 20 20 20 68 65 69 67 68 74 3a 20 73 70 2e 70 72     height: sp.pr
22a0: 65 66 73 5b 22 6e 47 43 50 61 6e 65 6c 48 65 69  efs["nGCPanelHei
22b0: 67 68 74 22 5d 0a 20 20 20 20 20 20 20 20 7d 29  ght"].        })
22c0: 3b 0a 0a 20 20 20 20 20 20 20 20 63 6f 72 65 2e  ;..        core.
22d0: 67 65 74 41 63 74 69 76 65 56 69 65 77 28 78 47  getActiveView(xG
22e0: 43 50 61 6e 65 6c 29 2e 73 65 74 41 74 74 72 69  CPanel).setAttri
22f0: 62 75 74 65 28 22 6e 6f 61 75 74 6f 68 69 64 65  bute("noautohide
2300: 22 2c 20 74 72 75 65 29 3b 0a 20 20 20 20 20 20  ", true);.      
2310: 20 20 2f 2f 63 6f 72 65 2e 67 65 74 41 63 74 69    //core.getActi
2320: 76 65 56 69 65 77 28 78 47 43 50 61 6e 65 6c 29  veView(xGCPanel)
2330: 2e 73 65 74 41 74 74 72 69 62 75 74 65 28 22 62  .setAttribute("b
2340: 61 63 6b 64 72 61 67 22 2c 20 74 72 75 65 29 3b  ackdrag", true);
2350: 0a 20 20 20 20 20 20 20 20 2f 2f 63 6f 72 65 2e  .        //core.
2360: 67 65 74 41 63 74 69 76 65 56 69 65 77 28 78 47  getActiveView(xG
2370: 43 50 61 6e 65 6c 29 2e 73 65 74 41 74 74 72 69  CPanel).setAttri
2380: 62 75 74 65 28 22 6c 65 76 65 6c 22 2c 20 27 66  bute("level", 'f
2390: 6c 6f 61 74 69 6e 67 27 29 3b 0a 0a 20 20 20 20  loating');..    
23a0: 20 20 20 20 78 47 43 50 61 6e 65 6c 2e 70 6f 72      xGCPanel.por
23b0: 74 2e 6f 6e 28 22 63 6c 6f 73 65 50 61 6e 65 6c  t.on("closePanel
23c0: 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  ", function () {
23d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
23e0: 28 78 41 63 74 69 76 65 57 6f 72 6b 65 72 29 20  (xActiveWorker) 
23f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2400: 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72 2e    xActiveWorker.
2410: 70 6f 72 74 2e 65 6d 69 74 28 22 63 6c 65 61 72  port.emit("clear
2420: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
2430: 20 20 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65      xActiveWorke
2440: 72 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  r = null;.      
2450: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2460: 20 20 20 20 78 47 43 50 61 6e 65 6c 2e 68 69 64      xGCPanel.hid
2470: 65 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 29 3b  e();.        });
2480: 0a 0a 20 20 20 20 20 20 20 20 78 47 43 50 61 6e  ..        xGCPan
2490: 65 6c 2e 70 6f 72 74 2e 6f 6e 28 22 6f 70 65 6e  el.port.on("open
24a0: 55 52 4c 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28  URL", function (
24b0: 73 55 52 4c 29 20 7b 0a 20 20 20 20 20 20 20 20  sURL) {.        
24c0: 20 20 20 20 74 61 62 73 2e 6f 70 65 6e 28 73 55      tabs.open(sU
24d0: 52 4c 29 3b 0a 20 20 20 20 20 20 20 20 7d 29 3b  RL);.        });
24e0: 0a 0a 20 20 20 20 20 20 20 20 78 47 43 50 61 6e  ..        xGCPan
24f0: 65 6c 2e 70 6f 72 74 2e 6f 6e 28 22 63 6f 72 72  el.port.on("corr
2500: 65 63 74 69 6f 6e 22 2c 20 66 75 6e 63 74 69 6f  ection", functio
2510: 6e 20 28 73 49 64 50 61 72 61 67 72 61 70 68 2c  n (sIdParagraph,
2520: 20 73 54 65 78 74 29 20 7b 0a 20 20 20 20 20 20   sText) {.      
2530: 20 20 20 20 20 20 69 66 20 28 78 41 63 74 69 76        if (xActiv
2540: 65 57 6f 72 6b 65 72 29 20 7b 0a 20 20 20 20 20  eWorker) {.     
2550: 20 20 20 20 20 20 20 20 20 20 20 78 41 63 74 69             xActi
2560: 76 65 57 6f 72 6b 65 72 2e 70 6f 72 74 2e 65 6d  veWorker.port.em
2570: 69 74 28 22 73 65 74 50 61 72 61 67 72 61 70 68  it("setParagraph
2580: 22 2c 20 70 61 72 73 65 49 6e 74 28 73 49 64 50  ", parseInt(sIdP
2590: 61 72 61 67 72 61 70 68 29 2c 20 73 54 65 78 74  aragraph), sText
25a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
25b0: 20 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72     xActiveWorker
25c0: 2e 70 6f 72 74 2e 65 6d 69 74 28 22 72 65 77 72  .port.emit("rewr
25d0: 69 74 65 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ite");.         
25e0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 29 3b     }.        });
25f0: 0a 0a 20 20 20 20 20 20 20 20 78 47 43 50 61 6e  ..        xGCPan
2600: 65 6c 2e 70 6f 72 74 2e 6f 6e 28 22 6d 6f 64 69  el.port.on("modi
2610: 66 79 41 6e 64 43 68 65 63 6b 22 2c 20 66 75 6e  fyAndCheck", fun
2620: 63 74 69 6f 6e 20 28 73 49 64 50 61 72 61 67 72  ction (sIdParagr
2630: 61 70 68 2c 20 73 54 65 78 74 29 20 7b 0a 20 20  aph, sText) {.  
2640: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 68            if (ch
2650: 65 63 6b 43 6f 6e 73 69 73 74 65 6e 63 79 28 73  eckConsistency(s
2660: 54 65 78 74 29 29 20 7b 0a 20 20 20 20 20 20 20  Text)) {.       
2670: 20 20 20 20 20 20 20 20 20 69 66 20 28 78 41 63           if (xAc
2680: 74 69 76 65 57 6f 72 6b 65 72 29 20 7b 0a 20 20  tiveWorker) {.  
2690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a0: 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72 2e    xActiveWorker.
26b0: 70 6f 72 74 2e 65 6d 69 74 28 22 73 65 74 50 61  port.emit("setPa
26c0: 72 61 67 72 61 70 68 22 2c 20 70 61 72 73 65 49  ragraph", parseI
26d0: 6e 74 28 73 49 64 50 61 72 61 67 72 61 70 68 29  nt(sIdParagraph)
26e0: 2c 20 73 54 65 78 74 29 3b 0a 20 20 20 20 20 20  , sText);.      
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 41                xA
2700: 63 74 69 76 65 57 6f 72 6b 65 72 2e 70 6f 72 74  ctiveWorker.port
2710: 2e 65 6d 69 74 28 22 72 65 77 72 69 74 65 22 29  .emit("rewrite")
2720: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
2730: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
2740: 20 20 20 20 63 68 65 63 6b 41 6e 64 53 65 6e 64      checkAndSend
2750: 54 6f 50 61 6e 65 6c 28 73 49 64 50 61 72 61 67  ToPanel(sIdParag
2760: 72 61 70 68 2c 20 73 54 65 78 74 29 3b 0a 20 20  raph, sText);.  
2770: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
2780: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2790: 20 20 20 69 66 20 28 78 41 63 74 69 76 65 57 6f     if (xActiveWo
27a0: 72 6b 65 72 29 20 7b 0a 20 20 20 20 20 20 20 20  rker) {.        
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 78 41 63 74              xAct
27c0: 69 76 65 57 6f 72 6b 65 72 2e 70 6f 72 74 2e 65  iveWorker.port.e
27d0: 6d 69 74 28 22 67 65 74 50 61 72 61 67 72 61 70  mit("getParagrap
27e0: 68 22 2c 20 70 61 72 73 65 49 6e 74 28 73 49 64  h", parseInt(sId
27f0: 50 61 72 61 67 72 61 70 68 29 29 3b 0a 20 20 20  Paragraph));.   
2800: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
2820: 47 43 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69  GCPanel.port.emi
2830: 74 28 22 73 68 6f 77 4d 65 73 73 61 67 65 22 2c  t("showMessage",
2840: 20 5f 28 22 65 64 69 74 5f 65 72 72 6f 72 22 29   _("edit_error")
2850: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
2860: 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 0a 20 20  .        });..  
2870: 20 20 20 20 20 20 78 47 43 50 61 6e 65 6c 2e 70        xGCPanel.p
2880: 6f 72 74 2e 6f 6e 28 22 67 65 74 53 75 67 67 65  ort.on("getSugge
2890: 73 74 69 6f 6e 73 46 6f 72 54 6f 22 2c 20 66 75  stionsForTo", fu
28a0: 6e 63 74 69 6f 6e 20 28 73 57 6f 72 64 2c 20 73  nction (sWord, s
28b0: 54 6f 6f 6c 74 69 70 49 64 29 20 7b 0a 20 20 20  TooltipId) {.   
28c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 44 69           if (bDi
28d0: 63 74 41 63 74 69 76 65 29 20 7b 0a 20 20 20 20  ctActive) {.    
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
28f0: 6c 53 75 67 67 20 3d 20 73 63 65 2e 73 75 67 67  lSugg = sce.sugg
2900: 65 73 74 28 73 57 6f 72 64 29 3b 0a 20 20 20 20  est(sWord);.    
2910: 20 20 20 20 20 20 20 20 20 20 20 20 78 47 43 50              xGCP
2920: 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22  anel.port.emit("
2930: 73 75 67 67 65 73 74 69 6f 6e 73 46 6f 72 22 2c  suggestionsFor",
2940: 20 73 57 6f 72 64 2c 20 6c 53 75 67 67 2e 6a 6f   sWord, lSugg.jo
2950: 69 6e 28 27 7c 27 29 2c 20 73 54 6f 6f 6c 74 69  in('|'), sToolti
2960: 70 49 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20  pId);.          
2970: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
2980: 20 20 20 20 20 20 20 20 20 20 20 78 47 43 50 61             xGCPa
2990: 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 73  nel.port.emit("s
29a0: 75 67 67 65 73 74 69 6f 6e 73 46 6f 72 22 2c 20  uggestionsFor", 
29b0: 73 57 6f 72 64 2c 20 22 23 20 45 72 72 65 75 72  sWord, "# Erreur
29c0: 20 3a 20 64 69 63 74 69 6f 6e 6e 61 69 72 65 20   : dictionnaire 
29d0: 6f 72 74 68 6f 67 72 61 70 68 69 71 75 65 20 69  orthographique i
29e0: 6e 74 72 6f 75 76 61 62 6c 65 2e 22 2c 20 73 54  ntrouvable.", sT
29f0: 6f 6f 6c 74 69 70 49 64 29 3b 0a 20 20 20 20 20  ooltipId);.     
2a00: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2a10: 20 7d 29 3b 0a 0a 20 20 20 20 20 20 20 20 78 47   });..        xG
2a20: 43 50 61 6e 65 6c 2e 70 6f 72 74 2e 6f 6e 28 22  CPanel.port.on("
2a30: 63 6f 70 79 54 6f 43 6c 69 70 62 6f 61 72 64 22  copyToClipboard"
2a40: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 73 54 65 78  , function (sTex
2a50: 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  t) {.           
2a60: 20 63 6c 69 70 62 6f 61 72 64 2e 73 65 74 28 73   clipboard.set(s
2a70: 54 65 78 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  Text);.        }
2a80: 29 3b 0a 0a 20 20 20 20 20 20 20 20 78 47 43 50  );..        xGCP
2a90: 61 6e 65 6c 2e 70 6f 72 74 2e 6f 6e 28 22 72 65  anel.port.on("re
2aa0: 73 69 7a 65 22 2c 20 66 75 6e 63 74 69 6f 6e 28  size", function(
2ab0: 73 43 6d 64 2c 20 6e 29 20 7b 0a 20 20 20 20 20  sCmd, n) {.     
2ac0: 20 20 20 20 20 20 20 69 66 20 28 73 43 6d 64 20         if (sCmd 
2ad0: 3d 3d 20 22 65 78 70 61 6e 64 22 29 20 7b 0a 20  == "expand") {. 
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
2af0: 47 43 50 61 6e 65 6c 2e 72 65 73 69 7a 65 28 73  GCPanel.resize(s
2b00: 70 2e 70 72 65 66 73 5b 22 6e 47 43 50 61 6e 65  p.prefs["nGCPane
2b10: 6c 57 69 64 74 68 22 5d 2c 20 73 70 2e 70 72 65  lWidth"], sp.pre
2b20: 66 73 5b 22 6e 47 43 50 61 6e 65 6c 48 65 69 67  fs["nGCPanelHeig
2b30: 68 74 22 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  ht"]);.         
2b40: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 73 43     } else if (sC
2b50: 6d 64 20 3d 3d 20 22 72 65 64 75 63 65 22 29 20  md == "reduce") 
2b60: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2b70: 20 20 78 47 43 50 61 6e 65 6c 2e 72 65 73 69 7a    xGCPanel.resiz
2b80: 65 28 32 38 30 2c 20 35 30 29 3b 0a 20 20 20 20  e(280, 50);.    
2b90: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
2ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb0: 20 73 77 69 74 63 68 20 28 73 43 6d 64 29 20 7b   switch (sCmd) {
2bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd0: 20 20 20 20 20 63 61 73 65 20 22 72 65 73 69 7a       case "resiz
2be0: 65 5f 68 5f 62 69 67 67 65 72 22 3a 20 20 69 66  e_h_bigger":  if
2bf0: 20 28 73 70 2e 70 72 65 66 73 5b 22 6e 47 43 50   (sp.prefs["nGCP
2c00: 61 6e 65 6c 48 65 69 67 68 74 22 5d 20 3c 20 31  anelHeight"] < 1
2c10: 32 30 30 29 20 7b 20 73 70 2e 70 72 65 66 73 5b  200) { sp.prefs[
2c20: 22 6e 47 43 50 61 6e 65 6c 48 65 69 67 68 74 22  "nGCPanelHeight"
2c30: 5d 20 2b 3d 20 6e 3b 20 7d 20 62 72 65 61 6b 3b  ] += n; } break;
2c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c50: 20 20 20 20 20 63 61 73 65 20 22 72 65 73 69 7a       case "resiz
2c60: 65 5f 68 5f 73 6d 61 6c 6c 65 72 22 3a 20 69 66  e_h_smaller": if
2c70: 20 28 73 70 2e 70 72 65 66 73 5b 22 6e 47 43 50   (sp.prefs["nGCP
2c80: 61 6e 65 6c 48 65 69 67 68 74 22 5d 20 3e 20 32  anelHeight"] > 2
2c90: 35 30 29 20 20 7b 20 73 70 2e 70 72 65 66 73 5b  50)  { sp.prefs[
2ca0: 22 6e 47 43 50 61 6e 65 6c 48 65 69 67 68 74 22  "nGCPanelHeight"
2cb0: 5d 20 2d 3d 20 6e 20 7d 20 62 72 65 61 6b 3b 0a  ] -= n } break;.
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd0: 20 20 20 20 63 61 73 65 20 22 72 65 73 69 7a 65      case "resize
2ce0: 5f 77 5f 62 69 67 67 65 72 22 3a 20 20 69 66 20  _w_bigger":  if 
2cf0: 28 73 70 2e 70 72 65 66 73 5b 22 6e 47 43 50 61  (sp.prefs["nGCPa
2d00: 6e 65 6c 57 69 64 74 68 22 5d 20 20 3c 20 31 32  nelWidth"]  < 12
2d10: 30 30 29 20 7b 20 73 70 2e 70 72 65 66 73 5b 22  00) { sp.prefs["
2d20: 6e 47 43 50 61 6e 65 6c 57 69 64 74 68 22 5d 20  nGCPanelWidth"] 
2d30: 2b 3d 20 6e 3b 20 7d 20 62 72 65 61 6b 3b 0a 20  += n; } break;. 
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d50: 20 20 20 63 61 73 65 20 22 72 65 73 69 7a 65 5f     case "resize_
2d60: 77 5f 73 6d 61 6c 6c 65 72 22 3a 20 69 66 20 28  w_smaller": if (
2d70: 73 70 2e 70 72 65 66 73 5b 22 6e 47 43 50 61 6e  sp.prefs["nGCPan
2d80: 65 6c 57 69 64 74 68 22 5d 20 20 3e 20 34 30 30  elWidth"]  > 400
2d90: 29 20 20 7b 20 73 70 2e 70 72 65 66 73 5b 22 6e  )  { sp.prefs["n
2da0: 47 43 50 61 6e 65 6c 57 69 64 74 68 22 5d 20 2d  GCPanelWidth"] -
2db0: 3d 20 6e 3b 20 7d 20 62 72 65 61 6b 3b 0a 20 20  = n; } break;.  
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de0: 78 47 43 50 61 6e 65 6c 2e 72 65 73 69 7a 65 28  xGCPanel.resize(
2df0: 73 70 2e 70 72 65 66 73 5b 22 6e 47 43 50 61 6e  sp.prefs["nGCPan
2e00: 65 6c 57 69 64 74 68 22 5d 2c 20 73 70 2e 70 72  elWidth"], sp.pr
2e10: 65 66 73 5b 22 6e 47 43 50 61 6e 65 6c 48 65 69  efs["nGCPanelHei
2e20: 67 68 74 22 5d 29 3b 0a 20 20 20 20 20 20 20 20  ght"]);.        
2e30: 20 20 20 20 20 20 20 20 78 47 43 50 61 6e 65 6c          xGCPanel
2e40: 2e 70 6f 72 74 2e 65 6d 69 74 28 22 73 65 74 50  .port.emit("setP
2e50: 61 6e 65 6c 57 69 64 74 68 22 2c 20 73 70 2e 70  anelWidth", sp.p
2e60: 72 65 66 73 5b 22 6e 47 43 50 61 6e 65 6c 57 69  refs["nGCPanelWi
2e70: 64 74 68 22 5d 29 3b 0a 20 20 20 20 20 20 20 20  dth"]);.        
2e80: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 29      }.        })
2e90: 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 66 75 6e 63 74  ;.    }.}..funct
2ea0: 69 6f 6e 20 63 68 65 63 6b 43 6f 6e 73 69 73 74  ion checkConsist
2eb0: 65 6e 63 79 20 28 73 54 65 78 74 29 20 7b 0a 20  ency (sText) {. 
2ec0: 20 20 20 69 66 20 28 73 54 65 78 74 2e 69 6e 63     if (sText.inc
2ed0: 6c 75 64 65 73 28 22 3c 21 2d 2d 20 65 72 72 5f  ludes("<!-- err_
2ee0: 65 6e 64 20 2d 2d 3e 22 29 20 7c 7c 20 73 54 65  end -->") || sTe
2ef0: 78 74 2e 69 6e 63 6c 75 64 65 73 28 27 3c 73 70  xt.includes('<sp
2f00: 61 6e 20 69 64 3d 22 74 6f 6f 6c 74 69 70 27 29  an id="tooltip')
2f10: 20 7c 7c 20 73 54 65 78 74 2e 69 6e 63 6c 75 64   || sText.includ
2f20: 65 73 28 27 3c 75 20 69 64 3d 22 65 72 72 27 29  es('<u id="err')
2f30: 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75  ) {.        retu
2f40: 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d 0a  rn false;.    }.
2f50: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2f60: 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 63 68 65  .}..function che
2f70: 63 6b 41 6e 64 53 65 6e 64 54 6f 50 61 6e 65 6c  ckAndSendToPanel
2f80: 20 28 73 49 64 50 61 72 61 67 72 61 70 68 2c 20   (sIdParagraph, 
2f90: 73 54 65 78 74 29 20 7b 0a 20 20 20 20 6c 65 74  sText) {.    let
2fa0: 20 78 50 72 6f 6d 69 73 65 20 3d 20 78 47 43 45   xPromise = xGCE
2fb0: 57 6f 72 6b 65 72 2e 70 6f 73 74 28 27 70 61 72  Worker.post('par
2fc0: 73 65 41 6e 64 53 70 65 6c 6c 63 68 65 63 6b 27  seAndSpellcheck'
2fd0: 2c 20 5b 73 54 65 78 74 2c 20 22 46 52 22 2c 20  , [sText, "FR", 
2fe0: 66 61 6c 73 65 2c 20 66 61 6c 73 65 5d 29 3b 0a  false, false]);.
2ff0: 20 20 20 20 78 50 72 6f 6d 69 73 65 2e 74 68 65      xPromise.the
3000: 6e 28 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74  n(.        funct
3010: 69 6f 6e 20 28 61 56 61 6c 29 20 7b 0a 20 20 20  ion (aVal) {.   
3020: 20 20 20 20 20 20 20 20 20 78 47 43 50 61 6e 65           xGCPane
3030: 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 72 65 66  l.port.emit("ref
3040: 72 65 73 68 50 61 72 61 67 72 61 70 68 22 2c 20  reshParagraph", 
3050: 73 54 65 78 74 2c 20 73 49 64 50 61 72 61 67 72  sText, sIdParagr
3060: 61 70 68 2c 20 61 56 61 6c 29 3b 0a 20 20 20 20  aph, aVal);.    
3070: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 66      },.        f
3080: 75 6e 63 74 69 6f 6e 20 28 61 52 65 61 73 6f 6e  unction (aReason
3090: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
30a0: 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 27 50  console.error('P
30b0: 72 6f 6d 69 73 65 20 72 65 6a 65 63 74 65 64 20  romise rejected 
30c0: 2d 20 27 2c 20 61 52 65 61 73 6f 6e 29 3b 0a 20  - ', aReason);. 
30d0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 29 2e 63         }.    ).c
30e0: 61 74 63 68 28 0a 20 20 20 20 20 20 20 20 66 75  atch(.        fu
30f0: 6e 63 74 69 6f 6e 20 28 61 43 61 75 67 68 74 29  nction (aCaught)
3100: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63   {.            c
3110: 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 27 50 72  onsole.error('Pr
3120: 6f 6d 69 73 65 20 45 72 72 6f 72 20 2d 20 27 2c  omise Error - ',
3130: 20 61 43 61 75 67 68 74 29 3b 0a 20 20 20 20 20   aCaught);.     
3140: 20 20 20 7d 0a 20 20 20 20 29 3b 0a 7d 0a 0a 63     }.    );.}..c
3150: 6f 6e 73 74 20 78 48 6f 74 6b 65 79 47 72 61 6d  onst xHotkeyGram
3160: 6d 61 72 43 68 65 63 6b 65 72 20 3d 20 68 6f 74  marChecker = hot
3170: 6b 65 79 73 2e 48 6f 74 6b 65 79 28 7b 0a 20 20  keys.Hotkey({.  
3180: 20 20 63 6f 6d 62 6f 3a 20 22 61 63 63 65 6c 2d    combo: "accel-
3190: 73 68 69 66 74 2d 66 37 22 2c 0a 20 20 20 20 6f  shift-f7",.    o
31a0: 6e 50 72 65 73 73 3a 20 66 75 6e 63 74 69 6f 6e  nPress: function
31b0: 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 63 72   () {.        cr
31c0: 65 61 74 65 47 43 50 61 6e 65 6c 28 29 3b 0a 20  eateGCPanel();. 
31d0: 20 20 20 20 20 20 20 78 41 63 74 69 76 65 57 6f         xActiveWo
31e0: 72 6b 65 72 20 3d 20 74 61 62 73 2e 61 63 74 69  rker = tabs.acti
31f0: 76 65 54 61 62 2e 61 74 74 61 63 68 28 7b 0a 20  veTab.attach({. 
3200: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 65             conte
3210: 6e 74 53 63 72 69 70 74 46 69 6c 65 3a 20 73 65  ntScriptFile: se
3220: 6c 66 2e 64 61 74 61 2e 75 72 6c 28 22 72 65 70  lf.data.url("rep
3230: 6c 61 63 65 5f 74 65 78 74 2e 6a 73 22 29 0a 20  lace_text.js"). 
3240: 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20         });.     
3250: 20 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72     xActiveWorker
3260: 2e 70 6f 72 74 2e 65 6d 69 74 28 22 73 65 74 41  .port.emit("setA
3270: 63 74 69 76 65 45 6c 65 6d 65 6e 74 22 2c 20 74  ctiveElement", t
3280: 72 75 65 29 3b 0a 20 20 20 20 20 20 20 20 78 41  rue);.        xA
3290: 63 74 69 76 65 57 6f 72 6b 65 72 2e 70 6f 72 74  ctiveWorker.port
32a0: 2e 6f 6e 28 22 79 65 73 54 68 69 73 49 73 54 65  .on("yesThisIsTe
32b0: 78 74 5a 6f 6e 65 22 2c 20 66 75 6e 63 74 69 6f  xtZone", functio
32c0: 6e 20 28 73 54 65 78 74 29 20 7b 0a 20 20 20 20  n (sText) {.    
32d0: 20 20 20 20 20 20 20 20 69 66 20 28 21 78 47 43          if (!xGC
32e0: 50 61 6e 65 6c 2e 69 73 53 68 6f 77 69 6e 67 29  Panel.isShowing)
32f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
3300: 20 20 20 78 47 43 50 61 6e 65 6c 2e 73 68 6f 77     xGCPanel.show
3310: 28 7b 70 6f 73 69 74 69 6f 6e 3a 20 78 4d 61 69  ({position: xMai
3320: 6e 42 75 74 74 6f 6e 7d 29 3b 0a 20 20 20 20 20  nButton});.     
3330: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3340: 20 20 20 20 20 73 65 6e 64 54 65 78 74 54 6f 50       sendTextToP
3350: 61 6e 65 6c 28 73 54 65 78 74 29 3b 0a 20 20 20  anel(sText);.   
3360: 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20       });.       
3370: 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72 2e 70   xActiveWorker.p
3380: 6f 72 74 2e 6f 6e 28 22 65 6d 69 74 50 61 72 61  ort.on("emitPara
3390: 67 72 61 70 68 22 2c 20 66 75 6e 63 74 69 6f 6e  graph", function
33a0: 20 28 69 50 61 72 61 67 72 61 70 68 2c 20 73 50   (iParagraph, sP
33b0: 61 72 61 67 72 61 70 68 29 20 7b 0a 20 20 20 20  aragraph) {.    
33c0: 20 20 20 20 20 20 20 20 63 68 65 63 6b 41 6e 64          checkAnd
33d0: 53 65 6e 64 54 6f 50 61 6e 65 6c 28 69 50 61 72  SendToPanel(iPar
33e0: 61 67 72 61 70 68 2e 74 6f 53 74 72 69 6e 67 28  agraph.toString(
33f0: 29 2c 20 73 50 61 72 61 67 72 61 70 68 29 3b 0a  ), sParagraph);.
3400: 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20          });.    
3410: 20 20 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65      xActiveWorke
3420: 72 2e 70 6f 72 74 2e 6f 6e 28 22 63 6c 6f 73 65  r.port.on("close
3430: 47 43 50 61 6e 65 6c 22 2c 20 66 75 6e 63 74 69  GCPanel", functi
3440: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20  on() {.         
3450: 20 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72     xActiveWorker
3460: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20   = null;.       
3470: 20 20 20 20 20 78 47 43 50 61 6e 65 6c 2e 68 69       xGCPanel.hi
3480: 64 65 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 29  de();.        })
3490: 3b 0a 20 20 20 20 7d 0a 7d 29 3b 0a 0a 63 6f 6e  ;.    }.});..con
34a0: 73 74 20 78 48 6f 74 6b 65 79 47 43 20 3d 20 68  st xHotkeyGC = h
34b0: 6f 74 6b 65 79 73 2e 48 6f 74 6b 65 79 28 7b 0a  otkeys.Hotkey({.
34c0: 20 20 20 20 2f 2f 20 51 75 69 63 6b 20 74 65 73      // Quick tes
34d0: 74 0a 20 20 20 20 63 6f 6d 62 6f 3a 20 22 61 63  t.    combo: "ac
34e0: 63 65 6c 2d 73 68 69 66 74 2d 66 31 31 22 2c 0a  cel-shift-f11",.
34f0: 20 20 20 20 6f 6e 50 72 65 73 73 3a 20 66 75 6e      onPress: fun
3500: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20  ction () {.     
3510: 20 20 20 63 72 65 61 74 65 47 43 50 61 6e 65 6c     createGCPanel
3520: 28 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  ();.        if (
3530: 21 78 47 43 50 61 6e 65 6c 2e 69 73 53 68 6f 77  !xGCPanel.isShow
3540: 69 6e 67 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ing) {.         
3550: 20 20 20 78 47 43 50 61 6e 65 6c 2e 73 68 6f 77     xGCPanel.show
3560: 28 7b 70 6f 73 69 74 69 6f 6e 3a 20 78 4d 61 69  ({position: xMai
3570: 6e 42 75 74 74 6f 6e 7d 29 3b 0a 20 20 20 20 20  nButton});.     
3580: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 78 41 63     }.        xAc
3590: 74 69 76 65 57 6f 72 6b 65 72 20 3d 20 6e 75 6c  tiveWorker = nul
35a0: 6c 3b 0a 20 20 20 20 20 20 20 20 73 65 6e 64 54  l;.        sendT
35b0: 65 78 74 54 6f 50 61 6e 65 6c 28 22 4a 65 20 63  extToPanel("Je c
35c0: 6f 6e 6e 61 69 74 20 6d 61 20 3c 69 3e 64 65 73  onnait ma <i>des
35d0: 74 69 6e c3 a9 65 73 3c 2f 69 3e 2e 20 55 6e 20  tin..es</i>. Un 
35e0: 6a 6f 75 72 20 73 27 61 74 74 61 63 68 65 72 61  jour s'attachera
35f0: 20 c3 a0 20 6d 6f 6e 20 6e 6f 6d 20 6c 65 20 73   .. mon nom le s
3600: 6f 75 76 65 6e 69 72 20 64 65 20 71 75 65 6c 71  ouvenir de quelq
3610: 75 65 20 63 68 6f 73 65 20 64 65 20 66 6f 72 6d  ue chose de form
3620: 69 64 61 62 6c 65 2c 20 22 0a 20 20 20 20 20 20  idable, ".      
3630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3640: 2b 20 22 2d 20 6c 65 20 73 6f 75 76 65 6e 69 72  + "- le souvenir
3650: 20 64 e2 80 99 75 6e 65 20 63 72 69 73 65 20 63   d...une crise c
3660: 6f 6d 6d 65 20 69 6c 20 6e 27 79 20 65 6e 20 65  omme il n'y en e
3670: 75 74 20 6a 61 6d 61 69 73 73 20 73 75 72 20 74  ut jamaiss sur t
3680: 65 72 72 65 2c 20 6c 65 20 73 6f 75 76 65 6e 69  erre, le souveni
3690: 72 20 64 65 20 6c 61 20 70 6c 75 73 20 70 72 6f  r de la plus pro
36a0: 66 6f 6e 64 65 20 63 6f 6c 6c 69 73 69 6f 6e 20  fonde collision 
36b0: 64 65 73 20 63 6f 6e 73 63 69 65 6e 63 65 73 2c  des consciences,
36c0: 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
36d0: 20 20 20 20 20 20 20 20 20 2b 20 22 6c 65 20 73           + "le s
36e0: 6f 75 76 65 6e 69 72 73 20 64 e2 80 99 75 6e 20  ouvenirs d...un 
36f0: 6a 75 67 65 6d 65 6e 74 20 70 72 6f 6e 6f 6e 63  jugement prononc
3700: c3 a9 20 63 6f 6e 74 72 65 20 74 6f 75 74 20 74  .. contre tout t
3710: 6f 75 74 20 63 65 20 71 75 69 20 6a 75 73 71 75  out ce qui jusqu
3720: e2 80 99 c3 a0 20 70 72 c3 a9 73 65 6e 74 20 c3  ..... pr..sent .
3730: a0 20 c3 a9 74 c3 a9 20 63 72 75 2c 20 65 78 69  . ..t.. cru, exi
3740: 67 c3 a9 2c 20 73 61 6e 63 74 69 66 69 c3 a9 2e  g.., sanctifi...
3750: 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
3760: 20 20 20 20 20 20 20 20 20 2b 20 22 4a 65 20 6e           + "Je n
3770: 65 20 73 75 69 73 20 70 61 73 20 75 6e 20 68 6f  e suis pas un ho
3780: 6d 6d 65 2c 20 6a 65 20 73 75 69 73 20 64 65 20  mme, je suis de 
3790: 6c 61 20 64 79 6e 61 6d 69 74 65 2e 20 45 74 2c  la dynamite. Et,
37a0: 20 61 76 65 63 20 63 65 6c 61 2c 20 69 6c 20 6e   avec cela, il n
37b0: e2 80 99 79 20 61 20 65 6e 20 6d 6f 69 20 72 69  ...y a en moi ri
37c0: 65 6e 20 64 e2 80 99 75 6e 20 66 6f 6e 64 61 74  en d...un fondat
37d0: 65 75 72 20 64 65 20 72 65 6c 69 67 69 6f 6e 2e  eur de religion.
37e0: 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
37f0: 20 20 20 20 20 20 20 20 20 2b 20 22 4c 65 73 20           + "Les 
3800: 72 65 6c 69 67 69 6f 6e 73 20 73 6f 6e 74 20 6c  religions sont l
3810: 65 73 20 61 66 66 61 69 72 65 73 20 64 65 20 6c  es affaires de l
3820: 61 20 70 6f 70 75 6c 61 63 65 2e 20 22 0a 20 20  a populace. ".  
3830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3840: 20 20 20 20 2b 20 22 4a e2 80 99 61 69 65 20 62      + "J...aie b
3850: 65 73 6f 69 6e 20 64 65 20 6d 65 20 6c 61 76 65  esoin de me lave
3860: 72 20 6c 65 73 20 6d 61 69 6e 73 2c 20 61 70 72  r les mains, apr
3870: c3 a8 73 20 61 76 6f 69 72 20 c3 a9 74 c3 a9 20  ..s avoir ..t.. 
3880: 65 6e 20 63 6f 6e 74 61 63 74 20 61 76 65 63 20  en contact avec 
3890: 64 65 73 20 68 6f 6d 6d 65 73 20 72 65 6c 69 67  des hommes relig
38a0: 69 65 75 78 2e 2e 2e 5c 6e 22 0a 20 20 20 20 20  ieux...\n".     
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38c0: 20 2b 20 22 56 6f 75 73 2c 20 6a 65 20 70 61 72   + "Vous, je par
38d0: 69 65 20 71 75 65 20 76 6f 75 73 20 6e e2 80 99  ie que vous n...
38e0: 61 70 70 72 69 c3 a9 63 69 65 7a 20 67 75 c3 a8  appri..ciez gu..
38f0: 72 65 20 6c 65 20 63 6f 6e 63 65 70 74 20 64 65  re le concept de
3900: 20 76 69 64 c3 a9 6f 70 72 6f 74 65 63 74 69 6f   vid..oprotectio
3910: 6e 2e 20 59 20 61 20 74 e2 80 99 69 6c 20 70 6f  n. Y a t...il po
3920: 75 72 74 61 6e 74 20 72 69 65 6e 20 64 65 20 70  urtant rien de p
3930: 6c 75 73 20 73 c3 a9 63 75 72 69 73 61 6e 74 20  lus s..curisant 
3940: 3f 22 29 3b 0a 20 20 20 20 7d 0a 7d 29 3b 0a 0a  ?");.    }.});..
3950: 61 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 20 73  async function s
3960: 65 6e 64 54 65 78 74 54 6f 50 61 6e 65 6c 20 28  endTextToPanel (
3970: 73 54 65 78 74 29 20 7b 0a 20 20 20 20 78 47 43  sText) {.    xGC
3980: 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28  Panel.port.emit(
3990: 22 63 6c 65 61 72 45 72 72 6f 72 73 22 29 3b 0a  "clearErrors");.
39a0: 20 20 20 20 78 47 43 50 61 6e 65 6c 2e 70 6f 72      xGCPanel.por
39b0: 74 2e 65 6d 69 74 28 22 73 74 61 72 74 22 29 3b  t.emit("start");
39c0: 0a 20 20 20 20 6c 6f 61 64 47 72 61 6d 6d 61 72  .    loadGrammar
39d0: 43 68 65 63 6b 65 72 28 29 3b 0a 20 20 20 20 6c  Checker();.    l
39e0: 65 74 20 69 50 61 72 61 67 72 61 70 68 20 3d 20  et iParagraph = 
39f0: 30 3b 20 2f 2f 20 69 6e 64 65 78 20 6f 66 20 70  0; // index of p
3a00: 61 72 61 67 72 61 70 68 73 2c 20 75 73 65 64 20  aragraphs, used 
3a10: 66 6f 72 20 69 64 65 6e 74 69 66 69 63 61 74 69  for identificati
3a20: 6f 6e 0a 20 20 20 20 6c 65 74 20 6e 50 61 72 61  on.    let nPara
3a30: 67 72 61 70 68 20 3d 20 30 3b 20 2f 2f 20 6e 6f  graph = 0; // no
3a40: 6e 20 65 6d 70 74 79 20 70 61 72 61 67 72 61 70  n empty paragrap
3a50: 68 73 0a 20 20 20 20 6c 65 74 20 73 52 65 73 20  hs.    let sRes 
3a60: 3d 20 22 22 3b 0a 20 20 20 20 74 72 79 20 7b 0a  = "";.    try {.
3a70: 20 20 20 20 20 20 20 20 73 54 65 78 74 20 3d 20          sText = 
3a80: 73 54 65 78 74 2e 6e 6f 72 6d 61 6c 69 7a 65 28  sText.normalize(
3a90: 22 4e 46 43 22 29 3b 20 2f 2f 20 72 65 6d 6f 76  "NFC"); // remov
3aa0: 65 20 63 6f 6d 62 69 6e 69 6e 67 20 64 69 61 63  e combining diac
3ab0: 72 69 74 69 63 73 0a 20 20 20 20 20 20 20 20 66  ritics.        f
3ac0: 6f 72 20 28 6c 65 74 20 73 50 61 72 61 67 72 61  or (let sParagra
3ad0: 70 68 20 6f 66 20 74 65 78 74 2e 67 65 74 50 61  ph of text.getPa
3ae0: 72 61 67 72 61 70 68 28 73 54 65 78 74 29 29 20  ragraph(sText)) 
3af0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
3b00: 20 28 73 50 61 72 61 67 72 61 70 68 2e 74 72 69   (sParagraph.tri
3b10: 6d 28 29 20 21 3d 3d 20 22 22 29 20 7b 0a 20 20  m() !== "") {.  
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 52                sR
3b30: 65 73 20 3d 20 61 77 61 69 74 20 78 47 43 45 57  es = await xGCEW
3b40: 6f 72 6b 65 72 2e 70 6f 73 74 28 27 70 61 72 73  orker.post('pars
3b50: 65 41 6e 64 53 70 65 6c 6c 63 68 65 63 6b 27 2c  eAndSpellcheck',
3b60: 20 5b 73 50 61 72 61 67 72 61 70 68 2c 20 22 46   [sParagraph, "F
3b70: 52 22 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  R", false, false
3b80: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
3b90: 20 20 20 20 78 47 43 50 61 6e 65 6c 2e 70 6f 72      xGCPanel.por
3ba0: 74 2e 65 6d 69 74 28 22 61 64 64 50 61 72 61 67  t.emit("addParag
3bb0: 72 61 70 68 22 2c 20 73 50 61 72 61 67 72 61 70  raph", sParagrap
3bc0: 68 2c 20 69 50 61 72 61 67 72 61 70 68 2c 20 73  h, iParagraph, s
3bd0: 52 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Res);.          
3be0: 20 20 20 20 20 20 6e 50 61 72 61 67 72 61 70 68        nParagraph
3bf0: 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20   += 1;.         
3c00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
3c10: 20 69 50 61 72 61 67 72 61 70 68 20 2b 3d 20 31   iParagraph += 1
3c20: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
3c30: 20 20 20 20 78 47 43 50 61 6e 65 6c 2e 70 6f 72      xGCPanel.por
3c40: 74 2e 65 6d 69 74 28 22 61 64 64 4d 65 73 73 61  t.emit("addMessa
3c50: 67 65 22 2c 20 27 6d 65 73 73 61 67 65 27 2c 20  ge", 'message', 
3c60: 5f 28 22 6e 75 6d 62 65 72 4f 66 50 61 72 61 67  _("numberOfParag
3c70: 72 61 70 68 73 22 29 20 2b 20 22 20 22 20 2b 20  raphs") + " " + 
3c80: 6e 50 61 72 61 67 72 61 70 68 29 3b 0a 20 20 20  nParagraph);.   
3c90: 20 7d 0a 20 20 20 20 63 61 74 63 68 20 28 65 29   }.    catch (e)
3ca0: 20 7b 0a 20 20 20 20 20 20 20 20 78 47 43 50 61   {.        xGCPa
3cb0: 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 61  nel.port.emit("a
3cc0: 64 64 4d 65 73 73 61 67 65 22 2c 20 27 62 75 67  ddMessage", 'bug
3cd0: 27 2c 20 65 2e 6d 65 73 73 61 67 65 29 3b 0a 20  ', e.message);. 
3ce0: 20 20 20 7d 0a 20 20 20 20 78 47 43 50 61 6e 65     }.    xGCPane
3cf0: 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 65 6e 64  l.port.emit("end
3d00: 22 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 20 20 20 20 54  ");.}.../*.    T
3d10: 65 78 74 20 46 6f 72 6d 61 74 74 65 72 0a 2a 2f  ext Formatter.*/
3d20: 0a 0a 6c 65 74 20 78 54 46 50 61 6e 65 6c 20 3d  ..let xTFPanel =
3d30: 20 6e 75 6c 6c 3b 0a 0a 66 75 6e 63 74 69 6f 6e   null;..function
3d40: 20 63 72 65 61 74 65 54 46 50 61 6e 65 6c 20 28   createTFPanel (
3d50: 29 20 7b 0a 20 20 20 20 69 66 20 28 78 54 46 50  ) {.    if (xTFP
3d60: 61 6e 65 6c 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b  anel === null) {
3d70: 0a 20 20 20 20 20 20 20 20 78 54 46 50 61 6e 65  .        xTFPane
3d80: 6c 20 3d 20 70 61 6e 65 6c 2e 50 61 6e 65 6c 28  l = panel.Panel(
3d90: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  {.            co
3da0: 6e 74 65 6e 74 55 52 4c 3a 20 73 65 6c 66 2e 64  ntentURL: self.d
3db0: 61 74 61 2e 75 72 6c 28 22 74 66 5f 70 61 6e 65  ata.url("tf_pane
3dc0: 6c 2e 68 74 6d 6c 22 29 2c 0a 20 20 20 20 20 20  l.html"),.      
3dd0: 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 53 63 72        contentScr
3de0: 69 70 74 46 69 6c 65 3a 20 5b 73 65 6c 66 2e 64  iptFile: [self.d
3df0: 61 74 61 2e 75 72 6c 28 22 74 66 5f 70 61 6e 65  ata.url("tf_pane
3e00: 6c 2e 6a 73 22 29 2c 20 73 65 6c 66 2e 64 61 74  l.js"), self.dat
3e10: 61 2e 75 72 6c 28 22 2e 2e 2f 67 72 61 6d 6d 61  a.url("../gramma
3e20: 6c 65 63 74 65 2f 66 72 2f 74 65 78 74 66 6f 72  lecte/fr/textfor
3e30: 6d 61 74 74 65 72 2e 6a 73 22 29 5d 2c 0a 20 20  matter.js")],.  
3e40: 20 20 20 20 20 20 20 20 20 20 6f 6e 53 68 6f 77            onShow
3e50: 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e70: 78 54 46 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d  xTFPanel.port.em
3e80: 69 74 28 22 73 74 61 72 74 22 2c 20 73 70 2e 70  it("start", sp.p
3e90: 72 65 66 73 5b 22 73 54 46 4f 70 74 69 6f 6e 73  refs["sTFOptions
3ea0: 22 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  "]);.           
3eb0: 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   },.            
3ec0: 70 6f 73 69 74 69 6f 6e 3a 20 7b 0a 20 20 20 20  position: {.    
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 74 74              bott
3ee0: 6f 6d 3a 20 33 30 2c 0a 20 20 20 20 20 20 20 20  om: 30,.        
3ef0: 20 20 20 20 20 20 20 20 72 69 67 68 74 3a 20 33          right: 3
3f00: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  0.            },
3f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 69 64  .            wid
3f20: 74 68 3a 20 38 30 30 2c 0a 20 20 20 20 20 20 20  th: 800,.       
3f30: 20 20 20 20 20 68 65 69 67 68 74 3a 20 35 39 35       height: 595
3f40: 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 0a 20 20  .        });..  
3f50: 20 20 20 20 20 20 63 6f 72 65 2e 67 65 74 41 63        core.getAc
3f60: 74 69 76 65 56 69 65 77 28 78 54 46 50 61 6e 65  tiveView(xTFPane
3f70: 6c 29 2e 73 65 74 41 74 74 72 69 62 75 74 65 28  l).setAttribute(
3f80: 22 6e 6f 61 75 74 6f 68 69 64 65 22 2c 20 74 72  "noautohide", tr
3f90: 75 65 29 3b 0a 0a 20 20 20 20 20 20 20 20 78 54  ue);..        xT
3fa0: 46 50 61 6e 65 6c 2e 70 6f 72 74 2e 6f 6e 28 22  FPanel.port.on("
3fb0: 73 65 74 48 65 69 67 68 74 22 2c 20 66 75 6e 63  setHeight", func
3fc0: 74 69 6f 6e 20 28 6e 29 20 7b 0a 20 20 20 20 20  tion (n) {.     
3fd0: 20 20 20 20 20 20 20 78 54 46 50 61 6e 65 6c 2e         xTFPanel.
3fe0: 72 65 73 69 7a 65 28 38 30 30 2c 20 6e 29 3b 0a  resize(800, n);.
3ff0: 20 20 20 20 20 20 20 20 7d 29 3b 0a 0a 20 20 20          });..   
4000: 20 20 20 20 20 78 54 46 50 61 6e 65 6c 2e 70 6f       xTFPanel.po
4010: 72 74 2e 6f 6e 28 22 73 61 76 65 4f 70 74 69 6f  rt.on("saveOptio
4020: 6e 73 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 73  ns", function (s
4030: 4f 70 74 69 6f 6e 73 29 20 7b 0a 20 20 20 20 20  Options) {.     
4040: 20 20 20 20 20 20 20 73 70 2e 70 72 65 66 73 5b         sp.prefs[
4050: 22 73 54 46 4f 70 74 69 6f 6e 73 22 5d 20 3d 20  "sTFOptions"] = 
4060: 73 4f 70 74 69 6f 6e 73 3b 0a 20 20 20 20 20 20  sOptions;.      
4070: 20 20 7d 29 3b 0a 0a 20 20 20 20 20 20 20 20 78    });..        x
4080: 54 46 50 61 6e 65 6c 2e 70 6f 72 74 2e 6f 6e 28  TFPanel.port.on(
4090: 22 67 65 74 54 65 78 74 54 6f 46 6f 72 6d 61 74  "getTextToFormat
40a0: 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  ", function () {
40b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
40c0: 28 78 41 63 74 69 76 65 57 6f 72 6b 65 72 29 20  (xActiveWorker) 
40d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
40e0: 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72 2e    xActiveWorker.
40f0: 70 6f 72 74 2e 65 6d 69 74 28 22 67 65 74 54 65  port.emit("getTe
4100: 78 74 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  xt");.          
4110: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
4120: 20 20 20 20 20 20 20 20 20 20 20 78 54 46 50 61             xTFPa
4130: 6e 65 6c 2e 68 69 64 65 28 29 3b 0a 20 20 20 20  nel.hide();.    
4140: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4150: 20 20 7d 29 3b 0a 0a 20 20 20 20 20 20 20 20 78    });..        x
4160: 54 46 50 61 6e 65 6c 2e 70 6f 72 74 2e 6f 6e 28  TFPanel.port.on(
4170: 22 61 70 70 6c 79 46 6f 72 6d 61 74 74 65 64 54  "applyFormattedT
4180: 65 78 74 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28  ext", function (
4190: 73 54 65 78 74 29 20 7b 0a 20 20 20 20 20 20 20  sText) {.       
41a0: 20 20 20 20 20 69 66 20 28 78 41 63 74 69 76 65       if (xActive
41b0: 57 6f 72 6b 65 72 29 20 7b 0a 20 20 20 20 20 20  Worker) {.      
41c0: 20 20 20 20 20 20 20 20 20 20 78 41 63 74 69 76            xActiv
41d0: 65 57 6f 72 6b 65 72 2e 70 6f 72 74 2e 65 6d 69  eWorker.port.emi
41e0: 74 28 22 77 72 69 74 65 22 2c 20 73 54 65 78 74  t("write", sText
41f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
4200: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
4210: 20 20 20 20 20 20 20 20 78 54 46 50 61 6e 65 6c          xTFPanel
4220: 2e 68 69 64 65 28 29 3b 0a 20 20 20 20 20 20 20  .hide();.       
4230: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
4240: 29 3b 0a 0a 20 20 20 20 20 20 20 20 78 54 46 50  );..        xTFP
4250: 61 6e 65 6c 2e 70 6f 72 74 2e 6f 6e 28 22 63 6c  anel.port.on("cl
4260: 6f 73 65 50 61 6e 65 6c 22 2c 20 66 75 6e 63 74  osePanel", funct
4270: 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20  ion () {.       
4280: 20 20 20 20 20 69 66 20 28 78 41 63 74 69 76 65       if (xActive
4290: 57 6f 72 6b 65 72 29 20 7b 0a 20 20 20 20 20 20  Worker) {.      
42a0: 20 20 20 20 20 20 20 20 20 20 78 41 63 74 69 76            xActiv
42b0: 65 57 6f 72 6b 65 72 2e 70 6f 72 74 2e 65 6d 69  eWorker.port.emi
42c0: 74 28 22 63 6c 65 61 72 22 29 3b 0a 20 20 20 20  t("clear");.    
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 78 41 63 74              xAct
42e0: 69 76 65 57 6f 72 6b 65 72 20 3d 20 6e 75 6c 6c  iveWorker = null
42f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
4300: 20 20 20 20 20 20 20 20 20 20 20 20 78 54 46 50              xTFP
4310: 61 6e 65 6c 2e 68 69 64 65 28 29 3b 0a 20 20 20  anel.hide();.   
4320: 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 7d 0a 7d       });.    }.}
4330: 0a 0a 63 6f 6e 73 74 20 78 48 6f 74 6b 65 79 54  ..const xHotkeyT
4340: 65 78 74 46 6f 72 6d 61 74 74 65 72 20 3d 20 68  extFormatter = h
4350: 6f 74 6b 65 79 73 2e 48 6f 74 6b 65 79 28 7b 0a  otkeys.Hotkey({.
4360: 20 20 20 20 63 6f 6d 62 6f 3a 20 22 61 63 63 65      combo: "acce
4370: 6c 2d 73 68 69 66 74 2d 66 36 22 2c 0a 20 20 20  l-shift-f6",.   
4380: 20 6f 6e 50 72 65 73 73 3a 20 66 75 6e 63 74 69   onPress: functi
4390: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20  on () {.        
43a0: 6c 6f 61 64 54 65 78 74 46 6f 72 6d 61 74 74 65  loadTextFormatte
43b0: 72 28 29 3b 0a 20 20 20 20 20 20 20 20 63 72 65  r();.        cre
43c0: 61 74 65 54 46 50 61 6e 65 6c 28 29 3b 0a 20 20  ateTFPanel();.  
43d0: 20 20 20 20 20 20 78 41 63 74 69 76 65 57 6f 72        xActiveWor
43e0: 6b 65 72 20 3d 20 74 61 62 73 2e 61 63 74 69 76  ker = tabs.activ
43f0: 65 54 61 62 2e 61 74 74 61 63 68 28 7b 0a 20 20  eTab.attach({.  
4400: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 65 6e            conten
4410: 74 53 63 72 69 70 74 46 69 6c 65 3a 20 73 65 6c  tScriptFile: sel
4420: 66 2e 64 61 74 61 2e 75 72 6c 28 22 72 65 70 6c  f.data.url("repl
4430: 61 63 65 5f 74 65 78 74 2e 6a 73 22 29 0a 20 20  ace_text.js").  
4440: 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20        });.      
4450: 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72 2e    xActiveWorker.
4460: 70 6f 72 74 2e 65 6d 69 74 28 22 73 65 74 41 63  port.emit("setAc
4470: 74 69 76 65 45 6c 65 6d 65 6e 74 22 2c 20 66 61  tiveElement", fa
4480: 6c 73 65 29 3b 0a 20 20 20 20 20 20 20 20 78 41  lse);.        xA
4490: 63 74 69 76 65 57 6f 72 6b 65 72 2e 70 6f 72 74  ctiveWorker.port
44a0: 2e 6f 6e 28 22 79 65 73 54 68 69 73 49 73 54 65  .on("yesThisIsTe
44b0: 78 74 5a 6f 6e 65 22 2c 20 66 75 6e 63 74 69 6f  xtZone", functio
44c0: 6e 20 28 73 54 65 78 74 29 20 7b 0a 20 20 20 20  n (sText) {.    
44d0: 20 20 20 20 20 20 20 20 78 54 46 50 61 6e 65 6c          xTFPanel
44e0: 2e 73 68 6f 77 28 7b 70 6f 73 69 74 69 6f 6e 3a  .show({position:
44f0: 20 78 4d 61 69 6e 42 75 74 74 6f 6e 7d 29 3b 0a   xMainButton});.
4500: 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20          });.    
4510: 20 20 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65      xActiveWorke
4520: 72 2e 70 6f 72 74 2e 6f 6e 28 22 65 6d 69 74 54  r.port.on("emitT
4530: 65 78 74 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28  ext", function (
4540: 73 54 65 78 74 29 20 7b 0a 20 20 20 20 20 20 20  sText) {.       
4550: 20 20 20 20 20 78 54 46 50 61 6e 65 6c 2e 70 6f       xTFPanel.po
4560: 72 74 2e 65 6d 69 74 28 22 72 65 63 65 69 76 65  rt.emit("receive
4570: 54 65 78 74 54 6f 46 6f 72 6d 61 74 22 2c 20 73  TextToFormat", s
4580: 54 65 78 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  Text);.        }
4590: 29 3b 0a 20 20 20 20 20 20 20 20 78 41 63 74 69  );.        xActi
45a0: 76 65 57 6f 72 6b 65 72 2e 70 6f 72 74 2e 6f 6e  veWorker.port.on
45b0: 28 22 63 6c 6f 73 65 54 46 50 61 6e 65 6c 22 2c  ("closeTFPanel",
45c0: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
45d0: 20 20 20 20 20 20 20 20 20 20 78 41 63 74 69 76            xActiv
45e0: 65 57 6f 72 6b 65 72 20 3d 20 6e 75 6c 6c 3b 0a  eWorker = null;.
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 78 54 46 50              xTFP
4600: 61 6e 65 6c 2e 68 69 64 65 28 29 3b 0a 20 20 20  anel.hide();.   
4610: 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 7d 0a 7d       });.    }.}
4620: 29 3b 0a 0a 0a 2f 2a 0a 20 20 20 20 4c 65 78 69  );.../*.    Lexi
4630: 63 6f 67 72 61 70 68 65 72 0a 2a 2f 0a 0a 6c 65  cographer.*/..le
4640: 74 20 78 4c 78 67 50 61 6e 65 6c 20 3d 20 6e 75  t xLxgPanel = nu
4650: 6c 6c 3b 0a 0a 66 75 6e 63 74 69 6f 6e 20 63 72  ll;..function cr
4660: 65 61 74 65 4c 78 67 50 61 6e 65 6c 20 28 29 20  eateLxgPanel () 
4670: 7b 0a 20 20 20 20 69 66 20 28 78 4c 78 67 50 61  {.    if (xLxgPa
4680: 6e 65 6c 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a  nel === null) {.
4690: 20 20 20 20 20 20 20 20 78 4c 78 67 50 61 6e 65          xLxgPane
46a0: 6c 20 3d 20 70 61 6e 65 6c 2e 50 61 6e 65 6c 28  l = panel.Panel(
46b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  {.            co
46c0: 6e 74 65 6e 74 55 52 4c 3a 20 73 65 6c 66 2e 64  ntentURL: self.d
46d0: 61 74 61 2e 75 72 6c 28 22 6c 78 67 5f 70 61 6e  ata.url("lxg_pan
46e0: 65 6c 2e 68 74 6d 6c 22 29 2c 0a 20 20 20 20 20  el.html"),.     
46f0: 20 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 53 63         contentSc
4700: 72 69 70 74 46 69 6c 65 3a 20 73 65 6c 66 2e 64  riptFile: self.d
4710: 61 74 61 2e 75 72 6c 28 22 6c 78 67 5f 70 61 6e  ata.url("lxg_pan
4720: 65 6c 2e 6a 73 22 29 2c 0a 20 20 20 20 20 20 20  el.js"),.       
4730: 20 20 20 20 20 6f 6e 48 69 64 65 3a 20 66 75 6e       onHide: fun
4740: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20  ction () {.     
4750: 20 20 20 20 20 20 20 20 20 20 20 78 4c 78 67 50             xLxgP
4760: 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22  anel.port.emit("
4770: 63 6c 65 61 72 22 29 3b 0a 20 20 20 20 20 20 20  clear");.       
4780: 20 20 20 20 20 20 20 20 20 78 4d 61 69 6e 42 75           xMainBu
4790: 74 74 6f 6e 2e 73 74 61 74 65 28 22 77 69 6e 64  tton.state("wind
47a0: 6f 77 22 2c 20 7b 63 68 65 63 6b 65 64 3a 20 66  ow", {checked: f
47b0: 61 6c 73 65 7d 29 3b 0a 20 20 20 20 20 20 20 20  alse});.        
47c0: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 20      },.         
47d0: 20 20 20 70 6f 73 69 74 69 6f 6e 3a 20 7b 0a 20     position: {. 
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
47f0: 6f 74 74 6f 6d 3a 20 32 30 2c 0a 20 20 20 20 20  ottom: 20,.     
4800: 20 20 20 20 20 20 20 20 20 20 20 72 69 67 68 74             right
4810: 3a 20 33 30 0a 20 20 20 20 20 20 20 20 20 20 20  : 30.           
4820: 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   },.            
4830: 77 69 64 74 68 3a 20 73 70 2e 70 72 65 66 73 5b  width: sp.prefs[
4840: 22 6e 4c 78 67 50 61 6e 65 6c 57 69 64 74 68 22  "nLxgPanelWidth"
4850: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ],.            h
4860: 65 69 67 68 74 3a 20 73 70 2e 70 72 65 66 73 5b  eight: sp.prefs[
4870: 22 6e 4c 78 67 50 61 6e 65 6c 48 65 69 67 68 74  "nLxgPanelHeight
4880: 22 5d 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 0a  "].        });..
4890: 20 20 20 20 20 20 20 20 63 6f 72 65 2e 67 65 74          core.get
48a0: 41 63 74 69 76 65 56 69 65 77 28 78 4c 78 67 50  ActiveView(xLxgP
48b0: 61 6e 65 6c 29 2e 73 65 74 41 74 74 72 69 62 75  anel).setAttribu
48c0: 74 65 28 22 6e 6f 61 75 74 6f 68 69 64 65 22 2c  te("noautohide",
48d0: 20 74 72 75 65 29 3b 0a 0a 20 20 20 20 20 20 20   true);..       
48e0: 20 78 4c 78 67 50 61 6e 65 6c 2e 70 6f 72 74 2e   xLxgPanel.port.
48f0: 6f 6e 28 22 63 6c 6f 73 65 50 61 6e 65 6c 22 2c  on("closePanel",
4900: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
4910: 20 20 20 20 20 20 20 20 20 20 20 78 4c 78 67 50             xLxgP
4920: 61 6e 65 6c 2e 72 65 73 69 7a 65 28 73 70 2e 70  anel.resize(sp.p
4930: 72 65 66 73 5b 22 6e 4c 78 67 50 61 6e 65 6c 57  refs["nLxgPanelW
4940: 69 64 74 68 22 5d 2c 20 73 70 2e 70 72 65 66 73  idth"], sp.prefs
4950: 5b 22 6e 4c 78 67 50 61 6e 65 6c 48 65 69 67 68  ["nLxgPanelHeigh
4960: 74 22 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  t"]);.          
4970: 20 20 78 4c 78 67 50 61 6e 65 6c 2e 68 69 64 65    xLxgPanel.hide
4980: 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a  ();.        });.
4990: 0a 20 20 20 20 20 20 20 20 78 4c 78 67 50 61 6e  .        xLxgPan
49a0: 65 6c 2e 70 6f 72 74 2e 6f 6e 28 22 72 65 73 69  el.port.on("resi
49b0: 7a 65 22 2c 20 66 75 6e 63 74 69 6f 6e 28 73 43  ze", function(sC
49c0: 6d 64 2c 20 6e 29 20 7b 0a 20 20 20 20 20 20 20  md, n) {.       
49d0: 20 20 20 20 20 69 66 20 28 73 43 6d 64 20 3d 3d       if (sCmd ==
49e0: 20 22 65 78 70 61 6e 64 22 29 20 7b 0a 20 20 20   "expand") {.   
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 78 4c 78               xLx
4a00: 67 50 61 6e 65 6c 2e 72 65 73 69 7a 65 28 73 70  gPanel.resize(sp
4a10: 2e 70 72 65 66 73 5b 22 6e 4c 78 67 50 61 6e 65  .prefs["nLxgPane
4a20: 6c 57 69 64 74 68 22 5d 2c 20 73 70 2e 70 72 65  lWidth"], sp.pre
4a30: 66 73 5b 22 6e 4c 78 67 50 61 6e 65 6c 48 65 69  fs["nLxgPanelHei
4a40: 67 68 74 22 5d 29 3b 0a 20 20 20 20 20 20 20 20  ght"]);.        
4a50: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 73      } else if (s
4a60: 43 6d 64 20 3d 3d 20 22 72 65 64 75 63 65 22 29  Cmd == "reduce")
4a70: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
4a80: 20 20 20 78 4c 78 67 50 61 6e 65 6c 2e 72 65 73     xLxgPanel.res
4a90: 69 7a 65 28 32 38 30 2c 20 35 30 29 3b 0a 20 20  ize(280, 50);.  
4aa0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
4ab0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
4ac0: 20 20 20 73 77 69 74 63 68 20 28 73 43 6d 64 29     switch (sCmd)
4ad0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
4ae0: 20 20 20 20 20 20 20 63 61 73 65 20 22 72 65 73         case "res
4af0: 69 7a 65 5f 68 5f 62 69 67 67 65 72 22 3a 20 20  ize_h_bigger":  
4b00: 69 66 20 28 73 70 2e 70 72 65 66 73 5b 22 6e 4c  if (sp.prefs["nL
4b10: 78 67 50 61 6e 65 6c 48 65 69 67 68 74 22 5d 20  xgPanelHeight"] 
4b20: 3c 20 31 32 30 30 29 20 7b 20 73 70 2e 70 72 65  < 1200) { sp.pre
4b30: 66 73 5b 22 6e 4c 78 67 50 61 6e 65 6c 48 65 69  fs["nLxgPanelHei
4b40: 67 68 74 22 5d 20 2b 3d 20 6e 3b 20 7d 20 62 72  ght"] += n; } br
4b50: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  eak;.           
4b60: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 72           case "r
4b70: 65 73 69 7a 65 5f 68 5f 73 6d 61 6c 6c 65 72 22  esize_h_smaller"
4b80: 3a 20 69 66 20 28 73 70 2e 70 72 65 66 73 5b 22  : if (sp.prefs["
4b90: 6e 4c 78 67 50 61 6e 65 6c 48 65 69 67 68 74 22  nLxgPanelHeight"
4ba0: 5d 20 3e 20 32 35 30 29 20 20 7b 20 73 70 2e 70  ] > 250)  { sp.p
4bb0: 72 65 66 73 5b 22 6e 4c 78 67 50 61 6e 65 6c 48  refs["nLxgPanelH
4bc0: 65 69 67 68 74 22 5d 20 2d 3d 20 6e 20 7d 20 62  eight"] -= n } b
4bd0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
4be0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
4bf0: 72 65 73 69 7a 65 5f 77 5f 62 69 67 67 65 72 22  resize_w_bigger"
4c00: 3a 20 20 69 66 20 28 73 70 2e 70 72 65 66 73 5b  :  if (sp.prefs[
4c10: 22 6e 4c 78 67 50 61 6e 65 6c 57 69 64 74 68 22  "nLxgPanelWidth"
4c20: 5d 20 20 3c 20 31 32 30 30 29 20 7b 20 73 70 2e  ]  < 1200) { sp.
4c30: 70 72 65 66 73 5b 22 6e 4c 78 67 50 61 6e 65 6c  prefs["nLxgPanel
4c40: 57 69 64 74 68 22 5d 20 2b 3d 20 6e 3b 20 7d 20  Width"] += n; } 
4c50: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
4c60: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
4c70: 22 72 65 73 69 7a 65 5f 77 5f 73 6d 61 6c 6c 65  "resize_w_smalle
4c80: 72 22 3a 20 69 66 20 28 73 70 2e 70 72 65 66 73  r": if (sp.prefs
4c90: 5b 22 6e 4c 78 67 50 61 6e 65 6c 57 69 64 74 68  ["nLxgPanelWidth
4ca0: 22 5d 20 20 3e 20 33 30 30 29 20 20 7b 20 73 70  "]  > 300)  { sp
4cb0: 2e 70 72 65 66 73 5b 22 6e 4c 78 67 50 61 6e 65  .prefs["nLxgPane
4cc0: 6c 57 69 64 74 68 22 5d 20 2d 3d 20 6e 3b 20 7d  lWidth"] -= n; }
4cd0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
4ce0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4cf0: 20 20 20 20 20 20 20 20 20 20 78 4c 78 67 50 61            xLxgPa
4d00: 6e 65 6c 2e 72 65 73 69 7a 65 28 73 70 2e 70 72  nel.resize(sp.pr
4d10: 65 66 73 5b 22 6e 4c 78 67 50 61 6e 65 6c 57 69  efs["nLxgPanelWi
4d20: 64 74 68 22 5d 2c 20 73 70 2e 70 72 65 66 73 5b  dth"], sp.prefs[
4d30: 22 6e 4c 78 67 50 61 6e 65 6c 48 65 69 67 68 74  "nLxgPanelHeight
4d40: 22 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  "]);.           
4d50: 20 7d 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 20   }.        });. 
4d60: 20 20 20 7d 0a 7d 0a 0a 61 73 79 6e 63 20 66 75     }.}..async fu
4d70: 6e 63 74 69 6f 6e 20 61 6e 61 6c 79 7a 65 57 6f  nction analyzeWo
4d80: 72 64 73 20 28 73 54 65 78 74 29 20 7b 0a 20 20  rds (sText) {.  
4d90: 20 20 78 4c 78 67 50 61 6e 65 6c 2e 70 6f 72 74    xLxgPanel.port
4da0: 2e 65 6d 69 74 28 22 73 74 61 72 74 57 61 69 74  .emit("startWait
4db0: 49 63 6f 6e 22 29 3b 0a 20 20 20 20 78 4c 78 67  Icon");.    xLxg
4dc0: 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28  Panel.port.emit(
4dd0: 22 61 64 64 53 65 70 61 72 61 74 6f 72 22 2c 20  "addSeparator", 
4de0: 5f 28 22 73 65 70 61 72 61 74 6f 72 22 29 29 3b  _("separator"));
4df0: 0a 20 20 20 20 6c 6f 61 64 47 72 61 6d 6d 61 72  .    loadGrammar
4e00: 43 68 65 63 6b 65 72 28 29 3b 0a 20 20 20 20 6c  Checker();.    l
4e10: 65 74 20 6e 50 61 72 61 67 72 61 70 68 20 3d 20  et nParagraph = 
4e20: 30 3b 20 2f 2f 20 6e 6f 6e 20 65 6d 70 74 79 20  0; // non empty 
4e30: 70 61 72 61 67 72 61 70 68 73 0a 20 20 20 20 6c  paragraphs.    l
4e40: 65 74 20 73 52 65 73 20 3d 20 22 22 3b 0a 20 20  et sRes = "";.  
4e50: 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20 20    try {.        
4e60: 66 6f 72 20 28 6c 65 74 20 73 50 61 72 61 67 72  for (let sParagr
4e70: 61 70 68 20 6f 66 20 74 65 78 74 2e 67 65 74 50  aph of text.getP
4e80: 61 72 61 67 72 61 70 68 28 73 54 65 78 74 29 29  aragraph(sText))
4e90: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   {.            i
4ea0: 66 20 28 73 50 61 72 61 67 72 61 70 68 2e 74 72  f (sParagraph.tr
4eb0: 69 6d 28 29 20 21 3d 3d 20 22 22 29 20 7b 0a 20  im() !== "") {. 
4ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4ed0: 52 65 73 20 3d 20 61 77 61 69 74 20 78 47 43 45  Res = await xGCE
4ee0: 57 6f 72 6b 65 72 2e 70 6f 73 74 28 27 67 65 74  Worker.post('get
4ef0: 4c 69 73 74 4f 66 45 6c 65 6d 65 6e 74 73 27 2c  ListOfElements',
4f00: 20 5b 73 50 61 72 61 67 72 61 70 68 5d 29 3b 0a   [sParagraph]);.
4f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f20: 78 4c 78 67 50 61 6e 65 6c 2e 70 6f 72 74 2e 65  xLxgPanel.port.e
4f30: 6d 69 74 28 22 61 64 64 50 61 72 61 67 72 61 70  mit("addParagrap
4f40: 68 45 6c 65 6d 73 22 2c 20 73 52 65 73 29 3b 0a  hElems", sRes);.
4f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f60: 6e 50 61 72 61 67 72 61 70 68 20 2b 3d 20 31 3b  nParagraph += 1;
4f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
4f80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4f90: 20 78 4c 78 67 50 61 6e 65 6c 2e 70 6f 72 74 2e   xLxgPanel.port.
4fa0: 65 6d 69 74 28 22 61 64 64 4d 65 73 73 61 67 65  emit("addMessage
4fb0: 22 2c 20 27 6d 65 73 73 61 67 65 27 2c 20 5f 28  ", 'message', _(
4fc0: 22 6e 75 6d 62 65 72 4f 66 50 61 72 61 67 72 61  "numberOfParagra
4fd0: 70 68 73 22 29 20 2b 20 22 20 22 20 2b 20 6e 50  phs") + " " + nP
4fe0: 61 72 61 67 72 61 70 68 29 3b 0a 20 20 20 20 7d  aragraph);.    }
4ff0: 0a 20 20 20 20 63 61 74 63 68 20 28 65 29 20 7b  .    catch (e) {
5000: 0a 20 20 20 20 20 20 20 20 78 4c 78 67 50 61 6e  .        xLxgPan
5010: 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 61 64  el.port.emit("ad
5020: 64 4d 65 73 73 61 67 65 22 2c 20 27 62 75 67 27  dMessage", 'bug'
5030: 2c 20 65 2e 6d 65 73 73 61 67 65 29 3b 0a 20 20  , e.message);.  
5040: 20 20 7d 0a 20 20 20 20 78 4c 78 67 50 61 6e 65    }.    xLxgPane
5050: 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 73 74 6f  l.port.emit("sto
5060: 70 57 61 69 74 49 63 6f 6e 22 29 3b 0a 7d 0a 0a  pWaitIcon");.}..
5070: 0a 2f 2a 0a 20 20 20 20 43 6f 6e 6a 75 67 75 65  ./*.    Conjugue
5080: 75 72 0a 2a 2f 0a 0a 6c 65 74 20 78 43 6f 6e 6a  ur.*/..let xConj
5090: 50 61 6e 65 6c 20 3d 20 6e 75 6c 6c 3b 0a 0a 66  Panel = null;..f
50a0: 75 6e 63 74 69 6f 6e 20 63 72 65 61 74 65 43 6f  unction createCo
50b0: 6e 6a 50 61 6e 65 6c 20 28 29 20 7b 0a 20 20 20  njPanel () {.   
50c0: 20 69 66 20 28 78 43 6f 6e 6a 50 61 6e 65 6c 20   if (xConjPanel 
50d0: 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20  === null) {.    
50e0: 20 20 20 20 6c 65 74 20 73 43 6f 6e 6a 44 61 74      let sConjDat
50f0: 61 20 3d 20 73 65 6c 66 2e 64 61 74 61 2e 6c 6f  a = self.data.lo
5100: 61 64 28 22 2e 2e 2f 67 72 61 6d 6d 61 6c 65 63  ad("../grammalec
5110: 74 65 2f 66 72 2f 63 6f 6e 6a 5f 64 61 74 61 2e  te/fr/conj_data.
5120: 6a 73 6f 6e 22 29 3b 0a 0a 20 20 20 20 20 20 20  json");..       
5130: 20 78 43 6f 6e 6a 50 61 6e 65 6c 20 3d 20 70 61   xConjPanel = pa
5140: 6e 65 6c 2e 50 61 6e 65 6c 28 7b 0a 20 20 20 20  nel.Panel({.    
5150: 20 20 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 55          contentU
5160: 52 4c 3a 20 73 65 6c 66 2e 64 61 74 61 2e 75 72  RL: self.data.ur
5170: 6c 28 22 63 6f 6e 6a 5f 70 61 6e 65 6c 2e 68 74  l("conj_panel.ht
5180: 6d 6c 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20  ml"),.          
5190: 20 20 63 6f 6e 74 65 6e 74 53 63 72 69 70 74 46    contentScriptF
51a0: 69 6c 65 3a 20 5b 73 65 6c 66 2e 64 61 74 61 2e  ile: [self.data.
51b0: 75 72 6c 28 22 63 6f 6e 6a 5f 70 61 6e 65 6c 2e  url("conj_panel.
51c0: 6a 73 22 29 2c 20 73 65 6c 66 2e 64 61 74 61 2e  js"), self.data.
51d0: 75 72 6c 28 22 2e 2e 2f 67 72 61 6d 6d 61 6c 65  url("../grammale
51e0: 63 74 65 2f 66 72 2f 63 6f 6e 6a 2e 6a 73 22 29  cte/fr/conj.js")
51f0: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ],.            o
5200: 6e 53 68 6f 77 3a 20 66 75 6e 63 74 69 6f 6e 20  nShow: function 
5210: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  () {.           
5220: 20 20 20 20 20 78 43 6f 6e 6a 50 61 6e 65 6c 2e       xConjPanel.
5230: 70 6f 72 74 2e 65 6d 69 74 28 22 73 74 61 72 74  port.emit("start
5240: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
5250: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  },.            o
5260: 6e 48 69 64 65 3a 20 66 75 6e 63 74 69 6f 6e 20  nHide: function 
5270: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  () {.           
5280: 20 20 20 20 20 78 4d 61 69 6e 42 75 74 74 6f 6e       xMainButton
5290: 2e 73 74 61 74 65 28 22 77 69 6e 64 6f 77 22 2c  .state("window",
52a0: 20 7b 63 68 65 63 6b 65 64 3a 20 66 61 6c 73 65   {checked: false
52b0: 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  });.            
52c0: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  },.            p
52d0: 6f 73 69 74 69 6f 6e 3a 20 7b 0a 20 20 20 20 20  osition: {.     
52e0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 74 74 6f             botto
52f0: 6d 3a 20 33 30 2c 0a 20 20 20 20 20 20 20 20 20  m: 30,.         
5300: 20 20 20 20 20 20 20 72 69 67 68 74 3a 20 33 30         right: 30
5310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  .            },.
5320: 20 20 20 20 20 20 20 20 20 20 20 20 77 69 64 74              widt
5330: 68 3a 20 35 35 30 2c 0a 20 20 20 20 20 20 20 20  h: 550,.        
5340: 20 20 20 20 68 65 69 67 68 74 3a 20 38 38 30 0a      height: 880.
5350: 20 20 20 20 20 20 20 20 7d 29 3b 0a 0a 20 20 20          });..   
5360: 20 20 20 20 20 63 6f 72 65 2e 67 65 74 41 63 74       core.getAct
5370: 69 76 65 56 69 65 77 28 78 43 6f 6e 6a 50 61 6e  iveView(xConjPan
5380: 65 6c 29 2e 73 65 74 41 74 74 72 69 62 75 74 65  el).setAttribute
5390: 28 22 6e 6f 61 75 74 6f 68 69 64 65 22 2c 20 74  ("noautohide", t
53a0: 72 75 65 29 3b 0a 0a 20 20 20 20 20 20 20 20 78  rue);..        x
53b0: 43 6f 6e 6a 50 61 6e 65 6c 2e 70 6f 72 74 2e 6f  ConjPanel.port.o
53c0: 6e 28 22 73 68 6f 77 22 2c 20 66 75 6e 63 74 69  n("show", functi
53d0: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20  on () {.        
53e0: 20 20 20 20 69 66 20 28 21 78 43 6f 6e 6a 50 61      if (!xConjPa
53f0: 6e 65 6c 2e 69 73 53 68 6f 77 69 6e 67 29 20 7b  nel.isShowing) {
5400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5410: 20 78 43 6f 6e 6a 50 61 6e 65 6c 2e 73 68 6f 77   xConjPanel.show
5420: 28 7b 70 6f 73 69 74 69 6f 6e 3a 20 78 4d 61 69  ({position: xMai
5430: 6e 42 75 74 74 6f 6e 7d 29 3b 0a 20 20 20 20 20  nButton});.     
5440: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5450: 20 7d 29 3b 0a 0a 20 20 20 20 20 20 20 20 78 43   });..        xC
5460: 6f 6e 6a 50 61 6e 65 6c 2e 70 6f 72 74 2e 6f 6e  onjPanel.port.on
5470: 28 22 73 65 74 48 65 69 67 68 74 22 2c 20 66 75  ("setHeight", fu
5480: 6e 63 74 69 6f 6e 20 28 6e 29 20 7b 0a 20 20 20  nction (n) {.   
5490: 20 20 20 20 20 20 20 20 20 78 43 6f 6e 6a 50 61           xConjPa
54a0: 6e 65 6c 2e 72 65 73 69 7a 65 28 35 35 30 2c 20  nel.resize(550, 
54b0: 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a  n);.        });.
54c0: 0a 20 20 20 20 20 20 20 20 78 43 6f 6e 6a 50 61  .        xConjPa
54d0: 6e 65 6c 2e 70 6f 72 74 2e 6f 6e 28 22 63 6c 6f  nel.port.on("clo
54e0: 73 65 50 61 6e 65 6c 22 2c 20 66 75 6e 63 74 69  sePanel", functi
54f0: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20  on () {.        
5500: 20 20 20 20 78 43 6f 6e 6a 50 61 6e 65 6c 2e 68      xConjPanel.h
5510: 69 64 65 28 29 3b 0a 20 20 20 20 20 20 20 20 7d  ide();.        }
5520: 29 3b 0a 0a 20 20 20 20 20 20 20 20 78 43 6f 6e  );..        xCon
5530: 6a 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74  jPanel.port.emit
5540: 28 22 70 72 6f 76 69 64 65 43 6f 6e 6a 44 61 74  ("provideConjDat
5550: 61 22 2c 20 73 43 6f 6e 6a 44 61 74 61 29 3b 0a  a", sConjData);.
5560: 20 20 20 20 7d 0a 7d 0a 0a 63 6f 6e 73 74 20 78      }.}..const x
5570: 48 6f 74 6b 65 79 43 6f 6e 6a 20 3d 20 68 6f 74  HotkeyConj = hot
5580: 6b 65 79 73 2e 48 6f 74 6b 65 79 28 7b 0a 20 20  keys.Hotkey({.  
5590: 20 20 63 6f 6d 62 6f 3a 20 22 61 63 63 65 6c 2d    combo: "accel-
55a0: 73 68 69 66 74 2d 66 38 22 2c 0a 20 20 20 20 6f  shift-f8",.    o
55b0: 6e 50 72 65 73 73 3a 20 66 75 6e 63 74 69 6f 6e  nPress: function
55c0: 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 63 72   () {.        cr
55d0: 65 61 74 65 43 6f 6e 6a 50 61 6e 65 6c 28 29 3b  eateConjPanel();
55e0: 0a 20 20 20 20 20 20 20 20 78 43 6f 6e 6a 50 61  .        xConjPa
55f0: 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 63  nel.port.emit("c
5600: 6f 6e 6a 75 67 61 74 65 22 2c 20 22 c3 aa 74 72  onjugate", "..tr
5610: 65 22 29 3b 0a 20 20 20 20 7d 0a 7d 29 3b 0a 0a  e");.    }.});..
5620: 0a 2f 2a 0a 20 20 20 20 54 65 73 74 73 0a 2a 2f  ./*.    Tests.*/
5630: 0a 0a 6c 65 74 20 78 54 65 73 74 50 61 6e 65 6c  ..let xTestPanel
5640: 20 3d 20 6e 75 6c 6c 3b 0a 0a 66 75 6e 63 74 69   = null;..functi
5650: 6f 6e 20 63 72 65 61 74 65 54 65 73 74 50 61 6e  on createTestPan
5660: 65 6c 20 28 29 20 7b 0a 20 20 20 20 69 66 20 28  el () {.    if (
5670: 78 54 65 73 74 50 61 6e 65 6c 20 3d 3d 3d 20 6e  xTestPanel === n
5680: 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 78  ull) {.        x
5690: 54 65 73 74 50 61 6e 65 6c 20 3d 20 70 61 6e 65  TestPanel = pane
56a0: 6c 2e 50 61 6e 65 6c 28 7b 0a 20 20 20 20 20 20  l.Panel({.      
56b0: 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 55 52 4c        contentURL
56c0: 3a 20 73 65 6c 66 2e 64 61 74 61 2e 75 72 6c 28  : self.data.url(
56d0: 22 74 65 73 74 5f 70 61 6e 65 6c 2e 68 74 6d 6c  "test_panel.html
56e0: 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "),.            
56f0: 63 6f 6e 74 65 6e 74 53 63 72 69 70 74 46 69 6c  contentScriptFil
5700: 65 3a 20 73 65 6c 66 2e 64 61 74 61 2e 75 72 6c  e: self.data.url
5710: 28 22 74 65 73 74 5f 70 61 6e 65 6c 2e 6a 73 22  ("test_panel.js"
5720: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ),.            o
5730: 6e 48 69 64 65 3a 20 66 75 6e 63 74 69 6f 6e 20  nHide: function 
5740: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  () {.           
5750: 20 20 20 20 20 78 4d 61 69 6e 42 75 74 74 6f 6e       xMainButton
5760: 2e 73 74 61 74 65 28 22 77 69 6e 64 6f 77 22 2c  .state("window",
5770: 20 7b 63 68 65 63 6b 65 64 3a 20 66 61 6c 73 65   {checked: false
5780: 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  });.            
5790: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  },.            p
57a0: 6f 73 69 74 69 6f 6e 3a 20 7b 0a 20 20 20 20 20  osition: {.     
57b0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 74 74 6f             botto
57c0: 6d 3a 20 33 30 2c 0a 20 20 20 20 20 20 20 20 20  m: 30,.         
57d0: 20 20 20 20 20 20 20 72 69 67 68 74 3a 20 33 30         right: 30
57e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  .            },.
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 77 69 64 74              widt
5800: 68 3a 20 33 35 30 2c 0a 20 20 20 20 20 20 20 20  h: 350,.        
5810: 20 20 20 20 68 65 69 67 68 74 3a 20 37 30 30 0a      height: 700.
5820: 20 20 20 20 20 20 20 20 7d 29 3b 0a 0a 20 20 20          });..   
5830: 20 20 20 20 20 63 6f 72 65 2e 67 65 74 41 63 74       core.getAct
5840: 69 76 65 56 69 65 77 28 78 54 65 73 74 50 61 6e  iveView(xTestPan
5850: 65 6c 29 2e 73 65 74 41 74 74 72 69 62 75 74 65  el).setAttribute
5860: 28 22 6e 6f 61 75 74 6f 68 69 64 65 22 2c 20 74  ("noautohide", t
5870: 72 75 65 29 3b 0a 0a 20 20 20 20 20 20 20 20 78  rue);..        x
5880: 54 65 73 74 50 61 6e 65 6c 2e 70 6f 72 74 2e 6f  TestPanel.port.o
5890: 6e 28 22 63 68 65 63 6b 54 65 78 74 22 2c 20 66  n("checkText", f
58a0: 75 6e 63 74 69 6f 6e 20 28 73 54 65 78 74 29 20  unction (sText) 
58b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  {.            lo
58c0: 61 64 47 72 61 6d 6d 61 72 43 68 65 63 6b 65 72  adGrammarChecker
58d0: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
58e0: 78 54 65 73 74 50 61 6e 65 6c 2e 70 6f 72 74 2e  xTestPanel.port.
58f0: 65 6d 69 74 28 22 63 6c 65 61 72 22 29 3b 0a 20  emit("clear");. 
5900: 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 78             let x
5910: 50 72 6f 6d 69 73 65 20 3d 20 78 47 43 45 57 6f  Promise = xGCEWo
5920: 72 6b 65 72 2e 70 6f 73 74 28 27 70 61 72 73 65  rker.post('parse
5930: 27 2c 20 5b 73 54 65 78 74 2c 20 22 46 52 22 2c  ', [sText, "FR",
5940: 20 74 72 75 65 2c 20 66 61 6c 73 65 5d 29 3b 0a   true, false]);.
5950: 20 20 20 20 20 20 20 20 20 20 20 20 78 50 72 6f              xPro
5960: 6d 69 73 65 2e 74 68 65 6e 28 0a 20 20 20 20 20  mise.then(.     
5970: 20 20 20 20 20 20 20 20 20 20 20 66 75 6e 63 74             funct
5980: 69 6f 6e 20 28 61 56 61 6c 29 20 7b 0a 20 20 20  ion (aVal) {.   
5990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59a0: 20 6c 65 74 20 6c 45 72 72 20 3d 20 4a 53 4f 4e   let lErr = JSON
59b0: 2e 70 61 72 73 65 28 61 56 61 6c 29 3b 0a 20 20  .parse(aVal);.  
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59d0: 20 20 69 66 20 28 6c 45 72 72 2e 6c 65 6e 67 74    if (lErr.lengt
59e0: 68 20 3e 20 30 29 20 7b 0a 20 20 20 20 20 20 20  h > 0) {.       
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a00: 20 66 6f 72 20 28 6c 65 74 20 64 45 72 72 20 6f   for (let dErr o
5a10: 66 20 6c 45 72 72 29 20 7b 0a 20 20 20 20 20 20  f lErr) {.      
5a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a30: 20 20 20 20 20 20 78 54 65 73 74 50 61 6e 65 6c        xTestPanel
5a40: 2e 70 6f 72 74 2e 65 6d 69 74 28 22 61 64 64 45  .port.emit("addE
5a50: 6c 65 6d 22 2c 20 74 65 78 74 2e 67 65 74 52 65  lem", text.getRe
5a60: 61 64 61 62 6c 65 45 72 72 6f 72 28 64 45 72 72  adableError(dErr
5a70: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
5a80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
5a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5aa0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ac0: 20 20 20 78 54 65 73 74 50 61 6e 65 6c 2e 70 6f     xTestPanel.po
5ad0: 72 74 2e 65 6d 69 74 28 22 61 64 64 45 6c 65 6d  rt.emit("addElem
5ae0: 22 2c 20 5f 28 27 6e 6f 45 72 72 6f 72 46 6f 75  ", _('noErrorFou
5af0: 6e 64 27 29 29 3b 0a 20 20 20 20 20 20 20 20 20  nd'));.         
5b00: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b30: 66 75 6e 63 74 69 6f 6e 20 28 61 52 65 61 73 6f  function (aReaso
5b40: 6e 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  n) {.           
5b50: 20 20 20 20 20 20 20 20 20 78 54 65 73 74 50 61           xTestPa
5b60: 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 61  nel.port.emit("a
5b70: 64 64 45 6c 65 6d 22 2c 20 27 50 72 6f 6d 69 73  ddElem", 'Promis
5b80: 65 20 72 65 6a 65 63 74 65 64 27 29 3b 0a 20 20  e rejected');.  
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ba0: 20 20 78 54 65 73 74 50 61 6e 65 6c 2e 70 6f 72    xTestPanel.por
5bb0: 74 2e 65 6d 69 74 28 22 61 64 64 45 6c 65 6d 22  t.emit("addElem"
5bc0: 2c 20 61 52 65 61 73 6f 6e 29 3b 0a 20 20 20 20  , aReason);.    
5bd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
5be0: 20 20 20 20 20 20 20 20 20 20 29 2e 63 61 74 63            ).catc
5bf0: 68 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h(.             
5c00: 20 20 20 66 75 6e 63 74 69 6f 6e 20 28 61 43 61     function (aCa
5c10: 75 67 68 74 29 20 7b 0a 20 20 20 20 20 20 20 20  ught) {.        
5c20: 20 20 20 20 20 20 20 20 20 20 20 20 78 54 65 73              xTes
5c30: 74 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74  tPanel.port.emit
5c40: 28 22 61 64 64 45 6c 65 6d 22 2c 20 27 50 72 6f  ("addElem", 'Pro
5c50: 6d 69 73 65 20 45 72 72 6f 72 27 29 3b 0a 20 20  mise Error');.  
5c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c70: 20 20 78 54 65 73 74 50 61 6e 65 6c 2e 70 6f 72    xTestPanel.por
5c80: 74 2e 65 6d 69 74 28 22 61 64 64 45 6c 65 6d 22  t.emit("addElem"
5c90: 2c 20 61 43 61 75 67 68 74 29 3b 0a 20 20 20 20  , aCaught);.    
5ca0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
5cb0: 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20            );.   
5cc0: 20 20 20 20 20 7d 29 3b 0a 0a 20 20 20 20 20 20       });..      
5cd0: 20 20 78 54 65 73 74 50 61 6e 65 6c 2e 70 6f 72    xTestPanel.por
5ce0: 74 2e 6f 6e 28 22 61 6c 6c 47 43 54 65 73 74 73  t.on("allGCTests
5cf0: 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  ", function () {
5d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 54 65  .            xTe
5d10: 73 74 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69  stPanel.port.emi
5d20: 74 28 22 63 6c 65 61 72 22 29 3b 0a 20 20 20 20  t("clear");.    
5d30: 20 20 20 20 20 20 20 20 78 54 65 73 74 50 61 6e          xTestPan
5d40: 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22 61 64  el.port.emit("ad
5d50: 64 45 6c 65 6d 22 2c 20 27 50 65 72 66 6f 72 6d  dElem", 'Perform
5d60: 69 6e 67 20 74 65 73 74 73 e2 80 a6 20 57 61 69  ing tests... Wai
5d70: 74 e2 80 a6 27 29 3b 0a 20 20 20 20 20 20 20 20  t...');.        
5d80: 20 20 20 20 6c 6f 61 64 47 72 61 6d 6d 61 72 43      loadGrammarC
5d90: 68 65 63 6b 65 72 28 29 3b 0a 20 20 20 20 20 20  hecker();.      
5da0: 20 20 20 20 20 20 6c 65 74 20 78 50 72 6f 6d 69        let xPromi
5db0: 73 65 20 3d 20 78 47 43 45 57 6f 72 6b 65 72 2e  se = xGCEWorker.
5dc0: 70 6f 73 74 28 27 66 75 6c 6c 54 65 73 74 73 27  post('fullTests'
5dd0: 2c 20 5b 27 7b 22 6e 62 73 70 22 3a 74 72 75 65  , ['{"nbsp":true
5de0: 2c 20 22 65 73 70 22 3a 74 72 75 65 2c 20 22 75  , "esp":true, "u
5df0: 6e 69 74 22 3a 74 72 75 65 2c 20 22 6e 75 6d 22  nit":true, "num"
5e00: 3a 74 72 75 65 7d 27 5d 29 3b 0a 20 20 20 20 20  :true}']);.     
5e10: 20 20 20 20 20 20 20 78 50 72 6f 6d 69 73 65 2e         xPromise.
5e20: 74 68 65 6e 28 0a 20 20 20 20 20 20 20 20 20 20  then(.          
5e30: 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 28        function (
5e40: 61 56 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 20  aVal) {.        
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 78 54 65 73              xTes
5e60: 74 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74  tPanel.port.emit
5e70: 28 22 61 64 64 45 6c 65 6d 22 2c 20 27 44 6f 6e  ("addElem", 'Don
5e80: 65 2e 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e.');.          
5e90: 20 20 20 20 20 20 20 20 20 20 78 54 65 73 74 50            xTestP
5ea0: 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22  anel.port.emit("
5eb0: 61 64 64 45 6c 65 6d 22 2c 20 61 56 61 6c 29 3b  addElem", aVal);
5ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5ed0: 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   },.            
5ee0: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 28 61 52      function (aR
5ef0: 65 61 73 6f 6e 29 20 7b 0a 20 20 20 20 20 20 20  eason) {.       
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 78 54 65               xTe
5f10: 73 74 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69  stPanel.port.emi
5f20: 74 28 22 61 64 64 45 6c 65 6d 22 2c 20 27 50 72  t("addElem", 'Pr
5f30: 6f 6d 69 73 65 20 72 65 6a 65 63 74 65 64 27 29  omise rejected')
5f40: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
5f50: 20 20 20 20 20 20 78 54 65 73 74 50 61 6e 65 6c        xTestPanel
5f60: 2e 70 6f 72 74 2e 65 6d 69 74 28 22 61 64 64 45  .port.emit("addE
5f70: 6c 65 6d 22 2c 20 61 52 65 61 73 6f 6e 29 3b 0a  lem", aReason);.
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f90: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 2e  }.            ).
5fa0: 63 61 74 63 68 28 0a 20 20 20 20 20 20 20 20 20  catch(.         
5fb0: 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20         function 
5fc0: 28 61 43 61 75 67 68 74 29 20 7b 0a 20 20 20 20  (aCaught) {.    
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fe0: 78 54 65 73 74 50 61 6e 65 6c 2e 70 6f 72 74 2e  xTestPanel.port.
5ff0: 65 6d 69 74 28 22 61 64 64 45 6c 65 6d 22 2c 20  emit("addElem", 
6000: 27 50 72 6f 6d 69 73 65 20 45 72 72 6f 72 27 29  'Promise Error')
6010: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
6020: 20 20 20 20 20 20 78 54 65 73 74 50 61 6e 65 6c        xTestPanel
6030: 2e 70 6f 72 74 2e 65 6d 69 74 28 22 61 64 64 45  .port.emit("addE
6040: 6c 65 6d 22 2c 20 61 43 61 75 67 68 74 29 3b 0a  lem", aCaught);.
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6060: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0a  }.            ).
6070: 20 20 20 20 20 20 20 20 7d 29 3b 0a 0a 20 20 20          });..   
6080: 20 20 20 20 20 78 54 65 73 74 50 61 6e 65 6c 2e       xTestPanel.
6090: 70 6f 72 74 2e 6f 6e 28 22 63 6c 6f 73 65 50 61  port.on("closePa
60a0: 6e 65 6c 22 2c 20 66 75 6e 63 74 69 6f 6e 20 28  nel", function (
60b0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
60c0: 78 54 65 73 74 50 61 6e 65 6c 2e 68 69 64 65 28  xTestPanel.hide(
60d0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 20  );.        });. 
60e0: 20 20 20 7d 0a 7d 0a 0a 63 6f 6e 73 74 20 78 48     }.}..const xH
60f0: 6f 74 6b 65 79 46 75 6c 6c 54 65 73 74 73 20 3d  otkeyFullTests =
6100: 20 68 6f 74 6b 65 79 73 2e 48 6f 74 6b 65 79 28   hotkeys.Hotkey(
6110: 7b 0a 20 20 20 20 63 6f 6d 62 6f 3a 20 22 61 63  {.    combo: "ac
6120: 63 65 6c 2d 73 68 69 66 74 2d 66 31 32 22 2c 0a  cel-shift-f12",.
6130: 20 20 20 20 6f 6e 50 72 65 73 73 3a 20 66 75 6e      onPress: fun
6140: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20  ction () {.     
6150: 20 20 20 63 72 65 61 74 65 54 65 73 74 50 61 6e     createTestPan
6160: 65 6c 28 29 3b 0a 20 20 20 20 20 20 20 20 78 54  el();.        xT
6170: 65 73 74 50 61 6e 65 6c 2e 73 68 6f 77 28 7b 70  estPanel.show({p
6180: 6f 73 69 74 69 6f 6e 3a 20 78 4d 61 69 6e 42 75  osition: xMainBu
6190: 74 74 6f 6e 7d 29 3b 0a 20 20 20 20 7d 0a 7d 29  tton});.    }.})
61a0: 3b 0a 0a 0a 0a 2f 2a 0a 20 20 20 20 43 6f 6e 74  ;..../*.    Cont
61b0: 65 78 74 20 6d 65 6e 75 0a 2a 2f 0a 0a 2f 2f 20  ext menu.*/..// 
61c0: 47 72 61 6d 6d 61 72 20 63 68 65 63 6b 65 72 0a  Grammar checker.
61d0: 63 6f 6e 73 74 20 78 4d 65 6e 75 49 74 65 6d 54  const xMenuItemT
61e0: 65 78 74 41 72 65 61 47 43 20 3d 20 63 6f 6e 74  extAreaGC = cont
61f0: 65 78 74 6d 65 6e 75 2e 49 74 65 6d 20 28 7b 0a  extmenu.Item ({.
6200: 20 20 20 20 6c 61 62 65 6c 3a 20 5f 28 22 63 68      label: _("ch
6210: 65 63 6b 54 65 78 74 22 29 2c 0a 20 20 20 20 69  eckText"),.    i
6220: 6d 61 67 65 3a 20 73 65 6c 66 2e 64 61 74 61 2e  mage: self.data.
6230: 75 72 6c 28 22 2e 2f 69 6d 67 2f 69 63 6f 6e 2d  url("./img/icon-
6240: 31 36 2e 70 6e 67 22 29 2c 0a 20 20 20 20 63 6f  16.png"),.    co
6250: 6e 74 65 6e 74 53 63 72 69 70 74 3a 20 27 73 65  ntentScript: 'se
6260: 6c 66 2e 6f 6e 28 22 63 6c 69 63 6b 22 2c 20 66  lf.on("click", f
6270: 75 6e 63 74 69 6f 6e 20 28 6e 6f 64 65 2c 20 64  unction (node, d
6280: 61 74 61 29 20 7b 27 20 2b 0a 20 20 20 20 20 20  ata) {' +.      
6290: 20 20 20 20 20 20 20 20 20 20 20 20 20 27 20 20               '  
62a0: 73 65 6c 66 2e 70 6f 73 74 4d 65 73 73 61 67 65  self.postMessage
62b0: 28 6e 6f 64 65 2e 76 61 6c 75 65 29 3b 27 20 2b  (node.value);' +
62c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
62d0: 20 20 20 20 27 7d 29 3b 27 2c 0a 20 20 20 20 61      '});',.    a
62e0: 63 63 65 73 73 4b 65 79 3a 20 22 67 22 2c 0a 20  ccessKey: "g",. 
62f0: 20 20 20 6f 6e 4d 65 73 73 61 67 65 3a 20 66 75     onMessage: fu
6300: 6e 63 74 69 6f 6e 20 28 73 54 65 78 74 29 20 7b  nction (sText) {
6310: 0a 20 20 20 20 20 20 20 20 63 72 65 61 74 65 47  .        createG
6320: 43 50 61 6e 65 6c 28 29 3b 0a 20 20 20 20 20 20  CPanel();.      
6330: 20 20 69 66 20 28 21 78 47 43 50 61 6e 65 6c 2e    if (!xGCPanel.
6340: 69 73 53 68 6f 77 69 6e 67 29 20 7b 0a 20 20 20  isShowing) {.   
6350: 20 20 20 20 20 20 20 20 20 78 47 43 50 61 6e 65           xGCPane
6360: 6c 2e 73 68 6f 77 28 7b 70 6f 73 69 74 69 6f 6e  l.show({position
6370: 3a 20 78 4d 61 69 6e 42 75 74 74 6f 6e 7d 29 3b  : xMainButton});
6380: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
6390: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 47  {.            xG
63a0: 43 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74  CPanel.port.emit
63b0: 28 22 63 6c 65 61 72 45 72 72 6f 72 73 22 29 3b  ("clearErrors");
63c0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
63d0: 20 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72     xActiveWorker
63e0: 20 3d 20 74 61 62 73 2e 61 63 74 69 76 65 54 61   = tabs.activeTa
63f0: 62 2e 61 74 74 61 63 68 28 7b 0a 20 20 20 20 20  b.attach({.     
6400: 20 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 53 63         contentSc
6410: 72 69 70 74 46 69 6c 65 3a 20 73 65 6c 66 2e 64  riptFile: self.d
6420: 61 74 61 2e 75 72 6c 28 22 72 65 70 6c 61 63 65  ata.url("replace
6430: 5f 74 65 78 74 2e 6a 73 22 29 0a 20 20 20 20 20  _text.js").     
6440: 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 78     });.        x
6450: 41 63 74 69 76 65 57 6f 72 6b 65 72 2e 70 6f 72  ActiveWorker.por
6460: 74 2e 65 6d 69 74 28 22 73 65 74 41 63 74 69 76  t.emit("setActiv
6470: 65 45 6c 65 6d 65 6e 74 22 2c 20 66 61 6c 73 65  eElement", false
6480: 29 3b 0a 20 20 20 20 20 20 20 20 78 41 63 74 69  );.        xActi
6490: 76 65 57 6f 72 6b 65 72 2e 70 6f 72 74 2e 6f 6e  veWorker.port.on
64a0: 28 22 65 6d 69 74 50 61 72 61 67 72 61 70 68 22  ("emitParagraph"
64b0: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 69 50 61 72  , function (iPar
64c0: 61 67 72 61 70 68 2c 20 73 50 61 72 61 67 72 61  agraph, sParagra
64d0: 70 68 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ph) {.          
64e0: 20 20 63 68 65 63 6b 41 6e 64 53 65 6e 64 54 6f    checkAndSendTo
64f0: 50 61 6e 65 6c 28 69 50 61 72 61 67 72 61 70 68  Panel(iParagraph
6500: 2e 74 6f 53 74 72 69 6e 67 28 29 2c 20 73 50 61  .toString(), sPa
6510: 72 61 67 72 61 70 68 29 3b 0a 20 20 20 20 20 20  ragraph);.      
6520: 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 78 41    });.        xA
6530: 63 74 69 76 65 57 6f 72 6b 65 72 2e 70 6f 72 74  ctiveWorker.port
6540: 2e 6f 6e 28 22 63 6c 6f 73 65 47 43 50 61 6e 65  .on("closeGCPane
6550: 6c 22 2c 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  l", function() {
6560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 41 63  .            xAc
6570: 74 69 76 65 57 6f 72 6b 65 72 20 3d 20 6e 75 6c  tiveWorker = nul
6580: 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78  l;.            x
6590: 47 43 50 61 6e 65 6c 2e 68 69 64 65 28 29 3b 0a  GCPanel.hide();.
65a0: 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20          });.    
65b0: 20 20 20 20 73 65 6e 64 54 65 78 74 54 6f 50 61      sendTextToPa
65c0: 6e 65 6c 28 73 54 65 78 74 29 3b 0a 20 20 20 20  nel(sText);.    
65d0: 7d 0a 7d 29 3b 0a 0a 63 6f 6e 73 74 20 78 4d 65  }.});..const xMe
65e0: 6e 75 49 74 65 6d 53 65 6c 65 63 74 69 6f 6e 47  nuItemSelectionG
65f0: 43 20 3d 20 63 6f 6e 74 65 78 74 6d 65 6e 75 2e  C = contextmenu.
6600: 49 74 65 6d 20 28 7b 0a 20 20 20 20 6c 61 62 65  Item ({.    labe
6610: 6c 3a 20 5f 28 22 63 68 65 63 6b 54 65 78 74 22  l: _("checkText"
6620: 29 2c 0a 20 20 20 20 69 6d 61 67 65 3a 20 73 65  ),.    image: se
6630: 6c 66 2e 64 61 74 61 2e 75 72 6c 28 22 2e 2f 69  lf.data.url("./i
6640: 6d 67 2f 69 63 6f 6e 2d 31 36 2e 70 6e 67 22 29  mg/icon-16.png")
6650: 2c 0a 20 20 20 20 63 6f 6e 74 65 6e 74 53 63 72  ,.    contentScr
6660: 69 70 74 3a 20 27 73 65 6c 66 2e 6f 6e 28 22 63  ipt: 'self.on("c
6670: 6c 69 63 6b 22 2c 20 66 75 6e 63 74 69 6f 6e 20  lick", function 
6680: 28 29 20 7b 27 20 2b 0a 20 20 20 20 20 20 20 20  () {' +.        
6690: 20 20 20 20 20 20 20 20 20 20 20 27 20 20 6c 65             '  le
66a0: 74 20 73 54 65 78 74 20 3d 20 77 69 6e 64 6f 77  t sText = window
66b0: 2e 67 65 74 53 65 6c 65 63 74 69 6f 6e 28 29 2e  .getSelection().
66c0: 74 6f 53 74 72 69 6e 67 28 29 3b 27 20 2b 0a 20  toString();' +. 
66d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66e0: 20 20 27 20 20 73 65 6c 66 2e 70 6f 73 74 4d 65    '  self.postMe
66f0: 73 73 61 67 65 28 73 54 65 78 74 29 3b 27 20 2b  ssage(sText);' +
6700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6710: 20 20 20 20 27 7d 29 3b 27 2c 0a 20 20 20 20 61      '});',.    a
6720: 63 63 65 73 73 4b 65 79 3a 20 22 67 22 2c 0a 20  ccessKey: "g",. 
6730: 20 20 20 6f 6e 4d 65 73 73 61 67 65 3a 20 66 75     onMessage: fu
6740: 6e 63 74 69 6f 6e 20 28 73 54 65 78 74 29 20 7b  nction (sText) {
6750: 0a 20 20 20 20 20 20 20 20 63 72 65 61 74 65 47  .        createG
6760: 43 50 61 6e 65 6c 28 29 3b 0a 20 20 20 20 20 20  CPanel();.      
6770: 20 20 69 66 20 28 21 78 47 43 50 61 6e 65 6c 2e    if (!xGCPanel.
6780: 69 73 53 68 6f 77 69 6e 67 29 20 7b 0a 20 20 20  isShowing) {.   
6790: 20 20 20 20 20 20 20 20 20 78 47 43 50 61 6e 65           xGCPane
67a0: 6c 2e 73 68 6f 77 28 7b 70 6f 73 69 74 69 6f 6e  l.show({position
67b0: 3a 20 78 4d 61 69 6e 42 75 74 74 6f 6e 7d 29 3b  : xMainButton});
67c0: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
67d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 47  {.            xG
67e0: 43 50 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74  CPanel.port.emit
67f0: 28 22 63 6c 65 61 72 45 72 72 6f 72 73 22 29 3b  ("clearErrors");
6800: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
6810: 20 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72     xActiveWorker
6820: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20   = null;.       
6830: 20 73 65 6e 64 54 65 78 74 54 6f 50 61 6e 65 6c   sendTextToPanel
6840: 28 73 54 65 78 74 29 3b 0a 20 20 20 20 7d 0a 7d  (sText);.    }.}
6850: 29 3b 0a 0a 2f 2f 20 54 65 78 74 20 46 6f 72 6d  );..// Text Form
6860: 61 74 74 65 72 0a 63 6f 6e 73 74 20 78 4d 65 6e  atter.const xMen
6870: 75 49 74 65 6d 54 65 78 74 46 6f 72 6d 61 74 74  uItemTextFormatt
6880: 65 72 20 3d 20 63 6f 6e 74 65 78 74 6d 65 6e 75  er = contextmenu
6890: 2e 49 74 65 6d 20 28 7b 0a 20 20 20 20 6c 61 62  .Item ({.    lab
68a0: 65 6c 3a 20 5f 28 22 74 65 78 74 46 6f 72 6d 61  el: _("textForma
68b0: 74 74 65 72 22 29 2c 0a 20 20 20 20 69 6d 61 67  tter"),.    imag
68c0: 65 3a 20 73 65 6c 66 2e 64 61 74 61 2e 75 72 6c  e: self.data.url
68d0: 28 22 2e 2f 69 6d 67 2f 69 63 6f 6e 2d 31 36 2e  ("./img/icon-16.
68e0: 70 6e 67 22 29 2c 0a 20 20 20 20 63 6f 6e 74 65  png"),.    conte
68f0: 78 74 3a 20 63 6f 6e 74 65 78 74 6d 65 6e 75 2e  xt: contextmenu.
6900: 53 65 6c 65 63 74 6f 72 43 6f 6e 74 65 78 74 28  SelectorContext(
6910: 22 74 65 78 74 61 72 65 61 22 29 2c 0a 20 20 20  "textarea"),.   
6920: 20 63 6f 6e 74 65 6e 74 53 63 72 69 70 74 3a 20   contentScript: 
6930: 27 73 65 6c 66 2e 6f 6e 28 22 63 6c 69 63 6b 22  'self.on("click"
6940: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 6e 6f 64 65  , function (node
6950: 2c 20 64 61 74 61 29 20 7b 27 20 2b 0a 20 20 20  , data) {' +.   
6960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6970: 27 20 20 73 65 6c 66 2e 70 6f 73 74 4d 65 73 73  '  self.postMess
6980: 61 67 65 28 6e 6f 64 65 2e 76 61 6c 75 65 29 3b  age(node.value);
6990: 27 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ' +.            
69a0: 20 20 20 20 20 20 20 27 7d 29 3b 27 2c 0a 20 20         '});',.  
69b0: 20 20 61 63 63 65 73 73 4b 65 79 3a 20 22 63 22    accessKey: "c"
69c0: 2c 0a 20 20 20 20 6f 6e 4d 65 73 73 61 67 65 3a  ,.    onMessage:
69d0: 20 66 75 6e 63 74 69 6f 6e 20 28 73 56 61 6c 75   function (sValu
69e0: 65 29 20 7b 0a 20 20 20 20 20 20 20 20 6c 6f 61  e) {.        loa
69f0: 64 54 65 78 74 46 6f 72 6d 61 74 74 65 72 28 29  dTextFormatter()
6a00: 3b 0a 20 20 20 20 20 20 20 20 63 72 65 61 74 65  ;.        create
6a10: 54 46 50 61 6e 65 6c 28 29 3b 0a 20 20 20 20 20  TFPanel();.     
6a20: 20 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72     xActiveWorker
6a30: 20 3d 20 74 61 62 73 2e 61 63 74 69 76 65 54 61   = tabs.activeTa
6a40: 62 2e 61 74 74 61 63 68 28 7b 0a 20 20 20 20 20  b.attach({.     
6a50: 20 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 53 63         contentSc
6a60: 72 69 70 74 46 69 6c 65 3a 20 73 65 6c 66 2e 64  riptFile: self.d
6a70: 61 74 61 2e 75 72 6c 28 22 72 65 70 6c 61 63 65  ata.url("replace
6a80: 5f 74 65 78 74 2e 6a 73 22 29 0a 20 20 20 20 20  _text.js").     
6a90: 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 78     });.        x
6aa0: 41 63 74 69 76 65 57 6f 72 6b 65 72 2e 70 6f 72  ActiveWorker.por
6ab0: 74 2e 65 6d 69 74 28 22 73 65 74 41 63 74 69 76  t.emit("setActiv
6ac0: 65 45 6c 65 6d 65 6e 74 22 2c 20 66 61 6c 73 65  eElement", false
6ad0: 29 3b 0a 20 20 20 20 20 20 20 20 78 41 63 74 69  );.        xActi
6ae0: 76 65 57 6f 72 6b 65 72 2e 70 6f 72 74 2e 6f 6e  veWorker.port.on
6af0: 28 22 65 6d 69 74 54 65 78 74 22 2c 20 66 75 6e  ("emitText", fun
6b00: 63 74 69 6f 6e 20 28 73 54 65 78 74 29 20 7b 0a  ction (sText) {.
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 78 54 46 50              xTFP
6b20: 61 6e 65 6c 2e 70 6f 72 74 2e 65 6d 69 74 28 22  anel.port.emit("
6b30: 72 65 63 65 69 76 65 54 65 78 74 54 6f 46 6f 72  receiveTextToFor
6b40: 6d 61 74 22 2c 20 73 54 65 78 74 29 3b 0a 20 20  mat", sText);.  
6b50: 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20        });.      
6b60: 20 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72 2e    xActiveWorker.
6b70: 70 6f 72 74 2e 6f 6e 28 22 63 6c 6f 73 65 54 46  port.on("closeTF
6b80: 50 61 6e 65 6c 22 2c 20 66 75 6e 63 74 69 6f 6e  Panel", function
6b90: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  () {.           
6ba0: 20 78 41 63 74 69 76 65 57 6f 72 6b 65 72 20 3d   xActiveWorker =
6bb0: 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 20   null;.         
6bc0: 20 20 20 78 54 46 50 61 6e 65 6c 2e 68 69 64 65     xTFPanel.hide
6bd0: 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a  ();.        });.
6be0: 20 20 20 20 20 20 20 20 78 54 46 50 61 6e 65 6c          xTFPanel
6bf0: 2e 73 68 6f 77 28 7b 70 6f 73 69 74 69 6f 6e 3a  .show({position:
6c00: 20 78 4d 61 69 6e 42 75 74 74 6f 6e 7d 29 3b 0a   xMainButton});.
6c10: 20 20 20 20 7d 0a 7d 29 3b 0a 0a 2f 2f 20 4c 65      }.});..// Le
6c20: 78 69 63 6f 67 72 61 70 68 65 72 0a 63 6f 6e 73  xicographer.cons
6c30: 74 20 78 4d 65 6e 75 49 74 65 6d 53 65 6c 65 63  t xMenuItemSelec
6c40: 74 69 6f 6e 4c 78 67 20 3d 20 63 6f 6e 74 65 78  tionLxg = contex
6c50: 74 6d 65 6e 75 2e 49 74 65 6d 20 28 7b 0a 20 20  tmenu.Item ({.  
6c60: 20 20 6c 61 62 65 6c 3a 20 5f 28 22 6c 65 78 69    label: _("lexi
6c70: 63 6f 67 72 61 70 68 65 72 22 29 2c 0a 20 20 20  cographer"),.   
6c80: 20 69 6d 61 67 65 3a 20 73 65 6c 66 2e 64 61 74   image: self.dat
6c90: 61 2e 75 72 6c 28 22 2e 2f 69 6d 67 2f 69 63 6f  a.url("./img/ico
6ca0: 6e 2d 31 36 2e 70 6e 67 22 29 2c 0a 20 20 20 20  n-16.png"),.    
6cb0: 63 6f 6e 74 65 6e 74 53 63 72 69 70 74 3a 20 27  contentScript: '
6cc0: 73 65 6c 66 2e 6f 6e 28 22 63 6c 69 63 6b 22 2c  self.on("click",
6cd0: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 27 20   function () {' 
6ce0: 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
6cf0: 20 20 20 20 20 27 20 20 6c 65 74 20 73 54 65 78       '  let sTex
6d00: 74 20 3d 20 77 69 6e 64 6f 77 2e 67 65 74 53 65  t = window.getSe
6d10: 6c 65 63 74 69 6f 6e 28 29 2e 74 6f 53 74 72 69  lection().toStri
6d20: 6e 67 28 29 3b 27 20 2b 0a 20 20 20 20 20 20 20  ng();' +.       
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 27 20 20 73              '  s
6d40: 65 6c 66 2e 70 6f 73 74 4d 65 73 73 61 67 65 28  elf.postMessage(
6d50: 73 54 65 78 74 29 3b 27 20 2b 0a 20 20 20 20 20  sText);' +.     
6d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 7d                '}
6d70: 29 3b 27 2c 0a 20 20 20 20 61 63 63 65 73 73 4b  );',.    accessK
6d80: 65 79 3a 20 22 6c 22 2c 0a 20 20 20 20 6f 6e 4d  ey: "l",.    onM
6d90: 65 73 73 61 67 65 3a 20 66 75 6e 63 74 69 6f 6e  essage: function
6da0: 20 28 73 54 65 78 74 29 20 7b 0a 20 20 20 20 20   (sText) {.     
6db0: 20 20 20 63 72 65 61 74 65 4c 78 67 50 61 6e 65     createLxgPane
6dc0: 6c 28 29 3b 0a 20 20 20 20 20 20 20 20 78 4c 78  l();.        xLx
6dd0: 67 50 61 6e 65 6c 2e 73 68 6f 77 28 7b 70 6f 73  gPanel.show({pos
6de0: 69 74 69 6f 6e 3a 20 78 4d 61 69 6e 42 75 74 74  ition: xMainButt
6df0: 6f 6e 7d 29 3b 0a 20 20 20 20 20 20 20 20 61 6e  on});.        an
6e00: 61 6c 79 7a 65 57 6f 72 64 73 28 73 54 65 78 74  alyzeWords(sText
6e10: 29 3b 0a 20 20 20 20 7d 0a 7d 29 3b 0a 0a 63 6f  );.    }.});..co
6e20: 6e 73 74 20 78 4d 65 6e 75 49 74 65 6d 54 65 78  nst xMenuItemTex
6e30: 74 41 72 65 61 4c 78 67 20 3d 20 63 6f 6e 74 65  tAreaLxg = conte
6e40: 78 74 6d 65 6e 75 2e 49 74 65 6d 20 28 7b 0a 20  xtmenu.Item ({. 
6e50: 20 20 20 6c 61 62 65 6c 3a 20 5f 28 22 6c 65 78     label: _("lex
6e60: 69 63 6f 67 72 61 70 68 65 72 22 29 2c 0a 20 20  icographer"),.  
6e70: 20 20 69 6d 61 67 65 3a 20 73 65 6c 66 2e 64 61    image: self.da
6e80: 74 61 2e 75 72 6c 28 22 2e 2f 69 6d 67 2f 69 63  ta.url("./img/ic
6e90: 6f 6e 2d 31 36 2e 70 6e 67 22 29 2c 0a 20 20 20  on-16.png"),.   
6ea0: 20 63 6f 6e 74 65 6e 74 53 63 72 69 70 74 3a 20   contentScript: 
6eb0: 27 73 65 6c 66 2e 6f 6e 28 22 63 6c 69 63 6b 22  'self.on("click"
6ec0: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 6e 6f 64 65  , function (node
6ed0: 2c 20 64 61 74 61 29 20 7b 27 20 2b 0a 20 20 20  , data) {' +.   
6ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ef0: 27 20 20 73 65 6c 66 2e 70 6f 73 74 4d 65 73 73  '  self.postMess
6f00: 61 67 65 28 6e 6f 64 65 2e 76 61 6c 75 65 29 3b  age(node.value);
6f10: 27 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ' +.            
6f20: 20 20 20 20 20 20 20 27 7d 29 3b 27 2c 0a 20 20         '});',.  
6f30: 20 20 61 63 63 65 73 73 4b 65 79 3a 20 22 6c 22    accessKey: "l"
6f40: 2c 0a 20 20 20 20 6f 6e 4d 65 73 73 61 67 65 3a  ,.    onMessage:
6f50: 20 66 75 6e 63 74 69 6f 6e 20 28 73 54 65 78 74   function (sText
6f60: 29 20 7b 0a 20 20 20 20 20 20 20 20 63 72 65 61  ) {.        crea
6f70: 74 65 4c 78 67 50 61 6e 65 6c 28 29 3b 0a 20 20  teLxgPanel();.  
6f80: 20 20 20 20 20 20 78 4c 78 67 50 61 6e 65 6c 2e        xLxgPanel.
6f90: 73 68 6f 77 28 7b 70 6f 73 69 74 69 6f 6e 3a 20  show({position: 
6fa0: 78 4d 61 69 6e 42 75 74 74 6f 6e 7d 29 3b 0a 20  xMainButton});. 
6fb0: 20 20 20 20 20 20 20 61 6e 61 6c 79 7a 65 57 6f         analyzeWo
6fc0: 72 64 73 28 73 54 65 78 74 29 3b 0a 20 20 20 20  rds(sText);.    
6fd0: 7d 0a 7d 29 3b 0a 0a 0a 2f 2f 20 54 65 78 74 41  }.});...// TextA
6fe0: 72 65 61 0a 63 6f 6e 73 74 20 78 4d 65 6e 75 54  rea.const xMenuT
6ff0: 65 78 74 41 72 65 61 20 3d 20 63 6f 6e 74 65 78  extArea = contex
7000: 74 6d 65 6e 75 2e 4d 65 6e 75 28 7b 0a 20 20 20  tmenu.Menu({.   
7010: 20 6c 61 62 65 6c 3a 20 22 47 72 61 6d 6d 61 6c   label: "Grammal
7020: 65 63 74 65 22 2c 0a 20 20 20 20 69 6d 61 67 65  ecte",.    image
7030: 3a 20 73 65 6c 66 2e 64 61 74 61 2e 75 72 6c 28  : self.data.url(
7040: 22 2e 2f 69 6d 67 2f 69 63 6f 6e 2d 31 36 2e 70  "./img/icon-16.p
7050: 6e 67 22 29 2c 0a 20 20 20 20 63 6f 6e 74 65 78  ng"),.    contex
7060: 74 3a 20 63 6f 6e 74 65 78 74 6d 65 6e 75 2e 53  t: contextmenu.S
7070: 65 6c 65 63 74 6f 72 43 6f 6e 74 65 78 74 28 22  electorContext("
7080: 74 65 78 74 61 72 65 61 2c 20 69 6e 70 75 74 5b  textarea, input[
7090: 74 79 70 65 3d 27 74 65 78 74 27 5d 22 29 2c 0a  type='text']"),.
70a0: 20 20 20 20 61 63 63 65 73 73 4b 65 79 3a 20 22      accessKey: "
70b0: 67 22 2c 0a 20 20 20 20 69 74 65 6d 73 3a 20 5b  g",.    items: [
70c0: 78 4d 65 6e 75 49 74 65 6d 54 65 78 74 41 72 65  xMenuItemTextAre
70d0: 61 47 43 2c 20 78 4d 65 6e 75 49 74 65 6d 54 65  aGC, xMenuItemTe
70e0: 78 74 46 6f 72 6d 61 74 74 65 72 2c 20 78 4d 65  xtFormatter, xMe
70f0: 6e 75 49 74 65 6d 54 65 78 74 41 72 65 61 4c 78  nuItemTextAreaLx
7100: 67 5d 0a 7d 29 3b 0a 0a 2f 2f 20 53 65 6c 65 63  g].});..// Selec
7110: 74 69 6f 6e 0a 63 6f 6e 73 74 20 78 4d 65 6e 75  tion.const xMenu
7120: 53 65 6c 65 63 74 69 6f 6e 20 3d 20 63 6f 6e 74  Selection = cont
7130: 65 78 74 6d 65 6e 75 2e 4d 65 6e 75 28 7b 0a 20  extmenu.Menu({. 
7140: 20 20 20 6c 61 62 65 6c 3a 20 22 47 72 61 6d 6d     label: "Gramm
7150: 61 6c 65 63 74 65 22 2c 0a 20 20 20 20 69 6d 61  alecte",.    ima
7160: 67 65 3a 20 73 65 6c 66 2e 64 61 74 61 2e 75 72  ge: self.data.ur
7170: 6c 28 22 2e 2f 69 6d 67 2f 69 63 6f 6e 2d 31 36  l("./img/icon-16
7180: 2e 70 6e 67 22 29 2c 0a 20 20 20 20 63 6f 6e 74  .png"),.    cont
7190: 65 78 74 3a 20 5b 63 6f 6e 74 65 78 74 6d 65 6e  ext: [contextmen
71a0: 75 2e 53 65 6c 65 63 74 69 6f 6e 43 6f 6e 74 65  u.SelectionConte
71b0: 78 74 28 29 2c 20 63 6f 6e 74 65 78 74 6d 65 6e  xt(), contextmen
71c0: 75 2e 50 72 65 64 69 63 61 74 65 43 6f 6e 74 65  u.PredicateConte
71d0: 78 74 28 66 75 6e 63 74 69 6f 6e 20 28 63 6f 6e  xt(function (con
71e0: 74 65 78 74 29 20 7b 0a 20 20 20 20 20 20 20 20  text) {.        
71f0: 69 66 20 28 63 6f 6e 74 65 78 74 2e 74 61 72 67  if (context.targ
7200: 65 74 4e 61 6d 65 20 3d 3d 3d 20 22 74 65 78 74  etName === "text
7210: 61 72 65 61 22 20 7c 7c 20 63 6f 6e 74 65 78 74  area" || context
7220: 2e 74 61 72 67 65 74 4e 61 6d 65 20 3d 3d 20 22  .targetName == "
7230: 69 6e 70 75 74 22 29 20 7b 0a 20 20 20 20 20 20  input") {.      
7240: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
7250: 73 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  se;.        }.  
7260: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
7270: 65 3b 0a 20 20 20 20 7d 29 5d 2c 0a 20 20 20 20  e;.    })],.    
7280: 61 63 63 65 73 73 4b 65 79 3a 20 22 67 22 2c 0a  accessKey: "g",.
7290: 20 20 20 20 69 74 65 6d 73 3a 20 5b 78 4d 65 6e      items: [xMen
72a0: 75 49 74 65 6d 53 65 6c 65 63 74 69 6f 6e 47 43  uItemSelectionGC
72b0: 2c 20 78 4d 65 6e 75 49 74 65 6d 53 65 6c 65 63  , xMenuItemSelec
72c0: 74 69 6f 6e 4c 78 67 5d 0a 7d 29 3b 0a           tionLxg].});.