Skip to content

Commit 908c6e7

Browse files
authored
Rename PageViewer to DocViewer (#278)
* clean up attributes for viewer and core * delay creation of core until serialized state is expanded
1 parent 0ac7566 commit 908c6e7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+613
-409
lines changed

package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/doenetml-iframe/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "@doenet/doenetml-iframe",
33
"type": "module",
44
"description": "A renderer for DoenetML contained in an iframe",
5-
"version": "0.7.0-alpha23",
5+
"version": "0.7.0-alpha25",
66
"license": "AGPL-3.0-or-later",
77
"homepage": "https://github.com/Doenet/DoenetML#readme",
88
"private": true,

packages/doenetml-iframe/src/iframe-viewer-index.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,6 @@ document.addEventListener("DOMContentLoaded", () => {
3030
args,
3131
});
3232
},
33-
updateAttemptNumber: (args: unknown) => {
34-
messageParentFromViewer({
35-
callback: "updateAttemptNumber",
36-
args,
37-
});
38-
},
3933
setIsInErrorState: (args: unknown) => {
4034
messageParentFromViewer({
4135
callback: "setIsInErrorState",

packages/doenetml-iframe/src/index.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const latestDoenetmlVersion: string = version;
1919

2020
export { mathjaxConfig } from "@doenet/utils";
2121
export type { ErrorDescription, WarningDescription };
22+
export { parseAndCompile } from "@doenet/parser";
2223

2324
import { ExternalVirtualKeyboard } from "@doenet/virtual-keyboard";
2425
import "@doenet/virtual-keyboard/style.css";
@@ -169,9 +170,6 @@ export function DoenetViewer({
169170
data.args,
170171
);
171172
}
172-
case "updateAttemptNumber": {
173-
return doenetViewerProps.updateAttemptNumber?.(data.args);
174-
}
175173
case "setIsInErrorState": {
176174
return doenetViewerProps.setIsInErrorState?.(data.args);
177175
}

packages/doenetml-iframe/src/test-main.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ function App() {
4343
}
4444
standaloneUrl={STANDALONE_BLOB_URL}
4545
cssUrl={STANDALONE_CSS_BLOB_URL}
46+
activityId={"a"}
47+
docId={"1"}
4648
/>
4749

4850
<h4>DoenetML {STANDALONE_VERSION} (locally-built copy):</h4>
@@ -57,6 +59,8 @@ function App() {
5759
}
5860
standaloneUrl={STANDALONE_BLOB_URL}
5961
cssUrl={STANDALONE_CSS_BLOB_URL}
62+
activityId={"a"}
63+
docId={"2"}
6064
/>
6165
</React.Fragment>
6266
);

packages/doenetml-worker/src/Core.js

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -54,25 +54,21 @@ export default class Core {
5454
preliminaryWarnings,
5555
activityId,
5656
cid,
57-
pageNumber,
57+
docId,
5858
attemptNumber = 1,
59-
itemNumber = 1,
60-
serverSaveId,
6159
requestedVariant,
6260
requestedVariantIndex,
6361
theme,
6462
prerender = false,
6563
stateVariableChanges: stateVariableChangesString,
6664
coreId,
67-
updateDataOnContentChange,
6865
}) {
6966
// console.time('core');
7067

7168
this.coreId = coreId;
7269
this.activityId = activityId;
73-
this.pageNumber = pageNumber;
70+
this.docId = docId;
7471
this.attemptNumber = attemptNumber;
75-
this.itemNumber = itemNumber;
7672
this.doenetML = doenetML;
7773
this.allDoenetMLs = allDoenetMLs;
7874
this.serializedDocument = serializedDocument;
@@ -84,9 +80,6 @@ export default class Core {
8480
warnings: [...preliminaryWarnings],
8581
};
8682

87-
this.serverSaveId = serverSaveId;
88-
this.updateDataOnContentChange = updateDataOnContentChange;
89-
9083
this.numerics = new Numerics();
9184
// this.flags = new Proxy(flags, readOnlyProxyHandler); //components shouldn't modify flags
9285
this.flags = flags;
@@ -11355,7 +11348,7 @@ export default class Core {
1135511348
const payload = {
1135611349
activityId: this.activityId,
1135711350
pageCid: this.cid,
11358-
pageNumber: this.pageNumber,
11351+
docId: this.docId,
1135911352
attemptNumber: this.attemptNumber,
1136011353
pageVariantIndex: this.requestedVariant.index,
1136111354
verb: event.verb,
@@ -12928,8 +12921,6 @@ export default class Core {
1292812921
return;
1292912922
}
1293012923

12931-
let saveId = nanoid();
12932-
1293312924
let coreStateString = JSON.stringify(
1293412925
this.cumulativeStateVariableChanges,
1293512926
serializedComponentsReplacer,
@@ -12941,13 +12932,12 @@ export default class Core {
1294112932

1294212933
if (this.flags.allowLocalState) {
1294312934
await idb_set(
12944-
`${this.activityId}|${this.pageNumber}|${this.attemptNumber}|${this.cid}`,
12935+
`${this.activityId}|${this.docId}|${this.attemptNumber}|${this.cid}`,
1294512936
{
1294612937
data_format_version,
1294712938
coreState: coreStateString,
1294812939
rendererState: rendererStateString,
1294912940
coreInfo: this.coreInfoString,
12950-
saveId,
1295112941
},
1295212942
);
1295312943
}
@@ -12966,12 +12956,9 @@ export default class Core {
1296612956
coreInfo: this.coreInfoString,
1296712957
coreState: coreStateString,
1296812958
rendererState: rendererStateString,
12969-
pageNumber: this.pageNumber,
12959+
docId: this.docId,
1297012960
attemptNumber: this.attemptNumber,
1297112961
activityId: this.activityId,
12972-
saveId,
12973-
serverSaveId: this.serverSaveId,
12974-
updateDataOnContentChange: this.updateDataOnContentChange,
1297512962
onSubmission,
1297612963
};
1297712964

@@ -13022,8 +13009,6 @@ export default class Core {
1302213009
}
1302313010
}
1302413011

13025-
this.pageStateToBeSavedToDatabase.serverSaveId = this.serverSaveId;
13026-
1302713012
postMessage({
1302813013
messageType: "saveCreditForItem",
1302913014
state: { ...this.pageStateToBeSavedToDatabase },
@@ -13047,8 +13032,7 @@ export default class Core {
1304713032
postMessage({
1304813033
messageType: "recordSolutionView",
1304913034
activityId: this.activityId,
13050-
itemNumber: this.itemNumber,
13051-
pageNumber: this.pageNumber,
13035+
docId: this.docId,
1305213036
attemptNumber: this.attemptNumber,
1305313037
});
1305413038

packages/doenetml-worker/src/CoreWorker.js

Lines changed: 58 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -121,20 +121,18 @@ globalThis.onmessage = function (e) {
121121

122122
async function initializeWorker({
123123
doenetML,
124-
preliminarySerializedComponents,
125124
flags,
125+
activityId,
126+
docId,
127+
attemptNumber,
128+
requestedVariantIndex,
126129
}) {
127-
// Note: preliminarySerializeComponents is optional.
128-
// If it is undefined, expandDoenetMLsToFullSerializedComponents will parse doenetML
129-
// to create the serialized components
130-
131130
let componentInfoObjects = createComponentInfoObjects(flags);
132131

133132
let expandResult;
134133
try {
135134
expandResult = await expandDoenetMLsToFullSerializedComponents({
136135
doenetMLs: [doenetML],
137-
preliminarySerializedComponents: [preliminarySerializedComponents],
138136
componentInfoObjects,
139137
flags,
140138
});
@@ -143,18 +141,33 @@ async function initializeWorker({
143141
initializeResult = { success: false, errMsg: e.message };
144142
postMessage({
145143
messageType: "initializeResult",
146-
args: initializeResult,
144+
args: {
145+
...initializeResult,
146+
activityId,
147+
docId,
148+
attemptNumber,
149+
requestedVariantIndex,
150+
},
147151
});
148152
postMessage({
149153
messageType: "allPossibleVariants",
150-
args: { success: false },
154+
args: {
155+
success: false,
156+
activityId,
157+
docId,
158+
attemptNumber,
159+
requestedVariantIndex,
160+
},
151161
});
152162
}
153163

154164
coreBaseArgs = {
155165
doenetML,
156-
preliminarySerializedComponents,
157166
flags,
167+
activityId,
168+
docId,
169+
attemptNumber,
170+
requestedVariantIndex,
158171
serializedDocument: addDocumentIfItsMissing(
159172
expandResult.fullSerializedComponents[0],
160173
)[0],
@@ -168,7 +181,13 @@ async function initializeWorker({
168181

169182
postMessage({
170183
messageType: "initializeResult",
171-
args: initializeResult,
184+
args: {
185+
...initializeResult,
186+
activityId,
187+
docId,
188+
attemptNumber,
189+
requestedVariantIndex,
190+
},
172191
});
173192

174193
let allPossibleVariants = await returnAllPossibleVariants(
@@ -178,15 +197,40 @@ async function initializeWorker({
178197

179198
postMessage({
180199
messageType: "allPossibleVariants",
181-
args: { success: true, allPossibleVariants },
200+
args: {
201+
success: true,
202+
allPossibleVariants,
203+
activityId,
204+
docId,
205+
attemptNumber,
206+
requestedVariantIndex,
207+
},
182208
});
183209
}
184210

185211
async function createCore(args) {
186-
if (initializeResult.success) {
187-
let coreArgs = Object.assign({}, coreBaseArgs);
188-
Object.assign(coreArgs, args);
212+
// Wait for `initializeWorker()` for up to around 2 seconds before failing.
213+
// (It is possible that its call to `expandDoenetMLsToFullSerializedComponents()`
214+
// could take time if it needs to retrieve external content.)
215+
const maxIters = 20;
216+
let i = 0;
217+
while (initializeResult.success === undefined) {
218+
const pause100 = function () {
219+
return new Promise((resolve, reject) => {
220+
setTimeout(resolve, 100);
221+
});
222+
};
223+
await pause100();
224+
i++;
225+
if (i > maxIters) {
226+
break;
227+
}
228+
}
189229

230+
let coreArgs = Object.assign({}, coreBaseArgs);
231+
Object.assign(coreArgs, args);
232+
233+
if (initializeResult.success) {
190234
core = new Core(coreArgs);
191235

192236
try {

packages/doenetml-worker/src/test/utils/test-core.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,12 @@ export async function createTestCore({
6767
componentInfoObjects,
6868
activityId: "",
6969
cid: "",
70-
pageNumber: 1,
71-
serverSaveId: "",
70+
docId: "1",
7271
activityVariantIndex: 1,
7372
requestedVariant: null,
7473
requestedVariantIndex: requestedVariantIndex,
7574
stateVariableChanges: "",
7675
coreId: "",
77-
updateDataOnContentChange: null,
7876
theme,
7977
};
8078

packages/doenetml-worker/src/utils/expandDoenetML.js

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99

1010
export async function expandDoenetMLsToFullSerializedComponents({
1111
doenetMLs,
12-
preliminarySerializedComponents = [],
1312
componentInfoObjects,
1413
nPreviousDoenetMLs = 0,
1514
}) {
@@ -22,20 +21,9 @@ export async function expandDoenetMLsToFullSerializedComponents({
2221
for (let [ind, doenetML] of doenetMLs.entries()) {
2322
let errorsForDoenetML = [];
2423
let warningsForDoenetML = [];
25-
let result;
26-
27-
// if we happened to send in the parsed preliminary serialized components,
28-
// then we don't need to parse the DoenetML again
29-
let serializedComponents;
30-
if (preliminarySerializedComponents[ind]) {
31-
serializedComponents = JSON.parse(
32-
JSON.stringify(preliminarySerializedComponents[ind]),
33-
);
34-
} else {
35-
result = parseAndCompile(doenetML);
36-
serializedComponents = result.components;
37-
errorsForDoenetML.push(...result.errors);
38-
}
24+
let result = parseAndCompile(doenetML);
25+
let serializedComponents = result.components;
26+
errorsForDoenetML.push(...result.errors);
3927

4028
serializedComponents = cleanIfHaveJustDocument(serializedComponents);
4129

packages/doenetml/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "@doenet/doenetml",
33
"type": "module",
44
"description": "Semantic markup for building interactive web activities",
5-
"version": "0.7.0-alpha23",
5+
"version": "0.7.0-alpha25",
66
"license": "AGPL-3.0-or-later",
77
"homepage": "https://github.com/Doenet/DoenetML#readme",
88
"private": true,

packages/doenetml/src/EditorViewer/EditorViewer.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { WarningTwoIcon } from "@chakra-ui/icons";
1818
// @ts-ignore
1919
import VariantSelect from "./VariantSelect";
2020
import { CodeMirror } from "@doenet/codemirror";
21-
import { PageViewer } from "../Viewer/PageViewer";
21+
import { DocViewer } from "../Viewer/DocViewer";
2222
import ErrorWarningPopovers from "./ErrorWarningPopovers";
2323
import type { WarningDescription, ErrorDescription } from "@doenet/utils";
2424
import { nanoid } from "nanoid";
@@ -473,7 +473,7 @@ export function EditorViewer({
473473
ref={scrollableContainer}
474474
>
475475
{/* @ts-ignore */}
476-
<PageViewer
476+
<DocViewer
477477
doenetML={viewerDoenetML}
478478
flags={{
479479
showCorrectness: true,

0 commit comments

Comments
 (0)