Merge branch 'master' into issue#282

This commit is contained in:
ldinc 2017-10-14 14:34:32 +03:00
commit 33be6b036d
5 changed files with 113 additions and 35 deletions

File diff suppressed because one or more lines are too long

View File

@ -101,7 +101,8 @@
top: 18px; top: 18px;
} }
#sidebar span.current-database { #sidebar span.current-database,
#sidebar input.typeahead {
margin-left: 30px; margin-left: 30px;
display: inline-block; display: inline-block;
width: 200px; width: 200px;
@ -111,6 +112,33 @@
text-overflow: ellipsis; text-overflow: ellipsis;
} }
#sidebar input.typeahead {
display: none;
background: #79589f;
width: 200px;
height: 22px;
color: #fff;
font-weight: normal;
outline: none;
border: 0px none;
}
#sidebar input.typeahead::-webkit-input-placeholder {
color: #d6cce2;
}
#sidebar ul.typeahead {
margin-left: 30px;
overflow-y: auto;
max-height: 300px;
z-index: 999;
}
#sidebar ul.typeahead a {
font-size: 13px;
padding: 3px 10px;
}
#sidebar div.tables-list { #sidebar div.tables-list {
position: absolute; position: absolute;
right: 0; right: 0;
@ -677,4 +705,4 @@
.ace_active-line { .ace_active-line {
background: none !important; background: none !important;
} }

View File

@ -14,7 +14,8 @@
<script type="text/javascript" src="static/js/ace-pgsql.js"></script> <script type="text/javascript" src="static/js/ace-pgsql.js"></script>
<script type="text/javascript" src="static/js/bootstrap-contextmenu.js"></script> <script type="text/javascript" src="static/js/bootstrap-contextmenu.js"></script>
<script type="text/javascript" src="static/js/utils.js"></script> <script type="text/javascript" src="static/js/utils.js"></script>
<script type="text/javascript" src="static/js/app.js"></script> <script type="text/javascript" src="static/js/bootstrap3-typeahead.min.js"></script>
<script type="text/javascript" src="static/js/app.js"></script>
</head> </head>
<body> <body>
<div id="main"> <div id="main">
@ -38,8 +39,9 @@
<div id="sidebar"> <div id="sidebar">
<div class="tables-list"> <div class="tables-list">
<div class="wrap"> <div class="wrap">
<div class="title main"> <div class="title main">
<i class="fa fa-database"></i> <span class="current-database" id="current_database"></span> <i class="fa fa-database"></i> <span class="current-database" id="current_database"></span>
<input class="typeahead current_database" id="database_search" type="text" placeholder="Search database">
<span class="refresh" id="refresh_tables" title="Refresh tables list"><i class="fa fa-refresh"></i></span> <span class="refresh" id="refresh_tables" title="Refresh tables list"><i class="fa fa-refresh"></i></span>
</div> </div>
<div id="objects"></div> <div id="objects"></div>
@ -190,7 +192,7 @@
<div class="connection-ssh-group"> <div class="connection-ssh-group">
<hr/> <hr/>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">SSH Host</label> <label class="col-sm-3 control-label">SSH Host</label>
<div class="col-sm-7"> <div class="col-sm-7">
@ -200,7 +202,7 @@
<input type="text" id="ssh_port" class="form-control" placeholder="22" /> <input type="text" id="ssh_port" class="form-control" placeholder="22" />
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">SSH User</label> <label class="col-sm-3 control-label">SSH User</label>
<div class="col-sm-9"> <div class="col-sm-9">
@ -244,11 +246,10 @@
<li class="divider"></li> <li class="divider"></li>
<li><a href="#" data-action="truncate">Truncate Table</a></li> <li><a href="#" data-action="truncate">Truncate Table</a></li>
<li><a href="#" data-action="delete">Delete Table</a></li> <li><a href="#" data-action="delete">Delete Table</a></li>
<li class="divider"></li>
<li><a href="#" data-action="copy">Copy Table Name</a></li>
</ul> </ul>
</div> </div>
<div id="databases_context_menu">
<ul class="dropdown-menu" role="menu"></ul>
</div>
<div id="current_database_context_menu"> <div id="current_database_context_menu">
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><a href="#" data-action="export">Export SQL dump</a></li> <li><a href="#" data-action="export">Export SQL dump</a></li>

