Grammalecte  Hex Artifact Content

Artifact 677d02ceb64f31b63ce745559fcbf7b5d51e85c33255a3edbd3156c0bd9d753c:


0000: 2f 2f 20 4d 6f 64 69 66 79 20 70 61 67 65 0a 0a  // Modify page..
0010: 2f 2a 20 6a 73 68 69 6e 74 20 65 73 76 65 72 73  /* jshint esvers
0020: 69 6f 6e 3a 36 2c 20 2d 57 30 39 37 20 2a 2f 0a  ion:6, -W097 */.
0030: 2f 2a 20 6a 73 6c 69 6e 74 20 65 73 76 65 72 73  /* jslint esvers
0040: 69 6f 6e 3a 36 20 2a 2f 0a 2f 2a 20 67 6c 6f 62  ion:6 */./* glob
0050: 61 6c 20 47 72 61 6d 6d 61 6c 65 63 74 65 50 61  al GrammalectePa
0060: 6e 65 6c 2c 20 47 72 61 6d 6d 61 6c 65 63 74 65  nel, Grammalecte
0070: 4d 65 6e 75 2c 20 47 72 61 6d 6d 61 6c 65 63 74  Menu, Grammalect
0080: 65 54 65 78 74 46 6f 72 6d 61 74 74 65 72 2c 20  eTextFormatter, 
0090: 47 72 61 6d 6d 61 6c 65 63 74 65 4c 65 78 69 63  GrammalecteLexic
00a0: 6f 67 72 61 70 68 65 72 2c 20 47 72 61 6d 6d 61  ographer, Gramma
00b0: 6c 65 63 74 65 47 72 61 6d 6d 61 72 43 68 65 63  lecteGrammarChec
00c0: 6b 65 72 2c 20 47 72 61 6d 6d 61 6c 65 63 74 65  ker, Grammalecte
00d0: 4d 65 73 73 61 67 65 42 6f 78 2c 20 73 68 6f 77  MessageBox, show
00e0: 45 72 72 6f 72 2c 20 4d 75 74 61 74 69 6f 6e 4f  Error, MutationO
00f0: 62 73 65 72 76 65 72 2c 20 63 68 72 6f 6d 65 2c  bserver, chrome,
0100: 20 64 6f 63 75 6d 65 6e 74 2c 20 63 6f 6e 73 6f   document, conso
0110: 6c 65 20 2a 2f 0a 0a 2f 2a 0a 20 20 20 20 4a 53  le */../*.    JS
0120: 20 73 75 63 6b 73 20 28 61 67 61 69 6e 2c 20 61   sucks (again, a
0130: 6e 64 20 61 67 61 69 6e 2c 20 61 6e 64 20 61 67  nd again, and ag
0140: 61 69 6e 2c 20 61 6e 64 20 61 67 61 69 6e e2 80  ain, and again..
0150: a6 29 0a 20 20 20 20 4e 6f 74 20 70 6f 73 73 69  .).    Not possi
0160: 62 6c 65 20 74 6f 20 6c 6f 61 64 20 63 6f 6e 74  ble to load cont
0170: 65 6e 74 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ent from within 
0180: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 3a 0a 20  the extension:. 
0190: 20 20 20 68 74 74 70 73 3a 2f 2f 62 75 67 7a 69     https://bugzi
01a0: 6c 6c 61 2e 6d 6f 7a 69 6c 6c 61 2e 6f 72 67 2f  lla.mozilla.org/
01b0: 73 68 6f 77 5f 62 75 67 2e 63 67 69 3f 69 64 3d  show_bug.cgi?id=
01c0: 31 32 36 37 30 32 37 0a 20 20 20 20 4e 6f 20 53  1267027.    No S
01d0: 68 61 72 65 64 57 6f 72 6b 65 72 2c 20 6e 6f 20  haredWorker, no 
01e0: 69 6d 61 67 65 73 20 61 6c 6c 6f 77 65 64 20 66  images allowed f
01f0: 6f 72 20 6e 6f 77 e2 80 a6 0a 2a 2f 0a 0a 22 75  or now....*/.."u
0200: 73 65 20 73 74 72 69 63 74 22 3b 0a 0a 0a 66 75  se strict";...fu
0210: 6e 63 74 69 6f 6e 20 73 68 6f 77 45 72 72 6f 72  nction showError
0220: 20 28 65 29 20 7b 0a 20 20 20 20 63 6f 6e 73 6f   (e) {.    conso
0230: 6c 65 2e 65 72 72 6f 72 28 65 2e 66 69 6c 65 4e  le.error(e.fileN
0240: 61 6d 65 20 2b 20 22 5c 6e 22 20 2b 20 65 2e 6e  ame + "\n" + e.n
0250: 61 6d 65 20 2b 20 22 5c 6e 6c 69 6e 65 3a 20 22  ame + "\nline: "
0260: 20 2b 20 65 2e 6c 69 6e 65 4e 75 6d 62 65 72 20   + e.lineNumber 
0270: 2b 20 22 5c 6e 22 20 2b 20 65 2e 6d 65 73 73 61  + "\n" + e.messa
0280: 67 65 29 3b 0a 7d 0a 0a 2f 2f 20 43 68 72 6f 6d  ge);.}..// Chrom
0290: 65 20 64 6f 6e e2 80 99 74 20 66 6f 6c 6c 6f 77  e don...t follow
02a0: 20 74 68 65 20 57 33 43 20 73 70 65 63 69 66 69   the W3C specifi
02b0: 63 61 74 69 6f 6e 3a 0a 2f 2f 20 68 74 74 70 73  cation:.// https
02c0: 3a 2f 2f 62 72 6f 77 73 65 72 65 78 74 2e 67 69  ://browserext.gi
02d0: 74 68 75 62 2e 69 6f 2f 62 72 6f 77 73 65 72 65  thub.io/browsere
02e0: 78 74 2f 0a 6c 65 74 20 62 43 68 72 6f 6d 65 20  xt/.let bChrome 
02f0: 3d 20 66 61 6c 73 65 3b 0a 69 66 20 28 74 79 70  = false;.if (typ
0300: 65 6f 66 28 62 72 6f 77 73 65 72 29 20 21 3d 3d  eof(browser) !==
0310: 20 22 6f 62 6a 65 63 74 22 29 20 7b 0a 20 20 20   "object") {.   
0320: 20 76 61 72 20 62 72 6f 77 73 65 72 20 3d 20 63   var browser = c
0330: 68 72 6f 6d 65 3b 0a 20 20 20 20 62 43 68 72 6f  hrome;.    bChro
0340: 6d 65 20 3d 20 74 72 75 65 3b 0a 7d 0a 0a 0a 2f  me = true;.}.../
0350: 2a 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 49  *.function loadI
0360: 6d 61 67 65 20 28 73 43 6f 6e 74 61 69 6e 65 72  mage (sContainer
0370: 43 6c 61 73 73 2c 20 73 49 6d 61 67 65 50 61 74  Class, sImagePat
0380: 68 29 20 7b 0a 20 20 20 20 6c 65 74 20 78 52 65  h) {.    let xRe
0390: 71 75 65 73 74 20 3d 20 6e 65 77 20 58 4d 4c 48  quest = new XMLH
03a0: 74 74 70 52 65 71 75 65 73 74 28 29 3b 0a 20 20  ttpRequest();.  
03b0: 20 20 78 52 65 71 75 65 73 74 2e 6f 70 65 6e 28    xRequest.open(
03c0: 27 47 45 54 27 2c 20 62 72 6f 77 73 65 72 2e 65  'GET', browser.e
03d0: 78 74 65 6e 73 69 6f 6e 2e 67 65 74 55 52 4c 28  xtension.getURL(
03e0: 22 22 29 2b 73 49 6d 61 67 65 50 61 74 68 2c 20  "")+sImagePath, 
03f0: 66 61 6c 73 65 29 3b 0a 20 20 20 20 78 52 65 71  false);.    xReq
0400: 75 65 73 74 2e 72 65 73 70 6f 6e 73 65 54 79 70  uest.responseTyp
0410: 65 20 3d 20 22 61 72 72 61 79 62 75 66 66 65 72  e = "arraybuffer
0420: 22 3b 0a 20 20 20 20 78 52 65 71 75 65 73 74 2e  ";.    xRequest.
0430: 73 65 6e 64 28 29 3b 0a 20 20 20 20 6c 65 74 20  send();.    let 
0440: 62 6c 6f 62 54 78 74 20 3d 20 6e 65 77 20 42 6c  blobTxt = new Bl
0450: 6f 62 28 5b 78 52 65 71 75 65 73 74 2e 72 65 73  ob([xRequest.res
0460: 70 6f 6e 73 65 5d 2c 20 7b 74 79 70 65 3a 20 27  ponse], {type: '
0470: 69 6d 61 67 65 2f 70 6e 67 27 7d 29 3b 0a 20 20  image/png'});.  
0480: 20 20 6c 65 74 20 69 6d 67 20 3d 20 64 6f 63 75    let img = docu
0490: 6d 65 6e 74 2e 63 72 65 61 74 65 45 6c 65 6d 65  ment.createEleme
04a0: 6e 74 28 27 69 6d 67 27 29 3b 0a 20 20 20 20 69  nt('img');.    i
04b0: 6d 67 2e 73 72 63 20 3d 20 28 55 52 4c 20 7c 7c  mg.src = (URL ||
04c0: 20 77 65 62 6b 69 74 55 52 4c 29 2e 63 72 65 61   webkitURL).crea
04d0: 74 65 4f 62 6a 65 63 74 55 52 4c 28 62 6c 6f 62  teObjectURL(blob
04e0: 54 78 74 29 3b 20 2f 2f 20 77 65 62 6b 69 74 55  Txt); // webkitU
04f0: 52 4c 20 69 73 20 6f 62 73 6f 6c 65 74 65 3a 20  RL is obsolete: 
0500: 68 74 74 70 73 3a 2f 2f 62 75 67 73 2e 77 65 62  https://bugs.web
0510: 6b 69 74 2e 6f 72 67 2f 73 68 6f 77 5f 62 75 67  kit.org/show_bug
0520: 2e 63 67 69 3f 69 64 3d 31 36 37 35 31 38 0a 20  .cgi?id=167518. 
0530: 20 20 20 41 72 72 61 79 2e 66 69 6c 74 65 72 28     Array.filter(
0540: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d  document.getElem
0550: 65 6e 74 73 42 79 43 6c 61 73 73 4e 61 6d 65 28  entsByClassName(
0560: 73 43 6f 6e 74 61 69 6e 65 72 43 6c 61 73 73 29  sContainerClass)
0570: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 6f 45 6c 65  , function (oEle
0580: 6d 29 20 7b 0a 20 20 20 20 20 20 20 20 6f 45 6c  m) {.        oEl
0590: 65 6d 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 69  em.appendChild(i
05a0: 6d 67 29 3b 0a 20 20 20 20 7d 29 3b 0a 7d 0a 2a  mg);.    });.}.*
05b0: 2f 0a 0a 0a 63 6f 6e 73 74 20 6f 47 72 61 6d 6d  /...const oGramm
05c0: 61 6c 65 63 74 65 20 3d 20 7b 0a 0a 20 20 20 20  alecte = {..    
05d0: 6e 4d 65 6e 75 3a 20 30 2c 0a 20 20 20 20 6c 4d  nMenu: 0,.    lM
05e0: 65 6e 75 3a 20 5b 5d 2c 0a 0a 20 20 20 20 6f 54  enu: [],..    oT
05f0: 46 50 61 6e 65 6c 3a 20 6e 75 6c 6c 2c 0a 20 20  FPanel: null,.  
0600: 20 20 6f 4c 78 67 50 61 6e 65 6c 3a 20 6e 75 6c    oLxgPanel: nul
0610: 6c 2c 0a 20 20 20 20 6f 47 43 50 61 6e 65 6c 3a  l,.    oGCPanel:
0620: 20 6e 75 6c 6c 2c 0a 0a 20 20 20 20 6f 4d 65 73   null,..    oMes
0630: 73 61 67 65 42 6f 78 3a 20 6e 75 6c 6c 2c 0a 0a  sageBox: null,..
0640: 20 20 20 20 78 52 69 67 68 74 43 6c 69 63 6b 65      xRightClicke
0650: 64 4e 6f 64 65 3a 20 6e 75 6c 6c 2c 0a 0a 20 20  dNode: null,..  
0660: 20 20 78 4f 62 73 65 72 76 65 72 3a 20 6e 75 6c    xObserver: nul
0670: 6c 2c 0a 0a 20 20 20 20 73 45 78 74 65 6e 73 69  l,..    sExtensi
0680: 6f 6e 55 72 6c 3a 20 6e 75 6c 6c 2c 0a 0a 20 20  onUrl: null,..  
0690: 20 20 6c 69 73 74 65 6e 52 69 67 68 74 43 6c 69    listenRightCli
06a0: 63 6b 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  ck: function () 
06b0: 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 6f 64  {.        // Nod
06c0: 65 20 77 68 65 72 65 20 61 20 72 69 67 68 74 20  e where a right 
06d0: 63 6c 69 63 6b 20 69 73 20 64 6f 6e 65 0a 20 20  click is done.  
06e0: 20 20 20 20 20 20 2f 2f 20 42 75 67 20 72 65 70        // Bug rep
06f0: 6f 72 74 3a 20 68 74 74 70 73 3a 2f 2f 62 75 67  ort: https://bug
0700: 7a 69 6c 6c 61 2e 6d 6f 7a 69 6c 6c 61 2e 6f 72  zilla.mozilla.or
0710: 67 2f 73 68 6f 77 5f 62 75 67 2e 63 67 69 3f 69  g/show_bug.cgi?i
0720: 64 3d 31 33 32 35 38 31 34 0a 20 20 20 20 20 20  d=1325814.      
0730: 20 20 64 6f 63 75 6d 65 6e 74 2e 61 64 64 45 76    document.addEv
0740: 65 6e 74 4c 69 73 74 65 6e 65 72 28 27 63 6f 6e  entListener('con
0750: 74 65 78 74 6d 65 6e 75 27 2c 20 66 75 6e 63 74  textmenu', funct
0760: 69 6f 6e 20 28 78 45 76 65 6e 74 29 20 7b 0a 20  ion (xEvent) {. 
0770: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
0780: 78 52 69 67 68 74 43 6c 69 63 6b 65 64 4e 6f 64  xRightClickedNod
0790: 65 20 3d 20 78 45 76 65 6e 74 2e 74 61 72 67 65  e = xEvent.targe
07a0: 74 3b 0a 20 20 20 20 20 20 20 20 7d 2e 62 69 6e  t;.        }.bin
07b0: 64 28 74 68 69 73 29 2c 20 74 72 75 65 29 3b 0a  d(this), true);.
07c0: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 63 6c 65 61      },..    clea
07d0: 72 52 69 67 68 74 43 6c 69 63 6b 65 64 4e 6f 64  rRightClickedNod
07e0: 65 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  e: function () {
07f0: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 52  .        this.xR
0800: 69 67 68 74 43 6c 69 63 6b 65 64 4e 6f 64 65 20  ightClickedNode 
0810: 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 7d 2c 0a 0a  = null;.    },..
0820: 20 20 20 20 63 72 65 61 74 65 4d 65 6e 75 73 3a      createMenus:
0830: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
0840: 20 20 20 20 20 20 20 69 66 20 28 62 43 68 72 6f         if (bChro
0850: 6d 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  me) {.          
0860: 20 20 62 72 6f 77 73 65 72 2e 73 74 6f 72 61 67    browser.storag
0870: 65 2e 6c 6f 63 61 6c 2e 67 65 74 28 22 75 69 5f  e.local.get("ui_
0880: 6f 70 74 69 6f 6e 73 22 2c 20 74 68 69 73 2e 5f  options", this._
0890: 63 72 65 61 74 65 4d 65 6e 75 73 2e 62 69 6e 64  createMenus.bind
08a0: 28 74 68 69 73 29 29 3b 0a 20 20 20 20 20 20 20  (this));.       
08b0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20       return;.   
08c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62       }.        b
08d0: 72 6f 77 73 65 72 2e 73 74 6f 72 61 67 65 2e 6c  rowser.storage.l
08e0: 6f 63 61 6c 2e 67 65 74 28 22 75 69 5f 6f 70 74  ocal.get("ui_opt
08f0: 69 6f 6e 73 22 29 2e 74 68 65 6e 28 74 68 69 73  ions").then(this
0900: 2e 5f 63 72 65 61 74 65 4d 65 6e 75 73 2e 62 69  ._createMenus.bi
0910: 6e 64 28 74 68 69 73 29 2c 20 73 68 6f 77 45 72  nd(this), showEr
0920: 72 6f 72 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  ror);.    },..  
0930: 20 20 5f 63 72 65 61 74 65 4d 65 6e 75 73 3a 20    _createMenus: 
0940: 66 75 6e 63 74 69 6f 6e 20 28 64 4f 70 74 69 6f  function (dOptio
0950: 6e 73 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66  ns) {.        if
0960: 20 28 64 4f 70 74 69 6f 6e 73 2e 68 61 73 4f 77   (dOptions.hasOw
0970: 6e 50 72 6f 70 65 72 74 79 28 22 75 69 5f 6f 70  nProperty("ui_op
0980: 74 69 6f 6e 73 22 29 29 20 7b 0a 20 20 20 20 20  tions")) {.     
0990: 20 20 20 20 20 20 20 64 4f 70 74 69 6f 6e 73 20         dOptions 
09a0: 3d 20 64 4f 70 74 69 6f 6e 73 2e 75 69 5f 6f 70  = dOptions.ui_op
09b0: 74 69 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 20  tions;.         
09c0: 20 20 20 69 66 20 28 64 4f 70 74 69 6f 6e 73 2e     if (dOptions.
09d0: 74 65 78 74 61 72 65 61 29 20 7b 0a 20 20 20 20  textarea) {.    
09e0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
09f0: 28 6c 65 74 20 78 4e 6f 64 65 20 6f 66 20 64 6f  (let xNode of do
0a00: 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e  cument.getElemen
0a10: 74 73 42 79 54 61 67 4e 61 6d 65 28 22 74 65 78  tsByTagName("tex
0a20: 74 61 72 65 61 22 29 29 20 7b 0a 20 20 20 20 20  tarea")) {.     
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
0a40: 66 20 28 78 4e 6f 64 65 2e 73 74 79 6c 65 2e 64  f (xNode.style.d
0a50: 69 73 70 6c 61 79 20 21 3d 3d 20 22 6e 6f 6e 65  isplay !== "none
0a60: 22 20 26 26 20 78 4e 6f 64 65 2e 73 74 79 6c 65  " && xNode.style
0a70: 2e 76 69 73 69 62 69 6c 69 74 79 20 21 3d 3d 20  .visibility !== 
0a80: 22 68 69 64 64 65 6e 22 20 26 26 20 78 4e 6f 64  "hidden" && xNod
0a90: 65 2e 67 65 74 41 74 74 72 69 62 75 74 65 28 22  e.getAttribute("
0aa0: 73 70 65 6c 6c 63 68 65 63 6b 22 29 20 21 3d 3d  spellcheck") !==
0ab0: 20 22 66 61 6c 73 65 22 29 20 7b 0a 20 20 20 20   "false") {.    
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ad0: 20 20 20 20 74 68 69 73 2e 6c 4d 65 6e 75 2e 70      this.lMenu.p
0ae0: 75 73 68 28 6e 65 77 20 47 72 61 6d 6d 61 6c 65  ush(new Grammale
0af0: 63 74 65 4d 65 6e 75 28 74 68 69 73 2e 6e 4d 65  cteMenu(this.nMe
0b00: 6e 75 2c 20 78 4e 6f 64 65 29 29 3b 0a 20 20 20  nu, xNode));.   
0b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b20: 20 20 20 20 20 74 68 69 73 2e 6e 4d 65 6e 75 20       this.nMenu 
0b30: 2b 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20  += 1;.          
0b40: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
0b60: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
0b70: 20 20 20 20 20 20 20 20 69 66 20 28 64 4f 70 74          if (dOpt
0b80: 69 6f 6e 73 2e 65 64 69 74 61 62 6c 65 6e 6f 64  ions.editablenod
0b90: 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  e) {.           
0ba0: 20 20 20 20 20 66 6f 72 20 28 6c 65 74 20 78 4e       for (let xN
0bb0: 6f 64 65 20 6f 66 20 64 6f 63 75 6d 65 6e 74 2e  ode of document.
0bc0: 71 75 65 72 79 53 65 6c 65 63 74 6f 72 41 6c 6c  querySelectorAll
0bd0: 28 22 5b 63 6f 6e 74 65 6e 74 65 64 69 74 61 62  ("[contenteditab
0be0: 6c 65 5d 22 29 29 20 7b 0a 20 20 20 20 20 20 20  le]")) {.       
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
0c00: 73 2e 6c 4d 65 6e 75 2e 70 75 73 68 28 6e 65 77  s.lMenu.push(new
0c10: 20 47 72 61 6d 6d 61 6c 65 63 74 65 4d 65 6e 75   GrammalecteMenu
0c20: 28 74 68 69 73 2e 6e 4d 65 6e 75 2c 20 78 4e 6f  (this.nMenu, xNo
0c30: 64 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  de));.          
0c40: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
0c50: 4d 65 6e 75 20 2b 3d 20 31 3b 0a 20 20 20 20 20  Menu += 1;.     
0c60: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
0c70: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
0c80: 20 20 20 7d 0a 20 20 20 20 7d 2c 0a 0a 20 20 20     }.    },..   
0c90: 20 6f 62 73 65 72 76 65 50 61 67 65 3a 20 66 75   observePage: fu
0ca0: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20  nction () {.    
0cb0: 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 20      /*.         
0cc0: 20 20 20 57 68 65 6e 20 61 20 74 65 78 74 61 72     When a textar
0cd0: 65 61 20 69 73 20 61 64 64 65 64 20 76 69 61 20  ea is added via 
0ce0: 6a 61 73 63 72 69 70 74 20 77 65 20 61 64 64 20  jascript we add 
0cf0: 74 68 65 20 6d 65 6e 75 20 3a 29 0a 20 20 20 20  the menu :).    
0d00: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 74      */.        t
0d10: 68 69 73 2e 78 4f 62 73 65 72 76 65 72 20 3d 20  his.xObserver = 
0d20: 6e 65 77 20 4d 75 74 61 74 69 6f 6e 4f 62 73 65  new MutationObse
0d30: 72 76 65 72 28 66 75 6e 63 74 69 6f 6e 20 28 6d  rver(function (m
0d40: 75 74 61 74 69 6f 6e 73 29 20 7b 0a 20 20 20 20  utations) {.    
0d50: 20 20 20 20 20 20 20 20 6d 75 74 61 74 69 6f 6e          mutation
0d60: 73 2e 66 6f 72 45 61 63 68 28 66 75 6e 63 74 69  s.forEach(functi
0d70: 6f 6e 20 28 6d 75 74 61 74 69 6f 6e 29 20 7b 0a  on (mutation) {.
0d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d90: 66 6f 72 20 28 6c 65 74 20 69 20 3d 20 30 3b 20  for (let i = 0; 
0da0: 20 69 20 3c 20 6d 75 74 61 74 69 6f 6e 2e 61 64   i < mutation.ad
0db0: 64 65 64 4e 6f 64 65 73 2e 6c 65 6e 67 74 68 3b  dedNodes.length;
0dc0: 20 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20    i++){.        
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
0de0: 6d 75 74 61 74 69 6f 6e 2e 61 64 64 65 64 4e 6f  mutation.addedNo
0df0: 64 65 73 5b 69 5d 2e 74 61 67 4e 61 6d 65 20 3d  des[i].tagName =
0e00: 3d 20 22 54 45 58 54 41 52 45 41 22 29 20 7b 0a  = "TEXTAREA") {.
0e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e20: 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c          oGrammal
0e30: 65 63 74 65 2e 6c 4d 65 6e 75 2e 70 75 73 68 28  ecte.lMenu.push(
0e40: 6e 65 77 20 47 72 61 6d 6d 61 6c 65 63 74 65 4d  new GrammalecteM
0e50: 65 6e 75 28 6f 47 72 61 6d 6d 61 6c 65 63 74 65  enu(oGrammalecte
0e60: 2e 6e 4d 65 6e 75 2c 20 6d 75 74 61 74 69 6f 6e  .nMenu, mutation
0e70: 2e 61 64 64 65 64 4e 6f 64 65 73 5b 69 5d 29 29  .addedNodes[i]))
0e80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
0e90: 20 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d            oGramm
0ea0: 61 6c 65 63 74 65 2e 6e 4d 65 6e 75 20 2b 3d 20  alecte.nMenu += 
0eb0: 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1;.             
0ec0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
0ed0: 20 28 6d 75 74 61 74 69 6f 6e 2e 61 64 64 65 64   (mutation.added
0ee0: 4e 6f 64 65 73 5b 69 5d 2e 67 65 74 45 6c 65 6d  Nodes[i].getElem
0ef0: 65 6e 74 73 42 79 54 61 67 4e 61 6d 65 29 20 7b  entsByTagName) {
0f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f10: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 6c 65           for (le
0f20: 74 20 78 4e 6f 64 65 20 6f 66 20 6d 75 74 61 74  t xNode of mutat
0f30: 69 6f 6e 2e 61 64 64 65 64 4e 6f 64 65 73 5b 69  ion.addedNodes[i
0f40: 5d 2e 67 65 74 45 6c 65 6d 65 6e 74 73 42 79 54  ].getElementsByT
0f50: 61 67 4e 61 6d 65 28 22 74 65 78 74 61 72 65 61  agName("textarea
0f60: 22 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ")) {.          
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f80: 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6c    oGrammalecte.l
0f90: 4d 65 6e 75 2e 70 75 73 68 28 6e 65 77 20 47 72  Menu.push(new Gr
0fa0: 61 6d 6d 61 6c 65 63 74 65 4d 65 6e 75 28 6f 47  ammalecteMenu(oG
0fb0: 72 61 6d 6d 61 6c 65 63 74 65 2e 6e 4d 65 6e 75  rammalecte.nMenu
0fc0: 2c 20 78 4e 6f 64 65 29 29 3b 0a 20 20 20 20 20  , xNode));.     
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65         oGrammale
0ff0: 63 74 65 2e 6e 4d 65 6e 75 20 2b 3d 20 31 3b 0a  cte.nMenu += 1;.
1000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1010: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
1030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1040: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 29  }.            })
1050: 3b 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20  ;.        });.  
1060: 20 20 20 20 20 20 74 68 69 73 2e 78 4f 62 73 65        this.xObse
1070: 72 76 65 72 2e 6f 62 73 65 72 76 65 28 64 6f 63  rver.observe(doc
1080: 75 6d 65 6e 74 2e 62 6f 64 79 2c 20 7b 0a 20 20  ument.body, {.  
1090: 20 20 20 20 20 20 20 20 20 20 63 68 69 6c 64 4c            childL
10a0: 69 73 74 3a 20 74 72 75 65 2c 0a 20 20 20 20 20  ist: true,.     
10b0: 20 20 20 20 20 20 20 73 75 62 74 72 65 65 3a 20         subtree: 
10c0: 74 72 75 65 0a 20 20 20 20 20 20 20 20 7d 29 3b  true.        });
10d0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 72 65 73  .    },..    res
10e0: 63 61 6e 50 61 67 65 3a 20 66 75 6e 63 74 69 6f  canPage: functio
10f0: 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 69  n () {.        i
1100: 66 20 28 74 68 69 73 2e 6f 54 46 50 61 6e 65 6c  f (this.oTFPanel
1110: 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 20 74 68 69   !== null) { thi
1120: 73 2e 6f 54 46 50 61 6e 65 6c 2e 68 69 64 65 28  s.oTFPanel.hide(
1130: 29 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20  ); }.        if 
1140: 28 74 68 69 73 2e 6f 4c 78 67 50 61 6e 65 6c 20  (this.oLxgPanel 
1150: 21 3d 3d 20 6e 75 6c 6c 29 20 7b 20 74 68 69 73  !== null) { this
1160: 2e 6f 4c 78 67 50 61 6e 65 6c 2e 68 69 64 65 28  .oLxgPanel.hide(
1170: 29 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20  ); }.        if 
1180: 28 74 68 69 73 2e 6f 47 43 50 61 6e 65 6c 20 21  (this.oGCPanel !
1190: 3d 3d 20 6e 75 6c 6c 29 20 7b 20 74 68 69 73 2e  == null) { this.
11a0: 6f 47 43 50 61 6e 65 6c 2e 68 69 64 65 28 29 3b  oGCPanel.hide();
11b0: 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28   }.        for (
11c0: 6c 65 74 20 6f 4d 65 6e 75 20 6f 66 20 74 68 69  let oMenu of thi
11d0: 73 2e 6c 4d 65 6e 75 29 20 7b 0a 20 20 20 20 20  s.lMenu) {.     
11e0: 20 20 20 20 20 20 20 6f 4d 65 6e 75 2e 64 65 6c         oMenu.del
11f0: 65 74 65 4e 6f 64 65 73 28 29 3b 0a 20 20 20 20  eteNodes();.    
1200: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 74 68      }.        th
1210: 69 73 2e 6c 4d 65 6e 75 2e 6c 65 6e 67 74 68 20  is.lMenu.length 
1220: 3d 20 30 3b 20 2f 2f 20 74 6f 20 63 6c 65 61 72  = 0; // to clear
1230: 20 61 6e 20 61 72 72 61 79 0a 20 20 20 20 20 20   an array.      
1240: 20 20 74 68 69 73 2e 6c 69 73 74 65 6e 52 69 67    this.listenRig
1250: 68 74 43 6c 69 63 6b 28 29 3b 0a 20 20 20 20 20  htClick();.     
1260: 20 20 20 74 68 69 73 2e 63 72 65 61 74 65 4d 65     this.createMe
1270: 6e 75 73 28 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  nus();.    },.. 
1280: 20 20 20 63 72 65 61 74 65 54 46 50 61 6e 65 6c     createTFPanel
1290: 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
12a0: 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
12b0: 2e 6f 54 46 50 61 6e 65 6c 20 3d 3d 3d 20 6e 75  .oTFPanel === nu
12c0: 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ll) {.          
12d0: 20 20 74 68 69 73 2e 6f 54 46 50 61 6e 65 6c 20    this.oTFPanel 
12e0: 3d 20 6e 65 77 20 47 72 61 6d 6d 61 6c 65 63 74  = new Grammalect
12f0: 65 54 65 78 74 46 6f 72 6d 61 74 74 65 72 28 22  eTextFormatter("
1300: 67 72 61 6d 6d 61 6c 65 63 74 65 5f 74 66 5f 70  grammalecte_tf_p
1310: 61 6e 65 6c 22 2c 20 22 46 6f 72 6d 61 74 65 75  anel", "Formateu
1320: 72 20 64 65 20 74 65 78 74 65 22 2c 20 37 36 30  r de texte", 760
1330: 2c 20 36 30 30 2c 20 66 61 6c 73 65 29 3b 0a 20  , 600, false);. 
1340: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 74 68 69             //thi
1350: 73 2e 6f 54 46 50 61 6e 65 6c 2e 6c 6f 67 49 6e  s.oTFPanel.logIn
1360: 6e 65 72 48 54 4d 4c 28 29 3b 0a 20 20 20 20 20  nerHTML();.     
1370: 20 20 20 20 20 20 20 74 68 69 73 2e 6f 54 46 50         this.oTFP
1380: 61 6e 65 6c 2e 69 6e 73 65 72 74 49 6e 74 6f 50  anel.insertIntoP
1390: 61 67 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20  age();.         
13a0: 20 20 20 77 69 6e 64 6f 77 2e 73 65 74 54 69 6d     window.setTim
13b0: 65 6f 75 74 28 66 75 6e 63 74 69 6f 6e 28 73 65  eout(function(se
13c0: 6c 66 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lf){.           
13d0: 20 20 20 20 20 73 65 6c 66 2e 6f 54 46 50 61 6e       self.oTFPan
13e0: 65 6c 2e 61 64 6a 75 73 74 48 65 69 67 68 74 28  el.adjustHeight(
13f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
1400: 2c 20 31 2c 20 74 68 69 73 29 3b 0a 20 20 20 20  , 1, this);.    
1410: 20 20 20 20 7d 0a 20 20 20 20 7d 2c 0a 0a 20 20      }.    },..  
1420: 20 20 63 72 65 61 74 65 4c 78 67 50 61 6e 65 6c    createLxgPanel
1430: 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
1440: 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
1450: 2e 6f 4c 78 67 50 61 6e 65 6c 20 3d 3d 3d 20 6e  .oLxgPanel === n
1460: 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ull) {.         
1470: 20 20 20 74 68 69 73 2e 6f 4c 78 67 50 61 6e 65     this.oLxgPane
1480: 6c 20 3d 20 6e 65 77 20 47 72 61 6d 6d 61 6c 65  l = new Grammale
1490: 63 74 65 4c 65 78 69 63 6f 67 72 61 70 68 65 72  cteLexicographer
14a0: 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 6c 78  ("grammalecte_lx
14b0: 67 5f 70 61 6e 65 6c 22 2c 20 22 4c 65 78 69 63  g_panel", "Lexic
14c0: 6f 67 72 61 70 68 65 22 2c 20 35 30 30 2c 20 37  ographe", 500, 7
14d0: 30 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  00);.           
14e0: 20 74 68 69 73 2e 6f 4c 78 67 50 61 6e 65 6c 2e   this.oLxgPanel.
14f0: 69 6e 73 65 72 74 49 6e 74 6f 50 61 67 65 28 29  insertIntoPage()
1500: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1510: 7d 2c 0a 0a 20 20 20 20 63 72 65 61 74 65 47 43  },..    createGC
1520: 50 61 6e 65 6c 3a 20 66 75 6e 63 74 69 6f 6e 20  Panel: function 
1530: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20  () {.        if 
1540: 28 74 68 69 73 2e 6f 47 43 50 61 6e 65 6c 20 3d  (this.oGCPanel =
1550: 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20  == null) {.     
1560: 20 20 20 20 20 20 20 74 68 69 73 2e 6f 47 43 50         this.oGCP
1570: 61 6e 65 6c 20 3d 20 6e 65 77 20 47 72 61 6d 6d  anel = new Gramm
1580: 61 6c 65 63 74 65 47 72 61 6d 6d 61 72 43 68 65  alecteGrammarChe
1590: 63 6b 65 72 28 22 67 72 61 6d 6d 61 6c 65 63 74  cker("grammalect
15a0: 65 5f 67 63 5f 70 61 6e 65 6c 22 2c 20 22 47 72  e_gc_panel", "Gr
15b0: 61 6d 6d 61 6c 65 63 74 65 22 2c 20 35 30 30 2c  ammalecte", 500,
15c0: 20 37 30 30 29 3b 0a 20 20 20 20 20 20 20 20 20   700);.         
15d0: 20 20 20 74 68 69 73 2e 6f 47 43 50 61 6e 65 6c     this.oGCPanel
15e0: 2e 69 6e 73 65 72 74 49 6e 74 6f 50 61 67 65 28  .insertIntoPage(
15f0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
1600: 20 7d 2c 0a 0a 20 20 20 20 63 72 65 61 74 65 4d   },..    createM
1610: 65 73 73 61 67 65 42 6f 78 3a 20 66 75 6e 63 74  essageBox: funct
1620: 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20  ion () {.       
1630: 20 69 66 20 28 74 68 69 73 2e 6f 4d 65 73 73 61   if (this.oMessa
1640: 67 65 42 6f 78 20 3d 3d 3d 20 6e 75 6c 6c 29 20  geBox === null) 
1650: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  {.            th
1660: 69 73 2e 6f 4d 65 73 73 61 67 65 42 6f 78 20 3d  is.oMessageBox =
1670: 20 6e 65 77 20 47 72 61 6d 6d 61 6c 65 63 74 65   new Grammalecte
1680: 4d 65 73 73 61 67 65 42 6f 78 28 22 67 72 61 6d  MessageBox("gram
1690: 6d 61 6c 65 63 74 65 5f 6d 65 73 73 61 67 65 5f  malecte_message_
16a0: 62 6f 78 22 2c 20 22 47 72 61 6d 6d 61 6c 65 63  box", "Grammalec
16b0: 74 65 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  te");.          
16c0: 20 20 74 68 69 73 2e 6f 4d 65 73 73 61 67 65 42    this.oMessageB
16d0: 6f 78 2e 69 6e 73 65 72 74 49 6e 74 6f 50 61 67  ox.insertIntoPag
16e0: 65 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  e();.        }. 
16f0: 20 20 20 7d 2c 0a 0a 20 20 20 20 73 74 61 72 74     },..    start
1700: 47 43 50 61 6e 65 6c 3a 20 66 75 6e 63 74 69 6f  GCPanel: functio
1710: 6e 20 28 78 4e 6f 64 65 3d 6e 75 6c 6c 29 20 7b  n (xNode=null) {
1720: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 72  .        this.cr
1730: 65 61 74 65 47 43 50 61 6e 65 6c 28 29 3b 0a 20  eateGCPanel();. 
1740: 20 20 20 20 20 20 20 74 68 69 73 2e 6f 47 43 50         this.oGCP
1750: 61 6e 65 6c 2e 63 6c 65 61 72 28 29 3b 0a 20 20  anel.clear();.  
1760: 20 20 20 20 20 20 74 68 69 73 2e 6f 47 43 50 61        this.oGCPa
1770: 6e 65 6c 2e 73 68 6f 77 28 29 3b 0a 20 20 20 20  nel.show();.    
1780: 20 20 20 20 74 68 69 73 2e 6f 47 43 50 61 6e 65      this.oGCPane
1790: 6c 2e 73 74 61 72 74 28 78 4e 6f 64 65 29 3b 0a  l.start(xNode);.
17a0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 47 43          this.oGC
17b0: 50 61 6e 65 6c 2e 73 74 61 72 74 57 61 69 74 49  Panel.startWaitI
17c0: 63 6f 6e 28 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  con();.    },.. 
17d0: 20 20 20 73 74 61 72 74 4c 78 67 50 61 6e 65 6c     startLxgPanel
17e0: 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
17f0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 72 65          this.cre
1800: 61 74 65 4c 78 67 50 61 6e 65 6c 28 29 3b 0a 20  ateLxgPanel();. 
1810: 20 20 20 20 20 20 20 74 68 69 73 2e 6f 4c 78 67         this.oLxg
1820: 50 61 6e 65 6c 2e 63 6c 65 61 72 28 29 3b 0a 20  Panel.clear();. 
1830: 20 20 20 20 20 20 20 74 68 69 73 2e 6f 4c 78 67         this.oLxg
1840: 50 61 6e 65 6c 2e 73 68 6f 77 28 29 3b 0a 20 20  Panel.show();.  
1850: 20 20 20 20 20 20 74 68 69 73 2e 6f 4c 78 67 50        this.oLxgP
1860: 61 6e 65 6c 2e 73 74 61 72 74 57 61 69 74 49 63  anel.startWaitIc
1870: 6f 6e 28 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  on();.    },..  
1880: 20 20 73 74 61 72 74 46 54 50 61 6e 65 6c 3a 20    startFTPanel: 
1890: 66 75 6e 63 74 69 6f 6e 20 28 78 4e 6f 64 65 3d  function (xNode=
18a0: 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20  null) {.        
18b0: 74 68 69 73 2e 63 72 65 61 74 65 54 46 50 61 6e  this.createTFPan
18c0: 65 6c 28 29 3b 0a 20 20 20 20 20 20 20 20 74 68  el();.        th
18d0: 69 73 2e 6f 54 46 50 61 6e 65 6c 2e 73 74 61 72  is.oTFPanel.star
18e0: 74 28 78 4e 6f 64 65 29 3b 0a 20 20 20 20 20 20  t(xNode);.      
18f0: 20 20 74 68 69 73 2e 6f 54 46 50 61 6e 65 6c 2e    this.oTFPanel.
1900: 73 68 6f 77 28 29 3b 0a 20 20 20 20 7d 2c 0a 0a  show();.    },..
1910: 20 20 20 20 73 68 6f 77 4d 65 73 73 61 67 65 3a      showMessage:
1920: 20 66 75 6e 63 74 69 6f 6e 20 28 73 4d 65 73 73   function (sMess
1930: 61 67 65 29 20 7b 0a 20 20 20 20 20 20 20 20 74  age) {.        t
1940: 68 69 73 2e 63 72 65 61 74 65 4d 65 73 73 61 67  his.createMessag
1950: 65 42 6f 78 28 29 3b 0a 20 20 20 20 20 20 20 20  eBox();.        
1960: 74 68 69 73 2e 6f 4d 65 73 73 61 67 65 42 6f 78  this.oMessageBox
1970: 2e 73 68 6f 77 28 29 3b 0a 20 20 20 20 20 20 20  .show();.       
1980: 20 74 68 69 73 2e 6f 4d 65 73 73 61 67 65 42 6f   this.oMessageBo
1990: 78 2e 73 65 74 4d 65 73 73 61 67 65 28 73 4d 65  x.setMessage(sMe
19a0: 73 73 61 67 65 29 3b 0a 20 20 20 20 7d 2c 0a 0a  ssage);.    },..
19b0: 20 20 20 20 67 65 74 50 61 67 65 54 65 78 74 3a      getPageText:
19c0: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
19d0: 20 20 20 20 20 20 20 6c 65 74 20 73 50 61 67 65         let sPage
19e0: 54 65 78 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  Text = document.
19f0: 62 6f 64 79 2e 69 6e 6e 65 72 54 65 78 74 3b 0a  body.innerText;.
1a00: 20 20 20 20 20 20 20 20 6c 65 74 20 6e 50 6f 73          let nPos
1a10: 20 3d 20 73 50 61 67 65 54 65 78 74 2e 69 6e 64   = sPageText.ind
1a20: 65 78 4f 66 28 22 5f 5f 67 72 61 6d 6d 61 6c 65  exOf("__grammale
1a30: 63 74 65 5f 70 61 6e 65 6c 5f 5f 22 29 3b 0a 20  cte_panel__");. 
1a40: 20 20 20 20 20 20 20 69 66 20 28 6e 50 6f 73 20         if (nPos 
1a50: 3e 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20  >= 0) {.        
1a60: 20 20 20 20 73 50 61 67 65 54 65 78 74 20 3d 20      sPageText = 
1a70: 73 50 61 67 65 54 65 78 74 2e 73 6c 69 63 65 28  sPageText.slice(
1a80: 30 2c 20 6e 50 6f 73 29 3b 0a 20 20 20 20 20 20  0, nPos);.      
1a90: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
1aa0: 72 6e 20 73 50 61 67 65 54 65 78 74 3b 0a 20 20  rn sPageText;.  
1ab0: 20 20 7d 2c 0a 0a 20 20 20 20 63 72 65 61 74 65    },..    create
1ac0: 4e 6f 64 65 3a 20 66 75 6e 63 74 69 6f 6e 20 28  Node: function (
1ad0: 73 54 79 70 65 2c 20 6f 41 74 74 72 2c 20 6f 44  sType, oAttr, oD
1ae0: 61 74 61 73 65 74 3d 6e 75 6c 6c 29 20 7b 0a 20  ataset=null) {. 
1af0: 20 20 20 20 20 20 20 74 72 79 20 7b 0a 20 20 20         try {.   
1b00: 20 20 20 20 20 20 20 20 20 6c 65 74 20 78 4e 6f           let xNo
1b10: 64 65 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 63 72  de = document.cr
1b20: 65 61 74 65 45 6c 65 6d 65 6e 74 28 73 54 79 70  eateElement(sTyp
1b30: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e);.            
1b40: 4f 62 6a 65 63 74 2e 61 73 73 69 67 6e 28 78 4e  Object.assign(xN
1b50: 6f 64 65 2c 20 6f 41 74 74 72 29 3b 0a 20 20 20  ode, oAttr);.   
1b60: 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 44 61           if (oDa
1b70: 74 61 73 65 74 29 20 7b 0a 20 20 20 20 20 20 20  taset) {.       
1b80: 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74 2e           Object.
1b90: 61 73 73 69 67 6e 28 78 4e 6f 64 65 2e 64 61 74  assign(xNode.dat
1ba0: 61 73 65 74 2c 20 6f 44 61 74 61 73 65 74 29 3b  aset, oDataset);
1bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1bc0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1bd0: 6e 20 78 4e 6f 64 65 3b 0a 20 20 20 20 20 20 20  n xNode;.       
1be0: 20 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68   }.        catch
1bf0: 20 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20   (e) {.         
1c00: 20 20 20 73 68 6f 77 45 72 72 6f 72 28 65 29 3b     showError(e);
1c10: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
1c20: 0a 7d 3b 0a 0a 0a 2f 2a 0a 20 20 20 20 43 6f 6e  .};.../*.    Con
1c30: 6e 65 78 69 6f 6e 20 74 6f 20 74 68 65 20 62 61  nexion to the ba
1c40: 63 6b 67 72 6f 75 6e 64 0a 2a 2f 0a 6c 65 74 20  ckground.*/.let 
1c50: 78 47 72 61 6d 6d 61 6c 65 63 74 65 50 6f 72 74  xGrammalectePort
1c60: 20 3d 20 62 72 6f 77 73 65 72 2e 72 75 6e 74 69   = browser.runti
1c70: 6d 65 2e 63 6f 6e 6e 65 63 74 28 7b 6e 61 6d 65  me.connect({name
1c80: 3a 20 22 63 6f 6e 74 65 6e 74 2d 73 63 72 69 70  : "content-scrip
1c90: 74 20 70 6f 72 74 22 7d 29 3b 0a 0a 78 47 72 61  t port"});..xGra
1ca0: 6d 6d 61 6c 65 63 74 65 50 6f 72 74 2e 6f 6e 4d  mmalectePort.onM
1cb0: 65 73 73 61 67 65 2e 61 64 64 4c 69 73 74 65 6e  essage.addListen
1cc0: 65 72 28 66 75 6e 63 74 69 6f 6e 20 28 6f 4d 65  er(function (oMe
1cd0: 73 73 61 67 65 29 20 7b 0a 20 20 20 20 6c 65 74  ssage) {.    let
1ce0: 20 7b 73 41 63 74 69 6f 6e 44 6f 6e 65 2c 20 72   {sActionDone, r
1cf0: 65 73 75 6c 74 2c 20 64 49 6e 66 6f 2c 20 62 45  esult, dInfo, bE
1d00: 6e 64 2c 20 62 45 72 72 6f 72 7d 20 3d 20 6f 4d  nd, bError} = oM
1d10: 65 73 73 61 67 65 3b 0a 20 20 20 20 6c 65 74 20  essage;.    let 
1d20: 73 54 65 78 74 20 3d 20 22 22 3b 0a 20 20 20 20  sText = "";.    
1d30: 73 77 69 74 63 68 20 28 73 41 63 74 69 6f 6e 44  switch (sActionD
1d40: 6f 6e 65 29 20 7b 0a 20 20 20 20 20 20 20 20 63  one) {.        c
1d50: 61 73 65 20 22 69 6e 69 74 22 3a 0a 20 20 20 20  ase "init":.    
1d60: 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c          oGrammal
1d70: 65 63 74 65 2e 73 45 78 74 65 6e 73 69 6f 6e 55  ecte.sExtensionU
1d80: 72 6c 20 3d 20 6f 4d 65 73 73 61 67 65 2e 73 55  rl = oMessage.sU
1d90: 72 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  rl;.            
1da0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
1db0: 61 73 65 20 22 70 61 72 73 65 41 6e 64 53 70 65  ase "parseAndSpe
1dc0: 6c 6c 63 68 65 63 6b 22 3a 0a 20 20 20 20 20 20  llcheck":.      
1dd0: 20 20 20 20 20 20 69 66 20 28 21 62 45 6e 64 29        if (!bEnd)
1de0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1df0: 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e     oGrammalecte.
1e00: 6f 47 43 50 61 6e 65 6c 2e 61 64 64 50 61 72 61  oGCPanel.addPara
1e10: 67 72 61 70 68 52 65 73 75 6c 74 28 72 65 73 75  graphResult(resu
1e20: 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  lt);.           
1e30: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
1e40: 20 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d            oGramm
1e50: 61 6c 65 63 74 65 2e 6f 47 43 50 61 6e 65 6c 2e  alecte.oGCPanel.
1e60: 73 74 6f 70 57 61 69 74 49 63 6f 6e 28 29 3b 0a  stopWaitIcon();.
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1e80: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1e90: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 70  .        case "p
1ea0: 61 72 73 65 41 6e 64 53 70 65 6c 6c 63 68 65 63  arseAndSpellchec
1eb0: 6b 31 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  k1":.           
1ec0: 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f 47   oGrammalecte.oG
1ed0: 43 50 61 6e 65 6c 2e 72 65 66 72 65 73 68 50 61  CPanel.refreshPa
1ee0: 72 61 67 72 61 70 68 28 64 49 6e 66 6f 2e 73 50  ragraph(dInfo.sP
1ef0: 61 72 61 67 72 61 70 68 49 64 2c 20 72 65 73 75  aragraphId, resu
1f00: 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  lt);.           
1f10: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
1f20: 63 61 73 65 20 22 67 65 74 4c 69 73 74 4f 66 54  case "getListOfT
1f30: 6f 6b 65 6e 73 22 3a 0a 20 20 20 20 20 20 20 20  okens":.        
1f40: 20 20 20 20 69 66 20 28 21 62 45 6e 64 29 20 7b      if (!bEnd) {
1f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f60: 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f 4c   oGrammalecte.oL
1f70: 78 67 50 61 6e 65 6c 2e 61 64 64 4c 69 73 74 4f  xgPanel.addListO
1f80: 66 54 6f 6b 65 6e 73 28 72 65 73 75 6c 74 29 3b  fTokens(result);
1f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
1fa0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
1fb0: 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63        oGrammalec
1fc0: 74 65 2e 6f 4c 78 67 50 61 6e 65 6c 2e 73 74 6f  te.oLxgPanel.sto
1fd0: 70 57 61 69 74 49 63 6f 6e 28 29 3b 0a 20 20 20  pWaitIcon();.   
1fe0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1ff0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2000: 20 20 20 20 20 20 63 61 73 65 20 22 67 65 74 53        case "getS
2010: 70 65 6c 6c 53 75 67 67 65 73 74 69 6f 6e 73 22  pellSuggestions"
2020: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 47  :.            oG
2030: 72 61 6d 6d 61 6c 65 63 74 65 2e 6f 47 43 50 61  rammalecte.oGCPa
2040: 6e 65 6c 2e 6f 54 6f 6f 6c 74 69 70 2e 73 65 74  nel.oTooltip.set
2050: 53 70 65 6c 6c 53 75 67 67 65 73 74 69 6f 6e 73  SpellSuggestions
2060: 46 6f 72 28 72 65 73 75 6c 74 2e 73 57 6f 72 64  For(result.sWord
2070: 2c 20 72 65 73 75 6c 74 2e 61 53 75 67 67 2c 20  , result.aSugg, 
2080: 72 65 73 75 6c 74 2e 69 53 75 67 67 42 6c 6f 63  result.iSuggBloc
2090: 6b 2c 20 64 49 6e 66 6f 2e 73 45 72 72 6f 72 49  k, dInfo.sErrorI
20a0: 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  d);.            
20b0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f  break;.        /
20c0: 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  *.            Co
20d0: 6d 6d 61 6e 64 73 20 72 65 63 65 69 76 65 64 20  mmands received 
20e0: 66 72 6f 6d 20 74 68 65 20 63 6f 6e 74 65 78 74  from the context
20f0: 20 6d 65 6e 75 0a 20 20 20 20 20 20 20 20 20 20   menu.          
2100: 20 20 28 43 6f 6e 74 65 78 74 20 6d 65 6e 75 20    (Context menu 
2110: 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
2120: 69 6e 20 62 61 63 6b 67 72 6f 75 6e 64 29 0a 20  in background). 
2130: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
2140: 20 20 2f 2f 20 47 72 61 6d 6d 61 72 20 63 68 65    // Grammar che
2150: 63 6b 65 72 20 63 6f 6d 6d 61 6e 64 73 0a 20 20  cker commands.  
2160: 20 20 20 20 20 20 63 61 73 65 20 22 72 69 67 68        case "righ
2170: 74 43 6c 69 63 6b 47 43 45 64 69 74 61 62 6c 65  tClickGCEditable
2180: 4e 6f 64 65 22 3a 0a 20 20 20 20 20 20 20 20 20  Node":.         
2190: 20 20 20 69 66 20 28 6f 47 72 61 6d 6d 61 6c 65     if (oGrammale
21a0: 63 74 65 2e 78 52 69 67 68 74 43 6c 69 63 6b 65  cte.xRightClicke
21b0: 64 4e 6f 64 65 20 21 3d 3d 20 6e 75 6c 6c 29 20  dNode !== null) 
21c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
21d0: 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 73    oGrammalecte.s
21e0: 74 61 72 74 47 43 50 61 6e 65 6c 28 6f 47 72 61  tartGCPanel(oGra
21f0: 6d 6d 61 6c 65 63 74 65 2e 78 52 69 67 68 74 43  mmalecte.xRightC
2200: 6c 69 63 6b 65 64 4e 6f 64 65 29 3b 0a 20 20 20  lickedNode);.   
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 54 65               sTe
2220: 78 74 20 3d 20 28 6f 47 72 61 6d 6d 61 6c 65 63  xt = (oGrammalec
2230: 74 65 2e 78 52 69 67 68 74 43 6c 69 63 6b 65 64  te.xRightClicked
2240: 4e 6f 64 65 2e 74 61 67 4e 61 6d 65 20 3d 3d 20  Node.tagName == 
2250: 22 54 45 58 54 41 52 45 41 22 29 20 3f 20 6f 47  "TEXTAREA") ? oG
2260: 72 61 6d 6d 61 6c 65 63 74 65 2e 78 52 69 67 68  rammalecte.xRigh
2270: 74 43 6c 69 63 6b 65 64 4e 6f 64 65 2e 76 61 6c  tClickedNode.val
2280: 75 65 20 3a 20 6f 47 72 61 6d 6d 61 6c 65 63 74  ue : oGrammalect
2290: 65 2e 78 52 69 67 68 74 43 6c 69 63 6b 65 64 4e  e.xRightClickedN
22a0: 6f 64 65 2e 69 6e 6e 65 72 54 65 78 74 3b 0a 20  ode.innerText;. 
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
22c0: 47 72 61 6d 6d 61 6c 65 63 74 65 50 6f 72 74 2e  GrammalectePort.
22d0: 70 6f 73 74 4d 65 73 73 61 67 65 28 7b 0a 20 20  postMessage({.  
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f0: 20 20 73 43 6f 6d 6d 61 6e 64 3a 20 22 70 61 72    sCommand: "par
2300: 73 65 41 6e 64 53 70 65 6c 6c 63 68 65 63 6b 22  seAndSpellcheck"
2310: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2320: 20 20 20 20 20 20 64 50 61 72 61 6d 3a 20 7b 73        dParam: {s
2330: 54 65 78 74 3a 20 73 54 65 78 74 2c 20 73 43 6f  Text: sText, sCo
2340: 75 6e 74 72 79 3a 20 22 46 52 22 2c 20 62 44 65  untry: "FR", bDe
2350: 62 75 67 3a 20 66 61 6c 73 65 2c 20 62 43 6f 6e  bug: false, bCon
2360: 74 65 78 74 3a 20 66 61 6c 73 65 7d 2c 0a 20 20  text: false},.  
2370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2380: 20 20 64 49 6e 66 6f 3a 20 7b 73 54 65 78 74 41    dInfo: {sTextA
2390: 72 65 61 49 64 3a 20 6f 47 72 61 6d 6d 61 6c 65  reaId: oGrammale
23a0: 63 74 65 2e 78 52 69 67 68 74 43 6c 69 63 6b 65  cte.xRightClicke
23b0: 64 4e 6f 64 65 2e 69 64 7d 0a 20 20 20 20 20 20  dNode.id}.      
23c0: 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20            });.  
23d0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
23e0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
23f0: 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e     oGrammalecte.
2400: 73 68 6f 77 4d 65 73 73 61 67 65 28 22 45 72 72  showMessage("Err
2410: 65 75 72 2e 20 4c 65 20 6e 6f 64 65 20 73 75 72  eur. Le node sur
2420: 20 6c 65 71 75 65 6c 20 76 6f 75 73 20 61 76 65   lequel vous ave
2430: 7a 20 63 6c 69 71 75 c3 a9 20 6e e2 80 99 61 20  z cliqu.. n...a 
2440: 70 61 73 20 70 75 20 c3 aa 74 72 65 20 69 64 65  pas pu ..tre ide
2450: 6e 74 69 66 69 c3 a9 2e 20 53 c3 a9 6c 65 63 74  ntifi... S..lect
2460: 69 6f 6e 6e 65 7a 20 6c 65 20 74 65 78 74 65 20  ionnez le texte 
2470: c3 a0 20 63 6f 72 72 69 67 65 72 20 65 74 20 72  .. corriger et r
2480: 65 6c 61 6e 63 65 7a 20 6c 65 20 63 6f 72 72 65  elancez le corre
2490: 63 74 65 75 72 20 76 69 61 20 6c 65 20 6d 65 6e  cteur via le men
24a0: 75 20 63 6f 6e 74 65 78 74 75 65 6c 2e 22 29 3b  u contextuel.");
24b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
24c0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
24d0: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22  ;.        case "
24e0: 72 69 67 68 74 43 6c 69 63 6b 47 43 50 61 67 65  rightClickGCPage
24f0: 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ":.            o
2500: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 73 74 61 72  Grammalecte.star
2510: 74 47 43 50 61 6e 65 6c 28 29 3b 0a 20 20 20 20  tGCPanel();.    
2520: 20 20 20 20 20 20 20 20 78 47 72 61 6d 6d 61 6c          xGrammal
2530: 65 63 74 65 50 6f 72 74 2e 70 6f 73 74 4d 65 73  ectePort.postMes
2540: 73 61 67 65 28 7b 0a 20 20 20 20 20 20 20 20 20  sage({.         
2550: 20 20 20 20 20 20 20 73 43 6f 6d 6d 61 6e 64 3a         sCommand:
2560: 20 22 70 61 72 73 65 41 6e 64 53 70 65 6c 6c 63   "parseAndSpellc
2570: 68 65 63 6b 22 2c 0a 20 20 20 20 20 20 20 20 20  heck",.         
2580: 20 20 20 20 20 20 20 64 50 61 72 61 6d 3a 20 7b         dParam: {
2590: 73 54 65 78 74 3a 20 6f 47 72 61 6d 6d 61 6c 65  sText: oGrammale
25a0: 63 74 65 2e 67 65 74 50 61 67 65 54 65 78 74 28  cte.getPageText(
25b0: 29 2c 20 73 43 6f 75 6e 74 72 79 3a 20 22 46 52  ), sCountry: "FR
25c0: 22 2c 20 62 44 65 62 75 67 3a 20 66 61 6c 73 65  ", bDebug: false
25d0: 2c 20 62 43 6f 6e 74 65 78 74 3a 20 66 61 6c 73  , bContext: fals
25e0: 65 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e},.            
25f0: 20 20 20 20 64 49 6e 66 6f 3a 20 7b 7d 0a 20 20      dInfo: {}.  
2600: 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20            });.  
2610: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2620: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 72  .        case "r
2630: 69 67 68 74 43 6c 69 63 6b 47 43 53 65 6c 65 63  ightClickGCSelec
2640: 74 65 64 54 65 78 74 22 3a 0a 20 20 20 20 20 20  tedText":.      
2650: 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63        oGrammalec
2660: 74 65 2e 73 74 61 72 74 47 43 50 61 6e 65 6c 28  te.startGCPanel(
2670: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  );.            /
2680: 2f 20 73 65 6c 65 63 74 65 64 20 74 65 78 74 20  / selected text 
2690: 69 73 20 73 65 6e 74 20 74 6f 20 74 68 65 20 47  is sent to the G
26a0: 43 20 77 6f 72 6b 65 72 20 69 6e 20 74 68 65 20  C worker in the 
26b0: 62 61 63 6b 67 72 6f 75 6e 64 20 73 63 72 69 70  background scrip
26c0: 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  t..            b
26d0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f 2f  reak;.        //
26e0: 20 4c 65 78 69 63 6f 67 72 61 70 68 65 72 20 63   Lexicographer c
26f0: 6f 6d 6d 61 6e 64 73 0a 20 20 20 20 20 20 20 20  ommands.        
2700: 63 61 73 65 20 22 72 69 67 68 74 43 6c 69 63 6b  case "rightClick
2710: 4c 78 67 45 64 69 74 61 62 6c 65 4e 6f 64 65 22  LxgEditableNode"
2720: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  :.            if
2730: 20 28 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 78   (oGrammalecte.x
2740: 52 69 67 68 74 43 6c 69 63 6b 65 64 4e 6f 64 65  RightClickedNode
2750: 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20   !== null) {.   
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 47 72               oGr
2770: 61 6d 6d 61 6c 65 63 74 65 2e 73 74 61 72 74 4c  ammalecte.startL
2780: 78 67 50 61 6e 65 6c 28 29 3b 0a 20 20 20 20 20  xgPanel();.     
2790: 20 20 20 20 20 20 20 20 20 20 20 73 54 65 78 74             sText
27a0: 20 3d 20 28 6f 47 72 61 6d 6d 61 6c 65 63 74 65   = (oGrammalecte
27b0: 2e 78 52 69 67 68 74 43 6c 69 63 6b 65 64 4e 6f  .xRightClickedNo
27c0: 64 65 2e 74 61 67 4e 61 6d 65 20 3d 3d 20 22 54  de.tagName == "T
27d0: 45 58 54 41 52 45 41 22 29 20 3f 20 6f 47 72 61  EXTAREA") ? oGra
27e0: 6d 6d 61 6c 65 63 74 65 2e 78 52 69 67 68 74 43  mmalecte.xRightC
27f0: 6c 69 63 6b 65 64 4e 6f 64 65 2e 76 61 6c 75 65  lickedNode.value
2800: 20 3a 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e   : oGrammalecte.
2810: 78 52 69 67 68 74 43 6c 69 63 6b 65 64 4e 6f 64  xRightClickedNod
2820: 65 2e 69 6e 6e 65 72 54 65 78 74 3b 0a 20 20 20  e.innerText;.   
2830: 20 20 20 20 20 20 20 20 20 20 20 20 20 78 47 72               xGr
2840: 61 6d 6d 61 6c 65 63 74 65 50 6f 72 74 2e 70 6f  ammalectePort.po
2850: 73 74 4d 65 73 73 61 67 65 28 7b 0a 20 20 20 20  stMessage({.    
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2870: 73 43 6f 6d 6d 61 6e 64 3a 20 22 67 65 74 4c 69  sCommand: "getLi
2880: 73 74 4f 66 54 6f 6b 65 6e 73 22 2c 0a 20 20 20  stOfTokens",.   
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 20 64 50 61 72 61 6d 3a 20 7b 73 54 65 78 74 3a   dParam: {sText:
28b0: 20 73 54 65 78 74 7d 2c 0a 20 20 20 20 20 20 20   sText},.       
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 49 6e               dIn
28d0: 66 6f 3a 20 7b 73 54 65 78 74 41 72 65 61 49 64  fo: {sTextAreaId
28e0: 3a 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 78  : oGrammalecte.x
28f0: 52 69 67 68 74 43 6c 69 63 6b 65 64 4e 6f 64 65  RightClickedNode
2900: 2e 69 64 7d 0a 20 20 20 20 20 20 20 20 20 20 20  .id}.           
2910: 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20       });.       
2920: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
2930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 47                oG
2940: 72 61 6d 6d 61 6c 65 63 74 65 2e 73 68 6f 77 4d  rammalecte.showM
2950: 65 73 73 61 67 65 28 22 45 72 72 65 75 72 2e 20  essage("Erreur. 
2960: 4c 65 20 6e 6f 64 65 20 73 75 72 20 6c 65 71 75  Le node sur lequ
2970: 65 6c 20 76 6f 75 73 20 61 76 65 7a 20 63 6c 69  el vous avez cli
2980: 71 75 c3 a9 20 6e e2 80 99 61 20 70 61 73 20 70  qu.. n...a pas p
2990: 75 20 c3 aa 74 72 65 20 69 64 65 6e 74 69 66 69  u ..tre identifi
29a0: c3 a9 2e 20 53 c3 a9 6c 65 63 74 69 6f 6e 6e 65  ... S..lectionne
29b0: 7a 20 6c 65 20 74 65 78 74 65 20 c3 a0 20 61 6e  z le texte .. an
29c0: 61 6c 79 73 65 72 20 65 74 20 72 65 6c 61 6e 63  alyser et relanc
29d0: 65 7a 20 6c 65 20 6c 65 78 69 63 6f 67 72 61 70  ez le lexicograp
29e0: 68 65 20 76 69 61 20 6c 65 20 6d 65 6e 75 20 63  he via le menu c
29f0: 6f 6e 74 65 78 74 75 65 6c 2e 22 29 3b 0a 20 20  ontextuel.");.  
2a00: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2a10: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2a20: 20 20 20 20 20 20 20 63 61 73 65 20 22 72 69 67         case "rig
2a30: 68 74 43 6c 69 63 6b 4c 78 67 50 61 67 65 22 3a  htClickLxgPage":
2a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 47 72  .            oGr
2a50: 61 6d 6d 61 6c 65 63 74 65 2e 73 74 61 72 74 4c  ammalecte.startL
2a60: 78 67 50 61 6e 65 6c 28 29 3b 0a 20 20 20 20 20  xgPanel();.     
2a70: 20 20 20 20 20 20 20 78 47 72 61 6d 6d 61 6c 65         xGrammale
2a80: 63 74 65 50 6f 72 74 2e 70 6f 73 74 4d 65 73 73  ctePort.postMess
2a90: 61 67 65 28 7b 0a 20 20 20 20 20 20 20 20 20 20  age({.          
2aa0: 20 20 20 20 20 20 73 43 6f 6d 6d 61 6e 64 3a 20        sCommand: 
2ab0: 22 67 65 74 4c 69 73 74 4f 66 54 6f 6b 65 6e 73  "getListOfTokens
2ac0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
2ad0: 20 20 20 64 50 61 72 61 6d 3a 20 7b 73 54 65 78     dParam: {sTex
2ae0: 74 3a 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e  t: oGrammalecte.
2af0: 67 65 74 50 61 67 65 54 65 78 74 28 29 7d 2c 0a  getPageText()},.
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b10: 64 49 6e 66 6f 3a 20 7b 7d 0a 20 20 20 20 20 20  dInfo: {}.      
2b20: 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20        });.      
2b30: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2b40: 20 20 20 20 20 63 61 73 65 20 22 72 69 67 68 74       case "right
2b50: 43 6c 69 63 6b 4c 78 67 53 65 6c 65 63 74 65 64  ClickLxgSelected
2b60: 54 65 78 74 22 3a 0a 20 20 20 20 20 20 20 20 20  Text":.         
2b70: 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e     oGrammalecte.
2b80: 73 74 61 72 74 4c 78 67 50 61 6e 65 6c 28 29 3b  startLxgPanel();
2b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
2ba0: 73 65 6c 65 63 74 65 64 20 74 65 78 74 20 69 73  selected text is
2bb0: 20 73 65 6e 74 20 74 6f 20 74 68 65 20 47 43 20   sent to the GC 
2bc0: 77 6f 72 6b 65 72 20 69 6e 20 74 68 65 20 62 61  worker in the ba
2bd0: 63 6b 67 72 6f 75 6e 64 20 73 63 72 69 70 74 2e  ckground script.
2be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
2bf0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20 54  ak;.        // T
2c00: 65 78 74 20 66 6f 72 6d 61 74 74 65 72 20 63 6f  ext formatter co
2c10: 6d 6d 61 6e 64 0a 20 20 20 20 20 20 20 20 63 61  mmand.        ca
2c20: 73 65 20 22 72 69 67 68 74 43 6c 69 63 6b 54 46  se "rightClickTF
2c30: 45 64 69 74 61 62 6c 65 4e 6f 64 65 22 3a 0a 20  EditableNode":. 
2c40: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f             if (o
2c50: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 78 52 69 67  Grammalecte.xRig
2c60: 68 74 43 6c 69 63 6b 65 64 4e 6f 64 65 20 21 3d  htClickedNode !=
2c70: 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20  = null) {.      
2c80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 47            if (oG
2c90: 72 61 6d 6d 61 6c 65 63 74 65 2e 78 52 69 67 68  rammalecte.xRigh
2ca0: 74 43 6c 69 63 6b 65 64 4e 6f 64 65 2e 74 61 67  tClickedNode.tag
2cb0: 4e 61 6d 65 20 3d 3d 20 22 54 45 58 54 41 52 45  Name == "TEXTARE
2cc0: 41 22 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  A") {.          
2cd0: 20 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d            oGramm
2ce0: 61 6c 65 63 74 65 2e 73 74 61 72 74 46 54 50 61  alecte.startFTPa
2cf0: 6e 65 6c 28 6f 47 72 61 6d 6d 61 6c 65 63 74 65  nel(oGrammalecte
2d00: 2e 78 52 69 67 68 74 43 6c 69 63 6b 65 64 4e 6f  .xRightClickedNo
2d10: 64 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  de);.           
2d20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d40: 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 73    oGrammalecte.s
2d50: 68 6f 77 4d 65 73 73 61 67 65 28 22 43 65 74 74  howMessage("Cett
2d60: 65 20 7a 6f 6e 65 20 64 65 20 74 65 78 74 65 20  e zone de texte 
2d70: 6e e2 80 99 65 73 74 20 70 61 73 20 72 c3 a9 65  n...est pas r..e
2d80: 6c 6c 65 6d 65 6e 74 20 75 6e 20 63 68 61 6d 70  llement un champ
2d90: 20 64 65 20 66 6f 72 6d 75 6c 61 69 72 65 2c 20   de formulaire, 
2da0: 6d 61 69 73 20 75 6e 20 6e 6f 64 65 20 48 54 4d  mais un node HTM
2db0: 4c 20 c3 a9 64 69 74 61 62 6c 65 2e 20 4c 65 20  L ..ditable. Le 
2dc0: 66 6f 72 6d 61 74 65 75 72 20 64 65 20 74 65 78  formateur de tex
2dd0: 74 65 20 6e e2 80 99 65 73 74 20 70 61 73 20 64  te n...est pas d
2de0: 69 73 70 6f 6e 69 62 6c 65 20 70 6f 75 72 20 63  isponible pour c
2df0: 65 20 74 79 70 65 20 64 65 20 63 68 61 6d 70 20  e type de champ 
2e00: 64 65 20 73 61 69 73 69 65 2e 22 29 3b 0a 20 20  de saisie.");.  
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
2e30: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
2e40: 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74       oGrammalect
2e50: 65 2e 73 68 6f 77 4d 65 73 73 61 67 65 28 22 45  e.showMessage("E
2e60: 72 72 65 75 72 2e 20 4c 65 20 6e 6f 64 65 20 73  rreur. Le node s
2e70: 75 72 20 6c 65 71 75 65 6c 20 76 6f 75 73 20 61  ur lequel vous a
2e80: 76 65 7a 20 63 6c 69 71 75 c3 a9 20 6e e2 80 99  vez cliqu.. n...
2e90: 61 20 70 61 73 20 70 75 20 c3 aa 74 72 65 20 69  a pas pu ..tre i
2ea0: 64 65 6e 74 69 66 69 c3 a9 2e 22 29 3b 0a 20 20  dentifi...");.  
2eb0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2ec0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2ed0: 20 20 20 20 20 20 20 2f 2f 20 72 65 73 63 61 6e         // rescan
2ee0: 20 70 61 67 65 20 63 6f 6d 6d 61 6e 64 0a 20 20   page command.  
2ef0: 20 20 20 20 20 20 63 61 73 65 20 22 72 65 73 63        case "resc
2f00: 61 6e 50 61 67 65 22 3a 0a 20 20 20 20 20 20 20  anPage":.       
2f10: 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74       oGrammalect
2f20: 65 2e 72 65 73 63 61 6e 50 61 67 65 28 29 3b 0a  e.rescanPage();.
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
2f40: 6b 3b 0a 20 20 20 20 20 20 20 20 64 65 66 61 75  k;.        defau
2f50: 6c 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  lt:.            
2f60: 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 43 6f  console.log("[Co
2f70: 6e 74 65 6e 74 20 73 63 72 69 70 74 5d 20 55 6e  ntent script] Un
2f80: 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 3a 20 22  known command: "
2f90: 20 2b 20 73 41 63 74 69 6f 6e 44 6f 6e 65 29 3b   + sActionDone);
2fa0: 0a 20 20 20 20 7d 0a 7d 29 3b 0a 0a 0a 2f 2a 0a  .    }.});.../*.
2fb0: 20 20 20 20 53 74 61 72 74 0a 2a 2f 0a 6f 47 72      Start.*/.oGr
2fc0: 61 6d 6d 61 6c 65 63 74 65 2e 6c 69 73 74 65 6e  ammalecte.listen
2fd0: 52 69 67 68 74 43 6c 69 63 6b 28 29 3b 0a 6f 47  RightClick();.oG
2fe0: 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61 74  rammalecte.creat
2ff0: 65 4d 65 6e 75 73 28 29 3b 0a 6f 47 72 61 6d 6d  eMenus();.oGramm
3000: 61 6c 65 63 74 65 2e 6f 62 73 65 72 76 65 50 61  alecte.observePa
3010: 67 65 28 29 3b 0a                                ge();.