Skip to content

Commit

Permalink
feat: add function for save query (#1)
Browse files Browse the repository at this point in the history
  • Loading branch information
StephaneBour authored Nov 7, 2017
2 parents 516d86b + 2f0a2c8 commit f6d6f00
Show file tree
Hide file tree
Showing 8 changed files with 254 additions and 10 deletions.
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ Have fun !
- Autocompletion on indices
- Autocompletion on types
- Autocompletion on fields
- Add "filter" in autocomplete
- Add "Saved query"

### Screenshots

Expand All @@ -27,4 +29,12 @@ Main screen

Autocomplete

![Main screen](https://github.com/StephaneBour/sense-chrome/raw/master/screenshots/autocomplete.jpg)
![Main screen](https://github.com/StephaneBour/sense-chrome/raw/master/screenshots/autocomplete.jpg)


Save your query

![Save 1](https://github.com/StephaneBour/sense-chrome/raw/master/screenshots/saved-1.jpg)


![Save 2](https://github.com/StephaneBour/sense-chrome/raw/master/screenshots/saved-2.jpg)
20 changes: 20 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
<button id="help_btn" class="btn pull-right-btn" data-toggle="modal" data-target="#help_popup">Help</button>
<button id="history_btn" class="btn pull-right-btn" data-toggle="modal" data-target="#history_popup">History
</button>
<button id="saved_btn" class="btn pull-right-btn" data-toggle="modal" data-target="#saved_popup">Saved query
</button>

</div>
</div>
Expand All @@ -38,6 +40,7 @@
class="icon-wrench"></i></a>
<ul class="dropdown-menu">
<li><a id="copy_as_curl" tabindex="-1" href="#">Copy as cURL</a></li>
<li><a id="query_save" tabindex="-1" href="#">Save query</a></li>
<li><a id="auto_indent" tabindex="-1" href="#">Auto indent</a></li>
</ul>
</div>
Expand Down Expand Up @@ -110,6 +113,22 @@ <h3>History</h3>
</div>
</div>

<div id="saved_popup" class="modal hide fade" data-keyboard="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Saved query</h3>
</div>
<div class="modal-body">
<ul class="nav nav-list">
<!--<li><a href="#"><i class="icon-chevron-right"></i><span></span></a></li>-->
</ul>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Cancel</a>
<a href="#" class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Select</a>
</div>
</div>

<div id="welcome_popup" class="modal hide fade" data-keyboard="true" data-remote="welcome.html">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
Expand Down Expand Up @@ -149,5 +168,6 @@ <h3>Welcome to Sense</h3>
<script src="src/base.js" type="text/javascript" charset="utf-8"></script>
<script src="src/mappings.js" type="text/javascript" charset="utf-8"></script>
<script src="src/history.js" type="text/javascript" charset="utf-8"></script>
<script src="src/saved.js" type="text/javascript" charset="utf-8"></script>
<script src="src/autocomplete.js" type="text/javascript" charset="utf-8"></script>
</html>
Binary file added screenshots/saved-1.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshots/saved-2.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 8 additions & 8 deletions sense.css
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ body {
margin: auto !important;
}

#history_popup {
#history_popup, #saved_popup {
width: 90%;
margin-left: -45%;
height: 90%;
Expand All @@ -99,21 +99,21 @@ body {
#history_popup .modal-body {
}

#history_popup .modal-header {
#history_popup .modal-header, #saved_popup .modal-header {
position: absolute;
top: 0;
left: 0;
right: 0;
}

#history_popup .modal-footer {
#history_popup .modal-footer, #saved_popup .modal-footer {
position: absolute;
bottom: 0;
left: 0;
right: 0;
}

#history_popup .nav {
#history_popup .nav, #saved_popup .nav {
position: absolute;
width: 400px;
left: 0;
Expand Down Expand Up @@ -144,7 +144,7 @@ body {
opacity: .25;
}

#history_popup .nav a {
#history_popup .nav a, #saved_popup .nav a {
display: block;
margin: 0 0 -1px;
padding: 8px 14px;
Expand All @@ -154,19 +154,19 @@ body {
overflow: hidden;
}

#history_popup .nav li:first-child > a {
#history_popup .nav li:first-child > a, #saved_popup .nav li:first-child > a {
-webkit-border-radius: 6px 6px 0 0;
-moz-border-radius: 6px 6px 0 0;
border-radius: 6px 6px 0 0;
}

#history_popup .nav li:last-child > a {
#history_popup .nav li:last-child > a, #saved_popup .nav li:last-child > a {
-webkit-border-radius: 0 0 6px 6px;
-moz-border-radius: 0 0 6px 6px;
border-radius: 0 0 6px 6px;
}

#history_viewer {
#history_viewer, #saved_viewer {
position: absolute;
left: 430px;
right: 0;
Expand Down
21 changes: 21 additions & 0 deletions src/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,21 @@ function copyToClipboard(value) {
$(currentActive).focus(); // restore focus.
}


function querySave() {
var req = sense.utils.getCurrentRequest();
if (!req) return;

var es_server = $("#es_server").val(),
es_url = req.url,
es_method = req.method,
es_data = req.data;

var title = prompt("Please enter a title for your query : ", '');

sense.saved.saveQuery(es_server, es_url, es_method, es_data, title);
}

function copyAsCURL() {
var req = sense.utils.getCurrentRequest();
if (!req) return;
Expand Down Expand Up @@ -428,6 +443,7 @@ function init() {
});

sense.history.init();
sense.saved.init();
sense.autocomplete.init();

$("#send").tooltip();
Expand All @@ -441,6 +457,11 @@ function init() {
e.preventDefault();
});

