$( document ).ready(function() { $("#query").keypress(function(e){ if(e.which == 13) { queryFunction(); } }); //update currently selected database $( document ).on( "click", "#db-list .list-group-item", function() { $("#db-list .list-group-item").each(function() { $(this).removeClass('selected'); }); $(this).addClass('selected'); }); //update currently table database $( document ).on( "click", "#table-list .list-group-item", function() { $("#table-list .list-group-item").each(function() { $(this).removeClass('selected'); }); $(this).addClass('selected'); }); }); var currentDatabaseName; function getData(tableName) { $.ajax({url: "allTableRecords?tableName="+tableName+"&database="+currentDatabaseName, success: function(result){ // result = JSON.parse(result); inflateData(result); }}); } function queryFunction() { var query = $('#query').val(); $.ajax({url: "query?query="+escape(query)+"&database="+currentDatabaseName, success: function(result){ // result = JSON.parse(result); inflateData(result); }}); } function downloadDb() { if (currentDatabaseName) { $.ajax({url: "downloadDb?database=" + currentDatabaseName, success: function(){ window.location = "downloadDb?database=" + currentDatabaseName; }}); } } function getDBList() { $.ajax({url: "databaseList", success: function(result){ var dbList = result.rows; $('#db-list').empty(); var isSelectionDone = false; for(var count = 0; count < dbList.length; count++){ if(dbList[count].indexOf("journal") == -1){ $("#db-list").append("" +dbList[count] + ""); if(!isSelectionDone){ isSelectionDone = true; $('#db-list').find('a').trigger('click'); } } } }}); } function openDatabaseAndGetTableList(db) { if("NSUserDefault" == db) { $('#run-query').removeClass('active'); $('#run-query').addClass('disabled'); // $('#selected-db-info').removeClass('active'); // $('#selected-db-info').addClass('disabled'); $('#selected-db-info').removeClass('disabled'); $('#selected-db-info').addClass('active'); currentDatabaseName = "NSUserDefault"; $("#selected-db-info").text("Export NSUserDefault"); } else { $('#run-query').removeClass('disabled'); $('#run-query').addClass('active'); $('#selected-db-info').removeClass('disabled'); $('#selected-db-info').addClass('active'); currentDatabaseName = db; $("#selected-db-info").text("Export Selected Database : "+db); } $.ajax({url: "tableList?database="+db, success: function(result){ // result = JSON.parse(result); var tableList = result.rows; var dbVersion = result.dbVersion; if("NSUserDefault" != db) { $("#selected-db-info").text("Export Selected Database : "+db +" Version : "+dbVersion); } $('#table-list').empty() for(var count = 0; count < tableList.length; count++){ var tableName = tableList[count]; $("#table-list").append("" +tableName + ""); } }}); } function inflateData(result){ if(result.isSuccessful){ if(!result.isSelectQuery){ showSuccessInfo("Query Executed Successfully"); return; } var columnHeader = result.tableInfos; // set function to return cell data for different usages like set, display, filter, search etc.. for(var i = 0; i < columnHeader.length; i++) { columnHeader[i]['targets'] = i; columnHeader[i]['data'] = function(row, type, val, meta) { var dataType = row[meta.col].dataType; if (type == "sort" && dataType == "boolean") { return row[meta.col].value ? 1 : 0; } return row[meta.col].value; } } var columnData = result.rows; var tableId = "#db-data"; if ($.fn.DataTable.isDataTable(tableId) ) { $(tableId).DataTable().destroy(); } $("#db-data-div").remove(); $("#parent-data-div").append('
'); if (result.userDefault) { $(tableId).dataTable({ "data": columnData, "columnDefs": columnHeader, 'bPaginate': true, 'searching': true, 'bFilter': true, 'bInfo': true, "bSort" : true, "scrollX": true, "iDisplayLength": 10 }) }else { $(tableId).dataTable({ "data": columnData, "columnDefs": columnHeader, 'bPaginate': true, 'searching': true, 'bFilter': true, 'bInfo': true, "bSort" : true, "scrollX": true, "iDisplayLength": 10, "dom": "Bfrtip", select: 'single', altEditor: true, // Enable altEditor buttons: [ { extend: 'selected', // Bind to Selected row text: 'Edit', name: 'edit' // do not change name }, { extend: 'selected', text: 'Delete', name: 'delete' } ] }) } //attach row-updated listener $(tableId).on('update-row.dt', function (e, updatedRowData, callback) { var updatedRowDataArray = JSON.parse(updatedRowData); //add value for each column var data = columnHeader; for(var i = 0; i < data.length; i++) { data[i].value = updatedRowDataArray[i].value; data[i].dataType = updatedRowDataArray[i].dataType; } //send update table data request to server updateTableData(data, callback); }); //attach delete-updated listener $(tableId).on('delete-row.dt', function (e, updatedRowData, callback) { var deleteRowDataArray = JSON.parse(updatedRowData); console.log(deleteRowDataArray); //add value for each column var data = columnHeader; for(var i = 0; i < data.length; i++) { data[i].value = deleteRowDataArray[i].value; data[i].dataType = deleteRowDataArray[i].dataType; } //send delete table data request to server deleteTableData(data, callback); }); // hack to fix alignment issue when scrollX is enabled $(".dataTables_scrollHeadInner").css({"width":"100%"}); $(".table ").css({"width":"100%"}); }else{ if(!result.isSelectQuery){ showErrorInfo("Query Execution Failed"); }else { if(result.errorMessage){ showErrorInfo(result.errorMessage); }else{ showErrorInfo("Some Error Occurred"); } } } } function inflateAppInfoData(result){ if(result.isSuccessful){ if(!result.isSelectQuery){ showSuccessInfo("Query Executed Successfully"); return; } var columnHeader = result.tableInfos; // set function to return cell data for different usages like set, display, filter, search etc.. for(var i = 0; i < columnHeader.length; i++) { columnHeader[i]['targets'] = i; columnHeader[i]['data'] = function(row, type, val, meta) { var dataType = row[meta.col].dataType; if (type == "sort" && dataType == "boolean") { return row[meta.col].value ? 1 : 0; } return row[meta.col].value; } } var columnData = result.rows; var tableId = "#db-appinfo"; if ($.fn.DataTable.isDataTable(tableId) ) { $(tableId).DataTable().destroy(); } $("#db-appinfo-div").remove(); $("#parent-appinfo-div").append('
'); $(tableId).dataTable({ "data": columnData, "columnDefs": columnHeader, 'bPaginate': false, 'searching': false, 'bFilter': false, 'bInfo': false, "bSort" : false, "scrollX": true, "iDisplayLength": 99, "fnDrawCallback": function (oSettings) { $(oSettings.nTHead).hide(); } }) // hack to fix alignment issue when scrollX is enabled $(".dataTables_scrollHeadInner").css({"width":"100%"}); $(".table ").css({"width":"100%"}); }else{ if(!result.isSelectQuery){ showErrorInfo("Query Execution Failed"); }else { if(result.errorMessage){ showErrorInfo(result.errorMessage); }else{ showErrorInfo("Some Error Occurred"); } } } } //send update database request to server function updateTableData(updatedData, callback) { //get currently selected element var selectedTableElement = $("#table-list .list-group-item.selected"); var filteredUpdatedData = updatedData.map(function(columnData){ return { title: columnData.title, isPrimary: columnData.isPrimary, value: columnData.value, dataType: columnData.dataType } }); //build request parameters var requestParameters = {}; requestParameters.database = selectedTableElement.attr('data-db-name'); requestParameters.tableName = selectedTableElement.attr('data-table-name');; requestParameters.updatedData = encodeURIComponent(JSON.stringify(filteredUpdatedData)); //execute request $.ajax({ url: "updateRecord", type: 'GET', data: requestParameters, success: function(response) { console.log(response); console.log(response.isSuccessful); // response = JSON.parse(response); if(response.isSuccessful){ console.log("Data updated successfully"); callback(true); showSuccessInfo("Data Updated Successfully"); } else { console.log("Data updated failed"); callback(false); } } }) } function deleteTableData(deleteData, callback) { var selectedTableElement = $("#table-list .list-group-item.selected"); var filteredUpdatedData = deleteData.map(function(columnData){ return { title: columnData.title, isPrimary: columnData.isPrimary, value: columnData.value, dataType: columnData.dataType } }); console.log(filteredUpdatedData); //build request parameters var requestParameters = {}; requestParameters.database = selectedTableElement.attr('data-db-name'); requestParameters.tableName = selectedTableElement.attr('data-table-name');; requestParameters.deleteData = encodeURIComponent(JSON.stringify(filteredUpdatedData)); //execute request $.ajax({ url: "deleteRecord", type: 'GET', data: requestParameters, success: function(response) { // response = JSON.parse(response); if(response.isSuccessful){ console.log("Data deleted successfully"); callback(true); showSuccessInfo("Data Deleted Successfully"); } else { console.log("Data delete failed"); callback(false); } } }) } function showSuccessInfo(message){ var snackbarId = "snackbar"; var snackbarElement = $("#"+snackbarId); snackbarElement.addClass("show"); snackbarElement.css({"backgroundColor": "#5cb85c"}); snackbarElement.html(message) setTimeout(function(){ snackbarElement.removeClass("show"); }, 3000); } function showErrorInfo(message){ var snackbarId = "snackbar"; var snackbarElement = $("#"+snackbarId); snackbarElement.addClass("show"); snackbarElement.css({"backgroundColor": "#d9534f"}); snackbarElement.html(message) setTimeout(function(){ snackbarElement.removeClass("show"); }, 3000); } function getUserDefault() { $.ajax({url: "getUserDefault", success: function(result){ inflateData(result); }}); } function getAppInfo() { $.ajax({url: "getAppInfo", success: function(result){ inflateAppInfoData(result); getUserDefault(); }}); }