/////////////////////////////////////////////////////////////////////////////// /// master.js /// avocadodb js api /////////////////////////////////////////////////////////////////////////////// // documents global vars var collectionCount; var totalCollectionCount; var collectionCurrentPage; var globalCollectionName; $(document).ready(function() { showCursor(); /////////////////////////////////////////////////////////////////////////////// /// global variables /////////////////////////////////////////////////////////////////////////////// var open = false; var tableView = true; var sid = ($.cookie("sid")); var currentUser; //logtable vars var currentPage = 1; var currentAmount; var currentTableID = "#logTableID"; var currentLoglevel = 5; //live click for all log tables var tables = ["#logTableID", "#critLogTableID", "#warnLogTableID", "#infoLogTableID", "#debugLogTableID"]; $.each(tables, function(v, i ) { $(i + '_prev').live('click', function () { if ( i == "#logTableID" ) { createNextPagination("all"); } else { createNextPagination(); } }); $(i + '_next').live('click', function () { if ( i == "#logTableID" ) { createPrevPagination("all"); } else { createPrevPagination(); } }); $(i + '_last').live('click', function () { createLogTable(currentLoglevel); }); $(i+ '_first').live('click', function () { createLastLogPagination(i); }); }); $("#documents_prev").live('click', function () { createPrevDocPagination(); }); $("#documents_next").live('click', function () { createNextDocPagination(); }); $("#documents_first").live('click', function () { createFirstPagination("#documentsTable"); }); $("#documents_last").live('click', function () { createLastPagination("#documentsTable"); }); /////////////////////////////////////////////////////////////////////////////// /// html customizations /////////////////////////////////////////////////////////////////////////////// $('#logView ul').append('
'); /////////////////////////////////////////////////////////////////////////////// /// initialize jquery tabs /////////////////////////////////////////////////////////////////////////////// $("#tabs").tabs({ select: function(event, ui) { if (ui.index == 0) { currentLoglevel = 5; createLogTable(5); } else { currentLoglevel = ui.index; createLogTable(ui.index); } } }); /////////////////////////////////////////////////////////////////////////////// /// checks for a login user cookie, creates new sessions if null /////////////////////////////////////////////////////////////////////////////// if ($.cookie("sid") == null) { $('#logoutButton').hide(); $('#movetologinButton').show(); $.ajax({ type: "POST", url: "/_admin/user-manager/session/", contentType: "application/json", processData: false, success: function(data) { $.cookie("sid", data.sid); }, error: function(data) { } }); } /////////////////////////////////////////////////////////////////////////////// /// if user exists, then: /////////////////////////////////////////////////////////////////////////////// if ($.cookie("rights") != null || $.cookie("user") != null) { $('#loginWindow').hide(); $('#movetologinButton').hide(); $('#logoutButton').show(); $('#activeUser').text($.cookie("user") + '!'); currentUser = $.cookie("user"); } else { $('#logoutButton').hide(); } /////////////////////////////////////////////////////////////////////////////// /// draws collection table /////////////////////////////////////////////////////////////////////////////// var collectionTable = $('#collectionsTableID').dataTable({ "bFilter": false, "bLengthChange": false, "bDeferRender": true, "bAutoWidth": false, "iDisplayLength": -1, "bJQueryUI": true, "aoColumns": [{"sWidth":"150px", "bSortable":false}, null, null, null, null, null ], "oLanguage": {"sEmptyTable": "No collections"} }); /////////////////////////////////////////////////////////////////////////////// /// draws the document edit table /////////////////////////////////////////////////////////////////////////////// var documentEditTable = $('#documentEditTableID').dataTable({ "aaSorting": [], "bFilter": false, "bPaginate":false, "bSortable": false, "bLengthChange": false, "bDeferRender": true, "bAutoWidth": true, "iDisplayLength": -1, "bJQueryUI": true, "aoColumns": [{ "sClass":"center", "sClass":"read_only","bSortable": false, "sWidth": "30px"}, {"sClass":"writeable", "bSortable": false }, {"sClass":"writeable", "bSortable": false }, {"bVisible": false}], "oLanguage": {"sEmptyTable": "No documents"} }); /////////////////////////////////////////////////////////////////////////////// /// draws new doc view table /////////////////////////////////////////////////////////////////////////////// var newDocumentTable = $('#NewDocumentTableID').dataTable({ "bFilter": false, "bPaginate":false, "bSortable": false, "bLengthChange": false, "bDeferRender": true, "bAutoWidth": true, "iDisplayLength": -1, "bJQueryUI": true, "aoColumns": [{ "sClass":"center", "sClass":"read_only","bSortable": false, "sWidth": "170px"}, {"sClass":"writeable", "bSortable": false }, {"sClass":"writeable", "bSortable": false }, {"bVisible": false}] }); /////////////////////////////////////////////////////////////////////////////// /// draws documents table /////////////////////////////////////////////////////////////////////////////// var documentsTable = $('#documentsTableID').dataTable({ "bFilter": false, "bPaginate":false, "bSortable": false, "bLengthChange": false, "bDeferRender": true, "bAutoWidth": true, "iDisplayLength": -1, "bJQueryUI": true, "aoColumns": [{ "sClass":"center", "sClass":"read_only","bSortable": false, "sWidth": "80px"}, {"sClass":"read_only","bSortable": false, "sWidth": "125px"}, {"sClass":"read_only","bSortable": false, "sWidth": "60px"}, {"bSortable": false}], "oLanguage": {"sEmptyTable": "No documents"} }); /////////////////////////////////////////////////////////////////////////////// /// draws edit collection table /////////////////////////////////////////////////////////////////////////////// var editCollectionTable = $('#editCollectionTableID').dataTable({ "bFilter": false, "bPaginate":false, "bSortable": false, "bLengthChange": false, "bDeferRender": true, "bAutoWidth": true, "iDisplayLength": -1, "bJQueryUI": true, "aoColumns": [{ "sClass":"center", "sClass":"read_only","bSortable": false, "sWidth": "100px"}, {"sClass":"read_only","bSortable": false}, {"sClass":"read_only","bSortable": false}] }); /////////////////////////////////////////////////////////////////////////////// /// draws crit log table /////////////////////////////////////////////////////////////////////////////// var critLogTable = $('#critLogTableID').dataTable({ "bFilter": false, "bPaginate":false, "bLengthChange": false, "bDeferRender": true, "bAutoWidth": true, "iDisplayLength": -1, "bJQueryUI": true, "aoColumns": [{ "sClass":"center", "sWidth": "100px"}, {"bSortable":false}], "oLanguage": {"sEmptyTable": "No critical logfiles available"} }); /////////////////////////////////////////////////////////////////////////////// /// draws warn log table /////////////////////////////////////////////////////////////////////////////// var warnLogTable = $('#warnLogTableID').dataTable({ "bFilter": false, "bPaginate":false, "bLengthChange": false, "bDeferRender": true, "bAutoWidth": true, "iDisplayLength": -1, "bJQueryUI": true, "aoColumns": [{ "sClass":"center", "sWidth": "100px"}, {"bSortable":false}], "oLanguage": {"sEmptyTable": "No warning logfiles available"} }); /////////////////////////////////////////////////////////////////////////////// /// draws info log table /////////////////////////////////////////////////////////////////////////////// var infoLogTable = $('#infoLogTableID').dataTable({ "bFilter": false, "bPaginate":false, "bLengthChange": false, "bDeferRender": true, "bAutoWidth": true, "iDisplayLength": -1, "bJQueryUI": true, "aoColumns": [{ "sClass":"center", "sWidth": "100px"}, {"bSortable":false}], "oLanguage": {"sEmptyTable": "No info logfiles available"} }); /////////////////////////////////////////////////////////////////////////////// /// draws debug log table /////////////////////////////////////////////////////////////////////////////// var debugLogTable = $('#debugLogTableID').dataTable({ "bFilter": false, "bPaginate":false, "bLengthChange": false, "bDeferRender": true, "bAutoWidth": true, "iDisplayLength": -1, "bJQueryUI": true, "aoColumns": [{ "sClass":"center", "sWidth": "100px"}, {"bSortable":false}], "oLanguage": {"sEmptyTable": "No debug logfiles available"} }); /////////////////////////////////////////////////////////////////////////////// /// draws "all" log table /////////////////////////////////////////////////////////////////////////////// var logTable = $('#logTableID').dataTable({ "bFilter": false, "bPaginate":false, "bLengthChange": false, "bDeferRender": true, "bAutoWidth": true, "iDisplayLength": -1, "bJQueryUI": true, "aoColumns": [{ "sClass":"center", "sWidth": "100px"}, {"bSortable":false}], "oLanguage": {"sEmptyTable": "No logfiles available"} }); /////////////////////////////////////////////////////////////////////////////// /// creates layout using jquery ui /////////////////////////////////////////////////////////////////////////////// $('body').layout({ closable: false, resizable: false, applyDefaultStyles: false, north__spacing_open:0, north__spacing_closed: 0, center__spacing_open:0, center__spacing_open:0, south__spacing_closed: 0, south__spacing_closed: 0 }); /////////////////////////////////////////////////////////////////////////////// /// location check /////////////////////////////////////////////////////////////////////////////// $.address.change(function(event) { /////////////////////////////////////////////////////////////////////////////// /// Home /////////////////////////////////////////////////////////////////////////////// if (location.hash == '' || location.hash =='#') { drawCollectionsTable(); $('#subCenterView').hide(); $('#centerView').show(); $('#collectionsView').show(); createnav("Collections"); } /////////////////////////////////////////////////////////////////////////////// /// new document table view (collection) /////////////////////////////////////////////////////////////////////////////// else if (location.hash.substr(0, 12) == "#collection?" ) { tableView = true; var collectionID = location.hash.substr(12, location.hash.length); var collID = collectionID.split("="); $.ajax({ type: "GET", url: "/_api/collection/" + collID[0], contentType: "application/json", processData: false, success: function(data) { collectionName = data.name; $('#nav2').text('-> ' + collectionName); $('#nav2').attr('href', '#showCollection?' +collID[0]); }, error: function(data) { } }); $('#nav1').text('Collections'); $('#nav1').attr('href', '#'); $('#nav3').text('-> New Document'); newDocumentTable.fnClearTable(); newDocumentTable.fnAddData(['', "key", value2html("clicktoedit"), JSON.stringify("click2edit")]); documentTableMakeEditable('#NewDocumentTableID'); hideAllSubDivs(); $('#collectionsView').hide(); $('#newDocumentView').show(); $('#newDocumentTableView').show(); $('#newDocumentSourceView').hide(); } /////////////////////////////////////////////////////////////////////////////// /// showe edit documents view /////////////////////////////////////////////////////////////////////////////// else if (location.hash.substr(0, 14) == "#editDocument?") { tableView = true; $('#documentEditSourceView').hide(); $('#documentEditTableView').show(); var collectiondocID = location.hash.substr(14, location.hash.length); collectionID = collectiondocID.split("/"); $.ajax({ type: "GET", url: "/_api/collection/" + collectionID, contentType: "application/json", processData: false, success: function(data) { collectionName = data.name; $('#nav2').text('-> ' + collectionName); $('#nav2').attr('href', '#showCollection?' +collectionID[0]); }, error: function(data) { } }); $('#nav1').text('Collections'); $('#nav1').attr('href', '#'); $('#nav3').text('-> Edit:' + collectionID[1]); $.ajax({ type: "GET", url: "/document/" + collectiondocID, contentType: "application/json", processData: false, success: function(data) { $('#documentEditSourceBox').val(JSON.stringify(data)); documentEditTable.fnClearTable(); hideAllSubDivs(); $('#collectionsView').hide(); $('#documentEditView').show(); $('#documentEditSourceView').hide(); $.each(data, function(key, val) { if (key == '_id' || key == '_rev') { documentEditTable.fnAddData(["", key, value2html(val), JSON.stringify(val)]); } else { documentEditTable.fnAddData(['',key, value2html(val), JSON.stringify(val)]); } }); documentTableMakeEditable('#documentEditTableID'); }, error: function(data) { } }); } /////////////////////////////////////////////////////////////////////////////// /// show colletions documents view /////////////////////////////////////////////////////////////////////////////// else if (location.hash.substr(0, 16) == "#showCollection?") { var collectionID = location.hash.substr(16, location.hash.length); globalAjaxCursorChange(); $.ajax({ type: "GET", url: "/_api/collection/" + collectionID + "/count", contentType: "application/json", processData: false, async: false, success: function(data) { globalCollectionName = data.name; test = data.name; collectionCount = data.count; $('#nav2').text('-> ' + globalCollectionName); }, error: function(data) { } }); $('#nav1').text('Collections'); $('#nav1').attr('href', '#'); $('#nav2').attr('href', null); $('#nav3').text(''); $.ajax({ type: 'PUT', url: '/_api/simple/all/', data: '{"collection":"' + globalCollectionName + '","skip":0,"limit":10}', contentType: "application/json", success: function(data) { $.each(data, function(k, v) { documentsTable.fnAddData(['', v._id, v._rev, cutByResolution(JSON.stringify(v))]); }); }, error: function(data) { } }); documentsTable.fnClearTable(); hideAllSubDivs(); $('#collectionsView').hide(); $('#documentsView').show(); totalCollectionCount = Math.ceil(collectionCount / 10); collectionCurrentPage = 1; $('#documents_status').text("Showing page 1 of " + totalCollectionCount); } /////////////////////////////////////////////////////////////////////////////// /// shows edit collection view /////////////////////////////////////////////////////////////////////////////// else if (location.hash.substr(0, 16) == "#editCollection?") { var collectionID = location.hash.substr(16, location.hash.length); var collectionName; $.ajax({ type: "GET", url: "/_api/collection/" + collectionID, contentType: "application/json", processData: false, success: function(data) { collectionName = data.name; $('#nav2').text('-> Edit: ' + collectionName); }, error: function(data) { } }); $('#nav1').text('Collections'); $('#nav1').attr('href', '#'); $.ajax({ type: "GET", url: "/_api/collection/" + collectionID, contentType: "application/json", processData: false, success: function(data) { editCollectionTable.fnClearTable(); $.each(data, function(key, val) { if (key == 'name') { editCollectionTable.fnAddData(["editable", key, val]); } else if (key == 'status' || key == 'id') { editCollectionTable.fnAddData(["", key, val]); } }); hideAllSubDivs(); $('#collectionsView').hide(); $('#editCollectionView').show(); /* add custom cell class */ var i = 0; $('.read_only', editCollectionTable.fnGetNodes() ).each(function () { if ( i == 1) { $(this).removeClass('read_only'); i = 0; } if (this.innerHTML == "name") { i = 1; } }); $('#editCollectionTableID').dataTable().makeEditable({ sUpdateURL: function(value, settings) { return value; } }); }, error: function(data) { alert("error"); } }); } /////////////////////////////////////////////////////////////////////////////// /// shows log view /////////////////////////////////////////////////////////////////////////////// else if (location.hash == "#logs") { createLogTable(5); hideAllSubDivs(); $('#collectionsView').hide(); $('#logView').show(); createnav ("Logs"); } /////////////////////////////////////////////////////////////////////////////// /// shows status view /////////////////////////////////////////////////////////////////////////////// else if (location.hash == "#status") { hideAllSubDivs(); $('#collectionsView').hide(); $('#statusView').show(); createnav ("Status"); } /////////////////////////////////////////////////////////////////////////////// /// shows config view /////////////////////////////////////////////////////////////////////////////// else if (location.hash == "#config") { hideAllSubDivs(); $('#collectionsView').hide(); $('#configView').show(); createnav ("Config"); var content={"Menue":{"Haha":"wert1", "ahha":"wert2"}, "Favoriten":{"top10":"content"},"Test":{"testing":"hallo 123 test"}}; $("#configView").empty(); $.each(content, function(data) { $('#configView').append('

