irie 0.0.53__py3-none-any.whl → 0.0.55__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.
Potentially problematic release.
This version of irie might be problematic. Click here for more details.
- irie/apps/events/views.py +1 -1
- irie/apps/inventory/urls.py +1 -1
- irie/apps/inventory/views.py +0 -1
- irie/apps/prediction/models.py +6 -0
- irie/apps/prediction/runners/opensees/__init__.py +35 -34
- irie/apps/prediction/runners/ssid.py +1 -1
- irie/apps/prediction/urls.py +2 -2
- irie/apps/prediction/views.py +33 -6
- irie/apps/static/assets/content_images/brace/ForceFrame.png +0 -0
- irie/apps/static/assets/js/brace.js +2 -2
- irie/apps/templates/includes/paginate.js +1 -0
- irie/apps/templates/includes/scripts.html +0 -2
- irie/apps/templates/inventory/sensor-upload.html +1 -3
- irie/apps/templates/prediction/asset-predictors.html +1 -1
- irie/apps/templates/prediction/create-model.html +27 -0
- irie/apps/templates/prediction/veux/navigator.html +121 -0
- irie/apps/templates/prediction/{viewer/veux-viewer.js → veux/navigator.js} +17 -17
- irie/apps/templates/prediction/xara-profile.html +4 -104
- irie/apps/templates/site/index.html +9 -2
- {irie-0.0.53.dist-info → irie-0.0.55.dist-info}/METADATA +1 -1
- {irie-0.0.53.dist-info → irie-0.0.55.dist-info}/RECORD +24 -23
- {irie-0.0.53.dist-info → irie-0.0.55.dist-info}/WHEEL +1 -1
- irie/apps/templates/components/json-table.html +0 -1
- {irie-0.0.53.dist-info → irie-0.0.55.dist-info}/entry_points.txt +0 -0
- {irie-0.0.53.dist-info → irie-0.0.55.dist-info}/top_level.txt +0 -0
irie/apps/events/views.py
CHANGED
|
@@ -32,7 +32,7 @@ def event_table(request):
|
|
|
32
32
|
events = [i for i in sorted(EventRecord.objects.all(),
|
|
33
33
|
key=lambda x: x.motion_data["event_date"], reverse=True)]
|
|
34
34
|
|
|
35
|
-
paginator = Paginator(events,
|
|
35
|
+
paginator = Paginator(events, 20)
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
# reversed(sorted(Event.objects.all(),
|
irie/apps/inventory/urls.py
CHANGED
|
@@ -21,7 +21,7 @@ urlpatterns = [
|
|
|
21
21
|
path("asset_table/export", views.asset_table_export, name="asset_table_export_csv"),
|
|
22
22
|
re_path(
|
|
23
23
|
"^evaluations/(?P<event>[0-9 A-Z-]*)/(?P<cesmd>[0-9 A-Z-]*)/.*", views.asset_event_summary,
|
|
24
|
-
|
|
24
|
+
name="asset_event_summary"
|
|
25
25
|
),
|
|
26
26
|
re_path("^inventory/(?P<calid>[0-9 A-Z-]*)/evaluations/$", views.asset_evals, name="asset_evals"),
|
|
27
27
|
re_path("^inventory/(?P<calid>[0-9 A-Z-]*)/$", views.asset_profile, name="asset_profile"),
|
irie/apps/inventory/views.py
CHANGED
irie/apps/prediction/models.py
CHANGED
|
@@ -500,58 +500,59 @@ class OpenSeesRunner(Runner):
|
|
|
500
500
|
#
|
|
501
501
|
# Viewing methods
|
|
502
502
|
#
|
|
503
|
-
def structural_section(self, name):
|
|
504
|
-
from shps.shapes import from_aisc
|
|
505
|
-
from openbim.csi._frame.section import section_geometry, section_mesh
|
|
506
|
-
|
|
507
|
-
from openbim.csi import load, create_model, collect_outlines
|
|
508
|
-
# 1) Parse the CSI file
|
|
509
|
-
try:
|
|
510
|
-
csi_file = self.predictor.config_file
|
|
511
|
-
csi = load((str(line.decode()).replace("\r\n","\n") for line in csi_file.readlines()))
|
|
512
|
-
except:
|
|
513
|
-
return None
|
|
514
|
-
|
|
515
|
-
mesh = section_mesh(csi, name)
|
|
516
|
-
return {}, mesh
|
|
517
|
-
mesh = from_aisc("W12x14").create_mesh(mesh_kwds={"engine": "meshpy"})
|
|
518
|
-
mesh = (mesh.nodes, mesh.cells())
|
|
519
|
-
# return {}, mesh
|
|
520
|
-
|
|
521
503
|
|
|
504
|
+
@property
|
|
505
|
+
def _csi(self):
|
|
506
|
+
if not hasattr(self, "_csi_data") or self._csi_data is None:
|
|
507
|
+
from openbim.csi import load, create_model, collect_outlines
|
|
508
|
+
# 1) Parse the CSI file
|
|
509
|
+
try:
|
|
510
|
+
csi_file = self.predictor.config_file
|
|
511
|
+
self._csi_data = load((str(line.decode()).replace("\r\n","\n") for line in csi_file.readlines()))
|
|
512
|
+
except Exception as e:
|
|
513
|
+
import sys
|
|
514
|
+
print(f"Error loading CSiBridge file: {e}", file=sys.stderr)
|
|
515
|
+
self._csi_data = None
|
|
522
516
|
|
|
517
|
+
return self._csi_data
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
def structural_section(self, name):
|
|
521
|
+
from openbim.csi._frame.section import create_section
|
|
522
|
+
# from openbim.csi._frame.outlines import section_mesh
|
|
523
|
+
if (s:= create_section(self._csi, name)) is not None:
|
|
524
|
+
return {}, s._create_model(mesh_size=0.1)
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
def structural_sections(self):
|
|
528
|
+
from openbim.csi._frame.section import iter_sections
|
|
529
|
+
yield from iter_sections(self._csi)
|
|
530
|
+
# for s, name in iter_sections(self._csi):
|
|
531
|
+
# yield {
|
|
532
|
+
# "name": name,
|
|
533
|
+
# "type": "Section",
|
|
534
|
+
# "section": name,
|
|
535
|
+
# }
|
|
523
536
|
|
|
524
537
|
def structural_members(self):
|
|
525
538
|
|
|
526
|
-
|
|
527
|
-
# 1) Parse the CSI file
|
|
528
|
-
csi_file = self.predictor.config_file
|
|
529
|
-
try:
|
|
530
|
-
csi = load((str(line.decode()).replace("\r\n","\n") for line in csi_file.readlines()))
|
|
531
|
-
except Exception as e:
|
|
532
|
-
import sys
|
|
533
|
-
print(f"Error loading CSiBridge file: {e}", file=sys.stderr)
|
|
534
|
-
csi = {}
|
|
535
|
-
|
|
536
|
-
for item in csi.get("BRIDGE BENT DEFINITIONS 2 - COLUMN DATA",[]):
|
|
539
|
+
for item in self._csi.get("BRIDGE BENT DEFINITIONS 2 - COLUMN DATA",[]):
|
|
537
540
|
if "ColNum" in item and "Section" in item:
|
|
538
541
|
yield {
|
|
539
542
|
"name": item["ColNum"],
|
|
540
543
|
"type": "Column",
|
|
541
|
-
"section": item["Section"],
|
|
544
|
+
# "section": item["Section"],
|
|
542
545
|
}
|
|
543
546
|
|
|
544
|
-
for item in
|
|
547
|
+
for item in self._csi.get("BRIDGE OBJECT DEFINITIONS 03 - SPANS 1 - GENERAL", []):
|
|
545
548
|
if "SpanName" in item and "BridgeSect" in item:
|
|
546
549
|
yield {
|
|
547
550
|
"name": item["SpanName"],
|
|
548
551
|
"type": "Span",
|
|
549
|
-
"section": None,
|
|
552
|
+
# "section": None,
|
|
550
553
|
}
|
|
551
554
|
|
|
552
555
|
|
|
553
|
-
|
|
554
|
-
|
|
555
556
|
# import subprocess
|
|
556
557
|
# class Event: pass
|
|
557
558
|
|
|
@@ -12,7 +12,6 @@ import json
|
|
|
12
12
|
import io
|
|
13
13
|
import base64
|
|
14
14
|
import numpy as np
|
|
15
|
-
# Ensure Agg backend is set for non-interactive plotting
|
|
16
15
|
|
|
17
16
|
import quakeio
|
|
18
17
|
from scipy.signal import find_peaks
|
|
@@ -433,6 +432,7 @@ def plot_spectral_surface(ax, traces, **options):
|
|
|
433
432
|
|
|
434
433
|
|
|
435
434
|
def _plot_mountains(spectra, accellim=None):
|
|
435
|
+
# Ensure Agg backend is set for non-interactive plotting
|
|
436
436
|
import matplotlib
|
|
437
437
|
matplotlib.use('Agg')
|
|
438
438
|
from matplotlib import pyplot as plt, ticker, cm
|
irie/apps/prediction/urls.py
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
#----------------------------------------------------------------------------#
|
|
10
10
|
from django.urls import re_path
|
|
11
11
|
from .views import (
|
|
12
|
-
asset_predictors, predictor_profile,
|
|
12
|
+
asset_predictors, predictor_profile, predictor_render,
|
|
13
13
|
create_mdof, create_model, asset_map
|
|
14
14
|
)
|
|
15
15
|
|
|
@@ -17,7 +17,7 @@ _ROOT = "^inventory/(?P<calid>[0-9 A-Z-]*)/predictors"
|
|
|
17
17
|
|
|
18
18
|
urlpatterns = [
|
|
19
19
|
re_path(f"{_ROOT}/(?P<preid>[0-9]{{1,}})/$", predictor_profile),
|
|
20
|
-
re_path(f"{_ROOT}/(?P<preid>[0-9]{{1,}})/
|
|
20
|
+
re_path(f"{_ROOT}/(?P<preid>[0-9]{{1,}})/render/", predictor_render),
|
|
21
21
|
re_path(f"{_ROOT}/create/map/$", asset_map),
|
|
22
22
|
re_path(f"{_ROOT}/create/model/$", create_model),
|
|
23
23
|
re_path(f"{_ROOT}/create/v1/$", create_mdof),
|
irie/apps/prediction/views.py
CHANGED
|
@@ -14,6 +14,7 @@ import json
|
|
|
14
14
|
import veux
|
|
15
15
|
import uuid
|
|
16
16
|
import base64
|
|
17
|
+
import hashlib
|
|
17
18
|
|
|
18
19
|
from django.shortcuts import HttpResponse
|
|
19
20
|
from django.template import loader, TemplateDoesNotExist
|
|
@@ -30,6 +31,14 @@ from irie.apps.prediction.models import PredictorModel
|
|
|
30
31
|
from .forms import PredictorForm
|
|
31
32
|
|
|
32
33
|
|
|
34
|
+
|
|
35
|
+
def _string_to_id(s: str) -> str:
|
|
36
|
+
# 1. SHA-256 → bytes 2. URL-safe Base64 (no + / =) 3. strip padding
|
|
37
|
+
b64 = base64.urlsafe_b64encode(
|
|
38
|
+
hashlib.sha256(s.encode()).digest()
|
|
39
|
+
).rstrip(b'=').decode('ascii')
|
|
40
|
+
return f"id_{b64}"
|
|
41
|
+
|
|
33
42
|
@login_required(login_url="/login/")
|
|
34
43
|
def asset_predictors(request, calid):
|
|
35
44
|
|
|
@@ -59,8 +68,7 @@ def asset_predictors(request, calid):
|
|
|
59
68
|
|
|
60
69
|
|
|
61
70
|
@login_required(login_url="/login/")
|
|
62
|
-
def
|
|
63
|
-
print(preid)
|
|
71
|
+
def predictor_render(request, calid, preid):
|
|
64
72
|
try:
|
|
65
73
|
predictor = PredictorModel.objects.get(pk=int(preid))
|
|
66
74
|
except ObjectDoesNotExist:
|
|
@@ -71,7 +79,18 @@ def predictor_profile_detail(request, calid, preid):
|
|
|
71
79
|
runner = PREDICTOR_TYPES[predictor.protocol](predictor)
|
|
72
80
|
|
|
73
81
|
try:
|
|
74
|
-
|
|
82
|
+
_, mesh = runner.structural_section(sname)
|
|
83
|
+
|
|
84
|
+
can = veux._create_canvas(name="gltf")
|
|
85
|
+
import numpy as np
|
|
86
|
+
R = np.array([[1, 0],[0, 1], [0, 0]])
|
|
87
|
+
can.plot_lines(mesh.exterior()@R.T)
|
|
88
|
+
if (interior := mesh.interior()) is not None:
|
|
89
|
+
for i in interior:
|
|
90
|
+
can.plot_lines(i@R.T)
|
|
91
|
+
glb = can.to_glb()
|
|
92
|
+
return HttpResponse(glb, content_type="application/binary")
|
|
93
|
+
|
|
75
94
|
except Exception as e:
|
|
76
95
|
raise e
|
|
77
96
|
return HttpResponse(
|
|
@@ -79,6 +98,7 @@ def predictor_profile_detail(request, calid, preid):
|
|
|
79
98
|
content_type="application/json",
|
|
80
99
|
status=404
|
|
81
100
|
)
|
|
101
|
+
|
|
82
102
|
from veux.plane import PlaneModel
|
|
83
103
|
art = veux.create_artist(mesh, ndf=1, canvas="gltf")
|
|
84
104
|
art.draw_surfaces()
|
|
@@ -86,7 +106,7 @@ def predictor_profile_detail(request, calid, preid):
|
|
|
86
106
|
|
|
87
107
|
glb = art.canvas.to_glb()
|
|
88
108
|
return HttpResponse(glb, content_type="application/binary")
|
|
89
|
-
|
|
109
|
+
|
|
90
110
|
# rendering = f"data:application/octet-stream;base64,{glb64}"
|
|
91
111
|
# rendering = art._repr_html_()
|
|
92
112
|
r = dict(
|
|
@@ -120,12 +140,19 @@ def predictor_profile(request, calid, preid):
|
|
|
120
140
|
context["predictor"] = predictor
|
|
121
141
|
context["sensors"] = predictor.sensorassignment_set.all()
|
|
122
142
|
|
|
123
|
-
|
|
124
143
|
try:
|
|
125
144
|
if predictor.protocol == PredictorModel.Protocol.TYPE1:
|
|
126
145
|
html_template = loader.get_template("prediction/xara-profile.html")
|
|
146
|
+
|
|
127
147
|
context["members"] = context["runner"].structural_members()
|
|
128
148
|
|
|
149
|
+
context["sections"] = [
|
|
150
|
+
{
|
|
151
|
+
"id": _string_to_id(name),
|
|
152
|
+
"name": name,
|
|
153
|
+
} for _, name in context["runner"].structural_sections()
|
|
154
|
+
]
|
|
155
|
+
|
|
129
156
|
else:
|
|
130
157
|
html_template = loader.get_template("prediction/predictor-profile.html")
|
|
131
158
|
|
|
@@ -243,7 +270,7 @@ def create_model(request, calid):
|
|
|
243
270
|
)
|
|
244
271
|
artist.draw_surfaces()
|
|
245
272
|
|
|
246
|
-
# Generate the .glb
|
|
273
|
+
# Generate the .glb data
|
|
247
274
|
glb = artist.canvas.to_glb()
|
|
248
275
|
|
|
249
276
|
if request.POST.get("action") == "commit":
|
|
Binary file
|
|
@@ -183,7 +183,7 @@ document.addEventListener("DOMContentLoaded", function(event) {
|
|
|
183
183
|
});
|
|
184
184
|
|
|
185
185
|
if (document.querySelector('.current-year')){
|
|
186
|
-
|
|
186
|
+
document.querySelector('.current-year').textContent = new Date().getFullYear();
|
|
187
187
|
}
|
|
188
188
|
// Glide JS
|
|
189
189
|
});
|
|
@@ -302,7 +302,7 @@ if (document.querySelector('.fixed-plugin')) {
|
|
|
302
302
|
|
|
303
303
|
}
|
|
304
304
|
|
|
305
|
-
//Set Sidebar Color
|
|
305
|
+
// Set Sidebar Color
|
|
306
306
|
function sidebarColor(a) {
|
|
307
307
|
var parent = document.querySelector(".nav-link.active");
|
|
308
308
|
var color = a.getAttribute("data-color");
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
//===----------------------------------------------------------------------===#
|
|
6
6
|
//
|
|
7
7
|
class TablePagination {
|
|
8
|
+
|
|
8
9
|
constructor(tableId, paginationId, searchInputId, rowsPerPage = 9) {
|
|
9
10
|
this.table = document.getElementById(tableId);
|
|
10
11
|
this.pagination = document.getElementById(paginationId);
|
|
@@ -243,12 +243,10 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
243
243
|
|
|
244
244
|
const scene = createSensorRenderer(container, modelPath);
|
|
245
245
|
|
|
246
|
-
|
|
247
|
-
const arrowObjects = [];
|
|
248
|
-
|
|
249
246
|
//
|
|
250
247
|
// Plot Button
|
|
251
248
|
//
|
|
249
|
+
const arrowObjects = [];
|
|
252
250
|
const plotButton = document.getElementById('plot-btn');
|
|
253
251
|
plotButton.addEventListener('click', function () {
|
|
254
252
|
arrowObjects.forEach(arrow => {
|
|
@@ -62,7 +62,7 @@ Claudio Perez, Summer 2023
|
|
|
62
62
|
<h6 class="accordion-header" style="display:inline" id="{{forloop.counter}}">
|
|
63
63
|
<a href="./{{predictor.id}}" >
|
|
64
64
|
{{predictor.name}}
|
|
65
|
-
</a> (<code>{{ predictor.platform }}</code>)
|
|
65
|
+
</a> <!-- (<code>{{ predictor.platform }}</code>) -->
|
|
66
66
|
</h6>
|
|
67
67
|
</div>
|
|
68
68
|
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
</a>
|
|
37
37
|
</div>
|
|
38
38
|
</div>
|
|
39
|
+
|
|
39
40
|
<div class="row">
|
|
40
41
|
<div class="col">
|
|
41
42
|
<form method="POST" enctype="multipart/form-data">
|
|
@@ -46,6 +47,13 @@
|
|
|
46
47
|
</form>
|
|
47
48
|
</div>
|
|
48
49
|
</div>
|
|
50
|
+
|
|
51
|
+
{% if navigator %}
|
|
52
|
+
{% include "prediction/veux/navigator.html" with members=navigator.members sections=navigator.sections %}
|
|
53
|
+
{% endif %}
|
|
54
|
+
|
|
55
|
+
{% if error %}
|
|
56
|
+
{% endif %}
|
|
49
57
|
<div class="row">
|
|
50
58
|
<iframe
|
|
51
59
|
id="map"
|
|
@@ -58,6 +66,25 @@
|
|
|
58
66
|
{% endblock content %}
|
|
59
67
|
|
|
60
68
|
{% block javascripts %}
|
|
69
|
+
{% if navigator %}
|
|
70
|
+
<script>
|
|
71
|
+
|
|
72
|
+
{% include "prediction/veux/navigator.js" %}
|
|
73
|
+
|
|
74
|
+
const VIEWER = new VeuxNavigator(`/inventory/{{asset.calid}}/predictors/{{predictor.id}}/render/?section=`,
|
|
75
|
+
document.querySelector('#tab-link-container'),
|
|
76
|
+
document.getElementById('tab-content-container'));
|
|
77
|
+
|
|
78
|
+
function handleMemberSelection(elem) {
|
|
79
|
+
VIEWER.select(elem);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
document.addEventListener('DOMContentLoaded', function () {
|
|
83
|
+
VIEWER.initTabs('tab1', '.tab-link');
|
|
84
|
+
});
|
|
85
|
+
</script>
|
|
86
|
+
{% endif %}
|
|
87
|
+
|
|
61
88
|
<script>
|
|
62
89
|
const button = document.getElementById('render');
|
|
63
90
|
const form = document.querySelector('form');
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
<div class="">
|
|
2
|
+
<div class="row align-right">
|
|
3
|
+
<!-- Left Side: Sensor Form -->
|
|
4
|
+
<div class="col-md-4" >
|
|
5
|
+
<div class="card bg-white-100 border-1 rounded-0 shadow">
|
|
6
|
+
<div class="card-header d-sm-flex flex-row align-items-center flex-0">
|
|
7
|
+
<select id="table-switcher"
|
|
8
|
+
class="form-select form-select-sm me-2">
|
|
9
|
+
<option value="members" >Members</option>
|
|
10
|
+
<option value="sections">Sections</option>
|
|
11
|
+
<option value="sensors" >Sensors</option>
|
|
12
|
+
</select>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="card-body">
|
|
15
|
+
<div class="table-response">
|
|
16
|
+
<table id="members"
|
|
17
|
+
class="table align-items-center table-flush">
|
|
18
|
+
<thead class="thead-light">
|
|
19
|
+
<tr>
|
|
20
|
+
<th class="border-bottom" scope="col">#</th>
|
|
21
|
+
<th class="border-bottom" scope="col">Type</th>
|
|
22
|
+
</tr>
|
|
23
|
+
</thead>
|
|
24
|
+
<tbody>
|
|
25
|
+
{% for member in members %}
|
|
26
|
+
<tr id="veux-member-{{member.id}}"
|
|
27
|
+
data-section="{{ member.section }}"
|
|
28
|
+
style="cursor: pointer;"
|
|
29
|
+
onClick="handleMemberSelection(this)">
|
|
30
|
+
<td><code>{{ member.name }}</code></td>
|
|
31
|
+
<td>{{ member.type }}</td>
|
|
32
|
+
</tr>
|
|
33
|
+
{% endfor %}
|
|
34
|
+
</tbody>
|
|
35
|
+
</table>
|
|
36
|
+
|
|
37
|
+
<table id="sections" hidden
|
|
38
|
+
class="table align-items-center table-flush">
|
|
39
|
+
<thead class="thead-light">
|
|
40
|
+
<tr>
|
|
41
|
+
<th class="border-bottom" scope="col">#</th>
|
|
42
|
+
<th class="border-bottom" scope="col">Type</th>
|
|
43
|
+
</tr>
|
|
44
|
+
</thead>
|
|
45
|
+
<tbody>
|
|
46
|
+
{% for member in sections %}
|
|
47
|
+
<tr id="veux-member-{{member.id}}"
|
|
48
|
+
data-query="{{ member.name }}"
|
|
49
|
+
data-name="{{ member.name }}"
|
|
50
|
+
style="cursor: pointer;"
|
|
51
|
+
onClick="handleMemberSelection(this)">
|
|
52
|
+
<td><code>{{ member.name }}</code></td>
|
|
53
|
+
<td>{{ member.type }}</td>
|
|
54
|
+
</tr>
|
|
55
|
+
{% endfor %}
|
|
56
|
+
</tbody>
|
|
57
|
+
</table>
|
|
58
|
+
|
|
59
|
+
<table id="sensors"
|
|
60
|
+
class="table align-items-center table-flush" hidden>
|
|
61
|
+
<thead class="thead-light">
|
|
62
|
+
<tr>
|
|
63
|
+
<th class="border-bottom" scope="col">#</th>
|
|
64
|
+
<th class="border-bottom" scope="col">Node</th>
|
|
65
|
+
<th class="border-bottom" scope="col">Type</th>
|
|
66
|
+
</tr>
|
|
67
|
+
</thead>
|
|
68
|
+
<tbody>
|
|
69
|
+
{% for sensor in sensors %}
|
|
70
|
+
<tr id="sensor-{{sensor.id}}"
|
|
71
|
+
data-sensor-x="{{ sensor.sensor.x }}"
|
|
72
|
+
data-sensor-y="{{ sensor.sensor.y }}"
|
|
73
|
+
data-sensor-z="{{ sensor.sensor.z }}"
|
|
74
|
+
data-sensor-dx="{{ sensor.sensor.dx }}"
|
|
75
|
+
data-sensor-dy="{{ sensor.sensor.dy }}"
|
|
76
|
+
data-sensor-dz="{{ sensor.sensor.dy }}">
|
|
77
|
+
<td><code>{{ sensor.id }}</code></td>
|
|
78
|
+
<td>{{ sensor.node }}</td>
|
|
79
|
+
<td>{{ sensor.role }}</td>
|
|
80
|
+
</tr>
|
|
81
|
+
{% endfor %}
|
|
82
|
+
</tbody>
|
|
83
|
+
</table>
|
|
84
|
+
<nav>
|
|
85
|
+
<ul class="pagination" id="pagination"></ul>
|
|
86
|
+
</nav>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<!-- Right Side: Predictor Rendering -->
|
|
93
|
+
<div class="col-md-8">
|
|
94
|
+
<div id="rendering" class="card bg-white-100 border-1 rounded-0 shadow">
|
|
95
|
+
<div class="card-header">
|
|
96
|
+
<ul id="tab-link-container" class="nav nav-tabs" id="myTab" role="tablist">
|
|
97
|
+
<li class="nav-item" role="presentation">
|
|
98
|
+
<a class="nav-link tab-link active"
|
|
99
|
+
id="tab1-tab"
|
|
100
|
+
data-bs-toggle="tab" href="#"
|
|
101
|
+
data-tab="tab1"
|
|
102
|
+
role="tab">Model</a>
|
|
103
|
+
</li>
|
|
104
|
+
</ul>
|
|
105
|
+
</div>
|
|
106
|
+
<div class="card-body text-center" style="background-color: #f0f0f0;">
|
|
107
|
+
<div id="tab-content-container">
|
|
108
|
+
<div id="tab1-content" class="tab-content">
|
|
109
|
+
<div id="main-viewer"
|
|
110
|
+
style="width: 100%; height: 300px; background-color: #f0f0f0; margin: 0 auto;">
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
<div class="card-footer text-center">
|
|
116
|
+
Powered by <a href="https://veux.io/">veux</a>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
//
|
|
5
5
|
//===----------------------------------------------------------------------===//
|
|
6
6
|
//
|
|
7
|
-
class
|
|
7
|
+
class VeuxNavigator {
|
|
8
8
|
#initializedTabs;
|
|
9
9
|
#table;
|
|
10
10
|
#url;
|
|
11
11
|
#tabLinkContainer;
|
|
12
12
|
#tabContentContainer;
|
|
13
13
|
|
|
14
|
-
constructor(
|
|
15
|
-
this.#url =
|
|
14
|
+
constructor(baseUrl, tabLinkContainer, tabContentContainer) {
|
|
15
|
+
this.#url = baseUrl;
|
|
16
16
|
this.#initializedTabs = [];
|
|
17
17
|
this.#tabLinkContainer = tabLinkContainer;
|
|
18
18
|
this.#tabContentContainer = tabContentContainer;
|
|
@@ -32,7 +32,8 @@ class VeuxViewer {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
select(elem) {
|
|
35
|
-
const sname = elem.dataset.
|
|
35
|
+
const sname = `${elem.id}`; //dataset.name;
|
|
36
|
+
// const hash = elem.dataset.hash;
|
|
36
37
|
|
|
37
38
|
if (this.#initializedTabs.includes(sname)) {
|
|
38
39
|
const tabLink = this.#tabLinkContainer.querySelector(`#${sname}-tab`);
|
|
@@ -40,11 +41,11 @@ class VeuxViewer {
|
|
|
40
41
|
return;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
this.addTab(
|
|
44
|
+
this.addTab(elem);
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
addTab(
|
|
47
|
-
const tab = `${
|
|
47
|
+
addTab(elem) {
|
|
48
|
+
const tab = `${elem.id}`;
|
|
48
49
|
|
|
49
50
|
//
|
|
50
51
|
//
|
|
@@ -54,10 +55,10 @@ class VeuxViewer {
|
|
|
54
55
|
tabLink.classList.add("tab-link", "nav-link", "active");
|
|
55
56
|
tabLink.href = "#";
|
|
56
57
|
tabLink.setAttribute('data-tab', tab);
|
|
57
|
-
tabLink.setAttribute('data-
|
|
58
|
+
tabLink.setAttribute('data-query', elem.dataset.query);
|
|
58
59
|
tabLink.setAttribute('data-bs-toggle', 'tab');
|
|
59
60
|
tabLink.setAttribute('role', 'tab');
|
|
60
|
-
tabLink.innerHTML = `${
|
|
61
|
+
tabLink.innerHTML = `${elem.dataset.name} <button class="btn-close" type="button" aria-label="Close"></button>`;
|
|
61
62
|
const closeButton = tabLink.querySelector('.btn-close');
|
|
62
63
|
closeButton.addEventListener('click', (e) => {
|
|
63
64
|
this.delTab(tabLink);
|
|
@@ -83,14 +84,10 @@ class VeuxViewer {
|
|
|
83
84
|
tabContent.style.display = 'block';
|
|
84
85
|
this.#tabContentContainer.appendChild(tabContent);
|
|
85
86
|
|
|
86
|
-
|
|
87
|
-
const selectedTab = tabLink.getAttribute('data-tab');
|
|
88
|
-
|
|
87
|
+
|
|
89
88
|
this.#initializedTabs.push(tab);
|
|
90
|
-
|
|
91
89
|
this.clickTab(tabLink);
|
|
92
|
-
|
|
93
|
-
this.fetchAndUpdateTab(selectedTab, corr);
|
|
90
|
+
this.fetchAndUpdateTab(tab, elem.dataset.query);
|
|
94
91
|
return tabLink;
|
|
95
92
|
}
|
|
96
93
|
|
|
@@ -133,7 +130,7 @@ class VeuxViewer {
|
|
|
133
130
|
this.clickTab(document.getElementById('tab1-tab'));
|
|
134
131
|
}
|
|
135
132
|
|
|
136
|
-
fetchAndUpdateTab(tab) {
|
|
133
|
+
fetchAndUpdateTab(tab, query) {
|
|
137
134
|
const contentDiv = this.#tabContentContainer.querySelector(`#${tab}-content`);
|
|
138
135
|
|
|
139
136
|
// Show loading message while content is being fetched
|
|
@@ -145,7 +142,7 @@ class VeuxViewer {
|
|
|
145
142
|
</div>
|
|
146
143
|
`;
|
|
147
144
|
|
|
148
|
-
let apiUrl = `${this.#url}${
|
|
145
|
+
let apiUrl = `${this.#url}${query}`;
|
|
149
146
|
console.log(`Fetching content from: ${apiUrl}`);
|
|
150
147
|
|
|
151
148
|
if (true) {
|
|
@@ -162,6 +159,9 @@ class VeuxViewer {
|
|
|
162
159
|
contentDiv.appendChild(mv);
|
|
163
160
|
return;
|
|
164
161
|
}
|
|
162
|
+
|
|
163
|
+
//
|
|
164
|
+
//
|
|
165
165
|
fetch(apiUrl)
|
|
166
166
|
.then(response => response.json())
|
|
167
167
|
.then(data => {
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
}
|
|
13
13
|
</script>
|
|
14
14
|
<script type="module" src="https://unpkg.com/@google/model-viewer/dist/model-viewer.min.js"></script>
|
|
15
|
-
|
|
16
15
|
{% endblock stylesheets %}
|
|
17
16
|
|
|
18
17
|
{% block content %}
|
|
@@ -36,115 +35,16 @@
|
|
|
36
35
|
</div>
|
|
37
36
|
</div>
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
<!-- Left Side: Sensor Form -->
|
|
42
|
-
<div class="col-md-4" >
|
|
43
|
-
<div class="card bg-white-100 border-1 rounded-0 shadow">
|
|
44
|
-
<div class="card-header d-sm-flex flex-row align-items-center flex-0">
|
|
45
|
-
<select id="table-switcher"
|
|
46
|
-
class="form-select form-select-sm me-2">
|
|
47
|
-
<option value="members">Members</option>
|
|
48
|
-
<option value="sensors">Sensors</option>
|
|
49
|
-
</select>
|
|
50
|
-
</div>
|
|
51
|
-
<div class="card-body">
|
|
52
|
-
<div class="table-response">
|
|
53
|
-
<table id="members"
|
|
54
|
-
class="table align-items-center table-flush">
|
|
55
|
-
<thead class="thead-light">
|
|
56
|
-
<tr>
|
|
57
|
-
<th class="border-bottom" scope="col">#</th>
|
|
58
|
-
<th class="border-bottom" scope="col">Type</th>
|
|
59
|
-
<th class="border-bottom" scope="col">Section</th>
|
|
60
|
-
</tr>
|
|
61
|
-
</thead>
|
|
62
|
-
<tbody>
|
|
63
|
-
{% for member in members %}
|
|
64
|
-
<tr id="veux-member-{{member.id}}"
|
|
65
|
-
data-section="{{ member.section }}"
|
|
66
|
-
style="cursor: pointer;"
|
|
67
|
-
onClick="handleMemberSelection(this)">
|
|
68
|
-
<td><code>{{ member.name }}</code></td>
|
|
69
|
-
<td>{{ member.type }}</td>
|
|
70
|
-
<td class="fw-bolder text-gray-800">
|
|
71
|
-
{{ member.section }}
|
|
72
|
-
</td>
|
|
73
|
-
</tr>
|
|
74
|
-
{% endfor %}
|
|
75
|
-
</tbody>
|
|
76
|
-
</table>
|
|
77
|
-
|
|
78
|
-
<table id="sensors" class="table align-items-center table-flush" hidden>
|
|
79
|
-
<thead class="thead-light">
|
|
80
|
-
<tr>
|
|
81
|
-
<th class="border-bottom" scope="col">#</th>
|
|
82
|
-
<th class="border-bottom" scope="col">Node</th>
|
|
83
|
-
<th class="border-bottom" scope="col">Type</th>
|
|
84
|
-
</tr>
|
|
85
|
-
</thead>
|
|
86
|
-
<tbody>
|
|
87
|
-
{% for sensor in sensors %}
|
|
88
|
-
<tr id="sensor-{{sensor.id}}"
|
|
89
|
-
data-sensor-x="{{ sensor.sensor.x }}"
|
|
90
|
-
data-sensor-y="{{ sensor.sensor.y }}"
|
|
91
|
-
data-sensor-z="{{ sensor.sensor.z }}"
|
|
92
|
-
data-sensor-dx="{{ sensor.sensor.dx }}"
|
|
93
|
-
data-sensor-dy="{{ sensor.sensor.dy }}"
|
|
94
|
-
data-sensor-dz="{{ sensor.sensor.dy }}">
|
|
95
|
-
<td><code>{{ sensor.id }}</code></td>
|
|
96
|
-
<td>{{ sensor.node }}</td>
|
|
97
|
-
<td>{{ sensor.role }}</td>
|
|
98
|
-
</tr>
|
|
99
|
-
{% endfor %}
|
|
100
|
-
</tbody>
|
|
101
|
-
</table>
|
|
102
|
-
<nav>
|
|
103
|
-
<ul class="pagination" id="pagination"></ul>
|
|
104
|
-
</nav>
|
|
105
|
-
</div>
|
|
106
|
-
</div>
|
|
107
|
-
</div>
|
|
108
|
-
</div>
|
|
109
|
-
|
|
110
|
-
<!-- Right Side: Predictor Rendering -->
|
|
111
|
-
<div class="col-md-8">
|
|
112
|
-
<div id="rendering" class="card bg-white-100 border-1 rounded-0 shadow">
|
|
113
|
-
<div class="card-header">
|
|
114
|
-
<ul id="tab-link-container" class="nav nav-tabs" id="myTab" role="tablist">
|
|
115
|
-
<li class="nav-item" role="presentation">
|
|
116
|
-
<a class="nav-link tab-link active"
|
|
117
|
-
id="tab1-tab"
|
|
118
|
-
data-bs-toggle="tab" href="#"
|
|
119
|
-
data-tab="tab1"
|
|
120
|
-
role="tab">Model</a>
|
|
121
|
-
</li>
|
|
122
|
-
</ul>
|
|
123
|
-
</div>
|
|
124
|
-
<div class="card-body text-center" style="background-color: #f0f0f0;">
|
|
125
|
-
<div id="tab-content-container">
|
|
126
|
-
<div id="tab1-content" class="tab-content">
|
|
127
|
-
<div id="main-viewer"
|
|
128
|
-
style="width: 100%; height: 300px; background-color: #f0f0f0; margin: 0 auto;">
|
|
129
|
-
</div>
|
|
130
|
-
</div>
|
|
131
|
-
</div>
|
|
132
|
-
</div>
|
|
133
|
-
<div class="card-footer text-center">
|
|
134
|
-
Powered by <a href="https://veux.io/">veux</a>
|
|
135
|
-
</div>
|
|
136
|
-
</div>
|
|
137
|
-
</div>
|
|
138
|
-
</div>
|
|
139
|
-
</div>
|
|
38
|
+
{% include "prediction/veux/navigator.html" with members=members sections=sections sensors=sensors %}
|
|
39
|
+
|
|
140
40
|
{% endblock content %}
|
|
141
41
|
|
|
142
42
|
{% block javascripts %}
|
|
143
43
|
|
|
144
44
|
<script>
|
|
145
|
-
{% include "prediction/
|
|
45
|
+
{% include "prediction/veux/navigator.js" %}
|
|
146
46
|
|
|
147
|
-
const VIEWER = new
|
|
47
|
+
const VIEWER = new VeuxNavigator(`/inventory/{{asset.calid}}/predictors/{{predictor.id}}/render/?section=`,
|
|
148
48
|
document.querySelector('#tab-link-container'),
|
|
149
49
|
document.getElementById('tab-content-container'));
|
|
150
50
|
|
|
@@ -236,6 +236,13 @@ td.left-text{vertical-align:middle}
|
|
|
236
236
|
<div class="col-lg-4 order-lg-1 card shadow"><img src="{{ ASSETS_ROOT }}/img/twin.png"
|
|
237
237
|
alt="Digital twins"></div>
|
|
238
238
|
</div>
|
|
239
|
+
|
|
240
|
+
<div class="col-lg-5 mb-5 mb-lg-0">
|
|
241
|
+
<h3 class="d-flex align-items-center">State-of-the-art Modeling</h3>
|
|
242
|
+
<p class="mb-4">PEER is partnering with the <em>California Strong Motion Intrumentation Program</em>
|
|
243
|
+
to push sensor data to stakeholders in real-time.</p>
|
|
244
|
+
</div>
|
|
245
|
+
<div class="col-lg-6"><img src="{{ ASSETS_ROOT}}/content_images/brace/ForceFrame.png" alt="Force formulation"></div>
|
|
239
246
|
{% comment %}
|
|
240
247
|
<div class="col-lg-5 order-lg-2 mb-5 mb-lg-0">
|
|
241
248
|
<h3 class="d-flex align-items-center"> Corridors<span
|
|
@@ -268,8 +275,8 @@ td.left-text{vertical-align:middle}
|
|
|
268
275
|
<a href="https://xara.so">
|
|
269
276
|
<img class="first-column-layout"
|
|
270
277
|
src="{{ ASSETS_ROOT }}/content_images/brace/opensees.jpg" alt="opensees"></a></td>
|
|
271
|
-
<td class=full-center-text><a href="https://
|
|
272
|
-
<td class=left-text>Direct and idiomatic bindings to <a href="https://github.com/
|
|
278
|
+
<td class=full-center-text><a href="https://xara.so" >xara</a></td>
|
|
279
|
+
<td class=left-text>Direct and idiomatic bindings to <a href="https://github.com/peer-open-source/xara" >
|
|
273
280
|
<samp>OpenSeesRT</samp></a> kernel for finite element analysis.</td>
|
|
274
281
|
</tr>
|
|
275
282
|
{% if False %}
|
|
@@ -49,7 +49,7 @@ irie/apps/events/models.py,sha256=YwtvQCbFKOEGhVEAlGmCCLbepxwo0Xz0uV4vQ5z8dHM,39
|
|
|
49
49
|
irie/apps/events/tests.py,sha256=PSZUTXteVS5Fim2upOndb1HW5Pu7DoC1r25-7_1i-so,33
|
|
50
50
|
irie/apps/events/tests_events.py,sha256=iVNwnlZgqug1MtEIGS_E82wcQ7522m-0q47kreN_D90,8363
|
|
51
51
|
irie/apps/events/urls.py,sha256=UrVmK0NpKvmDNH9Iad4CTbN9KdXaW4W3ZNWxPpiSgUY,1052
|
|
52
|
-
irie/apps/events/views.py,sha256=
|
|
52
|
+
irie/apps/events/views.py,sha256=AS2WmKE9CrKi7kfXJ-_Gpj-DDYMcet6I8CMkEr1nYv8,2978
|
|
53
53
|
irie/apps/events/views_events.py,sha256=ahQQy5z1T0NH69ybLmPWahboYmAsAmiaCI8g27Md_5A,7229
|
|
54
54
|
irie/apps/events/migrations/0001_initial.py,sha256=sSCS0Kbyb73m_x3kw5Q4tRrTJcCqh3gRTLmkrcf6_ps,1065
|
|
55
55
|
irie/apps/events/migrations/0002_rename_event_eventrecord.py,sha256=TNRUB9-EZmdURlkyAtz7KBdtuoSXwbwCQDRP4CKmdBw,431
|
|
@@ -64,8 +64,8 @@ irie/apps/inventory/forms.py,sha256=y8tcIGInXDg7KCf1OWd1jtc4umJsm8rf8-4O8nDhNd4,
|
|
|
64
64
|
irie/apps/inventory/models.py,sha256=VdJ_5mEb6lBk21NalK8bhOy0u6SFdWmhXpcQ4vRs3Pg,6131
|
|
65
65
|
irie/apps/inventory/sitemaps.py,sha256=Nha1MTsIH_ad7JyoxwonPytp7MNuEhDNszkEUOmlN0o,826
|
|
66
66
|
irie/apps/inventory/tables.py,sha256=vZdPOcbN1ibuWXqLwbBUoQw9iavwa1GJ5fd83k8bu7Y,27874
|
|
67
|
-
irie/apps/inventory/urls.py,sha256=
|
|
68
|
-
irie/apps/inventory/views.py,sha256=
|
|
67
|
+
irie/apps/inventory/urls.py,sha256=1VQIo0oCMHa112q-zJBP5mOBxsdI2upfqnTRHe9IirE,1577
|
|
68
|
+
irie/apps/inventory/views.py,sha256=zSjaBh3gogeHNbvLSzkbiybC5Y8ao8p4l4ujXQsioxw,21933
|
|
69
69
|
irie/apps/inventory/archive/CESMD.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
70
|
irie/apps/inventory/archive/calid.py,sha256=3L8MbPIGOE3kzDnqeyY055pRBiF2O2l0cmpuDbTsdTg,3014
|
|
71
71
|
irie/apps/inventory/migrations/0001_initial.py,sha256=PwTHv4Q3gqWFha--8Zp9kUOh-cYalB14jXj7RVJUVnw,1786
|
|
@@ -97,10 +97,10 @@ irie/apps/prediction/admin.py,sha256=QR9eK3JivwPJ1dqtVeBB1YlT6oa8DjE9Sx1Hu6rnJ7c
|
|
|
97
97
|
irie/apps/prediction/apps.py,sha256=sejLu4xx8_IwQQKTnxC_DNK-vhjiqeG0_uk2Zg1ga-M,422
|
|
98
98
|
irie/apps/prediction/forms.py,sha256=3alwgkBhjnJsDmyh2zDAU1Z-2ZIfdV8f_dXUVMj6atI,650
|
|
99
99
|
irie/apps/prediction/metrics.py,sha256=Zh1utUZTGddQEVn4e1rLO74tbIz7bVvZli8sgmuB_X0,1410
|
|
100
|
-
irie/apps/prediction/models.py,sha256=
|
|
100
|
+
irie/apps/prediction/models.py,sha256=zYNY_brXriuaJATwpndMtiveK-ejxwKW-0ZNaIQjDL0,2925
|
|
101
101
|
irie/apps/prediction/predictor.py,sha256=-x_4kHWnfUxiX2aQfbl3dsbVAG4lRKAFbo1CqfZNCIc,831
|
|
102
|
-
irie/apps/prediction/urls.py,sha256=
|
|
103
|
-
irie/apps/prediction/views.py,sha256=
|
|
102
|
+
irie/apps/prediction/urls.py,sha256=V41EjswrZ4FGPMetHzxkL4m0wNJvPEuV0UrwxLWqgkA,1012
|
|
103
|
+
irie/apps/prediction/views.py,sha256=4KbDlGBWBDP5BawrPkIZRzSd4f-g2PqLtqSyUjH5j2k,10071
|
|
104
104
|
irie/apps/prediction/views_api.py,sha256=DJzLYO5ouPOWkkZJNZxZJzxC3TROKJ-L6Z2IC1NMuFQ,6888
|
|
105
105
|
irie/apps/prediction/migrations/0001_initial.py,sha256=-0GWd2vUUAzSPfptccAJ3raI3UD4Xj9H0E5EJ7xN0Ek,1428
|
|
106
106
|
irie/apps/prediction/migrations/0002_alter_predictormodel_protocol.py,sha256=nrQvuZ1eRR7fR17IjdS0Xyw14y9DpE6HkG2-h7HQ_zA,560
|
|
@@ -111,8 +111,8 @@ irie/apps/prediction/migrations/0006_remove_sensorassignment_show_x_and_more.py,
|
|
|
111
111
|
irie/apps/prediction/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
112
112
|
irie/apps/prediction/runners/__init__.py,sha256=pur6vJ5zXwjyTxl7p0TBJ8dt-2h-4Ty65KPmtRM8lyQ,2308
|
|
113
113
|
irie/apps/prediction/runners/hazus.py,sha256=sWQDDmwN82wKSHW9EGx46JOOPo_IN2CTK7RF23Rx4c4,31207
|
|
114
|
-
irie/apps/prediction/runners/ssid.py,sha256=
|
|
115
|
-
irie/apps/prediction/runners/opensees/__init__.py,sha256=
|
|
114
|
+
irie/apps/prediction/runners/ssid.py,sha256=_5TZrbWtt-Mid-PXiUu33QOQ7rUK2FLkyAg_B957RLc,18811
|
|
115
|
+
irie/apps/prediction/runners/opensees/__init__.py,sha256=hjyKM2ZGh6eMNgfpic2tTVAWtx5yB1z_HV2CjkSix2I,23195
|
|
116
116
|
irie/apps/prediction/runners/opensees/metrics.py,sha256=HU1V0RYQDXrhTcHqwpnU2KOSl4UPNo9S6QP3sz2VcUY,6428
|
|
117
117
|
irie/apps/prediction/runners/opensees/utilities.py,sha256=1cajnV6gWkJ5obYixfbHZKwxi1ECpR0sBWquAAGhseE,9032
|
|
118
118
|
irie/apps/prediction/runners/opensees/xmlutils.py,sha256=Q3i5L0Dp_5nRsKRGMr-m_bS03Mxa36Ujb-RvwAmResc,7510
|
|
@@ -140,6 +140,7 @@ irie/apps/site/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
|
|
|
140
140
|
irie/apps/site/templatetags/indexing.py,sha256=Jc6onTb6xePy4WuKosaKI6xe78TnC1Xf0wy9LcMBqCQ,126
|
|
141
141
|
irie/apps/static/favicon.ico,sha256=1Cq5RpjwmQAAIxISUwdTbJARATvNQKeVd0RI1_eC6Yw,410598
|
|
142
142
|
irie/apps/static/sitemap.xml,sha256=3WXCikx75aEfxH58XlKidzkQJSQNq4ALSBGRsqn_96Q,316
|
|
143
|
+
irie/apps/static/assets/content_images/brace/ForceFrame.png,sha256=nHBTBTGmPpU6C-CQEyACLUG9g7OEG3Wn_LGaiTv6e4Y,588336
|
|
143
144
|
irie/apps/static/assets/content_images/brace/mdof.svg,sha256=SJpy7HpeTceur85_wmH1FpPFHXl7JZIGGo4NjZnjBwM,50206
|
|
144
145
|
irie/apps/static/assets/content_images/brace/opensees.jpg,sha256=ZX1lhOLNBfGo1lgTLTvX2O5rgPhlzhcld75KvTSNTTU,50369
|
|
145
146
|
irie/apps/static/assets/content_images/brace/sdof.svg,sha256=czlgN6GGodtOIsr-UARUoKMooeh0r33ewL_c_wbNfJ8,8415
|
|
@@ -250,7 +251,7 @@ irie/apps/static/assets/inventory/ll89735.svg,sha256=5U8IN4IAO1foB6XhQHiaGAsiUgd
|
|
|
250
251
|
irie/apps/static/assets/inventory/ll89736.svg,sha256=NqbRFY_-8s5dXV6ECthYBkUgVy9-BVMQfyXDpsFZmlQ,1098734
|
|
251
252
|
irie/apps/static/assets/inventory/ll89973.svg,sha256=vGQCrGj1fSzkpDeeSn8pw4Fvniycce7Ubkoa7TK84Eg,1092572
|
|
252
253
|
irie/apps/static/assets/js/787.545aecf5.chunk.js,sha256=M1ZHjaLV3MTw76zYIC5eJcpQvQNytXUIdbsx1P-Q2Dw,4599
|
|
253
|
-
irie/apps/static/assets/js/brace.js,sha256=
|
|
254
|
+
irie/apps/static/assets/js/brace.js,sha256=0jeaOGdAKjNyefVsLspnu9m6tSbnB0bi_n0dSWcTFQ8,35724
|
|
254
255
|
irie/apps/static/assets/js/d3.v4.min.js,sha256=hYXbQJK4qdJiAeDVjjQ9G0D6A0xLnDQ4eJI9dkm7Fpk,221957
|
|
255
256
|
irie/apps/static/assets/js/events_api.js,sha256=SapCoJwzIaEMeaS-oZUyDd7U6GSRYEYGitRb2Jz7hR0,4643
|
|
256
257
|
irie/apps/static/assets/js/events_page.js,sha256=qu9ah1hclAp7w9z1QO1AmzcKJCQ4avcwuJUDMzTUhk0,10285
|
|
@@ -380,7 +381,6 @@ irie/apps/templates/accounts/register.html,sha256=S41m7tBk4oNFRqFX_Wp9s_hR66f3KG
|
|
|
380
381
|
irie/apps/templates/admin/base_site.html,sha256=edyJ4E6r4Vc4iJGLjA8DruoZnfJjFMEPDT-V_JBZtpo,659
|
|
381
382
|
irie/apps/templates/admin/color_theme_toggle.html,sha256=owh9iJVw55HfqHEEaKUpeCxEIB4db8qFALv4fsbG0fI,697
|
|
382
383
|
irie/apps/templates/bridges/InteractiveTwin-CE58658.html,sha256=MqVlYHylsTD815nswD5yNmKG6NuEpOgP8ocvr3RpnLI,4628421
|
|
383
|
-
irie/apps/templates/components/json-table.html,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
384
384
|
irie/apps/templates/css/admin-extra.css,sha256=UlyykqGhv0DwMMYxwNKOV_jsi_oV28JPy9VH9aAdsmg,100
|
|
385
385
|
irie/apps/templates/documents/documents.html,sha256=XRn6jf3lAWeiDWMa0FdBrfXO0sOi0L6yX8yzBtuqFwU,4634
|
|
386
386
|
irie/apps/templates/events/EarthquakeResponse.html,sha256=HI6Bw8mQqIghUgMpg8jmf7wHzunonomeFvP28YAElLo,12358
|
|
@@ -393,8 +393,8 @@ irie/apps/templates/includes/asset-event-table.html,sha256=5mOsTQienIQb1dXS2_3Wc
|
|
|
393
393
|
irie/apps/templates/includes/footer.html,sha256=dnfLJUYN70gdHFY_Xzkj5KuISD4ve-kKp6vwn4h8hDE,714
|
|
394
394
|
irie/apps/templates/includes/modal-report.html,sha256=iqD6g9R4R7G426wLVL46H5fufWYAA3K8Acav9b0DQoU,3592
|
|
395
395
|
irie/apps/templates/includes/navigation.html,sha256=iUblmqRGBT0GRCsvOUKy6a1O1buq-IkJRKSlmbhevb4,13670
|
|
396
|
-
irie/apps/templates/includes/paginate.js,sha256=
|
|
397
|
-
irie/apps/templates/includes/scripts.html,sha256=
|
|
396
|
+
irie/apps/templates/includes/paginate.js,sha256=eYKMoI-LJIqtbe0i1LYrg3G6rAdsMhtQZSo0LHNtkZA,4230
|
|
397
|
+
irie/apps/templates/includes/scripts.html,sha256=x74crFgk_ArJO0XFIR74Ekw8pdYIOE4jtinHqn0tcJo,825
|
|
398
398
|
irie/apps/templates/includes/settings-box.html,sha256=_YubYOyAJ8IldTgVlXP2wLLXpKpInp8hJ88FN6i6rmw,2488
|
|
399
399
|
irie/apps/templates/includes/sidebar.html,sha256=DDwvNQI0SYNSsxBe_3MbrY3A-xR859RBaj-2Ml8y7yo,13012
|
|
400
400
|
irie/apps/templates/inventory/asset-evals.html,sha256=KzbdJJ7ildMpfO4IQDuXqGBcPzUTlYpJ_Y3Wg4payVc,2700
|
|
@@ -413,7 +413,7 @@ irie/apps/templates/inventory/map-single-asset2.html,sha256=57UjCuHke_ftcMIzqooh
|
|
|
413
413
|
irie/apps/templates/inventory/map-terrain.html,sha256=XAvFzJM06k4b5zVmHbseSD7hQAhkvF05K4UCtXD4sOU,9493
|
|
414
414
|
irie/apps/templates/inventory/preamble.tex,sha256=TmRhIWg2-Pxj_e2OBctANRZPwU8RWMT3EZJFSa3R8HY,3547
|
|
415
415
|
irie/apps/templates/inventory/report.tex,sha256=A1XKpwknlBrAZjFzzxVIDwypjXteqzoCQiuo1tQANfw,45228
|
|
416
|
-
irie/apps/templates/inventory/sensor-upload.html,sha256
|
|
416
|
+
irie/apps/templates/inventory/sensor-upload.html,sha256=dw0kCjG0x-AEFhNGnD-hvprv8xqJJk1yRc3PsCY1rC4,12826
|
|
417
417
|
irie/apps/templates/inventory/three-maps.html,sha256=OUqF59SdAndul7eSDDaS9MYTlNhJDfLU87bM532omfc,8548
|
|
418
418
|
irie/apps/templates/layouts/base-fullscreen.html,sha256=q1nKewLnQ8inBxsUcHlq2Iv_s_qrw6k6bumX7mLR1mI,2579
|
|
419
419
|
irie/apps/templates/layouts/base.html,sha256=ua-PwkH11AVeSbRYnMeAwAlXgXrQWGcFsqhtGbDSiVo,2411
|
|
@@ -422,21 +422,22 @@ irie/apps/templates/networks/_networks.html,sha256=FHKgVadZhnoxREYhnaiXWjL6x1iG6
|
|
|
422
422
|
irie/apps/templates/networks/corridor_table.html,sha256=SW6WMmxGsw2li1BXqvCRj1CFJ3IPUulfk-KHJBIMFx0,876
|
|
423
423
|
irie/apps/templates/networks/networks.js,sha256=KsTnwiPXv0WYTd3GiejHz1gWiBkOVfIuCC7jZVYlRwg,7479
|
|
424
424
|
irie/apps/templates/networks/styled_inputs.html,sha256=4IqtA4oQw6zAc2oypEYspIn_dS0syvVtZvkshhj1Tco,118
|
|
425
|
-
irie/apps/templates/prediction/asset-predictors.html,sha256=
|
|
425
|
+
irie/apps/templates/prediction/asset-predictors.html,sha256=JdaQHTVtRyYttUl1esZi34CqRiK6hiMGrIfOxxr6NPA,4823
|
|
426
426
|
irie/apps/templates/prediction/create-mdof.html,sha256=QVuZGz3E5iwYvOQk_kkitAt5qxfP5zmr2zyVQBWKQzs,4602
|
|
427
|
-
irie/apps/templates/prediction/create-model.html,sha256=
|
|
427
|
+
irie/apps/templates/prediction/create-model.html,sha256=MmP7HoWfDr0z22euwAMTMUGcEEZZqXGtLF-eGZeQI7I,3954
|
|
428
428
|
irie/apps/templates/prediction/new-runner.html,sha256=7gMXrrD-CylMDUelIltB9JnmnqlBr4euqktTfRFnhdU,1586
|
|
429
429
|
irie/apps/templates/prediction/predictor-profile.html,sha256=PWUQAOAAWQP_Ak2D-cQP5PoVjyLiz6Kc8lhNLlffnZk,1253
|
|
430
|
-
irie/apps/templates/prediction/xara-profile.html,sha256=
|
|
430
|
+
irie/apps/templates/prediction/xara-profile.html,sha256=pzH18TDgxLaFjhtB_XRmsN-IQTV_3qbDR2zjHNEgLTM,5019
|
|
431
431
|
irie/apps/templates/prediction/hazus/event.html,sha256=vcmQKfb-Gww5sd-kn6b2QL3llRrfQFv8mafVNNxTHrY,841
|
|
432
432
|
irie/apps/templates/prediction/hazus/history.html,sha256=zvnwP0gxSV9JNBbYACnKlMLB9iD7hGUbdkZ6kfJtBik,136
|
|
433
433
|
irie/apps/templates/prediction/hazus/history.js,sha256=blHRXzlEfMBCezPE-2dZCpt2rVgTiGHkYlY1t-clOE8,1101
|
|
434
|
-
irie/apps/templates/prediction/
|
|
434
|
+
irie/apps/templates/prediction/veux/navigator.html,sha256=Ev8iv-sQ2W4RpPY_yH_KsjNeKAN5PIiIuBWcZ1Orcew,4914
|
|
435
|
+
irie/apps/templates/prediction/veux/navigator.js,sha256=JWiDxupaqhtMLzOd82tuGoxoFdLpmZ3lgQ8-uIv6nbc,6181
|
|
435
436
|
irie/apps/templates/sensors/render-sensors.js,sha256=u05VQ7dBDhUMsTYs0_xgdltA2V5DAqenVKgYhAlBxw0,5570
|
|
436
437
|
irie/apps/templates/site/about.html,sha256=5hS5taj3XF-F8z-uIn53ZFXVHVS4apLRMg39OyvMvRs,610
|
|
437
438
|
irie/apps/templates/site/asset_map.html,sha256=rnTjeYMc8NESIo6Uuq8fgZ_xcKNuKdt4zcqoUTDI8Xg,387
|
|
438
439
|
irie/apps/templates/site/components-forms.html,sha256=FKOiR-3e9iw-xOHeaP2RB3O2gP10R-Mt8wdXfb1rDBQ,13865
|
|
439
|
-
irie/apps/templates/site/index.html,sha256=
|
|
440
|
+
irie/apps/templates/site/index.html,sha256=rDnQp8PxaLgVKGklG1DQie6y6vX9-9QpyT74pge82qE,17428
|
|
440
441
|
irie/apps/templates/site/json-form.html,sha256=ZrRWy5xnGBOqG51b6mdVGI0Io5X1z47DTFB9wW6ZQYA,1785
|
|
441
442
|
irie/apps/templates/site/page-400-sidebar.html,sha256=MimqQUyAgbgXG-oVJy1whHwrXmgf8NUgCqrwpUHCZ0s,1502
|
|
442
443
|
irie/apps/templates/site/page-400.html,sha256=2X9hGL7mCPGqgQUEr86vz6neO_Z--w0RjIzyQsGNBIE,981
|
|
@@ -496,8 +497,8 @@ irie/init/management/commands/make_asset.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
|
496
497
|
irie/pull/nbi.py,sha256=KpBjJ9GEU72Qk1t4bGN9cg0QBeVJ8k9XcI3Y1oSgIR0,11478
|
|
497
498
|
irie/rest/__main__.py,sha256=6Nf_-Rr9zGmMyp_wqCFDO7ls9QPnPd9UyUgN17rIGYw,3680
|
|
498
499
|
irie/usgs/__main__.py,sha256=HiSvPn5IW5IqRiCk1qRRq5dCy3-7iISw7v1P_w2rLrk,5049
|
|
499
|
-
irie-0.0.
|
|
500
|
-
irie-0.0.
|
|
501
|
-
irie-0.0.
|
|
502
|
-
irie-0.0.
|
|
503
|
-
irie-0.0.
|
|
500
|
+
irie-0.0.55.dist-info/METADATA,sha256=BYa5IFlEM_6ZrCuKczXPymD4NOtsrbdW5rOhKwpyI2U,3205
|
|
501
|
+
irie-0.0.55.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
502
|
+
irie-0.0.55.dist-info/entry_points.txt,sha256=A_3h9wPBGfxGQ78_MGa-nO6Z0foxOYeAnIE47jxEztg,44
|
|
503
|
+
irie-0.0.55.dist-info/top_level.txt,sha256=zVCxi5E2nkISZPzKq8VEhWe_dGuPcefLYV1tYqQdwlY,5
|
|
504
|
+
irie-0.0.55.dist-info/RECORD,,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
File without changes
|
|
File without changes
|