diff --git a/backend/init.sql b/backend/init.sql index e1a9245c..8b28b90d 100644 --- a/backend/init.sql +++ b/backend/init.sql @@ -12,6 +12,7 @@ -- https://www.postgresql.org/docs/current/ddl-generated-columns.html CREATE EXTENSION pg_trgm; -- for trigram matching fuzzy search similarity() func +CREATE EXTENSION tsm_system_rows; -- for random sampling: TABLESAMPLE system_rows(n: int) -> n random rows /* * Species Table diff --git a/backend/src/api/protein.py b/backend/src/api/protein.py index 34b79206..311dc9ab 100644 --- a/backend/src/api/protein.py +++ b/backend/src/api/protein.py @@ -459,3 +459,35 @@ def get_tm_info(proteinA: str, proteinB: str): except Exception as e: log.error(e) raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/protein/random", response_model=ProteinEntry) +def get_random_protein(): + with Database() as db: + try: + query = """SELECT + proteins.name, + proteins.length, + proteins.mass, + proteins.description, + species.name as species_name + FROM proteins TABLESAMPLE SYSTEM_ROWS(1) + JOIN species ON species.id = proteins.species_id;""" + res = db.execute_return(query) + if res is not None: + name, length, mass, description, species_name = res[0] + return ProteinEntry( + name=name, + length=length, + mass=mass, + description=description, + species_name=species_name, + ) + else: + raise HTTPException( + status_code=501, detail="SQL query couldn't execute" + ) + + except Exception as e: + log.error(e) + raise HTTPException(status_code=500, detail=str(e)) diff --git a/frontend/public/group-2024.jpg b/frontend/public/group-2024.jpg new file mode 100644 index 00000000..980e3df5 Binary files /dev/null and b/frontend/public/group-2024.jpg differ diff --git a/frontend/src/Router.svelte b/frontend/src/Router.svelte index b5be3728..b5e7a737 100644 --- a/frontend/src/Router.svelte +++ b/frontend/src/Router.svelte @@ -15,6 +15,7 @@ import Articles from "./routes/Articles.svelte"; import EditArticle from "./routes/EditArticle.svelte"; import Upload from "./routes/Upload.svelte"; + import FullScreen from "./routes/FullScreen.svelte"; @@ -36,6 +37,9 @@ > + diff --git a/frontend/src/images/dummy.png b/frontend/src/images/dummy.png deleted file mode 100644 index dafb2040..00000000 Binary files a/frontend/src/images/dummy.png and /dev/null differ diff --git a/frontend/src/images/github.svg b/frontend/src/images/github.svg deleted file mode 100644 index bc5d249d..00000000 --- a/frontend/src/images/github.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/frontend/src/images/logo.svg b/frontend/src/images/logo.svg deleted file mode 100644 index 3a19cfa9..00000000 --- a/frontend/src/images/logo.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frontend/src/lib/BigNavLink.svelte b/frontend/src/lib/BigNavLink.svelte new file mode 100644 index 00000000..6bdb9b6b --- /dev/null +++ b/frontend/src/lib/BigNavLink.svelte @@ -0,0 +1,85 @@ + + + + + + + diff --git a/frontend/src/lib/EntryCard.svelte b/frontend/src/lib/EntryCard.svelte index ffefbe73..11156bb6 100644 --- a/frontend/src/lib/EntryCard.svelte +++ b/frontend/src/lib/EntryCard.svelte @@ -1,11 +1,12 @@

{title}

