Grammalecte  Hex Artifact Content

Artifact 499bdc1ad7585de6f7cf88b5b7448a3846a8e2ddb76773f569339f9640d10a6f:


0000: 2f 2f 20 4a 61 76 61 53 63 72 69 70 74 0a 0a 22  // JavaScript.."
0010: 75 73 65 20 73 74 72 69 63 74 22 3b 0a 0a 66 75  use strict";..fu
0020: 6e 63 74 69 6f 6e 20 6f 6e 47 72 61 6d 6d 61 6c  nction onGrammal
0030: 65 63 74 65 47 43 50 61 6e 65 6c 43 6c 69 63 6b  ecteGCPanelClick
0040: 20 28 78 45 76 65 6e 74 29 20 7b 0a 20 20 20 20   (xEvent) {.    
0050: 74 72 79 20 7b 0a 20 20 20 20 20 20 20 20 6c 65  try {.        le
0060: 74 20 78 45 6c 65 6d 20 3d 20 78 45 76 65 6e 74  t xElem = xEvent
0070: 2e 74 61 72 67 65 74 3b 0a 20 20 20 20 20 20 20  .target;.       
0080: 20 69 66 20 28 78 45 6c 65 6d 2e 69 64 29 20 7b   if (xElem.id) {
0090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
00a0: 28 78 45 6c 65 6d 2e 69 64 2e 73 74 61 72 74 73  (xElem.id.starts
00b0: 57 69 74 68 28 22 67 72 61 6d 6d 61 6c 65 63 74  With("grammalect
00c0: 65 5f 73 75 67 67 22 29 29 20 7b 0a 20 20 20 20  e_sugg")) {.    
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 47 72 61              oGra
00e0: 6d 6d 61 6c 65 63 74 65 2e 6f 47 43 50 61 6e 65  mmalecte.oGCPane
00f0: 6c 2e 61 70 70 6c 79 53 75 67 67 65 73 74 69 6f  l.applySuggestio
0100: 6e 28 78 45 6c 65 6d 2e 69 64 29 3b 0a 20 20 20  n(xElem.id);.   
0110: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
0120: 69 66 20 28 78 45 6c 65 6d 2e 69 64 20 3d 3d 3d  if (xElem.id ===
0130: 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f   "grammalecte_to
0140: 6f 6c 74 69 70 5f 69 67 6e 6f 72 65 22 29 20 7b  oltip_ignore") {
0150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0160: 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f 47   oGrammalecte.oG
0170: 43 50 61 6e 65 6c 2e 69 67 6e 6f 72 65 45 72 72  CPanel.ignoreErr
0180: 6f 72 28 78 45 6c 65 6d 2e 69 64 29 3b 0a 20 20  or(xElem.id);.  
0190: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
01a0: 20 69 66 20 28 78 45 6c 65 6d 2e 69 64 2e 73 74   if (xElem.id.st
01b0: 61 72 74 73 57 69 74 68 28 22 67 72 61 6d 6d 61  artsWith("gramma
01c0: 6c 65 63 74 65 5f 63 68 65 63 6b 22 29 29 20 7b  lecte_check")) {
01d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
01e0: 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f 47   oGrammalecte.oG
01f0: 43 50 61 6e 65 6c 2e 72 65 63 68 65 63 6b 50 61  CPanel.recheckPa
0200: 72 61 67 72 61 70 68 28 70 61 72 73 65 49 6e 74  ragraph(parseInt
0210: 28 78 45 6c 65 6d 2e 64 61 74 61 73 65 74 2e 70  (xElem.dataset.p
0220: 61 72 61 5f 6e 75 6d 29 29 3b 0a 20 20 20 20 20  ara_num));.     
0230: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
0240: 20 28 78 45 6c 65 6d 2e 69 64 2e 73 74 61 72 74   (xElem.id.start
0250: 73 57 69 74 68 28 22 67 72 61 6d 6d 61 6c 65 63  sWith("grammalec
0260: 74 65 5f 68 69 64 65 22 29 29 20 7b 0a 20 20 20  te_hide")) {.   
0270: 20 20 20 20 20 20 20 20 20 20 20 20 20 78 45 6c               xEl
0280: 65 6d 2e 70 61 72 65 6e 74 4e 6f 64 65 2e 70 61  em.parentNode.pa
0290: 72 65 6e 74 4e 6f 64 65 2e 73 74 79 6c 65 2e 64  rentNode.style.d
02a0: 69 73 70 6c 61 79 20 3d 20 22 6e 6f 6e 65 22 3b  isplay = "none";
02b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
02c0: 6c 73 65 20 69 66 20 28 78 45 6c 65 6d 2e 69 64  lse if (xElem.id
02d0: 2e 73 74 61 72 74 73 57 69 74 68 28 22 67 72 61  .startsWith("gra
02e0: 6d 6d 61 6c 65 63 74 65 5f 65 72 72 22 29 0a 20  mmalecte_err"). 
02f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0300: 20 20 20 20 20 20 26 26 20 78 45 6c 65 6d 2e 63        && xElem.c
0310: 6c 61 73 73 4e 61 6d 65 20 21 3d 3d 20 22 67 72  lassName !== "gr
0320: 61 6d 6d 61 6c 65 63 74 65 5f 65 72 72 6f 72 5f  ammalecte_error_
0330: 63 6f 72 72 65 63 74 65 64 22 0a 20 20 20 20 20  corrected".     
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0350: 20 20 26 26 20 78 45 6c 65 6d 2e 63 6c 61 73 73    && xElem.class
0360: 4e 61 6d 65 20 21 3d 3d 20 22 67 72 61 6d 6d 61  Name !== "gramma
0370: 6c 65 63 74 65 5f 65 72 72 6f 72 5f 69 67 6e 6f  lecte_error_igno
0380: 72 65 64 22 29 20 7b 0a 20 20 20 20 20 20 20 20  red") {.        
0390: 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c          oGrammal
03a0: 65 63 74 65 2e 6f 47 43 50 61 6e 65 6c 2e 6f 54  ecte.oGCPanel.oT
03b0: 6f 6f 6c 74 69 70 2e 73 68 6f 77 28 78 45 6c 65  ooltip.show(xEle
03c0: 6d 2e 69 64 29 3b 0a 20 20 20 20 20 20 20 20 20  m.id);.         
03d0: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 78 45     } else if (xE
03e0: 6c 65 6d 2e 69 64 20 3d 3d 3d 20 22 67 72 61 6d  lem.id === "gram
03f0: 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f  malecte_tooltip_
0400: 75 72 6c 22 29 20 7b 0a 20 20 20 20 20 20 20 20  url") {.        
0410: 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c          oGrammal
0420: 65 63 74 65 2e 6f 47 43 50 61 6e 65 6c 2e 6f 70  ecte.oGCPanel.op
0430: 65 6e 55 52 4c 28 78 45 6c 65 6d 2e 64 61 74 61  enURL(xElem.data
0440: 73 65 74 2e 75 72 6c 29 3b 0a 20 20 20 20 20 20  set.url);.      
0450: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
0470: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f 47 43 50  Grammalecte.oGCP
0480: 61 6e 65 6c 2e 6f 54 6f 6f 6c 74 69 70 2e 68 69  anel.oTooltip.hi
0490: 64 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  de();.          
04a0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c    }.        } el
04b0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
04c0: 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f 47   oGrammalecte.oG
04d0: 43 50 61 6e 65 6c 2e 6f 54 6f 6f 6c 74 69 70 2e  CPanel.oTooltip.
04e0: 68 69 64 65 28 29 3b 0a 20 20 20 20 20 20 20 20  hide();.        
04f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  }.    }.    catc
0500: 68 20 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20  h (e) {.        
0510: 73 68 6f 77 45 72 72 6f 72 28 65 29 3b 0a 20 20  showError(e);.  
0520: 20 20 7d 0a 7d 0a 0a 0a 63 6c 61 73 73 20 47 72    }.}...class Gr
0530: 61 6d 6d 61 6c 65 63 74 65 47 72 61 6d 6d 61 72  ammalecteGrammar
0540: 43 68 65 63 6b 65 72 20 65 78 74 65 6e 64 73 20  Checker extends 
0550: 47 72 61 6d 6d 61 6c 65 63 74 65 50 61 6e 65 6c  GrammalectePanel
0560: 20 7b 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 20   {.    /*.      
0570: 20 20 4b 45 59 53 20 66 6f 72 20 69 64 65 6e 74    KEYS for ident
0580: 69 66 69 65 72 73 3a 0a 20 20 20 20 20 20 20 20  ifiers:.        
0590: 20 20 20 20 67 72 61 6d 6d 61 6c 65 63 74 65 5f      grammalecte_
05a0: 70 61 72 61 67 72 61 70 68 7b 49 64 7d 20 3a 20  paragraph{Id} : 
05b0: 5b 70 61 72 61 67 72 61 70 68 20 6e 75 6d 62 65  [paragraph numbe
05c0: 72 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  r].            g
05d0: 72 61 6d 6d 61 6c 65 63 74 65 5f 63 68 65 63 6b  rammalecte_check
05e0: 7b 49 64 7d 20 20 20 20 20 3a 20 5b 70 61 72 61  {Id}     : [para
05f0: 67 72 61 70 68 20 6e 75 6d 62 65 72 5d 0a 20 20  graph number].  
0600: 20 20 20 20 20 20 20 20 20 20 67 72 61 6d 6d 61            gramma
0610: 6c 65 63 74 65 5f 68 69 64 65 7b 49 64 7d 20 20  lecte_hide{Id}  
0620: 20 20 20 20 3a 20 5b 70 61 72 61 67 72 61 70 68      : [paragraph
0630: 20 6e 75 6d 62 65 72 5d 0a 20 20 20 20 20 20 20   number].       
0640: 20 20 20 20 20 67 72 61 6d 6d 61 6c 65 63 74 65       grammalecte
0650: 5f 65 72 72 6f 72 7b 49 64 7d 20 20 20 20 20 3a  _error{Id}     :
0660: 20 5b 70 61 72 61 67 72 61 70 68 20 6e 75 6d 62   [paragraph numb
0670: 65 72 5d 2d 5b 65 72 72 6f 72 5f 6e 75 6d 62 65  er]-[error_numbe
0680: 72 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  r].            g
0690: 72 61 6d 6d 61 6c 65 63 74 65 5f 73 75 67 67 7b  rammalecte_sugg{
06a0: 49 64 7d 20 20 20 20 20 20 3a 20 5b 70 61 72 61  Id}      : [para
06b0: 67 72 61 70 68 20 6e 75 6d 62 65 72 5d 2d 5b 65  graph number]-[e
06c0: 72 72 6f 72 5f 6e 75 6d 62 65 72 5d 2d 2d 5b 73  rror_number]--[s
06d0: 75 67 67 65 73 74 69 6f 6e 5f 6e 75 6d 62 65 72  uggestion_number
06e0: 5d 0a 20 20 20 20 2a 2f 0a 0a 20 20 20 20 63 6f  ].    */..    co
06f0: 6e 73 74 72 75 63 74 6f 72 20 28 2e 2e 2e 61 72  nstructor (...ar
0700: 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 73 75  gs) {.        su
0710: 70 65 72 28 2e 2e 2e 61 72 67 73 29 3b 0a 20 20  per(...args);.  
0720: 20 20 20 20 20 20 74 68 69 73 2e 61 49 67 6e 6f        this.aIgno
0730: 72 65 64 45 72 72 6f 72 73 20 3d 20 6e 65 77 20  redErrors = new 
0740: 53 65 74 28 29 3b 0a 20 20 20 20 20 20 20 20 74  Set();.        t
0750: 68 69 73 2e 78 43 6f 6e 74 65 6e 74 4e 6f 64 65  his.xContentNode
0760: 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e   = oGrammalecte.
0770: 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69 76 22  createNode("div"
0780: 2c 20 7b 69 64 3a 20 22 67 72 61 6d 6d 61 6c 65  , {id: "grammale
0790: 63 74 65 5f 67 63 5f 70 61 6e 65 6c 5f 63 6f 6e  cte_gc_panel_con
07a0: 74 65 6e 74 22 7d 29 3b 0a 20 20 20 20 20 20 20  tent"});.       
07b0: 20 74 68 69 73 2e 78 50 61 72 61 67 72 61 70 68   this.xParagraph
07c0: 4c 69 73 74 20 3d 20 6f 47 72 61 6d 6d 61 6c 65  List = oGrammale
07d0: 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22  cte.createNode("
07e0: 64 69 76 22 2c 20 7b 69 64 3a 20 22 67 72 61 6d  div", {id: "gram
07f0: 6d 61 6c 65 63 74 65 5f 70 61 72 61 67 72 61 70  malecte_paragrap
0800: 68 5f 6c 69 73 74 22 7d 29 3b 0a 20 20 20 20 20  h_list"});.     
0810: 20 20 20 74 68 69 73 2e 78 43 6f 6e 74 65 6e 74     this.xContent
0820: 4e 6f 64 65 2e 61 70 70 65 6e 64 43 68 69 6c 64  Node.appendChild
0830: 28 74 68 69 73 2e 78 50 61 72 61 67 72 61 70 68  (this.xParagraph
0840: 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 20 20 74  List);.        t
0850: 68 69 73 2e 78 50 61 6e 65 6c 43 6f 6e 74 65 6e  his.xPanelConten
0860: 74 2e 61 64 64 45 76 65 6e 74 4c 69 73 74 65 6e  t.addEventListen
0870: 65 72 28 22 63 6c 69 63 6b 22 2c 20 6f 6e 47 72  er("click", onGr
0880: 61 6d 6d 61 6c 65 63 74 65 47 43 50 61 6e 65 6c  ammalecteGCPanel
0890: 43 6c 69 63 6b 2c 20 66 61 6c 73 65 29 3b 0a 20  Click, false);. 
08a0: 20 20 20 20 20 20 20 74 68 69 73 2e 6f 54 6f 6f         this.oToo
08b0: 6c 74 69 70 20 3d 20 6e 65 77 20 47 72 61 6d 6d  ltip = new Gramm
08c0: 61 6c 65 63 74 65 54 6f 6f 6c 74 69 70 28 74 68  alecteTooltip(th
08d0: 69 73 2e 78 43 6f 6e 74 65 6e 74 4e 6f 64 65 29  is.xContentNode)
08e0: 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 78  ;.        this.x
08f0: 50 61 6e 65 6c 43 6f 6e 74 65 6e 74 2e 61 70 70  PanelContent.app
0900: 65 6e 64 43 68 69 6c 64 28 74 68 69 73 2e 78 43  endChild(this.xC
0910: 6f 6e 74 65 6e 74 4e 6f 64 65 29 3b 0a 20 20 20  ontentNode);.   
0920: 20 20 20 20 20 74 68 69 73 2e 6f 4e 6f 64 65 43       this.oNodeC
0930: 6f 6e 74 72 6f 6c 20 3d 20 6e 65 77 20 47 72 61  ontrol = new Gra
0940: 6d 6d 61 6c 65 63 74 65 4e 6f 64 65 43 6f 6e 74  mmalecteNodeCont
0950: 72 6f 6c 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  rol();.    }..  
0960: 20 20 73 74 61 72 74 20 28 78 4e 6f 64 65 3d 6e    start (xNode=n
0970: 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 74  ull) {.        t
0980: 68 69 73 2e 6f 54 6f 6f 6c 74 69 70 2e 68 69 64  his.oTooltip.hid
0990: 65 28 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69  e();.        thi
09a0: 73 2e 63 6c 65 61 72 28 29 3b 0a 20 20 20 20 20  s.clear();.     
09b0: 20 20 20 69 66 20 28 78 4e 6f 64 65 29 20 7b 0a     if (xNode) {.
09c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
09d0: 2e 6f 4e 6f 64 65 43 6f 6e 74 72 6f 6c 2e 73 65  .oNodeControl.se
09e0: 74 4e 6f 64 65 28 78 4e 6f 64 65 29 3b 0a 20 20  tNode(xNode);.  
09f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 78 4e            if (xN
0a00: 6f 64 65 2e 74 61 67 4e 61 6d 65 20 21 3d 20 22  ode.tagName != "
0a10: 54 45 58 54 41 52 45 41 22 29 20 7b 0a 20 20 20  TEXTAREA") {.   
0a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
0a30: 73 2e 61 64 64 4d 65 73 73 61 67 65 28 22 4e 6f  s.addMessage("No
0a40: 74 65 e2 80 af 3a 20 63 65 74 74 65 20 7a 6f 6e  te...: cette zon
0a50: 65 20 64 65 20 74 65 78 74 65 20 6e e2 80 99 65  e de texte n...e
0a60: 73 74 20 70 61 73 20 75 6e 20 63 68 61 6d 70 20  st pas un champ 
0a70: 64 65 20 66 6f 72 6d 75 6c 61 69 72 65 20 e2 80  de formulaire ..
0a80: 9c 74 65 78 74 61 72 65 61 e2 80 9d 20 6d 61 69  .textarea... mai
0a90: 73 20 75 6e 20 6e 6f 64 65 20 48 54 4d 4c 20 c3  s un node HTML .
0aa0: a9 64 69 74 61 62 6c 65 2e 20 55 6e 65 20 74 65  .ditable. Une te
0ab0: 6c 6c 65 20 7a 6f 6e 65 20 64 65 20 74 65 78 74  lle zone de text
0ac0: 65 20 65 73 74 20 73 75 73 63 65 70 74 69 62 6c  e est susceptibl
0ad0: 65 20 64 65 20 63 6f 6e 74 65 6e 69 72 20 64 65  e de contenir de
0ae0: 73 20 c3 a9 6c c3 a9 6d 65 6e 74 73 20 6e 6f 6e  s ..l..ments non
0af0: 20 74 65 78 74 75 65 6c 73 20 71 75 69 20 73 65   textuels qui se
0b00: 72 6f 6e 74 20 65 66 66 61 63 c3 a9 73 20 6c 6f  ront effac..s lo
0b10: 72 73 20 64 65 20 6c 61 20 63 6f 72 72 65 63 74  rs de la correct
0b20: 69 6f 6e 2e 22 29 3b 0a 20 20 20 20 20 20 20 20  ion.");.        
0b30: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
0b40: 20 20 20 20 7d 0a 0a 20 20 20 20 63 6c 65 61 72      }..    clear
0b50: 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 77 68   () {.        wh
0b60: 69 6c 65 20 28 74 68 69 73 2e 78 50 61 72 61 67  ile (this.xParag
0b70: 72 61 70 68 4c 69 73 74 2e 66 69 72 73 74 43 68  raphList.firstCh
0b80: 69 6c 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ild) {.         
0b90: 20 20 20 74 68 69 73 2e 78 50 61 72 61 67 72 61     this.xParagra
0ba0: 70 68 4c 69 73 74 2e 72 65 6d 6f 76 65 43 68 69  phList.removeChi
0bb0: 6c 64 28 74 68 69 73 2e 78 50 61 72 61 67 72 61  ld(this.xParagra
0bc0: 70 68 4c 69 73 74 2e 66 69 72 73 74 43 68 69 6c  phList.firstChil
0bd0: 64 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  d);.        }.  
0be0: 20 20 20 20 20 20 74 68 69 73 2e 61 49 67 6e 6f        this.aIgno
0bf0: 72 65 64 45 72 72 6f 72 73 2e 63 6c 65 61 72 28  redErrors.clear(
0c00: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 68 69  );.    }..    hi
0c10: 64 65 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20  de () {.        
0c20: 74 68 69 73 2e 78 50 61 6e 65 6c 2e 73 74 79 6c  this.xPanel.styl
0c30: 65 2e 64 69 73 70 6c 61 79 20 3d 20 22 6e 6f 6e  e.display = "non
0c40: 65 22 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73  e";.        this
0c50: 2e 6f 4e 6f 64 65 43 6f 6e 74 72 6f 6c 2e 63 6c  .oNodeControl.cl
0c60: 65 61 72 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ear();.    }..  
0c70: 20 20 61 64 64 50 61 72 61 67 72 61 70 68 52 65    addParagraphRe
0c80: 73 75 6c 74 20 28 6f 52 65 73 75 6c 74 29 20 7b  sult (oResult) {
0c90: 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a 20  .        try {. 
0ca0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f             if (o
0cb0: 52 65 73 75 6c 74 20 26 26 20 28 6f 52 65 73 75  Result && (oResu
0cc0: 6c 74 2e 73 50 61 72 61 67 72 61 70 68 2e 74 72  lt.sParagraph.tr
0cd0: 69 6d 28 29 20 21 3d 3d 20 22 22 20 7c 7c 20 6f  im() !== "" || o
0ce0: 52 65 73 75 6c 74 2e 61 47 72 61 6d 6d 45 72 72  Result.aGrammErr
0cf0: 2e 6c 65 6e 67 74 68 20 3e 20 30 20 7c 7c 20 6f  .length > 0 || o
0d00: 52 65 73 75 6c 74 2e 61 53 70 65 6c 6c 45 72 72  Result.aSpellErr
0d10: 2e 6c 65 6e 67 74 68 20 3e 20 30 29 29 20 7b 0a  .length > 0)) {.
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d30: 6c 65 74 20 78 4e 6f 64 65 44 69 76 20 3d 20 6f  let xNodeDiv = o
0d40: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61  Grammalecte.crea
0d50: 74 65 4e 6f 64 65 28 22 64 69 76 22 2c 20 7b 63  teNode("div", {c
0d60: 6c 61 73 73 4e 61 6d 65 3a 20 22 67 72 61 6d 6d  lassName: "gramm
0d70: 61 6c 65 63 74 65 5f 70 61 72 61 67 72 61 70 68  alecte_paragraph
0d80: 5f 62 6c 6f 63 6b 22 7d 29 3b 0a 20 20 20 20 20  _block"});.     
0d90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 61 63             // ac
0da0: 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 20 20  tions.          
0db0: 20 20 20 20 20 20 6c 65 74 20 78 41 63 74 69 6f        let xActio
0dc0: 6e 73 42 61 72 20 3d 20 6f 47 72 61 6d 6d 61 6c  nsBar = oGrammal
0dd0: 65 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65 28  ecte.createNode(
0de0: 22 64 69 76 22 2c 20 7b 63 6c 61 73 73 4e 61 6d  "div", {classNam
0df0: 65 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f  e: "grammalecte_
0e00: 70 61 72 61 67 72 61 70 68 5f 61 63 74 69 6f 6e  paragraph_action
0e10: 73 22 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  s"});.          
0e20: 20 20 20 20 20 20 78 41 63 74 69 6f 6e 73 42 61        xActionsBa
0e30: 72 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 6f 47  r.appendChild(oG
0e40: 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61 74  rammalecte.creat
0e50: 65 4e 6f 64 65 28 22 64 69 76 22 2c 20 7b 69 64  eNode("div", {id
0e60: 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 63  : "grammalecte_c
0e70: 68 65 63 6b 22 20 2b 20 6f 52 65 73 75 6c 74 2e  heck" + oResult.
0e80: 69 50 61 72 61 4e 75 6d 2c 20 63 6c 61 73 73 4e  iParaNum, classN
0e90: 61 6d 65 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74  ame: "grammalect
0ea0: 65 5f 70 61 72 61 67 72 61 70 68 5f 62 75 74 74  e_paragraph_butt
0eb0: 6f 6e 20 67 72 61 6d 6d 61 6c 65 63 74 65 5f 67  on grammalecte_g
0ec0: 72 65 65 6e 22 2c 20 74 65 78 74 43 6f 6e 74 65  reen", textConte
0ed0: 6e 74 3a 20 22 52 c3 a9 61 6e 61 6c 79 73 65 72  nt: "R..analyser
0ee0: 22 7d 2c 20 7b 70 61 72 61 5f 6e 75 6d 3a 20 6f  "}, {para_num: o
0ef0: 52 65 73 75 6c 74 2e 69 50 61 72 61 4e 75 6d 7d  Result.iParaNum}
0f00: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
0f10: 20 20 20 20 78 41 63 74 69 6f 6e 73 42 61 72 2e      xActionsBar.
0f20: 61 70 70 65 6e 64 43 68 69 6c 64 28 6f 47 72 61  appendChild(oGra
0f30: 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61 74 65 4e  mmalecte.createN
0f40: 6f 64 65 28 22 64 69 76 22 2c 20 7b 69 64 3a 20  ode("div", {id: 
0f50: 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 68 69 64  "grammalecte_hid
0f60: 65 22 20 2b 20 6f 52 65 73 75 6c 74 2e 69 50 61  e" + oResult.iPa
0f70: 72 61 4e 75 6d 2c 20 63 6c 61 73 73 4e 61 6d 65  raNum, className
0f80: 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 70  : "grammalecte_p
0f90: 61 72 61 67 72 61 70 68 5f 62 75 74 74 6f 6e 20  aragraph_button 
0fa0: 67 72 61 6d 6d 61 6c 65 63 74 65 5f 72 65 64 22  grammalecte_red"
0fb0: 2c 20 74 65 78 74 43 6f 6e 74 65 6e 74 3a 20 22  , textContent: "
0fc0: c3 97 22 2c 20 73 74 79 6c 65 3a 20 22 66 6f 6e  ..", style: "fon
0fd0: 74 2d 77 65 69 67 68 74 3a 20 62 6f 6c 64 3b 22  t-weight: bold;"
0fe0: 7d 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  }));.           
0ff0: 20 20 20 20 20 2f 2f 20 70 61 72 61 67 72 61 70       // paragrap
1000: 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h.              
1010: 20 20 6c 65 74 20 78 50 61 72 61 67 72 61 70 68    let xParagraph
1020: 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e   = oGrammalecte.
1030: 63 72 65 61 74 65 4e 6f 64 65 28 22 70 22 2c 20  createNode("p", 
1040: 7b 69 64 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74  {id: "grammalect
1050: 65 5f 70 61 72 61 67 72 61 70 68 22 2b 6f 52 65  e_paragraph"+oRe
1060: 73 75 6c 74 2e 69 50 61 72 61 4e 75 6d 2c 20 63  sult.iParaNum, c
1070: 6c 61 73 73 4e 61 6d 65 3a 20 22 67 72 61 6d 6d  lassName: "gramm
1080: 61 6c 65 63 74 65 5f 70 61 72 61 67 72 61 70 68  alecte_paragraph
1090: 22 2c 20 6c 61 6e 67 3a 20 22 66 72 22 2c 20 63  ", lang: "fr", c
10a0: 6f 6e 74 65 6e 74 45 64 69 74 61 62 6c 65 3a 20  ontentEditable: 
10b0: 22 74 72 75 65 22 7d 2c 20 7b 70 61 72 61 5f 6e  "true"}, {para_n
10c0: 75 6d 3a 20 6f 52 65 73 75 6c 74 2e 69 50 61 72  um: oResult.iPar
10d0: 61 4e 75 6d 7d 29 3b 0a 20 20 20 20 20 20 20 20  aNum});.        
10e0: 20 20 20 20 20 20 20 20 78 50 61 72 61 67 72 61          xParagra
10f0: 70 68 2e 73 65 74 41 74 74 72 69 62 75 74 65 28  ph.setAttribute(
1100: 22 73 70 65 6c 6c 63 68 65 63 6b 22 2c 20 22 66  "spellcheck", "f
1110: 61 6c 73 65 22 29 3b 20 2f 2f 20 64 6f 65 73 6e  alse"); // doesn
1120: e2 80 99 74 20 73 65 65 6d 20 70 6f 73 73 69 62  ...t seem possib
1130: 6c 65 20 74 6f 20 75 73 65 20 e2 80 9c 73 70 65  le to use ...spe
1140: 6c 6c 63 68 65 63 6b e2 80 9d 20 61 73 20 61 20  llcheck... as a 
1150: 63 6f 6d 6d 6f 6e 20 61 74 74 72 69 62 75 74 65  common attribute
1160: 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1170: 20 20 78 50 61 72 61 67 72 61 70 68 2e 61 64 64    xParagraph.add
1180: 45 76 65 6e 74 4c 69 73 74 65 6e 65 72 28 22 6b  EventListener("k
1190: 65 79 75 70 22 2c 20 66 75 6e 63 74 69 6f 6e 20  eyup", function 
11a0: 28 78 45 76 65 6e 74 29 20 7b 0a 20 20 20 20 20  (xEvent) {.     
11b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11c0: 68 69 73 2e 6f 4e 6f 64 65 43 6f 6e 74 72 6f 6c  his.oNodeControl
11d0: 2e 73 65 74 50 61 72 61 67 72 61 70 68 28 70 61  .setParagraph(pa
11e0: 72 73 65 49 6e 74 28 78 45 76 65 6e 74 2e 74 61  rseInt(xEvent.ta
11f0: 72 67 65 74 2e 64 61 74 61 73 65 74 2e 70 61 72  rget.dataset.par
1200: 61 5f 6e 75 6d 29 2c 20 74 68 69 73 2e 70 75 72  a_num), this.pur
1210: 67 65 54 65 78 74 28 78 45 76 65 6e 74 2e 74 61  geText(xEvent.ta
1220: 72 67 65 74 2e 74 65 78 74 43 6f 6e 74 65 6e 74  rget.textContent
1230: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
1240: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 4e 6f          this.oNo
1250: 64 65 43 6f 6e 74 72 6f 6c 2e 77 72 69 74 65 28  deControl.write(
1260: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
1270: 20 20 20 7d 2e 62 69 6e 64 28 74 68 69 73 29 0a     }.bind(this).
1280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1290: 2c 20 74 72 75 65 29 3b 0a 20 20 20 20 20 20 20  , true);.       
12a0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 74           this._t
12b0: 61 67 50 61 72 61 67 72 61 70 68 28 78 50 61 72  agParagraph(xPar
12c0: 61 67 72 61 70 68 2c 20 6f 52 65 73 75 6c 74 2e  agraph, oResult.
12d0: 73 50 61 72 61 67 72 61 70 68 2c 20 6f 52 65 73  sParagraph, oRes
12e0: 75 6c 74 2e 69 50 61 72 61 4e 75 6d 2c 20 6f 52  ult.iParaNum, oR
12f0: 65 73 75 6c 74 2e 61 47 72 61 6d 6d 45 72 72 2c  esult.aGrammErr,
1300: 20 6f 52 65 73 75 6c 74 2e 61 53 70 65 6c 6c 45   oResult.aSpellE
1310: 72 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  rr);.           
1320: 20 20 20 20 20 2f 2f 20 63 72 65 61 74 69 6f 6e       // creation
1330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1340: 20 78 4e 6f 64 65 44 69 76 2e 61 70 70 65 6e 64   xNodeDiv.append
1350: 43 68 69 6c 64 28 78 41 63 74 69 6f 6e 73 42 61  Child(xActionsBa
1360: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  r);.            
1370: 20 20 20 20 78 4e 6f 64 65 44 69 76 2e 61 70 70      xNodeDiv.app
1380: 65 6e 64 43 68 69 6c 64 28 78 50 61 72 61 67 72  endChild(xParagr
1390: 61 70 68 29 3b 0a 20 20 20 20 20 20 20 20 20 20  aph);.          
13a0: 20 20 20 20 20 20 74 68 69 73 2e 78 50 61 72 61        this.xPara
13b0: 67 72 61 70 68 4c 69 73 74 2e 61 70 70 65 6e 64  graphList.append
13c0: 43 68 69 6c 64 28 78 4e 6f 64 65 44 69 76 29 3b  Child(xNodeDiv);
13d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
13e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
13f0: 20 63 61 74 63 68 20 28 65 29 20 7b 0a 20 20 20   catch (e) {.   
1400: 20 20 20 20 20 20 20 20 20 73 68 6f 77 45 72 72           showErr
1410: 6f 72 28 65 29 3b 0a 20 20 20 20 20 20 20 20 7d  or(e);.        }
1420: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 63 68  .    }..    rech
1430: 65 63 6b 50 61 72 61 67 72 61 70 68 20 28 69 50  eckParagraph (iP
1440: 61 72 61 4e 75 6d 29 20 7b 0a 20 20 20 20 20 20  araNum) {.      
1450: 20 20 6c 65 74 20 73 50 61 72 61 67 72 61 70 68    let sParagraph
1460: 49 64 20 3d 20 22 67 72 61 6d 6d 61 6c 65 63 74  Id = "grammalect
1470: 65 5f 70 61 72 61 67 72 61 70 68 22 20 2b 20 69  e_paragraph" + i
1480: 50 61 72 61 4e 75 6d 3b 0a 20 20 20 20 20 20 20  ParaNum;.       
1490: 20 6c 65 74 20 78 50 61 72 61 67 72 61 70 68 20   let xParagraph 
14a0: 3d 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c  = document.getEl
14b0: 65 6d 65 6e 74 42 79 49 64 28 73 50 61 72 61 67  ementById(sParag
14c0: 72 61 70 68 49 64 29 3b 0a 20 20 20 20 20 20 20  raphId);.       
14d0: 20 74 68 69 73 2e 62 6c 6f 63 6b 50 61 72 61 67   this.blockParag
14e0: 72 61 70 68 28 78 50 61 72 61 67 72 61 70 68 29  raph(xParagraph)
14f0: 3b 0a 20 20 20 20 20 20 20 20 6c 65 74 20 73 54  ;.        let sT
1500: 65 78 74 20 3d 20 74 68 69 73 2e 70 75 72 67 65  ext = this.purge
1510: 54 65 78 74 28 78 50 61 72 61 67 72 61 70 68 2e  Text(xParagraph.
1520: 74 65 78 74 43 6f 6e 74 65 6e 74 29 3b 0a 20 20  textContent);.  
1530: 20 20 20 20 20 20 78 47 72 61 6d 6d 61 6c 65 63        xGrammalec
1540: 74 65 50 6f 72 74 2e 70 6f 73 74 4d 65 73 73 61  tePort.postMessa
1550: 67 65 28 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ge({.           
1560: 20 73 43 6f 6d 6d 61 6e 64 3a 20 22 70 61 72 73   sCommand: "pars
1570: 65 41 6e 64 53 70 65 6c 6c 63 68 65 63 6b 31 22  eAndSpellcheck1"
1580: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 50  ,.            dP
1590: 61 72 61 6d 3a 20 7b 73 54 65 78 74 3a 20 73 54  aram: {sText: sT
15a0: 65 78 74 2c 20 73 43 6f 75 6e 74 72 79 3a 20 22  ext, sCountry: "
15b0: 46 52 22 2c 20 62 44 65 62 75 67 3a 20 66 61 6c  FR", bDebug: fal
15c0: 73 65 2c 20 62 43 6f 6e 74 65 78 74 3a 20 66 61  se, bContext: fa
15d0: 6c 73 65 7d 2c 0a 20 20 20 20 20 20 20 20 20 20  lse},.          
15e0: 20 20 64 49 6e 66 6f 3a 20 7b 73 50 61 72 61 67    dInfo: {sParag
15f0: 72 61 70 68 49 64 3a 20 73 50 61 72 61 67 72 61  raphId: sParagra
1600: 70 68 49 64 7d 0a 20 20 20 20 20 20 20 20 7d 29  phId}.        })
1610: 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f  ;.        this.o
1620: 4e 6f 64 65 43 6f 6e 74 72 6f 6c 2e 73 65 74 50  NodeControl.setP
1630: 61 72 61 67 72 61 70 68 28 69 50 61 72 61 4e 75  aragraph(iParaNu
1640: 6d 2c 20 73 54 65 78 74 29 3b 0a 20 20 20 20 20  m, sText);.     
1650: 20 20 20 74 68 69 73 2e 6f 4e 6f 64 65 43 6f 6e     this.oNodeCon
1660: 74 72 6f 6c 2e 77 72 69 74 65 28 29 3b 0a 20 20  trol.write();.  
1670: 20 20 7d 0a 0a 20 20 20 20 72 65 66 72 65 73 68    }..    refresh
1680: 50 61 72 61 67 72 61 70 68 20 28 73 50 61 72 61  Paragraph (sPara
1690: 67 72 61 70 68 49 64 2c 20 6f 52 65 73 75 6c 74  graphId, oResult
16a0: 29 20 7b 0a 20 20 20 20 20 20 20 20 74 72 79 20  ) {.        try 
16b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  {.            le
16c0: 74 20 78 50 61 72 61 67 72 61 70 68 20 3d 20 64  t xParagraph = d
16d0: 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65  ocument.getEleme
16e0: 6e 74 42 79 49 64 28 73 50 61 72 61 67 72 61 70  ntById(sParagrap
16f0: 68 49 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20  hId);.          
1700: 20 20 78 50 61 72 61 67 72 61 70 68 2e 63 6c 61    xParagraph.cla
1710: 73 73 4e 61 6d 65 20 3d 20 28 6f 52 65 73 75 6c  ssName = (oResul
1720: 74 2e 61 47 72 61 6d 6d 45 72 72 2e 6c 65 6e 67  t.aGrammErr.leng
1730: 74 68 20 7c 7c 20 6f 52 65 73 75 6c 74 2e 61 53  th || oResult.aS
1740: 70 65 6c 6c 45 72 72 2e 6c 65 6e 67 74 68 29 20  pellErr.length) 
1750: 3f 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 70  ? "grammalecte_p
1760: 61 72 61 67 72 61 70 68 20 73 6f 66 74 72 65 64  aragraph softred
1770: 22 20 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65  " : "grammalecte
1780: 5f 70 61 72 61 67 72 61 70 68 22 3b 0a 20 20 20  _paragraph";.   
1790: 20 20 20 20 20 20 20 20 20 78 50 61 72 61 67 72           xParagr
17a0: 61 70 68 2e 74 65 78 74 43 6f 6e 74 65 6e 74 20  aph.textContent 
17b0: 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 20 20  = "";.          
17c0: 20 20 74 68 69 73 2e 5f 74 61 67 50 61 72 61 67    this._tagParag
17d0: 72 61 70 68 28 78 50 61 72 61 67 72 61 70 68 2c  raph(xParagraph,
17e0: 20 6f 52 65 73 75 6c 74 2e 73 50 61 72 61 67 72   oResult.sParagr
17f0: 61 70 68 2c 20 73 50 61 72 61 67 72 61 70 68 49  aph, sParagraphI
1800: 64 2e 73 6c 69 63 65 28 32 31 29 2c 20 6f 52 65  d.slice(21), oRe
1810: 73 75 6c 74 2e 61 47 72 61 6d 6d 45 72 72 2c 20  sult.aGrammErr, 
1820: 6f 52 65 73 75 6c 74 2e 61 53 70 65 6c 6c 45 72  oResult.aSpellEr
1830: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  r);.            
1840: 74 68 69 73 2e 66 72 65 65 50 61 72 61 67 72 61  this.freeParagra
1850: 70 68 28 78 50 61 72 61 67 72 61 70 68 29 3b 0a  ph(xParagraph);.
1860: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1870: 20 20 63 61 74 63 68 20 28 65 29 20 7b 0a 20 20    catch (e) {.  
1880: 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 45 72            showEr
1890: 72 6f 72 28 65 29 3b 0a 20 20 20 20 20 20 20 20  ror(e);.        
18a0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5f 74 61  }.    }..    _ta
18b0: 67 50 61 72 61 67 72 61 70 68 20 28 78 50 61 72  gParagraph (xPar
18c0: 61 67 72 61 70 68 2c 20 73 50 61 72 61 67 72 61  agraph, sParagra
18d0: 70 68 2c 20 69 50 61 72 61 4e 75 6d 2c 20 61 53  ph, iParaNum, aS
18e0: 70 65 6c 6c 45 72 72 2c 20 61 47 72 61 6d 6d 45  pellErr, aGrammE
18f0: 72 72 29 20 7b 0a 20 20 20 20 20 20 20 20 74 72  rr) {.        tr
1900: 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  y {.            
1910: 69 66 20 28 61 47 72 61 6d 6d 45 72 72 2e 6c 65  if (aGrammErr.le
1920: 6e 67 74 68 20 3d 3d 3d 20 30 20 20 26 26 20 20  ngth === 0  &&  
1930: 61 53 70 65 6c 6c 45 72 72 2e 6c 65 6e 67 74 68  aSpellErr.length
1940: 20 3d 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20   === 0) {.      
1950: 20 20 20 20 20 20 20 20 20 20 78 50 61 72 61 67            xParag
1960: 72 61 70 68 2e 74 65 78 74 43 6f 6e 74 65 6e 74  raph.textContent
1970: 20 3d 20 73 50 61 72 61 67 72 61 70 68 3b 0a 20   = sParagraph;. 
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1990: 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20  eturn;.         
19a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
19b0: 20 61 47 72 61 6d 6d 45 72 72 2e 70 75 73 68 28   aGrammErr.push(
19c0: 2e 2e 2e 61 53 70 65 6c 6c 45 72 72 29 3b 0a 20  ...aSpellErr);. 
19d0: 20 20 20 20 20 20 20 20 20 20 20 61 47 72 61 6d             aGram
19e0: 6d 45 72 72 2e 73 6f 72 74 28 66 75 6e 63 74 69  mErr.sort(functi
19f0: 6f 6e 20 28 61 2c 20 62 29 20 7b 0a 20 20 20 20  on (a, b) {.    
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a10: 61 5b 22 6e 53 74 61 72 74 22 5d 20 3c 20 62 5b  a["nStart"] < b[
1a20: 22 6e 53 74 61 72 74 22 5d 29 0a 20 20 20 20 20  "nStart"]).     
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a40: 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20 20 20 20  eturn -1;.      
1a50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 5b            if (a[
1a60: 22 6e 53 74 61 72 74 22 5d 20 3e 20 62 5b 22 6e  "nStart"] > b["n
1a70: 53 74 61 72 74 22 5d 29 0a 20 20 20 20 20 20 20  Start"]).       
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1a90: 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 20  urn 1;.         
1aa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
1ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b  .            });
1ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74  .            let
1ad0: 20 6e 45 72 72 20 3d 20 30 3b 20 2f 2f 20 77 65   nErr = 0; // we
1ae0: 20 63 6f 75 6e 74 20 65 72 72 6f 72 73 20 74 6f   count errors to
1af0: 20 67 69 76 65 20 74 68 65 6d 20 61 6e 20 69 64   give them an id
1b00: 65 6e 74 69 66 69 65 72 0a 20 20 20 20 20 20 20  entifier.       
1b10: 20 20 20 20 20 6c 65 74 20 6e 45 6e 64 4c 61 73       let nEndLas
1b20: 74 45 72 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  tErr = 0;.      
1b30: 20 20 20 20 20 20 66 6f 72 20 28 6c 65 74 20 6f        for (let o
1b40: 45 72 72 20 6f 66 20 61 47 72 61 6d 6d 45 72 72  Err of aGrammErr
1b50: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
1b60: 20 20 20 20 6c 65 74 20 6e 53 74 61 72 74 20 3d      let nStart =
1b70: 20 6f 45 72 72 5b 22 6e 53 74 61 72 74 22 5d 3b   oErr["nStart"];
1b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b90: 20 6c 65 74 20 6e 45 6e 64 20 3d 20 6f 45 72 72   let nEnd = oErr
1ba0: 5b 22 6e 45 6e 64 22 5d 3b 0a 20 20 20 20 20 20  ["nEnd"];.      
1bb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 53            if (nS
1bc0: 74 61 72 74 20 3e 3d 20 6e 45 6e 64 4c 61 73 74  tart >= nEndLast
1bd0: 45 72 72 29 20 7b 0a 20 20 20 20 20 20 20 20 20  Err) {.         
1be0: 20 20 20 20 20 20 20 20 20 20 20 6f 45 72 72 5b             oErr[
1bf0: 27 73 45 72 72 6f 72 49 64 27 5d 20 3d 20 69 50  'sErrorId'] = iP
1c00: 61 72 61 4e 75 6d 20 2b 20 22 2d 22 20 2b 20 6e  araNum + "-" + n
1c10: 45 72 72 2e 74 6f 53 74 72 69 6e 67 28 29 3b 20  Err.toString(); 
1c20: 2f 2f 20 65 72 72 6f 72 20 69 64 65 6e 74 69 66  // error identif
1c30: 69 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ier.            
1c40: 20 20 20 20 20 20 20 20 6f 45 72 72 5b 27 73 49          oErr['sI
1c50: 67 6e 6f 72 65 64 4b 65 79 27 5d 20 3d 20 69 50  gnoredKey'] = iP
1c60: 61 72 61 4e 75 6d 20 2b 20 22 3a 22 20 2b 20 6e  araNum + ":" + n
1c70: 53 74 61 72 74 2e 74 6f 53 74 72 69 6e 67 28 29  Start.toString()
1c80: 20 2b 20 22 3a 22 20 2b 20 73 50 61 72 61 67 72   + ":" + sParagr
1c90: 61 70 68 2e 73 6c 69 63 65 28 6e 53 74 61 72 74  aph.slice(nStart
1ca0: 2c 20 6e 45 6e 64 29 3b 0a 20 20 20 20 20 20 20  , nEnd);.       
1cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1cc0: 28 6e 45 6e 64 4c 61 73 74 45 72 72 20 3c 20 6e  (nEndLastErr < n
1cd0: 53 74 61 72 74 29 20 7b 0a 20 20 20 20 20 20 20  Start) {.       
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf0: 20 78 50 61 72 61 67 72 61 70 68 2e 61 70 70 65   xParagraph.appe
1d00: 6e 64 43 68 69 6c 64 28 64 6f 63 75 6d 65 6e 74  ndChild(document
1d10: 2e 63 72 65 61 74 65 54 65 78 74 4e 6f 64 65 28  .createTextNode(
1d20: 73 50 61 72 61 67 72 61 70 68 2e 73 6c 69 63 65  sParagraph.slice
1d30: 28 6e 45 6e 64 4c 61 73 74 45 72 72 2c 20 6e 53  (nEndLastErr, nS
1d40: 74 61 72 74 29 29 29 3b 0a 20 20 20 20 20 20 20  tart)));.       
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d70: 20 20 20 78 50 61 72 61 67 72 61 70 68 2e 61 70     xParagraph.ap
1d80: 70 65 6e 64 43 68 69 6c 64 28 74 68 69 73 2e 5f  pendChild(this._
1d90: 63 72 65 61 74 65 45 72 72 6f 72 28 73 50 61 72  createError(sPar
1da0: 61 67 72 61 70 68 2e 73 6c 69 63 65 28 6e 53 74  agraph.slice(nSt
1db0: 61 72 74 2c 20 6e 45 6e 64 29 2c 20 6f 45 72 72  art, nEnd), oErr
1dc0: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
1dd0: 20 20 20 20 20 20 20 20 6e 45 6e 64 4c 61 73 74          nEndLast
1de0: 45 72 72 20 3d 20 6e 45 6e 64 3b 0a 20 20 20 20  Err = nEnd;.    
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 45                nE
1e10: 72 72 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 20  rr += 1;.       
1e20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1e30: 20 20 20 69 66 20 28 6e 45 6e 64 4c 61 73 74 45     if (nEndLastE
1e40: 72 72 20 3c 3d 20 73 50 61 72 61 67 72 61 70 68  rr <= sParagraph
1e50: 2e 6c 65 6e 67 74 68 29 20 7b 0a 20 20 20 20 20  .length) {.     
1e60: 20 20 20 20 20 20 20 20 20 20 20 78 50 61 72 61             xPara
1e70: 67 72 61 70 68 2e 61 70 70 65 6e 64 43 68 69 6c  graph.appendChil
1e80: 64 28 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74  d(document.creat
1e90: 65 54 65 78 74 4e 6f 64 65 28 73 50 61 72 61 67  eTextNode(sParag
1ea0: 72 61 70 68 2e 73 6c 69 63 65 28 6e 45 6e 64 4c  raph.slice(nEndL
1eb0: 61 73 74 45 72 72 29 29 29 3b 0a 20 20 20 20 20  astErr)));.     
1ec0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ed0: 20 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68   }.        catch
1ee0: 20 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20   (e) {.         
1ef0: 20 20 20 73 68 6f 77 45 72 72 6f 72 28 65 29 3b     showError(e);
1f00: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
1f10: 0a 0a 20 20 20 20 5f 63 72 65 61 74 65 45 72 72  ..    _createErr
1f20: 6f 72 20 28 73 55 6e 64 65 72 6c 69 6e 65 64 2c  or (sUnderlined,
1f30: 20 6f 45 72 72 29 20 7b 0a 20 20 20 20 20 20 20   oErr) {.       
1f40: 20 6c 65 74 20 78 4e 6f 64 65 45 72 72 20 3d 20   let xNodeErr = 
1f50: 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 45  document.createE
1f60: 6c 65 6d 65 6e 74 28 22 6d 61 72 6b 22 29 3b 0a  lement("mark");.
1f70: 20 20 20 20 20 20 20 20 78 4e 6f 64 65 45 72 72          xNodeErr
1f80: 2e 69 64 20 3d 20 22 67 72 61 6d 6d 61 6c 65 63  .id = "grammalec
1f90: 74 65 5f 65 72 72 22 20 2b 20 6f 45 72 72 5b 27  te_err" + oErr['
1fa0: 73 45 72 72 6f 72 49 64 27 5d 3b 0a 20 20 20 20  sErrorId'];.    
1fb0: 20 20 20 20 78 4e 6f 64 65 45 72 72 2e 74 65 78      xNodeErr.tex
1fc0: 74 43 6f 6e 74 65 6e 74 20 3d 20 73 55 6e 64 65  tContent = sUnde
1fd0: 72 6c 69 6e 65 64 3b 0a 20 20 20 20 20 20 20 20  rlined;.        
1fe0: 78 4e 6f 64 65 45 72 72 2e 64 61 74 61 73 65 74  xNodeErr.dataset
1ff0: 2e 65 72 72 6f 72 5f 69 64 20 3d 20 6f 45 72 72  .error_id = oErr
2000: 5b 27 73 45 72 72 6f 72 49 64 27 5d 3b 0a 20 20  ['sErrorId'];.  
2010: 20 20 20 20 20 20 78 4e 6f 64 65 45 72 72 2e 64        xNodeErr.d
2020: 61 74 61 73 65 74 2e 69 67 6e 6f 72 65 64 5f 6b  ataset.ignored_k
2030: 65 79 20 3d 20 6f 45 72 72 5b 27 73 49 67 6e 6f  ey = oErr['sIgno
2040: 72 65 64 4b 65 79 27 5d 3b 0a 20 20 20 20 20 20  redKey'];.      
2050: 20 20 78 4e 6f 64 65 45 72 72 2e 64 61 74 61 73    xNodeErr.datas
2060: 65 74 2e 65 72 72 6f 72 5f 74 79 70 65 20 3d 20  et.error_type = 
2070: 28 6f 45 72 72 5b 27 73 54 79 70 65 27 5d 20 3d  (oErr['sType'] =
2080: 3d 3d 20 22 57 4f 52 44 22 29 20 3f 20 22 73 70  == "WORD") ? "sp
2090: 65 6c 6c 69 6e 67 22 20 3a 20 22 67 72 61 6d 6d  elling" : "gramm
20a0: 61 72 22 3b 0a 20 20 20 20 20 20 20 20 69 66 20  ar";.        if 
20b0: 28 78 4e 6f 64 65 45 72 72 2e 64 61 74 61 73 65  (xNodeErr.datase
20c0: 74 2e 65 72 72 6f 72 5f 74 79 70 65 20 3d 3d 3d  t.error_type ===
20d0: 20 22 67 72 61 6d 6d 61 72 22 29 20 7b 0a 20 20   "grammar") {.  
20e0: 20 20 20 20 20 20 20 20 20 20 78 4e 6f 64 65 45            xNodeE
20f0: 72 72 2e 64 61 74 61 73 65 74 2e 67 63 5f 6d 65  rr.dataset.gc_me
2100: 73 73 61 67 65 20 3d 20 6f 45 72 72 5b 27 73 4d  ssage = oErr['sM
2110: 65 73 73 61 67 65 27 5d 3b 0a 20 20 20 20 20 20  essage'];.      
2120: 20 20 20 20 20 20 78 4e 6f 64 65 45 72 72 2e 64        xNodeErr.d
2130: 61 74 61 73 65 74 2e 67 63 5f 75 72 6c 20 3d 20  ataset.gc_url = 
2140: 6f 45 72 72 5b 27 55 52 4c 27 5d 3b 0a 20 20 20  oErr['URL'];.   
2150: 20 20 20 20 20 20 20 20 20 69 66 20 28 78 4e 6f           if (xNo
2160: 64 65 45 72 72 2e 64 61 74 61 73 65 74 2e 67 63  deErr.dataset.gc
2170: 5f 6d 65 73 73 61 67 65 2e 69 6e 63 6c 75 64 65  _message.include
2180: 73 28 22 20 23 22 29 29 20 7b 0a 20 20 20 20 20  s(" #")) {.     
2190: 20 20 20 20 20 20 20 20 20 20 20 78 4e 6f 64 65             xNode
21a0: 45 72 72 2e 64 61 74 61 73 65 74 2e 6c 69 6e 65  Err.dataset.line
21b0: 5f 69 64 20 3d 20 6f 45 72 72 5b 27 73 4c 69 6e  _id = oErr['sLin
21c0: 65 49 64 27 5d 3b 0a 20 20 20 20 20 20 20 20 20  eId'];.         
21d0: 20 20 20 20 20 20 20 78 4e 6f 64 65 45 72 72 2e         xNodeErr.
21e0: 64 61 74 61 73 65 74 2e 72 75 6c 65 5f 69 64 20  dataset.rule_id 
21f0: 3d 20 6f 45 72 72 5b 27 73 52 75 6c 65 49 64 27  = oErr['sRuleId'
2200: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ];.            }
2210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 4e 6f  .            xNo
2220: 64 65 45 72 72 2e 64 61 74 61 73 65 74 2e 73 75  deErr.dataset.su
2230: 67 67 65 73 74 69 6f 6e 73 20 3d 20 6f 45 72 72  ggestions = oErr
2240: 5b 22 61 53 75 67 67 65 73 74 69 6f 6e 73 22 5d  ["aSuggestions"]
2250: 2e 6a 6f 69 6e 28 22 7c 22 29 3b 0a 20 20 20 20  .join("|");.    
2260: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 78 4e      }.        xN
2270: 6f 64 65 45 72 72 2e 63 6c 61 73 73 4e 61 6d 65  odeErr.className
2280: 20 3d 20 28 74 68 69 73 2e 61 49 67 6e 6f 72 65   = (this.aIgnore
2290: 64 45 72 72 6f 72 73 2e 68 61 73 28 78 4e 6f 64  dErrors.has(xNod
22a0: 65 45 72 72 2e 64 61 74 61 73 65 74 2e 69 67 6e  eErr.dataset.ign
22b0: 6f 72 65 64 5f 6b 65 79 29 29 20 3f 20 22 67 72  ored_key)) ? "gr
22c0: 61 6d 6d 61 6c 65 63 74 65 5f 65 72 72 6f 72 5f  ammalecte_error_
22d0: 69 67 6e 6f 72 65 64 22 20 3a 20 22 67 72 61 6d  ignored" : "gram
22e0: 6d 61 6c 65 63 74 65 5f 65 72 72 6f 72 20 67 72  malecte_error gr
22f0: 61 6d 6d 61 6c 65 63 74 65 5f 65 72 72 6f 72 5f  ammalecte_error_
2300: 22 20 2b 20 6f 45 72 72 5b 27 73 54 79 70 65 27  " + oErr['sType'
2310: 5d 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ];.        retur
2320: 6e 20 78 4e 6f 64 65 45 72 72 3b 0a 20 20 20 20  n xNodeErr;.    
2330: 7d 0a 0a 20 20 20 20 62 6c 6f 63 6b 50 61 72 61  }..    blockPara
2340: 67 72 61 70 68 20 28 78 50 61 72 61 67 72 61 70  graph (xParagrap
2350: 68 29 20 7b 0a 20 20 20 20 20 20 20 20 78 50 61  h) {.        xPa
2360: 72 61 67 72 61 70 68 2e 63 6f 6e 74 65 6e 74 45  ragraph.contentE
2370: 64 69 74 61 62 6c 65 20 3d 20 22 66 61 6c 73 65  ditable = "false
2380: 22 3b 0a 20 20 20 20 20 20 20 20 64 6f 63 75 6d  ";.        docum
2390: 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79  ent.getElementBy
23a0: 49 64 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f  Id("grammalecte_
23b0: 63 68 65 63 6b 22 2b 78 50 61 72 61 67 72 61 70  check"+xParagrap
23c0: 68 2e 64 61 74 61 73 65 74 2e 70 61 72 61 5f 6e  h.dataset.para_n
23d0: 75 6d 29 2e 74 65 78 74 43 6f 6e 74 65 6e 74 20  um).textContent 
23e0: 3d 20 22 41 6e 61 6c 79 73 65 e2 80 a6 22 3b 0a  = "Analyse...";.
23f0: 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
2400: 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28  .getElementById(
2410: 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 63 68 65  "grammalecte_che
2420: 63 6b 22 2b 78 50 61 72 61 67 72 61 70 68 2e 64  ck"+xParagraph.d
2430: 61 74 61 73 65 74 2e 70 61 72 61 5f 6e 75 6d 29  ataset.para_num)
2440: 2e 73 74 79 6c 65 2e 62 61 63 6b 67 72 6f 75 6e  .style.backgroun
2450: 64 43 6f 6c 6f 72 20 3d 20 22 68 73 6c 28 30 2c  dColor = "hsl(0,
2460: 20 35 30 25 2c 20 35 30 25 29 22 3b 0a 20 20 20   50%, 50%)";.   
2470: 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67 65       document.ge
2480: 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 67 72  tElementById("gr
2490: 61 6d 6d 61 6c 65 63 74 65 5f 63 68 65 63 6b 22  ammalecte_check"
24a0: 2b 78 50 61 72 61 67 72 61 70 68 2e 64 61 74 61  +xParagraph.data
24b0: 73 65 74 2e 70 61 72 61 5f 6e 75 6d 29 2e 73 74  set.para_num).st
24c0: 79 6c 65 2e 62 6f 78 53 68 61 64 6f 77 20 3d 20  yle.boxShadow = 
24d0: 22 30 20 30 20 30 20 33 70 78 20 68 73 6c 61 28  "0 0 0 3px hsla(
24e0: 30 2c 20 31 30 30 25 2c 20 35 30 25 2c 20 2e 32  0, 100%, 50%, .2
24f0: 29 22 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66  )";.    }..    f
2500: 72 65 65 50 61 72 61 67 72 61 70 68 20 28 78 50  reeParagraph (xP
2510: 61 72 61 67 72 61 70 68 29 20 7b 0a 20 20 20 20  aragraph) {.    
2520: 20 20 20 20 78 50 61 72 61 67 72 61 70 68 2e 63      xParagraph.c
2530: 6f 6e 74 65 6e 74 45 64 69 74 61 62 6c 65 20 3d  ontentEditable =
2540: 20 22 74 72 75 65 22 3b 0a 20 20 20 20 20 20 20   "true";.       
2550: 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65   document.getEle
2560: 6d 65 6e 74 42 79 49 64 28 22 67 72 61 6d 6d 61  mentById("gramma
2570: 6c 65 63 74 65 5f 63 68 65 63 6b 22 2b 78 50 61  lecte_check"+xPa
2580: 72 61 67 72 61 70 68 2e 64 61 74 61 73 65 74 2e  ragraph.dataset.
2590: 70 61 72 61 5f 6e 75 6d 29 2e 74 65 78 74 43 6f  para_num).textCo
25a0: 6e 74 65 6e 74 20 3d 20 22 52 c3 a9 61 6e 61 6c  ntent = "R..anal
25b0: 79 73 65 72 22 3b 0a 20 20 20 20 20 20 20 20 64  yser";.        d
25c0: 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65  ocument.getEleme
25d0: 6e 74 42 79 49 64 28 22 67 72 61 6d 6d 61 6c 65  ntById("grammale
25e0: 63 74 65 5f 63 68 65 63 6b 22 2b 78 50 61 72 61  cte_check"+xPara
25f0: 67 72 61 70 68 2e 64 61 74 61 73 65 74 2e 70 61  graph.dataset.pa
2600: 72 61 5f 6e 75 6d 29 2e 73 74 79 6c 65 2e 62 61  ra_num).style.ba
2610: 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 72 20 3d 20  ckgroundColor = 
2620: 22 68 73 6c 28 31 32 30 2c 20 33 30 25 2c 20 35  "hsl(120, 30%, 5
2630: 30 25 29 22 3b 0a 20 20 20 20 20 20 20 20 64 6f  0%)";.        do
2640: 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e  cument.getElemen
2650: 74 42 79 49 64 28 22 67 72 61 6d 6d 61 6c 65 63  tById("grammalec
2660: 74 65 5f 63 68 65 63 6b 22 2b 78 50 61 72 61 67  te_check"+xParag
2670: 72 61 70 68 2e 64 61 74 61 73 65 74 2e 70 61 72  raph.dataset.par
2680: 61 5f 6e 75 6d 29 2e 73 74 79 6c 65 2e 62 6f 78  a_num).style.box
2690: 53 68 61 64 6f 77 20 3d 20 22 6e 6f 6e 65 22 3b  Shadow = "none";
26a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 70 70 6c  .    }..    appl
26b0: 79 53 75 67 67 65 73 74 69 6f 6e 20 28 73 4e 6f  ySuggestion (sNo
26c0: 64 65 53 75 67 67 49 64 29 20 7b 20 2f 2f 20 73  deSuggId) { // s
26d0: 75 67 67 0a 20 20 20 20 20 20 20 20 74 72 79 20  ugg.        try 
26e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  {.            le
26f0: 74 20 73 45 72 72 6f 72 49 64 20 3d 20 64 6f 63  t sErrorId = doc
2700: 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74  ument.getElement
2710: 42 79 49 64 28 73 4e 6f 64 65 53 75 67 67 49 64  ById(sNodeSuggId
2720: 29 2e 64 61 74 61 73 65 74 2e 65 72 72 6f 72 5f  ).dataset.error_
2730: 69 64 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  id;.            
2740: 2f 2f 6c 65 74 20 73 50 61 72 61 4e 75 6d 20 3d  //let sParaNum =
2750: 20 73 45 72 72 6f 72 49 64 2e 73 6c 69 63 65 28   sErrorId.slice(
2760: 30 2c 20 73 45 72 72 6f 72 49 64 2e 69 6e 64 65  0, sErrorId.inde
2770: 78 4f 66 28 22 2d 22 29 29 3b 0a 20 20 20 20 20  xOf("-"));.     
2780: 20 20 20 20 20 20 20 6c 65 74 20 78 4e 6f 64 65         let xNode
2790: 45 72 72 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 67  Err = document.g
27a0: 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 67  etElementById("g
27b0: 72 61 6d 6d 61 6c 65 63 74 65 5f 65 72 72 22 20  rammalecte_err" 
27c0: 2b 20 73 45 72 72 6f 72 49 64 29 3b 0a 20 20 20  + sErrorId);.   
27d0: 20 20 20 20 20 20 20 20 20 78 4e 6f 64 65 45 72           xNodeEr
27e0: 72 2e 74 65 78 74 43 6f 6e 74 65 6e 74 20 3d 20  r.textContent = 
27f0: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d  document.getElem
2800: 65 6e 74 42 79 49 64 28 73 4e 6f 64 65 53 75 67  entById(sNodeSug
2810: 67 49 64 29 2e 74 65 78 74 43 6f 6e 74 65 6e 74  gId).textContent
2820: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 4e  ;.            xN
2830: 6f 64 65 45 72 72 2e 63 6c 61 73 73 4e 61 6d 65  odeErr.className
2840: 20 3d 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f   = "grammalecte_
2850: 65 72 72 6f 72 5f 63 6f 72 72 65 63 74 65 64 22  error_corrected"
2860: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 4e  ;.            xN
2870: 6f 64 65 45 72 72 2e 72 65 6d 6f 76 65 41 74 74  odeErr.removeAtt
2880: 72 69 62 75 74 65 28 22 73 74 79 6c 65 22 29 3b  ribute("style");
2890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
28a0: 73 2e 6f 54 6f 6f 6c 74 69 70 2e 68 69 64 65 28  s.oTooltip.hide(
28b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  );.            t
28c0: 68 69 73 2e 72 65 63 68 65 63 6b 50 61 72 61 67  his.recheckParag
28d0: 72 61 70 68 28 70 61 72 73 65 49 6e 74 28 73 45  raph(parseInt(sE
28e0: 72 72 6f 72 49 64 2e 73 6c 69 63 65 28 30 2c 20  rrorId.slice(0, 
28f0: 73 45 72 72 6f 72 49 64 2e 69 6e 64 65 78 4f 66  sErrorId.indexOf
2900: 28 22 2d 22 29 29 29 29 3b 0a 20 20 20 20 20 20  ("-"))));.      
2910: 20 20 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63    }.        catc
2920: 68 20 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20  h (e) {.        
2930: 20 20 20 20 73 68 6f 77 45 72 72 6f 72 28 65 29      showError(e)
2940: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2950: 7d 0a 0a 20 20 20 20 69 67 6e 6f 72 65 45 72 72  }..    ignoreErr
2960: 6f 72 20 28 73 49 67 6e 6f 72 65 42 75 74 74 6f  or (sIgnoreButto
2970: 6e 49 64 29 20 7b 20 20 2f 2f 20 69 67 6e 6f 72  nId) {  // ignor
2980: 65 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a  e.        try {.
2990: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
29a0: 73 45 72 72 6f 72 49 64 20 3d 20 64 6f 63 75 6d  sErrorId = docum
29b0: 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79  ent.getElementBy
29c0: 49 64 28 73 49 67 6e 6f 72 65 42 75 74 74 6f 6e  Id(sIgnoreButton
29d0: 49 64 29 2e 64 61 74 61 73 65 74 2e 65 72 72 6f  Id).dataset.erro
29e0: 72 5f 69 64 3b 0a 20 20 20 20 20 20 20 20 20 20  r_id;.          
29f0: 20 20 6c 65 74 20 78 4e 6f 64 65 45 72 72 20 3d    let xNodeErr =
2a00: 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65   document.getEle
2a10: 6d 65 6e 74 42 79 49 64 28 22 67 72 61 6d 6d 61  mentById("gramma
2a20: 6c 65 63 74 65 5f 65 72 72 22 20 2b 20 73 45 72  lecte_err" + sEr
2a30: 72 6f 72 49 64 29 3b 0a 20 20 20 20 20 20 20 20  rorId);.        
2a40: 20 20 20 20 74 68 69 73 2e 61 49 67 6e 6f 72 65      this.aIgnore
2a50: 64 45 72 72 6f 72 73 2e 61 64 64 28 78 4e 6f 64  dErrors.add(xNod
2a60: 65 45 72 72 2e 64 61 74 61 73 65 74 2e 69 67 6e  eErr.dataset.ign
2a70: 6f 72 65 64 5f 6b 65 79 29 3b 0a 20 20 20 20 20  ored_key);.     
2a80: 20 20 20 20 20 20 20 78 4e 6f 64 65 45 72 72 2e         xNodeErr.
2a90: 63 6c 61 73 73 4e 61 6d 65 20 3d 20 22 67 72 61  className = "gra
2aa0: 6d 6d 61 6c 65 63 74 65 5f 65 72 72 6f 72 5f 69  mmalecte_error_i
2ab0: 67 6e 6f 72 65 64 22 3b 0a 20 20 20 20 20 20 20  gnored";.       
2ac0: 20 20 20 20 20 74 68 69 73 2e 6f 54 6f 6f 6c 74       this.oToolt
2ad0: 69 70 2e 68 69 64 65 28 29 3b 0a 20 20 20 20 20  ip.hide();.     
2ae0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 61 74     }.        cat
2af0: 63 68 20 28 65 29 20 7b 0a 20 20 20 20 20 20 20  ch (e) {.       
2b00: 20 20 20 20 20 73 68 6f 77 45 72 72 6f 72 28 65       showError(e
2b10: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
2b20: 20 7d 0a 0a 20 20 20 20 70 75 72 67 65 54 65 78   }..    purgeTex
2b30: 74 20 28 73 54 65 78 74 29 20 7b 0a 20 20 20 20  t (sText) {.    
2b40: 20 20 20 20 72 65 74 75 72 6e 20 73 54 65 78 74      return sText
2b50: 2e 72 65 70 6c 61 63 65 28 2f 26 6e 62 73 70 3b  .replace(/&nbsp;
2b60: 2f 67 2c 20 22 20 22 29 2e 72 65 70 6c 61 63 65  /g, " ").replace
2b70: 28 2f 26 6c 74 3b 2f 67 2c 20 22 3c 22 29 2e 72  (/&lt;/g, "<").r
2b80: 65 70 6c 61 63 65 28 2f 26 67 74 3b 2f 67 2c 20  eplace(/&gt;/g, 
2b90: 22 3e 22 29 2e 72 65 70 6c 61 63 65 28 2f 26 61  ">").replace(/&a
2ba0: 6d 70 3b 2f 67 2c 20 22 26 22 29 3b 0a 20 20 20  mp;/g, "&");.   
2bb0: 20 7d 0a 0a 20 20 20 20 61 64 64 53 75 6d 6d 61   }..    addSumma
2bc0: 72 79 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20  ry () {.        
2bd0: 2f 2f 20 74 6f 64 6f 0a 20 20 20 20 7d 0a 0a 20  // todo.    }.. 
2be0: 20 20 20 61 64 64 4d 65 73 73 61 67 65 20 28 73     addMessage (s
2bf0: 4d 65 73 73 61 67 65 29 20 7b 0a 20 20 20 20 20  Message) {.     
2c00: 20 20 20 6c 65 74 20 78 4e 6f 64 65 20 3d 20 6f     let xNode = o
2c10: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61  Grammalecte.crea
2c20: 74 65 4e 6f 64 65 28 22 64 69 76 22 2c 20 7b 63  teNode("div", {c
2c30: 6c 61 73 73 4e 61 6d 65 3a 20 22 67 72 61 6d 6d  lassName: "gramm
2c40: 61 6c 65 63 74 65 5f 70 61 6e 65 6c 5f 6d 65 73  alecte_panel_mes
2c50: 73 61 67 65 22 2c 20 74 65 78 74 43 6f 6e 74 65  sage", textConte
2c60: 6e 74 3a 20 73 4d 65 73 73 61 67 65 7d 29 3b 0a  nt: sMessage});.
2c70: 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 50 61          this.xPa
2c80: 72 61 67 72 61 70 68 4c 69 73 74 2e 61 70 70 65  ragraphList.appe
2c90: 6e 64 43 68 69 6c 64 28 78 4e 6f 64 65 29 3b 0a  ndChild(xNode);.
2ca0: 20 20 20 20 7d 0a 0a 20 20 20 20 5f 63 6f 70 79      }..    _copy
2cb0: 54 6f 43 6c 69 70 62 6f 61 72 64 20 28 73 54 65  ToClipboard (sTe
2cc0: 78 74 29 20 20 7b 0a 20 20 20 20 20 20 20 20 2f  xt)  {.        /
2cd0: 2f 20 72 65 63 69 70 65 20 66 72 6f 6d 20 68 74  / recipe from ht
2ce0: 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d  tps://github.com
2cf0: 2f 6d 64 6e 2f 77 65 62 65 78 74 65 6e 73 69 6f  /mdn/webextensio
2d00: 6e 73 2d 65 78 61 6d 70 6c 65 73 2f 62 6c 6f 62  ns-examples/blob
2d10: 2f 6d 61 73 74 65 72 2f 63 6f 6e 74 65 78 74 2d  /master/context-
2d20: 6d 65 6e 75 2d 63 6f 70 79 2d 6c 69 6e 6b 2d 77  menu-copy-link-w
2d30: 69 74 68 2d 74 79 70 65 73 2f 63 6c 69 70 62 6f  ith-types/clipbo
2d40: 61 72 64 2d 68 65 6c 70 65 72 2e 6a 73 0a 20 20  ard-helper.js.  
2d50: 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 73        function s
2d60: 65 74 43 6c 69 70 62 6f 61 72 64 44 61 74 61 20  etClipboardData 
2d70: 28 78 45 76 65 6e 74 29 20 7b 0a 20 20 20 20 20  (xEvent) {.     
2d80: 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
2d90: 72 65 6d 6f 76 65 45 76 65 6e 74 4c 69 73 74 65  removeEventListe
2da0: 6e 65 72 28 22 63 6f 70 79 22 2c 20 73 65 74 43  ner("copy", setC
2db0: 6c 69 70 62 6f 61 72 64 44 61 74 61 2c 20 74 72  lipboardData, tr
2dc0: 75 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ue);.           
2dd0: 20 78 45 76 65 6e 74 2e 73 74 6f 70 49 6d 6d 65   xEvent.stopImme
2de0: 64 69 61 74 65 50 72 6f 70 61 67 61 74 69 6f 6e  diatePropagation
2df0: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
2e00: 78 45 76 65 6e 74 2e 70 72 65 76 65 6e 74 44 65  xEvent.preventDe
2e10: 66 61 75 6c 74 28 29 3b 0a 20 20 20 20 20 20 20  fault();.       
2e20: 20 20 20 20 20 78 45 76 65 6e 74 2e 63 6c 69 70       xEvent.clip
2e30: 62 6f 61 72 64 44 61 74 61 2e 73 65 74 44 61 74  boardData.setDat
2e40: 61 28 22 74 65 78 74 2f 70 6c 61 69 6e 22 2c 20  a("text/plain", 
2e50: 73 54 65 78 74 29 3b 0a 20 20 20 20 20 20 20 20  sText);.        
2e60: 7d 3b 0a 0a 20 20 20 20 20 20 20 20 64 6f 63 75  };..        docu
2e70: 6d 65 6e 74 2e 61 64 64 45 76 65 6e 74 4c 69 73  ment.addEventLis
2e80: 74 65 6e 65 72 28 22 63 6f 70 79 22 2c 20 73 65  tener("copy", se
2e90: 74 43 6c 69 70 62 6f 61 72 64 44 61 74 61 2c 20  tClipboardData, 
2ea0: 74 72 75 65 29 3b 0a 20 20 20 20 20 20 20 20 64  true);.        d
2eb0: 6f 63 75 6d 65 6e 74 2e 65 78 65 63 43 6f 6d 6d  ocument.execComm
2ec0: 61 6e 64 28 22 63 6f 70 79 22 29 3b 0a 20 20 20  and("copy");.   
2ed0: 20 7d 0a 0a 20 20 20 20 63 6f 70 79 54 65 78 74   }..    copyText
2ee0: 54 6f 43 6c 69 70 62 6f 61 72 64 20 28 29 20 7b  ToClipboard () {
2ef0: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 74  .        this.st
2f00: 61 72 74 57 61 69 74 49 63 6f 6e 28 29 3b 0a 20  artWaitIcon();. 
2f10: 20 20 20 20 20 20 20 74 72 79 20 7b 0a 20 20 20         try {.   
2f20: 20 20 20 20 20 20 20 20 20 6c 65 74 20 78 43 6c           let xCl
2f30: 69 70 62 6f 61 72 64 42 75 74 74 6f 6e 20 3d 20  ipboardButton = 
2f40: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d  document.getElem
2f50: 65 6e 74 42 79 49 64 28 22 67 72 61 6d 6d 61 6c  entById("grammal
2f60: 65 63 74 65 5f 63 6c 69 70 62 6f 61 72 64 5f 62  ecte_clipboard_b
2f70: 75 74 74 6f 6e 22 29 3b 0a 20 20 20 20 20 20 20  utton");.       
2f80: 20 20 20 20 20 78 43 6c 69 70 62 6f 61 72 64 42       xClipboardB
2f90: 75 74 74 6f 6e 2e 74 65 78 74 43 6f 6e 74 65 6e  utton.textConten
2fa0: 74 20 3d 20 22 2d 3e 3e 22 3b 0a 20 20 20 20 20  t = "->>";.     
2fb0: 20 20 20 20 20 20 20 6c 65 74 20 73 54 65 78 74         let sText
2fc0: 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 20   = "";.         
2fd0: 20 20 20 66 6f 72 20 28 6c 65 74 20 78 4e 6f 64     for (let xNod
2fe0: 65 20 6f 66 20 64 6f 63 75 6d 65 6e 74 2e 67 65  e of document.ge
2ff0: 74 45 6c 65 6d 65 6e 74 73 42 79 43 6c 61 73 73  tElementsByClass
3000: 4e 61 6d 65 28 22 67 72 61 6d 6d 61 6c 65 63 74  Name("grammalect
3010: 65 5f 70 61 72 61 67 72 61 70 68 22 29 29 20 7b  e_paragraph")) {
3020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3030: 20 73 54 65 78 74 20 2b 3d 20 78 4e 6f 64 65 2e   sText += xNode.
3040: 74 65 78 74 43 6f 6e 74 65 6e 74 20 2b 20 22 5c  textContent + "\
3050: 6e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  n";.            
3060: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  }.            th
3070: 69 73 2e 5f 63 6f 70 79 54 6f 43 6c 69 70 62 6f  is._copyToClipbo
3080: 61 72 64 28 73 54 65 78 74 29 3b 0a 20 20 20 20  ard(sText);.    
3090: 20 20 20 20 20 20 20 20 78 43 6c 69 70 62 6f 61          xClipboa
30a0: 72 64 42 75 74 74 6f 6e 2e 74 65 78 74 43 6f 6e  rdButton.textCon
30b0: 74 65 6e 74 20 3d 20 22 4f 4b 22 3b 0a 20 20 20  tent = "OK";.   
30c0: 20 20 20 20 20 20 20 20 20 77 69 6e 64 6f 77 2e           window.
30d0: 73 65 74 54 69 6d 65 6f 75 74 28 66 75 6e 63 74  setTimeout(funct
30e0: 69 6f 6e 28 29 20 7b 20 78 43 6c 69 70 62 6f 61  ion() { xClipboa
30f0: 72 64 42 75 74 74 6f 6e 2e 74 65 78 74 43 6f 6e  rdButton.textCon
3100: 74 65 6e 74 20 3d 20 22 e2 88 91 22 3b 20 7d 20  tent = "..."; } 
3110: 2c 20 32 30 30 30 29 3b 0a 20 20 20 20 20 20 20  , 2000);.       
3120: 20 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68   }.        catch
3130: 20 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20   (e) {.         
3140: 20 20 20 73 68 6f 77 45 72 72 6f 72 28 65 29 3b     showError(e);
3150: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
3160: 20 20 20 74 68 69 73 2e 73 74 6f 70 57 61 69 74     this.stopWait
3170: 49 63 6f 6e 28 29 3b 0a 20 20 20 20 7d 0a 7d 0a  Icon();.    }.}.
3180: 0a 0a 63 6c 61 73 73 20 47 72 61 6d 6d 61 6c 65  ..class Grammale
3190: 63 74 65 54 6f 6f 6c 74 69 70 20 7b 0a 0a 20 20  cteTooltip {..  
31a0: 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 28 78    constructor (x
31b0: 43 6f 6e 74 65 6e 74 4e 6f 64 65 29 20 7b 0a 20  ContentNode) {. 
31c0: 20 20 20 20 20 20 20 74 68 69 73 2e 73 45 72 72         this.sErr
31d0: 6f 72 49 64 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20  orId = null;.   
31e0: 20 20 20 20 20 74 68 69 73 2e 78 54 6f 6f 6c 74       this.xToolt
31f0: 69 70 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63 74  ip = oGrammalect
3200: 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69  e.createNode("di
3210: 76 22 2c 20 7b 69 64 3a 20 22 67 72 61 6d 6d 61  v", {id: "gramma
3220: 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 22 7d 29  lecte_tooltip"})
3230: 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 78  ;.        this.x
3240: 54 6f 6f 6c 74 69 70 41 72 72 6f 77 20 3d 20 6f  TooltipArrow = o
3250: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61  Grammalecte.crea
3260: 74 65 4e 6f 64 65 28 22 69 6d 67 22 2c 20 7b 0a  teNode("img", {.
3270: 20 20 20 20 20 20 20 20 20 20 20 20 69 64 3a 20              id: 
3280: 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f  "grammalecte_too
3290: 6c 74 69 70 5f 61 72 72 6f 77 22 2c 0a 20 20 20  ltip_arrow",.   
32a0: 20 20 20 20 20 20 20 20 20 73 72 63 3a 20 22 20           src: " 
32b0: 64 61 74 61 3a 69 6d 61 67 65 2f 70 6e 67 3b 62  data:image/png;b
32c0: 61 73 65 36 34 2c 69 56 42 4f 52 77 30 4b 47 67  ase64,iVBORw0KGg
32d0: 6f 41 41 41 41 4e 53 55 68 45 55 67 41 41 41 41  oAAAANSUhEUgAAAA
32e0: 67 41 41 41 41 49 43 41 59 41 41 41 44 45 44 37  gAAAAICAYAAADED7
32f0: 36 4c 41 41 41 41 42 47 64 42 54 55 45 41 41 4c  6LAAAABGdBTUEAAL
3300: 47 50 43 2f 78 68 42 51 41 41 41 41 6c 77 53 46  GPC/xhBQAAAAlwSF
3310: 6c 7a 41 41 41 4f 77 41 41 41 44 73 41 42 61 74  lzAAAOwAAADsABat
3320: 61 4a 43 51 41 41 41 42 6c 30 52 56 68 30 55 32  aJCQAAABl0RVh0U2
3330: 39 6d 64 48 64 68 63 6d 55 41 63 47 46 70 62 6e  9mdHdhcmUAcGFpbn
3340: 51 75 62 6d 56 30 49 44 51 75 4d 43 34 78 4e 7a  QubmV0IDQuMC4xNz
3350: 4e 75 6e 32 4d 41 41 41 41 6e 53 55 52 42 56 43  Nun2MAAAAnSURBVC
3360: 68 54 59 2f 6a 2f 2f 7a 38 63 71 2f 6b 57 2f 77  hTY/j//z8cq/kW/w
3370: 64 68 5a 44 45 4d 53 58 52 46 57 43 56 68 47 4b  dhZDEMSXRFWCVhGK
3380: 77 41 6d 77 51 79 48 6e 67 46 78 66 38 42 35 66  wAmwQyHngFxf8B5f
3390: 4f 47 59 66 65 46 70 59 6f 41 41 41 41 41 53 55  OGYfeFpYoAAAAASU
33a0: 56 4f 52 4b 35 43 59 49 49 3d 22 2c 0a 20 20 20  VORK5CYII=",.   
33b0: 20 20 20 20 20 20 20 20 20 61 6c 74 3a 20 22 5e           alt: "^
33c0: 22 2c 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 20  ",.        });. 
33d0: 20 20 20 20 20 20 20 74 68 69 73 2e 78 54 6f 6f         this.xToo
33e0: 6c 74 69 70 53 75 67 67 42 6c 6f 63 6b 20 3d 20  ltipSuggBlock = 
33f0: 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65  oGrammalecte.cre
3400: 61 74 65 4e 6f 64 65 28 22 64 69 76 22 2c 20 7b  ateNode("div", {
3410: 69 64 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65  id: "grammalecte
3420: 5f 74 6f 6f 6c 74 69 70 5f 73 75 67 67 5f 62 6c  _tooltip_sugg_bl
3430: 6f 63 6b 22 7d 29 3b 0a 20 20 20 20 20 20 20 20  ock"});.        
3440: 6c 65 74 20 78 4d 65 73 73 61 67 65 42 6c 6f 63  let xMessageBloc
3450: 6b 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65  k = oGrammalecte
3460: 2e 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69 76  .createNode("div
3470: 22 2c 20 7b 69 64 3a 20 22 67 72 61 6d 6d 61 6c  ", {id: "grammal
3480: 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 6d 65 73  ecte_tooltip_mes
3490: 73 61 67 65 5f 62 6c 6f 63 6b 22 7d 29 3b 0a 20  sage_block"});. 
34a0: 20 20 20 20 20 20 20 78 4d 65 73 73 61 67 65 42         xMessageB
34b0: 6c 6f 63 6b 2e 61 70 70 65 6e 64 43 68 69 6c 64  lock.appendChild
34c0: 28 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72  (oGrammalecte.cr
34d0: 65 61 74 65 4e 6f 64 65 28 22 64 69 76 22 2c 20  eateNode("div", 
34e0: 7b 69 64 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74  {id: "grammalect
34f0: 65 5f 74 6f 6f 6c 74 69 70 5f 72 75 6c 65 5f 69  e_tooltip_rule_i
3500: 64 22 7d 29 29 3b 0a 20 20 20 20 20 20 20 20 78  d"}));.        x
3510: 4d 65 73 73 61 67 65 42 6c 6f 63 6b 2e 61 70 70  MessageBlock.app
3520: 65 6e 64 43 68 69 6c 64 28 6f 47 72 61 6d 6d 61  endChild(oGramma
3530: 6c 65 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65  lecte.createNode
3540: 28 22 64 69 76 22 2c 20 7b 69 64 3a 20 22 67 72  ("div", {id: "gr
3550: 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69  ammalecte_toolti
3560: 70 5f 6d 65 73 73 61 67 65 22 2c 20 74 65 78 74  p_message", text
3570: 43 6f 6e 74 65 6e 74 3a 20 22 45 72 72 65 75 72  Content: "Erreur
3580: 2e 22 7d 29 29 3b 0a 20 20 20 20 20 20 20 20 6c  ."}));.        l
3590: 65 74 20 78 41 63 74 69 6f 6e 73 20 3d 20 78 4d  et xActions = xM
35a0: 65 73 73 61 67 65 42 6c 6f 63 6b 2e 61 70 70 65  essageBlock.appe
35b0: 6e 64 43 68 69 6c 64 28 6f 47 72 61 6d 6d 61 6c  ndChild(oGrammal
35c0: 65 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65 28  ecte.createNode(
35d0: 22 64 69 76 22 2c 20 7b 69 64 3a 20 22 67 72 61  "div", {id: "gra
35e0: 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70  mmalecte_tooltip
35f0: 5f 61 63 74 69 6f 6e 73 22 7d 29 29 3b 0a 20 20  _actions"}));.  
3600: 20 20 20 20 20 20 78 41 63 74 69 6f 6e 73 2e 61        xActions.a
3610: 70 70 65 6e 64 43 68 69 6c 64 28 6f 47 72 61 6d  ppendChild(oGram
3620: 6d 61 6c 65 63 74 65 2e 63 72 65 61 74 65 4e 6f  malecte.createNo
3630: 64 65 28 22 64 69 76 22 2c 20 7b 69 64 3a 20 22  de("div", {id: "
3640: 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c  grammalecte_tool
3650: 74 69 70 5f 69 67 6e 6f 72 65 22 2c 20 74 65 78  tip_ignore", tex
3660: 74 43 6f 6e 74 65 6e 74 3a 20 22 49 67 6e 6f 72  tContent: "Ignor
3670: 65 72 22 7d 29 29 3b 0a 20 20 20 20 20 20 20 20  er"}));.        
3680: 78 41 63 74 69 6f 6e 73 2e 61 70 70 65 6e 64 43  xActions.appendC
3690: 68 69 6c 64 28 6f 47 72 61 6d 6d 61 6c 65 63 74  hild(oGrammalect
36a0: 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69  e.createNode("di
36b0: 76 22 2c 20 7b 69 64 3a 20 22 67 72 61 6d 6d 61  v", {id: "gramma
36c0: 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 75 72  lecte_tooltip_ur
36d0: 6c 22 2c 20 74 65 78 74 43 6f 6e 74 65 6e 74 3a  l", textContent:
36e0: 20 22 56 6f 75 6c 65 7a 2d 76 6f 75 73 20 65 6e   "Voulez-vous en
36f0: 20 73 61 76 6f 69 72 20 70 6c 75 73 e2 80 af 3f   savoir plus...?
3700: e2 80 a6 22 7d 2c 20 7b 75 72 6c 3a 20 22 22 7d  ..."}, {url: ""}
3710: 29 29 3b 0a 20 20 20 20 20 20 20 20 78 4d 65 73  ));.        xMes
3720: 73 61 67 65 42 6c 6f 63 6b 2e 61 70 70 65 6e 64  sageBlock.append
3730: 43 68 69 6c 64 28 78 41 63 74 69 6f 6e 73 29 3b  Child(xActions);
3740: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 54  .        this.xT
3750: 6f 6f 6c 74 69 70 2e 61 70 70 65 6e 64 43 68 69  ooltip.appendChi
3760: 6c 64 28 78 4d 65 73 73 61 67 65 42 6c 6f 63 6b  ld(xMessageBlock
3770: 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e  );.        this.
3780: 78 54 6f 6f 6c 74 69 70 2e 61 70 70 65 6e 64 43  xTooltip.appendC
3790: 68 69 6c 64 28 6f 47 72 61 6d 6d 61 6c 65 63 74  hild(oGrammalect
37a0: 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69  e.createNode("di
37b0: 76 22 2c 20 7b 69 64 3a 20 22 67 72 61 6d 6d 61  v", {id: "gramma
37c0: 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 73 75  lecte_tooltip_su
37d0: 67 67 5f 74 69 74 6c 65 22 2c 20 74 65 78 74 43  gg_title", textC
37e0: 6f 6e 74 65 6e 74 3a 20 22 53 55 47 47 45 53 54  ontent: "SUGGEST
37f0: 49 4f 4e 53 e2 80 af 3a 22 7d 29 29 3b 0a 20 20  IONS...:"}));.  
3800: 20 20 20 20 20 20 74 68 69 73 2e 78 54 6f 6f 6c        this.xTool
3810: 74 69 70 2e 61 70 70 65 6e 64 43 68 69 6c 64 28  tip.appendChild(
3820: 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 53 75 67  this.xTooltipSug
3830: 67 42 6c 6f 63 6b 29 3b 0a 20 20 20 20 20 20 20  gBlock);.       
3840: 20 78 43 6f 6e 74 65 6e 74 4e 6f 64 65 2e 61 70   xContentNode.ap
3850: 70 65 6e 64 43 68 69 6c 64 28 74 68 69 73 2e 78  pendChild(this.x
3860: 54 6f 6f 6c 74 69 70 29 3b 0a 20 20 20 20 20 20  Tooltip);.      
3870: 20 20 78 43 6f 6e 74 65 6e 74 4e 6f 64 65 2e 61    xContentNode.a
3880: 70 70 65 6e 64 43 68 69 6c 64 28 74 68 69 73 2e  ppendChild(this.
3890: 78 54 6f 6f 6c 74 69 70 41 72 72 6f 77 29 3b 0a  xTooltipArrow);.
38a0: 20 20 20 20 7d 0a 0a 20 20 20 20 73 68 6f 77 20      }..    show 
38b0: 28 73 4e 6f 64 65 45 72 72 6f 72 49 64 29 20 7b  (sNodeErrorId) {
38c0: 20 20 2f 2f 20 65 72 72 0a 20 20 20 20 20 20 20    // err.       
38d0: 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20 20 20   try {.         
38e0: 20 20 20 6c 65 74 20 78 4e 6f 64 65 45 72 72 20     let xNodeErr 
38f0: 3d 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c  = document.getEl
3900: 65 6d 65 6e 74 42 79 49 64 28 73 4e 6f 64 65 45  ementById(sNodeE
3910: 72 72 6f 72 49 64 29 3b 0a 20 20 20 20 20 20 20  rrorId);.       
3920: 20 20 20 20 20 74 68 69 73 2e 73 45 72 72 6f 72       this.sError
3930: 49 64 20 3d 20 78 4e 6f 64 65 45 72 72 2e 64 61  Id = xNodeErr.da
3940: 74 61 73 65 74 2e 65 72 72 6f 72 5f 69 64 3b 20  taset.error_id; 
3950: 2f 2f 20 77 65 20 73 74 6f 72 65 20 65 72 72 6f  // we store erro
3960: 72 5f 69 64 20 68 65 72 65 20 74 6f 20 6b 6e 6f  r_id here to kno
3970: 77 20 69 66 20 73 70 65 6c 6c 5f 73 75 67 67 65  w if spell_sugge
3980: 73 74 69 6f 6e 73 20 61 72 65 20 67 69 76 65 6e  stions are given
3990: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 77 6f   to the right wo
39a0: 72 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  rd..            
39b0: 6c 65 74 20 6e 54 6f 6f 6c 74 69 70 4c 65 66 74  let nTooltipLeft
39c0: 4c 69 6d 69 74 20 3d 20 6f 47 72 61 6d 6d 61 6c  Limit = oGrammal
39d0: 65 63 74 65 2e 6f 47 43 50 61 6e 65 6c 2e 67 65  ecte.oGCPanel.ge
39e0: 74 57 69 64 74 68 28 29 20 2d 20 33 33 30 3b 20  tWidth() - 330; 
39f0: 2f 2f 20 70 61 72 61 67 72 61 70 68 20 77 69 64  // paragraph wid
3a00: 74 68 20 2d 20 74 6f 6f 6c 74 69 70 20 77 69 64  th - tooltip wid
3a10: 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  th.            l
3a20: 65 74 20 6e 41 72 72 6f 77 4c 69 6d 69 74 20 3d  et nArrowLimit =
3a30: 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f 47   oGrammalecte.oG
3a40: 43 50 61 6e 65 6c 2e 67 65 74 57 69 64 74 68 28  CPanel.getWidth(
3a50: 29 20 2d 20 32 30 3b 0a 20 20 20 20 20 20 20 20  ) - 20;.        
3a60: 20 20 20 20 74 68 69 73 2e 78 54 6f 6f 6c 74 69      this.xToolti
3a70: 70 41 72 72 6f 77 2e 73 74 79 6c 65 2e 74 6f 70  pArrow.style.top
3a80: 20 3d 20 28 78 4e 6f 64 65 45 72 72 2e 6f 66 66   = (xNodeErr.off
3a90: 73 65 74 54 6f 70 20 2b 20 31 36 29 20 2b 20 22  setTop + 16) + "
3aa0: 70 78 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20  px";.           
3ab0: 20 6c 65 74 20 6e 55 73 65 66 75 6c 45 72 72 6f   let nUsefulErro
3ac0: 72 57 69 64 74 68 20 3d 20 28 28 78 4e 6f 64 65  rWidth = ((xNode
3ad0: 45 72 72 2e 6f 66 66 73 65 74 4c 65 66 74 20 2b  Err.offsetLeft +
3ae0: 20 78 4e 6f 64 65 45 72 72 2e 6f 66 66 73 65 74   xNodeErr.offset
3af0: 57 69 64 74 68 29 20 3e 20 6e 41 72 72 6f 77 4c  Width) > nArrowL
3b00: 69 6d 69 74 29 20 3f 20 28 6e 41 72 72 6f 77 4c  imit) ? (nArrowL
3b10: 69 6d 69 74 20 2d 20 78 4e 6f 64 65 45 72 72 2e  imit - xNodeErr.
3b20: 6f 66 66 73 65 74 4c 65 66 74 29 20 3a 20 78 4e  offsetLeft) : xN
3b30: 6f 64 65 45 72 72 2e 6f 66 66 73 65 74 57 69 64  odeErr.offsetWid
3b40: 74 68 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  th;.            
3b50: 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 41 72 72  this.xTooltipArr
3b60: 6f 77 2e 73 74 79 6c 65 2e 6c 65 66 74 20 3d 20  ow.style.left = 
3b70: 28 78 4e 6f 64 65 45 72 72 2e 6f 66 66 73 65 74  (xNodeErr.offset
3b80: 4c 65 66 74 20 2b 20 4d 61 74 68 2e 66 6c 6f 6f  Left + Math.floo
3b90: 72 28 28 6e 55 73 65 66 75 6c 45 72 72 6f 72 57  r((nUsefulErrorW
3ba0: 69 64 74 68 20 2f 20 32 29 29 20 2d 20 34 29 20  idth / 2)) - 4) 
3bb0: 2b 20 22 70 78 22 3b 20 2f 2f 20 34 20 69 73 20  + "px"; // 4 is 
3bc0: 68 61 6c 66 20 74 68 65 20 77 69 64 74 68 20 6f  half the width o
3bd0: 66 20 74 68 65 20 61 72 72 6f 77 2e 0a 20 20 20  f the arrow..   
3be0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 54           this.xT
3bf0: 6f 6f 6c 74 69 70 2e 73 74 79 6c 65 2e 74 6f 70  ooltip.style.top
3c00: 20 3d 20 28 78 4e 6f 64 65 45 72 72 2e 6f 66 66   = (xNodeErr.off
3c10: 73 65 74 54 6f 70 20 2b 20 32 30 29 20 2b 20 22  setTop + 20) + "
3c20: 70 78 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20  px";.           
3c30: 20 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 2e 73   this.xTooltip.s
3c40: 74 79 6c 65 2e 6c 65 66 74 20 3d 20 28 78 4e 6f  tyle.left = (xNo
3c50: 64 65 45 72 72 2e 6f 66 66 73 65 74 4c 65 66 74  deErr.offsetLeft
3c60: 20 3e 20 6e 54 6f 6f 6c 74 69 70 4c 65 66 74 4c   > nTooltipLeftL
3c70: 69 6d 69 74 29 20 3f 20 6e 54 6f 6f 6c 74 69 70  imit) ? nTooltip
3c80: 4c 65 66 74 4c 69 6d 69 74 20 2b 20 22 70 78 22  LeftLimit + "px"
3c90: 20 3a 20 78 4e 6f 64 65 45 72 72 2e 6f 66 66 73   : xNodeErr.offs
3ca0: 65 74 4c 65 66 74 20 2b 20 22 70 78 22 3b 0a 20  etLeft + "px";. 
3cb0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 78             if (x
3cc0: 4e 6f 64 65 45 72 72 2e 64 61 74 61 73 65 74 2e  NodeErr.dataset.
3cd0: 65 72 72 6f 72 5f 74 79 70 65 20 3d 3d 3d 20 22  error_type === "
3ce0: 67 72 61 6d 6d 61 72 22 29 20 7b 0a 20 20 20 20  grammar") {.    
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 67              // g
3d00: 72 61 6d 6d 61 72 20 65 72 72 6f 72 0a 20 20 20  rammar error.   
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3d20: 28 78 4e 6f 64 65 45 72 72 2e 64 61 74 61 73 65  (xNodeErr.datase
3d30: 74 2e 67 63 5f 6d 65 73 73 61 67 65 2e 69 6e 63  t.gc_message.inc
3d40: 6c 75 64 65 73 28 22 20 23 23 22 29 29 20 7b 0a  ludes(" ##")) {.
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d60: 20 20 20 20 6c 65 74 20 6e 20 3d 20 78 4e 6f 64      let n = xNod
3d70: 65 45 72 72 2e 64 61 74 61 73 65 74 2e 67 63 5f  eErr.dataset.gc_
3d80: 6d 65 73 73 61 67 65 2e 69 6e 64 65 78 4f 66 28  message.indexOf(
3d90: 22 20 23 23 22 29 3b 0a 20 20 20 20 20 20 20 20  " ##");.        
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
3db0: 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42  ment.getElementB
3dc0: 79 49 64 28 22 67 72 61 6d 6d 61 6c 65 63 74 65  yId("grammalecte
3dd0: 5f 74 6f 6f 6c 74 69 70 5f 6d 65 73 73 61 67 65  _tooltip_message
3de0: 22 29 2e 74 65 78 74 43 6f 6e 74 65 6e 74 20 3d  ").textContent =
3df0: 20 78 4e 6f 64 65 45 72 72 2e 64 61 74 61 73 65   xNodeErr.datase
3e00: 74 2e 67 63 5f 6d 65 73 73 61 67 65 2e 73 6c 69  t.gc_message.sli
3e10: 63 65 28 30 2c 20 6e 29 3b 0a 20 20 20 20 20 20  ce(0, n);.      
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
3e30: 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e  cument.getElemen
3e40: 74 42 79 49 64 28 22 67 72 61 6d 6d 61 6c 65 63  tById("grammalec
3e50: 74 65 5f 74 6f 6f 6c 74 69 70 5f 72 75 6c 65 5f  te_tooltip_rule_
3e60: 69 64 22 29 2e 74 65 78 74 43 6f 6e 74 65 6e 74  id").textContent
3e70: 20 3d 20 22 52 c3 a8 67 6c 65 e2 80 af 3a 20 22   = "R..gle...: "
3e80: 20 2b 20 78 4e 6f 64 65 45 72 72 2e 64 61 74 61   + xNodeErr.data
3e90: 73 65 74 2e 67 63 5f 6d 65 73 73 61 67 65 2e 73  set.gc_message.s
3ea0: 6c 69 63 65 28 6e 2b 32 29 3b 0a 20 20 20 20 20  lice(n+2);.     
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
3ec0: 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65  ocument.getEleme
3ed0: 6e 74 42 79 49 64 28 22 67 72 61 6d 6d 61 6c 65  ntById("grammale
3ee0: 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 72 75 6c 65  cte_tooltip_rule
3ef0: 5f 69 64 22 29 2e 73 74 79 6c 65 2e 64 69 73 70  _id").style.disp
3f00: 6c 61 79 20 3d 20 22 62 6c 6f 63 6b 22 3b 0a 20  lay = "block";. 
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
3f20: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
3f40: 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42  ment.getElementB
3f50: 79 49 64 28 22 67 72 61 6d 6d 61 6c 65 63 74 65  yId("grammalecte
3f60: 5f 74 6f 6f 6c 74 69 70 5f 6d 65 73 73 61 67 65  _tooltip_message
3f70: 22 29 2e 74 65 78 74 43 6f 6e 74 65 6e 74 20 3d  ").textContent =
3f80: 20 78 4e 6f 64 65 45 72 72 2e 64 61 74 61 73 65   xNodeErr.datase
3f90: 74 2e 67 63 5f 6d 65 73 73 61 67 65 3b 0a 20 20  t.gc_message;.  
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fb0: 20 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c    document.getEl
3fc0: 65 6d 65 6e 74 42 79 49 64 28 22 67 72 61 6d 6d  ementById("gramm
3fd0: 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 72  alecte_tooltip_r
3fe0: 75 6c 65 5f 69 64 22 29 2e 73 74 79 6c 65 2e 64  ule_id").style.d
3ff0: 69 73 70 6c 61 79 20 3d 20 22 6e 6f 6e 65 22 3b  isplay = "none";
4000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4010: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
4020: 20 20 20 69 66 20 28 78 4e 6f 64 65 45 72 72 2e     if (xNodeErr.
4030: 64 61 74 61 73 65 74 2e 67 63 5f 75 72 6c 20 21  dataset.gc_url !
4040: 3d 20 22 22 29 20 7b 0a 20 20 20 20 20 20 20 20  = "") {.        
4050: 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
4060: 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42  ment.getElementB
4070: 79 49 64 28 22 67 72 61 6d 6d 61 6c 65 63 74 65  yId("grammalecte
4080: 5f 74 6f 6f 6c 74 69 70 5f 75 72 6c 22 29 2e 64  _tooltip_url").d
4090: 61 74 61 73 65 74 2e 75 72 6c 20 3d 20 78 4e 6f  ataset.url = xNo
40a0: 64 65 45 72 72 2e 64 61 74 61 73 65 74 2e 67 63  deErr.dataset.gc
40b0: 5f 75 72 6c 3b 0a 20 20 20 20 20 20 20 20 20 20  _url;.          
40c0: 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
40d0: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49  nt.getElementByI
40e0: 64 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74  d("grammalecte_t
40f0: 6f 6f 6c 74 69 70 5f 75 72 6c 22 29 2e 73 74 79  ooltip_url").sty
4100: 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20 22 69 6e  le.display = "in
4110: 6c 69 6e 65 22 3b 0a 20 20 20 20 20 20 20 20 20  line";.         
4120: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4140: 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74      document.get
4150: 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 67 72 61  ElementById("gra
4160: 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70  mmalecte_tooltip
4170: 5f 75 72 6c 22 29 2e 64 61 74 61 73 65 74 2e 75  _url").dataset.u
4180: 72 6c 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20  rl = "";.       
4190: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63               doc
41a0: 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74  ument.getElement
41b0: 42 79 49 64 28 22 67 72 61 6d 6d 61 6c 65 63 74  ById("grammalect
41c0: 65 5f 74 6f 6f 6c 74 69 70 5f 75 72 6c 22 29 2e  e_tooltip_url").
41d0: 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20  style.display = 
41e0: 22 6e 6f 6e 65 22 3b 0a 20 20 20 20 20 20 20 20  "none";.        
41f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4200: 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
4210: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49  nt.getElementByI
4220: 64 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74  d("grammalecte_t
4230: 6f 6f 6c 74 69 70 5f 69 67 6e 6f 72 65 22 29 2e  ooltip_ignore").
4240: 64 61 74 61 73 65 74 2e 65 72 72 6f 72 5f 69 64  dataset.error_id
4250: 20 3d 20 78 4e 6f 64 65 45 72 72 2e 64 61 74 61   = xNodeErr.data
4260: 73 65 74 2e 65 72 72 6f 72 5f 69 64 3b 0a 20 20  set.error_id;.  
4270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65                le
4280: 74 20 69 53 75 67 67 20 3d 20 30 3b 0a 20 20 20  t iSugg = 0;.   
4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
42a0: 73 2e 63 6c 65 61 72 53 75 67 67 65 73 74 69 6f  s.clearSuggestio
42b0: 6e 42 6c 6f 63 6b 28 29 3b 0a 20 20 20 20 20 20  nBlock();.      
42c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 78 4e            if (xN
42d0: 6f 64 65 45 72 72 2e 64 61 74 61 73 65 74 2e 73  odeErr.dataset.s
42e0: 75 67 67 65 73 74 69 6f 6e 73 2e 6c 65 6e 67 74  uggestions.lengt
42f0: 68 20 3e 20 30 29 20 7b 0a 20 20 20 20 20 20 20  h > 0) {.       
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
4310: 20 28 6c 65 74 20 73 53 75 67 67 20 6f 66 20 78   (let sSugg of x
4320: 4e 6f 64 65 45 72 72 2e 64 61 74 61 73 65 74 2e  NodeErr.dataset.
4330: 73 75 67 67 65 73 74 69 6f 6e 73 2e 73 70 6c 69  suggestions.spli
4340: 74 28 22 7c 22 29 29 20 7b 0a 20 20 20 20 20 20  t("|")) {.      
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 20 20 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 53    this.xTooltipS
4370: 75 67 67 42 6c 6f 63 6b 2e 61 70 70 65 6e 64 43  uggBlock.appendC
4380: 68 69 6c 64 28 74 68 69 73 2e 5f 63 72 65 61 74  hild(this._creat
4390: 65 53 75 67 67 65 73 74 69 6f 6e 28 78 4e 6f 64  eSuggestion(xNod
43a0: 65 45 72 72 2e 64 61 74 61 73 65 74 2e 65 72 72  eErr.dataset.err
43b0: 6f 72 5f 69 64 2c 20 30 2c 20 69 53 75 67 67 2c  or_id, 0, iSugg,
43c0: 20 73 53 75 67 67 29 29 3b 0a 20 20 20 20 20 20   sSugg));.      
43d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43e0: 20 20 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 53    this.xTooltipS
43f0: 75 67 67 42 6c 6f 63 6b 2e 61 70 70 65 6e 64 43  uggBlock.appendC
4400: 68 69 6c 64 28 64 6f 63 75 6d 65 6e 74 2e 63 72  hild(document.cr
4410: 65 61 74 65 54 65 78 74 4e 6f 64 65 28 22 20 22  eateTextNode(" "
4420: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
4430: 20 20 20 20 20 20 20 20 20 20 20 20 69 53 75 67              iSug
4440: 67 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  g += 1;.        
4450: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                } 
4470: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
4480: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
4490: 78 54 6f 6f 6c 74 69 70 53 75 67 67 42 6c 6f 63  xTooltipSuggBloc
44a0: 6b 2e 74 65 78 74 43 6f 6e 74 65 6e 74 20 3d 20  k.textContent = 
44b0: 22 41 75 63 75 6e 65 2e 22 3b 0a 20 20 20 20 20  "Aucune.";.     
44c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
44d0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
44e0: 20 20 20 20 20 20 20 69 66 20 28 78 4e 6f 64 65         if (xNode
44f0: 45 72 72 2e 64 61 74 61 73 65 74 2e 65 72 72 6f  Err.dataset.erro
4500: 72 5f 74 79 70 65 20 3d 3d 3d 20 22 73 70 65 6c  r_type === "spel
4510: 6c 69 6e 67 22 29 20 7b 0a 20 20 20 20 20 20 20  ling") {.       
4520: 20 20 20 20 20 20 20 20 20 2f 2f 20 73 70 65 6c           // spel
4530: 6c 69 6e 67 20 6d 69 73 74 61 6b 65 0a 20 20 20  ling mistake.   
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63               doc
4550: 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74  ument.getElement
4560: 42 79 49 64 28 22 67 72 61 6d 6d 61 6c 65 63 74  ById("grammalect
4570: 65 5f 74 6f 6f 6c 74 69 70 5f 6d 65 73 73 61 67  e_tooltip_messag
4580: 65 22 29 2e 74 65 78 74 43 6f 6e 74 65 6e 74 20  e").textContent 
4590: 3d 20 22 4d 6f 74 20 69 6e 63 6f 6e 6e 75 20 64  = "Mot inconnu d
45a0: 75 20 64 69 63 74 69 6f 6e 6e 61 69 72 65 2e 22  u dictionnaire."
45b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
45c0: 20 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c    document.getEl
45d0: 65 6d 65 6e 74 42 79 49 64 28 22 67 72 61 6d 6d  ementById("gramm
45e0: 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 69  alecte_tooltip_i
45f0: 67 6e 6f 72 65 22 29 2e 64 61 74 61 73 65 74 2e  gnore").dataset.
4600: 65 72 72 6f 72 5f 69 64 20 3d 20 78 4e 6f 64 65  error_id = xNode
4610: 45 72 72 2e 64 61 74 61 73 65 74 2e 65 72 72 6f  Err.dataset.erro
4620: 72 5f 69 64 3b 0a 20 20 20 20 20 20 20 20 20 20  r_id;.          
4630: 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67        document.g
4640: 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 67  etElementById("g
4650: 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74  rammalecte_toolt
4660: 69 70 5f 75 72 6c 22 29 2e 64 61 74 61 73 65 74  ip_url").dataset
4670: 2e 75 72 6c 20 3d 20 22 22 3b 0a 20 20 20 20 20  .url = "";.     
4680: 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
4690: 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79  ent.getElementBy
46a0: 49 64 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f  Id("grammalecte_
46b0: 74 6f 6f 6c 74 69 70 5f 75 72 6c 22 29 2e 73 74  tooltip_url").st
46c0: 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20 22 6e  yle.display = "n
46d0: 6f 6e 65 22 3b 0a 20 20 20 20 20 20 20 20 20 20  one";.          
46e0: 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67        document.g
46f0: 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 67  etElementById("g
4700: 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74  rammalecte_toolt
4710: 69 70 5f 72 75 6c 65 5f 69 64 22 29 2e 73 74 79  ip_rule_id").sty
4720: 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20 22 6e 6f  le.display = "no
4730: 6e 65 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ne";.           
4740: 20 20 20 20 20 74 68 69 73 2e 63 6c 65 61 72 53       this.clearS
4750: 75 67 67 65 73 74 69 6f 6e 42 6c 6f 63 6b 28 29  uggestionBlock()
4760: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
4770: 20 20 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 53    this.xTooltipS
4780: 75 67 67 42 6c 6f 63 6b 2e 74 65 78 74 43 6f 6e  uggBlock.textCon
4790: 74 65 6e 74 20 3d 20 22 52 65 63 68 65 72 63 68  tent = "Recherch
47a0: 65 20 64 65 20 67 72 61 70 68 69 65 73 20 70 6f  e de graphies po
47b0: 73 73 69 62 6c 65 73 e2 80 a6 22 3b 0a 20 20 20  ssibles...";.   
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 78 47 72               xGr
47d0: 61 6d 6d 61 6c 65 63 74 65 50 6f 72 74 2e 70 6f  ammalectePort.po
47e0: 73 74 4d 65 73 73 61 67 65 28 7b 0a 20 20 20 20  stMessage({.    
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4800: 73 43 6f 6d 6d 61 6e 64 3a 20 22 67 65 74 53 70  sCommand: "getSp
4810: 65 6c 6c 53 75 67 67 65 73 74 69 6f 6e 73 22 2c  ellSuggestions",
4820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4830: 20 20 20 20 20 64 50 61 72 61 6d 3a 20 7b 73 57       dParam: {sW
4840: 6f 72 64 3a 20 78 4e 6f 64 65 45 72 72 2e 74 65  ord: xNodeErr.te
4850: 78 74 43 6f 6e 74 65 6e 74 7d 2c 0a 20 20 20 20  xtContent},.    
4860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4870: 64 49 6e 66 6f 3a 20 7b 73 45 72 72 6f 72 49 64  dInfo: {sErrorId
4880: 3a 20 78 4e 6f 64 65 45 72 72 2e 64 61 74 61 73  : xNodeErr.datas
4890: 65 74 2e 65 72 72 6f 72 5f 69 64 7d 0a 20 20 20  et.error_id}.   
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b               });
48b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
48c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
48d0: 78 54 6f 6f 6c 74 69 70 41 72 72 6f 77 2e 73 74  xTooltipArrow.st
48e0: 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20 22 62  yle.display = "b
48f0: 6c 6f 63 6b 22 3b 0a 20 20 20 20 20 20 20 20 20  lock";.         
4900: 20 20 20 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70     this.xTooltip
4910: 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d  .style.display =
4920: 20 22 62 6c 6f 63 6b 22 3b 0a 20 20 20 20 20 20   "block";.      
4930: 20 20 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63    }.        catc
4940: 68 20 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20  h (e) {.        
4950: 20 20 20 20 73 68 6f 77 45 72 72 6f 72 28 65 29      showError(e)
4960: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4970: 7d 0a 0a 20 20 20 20 63 6c 65 61 72 53 75 67 67  }..    clearSugg
4980: 65 73 74 69 6f 6e 42 6c 6f 63 6b 20 28 29 20 7b  estionBlock () {
4990: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28  .        while (
49a0: 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 53 75 67  this.xTooltipSug
49b0: 67 42 6c 6f 63 6b 2e 66 69 72 73 74 43 68 69 6c  gBlock.firstChil
49c0: 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  d) {.           
49d0: 20 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 53 75   this.xTooltipSu
49e0: 67 67 42 6c 6f 63 6b 2e 72 65 6d 6f 76 65 43 68  ggBlock.removeCh
49f0: 69 6c 64 28 74 68 69 73 2e 78 54 6f 6f 6c 74 69  ild(this.xToolti
4a00: 70 53 75 67 67 42 6c 6f 63 6b 2e 66 69 72 73 74  pSuggBlock.first
4a10: 43 68 69 6c 64 29 3b 0a 20 20 20 20 20 20 20 20  Child);.        
4a20: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 65 74  }.    }..    set
4a30: 54 6f 6f 6c 74 69 70 43 6f 6c 6f 72 20 28 29 20  TooltipColor () 
4a40: 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 74 6f 64  {.        // tod
4a50: 6f 0a 20 20 20 20 7d 0a 0a 20 20 20 20 68 69 64  o.    }..    hid
4a60: 65 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 74  e () {.        t
4a70: 68 69 73 2e 78 54 6f 6f 6c 74 69 70 41 72 72 6f  his.xTooltipArro
4a80: 77 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20  w.style.display 
4a90: 3d 20 22 6e 6f 6e 65 22 3b 0a 20 20 20 20 20 20  = "none";.      
4aa0: 20 20 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 2e    this.xTooltip.
4ab0: 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20  style.display = 
4ac0: 22 6e 6f 6e 65 22 3b 0a 20 20 20 20 7d 0a 0a 20  "none";.    }.. 
4ad0: 20 20 20 5f 63 72 65 61 74 65 53 75 67 67 65 73     _createSugges
4ae0: 74 69 6f 6e 20 28 73 45 72 72 6f 72 49 64 2c 20  tion (sErrorId, 
4af0: 69 53 75 67 67 42 6c 6f 63 6b 2c 20 69 53 75 67  iSuggBlock, iSug
4b00: 67 2c 20 73 53 75 67 67 29 20 7b 0a 20 20 20 20  g, sSugg) {.    
4b10: 20 20 20 20 6c 65 74 20 78 4e 6f 64 65 53 75 67      let xNodeSug
4b20: 67 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 63 72 65  g = document.cre
4b30: 61 74 65 45 6c 65 6d 65 6e 74 28 22 64 69 76 22  ateElement("div"
4b40: 29 3b 0a 20 20 20 20 20 20 20 20 78 4e 6f 64 65  );.        xNode
4b50: 53 75 67 67 2e 69 64 20 3d 20 22 67 72 61 6d 6d  Sugg.id = "gramm
4b60: 61 6c 65 63 74 65 5f 73 75 67 67 22 20 2b 20 73  alecte_sugg" + s
4b70: 45 72 72 6f 72 49 64 20 2b 20 22 2d 22 20 2b 20  ErrorId + "-" + 
4b80: 69 53 75 67 67 42 6c 6f 63 6b 2e 74 6f 53 74 72  iSuggBlock.toStr
4b90: 69 6e 67 28 29 20 2b 20 22 2d 22 20 2b 20 69 53  ing() + "-" + iS
4ba0: 75 67 67 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a  ugg.toString();.
4bb0: 20 20 20 20 20 20 20 20 78 4e 6f 64 65 53 75 67          xNodeSug
4bc0: 67 2e 63 6c 61 73 73 4e 61 6d 65 20 3d 20 22 67  g.className = "g
4bd0: 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74  rammalecte_toolt
4be0: 69 70 5f 73 75 67 67 22 3b 0a 20 20 20 20 20 20  ip_sugg";.      
4bf0: 20 20 78 4e 6f 64 65 53 75 67 67 2e 64 61 74 61    xNodeSugg.data
4c00: 73 65 74 2e 65 72 72 6f 72 5f 69 64 20 3d 20 73  set.error_id = s
4c10: 45 72 72 6f 72 49 64 3b 0a 20 20 20 20 20 20 20  ErrorId;.       
4c20: 20 78 4e 6f 64 65 53 75 67 67 2e 74 65 78 74 43   xNodeSugg.textC
4c30: 6f 6e 74 65 6e 74 20 3d 20 73 53 75 67 67 3b 0a  ontent = sSugg;.
4c40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 78          return x
4c50: 4e 6f 64 65 53 75 67 67 3b 0a 20 20 20 20 7d 0a  NodeSugg;.    }.
4c60: 0a 20 20 20 20 73 65 74 53 70 65 6c 6c 53 75 67  .    setSpellSug
4c70: 67 65 73 74 69 6f 6e 73 46 6f 72 20 28 73 57 6f  gestionsFor (sWo
4c80: 72 64 2c 20 61 53 75 67 67 2c 20 69 53 75 67 67  rd, aSugg, iSugg
4c90: 42 6c 6f 63 6b 2c 20 73 45 72 72 6f 72 49 64 29  Block, sErrorId)
4ca0: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 73 70   {.        // sp
4cb0: 65 6c 6c 20 63 68 65 63 6b 69 6e 67 20 73 75 67  ell checking sug
4cc0: 67 65 73 74 69 6f 6e 73 0a 20 20 20 20 20 20 20  gestions.       
4cd0: 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20 20 20   try {.         
4ce0: 20 20 20 69 66 20 28 73 45 72 72 6f 72 49 64 20     if (sErrorId 
4cf0: 3d 3d 3d 20 74 68 69 73 2e 73 45 72 72 6f 72 49  === this.sErrorI
4d00: 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  d) {.           
4d10: 20 20 20 20 20 6c 65 74 20 78 53 75 67 67 42 6c       let xSuggBl
4d20: 6f 63 6b 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 67  ock = document.g
4d30: 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 67  etElementById("g
4d40: 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74  rammalecte_toolt
4d50: 69 70 5f 73 75 67 67 5f 62 6c 6f 63 6b 22 29 3b  ip_sugg_block");
4d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d70: 20 69 66 20 28 69 53 75 67 67 42 6c 6f 63 6b 20   if (iSuggBlock 
4d80: 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20  == 0) {.        
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 78 53 75 67              xSug
4da0: 67 42 6c 6f 63 6b 2e 74 65 78 74 43 6f 6e 74 65  gBlock.textConte
4db0: 6e 74 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20  nt = "";.       
4dc0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
4dd0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
4de0: 61 53 75 67 67 20 7c 7c 20 61 53 75 67 67 2e 6c  aSugg || aSugg.l
4df0: 65 6e 67 74 68 20 3d 3d 20 30 29 20 7b 0a 20 20  ength == 0) {.  
4e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e10: 20 20 69 66 20 28 69 53 75 67 67 42 6c 6f 63 6b    if (iSuggBlock
4e20: 20 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20   == 0) {.       
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e40: 20 78 53 75 67 67 42 6c 6f 63 6b 2e 61 70 70 65   xSuggBlock.appe
4e50: 6e 64 43 68 69 6c 64 28 64 6f 63 75 6d 65 6e 74  ndChild(document
4e60: 2e 63 72 65 61 74 65 54 65 78 74 4e 6f 64 65 28  .createTextNode(
4e70: 22 41 75 63 75 6e 65 2e 22 29 29 3b 0a 20 20 20  "Aucune."));.   
4e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e90: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
4ea0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
4eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ec0: 69 66 20 28 69 53 75 67 67 42 6c 6f 63 6b 20 3e  if (iSuggBlock >
4ed0: 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20   0) {.          
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 53                xS
4ef0: 75 67 67 42 6c 6f 63 6b 2e 61 70 70 65 6e 64 43  uggBlock.appendC
4f00: 68 69 6c 64 28 6f 47 72 61 6d 6d 61 6c 65 63 74  hild(oGrammalect
4f10: 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69  e.createNode("di
4f20: 76 22 2c 20 7b 63 6c 61 73 73 4e 61 6d 65 3a 20  v", {className: 
4f30: 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f  "grammalecte_too
4f40: 6c 74 69 70 5f 6f 74 68 65 72 5f 73 75 67 67 5f  ltip_other_sugg_
4f50: 74 69 74 6c 65 22 2c 20 74 65 78 74 43 6f 6e 74  title", textCont
4f60: 65 6e 74 3a 20 22 41 55 54 52 45 53 20 53 55 47  ent: "AUTRES SUG
4f70: 47 45 53 54 49 4f 4e 53 e2 80 af 3a 22 7d 29 29  GESTIONS...:"}))
4f80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
4f90: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
4fb0: 69 53 75 67 67 20 3d 20 30 3b 0a 20 20 20 20 20  iSugg = 0;.     
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
4fd0: 6f 72 20 28 6c 65 74 20 73 53 75 67 67 20 6f 66  or (let sSugg of
4fe0: 20 61 53 75 67 67 29 20 7b 0a 20 20 20 20 20 20   aSugg) {.      
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5000: 20 20 78 53 75 67 67 42 6c 6f 63 6b 2e 61 70 70    xSuggBlock.app
5010: 65 6e 64 43 68 69 6c 64 28 74 68 69 73 2e 5f 63  endChild(this._c
5020: 72 65 61 74 65 53 75 67 67 65 73 74 69 6f 6e 28  reateSuggestion(
5030: 73 45 72 72 6f 72 49 64 2c 20 69 53 75 67 67 42  sErrorId, iSuggB
5040: 6c 6f 63 6b 2c 20 69 53 75 67 67 2c 20 73 53 75  lock, iSugg, sSu
5050: 67 67 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  gg));.          
5060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 53                xS
5070: 75 67 67 42 6c 6f 63 6b 2e 61 70 70 65 6e 64 43  uggBlock.appendC
5080: 68 69 6c 64 28 64 6f 63 75 6d 65 6e 74 2e 63 72  hild(document.cr
5090: 65 61 74 65 54 65 78 74 4e 6f 64 65 28 22 20 22  eateTextNode(" "
50a0: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 53 75 67              iSug
50c0: 67 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  g += 1;.        
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
50e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
5100: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5110: 63 61 74 63 68 20 28 65 29 20 7b 0a 20 20 20 20  catch (e) {.    
5120: 20 20 20 20 20 20 20 20 6c 65 74 20 78 53 75 67          let xSug
5130: 67 42 6c 6f 63 6b 20 3d 20 64 6f 63 75 6d 65 6e  gBlock = documen
5140: 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64  t.getElementById
5150: 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f  ("grammalecte_to
5160: 6f 6c 74 69 70 5f 73 75 67 67 5f 62 6c 6f 63 6b  oltip_sugg_block
5170: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
5180: 78 53 75 67 67 42 6c 6f 63 6b 2e 61 70 70 65 6e  xSuggBlock.appen
5190: 64 43 68 69 6c 64 28 64 6f 63 75 6d 65 6e 74 2e  dChild(document.
51a0: 63 72 65 61 74 65 54 65 78 74 4e 6f 64 65 28 22  createTextNode("
51b0: 23 20 4f 75 70 73 2e 20 4c 65 20 6d c3 a9 63 61  # Oups. Le m..ca
51c0: 6e 69 73 6d 65 20 64 65 20 73 75 67 67 65 73 74  nisme de suggest
51d0: 69 6f 6e 20 6f 72 74 68 6f 67 72 61 70 68 69 71  ion orthographiq
51e0: 75 65 20 61 20 72 65 6e 63 6f 6e 74 72 c3 a9 20  ue a rencontr.. 
51f0: 75 6e 20 62 75 67 e2 80 a6 20 28 43 65 20 6d 6f  un bug... (Ce mo
5200: 64 75 6c 65 20 65 73 74 20 65 6e 63 6f 72 65 20  dule est encore 
5210: 65 6e 20 70 68 61 73 65 20 ce b2 2e 29 22 29 29  en phase ...)"))
5220: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 68  ;.            sh
5230: 6f 77 45 72 72 6f 72 28 65 29 3b 0a 20 20 20 20  owError(e);.    
5240: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 7d 0a 0a 0a      }.    }.}...
5250: 63 6c 61 73 73 20 47 72 61 6d 6d 61 6c 65 63 74  class Grammalect
5260: 65 4e 6f 64 65 43 6f 6e 74 72 6f 6c 20 7b 0a 0a  eNodeControl {..
5270: 20 20 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 20      constructor 
5280: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69  () {.        thi
5290: 73 2e 78 4e 6f 64 65 20 3d 20 6e 75 6c 6c 3b 0a  s.xNode = null;.
52a0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 50 61          this.dPa
52b0: 72 61 67 72 61 70 68 20 3d 20 6e 65 77 20 4d 61  ragraph = new Ma
52c0: 70 28 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69  p();.        thi
52d0: 73 2e 62 54 65 78 74 41 72 65 61 20 3d 20 6e 75  s.bTextArea = nu
52e0: 6c 6c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73  ll;.    }..    s
52f0: 65 74 4e 6f 64 65 20 28 78 4e 6f 64 65 29 20 7b  etNode (xNode) {
5300: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6c  .        this.cl
5310: 65 61 72 28 29 3b 0a 20 20 20 20 20 20 20 20 74  ear();.        t
5320: 68 69 73 2e 78 4e 6f 64 65 20 3d 20 78 4e 6f 64  his.xNode = xNod
5330: 65 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e  e;.        this.
5340: 62 54 65 78 74 41 72 65 61 20 3d 20 28 78 4e 6f  bTextArea = (xNo
5350: 64 65 2e 74 61 67 4e 61 6d 65 20 3d 3d 20 22 54  de.tagName == "T
5360: 45 58 54 41 52 45 41 22 29 3b 0a 20 20 20 20 20  EXTAREA");.     
5370: 20 20 20 74 68 69 73 2e 78 4e 6f 64 65 2e 64 69     this.xNode.di
5380: 73 61 62 6c 65 64 20 3d 20 74 72 75 65 3b 0a 20  sabled = true;. 
5390: 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 61         this._loa
53a0: 64 54 65 78 74 28 29 3b 0a 20 20 20 20 7d 0a 0a  dText();.    }..
53b0: 20 20 20 20 63 6c 65 61 72 20 28 29 20 7b 0a 20      clear () {. 
53c0: 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
53d0: 78 4e 6f 64 65 20 21 3d 3d 20 6e 75 6c 6c 29 20  xNode !== null) 
53e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  {.            th
53f0: 69 73 2e 78 4e 6f 64 65 2e 64 69 73 61 62 6c 65  is.xNode.disable
5400: 64 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  d = false;.     
5410: 20 20 20 20 20 20 20 74 68 69 73 2e 62 54 65 78         this.bTex
5420: 74 41 72 65 61 20 3d 20 66 61 6c 73 65 3b 0a 20  tArea = false;. 
5430: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
5440: 78 4e 6f 64 65 20 3d 20 6e 75 6c 6c 3b 0a 20 20  xNode = null;.  
5450: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5460: 74 68 69 73 2e 64 50 61 72 61 67 72 61 70 68 2e  this.dParagraph.
5470: 63 6c 65 61 72 28 29 3b 0a 20 20 20 20 7d 0a 0a  clear();.    }..
5480: 20 20 20 20 73 65 74 50 61 72 61 67 72 61 70 68      setParagraph
5490: 20 28 69 50 61 72 61 67 72 61 70 68 2c 20 73 54   (iParagraph, sT
54a0: 65 78 74 29 20 7b 0a 20 20 20 20 20 20 20 20 69  ext) {.        i
54b0: 66 20 28 74 68 69 73 2e 78 4e 6f 64 65 20 21 3d  f (this.xNode !=
54c0: 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20  = null) {.      
54d0: 20 20 20 20 20 20 74 68 69 73 2e 64 50 61 72 61        this.dPara
54e0: 67 72 61 70 68 2e 73 65 74 28 69 50 61 72 61 67  graph.set(iParag
54f0: 72 61 70 68 2c 20 73 54 65 78 74 29 3b 0a 20 20  raph, sText);.  
5500: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
5510: 20 20 20 5f 6c 6f 61 64 54 65 78 74 20 28 29 20     _loadText () 
5520: 7b 0a 20 20 20 20 20 20 20 20 6c 65 74 20 73 54  {.        let sT
5530: 65 78 74 20 3d 20 28 74 68 69 73 2e 62 54 65 78  ext = (this.bTex
5540: 74 41 72 65 61 29 20 3f 20 74 68 69 73 2e 78 4e  tArea) ? this.xN
5550: 6f 64 65 2e 76 61 6c 75 65 20 3a 20 74 68 69 73  ode.value : this
5560: 2e 78 4e 6f 64 65 2e 69 6e 6e 65 72 54 65 78 74  .xNode.innerText
5570: 3b 0a 20 20 20 20 20 20 20 20 6c 65 74 20 69 20  ;.        let i 
5580: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6c 65 74  = 0;.        let
5590: 20 69 53 74 61 72 74 20 3d 20 30 3b 0a 20 20 20   iStart = 0;.   
55a0: 20 20 20 20 20 6c 65 74 20 69 45 6e 64 20 3d 20       let iEnd = 
55b0: 30 3b 0a 20 20 20 20 20 20 20 20 73 54 65 78 74  0;.        sText
55c0: 20 3d 20 73 54 65 78 74 2e 72 65 70 6c 61 63 65   = sText.replace
55d0: 28 2f 5c 72 5c 6e 2f 67 2c 20 22 5c 6e 22 29 2e  (/\r\n/g, "\n").
55e0: 72 65 70 6c 61 63 65 28 2f 5c 72 2f 67 2c 20 22  replace(/\r/g, "
55f0: 5c 6e 22 29 2e 72 65 70 6c 61 63 65 28 2f c2 ad  \n").replace(/..
5600: 2f 67 2c 20 22 22 29 2e 6e 6f 72 6d 61 6c 69 7a  /g, "").normaliz
5610: 65 28 22 4e 46 43 22 29 3b 0a 20 20 20 20 20 20  e("NFC");.      
5620: 20 20 77 68 69 6c 65 20 28 28 69 45 6e 64 20 3d    while ((iEnd =
5630: 20 73 54 65 78 74 2e 69 6e 64 65 78 4f 66 28 22   sText.indexOf("
5640: 5c 6e 22 2c 20 69 53 74 61 72 74 29 29 20 21 3d  \n", iStart)) !=
5650: 3d 20 2d 31 29 20 7b 0a 20 20 20 20 20 20 20 20  = -1) {.        
5660: 20 20 20 20 74 68 69 73 2e 64 50 61 72 61 67 72      this.dParagr
5670: 61 70 68 2e 73 65 74 28 69 2c 20 73 54 65 78 74  aph.set(i, sText
5680: 2e 73 6c 69 63 65 28 69 53 74 61 72 74 2c 20 69  .slice(iStart, i
5690: 45 6e 64 29 29 3b 0a 20 20 20 20 20 20 20 20 20  End));.         
56a0: 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20     i++;.        
56b0: 20 20 20 20 69 53 74 61 72 74 20 3d 20 69 45 6e      iStart = iEn
56c0: 64 2b 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  d+1;.        }. 
56d0: 20 20 20 20 20 20 20 74 68 69 73 2e 64 50 61 72         this.dPar
56e0: 61 67 72 61 70 68 2e 73 65 74 28 69 2c 20 73 54  agraph.set(i, sT
56f0: 65 78 74 2e 73 6c 69 63 65 28 69 53 74 61 72 74  ext.slice(iStart
5700: 29 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f 63 6f  ));.        //co
5710: 6e 73 6f 6c 65 2e 6c 6f 67 28 22 50 61 72 61 67  nsole.log("Parag
5720: 72 61 70 68 73 20 6e 75 6d 62 65 72 3a 20 22 20  raphs number: " 
5730: 2b 20 28 69 2b 31 29 29 3b 0a 20 20 20 20 7d 0a  + (i+1));.    }.
5740: 0a 20 20 20 20 65 72 61 73 65 43 6f 6e 74 65 6e  .    eraseConten
5750: 74 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 77  t () {.        w
5760: 68 69 6c 65 20 28 74 68 69 73 2e 78 4e 6f 64 65  hile (this.xNode
5770: 2e 66 69 72 73 74 43 68 69 6c 64 29 20 7b 0a 20  .firstChild) {. 
5780: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
5790: 78 4e 6f 64 65 2e 72 65 6d 6f 76 65 43 68 69 6c  xNode.removeChil
57a0: 64 28 74 68 69 73 2e 78 4e 6f 64 65 2e 66 69 72  d(this.xNode.fir
57b0: 73 74 43 68 69 6c 64 29 3b 0a 20 20 20 20 20 20  stChild);.      
57c0: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 77    }.    }..    w
57d0: 72 69 74 65 20 28 29 20 7b 0a 20 20 20 20 20 20  rite () {.      
57e0: 20 20 69 66 20 28 74 68 69 73 2e 78 4e 6f 64 65    if (this.xNode
57f0: 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20   !== null) {.   
5800: 20 20 20 20 20 20 20 20 20 6c 65 74 20 73 54 65           let sTe
5810: 78 74 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20  xt = "";.       
5820: 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 62 54       if (this.bT
5830: 65 78 74 41 72 65 61 29 20 7b 0a 20 20 20 20 20  extArea) {.     
5840: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
5850: 64 50 61 72 61 67 72 61 70 68 2e 66 6f 72 45 61  dParagraph.forEa
5860: 63 68 28 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c  ch(function (val
5870: 2c 20 6b 65 79 29 20 7b 0a 20 20 20 20 20 20 20  , key) {.       
5880: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 54 65               sTe
5890: 78 74 20 2b 3d 20 76 61 6c 20 2b 20 22 5c 6e 22  xt += val + "\n"
58a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
58b0: 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20    });.          
58c0: 20 20 20 20 20 20 74 68 69 73 2e 78 4e 6f 64 65        this.xNode
58d0: 2e 76 61 6c 75 65 20 3d 20 73 54 65 78 74 2e 73  .value = sText.s
58e0: 6c 69 63 65 28 30 2c 2d 31 29 2e 6e 6f 72 6d 61  lice(0,-1).norma
58f0: 6c 69 7a 65 28 22 4e 46 43 22 29 3b 0a 20 20 20  lize("NFC");.   
5900: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
5910: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
5920: 20 20 74 68 69 73 2e 65 72 61 73 65 43 6f 6e 74    this.eraseCont
5930: 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20  ent();.         
5940: 20 20 20 20 20 20 20 74 68 69 73 2e 64 50 61 72         this.dPar
5950: 61 67 72 61 70 68 2e 66 6f 72 45 61 63 68 28 28  agraph.forEach((
5960: 76 61 6c 2c 20 6b 65 79 29 20 3d 3e 20 7b 0a 20  val, key) => {. 
5970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5980: 20 20 20 74 68 69 73 2e 78 4e 6f 64 65 2e 61 70     this.xNode.ap
5990: 70 65 6e 64 43 68 69 6c 64 28 64 6f 63 75 6d 65  pendChild(docume
59a0: 6e 74 2e 63 72 65 61 74 65 54 65 78 74 4e 6f 64  nt.createTextNod
59b0: 65 28 76 61 6c 2e 6e 6f 72 6d 61 6c 69 7a 65 28  e(val.normalize(
59c0: 22 4e 46 43 22 29 29 29 3b 0a 20 20 20 20 20 20  "NFC")));.      
59d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
59e0: 69 73 2e 78 4e 6f 64 65 2e 61 70 70 65 6e 64 43  is.xNode.appendC
59f0: 68 69 6c 64 28 64 6f 63 75 6d 65 6e 74 2e 63 72  hild(document.cr
5a00: 65 61 74 65 45 6c 65 6d 65 6e 74 28 22 62 72 22  eateElement("br"
5a10: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
5a20: 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20      });.        
5a30: 20 20 20 20 20 20 20 20 2f 2a 0a 20 20 20 20 20          /*.     
5a40: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
5a50: 64 50 61 72 61 67 72 61 70 68 2e 66 6f 72 45 61  dParagraph.forEa
5a60: 63 68 28 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c  ch(function (val
5a70: 2c 20 6b 65 79 29 20 7b 0a 20 20 20 20 20 20 20  , key) {.       
5a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 54 65               sTe
5a90: 78 74 20 2b 3d 20 76 61 6c 20 2b 20 22 3c 62 72  xt += val + "<br
5aa0: 2f 3e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20  />";.           
5ab0: 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20       });.       
5ac0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 4e           this.xN
5ad0: 6f 64 65 2e 69 6e 6e 65 72 48 54 4d 4c 20 3d 20  ode.innerHTML = 
5ae0: 73 54 65 78 74 2e 6e 6f 72 6d 61 6c 69 7a 65 28  sText.normalize(
5af0: 22 4e 46 43 22 29 3b 0a 20 20 20 20 20 20 20 20  "NFC");.        
5b00: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
5b10: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5b20: 20 7d 0a 20 20 20 20 7d 0a 7d 0a                  }.    }.}.