New API docummentation. (#544)
* Install hljs package. * Add highlight.js stylesheet and js to index.html. * Add new instructions for API documentation. * Add network value to code-template component. * Add curl examples. * Fix tab order of bisq api page. * Add esmodules instalation instructions. Add external links to repositories. * Add self-hosted hljs styles. * Add response code examples. Add dynamic networks to curl examples. Remove reponse code box if not needed. * Self hosted highlight.min.js. * Bumping "ws" dependency to fix vulnerability. * npm audit fix * npm audit fix * Remove Hightlight.js dependency. Add new style to code-template-component. * Remove hljs css. * Change NgbModule and NgbAccordionModule to shared * Fix NgbAccordionModule import.
This commit is contained in:
parent
71bfcea8a6
commit
353b0e8729
12
frontend/package-lock.json
generated
12
frontend/package-lock.json
generated
@ -5040,7 +5040,6 @@
|
|||||||
"integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==",
|
"integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"tslib": "^1.10.0"
|
"tslib": "^1.10.0"
|
||||||
}
|
}
|
||||||
@ -5050,7 +5049,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz",
|
||||||
"integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==",
|
"integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"peer": true,
|
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"rxjs": "^6.5.3",
|
"rxjs": "^6.5.3",
|
||||||
"tslib": "^1.10.0",
|
"tslib": "^1.10.0",
|
||||||
@ -24159,6 +24157,8 @@
|
|||||||
"integrity": "sha512-cOyGQgMdhnRYtW2xrJUNrNYDjEgwQ+BrE2y93Bwz3h4DJ6vJRLfupemU5N3pbYsUlBHJf0u1j1UGk+NLW4d97g==",
|
"integrity": "sha512-cOyGQgMdhnRYtW2xrJUNrNYDjEgwQ+BrE2y93Bwz3h4DJ6vJRLfupemU5N3pbYsUlBHJf0u1j1UGk+NLW4d97g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
|
"@angular/compiler": "9.0.0",
|
||||||
|
"@angular/core": "9.0.0",
|
||||||
"app-root-path": "^3.0.0",
|
"app-root-path": "^3.0.0",
|
||||||
"aria-query": "^3.0.0",
|
"aria-query": "^3.0.0",
|
||||||
"axobject-query": "2.0.2",
|
"axobject-query": "2.0.2",
|
||||||
@ -24174,17 +24174,17 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/compiler": {
|
"@angular/compiler": {
|
||||||
"version": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz",
|
"version": "9.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz",
|
||||||
"integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==",
|
"integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"peer": true,
|
|
||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
"@angular/core": {
|
"@angular/core": {
|
||||||
"version": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz",
|
"version": "9.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz",
|
||||||
"integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==",
|
"integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"peer": true,
|
|
||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
"source-map": {
|
"source-map": {
|
||||||
|
@ -47,6 +47,7 @@ import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontaweso
|
|||||||
import { faAngleDown, faAngleUp, faBolt, faChartArea, faCogs, faCubes, faDatabase, faExchangeAlt, faInfoCircle,
|
import { faAngleDown, faAngleUp, faBolt, faChartArea, faCogs, faCubes, faDatabase, faExchangeAlt, faInfoCircle,
|
||||||
faLink, faList, faSearch, faTachometerAlt, faThList, faTint, faTv, faAngleDoubleDown, faAngleDoubleUp, faChevronDown, faFileAlt } from '@fortawesome/free-solid-svg-icons';
|
faLink, faList, faSearch, faTachometerAlt, faThList, faTint, faTv, faAngleDoubleDown, faAngleDoubleUp, faChevronDown, faFileAlt } from '@fortawesome/free-solid-svg-icons';
|
||||||
import { ApiDocsComponent } from './components/api-docs/api-docs.component';
|
import { ApiDocsComponent } from './components/api-docs/api-docs.component';
|
||||||
|
import { CodeTemplateComponent } from './components/api-docs/code-template.component';
|
||||||
import { TermsOfServiceComponent } from './components/terms-of-service/terms-of-service.component';
|
import { TermsOfServiceComponent } from './components/terms-of-service/terms-of-service.component';
|
||||||
import { StorageService } from './services/storage.service';
|
import { StorageService } from './services/storage.service';
|
||||||
import { HttpCacheInterceptor } from './services/http-cache.interceptor';
|
import { HttpCacheInterceptor } from './services/http-cache.interceptor';
|
||||||
@ -85,6 +86,7 @@ import { SponsorComponent } from './components/sponsor/sponsor.component';
|
|||||||
FeesBoxComponent,
|
FeesBoxComponent,
|
||||||
DashboardComponent,
|
DashboardComponent,
|
||||||
ApiDocsComponent,
|
ApiDocsComponent,
|
||||||
|
CodeTemplateComponent,
|
||||||
TermsOfServiceComponent,
|
TermsOfServiceComponent,
|
||||||
SponsorComponent,
|
SponsorComponent,
|
||||||
],
|
],
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -14,3 +14,59 @@ tr {
|
|||||||
.nowrap {
|
.nowrap {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
li.nav-item {
|
||||||
|
width: 100%;
|
||||||
|
@media (min-width: 676px){
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs .nav-link.active {
|
||||||
|
border-bottom: 1px solid #fff;
|
||||||
|
@media (min-width: 676px){
|
||||||
|
border-bottom: 1px solid #11131f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-tab {
|
||||||
|
width: auto;
|
||||||
|
margin: 20px auto 10px;
|
||||||
|
li.nav-item {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.code {
|
||||||
|
.tab-content {
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
.nav-tabs .nav-link.active {
|
||||||
|
border-bottom: 1px solid #11131f;
|
||||||
|
}
|
||||||
|
.subtitle {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.description {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
}
|
||||||
|
.subtitle {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.divider {
|
||||||
|
width: 100%;
|
||||||
|
margin: 30px auto;
|
||||||
|
height: 1px;
|
||||||
|
background: #333;
|
||||||
|
}
|
||||||
|
.websocket {
|
||||||
|
padding: 15px;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,39 @@
|
|||||||
|
<div class="code">
|
||||||
|
<ul ngbNav #navCodeTemplate="ngbNav" class="nav-tabs code-tab">
|
||||||
|
<li ngbNavItem>
|
||||||
|
<a ngbNavLink>ES Module</a>
|
||||||
|
<ng-template ngbNavContent>
|
||||||
|
<div class="subtitle">Install Package <app-clipboard [text]="esModuleInstall"></app-clipboard></div>
|
||||||
|
<div class="links">
|
||||||
|
<a href="https://github.com/mempool/mempool.js">github repository</a>
|
||||||
|
<a href="https://www.npmjs.org/package/@mempool/mempool.js">npm package</a>
|
||||||
|
</div>
|
||||||
|
<pre><code [innerText]="esModuleInstall"></code></pre>
|
||||||
|
<div class="subtitle">Code Example <app-clipboard [text]="wrapESmodule(code.codeSample.esModule)"></app-clipboard></div>
|
||||||
|
<pre><code [innerText]="wrapESmodule(code.codeSample.esModule)"></code></pre>
|
||||||
|
</ng-template>
|
||||||
|
</li>
|
||||||
|
<li ngbNavItem>
|
||||||
|
<a ngbNavLink>Common JS</a>
|
||||||
|
<ng-template ngbNavContent>
|
||||||
|
<div class="subtitle">Code Example <app-clipboard [text]="wrapCommonJS(code.codeSample.commonJS)"></app-clipboard></div>
|
||||||
|
<div class="links">
|
||||||
|
<a href="https://github.com/mempool/mempool.js">github repository</a>
|
||||||
|
</div>
|
||||||
|
<pre><code [innerText]="wrapCommonJS(code.codeSample.commonJS)"></code></pre>
|
||||||
|
</ng-template>
|
||||||
|
</li>
|
||||||
|
<li ngbNavItem *ngIf="code.codeSample.curl">
|
||||||
|
<a ngbNavLink>CURL</a>
|
||||||
|
<ng-template ngbNavContent>
|
||||||
|
<div class="subtitle">Code Example <app-clipboard [text]="wrapCurl(code.codeSample.curl)"></app-clipboard></div>
|
||||||
|
<pre><code [innerText]="wrapCurl(code.codeSample.curl)"></code></pre>
|
||||||
|
</ng-template>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div [ngbNavOutlet]="navCodeTemplate"></div>
|
||||||
|
<div *ngIf="code.responseSample" class="response">
|
||||||
|
<div class="subtitle">Response <app-clipboard [text]="code.responseSample"></app-clipboard></div>
|
||||||
|
<pre><code [innerText]="code.responseSample"></code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,91 @@
|
|||||||
|
.text-small {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background-color: #1d1f31;
|
||||||
|
font-family: Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr {
|
||||||
|
white-space: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nowrap {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.nav-item {
|
||||||
|
width: 100%;
|
||||||
|
@media (min-width: 676px){
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs .nav-link.active {
|
||||||
|
border-bottom: 1px solid #fff;
|
||||||
|
@media (min-width: 676px){
|
||||||
|
border-bottom: 1px solid #11131f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-tab {
|
||||||
|
width: auto;
|
||||||
|
margin: 20px auto 10px;
|
||||||
|
li.nav-item {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.code {
|
||||||
|
.tab-content {
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
.nav-tabs .nav-link.active {
|
||||||
|
border-bottom: 1px solid #11131f;
|
||||||
|
}
|
||||||
|
.subtitle {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.description {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
}
|
||||||
|
.subtitle {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.divider {
|
||||||
|
width: 100%;
|
||||||
|
margin: 30px auto;
|
||||||
|
height: 1px;
|
||||||
|
background: #333;
|
||||||
|
}
|
||||||
|
.websocket {
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.links {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
a {
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 0px 10px 0px 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
display: block;
|
||||||
|
font-size: 87.5%;
|
||||||
|
color: #f18920;
|
||||||
|
background-color: #1d1f31;
|
||||||
|
padding: 30px;
|
||||||
|
code{
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,84 @@
|
|||||||
|
import { Component, Input } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-code-template',
|
||||||
|
templateUrl: './code-template.component.html',
|
||||||
|
styleUrls: ['./code-template.component.scss']
|
||||||
|
})
|
||||||
|
export class CodeTemplateComponent {
|
||||||
|
@Input() network: string;
|
||||||
|
@Input() code: {
|
||||||
|
codeSample: {
|
||||||
|
esModule: string;
|
||||||
|
commonJS: string;
|
||||||
|
curl: string;
|
||||||
|
},
|
||||||
|
responseSample: string;
|
||||||
|
};
|
||||||
|
hostname = document.location.hostname;
|
||||||
|
esModuleInstall = `# npm
|
||||||
|
npm install @mempool/mempool.js --save
|
||||||
|
|
||||||
|
# yarn
|
||||||
|
yarn add @mempool/mempool.js`;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
) { }
|
||||||
|
|
||||||
|
normalizeCodeHostname(code: string) {
|
||||||
|
let codeText: string;
|
||||||
|
if (this.network === 'bisq' || this.network === 'liquid'){
|
||||||
|
codeText = code.replace('%{1}', this.network);
|
||||||
|
}else{
|
||||||
|
codeText = code.replace('%{1}', 'bitcoin');
|
||||||
|
}
|
||||||
|
return codeText;
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapESmodule(code: string) {
|
||||||
|
let codeText = this.normalizeCodeHostname(code);
|
||||||
|
|
||||||
|
if (this.network && this.network !== 'mainnet') {
|
||||||
|
codeText = codeText.replace('mempoolJS();', `mempoolJS({
|
||||||
|
hostname: '${this.hostname}/${this.network}'
|
||||||
|
});` );
|
||||||
|
}
|
||||||
|
|
||||||
|
return `import mempoolJS from "@mempool/mempool.js";
|
||||||
|
|
||||||
|
const init = async () => {
|
||||||
|
${codeText}
|
||||||
|
};
|
||||||
|
init();`;
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapCommonJS(code: string) {
|
||||||
|
let codeText = this.normalizeCodeHostname(code);
|
||||||
|
|
||||||
|
if (this.network && this.network !== 'mainnet') {
|
||||||
|
codeText = codeText.replace('mempoolJS();', `mempoolJS({
|
||||||
|
hostname: '${this.hostname}/${this.network}'
|
||||||
|
});` );
|
||||||
|
}
|
||||||
|
return `<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script src="https://mempool.space/mempool.js"></script>
|
||||||
|
<script>
|
||||||
|
const init = async () => {
|
||||||
|
${codeText}
|
||||||
|
};
|
||||||
|
init();
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body></body>
|
||||||
|
</html>`;
|
||||||
|
}
|
||||||
|
wrapCurl(code: string) {
|
||||||
|
if (this.network && this.network !== 'mainnet') {
|
||||||
|
return code.replace('mempool.space/', `mempool.space/${this.network}/`);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -14,7 +14,7 @@ import { TimeSinceComponent } from '../components/time-since/time-since.componen
|
|||||||
import { ClipboardComponent } from '../components/clipboard/clipboard.component';
|
import { ClipboardComponent } from '../components/clipboard/clipboard.component';
|
||||||
import { QrcodeComponent } from '../components/qrcode/qrcode.component';
|
import { QrcodeComponent } from '../components/qrcode/qrcode.component';
|
||||||
import { FiatComponent } from '../fiat/fiat.component';
|
import { FiatComponent } from '../fiat/fiat.component';
|
||||||
import { NgbNavModule, NgbTooltipModule, NgbButtonsModule, NgbPaginationModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbNavModule, NgbTooltipModule, NgbButtonsModule, NgbPaginationModule, NgbDropdownModule, NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { TxFeaturesComponent } from '../components/tx-features/tx-features.component';
|
import { TxFeaturesComponent } from '../components/tx-features/tx-features.component';
|
||||||
import { TxFeeRatingComponent } from '../components/tx-fee-rating/tx-fee-rating.component';
|
import { TxFeeRatingComponent } from '../components/tx-fee-rating/tx-fee-rating.component';
|
||||||
import { ReactiveFormsModule } from '@angular/forms';
|
import { ReactiveFormsModule } from '@angular/forms';
|
||||||
@ -50,11 +50,13 @@ import { ColoredPriceDirective } from './directives/colored-price.directive';
|
|||||||
NgbButtonsModule,
|
NgbButtonsModule,
|
||||||
NgbPaginationModule,
|
NgbPaginationModule,
|
||||||
NgbDropdownModule,
|
NgbDropdownModule,
|
||||||
|
NgbAccordionModule,
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
VbytesPipe,
|
VbytesPipe,
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
|
NgbAccordionModule,
|
||||||
NgbNavModule,
|
NgbNavModule,
|
||||||
CommonModule,
|
CommonModule,
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
|
@ -54,7 +54,7 @@ html, body {
|
|||||||
|
|
||||||
body {
|
body {
|
||||||
background-color: #11131f;
|
background-color: #11131f;
|
||||||
min-width: 320px;
|
min-width: 375px;
|
||||||
padding-bottom: 60px;
|
padding-bottom: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -631,3 +631,41 @@ th {
|
|||||||
max-width: 480px;
|
max-width: 480px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tab-pane {
|
||||||
|
.card {
|
||||||
|
background-color: transparent;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
button {
|
||||||
|
text-align: left;
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
padding: 1rem 2rem;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
&:focus, &:hover, &:active {
|
||||||
|
text-decoration: none;
|
||||||
|
outline: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapsed{
|
||||||
|
background-color: #2d3348;
|
||||||
|
color: #1bd8f4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
button {
|
||||||
|
padding: 0px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user