igs-slm 0.1.0b0__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.
Files changed (447) hide show
  1. igs_slm-0.1.0b0.dist-info/LICENSE +21 -0
  2. igs_slm-0.1.0b0.dist-info/METADATA +151 -0
  3. igs_slm-0.1.0b0.dist-info/RECORD +447 -0
  4. igs_slm-0.1.0b0.dist-info/WHEEL +4 -0
  5. igs_slm-0.1.0b0.dist-info/entry_points.txt +3 -0
  6. igs_tools/__init__.py +0 -0
  7. igs_tools/connection.py +88 -0
  8. igs_tools/defines/__init__.py +8 -0
  9. igs_tools/defines/constellation.py +21 -0
  10. igs_tools/defines/data_center.py +75 -0
  11. igs_tools/defines/rinex.py +49 -0
  12. igs_tools/directory.py +247 -0
  13. igs_tools/utils.py +66 -0
  14. slm/__init__.py +21 -0
  15. slm/admin.py +674 -0
  16. slm/api/edit/__init__.py +0 -0
  17. slm/api/edit/serializers.py +316 -0
  18. slm/api/edit/views.py +1632 -0
  19. slm/api/fields.py +89 -0
  20. slm/api/filter.py +504 -0
  21. slm/api/pagination.py +55 -0
  22. slm/api/permissions.py +65 -0
  23. slm/api/public/__init__.py +0 -0
  24. slm/api/public/serializers.py +249 -0
  25. slm/api/public/views.py +606 -0
  26. slm/api/serializers.py +132 -0
  27. slm/api/views.py +148 -0
  28. slm/apps.py +323 -0
  29. slm/authentication.py +198 -0
  30. slm/bin/__init__.py +0 -0
  31. slm/bin/startproject.py +262 -0
  32. slm/bin/templates/{{ project_dir }}/pyproject.toml +35 -0
  33. slm/bin/templates/{{ project_dir }}/sites/__init__.py +0 -0
  34. slm/bin/templates/{{ project_dir }}/sites/{{ site }}/__init__.py +0 -0
  35. slm/bin/templates/{{ project_dir }}/sites/{{ site }}/base.py +15 -0
  36. slm/bin/templates/{{ project_dir }}/sites/{{ site }}/develop/__init__.py +56 -0
  37. slm/bin/templates/{{ project_dir }}/sites/{{ site }}/develop/local.py +4 -0
  38. slm/bin/templates/{{ project_dir }}/sites/{{ site }}/develop/wsgi.py +16 -0
  39. slm/bin/templates/{{ project_dir }}/sites/{{ site }}/manage.py +34 -0
  40. slm/bin/templates/{{ project_dir }}/sites/{{ site }}/production/__init__.py +61 -0
  41. slm/bin/templates/{{ project_dir }}/sites/{{ site }}/production/wsgi.py +16 -0
  42. slm/bin/templates/{{ project_dir }}/sites/{{ site }}/urls.py +7 -0
  43. slm/bin/templates/{{ project_dir }}/sites/{{ site }}/validation.py +11 -0
  44. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/__init__.py +0 -0
  45. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/admin.py +5 -0
  46. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/apps.py +14 -0
  47. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/management/__init__.py +0 -0
  48. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/management/commands/__init__.py +0 -0
  49. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/management/commands/import_archive.py +64 -0
  50. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/migrations/__init__.py +0 -0
  51. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/models.py +6 -0
  52. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/templates/slm/base.html +8 -0
  53. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/urls.py +10 -0
  54. slm/bin/templates/{{ project_dir }}/{{ extension_app }}/views.py +5 -0
  55. slm/defines/AlertLevel.py +24 -0
  56. slm/defines/AntennaCalibration.py +25 -0
  57. slm/defines/AntennaFeatures.py +27 -0
  58. slm/defines/AntennaReferencePoint.py +22 -0
  59. slm/defines/Aspiration.py +13 -0
  60. slm/defines/CardinalDirection.py +19 -0
  61. slm/defines/CollocationStatus.py +12 -0
  62. slm/defines/EquipmentState.py +22 -0
  63. slm/defines/FlagSeverity.py +14 -0
  64. slm/defines/FractureSpacing.py +15 -0
  65. slm/defines/FrequencyStandardType.py +15 -0
  66. slm/defines/GeodesyMLVersion.py +48 -0
  67. slm/defines/ISOCountry.py +1194 -0
  68. slm/defines/Instrumentation.py +19 -0
  69. slm/defines/LogEntryType.py +30 -0
  70. slm/defines/SLMFileType.py +18 -0
  71. slm/defines/SiteFileUploadStatus.py +61 -0
  72. slm/defines/SiteLogFormat.py +49 -0
  73. slm/defines/SiteLogStatus.py +78 -0
  74. slm/defines/TectonicPlates.py +28 -0
  75. slm/defines/__init__.py +46 -0
  76. slm/forms.py +1126 -0
  77. slm/jinja2/slm/sitelog/ascii_9char.log +346 -0
  78. slm/jinja2/slm/sitelog/legacy.log +346 -0
  79. slm/jinja2/slm/sitelog/xsd/0.4/collocationInformation.xml +12 -0
  80. slm/jinja2/slm/sitelog/xsd/0.4/condition.xml +12 -0
  81. slm/jinja2/slm/sitelog/xsd/0.4/contact.xml +52 -0
  82. slm/jinja2/slm/sitelog/xsd/0.4/formInformation.xml +5 -0
  83. slm/jinja2/slm/sitelog/xsd/0.4/frequencyStandard.xml +12 -0
  84. slm/jinja2/slm/sitelog/xsd/0.4/gnssAntenna.xml +16 -0
  85. slm/jinja2/slm/sitelog/xsd/0.4/gnssReceiver.xml +11 -0
  86. slm/jinja2/slm/sitelog/xsd/0.4/humiditySensor.xml +13 -0
  87. slm/jinja2/slm/sitelog/xsd/0.4/localEpisodicEffect.xml +10 -0
  88. slm/jinja2/slm/sitelog/xsd/0.4/moreInformation.xml +22 -0
  89. slm/jinja2/slm/sitelog/xsd/0.4/multipathSource.xml +10 -0
  90. slm/jinja2/slm/sitelog/xsd/0.4/otherInstrumentation.xml +5 -0
  91. slm/jinja2/slm/sitelog/xsd/0.4/pressureSensor.xml +12 -0
  92. slm/jinja2/slm/sitelog/xsd/0.4/radioInterference.xml +11 -0
  93. slm/jinja2/slm/sitelog/xsd/0.4/sensor.xml +16 -0
  94. slm/jinja2/slm/sitelog/xsd/0.4/signalObstruction.xml +10 -0
  95. slm/jinja2/slm/sitelog/xsd/0.4/siteIdentification.xml +22 -0
  96. slm/jinja2/slm/sitelog/xsd/0.4/siteLocation.xml +21 -0
  97. slm/jinja2/slm/sitelog/xsd/0.4/surveyedLocalTie.xml +20 -0
  98. slm/jinja2/slm/sitelog/xsd/0.4/temperatureSensor.xml +13 -0
  99. slm/jinja2/slm/sitelog/xsd/0.4/waterVaporSensor.xml +11 -0
  100. slm/jinja2/slm/sitelog/xsd/0.5/document.xml +10 -0
  101. slm/jinja2/slm/sitelog/xsd/geodesyml_0.4.xml +99 -0
  102. slm/jinja2/slm/sitelog/xsd/geodesyml_0.5.xml +112 -0
  103. slm/management/__init__.py +0 -0
  104. slm/management/commands/__init__.py +53 -0
  105. slm/management/commands/build_index.py +96 -0
  106. slm/management/commands/generate_sinex.py +675 -0
  107. slm/management/commands/head_from_index.py +541 -0
  108. slm/management/commands/import_archive.py +908 -0
  109. slm/management/commands/import_equipment.py +351 -0
  110. slm/management/commands/set_site.py +56 -0
  111. slm/management/commands/sitelog.py +144 -0
  112. slm/management/commands/synchronize.py +60 -0
  113. slm/management/commands/update_data_availability.py +167 -0
  114. slm/management/commands/validate_db.py +186 -0
  115. slm/management/commands/validate_gml.py +73 -0
  116. slm/map/__init__.py +1 -0
  117. slm/map/admin.py +5 -0
  118. slm/map/api/__init__.py +0 -0
  119. slm/map/api/edit/__init__.py +0 -0
  120. slm/map/api/edit/serializers.py +28 -0
  121. slm/map/api/edit/views.py +46 -0
  122. slm/map/api/public/__init__.py +0 -0
  123. slm/map/api/public/serializers.py +29 -0
  124. slm/map/api/public/views.py +64 -0
  125. slm/map/apps.py +7 -0
  126. slm/map/defines.py +53 -0
  127. slm/map/migrations/0001_initial.py +115 -0
  128. slm/map/migrations/__init__.py +0 -0
  129. slm/map/models.py +63 -0
  130. slm/map/static/slm/css/map.css +86 -0
  131. slm/map/static/slm/js/map.js +159 -0
  132. slm/map/templates/slm/map.html +374 -0
  133. slm/map/templates/slm/station/base.html +11 -0
  134. slm/map/templates/slm/station/edit.html +10 -0
  135. slm/map/templates/slm/top_nav.html +17 -0
  136. slm/map/templatetags/__init__.py +0 -0
  137. slm/map/templatetags/slm_map.py +18 -0
  138. slm/map/urls.py +25 -0
  139. slm/map/views.py +36 -0
  140. slm/middleware.py +29 -0
  141. slm/migrations/0001_alter_siteantenna_marker_enu_alter_sitelocation_llh_and_more.py +47 -0
  142. slm/migrations/0001_initial.py +4826 -0
  143. slm/migrations/0002_alter_dataavailability_site.py +22 -0
  144. slm/migrations/0003_remove_logentry_slm_logentr_site_lo_7a2af7_idx_and_more.py +80 -0
  145. slm/migrations/0004_alter_logentry_timestamp_and_more.py +25 -0
  146. slm/migrations/0005_alter_logentry_options_alter_logentry_section_and_more.py +46 -0
  147. slm/migrations/0006_alter_logentry_options_alter_logentry_index_together.py +24 -0
  148. slm/migrations/0007_alter_dataavailability_rate.py +23 -0
  149. slm/migrations/0008_alter_archiveindex_options_and_more.py +64 -0
  150. slm/migrations/0009_alter_archiveindex_end.py +21 -0
  151. slm/migrations/0010_alter_dataavailability_rinex_version_and_more.py +844 -0
  152. slm/migrations/0011_alter_siteidentification_fracture_spacing.py +33 -0
  153. slm/migrations/0012_alter_logentry_type.py +36 -0
  154. slm/migrations/0013_unpublishedfilesalert.py +48 -0
  155. slm/migrations/0014_sitelogpublished.py +48 -0
  156. slm/migrations/0015_alter_siteantenna_options_and_more.py +181 -0
  157. slm/migrations/0016_alter_antenna_description_alter_radome_description_and_more.py +42 -0
  158. slm/migrations/0017_alter_logentry_unique_together_and_more.py +54 -0
  159. slm/migrations/0018_afix_deleted.py +34 -0
  160. slm/migrations/0018_alter_siteantenna_options_and_more.py +244 -0
  161. slm/migrations/0019_remove_siteantenna_marker_enu_siteantenna_marker_une_and_more.py +101 -0
  162. slm/migrations/0020_alter_manufacturer_options.py +16 -0
  163. slm/migrations/0021_alter_siteform_report_type.py +23 -0
  164. slm/migrations/0022_rename_antcal_antenna_radome_slm_antcal_antenna_20827a_idx_and_more.py +297 -0
  165. slm/migrations/0023_archivedsitelog_gml_version_and_more.py +55 -0
  166. slm/migrations/0024_alter_agency_name_alter_agency_shortname.py +24 -0
  167. slm/migrations/0025_alter_archivedsitelog_log_format_and_more.py +61 -0
  168. slm/migrations/0026_alter_archivedsitelog_log_format_and_more.py +61 -0
  169. slm/migrations/0027_importalert_file_contents_importalert_findings_and_more.py +41 -0
  170. slm/migrations/0028_antenna_replaced_manufacturer_url_radome_replaced_and_more.py +46 -0
  171. slm/migrations/0029_manufacturer_full_name.py +17 -0
  172. slm/migrations/0030_alter_antenna_state_alter_radome_state_and_more.py +43 -0
  173. slm/migrations/__init__.py +0 -0
  174. slm/migrations/load_satellitesystems.py +27 -0
  175. slm/models/__init__.py +118 -0
  176. slm/models/about.py +14 -0
  177. slm/models/alerts.py +1204 -0
  178. slm/models/data.py +58 -0
  179. slm/models/equipment.py +229 -0
  180. slm/models/help.py +14 -0
  181. slm/models/index.py +428 -0
  182. slm/models/sitelog.py +4279 -0
  183. slm/models/system.py +723 -0
  184. slm/models/user.py +304 -0
  185. slm/parsing/__init__.py +786 -0
  186. slm/parsing/legacy/__init__.py +4 -0
  187. slm/parsing/legacy/binding.py +817 -0
  188. slm/parsing/legacy/parser.py +377 -0
  189. slm/parsing/xsd/__init__.py +34 -0
  190. slm/parsing/xsd/binding.py +86 -0
  191. slm/parsing/xsd/geodesyml/0.4/commonTypes.xsd +133 -0
  192. slm/parsing/xsd/geodesyml/0.4/contact.xsd +29 -0
  193. slm/parsing/xsd/geodesyml/0.4/dataStreams.xsd +129 -0
  194. slm/parsing/xsd/geodesyml/0.4/document.xsd +64 -0
  195. slm/parsing/xsd/geodesyml/0.4/equipment.xsd +427 -0
  196. slm/parsing/xsd/geodesyml/0.4/fieldMeasurement.xsd +170 -0
  197. slm/parsing/xsd/geodesyml/0.4/geodesyML.xsd +71 -0
  198. slm/parsing/xsd/geodesyml/0.4/geodeticEquipment.xsd +343 -0
  199. slm/parsing/xsd/geodesyml/0.4/geodeticMonument.xsd +147 -0
  200. slm/parsing/xsd/geodesyml/0.4/lineage.xsd +614 -0
  201. slm/parsing/xsd/geodesyml/0.4/localInterferences.xsd +131 -0
  202. slm/parsing/xsd/geodesyml/0.4/measurement.xsd +473 -0
  203. slm/parsing/xsd/geodesyml/0.4/monumentInfo.xsd +251 -0
  204. slm/parsing/xsd/geodesyml/0.4/observationSystem.xsd +429 -0
  205. slm/parsing/xsd/geodesyml/0.4/project.xsd +38 -0
  206. slm/parsing/xsd/geodesyml/0.4/quality.xsd +176 -0
  207. slm/parsing/xsd/geodesyml/0.4/referenceFrame.xsd +194 -0
  208. slm/parsing/xsd/geodesyml/0.4/siteLog.xsd +71 -0
  209. slm/parsing/xsd/geodesyml/0.5/commonTypes.xsd +133 -0
  210. slm/parsing/xsd/geodesyml/0.5/contact.xsd +29 -0
  211. slm/parsing/xsd/geodesyml/0.5/dataStreams.xsd +129 -0
  212. slm/parsing/xsd/geodesyml/0.5/document.xsd +64 -0
  213. slm/parsing/xsd/geodesyml/0.5/equipment.xsd +427 -0
  214. slm/parsing/xsd/geodesyml/0.5/fieldMeasurement.xsd +170 -0
  215. slm/parsing/xsd/geodesyml/0.5/geodesyML.xsd +71 -0
  216. slm/parsing/xsd/geodesyml/0.5/geodeticEquipment.xsd +343 -0
  217. slm/parsing/xsd/geodesyml/0.5/geodeticMonument.xsd +147 -0
  218. slm/parsing/xsd/geodesyml/0.5/lineage.xsd +614 -0
  219. slm/parsing/xsd/geodesyml/0.5/localInterferences.xsd +131 -0
  220. slm/parsing/xsd/geodesyml/0.5/measurement.xsd +473 -0
  221. slm/parsing/xsd/geodesyml/0.5/monumentInfo.xsd +306 -0
  222. slm/parsing/xsd/geodesyml/0.5/observationSystem.xsd +429 -0
  223. slm/parsing/xsd/geodesyml/0.5/project.xsd +38 -0
  224. slm/parsing/xsd/geodesyml/0.5/quality.xsd +176 -0
  225. slm/parsing/xsd/geodesyml/0.5/referenceFrame.xsd +194 -0
  226. slm/parsing/xsd/geodesyml/0.5/siteLog.xsd +73 -0
  227. slm/parsing/xsd/parser.py +116 -0
  228. slm/parsing/xsd/resolver.py +28 -0
  229. slm/receivers/__init__.py +11 -0
  230. slm/receivers/alerts.py +87 -0
  231. slm/receivers/cleanup.py +41 -0
  232. slm/receivers/event_loggers.py +175 -0
  233. slm/receivers/index.py +67 -0
  234. slm/settings/__init__.py +55 -0
  235. slm/settings/auth.py +15 -0
  236. slm/settings/ckeditor.py +14 -0
  237. slm/settings/debug.py +47 -0
  238. slm/settings/internationalization.py +12 -0
  239. slm/settings/logging.py +113 -0
  240. slm/settings/platform/__init__.py +0 -0
  241. slm/settings/platform/darwin.py +10 -0
  242. slm/settings/rest.py +21 -0
  243. slm/settings/root.py +152 -0
  244. slm/settings/routines.py +43 -0
  245. slm/settings/secrets.py +37 -0
  246. slm/settings/security.py +5 -0
  247. slm/settings/slm.py +188 -0
  248. slm/settings/static_templates.py +53 -0
  249. slm/settings/templates.py +29 -0
  250. slm/settings/uploads.py +8 -0
  251. slm/settings/urls.py +126 -0
  252. slm/settings/validation.py +196 -0
  253. slm/signals.py +250 -0
  254. slm/singleton.py +49 -0
  255. slm/static/rest_framework/css/bootstrap-tweaks.css +204 -0
  256. slm/static/rest_framework/css/bootstrap.min.css +7 -0
  257. slm/static/rest_framework/css/bootstrap.min.css.map +1 -0
  258. slm/static/rest_framework/css/default.css +82 -0
  259. slm/static/rest_framework/css/prettify.css +30 -0
  260. slm/static/rest_framework/docs/css/base.css +344 -0
  261. slm/static/rest_framework/docs/css/highlight.css +125 -0
  262. slm/static/rest_framework/docs/css/jquery.json-view.min.css +11 -0
  263. slm/static/rest_framework/docs/img/favicon.ico +0 -0
  264. slm/static/rest_framework/docs/img/grid.png +0 -0
  265. slm/static/rest_framework/docs/js/api.js +321 -0
  266. slm/static/rest_framework/docs/js/highlight.pack.js +2 -0
  267. slm/static/rest_framework/docs/js/jquery.json-view.min.js +7 -0
  268. slm/static/rest_framework/img/grid.png +0 -0
  269. slm/static/rest_framework/js/ajax-form.js +127 -0
  270. slm/static/rest_framework/js/bootstrap.bundle.min.js +7 -0
  271. slm/static/rest_framework/js/bootstrap.bundle.min.js.map +1 -0
  272. slm/static/rest_framework/js/bootstrap.min.js.map +1 -0
  273. slm/static/rest_framework/js/coreapi-0.1.1.js +2043 -0
  274. slm/static/rest_framework/js/csrf.js +52 -0
  275. slm/static/rest_framework/js/default.js +47 -0
  276. slm/static/rest_framework/js/jquery-3.5.1.min.js +2 -0
  277. slm/static/rest_framework/js/prettify-min.js +28 -0
  278. slm/static/slm/css/admin.css +3 -0
  279. slm/static/slm/css/defines.css +82 -0
  280. slm/static/slm/css/forms.css +1 -0
  281. slm/static/slm/css/style.css +1004 -0
  282. slm/static/slm/img/email-branding.png +0 -0
  283. slm/static/slm/img/favicon.ico +0 -0
  284. slm/static/slm/img/login-bg.jpg +0 -0
  285. slm/static/slm/img/slm-logo.svg +4 -0
  286. slm/static/slm/js/autocomplete.js +341 -0
  287. slm/static/slm/js/enums.js +322 -0
  288. slm/static/slm/js/fileIcons.js +30 -0
  289. slm/static/slm/js/form.js +404 -0
  290. slm/static/slm/js/formWidget.js +23 -0
  291. slm/static/slm/js/persistable.js +33 -0
  292. slm/static/slm/js/slm.js +1028 -0
  293. slm/static/slm/js/time24.js +212 -0
  294. slm/static_templates/slm/css/defines.css +26 -0
  295. slm/static_templates/slm/js/enums.js +28 -0
  296. slm/static_templates/slm/js/fileIcons.js +16 -0
  297. slm/static_templates/slm/js/urls.js +5 -0
  298. slm/templates/account/base.html +20 -0
  299. slm/templates/account/email/base.html +43 -0
  300. slm/templates/account/email/base_message.txt +7 -0
  301. slm/templates/account/email/email_confirmation_message.html +16 -0
  302. slm/templates/account/email/email_confirmation_message.txt +7 -0
  303. slm/templates/account/email/email_confirmation_signup_message.html +1 -0
  304. slm/templates/account/email/email_confirmation_signup_message.txt +1 -0
  305. slm/templates/account/email/email_confirmation_signup_subject.txt +1 -0
  306. slm/templates/account/email/email_confirmation_subject.txt +4 -0
  307. slm/templates/account/email/password_reset_key_message.html +28 -0
  308. slm/templates/account/email/password_reset_key_message.txt +9 -0
  309. slm/templates/account/email/password_reset_key_subject.txt +4 -0
  310. slm/templates/account/email/unknown_account_message.html +25 -0
  311. slm/templates/account/email/unknown_account_message.txt +12 -0
  312. slm/templates/account/email/unknown_account_subject.txt +4 -0
  313. slm/templates/account/login.html +67 -0
  314. slm/templates/account/logout.html +38 -0
  315. slm/templates/account/password_change.html +48 -0
  316. slm/templates/account/password_reset.html +51 -0
  317. slm/templates/account/password_reset_done.html +20 -0
  318. slm/templates/account/password_reset_from_key.html +52 -0
  319. slm/templates/account/password_reset_from_key_done.html +17 -0
  320. slm/templates/admin/base.html +7 -0
  321. slm/templates/messages.html +8 -0
  322. slm/templates/rest_framework/README +16 -0
  323. slm/templates/rest_framework/admin/detail.html +10 -0
  324. slm/templates/rest_framework/admin/dict_value.html +11 -0
  325. slm/templates/rest_framework/admin/list.html +32 -0
  326. slm/templates/rest_framework/admin/list_value.html +11 -0
  327. slm/templates/rest_framework/admin/simple_list_value.html +2 -0
  328. slm/templates/rest_framework/admin.html +282 -0
  329. slm/templates/rest_framework/api.html +3 -0
  330. slm/templates/rest_framework/base.html +334 -0
  331. slm/templates/rest_framework/docs/auth/basic.html +42 -0
  332. slm/templates/rest_framework/docs/auth/session.html +40 -0
  333. slm/templates/rest_framework/docs/auth/token.html +41 -0
  334. slm/templates/rest_framework/docs/document.html +37 -0
  335. slm/templates/rest_framework/docs/error.html +71 -0
  336. slm/templates/rest_framework/docs/index.html +55 -0
  337. slm/templates/rest_framework/docs/interact.html +57 -0
  338. slm/templates/rest_framework/docs/langs/javascript-intro.html +5 -0
  339. slm/templates/rest_framework/docs/langs/javascript.html +15 -0
  340. slm/templates/rest_framework/docs/langs/python-intro.html +3 -0
  341. slm/templates/rest_framework/docs/langs/python.html +13 -0
  342. slm/templates/rest_framework/docs/langs/shell-intro.html +3 -0
  343. slm/templates/rest_framework/docs/langs/shell.html +6 -0
  344. slm/templates/rest_framework/docs/link.html +113 -0
  345. slm/templates/rest_framework/docs/sidebar.html +78 -0
  346. slm/templates/rest_framework/filters/base.html +16 -0
  347. slm/templates/rest_framework/filters/ordering.html +17 -0
  348. slm/templates/rest_framework/filters/search.html +13 -0
  349. slm/templates/rest_framework/horizontal/checkbox.html +23 -0
  350. slm/templates/rest_framework/horizontal/checkbox_multiple.html +32 -0
  351. slm/templates/rest_framework/horizontal/dict_field.html +11 -0
  352. slm/templates/rest_framework/horizontal/fieldset.html +16 -0
  353. slm/templates/rest_framework/horizontal/form.html +6 -0
  354. slm/templates/rest_framework/horizontal/input.html +21 -0
  355. slm/templates/rest_framework/horizontal/list_field.html +11 -0
  356. slm/templates/rest_framework/horizontal/list_fieldset.html +13 -0
  357. slm/templates/rest_framework/horizontal/radio.html +42 -0
  358. slm/templates/rest_framework/horizontal/select.html +36 -0
  359. slm/templates/rest_framework/horizontal/select_multiple.html +38 -0
  360. slm/templates/rest_framework/horizontal/textarea.html +21 -0
  361. slm/templates/rest_framework/inline/checkbox.html +8 -0
  362. slm/templates/rest_framework/inline/checkbox_multiple.html +14 -0
  363. slm/templates/rest_framework/inline/dict_field.html +9 -0
  364. slm/templates/rest_framework/inline/fieldset.html +6 -0
  365. slm/templates/rest_framework/inline/form.html +8 -0
  366. slm/templates/rest_framework/inline/input.html +9 -0
  367. slm/templates/rest_framework/inline/list_field.html +9 -0
  368. slm/templates/rest_framework/inline/list_fieldset.html +3 -0
  369. slm/templates/rest_framework/inline/radio.html +25 -0
  370. slm/templates/rest_framework/inline/select.html +24 -0
  371. slm/templates/rest_framework/inline/select_multiple.html +25 -0
  372. slm/templates/rest_framework/inline/textarea.html +9 -0
  373. slm/templates/rest_framework/login.html +3 -0
  374. slm/templates/rest_framework/login_base.html +65 -0
  375. slm/templates/rest_framework/pagination/numbers.html +47 -0
  376. slm/templates/rest_framework/pagination/previous_and_next.html +21 -0
  377. slm/templates/rest_framework/raw_data_form.html +11 -0
  378. slm/templates/rest_framework/schema.js +3 -0
  379. slm/templates/rest_framework/vertical/checkbox.html +16 -0
  380. slm/templates/rest_framework/vertical/checkbox_multiple.html +30 -0
  381. slm/templates/rest_framework/vertical/dict_field.html +7 -0
  382. slm/templates/rest_framework/vertical/fieldset.html +13 -0
  383. slm/templates/rest_framework/vertical/form.html +6 -0
  384. slm/templates/rest_framework/vertical/input.html +17 -0
  385. slm/templates/rest_framework/vertical/list_field.html +7 -0
  386. slm/templates/rest_framework/vertical/list_fieldset.html +7 -0
  387. slm/templates/rest_framework/vertical/radio.html +40 -0
  388. slm/templates/rest_framework/vertical/select.html +34 -0
  389. slm/templates/rest_framework/vertical/select_multiple.html +31 -0
  390. slm/templates/rest_framework/vertical/textarea.html +17 -0
  391. slm/templates/slm/about.html +21 -0
  392. slm/templates/slm/alerts/alert.html +15 -0
  393. slm/templates/slm/alerts/geodesymlinvalid.html +8 -0
  394. slm/templates/slm/alerts/importalert.html +10 -0
  395. slm/templates/slm/alerts.html +18 -0
  396. slm/templates/slm/auth_menu.html +41 -0
  397. slm/templates/slm/base.html +195 -0
  398. slm/templates/slm/emails/alert_issued.html +31 -0
  399. slm/templates/slm/emails/alert_issued.txt +9 -0
  400. slm/templates/slm/emails/base.html +6 -0
  401. slm/templates/slm/emails/changes_rejected.txt +7 -0
  402. slm/templates/slm/emails/review_requested.txt +7 -0
  403. slm/templates/slm/forms/widgets/auto_complete.html +21 -0
  404. slm/templates/slm/forms/widgets/auto_complete_multiple.html +18 -0
  405. slm/templates/slm/forms/widgets/checkbox_multiple.html +6 -0
  406. slm/templates/slm/forms/widgets/inline_multi.html +1 -0
  407. slm/templates/slm/forms/widgets/splitdatetime.html +14 -0
  408. slm/templates/slm/forms/widgets/time24.html +37 -0
  409. slm/templates/slm/help.html +54 -0
  410. slm/templates/slm/messages.html +13 -0
  411. slm/templates/slm/new_site.html +88 -0
  412. slm/templates/slm/profile.html +57 -0
  413. slm/templates/slm/register.html +40 -0
  414. slm/templates/slm/reports/file_log.html +43 -0
  415. slm/templates/slm/reports/head_log.html +23 -0
  416. slm/templates/slm/reports/head_report.html +55 -0
  417. slm/templates/slm/reports/index_log.html +23 -0
  418. slm/templates/slm/reports/index_report.html +71 -0
  419. slm/templates/slm/station/alert.html +8 -0
  420. slm/templates/slm/station/alerts.html +19 -0
  421. slm/templates/slm/station/base.html +104 -0
  422. slm/templates/slm/station/download.html +87 -0
  423. slm/templates/slm/station/edit.html +283 -0
  424. slm/templates/slm/station/form.html +110 -0
  425. slm/templates/slm/station/log.html +18 -0
  426. slm/templates/slm/station/review.html +461 -0
  427. slm/templates/slm/station/upload.html +295 -0
  428. slm/templates/slm/station/uploads/attachment.html +20 -0
  429. slm/templates/slm/station/uploads/geodesyml.html +1 -0
  430. slm/templates/slm/station/uploads/image.html +27 -0
  431. slm/templates/slm/station/uploads/json.html +0 -0
  432. slm/templates/slm/station/uploads/legacy.html +77 -0
  433. slm/templates/slm/top_nav.html +14 -0
  434. slm/templates/slm/user_activity.html +16 -0
  435. slm/templates/slm/widgets/alert_scroll.html +135 -0
  436. slm/templates/slm/widgets/filelist.html +258 -0
  437. slm/templates/slm/widgets/legend.html +12 -0
  438. slm/templates/slm/widgets/log_scroll.html +88 -0
  439. slm/templates/slm/widgets/stationlist.html +233 -0
  440. slm/templatetags/__init__.py +0 -0
  441. slm/templatetags/jinja2.py +9 -0
  442. slm/templatetags/slm.py +459 -0
  443. slm/urls.py +148 -0
  444. slm/utils.py +299 -0
  445. slm/validators.py +297 -0
  446. slm/views.py +654 -0
  447. slm/widgets.py +134 -0
