fhirsmith 0.3.0

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.
Files changed (277) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/FHIRsmith.png +0 -0
  3. package/README.md +277 -0
  4. package/config-template.json +144 -0
  5. package/library/folder-setup.js +58 -0
  6. package/library/html-server.js +166 -0
  7. package/library/html.js +835 -0
  8. package/library/i18nsupport.js +259 -0
  9. package/library/languages.js +779 -0
  10. package/library/logger-telnet.js +205 -0
  11. package/library/logger.js +279 -0
  12. package/library/package-manager.js +876 -0
  13. package/library/utilities.js +196 -0
  14. package/library/version-utilities.js +1056 -0
  15. package/npmprojector/config-example.json +13 -0
  16. package/npmprojector/indexer.js +394 -0
  17. package/npmprojector/npmprojector.js +395 -0
  18. package/npmprojector/readme.md +174 -0
  19. package/npmprojector/watcher.js +335 -0
  20. package/package.json +119 -0
  21. package/packages/package-crawler.js +846 -0
  22. package/packages/packages-template.html +126 -0
  23. package/packages/packages.js +2838 -0
  24. package/passwords.ini +2 -0
  25. package/publisher/publisher-template.html +208 -0
  26. package/publisher/publisher.js +2167 -0
  27. package/publisher/task-draft.js +458 -0
  28. package/registry/api.js +735 -0
  29. package/registry/crawler.js +637 -0
  30. package/registry/model.js +513 -0
  31. package/registry/readme.md +243 -0
  32. package/registry/registry-data.json +121015 -0
  33. package/registry/registry-template.html +126 -0
  34. package/registry/registry.js +1395 -0
  35. package/registry/test-runner.js +237 -0
  36. package/root-template.html +124 -0
  37. package/server.js +524 -0
  38. package/shl/private-key.pem +5 -0
  39. package/shl/public-key.pem +18 -0
  40. package/shl/shl.js +1125 -0
  41. package/shl/vhl.js +69 -0
  42. package/static/FHIRsmith128.png +0 -0
  43. package/static/FHIRsmith16.png +0 -0
  44. package/static/FHIRsmith32.png +0 -0
  45. package/static/FHIRsmith64.png +0 -0
  46. package/static/assets/css/bootstrap-fhir.css +5302 -0
  47. package/static/assets/css/bootstrap-glyphicons.css +2 -0
  48. package/static/assets/css/bootstrap.css +4097 -0
  49. package/static/assets/css/jquery-ui.css +523 -0
  50. package/static/assets/css/jquery-ui.structure.css +863 -0
  51. package/static/assets/css/jquery-ui.structure.min.css +5 -0
  52. package/static/assets/css/jquery-ui.theme.css +439 -0
  53. package/static/assets/css/jquery-ui.theme.min.css +5 -0
  54. package/static/assets/css/jquery.ui.all.css +7 -0
  55. package/static/assets/css/modules.css +18 -0
  56. package/static/assets/css/project.css +367 -0
  57. package/static/assets/css/pygments-manni.css +66 -0
  58. package/static/assets/css/tags.css +74 -0
  59. package/static/assets/css/xml.css +2 -0
  60. package/static/assets/fonts/glyphiconshalflings-regular.eot +0 -0
  61. package/static/assets/fonts/glyphiconshalflings-regular.otf +0 -0
  62. package/static/assets/fonts/glyphiconshalflings-regular.svg +175 -0
  63. package/static/assets/fonts/glyphiconshalflings-regular.ttf +0 -0
  64. package/static/assets/fonts/glyphiconshalflings-regular.woff +0 -0
  65. package/static/assets/ico/apple-touch-icon-114-precomposed.png +0 -0
  66. package/static/assets/ico/apple-touch-icon-144-precomposed.png +0 -0
  67. package/static/assets/ico/apple-touch-icon-57-precomposed.png +0 -0
  68. package/static/assets/ico/apple-touch-icon-72-precomposed.png +0 -0
  69. package/static/assets/ico/favicon.ico +0 -0
  70. package/static/assets/ico/favicon.png +0 -0
  71. package/static/assets/images/fhir-logo-www.png +0 -0
  72. package/static/assets/images/fhir-logo.png +0 -0
  73. package/static/assets/images/hl7-logo.png +0 -0
  74. package/static/assets/images/logo_ansinew.jpg +0 -0
  75. package/static/assets/images/search.png +0 -0
  76. package/static/assets/images/stripe.png +0 -0
  77. package/static/assets/images/target.png +0 -0
  78. package/static/assets/images/tx-registry-root.gif +0 -0
  79. package/static/assets/images/tx-registry.png +0 -0
  80. package/static/assets/images/tx-server.png +0 -0
  81. package/static/assets/images/tx-version.png +0 -0
  82. package/static/assets/js/bootstrap.min.js +6 -0
  83. package/static/assets/js/fhir-gw.js +259 -0
  84. package/static/assets/js/fhir.js +2 -0
  85. package/static/assets/js/html5shiv.js +8 -0
  86. package/static/assets/js/jcookie.js +96 -0
  87. package/static/assets/js/jquery-ui.min.js +6 -0
  88. package/static/assets/js/jquery.js +10716 -0
  89. package/static/assets/js/jquery.min.js +2 -0
  90. package/static/assets/js/jquery.ui.core.js +314 -0
  91. package/static/assets/js/jquery.ui.draggable.js +825 -0
  92. package/static/assets/js/jquery.ui.mouse.js +162 -0
  93. package/static/assets/js/jquery.ui.resizable.js +842 -0
  94. package/static/assets/js/jquery.ui.widget.js +268 -0
  95. package/static/assets/js/json2.js +487 -0
  96. package/static/assets/js/jtip.js +97 -0
  97. package/static/assets/js/respond.min.js +6 -0
  98. package/static/assets/js/statuspage.js +70 -0
  99. package/static/assets/js/xml.js +2 -0
  100. package/static/dist/js/bootstrap.js +1964 -0
  101. package/static/favicon.png +0 -0
  102. package/static/fhir.css +626 -0
  103. package/static/icon-fhir-16.png +0 -0
  104. package/static/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  105. package/static/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  106. package/static/images/ui-bg_flat_10_000000_40x100.png +0 -0
  107. package/static/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  108. package/static/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  109. package/static/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  110. package/static/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  111. package/static/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  112. package/static/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  113. package/static/images/ui-icons_222222_256x240.png +0 -0
  114. package/static/images/ui-icons_228ef1_256x240.png +0 -0
  115. package/static/images/ui-icons_ef8c08_256x240.png +0 -0
  116. package/static/images/ui-icons_ffd27a_256x240.png +0 -0
  117. package/static/images/ui-icons_ffffff_256x240.png +0 -0
  118. package/static/js/jquery.effects.blind.js +49 -0
  119. package/static/js/jquery.effects.bounce.js +78 -0
  120. package/static/js/jquery.effects.clip.js +54 -0
  121. package/static/js/jquery.effects.core.js +763 -0
  122. package/static/js/jquery.effects.drop.js +50 -0
  123. package/static/js/jquery.effects.explode.js +79 -0
  124. package/static/js/jquery.effects.fade.js +32 -0
  125. package/static/js/jquery.effects.fold.js +56 -0
  126. package/static/js/jquery.effects.highlight.js +50 -0
  127. package/static/js/jquery.effects.pulsate.js +51 -0
  128. package/static/js/jquery.effects.scale.js +178 -0
  129. package/static/js/jquery.effects.shake.js +57 -0
  130. package/static/js/jquery.effects.slide.js +50 -0
  131. package/static/js/jquery.effects.transfer.js +45 -0
  132. package/static/js/jquery.ui.accordion.js +611 -0
  133. package/static/js/jquery.ui.autocomplete.js +612 -0
  134. package/static/js/jquery.ui.button.js +416 -0
  135. package/static/js/jquery.ui.datepicker.js +1823 -0
  136. package/static/js/jquery.ui.dialog.js +878 -0
  137. package/static/js/jquery.ui.droppable.js +296 -0
  138. package/static/js/jquery.ui.position.js +252 -0
  139. package/static/js/jquery.ui.progressbar.js +109 -0
  140. package/static/js/jquery.ui.selectable.js +266 -0
  141. package/static/js/jquery.ui.slider.js +666 -0
  142. package/static/js/jquery.ui.sortable.js +1077 -0
  143. package/static/js/jquery.ui.tabs.js +758 -0
  144. package/stats.js +80 -0
  145. package/test-cache/vsac/vsac-valuesets.db +0 -0
  146. package/token/nginx_passport_setup.md +383 -0
  147. package/token/security_guide.md +294 -0
  148. package/token/token-template.html +330 -0
  149. package/token/token.js +1300 -0
  150. package/translations/Messages.properties +1510 -0
  151. package/translations/Messages_ar.properties +1399 -0
  152. package/translations/Messages_de.properties +836 -0
  153. package/translations/Messages_es.properties +737 -0
  154. package/translations/Messages_fr.properties +1 -0
  155. package/translations/Messages_ja.properties +893 -0
  156. package/translations/Messages_nl.properties +1357 -0
  157. package/translations/Messages_pt.properties +1302 -0
  158. package/translations/Messages_ru.properties +1 -0
  159. package/translations/Messages_uz.properties +1 -0
  160. package/translations/Messages_zh.properties +1 -0
  161. package/translations/rendering-phrases.properties +1128 -0
  162. package/translations/rendering-phrases_ar.properties +1091 -0
  163. package/translations/rendering-phrases_de.properties +6 -0
  164. package/translations/rendering-phrases_es.properties +6 -0
  165. package/translations/rendering-phrases_fr.properties +624 -0
  166. package/translations/rendering-phrases_ja.properties +21 -0
  167. package/translations/rendering-phrases_nl.properties +970 -0
  168. package/translations/rendering-phrases_pt.properties +1020 -0
  169. package/translations/rendering-phrases_ru.properties +1094 -0
  170. package/translations/rendering-phrases_uz.properties +1 -0
  171. package/translations/rendering-phrases_zh.properties +1 -0
  172. package/tx/README.md +418 -0
  173. package/tx/cm/cm-api.js +110 -0
  174. package/tx/cm/cm-database.js +735 -0
  175. package/tx/cm/cm-package.js +325 -0
  176. package/tx/cs/cs-api.js +789 -0
  177. package/tx/cs/cs-areacode.js +615 -0
  178. package/tx/cs/cs-country.js +1110 -0
  179. package/tx/cs/cs-cpt.js +785 -0
  180. package/tx/cs/cs-cs.js +1579 -0
  181. package/tx/cs/cs-currency.js +539 -0
  182. package/tx/cs/cs-db.js +1321 -0
  183. package/tx/cs/cs-hgvs.js +329 -0
  184. package/tx/cs/cs-lang.js +465 -0
  185. package/tx/cs/cs-loinc.js +1485 -0
  186. package/tx/cs/cs-mimetypes.js +238 -0
  187. package/tx/cs/cs-ndc.js +704 -0
  188. package/tx/cs/cs-omop.js +1025 -0
  189. package/tx/cs/cs-provider-api.js +43 -0
  190. package/tx/cs/cs-provider-list.js +37 -0
  191. package/tx/cs/cs-rxnorm.js +808 -0
  192. package/tx/cs/cs-snomed.js +1102 -0
  193. package/tx/cs/cs-ucum.js +514 -0
  194. package/tx/cs/cs-unii.js +271 -0
  195. package/tx/cs/cs-uri.js +218 -0
  196. package/tx/cs/cs-usstates.js +305 -0
  197. package/tx/dev.fhir.org.yml +14 -0
  198. package/tx/fixtures/test-cases-setup.json +18 -0
  199. package/tx/fixtures/test-cases.yml +16 -0
  200. package/tx/html/codesystem-operations.liquid +25 -0
  201. package/tx/html/home-metrics.liquid +247 -0
  202. package/tx/html/operations-form.liquid +148 -0
  203. package/tx/html/search-form.liquid +62 -0
  204. package/tx/html/tx-template.html +133 -0
  205. package/tx/html/valueset-operations.liquid +54 -0
  206. package/tx/importers/atc-to-fhir.js +316 -0
  207. package/tx/importers/import-loinc.module.js +1536 -0
  208. package/tx/importers/import-ndc.module.js +1088 -0
  209. package/tx/importers/import-rxnorm.module.js +898 -0
  210. package/tx/importers/import-sct.module.js +2457 -0
  211. package/tx/importers/import-unii.module.js +601 -0
  212. package/tx/importers/readme.md +453 -0
  213. package/tx/importers/subset-loinc.module.js +1081 -0
  214. package/tx/importers/subset-rxnorm.module.js +938 -0
  215. package/tx/importers/tx-import-base.js +351 -0
  216. package/tx/importers/tx-import-settings.js +310 -0
  217. package/tx/importers/tx-import.js +357 -0
  218. package/tx/library/canonical-resource.js +88 -0
  219. package/tx/library/capabilitystatement.js +292 -0
  220. package/tx/library/codesystem.js +774 -0
  221. package/tx/library/conceptmap.js +568 -0
  222. package/tx/library/designations.js +932 -0
  223. package/tx/library/errors.js +77 -0
  224. package/tx/library/extensions.js +117 -0
  225. package/tx/library/namingsystem.js +322 -0
  226. package/tx/library/operation-outcome.js +127 -0
  227. package/tx/library/parameters.js +105 -0
  228. package/tx/library/renderer.js +1559 -0
  229. package/tx/library/terminologycapabilities.js +418 -0
  230. package/tx/library/ucum-parsers.js +1029 -0
  231. package/tx/library/ucum-service.js +370 -0
  232. package/tx/library/ucum-types.js +1099 -0
  233. package/tx/library/valueset.js +543 -0
  234. package/tx/library.js +676 -0
  235. package/tx/ocl/cm-ocl.js +106 -0
  236. package/tx/ocl/cs-ocl.js +39 -0
  237. package/tx/ocl/vs-ocl.js +105 -0
  238. package/tx/operation-context.js +568 -0
  239. package/tx/params.js +613 -0
  240. package/tx/provider.js +403 -0
  241. package/tx/sct/ecl.js +1560 -0
  242. package/tx/sct/expressions.js +2077 -0
  243. package/tx/sct/structures.js +1396 -0
  244. package/tx/tx-html.js +1063 -0
  245. package/tx/tx.fhir.org.yml +39 -0
  246. package/tx/tx.js +927 -0
  247. package/tx/vs/vs-api.js +112 -0
  248. package/tx/vs/vs-database.js +786 -0
  249. package/tx/vs/vs-package.js +358 -0
  250. package/tx/vs/vs-vsac.js +366 -0
  251. package/tx/workers/batch-validate.js +129 -0
  252. package/tx/workers/batch.js +361 -0
  253. package/tx/workers/closure.js +32 -0
  254. package/tx/workers/expand.js +1845 -0
  255. package/tx/workers/lookup.js +407 -0
  256. package/tx/workers/metadata.js +467 -0
  257. package/tx/workers/operations.js +34 -0
  258. package/tx/workers/read.js +164 -0
  259. package/tx/workers/search.js +384 -0
  260. package/tx/workers/subsumes.js +334 -0
  261. package/tx/workers/translate.js +492 -0
  262. package/tx/workers/validate.js +2504 -0
  263. package/tx/workers/worker.js +904 -0
  264. package/tx/xml/capabilitystatement-xml.js +63 -0
  265. package/tx/xml/codesystem-xml.js +62 -0
  266. package/tx/xml/conceptmap-xml.js +65 -0
  267. package/tx/xml/namingsystem-xml.js +65 -0
  268. package/tx/xml/operationoutcome-xml.js +127 -0
  269. package/tx/xml/parameters-xml.js +312 -0
  270. package/tx/xml/terminologycapabilities-xml.js +64 -0
  271. package/tx/xml/valueset-xml.js +64 -0
  272. package/tx/xml/xml-base.js +603 -0
  273. package/vcl/vcl-parser.js +1098 -0
  274. package/vcl/vcl.js +253 -0
  275. package/windows-install.js +19 -0
  276. package/xig/xig-template.html +124 -0
  277. package/xig/xig.js +3049 -0
