Grammalecte  Hex Artifact Content

Artifact 98cdeac458a4e0d0e0edb9f96fd0a930f3433f5c5b9a2c7bb6ddfe78a8ba8850:


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 6f 4f 70 74 69 6f 6e 73 3a 20 6e 75 6c 6c    oOptions: null
06a0: 2c 0a 0a 20 20 20 20 6c 69 73 74 65 6e 52 69 67  ,..    listenRig
06b0: 68 74 43 6c 69 63 6b 3a 20 66 75 6e 63 74 69 6f  htClick: functio
06c0: 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 2f  n () {.        /
06d0: 2f 20 4e 6f 64 65 20 77 68 65 72 65 20 61 20 72  / Node where a r
06e0: 69 67 68 74 20 63 6c 69 63 6b 20 69 73 20 64 6f  ight click is do
06f0: 6e 65 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 75  ne.        // Bu
0700: 67 20 72 65 70 6f 72 74 3a 20 68 74 74 70 73 3a  g report: https:
0710: 2f 2f 62 75 67 7a 69 6c 6c 61 2e 6d 6f 7a 69 6c  //bugzilla.mozil
0720: 6c 61 2e 6f 72 67 2f 73 68 6f 77 5f 62 75 67 2e  la.org/show_bug.
0730: 63 67 69 3f 69 64 3d 31 33 32 35 38 31 34 0a 20  cgi?id=1325814. 
0740: 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
0750: 61 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65 72  addEventListener
0760: 28 27 63 6f 6e 74 65 78 74 6d 65 6e 75 27 2c 20  ('contextmenu', 
0770: 66 75 6e 63 74 69 6f 6e 20 28 78 45 76 65 6e 74  function (xEvent
0780: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
0790: 74 68 69 73 2e 78 52 69 67 68 74 43 6c 69 63 6b  this.xRightClick
07a0: 65 64 4e 6f 64 65 20 3d 20 78 45 76 65 6e 74 2e  edNode = xEvent.
07b0: 74 61 72 67 65 74 3b 0a 20 20 20 20 20 20 20 20  target;.        
07c0: 7d 2e 62 69 6e 64 28 74 68 69 73 29 2c 20 74 72  }.bind(this), tr
07d0: 75 65 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  ue);.    },..   
07e0: 20 63 6c 65 61 72 52 69 67 68 74 43 6c 69 63 6b   clearRightClick
07f0: 65 64 4e 6f 64 65 3a 20 66 75 6e 63 74 69 6f 6e  edNode: function
0800: 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68   () {.        th
0810: 69 73 2e 78 52 69 67 68 74 43 6c 69 63 6b 65 64  is.xRightClicked
0820: 4e 6f 64 65 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20  Node = null;.   
0830: 20 7d 2c 0a 0a 20 20 20 20 63 72 65 61 74 65 4d   },..    createM
0840: 65 6e 75 73 3a 20 66 75 6e 63 74 69 6f 6e 20 28  enus: function (
0850: 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28  ) {.        if (
0860: 62 43 68 72 6f 6d 65 29 20 7b 0a 20 20 20 20 20  bChrome) {.     
0870: 20 20 20 20 20 20 20 62 72 6f 77 73 65 72 2e 73         browser.s
0880: 74 6f 72 61 67 65 2e 6c 6f 63 61 6c 2e 67 65 74  torage.local.get
0890: 28 22 75 69 5f 6f 70 74 69 6f 6e 73 22 2c 20 74  ("ui_options", t
08a0: 68 69 73 2e 5f 63 72 65 61 74 65 4d 65 6e 75 73  his._createMenus
08b0: 2e 62 69 6e 64 28 74 68 69 73 29 29 3b 0a 20 20  .bind(this));.  
08c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
08d0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
08e0: 20 20 20 20 62 72 6f 77 73 65 72 2e 73 74 6f 72      browser.stor
08f0: 61 67 65 2e 6c 6f 63 61 6c 2e 67 65 74 28 22 75  age.local.get("u
0900: 69 5f 6f 70 74 69 6f 6e 73 22 29 2e 74 68 65 6e  i_options").then
0910: 28 74 68 69 73 2e 5f 63 72 65 61 74 65 4d 65 6e  (this._createMen
0920: 75 73 2e 62 69 6e 64 28 74 68 69 73 29 2c 20 73  us.bind(this), s
0930: 68 6f 77 45 72 72 6f 72 29 3b 0a 20 20 20 20 7d  howError);.    }
0940: 2c 0a 0a 20 20 20 20 5f 63 72 65 61 74 65 4d 65  ,..    _createMe
0950: 6e 75 73 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6f  nus: function (o
0960: 4f 70 74 69 6f 6e 73 29 20 7b 0a 20 20 20 20 20  Options) {.     
0970: 20 20 20 69 66 20 28 6f 4f 70 74 69 6f 6e 73 2e     if (oOptions.
0980: 68 61 73 4f 77 6e 50 72 6f 70 65 72 74 79 28 22  hasOwnProperty("
0990: 75 69 5f 6f 70 74 69 6f 6e 73 22 29 29 20 7b 0a  ui_options")) {.
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
09b0: 2e 6f 4f 70 74 69 6f 6e 73 20 3d 20 6f 4f 70 74  .oOptions = oOpt
09c0: 69 6f 6e 73 2e 75 69 5f 6f 70 74 69 6f 6e 73 3b  ions.ui_options;
09d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
09e0: 28 74 68 69 73 2e 6f 4f 70 74 69 6f 6e 73 2e 74  (this.oOptions.t
09f0: 65 78 74 61 72 65 61 29 20 7b 0a 20 20 20 20 20  extarea) {.     
0a00: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
0a10: 6c 65 74 20 78 4e 6f 64 65 20 6f 66 20 64 6f 63  let xNode of doc
0a20: 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74  ument.getElement
0a30: 73 42 79 54 61 67 4e 61 6d 65 28 22 74 65 78 74  sByTagName("text
0a40: 61 72 65 61 22 29 29 20 7b 0a 20 20 20 20 20 20  area")) {.      
0a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
0a60: 20 28 78 4e 6f 64 65 2e 73 74 79 6c 65 2e 64 69   (xNode.style.di
0a70: 73 70 6c 61 79 20 21 3d 3d 20 22 6e 6f 6e 65 22  splay !== "none"
0a80: 20 26 26 20 78 4e 6f 64 65 2e 73 74 79 6c 65 2e   && xNode.style.
0a90: 76 69 73 69 62 69 6c 69 74 79 20 21 3d 3d 20 22  visibility !== "
0aa0: 68 69 64 64 65 6e 22 20 26 26 20 78 4e 6f 64 65  hidden" && xNode
0ab0: 2e 67 65 74 41 74 74 72 69 62 75 74 65 28 22 73  .getAttribute("s
0ac0: 70 65 6c 6c 63 68 65 63 6b 22 29 20 21 3d 3d 20  pellcheck") !== 
0ad0: 22 66 61 6c 73 65 22 29 20 7b 0a 20 20 20 20 20  "false") {.     
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0af0: 20 20 20 74 68 69 73 2e 6c 4d 65 6e 75 2e 70 75     this.lMenu.pu
0b00: 73 68 28 6e 65 77 20 47 72 61 6d 6d 61 6c 65 63  sh(new Grammalec
0b10: 74 65 4d 65 6e 75 28 74 68 69 73 2e 6e 4d 65 6e  teMenu(this.nMen
0b20: 75 2c 20 78 4e 6f 64 65 29 29 3b 0a 20 20 20 20  u, xNode));.    
0b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b40: 20 20 20 20 74 68 69 73 2e 6e 4d 65 6e 75 20 2b      this.nMenu +
0b50: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 1;.           
0b60: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
0b70: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
0b80: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
0b90: 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
0ba0: 6f 4f 70 74 69 6f 6e 73 2e 65 64 69 74 61 62 6c  oOptions.editabl
0bb0: 65 6e 6f 64 65 29 20 7b 0a 20 20 20 20 20 20 20  enode) {.       
0bc0: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 6c 65           for (le
0bd0: 74 20 78 4e 6f 64 65 20 6f 66 20 64 6f 63 75 6d  t xNode of docum
0be0: 65 6e 74 2e 71 75 65 72 79 53 65 6c 65 63 74 6f  ent.querySelecto
0bf0: 72 41 6c 6c 28 22 5b 63 6f 6e 74 65 6e 74 65 64  rAll("[contented
0c00: 69 74 61 62 6c 65 5d 22 29 29 20 7b 0a 20 20 20  itable]")) {.   
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c20: 20 74 68 69 73 2e 6c 4d 65 6e 75 2e 70 75 73 68   this.lMenu.push
0c30: 28 6e 65 77 20 47 72 61 6d 6d 61 6c 65 63 74 65  (new Grammalecte
0c40: 4d 65 6e 75 28 74 68 69 73 2e 6e 4d 65 6e 75 2c  Menu(this.nMenu,
0c50: 20 78 4e 6f 64 65 29 29 3b 0a 20 20 20 20 20 20   xNode));.      
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
0c70: 69 73 2e 6e 4d 65 6e 75 20 2b 3d 20 31 3b 0a 20  is.nMenu += 1;. 
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
0c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
0ca0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 2c 0a         }.    },.
0cb0: 0a 20 20 20 20 6f 62 73 65 72 76 65 50 61 67 65  .    observePage
0cc0: 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
0cd0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 57 68          //    Wh
0ce0: 65 6e 20 61 20 74 65 78 74 61 72 65 61 20 69 73  en a textarea is
0cf0: 20 61 64 64 65 64 20 76 69 61 20 6a 61 73 63 72   added via jascr
0d00: 69 70 74 20 77 65 20 61 64 64 20 74 68 65 20 6d  ipt we add the m
0d10: 65 6e 75 0a 20 20 20 20 20 20 20 20 74 68 69 73  enu.        this
0d20: 2e 78 4f 62 73 65 72 76 65 72 20 3d 20 6e 65 77  .xObserver = new
0d30: 20 4d 75 74 61 74 69 6f 6e 4f 62 73 65 72 76 65   MutationObserve
0d40: 72 28 66 75 6e 63 74 69 6f 6e 20 28 6d 75 74 61  r(function (muta
0d50: 74 69 6f 6e 73 29 20 7b 0a 20 20 20 20 20 20 20  tions) {.       
0d60: 20 20 20 20 20 6d 75 74 61 74 69 6f 6e 73 2e 66       mutations.f
0d70: 6f 72 45 61 63 68 28 66 75 6e 63 74 69 6f 6e 20  orEach(function 
0d80: 28 6d 75 74 61 74 69 6f 6e 29 20 7b 0a 20 20 20  (mutation) {.   
0d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
0da0: 20 28 6c 65 74 20 69 20 3d 20 30 3b 20 20 69 20   (let i = 0;  i 
0db0: 3c 20 6d 75 74 61 74 69 6f 6e 2e 61 64 64 65 64  < mutation.added
0dc0: 4e 6f 64 65 73 2e 6c 65 6e 67 74 68 3b 20 20 69  Nodes.length;  i
0dd0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
0de0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 75 74           if (mut
0df0: 61 74 69 6f 6e 2e 61 64 64 65 64 4e 6f 64 65 73  ation.addedNodes
0e00: 5b 69 5d 2e 74 61 67 4e 61 6d 65 20 3d 3d 20 22  [i].tagName == "
0e10: 54 45 58 54 41 52 45 41 22 29 20 7b 0a 20 20 20  TEXTAREA") {.   
0e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e30: 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6f 4f       if (this.oO
0e40: 70 74 69 6f 6e 73 20 3d 3d 3d 20 6e 75 6c 6c 20  ptions === null 
0e50: 7c 7c 20 74 68 69 73 2e 6f 4f 70 74 69 6f 6e 73  || this.oOptions
0e60: 2e 74 65 78 74 61 72 65 61 29 20 7b 0a 20 20 20  .textarea) {.   
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e80: 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d 61           oGramma
0e90: 6c 65 63 74 65 2e 6c 4d 65 6e 75 2e 70 75 73 68  lecte.lMenu.push
0ea0: 28 6e 65 77 20 47 72 61 6d 6d 61 6c 65 63 74 65  (new Grammalecte
0eb0: 4d 65 6e 75 28 6f 47 72 61 6d 6d 61 6c 65 63 74  Menu(oGrammalect
0ec0: 65 2e 6e 4d 65 6e 75 2c 20 6d 75 74 61 74 69 6f  e.nMenu, mutatio
0ed0: 6e 2e 61 64 64 65 64 4e 6f 64 65 73 5b 69 5d 29  n.addedNodes[i])
0ee0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
0f00: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6e 4d 65 6e  Grammalecte.nMen
0f10: 75 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  u += 1;.        
0f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f30: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
0f40: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20        } else if 
0f50: 28 6d 75 74 61 74 69 6f 6e 2e 61 64 64 65 64 4e  (mutation.addedN
0f60: 6f 64 65 73 5b 69 5d 2e 67 65 74 45 6c 65 6d 65  odes[i].getEleme
0f70: 6e 74 73 42 79 54 61 67 4e 61 6d 65 29 20 7b 0a  ntsByTagName) {.
0f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f90: 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
0fa0: 2e 6f 4f 70 74 69 6f 6e 73 20 3d 3d 3d 20 6e 75  .oOptions === nu
0fb0: 6c 6c 20 7c 7c 20 74 68 69 73 2e 6f 4f 70 74 69  ll || this.oOpti
0fc0: 6f 6e 73 2e 74 65 78 74 61 72 65 61 29 20 7b 0a  ons.textarea) {.
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 20 20 20 20 20 66 6f 72 20              for 
0ff0: 28 6c 65 74 20 78 4e 6f 64 65 20 6f 66 20 6d 75  (let xNode of mu
1000: 74 61 74 69 6f 6e 2e 61 64 64 65 64 4e 6f 64 65  tation.addedNode
1010: 73 5b 69 5d 2e 67 65 74 45 6c 65 6d 65 6e 74 73  s[i].getElements
1020: 42 79 54 61 67 4e 61 6d 65 28 22 74 65 78 74 61  ByTagName("texta
1030: 72 65 61 22 29 29 20 7b 0a 20 20 20 20 20 20 20  rea")) {.       
1040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1050: 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d 61           oGramma
1060: 6c 65 63 74 65 2e 6c 4d 65 6e 75 2e 70 75 73 68  lecte.lMenu.push
1070: 28 6e 65 77 20 47 72 61 6d 6d 61 6c 65 63 74 65  (new Grammalecte
1080: 4d 65 6e 75 28 6f 47 72 61 6d 6d 61 6c 65 63 74  Menu(oGrammalect
1090: 65 2e 6e 4d 65 6e 75 2c 20 78 4e 6f 64 65 29 29  e.nMenu, xNode))
10a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
10b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c0: 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6e    oGrammalecte.n
10d0: 4d 65 6e 75 20 2b 3d 20 31 3b 0a 20 20 20 20 20  Menu += 1;.     
10e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1110: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
1120: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1130: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1140: 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20         });.     
1150: 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 74     });.        t
1160: 68 69 73 2e 78 4f 62 73 65 72 76 65 72 2e 6f 62  his.xObserver.ob
1170: 73 65 72 76 65 28 64 6f 63 75 6d 65 6e 74 2e 62  serve(document.b
1180: 6f 64 79 2c 20 7b 0a 20 20 20 20 20 20 20 20 20  ody, {.         
1190: 20 20 20 63 68 69 6c 64 4c 69 73 74 3a 20 74 72     childList: tr
11a0: 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue,.            
11b0: 73 75 62 74 72 65 65 3a 20 74 72 75 65 0a 20 20  subtree: true.  
11c0: 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 7d 2c        });.    },
11d0: 0a 0a 20 20 20 20 72 65 73 63 61 6e 50 61 67 65  ..    rescanPage
11e0: 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
11f0: 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
1200: 2e 6f 54 46 50 61 6e 65 6c 20 21 3d 3d 20 6e 75  .oTFPanel !== nu
1210: 6c 6c 29 20 7b 20 74 68 69 73 2e 6f 54 46 50 61  ll) { this.oTFPa
1220: 6e 65 6c 2e 68 69 64 65 28 29 3b 20 7d 0a 20 20  nel.hide(); }.  
1230: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6f        if (this.o
1240: 4c 78 67 50 61 6e 65 6c 20 21 3d 3d 20 6e 75 6c  LxgPanel !== nul
1250: 6c 29 20 7b 20 74 68 69 73 2e 6f 4c 78 67 50 61  l) { this.oLxgPa
1260: 6e 65 6c 2e 68 69 64 65 28 29 3b 20 7d 0a 20 20  nel.hide(); }.  
1270: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6f        if (this.o
1280: 47 43 50 61 6e 65 6c 20 21 3d 3d 20 6e 75 6c 6c  GCPanel !== null
1290: 29 20 7b 20 74 68 69 73 2e 6f 47 43 50 61 6e 65  ) { this.oGCPane
12a0: 6c 2e 68 69 64 65 28 29 3b 20 7d 0a 20 20 20 20  l.hide(); }.    
12b0: 20 20 20 20 66 6f 72 20 28 6c 65 74 20 6f 4d 65      for (let oMe
12c0: 6e 75 20 6f 66 20 74 68 69 73 2e 6c 4d 65 6e 75  nu of this.lMenu
12d0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
12e0: 6f 4d 65 6e 75 2e 64 65 6c 65 74 65 4e 6f 64 65  oMenu.deleteNode
12f0: 73 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  s();.        }. 
1300: 20 20 20 20 20 20 20 74 68 69 73 2e 6c 4d 65 6e         this.lMen
1310: 75 2e 6c 65 6e 67 74 68 20 3d 20 30 3b 20 2f 2f  u.length = 0; //
1320: 20 74 6f 20 63 6c 65 61 72 20 61 6e 20 61 72 72   to clear an arr
1330: 61 79 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e  ay.        this.
1340: 6c 69 73 74 65 6e 52 69 67 68 74 43 6c 69 63 6b  listenRightClick
1350: 28 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73  ();.        this
1360: 2e 63 72 65 61 74 65 4d 65 6e 75 73 28 29 3b 0a  .createMenus();.
1370: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 63 72 65 61      },..    crea
1380: 74 65 54 46 50 61 6e 65 6c 3a 20 66 75 6e 63 74  teTFPanel: funct
1390: 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20  ion () {.       
13a0: 20 69 66 20 28 74 68 69 73 2e 6f 54 46 50 61 6e   if (this.oTFPan
13b0: 65 6c 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20  el === null) {. 
13c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
13d0: 6f 54 46 50 61 6e 65 6c 20 3d 20 6e 65 77 20 47  oTFPanel = new G
13e0: 72 61 6d 6d 61 6c 65 63 74 65 54 65 78 74 46 6f  rammalecteTextFo
13f0: 72 6d 61 74 74 65 72 28 22 67 72 61 6d 6d 61 6c  rmatter("grammal
1400: 65 63 74 65 5f 74 66 5f 70 61 6e 65 6c 22 2c 20  ecte_tf_panel", 
1410: 22 46 6f 72 6d 61 74 65 75 72 20 64 65 20 74 65  "Formateur de te
1420: 78 74 65 22 2c 20 37 36 30 2c 20 36 31 35 2c 20  xte", 760, 615, 
1430: 66 61 6c 73 65 29 3b 0a 20 20 20 20 20 20 20 20  false);.        
1440: 20 20 20 20 2f 2f 74 68 69 73 2e 6f 54 46 50 61      //this.oTFPa
1450: 6e 65 6c 2e 6c 6f 67 49 6e 6e 65 72 48 54 4d 4c  nel.logInnerHTML
1460: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
1470: 74 68 69 73 2e 6f 54 46 50 61 6e 65 6c 2e 69 6e  this.oTFPanel.in
1480: 73 65 72 74 49 6e 74 6f 50 61 67 65 28 29 3b 0a  sertIntoPage();.
1490: 20 20 20 20 20 20 20 20 20 20 20 20 77 69 6e 64              wind
14a0: 6f 77 2e 73 65 74 54 69 6d 65 6f 75 74 28 66 75  ow.setTimeout(fu
14b0: 6e 63 74 69 6f 6e 28 73 65 6c 66 29 7b 0a 20 20  nction(self){.  
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
14d0: 6c 66 2e 6f 54 46 50 61 6e 65 6c 2e 61 64 6a 75  lf.oTFPanel.adju
14e0: 73 74 48 65 69 67 68 74 28 29 3b 0a 20 20 20 20  stHeight();.    
14f0: 20 20 20 20 20 20 20 20 7d 2c 20 35 30 2c 20 74          }, 50, t
1500: 68 69 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  his);.        }.
1510: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 63 72 65 61      },..    crea
1520: 74 65 4c 78 67 50 61 6e 65 6c 3a 20 66 75 6e 63  teLxgPanel: func
1530: 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20  tion () {.      
1540: 20 20 69 66 20 28 74 68 69 73 2e 6f 4c 78 67 50    if (this.oLxgP
1550: 61 6e 65 6c 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b  anel === null) {
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
1570: 73 2e 6f 4c 78 67 50 61 6e 65 6c 20 3d 20 6e 65  s.oLxgPanel = ne
1580: 77 20 47 72 61 6d 6d 61 6c 65 63 74 65 4c 65 78  w GrammalecteLex
1590: 69 63 6f 67 72 61 70 68 65 72 28 22 67 72 61 6d  icographer("gram
15a0: 6d 61 6c 65 63 74 65 5f 6c 78 67 5f 70 61 6e 65  malecte_lxg_pane
15b0: 6c 22 2c 20 22 4c 65 78 69 63 6f 67 72 61 70 68  l", "Lexicograph
15c0: 65 22 2c 20 35 30 30 2c 20 37 30 30 29 3b 0a 20  e", 500, 700);. 
15d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
15e0: 6f 4c 78 67 50 61 6e 65 6c 2e 69 6e 73 65 72 74  oLxgPanel.insert
15f0: 49 6e 74 6f 50 61 67 65 28 29 3b 0a 20 20 20 20  IntoPage();.    
1600: 20 20 20 20 7d 0a 20 20 20 20 7d 2c 0a 0a 20 20      }.    },..  
1610: 20 20 63 72 65 61 74 65 47 43 50 61 6e 65 6c 3a    createGCPanel:
1620: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
1630: 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
1640: 6f 47 43 50 61 6e 65 6c 20 3d 3d 3d 20 6e 75 6c  oGCPanel === nul
1650: 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  l) {.           
1660: 20 74 68 69 73 2e 6f 47 43 50 61 6e 65 6c 20 3d   this.oGCPanel =
1670: 20 6e 65 77 20 47 72 61 6d 6d 61 6c 65 63 74 65   new Grammalecte
1680: 47 72 61 6d 6d 61 72 43 68 65 63 6b 65 72 28 22  GrammarChecker("
1690: 67 72 61 6d 6d 61 6c 65 63 74 65 5f 67 63 5f 70  grammalecte_gc_p
16a0: 61 6e 65 6c 22 2c 20 22 47 72 61 6d 6d 61 6c 65  anel", "Grammale
16b0: 63 74 65 22 2c 20 35 30 30 2c 20 37 30 30 29 3b  cte", 500, 700);
16c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
16d0: 73 2e 6f 47 43 50 61 6e 65 6c 2e 69 6e 73 65 72  s.oGCPanel.inser
16e0: 74 49 6e 74 6f 50 61 67 65 28 29 3b 0a 20 20 20  tIntoPage();.   
16f0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 2c 0a 0a 20       }.    },.. 
1700: 20 20 20 63 72 65 61 74 65 4d 65 73 73 61 67 65     createMessage
1710: 42 6f 78 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  Box: function ()
1720: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 74   {.        if (t
1730: 68 69 73 2e 6f 4d 65 73 73 61 67 65 42 6f 78 20  his.oMessageBox 
1740: 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20  === null) {.    
1750: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 4d 65          this.oMe
1760: 73 73 61 67 65 42 6f 78 20 3d 20 6e 65 77 20 47  ssageBox = new G
1770: 72 61 6d 6d 61 6c 65 63 74 65 4d 65 73 73 61 67  rammalecteMessag
1780: 65 42 6f 78 28 22 67 72 61 6d 6d 61 6c 65 63 74  eBox("grammalect
1790: 65 5f 6d 65 73 73 61 67 65 5f 62 6f 78 22 2c 20  e_message_box", 
17a0: 22 47 72 61 6d 6d 61 6c 65 63 74 65 22 29 3b 0a  "Grammalecte");.
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
17c0: 2e 6f 4d 65 73 73 61 67 65 42 6f 78 2e 69 6e 73  .oMessageBox.ins
17d0: 65 72 74 49 6e 74 6f 50 61 67 65 28 29 3b 0a 20  ertIntoPage();. 
17e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 2c 0a         }.    },.
17f0: 0a 20 20 20 20 73 74 61 72 74 47 43 50 61 6e 65  .    startGCPane
1800: 6c 3a 20 66 75 6e 63 74 69 6f 6e 20 28 78 4e 6f  l: function (xNo
1810: 64 65 3d 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20  de=null) {.     
1820: 20 20 20 74 68 69 73 2e 63 72 65 61 74 65 47 43     this.createGC
1830: 50 61 6e 65 6c 28 29 3b 0a 20 20 20 20 20 20 20  Panel();.       
1840: 20 74 68 69 73 2e 6f 47 43 50 61 6e 65 6c 2e 63   this.oGCPanel.c
1850: 6c 65 61 72 28 29 3b 0a 20 20 20 20 20 20 20 20  lear();.        
1860: 74 68 69 73 2e 6f 47 43 50 61 6e 65 6c 2e 73 68  this.oGCPanel.sh
1870: 6f 77 28 29 3b 0a 20 20 20 20 20 20 20 20 74 68  ow();.        th
1880: 69 73 2e 6f 47 43 50 61 6e 65 6c 2e 73 74 61 72  is.oGCPanel.star
1890: 74 28 78 4e 6f 64 65 29 3b 0a 20 20 20 20 20 20  t(xNode);.      
18a0: 20 20 74 68 69 73 2e 6f 47 43 50 61 6e 65 6c 2e    this.oGCPanel.
18b0: 73 74 61 72 74 57 61 69 74 49 63 6f 6e 28 29 3b  startWaitIcon();
18c0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 73 74 61  .    },..    sta
18d0: 72 74 4c 78 67 50 61 6e 65 6c 3a 20 66 75 6e 63  rtLxgPanel: func
18e0: 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20  tion () {.      
18f0: 20 20 74 68 69 73 2e 63 72 65 61 74 65 4c 78 67    this.createLxg
1900: 50 61 6e 65 6c 28 29 3b 0a 20 20 20 20 20 20 20  Panel();.       
1910: 20 74 68 69 73 2e 6f 4c 78 67 50 61 6e 65 6c 2e   this.oLxgPanel.
1920: 63 6c 65 61 72 28 29 3b 0a 20 20 20 20 20 20 20  clear();.       
1930: 20 74 68 69 73 2e 6f 4c 78 67 50 61 6e 65 6c 2e   this.oLxgPanel.
1940: 73 68 6f 77 28 29 3b 0a 20 20 20 20 20 20 20 20  show();.        
1950: 74 68 69 73 2e 6f 4c 78 67 50 61 6e 65 6c 2e 73  this.oLxgPanel.s
1960: 74 61 72 74 57 61 69 74 49 63 6f 6e 28 29 3b 0a  tartWaitIcon();.
1970: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 73 74 61 72      },..    star
1980: 74 46 54 50 61 6e 65 6c 3a 20 66 75 6e 63 74 69  tFTPanel: functi
1990: 6f 6e 20 28 78 4e 6f 64 65 3d 6e 75 6c 6c 29 20  on (xNode=null) 
19a0: 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 63  {.        this.c
19b0: 72 65 61 74 65 54 46 50 61 6e 65 6c 28 29 3b 0a  reateTFPanel();.
19c0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 54 46          this.oTF
19d0: 50 61 6e 65 6c 2e 73 74 61 72 74 28 78 4e 6f 64  Panel.start(xNod
19e0: 65 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73  e);.        this
19f0: 2e 6f 54 46 50 61 6e 65 6c 2e 73 68 6f 77 28 29  .oTFPanel.show()
1a00: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 73 68  ;.    },..    sh
1a10: 6f 77 4d 65 73 73 61 67 65 3a 20 66 75 6e 63 74  owMessage: funct
1a20: 69 6f 6e 20 28 73 4d 65 73 73 61 67 65 29 20 7b  ion (sMessage) {
1a30: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 72  .        this.cr
1a40: 65 61 74 65 4d 65 73 73 61 67 65 42 6f 78 28 29  eateMessageBox()
1a50: 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f  ;.        this.o
1a60: 4d 65 73 73 61 67 65 42 6f 78 2e 73 68 6f 77 28  MessageBox.show(
1a70: 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e  );.        this.
1a80: 6f 4d 65 73 73 61 67 65 42 6f 78 2e 73 65 74 4d  oMessageBox.setM
1a90: 65 73 73 61 67 65 28 73 4d 65 73 73 61 67 65 29  essage(sMessage)
1aa0: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 67 65  ;.    },..    ge
1ab0: 74 50 61 67 65 54 65 78 74 3a 20 66 75 6e 63 74  tPageText: funct
1ac0: 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20  ion () {.       
1ad0: 20 6c 65 74 20 73 50 61 67 65 54 65 78 74 20 3d   let sPageText =
1ae0: 20 64 6f 63 75 6d 65 6e 74 2e 62 6f 64 79 2e 69   document.body.i
1af0: 6e 6e 65 72 54 65 78 74 3b 0a 20 20 20 20 20 20  nnerText;.      
1b00: 20 20 6c 65 74 20 6e 50 6f 73 20 3d 20 73 50 61    let nPos = sPa
1b10: 67 65 54 65 78 74 2e 69 6e 64 65 78 4f 66 28 22  geText.indexOf("
1b20: 5f 5f 67 72 61 6d 6d 61 6c 65 63 74 65 5f 70 61  __grammalecte_pa
1b30: 6e 65 6c 5f 5f 22 29 3b 0a 20 20 20 20 20 20 20  nel__");.       
1b40: 20 69 66 20 28 6e 50 6f 73 20 3e 3d 20 30 29 20   if (nPos >= 0) 
1b50: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 50  {.            sP
1b60: 61 67 65 54 65 78 74 20 3d 20 73 50 61 67 65 54  ageText = sPageT
1b70: 65 78 74 2e 73 6c 69 63 65 28 30 2c 20 6e 50 6f  ext.slice(0, nPo
1b80: 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  s);.        }.  
1b90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 50 61        return sPa
1ba0: 67 65 54 65 78 74 3b 0a 20 20 20 20 7d 2c 0a 0a  geText;.    },..
1bb0: 20 20 20 20 63 72 65 61 74 65 4e 6f 64 65 3a 20      createNode: 
1bc0: 66 75 6e 63 74 69 6f 6e 20 28 73 54 79 70 65 2c  function (sType,
1bd0: 20 6f 41 74 74 72 2c 20 6f 44 61 74 61 73 65 74   oAttr, oDataset
1be0: 3d 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20  =null) {.       
1bf0: 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20 20 20   try {.         
1c00: 20 20 20 6c 65 74 20 78 4e 6f 64 65 20 3d 20 64     let xNode = d
1c10: 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 45 6c  ocument.createEl
1c20: 65 6d 65 6e 74 28 73 54 79 70 65 29 3b 0a 20 20  ement(sType);.  
1c30: 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74            Object
1c40: 2e 61 73 73 69 67 6e 28 78 4e 6f 64 65 2c 20 6f  .assign(xNode, o
1c50: 41 74 74 72 29 3b 0a 20 20 20 20 20 20 20 20 20  Attr);.         
1c60: 20 20 20 69 66 20 28 6f 44 61 74 61 73 65 74 29     if (oDataset)
1c70: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1c80: 20 20 20 4f 62 6a 65 63 74 2e 61 73 73 69 67 6e     Object.assign
1c90: 28 78 4e 6f 64 65 2e 64 61 74 61 73 65 74 2c 20  (xNode.dataset, 
1ca0: 6f 44 61 74 61 73 65 74 29 3b 0a 20 20 20 20 20  oDataset);.     
1cb0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1cc0: 20 20 20 20 20 72 65 74 75 72 6e 20 78 4e 6f 64       return xNod
1cd0: 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
1ce0: 20 20 20 20 20 63 61 74 63 68 20 28 65 29 20 7b       catch (e) {
1cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f  .            sho
1d00: 77 45 72 72 6f 72 28 65 29 3b 0a 20 20 20 20 20  wError(e);.     
1d10: 20 20 20 7d 0a 20 20 20 20 7d 2c 0a 0a 20 20 20     }.    },..   
1d20: 20 63 72 65 61 74 65 53 74 79 6c 65 3a 20 66 75   createStyle: fu
1d30: 6e 63 74 69 6f 6e 20 28 73 4c 69 6e 6b 43 73 73  nction (sLinkCss
1d40: 2c 20 73 4c 69 6e 6b 49 64 3d 6e 75 6c 6c 2c 20  , sLinkId=null, 
1d50: 78 4e 6f 64 65 54 6f 41 70 70 65 6e 64 54 6f 3d  xNodeToAppendTo=
1d60: 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20  null) {.        
1d70: 74 72 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20  try {.          
1d80: 20 20 6c 65 74 20 78 4e 6f 64 65 20 3d 20 64 6f    let xNode = do
1d90: 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 45 6c 65  cument.createEle
1da0: 6d 65 6e 74 28 22 6c 69 6e 6b 22 29 3b 0a 20 20  ment("link");.  
1db0: 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74            Object
1dc0: 2e 61 73 73 69 67 6e 28 78 4e 6f 64 65 2c 20 7b  .assign(xNode, {
1dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1de0: 20 72 65 6c 3a 20 22 73 74 79 6c 65 73 68 65 65   rel: "styleshee
1df0: 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t",.            
1e00: 20 20 20 20 74 79 70 65 3a 20 22 74 65 78 74 2f      type: "text/
1e10: 63 73 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20  css",.          
1e20: 20 20 20 20 20 20 6d 65 64 69 61 3a 20 22 61 6c        media: "al
1e30: 6c 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  l",.            
1e40: 20 20 20 20 68 72 65 66 3a 20 74 68 69 73 2e 73      href: this.s
1e50: 45 78 74 65 6e 73 69 6f 6e 55 72 6c 20 2b 20 73  ExtensionUrl + s
1e60: 4c 69 6e 6b 43 73 73 0a 20 20 20 20 20 20 20 20  LinkCss.        
1e70: 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20      });.        
1e80: 20 20 20 20 69 66 20 28 73 4c 69 6e 6b 49 64 29      if (sLinkId)
1e90: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1ea0: 20 20 20 4f 62 6a 65 63 74 2e 61 73 73 69 67 6e     Object.assign
1eb0: 28 78 4e 6f 64 65 2c 20 7b 69 64 3a 20 73 4c 69  (xNode, {id: sLi
1ec0: 6e 6b 49 64 7d 29 3b 0a 20 20 20 20 20 20 20 20  nkId});.        
1ed0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1ee0: 20 20 69 66 20 28 78 4e 6f 64 65 54 6f 41 70 70    if (xNodeToApp
1ef0: 65 6e 64 54 6f 29 20 7b 0a 20 20 20 20 20 20 20  endTo) {.       
1f00: 20 20 20 20 20 20 20 20 20 78 4e 6f 64 65 54 6f           xNodeTo
1f10: 41 70 70 65 6e 64 54 6f 2e 61 70 70 65 6e 64 43  AppendTo.appendC
1f20: 68 69 6c 64 28 78 4e 6f 64 65 29 3b 0a 20 20 20  hild(xNode);.   
1f30: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1f40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 78 4e         return xN
1f50: 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ode;.        }. 
1f60: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 65 29         catch (e)
1f70: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
1f80: 68 6f 77 45 72 72 6f 72 28 65 29 3b 0a 20 20 20  howError(e);.   
1f90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 7d 3b 0a       }.    }.};.
1fa0: 0a 0a 2f 2a 0a 20 20 20 20 43 6f 6e 6e 65 78 69  ../*.    Connexi
1fb0: 6f 6e 20 74 6f 20 74 68 65 20 62 61 63 6b 67 72  on to the backgr
1fc0: 6f 75 6e 64 0a 2a 2f 0a 6c 65 74 20 78 47 72 61  ound.*/.let xGra
1fd0: 6d 6d 61 6c 65 63 74 65 50 6f 72 74 20 3d 20 62  mmalectePort = b
1fe0: 72 6f 77 73 65 72 2e 72 75 6e 74 69 6d 65 2e 63  rowser.runtime.c
1ff0: 6f 6e 6e 65 63 74 28 7b 6e 61 6d 65 3a 20 22 63  onnect({name: "c
2000: 6f 6e 74 65 6e 74 2d 73 63 72 69 70 74 20 70 6f  ontent-script po
2010: 72 74 22 7d 29 3b 0a 0a 78 47 72 61 6d 6d 61 6c  rt"});..xGrammal
2020: 65 63 74 65 50 6f 72 74 2e 6f 6e 4d 65 73 73 61  ectePort.onMessa
2030: 67 65 2e 61 64 64 4c 69 73 74 65 6e 65 72 28 66  ge.addListener(f
2040: 75 6e 63 74 69 6f 6e 20 28 6f 4d 65 73 73 61 67  unction (oMessag
2050: 65 29 20 7b 0a 20 20 20 20 6c 65 74 20 7b 73 41  e) {.    let {sA
2060: 63 74 69 6f 6e 44 6f 6e 65 2c 20 72 65 73 75 6c  ctionDone, resul
2070: 74 2c 20 64 49 6e 66 6f 2c 20 62 45 6e 64 2c 20  t, dInfo, bEnd, 
2080: 62 45 72 72 6f 72 7d 20 3d 20 6f 4d 65 73 73 61  bError} = oMessa
2090: 67 65 3b 0a 20 20 20 20 73 77 69 74 63 68 20 28  ge;.    switch (
20a0: 73 41 63 74 69 6f 6e 44 6f 6e 65 29 20 7b 0a 20  sActionDone) {. 
20b0: 20 20 20 20 20 20 20 63 61 73 65 20 22 69 6e 69         case "ini
20c0: 74 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  t":.            
20d0: 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 73 45 78  oGrammalecte.sEx
20e0: 74 65 6e 73 69 6f 6e 55 72 6c 20 3d 20 6f 4d 65  tensionUrl = oMe
20f0: 73 73 61 67 65 2e 73 55 72 6c 3b 0a 20 20 20 20  ssage.sUrl;.    
2100: 20 20 20 20 20 20 20 20 2f 2f 20 53 74 61 72 74          // Start
2110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 47 72  .            oGr
2120: 61 6d 6d 61 6c 65 63 74 65 2e 6c 69 73 74 65 6e  ammalecte.listen
2130: 52 69 67 68 74 43 6c 69 63 6b 28 29 3b 0a 20 20  RightClick();.  
2140: 20 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d            oGramm
2150: 61 6c 65 63 74 65 2e 63 72 65 61 74 65 4d 65 6e  alecte.createMen
2160: 75 73 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  us();.          
2170: 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f    oGrammalecte.o
2180: 62 73 65 72 76 65 50 61 67 65 28 29 3b 0a 20 20  bservePage();.  
2190: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
21a0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 70  .        case "p
21b0: 61 72 73 65 41 6e 64 53 70 65 6c 6c 63 68 65 63  arseAndSpellchec
21c0: 6b 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  k":.            
21d0: 69 66 20 28 21 62 45 6e 64 29 20 7b 0a 20 20 20  if (!bEnd) {.   
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 47 72               oGr
21f0: 61 6d 6d 61 6c 65 63 74 65 2e 6f 47 43 50 61 6e  ammalecte.oGCPan
2200: 65 6c 2e 61 64 64 50 61 72 61 67 72 61 70 68 52  el.addParagraphR
2210: 65 73 75 6c 74 28 72 65 73 75 6c 74 29 3b 0a 20  esult(result);. 
2220: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
2230: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
2240: 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65      oGrammalecte
2250: 2e 6f 47 43 50 61 6e 65 6c 2e 73 74 6f 70 57 61  .oGCPanel.stopWa
2260: 69 74 49 63 6f 6e 28 29 3b 0a 20 20 20 20 20 20  itIcon();.      
2270: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2280: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2290: 20 20 20 63 61 73 65 20 22 70 61 72 73 65 41 6e     case "parseAn
22a0: 64 53 70 65 6c 6c 63 68 65 63 6b 31 22 3a 0a 20  dSpellcheck1":. 
22b0: 20 20 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d             oGram
22c0: 6d 61 6c 65 63 74 65 2e 6f 47 43 50 61 6e 65 6c  malecte.oGCPanel
22d0: 2e 72 65 66 72 65 73 68 50 61 72 61 67 72 61 70  .refreshParagrap
22e0: 68 28 64 49 6e 66 6f 2e 73 50 61 72 61 67 72 61  h(dInfo.sParagra
22f0: 70 68 49 64 2c 20 72 65 73 75 6c 74 29 3b 0a 20  phId, result);. 
2300: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
2310: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22  ;.        case "
2320: 67 65 74 4c 69 73 74 4f 66 54 6f 6b 65 6e 73 22  getListOfTokens"
2330: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  :.            if
2340: 20 28 21 62 45 6e 64 29 20 7b 0a 20 20 20 20 20   (!bEnd) {.     
2350: 20 20 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d             oGram
2360: 6d 61 6c 65 63 74 65 2e 6f 4c 78 67 50 61 6e 65  malecte.oLxgPane
2370: 6c 2e 61 64 64 4c 69 73 74 4f 66 54 6f 6b 65 6e  l.addListOfToken
2380: 73 28 72 65 73 75 6c 74 29 3b 0a 20 20 20 20 20  s(result);.     
2390: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b0: 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f 4c 78  oGrammalecte.oLx
23c0: 67 50 61 6e 65 6c 2e 73 74 6f 70 57 61 69 74 49  gPanel.stopWaitI
23d0: 63 6f 6e 28 29 3b 0a 20 20 20 20 20 20 20 20 20  con();.         
23e0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
23f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
2400: 63 61 73 65 20 22 67 65 74 53 70 65 6c 6c 53 75  case "getSpellSu
2410: 67 67 65 73 74 69 6f 6e 73 22 3a 0a 20 20 20 20  ggestions":.    
2420: 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c          oGrammal
2430: 65 63 74 65 2e 6f 47 43 50 61 6e 65 6c 2e 6f 54  ecte.oGCPanel.oT
2440: 6f 6f 6c 74 69 70 2e 73 65 74 53 70 65 6c 6c 53  ooltip.setSpellS
2450: 75 67 67 65 73 74 69 6f 6e 73 46 6f 72 28 72 65  uggestionsFor(re
2460: 73 75 6c 74 2e 73 57 6f 72 64 2c 20 72 65 73 75  sult.sWord, resu
2470: 6c 74 2e 61 53 75 67 67 2c 20 72 65 73 75 6c 74  lt.aSugg, result
2480: 2e 69 53 75 67 67 42 6c 6f 63 6b 2c 20 64 49 6e  .iSuggBlock, dIn
2490: 66 6f 2e 73 45 72 72 6f 72 49 64 29 3b 0a 20 20  fo.sErrorId);.  
24a0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
24b0: 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20 20 20 20  .        /*.    
24c0: 20 20 20 20 20 20 20 20 43 6f 6d 6d 61 6e 64 73          Commands
24d0: 20 72 65 63 65 69 76 65 64 20 66 72 6f 6d 20 74   received from t
24e0: 68 65 20 63 6f 6e 74 65 78 74 20 6d 65 6e 75 0a  he context menu.
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 28 43 6f 6e              (Con
2500: 74 65 78 74 20 6d 65 6e 75 20 61 72 65 20 69 6e  text menu are in
2510: 69 74 69 61 6c 69 7a 65 64 20 69 6e 20 62 61 63  itialized in bac
2520: 6b 67 72 6f 75 6e 64 29 0a 20 20 20 20 20 20 20  kground).       
2530: 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2f 20 47   */.        // G
2540: 72 61 6d 6d 61 72 20 63 68 65 63 6b 65 72 20 63  rammar checker c
2550: 6f 6d 6d 61 6e 64 73 0a 20 20 20 20 20 20 20 20  ommands.        
2560: 63 61 73 65 20 22 72 69 67 68 74 43 6c 69 63 6b  case "rightClick
2570: 47 43 45 64 69 74 61 62 6c 65 4e 6f 64 65 22 3a  GCEditableNode":
2580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2590: 28 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 78 52  (oGrammalecte.xR
25a0: 69 67 68 74 43 6c 69 63 6b 65 64 4e 6f 64 65 20  ightClickedNode 
25b0: 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20  !== null) {.    
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 73              pars
25d0: 65 41 6e 64 53 70 65 6c 6c 63 68 65 63 6b 45 64  eAndSpellcheckEd
25e0: 69 74 61 62 6c 65 4e 6f 64 65 28 6f 47 72 61 6d  itableNode(oGram
25f0: 6d 61 6c 65 63 74 65 2e 78 52 69 67 68 74 43 6c  malecte.xRightCl
2600: 69 63 6b 65 64 4e 6f 64 65 29 3b 0a 20 20 20 20  ickedNode);.    
2610: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
2620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2630: 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 73 68   oGrammalecte.sh
2640: 6f 77 4d 65 73 73 61 67 65 28 22 45 72 72 65 75  owMessage("Erreu
2650: 72 2e 20 4c 65 20 6e 6f 64 65 20 73 75 72 20 6c  r. Le node sur l
2660: 65 71 75 65 6c 20 76 6f 75 73 20 61 76 65 7a 20  equel vous avez 
2670: 63 6c 69 71 75 c3 a9 20 6e e2 80 99 61 20 70 61  cliqu.. n...a pa
2680: 73 20 70 75 20 c3 aa 74 72 65 20 69 64 65 6e 74  s pu ..tre ident
2690: 69 66 69 c3 a9 2e 20 53 c3 a9 6c 65 63 74 69 6f  ifi... S..lectio
26a0: 6e 6e 65 7a 20 6c 65 20 74 65 78 74 65 20 c3 a0  nnez le texte ..
26b0: 20 63 6f 72 72 69 67 65 72 20 65 74 20 72 65 6c   corriger et rel
26c0: 61 6e 63 65 7a 20 6c 65 20 63 6f 72 72 65 63 74  ancez le correct
26d0: 65 75 72 20 76 69 61 20 6c 65 20 6d 65 6e 75 20  eur via le menu 
26e0: 63 6f 6e 74 65 78 74 75 65 6c 2e 22 29 3b 0a 20  contextuel.");. 
26f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
2700: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2710: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 72 69          case "ri
2720: 67 68 74 43 6c 69 63 6b 47 43 50 61 67 65 22 3a  ghtClickGCPage":
2730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72  .            par
2740: 73 65 41 6e 64 53 70 65 6c 6c 63 68 65 63 6b 50  seAndSpellcheckP
2750: 61 67 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20  age();.         
2760: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2770: 20 20 63 61 73 65 20 22 72 69 67 68 74 43 6c 69    case "rightCli
2780: 63 6b 47 43 53 65 6c 65 63 74 65 64 54 65 78 74  ckGCSelectedText
2790: 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ":.            o
27a0: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 73 74 61 72  Grammalecte.star
27b0: 74 47 43 50 61 6e 65 6c 28 29 3b 0a 20 20 20 20  tGCPanel();.    
27c0: 20 20 20 20 20 20 20 20 2f 2f 20 73 65 6c 65 63          // selec
27d0: 74 65 64 20 74 65 78 74 20 69 73 20 73 65 6e 74  ted text is sent
27e0: 20 74 6f 20 74 68 65 20 47 43 20 77 6f 72 6b 65   to the GC worke
27f0: 72 20 69 6e 20 74 68 65 20 62 61 63 6b 67 72 6f  r in the backgro
2800: 75 6e 64 20 73 63 72 69 70 74 2e 0a 20 20 20 20  und script..    
2810: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2820: 20 20 20 20 20 20 20 2f 2f 20 4c 65 78 69 63 6f         // Lexico
2830: 67 72 61 70 68 65 72 20 63 6f 6d 6d 61 6e 64 73  grapher commands
2840: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 72  .        case "r
2850: 69 67 68 74 43 6c 69 63 6b 4c 78 67 45 64 69 74  ightClickLxgEdit
2860: 61 62 6c 65 4e 6f 64 65 22 3a 0a 20 20 20 20 20  ableNode":.     
2870: 20 20 20 20 20 20 20 69 66 20 28 6f 47 72 61 6d         if (oGram
2880: 6d 61 6c 65 63 74 65 2e 78 52 69 67 68 74 43 6c  malecte.xRightCl
2890: 69 63 6b 65 64 4e 6f 64 65 20 21 3d 3d 20 6e 75  ickedNode !== nu
28a0: 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ll) {.          
28b0: 20 20 20 20 20 20 6c 65 78 69 63 6f 67 72 61 70        lexicograp
28c0: 68 65 72 45 64 69 74 61 62 6c 65 4e 6f 64 65 28  herEditableNode(
28d0: 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 78 52 69  oGrammalecte.xRi
28e0: 67 68 74 43 6c 69 63 6b 65 64 4e 6f 64 65 29 3b  ghtClickedNode);
28f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
2900: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
2910: 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63        oGrammalec
2920: 74 65 2e 73 68 6f 77 4d 65 73 73 61 67 65 28 22  te.showMessage("
2930: 45 72 72 65 75 72 2e 20 4c 65 20 6e 6f 64 65 20  Erreur. Le node 
2940: 73 75 72 20 6c 65 71 75 65 6c 20 76 6f 75 73 20  sur lequel vous 
2950: 61 76 65 7a 20 63 6c 69 71 75 c3 a9 20 6e e2 80  avez cliqu.. n..
2960: 99 61 20 70 61 73 20 70 75 20 c3 aa 74 72 65 20  .a pas pu ..tre 
2970: 69 64 65 6e 74 69 66 69 c3 a9 2e 20 53 c3 a9 6c  identifi... S..l
2980: 65 63 74 69 6f 6e 6e 65 7a 20 6c 65 20 74 65 78  ectionnez le tex
2990: 74 65 20 c3 a0 20 61 6e 61 6c 79 73 65 72 20 65  te .. analyser e
29a0: 74 20 72 65 6c 61 6e 63 65 7a 20 6c 65 20 6c 65  t relancez le le
29b0: 78 69 63 6f 67 72 61 70 68 65 20 76 69 61 20 6c  xicographe via l
29c0: 65 20 6d 65 6e 75 20 63 6f 6e 74 65 78 74 75 65  e menu contextue
29d0: 6c 2e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  l.");.          
29e0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
29f0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
2a00: 61 73 65 20 22 72 69 67 68 74 43 6c 69 63 6b 4c  ase "rightClickL
2a10: 78 67 50 61 67 65 22 3a 0a 20 20 20 20 20 20 20  xgPage":.       
2a20: 20 20 20 20 20 6c 65 78 69 63 6f 67 72 61 70 68       lexicograph
2a30: 65 72 50 61 67 65 28 29 3b 0a 20 20 20 20 20 20  erPage();.      
2a40: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2a50: 20 20 20 20 20 63 61 73 65 20 22 72 69 67 68 74       case "right
2a60: 43 6c 69 63 6b 4c 78 67 53 65 6c 65 63 74 65 64  ClickLxgSelected
2a70: 54 65 78 74 22 3a 0a 20 20 20 20 20 20 20 20 20  Text":.         
2a80: 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e     oGrammalecte.
2a90: 73 74 61 72 74 4c 78 67 50 61 6e 65 6c 28 29 3b  startLxgPanel();
2aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
2ab0: 73 65 6c 65 63 74 65 64 20 74 65 78 74 20 69 73  selected text is
2ac0: 20 73 65 6e 74 20 74 6f 20 74 68 65 20 47 43 20   sent to the GC 
2ad0: 77 6f 72 6b 65 72 20 69 6e 20 74 68 65 20 62 61  worker in the ba
2ae0: 63 6b 67 72 6f 75 6e 64 20 73 63 72 69 70 74 2e  ckground script.
2af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
2b00: 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20 54  ak;.        // T
2b10: 65 78 74 20 66 6f 72 6d 61 74 74 65 72 20 63 6f  ext formatter co
2b20: 6d 6d 61 6e 64 0a 20 20 20 20 20 20 20 20 63 61  mmand.        ca
2b30: 73 65 20 22 72 69 67 68 74 43 6c 69 63 6b 54 46  se "rightClickTF
2b40: 45 64 69 74 61 62 6c 65 4e 6f 64 65 22 3a 0a 20  EditableNode":. 
2b50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f             if (o
2b60: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 78 52 69 67  Grammalecte.xRig
2b70: 68 74 43 6c 69 63 6b 65 64 4e 6f 64 65 20 21 3d  htClickedNode !=
2b80: 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20  = null) {.      
2b90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 47            if (oG
2ba0: 72 61 6d 6d 61 6c 65 63 74 65 2e 78 52 69 67 68  rammalecte.xRigh
2bb0: 74 43 6c 69 63 6b 65 64 4e 6f 64 65 2e 74 61 67  tClickedNode.tag
2bc0: 4e 61 6d 65 20 3d 3d 20 22 54 45 58 54 41 52 45  Name == "TEXTARE
2bd0: 41 22 20 7c 7c 20 6f 47 72 61 6d 6d 61 6c 65 63  A" || oGrammalec
2be0: 74 65 2e 78 52 69 67 68 74 43 6c 69 63 6b 65 64  te.xRightClicked
2bf0: 4e 6f 64 65 2e 74 61 67 4e 61 6d 65 20 3d 3d 20  Node.tagName == 
2c00: 22 49 4e 50 55 54 22 29 20 7b 0a 20 20 20 20 20  "INPUT") {.     
2c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
2c20: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 73 74 61 72  Grammalecte.star
2c30: 74 46 54 50 61 6e 65 6c 28 6f 47 72 61 6d 6d 61  tFTPanel(oGramma
2c40: 6c 65 63 74 65 2e 78 52 69 67 68 74 43 6c 69 63  lecte.xRightClic
2c50: 6b 65 64 4e 6f 64 65 29 3b 0a 20 20 20 20 20 20  kedNode);.      
2c60: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
2c70: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2c80: 20 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65         oGrammale
2c90: 63 74 65 2e 73 68 6f 77 4d 65 73 73 61 67 65 28  cte.showMessage(
2ca0: 22 43 65 74 74 65 20 7a 6f 6e 65 20 64 65 20 74  "Cette zone de t
2cb0: 65 78 74 65 20 6e e2 80 99 65 73 74 20 70 61 73  exte n...est pas
2cc0: 20 72 c3 a9 65 6c 6c 65 6d 65 6e 74 20 75 6e 20   r..ellement un 
2cd0: 63 68 61 6d 70 20 64 65 20 66 6f 72 6d 75 6c 61  champ de formula
2ce0: 69 72 65 2c 20 6d 61 69 73 20 75 6e 20 6e 6f 64  ire, mais un nod
2cf0: 65 20 48 54 4d 4c 20 c3 a9 64 69 74 61 62 6c 65  e HTML ..ditable
2d00: 2e 20 4c 65 20 66 6f 72 6d 61 74 65 75 72 20 64  . Le formateur d
2d10: 65 20 74 65 78 74 65 20 6e e2 80 99 65 73 74 20  e texte n...est 
2d20: 70 61 73 20 64 69 73 70 6f 6e 69 62 6c 65 20 70  pas disponible p
2d30: 6f 75 72 20 63 65 20 74 79 70 65 20 64 65 20 63  our ce type de c
2d40: 68 61 6d 70 20 64 65 20 73 61 69 73 69 65 2e 22  hamp de saisie."
2d50: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
2d60: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
2d70: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
2d80: 20 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d            oGramm
2d90: 61 6c 65 63 74 65 2e 73 68 6f 77 4d 65 73 73 61  alecte.showMessa
2da0: 67 65 28 22 45 72 72 65 75 72 2e 20 4c 65 20 6e  ge("Erreur. Le n
2db0: 6f 64 65 20 73 75 72 20 6c 65 71 75 65 6c 20 76  ode sur lequel v
2dc0: 6f 75 73 20 61 76 65 7a 20 63 6c 69 71 75 c3 a9  ous avez cliqu..
2dd0: 20 6e e2 80 99 61 20 70 61 73 20 70 75 20 c3 aa   n...a pas pu ..
2de0: 74 72 65 20 69 64 65 6e 74 69 66 69 c3 a9 2e 22  tre identifi..."
2df0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
2e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
2e10: 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20 72  ak;.        // r
2e20: 65 73 63 61 6e 20 70 61 67 65 20 63 6f 6d 6d 61  escan page comma
2e30: 6e 64 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  nd.        case 
2e40: 22 72 65 73 63 61 6e 50 61 67 65 22 3a 0a 20 20  "rescanPage":.  
2e50: 20 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d 6d            oGramm
2e60: 61 6c 65 63 74 65 2e 72 65 73 63 61 6e 50 61 67  alecte.rescanPag
2e70: 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  e();.           
2e80: 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 7d 0a 7d   break;..    }.}
2e90: 29 3b 0a 0a 0a 2f 2a 0a 20 20 20 20 4f 74 68 65  );.../*.    Othe
2ea0: 72 20 6d 65 73 73 61 67 65 73 20 66 72 6f 6d 20  r messages from 
2eb0: 62 61 63 6b 67 72 6f 75 6e 64 0a 2a 2f 0a 62 72  background.*/.br
2ec0: 6f 77 73 65 72 2e 72 75 6e 74 69 6d 65 2e 6f 6e  owser.runtime.on
2ed0: 4d 65 73 73 61 67 65 2e 61 64 64 4c 69 73 74 65  Message.addListe
2ee0: 6e 65 72 28 66 75 6e 63 74 69 6f 6e 20 28 6f 4d  ner(function (oM
2ef0: 65 73 73 61 67 65 29 20 7b 0a 20 20 20 20 6c 65  essage) {.    le
2f00: 74 20 7b 73 41 63 74 69 6f 6e 52 65 71 75 65 73  t {sActionReques
2f10: 74 7d 20 3d 20 6f 4d 65 73 73 61 67 65 3b 0a 20  t} = oMessage;. 
2f20: 20 20 20 6c 65 74 20 78 41 63 74 69 76 65 4e 6f     let xActiveNo
2f30: 64 65 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 61 63  de = document.ac
2f40: 74 69 76 65 45 6c 65 6d 65 6e 74 3b 0a 20 20 20  tiveElement;.   
2f50: 20 73 77 69 74 63 68 20 28 73 41 63 74 69 6f 6e   switch (sAction
2f60: 52 65 71 75 65 73 74 29 20 7b 0a 20 20 20 20 20  Request) {.     
2f70: 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 20 20     /*.          
2f80: 20 20 43 6f 6d 6d 61 6e 64 73 20 72 65 63 65 69    Commands recei
2f90: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 6b 65 79  ved from the key
2fa0: 62 6f 61 72 64 20 28 73 68 6f 72 74 63 75 74 73  board (shortcuts
2fb0: 29 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ).        */.   
2fc0: 20 20 20 20 20 63 61 73 65 20 22 73 68 6f 72 74       case "short
2fd0: 63 75 74 4c 65 78 69 63 6f 67 72 61 70 68 65 72  cutLexicographer
2fe0: 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ":.            i
2ff0: 66 20 28 78 41 63 74 69 76 65 4e 6f 64 65 20 26  f (xActiveNode &
3000: 26 20 28 78 41 63 74 69 76 65 4e 6f 64 65 2e 74  & (xActiveNode.t
3010: 61 67 4e 61 6d 65 20 3d 3d 20 22 54 45 58 54 41  agName == "TEXTA
3020: 52 45 41 22 20 7c 7c 20 78 41 63 74 69 76 65 4e  REA" || xActiveN
3030: 6f 64 65 2e 74 61 67 4e 61 6d 65 20 3d 3d 20 22  ode.tagName == "
3040: 49 4e 50 55 54 22 29 29 20 7b 0a 20 20 20 20 20  INPUT")) {.     
3050: 20 20 20 20 20 20 20 20 20 20 20 6c 65 78 69 63             lexic
3060: 6f 67 72 61 70 68 65 72 45 64 69 74 61 62 6c 65  ographerEditable
3070: 4e 6f 64 65 28 78 41 63 74 69 76 65 4e 6f 64 65  Node(xActiveNode
3080: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
3090: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
30a0: 20 20 20 20 20 20 20 20 6c 65 78 69 63 6f 67 72          lexicogr
30b0: 61 70 68 65 72 50 61 67 65 28 29 3b 0a 20 20 20  apherPage();.   
30c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
30d0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
30e0: 20 20 20 20 20 20 63 61 73 65 20 22 73 68 6f 72        case "shor
30f0: 74 63 75 74 54 65 78 74 46 6f 72 6d 61 74 74 65  tcutTextFormatte
3100: 72 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  r":.            
3110: 69 66 20 28 78 41 63 74 69 76 65 4e 6f 64 65 20  if (xActiveNode 
3120: 26 26 20 28 78 41 63 74 69 76 65 4e 6f 64 65 2e  && (xActiveNode.
3130: 74 61 67 4e 61 6d 65 20 3d 3d 20 22 54 45 58 54  tagName == "TEXT
3140: 41 52 45 41 22 20 7c 7c 20 78 41 63 74 69 76 65  AREA" || xActive
3150: 4e 6f 64 65 2e 74 61 67 4e 61 6d 65 20 3d 3d 20  Node.tagName == 
3160: 22 49 4e 50 55 54 22 29 29 20 7b 0a 20 20 20 20  "INPUT")) {.    
3170: 20 20 20 20 20 20 20 20 20 20 20 20 6f 47 72 61              oGra
3180: 6d 6d 61 6c 65 63 74 65 2e 73 74 61 72 74 46 54  mmalecte.startFT
3190: 50 61 6e 65 6c 28 78 41 63 74 69 76 65 4e 6f 64  Panel(xActiveNod
31a0: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e);.            
31b0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  }.            br
31c0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
31d0: 65 20 22 73 68 6f 72 74 63 75 74 47 72 61 6d 6d  e "shortcutGramm
31e0: 61 72 43 68 65 63 6b 65 72 22 3a 0a 20 20 20 20  arChecker":.    
31f0: 20 20 20 20 20 20 20 20 69 66 20 28 78 41 63 74          if (xAct
3200: 69 76 65 4e 6f 64 65 20 26 26 20 28 78 41 63 74  iveNode && (xAct
3210: 69 76 65 4e 6f 64 65 2e 74 61 67 4e 61 6d 65 20  iveNode.tagName 
3220: 3d 3d 20 22 54 45 58 54 41 52 45 41 22 20 7c 7c  == "TEXTAREA" ||
3230: 20 78 41 63 74 69 76 65 4e 6f 64 65 2e 74 61 67   xActiveNode.tag
3240: 4e 61 6d 65 20 3d 3d 20 22 49 4e 50 55 54 22 29  Name == "INPUT")
3250: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
3260: 20 20 20 20 70 61 72 73 65 41 6e 64 53 70 65 6c      parseAndSpel
3270: 6c 63 68 65 63 6b 45 64 69 74 61 62 6c 65 4e 6f  lcheckEditableNo
3280: 64 65 28 78 41 63 74 69 76 65 4e 6f 64 65 29 3b  de(xActiveNode);
3290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
32a0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
32b0: 20 20 20 20 20 20 70 61 72 73 65 41 6e 64 53 70        parseAndSp
32c0: 65 6c 6c 63 68 65 63 6b 50 61 67 65 28 29 3b 0a  ellcheckPage();.
32d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
32e0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
32f0: 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74  .        default
3300: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  :.            co
3310: 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 43 6f 6e 74  nsole.log("[Cont
3320: 65 6e 74 20 73 63 72 69 70 74 5d 20 55 6e 6b 6e  ent script] Unkn
3330: 6f 77 6e 20 63 6f 6d 6d 61 6e 64 3a 20 22 20 2b  own command: " +
3340: 20 73 41 63 74 69 6f 6e 44 6f 6e 65 29 3b 0a 20   sActionDone);. 
3350: 20 20 20 7d 0a 7d 29 3b 0a 0a 0a 2f 2a 0a 20 20     }.});.../*.  
3360: 20 20 41 63 74 69 6f 6e 73 0a 2a 2f 0a 0a 66 75    Actions.*/..fu
3370: 6e 63 74 69 6f 6e 20 70 61 72 73 65 41 6e 64 53  nction parseAndS
3380: 70 65 6c 6c 63 68 65 63 6b 50 61 67 65 20 28 29  pellcheckPage ()
3390: 20 7b 0a 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65   {.    oGrammale
33a0: 63 74 65 2e 73 74 61 72 74 47 43 50 61 6e 65 6c  cte.startGCPanel
33b0: 28 29 3b 0a 20 20 20 20 78 47 72 61 6d 6d 61 6c  ();.    xGrammal
33c0: 65 63 74 65 50 6f 72 74 2e 70 6f 73 74 4d 65 73  ectePort.postMes
33d0: 73 61 67 65 28 7b 0a 20 20 20 20 20 20 20 20 73  sage({.        s
33e0: 43 6f 6d 6d 61 6e 64 3a 20 22 70 61 72 73 65 41  Command: "parseA
33f0: 6e 64 53 70 65 6c 6c 63 68 65 63 6b 22 2c 0a 20  ndSpellcheck",. 
3400: 20 20 20 20 20 20 20 64 50 61 72 61 6d 3a 20 7b         dParam: {
3410: 73 54 65 78 74 3a 20 6f 47 72 61 6d 6d 61 6c 65  sText: oGrammale
3420: 63 74 65 2e 67 65 74 50 61 67 65 54 65 78 74 28  cte.getPageText(
3430: 29 2c 20 73 43 6f 75 6e 74 72 79 3a 20 22 46 52  ), sCountry: "FR
3440: 22 2c 20 62 44 65 62 75 67 3a 20 66 61 6c 73 65  ", bDebug: false
3450: 2c 20 62 43 6f 6e 74 65 78 74 3a 20 66 61 6c 73  , bContext: fals
3460: 65 7d 2c 0a 20 20 20 20 20 20 20 20 64 49 6e 66  e},.        dInf
3470: 6f 3a 20 7b 7d 0a 20 20 20 20 7d 29 3b 0a 7d 0a  o: {}.    });.}.
3480: 0a 66 75 6e 63 74 69 6f 6e 20 70 61 72 73 65 41  .function parseA
3490: 6e 64 53 70 65 6c 6c 63 68 65 63 6b 45 64 69 74  ndSpellcheckEdit
34a0: 61 62 6c 65 4e 6f 64 65 20 28 78 4e 6f 64 65 29  ableNode (xNode)
34b0: 20 7b 0a 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65   {.    oGrammale
34c0: 63 74 65 2e 73 74 61 72 74 47 43 50 61 6e 65 6c  cte.startGCPanel
34d0: 28 78 4e 6f 64 65 29 3b 0a 20 20 20 20 6c 65 74  (xNode);.    let
34e0: 20 73 54 65 78 74 20 3d 20 28 78 4e 6f 64 65 2e   sText = (xNode.
34f0: 74 61 67 4e 61 6d 65 20 3d 3d 20 22 54 45 58 54  tagName == "TEXT
3500: 41 52 45 41 22 20 7c 7c 20 78 4e 6f 64 65 2e 74  AREA" || xNode.t
3510: 61 67 4e 61 6d 65 20 3d 3d 20 22 49 4e 50 55 54  agName == "INPUT
3520: 22 29 20 3f 20 78 4e 6f 64 65 2e 76 61 6c 75 65  ") ? xNode.value
3530: 20 3a 20 78 4e 6f 64 65 2e 69 6e 6e 65 72 54 65   : xNode.innerTe
3540: 78 74 3b 0a 20 20 20 20 78 47 72 61 6d 6d 61 6c  xt;.    xGrammal
3550: 65 63 74 65 50 6f 72 74 2e 70 6f 73 74 4d 65 73  ectePort.postMes
3560: 73 61 67 65 28 7b 0a 20 20 20 20 20 20 20 20 73  sage({.        s
3570: 43 6f 6d 6d 61 6e 64 3a 20 22 70 61 72 73 65 41  Command: "parseA
3580: 6e 64 53 70 65 6c 6c 63 68 65 63 6b 22 2c 0a 20  ndSpellcheck",. 
3590: 20 20 20 20 20 20 20 64 50 61 72 61 6d 3a 20 7b         dParam: {
35a0: 73 54 65 78 74 3a 20 73 54 65 78 74 2c 20 73 43  sText: sText, sC
35b0: 6f 75 6e 74 72 79 3a 20 22 46 52 22 2c 20 62 44  ountry: "FR", bD
35c0: 65 62 75 67 3a 20 66 61 6c 73 65 2c 20 62 43 6f  ebug: false, bCo
35d0: 6e 74 65 78 74 3a 20 66 61 6c 73 65 7d 2c 0a 20  ntext: false},. 
35e0: 20 20 20 20 20 20 20 64 49 6e 66 6f 3a 20 7b 73         dInfo: {s
35f0: 54 65 78 74 41 72 65 61 49 64 3a 20 78 4e 6f 64  TextAreaId: xNod
3600: 65 2e 69 64 7d 0a 20 20 20 20 7d 29 3b 0a 7d 0a  e.id}.    });.}.
3610: 0a 66 75 6e 63 74 69 6f 6e 20 6c 65 78 69 63 6f  .function lexico
3620: 67 72 61 70 68 65 72 50 61 67 65 20 28 29 20 7b  grapherPage () {
3630: 0a 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74  .    oGrammalect
3640: 65 2e 73 74 61 72 74 4c 78 67 50 61 6e 65 6c 28  e.startLxgPanel(
3650: 29 3b 0a 20 20 20 20 78 47 72 61 6d 6d 61 6c 65  );.    xGrammale
3660: 63 74 65 50 6f 72 74 2e 70 6f 73 74 4d 65 73 73  ctePort.postMess
3670: 61 67 65 28 7b 0a 20 20 20 20 20 20 20 20 73 43  age({.        sC
3680: 6f 6d 6d 61 6e 64 3a 20 22 67 65 74 4c 69 73 74  ommand: "getList
3690: 4f 66 54 6f 6b 65 6e 73 22 2c 0a 20 20 20 20 20  OfTokens",.     
36a0: 20 20 20 64 50 61 72 61 6d 3a 20 7b 73 54 65 78     dParam: {sTex
36b0: 74 3a 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e  t: oGrammalecte.
36c0: 67 65 74 50 61 67 65 54 65 78 74 28 29 7d 2c 0a  getPageText()},.
36d0: 20 20 20 20 20 20 20 20 64 49 6e 66 6f 3a 20 7b          dInfo: {
36e0: 7d 0a 20 20 20 20 7d 29 3b 0a 7d 0a 0a 66 75 6e  }.    });.}..fun
36f0: 63 74 69 6f 6e 20 6c 65 78 69 63 6f 67 72 61 70  ction lexicograp
3700: 68 65 72 45 64 69 74 61 62 6c 65 4e 6f 64 65 20  herEditableNode 
3710: 28 78 4e 6f 64 65 29 20 7b 0a 20 20 20 20 6f 47  (xNode) {.    oG
3720: 72 61 6d 6d 61 6c 65 63 74 65 2e 73 74 61 72 74  rammalecte.start
3730: 4c 78 67 50 61 6e 65 6c 28 29 3b 0a 20 20 20 20  LxgPanel();.    
3740: 6c 65 74 20 73 54 65 78 74 20 3d 20 28 78 4e 6f  let sText = (xNo
3750: 64 65 2e 74 61 67 4e 61 6d 65 20 3d 3d 20 22 54  de.tagName == "T
3760: 45 58 54 41 52 45 41 22 20 7c 7c 20 78 4e 6f 64  EXTAREA" || xNod
3770: 65 2e 74 61 67 4e 61 6d 65 20 3d 3d 20 22 49 4e  e.tagName == "IN
3780: 50 55 54 22 29 20 3f 20 78 4e 6f 64 65 2e 76 61  PUT") ? xNode.va
3790: 6c 75 65 20 3a 20 78 4e 6f 64 65 2e 69 6e 6e 65  lue : xNode.inne
37a0: 72 54 65 78 74 3b 0a 20 20 20 20 78 47 72 61 6d  rText;.    xGram
37b0: 6d 61 6c 65 63 74 65 50 6f 72 74 2e 70 6f 73 74  malectePort.post
37c0: 4d 65 73 73 61 67 65 28 7b 0a 20 20 20 20 20 20  Message({.      
37d0: 20 20 73 43 6f 6d 6d 61 6e 64 3a 20 22 67 65 74    sCommand: "get
37e0: 4c 69 73 74 4f 66 54 6f 6b 65 6e 73 22 2c 0a 20  ListOfTokens",. 
37f0: 20 20 20 20 20 20 20 64 50 61 72 61 6d 3a 20 7b         dParam: {
3800: 73 54 65 78 74 3a 20 73 54 65 78 74 7d 2c 0a 20  sText: sText},. 
3810: 20 20 20 20 20 20 20 64 49 6e 66 6f 3a 20 7b 73         dInfo: {s
3820: 54 65 78 74 41 72 65 61 49 64 3a 20 78 4e 6f 64  TextAreaId: xNod
3830: 65 2e 69 64 7d 0a 20 20 20 20 7d 29 3b 0a 7d 0a  e.id}.    });.}.