WS tool: start overhaul

This commit is contained in:
mDuo13
2019-05-22 19:04:47 -07:00
parent 78b5902376
commit a21e425ca9
6 changed files with 253 additions and 83 deletions

View File

@@ -0,0 +1,13 @@
Request("ACCOUNT METHODS");
Request('account_channels', {
description: "Returns information about an account's <a href='payment-channels.html'>payment channels</a>.",
link: "account_channels.html",
body: {
"id": 1,
"command": "account_channels",
"account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
"destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"ledger_index": "validated"
}
})

View File

@@ -0,0 +1,156 @@
var commandlist = $("#command_list")
const request_body = $(".request-body.io")
const response_body = $(".response-body.io")
const GET = "GET"
const POST = "POST"
const PUT = "PUT"
const DELETE = "DELETE"
function slugify(str) {
str = str.replace(/^\s+|\s+$/g, '') // trim
str = str.toLowerCase()
// remove accents, swap ñ for n, etc
const from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;"
const to = "aaaaeeeeiiiioooouuuunc------"
for (let i=0, l=from.length ; i<l ; i++) {
str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i))
}
str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
.replace(/\s+/g, '-') // collapse whitespace and replace by -
.replace(/-+/g, '-'); // collapse dashes
return str;
}
//Build requests
const requests = { };
const requestlist = [];
function Request(name, obj) {
if (obj === undefined) {
requestlist.push({slug: null,name: name});//separator
return null;
}
obj.name = name;
obj.slug = slugify(name);
requests[obj.slug] = obj;
requestlist.push(obj);
return obj;
};
function generate_table_of_contents() {
$.each(requestlist, function(i, req) {
if (req.slug === null) {
commandlist.append("<li class='separator'>"+req.name+"</li>");
} else {
commandlist.append("<li><a href='#"+req.slug+"'>"+req.name+"</a></li>");
}
});
}
function make_commands_clickable() {
commandlist.children("li").click(function() {
var cmd = slugify($(this).text().trim());
if (!requests[cmd]) return;
select_request(cmd, true);
window.location.hash = cmd;
$(this).siblings().removeClass('selected');
$(this).addClass('selected');
});
}
const cm_request = CodeMirror(request_body.get(0), {
mode: 'javascript',
json: true,
smartIndent: false
})
const cm_response = CodeMirror(response_body.get(0), {
mode: 'javascript',
json: true,
smartIndent: false,
readOnly: true
})
function select_request(request) {
if (request === undefined) {
var el = commandlist.children("li:not(.separator)").eq(0)
request = slugify(el.text())
} else {
var el = commandlist.find("li a[href='#"+request+"']").parent()
}
$(el).siblings().removeClass('selected');
$(el).addClass('selected');
command = requests[request];
if (command.description) {
$(".api-method-description-wrapper .blurb").html(command.description)
$(".api-method-description-wrapper .blurb").show()
} else {
$(".api-method-description-wrapper .blurb").hide()
}
if (command.link) {
$(".api-method-description-wrapper .api-readmore").attr("href", command.link)
$(".api-method-description-wrapper .api-readmore").show()
} else {
$(".api-method-description-wrapper .api-readmore").hide()
}
$(".selected_command").attr('href', DOC_BASE+command.link).text(command.name)
change_path(command);
if (command.hasOwnProperty("body")) {
cm_request.setValue(JSON.stringify(command.body, null, 2));
} else {
//No body, so wipe out the current contents.
cm_request.setValue("");
}
cm_request.refresh();
reset_response_area();
};
// TODO: more stuff
$(document).ready(function() {
//wait for the Requests to be populated by another file
generate_table_of_contents();
make_commands_clickable();
if (window.location.hash) {
var cmd = window.location.hash.slice(1).toLowerCase();
select_request(cmd);
} else {
select_request();
}
if (urlParams["base_url"]) {
change_base_url(urlParams["base_url"]);
}
request_button.click(send_request);
});
var urlParams;
(window.onpopstate = function () {
var match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);
urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
})();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -5,90 +5,96 @@
<div class="card-header">
<h4>API Methods</h4>
</div>
<ul class="card-body" id='command_list'>
<li class='selected'><a href='#server_info'>server_info</a></li>
<li><a href='#server_state'>server_state</a></li>
<li><a href='#ping'>ping</a></li>
<br/>
<li><a href='#subscribe'>subscribe</a></li>
<li><a href='#unsubscribe'>unsubscribe</a></li>
<br/>
<li><a href='#ledger'>ledger</a></li>
<li><a href='#ledger_closed'>ledger_closed</a></li>
<li><a href='#ledger_current'>ledger_current</a></li>
<li><a href='#ledger_entry'>ledger_entry</a></li>
<br/>
<li><a href='#account_info'>account_info</a></li>
<li><a href='#account_lines'>account_lines</a></li>
<li><a href='#account_offers'>account_offers</a></li>
<li><a href='#account_tx'>account_tx</a></li>
<li><a href='#account_currencies'>account_currencies</a></li>
<br/>
<li><a href='#transaction_entry'>transaction_entry</a></li>
<li><a href='#tx'>tx</a></li>
<li><a href='#tx_history'>tx_history</a></li>
<br/>
<li><a href='#sign'>sign</a></li>
<li><a href='#submit'>submit</a></li>
<br/>
<li><a href='#ripple_path_find'>ripple_path_find</a></li>
<li><a href='#path_find'>path_find</a></li>
<li><a href='#book_offers'>book_offers</a></li>
</ul>
<ul class="card-body" id="command_list"></ul>
</div>
{% endblock %}
{% block main %}
<section class="container-fluid pt-3 p-md-3">
<section class="container-fluid pt-3 p-md-3 websocket-tool" id="wstool-1">
<h1>WebSocket Tool</h1>
<div id='online_state'>Offline</div>
<div id='command_wrapper'>
<div id='command_table'>
<div id='io_wrapper'>
<div id='input' class='io'>
<div id='test_warning' class='alert alert-danger' style='display:none;'>
<h4>Test accounts only!</h4>
<p>Never submit account secrets to a server you do not control, unless you are prepared to lose ownership of the account!</p>
</div>
<div style="clear:both;"></div>
<h3 id='selected_command' title='Reference information'>server_info</h3>
<p id='description'></p>
<div id='invalid'>Invalid JSON</div>
<p>JSON</p>
<div id='request'></div>
<div id='request_options'>
<div class="button btn btn-outline-secondary api" id='request_button'>Send request</div>
</div>
</div>
<div id='output' class='io'>
<h2>Response</h2>
<div>
<img class="loader" src="assets/img/xrp-loader-96.png" style="vertical-align: middle; display:none;"/>
</div>
<p id='info'></p>
<div id='response'></div>
<div id='tooltip'></div>
<div id='stream_output'>
<h3>Stream output</h3>
<ul class='toolbar'>
<li id='stream_show'>show</li>
<li id='stream_pause'>pause</li>
</ul>
<p id='status'></p>
</div>
</div>
</div>
</div>
</div>
<div class="api-method-description-wrapper">
<h3><a href="server_info.html" class="selected_command">server_info</a></h3>
<p class="blurb">Get information about the state of the server, formatted for human consumption.</p>
<a class="btn btn-outline-secondary api-readmore" href="server_info.html">Read more</a>
</div><!--/.api-method-description-wrapper-->
<div class="api-input-area">
<h4>Request</h4>
<div class="request-body io"></div>
<div class="request-options btn-toolbar" role="toolbar">
<div class="btn-group mr-3" role="group">
<button class="btn btn-outline-secondary send-request">Send request</button>
<div class="input-group loader" style="display:none;">
<span class="input-group-append">
<img src="assets/img/xrp-loader-96.png" height="24" width="24" />
</span><!--/.input-group-append-->
</div><!--/.input-group.loader-->
</div><!--/.btn-group-->
<div class="btn-group" role="group">
<button class="btn btn-outline-secondary connection" data-toggle="modal" data-target="#wstool-1-connection-settings">Online (Main Net)</button>
<button class="btn btn-outline-secondary permalink">Permanlink</button>
<button class="btn btn-outline-secondary curl">cURL</button>
</div><!--/.btn-group-->
</div><!--/.request-options.btn-toolbar-->
</div><!--/.api-input-area-->
<div class="api-response-area">
<h4>Responses</h4>
<div class="response-body io"></div>
</div><!--/.api-response-area-->
</section>
{% endblock %}
{% block endbody %}
<link rel='stylesheet' type='text/css' href='assets/css/api-tools.css'/>
<link rel='stylesheet' type='text/css' href='assets/vendor/codemirror.css'/>
<script type='text/javascript' src='assets/js/es5-shim.js'></script>
<script type='text/javascript' src='assets/vendor/codemirror.min.js'></script>
<script type='text/javascript' src='assets/vendor/cm-javascript.min.js'></script>
<script type='text/javascript' src='assets/js/ripple-0.11.0-min.js'></script>
<script type='text/javascript' src='assets/js/apitool-websocket.js'></script>
<!-- Modals for settings -->
<div class="modal fade" id="wstool-1-connection-settings" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Connection Settings</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="wstool-1-connection-s1" value="wss://s1.ripple.com/" checked>
<label class="form-check-label" for="wstool-1-connection-s1">
s1.ripple.com (Main Net Public Server)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="wstool-1-connection-s2" value="wss://s2.ripple.com/">
<label class="form-check-label" for="wstool-1-connection-s2">
s2.ripple.com (Full History Public Server)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="wstool-1-connection-testnet" value="wss://s.altnet.rippletest.net:51233/">
<label class="form-check-label" for="wstool-1-connection-testnet">
s.altnet.rippletest.net (Test Net Public Server)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="wstool-1-connection-localhost" value="ws://localhost:6006/">
<label class="form-check-label" for="wstool-1-connection-localhost">
localhost:6006 (Local <code>rippled</code> Server on port 6006) <br/>
<small>(Requires that you <a href="install-rippled.html">run <code>rippled</code></a> on this machine with default WebSocket settings)</small>
</label>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
</div><!--/.modal-footer-->
</div><!--/.modal-content-->
</div><!--/.modal-dialog-->
</div><!--/.modal-->
<link rel="stylesheet" type="text/css" href="assets/vendor/codemirror.css"/>
<script type="text/javascript" src="assets/vendor/codemirror-with-js.min.js"></script>
<script type="text/javascript" src="assets/js/apitool-websocket2.js"></script>
<script type="text/javascript" src="assets/js/apitool-methods-ws.js"></script>
{% endblock %}