@@ -0,0 +1,57 @@
1
+ {% extends "slm/base.html" %}
2
+ {% load i18n crispy_forms_tags %}
3
+
4
+ {% block page_content %}
5
+ <div class="container mb-5">
6
+ <!-- Title -->
7
+ <div class="mt-5 mb-4 pb-3 border-bottom">
8
+ <h1>{% translate "User Profile" %}</h1>
9
+ </div>
10
+
11
+ {% include "slm/messages.html" %}
12
+
13
+ <div class="form-group px-5 m-5">
14
+
15
+ {% crispy user_form %}
16
+ <br/>
17
+ <br/>
18
+ {% crispy profile_form %}
19
+
20
+ <!-- Cancel/Save Buttons -->
21
+ <br/>
22
+ <div id="update" class="d-grid gap-2 d-flex justify-content-between">
23
+ <button id="profile-update-btn" type='submit' onclick="updateProfile()" name='update' class="btn btn-success">
24
+ {% translate "Update" %}
25
+ </button>
26
+ </div>
27
+
28
+ <script>
29
+ const userForm = $('form#slm-user-form');
30
+ const profileForm = $('form#slm-user-profile-form');
31
+ const updateBtn = $('#profile-update-btn');
32
+ const updateProfile = function() {
33
+ let data = slm.formToObject(userForm);
34
+ data.profile = slm.formToObject(profileForm);
35
+ $.ajax({
36
+ url: "{% url 'slm_edit_api:profile-detail' pk=request.user.pk %}",
37
+ method: 'PATCH',
38
+ data: JSON.stringify(data),
39
+ contentType: "application/json; charset=utf-8",
40
+ dataType: "json"
41
+ }).done(
42
+ function(data, status, jqXHR) {
43
+ window.location = "{% url 'slm:profile' %}";
44
+ }
45
+ ).fail(
46
+ function(jqXHR, textStatus, errorThrown) {
47
+ //alert(`{% trans 'Delete failed:' %}: ${jqXHR.responseText}`);
48
+ $('body').html(jqXHR.responseText);
49
+ console.log(jqXHR);
50
+ }
51
+ );
52
+ }
53
+ </script>
54
+ </div>
55
+ </div>
56
+
57
+ {% endblock %}
@@ -0,0 +1,40 @@
1
+ <!--
2
+
3
+ Template for register page.
4
+
5
+ -->
6
+
7
+ {% extends "slm/base.html" %}
8
+
9
+
10
+ <div class="login-bg">
11
+ {% block top_menu_links %} {% endblock %}
12
+ {% block station_list %} {% endblock %}
13
+
14
+ {% block login_content %}
15
+ <!-- Registration Page Content -->
16
+ <div class="d-flex flex-column justify-content-center align-items-center min-vh-100 ">
17
+ <div class="card" style="width: 50rem;">
18
+ <div class="card-body bg-light p-5">
19
+ {% if form.errors %}
20
+ <div class="alert alert-warning alert-dismissible fade show" role="alert">
21
+ <strong>There was an error in your form</strong>
22
+ <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
23
+ </div>
24
+ {% endif %}
25
+ <h1 class="card-title">Register</h1>
26
+ <p class="card-text">Please register for an SLM account below.</p>
27
+ <p class="card-header" style="font-weight: bold;">(Note: This site is ONLY for Authorized Users to Edit and Maintain IGS Site Log Data. If you need to view Site Log Data go to igs.org)</p>
28
+ <br>
29
+ <!-- Uses form for login authentication -->
30
+ <form action="{% url 'slm:register_user' %}" method="POST">
31
+ {% csrf_token %}
32
+ {{ form.as_p }}
33
+ <br/><br/>
34
+ <input id="login" class="btn btn-primary" type="submit" value="Submit">
35
+ </form>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ {% endblock %}
40
+ </div>
@@ -0,0 +1,43 @@
1
+ <!DOCTYPE html>
2
+ {% comment %}This template is used to render a standalone parser log outside of the SLM base templates. (e.g. by import_archive and head_from_index){% endcomment %}
3
+ <html lang="en">
4
+ <head>
5
+ {% block head %}
6
+ <meta charset="UTF-8">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <title>{{ filename }}</title>
9
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
10
+ {% endblock head %}
11
+ </head>
12
+
13
+ <body>
14
+ <div class="container mt-5">
15
+ <h4 style="text-align: center; {% if alert %}background-color: {{ alert.level.color }};{% endif %}">{{ site.name }}</h4>
16
+ {% if failed %}<div style="text-align: center; font-family: monospace; padding: 10px; background-color: #FFCCCB; border: 1px solid darkred; color: #333; border-radius: 5px;">{{ failed }}</div><hr/>{% endif %}
17
+ {% if exception %}
18
+ <pre style="background-color: #FFCCCB; padding: 10px">{{ exception }}</pre>
19
+ {% endif %}
20
+ {% if format %}
21
+ {% if format == SiteLogFormat.LEGACY %}
22
+ {% include "slm/station/uploads/legacy.html" %}
23
+ {% elif format == SiteLogFormat.ASCII_9CHAR %}
24
+ {% include 'slm/station/uploads/legacy.html' %}
25
+ {% elif format == SiteLogFormat.GEODESY_ML %}
26
+ {% include 'slm/station/uploads/geodesyml.html' %}
27
+ {% elif format == SiteLogFormat.JSON %}
28
+ {% include 'slm/station/uploads/json.html' %}
29
+ {% endif %}
30
+ {% endif %}
31
+ </div>
32
+ </body>
33
+
34
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
35
+ <script>
36
+ document.addEventListener('DOMContentLoaded', function () {
37
+ const popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
38
+ const popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
39
+ return new bootstrap.Popover(popoverTriggerEl)
40
+ })
41
+ });
42
+ </script>
43
+ </html>
@@ -0,0 +1,23 @@
1
+
2
+ {% load static compress %}
3
+ {% comment %}This template is used to render a report on parser logs outside of the SLM base templates.{% endcomment %}
4
+
5
+ <!DOCTYPE html>
6
+ <html lang="en">
7
+ <head>
8
+ {% block head %}
9
+ <meta charset="UTF-8">
10
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
11
+ <title>{{ filename }}</title>
12
+
13
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
14
+ {% endblock head %}
15
+ </head>
16
+
17
+ <body>
18
+ {% include 'slm/reports/head_report.html' %}
19
+ </body>
20
+
21
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
22
+
23
+ </html>
@@ -0,0 +1,55 @@
1
+ {% block batch_report %}
2
+ <div style="text-align: center;" class="container mt-5">
3
+ <h4>Head From Index Log - {{ runtime }}</h4>
4
+ <div style="font-family: monospace; padding: 10px; background-color: #f4f4f4; border: 1px solid #ccc; color: #333; border-radius: 5px;">{{ command }}</div>
5
+ </div>
6
+
7
+ {% if imports %}
8
+ <div class="container mt-5">
9
+ <h4 style="text-align: center;">Imported Stations</h4>
10
+ <table class="table table-striped">
11
+ <thead class="thead-dark">
12
+ <tr>
13
+ <th>Station</th>
14
+ <th>Timestamp</th>
15
+ <th>Warnings ({{ total_warnings }})</th>
16
+ <th>Errors ({{ total_errors }})</th>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ {% for record in imports %}
21
+ <tr>
22
+ <td><a href="./{{ record.index.site }}.html">{{ record.index.site }}</a></td>
23
+ <td>{{ record.index.begin }}</td>
24
+ <td {% if record.bound.parsed.warnings %}style="background-color: yellow;"{% endif %}>{{ record.bound.parsed.warnings|length }}</td>
25
+ <td {% if record.bound.parsed.errors %}style="background-color: red;"{% endif %}>{{ record.bound.parsed.errors|length }}</td>
26
+ </tr>
27
+ {% endfor %}
28
+ </tbody>
29
+ </table>
30
+ </div>
31
+ {% endif %}
32
+
33
+
34
+ {% if failed_imports %}
35
+ <div class="container mt-5">
36
+ <h4 style="text-align: center;">Failed Imports</h4>
37
+ <table class="table table-striped">
38
+ <thead class="thead-dark">
39
+ <tr>
40
+ <th>Station</th>
41
+ <th>Reason</th>
42
+ </tr>
43
+ </thead>
44
+ <tbody>
45
+ {% for record in failed_imports %}
46
+ <tr>
47
+ <td><a href="./{{ record.index.site }}.html">{{ record.index.site }}</a></td>
48
+ <td>{{ record.failed }}</td>
49
+ </tr>
50
+ {% endfor %}
51
+ </tbody>
52
+ </table>
53
+ </div>
54
+ {% endif %}
55
+ {% endblock batch_report %}
@@ -0,0 +1,23 @@
1
+
2
+ {% load static compress %}
3
+ {% comment %}This template is used to render a report on parser logs outside of the SLM base templates.{% endcomment %}
4
+
5
+ <!DOCTYPE html>
6
+ <html lang="en">
7
+ <head>
8
+ {% block head %}
9
+ <meta charset="UTF-8">
10
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
11
+ <title>{{ filename }}</title>
12
+
13
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
14
+ {% endblock head %}
15
+ </head>
16
+
17
+ <body>
18
+ {% include 'slm/reports/index_report.html' %}
19
+ </body>
20
+
21
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
22
+
23
+ </html>
@@ -0,0 +1,71 @@
1
+ {% block batch_report %}
2
+ <div style="text-align: center;" class="container mt-5">
3
+ <h4>Import Archive Log - {{ runtime }}</h4>
4
+ <div style="font-family: monospace; padding: 10px; background-color: #f4f4f4; border: 1px solid #ccc; color: #333; border-radius: 5px;">{{ command }}</div>
5
+ {% if head_logs %}
6
+ <hr/>
7
+ <h5><a href="{{ head_logs }}">Station data was synchronized to the index head - check the log here.</a></h5>
8
+ <hr/>
9
+ {% endif %}
10
+ </div>
11
+ <div class="container mt-5">
12
+ <h4 style="text-align: center;">Indexed Files</h4>
13
+ <div class="accordion" id="siteAccordion">
14
+ {% for site, files in sites.items %}
15
+ <div class="accordion-item">
16
+ <h2 class="accordion-header" id="headingSite{{ forloop.counter0 }}">
17
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSite{{ forloop.counter0 }}" aria-expanded="false" aria-controls="collapseSite{{ forloop.counter0 }}">
18
+ {{ site.name }}
19
+ </button>
20
+ </h2>
21
+ <div id="collapseSite{{ forloop.counter0 }}" class="accordion-collapse collapse" aria-labelledby="headingSite{{ forloop.counter0 }}" data-bs-parent="#siteAccordion">
22
+ <div class="accordion-body p-0">
23
+ <table class="table table-striped">
24
+ <thead class="thead-dark">
25
+ <tr>
26
+ <th>Filename</th>
27
+ <th>Timestamp</th>
28
+ <th>Warnings</th>
29
+ <th>Errors</th>
30
+ <th>Indexed?</th>
31
+ </tr>
32
+ </thead>
33
+ <tbody>
34
+ {% for file in files %}
35
+ <tr>
36
+ <td><a href="./{{ site.name.upper }}/{{ file.filename }}.html">{{ file.filename }}</a></td>
37
+ <td>{{ file.index.begin }}</td>
38
+ <td>{{ file.warnings|length }}</td>
39
+ <td>{{ file.errors|length }}</td>
40
+ <td>{% if file.archived_log %}Yes{% else %}No{% endif %}</td>
41
+ </tr>
42
+ {% endfor %}
43
+ </tbody>
44
+ </table>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ {% endfor %}
49
+ </div>
50
+ </div>
51
+
52
+ <div class="container mt-5">
53
+ <h4 style="text-align: center;">Unindexed Files</h4>
54
+ <table class="table table-striped">
55
+ <thead class="thead-dark">
56
+ <tr>
57
+ <th>Filename</th>
58
+ <th>Reason</th>
59
+ </tr>
60
+ </thead>
61
+ <tbody>
62
+ {% for file, reason in unresolved %}
63
+ <tr>
64
+ <td>{{ file }}</td>
65
+ <td>{{ reason }}</td>
66
+ </tr>
67
+ {% endfor %}
68
+ </tbody>
69
+ </table>
70
+ </div>
71
+ {% endblock batch_report %}
@@ -0,0 +1,8 @@
1
+ {% extends "slm/station/base.html" %}
2
+ {% load i18n %}
3
+
4
+ {% block action_content %}
5
+ <div class="container p-3">
6
+ {% include alert_template %}
7
+ </div>
8
+ {% endblock %}
@@ -0,0 +1,19 @@
1
+ <!--
2
+
3
+ Template for alerts page.
4
+
5
+ -->
6
+
7
+ {% extends "slm/station/base.html" %}
8
+
9
+ {% block action_content %}
10
+ <div class="container px-5">
11
+ <!-- Title -->
12
+ <div class="d-flex flex-column justify-content-left align-items-left mt-4 pb-3 border-bottom">
13
+ <h2>Alerts</h2>
14
+ </div>
15
+ <div class="container px-5 pt-3">
16
+ {% include 'slm/widgets/alert_scroll.html' %}
17
+ </div>
18
+ </div>
19
+ {% endblock %}
@@ -0,0 +1,104 @@
1
+ {% extends "slm/base.html" %}
2
+ {% load compress i18n %}
3
+
4
+
5
+ {% block page_content %}
6
+ <div class="row g-0">
7
+ <div class="col-2">
8
+ {% block station_list %}
9
+ {% include 'slm/widgets/stationlist.html' %}
10
+ {% endblock %}
11
+ </div>
12
+
13
+ <div class="col-10">
14
+ <div class="container-fluid">
15
+
16
+ {% block actions_bar %}
17
+ <div id="slm-station-nav">
18
+ {% if agencies %}
19
+ {% block station_agencies %}
20
+ <header class="d-flex flex-wrap justify-content-center p-3 slm-agency">
21
+ {% for agency in agencies %}
22
+ <a href="{% url 'slm:home' %}?agency={{ agency.id }}" class="text-decoration-none">
23
+ <span class="fs-3 fw-bold">{{ agency.name }}{% if not forloop.last %},&nbsp;{% endif %}</span>
24
+ </a>
25
+ {% endfor %}
26
+ </header>
27
+ {% endblock %}
28
+ {% endif %}
29
+ {% if station %}
30
+ <header class="d-flex flex-wrap justify-content-center py-3 px-3 border-bottom">
31
+
32
+ <!-- Station ID -->
33
+ <a href="{% url 'slm:edit' station=station %}" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
34
+ <h1 class="mono">{% if station %}{{ station }}{% endif %}</h1>
35
+ </a>
36
+
37
+ <!-- Links -->
38
+ <ul class="nav nav-pills align-items-center">
39
+ {% with station_name=site.four_id %}
40
+ {% with url_name=request.resolver_match.url_name %}
41
+ <li class="nav-item {% if url_name == 'alerts' %}active{% endif %}">
42
+ <a href="{% if station %}{% url 'slm:alerts' station=station %}{% else %}{% url 'slm:alerts' %}{% endif %}" class="nav-link"><i class="bi bi-bell{% if station_alert_level %}-fill {{ station_alert_level.css }}{% endif %} slm-alert-bell"></i> {% trans "Alerts" %}</a>
43
+ </li>
44
+ <li class="nav-item {% if url_name == 'edit' %}active{% endif %}">
45
+ <a href="{% if station %}{% url 'slm:edit' station=station %}{% else %}{% url 'slm:edit' %}{% endif %}" class="nav-link"><i class="bi bi-pencil-square"></i> {% trans "Edit" %}</a>
46
+ </li>
47
+ <li class="nav-item {% if url_name == 'upload' %}active{% endif %}">
48
+ <a href="{% if station %}{% url 'slm:upload' station=station %}{% else %}{% url 'slm:upload' %}{% endif %}" class="nav-link"><i class="bi bi-upload"></i> {% trans "Upload" %} <span class="badge rounded-pill slm-files-badge" data-slm-files={{attn_files}} {% if not attn_files %}style="display: none"{% endif %}>{{attn_files}}</span></a>
49
+ </li>
50
+ <li class="nav-item {% if url_name == 'download' %}active{% endif %}">
51
+ <a href="{% if station %}{% url 'slm:download' station=station %}{% else %}{% url 'slm:download' %}{% endif %}" class="nav-link"><i class="bi bi-download"></i> {% trans "Download" %}</a>
52
+ </li>
53
+ <li class="nav-item {% if url_name == 'review' %}active{% endif %}">
54
+ <a href="{% if station %}{% url 'slm:review' station=station %}{% else %}{% url 'slm:review' %}{% endif %}" class="nav-link"><i class="bi bi-file-check"></i> {% trans "Review & Submit" %}</a>
55
+ </li>
56
+ <li class="nav-item {% if url_name == 'log' %}active{% endif %}">
57
+ <a href="{% if station %}{% url 'slm:log' station=station %}{% else %}{% url 'slm:log' %}{% endif %}" class="nav-link"><i class="bi bi-journal-text"></i> {% trans "Activity Log" %}</a>
58
+ </li>
59
+ {% endwith %}
60
+ {% endwith %}
61
+ </ul>
62
+ </header>
63
+ {% endif %}
64
+ </div>
65
+
66
+ {% endblock %}
67
+
68
+ {% block action_content %}
69
+ <div class="container">
70
+ <div class="d-flex flex-column justify-content-left align-items-left min-vh-100">
71
+ <!-- Alert -->
72
+
73
+ <div class="m-3">
74
+ {% include "messages.html" %}
75
+ </div>
76
+
77
+ <!-- Feeds -->
78
+ <div class="row vh-100">
79
+ <!-- All Alerts Feed -->
80
+ <div class="my-2 mr-2 p-3 bg-body rounded shadow-sm col-5">
81
+ <h2 class="border-bottom pb-2 mb-4">Alerts</h2>
82
+ <div class="overflow-auto no-scrollbar" style="max-height: 925px;">
83
+ {% include 'slm/widgets/alert_scroll.html' %}
84
+ </div>
85
+ </div>
86
+ <!-- End of All Alerts Feed -->
87
+
88
+ <!-- Activity Log Feed -->
89
+ <div class="my-2 p-3 bg-body rounded shadow-sm col-7">
90
+ <h2 class="border-bottom pb-2 mb-4">Activity Log</h2>
91
+ <div class="overflow-auto no-scrollbar" style="max-height: 925px;">
92
+ {% include 'slm/widgets/log_scroll.html' %}
93
+ </div>
94
+ </div>
95
+ <!-- End of Activity Log Feed -->
96
+ </div>
97
+ </div>
98
+ <!-- End of Feeds -->
99
+ {% endblock %}
100
+ </div>
101
+ </div>
102
+ </div>
103
+ </div>
104
+ {% endblock %}
@@ -0,0 +1,87 @@
1
+ <!--
2
+
3
+ Template for Download page.
4
+
5
+ -->
6
+
7
+ {% extends "slm/station/base.html" %}
8
+ {% load i18n %}
9
+
10
+
11
+ {% block action_content %}
12
+ <div class="container px-5">
13
+ <!-- Title -->
14
+ <div class="d-flex flex-column justify-content-left align-items-left mt-4">
15
+ <div class="mb-4 pb-3 border-bottom">
16
+ <h2>{% trans "Download" %}</h2>
17
+ </div>
18
+ <p class="mb-0">
19
+ {% translate "Choose one of the export formats below to download the site log's metadata" %}
20
+ </p>
21
+ </div>
22
+
23
+ <!-- Download Options -->
24
+ <div class="p-3">
25
+ {% if site.last_publish %}
26
+ <div class="row align-items-md-stretch mb-5">
27
+ <div class="col-12 col-md-6 col-xl-4 my-3">
28
+ <div class="h-100 p-5 my-3 bg-light border rounded-3 text-center">
29
+ <i class="bi bi-file-text slm-published" style="font-size:60px;"></i>
30
+ <h2 class="mb-3">{% trans "ASCII (.log)" %}</h2>
31
+ <p class="mb-4">{% trans "Text-based description of the metadata of a GNSS station" %}</p>
32
+ <a class="btn btn-primary {% if not station %}disabled{% endif %}" {% if station %}href="{% url 'slm_edit_api:download-detail' site=station format='log' %}"{% endif %} download>Download</a>
33
+ </div>
34
+ </div>
35
+ <div class="col-12 col-md-6 col-xl-4 my-3">
36
+ <div class="h-100 p-5 my-3 bg-light border rounded-3 text-center">
37
+ <i class="bi bi-filetype-xml slm-published" style="font-size:60px;"></i>
38
+ <h2 class="mb-3">{% trans "GeodesyML (.xml)" %}</h2>
39
+ <p class="mb-4">{% trans "Machine-readable XML format of the data and metadata of a GNSS station" %}</p>
40
+ <a class="btn btn-primary {% if not station %}disabled{% endif %}" {% if station %}href="{% url 'slm_edit_api:download-detail' site=station format='xml' %}"{% endif %} download>Download</a>
41
+ </div>
42
+ </div>
43
+ <div class="col-12 col-md-6 col-xl-4 my-3">
44
+ <div class="h-100 p-5 my-3 bg-light border rounded-3 text-center">
45
+ <i class="bi bi-filetype-json slm-published" style="font-size:60px;"></i>
46
+ <h2 class="mb-3">{% trans "JSON (.json)" %}</h2>
47
+ <p class="mb-4">{% trans "This is still under development. JavaScript Object Notation format of the data and metadata of a GNSS station" %}</p>
48
+ <a class="btn btn-primary disabled {% if not station %}disabled{% endif %}" {% if station %}href="{% url 'slm_edit_api:download-detail' site=station format='json' %}?published=False"{% endif %} download>Download</a>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ {% endif %}
53
+ <!-- todo only include if unpublished changes are present -->
54
+ {% if site.needs_publish %}
55
+ <div class="row align-items-md-stretch mt-5 mb-5">
56
+ <div class="col-12 col-md-6 col-xl-4 my-3">
57
+ <div class="h-100 p-5 bg-light border rounded-3 text-center">
58
+ <i class="bi bi-file-text slm-modified" style="font-size:60px;"></i>
59
+ <h2 class="mb-3">{% trans "ASCII (.log)" %}</h2>
60
+ <h3 class="mb-3 fs-4">{% trans "MODIFIED/UNPUBLISHED" %}</h3>
61
+ <p class="mb-4">{% trans "Text-based description of the metadata of a GNSS station" %}</p>
62
+ <a class="btn btn-primary {% if not station %}disabled{% endif %}" {% if station %}href="{% url 'slm_edit_api:download-detail' site=station format='log' %}?unpublished=True"{% endif %} download>Download</a>
63
+ </div>
64
+ </div>
65
+ <div class="col-12 col-md-6 col-xl-4 my-3">
66
+ <div class="h-100 p-5 bg-light border rounded-3 text-center">
67
+ <i class="bi bi-filetype-xml slm-modified" style="font-size:60px;"></i>
68
+ <h2 class="mb-3">{% trans "GeodesyML (.xml)" %}</h2>
69
+ <h3 class="mb-3 fs-4">{% trans "MODIFIED/UNPUBLISHED" %}</h3>
70
+ <p class="mb-4">{% trans "Machine-readable XML format of the data and metadata of a GNSS station" %}</p>
71
+ <a class="btn btn-primary {% if not station %}disabled{% endif %}" {% if station %}href="{% url 'slm_edit_api:download-detail' site=station format='xml' %}?unpublished=True"{% endif %} download>Download</a>
72
+ </div>
73
+ </div>
74
+ <div class="col-12 col-md-6 col-xl-4 my-3">
75
+ <div class="h-100 p-5 bg-light border rounded-3 text-center">
76
+ <i class="bi bi-filetype-json slm-modified" style="font-size:60px;"></i>
77
+ <h2 class="mb-3">{% trans "JSON (.json)" %}</h2>
78
+ <h3 class="mb-3 fs-4">{% trans "MODIFIED/UNPUBLISHED" %}</h3>
79
+ <p class="mb-4">{% trans "This is still under development. JavaScript Object Notation format of the data and metadata of a GNSS station" %}</p>
80
+ <a class="btn btn-primary disabled {% if not station %}disabled{% endif %}" {% if station %}href="{% url 'slm_edit_api:download-detail' site=station format='json' %}?unpublished=True"{% endif %} download>Download</a>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ {% endif %}
85
+ </div>
86
+ </div>
87
+ {% endblock %}