Grammalecte  Hex Artifact Content

Artifact 05262fe90b7e51611ab0af162c40475b7f182a0bd245ecbf1880f5d70a88d88f:


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 2f 2f 20 6d 65 73 73 61 67         // messag
33e0: 65 0a 20 20 20 20 20 20 20 20 6c 65 74 20 78 4d  e.        let xM
33f0: 65 73 73 61 67 65 42 6c 6f 63 6b 20 3d 20 6f 47  essageBlock = oG
3400: 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61 74  rammalecte.creat
3410: 65 4e 6f 64 65 28 22 64 69 76 22 2c 20 7b 69 64  eNode("div", {id
3420: 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74  : "grammalecte_t
3430: 6f 6f 6c 74 69 70 5f 6d 65 73 73 61 67 65 5f 62  ooltip_message_b
3440: 6c 6f 63 6b 22 7d 29 3b 0a 20 20 20 20 20 20 20  lock"});.       
3450: 20 78 4d 65 73 73 61 67 65 42 6c 6f 63 6b 2e 61   xMessageBlock.a
3460: 70 70 65 6e 64 43 68 69 6c 64 28 6f 47 72 61 6d  ppendChild(oGram
3470: 6d 61 6c 65 63 74 65 2e 63 72 65 61 74 65 4e 6f  malecte.createNo
3480: 64 65 28 22 64 69 76 22 2c 20 7b 69 64 3a 20 22  de("div", {id: "
3490: 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c  grammalecte_tool
34a0: 74 69 70 5f 72 75 6c 65 5f 69 64 22 7d 29 29 3b  tip_rule_id"}));
34b0: 0a 20 20 20 20 20 20 20 20 78 4d 65 73 73 61 67  .        xMessag
34c0: 65 42 6c 6f 63 6b 2e 61 70 70 65 6e 64 43 68 69  eBlock.appendChi
34d0: 6c 64 28 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e  ld(oGrammalecte.
34e0: 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69 76 22  createNode("div"
34f0: 2c 20 7b 69 64 3a 20 22 67 72 61 6d 6d 61 6c 65  , {id: "grammale
3500: 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 6d 65 73 73  cte_tooltip_mess
3510: 61 67 65 22 2c 20 74 65 78 74 43 6f 6e 74 65 6e  age", textConten
3520: 74 3a 20 22 45 72 72 65 75 72 2e 22 7d 29 29 3b  t: "Erreur."}));
3530: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 54  .        this.xT
3540: 6f 6f 6c 74 69 70 2e 61 70 70 65 6e 64 43 68 69  ooltip.appendChi
3550: 6c 64 28 78 4d 65 73 73 61 67 65 42 6c 6f 63 6b  ld(xMessageBlock
3560: 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20 73 75  );.        // su
3570: 67 67 65 73 74 69 6f 6e 73 0a 20 20 20 20 20 20  ggestions.      
3580: 20 20 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 2e    this.xTooltip.
3590: 61 70 70 65 6e 64 43 68 69 6c 64 28 6f 47 72 61  appendChild(oGra
35a0: 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61 74 65 4e  mmalecte.createN
35b0: 6f 64 65 28 22 64 69 76 22 2c 20 7b 69 64 3a 20  ode("div", {id: 
35c0: 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f  "grammalecte_too
35d0: 6c 74 69 70 5f 73 75 67 67 5f 74 69 74 6c 65 22  ltip_sugg_title"
35e0: 2c 20 74 65 78 74 43 6f 6e 74 65 6e 74 3a 20 22  , textContent: "
35f0: 53 55 47 47 45 53 54 49 4f 4e 53 e2 80 af 3a 22  SUGGESTIONS...:"
3600: 7d 29 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69  }));.        thi
3610: 73 2e 78 54 6f 6f 6c 74 69 70 53 75 67 67 42 6c  s.xTooltipSuggBl
3620: 6f 63 6b 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63  ock = oGrammalec
3630: 74 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22 64  te.createNode("d
3640: 69 76 22 2c 20 7b 69 64 3a 20 22 67 72 61 6d 6d  iv", {id: "gramm
3650: 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 73  alecte_tooltip_s
3660: 75 67 67 5f 62 6c 6f 63 6b 22 7d 29 3b 0a 20 20  ugg_block"});.  
3670: 20 20 20 20 20 20 74 68 69 73 2e 78 54 6f 6f 6c        this.xTool
3680: 74 69 70 2e 61 70 70 65 6e 64 43 68 69 6c 64 28  tip.appendChild(
3690: 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 53 75 67  this.xTooltipSug
36a0: 67 42 6c 6f 63 6b 29 3b 0a 20 20 20 20 20 20 20  gBlock);.       
36b0: 20 2f 2f 20 61 63 74 69 6f 6e 73 0a 20 20 20 20   // actions.    
36c0: 20 20 20 20 6c 65 74 20 78 41 63 74 69 6f 6e 73      let xActions
36d0: 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e   = oGrammalecte.
36e0: 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69 76 22  createNode("div"
36f0: 2c 20 7b 69 64 3a 20 22 67 72 61 6d 6d 61 6c 65  , {id: "grammale
3700: 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 61 63 74 69  cte_tooltip_acti
3710: 6f 6e 73 22 7d 29 3b 0a 20 20 20 20 20 20 20 20  ons"});.        
3720: 78 41 63 74 69 6f 6e 73 2e 61 70 70 65 6e 64 43  xActions.appendC
3730: 68 69 6c 64 28 6f 47 72 61 6d 6d 61 6c 65 63 74  hild(oGrammalect
3740: 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69  e.createNode("di
3750: 76 22 2c 20 7b 69 64 3a 20 22 67 72 61 6d 6d 61  v", {id: "gramma
3760: 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 69 67  lecte_tooltip_ig
3770: 6e 6f 72 65 22 2c 20 74 65 78 74 43 6f 6e 74 65  nore", textConte
3780: 6e 74 3a 20 22 49 67 6e 6f 72 65 72 22 7d 29 29  nt: "Ignorer"}))
3790: 3b 0a 20 20 20 20 20 20 20 20 78 41 63 74 69 6f  ;.        xActio
37a0: 6e 73 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 6f  ns.appendChild(o
37b0: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61  Grammalecte.crea
37c0: 74 65 4e 6f 64 65 28 22 64 69 76 22 2c 20 7b 69  teNode("div", {i
37d0: 64 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f  d: "grammalecte_
37e0: 74 6f 6f 6c 74 69 70 5f 75 72 6c 22 2c 20 74 65  tooltip_url", te
37f0: 78 74 43 6f 6e 74 65 6e 74 3a 20 22 56 6f 75 6c  xtContent: "Voul
3800: 65 7a 2d 76 6f 75 73 20 65 6e 20 73 61 76 6f 69  ez-vous en savoi
3810: 72 20 70 6c 75 73 e2 80 af 3f e2 80 a6 22 7d 2c  r plus...?..."},
3820: 20 7b 75 72 6c 3a 20 22 22 7d 29 29 3b 0a 20 20   {url: ""}));.  
3830: 20 20 20 20 20 20 74 68 69 73 2e 78 54 6f 6f 6c        this.xTool
3840: 74 69 70 2e 61 70 70 65 6e 64 43 68 69 6c 64 28  tip.appendChild(
3850: 78 41 63 74 69 6f 6e 73 29 3b 0a 20 20 20 20 20  xActions);.     
3860: 20 20 20 2f 2f 20 61 64 64 20 74 6f 6f 6c 74 69     // add toolti
3870: 70 20 74 6f 20 74 68 65 20 70 61 67 65 0a 20 20  p to the page.  
3880: 20 20 20 20 20 20 78 43 6f 6e 74 65 6e 74 4e 6f        xContentNo
3890: 64 65 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 74  de.appendChild(t
38a0: 68 69 73 2e 78 54 6f 6f 6c 74 69 70 29 3b 0a 20  his.xTooltip);. 
38b0: 20 20 20 20 20 20 20 78 43 6f 6e 74 65 6e 74 4e         xContentN
38c0: 6f 64 65 2e 61 70 70 65 6e 64 43 68 69 6c 64 28  ode.appendChild(
38d0: 74 68 69 73 2e 78 54 6f 6f 6c 74 69 70 41 72 72  this.xTooltipArr
38e0: 6f 77 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ow);.    }..    
38f0: 73 68 6f 77 20 28 73 4e 6f 64 65 45 72 72 6f 72  show (sNodeError
3900: 49 64 29 20 7b 20 20 2f 2f 20 65 72 72 0a 20 20  Id) {  // err.  
3910: 20 20 20 20 20 20 74 72 79 20 7b 0a 20 20 20 20        try {.    
3920: 20 20 20 20 20 20 20 20 6c 65 74 20 78 4e 6f 64          let xNod
3930: 65 45 72 72 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  eErr = document.
3940: 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 73  getElementById(s
3950: 4e 6f 64 65 45 72 72 6f 72 49 64 29 3b 0a 20 20  NodeErrorId);.  
3960: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73            this.s
3970: 45 72 72 6f 72 49 64 20 3d 20 78 4e 6f 64 65 45  ErrorId = xNodeE
3980: 72 72 2e 64 61 74 61 73 65 74 2e 65 72 72 6f 72  rr.dataset.error
3990: 5f 69 64 3b 20 2f 2f 20 77 65 20 73 74 6f 72 65  _id; // we store
39a0: 20 65 72 72 6f 72 5f 69 64 20 68 65 72 65 20 74   error_id here t
39b0: 6f 20 6b 6e 6f 77 20 69 66 20 73 70 65 6c 6c 5f  o know if spell_
39c0: 73 75 67 67 65 73 74 69 6f 6e 73 20 61 72 65 20  suggestions are 
39d0: 67 69 76 65 6e 20 74 6f 20 74 68 65 20 72 69 67  given to the rig
39e0: 68 74 20 77 6f 72 64 2e 0a 20 20 20 20 20 20 20  ht word..       
39f0: 20 20 20 20 20 6c 65 74 20 6e 54 6f 6f 6c 74 69       let nToolti
3a00: 70 4c 65 66 74 4c 69 6d 69 74 20 3d 20 6f 47 72  pLeftLimit = oGr
3a10: 61 6d 6d 61 6c 65 63 74 65 2e 6f 47 43 50 61 6e  ammalecte.oGCPan
3a20: 65 6c 2e 67 65 74 57 69 64 74 68 28 29 20 2d 20  el.getWidth() - 
3a30: 33 33 30 3b 20 2f 2f 20 70 61 72 61 67 72 61 70  330; // paragrap
3a40: 68 20 77 69 64 74 68 20 2d 20 74 6f 6f 6c 74 69  h width - toolti
3a50: 70 20 77 69 64 74 68 0a 20 20 20 20 20 20 20 20  p width.        
3a60: 20 20 20 20 6c 65 74 20 6e 41 72 72 6f 77 4c 69      let nArrowLi
3a70: 6d 69 74 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63  mit = oGrammalec
3a80: 74 65 2e 6f 47 43 50 61 6e 65 6c 2e 67 65 74 57  te.oGCPanel.getW
3a90: 69 64 74 68 28 29 20 2d 20 32 30 3b 0a 20 20 20  idth() - 20;.   
3aa0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 54           this.xT
3ab0: 6f 6f 6c 74 69 70 41 72 72 6f 77 2e 73 74 79 6c  ooltipArrow.styl
3ac0: 65 2e 74 6f 70 20 3d 20 28 78 4e 6f 64 65 45 72  e.top = (xNodeEr
3ad0: 72 2e 6f 66 66 73 65 74 54 6f 70 20 2b 20 31 36  r.offsetTop + 16
3ae0: 29 20 2b 20 22 70 78 22 3b 0a 20 20 20 20 20 20  ) + "px";.      
3af0: 20 20 20 20 20 20 6c 65 74 20 6e 55 73 65 66 75        let nUsefu
3b00: 6c 45 72 72 6f 72 57 69 64 74 68 20 3d 20 28 28  lErrorWidth = ((
3b10: 78 4e 6f 64 65 45 72 72 2e 6f 66 66 73 65 74 4c  xNodeErr.offsetL
3b20: 65 66 74 20 2b 20 78 4e 6f 64 65 45 72 72 2e 6f  eft + xNodeErr.o
3b30: 66 66 73 65 74 57 69 64 74 68 29 20 3e 20 6e 41  ffsetWidth) > nA
3b40: 72 72 6f 77 4c 69 6d 69 74 29 20 3f 20 28 6e 41  rrowLimit) ? (nA
3b50: 72 72 6f 77 4c 69 6d 69 74 20 2d 20 78 4e 6f 64  rrowLimit - xNod
3b60: 65 45 72 72 2e 6f 66 66 73 65 74 4c 65 66 74 29  eErr.offsetLeft)
3b70: 20 3a 20 78 4e 6f 64 65 45 72 72 2e 6f 66 66 73   : xNodeErr.offs
3b80: 65 74 57 69 64 74 68 3b 0a 20 20 20 20 20 20 20  etWidth;.       
3b90: 20 20 20 20 20 74 68 69 73 2e 78 54 6f 6f 6c 74       this.xToolt
3ba0: 69 70 41 72 72 6f 77 2e 73 74 79 6c 65 2e 6c 65  ipArrow.style.le
3bb0: 66 74 20 3d 20 28 78 4e 6f 64 65 45 72 72 2e 6f  ft = (xNodeErr.o
3bc0: 66 66 73 65 74 4c 65 66 74 20 2b 20 4d 61 74 68  ffsetLeft + Math
3bd0: 2e 66 6c 6f 6f 72 28 28 6e 55 73 65 66 75 6c 45  .floor((nUsefulE
3be0: 72 72 6f 72 57 69 64 74 68 20 2f 20 32 29 29 20  rrorWidth / 2)) 
3bf0: 2d 20 34 29 20 2b 20 22 70 78 22 3b 20 2f 2f 20  - 4) + "px"; // 
3c00: 34 20 69 73 20 68 61 6c 66 20 74 68 65 20 77 69  4 is half the wi
3c10: 64 74 68 20 6f 66 20 74 68 65 20 61 72 72 6f 77  dth of the arrow
3c20: 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
3c30: 69 73 2e 78 54 6f 6f 6c 74 69 70 2e 73 74 79 6c  is.xTooltip.styl
3c40: 65 2e 74 6f 70 20 3d 20 28 78 4e 6f 64 65 45 72  e.top = (xNodeEr
3c50: 72 2e 6f 66 66 73 65 74 54 6f 70 20 2b 20 32 30  r.offsetTop + 20
3c60: 29 20 2b 20 22 70 78 22 3b 0a 20 20 20 20 20 20  ) + "px";.      
3c70: 20 20 20 20 20 20 74 68 69 73 2e 78 54 6f 6f 6c        this.xTool
3c80: 74 69 70 2e 73 74 79 6c 65 2e 6c 65 66 74 20 3d  tip.style.left =
3c90: 20 28 78 4e 6f 64 65 45 72 72 2e 6f 66 66 73 65   (xNodeErr.offse
3ca0: 74 4c 65 66 74 20 3e 20 6e 54 6f 6f 6c 74 69 70  tLeft > nTooltip
3cb0: 4c 65 66 74 4c 69 6d 69 74 29 20 3f 20 6e 54 6f  LeftLimit) ? nTo
3cc0: 6f 6c 74 69 70 4c 65 66 74 4c 69 6d 69 74 20 2b  oltipLeftLimit +
3cd0: 20 22 70 78 22 20 3a 20 78 4e 6f 64 65 45 72 72   "px" : xNodeErr
3ce0: 2e 6f 66 66 73 65 74 4c 65 66 74 20 2b 20 22 70  .offsetLeft + "p
3cf0: 78 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  x";.            
3d00: 69 66 20 28 78 4e 6f 64 65 45 72 72 2e 64 61 74  if (xNodeErr.dat
3d10: 61 73 65 74 2e 65 72 72 6f 72 5f 74 79 70 65 20  aset.error_type 
3d20: 3d 3d 3d 20 22 67 72 61 6d 6d 61 72 22 29 20 7b  === "grammar") {
3d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3d40: 20 2f 2f 20 67 72 61 6d 6d 61 72 20 65 72 72 6f   // grammar erro
3d50: 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
3d60: 20 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c    document.getEl
3d70: 65 6d 65 6e 74 42 79 49 64 28 22 67 72 61 6d 6d  ementById("gramm
3d80: 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 61  alecte_tooltip_a
3d90: 64 64 5f 77 6f 72 64 22 29 2e 73 74 79 6c 65 2e  dd_word").style.
3da0: 64 69 73 70 6c 61 79 20 3d 20 22 6e 6f 6e 65 22  display = "none"
3db0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
3dc0: 20 20 69 66 20 28 78 4e 6f 64 65 45 72 72 2e 64    if (xNodeErr.d
3dd0: 61 74 61 73 65 74 2e 67 63 5f 6d 65 73 73 61 67  ataset.gc_messag
3de0: 65 2e 69 6e 63 6c 75 64 65 73 28 22 20 23 23 22  e.includes(" ##"
3df0: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  )) {.           
3e00: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70           // disp
3e10: 6c 61 79 20 72 75 6c 65 20 69 64 0a 20 20 20 20  lay rule id.    
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 6c 65 74 20 6e 20 3d 20 78 4e 6f 64 65 45 72 72  let n = xNodeErr
3e40: 2e 64 61 74 61 73 65 74 2e 67 63 5f 6d 65 73 73  .dataset.gc_mess
3e50: 61 67 65 2e 69 6e 64 65 78 4f 66 28 22 20 23 23  age.indexOf(" ##
3e60: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
3e70: 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
3e80: 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28  .getElementById(
3e90: 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f  "grammalecte_too
3ea0: 6c 74 69 70 5f 6d 65 73 73 61 67 65 22 29 2e 74  ltip_message").t
3eb0: 65 78 74 43 6f 6e 74 65 6e 74 20 3d 20 78 4e 6f  extContent = xNo
3ec0: 64 65 45 72 72 2e 64 61 74 61 73 65 74 2e 67 63  deErr.dataset.gc
3ed0: 5f 6d 65 73 73 61 67 65 2e 73 6c 69 63 65 28 30  _message.slice(0
3ee0: 2c 20 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , n);.          
3ef0: 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
3f00: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49  nt.getElementByI
3f10: 64 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74  d("grammalecte_t
3f20: 6f 6f 6c 74 69 70 5f 72 75 6c 65 5f 69 64 22 29  ooltip_rule_id")
3f30: 2e 74 65 78 74 43 6f 6e 74 65 6e 74 20 3d 20 22  .textContent = "
3f40: 52 c3 a8 67 6c 65 e2 80 af 3a 20 22 20 2b 20 78  R..gle...: " + x
3f50: 4e 6f 64 65 45 72 72 2e 64 61 74 61 73 65 74 2e  NodeErr.dataset.
3f60: 67 63 5f 6d 65 73 73 61 67 65 2e 73 6c 69 63 65  gc_message.slice
3f70: 28 6e 2b 32 29 3b 0a 20 20 20 20 20 20 20 20 20  (n+2);.         
3f80: 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
3f90: 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79  ent.getElementBy
3fa0: 49 64 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f  Id("grammalecte_
3fb0: 74 6f 6f 6c 74 69 70 5f 72 75 6c 65 5f 69 64 22  tooltip_rule_id"
3fc0: 29 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20  ).style.display 
3fd0: 3d 20 22 62 6c 6f 63 6b 22 3b 0a 20 20 20 20 20  = "block";.     
3fe0: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
3ff0: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
4000: 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
4010: 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28  .getElementById(
4020: 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f  "grammalecte_too
4030: 6c 74 69 70 5f 6d 65 73 73 61 67 65 22 29 2e 74  ltip_message").t
4040: 65 78 74 43 6f 6e 74 65 6e 74 20 3d 20 78 4e 6f  extContent = xNo
4050: 64 65 45 72 72 2e 64 61 74 61 73 65 74 2e 67 63  deErr.dataset.gc
4060: 5f 6d 65 73 73 61 67 65 3b 0a 20 20 20 20 20 20  _message;.      
4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
4080: 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e  cument.getElemen
4090: 74 42 79 49 64 28 22 67 72 61 6d 6d 61 6c 65 63  tById("grammalec
40a0: 74 65 5f 74 6f 6f 6c 74 69 70 5f 72 75 6c 65 5f  te_tooltip_rule_
40b0: 69 64 22 29 2e 73 74 79 6c 65 2e 64 69 73 70 6c  id").style.displ
40c0: 61 79 20 3d 20 22 6e 6f 6e 65 22 3b 0a 20 20 20  ay = "none";.   
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
40f0: 66 20 28 78 4e 6f 64 65 45 72 72 2e 64 61 74 61  f (xNodeErr.data
4100: 73 65 74 2e 67 63 5f 75 72 6c 20 21 3d 20 22 22  set.gc_url != ""
4110: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
4120: 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
4130: 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28  .getElementById(
4140: 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f  "grammalecte_too
4150: 6c 74 69 70 5f 75 72 6c 22 29 2e 64 61 74 61 73  ltip_url").datas
4160: 65 74 2e 75 72 6c 20 3d 20 78 4e 6f 64 65 45 72  et.url = xNodeEr
4170: 72 2e 64 61 74 61 73 65 74 2e 67 63 5f 75 72 6c  r.dataset.gc_url
4180: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
4190: 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67        document.g
41a0: 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 67  etElementById("g
41b0: 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74  rammalecte_toolt
41c0: 69 70 5f 75 72 6c 22 29 2e 73 74 79 6c 65 2e 64  ip_url").style.d
41d0: 69 73 70 6c 61 79 20 3d 20 22 69 6e 6c 69 6e 65  isplay = "inline
41e0: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ";.             
41f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4210: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d  document.getElem
4220: 65 6e 74 42 79 49 64 28 22 67 72 61 6d 6d 61 6c  entById("grammal
4230: 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 75 72 6c  ecte_tooltip_url
4240: 22 29 2e 64 61 74 61 73 65 74 2e 75 72 6c 20 3d  ").dataset.url =
4250: 20 22 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20   "";.           
4260: 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
4270: 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64  t.getElementById
4280: 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f  ("grammalecte_to
4290: 6f 6c 74 69 70 5f 75 72 6c 22 29 2e 73 74 79 6c  oltip_url").styl
42a0: 65 2e 64 69 73 70 6c 61 79 20 3d 20 22 6e 6f 6e  e.display = "non
42b0: 65 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e";.            
42c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
42d0: 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67        document.g
42e0: 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 67  etElementById("g
42f0: 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74  rammalecte_toolt
4300: 69 70 5f 69 67 6e 6f 72 65 22 29 2e 64 61 74 61  ip_ignore").data
4310: 73 65 74 2e 65 72 72 6f 72 5f 69 64 20 3d 20 78  set.error_id = x
4320: 4e 6f 64 65 45 72 72 2e 64 61 74 61 73 65 74 2e  NodeErr.dataset.
4330: 65 72 72 6f 72 5f 69 64 3b 0a 20 20 20 20 20 20  error_id;.      
4340: 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 69 53            let iS
4350: 75 67 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ugg = 0;.       
4360: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6c           this.cl
4370: 65 61 72 53 75 67 67 65 73 74 69 6f 6e 42 6c 6f  earSuggestionBlo
4380: 63 6b 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ck();.          
4390: 20 20 20 20 20 20 69 66 20 28 78 4e 6f 64 65 45        if (xNodeE
43a0: 72 72 2e 64 61 74 61 73 65 74 2e 73 75 67 67 65  rr.dataset.sugge
43b0: 73 74 69 6f 6e 73 2e 6c 65 6e 67 74 68 20 3e 20  stions.length > 
43c0: 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0) {.           
43d0: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 6c 65           for (le
43e0: 74 20 73 53 75 67 67 20 6f 66 20 78 4e 6f 64 65  t sSugg of xNode
43f0: 45 72 72 2e 64 61 74 61 73 65 74 2e 73 75 67 67  Err.dataset.sugg
4400: 65 73 74 69 6f 6e 73 2e 73 70 6c 69 74 28 22 7c  estions.split("|
4410: 22 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ")) {.          
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
4430: 69 73 2e 78 54 6f 6f 6c 74 69 70 53 75 67 67 42  is.xTooltipSuggB
4440: 6c 6f 63 6b 2e 61 70 70 65 6e 64 43 68 69 6c 64  lock.appendChild
4450: 28 74 68 69 73 2e 5f 63 72 65 61 74 65 53 75 67  (this._createSug
4460: 67 65 73 74 69 6f 6e 28 78 4e 6f 64 65 45 72 72  gestion(xNodeErr
4470: 2e 64 61 74 61 73 65 74 2e 65 72 72 6f 72 5f 69  .dataset.error_i
4480: 64 2c 20 30 2c 20 69 53 75 67 67 2c 20 73 53 75  d, 0, iSugg, sSu
4490: 67 67 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  gg));.          
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
44b0: 69 73 2e 78 54 6f 6f 6c 74 69 70 53 75 67 67 42  is.xTooltipSuggB
44c0: 6c 6f 63 6b 2e 61 70 70 65 6e 64 43 68 69 6c 64  lock.appendChild
44d0: 28 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65  (document.create
44e0: 54 65 78 74 4e 6f 64 65 28 22 20 22 29 29 3b 0a  TextNode(" "));.
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4500: 20 20 20 20 20 20 20 20 69 53 75 67 67 20 2b 3d          iSugg +=
4510: 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   1;.            
4520: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4530: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
4540: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
4550: 20 20 20 20 20 20 20 74 68 69 73 2e 78 54 6f 6f         this.xToo
4560: 6c 74 69 70 53 75 67 67 42 6c 6f 63 6b 2e 74 65  ltipSuggBlock.te
4570: 78 74 43 6f 6e 74 65 6e 74 20 3d 20 22 41 75 63  xtContent = "Auc
4580: 75 6e 65 2e 22 3b 0a 20 20 20 20 20 20 20 20 20  une.";.         
4590: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
45a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
45b0: 20 20 20 69 66 20 28 78 4e 6f 64 65 45 72 72 2e     if (xNodeErr.
45c0: 64 61 74 61 73 65 74 2e 65 72 72 6f 72 5f 74 79  dataset.error_ty
45d0: 70 65 20 3d 3d 3d 20 22 73 70 65 6c 6c 69 6e 67  pe === "spelling
45e0: 22 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ") {.           
45f0: 20 20 20 20 20 2f 2f 20 73 70 65 6c 6c 69 6e 67       // spelling
4600: 20 6d 69 73 74 61 6b 65 0a 20 20 20 20 20 20 20   mistake.       
4610: 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
4620: 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64  t.getElementById
4630: 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f  ("grammalecte_to
4640: 6f 6c 74 69 70 5f 6d 65 73 73 61 67 65 22 29 2e  oltip_message").
4650: 74 65 78 74 43 6f 6e 74 65 6e 74 20 3d 20 22 4d  textContent = "M
4660: 6f 74 20 69 6e 63 6f 6e 6e 75 20 64 75 20 64 69  ot inconnu du di
4670: 63 74 69 6f 6e 6e 61 69 72 65 2e 22 3b 0a 20 20  ctionnaire.";.  
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
4690: 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e  cument.getElemen
46a0: 74 42 79 49 64 28 22 67 72 61 6d 6d 61 6c 65 63  tById("grammalec
46b0: 74 65 5f 74 6f 6f 6c 74 69 70 5f 69 67 6e 6f 72  te_tooltip_ignor
46c0: 65 22 29 2e 64 61 74 61 73 65 74 2e 65 72 72 6f  e").dataset.erro
46d0: 72 5f 69 64 20 3d 20 78 4e 6f 64 65 45 72 72 2e  r_id = xNodeErr.
46e0: 64 61 74 61 73 65 74 2e 65 72 72 6f 72 5f 69 64  dataset.error_id
46f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
4700: 20 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c    document.getEl
4710: 65 6d 65 6e 74 42 79 49 64 28 22 67 72 61 6d 6d  ementById("gramm
4720: 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 72  alecte_tooltip_r
4730: 75 6c 65 5f 69 64 22 29 2e 73 74 79 6c 65 2e 64  ule_id").style.d
4740: 69 73 70 6c 61 79 20 3d 20 22 6e 6f 6e 65 22 3b  isplay = "none";
4750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4760: 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65   document.getEle
4770: 6d 65 6e 74 42 79 49 64 28 22 67 72 61 6d 6d 61  mentById("gramma
4780: 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 75 72  lecte_tooltip_ur
4790: 6c 22 29 2e 64 61 74 61 73 65 74 2e 75 72 6c 20  l").dataset.url 
47a0: 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 20 20  = "";.          
47b0: 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67        document.g
47c0: 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 67  etElementById("g
47d0: 72 61 6d 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74  rammalecte_toolt
47e0: 69 70 5f 75 72 6c 22 29 2e 73 74 79 6c 65 2e 64  ip_url").style.d
47f0: 69 73 70 6c 61 79 20 3d 20 22 6e 6f 6e 65 22 3b  isplay = "none";
4800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4810: 20 69 66 20 28 78 4e 6f 64 65 45 72 72 2e 64 61   if (xNodeErr.da
4820: 74 61 73 65 74 2e 67 63 5f 6d 65 73 73 61 67 65  taset.gc_message
4830: 2e 69 6e 63 6c 75 64 65 73 28 22 20 23 23 22 29  .includes(" ##")
4840: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
4850: 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6c          // displ
4860: 61 79 20 72 75 6c 65 20 69 64 0a 20 20 20 20 20  ay rule id.     
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
4880: 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65  ocument.getEleme
4890: 6e 74 42 79 49 64 28 22 67 72 61 6d 6d 61 6c 65  ntById("grammale
48a0: 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 61 64 64 5f  cte_tooltip_add_
48b0: 77 6f 72 64 22 29 2e 73 74 79 6c 65 2e 64 69 73  word").style.dis
48c0: 70 6c 61 79 20 3d 20 22 62 6c 6f 63 6b 22 3b 0a  play = "block";.
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48e0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63               doc
4900: 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74  ument.getElement
4910: 42 79 49 64 28 22 67 72 61 6d 6d 61 6c 65 63 74  ById("grammalect
4920: 65 5f 74 6f 6f 6c 74 69 70 5f 61 64 64 5f 77 6f  e_tooltip_add_wo
4930: 72 64 22 29 2e 73 74 79 6c 65 2e 64 69 73 70 6c  rd").style.displ
4940: 61 79 20 3d 20 22 6e 6f 6e 65 22 3b 0a 20 20 20  ay = "none";.   
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
4960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
4970: 68 69 73 2e 63 6c 65 61 72 53 75 67 67 65 73 74  his.clearSuggest
4980: 69 6f 6e 42 6c 6f 63 6b 28 29 3b 0a 20 20 20 20  ionBlock();.    
4990: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
49a0: 2e 78 54 6f 6f 6c 74 69 70 53 75 67 67 42 6c 6f  .xTooltipSuggBlo
49b0: 63 6b 2e 74 65 78 74 43 6f 6e 74 65 6e 74 20 3d  ck.textContent =
49c0: 20 22 52 65 63 68 65 72 63 68 65 20 64 65 20 67   "Recherche de g
49d0: 72 61 70 68 69 65 73 20 70 6f 73 73 69 62 6c 65  raphies possible
49e0: 73 e2 80 a6 22 3b 0a 20 20 20 20 20 20 20 20 20  s...";.         
49f0: 20 20 20 20 20 20 20 78 47 72 61 6d 6d 61 6c 65         xGrammale
4a00: 63 74 65 50 6f 72 74 2e 70 6f 73 74 4d 65 73 73  ctePort.postMess
4a10: 61 67 65 28 7b 0a 20 20 20 20 20 20 20 20 20 20  age({.          
4a20: 20 20 20 20 20 20 20 20 20 20 73 43 6f 6d 6d 61            sComma
4a30: 6e 64 3a 20 22 67 65 74 53 70 65 6c 6c 53 75 67  nd: "getSpellSug
4a40: 67 65 73 74 69 6f 6e 73 22 2c 0a 20 20 20 20 20  gestions",.     
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
4a60: 50 61 72 61 6d 3a 20 7b 73 57 6f 72 64 3a 20 78  Param: {sWord: x
4a70: 4e 6f 64 65 45 72 72 2e 74 65 78 74 43 6f 6e 74  NodeErr.textCont
4a80: 65 6e 74 7d 2c 0a 20 20 20 20 20 20 20 20 20 20  ent},.          
4a90: 20 20 20 20 20 20 20 20 20 20 64 49 6e 66 6f 3a            dInfo:
4aa0: 20 7b 73 45 72 72 6f 72 49 64 3a 20 78 4e 6f 64   {sErrorId: xNod
4ab0: 65 45 72 72 2e 64 61 74 61 73 65 74 2e 65 72 72  eErr.dataset.err
4ac0: 6f 72 5f 69 64 7d 0a 20 20 20 20 20 20 20 20 20  or_id}.         
4ad0: 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20         });.     
4ae0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4af0: 20 20 20 20 20 74 68 69 73 2e 78 54 6f 6f 6c 74       this.xToolt
4b00: 69 70 41 72 72 6f 77 2e 73 74 79 6c 65 2e 64 69  ipArrow.style.di
4b10: 73 70 6c 61 79 20 3d 20 22 62 6c 6f 63 6b 22 3b  splay = "block";
4b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
4b30: 73 2e 78 54 6f 6f 6c 74 69 70 2e 73 74 79 6c 65  s.xTooltip.style
4b40: 2e 64 69 73 70 6c 61 79 20 3d 20 22 62 6c 6f 63  .display = "bloc
4b50: 6b 22 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  k";.        }.  
4b60: 20 20 20 20 20 20 63 61 74 63 68 20 28 65 29 20        catch (e) 
4b70: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 68  {.            sh
4b80: 6f 77 45 72 72 6f 72 28 65 29 3b 0a 20 20 20 20  owError(e);.    
4b90: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
4ba0: 20 63 6c 65 61 72 53 75 67 67 65 73 74 69 6f 6e   clearSuggestion
4bb0: 42 6c 6f 63 6b 20 28 29 20 7b 0a 20 20 20 20 20  Block () {.     
4bc0: 20 20 20 77 68 69 6c 65 20 28 74 68 69 73 2e 78     while (this.x
4bd0: 54 6f 6f 6c 74 69 70 53 75 67 67 42 6c 6f 63 6b  TooltipSuggBlock
4be0: 2e 66 69 72 73 74 43 68 69 6c 64 29 20 7b 0a 20  .firstChild) {. 
4bf0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
4c00: 78 54 6f 6f 6c 74 69 70 53 75 67 67 42 6c 6f 63  xTooltipSuggBloc
4c10: 6b 2e 72 65 6d 6f 76 65 43 68 69 6c 64 28 74 68  k.removeChild(th
4c20: 69 73 2e 78 54 6f 6f 6c 74 69 70 53 75 67 67 42  is.xTooltipSuggB
4c30: 6c 6f 63 6b 2e 66 69 72 73 74 43 68 69 6c 64 29  lock.firstChild)
4c40: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4c50: 7d 0a 0a 20 20 20 20 73 65 74 54 6f 6f 6c 74 69  }..    setToolti
4c60: 70 43 6f 6c 6f 72 20 28 29 20 7b 0a 20 20 20 20  pColor () {.    
4c70: 20 20 20 20 2f 2f 20 74 6f 64 6f 0a 20 20 20 20      // todo.    
4c80: 7d 0a 0a 20 20 20 20 68 69 64 65 20 28 29 20 7b  }..    hide () {
4c90: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 54  .        this.xT
4ca0: 6f 6f 6c 74 69 70 41 72 72 6f 77 2e 73 74 79 6c  ooltipArrow.styl
4cb0: 65 2e 64 69 73 70 6c 61 79 20 3d 20 22 6e 6f 6e  e.display = "non
4cc0: 65 22 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73  e";.        this
4cd0: 2e 78 54 6f 6f 6c 74 69 70 2e 73 74 79 6c 65 2e  .xTooltip.style.
4ce0: 64 69 73 70 6c 61 79 20 3d 20 22 6e 6f 6e 65 22  display = "none"
4cf0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5f 63 72  ;.    }..    _cr
4d00: 65 61 74 65 53 75 67 67 65 73 74 69 6f 6e 20 28  eateSuggestion (
4d10: 73 45 72 72 6f 72 49 64 2c 20 69 53 75 67 67 42  sErrorId, iSuggB
4d20: 6c 6f 63 6b 2c 20 69 53 75 67 67 2c 20 73 53 75  lock, iSugg, sSu
4d30: 67 67 29 20 7b 0a 20 20 20 20 20 20 20 20 6c 65  gg) {.        le
4d40: 74 20 78 4e 6f 64 65 53 75 67 67 20 3d 20 64 6f  t xNodeSugg = do
4d50: 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 45 6c 65  cument.createEle
4d60: 6d 65 6e 74 28 22 64 69 76 22 29 3b 0a 20 20 20  ment("div");.   
4d70: 20 20 20 20 20 78 4e 6f 64 65 53 75 67 67 2e 69       xNodeSugg.i
4d80: 64 20 3d 20 22 67 72 61 6d 6d 61 6c 65 63 74 65  d = "grammalecte
4d90: 5f 73 75 67 67 22 20 2b 20 73 45 72 72 6f 72 49  _sugg" + sErrorI
4da0: 64 20 2b 20 22 2d 22 20 2b 20 69 53 75 67 67 42  d + "-" + iSuggB
4db0: 6c 6f 63 6b 2e 74 6f 53 74 72 69 6e 67 28 29 20  lock.toString() 
4dc0: 2b 20 22 2d 22 20 2b 20 69 53 75 67 67 2e 74 6f  + "-" + iSugg.to
4dd0: 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20 20 20  String();.      
4de0: 20 20 78 4e 6f 64 65 53 75 67 67 2e 63 6c 61 73    xNodeSugg.clas
4df0: 73 4e 61 6d 65 20 3d 20 22 67 72 61 6d 6d 61 6c  sName = "grammal
4e00: 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 73 75 67  ecte_tooltip_sug
4e10: 67 22 3b 0a 20 20 20 20 20 20 20 20 78 4e 6f 64  g";.        xNod
4e20: 65 53 75 67 67 2e 64 61 74 61 73 65 74 2e 65 72  eSugg.dataset.er
4e30: 72 6f 72 5f 69 64 20 3d 20 73 45 72 72 6f 72 49  ror_id = sErrorI
4e40: 64 3b 0a 20 20 20 20 20 20 20 20 78 4e 6f 64 65  d;.        xNode
4e50: 53 75 67 67 2e 74 65 78 74 43 6f 6e 74 65 6e 74  Sugg.textContent
4e60: 20 3d 20 73 53 75 67 67 3b 0a 20 20 20 20 20 20   = sSugg;.      
4e70: 20 20 72 65 74 75 72 6e 20 78 4e 6f 64 65 53 75    return xNodeSu
4e80: 67 67 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73  gg;.    }..    s
4e90: 65 74 53 70 65 6c 6c 53 75 67 67 65 73 74 69 6f  etSpellSuggestio
4ea0: 6e 73 46 6f 72 20 28 73 57 6f 72 64 2c 20 61 53  nsFor (sWord, aS
4eb0: 75 67 67 2c 20 69 53 75 67 67 42 6c 6f 63 6b 2c  ugg, iSuggBlock,
4ec0: 20 73 45 72 72 6f 72 49 64 29 20 7b 0a 20 20 20   sErrorId) {.   
4ed0: 20 20 20 20 20 2f 2f 20 73 70 65 6c 6c 20 63 68       // spell ch
4ee0: 65 63 6b 69 6e 67 20 73 75 67 67 65 73 74 69 6f  ecking suggestio
4ef0: 6e 73 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b  ns.        try {
4f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4f10: 28 73 45 72 72 6f 72 49 64 20 3d 3d 3d 20 74 68  (sErrorId === th
4f20: 69 73 2e 73 45 72 72 6f 72 49 64 29 20 7b 0a 20  is.sErrorId) {. 
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
4f40: 65 74 20 78 53 75 67 67 42 6c 6f 63 6b 20 3d 20  et xSuggBlock = 
4f50: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d  document.getElem
4f60: 65 6e 74 42 79 49 64 28 22 67 72 61 6d 6d 61 6c  entById("grammal
4f70: 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 73 75 67  ecte_tooltip_sug
4f80: 67 5f 62 6c 6f 63 6b 22 29 3b 0a 20 20 20 20 20  g_block");.     
4f90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69             if (i
4fa0: 53 75 67 67 42 6c 6f 63 6b 20 3d 3d 20 30 29 20  SuggBlock == 0) 
4fb0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4fc0: 20 20 20 20 20 20 78 53 75 67 67 42 6c 6f 63 6b        xSuggBlock
4fd0: 2e 74 65 78 74 43 6f 6e 74 65 6e 74 20 3d 20 22  .textContent = "
4fe0: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ";.             
4ff0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
5000: 20 20 20 20 20 69 66 20 28 21 61 53 75 67 67 20       if (!aSugg 
5010: 7c 7c 20 61 53 75 67 67 2e 6c 65 6e 67 74 68 20  || aSugg.length 
5020: 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20  == 0) {.        
5030: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5040: 69 53 75 67 67 42 6c 6f 63 6b 20 3d 3d 20 30 29  iSuggBlock == 0)
5050: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
5060: 20 20 20 20 20 20 20 20 20 20 20 78 53 75 67 67             xSugg
5070: 42 6c 6f 63 6b 2e 61 70 70 65 6e 64 43 68 69 6c  Block.appendChil
5080: 64 28 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74  d(document.creat
5090: 65 54 65 78 74 4e 6f 64 65 28 22 41 75 63 75 6e  eTextNode("Aucun
50a0: 65 2e 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20  e."));.         
50b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
50c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65               } e
50d0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
50e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 53            if (iS
50f0: 75 67 67 42 6c 6f 63 6b 20 3e 20 30 29 20 7b 0a  uggBlock > 0) {.
5100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5110: 20 20 20 20 20 20 20 20 78 53 75 67 67 42 6c 6f          xSuggBlo
5120: 63 6b 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 6f  ck.appendChild(o
5130: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61  Grammalecte.crea
5140: 74 65 4e 6f 64 65 28 22 64 69 76 22 2c 20 7b 63  teNode("div", {c
5150: 6c 61 73 73 4e 61 6d 65 3a 20 22 67 72 61 6d 6d  lassName: "gramm
5160: 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f 6f  alecte_tooltip_o
5170: 74 68 65 72 5f 73 75 67 67 5f 74 69 74 6c 65 22  ther_sugg_title"
5180: 2c 20 74 65 78 74 43 6f 6e 74 65 6e 74 3a 20 22  , textContent: "
5190: 41 55 54 52 45 53 20 53 55 47 47 45 53 54 49 4f  AUTRES SUGGESTIO
51a0: 4e 53 e2 80 af 3a 22 7d 29 29 3b 0a 20 20 20 20  NS...:"}));.    
51b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51c0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
51d0: 20 20 20 20 20 20 6c 65 74 20 69 53 75 67 67 20        let iSugg 
51e0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 0;.           
51f0: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 6c 65           for (le
5200: 74 20 73 53 75 67 67 20 6f 66 20 61 53 75 67 67  t sSugg of aSugg
5210: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
5220: 20 20 20 20 20 20 20 20 20 20 20 20 78 53 75 67              xSug
5230: 67 42 6c 6f 63 6b 2e 61 70 70 65 6e 64 43 68 69  gBlock.appendChi
5240: 6c 64 28 74 68 69 73 2e 5f 63 72 65 61 74 65 53  ld(this._createS
5250: 75 67 67 65 73 74 69 6f 6e 28 73 45 72 72 6f 72  uggestion(sError
5260: 49 64 2c 20 69 53 75 67 67 42 6c 6f 63 6b 2c 20  Id, iSuggBlock, 
5270: 69 53 75 67 67 2c 20 73 53 75 67 67 29 29 3b 0a  iSugg, sSugg));.
5280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5290: 20 20 20 20 20 20 20 20 78 53 75 67 67 42 6c 6f          xSuggBlo
52a0: 63 6b 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 64  ck.appendChild(d
52b0: 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 54 65  ocument.createTe
52c0: 78 74 4e 6f 64 65 28 22 20 22 29 29 3b 0a 20 20  xtNode(" "));.  
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52e0: 20 20 20 20 20 20 69 53 75 67 67 20 2b 3d 20 31        iSugg += 1
52f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
5300: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5310: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5320: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5330: 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  }.        catch 
5340: 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  (e) {.          
5350: 20 20 6c 65 74 20 78 53 75 67 67 42 6c 6f 63 6b    let xSuggBlock
5360: 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45   = document.getE
5370: 6c 65 6d 65 6e 74 42 79 49 64 28 22 67 72 61 6d  lementById("gram
5380: 6d 61 6c 65 63 74 65 5f 74 6f 6f 6c 74 69 70 5f  malecte_tooltip_
5390: 73 75 67 67 5f 62 6c 6f 63 6b 22 29 3b 0a 20 20  sugg_block");.  
53a0: 20 20 20 20 20 20 20 20 20 20 78 53 75 67 67 42            xSuggB
53b0: 6c 6f 63 6b 2e 61 70 70 65 6e 64 43 68 69 6c 64  lock.appendChild
53c0: 28 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65  (document.create
53d0: 54 65 78 74 4e 6f 64 65 28 22 23 20 4f 75 70 73  TextNode("# Oups
53e0: 2e 20 4c 65 20 6d c3 a9 63 61 6e 69 73 6d 65 20  . Le m..canisme 
53f0: 64 65 20 73 75 67 67 65 73 74 69 6f 6e 20 6f 72  de suggestion or
5400: 74 68 6f 67 72 61 70 68 69 71 75 65 20 61 20 72  thographique a r
5410: 65 6e 63 6f 6e 74 72 c3 a9 20 75 6e 20 62 75 67  encontr.. un bug
5420: e2 80 a6 20 28 43 65 20 6d 6f 64 75 6c 65 20 65  ... (Ce module e
5430: 73 74 20 65 6e 63 6f 72 65 20 65 6e 20 70 68 61  st encore en pha
5440: 73 65 20 ce b2 2e 29 22 29 29 3b 0a 20 20 20 20  se ...)"));.    
5450: 20 20 20 20 20 20 20 20 73 68 6f 77 45 72 72 6f          showErro
5460: 72 28 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  r(e);.        }.
5470: 20 20 20 20 7d 0a 7d 0a 0a 0a 63 6c 61 73 73 20      }.}...class 
5480: 47 72 61 6d 6d 61 6c 65 63 74 65 4e 6f 64 65 43  GrammalecteNodeC
5490: 6f 6e 74 72 6f 6c 20 7b 0a 0a 20 20 20 20 63 6f  ontrol {..    co
54a0: 6e 73 74 72 75 63 74 6f 72 20 28 29 20 7b 0a 20  nstructor () {. 
54b0: 20 20 20 20 20 20 20 74 68 69 73 2e 78 4e 6f 64         this.xNod
54c0: 65 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  e = null;.      
54d0: 20 20 74 68 69 73 2e 64 50 61 72 61 67 72 61 70    this.dParagrap
54e0: 68 20 3d 20 6e 65 77 20 4d 61 70 28 29 3b 0a 20  h = new Map();. 
54f0: 20 20 20 20 20 20 20 74 68 69 73 2e 62 54 65 78         this.bTex
5500: 74 41 72 65 61 20 3d 20 6e 75 6c 6c 3b 0a 20 20  tArea = null;.  
5510: 20 20 7d 0a 0a 20 20 20 20 73 65 74 4e 6f 64 65    }..    setNode
5520: 20 28 78 4e 6f 64 65 29 20 7b 0a 20 20 20 20 20   (xNode) {.     
5530: 20 20 20 74 68 69 73 2e 63 6c 65 61 72 28 29 3b     this.clear();
5540: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 4e  .        this.xN
5550: 6f 64 65 20 3d 20 78 4e 6f 64 65 3b 0a 20 20 20  ode = xNode;.   
5560: 20 20 20 20 20 74 68 69 73 2e 62 54 65 78 74 41       this.bTextA
5570: 72 65 61 20 3d 20 28 78 4e 6f 64 65 2e 74 61 67  rea = (xNode.tag
5580: 4e 61 6d 65 20 3d 3d 20 22 54 45 58 54 41 52 45  Name == "TEXTARE
5590: 41 22 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69  A");.        thi
55a0: 73 2e 78 4e 6f 64 65 2e 64 69 73 61 62 6c 65 64  s.xNode.disabled
55b0: 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20   = true;.       
55c0: 20 74 68 69 73 2e 5f 6c 6f 61 64 54 65 78 74 28   this._loadText(
55d0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 63 6c  );.    }..    cl
55e0: 65 61 72 20 28 29 20 7b 0a 20 20 20 20 20 20 20  ear () {.       
55f0: 20 69 66 20 28 74 68 69 73 2e 78 4e 6f 64 65 20   if (this.xNode 
5600: 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20  !== null) {.    
5610: 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 4e 6f          this.xNo
5620: 64 65 2e 64 69 73 61 62 6c 65 64 20 3d 20 66 61  de.disabled = fa
5630: 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  lse;.           
5640: 20 74 68 69 73 2e 62 54 65 78 74 41 72 65 61 20   this.bTextArea 
5650: 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20  = false;.       
5660: 20 20 20 20 20 74 68 69 73 2e 78 4e 6f 64 65 20       this.xNode 
5670: 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  = null;.        
5680: 7d 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 64  }.        this.d
5690: 50 61 72 61 67 72 61 70 68 2e 63 6c 65 61 72 28  Paragraph.clear(
56a0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 65  );.    }..    se
56b0: 74 50 61 72 61 67 72 61 70 68 20 28 69 50 61 72  tParagraph (iPar
56c0: 61 67 72 61 70 68 2c 20 73 54 65 78 74 29 20 7b  agraph, sText) {
56d0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69  .        if (thi
56e0: 73 2e 78 4e 6f 64 65 20 21 3d 3d 20 6e 75 6c 6c  s.xNode !== null
56f0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
5700: 74 68 69 73 2e 64 50 61 72 61 67 72 61 70 68 2e  this.dParagraph.
5710: 73 65 74 28 69 50 61 72 61 67 72 61 70 68 2c 20  set(iParagraph, 
5720: 73 54 65 78 74 29 3b 0a 20 20 20 20 20 20 20 20  sText);.        
5730: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5f 6c 6f  }.    }..    _lo
5740: 61 64 54 65 78 74 20 28 29 20 7b 0a 20 20 20 20  adText () {.    
5750: 20 20 20 20 6c 65 74 20 73 54 65 78 74 20 3d 20      let sText = 
5760: 28 74 68 69 73 2e 62 54 65 78 74 41 72 65 61 29  (this.bTextArea)
5770: 20 3f 20 74 68 69 73 2e 78 4e 6f 64 65 2e 76 61   ? this.xNode.va
5780: 6c 75 65 20 3a 20 74 68 69 73 2e 78 4e 6f 64 65  lue : this.xNode
5790: 2e 69 6e 6e 65 72 54 65 78 74 3b 0a 20 20 20 20  .innerText;.    
57a0: 20 20 20 20 6c 65 74 20 69 20 3d 20 30 3b 0a 20      let i = 0;. 
57b0: 20 20 20 20 20 20 20 6c 65 74 20 69 53 74 61 72         let iStar
57c0: 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6c  t = 0;.        l
57d0: 65 74 20 69 45 6e 64 20 3d 20 30 3b 0a 20 20 20  et iEnd = 0;.   
57e0: 20 20 20 20 20 73 54 65 78 74 20 3d 20 73 54 65       sText = sTe
57f0: 78 74 2e 72 65 70 6c 61 63 65 28 2f 5c 72 5c 6e  xt.replace(/\r\n
5800: 2f 67 2c 20 22 5c 6e 22 29 2e 72 65 70 6c 61 63  /g, "\n").replac
5810: 65 28 2f 5c 72 2f 67 2c 20 22 5c 6e 22 29 2e 72  e(/\r/g, "\n").r
5820: 65 70 6c 61 63 65 28 2f c2 ad 2f 67 2c 20 22 22  eplace(/../g, ""
5830: 29 2e 6e 6f 72 6d 61 6c 69 7a 65 28 22 4e 46 43  ).normalize("NFC
5840: 22 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c  ");.        whil
5850: 65 20 28 28 69 45 6e 64 20 3d 20 73 54 65 78 74  e ((iEnd = sText
5860: 2e 69 6e 64 65 78 4f 66 28 22 5c 6e 22 2c 20 69  .indexOf("\n", i
5870: 53 74 61 72 74 29 29 20 21 3d 3d 20 2d 31 29 20  Start)) !== -1) 
5880: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  {.            th
5890: 69 73 2e 64 50 61 72 61 67 72 61 70 68 2e 73 65  is.dParagraph.se
58a0: 74 28 69 2c 20 73 54 65 78 74 2e 73 6c 69 63 65  t(i, sText.slice
58b0: 28 69 53 74 61 72 74 2c 20 69 45 6e 64 29 29 3b  (iStart, iEnd));
58c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 2b 2b  .            i++
58d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 53  ;.            iS
58e0: 74 61 72 74 20 3d 20 69 45 6e 64 2b 31 3b 0a 20  tart = iEnd+1;. 
58f0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5900: 20 74 68 69 73 2e 64 50 61 72 61 67 72 61 70 68   this.dParagraph
5910: 2e 73 65 74 28 69 2c 20 73 54 65 78 74 2e 73 6c  .set(i, sText.sl
5920: 69 63 65 28 69 53 74 61 72 74 29 29 3b 0a 20 20  ice(iStart));.  
5930: 20 20 20 20 20 20 2f 2f 63 6f 6e 73 6f 6c 65 2e        //console.
5940: 6c 6f 67 28 22 50 61 72 61 67 72 61 70 68 73 20  log("Paragraphs 
5950: 6e 75 6d 62 65 72 3a 20 22 20 2b 20 28 69 2b 31  number: " + (i+1
5960: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 65  ));.    }..    e
5970: 72 61 73 65 43 6f 6e 74 65 6e 74 20 28 29 20 7b  raseContent () {
5980: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28  .        while (
5990: 74 68 69 73 2e 78 4e 6f 64 65 2e 66 69 72 73 74  this.xNode.first
59a0: 43 68 69 6c 64 29 20 7b 0a 20 20 20 20 20 20 20  Child) {.       
59b0: 20 20 20 20 20 74 68 69 73 2e 78 4e 6f 64 65 2e       this.xNode.
59c0: 72 65 6d 6f 76 65 43 68 69 6c 64 28 74 68 69 73  removeChild(this
59d0: 2e 78 4e 6f 64 65 2e 66 69 72 73 74 43 68 69 6c  .xNode.firstChil
59e0: 64 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  d);.        }.  
59f0: 20 20 7d 0a 0a 20 20 20 20 77 72 69 74 65 20 28    }..    write (
5a00: 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28  ) {.        if (
5a10: 74 68 69 73 2e 78 4e 6f 64 65 20 21 3d 3d 20 6e  this.xNode !== n
5a20: 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ull) {.         
5a30: 20 20 20 6c 65 74 20 73 54 65 78 74 20 3d 20 22     let sText = "
5a40: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ";.            i
5a50: 66 20 28 74 68 69 73 2e 62 54 65 78 74 41 72 65  f (this.bTextAre
5a60: 61 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  a) {.           
5a70: 20 20 20 20 20 74 68 69 73 2e 64 50 61 72 61 67       this.dParag
5a80: 72 61 70 68 2e 66 6f 72 45 61 63 68 28 66 75 6e  raph.forEach(fun
5a90: 63 74 69 6f 6e 20 28 76 61 6c 2c 20 6b 65 79 29  ction (val, key)
5aa0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
5ab0: 20 20 20 20 20 20 20 73 54 65 78 74 20 2b 3d 20         sText += 
5ac0: 76 61 6c 20 2b 20 22 5c 6e 22 3b 0a 20 20 20 20  val + "\n";.    
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0a              });.
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5af0: 74 68 69 73 2e 78 4e 6f 64 65 2e 76 61 6c 75 65  this.xNode.value
5b00: 20 3d 20 73 54 65 78 74 2e 73 6c 69 63 65 28 30   = sText.slice(0
5b10: 2c 2d 31 29 2e 6e 6f 72 6d 61 6c 69 7a 65 28 22  ,-1).normalize("
5b20: 4e 46 43 22 29 3b 0a 20 20 20 20 20 20 20 20 20  NFC");.         
5b30: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
5b40: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
5b50: 2e 65 72 61 73 65 43 6f 6e 74 65 6e 74 28 29 3b  .eraseContent();
5b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5b70: 20 74 68 69 73 2e 64 50 61 72 61 67 72 61 70 68   this.dParagraph
5b80: 2e 66 6f 72 45 61 63 68 28 28 76 61 6c 2c 20 6b  .forEach((val, k
5b90: 65 79 29 20 3d 3e 20 7b 0a 20 20 20 20 20 20 20  ey) => {.       
5ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
5bb0: 73 2e 78 4e 6f 64 65 2e 61 70 70 65 6e 64 43 68  s.xNode.appendCh
5bc0: 69 6c 64 28 64 6f 63 75 6d 65 6e 74 2e 63 72 65  ild(document.cre
5bd0: 61 74 65 54 65 78 74 4e 6f 64 65 28 76 61 6c 2e  ateTextNode(val.
5be0: 6e 6f 72 6d 61 6c 69 7a 65 28 22 4e 46 43 22 29  normalize("NFC")
5bf0: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
5c00: 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 4e 6f          this.xNo
5c10: 64 65 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 64  de.appendChild(d
5c20: 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 45 6c  ocument.createEl
5c30: 65 6d 65 6e 74 28 22 62 72 22 29 29 3b 0a 20 20  ement("br"));.  
5c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29                })
5c50: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
5c60: 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 20 20 20    /*.           
5c70: 20 20 20 20 20 74 68 69 73 2e 64 50 61 72 61 67       this.dParag
5c80: 72 61 70 68 2e 66 6f 72 45 61 63 68 28 66 75 6e  raph.forEach(fun
5c90: 63 74 69 6f 6e 20 28 76 61 6c 2c 20 6b 65 79 29  ction (val, key)
5ca0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
5cb0: 20 20 20 20 20 20 20 73 54 65 78 74 20 2b 3d 20         sText += 
5cc0: 76 61 6c 20 2b 20 22 3c 62 72 2f 3e 22 3b 0a 20  val + "<br/>";. 
5cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5ce0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
5cf0: 20 20 20 74 68 69 73 2e 78 4e 6f 64 65 2e 69 6e     this.xNode.in
5d00: 6e 65 72 48 54 4d 4c 20 3d 20 73 54 65 78 74 2e  nerHTML = sText.
5d10: 6e 6f 72 6d 61 6c 69 7a 65 28 22 4e 46 43 22 29  normalize("NFC")
5d20: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
5d30: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20    */.           
5d40: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
5d50: 20 7d 0a 7d 0a                                    }.}.