$("#query_save").click(function (e) {
querySave();
e.preventDefault();
});

$("#auto_indent").click(function (e) {
autoIndent();
e.preventDefault();
Expand Down
1 change: 0 additions & 1 deletion src/mappings.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@
ret.push(alias);
});
}
console.log(per_index_types);
return ret;
}

Expand Down
194 changes: 194 additions & 0 deletions src/saved.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
(function () {

var global = window;

var saved_viewer, saved_popup;

function getSavedKeys() {
var keys = [];
for (var i = 0; i < localStorage.length; i++) {
var k = localStorage.key(i);
if (k.indexOf("saved_elem") == 0) {
keys.push(k);
}
}

keys.sort();
keys.reverse();
return keys;
}

function getSaved() {
var saved_items = [];
$.each(getSavedKeys(), function (i, key) {
saved_items.push(JSON.parse(localStorage.getItem(key)));
});

return saved_items;
}

function populateSavedElem(saved_elem) {
var s = saved_elem.method + " " + saved_elem.endpoint + "\n" + (saved_elem.data || "");
saved_viewer.setValue(s);
saved_viewer.clearSelection();
}

function confirmDelete(li, saved_elem) {
if(confirm('Are you sure you want to delete ' + saved_elem.title + '?')) {
localStorage.removeItem('saved_elem_' + saved_elem.time);
li.remove();
}
}

function applySavedElem(saved_elem) {
var session = sense.editor.getSession();
var pos = sense.editor.getCursorPosition();
var prefix = "";
var suffix = "\n";
if (sense.utils.isStartRequestRow(pos.row)) {
pos.column = 0;
suffix += "\n";
}
else if (sense.utils.isEndRequestRow(pos.row)) {
var line = session.getLine(pos.row);
pos.column = line.length;
prefix = "\n\n";
}
else if (sense.utils.isInBetweenRequestsRow(pos.row)) {
pos.column = 0;
}
else {
pos = sense.utils.nextRequestEnd(pos);
prefix = "\n\n";
}

var s = prefix + saved_elem.method + " " + saved_elem.endpoint;
if (saved_elem.data) s += "\n" + saved_elem.data;

s += suffix;

session.insert(pos, s);
sense.editor.clearSelection();
sense.editor.moveCursorTo(pos.row + prefix.length, 0);
sense.editor.focus();
}

function init() {
saved_popup = $("#saved_popup");

saved_popup.on('shown', function () {
$('<div id="saved_viewer">No query available</div>').appendTo(saved_popup.find(".modal-body"));

saved_viewer = ace.edit("saved_viewer");
saved_viewer.getSession().setMode("ace/mode/sense");
saved_viewer.getSession().setFoldStyle('markbeginend');
saved_viewer.setReadOnly(true);
saved_viewer.renderer.setShowPrintMargin(false);
sense.editor.getSession().setUseWrapMode(true);

showSaved(saved_popup);

saved_popup.find(".modal-body .nav li:first a").click();

});

saved_popup.find("#saved_delete").click(function () {
localStorage.removeItem(k);
})

saved_popup.on('hidden', function () {
saved_popup.find('.modal-body #saved_viewer').remove();
saved_popup.find('.modal-body .nav li').remove();
saved_viewer = null;
});

saved_popup.find(".btn-primary").click(function () {
saved_popup.find(".modal-body .nav li.active").trigger("apply");
});

}

function showSaved(saved_popup) {

$.each(getSaved(), function (i, saved_elem) {
var li = $('<li><a href="#"><i class="icon-chevron-right"></i><span/></a></li>');
var disc = '<span class="label ' + classByMethod(saved_elem.method) + '">' + saved_elem.method + '</span> ' + saved_elem.title + '<br><small>' + saved_elem.endpoint;
var date = moment(saved_elem.time);
if (date.diff(moment(), "days") < -7)
disc += " (" + date.format("MMM D") + ")";
else
disc += " (" + date.fromNow() + ")";
disc += '</small><i class="icon-trash pull-right pointer" title="Delete this query"></i></button>';

li.find("span").html(disc);
li.attr("title", disc);

li.find("a").click(function () {
saved_popup.find('.modal-body .nav li').removeClass("active");
li.addClass("active");
$('#saved_delete').removeClass('hide');
populateSavedElem(saved_elem);
return false;
});

li.find(".icon-trash").click(function () {
confirmDelete(li, saved_elem);
});

li.dblclick(function () {
li.addClass("active");
saved_popup.find(".btn-primary").click();
});

li.hover(function () {
populateSavedElem(saved_elem);
return false;
}, function () {
saved_popup.find(".modal-body .nav li.active a").click();
});

li.bind('apply', function () {
applySavedElem(saved_elem);
});


li.appendTo(saved_popup.find(".modal-body .nav"));
});
}

function classByMethod(method) {

switch(method.toUpperCase()) {
case 'GET':
return 'label-info';
case 'POST':
return 'label-success';
case 'PUT':
return 'label-warning';
case 'DELETE':
return 'label-danger';
default:
return '';
}
}

function saveQuery(server, endpoint, method, data, title) {
var keys = getSavedKeys();

var timestamp = new Date().getTime();
var k = "saved_elem_" + timestamp;
localStorage.setItem(k, JSON.stringify(
{ 'time': timestamp, 'server': server, 'endpoint': endpoint, 'method': method, 'data': data , 'title': title}));
}

global.sense.saved = {
init: init,
saveQuery: saveQuery
};

})();





0 comments on commit f6d6f00

Please sign in to comment.