diff --git a/frontend/src/lib/Header.svelte b/frontend/src/lib/Header.svelte index bbda5bba..5641c743 100644 --- a/frontend/src/lib/Header.svelte +++ b/frontend/src/lib/Header.svelte @@ -1,17 +1,15 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/lib/Molstar.svelte b/frontend/src/lib/Molstar.svelte index 617de462..91df58d5 100644 --- a/frontend/src/lib/Molstar.svelte +++ b/frontend/src/lib/Molstar.svelte @@ -5,6 +5,7 @@ loseWebGLContext, colorResidues, type ChainColors, + type HideCanvasControls, } from "./venomeMolstarUtils"; import type { QueryParam } from "../../venome-molstar/lib/helpers"; @@ -18,9 +19,10 @@ export let zIndex = 999; export let spin = false; export let chainColors: ChainColors = {}; + export let hideCanvasControls: HideCanvasControls = []; + let m: PDBeMolstarPlugin; let subscribe: ReturnType; - let divEl: HTMLDivElement; async function render() { m = new PDBeMolstarPlugin(); @@ -41,12 +43,7 @@ reactive: true, sequencePanel: true, hideControls, - hideCanvasControls: [ - "animation", - "expand", - "controlInfo", - "selection", - ], + hideCanvasControls, }); if (spin) { m.visual.toggleSpin(); @@ -72,8 +69,12 @@ onDestroy(() => { if (divEl && divEl.querySelector("canvas")) { loseWebGLContext(divEl.querySelector("canvas")!); - m.plugin.dispose(); - subscribe.unsubscribe(); + if (m.plugin) { + m.plugin.dispose(); + } + if (subscribe) { + subscribe.unsubscribe(); + } } }); diff --git a/frontend/src/lib/SimilarProteins.svelte b/frontend/src/lib/SimilarProteins.svelte index 2be3d358..ee731c78 100644 --- a/frontend/src/lib/SimilarProteins.svelte +++ b/frontend/src/lib/SimilarProteins.svelte @@ -16,6 +16,7 @@ let maxEvalue: number; onMount(async () => { try { + console.log("mounted"); similarProteins = await Backend.searchVenomeSimilar(queryProteinName); maxEvalue = similarProteins diff --git a/frontend/src/lib/openapi/core/ApiError.ts b/frontend/src/lib/openapi/core/ApiError.ts index ec7b16af..d6b8fcc3 100644 --- a/frontend/src/lib/openapi/core/ApiError.ts +++ b/frontend/src/lib/openapi/core/ApiError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/core/ApiRequestOptions.ts b/frontend/src/lib/openapi/core/ApiRequestOptions.ts index 93143c3c..c19adcc9 100644 --- a/frontend/src/lib/openapi/core/ApiRequestOptions.ts +++ b/frontend/src/lib/openapi/core/ApiRequestOptions.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/core/ApiResult.ts b/frontend/src/lib/openapi/core/ApiResult.ts index ee1126e2..ad8fef2b 100644 --- a/frontend/src/lib/openapi/core/ApiResult.ts +++ b/frontend/src/lib/openapi/core/ApiResult.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/core/CancelablePromise.ts b/frontend/src/lib/openapi/core/CancelablePromise.ts index d70de929..eb02246c 100644 --- a/frontend/src/lib/openapi/core/CancelablePromise.ts +++ b/frontend/src/lib/openapi/core/CancelablePromise.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -85,9 +85,9 @@ export class CancelablePromise implements Promise { }); } - get [Symbol.toStringTag]() { - return "Cancellable Promise"; - } + get [Symbol.toStringTag]() { + return "Cancellable Promise"; + } public then( onFulfilled?: ((value: T) => TResult1 | PromiseLike) | null, diff --git a/frontend/src/lib/openapi/core/OpenAPI.ts b/frontend/src/lib/openapi/core/OpenAPI.ts index 0cfae5db..e357bb22 100644 --- a/frontend/src/lib/openapi/core/OpenAPI.ts +++ b/frontend/src/lib/openapi/core/OpenAPI.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/core/request.ts b/frontend/src/lib/openapi/core/request.ts index f83d7119..2201a0e6 100644 --- a/frontend/src/lib/openapi/core/request.ts +++ b/frontend/src/lib/openapi/core/request.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -164,7 +164,7 @@ export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptio headers['Authorization'] = `Basic ${credentials}`; } - if (options.body !== undefined) { + if (options.body) { if (options.mediaType) { headers['Content-Type'] = options.mediaType; } else if (isBlob(options.body)) { diff --git a/frontend/src/lib/openapi/index.ts b/frontend/src/lib/openapi/index.ts index c2a924f0..d06e7e0b 100644 --- a/frontend/src/lib/openapi/index.ts +++ b/frontend/src/lib/openapi/index.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/Article.ts b/frontend/src/lib/openapi/models/Article.ts index d1eacbf8..ca9b5df3 100644 --- a/frontend/src/lib/openapi/models/Article.ts +++ b/frontend/src/lib/openapi/models/Article.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ArticleImageComponent.ts b/frontend/src/lib/openapi/models/ArticleImageComponent.ts index 30af8ba2..a3c858de 100644 --- a/frontend/src/lib/openapi/models/ArticleImageComponent.ts +++ b/frontend/src/lib/openapi/models/ArticleImageComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ArticleProteinComponent.ts b/frontend/src/lib/openapi/models/ArticleProteinComponent.ts index 2a505001..3ed90e81 100644 --- a/frontend/src/lib/openapi/models/ArticleProteinComponent.ts +++ b/frontend/src/lib/openapi/models/ArticleProteinComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ArticleTextComponent.ts b/frontend/src/lib/openapi/models/ArticleTextComponent.ts index bc90d20d..564c6d2c 100644 --- a/frontend/src/lib/openapi/models/ArticleTextComponent.ts +++ b/frontend/src/lib/openapi/models/ArticleTextComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ArticleUpload.ts b/frontend/src/lib/openapi/models/ArticleUpload.ts index d731eab9..04b4a5ac 100644 --- a/frontend/src/lib/openapi/models/ArticleUpload.ts +++ b/frontend/src/lib/openapi/models/ArticleUpload.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/EditArticleImageComponent.ts b/frontend/src/lib/openapi/models/EditArticleImageComponent.ts index b4554eb6..a58254ef 100644 --- a/frontend/src/lib/openapi/models/EditArticleImageComponent.ts +++ b/frontend/src/lib/openapi/models/EditArticleImageComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/EditArticleMetadata.ts b/frontend/src/lib/openapi/models/EditArticleMetadata.ts index 6cb6815b..c130c50e 100644 --- a/frontend/src/lib/openapi/models/EditArticleMetadata.ts +++ b/frontend/src/lib/openapi/models/EditArticleMetadata.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/EditArticleProteinComponent.ts b/frontend/src/lib/openapi/models/EditArticleProteinComponent.ts index c09275c4..05643c3f 100644 --- a/frontend/src/lib/openapi/models/EditArticleProteinComponent.ts +++ b/frontend/src/lib/openapi/models/EditArticleProteinComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/EditArticleTextComponent.ts b/frontend/src/lib/openapi/models/EditArticleTextComponent.ts index feeb8a67..6d66e58d 100644 --- a/frontend/src/lib/openapi/models/EditArticleTextComponent.ts +++ b/frontend/src/lib/openapi/models/EditArticleTextComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/EditBody.ts b/frontend/src/lib/openapi/models/EditBody.ts index 68f8ef07..d7c56b56 100644 --- a/frontend/src/lib/openapi/models/EditBody.ts +++ b/frontend/src/lib/openapi/models/EditBody.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/HTTPValidationError.ts b/frontend/src/lib/openapi/models/HTTPValidationError.ts index f9b1a79e..892e4257 100644 --- a/frontend/src/lib/openapi/models/HTTPValidationError.ts +++ b/frontend/src/lib/openapi/models/HTTPValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/InsertBlankComponentEnd.ts b/frontend/src/lib/openapi/models/InsertBlankComponentEnd.ts index 5e386be3..d3355521 100644 --- a/frontend/src/lib/openapi/models/InsertBlankComponentEnd.ts +++ b/frontend/src/lib/openapi/models/InsertBlankComponentEnd.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/InsertComponent.ts b/frontend/src/lib/openapi/models/InsertComponent.ts index 29da1370..b9d3801b 100644 --- a/frontend/src/lib/openapi/models/InsertComponent.ts +++ b/frontend/src/lib/openapi/models/InsertComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/LoginBody.ts b/frontend/src/lib/openapi/models/LoginBody.ts index ff5c4ff6..5dc8041c 100644 --- a/frontend/src/lib/openapi/models/LoginBody.ts +++ b/frontend/src/lib/openapi/models/LoginBody.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/LoginResponse.ts b/frontend/src/lib/openapi/models/LoginResponse.ts index 1b25684a..2f1faac8 100644 --- a/frontend/src/lib/openapi/models/LoginResponse.ts +++ b/frontend/src/lib/openapi/models/LoginResponse.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/MoveComponent.ts b/frontend/src/lib/openapi/models/MoveComponent.ts index 3f1737ef..f85ead11 100644 --- a/frontend/src/lib/openapi/models/MoveComponent.ts +++ b/frontend/src/lib/openapi/models/MoveComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ProteinEditSuccess.ts b/frontend/src/lib/openapi/models/ProteinEditSuccess.ts index da3d0969..e1a4aee7 100644 --- a/frontend/src/lib/openapi/models/ProteinEditSuccess.ts +++ b/frontend/src/lib/openapi/models/ProteinEditSuccess.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ProteinEntry.ts b/frontend/src/lib/openapi/models/ProteinEntry.ts index 6c12f6df..02779401 100644 --- a/frontend/src/lib/openapi/models/ProteinEntry.ts +++ b/frontend/src/lib/openapi/models/ProteinEntry.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/RangeFilter.ts b/frontend/src/lib/openapi/models/RangeFilter.ts index f7cab08b..13a16880 100644 --- a/frontend/src/lib/openapi/models/RangeFilter.ts +++ b/frontend/src/lib/openapi/models/RangeFilter.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/SearchProteinsBody.ts b/frontend/src/lib/openapi/models/SearchProteinsBody.ts index eab92f82..f9eb534f 100644 --- a/frontend/src/lib/openapi/models/SearchProteinsBody.ts +++ b/frontend/src/lib/openapi/models/SearchProteinsBody.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/SearchProteinsResults.ts b/frontend/src/lib/openapi/models/SearchProteinsResults.ts index 3ab92cf9..76e1e22c 100644 --- a/frontend/src/lib/openapi/models/SearchProteinsResults.ts +++ b/frontend/src/lib/openapi/models/SearchProteinsResults.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/SimilarProtein.ts b/frontend/src/lib/openapi/models/SimilarProtein.ts index 340f9abc..16113600 100644 --- a/frontend/src/lib/openapi/models/SimilarProtein.ts +++ b/frontend/src/lib/openapi/models/SimilarProtein.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/TMAlignInfo.ts b/frontend/src/lib/openapi/models/TMAlignInfo.ts index 916c8c98..0e4b7207 100644 --- a/frontend/src/lib/openapi/models/TMAlignInfo.ts +++ b/frontend/src/lib/openapi/models/TMAlignInfo.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadArticleImageComponent.ts b/frontend/src/lib/openapi/models/UploadArticleImageComponent.ts index 2d48051d..dc7ed1f6 100644 --- a/frontend/src/lib/openapi/models/UploadArticleImageComponent.ts +++ b/frontend/src/lib/openapi/models/UploadArticleImageComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadArticleProteinComponent.ts b/frontend/src/lib/openapi/models/UploadArticleProteinComponent.ts index 6f22339b..a368e38c 100644 --- a/frontend/src/lib/openapi/models/UploadArticleProteinComponent.ts +++ b/frontend/src/lib/openapi/models/UploadArticleProteinComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadArticleTextComponent.ts b/frontend/src/lib/openapi/models/UploadArticleTextComponent.ts index 653db8c5..dc32ede7 100644 --- a/frontend/src/lib/openapi/models/UploadArticleTextComponent.ts +++ b/frontend/src/lib/openapi/models/UploadArticleTextComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadBody.ts b/frontend/src/lib/openapi/models/UploadBody.ts index 6b0884f3..9d05cbcd 100644 --- a/frontend/src/lib/openapi/models/UploadBody.ts +++ b/frontend/src/lib/openapi/models/UploadBody.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadError.ts b/frontend/src/lib/openapi/models/UploadError.ts index 9a91db09..5240304b 100644 --- a/frontend/src/lib/openapi/models/UploadError.ts +++ b/frontend/src/lib/openapi/models/UploadError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadPNGBody.ts b/frontend/src/lib/openapi/models/UploadPNGBody.ts index 44dcfa5c..c9e295c5 100644 --- a/frontend/src/lib/openapi/models/UploadPNGBody.ts +++ b/frontend/src/lib/openapi/models/UploadPNGBody.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ValidationError.ts b/frontend/src/lib/openapi/models/ValidationError.ts index aaf1c921..f2ff49a2 100644 --- a/frontend/src/lib/openapi/models/ValidationError.ts +++ b/frontend/src/lib/openapi/models/ValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/services/DefaultService.ts b/frontend/src/lib/openapi/services/DefaultService.ts index 21ffde6b..77177e41 100644 --- a/frontend/src/lib/openapi/services/DefaultService.ts +++ b/frontend/src/lib/openapi/services/DefaultService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do not edit */ +/* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -353,6 +353,17 @@ export class DefaultService { }, }); } + /** + * Get Random Protein + * @returns ProteinEntry Successful Response + * @throws ApiError + */ + public static getRandomProtein(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/protein/random', + }); + } /** * Get Article * get_article diff --git a/frontend/src/lib/venomeMolstarUtils.ts b/frontend/src/lib/venomeMolstarUtils.ts index e9c2ad58..546f5ef0 100644 --- a/frontend/src/lib/venomeMolstarUtils.ts +++ b/frontend/src/lib/venomeMolstarUtils.ts @@ -8,6 +8,12 @@ export type ResidueColor = { r: number; g: number; b: number }; export type ChainId = string; export type ChainColors = { [chainId: ChainId]: ResidueColor[] }; export type ChainpLDDT = { [chainId: ChainId]: number[] }; +export type HideCanvasControls = Pick< + InitParams, + "hideCanvasControls" +>["hideCanvasControls"]; + +export const colorScheme = d3.schemeDark2; export async function screenshotMolstar(initParams: Partial) { const { div, molstar } = await renderHeadless(initParams); @@ -135,8 +141,17 @@ export function pLDDTToAlphaFoldResidueColors(pLDDT: number[]): ResidueColor[] { export function pLDDTToResidueColors(pLDDT: number[]): ResidueColor[] { const interpolate = d3.interpolateSpectral; const colors = pLDDT.map((d) => interpolate(d / 100)); - return colors.map((c) => { - const rgb = d3.color(c)!.rgb()!; - return { r: rgb.r, g: rgb.g, b: rgb.b }; - }); + return colors.map(jsColorToResidueColor); +} + +export function jsColorToResidueColor(color: string): ResidueColor { + const rgb = d3.color(color)!.rgb()!; + return { r: rgb.r, g: rgb.g, b: rgb.b }; +} + +export function colorEntireChain( + color: ResidueColor, + numResiduesInChain: number +) { + return new Array(numResiduesInChain).fill(color); } diff --git a/frontend/src/routes/Align.svelte b/frontend/src/routes/Align.svelte index 0022717c..102f37a7 100644 --- a/frontend/src/routes/Align.svelte +++ b/frontend/src/routes/Align.svelte @@ -1,30 +1,35 @@  + + + Venome Protein {entry ? entry.name : ""} + + +
+
+ {#if entry} +
+
+

Full Screen

+

+ Showing the protein in a larger view. Click on the name + in green to go back. +

+
+ + +
+ +
+
+
+ +
+ {:else if !error} + +

+ {:else if error} + +

Error

+ {/if} +
+
+ + diff --git a/frontend/src/routes/Home.svelte b/frontend/src/routes/Home.svelte index e4240a3e..0f933553 100644 --- a/frontend/src/routes/Home.svelte +++ b/frontend/src/routes/Home.svelte @@ -1,124 +1,172 @@ Venome Home -
-

Welcome to the Unknown Venome

-
-
-
-

Get to know the Venome Lab!

-

The Venome Lab is based out of OSU and studies three species of parasitic wasps and their proteins

-

There are so many wasps in there

- - A picture of Nate Mortimer in lab gear doing some scientific stuff. +
+
+
The Unknown
+
Venome
+
+ A platform that stores and visualizes the + Venom Biochemistry Lab + ’s Proteins at Oregon State University +
-
-

Looking for something specific? Start searching now!

- -
- - - -
+
- -
-

lorem ipsum dolor sit something about the proteins

+
+
+
+ {#each quickLinks as q} + + {/each}
-
-

New? Check out our tutorials!

-

Whether you're a protein expert looking to analyze some proteins or a new student with a budding interest in biochemistry, this is the place for you.

-

See all of our proteins, listed here!

-

Filter down the Venome lab's catalog of proteins and see all the features within.

- -
-

Get started with these helpful tutorials!

-
    -
  • using the site
  • -
  • biochem basics
  • -
+ +
+
+
+ Sneak Peak ↓ + Here's a couple random proteins from our database +
+
+ {#each randomProteins.filter((d) => d !== undefined) as randomProtein, i} + {@const hexColor = homeColorScheme[i]} +
+ +
+ +
+
+ {/each} +
-
+
+ +
+
+
+ Founding Venome team picture in 2024. +
+
+ This website started in Fall 2023 as a Senior Computer + Science Capstone project in collaboration with the Venom Biochemistry and Molecular Biology Laboratory at Oregon State University. +
+
+ Why the name? Just as a collection of genes is a genome, + a collection of venom proteins is a venome. +
+
+ Pictured here, the founding group was Donald Bertucci, Ansen Garvin, Cora Bailey, Amanda Sinha, + Michael Youkhateh, and + Nathan Mortimer. +
+
+
+
+
+
\ No newline at end of file + diff --git a/frontend/src/routes/Protein.svelte b/frontend/src/routes/Protein.svelte index ad6c044c..c4e8d061 100644 --- a/frontend/src/routes/Protein.svelte +++ b/frontend/src/routes/Protein.svelte @@ -2,7 +2,7 @@ import { onMount } from "svelte"; import { Backend, BACKEND_URL, type ProteinEntry } from "../lib/backend"; import Molstar from "../lib/Molstar.svelte"; - import { Button, Dropdown, DropdownItem } from "flowbite-svelte"; + import { Button } from "flowbite-svelte"; import Markdown from "../lib/Markdown.svelte"; import { numberWithCommas, @@ -15,6 +15,9 @@ ChevronDownSolid, EditOutline, UndoOutline, + DownloadOutline, + DownloadSolid, + ExpandOutline, } from "flowbite-svelte-icons"; import EntryCard from "../lib/EntryCard.svelte"; import SimilarProteins from "../lib/SimilarProteins.svelte"; @@ -28,12 +31,11 @@ } from "../lib/venomeMolstarUtils"; import type { ChainColors } from "../lib/venomeMolstarUtils"; - const fileDownloadDropdown = ["pdb", "fasta"]; - export let urlId: string; let entry: ProteinEntry | null = null; let error = false; let chainColors: ChainColors = {}; + let searchOpen = false; // when this component mounts, request protein wikipedia entry from backend onMount(async () => { @@ -86,17 +88,19 @@
- + 3D Similar Proteins (click to compute with Foldseek) - + {#if searchOpen} + + {/if}
@@ -117,27 +121,8 @@ {/if}
-
-
- - - {#each fileDownloadDropdown as fileType} - {fileType.toUpperCase()} - {/each} - -
-
- -
- +
+
+
+ + +
{#if Object.keys(chainColors).length > 0}