pyegeria 5.3.3.12__py3-none-any.whl → 5.3.3.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyegeria/__init__.py +2 -1
- pyegeria/commands/tech/list_information_supply_chains.py +10 -7
- pyegeria/commands/tech/work/mermaid_graphs/Clinical Trial Subject Onboarding.html +135 -0
- pyegeria/commands/tech/work/mermaid_graphs/{Clinical Trial Treatment Validation.mmd → Clinical Trial Treatment Validation.html } +127 -41
- pyegeria/commands/tech/work/mermaid_graphs/Employee Expense Payment.html +126 -0
- pyegeria/commands/tech/work/mermaid_graphs/New Drug Product Information Distribution.html +141 -0
- pyegeria/commands/tech/work/mermaid_graphs/New Employee Onboarding.html +138 -0
- pyegeria/commands/tech/work/mermaid_graphs/Personalized Treatment Ordering.html +143 -0
- pyegeria/commands/tech/work/mermaid_graphs/{Physical Inventory Tracking.mmd → Physical Inventory Tracking.html } +114 -28
- pyegeria/commands/tech/work/mermaid_graphs/{Sustainability Reporting.mmd → Sustainability Reporting.html } +112 -26
- pyegeria/commands/tech/work/mermaid_graphs/{{displayName}}.html +115 -0
- pyegeria/mermaid_utilities.py +277 -72
- {pyegeria-5.3.3.12.dist-info → pyegeria-5.3.3.13.dist-info}/METADATA +1 -1
- {pyegeria-5.3.3.12.dist-info → pyegeria-5.3.3.13.dist-info}/RECORD +19 -94
- pyegeria/.DS_Store +0 -0
- pyegeria/commands/.DS_Store +0 -0
- pyegeria/commands/__pycache__/__init__.cpython-312.pyc +0 -0
- pyegeria/commands/__pycache__/server_status_widget.cpython-312-pytest-7.4.4.pyc +0 -0
- pyegeria/commands/cat/__pycache__/__init__.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/get_asset_graph.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/get_collection.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/get_project_dependencies.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/get_project_structure.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/get_tech_type_elements.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/glossary_actions.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_assets.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_cert_types.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_collections.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_deployed_catalogs.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_deployed_database_schemas.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_deployed_databases.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_glossaries.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_projects.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_servers_deployed_imp.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_tech_type_elements.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_tech_types.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_terms.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_todos.cpython-312.pyc +0 -0
- pyegeria/commands/cat/__pycache__/list_user_ids.cpython-312.pyc +0 -0
- pyegeria/commands/cli/__pycache__/__init__.cpython-312.pyc +0 -0
- pyegeria/commands/cli/__pycache__/egeria_login_tui.cpython-312.pyc +0 -0
- pyegeria/commands/cli/__pycache__/egeria_ops.cpython-312.pyc +0 -0
- pyegeria/commands/cli/__pycache__/ops_config.cpython-312.pyc +0 -0
- pyegeria/commands/doc/.DS_Store +0 -0
- pyegeria/commands/doc/Visual Command Reference/.DS_Store +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/.DS_Store +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/.DS_Store +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/deployed-data/.DS_Store +0 -0
- pyegeria/commands/doc/glossary/.DS_Store +0 -0
- pyegeria/commands/doc/glossary/images/.DS_Store +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/.DS_Store +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/.DS_Store +0 -0
- pyegeria/commands/my/__pycache__/__init__.cpython-312.pyc +0 -0
- pyegeria/commands/my/__pycache__/list_my_profile.cpython-312.pyc +0 -0
- pyegeria/commands/my/__pycache__/list_my_roles.cpython-312.pyc +0 -0
- pyegeria/commands/my/__pycache__/monitor_my_todos.cpython-312.pyc +0 -0
- pyegeria/commands/my/__pycache__/monitor_open_todos.cpython-312.pyc +0 -0
- pyegeria/commands/my/__pycache__/todo_actions.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/__init__.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/gov_server_actions.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/list_archives.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/list_catalog_targets.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/load_archive.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/monitor_engine_activity.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/monitor_engine_activity_c.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/monitor_gov_eng_status.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/monitor_integ_daemon_status.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/monitor_platform_status.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/monitor_server_startup.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/monitor_server_status.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/refresh_integration_daemon.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/restart_integration_daemon.cpython-312.pyc +0 -0
- pyegeria/commands/ops/__pycache__/table_integ_daemon_status.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/__init__.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/get_element_info.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/get_guid_info.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/get_tech_details.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/get_tech_type_template.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_anchored_elements.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_asset_types.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_elements_by_property_value.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_elements_for_classification.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_gov_action_processes.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_registered_services.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_related_specification.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_relationship_types.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_relationships.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_tech_templates.cpython-312.pyc +0 -0
- pyegeria/commands/tech/__pycache__/list_valid_metadata_values.cpython-312.pyc +0 -0
- pyegeria/commands/tech/work/mermaid_graphs/Clinical Trial Subject Onboarding.mmd +0 -49
- pyegeria/commands/tech/work/mermaid_graphs/Employee Expense Payment.mmd +0 -40
- pyegeria/commands/tech/work/mermaid_graphs/New Drug Product Information Distribution.mmd +0 -55
- pyegeria/commands/tech/work/mermaid_graphs/New Employee Onboarding.mmd +0 -52
- pyegeria/commands/tech/work/mermaid_graphs/Personalized Treatment Ordering.mmd +0 -57
- pyegeria/commands/tech/work/mermaid_graphs/{{displayName}}.mmd +0 -29
- /pyegeria/commands/tech/{list_isolution_blueprints.py → list_solution_blueprints.py} +0 -0
- /pyegeria/commands/tech/{list_isolution_blueprints2.py → list_solution_blueprints2.py} +0 -0
- {pyegeria-5.3.3.12.dist-info → pyegeria-5.3.3.13.dist-info}/LICENSE +0 -0
- {pyegeria-5.3.3.12.dist-info → pyegeria-5.3.3.13.dist-info}/WHEEL +0 -0
- {pyegeria-5.3.3.12.dist-info → pyegeria-5.3.3.13.dist-info}/entry_points.txt +0 -0
pyegeria/__init__.py
CHANGED
@@ -68,7 +68,8 @@ from .create_tech_guid_lists import build_global_guid_lists
|
|
68
68
|
from .classification_manager_omvs import ClassificationManager
|
69
69
|
from .feedback_manager_omvs import FeedbackManager
|
70
70
|
from .metadata_explorer_omvs import MetadataExplorer
|
71
|
-
from .mermaid_utilities import load_mermaid, render_mermaid, generate_process_graph, save_mermaid_graph
|
71
|
+
from .mermaid_utilities import (load_mermaid, render_mermaid, generate_process_graph, save_mermaid_graph,
|
72
|
+
save_mermaid_html,construct_mermaid_html,parse_mermaid_code)
|
72
73
|
from .egeria_my_client import EgeriaMy
|
73
74
|
|
74
75
|
from .solution_architect_omvs import SolutionArchitect
|
@@ -21,10 +21,12 @@ from rich.text import Text
|
|
21
21
|
from rich.tree import Tree
|
22
22
|
from pyegeria.solution_architect_omvs import SolutionArchitect
|
23
23
|
from pyegeria import (
|
24
|
-
ProjectManager,
|
25
24
|
UserNotAuthorizedException,
|
26
25
|
PropertyServerException,
|
27
|
-
InvalidParameterException,
|
26
|
+
InvalidParameterException,
|
27
|
+
save_mermaid_graph,
|
28
|
+
save_mermaid_html,
|
29
|
+
|
28
30
|
)
|
29
31
|
|
30
32
|
from pyegeria._exceptions import (
|
@@ -46,7 +48,7 @@ EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
|
|
46
48
|
EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
|
47
49
|
EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
|
48
50
|
EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "150"))
|
49
|
-
EGERIA_MERMAID_FOLDER = os.environ.get("EGERIA_MERMAID_FOLDER", "
|
51
|
+
EGERIA_MERMAID_FOLDER = os.environ.get("EGERIA_MERMAID_FOLDER", "work/mermaid_graphs")
|
50
52
|
|
51
53
|
def supply_chain_viewer(
|
52
54
|
search_string: str,
|
@@ -98,11 +100,12 @@ def supply_chain_viewer(
|
|
98
100
|
sc_unique_name = f"{sc_qname}\n\n\t\t/\n\n{sc_guid}"
|
99
101
|
sc_mermaid = sc.get("mermaidGraph",'---')
|
100
102
|
if sc_mermaid != '---':
|
101
|
-
link =
|
102
|
-
sc_mermaid_link = f"
|
103
|
+
link = save_mermaid_html(sc_name, sc_mermaid, EGERIA_MERMAID_FOLDER )
|
104
|
+
sc_mermaid_link = f"file://:{link}"
|
105
|
+
# print("Visit my [link=https://www.willmcgugan.com]blog[/link]!")
|
103
106
|
# sc_scope = Text(f"{sc_scope}\n\t\t/\n{sc_mermaid_link}")
|
104
|
-
sc_scope = Text(f"{sc_scope}\n\t\t/\n{sc_mermaid_link}", style="underline")
|
105
|
-
sc_scope.stylize("link " + sc_mermaid_link)
|
107
|
+
sc_scope = Text(f"{sc_scope}\n\t\t/\n[link={sc_mermaid_link}]{sc_mermaid_link}[/link]!", style="underline")
|
108
|
+
# sc_scope.stylize("link =" + sc_mermaid_link)
|
106
109
|
|
107
110
|
table.add_row(sc_name, sc_unique_name, sc_purpose_str, sc_scope, sc_desc)
|
108
111
|
|
@@ -0,0 +1,135 @@
|
|
1
|
+
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<style type="text/css">
|
5
|
+
#mySvgId {
|
6
|
+
width: 100%;
|
7
|
+
height: 100%;
|
8
|
+
overflow: hidden;
|
9
|
+
border: 1px solid #ccc;
|
10
|
+
position: relative;
|
11
|
+
margin-bottom: 10px;
|
12
|
+
}
|
13
|
+
svg {
|
14
|
+
cursor: grab;
|
15
|
+
}
|
16
|
+
|
17
|
+
</style>
|
18
|
+
</head>
|
19
|
+
|
20
|
+
<body>
|
21
|
+
<div id="graphDiv"></div>
|
22
|
+
<script src="https://bumbu.me/svg-pan-zoom/dist/svg-pan-zoom.min.js"></script>
|
23
|
+
<script type="module">
|
24
|
+
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
|
25
|
+
|
26
|
+
mermaid.initialize({startOnLoad: false});
|
27
|
+
await mermaid.run({
|
28
|
+
querySelector: '.mermaid',
|
29
|
+
postRenderCallback: (id) => {
|
30
|
+
const container = document.getElementById("diagram-container");
|
31
|
+
const svgElement = container.querySelector("svg");
|
32
|
+
|
33
|
+
// Initialize Panzoom
|
34
|
+
const panzoomInstance = Panzoom(svgElement, {
|
35
|
+
maxScale: 5,
|
36
|
+
minScale: 0.5,
|
37
|
+
step: 0.1,
|
38
|
+
});
|
39
|
+
|
40
|
+
// Add mouse wheel zoom
|
41
|
+
container.addEventListener("wheel", (event) => {
|
42
|
+
panzoomInstance.zoomWithWheel(event);
|
43
|
+
});
|
44
|
+
}
|
45
|
+
});
|
46
|
+
|
47
|
+
|
48
|
+
const drawDiagram = async function () {
|
49
|
+
const element = document.querySelector('#graphDiv');
|
50
|
+
const graphDefinition = `
|
51
|
+
flowchart TD
|
52
|
+
%%{init: {"flowchart": {"htmlLabels": false}} }%%
|
53
|
+
|
54
|
+
39a035f0-3b2b-45fe-adb8-ee8a19581f6a@{ shape: flip-tri, label: "*Information Supply Chain*
|
55
|
+
**Clinical Trial Subject Onboarding**"}
|
56
|
+
b5691fb0-7569-43c1-bd4c-11198a11e733@{ shape: text, label: "*Description*
|
57
|
+
**Delivering the data necessary to add a person as a subject in a clinical trial.**"}
|
58
|
+
39a035f0-3b2b-45fe-adb8-ee8a19581f6a~~~b5691fb0-7569-43c1-bd4c-11198a11e733
|
59
|
+
2338ad35-78eb-4920-8003-d522b3cecf6b@{ shape: text, label: "*Purpose*
|
60
|
+
**Ensure patient subject is aware of the process and potential risks in participation.**"}
|
61
|
+
b5691fb0-7569-43c1-bd4c-11198a11e733~~~2338ad35-78eb-4920-8003-d522b3cecf6b
|
62
|
+
9f146a62-59f4-482b-8384-48b20ca76fa3@{ shape: text, label: "*Purpose*
|
63
|
+
**Ensure patient subject has given permission for Coco Pharmaceuticals to acquire, store and process their personal data needed for the clinical trial.**"}
|
64
|
+
2338ad35-78eb-4920-8003-d522b3cecf6b~~~9f146a62-59f4-482b-8384-48b20ca76fa3
|
65
|
+
bd1d332d-6e86-4953-8f83-b0a03b5e738c@{ shape: text, label: "*Purpose*
|
66
|
+
**Ensure incoming data is validated and catalogued.**"}
|
67
|
+
9f146a62-59f4-482b-8384-48b20ca76fa3~~~bd1d332d-6e86-4953-8f83-b0a03b5e738c
|
68
|
+
b58f5eba-9cf8-492d-bc86-966611bc7603@{ shape: text, label: "*Purpose*
|
69
|
+
**Ensure data and process owners are informed of key milestones and issues requiring attention.**"}
|
70
|
+
bd1d332d-6e86-4953-8f83-b0a03b5e738c~~~b58f5eba-9cf8-492d-bc86-966611bc7603
|
71
|
+
1fd73811-9f3d-4599-9a22-1300e0931eff@{ shape: text, label: "*Purpose*
|
72
|
+
**Ensure the process of data capture and validation is transparent and auditable.**"}
|
73
|
+
b58f5eba-9cf8-492d-bc86-966611bc7603~~~1fd73811-9f3d-4599-9a22-1300e0931eff
|
74
|
+
style 39a035f0-3b2b-45fe-adb8-ee8a19581f6a color:#FFFFFF, fill:#004563, stroke:#b7c0c7
|
75
|
+
style 1fd73811-9f3d-4599-9a22-1300e0931eff color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
76
|
+
style b5691fb0-7569-43c1-bd4c-11198a11e733 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
77
|
+
style 9f146a62-59f4-482b-8384-48b20ca76fa3 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
78
|
+
style 2338ad35-78eb-4920-8003-d522b3cecf6b color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
79
|
+
style b58f5eba-9cf8-492d-bc86-966611bc7603 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
80
|
+
style bd1d332d-6e86-4953-8f83-b0a03b5e738c color:#000000, fill:#F9F7ED, stroke:#b7c0c7`;
|
81
|
+
const {svg} = await mermaid.render('mySvgId', graphDefinition);
|
82
|
+
element.innerHTML = svg.replace(/( )*max-width:( 0-9\.)*px;/i, '');
|
83
|
+
|
84
|
+
var doPan = false;
|
85
|
+
var eventsHandler;
|
86
|
+
var panZoom;
|
87
|
+
var mousepos;
|
88
|
+
|
89
|
+
eventsHandler = {
|
90
|
+
haltEventListeners: ['mousedown', 'mousemove', 'mouseup']
|
91
|
+
|
92
|
+
, mouseDownHandler: function (ev) {
|
93
|
+
if (event.target.className == "[object SVGAnimatedString]") {
|
94
|
+
doPan = true;
|
95
|
+
mousepos = {x: ev.clientX, y: ev.clientY}
|
96
|
+
}
|
97
|
+
;
|
98
|
+
}
|
99
|
+
|
100
|
+
, mouseMoveHandler: function (ev) {
|
101
|
+
if (doPan) {
|
102
|
+
panZoom.panBy({x: ev.clientX - mousepos.x, y: ev.clientY - mousepos.y});
|
103
|
+
mousepos = {x: ev.clientX, y: ev.clientY};
|
104
|
+
window.getSelection().removeAllRanges();
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
, mouseUpHandler: function (ev) {
|
109
|
+
doPan = false;
|
110
|
+
}
|
111
|
+
|
112
|
+
, init: function (options) {
|
113
|
+
options.svgElement.addEventListener('mousedown', this.mouseDownHandler, false);
|
114
|
+
options.svgElement.addEventListener('mousemove', this.mouseMoveHandler, false);
|
115
|
+
options.svgElement.addEventListener('mouseup', this.mouseUpHandler, false);
|
116
|
+
}
|
117
|
+
|
118
|
+
, destroy: function (options) {
|
119
|
+
options.svgElement.removeEventListener('mousedown', this.mouseDownHandler, false);
|
120
|
+
options.svgElement.removeEventListener('mousemove', this.mouseMoveHandler, false);
|
121
|
+
options.svgElement.removeEventListener('mouseup', this.mouseUpHandler, false);
|
122
|
+
}
|
123
|
+
}
|
124
|
+
panZoom = svgPanZoom('#mySvgId', {
|
125
|
+
zoomEnabled: true
|
126
|
+
, controlIconsEnabled: true
|
127
|
+
, fit: 1
|
128
|
+
, center: 1
|
129
|
+
, customEventsHandler: eventsHandler
|
130
|
+
})
|
131
|
+
};
|
132
|
+
await drawDiagram();
|
133
|
+
</script>
|
134
|
+
</body>
|
135
|
+
|
@@ -1,40 +1,79 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
<
|
4
|
-
<
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<style type="text/css">
|
5
|
+
#mySvgId {
|
6
|
+
width: 100%;
|
7
|
+
height: 100%;
|
8
|
+
overflow: hidden;
|
9
|
+
border: 1px solid #ccc;
|
10
|
+
position: relative;
|
11
|
+
margin-bottom: 10px;
|
12
|
+
}
|
13
|
+
svg {
|
14
|
+
cursor: grab;
|
15
|
+
}
|
16
|
+
|
17
|
+
</style>
|
18
|
+
</head>
|
19
|
+
|
20
|
+
<body>
|
21
|
+
<div id="graphDiv"></div>
|
22
|
+
<script src="https://bumbu.me/svg-pan-zoom/dist/svg-pan-zoom.min.js"></script>
|
23
|
+
<script type="module">
|
24
|
+
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
|
25
|
+
|
26
|
+
mermaid.initialize({startOnLoad: false});
|
27
|
+
await mermaid.run({
|
28
|
+
querySelector: '.mermaid',
|
29
|
+
postRenderCallback: (id) => {
|
30
|
+
const container = document.getElementById("diagram-container");
|
31
|
+
const svgElement = container.querySelector("svg");
|
32
|
+
|
33
|
+
// Initialize Panzoom
|
34
|
+
const panzoomInstance = Panzoom(svgElement, {
|
35
|
+
maxScale: 5,
|
36
|
+
minScale: 0.5,
|
37
|
+
step: 0.1,
|
38
|
+
});
|
39
|
+
|
40
|
+
// Add mouse wheel zoom
|
41
|
+
container.addEventListener("wheel", (event) => {
|
42
|
+
panzoomInstance.zoomWithWheel(event);
|
43
|
+
});
|
44
|
+
}
|
45
|
+
});
|
46
|
+
|
47
|
+
|
48
|
+
const drawDiagram = async function () {
|
49
|
+
const element = document.querySelector('#graphDiv');
|
50
|
+
const graphDefinition = `
|
51
|
+
flowchart TD
|
13
52
|
%%{init: {"flowchart": {"htmlLabels": false}} }%%
|
14
53
|
|
15
54
|
1f71e403-1187-4f03-a1dd-ae7dc105f06f@{ shape: flip-tri, label: "*Information Supply Chain*
|
16
55
|
**Clinical Trial Treatment Validation**"}
|
17
|
-
|
56
|
+
c5135483-a30c-4dfc-8729-54d306b0d2cc@{ shape: text, label: "*Description*
|
18
57
|
**Delivering data relating to a clinical trial from the hospitals to the Coco Researchers so that they can then determine the efficacy of the treatment to report to the regulators.**"}
|
19
|
-
1f71e403-1187-4f03-a1dd-ae7dc105f06f~~~
|
20
|
-
|
58
|
+
1f71e403-1187-4f03-a1dd-ae7dc105f06f~~~c5135483-a30c-4dfc-8729-54d306b0d2cc
|
59
|
+
8033331a-7342-4a66-b85a-0aa1bd35b203@{ shape: text, label: "*Purpose*
|
21
60
|
**Deliver patient measurement data from hospitals to data scientists in research.**"}
|
22
|
-
|
23
|
-
|
61
|
+
c5135483-a30c-4dfc-8729-54d306b0d2cc~~~8033331a-7342-4a66-b85a-0aa1bd35b203
|
62
|
+
25ca6519-ef83-4789-a8a9-ef08e8d195a0@{ shape: text, label: "*Purpose*
|
24
63
|
**Ensure incoming data is only from certified hospitals.**"}
|
25
|
-
|
26
|
-
|
64
|
+
8033331a-7342-4a66-b85a-0aa1bd35b203~~~25ca6519-ef83-4789-a8a9-ef08e8d195a0
|
65
|
+
68c30b1a-d716-4a34-b656-7b53f21e0d38@{ shape: text, label: "*Purpose*
|
27
66
|
**Ensure incoming data is validated and catalogued.**"}
|
28
|
-
|
29
|
-
|
67
|
+
25ca6519-ef83-4789-a8a9-ef08e8d195a0~~~68c30b1a-d716-4a34-b656-7b53f21e0d38
|
68
|
+
2e6b651b-1235-411d-87f7-5bbb25e91057@{ shape: text, label: "*Purpose*
|
30
69
|
**Ensure data and process owners are informed of key milestones and issues requiring attention.**"}
|
31
|
-
|
32
|
-
|
70
|
+
68c30b1a-d716-4a34-b656-7b53f21e0d38~~~2e6b651b-1235-411d-87f7-5bbb25e91057
|
71
|
+
ded87798-758f-4cc2-895f-95467009fe41@{ shape: text, label: "*Purpose*
|
33
72
|
**Ensure the process of data capture and treatment validation is transparent and auditable.**"}
|
34
|
-
|
35
|
-
|
73
|
+
2e6b651b-1235-411d-87f7-5bbb25e91057~~~ded87798-758f-4cc2-895f-95467009fe41
|
74
|
+
baf2f019-afff-487d-9a40-4fcdce8f8b84@{ shape: text, label: "*Purpose*
|
36
75
|
**Ensure the treatment validation report is complete and regulatory compliant.**"}
|
37
|
-
|
76
|
+
ded87798-758f-4cc2-895f-95467009fe41~~~baf2f019-afff-487d-9a40-4fcdce8f8b84
|
38
77
|
38635d38-f728-400d-a8ec-7c26e68b7c0f@{ shape: hex, label: "*Information Supply Chain Segment*
|
39
78
|
**Weekly Measurements Onboarding**"}
|
40
79
|
38635d38-f728-400d-a8ec-7c26e68b7c0f-->|"capture and catalog,
|
@@ -95,35 +134,82 @@ d48f579f-76d3-4c49-b1b4-575f5645a9d0-->|"retrieve patient data,
|
|
95
134
|
**SolutionComponent:Treatment Assessment Report Validation and Delivery:V1.0**"}
|
96
135
|
72a86eec-9734-4bc0-babb-4fec0aa7c9ff-->|"publish results,
|
97
136
|
[Solution Linking Wire]"|0bf2547c-937c-41b6-814f-6284849271a1
|
98
|
-
style 278d35bd-0f2f-4f54-931f-6006d550360c color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
99
137
|
style 48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
100
|
-
style ca5c1980-a6e1-4c48-af90-d4aed6314aaf color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
101
|
-
style f3d86b7b-0c4e-4f86-83f9-76680539091a color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
102
|
-
style 0b74a538-54cd-4a20-9b6b-88d970361a69 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
103
138
|
style e4303326-e418-4f77-b8e7-fd5d34717594 color:#004563, fill:#b7c0c7, stroke:#004563
|
104
139
|
style 4fc47e60-f1b5-469c-b666-e1f4570e749f color:#004563, fill:#b7c0c7, stroke:#004563
|
105
|
-
style
|
140
|
+
style 2e6b651b-1235-411d-87f7-5bbb25e91057 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
141
|
+
style ded87798-758f-4cc2-895f-95467009fe41 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
106
142
|
style 7f5dca65-50b4-4103-9ac7-3a406a09047a color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
107
143
|
style ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
144
|
+
style c5135483-a30c-4dfc-8729-54d306b0d2cc color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
108
145
|
style a5d4d638-6836-47e5-99d0-fdcde637e13f color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
109
146
|
style 72a86eec-9734-4bc0-babb-4fec0aa7c9ff color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
147
|
+
style baf2f019-afff-487d-9a40-4fcdce8f8b84 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
110
148
|
style 38635d38-f728-400d-a8ec-7c26e68b7c0f color:#004563, fill:#b7c0c7, stroke:#004563
|
111
149
|
style 7edca02c-e726-4570-815c-280bdf5498b9 color:#004563, fill:#b7c0c7, stroke:#004563
|
112
150
|
style b5c8da4c-f925-4cf1-8294-e43cd2c1a584 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
113
151
|
style 0bf2547c-937c-41b6-814f-6284849271a1 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
114
152
|
style d48f579f-76d3-4c49-b1b4-575f5645a9d0 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
115
153
|
style 1f71e403-1187-4f03-a1dd-ae7dc105f06f color:#FFFFFF, fill:#004563, stroke:#b7c0c7
|
116
|
-
style
|
154
|
+
style 25ca6519-ef83-4789-a8a9-ef08e8d195a0 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
155
|
+
style 8033331a-7342-4a66-b85a-0aa1bd35b203 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
117
156
|
style 04ae768e-3816-47bc-bddb-c9ae25018684 color:#004563, fill:#b7c0c7, stroke:#004563
|
157
|
+
style 68c30b1a-d716-4a34-b656-7b53f21e0d38 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
118
158
|
style 26c07ca4-3b8e-484b-812b-36c1ace4b275 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
119
|
-
style 4b99798c-9918-47f0-9bad-3737cab1e07c color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
120
159
|
style 1c150d6e-30cf-481c-9afb-3b06c9c9e78f color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
121
|
-
style 07705e15-efff-4f80-8992-f04ac85e0ef1 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
160
|
+
style 07705e15-efff-4f80-8992-f04ac85e0ef1 color:#FFFFFF, fill:#838cc7, stroke:#3079ab`;
|
161
|
+
const {svg} = await mermaid.render('mySvgId', graphDefinition);
|
162
|
+
element.innerHTML = svg.replace(/( )*max-width:( 0-9\.)*px;/i, '');
|
163
|
+
|
164
|
+
var doPan = false;
|
165
|
+
var eventsHandler;
|
166
|
+
var panZoom;
|
167
|
+
var mousepos;
|
168
|
+
|
169
|
+
eventsHandler = {
|
170
|
+
haltEventListeners: ['mousedown', 'mousemove', 'mouseup']
|
171
|
+
|
172
|
+
, mouseDownHandler: function (ev) {
|
173
|
+
if (event.target.className == "[object SVGAnimatedString]") {
|
174
|
+
doPan = true;
|
175
|
+
mousepos = {x: ev.clientX, y: ev.clientY}
|
176
|
+
}
|
177
|
+
;
|
178
|
+
}
|
179
|
+
|
180
|
+
, mouseMoveHandler: function (ev) {
|
181
|
+
if (doPan) {
|
182
|
+
panZoom.panBy({x: ev.clientX - mousepos.x, y: ev.clientY - mousepos.y});
|
183
|
+
mousepos = {x: ev.clientX, y: ev.clientY};
|
184
|
+
window.getSelection().removeAllRanges();
|
185
|
+
}
|
186
|
+
}
|
187
|
+
|
188
|
+
, mouseUpHandler: function (ev) {
|
189
|
+
doPan = false;
|
190
|
+
}
|
191
|
+
|
192
|
+
, init: function (options) {
|
193
|
+
options.svgElement.addEventListener('mousedown', this.mouseDownHandler, false);
|
194
|
+
options.svgElement.addEventListener('mousemove', this.mouseMoveHandler, false);
|
195
|
+
options.svgElement.addEventListener('mouseup', this.mouseUpHandler, false);
|
196
|
+
}
|
197
|
+
|
198
|
+
, destroy: function (options) {
|
199
|
+
options.svgElement.removeEventListener('mousedown', this.mouseDownHandler, false);
|
200
|
+
options.svgElement.removeEventListener('mousemove', this.mouseMoveHandler, false);
|
201
|
+
options.svgElement.removeEventListener('mouseup', this.mouseUpHandler, false);
|
202
|
+
}
|
203
|
+
}
|
204
|
+
panZoom = svgPanZoom('#mySvgId', {
|
205
|
+
zoomEnabled: true
|
206
|
+
, controlIconsEnabled: true
|
207
|
+
, fit: 1
|
208
|
+
, center: 1
|
209
|
+
, customEventsHandler: eventsHandler
|
210
|
+
})
|
211
|
+
};
|
212
|
+
await drawDiagram();
|
213
|
+
</script>
|
214
|
+
</body>
|
215
|
+
|
@@ -0,0 +1,126 @@
|
|
1
|
+
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<style type="text/css">
|
5
|
+
#mySvgId {
|
6
|
+
width: 100%;
|
7
|
+
height: 100%;
|
8
|
+
overflow: hidden;
|
9
|
+
border: 1px solid #ccc;
|
10
|
+
position: relative;
|
11
|
+
margin-bottom: 10px;
|
12
|
+
}
|
13
|
+
svg {
|
14
|
+
cursor: grab;
|
15
|
+
}
|
16
|
+
|
17
|
+
</style>
|
18
|
+
</head>
|
19
|
+
|
20
|
+
<body>
|
21
|
+
<div id="graphDiv"></div>
|
22
|
+
<script src="https://bumbu.me/svg-pan-zoom/dist/svg-pan-zoom.min.js"></script>
|
23
|
+
<script type="module">
|
24
|
+
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
|
25
|
+
|
26
|
+
mermaid.initialize({startOnLoad: false});
|
27
|
+
await mermaid.run({
|
28
|
+
querySelector: '.mermaid',
|
29
|
+
postRenderCallback: (id) => {
|
30
|
+
const container = document.getElementById("diagram-container");
|
31
|
+
const svgElement = container.querySelector("svg");
|
32
|
+
|
33
|
+
// Initialize Panzoom
|
34
|
+
const panzoomInstance = Panzoom(svgElement, {
|
35
|
+
maxScale: 5,
|
36
|
+
minScale: 0.5,
|
37
|
+
step: 0.1,
|
38
|
+
});
|
39
|
+
|
40
|
+
// Add mouse wheel zoom
|
41
|
+
container.addEventListener("wheel", (event) => {
|
42
|
+
panzoomInstance.zoomWithWheel(event);
|
43
|
+
});
|
44
|
+
}
|
45
|
+
});
|
46
|
+
|
47
|
+
|
48
|
+
const drawDiagram = async function () {
|
49
|
+
const element = document.querySelector('#graphDiv');
|
50
|
+
const graphDefinition = `
|
51
|
+
flowchart TD
|
52
|
+
%%{init: {"flowchart": {"htmlLabels": false}} }%%
|
53
|
+
|
54
|
+
79d1d83f-6a37-4c32-bf3f-eb8b4358027c@{ shape: flip-tri, label: "*Information Supply Chain*
|
55
|
+
**Employee Expense Payment**"}
|
56
|
+
36905eb3-ebc3-4f78-92bd-81ab7f04b0c8@{ shape: text, label: "*Description*
|
57
|
+
**Managing the collection of expense data, its approval and the subsequent payment authorization flows.**"}
|
58
|
+
79d1d83f-6a37-4c32-bf3f-eb8b4358027c~~~36905eb3-ebc3-4f78-92bd-81ab7f04b0c8
|
59
|
+
64023ff1-9b61-4655-aa0c-6310961f6d19@{ shape: text, label: "*Purpose*
|
60
|
+
**Ensure employees are reimbursed for their expenses in a timely manner.**"}
|
61
|
+
36905eb3-ebc3-4f78-92bd-81ab7f04b0c8~~~64023ff1-9b61-4655-aa0c-6310961f6d19
|
62
|
+
88c42780-6fb1-49e2-a584-8af90cdc7728@{ shape: rounded, label: "*Software Server*
|
63
|
+
**System:coco-hrim**"}
|
64
|
+
ad8eab54-c2f7-494d-82d0-bf5985e5a58d@{ shape: rounded, label: "*Software Server*
|
65
|
+
**System:coco-expenses**"}
|
66
|
+
88c42780-6fb1-49e2-a584-8af90cdc7728-->|"payment authorization [Data Flow]"|ad8eab54-c2f7-494d-82d0-bf5985e5a58d
|
67
|
+
style ad8eab54-c2f7-494d-82d0-bf5985e5a58d color:#000000, fill:#e0ab18, stroke:#004563
|
68
|
+
style 79d1d83f-6a37-4c32-bf3f-eb8b4358027c color:#FFFFFF, fill:#004563, stroke:#b7c0c7
|
69
|
+
style 64023ff1-9b61-4655-aa0c-6310961f6d19 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
70
|
+
style 88c42780-6fb1-49e2-a584-8af90cdc7728 color:#000000, fill:#e0ab18, stroke:#004563
|
71
|
+
style 36905eb3-ebc3-4f78-92bd-81ab7f04b0c8 color:#000000, fill:#F9F7ED, stroke:#b7c0c7`;
|
72
|
+
const {svg} = await mermaid.render('mySvgId', graphDefinition);
|
73
|
+
element.innerHTML = svg.replace(/( )*max-width:( 0-9\.)*px;/i, '');
|
74
|
+
|
75
|
+
var doPan = false;
|
76
|
+
var eventsHandler;
|
77
|
+
var panZoom;
|
78
|
+
var mousepos;
|
79
|
+
|
80
|
+
eventsHandler = {
|
81
|
+
haltEventListeners: ['mousedown', 'mousemove', 'mouseup']
|
82
|
+
|
83
|
+
, mouseDownHandler: function (ev) {
|
84
|
+
if (event.target.className == "[object SVGAnimatedString]") {
|
85
|
+
doPan = true;
|
86
|
+
mousepos = {x: ev.clientX, y: ev.clientY}
|
87
|
+
}
|
88
|
+
;
|
89
|
+
}
|
90
|
+
|
91
|
+
, mouseMoveHandler: function (ev) {
|
92
|
+
if (doPan) {
|
93
|
+
panZoom.panBy({x: ev.clientX - mousepos.x, y: ev.clientY - mousepos.y});
|
94
|
+
mousepos = {x: ev.clientX, y: ev.clientY};
|
95
|
+
window.getSelection().removeAllRanges();
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
, mouseUpHandler: function (ev) {
|
100
|
+
doPan = false;
|
101
|
+
}
|
102
|
+
|
103
|
+
, init: function (options) {
|
104
|
+
options.svgElement.addEventListener('mousedown', this.mouseDownHandler, false);
|
105
|
+
options.svgElement.addEventListener('mousemove', this.mouseMoveHandler, false);
|
106
|
+
options.svgElement.addEventListener('mouseup', this.mouseUpHandler, false);
|
107
|
+
}
|
108
|
+
|
109
|
+
, destroy: function (options) {
|
110
|
+
options.svgElement.removeEventListener('mousedown', this.mouseDownHandler, false);
|
111
|
+
options.svgElement.removeEventListener('mousemove', this.mouseMoveHandler, false);
|
112
|
+
options.svgElement.removeEventListener('mouseup', this.mouseUpHandler, false);
|
113
|
+
}
|
114
|
+
}
|
115
|
+
panZoom = svgPanZoom('#mySvgId', {
|
116
|
+
zoomEnabled: true
|
117
|
+
, controlIconsEnabled: true
|
118
|
+
, fit: 1
|
119
|
+
, center: 1
|
120
|
+
, customEventsHandler: eventsHandler
|
121
|
+
})
|
122
|
+
};
|
123
|
+
await drawDiagram();
|
124
|
+
</script>
|
125
|
+
</body>
|
126
|
+
|
@@ -0,0 +1,141 @@
|
|
1
|
+
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<style type="text/css">
|
5
|
+
#mySvgId {
|
6
|
+
width: 100%;
|
7
|
+
height: 100%;
|
8
|
+
overflow: hidden;
|
9
|
+
border: 1px solid #ccc;
|
10
|
+
position: relative;
|
11
|
+
margin-bottom: 10px;
|
12
|
+
}
|
13
|
+
svg {
|
14
|
+
cursor: grab;
|
15
|
+
}
|
16
|
+
|
17
|
+
</style>
|
18
|
+
</head>
|
19
|
+
|
20
|
+
<body>
|
21
|
+
<div id="graphDiv"></div>
|
22
|
+
<script src="https://bumbu.me/svg-pan-zoom/dist/svg-pan-zoom.min.js"></script>
|
23
|
+
<script type="module">
|
24
|
+
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
|
25
|
+
|
26
|
+
mermaid.initialize({startOnLoad: false});
|
27
|
+
await mermaid.run({
|
28
|
+
querySelector: '.mermaid',
|
29
|
+
postRenderCallback: (id) => {
|
30
|
+
const container = document.getElementById("diagram-container");
|
31
|
+
const svgElement = container.querySelector("svg");
|
32
|
+
|
33
|
+
// Initialize Panzoom
|
34
|
+
const panzoomInstance = Panzoom(svgElement, {
|
35
|
+
maxScale: 5,
|
36
|
+
minScale: 0.5,
|
37
|
+
step: 0.1,
|
38
|
+
});
|
39
|
+
|
40
|
+
// Add mouse wheel zoom
|
41
|
+
container.addEventListener("wheel", (event) => {
|
42
|
+
panzoomInstance.zoomWithWheel(event);
|
43
|
+
});
|
44
|
+
}
|
45
|
+
});
|
46
|
+
|
47
|
+
|
48
|
+
const drawDiagram = async function () {
|
49
|
+
const element = document.querySelector('#graphDiv');
|
50
|
+
const graphDefinition = `
|
51
|
+
flowchart TD
|
52
|
+
%%{init: {"flowchart": {"htmlLabels": false}} }%%
|
53
|
+
|
54
|
+
b0491fd4-6324-4ed8-9a1c-7cbd9892e21b@{ shape: flip-tri, label: "*Information Supply Chain*
|
55
|
+
**New Drug Product Information Distribution**"}
|
56
|
+
63306fd5-4973-4764-89be-ef4ca645d67b@{ shape: text, label: "*Description*
|
57
|
+
**Managing the distribution of information about a new product.**"}
|
58
|
+
b0491fd4-6324-4ed8-9a1c-7cbd9892e21b~~~63306fd5-4973-4764-89be-ef4ca645d67b
|
59
|
+
961a3438-3969-468f-b0e9-055ea0405fd9@{ shape: text, label: "*Purpose*
|
60
|
+
**Ensuring information about a new product is distributed to all of the appropriate system so that it is visible for ordering, manufacturing and invoicing.**"}
|
61
|
+
63306fd5-4973-4764-89be-ef4ca645d67b~~~961a3438-3969-468f-b0e9-055ea0405fd9
|
62
|
+
c24e9ea0-171a-46d8-a5d8-3fedcfe97aa4@{ shape: rounded, label: "*Software Server*
|
63
|
+
**System:MFCTRL9482**"}
|
64
|
+
987df321-d940-4ce5-9ae1-8258736f0445@{ shape: rounded, label: "*Software Server*
|
65
|
+
**System:KCDEPOT01**"}
|
66
|
+
c24e9ea0-171a-46d8-a5d8-3fedcfe97aa4-->|"order ready [Data Flow]"|987df321-d940-4ce5-9ae1-8258736f0445
|
67
|
+
afefd870-5616-4f35-a557-774b88b96bef@{ shape: rounded, label: "*Software Server*
|
68
|
+
**System:EDDEPOT01**"}
|
69
|
+
c24e9ea0-171a-46d8-a5d8-3fedcfe97aa4-->|"order ready [Data Flow]"|afefd870-5616-4f35-a557-774b88b96bef
|
70
|
+
c7b1467a-dea2-4288-95e5-8e1bc3ab2ed3@{ shape: rounded, label: "*Software Server*
|
71
|
+
**System:WINCHDEPOT01**"}
|
72
|
+
c24e9ea0-171a-46d8-a5d8-3fedcfe97aa4-->|"order ready [Data Flow]"|c7b1467a-dea2-4288-95e5-8e1bc3ab2ed3
|
73
|
+
dd424526-24e9-4a10-a575-0700dfb8743a@{ shape: rounded, label: "*Software Server*
|
74
|
+
**System:cocoProducts**"}
|
75
|
+
a2e43afa-386a-4acd-ba1d-7773b368c34a@{ shape: rounded, label: "*Software Server*
|
76
|
+
**System:globalCRM**"}
|
77
|
+
dd424526-24e9-4a10-a575-0700dfb8743a-->|"new product offering [Data Flow]"|a2e43afa-386a-4acd-ba1d-7773b368c34a
|
78
|
+
style 63306fd5-4973-4764-89be-ef4ca645d67b color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
79
|
+
style b0491fd4-6324-4ed8-9a1c-7cbd9892e21b color:#FFFFFF, fill:#004563, stroke:#b7c0c7
|
80
|
+
style c24e9ea0-171a-46d8-a5d8-3fedcfe97aa4 color:#000000, fill:#e0ab18, stroke:#004563
|
81
|
+
style a2e43afa-386a-4acd-ba1d-7773b368c34a color:#000000, fill:#e0ab18, stroke:#004563
|
82
|
+
style 961a3438-3969-468f-b0e9-055ea0405fd9 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
83
|
+
style 987df321-d940-4ce5-9ae1-8258736f0445 color:#000000, fill:#e0ab18, stroke:#004563
|
84
|
+
style c7b1467a-dea2-4288-95e5-8e1bc3ab2ed3 color:#000000, fill:#e0ab18, stroke:#004563
|
85
|
+
style dd424526-24e9-4a10-a575-0700dfb8743a color:#000000, fill:#e0ab18, stroke:#004563
|
86
|
+
style afefd870-5616-4f35-a557-774b88b96bef color:#000000, fill:#e0ab18, stroke:#004563`;
|
87
|
+
const {svg} = await mermaid.render('mySvgId', graphDefinition);
|
88
|
+
element.innerHTML = svg.replace(/( )*max-width:( 0-9\.)*px;/i, '');
|
89
|
+
|
90
|
+
var doPan = false;
|
91
|
+
var eventsHandler;
|
92
|
+
var panZoom;
|
93
|
+
var mousepos;
|
94
|
+
|
95
|
+
eventsHandler = {
|
96
|
+
haltEventListeners: ['mousedown', 'mousemove', 'mouseup']
|
97
|
+
|
98
|
+
, mouseDownHandler: function (ev) {
|
99
|
+
if (event.target.className == "[object SVGAnimatedString]") {
|
100
|
+
doPan = true;
|
101
|
+
mousepos = {x: ev.clientX, y: ev.clientY}
|
102
|
+
}
|
103
|
+
;
|
104
|
+
}
|
105
|
+
|
106
|
+
, mouseMoveHandler: function (ev) {
|
107
|
+
if (doPan) {
|
108
|
+
panZoom.panBy({x: ev.clientX - mousepos.x, y: ev.clientY - mousepos.y});
|
109
|
+
mousepos = {x: ev.clientX, y: ev.clientY};
|
110
|
+
window.getSelection().removeAllRanges();
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
, mouseUpHandler: function (ev) {
|
115
|
+
doPan = false;
|
116
|
+
}
|
117
|
+
|
118
|
+
, init: function (options) {
|
119
|
+
options.svgElement.addEventListener('mousedown', this.mouseDownHandler, false);
|
120
|
+
options.svgElement.addEventListener('mousemove', this.mouseMoveHandler, false);
|
121
|
+
options.svgElement.addEventListener('mouseup', this.mouseUpHandler, false);
|
122
|
+
}
|
123
|
+
|
124
|
+
, destroy: function (options) {
|
125
|
+
options.svgElement.removeEventListener('mousedown', this.mouseDownHandler, false);
|
126
|
+
options.svgElement.removeEventListener('mousemove', this.mouseMoveHandler, false);
|
127
|
+
options.svgElement.removeEventListener('mouseup', this.mouseUpHandler, false);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
panZoom = svgPanZoom('#mySvgId', {
|
131
|
+
zoomEnabled: true
|
132
|
+
, controlIconsEnabled: true
|
133
|
+
, fit: 1
|
134
|
+
, center: 1
|
135
|
+
, customEventsHandler: eventsHandler
|
136
|
+
})
|
137
|
+
};
|
138
|
+
await drawDiagram();
|
139
|
+
</script>
|
140
|
+
</body>
|
141
|
+
|