ivoryos 1.2.0b1__py3-none-any.whl → 1.2.1__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 ivoryos might be problematic. Click here for more details.
- ivoryos/__init__.py +22 -1
- ivoryos/config.py +1 -0
- ivoryos/routes/auth/auth.py +3 -1
- ivoryos/routes/data/data.py +2 -0
- ivoryos/routes/design/design.py +4 -4
- ivoryos/routes/library/library.py +4 -4
- ivoryos/utils/script_runner.py +1 -1
- ivoryos/utils/utils.py +2 -1
- ivoryos/version.py +1 -1
- {ivoryos-1.2.0b1.dist-info → ivoryos-1.2.1.dist-info}/METADATA +52 -31
- ivoryos-1.2.1.dist-info/RECORD +51 -0
- ivoryos/routes/api/api.py +0 -56
- ivoryos/routes/auth/templates/login.html +0 -25
- ivoryos/routes/auth/templates/signup.html +0 -32
- ivoryos/routes/control/templates/controllers.html +0 -166
- ivoryos/routes/control/templates/controllers_new.html +0 -112
- ivoryos/routes/data/templates/components/step_card.html +0 -13
- ivoryos/routes/data/templates/workflow_database.html +0 -109
- ivoryos/routes/data/templates/workflow_view.html +0 -130
- ivoryos/routes/design/templates/components/action_form.html +0 -53
- ivoryos/routes/design/templates/components/actions_panel.html +0 -25
- ivoryos/routes/design/templates/components/autofill_toggle.html +0 -10
- ivoryos/routes/design/templates/components/canvas.html +0 -5
- ivoryos/routes/design/templates/components/canvas_footer.html +0 -9
- ivoryos/routes/design/templates/components/canvas_header.html +0 -75
- ivoryos/routes/design/templates/components/canvas_main.html +0 -34
- ivoryos/routes/design/templates/components/deck_selector.html +0 -10
- ivoryos/routes/design/templates/components/edit_action_form.html +0 -38
- ivoryos/routes/design/templates/components/instruments_panel.html +0 -66
- ivoryos/routes/design/templates/components/modals/drop_modal.html +0 -17
- ivoryos/routes/design/templates/components/modals/json_modal.html +0 -22
- ivoryos/routes/design/templates/components/modals/new_script_modal.html +0 -17
- ivoryos/routes/design/templates/components/modals/rename_modal.html +0 -23
- ivoryos/routes/design/templates/components/modals/saveas_modal.html +0 -27
- ivoryos/routes/design/templates/components/modals.html +0 -6
- ivoryos/routes/design/templates/components/python_code_overlay.html +0 -39
- ivoryos/routes/design/templates/components/sidebar.html +0 -15
- ivoryos/routes/design/templates/components/text_to_code_panel.html +0 -20
- ivoryos/routes/design/templates/experiment_builder.html +0 -41
- ivoryos/routes/execute/templates/components/error_modal.html +0 -20
- ivoryos/routes/execute/templates/components/logging_panel.html +0 -31
- ivoryos/routes/execute/templates/components/progress_panel.html +0 -27
- ivoryos/routes/execute/templates/components/run_panel.html +0 -9
- ivoryos/routes/execute/templates/components/run_tabs.html +0 -17
- ivoryos/routes/execute/templates/components/tab_bayesian.html +0 -399
- ivoryos/routes/execute/templates/components/tab_configuration.html +0 -98
- ivoryos/routes/execute/templates/components/tab_repeat.html +0 -14
- ivoryos/routes/execute/templates/experiment_run.html +0 -294
- ivoryos/routes/library/templates/library.html +0 -91
- ivoryos/routes/main/templates/help.html +0 -141
- ivoryos/routes/main/templates/home.html +0 -103
- ivoryos/static/favicon.ico +0 -0
- ivoryos/static/gui_annotation/Slide1.png +0 -0
- ivoryos/static/gui_annotation/Slide2.PNG +0 -0
- ivoryos/static/js/action_handlers.js +0 -213
- ivoryos/static/js/db_delete.js +0 -23
- ivoryos/static/js/overlay.js +0 -12
- ivoryos/static/js/script_metadata.js +0 -39
- ivoryos/static/js/socket_handler.js +0 -125
- ivoryos/static/js/sortable_card.js +0 -24
- ivoryos/static/js/sortable_design.js +0 -138
- ivoryos/static/js/ui_state.js +0 -113
- ivoryos/static/logo.webp +0 -0
- ivoryos/static/style.css +0 -211
- ivoryos/templates/base.html +0 -157
- ivoryos-1.2.0b1.dist-info/RECORD +0 -105
- {ivoryos-1.2.0b1.dist-info → ivoryos-1.2.1.dist-info}/LICENSE +0 -0
- {ivoryos-1.2.0b1.dist-info → ivoryos-1.2.1.dist-info}/WHEEL +0 -0
- {ivoryos-1.2.0b1.dist-info → ivoryos-1.2.1.dist-info}/top_level.txt +0 -0
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
{# Canvas header component #}
|
|
2
|
-
<div class="d-flex align-items-center justify-content-between">
|
|
3
|
-
<!-- Left: Script Info -->
|
|
4
|
-
<div>
|
|
5
|
-
<span class="fw-bold">{{ script.name or "Untitled Script" }}</span>
|
|
6
|
-
<span class="badge bg-secondary">{{ script.status }}</span>
|
|
7
|
-
</div>
|
|
8
|
-
|
|
9
|
-
<!-- Center: Main Actions -->
|
|
10
|
-
<div class="btn-toolbar" role="toolbar">
|
|
11
|
-
<button class="btn btn-primary btn-sm me-1" data-bs-toggle="modal" data-bs-target="#newScriptModal">New</button>
|
|
12
|
-
<button class="btn btn-secondary btn-sm me-1" data-bs-toggle="modal" data-bs-target="#jsonModal">Import</button>
|
|
13
|
-
<a class="btn btn-secondary btn-sm me-1" href="{{url_for('design.design_files.download_json', filetype='script')}}">Export</a>
|
|
14
|
-
<button class="btn btn-secondary btn-sm me-1" data-bs-toggle="modal" data-bs-target="#saveasModal">Save as</button>
|
|
15
|
-
<div class="btn-group">
|
|
16
|
-
<button class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">More</button>
|
|
17
|
-
<ul class="dropdown-menu">
|
|
18
|
-
<li>
|
|
19
|
-
<button class="dropdown-item" data-bs-toggle="modal" data-bs-target="#renameModal">Rename</button>
|
|
20
|
-
</li>
|
|
21
|
-
{% if script.name %}
|
|
22
|
-
<li>
|
|
23
|
-
<a class="dropdown-item {{ 'disabled' if not script.name or script.status == "finalized" else '' }}"
|
|
24
|
-
href="#" data-post-url="{{ url_for('library.workflow_script', script_name=script.name) }}"
|
|
25
|
-
onclick="saveWorkflow(this); return false;">
|
|
26
|
-
Save
|
|
27
|
-
</a>
|
|
28
|
-
</li>
|
|
29
|
-
{% endif %}
|
|
30
|
-
{% if not script.status == 'finalized' %}
|
|
31
|
-
<li>
|
|
32
|
-
<a class="dropdown-item" onclick="lockScriptEditing()">Disable editing</a>
|
|
33
|
-
</li>
|
|
34
|
-
{% endif %}
|
|
35
|
-
</ul>
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
<!-- Tabs for Info/Prep/Experiment/Cleanup below header -->
|
|
41
|
-
<div class="d-flex align-items-center mt-2 justify-content-between">
|
|
42
|
-
<ul class="nav nav-tabs mb-0">
|
|
43
|
-
<li class="nav-item">
|
|
44
|
-
<a class="nav-link {{ 'active' if script.editing_type == 'prep' else '' }}"
|
|
45
|
-
href="#" onclick="setScriptPhase('prep')">
|
|
46
|
-
Prep
|
|
47
|
-
</a>
|
|
48
|
-
</li>
|
|
49
|
-
<li class="nav-item">
|
|
50
|
-
<a class="nav-link {{ 'active' if script.editing_type == 'script' else '' }}"
|
|
51
|
-
href="#" onclick="setScriptPhase('script')">
|
|
52
|
-
Experiment
|
|
53
|
-
</a>
|
|
54
|
-
</li>
|
|
55
|
-
<li class="nav-item">
|
|
56
|
-
<a class="nav-link {{ 'active' if script.editing_type == 'cleanup' else '' }}"
|
|
57
|
-
href="#" onclick="setScriptPhase('cleanup')">
|
|
58
|
-
Clean up
|
|
59
|
-
</a>
|
|
60
|
-
</li>
|
|
61
|
-
</ul>
|
|
62
|
-
|
|
63
|
-
<div class="d-flex align-items-center ms-auto">
|
|
64
|
-
<div class="form-check form-switch">
|
|
65
|
-
<input class="form-check-input" type="checkbox" id="showPythonCodeSwitch" name="show_code"
|
|
66
|
-
onchange="toggleCodeOverlay()" {% if session.get('show_code') %}checked{% endif %}>
|
|
67
|
-
<label class="form-check-label" for="showPythonCodeSwitch">Preview code</label>
|
|
68
|
-
</div>
|
|
69
|
-
{# <div class="form-check form-switch">#}
|
|
70
|
-
{# <input class="form-check-input" type="checkbox" id="toggleLineNumbers"#}
|
|
71
|
-
{# onchange="toggleLineNumbers()">#}
|
|
72
|
-
{# <label class="form-check-label" for="toggleLineNumbers">Show Line Numbers</label>#}
|
|
73
|
-
{# </div>#}
|
|
74
|
-
</div>
|
|
75
|
-
</div>
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
{# Action list component #}
|
|
2
|
-
|
|
3
|
-
<!-- partials/canvas_content.html -->
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
<div class="list-group" id="list" style="margin-top: 20px">
|
|
7
|
-
<ul class="reorder">
|
|
8
|
-
|
|
9
|
-
{% if script.editing_type == "prep" %}
|
|
10
|
-
{% set buttons = buttons_dict["prep"] or [] %}
|
|
11
|
-
{% elif script.editing_type == "script" %}
|
|
12
|
-
{% set buttons = buttons_dict["script"] or [] %}
|
|
13
|
-
{% elif script.editing_type == "cleanup" %}
|
|
14
|
-
{% set buttons = buttons_dict["cleanup"] or [] %}
|
|
15
|
-
{% endif %}
|
|
16
|
-
|
|
17
|
-
{% for button in buttons %}
|
|
18
|
-
<li id="{{ button['id'] }}" style="list-style-type: none;">
|
|
19
|
-
<span class="line-number d-none">{{ button['id'] }}.</span>
|
|
20
|
-
<a href="#" onclick="editAction('{{ button['uuid'] }}'); return false;" type="button" class="btn btn-light" style="{{ button['style'] }}">{{ button['label'] }}</a>
|
|
21
|
-
{% if not button["instrument"] in ["if","while","repeat"] %}
|
|
22
|
-
<button onclick="duplicateAction('{{ button['id'] }}')" type="button" class="btn btn-light"><span class="bi bi-copy"></span></button>
|
|
23
|
-
|
|
24
|
-
{% endif %}
|
|
25
|
-
<button onclick="deleteAction('{{ button['id'] }}')" type="button" class="btn btn-light">
|
|
26
|
-
<span class="bi bi-trash"></span>
|
|
27
|
-
</button>
|
|
28
|
-
</li>
|
|
29
|
-
{% endfor %}
|
|
30
|
-
</ul>
|
|
31
|
-
</div>
|
|
32
|
-
<div class="python-code-wrapper" id="python-code-wrapper">
|
|
33
|
-
{% include 'components/python_code_overlay.html' %}
|
|
34
|
-
</div>
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{# Deck selector component #}
|
|
2
|
-
<div class="input-group mb-3">
|
|
3
|
-
<select class="form-select" name="deck_name" id="deck_name" required onchange="changeDeck(this.value);">
|
|
4
|
-
<option {{ '' if 'pseudo_deck' in session else 'selected' }} disabled hidden style="overflow-wrap: break-word;" name="deck_name" id="deck_name" value=""> -- choose deck --</option>
|
|
5
|
-
{% for connection in history %}
|
|
6
|
-
<option {{ 'selected' if session['pseudo_deck']==connection else '' }} style="overflow-wrap: break-word;" name="deck_name" id="deck_name" value="{{connection}}">{{connection.split('.')[0]}}</option>
|
|
7
|
-
{% endfor %}
|
|
8
|
-
</select>
|
|
9
|
-
</div>
|
|
10
|
-
<hr>
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
{# Edit action form component #}
|
|
2
|
-
<div style="margin-bottom: 1vh;margin-top: 1vh;">
|
|
3
|
-
<a type="button"
|
|
4
|
-
data-get-url="{{ url_for('design.get_operation_sidebar') }}"
|
|
5
|
-
onclick="updateInstrumentPanel(this)">
|
|
6
|
-
<i class="bi bi-arrow-return-left"></i>
|
|
7
|
-
</a>
|
|
8
|
-
</div>
|
|
9
|
-
<h5> {{ action['action'] | format_name }} </h5>
|
|
10
|
-
<form role="form" method='POST' name="{{instrument}}"
|
|
11
|
-
action="{{ url_for('design.design_steps.get_step', uuid=action['uuid']) }}"
|
|
12
|
-
onsubmit="submitEditForm(event); return false;">
|
|
13
|
-
{% if not action['args'] == None %}
|
|
14
|
-
<div class="form-group">
|
|
15
|
-
{% if not action['args'].__class__.__name__ == 'dict' %}
|
|
16
|
-
<div class="input-group mb-3">
|
|
17
|
-
<label class="input-group-text">{{ action['action'] }}</label>
|
|
18
|
-
<input class="form-control" type="text" id="arg" name="arg"
|
|
19
|
-
placeholder="{{ action['arg_types']}}" value="{{ action['args'] }}"
|
|
20
|
-
aria-labelledby="variableHelpBlock">
|
|
21
|
-
</div>
|
|
22
|
-
{% else %}
|
|
23
|
-
{{ forms.hidden_tag() }}
|
|
24
|
-
{% for field in forms %}
|
|
25
|
-
{% if field.type not in ['CSRFTokenField'] %}
|
|
26
|
-
<div class="input-group mb-3">
|
|
27
|
-
<label class="input-group-text">{{ field.label.text }}</label>
|
|
28
|
-
{{ field(class="form-control") }}
|
|
29
|
-
<div class="form-text">{{ field.description }} </div>
|
|
30
|
-
</div>
|
|
31
|
-
{% endif %}
|
|
32
|
-
{% endfor %}
|
|
33
|
-
{% endif %}
|
|
34
|
-
</div>
|
|
35
|
-
{% endif %}
|
|
36
|
-
<button type="submit" class="btn btn-primary">Save</button>
|
|
37
|
-
<button type="button" class="btn btn-primary" id="back">Back</button>
|
|
38
|
-
</form>
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
{# Operations panel component #}
|
|
2
|
-
<div style="margin-bottom: 4vh;"></div>
|
|
3
|
-
<div class="accordion accordion-flush">
|
|
4
|
-
<div class="accordion-item design-control">
|
|
5
|
-
<h5 class="accordion-header">
|
|
6
|
-
<button class="accordion-button" data-bs-toggle="collapse" data-bs-target="#flow" role="button" aria-expanded="false" aria-controls="collapseExample">
|
|
7
|
-
Flow control
|
|
8
|
-
</button>
|
|
9
|
-
</h5>
|
|
10
|
-
<div class="accordion-collapse collapse show" id="flow">
|
|
11
|
-
<ul class="list-group">
|
|
12
|
-
<button class="list-group-item list-group-item-action"
|
|
13
|
-
type="button"
|
|
14
|
-
name="device"
|
|
15
|
-
value="flow_control"
|
|
16
|
-
data-get-url="{{ url_for('design.get_operation_sidebar', instrument='flow_control') }}"
|
|
17
|
-
onclick="updateInstrumentPanel(this)">
|
|
18
|
-
Flow control
|
|
19
|
-
</button>
|
|
20
|
-
</ul>
|
|
21
|
-
</div>
|
|
22
|
-
<h5 class="accordion-header">
|
|
23
|
-
<button class="accordion-button" data-bs-toggle="collapse" data-bs-target="#deck" role="button" aria-expanded="false" aria-controls="collapseExample">
|
|
24
|
-
Instruments
|
|
25
|
-
</button>
|
|
26
|
-
</h5>
|
|
27
|
-
<div class="accordion-collapse collapse show" id="deck">
|
|
28
|
-
<ul class="list-group">
|
|
29
|
-
{% for instrument in defined_variables %}
|
|
30
|
-
<button class="list-group-item list-group-item-action"
|
|
31
|
-
type="button"
|
|
32
|
-
name="device"
|
|
33
|
-
value="{{instrument}}"
|
|
34
|
-
data-get-url="{{ url_for('design.get_operation_sidebar', instrument=instrument) }}"
|
|
35
|
-
onclick="updateInstrumentPanel(this)">
|
|
36
|
-
{{ instrument | format_name }}
|
|
37
|
-
</button>
|
|
38
|
-
{% endfor %}
|
|
39
|
-
</ul>
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
42
|
-
|
|
43
|
-
{% if local_variables %}
|
|
44
|
-
<div class="accordion-item design-control">
|
|
45
|
-
<h5 class="accordion-header">
|
|
46
|
-
<button class="accordion-button" data-bs-toggle="collapse" data-bs-target="#local" role="button" aria-expanded="false" aria-controls="collapseExample">
|
|
47
|
-
Temp instruments
|
|
48
|
-
</button>
|
|
49
|
-
</h5>
|
|
50
|
-
<div class="accordion-collapse collapse show" id="local">
|
|
51
|
-
<ul class="list-group">
|
|
52
|
-
{% for instrument in local_variables %}
|
|
53
|
-
<button class="list-group-item list-group-item-action"
|
|
54
|
-
type="button"
|
|
55
|
-
name="device"
|
|
56
|
-
value="{{instrument}}"
|
|
57
|
-
data-get-url="{{ url_for('design.get_operation_sidebar', instrument=instrument) }}"
|
|
58
|
-
onclick="updateInstrumentPanel(this)">
|
|
59
|
-
{{instrument}}
|
|
60
|
-
</button>
|
|
61
|
-
{% endfor%}
|
|
62
|
-
</ul>
|
|
63
|
-
</div>
|
|
64
|
-
</div>
|
|
65
|
-
{% endif %}
|
|
66
|
-
</div>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<div class="modal fade" id="dropModal" tabindex="-1" role="dialog">
|
|
2
|
-
<div class="modal-dialog" role="document">
|
|
3
|
-
<div class="modal-content">
|
|
4
|
-
<div class="modal-header">
|
|
5
|
-
<h5 class="modal-title" id="dropModalLabel">Configure Action</h5>
|
|
6
|
-
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
7
|
-
</div>
|
|
8
|
-
<div class="modal-body">
|
|
9
|
-
<p>Drop Position ID: <strong id="modalDropTarget"></strong></p>
|
|
10
|
-
<div id="modalFormFields"></div>
|
|
11
|
-
</div>
|
|
12
|
-
<div class="modal-footer">
|
|
13
|
-
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
|
|
14
|
-
</div>
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{# JSON import modal component #}
|
|
2
|
-
<div class="modal fade" id="jsonModal" tabindex="-1" aria-labelledby="jsonModal" aria-hidden="true" >
|
|
3
|
-
<div class="modal-dialog">
|
|
4
|
-
<div class="modal-content">
|
|
5
|
-
<div class="modal-header">
|
|
6
|
-
<h1 class="modal-title fs-5" id="jsonModal">Import from JSON</h1>
|
|
7
|
-
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
8
|
-
</div>
|
|
9
|
-
<form method="POST" action="{{ url_for('design.design_files.load_json') }}" enctype="multipart/form-data">
|
|
10
|
-
<div class="modal-body">
|
|
11
|
-
<div class="input-group mb-3">
|
|
12
|
-
<input class="form-control" type="file" name="file" required="required">
|
|
13
|
-
</div>
|
|
14
|
-
</div>
|
|
15
|
-
<div class="modal-footer">
|
|
16
|
-
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"> Close </button>
|
|
17
|
-
<button type="submit" class="btn btn-primary"> Upload </button>
|
|
18
|
-
</div>
|
|
19
|
-
</form>
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
</div>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{# New script modal component #}
|
|
2
|
-
<div class="modal fade" id="newScriptModal" tabindex="-1" aria-labelledby="newScriptModalLabel" aria-hidden="true">
|
|
3
|
-
<div class="modal-dialog">
|
|
4
|
-
<div class="modal-content">
|
|
5
|
-
<div class="modal-header">
|
|
6
|
-
<h1 class="modal-title fs-5" id="newScriptModalLabel">Save your current editing!</h1>
|
|
7
|
-
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
8
|
-
</div>
|
|
9
|
-
<div class="modal-body">
|
|
10
|
-
The current editing won't be saved. Are you sure you want to proceed?
|
|
11
|
-
</div>
|
|
12
|
-
<div class="modal-footer">
|
|
13
|
-
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"> Continue editing </button>
|
|
14
|
-
<button class="btn btn-danger" onclick="clearDraft()">Already saved, clear all</button> </div>
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{# Rename modal component #}
|
|
2
|
-
<div class="modal fade" id="renameModal" tabindex="-1" aria-labelledby="renameModal" aria-hidden="true" >
|
|
3
|
-
<div class="modal-dialog">
|
|
4
|
-
<div class="modal-content">
|
|
5
|
-
<div class="modal-header">
|
|
6
|
-
<h1 class="modal-title fs-5" id="renameModal">Rename your script</h1>
|
|
7
|
-
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
8
|
-
</div>
|
|
9
|
-
<form name="run_name" onsubmit="editScriptName(event)">
|
|
10
|
-
<div class="modal-body">
|
|
11
|
-
<div class="input-group mb-3">
|
|
12
|
-
<label class="input-group-text" for="new-name">Run Name</label>
|
|
13
|
-
<input class="form-control" type="text" name="new-name" id="new-name" value="{{ script['name'] }}" required="required">
|
|
14
|
-
</div>
|
|
15
|
-
</div>
|
|
16
|
-
<div class="modal-footer">
|
|
17
|
-
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"> Close </button>
|
|
18
|
-
<button type="submit" class="btn btn-primary"> Save</button>
|
|
19
|
-
</div>
|
|
20
|
-
</form>
|
|
21
|
-
</div>
|
|
22
|
-
</div>
|
|
23
|
-
</div>
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{# Save as modal component #}
|
|
2
|
-
<div class="modal fade" id="saveasModal" tabindex="-1" aria-labelledby="saveasModal" aria-hidden="true" >
|
|
3
|
-
<div class="modal-dialog">
|
|
4
|
-
<div class="modal-content">
|
|
5
|
-
<div class="modal-header">
|
|
6
|
-
<h1 class="modal-title fs-5" id="saveasModal">Save your script as </h1>
|
|
7
|
-
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
8
|
-
</div>
|
|
9
|
-
<form method="POST" name="save-as" action="{{ url_for('library.save_as') }}">
|
|
10
|
-
<div class="modal-body">
|
|
11
|
-
<div class="input-group mb-3">
|
|
12
|
-
<label class="input-group-text" for="run_name">Run Name</label>
|
|
13
|
-
<input class="form-control" type="text" name="run_name" id="run_name" placeholder="{{script['name']}}" required="required">
|
|
14
|
-
</div>
|
|
15
|
-
<div class="form-check form-switch">
|
|
16
|
-
<input class="form-check-input" type="checkbox" name="register_workflow" id="register_workflow">
|
|
17
|
-
<label class="input-group-label" for="register_workflow">Register this workflow</label>
|
|
18
|
-
</div>
|
|
19
|
-
</div>
|
|
20
|
-
<div class="modal-footer">
|
|
21
|
-
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"> Close </button>
|
|
22
|
-
<button type="submit" class="btn btn-primary" > Save </button>
|
|
23
|
-
</div>
|
|
24
|
-
</form>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{# Modals component for experiment builder #}
|
|
2
|
-
{% include 'components/modals/new_script_modal.html' %}
|
|
3
|
-
{% include 'components/modals/saveas_modal.html' %}
|
|
4
|
-
{% include 'components/modals/rename_modal.html' %}
|
|
5
|
-
{% include 'components/modals/json_modal.html' %}
|
|
6
|
-
{% include 'components/modals/drop_modal.html' %}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
{# Python code overlay component #}
|
|
2
|
-
{#{% if session.get('show_code') %}#}
|
|
3
|
-
<style>
|
|
4
|
-
.code-overlay {
|
|
5
|
-
position: fixed;
|
|
6
|
-
right: 0;
|
|
7
|
-
top: 180px;
|
|
8
|
-
height: 100vh;
|
|
9
|
-
width: 400px;
|
|
10
|
-
z-index: 1000;
|
|
11
|
-
transition: transform 0.3s ease;
|
|
12
|
-
transform: translateX(100%);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
.code-overlay.show {
|
|
16
|
-
transform: translateX(0);
|
|
17
|
-
}
|
|
18
|
-
</style>
|
|
19
|
-
<script>hljs.highlightAll();</script>
|
|
20
|
-
{% if session.get('show_code') %}
|
|
21
|
-
<div id="pythonCodeOverlay" class="code-overlay bg-light border-start show">
|
|
22
|
-
{% else %}
|
|
23
|
-
<div id="pythonCodeOverlay" class="code-overlay bg-light border-start">
|
|
24
|
-
{% endif %}
|
|
25
|
-
<div class="overlay-header d-flex justify-content-between align-items-center px-3 py-2 border-bottom">
|
|
26
|
-
<strong>Python Code</strong>
|
|
27
|
-
<button class="btn btn-sm btn-outline-secondary" onclick="toggleCodeOverlay()">
|
|
28
|
-
<i class="bi bi-x-lg"></i>
|
|
29
|
-
</button>
|
|
30
|
-
</div>
|
|
31
|
-
<div class="overlay-content p-3">
|
|
32
|
-
{% for stype, script in session.get('python_code', {}).items() %}
|
|
33
|
-
<pre><code class="language-python">{{ script }}</code></pre>
|
|
34
|
-
{% endfor %}
|
|
35
|
-
<a href="{{ url_for('design.design_files.download_python', filetype='python') }}">
|
|
36
|
-
Download <i class="bi bi-download"></i>
|
|
37
|
-
</a>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{# Sidebar component for experiment builder #}
|
|
2
|
-
<div class="instrument-panel" id="instrument-panel">
|
|
3
|
-
{% if instrument %}
|
|
4
|
-
<div class="instrument-methods" id="instrument-methods">
|
|
5
|
-
{% include 'components/actions_panel.html' %}
|
|
6
|
-
</div>
|
|
7
|
-
{% else %}
|
|
8
|
-
{# select deck if this is online#}
|
|
9
|
-
{% if off_line %}
|
|
10
|
-
{% include 'components/deck_selector.html' %}
|
|
11
|
-
{% endif %}
|
|
12
|
-
|
|
13
|
-
{% include 'components/instruments_panel.html' %}
|
|
14
|
-
{% endif %}
|
|
15
|
-
</div>
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{# Text-to-code panel component #}
|
|
2
|
-
<div class="accordion-item text-to-code">
|
|
3
|
-
<h2 class="accordion-header">
|
|
4
|
-
<button class="accordion-button text-to-code" type="button" data-bs-toggle="collapse" data-bs-target="#text-to-code" aria-expanded="false" aria-controls="collapseExample">
|
|
5
|
-
Text-to-Code
|
|
6
|
-
</button>
|
|
7
|
-
</h2>
|
|
8
|
-
<div id="text-to-code" class="accordion-collapse collapse show" data-bs-parent="#accordionActions">
|
|
9
|
-
<div class="accordion-body">
|
|
10
|
-
<form role="form" method='POST' name="generate" id="generate" action="{{url_for('design.generate_code')}}">
|
|
11
|
-
<input type="hidden" id="instrument" name="instrument" value="{{instrument}}">
|
|
12
|
-
<textarea class="form-control" id="prompt" name="prompt" rows="6" aria-describedby="promptHelpBlock">{{ session['prompt'][instrument] if instrument in session['prompt'] else '' }}</textarea>
|
|
13
|
-
<div id="promptHelpBlock" class="form-text">
|
|
14
|
-
This will overwrite current design.
|
|
15
|
-
</div>
|
|
16
|
-
<button type="submit" class="btn btn-dark" id="gen" name="gen">Generate</button>
|
|
17
|
-
</form>
|
|
18
|
-
</div>
|
|
19
|
-
</div>
|
|
20
|
-
</div>
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
{% extends 'base.html' %}
|
|
2
|
-
{% block title %}IvoryOS | Design{% endblock %}
|
|
3
|
-
|
|
4
|
-
{% block body %}
|
|
5
|
-
{# overlay block for text-to-code gen #}
|
|
6
|
-
|
|
7
|
-
<div id="overlay" class="overlay">
|
|
8
|
-
<div>
|
|
9
|
-
<h3 id="overlay-text">Generating design, please wait...</h3>
|
|
10
|
-
<div class="spinner-border" role="status"></div>
|
|
11
|
-
</div>
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
<div class="row">
|
|
15
|
-
<div class="col-md-3 scroll-column" id="sidebar-wrapper">
|
|
16
|
-
{% include 'components/sidebar.html' %}
|
|
17
|
-
</div>
|
|
18
|
-
<div class="col-md-9 scroll-column" id="canvas-wrapper">
|
|
19
|
-
{% include 'components/canvas.html' %}
|
|
20
|
-
</div>
|
|
21
|
-
|
|
22
|
-
</div>
|
|
23
|
-
|
|
24
|
-
{# Include all modals #}
|
|
25
|
-
{% include 'components/modals.html' %}
|
|
26
|
-
|
|
27
|
-
{# Include all scripts #}
|
|
28
|
-
<script>
|
|
29
|
-
const updateListUrl = "{{ url_for('design.design_steps.update_list') }}";
|
|
30
|
-
const scriptUIStateUrl = "{{ url_for('design.update_ui_state') }}";
|
|
31
|
-
const scriptMetaUrl = "{{ url_for('design.update_script_meta') }}";
|
|
32
|
-
const scriptStepUrl = `{{ url_for('design.design_steps.get_step', uuid=0) }}`;
|
|
33
|
-
const scriptStepDupUrl = `{{ url_for('design.design_steps.duplicate_action', uuid=0) }}`;
|
|
34
|
-
const scriptDeleteUrl = "{{ url_for('design.clear_draft') }}";
|
|
35
|
-
</script>
|
|
36
|
-
<script src="{{ url_for('static', filename='js/sortable_design.js') }}"></script>
|
|
37
|
-
<script src="{{ url_for('static', filename='js/action_handlers.js') }}"></script>
|
|
38
|
-
<script src="{{ url_for('static', filename='js/script_metadata.js') }}"></script>
|
|
39
|
-
<script src="{{ url_for('static', filename='js/ui_state.js') }}"></script>
|
|
40
|
-
|
|
41
|
-
{% endblock %}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{# Error modal component for experiment run #}
|
|
2
|
-
<div class="modal fade" id="error-modal" tabindex="-1" aria-labelledby="errorModalLabel" aria-hidden="true">
|
|
3
|
-
<div class="modal-dialog">
|
|
4
|
-
<div class="modal-content">
|
|
5
|
-
<div class="modal-header">
|
|
6
|
-
<h5 class="modal-title" id="errorModalLabel">Error Detected</h5>
|
|
7
|
-
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
8
|
-
</div>
|
|
9
|
-
<div class="modal-body">
|
|
10
|
-
<p id="error-message">An error has occurred.</p>
|
|
11
|
-
<p>Do you want to continue execution or stop?</p>
|
|
12
|
-
</div>
|
|
13
|
-
<div class="modal-footer">
|
|
14
|
-
<button type="button" class="btn btn-primary" id="retry-btn" data-bs-dismiss="modal">Rerun Current Step</button>
|
|
15
|
-
<button type="button" class="btn btn-success" id="continue-btn" data-bs-dismiss="modal">Continue</button>
|
|
16
|
-
<button type="button" class="btn btn-danger" id="stop-btn" data-bs-dismiss="modal">Stop Execution</button>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
</div>
|
|
20
|
-
</div>
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{# Logging panel component for experiment run #}
|
|
2
|
-
<div class="col-lg-6 col-sm-12 logging-panel">
|
|
3
|
-
<p>
|
|
4
|
-
<div class="p d-flex justify-content-between align-items-center">
|
|
5
|
-
<h5>Progress:</h5>
|
|
6
|
-
<div class="d-flex gap-2 ms-auto">
|
|
7
|
-
<button id="pause-resume" class="btn btn-info text-white" data-bs-toggle="tooltip" title="Pause execution">
|
|
8
|
-
{% if pause_status %}
|
|
9
|
-
<i class="bi bi-play-circle"></i>
|
|
10
|
-
{% else %}
|
|
11
|
-
<i class="bi bi-pause-circle"></i>
|
|
12
|
-
{% endif %}
|
|
13
|
-
</button>
|
|
14
|
-
<button id="abort-current" class="btn btn-danger text-white" data-bs-toggle="tooltip" title="Stop execution after current step">
|
|
15
|
-
<i class="bi bi-stop-circle"></i>
|
|
16
|
-
</button>
|
|
17
|
-
<button id="abort-pending" class="btn btn-warning text-white" data-bs-toggle="tooltip" title="Stop execution after current iteration">
|
|
18
|
-
<i class="bi bi-hourglass-split"></i>
|
|
19
|
-
</button>
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
<div class="text-muted mt-2">
|
|
23
|
-
<small><strong>Note:</strong> The current step cannot be paused or stopped until it completes. </small>
|
|
24
|
-
</div>
|
|
25
|
-
|
|
26
|
-
<div class="progress" role="progressbar" aria-label="Animated striped example" aria-valuenow="10" aria-valuemin="0" aria-valuemax="100">
|
|
27
|
-
<div id="progress-bar-inner" class="progress-bar progress-bar-striped progress-bar-animated"></div>
|
|
28
|
-
</div>
|
|
29
|
-
<p><h5>Log:</h5></p>
|
|
30
|
-
<div id="logging-panel"></div>
|
|
31
|
-
</div>
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{# Progress panel component for experiment run #}
|
|
2
|
-
<div class="col-lg-6 col-sm-12" id="code-panel" style="{{ '' if pause_status else 'display: none;'}}">
|
|
3
|
-
<p>
|
|
4
|
-
<h5>Progress:</h5>
|
|
5
|
-
{% if "prep" in line_collection.keys() %}
|
|
6
|
-
{% set stype = "prep" %}
|
|
7
|
-
<h6>Preparation:</h6>
|
|
8
|
-
{% for code in line_collection["prep"] %}
|
|
9
|
-
<pre style="margin: 0; padding: 0; line-height: 1;"><code class="python" id="{{ stype }}-{{ loop.index0 }}" >{{code}}</code></pre>
|
|
10
|
-
{% endfor %}
|
|
11
|
-
{% endif %}
|
|
12
|
-
{% if "script" in line_collection.keys() %}
|
|
13
|
-
{% set stype = "script" %}
|
|
14
|
-
<h6>Experiment:</h6>
|
|
15
|
-
{% for code in line_collection["script"] %}
|
|
16
|
-
<pre style="margin: 0; padding: 0; line-height: 1;"><code class="python" id="{{ stype }}-{{ loop.index0 }}" >{{code}}</code></pre>
|
|
17
|
-
{% endfor %}
|
|
18
|
-
{% endif %}
|
|
19
|
-
{% if "cleanup" in line_collection.keys() %}
|
|
20
|
-
{% set stype = "cleanup" %}
|
|
21
|
-
<h6>Cleanup:</h6>
|
|
22
|
-
{% for code in line_collection["cleanup"] %}
|
|
23
|
-
<pre style="margin: 0; padding: 0; line-height: 1;"><code class="python" id="{{ stype }}-{{ loop.index0 }}" >{{code}}</code></pre>
|
|
24
|
-
{% endfor %}
|
|
25
|
-
{% endif %}
|
|
26
|
-
</p>
|
|
27
|
-
</div>
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
{# Run panel component for experiment run #}
|
|
2
|
-
{% if script['script'] or script['prep'] or script['cleanup'] %}
|
|
3
|
-
<div class="col-lg-6 col-sm-12" id="run-panel" style="{{ 'display: none;' if pause_status else '' }}">
|
|
4
|
-
{% include 'components/run_tabs.html' %}
|
|
5
|
-
</div>
|
|
6
|
-
{% else %}
|
|
7
|
-
<div class="col-lg-6 col-sm-12" id="placeholder-panel">
|
|
8
|
-
</div>
|
|
9
|
-
{% endif %}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{# Run tabs component for experiment run #}
|
|
2
|
-
<ul class="nav nav-tabs" id="myTabs" role="tablist">
|
|
3
|
-
<li class="nav-item" role="presentation">
|
|
4
|
-
<a class="nav-link {{ 'disabled' if config_list else '' }} {{ 'active' if not config_list else '' }}" id="tab1-tab" data-bs-toggle="tab" href="#tab1" role="tab" aria-controls="tab1" aria-selected="false">Repeat</a>
|
|
5
|
-
</li>
|
|
6
|
-
<li class="nav-item" role="presentation">
|
|
7
|
-
<a class="nav-link {{ 'disabled' if not config_list else '' }} {{ 'active' if config_list else '' }}" id="tab2-tab" data-bs-toggle="tab" href="#tab2" role="tab" aria-controls="tab2" aria-selected="false">Configuration</a>
|
|
8
|
-
</li>
|
|
9
|
-
<li class="nav-item" role="presentation">
|
|
10
|
-
<a class="nav-link {{ 'disabled' if not config_list or not return_list else '' }}" id="tab3-tab" data-bs-toggle="tab" href="#tab3" role="tab" aria-controls="tab3" aria-selected="false">Bayesian Optimization</a>
|
|
11
|
-
</li>
|
|
12
|
-
</ul>
|
|
13
|
-
<div class="tab-content" id="myTabsContent">
|
|
14
|
-
{% include 'components/tab_repeat.html' %}
|
|
15
|
-
{% include 'components/tab_configuration.html' %}
|
|
16
|
-
{% include 'components/tab_bayesian.html' %}
|
|
17
|
-
</div>
|