diff --git a/README.md b/README.md
index c51db67..26819c0 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,7 @@ Allows you to seamlessly switch between CSV, TSV, HTML, SQL, markdown and a litt
| Preserves alignment | Between all views |
| Markdown formatting | Adds spaces, makes things more legible |
| Form view | Create tables with buttons! |
+| INSERT | Generate an INSERT query to add data to a table |
I've made this as a little learning exercise to play with Primer, Atom, GitHub Desktop and GitHub itself.
diff --git a/index.html b/index.html
index 59def16..343d29e 100644
--- a/index.html
+++ b/index.html
@@ -24,6 +24,7 @@
CSV/TSV
Markdown
SQL
+ INSERT
HTML
Form
Preview
diff --git a/magic.js b/magic.js
index 9ff3fb3..626a6a1 100644
--- a/magic.js
+++ b/magic.js
@@ -143,6 +143,7 @@ function changeTab(newTab) {
if (tab==="csv") { array = csv2array(input); }
if (tab==="html") { array = html2array(input); }
if (tab==="sql") { array = sql2array(input); }
+ if (tab==="insert") { array = insert2array(input); }
if (tab==="form") { array = form2array(); }
if (tab==="preview") { array = array_storge; }
@@ -169,6 +170,11 @@ function changeTab(newTab) {
new_layout=true;
}
+ if (newTab==="insert") {
+ output = array2insert(array);
+ new_layout=true;
+ }
+
if (newTab==="form") {
output = array2form(array);
new_layout=false;
@@ -194,13 +200,13 @@ function changeTab(newTab) {
$('.tabnav-tab').removeClass('selected');
$('#tab-'+newTab).addClass('selected');
- if ((tab==='md')||tab==='sql') {
+ if ((tab==='md')||tab==='sql'||tab==='insert') {
$('textarea').removeClass('md');
if (tab==='md') $('#md-options').hide();
if (tab==='sql') $('#sql-info').hide();
}
- if ((newTab==='md')||newTab==='sql') {
+ if ((newTab==='md')||newTab==='sql'||newTab==='insert') {
$('textarea').addClass('md');
if (newTab==='md') $('#md-options').show();
if (newTab==='sql') $('#sql-info').show();
@@ -755,6 +761,110 @@ function array2sqlDashes(cell_sizes, rowlength) {
}
+function insert2array(insert) {
+
+ var array = [];array[0] = [];
+
+ // Strip all newlines & double spaces
+ insert = insert.replace(/\n/g, '');
+ insert = insert.replace(/ /g, ' ');
+
+ // Split into header & body
+ var parts = insert.split(') VALUES ');
+ var n = parts[0].indexOf('(')+1;
+ var header = parts[0].substring(n, parts[0].length);
+
+ // Split header into columns
+ var columns = header.split(', ');
+
+ for (var c = 0; c < columns.length; c++) {
+
+ var column = columns[c];
+
+ // Remove escaping slashes for single and double quotes
+ column = column.replace(/\"/g, '"');
+ column = column.replace(/\'/g, "'");
+
+ array[0][c] = column;
+
+ }
+
+ // Strip opening & closing brackets + ending semi-colon
+ var body = parts[1].substring(1, parts[1].length-2);
+
+ // Split body into rows
+ var rows = body.split('), (');
+
+ for (var r = 0; r < rows.length; r++) {
+
+ var cells = rows[r].replace(/', /g, "'#$#").split('#$#');
+
+ array[r+1] = [];
+
+ for (var c = 0; c < cells.length; c++) {
+
+ var cell = cells[c];
+
+ // Strip opening and closing single qoutes
+ cell = cell.substring(1, cell.length-1);
+
+ // Remove escaping slashes for single and double quotes
+ cell = cell.replace("\\'", "'");
+ cell = cell.replace('\\"', '"');
+
+ array[r+1][c] = cell;
+
+ }
+
+ }
+
+ return array;
+}
+
+function array2insert(array) {
+
+ var insert = '';
+
+ for (var r = 0; r < array.length; r++) {
+
+ var row = array[r];
+
+ insert += ' (';
+
+ for (var c = 0; c < row.length; c++) {
+
+ var item = row[c];
+
+ // Escape quotes
+ item = item.replace(/"/g, '\\"');
+ item = item.replace(/'/g, "\\'");
+
+ if (c>0) { insert += ', '; }
+ insert += "'"+ item +"'";
+
+ }
+
+ // Last row should end with a semi-colon instead of a comma
+ insert += (r===(array.length-1)) ? ');\n' : '),\n';
+
+ // First row are the columns
+ if (r===0) {
+ insert = insert.replace(' (', '(');
+ insert = insert.replace('(\'', '(');
+ insert = insert.replace('\')', ')');
+ insert = insert.replace(/', '/g, ', ');
+ insert = insert.replace('),\n', ')');
+
+ var columns = insert;
+ insert = '';
+ }
+
+ }
+
+ return 'INSERT INTO [TABLENAME] '+ columns +' VALUES\n'+ insert;
+
+}
+
function form2array() {
var array = [];