View File

@ -224,6 +224,9 @@ function performTableAction(table, action, el) {
var win = window.open(url, "_blank"); var win = window.open(url, "_blank");
win.focus(); win.focus();
break; break;
case "copy":
copyToClipboard(table.split('.')[1]);
break;
} }
} }
@ -313,7 +316,7 @@ function setCurrentTab(id) {
if (id != "table_content") { if (id != "table_content") {
$("#body").removeClass("with-pagination"); $("#body").removeClass("with-pagination");
} }
$("#nav ul li.selected").removeClass("selected"); $("#nav ul li.selected").removeClass("selected");
$("#" + id).addClass("selected"); $("#" + id).addClass("selected");
@ -490,7 +493,7 @@ function showTableStructure() {
} }
setCurrentTab("table_structure"); setCurrentTab("table_structure");
$("#input").hide(); $("#input").hide();
$("#body").prop("class", "full"); $("#body").prop("class", "full");
@ -847,19 +850,31 @@ function bindContextMenus() {
} }
}); });
}); });
}
$(".tables-list .title").contextmenu({ function toggleDatabaseSearch() {
target: "#databases_context_menu", $("#current_database").toggle();
onItem: function(context, e) { $("#database_search").toggle();
var name = $(e.target).text(); }
apiCall("post", "/switchdb", { db: name }, function(resp) {
if (resp.error) { function enableDatabaseSearch(data) {
alert(resp.error); var input = $("#database_search");
return;
} input.typeahead("destroy");
window.location.reload();
}); input.typeahead({
} source: data,
minLength: 0,
items: "all",
autoSelect: false,
fitToElement: true
});
input.typeahead("lookup").focus();
input.on("focusout", function(e){
toggleDatabaseSearch();
input.off("focusout");
}); });
} }
@ -1056,13 +1071,23 @@ $(document).ready(function() {
$("#current_database").on("click", function(e) { $("#current_database").on("click", function(e) {
apiCall("get", "/databases", {}, function(resp) { apiCall("get", "/databases", {}, function(resp) {
$("#databases_context_menu > ul > li").remove(); toggleDatabaseSearch();
resp.forEach(function(name) { enableDatabaseSearch(resp);
$("<li><a href='#'>" + name + "</a></li>").appendTo("#databases_context_menu > ul");
});
$(".tables-list .title").triggerHandler("contextmenu");
}); });
}); });
$("#database_search").change(function(e) {
var current = $("#database_search").typeahead("getActive");
if (current && current == $("#database_search").val()) {
apiCall("post", "/switchdb", { db: current }, function(resp) {
if (resp.error) {
alert(resp.error);
return;
};
window.location.reload();
});
};
});
$("#edit_connection").on("click", function() { $("#edit_connection").on("click", function() {
if (connected) { if (connected) {
@ -1143,7 +1168,7 @@ $(document).ready(function() {
$("#pg_password").val(item.password); $("#pg_password").val(item.password);
$("#pg_db").val(item.database); $("#pg_db").val(item.database);
$("#connection_ssl").val(item.ssl); $("#connection_ssl").val(item.ssl);
if (item.ssh && Object.keys(item.ssh).length > 0) { if (item.ssh && Object.keys(item.ssh).length > 0) {
$("#ssh_host").val(item.ssh.host); $("#ssh_host").val(item.ssh.host);
$("#ssh_port").val(item.ssh.port); $("#ssh_port").val(item.ssh.port);

1
static/js/bootstrap3-typeahead.min.js vendored Normal file

File diff suppressed because one or more lines are too long