Grammalecte  Hex Artifact Content

Artifact cc1bfe6b79e8125cdf09509eb6ca20d73869caef5862b0c82996aefd3626cc52:


0000: 2f 2f 20 42 61 63 6b 67 72 6f 75 6e 64 0a 0a 2f  // Background../
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 68 65 6c 70 65 72 73 2c 20 73 68 6f 77 45  l helpers, showE
0060: 72 72 6f 72 2c 20 57 6f 72 6b 65 72 2c 20 63 68  rror, Worker, ch
0070: 72 6f 6d 65 2c 20 63 6f 6e 73 6f 6c 65 20 2a 2f  rome, console */
0080: 0a 0a 22 75 73 65 20 73 74 72 69 63 74 22 3b 0a  .."use strict";.
0090: 0a 0a 2f 2f 20 43 68 72 6f 6d 65 20 64 6f 6e e2  ..// Chrome don.
00a0: 80 99 74 20 66 6f 6c 6c 6f 77 20 74 68 65 20 57  ..t follow the W
00b0: 33 43 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e  3C specification
00c0: 3a 0a 2f 2f 20 68 74 74 70 73 3a 2f 2f 62 72 6f  :.// https://bro
00d0: 77 73 65 72 65 78 74 2e 67 69 74 68 75 62 2e 69  wserext.github.i
00e0: 6f 2f 62 72 6f 77 73 65 72 65 78 74 2f 0a 6c 65  o/browserext/.le
00f0: 74 20 62 43 68 72 6f 6d 65 20 3d 20 66 61 6c 73  t bChrome = fals
0100: 65 3b 0a 69 66 20 28 74 79 70 65 6f 66 28 62 72  e;.if (typeof(br
0110: 6f 77 73 65 72 29 20 21 3d 3d 20 22 6f 62 6a 65  owser) !== "obje
0120: 63 74 22 29 20 7b 0a 20 20 20 20 76 61 72 20 62  ct") {.    var b
0130: 72 6f 77 73 65 72 20 3d 20 63 68 72 6f 6d 65 3b  rowser = chrome;
0140: 0a 20 20 20 20 62 43 68 72 6f 6d 65 20 3d 20 74  .    bChrome = t
0150: 72 75 65 3b 0a 7d 0a 0a 0a 63 6f 6e 73 74 20 6f  rue;.}...const o
0160: 57 6f 72 6b 65 72 48 61 6e 64 6c 65 72 20 3d 20  WorkerHandler = 
0170: 7b 0a 20 20 20 20 78 47 43 45 57 6f 72 6b 65 72  {.    xGCEWorker
0180: 3a 20 6e 75 6c 6c 2c 0a 0a 20 20 20 20 6e 4c 61  : null,..    nLa
0190: 73 74 54 69 6d 65 57 6f 72 6b 65 72 52 65 73 70  stTimeWorkerResp
01a0: 6f 6e 73 65 3a 20 30 2c 20 20 2f 2f 20 6d 69 6c  onse: 0,  // mil
01b0: 6c 69 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  liseconds since 
01c0: 31 39 37 30 2d 30 31 2d 30 31 0a 0a 20 20 20 20  1970-01-01..    
01d0: 6f 54 61 73 6b 3a 20 7b 7d 2c 0a 0a 20 20 20 20  oTask: {},..    
01e0: 73 74 61 72 74 3a 20 66 75 6e 63 74 69 6f 6e 20  start: function 
01f0: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69  () {.        thi
0200: 73 2e 78 47 43 45 57 6f 72 6b 65 72 20 3d 20 6e  s.xGCEWorker = n
0210: 65 77 20 57 6f 72 6b 65 72 28 22 67 63 65 5f 77  ew Worker("gce_w
0220: 6f 72 6b 65 72 2e 6a 73 22 29 3b 0a 20 20 20 20  orker.js");.    
0230: 20 20 20 20 74 68 69 73 2e 78 47 43 45 57 6f 72      this.xGCEWor
0240: 6b 65 72 2e 6f 6e 6d 65 73 73 61 67 65 20 3d 20  ker.onmessage = 
0250: 66 75 6e 63 74 69 6f 6e 20 28 65 29 20 7b 0a 20  function (e) {. 
0260: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4d 65             // Me
0270: 73 73 61 67 65 73 20 72 65 63 65 69 76 65 64 20  ssages received 
0280: 66 72 6f 6d 20 74 68 65 20 57 6f 72 6b 65 72 0a  from the Worker.
0290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 68              // h
02a0: 74 74 70 73 3a 2f 2f 64 65 76 65 6c 6f 70 65 72  ttps://developer
02b0: 2e 6d 6f 7a 69 6c 6c 61 2e 6f 72 67 2f 65 6e 2d  .mozilla.org/en-
02c0: 55 53 2f 64 6f 63 73 2f 57 65 62 2f 41 50 49 2f  US/docs/Web/API/
02d0: 4d 65 73 73 61 67 65 45 76 65 6e 74 0a 20 20 20  MessageEvent.   
02e0: 20 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a 20           try {. 
02f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0300: 68 69 73 2e 6e 4c 61 73 74 54 69 6d 65 57 6f 72  his.nLastTimeWor
0310: 6b 65 72 52 65 73 70 6f 6e 73 65 20 3d 20 44 61  kerResponse = Da
0320: 74 65 2e 6e 6f 77 28 29 3b 0a 20 20 20 20 20 20  te.now();.      
0330: 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 7b 73            let {s
0340: 41 63 74 69 6f 6e 44 6f 6e 65 2c 20 72 65 73 75  ActionDone, resu
0350: 6c 74 2c 20 6f 49 6e 66 6f 2c 20 62 45 6e 64 2c  lt, oInfo, bEnd,
0360: 20 62 45 72 72 6f 72 7d 20 3d 20 65 2e 64 61 74   bError} = e.dat
0370: 61 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  a;.             
0380: 20 20 20 69 66 20 28 62 45 72 72 6f 72 29 20 7b     if (bError) {
0390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
03a0: 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67       console.log
03b0: 28 72 65 73 75 6c 74 29 3b 0a 20 20 20 20 20 20  (result);.      
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
03d0: 6e 73 6f 6c 65 2e 6c 6f 67 28 6f 49 6e 66 6f 29  nsole.log(oInfo)
03e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
03f0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 73 77 69 74 63 68 20 28 73 41 63 74 69 6f 6e 44  switch (sActionD
0430: 6f 6e 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20  one) {.         
0440: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
0450: 22 69 6e 69 74 22 3a 0a 20 20 20 20 20 20 20 20  "init":.        
0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0470: 73 74 6f 72 65 47 43 4f 70 74 69 6f 6e 73 28 72  storeGCOptions(r
0480: 65 73 75 6c 74 29 3b 0a 20 20 20 20 20 20 20 20  esult);.        
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04a0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
04b0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
04c0: 22 70 61 72 73 65 22 3a 0a 20 20 20 20 20 20 20  "parse":.       
04d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
04e0: 65 20 22 70 61 72 73 65 41 6e 64 53 70 65 6c 6c  e "parseAndSpell
04f0: 63 68 65 63 6b 22 3a 0a 20 20 20 20 20 20 20 20  check":.        
0500: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
0510: 20 22 70 61 72 73 65 41 6e 64 53 70 65 6c 6c 63   "parseAndSpellc
0520: 68 65 63 6b 31 22 3a 0a 20 20 20 20 20 20 20 20  heck1":.        
0530: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
0540: 20 22 70 61 72 73 65 46 75 6c 6c 22 3a 0a 20 20   "parseFull":.  
0550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0560: 20 20 63 61 73 65 20 22 67 65 74 4c 69 73 74 4f    case "getListO
0570: 66 54 6f 6b 65 6e 73 22 3a 0a 20 20 20 20 20 20  fTokens":.      
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
0590: 73 65 20 22 67 65 74 53 70 65 6c 6c 53 75 67 67  se "getSpellSugg
05a0: 65 73 74 69 6f 6e 73 22 3a 0a 20 20 20 20 20 20  estions":.      
05b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
05c0: 73 65 20 22 67 65 74 56 65 72 62 22 3a 0a 20 20  se "getVerb":.  
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05e0: 20 20 20 20 20 20 2f 2f 20 73 65 6e 64 20 72 65        // send re
05f0: 73 75 6c 74 20 74 6f 20 63 6f 6e 74 65 6e 74 20  sult to content 
0600: 73 63 72 69 70 74 0a 20 20 20 20 20 20 20 20 20  script.         
0610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
0620: 66 20 28 74 79 70 65 6f 66 28 6f 49 6e 66 6f 2e  f (typeof(oInfo.
0630: 69 52 65 74 75 72 6e 50 6f 72 74 29 20 3d 3d 3d  iReturnPort) ===
0640: 20 22 6e 75 6d 62 65 72 22 29 20 7b 0a 20 20 20   "number") {.   
0650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0660: 20 20 20 20 20 20 20 20 20 6c 65 74 20 78 50 6f           let xPo
0670: 72 74 20 3d 20 64 43 6f 6e 6e 78 2e 67 65 74 28  rt = dConnx.get(
0680: 6f 49 6e 66 6f 2e 69 52 65 74 75 72 6e 50 6f 72  oInfo.iReturnPor
0690: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t);.            
06a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06b0: 78 50 6f 72 74 2e 70 6f 73 74 4d 65 73 73 61 67  xPort.postMessag
06c0: 65 28 65 2e 64 61 74 61 29 3b 0a 20 20 20 20 20  e(e.data);.     
06d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06e0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0700: 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e          console.
0710: 6c 6f 67 28 22 5b 62 61 63 6b 67 72 6f 75 6e 64  log("[background
0720: 5d 20 64 6f 6e e2 80 99 74 20 6b 6e 6f 77 20 77  ] don...t know w
0730: 68 65 72 65 20 74 6f 20 73 65 6e 64 20 72 65 73  here to send res
0740: 75 6c 74 73 22 29 3b 0a 20 20 20 20 20 20 20 20  ults");.        
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0760: 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28      console.log(
0770: 65 2e 64 61 74 61 29 3b 0a 20 20 20 20 20 20 20  e.data);.       
0780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0790: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
07a0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
07b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
07c0: 20 20 20 20 20 20 63 61 73 65 20 22 74 65 78 74        case "text
07d0: 54 6f 54 65 73 74 22 3a 0a 20 20 20 20 20 20 20  ToTest":.       
07e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
07f0: 65 20 22 66 75 6c 6c 54 65 73 74 73 22 3a 0a 20  e "fullTests":. 
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0810: 20 20 20 20 20 20 20 2f 2f 20 73 65 6e 64 20 72         // send r
0820: 65 73 75 6c 74 20 74 6f 20 70 61 6e 65 6c 0a 20  esult to panel. 
0830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0840: 20 20 20 20 20 20 20 62 72 6f 77 73 65 72 2e 72         browser.r
0850: 75 6e 74 69 6d 65 2e 73 65 6e 64 4d 65 73 73 61  untime.sendMessa
0860: 67 65 28 65 2e 64 61 74 61 29 3b 0a 20 20 20 20  ge(e.data);.    
0870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0880: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
0890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
08a0: 61 73 65 20 22 67 65 74 4f 70 74 69 6f 6e 73 22  ase "getOptions"
08b0: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
08c0: 20 20 20 20 20 20 63 61 73 65 20 22 67 65 74 44        case "getD
08d0: 65 66 61 75 6c 74 4f 70 74 69 6f 6e 73 22 3a 0a  efaultOptions":.
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08f0: 20 20 20 20 63 61 73 65 20 22 72 65 73 65 74 4f      case "resetO
0900: 70 74 69 6f 6e 73 22 3a 0a 20 20 20 20 20 20 20  ptions":.       
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0920: 20 2f 2f 20 73 65 6e 64 20 72 65 73 75 6c 74 20   // send result 
0930: 74 6f 20 70 61 6e 65 6c 0a 20 20 20 20 20 20 20  to panel.       
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0950: 20 73 74 6f 72 65 47 43 4f 70 74 69 6f 6e 73 28   storeGCOptions(
0960: 72 65 73 75 6c 74 29 3b 0a 20 20 20 20 20 20 20  result);.       
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0980: 20 62 72 6f 77 73 65 72 2e 72 75 6e 74 69 6d 65   browser.runtime
0990: 2e 73 65 6e 64 4d 65 73 73 61 67 65 28 65 2e 64  .sendMessage(e.d
09a0: 61 74 61 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ata);.          
09b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
09c0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  eak;.           
09d0: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 73           case "s
09e0: 65 74 4f 70 74 69 6f 6e 73 22 3a 0a 20 20 20 20  etOptions":.    
09f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a00: 63 61 73 65 20 22 73 65 74 4f 70 74 69 6f 6e 22  case "setOption"
0a10: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
0a20: 20 20 20 20 20 20 20 20 20 20 73 74 6f 72 65 47            storeG
0a30: 43 4f 70 74 69 6f 6e 73 28 72 65 73 75 6c 74 29  COptions(result)
0a40: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
0a50: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
0a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0a70: 20 20 20 20 20 63 61 73 65 20 22 73 65 74 44 69       case "setDi
0a80: 63 74 69 6f 6e 61 72 79 22 3a 0a 20 20 20 20 20  ctionary":.     
0a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
0aa0: 61 73 65 20 22 73 65 74 44 69 63 74 69 6f 6e 61  ase "setDictiona
0ab0: 72 79 4f 6e 4f 66 66 22 3a 0a 20 20 20 20 20 20  ryOnOff":.      
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ad0: 20 20 2f 2f 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28    //console.log(
0ae0: 22 5b 62 61 63 6b 67 72 6f 75 6e 64 5d 20 22 20  "[background] " 
0af0: 2b 20 73 41 63 74 69 6f 6e 44 6f 6e 65 20 2b 20  + sActionDone + 
0b00: 22 3a 20 22 20 2b 20 72 65 73 75 6c 74 29 3b 0a  ": " + result);.
0b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b20: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
0b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b40: 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b60: 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28      console.log(
0b70: 22 5b 62 61 63 6b 67 72 6f 75 6e 64 5d 20 55 6e  "[background] Un
0b80: 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 3a 20 22  known command: "
0b90: 20 2b 20 73 41 63 74 69 6f 6e 44 6f 6e 65 29 3b   + sActionDone);
0ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0bb0: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65           console
0bc0: 2e 6c 6f 67 28 65 2e 64 61 74 61 29 3b 0a 20 20  .log(e.data);.  
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
0be0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
0bf0: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
0c00: 28 65 72 72 6f 72 29 20 7b 0a 20 20 20 20 20 20  (error) {.      
0c10: 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 45 72            showEr
0c20: 72 6f 72 28 65 72 72 6f 72 29 3b 0a 20 20 20 20  ror(error);.    
0c30: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
0c40: 6f 6c 65 2e 6c 6f 67 28 65 2e 64 61 74 61 29 3b  ole.log(e.data);
0c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
0c60: 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 7d 2c         };.    },
0c70: 0a 0a 20 20 20 20 67 65 74 54 69 6d 65 53 69 6e  ..    getTimeSin
0c80: 63 65 4c 61 73 74 52 65 73 70 6f 6e 73 65 3a 20  ceLastResponse: 
0c90: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20  function () {.  
0ca0: 20 20 20 20 20 20 2f 2f 20 72 65 73 75 6c 74 20        // result 
0cb0: 69 6e 20 73 65 63 6f 6e 64 73 0a 20 20 20 20 20  in seconds.     
0cc0: 20 20 20 72 65 74 75 72 6e 20 4d 61 74 68 2e 66     return Math.f
0cd0: 6c 6f 6f 72 28 28 44 61 74 65 2e 6e 6f 77 28 29  loor((Date.now()
0ce0: 20 2d 20 74 68 69 73 2e 6e 4c 61 73 74 54 69 6d   - this.nLastTim
0cf0: 65 57 6f 72 6b 65 72 52 65 73 70 6f 6e 73 65 29  eWorkerResponse)
0d00: 20 2f 20 31 30 30 30 29 3b 0a 20 20 20 20 7d 2c   / 1000);.    },
0d10: 0a 0a 20 20 20 20 72 65 73 74 61 72 74 3a 20 66  ..    restart: f
0d20: 75 6e 63 74 69 6f 6e 20 28 6e 44 65 6c 61 79 3d  unction (nDelay=
0d30: 35 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20  5) {.        if 
0d40: 28 74 68 69 73 2e 67 65 74 54 69 6d 65 53 69 6e  (this.getTimeSin
0d50: 63 65 4c 61 73 74 52 65 73 70 6f 6e 73 65 28 29  ceLastResponse()
0d60: 20 3c 3d 20 6e 44 65 6c 61 79 29 20 7b 0a 20 20   <= nDelay) {.  
0d70: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c            consol
0d80: 65 2e 6c 6f 67 28 22 57 6f 72 6b 65 72 20 6e 6f  e.log("Worker no
0d90: 74 20 72 65 73 74 61 72 74 65 64 2e 20 57 6f 72  t restarted. Wor
0da0: 6b 65 64 20 22 2c 20 6e 44 65 6c 61 79 2c 20 22  ked ", nDelay, "
0db0: 20 73 65 63 6f 6e 64 73 20 61 67 6f 2e 22 29 3b   seconds ago.");
0dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
0dd0: 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  urn false;.     
0de0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20     }.        if 
0df0: 28 74 68 69 73 2e 78 47 43 45 57 6f 72 6b 65 72  (this.xGCEWorker
0e00: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
0e10: 74 68 69 73 2e 78 47 43 45 57 6f 72 6b 65 72 2e  this.xGCEWorker.
0e20: 74 65 72 6d 69 6e 61 74 65 28 29 3b 0a 20 20 20  terminate();.   
0e30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 74       }.        t
0e40: 68 69 73 2e 73 74 61 72 74 28 29 3b 0a 20 20 20  his.start();.   
0e50: 20 20 20 20 20 6f 49 6e 69 74 48 61 6e 64 6c 65       oInitHandle
0e60: 72 2e 69 6e 69 74 47 72 61 6d 6d 61 72 43 68 65  r.initGrammarChe
0e70: 63 6b 65 72 28 29 3b 0a 20 20 20 20 20 20 20 20  cker();.        
0e80: 73 65 6e 64 43 6f 6d 6d 61 6e 64 54 6f 41 6c 6c  sendCommandToAll
0e90: 54 61 62 73 28 22 77 6f 72 6b 65 72 52 65 73 74  Tabs("workerRest
0ea0: 61 72 74 65 64 22 29 3b 0a 20 20 20 20 20 20 20  arted");.       
0eb0: 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 57 6f   console.log("Wo
0ec0: 72 6b 65 72 20 72 65 73 74 61 72 74 65 64 2e 22  rker restarted."
0ed0: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
0ee0: 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 2c 0a 0a  n true;.    },..
0ef0: 20 20 20 20 61 64 64 54 61 73 6b 3a 20 66 75 6e      addTask: fun
0f00: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20  ction () {.     
0f10: 20 20 20 2f 2f 0a 20 20 20 20 7d 2c 0a 0a 20 20     //.    },..  
0f20: 20 20 63 6c 6f 73 65 54 61 73 6b 3a 20 66 75 6e    closeTask: fun
0f30: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20  ction () {.     
0f40: 20 20 20 2f 2f 0a 20 20 20 20 7d 0a 7d 0a 0a 0a     //.    }.}...
0f50: 63 6f 6e 73 74 20 6f 49 6e 69 74 48 61 6e 64 6c  const oInitHandl
0f60: 65 72 20 3d 20 7b 0a 0a 20 20 20 20 69 6e 69 74  er = {..    init
0f70: 55 49 4f 70 74 69 6f 6e 73 3a 20 66 75 6e 63 74  UIOptions: funct
0f80: 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20  ion () {.       
0f90: 20 69 66 20 28 62 43 68 72 6f 6d 65 29 20 7b 0a   if (bChrome) {.
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 6f 77              brow
0fb0: 73 65 72 2e 73 74 6f 72 61 67 65 2e 6c 6f 63 61  ser.storage.loca
0fc0: 6c 2e 67 65 74 28 22 75 69 5f 6f 70 74 69 6f 6e  l.get("ui_option
0fd0: 73 22 2c 20 74 68 69 73 2e 5f 69 6e 69 74 55 49  s", this._initUI
0fe0: 4f 70 74 69 6f 6e 73 29 3b 0a 20 20 20 20 20 20  Options);.      
0ff0: 20 20 20 20 20 20 62 72 6f 77 73 65 72 2e 73 74        browser.st
1000: 6f 72 61 67 65 2e 6c 6f 63 61 6c 2e 67 65 74 28  orage.local.get(
1010: 22 61 75 74 6f 72 65 66 72 65 73 68 5f 6f 70 74  "autorefresh_opt
1020: 69 6f 6e 22 2c 20 74 68 69 73 2e 5f 69 6e 69 74  ion", this._init
1030: 55 49 4f 70 74 69 6f 6e 73 29 3b 0a 20 20 20 20  UIOptions);.    
1040: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a          return;.
1050: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1060: 20 20 62 72 6f 77 73 65 72 2e 73 74 6f 72 61 67    browser.storag
1070: 65 2e 6c 6f 63 61 6c 2e 67 65 74 28 22 75 69 5f  e.local.get("ui_
1080: 6f 70 74 69 6f 6e 73 22 29 2e 74 68 65 6e 28 74  options").then(t
1090: 68 69 73 2e 5f 69 6e 69 74 55 49 4f 70 74 69 6f  his._initUIOptio
10a0: 6e 73 2c 20 73 68 6f 77 45 72 72 6f 72 29 3b 0a  ns, showError);.
10b0: 20 20 20 20 20 20 20 20 62 72 6f 77 73 65 72 2e          browser.
10c0: 73 74 6f 72 61 67 65 2e 6c 6f 63 61 6c 2e 67 65  storage.local.ge
10d0: 74 28 22 61 75 74 6f 72 65 66 72 65 73 68 5f 6f  t("autorefresh_o
10e0: 70 74 69 6f 6e 22 29 2e 74 68 65 6e 28 74 68 69  ption").then(thi
10f0: 73 2e 5f 69 6e 69 74 55 49 4f 70 74 69 6f 6e 73  s._initUIOptions
1100: 2c 20 73 68 6f 77 45 72 72 6f 72 29 3b 0a 20 20  , showError);.  
1110: 20 20 7d 2c 0a 0a 20 20 20 20 69 6e 69 74 47 72    },..    initGr
1120: 61 6d 6d 61 72 43 68 65 63 6b 65 72 3a 20 66 75  ammarChecker: fu
1130: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20  nction () {.    
1140: 20 20 20 20 69 66 20 28 62 43 68 72 6f 6d 65 29      if (bChrome)
1150: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62   {.            b
1160: 72 6f 77 73 65 72 2e 73 74 6f 72 61 67 65 2e 6c  rowser.storage.l
1170: 6f 63 61 6c 2e 67 65 74 28 22 67 63 5f 6f 70 74  ocal.get("gc_opt
1180: 69 6f 6e 73 22 2c 20 74 68 69 73 2e 5f 69 6e 69  ions", this._ini
1190: 74 47 72 61 6d 6d 61 72 43 68 65 63 6b 65 72 29  tGrammarChecker)
11a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
11b0: 6f 77 73 65 72 2e 73 74 6f 72 61 67 65 2e 6c 6f  owser.storage.lo
11c0: 63 61 6c 2e 67 65 74 28 22 6d 61 69 6e 5f 64 69  cal.get("main_di
11d0: 63 5f 6e 61 6d 65 22 2c 20 74 68 69 73 2e 5f 73  c_name", this._s
11e0: 65 74 53 70 65 6c 6c 69 6e 67 44 69 63 74 69 6f  etSpellingDictio
11f0: 6e 61 72 69 65 73 29 3b 0a 20 20 20 20 20 20 20  naries);.       
1200: 20 20 20 20 20 62 72 6f 77 73 65 72 2e 73 74 6f       browser.sto
1210: 72 61 67 65 2e 6c 6f 63 61 6c 2e 67 65 74 28 22  rage.local.get("
1220: 70 65 72 73 6f 6e 61 6c 5f 64 69 63 74 69 6f 6e  personal_diction
1230: 61 72 79 22 2c 20 74 68 69 73 2e 5f 73 65 74 53  ary", this._setS
1240: 70 65 6c 6c 69 6e 67 44 69 63 74 69 6f 6e 61 72  pellingDictionar
1250: 69 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ies);.          
1260: 20 20 62 72 6f 77 73 65 72 2e 73 74 6f 72 61 67    browser.storag
1270: 65 2e 6c 6f 63 61 6c 2e 67 65 74 28 22 63 6f 6d  e.local.get("com
1280: 6d 75 6e 69 74 79 5f 64 69 63 74 69 6f 6e 61 72  munity_dictionar
1290: 79 22 2c 20 74 68 69 73 2e 5f 73 65 74 53 70 65  y", this._setSpe
12a0: 6c 6c 69 6e 67 44 69 63 74 69 6f 6e 61 72 69 65  llingDictionarie
12b0: 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s);.            
12c0: 62 72 6f 77 73 65 72 2e 73 74 6f 72 61 67 65 2e  browser.storage.
12d0: 6c 6f 63 61 6c 2e 67 65 74 28 22 6f 50 65 72 73  local.get("oPers
12e0: 6f 6e 61 6c 44 69 63 74 69 6f 6e 61 72 79 22 2c  onalDictionary",
12f0: 20 74 68 69 73 2e 5f 73 65 74 53 70 65 6c 6c 69   this._setSpelli
1300: 6e 67 44 69 63 74 69 6f 6e 61 72 69 65 73 29 3b  ngDictionaries);
1310: 20 2f 2f 20 64 65 70 72 65 63 61 74 65 64 0a 20   // deprecated. 
1320: 20 20 20 20 20 20 20 20 20 20 20 62 72 6f 77 73             brows
1330: 65 72 2e 73 74 6f 72 61 67 65 2e 6c 6f 63 61 6c  er.storage.local
1340: 2e 67 65 74 28 22 73 63 5f 6f 70 74 69 6f 6e 73  .get("sc_options
1350: 22 2c 20 74 68 69 73 2e 5f 69 6e 69 74 53 43 4f  ", this._initSCO
1360: 70 74 69 6f 6e 73 29 3b 0a 20 20 20 20 20 20 20  ptions);.       
1370: 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20       return;.   
1380: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62       }.        b
1390: 72 6f 77 73 65 72 2e 73 74 6f 72 61 67 65 2e 6c  rowser.storage.l
13a0: 6f 63 61 6c 2e 67 65 74 28 22 67 63 5f 6f 70 74  ocal.get("gc_opt
13b0: 69 6f 6e 73 22 29 2e 74 68 65 6e 28 74 68 69 73  ions").then(this
13c0: 2e 5f 69 6e 69 74 47 72 61 6d 6d 61 72 43 68 65  ._initGrammarChe
13d0: 63 6b 65 72 2c 20 73 68 6f 77 45 72 72 6f 72 29  cker, showError)
13e0: 3b 0a 20 20 20 20 20 20 20 20 62 72 6f 77 73 65  ;.        browse
13f0: 72 2e 73 74 6f 72 61 67 65 2e 6c 6f 63 61 6c 2e  r.storage.local.
1400: 67 65 74 28 22 6d 61 69 6e 5f 64 69 63 5f 6e 61  get("main_dic_na
1410: 6d 65 22 2c 20 74 68 69 73 2e 5f 73 65 74 53 70  me", this._setSp
1420: 65 6c 6c 69 6e 67 44 69 63 74 69 6f 6e 61 72 69  ellingDictionari
1430: 65 73 29 3b 0a 20 20 20 20 20 20 20 20 62 72 6f  es);.        bro
1440: 77 73 65 72 2e 73 74 6f 72 61 67 65 2e 6c 6f 63  wser.storage.loc
1450: 61 6c 2e 67 65 74 28 22 70 65 72 73 6f 6e 61 6c  al.get("personal
1460: 5f 64 69 63 74 69 6f 6e 61 72 79 22 29 2e 74 68  _dictionary").th
1470: 65 6e 28 74 68 69 73 2e 5f 73 65 74 53 70 65 6c  en(this._setSpel
1480: 6c 69 6e 67 44 69 63 74 69 6f 6e 61 72 69 65 73  lingDictionaries
1490: 2c 20 73 68 6f 77 45 72 72 6f 72 29 3b 0a 20 20  , showError);.  
14a0: 20 20 20 20 20 20 62 72 6f 77 73 65 72 2e 73 74        browser.st
14b0: 6f 72 61 67 65 2e 6c 6f 63 61 6c 2e 67 65 74 28  orage.local.get(
14c0: 22 63 6f 6d 6d 75 6e 69 74 79 5f 64 69 63 74 69  "community_dicti
14d0: 6f 6e 61 72 79 22 29 2e 74 68 65 6e 28 74 68 69  onary").then(thi
14e0: 73 2e 5f 73 65 74 53 70 65 6c 6c 69 6e 67 44 69  s._setSpellingDi
14f0: 63 74 69 6f 6e 61 72 69 65 73 2c 20 73 68 6f 77  ctionaries, show
1500: 45 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  Error);.        
1510: 62 72 6f 77 73 65 72 2e 73 74 6f 72 61 67 65 2e  browser.storage.
1520: 6c 6f 63 61 6c 2e 67 65 74 28 22 6f 50 65 72 73  local.get("oPers
1530: 6f 6e 61 6c 44 69 63 74 69 6f 6e 61 72 79 22 29  onalDictionary")
1540: 2e 74 68 65 6e 28 74 68 69 73 2e 5f 73 65 74 53  .then(this._setS
1550: 70 65 6c 6c 69 6e 67 44 69 63 74 69 6f 6e 61 72  pellingDictionar
1560: 69 65 73 2c 20 73 68 6f 77 45 72 72 6f 72 29 3b  ies, showError);
1570: 20 2f 2f 20 64 65 70 72 65 63 61 74 65 64 0a 20   // deprecated. 
1580: 20 20 20 20 20 20 20 62 72 6f 77 73 65 72 2e 73         browser.s
1590: 74 6f 72 61 67 65 2e 6c 6f 63 61 6c 2e 67 65 74  torage.local.get
15a0: 28 22 73 63 5f 6f 70 74 69 6f 6e 73 22 29 2e 74  ("sc_options").t
15b0: 68 65 6e 28 74 68 69 73 2e 5f 69 6e 69 74 53 43  hen(this._initSC
15c0: 4f 70 74 69 6f 6e 73 2c 20 73 68 6f 77 45 72 72  Options, showErr
15d0: 6f 72 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  or);.    },..   
15e0: 20 5f 69 6e 69 74 55 49 4f 70 74 69 6f 6e 73 3a   _initUIOptions:
15f0: 20 66 75 6e 63 74 69 6f 6e 20 28 6f 53 61 76 65   function (oSave
1600: 64 4f 70 74 69 6f 6e 73 29 20 7b 0a 20 20 20 20  dOptions) {.    
1610: 20 20 20 20 69 66 20 28 21 6f 53 61 76 65 64 4f      if (!oSavedO
1620: 70 74 69 6f 6e 73 2e 68 61 73 4f 77 6e 50 72 6f  ptions.hasOwnPro
1630: 70 65 72 74 79 28 22 75 69 5f 6f 70 74 69 6f 6e  perty("ui_option
1640: 73 22 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20  s")) {.         
1650: 20 20 20 62 72 6f 77 73 65 72 2e 73 74 6f 72 61     browser.stora
1660: 67 65 2e 6c 6f 63 61 6c 2e 73 65 74 28 7b 22 75  ge.local.set({"u
1670: 69 5f 6f 70 74 69 6f 6e 73 22 3a 20 7b 0a 20 20  i_options": {.  
1680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
1690: 78 74 61 72 65 61 3a 20 74 72 75 65 2c 0a 20 20  xtarea: true,.  
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 64                ed
16b0: 69 74 61 62 6c 65 6e 6f 64 65 3a 20 74 72 75 65  itablenode: true
16c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 7d 29  .            }})
16d0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
16e0: 20 20 20 20 69 66 20 28 21 6f 53 61 76 65 64 4f      if (!oSavedO
16f0: 70 74 69 6f 6e 73 2e 68 61 73 4f 77 6e 50 72 6f  ptions.hasOwnPro
1700: 70 65 72 74 79 28 22 61 75 74 6f 72 65 66 72 65  perty("autorefre
1710: 73 68 5f 6f 70 74 69 6f 6e 22 29 29 20 7b 0a 20  sh_option")) {. 
1720: 20 20 20 20 20 20 20 20 20 20 20 62 72 6f 77 73             brows
1730: 65 72 2e 73 74 6f 72 61 67 65 2e 6c 6f 63 61 6c  er.storage.local
1740: 2e 73 65 74 28 7b 22 61 75 74 6f 72 65 66 72 65  .set({"autorefre
1750: 73 68 5f 6f 70 74 69 6f 6e 22 3a 20 74 72 75 65  sh_option": true
1760: 7d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  });.        }.  
1770: 20 20 7d 2c 0a 0a 20 20 20 20 5f 69 6e 69 74 47    },..    _initG
1780: 72 61 6d 6d 61 72 43 68 65 63 6b 65 72 3a 20 66  rammarChecker: f
1790: 75 6e 63 74 69 6f 6e 20 28 6f 53 61 76 65 64 4f  unction (oSavedO
17a0: 70 74 69 6f 6e 73 29 20 7b 0a 20 20 20 20 20 20  ptions) {.      
17b0: 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20 20    try {.        
17c0: 20 20 20 20 6c 65 74 20 64 4f 70 74 69 6f 6e 73      let dOptions
17d0: 20 3d 20 28 6f 53 61 76 65 64 4f 70 74 69 6f 6e   = (oSavedOption
17e0: 73 2e 68 61 73 4f 77 6e 50 72 6f 70 65 72 74 79  s.hasOwnProperty
17f0: 28 22 67 63 5f 6f 70 74 69 6f 6e 73 22 29 29 20  ("gc_options")) 
1800: 3f 20 6f 53 61 76 65 64 4f 70 74 69 6f 6e 73 2e  ? oSavedOptions.
1810: 67 63 5f 6f 70 74 69 6f 6e 73 20 3a 20 6e 75 6c  gc_options : nul
1820: 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  l;.            i
1830: 66 20 28 64 4f 70 74 69 6f 6e 73 20 21 3d 3d 20  f (dOptions !== 
1840: 6e 75 6c 6c 20 26 26 20 4f 62 6a 65 63 74 2e 67  null && Object.g
1850: 65 74 4f 77 6e 50 72 6f 70 65 72 74 79 4e 61 6d  etOwnPropertyNam
1860: 65 73 28 64 4f 70 74 69 6f 6e 73 29 2e 6c 65 6e  es(dOptions).len
1870: 67 74 68 20 3d 3d 20 30 29 20 7b 0a 20 20 20 20  gth == 0) {.    
1880: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
1890: 6f 6c 65 2e 6c 6f 67 28 22 23 20 45 72 72 6f 72  ole.log("# Error
18a0: 3a 20 74 68 65 20 73 61 76 65 64 20 6f 70 74 69  : the saved opti
18b0: 6f 6e 73 20 77 61 73 20 61 6e 20 65 6d 70 74 79  ons was an empty
18c0: 20 6f 62 6a 65 63 74 2e 22 29 3b 0a 20 20 20 20   object.");.    
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 64 4f 70 74              dOpt
18e0: 69 6f 6e 73 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20  ions = null;.   
18f0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1900: 20 20 20 20 20 20 20 6f 57 6f 72 6b 65 72 48 61         oWorkerHa
1910: 6e 64 6c 65 72 2e 78 47 43 45 57 6f 72 6b 65 72  ndler.xGCEWorker
1920: 2e 70 6f 73 74 4d 65 73 73 61 67 65 28 7b 0a 20  .postMessage({. 
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1940: 43 6f 6d 6d 61 6e 64 3a 20 22 69 6e 69 74 22 2c  Command: "init",
1950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1960: 20 6f 50 61 72 61 6d 3a 20 7b 73 45 78 74 65 6e   oParam: {sExten
1970: 73 69 6f 6e 50 61 74 68 3a 20 62 72 6f 77 73 65  sionPath: browse
1980: 72 2e 65 78 74 65 6e 73 69 6f 6e 2e 67 65 74 55  r.extension.getU
1990: 52 4c 28 22 22 29 2c 20 64 4f 70 74 69 6f 6e 73  RL(""), dOptions
19a0: 3a 20 64 4f 70 74 69 6f 6e 73 2c 20 73 43 6f 6e  : dOptions, sCon
19b0: 74 65 78 74 3a 20 22 46 69 72 65 66 6f 78 22 7d  text: "Firefox"}
19c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
19d0: 20 20 6f 49 6e 66 6f 3a 20 7b 7d 0a 20 20 20 20    oInfo: {}.    
19e0: 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20          });.    
19f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 61      }.        ca
1a00: 74 63 68 20 28 65 29 20 7b 0a 20 20 20 20 20 20  tch (e) {.      
1a10: 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f        console.lo
1a20: 67 28 22 69 6e 69 74 47 72 61 6d 6d 61 72 43 68  g("initGrammarCh
1a30: 65 63 6b 65 72 20 66 61 69 6c 65 64 22 29 3b 0a  ecker failed");.
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 77              show
1a50: 45 72 72 6f 72 28 65 29 3b 0a 20 20 20 20 20 20  Error(e);.      
1a60: 20 20 7d 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20    }.    },..    
1a70: 5f 73 65 74 53 70 65 6c 6c 69 6e 67 44 69 63 74  _setSpellingDict
1a80: 69 6f 6e 61 72 69 65 73 3a 20 66 75 6e 63 74 69  ionaries: functi
1a90: 6f 6e 20 28 6f 44 61 74 61 29 20 7b 0a 20 20 20  on (oData) {.   
1aa0: 20 20 20 20 20 69 66 20 28 6f 44 61 74 61 2e 68       if (oData.h
1ab0: 61 73 4f 77 6e 50 72 6f 70 65 72 74 79 28 22 6f  asOwnProperty("o
1ac0: 50 65 72 73 6f 6e 61 6c 44 69 63 74 69 6f 6e 61  PersonalDictiona
1ad0: 72 79 22 29 29 20 7b 0a 20 20 20 20 20 20 20 20  ry")) {.        
1ae0: 20 20 20 20 2f 2f 20 64 65 70 72 65 63 61 74 65      // deprecate
1af0: 64 20 28 74 6f 20 62 65 20 72 65 6d 6f 76 65 64  d (to be removed
1b00: 20 69 6e 20 32 30 32 30 29 0a 20 20 20 20 20 20   in 2020).      
1b10: 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f        console.lo
1b20: 67 28 22 70 65 72 73 6f 6e 61 6c 20 64 69 63 74  g("personal dict
1b30: 69 6f 6e 61 72 79 20 6d 69 67 72 61 74 69 6f 6e  ionary migration
1b40: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
1b50: 62 72 6f 77 73 65 72 2e 73 74 6f 72 61 67 65 2e  browser.storage.
1b60: 6c 6f 63 61 6c 2e 73 65 74 28 7b 20 22 70 65 72  local.set({ "per
1b70: 73 6f 6e 61 6c 5f 64 69 63 74 69 6f 6e 61 72 79  sonal_dictionary
1b80: 22 3a 20 6f 44 61 74 61 5b 22 6f 50 65 72 73 6f  ": oData["oPerso
1b90: 6e 61 6c 44 69 63 74 69 6f 6e 61 72 79 22 5d 20  nalDictionary"] 
1ba0: 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  });.            
1bb0: 6f 57 6f 72 6b 65 72 48 61 6e 64 6c 65 72 2e 78  oWorkerHandler.x
1bc0: 47 43 45 57 6f 72 6b 65 72 2e 70 6f 73 74 4d 65  GCEWorker.postMe
1bd0: 73 73 61 67 65 28 7b 20 73 43 6f 6d 6d 61 6e 64  ssage({ sCommand
1be0: 3a 20 22 73 65 74 44 69 63 74 69 6f 6e 61 72 79  : "setDictionary
1bf0: 22 2c 20 6f 50 61 72 61 6d 3a 20 7b 20 73 44 69  ", oParam: { sDi
1c00: 63 74 69 6f 6e 61 72 79 3a 20 22 70 65 72 73 6f  ctionary: "perso
1c10: 6e 61 6c 22 2c 20 6f 44 69 63 74 3a 20 6f 44 61  nal", oDict: oDa
1c20: 74 61 5b 22 6f 50 65 72 73 6f 6e 61 6c 44 69 63  ta["oPersonalDic
1c30: 74 69 6f 6e 61 72 79 22 5d 20 7d 2c 20 6f 49 6e  tionary"] }, oIn
1c40: 66 6f 3a 20 7b 7d 20 7d 29 3b 0a 20 20 20 20 20  fo: {} });.     
1c50: 20 20 20 20 20 20 20 62 72 6f 77 73 65 72 2e 73         browser.s
1c60: 74 6f 72 61 67 65 2e 6c 6f 63 61 6c 2e 72 65 6d  torage.local.rem
1c70: 6f 76 65 28 22 6f 50 65 72 73 6f 6e 61 6c 44 69  ove("oPersonalDi
1c80: 63 74 69 6f 6e 61 72 79 22 29 3b 0a 20 20 20 20  ctionary");.    
1c90: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1ca0: 20 28 6f 44 61 74 61 2e 68 61 73 4f 77 6e 50 72   (oData.hasOwnPr
1cb0: 6f 70 65 72 74 79 28 22 6d 61 69 6e 5f 64 69 63  operty("main_dic
1cc0: 5f 6e 61 6d 65 22 29 29 20 7b 0a 20 20 20 20 20  _name")) {.     
1cd0: 20 20 20 20 20 20 20 6f 57 6f 72 6b 65 72 48 61         oWorkerHa
1ce0: 6e 64 6c 65 72 2e 78 47 43 45 57 6f 72 6b 65 72  ndler.xGCEWorker
1cf0: 2e 70 6f 73 74 4d 65 73 73 61 67 65 28 7b 20 73  .postMessage({ s
1d00: 43 6f 6d 6d 61 6e 64 3a 20 22 73 65 74 44 69 63  Command: "setDic
1d10: 74 69 6f 6e 61 72 79 22 2c 20 6f 50 61 72 61 6d  tionary", oParam
1d20: 3a 20 7b 20 73 44 69 63 74 69 6f 6e 61 72 79 3a  : { sDictionary:
1d30: 20 22 6d 61 69 6e 22 2c 20 6f 44 69 63 74 3a 20   "main", oDict: 
1d40: 6f 44 61 74 61 5b 22 6d 61 69 6e 5f 64 69 63 5f  oData["main_dic_
1d50: 6e 61 6d 65 22 5d 20 7d 2c 20 6f 49 6e 66 6f 3a  name"] }, oInfo:
1d60: 20 7b 73 45 78 74 50 61 74 68 3a 20 62 72 6f 77   {sExtPath: brow
1d70: 73 65 72 2e 65 78 74 65 6e 73 69 6f 6e 2e 67 65  ser.extension.ge
1d80: 74 55 52 4c 28 22 22 29 7d 20 7d 29 3b 0a 20 20  tURL("")} });.  
1d90: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1da0: 69 66 20 28 6f 44 61 74 61 2e 68 61 73 4f 77 6e  if (oData.hasOwn
1db0: 50 72 6f 70 65 72 74 79 28 22 63 6f 6d 6d 75 6e  Property("commun
1dc0: 69 74 79 5f 64 69 63 74 69 6f 6e 61 72 79 22 29  ity_dictionary")
1dd0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
1de0: 6f 57 6f 72 6b 65 72 48 61 6e 64 6c 65 72 2e 78  oWorkerHandler.x
1df0: 47 43 45 57 6f 72 6b 65 72 2e 70 6f 73 74 4d 65  GCEWorker.postMe
1e00: 73 73 61 67 65 28 7b 20 73 43 6f 6d 6d 61 6e 64  ssage({ sCommand
1e10: 3a 20 22 73 65 74 44 69 63 74 69 6f 6e 61 72 79  : "setDictionary
1e20: 22 2c 20 6f 50 61 72 61 6d 3a 20 7b 20 73 44 69  ", oParam: { sDi
1e30: 63 74 69 6f 6e 61 72 79 3a 20 22 63 6f 6d 6d 75  ctionary: "commu
1e40: 6e 69 74 79 22 2c 20 6f 44 69 63 74 3a 20 6f 44  nity", oDict: oD
1e50: 61 74 61 5b 22 63 6f 6d 6d 75 6e 69 74 79 5f 64  ata["community_d
1e60: 69 63 74 69 6f 6e 61 72 79 22 5d 20 7d 2c 20 6f  ictionary"] }, o
1e70: 49 6e 66 6f 3a 20 7b 7d 20 7d 29 3b 0a 20 20 20  Info: {} });.   
1e80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1e90: 66 20 28 6f 44 61 74 61 2e 68 61 73 4f 77 6e 50  f (oData.hasOwnP
1ea0: 72 6f 70 65 72 74 79 28 22 70 65 72 73 6f 6e 61  roperty("persona
1eb0: 6c 5f 64 69 63 74 69 6f 6e 61 72 79 22 29 29 20  l_dictionary")) 
1ec0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 57  {.            oW
1ed0: 6f 72 6b 65 72 48 61 6e 64 6c 65 72 2e 78 47 43  orkerHandler.xGC
1ee0: 45 57 6f 72 6b 65 72 2e 70 6f 73 74 4d 65 73 73  EWorker.postMess
1ef0: 61 67 65 28 7b 20 73 43 6f 6d 6d 61 6e 64 3a 20  age({ sCommand: 
1f00: 22 73 65 74 44 69 63 74 69 6f 6e 61 72 79 22 2c  "setDictionary",
1f10: 20 6f 50 61 72 61 6d 3a 20 7b 20 73 44 69 63 74   oParam: { sDict
1f20: 69 6f 6e 61 72 79 3a 20 22 70 65 72 73 6f 6e 61  ionary: "persona
1f30: 6c 22 2c 20 6f 44 69 63 74 3a 20 6f 44 61 74 61  l", oDict: oData
1f40: 5b 22 70 65 72 73 6f 6e 61 6c 5f 64 69 63 74 69  ["personal_dicti
1f50: 6f 6e 61 72 79 22 5d 20 7d 2c 20 6f 49 6e 66 6f  onary"] }, oInfo
1f60: 3a 20 7b 7d 20 7d 29 3b 0a 20 20 20 20 20 20 20  : {} });.       
1f70: 20 7d 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 5f   }.    },..    _
1f80: 69 6e 69 74 53 43 4f 70 74 69 6f 6e 73 3a 20 66  initSCOptions: f
1f90: 75 6e 63 74 69 6f 6e 20 28 6f 44 61 74 61 29 20  unction (oData) 
1fa0: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 6f  {.        if (!o
1fb0: 44 61 74 61 2e 68 61 73 4f 77 6e 50 72 6f 70 65  Data.hasOwnPrope
1fc0: 72 74 79 28 22 73 63 5f 6f 70 74 69 6f 6e 73 22  rty("sc_options"
1fd0: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  )) {.           
1fe0: 20 62 72 6f 77 73 65 72 2e 73 74 6f 72 61 67 65   browser.storage
1ff0: 2e 6c 6f 63 61 6c 2e 73 65 74 28 7b 22 73 63 5f  .local.set({"sc_
2000: 6f 70 74 69 6f 6e 73 22 3a 20 7b 0a 20 20 20 20  options": {.    
2010: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
2020: 75 6e 69 74 79 3a 20 74 72 75 65 2c 0a 20 20 20  unity: true,.   
2030: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65 72               per
2040: 73 6f 6e 61 6c 3a 20 74 72 75 65 0a 20 20 20 20  sonal: true.    
2050: 20 20 20 20 20 20 20 20 7d 7d 29 3b 0a 20 20 20          }});.   
2060: 20 20 20 20 20 20 20 20 20 6f 57 6f 72 6b 65 72           oWorker
2070: 48 61 6e 64 6c 65 72 2e 78 47 43 45 57 6f 72 6b  Handler.xGCEWork
2080: 65 72 2e 70 6f 73 74 4d 65 73 73 61 67 65 28 7b  er.postMessage({
2090: 20 73 43 6f 6d 6d 61 6e 64 3a 20 22 73 65 74 44   sCommand: "setD
20a0: 69 63 74 69 6f 6e 61 72 79 4f 6e 4f 66 66 22 2c  ictionaryOnOff",
20b0: 20 6f 50 61 72 61 6d 3a 20 7b 20 73 44 69 63 74   oParam: { sDict
20c0: 69 6f 6e 61 72 79 3a 20 22 63 6f 6d 6d 75 6e 69  ionary: "communi
20d0: 74 79 22 2c 20 62 41 63 74 69 76 61 74 65 3a 20  ty", bActivate: 
20e0: 74 72 75 65 20 7d 2c 20 6f 49 6e 66 6f 3a 20 7b  true }, oInfo: {
20f0: 7d 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  } });.          
2100: 20 20 6f 57 6f 72 6b 65 72 48 61 6e 64 6c 65 72    oWorkerHandler
2110: 2e 78 47 43 45 57 6f 72 6b 65 72 2e 70 6f 73 74  .xGCEWorker.post
2120: 4d 65 73 73 61 67 65 28 7b 20 73 43 6f 6d 6d 61  Message({ sComma
2130: 6e 64 3a 20 22 73 65 74 44 69 63 74 69 6f 6e 61  nd: "setDictiona
2140: 72 79 4f 6e 4f 66 66 22 2c 20 6f 50 61 72 61 6d  ryOnOff", oParam
2150: 3a 20 7b 20 73 44 69 63 74 69 6f 6e 61 72 79 3a  : { sDictionary:
2160: 20 22 70 65 72 73 6f 6e 61 6c 22 2c 20 62 41 63   "personal", bAc
2170: 74 69 76 61 74 65 3a 20 74 72 75 65 20 7d 2c 20  tivate: true }, 
2180: 6f 49 6e 66 6f 3a 20 7b 7d 20 7d 29 3b 0a 20 20  oInfo: {} });.  
2190: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
21a0: 20 20 20 20 20 20 20 20 20 20 20 6f 57 6f 72 6b             oWork
21b0: 65 72 48 61 6e 64 6c 65 72 2e 78 47 43 45 57 6f  erHandler.xGCEWo
21c0: 72 6b 65 72 2e 70 6f 73 74 4d 65 73 73 61 67 65  rker.postMessage
21d0: 28 7b 20 73 43 6f 6d 6d 61 6e 64 3a 20 22 73 65  ({ sCommand: "se
21e0: 74 44 69 63 74 69 6f 6e 61 72 79 4f 6e 4f 66 66  tDictionaryOnOff
21f0: 22 2c 20 6f 50 61 72 61 6d 3a 20 7b 20 73 44 69  ", oParam: { sDi
2200: 63 74 69 6f 6e 61 72 79 3a 20 22 63 6f 6d 6d 75  ctionary: "commu
2210: 6e 69 74 79 22 2c 20 62 41 63 74 69 76 61 74 65  nity", bActivate
2220: 3a 20 6f 44 61 74 61 2e 73 63 5f 6f 70 74 69 6f  : oData.sc_optio
2230: 6e 73 5b 22 63 6f 6d 6d 75 6e 69 74 79 22 5d 20  ns["community"] 
2240: 7d 2c 20 6f 49 6e 66 6f 3a 20 7b 7d 20 7d 29 3b  }, oInfo: {} });
2250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 57 6f  .            oWo
2260: 72 6b 65 72 48 61 6e 64 6c 65 72 2e 78 47 43 45  rkerHandler.xGCE
2270: 57 6f 72 6b 65 72 2e 70 6f 73 74 4d 65 73 73 61  Worker.postMessa
2280: 67 65 28 7b 20 73 43 6f 6d 6d 61 6e 64 3a 20 22  ge({ sCommand: "
2290: 73 65 74 44 69 63 74 69 6f 6e 61 72 79 4f 6e 4f  setDictionaryOnO
22a0: 66 66 22 2c 20 6f 50 61 72 61 6d 3a 20 7b 20 73  ff", oParam: { s
22b0: 44 69 63 74 69 6f 6e 61 72 79 3a 20 22 70 65 72  Dictionary: "per
22c0: 73 6f 6e 61 6c 22 2c 20 62 41 63 74 69 76 61 74  sonal", bActivat
22d0: 65 3a 20 6f 44 61 74 61 2e 73 63 5f 6f 70 74 69  e: oData.sc_opti
22e0: 6f 6e 73 5b 22 70 65 72 73 6f 6e 61 6c 22 5d 20  ons["personal"] 
22f0: 7d 2c 20 6f 49 6e 66 6f 3a 20 7b 7d 20 7d 29 3b  }, oInfo: {} });
2300: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
2310: 0a 7d 0a 0a 2f 2f 20 73 74 61 72 74 20 74 68 65  .}..// start the
2320: 20 57 6f 72 6b 65 72 20 66 6f 72 20 74 68 65 20   Worker for the 
2330: 47 43 0a 6f 57 6f 72 6b 65 72 48 61 6e 64 6c 65  GC.oWorkerHandle
2340: 72 2e 73 74 61 72 74 28 29 3b 0a 0a 2f 2f 20 69  r.start();..// i
2350: 6e 69 74 20 74 68 65 20 6f 70 74 69 6f 6e 73 20  nit the options 
2360: 73 74 75 66 66 20 61 6e 64 20 73 74 61 72 74 20  stuff and start 
2370: 74 68 65 20 47 43 0a 6f 49 6e 69 74 48 61 6e 64  the GC.oInitHand
2380: 6c 65 72 2e 69 6e 69 74 55 49 4f 70 74 69 6f 6e  ler.initUIOption
2390: 73 28 29 3b 0a 6f 49 6e 69 74 48 61 6e 64 6c 65  s();.oInitHandle
23a0: 72 2e 69 6e 69 74 47 72 61 6d 6d 61 72 43 68 65  r.initGrammarChe
23b0: 63 6b 65 72 28 29 3b 0a 0a 0a 2f 2f 20 57 68 65  cker();...// Whe
23c0: 6e 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20  n the extension 
23d0: 69 73 20 69 6e 73 74 61 6c 6c 65 64 20 6f 72 20  is installed or 
23e0: 75 70 64 61 74 65 64 0a 62 72 6f 77 73 65 72 2e  updated.browser.
23f0: 72 75 6e 74 69 6d 65 2e 6f 6e 49 6e 73 74 61 6c  runtime.onInstal
2400: 6c 65 64 2e 61 64 64 4c 69 73 74 65 6e 65 72 28  led.addListener(
2410: 66 75 6e 63 74 69 6f 6e 20 28 6f 44 65 74 61 69  function (oDetai
2420: 6c 73 29 20 7b 0a 20 20 20 20 2f 2f 20 6c 61 75  ls) {.    // lau
2430: 6e 63 68 65 64 20 61 74 20 69 6e 73 74 61 6c 6c  nched at install
2440: 61 74 69 6f 6e 20 6f 72 20 75 70 64 61 74 65 0a  ation or update.
2450: 20 20 20 20 2f 2f 20 68 74 74 70 73 3a 2f 2f 64      // https://d
2460: 65 76 65 6c 6f 70 65 72 2e 6d 6f 7a 69 6c 6c 61  eveloper.mozilla
2470: 2e 6f 72 67 2f 66 72 2f 41 64 64 2d 6f 6e 73 2f  .org/fr/Add-ons/
2480: 57 65 62 45 78 74 65 6e 73 69 6f 6e 73 2f 41 50  WebExtensions/AP
2490: 49 2f 72 75 6e 74 69 6d 65 2f 6f 6e 49 6e 73 74  I/runtime/onInst
24a0: 61 6c 6c 65 64 0a 20 20 20 20 69 66 20 28 6f 44  alled.    if (oD
24b0: 65 74 61 69 6c 73 2e 72 65 61 73 6f 6e 20 3d 3d  etails.reason ==
24c0: 20 22 75 70 64 61 74 65 22 20 20 7c 7c 20 20 6f   "update"  ||  o
24d0: 44 65 74 61 69 6c 73 2e 72 65 61 73 6f 6e 20 3d  Details.reason =
24e0: 3d 20 22 69 6e 73 74 61 6c 6c 65 64 22 29 20 7b  = "installed") {
24f0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 74 6f 64 6f  .        // todo
2500: 0a 20 20 20 20 20 20 20 20 2f 2f 62 72 6f 77 73  .        //brows
2510: 65 72 2e 74 61 62 73 2e 63 72 65 61 74 65 28 7b  er.tabs.create({
2520: 75 72 6c 3a 20 22 68 74 74 70 3a 2f 2f 67 72 61  url: "http://gra
2530: 6d 6d 61 6c 65 63 74 65 2e 6e 65 74 22 7d 29 3b  mmalecte.net"});
2540: 0a 20 20 20 20 7d 0a 7d 29 3b 0a 0a 0a 0a 2f 2a  .    }.});..../*
2550: 0a 20 20 20 20 50 6f 72 74 73 20 66 72 6f 6d 20  .    Ports from 
2560: 63 6f 6e 74 65 6e 74 2d 73 63 72 69 70 74 73 0a  content-scripts.
2570: 2a 2f 0a 0a 6c 65 74 20 64 43 6f 6e 6e 78 20 3d  */..let dConnx =
2580: 20 6e 65 77 20 4d 61 70 28 29 3b 0a 0a 0a 2f 2a   new Map();.../*
2590: 0a 20 20 20 20 4d 65 73 73 61 67 65 73 20 66 72  .    Messages fr
25a0: 6f 6d 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  om the extension
25b0: 20 28 6e 6f 74 20 74 68 65 20 57 6f 72 6b 65 72   (not the Worker
25c0: 29 0a 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 68 61  ).*/.function ha
25d0: 6e 64 6c 65 4d 65 73 73 61 67 65 20 28 6f 52 65  ndleMessage (oRe
25e0: 71 75 65 73 74 2c 20 78 53 65 6e 64 65 72 2c 20  quest, xSender, 
25f0: 73 65 6e 64 52 65 73 70 6f 6e 73 65 29 20 7b 0a  sendResponse) {.
2600: 20 20 20 20 2f 2f 20 6d 65 73 73 61 67 65 20 66      // message f
2610: 72 6f 6d 20 70 61 6e 65 6c 73 0a 20 20 20 20 2f  rom panels.    /
2620: 2f 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 78 53 65  /console.log(xSe
2630: 6e 64 65 72 29 3b 0a 20 20 20 20 6c 65 74 20 7b  nder);.    let {
2640: 73 43 6f 6d 6d 61 6e 64 2c 20 6f 50 61 72 61 6d  sCommand, oParam
2650: 2c 20 6f 49 6e 66 6f 7d 20 3d 20 6f 52 65 71 75  , oInfo} = oRequ
2660: 65 73 74 3b 0a 20 20 20 20 73 77 69 74 63 68 20  est;.    switch 
2670: 28 73 43 6f 6d 6d 61 6e 64 29 20 7b 0a 20 20 20  (sCommand) {.   
2680: 20 20 20 20 20 63 61 73 65 20 22 67 65 74 4f 70       case "getOp
2690: 74 69 6f 6e 73 22 3a 0a 20 20 20 20 20 20 20 20  tions":.        
26a0: 63 61 73 65 20 22 67 65 74 44 65 66 61 75 6c 74  case "getDefault
26b0: 4f 70 74 69 6f 6e 73 22 3a 0a 20 20 20 20 20 20  Options":.      
26c0: 20 20 63 61 73 65 20 22 73 65 74 4f 70 74 69 6f    case "setOptio
26d0: 6e 73 22 3a 0a 20 20 20 20 20 20 20 20 63 61 73  ns":.        cas
26e0: 65 20 22 73 65 74 4f 70 74 69 6f 6e 22 3a 0a 20  e "setOption":. 
26f0: 20 20 20 20 20 20 20 63 61 73 65 20 22 72 65 73         case "res
2700: 65 74 4f 70 74 69 6f 6e 73 22 3a 0a 20 20 20 20  etOptions":.    
2710: 20 20 20 20 63 61 73 65 20 22 74 65 78 74 54 6f      case "textTo
2720: 54 65 73 74 22 3a 0a 20 20 20 20 20 20 20 20 63  Test":.        c
2730: 61 73 65 20 22 66 75 6c 6c 54 65 73 74 73 22 3a  ase "fullTests":
2740: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 73  .        case "s
2750: 65 74 44 69 63 74 69 6f 6e 61 72 79 22 3a 0a 20  etDictionary":. 
2760: 20 20 20 20 20 20 20 63 61 73 65 20 22 73 65 74         case "set
2770: 44 69 63 74 69 6f 6e 61 72 79 4f 6e 4f 66 66 22  DictionaryOnOff"
2780: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 57  :.            oW
2790: 6f 72 6b 65 72 48 61 6e 64 6c 65 72 2e 78 47 43  orkerHandler.xGC
27a0: 45 57 6f 72 6b 65 72 2e 70 6f 73 74 4d 65 73 73  EWorker.postMess
27b0: 61 67 65 28 6f 52 65 71 75 65 73 74 29 3b 0a 20  age(oRequest);. 
27c0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
27d0: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22  ;.        case "
27e0: 72 65 73 74 61 72 74 57 6f 72 6b 65 72 22 3a 0a  restartWorker":.
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 57 6f 72              oWor
2800: 6b 65 72 48 61 6e 64 6c 65 72 2e 72 65 73 74 61  kerHandler.resta
2810: 72 74 28 6f 50 61 72 61 6d 5b 22 6e 44 65 6c 61  rt(oParam["nDela
2820: 79 4c 69 6d 69 74 22 5d 29 3b 0a 20 20 20 20 20  yLimit"]);.     
2830: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2840: 20 20 20 20 20 20 63 61 73 65 20 22 6f 70 65 6e        case "open
2850: 55 52 4c 22 3a 0a 20 20 20 20 20 20 20 20 20 20  URL":.          
2860: 20 20 62 72 6f 77 73 65 72 2e 74 61 62 73 2e 63    browser.tabs.c
2870: 72 65 61 74 65 28 7b 75 72 6c 3a 20 6f 50 61 72  reate({url: oPar
2880: 61 6d 2e 73 55 52 4c 7d 29 3b 0a 20 20 20 20 20  am.sURL});.     
2890: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
28a0: 20 20 20 20 20 20 63 61 73 65 20 22 6f 70 65 6e        case "open
28b0: 43 6f 6e 6a 75 67 75 65 75 72 54 61 62 22 3a 0a  ConjugueurTab":.
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e              open
28d0: 43 6f 6e 6a 75 67 75 65 75 72 54 61 62 28 29 3b  ConjugueurTab();
28e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
28f0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
2900: 20 22 6f 70 65 6e 4c 65 78 69 63 6f 6e 45 64 69   "openLexiconEdi
2910: 74 6f 72 22 3a 0a 20 20 20 20 20 20 20 20 20 20  tor":.          
2920: 20 20 6f 70 65 6e 4c 65 78 69 63 6f 6e 45 64 69    openLexiconEdi
2930: 74 6f 72 28 6f 50 61 72 61 6d 5b 22 64 69 63 74  tor(oParam["dict
2940: 69 6f 6e 61 72 79 22 5d 29 3b 0a 20 20 20 20 20  ionary"]);.     
2950: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2960: 20 20 20 20 20 20 63 61 73 65 20 22 6f 70 65 6e        case "open
2970: 44 69 63 74 69 6f 6e 61 72 69 65 73 22 3a 0a 20  Dictionaries":. 
2980: 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e 44             openD
2990: 69 63 74 69 6f 6e 61 72 69 65 73 28 29 3b 0a 20  ictionaries();. 
29a0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
29b0: 3b 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c  ;.        defaul
29c0: 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  t:.            c
29d0: 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 62 61 63  onsole.log("[bac
29e0: 6b 67 72 6f 75 6e 64 5d 20 55 6e 6b 6e 6f 77 6e  kground] Unknown
29f0: 20 63 6f 6d 6d 61 6e 64 3a 20 22 20 2b 20 73 43   command: " + sC
2a00: 6f 6d 6d 61 6e 64 29 3b 0a 20 20 20 20 20 20 20  ommand);.       
2a10: 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67       console.log
2a20: 28 6f 52 65 71 75 65 73 74 29 3b 0a 20 20 20 20  (oRequest);.    
2a30: 7d 0a 20 20 20 20 2f 2f 73 65 6e 64 52 65 73 70  }.    //sendResp
2a40: 6f 6e 73 65 28 7b 72 65 73 70 6f 6e 73 65 3a 20  onse({response: 
2a50: 22 72 65 73 70 6f 6e 73 65 20 66 72 6f 6d 20 62  "response from b
2a60: 61 63 6b 67 72 6f 75 6e 64 20 73 63 72 69 70 74  ackground script
2a70: 22 7d 29 3b 0a 7d 0a 0a 62 72 6f 77 73 65 72 2e  "});.}..browser.
2a80: 72 75 6e 74 69 6d 65 2e 6f 6e 4d 65 73 73 61 67  runtime.onMessag
2a90: 65 2e 61 64 64 4c 69 73 74 65 6e 65 72 28 68 61  e.addListener(ha
2aa0: 6e 64 6c 65 4d 65 73 73 61 67 65 29 3b 0a 0a 0a  ndleMessage);...
2ab0: 66 75 6e 63 74 69 6f 6e 20 68 61 6e 64 6c 65 43  function handleC
2ac0: 6f 6e 6e 65 78 69 6f 6e 20 28 78 50 6f 72 74 29  onnexion (xPort)
2ad0: 20 7b 0a 20 20 20 20 2f 2f 20 4d 65 73 73 61 67   {.    // Messag
2ae0: 65 73 20 66 72 6f 6d 20 74 61 62 73 0a 20 20 20  es from tabs.   
2af0: 20 6c 65 74 20 69 50 6f 72 74 49 64 20 3d 20 78   let iPortId = x
2b00: 50 6f 72 74 2e 73 65 6e 64 65 72 2e 74 61 62 2e  Port.sender.tab.
2b10: 69 64 3b 20 2f 2f 20 69 64 65 6e 74 69 66 69 65  id; // identifie
2b20: 72 20 66 6f 72 20 74 68 65 20 70 6f 72 74 3a 20  r for the port: 
2b30: 65 61 63 68 20 70 6f 72 74 20 63 61 6e 20 62 65  each port can be
2b40: 20 66 6f 75 6e 64 20 61 74 20 64 43 6f 6e 6e 78   found at dConnx
2b50: 5b 69 50 6f 72 74 49 64 5d 0a 20 20 20 20 64 43  [iPortId].    dC
2b60: 6f 6e 6e 78 2e 73 65 74 28 69 50 6f 72 74 49 64  onnx.set(iPortId
2b70: 2c 20 78 50 6f 72 74 29 3b 0a 20 20 20 20 78 50  , xPort);.    xP
2b80: 6f 72 74 2e 6f 6e 4d 65 73 73 61 67 65 2e 61 64  ort.onMessage.ad
2b90: 64 4c 69 73 74 65 6e 65 72 28 66 75 6e 63 74 69  dListener(functi
2ba0: 6f 6e 20 28 6f 52 65 71 75 65 73 74 29 20 7b 0a  on (oRequest) {.
2bb0: 20 20 20 20 20 20 20 20 6c 65 74 20 7b 73 43 6f          let {sCo
2bc0: 6d 6d 61 6e 64 2c 20 6f 50 61 72 61 6d 2c 20 6f  mmand, oParam, o
2bd0: 49 6e 66 6f 7d 20 3d 20 6f 52 65 71 75 65 73 74  Info} = oRequest
2be0: 3b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  ;.        switch
2bf0: 20 28 73 43 6f 6d 6d 61 6e 64 29 20 7b 0a 20 20   (sCommand) {.  
2c00: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
2c10: 70 61 72 73 65 22 3a 0a 20 20 20 20 20 20 20 20  parse":.        
2c20: 20 20 20 20 63 61 73 65 20 22 70 61 72 73 65 41      case "parseA
2c30: 6e 64 53 70 65 6c 6c 63 68 65 63 6b 22 3a 0a 20  ndSpellcheck":. 
2c40: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
2c50: 22 70 61 72 73 65 41 6e 64 53 70 65 6c 6c 63 68  "parseAndSpellch
2c60: 65 63 6b 31 22 3a 0a 20 20 20 20 20 20 20 20 20  eck1":.         
2c70: 20 20 20 63 61 73 65 20 22 70 61 72 73 65 46 75     case "parseFu
2c80: 6c 6c 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ll":.           
2c90: 20 63 61 73 65 20 22 67 65 74 4c 69 73 74 4f 66   case "getListOf
2ca0: 54 6f 6b 65 6e 73 22 3a 0a 20 20 20 20 20 20 20  Tokens":.       
2cb0: 20 20 20 20 20 63 61 73 65 20 22 67 65 74 53 70       case "getSp
2cc0: 65 6c 6c 53 75 67 67 65 73 74 69 6f 6e 73 22 3a  ellSuggestions":
2cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
2ce0: 65 20 22 67 65 74 56 65 72 62 22 3a 0a 20 20 20  e "getVerb":.   
2cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 52 65               oRe
2d00: 71 75 65 73 74 2e 6f 49 6e 66 6f 2e 69 52 65 74  quest.oInfo.iRet
2d10: 75 72 6e 50 6f 72 74 20 3d 20 69 50 6f 72 74 49  urnPort = iPortI
2d20: 64 3b 20 2f 2f 20 77 65 20 70 61 73 73 20 74 68  d; // we pass th
2d30: 65 20 69 64 20 6f 66 20 74 68 65 20 72 65 74 75  e id of the retu
2d40: 72 6e 20 70 6f 72 74 20 74 6f 20 72 65 63 65 69  rn port to recei
2d50: 76 65 20 61 6e 73 77 65 72 0a 20 20 20 20 20 20  ve answer.      
2d60: 20 20 20 20 20 20 20 20 20 20 6f 57 6f 72 6b 65            oWorke
2d70: 72 48 61 6e 64 6c 65 72 2e 78 47 43 45 57 6f 72  rHandler.xGCEWor
2d80: 6b 65 72 2e 70 6f 73 74 4d 65 73 73 61 67 65 28  ker.postMessage(
2d90: 6f 52 65 71 75 65 73 74 29 3b 0a 20 20 20 20 20  oRequest);.     
2da0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
2db0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ;.            ca
2dc0: 73 65 20 22 72 65 73 74 61 72 74 57 6f 72 6b 65  se "restartWorke
2dd0: 72 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  r":.            
2de0: 20 20 20 20 6f 57 6f 72 6b 65 72 48 61 6e 64 6c      oWorkerHandl
2df0: 65 72 2e 72 65 73 74 61 72 74 28 6f 50 61 72 61  er.restart(oPara
2e00: 6d 5b 22 6e 44 65 6c 61 79 4c 69 6d 69 74 22 5d  m["nDelayLimit"]
2e10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
2e20: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2e30: 20 20 20 20 20 20 63 61 73 65 20 22 6f 70 65 6e        case "open
2e40: 55 52 4c 22 3a 0a 20 20 20 20 20 20 20 20 20 20  URL":.          
2e50: 20 20 20 20 20 20 62 72 6f 77 73 65 72 2e 74 61        browser.ta
2e60: 62 73 2e 63 72 65 61 74 65 28 7b 75 72 6c 3a 20  bs.create({url: 
2e70: 6f 50 61 72 61 6d 2e 73 55 52 4c 7d 29 3b 0a 20  oParam.sURL});. 
2e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2e90: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
2ea0: 20 20 63 61 73 65 20 22 6f 70 65 6e 43 6f 6e 6a    case "openConj
2eb0: 75 67 75 65 75 72 54 61 62 22 3a 0a 20 20 20 20  ugueurTab":.    
2ec0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e              open
2ed0: 43 6f 6e 6a 75 67 75 65 75 72 54 61 62 28 29 3b  ConjugueurTab();
2ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ef0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
2f00: 20 20 20 20 63 61 73 65 20 22 6f 70 65 6e 43 6f      case "openCo
2f10: 6e 6a 75 67 75 65 75 72 57 69 6e 64 6f 77 22 3a  njugueurWindow":
2f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f30: 20 6f 70 65 6e 43 6f 6e 6a 75 67 75 65 75 72 57   openConjugueurW
2f40: 69 6e 64 6f 77 28 29 3b 0a 20 20 20 20 20 20 20  indow();.       
2f50: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
2f70: 20 22 6f 70 65 6e 4c 65 78 69 63 6f 6e 45 64 69   "openLexiconEdi
2f80: 74 6f 72 22 3a 0a 20 20 20 20 20 20 20 20 20 20  tor":.          
2f90: 20 20 20 20 20 20 6f 70 65 6e 4c 65 78 69 63 6f        openLexico
2fa0: 6e 45 64 69 74 6f 72 28 29 3b 0a 20 20 20 20 20  nEditor();.     
2fb0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
2fc0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  ;.            de
2fd0: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20  fault:.         
2fe0: 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c         console.l
2ff0: 6f 67 28 22 5b 62 61 63 6b 67 72 6f 75 6e 64 5d  og("[background]
3000: 20 55 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64   Unknown command
3010: 3a 20 22 20 2b 20 73 43 6f 6d 6d 61 6e 64 29 3b  : " + sCommand);
3020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3030: 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 6f 52 65   console.log(oRe
3040: 71 75 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20  quest);.        
3050: 7d 0a 20 20 20 20 7d 29 3b 0a 20 20 20 20 2f 2f  }.    });.    //
3060: 78 50 6f 72 74 2e 70 6f 73 74 4d 65 73 73 61 67  xPort.postMessag
3070: 65 28 7b 73 41 63 74 69 6f 6e 44 6f 6e 65 3a 20  e({sActionDone: 
3080: 22 6e 65 77 49 64 22 2c 20 72 65 73 75 6c 74 3a  "newId", result:
3090: 20 69 50 6f 72 74 49 64 7d 29 3b 0a 20 20 20 20   iPortId});.    
30a0: 78 50 6f 72 74 2e 70 6f 73 74 4d 65 73 73 61 67  xPort.postMessag
30b0: 65 28 7b 73 41 63 74 69 6f 6e 44 6f 6e 65 3a 20  e({sActionDone: 
30c0: 22 69 6e 69 74 22 2c 20 73 55 72 6c 3a 20 62 72  "init", sUrl: br
30d0: 6f 77 73 65 72 2e 65 78 74 65 6e 73 69 6f 6e 2e  owser.extension.
30e0: 67 65 74 55 52 4c 28 22 22 29 7d 29 3b 0a 7d 0a  getURL("")});.}.
30f0: 0a 62 72 6f 77 73 65 72 2e 72 75 6e 74 69 6d 65  .browser.runtime
3100: 2e 6f 6e 43 6f 6e 6e 65 63 74 2e 61 64 64 4c 69  .onConnect.addLi
3110: 73 74 65 6e 65 72 28 68 61 6e 64 6c 65 43 6f 6e  stener(handleCon
3120: 6e 65 78 69 6f 6e 29 3b 0a 0a 0a 2f 2a 0a 20 20  nexion);.../*.  
3130: 20 20 43 6f 6e 74 65 78 74 20 4d 65 6e 75 0a 2a    Context Menu.*
3140: 2f 0a 2f 2f 20 41 6e 61 6c 79 7a 65 0a 62 72 6f  /.// Analyze.bro
3150: 77 73 65 72 2e 63 6f 6e 74 65 78 74 4d 65 6e 75  wser.contextMenu
3160: 73 2e 63 72 65 61 74 65 28 7b 20 69 64 3a 20 22  s.create({ id: "
3170: 67 72 61 6d 6d 61 72 5f 63 68 65 63 6b 65 72 5f  grammar_checker_
3180: 65 64 69 74 61 62 6c 65 22 2c 20 20 20 74 69 74  editable",   tit
3190: 6c 65 3a 20 22 41 6e 61 6c 79 73 65 72 20 63 65  le: "Analyser ce
31a0: 74 74 65 20 7a 6f 6e 65 20 64 65 20 74 65 78 74  tte zone de text
31b0: 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  e",             
31c0: 20 63 6f 6e 74 65 78 74 73 3a 20 5b 22 65 64 69   contexts: ["edi
31d0: 74 61 62 6c 65 22 5d 20 7d 29 3b 0a 62 72 6f 77  table"] });.brow
31e0: 73 65 72 2e 63 6f 6e 74 65 78 74 4d 65 6e 75 73  ser.contextMenus
31f0: 2e 63 72 65 61 74 65 28 7b 20 69 64 3a 20 22 67  .create({ id: "g
3200: 72 61 6d 6d 61 72 5f 63 68 65 63 6b 65 72 5f 73  rammar_checker_s
3210: 65 6c 65 63 74 69 6f 6e 22 2c 20 20 74 69 74 6c  election",  titl
3220: 65 3a 20 22 41 6e 61 6c 79 73 65 72 20 6c 61 20  e: "Analyser la 
3230: 73 c3 a9 6c 65 63 74 69 6f 6e 22 2c 20 20 20 20  s..lection",    
3240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3250: 20 63 6f 6e 74 65 78 74 73 3a 20 5b 22 73 65 6c   contexts: ["sel
3260: 65 63 74 69 6f 6e 22 5d 20 7d 29 3b 0a 62 72 6f  ection"] });.bro
3270: 77 73 65 72 2e 63 6f 6e 74 65 78 74 4d 65 6e 75  wser.contextMenu
3280: 73 2e 63 72 65 61 74 65 28 7b 20 69 64 3a 20 22  s.create({ id: "
3290: 67 72 61 6d 6d 61 72 5f 63 68 65 63 6b 65 72 5f  grammar_checker_
32a0: 69 66 72 61 6d 65 22 2c 20 20 20 20 20 74 69 74  iframe",     tit
32b0: 6c 65 3a 20 22 41 6e 61 6c 79 73 65 72 20 6c 65  le: "Analyser le
32c0: 20 63 6f 6e 74 65 6e 75 20 64 65 20 63 65 20 63   contenu de ce c
32d0: 61 64 72 65 22 2c 20 20 20 20 20 20 20 20 20 20  adre",          
32e0: 20 63 6f 6e 74 65 78 74 73 3a 20 5b 22 66 72 61   contexts: ["fra
32f0: 6d 65 22 5d 20 7d 29 3b 0a 62 72 6f 77 73 65 72  me"] });.browser
3300: 2e 63 6f 6e 74 65 78 74 4d 65 6e 75 73 2e 63 72  .contextMenus.cr
3310: 65 61 74 65 28 7b 20 69 64 3a 20 22 67 72 61 6d  eate({ id: "gram
3320: 6d 61 72 5f 63 68 65 63 6b 65 72 5f 70 61 67 65  mar_checker_page
3330: 22 2c 20 20 20 20 20 20 20 74 69 74 6c 65 3a 20  ",       title: 
3340: 22 41 6e 61 6c 79 73 65 72 20 6c 61 20 70 61 67  "Analyser la pag
3350: 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  e",             
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
3370: 74 65 78 74 73 3a 20 5b 22 61 6c 6c 22 5d 20 7d  texts: ["all"] }
3380: 29 3b 0a 62 72 6f 77 73 65 72 2e 63 6f 6e 74 65  );.browser.conte
3390: 78 74 4d 65 6e 75 73 2e 63 72 65 61 74 65 28 7b  xtMenus.create({
33a0: 20 69 64 3a 20 22 73 65 70 61 72 61 74 6f 72 5f   id: "separator_
33b0: 74 6f 6f 6c 73 22 2c 20 20 20 20 20 20 20 20 20  tools",         
33c0: 20 20 20 74 79 70 65 3a 20 22 73 65 70 61 72 61     type: "separa
33d0: 74 6f 72 22 2c 20 20 20 20 20 20 20 20 20 20 20  tor",           
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f0: 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 73 3a         contexts:
3400: 20 5b 22 61 6c 6c 22 5d 20 7d 29 3b 0a 2f 2f 20   ["all"] });.// 
3410: 54 6f 6f 6c 73 0a 62 72 6f 77 73 65 72 2e 63 6f  Tools.browser.co
3420: 6e 74 65 78 74 4d 65 6e 75 73 2e 63 72 65 61 74  ntextMenus.creat
3430: 65 28 7b 20 69 64 3a 20 22 63 6f 6e 6a 75 67 75  e({ id: "conjugu
3440: 65 75 72 5f 74 61 62 22 2c 20 20 20 20 20 20 20  eur_tab",       
3450: 20 20 20 20 20 20 74 69 74 6c 65 3a 20 22 43 6f        title: "Co
3460: 6e 6a 75 67 75 65 75 72 20 5b 6f 6e 67 6c 65 74  njugueur [onglet
3470: 5d 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ]",             
3480: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 65 78            contex
3490: 74 73 3a 20 5b 22 61 6c 6c 22 5d 20 7d 29 3b 0a  ts: ["all"] });.
34a0: 62 72 6f 77 73 65 72 2e 63 6f 6e 74 65 78 74 4d  browser.contextM
34b0: 65 6e 75 73 2e 63 72 65 61 74 65 28 7b 20 69 64  enus.create({ id
34c0: 3a 20 22 63 6f 6e 6a 75 67 75 65 75 72 5f 77 69  : "conjugueur_wi
34d0: 6e 64 6f 77 22 2c 20 20 20 20 20 20 20 20 20 20  ndow",          
34e0: 74 69 74 6c 65 3a 20 22 43 6f 6e 6a 75 67 75 65  title: "Conjugue
34f0: 75 72 20 5b 66 65 6e c3 aa 74 72 65 5d 22 2c 20  ur [fen..tre]", 
3500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3510: 20 20 20 20 20 63 6f 6e 74 65 78 74 73 3a 20 5b       contexts: [
3520: 22 61 6c 6c 22 5d 20 7d 29 3b 0a 2f 2f 62 72 6f  "all"] });.//bro
3530: 77 73 65 72 2e 63 6f 6e 74 65 78 74 4d 65 6e 75  wser.contextMenu
3540: 73 2e 63 72 65 61 74 65 28 7b 20 69 64 3a 20 22  s.create({ id: "
3550: 64 69 63 74 69 6f 6e 61 72 69 65 73 22 2c 20 20  dictionaries",  
3560: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69 74               tit
3570: 6c 65 3a 20 22 44 69 63 74 69 6f 6e 6e 61 69 72  le: "Dictionnair
3580: 65 73 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  es",            
3590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a0: 20 63 6f 6e 74 65 78 74 73 3a 20 5b 22 61 6c 6c   contexts: ["all
35b0: 22 5d 20 7d 29 3b 0a 62 72 6f 77 73 65 72 2e 63  "] });.browser.c
35c0: 6f 6e 74 65 78 74 4d 65 6e 75 73 2e 63 72 65 61  ontextMenus.crea
35d0: 74 65 28 7b 20 69 64 3a 20 22 6c 65 78 69 63 6f  te({ id: "lexico
35e0: 6e 5f 65 64 69 74 6f 72 22 2c 20 20 20 20 20 20  n_editor",      
35f0: 20 20 20 20 20 20 20 74 69 74 6c 65 3a 20 22 c3         title: ".
3600: 89 64 69 74 65 75 72 20 6c 65 78 69 63 61 6c 22  .diteur lexical"
3610: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
3620: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
3630: 65 78 74 73 3a 20 5b 22 61 6c 6c 22 5d 20 7d 29  exts: ["all"] })
3640: 3b 0a 2f 2f 20 52 65 73 63 61 6e 20 70 61 67 65  ;.// Rescan page
3650: 0a 62 72 6f 77 73 65 72 2e 63 6f 6e 74 65 78 74  .browser.context
3660: 4d 65 6e 75 73 2e 63 72 65 61 74 65 28 7b 20 69  Menus.create({ i
3670: 64 3a 20 22 73 65 70 61 72 61 74 6f 72 5f 72 65  d: "separator_re
3680: 73 63 61 6e 22 2c 20 20 20 20 20 20 20 20 20 20  scan",          
3690: 20 74 79 70 65 3a 20 22 73 65 70 61 72 61 74 6f   type: "separato
36a0: 72 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  r",             
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c0: 20 20 20 20 20 63 6f 6e 74 65 78 74 73 3a 20 5b       contexts: [
36d0: 22 65 64 69 74 61 62 6c 65 22 5d 20 7d 29 3b 0a  "editable"] });.
36e0: 62 72 6f 77 73 65 72 2e 63 6f 6e 74 65 78 74 4d  browser.contextM
36f0: 65 6e 75 73 2e 63 72 65 61 74 65 28 7b 20 69 64  enus.create({ id
3700: 3a 20 22 72 65 73 63 61 6e 50 61 67 65 22 2c 20  : "rescanPage", 
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3720: 74 69 74 6c 65 3a 20 22 52 65 63 68 65 72 63 68  title: "Recherch
3730: 65 72 20 c3 a0 20 6e 6f 75 76 65 61 75 20 6c 65  er .. nouveau le
3740: 73 20 7a 6f 6e 65 73 20 64 65 20 74 65 78 74 65  s zones de texte
3750: 22 2c 20 20 20 63 6f 6e 74 65 78 74 73 3a 20 5b  ",   contexts: [
3760: 22 65 64 69 74 61 62 6c 65 22 5d 20 7d 29 3b 0a  "editable"] });.
3770: 0a 0a 62 72 6f 77 73 65 72 2e 63 6f 6e 74 65 78  ..browser.contex
3780: 74 4d 65 6e 75 73 2e 6f 6e 43 6c 69 63 6b 65 64  tMenus.onClicked
3790: 2e 61 64 64 4c 69 73 74 65 6e 65 72 28 66 75 6e  .addListener(fun
37a0: 63 74 69 6f 6e 20 28 78 49 6e 66 6f 2c 20 78 54  ction (xInfo, xT
37b0: 61 62 29 20 7b 0a 20 20 20 20 2f 2f 20 78 49 6e  ab) {.    // xIn
37c0: 66 6f 20 3d 20 68 74 74 70 73 3a 2f 2f 64 65 76  fo = https://dev
37d0: 65 6c 6f 70 65 72 2e 6d 6f 7a 69 6c 6c 61 2e 6f  eloper.mozilla.o
37e0: 72 67 2f 65 6e 2d 55 53 2f 41 64 64 2d 6f 6e 73  rg/en-US/Add-ons
37f0: 2f 57 65 62 45 78 74 65 6e 73 69 6f 6e 73 2f 41  /WebExtensions/A
3800: 50 49 2f 63 6f 6e 74 65 78 74 4d 65 6e 75 73 2f  PI/contextMenus/
3810: 4f 6e 43 6c 69 63 6b 44 61 74 61 0a 20 20 20 20  OnClickData.    
3820: 2f 2f 20 78 54 61 62 20 3d 20 68 74 74 70 73 3a  // xTab = https:
3830: 2f 2f 64 65 76 65 6c 6f 70 65 72 2e 6d 6f 7a 69  //developer.mozi
3840: 6c 6c 61 2e 6f 72 67 2f 65 6e 2d 55 53 2f 41 64  lla.org/en-US/Ad
3850: 64 2d 6f 6e 73 2f 57 65 62 45 78 74 65 6e 73 69  d-ons/WebExtensi
3860: 6f 6e 73 2f 41 50 49 2f 74 61 62 73 2f 54 61 62  ons/API/tabs/Tab
3870: 0a 20 20 20 20 2f 2f 20 63 6f 6e 66 75 73 69 6e  .    // confusin
3880: 67 3a e2 80 af 6e 6f 20 77 61 79 20 74 6f 20 67  g:...no way to g
3890: 65 74 20 74 68 65 20 6e 6f 64 65 20 77 68 65 72  et the node wher
38a0: 65 20 77 65 20 63 6c 69 63 6b 3f 21 0a 20 20 20  e we click?!.   
38b0: 20 73 77 69 74 63 68 20 28 78 49 6e 66 6f 2e 6d   switch (xInfo.m
38c0: 65 6e 75 49 74 65 6d 49 64 29 20 7b 0a 20 20 20  enuItemId) {.   
38d0: 20 20 20 20 20 2f 2f 20 61 6e 61 6c 79 7a 65 0a       // analyze.
38e0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 67 72          case "gr
38f0: 61 6d 6d 61 72 5f 63 68 65 63 6b 65 72 5f 65 64  ammar_checker_ed
3900: 69 74 61 62 6c 65 22 3a 0a 20 20 20 20 20 20 20  itable":.       
3910: 20 63 61 73 65 20 22 67 72 61 6d 6d 61 72 5f 63   case "grammar_c
3920: 68 65 63 6b 65 72 5f 70 61 67 65 22 3a 0a 20 20  hecker_page":.  
3930: 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 43 6f            sendCo
3940: 6d 6d 61 6e 64 54 6f 54 61 62 28 78 54 61 62 2e  mmandToTab(xTab.
3950: 69 64 2c 20 78 49 6e 66 6f 2e 6d 65 6e 75 49 74  id, xInfo.menuIt
3960: 65 6d 49 64 29 3b 0a 20 20 20 20 20 20 20 20 20  emId);.         
3970: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
3980: 20 20 63 61 73 65 20 22 67 72 61 6d 6d 61 72 5f    case "grammar_
3990: 63 68 65 63 6b 65 72 5f 69 66 72 61 6d 65 22 3a  checker_iframe":
39a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6e  .            sen
39b0: 64 43 6f 6d 6d 61 6e 64 54 6f 54 61 62 28 78 54  dCommandToTab(xT
39c0: 61 62 2e 69 64 2c 20 78 49 6e 66 6f 2e 6d 65 6e  ab.id, xInfo.men
39d0: 75 49 74 65 6d 49 64 2c 20 78 49 6e 66 6f 2e 66  uItemId, xInfo.f
39e0: 72 61 6d 65 49 64 29 3b 0a 20 20 20 20 20 20 20  rameId);.       
39f0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3a00: 20 20 20 20 63 61 73 65 20 22 67 72 61 6d 6d 61      case "gramma
3a10: 72 5f 63 68 65 63 6b 65 72 5f 73 65 6c 65 63 74  r_checker_select
3a20: 69 6f 6e 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ion":.          
3a30: 20 20 73 65 6e 64 43 6f 6d 6d 61 6e 64 54 6f 54    sendCommandToT
3a40: 61 62 28 78 54 61 62 2e 69 64 2c 20 78 49 6e 66  ab(xTab.id, xInf
3a50: 6f 2e 6d 65 6e 75 49 74 65 6d 49 64 2c 20 78 49  o.menuItemId, xI
3a60: 6e 66 6f 2e 73 65 6c 65 63 74 69 6f 6e 54 65 78  nfo.selectionTex
3a70: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t);.            
3a80: 6f 57 6f 72 6b 65 72 48 61 6e 64 6c 65 72 2e 78  oWorkerHandler.x
3a90: 47 43 45 57 6f 72 6b 65 72 2e 70 6f 73 74 4d 65  GCEWorker.postMe
3aa0: 73 73 61 67 65 28 7b 0a 20 20 20 20 20 20 20 20  ssage({.        
3ab0: 20 20 20 20 20 20 20 20 73 43 6f 6d 6d 61 6e 64          sCommand
3ac0: 3a 20 22 70 61 72 73 65 41 6e 64 53 70 65 6c 6c  : "parseAndSpell
3ad0: 63 68 65 63 6b 22 2c 0a 20 20 20 20 20 20 20 20  check",.        
3ae0: 20 20 20 20 20 20 20 20 6f 50 61 72 61 6d 3a 20          oParam: 
3af0: 7b 73 54 65 78 74 3a 20 78 49 6e 66 6f 2e 73 65  {sText: xInfo.se
3b00: 6c 65 63 74 69 6f 6e 54 65 78 74 2c 20 73 43 6f  lectionText, sCo
3b10: 75 6e 74 72 79 3a 20 22 46 52 22 2c 20 62 44 65  untry: "FR", bDe
3b20: 62 75 67 3a 20 66 61 6c 73 65 2c 20 62 43 6f 6e  bug: false, bCon
3b30: 74 65 78 74 3a 20 66 61 6c 73 65 7d 2c 0a 20 20  text: false},.  
3b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 49                oI
3b50: 6e 66 6f 3a 20 7b 69 52 65 74 75 72 6e 50 6f 72  nfo: {iReturnPor
3b60: 74 3a 20 78 54 61 62 2e 69 64 7d 0a 20 20 20 20  t: xTab.id}.    
3b70: 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20          });.    
3b80: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
3b90: 20 20 20 20 20 20 20 2f 2f 20 74 6f 6f 6c 73 0a         // tools.
3ba0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 63 6f          case "co
3bb0: 6e 6a 75 67 75 65 75 72 5f 77 69 6e 64 6f 77 22  njugueur_window"
3bc0: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 70  :.            op
3bd0: 65 6e 43 6f 6e 6a 75 67 75 65 75 72 57 69 6e 64  enConjugueurWind
3be0: 6f 77 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ow();.          
3bf0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
3c00: 20 63 61 73 65 20 22 63 6f 6e 6a 75 67 75 65 75   case "conjugueu
3c10: 72 5f 74 61 62 22 3a 0a 20 20 20 20 20 20 20 20  r_tab":.        
3c20: 20 20 20 20 6f 70 65 6e 43 6f 6e 6a 75 67 75 65      openConjugue
3c30: 75 72 54 61 62 28 29 3b 0a 20 20 20 20 20 20 20  urTab();.       
3c40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3c50: 20 20 20 20 63 61 73 65 20 22 6c 65 78 69 63 6f      case "lexico
3c60: 6e 5f 65 64 69 74 6f 72 22 3a 0a 20 20 20 20 20  n_editor":.     
3c70: 20 20 20 20 20 20 20 6f 70 65 6e 4c 65 78 69 63         openLexic
3c80: 6f 6e 45 64 69 74 6f 72 28 29 3b 0a 20 20 20 20  onEditor();.    
3c90: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
3ca0: 20 20 20 20 20 20 20 63 61 73 65 20 22 64 69 63         case "dic
3cb0: 74 69 6f 6e 61 72 69 65 73 22 3a 0a 20 20 20 20  tionaries":.    
3cc0: 20 20 20 20 20 20 20 20 6f 70 65 6e 44 69 63 74          openDict
3cd0: 69 6f 6e 61 72 69 65 73 28 29 3b 0a 20 20 20 20  ionaries();.    
3ce0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
3cf0: 20 20 20 20 20 20 20 2f 2f 20 72 65 73 63 61 6e         // rescan
3d00: 20 70 61 67 65 0a 20 20 20 20 20 20 20 20 63 61   page.        ca
3d10: 73 65 20 22 72 65 73 63 61 6e 50 61 67 65 22 3a  se "rescanPage":
3d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74  .            let
3d30: 20 78 50 6f 72 74 20 3d 20 64 43 6f 6e 6e 78 2e   xPort = dConnx.
3d40: 67 65 74 28 78 54 61 62 2e 69 64 29 3b 0a 20 20  get(xTab.id);.  
3d50: 20 20 20 20 20 20 20 20 20 20 78 50 6f 72 74 2e            xPort.
3d60: 70 6f 73 74 4d 65 73 73 61 67 65 28 7b 73 41 63  postMessage({sAc
3d70: 74 69 6f 6e 44 6f 6e 65 3a 20 22 72 65 73 63 61  tionDone: "resca
3d80: 6e 50 61 67 65 22 7d 29 3b 0a 20 20 20 20 20 20  nPage"});.      
3d90: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3da0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
3db0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c            consol
3dc0: 65 2e 6c 6f 67 28 22 5b 42 61 63 6b 67 72 6f 75  e.log("[Backgrou
3dd0: 6e 64 5d 20 55 6e 6b 6e 6f 77 6e 20 6d 65 6e 75  nd] Unknown menu
3de0: 20 69 64 3a 20 22 20 2b 20 78 49 6e 66 6f 2e 6d   id: " + xInfo.m
3df0: 65 6e 75 49 74 65 6d 49 64 29 3b 0a 20 20 20 20  enuItemId);.    
3e00: 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e          console.
3e10: 6c 6f 67 28 78 49 6e 66 6f 29 3b 0a 20 20 20 20  log(xInfo);.    
3e20: 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e          console.
3e30: 6c 6f 67 28 78 54 61 62 29 3b 0a 20 20 20 20 7d  log(xTab);.    }
3e40: 0a 7d 29 3b 0a 0a 0a 2f 2a 0a 20 20 20 20 4b 65  .});.../*.    Ke
3e50: 79 62 6f 61 72 64 20 73 68 6f 72 74 63 75 74 73  yboard shortcuts
3e60: 0a 2a 2f 0a 62 72 6f 77 73 65 72 2e 63 6f 6d 6d  .*/.browser.comm
3e70: 61 6e 64 73 2e 6f 6e 43 6f 6d 6d 61 6e 64 2e 61  ands.onCommand.a
3e80: 64 64 4c 69 73 74 65 6e 65 72 28 66 75 6e 63 74  ddListener(funct
3e90: 69 6f 6e 20 28 73 43 6f 6d 6d 61 6e 64 29 20 7b  ion (sCommand) {
3ea0: 0a 20 20 20 20 73 77 69 74 63 68 20 28 73 43 6f  .    switch (sCo
3eb0: 6d 6d 61 6e 64 29 20 7b 0a 20 20 20 20 20 20 20  mmand) {.       
3ec0: 20 63 61 73 65 20 22 67 72 61 6d 6d 61 72 5f 63   case "grammar_c
3ed0: 68 65 63 6b 65 72 22 3a 0a 20 20 20 20 20 20 20  hecker":.       
3ee0: 20 20 20 20 20 73 65 6e 64 43 6f 6d 6d 61 6e 64       sendCommand
3ef0: 54 6f 43 75 72 72 65 6e 74 54 61 62 28 22 73 68  ToCurrentTab("sh
3f00: 6f 72 74 63 75 74 47 72 61 6d 6d 61 72 43 68 65  ortcutGrammarChe
3f10: 63 6b 65 72 22 29 3b 0a 20 20 20 20 20 20 20 20  cker");.        
3f20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
3f30: 20 20 20 63 61 73 65 20 22 63 6f 6e 6a 75 67 75     case "conjugu
3f40: 65 75 72 5f 74 61 62 22 3a 0a 20 20 20 20 20 20  eur_tab":.      
3f50: 20 20 20 20 20 20 6f 70 65 6e 43 6f 6e 6a 75 67        openConjug
3f60: 75 65 75 72 54 61 62 28 29 3b 0a 20 20 20 20 20  ueurTab();.     
3f70: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
3f80: 20 20 20 20 20 20 63 61 73 65 20 22 6c 65 78 69        case "lexi
3f90: 63 6f 6e 5f 65 64 69 74 6f 72 22 3a 0a 20 20 20  con_editor":.   
3fa0: 20 20 20 20 20 20 20 20 20 6f 70 65 6e 4c 65 78           openLex
3fb0: 69 63 6f 6e 45 64 69 74 6f 72 28 29 3b 0a 20 20  iconEditor();.  
3fc0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
3fd0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 64  .        case "d
3fe0: 69 63 74 69 6f 6e 61 72 69 65 73 22 3a 0a 20 20  ictionaries":.  
3ff0: 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e 44 69            openDi
4000: 63 74 69 6f 6e 61 72 69 65 73 28 29 3b 0a 20 20  ctionaries();.  
4010: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
4020: 0a 20 20 20 20 7d 0a 7d 29 3b 0a 0a 0a 2f 2a 0a  .    }.});.../*.
4030: 20 20 20 20 54 61 62 73 0a 2a 2f 0a 6c 65 74 20      Tabs.*/.let 
4040: 6e 54 61 62 4c 65 78 69 63 6f 6e 45 64 69 74 6f  nTabLexiconEdito
4050: 72 20 3d 20 6e 75 6c 6c 3b 0a 6c 65 74 20 6e 54  r = null;.let nT
4060: 61 62 44 69 63 74 69 6f 6e 61 72 69 65 73 20 3d  abDictionaries =
4070: 20 6e 75 6c 6c 3b 0a 6c 65 74 20 6e 54 61 62 43   null;.let nTabC
4080: 6f 6e 6a 75 67 75 65 75 72 20 3d 20 6e 75 6c 6c  onjugueur = null
4090: 3b 0a 0a 62 72 6f 77 73 65 72 2e 74 61 62 73 2e  ;..browser.tabs.
40a0: 6f 6e 52 65 6d 6f 76 65 64 2e 61 64 64 4c 69 73  onRemoved.addLis
40b0: 74 65 6e 65 72 28 66 75 6e 63 74 69 6f 6e 20 28  tener(function (
40c0: 6e 54 61 62 49 64 2c 20 78 52 65 6d 6f 76 65 49  nTabId, xRemoveI
40d0: 6e 66 6f 29 20 7b 0a 20 20 20 20 73 77 69 74 63  nfo) {.    switc
40e0: 68 20 28 6e 54 61 62 49 64 29 20 7b 0a 20 20 20  h (nTabId) {.   
40f0: 20 20 20 20 20 63 61 73 65 20 6e 54 61 62 4c 65       case nTabLe
4100: 78 69 63 6f 6e 45 64 69 74 6f 72 3a 20 6e 54 61  xiconEditor: nTa
4110: 62 4c 65 78 69 63 6f 6e 45 64 69 74 6f 72 20 3d  bLexiconEditor =
4120: 20 6e 75 6c 6c 3b 20 62 72 65 61 6b 3b 0a 20 20   null; break;.  
4130: 20 20 20 20 20 20 63 61 73 65 20 6e 54 61 62 44        case nTabD
4140: 69 63 74 69 6f 6e 61 72 69 65 73 3a 20 20 6e 54  ictionaries:  nT
4150: 61 62 44 69 63 74 69 6f 6e 61 72 69 65 73 20 3d  abDictionaries =
4160: 20 6e 75 6c 6c 3b 20 62 72 65 61 6b 3b 0a 20 20   null; break;.  
4170: 20 20 20 20 20 20 63 61 73 65 20 6e 54 61 62 43        case nTabC
4180: 6f 6e 6a 75 67 75 65 75 72 3a 20 20 20 20 6e 54  onjugueur:    nT
4190: 61 62 43 6f 6e 6a 75 67 75 65 75 72 20 3d 20 6e  abConjugueur = n
41a0: 75 6c 6c 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20  ull; break;.    
41b0: 7d 0a 7d 29 3b 0a 0a 0a 2f 2a 0a 20 20 20 20 41  }.});.../*.    A
41c0: 63 74 69 6f 6e 73 0a 2a 2f 0a 0a 66 75 6e 63 74  ctions.*/..funct
41d0: 69 6f 6e 20 73 74 6f 72 65 47 43 4f 70 74 69 6f  ion storeGCOptio
41e0: 6e 73 20 28 64 4f 70 74 69 6f 6e 73 29 20 7b 0a  ns (dOptions) {.
41f0: 20 20 20 20 69 66 20 28 64 4f 70 74 69 6f 6e 73      if (dOptions
4200: 20 69 6e 73 74 61 6e 63 65 6f 66 20 4d 61 70 29   instanceof Map)
4210: 20 7b 0a 20 20 20 20 20 20 20 20 64 4f 70 74 69   {.        dOpti
4220: 6f 6e 73 20 3d 20 68 65 6c 70 65 72 73 2e 6d 61  ons = helpers.ma
4230: 70 54 6f 4f 62 6a 65 63 74 28 64 4f 70 74 69 6f  pToObject(dOptio
4240: 6e 73 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  ns);.    }.    b
4250: 72 6f 77 73 65 72 2e 73 74 6f 72 61 67 65 2e 6c  rowser.storage.l
4260: 6f 63 61 6c 2e 73 65 74 28 7b 22 67 63 5f 6f 70  ocal.set({"gc_op
4270: 74 69 6f 6e 73 22 3a 20 64 4f 70 74 69 6f 6e 73  tions": dOptions
4280: 7d 29 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20  });.}..function 
4290: 73 65 6e 64 43 6f 6d 6d 61 6e 64 54 6f 54 61 62  sendCommandToTab
42a0: 20 28 69 54 61 62 2c 20 73 43 6f 6d 6d 61 6e 64   (iTab, sCommand
42b0: 2c 20 72 65 73 75 6c 74 3d 6e 75 6c 6c 29 20 7b  , result=null) {
42c0: 0a 20 20 20 20 6c 65 74 20 78 54 61 62 50 6f 72  .    let xTabPor
42d0: 74 20 3d 20 64 43 6f 6e 6e 78 2e 67 65 74 28 69  t = dConnx.get(i
42e0: 54 61 62 29 3b 0a 20 20 20 20 78 54 61 62 50 6f  Tab);.    xTabPo
42f0: 72 74 2e 70 6f 73 74 4d 65 73 73 61 67 65 28 7b  rt.postMessage({
4300: 73 41 63 74 69 6f 6e 44 6f 6e 65 3a 20 73 43 6f  sActionDone: sCo
4310: 6d 6d 61 6e 64 2c 20 72 65 73 75 6c 74 3a 20 72  mmand, result: r
4320: 65 73 75 6c 74 2c 20 6f 49 6e 66 6f 3a 20 6e 75  esult, oInfo: nu
4330: 6c 6c 2c 20 62 45 6e 64 3a 20 66 61 6c 73 65 2c  ll, bEnd: false,
4340: 20 62 45 72 72 6f 72 3a 20 66 61 6c 73 65 7d 29   bError: false})
4350: 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 73 65  ;.}..function se
4360: 6e 64 43 6f 6d 6d 61 6e 64 54 6f 43 75 72 72 65  ndCommandToCurre
4370: 6e 74 54 61 62 20 28 73 43 6f 6d 6d 61 6e 64 29  ntTab (sCommand)
4380: 20 7b 0a 20 20 20 20 69 66 20 28 62 43 68 72 6f   {.    if (bChro
4390: 6d 65 29 20 7b 0a 20 20 20 20 20 20 20 20 62 72  me) {.        br
43a0: 6f 77 73 65 72 2e 74 61 62 73 2e 71 75 65 72 79  owser.tabs.query
43b0: 28 7b 20 63 75 72 72 65 6e 74 57 69 6e 64 6f 77  ({ currentWindow
43c0: 3a 20 74 72 75 65 2c 20 61 63 74 69 76 65 3a 20  : true, active: 
43d0: 74 72 75 65 20 7d 2c 20 28 6c 54 61 62 73 29 20  true }, (lTabs) 
43e0: 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  => {.           
43f0: 20 66 6f 72 20 28 6c 65 74 20 78 54 61 62 20 6f   for (let xTab o
4400: 66 20 6c 54 61 62 73 29 20 7b 0a 20 20 20 20 20  f lTabs) {.     
4410: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e             //con
4420: 73 6f 6c 65 2e 6c 6f 67 28 78 54 61 62 29 3b 0a  sole.log(xTab);.
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4440: 62 72 6f 77 73 65 72 2e 74 61 62 73 2e 73 65 6e  browser.tabs.sen
4450: 64 4d 65 73 73 61 67 65 28 78 54 61 62 2e 69 64  dMessage(xTab.id
4460: 2c 20 7b 73 41 63 74 69 6f 6e 52 65 71 75 65 73  , {sActionReques
4470: 74 3a 20 73 43 6f 6d 6d 61 6e 64 7d 29 3b 0a 20  t: sCommand});. 
4480: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
4490: 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20       });.       
44a0: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20   return;.    }. 
44b0: 20 20 20 62 72 6f 77 73 65 72 2e 74 61 62 73 2e     browser.tabs.
44c0: 71 75 65 72 79 28 7b 20 63 75 72 72 65 6e 74 57  query({ currentW
44d0: 69 6e 64 6f 77 3a 20 74 72 75 65 2c 20 61 63 74  indow: true, act
44e0: 69 76 65 3a 20 74 72 75 65 20 7d 29 2e 74 68 65  ive: true }).the
44f0: 6e 28 28 6c 54 61 62 73 29 20 3d 3e 20 7b 0a 20  n((lTabs) => {. 
4500: 20 20 20 20 20 20 20 66 6f 72 20 28 6c 65 74 20         for (let 
4510: 78 54 61 62 20 6f 66 20 6c 54 61 62 73 29 20 7b  xTab of lTabs) {
4520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 63  .            //c
4530: 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 78 54 61 62 29  onsole.log(xTab)
4540: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
4550: 6f 77 73 65 72 2e 74 61 62 73 2e 73 65 6e 64 4d  owser.tabs.sendM
4560: 65 73 73 61 67 65 28 78 54 61 62 2e 69 64 2c 20  essage(xTab.id, 
4570: 7b 73 41 63 74 69 6f 6e 52 65 71 75 65 73 74 3a  {sActionRequest:
4580: 20 73 43 6f 6d 6d 61 6e 64 7d 29 3b 0a 20 20 20   sCommand});.   
4590: 20 20 20 20 20 7d 0a 20 20 20 20 7d 2c 20 73 68       }.    }, sh
45a0: 6f 77 45 72 72 6f 72 29 3b 0a 7d 0a 0a 66 75 6e  owError);.}..fun
45b0: 63 74 69 6f 6e 20 73 65 6e 64 43 6f 6d 6d 61 6e  ction sendComman
45c0: 64 54 6f 41 6c 6c 54 61 62 73 20 28 73 43 6f 6d  dToAllTabs (sCom
45d0: 6d 61 6e 64 29 20 7b 0a 20 20 20 20 66 6f 72 20  mand) {.    for 
45e0: 28 6c 65 74 20 5b 69 54 61 62 2c 20 78 54 61 62  (let [iTab, xTab
45f0: 50 6f 72 74 5d 20 6f 66 20 64 43 6f 6e 6e 78 2e  Port] of dConnx.
4600: 65 6e 74 72 69 65 73 28 29 29 20 7b 0a 20 20 20  entries()) {.   
4610: 20 20 20 20 20 78 54 61 62 50 6f 72 74 2e 70 6f       xTabPort.po
4620: 73 74 4d 65 73 73 61 67 65 28 7b 73 41 63 74 69  stMessage({sActi
4630: 6f 6e 44 6f 6e 65 3a 20 73 43 6f 6d 6d 61 6e 64  onDone: sCommand
4640: 2c 20 72 65 73 75 6c 74 3a 20 6e 75 6c 6c 2c 20  , result: null, 
4650: 6f 49 6e 66 6f 3a 20 6e 75 6c 6c 2c 20 62 45 6e  oInfo: null, bEn
4660: 64 3a 20 66 61 6c 73 65 2c 20 62 45 72 72 6f 72  d: false, bError
4670: 3a 20 66 61 6c 73 65 7d 29 3b 0a 20 20 20 20 7d  : false});.    }
4680: 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 6f 70 65  .}..function ope
4690: 6e 4c 65 78 69 63 6f 6e 45 64 69 74 6f 72 20 28  nLexiconEditor (
46a0: 73 4e 61 6d 65 3d 22 5f 5f 70 65 72 73 6f 6e 61  sName="__persona
46b0: 6c 5f 5f 22 29 20 7b 0a 20 20 20 20 69 66 20 28  l__") {.    if (
46c0: 6e 54 61 62 4c 65 78 69 63 6f 6e 45 64 69 74 6f  nTabLexiconEdito
46d0: 72 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20  r === null) {.  
46e0: 20 20 20 20 20 20 69 66 20 28 62 43 68 72 6f 6d        if (bChrom
46f0: 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  e) {.           
4700: 20 62 72 6f 77 73 65 72 2e 74 61 62 73 2e 63 72   browser.tabs.cr
4710: 65 61 74 65 28 7b 0a 20 20 20 20 20 20 20 20 20  eate({.         
4720: 20 20 20 20 20 20 20 75 72 6c 3a 20 62 72 6f 77         url: brow
4730: 73 65 72 2e 65 78 74 65 6e 73 69 6f 6e 2e 67 65  ser.extension.ge
4740: 74 55 52 4c 28 22 70 61 6e 65 6c 2f 6c 65 78 5f  tURL("panel/lex_
4750: 65 64 69 74 6f 72 2e 68 74 6d 6c 22 29 0a 20 20  editor.html").  
4760: 20 20 20 20 20 20 20 20 20 20 7d 2c 20 6f 6e 4c            }, onL
4770: 65 78 69 63 6f 6e 45 64 69 74 6f 72 4f 70 65 6e  exiconEditorOpen
4780: 65 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ed);.           
4790: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
47a0: 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 74 20 78   }.        let x
47b0: 4c 65 78 45 64 69 74 6f 72 20 3d 20 62 72 6f 77  LexEditor = brow
47c0: 73 65 72 2e 74 61 62 73 2e 63 72 65 61 74 65 28  ser.tabs.create(
47d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 72  {.            ur
47e0: 6c 3a 20 62 72 6f 77 73 65 72 2e 65 78 74 65 6e  l: browser.exten
47f0: 73 69 6f 6e 2e 67 65 74 55 52 4c 28 22 70 61 6e  sion.getURL("pan
4800: 65 6c 2f 6c 65 78 5f 65 64 69 74 6f 72 2e 68 74  el/lex_editor.ht
4810: 6d 6c 22 29 0a 20 20 20 20 20 20 20 20 7d 29 3b  ml").        });
4820: 0a 20 20 20 20 20 20 20 20 78 4c 65 78 45 64 69  .        xLexEdi
4830: 74 6f 72 2e 74 68 65 6e 28 6f 6e 4c 65 78 69 63  tor.then(onLexic
4840: 6f 6e 45 64 69 74 6f 72 4f 70 65 6e 65 64 2c 20  onEditorOpened, 
4850: 73 68 6f 77 45 72 72 6f 72 29 3b 0a 20 20 20 20  showError);.    
4860: 7d 0a 20 20 20 20 65 6c 73 65 20 7b 0a 20 20 20  }.    else {.   
4870: 20 20 20 20 20 62 72 6f 77 73 65 72 2e 74 61 62       browser.tab
4880: 73 2e 75 70 64 61 74 65 28 6e 54 61 62 4c 65 78  s.update(nTabLex
4890: 69 63 6f 6e 45 64 69 74 6f 72 2c 20 7b 61 63 74  iconEditor, {act
48a0: 69 76 65 3a 20 74 72 75 65 7d 29 3b 0a 20 20 20  ive: true});.   
48b0: 20 7d 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 6f   }.}..function o
48c0: 6e 4c 65 78 69 63 6f 6e 45 64 69 74 6f 72 4f 70  nLexiconEditorOp
48d0: 65 6e 65 64 20 28 78 54 61 62 29 20 7b 0a 20 20  ened (xTab) {.  
48e0: 20 20 6e 54 61 62 4c 65 78 69 63 6f 6e 45 64 69    nTabLexiconEdi
48f0: 74 6f 72 20 3d 20 78 54 61 62 2e 69 64 3b 0a 7d  tor = xTab.id;.}
4900: 0a 0a 66 75 6e 63 74 69 6f 6e 20 6f 70 65 6e 44  ..function openD
4910: 69 63 74 69 6f 6e 61 72 69 65 73 20 28 29 20 7b  ictionaries () {
4920: 0a 20 20 20 20 69 66 20 28 6e 54 61 62 44 69 63  .    if (nTabDic
4930: 74 69 6f 6e 61 72 69 65 73 20 3d 3d 3d 20 6e 75  tionaries === nu
4940: 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66  ll) {.        if
4950: 20 28 62 43 68 72 6f 6d 65 29 20 7b 0a 20 20 20   (bChrome) {.   
4960: 20 20 20 20 20 20 20 20 20 62 72 6f 77 73 65 72           browser
4970: 2e 74 61 62 73 2e 63 72 65 61 74 65 28 7b 0a 20  .tabs.create({. 
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
4990: 72 6c 3a 20 62 72 6f 77 73 65 72 2e 65 78 74 65  rl: browser.exte
49a0: 6e 73 69 6f 6e 2e 67 65 74 55 52 4c 28 22 70 61  nsion.getURL("pa
49b0: 6e 65 6c 2f 64 69 63 74 69 6f 6e 61 72 69 65 73  nel/dictionaries
49c0: 2e 68 74 6d 6c 22 29 0a 20 20 20 20 20 20 20 20  .html").        
49d0: 20 20 20 20 7d 2c 20 6f 6e 44 69 63 74 69 6f 6e      }, onDiction
49e0: 61 72 69 65 73 4f 70 65 6e 65 64 29 3b 0a 20 20  ariesOpened);.  
49f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4a00: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4a10: 20 20 20 20 6c 65 74 20 78 4c 65 78 45 64 69 74      let xLexEdit
4a20: 6f 72 20 3d 20 62 72 6f 77 73 65 72 2e 74 61 62  or = browser.tab
4a30: 73 2e 63 72 65 61 74 65 28 7b 0a 20 20 20 20 20  s.create({.     
4a40: 20 20 20 20 20 20 20 75 72 6c 3a 20 62 72 6f 77         url: brow
4a50: 73 65 72 2e 65 78 74 65 6e 73 69 6f 6e 2e 67 65  ser.extension.ge
4a60: 74 55 52 4c 28 22 70 61 6e 65 6c 2f 64 69 63 74  tURL("panel/dict
4a70: 69 6f 6e 61 72 69 65 73 2e 68 74 6d 6c 22 29 0a  ionaries.html").
4a80: 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20          });.    
4a90: 20 20 20 20 78 4c 65 78 45 64 69 74 6f 72 2e 74      xLexEditor.t
4aa0: 68 65 6e 28 6f 6e 44 69 63 74 69 6f 6e 61 72 69  hen(onDictionari
4ab0: 65 73 4f 70 65 6e 65 64 2c 20 73 68 6f 77 45 72  esOpened, showEr
4ac0: 72 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ror);.    }.    
4ad0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 62  else {.        b
4ae0: 72 6f 77 73 65 72 2e 74 61 62 73 2e 75 70 64 61  rowser.tabs.upda
4af0: 74 65 28 6e 54 61 62 44 69 63 74 69 6f 6e 61 72  te(nTabDictionar
4b00: 69 65 73 2c 20 7b 61 63 74 69 76 65 3a 20 74 72  ies, {active: tr
4b10: 75 65 7d 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 66  ue});.    }.}..f
4b20: 75 6e 63 74 69 6f 6e 20 6f 6e 44 69 63 74 69 6f  unction onDictio
4b30: 6e 61 72 69 65 73 4f 70 65 6e 65 64 20 28 78 54  nariesOpened (xT
4b40: 61 62 29 20 7b 0a 20 20 20 20 6e 54 61 62 44 69  ab) {.    nTabDi
4b50: 63 74 69 6f 6e 61 72 69 65 73 20 3d 20 78 54 61  ctionaries = xTa
4b60: 62 2e 69 64 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f  b.id;.}..functio
4b70: 6e 20 6f 70 65 6e 43 6f 6e 6a 75 67 75 65 75 72  n openConjugueur
4b80: 54 61 62 20 28 29 20 7b 0a 20 20 20 20 69 66 20  Tab () {.    if 
4b90: 28 6e 54 61 62 43 6f 6e 6a 75 67 75 65 75 72 20  (nTabConjugueur 
4ba0: 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20  === null) {.    
4bb0: 20 20 20 20 69 66 20 28 62 43 68 72 6f 6d 65 29      if (bChrome)
4bc0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62   {.            b
4bd0: 72 6f 77 73 65 72 2e 74 61 62 73 2e 63 72 65 61  rowser.tabs.crea
4be0: 74 65 28 7b 0a 20 20 20 20 20 20 20 20 20 20 20  te({.           
4bf0: 20 20 20 20 20 75 72 6c 3a 20 62 72 6f 77 73 65       url: browse
4c00: 72 2e 65 78 74 65 6e 73 69 6f 6e 2e 67 65 74 55  r.extension.getU
4c10: 52 4c 28 22 70 61 6e 65 6c 2f 63 6f 6e 6a 75 67  RL("panel/conjug
4c20: 75 65 75 72 2e 68 74 6d 6c 22 29 0a 20 20 20 20  ueur.html").    
4c30: 20 20 20 20 20 20 20 20 7d 2c 20 6f 6e 43 6f 6e          }, onCon
4c40: 6a 75 67 75 65 75 72 4f 70 65 6e 65 64 29 3b 0a  jugueurOpened);.
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4c60: 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
4c70: 20 20 20 20 20 20 6c 65 74 20 78 43 6f 6e 6a 54        let xConjT
4c80: 61 62 20 3d 20 62 72 6f 77 73 65 72 2e 74 61 62  ab = browser.tab
4c90: 73 2e 63 72 65 61 74 65 28 7b 0a 20 20 20 20 20  s.create({.     
4ca0: 20 20 20 20 20 20 20 75 72 6c 3a 20 62 72 6f 77         url: brow
4cb0: 73 65 72 2e 65 78 74 65 6e 73 69 6f 6e 2e 67 65  ser.extension.ge
4cc0: 74 55 52 4c 28 22 70 61 6e 65 6c 2f 63 6f 6e 6a  tURL("panel/conj
4cd0: 75 67 75 65 75 72 2e 68 74 6d 6c 22 29 0a 20 20  ugueur.html").  
4ce0: 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20        });.      
4cf0: 20 20 78 43 6f 6e 6a 54 61 62 2e 74 68 65 6e 28    xConjTab.then(
4d00: 6f 6e 43 6f 6e 6a 75 67 75 65 75 72 4f 70 65 6e  onConjugueurOpen
4d10: 65 64 2c 20 73 68 6f 77 45 72 72 6f 72 29 3b 0a  ed, showError);.
4d20: 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 7b      }.    else {
4d30: 0a 20 20 20 20 20 20 20 20 62 72 6f 77 73 65 72  .        browser
4d40: 2e 74 61 62 73 2e 75 70 64 61 74 65 28 6e 54 61  .tabs.update(nTa
4d50: 62 43 6f 6e 6a 75 67 75 65 75 72 2c 20 7b 61 63  bConjugueur, {ac
4d60: 74 69 76 65 3a 20 74 72 75 65 7d 29 3b 0a 20 20  tive: true});.  
4d70: 20 20 7d 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20    }.}..function 
4d80: 6f 6e 43 6f 6e 6a 75 67 75 65 75 72 4f 70 65 6e  onConjugueurOpen
4d90: 65 64 20 28 78 54 61 62 29 20 7b 0a 20 20 20 20  ed (xTab) {.    
4da0: 6e 54 61 62 43 6f 6e 6a 75 67 75 65 75 72 20 3d  nTabConjugueur =
4db0: 20 78 54 61 62 2e 69 64 3b 0a 7d 0a 0a 66 75 6e   xTab.id;.}..fun
4dc0: 63 74 69 6f 6e 20 6f 70 65 6e 43 6f 6e 6a 75 67  ction openConjug
4dd0: 75 65 75 72 57 69 6e 64 6f 77 20 28 29 20 7b 0a  ueurWindow () {.
4de0: 20 20 20 20 69 66 20 28 62 43 68 72 6f 6d 65 29      if (bChrome)
4df0: 20 7b 0a 20 20 20 20 20 20 20 20 62 72 6f 77 73   {.        brows
4e00: 65 72 2e 77 69 6e 64 6f 77 73 2e 63 72 65 61 74  er.windows.creat
4e10: 65 28 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e({.            
4e20: 75 72 6c 3a 20 62 72 6f 77 73 65 72 2e 65 78 74  url: browser.ext
4e30: 65 6e 73 69 6f 6e 2e 67 65 74 55 52 4c 28 22 70  ension.getURL("p
4e40: 61 6e 65 6c 2f 63 6f 6e 6a 75 67 75 65 75 72 2e  anel/conjugueur.
4e50: 68 74 6d 6c 22 29 2c 0a 20 20 20 20 20 20 20 20  html"),.        
4e60: 20 20 20 20 74 79 70 65 3a 20 22 70 6f 70 75 70      type: "popup
4e70: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ",.            w
4e80: 69 64 74 68 3a 20 37 31 30 2c 0a 20 20 20 20 20  idth: 710,.     
4e90: 20 20 20 20 20 20 20 68 65 69 67 68 74 3a 20 39         height: 9
4ea0: 38 30 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 20  80.        });. 
4eb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20         return;. 
4ec0: 20 20 20 7d 0a 20 20 20 20 6c 65 74 20 78 43 6f     }.    let xCo
4ed0: 6e 6a 57 69 6e 64 6f 77 20 3d 20 62 72 6f 77 73  njWindow = brows
4ee0: 65 72 2e 77 69 6e 64 6f 77 73 2e 63 72 65 61 74  er.windows.creat
4ef0: 65 28 7b 0a 20 20 20 20 20 20 20 20 75 72 6c 3a  e({.        url:
4f00: 20 62 72 6f 77 73 65 72 2e 65 78 74 65 6e 73 69   browser.extensi
4f10: 6f 6e 2e 67 65 74 55 52 4c 28 22 70 61 6e 65 6c  on.getURL("panel
4f20: 2f 63 6f 6e 6a 75 67 75 65 75 72 2e 68 74 6d 6c  /conjugueur.html
4f30: 22 29 2c 0a 20 20 20 20 20 20 20 20 74 79 70 65  "),.        type
4f40: 3a 20 22 70 6f 70 75 70 22 2c 0a 20 20 20 20 20  : "popup",.     
4f50: 20 20 20 77 69 64 74 68 3a 20 37 31 30 2c 0a 20     width: 710,. 
4f60: 20 20 20 20 20 20 20 68 65 69 67 68 74 3a 20 39         height: 9
4f70: 38 30 0a 20 20 20 20 7d 29 3b 0a 7d 0a 0a 0a 66  80.    });.}...f
4f80: 75 6e 63 74 69 6f 6e 20 73 68 6f 77 45 72 72 6f  unction showErro
4f90: 72 20 28 65 29 20 7b 0a 20 20 20 20 63 6f 6e 73  r (e) {.    cons
4fa0: 6f 6c 65 2e 65 72 72 6f 72 28 65 29 3b 0a 20 20  ole.error(e);.  
4fb0: 20 20 2f 2f 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f    //console.erro
4fc0: 72 28 65 2e 66 69 6c 65 4e 61 6d 65 20 2b 20 22  r(e.fileName + "
4fd0: 5c 6e 22 20 2b 20 65 2e 6e 61 6d 65 20 2b 20 22  \n" + e.name + "
4fe0: 5c 6e 6c 69 6e 65 3a 20 22 20 2b 20 65 2e 6c 69  \nline: " + e.li
4ff0: 6e 65 4e 75 6d 62 65 72 20 2b 20 22 5c 6e 22 20  neNumber + "\n" 
5000: 2b 20 65 2e 6d 65 73 73 61 67 65 29 3b 0a 7d 0a  + e.message);.}.