From 5cb93ede8b97c1ed01813e34dd998a7c0a2d5495 Mon Sep 17 00:00:00 2001 From: rly Date: Fri, 23 Aug 2024 00:13:48 -0700 Subject: [PATCH 01/13] Update developer guide --- docs/developer_guide.rst | 42 +++++++++++++++------------------------- docs/format_support.rst | 2 +- 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/docs/developer_guide.rst b/docs/developer_guide.rst index 6b772b417..65e12fcfa 100644 --- a/docs/developer_guide.rst +++ b/docs/developer_guide.rst @@ -115,13 +115,13 @@ Repo Structure - `src` - `electron` - `main` - - `src` - Contains all the source code for the backend - - `assets` - Contains all the backend-facing assets (e.g. images, css, etc.) + - `application-menu.js` - Configures the application window + - `main.ts` - Configures the Python backend process - `preload` - `preload.js` - Exposes electron-specific variables to the frontend - `frontend` - `core` - Contains all the source code for the frontend - - `index.js` - The entry point for the application + - `index.ts` - The entry point for the application. Manages initial system and internet connection checks, and sets up auto-updating - `pages.js` - The main code that controls which pages are rendered and how they are linked together - `components` - Contains all the UI Components used throughout the app - `assets` - Contains all the frontend-facing assets (e.g. images, css, etc.) @@ -160,12 +160,12 @@ Starting a New Feature Adding a New Page ^^^^^^^^^^^^^^^^^ -New pages can be added by linking a component in the ``src/pages.js`` file. For example, if you wanted to -add a new page called ``NewPage``, you would add the following to the configuration file: +New pages can be added by linking a component in the ``src/electron/frontend/core/pages.js`` file. +For example, if you wanted to add a new page called ``NewPage``, you would add the following to the configuration file: .. code-block:: javascript - import NewPage from "./stories/pages/NewPage"; + import NewPage from "./components/pages/new_page/NewPage"; // ... @@ -173,34 +173,24 @@ add a new page called ``NewPage``, you would add the following to the configurat // ... - 'guided': new GuidedHomePage({ - label: "Guided Mode", - icon: guidedIcon, - pages: { - start: new GuidedStartPage({ - label: "Start", - }), + uploads: new UploadsPage({ + label: "Upload", + icon: uploadIcon, + }), - // ... - - newpage: new NewPage({ - label: "New Page", // This is the label that will be displayed in the sidebar - }), - - // ... - - }, - }) + newpage: new NewPage({ + label: "New Page", // This is the label that will be displayed in the sidebar + }), // ... - } + } // ... This will automatically add the new page to the sidebar. The page itself can be defined in the -``src/stories/pages/NewPage.js`` file. For example, if you wanted to add a new page that displays -a simple message, you could add the following to the ``src/stories/pages/NewPage.js`` file: +``./components/pages/new_page/NewPage.js`` file. For example, if you wanted to add a new page that displays +a simple message, you could add the following to the ``./components/pages/new_page/NewPage.js`` file: .. code-block:: javascript diff --git a/docs/format_support.rst b/docs/format_support.rst index 0fe2c7b18..5c7ab9b51 100644 --- a/docs/format_support.rst +++ b/docs/format_support.rst @@ -1,5 +1,5 @@ Ecosystem Format Support -======================================= +======================== The following is a live record of all the supported formats in the NWB GUIDE and underlying ecosystem. .. raw:: html From 21e9e290cd5a5e084a7d176fd85e9bd5ccea7eb8 Mon Sep 17 00:00:00 2001 From: rly Date: Fri, 23 Aug 2024 00:14:10 -0700 Subject: [PATCH 02/13] Remove minor unused code from main.ts --- src/electron/main/main.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/electron/main/main.ts b/src/electron/main/main.ts index c8bc7fc8d..e30c0b466 100755 --- a/src/electron/main/main.ts +++ b/src/electron/main/main.ts @@ -7,7 +7,6 @@ import main from '@electron/remote/main'; main.initialize() import path from 'path'; -// import { autoUpdater } from 'electron-updater'; import { ipcMain } from 'electron'; import fp from 'find-free-port'; import 'v8-compile-cache' @@ -21,9 +20,6 @@ import icon from '../frontend/assets/img/logo-guide-draft.png?asset' import splashHTML from './splash-screen.html?asset' import preloadUrl from '../preload/preload.js?asset' -import devUpdateConfig from './dev-app-update.yml?asset' - - import { autoUpdater } from 'electron-updater'; @@ -52,9 +48,6 @@ const PYINSTALLER_NAME = "nwb-guide" const isWindows = process.platform === 'win32' - - - let pyflaskProcess: any = null; let PORT: number | string | null = 4242; @@ -69,6 +62,7 @@ let globals: { python: { status: boolean, sent: boolean, + restart: boolean, latestError: string }, } = { From ff8ebcef1844ef4b323c30f2d20afe75a85c98d2 Mon Sep 17 00:00:00 2001 From: rly Date: Fri, 23 Aug 2024 00:14:23 -0700 Subject: [PATCH 03/13] Remove unused code from GuidedHome --- .../pages/guided-mode/GuidedHome.js | 137 +----------------- 1 file changed, 8 insertions(+), 129 deletions(-) diff --git a/src/electron/frontend/core/components/pages/guided-mode/GuidedHome.js b/src/electron/frontend/core/components/pages/guided-mode/GuidedHome.js index 8352f49a9..65ad46a62 100644 --- a/src/electron/frontend/core/components/pages/guided-mode/GuidedHome.js +++ b/src/electron/frontend/core/components/pages/guided-mode/GuidedHome.js @@ -7,160 +7,42 @@ import * as progress from "../../../progress/index.js"; import { newDataset } from "../../../../assets/lotties/index.js"; export class GuidedHomePage extends Page { - constructor(...args) { - super(...args); - } - - resetRadioButtons(parentPageID) { - const parentPage = (this.shadowRoot ?? this).querySelector(`#${parentPageID}`); - const guidedRadioButtons = parentPage.querySelectorAll(".guided--radio-button"); - for (const guidedRadioButton of guidedRadioButtons) { - guidedRadioButton.classList.remove("selected"); - guidedRadioButton.classList.remove("not-selected"); - guidedRadioButton.classList.add("basic"); - - //get the data-next-element attribute - const elementButtonControls = guidedRadioButton.getAttribute("data-next-element"); - if (elementButtonControls) { - const elementToHide = (this.shadowRoot ?? this).querySelector(`#${elementButtonControls}`); - elementToHide.setAttribute("hidden", ""); - } - } - } - renderProgressCards = (progressFileJSONdata) => { const htmlBase = this.shadowRoot ?? this; - //sort progressFileJSONdata by date to place newest cards on top + // sort progressFileJSONdata by date to place newest cards on top progressFileJSONdata.sort((a, b) => { return new Date(b["last-modified"]) - new Date(a["last-modified"]); }); - //sort progressFileJSONdata into two rows one with property "previous-guided-upload-dataset-name" - //and one without property "previous-guided-upload-dataset-name" - const progressDataAlreadyUploadedToPennsieve = progressFileJSONdata.filter((progressFileJSONobj) => { - return progressFileJSONobj["previous-guided-upload-dataset-name"]; - }); - const progressDataNotYetUploadedToPennsieve = progressFileJSONdata.filter((progressFileJSONobj) => { - return !progressFileJSONobj["previous-guided-upload-dataset-name"]; - }); - //Add the progress cards that have already been uploaded to Pennsieve - //to their container (datasets that have the globals.sodaJSONObj["previous-guided-upload-dataset-name"] property) - - const uploadedList = htmlBase.querySelector("#guided-div-update-uploaded-cards"); - uploadedList.innerHTML = ""; - const createCard = (progressFile) => { const card = new ProgressCard(progressFile); card.resume = (...args) => this.resume(...args); return card; }; - if (progressDataAlreadyUploadedToPennsieve.length > 0) { - progressDataAlreadyUploadedToPennsieve.forEach((progressFile) => - uploadedList.appendChild(createCard(progressFile)) - ); - } else - uploadedList.innerHTML = ` -