' + data + '

'); $.each(content[data], function(key, val) { $('#configView').append('' + key + ":" + val + '
'); }); //$('#configView').append('' + menues + '
'); }); } /////////////////////////////////////////////////////////////////////////////// /// shows query view /////////////////////////////////////////////////////////////////////////////// else if (location.hash == "#query") { hideAllSubDivs(); $('#collectionsView').hide(); $('#queryView').show(); createnav ("Query"); } /////////////////////////////////////////////////////////////////////////////// /// shows avocsh view /////////////////////////////////////////////////////////////////////////////// else if (location.hash == "#avocsh") { hideAllSubDivs(); $('#collectionsView').hide(); $('#avocshView').show(); createnav ("AvocSH"); } /////////////////////////////////////////////////////////////////////////////// /// shows create new collection view /////////////////////////////////////////////////////////////////////////////// else if (location.hash == "#createCollection") { $('#nav1').attr('href', '#'); $('#nav1').text('Collections'); $('#nav2').text(': Create new collection'); hideAllSubDivs(); $('#collectionsView').hide(); $('#createCollectionView').show(); } }); /////////////////////////////////////////////////////////////////////////////// /// saves edited document /////////////////////////////////////////////////////////////////////////////// $('#saveEditedDocButton').live('click', function () { if (tableView == true) { var data = documentEditTable.fnGetData(); var result = {}; var collectionID; for (row in data) { var row_data = data[row]; if ( row_data[1] == "_id" ) { collectionID = row_data[3]; } else { result[row_data[1]] = JSON.parse(row_data[3]); } } $.ajax({ type: "PUT", url: "/document/" + JSON.parse(collectionID), data: JSON.stringify(result), contentType: "application/json", processData: false, success: function(data) { tableView = true; var collID = JSON.parse(collectionID).split("/"); window.location.href = "#showCollection?" + collID[0]; alert("done"); }, error: function(data) { alert(JSON.stringify(data)); } }); } else { var collectionID; var boxContent = $('#documentEditSourceBox').val(); var jsonContent = JSON.parse(boxContent); $.each(jsonContent, function(row1, row2) { if ( row1 == '_id') { collectionID = row2; } }); $.ajax({ type: "PUT", url: "/document/" + collectionID, data: JSON.stringify(jsonContent), contentType: "application/json", processData: false, success: function(data) { tableView = true; var collID = collectionID.split("/"); window.location.href = "#showCollection?" + collID[0]; var img = $('#toggleEditedDocButton').find('img'); img.attr('src', '/_admin/html/media/icons/off_icon16.png'); alert("done"); }, error: function(data) { alert(JSON.stringify(data)); } }); } }); /////////////////////////////////////////////////////////////////////////////// /// live click function for refreshLogButton /////////////////////////////////////////////////////////////////////////////// $('#refreshLogButton').live('click', function () { var selected = $("#tabs").tabs( "option", "selected" ); switch (selected) { case 0: createLogTable(5); break; default: createLogTable(selected); break; } }); /////////////////////////////////////////////////////////////////////////////// /// adds a new row in edit document view /////////////////////////////////////////////////////////////////////////////// $('#addEditedDocRowButton').live('click', function () { if (tableView == true) { documentEditTable.fnAddData(['', "somevalue", value2html("editme"), JSON.stringify("somevalue")]); documentTableMakeEditable('#documentEditTableID'); } else { } }); /////////////////////////////////////////////////////////////////////////////// /// saves a new created document /////////////////////////////////////////////////////////////////////////////// $('#saveNewDocButton').live('click', function () { if (tableView == true) { var data = newDocumentTable.fnGetData(); var result = {}; var collectionID = location.hash.substr(12, location.hash.length); var collID = collectionID.split("="); for (row in data) { var row_data = data[row]; result[row_data[1]] = row_data[3]; } $.ajax({ type: "POST", url: "/document?collection=" + collID, data: JSON.stringify(result), contentType: "application/json", processData: false, success: function(data) { tableView = true; window.location.href = "#showCollection?" + collID; alert("done"); }, error: function(data) { alert(JSON.stringify(data)); } }); } else { var collectionID = location.hash.substr(12, location.hash.length); var collID = collectionID.split("="); var boxContent = $('#NewDocumentSourceBox').val(); var jsonContent = JSON.parse(boxContent); $.each(jsonContent, function(row1, row2) { if ( row1 == '_id') { collectionID = row2; } }); $.ajax({ type: "POST", url: "/document?collection=" + collID, data: JSON.stringify(jsonContent), contentType: "application/json", processData: false, success: function(data) { tableView = true; window.location.href = "#showCollection?" + collID; alert("done"); }, error: function(data) { alert(JSON.stringify(data)); } }); } }); /////////////////////////////////////////////////////////////////////////////// /// adds a new row in new document view /////////////////////////////////////////////////////////////////////////////// $('#addNewDocButton').live('click', function () { if (tableView == true) { newDocumentTable.fnAddData(['', "somevalue", value2html("editme"), JSON.stringify("editme") ]); documentTableMakeEditable('#NewDocumentTableID'); } else { } }); /////////////////////////////////////////////////////////////////////////////// /// toggle button for source / table - edit document view /////////////////////////////////////////////////////////////////////////////// $('#toggleEditedDocButton').live('click', function () { if (tableView == true) { var content = documentEditTable.fnGetData(); var result = {}; for (row in content) { var row_data = content[row]; result[row_data[1]] = JSON.parse(row_data[3]); } $('#documentEditSourceBox').val(JSON.stringify(result)); $('#documentEditTableView').toggle(); $('#documentEditSourceView').toggle(); tableView = false; var img = $(this).find('img'); img.attr('src', '/_admin/html/media/icons/on_icon16.png'); } else { try { var boxContent = $('#documentEditSourceBox').val(); parsedContent = JSON.parse(boxContent); documentEditTable.fnClearTable(); $.each(parsedContent, function(key, val) { if (key == '_id' || key == '_rev') { documentEditTable.fnAddData(["", key, value2html(val), JSON.stringify(val)]); } else { documentEditTable.fnAddData(['',key, value2html(val), JSON.stringify(val)]); } }); documentTableMakeEditable ('#NewDocumentTableID'); $('#NewDocumentTableView').toggle(); $('#NewDocumentSourceView').toggle(); tableView = true; var img = $(this).find('img'); img.attr('src', '/_admin/html/media/icons/off_icon16.png'); } catch(e) { alert(e); } } }); /////////////////////////////////////////////////////////////////////////////// /// deletes a row in edit document view /////////////////////////////////////////////////////////////////////////////// $('#deleteEditedDocButton').live('click', function () { var row = $(this).closest("tr").get(0); documentEditTable.fnDeleteRow(documentEditTable.fnGetPosition(row)); }); /////////////////////////////////////////////////////////////////////////////// /// submit log search /////////////////////////////////////////////////////////////////////////////// $('#submitLogSearch').live('click', function () { var content = $('#logSearchField').val(); var selected = $("#tabs").tabs( "option", "selected" ); var currentTableID; if (selected == 1) {currentTableID = "#critLogTableID"; } else if (selected == 2) {currentTableID = "#warnLogTableID";} else if (selected == 3) {currentTableID = "#infoLogTableID";} else if (selected == 4) {currentTableID = "#debugLogTableID";} switch (selected) { case 0: if(content == '') { createLogTable(5); } else { $('#logTableID').dataTable().fnClearTable(); $('#logTableID_status').text('Showing all entries for: "' + content + '"'); $.getJSON("/_admin/log?search=" + content + "&upto=5", function(data) { var totalAmount = data.totalAmount; var items=[]; var i=0; $.each(data.lid, function () { $('#logTableID').dataTable().fnAddData([data.level[i], data.text[i]]); i++; }); }); } break; default: if(content == '') { createLogTable(selected); } else { $(currentTableID).dataTable().fnClearTable(); $(currentTableID + '_status').text('Showing all entries for: "' + content + '"'); $.getJSON("/_admin/log?search=" + content + "&level=" + selected, function(data) { var totalAmount = data.totalAmount; var items=[]; var i=0; $.each(data.lid, function () { $(currentTableID).dataTable().fnAddData([data.level[i], data.text[i]]); i++; }); }); } } return false; }); /////////////////////////////////////////////////////////////////////////////// /// deletes a row in new document view /////////////////////////////////////////////////////////////////////////////// $('#deleteNewDocButton').live('click', function () { var row = $(this).closest("tr").get(0); newDocumentTable.fnDeleteRow(documentEditTable.fnGetPosition(row)); }); /////////////////////////////////////////////////////////////////////////////// /// submit avocsh content /////////////////////////////////////////////////////////////////////////////// $('#submitAvoc').live('click', function () { var data = $('#avocshContent').val(); var client = "client:" + data; $('#avocshWindow').append('

