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
package/passwords.ini ADDED
@@ -0,0 +1,2 @@
1
+ [passwords]
2
+ vsac=f916613a-2d07-426f-8e56-6ecf3f74aa01
@@ -0,0 +1,208 @@
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/statuspage.js"></script>
36
+ <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
37
+ <script type="text/javascript" src="/assets/js/jquery-ui.min.js"></script>
38
+ <link rel="stylesheet" href="/assets/css/jquery.ui.all.css">
39
+ <script type="text/javascript" src="/assets/js/jquery.ui.core.js"></script>
40
+ <script type="text/javascript" src="/assets/js/jquery.ui.widget.js"></script>
41
+ <script type="text/javascript" src="/assets/js/jquery.ui.mouse.js"></script>
42
+ <script type="text/javascript" src="/assets/js/jquery.ui.resizable.js"></script>
43
+ <script type="text/javascript" src="/assets/js/jquery.ui.draggable.js"></script>
44
+ <script type="text/javascript" src="/assets/js/jtip.js"></script>
45
+ <script type="text/javascript" src="/assets/js/jcookie.js"></script>
46
+ <script type="text/javascript" src="/assets/js/fhir-gw.js"></script>
47
+
48
+ <style>
49
+ .status-queued { color: #6c757d; }
50
+ .status-building { color: #fd7e14; }
51
+ .status-waiting { color: #0dcaf0; }
52
+ .status-publishing { color: #fd7e14; }
53
+ .status-complete { color: #198754; }
54
+ .status-failed { color: #dc3545; }
55
+
56
+ .task-actions {
57
+ display: flex;
58
+ gap: 5px;
59
+ }
60
+
61
+ .permission-grid {
62
+ display: grid;
63
+ grid-template-columns: 1fr auto auto;
64
+ gap: 10px;
65
+ align-items: center;
66
+ }
67
+
68
+ .output-viewer {
69
+ max-height: 500px;
70
+ overflow-y: auto;
71
+ background: #f8f9fa;
72
+ border: 1px solid #dee2e6;
73
+ padding: 15px;
74
+ border-radius: 5px;
75
+ font-family: monospace;
76
+ white-space: pre-wrap;
77
+ }
78
+ </style>
79
+
80
+ </head>
81
+
82
+ <body>
83
+
84
+ <div id="segment-navbar" class="segment"> <!-- segment-breadcrumb -->
85
+ <div id="stripe"> </div>
86
+ <div class="container"> <!-- container -->
87
+ <div style="background-color: #ad1f2f; padding: 6px; color: white;"> <!-- container -->
88
+ <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 &nbsp;|&nbsp;
89
+ <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;
90
+ <a href="/" style="color: gold"> Server Home</a> &nbsp;|&nbsp;
91
+ <a href="/publisher" style="color: gold">Publisher Home</a> &nbsp;|&nbsp;
92
+ <a href="/publisher/tasks" style="color: gold">Tasks</a> &nbsp;|&nbsp;
93
+ <form method="[%loginAction%]" action="/publisher/[%loginPath%]" style="display:inline">
94
+ <button type="submit" style="background:none; border:none; color:gold; cursor:pointer; font:inherit; padding:0">[%loginTitle%]</button>
95
+ </form>
96
+ </div> <!-- /container -->
97
+ </div> <!-- /container -->
98
+ </div>
99
+
100
+ <!-- /segment-breadcrumb -->
101
+
102
+ <div id="segment-content" class="segment"> <!-- segment-content -->
103
+ <div class="container"> <!-- container -->
104
+ <div class="row">
105
+ <div class="inner-wrapper">
106
+ <div class="col-9">
107
+
108
+ <h2><img border="0" src="../FHIRsmith32.png" style="vertical-align: text-bottom"/> [%title%] </h2>
109
+
110
+ [%content%]
111
+
112
+ </div>
113
+
114
+ </div> <!-- /inner-wrapper -->
115
+ </div> <!-- /row -->
116
+ </div> <!-- /container -->
117
+ </div> <!-- /segment-content -->
118
+
119
+ <div id="segment-footer" class="segment"> <!-- segment-footer -->
120
+ <div class="container"> <!-- container -->
121
+ <div class="inner-wrapper">
122
+ <p>
123
+ <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;
124
+ <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;
125
+ ([%ms%] ms)
126
+ </p>
127
+ </div> <!-- /inner-wrapper -->
128
+ </div> <!-- /container -->
129
+ </div> <!-- /segment-footer -->
130
+
131
+ <div id="segment-post-footer" class="segment hidden"> <!-- segment-post-footer -->
132
+ <div class="container"> <!-- container -->
133
+ </div> <!-- /container -->
134
+ </div> <!-- /segment-post-footer -->
135
+
136
+ <!-- JS and analytics only. -->
137
+ <!-- Bootstrap core JavaScript
138
+ ================================================== -->
139
+ <!-- Placed at the end of the document so the pages load faster -->
140
+ <script src="/assets/js/bootstrap.min.js"></script>
141
+ <script src="/assets/js/respond.min.js"></script>
142
+ <script src="/assets/js/fhir.js"></script>
143
+
144
+ <script>
145
+ // Auto-refresh for status updates
146
+ function refreshTaskStatus() {
147
+ const currentPath = window.location.pathname;
148
+ if (currentPath.includes('/tasks') && !currentPath.includes('/login')) {
149
+ // Only refresh if we're on tasks page and not editing
150
+ const forms = document.querySelectorAll('form');
151
+ let hasActiveForm = false;
152
+ forms.forEach(form => {
153
+ const inputs = form.querySelectorAll('input, textarea, select');
154
+ inputs.forEach(input => {
155
+ if (input === document.activeElement || input.value !== input.defaultValue) {
156
+ hasActiveForm = true;
157
+ }
158
+ });
159
+ });
160
+
161
+ if (!hasActiveForm) {
162
+ setTimeout(() => window.location.reload(), 30000); // Refresh every 30 seconds
163
+ }
164
+ }
165
+ }
166
+
167
+ // Start auto-refresh
168
+ setTimeout(refreshTaskStatus, 30000);
169
+
170
+ // Form validation
171
+ document.addEventListener('DOMContentLoaded', function() {
172
+ // Validate task creation form
173
+ const taskForm = document.getElementById('create-task-form');
174
+ if (taskForm) {
175
+ taskForm.addEventListener('submit', function(e) {
176
+ const packageId = document.getElementById('npm_package_id');
177
+ const version = document.getElementById('version');
178
+
179
+ // Basic validation
180
+ if (packageId && packageId.value && !packageId.value.includes('.')) {
181
+ alert('Package ID should contain dots (e.g., hl7.fhir.us.core)');
182
+ e.preventDefault();
183
+ return;
184
+ }
185
+
186
+ if (version && version.value && !version.value.match(/^\d+\.\d+\.\d+/)) {
187
+ if (!confirm('Version doesn\'t look like semantic versioning (x.y.z). Continue anyway?')) {
188
+ e.preventDefault();
189
+ return;
190
+ }
191
+ }
192
+ });
193
+ }
194
+
195
+ // Confirm approve actions
196
+ const approveButtons = document.querySelectorAll('button[name="approve"]');
197
+ approveButtons.forEach(button => {
198
+ button.addEventListener('click', function(e) {
199
+ if (!confirm('Are you sure you want to approve this publication task?')) {
200
+ e.preventDefault();
201
+ }
202
+ });
203
+ });
204
+ });
205
+ </script>
206
+
207
+ </body>
208
+ </html>