Grammalecte  Hex Artifact Content

Artifact 0491f8cbe1f11d7d5bc66853c27f757d6bf09c56971f777e13879c63e6ef9b50:


0000: 2f 2f 20 4a 61 76 61 53 63 72 69 70 74 0a 0a 22  // JavaScript.."
0010: 75 73 65 20 73 74 72 69 63 74 22 3b 0a 0a 0a 76  use strict";...v
0020: 61 72 20 6f 47 72 61 6d 6d 61 6c 65 63 74 65 41  ar oGrammalecteA
0030: 50 49 20 3d 20 7b 0a 20 20 20 20 2f 2f 20 54 68  PI = {.    // Th
0040: 65 73 20 73 63 72 69 70 74 20 6d 69 67 68 74 20  es script might 
0050: 62 65 20 72 65 6c 6f 61 64 65 64 2c 20 64 6f 6e  be reloaded, don
0060: e2 80 99 74 20 75 73 65 20 63 6f 6e 73 74 20 6f  ...t use const o
0070: 72 20 6c 65 74 2e 0a 0a 20 20 20 20 2f 2f 20 66  r let...    // f
0080: 75 6e 63 74 69 6f 6e 73 20 63 61 6c 6c 61 62 6c  unctions callabl
0090: 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  e from within pa
00a0: 67 65 73 0a 20 20 20 20 2f 2f 20 74 6f 20 62 65  ges.    // to be
00b0: 20 73 65 6e 74 20 74 6f 20 74 68 65 20 63 6f 6e   sent to the con
00c0: 74 65 6e 74 2d 63 72 69 70 74 20 76 69 61 20 61  tent-cript via a
00d0: 6e 20 65 76 65 6e 74 20 e2 80 9c 47 72 61 6d 6d  n event ...Gramm
00e0: 61 6c 65 63 74 65 43 61 6c 6c e2 80 9d 0a 0a 20  alecteCall..... 
00f0: 20 20 20 73 56 65 72 73 69 6f 6e 3a 20 22 31 2e     sVersion: "1.
0100: 30 22 2c 0a 0a 20 20 20 20 67 65 6e 65 72 61 74  0",..    generat
0110: 65 4e 6f 64 65 49 64 3a 20 66 75 6e 63 74 69 6f  eNodeId: functio
0120: 6e 20 28 78 4e 6f 64 65 29 20 7b 0a 20 20 20 20  n (xNode) {.    
0130: 20 20 20 20 78 4e 6f 64 65 2e 69 64 20 3d 20 22      xNode.id = "
0140: 67 72 61 6d 6d 61 6c 65 63 74 65 5f 67 65 6e 65  grammalecte_gene
0150: 72 61 74 65 64 5f 69 64 5f 22 20 2b 20 44 61 74  rated_id_" + Dat
0160: 65 2e 6e 6f 77 28 29 2e 74 6f 53 74 72 69 6e 67  e.now().toString
0170: 28 33 36 29 20 2b 20 22 5f 22 20 2b 20 28 4d 61  (36) + "_" + (Ma
0180: 74 68 2e 66 6c 6f 6f 72 28 4d 61 74 68 2e 72 61  th.floor(Math.ra
0190: 6e 64 6f 6d 28 29 20 2a 20 28 31 30 30 30 30 30  ndom() * (100000
01a0: 30 29 29 29 2e 74 6f 53 74 72 69 6e 67 28 33 36  0))).toString(36
01b0: 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 6f  );.        conso
01c0: 6c 65 2e 6c 6f 67 28 22 5b 47 72 61 6d 6d 61 6c  le.log("[Grammal
01d0: 65 63 74 65 20 41 50 49 5d 20 67 65 6e 65 72 61  ecte API] genera
01e0: 74 65 64 20 69 64 3a 22 2c 20 78 4e 6f 64 65 2e  ted id:", xNode.
01f0: 69 64 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74  id);.        ret
0200: 75 72 6e 20 78 4e 6f 64 65 2e 69 64 3b 0a 20 20  urn xNode.id;.  
0210: 20 20 7d 2c 0a 0a 20 20 20 20 6f 70 65 6e 50 61    },..    openPa
0220: 6e 65 6c 46 6f 72 4e 6f 64 65 3a 20 66 75 6e 63  nelForNode: func
0230: 74 69 6f 6e 20 28 76 4e 6f 64 65 29 20 7b 0a 20  tion (vNode) {. 
0240: 20 20 20 20 20 20 20 2f 2f 20 20 50 61 72 61 6d         //  Param
0250: 65 74 65 72 3a 20 61 20 48 54 4d 4c 20 6e 6f 64  eter: a HTML nod
0260: 65 20 6f 72 20 74 68 65 20 69 64 65 6e 74 69 66  e or the identif
0270: 69 65 72 20 6f 66 20 61 20 48 54 4d 4c 20 6e 6f  ier of a HTML no
0280: 64 65 0a 20 20 20 20 20 20 20 20 69 66 20 28 76  de.        if (v
0290: 4e 6f 64 65 20 69 6e 73 74 61 6e 63 65 6f 66 20  Node instanceof 
02a0: 48 54 4d 4c 45 6c 65 6d 65 6e 74 29 20 7b 0a 20  HTMLElement) {. 
02b0: 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 73             let s
02c0: 4e 6f 64 65 49 64 20 3d 20 76 4e 6f 64 65 2e 69  NodeId = vNode.i
02d0: 64 20 7c 7c 20 74 68 69 73 2e 67 65 6e 65 72 61  d || this.genera
02e0: 74 65 4e 6f 64 65 49 64 28 76 4e 6f 64 65 29 3b  teNodeId(vNode);
02f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74  .            let
0300: 20 78 45 76 65 6e 74 20 3d 20 6e 65 77 20 43 75   xEvent = new Cu
0310: 73 74 6f 6d 45 76 65 6e 74 28 22 47 72 61 6d 6d  stomEvent("Gramm
0320: 61 6c 65 63 74 65 43 61 6c 6c 22 2c 20 7b 20 64  alecteCall", { d
0330: 65 74 61 69 6c 3a 20 4a 53 4f 4e 2e 73 74 72 69  etail: JSON.stri
0340: 6e 67 69 66 79 28 7b 73 43 6f 6d 6d 61 6e 64 3a  ngify({sCommand:
0350: 20 22 6f 70 65 6e 50 61 6e 65 6c 46 6f 72 4e 6f   "openPanelForNo
0360: 64 65 22 2c 20 73 4e 6f 64 65 49 64 3a 20 73 4e  de", sNodeId: sN
0370: 6f 64 65 49 64 7d 29 20 7d 29 3b 0a 20 20 20 20  odeId}) });.    
0380: 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
0390: 2e 64 69 73 70 61 74 63 68 45 76 65 6e 74 28 78  .dispatchEvent(x
03a0: 45 76 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  Event);.        
03b0: 7d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  }.        else i
03c0: 66 20 28 74 79 70 65 6f 66 28 76 4e 6f 64 65 29  f (typeof(vNode)
03d0: 20 3d 3d 3d 20 22 73 74 72 69 6e 67 22 20 26 26   === "string" &&
03e0: 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65   document.getEle
03f0: 6d 65 6e 74 42 79 49 64 28 76 4e 6f 64 65 29 29  mentById(vNode))
0400: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c   {.            l
0410: 65 74 20 78 45 76 65 6e 74 20 3d 20 6e 65 77 20  et xEvent = new 
0420: 43 75 73 74 6f 6d 45 76 65 6e 74 28 22 47 72 61  CustomEvent("Gra
0430: 6d 6d 61 6c 65 63 74 65 43 61 6c 6c 22 2c 20 7b  mmalecteCall", {
0440: 20 64 65 74 61 69 6c 3a 20 4a 53 4f 4e 2e 73 74   detail: JSON.st
0450: 72 69 6e 67 69 66 79 28 7b 73 43 6f 6d 6d 61 6e  ringify({sComman
0460: 64 3a 20 22 6f 70 65 6e 50 61 6e 65 6c 46 6f 72  d: "openPanelFor
0470: 4e 6f 64 65 22 2c 20 73 4e 6f 64 65 49 64 3a 20  Node", sNodeId: 
0480: 76 4e 6f 64 65 7d 29 20 7d 29 3b 0a 20 20 20 20  vNode}) });.    
0490: 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
04a0: 2e 64 69 73 70 61 74 63 68 45 76 65 6e 74 28 78  .dispatchEvent(x
04b0: 45 76 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  Event);.        
04c0: 7d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 7b  }.        else {
04d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
04e0: 73 6f 6c 65 2e 6c 6f 67 28 22 5b 47 72 61 6d 6d  sole.log("[Gramm
04f0: 61 6c 65 63 74 65 20 41 50 49 5d 20 45 72 72 6f  alecte API] Erro
0500: 72 3a 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  r: parameter is 
0510: 6e 6f 74 20 61 20 48 54 4d 4c 20 6e 6f 64 65 20  not a HTML node 
0520: 77 69 74 68 20 61 6e 20 69 64 65 6e 74 69 66 69  with an identifi
0530: 65 72 2e 22 29 3b 0a 20 20 20 20 20 20 20 20 7d  er.");.        }
0540: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 6f 70 65  .    },..    ope
0550: 6e 50 61 6e 65 6c 46 6f 72 54 65 78 74 3a 20 66  nPanelForText: f
0560: 75 6e 63 74 69 6f 6e 20 28 73 54 65 78 74 2c 20  unction (sText, 
0570: 76 4e 6f 64 65 3d 6e 75 6c 6c 29 20 7b 0a 20 20  vNode=null) {.  
0580: 20 20 20 20 20 20 2f 2f 20 20 50 61 72 61 6d 65        //  Parame
0590: 74 65 72 3a 20 74 65 78 74 20 74 6f 20 61 6e 61  ter: text to ana
05a0: 6c 79 7a 65 2c 20 61 6e 64 20 6f 70 74 69 6f 6e  lyze, and option
05b0: 61 6c 79 20 61 20 6e 6f 64 65 20 74 6f 20 73 65  aly a node to se
05c0: 6e 64 20 72 65 73 75 6c 74 73 20 74 6f 2e 0a 20  nd results to.. 
05d0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 65 6f         if (typeo
05e0: 66 28 73 54 65 78 74 29 20 3d 3d 3d 20 22 73 74  f(sText) === "st
05f0: 72 69 6e 67 22 29 20 7b 0a 20 20 20 20 20 20 20  ring") {.       
0600: 20 20 20 20 20 6c 65 74 20 73 4e 6f 64 65 49 64       let sNodeId
0610: 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 20   = "";.         
0620: 20 20 20 69 66 20 28 76 4e 6f 64 65 20 69 6e 73     if (vNode ins
0630: 74 61 6e 63 65 6f 66 20 48 54 4d 4c 45 6c 65 6d  tanceof HTMLElem
0640: 65 6e 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ent) {.         
0650: 20 20 20 20 20 20 20 73 4e 6f 64 65 49 64 20 3d         sNodeId =
0660: 20 76 4e 6f 64 65 2e 69 64 20 7c 7c 20 74 68 69   vNode.id || thi
0670: 73 2e 67 65 6e 65 72 61 74 65 4e 6f 64 65 49 64  s.generateNodeId
0680: 28 76 4e 6f 64 65 29 3b 0a 20 20 20 20 20 20 20  (vNode);.       
0690: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
06a0: 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65     else if (type
06b0: 6f 66 28 76 4e 6f 64 65 29 20 3d 3d 3d 20 22 73  of(vNode) === "s
06c0: 74 72 69 6e 67 22 20 26 26 20 64 6f 63 75 6d 65  tring" && docume
06d0: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49  nt.getElementByI
06e0: 64 28 76 4e 6f 64 65 29 29 20 7b 0a 20 20 20 20  d(vNode)) {.    
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 4e 6f 64              sNod
0700: 65 49 64 20 3d 20 76 4e 6f 64 65 3b 0a 20 20 20  eId = vNode;.   
0710: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
0720: 20 20 20 20 20 20 20 65 6c 73 65 20 7b 0a 20 20         else {.  
0730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
0740: 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 47 72 61 6d  nsole.log("[Gram
0750: 6d 61 6c 65 63 74 65 20 41 50 49 5d 20 4e 6f 20  malecte API] No 
0760: 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 2e  node identifier.
0770: 20 4e 6f 20 65 76 65 6e 74 2c 20 6e 6f 20 72 65   No event, no re
0780: 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 73 65 6e  sult will be sen
0790: 74 2e 22 29 0a 20 20 20 20 20 20 20 20 20 20 20  t.").           
07a0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c   }.            l
07b0: 65 74 20 78 45 76 65 6e 74 20 3d 20 6e 65 77 20  et xEvent = new 
07c0: 43 75 73 74 6f 6d 45 76 65 6e 74 28 22 47 72 61  CustomEvent("Gra
07d0: 6d 6d 61 6c 65 63 74 65 43 61 6c 6c 22 2c 20 7b  mmalecteCall", {
07e0: 20 64 65 74 61 69 6c 3a 20 4a 53 4f 4e 2e 73 74   detail: JSON.st
07f0: 72 69 6e 67 69 66 79 28 7b 73 43 6f 6d 6d 61 6e  ringify({sComman
0800: 64 3a 20 22 6f 70 65 6e 50 61 6e 65 6c 46 6f 72  d: "openPanelFor
0810: 54 65 78 74 22 2c 20 73 54 65 78 74 3a 20 73 54  Text", sText: sT
0820: 65 78 74 2c 20 73 4e 6f 64 65 49 64 3a 20 73 4e  ext, sNodeId: sN
0830: 6f 64 65 49 64 7d 29 20 7d 29 3b 0a 20 20 20 20  odeId}) });.    
0840: 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
0850: 2e 64 69 73 70 61 74 63 68 45 76 65 6e 74 28 78  .dispatchEvent(x
0860: 45 76 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  Event);.        
0870: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
0880: 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67       console.log
0890: 28 22 5b 47 72 61 6d 6d 61 6c 65 63 74 65 20 41  ("[Grammalecte A
08a0: 50 49 5d 20 45 72 72 6f 72 3a 20 70 61 72 61 6d  PI] Error: param
08b0: 65 74 65 72 20 69 73 20 6e 6f 74 20 61 20 74 65  eter is not a te
08c0: 78 74 2e 22 29 3b 0a 20 20 20 20 20 20 20 20 7d  xt.");.        }
08d0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 70 61 72  .    },..    par
08e0: 73 65 4e 6f 64 65 3a 20 66 75 6e 63 74 69 6f 6e  seNode: function
08f0: 20 28 76 4e 6f 64 65 29 20 7b 0a 20 20 20 20 20   (vNode) {.     
0900: 20 20 20 2f 2a 20 20 50 61 72 61 6d 65 74 65 72     /*  Parameter
0910: 3a 20 61 20 48 54 4d 4c 20 6e 6f 64 65 20 28 77  : a HTML node (w
0920: 69 74 68 20 61 20 69 64 65 6e 74 69 66 69 65 72  ith a identifier
0930: 29 20 6f 72 20 74 68 65 20 69 64 65 6e 74 69 66  ) or the identif
0940: 69 65 72 20 6f 66 20 61 20 48 54 4d 4c 20 6e 6f  ier of a HTML no
0950: 64 65 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  de..            
0960: 54 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20  The result will 
0970: 62 65 20 73 65 6e 74 20 61 73 20 61 6e 20 65 76  be sent as an ev
0980: 65 6e 74 20 e2 80 9c 47 72 61 6d 6d 61 6c 65 63  ent ...Grammalec
0990: 74 65 52 65 73 75 6c 74 e2 80 9d 20 74 6f 20 74  teResult... to t
09a0: 68 65 20 6e 6f 64 65 2e 0a 20 20 20 20 20 20 20  he node..       
09b0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28   */.        if (
09c0: 76 4e 6f 64 65 20 69 6e 73 74 61 6e 63 65 6f 66  vNode instanceof
09d0: 20 48 54 4d 4c 45 6c 65 6d 65 6e 74 29 20 7b 0a   HTMLElement) {.
09e0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
09f0: 73 4e 6f 64 65 49 64 20 3d 20 76 4e 6f 64 65 2e  sNodeId = vNode.
0a00: 69 64 20 7c 7c 20 74 68 69 73 2e 67 65 6e 65 72  id || this.gener
0a10: 61 74 65 4e 6f 64 65 49 64 28 76 4e 6f 64 65 29  ateNodeId(vNode)
0a20: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  ;.            le
0a30: 74 20 78 45 76 65 6e 74 20 3d 20 6e 65 77 20 43  t xEvent = new C
0a40: 75 73 74 6f 6d 45 76 65 6e 74 28 22 47 72 61 6d  ustomEvent("Gram
0a50: 6d 61 6c 65 63 74 65 43 61 6c 6c 22 2c 20 7b 20  malecteCall", { 
0a60: 64 65 74 61 69 6c 3a 20 4a 53 4f 4e 2e 73 74 72  detail: JSON.str
0a70: 69 6e 67 69 66 79 28 7b 73 43 6f 6d 6d 61 6e 64  ingify({sCommand
0a80: 3a 20 22 70 61 72 73 65 4e 6f 64 65 22 2c 20 73  : "parseNode", s
0a90: 4e 6f 64 65 49 64 3a 20 73 4e 6f 64 65 49 64 7d  NodeId: sNodeId}
0aa0: 29 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ) });.          
0ab0: 20 20 64 6f 63 75 6d 65 6e 74 2e 64 69 73 70 61    document.dispa
0ac0: 74 63 68 45 76 65 6e 74 28 78 45 76 65 6e 74 29  tchEvent(xEvent)
0ad0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0ae0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70      else if (typ
0af0: 65 6f 66 28 76 4e 6f 64 65 29 20 3d 3d 3d 20 22  eof(vNode) === "
0b00: 73 74 72 69 6e 67 22 20 26 26 20 64 6f 63 75 6d  string" && docum
0b10: 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79  ent.getElementBy
0b20: 49 64 28 76 4e 6f 64 65 29 29 20 7b 0a 20 20 20  Id(vNode)) {.   
0b30: 20 20 20 20 20 20 20 20 20 6c 65 74 20 78 45 76           let xEv
0b40: 65 6e 74 20 3d 20 6e 65 77 20 43 75 73 74 6f 6d  ent = new Custom
0b50: 45 76 65 6e 74 28 22 47 72 61 6d 6d 61 6c 65 63  Event("Grammalec
0b60: 74 65 43 61 6c 6c 22 2c 20 7b 20 64 65 74 61 69  teCall", { detai
0b70: 6c 3a 20 4a 53 4f 4e 2e 73 74 72 69 6e 67 69 66  l: JSON.stringif
0b80: 79 28 7b 73 43 6f 6d 6d 61 6e 64 3a 20 22 70 61  y({sCommand: "pa
0b90: 72 73 65 4e 6f 64 65 22 2c 20 73 4e 6f 64 65 49  rseNode", sNodeI
0ba0: 64 3a 20 76 4e 6f 64 65 7d 29 20 7d 29 3b 0a 20  d: vNode}) });. 
0bb0: 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
0bc0: 65 6e 74 2e 64 69 73 70 61 74 63 68 45 76 65 6e  ent.dispatchEven
0bd0: 74 28 78 45 76 65 6e 74 29 3b 0a 20 20 20 20 20  t(xEvent);.     
0be0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65 6c 73     }.        els
0bf0: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
0c00: 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 47 72  console.log("[Gr
0c10: 61 6d 6d 61 6c 65 63 74 65 20 41 50 49 5d 20 45  ammalecte API] E
0c20: 72 72 6f 72 3a 20 70 61 72 61 6d 65 74 65 72 20  rror: parameter 
0c30: 69 73 20 6e 6f 74 20 61 20 48 54 4d 4c 20 6e 6f  is not a HTML no
0c40: 64 65 20 77 69 74 68 20 61 6e 20 69 64 65 6e 74  de with an ident
0c50: 69 66 69 65 72 2e 22 29 3b 0a 20 20 20 20 20 20  ifier.");.      
0c60: 20 20 7d 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20    }.    },..    
0c70: 70 61 72 73 65 54 65 78 74 3a 20 66 75 6e 63 74  parseText: funct
0c80: 69 6f 6e 20 28 73 54 65 78 74 2c 20 76 4e 6f 64  ion (sText, vNod
0c90: 65 29 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20  e) {.        // 
0ca0: 20 50 61 72 61 6d 65 74 65 72 3a 20 74 65 78 74   Parameter: text
0cb0: 20 74 6f 20 61 6e 61 6c 79 7a 65 2c 20 61 6e 64   to analyze, and
0cc0: 20 61 20 6e 6f 64 65 20 74 6f 20 73 65 6e 64 20   a node to send 
0cd0: 72 65 73 75 6c 74 73 20 74 6f 2e 0a 20 20 20 20  results to..    
0ce0: 20 20 20 20 69 66 20 28 74 79 70 65 6f 66 28 73      if (typeof(s
0cf0: 54 65 78 74 29 20 3d 3d 3d 20 22 73 74 72 69 6e  Text) === "strin
0d00: 67 22 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  g") {.          
0d10: 20 20 69 66 20 28 76 4e 6f 64 65 20 69 6e 73 74    if (vNode inst
0d20: 61 6e 63 65 6f 66 20 48 54 4d 4c 45 6c 65 6d 65  anceof HTMLEleme
0d30: 6e 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  nt) {.          
0d40: 20 20 20 20 20 20 6c 65 74 20 73 4e 6f 64 65 49        let sNodeI
0d50: 64 20 3d 20 76 4e 6f 64 65 2e 69 64 20 7c 7c 20  d = vNode.id || 
0d60: 74 68 69 73 2e 67 65 6e 65 72 61 74 65 4e 6f 64  this.generateNod
0d70: 65 49 64 28 76 4e 6f 64 65 29 3b 0a 20 20 20 20  eId(vNode);.    
0d80: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
0d90: 78 45 76 65 6e 74 20 3d 20 6e 65 77 20 43 75 73  xEvent = new Cus
0da0: 74 6f 6d 45 76 65 6e 74 28 22 47 72 61 6d 6d 61  tomEvent("Gramma
0db0: 6c 65 63 74 65 43 61 6c 6c 22 2c 20 7b 20 64 65  lecteCall", { de
0dc0: 74 61 69 6c 3a 20 4a 53 4f 4e 2e 73 74 72 69 6e  tail: JSON.strin
0dd0: 67 69 66 79 28 7b 73 43 6f 6d 6d 61 6e 64 3a 20  gify({sCommand: 
0de0: 22 70 61 72 73 65 54 65 78 74 22 2c 20 73 54 65  "parseText", sTe
0df0: 78 74 3a 20 73 54 65 78 74 2c 20 73 4e 6f 64 65  xt: sText, sNode
0e00: 49 64 3a 20 73 4e 6f 64 65 49 64 7d 29 20 7d 29  Id: sNodeId}) })
0e10: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
0e20: 20 20 64 6f 63 75 6d 65 6e 74 2e 64 69 73 70 61    document.dispa
0e30: 74 63 68 45 76 65 6e 74 28 78 45 76 65 6e 74 29  tchEvent(xEvent)
0e40: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
0e50: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
0e60: 20 69 66 20 28 74 79 70 65 6f 66 28 76 4e 6f 64   if (typeof(vNod
0e70: 65 29 20 3d 3d 3d 20 22 73 74 72 69 6e 67 22 20  e) === "string" 
0e80: 26 26 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45  && document.getE
0e90: 6c 65 6d 65 6e 74 42 79 49 64 28 76 4e 6f 64 65  lementById(vNode
0ea0: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  )) {.           
0eb0: 20 20 20 20 20 6c 65 74 20 78 45 76 65 6e 74 20       let xEvent 
0ec0: 3d 20 6e 65 77 20 43 75 73 74 6f 6d 45 76 65 6e  = new CustomEven
0ed0: 74 28 22 47 72 61 6d 6d 61 6c 65 63 74 65 43 61  t("GrammalecteCa
0ee0: 6c 6c 22 2c 20 7b 20 64 65 74 61 69 6c 3a 20 4a  ll", { detail: J
0ef0: 53 4f 4e 2e 73 74 72 69 6e 67 69 66 79 28 7b 73  SON.stringify({s
0f00: 43 6f 6d 6d 61 6e 64 3a 20 22 70 61 72 73 65 54  Command: "parseT
0f10: 65 78 74 22 2c 20 73 54 65 78 74 3a 20 73 54 65  ext", sText: sTe
0f20: 78 74 2c 20 73 4e 6f 64 65 49 64 3a 20 76 4e 6f  xt, sNodeId: vNo
0f30: 64 65 7d 29 20 7d 29 3b 0a 20 20 20 20 20 20 20  de}) });.       
0f40: 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
0f50: 74 2e 64 69 73 70 61 74 63 68 45 76 65 6e 74 28  t.dispatchEvent(
0f60: 78 45 76 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  xEvent);.       
0f70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
0f80: 20 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20     else {.      
0f90: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c            consol
0fa0: 65 2e 6c 6f 67 28 22 5b 47 72 61 6d 6d 61 6c 65  e.log("[Grammale
0fb0: 63 74 65 20 41 50 49 5d 20 45 72 72 6f 72 3a 20  cte API] Error: 
0fc0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
0fd0: 20 61 20 48 54 4d 4c 20 6e 6f 64 65 20 77 69 74   a HTML node wit
0fe0: 68 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e  h an identifier.
0ff0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
1000: 7d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  }.        } else
1010: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63   {.            c
1020: 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 47 72 61  onsole.log("[Gra
1030: 6d 6d 61 6c 65 63 74 65 20 41 50 49 5d 20 45 72  mmalecte API] Er
1040: 72 6f 72 3a 20 70 61 72 61 6d 65 74 65 72 20 69  ror: parameter i
1050: 73 20 6e 6f 74 20 61 20 74 65 78 74 2e 22 29 3b  s not a text.");
1060: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
1070: 2c 0a 0a 20 20 20 20 67 65 74 53 70 65 6c 6c 53  ,..    getSpellS
1080: 75 67 67 65 73 74 69 6f 6e 73 3a 20 66 75 6e 63  uggestions: func
1090: 74 69 6f 6e 20 28 73 57 6f 72 64 2c 20 73 44 65  tion (sWord, sDe
10a0: 73 74 69 6e 61 74 69 6f 6e 2c 20 73 52 65 71 75  stination, sRequ
10b0: 65 73 74 49 64 3d 22 22 29 20 7b 0a 20 20 20 20  estId="") {.    
10c0: 20 20 20 20 2f 2a 20 70 61 72 61 6d 65 74 65 72      /* parameter
10d0: 73 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d  s:.            -
10e0: 20 73 57 6f 72 64 20 28 73 74 72 69 6e 67 29 0a   sWord (string).
10f0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 20 73 44              - sD
1100: 65 73 74 69 6e 61 74 69 6f 6e 3a 20 48 54 4d 4c  estination: HTML
1110: 20 69 64 65 6e 74 69 66 69 65 72 20 28 73 74 72   identifier (str
1120: 69 6e 67 29 20 2d 3e 20 74 68 65 20 72 65 73 75  ing) -> the resu
1130: 6c 74 20 77 69 6c 6c 20 62 65 20 73 65 6e 74 20  lt will be sent 
1140: 61 73 20 61 6e 20 65 76 65 6e 74 20 e2 80 9c 47  as an event ...G
1150: 72 61 6d 6d 61 6c 65 63 74 65 52 65 73 75 6c 74  rammalecteResult
1160: e2 80 9d 20 74 6f 20 64 65 73 74 69 6e 61 74 69  ... to destinati
1170: 6f 6e 20 6e 6f 64 65 0a 20 20 20 20 20 20 20 20  on node.        
1180: 20 20 20 20 2d 20 73 52 65 71 75 65 73 74 49 64      - sRequestId
1190: 3a 20 63 75 73 74 6f 6d 20 69 64 65 6e 74 69 66  : custom identif
11a0: 69 65 72 20 66 6f 72 20 74 68 65 20 72 65 71 75  ier for the requ
11b0: 65 73 74 20 28 73 74 72 69 6e 67 29 20 5b 64 65  est (string) [de
11c0: 66 61 75 6c 74 20 3d 20 22 22 5d 0a 20 20 20 20  fault = ""].    
11d0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
11e0: 66 20 28 74 79 70 65 6f 66 28 73 57 6f 72 64 29  f (typeof(sWord)
11f0: 20 3d 3d 3d 20 22 73 74 72 69 6e 67 22 20 20 26   === "string"  &
1200: 26 20 20 74 79 70 65 6f 66 28 73 44 65 73 74 69  &  typeof(sDesti
1210: 6e 61 74 69 6f 6e 29 20 3d 3d 3d 20 22 73 74 72  nation) === "str
1220: 69 6e 67 22 20 20 26 26 20 20 74 79 70 65 6f 66  ing"  &&  typeof
1230: 28 73 52 65 71 75 65 73 74 49 64 29 20 3d 3d 3d  (sRequestId) ===
1240: 20 22 73 74 72 69 6e 67 22 29 20 7b 0a 20 20 20   "string") {.   
1250: 20 20 20 20 20 20 20 20 20 6c 65 74 20 78 45 76           let xEv
1260: 65 6e 74 20 3d 20 6e 65 77 20 43 75 73 74 6f 6d  ent = new Custom
1270: 45 76 65 6e 74 28 22 47 72 61 6d 6d 61 6c 65 63  Event("Grammalec
1280: 74 65 43 61 6c 6c 22 2c 20 7b 20 64 65 74 61 69  teCall", { detai
1290: 6c 3a 20 4a 53 4f 4e 2e 73 74 72 69 6e 67 69 66  l: JSON.stringif
12a0: 79 28 7b 73 43 6f 6d 6d 61 6e 64 3a 20 22 67 65  y({sCommand: "ge
12b0: 74 53 70 65 6c 6c 53 75 67 67 65 73 74 69 6f 6e  tSpellSuggestion
12c0: 73 22 2c 20 73 57 6f 72 64 3a 20 73 57 6f 72 64  s", sWord: sWord
12d0: 2c 20 73 44 65 73 74 69 6e 61 74 69 6f 6e 3a 20  , sDestination: 
12e0: 73 44 65 73 74 69 6e 61 74 69 6f 6e 2c 20 73 52  sDestination, sR
12f0: 65 71 75 65 73 74 49 64 3a 20 73 52 65 71 75 65  equestId: sReque
1300: 73 74 49 64 7d 29 20 7d 29 3b 0a 20 20 20 20 20  stId}) });.     
1310: 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
1320: 64 69 73 70 61 74 63 68 45 76 65 6e 74 28 78 45  dispatchEvent(xE
1330: 76 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  vent);.        }
1340: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
1350: 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28      console.log(
1360: 22 5b 47 72 61 6d 6d 61 6c 65 63 74 65 20 41 50  "[Grammalecte AP
1370: 49 5d 20 45 72 72 6f 72 3a 20 6f 6e 65 20 6f 72  I] Error: one or
1380: 20 73 65 76 65 72 61 6c 20 70 61 72 61 6d 65 74   several paramet
1390: 65 72 73 20 61 72 65 6e e2 80 99 74 20 73 74 72  ers aren...t str
13a0: 69 6e 67 2e 22 29 3b 0a 20 20 20 20 20 20 20 20  ing.");.        
13b0: 7d 0a 20 20 20 20 7d 0a 7d 0a 0a 2f 2a 0a 20 20  }.    }.}../*.  
13c0: 20 20 54 65 6c 6c 20 74 6f 20 74 68 65 20 77 65    Tell to the we
13d0: 62 70 61 67 65 20 74 68 61 74 20 74 68 65 20 47  bpage that the G
13e0: 72 61 6d 6d 61 6c 65 63 74 65 20 41 50 49 20 69  rammalecte API i
13f0: 73 20 72 65 61 64 79 2e 0a 2a 2f 0a 64 6f 63 75  s ready..*/.docu
1400: 6d 65 6e 74 2e 64 69 73 70 61 74 63 68 45 76 65  ment.dispatchEve
1410: 6e 74 28 6e 65 77 20 45 76 65 6e 74 28 27 47 72  nt(new Event('Gr
1420: 61 6d 6d 61 6c 65 63 74 65 4c 6f 61 64 65 64 27  ammalecteLoaded'
1430: 29 29 3b 0a 0a                                   ));..