import $ from "jquery";
import * as JSX from "./jsx";
import { Page, Spinner } from "./components";
import { FtpEntry, ftpGetEntries } from "./util";
let entries: FtpEntry[] = [];
let reqErr = 0;
let hljs = null;
let hljs_imported = 0;
async function importHlJs() {
if( hljs ) return;
if( hljs_imported ) return;
hljs_imported = 1;
hljs = ( await import( 'highlight.js' ) ).default;
const elements = $( "code" );
elements.each( ( _, e ) => {
hljs.highlightElement( e );
} );
}
function urlForHref( href: string, isdir: boolean ) {
const url = new URL( window.location.href );
let path = url.pathname;
if( isdir ) {
if( path.endsWith( '/' ) ) {
return path + href;
}
return path + "/" + href;
}
const file = href.slice( 0, href.lastIndexOf( "." ) );
path = path.slice( path.indexOf( '/blog' ) + 5 );
if( path.endsWith( '/' ) )
return "/blog" + path + file;
else
return "/blog" + path + "/" + file;
}
function BlogEntry( props: any ) {
const entry = props.entry as FtpEntry;
return
|
{ entry.name == "../" &&
JSX.goUpDirectory() } class="package-entry-link">
../
}
{ entry.name != "../" && !entry.isdir &&
JSX.navigate( urlForHref( entry.name, entry.isdir ) ) } class="package-entry-link">
{entry.name.replace( /_/g, " " )}
}
{ entry.name != "../" && entry.isdir &&
JSX.navigate( urlForHref( entry.name, entry.isdir ) ) } class="package-entry-link">
{entry.name}
}
|
{entry.date} {entry.time} |
}
function getEndpoint() {
const url = new URL( window.location.href );
let href = url.pathname.split( "/blog" )[1];
if( href[0] == '/' ) {
href = href.slice( 1 );
}
return "posts/" + href;
}
function populateEntries() {
if( reqErr ) {
return JSX.navigate( "/404" );
}
if( entries.length <= 0 )
return setTimeout( populateEntries, 100 );
const target = $( "#package-entries" ).find( "table" );
$( "#package-entries" ).find( ".spinner" ).remove();
for( const entry of entries ) {
target.append( );
}
}
async function populatePost() {
try {
const res = await fetch( "https://networkheaven.net/" + getEndpoint() + ".html" );
const text = await res.text();
if( text.startsWith( "" ) || text.startsWith( "" );
const titlee = text.indexOf( "" );
if( titles != -1 && titlee != -1 ) {
let title = text.substring( titles + 7, titlee - 1 );
title = title.replace( /\n/g, "" );
$( ".page-title h3" )[0].innerText = title;
$( "title" ).html( title );
}
importHlJs();
$( "#package-entries" ).find( ".spinner" ).remove();
$( "#package-entries" ).css( "display", "none" );
$( "#blog-entry" ).html( text );
$( "#blog-entry" ).css( "display", "flex" );
$( "#back-btn" ).css( "display", "block" );
} catch( e ) {
return populateEntries();
}
}
export default function Blog() {
entries = [];
reqErr = 0;
setTimeout( async () => {
try {
entries = await ftpGetEntries( getEndpoint(), getEndpoint() != 'posts/' );
} catch( e ) {
reqErr = 1;
}
} );
setTimeout( () => {
if( getEndpoint() == 'posts/' )
return populateEntries();
populatePost();
} );
return
BLOG
}