From 838725a862f3780b6d5244546d71b038e2a3721e Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Sat, 12 Mar 2022 15:21:50 -0500 Subject: [PATCH] Implement custom accordion for mobile docs --- .../components/docs/api-docs.component.html | 77 ++++++++++--------- .../components/docs/api-docs.component.scss | 41 +++++++--- .../app/components/docs/api-docs.component.ts | 27 +++++++ 3 files changed, 99 insertions(+), 46 deletions(-) diff --git a/frontend/src/app/components/docs/api-docs.component.html b/frontend/src/app/components/docs/api-docs.component.html index bd7c6d809..88a48f975 100644 --- a/frontend/src/app/components/docs/api-docs.component.html +++ b/frontend/src/app/components/docs/api-docs.component.html @@ -12,50 +12,53 @@

Reference for the {{ network.val === '' ? 'Bitcoin' : network.val.charAt(0).toUpperCase() + network.val.slice(1) }} API service.

+

{{ item.title }}

{{ item.title }} {{ item.category }} -
-
Endpoint
- - {{ item.httpRequestMethod }} {{ baseNetworkUrl }}/api{{ item.urlString }} + -
-
Description
- -
-
- - -
-
-
- -
+ +
- - - - - - - - - - -
diff --git a/frontend/src/app/components/docs/api-docs.component.scss b/frontend/src/app/components/docs/api-docs.component.scss index 9aae0278b..de9374969 100644 --- a/frontend/src/app/components/docs/api-docs.component.scss +++ b/frontend/src/app/components/docs/api-docs.component.scss @@ -112,6 +112,10 @@ li.nav-item { float: right; } +h3 { + margin: 2rem 0 0 0; +} + .endpoint-container:before { display: block; content: " "; @@ -183,29 +187,48 @@ li.nav-item { .doc-content { width: 100%; + margin-top: -20px; } - + + .endpoint-container { + position: relative; + overflow: hidden; + height: auto; + transition: 0.5s height ease; + } + .endpoint-container .section-header { - margin: 40px 0 70px 0; + margin: 0; + font-size: 18px; + z-index: 1; } .endpoint-container .section-header span { - float: none; - position: absolute; - top: unset; - left: 0; - bottom: -50px; + display: none; } .endpoint-container:before { - height: 30px; - margin-top: -12px; + height: 5px; + margin-top: 10px; } + .endpoint-container .endpoint-content { + width: 100%; + position: absolute; + top: -10000px; + opacity: 0; + transition: 0.5s opacity ease; + } } @media (min-width: 992px) { + .hide-on-desktop { display: none; } + + h3 { + display: none; + } + } diff --git a/frontend/src/app/components/docs/api-docs.component.ts b/frontend/src/app/components/docs/api-docs.component.ts index c06f21ef5..e40148f14 100644 --- a/frontend/src/app/components/docs/api-docs.component.ts +++ b/frontend/src/app/components/docs/api-docs.component.ts @@ -22,6 +22,7 @@ export class ApiDocsComponent implements OnInit { desktopDocsNavPosition = "relative"; restDocs: any[]; wsDocs: any; + screenWidth: number; constructor( private stateService: StateService, @@ -32,6 +33,7 @@ export class ApiDocsComponent implements OnInit { ngAfterViewInit() { const that = this; setTimeout( () => { + this.openEndpointContainer( this.route.snapshot.fragment ); window.addEventListener('scroll', function() { that.desktopDocsNavPosition = ( window.pageYOffset > 182 ) ? "fixed" : "relative"; }); @@ -73,6 +75,31 @@ export class ApiDocsComponent implements OnInit { if( this.route.snapshot.fragment === targetId ) { document.getElementById( targetId ).scrollIntoView(); } + this.openEndpointContainer( targetId ); + } + + openEndpointContainer( targetId ) { + + if( window.innerWidth > 992 ) { + return; + } + + const endpointContainerEl = document.querySelector( "#" + targetId ); + const endpointContentEl = document.querySelector( "#" + targetId + " .endpoint-content" ); + const endPointContentElHeight = endpointContentEl.clientHeight; + + if( endpointContentEl.classList.contains( "open" ) ) { + endpointContainerEl.style.height = "auto"; + endpointContentEl.style.top = "-10000px"; + endpointContentEl.style.opacity = "0"; + endpointContentEl.classList.remove( "open" ); + } else { + endpointContainerEl.style.height = endPointContentElHeight + 90 + "px"; + endpointContentEl.style.top = "90px"; + endpointContentEl.style.opacity = "1"; + endpointContentEl.classList.add( "open" ); + } + } wrapUrl(network: string, code: any, websocket: boolean = false) {