Fix typo 'compact' --> 'graph' for output
[erdiag.git] / parser.js
index eeafa08..0ab6a43 100644 (file)
--- a/parser.js
+++ b/parser.js
@@ -1,7 +1,7 @@
 // ER diagram description parser
 class ErDiags
 {
-       constructor(description, callDot)
+       constructor(description, output, image)
        {
                this.entities = { };
                this.inheritances = [ ];
@@ -9,14 +9,8 @@ class ErDiags
                this.tables = { };
                this.mcdParsing(description);
                this.mldParsing();
-               this.callDot = !!callDot;
-               if (this.callDot)
-               {
-                       // Cache SVG graphs returned by server (in addition to server cache = good perfs)
-                       this.mcdGraph = "";
-                       this.mldGraph = "";
-               }
-               this.sqlText = "";
+               this.output = output || "graph";
+               this.image = image || "svg";
        }
 
        static CARDINAL(symbol)
@@ -174,12 +168,11 @@ class ErDiags
                                        name: attr.name,
                                        type: attr.type,
                                        isKey: attr.isKey,
-                                       qualifiers: attr.qualifiers,
                                };
                                if (!!attr.qualifiers && !!attr.qualifiers.match(/references/i))
                                {
                                        Object.assign(newField, {ref: attr.qualifiers.match(/references ([^\s]+)/i)[1]});
-                                       attr.qualifiers = attr.qualifiers.replace(/references [^\s]+/, "");
+                                       newField.qualifiers = attr.qualifiers.replace(/references [^\s]+/i, "");
                                }
                                newTable.push(newField);
                        });
@@ -289,28 +282,12 @@ class ErDiags
        // DRAWING + GET SQL FROM PARSING
        /////////////////////////////////
 
-       static AjaxGet(dotInput, callback)
-       {
-               let xhr = new XMLHttpRequest();
-               xhr.onreadystatechange = function() {
-                       if (this.readyState == 4 && this.status == 200)
-                               callback(this.responseText);
-               };
-               xhr.open("GET", "scripts/getGraphSvg.php?dot=" + encodeURIComponent(dotInput), true);
-               xhr.send();
-       }
-
        // "Modèle conceptuel des données". TODO: option for graph size
        // NOTE: randomizing helps to obtain better graphs (sometimes)
        drawMcd(id, mcdStyle) //mcdStyle: bubble, or compact
        {
                let element = document.getElementById(id);
                mcdStyle = mcdStyle || "compact";
-               if (!!this.mcdGraph)
-               {
-                       element.innerHTML = this.mcdGraph;
-                       return;
-               }
                // Build dot graph input
                let mcdDot = 'graph {\n';
                mcdDot += 'rankdir="LR";\n';
@@ -424,15 +401,9 @@ class ErDiags
                        });
                });
                mcdDot += '}';
-               if (this.callDot)
-               {
-                       // Draw graph in element
-                       ErDiags.AjaxGet(mcdDot, graphSvg => {
-                               this.mcdGraph = graphSvg;
-                               element.innerHTML = graphSvg;
-                       });
-               }
-               else //just show dot input
+               if (this.output == "graph") //draw graph in element
+                       element.innerHTML = "<img src='scripts/getGraph_" + this.image + ".php?dot=" + encodeURIComponent(mcdDot) + "'/>";
+               else //output = "text": just show dot input
                        element.innerHTML = mcdDot.replace(/</g,"&lt;").replace(/>/g,"&gt;");
        }
 
@@ -440,11 +411,6 @@ class ErDiags
        drawMld(id)
        {
                let element = document.getElementById(id);
-               if (!!this.mldGraph)
-               {
-                       element.innerHTML = this.mcdGraph;
-                       return;
-               }
                // Build dot graph input (assuming foreign keys not already present...)
                let mldDot = 'graph {\n';
                mldDot += 'rankdir="LR";\n';
@@ -470,13 +436,8 @@ class ErDiags
                });
                mldDot += links + '\n';
                mldDot += '}';
-               if (this.callDot)
-               {
-                       ErDiags.AjaxGet(mldDot, graphSvg => {
-                               this.mldGraph = graphSvg;
-                               element.innerHTML = graphSvg;
-                       });
-               }
+               if (this.output == "graph")
+                       element.innerHTML = "<img src='scripts/getGraph_" + this.image + ".php?dot=" + encodeURIComponent(mldDot) + "'/>";
                else
                        element.innerHTML = mldDot.replace(/</g,"&lt;").replace(/>/g,"&gt;");
        }