Skip to content

Commit b8cb624

Browse files
committed
working on JMA
1 parent 3afce6d commit b8cb624

1 file changed

Lines changed: 118 additions & 65 deletions

File tree

plugins/jSQLMyAdmin/userscript.jSQLMyAdmin.js

Lines changed: 118 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
// @version 1.6
77
// @grant none
88
// ==/UserScript==
9-
void(function () {
10-
var jSQLMyAdminVersion = 1.6;
11-
9+
void(function(){
10+
const jSQLMyAdminVersion = 1.6;
11+
1212
/**
1313
* Turn this userscript into a browser button..
1414
* - Change the isBtn variable below to true
@@ -18,17 +18,16 @@ void(function () {
1818
* <a href="javascript:(minified, urlencoded userscript here)">jSQLMyAdmin</a>
1919
* - Open HTML page in browser, drag link to bookmarks toolbar
2020
*/
21-
var isBtn = false;
22-
23-
var cm;
24-
var drawnTables = [];
25-
var resources = [];
26-
var minJSQLVersion = 2.7;
27-
21+
let isBtn = false;
22+
23+
let cm;
24+
let drawnTables = [];
25+
let resources = [];
26+
const minJSQLVersion = 2.7;
27+
2828
if (typeof window.jSQL === 'undefined'){
2929
resources.push({
30-
// jSQL edge
31-
js: ['https://gitcdn.xyz/repo/Pamblam/jSQL/master/jSQL.min.js'],
30+
js: ['https://pamblam.github.io/jSQL/scripts/jSQL.min.js'],
3231
css: []
3332
});
3433
}
@@ -53,24 +52,24 @@ void(function () {
5352
css: ['https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.22.0/codemirror.css',
5453
'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.22.0/addon/hint/show-hint.css'],
5554
});
56-
55+
5756
showjSQLLoader();
58-
loadresources(resources).then(function(){
57+
loadresources(resources).then(()=>{
5958
if("undefined" === typeof jSQL.version || jSQL.version < minJSQLVersion){
60-
var current_version = "undefined" === typeof jSQL.version ? "<1" : jSQL.version;
59+
let current_version = "undefined" === typeof jSQL.version ? "<1" : jSQL.version;
6160
if(!confirm("jSQLMyAdmin requires jSQL version >= "+minJSQLVersion+". This page includes jSQL version "+current_version+". Some features will not work. Do you want to open jSQLMyAdmin anyway?"))
6261
return;
6362
}
6463
closejSQL();
6564
if(isBtn) openjSQL();
6665
});
67-
66+
6867
function showjSQLLoader(){
6968
document.getElementsByTagName('body')[0]
7069
.insertAdjacentHTML('beforeend','<span id=\'jSQLLoadingFlag\' style=\'position:fixed; top:5px; right:5px; z-index:2147483647; opacity:0.7;\'>Loading jSQLMyAdmin...</span>');
7170
}
7271
function drawjSQLMyAdmin() {
73-
jSQL.load(function () {
72+
jSQL.load(()=>{
7473
// does the saved queries table exist?
7574
if(undefined === jSQL.tables['Saved Queries']){
7675
jSQL.query("CREATE TABLE `Saved Queries` (`Name` VARCHAR(20), `Query` LONGTEXT)").execute();
@@ -80,36 +79,90 @@ void(function () {
8079
jSQL.insertInto("Saved Queries").values({Name:"Insert", Query: "-- An Insert Query Template\nINSERT INTO `myTable`\n\t(`String`, `Number`)\nVALUES\n\t('Some Number', 7)"}).execute();
8180
jSQL.insertInto("Saved Queries").values({Name:"Drop", Query: "-- A Drop Query Template\nDROP TABLE `myTable`"}).execute();
8281
}
83-
var queries = jSQL.query("SELECT * FROM `Saved Queries`").execute().fetchAll("ASSOC");
84-
var selectMenu = "<select id='queryTypeSelect'><option>Choose...</option>";
85-
for(var i=queries.length; i--;) selectMenu += "<option value='"+queries[i].Name+"'>"+queries[i].Name+"</option>";
82+
let queries = jSQL.query("SELECT * FROM `Saved Queries`").execute().fetchAll("ASSOC");
83+
let selectMenu = "<select id='queryTypeSelect'><option>Choose...</option>";
84+
for(let i=queries.length; i--;) selectMenu += "<option value='"+queries[i].Name+"'>"+queries[i].Name+"</option>";
8685
selectMenu += "</select>";
87-
var $overlay = $('#jsOverlayContainer').empty();
86+
let $overlay = $('#jsOverlayContainer').empty();
8887
$overlay.html('<h5>jSQL Version: ' + jSQL.version + ' | jSQLMyAdmin Version: ' + jSQLMyAdminVersion + '</h5>');
89-
$overlay.append('<div id="jSQLTableTabs"><ul><li><a href="#jSQLResultsTab">Query</a></li></ul><div id="jSQLResultsTab"><div><div style="float:right;"><small><b>autocomplete</b>: <i>ctrl+space</i></small></div><div style="float:left"><b>Template: </b>'+selectMenu+'</div><div style="clear:both;"></div></div><textarea id="jSQLMyAdminQueryBox"></textarea><div style="text-align:right;"><button id="jSQLExecuteQueryButton">Run Query</button><button id="jSQLMinifyQueryButton">Minify</button><button id="jSQLSaveQueryButton">Save</button><button id="jSQLResetButton">Reset</button><button id="jSQLCommitButton">Commit</button></div><div id="jSQLMAQueryResults"><center><b>No results to show</b><br>Enter a query</center></div></div></div>');
88+
$overlay.append(`<div id="jSQLTableTabs">
89+
<ul>
90+
<li><a href="#jSQLNewTableTab">New Table</a></li>
91+
<li><a href="#jSQLResultsTab">Query</a></li>
92+
</ul>
93+
<div id="jSQLNewTableTab">
94+
<input type='text' id='tableName' placeholder='Table Name' />
95+
<table>
96+
<thead>
97+
<tr>
98+
<th>-Name-</th>
99+
<th>-Type-</th>
100+
<th>-AI-</th>
101+
<th>-PK-</th>
102+
<th>-UN-</th>
103+
</tr>
104+
</thead>
105+
<tbody>
106+
<tr>
107+
<td><input type=text class=colname-jma placeholder="Column Name" /></td>
108+
<td>
109+
<select>
110+
<option>NUMERIC</option>
111+
<option>TINYINT</option>
112+
<option>SMALLINT</option>
113+
<option>MEDIUMINT</option>
114+
<option>INT</option>
115+
<option>BIGINT</option>
116+
</select>
117+
</td>
118+
<td><input type=checkbox class=col-ai-jma /></td>
119+
<td><input type=checkbox class=col-pk-jma /></td>
120+
<td><input type=checkbox class=col-un-jma /></td>
121+
</tr>
122+
</tbody>
123+
</table>
124+
</div>
125+
<div id="jSQLResultsTab">
126+
<div>
127+
<div style="float:right;"><small><b>autocomplete</b>: <i>ctrl+space</i></small></div>
128+
<div style="float:left"><b>Template: </b>${selectMenu}</div>
129+
<div style="clear:both;"></div>
130+
</div>
131+
<textarea id="jSQLMyAdminQueryBox"></textarea>
132+
<div style="text-align:right;">
133+
<button id="jSQLExecuteQueryButton">Run Query</button>
134+
<button id="jSQLMinifyQueryButton">Minify</button>
135+
<button id="jSQLSaveQueryButton">Save</button>
136+
<button id="jSQLResetButton">Reset</button>
137+
<button id="jSQLCommitButton">Commit</button>
138+
</div>
139+
<div id="jSQLMAQueryResults"><center><b>No results to show</b><br>Enter a query</center></div>
140+
</div>
141+
</div>`);
90142
$("#queryTypeSelect").change(function(){
91-
var Name = $(this).val();
143+
let Name = $(this).val();
92144
if(undefined === Name || Name === "" || Name === null || Name === false) return;
93-
var query = jSQL.query("SELECT `Query` FROM `Saved Queries` WHERE `Name` = ?")
145+
let query = jSQL.query("SELECT `Query` FROM `Saved Queries` WHERE `Name` = ?")
94146
.execute([Name]).fetch("ASSOC").Query;
95147
cm.getDoc().setValue(query);
96148
$(this).val($(this).find("option:first").val());
97149
});
98150
$('#jSQLTableTabs').tabs({
99-
beforeActivate: function(event, ui) {
100-
var tableName = $(ui.newPanel).data("tn");
151+
active: 1,
152+
beforeActivate: (event, ui)=>{
153+
let tableName = $(ui.newPanel).data("tn");
101154
if(tableName === undefined) return;
102155
$(ui.newPanel).html("Loading...");
103-
},
104-
activate: function(event, ui){
105-
setTimeout(function(){
106-
var tableName = $(ui.newPanel).data("tn");
156+
},
157+
activate: (event, ui)=>{
158+
setTimeout(()=>{
159+
let tableName = $(ui.newPanel).data("tn");
107160
if(tableName === undefined) return;
108-
var data = jSQL.select('*').from(tableName).execute().fetchAll('array');
109-
var tableHTML = '<div style="overflow-x:auto; width:100%; margin:0; padding:0;"><table></table></div>';
161+
let data = jSQL.select('*').from(tableName).execute().fetchAll('array');
162+
let tableHTML = '<div style="overflow-x:auto; width:100%; margin:0; padding:0;"><table></table></div>';
110163
$(ui.newPanel).html(tableHTML);
111-
var cols = [];
112-
for(var i=0; i<jSQL.tables[tableName].columns.length; i++)
164+
let cols = [];
165+
for(let i=0; i<jSQL.tables[tableName].columns.length; i++)
113166
cols.push({title: jSQL.tables[tableName].columns[i]});
114167
$(ui.newPanel).find('table').DataTable({
115168
data: data,
@@ -127,7 +180,7 @@ void(function () {
127180
$("#jSQLMinifyQueryButton").click(minifyjSQLQuery);
128181
$("#jSQLResetButton").button({icons: { primary: "ui-icon-refresh"}});
129182
$('#jSQLResetButton').css({"line-height": "0.9"});
130-
$("#jSQLResetButton").click(function(){
183+
$("#jSQLResetButton").click(()=>{
131184
if(!confirm("Do you want to delete all tables?")) return;
132185
jSQL.reset();
133186
jSQL.query("CREATE TABLE `Saved Queries` (`Name` VARCHAR(20), `Query` LONGTEXT)").execute();
@@ -141,27 +194,27 @@ void(function () {
141194
});
142195
$("#jSQLSaveQueryButton").button({icons: { primary: "ui-icon-star"}});
143196
$('#jSQLSaveQueryButton').css({"line-height": "0.9"});
144-
$("#jSQLSaveQueryButton").click(function(){
145-
var name = prompt("Enter a name for this Template:");
197+
$("#jSQLSaveQueryButton").click(()=>{
198+
let name = prompt("Enter a name for this Template:");
146199
if(!name) return;
147-
var query = cm.getValue();
200+
let query = cm.getValue();
148201
jSQL.query("INSERT INTO `Saved Queries` (`Name`, `Query`) VALUES (?, ?)")
149202
.execute([name, query]);
150203
$("#queryTypeSelect").append("<option value='"+name+"'>"+name+"</option>");
151204
});
152205
$("#jSQLCommitButton").button({icons: { primary: "ui-icon-check"}});
153206
$('#jSQLCommitButton').css({"line-height": "0.9"});
154-
$("#jSQLCommitButton").click(function(){
207+
$("#jSQLCommitButton").click(()=>{
155208
jSQL.commit();
156209
$("#jSQLCommitButton").button("option", "label", "Committed!");
157-
setTimeout(function(){
210+
setTimeout(()=>{
158211
$("#jSQLCommitButton").button("option", "label", "Commit");
159212
},2000);
160213
});
161214
addAllTables();
162215
$("head").append("<style>.CodeMirror-hints, .CodeMirror-hint, .CodeMirror-hint-active { z-index:2147483647 !important;}</style>");
163-
var tbls = {};
164-
for (var table in jSQL.tables) tbls[table] = jSQL.tables[table].columns;
216+
let tbls = {};
217+
for (let table in jSQL.tables) tbls[table] = jSQL.tables[table].columns;
165218
cm = CodeMirror.fromTextArea($("#jSQLMyAdminQueryBox")[0], {
166219
lineNumbers: true,
167220
mode: "text/x-mysql",
@@ -180,14 +233,14 @@ void(function () {
180233
});
181234
}
182235
function minifyjSQLQuery(){
183-
var sql = cm.getValue();
236+
let sql = cm.getValue();
184237
cm.getDoc().setValue(jSQL.minify(sql));
185238
}
186239
function runjSQLQuery(){
187-
var sql = cm.getValue();
240+
let sql = cm.getValue();
188241
try{
189-
var query = jSQL.query(sql).execute();
190-
var data = [];
242+
let query = jSQL.query(sql).execute();
243+
let data = [];
191244
if(query!==undefined){
192245
data = query.fetchAll("assoc");
193246
if(query.type === "DROP"){
@@ -196,45 +249,45 @@ void(function () {
196249
cm.getDoc().setValue(sql);
197250
}
198251
}
199-
var tableHTML = data.length ? '<br><div><small><b>Results</b></small></div><div style="overflow-x:auto; width:100%; margin:0; padding:0;">'+makeTableHTML(data)+'</div>' : '<center><b>No results to show</b><br>Enter a query</center>';
252+
let tableHTML = data.length ? '<br><div><small><b>Results</b></small></div><div style="overflow-x:auto; width:100%; margin:0; padding:0;">'+makeTableHTML(data)+'</div>' : '<center><b>No results to show</b><br>Enter a query</center>';
200253
addAllTables();
201254
$("#jSQLMAQueryResults").html(tableHTML);
202255
$('#jSQLMAQueryResults').find('table').DataTable({"order": [], "scrollX": true});
203256
}catch(e){
204-
var msg = e.message ? e.message+"" : e+"";
257+
let msg = e.message ? e.message+"" : e+"";
205258
alert(msg);
206259
throw e;
207260
}
208261
}
209262
function addTableTab(tableName){
210263
if(drawnTables.indexOf(tableName)>-1) return;
211-
var $ul = $('#jSQLTableTabs').find('ul').eq(0);
212-
var id = 'jSQLResultsTab-' + $ul.find('li').length;
264+
let $ul = $('#jSQLTableTabs').find('ul').eq(0);
265+
let id = 'jSQLResultsTab-' + $ul.find('li').length;
213266
$ul.append('<li><a href="#' + id + '">' + tableName + '</a></li>');
214267
$ul.after('<div id="' + id + '">Loading...</div>');
215268
$("#"+id).data("tn", tableName);
216269
$('#jSQLTableTabs').tabs("refresh");
217270
drawnTables.push(tableName);
218271
}
219272
function addAllTables() {
220-
for (var table in jSQL.tables) {
273+
for (let table in jSQL.tables) {
221274
if("Saved Queries" === table) continue;
222275
addTableTab(table);
223276
}
224277
}
225278
function makeTableHTML(data, drawData) {
226279
if(undefined === drawData) drawData = true;
227-
var html = [];
280+
let html = [];
228281
html.push('<table><thead><tr>');
229-
for (var name in data[0])
282+
for (let name in data[0])
230283
html.push('<th>' + name + '</th>');
231284
html.push('</tr></thead><tbody>');
232-
for (var i = 0; i < data.length; i++) {
285+
for (let i = 0; i < data.length; i++) {
233286
if(!drawData) break;
234287
html.push('<tr>');
235-
for (var name in data[i]) {
236-
var type = typeof data[i][name];
237-
var val = type !== "string" && type !== "number" ? "[" + type + "]" : data[i][name];
288+
for (let name in data[i]) {
289+
let type = typeof data[i][name];
290+
let val = type !== "string" && type !== "number" ? "[" + type + "]" : data[i][name];
238291
if (val.length > 50)
239292
val = val.substring(0, 47) + "...";
240293
html.push('<td>' + val + '</td>');
@@ -248,7 +301,7 @@ void(function () {
248301
return $("#jSQLMyAdminOverlay").length>0 ? closejSQL() : openjSQL();
249302
}
250303
function openjSQL() {
251-
$('body').append('<div id=\'jSQLMyAdminOverlay\' style=\'position:fixed; top:0; left:0; height:100%; width:100%; overflow-y:auto; z-index: 2147483646; background: rgba(255,255,255,0.99)\'><div id="jsOverlayContainer" style="padding:5px; margin:0;"><br><br><center><h3>Loading jSQLMyAdmin...</h3></center></div></div>');
304+
$('body').append('<div id=\'jSQLMyAdminOverlay\' style=\'text-align: left; position:fixed; top:0; left:0; height:100%; width:100%; overflow-y:auto; z-index: 2147483646; background: rgba(255,255,255,0.99)\'><div id="jsOverlayContainer" style="padding:5px; margin:0;"><br><br><center><h3>Loading jSQLMyAdmin...</h3></center></div></div>');
252305
$('#openjSQLMyAdmin').remove();
253306
$('body').append('<button id=\'closejSQLMyAdmin\' style=\'position:fixed; top:5px; right:5px; z-index:2147483647; opacity:0.7;\'>Close jSQLMyAdmin</button>');
254307
$('#closejSQLMyAdmin').button({icons: { primary: "ui-icon-closethick"}});
@@ -268,32 +321,32 @@ void(function () {
268321
$('#openjSQLMyAdmin').click(togglejSQLMyAdmin);
269322
}
270323
function loadresources(resources) {
271-
return new Promise(function (callback) {
324+
return new Promise((callback)=>{
272325
(function recurse() {
273326
if (!resources.length) {
274327
callback();
275328
return;
276329
}
277-
var resource = resources.shift();
278-
for(var i=resource.css.length; i--;)
330+
let resource = resources.shift();
331+
for(let i=resource.css.length; i--;)
279332
document.getElementsByTagName('head')[0].insertAdjacentHTML('beforeend', '<link rel=\'stylesheet\' href=\''+resource.css[i]+'\'>');
280333
(function innerRecurse() {
281334
if (!resource.js.length) {
282335
recurse();
283336
return;
284337
}
285-
var src = resource.js.shift();
286-
var script = document.createElement('script');
338+
let src = resource.js.shift();
339+
let script = document.createElement('script');
287340
script.type = 'text/javascript';
288341
if (script.readyState) { //IE
289-
script.onreadystatechange = function () {
342+
script.onreadystatechange = ()=>{
290343
if (script.readyState == 'loaded' || script.readyState == 'complete') {
291344
script.onreadystatechange = null;
292345
setTimeout(innerRecurse, 1000);
293346
}
294347
};
295348
} else { //Others
296-
script.onload = function () {
349+
script.onload = ()=>{
297350
setTimeout(innerRecurse, 1000);
298351
};
299352
}

0 commit comments

Comments
 (0)