e2xauthoring 0.3.0.dev4__tar.gz → 0.3.2__tar.gz
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.
- e2xauthoring-0.3.2/.github/workflows/ruff.yml +16 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/PKG-INFO +2 -2
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/conf.py +1 -1
- e2xauthoring-0.3.2/e2xauthoring/__version__.py +1 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/app/handlers/apihandlers.py +1 -3
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/app/handlers/base.py +10 -13
- e2xauthoring-0.3.2/e2xauthoring/app/templates/authoring/asset-manifest.json +10 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/app/templates/authoring/index.html +1 -1
- e2xauthoring-0.3.2/e2xauthoring/app/templates/authoring/static/js/main.2835591d.js +3 -0
- e2xauthoring-0.3.2/e2xauthoring/app/templates/authoring/static/js/main.2835591d.js.map +1 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/git/base.py +4 -12
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/git/gitrepo.py +1 -3
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/assignmentmanager.py +1 -3
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/base.py +4 -6
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presetmanager.py +8 -18
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/template/Group Info.ipynb +2 -2
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/template/Student Info.ipynb +1 -1
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/taskmanager.py +1 -3
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/worksheetmanager.py +1 -3
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/models/pool.py +9 -9
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/models/poolcollection.py +1 -3
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/models/task.py +31 -29
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/models/template.py +5 -14
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/models/templatecollection.py +2 -6
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/preprocessors/addtaskheader.py +3 -9
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/preprocessors/copyfiles.py +1 -3
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/preprocessors/filltemplate.py +1 -3
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/preprocessors/generatetaskids.py +2 -6
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/preprocessors/makeexercise.py +2 -6
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/preprocessors/removeexercise.py +1 -3
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/utils/pathutils.py +1 -3
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/package-lock.json +6 -6
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/package.json +1 -1
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/pyproject.toml +4 -3
- e2xauthoring-0.3.0.dev4/.github/workflows/black.yml +0 -10
- e2xauthoring-0.3.0.dev4/.github/workflows/ruff.yml +0 -8
- e2xauthoring-0.3.0.dev4/.github/workflows/sonarcloud.yml +0 -68
- e2xauthoring-0.3.0.dev4/e2xauthoring/__version__.py +0 -1
- e2xauthoring-0.3.0.dev4/e2xauthoring/app/templates/authoring/asset-manifest.json +0 -10
- e2xauthoring-0.3.0.dev4/e2xauthoring/app/templates/authoring/static/js/main.5bf82181.js +0 -3
- e2xauthoring-0.3.0.dev4/e2xauthoring/app/templates/authoring/static/js/main.5bf82181.js.map +0 -1
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/.gitignore +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/.pre-commit-config.yaml +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/.readthedocs.yaml +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/LICENSE +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/MANIFEST.in +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/README.md +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/Makefile +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/make.bat +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/requirements.txt +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/index.rst +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/setup/index.rst +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/setup/installation.rst +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/add_files.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/add_question.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/add_tasks.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/assignment_worksheets.drawio +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/assignment_worksheets.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/assignments.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/attachment_editor.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/autograded_code_question.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/choose_tasks_1.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/diagram_question.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/diagram_question_rendered.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/freetext_question.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/make_worksheet.drawio +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/make_worksheet.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/manual_code_question.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/multiple_choice_question.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/multiple_choice_question_rendered.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/new_task.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/sample_template.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/sample_template_variables.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/single_choice_question.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/single_choice_question_rendered.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/tasks.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/templates.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/upload_question_rendered.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/worksheet.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/worksheet_options.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/worksheets.drawio +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/img/worksheets.png +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/index.rst +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/pool.rst +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/questions.rst +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/task.rst +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/template.rst +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/docs/source/user_docs/worksheet.rst +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/__init__.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/app/__init__.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/app/authoring.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/app/handlers/handlers.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/app/templates/authoring/static/favicon.ico +0 -0
- /e2xauthoring-0.3.0.dev4/e2xauthoring/app/templates/authoring/static/js/main.5bf82181.js.LICENSE.txt → /e2xauthoring-0.3.2/e2xauthoring/app/templates/authoring/static/js/main.2835591d.js.LICENSE.txt +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/assets/.gitignore +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/converters/__init__.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/converters/converter.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/converters/generateexercise.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/dataclasses/__init__.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/dataclasses/gitstatus.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/dataclasses/jsondataclass.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/dataclasses/messages.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/dataclasses/pool.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/dataclasses/task.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/dataclasses/template.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/git/__init__.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/git/factory.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/git/utils.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/__init__.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/questions/Code (Autograded).ipynb +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/questions/Code (Manual).ipynb +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/questions/Diagram.ipynb +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/questions/Freetext.ipynb +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/questions/Multiple Choice.ipynb +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/questions/Single Choice.ipynb +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/questions/Upload Files.ipynb +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/template/Footer.ipynb +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/presets/template/Header.ipynb +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/taskpoolmanager.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/managers/templatemanager.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/models/__init__.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/patterns/__init__.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/patterns/observer.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/preprocessors/__init__.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/preprocessors/copynotebooks.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/preprocessors/preprocessor.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/utils/__init__.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/utils/notebookvariableextractor.py +0 -0
- {e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/lerna.json +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: Lint and format with Ruff
|
|
2
|
+
on: [ push, pull_request ]
|
|
3
|
+
jobs:
|
|
4
|
+
ruff:
|
|
5
|
+
runs-on: ubuntu-latest
|
|
6
|
+
steps:
|
|
7
|
+
- uses: actions/checkout@v7
|
|
8
|
+
- name: Check formatting
|
|
9
|
+
uses: astral-sh/ruff-action@v4.1.0
|
|
10
|
+
with:
|
|
11
|
+
args: "format --check --diff"
|
|
12
|
+
- name: Lint
|
|
13
|
+
if: ${{ !cancelled() }}
|
|
14
|
+
uses: astral-sh/ruff-action@v3
|
|
15
|
+
with:
|
|
16
|
+
args: "check --output-format=github"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: e2xauthoring
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Authoring app for e2xgrader
|
|
5
5
|
Project-URL: Source, https://github.com/Digiklausur/e2xauthoring
|
|
6
6
|
Project-URL: Documentation, https://e2xauthoring.readthedocs.io/en/latest/
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
project = "e2xauthoring"
|
|
10
10
|
copyright = "2023, Tim Metzler"
|
|
11
11
|
author = "Tim Metzler"
|
|
12
|
-
release = "0.3.
|
|
12
|
+
release = "0.3.2"
|
|
13
13
|
github_project_url = "https://github.com/Digiklausur/e2xauthoring"
|
|
14
14
|
|
|
15
15
|
# -- General configuration ---------------------------------------------------
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.3.2"
|
|
@@ -73,9 +73,7 @@ default_handlers = [
|
|
|
73
73
|
manager_cls=TaskManager,
|
|
74
74
|
actions=dict(
|
|
75
75
|
delete=dict(default="remove", actions=["remove"]),
|
|
76
|
-
get=dict(
|
|
77
|
-
default="get", actions=["get", "list", "list_all", "git_diff"]
|
|
78
|
-
),
|
|
76
|
+
get=dict(default="get", actions=["get", "list", "list_all", "git_diff"]),
|
|
79
77
|
post=dict(default="create", actions=["create"]),
|
|
80
78
|
put=dict(actions=["copy", "rename", "commit"]),
|
|
81
79
|
),
|
|
@@ -54,12 +54,10 @@ class ApiManageHandler(E2xApiHandler):
|
|
|
54
54
|
if request_type in allowed_actions:
|
|
55
55
|
actions = allowed_actions[request_type].get("actions", [])
|
|
56
56
|
for action in actions:
|
|
57
|
-
assert hasattr(
|
|
58
|
-
|
|
59
|
-
)
|
|
60
|
-
action_dict["default"] = allowed_actions[request_type].get(
|
|
61
|
-
"default", None
|
|
62
|
-
)
|
|
57
|
+
assert hasattr(self.__manager, action), (
|
|
58
|
+
f"The manager class does not provide an action called {action}."
|
|
59
|
+
)
|
|
60
|
+
action_dict["default"] = allowed_actions[request_type].get("default", None)
|
|
63
61
|
action_dict["actions"].extend(actions)
|
|
64
62
|
|
|
65
63
|
def extract_arguments(self, method: str):
|
|
@@ -73,9 +71,9 @@ class ApiManageHandler(E2xApiHandler):
|
|
|
73
71
|
return params
|
|
74
72
|
|
|
75
73
|
async def perform_action(self, action: str, allowed_actions: List[str]):
|
|
76
|
-
assert (
|
|
77
|
-
action is not
|
|
78
|
-
)
|
|
74
|
+
assert action is not None and action in allowed_actions, (
|
|
75
|
+
f"Action {action} is not a valid action."
|
|
76
|
+
)
|
|
79
77
|
method = getattr(self.__manager, action)
|
|
80
78
|
arguments = self.extract_arguments(method)
|
|
81
79
|
|
|
@@ -88,16 +86,15 @@ class ApiManageHandler(E2xApiHandler):
|
|
|
88
86
|
@status_msg
|
|
89
87
|
async def handle_request(self, request_type: str):
|
|
90
88
|
action = self.get_argument(
|
|
91
|
-
"action",
|
|
89
|
+
"action",
|
|
90
|
+
default=None, # self.__allowed_actions[request_type]["default"]
|
|
92
91
|
)
|
|
93
92
|
if action is None:
|
|
94
93
|
action = (self.get_json_body() or dict()).get(
|
|
95
94
|
"action", self.__allowed_actions[request_type]["default"]
|
|
96
95
|
)
|
|
97
96
|
|
|
98
|
-
return await self.perform_action(
|
|
99
|
-
action, self.__allowed_actions[request_type]["actions"]
|
|
100
|
-
)
|
|
97
|
+
return await self.perform_action(action, self.__allowed_actions[request_type]["actions"])
|
|
101
98
|
|
|
102
99
|
@web.authenticated
|
|
103
100
|
@check_xsrf
|
{e2xauthoring-0.3.0.dev4 → e2xauthoring-0.3.2}/e2xauthoring/app/templates/authoring/index.html
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="{{base_url}}/e2x/authoring/static/favicon.ico"><title>e²xauthoring</title><script type="text/javascript">window.base_url="{{ base_url }}",window.url_prefix="{{ url_prefix }}",window.webpackstuff="/e2x/authoring/static/js/main.
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="{{base_url}}/e2x/authoring/static/favicon.ico"><title>e²xauthoring</title><script type="text/javascript">window.base_url="{{ base_url }}",window.url_prefix="{{ url_prefix }}",window.webpackstuff="/e2x/authoring/static/js/main.2835591d.js"</script><script defer="defer" src="{{base_url}}/e2x/authoring/static/js/main.2835591d.js"></script>{%- block head -%} {%- endblock -%}</head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|