From 7865d39fbbdb50f310ddd5f9ff3fdf5266583dc7 Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 15:27:57 -0400 Subject: [PATCH 01/13] Add diagram to source --- img/architecture-diagram.png | Bin 0 -> 38068 bytes img/designs/architecture-diagram | Bin 0 -> 27048 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/architecture-diagram.png create mode 100644 img/designs/architecture-diagram diff --git a/img/architecture-diagram.png b/img/architecture-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..1c43d010826825b8293ffe49587b7d9a68bdd699 GIT binary patch literal 38068 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

>hT6;7h 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 E0QJOQxc~qF literal 0 HcmV?d00001 diff --git a/img/designs/architecture-diagram b/img/designs/architecture-diagram new file mode 100644 index 0000000000000000000000000000000000000000..bbf6cf58b7ab7ac3dbb30c42e0287eab4e35c244 GIT binary patch literal 27048 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 m7*P2Cz%ctScx?Thh{PBcI1QK}^H+) Date: Wed, 24 Apr 2019 15:41:23 -0400 Subject: [PATCH 02/13] Add starting architecture docs --- docs/latest/SUMMARY.md | 2 ++ docs/latest/advanced/architecture.md | 5 +++++ docs/latest/architecture/index.md | 1 - docs/latest/assets/img/architecture-diagram.png | Bin 0 -> 38068 bytes 4 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 docs/latest/advanced/architecture.md delete mode 100644 docs/latest/architecture/index.md create mode 100644 docs/latest/assets/img/architecture-diagram.png diff --git a/docs/latest/SUMMARY.md b/docs/latest/SUMMARY.md index 7e7cf08d0..ec4e63624 100644 --- a/docs/latest/SUMMARY.md +++ b/docs/latest/SUMMARY.md @@ -14,6 +14,8 @@ - [Modules](advanced/extensions.md#modules) - [Registering](advanced/extensions.md#registering-extensions) - [OHIF Maintained](advanced/extensions.md#ohif-maintained-extensions) +- [Architecture](advanced/architecture.md) + - Overview - Connecting to Image Archives - [DICOM Web](connecting-to-image-archives/dicomweb.md) diff --git a/docs/latest/advanced/architecture.md b/docs/latest/advanced/architecture.md new file mode 100644 index 000000000..16ed82886 --- /dev/null +++ b/docs/latest/advanced/architecture.md @@ -0,0 +1,5 @@ +# Architecture + +![Architecture Diagram](../assets/img/architecture-diagram.png) + +

architecture diagram
\ No newline at end of file diff --git a/docs/latest/architecture/index.md b/docs/latest/architecture/index.md deleted file mode 100644 index f2569bf9f..000000000 --- a/docs/latest/architecture/index.md +++ /dev/null @@ -1 +0,0 @@ -# Architecture \ No newline at end of file diff --git a/docs/latest/assets/img/architecture-diagram.png b/docs/latest/assets/img/architecture-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..1c43d010826825b8293ffe49587b7d9a68bdd699 GIT binary patch literal 38068 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
^@;w%=~e}?WV=L ztBzBA`PvP+ZXWe)wl0}1Y%pD(Q*O3BrMnN|wZEp?HoX3#)*?5sA}~jGWGRBSw>^@# zeQN-LrK^lp>7Hg?Goa1Y)7RcFwa7qs>(lTm8+IqVr47-PXk4iC#2>Z1n*Q%q0Z-*GF^;+7=|1?P zu%Wt6*OvF^b(bO^Zy(K<+t3m6U=%QaNM~S^oiL5N04^{Usyb@IX?^= zJgi>8RkC7v3NwgoC50nGx)ZX3jD4q9=w!$<`Sr;x0}x>l4qyi>hHSm=*t0tZ-koCL znCqsn(PpvyLyT>ni5EUz2Syl$8`xKk>m|59gLKog;3qzfVvTR#!kZGFSXe9rkshX< z)1<=gBl;?nCiODt?juv?^mu27nk>J`J^$j~DLRwgNb>Jw?WSvNiu}}(N2#~B?4m9i zNP}i+rMqRbLknbecj1u%%i+xu+vKv5WH4`K=;EHXqGgt@>lvG6m;{%hpHHb?ZfAGYjWrBC1Ag8ToH-v_uf$X zu*b)-VXWWnNyN5XixeI_=zyLP#(WHJyQhjZkVcr);PV2_8#povQT3a1zsM>%ToLmL zJbRmi#dqj0CXfebpU>XC6CH~j-n+}{NcY8}fLmbxSA(|M%@KR`=jC*n*d^eTSGoxZ zKksW>S|&TtU5O0}!Mju*{GoVG$#eRT_T_>N=U8?Urm)gKYR4Y#zlL#EG!D@KvQDIG zd3>?SH*2%K=71abFU}34ZHMF2>B_9q*?7zDHZPKURP*=*n8_CY7#ItFmXBSws%Ztw z2>TgKVaWK&0D|Y8mHm}x5juG1`o5*gQZR{59NhN!$|0R81Bd=*syS2w3(6T$2#_Nx zF@J%J_hyaBpWJS!CU1+(0X1H9*5A$E9s5$FGq|50>XO{2*0xk#xQ-?9RbhULhkQNh z#u~jkHNIPbp)WU(w{bvF|4faye$&a_Q@^vQhn;7_KJZ^JeWzXD=`;Rvx|Vk){0_E` zq)K#fA!0YDYQ4!-q$PgrE@zZom3B=51xC`L@NPUWp`;CDWWCt;cFx;yeLL`QUE{sL ztSRUnqkIlm$p!C&8;N)j{S6z9Oq9LOa{z$n&utxf7EmyptGppgVV~MHl`p)OmWE+zV|*-X+@Z_Am&CJ{@|(G}X#@S5zswTb7d?XjVI!c6%A^G zQ9mDq$V$NGB-;lUje2sMO`wx$JORxL2Nrz76OJZaCc{ho6j$K!pgO<(BD>sFPdAzA z5-H7^6A=qZ#kFKw$}ji7$i{6Fs)MykzbTTjfL-d~*RA%jc}E4=%g7ht@`Q;qsuP78 z>CE&^V8)?M9xG;HYxJYRuiyLi^G82~B9r~vhw4LsJo@(1^Rh7O1ahOwlJ!1K7(*QE zQW%|CW{(#Y8-eg2&>Ft+7?>TJf4F{L$5VPm9jdf(0vRP~-6`mVRbM?&5#6+<`Rp!3 zXQ07*$4+x*NJ5uN37_0fOT)EVpPrRnz{xRW7RTBF{wy%v>$VW^?TVVH#k01n?Lj1( zxr6M4xmeb!tzD8MEeN&qhBFEh+0E!4Dl4I`bkMY?lO*AG_|RG%H*rD$k_O+Cle`_d z$3r8R!fdhh(`k5lo>1#QpTB+t&)pDXg!_LCxZy-U`m@$zwU*h+k)@(ur^NO5w8){z z@z3ltWJ>h*e%b+~KJcvi`)=t!-!FI!hel<4S&}FjHzqhOi7m+sBxBFY#fAMEPfZoe z(FRVo2=_v>S!3dF#~WHQ;@9UI1~6n;?VlOQjo;|mpZn&S!JsLz#7Qdh

>hT6;7h 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 E0QJOQxc~qF literal 0 HcmV?d00001 From cf93a1eb06df1e3fa34eb4475d08c7fa3c14f1a1 Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 22:30:18 -0400 Subject: [PATCH 03/13] Overview --- docs/latest/advanced/architecture.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/latest/advanced/architecture.md b/docs/latest/advanced/architecture.md index 16ed82886..022ceb5bd 100644 --- a/docs/latest/advanced/architecture.md +++ b/docs/latest/advanced/architecture.md @@ -1,5 +1,10 @@ # Architecture +## Overview + +The [`OHIF/Viewers`](https://github.com/OHIF/Viewers/tree/react) repository contains the source code for the OHIF Medical Imaging Viewer. It is effectively a React [progressive web app](https://developers.google.com/web/progressive-web-apps/) (PWA) that combines the business logic housed in [`OHIF/ohif-core`](https://github.com/OHIF/ohif-core) and the components in our React Component library [`OHIF/react-viewerbase`](https://github.com/OHIF/react-viewerbase). It provides customization for common use cases through [configuration](../essentials/configuration.md) and for adding functionality via [extensions](./extensions.md). + +The purpose of this documentation is to better illustrate how these pieces work together to create a Viewer and where you should direct your attention for contributions. ![Architecture Diagram](../assets/img/architecture-diagram.png)

architecture diagram
\ No newline at end of file From 8ce7c04fa30f2224483c19dc4ad89a4ec79cc90d Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 22:30:35 -0400 Subject: [PATCH 04/13] Business logic --- docs/latest/advanced/architecture.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/latest/advanced/architecture.md b/docs/latest/advanced/architecture.md index 022ceb5bd..2553dbde8 100644 --- a/docs/latest/advanced/architecture.md +++ b/docs/latest/advanced/architecture.md @@ -5,6 +5,22 @@ The [`OHIF/Viewers`](https://github.com/OHIF/Viewers/tree/react) repository contains the source code for the OHIF Medical Imaging Viewer. It is effectively a React [progressive web app](https://developers.google.com/web/progressive-web-apps/) (PWA) that combines the business logic housed in [`OHIF/ohif-core`](https://github.com/OHIF/ohif-core) and the components in our React Component library [`OHIF/react-viewerbase`](https://github.com/OHIF/react-viewerbase). It provides customization for common use cases through [configuration](../essentials/configuration.md) and for adding functionality via [extensions](./extensions.md). The purpose of this documentation is to better illustrate how these pieces work together to create a Viewer and where you should direct your attention for contributions. + +### Business Logic + +Our goal is to maintain the majority of our business logic in [`OHIF/ohif-core`](https://github.com/OHIF/ohif-core). `ohif-core` offers pre-packaged solutions for features common to Web-based medical imaging viewers. For example: + +- Hotkeys +- DICOM Web +- Hanging Protocols +- Managing a study's measurements +- Managing a study's DICOM metadata +- A flexible pattern for extensions +- [And many others](https://github.com/OHIF/ohif-core/blob/master/src/index.js#L49-L69) + +It does this while remaining decoupled from any particular view library or +rendering logic. While we use it to power our React Viewer, it can be used with Vue, React, Vanilla JS, or any number of other frameworks. + ![Architecture Diagram](../assets/img/architecture-diagram.png)
architecture diagram
\ No newline at end of file From e533f6f0e81793da0db3118c992215d413ebe141 Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 22:30:51 -0400 Subject: [PATCH 05/13] Configuration placeholder --- docs/latest/essentials/configuration.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/latest/essentials/configuration.md diff --git a/docs/latest/essentials/configuration.md b/docs/latest/essentials/configuration.md new file mode 100644 index 000000000..af4abbfe2 --- /dev/null +++ b/docs/latest/essentials/configuration.md @@ -0,0 +1 @@ +# Configuration \ No newline at end of file From 320c3b0d67fa3ca2504e789d4738867d4bac75eb Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 22:31:05 -0400 Subject: [PATCH 06/13] Updated primary nav --- docs/latest/SUMMARY.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/latest/SUMMARY.md b/docs/latest/SUMMARY.md index ec4e63624..9e48837b9 100644 --- a/docs/latest/SUMMARY.md +++ b/docs/latest/SUMMARY.md @@ -2,6 +2,7 @@ - Essentials - [Getting Started](essentials/getting-started.md) + - [Configuration](essentials/configuration.md) - [Troubleshooting](essentials/troubleshooting.md) - [Architecture](architecture/index.md) - Overview @@ -9,13 +10,13 @@ --- - [Advanced](advanced/index.md) +- [Architecture](advanced/architecture.md) + - [Overview](advanced/architecture.md#overview) - [Extensions](advanced/extensions.md) - [Overview](advanced/extensions.md#overview) - [Modules](advanced/extensions.md#modules) - [Registering](advanced/extensions.md#registering-extensions) - [OHIF Maintained](advanced/extensions.md#ohif-maintained-extensions) -- [Architecture](advanced/architecture.md) - - Overview - Connecting to Image Archives - [DICOM Web](connecting-to-image-archives/dicomweb.md) From 98df7d5989c0cb1368320a7340eb0448a01432e9 Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 23:16:14 -0400 Subject: [PATCH 07/13] Common questions --- docs/latest/advanced/architecture.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/latest/advanced/architecture.md b/docs/latest/advanced/architecture.md index 2553dbde8..54facab24 100644 --- a/docs/latest/advanced/architecture.md +++ b/docs/latest/advanced/architecture.md @@ -23,4 +23,10 @@ rendering logic. While we use it to power our React Viewer, it can be used with ![Architecture Diagram](../assets/img/architecture-diagram.png) -
architecture diagram
\ No newline at end of file +
architecture diagram
+ +## Common Questions + +> Can I create my own Viewer using Vue.js or Angular.js? + +You can, but you will not be able to leverage as much of the existing code and components. `ohif-core` could still be used for business logic, and to provide a model for extensions. `react-viewerbase` would then become a guide for the components you would need to recreate. \ No newline at end of file From 2b67f906eae4f3e0eccc5cf48d82344681392e7c Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 23:16:24 -0400 Subject: [PATCH 08/13] Extensions --- docs/latest/advanced/architecture.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/latest/advanced/architecture.md b/docs/latest/advanced/architecture.md index 54facab24..d87dab757 100644 --- a/docs/latest/advanced/architecture.md +++ b/docs/latest/advanced/architecture.md @@ -21,6 +21,14 @@ Our goal is to maintain the majority of our business logic in [`OHIF/ohif-core`] It does this while remaining decoupled from any particular view library or rendering logic. While we use it to power our React Viewer, it can be used with Vue, React, Vanilla JS, or any number of other frameworks. +### Misc. Extensions + +Want to add custom logic or UI Components to the OHIF Viewer, but don't want to maintain a fork? We expose common integration points via [extensions](./extensions.md) to make that possible. For a list of extensions maintained by OHIF, [check out this helpful table](./extensions.html#ohif-maintained-extensions). + + +If you find yourself thinking "I wish the Viewer could do X", and you can't accomplish it with an extension today, create a GitHub issue! We're actively looking for ways to improve our extensibility ^_^ + +[Click here to read more about extensions!](./extensions.md) ![Architecture Diagram](../assets/img/architecture-diagram.png)
architecture diagram
From e188180a4abb556b12744cca91ba2d0f0062a0a0 Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 23:16:36 -0400 Subject: [PATCH 09/13] Remaining architecture menu items --- docs/latest/SUMMARY.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/latest/SUMMARY.md b/docs/latest/SUMMARY.md index 9e48837b9..9dc674294 100644 --- a/docs/latest/SUMMARY.md +++ b/docs/latest/SUMMARY.md @@ -12,6 +12,11 @@ - [Advanced](advanced/index.md) - [Architecture](advanced/architecture.md) - [Overview](advanced/architecture.md#overview) + - [Business Logic](advanced/architecture.md#business-logic) + - [Component Library](advanced/architecture.md#react-component-library) + - [Extensions](advanced/architecture.md#misc-extensions) + - [Diagram](advanced/architecture.md#diagram) + - [Common Questions](advanced/architecture.md#common-questions) - [Extensions](advanced/extensions.md) - [Overview](advanced/extensions.md#overview) - [Modules](advanced/extensions.md#modules) From e96a331d9102b7bfd0760f661a6f19ab8ef66de7 Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 23:25:43 -0400 Subject: [PATCH 10/13] Diagram explanation --- docs/latest/advanced/architecture.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/latest/advanced/architecture.md b/docs/latest/advanced/architecture.md index d87dab757..d1fefde2d 100644 --- a/docs/latest/advanced/architecture.md +++ b/docs/latest/advanced/architecture.md @@ -29,6 +29,16 @@ Want to add custom logic or UI Components to the OHIF Viewer, but don't want to If you find yourself thinking "I wish the Viewer could do X", and you can't accomplish it with an extension today, create a GitHub issue! We're actively looking for ways to improve our extensibility ^_^ [Click here to read more about extensions!](./extensions.md) + +### Diagram + +This diagram is a conceptual illustration of how the Viewer is architected. + +0. (optional) `extensions` can be registered with `ohif-core`'s extension manager +1. `ohif-core` provides bussiness logic and a way for `viewer` to access registered extensions +2. The `viewer` composes and provides data to components from our component library (`react-viewerbase`) +3. The `viewer` can be built and served as a stand-alone PWA, or as an embeddable package ([`ohif-viewer`](https://www.npmjs.com/package/ohif-viewer)) + ![Architecture Diagram](../assets/img/architecture-diagram.png)
architecture diagram
From a78fa6e3b3276eeee78659bd0b833d1d32ff2d3b Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 23:39:45 -0400 Subject: [PATCH 11/13] Component library --- docs/latest/advanced/architecture.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/latest/advanced/architecture.md b/docs/latest/advanced/architecture.md index d1fefde2d..fd4391bad 100644 --- a/docs/latest/advanced/architecture.md +++ b/docs/latest/advanced/architecture.md @@ -21,6 +21,14 @@ Our goal is to maintain the majority of our business logic in [`OHIF/ohif-core`] It does this while remaining decoupled from any particular view library or rendering logic. While we use it to power our React Viewer, it can be used with Vue, React, Vanilla JS, or any number of other frameworks. + +### React Component Library + +[`OHIF/react-viewerbase`](https://github.com/OHIF/react-viewerbase) is a React Component library that contains the reusable components that power the OHIF Viewer. It allows us to build, compose, and test components in isolation; easing the development process by reducing the need to stand-up a local PACS with test case data. + +[Check out our component library!](https://react.ohif.org/) + + ### Misc. Extensions Want to add custom logic or UI Components to the OHIF Viewer, but don't want to maintain a fork? We expose common integration points via [extensions](./extensions.md) to make that possible. For a list of extensions maintained by OHIF, [check out this helpful table](./extensions.html#ohif-maintained-extensions). From d062efdc820782dd91e987f144915eb81e8a5e78 Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 23:39:56 -0400 Subject: [PATCH 12/13] Stubbed common question --- docs/latest/advanced/architecture.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/latest/advanced/architecture.md b/docs/latest/advanced/architecture.md index fd4391bad..9cfeca5b7 100644 --- a/docs/latest/advanced/architecture.md +++ b/docs/latest/advanced/architecture.md @@ -53,6 +53,10 @@ This diagram is a conceptual illustration of how the Viewer is architected. ## Common Questions +> When should I use the packaged source `ohif-viewer` versus building a PWA from the source? + +... + > Can I create my own Viewer using Vue.js or Angular.js? You can, but you will not be able to leverage as much of the existing code and components. `ohif-core` could still be used for business logic, and to provide a model for extensions. `react-viewerbase` would then become a guide for the components you would need to recreate. \ No newline at end of file From d45ac5db0a3c4842c3146b7da8727211eb99ecdb Mon Sep 17 00:00:00 2001 From: dannyrb Date: Wed, 24 Apr 2019 23:54:26 -0400 Subject: [PATCH 13/13] "Goal" of architecture page --- docs/latest/advanced/architecture.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/latest/advanced/architecture.md b/docs/latest/advanced/architecture.md index 9cfeca5b7..e91372c4b 100644 --- a/docs/latest/advanced/architecture.md +++ b/docs/latest/advanced/architecture.md @@ -1,10 +1,13 @@ # Architecture +Looking to extend your instance of the OHIF Viewer? Want learn how to reuse _a portion_ of the Viewer in your own application? Or maybe you want to get involved and draft or suggest a new feature? Regardless, you're in the right place! + +The OHIF Viewer aims to be decoupled, configurable, and extensible; while this allows our code to be used in more ways, it also increases complexity. Below, we aim to demistify that complexity by providing insight into how our Viewer is architected, and the role each of it's dependent libraries plays. + ## Overview The [`OHIF/Viewers`](https://github.com/OHIF/Viewers/tree/react) repository contains the source code for the OHIF Medical Imaging Viewer. It is effectively a React [progressive web app](https://developers.google.com/web/progressive-web-apps/) (PWA) that combines the business logic housed in [`OHIF/ohif-core`](https://github.com/OHIF/ohif-core) and the components in our React Component library [`OHIF/react-viewerbase`](https://github.com/OHIF/react-viewerbase). It provides customization for common use cases through [configuration](../essentials/configuration.md) and for adding functionality via [extensions](./extensions.md). -The purpose of this documentation is to better illustrate how these pieces work together to create a Viewer and where you should direct your attention for contributions. ### Business Logic