- No local datasets have been uploaded to Pennsieve yet. -

-

- Click "Datasets in progress" to view local datasets in progress. -

- `; - - //Add the progress cards that have not yet been uploaded to Pennsieve - //to their container (datasets that do not have the globals.sodaJSONObj["previous-guided-upload-dataset-name"] property) const resumeList = htmlBase.querySelector("#guided-div-resume-progress-cards"); resumeList.innerHTML = ""; - if (progressDataNotYetUploadedToPennsieve.length > 0) { - progressDataNotYetUploadedToPennsieve.forEach((progressFile) => - resumeList.appendChild(createCard(progressFile)) - ); - } else - resumeList.innerHTML = ` -

- All local datasets have been previously uploaded to Pennsieve. -

-

- Click "Datasets uploaded to Pennsieve" to view local datasets that have already been uploaded to Pennsieve. -

- `; - - const radioButtons = Array.from(htmlBase.querySelectorAll(".guided--radio-button")); - radioButtons.forEach((radioButton) => { - radioButton.onclick = () => - this.#onRadioClick( - radioButton, - radioButtons.filter((button) => button !== radioButton) - ); - }); - }; - - #onRadioClick = (selectedButton, notSelectedButton) => { - notSelectedButton.forEach((button) => { - button.classList.add("selected"); - button.classList.add("not-selected"); - button.classList.add("basic"); - }); - - //If button has prevent-radio-handler data attribute, other buttons, will be deselected - //but all other radio button functions will be halted - if (selectedButton.getAttribute("data-prevent-radio-handler") === true) return; - - selectedButton.classList.remove("not-selected"); - selectedButton.classList.remove("basic"); - selectedButton.classList.add("selected"); - - //Hide all child containers of non-selected buttons - notSelectedButton.forEach((button) => { - const id = button.getAttribute("data-next-element"); - if (id) (this.shadowRoot ?? this).querySelector(`#${id}`).setAttribute("hidden", ""); - }); - - //Display and scroll to selected element container if data-next-element exists - const nextQuestionID = selectedButton.getAttribute("data-next-element"); - if (nextQuestionID) { - const nextQuestionElement = (this.shadowRoot ?? this).querySelector(`#${nextQuestionID}`); - nextQuestionElement.removeAttribute("hidden"); - //slow scroll to the next question - //temp fix to prevent scrolling error - const elementsToNotScrollTo = [ - "guided-add-samples-table", - "guided-add-pools-table", - "guided-div-add-subjects-table", - "guided-div-resume-progress-cards", - "guided-div-update-uploaded-cards", - ]; - if (!elementsToNotScrollTo.includes(nextQuestionID)) - nextQuestionElement[0].scrollIntoView({ behavior: "smooth" }); - } + progressFileJSONdata.forEach((progressFile) => + resumeList.appendChild(createCard(progressFile)) + ); }; resume = (resumeProgressButton) => { - resumeProgressButton.classList.add("loading"); + // get the name of the dataset by navigating to the card element with class "progress-file-name" const datasetNameToResume = resumeProgressButton.parentNode.parentNode.querySelector(".progress-file-name").innerText; - progress.resume.call(this, datasetNameToResume); - resumeProgressButton.classList.remove("loading"); }; async updated() { const htmlBase = this.shadowRoot ?? this; - // this.content = (this.shadowRoot ?? this).querySelector("#content"); const lottieContainer = htmlBase.querySelector("#new-dataset-lottie-container"); startLottie(lottieContainer, newDataset); - // Render existing conversion pipelines - // guidedResetProgressVariables(); - - this.resetRadioButtons("guided-div-dataset-cards-radio-buttons"); - + // for legacy reasons, the "Existing Conversions" tab is a radio button that is always selected const datasetCardsRadioButtonsContainer = htmlBase.querySelector("#guided-div-dataset-cards-radio-buttons"); - const guidedSavedProgressFiles = progress.getEntries(); //render progress resumption cards from progress file array @@ -168,7 +50,6 @@ export class GuidedHomePage extends Page { datasetCardsRadioButtonsContainer.removeAttribute("hidden"); const progressFileData = progress.getAll(guidedSavedProgressFiles); this.renderProgressCards(progressFileData); - htmlBase.querySelector("#guided-button-view-datasets-in-progress").click(); } else { htmlBase.querySelector("#guided-continue-curation-header").innerHTML = ""; datasetCardsRadioButtonsContainer.setAttribute("hidden", ""); @@ -210,17 +91,15 @@ export class GuidedHomePage extends Page { style="justify-content: space-evenly" > - - +
`; From 0da1cb4f9b830121854d9d0a643a62737049c36b Mon Sep 17 00:00:00 2001 From: rly Date: Fri, 23 Aug 2024 00:14:32 -0700 Subject: [PATCH 04/13] Remove unused CSS --- src/electron/frontend/assets/css/guided.css | 123 -- .../frontend/assets/css/individualtab.css | 6 - src/electron/frontend/assets/css/main.css | 1506 +---------------- 3 files changed, 58 insertions(+), 1577 deletions(-) diff --git a/src/electron/frontend/assets/css/guided.css b/src/electron/frontend/assets/css/guided.css index 441ae3c86..86a67c665 100644 --- a/src/electron/frontend/assets/css/guided.css +++ b/src/electron/frontend/assets/css/guided.css @@ -463,13 +463,6 @@ flex-grow: 1; } -.guided--container-permissions { - width: 800px; - display: flex; - flex-direction: row; - align-items: center; -} - .guided--container-data-display { display: flex; width: 90%; @@ -1345,122 +1338,6 @@ h1.guided--text-sub-step { } } -.asideContainer { - border: 2px solid lightgray; -} - -.asideTitleContainer { - padding-top: 0; - border-radius: 0; - border: none; - border-right: 2px solid lightgray; -} - -.asideTitle { - background: lightgray; - padding: 12px 0 15px 0; - border-radius: 0; -} - .border-styling { border: 2px solid lightgray; } - -.before-getting-started-btn { - margin-bottom: 1.5rem; -} -.lds-roller { - display: inline-block; - position: relative; - width: 80px; - height: 80px; -} -.lds-roller div { - animation: lds-roller 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; - transform-origin: 40px 40px; -} -.lds-roller div:after { - content: " "; - display: block; - position: absolute; - width: 7px; - height: 7px; - border-radius: 50%; - background: var(--color-light-green); - margin: -4px 0 0 -4px; -} -.lds-roller div:nth-child(1) { - animation-delay: -0.036s; -} -.lds-roller div:nth-child(1):after { - top: 63px; - left: 63px; -} -.lds-roller div:nth-child(2) { - animation-delay: -0.072s; -} -.lds-roller div:nth-child(2):after { - top: 68px; - left: 56px; -} -.lds-roller div:nth-child(3) { - animation-delay: -0.108s; -} -.lds-roller div:nth-child(3):after { - top: 71px; - left: 48px; -} -.lds-roller div:nth-child(4) { - animation-delay: -0.144s; -} -.lds-roller div:nth-child(4):after { - top: 72px; - left: 40px; -} -.lds-roller div:nth-child(5) { - animation-delay: -0.18s; -} -.lds-roller div:nth-child(5):after { - top: 71px; - left: 32px; -} -.lds-roller div:nth-child(6) { - animation-delay: -0.216s; -} -.lds-roller div:nth-child(6):after { - top: 68px; - left: 24px; -} -.lds-roller div:nth-child(7) { - animation-delay: -0.252s; -} -.lds-roller div:nth-child(7):after { - top: 63px; - left: 17px; -} -.lds-roller div:nth-child(8) { - animation-delay: -0.288s; -} -.lds-roller div:nth-child(8):after { - top: 56px; - left: 12px; -} -@keyframes lds-roller { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -.tippy-box[data-theme~="soda"] { - background-color: #13716d; - color: white; - /* white-space: nowrap; */ - /* overflow: hidden; */ -} - -.tippy-box[data-theme~="soda"][data-placement^="top"] > .tippy-arrow::before { - border-top-color: #13716d; -} diff --git a/src/electron/frontend/assets/css/individualtab.css b/src/electron/frontend/assets/css/individualtab.css index 56f38c4c4..a5e64903b 100644 --- a/src/electron/frontend/assets/css/individualtab.css +++ b/src/electron/frontend/assets/css/individualtab.css @@ -1206,12 +1206,6 @@ .card-right.bf-account-span, .card-right.bf-account-details-span, .card-right.bf-dataset-span, -.card-right.current-permissions { - width: auto; - margin-left: 5px; - margin-top: 0px; - padding-left: 5px; -} .card-container.manage-dataset .card-right.bf-dataset-span { width: fit-content; diff --git a/src/electron/frontend/assets/css/main.css b/src/electron/frontend/assets/css/main.css index 2ae4d3e73..e1d791579 100644 --- a/src/electron/frontend/assets/css/main.css +++ b/src/electron/frontend/assets/css/main.css @@ -72,28 +72,6 @@ button:focus { justify-content: space-between; } -.update-file:before { - opacity: 0.5; -} - -.update-file:after { - content: "\f24d"; - position: absolute; - top: 42px; - right: 24px; - color: var(--color-bg-plum); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - .input-name { color: black; align-self: center; @@ -272,33 +250,6 @@ button[disabled] { color: white !important; } -button[data-id="bf_list_users"], -button[data-id="bf_list_roles_user"], -button[data-id="bf_list_teams"], -button[data-id="bf_list_roles_team"] { - border: 1px solid rgba(34, 36, 38, 0.15); - border-radius: 7px; - width: 90% !important; -} -button[data-id="guided-sparc-award-dropdown"], -button[data-id="bf_list_users_pi"], -button[data-id="guided_bf_list_users_pi"], -button[data-id="guided_bf_list_users_and_teams"] { - border: 1px solid rgba(34, 36, 38, 0.15); - border-radius: 7px; - height: 35px; -} - -#pi_bootstrap_select_div > .dropdown.bootstrap-select { - width: 550px; -} - -#guided_sparc_award_bootstrap_select_div > .dropdown.bootstrap-select, -#guided_pi_bootstrap_select_div > .dropdown.bootstrap-select, -#guided_permissions_select_div > .dropdown.bootstrap-select { - width: 100%; -} - .sidebar { background-color: var(--color-teal); height: 100%; @@ -466,136 +417,6 @@ button[data-id="guided_bf_list_users_and_teams"] { color: #404040; } -.hoverPath { - width: auto; - min-height: auto; - background-color: #f4f4f4; - color: #333; - border: 1px solid #aaa; - /* box-shadow: 2px 2px 2px #999; */ - border-radius: 3px; - position: fixed; - padding: 5px 5px; - font-size: 12px; - z-index: 5; - overflow: hidden; -} - -.hoverFullName { - max-width: auto; - min-height: auto; - background-color: #f4f4f4; - color: #333; - border: 1px solid #aaa; - border-radius: 3px; - position: absolute; - padding: 5px 5px; - font-size: 12px; - z-index: 1000; -} - -.single-item { - display: inline-block; - text-align: center; - width: 120px; - height: 100px; - position: relative !important; - margin-right: 5px; - margin-top: 5px; - padding: 10px 0px 10px 0px; -} - -.single-item.selected-item:hover { - border: #c0c0c0; - background-color: #d8d7d7; - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.single-item.selected-item:focus { - border: #c0c0c0; - background-color: #eeeaea; - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -@-o-keyframes fadeIt { - 0% { - background-color: #ffffff; - } - - 50% { - background-color: #85ceff; - } - - 100% { - background-color: #ffffff; - } -} - -@keyframes fadeIt { - 0% { - background-color: #ffffff; - } - - 50% { - background-color: #85ceff; - } - - 100% { - background-color: #ffffff; - } -} - -.backgroundAnimate { - background-image: none !important; - -o-animation: fadeIt 3s ease-in-out; - animation: fadeIt 3s ease-in-out; -} - -.ds-selected { - border: #c0c0c0; - background-color: #eeeaea; - /* transform: translateY(-6px); */ -} - -.single-item:active { - transform: all 3s; - -webkit-transform: all 3s; -} - -/*Pre publishing submission flow file viewer uses .single-item but allows a user to select a file UI element. - When the element is selected it adds styling. This sets it up to ignore the hover effect styling once selected. -*/ -.single-item:not(.pre-publishing-file-viewer-file-selected):hover { - border: #c0c0c0; - background-color: #f5f5f5; - transition: all 0.15s linear; - -webkit-transition: all 0.15s linear; -} - -.single-item:hover + #myspan { - display: block; -} - -.folder_desc { - text-align: center; - font-size: 13px; - width: 110px; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - user-select: none; - -webkit-user-select: none; - padding: 0px 4px 0px 4px; - /* word-wrap: break-word; */ - line-height: 1.5; - margin-right: 5px; - margin-left: 5px; - color: black; - pointer-events: none; -} - .blue { color: rgb(255, 165, 0, 0.8); } @@ -608,1170 +429,95 @@ button[data-id="guided_bf_list_users_and_teams"] { padding: 5px; } -.btn.btn-success:hover { - border: 5px solid #3b5998; - box-shadow: 0 0 5px #3b5998; - transition: all 0.5s ease; -} - -.button-back { - color: #666666; - background-color: #fff; - border: 1px solid #666666; - border-radius: 5px; - height: 35px; - width: 40px; - font-size: 14px; - background-position: center; - transition: background 0.8s; -} - -.button-back:hover { - box-shadow: 0 0 3px 0px #666666; -} - -.button-back:active { - transform: translateY(-4px); -} - -.button-back:focus { - outline: none; -} - -.myButton { - margin-right: 3px; - font-size: 13px; - font-weight: 600; - color: #fff; - background-color: #bf3062; - border: 1px solid transparent; - border-radius: 5px; - cursor: pointer; - height: 35px; - width: 110px; - box-shadow: 0 0 2px #999; - background-position: center; - transition: background 0.8s; -} - -.myButton.second { - background-color: #bf3062; - color: #fff; -} - -.myButton:hover { - background: var(--color-teal) radial-gradient(circle, transparent 1%, var(--color-teal) 1%) center/15000%; - color: white; - box-shadow: 0 0 5px #3b5998; - transition: all 0.5s ease; -} - -.myButton:active { - background-color: #292d3e; - background-size: 100%; - transition: background 0s; - transform: translateY(-3px); -} - -.myButton:focus { - outline: none; -} - -.myButton.second:hover { - background: var(--color-teal) radial-gradient(circle, transparent 1%, var(--color-teal) 1%) center/15000%; - color: #fff; - box-shadow: 0 0 5px #3b5998; - transition: all 0.5s ease; -} - -.confirmButton { - left: 89%; - top: 93%; - position: absolute; - font-family: "Montserrat", sans-serif; - width: 190px; - font-size: 14px; - font-weight: 600; - color: var(--color-light-green); - background-color: #fff; - border: 2px solid var(--color-light-green); - margin: 0 0; - height: 35px; - cursor: pointer; - border-radius: 5px; - background: linear-gradient(to left, #fff 50%, var(--color-light-green) 50%) right; - background-size: 200%; - transition: 0.5s ease-out; -} - -.confirmButton:hover { - color: #fff; - background-position: left; -} - -.confirmButton:active { - background-size: 100%; - transform: translateY(-3px); -} - -.confirmButton:focus { - outline: none; -} - -.div-organize-generate-dataset { - text-align: center; - min-width: 450px; - margin-top: 20px; - display: flex; - flex-direction: column; - justify-content: center; -} - -.div-organize-generate-dataset.metadata { - justify-content: space-around; - flex-wrap: wrap; - /* margin-top: 50px !important; */ - margin: 0 auto; -} - -.div-organize-generate-dataset.metadata.hide { - display: none; -} - -.div-organize-generate-dataset.metadata button { - width: 150px; - height: 155px; -} - -.div-organize-generate-dataset.metadata i { - color: var(--tagify-dd-color-primary) !important; - font-size: 50px !important; -} - -.div-organize-generate-dataset.metadata p { - /* color: orange; */ - font-size: 13px; - margin-top: 20px !important; -} - -.content-header.metadata-step4 { - font-weight: 600; - color: #000; +details > summary { + list-style-type: none; } -.div-file-import.pennsieve { +details > summary::-webkit-details-marker { display: none; } -.flex-row-container.code-metadata { - display: none; +details > summary::before { + content: url("data:image/svg+xml,%3Csvg style='transform: scale(0.2);' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3C!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath d='M416 288h-95.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H416c17.67 0 32-14.33 32-32S433.7 288 416 288zM544 32h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 32 544 32zM352 416h-32c-17.67 0-32 14.33-32 32s14.33 32 32 32h32c17.67 0 31.1-14.33 31.1-32S369.7 416 352 416zM480 160h-159.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H480c17.67 0 32-14.33 32-32S497.7 160 480 160zM192.4 330.7L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-6.312-6.883-14.94-10.38-23.61-10.38c-7.719 0-15.47 2.781-21.61 8.414c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C224.6 316.8 204.4 317.7 192.4 330.7z'/%3E%3C/svg%3E"); } -.div-individual-metadata { - display: none; +details[open] > summary::before { + content: none; } -.div-individual-metadata.show { +.documentation_container { display: flex; + justify-content: center; + align-items: center; flex-direction: column; - margin: 30px auto; -} - -.button-generate-dataset { - width: 200px; - height: 200px; - border: none; - background-color: #fff; - font-size: 13px; - font-weight: 600; - border-radius: 5px; - padding-top: 0; - padding-bottom: 5px; - padding-right: 20px; - padding-left: 20px; - margin-right: 30px; - color: var(--color-teal); - opacity: 1; - position: relative; - box-shadow: 0px 0px 10px #d5d5d5; -} - -.button-generate-dataset:hover { - outline: none; - /* border: 1px solid var(--color-light-green); */ - box-shadow: 0px 0px 10px 0px var(--color-light-green); - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.button-generate-dataset:active, -.button-generate-dataset:focus { - outline: none; - border: 1px solid var(--color-light-green); - box-shadow: 0px 0px 3px 0px var(--color-light-green); - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; + width: 100%; + height: 100%; + max-height: 1000px; } -.button-generate-dataset p { - color: #000; - font-weight: 500; - font-size: 14px; - line-height: 1.5; +.document_container { + overflow-y: auto; + justify-content: center; + width: 100%; + height: 100%; + display: flex; } -.button-generate-dataset svg { - margin: 0 auto; +.doc_container { + padding-right: 1.25rem; + padding-top: 0.5rem; + justify-content: center; + align-items: center; + padding: 0.75rem; + flex-direction: column; + max-width: 1024px; + width: 100%; + height: 100%; + display: flex; } -.button-generate-dataset .bi.bi-file-earmark-plus { - display: block; +.dc_con { + flex-direction: column; + width: 100%; + height: 100%; + display: flex; } -.button-generate-dataset .bi.bi-check2 { - display: none; +.doc_header { + font-weight: 700; + font-size: 1.875rem !important; + line-height: 2.25rem; + padding-bottom: 0.25rem; + margin: 0; } -.drag-drop-container-instructions { - display: flex; - flex-direction: column; +.document-content { align-items: center; + flex-direction: column; width: 100%; - padding: 25px; - opacity: 0.55; -} - -.file-templates-button { - width: 160px; - height: 160px; - border: none; - background-color: #fff; - font-size: 13px; - font-weight: 600; - border-radius: 5px; - padding-top: 5px; - padding-bottom: 5px; - padding-right: 20px; - padding-left: 20px; - margin-right: 30px; - color: var(--color-teal); - opacity: 1; - position: relative; - box-shadow: 0px 0px 10px #d5d5d5; + height: 40%; display: flex; - flex-direction: column; justify-content: center; - align-items: center; - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.file-templates-button svg { - margin: 0 auto; - fill: var(--tagify-dd-color-primary); - width: 45px; - height: 45px; - pointer-events: none; -} - -.file-templates-button:hover { - outline: none; - box-shadow: 0px 0px 10px 0px var(--color-light-green); - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.file-templates-button:active { - border: 1px solid var(--color-light-green); - box-shadow: 0px 0px 3px 0px var(--color-light-green); - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.metadata-button.button-generate-dataset.code-metadata { - display: none; -} - -.metadata-button.button-generate-dataset.done { - border: 1px solid var(--color-light-green); - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.metadata-button.button-generate-dataset.done p { - color: var(--color-light-green); - font-weight: 600; -} - -.metadata-button.button-generate-dataset.done .bi.bi-file-earmark-plus { - display: none; -} - -.metadata-button.button-generate-dataset.done .bi.bi-check2 { - color: var(--color-light-green); - display: block !important; - margin: 0 auto; - transition: all 0.25s linear; - -webkit-transition: all 0.25s linear; -} - -.form-group.row { - margin-bottom: 10px; - margin-left: 5px; -} - -.folder_desc.pennsieve_folder:after { - content: "\f0c2"; - position: absolute; - bottom: 34px; - left: 18px; - color: rgb(81, 176, 240); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.pennsieve_folder_deleted { - color: rgba(0, 0, 0, 0.5); } -.folder_desc.local_folder:after { - content: "\f7c2"; - position: absolute; - bottom: 34px; - left: 18px; - color: rgb(81, 176, 240); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; +.button_container_contact { + display: flex; + justify-content: center; + margin-bottom: 3rem; } -.local_folder_deleted { - color: rgba(0, 0, 0, 0.5); +.docu-content-container { + padding-top: 1rem; + margin-bottom: 1rem; + display: flex; + flex-direction: column; + justify-content: center; } -.folder_desc.pennsieve_folder_deleted:after { - content: "\f0c2"; - position: absolute; - bottom: 34px; - left: 18px; - color: rgb(185, 221, 245); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.folder_desc.local_folder_deleted:after { - content: "\f7c2"; - position: absolute; - bottom: 34px; - left: 18px; - color: rgb(185, 221, 245); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.folder_desc.pennsieve_file:after { - content: "\f0c2"; - position: absolute; - bottom: 27px; - left: 34px; - color: rgb(81, 176, 240); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.folder_desc.local_file:after { - content: "\f7c2"; - position: absolute; - bottom: 27px; - left: 34px; - color: rgb(81, 176, 240); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.pennsieve_file_deleted { - color: rgba(0, 0, 0, 0.5); -} - -.local_file_deleted { - color: rgba(0, 0, 0, 0.5); -} - -.folder_desc.pennsieve_file_deleted:after { - content: "\f0c2"; - position: absolute; - bottom: 27px; - left: 34px; - color: rgb(185, 221, 245); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.folder_desc.local_file_deleted:after { - content: "\f7c2"; - position: absolute; - bottom: 27px; - left: 34px; - color: rgb(185, 221, 245); - z-index: 5; - font-size: 21px; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - text-shadow: - -1px 0 white, - 0 1px white, - 1px 0 white, - 0 -1px white; - pointer-events: none; -} - -.menu-toggle { - transition: transform 1s ease-in-out !important; -} - -.step-dot { - height: 12px; - width: 12px; - background-color: #bbb; - border-radius: 50%; - display: inline-block; - /* visibility: hidden; */ -} - -.step-dot.active { - box-shadow: 0 0 5px #3b5998; - background-color: var(--color-teal); -} - -#metadata_progress { - width: 100%; - height: 100%; - overflow: hidden; - margin: 0px auto; - position: relative; - /* background: url('http://www.csslab.cl/ejemplos/timelinr/latest/images/dot.gif') 3px top repeat-y; */ -} - -#metadata-content { - max-width: 100%; - height: auto; - overflow: hidden; - margin: 10px auto; - /* float:left */ - padding: 0; -} - -#metadata-content h1 { - font-size: 16px; - text-align: center; - padding-top: 30px; -} - -#metadata-content li { - list-style: none; - text-align: center; - display: none; - min-height: 260px; - max-width: 240px; - border: 1px dashed #3d3d3d !important; - margin: 20px auto; - border-radius: 5px; -} - -#metadata-content li i { - color: #c0c0c0; -} - -#metadata-content li p { - font-size: 23px; - margin: 0; -} - -#metadata-content li button { - width: 90px; - height: 25px; - background: #fff; - color: var(--color-light-green); - border: 1px solid var(--color-light-green); - border-radius: 3px; - box-shadow: 0 0 3px 0 var(--color-light-green); - margin: 0 auto; - cursor: pointer; -} - -#metadata-content li.selected { - list-style: none; - text-align: center; - display: block; -} - -.folder-upload-div { - list-style: none; - text-align: center; - width: 200px; - height: 210px; - border: 1px dashed #c0c0c0; - background-color: #fff; - font-size: 13px; - font-weight: 600; - border-radius: 5px; - padding: 5px 10px; - margin: 0 auto; - color: var(--color-teal); - opacity: 1; - position: relative; -} - -.folder-upload-div button { - width: 100px; - height: 25px; - background: #fff; - color: var(--color-light-green); - border: 1px solid var(--color-light-green); - border-radius: 3px; - box-shadow: 0 0 3px 0 var(--color-light-green); - margin: 0 auto; - cursor: pointer; -} - -.folder-upload-div p { - margin: 5px auto; - font-size: 16px; - opacity: 0.7; - color: #000; -} - -.progress-box { - float: left; - height: 25px; - width: 25px; - margin-bottom: 10px; - margin-right: 10px; - border: 1px solid transparent; - clear: both; - font-size: 13px; - border-radius: 3px; - color: #9e9e9e; - text-align: center; - background: #e0e0e0; -} - -.progress-box span { - color: #333333; -} - -.progress-box.checked { - content: "\2713"; - background: var(--color-light-green); - color: #fff; - text-align: center; - border-color: var(--color-light-green); -} - -.progress-box.checked span { - opacity: 1; - color: var(--color-light-green); -} - -.metadata-progress-box { - padding-top: 20px; - width: 100%; - border-bottom: 1px solid #e0e0e0; - display: flex; - flex-direction: row; - justify-content: space-between; -} - -.metadata-progress-box span { - color: #000; - font-weight: 600; - font-size: 13px; - opacity: 0.5; -} - -.div-display-details { - position: absolute; - width: 350px; - height: auto; - bottom: 70px; - right: 0; - bottom: 70px; - border-radius: 10px 0 0 10px; - border: 1px solid #f0f0f0; - background: #f5f5f5; - color: #000; - padding: 20px; - line-height: 1.5; - float: right; - transform: translateX(350px); - transition: transform 1.4s ease-in-out; - display: none; - grid-template-rows: auto; - text-align: center; - overflow-wrap: break-word; - z-index: 10; -} - -.div-display-details div { - max-width: 90%; - margin-right: 10px; - margin-left: 10px; - overflow-x: auto; -} - -.div-display-details.folders { - grid-template-rows: 50% 50%; -} - -.div-display-details p { - font-family: inherit; - margin-top: 25px; - margin-bottom: 5px; - font-size: 13px; -} - -.div-display-details textarea { - font-family: inherit; - max-height: 60px; - overflow-y: scroll; - resize: vertical; - width: 100%; - margin-top: 10px; -} - -.div-display-details.show { - transform: translateX(0); - display: grid; -} - -.button-display-details { - position: absolute; - top: 10px; - left: 10px; - width: 25px; - height: 25px; - opacity: 0.8; - background: var(--color-bg-plum); - color: #fff; - border-radius: 50%; - border: 1px solid var(--color-bg-plum); - cursor: pointer; - box-shadow: 0 0 3px 0 var(--color-bg-plum); -} - -#div-manifest-edit { - margin-top: 20px; - max-height: 70vh; - overflow-y: scroll; -} - -.sparc-logo { - margin: 5px; - position: absolute; - margin-left: 39px; - width: 146px; - padding-left: 6px; - bottom: 0; -} - -#items_container { - display: flex; - justify-content: center; - margin: 10px; -} - -#items_loading_container { - position: absolute; - top: 50%; - left: 50%; - z-index: 9999; - margin: 10px; - display: none; -} - -#item_load { - color: rgb(78, 166, 255); -} - -.loading-items-background { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 9999; - background-color: darkgray; - opacity: 0.5; - display: flex; - justify-content: center; -} - -details > summary { - list-style-type: none; -} - -details > summary::-webkit-details-marker { - display: none; -} - -details > summary::before { - content: url("data:image/svg+xml,%3Csvg style='transform: scale(0.2);' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3C!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --%3E%3Cpath d='M416 288h-95.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H416c17.67 0 32-14.33 32-32S433.7 288 416 288zM544 32h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 32 544 32zM352 416h-32c-17.67 0-32 14.33-32 32s14.33 32 32 32h32c17.67 0 31.1-14.33 31.1-32S369.7 416 352 416zM480 160h-159.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H480c17.67 0 32-14.33 32-32S497.7 160 480 160zM192.4 330.7L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-6.312-6.883-14.94-10.38-23.61-10.38c-7.719 0-15.47 2.781-21.61 8.414c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C224.6 316.8 204.4 317.7 192.4 330.7z'/%3E%3C/svg%3E"); -} - -details[open] > summary::before { - content: none; -} - -.info-container { - align-self: center; - width: 573px; - margin-top: 1rem; -} - -.info-container-wrapper { - position: relative; - max-width: 95%; - margin-top: 1rem; - margin: 0 auto; - font-size: smaller; - color: #666666; -} - -.info-summary { - margin: 0; - font-size: unset; - font-weight: unset; - position: relative; - display: block; - padding: 0.5em 1.5em; - line-height: 1.5; - text-align: left; - border: none; - color: inherit; - background-color: transparent; - transition: border-color 0.12s; - outline: none; - border-color: #f8f8f9; -} - -.info-summary:before { - top: 0; - transform-origin: bottom center; - transform: translateX(0.7em) rotate(-30deg) scale(0.5); - content: ""; - position: absolute; - left: 0; - width: 2px; - height: 50%; - background-color: hsl(0, 0%, 88%); - transition: transform 0.2s cubic-bezier(0.4, 0.1, 0, 1); -} - -.info-summary:after { - bottom: 0; - transform-origin: top center; - transform: translateX(0.7em) rotate(30deg) scale(0.5); -} - -.is-open .info-summary:before, -.is-open .info-summary:after { - transform: rotate(0deg); - transform: scale(0.7); -} - -.details-box { - display: none; - position: relative; - box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1); - padding: 2em; - margin-top: 1rem; - margin-bottom: 2rem; - border-radius: 0.4rem; - background-color: #f8f8f9; - border-color: #f8f8f9; -} - -.is-open .details-box { - display: block; - animation: demo-box-fade-in 0.2s cubic-bezier(0, 0.2, 0.2, 0.96); -} - -.overview-column { - display: flex; - margin: 15px; - border: solid; - border-color: #f2f2f2; - height: 95% !important; - border-radius: 2rem; - align-items: center; - border-width: 1px !important; - justify-content: center; - flex-direction: column; - text-align: center; - padding: 1.5rem; - --tw-border-opacity: 1; - border-color: rgb(244 244 245 / var(--tw-border-opacity)); - --tw-shadow-color: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - --tw-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.getting-started { - width: 100%; - display: flex; - flex-direction: column; - align-items: center; -} - -.overview-card-layout { - display: grid; - color: black; - padding-left: 2rem; - padding-right: 2rem; - grid-template-columns: repeat(3, minmax(0, 1fr)); - width: 100%; - height: 60% !important; - max-width: 1000px; - place-self: center; -} - -.overview-lottie { - height: 100%; -} - -.getting-started-buttons { - display: flex; - justify-content: center; - height: 50% !important; - margin-top: 25px; -} - -.about-title { - font-size: 17px; - font-weight: 700; - color: var(--color-bg-plum) !important; - margin-bottom: 0; -} - -.about-container { - border-radius: 0.5rem; - margin-top: 7px; - display: flex; - flex-direction: column; - align-items: center; - width: 550px; - margin-bottom: 3rem; - align-self: center; -} - -.about-text { - color: dimgray !important; - text-align: justify; - font-size: 1rem !important; - font-weight: 500 !important; -} - -.tip-content { - text-align: justify; - color: #898989 !important; - font-size: 12px; - font-weight: 700; -} - -.sodaVideo-button { - display: flex; - background: white; - width: 14rem; - justify-content: center; - justify-self: center; - border-radius: 0.25rem; - align-items: center; - height: 3.5rem; - margin-right: 1rem; - color: #666666; - border-width: 1px; - border-color: var(--color-accent) !important; -} - -.sodaVideo-button:hover { - box-shadow: 0 0 6px #b0b0b0; -} - -.direct-to-doc-btn:hover { - box-shadow: 0 0 6px #b0b0b0; -} - -.getting-started-btn:hover { - box-shadow: 0 0 6px #b0b0b0; -} - -.direct-to-doc-btn { - color: #666666; - display: flex; - background: white; - font-weight: bold; - line-height: 1rem; - font-size: 1rem; - width: 18rem !important; - height: 3.5rem; - margin-right: 1rem; - justify-content: center; - align-items: center; - border-radius: 0.25rem; - border-width: 1px; - border-color: #b80d49; -} - -.getting-started-btn { - display: flex; - background: white; - width: 14rem; - justify-self: center; - border-radius: 0.25rem; - justify-content: center; - align-items: center; - height: 3.5rem; - color: #666666; - border-width: 1px; - border-color: var(--color-accent); - margin: 8px; - width: 250px; -} - -.getting-started-btn-txt { - margin: 0; - font-weight: bold !important; - margin-right: 2px; - font-weight: 500; - line-height: 1.5rem; -} - -.interface-btn-txt { - margin: 0; - font-weight: bold !important; - margin-right: 6px; - font-weight: 500; - line-height: 1rem; -} - -@media (min-height: 1200px) { - .getting-started-buttons { - margin-top: -17rem !important; - } -} - -@media (min-height: 900px) { - /* .getting-started-header { - margin-top: 8rem; - } - - .getting-started-buttons { - margin-top: -7rem; - } */ - - /* .getting-started-overview { - grid-template-rows: 12% 65% 10% 21%; - } */ - - .front-page_logo { - width: 80rem; - } -} - -.overview_lottie_header { - margin: 0; - font-weight: 600; - font-size: 16px; -} - -.heart-lottie { - --lottie-animation-container-width: 20px; - --lottie-animation-container-height: 20px; - --lottie-animation-container-background-color: transparent; - width: var(--lottie-animation-container-width); - height: var(--lottie-animation-container-height); - background: var(--lottie-animation-container-background-color); - overflow: hidden; - margin: 0 !important; -} - -.documentation_container { - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - width: 100%; - height: 100%; - max-height: 1000px; -} - -.document_container { - overflow-y: auto; - justify-content: center; - width: 100%; - height: 100%; - display: flex; -} - -.doc_container { - padding-right: 1.25rem; - padding-top: 0.5rem; - justify-content: center; - align-items: center; - padding: 0.75rem; - flex-direction: column; - max-width: 1024px; - width: 100%; - height: 100%; - display: flex; -} - -.dc_con { - flex-direction: column; - width: 100%; - height: 100%; - display: flex; -} - -.doc_header { - font-weight: 700; - font-size: 1.875rem !important; - line-height: 2.25rem; - padding-bottom: 0.25rem; - margin: 0; -} - -.docu_divide { - margin-top: 1rem; - margin-bottom: 1rem; - height: 0; - color: inherit; - border-top-width: 1px; -} - -.document-content { - align-items: center; - flex-direction: column; - width: 100%; - height: 40%; - display: flex; - justify-content: center; -} - -.button_container_contact { - display: flex; - justify-content: center; - margin-bottom: 3rem; -} - -.docu-content-container { - padding-top: 1rem; - margin-bottom: 1rem; - display: flex; - flex-direction: column; - justify-content: center; -} - -.documentation-lottie_style { - width: 100%; - height: 100%; - overflow: hidden; -} - -.api_key-btn { - background: #fff !important; - color: #666666 !important; - display: inline !important; - margin-top: 1rem !important; - align-self: center !important; - width: 258px !important; - border: none !important; -} - -.api_key-btn:hover { - border: 1px solid #666666 !important; -} - -.view_doc_button { - transition-property: all; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(147 197 253 / var(--tw-border-opacity)); - display: flex; - flex-direction: row; - align-items: center; - justify-content: center; - border-radius: 0.25rem; - padding-left: 1.25rem; - padding-right: 1.25rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - min-width: 130px; - font-size: 14px; - font-weight: 500; - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); - cursor: pointer; - -webkit-appearance: button; - background-color: transparent; - background-image: none; +.documentation-lottie_style { + width: 100%; + height: 100%; + overflow: hidden; } .document_text { @@ -1780,139 +526,3 @@ details[open] > summary::before { font-weight: 500; margin-top: 0 !important; } - -.circular { - height: 100px; - width: 100px; - position: relative; - transform: scale(1); -} - -.circular .inner { - position: relative; - z-index: 6; - top: 110%; - left: 50%; - height: 80px; - width: 80px; - margin: -40px 0 0 -40px; - background: #f5f5f5; - border-radius: 100%; -} - -.circular .number { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 10; - font-size: 18px; - font-weight: 500; - color: black; -} - -.circular .fix { - position: relative !important; - top: 60% !important; - z-index: 100 !important; /* left: 40% !important; */ - text-align: center; -} - -.circular .bar { - position: absolute; - height: 100%; - width: 100%; - background: #fff; - -webkit-border-radius: 100%; - clip: rect(0px, 100px, 100px, 50px); -} - -.circle .bar .progress { - position: absolute; - height: 100%; - width: 100%; - -webkit-border-radius: 100%; - clip: rect(0px, 50px, 100px, 0px); - background: var(--color-light-green); -} - -.circle .left .progress { - z-index: 1; - transition: transform 600ms ease; -} - -.circle .right { - transform: rotate(180deg); - transition: linear; - z-index: 3; -} - -.circle .right .progress { - transition: transform 600ms ease; -} - -#Question-getting-started-locally-destination { - text-align: -webkit-center; -} - -.notransition { - -webkit-transition: none !important; - -moz-transition: none !important; - -o-transition: none !important; - transition: none !important; -} - -.freeform-file-explorer { - border: 2px solid lightgray; - margin-top: 5px; - height: auto; - border-radius: 3px; -} - -.freeform-file-explorer { - border: 2px solid lightgray; - margin-top: 5px; - height: auto; - border-radius: 3px; -} - -.freeform-file-explorer-buttons { - display: flex; - margin-top: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - width: 100%; - border-bottom: 2px solid lightgray; -} - -#guided-pennsieve-copy-dataset-link { - background: var(--button-color); - border: none; - color: white; - height: 40px; - width: 45px; - margin-left: 2px; -} - -#guided-pennsieve-copy-dataset-link:hover { - background: #1c687e !important; -} - -#guided-pennsieve-dataset-link { - border-bottom: none !important; - width: 431px; - display: inline-flex; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} - -#guided-pennsieve-dataset-link:hover { - border-bottom: 1px solid !important; -} - -#other-dataset-information-container { - display: flex; - flex-direction: column; - align-self: center; -} From cb5f0c01d68fb9dfd5294d94b6d29d84023414e4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 07:20:58 +0000 Subject: [PATCH 05/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/electron/frontend/assets/css/individualtab.css | 1 - .../frontend/core/components/pages/guided-mode/GuidedHome.js | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/electron/frontend/assets/css/individualtab.css b/src/electron/frontend/assets/css/individualtab.css index a5e64903b..1b68e0710 100644 --- a/src/electron/frontend/assets/css/individualtab.css +++ b/src/electron/frontend/assets/css/individualtab.css @@ -1206,7 +1206,6 @@ .card-right.bf-account-span, .card-right.bf-account-details-span, .card-right.bf-dataset-span, - .card-container.manage-dataset .card-right.bf-dataset-span { width: fit-content; } diff --git a/src/electron/frontend/core/components/pages/guided-mode/GuidedHome.js b/src/electron/frontend/core/components/pages/guided-mode/GuidedHome.js index 65ad46a62..196881c52 100644 --- a/src/electron/frontend/core/components/pages/guided-mode/GuidedHome.js +++ b/src/electron/frontend/core/components/pages/guided-mode/GuidedHome.js @@ -24,9 +24,7 @@ export class GuidedHomePage extends Page { const resumeList = htmlBase.querySelector("#guided-div-resume-progress-cards"); resumeList.innerHTML = ""; - progressFileJSONdata.forEach((progressFile) => - resumeList.appendChild(createCard(progressFile)) - ); + progressFileJSONdata.forEach((progressFile) => resumeList.appendChild(createCard(progressFile))); }; resume = (resumeProgressButton) => { From 47c161b98fdad0a39c9dcf8e869d98b73a1085b3 Mon Sep 17 00:00:00 2001 From: Cody Baker <51133164+CodyCBakerPhD@users.noreply.github.com> Date: Fri, 23 Aug 2024 12:54:55 -0400 Subject: [PATCH 06/13] update nwbinspector imports --- src/pyflask/manageNeuroconv/manage_neuroconv.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/pyflask/manageNeuroconv/manage_neuroconv.py b/src/pyflask/manageNeuroconv/manage_neuroconv.py index fd529f902..824f8c47b 100644 --- a/src/pyflask/manageNeuroconv/manage_neuroconv.py +++ b/src/pyflask/manageNeuroconv/manage_neuroconv.py @@ -648,7 +648,7 @@ def on_recording_interface(name, recording_interface): def get_check_function(check_function_name: str) -> callable: """Function used to fetch an arbitrary NWB Inspector function.""" - from nwbinspector.nwbinspector import configure_checks, load_config + from nwbinspector import configure_checks, load_config dandi_check_list = configure_checks(config=load_config(filepath_or_keyword="dandi")) dandi_check_registry = {check.__name__: check for check in dandi_check_list} @@ -662,7 +662,7 @@ def get_check_function(check_function_name: str) -> callable: def run_check_function(check_function: callable, arg: dict) -> dict: """.Function used to run an arbitrary NWB Inspector function.""" - from nwbinspector.register_checks import Importance, InspectorMessage + from nwbinspector import Importance, InspectorMessage output = check_function(arg) if isinstance(output, InspectorMessage): @@ -718,7 +718,7 @@ def validate_metadata( timezone: Optional[str] = None, ) -> dict: """Function used to validate data using an arbitrary NWB Inspector function.""" - from nwbinspector.nwbinspector import InspectorOutputJSONEncoder + from nwbinspector import InspectorOutputJSONEncoder from pynwb.file import NWBFile, Subject check_function = get_check_function(check_function_name) @@ -1458,7 +1458,7 @@ def _inspect_file_per_job( ) -> list: import requests - from nwbinspector import nwbinspector + import nwbinspector from pynwb import NWBHDF5IO from tqdm_publisher import TQDMProgressSubscriber @@ -1561,8 +1561,7 @@ def on_progress_update(message): def inspect_all(url, payload) -> dict: from pickle import PicklingError - from nwbinspector.inspector_tools import format_messages, get_report_header - from nwbinspector.nwbinspector import InspectorOutputJSONEncoder + import nwbinspector try: messages = _inspect_all(url, payload) From a74affe58ac5c68674a18aa65bc4ccac065dfa3a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:55:13 +0000 Subject: [PATCH 07/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/pyflask/manageNeuroconv/manage_neuroconv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyflask/manageNeuroconv/manage_neuroconv.py b/src/pyflask/manageNeuroconv/manage_neuroconv.py index 824f8c47b..b284f4372 100644 --- a/src/pyflask/manageNeuroconv/manage_neuroconv.py +++ b/src/pyflask/manageNeuroconv/manage_neuroconv.py @@ -1457,8 +1457,8 @@ def _inspect_file_per_job( request_id: Optional[str] = None, ) -> list: - import requests import nwbinspector + import requests from pynwb import NWBHDF5IO from tqdm_publisher import TQDMProgressSubscriber From 6e974d9a6010b15000db35fb79811fe5021cbc6f Mon Sep 17 00:00:00 2001 From: Cody Baker <51133164+CodyCBakerPhD@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:00:37 -0400 Subject: [PATCH 08/13] fix report header --- src/pyflask/manageNeuroconv/manage_neuroconv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyflask/manageNeuroconv/manage_neuroconv.py b/src/pyflask/manageNeuroconv/manage_neuroconv.py index b284f4372..3faa5b2a1 100644 --- a/src/pyflask/manageNeuroconv/manage_neuroconv.py +++ b/src/pyflask/manageNeuroconv/manage_neuroconv.py @@ -1574,7 +1574,7 @@ def inspect_all(url, payload) -> dict: except Exception as exception: raise exception - header = get_report_header() + header = nwbinspector._formatting._get_report_header() header["NWBInspector_version"] = str(header["NWBInspector_version"]) json_report = dict(header=header, messages=messages, text="\n".join(format_messages(messages=messages))) From 53a93a6d4ff6b0ebf952409a86ae06776a0de13e Mon Sep 17 00:00:00 2001 From: Cody Baker <51133164+CodyCBakerPhD@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:21:11 -0400 Subject: [PATCH 09/13] fix import --- src/pyflask/manageNeuroconv/manage_neuroconv.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pyflask/manageNeuroconv/manage_neuroconv.py b/src/pyflask/manageNeuroconv/manage_neuroconv.py index 3faa5b2a1..aadfc52ad 100644 --- a/src/pyflask/manageNeuroconv/manage_neuroconv.py +++ b/src/pyflask/manageNeuroconv/manage_neuroconv.py @@ -1576,9 +1576,9 @@ def inspect_all(url, payload) -> dict: header = nwbinspector._formatting._get_report_header() header["NWBInspector_version"] = str(header["NWBInspector_version"]) - json_report = dict(header=header, messages=messages, text="\n".join(format_messages(messages=messages))) + json_report = dict(header=header, messages=messages, text="\n".join(nwbinspector.format_messages(messages=messages))) - return json.loads(json.dumps(obj=json_report, cls=InspectorOutputJSONEncoder)) + return json.loads(json.dumps(obj=json_report, cls=nwbinspector.InspectorOutputJSONEncoder)) def _aggregate_symlinks_in_new_directory(paths, reason="", folder_path=None) -> Path: From 8d23e8fd5269e22fe3e1d36bfe4e21d6fbbcf032 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 17:21:29 +0000 Subject: [PATCH 10/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/pyflask/manageNeuroconv/manage_neuroconv.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pyflask/manageNeuroconv/manage_neuroconv.py b/src/pyflask/manageNeuroconv/manage_neuroconv.py index aadfc52ad..a9fb3ab7d 100644 --- a/src/pyflask/manageNeuroconv/manage_neuroconv.py +++ b/src/pyflask/manageNeuroconv/manage_neuroconv.py @@ -1576,7 +1576,9 @@ def inspect_all(url, payload) -> dict: header = nwbinspector._formatting._get_report_header() header["NWBInspector_version"] = str(header["NWBInspector_version"]) - json_report = dict(header=header, messages=messages, text="\n".join(nwbinspector.format_messages(messages=messages))) + json_report = dict( + header=header, messages=messages, text="\n".join(nwbinspector.format_messages(messages=messages)) + ) return json.loads(json.dumps(obj=json_report, cls=nwbinspector.InspectorOutputJSONEncoder)) From 20aaeae88d4340fe6aee4c32fe2e51117324ded6 Mon Sep 17 00:00:00 2001 From: Cody Baker <51133164+CodyCBakerPhD@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:32:07 -0400 Subject: [PATCH 11/13] update notification email --- .github/workflows/daily_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/daily_tests.yml b/.github/workflows/daily_tests.yml index db774a852..70b726091 100644 --- a/.github/workflows/daily_tests.yml +++ b/.github/workflows/daily_tests.yml @@ -53,6 +53,6 @@ jobs: username: ${{ secrets.MAIL_USERNAME }} password: ${{ secrets.MAIL_PASSWORD }} subject: NWB GUIDE Daily Test Failure - to: ${{ secrets.DAILY_FAILURE_EMAIL_LIST }} + to: cody.c.baker.phd@gmail.com from: NWB Guide Daily Tests body: "The daily tests workflow failed, please check the status at https://github.com/NeurodataWithoutBorders/nwb-guide/actions/workflows/daily_tests.yml" From 8c50f7adb15f4b52adcd5db0db0ca96817d5d121 Mon Sep 17 00:00:00 2001 From: Cody Baker <51133164+CodyCBakerPhD@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:35:04 -0400 Subject: [PATCH 12/13] fix new imports --- .../manageNeuroconv/manage_neuroconv.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/pyflask/manageNeuroconv/manage_neuroconv.py b/src/pyflask/manageNeuroconv/manage_neuroconv.py index fd529f902..a9fb3ab7d 100644 --- a/src/pyflask/manageNeuroconv/manage_neuroconv.py +++ b/src/pyflask/manageNeuroconv/manage_neuroconv.py @@ -648,7 +648,7 @@ def on_recording_interface(name, recording_interface): def get_check_function(check_function_name: str) -> callable: """Function used to fetch an arbitrary NWB Inspector function.""" - from nwbinspector.nwbinspector import configure_checks, load_config + from nwbinspector import configure_checks, load_config dandi_check_list = configure_checks(config=load_config(filepath_or_keyword="dandi")) dandi_check_registry = {check.__name__: check for check in dandi_check_list} @@ -662,7 +662,7 @@ def get_check_function(check_function_name: str) -> callable: def run_check_function(check_function: callable, arg: dict) -> dict: """.Function used to run an arbitrary NWB Inspector function.""" - from nwbinspector.register_checks import Importance, InspectorMessage + from nwbinspector import Importance, InspectorMessage output = check_function(arg) if isinstance(output, InspectorMessage): @@ -718,7 +718,7 @@ def validate_metadata( timezone: Optional[str] = None, ) -> dict: """Function used to validate data using an arbitrary NWB Inspector function.""" - from nwbinspector.nwbinspector import InspectorOutputJSONEncoder + from nwbinspector import InspectorOutputJSONEncoder from pynwb.file import NWBFile, Subject check_function = get_check_function(check_function_name) @@ -1457,8 +1457,8 @@ def _inspect_file_per_job( request_id: Optional[str] = None, ) -> list: + import nwbinspector import requests - from nwbinspector import nwbinspector from pynwb import NWBHDF5IO from tqdm_publisher import TQDMProgressSubscriber @@ -1561,8 +1561,7 @@ def on_progress_update(message): def inspect_all(url, payload) -> dict: from pickle import PicklingError - from nwbinspector.inspector_tools import format_messages, get_report_header - from nwbinspector.nwbinspector import InspectorOutputJSONEncoder + import nwbinspector try: messages = _inspect_all(url, payload) @@ -1575,11 +1574,13 @@ def inspect_all(url, payload) -> dict: except Exception as exception: raise exception - header = get_report_header() + header = nwbinspector._formatting._get_report_header() header["NWBInspector_version"] = str(header["NWBInspector_version"]) - json_report = dict(header=header, messages=messages, text="\n".join(format_messages(messages=messages))) + json_report = dict( + header=header, messages=messages, text="\n".join(nwbinspector.format_messages(messages=messages)) + ) - return json.loads(json.dumps(obj=json_report, cls=InspectorOutputJSONEncoder)) + return json.loads(json.dumps(obj=json_report, cls=nwbinspector.InspectorOutputJSONEncoder)) def _aggregate_symlinks_in_new_directory(paths, reason="", folder_path=None) -> Path: From 4ce2ee61d7cbf48a026323ffe55f0052f0dd9c77 Mon Sep 17 00:00:00 2001 From: Cody Baker <51133164+CodyCBakerPhD@users.noreply.github.com> Date: Fri, 23 Aug 2024 14:27:10 -0400 Subject: [PATCH 13/13] Update .github/workflows/daily_tests.yml Co-authored-by: Ryan Ly --- .github/workflows/daily_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/daily_tests.yml b/.github/workflows/daily_tests.yml index 70b726091..71d488703 100644 --- a/.github/workflows/daily_tests.yml +++ b/.github/workflows/daily_tests.yml @@ -53,6 +53,6 @@ jobs: username: ${{ secrets.MAIL_USERNAME }} password: ${{ secrets.MAIL_PASSWORD }} subject: NWB GUIDE Daily Test Failure - to: cody.c.baker.phd@gmail.com + to: cody.c.baker.phd@gmail.com,rly@lbl.gov from: NWB Guide Daily Tests body: "The daily tests workflow failed, please check the status at https://github.com/NeurodataWithoutBorders/nwb-guide/actions/workflows/daily_tests.yml"