class PaginateTable {
constructor ( url ) {
this . page = 0 ;
this . items = [ ] ;
this . url = url ;
this . headers = [ ] ;
this . search _query = "" ;
}
async contents ( ) {
if ( this . page < 0 ) this . page = 0 ;
let url = ` ${ this . url } ?page= ${ this . page } ` ;
if ( this . search _query !== "" ) {
this . page = 0 ;
url += ` &search= ${ this . search _query } `
}
const resp = await fetch ( url ) ;
console . assert ( resp . status == 200 , "failed to get it" ) ;
const items = await resp . json ( ) ;
if ( items ) {
this . items = items ;
this . headers = Object . keys ( this . items [ 0 ] ) ;
}
return this . items ;
}
}
class ForeverScroll {
constructor ( url ) {
this . page = 0 ;
this . items = [ ] ;
this . url = url ;
this . end = false ;
}
async init ( ) {
const resp = await fetch ( this . url ) ;
console . assert ( resp . status == 200 , "failed to get it" ) ;
const items = await resp . json ( ) ;
if ( items ) this . items = items ;
}
async load ( ) {
this . page += 1
let url = ` ${ this . url } ?page= ${ this . page } ` ;
const resp = await fetch ( url ) ;
console . assert ( resp . status == 200 , "failed to get it" ) ;
const items = await resp . json ( ) ;
if ( items ) {
this . items . push ( ... items ) ;
} else {
this . end = true ;
}
}
}
const GetJson = async ( url ) => {
const resp = await fetch ( url ) ;
console . assert ( resp . status == 200 , "failed to get it" ) ;
return await resp . json ( ) ;
}
const ConfirmDelete = async ( table , obj _id ) => {
if ( confirm ( "Are you sure?" ) ) {
await fetch ( "/api/admin/table/" + table + "/" + obj _id ,
{ method : "DELETE" } ) ;
window . location = "/admin/table/" + table ;
} else {
return false ;
}
}
const UrlId = ( ) => {
let url = new URL ( window . location . href ) ;
let parts = url . pathname . split ( "/" ) ;
if ( window . location . href . endsWith ( "/" ) ) {
return parts [ parts . length - 2 ] ;
} else {
return parts [ parts . length - 1 ] ;
}
}