import $ from "jquery"; import * as JSX from "./jsx"; import * as api from "./api"; import * as util from "./util"; import * as user from "./user"; import * as terminal from "./terminal"; import { addPopup, onPopupClosed, closePopup, Dropdown, DropdownItem, Spinner, OkPopup, OkCancelPopup } from "./components"; let old_font = ''; const fonts = [ 'Terminal', 'Arial', 'Monospace', 'Sans-serif', 'Serif', 'Times' ]; function showDeleteTokenPopup( id: number ) { const deleteToken = async() => { try { await user.deleteToken( id ); $( `#token-${ id }` ).remove(); } catch( e: any ) { addPopup( $( Error deleting token: { e.message } ) ); } } addPopup( $( Are you sure you want to erase this API token? ) ); } function showDeleteAllTokensPopup() { const deleteTokens = async() => { try { await user.deleteAllTokens(); closePopup(); } catch( e: any ) { addPopup( $( Error deleting all tokens: { e.message } ) ); } } addPopup( $( Are you sure you want to erase all API tokens? ) ); } function TokenEntry( props: any ) { const token = props.token; return
{ token.value }
} async function createNewToken( e: Event ) { const btn = $( e.target ); e.preventDefault(); e.stopPropagation(); const spinner = $( ); btn.append( spinner ); try { const token = await user.createToken(); const tokens = await user.getTokens(); // re-draw token popup closePopup(); addPopup( $( ) ); const copyTokenToClipboard = () => { navigator.clipboard.writeText( token ); } addPopup( $( Your api token has been created.
Make sure to save it as it will not be shown to you again.
{ token }
Press OK to copy the token to clipboard.
) ); } catch( e: any ) { addPopup( $( Error creating token: { e.message } ) ); } spinner.remove(); } function TokensPopup( props: any ) { return
{ props.tokens.length > 0 &&
{ props.tokens.map( ( tok: any ) => { return } ) }
} { props.tokens.length == 0 &&
No api tokens have been created.
}
} async function openTokensPopup() { let spinner = $( ); $( "#tokens-btn" ).append( spinner ); try { const tokens = await user.getTokens(); spinner.remove(); return addPopup( $( ) ); } catch( e: any ) { spinner.remove(); return addPopup( $( { e.message } ) ); } } function showDeleteNotePopup( note_id: string ) { const deleteNote = async() => { try { await user.deleteNote( note_id ); $( `#note-${ note_id }` ).remove(); } catch( e: any ) { addPopup( $( Error deleting note
{ e.message }
) ); } } addPopup( $( Are you sure you want to delete this note? ) ); } function showDeleteAllNotesPopup() { addPopup( $( { await user.deleteAllNotes(); closePopup(); } }> Are you sure you want to delete all notes? ) ); } function NotesPopup( props: any ) { return
{ props.notes.map( ( n: any ) => { return
{ n.content.split(' : ')[1] }
} ) }
} async function openNotesPopup() { let spinner = $( ); $( "#notes-btn" ).append( spinner ); try { const notes = await user.getNotes(); spinner.remove(); if( notes.length == 0 ) return addPopup( $( No notes found ) ); return addPopup( $( ) ); } catch( e: any ) { spinner.remove(); return addPopup( $( { e.message } ) ); } } function onSettingsClosed() { if( old_font.length > 0 ) { const style = document.documentElement.style; style.setProperty( "--site-font", old_font ); } } function onFontChanged( e: Event ) { const el = $( e.target ); const font = el.text(); if( !old_font.length ) old_font = user.settings.site_prefs.font; user.settings.site_prefs.font = font; const style = document.documentElement.style; style.setProperty( "--site-font", font ); $( "#settings-font" ).text( font ); closePopup(); } function onModelChanged( e: Event ) { const el = $( e.target ); const model = el.text(); if( user.settings.plan.plan == 'free' ) { for( let m of api.models ) { if( m.name == model && !m.free ) { const popup = $( JSX.navigateParams( "/upgrade", {} ) }> This model is only available for paid users. Please upgrade your plan to use it. ); return addPopup( popup ); } } } user.settings.site_prefs.model = model; $( "#settings-model" ).text( model ); closePopup(); } async function save() { const newprefs = { site_prefs: user.settings.site_prefs, prompt_data: user.settings.prompt_data, nickname: user.settings.nickname }; const newprompt = $( "#system-prompt" ).val(); newprefs.prompt_data.system = newprompt as string; const newname = $( "#uname-setting" ).val() as string; if( newname.length > 1 ) newprefs.nickname = newname; $( "#settings-spinner-wrapper" ).append( ); try { await user.savePrefs( newprefs ); } catch( e: any ) { $( "#settings-spinner-wrapper" ).empty(); $( "#settings-spinner-wrapper" ).append(
{ e.message }
); return; } old_font = ''; $( "#settings-spinner-wrapper" ).empty(); $( "#username" ).text( user.settings.nickname ); $( "#uname-setting" ).attr( "placeholder", user.settings.nickname ); terminal.updateCapabilitiesDisplay(); } function PlanDisplay() { const el = $(
); if( user.settings.plan.plan == 'free' ) { el.append( Plan: free  JSX.navigate( "/upgrade" ) }>[ upgrade ] ); } else { el.append( Plan: { user.settings.plan.plan } ); let days_left = ''; if( user.settings.plan.endTime == -1 ) days_left = 'inf'; else days_left = Math.floor( ( user.settings.plan.endTime - Date.now() ) / 60000 / 60 / 24 ).toString(); el.append( Time left: { days_left.toString() } days ); } return el[0]; } async function downloadAllData() { const spinner = $( ); $( "#settings-spinner-wrapper" ).append( spinner ); try { await user.downloadAllData(); } catch( e: any ) { addPopup( $( Error processing request: { e.message } ) ); } spinner.remove(); } async function invalidateAllSessions() { const spinner = $( ); $( "#settings-spinner-wrapper" ).append( spinner ); try { await user.invalidateAllSessions(); } catch( e: any ) { addPopup( $( Error invalidating sessions: { e.message } ) ); } spinner.remove(); } function SettingsPopup() { return

{ fonts.map( ( f ) => { f } ) }
{ api.models.map( ( m ) => { if( m.free || user.settings.plan.plan == 'paid' ) return { m.name }; return { m.name }; } ) }
; } export function openPopup() { if( !user.is_loggedin ) return; const el = $( ); addPopup( el ); onPopupClosed( onSettingsClosed ); }