Grammalecte  Hex Artifact Content

Artifact 0e7a0e2ea5295bb3bad5ca1f4b8472406feed114e24fcaa3a7e8ad9db10039ca:


0000: 2f 2f 20 4a 61 76 61 53 63 72 69 70 74 0a 0a 2f  // JavaScript../
0010: 2a 20 6a 73 68 69 6e 74 20 65 73 76 65 72 73 69  * jshint esversi
0020: 6f 6e 3a 36 2c 20 2d 57 30 39 37 20 2a 2f 0a 2f  on:6, -W097 */./
0030: 2a 20 6a 73 6c 69 6e 74 20 65 73 76 65 72 73 69  * jslint esversi
0040: 6f 6e 3a 36 20 2a 2f 0a 2f 2a 20 67 6c 6f 62 61  on:6 */./* globa
0050: 6c 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2c 20  l oGrammalecte, 
0060: 78 47 72 61 6d 6d 61 6c 65 63 74 65 50 6f 72 74  xGrammalectePort
0070: 2c 20 73 68 6f 77 45 72 72 6f 72 2c 20 77 69 6e  , showError, win
0080: 64 6f 77 2c 20 64 6f 63 75 6d 65 6e 74 20 2a 2f  dow, document */
0090: 0a 0a 22 75 73 65 20 73 74 72 69 63 74 22 3b 0a  .."use strict";.
00a0: 0a 0a 63 6c 61 73 73 20 47 72 61 6d 6d 61 6c 65  ..class Grammale
00b0: 63 74 65 4d 65 6e 75 20 7b 0a 0a 20 20 20 20 63  cteMenu {..    c
00c0: 6f 6e 73 74 72 75 63 74 6f 72 20 28 6e 4d 65 6e  onstructor (nMen
00d0: 75 2c 20 78 4e 6f 64 65 29 20 7b 0a 20 20 20 20  u, xNode) {.    
00e0: 20 20 20 20 74 68 69 73 2e 78 4e 6f 64 65 20 3d      this.xNode =
00f0: 20 78 4e 6f 64 65 3b 0a 20 20 20 20 20 20 20 20   xNode;.        
0100: 74 68 69 73 2e 73 4d 65 6e 75 49 64 20 3d 20 22  this.sMenuId = "
0110: 67 72 61 6d 6d 61 6c 65 63 74 65 5f 6d 65 6e 75  grammalecte_menu
0120: 22 20 2b 20 6e 4d 65 6e 75 3b 0a 20 20 20 20 20  " + nMenu;.     
0130: 20 20 20 74 68 69 73 2e 62 53 68 61 64 6f 77 20     this.bShadow 
0140: 3d 20 64 6f 63 75 6d 65 6e 74 2e 62 6f 64 79 2e  = document.body.
0150: 63 72 65 61 74 65 53 68 61 64 6f 77 52 6f 6f 74  createShadowRoot
0160: 20 7c 7c 20 64 6f 63 75 6d 65 6e 74 2e 62 6f 64   || document.bod
0170: 79 2e 61 74 74 61 63 68 53 68 61 64 6f 77 3b 0a  y.attachShadow;.
0180: 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 42 75          this.xBu
0190: 74 74 6f 6e 20 3d 20 6f 47 72 61 6d 6d 61 6c 65  tton = oGrammale
01a0: 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22  cte.createNode("
01b0: 64 69 76 22 2c 20 7b 63 6c 61 73 73 4e 61 6d 65  div", {className
01c0: 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 6d  : "grammalecte_m
01d0: 65 6e 75 5f 6d 61 69 6e 5f 62 75 74 74 6f 6e 22  enu_main_button"
01e0: 2c 20 74 65 78 74 43 6f 6e 74 65 6e 74 3a 20 22  , textContent: "
01f0: e2 80 af 22 7d 29 3b 0a 20 20 20 20 20 20 20 20  ..."});.        
0200: 74 68 69 73 2e 78 42 75 74 74 6f 6e 2e 6f 6e 63  this.xButton.onc
0210: 6c 69 63 6b 20 3d 20 28 29 20 3d 3e 20 7b 20 74  lick = () => { t
0220: 68 69 73 2e 73 77 69 74 63 68 4d 65 6e 75 28 29  his.switchMenu()
0230: 3b 20 7d 3b 0a 20 20 20 20 20 20 20 20 74 68 69  ; };.        thi
0240: 73 2e 78 42 75 74 74 6f 6e 2e 73 74 79 6c 65 2e  s.xButton.style.
0250: 7a 49 6e 64 65 78 20 3d 20 28 78 4e 6f 64 65 2e  zIndex = (xNode.
0260: 73 74 79 6c 65 2e 7a 49 6e 64 65 78 2e 73 65 61  style.zIndex.sea
0270: 72 63 68 28 2f 5e 5b 30 2d 39 5d 2b 24 2f 29 20  rch(/^[0-9]+$/) 
0280: 21 3d 3d 20 2d 31 29 20 3f 20 28 70 61 72 73 65  !== -1) ? (parse
0290: 49 6e 74 28 78 4e 6f 64 65 2e 73 74 79 6c 65 2e  Int(xNode.style.
02a0: 7a 49 6e 64 65 78 29 20 2b 20 31 29 2e 74 6f 53  zIndex) + 1).toS
02b0: 74 72 69 6e 67 28 29 20 3a 20 78 4e 6f 64 65 2e  tring() : xNode.
02c0: 73 74 79 6c 65 2e 7a 49 6e 64 65 78 3b 0a 20 20  style.zIndex;.  
02d0: 20 20 20 20 20 20 74 68 69 73 2e 78 4d 65 6e 75        this.xMenu
02e0: 20 3d 20 74 68 69 73 2e 5f 63 72 65 61 74 65 4d   = this._createM
02f0: 65 6e 75 28 29 3b 0a 0a 20 20 20 20 20 20 20 20  enu();..        
0300: 6c 65 74 20 78 53 74 79 6c 65 20 3d 20 77 69 6e  let xStyle = win
0310: 64 6f 77 2e 67 65 74 43 6f 6d 70 75 74 65 64 53  dow.getComputedS
0320: 74 79 6c 65 28 74 68 69 73 2e 78 4e 6f 64 65 29  tyle(this.xNode)
0330: 3b 0a 20 20 20 20 20 20 20 20 6c 65 74 20 6e 4d  ;.        let nM
0340: 61 72 67 69 6e 54 6f 70 20 3d 20 2d 31 20 2a 20  arginTop = -1 * 
0350: 28 38 20 2b 20 70 61 72 73 65 49 6e 74 28 78 53  (8 + parseInt(xS
0360: 74 79 6c 65 2e 6d 61 72 67 69 6e 42 6f 74 74 6f  tyle.marginBotto
0370: 6d 2e 72 65 70 6c 61 63 65 28 27 70 78 27 2c 20  m.replace('px', 
0380: 27 27 29 2c 20 31 30 29 29 3b 0a 0a 20 20 20 20  ''), 10));..    
0390: 20 20 20 20 6c 65 74 20 78 4e 6f 64 65 49 6e 73      let xNodeIns
03a0: 65 72 74 41 66 74 65 72 20 3d 20 74 68 69 73 2e  ertAfter = this.
03b0: 78 4e 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 69  xNode;.        i
03c0: 66 20 28 64 6f 63 75 6d 65 6e 74 2e 6c 6f 63 61  f (document.loca
03d0: 74 69 6f 6e 2e 68 6f 73 74 20 3d 3d 20 22 74 77  tion.host == "tw
03e0: 69 74 74 65 72 2e 63 6f 6d 22 20 26 26 20 74 68  itter.com" && th
03f0: 69 73 2e 78 4e 6f 64 65 2e 63 6c 61 73 73 4c 69  is.xNode.classLi
0400: 73 74 2e 63 6f 6e 74 61 69 6e 73 28 27 72 69 63  st.contains('ric
0410: 68 2d 65 64 69 74 6f 72 27 29 29 20 7b 0a 20 20  h-editor')) {.  
0420: 20 20 20 20 20 20 20 20 20 20 78 4e 6f 64 65 49            xNodeI
0430: 6e 73 65 72 74 41 66 74 65 72 20 3d 20 74 68 69  nsertAfter = thi
0440: 73 2e 78 4e 6f 64 65 2e 70 61 72 65 6e 74 4e 6f  s.xNode.parentNo
0450: 64 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20  de;.        }.. 
0460: 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
0470: 62 53 68 61 64 6f 77 29 7b 0a 20 20 20 20 20 20  bShadow){.      
0480: 20 20 20 20 20 20 74 68 69 73 2e 6f 53 68 61 64        this.oShad
0490: 6f 77 42 74 6e 20 3d 20 6f 47 72 61 6d 6d 61 6c  owBtn = oGrammal
04a0: 65 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65 28  ecte.createNode(
04b0: 22 64 69 76 22 2c 20 7b 63 6c 61 73 73 4e 61 6d  "div", {classNam
04c0: 65 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f  e: "grammalecte_
04d0: 61 62 73 22 2c 20 73 74 79 6c 65 3a 20 22 77 69  abs", style: "wi
04e0: 64 74 68 3a 31 36 70 78 3b 68 65 69 67 68 74 3a  dth:16px;height:
04f0: 31 36 70 78 3b 22 7d 29 3b 0a 20 20 20 20 20 20  16px;"});.      
0500: 20 20 20 20 20 20 74 68 69 73 2e 6f 53 68 61 64        this.oShad
0510: 6f 77 42 74 6e 4e 6f 64 65 20 3d 20 74 68 69 73  owBtnNode = this
0520: 2e 6f 53 68 61 64 6f 77 42 74 6e 2e 61 74 74 61  .oShadowBtn.atta
0530: 63 68 53 68 61 64 6f 77 28 7b 6d 6f 64 65 3a 20  chShadow({mode: 
0540: 22 6f 70 65 6e 22 7d 29 3b 0a 20 20 20 20 20 20  "open"});.      
0550: 20 20 20 20 20 20 74 68 69 73 2e 6f 53 68 61 64        this.oShad
0560: 6f 77 42 74 6e 4e 6f 64 65 2e 61 70 70 65 6e 64  owBtnNode.append
0570: 43 68 69 6c 64 28 0a 20 20 20 20 20 20 20 20 20  Child(.         
0580: 20 20 20 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65         oGrammale
0590: 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22  cte.createNode("
05a0: 6c 69 6e 6b 22 2c 20 7b 72 65 6c 3a 20 22 73 74  link", {rel: "st
05b0: 79 6c 65 73 68 65 65 74 22 2c 20 74 79 70 65 3a  ylesheet", type:
05c0: 20 22 74 65 78 74 2f 63 73 73 22 2c 20 6d 65 64   "text/css", med
05d0: 69 61 3a 20 22 61 6c 6c 22 2c 20 68 72 65 66 3a  ia: "all", href:
05e0: 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 73 45   oGrammalecte.sE
05f0: 78 74 65 6e 73 69 6f 6e 55 72 6c 20 2b 20 22 63  xtensionUrl + "c
0600: 6f 6e 74 65 6e 74 5f 73 63 72 69 70 74 73 2f 6d  ontent_scripts/m
0610: 65 6e 75 2e 63 73 73 22 7d 29 0a 20 20 20 20 20  enu.css"}).     
0620: 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
0630: 20 20 20 20 20 20 74 68 69 73 2e 6f 53 68 61 64        this.oShad
0640: 6f 77 42 74 6e 4e 6f 64 65 2e 61 70 70 65 6e 64  owBtnNode.append
0650: 43 68 69 6c 64 28 74 68 69 73 2e 78 42 75 74 74  Child(this.xButt
0660: 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  on);.           
0670: 20 74 68 69 73 2e 5f 69 6e 73 65 72 74 41 66 74   this._insertAft
0680: 65 72 28 74 68 69 73 2e 6f 53 68 61 64 6f 77 42  er(this.oShadowB
0690: 74 6e 2c 20 78 4e 6f 64 65 49 6e 73 65 72 74 41  tn, xNodeInsertA
06a0: 66 74 65 72 2c 20 6e 4d 61 72 67 69 6e 54 6f 70  fter, nMarginTop
06b0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
06c0: 74 68 69 73 2e 6f 53 68 61 64 6f 77 4d 65 6e 75  this.oShadowMenu
06d0: 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e   = oGrammalecte.
06e0: 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69 76 22  createNode("div"
06f0: 2c 20 7b 69 64 3a 20 74 68 69 73 2e 73 4d 65 6e  , {id: this.sMen
0700: 75 49 64 2b 22 5f 73 68 61 64 6f 77 22 2c 20 63  uId+"_shadow", c
0710: 6c 61 73 73 4e 61 6d 65 3a 20 22 67 72 61 6d 6d  lassName: "gramm
0720: 61 6c 65 63 74 65 5f 61 62 73 22 2c 20 73 74 79  alecte_abs", sty
0730: 6c 65 3a 20 22 77 69 64 74 68 3a 30 3b 68 65 69  le: "width:0;hei
0740: 67 68 74 3a 30 3b 22 7d 29 3b 0a 20 20 20 20 20  ght:0;"});.     
0750: 20 20 20 20 20 20 20 74 68 69 73 2e 6f 53 68 61         this.oSha
0760: 64 6f 77 4d 65 6e 75 4e 6f 64 65 20 3d 20 74 68  dowMenuNode = th
0770: 69 73 2e 6f 53 68 61 64 6f 77 4d 65 6e 75 2e 61  is.oShadowMenu.a
0780: 74 74 61 63 68 53 68 61 64 6f 77 28 7b 6d 6f 64  ttachShadow({mod
0790: 65 3a 20 22 6f 70 65 6e 22 7d 29 3b 0a 20 20 20  e: "open"});.   
07a0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 53           this.oS
07b0: 68 61 64 6f 77 4d 65 6e 75 4e 6f 64 65 2e 61 70  hadowMenuNode.ap
07c0: 70 65 6e 64 43 68 69 6c 64 28 0a 20 20 20 20 20  pendChild(.     
07d0: 20 20 20 20 20 20 20 20 20 20 20 6f 47 72 61 6d             oGram
07e0: 6d 61 6c 65 63 74 65 2e 63 72 65 61 74 65 4e 6f  malecte.createNo
07f0: 64 65 28 22 6c 69 6e 6b 22 2c 20 7b 72 65 6c 3a  de("link", {rel:
0800: 20 22 73 74 79 6c 65 73 68 65 65 74 22 2c 20 74   "stylesheet", t
0810: 79 70 65 3a 20 22 74 65 78 74 2f 63 73 73 22 2c  ype: "text/css",
0820: 20 6d 65 64 69 61 3a 20 22 61 6c 6c 22 2c 20 68   media: "all", h
0830: 72 65 66 3a 20 6f 47 72 61 6d 6d 61 6c 65 63 74  ref: oGrammalect
0840: 65 2e 73 45 78 74 65 6e 73 69 6f 6e 55 72 6c 20  e.sExtensionUrl 
0850: 2b 20 22 63 6f 6e 74 65 6e 74 5f 73 63 72 69 70  + "content_scrip
0860: 74 73 2f 6d 65 6e 75 2e 63 73 73 22 7d 29 0a 20  ts/menu.css"}). 
0870: 20 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20             );.  
0880: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f            this.o
0890: 53 68 61 64 6f 77 4d 65 6e 75 4e 6f 64 65 2e 61  ShadowMenuNode.a
08a0: 70 70 65 6e 64 43 68 69 6c 64 28 74 68 69 73 2e  ppendChild(this.
08b0: 78 4d 65 6e 75 29 3b 0a 20 20 20 20 20 20 20 20  xMenu);.        
08c0: 20 20 20 20 74 68 69 73 2e 5f 69 6e 73 65 72 74      this._insert
08d0: 41 66 74 65 72 28 74 68 69 73 2e 6f 53 68 61 64  After(this.oShad
08e0: 6f 77 4d 65 6e 75 2c 20 78 4e 6f 64 65 49 6e 73  owMenu, xNodeIns
08f0: 65 72 74 41 66 74 65 72 2c 20 6e 4d 61 72 67 69  ertAfter, nMargi
0900: 6e 54 6f 70 20 2b 20 38 29 3b 0a 20 20 20 20 20  nTop + 8);.     
0910: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
0920: 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 69 6e          this._in
0930: 73 65 72 74 41 66 74 65 72 28 74 68 69 73 2e 78  sertAfter(this.x
0940: 42 75 74 74 6f 6e 2c 20 78 4e 6f 64 65 49 6e 73  Button, xNodeIns
0950: 65 72 74 41 66 74 65 72 2c 20 6e 4d 61 72 67 69  ertAfter, nMargi
0960: 6e 54 6f 70 29 3b 0a 20 20 20 20 20 20 20 20 20  nTop);.         
0970: 20 20 20 74 68 69 73 2e 5f 69 6e 73 65 72 74 41     this._insertA
0980: 66 74 65 72 28 74 68 69 73 2e 78 4d 65 6e 75 2c  fter(this.xMenu,
0990: 20 78 4e 6f 64 65 49 6e 73 65 72 74 41 66 74 65   xNodeInsertAfte
09a0: 72 2c 20 6e 4d 61 72 67 69 6e 54 6f 70 20 2b 20  r, nMarginTop + 
09b0: 38 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  8);.        }.  
09c0: 20 20 20 20 20 20 74 68 69 73 2e 5f 63 72 65 61        this._crea
09d0: 74 65 4c 69 73 74 65 6e 65 72 73 28 29 3b 0a 20  teListeners();. 
09e0: 20 20 20 7d 0a 0a 20 20 20 20 5f 69 6e 73 65 72     }..    _inser
09f0: 74 41 66 74 65 72 20 28 78 4e 65 77 4e 6f 64 65  tAfter (xNewNode
0a00: 2c 20 78 52 65 66 65 72 65 6e 63 65 4e 6f 64 65  , xReferenceNode
0a10: 2c 20 6e 4d 61 72 67 69 6e 54 6f 70 29 20 7b 0a  , nMarginTop) {.
0a20: 20 20 20 20 20 20 20 20 78 52 65 66 65 72 65 6e          xReferen
0a30: 63 65 4e 6f 64 65 2e 70 61 72 65 6e 74 4e 6f 64  ceNode.parentNod
0a40: 65 2e 69 6e 73 65 72 74 42 65 66 6f 72 65 28 78  e.insertBefore(x
0a50: 4e 65 77 4e 6f 64 65 2c 20 78 52 65 66 65 72 65  NewNode, xRefere
0a60: 6e 63 65 4e 6f 64 65 2e 6e 65 78 74 53 69 62 6c  nceNode.nextSibl
0a70: 69 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 78 4e  ing);.        xN
0a80: 65 77 4e 6f 64 65 2e 73 74 79 6c 65 2e 6d 61 72  ewNode.style.mar
0a90: 67 69 6e 54 6f 70 20 3d 20 6e 4d 61 72 67 69 6e  ginTop = nMargin
0aa0: 54 6f 70 20 2b 20 22 70 78 22 3b 0a 20 20 20 20  Top + "px";.    
0ab0: 7d 0a 0a 20 20 20 20 5f 63 72 65 61 74 65 4c 69  }..    _createLi
0ac0: 73 74 65 6e 65 72 73 20 28 29 20 7b 0a 20 20 20  steners () {.   
0ad0: 20 20 20 20 20 74 68 69 73 2e 78 4e 6f 64 65 2e       this.xNode.
0ae0: 61 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65 72  addEventListener
0af0: 28 27 66 6f 63 75 73 27 2c 20 28 65 29 20 3d 3e  ('focus', (e) =>
0b00: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   {.            i
0b10: 66 20 28 74 68 69 73 2e 62 53 68 61 64 6f 77 29  f (this.bShadow)
0b20: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
0b30: 20 20 74 68 69 73 2e 6f 53 68 61 64 6f 77 42 74    this.oShadowBt
0b40: 6e 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20  n.style.display 
0b50: 3d 20 22 62 6c 6f 63 6b 22 3b 0a 20 20 20 20 20  = "block";.     
0b60: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0b70: 20 20 20 20 20 74 68 69 73 2e 78 42 75 74 74 6f       this.xButto
0b80: 6e 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20  n.style.display 
0b90: 3d 20 22 62 6c 6f 63 6b 22 3b 0a 20 20 20 20 20  = "block";.     
0ba0: 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 2f     });.        /
0bb0: 2a 74 68 69 73 2e 78 4e 6f 64 65 2e 61 64 64 45  *this.xNode.addE
0bc0: 76 65 6e 74 4c 69 73 74 65 6e 65 72 28 27 62 6c  ventListener('bl
0bd0: 75 72 27 2c 20 28 65 29 20 3d 3e 20 7b 0a 20 20  ur', (e) => {.  
0be0: 20 20 20 20 20 20 20 20 20 20 77 69 6e 64 6f 77            window
0bf0: 2e 73 65 74 54 69 6d 65 6f 75 74 28 28 29 20 3d  .setTimeout(() =
0c00: 3e 20 7b 74 68 69 73 2e 78 42 75 74 74 6f 6e 2e  > {this.xButton.
0c10: 73 74 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20  style.display = 
0c20: 22 6e 6f 6e 65 22 3b 7d 2c 20 33 30 30 29 3b 0a  "none";}, 300);.
0c30: 20 20 20 20 20 20 20 20 7d 29 3b 2a 2f 0a 20 20          });*/.  
0c40: 20 20 7d 0a 0a 20 20 20 20 5f 67 65 74 54 65 78    }..    _getTex
0c50: 74 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 72  t () {.        r
0c60: 65 74 75 72 6e 20 28 74 68 69 73 2e 78 4e 6f 64  eturn (this.xNod
0c70: 65 2e 74 61 67 4e 61 6d 65 20 3d 3d 20 22 54 45  e.tagName == "TE
0c80: 58 54 41 52 45 41 22 29 20 3f 20 74 68 69 73 2e  XTAREA") ? this.
0c90: 78 4e 6f 64 65 2e 76 61 6c 75 65 2e 6e 6f 72 6d  xNode.value.norm
0ca0: 61 6c 69 7a 65 28 22 4e 46 43 22 29 20 3a 20 74  alize("NFC") : t
0cb0: 68 69 73 2e 78 4e 6f 64 65 2e 69 6e 6e 65 72 54  his.xNode.innerT
0cc0: 65 78 74 2e 6e 6f 72 6d 61 6c 69 7a 65 28 22 4e  ext.normalize("N
0cd0: 46 43 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  FC");.    }..   
0ce0: 20 5f 63 72 65 61 74 65 4d 65 6e 75 20 28 29 20   _createMenu () 
0cf0: 7b 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a  {.        try {.
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
0d10: 78 4d 65 6e 75 20 3d 20 6f 47 72 61 6d 6d 61 6c  xMenu = oGrammal
0d20: 65 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65 28  ecte.createNode(
0d30: 22 64 69 76 22 2c 20 7b 69 64 3a 20 74 68 69 73  "div", {id: this
0d40: 2e 73 4d 65 6e 75 49 64 2c 20 63 6c 61 73 73 4e  .sMenuId, classN
0d50: 61 6d 65 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74  ame: "grammalect
0d60: 65 5f 6d 65 6e 75 22 7d 29 3b 0a 20 20 20 20 20  e_menu"});.     
0d70: 20 20 20 20 20 20 20 6c 65 74 20 78 43 6c 6f 73         let xClos
0d80: 65 42 75 74 74 6f 6e 20 3d 20 6f 47 72 61 6d 6d  eButton = oGramm
0d90: 61 6c 65 63 74 65 2e 63 72 65 61 74 65 4e 6f 64  alecte.createNod
0da0: 65 28 22 64 69 76 22 2c 20 7b 63 6c 61 73 73 4e  e("div", {classN
0db0: 61 6d 65 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74  ame: "grammalect
0dc0: 65 5f 6d 65 6e 75 5f 63 6c 6f 73 65 5f 62 75 74  e_menu_close_but
0dd0: 74 6f 6e 22 2c 20 74 65 78 74 43 6f 6e 74 65 6e  ton", textConten
0de0: 74 3a 20 22 c3 97 22 7d 20 29 3b 0a 20 20 20 20  t: ".."} );.    
0df0: 20 20 20 20 20 20 20 20 78 43 6c 6f 73 65 42 75          xCloseBu
0e00: 74 74 6f 6e 2e 6f 6e 63 6c 69 63 6b 20 3d 20 28  tton.onclick = (
0e10: 29 20 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 20  ) => {.         
0e20: 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
0e30: 62 53 68 61 64 6f 77 29 7b 0a 20 20 20 20 20 20  bShadow){.      
0e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
0e50: 69 73 2e 6f 53 68 61 64 6f 77 42 74 6e 2e 73 74  is.oShadowBtn.st
0e60: 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 20 22 6e  yle.display = "n
0e70: 6f 6e 65 22 3b 0a 20 20 20 20 20 20 20 20 20 20  one";.          
0e80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0e90: 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 42 75          this.xBu
0ea0: 74 74 6f 6e 2e 73 74 79 6c 65 2e 64 69 73 70 6c  tton.style.displ
0eb0: 61 79 20 3d 20 22 6e 6f 6e 65 22 3b 0a 20 20 20  ay = "none";.   
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
0ed0: 73 2e 73 77 69 74 63 68 4d 65 6e 75 28 29 3b 0a  s.switchMenu();.
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
0ef0: 20 20 20 20 20 20 20 20 20 20 78 4d 65 6e 75 2e            xMenu.
0f00: 61 70 70 65 6e 64 43 68 69 6c 64 28 78 43 6c 6f  appendChild(xClo
0f10: 73 65 42 75 74 74 6f 6e 29 3b 0a 20 20 20 20 20  seButton);.     
0f20: 20 20 20 20 20 20 20 78 4d 65 6e 75 2e 61 70 70         xMenu.app
0f30: 65 6e 64 43 68 69 6c 64 28 6f 47 72 61 6d 6d 61  endChild(oGramma
0f40: 6c 65 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65  lecte.createNode
0f50: 28 22 64 69 76 22 2c 20 7b 63 6c 61 73 73 4e 61  ("div", {classNa
0f60: 6d 65 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65  me: "grammalecte
0f70: 5f 6d 65 6e 75 5f 68 65 61 64 65 72 22 2c 20 74  _menu_header", t
0f80: 65 78 74 43 6f 6e 74 65 6e 74 3a 20 22 47 52 41  extContent: "GRA
0f90: 4d 4d 41 4c 45 43 54 45 22 7d 29 29 3b 0a 20 20  MMALECTE"}));.  
0fa0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54 65 78            // Tex
0fb0: 74 20 66 6f 72 6d 61 74 74 65 72 0a 20 20 20 20  t formatter.    
0fc0: 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
0fd0: 2e 78 4e 6f 64 65 2e 74 61 67 4e 61 6d 65 20 3d  .xNode.tagName =
0fe0: 3d 20 22 54 45 58 54 41 52 45 41 22 29 20 7b 0a  = "TEXTAREA") {.
0ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1000: 6c 65 74 20 78 54 46 42 75 74 74 6f 6e 20 3d 20  let xTFButton = 
1010: 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65  oGrammalecte.cre
1020: 61 74 65 4e 6f 64 65 28 22 64 69 76 22 2c 20 7b  ateNode("div", {
1030: 63 6c 61 73 73 4e 61 6d 65 3a 20 22 67 72 61 6d  className: "gram
1040: 6d 61 6c 65 63 74 65 5f 6d 65 6e 75 5f 69 74 65  malecte_menu_ite
1050: 6d 22 2c 20 74 65 78 74 43 6f 6e 74 65 6e 74 3a  m", textContent:
1060: 20 22 46 6f 72 6d 61 74 65 75 72 20 64 65 20 74   "Formateur de t
1070: 65 78 74 65 22 7d 29 3b 0a 20 20 20 20 20 20 20  exte"});.       
1080: 20 20 20 20 20 20 20 20 20 78 54 46 42 75 74 74           xTFButt
1090: 6f 6e 2e 6f 6e 63 6c 69 63 6b 20 3d 20 28 29 20  on.onclick = () 
10a0: 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  => {.           
10b0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 77           this.sw
10c0: 69 74 63 68 4d 65 6e 75 28 29 3b 0a 20 20 20 20  itchMenu();.    
10d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e0: 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65  oGrammalecte.cre
10f0: 61 74 65 54 46 50 61 6e 65 6c 28 29 3b 0a 20 20  ateTFPanel();.  
1100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1110: 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f    oGrammalecte.o
1120: 54 46 50 61 6e 65 6c 2e 73 74 61 72 74 28 74 68  TFPanel.start(th
1130: 69 73 2e 78 4e 6f 64 65 29 3b 0a 20 20 20 20 20  is.xNode);.     
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1150: 47 72 61 6d 6d 61 6c 65 63 74 65 2e 6f 54 46 50  Grammalecte.oTFP
1160: 61 6e 65 6c 2e 73 68 6f 77 28 29 3b 0a 20 20 20  anel.show();.   
1170: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0a               };.
1180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1190: 78 4d 65 6e 75 2e 61 70 70 65 6e 64 43 68 69 6c  xMenu.appendChil
11a0: 64 28 78 54 46 42 75 74 74 6f 6e 29 3b 0a 20 20  d(xTFButton);.  
11b0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
11c0: 20 20 20 20 20 20 20 20 2f 2f 20 6c 65 78 69 63          // lexic
11d0: 6f 67 72 61 70 68 65 0a 20 20 20 20 20 20 20 20  ographe.        
11e0: 20 20 20 20 6c 65 74 20 78 4c 78 67 42 75 74 74      let xLxgButt
11f0: 6f 6e 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63 74  on = oGrammalect
1200: 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69  e.createNode("di
1210: 76 22 2c 20 7b 63 6c 61 73 73 4e 61 6d 65 3a 20  v", {className: 
1220: 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 6d 65 6e  "grammalecte_men
1230: 75 5f 69 74 65 6d 22 2c 20 74 65 78 74 43 6f 6e  u_item", textCon
1240: 74 65 6e 74 3a 20 22 4c 65 78 69 63 6f 67 72 61  tent: "Lexicogra
1250: 70 68 65 22 7d 29 3b 0a 20 20 20 20 20 20 20 20  phe"});.        
1260: 20 20 20 20 78 4c 78 67 42 75 74 74 6f 6e 2e 6f      xLxgButton.o
1270: 6e 63 6c 69 63 6b 20 3d 20 28 29 20 3d 3e 20 7b  nclick = () => {
1280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1290: 20 74 68 69 73 2e 73 77 69 74 63 68 4d 65 6e 75   this.switchMenu
12a0: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
12b0: 20 20 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65      oGrammalecte
12c0: 2e 73 74 61 72 74 4c 78 67 50 61 6e 65 6c 28 29  .startLxgPanel()
12d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
12e0: 20 20 78 47 72 61 6d 6d 61 6c 65 63 74 65 50 6f    xGrammalectePo
12f0: 72 74 2e 70 6f 73 74 4d 65 73 73 61 67 65 28 7b  rt.postMessage({
1300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1310: 20 20 20 20 20 73 43 6f 6d 6d 61 6e 64 3a 20 22       sCommand: "
1320: 67 65 74 4c 69 73 74 4f 66 54 6f 6b 65 6e 73 22  getListOfTokens"
1330: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1340: 20 20 20 20 20 20 64 50 61 72 61 6d 3a 20 7b 73        dParam: {s
1350: 54 65 78 74 3a 20 74 68 69 73 2e 5f 67 65 74 54  Text: this._getT
1360: 65 78 74 28 29 7d 2c 0a 20 20 20 20 20 20 20 20  ext()},.        
1370: 20 20 20 20 20 20 20 20 20 20 20 20 64 49 6e 66              dInf
1380: 6f 3a 20 7b 73 54 65 78 74 41 72 65 61 49 64 3a  o: {sTextAreaId:
1390: 20 74 68 69 73 2e 78 4e 6f 64 65 2e 69 64 7d 0a   this.xNode.id}.
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b0: 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  });.            
13c0: 7d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78  };.            x
13d0: 4d 65 6e 75 2e 61 70 70 65 6e 64 43 68 69 6c 64  Menu.appendChild
13e0: 28 78 4c 78 67 42 75 74 74 6f 6e 29 3b 0a 20 20  (xLxgButton);.  
13f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 47 72 61            // Gra
1400: 6d 6d 61 72 20 63 68 65 63 6b 65 72 0a 20 20 20  mmar checker.   
1410: 20 20 20 20 20 20 20 20 20 6c 65 74 20 78 47 43           let xGC
1420: 42 75 74 74 6f 6e 20 3d 20 6f 47 72 61 6d 6d 61  Button = oGramma
1430: 6c 65 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65  lecte.createNode
1440: 28 22 64 69 76 22 2c 20 7b 63 6c 61 73 73 4e 61  ("div", {classNa
1450: 6d 65 3a 20 22 67 72 61 6d 6d 61 6c 65 63 74 65  me: "grammalecte
1460: 5f 6d 65 6e 75 5f 69 74 65 6d 22 2c 20 74 65 78  _menu_item", tex
1470: 74 43 6f 6e 74 65 6e 74 3a 20 22 43 6f 72 72 65  tContent: "Corre
1480: 63 74 69 6f 6e 20 67 72 61 6d 6d 61 74 69 63 61  ction grammatica
1490: 6c 65 22 7d 29 3b 0a 20 20 20 20 20 20 20 20 20  le"});.         
14a0: 20 20 20 78 47 43 42 75 74 74 6f 6e 2e 6f 6e 63     xGCButton.onc
14b0: 6c 69 63 6b 20 3d 20 28 29 20 3d 3e 20 7b 0a 20  lick = () => {. 
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14d0: 68 69 73 2e 73 77 69 74 63 68 4d 65 6e 75 28 29  his.switchMenu()
14e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
14f0: 20 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 2e 73    oGrammalecte.s
1500: 74 61 72 74 47 43 50 61 6e 65 6c 28 74 68 69 73  tartGCPanel(this
1510: 2e 78 4e 6f 64 65 29 3b 0a 20 20 20 20 20 20 20  .xNode);.       
1520: 20 20 20 20 20 20 20 20 20 78 47 72 61 6d 6d 61           xGramma
1530: 6c 65 63 74 65 50 6f 72 74 2e 70 6f 73 74 4d 65  lectePort.postMe
1540: 73 73 61 67 65 28 7b 0a 20 20 20 20 20 20 20 20  ssage({.        
1550: 20 20 20 20 20 20 20 20 20 20 20 20 73 43 6f 6d              sCom
1560: 6d 61 6e 64 3a 20 22 70 61 72 73 65 41 6e 64 53  mand: "parseAndS
1570: 70 65 6c 6c 63 68 65 63 6b 22 2c 0a 20 20 20 20  pellcheck",.    
1580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1590: 64 50 61 72 61 6d 3a 20 7b 73 54 65 78 74 3a 20  dParam: {sText: 
15a0: 74 68 69 73 2e 5f 67 65 74 54 65 78 74 28 29 2c  this._getText(),
15b0: 20 73 43 6f 75 6e 74 72 79 3a 20 22 46 52 22 2c   sCountry: "FR",
15c0: 20 62 44 65 62 75 67 3a 20 66 61 6c 73 65 2c 20   bDebug: false, 
15d0: 62 43 6f 6e 74 65 78 74 3a 20 66 61 6c 73 65 7d  bContext: false}
15e0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
15f0: 20 20 20 20 20 20 64 49 6e 66 6f 3a 20 7b 73 54        dInfo: {sT
1600: 65 78 74 41 72 65 61 49 64 3a 20 74 68 69 73 2e  extAreaId: this.
1610: 78 4e 6f 64 65 2e 69 64 7d 0a 20 20 20 20 20 20  xNode.id}.      
1620: 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20            });.  
1630: 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20            };.   
1640: 20 20 20 20 20 20 20 20 20 78 4d 65 6e 75 2e 61           xMenu.a
1650: 70 70 65 6e 64 43 68 69 6c 64 28 78 47 43 42 75  ppendChild(xGCBu
1660: 74 74 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  tton);.         
1670: 20 20 20 2f 2f 20 43 6f 6e 6a 75 67 61 74 69 6f     // Conjugatio
1680: 6e 20 74 6f 6f 6c 0a 20 20 20 20 20 20 20 20 20  n tool.         
1690: 20 20 20 6c 65 74 20 78 43 6f 6e 6a 42 75 74 74     let xConjButt
16a0: 6f 6e 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63 74  on = oGrammalect
16b0: 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22 64 69  e.createNode("di
16c0: 76 22 2c 20 7b 63 6c 61 73 73 4e 61 6d 65 3a 20  v", {className: 
16d0: 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 6d 65 6e  "grammalecte_men
16e0: 75 5f 69 74 65 6d 5f 62 6c 6f 63 6b 22 2c 20 74  u_item_block", t
16f0: 65 78 74 43 6f 6e 74 65 6e 74 3a 20 22 43 6f 6e  extContent: "Con
1700: 6a 75 67 75 65 75 72 22 7d 29 3b 0a 20 20 20 20  jugueur"});.    
1710: 20 20 20 20 20 20 20 20 6c 65 74 20 78 43 6f 6e          let xCon
1720: 6a 42 75 74 74 6f 6e 54 61 62 20 3d 20 6f 47 72  jButtonTab = oGr
1730: 61 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61 74 65  ammalecte.create
1740: 4e 6f 64 65 28 22 64 69 76 22 2c 20 7b 63 6c 61  Node("div", {cla
1750: 73 73 4e 61 6d 65 3a 20 22 67 72 61 6d 6d 61 6c  ssName: "grammal
1760: 65 63 74 65 5f 6d 65 6e 75 5f 62 75 74 74 6f 6e  ecte_menu_button
1770: 22 2c 20 74 65 78 74 43 6f 6e 74 65 6e 74 3a 20  ", textContent: 
1780: 22 4f 6e 67 6c 65 74 22 7d 29 3b 0a 20 20 20 20  "Onglet"});.    
1790: 20 20 20 20 20 20 20 20 78 43 6f 6e 6a 42 75 74          xConjBut
17a0: 74 6f 6e 54 61 62 2e 6f 6e 63 6c 69 63 6b 20 3d  tonTab.onclick =
17b0: 20 28 29 20 3d 3e 20 7b 0a 20 20 20 20 20 20 20   () => {.       
17c0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 77           this.sw
17d0: 69 74 63 68 4d 65 6e 75 28 29 3b 0a 20 20 20 20  itchMenu();.    
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 78 47 72 61              xGra
17f0: 6d 6d 61 6c 65 63 74 65 50 6f 72 74 2e 70 6f 73  mmalectePort.pos
1800: 74 4d 65 73 73 61 67 65 28 7b 73 43 6f 6d 6d 61  tMessage({sComma
1810: 6e 64 3a 20 22 6f 70 65 6e 43 6f 6e 6a 75 67 75  nd: "openConjugu
1820: 65 75 72 54 61 62 22 2c 20 64 50 61 72 61 6d 3a  eurTab", dParam:
1830: 20 6e 75 6c 6c 2c 20 64 49 6e 66 6f 3a 20 6e 75   null, dInfo: nu
1840: 6c 6c 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ll});.          
1850: 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 20 20 20    };.           
1860: 20 6c 65 74 20 78 43 6f 6e 6a 42 75 74 74 6f 6e   let xConjButton
1870: 57 69 6e 20 3d 20 6f 47 72 61 6d 6d 61 6c 65 63  Win = oGrammalec
1880: 74 65 2e 63 72 65 61 74 65 4e 6f 64 65 28 22 64  te.createNode("d
1890: 69 76 22 2c 20 7b 63 6c 61 73 73 4e 61 6d 65 3a  iv", {className:
18a0: 20 22 67 72 61 6d 6d 61 6c 65 63 74 65 5f 6d 65   "grammalecte_me
18b0: 6e 75 5f 62 75 74 74 6f 6e 22 2c 20 74 65 78 74  nu_button", text
18c0: 43 6f 6e 74 65 6e 74 3a 20 22 46 65 6e c3 aa 74  Content: "Fen..t
18d0: 72 65 22 7d 29 3b 0a 20 20 20 20 20 20 20 20 20  re"});.         
18e0: 20 20 20 78 43 6f 6e 6a 42 75 74 74 6f 6e 57 69     xConjButtonWi
18f0: 6e 2e 6f 6e 63 6c 69 63 6b 20 3d 20 28 29 20 3d  n.onclick = () =
1900: 3e 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  > {.            
1910: 20 20 20 20 74 68 69 73 2e 73 77 69 74 63 68 4d      this.switchM
1920: 65 6e 75 28 29 3b 0a 20 20 20 20 20 20 20 20 20  enu();.         
1930: 20 20 20 20 20 20 20 78 47 72 61 6d 6d 61 6c 65         xGrammale
1940: 63 74 65 50 6f 72 74 2e 70 6f 73 74 4d 65 73 73  ctePort.postMess
1950: 61 67 65 28 7b 73 43 6f 6d 6d 61 6e 64 3a 20 22  age({sCommand: "
1960: 6f 70 65 6e 43 6f 6e 6a 75 67 75 65 75 72 57 69  openConjugueurWi
1970: 6e 64 6f 77 22 2c 20 64 50 61 72 61 6d 3a 20 6e  ndow", dParam: n
1980: 75 6c 6c 2c 20 64 49 6e 66 6f 3a 20 6e 75 6c 6c  ull, dInfo: null
1990: 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  });.            
19a0: 7d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78  };.            x
19b0: 43 6f 6e 6a 42 75 74 74 6f 6e 2e 61 70 70 65 6e  ConjButton.appen
19c0: 64 43 68 69 6c 64 28 78 43 6f 6e 6a 42 75 74 74  dChild(xConjButt
19d0: 6f 6e 54 61 62 29 3b 0a 20 20 20 20 20 20 20 20  onTab);.        
19e0: 20 20 20 20 78 43 6f 6e 6a 42 75 74 74 6f 6e 2e      xConjButton.
19f0: 61 70 70 65 6e 64 43 68 69 6c 64 28 78 43 6f 6e  appendChild(xCon
1a00: 6a 42 75 74 74 6f 6e 57 69 6e 29 3b 0a 20 20 20  jButtonWin);.   
1a10: 20 20 20 20 20 20 20 20 20 78 4d 65 6e 75 2e 61           xMenu.a
1a20: 70 70 65 6e 64 43 68 69 6c 64 28 78 43 6f 6e 6a  ppendChild(xConj
1a30: 42 75 74 74 6f 6e 29 3b 0a 20 20 20 20 20 20 20  Button);.       
1a40: 20 20 20 20 20 2f 2f 78 4d 65 6e 75 2e 61 70 70       //xMenu.app
1a50: 65 6e 64 43 68 69 6c 64 28 6f 47 72 61 6d 6d 61  endChild(oGramma
1a60: 6c 65 63 74 65 2e 63 72 65 61 74 65 4e 6f 64 65  lecte.createNode
1a70: 28 22 69 6d 67 22 2c 20 7b 73 63 72 3a 20 62 72  ("img", {scr: br
1a80: 6f 77 73 65 72 2e 65 78 74 65 6e 73 69 6f 6e 2e  owser.extension.
1a90: 67 65 74 55 52 4c 28 22 69 6d 67 2f 6c 6f 67 6f  getURL("img/logo
1aa0: 2d 31 36 2e 70 6e 67 22 29 7d 29 29 3b 0a 20 20  -16.png")}));.  
1ab0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 63 61 6e            // can
1ac0: e2 80 99 74 20 77 6f 72 6b 2c 20 64 75 65 20 74  ...t work, due t
1ad0: 6f 20 63 6f 6e 74 65 6e 74 2d 73 63 72 69 70 74  o content-script
1ae0: 20 70 6f 6c 69 63 79 3a 20 68 74 74 70 73 3a 2f   policy: https:/
1af0: 2f 62 75 67 7a 69 6c 6c 61 2e 6d 6f 7a 69 6c 6c  /bugzilla.mozill
1b00: 61 2e 6f 72 67 2f 73 68 6f 77 5f 62 75 67 2e 63  a.org/show_bug.c
1b10: 67 69 3f 69 64 3d 31 32 36 37 30 32 37 0a 20 20  gi?id=1267027.  
1b20: 20 20 20 20 20 20 20 20 20 20 78 4d 65 6e 75 2e            xMenu.
1b30: 61 70 70 65 6e 64 43 68 69 6c 64 28 6f 47 72 61  appendChild(oGra
1b40: 6d 6d 61 6c 65 63 74 65 2e 63 72 65 61 74 65 4e  mmalecte.createN
1b50: 6f 64 65 28 22 64 69 76 22 2c 20 7b 63 6c 61 73  ode("div", {clas
1b60: 73 4e 61 6d 65 3a 20 22 67 72 61 6d 6d 61 6c 65  sName: "grammale
1b70: 63 74 65 5f 6d 65 6e 75 5f 66 6f 6f 74 65 72 22  cte_menu_footer"
1b80: 7d 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  }));.           
1b90: 20 72 65 74 75 72 6e 20 78 4d 65 6e 75 3b 0a 20   return xMenu;. 
1ba0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1bb0: 20 63 61 74 63 68 20 28 65 29 20 7b 0a 20 20 20   catch (e) {.   
1bc0: 20 20 20 20 20 20 20 20 20 73 68 6f 77 45 72 72           showErr
1bd0: 6f 72 28 65 29 3b 0a 20 20 20 20 20 20 20 20 7d  or(e);.        }
1be0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 64 65 6c 65  .    }..    dele
1bf0: 74 65 4e 6f 64 65 73 20 28 29 20 7b 0a 20 20 20  teNodes () {.   
1c00: 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 62 53       if (this.bS
1c10: 68 61 64 6f 77 29 7b 0a 20 20 20 20 20 20 20 20  hadow){.        
1c20: 20 20 20 20 74 68 69 73 2e 6f 53 68 61 64 6f 77      this.oShadow
1c30: 4d 65 6e 75 2e 70 61 72 65 6e 74 4e 6f 64 65 2e  Menu.parentNode.
1c40: 72 65 6d 6f 76 65 43 68 69 6c 64 28 74 68 69 73  removeChild(this
1c50: 2e 6f 53 68 61 64 6f 77 4d 65 6e 75 29 3b 0a 20  .oShadowMenu);. 
1c60: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
1c70: 6f 53 68 61 64 6f 77 42 74 6e 2e 70 61 72 65 6e  oShadowBtn.paren
1c80: 74 4e 6f 64 65 2e 72 65 6d 6f 76 65 43 68 69 6c  tNode.removeChil
1c90: 64 28 74 68 69 73 2e 6f 53 68 61 64 6f 77 42 74  d(this.oShadowBt
1ca0: 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c  n);.        } el
1cb0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
1cc0: 20 74 68 69 73 2e 78 4d 65 6e 75 2e 70 61 72 65   this.xMenu.pare
1cd0: 6e 74 4e 6f 64 65 2e 72 65 6d 6f 76 65 43 68 69  ntNode.removeChi
1ce0: 6c 64 28 74 68 69 73 2e 78 4d 65 6e 75 29 3b 0a  ld(this.xMenu);.
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1d00: 2e 78 42 75 74 74 6f 6e 2e 70 61 72 65 6e 74 4e  .xButton.parentN
1d10: 6f 64 65 2e 72 65 6d 6f 76 65 43 68 69 6c 64 28  ode.removeChild(
1d20: 74 68 69 73 2e 78 42 75 74 74 6f 6e 29 3b 0a 20  this.xButton);. 
1d30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a         }.    }..
1d40: 20 20 20 20 73 77 69 74 63 68 4d 65 6e 75 20 28      switchMenu (
1d50: 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28  ) {.        if (
1d60: 74 68 69 73 2e 62 53 68 61 64 6f 77 29 7b 0a 20  this.bShadow){. 
1d70: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
1d80: 6f 53 68 61 64 6f 77 4d 65 6e 75 2e 73 74 79 6c  oShadowMenu.styl
1d90: 65 2e 64 69 73 70 6c 61 79 20 3d 20 28 74 68 69  e.display = (thi
1da0: 73 2e 6f 53 68 61 64 6f 77 4d 65 6e 75 2e 73 74  s.oShadowMenu.st
1db0: 79 6c 65 2e 64 69 73 70 6c 61 79 20 3d 3d 20 22  yle.display == "
1dc0: 62 6c 6f 63 6b 22 29 20 3f 20 22 6e 6f 6e 65 22  block") ? "none"
1dd0: 20 3a 20 22 62 6c 6f 63 6b 22 3b 0a 20 20 20 20   : "block";.    
1de0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 74 68      }.        th
1df0: 69 73 2e 78 4d 65 6e 75 2e 73 74 79 6c 65 2e 64  is.xMenu.style.d
1e00: 69 73 70 6c 61 79 20 3d 20 28 74 68 69 73 2e 78  isplay = (this.x
1e10: 4d 65 6e 75 2e 73 74 79 6c 65 2e 64 69 73 70 6c  Menu.style.displ
1e20: 61 79 20 3d 3d 20 22 62 6c 6f 63 6b 22 29 20 3f  ay == "block") ?
1e30: 20 22 6e 6f 6e 65 22 20 3a 20 22 62 6c 6f 63 6b   "none" : "block
1e40: 22 3b 0a 20 20 20 20 7d 0a 7d 0a                 ";.    }.}.