@@ -0,0 +1,148 @@
1
+ <h2>Expand ValueSet</h2>
2
+ <form method="get" action="ValueSet/$expand" style="margin-left: 10px; margin-top: 5px;">
3
+ <table class="grid" cellpadding="0" cellspacing="0">
4
+ <tr>
5
+ <td style="position: relative;">
6
+ URL: <input type="text" name="url" id="vsUrlInput" size="40" autocomplete="off"/><span style="color: maroon">*</span>
7
+ <div id="vsUrlSuggestions" class="typeahead-suggestions" style="display:none; position:absolute; background:white; border:1px solid #ccc; max-height:200px; overflow-y:auto; z-index:1000; width:100%;"></div>
8
+ </td>
9
+ <td>Version: <input type="text" name="valueSetVersion" size="10"/></td>
10
+ </tr>
11
+ <tr>
12
+ <td>Filter: <input type="text" name="filter" size="20"/></td>
13
+ <td>Language: <input type="text" name="displayLanguage" size="10"/></td>
14
+ </tr>
15
+ <tr>
16
+ <td colspan="2">
17
+ <input type="checkbox" name="includeDesignations" id="expand_desig" value="true"/>
18
+ <label for="expand_desig">Include Designations</label>
19
+ <input type="checkbox" name="activeOnly" id="expand_active" value="true"/>
20
+ <label for="expand_active">Active Only</label>
21
+ <input type="checkbox" name="excludeNested" id="expand_excludeNested" value="true"/>
22
+ <label for="expand_excludeNested">Not nested</label>
23
+ </td>
24
+ </tr>
25
+ </table>
26
+ <button type="submit" class="btn btn-sm btn-primary">Expand</button>
27
+ </form>
28
+
29
+ <h2>Validate Code</h2>
30
+ <form method="get" action="ValueSet/$validate-code" style="margin-left: 10px; margin-top: 5px;">
31
+ <input type="hidden" name="inferSystem" id="{{ inferSystemId }}" value="true"/>
32
+ <table class="grid" cellpadding="0" cellspacing="0">
33
+ <tr>
34
+ <td style="position: relative;">
35
+ ValueSet URL: <input type="text" name="url" id="vcVsUrlInput" size="40" autocomplete="off"/><span style="color: maroon">*</span>
36
+ <div id="vcVsUrlSuggestions" class="typeahead-suggestions" style="display:none; position:absolute; background:white; border:1px solid #ccc; max-height:200px; overflow-y:auto; z-index:1000; width:100%;"></div>
37
+ </td>
38
+ <td>ValueSet Version: <input type="text" name="valueSetVersion" size="10"/></td>
39
+ </tr>
40
+ <tr>
41
+ <td>System: <input type="text" name="system" id="{{ vcSystemId }}" size="30" onchange="updateInferSystem('{{ vcSystemId }}', '{{ inferSystemId }}')"/></td>
42
+ <td>Version: <input type="text" name="version" size="10"/></td>
43
+ </tr>
44
+ <tr>
45
+ <td>Code: <input type="text" name="code" size="20" required/><span style="color: maroon">*</span></td>
46
+ <td>Display: <input type="text" name="display" size="20"/></td>
47
+ </tr>
48
+ <tr>
49
+ <td>Language: <input type="text" name="displayLanguage" size="10"/></td>
50
+ <td>
51
+ <input type="checkbox" name="abstract" value="true"/>
52
+ <label>Abstract</label>
53
+ </td>
54
+ </tr>
55
+ </table>
56
+ <button type="submit" class="btn btn-sm btn-primary">Validate Code</button>
57
+ </form>
58
+
59
+ <script>
60
+ (function() {
61
+ const valueSets = {{ valueSetsJson }};
62
+
63
+ function setupTypeahead(inputId, suggestionsId) {
64
+ const input = document.getElementById(inputId);
65
+ const suggestions = document.getElementById(suggestionsId);
66
+ let selectedIndex = -1;
67
+
68
+ input.addEventListener('input', function() {
69
+ const query = this.value.toLowerCase();
70
+ suggestions.innerHTML = '';
71
+ selectedIndex = -1;
72
+
73
+ if (query.length < 2) {
74
+ suggestions.style.display = 'none';
75
+ return;
76
+ }
77
+
78
+ const matches = valueSets
79
+ .filter(vs => vs.toLowerCase().includes(query))
80
+ .slice(0, 50);
81
+
82
+ if (matches.length === 0) {
83
+ suggestions.style.display = 'none';
84
+ return;
85
+ }
86
+
87
+ for (const match of matches) {
88
+ const div = document.createElement('div');
89
+ div.textContent = match;
90
+ div.style.padding = '4px 8px';
91
+ div.style.cursor = 'pointer';
92
+ div.addEventListener('mouseenter', function() {
93
+ this.style.backgroundColor = '#e0e0e0';
94
+ });
95
+ div.addEventListener('mouseleave', function() {
96
+ this.style.backgroundColor = 'white';
97
+ });
98
+ div.addEventListener('click', function() {
99
+ input.value = match;
100
+ suggestions.style.display = 'none';
101
+ });
102
+ suggestions.appendChild(div);
103
+ }
104
+
105
+ suggestions.style.display = 'block';
106
+ });
107
+
108
+ input.addEventListener('keydown', function(e) {
109
+ const items = suggestions.querySelectorAll('div');
110
+ if (items.length === 0) return;
111
+
112
+ if (e.key === 'ArrowDown') {
113
+ e.preventDefault();
114
+ selectedIndex = Math.min(selectedIndex + 1, items.length - 1);
115
+ updateSelection(items);
116
+ } else if (e.key === 'ArrowUp') {
117
+ e.preventDefault();
118
+ selectedIndex = Math.max(selectedIndex - 1, 0);
119
+ updateSelection(items);
120
+ } else if (e.key === 'Enter' && selectedIndex >= 0) {
121
+ e.preventDefault();
122
+ input.value = items[selectedIndex].textContent;
123
+ suggestions.style.display = 'none';
124
+ } else if (e.key === 'Escape') {
125
+ suggestions.style.display = 'none';
126
+ }
127
+ });
128
+
129
+ function updateSelection(items) {
130
+ items.forEach((item, i) => {
131
+ item.style.backgroundColor = i === selectedIndex ? '#e0e0e0' : 'white';
132
+ });
133
+ if (selectedIndex >= 0) {
134
+ items[selectedIndex].scrollIntoView({ block: 'nearest' });
135
+ }
136
+ }
137
+
138
+ document.addEventListener('click', function(e) {
139
+ if (!input.contains(e.target) && !suggestions.contains(e.target)) {
140
+ suggestions.style.display = 'none';
141
+ }
142
+ });
143
+ }
144
+
145
+ setupTypeahead('vsUrlInput', 'vsUrlSuggestions');
146
+ setupTypeahead('vcVsUrlInput', 'vcVsUrlSuggestions');
147
+ })();
148
+ </script>
@@ -0,0 +1,62 @@
1
+ <h3>Search</h3>
2
+
3
+ <form method="get" id="searchForm" action="{{ baseUrl }}/CodeSystem">
4
+ <table class="grid" cellpadding="0" cellspacing="0">
5
+ <tr>
6
+ <td colspan="2">URL: <input type="text" name="url" size="40"/></td>
7
+ <td>Version: <input type="text" name="version"/></td>
8
+ </tr>
9
+ <tr>
10
+ <td title="Searches in name, title, description, publisher">Text: <input type="text" name="text"/></td>
11
+ <td>Status: <select name="status" class="form-select"><option value="">(any status)</option>
12
+ <option value="draft">draft</option><option value="active">active</option>
13
+ <option value="retired">retired</option><option value="unknown">unknown</option></select></td>
14
+ <td>Language: <input type="text" name="lang" size="10"/> (ietf code)</td>
15
+ </tr>
16
+ <tr>
17
+ <td colspan="2" title="CodeSystem - for supplements, value sets, and concept maps">System: <input type="text" name="system" size="40"/></td>
18
+ <td>CS Content: <select name="content-mode" class="form-select"><option value="">(any content)</option>
19
+ <option value="not-present">not-present</option><option value="example">example</option>
20
+ <option value="fragment">fragment</option><option value="complete">complete</option>
21
+ <option value="supplement">supplement</option></select></td>
22
+ </tr>
23
+ </table>
24
+
25
+ <input type="hidden" name="_elements" id="elementsInput" value="url,version,name,title,status,content,date" disabled/>
26
+
27
+ <button type="submit" class="btn btn-primary">Search:</button>
28
+ <input type="radio" name="mode" value="cs" checked onchange="updateSearchAction('{{ baseUrl }}')"/> CodeSystems
29
+ <input type="radio" name="mode" value="vs" onchange="updateSearchAction('{{ baseUrl }}')"/> ValueSets
30
+ <input type="radio" name="mode" value="cm" onchange="updateSearchAction('{{ baseUrl }}')"/> ConceptMaps
31
+ |
32
+ <input type="checkbox" id="summaryTable" onchange="updateSummaryTable()"/> <label for="summaryTable">Summary Table</label>
33
+ </form>
34
+
35
+ <p>Or see the <a href="op.html">Operations</a></p>
36
+
37
+ <script>
38
+ function updateSearchAction(baseUrl) {
39
+ const form = document.getElementById('searchForm');
40
+ const mode = document.querySelector('input[name="mode"]:checked').value;
41
+ const resourceMap = { cs: 'CodeSystem', vs: 'ValueSet', cm: 'ConceptMap' };
42
+ form.action = baseUrl + '/' + resourceMap[mode];
43
+ }
44
+
45
+ function updateSummaryTable() {
46
+ const checkbox = document.getElementById('summaryTable');
47
+ const elementsInput = document.getElementById('elementsInput');
48
+ elementsInput.disabled = !checkbox.checked;
49
+ localStorage.setItem('txSummaryTable', checkbox.checked);
50
+ }
51
+
52
+ // Restore summary table preference on page load
53
+ document.addEventListener('DOMContentLoaded', function() {
54
+ const saved = localStorage.getItem('txSummaryTable');
55
+ if (saved === 'true') {
56
+ const checkbox = document.getElementById('summaryTable');
57
+ checkbox.checked = true;
58
+ document.getElementById('elementsInput').disabled = false;
59
+ }
60
+ });
61
+
62
+ </script>
@@ -0,0 +1,133 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <html xml:lang="en" lang="en">
4
+ <head>
5
+ <title>FHIRsmith: [%title%]</title>
6
+
7
+ <meta charset="utf-8"/>
8
+ <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
9
+ <meta content="http://hl7.org/fhir" name="author"/>
10
+ <meta charset="utf-8" http-equiv="X-UA-Compatible" content="IE=edge" />
11
+
12
+ <link rel="stylesheet" href="/fhir.css"/>
13
+
14
+ <!-- Bootstrap core CSS -->
15
+ <link rel="stylesheet" href="/assets/css/bootstrap.css"/>
16
+ <link rel="stylesheet" href="/assets/css/bootstrap-fhir.css"/>
17
+
18
+ <!-- Project extras -->
19
+ <link rel="stylesheet" href="/assets/css/project.css"/>
20
+ <link rel="stylesheet" href="/assets/css/pygments-manni.css"/>
21
+
22
+ <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
23
+ <!-- [if lt IE 9]>
24
+ <script src="/assets/js/html5shiv.js"></script>
25
+ <script src="/assets/js/respond.min.js"></script>
26
+ <![endif] -->
27
+
28
+ <!-- Favicons -->
29
+ <link sizes="144x144" rel="apple-touch-icon-precomposed" href="/assets/ico/apple-touch-icon-144-precomposed.png"/>
30
+ <link sizes="114x114" rel="apple-touch-icon-precomposed" href="/assets/ico/apple-touch-icon-114-precomposed.png"/>
31
+ <link sizes="72x72" rel="apple-touch-icon-precomposed" href="/assets/ico/apple-touch-icon-72-precomposed.png"/>
32
+ <link rel="apple-touch-icon-precomposed" href="/assets/ico/apple-touch-icon-57-precomposed.png"/>
33
+ <link rel="shortcut icon" href="/assets/ico/favicon.png"/>
34
+ <script type="text/javascript" src="/assets/js/json2.js"></script>
35
+ <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
36
+ <script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>
37
+ </head>
38
+
39
+ <body>
40
+ <script>
41
+ function toggleJsonSource(id) {
42
+ const elem = document.getElementById(id);
43
+ const btn = elem.previousElementSibling;
44
+ if (elem.style.display === 'none') {
45
+ elem.style.display = 'block';
46
+ btn.textContent = 'Hide JSON Source';
47
+ } else {
48
+ elem.style.display = 'none';
49
+ btn.textContent = 'Show JSON Source';
50
+ }
51
+ }
52
+ function toggleOriginalNarrative(id) {
53
+ const elem = document.getElementById(id);
54
+ const btn = elem.previousElementSibling;
55
+ if (elem.style.display === 'none') {
56
+ elem.style.display = 'block';
57
+ btn.textContent = 'Hide Original Narrative';
58
+ } else {
59
+ elem.style.display = 'none';
60
+ btn.textContent = 'Show Original Narrative';
61
+ }
62
+ }
63
+ function toggleOperations(id) {
64
+ const elem = document.getElementById(id);
65
+ const btn = elem.previousElementSibling;
66
+ if (elem.style.display === 'none') {
67
+ elem.style.display = 'block';
68
+ btn.textContent = 'Hide Operations';
69
+ } else {
70
+ elem.style.display = 'none';
71
+ btn.textContent = 'Show Operations';
72
+ }
73
+ }
74
+
75
+ function updateInferSystem(systemId, inferSystemId) {
76
+ const systemInput = document.getElementById(systemId);
77
+ const inferSystemInput = document.getElementById(inferSystemId);
78
+ inferSystemInput.disabled = (systemInput.value.trim() !== '');
79
+ }
80
+ </script>
81
+ <div id="segment-navbar" class="segment">
82
+ <div id="stripe"> </div>
83
+ <div class="container">
84
+ <div style="background-color: #ad1f2f; padding: 6px; color: white;">
85
+ <a href="http://www.hl7.org/fhir" style="color: gold" title="Fast Healthcare Interoperability Resources - Home Page"><img border="0" src="/icon-fhir-16.png" style="vertical-align: text-bottom"/> <b>FHIR</b></a> [%fhir-version%] &copy; HL7.org &nbsp;|&nbsp;
86
+ <a href="https://github.com/HealthIntersections/FHIRsmith/blob/main/README.md" style="color: gold"><img border="0" src="/FHIRsmith16.png" style="vertical-align: text-bottom"/> FHIRsmith</a> [%ver%] &nbsp;|&nbsp;
87
+ <a href="/" style="color: gold"> Server Home</a> &nbsp;|&nbsp;
88
+ <a href="[%endpoint-path%]" style="color: gold">TX Home</a> &nbsp;|&nbsp;
89
+ <a href="[%endpoint-path%]/metadata" style="color: gold">Capability Statement</a> &nbsp;|&nbsp;
90
+ <a href="[%endpoint-path%]/metadata?mode=terminology" style="color: gold">Terminology Capabilities</a> &nbsp;|&nbsp;
91
+ <a href="[%endpoint-path%]/op.html" style="color: gold">Operations</a> &nbsp;|&nbsp;
92
+ &nbsp;
93
+ </div>
94
+ </div>
95
+ </div>
96
+
97
+ <div id="segment-content" class="segment">
98
+ <div class="container">
99
+ <div class="row">
100
+ <div class="inner-wrapper">
101
+ <div class="col-12">
102
+
103
+ <h2><img border="0" src="/FHIRsmith32.png" style="vertical-align: text-bottom"/> TX: [%title%] </h2>
104
+
105
+ [%content%]
106
+
107
+
108
+ </div>
109
+
110
+ </div>
111
+ </div>
112
+ </div>
113
+ </div>
114
+
115
+ <div id="segment-footer" class="segment">
116
+ <div class="container">
117
+ <div class="inner-wrapper">
118
+ <p>
119
+ <a href="http://www.hl7.org/fhir" style="color: gold" title="Fast Healthcare Interoperability Resources - Home Page"><img border="0" src="/icon-fhir-16.png" style="vertical-align: text-bottom"/> <b>FHIR</b></a> &copy; HL7.org 2011+. &nbsp;|&nbsp;
120
+ <a href="https://github.com/HealthIntersections/FHIRsmith/blob/main/README.md" style="color: gold"><img border="0" src="/FHIRsmith16.png" style="vertical-align: text-bottom"/> FHIRsmith</a> [%ver%] &copy; HealthIntersections.com.au 2023+ &nbsp;|&nbsp;
121
+ FHIR Version [%fhir-version%] &nbsp;|&nbsp; ([%ms%] ms)
122
+ </p>
123
+ </div>
124
+ </div>
125
+ </div>
126
+
127
+ <!-- JS and analytics only. -->
128
+ <script src="/assets/js/respond.min.js"/>
129
+ <script src="/assets/js/fhir.js"/>
130
+
131
+ </body>
132
+
133
+ </html>
@@ -0,0 +1,54 @@
1
+ <div class="operations" style="margin-top: 20px;">
2
+ <button type="button" class="btn btn-sm btn-outline-secondary" onclick="toggleOperations('{{ opsId }}')">Show Operations</button>
3
+ <div id="{{ opsId }}" style="display: none; margin-top: 10px;">
4
+
5
+ <div class="operation-form" style="margin-bottom: 15px;">
6
+ <strong>Expand</strong>
7
+ <form method="get" action="$expand" style="margin-left: 10px; margin-top: 5px;">
8
+ <input type="hidden" name="url" value="{{ url }}"/>
9
+ <table class="grid" cellpadding="0" cellspacing="0">
10
+ <tr>
11
+ <td>Filter: <input type="text" name="filter" size="20"/></td>
12
+ <td>Language: <input type="text" name="displayLanguage" size="10"/></td>
13
+ </tr>
14
+ <tr>
15
+ <td colspan="2">
16
+ <input type="checkbox" name="includeDesignations" id="expand_desig" value="true"/>
17
+ <label for="expand_desig">Include Designations</label>
18
+ <input type="checkbox" name="activeOnly" id="expand_active" value="true"/>
19
+ <label for="expand_active">Active Only</label>
20
+ </td>
21
+ </tr>
22
+ </table>
23
+ <button type="submit" class="btn btn-sm btn-primary">Expand</button>
24
+ </form>
25
+ </div>
26
+
27
+ <div class="operation-form" style="margin-bottom: 15px;">
28
+ <strong>Validate Code (ValueSet)</strong>
29
+ <form method="get" action="$validate-code" style="margin-left: 10px; margin-top: 5px;">
30
+ <input type="hidden" name="url" value="{{ url }}"/>
31
+ <input type="hidden" name="inferSystem" id="{{ inferSystemId }}" value="true"/>
32
+ <table class="grid" cellpadding="0" cellspacing="0">
33
+ <tr>
34
+ <td>System: <input type="text" name="system" id="{{ vcSystemId }}" size="30" onchange="updateInferSystem('{{ vcSystemId }}', '{{ inferSystemId }}')"/></td>
35
+ <td>Version: <input type="text" name="version" size="10"/></td>
36
+ </tr>
37
+ <tr>
38
+ <td>Code: <input type="text" name="code" size="20" required/></td>
39
+ <td>Display: <input type="text" name="display" size="20"/></td>
40
+ </tr>
41
+ <tr>
42
+ <td>Language: <input type="text" name="displayLanguage" size="10"/></td>
43
+ <td>
44
+ <input type="checkbox" name="abstract" value="true"/>
45
+ <label>Abstract</label>
46
+ </td>
47
+ </tr>
48
+ </table>
49
+ <button type="submit" class="btn btn-sm btn-primary">Validate Code</button>
50
+ </form>
51
+ </div>
52
+
53
+ </div>
54
+ </div>