From 2a4434a04a15eb20e60c73b14fdd966daa177a23 Mon Sep 17 00:00:00 2001 From: Dan Sosedoff Date: Wed, 30 Nov 2022 14:03:11 -0600 Subject: [PATCH 1/4] Generate a new url based on the old one using URL --- static/js/app.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/static/js/app.js b/static/js/app.js index d09b160..a14d0bb 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -754,13 +754,29 @@ function runAnalyze() { }); } +function exportURL(path, params) { + var url = new URL(window.location.href.split("#")[0]); + + url.pathname += path; + for (key in params) { + url.searchParams.append(key, params[key]); + } + + return url.toString(); +} + function exportTo(format) { var query = getEditorSelection(); if (query.length == 0) { return; } - var url = window.location.href.split("#")[0] + "api/query?format=" + format + "&query=" + encodeQuery(query) + "&_session_id=" + getSessionId(); + var url = exportURL("api/query", { + "format": format, + "query": encodeQuery(query), + "_session_id": getSessionId() + }) + var win = window.open(url, '_blank'); setCurrentTab("table_query"); From e13c6d0d1ae463aa319670d78dcc613dfd286aac Mon Sep 17 00:00:00 2001 From: Dan Sosedoff Date: Wed, 30 Nov 2022 14:18:31 -0600 Subject: [PATCH 2/4] Refactor code responsible for opening export pages in new window --- static/js/app.js | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/static/js/app.js b/static/js/app.js index a14d0bb..bb98dde 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -237,15 +237,11 @@ function performTableAction(table, action, el) { var format = el.data("format"); var db = $("#current_database").text(); var filename = db + "." + table + "." + format; - var query = window.encodeURI("SELECT * FROM " + table); - var url = window.location.href.split("#")[0] + "api/query?format=" + format + "&filename=" + filename + "&query=" + query + "&_session_id=" + getSessionId(); - var win = window.open(url, "_blank"); - win.focus(); + var query = "SELECT * FROM " + table; + openInNewWindow("api/query", { "format": format, "filename": filename, "query": query, "_session_id": getSessionId() }); break; case "dump": - var url = window.location.href.split("#")[0] + "api/export?table=" + table + "&_session_id=" + getSessionId(); - var win = window.open(url, "_blank"); - win.focus(); + openInNewWindow("api/export", { "table": table, "_session_id": getSessionId() }); break; case "copy": copyToClipboard(table.split('.')[1]); @@ -271,10 +267,8 @@ function performViewAction(view, action, el) { var format = el.data("format"); var db = $("#current_database").text(); var filename = db + "." + view + "." + format; - var query = window.encodeURI("SELECT * FROM " + view); - var url = window.location.href.split("#")[0] + "api/query?format=" + format + "&filename=" + filename + "&query=" + query + "&_session_id=" + getSessionId(); - var win = window.open(url, "_blank"); - win.focus(); + var query = "SELECT * FROM " + view; + openInNewWindow("api/query", { "format": format, "filename": filename, "query": query, "_session_id": getSessionId() }); break; case "copy": copyToClipboard(view.split('.')[1]); @@ -765,22 +759,25 @@ function exportURL(path, params) { return url.toString(); } +function openInNewWindow(path, params) { + var url = exportURL(path, params); + var win = window.open(url, '_blank'); + win.focus(); +} + function exportTo(format) { var query = getEditorSelection(); if (query.length == 0) { return; } - var url = exportURL("api/query", { + setCurrentTab("table_query"); + + openInNewWindow("api/query", { "format": format, "query": encodeQuery(query), "_session_id": getSessionId() }) - - var win = window.open(url, '_blank'); - - setCurrentTab("table_query"); - win.focus(); } // Fetch all unique values for the selected column in the table @@ -1076,9 +1073,7 @@ function bindCurrentDatabaseMenu() { switch(menuItem.data("action")) { case "export": - var url = window.location.href.split("#")[0] + "api/export?_session_id=" + getSessionId(); - var win = window.open(url, "_blank"); - win.focus(); + openInNewWindow("api/export", { "_session_id": getSessionId() }); break; } } From f6bd4e3a35b566d6c83745229080ae5862926583 Mon Sep 17 00:00:00 2001 From: Dan Sosedoff Date: Thu, 1 Dec 2022 11:51:47 -0600 Subject: [PATCH 3/4] Rename exportURL function --- static/js/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/js/app.js b/static/js/app.js index bb98dde..b69fec9 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -748,7 +748,7 @@ function runAnalyze() { }); } -function exportURL(path, params) { +function generateURL(path, params) { var url = new URL(window.location.href.split("#")[0]); url.pathname += path; @@ -760,7 +760,7 @@ function exportURL(path, params) { } function openInNewWindow(path, params) { - var url = exportURL(path, params); + var url = generateURL(path, params); var win = window.open(url, '_blank'); win.focus(); } From c08d8cf61725fbe307489de731095c00c7c193be Mon Sep 17 00:00:00 2001 From: Dan Sosedoff Date: Thu, 1 Dec 2022 12:07:27 -0600 Subject: [PATCH 4/4] Automatically add session ID to all generated URLs --- static/js/app.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/static/js/app.js b/static/js/app.js index b69fec9..e15b21c 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -238,10 +238,10 @@ function performTableAction(table, action, el) { var db = $("#current_database").text(); var filename = db + "." + table + "." + format; var query = "SELECT * FROM " + table; - openInNewWindow("api/query", { "format": format, "filename": filename, "query": query, "_session_id": getSessionId() }); + openInNewWindow("api/query", { "format": format, "filename": filename, "query": query }); break; case "dump": - openInNewWindow("api/export", { "table": table, "_session_id": getSessionId() }); + openInNewWindow("api/export", { "table": table }); break; case "copy": copyToClipboard(table.split('.')[1]); @@ -268,7 +268,7 @@ function performViewAction(view, action, el) { var db = $("#current_database").text(); var filename = db + "." + view + "." + format; var query = "SELECT * FROM " + view; - openInNewWindow("api/query", { "format": format, "filename": filename, "query": query, "_session_id": getSessionId() }); + openInNewWindow("api/query", { "format": format, "filename": filename, "query": query }); break; case "copy": copyToClipboard(view.split('.')[1]); @@ -756,6 +756,9 @@ function generateURL(path, params) { url.searchParams.append(key, params[key]); } + // Automatically append session id so we dont have to do that everywhere + url.searchParams.append("_session_id", getSessionId()); + return url.toString(); } @@ -775,8 +778,7 @@ function exportTo(format) { openInNewWindow("api/query", { "format": format, - "query": encodeQuery(query), - "_session_id": getSessionId() + "query": encodeQuery(query) }) } @@ -1073,7 +1075,7 @@ function bindCurrentDatabaseMenu() { switch(menuItem.data("action")) { case "export": - openInNewWindow("api/export", { "_session_id": getSessionId() }); + openInNewWindow("api/export"); break; } }