' + client + '

'); try { var server = "server:" + eval(data); $('#avocshWindow').append('

' + server + '

'); } catch(e) { $('#avocshWindow').append('

Error:' + e + '

'); } $("#avocshWindow").animate({scrollTop:$("#avocshWindow")[0].scrollHeight}, 1); $("#avocshContent").val(''); return false; }); /////////////////////////////////////////////////////////////////////////////// /// submit query content /////////////////////////////////////////////////////////////////////////////// $('#submitQuery').live('click', function () { var data = {query:$('#queryContent').val()}; $.ajax({ type: "POST", url: "/_api/cursor", data: JSON.stringify(data), contentType: "application/json", processData: false, success: function(data) { $("#queryOutput").empty(); $("#queryOutput").append('' + JSON.stringify(data) + ''); }, error: function(data) { $("#queryOutput").empty(); $("#queryOutput").append('' + JSON.stringify(data) + ''); } }); }); /////////////////////////////////////////////////////////////////////////////// /// draws view of creating a new document /////////////////////////////////////////////////////////////////////////////// $('#addDocumentButton').live('click', function () { toSplit = window.location.hash; var collID = toSplit.split("?"); window.location.href = "#collection?" + collID[1] + "=newDocument"; }); /////////////////////////////////////////////////////////////////////////////// /// delete a document /////////////////////////////////////////////////////////////////////////////// $('#documentsView tr td button').live('click', function () { var aPos = documentsTable.fnGetPosition(this.parentElement); var aData = documentsTable.fnGetData(aPos[0]); var row = $(this).closest("tr").get(0); var documentID = aData[1]; if (this.id == "deleteDoc") { try { $.ajax({ type: 'DELETE', contentType: "application/json", url: "/document/" + documentID }); } catch(e) { alert(e); } documentsTable.fnDeleteRow(documentsTable.fnGetPosition(row)); } if (this.id == "editDoc") { window.location.href = "#editDocument?" + documentID; } }); /////////////////////////////////////////////////////////////////////////////// /// check top menue buttons /////////////////////////////////////////////////////////////////////////////// $('#menue button').live('click', function () { if (this.id == "Collections") { $('#subCenterView').hide(); $('#collectionsView').show(); window.location.href = "#"; } if (this.id == "Logs") { window.location.href = "#logs"; } if (this.id == "Status") { window.location.href = "#status"; } if (this.id == "Configuration") { window.location.href = "#config"; } if (this.id == "Query") { window.location.href = "#query"; } if (this.id == "AvocSH") { window.location.href = "#avocsh"; } }); /////////////////////////////////////////////////////////////////////////////// /// saves an edited collection /////////////////////////////////////////////////////////////////////////////// $('#saveEditedCollection').live('click', function () { var newColName; var currentid; var data = editCollectionTable.fnGetData(); $.each(data, function(info, key) { if (key[1] == 'name') { newColName = key[2]; } if (key[1] == 'id') { currentid = key[2]; } }); $.ajax({ type: "PUT", url: "/_api/collection/" + currentid + "/rename", data: '{"name":"' + newColName + '"}', contentType: "application/json", processData: false, success: function(data) { alert("Collection renamed"); window.location.href = ""; $('#subCenterView').hide(); $('#centerView').show(); drawCollectionsTable(); }, error: function(data) { alert(JSON.stringify(data)); } }); }); /////////////////////////////////////////////////////////////////////////////// /// cancels the creation of a new collection /////////////////////////////////////////////////////////////////////////////// $('#cancelNewCollection').live('click', function () { window.location.href = "#"; }); /////////////////////////////////////////////////////////////////////////////// /// saves a new collection /////////////////////////////////////////////////////////////////////////////// $('#saveNewCollection').live('click', function () { var wfscheck = $('input:radio[name=waitForSync]:checked').val(); var collName = $('#createCollName').val(); $.ajax({ type: "POST", url: "/_api/collection", data: '{"name":"' + collName + '", "waitForSync":"' + JSON.parse(wfscheck) + '"}', contentType: "application/json", processData: false, success: function(data) { alert("Collection created"); window.location.href = ""; $('#subCenterView').hide(); $('#centerView').show(); drawCollectionsTable(); }, error: function(data) { alert(JSON.stringify(data)); } }); }); /////////////////////////////////////////////////////////////////////////////// /// live-click function for buttons: "createCollection" & "refreshCollections" /////////////////////////////////////////////////////////////////////////////// $('#centerView button').live('click', function () { if (this.id == "createCollection") { window.location.href = "#createCollection"; return false; } if (this.id == "refreshCollections") { drawCollectionsTable(); } }); /////////////////////////////////////////////////////////////////////////////// /// live-click function for buttons in "collectionsTableID td" /////////////////////////////////////////////////////////////////////////////// $('#collectionsTableID td button').live('click', function () { var collectionsTable = $('#collectionsTableID').dataTable(); var aPos = collectionsTable.fnGetPosition(this.parentElement); var aData = collectionsTable.fnGetData(aPos[0]); var collectionID = aData[1]; var collectionName = aData[2]; /////////////////////////////////////////////////////////////////////////////// ///delete a collection /////////////////////////////////////////////////////////////////////////////// if (this.id == "delete") { $( "#dialog-deleteCollection" ).dialog({ resizable: false, height:180, modal: true, buttons: { "Delete collection": function() { $( this ).dialog( "close" ); $.ajax({ type: 'DELETE', url: "/_api/collection/" + collectionID, success: function () { drawCollectionsTable(); }, error: function () { alert('Error'); } }); }, Cancel: function() { $( this ).dialog( "close" ); } } }); } /////////////////////////////////////////////////////////////////////////////// /// jump to edit collection view /////////////////////////////////////////////////////////////////////////////// if (this.id == "edit") { window.location.href = "#editCollection?" + collectionID; } /////////////////////////////////////////////////////////////////////////////// /// jump to doc view of a collection /////////////////////////////////////////////////////////////////////////////// if (this.id == "showdocs" ) { window.location.href = "#showCollection?" + collectionID; } /////////////////////////////////////////////////////////////////////////////// /// load a collection into memory /////////////////////////////////////////////////////////////////////////////// if (this.id == "load") { globalAjaxCursorChange(); $.ajax({ type: 'PUT', url: "/_api/collection/" + collectionID + "/load", success: function () { alert('Collection: ' + collectionID + ' loaded'); drawCollectionsTable(); }, error: function (data) { alert('Error:' + JSON.stringify(data)); drawCollectionsTable(); } }); } /////////////////////////////////////////////////////////////////////////////// /// unload a collection from memory /////////////////////////////////////////////////////////////////////////////// if (this.id == "unload") { globalAjaxCursorChange(); $.ajax({ type: 'PUT', url: "/_api/collection/" + collectionID + "/unload", success: function () { alert('Collection: ' + collectionID + ' unloaded'); drawCollectionsTable(); }, error: function () { alert('Error'); } }); } }); }); /////////////////////////////////////////////////////////////////////////////// /// hide all divs inside of #centerView /////////////////////////////////////////////////////////////////////////////// function hideAllSubDivs () { $('#subCenterView').show(); $('#collectionsEditView').hide(); $('#newCollectionView').hide(); $('#documentsView').hide(); $('#documentEditView').hide(); $('#newDocumentView').hide(); $('#createCollectionView').hide(); $('#editCollectionView').hide(); $('#logView').hide(); $('#statusView').hide(); $('#configView').hide(); $('#avocshView').hide(); $('#queryView').hide(); } /////////////////////////////////////////////////////////////////////////////// /// draw and fill collections table /////////////////////////////////////////////////////////////////////////////// function drawCollectionsTable () { var collectionsTable = $('#collectionsTableID').dataTable(); collectionsTable.fnClearTable(); $.getJSON("/_api/collection/", function(data) { var items=[]; $.each(data.collections, function(key, val) { var tempStatus = val.status; if (tempStatus == 1) { tempStatus = "new born collection"; } else if (tempStatus == 2) { tempStatus = "unloaded"; items.push(['', val.id, val.name, tempStatus, "", ""]); } else if (tempStatus == 3) { tempStatus = "loaded"; var alive; var size; $.ajax({ type: "GET", url: "/_api/collection/" + val.id + "/figures", contentType: "application/json", processData: false, async: false, success: function(data) { size = data.figures.alive.size / 1024; alive = data.figures.alive.count; }, error: function(data) { } }); items.push(['', val.id, val.name, tempStatus, size + " kB", alive]); } else if (tempStatus == 4) { tempStatus = "in the process of being unloaded"; items.push(["", val.id, val.name, tempStatus, "", ""]); } else if (tempStatus == 5) { tempStatus = "deleted"; items.push(["", val.id, val.name, tempStatus, "", ""]); } /* else { tempStatus = "corrupted"; items.push(["", ""+ val.id + "", ""+ val.name + "", "" + tempStatus + "", "", ""]); }*/ }); $('#collectionsTableID').dataTable().fnAddData(items); showCursor(); }); } /////////////////////////////////////////////////////////////////////////////// /// short function to enable edit mode for a table /////////////////////////////////////////////////////////////////////////////// function documentTableMakeEditable (tableID) { var documentEditTable = $(tableID).dataTable(); var i = 0; $('.writeable', documentEditTable.fnGetNodes() ).each(function () { if ( i == 1) { $(this).removeClass('writeable'); i = 0; } if (this.innerHTML == "_id" || this.innerHTML == "_rev") { $(this).removeClass('writeable'); i = 1; } }); //jeditable init $('.writeable', documentEditTable.fnGetNodes()).editable(function(value, settings) { var aPos = documentEditTable.fnGetPosition(this); if (aPos[1] == 1) { //return key column documentEditTable.fnUpdate(value, aPos[0], aPos[1]); return value; } if (aPos[1] == 2) { //TODO var oldContent = JSON.parse(documentEditTable.fnGetData(aPos[0], aPos[1] + 1)); var test = getTypedValue(value); if (String(value) == String(oldContent)) { // no change return value2html(oldContent); } else { // change update hidden row //MARKER documentEditTable.fnUpdate(JSON.stringify(test), aPos[0], aPos[1] + 1); // return visible row return value2html(test); } } },{ data: function() { var aPos = documentEditTable.fnGetPosition(this); var value = documentEditTable.fnGetData(aPos[0], aPos[1]); if (aPos[1] == 1) { return value; } if (aPos[1] == 2) { var oldContent = documentEditTable.fnGetData(aPos[0], aPos[1] + 1); if (typeof(oldContent) == 'object') { //grep hidden row and paste in visible row return value2html(oldContent); } else { return oldContent; } } }, //type: 'textarea', tooltip: 'click to edit', cssclass : 'jediTextarea', submit: 'Okay', cancel: 'Cancel', onblur: 'cancel', style: 'display: inline' }); } /////////////////////////////////////////////////////////////////////////////// /// escape a string /////////////////////////////////////////////////////////////////////////////// function escaped (value) { return value.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "&"); } /////////////////////////////////////////////////////////////////////////////// /// get value of user edited tabel cell /////////////////////////////////////////////////////////////////////////////// function getTypedValue (value) { if (value == 'true') { return true; } if (value == 'false') { return false; } if (value == 'null') { return null; } if (value.match(/^-?((\d+)?\.)?\d+$/)) { // TODO: support exp notation return parseFloat(value); } try { // assume list or object var test = JSON.parse(value); if (test instanceof Array) { // value is an array return test; } if (typeof(test) == 'object') { // value is an object return test; } } catch (err) { } // fallback: value is a string value = value + ''; if (value.substr(0, 1) == '"' && value.substr(-1) == '"' ) { value = value.substr(1, value.length-2); } return value; } /////////////////////////////////////////////////////////////////////////////// /// checks type fo typed cell value /////////////////////////////////////////////////////////////////////////////// function value2html (value) { var checked = typeof(value); switch(checked) { case 'number': return ("number: " + value); case 'string': return ("string: " + escaped(value)); case 'boolean': return ("boolean: " + value); case 'object': if (value instanceof Array) { return ("array: " + JSON.stringify(value)); } else { return ("object: "+ JSON.stringify(value)); } } } /////////////////////////////////////////////////////////////////////////////// /// draw breadcrumb navigation /////////////////////////////////////////////////////////////////////////////// function createnav (menue) { $('#nav1').text(menue); $('#nav2').text(''); $('#nav3').text(''); $('#nav4').text(''); if (menue == "Collections") { $('#nav1').attr('href', '#'); } else { $('#nav1').attr('href',null); } } /////////////////////////////////////////////////////////////////////////////// /// animated footer div /////////////////////////////////////////////////////////////////////////////// $(function() { var open = false; $('#footerSlideButton').click(function() { if(open === false) { $('#footerSlideContent').animate({ height: '120px' }); $(this).css('backgroundPosition', 'bottom left'); open = true; $('#movetologinButton').text("Hide"); } else { $('#footerSlideContent').animate({ height: '25px' }); $(this).css('backgroundPosition', 'top left'); open = false; $('#movetologinButton').text("Login"); } }); $('#movetologinButton').click(function() { if(open === false) { $('#movetologinButton').text("Hide"); $('#footerSlideContent').animate({ height: '120px' }); $('#footerSlideButton').css('backgroundPosition', 'bottom left'); open = true; } else { $('#movetologinButton').text("Login"); $('#footerSlideContent').animate({ height: '25px' }); $('#footerSlideButton').css('backgroundPosition', 'top left'); open = false; } }); }); /////////////////////////////////////////////////////////////////////////////// /// Log tables pagination /////////////////////////////////////////////////////////////////////////////// function createLogTable(loglevel) { currentPage = 1; currentLoglevel = loglevel; var url = "/_admin/log?level="+loglevel+"&size=10"; //set tableid if (loglevel == 1) {currentTableID = "#critLogTableID"; } else if (loglevel == 2) {currentTableID = "#warnLogTableID";} else if (loglevel == 3) {currentTableID = "#infoLogTableID";} else if (loglevel == 4) {currentTableID = "#debugLogTableID";} else if (loglevel == 5) { currentTableID = "#logTableID"; url = "/_admin/log?upto=4&size=10"; } //get first rows $.getJSON(url, function(data) { var items=[]; var i=0; currentAmount = data.totalAmount; var totalPages = Math.ceil(currentAmount / 10); //clear table $(currentTableID).dataTable().fnClearTable(); //draw first 10 rows $.each(data.lid, function () { $(currentTableID).dataTable().fnAddData([data.level[i], data.text[i]]); i++; }); if (totalPages == 0) { $(currentTableID + '_status').text("Showing page 0 of 0"); return 0; } $(currentTableID + '_status').text("Showing page " + currentPage + " of " + totalPages); }); } function createPrevDocPagination() { if (collectionCurrentPage == 1) { return 0; } var prevPage = JSON.parse(collectionCurrentPage) -1; var offset = prevPage * 10 - 10; $('#documentsTableID').dataTable().fnClearTable(); $.ajax({ type: 'PUT', url: '/_api/simple/all/', data: '{"collection":"' + globalCollectionName + '","skip":' + offset + ',"limit":10}', contentType: "application/json", success: function(data) { $.each(data, function(k, v) { $('#documentsTableID').dataTable().fnAddData(['', v._id, v._rev, cutByResolution(JSON.stringify(v))]); }); }, error: function(data) { } }); collectionCurrentPage = prevPage; $('#documents_status').text("Showing page " + collectionCurrentPage + " of " + totalCollectionCount); } function createNextDocPagination () { if (collectionCurrentPage == totalCollectionCount) { return 0; } var nextPage = JSON.parse(collectionCurrentPage) +1; var offset = collectionCurrentPage * 10; $('#documentsTableID').dataTable().fnClearTable(); $.ajax({ type: 'PUT', url: '/_api/simple/all/', data: '{"collection":"' + globalCollectionName + '","skip":' + offset + ',"limit":10}', contentType: "application/json", success: function(data) { $.each(data, function(k, v) { $("#documentsTableID").dataTable().fnAddData(['', v._id, v._rev, cutByResolution(JSON.stringify(v))]); }); }, error: function(data) { } }); collectionCurrentPage = nextPage; $('#documents_status').text("Showing page " + collectionCurrentPage + " of " + totalCollectionCount); } function createPrevPagination(checked) { var prevPage = JSON.parse(currentPage) - 1; var offset = prevPage * 10 - 10; var url = "/_admin/log?level="+currentLoglevel+"&size=10&offset="+offset; var totalPages = Math.ceil(currentAmount / 10); if (currentPage == 1 || totalPages == 0 ) { return 0; } if (checked == "all") { url = "/_admin/log?upto=4&size=10&offset="+offset; } $.getJSON(url, function(data) { $(currentTableID).dataTable().fnClearTable(); var i = 0; $.each(data.level, function() { $(currentTableID).dataTable().fnAddData([data.level[i], data.text[i]]); i++; }); currentPage = JSON.parse(currentPage) - 1; $(currentTableID + '_status').text("Showing page " + currentPage + " of " + totalPages); }); } function createNextPagination(checked) { var totalPages = Math.ceil(currentAmount / 10); var offset = currentPage * 10; var url = "/_admin/log?level="+currentLoglevel+"&size=10&offset="+offset; if (currentPage == totalPages || totalPages == 0 ) { return 0; } if (checked == "all") { url = "/_admin/log?upto=4&size=10&offset="+offset; } $.getJSON(url, function(data) { $(currentTableID).dataTable().fnClearTable(); var i = 0; $.each(data.level, function() { $(currentTableID).dataTable().fnAddData([data.level[i], data.text[i]]); i++ }); currentPage = JSON.parse(currentPage) + 1; $(currentTableID + '_status').text("Showing page " + currentPage + " of " + totalPages); }); } function showCursor() { $(':button').mouseover(function () { $(this).css('cursor', 'pointer'); }); } function cutByResolution (string) { var userScreenSize = $(window).width(); var content; var escapedContent = escaped(string); var userContent; if (userScreenSize <= 1024) { userContent = 150; } else if (userScreenSize > 1024 && userScreenSize < 1680) { userContent = 250; } else if (userScreenSize > 1680) { userContent = 350; } if (escapedContent.length > userContent) { content = escapedContent.substr(0,(userContent-3))+'...'; } else { content = escapedContent; } return content; } function createFirstPagination () { if (collectionCurrentPage == 1) { return 0; } $('#documentsTableID').dataTable().fnClearTable(); $.ajax({ type: 'PUT', url: '/_api/simple/all/', data: '{"collection":"' + globalCollectionName + '","skip":0,"limit":10}', contentType: "application/json", success: function(data) { $.each(data, function(k, v) { $('#documentsTableID').dataTable().fnAddData(['', v._id, v._rev, cutByResolution(JSON.stringify(v))]); }); collectionCurrentPage = 1; $('#documents_status').text("Showing page 1 of " + totalCollectionCount); }, error: function(data) { } }); } function createLastLogPagination (tableid) { var totalPages = Math.ceil(currentAmount / 10); var offset = (totalPages * 10) - 10; var url = "/_admin/log?level="+currentLoglevel+"&size=10&offset="+offset; if (currentPage == totalPages || totalPages == 0 ) { return 0; } if (tableid = "#logTableID") { url = "/_admin/log?upto=4&size=10&offset="+offset; } $.getJSON(url, function(data) { $(currentTableID).dataTable().fnClearTable(); var i = 0; $.each(data.level, function() { $(currentTableID).dataTable().fnAddData([data.level[i], data.text[i]]); i++ }); currentPage = totalPages; $(currentTableID + '_status').text("Showing page " + currentPage + " of " + totalPages); }); } function createLastPagination () { if (totalCollectionCount == collectionCurrentPage) { return 0 } $('#documentsTableID').dataTable().fnClearTable(); var offset = totalCollectionCount * 10 - 10; $.ajax({ type: 'PUT', url: '/_api/simple/all/', data: '{"collection":"' + globalCollectionName + '","skip":' + offset + ',"limit":10}', contentType: "application/json", success: function(data) { $.each(data, function(k, v) { $('#documentsTableID').dataTable().fnAddData(['', v._id, v._rev, cutByResolution(JSON.stringify(v))]); }); collectionCurrentPage = totalCollectionCount; $('#documents_status').text("Showing page " + totalCollectionCount + " of " + totalCollectionCount); }, error: function(data) { } }); } function globalAjaxCursorChange() { $("html").bind("ajaxStart", function(){ $(this).addClass('busy'); }).bind("ajaxStop", function(){ $(this).removeClass('busy'); }); }