docs(spelling): Add codespell config + github action, run and fix a good number of typos (#3645)

This commit is contained in:
Yaroslav Halchenko 2023-09-12 07:40:38 -04:00 committed by GitHub
parent 64079e0720
commit 11ca5b6eae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
76 changed files with 128 additions and 100 deletions

6
.codespellrc Normal file
View File

@ -0,0 +1,6 @@
[codespell]
skip = .git,*.pdf,*.svg,yarn.lock,*.min.js,locales
# ignore words ending with … and some camelcased variables and names
ignore-regex = \b\S+…\S*|\b(doubleClick|afterAll|PostgresSQL)\b|\bWee, L\.|.*te.*Telugu.*
# some odd variables
ignore-words-list = datea,ser,childrens

22
.github/workflows/codespell.yml vendored Normal file
View File

@ -0,0 +1,22 @@
---
name: Codespell
on:
push:
branches: [master]
pull_request:
branches: [master]
permissions:
contents: read
jobs:
codespell:
name: Check for spelling errors
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Codespell
uses: codespell-project/actions-codespell@v2

View File

@ -54,7 +54,7 @@ const dicomSRExtension = {
},
getCommandsModule,
getSopClassHandlerModule,
// Include dynmically computed values such as toolNames not known till instantiation
// Include dynamically computed values such as toolNames not known till instantiation
getUtilityModule({ servicesManager }) {
return [
{

View File

@ -44,7 +44,7 @@ const isStructuredReportSeries = series => {
};
/**
* Checkes if series1 is newer than series2
* Checks if series1 is newer than series2
*
* @param {Object} series1 - Series Metadata 1
* @param {Object} series2 - Series Metadata 2

View File

@ -75,7 +75,7 @@ export function formatPN(name) {
* Gets compression type
*
* @param {number} imageId
* @returns {string} comrpession type.
* @returns {string} compression type.
*/
export function getCompression(imageId) {
const generalImageModule = metaData.get('generalImageModule', imageId) || {};

View File

@ -19,7 +19,7 @@ const setEnabledElement = (viewportId: string, element: HTMLElement, context?: s
};
/**
* Grabs the enabled element `dom` reference of an ative viewport.
* Grabs the enabled element `dom` reference of an active viewport.
*
* @return {HTMLElement} Active viewport element.
*/

View File

@ -30,7 +30,7 @@ export default function getInterleavedFrames(imageIds) {
!prefetchQueuedFilled.currentPositionUpToMaximum
) {
if (!prefetchQueuedFilled.currentPositionDownToMinimum) {
// Add imageId bellow
// Add imageId below
lowerImageIdIndex--;
imageIdsToPrefetch.push({
imageId: imageIds[lowerImageIdIndex],

View File

@ -69,8 +69,8 @@ export default class ContextMenuController {
event,
content: ContextMenu,
// This naming is part of hte uiDialogService convention
// Clicking outside simpy closes the dialog box.
// This naming is part of the uiDialogService convention
// Clicking outside simply closes the dialog box.
onClickOutside: () => this.services.uiDialogService.dismiss({ id: 'context-menu' }),
contentProps: {

View File

@ -5,7 +5,7 @@ import { Types } from '@ohif/core';
* menu item for display.
* An instance of SelectorProps is provided to the selector functions, which
* return true to include the item or false to exclude it.
* The point of this is to allow more specific conext menus which hide
* The point of this is to allow more specific context menus which hide
* non-relevant menu options, optimizing the speed of selection of menus
*/
export interface SelectorProps {
@ -69,7 +69,7 @@ export interface MenuItem {
// or more importantly, if the delegating subMenu will be included.
selector?: (props: SelectorProps) => boolean;
/** Adapts the item by filling in additional properties as requried */
/** Adapts the item by filling in additional properties as required */
adaptItem?: (item: MenuItem, props: ContextMenuProps) => UIMenuItem;
/** List of commands to run when this item's action is taken. */

View File

@ -343,7 +343,7 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) {
const addRetrieveBulkData = instance => {
const naturalized = naturalizeDataset(instance);
// if we konw the server doesn't use bulkDataURI, then don't
// if we know the server doesn't use bulkDataURI, then don't
if (!dicomWebConfig.bulkDataURI?.enabled) {
return naturalized;
}

View File

@ -9,7 +9,7 @@ const StudyMetaDataPromises = new Map();
*
* @param {Object} server Object with server configuration parameters
* @param {string} StudyInstanceUID The UID of the Study to be retrieved
* @param {boolean} enabledStudyLazyLoad Whether the study metadata should be loaded asynchronusly.
* @param {boolean} enabledStudyLazyLoad Whether the study metadata should be loaded asynchronously.
* @param {function} storeInstancesCallback A callback used to store the retrieved instance metadata.
* @param {Object} [filters] - Object containing filters to be applied on retrieve metadata process
* @param {string} [filter.seriesInstanceUID] - series instance uid to filter results against

View File

@ -99,7 +99,7 @@ export default function PanelMeasurementTable({
? 'Research Derived Series' // default
: promptResult.value; // provided value
// Re-use an existing series having the same series description to avoid
// Reuse an existing series having the same series description to avoid
// creating too many series instances.
const options = findSRWithSameSeriesDescription(SeriesDescription, displaySetService);
@ -236,7 +236,7 @@ function _getMappedMeasurements(measurementService) {
/**
* Map the measurements to the display text.
* Adds finding and site inforamtion to the displayText and/or label,
* Adds finding and site information to the displayText and/or label,
* and provides as 'displayText' and 'label', while providing the original
* values as baseDisplayText and baseLabel
*/

View File

@ -182,7 +182,7 @@ const commandsModule = ({
stateSyncReduce;
if (!protocolId) {
// Re-use the previous protocol id, and optionally stage
// Reuse the previous protocol id, and optionally stage
protocolId = hpInfo.protocolId;
if (stageId === undefined && stageIndex === undefined) {
stageIndex = hpInfo.stageIndex;

View File

@ -3,7 +3,7 @@ import { StateSyncService } from '@ohif/core';
/**
* This find or create viewport is paired with the reduce results from
* below, and the action of this viewport is to look for previously filled
* viewports, and to re-use by position id. If there is no filled viewport,
* viewports, and to reuse by position id. If there is no filled viewport,
* then one can be re-used from the display set if it isn't going to be displayed.
* @param hangingProtocolService - bound parameter supplied before using this
* @param viewportsByPosition - bound parameter supplied before using this

View File

@ -42,7 +42,7 @@ function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager)
const instance = instances[0];
// TODO ! Consumption of DICOMMicroscopySRSOPClassHandler to a derived dataset or normal dataset?
// TOOD -> Easy to swap this to a "non-derived" displaySet, but unfortunately need to put it in a different extension.
// TODO -> Easy to swap this to a "non-derived" displaySet, but unfortunately need to put it in a different extension.
const naturalizedDataset = DicomMetadataStore.getSeries(
instance.StudyInstanceUID,
instance.SeriesInstanceUID

View File

@ -78,7 +78,7 @@ export function formatPN(name) {
* Gets compression type
*
* @param {number} imageId
* @returns {string} comrpession type.
* @returns {string} compression type.
*/
export function getCompression(imageId) {
const generalImageModule = cornerstone.metaData.get('generalImageModule', imageId) || {};

View File

@ -48,7 +48,7 @@ export default class MicroscopyService extends PubSubService {
}
/**
* Cleares all the annotations and managed viewers, setting the manager state
* Clears all the annotations and managed viewers, setting the manager state
* to its initial state
*/
clear() {
@ -357,7 +357,7 @@ export default class MicroscopyService extends PubSubService {
/**
* Removes the given third-party viewer API's object from the managed viewers
* and cleares all its event subscriptions
* and clears all its event subscriptions
*
* @param {Object} viewer Third-party viewer API's object to be removed
*/

View File

@ -109,7 +109,7 @@ class ViewerManager extends PubSubService {
}
/**
* Cleares all the relevant event handlers for the third-party API
* Clears all the relevant event handlers for the third-party API
*/
unregisterEvents() {
this.container.removeEventListener(ApiEvents.ROI_ADDED, this.onRoiAdded);
@ -205,7 +205,7 @@ class ViewerManager extends PubSubService {
* @param {String} label The label of the annotation.
*/
addRoiGraphicWithLabel(roiGraphic, label) {
// NOTE: Dicom Microscopy Viewer will override styles for "Text" evalutations
// NOTE: Dicom Microscopy Viewer will override styles for "Text" evaluations
// to hide all other geometries, we are not going to use its label.
// if (label) {
// if (!roiGraphic.properties) roiGraphic.properties = {};

View File

@ -151,7 +151,7 @@ class RoiAnnotation extends PubSubService {
/**
* Returns the geometry type of the annotation concatenated with the label
* defined for the annotation.
* Difference with getDetailedLabel() is that this will return empty string for empy
* Difference with getDetailedLabel() is that this will return empty string for empty
* label.
*
* @returns {String} Text with geometry type and label

View File

@ -31,7 +31,7 @@ export default async function loadSR(
// NOTE: When saving Microscopy SR, we are attaching identifier property
// to each ROI, and when read for display, it is coming in as "TEXT"
// evaluation.
// As the Dicom Microscopy Viewer will override styles for "Text" evalutations
// As the Dicom Microscopy Viewer will override styles for "Text" evaluations
// to hide all other geometries, we are going to manually remove that
// evaluation item.
const roi = rois[i];

View File

@ -1,5 +1,5 @@
//We are keeping the hardcoded results values for the study list tests
//this is intended to be running in a controled docker environment with test data.
//this is intended to be running in a controlled docker environment with test data.
describe('OHIF Study List', function () {
context('Desktop resolution', function () {
beforeEach(function () {

View File

@ -61,7 +61,7 @@ export function initStudyListAliasesOnDesktop() {
cy.get('[data-cy="study-list-results"] > tr').as('searchResult2');
// We can't use data attributes (e.g. data--cy) for these since
// they are using third party libraires (i.e. react-dates, react-select)
// they are using third party libraries (i.e. react-dates, react-select)
cy.get('#date-range-studyDate-start-date').as('studyListStartDate');
cy.get('#date-range-studyDate-end-date').as('studyListEndDate');
cy.get('#input-modalities').as('modalities');

View File

@ -1,6 +1,6 @@
# Specific to our deploy-preview
# Our docs are published using CircleCI + GitBook
# Confgure redirects using netlify.toml
# Configure redirects using netlify.toml
# Spa
/* /index.html 200

View File

@ -2,7 +2,7 @@ const _ = require('lodash');
const originalConsoleError = console.error;
// JSDom's CSS Parser has limited support for certain features
// This supresses error warnings caused by it
// This suppresses error warnings caused by it
console.error = function (msg) {
if (_.startsWith(msg, 'Error: Could not parse CSS stylesheet')) {
return;

View File

@ -89,7 +89,7 @@ async function appInit(appConfigOrFunc, defaultExtensions, defaultModes) {
const loadedModes = await loadModules([...(appConfig.modes || []), ...defaultModes]);
// This is the name for the loaded istance object
// This is the name for the loaded instance object
appConfig.loadedModes = [];
const modesById = new Set();
for (let i = 0; i < loadedModes.length; i++) {

View File

@ -42,7 +42,7 @@ implementation][react-viewer].
### Install
> This library is pre- v1.0. All realeases until a v1.0 have the possibility of
> This library is pre- v1.0. All releases until a v1.0 have the possibility of
> introducing breaking changes. Please depend on an "exact" version in your
> projects to prevent issues caused by loose versioning.

View File

@ -498,7 +498,7 @@ const WADO_IMAGE_LOADER_TAGS = {
OVERLAY_PLANE_MODULE: 'overlayPlaneModule',
PATIENT_DEMOGRAPHIC_MODULE: 'patientDemographicModule',
// react-cornerstone-viewport specifc
// react-cornerstone-viewport specific
PATIENT_MODULE: 'patientModule',
GENERAL_IMAGE_MODULE: 'generalImageModule',
GENERAL_STUDY_MODULE: 'generalStudyModule',

View File

@ -362,7 +362,7 @@ export default class HangingProtocolService extends PubSubService {
* @param params is the dataset to run the hanging protocol on.
* @param params.activeStudy is the "primary" study to hang This may or may
* not be displayed by the actual viewports.
* @param params.studies is the list of studies to hang. If absent, will re-use the previous set.
* @param params.studies is the list of studies to hang. If absent, will reuse the previous set.
* @param params.displaySets is the list of display sets associated with
* the studies to display in viewports.
* @param protocol is a specific protocol to apply.

View File

@ -517,7 +517,7 @@ class MeasurementService extends PubSubService {
};
if (oldMeasurement) {
// TODO: Ultimately, each annotation should have a selected flag right from the soure.
// TODO: Ultimately, each annotation should have a selected flag right from the source.
// For now, it is just added in OHIF here and in setMeasurementSelected.
this.measurements.set(internalUID, newMeasurement);
if (isUpdate) {

View File

@ -6,7 +6,7 @@ const EVENTS = {};
type Obj = Record<string, unknown>;
type StateConfig = {
/** clearOnModeExit defines state configuraion that is cleared automatically on
/** clearOnModeExit defines state configuration that is cleared automatically on
* exiting a mode. This clearing occurs after the mode onModeExit,
* so it is possible to preserve desired state during exit to be restored
* later.

View File

@ -152,7 +152,7 @@ export default class ToolbarService extends PubSubService {
// unsubscribe = commandsManager.runCommand(commandName, commandOptions);
// }
// // Storing the unsubscribe for later reseting
// // Storing the unsubscribe for later resetting
// if (unsubscribe && typeof unsubscribe === 'function') {
// if (this.unsubscriptions.indexOf(unsubscribe) === -1) {
// this.unsubscriptions.push(unsubscribe);

View File

@ -257,7 +257,7 @@ export type ProtocolNotifications = {
* It is a set of rules about when the protocol can be applied at all,
* as well as a set of stages that represent indivividual views.
* Additionally, the display set selectors are used to choose from the existing
* display sets. The hanging protcol definition here does NOT allow
* display sets. The hanging protocol definition here does NOT allow
* redefining the display sets to use, but only selects the views to show.
*/
export type Protocol = {

View File

@ -8,7 +8,7 @@ export default class Queue {
/**
* Creates a new "proxy" function associated with the current execution queue
* instance. When the returned function is invoked, the queue limit is checked
* to make sure the limit of scheduled tasks is repected (throwing an
* to make sure the limit of scheduled tasks is respected (throwing an
* exception when the limit has been reached and before calling the original
* function). The original function is only invoked after all the previously
* scheduled tasks have finished executing (their returned promises have

View File

@ -36,11 +36,11 @@ function addToList(list, ...values) {
* once for each leaf-node of the tree. The ancestors of the leaf-node being
* visited are passed to the callback function along with the leaf-node in
* the exact same order they appear on the tree (from root to leaf);
* @ For example, if the hierachy `a > b > c` appears on the tree ("a" being
* @ For example, if the hierarchy `a > b > c` appears on the tree ("a" being
* the root and "c" being the leaf) the callback function will be called as:
* callback('a', 'b', 'c');
* @param {Array} list The hierarchical list to be iterated
* @param {function} callback The callback which will be exected once for
* @param {function} callback The callback which will be executed once for
* each leaf-node of the hierarchical list;
* @returns {Array} Returns the provided list or null for bad arguments;
*/

View File

@ -6,7 +6,7 @@ export class ObjectPath {
* @param path {String} A string representing the property to be set, e.g. "user.study.series.timepoint".
* @param value {Any} The value of the property that will be set.
* @return {Boolean} Returns "true" on success, "false" if any intermediate component of the supplied path
* ... is not a valid Object, in which case the property cannot be set. No excpetions are thrown.
* ... is not a valid Object, in which case the property cannot be set. No exceptions are thrown.
*/
static set(object, path, value) {
let components = ObjectPath.getPathComponents(path),

View File

@ -114,7 +114,7 @@ function finish(task) {
/**
* Generate a summarized snapshot of the current status of the given task List
* @param {Object} list The List instance to be scanned
* @returns {Object} An obeject representing the summarized status of the list
* @returns {Object} An object representing the summarized status of the list
*/
function getOverallProgress(list) {
const status = createStatus();
@ -223,7 +223,7 @@ function getTaskByName(list, name) {
* @param {Object} list The List instance to which the observer will be appended
* @param {Function} observer The observer (function) that will be executed
* every time a change happens within the list
* @returns {boolean} Returns true on success and false otherewise
* @returns {boolean} Returns true on success and false otherwise
*/
function addObserver(list, observer) {
if (isList(list) && Array.isArray(list.observers) && typeof observer === 'function') {
@ -237,7 +237,7 @@ function addObserver(list, observer) {
* Removes an observer (callback function) from a given List instance
* @param {Object} list The instance List from which the observer will removed
* @param {Function} observer The observer function to be removed
* @returns {boolean} Returns true on success and false otherewise
* @returns {boolean} Returns true on success and false otherwise
*/
function removeObserver(list, observer) {
if (isList(list) && Array.isArray(list.observers) && list.observers.length > 0) {

View File

@ -1,4 +1,4 @@
/** Splits a list of stirngs by commas within the strings */
/** Splits a list of strings by commas within the strings */
const splitComma = (strings: string[]): string[] => {
if (!strings) {
return null;

View File

@ -18,7 +18,7 @@ Key features:
Offers a Data Source API for communicating with archives over proprietary API
formats.
- Provides a plugin framework for creating task-based workflow modes which can
re-use core functionality.
reuse core functionality.
- Beautiful user interface (UI) designed with extensibility in mind. UI
components available in a reusable component library built with React.js and
Tailwind CSS

View File

@ -117,7 +117,7 @@ Here are a list of some options available:
decoding. Defaults to minimum of `navigator.hardwareConcurrency` and
what is specified by `maxNumberOfWebWorkers`. Some windows machines require smaller values.
- `acceptHeader` : accept header to request specific dicom transfer syntax ex : [ 'multipart/related; type=image/jls; q=1', 'multipart/related; type=application/octet-stream; q=0.1' ]
- `requestTransferSyntaxUID` : Request a specific Tansfer syntax from dicom web server ex: 1.2.840.10008.1.2.4.80 (applyed only if acceptHeader is not set)
- `requestTransferSyntaxUID` : Request a specific Tansfer syntax from dicom web server ex: 1.2.840.10008.1.2.4.80 (applied only if acceptHeader is not set)
- `omitQuotationForMultipartRequest`: Some servers (e.g., .NET) require the `multipart/related` request to be sent without quotation marks. Defaults to `false`. If your server doesn't require this, then setting this flag to `true` might improve performance (by removing the need for preflight requests). Also note that
if auth headers are used, a preflight request is required.
- `maxNumRequests`: The maximum number of requests to allow in parallel. It is an object with keys of `interaction`, `thumbnail`, and `prefetch`. You can specify a specific number for each type.
@ -178,7 +178,7 @@ if auth headers are used, a preflight request is required.
- `dangerouslyUseDynamicConfig`: Dynamic config allows user to pass `configUrl` query string. This allows to load config without recompiling application. If the `configUrl` query string is passed, the worklist and modes will load from the referenced json rather than the default .env config. If there is no `configUrl` path provided, the default behaviour is used and there should not be any deviation from current user experience.<br/>
Points to consider while using `dangerouslyUseDynamicConfig`:<br/>
- User have to enable this feature by setting `dangerouslyUseDynamicConfig.enabled:true`. By default it is `false`.
- Regex helps to avoid easy exploit. Dafault is `/.*/`. Setup your own regex to choose a specific source of configuration only.
- Regex helps to avoid easy exploit. Default is `/.*/`. Setup your own regex to choose a specific source of configuration only.
- System administrators can return `cross-origin: same-origin` with OHIF files to disallow any loading from other origin. It will block read access to resources loaded from a different origin to avoid potential attack vector.
- Example config:
```js

View File

@ -109,7 +109,7 @@ You can open more than one study in the Viewer by adding the `StudyInstanceUIDs`
:::tip
You can ues this feature to open a current and prior study in the Viewer.
You can use this feature to open a current and prior study in the Viewer.
Read more in the [Hanging Protocol Module](../platform/extensions/modules/hpModule.md#matching-on-prior-study-with-uid) section. You can also use commas to separate
values.

View File

@ -239,7 +239,7 @@ To create a self-signed certificate:
|Country Name (2 letter code) [AU]|
|State or Province Name (full name) [Some-State]|
|Locality Name (eg, city) []|
|Organization Name (eg, company) [Internet Widgits Pty Ltd]|
|Organization Name (eg, company) [Internet Widgets Pty Ltd]|
|Organizational Unit Name (eg, section) []|
|Common Name (e.g. server FQDN or YOUR name) []|
|Email Address []|

View File

@ -93,7 +93,7 @@ support it yet, but it is gaining wider adoption.
If you have an existing archive and intend to host the OHIF Viewer at the same
domain name as your archive, then connecting the two is as simple as following
the steps layed out in our
the steps laid out in our
[Configuration Essentials Guide](./../configuration/configurationFiles.md).
#### What if I don't have an imaging archive?
@ -297,7 +297,7 @@ You can find an example of this setup in our
In general, we recommend using the "Authorization Code Flow" ( [see
`response_type=code` here][code-flows]); however, the "Implicit Flow" ( [see
`response_type=token` here][code-flows]) can work if additonal precautions are
`response_type=token` here][code-flows]) can work if additional precautions are
taken. If the flow you've chosen produces a JWT Token, it's validity can be used
to secure access to your Image Archive as well.

View File

@ -101,7 +101,7 @@ quality and test coverage must not be changed by a significant margin. For some
repositories, visual screenshot-based tests are also included, and video
recordings of end-to-end tests are stored for later review.
[You can read more about our continous integration efforts here](/development/continous-integration.md)
[You can read more about our continuous integration efforts here](/development/continuous-integration.md)
## Releases

View File

@ -935,7 +935,7 @@ We have gone through extensive re-design of each part of the UI, and we have als
<details>
<summary>
I have a huge complex styles using native CSS, how can I re-use them?
I have a huge complex styles using native CSS, how can I reuse them?
</summary>
You can leverage the power of Tailwind CSS (https://TailwindCSS.com/) in OHIF v3 to reuse your existing styles. Tailwind CSS is a utility-first approach, allowing you to create reusable CSS classes by composing utility classes together. You can migrate your existing styles to Tailwind CSS by breaking them down into utility classes and utilizing the extensive set of predefined utilities provided by Tailwind CSS.

View File

@ -51,7 +51,7 @@ export default {
*/
id,
// Lifecyle
// Lifecycle
preRegistration() { /* */ },
onModeEnter() { /* */ },
onModeExit() { /* */ },
@ -182,7 +182,7 @@ Use the provided `cli` to add/remove/install/uninstall extensions. Read more [he
The final registration and import of the extensions happen inside a non-tracked file `pluginImport.js` (this file is also for internal use only).
After an extension gets registered withing the `viewer`,
After an extension gets registered within the `viewer`,
each [module](#modules) defined by the extension becomes available to the modes
via the `ExtensionManager` by requesting it via its id.
[Read more about Extension Manager](#extension-manager)
@ -206,7 +206,7 @@ used to initialize data.
[`onModeExit`](./lifecycle#onModeExit): Similarly to onModeEnter, this hook is
called when navigating away from a mode, or before a modes data or datasource
is changed. This can be used to cache data for re-use later, but since it
is changed. This can be used to cache data for reuse later, but since it
isn't known which mode will be entered next, the state after exiting should be
clean, that is, the same as the state on a clean start. This is called BEFORE
service clean up, and after mode specific onModeExit handling.

View File

@ -120,7 +120,7 @@ function ViewerLayout({
commandsManager={commandsManager}
/>
{/* Rigth SIDEPANELS */}
{/* Right SIDEPANELS */}
<SidePanel
side="right"
defaultComponentOpen={rightPanelComponents[0].name}

View File

@ -182,7 +182,7 @@ the following file tree:
index.js
| UK
|-- Buttons.js
indes.js
index.js
| US
|-- Buttons.js
index.js
@ -347,7 +347,7 @@ https://viewer.ohif.org/viewer/1.2.840.113619.2.5.1762583153.215519.978957063.78
Chinese:
https://viewer.ohif.org/viewer/1.2.840.113619.2.5.1762583153.215519.978957063.78?lng=zh
Portugese:
Portuguese:
https://viewer.ohif.org/viewer/1.2.840.113619.2.5.1762583153.215519.978957063.78?lng=pt-BR
Here are some links you can use to sign up to help translate. All you have to do

View File

@ -191,7 +191,7 @@ export default mode;
### Consuming Extensions
As mentioned in the [Extensions](../extensions/index.md) section, in `OHIF-v3`
developers write their extensions to create re-usable functionalities that later
developers write their extensions to create reusable functionalities that later
can be used by `modes`. Now, it is time to describe how the registered
extensions will get utilized for a workflow mode via its `id`.

View File

@ -45,7 +45,7 @@ export default function getHangingProtocolModule() {
}
```
Within the protocol itself, the structure is layed out as described in the HangingProtocol.ts
Within the protocol itself, the structure is laid out as described in the HangingProtocol.ts
type definition, starting with `Protocol`. See the type definition for more details.
## Events
@ -71,7 +71,7 @@ the stage activate. The status values are:
* enabled - meaning that the stage is fully applicable
* passive - meaning that the stage can be applied, but might be missing details
* disabled - meaning that the study has insuffient information for this stage
* disabled - meaning that the study has insufficient information for this stage
The default values for no `stageActivation` are to assume that `enabled` has `minViewports` of 1,
and `passive` has `minViewports=0`. That is, enable the stage if at least one
@ -118,7 +118,7 @@ stageActivation: {
stable as to exactly what this returns, as internal details can change.
- `getState`: Returns the currently applied protocol ID, stage index and active study UID.
This information is storable/useable as state information to be used elsewhere.
This information is storable/usable as state information to be used elsewhere.
- `getDefaultProtocol`: Returns the default protocol to apply.

View File

@ -47,7 +47,7 @@ grid store state as a modal state.
```
### getState
The `getState` call returns an object containing all of the reigstered states,
The `getState` call returns an object containing all of the registered states,
by id. The values can be read directly, but should not be modified.
### reduce

View File

@ -43,7 +43,7 @@ automatically when the extension or mode is loaded.
In the `value` of each customizations, you will define customization prototype(s).
These customization prototype(s) can be considered like "Prototype" in Javascript.
These can be used to extend the customization definitions from configurations.
Default cutomizations will be often used to define all the customization prototypes,
Default customizations will be often used to define all the customization prototypes,
as they will be loaded automatically along with the defining extension or mode.
@ -178,7 +178,7 @@ onModeEnter() {
customizationType: 'ohif.cornerstoneOverlay',
// The cornerstoneOverlay definition requires an items list here.
items: [
// Custom definitions for hte context menu here.
// Custom definitions for the context menu here.
],
};
customizationService.addModeCustomizations(bottomRight);
@ -285,7 +285,7 @@ uses it's own internal class names.
* Name: 'class:StudyBrowser'
* Attributes:
** `true` for the is active true text color
** `false` fo rhte is active false text color.
** `false` for the is active false text color.
** Values are button colors, from the Button class, eg default, white, black
## customRoutes

View File

@ -84,10 +84,10 @@ Check out the complete press announcement [here](https://ohif.org/newsletters/20
- New UI components have been built with Tailwind CSS
- Addition of workflow modes
- Often, medical imaging use cases involves lots of specific workflows that
re-use functionalities. We have added the capability of workflow modes, that
reuse functionalities. We have added the capability of workflow modes, that
enable people to customize user interface and configure application for
specific workflow.
- The idea is to re-use the functionalities that extensions provide and create
- The idea is to reuse the functionalities that extensions provide and create
a workflow. Brain segmentation workflow is different from prostate
segmentation in UI for sure; however, they share the segmentation tools that
can be re-used.

View File

@ -21,7 +21,7 @@ Free, Open Source Tools for Research: MONAI and OHIF Viewer
We participated in the 38th Project Week with three projects around OHIF. [[Website](https://projectweek.na-mic.org/PW38_2023_GranCanaria/)]
- PolySeg representations for OHIF Viewer ([link](https://projectweek.na-mic.org/PW38_2023_GranCanaria/Projects/OHIF_PolySeg/))
- Cross study sychronizer for OHIF Crosshair ([link](https://projectweek.na-mic.org/PW38_2023_GranCanaria/Projects/OHIF_SyncCrosshair/))
- Cross study synchronizer for OHIF Crosshair ([link](https://projectweek.na-mic.org/PW38_2023_GranCanaria/Projects/OHIF_SyncCrosshair/))
- DATSCAN Viewer implementation in OHIF ([link](https://projectweek.na-mic.org/PW38_2023_GranCanaria/Projects/OHIF_DATSCAN/))

View File

@ -19,7 +19,7 @@ Complex issues specific to your organization/situation are still okay to post,
but they're less likely to receive a response. Unfortunately, we have limited
resources and must be judicious with how we allocate them. If you find yourself
in this situation and in need of assistance, it may be in your best interest to
persue paid support.
pursue paid support.
If you need additional help, please [reach out to us](https://ohif.org/get-support) to get more information on
how we can help you.

View File

@ -54,7 +54,7 @@ This package also stores Meteor components for the interactive lesion table used
### User (*ohif-user*)
### Basic Viewer Components (*ohif-viewerbase*)
This is the largest package in the repository. It holds a large number of re-usable Meteor components that are used to build both the OHIF Viewer and Lesion Tracker.
This is the largest package in the repository. It holds a large number of reusable Meteor components that are used to build both the OHIF Viewer and Lesion Tracker.
### WADO Proxy (*ohif-wadoproxy*)
Proxy for CORS

View File

@ -5,4 +5,4 @@ At the time of project conception, Meteor was a simple way to begin using bleedi
## Do you have any plans to stop using Meteor?
We have considered migrating templates from Blaze (http://blazejs.org/) to React (https://reactjs.org/) or Vue (https://vuejs.org/), simply because these decouple the view layer from the remainder of the application. Blaze currently lacks [Stand-alone Support](http://blazejs.org/#Better-Stand-alone-Support) which means that our templates are not re-usable outside of a Meteor application. This is certainly a downside, but the resource cost to migrate every template is significant.
We have considered migrating templates from Blaze (http://blazejs.org/) to React (https://reactjs.org/) or Vue (https://vuejs.org/), simply because these decouple the view layer from the remainder of the application. Blaze currently lacks [Stand-alone Support](http://blazejs.org/#Better-Stand-alone-Support) which means that our templates are not reusable outside of a Meteor application. This is certainly a downside, but the resource cost to migrate every template is significant.

View File

@ -59,7 +59,7 @@ This diagram is a conceptual illustration of how the Viewer is architected.
1. (optional) `extensions` can be registered with `@ohif/core`'s
`ExtensionManager`
2. `@ohif/core` provides bussiness logic and a way for `@ohif/viewer` to access
2. `@ohif/core` provides business logic and a way for `@ohif/viewer` to access
registered extensions
3. The `@ohif/viewer` composes and provides data to components from our
component library (`@ohif/ui`)

View File

@ -99,7 +99,7 @@ support it yet, but it is gaining wider adoption.
If you have an existing archive and intend to host the OHIF Viewer at the same
domain name as your archive, then connecting the two is as simple as following
the steps layed out in our
the steps laid out in our
[Configuration Essentials Guide](./../configuring/index.md).
#### What if I don't have an imaging archive?
@ -273,7 +273,7 @@ You can find an example of this setup in our
In general, we recommend using the "Authorization Code Flow" ( [see
`response_type=code` here][code-flows]); however, the "Implicit Flow" ( [see
`response_type=token` here][code-flows]) can work if additonal precautions are
`response_type=token` here][code-flows]) can work if additional precautions are
taken. If the flow you've chosen produces a JWT Token, it's validity can be used
to secure access to your Image Archive as well.

View File

@ -75,7 +75,7 @@ directory. Our build process knows which configuration file to use based on the
and registered extension's features, are configured using this file.
The easiest way to apply your own configuration is to modify the `default.js`
file. For more advanced cofiguration options, check out our
file. For more advanced configuration options, check out our
[configuration essentials guide](/configuring/index.md).
## Next Steps

View File

@ -8,7 +8,7 @@ sidebar_position: 4
At a certain point, you may want others to have access to your instance of the
OHIF Viewer and its medical imaging data. This post covers one of many potential
setups that accomplish that. Please note, noticably absent is user account
setups that accomplish that. Please note, noticeably absent is user account
control.
Do not use this recipe to host sensitive medical data on the open web. Depending
@ -21,12 +21,12 @@ that builds on the lessons learned here.
Our two biggest hurdles when hosting our image archive and web client are:
- Risks related to exposing our PACS to the netowrk
- Risks related to exposing our PACS to the network
- Cross-Origin Resource Sharing (CORS) requests
### Handling Web Requests
We mittigate our first issue by allowing [Nginx][nginx] to handle incoming web
We mitigate our first issue by allowing [Nginx][nginx] to handle incoming web
requests. Nginx is open source software for web serving, reverse proxying,
caching, and more. It's designed for maximum performance and stability --
allowing us to more reliably serve content than Orthanc's built-in server can.

View File

@ -16,7 +16,7 @@ less product offerings.
While not required, it can simplify things to host your Web Viewer alongside
your image archive. Services with more robust product offerings, like
`Google Cloud`, `Microsoft's Azure`, and `Amazon Web Services (AWS)`, are able
to accomodate this setup.
to accommodate this setup.
_Drag-n-drop_

View File

@ -77,7 +77,7 @@ _Create Your First User_
- Email Verified: `ON`
- Click `Save`
- Click the `Credentials` Tab
- New Pasword: `test`
- New Password: `test`
- Password Confirmation: `test`
- Temporary: `OFF`
- Click: `Reset Password`

View File

@ -1,10 +1,10 @@
---
sidebar_position: 3
title: Continous Integration
title: Continuous Integration
---
# Continous Integration (CI)
# Continuous Integration (CI)
This repository uses `CircleCI` and `Netlify` for continous integration.
This repository uses `CircleCI` and `Netlify` for continuous integration.
## Deploy Previews

View File

@ -14,7 +14,7 @@ we make to the OHIF Viewer, then follow these steps:
- [Fork][fork-a-repo] the [OHIF/Viewers][ohif-viewers-repo] repository
- [Create a local clone][clone-a-repo] of your fork
- `git clone https://github.com/YOUR-USERNAME/Viewers`
- Add OHIF/Viewers as a [remote repository][add-remote-repo] labled `upstream`
- Add OHIF/Viewers as a [remote repository][add-remote-repo] labeled `upstream`
- Navigate to the cloned project's directory
- `git remote add upstream https://github.com/OHIF/Viewers.git`

View File

@ -44,7 +44,7 @@ choice for asserting an element's border color.
Modern tooling gives us this "for free". It can catch invalid regular
expressions, unused variables, and guarantee we're calling methods/functions
with the expected paramater types.
with the expected parameter types.
Example Tooling:

View File

@ -56,7 +56,7 @@ export default {
*/
id: 'example-extension',
// Lifecyle
// Lifecycle
preRegistration() { /* */ },
// Modules
getCommandsModule() { /* */ },

View File

@ -65,7 +65,7 @@ myCommandName: {
| Property | Type | Description |
| --------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| `commandFn` | func | The function to call when command is run. Receives `options` and `storeContexts`. |
| `storeContexts` | string[] | (optional) Expected state objects to be passed in as props. Located using `getAppState` fn defined at `CommandsManager`'s instatiation. |
| `storeContexts` | string[] | (optional) Expected state objects to be passed in as props. Located using `getAppState` fn defined at `CommandsManager`'s instantiation. |
| `options` | object | (optional) Arguments to pass at the time of calling to the `commandFn` |
| `context` | string[] or string | (optional) Overrides the `defaultContext`. Let's us know if command is currently "available" to be run. |
@ -150,7 +150,7 @@ It is up to the consuming application to define what contexts are possible, and
which ones are currently active. As extensions depend heavily on these, we will
likely publish guidance around creating contexts, and ways to override extension
defined contexts in the near future. If you would like to discuss potential
changes to how contexts work, please don't hesistate to createa new GitHub
changes to how contexts work, please don't hesitate to create new GitHub
issue.
[Some additional information on Contexts can be found here.](./../index.md#contexts)

View File

@ -64,7 +64,7 @@ The simplest definition has the following properties:
| `label` | User/display friendly to show in UI | \* |
| `icon` | A string name for an icon supported by the consuming application. | \* |
| `type` | Used to determine the button's component and behavior | `"setToolActive"`, `"command"` |
| `commandName` | (optional) The command to run when the button is used. | Any command registed by a `CommandModule` |
| `commandName` | (optional) The command to run when the button is used. | Any command registered by a `CommandModule` |
| `commandOptions` | (optional) Options to pass the target `commandName` | \* |
| `context` | (optional) Overrides module's `defaultContext` | Array of string context names |

View File

@ -34,7 +34,7 @@ fixes, and target their minimum JS support whenever possible.
An example of a polyfill is that you expect `Array.prototype.filter` to exist,
but for some reason, the browser that's being used has not implemented that
language feature yet. Our earlier transpilation will rectify _syntax_
discrepencies, but unimplemented features require a "temporary" implementation.
discrepancies, but unimplemented features require a "temporary" implementation.
That's where polyfills step in.
You can utilize a service like [polyfill.io](https://polyfill.io/v3/) to

View File

@ -4,7 +4,7 @@ sidebar_position: 2
# Scope of Project
The OHIF Viewer is a web based medical imaging viewer. This allows it to be used
on almost any device, anywhere. The OHIF Viewer is what is commonly reffered to
on almost any device, anywhere. The OHIF Viewer is what is commonly referred to
as a ["Dumb Client"][simplicable]
> A dumb client is software that fully depends on a connection to a server or
@ -12,7 +12,7 @@ as a ["Dumb Client"][simplicable]
> software offers nothing useful. - [simplicable.com][simplicable]
While the Viewer persists some data, it's scope is limited to caching things
like user preferences and previous query paramaters. Because of this, the Viewer
like user preferences and previous query parameters. Because of this, the Viewer
has been built to be highly configurable to work with almost any web accessible
data source.
@ -56,7 +56,7 @@ the OHIF Viewer as a desktop application.
_Does the OHIF Viewer work with the local filesystem?_
It is possible to accomplish this through extensions; however, for an user
experience that accomodates a large number of studies, you would likely need to
experience that accommodates a large number of studies, you would likely need to
package the OHIF Viewer as an [Electron app][electron].
<!--

View File

@ -19,7 +19,7 @@ Complex issues specific to your organization/situation are still okay to post,
but they're less likely to receive a response. Unfortunately, we have limited
resources and must be judicious with how we allocate them. If you find yourself
in this situation and in need of assistance, it may be in your best interest to
persue paid support.
pursue paid support.
## Commercial Support

View File

@ -100,7 +100,7 @@ quality and test coverage must not changed by a significant margin. For some
repositories, visual screenshot-based tests are also included, and video
recordings of end-to-end tests are stored for later review.
[You can read more about our continous integration efforts here](/development/continous-integration.md)
[You can read more about our continuous integration efforts here](/development/continuous-integration.md)
## Releases

View File

@ -93,7 +93,7 @@ export default withTranslation('MyNameSpace')(MyComponent);
> Important: if you are using React outside the OHIF Viewer, check the
> [I18nextProvider](#using-outside-of-ohif-viewer) section, `withTranslation`
> HOC doesnt works without a I18nextProvider
> HOC doesn't works without a I18nextProvider
#### Using Hooks
@ -187,7 +187,7 @@ the following file tree:
index.js
| UK
|-- Buttons.js
indes.js
index.js
| US
|-- Buttons.js
index.js

View File

@ -6,7 +6,7 @@ const TableCell = ({
children,
className,
colSpan,
// ignored because we don't wan't to expose this prop
// ignored because we don't want to expose this prop
// eslint-disable-next-line react/prop-types
cellsNum,
isTableHead,

View File

@ -7,7 +7,7 @@ import classNames from 'classnames';
/*
* This is a workaround to import things from ohif/core as docz does
* not allow us to access window element and @ohif/core does use it once
* we import to instanciate cornerstone
* we import to instantiate cornerstone
*/
import guid from './../../../core/src/utils/guid';